From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Denis Joseph Barrow" To: ac131313@cygnus.com, "Christoph Arenz" , "Ulrich Weigand" , "Gerhard Tonn" Cc: gdb-patches@sourceware.cygnus.com Subject: gdb patches update Date: Mon, 27 Aug 2001 11:11:00 -0000 Message-id: X-SW-Source: 2001-08/msg00282.html Content-type: multipart/mixed; boundary="----------=_1583534360-29878-7" This is a multi-part message in MIME format... ------------=_1583534360-29878-7 Content-length: 1236 Hi Andrew, The s390x.mt for 64 bit I sent with the last patch was obselete. Also the 64 bit prologue changed in the last 4 months & started using a new 64 bit larl instruction ( I found out about this today the hard way :-) ). To get these changes in I've modified /gdb/configure.tgt deleted gdb/config/s390/s390x.mt & added some extra code to the s390_get_frame_info function to deal with the usage of the new larl instrunction. (See attached file: gdb.s390.270801.config.diff)(See attached file: gdb.s390.270801.core.diff)(See attached file: S390ChangeLog.270801.gdb)(See attached file: S390ChangeLog.270801.Root) 5de1c0cf67ecb4de7a49148828b84647 S390ChangeLog.270801.Root 087c5f4a5c3162769339fa436c25f472 S390ChangeLog.270801.gdb e723eccc7a0f3d89a71d942bfa935702 gdb.s390.270801.config.diff 79b7681a6da451462a804c5defc080d0 gdb.s390.270801.core.diff The new md5sums are. D.J. Barrow Gnu/Linux for S/390 kernel developer eMail: djbarrow@de.ibm.com,barrow_dj@yahoo.com Phone: +49-(0)7031-16-2583 IBM Germany Lab, Schönaicherstr. 220, 71032 Böblingen =?iso-8859-1?Q?gdb.s390.270801.config.diff?= =?iso-8859-1?Q?gdb.s390.270801.core.diff?= =?iso-8859-1?Q?S390ChangeLog.270801.gdb?= =?iso-8859-1?Q?S390ChangeLog.270801.Root?= ------------=_1583534360-29878-7 Content-Type: text/x-diff; charset=us-ascii; name="=?iso-8859-1?Q?gdb.s390.270801.config.diff?=" Content-Disposition: inline; filename="=?iso-8859-1?Q?gdb.s390.270801.config.diff?=" Content-Transfer-Encoding: base64 Content-Length: 1782 LS0tIHNyYy5vcmlnL2NvbmZpZy5zdWIJVGh1IE1hciAyMiAxMjowOToyMCAy MDAxCisrKyBzcmMubmV3L2NvbmZpZy5zdWIJRnJpIEF1ZyAyNCAxOTo0Mjox MSAyMDAxCkBAIC03NDIsNiArNzQyLDEyIEBACiAJcnRwYyB8IHJ0cGMtKikK IAkJYmFzaWNfbWFjaGluZT1yb21wLWlibQogCQk7OworCXMzOTAgfCBzMzkw LSogKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHgg fCBzMzkweC0qICkKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJOzsK IAlzYTI5MjAwKQogCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCiAJCW9zPS11 ZGkKLS0tIHNyYy5vcmlnL2dkYi9jb25maWd1cmUuaG9zdAlUdWUgSnVsIDEw IDIyOjQxOjU0IDIwMDEKKysrIHNyYy5uZXcvZ2RiL2NvbmZpZ3VyZS5ob3N0 CUZyaSBBdWcgMjQgMTk6NDI6MTEgMjAwMQpAQCAtMTYyLDUgKzE2MiwxMCBA QAogdmF4LSotYnNkKikJCWdkYl9ob3N0PXZheGJzZCA7OwogdmF4LSotdWx0 cml4MiopCQlnZGJfaG9zdD12YXh1bHQyIDs7CiB2YXgtKi11bHRyaXgqKQkJ Z2RiX2hvc3Q9dmF4dWx0IDs7Ci0KK3MzOTAqLSotKikgICAgICAgICAgICAg ICBnZGJfaG9zdD1zMzkwIDs7CiBlc2FjCisKKworCisKKwotLS0gc3JjLm9y aWcvZ2RiL2NvbmZpZ3VyZS50Z3QJU3VuIEF1ZyAxMiAwNTozOToxMSAyMDAx CisrKyBzcmMubmV3L2dkYi9jb25maWd1cmUudGd0CU1vbiBBdWcgMjcgMTk6 Mjk6NTIgMjAwMQpAQCAtMjcsNiArMjcsNyBAQAogc3Ryb25nYXJtKikJCWdk Yl90YXJnZXRfY3B1PWFybSA7OwogeHNjYWxlKikJCWdkYl90YXJnZXRfY3B1 PWFybSA7Owogdjg1MCopCQkJZ2RiX3RhcmdldF9jcHU9djg1MCA7OworczM5 MCopICAgICAgICAgICAgICAgICAgZ2RiX3RhcmdldF9jcHU9czM5MCA7Owog KikJCQlnZGJfdGFyZ2V0X2NwdT0kdGFyZ2V0X2NwdSA7OwogCiBlc2FjCkBA IC0yNjEsOSArMjYyLDYgQEAKIHJzNjAwMC0qLWFpeDQqKQkJZ2RiX3Rhcmdl dD1haXg0IDs7CiByczYwMDAtKi0qKQkJZ2RiX3RhcmdldD1yczYwMDAgOzsK IAotczM5MC0qLSopCQlnZGJfdGFyZ2V0PXMzOTAgOzsKLXMzOTB4LSotKikJ CWdkYl90YXJnZXQ9czM5MHggOzsKLQogc2gqLSotcGUpCQlnZGJfdGFyZ2V0 PXdpbmNlIDs7CiBzaC0qLWhtcykJCWdkYl90YXJnZXQ9ZW1iZWQgOzsKIHNo LSotY29mZiopCQlnZGJfdGFyZ2V0PWVtYmVkIDs7CkBAIC0zMTUsNiArMzEz LDcgQEAKIAogejhrLSotY29mZiopCQlnZGJfdGFyZ2V0PXo4ayA7OwogCitz MzkwKi0qLSopICAgICAgICAgICAgICAgZ2RiX3RhcmdldD1zMzkwIDs7CiBl c2FjCiAKIAo= ------------=_1583534360-29878-7 Content-Type: text/x-diff; charset=us-ascii; name="=?iso-8859-1?Q?gdb.s390.270801.core.diff?=" Content-Disposition: inline; filename="=?iso-8859-1?Q?gdb.s390.270801.core.diff?=" Content-Transfer-Encoding: base64 Content-Length: 88231 ZGlmZiAtdSAtciAtTiBzcmMub3JpZy9nZGIvY29uZmlnL3MzOTAvbm0tbGlu dXguaCBzcmMubmV3L2dkYi9jb25maWcvczM5MC9ubS1saW51eC5oCi0tLSBz cmMub3JpZy9nZGIvY29uZmlnL3MzOTAvbm0tbGludXguaAlUaHUgSmFuICAx IDAxOjAwOjAwIDE5NzAKKysrIHNyYy5uZXcvZ2RiL2NvbmZpZy9zMzkwL25t LWxpbnV4LmgJRnJpIEF1ZyAyNCAxOTo0MjowMyAyMDAxCkBAIC0wLDAgKzEs OTggQEAKKy8qIE5hdGl2ZSBzdXBwb3J0IGZvciBMaW51eCBmb3IgUzM5MAor ICAgCisgICBDb3B5cmlnaHQgMTk4NiwgMTk4NywgMTk4OSwgMTk5MiwgMTk5 NiwgMTk5OCwgMjAwMAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisgICBQb3J0ZWQgYnkgRC5KLiBCYXJyb3cgZm9yIElCTSBEZXV0c2No bGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24uCisgICBk ZXJpdmVkIGZyb20gaTM5MC1ubWxpbnV4LmgKKyAgIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJ bmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24s IE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgTk1fTElOVVhf SAorI2RlZmluZSBOTV9MSU5VWF9ICisKKyNpbmNsdWRlICJjb25maWcvbm0t bGludXguaCIKKworI2RlZmluZSBSRUdJU1RFUl9VX0FERFIoYWRkciwgYmxv Y2tlbmQsIHJlZ25vKSBcCisJKGFkZHIpID0gczM5MF9yZWdpc3Rlcl91X2Fk ZHIoKGJsb2NrZW5kKSwocmVnbm8pKTsKK2V4dGVybiBpbnQgczM5MF9yZWdp c3Rlcl91X2FkZHIgKGludCwgaW50KTsKKworLyogUmV0dXJuIHNpemVvZiB1 c2VyIHN0cnVjdCB0byBjYWxsZXJzIGluIGxlc3MgbWFjaGluZSBkZXBlbmRl bnQgcm91dGluZXMgKi8KKworI2RlZmluZSBLRVJORUxfVV9TSVpFIGtlcm5l bF91X3NpemUoKQorZXh0ZXJuIGludCBrZXJuZWxfdV9zaXplICh2b2lkKTsK KworI2RlZmluZSBVX1JFR1NfT0ZGU0VUIDAKKworCisvKiBXZSBkZWZpbmUg dGhpcyBpZiBsaW5rLmggaXMgYXZhaWxhYmxlLCBiZWNhdXNlIHdpdGggRUxG IHdlIHVzZSBTVlI0IHN0eWxlCisgICBzaGFyZWQgbGlicmFyaWVzLiAqLwor CisjaWZkZWYgSEFWRV9MSU5LX0gKKyNkZWZpbmUgU1ZSNF9TSEFSRURfTElC UworI2luY2x1ZGUgInNvbGliLmgiCQkvKiBTdXBwb3J0IGZvciBzaGFyZWQg bGlicmFyaWVzLiAqLworI2VuZGlmCisKKworLyogV0FUQ0hQT0lOVCBTUEVD SUZJQyBTVFVGRiAqLworCisjZGVmaW5lIFRBUkdFVF9IQVNfSEFSRFdBUkVf V0FUQ0hQT0lOVFMKKyNkZWZpbmUgSEFWRV9DT05USU5VQUJMRV9XQVRDSFBP SU5UCisjZGVmaW5lIEhBVkVfU1RFUFBBQkxFX1dBVENIUE9JTlQKKyNkZWZp bmUgdGFyZ2V0X2luc2VydF93YXRjaHBvaW50KGFkZHIsIGxlbiwgdHlwZSkg IFwKKyAgczM5MF9pbnNlcnRfd2F0Y2hwb2ludCAoUElER0VUIChpbmZlcmlv cl9wdGlkKSwgYWRkciwgbGVuLCB0eXBlKQorCisjZGVmaW5lIHRhcmdldF9y ZW1vdmVfd2F0Y2hwb2ludChhZGRyLCBsZW4sIHR5cGUpICBcCisgIHMzOTBf cmVtb3ZlX3dhdGNocG9pbnQgKFBJREdFVCAoaW5mZXJpb3JfcHRpZCksIGFk ZHIsIGxlbikKKworZXh0ZXJuIGludCB3YXRjaF9hcmVhX2NudDsKKy8qIGdk YiBpZiByZWFsbHkgc3R1cGlkICYgY2FsbHMgdGhpcyBhbGwgdGhlIHRpbWUg d2l0aG91dCBhCisgICB3YXRjaHBvaW50IGV2ZW4gYmVpbmcgc2V0ICovCisj ZGVmaW5lIFNUT1BQRURfQllfV0FUQ0hQT0lOVChXKSAgXAorICAod2F0Y2hf YXJlYV9jbnQmJnMzOTBfc3RvcHBlZF9ieV93YXRjaHBvaW50IChQSURHRVQo aW5mZXJpb3JfcHRpZCkpKQorCitleHRlcm4gQ09SRV9BRERSIHMzOTBfc3Rv cHBlZF9ieV93YXRjaHBvaW50IChpbnQpOworCisvKgorICBUeXBlIGNhbiBi ZSAxIGZvciBhIHJlYWRfd2F0Y2hwb2ludCBvciAyIGZvciBhbiBhY2Nlc3Mg d2F0Y2hwb2ludC4KKyAqLworZXh0ZXJuIGludCBzMzkwX2luc2VydF93YXRj aHBvaW50IChpbnQgcGlkLCBDT1JFX0FERFIgYWRkciwgaW50IGxlbiwgaW50 IHJ3KTsKK2V4dGVybiBpbnQgczM5MF9yZW1vdmVfd2F0Y2hwb2ludCAoaW50 IHBpZCwgQ09SRV9BRERSIGFkZHIsIGludCBsZW4pOworI2RlZmluZSBUQVJH RVRfQ0FOX1VTRV9IQVJEV0FSRV9XQVRDSFBPSU5UKHR5cGUsIGNudCwgb3Qp IFwKKwkgKCgodHlwZSkgPT0gYnBfaGFyZHdhcmVfd2F0Y2hwb2ludCl8fCBc CisJICgodHlwZSkgPT0gYnBfd2F0Y2hwb2ludCl8fCBcCisJICgodHlwZSkg PT0gYnBfcmVhZF93YXRjaHBvaW50KSB8fCBcCisgICAgICAgICAoKHR5cGUp ID09IGJwX2FjY2Vzc193YXRjaHBvaW50KSkKKworI3VuZGVmIFBSRVBBUkVf VE9fUFJPQ0VFRAorCitleHRlcm4gdm9pZCBsaW5fbHdwX2F0dGFjaF9sd3Ag KHB0aWRfdCBwdGlkLCBpbnQgdmVyYm9zZSk7CisjZGVmaW5lIEFUVEFDSF9M V1AocHRpZCwgdmVyYm9zZSkgbGluX2x3cF9hdHRhY2hfbHdwICgocHRpZCks ICh2ZXJib3NlKSkKKworCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKK2V4dGVy biB2b2lkIGxpbl90aHJlYWRfZ2V0X3RocmVhZF9zaWduYWxzIChzaWdzZXRf dCAqIG1hc2spOworI2RlZmluZSBHRVRfVEhSRUFEX1NJR05BTFMobWFzaykg bGluX3RocmVhZF9nZXRfdGhyZWFkX3NpZ25hbHMgKG1hc2spCisKKy8qIE5l ZWRlZCBmb3IgczM5MHggKi8KKyNkZWZpbmUgUFRSQUNFX0FSRzNfVFlQRSBs b25nCisjZGVmaW5lIFBUUkFDRV9YRkVSX1RZUEUgbG9uZworI2VuZGlmIC8q IG5tX2xpbnV4LmggKi8KKworCisKKwpkaWZmIC11IC1yIC1OIHNyYy5vcmln L2dkYi9jb25maWcvczM5MC9zMzkwLm1oIHNyYy5uZXcvZ2RiL2NvbmZpZy9z MzkwL3MzOTAubWgKLS0tIHNyYy5vcmlnL2dkYi9jb25maWcvczM5MC9zMzkw Lm1oCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MAorKysgc3JjLm5ldy9nZGIv Y29uZmlnL3MzOTAvczM5MC5taAlGcmkgQXVnIDI0IDE5OjQyOjAzIDIwMDEK QEAgLTAsMCArMSwxNSBAQAorIyBIb3N0OiBTMzkwLCBydW5uaW5nIExpbnV4 CisKK1hNX0ZJTEU9IHhtLWxpbnV4LmgKK1hERVBGSUxFUz0gCitYTV9DTElC Uz0KKworTkFUX0ZJTEU9IG5tLWxpbnV4LmgKK05BVERFUEZJTEVTPSBpbmZw dHJhY2UubyBzb2xpYi5vIGluZnRhcmcubyBmb3JrLWNoaWxkLm8gY29yZWxv dy5vIFwKKwkgICBzMzkwLW5hdC5vIGxpbnV4LXRocmVhZC5vIGNvcmUtYW91 dC5vIGNvcmUtcmVnc2V0Lm8KKyMgcG9zdCA1LjAgbmF0ZGVwZmlsZXMuCitO QVRERVBGSUxFUys9IHRocmVhZC1kYi5vIGxpbi1sd3AubyBwcm9jLXNlcnZp Y2UubyAKK0xPQURMSUJFUyA9IC1sZGwgLXJkeW5hbWljCisKKworCmRpZmYg LXUgLXIgLU4gc3JjLm9yaWcvZ2RiL2NvbmZpZy9zMzkwL3MzOTAubXQgc3Jj Lm5ldy9nZGIvY29uZmlnL3MzOTAvczM5MC5tdAotLS0gc3JjLm9yaWcvZ2Ri L2NvbmZpZy9zMzkwL3MzOTAubXQJVGh1IEphbiAgMSAwMTowMDowMCAxOTcw CisrKyBzcmMubmV3L2dkYi9jb25maWcvczM5MC9zMzkwLm10CUZyaSBBdWcg MjQgMTk6NDI6MDMgMjAwMQpAQCAtMCwwICsxLDcgQEAKKyMgVGFyZ2V0OiBT MzkwIHJ1bm5pbmcgTGludXgKK1RNX0ZJTEU9IHRtLWxpbnV4LmgKK1RERVBG SUxFUz1zMzkwLXRkZXAubyBzb2xpYi5vCisjIFBvc3QgNS4wIHRkZXAtZmls ZXMKK1RERVBGSUxFUys9c29saWItc3ZyNC5vIHNvbGliLWxlZ2FjeS5vCitH REJfTVVMVElfQVJDSD0yCisKZGlmZiAtdSAtciAtTiBzcmMub3JpZy9nZGIv Y29uZmlnL3MzOTAvdG0tbGludXguaCBzcmMubmV3L2dkYi9jb25maWcvczM5 MC90bS1saW51eC5oCi0tLSBzcmMub3JpZy9nZGIvY29uZmlnL3MzOTAvdG0t bGludXguaAlUaHUgSmFuICAxIDAxOjAwOjAwIDE5NzAKKysrIHNyYy5uZXcv Z2RiL2NvbmZpZy9zMzkwL3RtLWxpbnV4LmgJRnJpIEF1ZyAyNCAxOTo0Mjow MyAyMDAxCkBAIC0wLDAgKzEsNDQgQEAKKy8qIFRhcmdldCBkZWZpbml0aW9u cyBmb3IgR0RCIGZvciBhIHMzOTAgcnVubmluZyBMaW51eC4KKyAgIENvcHly aWdodCAoQykgMTk5OS0yMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorICAgQ29udHJpYnV0ZWQgYnkgRC5KLiBCYXJyb3cgKGRqYmFycm93 QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKKyAgIGZvciBJQk0g RGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9u LgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g U3VpdGUgMzMwLCBCb3N0b24sIE1BCisgICAwMjExMS0xMzA3LCBVU0EuICAq LworCisjaWZuZGVmIFRNX0xJTlVYX0gKKyNkZWZpbmUgVE1fTElOVVhfSAor I3VuZGVmICBUQVJHRVRfRUxGNjQKKyNkZWZpbmUgVEFSR0VUX0VMRjY0IChn ZGJhcmNoX3RkZXAgKGN1cnJlbnRfZ2RiYXJjaCktPmludHJlZ19zaXplPT04 KQorCisjaW5jbHVkZSAiY29uZmlnL3RtLWxpbnV4LmgiCisjaW5jbHVkZSAi czM5MC90bS1zMzkwLmgiCisKKworCisjZW5kaWYgLyogVE1fTElOVVhfSCAq LworCisKKworCisKKworCisKKworCisKZGlmZiAtdSAtciAtTiBzcmMub3Jp Zy9nZGIvY29uZmlnL3MzOTAvdG0tczM5MC5oIHNyYy5uZXcvZ2RiL2NvbmZp Zy9zMzkwL3RtLXMzOTAuaAotLS0gc3JjLm9yaWcvZ2RiL2NvbmZpZy9zMzkw L3RtLXMzOTAuaAlUaHUgSmFuICAxIDAxOjAwOjAwIDE5NzAKKysrIHNyYy5u ZXcvZ2RiL2NvbmZpZy9zMzkwL3RtLXMzOTAuaAlGcmkgQXVnIDI0IDE5OjQy OjAzIDIwMDEKQEAgLTAsMCArMSw3MyBAQAorLyogTWFjcm8gZGVmaW5pdGlv bnMgZm9yIEdEQiBvbiBhbiBTMzkwLgorICAgQ29weXJpZ2h0IChDKSAxOTk5 LTIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250 cmlidXRlZCBieSBELkouIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxi YXJyb3dfZGpAeWFob28uY29tKQorICAgZm9yIElCTSBEZXV0c2NobGFuZCBF bnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24uCisKKyAgIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKyAgIAorICAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBG b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs IEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcsIFVTQS4gICovCisKKyNpZiAh ZGVmaW5lZChUTV9TMzkwX0gpCisjZGVmaW5lIFRNX1MzOTBfSCAxCisjZGVm aW5lIEdEQl9UQVJHRVRfSVNfRVNBTUUgKFRBUkdFVF9BUkNISVRFQ1RVUkUt Pm1hY2ggPT0gYmZkX21hY2hfczM5MF9lc2FtZSkKKworI2RlZmluZSBTMzkw X05VTV9HUFJTICAgICAgKDE2KQorI2RlZmluZSBTMzkwX0dQUl9TSVpFICAg ICAgUkVHSVNURVJfU0laRQorI2RlZmluZSBTMzkwX1BTV19NQVNLX1NJWkUg UkVHSVNURVJfU0laRQorI2RlZmluZSBTMzkwX1BTV19BRERSX1NJWkUgUkVH SVNURVJfU0laRQorI2RlZmluZSBTMzkwX05VTV9GUFJTICAgICAgKDE2KQor I2RlZmluZSBTMzkwX0ZQUl9TSVpFICAgICAgKDgpCisjZGVmaW5lIFMzOTBf RlBDX1NJWkUgICAgICAoNCkKKyNkZWZpbmUgUzM5MF9GUENfUEFEX1NJWkUg ICg0KQkvKiBnY2MgaW5zaXN0cyBvbiBhbGlnbmluZyB0aGUgZnByZWdzICov CisjZGVmaW5lIFMzOTBfTlVNX0NSUyAgICAgICAoMTYpCisjZGVmaW5lIFMz OTBfQ1JfU0laRSAgICAgICBSRUdJU1RFUl9TSVpFCisjZGVmaW5lIFMzOTBf TlVNX0FDUlMgICAgICAoMTYpCisjZGVmaW5lIFMzOTBfQUNSX1NJWkUgICAg ICAoNCkKKworI2RlZmluZSBTMzkwX05VTV9SRUdTICAgICAgKDIrUzM5MF9O VU1fR1BSUytTMzkwX05VTV9BQ1JTK1MzOTBfTlVNX0NSUysxK1MzOTBfTlVN X0ZQUlMpCisjZGVmaW5lIFMzOTBfRklSU1RfQUNSICAgICAoMitTMzkwX05V TV9HUFJTKQorI2RlZmluZSBTMzkwX0xBU1RfQUNSICAgICAgKFMzOTBfRklS U1RfQUNSK1MzOTBfTlVNX0FDUlMtMSkKKyNkZWZpbmUgUzM5MF9GSVJTVF9D UiAgICAgIChTMzkwX0ZJUlNUX0FDUitTMzkwX05VTV9BQ1JTKQorI2RlZmlu ZSBTMzkwX0xBU1RfQ1IgICAgICAgKFMzOTBfRklSU1RfQ1IrUzM5MF9OVU1f Q1JTLTEpCisKKyNkZWZpbmUgUzM5MF9QU1dNX1JFR05VTSAgICAwCisjZGVm aW5lIFMzOTBfUENfUkVHTlVNICAgICAgMQorI2RlZmluZQlTMzkwX0dQMF9S RUdOVU0gICAgIDIJLyogR1BSIHJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgUzM5 MF9HUF9MQVNUX1JFR05VTSAoUzM5MF9HUDBfUkVHTlVNK1MzOTBfTlVNX0dQ UlMtMSkKKy8qIFVzdWFsbHkgcmV0dXJuIGFkZHJlc3MgKi8KKyNkZWZpbmUg UzM5MF9SRVRBRERSX1JFR05VTSAoUzM5MF9HUDBfUkVHTlVNKzE0KQorLyog Q29udGFpbnMgYWRkcmVzcyBvZiB0b3Agb2Ygc3RhY2sgKi8KKyNkZWZpbmUg UzM5MF9TUF9SRUdOVU0gICAgICAoUzM5MF9HUDBfUkVHTlVNKzE1KQorLyog bmVlZGVkIGluIGZpbmR2YXIuYyBzdGlsbCAqLwkKKyNkZWZpbmUgUzM5MF9G UF9SRUdOVU0gICAgIFMzOTBfU1BfUkVHTlVNCQorI2RlZmluZSBTMzkwX0ZS QU1FX1JFR05VTSAgKFMzOTBfR1AwX1JFR05VTSsxMSkKKyNkZWZpbmUgUzM5 MF9GUENfUkVHTlVNICAgIChTMzkwX0dQMF9SRUdOVU0rUzM5MF9OVU1fR1BS UytTMzkwX05VTV9BQ1JTK1MzOTBfTlVNX0NSUykKKy8qIEZQUiAoRmxvYXRp bmcgcG9pbnQpIHJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgUzM5MF9GUDBfUkVH TlVNICAgIChTMzkwX0ZQQ19SRUdOVU0rMSkKKy8qIExhc3QgZmxvYXRpbmcg cG9pbnQgcmVnaXN0ZXIgKi8JCisjZGVmaW5lIFMzOTBfRlBMQVNUX1JFR05V TSAoUzM5MF9GUDBfUkVHTlVNK1MzOTBfTlVNX0ZQUlMtMSkJCisjZGVmaW5l IFMzOTBfTEFTVF9SRUdOVU0gICBTMzkwX0ZQTEFTVF9SRUdOVU0KKworI2Vu ZGlmIC8qIGlmbmRlZiBUTV9TMzkwX0ggKi8KKworCisKKworCisKKworCisK ZGlmZiAtdSAtciAtTiBzcmMub3JpZy9nZGIvY29uZmlnL3MzOTAveG0tbGlu dXguaCBzcmMubmV3L2dkYi9jb25maWcvczM5MC94bS1saW51eC5oCi0tLSBz cmMub3JpZy9nZGIvY29uZmlnL3MzOTAveG0tbGludXguaAlUaHUgSmFuICAx IDAxOjAwOjAwIDE5NzAKKysrIHNyYy5uZXcvZ2RiL2NvbmZpZy9zMzkwL3ht LWxpbnV4LmgJRnJpIEF1ZyAyNCAxOTo0MjowMyAyMDAxCkBAIC0wLDAgKzEs MzYgQEAKKy8qIE5hdGl2ZSBzdXBwb3J0IGZvciBHTlUvTGludXgsIGZvciBH REIsIHRoZSBHTlUgZGVidWdnZXIuCisgICBDb3B5cmlnaHQgKEMpIDE5OTkt MjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRy aWJ1dGVkIGJ5IEQuSi4gQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJh cnJvd19kakB5YWhvby5jb20pCisgICBmb3IgSUJNIERldXRzY2hsYW5kIEVu dHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbi4KKworICAgVGhpcyBm aWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5k YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9z dG9uLCBNQQorICAgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2lmbmRlZiBY TV9MSU5VWF9ICisjZGVmaW5lIFhNX0xJTlVYX0gKKworI2RlZmluZSBIT1NU X0JZVEVfT1JERVIgQklHX0VORElBTgorCisKKy8qIFRoaXMgaXMgdGhlIGFt b3VudCB0byBzdWJ0cmFjdCBmcm9tIHUudV9hcjAKKyAgIHRvIGdldCB0aGUg b2Zmc2V0IGluIHRoZSBjb3JlIGZpbGUgb2YgdGhlIHJlZ2lzdGVyIHZhbHVl cy4gICovCisjZGVmaW5lIEtFUk5FTF9VX0FERFIgMHgwCisKKyNlbmRpZiAv KiAjaWZuZGVmIFhNX0xJTlVYX0ggKi8KKworCisKLS0tIC9kZXYvbnVsbAlU aHUgSmFuICAxIDAxOjAwOjAwIDE5NzAKKysrIHNyYy5uZXcvZ2RiL3MzOTAt bmF0LmMJRnJpIEF1ZyAyNCAxOTo0MjowMyAyMDAxCkBAIC0wLDAgKzEsMjk4 IEBACisvKiBTMzkwIG5hdGl2ZS1kZXBlbmRlbnQgY29kZSBmb3IgR0RCLCB0 aGUgR05VIGRlYnVnZ2VyLgorICAgQ29weXJpZ2h0IDE5OTktMjAwMSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYworICAgQ29udHJpYnV0ZWQgYnkg RC5KLiBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlh aG9vLmNvbSkKKyAgIGZvciBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcg R21iSCwgSUJNIENvcnBvcmF0aW9uLgorICAgVGhpcyBmaWxlIGlzIHBhcnQg b2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y CisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4s IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAg MDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNp bmNsdWRlICJ0bS5oIgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNs dWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5o PgorI2luY2x1ZGUgPHN5cy9wcm9jZnMuaD4KKyNpbmNsdWRlIDxzeXMvdXNl ci5oPgorI2luY2x1ZGUgPHZhbHVlLmg+CisjaWZuZGVmIG9mZnNldG9mCisj ZGVmaW5lIG9mZnNldG9mKHR5cGUsbWVtYmVyKSAoKHNpemVfdCkgJigodHlw ZSAqKTApLT5tZW1iZXIpCisjZW5kaWYKKworCitpbnQKK3MzOTBfcmVnaXN0 ZXJfdV9hZGRyIChpbnQgYmxvY2tlbmQsIGludCByZWdudW0pCit7CisgIGlu dCByZXR2YWw7CisKKyAgaWYgKHJlZ251bSA+PSBTMzkwX0dQMF9SRUdOVU0g JiYgcmVnbnVtIDw9IFMzOTBfR1BfTEFTVF9SRUdOVU0pCisgICAgcmV0dmFs ID0gUFRfR1BSMCArICgocmVnbnVtIC0gUzM5MF9HUDBfUkVHTlVNKSAqIFMz OTBfR1BSX1NJWkUpOworICBlbHNlIGlmIChyZWdudW0gPj0gUzM5MF9QU1dN X1JFR05VTSAmJiByZWdudW0gPD0gUzM5MF9QQ19SRUdOVU0pCisgICAgcmV0 dmFsID0gUFRfUFNXTUFTSyArICgocmVnbnVtIC0gUzM5MF9QU1dNX1JFR05V TSkgKiBTMzkwX1BTV19NQVNLX1NJWkUpOworICBlbHNlIGlmIChyZWdudW0g PT0gUzM5MF9GUENfUkVHTlVNKQorICAgIHJldHZhbCA9IFBUX0ZQQzsKKyAg ZWxzZSBpZiAocmVnbnVtID49IFMzOTBfRlAwX1JFR05VTSAmJiByZWdudW0g PD0gUzM5MF9GUExBU1RfUkVHTlVNKQorICAgIHJldHZhbCA9CisjaWYgQ09O RklHX0FSQ0hfUzM5MFgKKyAgICAgIFBUX0ZQUjAKKyNlbHNlCisgICAgICBQ VF9GUFIwX0hJCisjZW5kaWYKKyAgICAgICsgKChyZWdudW0gLSBTMzkwX0ZQ MF9SRUdOVU0pICogUzM5MF9GUFJfU0laRSk7CisgIGVsc2UgaWYgKHJlZ251 bSA+PSBTMzkwX0ZJUlNUX0FDUiAmJiByZWdudW0gPD0gUzM5MF9MQVNUX0FD UikKKyAgICByZXR2YWwgPSBQVF9BQ1IwICsgKChyZWdudW0gLSBTMzkwX0ZJ UlNUX0FDUikgKiBTMzkwX0FDUl9TSVpFKTsKKyAgZWxzZSBpZiAocmVnbnVt ID49IChTMzkwX0ZJUlNUX0NSICsgOSkgJiYgcmVnbnVtIDw9IChTMzkwX0ZJ UlNUX0NSICsgMTEpKQorICAgIHJldHZhbCA9IFBUX0NSXzkgKyAoKHJlZ251 bSAtIChTMzkwX0ZJUlNUX0NSICsgOSkpICogUzM5MF9DUl9TSVpFKTsKKyAg ZWxzZQorICAgIHsKKyAgICAgIGludGVybmFsX2Vycm9yICgiczM5MF9yZWdp c3Rlcl91X2FkZHIgaW52YWxpZCByZWdudW0gJXMgJWQgcmVnbnVtPSVkIiwg X19GSUxFX18sCisJICAgICAoaW50KV9fTElORV9fLCByZWdudW0pOworICAg ICAgcmV0dmFsID0gMDsKKyAgICB9CisgIHJldHVybiByZXR2YWwgKyBibG9j a2VuZDsKK30KKworLyogd2F0Y2hfYXJlYXMgYXJlIHJlcXVpcmVkIGlmIHlv dSBwdXQgMiBvciBtb3JlIHdhdGNocG9pbnRzIG9uIHRoZSBzYW1lIAorICAg YWRkcmVzcyBvciBvdmVybGFwcGluZyBhcmVhcyBnZGIgd2lsbCBjYWxsIHVz IHRvIGRlbGV0ZSB0aGUgd2F0Y2hwb2ludCAKKyAgIG1vcmUgdGhhbiBvbmNl IHdoZW4gd2UgdHJ5IHRvIGRlbGV0ZSB0aGVtLgorICAgYXR0ZW1wdGVkIHJl ZmVyZW5jZSBjb3VudGluZyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBhcmVh cyB1bmZvcnR1bmF0ZWx5CisgICB0aGV5IGRpZG4ndCBzaHJpbmsgd2hlbiBh cmVhcyBoYWQgdG8gYmUgc3BsaXQgb3ZlcmxhcHBpbmcgb2NjdXJzLiAqLwor c3RydWN0IHdhdGNoX2FyZWE7Cit0eXBlZGVmIHN0cnVjdCB3YXRjaF9hcmVh IHdhdGNoX2FyZWE7CitzdHJ1Y3Qgd2F0Y2hfYXJlYQoreworICB3YXRjaF9h cmVhICpuZXh0OworICBDT1JFX0FERFIgbG9fYWRkcjsKKyAgQ09SRV9BRERS IGhpX2FkZHI7Cit9OworCitzdGF0aWMgd2F0Y2hfYXJlYSAqd2F0Y2hfYmFz ZSA9IE5VTEw7CitpbnQgd2F0Y2hfYXJlYV9jbnQgPSAwOworc3RhdGljIENP UkVfQUREUiB3YXRjaF9sb19hZGRyID0gMCwgd2F0Y2hfaGlfYWRkciA9IDA7 CisKKworCitDT1JFX0FERFIgczM5MF9zdG9wcGVkX2J5X3dhdGNocG9pbnQg KGludCBwaWQpCit7CisgIHBlcl9sb3djb3JlX2JpdHMgcGVyX2xvd2NvcmU7 CisgIHB0cmFjZV9hcmVhIHBhcmVhOworCisgIHBhcmVhLmxlbiA9IHNpemVv ZiAocGVyX2xvd2NvcmUpOworICBwYXJlYS5wcm9jZXNzX2FkZHIgPSAoYWRk cl90KSAmIHBlcl9sb3djb3JlOworICBwYXJlYS5rZXJuZWxfYWRkciA9IG9m ZnNldG9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0LHBlcl9pbmZvLmxvd2Nv cmUpOworICBwdHJhY2UgKFBUUkFDRV9QRUVLVVNSX0FSRUEsIHBpZCwgJnBh cmVhKTsKKyAgcmV0dXJuICgocGVyX2xvd2NvcmUucGVyY19zdG9yYWdlX2Fs dGVyYXRpb24gPT0gMSkgJiYKKwkgICAocGVyX2xvd2NvcmUucGVyY19zdG9y ZV9yZWFsX2FkZHJlc3MgPT0gMCkpOworfQorCisKK3ZvaWQKK3MzOTBfZml4 X3dhdGNoX3BvaW50cyAoaW50IHBpZCkKK3sKKyAgcGVyX3N0cnVjdCBwZXJf aW5mbzsKKyAgcHRyYWNlX2FyZWEgcGFyZWE7CisKKyAgcGFyZWEubGVuID0g c2l6ZW9mIChwZXJfaW5mbyk7CisgIHBhcmVhLnByb2Nlc3NfYWRkciA9IChh ZGRyX3QpICYgcGVyX2luZm87CisgIHBhcmVhLmtlcm5lbF9hZGRyID0gUFRf Q1JfOTsKKyAgcHRyYWNlIChQVFJBQ0VfUEVFS1VTUl9BUkVBLCBwaWQsICZw YXJlYSk7CisgIC8qIFRoZSBrZXJuZWwgYXV0b21hdGljYWxseSBzZXRzIHRo ZSBwc3cgZm9yIHBlciBkZXBlbmRpbmcgKi8KKyAgLyogb24gd2hldGhlciB0 aGUgcGVyIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBzZXQgZm9yIGV2ZW50IHJl Y29yZGluZyAqLworICAvKiAmIHNldHMgY3I5ICYgY3IxMCBhcHByb3ByaWF0 ZWx5IGFsc28gKi8KKyAgaWYgKHdhdGNoX2FyZWFfY250KQorICAgIHsKKyAg ICAgIHBlcl9pbmZvLmNvbnRyb2xfcmVncy5iaXRzLmVtX3N0b3JhZ2VfYWx0 ZXJhdGlvbiA9IDE7CisgICAgICBwZXJfaW5mby5jb250cm9sX3JlZ3MuYml0 cy5zdG9yYWdlX2FsdF9zcGFjZV9jdGwgPSAxOworICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIHBlcl9pbmZvLmNvbnRyb2xfcmVncy5iaXRzLmVtX3N0 b3JhZ2VfYWx0ZXJhdGlvbiA9IDA7CisgICAgICBwZXJfaW5mby5jb250cm9s X3JlZ3MuYml0cy5zdG9yYWdlX2FsdF9zcGFjZV9jdGwgPSAwOworICAgIH0K KyAgcGVyX2luZm8uc3RhcnRpbmdfYWRkciA9IHdhdGNoX2xvX2FkZHI7Cisg IHBlcl9pbmZvLmVuZGluZ19hZGRyID0gd2F0Y2hfaGlfYWRkcjsKKyAgcHRy YWNlIChQVFJBQ0VfUE9LRVVTUl9BUkVBLCBwaWQsICZwYXJlYSk7Cit9CisK K2ludAorczM5MF9pbnNlcnRfd2F0Y2hwb2ludCAoaW50IHBpZCwgQ09SRV9B RERSIGFkZHIsIGludCBsZW4sIGludCBydykKK3sKKyAgQ09SRV9BRERSIGhp X2FkZHIgPSBhZGRyICsgbGVuIC0gMTsKKyAgd2F0Y2hfYXJlYSAqbmV3YXJl YSA9ICh3YXRjaF9hcmVhICopIG1hbGxvYyAoc2l6ZW9mICh3YXRjaF9hcmVh KSk7CisKKworICBpZiAobmV3YXJlYSkKKyAgICB7CisgICAgICBuZXdhcmVh LT5uZXh0ID0gd2F0Y2hfYmFzZTsKKyAgICAgIHdhdGNoX2Jhc2UgPSBuZXdh cmVhOworICAgICAgd2F0Y2hfbG9fYWRkciA9IG1pbiAod2F0Y2hfbG9fYWRk ciwgYWRkcik7CisgICAgICB3YXRjaF9oaV9hZGRyID0gbWF4ICh3YXRjaF9o aV9hZGRyLCBoaV9hZGRyKTsKKyAgICAgIG5ld2FyZWEtPmxvX2FkZHIgPSBh ZGRyOworICAgICAgbmV3YXJlYS0+aGlfYWRkciA9IGhpX2FkZHI7CisgICAg ICBpZiAod2F0Y2hfYXJlYV9jbnQgPT0gMCkKKwl7CisJICB3YXRjaF9sb19h ZGRyID0gbmV3YXJlYS0+bG9fYWRkcjsKKwkgIHdhdGNoX2hpX2FkZHIgPSBu ZXdhcmVhLT5oaV9hZGRyOworCX0KKyAgICAgIHdhdGNoX2FyZWFfY250Kys7 CisgICAgICBzMzkwX2ZpeF93YXRjaF9wb2ludHMgKHBpZCk7CisgICAgfQor ICByZXR1cm4gbmV3YXJlYSA/IDAgOiAtMSA7Cit9CisKKworaW50CitzMzkw X3JlbW92ZV93YXRjaHBvaW50IChpbnQgcGlkLCBDT1JFX0FERFIgYWRkciwg aW50IGxlbikKK3sKKyAgd2F0Y2hfYXJlYSAqY3VyciA9IHdhdGNoX2Jhc2Us ICpwcmV2LCAqbWF0Y2hDdXJyOworICBDT1JFX0FERFIgaGlfYWRkciA9IGFk ZHIgKyBsZW4gLSAxOworICBDT1JFX0FERFIgd2F0Y2hfc2Vjb25kX2xvX2Fk ZHIgPSAweGZmZmZmZmZmVUwsIHdhdGNoX3NlY29uZF9oaV9hZGRyID0gMDsK KyAgaW50IGxvX2FkZHJfcmVmX2NudCwgaGlfYWRkcl9yZWZfY250OworICBw cmV2ID0gbWF0Y2hDdXJyID0gTlVMTDsKKyAgbG9fYWRkcl9yZWZfY250ID0g KGFkZHIgPT0gd2F0Y2hfbG9fYWRkcik7CisgIGhpX2FkZHJfcmVmX2NudCA9 IChhZGRyID09IHdhdGNoX2hpX2FkZHIpOworICB3aGlsZSAoY3VycikKKyAg ICB7CisgICAgICBpZiAobWF0Y2hDdXJyID09IE5VTEwpCisJeworCSAgaWYg KGN1cnItPmxvX2FkZHIgPT0gYWRkciAmJiBjdXJyLT5oaV9hZGRyID09IGhp X2FkZHIpCisJICAgIHsKKwkgICAgICBtYXRjaEN1cnIgPSBjdXJyOworCSAg ICAgIGlmIChwcmV2KQorCQlwcmV2LT5uZXh0ID0gY3Vyci0+bmV4dDsKKwkg ICAgICBlbHNlCisJCXdhdGNoX2Jhc2UgPSBjdXJyLT5uZXh0OworCSAgICB9 CisJICBwcmV2ID0gY3VycjsKKwl9CisgICAgICBpZiAobG9fYWRkcl9yZWZf Y250KQorCXsKKwkgIGlmICh3YXRjaF9sb19hZGRyID09IGN1cnItPmxvX2Fk ZHIpCisJICAgIGxvX2FkZHJfcmVmX2NudCsrOworCSAgaWYgKGN1cnItPmxv X2FkZHIgPiB3YXRjaF9sb19hZGRyICYmCisJICAgICAgY3Vyci0+bG9fYWRk ciA8IHdhdGNoX3NlY29uZF9sb19hZGRyKQorCSAgICB3YXRjaF9zZWNvbmRf bG9fYWRkciA9IGN1cnItPmxvX2FkZHI7CisJfQorICAgICAgaWYgKGhpX2Fk ZHJfcmVmX2NudCkKKwl7CisJICBpZiAod2F0Y2hfaGlfYWRkciA9PSBjdXJy LT5oaV9hZGRyKQorCSAgICBoaV9hZGRyX3JlZl9jbnQrKzsKKwkgIGlmIChj dXJyLT5oaV9hZGRyIDwgd2F0Y2hfaGlfYWRkciAmJgorCSAgICAgIGN1cnIt PmhpX2FkZHIgPiB3YXRjaF9zZWNvbmRfaGlfYWRkcikKKwkgICAgd2F0Y2hf c2Vjb25kX2hpX2FkZHIgPSBjdXJyLT5oaV9hZGRyOworCX0KKyAgICAgIGN1 cnIgPSBjdXJyLT5uZXh0OworICAgIH0KKyAgaWYgKG1hdGNoQ3VycikKKyAg ICB7CisgICAgICBmcmVlIChtYXRjaEN1cnIpOworICAgICAgd2F0Y2hfYXJl YV9jbnQtLTsKKyAgICAgIGlmICh3YXRjaF9hcmVhX2NudCkKKwl7CisJICBp ZiAobG9fYWRkcl9yZWZfY250ID09IDIpCisJICAgIHdhdGNoX2xvX2FkZHIg PSB3YXRjaF9zZWNvbmRfbG9fYWRkcjsKKwkgIGlmIChoaV9hZGRyX3JlZl9j bnQgPT0gMikKKwkgICAgd2F0Y2hfaGlfYWRkciA9IHdhdGNoX3NlY29uZF9o aV9hZGRyOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB3YXRjaF9sb19hZGRy ID0gd2F0Y2hfaGlfYWRkciA9IDA7CisJfQorICAgICAgczM5MF9maXhfd2F0 Y2hfcG9pbnRzIChwaWQpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk ZXJyLAorCQkJICAiQXR0ZW1wdCB0byByZW1vdmUgbm9uZXhpc3RlbnQgd2F0 Y2hwb2ludCBpbiBzMzkwX3JlbW92ZV93YXRjaHBvaW50XG4iKTsKKyAgICAg IHJldHVybiAtMTsKKyAgICB9Cit9CisKK2ludAora2VybmVsX3Vfc2l6ZSAo dm9pZCkKK3sKKyAgcmV0dXJuIHNpemVvZihzdHJ1Y3QgdXNlcik7Cit9CisK KworI2lmICAoZGVmaW5lZCAoUzM5MF9GUDBfUkVHTlVNKSAmJiBkZWZpbmVk IChIQVZFX0ZQUkVHU0VUX1QpICYmIGRlZmluZWQoSEFWRV9TWVNfUFJPQ0ZT X0gpICYmIGRlZmluZWQgKEhBVkVfR1JFR1NFVF9UKSkKK3ZvaWQKK3N1cHBs eV9ncmVnc2V0IChncmVnc2V0X3QgKiBncmVnc2V0cCkKK3sKKyAgaW50IHJl Z2k7CisgIGdyZWdfdCAqZ3JlZ3A9KGdyZWdfdCAqKWdyZWdzZXRwOworCisg IHN1cHBseV9yZWdpc3RlciAoUzM5MF9QU1dNX1JFR05VTSwoY2hhciAqKSZn cmVncFtTMzkwX1BTV01fUkVHTlVNXSk7CisgIHN1cHBseV9yZWdpc3RlciAo UzM5MF9QQ19SRUdOVU0sIChjaGFyICopJmdyZWdwW1MzOTBfUENfUkVHTlVN XSk7CisgIGZvciAocmVnaSA9IDA7IHJlZ2kgPCBTMzkwX05VTV9HUFJTOyBy ZWdpKyspCisgICAgc3VwcGx5X3JlZ2lzdGVyIChTMzkwX0dQMF9SRUdOVU0g KyByZWdpLCAoY2hhciAqKSAmZ3JlZ3BbUzM5MF9HUDBfUkVHTlVNK3JlZ2ld KTsKKyAgZm9yIChyZWdpID0gMDsgcmVnaSA8IFMzOTBfTlVNX0FDUlM7IHJl Z2krKykKKyAgICBzdXBwbHlfcmVnaXN0ZXIgKFMzOTBfRklSU1RfQUNSICsg cmVnaSwgKGNoYXIgKikgJmdyZWdwW1MzOTBfRklSU1RfQUNSK3JlZ2ldKTsK KyAgLyogdW5mb3J0dW5hdGVseSB0aGlzIGlzbid0IGluIGdyZWdzZXRwICov CisgIGZvciAocmVnaSA9IDA7IHJlZ2kgPCBTMzkwX05VTV9DUlM7IHJlZ2kr KykKKyAgICBzdXBwbHlfcmVnaXN0ZXIgKFMzOTBfRklSU1RfQ1IgKyByZWdp LCBOVUxMKTsKK30KKworCit2b2lkCitzdXBwbHlfZnByZWdzZXQgKGZwcmVn c2V0X3QgKiBmcHJlZ3NldHApCit7CisgIGludCByZWdpOworCisgIHN1cHBs eV9yZWdpc3RlciAoUzM5MF9GUENfUkVHTlVNLCAoY2hhciAqKSAmZnByZWdz ZXRwLT5mcGMpOworICBmb3IgKHJlZ2kgPSAwOyByZWdpIDwgUzM5MF9OVU1f RlBSUzsgcmVnaSsrKQorICAgIHN1cHBseV9yZWdpc3RlciAoUzM5MF9GUDBf UkVHTlVNICsgcmVnaSwgKGNoYXIgKikgJmZwcmVnc2V0cC0+ZnByc1tyZWdp XSk7CisKK30KKwordm9pZAorZmlsbF9ncmVnc2V0IChncmVnc2V0X3QgKiBn cmVnc2V0cCwgaW50IHJlZ25vKQoreworICBncmVnX3QgKmdyZWdwPShncmVn X3QgKilncmVnc2V0cDsKKworICBpZiAocmVnbm8gPj0gUzM5MF9GSVJTVF9D UiAmJiByZWdubyA8PSBTMzkwX0xBU1RfQ1IpCisgICAgc3VwcGx5X3JlZ2lz dGVyIChyZWdubywgTlVMTCk7CisgIGVsc2UgaWYgKHJlZ25vICE9IC0xKQor ICAgIHN1cHBseV9yZWdpc3RlciAocmVnbm8sKGNoYXIgKikmZ3JlZ3BbcmVn bm9dKTsKKyAgZWxzZQorICAgIHN1cHBseV9ncmVnc2V0IChncmVnc2V0cCk7 Cit9CisKKy8qICBHaXZlbiBhIHBvaW50ZXIgdG8gYSBmbG9hdGluZyBwb2lu dCByZWdpc3RlciBzZXQgaW4gL3Byb2MgZm9ybWF0CisgICAoZnByZWdzZXRf dCAqKSwgdXBkYXRlIHRoZSByZWdpc3RlciBzcGVjaWZpZWQgYnkgUkVHTk8g ZnJvbSBnZGIncyBpZGVhCisgICBvZiB0aGUgY3VycmVudCBmbG9hdGluZyBw b2ludCByZWdpc3RlciBzZXQuICBJZiBSRUdOTyBpcyAtMSwgdXBkYXRlCisg ICB0aGVtIGFsbC4gKi8KKwordm9pZAorZmlsbF9mcHJlZ3NldCAoZnByZWdz ZXRfdCAqIGZwcmVnc2V0cCwgaW50IHJlZ25vKQoreworICBpZiAocmVnbm8g PT0gLTEpCisgICAgc3VwcGx5X2ZwcmVnc2V0IChmcHJlZ3NldHApOworICBl bHNlCisgICAgc3VwcGx5X3JlZ2lzdGVyIChyZWdubywKKwkJICAgICAmKChj aGFyICopIGZwcmVnc2V0cClbUkVHSVNURVJfQllURSAocmVnbm8pIC0KKwkJ CQkJICAgUkVHSVNURVJfQllURSAoUzM5MF9GUENfUkVHTlVNKV0pOworfQor CisKKyNlbHNlCisjZXJyb3IgIlRoZXJlIGFyZSBhIGZldyBwb3NzaWJpbGl0 aWVzIGhlcmUiCisjZXJyb3IgIjEpIFlvdSBhcmVuJ3QgY29tcGlsaW5nIGZv ciBsaW51eCAmIGRvbid0IG5lZWQgYSBjb3JlIGR1bXBzIHRvIHdvcmsuIgor I2Vycm9yICIyKSBUaGUgaGVhZGVyIGZpbGVzIHN5cy9lbGYuaCBzeXMvdXNl ci5oIHN5cy9wdHJhY2UuaCAmIHN5cy9wcm9jZnMuaCIKKyNlcnJvciAibGli YyBmaWxlcyBhcmUgaW5jb25zaXN0ZW50IHdpdGggbGludXgvaW5jbHVkZS9h c20tczM5MC8iCisjZXJyb3IgIjMpIHlvdSBkaWRuJ3QgZG8gYSBjb21wbGV0 ZWx5IGNsZWFuIGJ1aWxkICYgZGVsZXRlIGNvbmZpZy5jYWNoZS4iCisjZW5k aWYKKwotLS0gL2Rldi9udWxsCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MAor Kysgc3JjLm5ldy9nZGIvczM5MC10ZGVwLmMJTW9uIEF1ZyAyNyAxODoxMjox OSAyMDAxCkBAIC0wLDAgKzEsMTQ2NCBAQAorLyogVGFyZ2V0LWRlcGVuZGVu dCBjb2RlIGZvciBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisgICBDb3B5cmln aHQgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENv bnRyaWJ1dGVkIGJ5IEQuSi4gQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29t LGJhcnJvd19kakB5YWhvby5jb20pCisgICBmb3IgSUJNIERldXRzY2hsYW5k IEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbi4KKworICAgVGhp cyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Yg dGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZv dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwg Qm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2RlZmlu ZSBTMzkwX1RERVAJCS8qIGZvciBzcGVjaWFsIG1hY3JvcyBpbiB0bS1zMzkw LmggKi8KKyNpbmNsdWRlIDxkZWZzLmg+CisjaW5jbHVkZSAiYXJjaC11dGls cy5oIgorI2luY2x1ZGUgImZyYW1lLmgiCisjaW5jbHVkZSAiaW5mZXJpb3Iu aCIKKyNpbmNsdWRlICJzeW10YWIuaCIKKyNpbmNsdWRlICJ0YXJnZXQuaCIK KyNpbmNsdWRlICJnZGJjb3JlLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisj aW5jbHVkZSAic3ltZmlsZS5oIgorI2luY2x1ZGUgIm9iamZpbGVzLmgiCisj aW5jbHVkZSAidG0uaCIKKyNpbmNsdWRlICIuLi9iZmQvYmZkLmgiCisjaW5j bHVkZSAiZmxvYXRmb3JtYXQuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgor CisKKyNkZWZpbmUgUzM5MF9NQVhfSU5TVFJfU0laRSAoNikKKyNkZWZpbmUg UzM5MF9TWVNDQUxMX09QQ09ERSAoMHgwYSkKKyNkZWZpbmUgUzM5MF9TWVND QUxMX1NJWkUgICAoMikKKworI2RlZmluZSBTMzkwX1NJR0NPTlRFWFRfU1JF R1NfT0ZGU0VUICg4KQorI2RlZmluZSBTMzkwWF9TSUdDT05URVhUX1NSRUdT X09GRlNFVCAoOCkKKyNkZWZpbmUgUzM5MF9TSUdSRUdTX0ZQMF9PRkZTRVQg ICAgICAgKDE0NCkKKyNkZWZpbmUgUzM5MFhfU0lHUkVHU19GUDBfT0ZGU0VU ICAgICAgKDIxNikKKyNkZWZpbmUgUzM5MF9VQ19NQ09OVEVYVF9PRkZTRVQg ICAgKDI1NikKKyNkZWZpbmUgUzM5MFhfVUNfTUNPTlRFWFRfT0ZGU0VUICAg KDM0NCkKKworI2RlZmluZSBTMzkwX1NUQUNLX0ZSQU1FX09WRVJIRUFEICAo R0RCX1RBUkdFVF9JU19FU0FNRSA/IDE2MDo5NikKKworI2RlZmluZSBTMzkw X0FDUjBfT0ZGU0VUICgoUzM5MF9QU1dfTUFTS19TSVpFK1MzOTBfUFNXX0FE RFJfU0laRSkrKFMzOTBfR1BSX1NJWkUqUzM5MF9OVU1fR1BSUykpCisjZGVm aW5lIFMzOTBfQ1IwX09GRlNFVCAoUzM5MF9BQ1IwX09GRlNFVCsoUzM5MF9B Q1JfU0laRStTMzkwX05VTV9BQ1JTKSkKKyNkZWZpbmUgUzM5MF9GUENfT0ZG U0VUIChTMzkwX0NSMF9PRkZTRVQrKFMzOTBfQ1JfU0laRSpTMzkwX05VTV9D UlMpKQorI2RlZmluZSBTMzkwX0ZQMF9PRkZTRVQgKFMzOTBfRlBDX09GRlNF VCsoUzM5MF9GUENfU0laRStTMzkwX0ZQQ19QQURfU0laRSkpCisjZGVmaW5l IFMzOTBfR1BSNl9TVEFDS19PRkZTRVQgKEdEQl9UQVJHRVRfSVNfRVNBTUUg PyA0ODoyNCkKKworI2RlZmluZSBTMzkwX1JFR0lTVEVSX0JZVEVTICAgIFwK KygoUzM5MF9GUDBfT0ZGU0VUKSsoUzM5MF9GUFJfU0laRSpTMzkwX05VTV9G UFJTKSkKKworI2RlZmluZSBTMzkwX1NJR05BTF9GUkFNRVNJWkUgIChHREJf VEFSR0VUX0lTX0VTQU1FID8gMTYwOjk2KQorI2RlZmluZSBzMzkwX05SX3Np Z3JldHVybiAgICAgICAgICAxMTkKKyNkZWZpbmUgczM5MF9OUl9ydF9zaWdy ZXR1cm4gICAgICAgMTczCisKKworCitzdHJ1Y3QgZnJhbWVfZXh0cmFfaW5m bworeworICBpbnQgaW5pdGlhbGlzZWQ7CisgIGludCBnb29kX3Byb2xvZ3Vl OworICBDT1JFX0FERFIgZnVuY3Rpb25fc3RhcnQ7CisgIENPUkVfQUREUiBz a2lwX3Byb2xvZ3VlX2Z1bmN0aW9uX3N0YXJ0OworICBDT1JFX0FERFIgc2F2 ZWRfcGNfdmFsaWQ7CisgIENPUkVfQUREUiBzYXZlZF9wYzsKKyAgQ09SRV9B RERSIHNpZ19maXhlZF9zYXZlZF9wY192YWxpZDsKKyAgQ09SRV9BRERSIHNp Z19maXhlZF9zYXZlZF9wYzsKKyAgQ09SRV9BRERSIGZyYW1lX3BvaW50ZXJf c2F2ZWRfcGM7CS8qIGZyYW1lIHBvaW50ZXIgbmVlZGVkIGZvciBhbGxvY2Eg Ki8KKyAgQ09SRV9BRERSIHN0YWNrX2JvdWdodDsJCS8qIGFtb3VudCB3ZSBk ZWNyZW1lbnQgdGhlIHN0YWNrIHBvaW50ZXIgYnkgKi8KKyAgQ09SRV9BRERS IHNpZ2NvbnRleHQ7Cit9OworCisKK3N0YXRpYyBDT1JFX0FERFIgczM5MF9m cmFtZV9zYXZlZF9wY19ub2ZpeCAoc3RydWN0IGZyYW1lX2luZm8gKmZpKTsK KworaW50CitzMzkwX3JlYWRpbnN0cnVjdGlvbiAoYmZkX2J5dGUgaW5zdHJb XSwgQ09SRV9BRERSIGF0LAorCQkgICAgICBzdHJ1Y3QgZGlzYXNzZW1ibGVf aW5mbyAqaW5mbykKK3sKKyAgaW50IGluc3RybGVuOworCisgIHN0YXRpYyBp bnQgczM5MF9pbnN0cmxlbltdID0geworICAgIDIsCisgICAgNCwKKyAgICA0 LAorICAgIDYKKyAgfTsKKyAgaWYgKCgqaW5mby0+cmVhZF9tZW1vcnlfZnVu YykgKGF0LCAmaW5zdHJbMF0sIDIsIGluZm8pKQorICAgIHJldHVybiAtMTsK KyAgaW5zdHJsZW4gPSBzMzkwX2luc3RybGVuW2luc3RyWzBdID4+IDZdOwor ICBpZiAoKCppbmZvLT5yZWFkX21lbW9yeV9mdW5jKSAoYXQgKyAyLCAmaW5z dHJbMl0sIGluc3RybGVuIC0gMiwgaW5mbykpCisgICAgcmV0dXJuIC0xOwor ICByZXR1cm4gaW5zdHJsZW47Cit9CisKK3N0YXRpYyB2b2lkCitzMzkwX21l bXNldF9leHRyYV9pbmZvIChzdHJ1Y3QgZnJhbWVfZXh0cmFfaW5mbyAqZmV4 dHJhX2luZm8pCit7CisgIG1lbXNldCAoZmV4dHJhX2luZm8sIDAsIHNpemVv ZiAoc3RydWN0IGZyYW1lX2V4dHJhX2luZm8pKTsKK30KKworCisKK2NoYXIg KgorczM5MF9yZWdpc3Rlcl9uYW1lIChpbnQgcmVnX25yKQoreworICBzdGF0 aWMgY2hhciAqcmVnaXN0ZXJfbmFtZXNbXSA9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKyAgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK KyAgICAicHN3bSIsInBzd2EiLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICJncHIwIiwiZ3ByMSIs ImdwcjIiLCJncHIzIiwiZ3ByNCIsImdwcjUiLCJncHI2IiwiZ3ByNyIsICAg ICAgICAgCisgICAgImdwcjgiLCJncHI5IiwiZ3ByMTAiLCJncHIxMSIsImdw cjEyIiwiZ3ByMTMiLCJncHIxNCIsImdwcjE1IiwgICAKKyAgICAiYWNyMCIs ImFjcjEiLCJhY3IyIiwiYWNyMyIsImFjcjQiLCJhY3I1IiwiYWNyNiIsImFj cjciLCAgICAgICAgIAorICAgICJhY3I4IiwiYWNyOSIsImFjcjEwIiwiYWNy MTEiLCJhY3IxMiIsImFjcjEzIiwiYWNyMTQiLCJhY3IxNSIsICAgCisgICAg ImNyMCIsImNyMSIsImNyMiIsImNyMyIsImNyNCIsImNyNSIsImNyNiIsImNy NyIsICAgICAgICAgICAgICAgICAKKyAgICAiY3I4IiwiY3I5IiwiY3IxMCIs ImNyMTEiLCJjcjEyIiwiY3IxMyIsImNyMTQiLCJjcjE1IiwgICAgICAgICAg IAorICAgICJmcGMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgImZwcjAiLCJmcHIx IiwiZnByMiIsImZwcjMiLCJmcHI0IiwiZnByNSIsImZwcjYiLCJmcHI3Iiwg ICAgICAgICAKKyAgICAiZnByOCIsImZwcjkiLCJmcHIxMCIsImZwcjExIiwi ZnByMTIiLCJmcHIxMyIsImZwcjE0IiwiZnByMTUiICAgIAorICB9OworCisg IGlmIChyZWdfbnIgPj0gUzM5MF9MQVNUX1JFR05VTSkKKyAgICByZXR1cm4g TlVMTDsKKyAgcmV0dXJuIHJlZ2lzdGVyX25hbWVzW3JlZ19ucl07Cit9CisK KworCitpbnQKK3MzOTBfY2Fubm90X2ZldGNoX3JlZ2lzdGVyIChpbnQgcmVn bm8pCit7CisgIHJldHVybiAocmVnbm8gPj0gUzM5MF9GSVJTVF9DUiAmJiBy ZWdubyA8IChTMzkwX0ZJUlNUX0NSICsgOSkpIHx8CisgICAgKHJlZ25vID49 IChTMzkwX0ZJUlNUX0NSICsgMTIpICYmIHJlZ25vIDw9IFMzOTBfTEFTVF9D Uik7Cit9CisKK2ludAorczM5MF9zdGFiX3JlZ190b19yZWdudW0gKGludCBy ZWdubykKK3sKKyAgcmV0dXJuIHJlZ25vID49IDY0ID8gUzM5MF9QU1dNX1JF R05VTSAtIDY0IDoKKyAgICByZWdubyA+PSA0OCA/IFMzOTBfRklSU1RfQUNS IC0gNDggOgorICAgIHJlZ25vID49IDMyID8gUzM5MF9GSVJTVF9DUiAtIDMy IDoKKyAgICByZWdubyA8PSAxNSA/IChyZWdubyArIDIpIDoKKyAgICBTMzkw X0ZQMF9SRUdOVU0gKyAoKHJlZ25vIC0gMTYpICYgOCkgKyAoKChyZWdubyAt IDE2KSAmIDMpIDw8IDEpICsKKyAgICAoKChyZWdubyAtIDE2KSAmIDQpID4+ IDIpOworfQorCisKKworLyogczM5MF9nZXRfZnJhbWVfaW5mbyBiYXNlZCBv biBIYXJ0bXV0cworICAgcHJvbG9ndWUgZGVmaW5pdGlvbiBpbgorICAgZ2Nj LTIuOC4xL2NvbmZpZy9sMzkwL2xpbnV4LmMgCisKKyAgIEl0IHJlYWRzIG9u ZSBpbnN0cnVjdGlvbiBhdCBhIHRpbWUgJiBiYXNlZCBvbiB3aGV0aGVyCisg ICBpdCBsb29rcyBsaWtlIHByb2xvZ3VlIGNvZGUgb3Igbm90IGl0IG1ha2Vz IGEgZGVjaXNpb24gb24KKyAgIHdoZXRoZXIgdGhlIHByb2xvZ3VlIGlzIG92 ZXIsIHRoZXJlIGFyZSB2YXJpb3VzIHN0YXRlIG1hY2hpbmVzCisgICBpbiB0 aGUgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2xvZ3VlIGNvZGUgaXMg cG9zc2lsYnkgdmFsaWQuCisgICAKKyAgIFRoaXMgaXMgZG9uZSB0byBob3Bl ZnVsbHkgYWxsb3cgdGhlIGNvZGUgc3Vydml2ZSBtaW5vciByZXZzIG9mCisg ICBjYWxsaW5nIGNvbnZlbnRpb25zLgorCisgKi8KKworaW50CitzMzkwX2dl dF9mcmFtZV9pbmZvIChDT1JFX0FERFIgcGMsIHN0cnVjdCBmcmFtZV9leHRy YV9pbmZvICpmZXh0cmFfaW5mbywKKwkJICAgICBzdHJ1Y3QgZnJhbWVfaW5m byAqZmksIGludCBpbml0X2V4dHJhX2luZm8pCit7CisjZGVmaW5lIENPTlNU X1BPT0xfUkVHSURYIDEzCisjZGVmaW5lIEdPVF9SRUdJRFggICAgICAgIDEy CisgIGJmZF9ieXRlIGluc3RyW1MzOTBfTUFYX0lOU1RSX1NJWkVdOworICBD T1JFX0FERFIgdGVzdF9wYyA9IHBjLCB0ZXN0X3BjMjsKKyAgQ09SRV9BRERS IG9yaWdfc3AgPSAwLCBzYXZlX3JlZ19hZGRyID0gMCwgKnNhdmVkX3JlZ3Mg PSBOVUxMOworICBpbnQgdmFsaWRfcHJvbG9ndWUsIGdvb2RfcHJvbG9ndWUg PSAwOworICBpbnQgZ3Byc19zYXZlZFtTMzkwX05VTV9HUFJTXTsKKyAgaW50 IGZwcnNfc2F2ZWRbUzM5MF9OVU1fRlBSU107CisgIGludCByZWdpZHgsIGlu c3RybGVuOworICBpbnQgc2F2ZV9saW5rX3JlZ2lkeCwgc3VidHJhY3Rfc3Bf cmVnaWR4OworICBpbnQgY29uc3RfcG9vbF9zdGF0ZSwgc2F2ZV9saW5rX3N0 YXRlLCBnb3Rfc3RhdGU7CisgIGludCBmcmFtZV9wb2ludGVyX2ZvdW5kLCB2 YXJhcmdzX3N0YXRlOworICBpbnQgbG9vcF9jbnQsIGdkYl9ncHJfc3RvcmUs IGdkYl9mcHJfc3RvcmU7CisgIGludCBmcmFtZV9wb2ludGVyX3JlZ2lkeCA9 IDB4ZjsKKyAgaW50IG9mZnNldCwgZXhwZWN0ZWRfb2Zmc2V0OworICBpbnQg ZXJyID0gMDsKKyAgZGlzYXNzZW1ibGVfaW5mbyBpbmZvOworICBjb25zdF9w b29sX3N0YXRlID0gc2F2ZV9saW5rX3N0YXRlID0gZ290X3N0YXRlID0gdmFy YXJnc19zdGF0ZSA9IDA7CisgIGZyYW1lX3BvaW50ZXJfZm91bmQgPSAwOwor ICBtZW1zZXQgKGdwcnNfc2F2ZWQsIDAsIHNpemVvZiAoZ3Byc19zYXZlZCkp OworICBtZW1zZXQgKGZwcnNfc2F2ZWQsIDAsIHNpemVvZiAoZnByc19zYXZl ZCkpOworICBpbmZvLnJlYWRfbWVtb3J5X2Z1bmMgPSBkaXNfYXNtX3JlYWRf bWVtb3J5OworCisgIHNhdmVfbGlua19yZWdpZHggPSBzdWJ0cmFjdF9zcF9y ZWdpZHggPSAwOworICBpZihmZXh0cmFfaW5mbykKKyAgICB7CisgICAgICBp ZiAoZmkmJmZpLT5mcmFtZSkKKwl7CisJICBvcmlnX3NwID0gZmktPmZyYW1l ICsgZmV4dHJhX2luZm8tPnN0YWNrX2JvdWdodDsKKwkgIHNhdmVkX3JlZ3Mg PSBmaS0+c2F2ZWRfcmVnczsgCisJfQorICAgICAgaWYgKGluaXRfZXh0cmFf aW5mbyB8fCAhZmV4dHJhX2luZm8tPmluaXRpYWxpc2VkKQorCXsKKwkgIHMz OTBfbWVtc2V0X2V4dHJhX2luZm8gKGZleHRyYV9pbmZvKTsKKwkgIGZleHRy YV9pbmZvLT5mdW5jdGlvbl9zdGFydCA9IHBjOworCSAgZmV4dHJhX2luZm8t PmluaXRpYWxpc2VkID0gMTsKKwl9CisgICAgfQorICBpbnN0cmxlbiA9IDA7 CisgIGRvCisgICAgeworICAgICAgdmFsaWRfcHJvbG9ndWUgPSAwOworICAg ICAgdGVzdF9wYyArPSBpbnN0cmxlbjsKKyAgICAgIC8qIGFkZCB0aGUgcHJl dmlvdXMgaW5zdHJ1Y3Rpb24gbGVuICovCisgICAgICBpbnN0cmxlbiA9IHMz OTBfcmVhZGluc3RydWN0aW9uIChpbnN0ciwgdGVzdF9wYywgJmluZm8pOwor ICAgICAgaWYgKGluc3RybGVuIDwgMCkKKwl7CisJICBnb29kX3Byb2xvZ3Vl ID0gMDsKKwkgIGVyciA9IC0xOworCSAgYnJlYWs7CisJfQorICAgICAgLyog V2UgcHJvYmFibHkgYXJlIGluIGEgZ2xpYmMgc3lzY2FsbCAqLworICAgICAg aWYoaW5zdHJbMF0gPT0gUzM5MF9TWVNDQUxMX09QQ09ERSAmJiB0ZXN0X3Bj ID09IHBjKQorCXsKKwkgIGlmKHNhdmVkX3JlZ3MmJmZleHRyYV9pbmZvJiZm aS0+bmV4dCYmZmktPm5leHQtPmV4dHJhX2luZm8mJmZpLT5uZXh0LT5leHRy YV9pbmZvLT5zaWdjb250ZXh0KQorCSAgICB7CisJICAgICAgLyogV2UgYXJl IGJhY2t0cmFjaW5nIGZyb20gYSBzaWduYWwgaGFuZGxlciAqLworCSAgICAg IHNhdmVfcmVnX2FkZHI9ZmktPm5leHQtPmV4dHJhX2luZm8tPnNpZ2NvbnRl eHQgKyAKKwkJUkVHSVNURVJfQllURShTMzkwX0dQMF9SRUdOVU0pOworCSAg ICAgICBmb3IgKHJlZ2lkeD0wOyByZWdpZHg8UzM5MF9OVU1fR1BSUzsgcmVn aWR4KyspCisJCXsKKwkJICBzYXZlZF9yZWdzW1MzOTBfR1AwX1JFR05VTSAr IHJlZ2lkeF0gPSBzYXZlX3JlZ19hZGRyOworCQkgIHNhdmVfcmVnX2FkZHIg Kz0gUzM5MF9HUFJfU0laRTsKKwkJfQorCSAgICAgICBzYXZlX3JlZ19hZGRy PWZpLT5uZXh0LT5leHRyYV9pbmZvLT5zaWdjb250ZXh0ICsKKwkJIChHREJf VEFSR0VUX0lTX0VTQU1FID8gUzM5MFhfU0lHUkVHU19GUDBfT0ZGU0VUIDoK KwkJICBTMzkwX1NJR1JFR1NfRlAwX09GRlNFVCApOworCSAgICAgICBmb3Ig KHJlZ2lkeD0wOyByZWdpZHg8UzM5MF9OVU1fRlBSUzsgcmVnaWR4KyspCisJ CSB7CisJCSAgIHNhdmVkX3JlZ3NbUzM5MF9GUDBfUkVHTlVNICsgcmVnaWR4 XSA9IHNhdmVfcmVnX2FkZHI7CisJCSAgIHNhdmVfcmVnX2FkZHIgKz0gUzM5 MF9GUFJfU0laRTsKKwkJIH0KKwkgICAgICBnb29kX3Byb2xvZ3VlPTE7CisJ ICAgIH0KKwkgIGJyZWFrOworCX0KKyAgICAgIGlmIChzYXZlX2xpbmtfc3Rh dGUgPT0gMCkKKwl7CisJICAvKiBjaGVjayBmb3IgYSBzdGFjayByZWxhdGl2 ZSBTVE1HIG9yIFNUTSAqLworCSAgaWYgKCgoR0RCX1RBUkdFVF9JU19FU0FN RSAmJgorCQkoKGluc3RyWzBdID09IDB4ZWIpICYmIChpbnN0cls1XSA9PSAw eDI0KSkpIHx8CisJICAgICAgIChpbnN0clswXSA9PSAweDkwKSkgJiYgKChp bnN0clsyXSA+PiA0KSA9PSAweGYpKQorCSAgICB7CisJICAgICAgcmVnaWR4 ID0gKGluc3RyWzFdID4+IDQpOworCSAgICAgIGlmIChyZWdpZHggPCA2KQor CQl2YXJhcmdzX3N0YXRlID0gMTsKKwkgICAgICBvZmZzZXQgPSAoKGluc3Ry WzJdJjB4Zik8PDgpK2luc3RyWzNdOworCSAgICAgIGV4cGVjdGVkX29mZnNl dCA9CisJCVMzOTBfR1BSNl9TVEFDS19PRkZTRVQgKyAoUzM5MF9HUFJfU0la RSAqIChyZWdpZHggLSA2KSk7CisJICAgICAgaWYgKG9mZnNldCAhPSBleHBl Y3RlZF9vZmZzZXQpCisJCXsKKwkJICBnb29kX3Byb2xvZ3VlID0gMDsKKwkJ ICBicmVhazsKKwkJfQorCSAgICAgIGlmIChzYXZlZF9yZWdzKQorCQlzYXZl X3JlZ19hZGRyID0gb3JpZ19zcCArIG9mZnNldDsKKwkgICAgICBmb3IgKDsg cmVnaWR4IDw9IChpbnN0clsxXSAmIDB4Zik7IHJlZ2lkeCsrKQorCQl7CisJ CSAgaWYgKGdwcnNfc2F2ZWRbcmVnaWR4XSkKKwkJICAgIHsKKwkJICAgICAg Z29vZF9wcm9sb2d1ZSA9IDA7CisJCSAgICAgIGJyZWFrOworCQkgICAgfQor CQkgIGdvb2RfcHJvbG9ndWUgPSAxOworCQkgIGdwcnNfc2F2ZWRbcmVnaWR4 XSA9IDE7CisJCSAgaWYgKHNhdmVkX3JlZ3MpCisJCSAgICB7CisJCSAgICAg IHNhdmVkX3JlZ3NbUzM5MF9HUDBfUkVHTlVNICsgcmVnaWR4XSA9IHNhdmVf cmVnX2FkZHI7CisJCSAgICAgIHNhdmVfcmVnX2FkZHIgKz0gUzM5MF9HUFJf U0laRTsKKwkJICAgIH0KKwkJfQorCSAgICAgIHZhbGlkX3Byb2xvZ3VlID0g MTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCX0KKyAgICAgIC8qIGNo ZWNrIGZvciBhIHN0YWNrIHJlbGF0aXZlIFNURyBvciBTVCAqLworICAgICAg aWYgKChzYXZlX2xpbmtfc3RhdGUgPT0gMCB8fCBzYXZlX2xpbmtfc3RhdGUg PT0gMykgJiYKKwkgICgoR0RCX1RBUkdFVF9JU19FU0FNRSAmJgorCSAgICAo KGluc3RyWzBdID09IDB4ZTMpICYmIChpbnN0cls1XSA9PSAweDI0KSkpIHx8 CisJICAgKGluc3RyWzBdID09IDB4NTApKSAmJiAoKGluc3RyWzJdID4+IDQp ID09IDB4ZikpCisJeworCSAgcmVnaWR4ID0gaW5zdHJbMV0gPj4gNDsKKwkg IG9mZnNldCA9ICgoaW5zdHJbMl0mMHhmKTw8OCkraW5zdHJbM107CisJICBp ZiAob2Zmc2V0ID09IDApCisJICAgIHsKKwkgICAgICBpZiAoc2F2ZV9saW5r X3N0YXRlID09IDMgJiYgcmVnaWR4ID09IHNhdmVfbGlua19yZWdpZHgpCisJ CXsKKwkJICBzYXZlX2xpbmtfc3RhdGUgPSA0OworCQkgIHZhbGlkX3Byb2xv Z3VlID0gMTsKKwkJICBjb250aW51ZTsKKwkJfQorCSAgICAgIGVsc2UKKwkJ YnJlYWs7CisJICAgIH0KKwkgIGlmIChyZWdpZHggPCA2KQorCSAgICB2YXJh cmdzX3N0YXRlID0gMTsKKwkgIGV4cGVjdGVkX29mZnNldCA9CisJICAgIFMz OTBfR1BSNl9TVEFDS19PRkZTRVQgKyAoUzM5MF9HUFJfU0laRSAqIChyZWdp ZHggLSA2KSk7CisJICBpZiAob2Zmc2V0ICE9IGV4cGVjdGVkX29mZnNldCkK KwkgICAgeworCSAgICAgIGdvb2RfcHJvbG9ndWUgPSAwOworCSAgICAgIGJy ZWFrOworCSAgICB9CisJICBpZiAoZ3Byc19zYXZlZFtyZWdpZHhdKQorCSAg ICB7CisJICAgICAgZ29vZF9wcm9sb2d1ZSA9IDA7CisJICAgICAgYnJlYWs7 CisJICAgIH0KKwkgIGdvb2RfcHJvbG9ndWUgPSAxOworCSAgZ3Byc19zYXZl ZFtyZWdpZHhdID0gMTsKKwkgIGlmIChzYXZlZF9yZWdzKQorCSAgICB7CisJ ICAgICAgc2F2ZV9yZWdfYWRkciA9IG9yaWdfc3AgKyBvZmZzZXQ7CisJICAg ICAgc2F2ZWRfcmVnc1tTMzkwX0dQMF9SRUdOVU0gKyByZWdpZHhdID0gc2F2 ZV9yZWdfYWRkcjsKKwkgICAgfQorCSAgdmFsaWRfcHJvbG9ndWUgPSAxOwor CSAgY29udGludWU7CisJfQorCisgICAgICAvKiBjaGVjayBmb3IgU1REICov CisgICAgICBpZiAoaW5zdHJbMF0gPT0gMHg2MCAmJiAoaW5zdHJbMl0gPj4g NCkgPT0gMHhmKQorCXsKKwkgIHJlZ2lkeCA9IGluc3RyWzFdID4+IDQ7CisJ ICBpZiAocmVnaWR4ID09IDAgfHwgcmVnaWR4ID09IDIpCisJICAgIHZhcmFy Z3Nfc3RhdGUgPSAxOworCSAgaWYgKGZwcnNfc2F2ZWRbcmVnaWR4XSkKKwkg ICAgeworCSAgICAgIGdvb2RfcHJvbG9ndWUgPSAwOworCSAgICAgIGJyZWFr OworCSAgICB9CisJICBmcHJzX3NhdmVkW3JlZ2lkeF0gPSAxOworCSAgaWYg KHNhdmVkX3JlZ3MpCisJICAgIHsKKwkgICAgICBzYXZlX3JlZ19hZGRyID0g b3JpZ19zcCArICgoKGluc3RyWzJdJjB4Zik8PDgpK2luc3RyWzNdKTsKKwkg ICAgICBzYXZlZF9yZWdzW1MzOTBfRlAwX1JFR05VTSArIHJlZ2lkeF0gPSBz YXZlX3JlZ19hZGRyOworCSAgICB9CisJICB2YWxpZF9wcm9sb2d1ZSA9IDE7 CisJICBjb250aW51ZTsKKwl9CisKKworICAgICAgaWYgKGNvbnN0X3Bvb2xf c3RhdGUgPT0gMCkKKwl7CisJICAKKwkgIGlmIChHREJfVEFSR0VUX0lTX0VT QU1FKQorCSAgICB7CisJICAgICAgLyogQ2hlY2sgZm9yIGxhcmwgMTMsY29u c3QgcG9vbCBvbiBFU0FNRSAqLworCSAgICAgIGlmKChpbnN0clswXSA9PSAw eGMwKSAmJiAoaW5zdHJbMV0gPT0gKENPTlNUX1BPT0xfUkVHSURYIDw8IDQp KSkKKwkJeworCQkgIGNvbnN0X3Bvb2xfc3RhdGUgPSAyOworCQkgIHZhbGlk X3Byb2xvZ3VlID0xOworCQkgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkg IGVsc2UKKwkgICAgeworCSAgICAgIC8qIENoZWNrIGZvciBCQVNSIGdwcjEz LGdwcjAgdXNlZCB0byBsb2FkIGNvbnN0YW50IHBvb2wgcG9pbnRlciB0byBy MTMgaW4gb2xkIGNvbXBpbGVyICovCisJICAgICAgaWYgKGluc3RyWzBdID09 IDB4ZCAmJiAoaW5zdHJbMV0gJiAweGYpID09IDAKKwkJICAmJiAoKGluc3Ry WzFdID4+IDQpID09IENPTlNUX1BPT0xfUkVHSURYKSkKKwkJeworCQkgIGNv bnN0X3Bvb2xfc3RhdGUgPSAxOworCQkgIHZhbGlkX3Byb2xvZ3VlID0gMTsK KwkJICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICAvKiBDaGVjayBmb3Ig bmV3IGZhbmdsZWQgYnJhcyAlcjEzLG5ld3BjIHRvIGxvYWQgbmV3IGNvbnN0 YW50IHBvb2wgKi8KKwkgIC8qIGVtYmVkZGVkIGluIGNvZGUsIG9sZGVyIHBy ZSBhYmkgY29tcGlsZXJzIGFsc28gZW1pdHRlZCB0aGlzIHN0dWZmLiAgKi8K KwkgIGlmICgoaW5zdHJbMF0gPT0gMHhhNykgJiYgKChpbnN0clsxXSAmIDB4 ZikgPT0gMHg1KSAmJgorCSAgICAgICgoaW5zdHJbMV0gPj4gNCkgPT0gQ09O U1RfUE9PTF9SRUdJRFgpCisJICAgICAgJiYgKChpbnN0clsyXSAmIDB4ODAp ID09IDApKQorCSAgICB7CisJICAgICAgY29uc3RfcG9vbF9zdGF0ZSA9IDI7 CisJICAgICAgdGVzdF9wYyArPSAoKCgoKGluc3RyWzJdJjB4Zik8PDgpK2lu c3RyWzNdKTw8MSkgLSBpbnN0cmxlbik7CisJICAgICAgdmFsaWRfcHJvbG9n dWUgPSAxOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJfQorICAgICAg LyogQ2hlY2sgZm9yIEFHSEkgb3IgQUhJIENPTlNUX1BPT0xfUkVHSURYLHZh bCAqLworICAgICAgaWYgKGNvbnN0X3Bvb2xfc3RhdGUgPT0gMSAmJiAoaW5z dHJbMF0gPT0gMHhhNykgJiYKKwkgICgoR0RCX1RBUkdFVF9JU19FU0FNRSAm JgorCSAgICAoaW5zdHJbMV0gPT0gKChDT05TVF9QT09MX1JFR0lEWCA8PCA0 KSB8IDB4YikpKSB8fAorCSAgIChpbnN0clsxXSA9PSAoKENPTlNUX1BPT0xf UkVHSURYIDw8IDQpIHwgMHhhKSkpKQorCXsKKwkgIGNvbnN0X3Bvb2xfc3Rh dGUgPSAyOworCSAgdmFsaWRfcHJvbG9ndWUgPSAxOworCSAgY29udGludWU7 CisJfQorICAgICAgLyogQ2hlY2sgZm9yIExHUiBvciBMUiBncHJ4LDE1ICov CisgICAgICBpZiAoKEdEQl9UQVJHRVRfSVNfRVNBTUUgJiYKKwkgICBpbnN0 clswXSA9PSAweGI5ICYmIGluc3RyWzFdID09IDB4MDQgJiYgKGluc3RyWzNd ICYgMHhmKSA9PSAweGYpIHx8CisJICAoaW5zdHJbMF0gPT0gMHgxOCAmJiAo aW5zdHJbMV0gJiAweGYpID09IDB4ZikpCisJeworCSAgaWYgKEdEQl9UQVJH RVRfSVNfRVNBTUUpCisJICAgIHJlZ2lkeCA9IGluc3RyWzNdID4+IDQ7CisJ ICBlbHNlCisJICAgIHJlZ2lkeCA9IGluc3RyWzFdID4+IDQ7CisJICBpZiAo c2F2ZV9saW5rX3N0YXRlID09IDAgJiYgcmVnaWR4ICE9IDB4YikKKwkgICAg eworCSAgICAgIC8qIEFsbW9zdCBkZWZpbnRlbHkgY29kZSBmb3IKKwkgICAg ICAgICBkZWNyZW1lbnRpbmcgdGhlIHN0YWNrIHBvaW50ZXIgCisJICAgICAg ICAgKCBpLmUuIGEgbm9uIGxlYWYgZnVuY3Rpb24gCisJICAgICAgICAgb3Ig ZWxzZSBsZWFmIHdpdGggbG9jYWxzICkgKi8KKwkgICAgICBzYXZlX2xpbmtf cmVnaWR4ID0gcmVnaWR4OworCSAgICAgIHNhdmVfbGlua19zdGF0ZSA9IDE7 CisJICAgICAgdmFsaWRfcHJvbG9ndWUgPSAxOworCSAgICAgIGNvbnRpbnVl OworCSAgICB9CisJICAvKiBXZSB1c2UgdGhpcyBmcmFtZSBwb2ludGVyIGZv ciBhbGxvY2EKKwkgICAgIHVuZm9ydHVuYXRlbHkgd2UgbmVlZCB0byBhc3N1 bWUgaXRzIGdwcjExCisJICAgICBvdGhlcndpc2Ugd2Ugd291bGQgbmVlZCBh IHNtYXJ0ZXIgcHJvbG9ndWUKKwkgICAgIHdhbGtlci4gKi8KKwkgIGlmICgh ZnJhbWVfcG9pbnRlcl9mb3VuZCAmJiByZWdpZHggPT0gMHhiKQorCSAgICB7 CisJICAgICAgZnJhbWVfcG9pbnRlcl9yZWdpZHggPSAweGI7CisJICAgICAg ZnJhbWVfcG9pbnRlcl9mb3VuZCA9IDE7CisJICAgICAgaWYgKGZleHRyYV9p bmZvKQorCQlmZXh0cmFfaW5mby0+ZnJhbWVfcG9pbnRlcl9zYXZlZF9wYyA9 IHRlc3RfcGM7CisJICAgICAgdmFsaWRfcHJvbG9ndWUgPSAxOworCSAgICAg IGNvbnRpbnVlOworCSAgICB9CisJfQorICAgICAgLyogQ2hlY2sgZm9yIEFI SSBvciBBR0hJIGdwcjE1LHZhbCAqLworICAgICAgaWYgKHNhdmVfbGlua19z dGF0ZSA9PSAxICYmIChpbnN0clswXSA9PSAweGE3KSAmJgorCSAgKChHREJf VEFSR0VUX0lTX0VTQU1FICYmIChpbnN0clsxXSA9PSAweGZiKSkgfHwgKGlu c3RyWzFdID09IDB4ZmEpKSkKKwl7CisJICBpZiAoZmV4dHJhX2luZm8pCisJ ICAgIGZleHRyYV9pbmZvLT5zdGFja19ib3VnaHQgPSAtZXh0cmFjdF9zaWdu ZWRfaW50ZWdlciAoJmluc3RyWzJdLDIpOworCSAgc2F2ZV9saW5rX3N0YXRl ID0gMzsKKwkgIHZhbGlkX3Byb2xvZ3VlID0gMTsKKwkgIGNvbnRpbnVlOwor CX0KKyAgICAgIC8qIEFsdGVybmF0aXZlbHkgY2hlY2sgZm9yIHRoZSBjb21w bGV4IGNvbnN0cnVjdGlvbiBmb3IKKyAgICAgICAgIGJ1eWluZyBtb3JlIHRo YW4gMzJrIG9mIHN0YWNrCisgICAgICAgICBCUkFTIGdwcngsLis4CisgICAg ICAgICBsb25nIHZhbHMgICAgJXIxNSwwKCVncHJ4KSAgZ3ByeCBjdXJyZW50 bHkgcjEgKi8KKyAgICAgIGlmICgoc2F2ZV9saW5rX3N0YXRlID09IDEpICYm IChpbnN0clswXSA9PSAweGE3KQorCSAgJiYgKChpbnN0clsxXSAmIDB4Zikg PT0gMHg1KSAmJiAoIGluc3RyWzJdID09IDAgKQorCSAgJiYgKGluc3RyWzNd ID09IDB4NCkKKwkgICYmICgoaW5zdHJbMV0gPj4gNCkgIT0gQ09OU1RfUE9P TF9SRUdJRFgpKQorCXsKKwkgIHN1YnRyYWN0X3NwX3JlZ2lkeCA9IGluc3Ry WzFdID4+IDQ7CisJICBzYXZlX2xpbmtfc3RhdGUgPSAyOworCSAgaWYgKGZl eHRyYV9pbmZvKQorCSAgICB0YXJnZXRfcmVhZF9tZW1vcnkgKHRlc3RfcGMg KyBpbnN0cmxlbiwKKwkJCQkoY2hhciAqKSAmZmV4dHJhX2luZm8tPnN0YWNr X2JvdWdodCwKKwkJCQlzaXplb2YgKGZleHRyYV9pbmZvLT5zdGFja19ib3Vn aHQpKTsKKwkgIHRlc3RfcGMgKz0gNDsKKwkgIHZhbGlkX3Byb2xvZ3VlID0g MTsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGlmIChzYXZlX2xpbmtfc3Rh dGUgPT0gMiAmJiBpbnN0clswXSA9PSAweDViIAorCSAgJiYgaW5zdHJbMV09 PSAweGYwICYmCisJICBpbnN0clsyXSA9PSAoc3VidHJhY3Rfc3BfcmVnaWR4 PDw0KSAmJgorCSAgaW5zdHJbM10gPT0gMCkKKwl7CisJICBzYXZlX2xpbmtf c3RhdGUgPSAzOworCSAgdmFsaWRfcHJvbG9ndWUgPSAxOworCSAgY29udGlu dWU7CisJfQorICAgICAgLyogY2hlY2sgZm9yIExBIGdwcngsb2Zmc2V0KDE1 KSB1c2VkIGZvciB2YXJhcmdzICovCisgICAgICBpZigoaW5zdHJbMF0gPT0g MHg0MSkgICYmICgoaW5zdHJbMl0gPj4gNCkgPT0gMHhmICkgJiYKKwkgKChp bnN0clsxXSAmIDB4ZikgPT0gMCkpCisJeworCSAgLyogc29tZSBjb2RlIHVz ZXMgZ3ByNyB0byBwb2ludCB0byBvdXRnb2luZyBhcmdzICovCisJICBpZigo KGluc3RyWzFdPj40KT09NykgJiYgKHNhdmVfbGlua19zdGF0ZT09MCkgJiYg CisJICAgICAgKChpbnN0clsyXSYweGYpPT0wKSAmJiAoaW5zdHJbM10gPT0g UzM5MF9TVEFDS19GUkFNRV9PVkVSSEVBRCkgKQorCSAgeworCSAgICB2YWxp ZF9wcm9sb2d1ZSA9IDE7CisJICAgIGNvbnRpbnVlOworCSAgfQorCSAgaWYg KHZhcmFyZ3Nfc3RhdGUgPT0gMSApCisJICB7CisJICAgIHZhcmFyZ3Nfc3Rh dGUgPSAyOworCSAgICB2YWxpZF9wcm9sb2d1ZSA9IDE7CisJICAgIGNvbnRp bnVlOworCSAgfQorCX0KKyAgICAgIC8qIENoZWNrIGZvciBhIEdPVCBsb2Fk ICovCisKKyAgICAgICAgaWYgKEdEQl9UQVJHRVRfSVNfRVNBTUUpCisJICAg IHsKKwkgICAgICAvKiBDaGVjayBmb3IgbGFybCAgR09UX1JFR0lEWCwgb24g RVNBTUUgKi8KKwkgICAgICBpZigoaW5zdHJbMF0gPT0gMHhjMCkgJiYgKGlu c3RyWzFdID09IChHT1RfUkVHSURYIDw8IDQpKSkKKwkJeworCQkgIGdvdF9z dGF0ZSA9IDI7CisJCSAgdmFsaWRfcHJvbG9ndWUgPTE7CisJCSAgY29udGlu dWU7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyog Y2hlY2sgZm9yIGwgR09UX1JFR0lEWCx4KENPTlNUX1BPT0xfUkVHSURYKSAq LworCSAgICAgIGlmIChnb3Rfc3RhdGUgPT0gMCAmJiBjb25zdF9wb29sX3N0 YXRlID09IDIgJiYgaW5zdHJbMF0gPT0gMHg1OAorCQkgICYmIChpbnN0clsy XSA9PSAoQ09OU1RfUE9PTF9SRUdJRFggPDwgNCkpCisJCSAgJiYgKChpbnN0 clsxXSA+PiA0KSA9PSBHT1RfUkVHSURYKSkKKwkJeworCQkgIGdvdF9zdGF0 ZSA9PSAxOworCQkgIHZhbGlkX3Byb2xvZ3VlID0gMTsKKwkJICBjb250aW51 ZTsKKwkJfQorCSAgICAgIC8qIENoZWNrIGZvciBzdWJzZXF1ZW50IGFyIGdv dF9yZWdpZHgsYmFzcl9yZWdpZHggKi8KKwkgICAgICBpZiAoZ290X3N0YXRl ID09IDEgJiYgaW5zdHJbMF0gPT0gMHgxYSAmJgorCQkgIGluc3RyWzFdID09 ICgoR09UX1JFR0lEWCA8PCA0KSB8IENPTlNUX1BPT0xfUkVHSURYKSkKKwkJ eworCQkgIGdvdF9zdGF0ZSA9IDI7CisJCSAgdmFsaWRfcHJvbG9ndWUgPSAx OworCQkgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKyAgICB9CisgIHdoaWxl ICh2YWxpZF9wcm9sb2d1ZSAmJiBnb29kX3Byb2xvZ3VlKTsKKyAgaWYgKGdv b2RfcHJvbG9ndWUpCisgICAgeworICAgICAgZ29vZF9wcm9sb2d1ZSA9ICgo KGdvdF9zdGF0ZSA9PSAwKSB8fCAoZ290X3N0YXRlID09IDIpKSAmJgorCQkg ICAgICAgKChjb25zdF9wb29sX3N0YXRlID09IDApIHx8IChjb25zdF9wb29s X3N0YXRlID09IDIpKSAmJgorCQkgICAgICAgKChzYXZlX2xpbmtfc3RhdGUg PT0gMCkgfHwgKHNhdmVfbGlua19zdGF0ZSA9PSA0KSkgJiYKKwkJICAgICAg ICgodmFyYXJnc19zdGF0ZSA9PSAwKSB8fCAodmFyYXJnc19zdGF0ZSA9PSAy KSkpOworICAgIH0KKyAgaWYgKGZleHRyYV9pbmZvKQorICAgIHsKKyAgICAg IGZleHRyYV9pbmZvLT5nb29kX3Byb2xvZ3VlID0gZ29vZF9wcm9sb2d1ZTsK KyAgICAgIGZleHRyYV9pbmZvLT5za2lwX3Byb2xvZ3VlX2Z1bmN0aW9uX3N0 YXJ0ID0KKwkoZ29vZF9wcm9sb2d1ZSA/IHRlc3RfcGMgOiBwYyk7CisgICAg fQorICByZXR1cm4gZXJyOworfQorCisKK2ludCBzMzkwX2NoZWNrX2Z1bmN0 aW9uX2VuZChDT1JFX0FERFIgcGMpCit7CisgICBiZmRfYnl0ZSBpbnN0cltT MzkwX01BWF9JTlNUUl9TSVpFXTsKKyAgIGRpc2Fzc2VtYmxlX2luZm8gaW5m bzsKKyAgIGludCByZWdpZHgsaW5zdHJsZW47CisKKyAgIGluZm8ucmVhZF9t ZW1vcnlfZnVuYyA9IGRpc19hc21fcmVhZF9tZW1vcnk7CisgICBpbnN0cmxl biA9IHMzOTBfcmVhZGluc3RydWN0aW9uIChpbnN0ciwgcGMsICZpbmZvKTsK KyAgIGlmKGluc3RybGVuIDwgMCkKKyAgICAgcmV0dXJuIC0xOworICAgLyog Y2hlY2sgZm9yIEJSICovCisgICBpZihpbnN0cmxlbiE9Mnx8aW5zdHJbMF0h PTA3fHwoaW5zdHJbMV0+PjQpIT0weGYpCisgICAgIHJldHVybiAwIDsKKyAg IHJlZ2lkeCA9IGluc3RyWzFdICYgMHhmOworICAgLyogQ2hlY2sgZm9yIExN RyBvciBMRyAqLworICAgaW5zdHJsZW49czM5MF9yZWFkaW5zdHJ1Y3Rpb24g KGluc3RyLCBwYy0oR0RCX1RBUkdFVF9JU19FU0FNRSA/IDY6NCksICZpbmZv KTsKKyAgIGlmKGluc3RybGVuIDwgMCkKKyAgICAgcmV0dXJuIC0xOworICAg aWYoR0RCX1RBUkdFVF9JU19FU0FNRSkKKyAgICAgeworICAgICAgIAorICAg ICAgIGlmKCBpbnN0cmxlbiAhPSA2IHx8IGluc3RyWzBdIT0weGViIHx8IGlu c3RyWzVdIT0weDQgKQorCSByZXR1cm4gMDsKKyAgICAgfQorICAgZWxzZSBp ZiAoIGluc3RybGVuICE9NCB8fCBpbnN0clswXSE9MHg5OCkKKyAgICAgewor ICAgICAgIHJldHVybiAwOworICAgICB9CisgICBpZigoaW5zdHJbMl0+PjQp IT0weGYpCisgICAgIHJldHVybiAwOworICAgaWYocmVnaWR4ID09IDE0KQor ICAgICByZXR1cm4gMTsKKyAgIGluc3RybGVuPXMzOTBfcmVhZGluc3RydWN0 aW9uIChpbnN0ciwgcGMtKEdEQl9UQVJHRVRfSVNfRVNBTUUgPyAxMjo4KSwK KwkJCQkgICZpbmZvKTsKKyAgIGlmKGluc3RybGVuIDwgMCApCisgICAgIHJl dHVybiAtMTsKKyAgIGlmKEdEQl9UQVJHRVRfSVNfRVNBTUUpCisgICAgIHsK KyAgICAgICAvKiBDaGVjayBmb3IgTEcgKi8KKyAgICAgICBpZiggaW5zdHJs ZW4gIT0gNiB8fCBpbnN0clswXSAhPSAweGUzIHx8IGluc3RyWzVdICE9IDB4 NCApCisJIHJldHVybiAwOworICAgICB9CisgICBlbHNlCisgICAgIHsKKyAg ICAgICAvKiBDaGVjayBmb3IgTCAqLworICAgICAgIGlmKCBpbnN0cmxlbiAh PTQgfHwgaW5zdHJbMF0gIT0gMHg1OCkKKwkgcmV0dXJuIDA7CisgICAgIH0K KyAgIGlmKGluc3RyWzJdPj40IT0weGYpCisgICAgIHJldHVybiAwOworICAg aWYoaW5zdHJbMV0+PjQhPXJlZ2lkeCkKKyAgICAgcmV0dXJuIDA7CisgICBy ZXR1cm4gMTsKK30KKworc3RhdGljIENPUkVfQUREUgorczM5MF9zbmlmZl9w Y19mdW5jdGlvbl9zdGFydCAoQ09SRV9BRERSIHBjKQoreworICBDT1JFX0FE RFIgZnVuY3Rpb25fc3RhcnQsIHRlc3RfZnVuY3Rpb25fc3RhcnQ7CisgIGlu dCBsb29wX2NudCwgZXJyLGZ1bmN0aW9uX2VuZDsKKyAgc3RydWN0IGZyYW1l X2V4dHJhX2luZm8gZmV4dHJhX2luZm87CisgIGZ1bmN0aW9uX3N0YXJ0ID0g Z2V0X3BjX2Z1bmN0aW9uX3N0YXJ0IChwYyk7CisKKyAgaWYgKGZ1bmN0aW9u X3N0YXJ0ID09IDApCisgICAgeworICAgICAgdGVzdF9mdW5jdGlvbl9zdGFy dCA9IHBjOworICAgICAgaWYgKHRlc3RfZnVuY3Rpb25fc3RhcnQgJiAxKQor CXJldHVybiAwOyAvKiBUaGlzIGhhcyB0byBiZSBib2d1cyAqLworICAgICAg bG9vcF9jbnQgPSAwOworICAgICAgZG8KKwl7CisJIAorCSAgZXJyID0gczM5 MF9nZXRfZnJhbWVfaW5mbyAodGVzdF9mdW5jdGlvbl9zdGFydCwgJmZleHRy YV9pbmZvLCBOVUxMLAorCQkJCSAxKTsKKwkgIGxvb3BfY250Kys7CisJICB0 ZXN0X2Z1bmN0aW9uX3N0YXJ0IC09IDI7CisJICBmdW5jdGlvbl9lbmQ9czM5 MF9jaGVja19mdW5jdGlvbl9lbmQodGVzdF9mdW5jdGlvbl9zdGFydCk7CisJ fQorICAgICAgd2hpbGUgKCEoZnVuY3Rpb25fZW5kPT0xfHwgZXJyIHx8IGxv b3BfY250Pj00MDk2IHx8CisJICAgICAgIChmZXh0cmFfaW5mby5nb29kX3By b2xvZ3VlICYmCisJICAgICAgKGZleHRyYV9pbmZvLnNraXBfcHJvbG9ndWVf ZnVuY3Rpb25fc3RhcnQgLQorCSAgICAgICBmZXh0cmFfaW5mby5mdW5jdGlv bl9zdGFydCkgPj0gNCkpKTsKKyAgICAgIGlmIChmZXh0cmFfaW5mby5nb29k X3Byb2xvZ3VlKQorCWZ1bmN0aW9uX3N0YXJ0ID0gZmV4dHJhX2luZm8uZnVu Y3Rpb25fc3RhcnQ7CisgICAgICBlbHNlIGlmICggZnVuY3Rpb25fZW5kID09 IDEgKQorCWZ1bmN0aW9uX3N0YXJ0ID0gdGVzdF9mdW5jdGlvbl9zdGFydCA7 CisgICAgfQorICByZXR1cm4gZnVuY3Rpb25fc3RhcnQ7Cit9CisKKworCitD T1JFX0FERFIgczM5MF9mdW5jdGlvbl9zdGFydCAoc3RydWN0IGZyYW1lX2lu Zm8gKiBmaSkKK3sKKyAgQ09SRV9BRERSIGZ1bmN0aW9uX3N0YXJ0ID0gMDsK KworICBpZiAoZmktPmV4dHJhX2luZm8gJiYgZmktPmV4dHJhX2luZm8tPmlu aXRpYWxpc2VkKQorICAgIGZ1bmN0aW9uX3N0YXJ0ID0gZmktPmV4dHJhX2lu Zm8tPmZ1bmN0aW9uX3N0YXJ0OworICBlbHNlIGlmIChmaS0+cGMpCisgICAg ZnVuY3Rpb25fc3RhcnQgPSBnZXRfcGNfZnVuY3Rpb25fc3RhcnQgKGZpLT5w Yyk7CisgIHJldHVybiBmdW5jdGlvbl9zdGFydDsKK30KKworCisKKworaW50 CitzMzkwX2ZyYW1lbGVzc19mdW5jdGlvbl9pbnZvY2F0aW9uIChzdHJ1Y3Qg ZnJhbWVfaW5mbyAqZmkpCit7CisgIHN0cnVjdCBmcmFtZV9leHRyYV9pbmZv IGZleHRyYV9pbmZvLCAqZmV4dHJhX2luZm9fcHRyOworICBpbnQgZnJhbWVs ZXNzID0gMDsKKworICBpZiAoZmktPm5leHQgPT0gTlVMTCkJCS8qIG5vIG1h eSBiZSBmcmFtZWxlc3MgKi8KKyAgICB7CisgICAgICBpZiAoZmktPmV4dHJh X2luZm8pCisJZmV4dHJhX2luZm9fcHRyID0gZmktPmV4dHJhX2luZm87Cisg ICAgICBlbHNlCisJeworCSAgZmV4dHJhX2luZm9fcHRyID0gJmZleHRyYV9p bmZvOworCSAgczM5MF9nZXRfZnJhbWVfaW5mbyAoczM5MF9zbmlmZl9wY19m dW5jdGlvbl9zdGFydCAoZmktPnBjKSwKKwkJCSAgICAgICBmZXh0cmFfaW5m b19wdHIsIE5VTEwsIDEpOworCX0KKyAgICAgIGZyYW1lbGVzcyA9ICgoZmV4 dHJhX2luZm9fcHRyLT5zdGFja19ib3VnaHQgPT0gMCkpOworICAgIH0KKyAg cmV0dXJuIGZyYW1lbGVzczsKKworfQorCisKK3N0YXRpYyBpbnQKK3MzOTBf aXNfc2lncmV0dXJuIChDT1JFX0FERFIgcGMsIHN0cnVjdCBmcmFtZV9pbmZv ICpzaWdoYW5kbGVyX2ZpLAorCQkgICBDT1JFX0FERFIgKiBzcmVncywgQ09S RV9BRERSICogc2lnY2FsbGVyX3BjKQoreworICBiZmRfYnl0ZSBpbnN0cltT MzkwX01BWF9JTlNUUl9TSVpFXTsKKyAgZGlzYXNzZW1ibGVfaW5mbyBpbmZv OworICBpbnQgaW5zdHJsZW47CisgIENPUkVfQUREUiBzY29udGV4dDsKKyAg aW50IHJldHZhbCA9IDA7CisgIENPUkVfQUREUiBvcmlnX3NwOworICBDT1JF X0FERFIgdGVtcF9zcmVnczsKKworICBzY29udGV4dCA9IHRlbXBfc3JlZ3Mg PSAwOworCisgIGluZm8ucmVhZF9tZW1vcnlfZnVuYyA9IGRpc19hc21fcmVh ZF9tZW1vcnk7CisgIGluc3RybGVuID0gczM5MF9yZWFkaW5zdHJ1Y3Rpb24g KGluc3RyLCBwYywgJmluZm8pOworICBpZiAoc2lnY2FsbGVyX3BjKQorICAg ICpzaWdjYWxsZXJfcGMgPSAwOworICBpZiAoKChpbnN0cmxlbiA9PSBTMzkw X1NZU0NBTExfU0laRSkmJgorICAgICAgKGluc3RyWzBdID09IFMzOTBfU1lT Q0FMTF9PUENPREUpKSAmJgorICAgICAgKChpbnN0clsxXSA9PSBzMzkwX05S X3NpZ3JldHVybikgfHwKKyAgICAgICAoaW5zdHJbMV0gPT0gczM5MF9OUl9y dF9zaWdyZXR1cm4pKSkgCisgICAgeworICAgICAgaWYgKHNpZ2hhbmRsZXJf ZmkpCisJeworCSAgaWYgKHMzOTBfZnJhbWVsZXNzX2Z1bmN0aW9uX2ludm9j YXRpb24gKHNpZ2hhbmRsZXJfZmkpKQorCSAgICBvcmlnX3NwID0gc2lnaGFu ZGxlcl9maS0+ZnJhbWU7CisJICBlbHNlCisJICAgIG9yaWdfc3AgPSBBRERS X0JJVFNfUkVNT1ZFICgoQ09SRV9BRERSKQorCQkJCQlyZWFkX21lbW9yeV9p bnRlZ2VyIChzaWdoYW5kbGVyX2ZpLT5mcmFtZSwKKwkJCQkJCQkgICAgIFMz OTBfR1BSX1NJWkUpKTsKKwkgIGlmIChvcmlnX3NwICYmIHNpZ2NhbGxlcl9w YykKKwkgICAgeworCSAgICAgIHNjb250ZXh0ID0gb3JpZ19zcCArIFMzOTBf U0lHTkFMX0ZSQU1FU0laRTsKKwkgICAgICBpZihwYz09c2NvbnRleHQmJmlu c3RyWzFdID09IHMzOTBfTlJfcnRfc2lncmV0dXJuKQorCQl7CisJCSAgLyog V2UgZ290IGEgbmV3IHN0eWxlIHJ0X3NpZ25hbCAqLworCQkgIC8qIGdldCBh ZGRyZXNzIG9mIHJlYWQgdWNvbnRleHQtPnVjX21jb250ZXh0ICovCisJCSAg dGVtcF9zcmVncz0gb3JpZ19zcCArIChHREJfVEFSR0VUX0lTX0VTQU1FID8g CisJCQkJCQkgUzM5MFhfVUNfTUNPTlRFWFRfT0ZGU0VUIDogCisJCQkJCSBT MzkwX1VDX01DT05URVhUX09GRlNFVCApOworCQl9CisJICAgICAgZWxzZQor CQl7CisJCSAgLyogcmVhZCBzaWdjb250ZXh0LT5zcmVncyAqLworCQkgIHRl bXBfc3JlZ3MgPSBBRERSX0JJVFNfUkVNT1ZFKChDT1JFX0FERFIpCisJCQkJ CQlyZWFkX21lbW9yeV9pbnRlZ2VyIChzY29udGV4dCArIAorCQkJCQkJKEdE Ql9UQVJHRVRfSVNfRVNBTUUgPyAKKwkJCQkJCSBTMzkwWF9TSUdDT05URVhU X1NSRUdTX09GRlNFVCA6IAorCQkJCQkJIFMzOTBfU0lHQ09OVEVYVF9TUkVH U19PRkZTRVQgKSwKKwkJCQkJCQkJICAgICBTMzkwX0dQUl9TSVpFKSk7CisJ CSAgCisJCX0KKwkgICAgICAvKiByZWFkIHNpZ3JlZ3MtPnBzdy5hZGRyICov CisJICAgICAgKnNpZ2NhbGxlcl9wYyA9CisJCUFERFJfQklUU19SRU1PVkUg KChDT1JFX0FERFIpCisJCQkJICByZWFkX21lbW9yeV9pbnRlZ2VyICh0ZW1w X3NyZWdzICsgCisJCQkJCQkgICAgICAgUkVHSVNURVJfQllURShTMzkwX1BD X1JFR05VTSksCisJCQkJCQkgICAgICAgUzM5MF9QU1dfQUREUl9TSVpFKSk7 CisJICAgIH0KKwl9CisgICAgICByZXR2YWwgPSAxOworICAgIH0KKyAgaWYg KHNyZWdzKQorICAgICpzcmVncyA9IHRlbXBfc3JlZ3M7CisgIHJldHVybiBy ZXR2YWw7Cit9CisKKy8qCisgIFdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIGJl dHRlciBoZXJlIGJ1dCB0aGlzIHdpbGwga2VlcCB1cyBvdXQgb2YgdHJvdWJs ZQorICBmb3IgdGhlIG1vbWVudC4KKyAgRm9yIHNvbWUgcmVhc29uIHRoZSBi bG9ja2ZyYW1lLmMgY2FsbHMgdXMgd2l0aCBmaS0+bmV4dC0+ZnJvbWxlYWYK KyAgc28gdGhpcyBzZWVtcyBvZiBsaXR0bGUgdXNlIHRvIHVzLiAqLwordm9p ZAorczM5MF9pbml0X2ZyYW1lX3BjX2ZpcnN0IChpbnQgbmV4dF9mcm9tbGVh Ziwgc3RydWN0IGZyYW1lX2luZm8gKmZpKQoreworICBDT1JFX0FERFIgc2ln Y2FsbGVyX3BjOworCisgIGZpLT5wYyA9IDA7CisgIGlmIChuZXh0X2Zyb21s ZWFmKQorICAgIHsKKyAgICAgIGZpLT5wYyA9IEFERFJfQklUU19SRU1PVkUg KHJlYWRfcmVnaXN0ZXIgKFMzOTBfUkVUQUREUl9SRUdOVU0pKTsKKyAgICAg IC8qIGZpeCBzaWduYWwgaGFuZGxlcnMgKi8KKyAgICB9CisgIGVsc2UgaWYg KGZpLT5uZXh0ICYmIGZpLT5uZXh0LT5wYykKKyAgICBmaS0+cGMgPSBzMzkw X2ZyYW1lX3NhdmVkX3BjX25vZml4IChmaS0+bmV4dCk7CisgIGlmIChmaS0+ cGMgJiYgZmktPm5leHQgJiYgZmktPm5leHQtPmZyYW1lICYmCisgICAgICBz MzkwX2lzX3NpZ3JldHVybiAoZmktPnBjLCBmaS0+bmV4dCwgTlVMTCwgJnNp Z2NhbGxlcl9wYykpCisgICAgeworICAgICAgZmktPnBjID0gc2lnY2FsbGVy X3BjOworICAgIH0KKworfQorCit2b2lkCitzMzkwX2luaXRfZXh0cmFfZnJh bWVfaW5mbyAoaW50IGZyb21sZWFmLCBzdHJ1Y3QgZnJhbWVfaW5mbyAqZmkp Cit7CisgIGZpLT5leHRyYV9pbmZvID0gZnJhbWVfb2JzdGFja19hbGxvYyAo c2l6ZW9mIChzdHJ1Y3QgZnJhbWVfZXh0cmFfaW5mbykpOworICBpZiAoZmkt PnBjKQorICAgIHMzOTBfZ2V0X2ZyYW1lX2luZm8gKHMzOTBfc25pZmZfcGNf ZnVuY3Rpb25fc3RhcnQgKGZpLT5wYyksCisJCQkgZmktPmV4dHJhX2luZm8s ZmksIDEpOworICBlbHNlCisgICAgczM5MF9tZW1zZXRfZXh0cmFfaW5mbyAo ZmktPmV4dHJhX2luZm8pOworfQorCisvKiBJZiBzYXZlZCByZWdpc3RlcnMg b2YgZnJhbWUgRkkgYXJlIG5vdCBrbm93biB5ZXQsIHJlYWQgYW5kIGNhY2hl IHRoZW0uCisgICAmRkVYVFJBX0lORk9QIGNvbnRhaW5zIHN0cnVjdCBmcmFt ZV9leHRyYV9pbmZvOyBUREFUQVAgY2FuIGJlIE5VTEwsCisgICBpbiB3aGlj aCBjYXNlIHRoZSBmcmFtZWRhdGEgYXJlIHJlYWQuICAqLworCit2b2lkCitz MzkwX2ZyYW1lX2luaXRfc2F2ZWRfcmVncyAoc3RydWN0IGZyYW1lX2luZm8g KmZpKQoreworCisgIGludCBxdWljazsKKworICBpZiAoZmktPnNhdmVkX3Jl Z3MgPT0gTlVMTCkKKyAgICB7CisgICAgICAvKiB6YWxsb2MgbWVtc2V0cyB0 aGUgc2F2ZWQgcmVncyAqLyAKKyAgICAgIGZyYW1lX3NhdmVkX3JlZ3NfemFs bG9jIChmaSk7CisgICAgICBpZiAoZmktPnBjKQorCXsKKwkgIHF1aWNrID0g KGZpLT5leHRyYV9pbmZvICYmIGZpLT5leHRyYV9pbmZvLT5pbml0aWFsaXNl ZCAKKwkJICAgJiYgZmktPmV4dHJhX2luZm8tPmdvb2RfcHJvbG9ndWUgKTsK KwkgIHMzOTBfZ2V0X2ZyYW1lX2luZm8gKCBxdWljayA/IGZpLT5leHRyYV9p bmZvLT5mdW5jdGlvbl9zdGFydCA6CisJCQkJIHMzOTBfc25pZmZfcGNfZnVu Y3Rpb25fc3RhcnQgKGZpLT5wYyksCisJCQkJIGZpLT5leHRyYV9pbmZvLCBm aSwgIXF1aWNrICk7CisJfQorICAgIH0KK30KKworCisKK0NPUkVfQUREUiBz MzkwX2ZyYW1lX2FyZ3NfYWRkcmVzcyAoc3RydWN0IGZyYW1lX2luZm8gKmZp KQoreworCisgIC8qIEFwcGFyZW50bHkgZ2RiIGFscmVhZHkga25vd3MgZ2Ri X2FyZ3Nfb2Zmc2V0IGl0c2VsZiAqLworICByZXR1cm4gZmktPmZyYW1lOwor fQorCisKK3N0YXRpYyBDT1JFX0FERFIKK3MzOTBfZnJhbWVfc2F2ZWRfcGNf bm9maXggKHN0cnVjdCBmcmFtZV9pbmZvICpmaSkKK3sKKyAgaWYgKGZpLT5l eHRyYV9pbmZvICYmIGZpLT5leHRyYV9pbmZvLT5zYXZlZF9wY192YWxpZCkK KyAgICByZXR1cm4gZmktPmV4dHJhX2luZm8tPnNhdmVkX3BjOworICBzMzkw X2ZyYW1lX2luaXRfc2F2ZWRfcmVncyAoZmkpOworICBpZiAoZmktPmV4dHJh X2luZm8pCisgICAgeworICAgICAgZmktPmV4dHJhX2luZm8tPnNhdmVkX3Bj X3ZhbGlkID0gMTsKKyAgICAgIGlmIChmaS0+ZXh0cmFfaW5mby0+Z29vZF9w cm9sb2d1ZSkKKwl7CisJICBpZihmaS0+c2F2ZWRfcmVnc1tTMzkwX1JFVEFE RFJfUkVHTlVNXSkKKwkgICAgeworCSAgICAgIHJldHVybiAoZmktPmV4dHJh X2luZm8tPnNhdmVkX3BjID0KKwkJICAgICAgQUREUl9CSVRTX1JFTU9WRShy ZWFkX21lbW9yeV9pbnRlZ2VyKGZpLT5zYXZlZF9yZWdzW1MzOTBfUkVUQURE Ul9SRUdOVU1dLAkJCQkJCQkgICBTMzkwX0dQUl9TSVpFKSkpOworCSAgICB9 CisJfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKK0NPUkVfQUREUiBzMzkw X2ZyYW1lX3NhdmVkX3BjIChzdHJ1Y3QgZnJhbWVfaW5mbyAqIGZpKQorewor ICBDT1JFX0FERFIgc2F2ZWRfcGMgPSAwLCBzaWdfcGM7CisKKyAgaWYgKGZp LT5leHRyYV9pbmZvICYmIGZpLT5leHRyYV9pbmZvLT5zaWdfZml4ZWRfc2F2 ZWRfcGNfdmFsaWQpCisgICAgcmV0dXJuIGZpLT5leHRyYV9pbmZvLT5zaWdf Zml4ZWRfc2F2ZWRfcGM7CisgIHNhdmVkX3BjID0gczM5MF9mcmFtZV9zYXZl ZF9wY19ub2ZpeCAoZmkpOworCisgIGlmIChmaS0+ZXh0cmFfaW5mbykKKyAg ICB7CisgICAgICBmaS0+ZXh0cmFfaW5mby0+c2lnX2ZpeGVkX3NhdmVkX3Bj X3ZhbGlkID0gMTsKKyAgICAgIGlmIChzYXZlZF9wYykKKwl7CisJICBpZiAo czM5MF9pc19zaWdyZXR1cm4gKHNhdmVkX3BjLCBmaSwgTlVMTCwgJnNpZ19w YykpCisJICAgIHNhdmVkX3BjID0gc2lnX3BjOworCX0KKyAgICAgIGZpLT5l eHRyYV9pbmZvLT5zaWdfZml4ZWRfc2F2ZWRfcGMgPSBzYXZlZF9wYzsKKyAg ICB9CisgIHJldHVybiBzYXZlZF9wYzsKK30KKworCisKKworLyogV2Ugd2Fu dCBiYWNrdHJhY2VzIG91dCBvZiBzaWduYWwgaGFuZGxlcnMgc28gd2UgZG9u J3QKKyAgIHNldCB0aGlzZnJhbWUtPnNpZ25hbF9oYW5kbGVyX2NhbGxlciB0 byAxICovCisKK0NPUkVfQUREUiBzMzkwX2ZyYW1lX2NoYWluIChzdHJ1Y3Qg ZnJhbWVfaW5mbyAqIHRoaXNmcmFtZSkKK3sKKyAgQ09SRV9BRERSIHByZXZf ZnAgPSAwOyAKKyAKKyAgaWYgKHRoaXNmcmFtZS0+cHJldiAmJiB0aGlzZnJh bWUtPnByZXYtPmZyYW1lKQorICAgIHByZXZfZnAgPSB0aGlzZnJhbWUtPnBy ZXYtPmZyYW1lOworICBlbHNlCisgICAgeworICAgICAgaW50IHNpZ3JldHVy biA9IDA7CisgICAgICBDT1JFX0FERFIgc3JlZ3MgPSAwOworICAgICAgc3Ry dWN0IGZyYW1lX2V4dHJhX2luZm8gcHJldl9mZXh0cmFfaW5mbzsKKworICAg ICAgbWVtc2V0KCZwcmV2X2ZleHRyYV9pbmZvLDAsc2l6ZW9mKHByZXZfZmV4 dHJhX2luZm8pKTsKKyAgICAgIGlmICh0aGlzZnJhbWUtPnBjKQorCXsKKwkg IENPUkVfQUREUiBzYXZlZF9wYywgc2lnX3BjOworCisJICBzYXZlZF9wYyA9 IHMzOTBfZnJhbWVfc2F2ZWRfcGNfbm9maXggKHRoaXNmcmFtZSk7CisJICBp ZiAoc2F2ZWRfcGMpCisJICAgIHsgCisJICAgICAgaWYoKHNpZ3JldHVybiA9 IHMzOTBfaXNfc2lncmV0dXJuIChzYXZlZF9wYywgdGhpc2ZyYW1lLCAmc3Jl Z3MsICZzaWdfcGMpKSkKKwkJc2F2ZWRfcGMgPSBzaWdfcGM7CisJICAgICAg czM5MF9nZXRfZnJhbWVfaW5mbyAoczM5MF9zbmlmZl9wY19mdW5jdGlvbl9z dGFydCAoc2F2ZWRfcGMpLAorCQkJCSAgICZwcmV2X2ZleHRyYV9pbmZvLCBO VUxMLCAxKTsKKwkgICAgfQorCX0KKyAgICAgIGlmIChzaWdyZXR1cm4pCisJ eworCSAgLyogcmVhZCBzaWdyZWdzLHJlZ3MuZ3Byc1sxMSBvciAxNV0gKi8K KwkgIHByZXZfZnAgPSByZWFkX21lbW9yeV9pbnRlZ2VyIChzcmVncyArIAor CQkJCQkgUkVHSVNURVJfQllURShTMzkwX0dQMF9SRUdOVU0gKworCQkJCQkg KHByZXZfZmV4dHJhX2luZm8uZnJhbWVfcG9pbnRlcl9zYXZlZF9wYyA/CisJ CQkJCSAgMTEgOiAxNSApKSwKKwkJCQkJIFMzOTBfR1BSX1NJWkUpOworCSAg dGhpc2ZyYW1lLT5leHRyYV9pbmZvLT5zaWdjb250ZXh0ID0gc3JlZ3MgOwor CX0KKyAgICAgIGVsc2UKKwl7CisJICBpbnQgcmVnbm87CisKKwkgIHJlZ25v ID0gKChwcmV2X2ZleHRyYV9pbmZvLmZyYW1lX3BvaW50ZXJfc2F2ZWRfcGMm JnRoaXNmcmFtZS0+c2F2ZWRfcmVnc1tTMzkwX0ZSQU1FX1JFR05VTV0pIAor CQkgICA/IFMzOTBfRlJBTUVfUkVHTlVNIDogUzM5MF9TUF9SRUdOVU0pOwor CSAgaWYodGhpc2ZyYW1lLT5zYXZlZF9yZWdzW3JlZ25vXSkKKwkgICAgICBw cmV2X2ZwPSByZWFkX21lbW9yeV9pbnRlZ2VyICh0aGlzZnJhbWUtPnNhdmVk X3JlZ3NbcmVnbm9dLFMzOTBfR1BSX1NJWkUpOworCX0KKyAgICB9CisgIHJl dHVybiBBRERSX0JJVFNfUkVNT1ZFIChwcmV2X2ZwKTsKK30KKworLyoKKyAg V2hldGhlciBzdHJ1Y3QgZnJhbWVfZXh0cmFfaW5mbyBpcyBhY3R1YWxseSBu ZWVkZWQgSSdsbCBoYXZlIHRvIGZpZ3VyZQorICBvdXQgYXMgb3VyIGZyYW1l cyBhcmUgc2ltaWxhciB0byByczYwMDAgdGhlcmUgaXMgYSBwb3NzaWJpbGl0 eQorICBpMzg2IGRvc2VuJ3QgbmVlZCBpdC4gKi8KKworCisKKy8qIGEgZ2l2 ZW4gcmV0dXJuIHZhbHVlIGluIGByZWdidWYnIHdpdGggYSB0eXBlIGB2YWx0 eXBlJywgZXh0cmFjdCBhbmQgY29weSBpdHMKKyAgIHZhbHVlIGludG8gYHZh bGJ1ZicgKi8KK3ZvaWQKK3MzOTBfZXh0cmFjdF9yZXR1cm5fdmFsdWUgKHN0 cnVjdCB0eXBlICp2YWx0eXBlLCBjaGFyICpyZWdidWYsIGNoYXIgKnZhbGJ1 ZikKK3sKKyAgLyogZmxvYXRzIGFuZCBkb3VibGVzIGFyZSByZXR1cm5lZCBp biBmcHIwLiBmcHIncyBoYXZlIGEgc2l6ZSBvZiA4IGJ5dGVzLgorICAgICBX ZSBuZWVkIHRvIHRydW5jYXRlIHRoZSByZXR1cm4gdmFsdWUgaW50byBmbG9h dCBzaXplICg0IGJ5dGUpIGlmCisgICAgIG5lY2Vzc2FyeS4gKi8KKyAgaW50 IGxlbiA9IFRZUEVfTEVOR1RIICh2YWx0eXBlKTsKKworICBpZiAoVFlQRV9D T0RFICh2YWx0eXBlKSA9PSBUWVBFX0NPREVfRkxUKQorICAgIHsKKyAgICAg IGlmIChsZW4gPiAoVEFSR0VUX0ZMT0FUX0JJVD4+MykpCisJbWVtY3B5ICh2 YWxidWYsJnJlZ2J1ZltSRUdJU1RFUl9CWVRFIChTMzkwX0ZQMF9SRUdOVU0p XSxsZW4pOworICAgICAgZWxzZQorCXsKKwkgIC8qIGZsb2F0ICovCisJICBE T1VCTEVTVCB2YWw7CisJICAKKwkgIGZsb2F0Zm9ybWF0X3RvX2RvdWJsZXN0 ICgmZmxvYXRmb3JtYXRfaWVlZV9kb3VibGVfYmlnLAorCQkJCSAgICZyZWdi dWZbUkVHSVNURVJfQllURSAoUzM5MF9GUDBfUkVHTlVNKV0sICZ2YWwpOwor CSAgc3RvcmVfZmxvYXRpbmcgKHZhbGJ1ZixsZW4sIHZhbCk7CisJfQorICAg IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBvZmZzZXQgPSAwOworICAg ICAgLyogcmV0dXJuIHZhbHVlIGlzIGNvcGllZCBzdGFydGluZyBmcm9tIHIy LiAqLworICAgICAgaWYgKFRZUEVfTEVOR1RIICh2YWx0eXBlKSA8IFMzOTBf R1BSX1NJWkUpCisJb2Zmc2V0ID0gUzM5MF9HUFJfU0laRSAtIFRZUEVfTEVO R1RIICh2YWx0eXBlKTsKKyAgICAgIG1lbWNweSAodmFsYnVmLAorCSAgICAg IHJlZ2J1ZiArIFJFR0lTVEVSX0JZVEUgKFMzOTBfR1AwX1JFR05VTSArIDIp ICsgb2Zmc2V0LAorCSAgICAgIFRZUEVfTEVOR1RIICh2YWx0eXBlKSk7Cisg ICAgfQorfQorCisKK3N0YXRpYyBjaGFyICoKK3MzOTBfcHJvbW90ZV9pbnRl Z2VyX2FyZ3VtZW50KHN0cnVjdCB0eXBlICp2YWx0eXBlLGNoYXIgKnZhbGJ1 ZixjaGFyICpyZWdfYnVmZixpbnQgKmFyZ2xlbikKK3sKKyAgY2hhciAqdmFs dWU9dmFsYnVmOworICBpbnQgbGVuPVRZUEVfTEVOR1RIICh2YWx0eXBlKTsK KyAgCisgIGlmIChsZW4gPCBTMzkwX0dQUl9TSVpFKQorICAgIHsKKyAgICAg IC8qIFdlIG5lZWQgdG8gdXBncmFkZSB0aGlzIHZhbHVlIHRvIGEgcmVnaXN0 ZXIgdG8gcGFzcyBpdCBjb3JyZWN0bHkgKi8KKyAgICAgIGludCBpZHgsZGlm Zj1TMzkwX0dQUl9TSVpFLWxlbixuZWdhdGl2ZSA9ICghVFlQRV9VTlNJR05F RCAodmFsdHlwZSkmJnZhbHVlWzBdJjB4ODApOwkJICAKKyAgICAgIGZvcihp ZHg9MDtpZHg8UzM5MF9HUFJfU0laRTtpZHgrKykKKwl7CisJICByZWdfYnVm ZltpZHhdID0gKGlkeDxkaWZmID8gKG5lZ2F0aXZlID8gMHhmZjoweDApIDog CisJCQkgICB2YWx1ZVtpZHgtZGlmZl0gKTsKKwl9CisgICAgICB2YWx1ZT1y ZWdfYnVmZjsKKyAgICAgICphcmdsZW4gPSBTMzkwX0dQUl9TSVpFOworICAg IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChsZW4gJiAoUzM5MF9HUFJf U0laRSAtIDEpKQorCXsKKwkgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0 ZGVyciwKKwkJCSAgICAgICJzMzkwX3Byb21vdGVfaW50ZWdlcl9hcmd1bWVu dCBkZXRlY3RlZCBhbiBhcmd1bWVudCBub3QgIgorCQkJICAgICAgImEgbXVs dGlwbGUgb2YgUzM5MF9HUFJfU0laRSAmIGdyZWF0ZXIgdGhhbiBTMzkwX0dQ Ul9TSVpFICIKKwkJCSAgICAgICJ3ZSBtaWdodCBub3QgZGVhbCB3aXRoIHRo aXMgY29ycmVjdGx5LlxuIik7CisJfQorICAgICAgKmFyZ2xlbiA9IGxlbjsK KyAgICB9CisKKyAgcmV0dXJuKHZhbHVlKTsKK30KKwordm9pZAorczM5MF9z dG9yZV9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICp2YWx0eXBlLCBjaGFy ICp2YWxidWYpCit7CisgIGludCAgICAgYXJnbGVuOworICBjaGFyICAgICpy ZWdfYnVmZj1hbGxvY2EobWF4KFMzOTBfRlBSX1NJWkUsUkVHSVNURVJfU0la RSkpLCp2YWx1ZTsKKworICBpZiAoVFlQRV9DT0RFICh2YWx0eXBlKSA9PSBU WVBFX0NPREVfRkxUKQorICAgIHsKKyAgICAgICBET1VCTEVTVCB0ZW1wZmxv YXQgPSBleHRyYWN0X2Zsb2F0aW5nICh2YWxidWYsVFlQRV9MRU5HVEggKHZh bHR5cGUpKTsKKwkgICAgICAKKyAgICAgICBmbG9hdGZvcm1hdF9mcm9tX2Rv dWJsZXN0ICggJmZsb2F0Zm9ybWF0X2llZWVfZG91YmxlX2JpZywmdGVtcGZs b2F0LCByZWdfYnVmZik7CisgICAgICAgd3JpdGVfcmVnaXN0ZXJfYnl0ZXMg KFJFR0lTVEVSX0JZVEUgKFMzOTBfRlAwX1JFR05VTSkscmVnX2J1ZmYsUzM5 MF9GUFJfU0laRSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdmFs dWU9czM5MF9wcm9tb3RlX2ludGVnZXJfYXJndW1lbnQodmFsdHlwZSx2YWxi dWYscmVnX2J1ZmYsJmFyZ2xlbik7CisgICAgICAvKiBFdmVyeXRoaW5nIGVs c2UgaXMgcmV0dXJuZWQgaW4gR1BSMiBhbmQgdXAuICovCisgICAgICB3cml0 ZV9yZWdpc3Rlcl9ieXRlcyAoUkVHSVNURVJfQllURSAoUzM5MF9HUDBfUkVH TlVNICsgMiksIHZhbHVlLCBhcmdsZW4pOworICAgIH0KK30KK3N0YXRpYyBp bnQKK2dkYl9wcmludF9pbnNuX3MzOTAgKGJmZF92bWEgbWVtYWRkciwgZGlz YXNzZW1ibGVfaW5mbyAqIGluZm8pCit7CisgIGJmZF9ieXRlIGluc3RyYnVm ZltTMzkwX01BWF9JTlNUUl9TSVpFXTsKKyAgaW50IGluc3RybGVuLCBjbnQ7 CisKKyAgaW5zdHJsZW4gPSBzMzkwX3JlYWRpbnN0cnVjdGlvbiAoaW5zdHJi dWZmLCAoQ09SRV9BRERSKSBtZW1hZGRyLCBpbmZvKTsKKyAgaWYgKGluc3Ry bGVuIDwgMCkKKyAgICB7CisgICAgICAoKmluZm8tPm1lbW9yeV9lcnJvcl9m dW5jKSAoaW5zdHJsZW4sIG1lbWFkZHIsIGluZm8pOworICAgICAgcmV0dXJu IC0xOworICAgIH0KKyAgZm9yIChjbnQgPSAwOyBjbnQgPCBpbnN0cmxlbjsg Y250KyspCisgICAgaW5mby0+ZnByaW50Zl9mdW5jIChpbmZvLT5zdHJlYW0s ICIlMDJYICIsIGluc3RyYnVmZltjbnRdKTsKKyAgZm9yIChjbnQgPSBpbnN0 cmxlbjsgY250IDwgUzM5MF9NQVhfSU5TVFJfU0laRTsgY250KyspCisgICAg aW5mby0+ZnByaW50Zl9mdW5jIChpbmZvLT5zdHJlYW0sICIgICAiKTsKKyAg aW5zdHJsZW4gPSBwcmludF9pbnNuX3MzOTAgKG1lbWFkZHIsIGluZm8pOwor ICByZXR1cm4gaW5zdHJsZW47Cit9CisKKworCisvKiBOb3QgdGhlIG1vc3Qg ZWZmaWNlbnQgY29kZSBpbiB0aGUgd29ybGQgKi8KK2ludAorczM5MF9mcF9y ZWdudW0gKCkKK3sKKyAgaW50IHJlZ25vID0gUzM5MF9TUF9SRUdOVU07Cisg IHN0cnVjdCBmcmFtZV9leHRyYV9pbmZvIGZleHRyYV9pbmZvOworCisgIENP UkVfQUREUiBwYz1BRERSX0JJVFNfUkVNT1ZFKHJlYWRfcmVnaXN0ZXIgKFMz OTBfUENfUkVHTlVNKSk7CisKKyAgczM5MF9nZXRfZnJhbWVfaW5mbyAoczM5 MF9zbmlmZl9wY19mdW5jdGlvbl9zdGFydChwYyksICZmZXh0cmFfaW5mbywg TlVMTCwKKwkJICAgICAgIDEpOworICBpZiAoZmV4dHJhX2luZm8uZnJhbWVf cG9pbnRlcl9zYXZlZF9wYykKKyAgICByZWdubyA9IFMzOTBfRlJBTUVfUkVH TlVNOworICByZXR1cm4gcmVnbm87Cit9CisKK0NPUkVfQUREUiBzMzkwX3Jl YWRfZnAgKCkKK3sKKyAgcmV0dXJuIHJlYWRfcmVnaXN0ZXIgKHMzOTBfZnBf cmVnbnVtICgpKTsKK30KKworCit2b2lkCitzMzkwX3dyaXRlX2ZwIChDT1JF X0FERFIgdmFsKQoreworICB3cml0ZV9yZWdpc3RlciAoczM5MF9mcF9yZWdu dW0gKCksIHZhbCk7Cit9CisKKwordm9pZAorczM5MF9wdXNoX2R1bW15X2Zy YW1lICgpCit7CisgIENPUkVfQUREUiBvcmlnX3NwID0gcmVhZF9yZWdpc3Rl ciAoUzM5MF9TUF9SRUdOVU0pLCBuZXdfc3A7CisgIHZvaWQgKnNhdmVkX3Jl Z3M9YWxsb2NhKFJFR0lTVEVSX0JZVEVTKTsKKworICBuZXdfc3AgPSAob3Jp Z19zcCAtIChSRUdJU1RFUl9CWVRFUyArIFMzOTBfR1BSX1NJWkUpKTsKKyAg cmVhZF9yZWdpc3Rlcl9ieXRlcyAoMCwgKGNoYXIgKilzYXZlZF9yZWdzLFJF R0lTVEVSX0JZVEVTKTsKKyAgLyogVXNlIHNhdmVkIGNvcHkgaW5zdGVhZCBv ZiBvcmlnX3NwIGFzIHRoaXMgd2lsbCBoYXZlIHRoZSBjb3JyZWN0IGVuZGlh bm5lc3MgKi8KKyAgd3JpdGVfbWVtb3J5IChuZXdfc3AsIChjaGFyICopc2F2 ZWRfcmVncytSRUdJU1RFUl9CWVRFKFMzOTBfU1BfUkVHTlVNKSwKKwkJUzM5 MF9HUFJfU0laRSk7CisgIHdyaXRlX21lbW9yeSAobmV3X3NwICsgUzM5MF9H UFJfU0laRSwgKGNoYXIgKikgJnNhdmVkX3JlZ3MsCisJCVJFR0lTVEVSX0JZ VEVTKTsKKyAgd3JpdGVfcmVnaXN0ZXIgKFMzOTBfU1BfUkVHTlVNLCBuZXdf c3ApOworfQorCisvKiBwb3AgdGhlIGlubmVybW9zdCBmcmFtZSwgZ28gYmFj ayB0byB0aGUgY2FsbGVyLgorICAgIFVzZWQgaW4gYGNhbGxfZnVuY3Rpb25f YnlfaGFuZCcgdG8gcmVtb3ZlIGFuIGFydGlmaWNpYWwgc3RhY2sKKyAgICAg ZnJhbWUuICAqLwordm9pZAorczM5MF9wb3BfZnJhbWUgKCkKK3sKKyAgQ09S RV9BRERSIG5ld19zcCA9IHJlYWRfcmVnaXN0ZXIgKFMzOTBfU1BfUkVHTlVN KSwgb3JpZ19zcDsKKyAgdm9pZCAqc2F2ZWRfcmVncz1hbGxvY2EoUkVHSVNU RVJfQllURVMpOworCisKKyAgcmVhZF9tZW1vcnkgKG5ld19zcCArIFMzOTBf R1BSX1NJWkUsIChjaGFyICopc2F2ZWRfcmVncyxSRUdJU1RFUl9CWVRFUyk7 CisgIHdyaXRlX3JlZ2lzdGVyX2J5dGVzICgwLCAoY2hhciAqKSAmc2F2ZWRf cmVncyxSRUdJU1RFUl9CWVRFUyk7Cit9CisKKy8qIHVzZWQgYnkgY2FsbCBm dW5jdGlvbiBieSBoYW5kCisgIHN0cnVjdF9yZXR1cm4gaW5kaWNhdGVzIHRo YXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RydWN0dXJlICYKKyAgdGhl cmVmb3JlIGdwcjIgc3RvcmVzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0dXJl IHRvIGJlIHJldHVybmVkIGFzCisgIG9wcG9zZWQgdG8gdGhlIGZpcnN0IGFy Z3VtZW50LgorICBDdXJyZW50bHkgSSBoYXZlbid0IHNlZW4gYSBUWVBFX0NP REVfSU5UIHdob3NlIHNpemUgd2Fzbid0IDJebiBvciBsZXNzCisgIHRoYW4g UzM5MF9HUFJfU0laRSB0aGlzIGlzIGdvb2QgYmVjYXVzZSBJIGRvbid0IHNl ZW0gdG8gaGF2ZSB0byB3b3JyeQorICBhYm91dCBzaWduIGV4dGVuZGluZyBw dXNoZWQgYXJndW1lbnRzIChpLmUuIGEgc2lnbmVkIGNoYXIgY3VycmVudGx5 CisgIGNvbWVzIGludG8gdGhpcyBjb2RlIHdpdGggYSBzaXplIG9mIDQgKS4g Ki8KKworQ09SRV9BRERSCitzMzkwX3B1c2hfYXJndW1lbnRzIChpbnQgbmFy Z3MsIHZhbHVlX3B0ciAqIGFyZ3MsIENPUkVfQUREUiBzcCwKKwkJICAgICBp bnQgc3RydWN0X3JldHVybiwgQ09SRV9BRERSIHN0cnVjdF9hZGRyKQorewor ICBpbnQgbnVtX2Zsb2F0X2FyZ3MsIG51bV9ncHJfYXJncywgb3JpZ19udW1f Z3ByX2FyZ3MsIGFyZ25vOworICBpbnQgc2Vjb25kX3Bhc3MsIGxlbiwgYXJn bGVuLCBncHJzX3JlcXVpcmVkOworICBDT1JFX0FERFIgb3V0Z29pbmdfYXJn c19wdHIsIG91dGdvaW5nX2FyZ3Nfc3BhY2U7CisgIHZhbHVlX3B0ciBhcmc7 CisgIHN0cnVjdCB0eXBlICp0eXBlOworICBpbnQgbWF4X251bV9ncHJfYXJn cyA9IDUgLSAoc3RydWN0X3JldHVybiA/IDEgOiAwKTsKKyAgaW50IGFyZzBf cmVnbnVtID0gUzM5MF9HUDBfUkVHTlVNICsgMiArIChzdHJ1Y3RfcmV0dXJu ID8gMSA6IDApOworICBjaGFyICAgICpyZWdfYnVmZj1hbGxvY2EobWF4KFMz OTBfRlBSX1NJWkUsUkVHSVNURVJfU0laRSkpLCp2YWx1ZTsKKworICBmb3Ig KHNlY29uZF9wYXNzID0gMDsgc2Vjb25kX3Bhc3MgPD0gMTsgc2Vjb25kX3Bh c3MrKykKKyAgICB7CisgICAgICBpZiAoc2Vjb25kX3Bhc3MpCisJb3V0Z29p bmdfYXJnc19wdHIgPSBzcCArIFMzOTBfU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7 CisgICAgICBlbHNlCisJb3V0Z29pbmdfYXJnc19wdHIgPSAwOworICAgICAg bnVtX2Zsb2F0X2FyZ3MgPSAwOworICAgICAgbnVtX2dwcl9hcmdzID0gMDsK KyAgICAgIGZvciAoYXJnbm8gPSAwOyBhcmdubyA8IG5hcmdzOyBhcmdubysr KQorCXsKKwkgIGFyZyA9IGFyZ3NbYXJnbm9dOworCSAgdHlwZSA9IGNoZWNr X3R5cGVkZWYgKFZBTFVFX1RZUEUgKGFyZykpOworCSAgbGVuID0gVFlQRV9M RU5HVEggKHR5cGUpOworCSAgaWYgKFRZUEVfQ09ERSAodHlwZSkgPT0gVFlQ RV9DT0RFX0ZMVCkKKwkgICAgeworCSAgICAgIGludCBhbGxfZmxvYXRfcmVn aXN0ZXJzX3VzZWQ9bnVtX2Zsb2F0X2FyZ3MgPiAoR0RCX1RBUkdFVF9JU19F U0FNRSA/IDMgOiAxKTsKKworCSAgICAgIGlmKHNlY29uZF9wYXNzKQorCQl7 CisJCSAgRE9VQkxFU1QgdGVtcGZsb2F0ID0gZXh0cmFjdF9mbG9hdGluZyAo VkFMVUVfQ09OVEVOVFMoYXJnKSxsZW4pOworCSAgICAgIAorCisJCSAgZmxv YXRmb3JtYXRfZnJvbV9kb3VibGVzdCAoIGFsbF9mbG9hdF9yZWdpc3RlcnNf dXNlZCAmJiAKKwkJCQkJICAgICAgbGVuID09IChUQVJHRVRfRkxPQVRfQklU Pj4zKSAKKwkJCQkJICAgICAgPyAmZmxvYXRmb3JtYXRfaWVlZV9zaW5nbGVf YmlnCisJCQkJCSAgICAgIDogJmZsb2F0Zm9ybWF0X2llZWVfZG91YmxlX2Jp ZywgCisJCQkJCSAgICAgICZ0ZW1wZmxvYXQsIHJlZ19idWZmKTsKKwkJICBp ZihhbGxfZmxvYXRfcmVnaXN0ZXJzX3VzZWQpCisJCSAgICB3cml0ZV9tZW1v cnkgKG91dGdvaW5nX2FyZ3NfcHRyLHJlZ19idWZmLCBsZW4pOworCQkgIGVs c2UKKwkJICAgIHdyaXRlX3JlZ2lzdGVyX2J5dGVzIChSRUdJU1RFUl9CWVRF KChTMzkwX0ZQMF9SRUdOVU0pIAorCQkJCQkgICsgKDIgKiBudW1fZmxvYXRf YXJncykpLHJlZ19idWZmLAorCQkJCQlTMzkwX0ZQUl9TSVpFKTsKKwkJfQor CSAgICAgIGlmKGFsbF9mbG9hdF9yZWdpc3RlcnNfdXNlZCkKKwkJb3V0Z29p bmdfYXJnc19wdHIgKz0gbGVuOworCSAgICAgIG51bV9mbG9hdF9hcmdzKys7 CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGdwcnNfcmVxdWly ZWQgPSAoKGxlbiArIChTMzkwX0dQUl9TSVpFIC0gMSkpIC8gUzM5MF9HUFJf U0laRSk7CisKKwkgICAgICB2YWx1ZT1zMzkwX3Byb21vdGVfaW50ZWdlcl9h cmd1bWVudCh0eXBlLFZBTFVFX0NPTlRFTlRTKGFyZykscmVnX2J1ZmYsJmFy Z2xlbik7CisKKwkgICAgICBvcmlnX251bV9ncHJfYXJncyA9IG51bV9ncHJf YXJnczsKKwkgICAgICBudW1fZ3ByX2FyZ3MgKz0gZ3Byc19yZXF1aXJlZDsK KwkgICAgICBpZiAobnVtX2dwcl9hcmdzID4gbWF4X251bV9ncHJfYXJncykK KwkJeworCQkgIGlmIChzZWNvbmRfcGFzcykKKwkJICAgIHdyaXRlX21lbW9y eSAob3V0Z29pbmdfYXJnc19wdHIsIHZhbHVlLCBhcmdsZW4pOworCQkgIG91 dGdvaW5nX2FyZ3NfcHRyICs9IGFyZ2xlbjsKKwkJfQorCSAgICAgIGVsc2UK KwkJeworCQkgIGlmIChzZWNvbmRfcGFzcykKKwkJICAgIHdyaXRlX3JlZ2lz dGVyX2J5dGVzIChSRUdJU1RFUl9CWVRFIChhcmcwX3JlZ251bSkKKwkJCQkJ ICArIChvcmlnX251bV9ncHJfYXJncyAqIFMzOTBfR1BSX1NJWkUpLAorCQkJ CQkgIHZhbHVlLGFyZ2xlbik7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGlm ICghc2Vjb25kX3Bhc3MpCisJeworCSAgb3V0Z29pbmdfYXJnc19zcGFjZSA9 IG91dGdvaW5nX2FyZ3NfcHRyOworCSAgLyogQWxpZ24gdG8gMTYgYnl0ZXMg YmVjYXVzZSBiZWNhdXNlIEkgbGlrZSBhbGlnbm1lbnQgJiAKKwkgICAgIHNv bWUgb2YgdGhlIGtlcm5lbCBjb2RlIHJlcXVpcmVzIDggYnl0ZSBzdGFjayBh bGlnbm1lbnQgYXQgbGVhc3QuICovCisJICBzcCA9IChzcCAtIChTMzkwX1NU QUNLX0ZSQU1FX09WRVJIRUFEICsgb3V0Z29pbmdfYXJnc19wdHIpKSAmICgt MTYpOworCX0KKworICAgIH0KKyAgcmV0dXJuIHNwOworCit9CisKK3ZvaWQK K3MzOTBfZml4X2NhbGxfZHVtbXkgKGNoYXIgKmR1bW15LCBDT1JFX0FERFIg cGMsIENPUkVfQUREUiBmdW4sIGludCBuYXJncywKKwkJICAgICBzdHJ1Y3Qg dmFsdWUgKiphcmdzLCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSwKKwkJICAg ICBpbnQgdXNpbmdfZ2NjKQoreworICBzdG9yZV91bnNpZ25lZF9pbnRlZ2Vy IChkdW1teSs0LFJFR0lTVEVSX1NJWkUsZnVuKTsKK30KKworLyogTnVtYmVy IG9mIGJ5dGVzIG9mIHN0b3JhZ2UgaW4gdGhlIGFjdHVhbCBtYWNoaW5lIHJl cHJlc2VudGF0aW9uCisgICBmb3IgcmVnaXN0ZXIgTi4gCisgICBOb3RlIHRo YXQgdGhlIHVuc2lnbmVkIGNhc3QgaGVyZSBmb3JjZXMgdGhlIHJlc3VsdCBv ZiB0aGUKKyAgIHN1YnRyYWN0aW9uIHRvIHZlcnkgaGlnaCBwb3NpdGl2ZSB2 YWx1ZXMgaWYgTiA8IFMzOTBfRlAwX1JFR05VTSAqLworaW50CitzMzkwX3Jl Z2lzdGVyX3Jhd19zaXplIChpbnQgcmVnX25yKQoreworICByZXR1cm4gKCh1 bnNpZ25lZCkgcmVnX25yIC0gUzM5MF9GUDBfUkVHTlVNKSA8CisJICAgUzM5 MF9OVU1fRlBSUyA/IFMzOTBfRlBSX1NJWkUgOiA0OworfQorCisvKiBSZXR1 cm4gdGhlIEdEQiB0eXBlIG9iamVjdCBmb3IgdGhlICJzdGFuZGFyZCIgZGF0 YSB0eXBlCisgICBvZiBkYXRhIGluIHJlZ2lzdGVyIE4uICAqLworc3RydWN0 IHR5cGUgKgorczM5MF9yZWdpc3Rlcl92aXJ0dWFsX3R5cGUgKGludCByZWdu bykKK3sKKyAgcmV0dXJuICgodW5zaWduZWQpIHJlZ25vIC0gUzM5MF9GUENf UkVHTlVNKSA8CisgICAgUzM5MF9OVU1fRlBSUyA/IGJ1aWx0aW5fdHlwZV9k b3VibGUgOiBidWlsdGluX3R5cGVfaW50OworfQorCitpbnQKK3MzOTB4X3Jl Z2lzdGVyX3Jhd19zaXplIChpbnQgcmVnX25yKQoreworICByZXR1cm4gKHJl Z19uciA9PSBTMzkwX0ZQQ19SRUdOVU0pCisJICB8fCAocmVnX25yID49IFMz OTBfRklSU1RfQUNSICYmIHJlZ19uciA8PSBTMzkwX0xBU1RfQUNSKSA/IDQg OiA4IDsKK30KKworc3RydWN0IHR5cGUgKgorczM5MHhfcmVnaXN0ZXJfdmly dHVhbF90eXBlIChpbnQgcmVnbm8pCit7CisgIHJldHVybiAocmVnbm8gPT0g UzM5MF9GUENfUkVHTlVNKSB8fAorICAgIChyZWdubyA+PSBTMzkwX0ZJUlNU X0FDUiAmJiByZWdubyA8PSBTMzkwX0xBU1RfQUNSKSA/IGJ1aWx0aW5fdHlw ZV9pbnQgOgorICAgIChyZWdubyA+PSBTMzkwX0ZQMF9SRUdOVU0pID8gYnVp bHRpbl90eXBlX2RvdWJsZSA6IGJ1aWx0aW5fdHlwZV9sb25nOworfQorCisK Kwordm9pZAorczM5MF9zdG9yZV9zdHJ1Y3RfcmV0dXJuIChDT1JFX0FERFIg YWRkciwgQ09SRV9BRERSIHNwKQoreworICB3cml0ZV9yZWdpc3RlciAoUzM5 MF9HUDBfUkVHTlVNICsgMiwgYWRkcik7Cit9CisKKworCitzdGF0aWMgdW5z aWduZWQgY2hhciAqCitzMzkwX2JyZWFrcG9pbnRfZnJvbV9wYyAoQ09SRV9B RERSICogcGNwdHIsIGludCAqbGVucHRyKQoreworICBzdGF0aWMgdW5zaWdu ZWQgY2hhciBicmVha3BvaW50W10gPSB7MHgwLDB4MX0gOworCisgICpsZW5w dHIgPSBzaXplb2YgKGJyZWFrcG9pbnQpOworICByZXR1cm4gYnJlYWtwb2lu dDsKK30KKworLyogQWR2YW5jZSBQQyBhY3Jvc3MgYW55IGZ1bmN0aW9uIGVu dHJ5IHByb2xvZ3VlIGluc3RydWN0aW9ucyB0byByZWFjaCBzb21lCisgICAi cmVhbCIgY29kZS4gICovCitDT1JFX0FERFIKK3MzOTBfc2tpcF9wcm9sb2d1 ZSAoQ09SRV9BRERSIHBjKQoreworICBzdHJ1Y3QgZnJhbWVfZXh0cmFfaW5m byBmZXh0cmFfaW5mbzsKKworICBzMzkwX2dldF9mcmFtZV9pbmZvIChwYywg JmZleHRyYV9pbmZvLCBOVUxMLCAxKTsKKyAgcmV0dXJuIGZleHRyYV9pbmZv LnNraXBfcHJvbG9ndWVfZnVuY3Rpb25fc3RhcnQ7Cit9CisKKy8qIHBjX2lu X2NhbGxfZHVtbXlfb24gc3RhY2sgbWF5IHdvcmsgZm9yIHVzIG11c3QgdGVz dCB0aGlzICovCitpbnQKK3MzOTBfcGNfaW5fY2FsbF9kdW1teSAoQ09SRV9B RERSIHBjLCBDT1JFX0FERFIgc3AsIENPUkVfQUREUiBmcmFtZV9hZGRyZXNz KQoreworICByZXR1cm4gcGMgPiBzcCAmJiBwYyA8IChzcCArIDQwOTYpOwor fQorCisvKiBJbW1lZGlhdGVseSBhZnRlciBhIGZ1bmN0aW9uIGNhbGwsIHJl dHVybiB0aGUgc2F2ZWQgcGMuCisgICBDYW4ndCBnbyB0aHJvdWdoIHRoZSBm cmFtZXMgZm9yIHRoaXMgYmVjYXVzZSBvbiBzb21lIG1hY2hpbmVzCisgICB0 aGUgbmV3IGZyYW1lIGlzIG5vdCBzZXQgdXAgdW50aWwgdGhlIG5ldyBmdW5j dGlvbiBleGVjdXRlcworICAgc29tZSBpbnN0cnVjdGlvbnMuICAqLworQ09S RV9BRERSIHMzOTBfc2F2ZWRfcGNfYWZ0ZXJfY2FsbCAoc3RydWN0IGZyYW1l X2luZm8gKiBmcmFtZSkKK3sKKyAgcmV0dXJuIEFERFJfQklUU19SRU1PVkUg KHJlYWRfcmVnaXN0ZXIgKFMzOTBfUkVUQUREUl9SRUdOVU0pKTsKK30KKwor c3RhdGljIENPUkVfQUREUgorczM5MF9hZGRyX2JpdHNfcmVtb3ZlIChDT1JF X0FERFIgYWRkcikKK3sKKyAgcmV0dXJuIChhZGRyKSAmIDB4N2ZmZmZmZmY7 Cit9CisKK2ludAorczM5MF9yZWdpc3Rlcl9ieXRlIChpbnQgcmVnX25yKQor eworICByZXR1cm4gKCgocmVnX25yKSA8PSBTMzkwX0dQX0xBU1RfUkVHTlVN ID8gKHJlZ19ucikgKiBTMzkwX0dQUl9TSVpFIDoKKwkgICAocmVnX25yKSA8 PQorCSAgIFMzOTBfTEFTVF9BQ1IgPyAoUzM5MF9BQ1IwX09GRlNFVCArCisJ CQkgICAgKCgocmVnX25yKSAtIFMzOTBfRklSU1RfQUNSKSAqCisJCQkgICAg IFMzOTBfQUNSX1NJWkUpKSA6IChyZWdfbnIpIDw9CisJICAgUzM5MF9MQVNU X0NSID8gKFMzOTBfQ1IwX09GRlNFVCArCisJCQkgICAoKChyZWdfbnIpIC0g UzM5MF9GSVJTVF9DUikgKgorCQkJICAgIFMzOTBfQ1JfU0laRSkpIDogKHJl Z19ucikgPT0KKwkgICBTMzkwX0ZQQ19SRUdOVU0gPyBTMzkwX0ZQQ19PRkZT RVQgOiAoUzM5MF9GUDBfT0ZGU0VUICsKKwkJCQkJCSgoKHJlZ19ucikgLSBT MzkwX0ZQMF9SRUdOVU0pCisJCQkJCQkgKiBTMzkwX0ZQUl9TSVpFKSkpKTsK K30KKworc3RhdGljIENPUkVfQUREUgorczM5MF9wdXNoX3JldHVybl9hZGRy ZXNzIChDT1JFX0FERFIgcGMsIENPUkVfQUREUiBzcCkKK3sKKyAgcmV0dXJu IHNwOworfQorCitzdHJ1Y3QgZ2RiYXJjaCAqCitzMzkwX2dkYmFyY2hfaW5p dCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9s aXN0ICphcmNoZXMpCit7CisKKyAgLyogaW5zdHJ1Y3Rpb24gc2VxdWVuY2Ug Zm9yIHMzOTAgY2FsbCBkdW1teSBpcyBhcyBmb2xsb3dzCisgICBicmFzICVy MSwuKzggICAgICA7IDB4QTcxNTAwMDQgICAKKyAgIGxvbmcgYmFzcmFkZHIg ICAgIDsgMHgwMDAwMDAwMAorICAgbCAgICAlcjEsMCglcjEpICAgOyAweDU4 MTAxMDAwCisgICBiYXNyICVyMTQsJXIxICAgICA7IDB4MERFMQorICAgYnJl YWtwb2ludCAgICAgICAgOyAweDAwMDEgKi8KKyAgc3RhdGljIExPTkdFU1Qg czM5MF9jYWxsX2R1bW15X3dvcmRzW10gPSB7MHhBNzE1MDAwNCwweDAwMDAw MDAwLAorCQkJCQkgICAgMHg1ODEwMTAwMCwweDBERTEwMDAxfTsKKyAgLyog aW5zdHJ1Y3Rpb24gc2VxdWVuY2UgZm9yIGVzYW1lIGNhbGwgZHVtbXkgaXMg YXMgZm9sbG93cworICAgYnJhcyAlcjEsLisxMiAgICAgOyAweEE3MTUwMDA2 ICAgCisgICBsb25nIGJhc3JhZGRyICAgICA7IDB4MDAwMDAwMDAwMDAwMDAw MAorICAgbGcgICAlcjEsMCglcjEpICAgOyAweEUzMTAxMDAwMDAwNAorICAg YmFzciAlcjE0LCVyMSAgICAgOyAweDBERTEKKyAgIGJyZWFrcG9pbnQgICAg ICAgIDsgMHgwMDAxICovCisgIHN0YXRpYyBMT05HRVNUIHMzOTB4X2NhbGxf ZHVtbXlfd29yZHNbXSA9IHsweEE3MTUwMDA2MDAwMDAwMDAsCisJCQkJCSAg ICAgMHgwMDAwMDAwMEUzMTAxMDAwLAorCQkJCQkgICAgIDB4MDAwNDBERTEw MDAxMDAwMH07CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworICBzdHJ1 Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwOworICBpbnQgZWxmX2ZsYWdzOworCisg IC8qIEZpcnN0IHNlZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgZ2RiYXJjaCB0 aGF0IGNhbiBzYXRpc2Z5IHRoZSByZXF1ZXN0LiAgKi8KKyAgYXJjaGVzID0g Z2RiYXJjaF9saXN0X2xvb2t1cF9ieV9pbmZvIChhcmNoZXMsICZpbmZvKTsK KyAgaWYgKGFyY2hlcyAhPSBOVUxMKQorICAgIHJldHVybiBhcmNoZXMtPmdk YmFyY2g7CisKKyAgLyogTm9uZSBmb3VuZDogaXMgdGhlIHJlcXVlc3QgZm9y IGEgczM5MCBhcmNoaXRlY3R1cmU/ICovCisgIGlmIChpbmZvLmJmZF9hcmNo X2luZm8tPmFyY2ggIT0gYmZkX2FyY2hfczM5MCkKKyAgICByZXR1cm4gTlVM TDsJCS8qIE5vOyB0aGVuIGl0J3Mgbm90IGZvciB1cy4gICovCisKKyAgLyog WWVzOiBjcmVhdGUgYSBuZXcgZ2RiYXJjaCBmb3IgdGhlIHNwZWNpZmllZCBt YWNoaW5lIHR5cGUuICAqLworICBnZGJhcmNoID0gZ2RiYXJjaF9hbGxvYyAo JmluZm8sIE5VTEwpOworCisgIHNldF9nZGJhcmNoX2JlbGlldmVfcGNjX3By b21vdGlvbiAoZ2RiYXJjaCwgMCk7CisKKyAgLyogV2UgZG9uJ3QgZGVmaW5l IHNldF9nZGJhcmNoX2NhbGxfZHVtbXlfYnJlYWtwb2ludF9vZmZzZXQgCisg ICAgIGFzIHdlIGFscmVhZHkgaGF2ZSBhIGJyZWFrcG9pbnQgaW5zZXJ0ZWQu ICovCisgIHNldF9nZGJhcmNoX3VzZV9nZW5lcmljX2R1bW15X2ZyYW1lcyAo Z2RiYXJjaCwgMCk7CisKKyAgc2V0X2dkYmFyY2hfY2FsbF9kdW1teV9sb2Nh dGlvbiAoZ2RiYXJjaCwgT05fU1RBQ0spOworICBzZXRfZ2RiYXJjaF9jYWxs X2R1bW15X3N0YXJ0X29mZnNldCAoZ2RiYXJjaCwgMCk7CisgIHNldF9nZGJh cmNoX3BjX2luX2NhbGxfZHVtbXkgKGdkYmFyY2gsIHMzOTBfcGNfaW5fY2Fs bF9kdW1teSk7CisgIHNldF9nZGJhcmNoX2ZyYW1lX2FyZ3Nfc2tpcCAoZ2Ri YXJjaCwgMCk7CisgIHNldF9nZGJhcmNoX2ZyYW1lX2FyZ3NfYWRkcmVzcyAo Z2RiYXJjaCwgczM5MF9mcmFtZV9hcmdzX2FkZHJlc3MpOworICBzZXRfZ2Ri YXJjaF9mcmFtZV9jaGFpbiAoZ2RiYXJjaCwgczM5MF9mcmFtZV9jaGFpbik7 CisgIHNldF9nZGJhcmNoX2ZyYW1lX2luaXRfc2F2ZWRfcmVncyAoZ2RiYXJj aCwgczM5MF9mcmFtZV9pbml0X3NhdmVkX3JlZ3MpOworICBzZXRfZ2RiYXJj aF9mcmFtZV9sb2NhbHNfYWRkcmVzcyAoZ2RiYXJjaCwgczM5MF9mcmFtZV9h cmdzX2FkZHJlc3MpOworICAvKiBXZSBjYW4ndCBkbyB0aGlzICovCisgIHNl dF9nZGJhcmNoX2ZyYW1lX251bV9hcmdzIChnZGJhcmNoLCBmcmFtZV9udW1f YXJnc191bmtub3duKTsKKyAgc2V0X2dkYmFyY2hfc3RvcmVfc3RydWN0X3Jl dHVybiAoZ2RiYXJjaCwgczM5MF9zdG9yZV9zdHJ1Y3RfcmV0dXJuKTsKKyAg c2V0X2dkYmFyY2hfZXh0cmFjdF9yZXR1cm5fdmFsdWUgKGdkYmFyY2gsIHMz OTBfZXh0cmFjdF9yZXR1cm5fdmFsdWUpOworICBzZXRfZ2RiYXJjaF9zdG9y ZV9yZXR1cm5fdmFsdWUgKGdkYmFyY2gsIHMzOTBfc3RvcmVfcmV0dXJuX3Zh bHVlKTsKKyAgLyogQW1vdW50IFBDIG11c3QgYmUgZGVjcmVtZW50ZWQgYnkg YWZ0ZXIgYSBicmVha3BvaW50LgorICAgICBUaGlzIGlzIG9mdGVuIHRoZSBu dW1iZXIgb2YgYnl0ZXMgaW4gQlJFQUtQT0lOVAorICAgICBidXQgbm90IGFs d2F5cy4gICovCisgIHNldF9nZGJhcmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsg KGdkYmFyY2gsIDIpOworICBzZXRfZ2RiYXJjaF9wb3BfZnJhbWUgKGdkYmFy Y2gsIHMzOTBfcG9wX2ZyYW1lKTsKKyAgc2V0X2dkYmFyY2hfcHVzaF9kdW1t eV9mcmFtZSAoZ2RiYXJjaCwgczM5MF9wdXNoX2R1bW15X2ZyYW1lKTsKKyAg c2V0X2dkYmFyY2hfcHVzaF9hcmd1bWVudHMgKGdkYmFyY2gsIHMzOTBfcHVz aF9hcmd1bWVudHMpOworICBzZXRfZ2RiYXJjaF9pZWVlX2Zsb2F0IChnZGJh cmNoLCAxKTsKKyAgLyogU3RhY2sgZ3Jvd3MgZG93bndhcmQuICAqLworICBz ZXRfZ2RiYXJjaF9pbm5lcl90aGFuIChnZGJhcmNoLCBjb3JlX2FkZHJfbGVz c3RoYW4pOworICAvKiBPZmZzZXQgZnJvbSBhZGRyZXNzIG9mIGZ1bmN0aW9u IHRvIHN0YXJ0IG9mIGl0cyBjb2RlLgorICAgICBaZXJvIG9uIG1vc3QgbWFj aGluZXMuICAqLworICBzZXRfZ2RiYXJjaF9mdW5jdGlvbl9zdGFydF9vZmZz ZXQgKGdkYmFyY2gsIDApOworICBzZXRfZ2RiYXJjaF9tYXhfcmVnaXN0ZXJf cmF3X3NpemUgKGdkYmFyY2gsIDgpOworICBzZXRfZ2RiYXJjaF9tYXhfcmVn aXN0ZXJfdmlydHVhbF9zaXplIChnZGJhcmNoLCA4KTsKKyAgc2V0X2dkYmFy Y2hfYnJlYWtwb2ludF9mcm9tX3BjIChnZGJhcmNoLCBzMzkwX2JyZWFrcG9p bnRfZnJvbV9wYyk7CisgIHNldF9nZGJhcmNoX3NraXBfcHJvbG9ndWUgKGdk YmFyY2gsIHMzOTBfc2tpcF9wcm9sb2d1ZSk7CisgIHNldF9nZGJhcmNoX2lu aXRfZXh0cmFfZnJhbWVfaW5mbyAoZ2RiYXJjaCwgczM5MF9pbml0X2V4dHJh X2ZyYW1lX2luZm8pOworICBzZXRfZ2RiYXJjaF9pbml0X2ZyYW1lX3BjX2Zp cnN0IChnZGJhcmNoLCBzMzkwX2luaXRfZnJhbWVfcGNfZmlyc3QpOworICBz ZXRfZ2RiYXJjaF9yZWFkX2ZwIChnZGJhcmNoLCBzMzkwX3JlYWRfZnApOwor ICBzZXRfZ2RiYXJjaF93cml0ZV9mcCAoZ2RiYXJjaCwgczM5MF93cml0ZV9m cCk7CisgIC8qIFRoaXMgZnVuY3Rpb24gdGhhdCB0ZWxscyB1cyB3aGV0aGVy IHRoZSBmdW5jdGlvbiBpbnZvY2F0aW9uIHJlcHJlc2VudGVkCisgICAgIGJ5 IEZJIGRvZXMgbm90IGhhdmUgYSBmcmFtZSBvbiB0aGUgc3RhY2sgYXNzb2Np YXRlZCB3aXRoIGl0LiAgSWYgaXQKKyAgICAgZG9lcyBub3QsIEZSQU1FTEVT UyBpcyBzZXQgdG8gMSwgZWxzZSAwLiAgKi8KKyAgc2V0X2dkYmFyY2hfZnJh bWVsZXNzX2Z1bmN0aW9uX2ludm9jYXRpb24gKGdkYmFyY2gsCisJCQkJCSAg ICAgczM5MF9mcmFtZWxlc3NfZnVuY3Rpb25faW52b2NhdGlvbik7CisgIC8q IFJldHVybiBzYXZlZCBQQyBmcm9tIGEgZnJhbWUgKi8KKyAgc2V0X2dkYmFy Y2hfZnJhbWVfc2F2ZWRfcGMgKGdkYmFyY2gsIHMzOTBfZnJhbWVfc2F2ZWRf cGMpOworICAvKiBGUkFNRV9DSEFJTiB0YWtlcyBhIGZyYW1lJ3Mgbm9taW5h bCBhZGRyZXNzCisgICAgIGFuZCBwcm9kdWNlcyB0aGUgZnJhbWUncyBjaGFp bi1wb2ludGVyLiAqLworICBzZXRfZ2RiYXJjaF9mcmFtZV9jaGFpbiAoZ2Ri YXJjaCwgczM5MF9mcmFtZV9jaGFpbik7CisgIHNldF9nZGJhcmNoX3NhdmVk X3BjX2FmdGVyX2NhbGwgKGdkYmFyY2gsIHMzOTBfc2F2ZWRfcGNfYWZ0ZXJf Y2FsbCk7CisgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX2J5dGUgKGdkYmFyY2gs IHMzOTBfcmVnaXN0ZXJfYnl0ZSk7CisgIHNldF9nZGJhcmNoX3BjX3JlZ251 bSAoZ2RiYXJjaCwgUzM5MF9QQ19SRUdOVU0pOworICBzZXRfZ2RiYXJjaF9z cF9yZWdudW0gKGdkYmFyY2gsIFMzOTBfU1BfUkVHTlVNKTsKKyAgc2V0X2dk YmFyY2hfZnBfcmVnbnVtIChnZGJhcmNoLCBTMzkwX0ZQX1JFR05VTSk7Cisg IHNldF9nZGJhcmNoX2ZwMF9yZWdudW0gKGdkYmFyY2gsIFMzOTBfRlAwX1JF R05VTSk7CisgIHNldF9nZGJhcmNoX251bV9yZWdzIChnZGJhcmNoLCBTMzkw X05VTV9SRUdTKTsKKyAgc2V0X2dkYmFyY2hfY2Fubm90X2ZldGNoX3JlZ2lz dGVyIChnZGJhcmNoLCBzMzkwX2Nhbm5vdF9mZXRjaF9yZWdpc3Rlcik7Cisg IHNldF9nZGJhcmNoX2Nhbm5vdF9zdG9yZV9yZWdpc3RlciAoZ2RiYXJjaCwg czM5MF9jYW5ub3RfZmV0Y2hfcmVnaXN0ZXIpOworICBzZXRfZ2RiYXJjaF9n ZXRfc2F2ZWRfcmVnaXN0ZXIgKGdkYmFyY2gsIGdlbmVyaWNfZ2V0X3NhdmVk X3JlZ2lzdGVyKTsKKyAgc2V0X2dkYmFyY2hfdXNlX3N0cnVjdF9jb252ZW50 aW9uIChnZGJhcmNoLCBnZW5lcmljX3VzZV9zdHJ1Y3RfY29udmVudGlvbik7 CisgIHNldF9nZGJhcmNoX2ZyYW1lX2NoYWluX3ZhbGlkIChnZGJhcmNoLCBm aWxlX2ZyYW1lX2NoYWluX3ZhbGlkKTsKKyAgc2V0X2dkYmFyY2hfcmVnaXN0 ZXJfbmFtZSAoZ2RiYXJjaCwgczM5MF9yZWdpc3Rlcl9uYW1lKTsKKyAgc2V0 X2dkYmFyY2hfc3RhYl9yZWdfdG9fcmVnbnVtIChnZGJhcmNoLCBzMzkwX3N0 YWJfcmVnX3RvX3JlZ251bSk7CisgIHNldF9nZGJhcmNoX2R3YXJmX3JlZ190 b19yZWdudW0gKGdkYmFyY2gsIHMzOTBfc3RhYl9yZWdfdG9fcmVnbnVtKTsK KyAgc2V0X2dkYmFyY2hfZHdhcmYyX3JlZ190b19yZWdudW0gKGdkYmFyY2gs IHMzOTBfc3RhYl9yZWdfdG9fcmVnbnVtKTsKKworCisgIC8qIFN0dWZmIGJl bG93IGhlcmUgd291bGRuJ3QgYmUgcmVxdWlyZWQgaWYgZ2RiYXJjaC5zaCB3 YXMgYSBsaXR0bGUgKi8KKyAgLyogbW9yZSBpbnRlbGxpZ2VudCAqLworICBz ZXRfZ2RiYXJjaF9jYWxsX2R1bW15X2JyZWFrcG9pbnRfb2Zmc2V0X3AgKGdk YmFyY2gsIDApOworICBzZXRfZ2RiYXJjaF9jYWxsX2R1bW15X3AgKGdkYmFy Y2gsIDEpOworICBzZXRfZ2RiYXJjaF9jYWxsX2R1bW15X3N0YWNrX2FkanVz dF9wIChnZGJhcmNoLCAwKTsKKyAgc2V0X2dkYmFyY2hfZXh0cmFjdF9zdHJ1 Y3RfdmFsdWVfYWRkcmVzcyAoZ2RiYXJjaCwgMCk7CisgIHNldF9nZGJhcmNo X2ZpeF9jYWxsX2R1bW15IChnZGJhcmNoLCBzMzkwX2ZpeF9jYWxsX2R1bW15 KTsKKyAgc2V0X2dkYmFyY2hfcHJlcGFyZV90b19wcm9jZWVkIChnZGJhcmNo LGxpbnV4dGhyZWFkc19wcmVwYXJlX3RvX3Byb2NlZWQpOworICBzZXRfZ2Ri YXJjaF9wdXNoX3JldHVybl9hZGRyZXNzIChnZGJhcmNoLHMzOTBfcHVzaF9y ZXR1cm5fYWRkcmVzcyk7CisgIAorICBzd2l0Y2ggKGluZm8uYmZkX2FyY2hf aW5mby0+bWFjaCkKKyAgICB7CisgICAgY2FzZSBiZmRfbWFjaF9zMzkwX2Vz YToKKyAgICAgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX3NpemUgKGdkYmFyY2gs IDQpOworICAgICAgc2V0X2dkYmFyY2hfY2FsbF9kdW1teV9sZW5ndGggKGdk YmFyY2gsIDE2KTsKKyAgICAgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX3Jhd19z aXplIChnZGJhcmNoLCBzMzkwX3JlZ2lzdGVyX3Jhd19zaXplKTsKKyAgICAg IHNldF9nZGJhcmNoX3JlZ2lzdGVyX3ZpcnR1YWxfc2l6ZSAoZ2RiYXJjaCwg czM5MF9yZWdpc3Rlcl9yYXdfc2l6ZSk7CisgICAgICBzZXRfZ2RiYXJjaF9y ZWdpc3Rlcl92aXJ0dWFsX3R5cGUgKGdkYmFyY2gsIHMzOTBfcmVnaXN0ZXJf dmlydHVhbF90eXBlKTsKKworICAgICAgc2V0X2dkYmFyY2hfYWRkcl9iaXRz X3JlbW92ZSAoZ2RiYXJjaCwgczM5MF9hZGRyX2JpdHNfcmVtb3ZlKTsKKyAg ICAgCisgICAgICBzZXRfZ2RiYXJjaF9zaXplb2ZfY2FsbF9kdW1teV93b3Jk cyAoZ2RiYXJjaCwKKwkJCQkJICAgc2l6ZW9mIChzMzkwX2NhbGxfZHVtbXlf d29yZHMpKTsKKyAgICAgIHNldF9nZGJhcmNoX2NhbGxfZHVtbXlfd29yZHMg KGdkYmFyY2gsIHMzOTBfY2FsbF9kdW1teV93b3Jkcyk7CisgICAgICBicmVh azsKKyAgICBjYXNlIGJmZF9tYWNoX3MzOTBfZXNhbWU6CisgICAgICBzZXRf Z2RiYXJjaF9yZWdpc3Rlcl9zaXplIChnZGJhcmNoLCA4KTsKKyAgICAgIHNl dF9nZGJhcmNoX2NhbGxfZHVtbXlfbGVuZ3RoIChnZGJhcmNoLCAyMik7Cisg ICAgICBzZXRfZ2RiYXJjaF9yZWdpc3Rlcl9yYXdfc2l6ZSAoZ2RiYXJjaCwg czM5MHhfcmVnaXN0ZXJfcmF3X3NpemUpOworICAgICAgc2V0X2dkYmFyY2hf cmVnaXN0ZXJfdmlydHVhbF9zaXplIChnZGJhcmNoLCBzMzkweF9yZWdpc3Rl cl9yYXdfc2l6ZSk7CisgICAgICBzZXRfZ2RiYXJjaF9yZWdpc3Rlcl92aXJ0 dWFsX3R5cGUgKGdkYmFyY2gsCisJCQkJCSBzMzkweF9yZWdpc3Rlcl92aXJ0 dWFsX3R5cGUpOworCisgICAgICBzZXRfZ2RiYXJjaF9sb25nX2JpdCAoZ2Ri YXJjaCwgNjQpOworICAgICAgc2V0X2dkYmFyY2hfbG9uZ19sb25nX2JpdCAo Z2RiYXJjaCwgNjQpOworICAgICAgc2V0X2dkYmFyY2hfcHRyX2JpdCAoZ2Ri YXJjaCwgNjQpOworICAgICAgc2V0X2dkYmFyY2hfc2l6ZW9mX2NhbGxfZHVt bXlfd29yZHMgKGdkYmFyY2gsCisJCQkJCSAgIHNpemVvZiAoczM5MHhfY2Fs bF9kdW1teV93b3JkcykpOworICAgICAgc2V0X2dkYmFyY2hfY2FsbF9kdW1t eV93b3JkcyAoZ2RiYXJjaCwgczM5MHhfY2FsbF9kdW1teV93b3Jkcyk7Cisg ICAgICBicmVhazsKKyAgICB9CisgIC8qIFJFR0lTVEVSX1NJWkUgaXMgc2V0 IHVwIHNvIHRoaXMgaXMgY29ycmVjdCBoZXJlICovCisgIHNldF9nZGJhcmNo X3JlZ2lzdGVyX2J5dGVzIChnZGJhcmNoLCBTMzkwX1JFR0lTVEVSX0JZVEVT KTsKKyAgcmV0dXJuIGdkYmFyY2g7Cit9CisKKworCit2b2lkCitfaW5pdGlh bGl6ZV9zMzkwX3RkZXAgKCkKK3sKKworICAvKiBIb29rIHVzIGludG8gdGhl IGdkYmFyY2ggbWVjaGFuaXNtLiAgKi8KKyAgcmVnaXN0ZXJfZ2RiYXJjaF9p bml0IChiZmRfYXJjaF9zMzkwLCBzMzkwX2dkYmFyY2hfaW5pdCk7CisgIGlm ICghdG1fcHJpbnRfaW5zbikJCS8qIFNvbWVvbmUgbWF5IGhhdmUgYWxyZWFk eSBzZXQgaXQgKi8KKyAgICB0bV9wcmludF9pbnNuID0gZ2RiX3ByaW50X2lu c25fczM5MDsKK30KKworCi0tLSBzcmMub3JpZy9nZGIvZ2RiYXJjaC5zaAlT YXQgQXVnIDExIDAyOjU5OjI5IDIwMDEKKysrIHNyYy5uZXcvZ2RiL2dkYmFy Y2guc2gJRnJpIEF1ZyAyNCAxOTo0MjowMyAyMDAxCkBAIC00NDAsNyArNDQw LDcgQEAKIHY6MjpDQUxMX0RVTU1ZX0xPQ0FUSU9OOmludDpjYWxsX2R1bW15 X2xvY2F0aW9uOjo6OjA6MAogZjoyOkNBTExfRFVNTVlfQUREUkVTUzpDT1JF X0FERFI6Y2FsbF9kdW1teV9hZGRyZXNzOnZvaWQ6OjowOjA6OmdkYmFyY2gt PmNhbGxfZHVtbXlfbG9jYXRpb24gPT0gQVRfRU5UUllfUE9JTlQgJiYgZ2Ri YXJjaC0+Y2FsbF9kdW1teV9hZGRyZXNzID09IDAKIHY6MjpDQUxMX0RVTU1Z X1NUQVJUX09GRlNFVDpDT1JFX0FERFI6Y2FsbF9kdW1teV9zdGFydF9vZmZz ZXQ6Ojo6MDotMTo6OjB4JTA4bHgKLXY6MjpDQUxMX0RVTU1ZX0JSRUFLUE9J TlRfT0ZGU0VUOkNPUkVfQUREUjpjYWxsX2R1bW15X2JyZWFrcG9pbnRfb2Zm c2V0Ojo6OjA6LTE6OjoweCUwOGx4OjpDQUxMX0RVTU1ZX0JSRUFLUE9JTlRf T0ZGU0VUX1AKK3Y6MjpDQUxMX0RVTU1ZX0JSRUFLUE9JTlRfT0ZGU0VUOkNP UkVfQUREUjpjYWxsX2R1bW15X2JyZWFrcG9pbnRfb2Zmc2V0Ojo6OjA6LTE6 OmdkYmFyY2gtPmNhbGxfZHVtbXlfYnJlYWtwb2ludF9vZmZzZXRfcCAmJiBn ZGJhcmNoLT5jYWxsX2R1bW15X2JyZWFrcG9pbnRfb2Zmc2V0ID09IC0xOjB4 JTA4bHg6OkNBTExfRFVNTVlfQlJFQUtQT0lOVF9PRkZTRVRfUAogdjoxOkNB TExfRFVNTVlfQlJFQUtQT0lOVF9PRkZTRVRfUDppbnQ6Y2FsbF9kdW1teV9i cmVha3BvaW50X29mZnNldF9wOjo6OjA6LTEKIHY6MjpDQUxMX0RVTU1ZX0xF TkdUSDppbnQ6Y2FsbF9kdW1teV9sZW5ndGg6Ojo6MDotMTo6Ojo6Q0FMTF9E VU1NWV9MT0NBVElPTiA9PSBCRUZPUkVfVEVYVF9FTkQgfHwgQ0FMTF9EVU1N WV9MT0NBVElPTiA9PSBBRlRFUl9URVhUX0VORAogZjoyOlBDX0lOX0NBTExf RFVNTVk6aW50OnBjX2luX2NhbGxfZHVtbXk6Q09SRV9BRERSIHBjLCBDT1JF X0FERFIgc3AsIENPUkVfQUREUiBmcmFtZV9hZGRyZXNzOnBjLCBzcCwgZnJh bWVfYWRkcmVzczo6MDowCg== ------------=_1583534360-29878-7 Content-Type: text/plain; charset=us-ascii; name="=?iso-8859-1?Q?S390ChangeLog.270801.gdb?=" Content-Disposition: inline; filename="=?iso-8859-1?Q?S390ChangeLog.270801.gdb?=" Content-Transfer-Encoding: base64 Content-Length: 891 MjAwMS0xNi0wOCAgRC5KLiBCYXJyb3cgPGRqYmFycm93QGRlLmlibS5jb20s YmFycm93X2RqQHlhaG9vLmNvbT4KCSogczM5MC1uYXQuYyBOZXcgZmlsZSBB ZGRlZCBmb3IgUy8zOTAgMzEgJiA2NCBiaXQgdGFyZ2V0LgoJKiBzMzkwLXRk ZXAuYyBMaWtld2lzZS4KCSogY29uZmlnL3MzOTAvbm0tbGludXguaCBMaWtl d2lzZS4JIAoJKiBjb25maWcvczM5MC9zMzkweC5tdCBMaWtld2lzZS4KCSog Y29uZmlnL3MzOTAvdG0tbGludXguaCAgTGlrZXdpc2UuICAKCSogY29uZmln L3MzOTAveG0tbGludXguaCBMaWtld2lzZQoJKiBjb25maWcvczM5MC9zMzkw Lm1oIExpa2V3aXNlLgoJKiBjb25maWcvczM5MC9zMzkwLm10IExpa2V3aXNl LgoJKiBjb25maWcvczM5MC90bS1zMzkwLmggTGlrZXdpc2UuCiAgICAgICAg KiBjb25maWcuaW4gQWRkZWQgZGVmaW5pdGlvbnMgZm9yIFMvMzkwIDMxICYg NjQgYml0IHRhcmdldC4KCSogY29uZmlndXJlLmhvc3QgTGlrZXdpc2UuCgkq IGNvbmZpZ3VyZS5pbiBMaWtld2lzZS4KCSogY29uZmlndXJlLnRndCAgTGlr ZXdpc2UuCgogICAgICAgICogZ2RiYXJjaC5zaCAKCUZpeGVkIENBTExfRFVN TVlfQlJFQUtQT0lOVF9PRkZTRVQgdG8gY2hlY2sKCUNBTExfRFVNTVlfQlJF QUtQT0lOVF9PRkZTRVRfUC4KCgoKCgoKCgoK ------------=_1583534360-29878-7 Content-Type: text/plain; charset=us-ascii; name="=?iso-8859-1?Q?S390ChangeLog.270801.Root?=" Content-Disposition: inline; filename="=?iso-8859-1?Q?S390ChangeLog.270801.Root?=" Content-Transfer-Encoding: base64 Content-Length: 236 MjAwMS0wOC0yMiAgRC5KLiBCYXJyb3cgPGRqYmFycm93QGRlLmlibS5jb20s YmFycm93X2RqQHlhaG9vLmNvbT4KCSogY29uZmlnLnN1YjogQWRkZWQgUy8z OTAgMzEgJiA2NCBiaXQgdGFyZ2V0LgoJKiBjb25maWd1cmUuaW46IExpa2V3 aXNlLgogICAgICAgICogY29uZmlnLmd1ZXNzOiBMaWtld2lzZS4= ------------=_1583534360-29878-7-- >From DJBARROW@de.ibm.com Tue Aug 28 10:23:00 2001 From: "Denis Joseph Barrow" To: Andrew Cagney Cc: "Martin Schwidefsky" , "Ulrich Weigand" , gdb-patches@sourceware.cygnus.com Subject: Re: New gdb 31 & 64 bit patches for S/390 Date: Tue, 28 Aug 2001 10:23:00 -0000 Message-id: X-SW-Source: 2001-08/msg00283.html Content-length: 9406 Hi Andrew, I'm currently looking at porting the gdbserver to s390 on request of a JVM developer here at IBM, On looking at gdbserver/low-linux.c the gdbserver isn't multiarch compatible, It looks like I either have to in the forseeable future put some non multiarch definitions back into tm-s390.h & #ifdef GDB_MULTI_ARCH them again despite recommendations to move everything to s390-tdep.c or else duplicate definitions in low-linux.c ( something I don't want to do as there is enough stuff in there). D.J. Barrow Gnu/Linux for S/390 kernel developer eMail: djbarrow@de.ibm.com,barrow_dj@yahoo.com Phone: +49-(0)7031-16-2583 IBM Germany Lab, Schönaicherstr. 220, 71032 Böblingen Andrew Cagney on 05.07.2001 05:33:53 Please respond to Andrew Cagney To: Denis Joseph Barrow/Germany/Contr/IBM@IBMDE cc: gdb-patches@sourceware.cygnus.com, s390-patches@gnu.org, Martin Schwidefsky/Germany/IBM@IBMDE, Christoph Arenz/Germany/IBM@IBMDE Subject: Re: New gdb 31 & 64 bit patches for S/390 The attached are comments on tm-s390.h. As far as I can tell the file could be empty. This is pretty significant since it means that you've managed to pure-multi-arch the s390 target. Congratulations! To summarise the comments, my main concern is that it appeared to contain many s390-nat.c specific declarations. Andrew diff -u -r -N src.orig/gdb/config/s390/tm-s390.h src.new/gdb/config/s390/tm-s390.h --- src.orig/gdb/config/s390/tm-s390.h Thu Jan 1 01:00:00 1970 +++ src.new/gdb/config/s390/tm-s390.h Tue Feb 27 16:47:03 2001 @@ -0,0 +1,390 @@ +/* Macro definitions for GDB on an S390. + Copyright (C) 1999-2001 Free Software Foundation, Inc. + Contributed by D.J. Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) + for IBM Deutschland Entwicklung GmbH, IBM Corporation. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#if !defined(TM_S390_H) +#define TM_S390_H 1 +#include Per previous comments, this is simply wrong. The target code needs to be host independant and cannot drag in host dependant headers. +#if GDB_MULTI_ARCH +#define GDB_TARGET_IS_ESAME (TARGET_ARCHITECTURE->mach == bfd_mach_s390_esame) I would strongly recommend changing this to a function. It can be moved to s390-tdep.c. +#else .... +#endif /* GDB_MULTI_ARCH */ + +#if defined(S390_TDEP) && GDB_MULTI_ARCH +#define S390_REGISTER_SIZE REGISTER_SIZE +#else .... +#endif /* defined(S390_TDEP) && GDB_MULTI_ARCH */ + + +#define S390_STACK_FRAME_OVERHEAD (GDB_TARGET_IS_ESAME ? 160:96) Again, I would strongly recommend changing this to a function. It can be moved to s390-tdep.c or s390-tdep.h (if s390-nat uses it). +#define S390_NUM_GPRS (16) +#define S390_GPR_SIZE S390_REGISTER_SIZE +#define S390_PSW_MASK_SIZE S390_REGISTER_SIZE +#define S390_PSW_ADDR_SIZE S390_REGISTER_SIZE +#define S390_NUM_FPRS (16) +#define S390_FPR_SIZE (8) +#define S390_FPC_SIZE (4) +#define S390_FPC_PAD_SIZE (4) /* gcc insists on aligning the fpregs */ +#define S390_NUM_CRS (16) +#define S390_CR_SIZE S390_REGISTER_SIZE +#define S390_NUM_ACRS (16) +#define S390_ACR_SIZE (4) + +#define S390_ACR0_OFFSET ((S390_PSW_MASK_SIZE+S390_PSW_ADDR_SIZE) +(S390_GPR_SIZE*S390_NUM_GPRS)) +#define S390_CR0_OFFSET (S390_ACR0_OFFSET+(S390_ACR_SIZE+S390_NUM_ACRS)) +#define S390_FPC_OFFSET (S390_CR0_OFFSET+(S390_CR_SIZE*S390_NUM_CRS)) +#define S390_FP0_OFFSET (S390_FPC_OFFSET+(S390_FPC_SIZE+S390_FPC_PAD_SIZE)) +#define S390_GPR6_STACK_OFFSET (GDB_TARGET_IS_ESAME ? 48:24) I suspect these can be moved to s390-tdep.c. + +typedef struct +{ + __u32 mask; + __u32 addr; +} s390_psw_t __attribute__ ((aligned (8))); This declaration doesn't belong in tm-s390.h. The code (s390-linux-nat.c?) that refers to it can possibly be greatly simplified. +typedef struct +{ + __u64 mask; + __u64 addr; +} s390x_psw_t __attribute__ ((aligned (8))); Again this doesn't belong here. +typedef union +{ + struct + { + __u32 hi; + __u32 lo; + } + fp; + __u32 f; +} s390_freg_t; ... +typedef struct +{ + /* The compiler appears to like aligning freg_t on an 8 byte boundary + so I always access fpregs, this was causing fun when I was doing + coersions. */ + __u32 fpc; + s390_freg_t fprs[S390_NUM_FPRS]; +} __s390_fp_regs; + +/* gdb structures & the kernel have this much always in common */ +#define __S390_REGS_COMMON \ +s390_psw_t psw; \ +__u32 gprs[S390_NUM_GPRS]; \ +__u32 acrs[S390_NUM_ACRS]; + +#define __S390X_REGS_COMMON \ +s390x_psw_t psw; \ +__u64 gprs[S390_NUM_GPRS]; \ +__u32 acrs[S390_NUM_ACRS]; + + +typedef struct +{ +__S390_REGS_COMMON +} __s390_regs_common; + +typedef struct +{ +__S390X_REGS_COMMON +} __s390x_regs_common; .... +/* Sequence of bytes for breakpoint illegal instruction. */ +#define S390_BREAKPOINT {0x0,0x1} The code should be using breakpoint_from_pc so that this macro is unnecessary. +#define S390_BREAKPOINT_U16 ((__u16)0x0001) +#define S390_SYSCALL_OPCODE ((__u16)0x0a00) +#define S390_SYSCALL_SIZE 2 + +#define S390_MAX_INSTR_SIZE 6 +#define S390_NUM_REGS (2+S390_NUM_GPRS+S390_NUM_ACRS+S390_NUM_CRS+1+S390_NUM_FPRS) +#define S390_FIRST_ACR (2+S390_NUM_GPRS) +#define S390_LAST_ACR (S390_FIRST_ACR+S390_NUM_ACRS-1) +#define S390_FIRST_CR (S390_FIRST_ACR+S390_NUM_ACRS) +#define S390_LAST_CR (S390_FIRST_CR+S390_NUM_CRS-1) + +#define S390_PSWM_REGNUM 0 +#define S390_PC_REGNUM 1 +#define S390_GP0_REGNUM 2 /* GPR register 0 */ +#define S390_GP_LAST_REGNUM (S390_GP0_REGNUM+S390_NUM_GPRS-1) +/* Usually return address */ +#define S390_RETADDR_REGNUM (S390_GP0_REGNUM+14) +/* Contains address of top of stack */ +#define S390_SP_REGNUM (S390_GP0_REGNUM+15) +/* needed in findvar.c still */ +#define S390_FP_REGNUM S390_SP_REGNUM +#define S390_FRAME_REGNUM (S390_GP0_REGNUM+11) +#define S390_FPC_REGNUM (S390_GP0_REGNUM+S390_NUM_GPRS+S390_NUM_ACRS+S390_NUM_CRS) +/* FPR (Floating point) register 0 */ +#define S390_FP0_REGNUM (S390_FPC_REGNUM+1) +/* Last floating point register */ +#define S390_FPLAST_REGNUM (S390_FP0_REGNUM+S390_NUM_FPRS-1) +#define S390_LAST_REGNUM S390_FPLAST_REGNUM + +/* The top of this structure is as similar as possible to a + pt_regs structure to simplify code */ +typedef struct +{ + __S390_REGS_COMMON + __u32 crs[S390_NUM_CRS]; + __s390_fp_regs fp_regs; +} s390_gdb_regs __attribute__ ((packed)); ... + +typedef struct +{ + __S390X_REGS_COMMON + __u64 crs[S390_NUM_CRS]; + __s390_fp_regs fp_regs; +} s390x_gdb_regs __attribute__ ((packed)); ... + + +#define S390_REGISTER_NAMES \ +{ \ +"pswm","pswa", \ +"gpr0","gpr1","gpr2","gpr3","gpr4","gpr5","gpr6","gpr7", \ +"gpr8","gpr9","gpr10","gpr11","gpr12","gpr13","gpr14","gpr15", \ +"acr0","acr1","acr2","acr3","acr4","acr5","acr6","acr7", \ +"acr8","acr9","acr10","acr11","acr12","acr13","acr14","acr15", \ +"cr0","cr1","cr2","cr3","cr4","cr5","cr6","cr7", \ +"cr8","cr9","cr10","cr11","cr12","cr13","cr14","cr15", \ +"fpc", \ +"fpr0","fpr1","fpr2","fpr3","fpr4","fpr5","fpr6","fpr7", \ +"fpr8","fpr9","fpr10","fpr11","fpr12","fpr13","fpr14","fpr15" \ +} The contents of this macro can be moved to s390-tdep.c. + + +/* instruction sequence for call dummy is as follows + bras %r1,.+8 ; 0xA7150004 + long basraddr ; 0x00000000 + l %r1,0(%r1) ; 0x58101000 + basr %r14,%r1 ; 0x0DE1 + breakpoint ; 0x0001 */ +#define S390_CALL_DUMMY {0xA7150004,0x00000000,0x58101000,0x0DE10000|S390_BREAKPOINT_U16} +#define S390_CALL_DUMMY_LENGTH 16 +#define S390_CALL_ADDR_OFFSET 4 The contents of these macros can be moved to s390-tdep.c. + + +/* instruction sequence for call dummy is as follows + bras %r1,.+12 ; 0xA7150006 + long basraddr ; 0x0000000000000000 + lg %r1,0(%r1) ; 0xE31010000004 + basr %r14,%r1 ; 0x0DE1 + breakpoint ; 0x0001 */ + +#define S390X_CALL_DUMMY {0xA715000600000000,0x00000000E3101000, \ +0x00040DE100000000|S390_BREAKPOINT_U16<<16} +#define S390X_CALL_DUMMY_LENGTH 22 The contents of these macros can be moved to s390-tdep.c. +#define S390_REGISTER_BYTES \ +((S390_FP0_OFFSET)+(S390_FPR_SIZE*S390_NUM_FPRS)) This can be moved to s390-tdep.c or s390-tdep.h (if it is needed by s390-nat.c). + + +#if !GDB_MULTI_ARCH ... +#endif /* !GDB_MULTI_ARCH */ +#endif /* ifndef TM_S390_H */ + + +