From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Denis Joseph Barrow" To: gdb-patches@sourceware.cygnus.com Subject: gdb & gdbserver for s390 31 & 64 bit Date: Mon, 10 Sep 2001 11:55:00 -0000 Message-id: X-SW-Source: 2001-09/msg00145.html Content-type: multipart/mixed; boundary="----------=_1583534360-29878-9" This is a multi-part message in MIME format... ------------=_1583534360-29878-9 Content-length: 2497 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 ---------------------- Forwarded by Denis Joseph Barrow/Germany/Contr/IBM on 10.09.2001 20:52 --------------------------- Denis Joseph Barrow 10.09.2001 20:51 To: ac131313@cygnus.com, Ulrich Weigand/Germany/IBM@IBMDE, Christoph Arenz/Germany/IBM@IBMDE, Gerhard Tonn/Germany/IBM@IBMDE, gdb-patches@sourceware.cygnus.com cc: From: Denis Joseph Barrow/Germany/Contr/IBM@IBMDE Subject: Hi Andrew, Uli,Gerhard & others, Here is the latest s390 31 & 64 bit gdb & gdbserver against the repository of sept05. The cross debugger now works if compiled for target s390-ibm-linux or target s390x-ibm-linux. The gdbserver code in low-linux.c IMHO isn't upto the standard of the rest of the gdb sources & reinvents a lot of wheels which are in the nat.c & tdep.c files, I know the code has to be small but it also has to work. It also doesn't appear to support multithreaded apps, this is what our JVM guys wanted it for. I've modified the Makefile.in of the gdbserver to go to the parent directory for signals.c ( as there was a fixme since gdb-5.0 for the target signal remapping, the server was delivering SIGUSR1 as SIGBUS this is fixed now ) & my tdep & nat file. Sorry for keeping you waiting, hopefully I've made the 5.1 release, it has been a long day fixing lots of bugs mostly ones which I installed myself. Uli will send the copyright transfer to you asap. Hope the stuff works okay for you. Here are the checksums 58d9cd6feef319de33416d2f7e16c45e S390ChangeLog.100901.Root af344041b831a7fb368060a9a42655d4 S390ChangeLog.100901.gdb 63ce16ae40173fbcf9fb1497b58fc96a gdb.s390.100901.config.diff 07eeac3990e8868b0a9dbae614ece233 gdb.s390.100901.core.diff 7f43ad7b9070b9976af3bf210898c9cd gdb.s390.100901.gdbserver.config.diff fdb39f3eedcc1d1eb6cc731856f1868b gdb.s390.100901.gdbserver.core.diff (See attached file: gdb.s390.100901.config.diff)(See attached file: gdb.s390.100901.core.diff)(See attached file: gdb.s390.100901.gdbserver.config.diff)(See attached file: gdb.s390.100901.gdbserver.core.diff)(See attached file: S390ChangeLog.100901.gdb)(See attached file: S390ChangeLog.100901.Root) Have fun, 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 ------------=_1583534360-29878-9 Content-Type: text/x-diff; charset=us-ascii; name="=?iso-8859-1?Q?gdb.s390.100901.config.diff?=" Content-Disposition: inline; filename="=?iso-8859-1?Q?gdb.s390.100901.config.diff?=" Content-Transfer-Encoding: base64 Content-Length: 842 LS0tIHNyYy5vcmlnL2NvbmZpZy5zdWIJRnJpIEF1ZyAzMSAwODozNzoyMCAy MDAxCisrKyBzcmMubmV3L2NvbmZpZy5zdWIJV2VkIFNlcCAgNSAxODoyNTox MSAyMDAxCkBAIC03ODMsNiArNzgzLDEyIEBACiAJcnRwYyB8IHJ0cGMtKikK IAkJYmFzaWNfbWFjaGluZT1yb21wLWlibQogCQk7OworCXMzOTAgfCBzMzkw LSogKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHgg fCBzMzkweC0qICkKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJOzsK IAlzYTI5MjAwKQogCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCiAJCW9zPS11 ZGkKLS0tIHNyYy5vcmlnL2dkYi9jb25maWd1cmUuaG9zdAlUdWUgSnVsIDEw IDIyOjQxOjU0IDIwMDEKKysrIHNyYy5uZXcvZ2RiL2NvbmZpZ3VyZS5ob3N0 CVdlZCBTZXAgIDUgMTg6MjU6MTEgMjAwMQpAQCAtMTYyLDUgKzE2MiwxMCBA QAogdmF4LSotYnNkKikJCWdkYl9ob3N0PXZheGJzZCA7OwogdmF4LSotdWx0 cml4MiopCQlnZGJfaG9zdD12YXh1bHQyIDs7CiB2YXgtKi11bHRyaXgqKQkJ Z2RiX2hvc3Q9dmF4dWx0IDs7Ci0KK3MzOTAqLSotKikgICAgICAgICAgICAg ICBnZGJfaG9zdD1zMzkwIDs7CiBlc2FjCisKKworCisKKwo= ------------=_1583534360-29878-9 Content-Type: text/x-diff; charset=us-ascii; name="=?iso-8859-1?Q?gdb.s390.100901.core.diff?=" Content-Disposition: inline; filename="=?iso-8859-1?Q?gdb.s390.100901.core.diff?=" Content-Transfer-Encoding: base64 Content-Length: 100081 ZGlmZiAtdSAtciAtTiBzcmMub3JpZy9nZGIvY29uZmlnL3MzOTAvbm0tbGlu dXguaCBzcmMubmV3L2dkYi9jb25maWcvczM5MC9ubS1saW51eC5oCi0tLSBz cmMub3JpZy9nZGIvY29uZmlnL3MzOTAvbm0tbGludXguaAlUaHUgSmFuICAx IDAxOjAwOjAwIDE5NzAKKysrIHNyYy5uZXcvZ2RiL2NvbmZpZy9zMzkwL25t LWxpbnV4LmgJRnJpIFNlcCAgNyAyMToxNDozNSAyMDAxCkBAIC0wLDAgKzEs OTQgQEAKKy8qIE5hdGl2ZSBzdXBwb3J0IGZvciBMaW51eCBmb3IgUzM5MAor 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 IG5tX2xpbnV4LmggKi8KZGlmZiAtdSAtciAtTiBzcmMub3JpZy9nZGIvY29u ZmlnL3MzOTAvczM5MC5taCBzcmMubmV3L2dkYi9jb25maWcvczM5MC9zMzkw Lm1oCi0tLSBzcmMub3JpZy9nZGIvY29uZmlnL3MzOTAvczM5MC5taAlUaHUg SmFuICAxIDAxOjAwOjAwIDE5NzAKKysrIHNyYy5uZXcvZ2RiL2NvbmZpZy9z MzkwL3MzOTAubWgJRnJpIFNlcCAgNyAyMDowODoxNyAyMDAxCkBAIC0wLDAg KzEsMTUgQEAKKyMgSG9zdDogUzM5MCwgcnVubmluZyBMaW51eAorCitYTV9G SUxFPSB4bS1saW51eC5oCitYREVQRklMRVM9IHNlci10Y3AubworWE1fQ0xJ QlM9CisKK05BVF9GSUxFPSBubS1saW51eC5oCitOQVRERVBGSUxFUz0gaW5m cHRyYWNlLm8gc29saWIubyBpbmZ0YXJnLm8gZm9yay1jaGlsZC5vIGNvcmVs b3cubyBcCisJICAgczM5MC1uYXQubyBsaW51eC10aHJlYWQubyBjb3JlLWFv dXQubyBjb3JlLXJlZ3NldC5vCisjIHBvc3QgNS4wIG5hdGRlcGZpbGVzLgor TkFUREVQRklMRVMrPSB0aHJlYWQtZGIubyBsaW4tbHdwLm8gcHJvYy1zZXJ2 aWNlLm8gCitMT0FETElCRVMgPSAtbGRsIC1yZHluYW1pYworCisKKwpkaWZm IC11IC1yIC1OIHNyYy5vcmlnL2dkYi9jb25maWcvczM5MC9zMzkwLm10IHNy Yy5uZXcvZ2RiL2NvbmZpZy9zMzkwL3MzOTAubXQKLS0tIHNyYy5vcmlnL2dk Yi9jb25maWcvczM5MC9zMzkwLm10CVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3 MAorKysgc3JjLm5ldy9nZGIvY29uZmlnL3MzOTAvczM5MC5tdAlXZWQgU2Vw ICA1IDE5OjE2OjUyIDIwMDEKQEAgLTAsMCArMSw3IEBACisjIFRhcmdldDog UzM5MCBydW5uaW5nIExpbnV4CitUTV9GSUxFPSB0bS1saW51eC5oCitUREVQ RklMRVM9czM5MC10ZGVwLm8gc29saWIubworIyBQb3N0IDUuMCB0ZGVwLWZp bGVzCitUREVQRklMRVMrPXNvbGliLXN2cjQubyBzb2xpYi1sZWdhY3kubwor R0RCX01VTFRJX0FSQ0g9MgorR0RCU0VSVkVSX0RFUEZJTEVTPSBsb3ctbGlu dXgubyBzMzkwLXRkZXAubyBzMzkwLW5hdC5vCmRpZmYgLXUgLXIgLU4gc3Jj Lm9yaWcvZ2RiL2NvbmZpZy9zMzkwL3MzOTB4Lm10IHNyYy5uZXcvZ2RiL2Nv bmZpZy9zMzkwL3MzOTB4Lm10Ci0tLSBzcmMub3JpZy9nZGIvY29uZmlnL3Mz OTAvczM5MHgubXQJVGh1IEphbiAgMSAwMTowMDowMCAxOTcwCisrKyBzcmMu bmV3L2dkYi9jb25maWcvczM5MC9zMzkweC5tdAlNb24gU2VwIDEwIDE5OjU3 OjQxIDIwMDEKQEAgLTAsMCArMSw5IEBACisjIFRhcmdldDogUzM5MCBydW5u aW5nIExpbnV4CitUTV9GSUxFPSB0bS1saW51eC5oCitUREVQRklMRVM9czM5 MC10ZGVwLm8gc29saWIubworIyBQb3N0IDUuMCB0ZGVwLWZpbGVzCitUREVQ RklMRVMrPXNvbGliLXN2cjQubyBzb2xpYi1sZWdhY3kubworR0RCX01VTFRJ X0FSQ0g9MgorR0RCU0VSVkVSX0RFUEZJTEVTPSBsb3ctbGludXgubyBzMzkw LXRkZXAubyBzMzkwLW5hdC5vCisjIG5lZWRlZCBmb3IgZ2Ric2VydmVyLgor TVRfQ0ZMQUdTPSAtRENPTkZJR19BUkNIX1MzOTBYClwgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQpkaWZmIC11IC1yIC1OIHNyYy5vcmlnL2dkYi9jb25m aWcvczM5MC90bS1saW51eC5oIHNyYy5uZXcvZ2RiL2NvbmZpZy9zMzkwL3Rt LWxpbnV4LmgKLS0tIHNyYy5vcmlnL2dkYi9jb25maWcvczM5MC90bS1saW51 eC5oCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MAorKysgc3JjLm5ldy9nZGIv Y29uZmlnL3MzOTAvdG0tbGludXguaAlGcmkgU2VwICA3IDIxOjE1OjU4IDIw MDEKQEAgLTAsMCArMSwzNiBAQAorLyogVGFyZ2V0IGRlZmluaXRpb25zIGZv ciBHREIgZm9yIGEgczM5MCBydW5uaW5nIExpbnV4LgorICAgQ29weXJpZ2h0 IChDKSAxOTk5LTIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisgICBDb250cmlidXRlZCBieSBELkouIEJhcnJvdyAoZGpiYXJyb3dAZGUu aWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQorICAgZm9yIElCTSBEZXV0 c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24uCisK KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0 ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcsIFVTQS4gICovCisK KyNpZm5kZWYgVE1fTElOVVhfSAorI2RlZmluZSBUTV9MSU5VWF9ICisjaWZk ZWYgR0RCU0VSVkVSCisjZGVmaW5lIFMzOTBfR05VTElOVVhfVEFSR0VUCisj ZW5kaWYgLyogR0RCU0VSVkVSICovCisjdW5kZWYgIFRBUkdFVF9FTEY2NAor I2RlZmluZSBUQVJHRVRfRUxGNjQgKGdkYmFyY2hfdGRlcCAoY3VycmVudF9n ZGJhcmNoKS0+aW50cmVnX3NpemU9PTgpCisKKyNpbmNsdWRlICJjb25maWcv dG0tbGludXguaCIKKyNpbmNsdWRlICJzMzkwL3RtLXMzOTAuaCIKKworCisK KyNlbmRpZiAvKiBUTV9MSU5VWF9IICovCmRpZmYgLXUgLXIgLU4gc3JjLm9y aWcvZ2RiL2NvbmZpZy9zMzkwL3RtLXMzOTAuaCBzcmMubmV3L2dkYi9jb25m aWcvczM5MC90bS1zMzkwLmgKLS0tIHNyYy5vcmlnL2dkYi9jb25maWcvczM5 MC90bS1zMzkwLmgJVGh1IEphbiAgMSAwMTowMDowMCAxOTcwCisrKyBzcmMu bmV3L2dkYi9jb25maWcvczM5MC90bS1zMzkwLmgJTW9uIFNlcCAxMCAxNzo1 MDozOCAyMDAxCkBAIC0wLDAgKzEsMTE1IEBACisvKiBNYWNybyBkZWZpbml0 aW9ucyBmb3IgR0RCIG9uIGFuIFMzOTAuCisgICBDb3B5cmlnaHQgKEMpIDE5 OTktMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENv bnRyaWJ1dGVkIGJ5IEQuSi4gQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29t LGJhcnJvd19kakB5YWhvby5jb20pCisgICBmb3IgSUJNIERldXRzY2hsYW5k IEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbi4KKworICAgVGhp cyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorICAgCisgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg b2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAg IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz MCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2lm ICFkZWZpbmVkKFRNX1MzOTBfSCkKKyNkZWZpbmUgVE1fUzM5MF9IIDEKKwor I2RlZmluZSBTMzkwX05VTV9HUFJTICAgICAgKDE2KQorI2RlZmluZSBTMzkw X0dQUl9TSVpFICAgICAgUkVHSVNURVJfU0laRQorI2RlZmluZSBTMzkwX1BT V19NQVNLX1NJWkUgUkVHSVNURVJfU0laRQorI2RlZmluZSBTMzkwX1BTV19B RERSX1NJWkUgUkVHSVNURVJfU0laRQorI2RlZmluZSBTMzkwX05VTV9GUFJT ICAgICAgKDE2KQorI2RlZmluZSBTMzkwX0ZQUl9TSVpFICAgICAgKDgpCisj ZGVmaW5lIFMzOTBfRlBDX1NJWkUgICAgICAoNCkKKyNkZWZpbmUgUzM5MF9G UENfUEFEX1NJWkUgICg0KQkvKiBnY2MgaW5zaXN0cyBvbiBhbGlnbmluZyB0 aGUgZnByZWdzICovCisjZGVmaW5lIFMzOTBfTlVNX0NSUyAgICAgICAoMTYp CisjZGVmaW5lIFMzOTBfQ1JfU0laRSAgICAgICBSRUdJU1RFUl9TSVpFCisj ZGVmaW5lIFMzOTBfTlVNX0FDUlMgICAgICAoMTYpCisjZGVmaW5lIFMzOTBf QUNSX1NJWkUgICAgICAoNCkKKworI2RlZmluZSBTMzkwX05VTV9SRUdTICAg ICAgKDIrUzM5MF9OVU1fR1BSUytTMzkwX05VTV9BQ1JTK1MzOTBfTlVNX0NS UysxK1MzOTBfTlVNX0ZQUlMpCisjZGVmaW5lIFMzOTBfRklSU1RfQUNSICAg ICAoMitTMzkwX05VTV9HUFJTKQorI2RlZmluZSBTMzkwX0xBU1RfQUNSICAg ICAgKFMzOTBfRklSU1RfQUNSK1MzOTBfTlVNX0FDUlMtMSkKKyNkZWZpbmUg UzM5MF9GSVJTVF9DUiAgICAgIChTMzkwX0ZJUlNUX0FDUitTMzkwX05VTV9B Q1JTKQorI2RlZmluZSBTMzkwX0xBU1RfQ1IgICAgICAgKFMzOTBfRklSU1Rf Q1IrUzM5MF9OVU1fQ1JTLTEpCisKKyNkZWZpbmUgUzM5MF9QU1dNX1JFR05V TSAgICAwCisjZGVmaW5lIFMzOTBfUENfUkVHTlVNICAgICAgMQorI2RlZmlu ZQlTMzkwX0dQMF9SRUdOVU0gICAgIDIJLyogR1BSIHJlZ2lzdGVyIDAgKi8K KyNkZWZpbmUgUzM5MF9HUF9MQVNUX1JFR05VTSAoUzM5MF9HUDBfUkVHTlVN K1MzOTBfTlVNX0dQUlMtMSkKKy8qIFVzdWFsbHkgcmV0dXJuIGFkZHJlc3Mg Ki8KKyNkZWZpbmUgUzM5MF9SRVRBRERSX1JFR05VTSAoUzM5MF9HUDBfUkVH TlVNKzE0KQorLyogQ29udGFpbnMgYWRkcmVzcyBvZiB0b3Agb2Ygc3RhY2sg Ki8KKyNkZWZpbmUgUzM5MF9TUF9SRUdOVU0gICAgICAoUzM5MF9HUDBfUkVH TlVNKzE1KQorLyogbmVlZGVkIGluIGZpbmR2YXIuYyBzdGlsbCAqLworI2Rl ZmluZSBTMzkwX0ZQX1JFR05VTSAgICAgUzM5MF9TUF9SRUdOVU0KKyNkZWZp bmUgUzM5MF9GUkFNRV9SRUdOVU0gIChTMzkwX0dQMF9SRUdOVU0rMTEpCisj ZGVmaW5lIFMzOTBfRlBDX1JFR05VTSAgICAoUzM5MF9HUDBfUkVHTlVNK1Mz OTBfTlVNX0dQUlMrUzM5MF9OVU1fQUNSUytTMzkwX05VTV9DUlMpCisvKiBG UFIgKEZsb2F0aW5nIHBvaW50KSByZWdpc3RlciAwICovCisjZGVmaW5lIFMz OTBfRlAwX1JFR05VTSAgICAoUzM5MF9GUENfUkVHTlVNKzEpCisvKiBMYXN0 IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyICovCisjZGVmaW5lIFMzOTBfRlBM QVNUX1JFR05VTSAoUzM5MF9GUDBfUkVHTlVNK1MzOTBfTlVNX0ZQUlMtMSkK KyNkZWZpbmUgUzM5MF9MQVNUX1JFR05VTSAgIFMzOTBfRlBMQVNUX1JFR05V TQorCisKKyNkZWZpbmUgUzM5MF9BQ1IwX09GRlNFVCAoKFMzOTBfUFNXX01B U0tfU0laRStTMzkwX1BTV19BRERSX1NJWkUpKyhTMzkwX0dQUl9TSVpFKlMz OTBfTlVNX0dQUlMpKQorI2RlZmluZSBTMzkwX0NSMF9PRkZTRVQgKFMzOTBf QUNSMF9PRkZTRVQrKFMzOTBfQUNSX1NJWkUqUzM5MF9OVU1fQUNSUykpCisj ZGVmaW5lIFMzOTBfRlBDX09GRlNFVCAoUzM5MF9DUjBfT0ZGU0VUKyhTMzkw X0NSX1NJWkUqUzM5MF9OVU1fQ1JTKSkKKyNkZWZpbmUgUzM5MF9GUDBfT0ZG U0VUIChTMzkwX0ZQQ19PRkZTRVQrKFMzOTBfRlBDX1NJWkUrUzM5MF9GUENf UEFEX1NJWkUpKQorI2RlZmluZSBTMzkwX0dQUjZfU1RBQ0tfT0ZGU0VUIChH REJfVEFSR0VUX0lTX0VTQU1FID8gNDg6MjQpCisKKyNkZWZpbmUgUzM5MF9S RUdJU1RFUl9CWVRFUyAoKDQrNCkrKDQqUzM5MF9OVU1fR1BSUykrKDQqUzM5 MF9OVU1fQUNSUykrIFwKKyg0KlMzOTBfTlVNX0NSUykrKFMzOTBfRlBDX1NJ WkUrUzM5MF9GUENfUEFEX1NJWkUpKyhTMzkwX0ZQUl9TSVpFKlMzOTBfTlVN X0ZQUlMpKQorCisjZGVmaW5lIFMzOTBYX1JFR0lTVEVSX0JZVEVTICgoOCs4 KSsoOCpTMzkwX05VTV9HUFJTKSsoNCpTMzkwX05VTV9BQ1JTKSsgXAorKDgq UzM5MF9OVU1fQ1JTKSsoUzM5MF9GUENfU0laRStTMzkwX0ZQQ19QQURfU0la RSkrKFMzOTBfRlBSX1NJWkUqUzM5MF9OVU1fRlBSUykpCisKKyNpZmRlZiBH REJTRVJWRVIKKworaW50IHMzOTBfcmVnaXN0ZXJfYnl0ZSAoaW50IHJlZ19u cik7CisjZGVmaW5lIFJFR0lTVEVSX0JZVEUocmVnX25yKSBzMzkwX3JlZ2lz dGVyX2J5dGUocmVnX25yKQorI2RlZmluZSBQQ19SRUdOVU0gUzM5MF9QQ19S RUdOVU0KKyNkZWZpbmUgTlVNX1JFR1MgIFMzOTBfTlVNX1JFR1MKKyNkZWZp bmUgTlVNX0ZSRUdTIFMzOTBfTlVNX0ZQUlMKKyNkZWZpbmUgRlBfUkVHTlVN IFMzOTBfRlBfUkVHTlVNCisjZGVmaW5lIFNQX1JFR05VTSBTMzkwX1NQX1JF R05VTQorLyogT2J2aW91c2x5IHB0cmFjZSBmb3IgdXNlciBwcm9ncmFtIHRy YWNpbmcgY2Fubm90IGJlIGFsbG93ZWQKKyAgbWVzcyB3aXRoIGNvbnRyb2wg cmVnaXN0ZXJzIChleGNlcHQgcGVyIHJlZ2lzdGVycyBmb3IgaGFyZHdhcmUg d2F0Y2hwb2ludHMpLAorICB3aGVuIHdlIGFkZCBrZXJuZWwgZGVidWdnaW5n IHdlIG1heSBuZWVkIHRvIGFsdGVyIHRoZXNlIG1hY3Jvcy4gKi8KK2ludCBz MzkwX2Nhbm5vdF9mZXRjaF9yZWdpc3RlciAoaW50IHJlZ25vKTsKKyNkZWZp bmUgQ0FOTk9UX0ZFVENIX1JFR0lTVEVSKHJlZ25vKSBzMzkwX2Nhbm5vdF9m ZXRjaF9yZWdpc3RlcihyZWdubykKKyNkZWZpbmUgQ0FOTk9UX1NUT1JFX1JF R0lTVEVSKHJlZ25vKSBzMzkwX2Nhbm5vdF9mZXRjaF9yZWdpc3RlcihyZWdu bykKKworI2lmIENPTkZJR19BUkNIX1MzOTBYCisKK2ludCBzMzkweF9yZWdp c3Rlcl9yYXdfc2l6ZSAoaW50IHJlZ19ucik7CisjZGVmaW5lIFJFR0lTVEVS X1JBV19TSVpFKHJlZ19ucikgczM5MHhfcmVnaXN0ZXJfcmF3X3NpemUocmVn X25yKQorI2RlZmluZSBHREJfVEFSR0VUX0lTX0VTQU1FICgxKQorI2RlZmlu ZSBSRUdJU1RFUl9TSVpFICAgICAgICg4KQorI2RlZmluZSBSRUdJU1RFUl9C WVRFUyBTMzkwWF9SRUdJU1RFUl9CWVRFUworCisjZWxzZSAvKiAgQ09ORklH X0FSQ0hfUzM5MFggKi8KKworaW50IHMzOTBfcmVnaXN0ZXJfcmF3X3NpemUg KGludCByZWdfbnIpOworI2RlZmluZSBSRUdJU1RFUl9SQVdfU0laRShyZWdf bnIpIHMzOTBfcmVnaXN0ZXJfcmF3X3NpemUocmVnX25yKQorI2RlZmluZSBH REJfVEFSR0VUX0lTX0VTQU1FICgwKQorI2RlZmluZSBSRUdJU1RFUl9TSVpF ICAgICAgICg0KQorI2RlZmluZSBSRUdJU1RFUl9CWVRFUyBTMzkwX1JFR0lT VEVSX0JZVEVTCisKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TMzkwWCAqLwor CisjZWxzZSAvKiBHREJTRVJWRVIgKi8KKworI2RlZmluZSBHREJfVEFSR0VU X0lTX0VTQU1FIChUQVJHRVRfQVJDSElURUNUVVJFLT5tYWNoID09IGJmZF9t YWNoX3MzOTBfZXNhbWUpCisKKyNlbmRpZiAvKiBHREJTRVJWRVIgKi8KKyNl bmRpZiAvKiBpZm5kZWYgVE1fUzM5MF9IICovCmRpZmYgLXUgLXIgLU4gc3Jj Lm9yaWcvZ2RiL2NvbmZpZy9zMzkwL3htLWxpbnV4Lmggc3JjLm5ldy9nZGIv Y29uZmlnL3MzOTAveG0tbGludXguaAotLS0gc3JjLm9yaWcvZ2RiL2NvbmZp Zy9zMzkwL3htLWxpbnV4LmgJVGh1IEphbiAgMSAwMTowMDowMCAxOTcwCisr KyBzcmMubmV3L2dkYi9jb25maWcvczM5MC94bS1saW51eC5oCUZyaSBTZXAg IDcgMjE6MTY6MjQgMjAwMQpAQCAtMCwwICsxLDMzIEBACisvKiBOYXRpdmUg c3VwcG9ydCBmb3IgR05VL0xpbnV4LCBmb3IgR0RCLCB0aGUgR05VIGRlYnVn Z2VyLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBELkouIEJh cnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29t KQorICAgZm9yIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJ Qk0gQ29ycG9yYXRpb24uCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdE Qi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTEx LTEzMDcsIFVTQS4gICovCisKKyNpZm5kZWYgWE1fTElOVVhfSAorI2RlZmlu ZSBYTV9MSU5VWF9ICisKKyNkZWZpbmUgSE9TVF9CWVRFX09SREVSIEJJR19F TkRJQU4KKworCisvKiBUaGlzIGlzIHRoZSBhbW91bnQgdG8gc3VidHJhY3Qg ZnJvbSB1LnVfYXIwCisgICB0byBnZXQgdGhlIG9mZnNldCBpbiB0aGUgY29y ZSBmaWxlIG9mIHRoZSByZWdpc3RlciB2YWx1ZXMuICAqLworI2RlZmluZSBL RVJORUxfVV9BRERSIDB4MAorCisjZW5kaWYgLyogI2lmbmRlZiBYTV9MSU5V WF9IICovCmRpZmYgLXUgLXIgLU4gc3JjLm9yaWcvZ2RiL2NvbmZpZy90bS1z eXN2NC5oIHNyYy5uZXcvZ2RiL2NvbmZpZy90bS1zeXN2NC5oCi0tLSBzcmMu b3JpZy9nZGIvY29uZmlnL3RtLXN5c3Y0LmgJVHVlIE1hciAgNiAwOToyMToy MCAyMDAxCisrKyBzcmMubmV3L2dkYi9jb25maWcvdG0tc3lzdjQuaAlGcmkg U2VwICA3IDIxOjM5OjU4IDIwMDEKQEAgLTMzLDkgKzMzLDkgQEAKIAogLyog SWYgUEMgaXMgaW4gYSBzaGFyZWQgbGlicmFyeSB0cmFtcG9saW5lIGNvZGUs IHJldHVybiB0aGUgUEMKICAgIHdoZXJlIHRoZSBmdW5jdGlvbiBpdHNlbGYg YWN0dWFsbHkgc3RhcnRzLiAgSWYgbm90LCByZXR1cm4gMC4gICovCi0KKyNp ZiAoR0RCX01VTFRJX0FSQ0ggPD0gR0RCX01VTFRJX0FSQ0hfUEFSVElBTCkK ICNkZWZpbmUgU0tJUF9UUkFNUE9MSU5FX0NPREUocGMpICBmaW5kX3NvbGli X3RyYW1wb2xpbmVfdGFyZ2V0IChwYykKLQorI2VuZGlmCiAvKiBJdCBpcyB1 bmtub3duIHdoaWNoLCBpZiBhbnksIFNWUjQgYXNzZW1ibGVycyBkbyBub3Qg YWNjZXB0IGRvbGxhciBzaWducwogICAgaW4gaWRlbnRpZmllcnMuICBUaGUg ZGVmYXVsdCBpbiBHKysgaXMgdG8gdXNlIGRvdHMgaW5zdGVhZCwgZm9yIGFs bCBTVlI0CiAgICBzeXN0ZW1zLCBzbyB3ZSBtYWtlIHRoYXQgb3VyIGRlZmF1 bHQgYWxzby4gIEZJWE1FOiBUaGVyZSBzaG91bGQgYmUgc29tZQotLS0gL2Rl di9udWxsCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MAorKysgc3JjLm5ldy9n ZGIvczM5MC1uYXQuYwlGcmkgU2VwICA3IDIwOjQ4OjAyIDIwMDEKQEAgLTAs MCArMSwzMDggQEAKKy8qIFMzOTAgbmF0aXZlLWRlcGVuZGVudCBjb2RlIGZv ciBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisgICBDb3B5cmlnaHQgMTk5OS0y MDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jCisgICBDb250cmli dXRlZCBieSBELkouIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJy b3dfZGpAeWFob28uY29tKQorICAgZm9yIElCTSBEZXV0c2NobGFuZCBFbnR3 aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24uCisgICBUaGlzIGZpbGUg aXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlv biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24s IE1BCisgICAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaW5jbHVkZSAiZGVm cy5oIgorI2luY2x1ZGUgInRtLmgiCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5o PgorI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcHJv Y2Vzc29yLmg+CisjaW5jbHVkZSA8c3lzL3Byb2Nmcy5oPgorI2luY2x1ZGUg PHN5cy91c2VyLmg+CisjaW5jbHVkZSA8dmFsdWUuaD4KKyNpbmNsdWRlIDxz eXMvdWNvbnRleHQuaD4KKyNpZm5kZWYgb2Zmc2V0b2YKKyNkZWZpbmUgb2Zm c2V0b2YodHlwZSxtZW1iZXIpICgoc2l6ZV90KSAmKCh0eXBlICopMCktPm1l bWJlcikKKyNlbmRpZgorCisKK2ludAorczM5MF9yZWdpc3Rlcl91X2FkZHIg KGludCBibG9ja2VuZCwgaW50IHJlZ251bSkKK3sKKyAgaW50IHJldHZhbDsK KworICBpZiAocmVnbnVtID49IFMzOTBfR1AwX1JFR05VTSAmJiByZWdudW0g PD0gUzM5MF9HUF9MQVNUX1JFR05VTSkKKyAgICByZXR2YWwgPSBQVF9HUFIw ICsgKChyZWdudW0gLSBTMzkwX0dQMF9SRUdOVU0pICogUzM5MF9HUFJfU0la RSk7CisgIGVsc2UgaWYgKHJlZ251bSA+PSBTMzkwX1BTV01fUkVHTlVNICYm IHJlZ251bSA8PSBTMzkwX1BDX1JFR05VTSkKKyAgICByZXR2YWwgPSBQVF9Q U1dNQVNLICsgKChyZWdudW0gLSBTMzkwX1BTV01fUkVHTlVNKSAqIFMzOTBf UFNXX01BU0tfU0laRSk7CisgIGVsc2UgaWYgKHJlZ251bSA9PSBTMzkwX0ZQ Q19SRUdOVU0pCisgICAgcmV0dmFsID0gUFRfRlBDOworICBlbHNlIGlmIChy ZWdudW0gPj0gUzM5MF9GUDBfUkVHTlVNICYmIHJlZ251bSA8PSBTMzkwX0ZQ TEFTVF9SRUdOVU0pCisgICAgcmV0dmFsID0KKyNpZiBDT05GSUdfQVJDSF9T MzkwWAorICAgICAgUFRfRlBSMAorI2Vsc2UKKyAgICAgIFBUX0ZQUjBfSEkK KyNlbmRpZgorICAgICAgKyAoKHJlZ251bSAtIFMzOTBfRlAwX1JFR05VTSkg KiBTMzkwX0ZQUl9TSVpFKTsKKyAgZWxzZSBpZiAocmVnbnVtID49IFMzOTBf RklSU1RfQUNSICYmIHJlZ251bSA8PSBTMzkwX0xBU1RfQUNSKQorICAgIHJl dHZhbCA9IFBUX0FDUjAgKyAoKHJlZ251bSAtIFMzOTBfRklSU1RfQUNSKSAq IFMzOTBfQUNSX1NJWkUpOworICBlbHNlIGlmIChyZWdudW0gPj0gKFMzOTBf RklSU1RfQ1IgKyA5KSAmJiByZWdudW0gPD0gKFMzOTBfRklSU1RfQ1IgKyAx MSkpCisgICAgcmV0dmFsID0gUFRfQ1JfOSArICgocmVnbnVtIC0gKFMzOTBf RklSU1RfQ1IgKyA5KSkgKiBTMzkwX0NSX1NJWkUpOworICBlbHNlCisgICAg eworI2lmZGVmIEdEQlNFUlZFUgorICAgICAgZXJyb3IKKyNlbHNlCisgICAg ICBpbnRlcm5hbF9lcnJvcgorI2VuZGlmCisJKCJzMzkwX3JlZ2lzdGVyX3Vf YWRkciBpbnZhbGlkIHJlZ251bSAlcyAlZCByZWdudW09JWQiLCBfX0ZJTEVf XywKKwkgKGludCkgX19MSU5FX18sIHJlZ251bSk7CisgICAgICByZXR2YWwg PSAwOworICAgIH0KKyAgcmV0dXJuIHJldHZhbCArIGJsb2NrZW5kOworfQor CisjaWZuZGVmIEdEQlNFUlZFUgorLyogd2F0Y2hfYXJlYXMgYXJlIHJlcXVp cmVkIGlmIHlvdSBwdXQgMiBvciBtb3JlIHdhdGNocG9pbnRzIG9uIHRoZSBz YW1lIAorICAgYWRkcmVzcyBvciBvdmVybGFwcGluZyBhcmVhcyBnZGIgd2ls bCBjYWxsIHVzIHRvIGRlbGV0ZSB0aGUgd2F0Y2hwb2ludCAKKyAgIG1vcmUg dGhhbiBvbmNlIHdoZW4gd2UgdHJ5IHRvIGRlbGV0ZSB0aGVtLgorICAgYXR0 ZW1wdGVkIHJlZmVyZW5jZSBjb3VudGluZyB0byByZWR1Y2UgdGhlIG51bWJl ciBvZiBhcmVhcyB1bmZvcnR1bmF0ZWx5CisgICB0aGV5IGRpZG4ndCBzaHJp bmsgd2hlbiBhcmVhcyBoYWQgdG8gYmUgc3BsaXQgb3ZlcmxhcHBpbmcgb2Nj dXJzLiAqLworc3RydWN0IHdhdGNoX2FyZWE7Cit0eXBlZGVmIHN0cnVjdCB3 YXRjaF9hcmVhIHdhdGNoX2FyZWE7CitzdHJ1Y3Qgd2F0Y2hfYXJlYQorewor ICB3YXRjaF9hcmVhICpuZXh0OworICBDT1JFX0FERFIgbG9fYWRkcjsKKyAg Q09SRV9BRERSIGhpX2FkZHI7Cit9OworCitzdGF0aWMgd2F0Y2hfYXJlYSAq d2F0Y2hfYmFzZSA9IE5VTEw7CitpbnQgd2F0Y2hfYXJlYV9jbnQgPSAwOwor c3RhdGljIENPUkVfQUREUiB3YXRjaF9sb19hZGRyID0gMCwgd2F0Y2hfaGlf YWRkciA9IDA7CisKKworCitDT1JFX0FERFIKK3MzOTBfc3RvcHBlZF9ieV93 YXRjaHBvaW50IChpbnQgcGlkKQoreworICBwZXJfbG93Y29yZV9iaXRzIHBl cl9sb3djb3JlOworICBwdHJhY2VfYXJlYSBwYXJlYTsKKworICBwYXJlYS5s ZW4gPSBzaXplb2YgKHBlcl9sb3djb3JlKTsKKyAgcGFyZWEucHJvY2Vzc19h ZGRyID0gKGFkZHJfdCkgJiBwZXJfbG93Y29yZTsKKyAgcGFyZWEua2VybmVs X2FkZHIgPSBvZmZzZXRvZiAoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QsIHBl cl9pbmZvLmxvd2NvcmUpOworICBwdHJhY2UgKFBUUkFDRV9QRUVLVVNSX0FS RUEsIHBpZCwgJnBhcmVhKTsKKyAgcmV0dXJuICgocGVyX2xvd2NvcmUucGVy Y19zdG9yYWdlX2FsdGVyYXRpb24gPT0gMSkgJiYKKwkgIChwZXJfbG93Y29y ZS5wZXJjX3N0b3JlX3JlYWxfYWRkcmVzcyA9PSAwKSk7Cit9CisKKwordm9p ZAorczM5MF9maXhfd2F0Y2hfcG9pbnRzIChpbnQgcGlkKQoreworICBwZXJf c3RydWN0IHBlcl9pbmZvOworICBwdHJhY2VfYXJlYSBwYXJlYTsKKworICBw YXJlYS5sZW4gPSBzaXplb2YgKHBlcl9pbmZvKTsKKyAgcGFyZWEucHJvY2Vz c19hZGRyID0gKGFkZHJfdCkgJiBwZXJfaW5mbzsKKyAgcGFyZWEua2VybmVs X2FkZHIgPSBQVF9DUl85OworICBwdHJhY2UgKFBUUkFDRV9QRUVLVVNSX0FS RUEsIHBpZCwgJnBhcmVhKTsKKyAgLyogVGhlIGtlcm5lbCBhdXRvbWF0aWNh bGx5IHNldHMgdGhlIHBzdyBmb3IgcGVyIGRlcGVuZGluZyAqLworICAvKiBv biB3aGV0aGVyIHRoZSBwZXIgY29udHJvbCByZWdpc3RlcnMgYXJlIHNldCBm b3IgZXZlbnQgcmVjb3JkaW5nICovCisgIC8qICYgc2V0cyBjcjkgJiBjcjEw IGFwcHJvcHJpYXRlbHkgYWxzbyAqLworICBpZiAod2F0Y2hfYXJlYV9jbnQp CisgICAgeworICAgICAgcGVyX2luZm8uY29udHJvbF9yZWdzLmJpdHMuZW1f c3RvcmFnZV9hbHRlcmF0aW9uID0gMTsKKyAgICAgIHBlcl9pbmZvLmNvbnRy b2xfcmVncy5iaXRzLnN0b3JhZ2VfYWx0X3NwYWNlX2N0bCA9IDE7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgcGVyX2luZm8uY29udHJvbF9yZWdz LmJpdHMuZW1fc3RvcmFnZV9hbHRlcmF0aW9uID0gMDsKKyAgICAgIHBlcl9p bmZvLmNvbnRyb2xfcmVncy5iaXRzLnN0b3JhZ2VfYWx0X3NwYWNlX2N0bCA9 IDA7CisgICAgfQorICBwZXJfaW5mby5zdGFydGluZ19hZGRyID0gd2F0Y2hf bG9fYWRkcjsKKyAgcGVyX2luZm8uZW5kaW5nX2FkZHIgPSB3YXRjaF9oaV9h ZGRyOworICBwdHJhY2UgKFBUUkFDRV9QT0tFVVNSX0FSRUEsIHBpZCwgJnBh cmVhKTsKK30KKworaW50CitzMzkwX2luc2VydF93YXRjaHBvaW50IChpbnQg cGlkLCBDT1JFX0FERFIgYWRkciwgaW50IGxlbiwgaW50IHJ3KQoreworICBD T1JFX0FERFIgaGlfYWRkciA9IGFkZHIgKyBsZW4gLSAxOworICB3YXRjaF9h cmVhICpuZXdhcmVhID0gKHdhdGNoX2FyZWEgKikgbWFsbG9jIChzaXplb2Yg KHdhdGNoX2FyZWEpKTsKKworCisgIGlmIChuZXdhcmVhKQorICAgIHsKKyAg ICAgIG5ld2FyZWEtPm5leHQgPSB3YXRjaF9iYXNlOworICAgICAgd2F0Y2hf YmFzZSA9IG5ld2FyZWE7CisgICAgICB3YXRjaF9sb19hZGRyID0gbWluICh3 YXRjaF9sb19hZGRyLCBhZGRyKTsKKyAgICAgIHdhdGNoX2hpX2FkZHIgPSBt YXggKHdhdGNoX2hpX2FkZHIsIGhpX2FkZHIpOworICAgICAgbmV3YXJlYS0+ bG9fYWRkciA9IGFkZHI7CisgICAgICBuZXdhcmVhLT5oaV9hZGRyID0gaGlf YWRkcjsKKyAgICAgIGlmICh3YXRjaF9hcmVhX2NudCA9PSAwKQorCXsKKwkg IHdhdGNoX2xvX2FkZHIgPSBuZXdhcmVhLT5sb19hZGRyOworCSAgd2F0Y2hf aGlfYWRkciA9IG5ld2FyZWEtPmhpX2FkZHI7CisJfQorICAgICAgd2F0Y2hf YXJlYV9jbnQrKzsKKyAgICAgIHMzOTBfZml4X3dhdGNoX3BvaW50cyAocGlk KTsKKyAgICB9CisgIHJldHVybiBuZXdhcmVhID8gMCA6IC0xOworfQorCisK K2ludAorczM5MF9yZW1vdmVfd2F0Y2hwb2ludCAoaW50IHBpZCwgQ09SRV9B RERSIGFkZHIsIGludCBsZW4pCit7CisgIHdhdGNoX2FyZWEgKmN1cnIgPSB3 YXRjaF9iYXNlLCAqcHJldiwgKm1hdGNoQ3VycjsKKyAgQ09SRV9BRERSIGhp X2FkZHIgPSBhZGRyICsgbGVuIC0gMTsKKyAgQ09SRV9BRERSIHdhdGNoX3Nl Y29uZF9sb19hZGRyID0gMHhmZmZmZmZmZlVMLCB3YXRjaF9zZWNvbmRfaGlf YWRkciA9IDA7CisgIGludCBsb19hZGRyX3JlZl9jbnQsIGhpX2FkZHJfcmVm X2NudDsKKyAgcHJldiA9IG1hdGNoQ3VyciA9IE5VTEw7CisgIGxvX2FkZHJf cmVmX2NudCA9IChhZGRyID09IHdhdGNoX2xvX2FkZHIpOworICBoaV9hZGRy X3JlZl9jbnQgPSAoYWRkciA9PSB3YXRjaF9oaV9hZGRyKTsKKyAgd2hpbGUg KGN1cnIpCisgICAgeworICAgICAgaWYgKG1hdGNoQ3VyciA9PSBOVUxMKQor CXsKKwkgIGlmIChjdXJyLT5sb19hZGRyID09IGFkZHIgJiYgY3Vyci0+aGlf YWRkciA9PSBoaV9hZGRyKQorCSAgICB7CisJICAgICAgbWF0Y2hDdXJyID0g Y3VycjsKKwkgICAgICBpZiAocHJldikKKwkJcHJldi0+bmV4dCA9IGN1cnIt Pm5leHQ7CisJICAgICAgZWxzZQorCQl3YXRjaF9iYXNlID0gY3Vyci0+bmV4 dDsKKwkgICAgfQorCSAgcHJldiA9IGN1cnI7CisJfQorICAgICAgaWYgKGxv X2FkZHJfcmVmX2NudCkKKwl7CisJICBpZiAod2F0Y2hfbG9fYWRkciA9PSBj dXJyLT5sb19hZGRyKQorCSAgICBsb19hZGRyX3JlZl9jbnQrKzsKKwkgIGlm IChjdXJyLT5sb19hZGRyID4gd2F0Y2hfbG9fYWRkciAmJgorCSAgICAgIGN1 cnItPmxvX2FkZHIgPCB3YXRjaF9zZWNvbmRfbG9fYWRkcikKKwkgICAgd2F0 Y2hfc2Vjb25kX2xvX2FkZHIgPSBjdXJyLT5sb19hZGRyOworCX0KKyAgICAg IGlmIChoaV9hZGRyX3JlZl9jbnQpCisJeworCSAgaWYgKHdhdGNoX2hpX2Fk ZHIgPT0gY3Vyci0+aGlfYWRkcikKKwkgICAgaGlfYWRkcl9yZWZfY250Kys7 CisJICBpZiAoY3Vyci0+aGlfYWRkciA8IHdhdGNoX2hpX2FkZHIgJiYKKwkg ICAgICBjdXJyLT5oaV9hZGRyID4gd2F0Y2hfc2Vjb25kX2hpX2FkZHIpCisJ ICAgIHdhdGNoX3NlY29uZF9oaV9hZGRyID0gY3Vyci0+aGlfYWRkcjsKKwl9 CisgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKKyAgICB9CisgIGlmIChtYXRj aEN1cnIpCisgICAgeworICAgICAgZnJlZSAobWF0Y2hDdXJyKTsKKyAgICAg IHdhdGNoX2FyZWFfY250LS07CisgICAgICBpZiAod2F0Y2hfYXJlYV9jbnQp CisJeworCSAgaWYgKGxvX2FkZHJfcmVmX2NudCA9PSAyKQorCSAgICB3YXRj aF9sb19hZGRyID0gd2F0Y2hfc2Vjb25kX2xvX2FkZHI7CisJICBpZiAoaGlf YWRkcl9yZWZfY250ID09IDIpCisJICAgIHdhdGNoX2hpX2FkZHIgPSB3YXRj aF9zZWNvbmRfaGlfYWRkcjsKKwl9CisgICAgICBlbHNlCisJeworCSAgd2F0 Y2hfbG9fYWRkciA9IHdhdGNoX2hpX2FkZHIgPSAwOworCX0KKyAgICAgIHMz OTBfZml4X3dhdGNoX3BvaW50cyAocGlkKTsKKyAgICAgIHJldHVybiAwOwor ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGVyciwKKwkJCSAgIkF0dGVtcHQgdG8gcmVtb3ZlIG5vbmV4 aXN0ZW50IHdhdGNocG9pbnQgaW4gczM5MF9yZW1vdmVfd2F0Y2hwb2ludFxu Iik7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCitpbnQKK2tlcm5l bF91X3NpemUgKHZvaWQpCit7CisgIHJldHVybiBzaXplb2YgKHN0cnVjdCB1 c2VyKTsKK30KKworCisjaWYgIChkZWZpbmVkIChTMzkwX0ZQMF9SRUdOVU0p ICYmIGRlZmluZWQgKEhBVkVfRlBSRUdTRVRfVCkgJiYgZGVmaW5lZChIQVZF X1NZU19QUk9DRlNfSCkgJiYgZGVmaW5lZCAoSEFWRV9HUkVHU0VUX1QpKQor dm9pZAorc3VwcGx5X2dyZWdzZXQgKGdyZWdzZXRfdCAqIGdyZWdzZXRwKQor eworICBpbnQgcmVnaTsKKyAgZ3JlZ190ICpncmVncCA9IChncmVnX3QgKikg Z3JlZ3NldHA7CisKKyAgc3VwcGx5X3JlZ2lzdGVyIChTMzkwX1BTV01fUkVH TlVNLCAoY2hhciAqKSAmZ3JlZ3BbUzM5MF9QU1dNX1JFR05VTV0pOworICBz dXBwbHlfcmVnaXN0ZXIgKFMzOTBfUENfUkVHTlVNLCAoY2hhciAqKSAmZ3Jl Z3BbUzM5MF9QQ19SRUdOVU1dKTsKKyAgZm9yIChyZWdpID0gMDsgcmVnaSA8 IFMzOTBfTlVNX0dQUlM7IHJlZ2krKykKKyAgICBzdXBwbHlfcmVnaXN0ZXIg KFMzOTBfR1AwX1JFR05VTSArIHJlZ2ksCisJCSAgICAgKGNoYXIgKikgJmdy ZWdwW1MzOTBfR1AwX1JFR05VTSArIHJlZ2ldKTsKKyAgZm9yIChyZWdpID0g MDsgcmVnaSA8IFMzOTBfTlVNX0FDUlM7IHJlZ2krKykKKyAgICBzdXBwbHlf cmVnaXN0ZXIgKFMzOTBfRklSU1RfQUNSICsgcmVnaSwKKwkJICAgICAoY2hh ciAqKSAmZ3JlZ3BbUzM5MF9GSVJTVF9BQ1IgKyByZWdpXSk7CisgIC8qIHVu Zm9ydHVuYXRlbHkgdGhpcyBpc24ndCBpbiBncmVnc2V0cCAqLworICBmb3Ig KHJlZ2kgPSAwOyByZWdpIDwgUzM5MF9OVU1fQ1JTOyByZWdpKyspCisgICAg c3VwcGx5X3JlZ2lzdGVyIChTMzkwX0ZJUlNUX0NSICsgcmVnaSwgTlVMTCk7 Cit9CisKKwordm9pZAorc3VwcGx5X2ZwcmVnc2V0IChmcHJlZ3NldF90ICog ZnByZWdzZXRwKQoreworICBpbnQgcmVnaTsKKworICBzdXBwbHlfcmVnaXN0 ZXIgKFMzOTBfRlBDX1JFR05VTSwgKGNoYXIgKikgJmZwcmVnc2V0cC0+ZnBj KTsKKyAgZm9yIChyZWdpID0gMDsgcmVnaSA8IFMzOTBfTlVNX0ZQUlM7IHJl Z2krKykKKyAgICBzdXBwbHlfcmVnaXN0ZXIgKFMzOTBfRlAwX1JFR05VTSAr IHJlZ2ksIChjaGFyICopICZmcHJlZ3NldHAtPmZwcnNbcmVnaV0pOworCit9 CisKK3ZvaWQKK2ZpbGxfZ3JlZ3NldCAoZ3JlZ3NldF90ICogZ3JlZ3NldHAs IGludCByZWdubykKK3sKKyAgZ3JlZ190ICpncmVncCA9IChncmVnX3QgKikg Z3JlZ3NldHA7CisKKyAgaWYgKHJlZ25vID49IFMzOTBfRklSU1RfQ1IgJiYg cmVnbm8gPD0gUzM5MF9MQVNUX0NSKQorICAgIHN1cHBseV9yZWdpc3RlciAo cmVnbm8sIE5VTEwpOworICBlbHNlIGlmIChyZWdubyAhPSAtMSkKKyAgICBz dXBwbHlfcmVnaXN0ZXIgKHJlZ25vLCAoY2hhciAqKSAmZ3JlZ3BbcmVnbm9d KTsKKyAgZWxzZQorICAgIHN1cHBseV9ncmVnc2V0IChncmVnc2V0cCk7Cit9 CisKKy8qICBHaXZlbiBhIHBvaW50ZXIgdG8gYSBmbG9hdGluZyBwb2ludCBy ZWdpc3RlciBzZXQgaW4gL3Byb2MgZm9ybWF0CisgICAoZnByZWdzZXRfdCAq KSwgdXBkYXRlIHRoZSByZWdpc3RlciBzcGVjaWZpZWQgYnkgUkVHTk8gZnJv bSBnZGIncyBpZGVhCisgICBvZiB0aGUgY3VycmVudCBmbG9hdGluZyBwb2lu dCByZWdpc3RlciBzZXQuICBJZiBSRUdOTyBpcyAtMSwgdXBkYXRlCisgICB0 aGVtIGFsbC4gKi8KKwordm9pZAorZmlsbF9mcHJlZ3NldCAoZnByZWdzZXRf dCAqIGZwcmVnc2V0cCwgaW50IHJlZ25vKQoreworICBpZiAocmVnbm8gPT0g LTEpCisgICAgc3VwcGx5X2ZwcmVnc2V0IChmcHJlZ3NldHApOworICBlbHNl CisgICAgc3VwcGx5X3JlZ2lzdGVyIChyZWdubywKKwkJICAgICAmKChjaGFy ICopIGZwcmVnc2V0cClbUkVHSVNURVJfQllURSAocmVnbm8pIC0KKwkJCQkJ ICAgUkVHSVNURVJfQllURSAoUzM5MF9GUENfUkVHTlVNKV0pOworfQorCisK KyNlbHNlCisjZXJyb3IgIlRoZXJlIGFyZSBhIGZldyBwb3NzaWJpbGl0aWVz IGhlcmUiCisjZXJyb3IgIjEpIFlvdSBhcmVuJ3QgY29tcGlsaW5nIGZvciBs aW51eCAmIGRvbid0IG5lZWQgYSBjb3JlIGR1bXBzIHRvIHdvcmsuIgorI2Vy cm9yICIyKSBUaGUgaGVhZGVyIGZpbGVzIHN5cy9lbGYuaCBzeXMvdXNlci5o IHN5cy9wdHJhY2UuaCAmIHN5cy9wcm9jZnMuaCIKKyNlcnJvciAibGliYyBm aWxlcyBhcmUgaW5jb25zaXN0ZW50IHdpdGggbGludXgvaW5jbHVkZS9hc20t czM5MC8iCisjZXJyb3IgIjMpIHlvdSBkaWRuJ3QgZG8gYSBjb21wbGV0ZWx5 IGNsZWFuIGJ1aWxkICYgZGVsZXRlIGNvbmZpZy5jYWNoZS4iCisjZW5kaWYK KyNlbmRpZiAvKiBHREJTRVJWRVIgKi8KLS0tIC9kZXYvbnVsbAlUaHUgSmFu ICAxIDAxOjAwOjAwIDE5NzAKKysrIHNyYy5uZXcvZ2RiL3MzOTAtdGRlcC5j CU1vbiBTZXAgMTAgMTg6MzU6MTMgMjAwMQpAQCAtMCwwICsxLDE1MDQgQEAK Ky8qIFRhcmdldC1kZXBlbmRlbnQgY29kZSBmb3IgR0RCLCB0aGUgR05VIGRl YnVnZ2VyLgorICAgQ29weXJpZ2h0IDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBELkouIEJhcnJvdyAo ZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQorICAg Zm9yIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29y cG9yYXRpb24uCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg UGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAgIDAyMTExLTEzMDcs IFVTQS4gICovCisKKyNkZWZpbmUgUzM5MF9UREVQCQkvKiBmb3Igc3BlY2lh bCBtYWNyb3MgaW4gdG0tczM5MC5oICovCisjaW5jbHVkZSA8ZGVmcy5oPgor I2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyNpbmNsdWRlICJmcmFtZS5oIgor I2luY2x1ZGUgImluZmVyaW9yLmgiCisjaW5jbHVkZSAic3ltdGFiLmgiCisj aW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiZ2RiY29yZS5oIgorI2lu Y2x1ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgInN5bWZpbGUuaCIKKyNpbmNs dWRlICJvYmpmaWxlcy5oIgorI2luY2x1ZGUgInRtLmgiCisjaW5jbHVkZSAi Li4vYmZkL2JmZC5oIgorI2luY2x1ZGUgImZsb2F0Zm9ybWF0LmgiCisjaW5j bHVkZSAicmVnY2FjaGUuaCIKKworCisKKworCisvKiBOdW1iZXIgb2YgYnl0 ZXMgb2Ygc3RvcmFnZSBpbiB0aGUgYWN0dWFsIG1hY2hpbmUgcmVwcmVzZW50 YXRpb24KKyAgIGZvciByZWdpc3RlciBOLiAKKyAgIE5vdGUgdGhhdCB0aGUg dW5zaWduZWQgY2FzdCBoZXJlIGZvcmNlcyB0aGUgcmVzdWx0IG9mIHRoZQor ICAgc3VidHJhY3Rpb24gdG8gdmVyeSBoaWdoIHBvc2l0aXZlIHZhbHVlcyBp ZiBOIDwgUzM5MF9GUDBfUkVHTlVNICovCitpbnQKK3MzOTBfcmVnaXN0ZXJf cmF3X3NpemUgKGludCByZWdfbnIpCit7CisgIHJldHVybiAoKHVuc2lnbmVk KSByZWdfbnIgLSBTMzkwX0ZQMF9SRUdOVU0pIDwKKyAgICBTMzkwX05VTV9G UFJTID8gUzM5MF9GUFJfU0laRSA6IDQ7Cit9CisKK2ludAorczM5MHhfcmVn aXN0ZXJfcmF3X3NpemUgKGludCByZWdfbnIpCit7CisgIHJldHVybiAocmVn X25yID09IFMzOTBfRlBDX1JFR05VTSkKKyAgICB8fCAocmVnX25yID49IFMz OTBfRklSU1RfQUNSICYmIHJlZ19uciA8PSBTMzkwX0xBU1RfQUNSKSA/IDQg OiA4OworfQorCitpbnQKK3MzOTBfY2Fubm90X2ZldGNoX3JlZ2lzdGVyIChp bnQgcmVnbm8pCit7CisgIHJldHVybiAocmVnbm8gPj0gUzM5MF9GSVJTVF9D UiAmJiByZWdubyA8IChTMzkwX0ZJUlNUX0NSICsgOSkpIHx8CisgICAgKHJl Z25vID49IChTMzkwX0ZJUlNUX0NSICsgMTIpICYmIHJlZ25vIDw9IFMzOTBf TEFTVF9DUik7Cit9CisKK2ludAorczM5MF9yZWdpc3Rlcl9ieXRlIChpbnQg cmVnX25yKQoreworICBpZiAocmVnX25yIDw9IFMzOTBfR1BfTEFTVF9SRUdO VU0pCisgICAgcmV0dXJuIHJlZ19uciAqIFMzOTBfR1BSX1NJWkU7CisgIGlm IChyZWdfbnIgPD0gUzM5MF9MQVNUX0FDUikKKyAgICByZXR1cm4gUzM5MF9B Q1IwX09GRlNFVCArICgoKHJlZ19ucikgLSBTMzkwX0ZJUlNUX0FDUikgKiBT MzkwX0FDUl9TSVpFKTsKKyAgaWYgKHJlZ19uciA8PSBTMzkwX0xBU1RfQ1Ip CisgICAgcmV0dXJuIFMzOTBfQ1IwX09GRlNFVCArICgoKHJlZ19ucikgLSBT MzkwX0ZJUlNUX0NSKSAqIFMzOTBfQ1JfU0laRSk7CisgIGlmIChyZWdfbnIg PT0gUzM5MF9GUENfUkVHTlVNKQorICAgIHJldHVybiBTMzkwX0ZQQ19PRkZT RVQ7CisgIGVsc2UKKyAgICByZXR1cm4gUzM5MF9GUDBfT0ZGU0VUICsgKCgo cmVnX25yKSAtIFMzOTBfRlAwX1JFR05VTSkgKiBTMzkwX0ZQUl9TSVpFKTsK K30KKworI2lmbmRlZiBHREJTRVJWRVIKKyNkZWZpbmUgUzM5MF9NQVhfSU5T VFJfU0laRSAoNikKKyNkZWZpbmUgUzM5MF9TWVNDQUxMX09QQ09ERSAoMHgw YSkKKyNkZWZpbmUgUzM5MF9TWVNDQUxMX1NJWkUgICAoMikKKyNkZWZpbmUg UzM5MF9TSUdDT05URVhUX1NSRUdTX09GRlNFVCAoOCkKKyNkZWZpbmUgUzM5 MFhfU0lHQ09OVEVYVF9TUkVHU19PRkZTRVQgKDgpCisjZGVmaW5lIFMzOTBf U0lHUkVHU19GUDBfT0ZGU0VUICAgICAgICgxNDQpCisjZGVmaW5lIFMzOTBY X1NJR1JFR1NfRlAwX09GRlNFVCAgICAgICgyMTYpCisjZGVmaW5lIFMzOTBf VUNfTUNPTlRFWFRfT0ZGU0VUICAgICgyNTYpCisjZGVmaW5lIFMzOTBYX1VD X01DT05URVhUX09GRlNFVCAgICgzNDQpCisjZGVmaW5lIFMzOTBfU1RBQ0tf RlJBTUVfT1ZFUkhFQUQgIChHREJfVEFSR0VUX0lTX0VTQU1FID8gMTYwOjk2 KQorI2RlZmluZSBTMzkwX1NJR05BTF9GUkFNRVNJWkUgIChHREJfVEFSR0VU X0lTX0VTQU1FID8gMTYwOjk2KQorI2RlZmluZSBzMzkwX05SX3NpZ3JldHVy biAgICAgICAgICAxMTkKKyNkZWZpbmUgczM5MF9OUl9ydF9zaWdyZXR1cm4g ICAgICAgMTczCisKKworCitzdHJ1Y3QgZnJhbWVfZXh0cmFfaW5mbworewor ICBpbnQgaW5pdGlhbGlzZWQ7CisgIGludCBnb29kX3Byb2xvZ3VlOworICBD T1JFX0FERFIgZnVuY3Rpb25fc3RhcnQ7CisgIENPUkVfQUREUiBza2lwX3By b2xvZ3VlX2Z1bmN0aW9uX3N0YXJ0OworICBDT1JFX0FERFIgc2F2ZWRfcGNf dmFsaWQ7CisgIENPUkVfQUREUiBzYXZlZF9wYzsKKyAgQ09SRV9BRERSIHNp Z19maXhlZF9zYXZlZF9wY192YWxpZDsKKyAgQ09SRV9BRERSIHNpZ19maXhl ZF9zYXZlZF9wYzsKKyAgQ09SRV9BRERSIGZyYW1lX3BvaW50ZXJfc2F2ZWRf cGM7CS8qIGZyYW1lIHBvaW50ZXIgbmVlZGVkIGZvciBhbGxvY2EgKi8KKyAg Q09SRV9BRERSIHN0YWNrX2JvdWdodDsJLyogYW1vdW50IHdlIGRlY3JlbWVu dCB0aGUgc3RhY2sgcG9pbnRlciBieSAqLworICBDT1JFX0FERFIgc2lnY29u dGV4dDsKK307CisKKworc3RhdGljIENPUkVfQUREUiBzMzkwX2ZyYW1lX3Nh dmVkX3BjX25vZml4IChzdHJ1Y3QgZnJhbWVfaW5mbyAqZmkpOworCitpbnQK K3MzOTBfcmVhZGluc3RydWN0aW9uIChiZmRfYnl0ZSBpbnN0cltdLCBDT1JF X0FERFIgYXQsCisJCSAgICAgIHN0cnVjdCBkaXNhc3NlbWJsZV9pbmZvICpp bmZvKQoreworICBpbnQgaW5zdHJsZW47CisKKyAgc3RhdGljIGludCBzMzkw X2luc3RybGVuW10gPSB7CisgICAgMiwKKyAgICA0LAorICAgIDQsCisgICAg NgorICB9OworICBpZiAoKCppbmZvLT5yZWFkX21lbW9yeV9mdW5jKSAoYXQs ICZpbnN0clswXSwgMiwgaW5mbykpCisgICAgcmV0dXJuIC0xOworICBpbnN0 cmxlbiA9IHMzOTBfaW5zdHJsZW5baW5zdHJbMF0gPj4gNl07CisgIGlmICgo KmluZm8tPnJlYWRfbWVtb3J5X2Z1bmMpIChhdCArIDIsICZpbnN0clsyXSwg aW5zdHJsZW4gLSAyLCBpbmZvKSkKKyAgICByZXR1cm4gLTE7CisgIHJldHVy biBpbnN0cmxlbjsKK30KKworc3RhdGljIHZvaWQKK3MzOTBfbWVtc2V0X2V4 dHJhX2luZm8gKHN0cnVjdCBmcmFtZV9leHRyYV9pbmZvICpmZXh0cmFfaW5m bykKK3sKKyAgbWVtc2V0IChmZXh0cmFfaW5mbywgMCwgc2l6ZW9mIChzdHJ1 Y3QgZnJhbWVfZXh0cmFfaW5mbykpOworfQorCisKKworY2hhciAqCitzMzkw X3JlZ2lzdGVyX25hbWUgKGludCByZWdfbnIpCit7CisgIHN0YXRpYyBjaGFy ICpyZWdpc3Rlcl9uYW1lc1tdID0geworICAgICJwc3dtIiwgInBzd2EiLAor ICAgICJncHIwIiwgImdwcjEiLCAiZ3ByMiIsICJncHIzIiwgImdwcjQiLCAi Z3ByNSIsICJncHI2IiwgImdwcjciLAorICAgICJncHI4IiwgImdwcjkiLCAi Z3ByMTAiLCAiZ3ByMTEiLCAiZ3ByMTIiLCAiZ3ByMTMiLCAiZ3ByMTQiLCAi Z3ByMTUiLAorICAgICJhY3IwIiwgImFjcjEiLCAiYWNyMiIsICJhY3IzIiwg ImFjcjQiLCAiYWNyNSIsICJhY3I2IiwgImFjcjciLAorICAgICJhY3I4Iiwg ImFjcjkiLCAiYWNyMTAiLCAiYWNyMTEiLCAiYWNyMTIiLCAiYWNyMTMiLCAi YWNyMTQiLCAiYWNyMTUiLAorICAgICJjcjAiLCAiY3IxIiwgImNyMiIsICJj cjMiLCAiY3I0IiwgImNyNSIsICJjcjYiLCAiY3I3IiwKKyAgICAiY3I4Iiwg ImNyOSIsICJjcjEwIiwgImNyMTEiLCAiY3IxMiIsICJjcjEzIiwgImNyMTQi LCAiY3IxNSIsCisgICAgImZwYyIsCisgICAgImZwcjAiLCAiZnByMSIsICJm cHIyIiwgImZwcjMiLCAiZnByNCIsICJmcHI1IiwgImZwcjYiLCAiZnByNyIs CisgICAgImZwcjgiLCAiZnByOSIsICJmcHIxMCIsICJmcHIxMSIsICJmcHIx MiIsICJmcHIxMyIsICJmcHIxNCIsICJmcHIxNSIKKyAgfTsKKworICBpZiAo cmVnX25yID49IFMzOTBfTEFTVF9SRUdOVU0pCisgICAgcmV0dXJuIE5VTEw7 CisgIHJldHVybiByZWdpc3Rlcl9uYW1lc1tyZWdfbnJdOworfQorCisKKwor CitpbnQKK3MzOTBfc3RhYl9yZWdfdG9fcmVnbnVtIChpbnQgcmVnbm8pCit7 CisgIHJldHVybiByZWdubyA+PSA2NCA/IFMzOTBfUFNXTV9SRUdOVU0gLSA2 NCA6CisgICAgcmVnbm8gPj0gNDggPyBTMzkwX0ZJUlNUX0FDUiAtIDQ4IDoK KyAgICByZWdubyA+PSAzMiA/IFMzOTBfRklSU1RfQ1IgLSAzMiA6CisgICAg cmVnbm8gPD0gMTUgPyAocmVnbm8gKyAyKSA6CisgICAgUzM5MF9GUDBfUkVH TlVNICsgKChyZWdubyAtIDE2KSAmIDgpICsgKCgocmVnbm8gLSAxNikgJiAz KSA8PCAxKSArCisgICAgKCgocmVnbm8gLSAxNikgJiA0KSA+PiAyKTsKK30K KworCisKKy8qIHMzOTBfZ2V0X2ZyYW1lX2luZm8gYmFzZWQgb24gSGFydG11 dHMKKyAgIHByb2xvZ3VlIGRlZmluaXRpb24gaW4KKyAgIGdjYy0yLjguMS9j b25maWcvbDM5MC9saW51eC5jIAorCisgICBJdCByZWFkcyBvbmUgaW5zdHJ1 Y3Rpb24gYXQgYSB0aW1lICYgYmFzZWQgb24gd2hldGhlcgorICAgaXQgbG9v a3MgbGlrZSBwcm9sb2d1ZSBjb2RlIG9yIG5vdCBpdCBtYWtlcyBhIGRlY2lz aW9uIG9uCisgICB3aGV0aGVyIHRoZSBwcm9sb2d1ZSBpcyBvdmVyLCB0aGVy ZSBhcmUgdmFyaW91cyBzdGF0ZSBtYWNoaW5lcworICAgaW4gdGhlIGNvZGUg dG8gZGV0ZXJtaW5lIGlmIHRoZSBwcm9sb2d1ZSBjb2RlIGlzIHBvc3NpbGJ5 IHZhbGlkLgorICAgCisgICBUaGlzIGlzIGRvbmUgdG8gaG9wZWZ1bGx5IGFs bG93IHRoZSBjb2RlIHN1cnZpdmUgbWlub3IgcmV2cyBvZgorICAgY2FsbGlu ZyBjb252ZW50aW9ucy4KKworICovCisKK2ludAorczM5MF9nZXRfZnJhbWVf aW5mbyAoQ09SRV9BRERSIHBjLCBzdHJ1Y3QgZnJhbWVfZXh0cmFfaW5mbyAq ZmV4dHJhX2luZm8sCisJCSAgICAgc3RydWN0IGZyYW1lX2luZm8gKmZpLCBp bnQgaW5pdF9leHRyYV9pbmZvKQoreworI2RlZmluZSBDT05TVF9QT09MX1JF R0lEWCAxMworI2RlZmluZSBHT1RfUkVHSURYICAgICAgICAxMgorICBiZmRf Ynl0ZSBpbnN0cltTMzkwX01BWF9JTlNUUl9TSVpFXTsKKyAgQ09SRV9BRERS IHRlc3RfcGMgPSBwYywgdGVzdF9wYzI7CisgIENPUkVfQUREUiBvcmlnX3Nw ID0gMCwgc2F2ZV9yZWdfYWRkciA9IDAsICpzYXZlZF9yZWdzID0gTlVMTDsK KyAgaW50IHZhbGlkX3Byb2xvZ3VlLCBnb29kX3Byb2xvZ3VlID0gMDsKKyAg aW50IGdwcnNfc2F2ZWRbUzM5MF9OVU1fR1BSU107CisgIGludCBmcHJzX3Nh dmVkW1MzOTBfTlVNX0ZQUlNdOworICBpbnQgcmVnaWR4LCBpbnN0cmxlbjsK KyAgaW50IHNhdmVfbGlua19yZWdpZHgsIHN1YnRyYWN0X3NwX3JlZ2lkeDsK KyAgaW50IGNvbnN0X3Bvb2xfc3RhdGUsIHNhdmVfbGlua19zdGF0ZSwgZ290 X3N0YXRlOworICBpbnQgZnJhbWVfcG9pbnRlcl9mb3VuZCwgdmFyYXJnc19z dGF0ZTsKKyAgaW50IGxvb3BfY250LCBnZGJfZ3ByX3N0b3JlLCBnZGJfZnBy X3N0b3JlOworICBpbnQgZnJhbWVfcG9pbnRlcl9yZWdpZHggPSAweGY7Cisg IGludCBvZmZzZXQsIGV4cGVjdGVkX29mZnNldDsKKyAgaW50IGVyciA9IDA7 CisgIGRpc2Fzc2VtYmxlX2luZm8gaW5mbzsKKyAgY29uc3RfcG9vbF9zdGF0 ZSA9IHNhdmVfbGlua19zdGF0ZSA9IGdvdF9zdGF0ZSA9IHZhcmFyZ3Nfc3Rh dGUgPSAwOworICBmcmFtZV9wb2ludGVyX2ZvdW5kID0gMDsKKyAgbWVtc2V0 IChncHJzX3NhdmVkLCAwLCBzaXplb2YgKGdwcnNfc2F2ZWQpKTsKKyAgbWVt c2V0IChmcHJzX3NhdmVkLCAwLCBzaXplb2YgKGZwcnNfc2F2ZWQpKTsKKyAg aW5mby5yZWFkX21lbW9yeV9mdW5jID0gZGlzX2FzbV9yZWFkX21lbW9yeTsK KworICBzYXZlX2xpbmtfcmVnaWR4ID0gc3VidHJhY3Rfc3BfcmVnaWR4ID0g MDsKKyAgaWYgKGZleHRyYV9pbmZvKQorICAgIHsKKyAgICAgIGlmIChmaSAm JiBmaS0+ZnJhbWUpCisJeworCSAgb3JpZ19zcCA9IGZpLT5mcmFtZSArIGZl eHRyYV9pbmZvLT5zdGFja19ib3VnaHQ7CisJICBzYXZlZF9yZWdzID0gZmkt PnNhdmVkX3JlZ3M7CisJfQorICAgICAgaWYgKGluaXRfZXh0cmFfaW5mbyB8 fCAhZmV4dHJhX2luZm8tPmluaXRpYWxpc2VkKQorCXsKKwkgIHMzOTBfbWVt c2V0X2V4dHJhX2luZm8gKGZleHRyYV9pbmZvKTsKKwkgIGZleHRyYV9pbmZv LT5mdW5jdGlvbl9zdGFydCA9IHBjOworCSAgZmV4dHJhX2luZm8tPmluaXRp YWxpc2VkID0gMTsKKwl9CisgICAgfQorICBpbnN0cmxlbiA9IDA7CisgIGRv CisgICAgeworICAgICAgdmFsaWRfcHJvbG9ndWUgPSAwOworICAgICAgdGVz dF9wYyArPSBpbnN0cmxlbjsKKyAgICAgIC8qIGFkZCB0aGUgcHJldmlvdXMg aW5zdHJ1Y3Rpb24gbGVuICovCisgICAgICBpbnN0cmxlbiA9IHMzOTBfcmVh ZGluc3RydWN0aW9uIChpbnN0ciwgdGVzdF9wYywgJmluZm8pOworICAgICAg aWYgKGluc3RybGVuIDwgMCkKKwl7CisJICBnb29kX3Byb2xvZ3VlID0gMDsK KwkgIGVyciA9IC0xOworCSAgYnJlYWs7CisJfQorICAgICAgLyogV2UgcHJv YmFibHkgYXJlIGluIGEgZ2xpYmMgc3lzY2FsbCAqLworICAgICAgaWYgKGlu c3RyWzBdID09IFMzOTBfU1lTQ0FMTF9PUENPREUgJiYgdGVzdF9wYyA9PSBw YykKKwl7CisJICBnb29kX3Byb2xvZ3VlID0gMTsKKwkgIGlmIChzYXZlZF9y ZWdzICYmIGZleHRyYV9pbmZvICYmIGZpLT5uZXh0ICYmIGZpLT5uZXh0LT5l eHRyYV9pbmZvCisJICAgICAgJiYgZmktPm5leHQtPmV4dHJhX2luZm8tPnNp Z2NvbnRleHQpCisJICAgIHsKKwkgICAgICAvKiBXZSBhcmUgYmFja3RyYWNp bmcgZnJvbSBhIHNpZ25hbCBoYW5kbGVyICovCisJICAgICAgc2F2ZV9yZWdf YWRkciA9IGZpLT5uZXh0LT5leHRyYV9pbmZvLT5zaWdjb250ZXh0ICsKKwkJ UkVHSVNURVJfQllURSAoUzM5MF9HUDBfUkVHTlVNKTsKKwkgICAgICBmb3Ig KHJlZ2lkeCA9IDA7IHJlZ2lkeCA8IFMzOTBfTlVNX0dQUlM7IHJlZ2lkeCsr KQorCQl7CisJCSAgc2F2ZWRfcmVnc1tTMzkwX0dQMF9SRUdOVU0gKyByZWdp ZHhdID0gc2F2ZV9yZWdfYWRkcjsKKwkJICBzYXZlX3JlZ19hZGRyICs9IFMz OTBfR1BSX1NJWkU7CisJCX0KKwkgICAgICBzYXZlX3JlZ19hZGRyID0gZmkt Pm5leHQtPmV4dHJhX2luZm8tPnNpZ2NvbnRleHQgKworCQkoR0RCX1RBUkdF VF9JU19FU0FNRSA/IFMzOTBYX1NJR1JFR1NfRlAwX09GRlNFVCA6CisJCSBT MzkwX1NJR1JFR1NfRlAwX09GRlNFVCk7CisJICAgICAgZm9yIChyZWdpZHgg PSAwOyByZWdpZHggPCBTMzkwX05VTV9GUFJTOyByZWdpZHgrKykKKwkJewor CQkgIHNhdmVkX3JlZ3NbUzM5MF9GUDBfUkVHTlVNICsgcmVnaWR4XSA9IHNh dmVfcmVnX2FkZHI7CisJCSAgc2F2ZV9yZWdfYWRkciArPSBTMzkwX0ZQUl9T SVpFOworCQl9CisJICAgIH0KKwkgIGJyZWFrOworCX0KKyAgICAgIGlmIChz YXZlX2xpbmtfc3RhdGUgPT0gMCkKKwl7CisJICAvKiBjaGVjayBmb3IgYSBz dGFjayByZWxhdGl2ZSBTVE1HIG9yIFNUTSAqLworCSAgaWYgKCgoR0RCX1RB UkdFVF9JU19FU0FNRSAmJgorCQkoKGluc3RyWzBdID09IDB4ZWIpICYmIChp bnN0cls1XSA9PSAweDI0KSkpIHx8CisJICAgICAgIChpbnN0clswXSA9PSAw eDkwKSkgJiYgKChpbnN0clsyXSA+PiA0KSA9PSAweGYpKQorCSAgICB7CisJ ICAgICAgcmVnaWR4ID0gKGluc3RyWzFdID4+IDQpOworCSAgICAgIGlmIChy ZWdpZHggPCA2KQorCQl2YXJhcmdzX3N0YXRlID0gMTsKKwkgICAgICBvZmZz ZXQgPSAoKGluc3RyWzJdICYgMHhmKSA8PCA4KSArIGluc3RyWzNdOworCSAg ICAgIGV4cGVjdGVkX29mZnNldCA9CisJCVMzOTBfR1BSNl9TVEFDS19PRkZT RVQgKyAoUzM5MF9HUFJfU0laRSAqIChyZWdpZHggLSA2KSk7CisJICAgICAg aWYgKG9mZnNldCAhPSBleHBlY3RlZF9vZmZzZXQpCisJCXsKKwkJICBnb29k X3Byb2xvZ3VlID0gMDsKKwkJICBicmVhazsKKwkJfQorCSAgICAgIGlmIChz YXZlZF9yZWdzKQorCQlzYXZlX3JlZ19hZGRyID0gb3JpZ19zcCArIG9mZnNl dDsKKwkgICAgICBmb3IgKDsgcmVnaWR4IDw9IChpbnN0clsxXSAmIDB4Zik7 IHJlZ2lkeCsrKQorCQl7CisJCSAgaWYgKGdwcnNfc2F2ZWRbcmVnaWR4XSkK KwkJICAgIHsKKwkJICAgICAgZ29vZF9wcm9sb2d1ZSA9IDA7CisJCSAgICAg IGJyZWFrOworCQkgICAgfQorCQkgIGdvb2RfcHJvbG9ndWUgPSAxOworCQkg IGdwcnNfc2F2ZWRbcmVnaWR4XSA9IDE7CisJCSAgaWYgKHNhdmVkX3JlZ3Mp CisJCSAgICB7CisJCSAgICAgIHNhdmVkX3JlZ3NbUzM5MF9HUDBfUkVHTlVN ICsgcmVnaWR4XSA9IHNhdmVfcmVnX2FkZHI7CisJCSAgICAgIHNhdmVfcmVn X2FkZHIgKz0gUzM5MF9HUFJfU0laRTsKKwkJICAgIH0KKwkJfQorCSAgICAg IHZhbGlkX3Byb2xvZ3VlID0gMTsKKwkgICAgICBjb250aW51ZTsKKwkgICAg fQorCX0KKyAgICAgIC8qIGNoZWNrIGZvciBhIHN0YWNrIHJlbGF0aXZlIFNU RyBvciBTVCAqLworICAgICAgaWYgKChzYXZlX2xpbmtfc3RhdGUgPT0gMCB8 fCBzYXZlX2xpbmtfc3RhdGUgPT0gMykgJiYKKwkgICgoR0RCX1RBUkdFVF9J U19FU0FNRSAmJgorCSAgICAoKGluc3RyWzBdID09IDB4ZTMpICYmIChpbnN0 cls1XSA9PSAweDI0KSkpIHx8CisJICAgKGluc3RyWzBdID09IDB4NTApKSAm JiAoKGluc3RyWzJdID4+IDQpID09IDB4ZikpCisJeworCSAgcmVnaWR4ID0g aW5zdHJbMV0gPj4gNDsKKwkgIG9mZnNldCA9ICgoaW5zdHJbMl0gJiAweGYp IDw8IDgpICsgaW5zdHJbM107CisJICBpZiAob2Zmc2V0ID09IDApCisJICAg IHsKKwkgICAgICBpZiAoc2F2ZV9saW5rX3N0YXRlID09IDMgJiYgcmVnaWR4 ID09IHNhdmVfbGlua19yZWdpZHgpCisJCXsKKwkJICBzYXZlX2xpbmtfc3Rh dGUgPSA0OworCQkgIHZhbGlkX3Byb2xvZ3VlID0gMTsKKwkJICBjb250aW51 ZTsKKwkJfQorCSAgICAgIGVsc2UKKwkJYnJlYWs7CisJICAgIH0KKwkgIGlm IChyZWdpZHggPCA2KQorCSAgICB2YXJhcmdzX3N0YXRlID0gMTsKKwkgIGV4 cGVjdGVkX29mZnNldCA9CisJICAgIFMzOTBfR1BSNl9TVEFDS19PRkZTRVQg KyAoUzM5MF9HUFJfU0laRSAqIChyZWdpZHggLSA2KSk7CisJICBpZiAob2Zm c2V0ICE9IGV4cGVjdGVkX29mZnNldCkKKwkgICAgeworCSAgICAgIGdvb2Rf cHJvbG9ndWUgPSAwOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBpZiAo Z3Byc19zYXZlZFtyZWdpZHhdKQorCSAgICB7CisJICAgICAgZ29vZF9wcm9s b2d1ZSA9IDA7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIGdvb2RfcHJv bG9ndWUgPSAxOworCSAgZ3Byc19zYXZlZFtyZWdpZHhdID0gMTsKKwkgIGlm IChzYXZlZF9yZWdzKQorCSAgICB7CisJICAgICAgc2F2ZV9yZWdfYWRkciA9 IG9yaWdfc3AgKyBvZmZzZXQ7CisJICAgICAgc2F2ZWRfcmVnc1tTMzkwX0dQ MF9SRUdOVU0gKyByZWdpZHhdID0gc2F2ZV9yZWdfYWRkcjsKKwkgICAgfQor CSAgdmFsaWRfcHJvbG9ndWUgPSAxOworCSAgY29udGludWU7CisJfQorCisg ICAgICAvKiBjaGVjayBmb3IgU1REICovCisgICAgICBpZiAoaW5zdHJbMF0g PT0gMHg2MCAmJiAoaW5zdHJbMl0gPj4gNCkgPT0gMHhmKQorCXsKKwkgIHJl Z2lkeCA9IGluc3RyWzFdID4+IDQ7CisJICBpZiAocmVnaWR4ID09IDAgfHwg cmVnaWR4ID09IDIpCisJICAgIHZhcmFyZ3Nfc3RhdGUgPSAxOworCSAgaWYg KGZwcnNfc2F2ZWRbcmVnaWR4XSkKKwkgICAgeworCSAgICAgIGdvb2RfcHJv bG9ndWUgPSAwOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBmcHJzX3Nh dmVkW3JlZ2lkeF0gPSAxOworCSAgaWYgKHNhdmVkX3JlZ3MpCisJICAgIHsK KwkgICAgICBzYXZlX3JlZ19hZGRyID0gb3JpZ19zcCArICgoKGluc3RyWzJd ICYgMHhmKSA8PCA4KSArIGluc3RyWzNdKTsKKwkgICAgICBzYXZlZF9yZWdz W1MzOTBfRlAwX1JFR05VTSArIHJlZ2lkeF0gPSBzYXZlX3JlZ19hZGRyOwor CSAgICB9CisJICB2YWxpZF9wcm9sb2d1ZSA9IDE7CisJICBjb250aW51ZTsK Kwl9CisKKworICAgICAgaWYgKGNvbnN0X3Bvb2xfc3RhdGUgPT0gMCkKKwl7 CisKKwkgIGlmIChHREJfVEFSR0VUX0lTX0VTQU1FKQorCSAgICB7CisJICAg ICAgLyogQ2hlY2sgZm9yIGxhcmwgQ09OU1RfUE9PTF9SRUdJRFgsb2Zmc2V0 IG9uIEVTQU1FICovCisJICAgICAgaWYgKChpbnN0clswXSA9PSAweGMwKQor CQkgICYmIChpbnN0clsxXSA9PSAoQ09OU1RfUE9PTF9SRUdJRFggPDwgNCkp KQorCQl7CisJCSAgY29uc3RfcG9vbF9zdGF0ZSA9IDI7CisJCSAgdmFsaWRf cHJvbG9ndWUgPSAxOworCQkgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkg IGVsc2UKKwkgICAgeworCSAgICAgIC8qIENoZWNrIGZvciBCQVNSIGdwcjEz LGdwcjAgdXNlZCB0byBsb2FkIGNvbnN0YW50IHBvb2wgcG9pbnRlciB0byBy MTMgaW4gb2xkIGNvbXBpbGVyICovCisJICAgICAgaWYgKGluc3RyWzBdID09 IDB4ZCAmJiAoaW5zdHJbMV0gJiAweGYpID09IDAKKwkJICAmJiAoKGluc3Ry WzFdID4+IDQpID09IENPTlNUX1BPT0xfUkVHSURYKSkKKwkJeworCQkgIGNv bnN0X3Bvb2xfc3RhdGUgPSAxOworCQkgIHZhbGlkX3Byb2xvZ3VlID0gMTsK KwkJICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICAvKiBDaGVjayBmb3Ig bmV3IGZhbmdsZWQgYnJhcyAlcjEzLG5ld3BjIHRvIGxvYWQgbmV3IGNvbnN0 YW50IHBvb2wgKi8KKwkgIC8qIGVtYmVkZGVkIGluIGNvZGUsIG9sZGVyIHBy ZSBhYmkgY29tcGlsZXJzIGFsc28gZW1pdHRlZCB0aGlzIHN0dWZmLiAgKi8K KwkgIGlmICgoaW5zdHJbMF0gPT0gMHhhNykgJiYgKChpbnN0clsxXSAmIDB4 ZikgPT0gMHg1KSAmJgorCSAgICAgICgoaW5zdHJbMV0gPj4gNCkgPT0gQ09O U1RfUE9PTF9SRUdJRFgpCisJICAgICAgJiYgKChpbnN0clsyXSAmIDB4ODAp ID09IDApKQorCSAgICB7CisJICAgICAgY29uc3RfcG9vbF9zdGF0ZSA9IDI7 CisJICAgICAgdGVzdF9wYyArPQorCQkoKCgoKGluc3RyWzJdICYgMHhmKSA8 PCA4KSArIGluc3RyWzNdKSA8PCAxKSAtIGluc3RybGVuKTsKKwkgICAgICB2 YWxpZF9wcm9sb2d1ZSA9IDE7CisJICAgICAgY29udGludWU7CisJICAgIH0K Kwl9CisgICAgICAvKiBDaGVjayBmb3IgQUdISSBvciBBSEkgQ09OU1RfUE9P TF9SRUdJRFgsdmFsICovCisgICAgICBpZiAoY29uc3RfcG9vbF9zdGF0ZSA9 PSAxICYmIChpbnN0clswXSA9PSAweGE3KSAmJgorCSAgKChHREJfVEFSR0VU X0lTX0VTQU1FICYmCisJICAgIChpbnN0clsxXSA9PSAoKENPTlNUX1BPT0xf UkVHSURYIDw8IDQpIHwgMHhiKSkpIHx8CisJICAgKGluc3RyWzFdID09ICgo Q09OU1RfUE9PTF9SRUdJRFggPDwgNCkgfCAweGEpKSkpCisJeworCSAgY29u c3RfcG9vbF9zdGF0ZSA9IDI7CisJICB2YWxpZF9wcm9sb2d1ZSA9IDE7CisJ ICBjb250aW51ZTsKKwl9CisgICAgICAvKiBDaGVjayBmb3IgTEdSIG9yIExS IGdwcngsMTUgKi8KKyAgICAgIGlmICgoR0RCX1RBUkdFVF9JU19FU0FNRSAm JgorCSAgIGluc3RyWzBdID09IDB4YjkgJiYgaW5zdHJbMV0gPT0gMHgwNCAm JiAoaW5zdHJbM10gJiAweGYpID09IDB4ZikgfHwKKwkgIChpbnN0clswXSA9 PSAweDE4ICYmIChpbnN0clsxXSAmIDB4ZikgPT0gMHhmKSkKKwl7CisJICBp ZiAoR0RCX1RBUkdFVF9JU19FU0FNRSkKKwkgICAgcmVnaWR4ID0gaW5zdHJb M10gPj4gNDsKKwkgIGVsc2UKKwkgICAgcmVnaWR4ID0gaW5zdHJbMV0gPj4g NDsKKwkgIGlmIChzYXZlX2xpbmtfc3RhdGUgPT0gMCAmJiByZWdpZHggIT0g MHhiKQorCSAgICB7CisJICAgICAgLyogQWxtb3N0IGRlZmludGVseSBjb2Rl IGZvcgorCSAgICAgICAgIGRlY3JlbWVudGluZyB0aGUgc3RhY2sgcG9pbnRl ciAKKwkgICAgICAgICAoIGkuZS4gYSBub24gbGVhZiBmdW5jdGlvbiAKKwkg ICAgICAgICBvciBlbHNlIGxlYWYgd2l0aCBsb2NhbHMgKSAqLworCSAgICAg IHNhdmVfbGlua19yZWdpZHggPSByZWdpZHg7CisJICAgICAgc2F2ZV9saW5r X3N0YXRlID0gMTsKKwkgICAgICB2YWxpZF9wcm9sb2d1ZSA9IDE7CisJICAg ICAgY29udGludWU7CisJICAgIH0KKwkgIC8qIFdlIHVzZSB0aGlzIGZyYW1l IHBvaW50ZXIgZm9yIGFsbG9jYQorCSAgICAgdW5mb3J0dW5hdGVseSB3ZSBu ZWVkIHRvIGFzc3VtZSBpdHMgZ3ByMTEKKwkgICAgIG90aGVyd2lzZSB3ZSB3 b3VsZCBuZWVkIGEgc21hcnRlciBwcm9sb2d1ZQorCSAgICAgd2Fsa2VyLiAq LworCSAgaWYgKCFmcmFtZV9wb2ludGVyX2ZvdW5kICYmIHJlZ2lkeCA9PSAw eGIpCisJICAgIHsKKwkgICAgICBmcmFtZV9wb2ludGVyX3JlZ2lkeCA9IDB4 YjsKKwkgICAgICBmcmFtZV9wb2ludGVyX2ZvdW5kID0gMTsKKwkgICAgICBp ZiAoZmV4dHJhX2luZm8pCisJCWZleHRyYV9pbmZvLT5mcmFtZV9wb2ludGVy X3NhdmVkX3BjID0gdGVzdF9wYzsKKwkgICAgICB2YWxpZF9wcm9sb2d1ZSA9 IDE7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwl9CisgICAgICAvKiBD aGVjayBmb3IgQUhJIG9yIEFHSEkgZ3ByMTUsdmFsICovCisgICAgICBpZiAo c2F2ZV9saW5rX3N0YXRlID09IDEgJiYgKGluc3RyWzBdID09IDB4YTcpICYm CisJICAoKEdEQl9UQVJHRVRfSVNfRVNBTUUgJiYgKGluc3RyWzFdID09IDB4 ZmIpKSB8fCAoaW5zdHJbMV0gPT0gMHhmYSkpKQorCXsKKwkgIGlmIChmZXh0 cmFfaW5mbykKKwkgICAgZmV4dHJhX2luZm8tPnN0YWNrX2JvdWdodCA9CisJ ICAgICAgLWV4dHJhY3Rfc2lnbmVkX2ludGVnZXIgKCZpbnN0clsyXSwgMik7 CisJICBzYXZlX2xpbmtfc3RhdGUgPSAzOworCSAgdmFsaWRfcHJvbG9ndWUg PSAxOworCSAgY29udGludWU7CisJfQorICAgICAgLyogQWx0ZXJuYXRpdmVs eSBjaGVjayBmb3IgdGhlIGNvbXBsZXggY29uc3RydWN0aW9uIGZvcgorICAg ICAgICAgYnV5aW5nIG1vcmUgdGhhbiAzMmsgb2Ygc3RhY2sKKyAgICAgICAg IEJSQVMgZ3ByeCwuKzgKKyAgICAgICAgIGxvbmcgdmFscyAgICAlcjE1LDAo JWdwcngpICBncHJ4IGN1cnJlbnRseSByMSAqLworICAgICAgaWYgKChzYXZl X2xpbmtfc3RhdGUgPT0gMSkgJiYgKGluc3RyWzBdID09IDB4YTcpCisJICAm JiAoKGluc3RyWzFdICYgMHhmKSA9PSAweDUpICYmIChpbnN0clsyXSA9PSAw KQorCSAgJiYgKGluc3RyWzNdID09IDB4NCkgJiYgKChpbnN0clsxXSA+PiA0 KSAhPSBDT05TVF9QT09MX1JFR0lEWCkpCisJeworCSAgc3VidHJhY3Rfc3Bf cmVnaWR4ID0gaW5zdHJbMV0gPj4gNDsKKwkgIHNhdmVfbGlua19zdGF0ZSA9 IDI7CisJICBpZiAoZmV4dHJhX2luZm8pCisJICAgIHRhcmdldF9yZWFkX21l bW9yeSAodGVzdF9wYyArIGluc3RybGVuLAorCQkJCShjaGFyICopICZmZXh0 cmFfaW5mby0+c3RhY2tfYm91Z2h0LAorCQkJCXNpemVvZiAoZmV4dHJhX2lu Zm8tPnN0YWNrX2JvdWdodCkpOworCSAgdGVzdF9wYyArPSA0OworCSAgdmFs aWRfcHJvbG9ndWUgPSAxOworCSAgY29udGludWU7CisJfQorICAgICAgaWYg KHNhdmVfbGlua19zdGF0ZSA9PSAyICYmIGluc3RyWzBdID09IDB4NWIKKwkg ICYmIGluc3RyWzFdID09IDB4ZjAgJiYKKwkgIGluc3RyWzJdID09IChzdWJ0 cmFjdF9zcF9yZWdpZHggPDwgNCkgJiYgaW5zdHJbM10gPT0gMCkKKwl7CisJ ICBzYXZlX2xpbmtfc3RhdGUgPSAzOworCSAgdmFsaWRfcHJvbG9ndWUgPSAx OworCSAgY29udGludWU7CisJfQorICAgICAgLyogY2hlY2sgZm9yIExBIGdw cngsb2Zmc2V0KDE1KSB1c2VkIGZvciB2YXJhcmdzICovCisgICAgICBpZiAo KGluc3RyWzBdID09IDB4NDEpICYmICgoaW5zdHJbMl0gPj4gNCkgPT0gMHhm KSAmJgorCSAgKChpbnN0clsxXSAmIDB4ZikgPT0gMCkpCisJeworCSAgLyog c29tZSBjb2RlIHVzZXMgZ3ByNyB0byBwb2ludCB0byBvdXRnb2luZyBhcmdz ICovCisJICBpZiAoKChpbnN0clsxXSA+PiA0KSA9PSA3KSAmJiAoc2F2ZV9s aW5rX3N0YXRlID09IDApICYmCisJICAgICAgKChpbnN0clsyXSAmIDB4Zikg PT0gMCkKKwkgICAgICAmJiAoaW5zdHJbM10gPT0gUzM5MF9TVEFDS19GUkFN RV9PVkVSSEVBRCkpCisJICAgIHsKKwkgICAgICB2YWxpZF9wcm9sb2d1ZSA9 IDE7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwkgIGlmICh2YXJhcmdz X3N0YXRlID09IDEpCisJICAgIHsKKwkgICAgICB2YXJhcmdzX3N0YXRlID0g MjsKKwkgICAgICB2YWxpZF9wcm9sb2d1ZSA9IDE7CisJICAgICAgY29udGlu dWU7CisJICAgIH0KKwl9CisgICAgICAvKiBDaGVjayBmb3IgYSBHT1QgbG9h ZCAqLworCisgICAgICBpZiAoR0RCX1RBUkdFVF9JU19FU0FNRSkKKwl7CisJ ICAvKiBDaGVjayBmb3IgbGFybCAgR09UX1JFR0lEWCwgb24gRVNBTUUgKi8K KwkgIGlmICgoZ290X3N0YXRlID09IDApICYmIChpbnN0clswXSA9PSAweGMw KQorCSAgICAgICYmIChpbnN0clsxXSA9PSAoR09UX1JFR0lEWCA8PCA0KSkp CisJICAgIHsKKwkgICAgICBnb3Rfc3RhdGUgPSAyOworCSAgICAgIHZhbGlk X3Byb2xvZ3VlID0gMTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCX0K KyAgICAgIGVsc2UKKwl7CisJICAvKiBjaGVjayBmb3IgbCBHT1RfUkVHSURY LHgoQ09OU1RfUE9PTF9SRUdJRFgpICovCisJICBpZiAoZ290X3N0YXRlID09 IDAgJiYgY29uc3RfcG9vbF9zdGF0ZSA9PSAyICYmIGluc3RyWzBdID09IDB4 NTgKKwkgICAgICAmJiAoaW5zdHJbMl0gPT0gKENPTlNUX1BPT0xfUkVHSURY IDw8IDQpKQorCSAgICAgICYmICgoaW5zdHJbMV0gPj4gNCkgPT0gR09UX1JF R0lEWCkpCisJICAgIHsKKwkgICAgICBnb3Rfc3RhdGUgPT0gMTsKKwkgICAg ICB2YWxpZF9wcm9sb2d1ZSA9IDE7CisJICAgICAgY29udGludWU7CisJICAg IH0KKwkgIC8qIENoZWNrIGZvciBzdWJzZXF1ZW50IGFyIGdvdF9yZWdpZHgs YmFzcl9yZWdpZHggKi8KKwkgIGlmIChnb3Rfc3RhdGUgPT0gMSAmJiBpbnN0 clswXSA9PSAweDFhICYmCisJICAgICAgaW5zdHJbMV0gPT0gKChHT1RfUkVH SURYIDw8IDQpIHwgQ09OU1RfUE9PTF9SRUdJRFgpKQorCSAgICB7CisJICAg ICAgZ290X3N0YXRlID0gMjsKKwkgICAgICB2YWxpZF9wcm9sb2d1ZSA9IDE7 CisJICAgICAgY29udGludWU7CisJICAgIH0KKwl9CisgICAgfQorICB3aGls ZSAodmFsaWRfcHJvbG9ndWUgJiYgZ29vZF9wcm9sb2d1ZSk7CisgIGlmIChn b29kX3Byb2xvZ3VlKQorICAgIHsKKyAgICAgIGdvb2RfcHJvbG9ndWUgPSAo KChnb3Rfc3RhdGUgPT0gMCkgfHwgKGdvdF9zdGF0ZSA9PSAyKSkgJiYKKwkJ ICAgICAgICgoY29uc3RfcG9vbF9zdGF0ZSA9PSAwKSB8fCAoY29uc3RfcG9v bF9zdGF0ZSA9PSAyKSkgJiYKKwkJICAgICAgICgoc2F2ZV9saW5rX3N0YXRl ID09IDApIHx8IChzYXZlX2xpbmtfc3RhdGUgPT0gNCkpICYmCisJCSAgICAg ICAoKHZhcmFyZ3Nfc3RhdGUgPT0gMCkgfHwgKHZhcmFyZ3Nfc3RhdGUgPT0g MikpKTsKKyAgICB9CisgIGlmIChmZXh0cmFfaW5mbykKKyAgICB7CisgICAg ICBmZXh0cmFfaW5mby0+Z29vZF9wcm9sb2d1ZSA9IGdvb2RfcHJvbG9ndWU7 CisgICAgICBmZXh0cmFfaW5mby0+c2tpcF9wcm9sb2d1ZV9mdW5jdGlvbl9z dGFydCA9CisJKGdvb2RfcHJvbG9ndWUgPyB0ZXN0X3BjIDogcGMpOworICAg IH0KKyAgcmV0dXJuIGVycjsKK30KKworCitpbnQKK3MzOTBfY2hlY2tfZnVu Y3Rpb25fZW5kIChDT1JFX0FERFIgcGMpCit7CisgIGJmZF9ieXRlIGluc3Ry W1MzOTBfTUFYX0lOU1RSX1NJWkVdOworICBkaXNhc3NlbWJsZV9pbmZvIGlu Zm87CisgIGludCByZWdpZHgsIGluc3RybGVuOworCisgIGluZm8ucmVhZF9t ZW1vcnlfZnVuYyA9IGRpc19hc21fcmVhZF9tZW1vcnk7CisgIGluc3RybGVu ID0gczM5MF9yZWFkaW5zdHJ1Y3Rpb24gKGluc3RyLCBwYywgJmluZm8pOwor ICBpZiAoaW5zdHJsZW4gPCAwKQorICAgIHJldHVybiAtMTsKKyAgLyogY2hl Y2sgZm9yIEJSICovCisgIGlmIChpbnN0cmxlbiAhPSAyIHx8IGluc3RyWzBd ICE9IDA3IHx8IChpbnN0clsxXSA+PiA0KSAhPSAweGYpCisgICAgcmV0dXJu IDA7CisgIHJlZ2lkeCA9IGluc3RyWzFdICYgMHhmOworICAvKiBDaGVjayBm b3IgTE1HIG9yIExHICovCisgIGluc3RybGVuID0KKyAgICBzMzkwX3JlYWRp bnN0cnVjdGlvbiAoaW5zdHIsIHBjIC0gKEdEQl9UQVJHRVRfSVNfRVNBTUUg PyA2IDogNCksICZpbmZvKTsKKyAgaWYgKGluc3RybGVuIDwgMCkKKyAgICBy ZXR1cm4gLTE7CisgIGlmIChHREJfVEFSR0VUX0lTX0VTQU1FKQorICAgIHsK KworICAgICAgaWYgKGluc3RybGVuICE9IDYgfHwgaW5zdHJbMF0gIT0gMHhl YiB8fCBpbnN0cls1XSAhPSAweDQpCisJcmV0dXJuIDA7CisgICAgfQorICBl bHNlIGlmIChpbnN0cmxlbiAhPSA0IHx8IGluc3RyWzBdICE9IDB4OTgpCisg ICAgeworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBpZiAoKGluc3RyWzJd ID4+IDQpICE9IDB4ZikKKyAgICByZXR1cm4gMDsKKyAgaWYgKHJlZ2lkeCA9 PSAxNCkKKyAgICByZXR1cm4gMTsKKyAgaW5zdHJsZW4gPSBzMzkwX3JlYWRp bnN0cnVjdGlvbiAoaW5zdHIsIHBjIC0gKEdEQl9UQVJHRVRfSVNfRVNBTUUg PyAxMiA6IDgpLAorCQkJCSAgICZpbmZvKTsKKyAgaWYgKGluc3RybGVuIDwg MCkKKyAgICByZXR1cm4gLTE7CisgIGlmIChHREJfVEFSR0VUX0lTX0VTQU1F KQorICAgIHsKKyAgICAgIC8qIENoZWNrIGZvciBMRyAqLworICAgICAgaWYg KGluc3RybGVuICE9IDYgfHwgaW5zdHJbMF0gIT0gMHhlMyB8fCBpbnN0cls1 XSAhPSAweDQpCisJcmV0dXJuIDA7CisgICAgfQorICBlbHNlCisgICAgewor ICAgICAgLyogQ2hlY2sgZm9yIEwgKi8KKyAgICAgIGlmIChpbnN0cmxlbiAh PSA0IHx8IGluc3RyWzBdICE9IDB4NTgpCisJcmV0dXJuIDA7CisgICAgfQor ICBpZiAoaW5zdHJbMl0gPj4gNCAhPSAweGYpCisgICAgcmV0dXJuIDA7Cisg IGlmIChpbnN0clsxXSA+PiA0ICE9IHJlZ2lkeCkKKyAgICByZXR1cm4gMDsK KyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBDT1JFX0FERFIKK3MzOTBfc25p ZmZfcGNfZnVuY3Rpb25fc3RhcnQgKENPUkVfQUREUiBwYywgc3RydWN0IGZy YW1lX2luZm8gKmZpKQoreworICBDT1JFX0FERFIgZnVuY3Rpb25fc3RhcnQs IHRlc3RfZnVuY3Rpb25fc3RhcnQ7CisgIGludCBsb29wX2NudCwgZXJyLCBm dW5jdGlvbl9lbmQ7CisgIHN0cnVjdCBmcmFtZV9leHRyYV9pbmZvIGZleHRy YV9pbmZvOworICBmdW5jdGlvbl9zdGFydCA9IGdldF9wY19mdW5jdGlvbl9z dGFydCAocGMpOworCisgIGlmIChmdW5jdGlvbl9zdGFydCA9PSAwKQorICAg IHsKKyAgICAgIHRlc3RfZnVuY3Rpb25fc3RhcnQgPSBwYzsKKyAgICAgIGlm ICh0ZXN0X2Z1bmN0aW9uX3N0YXJ0ICYgMSkKKwlyZXR1cm4gMDsJCS8qIFRo aXMgaGFzIHRvIGJlIGJvZ3VzICovCisgICAgICBsb29wX2NudCA9IDA7Cisg ICAgICBkbworCXsKKworCSAgZXJyID0KKwkgICAgczM5MF9nZXRfZnJhbWVf aW5mbyAodGVzdF9mdW5jdGlvbl9zdGFydCwgJmZleHRyYV9pbmZvLCBmaSwg MSk7CisJICBsb29wX2NudCsrOworCSAgdGVzdF9mdW5jdGlvbl9zdGFydCAt PSAyOworCSAgZnVuY3Rpb25fZW5kID0gczM5MF9jaGVja19mdW5jdGlvbl9l bmQgKHRlc3RfZnVuY3Rpb25fc3RhcnQpOworCX0KKyAgICAgIHdoaWxlICgh KGZ1bmN0aW9uX2VuZCA9PSAxIHx8IGVyciB8fCBsb29wX2NudCA+PSA0MDk2 IHx8CisJICAgICAgIChmZXh0cmFfaW5mby5nb29kX3Byb2xvZ3VlKSkpOwor ICAgICAgaWYgKGZleHRyYV9pbmZvLmdvb2RfcHJvbG9ndWUpCisJZnVuY3Rp b25fc3RhcnQgPSBmZXh0cmFfaW5mby5mdW5jdGlvbl9zdGFydDsKKyAgICAg IGVsc2UgaWYgKGZ1bmN0aW9uX2VuZCA9PSAxKQorCWZ1bmN0aW9uX3N0YXJ0 ID0gdGVzdF9mdW5jdGlvbl9zdGFydDsKKyAgICB9CisgIHJldHVybiBmdW5j dGlvbl9zdGFydDsKK30KKworCisKK0NPUkVfQUREUgorczM5MF9mdW5jdGlv bl9zdGFydCAoc3RydWN0IGZyYW1lX2luZm8gKmZpKQoreworICBDT1JFX0FE RFIgZnVuY3Rpb25fc3RhcnQgPSAwOworCisgIGlmIChmaS0+ZXh0cmFfaW5m byAmJiBmaS0+ZXh0cmFfaW5mby0+aW5pdGlhbGlzZWQpCisgICAgZnVuY3Rp b25fc3RhcnQgPSBmaS0+ZXh0cmFfaW5mby0+ZnVuY3Rpb25fc3RhcnQ7Cisg IGVsc2UgaWYgKGZpLT5wYykKKyAgICBmdW5jdGlvbl9zdGFydCA9IGdldF9w Y19mdW5jdGlvbl9zdGFydCAoZmktPnBjKTsKKyAgcmV0dXJuIGZ1bmN0aW9u X3N0YXJ0OworfQorCisKKworCitpbnQKK3MzOTBfZnJhbWVsZXNzX2Z1bmN0 aW9uX2ludm9jYXRpb24gKHN0cnVjdCBmcmFtZV9pbmZvICpmaSkKK3sKKyAg c3RydWN0IGZyYW1lX2V4dHJhX2luZm8gZmV4dHJhX2luZm8sICpmZXh0cmFf aW5mb19wdHI7CisgIGludCBmcmFtZWxlc3MgPSAwOworCisgIGlmIChmaS0+ bmV4dCA9PSBOVUxMKQkJLyogbm8gbWF5IGJlIGZyYW1lbGVzcyAqLworICAg IHsKKyAgICAgIGlmIChmaS0+ZXh0cmFfaW5mbykKKwlmZXh0cmFfaW5mb19w dHIgPSBmaS0+ZXh0cmFfaW5mbzsKKyAgICAgIGVsc2UKKwl7CisJICBmZXh0 cmFfaW5mb19wdHIgPSAmZmV4dHJhX2luZm87CisJICBzMzkwX2dldF9mcmFt ZV9pbmZvIChzMzkwX3NuaWZmX3BjX2Z1bmN0aW9uX3N0YXJ0IChmaS0+cGMs IGZpKSwKKwkJCSAgICAgICBmZXh0cmFfaW5mb19wdHIsIGZpLCAxKTsKKwl9 CisgICAgICBmcmFtZWxlc3MgPSAoKGZleHRyYV9pbmZvX3B0ci0+c3RhY2tf Ym91Z2h0ID09IDApKTsKKyAgICB9CisgIHJldHVybiBmcmFtZWxlc3M7CisK K30KKworCitzdGF0aWMgaW50CitzMzkwX2lzX3NpZ3JldHVybiAoQ09SRV9B RERSIHBjLCBzdHJ1Y3QgZnJhbWVfaW5mbyAqc2lnaGFuZGxlcl9maSwKKwkJ ICAgQ09SRV9BRERSICpzcmVncywgQ09SRV9BRERSICpzaWdjYWxsZXJfcGMp Cit7CisgIGJmZF9ieXRlIGluc3RyW1MzOTBfTUFYX0lOU1RSX1NJWkVdOwor ICBkaXNhc3NlbWJsZV9pbmZvIGluZm87CisgIGludCBpbnN0cmxlbjsKKyAg Q09SRV9BRERSIHNjb250ZXh0OworICBpbnQgcmV0dmFsID0gMDsKKyAgQ09S RV9BRERSIG9yaWdfc3A7CisgIENPUkVfQUREUiB0ZW1wX3NyZWdzOworCisg IHNjb250ZXh0ID0gdGVtcF9zcmVncyA9IDA7CisKKyAgaW5mby5yZWFkX21l bW9yeV9mdW5jID0gZGlzX2FzbV9yZWFkX21lbW9yeTsKKyAgaW5zdHJsZW4g PSBzMzkwX3JlYWRpbnN0cnVjdGlvbiAoaW5zdHIsIHBjLCAmaW5mbyk7Cisg IGlmIChzaWdjYWxsZXJfcGMpCisgICAgKnNpZ2NhbGxlcl9wYyA9IDA7Cisg IGlmICgoKGluc3RybGVuID09IFMzOTBfU1lTQ0FMTF9TSVpFKSAmJgorICAg ICAgIChpbnN0clswXSA9PSBTMzkwX1NZU0NBTExfT1BDT0RFKSkgJiYKKyAg ICAgICgoaW5zdHJbMV0gPT0gczM5MF9OUl9zaWdyZXR1cm4pIHx8IChpbnN0 clsxXSA9PSBzMzkwX05SX3J0X3NpZ3JldHVybikpKQorICAgIHsKKyAgICAg IGlmIChzaWdoYW5kbGVyX2ZpKQorCXsKKwkgIGlmIChzMzkwX2ZyYW1lbGVz c19mdW5jdGlvbl9pbnZvY2F0aW9uIChzaWdoYW5kbGVyX2ZpKSkKKwkgICAg b3JpZ19zcCA9IHNpZ2hhbmRsZXJfZmktPmZyYW1lOworCSAgZWxzZQorCSAg ICBvcmlnX3NwID0gQUREUl9CSVRTX1JFTU9WRSAoKENPUkVfQUREUikKKwkJ CQkJcmVhZF9tZW1vcnlfaW50ZWdlciAoc2lnaGFuZGxlcl9maS0+CisJCQkJ CQkJICAgICBmcmFtZSwKKwkJCQkJCQkgICAgIFMzOTBfR1BSX1NJWkUpKTsK KwkgIGlmIChvcmlnX3NwICYmIHNpZ2NhbGxlcl9wYykKKwkgICAgeworCSAg ICAgIHNjb250ZXh0ID0gb3JpZ19zcCArIFMzOTBfU0lHTkFMX0ZSQU1FU0la RTsKKwkgICAgICBpZiAocGMgPT0gc2NvbnRleHQgJiYgaW5zdHJbMV0gPT0g czM5MF9OUl9ydF9zaWdyZXR1cm4pCisJCXsKKwkJICAvKiBXZSBnb3QgYSBu ZXcgc3R5bGUgcnRfc2lnbmFsICovCisJCSAgLyogZ2V0IGFkZHJlc3Mgb2Yg cmVhZCB1Y29udGV4dC0+dWNfbWNvbnRleHQgKi8KKwkJICB0ZW1wX3NyZWdz ID0gb3JpZ19zcCArIChHREJfVEFSR0VUX0lTX0VTQU1FID8KKwkJCQkJICBT MzkwWF9VQ19NQ09OVEVYVF9PRkZTRVQgOgorCQkJCQkgIFMzOTBfVUNfTUNP TlRFWFRfT0ZGU0VUKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIC8q IHJlYWQgc2lnY29udGV4dC0+c3JlZ3MgKi8KKwkJICB0ZW1wX3NyZWdzID0g QUREUl9CSVRTX1JFTU9WRSAoKENPUkVfQUREUikKKwkJCQkJCSByZWFkX21l bW9yeV9pbnRlZ2VyIChzY29udGV4dAorCQkJCQkJCQkgICAgICArCisJCQkJ CQkJCSAgICAgIChHREJfVEFSR0VUX0lTX0VTQU1FCisJCQkJCQkJCSAgICAg ICA/CisJCQkJCQkJCSAgICAgICBTMzkwWF9TSUdDT05URVhUX1NSRUdTX09G RlNFVAorCQkJCQkJCQkgICAgICAgOgorCQkJCQkJCQkgICAgICAgUzM5MF9T SUdDT05URVhUX1NSRUdTX09GRlNFVCksCisJCQkJCQkJCSAgICAgIFMzOTBf R1BSX1NJWkUpKTsKKworCQl9CisJICAgICAgLyogcmVhZCBzaWdyZWdzLT5w c3cuYWRkciAqLworCSAgICAgICpzaWdjYWxsZXJfcGMgPQorCQlBRERSX0JJ VFNfUkVNT1ZFICgoQ09SRV9BRERSKQorCQkJCSAgcmVhZF9tZW1vcnlfaW50 ZWdlciAodGVtcF9zcmVncyArCisJCQkJCQkgICAgICAgUkVHSVNURVJfQllU RQorCQkJCQkJICAgICAgIChTMzkwX1BDX1JFR05VTSksCisJCQkJCQkgICAg ICAgUzM5MF9QU1dfQUREUl9TSVpFKSk7CisJICAgIH0KKwl9CisgICAgICBy ZXR2YWwgPSAxOworICAgIH0KKyAgaWYgKHNyZWdzKQorICAgICpzcmVncyA9 IHRlbXBfc3JlZ3M7CisgIHJldHVybiByZXR2YWw7Cit9CisKKy8qCisgIFdl IG5lZWQgdG8gZG8gc29tZXRoaW5nIGJldHRlciBoZXJlIGJ1dCB0aGlzIHdp bGwga2VlcCB1cyBvdXQgb2YgdHJvdWJsZQorICBmb3IgdGhlIG1vbWVudC4K KyAgRm9yIHNvbWUgcmVhc29uIHRoZSBibG9ja2ZyYW1lLmMgY2FsbHMgdXMg d2l0aCBmaS0+bmV4dC0+ZnJvbWxlYWYKKyAgc28gdGhpcyBzZWVtcyBvZiBs aXR0bGUgdXNlIHRvIHVzLiAqLwordm9pZAorczM5MF9pbml0X2ZyYW1lX3Bj X2ZpcnN0IChpbnQgbmV4dF9mcm9tbGVhZiwgc3RydWN0IGZyYW1lX2luZm8g KmZpKQoreworICBDT1JFX0FERFIgc2lnY2FsbGVyX3BjOworCisgIGZpLT5w YyA9IDA7CisgIGlmIChuZXh0X2Zyb21sZWFmKQorICAgIHsKKyAgICAgIGZp LT5wYyA9IEFERFJfQklUU19SRU1PVkUgKHJlYWRfcmVnaXN0ZXIgKFMzOTBf UkVUQUREUl9SRUdOVU0pKTsKKyAgICAgIC8qIGZpeCBzaWduYWwgaGFuZGxl cnMgKi8KKyAgICB9CisgIGVsc2UgaWYgKGZpLT5uZXh0ICYmIGZpLT5uZXh0 LT5wYykKKyAgICBmaS0+cGMgPSBzMzkwX2ZyYW1lX3NhdmVkX3BjX25vZml4 IChmaS0+bmV4dCk7CisgIGlmIChmaS0+cGMgJiYgZmktPm5leHQgJiYgZmkt Pm5leHQtPmZyYW1lICYmCisgICAgICBzMzkwX2lzX3NpZ3JldHVybiAoZmkt PnBjLCBmaS0+bmV4dCwgTlVMTCwgJnNpZ2NhbGxlcl9wYykpCisgICAgewor ICAgICAgZmktPnBjID0gc2lnY2FsbGVyX3BjOworICAgIH0KKworfQorCit2 b2lkCitzMzkwX2luaXRfZXh0cmFfZnJhbWVfaW5mbyAoaW50IGZyb21sZWFm LCBzdHJ1Y3QgZnJhbWVfaW5mbyAqZmkpCit7CisgIGZpLT5leHRyYV9pbmZv ID0gZnJhbWVfb2JzdGFja19hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZnJhbWVf ZXh0cmFfaW5mbykpOworICBpZiAoZmktPnBjKQorICAgIHMzOTBfZ2V0X2Zy YW1lX2luZm8gKHMzOTBfc25pZmZfcGNfZnVuY3Rpb25fc3RhcnQgKGZpLT5w YywgZmkpLAorCQkJIGZpLT5leHRyYV9pbmZvLCBmaSwgMSk7CisgIGVsc2UK KyAgICBzMzkwX21lbXNldF9leHRyYV9pbmZvIChmaS0+ZXh0cmFfaW5mbyk7 Cit9CisKKy8qIElmIHNhdmVkIHJlZ2lzdGVycyBvZiBmcmFtZSBGSSBhcmUg bm90IGtub3duIHlldCwgcmVhZCBhbmQgY2FjaGUgdGhlbS4KKyAgICZGRVhU UkFfSU5GT1AgY29udGFpbnMgc3RydWN0IGZyYW1lX2V4dHJhX2luZm87IFRE QVRBUCBjYW4gYmUgTlVMTCwKKyAgIGluIHdoaWNoIGNhc2UgdGhlIGZyYW1l ZGF0YSBhcmUgcmVhZC4gICovCisKK3ZvaWQKK3MzOTBfZnJhbWVfaW5pdF9z YXZlZF9yZWdzIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZmkpCit7CisKKyAgaW50 IHF1aWNrOworCisgIGlmIChmaS0+c2F2ZWRfcmVncyA9PSBOVUxMKQorICAg IHsKKyAgICAgIC8qIHphbGxvYyBtZW1zZXRzIHRoZSBzYXZlZCByZWdzICov CisgICAgICBmcmFtZV9zYXZlZF9yZWdzX3phbGxvYyAoZmkpOworICAgICAg aWYgKGZpLT5wYykKKwl7CisJICBxdWljayA9IChmaS0+ZXh0cmFfaW5mbyAm JiBmaS0+ZXh0cmFfaW5mby0+aW5pdGlhbGlzZWQKKwkJICAgJiYgZmktPmV4 dHJhX2luZm8tPmdvb2RfcHJvbG9ndWUpOworCSAgczM5MF9nZXRfZnJhbWVf aW5mbyAocXVpY2sgPyBmaS0+ZXh0cmFfaW5mby0+ZnVuY3Rpb25fc3RhcnQg OgorCQkJICAgICAgIHMzOTBfc25pZmZfcGNfZnVuY3Rpb25fc3RhcnQgKGZp LT5wYywgZmkpLAorCQkJICAgICAgIGZpLT5leHRyYV9pbmZvLCBmaSwgIXF1 aWNrKTsKKwl9CisgICAgfQorfQorCisKKworQ09SRV9BRERSCitzMzkwX2Zy YW1lX2FyZ3NfYWRkcmVzcyAoc3RydWN0IGZyYW1lX2luZm8gKmZpKQorewor CisgIC8qIEFwcGFyZW50bHkgZ2RiIGFscmVhZHkga25vd3MgZ2RiX2FyZ3Nf b2Zmc2V0IGl0c2VsZiAqLworICByZXR1cm4gZmktPmZyYW1lOworfQorCisK K3N0YXRpYyBDT1JFX0FERFIKK3MzOTBfZnJhbWVfc2F2ZWRfcGNfbm9maXgg KHN0cnVjdCBmcmFtZV9pbmZvICpmaSkKK3sKKyAgaWYgKGZpLT5leHRyYV9p bmZvICYmIGZpLT5leHRyYV9pbmZvLT5zYXZlZF9wY192YWxpZCkKKyAgICBy ZXR1cm4gZmktPmV4dHJhX2luZm8tPnNhdmVkX3BjOworICBzMzkwX2ZyYW1l X2luaXRfc2F2ZWRfcmVncyAoZmkpOworICBpZiAoZmktPmV4dHJhX2luZm8p CisgICAgeworICAgICAgZmktPmV4dHJhX2luZm8tPnNhdmVkX3BjX3ZhbGlk ID0gMTsKKyAgICAgIGlmIChmaS0+ZXh0cmFfaW5mby0+Z29vZF9wcm9sb2d1 ZSkKKwl7CisJICBpZiAoZmktPnNhdmVkX3JlZ3NbUzM5MF9SRVRBRERSX1JF R05VTV0pCisJICAgIHsKKwkgICAgICByZXR1cm4gKGZpLT5leHRyYV9pbmZv LT5zYXZlZF9wYyA9CisJCSAgICAgIEFERFJfQklUU19SRU1PVkUgKHJlYWRf bWVtb3J5X2ludGVnZXIKKwkJCQkJKGZpLT5zYXZlZF9yZWdzW1MzOTBfUkVU QUREUl9SRUdOVU1dLAorCQkJCQkgUzM5MF9HUFJfU0laRSkpKTsKKwkgICAg fQorCX0KKyAgICB9CisgIHJldHVybiAwOworfQorCitDT1JFX0FERFIKK3Mz OTBfZnJhbWVfc2F2ZWRfcGMgKHN0cnVjdCBmcmFtZV9pbmZvICpmaSkKK3sK KyAgQ09SRV9BRERSIHNhdmVkX3BjID0gMCwgc2lnX3BjOworCisgIGlmIChm aS0+ZXh0cmFfaW5mbyAmJiBmaS0+ZXh0cmFfaW5mby0+c2lnX2ZpeGVkX3Nh dmVkX3BjX3ZhbGlkKQorICAgIHJldHVybiBmaS0+ZXh0cmFfaW5mby0+c2ln X2ZpeGVkX3NhdmVkX3BjOworICBzYXZlZF9wYyA9IHMzOTBfZnJhbWVfc2F2 ZWRfcGNfbm9maXggKGZpKTsKKworICBpZiAoZmktPmV4dHJhX2luZm8pCisg ICAgeworICAgICAgZmktPmV4dHJhX2luZm8tPnNpZ19maXhlZF9zYXZlZF9w Y192YWxpZCA9IDE7CisgICAgICBpZiAoc2F2ZWRfcGMpCisJeworCSAgaWYg KHMzOTBfaXNfc2lncmV0dXJuIChzYXZlZF9wYywgZmksIE5VTEwsICZzaWdf cGMpKQorCSAgICBzYXZlZF9wYyA9IHNpZ19wYzsKKwl9CisgICAgICBmaS0+ ZXh0cmFfaW5mby0+c2lnX2ZpeGVkX3NhdmVkX3BjID0gc2F2ZWRfcGM7Cisg ICAgfQorICByZXR1cm4gc2F2ZWRfcGM7Cit9CisKKworCisKKy8qIFdlIHdh bnQgYmFja3RyYWNlcyBvdXQgb2Ygc2lnbmFsIGhhbmRsZXJzIHNvIHdlIGRv bid0CisgICBzZXQgdGhpc2ZyYW1lLT5zaWduYWxfaGFuZGxlcl9jYWxsZXIg dG8gMSAqLworCitDT1JFX0FERFIKK3MzOTBfZnJhbWVfY2hhaW4gKHN0cnVj dCBmcmFtZV9pbmZvICp0aGlzZnJhbWUpCit7CisgIENPUkVfQUREUiBwcmV2 X2ZwID0gMDsKKworICBpZiAodGhpc2ZyYW1lLT5wcmV2ICYmIHRoaXNmcmFt ZS0+cHJldi0+ZnJhbWUpCisgICAgcHJldl9mcCA9IHRoaXNmcmFtZS0+cHJl di0+ZnJhbWU7CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgc2lncmV0dXJu ID0gMDsKKyAgICAgIENPUkVfQUREUiBzcmVncyA9IDA7CisgICAgICBzdHJ1 Y3QgZnJhbWVfZXh0cmFfaW5mbyBwcmV2X2ZleHRyYV9pbmZvOworCisgICAg ICBtZW1zZXQgKCZwcmV2X2ZleHRyYV9pbmZvLCAwLCBzaXplb2YgKHByZXZf ZmV4dHJhX2luZm8pKTsKKyAgICAgIGlmICh0aGlzZnJhbWUtPnBjKQorCXsK KwkgIENPUkVfQUREUiBzYXZlZF9wYywgc2lnX3BjOworCisJICBzYXZlZF9w YyA9IHMzOTBfZnJhbWVfc2F2ZWRfcGNfbm9maXggKHRoaXNmcmFtZSk7CisJ ICBpZiAoc2F2ZWRfcGMpCisJICAgIHsKKwkgICAgICBpZiAoKHNpZ3JldHVy biA9CisJCSAgIHMzOTBfaXNfc2lncmV0dXJuIChzYXZlZF9wYywgdGhpc2Zy YW1lLCAmc3JlZ3MsICZzaWdfcGMpKSkKKwkJc2F2ZWRfcGMgPSBzaWdfcGM7 CisJICAgICAgczM5MF9nZXRfZnJhbWVfaW5mbyAoczM5MF9zbmlmZl9wY19m dW5jdGlvbl9zdGFydAorCQkJCSAgIChzYXZlZF9wYywgTlVMTCksICZwcmV2 X2ZleHRyYV9pbmZvLCBOVUxMLAorCQkJCSAgIDEpOworCSAgICB9CisJfQor ICAgICAgaWYgKHNpZ3JldHVybikKKwl7CisJICAvKiByZWFkIHNpZ3JlZ3Ms cmVncy5ncHJzWzExIG9yIDE1XSAqLworCSAgcHJldl9mcCA9IHJlYWRfbWVt b3J5X2ludGVnZXIgKHNyZWdzICsKKwkJCQkJIFJFR0lTVEVSX0JZVEUgKFMz OTBfR1AwX1JFR05VTSArCisJCQkJCQkJKHByZXZfZmV4dHJhX2luZm8uCisJ CQkJCQkJIGZyYW1lX3BvaW50ZXJfc2F2ZWRfcGMKKwkJCQkJCQkgPyAxMSA6 IDE1KSksCisJCQkJCSBTMzkwX0dQUl9TSVpFKTsKKwkgIHRoaXNmcmFtZS0+ ZXh0cmFfaW5mby0+c2lnY29udGV4dCA9IHNyZWdzOworCX0KKyAgICAgIGVs c2UKKwl7CisJICBpZiAodGhpc2ZyYW1lLT5zYXZlZF9yZWdzKQorCSAgICB7 CisKKwkgICAgICBpbnQgcmVnbm87CisKKwkgICAgICByZWdubyA9CisJCSgo cHJldl9mZXh0cmFfaW5mby5mcmFtZV9wb2ludGVyX3NhdmVkX3BjCisJCSAg JiYgdGhpc2ZyYW1lLT4KKwkJICBzYXZlZF9yZWdzW1MzOTBfRlJBTUVfUkVH TlVNXSkgPyBTMzkwX0ZSQU1FX1JFR05VTSA6CisJCSBTMzkwX1NQX1JFR05V TSk7CisJICAgICAgaWYgKHRoaXNmcmFtZS0+c2F2ZWRfcmVnc1tyZWdub10p CisJCXByZXZfZnAgPQorCQkgIHJlYWRfbWVtb3J5X2ludGVnZXIgKHRoaXNm cmFtZS0+c2F2ZWRfcmVnc1tyZWdub10sCisJCQkJICAgICAgIFMzOTBfR1BS X1NJWkUpOworCSAgICB9CisJfQorICAgIH0KKyAgcmV0dXJuIEFERFJfQklU U19SRU1PVkUgKHByZXZfZnApOworfQorCisvKgorICBXaGV0aGVyIHN0cnVj dCBmcmFtZV9leHRyYV9pbmZvIGlzIGFjdHVhbGx5IG5lZWRlZCBJJ2xsIGhh dmUgdG8gZmlndXJlCisgIG91dCBhcyBvdXIgZnJhbWVzIGFyZSBzaW1pbGFy IHRvIHJzNjAwMCB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5CisgIGkzODYgZG9z ZW4ndCBuZWVkIGl0LiAqLworCisKKworLyogYSBnaXZlbiByZXR1cm4gdmFs dWUgaW4gYHJlZ2J1Zicgd2l0aCBhIHR5cGUgYHZhbHR5cGUnLCBleHRyYWN0 IGFuZCBjb3B5IGl0cworICAgdmFsdWUgaW50byBgdmFsYnVmJyAqLwordm9p ZAorczM5MF9leHRyYWN0X3JldHVybl92YWx1ZSAoc3RydWN0IHR5cGUgKnZh bHR5cGUsIGNoYXIgKnJlZ2J1ZiwgY2hhciAqdmFsYnVmKQoreworICAvKiBm bG9hdHMgYW5kIGRvdWJsZXMgYXJlIHJldHVybmVkIGluIGZwcjAuIGZwcidz IGhhdmUgYSBzaXplIG9mIDggYnl0ZXMuCisgICAgIFdlIG5lZWQgdG8gdHJ1 bmNhdGUgdGhlIHJldHVybiB2YWx1ZSBpbnRvIGZsb2F0IHNpemUgKDQgYnl0 ZSkgaWYKKyAgICAgbmVjZXNzYXJ5LiAqLworICBpbnQgbGVuID0gVFlQRV9M RU5HVEggKHZhbHR5cGUpOworCisgIGlmIChUWVBFX0NPREUgKHZhbHR5cGUp ID09IFRZUEVfQ09ERV9GTFQpCisgICAgeworICAgICAgaWYgKGxlbiA+IChU QVJHRVRfRkxPQVRfQklUID4+IDMpKQorCW1lbWNweSAodmFsYnVmLCAmcmVn YnVmW1JFR0lTVEVSX0JZVEUgKFMzOTBfRlAwX1JFR05VTSldLCBsZW4pOwor ICAgICAgZWxzZQorCXsKKwkgIC8qIGZsb2F0ICovCisJICBET1VCTEVTVCB2 YWw7CisKKwkgIGZsb2F0Zm9ybWF0X3RvX2RvdWJsZXN0ICgmZmxvYXRmb3Jt YXRfaWVlZV9kb3VibGVfYmlnLAorCQkJCSAgICZyZWdidWZbUkVHSVNURVJf QllURSAoUzM5MF9GUDBfUkVHTlVNKV0sCisJCQkJICAgJnZhbCk7CisJICBz dG9yZV9mbG9hdGluZyAodmFsYnVmLCBsZW4sIHZhbCk7CisJfQorICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIGludCBvZmZzZXQgPSAwOworICAgICAg LyogcmV0dXJuIHZhbHVlIGlzIGNvcGllZCBzdGFydGluZyBmcm9tIHIyLiAq LworICAgICAgaWYgKFRZUEVfTEVOR1RIICh2YWx0eXBlKSA8IFMzOTBfR1BS X1NJWkUpCisJb2Zmc2V0ID0gUzM5MF9HUFJfU0laRSAtIFRZUEVfTEVOR1RI ICh2YWx0eXBlKTsKKyAgICAgIG1lbWNweSAodmFsYnVmLAorCSAgICAgIHJl Z2J1ZiArIFJFR0lTVEVSX0JZVEUgKFMzOTBfR1AwX1JFR05VTSArIDIpICsg b2Zmc2V0LAorCSAgICAgIFRZUEVfTEVOR1RIICh2YWx0eXBlKSk7CisgICAg fQorfQorCisKK3N0YXRpYyBjaGFyICoKK3MzOTBfcHJvbW90ZV9pbnRlZ2Vy X2FyZ3VtZW50IChzdHJ1Y3QgdHlwZSAqdmFsdHlwZSwgY2hhciAqdmFsYnVm LAorCQkJICAgICAgIGNoYXIgKnJlZ19idWZmLCBpbnQgKmFyZ2xlbikKK3sK KyAgY2hhciAqdmFsdWUgPSB2YWxidWY7CisgIGludCBsZW4gPSBUWVBFX0xF TkdUSCAodmFsdHlwZSk7CisKKyAgaWYgKGxlbiA8IFMzOTBfR1BSX1NJWkUp CisgICAgeworICAgICAgLyogV2UgbmVlZCB0byB1cGdyYWRlIHRoaXMgdmFs dWUgdG8gYSByZWdpc3RlciB0byBwYXNzIGl0IGNvcnJlY3RseSAqLworICAg ICAgaW50IGlkeCwgZGlmZiA9IFMzOTBfR1BSX1NJWkUgLSBsZW4sIG5lZ2F0 aXZlID0KKwkoIVRZUEVfVU5TSUdORUQgKHZhbHR5cGUpICYmIHZhbHVlWzBd ICYgMHg4MCk7CisgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IFMzOTBfR1BS X1NJWkU7IGlkeCsrKQorCXsKKwkgIHJlZ19idWZmW2lkeF0gPSAoaWR4IDwg ZGlmZiA/IChuZWdhdGl2ZSA/IDB4ZmYgOiAweDApIDoKKwkJCSAgIHZhbHVl W2lkeCAtIGRpZmZdKTsKKwl9CisgICAgICB2YWx1ZSA9IHJlZ19idWZmOwor ICAgICAgKmFyZ2xlbiA9IFMzOTBfR1BSX1NJWkU7CisgICAgfQorICBlbHNl CisgICAgeworICAgICAgaWYgKGxlbiAmIChTMzkwX0dQUl9TSVpFIC0gMSkp CisJeworCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkZXJyLAorCQkJ ICAgICAgInMzOTBfcHJvbW90ZV9pbnRlZ2VyX2FyZ3VtZW50IGRldGVjdGVk IGFuIGFyZ3VtZW50IG5vdCAiCisJCQkgICAgICAiYSBtdWx0aXBsZSBvZiBT MzkwX0dQUl9TSVpFICYgZ3JlYXRlciB0aGFuIFMzOTBfR1BSX1NJWkUgIgor CQkJICAgICAgIndlIG1pZ2h0IG5vdCBkZWFsIHdpdGggdGhpcyBjb3JyZWN0 bHkuXG4iKTsKKwl9CisgICAgICAqYXJnbGVuID0gbGVuOworICAgIH0KKwor ICByZXR1cm4gKHZhbHVlKTsKK30KKwordm9pZAorczM5MF9zdG9yZV9yZXR1 cm5fdmFsdWUgKHN0cnVjdCB0eXBlICp2YWx0eXBlLCBjaGFyICp2YWxidWYp Cit7CisgIGludCBhcmdsZW47CisgIGNoYXIgKnJlZ19idWZmID0gYWxsb2Nh IChtYXggKFMzOTBfRlBSX1NJWkUsIFJFR0lTVEVSX1NJWkUpKSwgKnZhbHVl OworCisgIGlmIChUWVBFX0NPREUgKHZhbHR5cGUpID09IFRZUEVfQ09ERV9G TFQpCisgICAgeworICAgICAgRE9VQkxFU1QgdGVtcGZsb2F0ID0gZXh0cmFj dF9mbG9hdGluZyAodmFsYnVmLCBUWVBFX0xFTkdUSCAodmFsdHlwZSkpOwor CisgICAgICBmbG9hdGZvcm1hdF9mcm9tX2RvdWJsZXN0ICgmZmxvYXRmb3Jt YXRfaWVlZV9kb3VibGVfYmlnLCAmdGVtcGZsb2F0LAorCQkJCSByZWdfYnVm Zik7CisgICAgICB3cml0ZV9yZWdpc3Rlcl9ieXRlcyAoUkVHSVNURVJfQllU RSAoUzM5MF9GUDBfUkVHTlVNKSwgcmVnX2J1ZmYsCisJCQkgICAgUzM5MF9G UFJfU0laRSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdmFsdWUg PQorCXMzOTBfcHJvbW90ZV9pbnRlZ2VyX2FyZ3VtZW50ICh2YWx0eXBlLCB2 YWxidWYsIHJlZ19idWZmLCAmYXJnbGVuKTsKKyAgICAgIC8qIEV2ZXJ5dGhp bmcgZWxzZSBpcyByZXR1cm5lZCBpbiBHUFIyIGFuZCB1cC4gKi8KKyAgICAg IHdyaXRlX3JlZ2lzdGVyX2J5dGVzIChSRUdJU1RFUl9CWVRFIChTMzkwX0dQ MF9SRUdOVU0gKyAyKSwgdmFsdWUsCisJCQkgICAgYXJnbGVuKTsKKyAgICB9 Cit9CitzdGF0aWMgaW50CitnZGJfcHJpbnRfaW5zbl9zMzkwIChiZmRfdm1h IG1lbWFkZHIsIGRpc2Fzc2VtYmxlX2luZm8gKiBpbmZvKQoreworICBiZmRf Ynl0ZSBpbnN0cmJ1ZmZbUzM5MF9NQVhfSU5TVFJfU0laRV07CisgIGludCBp bnN0cmxlbiwgY250OworCisgIGluc3RybGVuID0gczM5MF9yZWFkaW5zdHJ1 Y3Rpb24gKGluc3RyYnVmZiwgKENPUkVfQUREUikgbWVtYWRkciwgaW5mbyk7 CisgIGlmIChpbnN0cmxlbiA8IDApCisgICAgeworICAgICAgKCppbmZvLT5t ZW1vcnlfZXJyb3JfZnVuYykgKGluc3RybGVuLCBtZW1hZGRyLCBpbmZvKTsK KyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGZvciAoY250ID0gMDsgY250 IDwgaW5zdHJsZW47IGNudCsrKQorICAgIGluZm8tPmZwcmludGZfZnVuYyAo aW5mby0+c3RyZWFtLCAiJTAyWCAiLCBpbnN0cmJ1ZmZbY250XSk7CisgIGZv ciAoY250ID0gaW5zdHJsZW47IGNudCA8IFMzOTBfTUFYX0lOU1RSX1NJWkU7 IGNudCsrKQorICAgIGluZm8tPmZwcmludGZfZnVuYyAoaW5mby0+c3RyZWFt LCAiICAgIik7CisgIGluc3RybGVuID0gcHJpbnRfaW5zbl9zMzkwIChtZW1h ZGRyLCBpbmZvKTsKKyAgcmV0dXJuIGluc3RybGVuOworfQorCisKKworLyog Tm90IHRoZSBtb3N0IGVmZmljZW50IGNvZGUgaW4gdGhlIHdvcmxkICovCitp bnQKK3MzOTBfZnBfcmVnbnVtICgpCit7CisgIGludCByZWdubyA9IFMzOTBf U1BfUkVHTlVNOworICBzdHJ1Y3QgZnJhbWVfZXh0cmFfaW5mbyBmZXh0cmFf aW5mbzsKKworICBDT1JFX0FERFIgcGMgPSBBRERSX0JJVFNfUkVNT1ZFIChy ZWFkX3JlZ2lzdGVyIChTMzkwX1BDX1JFR05VTSkpOworCisgIHMzOTBfZ2V0 X2ZyYW1lX2luZm8gKHMzOTBfc25pZmZfcGNfZnVuY3Rpb25fc3RhcnQgKHBj LCBOVUxMKSwgJmZleHRyYV9pbmZvLAorCQkgICAgICAgTlVMTCwgMSk7Cisg IGlmIChmZXh0cmFfaW5mby5mcmFtZV9wb2ludGVyX3NhdmVkX3BjKQorICAg IHJlZ25vID0gUzM5MF9GUkFNRV9SRUdOVU07CisgIHJldHVybiByZWdubzsK K30KKworQ09SRV9BRERSCitzMzkwX3JlYWRfZnAgKCkKK3sKKyAgcmV0dXJu IHJlYWRfcmVnaXN0ZXIgKHMzOTBfZnBfcmVnbnVtICgpKTsKK30KKworCit2 b2lkCitzMzkwX3dyaXRlX2ZwIChDT1JFX0FERFIgdmFsKQoreworICB3cml0 ZV9yZWdpc3RlciAoczM5MF9mcF9yZWdudW0gKCksIHZhbCk7Cit9CisKKwor dm9pZAorczM5MF9wdXNoX2R1bW15X2ZyYW1lICgpCit7CisgIENPUkVfQURE UiBvcmlnX3NwID0gcmVhZF9yZWdpc3RlciAoUzM5MF9TUF9SRUdOVU0pLCBu ZXdfc3A7CisgIHZvaWQgKnNhdmVkX3JlZ3MgPSBhbGxvY2EgKFJFR0lTVEVS X0JZVEVTKTsKKworICBuZXdfc3AgPSAob3JpZ19zcCAtIChSRUdJU1RFUl9C WVRFUyArIFMzOTBfR1BSX1NJWkUpKTsKKyAgcmVhZF9yZWdpc3Rlcl9ieXRl cyAoMCwgKGNoYXIgKikgc2F2ZWRfcmVncywgUkVHSVNURVJfQllURVMpOwor ICAvKiBVc2Ugc2F2ZWQgY29weSBpbnN0ZWFkIG9mIG9yaWdfc3AgYXMgdGhp cyB3aWxsIGhhdmUgdGhlIGNvcnJlY3QgZW5kaWFubmVzcyAqLworICB3cml0 ZV9tZW1vcnkgKG5ld19zcCwgKGNoYXIgKikgc2F2ZWRfcmVncyArIFJFR0lT VEVSX0JZVEUgKFMzOTBfU1BfUkVHTlVNKSwKKwkJUzM5MF9HUFJfU0laRSk7 CisgIHdyaXRlX21lbW9yeSAobmV3X3NwICsgUzM5MF9HUFJfU0laRSwgKGNo YXIgKikgJnNhdmVkX3JlZ3MsIFJFR0lTVEVSX0JZVEVTKTsKKyAgd3JpdGVf cmVnaXN0ZXIgKFMzOTBfU1BfUkVHTlVNLCBuZXdfc3ApOworfQorCisvKiBw b3AgdGhlIGlubmVybW9zdCBmcmFtZSwgZ28gYmFjayB0byB0aGUgY2FsbGVy LgorICAgIFVzZWQgaW4gYGNhbGxfZnVuY3Rpb25fYnlfaGFuZCcgdG8gcmVt b3ZlIGFuIGFydGlmaWNpYWwgc3RhY2sKKyAgICAgZnJhbWUuICAqLwordm9p ZAorczM5MF9wb3BfZnJhbWUgKCkKK3sKKyAgQ09SRV9BRERSIG5ld19zcCA9 IHJlYWRfcmVnaXN0ZXIgKFMzOTBfU1BfUkVHTlVNKSwgb3JpZ19zcDsKKyAg dm9pZCAqc2F2ZWRfcmVncyA9IGFsbG9jYSAoUkVHSVNURVJfQllURVMpOwor CisKKyAgcmVhZF9tZW1vcnkgKG5ld19zcCArIFMzOTBfR1BSX1NJWkUsIChj aGFyICopIHNhdmVkX3JlZ3MsIFJFR0lTVEVSX0JZVEVTKTsKKyAgd3JpdGVf cmVnaXN0ZXJfYnl0ZXMgKDAsIChjaGFyICopICZzYXZlZF9yZWdzLCBSRUdJ U1RFUl9CWVRFUyk7Cit9CisKKy8qIHVzZWQgYnkgY2FsbCBmdW5jdGlvbiBi eSBoYW5kCisgIHN0cnVjdF9yZXR1cm4gaW5kaWNhdGVzIHRoYXQgdGhpcyBm dW5jdGlvbiByZXR1cm5zIGEgc3RydWN0dXJlICYKKyAgdGhlcmVmb3JlIGdw cjIgc3RvcmVzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHRvIGJlIHJl dHVybmVkIGFzCisgIG9wcG9zZWQgdG8gdGhlIGZpcnN0IGFyZ3VtZW50Lgor ICBDdXJyZW50bHkgSSBoYXZlbid0IHNlZW4gYSBUWVBFX0NPREVfSU5UIHdo b3NlIHNpemUgd2Fzbid0IDJebiBvciBsZXNzCisgIHRoYW4gUzM5MF9HUFJf U0laRSB0aGlzIGlzIGdvb2QgYmVjYXVzZSBJIGRvbid0IHNlZW0gdG8gaGF2 ZSB0byB3b3JyeQorICBhYm91dCBzaWduIGV4dGVuZGluZyBwdXNoZWQgYXJn dW1lbnRzIChpLmUuIGEgc2lnbmVkIGNoYXIgY3VycmVudGx5CisgIGNvbWVz IGludG8gdGhpcyBjb2RlIHdpdGggYSBzaXplIG9mIDQgKS4gKi8KKworQ09S RV9BRERSCitzMzkwX3B1c2hfYXJndW1lbnRzIChpbnQgbmFyZ3MsIHZhbHVl X3B0ciAqYXJncywgQ09SRV9BRERSIHNwLAorCQkgICAgIGludCBzdHJ1Y3Rf cmV0dXJuLCBDT1JFX0FERFIgc3RydWN0X2FkZHIpCit7CisgIGludCBudW1f ZmxvYXRfYXJncywgbnVtX2dwcl9hcmdzLCBvcmlnX251bV9ncHJfYXJncywg YXJnbm87CisgIGludCBzZWNvbmRfcGFzcywgbGVuLCBhcmdsZW4sIGdwcnNf cmVxdWlyZWQ7CisgIENPUkVfQUREUiBvdXRnb2luZ19hcmdzX3B0ciwgb3V0 Z29pbmdfYXJnc19zcGFjZTsKKyAgdmFsdWVfcHRyIGFyZzsKKyAgc3RydWN0 IHR5cGUgKnR5cGU7CisgIGludCBtYXhfbnVtX2dwcl9hcmdzID0gNSAtIChz dHJ1Y3RfcmV0dXJuID8gMSA6IDApOworICBpbnQgYXJnMF9yZWdudW0gPSBT MzkwX0dQMF9SRUdOVU0gKyAyICsgKHN0cnVjdF9yZXR1cm4gPyAxIDogMCk7 CisgIGNoYXIgKnJlZ19idWZmID0gYWxsb2NhIChtYXggKFMzOTBfRlBSX1NJ WkUsIFJFR0lTVEVSX1NJWkUpKSwgKnZhbHVlOworCisgIGZvciAoc2Vjb25k X3Bhc3MgPSAwOyBzZWNvbmRfcGFzcyA8PSAxOyBzZWNvbmRfcGFzcysrKQor ICAgIHsKKyAgICAgIGlmIChzZWNvbmRfcGFzcykKKwlvdXRnb2luZ19hcmdz X3B0ciA9IHNwICsgUzM5MF9TVEFDS19GUkFNRV9PVkVSSEVBRDsKKyAgICAg IGVsc2UKKwlvdXRnb2luZ19hcmdzX3B0ciA9IDA7CisgICAgICBudW1fZmxv YXRfYXJncyA9IDA7CisgICAgICBudW1fZ3ByX2FyZ3MgPSAwOworICAgICAg Zm9yIChhcmdubyA9IDA7IGFyZ25vIDwgbmFyZ3M7IGFyZ25vKyspCisJewor CSAgYXJnID0gYXJnc1thcmdub107CisJICB0eXBlID0gY2hlY2tfdHlwZWRl ZiAoVkFMVUVfVFlQRSAoYXJnKSk7CisJICBsZW4gPSBUWVBFX0xFTkdUSCAo dHlwZSk7CisJICBpZiAoVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NPREVf RkxUKQorCSAgICB7CisJICAgICAgaW50IGFsbF9mbG9hdF9yZWdpc3RlcnNf dXNlZCA9CisJCW51bV9mbG9hdF9hcmdzID4gKEdEQl9UQVJHRVRfSVNfRVNB TUUgPyAzIDogMSk7CisKKwkgICAgICBpZiAoc2Vjb25kX3Bhc3MpCisJCXsK KwkJICBET1VCTEVTVCB0ZW1wZmxvYXQgPQorCQkgICAgZXh0cmFjdF9mbG9h dGluZyAoVkFMVUVfQ09OVEVOVFMgKGFyZyksIGxlbik7CisKKworCQkgIGZs b2F0Zm9ybWF0X2Zyb21fZG91Ymxlc3QgKGFsbF9mbG9hdF9yZWdpc3RlcnNf dXNlZCAmJgorCQkJCQkgICAgIGxlbiA9PSAoVEFSR0VUX0ZMT0FUX0JJVCA+ PiAzKQorCQkJCQkgICAgID8gJmZsb2F0Zm9ybWF0X2llZWVfc2luZ2xlX2Jp ZworCQkJCQkgICAgIDogJmZsb2F0Zm9ybWF0X2llZWVfZG91YmxlX2JpZywK KwkJCQkJICAgICAmdGVtcGZsb2F0LCByZWdfYnVmZik7CisJCSAgaWYgKGFs bF9mbG9hdF9yZWdpc3RlcnNfdXNlZCkKKwkJICAgIHdyaXRlX21lbW9yeSAo b3V0Z29pbmdfYXJnc19wdHIsIHJlZ19idWZmLCBsZW4pOworCQkgIGVsc2UK KwkJICAgIHdyaXRlX3JlZ2lzdGVyX2J5dGVzIChSRUdJU1RFUl9CWVRFICgo UzM5MF9GUDBfUkVHTlVNKQorCQkJCQkJCSArCisJCQkJCQkJICgyICoKKwkJ CQkJCQkgIG51bV9mbG9hdF9hcmdzKSksCisJCQkJCSAgcmVnX2J1ZmYsIFMz OTBfRlBSX1NJWkUpOworCQl9CisJICAgICAgaWYgKGFsbF9mbG9hdF9yZWdp c3RlcnNfdXNlZCkKKwkJb3V0Z29pbmdfYXJnc19wdHIgKz0gbGVuOworCSAg ICAgIG51bV9mbG9hdF9hcmdzKys7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg eworCSAgICAgIGdwcnNfcmVxdWlyZWQgPSAoKGxlbiArIChTMzkwX0dQUl9T SVpFIC0gMSkpIC8gUzM5MF9HUFJfU0laRSk7CisKKwkgICAgICB2YWx1ZSA9 CisJCXMzOTBfcHJvbW90ZV9pbnRlZ2VyX2FyZ3VtZW50ICh0eXBlLCBWQUxV RV9DT05URU5UUyAoYXJnKSwKKwkJCQkJICAgICAgIHJlZ19idWZmLCAmYXJn bGVuKTsKKworCSAgICAgIG9yaWdfbnVtX2dwcl9hcmdzID0gbnVtX2dwcl9h cmdzOworCSAgICAgIG51bV9ncHJfYXJncyArPSBncHJzX3JlcXVpcmVkOwor CSAgICAgIGlmIChudW1fZ3ByX2FyZ3MgPiBtYXhfbnVtX2dwcl9hcmdzKQor CQl7CisJCSAgaWYgKHNlY29uZF9wYXNzKQorCQkgICAgd3JpdGVfbWVtb3J5 IChvdXRnb2luZ19hcmdzX3B0ciwgdmFsdWUsIGFyZ2xlbik7CisJCSAgb3V0 Z29pbmdfYXJnc19wdHIgKz0gYXJnbGVuOworCQl9CisJICAgICAgZWxzZQor CQl7CisJCSAgaWYgKHNlY29uZF9wYXNzKQorCQkgICAgd3JpdGVfcmVnaXN0 ZXJfYnl0ZXMgKFJFR0lTVEVSX0JZVEUgKGFyZzBfcmVnbnVtKQorCQkJCQkg ICsKKwkJCQkJICAob3JpZ19udW1fZ3ByX2FyZ3MgKiBTMzkwX0dQUl9TSVpF KSwKKwkJCQkJICB2YWx1ZSwgYXJnbGVuKTsKKwkJfQorCSAgICB9CisJfQor ICAgICAgaWYgKCFzZWNvbmRfcGFzcykKKwl7CisJICBvdXRnb2luZ19hcmdz X3NwYWNlID0gb3V0Z29pbmdfYXJnc19wdHI7CisJICAvKiBBbGlnbiB0byAx NiBieXRlcyBiZWNhdXNlIGJlY2F1c2UgSSBsaWtlIGFsaWdubWVudCAmIAor CSAgICAgc29tZSBvZiB0aGUga2VybmVsIGNvZGUgcmVxdWlyZXMgOCBieXRl IHN0YWNrIGFsaWdubWVudCBhdCBsZWFzdC4gKi8KKwkgIHNwID0gKHNwIC0g KFMzOTBfU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBvdXRnb2luZ19hcmdzX3B0 cikpICYgKC0xNik7CisJfQorCisgICAgfQorICByZXR1cm4gc3A7CisKK30K Kwordm9pZAorczM5MF9maXhfY2FsbF9kdW1teSAoY2hhciAqZHVtbXksIENP UkVfQUREUiBwYywgQ09SRV9BRERSIGZ1biwgaW50IG5hcmdzLAorCQkgICAg IHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIHN0cnVjdCB0eXBlICp2YWx1ZV90eXBl LAorCQkgICAgIGludCB1c2luZ19nY2MpCit7CisgIHN0b3JlX3Vuc2lnbmVk X2ludGVnZXIgKGR1bW15ICsgNCwgUkVHSVNURVJfU0laRSwgZnVuKTsKK30K KworCisvKiBSZXR1cm4gdGhlIEdEQiB0eXBlIG9iamVjdCBmb3IgdGhlICJz dGFuZGFyZCIgZGF0YSB0eXBlCisgICBvZiBkYXRhIGluIHJlZ2lzdGVyIE4u ICAqLworc3RydWN0IHR5cGUgKgorczM5MF9yZWdpc3Rlcl92aXJ0dWFsX3R5 cGUgKGludCByZWdubykKK3sKKyAgcmV0dXJuICgodW5zaWduZWQpIHJlZ25v IC0gUzM5MF9GUENfUkVHTlVNKSA8CisgICAgUzM5MF9OVU1fRlBSUyA/IGJ1 aWx0aW5fdHlwZV9kb3VibGUgOiBidWlsdGluX3R5cGVfaW50OworfQorCisK K3N0cnVjdCB0eXBlICoKK3MzOTB4X3JlZ2lzdGVyX3ZpcnR1YWxfdHlwZSAo aW50IHJlZ25vKQoreworICByZXR1cm4gKHJlZ25vID09IFMzOTBfRlBDX1JF R05VTSkgfHwKKyAgICAocmVnbm8gPj0gUzM5MF9GSVJTVF9BQ1IgJiYgcmVn bm8gPD0gUzM5MF9MQVNUX0FDUikgPyBidWlsdGluX3R5cGVfaW50IDoKKyAg ICAocmVnbm8gPj0gUzM5MF9GUDBfUkVHTlVNKSA/IGJ1aWx0aW5fdHlwZV9k b3VibGUgOiBidWlsdGluX3R5cGVfbG9uZzsKK30KKworCisKK3ZvaWQKK3Mz OTBfc3RvcmVfc3RydWN0X3JldHVybiAoQ09SRV9BRERSIGFkZHIsIENPUkVf QUREUiBzcCkKK3sKKyAgd3JpdGVfcmVnaXN0ZXIgKFMzOTBfR1AwX1JFR05V TSArIDIsIGFkZHIpOworfQorCisKKworc3RhdGljIHVuc2lnbmVkIGNoYXIg KgorczM5MF9icmVha3BvaW50X2Zyb21fcGMgKENPUkVfQUREUiAqcGNwdHIs IGludCAqbGVucHRyKQoreworICBzdGF0aWMgdW5zaWduZWQgY2hhciBicmVh a3BvaW50W10gPSB7IDB4MCwgMHgxIH07CisKKyAgKmxlbnB0ciA9IHNpemVv ZiAoYnJlYWtwb2ludCk7CisgIHJldHVybiBicmVha3BvaW50OworfQorCisv KiBBZHZhbmNlIFBDIGFjcm9zcyBhbnkgZnVuY3Rpb24gZW50cnkgcHJvbG9n dWUgaW5zdHJ1Y3Rpb25zIHRvIHJlYWNoIHNvbWUKKyAgICJyZWFsIiBjb2Rl LiAgKi8KK0NPUkVfQUREUgorczM5MF9za2lwX3Byb2xvZ3VlIChDT1JFX0FE RFIgcGMpCit7CisgIHN0cnVjdCBmcmFtZV9leHRyYV9pbmZvIGZleHRyYV9p bmZvOworCisgIHMzOTBfZ2V0X2ZyYW1lX2luZm8gKHBjLCAmZmV4dHJhX2lu Zm8sIE5VTEwsIDEpOworICByZXR1cm4gZmV4dHJhX2luZm8uc2tpcF9wcm9s b2d1ZV9mdW5jdGlvbl9zdGFydDsKK30KKworLyogcGNfaW5fY2FsbF9kdW1t eV9vbiBzdGFjayBtYXkgd29yayBmb3IgdXMgbXVzdCB0ZXN0IHRoaXMgKi8K K2ludAorczM5MF9wY19pbl9jYWxsX2R1bW15IChDT1JFX0FERFIgcGMsIENP UkVfQUREUiBzcCwgQ09SRV9BRERSIGZyYW1lX2FkZHJlc3MpCit7CisgIHJl dHVybiBwYyA+IHNwICYmIHBjIDwgKHNwICsgNDA5Nik7Cit9CisKKy8qIElt bWVkaWF0ZWx5IGFmdGVyIGEgZnVuY3Rpb24gY2FsbCwgcmV0dXJuIHRoZSBz YXZlZCBwYy4KKyAgIENhbid0IGdvIHRocm91Z2ggdGhlIGZyYW1lcyBmb3Ig dGhpcyBiZWNhdXNlIG9uIHNvbWUgbWFjaGluZXMKKyAgIHRoZSBuZXcgZnJh bWUgaXMgbm90IHNldCB1cCB1bnRpbCB0aGUgbmV3IGZ1bmN0aW9uIGV4ZWN1 dGVzCisgICBzb21lIGluc3RydWN0aW9ucy4gICovCitDT1JFX0FERFIKK3Mz OTBfc2F2ZWRfcGNfYWZ0ZXJfY2FsbCAoc3RydWN0IGZyYW1lX2luZm8gKmZy YW1lKQoreworICByZXR1cm4gQUREUl9CSVRTX1JFTU9WRSAocmVhZF9yZWdp c3RlciAoUzM5MF9SRVRBRERSX1JFR05VTSkpOworfQorCitzdGF0aWMgQ09S RV9BRERSCitzMzkwX2FkZHJfYml0c19yZW1vdmUgKENPUkVfQUREUiBhZGRy KQoreworICByZXR1cm4gKGFkZHIpICYgMHg3ZmZmZmZmZjsKK30KKworCitz dGF0aWMgQ09SRV9BRERSCitzMzkwX3B1c2hfcmV0dXJuX2FkZHJlc3MgKENP UkVfQUREUiBwYywgQ09SRV9BRERSIHNwKQoreworICByZXR1cm4gc3A7Cit9 CisKK3N0cnVjdCBnZGJhcmNoICoKK3MzOTBfZ2RiYXJjaF9pbml0IChzdHJ1 Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFy Y2hlcykKK3sKKworICAvKiBpbnN0cnVjdGlvbiBzZXF1ZW5jZSBmb3IgczM5 MCBjYWxsIGR1bW15IGlzIGFzIGZvbGxvd3MKKyAgICAgYnJhcyAlcjEsLis4 ICAgICAgOyAweEE3MTUwMDA0ICAgCisgICAgIGxvbmcgYmFzcmFkZHIgICAg IDsgMHgwMDAwMDAwMAorICAgICBsICAgICVyMSwwKCVyMSkgICA7IDB4NTgx MDEwMDAKKyAgICAgYmFzciAlcjE0LCVyMSAgICAgOyAweDBERTEKKyAgICAg YnJlYWtwb2ludCAgICAgICAgOyAweDAwMDEgKi8KKyAgc3RhdGljIExPTkdF U1QgczM5MF9jYWxsX2R1bW15X3dvcmRzW10gPSB7IDB4QTcxNTAwMDQsIDB4 MDAwMDAwMDAsCisgICAgMHg1ODEwMTAwMCwgMHgwREUxMDAwMQorICB9Owor ICAvKiBpbnN0cnVjdGlvbiBzZXF1ZW5jZSBmb3IgZXNhbWUgY2FsbCBkdW1t eSBpcyBhcyBmb2xsb3dzCisgICAgIGJyYXMgJXIxLC4rMTIgICAgIDsgMHhB NzE1MDAwNiAgIAorICAgICBsb25nIGJhc3JhZGRyICAgICA7IDB4MDAwMDAw MDAwMDAwMDAwMAorICAgICBsZyAgICVyMSwwKCVyMSkgICA7IDB4RTMxMDEw MDAwMDA0CisgICAgIGJhc3IgJXIxNCwlcjEgICAgIDsgMHgwREUxCisgICAg IGJyZWFrcG9pbnQgICAgICAgIDsgMHgwMDAxICovCisgIHN0YXRpYyBMT05H RVNUIHMzOTB4X2NhbGxfZHVtbXlfd29yZHNbXSA9IHsgMHhBNzE1MDAwNjAw MDAwMDAwLAorICAgIDB4MDAwMDAwMDBFMzEwMTAwMCwKKyAgICAweDAwMDQw REUxMDAwMTAwMDAKKyAgfTsKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7 CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXA7CisgIGludCBlbGZfZmxh Z3M7CisKKyAgLyogRmlyc3Qgc2VlIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBn ZGJhcmNoIHRoYXQgY2FuIHNhdGlzZnkgdGhlIHJlcXVlc3QuICAqLworICBh cmNoZXMgPSBnZGJhcmNoX2xpc3RfbG9va3VwX2J5X2luZm8gKGFyY2hlcywg JmluZm8pOworICBpZiAoYXJjaGVzICE9IE5VTEwpCisgICAgcmV0dXJuIGFy Y2hlcy0+Z2RiYXJjaDsKKworICAvKiBOb25lIGZvdW5kOiBpcyB0aGUgcmVx dWVzdCBmb3IgYSBzMzkwIGFyY2hpdGVjdHVyZT8gKi8KKyAgaWYgKGluZm8u YmZkX2FyY2hfaW5mby0+YXJjaCAhPSBiZmRfYXJjaF9zMzkwKQorICAgIHJl dHVybiBOVUxMOwkJLyogTm87IHRoZW4gaXQncyBub3QgZm9yIHVzLiAgKi8K KworICAvKiBZZXM6IGNyZWF0ZSBhIG5ldyBnZGJhcmNoIGZvciB0aGUgc3Bl Y2lmaWVkIG1hY2hpbmUgdHlwZS4gICovCisgIGdkYmFyY2ggPSBnZGJhcmNo X2FsbG9jICgmaW5mbywgTlVMTCk7CisKKyAgc2V0X2dkYmFyY2hfYmVsaWV2 ZV9wY2NfcHJvbW90aW9uIChnZGJhcmNoLCAwKTsKKworICAvKiBXZSBkb24n dCBkZWZpbmUgc2V0X2dkYmFyY2hfY2FsbF9kdW1teV9icmVha3BvaW50X29m ZnNldCAKKyAgICAgYXMgd2UgYWxyZWFkeSBoYXZlIGEgYnJlYWtwb2ludCBp bnNlcnRlZC4gKi8KKyAgc2V0X2dkYmFyY2hfdXNlX2dlbmVyaWNfZHVtbXlf ZnJhbWVzIChnZGJhcmNoLCAwKTsKKworICBzZXRfZ2RiYXJjaF9jYWxsX2R1 bW15X2xvY2F0aW9uIChnZGJhcmNoLCBPTl9TVEFDSyk7CisgIHNldF9nZGJh cmNoX2NhbGxfZHVtbXlfc3RhcnRfb2Zmc2V0IChnZGJhcmNoLCAwKTsKKyAg c2V0X2dkYmFyY2hfcGNfaW5fY2FsbF9kdW1teSAoZ2RiYXJjaCwgczM5MF9w Y19pbl9jYWxsX2R1bW15KTsKKyAgc2V0X2dkYmFyY2hfZnJhbWVfYXJnc19z a2lwIChnZGJhcmNoLCAwKTsKKyAgc2V0X2dkYmFyY2hfZnJhbWVfYXJnc19h ZGRyZXNzIChnZGJhcmNoLCBzMzkwX2ZyYW1lX2FyZ3NfYWRkcmVzcyk7Cisg IHNldF9nZGJhcmNoX2ZyYW1lX2NoYWluIChnZGJhcmNoLCBzMzkwX2ZyYW1l X2NoYWluKTsKKyAgc2V0X2dkYmFyY2hfZnJhbWVfaW5pdF9zYXZlZF9yZWdz IChnZGJhcmNoLCBzMzkwX2ZyYW1lX2luaXRfc2F2ZWRfcmVncyk7CisgIHNl dF9nZGJhcmNoX2ZyYW1lX2xvY2Fsc19hZGRyZXNzIChnZGJhcmNoLCBzMzkw X2ZyYW1lX2FyZ3NfYWRkcmVzcyk7CisgIC8qIFdlIGNhbid0IGRvIHRoaXMg Ki8KKyAgc2V0X2dkYmFyY2hfZnJhbWVfbnVtX2FyZ3MgKGdkYmFyY2gsIGZy YW1lX251bV9hcmdzX3Vua25vd24pOworICBzZXRfZ2RiYXJjaF9zdG9yZV9z dHJ1Y3RfcmV0dXJuIChnZGJhcmNoLCBzMzkwX3N0b3JlX3N0cnVjdF9yZXR1 cm4pOworICBzZXRfZ2RiYXJjaF9leHRyYWN0X3JldHVybl92YWx1ZSAoZ2Ri YXJjaCwgczM5MF9leHRyYWN0X3JldHVybl92YWx1ZSk7CisgIHNldF9nZGJh cmNoX3N0b3JlX3JldHVybl92YWx1ZSAoZ2RiYXJjaCwgczM5MF9zdG9yZV9y ZXR1cm5fdmFsdWUpOworICAvKiBBbW91bnQgUEMgbXVzdCBiZSBkZWNyZW1l bnRlZCBieSBhZnRlciBhIGJyZWFrcG9pbnQuCisgICAgIFRoaXMgaXMgb2Z0 ZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiBCUkVBS1BPSU5UCisgICAgIGJ1 dCBub3QgYWx3YXlzLiAgKi8KKyAgc2V0X2dkYmFyY2hfZGVjcl9wY19hZnRl cl9icmVhayAoZ2RiYXJjaCwgMik7CisgIHNldF9nZGJhcmNoX3BvcF9mcmFt ZSAoZ2RiYXJjaCwgczM5MF9wb3BfZnJhbWUpOworICBzZXRfZ2RiYXJjaF9w dXNoX2R1bW15X2ZyYW1lIChnZGJhcmNoLCBzMzkwX3B1c2hfZHVtbXlfZnJh bWUpOworICBzZXRfZ2RiYXJjaF9wdXNoX2FyZ3VtZW50cyAoZ2RiYXJjaCwg czM5MF9wdXNoX2FyZ3VtZW50cyk7CisgIHNldF9nZGJhcmNoX2llZWVfZmxv YXQgKGdkYmFyY2gsIDEpOworICAvKiBTdGFjayBncm93cyBkb3dud2FyZC4g ICovCisgIHNldF9nZGJhcmNoX2lubmVyX3RoYW4gKGdkYmFyY2gsIGNvcmVf YWRkcl9sZXNzdGhhbik7CisgIC8qIE9mZnNldCBmcm9tIGFkZHJlc3Mgb2Yg ZnVuY3Rpb24gdG8gc3RhcnQgb2YgaXRzIGNvZGUuCisgICAgIFplcm8gb24g bW9zdCBtYWNoaW5lcy4gICovCisgIHNldF9nZGJhcmNoX2Z1bmN0aW9uX3N0 YXJ0X29mZnNldCAoZ2RiYXJjaCwgMCk7CisgIHNldF9nZGJhcmNoX21heF9y ZWdpc3Rlcl9yYXdfc2l6ZSAoZ2RiYXJjaCwgOCk7CisgIHNldF9nZGJhcmNo X21heF9yZWdpc3Rlcl92aXJ0dWFsX3NpemUgKGdkYmFyY2gsIDgpOworICBz ZXRfZ2RiYXJjaF9icmVha3BvaW50X2Zyb21fcGMgKGdkYmFyY2gsIHMzOTBf YnJlYWtwb2ludF9mcm9tX3BjKTsKKyAgc2V0X2dkYmFyY2hfc2tpcF9wcm9s b2d1ZSAoZ2RiYXJjaCwgczM5MF9za2lwX3Byb2xvZ3VlKTsKKyAgc2V0X2dk YmFyY2hfaW5pdF9leHRyYV9mcmFtZV9pbmZvIChnZGJhcmNoLCBzMzkwX2lu aXRfZXh0cmFfZnJhbWVfaW5mbyk7CisgIHNldF9nZGJhcmNoX2luaXRfZnJh bWVfcGNfZmlyc3QgKGdkYmFyY2gsIHMzOTBfaW5pdF9mcmFtZV9wY19maXJz dCk7CisgIHNldF9nZGJhcmNoX3JlYWRfZnAgKGdkYmFyY2gsIHMzOTBfcmVh ZF9mcCk7CisgIHNldF9nZGJhcmNoX3dyaXRlX2ZwIChnZGJhcmNoLCBzMzkw X3dyaXRlX2ZwKTsKKyAgLyogVGhpcyBmdW5jdGlvbiB0aGF0IHRlbGxzIHVz IHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGludm9jYXRpb24gcmVwcmVzZW50ZWQK KyAgICAgYnkgRkkgZG9lcyBub3QgaGF2ZSBhIGZyYW1lIG9uIHRoZSBzdGFj ayBhc3NvY2lhdGVkIHdpdGggaXQuICBJZiBpdAorICAgICBkb2VzIG5vdCwg RlJBTUVMRVNTIGlzIHNldCB0byAxLCBlbHNlIDAuICAqLworICBzZXRfZ2Ri YXJjaF9mcmFtZWxlc3NfZnVuY3Rpb25faW52b2NhdGlvbiAoZ2RiYXJjaCwK KwkJCQkJICAgICBzMzkwX2ZyYW1lbGVzc19mdW5jdGlvbl9pbnZvY2F0aW9u KTsKKyAgLyogUmV0dXJuIHNhdmVkIFBDIGZyb20gYSBmcmFtZSAqLworICBz ZXRfZ2RiYXJjaF9mcmFtZV9zYXZlZF9wYyAoZ2RiYXJjaCwgczM5MF9mcmFt ZV9zYXZlZF9wYyk7CisgIC8qIEZSQU1FX0NIQUlOIHRha2VzIGEgZnJhbWUn cyBub21pbmFsIGFkZHJlc3MKKyAgICAgYW5kIHByb2R1Y2VzIHRoZSBmcmFt ZSdzIGNoYWluLXBvaW50ZXIuICovCisgIHNldF9nZGJhcmNoX2ZyYW1lX2No YWluIChnZGJhcmNoLCBzMzkwX2ZyYW1lX2NoYWluKTsKKyAgc2V0X2dkYmFy Y2hfc2F2ZWRfcGNfYWZ0ZXJfY2FsbCAoZ2RiYXJjaCwgczM5MF9zYXZlZF9w Y19hZnRlcl9jYWxsKTsKKyAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfYnl0ZSAo Z2RiYXJjaCwgczM5MF9yZWdpc3Rlcl9ieXRlKTsKKyAgc2V0X2dkYmFyY2hf cGNfcmVnbnVtIChnZGJhcmNoLCBTMzkwX1BDX1JFR05VTSk7CisgIHNldF9n ZGJhcmNoX3NwX3JlZ251bSAoZ2RiYXJjaCwgUzM5MF9TUF9SRUdOVU0pOwor ICBzZXRfZ2RiYXJjaF9mcF9yZWdudW0gKGdkYmFyY2gsIFMzOTBfRlBfUkVH TlVNKTsKKyAgc2V0X2dkYmFyY2hfZnAwX3JlZ251bSAoZ2RiYXJjaCwgUzM5 MF9GUDBfUkVHTlVNKTsKKyAgc2V0X2dkYmFyY2hfbnVtX3JlZ3MgKGdkYmFy Y2gsIFMzOTBfTlVNX1JFR1MpOworICBzZXRfZ2RiYXJjaF9jYW5ub3RfZmV0 Y2hfcmVnaXN0ZXIgKGdkYmFyY2gsIHMzOTBfY2Fubm90X2ZldGNoX3JlZ2lz dGVyKTsKKyAgc2V0X2dkYmFyY2hfY2Fubm90X3N0b3JlX3JlZ2lzdGVyIChn ZGJhcmNoLCBzMzkwX2Nhbm5vdF9mZXRjaF9yZWdpc3Rlcik7CisgIHNldF9n ZGJhcmNoX2dldF9zYXZlZF9yZWdpc3RlciAoZ2RiYXJjaCwgZ2VuZXJpY19n ZXRfc2F2ZWRfcmVnaXN0ZXIpOworICBzZXRfZ2RiYXJjaF91c2Vfc3RydWN0 X2NvbnZlbnRpb24gKGdkYmFyY2gsIGdlbmVyaWNfdXNlX3N0cnVjdF9jb252 ZW50aW9uKTsKKyAgc2V0X2dkYmFyY2hfZnJhbWVfY2hhaW5fdmFsaWQgKGdk YmFyY2gsIGZpbGVfZnJhbWVfY2hhaW5fdmFsaWQpOworICBzZXRfZ2RiYXJj aF9yZWdpc3Rlcl9uYW1lIChnZGJhcmNoLCBzMzkwX3JlZ2lzdGVyX25hbWUp OworICBzZXRfZ2RiYXJjaF9zdGFiX3JlZ190b19yZWdudW0gKGdkYmFyY2gs IHMzOTBfc3RhYl9yZWdfdG9fcmVnbnVtKTsKKyAgc2V0X2dkYmFyY2hfZHdh cmZfcmVnX3RvX3JlZ251bSAoZ2RiYXJjaCwgczM5MF9zdGFiX3JlZ190b19y ZWdudW0pOworICBzZXRfZ2RiYXJjaF9kd2FyZjJfcmVnX3RvX3JlZ251bSAo Z2RiYXJjaCwgczM5MF9zdGFiX3JlZ190b19yZWdudW0pOworICBzZXRfZ2Ri YXJjaF9za2lwX3RyYW1wb2xpbmVfY29kZSAoZ2RiYXJjaCwgZmluZF9zb2xp Yl90cmFtcG9saW5lX3RhcmdldCk7CisKKyAgLyogU3R1ZmYgYmVsb3cgaGVy ZSB3b3VsZG4ndCBiZSByZXF1aXJlZCBpZiBnZGJhcmNoLnNoIHdhcyBhIGxp dHRsZSAqLworICAvKiBtb3JlIGludGVsbGlnZW50ICovCisgIHNldF9nZGJh cmNoX2NhbGxfZHVtbXlfYnJlYWtwb2ludF9vZmZzZXRfcCAoZ2RiYXJjaCwg MCk7CisgIHNldF9nZGJhcmNoX2NhbGxfZHVtbXlfcCAoZ2RiYXJjaCwgMSk7 CisgIHNldF9nZGJhcmNoX2NhbGxfZHVtbXlfc3RhY2tfYWRqdXN0X3AgKGdk YmFyY2gsIDApOworICBzZXRfZ2RiYXJjaF9leHRyYWN0X3N0cnVjdF92YWx1 ZV9hZGRyZXNzIChnZGJhcmNoLCAwKTsKKyAgc2V0X2dkYmFyY2hfZml4X2Nh bGxfZHVtbXkgKGdkYmFyY2gsIHMzOTBfZml4X2NhbGxfZHVtbXkpOworI2lm ZGVmIEdEQl9OTV9GSUxFCisgIHNldF9nZGJhcmNoX3ByZXBhcmVfdG9fcHJv Y2VlZCAoZ2RiYXJjaCwgbGludXh0aHJlYWRzX3ByZXBhcmVfdG9fcHJvY2Vl ZCk7CisjZW5kaWYKKyAgc2V0X2dkYmFyY2hfcHVzaF9yZXR1cm5fYWRkcmVz cyAoZ2RiYXJjaCwgczM5MF9wdXNoX3JldHVybl9hZGRyZXNzKTsKKworICBz d2l0Y2ggKGluZm8uYmZkX2FyY2hfaW5mby0+bWFjaCkKKyAgICB7CisgICAg Y2FzZSBiZmRfbWFjaF9zMzkwX2VzYToKKyAgICAgIHNldF9nZGJhcmNoX3Jl Z2lzdGVyX3NpemUgKGdkYmFyY2gsIDQpOworICAgICAgc2V0X2dkYmFyY2hf Y2FsbF9kdW1teV9sZW5ndGggKGdkYmFyY2gsIDE2KTsKKyAgICAgIHNldF9n ZGJhcmNoX3JlZ2lzdGVyX3Jhd19zaXplIChnZGJhcmNoLCBzMzkwX3JlZ2lz dGVyX3Jhd19zaXplKTsKKyAgICAgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX3Zp cnR1YWxfc2l6ZSAoZ2RiYXJjaCwgczM5MF9yZWdpc3Rlcl9yYXdfc2l6ZSk7 CisgICAgICBzZXRfZ2RiYXJjaF9yZWdpc3Rlcl92aXJ0dWFsX3R5cGUgKGdk YmFyY2gsIHMzOTBfcmVnaXN0ZXJfdmlydHVhbF90eXBlKTsKKworICAgICAg c2V0X2dkYmFyY2hfYWRkcl9iaXRzX3JlbW92ZSAoZ2RiYXJjaCwgczM5MF9h ZGRyX2JpdHNfcmVtb3ZlKTsKKworICAgICAgc2V0X2dkYmFyY2hfc2l6ZW9m X2NhbGxfZHVtbXlfd29yZHMgKGdkYmFyY2gsCisJCQkJCSAgIHNpemVvZiAo czM5MF9jYWxsX2R1bW15X3dvcmRzKSk7CisgICAgICBzZXRfZ2RiYXJjaF9j YWxsX2R1bW15X3dvcmRzIChnZGJhcmNoLCBzMzkwX2NhbGxfZHVtbXlfd29y ZHMpOworICAgICAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfYnl0ZXMgKGdkYmFy Y2gsIFMzOTBfUkVHSVNURVJfQllURVMpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSBiZmRfbWFjaF9zMzkwX2VzYW1lOgorICAgICAgc2V0X2dkYmFyY2hf cmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgOCk7CisgICAgICBzZXRfZ2RiYXJj aF9jYWxsX2R1bW15X2xlbmd0aCAoZ2RiYXJjaCwgMjIpOworICAgICAgc2V0 X2dkYmFyY2hfcmVnaXN0ZXJfcmF3X3NpemUgKGdkYmFyY2gsIHMzOTB4X3Jl Z2lzdGVyX3Jhd19zaXplKTsKKyAgICAgIHNldF9nZGJhcmNoX3JlZ2lzdGVy X3ZpcnR1YWxfc2l6ZSAoZ2RiYXJjaCwgczM5MHhfcmVnaXN0ZXJfcmF3X3Np emUpOworICAgICAgc2V0X2dkYmFyY2hfcmVnaXN0ZXJfdmlydHVhbF90eXBl IChnZGJhcmNoLAorCQkJCQkgczM5MHhfcmVnaXN0ZXJfdmlydHVhbF90eXBl KTsKKworICAgICAgc2V0X2dkYmFyY2hfbG9uZ19iaXQgKGdkYmFyY2gsIDY0 KTsKKyAgICAgIHNldF9nZGJhcmNoX2xvbmdfbG9uZ19iaXQgKGdkYmFyY2gs IDY0KTsKKyAgICAgIHNldF9nZGJhcmNoX3B0cl9iaXQgKGdkYmFyY2gsIDY0 KTsKKyAgICAgIHNldF9nZGJhcmNoX3NpemVvZl9jYWxsX2R1bW15X3dvcmRz IChnZGJhcmNoLAorCQkJCQkgICBzaXplb2YgKHMzOTB4X2NhbGxfZHVtbXlf d29yZHMpKTsKKyAgICAgIHNldF9nZGJhcmNoX2NhbGxfZHVtbXlfd29yZHMg KGdkYmFyY2gsIHMzOTB4X2NhbGxfZHVtbXlfd29yZHMpOworICAgICAgc2V0 X2dkYmFyY2hfcmVnaXN0ZXJfYnl0ZXMgKGdkYmFyY2gsIFMzOTBYX1JFR0lT VEVSX0JZVEVTKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4g Z2RiYXJjaDsKK30KKworCisKK3ZvaWQKK19pbml0aWFsaXplX3MzOTBfdGRl cCAoKQoreworCisgIC8qIEhvb2sgdXMgaW50byB0aGUgZ2RiYXJjaCBtZWNo YW5pc20uICAqLworICByZWdpc3Rlcl9nZGJhcmNoX2luaXQgKGJmZF9hcmNo X3MzOTAsIHMzOTBfZ2RiYXJjaF9pbml0KTsKKyAgaWYgKCF0bV9wcmludF9p bnNuKQkJLyogU29tZW9uZSBtYXkgaGF2ZSBhbHJlYWR5IHNldCBpdCAqLwor ICAgIHRtX3ByaW50X2luc24gPSBnZGJfcHJpbnRfaW5zbl9zMzkwOworfQor CisjZW5kaWYgLyogR0RCU0VSVkVSICovCi0tLSBzcmMub3JpZy9nZGIvZ2Ri YXJjaC5zaAlXZWQgQXVnIDE1IDE3OjI5OjU2IDIwMDEKKysrIHNyYy5uZXcv Z2RiL2dkYmFyY2guc2gJV2VkIFNlcCAgNSAxODoyNToyMiAyMDAxCkBAIC00 NDAsNyArNDQwLDcgQEAKIHY6MjpDQUxMX0RVTU1ZX0xPQ0FUSU9OOmludDpj YWxsX2R1bW15X2xvY2F0aW9uOjo6OjA6MAogZjoyOkNBTExfRFVNTVlfQURE UkVTUzpDT1JFX0FERFI6Y2FsbF9kdW1teV9hZGRyZXNzOnZvaWQ6OjowOjA6 OmdkYmFyY2gtPmNhbGxfZHVtbXlfbG9jYXRpb24gPT0gQVRfRU5UUllfUE9J TlQgJiYgZ2RiYXJjaC0+Y2FsbF9kdW1teV9hZGRyZXNzID09IDAKIHY6MjpD QUxMX0RVTU1ZX1NUQVJUX09GRlNFVDpDT1JFX0FERFI6Y2FsbF9kdW1teV9z dGFydF9vZmZzZXQ6Ojo6MDotMTo6OjB4JTA4bHgKLXY6MjpDQUxMX0RVTU1Z X0JSRUFLUE9JTlRfT0ZGU0VUOkNPUkVfQUREUjpjYWxsX2R1bW15X2JyZWFr cG9pbnRfb2Zmc2V0Ojo6OjA6LTE6OjoweCUwOGx4OjpDQUxMX0RVTU1ZX0JS RUFLUE9JTlRfT0ZGU0VUX1AKK3Y6MjpDQUxMX0RVTU1ZX0JSRUFLUE9JTlRf T0ZGU0VUOkNPUkVfQUREUjpjYWxsX2R1bW15X2JyZWFrcG9pbnRfb2Zmc2V0 Ojo6OjA6LTE6OmdkYmFyY2gtPmNhbGxfZHVtbXlfYnJlYWtwb2ludF9vZmZz ZXRfcCAmJiBnZGJhcmNoLT5jYWxsX2R1bW15X2JyZWFrcG9pbnRfb2Zmc2V0 ID09IC0xOjB4JTA4bHg6OkNBTExfRFVNTVlfQlJFQUtQT0lOVF9PRkZTRVRf UAogdjoxOkNBTExfRFVNTVlfQlJFQUtQT0lOVF9PRkZTRVRfUDppbnQ6Y2Fs bF9kdW1teV9icmVha3BvaW50X29mZnNldF9wOjo6OjA6LTEKIHY6MjpDQUxM X0RVTU1ZX0xFTkdUSDppbnQ6Y2FsbF9kdW1teV9sZW5ndGg6Ojo6MDotMTo6 Ojo6Q0FMTF9EVU1NWV9MT0NBVElPTiA9PSBCRUZPUkVfVEVYVF9FTkQgfHwg Q0FMTF9EVU1NWV9MT0NBVElPTiA9PSBBRlRFUl9URVhUX0VORAogZjoyOlBD X0lOX0NBTExfRFVNTVk6aW50OnBjX2luX2NhbGxfZHVtbXk6Q09SRV9BRERS IHBjLCBDT1JFX0FERFIgc3AsIENPUkVfQUREUiBmcmFtZV9hZGRyZXNzOnBj LCBzcCwgZnJhbWVfYWRkcmVzczo6MDowCi0tLSBzcmMub3JpZy9nZGIvZGVm cy5oCVRodSBBdWcgIDIgMjI6NTc6MTkgMjAwMQorKysgc3JjLm5ldy9nZGIv ZGVmcy5oCUZyaSBTZXAgIDcgMjA6NDg6MDIgMjAwMQpAQCAtMSw0ICsxLDQg QEAKLS8qICpJTkRFTlQtT0ZGKiAqLyAvKiBBVFRSX0ZPUk1BVCBjb25mdXNl cyBpbmRlbnQsIGF2b2lkIHJ1bm5pbmcgaXQgZm9yIG5vdyAqLworLyogKklO REVOVC1PRkYqICovLyogQVRUUl9GT1JNQVQgY29uZnVzZXMgaW5kZW50LCBh dm9pZCBydW5uaW5nIGl0IGZvciBub3cgKi8KIC8qIEJhc2ljLCBob3N0LXNw ZWNpZmljLCBhbmQgdGFyZ2V0LXNwZWNpZmljIGRlZmluaXRpb25zIGZvciBH REIuCiAgICBDb3B5cmlnaHQgMTk4NiwgMTk4OCwgMTk4OSwgMTk5MCwgMTk5 MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwKICAgIDE5OTcsIDE5 OTgsIDE5OTksIDIwMDAsIDIwMDEKQEAgLTI1LDYgKzI1LDkgQEAKICNkZWZp bmUgREVGU19ICiAKICNpbmNsdWRlICJjb25maWcuaCIJCS8qIEdlbmVyYXRl ZCBieSBjb25maWd1cmUgKi8KKyNpZiBHREJTRVJWRVIKKyN1bmRlZiBHREJf TVVMVElfQVJDSAorI2VuZGlmIC8qIEdEQlNFUlZFUiAqLwogI2luY2x1ZGUg PHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4JCS8qIFN5c3RlbSBjYWxs IGVycm9yIHJldHVybiBzdGF0dXMgKi8KICNpbmNsdWRlIDxsaW1pdHMuaD4K LS0tIHNyYy5vcmlnL2dkYi9zaWduYWxzLmMJVGh1IEp1bCAxOSAyMDowOTox MSAyMDAxCisrKyBzcmMubmV3L2dkYi9zaWduYWxzLmMJRnJpIFNlcCAgNyAy MDo0ODowMiAyMDAxCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAidGFy Z2V0LmgiCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAKKyNpZm5kZWYgR0RCU0VS VkVSCiAvKiBUaGlzIHRhYmxlIG11c3QgbWF0Y2ggaW4gb3JkZXIgYW5kIHNp emUgdGhlIHNpZ25hbHMgaW4gZW51bSB0YXJnZXRfc2lnbmFsCiAgICBpbiB0 YXJnZXQuaC4gICovCiAvKiAqSU5ERU5ULU9GRiogKi8KQEAgLTIzMCwxMyAr MjMxLDEzIEBACiAKICAgLyogVGhpcyB1Z2x5IGNhc3QgYnJvdWdodCB0byB5 b3UgYnkgdGhlIG5hdGl2ZSBWQVggY29tcGlsZXIuICAqLwogICBmb3IgKHNp ZyA9IFRBUkdFVF9TSUdOQUxfSFVQOwotICAgICAgIHNpZ25hbHNbc2lnXS5u YW1lICE9IE5VTEw7Ci0gICAgICAgc2lnID0gKGVudW0gdGFyZ2V0X3NpZ25h bCkgKChpbnQpIHNpZyArIDEpKQorICAgICAgIHNpZ25hbHNbc2lnXS5uYW1l ICE9IE5VTEw7IHNpZyA9IChlbnVtIHRhcmdldF9zaWduYWwpICgoaW50KSBz aWcgKyAxKSkKICAgICBpZiAoU1RSRVEgKG5hbWUsIHNpZ25hbHNbc2lnXS5u YW1lKSkKICAgICAgIHJldHVybiBzaWc7CiAgIHJldHVybiBUQVJHRVRfU0lH TkFMX1VOS05PV047CiB9Ci0MCisjZW5kaWYgLyogR0RCU0VSVkVSICovCisK IC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB0byBoZWxwIGNlcnRh aW4gdGFyZ2V0cyBkZWFsCiAgICB3aXRoIHRoZSBzaWduYWwvd2FpdHN0YXR1 cyBzdHVmZi4gIFRoZXkgY291bGQganVzdCBhcyB3ZWxsIGJlIGluCiAgICBh IGZpbGUgY2FsbGVkIG5hdGl2ZS11dGlscy5jIG9yIHVuaXh3YWl0c3RhdHVz LXV0aWxzLmMgb3Igd2hhdGV2ZXIuICAqLwpAQCAtNDgwLDcgKzQ4MSw4IEBA CiAJcmV0dXJuIChlbnVtIHRhcmdldF9zaWduYWwpCiAJICAoaG9zdHNpZyAt IDY0ICsgKGludCkgVEFSR0VUX1NJR05BTF9SRUFMVElNRV82NCk7CiAgICAg ICBlbHNlCi0JZXJyb3IgKCJHREIgYnVnOiB0YXJnZXQuYyAodGFyZ2V0X3Np Z25hbF9mcm9tX2hvc3QpOiB1bnJlY29nbml6ZWQgcmVhbC10aW1lIHNpZ25h bCIpOworCWVycm9yCisJICAoIkdEQiBidWc6IHRhcmdldC5jICh0YXJnZXRf c2lnbmFsX2Zyb21faG9zdCk6IHVucmVjb2duaXplZCByZWFsLXRpbWUgc2ln bmFsIik7CiAgICAgfQogI2VuZGlmCiAKQEAgLTQ5NCw3ICs0OTYsOCBAQAog ICAgICAgZWxzZSBpZiAoaG9zdHNpZyA9PSA2NCkKIAlyZXR1cm4gVEFSR0VU X1NJR05BTF9SRUFMVElNRV82NDsKICAgICAgIGVsc2UKLQllcnJvciAoIkdE QiBidWc6IHRhcmdldC5jICh0YXJnZXRfc2lnbmFsX2Zyb21faG9zdCk6IHVu cmVjb2duaXplZCByZWFsLXRpbWUgc2lnbmFsIik7CisJZXJyb3IKKwkgICgi R0RCIGJ1ZzogdGFyZ2V0LmMgKHRhcmdldF9zaWduYWxfZnJvbV9ob3N0KTog dW5yZWNvZ25pemVkIHJlYWwtdGltZSBzaWduYWwiKTsKICAgICB9CiAjZW5k aWYKICAgcmV0dXJuIFRBUkdFVF9TSUdOQUxfVU5LTk9XTjsKQEAgLTUwNiw4 ICs1MDksNyBAQAogICAgYWNjb3JkaW5nbHkuICovCiAKIHN0YXRpYyBpbnQK LWRvX3RhcmdldF9zaWduYWxfdG9faG9zdCAoZW51bSB0YXJnZXRfc2lnbmFs IG91cnNpZywKLQkJCSAgaW50ICpvdXJzaWdfb2spCitkb190YXJnZXRfc2ln bmFsX3RvX2hvc3QgKGVudW0gdGFyZ2V0X3NpZ25hbCBvdXJzaWcsIGludCAq b3Vyc2lnX29rKQogewogICAqb3Vyc2lnX29rID0gMTsKICAgc3dpdGNoIChv dXJzaWcpCkBAIC03MzcsOSArNzM5LDggQEAKIAkgICYmIG91cnNpZyA8PSBU QVJHRVRfU0lHTkFMX1JFQUxUSU1FXzYzKQogCXsKIAkgIC8qIFRoaXMgYmxv Y2sgb2Ygc2lnbmFscyBpcyBjb250aW51b3VzLCBhbmQKLSAgICAgICAgICAg ICBUQVJHRVRfU0lHTkFMX1JFQUxUSU1FXzMzIGlzIDMzIGJ5IGRlZmluaXRp b24uICAqLwotCSAgaW50IHJldHNpZyA9Ci0JICAgIChpbnQpIG91cnNpZyAt IChpbnQpIFRBUkdFVF9TSUdOQUxfUkVBTFRJTUVfMzMgKyAzMzsKKwkgICAg IFRBUkdFVF9TSUdOQUxfUkVBTFRJTUVfMzMgaXMgMzMgYnkgZGVmaW5pdGlv bi4gICovCisJICBpbnQgcmV0c2lnID0gKGludCkgb3Vyc2lnIC0gKGludCkg VEFSR0VUX1NJR05BTF9SRUFMVElNRV8zMyArIDMzOwogCSAgaWYgKHJldHNp ZyA+PSBSRUFMVElNRV9MTyAmJiByZXRzaWcgPCBSRUFMVElNRV9ISSkKIAkg ICAgcmV0dXJuIHJldHNpZzsKIAl9CkBAIC03NDcsNyArNzQ4LDcgQEAKICAg ICAgIGVsc2UgaWYgKG91cnNpZyA9PSBUQVJHRVRfU0lHTkFMX1JFQUxUSU1F XzMyKQogCXsKIAkgIC8qIFRBUkdFVF9TSUdOQUxfUkVBTFRJTUVfMzIgaXNu J3QgY29udGlndW91cyB3aXRoCi0gICAgICAgICAgICAgVEFSR0VUX1NJR05B TF9SRUFMVElNRV8zMy4gIEl0IGlzIDMyIGJ5IGRlZmluaXRpb24uICAqLwor CSAgICAgVEFSR0VUX1NJR05BTF9SRUFMVElNRV8zMy4gIEl0IGlzIDMyIGJ5 IGRlZmluaXRpb24uICAqLwogCSAgcmV0dXJuIDMyOwogCX0KICNlbmRpZgpA QCAtNzU2LDEzICs3NTcsMTIgQEAKIAkgICYmIG91cnNpZyA8PSBUQVJHRVRf U0lHTkFMX1JFQUxUSU1FXzEyNykKIAl7CiAJICAvKiBUaGlzIGJsb2NrIG9m IHNpZ25hbHMgaXMgY29udGludW91cywgYW5kCi0gICAgICAgICAgICAgVEFS R0VUX1NJR05BTF9SRUFMVElNRV82NCBpcyA2NCBieSBkZWZpbml0aW9uLiAg Ki8KLQkgIGludCByZXRzaWcgPQotCSAgICAoaW50KSBvdXJzaWcgLSAoaW50 KSBUQVJHRVRfU0lHTkFMX1JFQUxUSU1FXzY0ICsgNjQ7CisJICAgICBUQVJH RVRfU0lHTkFMX1JFQUxUSU1FXzY0IGlzIDY0IGJ5IGRlZmluaXRpb24uICAq LworCSAgaW50IHJldHNpZyA9IChpbnQpIG91cnNpZyAtIChpbnQpIFRBUkdF VF9TSUdOQUxfUkVBTFRJTUVfNjQgKyA2NDsKIAkgIGlmIChyZXRzaWcgPj0g UkVBTFRJTUVfTE8gJiYgcmV0c2lnIDwgUkVBTFRJTUVfSEkpCiAJICAgIHJl dHVybiByZXRzaWc7CiAJfQotICAgICAgCisKICNlbmRpZgogI2VuZGlmCiAK QEAgLTc3MSw5ICs3NzEsOCBAQAogCSAgJiYgb3Vyc2lnIDw9IFRBUkdFVF9T SUdOQUxfUkVBTFRJTUVfNjMpCiAJewogCSAgLyogVGhpcyBibG9jayBvZiBz aWduYWxzIGlzIGNvbnRpbnVvdXMsIGFuZAotICAgICAgICAgICAgIFRBUkdF VF9TSUdOQUxfUkVBTFRJTUVfMzMgaXMgMzMgYnkgZGVmaW5pdGlvbi4gICov Ci0JICBpbnQgcmV0c2lnID0KLQkgICAgKGludCkgb3Vyc2lnIC0gKGludCkg VEFSR0VUX1NJR05BTF9SRUFMVElNRV8zMyArIDMzOworCSAgICAgVEFSR0VU X1NJR05BTF9SRUFMVElNRV8zMyBpcyAzMyBieSBkZWZpbml0aW9uLiAgKi8K KwkgIGludCByZXRzaWcgPSAoaW50KSBvdXJzaWcgLSAoaW50KSBUQVJHRVRf U0lHTkFMX1JFQUxUSU1FXzMzICsgMzM7CiAJICBpZiAocmV0c2lnID49IFNJ R1JUTUlOICYmIHJldHNpZyA8PSBTSUdSVE1BWCkKIAkgICAgcmV0dXJuIHJl dHNpZzsKIAl9CkBAIC03ODUsNiArNzg0LDcgQEAKICAgICB9CiB9CiAKKyNp Zm5kZWYgR0RCU0VSVkVSCiBpbnQKIHRhcmdldF9zaWduYWxfdG9faG9zdF9w IChlbnVtIHRhcmdldF9zaWduYWwgb3Vyc2lnKQogewpAQCAtNzkyLDYgKzc5 Miw3IEBACiAgIGRvX3RhcmdldF9zaWduYWxfdG9faG9zdCAob3Vyc2lnLCAm b3Vyc2lnX29rKTsKICAgcmV0dXJuIG91cnNpZ19vazsKIH0KKyNlbmRpZiAv KiBHREJTRVJWRVIgKi8KIAogaW50CiB0YXJnZXRfc2lnbmFsX3RvX2hvc3Qg KGVudW0gdGFyZ2V0X3NpZ25hbCBvdXJzaWcpCkBAIC04MDIsMTQgKzgwMywy MSBAQAogICAgIHsKICAgICAgIC8qIFRoZSB1c2VyIG1pZ2h0IGJlIHRyeWlu ZyB0byBkbyAic2lnbmFsIFNJR1NBSyIgd2hlcmUgdGhpcyBzeXN0ZW0KICAg ICAgICAgIGRvZXNuJ3QgaGF2ZSBTSUdTQUsuICAqLworI2lmZGVmIEdEQlNF UlZFUgorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVGFyZ2V0IHNpZ25hbCAl ZCBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIHN5c3RlbS5cbiIsCisJICAgICAg IG91cnNpZyk7CisjZWxzZQogICAgICAgd2FybmluZyAoIlNpZ25hbCAlcyBk b2VzIG5vdCBleGlzdCBvbiB0aGlzIHN5c3RlbS5cbiIsCiAJICAgICAgIHRh cmdldF9zaWduYWxfdG9fbmFtZSAob3Vyc2lnKSk7CisjZW5kaWYKKwogICAg ICAgcmV0dXJuIDA7CiAgICAgfQogICBlbHNlCiAgICAgcmV0dXJuIHRhcmdf c2lnbm87CiB9CiAKKyNpZm5kZWYgR0RCU0VSVkVSCiAvKiBJbiBzb21lIGNp cmN1bXN0YW5jZXMgd2UgYWxsb3cgYSBjb21tYW5kIHRvIHNwZWNpZnkgYSBu dW1lcmljCiAgICBzaWduYWwuICBUaGUgaWRlYSBpcyB0byBrZWVwIHRoZXNl IGNpcmN1bXN0YW5jZXMgbGltaXRlZCBzbyB0aGF0CiAgICB1c2VycyAoYW5k IHNjcmlwdHMpIGRldmVsb3AgcG9ydGFibGUgaGFiaXRzLiAgRm9yIGNvbXBh cmlzb24sCkBAIC04MzMsMyArODQxLDQgQEAKICAgaWYgKCFTVFJFUSAoc2ln bmFsc1tUQVJHRVRfU0lHTkFMX0xBU1RdLnN0cmluZywgIlRBUkdFVF9TSUdO QUxfTUFHSUMiKSkKICAgICBpbnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9f TElORV9fLCAiZmFpbGVkIGludGVybmFsIGNvbnNpc3RlbmN5IGNoZWNrIik7 CiB9CisjZW5kaWYgLyogR0RCU0VSVkVSICovCg== ------------=_1583534360-29878-9 Content-Type: text/x-diff; charset=us-ascii; name="=?iso-8859-1?Q?gdb.s390.100901.gdbserver.config.diff?=" Content-Disposition: inline; filename="=?iso-8859-1?Q?gdb.s390.100901.gdbserver.config.diff?=" Content-Transfer-Encoding: base64 Content-Length: 1810 LS0tIHNyYy5vcmlnL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4JVHVlIE1h ciAgNiAwOToyMTo0MyAyMDAxCisrKyBzcmMubmV3L2dkYi9nZGJzZXJ2ZXIv TWFrZWZpbGUuaW4JV2VkIFNlcCAgNSAxOTo0MDo1NSAyMDAxCkBAIC0xMzAs MTggKzEzMCwyMCBAQAogU0ZJTEVTID0gJChzcmNkaXIpL2xvdy1ocHBhYnNk LmMgJChzcmNkaXIpL2xvdy1saW51eC5jICQoc3JjZGlyKS9sb3ctbHlueC5j IFwKIAkgJChzcmNkaXIpL2xvdy1uYnNkLmMgJChzcmNkaXIpL2xvdy1zaW0u YyAkKHNyY2RpcikvbG93LXNwYXJjLmMgXAogCSAkKHNyY2RpcikvbG93LXN1 bjMuYyAkKHNyY2RpcikvdXRpbHMuYyAkKHNyY2Rpcikvc2VydmVyLmMgXAot CSAkKHNyY2RpcikvcmVtb3RlLXV0aWxzLmMKKwkgJChzcmNkaXIpL3JlbW90 ZS11dGlscy5jIC4uL3NpZ25hbHMuYwogCiBERVBGSUxFUyA9ICQoR0RCU0VS VkVSX0RFUEZJTEVTKQogCiBTT1VSQ0VTID0gJChTRklMRVMpICQoQUxMREVQ RklMRVMpCiBUQUdGSUxFUyA9ICQoU09VUkNFUykgJHtIRklMRVN9ICR7QUxM UEFSQU19ICR7UE9TU0xJQlN9IAogCi1PQlMgPSB1dGlscy5vICQoR0RCU0VS VkVSX0RFUEZJTEVTKSBzZXJ2ZXIubyByZW1vdGUtdXRpbHMubworT0JTID0g JChzcmNkaXIpL3V0aWxzLm8gJChHREJTRVJWRVJfREVQRklMRVMpIHNlcnZl ci5vIHJlbW90ZS11dGlscy5vIHNpZ25hbHMubwogCiAjIFByZXZlbnQgU3Vu IG1ha2UgZnJvbSBwdXR0aW5nIGluIHRoZSBtYWNoaW5lIHR5cGUuICBTZXR0 aW5nCiAjIFRBUkdFVF9BUkNIIHRvIG5vdGhpbmcgd29ya3MgZm9yIFN1bk9T IDMsIDQuMCwgYnV0IG5vdCBmb3IgNC4xLgotLmMubzoKKyUubzogJS5jCisJ JHtDQ30gLWMgJHtJTlRFUk5BTF9DRkxBR1N9ICQ8CislLm86IC4uLyUuYwog CSR7Q0N9IC1jICR7SU5URVJOQUxfQ0ZMQUdTfSAkPAogCiBhbGw6IGdkYnNl cnZlciBnZGJyZXBsYXkKQEAgLTI0Niw2ICsyNDgsNyBAQAogbG93LXNwYXJj Lm8gOiAkKHNyY2RpcikvbG93LXNwYXJjLmMgJChzcmNkaXIpL3NlcnZlci5o CiBsb3ctc3VuMy5vIDogJChzcmNkaXIpL2xvdy1zdW4zLmMgJChzcmNkaXIp L3NlcnZlci5oCiBsb3ctaHBwYWJzZC5vIDogJChzcmNkaXIpL2xvdy1ocHBh YnNkLmMgJChzcmNkaXIpL3NlcnZlci5oCi11dGlscy5vIDogJHtzcmNkaXJ9 L3V0aWxzLmMgJHtzcmNkaXJ9L3NlcnZlci5oCiskKHNyY2RpcikvdXRpbHMu byA6ICR7c3JjZGlyfS91dGlscy5jICR7c3JjZGlyfS9zZXJ2ZXIuaAorc2ln bmFscy5vIDogLi4vc2lnbmFscy5jIC4uL3RhcmdldC5oCiAKICMgVGhpcyBp cyB0aGUgZW5kIG9mICJNYWtlZmlsZS5pbiIuCg== ------------=_1583534360-29878-9 Content-Type: text/x-diff; charset=us-ascii; name="=?iso-8859-1?Q?gdb.s390.100901.gdbserver.core.diff?=" Content-Disposition: inline; filename="=?iso-8859-1?Q?gdb.s390.100901.gdbserver.core.diff?=" Content-Transfer-Encoding: base64 Content-Length: 28813 LS0tIHNyYy5vcmlnL2dkYi9nZGJzZXJ2ZXIvc2VydmVyLmMJVHVlIE1hciAg NiAwOToyMTo0NCAyMDAxCisrKyBzcmMubmV3L2dkYi9nZGJzZXJ2ZXIvc2Vy dmVyLmMJRnJpIFNlcCAgNyAyMDo0ODowMiAyMDAxCkBAIC0yMCw2ICsyMCw3 IEBACiAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCiAKICNp bmNsdWRlICJzZXJ2ZXIuaCIKKyNpbmNsdWRlICJ0YXJnZXQuaCIKIAogaW50 IGNvbnRfdGhyZWFkOwogaW50IGdlbmVyYWxfdGhyZWFkOwpAQCAtNjAsNyAr NjEsNiBAQAogICAgIGVycm9yICgiVXNhZ2U6IGdkYnNlcnZlciB0dHkgcHJv ZyBbYXJncyAuLi5dIik7CiAKICAgaW5pdGlhbGl6ZV9sb3cgKCk7Ci0KICAg LyogV2FpdCB0aWxsIHdlIGFyZSBhdCBmaXJzdCBpbnN0cnVjdGlvbiBpbiBw cm9ncmFtLiAgKi8KICAgc2lnbmFsID0gc3RhcnRfaW5mZXJpb3IgKCZhcmd2 WzJdLCAmc3RhdHVzKTsKIApAQCAtMTMwLDEyICsxMzAsMTQgQEAKIAkgICAg ICBicmVhazsKIAkgICAgY2FzZSAnQyc6CiAJICAgICAgY29udmVydF9hc2Np aV90b19pbnQgKG93bl9idWYgKyAxLCAmc2lnLCAxKTsKKwkgICAgICBzaWcg PSB0YXJnZXRfc2lnbmFsX3RvX2hvc3QgKHNpZyk7CiAJICAgICAgbXlyZXN1 bWUgKDAsIHNpZyk7CiAJICAgICAgc2lnbmFsID0gbXl3YWl0ICgmc3RhdHVz KTsKIAkgICAgICBwcmVwYXJlX3Jlc3VtZV9yZXBseSAob3duX2J1Ziwgc3Rh dHVzLCBzaWduYWwpOwogCSAgICAgIGJyZWFrOwogCSAgICBjYXNlICdTJzoK IAkgICAgICBjb252ZXJ0X2FzY2lpX3RvX2ludCAob3duX2J1ZiArIDEsICZz aWcsIDEpOworCSAgICAgIHNpZyA9IHRhcmdldF9zaWduYWxfdG9faG9zdCAo c2lnKTsKIAkgICAgICBteXJlc3VtZSAoMSwgc2lnKTsKIAkgICAgICBzaWdu YWwgPSBteXdhaXQgKCZzdGF0dXMpOwogCSAgICAgIHByZXBhcmVfcmVzdW1l X3JlcGx5IChvd25fYnVmLCBzdGF0dXMsIHNpZ25hbCk7CkBAIC0yMTAsOCAr MjEyLDcgQEAKIAkgIHB1dHBrdCAob3duX2J1Zik7CiAKIAkgIGlmIChzdGF0 dXMgPT0gJ1cnKQotCSAgICBmcHJpbnRmIChzdGRlcnIsCi0JCSAgICAgIlxu Q2hpbGQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iLCBzaWcpOworCSAgICBm cHJpbnRmIChzdGRlcnIsICJcbkNoaWxkIGV4aXRlZCB3aXRoIHN0YXR1cyAl ZFxuIiwgc2lnKTsKIAkgIGlmIChzdGF0dXMgPT0gJ1gnKQogCSAgICBmcHJp bnRmIChzdGRlcnIsICJcbkNoaWxkIHRlcm1pbmF0ZWQgd2l0aCBzaWduYWwg PSAweCV4XG4iLCBzaWcpOwogCSAgaWYgKHN0YXR1cyA9PSAnVycgfHwgc3Rh dHVzID09ICdYJykKQEAgLTI1MCw3ICsyNTEsOCBAQAogCX0KICAgICAgIGVs c2UKIAl7Ci0JICBmcHJpbnRmIChzdGRlcnIsICJSZW1vdGUgc2lkZSBoYXMg dGVybWluYXRlZCBjb25uZWN0aW9uLiAgR0RCc2VydmVyIHdpbGwgcmVvcGVu IHRoZSBjb25uZWN0aW9uLlxuIik7CisJICBmcHJpbnRmIChzdGRlcnIsCisJ CSAgICJSZW1vdGUgc2lkZSBoYXMgdGVybWluYXRlZCBjb25uZWN0aW9uLiAg R0RCc2VydmVyIHdpbGwgcmVvcGVuIHRoZSBjb25uZWN0aW9uLlxuIik7CiAK IAkgIHJlbW90ZV9jbG9zZSAoKTsKIAl9Ci0tLSBzcmMub3JpZy9nZGIvZ2Ri c2VydmVyL2xvdy1saW51eC5jCVRodSBKdWwgMjYgMDQ6MjM6NTggMjAwMQor Kysgc3JjLm5ldy9nZGIvZ2Ric2VydmVyL2xvdy1saW51eC5jCU1vbiBTZXAg MTAgMTg6NDE6NTMgMjAwMQpAQCAtNDksOCArNDksOSBAQAogCiBleHRlcm4g aW50IGVycm5vOwogCisjaWZuZGVmIFMzOTBfR05VTElOVVhfVEFSR0VUCiBz dGF0aWMgdm9pZCBpbml0aWFsaXplX2FyY2ggKHZvaWQpOwotCisjZW5kaWYK IC8qIFN0YXJ0IGFuIGluZmVyaW9yIHByb2Nlc3MgYW5kIHJldHVybnMgaXRz IHBpZC4KICAgIEFMTEFSR1MgaXMgYSB2ZWN0b3Igb2YgcHJvZ3JhbS1uYW1l IGFuZCBhcmdzLiAqLwogCkBAIC0xMTMsMTMgKzExNCwxNSBAQAogCiAgIGlm IChXSUZFWElURUQgKHcpKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVy ciwgIlxuQ2hpbGQgZXhpdGVkIHdpdGggcmV0Y29kZSA9ICV4IFxuIiwgV0VY SVRTVEFUVVMgKHcpKTsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuQ2hp bGQgZXhpdGVkIHdpdGggcmV0Y29kZSA9ICV4IFxuIiwKKwkgICAgICAgV0VY SVRTVEFUVVMgKHcpKTsKICAgICAgICpzdGF0dXMgPSAnVyc7CiAgICAgICBy ZXR1cm4gKCh1bnNpZ25lZCBjaGFyKSBXRVhJVFNUQVRVUyAodykpOwogICAg IH0KICAgZWxzZSBpZiAoIVdJRlNUT1BQRUQgKHcpKQogICAgIHsKLSAgICAg IGZwcmludGYgKHN0ZGVyciwgIlxuQ2hpbGQgdGVybWluYXRlZCB3aXRoIHNp Z25hbCA9ICV4IFxuIiwgV1RFUk1TSUcgKHcpKTsKKyAgICAgIGZwcmludGYg KHN0ZGVyciwgIlxuQ2hpbGQgdGVybWluYXRlZCB3aXRoIHNpZ25hbCA9ICV4 IFxuIiwKKwkgICAgICAgV1RFUk1TSUcgKHcpKTsKICAgICAgICpzdGF0dXMg PSAnWCc7CiAgICAgICByZXR1cm4gKCh1bnNpZ25lZCBjaGFyKSBXVEVSTVNJ RyAodykpOwogICAgIH0KQEAgLTE3OCwxNyArMTgxLDE3IEBACiAvKiBpMzg2 X3JlZ2lzdGVyX3Jhd19zaXplW2ldIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMg b2Ygc3RvcmFnZSBpbgogICAgR0RCJ3MgcmVnaXN0ZXIgYXJyYXkgb2NjdXBp ZWQgYnkgcmVnaXN0ZXIgaS4gICovCiBpbnQgaTM4Nl9yZWdpc3Rlcl9yYXdf c2l6ZVtNQVhfTlVNX1JFR1NdID0gewotICAgNCwgIDQsICA0LCAgNCwKLSAg IDQsICA0LCAgNCwgIDQsCi0gICA0LCAgNCwgIDQsICA0LAotICAgNCwgIDQs ICA0LCAgNCwKKyAgNCwgNCwgNCwgNCwKKyAgNCwgNCwgNCwgNCwKKyAgNCwg NCwgNCwgNCwKKyAgNCwgNCwgNCwgNCwKICAgMTAsIDEwLCAxMCwgMTAsCiAg IDEwLCAxMCwgMTAsIDEwLAotICAgNCwgIDQsICA0LCAgNCwKLSAgIDQsICA0 LCAgNCwgIDQsCisgIDQsIDQsIDQsIDQsCisgIDQsIDQsIDQsIDQsCiAgIDE2 LCAxNiwgMTYsIDE2LAogICAxNiwgMTYsIDE2LCAxNiwKLSAgIDQKKyAgNAog fTsKIAogc3RhdGljIHZvaWQKQEAgLTIxMiw4ICsyMTUsNyBAQAogCiAvKiBN YXBwaW5nIGJldHdlZW4gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMg aW4gYHN0cnVjdCB1c2VyJwogICAgZm9ybWF0IGFuZCBHREIncyByZWdpc3Rl ciBhcnJheSBsYXlvdXQuICAqLwotc3RhdGljIGludCByZWdtYXBbXSA9IAot eworc3RhdGljIGludCByZWdtYXBbXSA9IHsKICAgRUFYLCBFQ1gsIEVEWCwg RUJYLAogICBVRVNQLCBFQlAsIEVTSSwgRURJLAogICBFSVAsIEVGTCwgQ1Ms IFNTLApAQCAtMjM2LDggKzIzOCw3IEBACiB9CiAKIC8qIFRoaXMgdGFibGUg bXVzdCBsaW5lIHVwIHdpdGggUkVHSVNURVJfTkFNRVMgaW4gdG0tbTY4ay5o ICovCi1zdGF0aWMgaW50IHJlZ21hcFtdID0KLXsKK3N0YXRpYyBpbnQgcmVn bWFwW10gPSB7CiAjaWZkZWYgUFRfRDAKICAgUFRfRDAsIFBUX0QxLCBQVF9E MiwgUFRfRDMsIFBUX0Q0LCBQVF9ENSwgUFRfRDYsIFBUX0Q3LAogICBQVF9B MCwgUFRfQTEsIFBUX0EyLCBQVF9BMywgUFRfQTQsIFBUX0E1LCBQVF9BNiwg UFRfVVNQLApAQCAtMjY4LDI1OCArMjY5LDI1NyBAQAogCiAjaW5jbHVkZSA8 YXNtL3B0cmFjZV9vZmZzZXRzLmg+CiAKLXN0YXRpYyBpbnQgdV9vZmZzZXRz W10gPQotICB7Ci0gICAgLyogZ2VuZXJhbCByZWdpc3RlcnMgKi8KLSAgICAt MSwJCS8qIGdyMCBub3QgYXZhaWxhYmxlOyBpLmUsIGl0J3MgYWx3YXlzIHpl cm8gKi8KLSAgICBQVF9SMSwKLSAgICBQVF9SMiwKLSAgICBQVF9SMywKLSAg ICBQVF9SNCwKLSAgICBQVF9SNSwKLSAgICBQVF9SNiwKLSAgICBQVF9SNywK LSAgICBQVF9SOCwKLSAgICBQVF9SOSwKLSAgICBQVF9SMTAsCi0gICAgUFRf UjExLAotICAgIFBUX1IxMiwKLSAgICBQVF9SMTMsCi0gICAgUFRfUjE0LAot ICAgIFBUX1IxNSwKLSAgICBQVF9SMTYsCi0gICAgUFRfUjE3LAotICAgIFBU X1IxOCwKLSAgICBQVF9SMTksCi0gICAgUFRfUjIwLAotICAgIFBUX1IyMSwK LSAgICBQVF9SMjIsCi0gICAgUFRfUjIzLAotICAgIFBUX1IyNCwKLSAgICBQ VF9SMjUsCi0gICAgUFRfUjI2LAotICAgIFBUX1IyNywKLSAgICBQVF9SMjgs Ci0gICAgUFRfUjI5LAotICAgIFBUX1IzMCwKLSAgICBQVF9SMzEsCi0gICAg LyogZ3IzMiB0aHJvdWdoIGdyMTI3IG5vdCBkaXJlY3RseSBhdmFpbGFibGUg dmlhIHRoZSBwdHJhY2UgaW50ZXJmYWNlICovCi0gICAgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsCi0gICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0gICAgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsCi0gICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0gICAgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsCi0gICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0gICAgLyog RmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCi0gICAgLTEsIC0xLAkvKiBm MCBhbmQgZjEgbm90IGF2YWlsYWJsZSAoZjAgaXMgKzAuMCBhbmQgZjEgaXMg KzEuMCkgKi8KLSAgICBQVF9GMiwKLSAgICBQVF9GMywKLSAgICBQVF9GNCwK LSAgICBQVF9GNSwKLSAgICBQVF9GNiwKLSAgICBQVF9GNywKLSAgICBQVF9G OCwKLSAgICBQVF9GOSwKLSAgICBQVF9GMTAsCi0gICAgUFRfRjExLAotICAg IFBUX0YxMiwKLSAgICBQVF9GMTMsCi0gICAgUFRfRjE0LAotICAgIFBUX0Yx NSwKLSAgICBQVF9GMTYsCi0gICAgUFRfRjE3LAotICAgIFBUX0YxOCwKLSAg ICBQVF9GMTksCi0gICAgUFRfRjIwLAotICAgIFBUX0YyMSwKLSAgICBQVF9G MjIsCi0gICAgUFRfRjIzLAotICAgIFBUX0YyNCwKLSAgICBQVF9GMjUsCi0g ICAgUFRfRjI2LAotICAgIFBUX0YyNywKLSAgICBQVF9GMjgsCi0gICAgUFRf RjI5LAotICAgIFBUX0YzMCwKLSAgICBQVF9GMzEsCi0gICAgUFRfRjMyLAot ICAgIFBUX0YzMywKLSAgICBQVF9GMzQsCi0gICAgUFRfRjM1LAotICAgIFBU X0YzNiwKLSAgICBQVF9GMzcsCi0gICAgUFRfRjM4LAotICAgIFBUX0YzOSwK LSAgICBQVF9GNDAsCi0gICAgUFRfRjQxLAotICAgIFBUX0Y0MiwKLSAgICBQ VF9GNDMsCi0gICAgUFRfRjQ0LAotICAgIFBUX0Y0NSwKLSAgICBQVF9GNDYs Ci0gICAgUFRfRjQ3LAotICAgIFBUX0Y0OCwKLSAgICBQVF9GNDksCi0gICAg UFRfRjUwLAotICAgIFBUX0Y1MSwKLSAgICBQVF9GNTIsCi0gICAgUFRfRjUz LAotICAgIFBUX0Y1NCwKLSAgICBQVF9GNTUsCi0gICAgUFRfRjU2LAotICAg IFBUX0Y1NywKLSAgICBQVF9GNTgsCi0gICAgUFRfRjU5LAotICAgIFBUX0Y2 MCwKLSAgICBQVF9GNjEsCi0gICAgUFRfRjYyLAotICAgIFBUX0Y2MywKLSAg ICBQVF9GNjQsCi0gICAgUFRfRjY1LAotICAgIFBUX0Y2NiwKLSAgICBQVF9G NjcsCi0gICAgUFRfRjY4LAotICAgIFBUX0Y2OSwKLSAgICBQVF9GNzAsCi0g ICAgUFRfRjcxLAotICAgIFBUX0Y3MiwKLSAgICBQVF9GNzMsCi0gICAgUFRf Rjc0LAotICAgIFBUX0Y3NSwKLSAgICBQVF9GNzYsCi0gICAgUFRfRjc3LAot ICAgIFBUX0Y3OCwKLSAgICBQVF9GNzksCi0gICAgUFRfRjgwLAotICAgIFBU X0Y4MSwKLSAgICBQVF9GODIsCi0gICAgUFRfRjgzLAotICAgIFBUX0Y4NCwK LSAgICBQVF9GODUsCi0gICAgUFRfRjg2LAotICAgIFBUX0Y4NywKLSAgICBQ VF9GODgsCi0gICAgUFRfRjg5LAotICAgIFBUX0Y5MCwKLSAgICBQVF9GOTEs Ci0gICAgUFRfRjkyLAotICAgIFBUX0Y5MywKLSAgICBQVF9GOTQsCi0gICAg UFRfRjk1LAotICAgIFBUX0Y5NiwKLSAgICBQVF9GOTcsCi0gICAgUFRfRjk4 LAotICAgIFBUX0Y5OSwKLSAgICBQVF9GMTAwLAotICAgIFBUX0YxMDEsCi0g ICAgUFRfRjEwMiwKLSAgICBQVF9GMTAzLAotICAgIFBUX0YxMDQsCi0gICAg UFRfRjEwNSwKLSAgICBQVF9GMTA2LAotICAgIFBUX0YxMDcsCi0gICAgUFRf RjEwOCwKLSAgICBQVF9GMTA5LAotICAgIFBUX0YxMTAsCi0gICAgUFRfRjEx MSwKLSAgICBQVF9GMTEyLAotICAgIFBUX0YxMTMsCi0gICAgUFRfRjExNCwK LSAgICBQVF9GMTE1LAotICAgIFBUX0YxMTYsCi0gICAgUFRfRjExNywKLSAg ICBQVF9GMTE4LAotICAgIFBUX0YxMTksCi0gICAgUFRfRjEyMCwKLSAgICBQ VF9GMTIxLAotICAgIFBUX0YxMjIsCi0gICAgUFRfRjEyMywKLSAgICBQVF9G MTI0LAotICAgIFBUX0YxMjUsCi0gICAgUFRfRjEyNiwKLSAgICBQVF9GMTI3 LAotICAgIC8qIHByZWRpY2F0ZSByZWdpc3RlcnMgLSB3ZSBkb24ndCBmZXRj aCB0aGVzZSBpbmRpdmlkdWFsbHkgKi8KLSAgICAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsCi0gICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLAotICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwK LSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0gICAgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotICAgIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsCi0gICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLAotICAgIC8qIGJyYW5jaCByZWdpc3RlcnMgKi8KLSAgICBQVF9CMCwK LSAgICBQVF9CMSwKLSAgICBQVF9CMiwKLSAgICBQVF9CMywKLSAgICBQVF9C NCwKLSAgICBQVF9CNSwKLSAgICBQVF9CNiwKLSAgICBQVF9CNywKLSAgICAv KiB2aXJ0dWFsIGZyYW1lIHBvaW50ZXIgYW5kIHZpcnR1YWwgcmV0dXJuIGFk ZHJlc3MgcG9pbnRlciAqLwotICAgIC0xLCAtMSwKLSAgICAvKiBvdGhlciBy ZWdpc3RlcnMgKi8KLSAgICBQVF9QUiwKLSAgICBQVF9DUl9JSVAsCS8qIGlw ICovCi0gICAgUFRfQ1JfSVBTUiwgLyogcHNyICovCi0gICAgUFRfQ0ZNLAkv KiBjZm0gKi8KLSAgICAvKiBrZXJuZWwgcmVnaXN0ZXJzIG5vdCB2aXNpYmxl IHZpYSBwdHJhY2UgaW50ZXJmYWNlICg/KSAqLwotICAgIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAvKiBob2xlICovCi0gICAgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotICAgIFBUX0FSX1JTQywK LSAgICBQVF9BUl9CU1AsCi0gICAgUFRfQVJfQlNQU1RPUkUsCi0gICAgUFRf QVJfUk5BVCwKLSAgICAtMSwKLSAgICAtMSwJCS8qIE5vdCBhdmFpbGFibGU6 IEZDUiwgSUEzMiBmbG9hdGluZyBjb250cm9sIHJlZ2lzdGVyICovCi0gICAg LTEsIC0xLAotICAgIC0xLAkJLyogTm90IGF2YWlsYWJsZTogRUZMQUcgKi8K LSAgICAtMSwJCS8qIE5vdCBhdmFpbGFibGU6IENTRCAqLwotICAgIC0xLAkJ LyogTm90IGF2YWlsYWJsZTogU1NEICovCi0gICAgLTEsCQkvKiBOb3QgYXZh aWxhYmxlOiBDRkxHICovCi0gICAgLTEsCQkvKiBOb3QgYXZhaWxhYmxlOiBG U1IgKi8KLSAgICAtMSwJCS8qIE5vdCBhdmFpbGFibGU6IEZJUiAqLwotICAg IC0xLAkJLyogTm90IGF2YWlsYWJsZTogRkRSICovCi0gICAgLTEsCi0gICAg UFRfQVJfQ0NWLAotICAgIC0xLCAtMSwgLTEsCi0gICAgUFRfQVJfVU5BVCwK LSAgICAtMSwgLTEsIC0xLAotICAgIFBUX0FSX0ZQU1IsCi0gICAgLTEsIC0x LCAtMSwKLSAgICAtMSwJCS8qIE5vdCBhdmFpbGFibGU6IElUQyAqLwotICAg IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotICAg IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0gICAgUFRf QVJfUEZTLAotICAgIFBUX0FSX0xDLAotICAgIC0xLAkJLyogTm90IGF2YWls YWJsZTogRUMsIHRoZSBFcGlsb2cgQ291bnQgcmVnaXN0ZXIgKi8KLSAgICAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAt MSwKLSAgICAvKiBuYXQgYml0cyAtIG5vdCBmZXRjaGVkIGRpcmVjdGx5OyBp bnN0ZWFkIHdlIG9idGFpbiB0aGVzZSBiaXRzIGZyb20KLSAgICAgICBlaXRo ZXIgcm5hdCBvciB1bmF0IG9yIGZyb20gbWVtb3J5LiAqLwotICAgIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsCi0gICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLAotICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwKLSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0gICAg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotICAgIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsCi0gICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLAotICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwK LSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0gICAgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotICAgIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAgICAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsCi0gICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLAotICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLSAg fTsKK3N0YXRpYyBpbnQgdV9vZmZzZXRzW10gPSB7CisgIC8qIGdlbmVyYWwg cmVnaXN0ZXJzICovCisgIC0xLAkJCQkvKiBncjAgbm90IGF2YWlsYWJsZTsg aS5lLCBpdCdzIGFsd2F5cyB6ZXJvICovCisgIFBUX1IxLAorICBQVF9SMiwK KyAgUFRfUjMsCisgIFBUX1I0LAorICBQVF9SNSwKKyAgUFRfUjYsCisgIFBU X1I3LAorICBQVF9SOCwKKyAgUFRfUjksCisgIFBUX1IxMCwKKyAgUFRfUjEx LAorICBQVF9SMTIsCisgIFBUX1IxMywKKyAgUFRfUjE0LAorICBQVF9SMTUs CisgIFBUX1IxNiwKKyAgUFRfUjE3LAorICBQVF9SMTgsCisgIFBUX1IxOSwK KyAgUFRfUjIwLAorICBQVF9SMjEsCisgIFBUX1IyMiwKKyAgUFRfUjIzLAor ICBQVF9SMjQsCisgIFBUX1IyNSwKKyAgUFRfUjI2LAorICBQVF9SMjcsCisg IFBUX1IyOCwKKyAgUFRfUjI5LAorICBQVF9SMzAsCisgIFBUX1IzMSwKKyAg LyogZ3IzMiB0aHJvdWdoIGdyMTI3IG5vdCBkaXJlY3RseSBhdmFpbGFibGUg dmlhIHRoZSBwdHJhY2UgaW50ZXJmYWNlICovCisgIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLAorICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsCisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorICAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwKKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgIC8qIEZsb2F0aW5nIHBvaW50 IHJlZ2lzdGVycyAqLworICAtMSwgLTEsCQkJLyogZjAgYW5kIGYxIG5vdCBh dmFpbGFibGUgKGYwIGlzICswLjAgYW5kIGYxIGlzICsxLjApICovCisgIFBU X0YyLAorICBQVF9GMywKKyAgUFRfRjQsCisgIFBUX0Y1LAorICBQVF9GNiwK KyAgUFRfRjcsCisgIFBUX0Y4LAorICBQVF9GOSwKKyAgUFRfRjEwLAorICBQ VF9GMTEsCisgIFBUX0YxMiwKKyAgUFRfRjEzLAorICBQVF9GMTQsCisgIFBU X0YxNSwKKyAgUFRfRjE2LAorICBQVF9GMTcsCisgIFBUX0YxOCwKKyAgUFRf RjE5LAorICBQVF9GMjAsCisgIFBUX0YyMSwKKyAgUFRfRjIyLAorICBQVF9G MjMsCisgIFBUX0YyNCwKKyAgUFRfRjI1LAorICBQVF9GMjYsCisgIFBUX0Yy NywKKyAgUFRfRjI4LAorICBQVF9GMjksCisgIFBUX0YzMCwKKyAgUFRfRjMx LAorICBQVF9GMzIsCisgIFBUX0YzMywKKyAgUFRfRjM0LAorICBQVF9GMzUs CisgIFBUX0YzNiwKKyAgUFRfRjM3LAorICBQVF9GMzgsCisgIFBUX0YzOSwK KyAgUFRfRjQwLAorICBQVF9GNDEsCisgIFBUX0Y0MiwKKyAgUFRfRjQzLAor ICBQVF9GNDQsCisgIFBUX0Y0NSwKKyAgUFRfRjQ2LAorICBQVF9GNDcsCisg IFBUX0Y0OCwKKyAgUFRfRjQ5LAorICBQVF9GNTAsCisgIFBUX0Y1MSwKKyAg UFRfRjUyLAorICBQVF9GNTMsCisgIFBUX0Y1NCwKKyAgUFRfRjU1LAorICBQ VF9GNTYsCisgIFBUX0Y1NywKKyAgUFRfRjU4LAorICBQVF9GNTksCisgIFBU X0Y2MCwKKyAgUFRfRjYxLAorICBQVF9GNjIsCisgIFBUX0Y2MywKKyAgUFRf RjY0LAorICBQVF9GNjUsCisgIFBUX0Y2NiwKKyAgUFRfRjY3LAorICBQVF9G NjgsCisgIFBUX0Y2OSwKKyAgUFRfRjcwLAorICBQVF9GNzEsCisgIFBUX0Y3 MiwKKyAgUFRfRjczLAorICBQVF9GNzQsCisgIFBUX0Y3NSwKKyAgUFRfRjc2 LAorICBQVF9GNzcsCisgIFBUX0Y3OCwKKyAgUFRfRjc5LAorICBQVF9GODAs CisgIFBUX0Y4MSwKKyAgUFRfRjgyLAorICBQVF9GODMsCisgIFBUX0Y4NCwK KyAgUFRfRjg1LAorICBQVF9GODYsCisgIFBUX0Y4NywKKyAgUFRfRjg4LAor ICBQVF9GODksCisgIFBUX0Y5MCwKKyAgUFRfRjkxLAorICBQVF9GOTIsCisg IFBUX0Y5MywKKyAgUFRfRjk0LAorICBQVF9GOTUsCisgIFBUX0Y5NiwKKyAg UFRfRjk3LAorICBQVF9GOTgsCisgIFBUX0Y5OSwKKyAgUFRfRjEwMCwKKyAg UFRfRjEwMSwKKyAgUFRfRjEwMiwKKyAgUFRfRjEwMywKKyAgUFRfRjEwNCwK KyAgUFRfRjEwNSwKKyAgUFRfRjEwNiwKKyAgUFRfRjEwNywKKyAgUFRfRjEw OCwKKyAgUFRfRjEwOSwKKyAgUFRfRjExMCwKKyAgUFRfRjExMSwKKyAgUFRf RjExMiwKKyAgUFRfRjExMywKKyAgUFRfRjExNCwKKyAgUFRfRjExNSwKKyAg UFRfRjExNiwKKyAgUFRfRjExNywKKyAgUFRfRjExOCwKKyAgUFRfRjExOSwK KyAgUFRfRjEyMCwKKyAgUFRfRjEyMSwKKyAgUFRfRjEyMiwKKyAgUFRfRjEy MywKKyAgUFRfRjEyNCwKKyAgUFRfRjEyNSwKKyAgUFRfRjEyNiwKKyAgUFRf RjEyNywKKyAgLyogcHJlZGljYXRlIHJlZ2lzdGVycyAtIHdlIGRvbid0IGZl dGNoIHRoZXNlIGluZGl2aWR1YWxseSAqLworICAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsCisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwKKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorICAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLAorICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs CisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgLyogYnJh bmNoIHJlZ2lzdGVycyAqLworICBQVF9CMCwKKyAgUFRfQjEsCisgIFBUX0Iy LAorICBQVF9CMywKKyAgUFRfQjQsCisgIFBUX0I1LAorICBQVF9CNiwKKyAg UFRfQjcsCisgIC8qIHZpcnR1YWwgZnJhbWUgcG9pbnRlciBhbmQgdmlydHVh bCByZXR1cm4gYWRkcmVzcyBwb2ludGVyICovCisgIC0xLCAtMSwKKyAgLyog b3RoZXIgcmVnaXN0ZXJzICovCisgIFBUX1BSLAorICBQVF9DUl9JSVAsCQkJ LyogaXAgKi8KKyAgUFRfQ1JfSVBTUiwJCQkvKiBwc3IgKi8KKyAgUFRfQ0ZN LAkJCS8qIGNmbSAqLworICAvKiBrZXJuZWwgcmVnaXN0ZXJzIG5vdCB2aXNp YmxlIHZpYSBwdHJhY2UgaW50ZXJmYWNlICg/KSAqLworICAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgIC8qIGhvbGUgKi8KKyAgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorICBQVF9BUl9SU0MsCisgIFBU X0FSX0JTUCwKKyAgUFRfQVJfQlNQU1RPUkUsCisgIFBUX0FSX1JOQVQsCisg IC0xLAorICAtMSwJCQkJLyogTm90IGF2YWlsYWJsZTogRkNSLCBJQTMyIGZs b2F0aW5nIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyAgLTEsIC0xLAorICAtMSwJ CQkJLyogTm90IGF2YWlsYWJsZTogRUZMQUcgKi8KKyAgLTEsCQkJCS8qIE5v dCBhdmFpbGFibGU6IENTRCAqLworICAtMSwJCQkJLyogTm90IGF2YWlsYWJs ZTogU1NEICovCisgIC0xLAkJCQkvKiBOb3QgYXZhaWxhYmxlOiBDRkxHICov CisgIC0xLAkJCQkvKiBOb3QgYXZhaWxhYmxlOiBGU1IgKi8KKyAgLTEsCQkJ CS8qIE5vdCBhdmFpbGFibGU6IEZJUiAqLworICAtMSwJCQkJLyogTm90IGF2 YWlsYWJsZTogRkRSICovCisgIC0xLAorICBQVF9BUl9DQ1YsCisgIC0xLCAt MSwgLTEsCisgIFBUX0FSX1VOQVQsCisgIC0xLCAtMSwgLTEsCisgIFBUX0FS X0ZQU1IsCisgIC0xLCAtMSwgLTEsCisgIC0xLAkJCQkvKiBOb3QgYXZhaWxh YmxlOiBJVEMgKi8KKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsCisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsCisgIFBUX0FSX1BGUywKKyAgUFRfQVJfTEMsCisgIC0xLAkJCQkvKiBO b3QgYXZhaWxhYmxlOiBFQywgdGhlIEVwaWxvZyBDb3VudCByZWdpc3RlciAq LworICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwK KyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisg IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorICAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgIC0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorICAtMSwKKyAg LyogbmF0IGJpdHMgLSBub3QgZmV0Y2hlZCBkaXJlY3RseTsgaW5zdGVhZCB3 ZSBvYnRhaW4gdGhlc2UgYml0cyBmcm9tCisgICAgIGVpdGhlciBybmF0IG9y IHVuYXQgb3IgZnJvbSBtZW1vcnkuICovCisgIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwKKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLAorICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLAorICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsCisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwK KyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorICAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCAtMSwKKyAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLAorICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKyAgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLAorICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsCisgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwK K307CiAKIGludAogaWE2NF9yZWdpc3Rlcl91X2FkZHIgKGludCBibG9ja2Vu ZCwgaW50IHJlZ251bSkKQEAgLTU2OSwyMiArNTY5LDMxIEBACiAKICAgb2Zm c2V0ID0gVV9SRUdTX09GRlNFVDsKIAotICByZWdhZGRyID0gcmVnaXN0ZXJf YWRkciAocmVnbm8sIG9mZnNldCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBSRUdJ U1RFUl9SQVdfU0laRSAocmVnbm8pOyBpICs9IHNpemVvZiAoUFRSQUNFX1hG RVJfVFlQRSkpCisjaWZkZWYgIFMzOTBfR05VTElOVVhfVEFSR0VUCS8qIGlu dGVsIGhhcyBDQU5OT1RfRkVUQ0hfUkVHSVNURVIgZGVmaW5lZCBidXQgbm90 IGxpbmtlZCAqLworICBpZiAoQ0FOTk9UX0ZFVENIX1JFR0lTVEVSIChyZWdu bykpCisgICAgbWVtc2V0ICgmcmVnaXN0ZXJzW1JFR0lTVEVSX0JZVEUgKHJl Z25vKV0sIDAsIFJFR0lTVEVSX1JBV19TSVpFIChyZWdubykpOworICBlbHNl CisjZW5kaWYKICAgICB7Ci0gICAgICBlcnJubyA9IDA7Ci0gICAgICAqKFBU UkFDRV9YRkVSX1RZUEUgKikgJnJlZ2lzdGVyc1tSRUdJU1RFUl9CWVRFIChy ZWdubykgKyBpXSA9Ci0JcHRyYWNlIChQVFJBQ0VfUEVFS1VTRVIsIGluZmVy aW9yX3BpZCwgKFBUUkFDRV9BUkczX1RZUEUpIHJlZ2FkZHIsIDApOwotICAg ICAgcmVnYWRkciArPSBzaXplb2YgKFBUUkFDRV9YRkVSX1RZUEUpOwotICAg ICAgaWYgKGVycm5vICE9IDApCisgICAgICByZWdhZGRyID0gcmVnaXN0ZXJf YWRkciAocmVnbm8sIG9mZnNldCk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwg UkVHSVNURVJfUkFXX1NJWkUgKHJlZ25vKTsKKwkgICBpICs9IHNpemVvZiAo UFRSQUNFX1hGRVJfVFlQRSkpCiAJewotCSAgLyogV2FybmluZywgbm90IGVy cm9yLCBpbiBjYXNlIHdlIGFyZSBhdHRhY2hlZDsgc29tZXRpbWVzIHRoZQot CSAgICAga2VybmVsIGRvZXNuJ3QgbGV0IHVzIGF0IHRoZSByZWdpc3RlcnMu ICAqLwotCSAgY2hhciAqZXJyID0gc3RyZXJyb3IgKGVycm5vKTsKLQkgIGNo YXIgKm1zZyA9IGFsbG9jYSAoc3RybGVuIChlcnIpICsgMTI4KTsKLQkgIHNw cmludGYgKG1zZywgInJlYWRpbmcgcmVnaXN0ZXIgJWQ6ICVzIiwgcmVnbm8s IGVycik7Ci0JICBlcnJvciAobXNnKTsKLQkgIGdvdG8gZXJyb3JfZXhpdDsK KwkgIGVycm5vID0gMDsKKwkgICooUFRSQUNFX1hGRVJfVFlQRSAqKSAmIHJl Z2lzdGVyc1tSRUdJU1RFUl9CWVRFIChyZWdubykgKyBpXSA9CisJICAgIHB0 cmFjZSAoUFRSQUNFX1BFRUtVU0VSLCBpbmZlcmlvcl9waWQsIChQVFJBQ0Vf QVJHM19UWVBFKSByZWdhZGRyLAorCQkgICAgMCk7CisJICByZWdhZGRyICs9 IHNpemVvZiAoUFRSQUNFX1hGRVJfVFlQRSk7CisJICBpZiAoZXJybm8gIT0g MCkKKwkgICAgeworCSAgICAgIC8qIFdhcm5pbmcsIG5vdCBlcnJvciwgaW4g Y2FzZSB3ZSBhcmUgYXR0YWNoZWQ7IHNvbWV0aW1lcyB0aGUKKwkgICAgICAg ICBrZXJuZWwgZG9lc24ndCBsZXQgdXMgYXQgdGhlIHJlZ2lzdGVycy4gICov CisJICAgICAgY2hhciAqZXJyID0gc3RyZXJyb3IgKGVycm5vKTsKKwkgICAg ICBjaGFyICptc2cgPSBhbGxvY2EgKHN0cmxlbiAoZXJyKSArIDEyOCk7CisJ ICAgICAgc3ByaW50ZiAobXNnLCAicmVhZGluZyByZWdpc3RlciAlZDogJXMi LCByZWdubywgZXJyKTsKKwkgICAgICBlcnJvciAobXNnKTsKKwkgICAgICBn b3RvIGVycm9yX2V4aXQ7CisJICAgIH0KIAl9CiAgICAgfQogZXJyb3JfZXhp dDo7CkBAIC01OTYsNyArNjA1LDExIEBACiBmZXRjaF9pbmZlcmlvcl9yZWdp c3RlcnMgKGludCByZWdubykKIHsKICAgaWYgKHJlZ25vID09IC0xIHx8IHJl Z25vID09IDApCi0gICAgZm9yIChyZWdubyA9IDA7IHJlZ25vIDwgTlVNX1JF R1MgLSBOVU1fRlJFR1M7IHJlZ25vKyspCisgICAgZm9yIChyZWdubyA9IDA7 IHJlZ25vIDwgTlVNX1JFR1MKKyNpZm5kZWYgUzM5MF9HTlVMSU5VWF9UQVJH RVQKKwkgLSBOVU1fRlJFR1MKKyNlbmRpZgorCSA7IHJlZ25vKyspCiAgICAg ICBmZXRjaF9yZWdpc3RlciAocmVnbm8pOwogICBlbHNlCiAgICAgZmV0Y2hf cmVnaXN0ZXIgKHJlZ25vKTsKQEAgLTYxNSw3ICs2MjgsNyBAQAogCiAgIGlm IChyZWdubyA+PSAwKQogICAgIHsKLSNpZiAwCisjaWZkZWYgIFMzOTBfR05V TElOVVhfVEFSR0VUCS8qIGludGVsIGhhcyBDQU5OT1RfU1RPUkVfUkVHSVNU RVIgZGVmaW5lZCBidXQgbm90IGltcGxlbWVudGVkICovCiAgICAgICBpZiAo Q0FOTk9UX1NUT1JFX1JFR0lTVEVSIChyZWdubykpCiAJcmV0dXJuOwogI2Vu ZGlmCkBAIC02MzcsMTkgKzY1MCwyMCBAQAogCX0KICAgICAgIGVsc2UKICNl bmRpZgotCWZvciAoaSA9IDA7IGkgPCBSRUdJU1RFUl9SQVdfU0laRSAocmVn bm8pOyBpICs9IHNpemVvZiAoaW50KSkKKwlmb3IgKGkgPSAwOyBpIDwgUkVH SVNURVJfUkFXX1NJWkUgKHJlZ25vKTsKKwkgICAgIGkgKz0gc2l6ZW9mIChQ VFJBQ0VfWEZFUl9UWVBFKSkKIAkgIHsKIAkgICAgZXJybm8gPSAwOwogCSAg ICBwdHJhY2UgKFBUUkFDRV9QT0tFVVNFUiwgaW5mZXJpb3JfcGlkLCAoUFRS QUNFX0FSRzNfVFlQRSkgcmVnYWRkciwKLQkJICAgICooaW50ICopICZyZWdp c3RlcnNbUkVHSVNURVJfQllURSAocmVnbm8pICsgaV0pOworCQkgICAgKihQ VFJBQ0VfWEZFUl9UWVBFICopICYgcmVnaXN0ZXJzW1JFR0lTVEVSX0JZVEUg KHJlZ25vKSArCisJCQkJCQkgICAgICBpXSk7CiAJICAgIGlmIChlcnJubyAh PSAwKQogCSAgICAgIHsKIAkJLyogV2FybmluZywgbm90IGVycm9yLCBpbiBj YXNlIHdlIGFyZSBhdHRhY2hlZDsgc29tZXRpbWVzIHRoZQogCQkgICBrZXJu ZWwgZG9lc24ndCBsZXQgdXMgYXQgdGhlIHJlZ2lzdGVycy4gICovCiAJCWNo YXIgKmVyciA9IHN0cmVycm9yIChlcnJubyk7CiAJCWNoYXIgKm1zZyA9IGFs bG9jYSAoc3RybGVuIChlcnIpICsgMTI4KTsKLQkJc3ByaW50ZiAobXNnLCAi d3JpdGluZyByZWdpc3RlciAlZDogJXMiLAotCQkJIHJlZ25vLCBlcnIpOwor CQlzcHJpbnRmIChtc2csICJ3cml0aW5nIHJlZ2lzdGVyICVkOiAlcyIsIHJl Z25vLCBlcnIpOwogCQllcnJvciAobXNnKTsKIAkJcmV0dXJuOwogCSAgICAg IH0KQEAgLTY1Nyw3ICs2NzEsMTEgQEAKIAkgIH0KICAgICB9CiAgIGVsc2UK LSAgICBmb3IgKHJlZ25vID0gMDsgcmVnbm8gPCBOVU1fUkVHUyAtIE5VTV9G UkVHUzsgcmVnbm8rKykKKyAgICBmb3IgKHJlZ25vID0gMDsgcmVnbm8gPCBO VU1fUkVHUworI2lmbmRlZiBTMzkwX0dOVUxJTlVYX1RBUkdFVAorCSAtIE5V TV9GUkVHUworI2VuZGlmCisJIDsgcmVnbm8rKykKICAgICAgIHN0b3JlX2lu ZmVyaW9yX3JlZ2lzdGVycyAocmVnbm8pOwogfQogCkBAIC02NzcsMTEgKzY5 NSwxMSBAQAogICAvKiBSb3VuZCBzdGFydGluZyBhZGRyZXNzIGRvd24gdG8g bG9uZ3dvcmQgYm91bmRhcnkuICAqLwogICByZWdpc3RlciBDT1JFX0FERFIg YWRkciA9IG1lbWFkZHIgJiAtKENPUkVfQUREUikgc2l6ZW9mIChQVFJBQ0Vf WEZFUl9UWVBFKTsKICAgLyogUm91bmQgZW5kaW5nIGFkZHJlc3MgdXA7IGdl dCBudW1iZXIgb2YgbG9uZ3dvcmRzIHRoYXQgbWFrZXMuICAqLwotICByZWdp c3RlciBpbnQgY291bnQgCi0gICAgPSAoKChtZW1hZGRyICsgbGVuKSAtIGFk ZHIpICsgc2l6ZW9mIChQVFJBQ0VfWEZFUl9UWVBFKSAtIDEpIAotICAgICAg LyBzaXplb2YgKFBUUkFDRV9YRkVSX1RZUEUpOworICByZWdpc3RlciBpbnQg Y291bnQKKyAgICA9ICgoKG1lbWFkZHIgKyBsZW4pIC0gYWRkcikgKyBzaXpl b2YgKFBUUkFDRV9YRkVSX1RZUEUpIC0gMSkKKyAgICAvIHNpemVvZiAoUFRS QUNFX1hGRVJfVFlQRSk7CiAgIC8qIEFsbG9jYXRlIGJ1ZmZlciBvZiB0aGF0 IG1hbnkgbG9uZ3dvcmRzLiAgKi8KLSAgcmVnaXN0ZXIgUFRSQUNFX1hGRVJf VFlQRSAqYnVmZmVyIAorICByZWdpc3RlciBQVFJBQ0VfWEZFUl9UWVBFICpi dWZmZXIKICAgICA9IChQVFJBQ0VfWEZFUl9UWVBFICopIGFsbG9jYSAoY291 bnQgKiBzaXplb2YgKFBUUkFDRV9YRkVSX1RZUEUpKTsKIAogICAvKiBSZWFk IGFsbCB0aGUgbG9uZ3dvcmRzICovCkBAIC02OTEsNyArNzA5LDggQEAKICAg ICB9CiAKICAgLyogQ29weSBhcHByb3ByaWF0ZSBieXRlcyBvdXQgb2YgdGhl IGJ1ZmZlci4gICovCi0gIG1lbWNweSAobXlhZGRyLCAoY2hhciAqKSBidWZm ZXIgKyAobWVtYWRkciAmIChzaXplb2YgKFBUUkFDRV9YRkVSX1RZUEUpIC0g MSkpLCBsZW4pOworICBtZW1jcHkgKG15YWRkciwKKwkgIChjaGFyICopIGJ1 ZmZlciArIChtZW1hZGRyICYgKHNpemVvZiAoUFRSQUNFX1hGRVJfVFlQRSkg LSAxKSksIGxlbik7CiB9CiAKIC8qIENvcHkgTEVOIGJ5dGVzIG9mIGRhdGEg ZnJvbSBkZWJ1Z2dlciBtZW1vcnkgYXQgTVlBRERSCkBAIC03MDcsOSArNzI2 LDEyIEBACiAgIHJlZ2lzdGVyIENPUkVfQUREUiBhZGRyID0gbWVtYWRkciAm IC0oQ09SRV9BRERSKSBzaXplb2YgKFBUUkFDRV9YRkVSX1RZUEUpOwogICAv KiBSb3VuZCBlbmRpbmcgYWRkcmVzcyB1cDsgZ2V0IG51bWJlciBvZiBsb25n d29yZHMgdGhhdCBtYWtlcy4gICovCiAgIHJlZ2lzdGVyIGludCBjb3VudAot ICA9ICgoKG1lbWFkZHIgKyBsZW4pIC0gYWRkcikgKyBzaXplb2YgKFBUUkFD RV9YRkVSX1RZUEUpIC0gMSkgLyBzaXplb2YgKFBUUkFDRV9YRkVSX1RZUEUp OworICAgID0KKyAgICAoKChtZW1hZGRyICsgbGVuKSAtIGFkZHIpICsgc2l6 ZW9mIChQVFJBQ0VfWEZFUl9UWVBFKSAtCisgICAgIDEpIC8gc2l6ZW9mIChQ VFJBQ0VfWEZFUl9UWVBFKTsKICAgLyogQWxsb2NhdGUgYnVmZmVyIG9mIHRo YXQgbWFueSBsb25nd29yZHMuICAqLwotICByZWdpc3RlciBQVFJBQ0VfWEZF Ul9UWVBFICpidWZmZXIgPSAoUFRSQUNFX1hGRVJfVFlQRSAqKSBhbGxvY2Eg KGNvdW50ICogc2l6ZW9mIChQVFJBQ0VfWEZFUl9UWVBFKSk7CisgIHJlZ2lz dGVyIFBUUkFDRV9YRkVSX1RZUEUgKmJ1ZmZlciA9CisgICAgKFBUUkFDRV9Y RkVSX1RZUEUgKikgYWxsb2NhIChjb3VudCAqIHNpemVvZiAoUFRSQUNFX1hG RVJfVFlQRSkpOwogICBleHRlcm4gaW50IGVycm5vOwogCiAgIC8qIEZpbGwg c3RhcnQgYW5kIGVuZCBleHRyYSBieXRlcyBvZiBidWZmZXIgd2l0aCBleGlz dGluZyBtZW1vcnkgZGF0YS4gICovCkBAIC03MjUsNyArNzQ3LDggQEAKIAog ICAvKiBDb3B5IGRhdGEgdG8gYmUgd3JpdHRlbiBvdmVyIGNvcnJlc3BvbmRp bmcgcGFydCBvZiBidWZmZXIgKi8KIAotICBtZW1jcHkgKChjaGFyICopIGJ1 ZmZlciArIChtZW1hZGRyICYgKHNpemVvZiAoUFRSQUNFX1hGRVJfVFlQRSkg LSAxKSksIG15YWRkciwgbGVuKTsKKyAgbWVtY3B5ICgoY2hhciAqKSBidWZm ZXIgKyAobWVtYWRkciAmIChzaXplb2YgKFBUUkFDRV9YRkVSX1RZUEUpIC0g MSkpLAorCSAgbXlhZGRyLCBsZW4pOwogCiAgIC8qIFdyaXRlIHRoZSBlbnRp cmUgYnVmZmVyLiAgKi8KIApAQCAtNzQzLDUgKzc2Niw3IEBACiB2b2lkCiBp bml0aWFsaXplX2xvdyAodm9pZCkKIHsKKyNpZm5kZWYgUzM5MF9HTlVMSU5V WF9UQVJHRVQKICAgaW5pdGlhbGl6ZV9hcmNoICgpOworI2VuZGlmCiB9Ci0t LSBzcmMub3JpZy9nZGIvZ2Ric2VydmVyL3JlbW90ZS11dGlscy5jCVRodSBK dWwgMTIgMjM6MDQ6MzUgMjAwMQorKysgc3JjLm5ldy9nZGIvZ2Ric2VydmVy L3JlbW90ZS11dGlscy5jCUZyaSBTZXAgIDcgMjA6NDg6MDIgMjAwMQpAQCAt MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8 c3lzL3RpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx0 YXJnZXQuaD4KIAogaW50IHJlbW90ZV9kZWJ1ZyA9IDA7CiBzdHJ1Y3QgdWlf ZmlsZSAqZ2RiX3N0ZGxvZzsKQEAgLTE0MSw3ICsxNDIsOCBAQAogCiAgICAg ICAvKiBFbmFibGUgVENQIGtlZXAgYWxpdmUgcHJvY2Vzcy4gKi8KICAgICAg IHRtcCA9IDE7Ci0gICAgICBzZXRzb2Nrb3B0ICh0bXBfZGVzYywgU09MX1NP Q0tFVCwgU09fS0VFUEFMSVZFLCAoY2hhciAqKSAmdG1wLCBzaXplb2YgKHRt cCkpOworICAgICAgc2V0c29ja29wdCAodG1wX2Rlc2MsIFNPTF9TT0NLRVQs IFNPX0tFRVBBTElWRSwgKGNoYXIgKikgJnRtcCwKKwkJICBzaXplb2YgKHRt cCkpOwogCiAgICAgICAvKiBUZWxsIFRDUCBub3QgdG8gZGVsYXkgc21hbGwg cGFja2V0cy4gIFRoaXMgZ3JlYXRseSBzcGVlZHMgdXAKICAgICAgICAgIGlu dGVyYWN0aXZlIHJlc3BvbnNlLiAqLwpAQCAtMjc4LDcgKzI4MCw3IEBACiAg ICAgewogICAgICAgaW50IGNjOwogICAgICAgY2hhciBjOwotICAgICAgCisK ICAgICAgIGNjID0gcmVhZCAocmVtb3RlX2Rlc2MsICZjLCAxKTsKIAogICAg ICAgaWYgKGNjICE9IDEgfHwgYyAhPSAnXDAwMycpCkBAIC0yODYsNyArMjg4 LDcgQEAKIAkgIGZwcmludGYgKHN0ZGVyciwgImlucHV0X2ludGVycnVwdCwg Y2MgPSAlZCBjID0gJWRcbiIsIGNjLCBjKTsKIAkgIHJldHVybjsKIAl9Ci0g ICAgICAKKwogICAgICAga2lsbCAoaW5mZXJpb3JfcGlkLCBTSUdJTlQpOwog ICAgIH0KIH0KQEAgLTQ2MywxMCArNDY1LDcgQEAKIAogICAqYnVmKysgPSBz dGF0dXM7CiAKLSAgLyogRklYTUUhICBTaG91bGQgYmUgY29udmVydGluZyB0 aGlzIHNpZ25hbCBudW1iZXIgKG51bWJlcmVkCi0gICAgIGFjY29yZGluZyB0 byB0aGUgc2lnbmFsIG51bWJlcmluZyBvZiB0aGUgc3lzdGVtIHdlIGFyZSBy dW5uaW5nIG9uKQotICAgICB0byB0aGUgc2lnbmFsIG51bWJlcnMgdXNlZCBi eSB0aGUgZ2RiIHByb3RvY29sIChzZWUgZW51bSB0YXJnZXRfc2lnbmFsCi0g ICAgIGluIGdkYi90YXJnZXQuaCkuICAqLworICBzaWdubyA9IHRhcmdldF9z aWduYWxfZnJvbV9ob3N0IChzaWdubyk7CiAgIG5pYiA9ICgoc2lnbm8gJiAw eGYwKSA+PiA0KTsKICAgKmJ1ZisrID0gdG9oZXggKG5pYik7CiAgIG5pYiA9 IHNpZ25vICYgMHgwZjsKQEAgLTQ3NSwxMiArNDc0LDExIEBACiAgIGlmIChz dGF0dXMgPT0gJ1QnKQogICAgIHsKICNpZmRlZiBHREJTRVJWRVJfUkVTVU1F X1JFR1MKLSAgICAgIHN0YXRpYyBpbnQgZ2Ric2VydmVyX3Jlc3VtZV9yZWdz W10gPSBHREJTRVJWRVJfUkVTVU1FX1JFR1MgOworICAgICAgc3RhdGljIGlu dCBnZGJzZXJ2ZXJfcmVzdW1lX3JlZ3NbXSA9IEdEQlNFUlZFUl9SRVNVTUVf UkVHUzsKICAgICAgIGludCBpOwotICAgICAgZm9yIChpID0gMDsgCi0gICAg ICAgICAgIGkgPCBzaXplb2YgKGdkYnNlcnZlcl9yZXN1bWVfcmVncykgCi0J ICAgICAgICAvIHNpemVvZiAoZ2Ric2VydmVyX3Jlc3VtZV9yZWdzWzBdKTsK LQkgICBpKyspCisgICAgICBmb3IgKGkgPSAwOworCSAgIGkgPCBzaXplb2Yg KGdkYnNlcnZlcl9yZXN1bWVfcmVncykKKwkgICAvIHNpemVvZiAoZ2Ric2Vy dmVyX3Jlc3VtZV9yZWdzWzBdKTsgaSsrKQogCXsKIAkgIGludCByZWdudW0g PSBnZGJzZXJ2ZXJfcmVzdW1lX3JlZ3NbaV07CiAJICBidWYgPSBvdXRyZWcg KHJlZ251bSwgYnVmKTsK ------------=_1583534360-29878-9 Content-Type: text/plain; charset=us-ascii; name="=?iso-8859-1?Q?S390ChangeLog.100901.gdb?=" Content-Disposition: inline; filename="=?iso-8859-1?Q?S390ChangeLog.100901.gdb?=" Content-Transfer-Encoding: base64 Content-Length: 1891 MjAwMS0wNy0wOSAgRC5KLiBCYXJyb3cgPGRqYmFycm93QGRlLmlibS5jb20s YmFycm93X2RqQHlhaG9vLmNvbT4KCgkqIHMzOTAtbmF0LmMgOiBOZXcgZmls ZSBBZGRlZCBmb3IgUy8zOTAgMzEgJiA2NCBiaXQgdGFyZ2V0LgoJKiBzMzkw LXRkZXAuYyA6IExpa2V3aXNlLgoJKiBjb25maWcvczM5MC9ubS1saW51eC5o IDogTGlrZXdpc2UuCSAKCSogY29uZmlnL3MzOTAvczM5MHgubXQgOiBMaWtl d2lzZS4KCSogY29uZmlnL3MzOTAvdG0tbGludXguaCAgOiBMaWtld2lzZS4g IAoJKiBjb25maWcvczM5MC94bS1saW51eC5oIDogTGlrZXdpc2UKCSogY29u ZmlnL3MzOTAvczM5MC5taCA6IExpa2V3aXNlLgoJKiBjb25maWcvczM5MC9z MzkwLm10IDogTGlrZXdpc2UuCgkqIGNvbmZpZy9zMzkwL3RtLXMzOTAuaCA6 IExpa2V3aXNlLgogICAgICAgICogY29uZmlnLmluIEFkZGVkIGRlZmluaXRp b25zIGZvciBTLzM5MCAzMSAmIDY0IGJpdCB0YXJnZXQuCgkqIGNvbmZpZ3Vy ZS5ob3N0IDogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZS5pbiA6IExpa2V3aXNl LgoJKiBjb25maWd1cmUudGd0ICA6IExpa2V3aXNlLgoKICAgICAgICAqIGdk YmFyY2guc2ggOiBGaXhlZCBDQUxMX0RVTU1ZX0JSRUFLUE9JTlRfT0ZGU0VU IHRvIGNoZWNrCglDQUxMX0RVTU1ZX0JSRUFLUE9JTlRfT0ZGU0VUX1AuCgoJ KiAvY29uZmlnL3RtLXN5c3Y0LmggOk1hZGUgU0tJUF9UUkFNUE9MSU5FX0NP REUgbXVsdGlhcmNoIGNvbXBhdGlibGUuCgkKICAgICAgICAqIHNpZ25hbHMu YyA6IEZpeGVkIHNvIHRoYXQgdGhlIGdkYnNlcnZlciBjb3VsZCBidWlsZCBp dCB0byB1c2UKCXRhcmdldF9zaWduYWxfdG9faG9zdCAmIHRhcmdldF9zaWdu YWxfZnJvbV9ob3N0CglnZGJzZXJ2ZXIgd2FzIHZlcnkgYnJva2VuICYgaGFk IGEgc2V2ZXJlIGZpeG1lIHdydCBzaWduYWxzLgoKCSogZ2Ric2VydmVyL01h a2VmaWxlLmluIDogTWFkZSBtYWtlZmlsZSBnbyB0byBwYXJlbnQgZGlyZWN0 b3J5IGZvciBzb3VyY2UgZmlsZXMsCgkoIHNvIGFzIHRvIGJ1aWxkIHNpZ25h bC5jICkKCgkqIGdkYnNlcnZlci9sb3ctbGludXguYyA6IEFkZGVkIHMzOTAg MzIvNjQgYml0IHN1cHBvcnQKCUZpeGVkIGFzc3VtcHRpb24gdGhhdCBQVFJB Q0VfWEZFUl9UWVBFIHdhcyBhbiBpbnQKCWFkZGVkIENBTk5PVF9GRVRDSF9S RUdJU1RFUiAmIENBTk5PVF9TVE9SRV9SRUdJU1RFUiBtYWNyb3MuCglGaXhl ZCBmZXRjaF9pbmZlcmlvcl9yZWdpc3RlcnMgZXRjLiB0byB3b3JrIHdpdGgg czM5MCBmbG9hdGluZyBwb2ludCByZWdzLgoKCSogZ2Ric2VydmVyL3NlcnZl ci5jIDogQWRkZWQgdGFyZ2V0IHNpZ25hbCByZW1hcHBpbmcgRklYTUUuCgoJ KiBnZGJzZXJ2ZXIvcmVtb3RlLXV0aWxzIDogTGlrZXdpc2UuCgoKCgoKCg== ------------=_1583534360-29878-9 Content-Type: text/plain; charset=us-ascii; name="=?iso-8859-1?Q?S390ChangeLog.100901.Root?=" Content-Disposition: inline; filename="=?iso-8859-1?Q?S390ChangeLog.100901.Root?=" Content-Transfer-Encoding: base64 Content-Length: 240 MjAwMS0wOC0yMiAgRC5KLiBCYXJyb3cgPGRqYmFycm93QGRlLmlibS5jb20s YmFycm93X2RqQHlhaG9vLmNvbT4KCgkqIGNvbmZpZy5zdWIgOiBBZGRlZCBT LzM5MCAzMSAmIDY0IGJpdCB0YXJnZXQuCgkqIGNvbmZpZ3VyZS5pbiA6IExp a2V3aXNlLgogICAgICAgICogY29uZmlnLmd1ZXNzIDogTGlrZXdpc2Uu ------------=_1583534360-29878-9-- >From jason-swarelist@molenda.com Mon Sep 10 13:04:00 2001 From: Jason Molenda To: gdb-patches@sources.redhat.com Subject: Re: [RFA] bug in symtab.c:lookup_block_symbol()'s search method Date: Mon, 10 Sep 2001 13:04:00 -0000 Message-id: <20010910130347.A5628@shell17.ba.best.com> References: <20010909074800.A8112@shell17.ba.best.com> <3B9D054A.4C3CC2B1@cygnus.com> <20010910113226.A23487@shell17.ba.best.com> <87zo82swwa.fsf@cgsoftware.com> X-SW-Source: 2001-09/msg00146.html Content-length: 1335 On Mon, Sep 10, 2001 at 02:50:29PM -0400, Daniel Berlin wrote: > Your test above isn't quite correct, actually. > There is a corner case of the first character being a space. I don't > think this can ever occur in c or C++, no clue about other languages. The initial binary search in lookup_block_symbol() isn't correct for the same reason - it uses individual character comparisons to determine less-than/greater-than relationships on the first character of the symbol, and then uses the stock strcmp to narrow in on the rest of the symbol. Nevertheless, it all generally works. The binary search gets us to the beginning of the valid matches; the follow-up linear search finds the right symbol. My instinct is to change strcmp_iw() to streq_iw() (as well as all the callers) and add a new strcmp_iw() function which returns a less-than/greater-than relationship instead of just match/not-match. That would be the best way to deal with all of this. IMNSHO gdb 5.1 can not be released with the symbol binary search lookup broken as it has been for the last year. The patch I sent is a conservative one which brings the lookup cost near the original gdb search time. I believe a more correct patch would be to change the behavior of strcmp_iw() so that it can be used here, but that's a slightly more pervasive change. Jason