From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH 18/19] mtd: rawnand: Move ONFI code to nand_onfi.c Date: Fri, 7 Sep 2018 00:38:50 +0200 Message-ID: <20180906223851.6964-19-boris.brezillon@bootlin.com> References: <20180906223851.6964-1-boris.brezillon@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180906223851.6964-1-boris.brezillon@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" To: Boris Brezillon , Richard Weinberger , Miquel Raynal , linux-mtd@lists.infradead.org Cc: Andrew Lunn , Rich Felker , linux-doc@vger.kernel.org, Tony Lindgren , linux-mips@linux-mips.org, Thomas Petazzoni , Robert Jarzmik , Alexander Clouter , devel@driverdev.osuosl.org, Alexander Shiyan , Jonathan Corbet , Gregory CLEMENT , linux-sh@vger.kernel.org, Yoshinori Sato , Marek Vasut , NXP Linux Team , Sebastian Hesselbarth , Jason Cooper , Haojian Zhuang , Krzysztof Halasa , linux-omap@vger.kernel.org, Brian Norris , Ryan Mallon , David Woodhouse List-Id: linux-omap@vger.kernel.org VGhpcyBtb3ZlcyBPTkZJIHJlbGF0ZWQgY29kZSB0byBuYW5kX29uZmkuYyBhbmQgT05GSSByZWxh dGVkCnN0cnVjdC9tYWNyb3MgdG8gaW5jbHVkZS9saW51eC9tdGQvb25maS5oLgoKU2lnbmVkLW9m Zi1ieTogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+Ci0tLQog ZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUgICAgfCAgIDEgKwogZHJpdmVycy9tdGQvbmFu ZC9yYXcvaW50ZXJuYWxzLmggfCAgIDcgKwogZHJpdmVycy9tdGQvbmFuZC9yYXcvbmFuZF9iYXNl LmMgfCAyOTYgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9t dGQvbmFuZC9yYXcvbmFuZF9vbmZpLmMgfCAzMDUgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiBpbmNsdWRlL2xpbnV4L210ZC9vbmZpLmggICAgICAgICB8IDE3OCArKysr KysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9tdGQvcmF3bmFuZC5oICAgICAgfCAx NjQgKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDQ5NiBpbnNlcnRpb25z KCspLCA0NTUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tdGQvbmFu ZC9yYXcvbmFuZF9vbmZpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L210ZC9v bmZpLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZSBiL2RyaXZl cnMvbXRkL25hbmQvcmF3L01ha2VmaWxlCmluZGV4IDc4ZjY3ZGUyZTYwYi4uY2M5ZjUwZjNhZDFi IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZQorKysgYi9kcml2ZXJz L210ZC9uYW5kL3Jhdy9NYWtlZmlsZQpAQCAtNTgsNiArNTgsNyBAQCBvYmotJChDT05GSUdfTVRE X05BTkRfTVRLKQkJKz0gbXRrX2VjYy5vIG10a19uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFO RF9URUdSQSkJCSs9IHRlZ3JhX25hbmQubwogCiBuYW5kLW9ianMgOj0gbmFuZF9iYXNlLm8gbmFu ZF9sZWdhY3kubyBuYW5kX2JidC5vIG5hbmRfdGltaW5ncy5vIG5hbmRfaWRzLm8KK25hbmQtb2Jq cyArPSBuYW5kX29uZmkubwogbmFuZC1vYmpzICs9IG5hbmRfYW1kLm8KIG5hbmQtb2JqcyArPSBu YW5kX2h5bml4Lm8KIG5hbmQtb2JqcyArPSBuYW5kX21hY3Jvbml4Lm8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbXRkL25hbmQvcmF3L2ludGVybmFscy5oIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvaW50 ZXJuYWxzLmgKaW5kZXggMjg5YTRiOGY3OTc0Li4xY2U3MjBhOGQ3NTYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvbXRkL25hbmQvcmF3L2ludGVybmFscy5oCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3 L2ludGVybmFscy5oCkBAIC04OCw4ICs4OCwxMSBAQCBpbnQgbmFuZF9yZWFkX3BhZ2VfcmF3X25v dHN1cHAoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgdTggKmJ1ZiwKIGludCBuYW5kX3dyaXRlX3Bh Z2VfcmF3X25vdHN1cHAoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdTggKmJ1ZiwKIAkJ CQlpbnQgb29iX3JlcXVpcmVkLCBpbnQgcGFnZSk7CiBpbnQgbmFuZF9leGl0X3N0YXR1c19vcChz dHJ1Y3QgbmFuZF9jaGlwICpjaGlwKTsKK2ludCBuYW5kX3JlYWRfcGFyYW1fcGFnZV9vcChzdHJ1 Y3QgbmFuZF9jaGlwICpjaGlwLCB1OCBwYWdlLCB2b2lkICpidWYsCisJCQkgICAgdW5zaWduZWQg aW50IGxlbik7CiB2b2lkIG5hbmRfZGVjb2RlX2V4dF9pZChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlw KTsKIHZvaWQgcGFuaWNfbmFuZF93YWl0KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVuc2lnbmVk IGxvbmcgdGltZW8pOwordm9pZCBzYW5pdGl6ZV9zdHJpbmcodWludDhfdCAqcywgc2l6ZV90IGxl bik7CiAKIC8qIEJCVCBmdW5jdGlvbnMgKi8KIGludCBuYW5kX21hcmtiYWRfYmJ0KHN0cnVjdCBu YW5kX2NoaXAgKmNoaXAsIGxvZmZfdCBvZmZzKTsKQEAgLTEwMSw0ICsxMDQsOCBAQCB2b2lkIG5h bmRfbGVnYWN5X3NldF9kZWZhdWx0cyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKTsKIHZvaWQgbmFu ZF9sZWdhY3lfYWRqdXN0X2NtZGZ1bmMoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCk7CiBpbnQgbmFu ZF9sZWdhY3lfY2hlY2tfaG9va3Moc3RydWN0IG5hbmRfY2hpcCAqY2hpcCk7CiAKKy8qIE9ORkkg ZnVuY3Rpb25zICovCit1MTYgb25maV9jcmMxNih1MTYgY3JjLCB1OCBjb25zdCAqcCwgc2l6ZV90 IGxlbik7CitpbnQgbmFuZF9vbmZpX2RldGVjdChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKTsKKwog I2VuZGlmIC8qIF9fTElOVVhfUkFXTkFORF9JTlRFUk5BTFMgKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvbXRkL25hbmQvcmF3L25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvbmFuZF9i YXNlLmMKaW5kZXggNGVmMDBjZWZkNWRhLi44MTJlOGJkNmFkODIgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvbXRkL25hbmQvcmF3L25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L25h bmRfYmFzZS5jCkBAIC05ODYsOCArOTg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwobmFuZF9yZWFk X3BhZ2Vfb3ApOwogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm9y IGNvZGUgb3RoZXJ3aXNlLgogICovCi1zdGF0aWMgaW50IG5hbmRfcmVhZF9wYXJhbV9wYWdlX29w KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHU4IHBhZ2UsIHZvaWQgKmJ1ZiwKLQkJCQkgICB1bnNp Z25lZCBpbnQgbGVuKQoraW50IG5hbmRfcmVhZF9wYXJhbV9wYWdlX29wKHN0cnVjdCBuYW5kX2No aXAgKmNoaXAsIHU4IHBhZ2UsIHZvaWQgKmJ1ZiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQog ewogCXVuc2lnbmVkIGludCBpOwogCXU4ICpwID0gYnVmOwpAQCAtNDM3MCw3ICs0MzcwLDcgQEAg c3RhdGljIHZvaWQgbmFuZF9zZXRfZGVmYXVsdHMoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCkKIH0K IAogLyogU2FuaXRpemUgT05GSSBzdHJpbmdzIHNvIHdlIGNhbiBzYWZlbHkgcHJpbnQgdGhlbSAq Lwotc3RhdGljIHZvaWQgc2FuaXRpemVfc3RyaW5nKHVpbnQ4X3QgKnMsIHNpemVfdCBsZW4pCit2 b2lkIHNhbml0aXplX3N0cmluZyh1aW50OF90ICpzLCBzaXplX3QgbGVuKQogewogCXNzaXplX3Qg aTsKIApAQCAtNDM4NywyOTQgKzQzODcsNiBAQCBzdGF0aWMgdm9pZCBzYW5pdGl6ZV9zdHJpbmco dWludDhfdCAqcywgc2l6ZV90IGxlbikKIAlzdHJpbShzKTsKIH0KIAotc3RhdGljIHUxNiBvbmZp X2NyYzE2KHUxNiBjcmMsIHU4IGNvbnN0ICpwLCBzaXplX3QgbGVuKQotewotCWludCBpOwotCXdo aWxlIChsZW4tLSkgewotCQljcmMgXj0gKnArKyA8PCA4OwotCQlmb3IgKGkgPSAwOyBpIDwgODsg aSsrKQotCQkJY3JjID0gKGNyYyA8PCAxKSBeICgoY3JjICYgMHg4MDAwKSA/IDB4ODAwNSA6IDAp OwotCX0KLQotCXJldHVybiBjcmM7Ci19Ci0KLS8qIFBhcnNlIHRoZSBFeHRlbmRlZCBQYXJhbWV0 ZXIgUGFnZS4gKi8KLXN0YXRpYyBpbnQgbmFuZF9mbGFzaF9kZXRlY3RfZXh0X3BhcmFtX3BhZ2Uo c3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKLQkJCQkJICAgIHN0cnVjdCBuYW5kX29uZmlfcGFyYW1z ICpwKQotewotCXN0cnVjdCBvbmZpX2V4dF9wYXJhbV9wYWdlICplcDsKLQlzdHJ1Y3Qgb25maV9l eHRfc2VjdGlvbiAqczsKLQlzdHJ1Y3Qgb25maV9leHRfZWNjX2luZm8gKmVjYzsKLQl1aW50OF90 ICpjdXJzb3I7Ci0JaW50IHJldDsKLQlpbnQgbGVuOwotCWludCBpOwotCi0JbGVuID0gbGUxNl90 b19jcHUocC0+ZXh0X3BhcmFtX3BhZ2VfbGVuZ3RoKSAqIDE2OwotCWVwID0ga21hbGxvYyhsZW4s IEdGUF9LRVJORUwpOwotCWlmICghZXApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogU2VuZCBv dXIgb3duIE5BTkRfQ01EX1BBUkFNLiAqLwotCXJldCA9IG5hbmRfcmVhZF9wYXJhbV9wYWdlX29w KGNoaXAsIDAsIE5VTEwsIDApOwotCWlmIChyZXQpCi0JCWdvdG8gZXh0X291dDsKLQotCS8qIFVz ZSB0aGUgQ2hhbmdlIFJlYWQgQ29sdW1uIGNvbW1hbmQgdG8gc2tpcCB0aGUgT05GSSBwYXJhbSBw YWdlcy4gKi8KLQlyZXQgPSBuYW5kX2NoYW5nZV9yZWFkX2NvbHVtbl9vcChjaGlwLAotCQkJCQkg c2l6ZW9mKCpwKSAqIHAtPm51bV9vZl9wYXJhbV9wYWdlcywKLQkJCQkJIGVwLCBsZW4sIHRydWUp OwotCWlmIChyZXQpCi0JCWdvdG8gZXh0X291dDsKLQotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKChv bmZpX2NyYzE2KE9ORklfQ1JDX0JBU0UsICgodWludDhfdCAqKWVwKSArIDIsIGxlbiAtIDIpCi0J CSE9IGxlMTZfdG9fY3B1KGVwLT5jcmMpKSkgewotCQlwcl9kZWJ1ZygiZmFpbCBpbiB0aGUgQ1JD LlxuIik7Ci0JCWdvdG8gZXh0X291dDsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIHRoZSBzaWduYXR1 cmUuCi0JICogRG8gbm90IHN0cmljdGx5IGZvbGxvdyB0aGUgT05GSSBzcGVjLCBtYXliZSBjaGFu Z2VkIGluIGZ1dHVyZS4KLQkgKi8KLQlpZiAoc3RybmNtcChlcC0+c2lnLCAiRVBQUyIsIDQpKSB7 Ci0JCXByX2RlYnVnKCJUaGUgc2lnbmF0dXJlIGlzIGludmFsaWQuXG4iKTsKLQkJZ290byBleHRf b3V0OwotCX0KLQotCS8qIGZpbmQgdGhlIEVDQyBzZWN0aW9uLiAqLwotCWN1cnNvciA9ICh1aW50 OF90ICopKGVwICsgMSk7Ci0JZm9yIChpID0gMDsgaSA8IE9ORklfRVhUX1NFQ1RJT05fTUFYOyBp KyspIHsKLQkJcyA9IGVwLT5zZWN0aW9ucyArIGk7Ci0JCWlmIChzLT50eXBlID09IE9ORklfU0VD VElPTl9UWVBFXzIpCi0JCQlicmVhazsKLQkJY3Vyc29yICs9IHMtPmxlbmd0aCAqIDE2OwotCX0K LQlpZiAoaSA9PSBPTkZJX0VYVF9TRUNUSU9OX01BWCkgewotCQlwcl9kZWJ1ZygiV2UgY2FuIG5v dCBmaW5kIHRoZSBFQ0Mgc2VjdGlvbi5cbiIpOwotCQlnb3RvIGV4dF9vdXQ7Ci0JfQotCi0JLyog Z2V0IHRoZSBpbmZvIHdlIHdhbnQuICovCi0JZWNjID0gKHN0cnVjdCBvbmZpX2V4dF9lY2NfaW5m byAqKWN1cnNvcjsKLQotCWlmICghZWNjLT5jb2Rld29yZF9zaXplKSB7Ci0JCXByX2RlYnVnKCJJ bnZhbGlkIGNvZGV3b3JkIHNpemVcbiIpOwotCQlnb3RvIGV4dF9vdXQ7Ci0JfQotCi0JY2hpcC0+ ZWNjX3N0cmVuZ3RoX2RzID0gZWNjLT5lY2NfYml0czsKLQljaGlwLT5lY2Nfc3RlcF9kcyA9IDEg PDwgZWNjLT5jb2Rld29yZF9zaXplOwotCXJldCA9IDA7Ci0KLWV4dF9vdXQ6Ci0Ja2ZyZWUoZXAp OwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBSZWNvdmVyIGRhdGEgd2l0aCBiaXQtd2lzZSBt YWpvcml0eQotICovCi1zdGF0aWMgdm9pZCBuYW5kX2JpdF93aXNlX21ham9yaXR5KGNvbnN0IHZv aWQgKipzcmNidWZzLAotCQkJCSAgIHVuc2lnbmVkIGludCBuc3JjYnVmcywKLQkJCQkgICB2b2lk ICpkc3RidWYsCi0JCQkJICAgdW5zaWduZWQgaW50IGJ1ZnNpemUpCi17Ci0JaW50IGksIGosIGs7 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYnVmc2l6ZTsgaSsrKSB7Ci0JCXU4IHZhbCA9IDA7Ci0KLQkJ Zm9yIChqID0gMDsgaiA8IDg7IGorKykgewotCQkJdW5zaWduZWQgaW50IGNudCA9IDA7Ci0KLQkJ CWZvciAoayA9IDA7IGsgPCBuc3JjYnVmczsgaysrKSB7Ci0JCQkJY29uc3QgdTggKnNyY2J1ZiA9 IHNyY2J1ZnNba107Ci0KLQkJCQlpZiAoc3JjYnVmW2ldICYgQklUKGopKQotCQkJCQljbnQrKzsK LQkJCX0KLQotCQkJaWYgKGNudCA+IG5zcmNidWZzIC8gMikKLQkJCQl2YWwgfD0gQklUKGopOwot CQl9Ci0KLQkJKCh1OCAqKWRzdGJ1ZilbaV0gPSB2YWw7Ci0JfQotfQotCi0vKgotICogQ2hlY2sg aWYgdGhlIE5BTkQgY2hpcCBpcyBPTkZJIGNvbXBsaWFudCwgcmV0dXJucyAxIGlmIGl0IGlzLCAw IG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCBuYW5kX2ZsYXNoX2RldGVjdF9vbmZpKHN0cnVj dCBuYW5kX2NoaXAgKmNoaXApCi17Ci0Jc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210 ZChjaGlwKTsKLQlzdHJ1Y3QgbmFuZF9vbmZpX3BhcmFtcyAqcDsKLQlzdHJ1Y3Qgb25maV9wYXJh bXMgKm9uZmk7Ci0JaW50IG9uZmlfdmVyc2lvbiA9IDA7Ci0JY2hhciBpZFs0XTsKLQlpbnQgaSwg cmV0LCB2YWw7Ci0KLQkvKiBUcnkgT05GSSBmb3IgdW5rbm93biBjaGlwIG9yIExQICovCi0JcmV0 ID0gbmFuZF9yZWFkaWRfb3AoY2hpcCwgMHgyMCwgaWQsIHNpemVvZihpZCkpOwotCWlmIChyZXQg fHwgc3RybmNtcChpZCwgIk9ORkkiLCA0KSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBPTkZJIGNoaXA6 IGFsbG9jYXRlIGEgYnVmZmVyIHRvIGhvbGQgaXRzIHBhcmFtZXRlciBwYWdlICovCi0JcCA9IGt6 YWxsb2MoKHNpemVvZigqcCkgKiAzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwKQotCQlyZXR1cm4g LUVOT01FTTsKLQotCXJldCA9IG5hbmRfcmVhZF9wYXJhbV9wYWdlX29wKGNoaXAsIDAsIE5VTEws IDApOwotCWlmIChyZXQpIHsKLQkJcmV0ID0gMDsKLQkJZ290byBmcmVlX29uZmlfcGFyYW1fcGFn ZTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXJldCA9IG5hbmRfcmVhZF9k YXRhX29wKGNoaXAsICZwW2ldLCBzaXplb2YoKnApLCB0cnVlKTsKLQkJaWYgKHJldCkgewotCQkJ cmV0ID0gMDsKLQkJCWdvdG8gZnJlZV9vbmZpX3BhcmFtX3BhZ2U7Ci0JCX0KLQotCQlpZiAob25m aV9jcmMxNihPTkZJX0NSQ19CQVNFLCAodTggKikmcFtpXSwgMjU0KSA9PQotCQkJCWxlMTZfdG9f Y3B1KHAtPmNyYykpIHsKLQkJCWlmIChpKQotCQkJCW1lbWNweShwLCAmcFtpXSwgc2l6ZW9mKCpw KSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChpID09IDMpIHsKLQkJY29uc3Qgdm9pZCAq c3JjYnVmc1szXSA9IHtwLCBwICsgMSwgcCArIDJ9OwotCi0JCXByX3dhcm4oIkNvdWxkIG5vdCBm aW5kIGEgdmFsaWQgT05GSSBwYXJhbWV0ZXIgcGFnZSwgdHJ5aW5nIGJpdC13aXNlIG1ham9yaXR5 IHRvIHJlY292ZXIgaXRcbiIpOwotCQluYW5kX2JpdF93aXNlX21ham9yaXR5KHNyY2J1ZnMsIEFS UkFZX1NJWkUoc3JjYnVmcyksIHAsCi0JCQkJICAgICAgIHNpemVvZigqcCkpOwotCi0JCWlmIChv bmZpX2NyYzE2KE9ORklfQ1JDX0JBU0UsICh1OCAqKXAsIDI1NCkgIT0KLQkJCQlsZTE2X3RvX2Nw dShwLT5jcmMpKSB7Ci0JCQlwcl9lcnIoIk9ORkkgcGFyYW1ldGVyIHJlY292ZXJ5IGZhaWxlZCwg YWJvcnRpbmdcbiIpOwotCQkJZ290byBmcmVlX29uZmlfcGFyYW1fcGFnZTsKLQkJfQotCX0KLQot CWlmIChjaGlwLT5tYW51ZmFjdHVyZXIuZGVzYyAmJiBjaGlwLT5tYW51ZmFjdHVyZXIuZGVzYy0+ b3BzICYmCi0JICAgIGNoaXAtPm1hbnVmYWN0dXJlci5kZXNjLT5vcHMtPmZpeHVwX29uZmlfcGFy YW1fcGFnZSkKLQkJY2hpcC0+bWFudWZhY3R1cmVyLmRlc2MtPm9wcy0+Zml4dXBfb25maV9wYXJh bV9wYWdlKGNoaXAsIHApOwotCi0JLyogQ2hlY2sgdmVyc2lvbiAqLwotCXZhbCA9IGxlMTZfdG9f Y3B1KHAtPnJldmlzaW9uKTsKLQlpZiAodmFsICYgT05GSV9WRVJTSU9OXzJfMykKLQkJb25maV92 ZXJzaW9uID0gMjM7Ci0JZWxzZSBpZiAodmFsICYgT05GSV9WRVJTSU9OXzJfMikKLQkJb25maV92 ZXJzaW9uID0gMjI7Ci0JZWxzZSBpZiAodmFsICYgT05GSV9WRVJTSU9OXzJfMSkKLQkJb25maV92 ZXJzaW9uID0gMjE7Ci0JZWxzZSBpZiAodmFsICYgT05GSV9WRVJTSU9OXzJfMCkKLQkJb25maV92 ZXJzaW9uID0gMjA7Ci0JZWxzZSBpZiAodmFsICYgT05GSV9WRVJTSU9OXzFfMCkKLQkJb25maV92 ZXJzaW9uID0gMTA7Ci0KLQlpZiAoIW9uZmlfdmVyc2lvbikgewotCQlwcl9pbmZvKCJ1bnN1cHBv cnRlZCBPTkZJIHZlcnNpb246ICVkXG4iLCB2YWwpOwotCQlnb3RvIGZyZWVfb25maV9wYXJhbV9w YWdlOwotCX0KLQotCXNhbml0aXplX3N0cmluZyhwLT5tYW51ZmFjdHVyZXIsIHNpemVvZihwLT5t YW51ZmFjdHVyZXIpKTsKLQlzYW5pdGl6ZV9zdHJpbmcocC0+bW9kZWwsIHNpemVvZihwLT5tb2Rl bCkpOwotCWNoaXAtPnBhcmFtZXRlcnMubW9kZWwgPSBrc3RyZHVwKHAtPm1vZGVsLCBHRlBfS0VS TkVMKTsKLQlpZiAoIWNoaXAtPnBhcmFtZXRlcnMubW9kZWwpIHsKLQkJcmV0ID0gLUVOT01FTTsK LQkJZ290byBmcmVlX29uZmlfcGFyYW1fcGFnZTsKLQl9Ci0KLQltdGQtPndyaXRlc2l6ZSA9IGxl MzJfdG9fY3B1KHAtPmJ5dGVfcGVyX3BhZ2UpOwotCi0JLyoKLQkgKiBwYWdlc19wZXJfYmxvY2sg YW5kIGJsb2Nrc19wZXJfbHVuIG1heSBub3QgYmUgYSBwb3dlci1vZi0yIHNpemUKLQkgKiAoZG9u J3QgYXNrIG1lIHdobyB0aG91Z2h0IG9mIHRoaXMuLi4pLiBNVEQgYXNzdW1lcyB0aGF0IHRoZXNl Ci0JICogZGltZW5zaW9ucyB3aWxsIGJlIHBvd2VyLW9mLTIsIHNvIGp1c3QgdHJ1bmNhdGUgdGhl IHJlbWFpbmluZyBhcmVhLgotCSAqLwotCW10ZC0+ZXJhc2VzaXplID0gMSA8PCAoZmxzKGxlMzJf dG9fY3B1KHAtPnBhZ2VzX3Blcl9ibG9jaykpIC0gMSk7Ci0JbXRkLT5lcmFzZXNpemUgKj0gbXRk LT53cml0ZXNpemU7Ci0KLQltdGQtPm9vYnNpemUgPSBsZTE2X3RvX2NwdShwLT5zcGFyZV9ieXRl c19wZXJfcGFnZSk7Ci0KLQkvKiBTZWUgZXJhc2VzaXplIGNvbW1lbnQgKi8KLQljaGlwLT5jaGlw c2l6ZSA9IDEgPDwgKGZscyhsZTMyX3RvX2NwdShwLT5ibG9ja3NfcGVyX2x1bikpIC0gMSk7Ci0J Y2hpcC0+Y2hpcHNpemUgKj0gKHVpbnQ2NF90KW10ZC0+ZXJhc2VzaXplICogcC0+bHVuX2NvdW50 OwotCWNoaXAtPmJpdHNfcGVyX2NlbGwgPSBwLT5iaXRzX3Blcl9jZWxsOwotCi0JY2hpcC0+bWF4 X2JiX3Blcl9kaWUgPSBsZTE2X3RvX2NwdShwLT5iYl9wZXJfbHVuKTsKLQljaGlwLT5ibG9ja3Nf cGVyX2RpZSA9IGxlMzJfdG9fY3B1KHAtPmJsb2Nrc19wZXJfbHVuKTsKLQotCWlmIChsZTE2X3Rv X2NwdShwLT5mZWF0dXJlcykgJiBPTkZJX0ZFQVRVUkVfMTZfQklUX0JVUykKLQkJY2hpcC0+b3B0 aW9ucyB8PSBOQU5EX0JVU1dJRFRIXzE2OwotCi0JaWYgKHAtPmVjY19iaXRzICE9IDB4ZmYpIHsK LQkJY2hpcC0+ZWNjX3N0cmVuZ3RoX2RzID0gcC0+ZWNjX2JpdHM7Ci0JCWNoaXAtPmVjY19zdGVw X2RzID0gNTEyOwotCX0gZWxzZSBpZiAob25maV92ZXJzaW9uID49IDIxICYmCi0JCShsZTE2X3Rv X2NwdShwLT5mZWF0dXJlcykgJiBPTkZJX0ZFQVRVUkVfRVhUX1BBUkFNX1BBR0UpKSB7Ci0KLQkJ LyoKLQkJICogVGhlIG5hbmRfZmxhc2hfZGV0ZWN0X2V4dF9wYXJhbV9wYWdlKCkgdXNlcyB0aGUK LQkJICogQ2hhbmdlIFJlYWQgQ29sdW1uIGNvbW1hbmQgd2hpY2ggbWF5YmUgbm90IHN1cHBvcnRl ZAotCQkgKiBieSB0aGUgY2hpcC0+bGVnYWN5LmNtZGZ1bmMuIFNvIHRyeSB0byB1cGRhdGUgdGhl Ci0JCSAqIGNoaXAtPmxlZ2FjeS5jbWRmdW5jIG5vdy4gV2UgZG8gbm90IHJlcGxhY2UgdXNlciBz dXBwbGllZAotCQkgKiBjb21tYW5kIGZ1bmN0aW9uLgotCQkgKi8KLQkJbmFuZF9sZWdhY3lfYWRq dXN0X2NtZGZ1bmMoY2hpcCk7Ci0KLQkJLyogVGhlIEV4dGVuZGVkIFBhcmFtZXRlciBQYWdlIGlz IHN1cHBvcnRlZCBzaW5jZSBPTkZJIDIuMS4gKi8KLQkJaWYgKG5hbmRfZmxhc2hfZGV0ZWN0X2V4 dF9wYXJhbV9wYWdlKGNoaXAsIHApKQotCQkJcHJfd2FybigiRmFpbGVkIHRvIGRldGVjdCBPTkZJ IGV4dGVuZGVkIHBhcmFtIHBhZ2VcbiIpOwotCX0gZWxzZSB7Ci0JCXByX3dhcm4oIkNvdWxkIG5v dCByZXRyaWV2ZSBPTkZJIEVDQyByZXF1aXJlbWVudHNcbiIpOwotCX0KLQotCS8qIFNhdmUgc29t ZSBwYXJhbWV0ZXJzIGZyb20gdGhlIHBhcmFtZXRlciBwYWdlIGZvciBmdXR1cmUgdXNlICovCi0J aWYgKGxlMTZfdG9fY3B1KHAtPm9wdF9jbWQpICYgT05GSV9PUFRfQ01EX1NFVF9HRVRfRkVBVFVS RVMpIHsKLQkJY2hpcC0+cGFyYW1ldGVycy5zdXBwb3J0c19zZXRfZ2V0X2ZlYXR1cmVzID0gdHJ1 ZTsKLQkJYml0bWFwX3NldChjaGlwLT5wYXJhbWV0ZXJzLmdldF9mZWF0dXJlX2xpc3QsCi0JCQkg ICBPTkZJX0ZFQVRVUkVfQUREUl9USU1JTkdfTU9ERSwgMSk7Ci0JCWJpdG1hcF9zZXQoY2hpcC0+ cGFyYW1ldGVycy5zZXRfZmVhdHVyZV9saXN0LAotCQkJICAgT05GSV9GRUFUVVJFX0FERFJfVElN SU5HX01PREUsIDEpOwotCX0KLQotCW9uZmkgPSBremFsbG9jKHNpemVvZigqb25maSksIEdGUF9L RVJORUwpOwotCWlmICghb25maSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZyZWVfbW9k ZWw7Ci0JfQotCi0Jb25maS0+dmVyc2lvbiA9IG9uZmlfdmVyc2lvbjsKLQlvbmZpLT50UFJPRyA9 IGxlMTZfdG9fY3B1KHAtPnRfcHJvZyk7Ci0Jb25maS0+dEJFUlMgPSBsZTE2X3RvX2NwdShwLT50 X2JlcnMpOwotCW9uZmktPnRSID0gbGUxNl90b19jcHUocC0+dF9yKTsKLQlvbmZpLT50Q0NTID0g bGUxNl90b19jcHUocC0+dF9jY3MpOwotCW9uZmktPmFzeW5jX3RpbWluZ19tb2RlID0gbGUxNl90 b19jcHUocC0+YXN5bmNfdGltaW5nX21vZGUpOwotCW9uZmktPnZlbmRvcl9yZXZpc2lvbiA9IGxl MTZfdG9fY3B1KHAtPnZlbmRvcl9yZXZpc2lvbik7Ci0JbWVtY3B5KG9uZmktPnZlbmRvciwgcC0+ dmVuZG9yLCBzaXplb2YocC0+dmVuZG9yKSk7Ci0JY2hpcC0+cGFyYW1ldGVycy5vbmZpID0gb25m aTsKLQotCS8qIElkZW50aWZpY2F0aW9uIGRvbmUsIGZyZWUgdGhlIGZ1bGwgT05GSSBwYXJhbWV0 ZXIgcGFnZSBhbmQgZXhpdCAqLwotCWtmcmVlKHApOwotCi0JcmV0dXJuIDE7Ci0KLWZyZWVfbW9k ZWw6Ci0Ja2ZyZWUoY2hpcC0+cGFyYW1ldGVycy5tb2RlbCk7Ci1mcmVlX29uZmlfcGFyYW1fcGFn ZToKLQlrZnJlZShwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBDaGVjayBpZiB0aGUg TkFORCBjaGlwIGlzIEpFREVDIGNvbXBsaWFudCwgcmV0dXJucyAxIGlmIGl0IGlzLCAwIG90aGVy d2lzZS4KICAqLwpAQCAtNTA3Niw3ICs0Nzg4LDcgQEAgc3RhdGljIGludCBuYW5kX2RldGVjdChz dHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgKnR5cGUpCiAKIAlp ZiAoIXR5cGUtPm5hbWUgfHwgIXR5cGUtPnBhZ2VzaXplKSB7CiAJCS8qIENoZWNrIGlmIHRoZSBj aGlwIGlzIE9ORkkgY29tcGxpYW50ICovCi0JCXJldCA9IG5hbmRfZmxhc2hfZGV0ZWN0X29uZmko Y2hpcCk7CisJCXJldCA9IG5hbmRfb25maV9kZXRlY3QoY2hpcCk7CiAJCWlmIChyZXQgPCAwKQog CQkJcmV0dXJuIHJldDsKIAkJZWxzZSBpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQv bmFuZC9yYXcvbmFuZF9vbmZpLmMgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9uYW5kX29uZmkuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQ4MTg0Y2Y1OTFhZAotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L25hbmRfb25maS5jCkBAIC0wLDAg KzEsMzA1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqICBD b3B5cmlnaHQgKEMpIDIwMDAgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5j b20pCisgKgkJICAyMDAyLTIwMDYgVGhvbWFzIEdsZWl4bmVyICh0Z2x4QGxpbnV0cm9uaXguZGUp CisgKgorICogIENyZWRpdHM6CisgKglEYXZpZCBXb29kaG91c2UgZm9yIGFkZGluZyBtdWx0aWNo aXAgc3VwcG9ydAorICoKKyAqCUFsZXBoIE9uZSBMdGQuIGFuZCBUb2J5IENodXJjaGlsbCBMdGQu IGZvciBzdXBwb3J0aW5nIHRoZQorICoJcmV3b3JrIGZvciAySyBwYWdlIHNpemUgY2hpcHMKKyAq CisgKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIE9ORkkgaGVscGVycy4KKyAqLworCisjaW5jbHVk ZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWxzLmgiCisKK3UxNiBvbmZpX2Ny YzE2KHUxNiBjcmMsIHU4IGNvbnN0ICpwLCBzaXplX3QgbGVuKQoreworCWludCBpOworCXdoaWxl IChsZW4tLSkgeworCQljcmMgXj0gKnArKyA8PCA4OworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsr KQorCQkJY3JjID0gKGNyYyA8PCAxKSBeICgoY3JjICYgMHg4MDAwKSA/IDB4ODAwNSA6IDApOwor CX0KKworCXJldHVybiBjcmM7Cit9CisKKy8qIFBhcnNlIHRoZSBFeHRlbmRlZCBQYXJhbWV0ZXIg UGFnZS4gKi8KK3N0YXRpYyBpbnQgbmFuZF9mbGFzaF9kZXRlY3RfZXh0X3BhcmFtX3BhZ2Uoc3Ry dWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQkJICAgIHN0cnVjdCBuYW5kX29uZmlfcGFyYW1zICpw KQoreworCXN0cnVjdCBvbmZpX2V4dF9wYXJhbV9wYWdlICplcDsKKwlzdHJ1Y3Qgb25maV9leHRf c2VjdGlvbiAqczsKKwlzdHJ1Y3Qgb25maV9leHRfZWNjX2luZm8gKmVjYzsKKwl1aW50OF90ICpj dXJzb3I7CisJaW50IHJldDsKKwlpbnQgbGVuOworCWludCBpOworCisJbGVuID0gbGUxNl90b19j cHUocC0+ZXh0X3BhcmFtX3BhZ2VfbGVuZ3RoKSAqIDE2OworCWVwID0ga21hbGxvYyhsZW4sIEdG UF9LRVJORUwpOworCWlmICghZXApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogU2VuZCBvdXIg b3duIE5BTkRfQ01EX1BBUkFNLiAqLworCXJldCA9IG5hbmRfcmVhZF9wYXJhbV9wYWdlX29wKGNo aXAsIDAsIE5VTEwsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXh0X291dDsKKworCS8qIFVzZSB0 aGUgQ2hhbmdlIFJlYWQgQ29sdW1uIGNvbW1hbmQgdG8gc2tpcCB0aGUgT05GSSBwYXJhbSBwYWdl cy4gKi8KKwlyZXQgPSBuYW5kX2NoYW5nZV9yZWFkX2NvbHVtbl9vcChjaGlwLAorCQkJCQkgc2l6 ZW9mKCpwKSAqIHAtPm51bV9vZl9wYXJhbV9wYWdlcywKKwkJCQkJIGVwLCBsZW4sIHRydWUpOwor CWlmIChyZXQpCisJCWdvdG8gZXh0X291dDsKKworCXJldCA9IC1FSU5WQUw7CisJaWYgKChvbmZp X2NyYzE2KE9ORklfQ1JDX0JBU0UsICgodWludDhfdCAqKWVwKSArIDIsIGxlbiAtIDIpCisJCSE9 IGxlMTZfdG9fY3B1KGVwLT5jcmMpKSkgeworCQlwcl9kZWJ1ZygiZmFpbCBpbiB0aGUgQ1JDLlxu Iik7CisJCWdvdG8gZXh0X291dDsKKwl9CisKKwkvKgorCSAqIENoZWNrIHRoZSBzaWduYXR1cmUu CisJICogRG8gbm90IHN0cmljdGx5IGZvbGxvdyB0aGUgT05GSSBzcGVjLCBtYXliZSBjaGFuZ2Vk IGluIGZ1dHVyZS4KKwkgKi8KKwlpZiAoc3RybmNtcChlcC0+c2lnLCAiRVBQUyIsIDQpKSB7CisJ CXByX2RlYnVnKCJUaGUgc2lnbmF0dXJlIGlzIGludmFsaWQuXG4iKTsKKwkJZ290byBleHRfb3V0 OworCX0KKworCS8qIGZpbmQgdGhlIEVDQyBzZWN0aW9uLiAqLworCWN1cnNvciA9ICh1aW50OF90 ICopKGVwICsgMSk7CisJZm9yIChpID0gMDsgaSA8IE9ORklfRVhUX1NFQ1RJT05fTUFYOyBpKysp IHsKKwkJcyA9IGVwLT5zZWN0aW9ucyArIGk7CisJCWlmIChzLT50eXBlID09IE9ORklfU0VDVElP Tl9UWVBFXzIpCisJCQlicmVhazsKKwkJY3Vyc29yICs9IHMtPmxlbmd0aCAqIDE2OworCX0KKwlp ZiAoaSA9PSBPTkZJX0VYVF9TRUNUSU9OX01BWCkgeworCQlwcl9kZWJ1ZygiV2UgY2FuIG5vdCBm aW5kIHRoZSBFQ0Mgc2VjdGlvbi5cbiIpOworCQlnb3RvIGV4dF9vdXQ7CisJfQorCisJLyogZ2V0 IHRoZSBpbmZvIHdlIHdhbnQuICovCisJZWNjID0gKHN0cnVjdCBvbmZpX2V4dF9lY2NfaW5mbyAq KWN1cnNvcjsKKworCWlmICghZWNjLT5jb2Rld29yZF9zaXplKSB7CisJCXByX2RlYnVnKCJJbnZh bGlkIGNvZGV3b3JkIHNpemVcbiIpOworCQlnb3RvIGV4dF9vdXQ7CisJfQorCisJY2hpcC0+ZWNj X3N0cmVuZ3RoX2RzID0gZWNjLT5lY2NfYml0czsKKwljaGlwLT5lY2Nfc3RlcF9kcyA9IDEgPDwg ZWNjLT5jb2Rld29yZF9zaXplOworCXJldCA9IDA7CisKK2V4dF9vdXQ6CisJa2ZyZWUoZXApOwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZWNvdmVyIGRhdGEgd2l0aCBiaXQtd2lzZSBtYWpv cml0eQorICovCitzdGF0aWMgdm9pZCBuYW5kX2JpdF93aXNlX21ham9yaXR5KGNvbnN0IHZvaWQg KipzcmNidWZzLAorCQkJCSAgIHVuc2lnbmVkIGludCBuc3JjYnVmcywKKwkJCQkgICB2b2lkICpk c3RidWYsCisJCQkJICAgdW5zaWduZWQgaW50IGJ1ZnNpemUpCit7CisJaW50IGksIGosIGs7CisK Kwlmb3IgKGkgPSAwOyBpIDwgYnVmc2l6ZTsgaSsrKSB7CisJCXU4IHZhbCA9IDA7CisKKwkJZm9y IChqID0gMDsgaiA8IDg7IGorKykgeworCQkJdW5zaWduZWQgaW50IGNudCA9IDA7CisKKwkJCWZv ciAoayA9IDA7IGsgPCBuc3JjYnVmczsgaysrKSB7CisJCQkJY29uc3QgdTggKnNyY2J1ZiA9IHNy Y2J1ZnNba107CisKKwkJCQlpZiAoc3JjYnVmW2ldICYgQklUKGopKQorCQkJCQljbnQrKzsKKwkJ CX0KKworCQkJaWYgKGNudCA+IG5zcmNidWZzIC8gMikKKwkJCQl2YWwgfD0gQklUKGopOworCQl9 CisKKwkJKCh1OCAqKWRzdGJ1ZilbaV0gPSB2YWw7CisJfQorfQorCisvKgorICogQ2hlY2sgaWYg dGhlIE5BTkQgY2hpcCBpcyBPTkZJIGNvbXBsaWFudCwgcmV0dXJucyAxIGlmIGl0IGlzLCAwIG90 aGVyd2lzZS4KKyAqLworaW50IG5hbmRfb25maV9kZXRlY3Qoc3RydWN0IG5hbmRfY2hpcCAqY2hp cCkKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOworCXN0cnVj dCBuYW5kX29uZmlfcGFyYW1zICpwOworCXN0cnVjdCBvbmZpX3BhcmFtcyAqb25maTsKKwlpbnQg b25maV92ZXJzaW9uID0gMDsKKwljaGFyIGlkWzRdOworCWludCBpLCByZXQsIHZhbDsKKworCS8q IFRyeSBPTkZJIGZvciB1bmtub3duIGNoaXAgb3IgTFAgKi8KKwlyZXQgPSBuYW5kX3JlYWRpZF9v cChjaGlwLCAweDIwLCBpZCwgc2l6ZW9mKGlkKSk7CisJaWYgKHJldCB8fCBzdHJuY21wKGlkLCAi T05GSSIsIDQpKQorCQlyZXR1cm4gMDsKKworCS8qIE9ORkkgY2hpcDogYWxsb2NhdGUgYSBidWZm ZXIgdG8gaG9sZCBpdHMgcGFyYW1ldGVyIHBhZ2UgKi8KKwlwID0ga3phbGxvYygoc2l6ZW9mKCpw KSAqIDMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0 ID0gbmFuZF9yZWFkX3BhcmFtX3BhZ2Vfb3AoY2hpcCwgMCwgTlVMTCwgMCk7CisJaWYgKHJldCkg eworCQlyZXQgPSAwOworCQlnb3RvIGZyZWVfb25maV9wYXJhbV9wYWdlOworCX0KKworCWZvciAo aSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJcmV0ID0gbmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwgJnBb aV0sIHNpemVvZigqcCksIHRydWUpOworCQlpZiAocmV0KSB7CisJCQlyZXQgPSAwOworCQkJZ290 byBmcmVlX29uZmlfcGFyYW1fcGFnZTsKKwkJfQorCisJCWlmIChvbmZpX2NyYzE2KE9ORklfQ1JD X0JBU0UsICh1OCAqKSZwW2ldLCAyNTQpID09CisJCQkJbGUxNl90b19jcHUocC0+Y3JjKSkgewor CQkJaWYgKGkpCisJCQkJbWVtY3B5KHAsICZwW2ldLCBzaXplb2YoKnApKTsKKwkJCWJyZWFrOwor CQl9CisJfQorCisJaWYgKGkgPT0gMykgeworCQljb25zdCB2b2lkICpzcmNidWZzWzNdID0ge3As IHAgKyAxLCBwICsgMn07CisKKwkJcHJfd2FybigiQ291bGQgbm90IGZpbmQgYSB2YWxpZCBPTkZJ IHBhcmFtZXRlciBwYWdlLCB0cnlpbmcgYml0LXdpc2UgbWFqb3JpdHkgdG8gcmVjb3ZlciBpdFxu Iik7CisJCW5hbmRfYml0X3dpc2VfbWFqb3JpdHkoc3JjYnVmcywgQVJSQVlfU0laRShzcmNidWZz KSwgcCwKKwkJCQkgICAgICAgc2l6ZW9mKCpwKSk7CisKKwkJaWYgKG9uZmlfY3JjMTYoT05GSV9D UkNfQkFTRSwgKHU4ICopcCwgMjU0KSAhPQorCQkJCWxlMTZfdG9fY3B1KHAtPmNyYykpIHsKKwkJ CXByX2VycigiT05GSSBwYXJhbWV0ZXIgcmVjb3ZlcnkgZmFpbGVkLCBhYm9ydGluZ1xuIik7CisJ CQlnb3RvIGZyZWVfb25maV9wYXJhbV9wYWdlOworCQl9CisJfQorCisJaWYgKGNoaXAtPm1hbnVm YWN0dXJlci5kZXNjICYmIGNoaXAtPm1hbnVmYWN0dXJlci5kZXNjLT5vcHMgJiYKKwkgICAgY2hp cC0+bWFudWZhY3R1cmVyLmRlc2MtPm9wcy0+Zml4dXBfb25maV9wYXJhbV9wYWdlKQorCQljaGlw LT5tYW51ZmFjdHVyZXIuZGVzYy0+b3BzLT5maXh1cF9vbmZpX3BhcmFtX3BhZ2UoY2hpcCwgcCk7 CisKKwkvKiBDaGVjayB2ZXJzaW9uICovCisJdmFsID0gbGUxNl90b19jcHUocC0+cmV2aXNpb24p OworCWlmICh2YWwgJiBPTkZJX1ZFUlNJT05fMl8zKQorCQlvbmZpX3ZlcnNpb24gPSAyMzsKKwll bHNlIGlmICh2YWwgJiBPTkZJX1ZFUlNJT05fMl8yKQorCQlvbmZpX3ZlcnNpb24gPSAyMjsKKwll bHNlIGlmICh2YWwgJiBPTkZJX1ZFUlNJT05fMl8xKQorCQlvbmZpX3ZlcnNpb24gPSAyMTsKKwll bHNlIGlmICh2YWwgJiBPTkZJX1ZFUlNJT05fMl8wKQorCQlvbmZpX3ZlcnNpb24gPSAyMDsKKwll bHNlIGlmICh2YWwgJiBPTkZJX1ZFUlNJT05fMV8wKQorCQlvbmZpX3ZlcnNpb24gPSAxMDsKKwor CWlmICghb25maV92ZXJzaW9uKSB7CisJCXByX2luZm8oInVuc3VwcG9ydGVkIE9ORkkgdmVyc2lv bjogJWRcbiIsIHZhbCk7CisJCWdvdG8gZnJlZV9vbmZpX3BhcmFtX3BhZ2U7CisJfQorCisJc2Fu aXRpemVfc3RyaW5nKHAtPm1hbnVmYWN0dXJlciwgc2l6ZW9mKHAtPm1hbnVmYWN0dXJlcikpOwor CXNhbml0aXplX3N0cmluZyhwLT5tb2RlbCwgc2l6ZW9mKHAtPm1vZGVsKSk7CisJY2hpcC0+cGFy YW1ldGVycy5tb2RlbCA9IGtzdHJkdXAocC0+bW9kZWwsIEdGUF9LRVJORUwpOworCWlmICghY2hp cC0+cGFyYW1ldGVycy5tb2RlbCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfb25m aV9wYXJhbV9wYWdlOworCX0KKworCW10ZC0+d3JpdGVzaXplID0gbGUzMl90b19jcHUocC0+Ynl0 ZV9wZXJfcGFnZSk7CisKKwkvKgorCSAqIHBhZ2VzX3Blcl9ibG9jayBhbmQgYmxvY2tzX3Blcl9s dW4gbWF5IG5vdCBiZSBhIHBvd2VyLW9mLTIgc2l6ZQorCSAqIChkb24ndCBhc2sgbWUgd2hvIHRo b3VnaHQgb2YgdGhpcy4uLikuIE1URCBhc3N1bWVzIHRoYXQgdGhlc2UKKwkgKiBkaW1lbnNpb25z IHdpbGwgYmUgcG93ZXItb2YtMiwgc28ganVzdCB0cnVuY2F0ZSB0aGUgcmVtYWluaW5nIGFyZWEu CisJICovCisJbXRkLT5lcmFzZXNpemUgPSAxIDw8IChmbHMobGUzMl90b19jcHUocC0+cGFnZXNf cGVyX2Jsb2NrKSkgLSAxKTsKKwltdGQtPmVyYXNlc2l6ZSAqPSBtdGQtPndyaXRlc2l6ZTsKKwor CW10ZC0+b29ic2l6ZSA9IGxlMTZfdG9fY3B1KHAtPnNwYXJlX2J5dGVzX3Blcl9wYWdlKTsKKwor CS8qIFNlZSBlcmFzZXNpemUgY29tbWVudCAqLworCWNoaXAtPmNoaXBzaXplID0gMSA8PCAoZmxz KGxlMzJfdG9fY3B1KHAtPmJsb2Nrc19wZXJfbHVuKSkgLSAxKTsKKwljaGlwLT5jaGlwc2l6ZSAq PSAodWludDY0X3QpbXRkLT5lcmFzZXNpemUgKiBwLT5sdW5fY291bnQ7CisJY2hpcC0+Yml0c19w ZXJfY2VsbCA9IHAtPmJpdHNfcGVyX2NlbGw7CisKKwljaGlwLT5tYXhfYmJfcGVyX2RpZSA9IGxl MTZfdG9fY3B1KHAtPmJiX3Blcl9sdW4pOworCWNoaXAtPmJsb2Nrc19wZXJfZGllID0gbGUzMl90 b19jcHUocC0+YmxvY2tzX3Blcl9sdW4pOworCisJaWYgKGxlMTZfdG9fY3B1KHAtPmZlYXR1cmVz KSAmIE9ORklfRkVBVFVSRV8xNl9CSVRfQlVTKQorCQljaGlwLT5vcHRpb25zIHw9IE5BTkRfQlVT V0lEVEhfMTY7CisKKwlpZiAocC0+ZWNjX2JpdHMgIT0gMHhmZikgeworCQljaGlwLT5lY2Nfc3Ry ZW5ndGhfZHMgPSBwLT5lY2NfYml0czsKKwkJY2hpcC0+ZWNjX3N0ZXBfZHMgPSA1MTI7CisJfSBl bHNlIGlmIChvbmZpX3ZlcnNpb24gPj0gMjEgJiYKKwkJKGxlMTZfdG9fY3B1KHAtPmZlYXR1cmVz KSAmIE9ORklfRkVBVFVSRV9FWFRfUEFSQU1fUEFHRSkpIHsKKworCQkvKgorCQkgKiBUaGUgbmFu ZF9mbGFzaF9kZXRlY3RfZXh0X3BhcmFtX3BhZ2UoKSB1c2VzIHRoZQorCQkgKiBDaGFuZ2UgUmVh ZCBDb2x1bW4gY29tbWFuZCB3aGljaCBtYXliZSBub3Qgc3VwcG9ydGVkCisJCSAqIGJ5IHRoZSBj aGlwLT5sZWdhY3kuY21kZnVuYy4gU28gdHJ5IHRvIHVwZGF0ZSB0aGUKKwkJICogY2hpcC0+bGVn YWN5LmNtZGZ1bmMgbm93LiBXZSBkbyBub3QgcmVwbGFjZSB1c2VyIHN1cHBsaWVkCisJCSAqIGNv bW1hbmQgZnVuY3Rpb24uCisJCSAqLworCQluYW5kX2xlZ2FjeV9hZGp1c3RfY21kZnVuYyhjaGlw KTsKKworCQkvKiBUaGUgRXh0ZW5kZWQgUGFyYW1ldGVyIFBhZ2UgaXMgc3VwcG9ydGVkIHNpbmNl IE9ORkkgMi4xLiAqLworCQlpZiAobmFuZF9mbGFzaF9kZXRlY3RfZXh0X3BhcmFtX3BhZ2UoY2hp cCwgcCkpCisJCQlwcl93YXJuKCJGYWlsZWQgdG8gZGV0ZWN0IE9ORkkgZXh0ZW5kZWQgcGFyYW0g cGFnZVxuIik7CisJfSBlbHNlIHsKKwkJcHJfd2FybigiQ291bGQgbm90IHJldHJpZXZlIE9ORkkg RUNDIHJlcXVpcmVtZW50c1xuIik7CisJfQorCisJLyogU2F2ZSBzb21lIHBhcmFtZXRlcnMgZnJv bSB0aGUgcGFyYW1ldGVyIHBhZ2UgZm9yIGZ1dHVyZSB1c2UgKi8KKwlpZiAobGUxNl90b19jcHUo cC0+b3B0X2NtZCkgJiBPTkZJX09QVF9DTURfU0VUX0dFVF9GRUFUVVJFUykgeworCQljaGlwLT5w YXJhbWV0ZXJzLnN1cHBvcnRzX3NldF9nZXRfZmVhdHVyZXMgPSB0cnVlOworCQliaXRtYXBfc2V0 KGNoaXAtPnBhcmFtZXRlcnMuZ2V0X2ZlYXR1cmVfbGlzdCwKKwkJCSAgIE9ORklfRkVBVFVSRV9B RERSX1RJTUlOR19NT0RFLCAxKTsKKwkJYml0bWFwX3NldChjaGlwLT5wYXJhbWV0ZXJzLnNldF9m ZWF0dXJlX2xpc3QsCisJCQkgICBPTkZJX0ZFQVRVUkVfQUREUl9USU1JTkdfTU9ERSwgMSk7CisJ fQorCisJb25maSA9IGt6YWxsb2Moc2l6ZW9mKCpvbmZpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFv bmZpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9tb2RlbDsKKwl9CisKKwlvbmZp LT52ZXJzaW9uID0gb25maV92ZXJzaW9uOworCW9uZmktPnRQUk9HID0gbGUxNl90b19jcHUocC0+ dF9wcm9nKTsKKwlvbmZpLT50QkVSUyA9IGxlMTZfdG9fY3B1KHAtPnRfYmVycyk7CisJb25maS0+ dFIgPSBsZTE2X3RvX2NwdShwLT50X3IpOworCW9uZmktPnRDQ1MgPSBsZTE2X3RvX2NwdShwLT50 X2Njcyk7CisJb25maS0+YXN5bmNfdGltaW5nX21vZGUgPSBsZTE2X3RvX2NwdShwLT5hc3luY190 aW1pbmdfbW9kZSk7CisJb25maS0+dmVuZG9yX3JldmlzaW9uID0gbGUxNl90b19jcHUocC0+dmVu ZG9yX3JldmlzaW9uKTsKKwltZW1jcHkob25maS0+dmVuZG9yLCBwLT52ZW5kb3IsIHNpemVvZihw LT52ZW5kb3IpKTsKKwljaGlwLT5wYXJhbWV0ZXJzLm9uZmkgPSBvbmZpOworCisJLyogSWRlbnRp ZmljYXRpb24gZG9uZSwgZnJlZSB0aGUgZnVsbCBPTkZJIHBhcmFtZXRlciBwYWdlIGFuZCBleGl0 ICovCisJa2ZyZWUocCk7CisKKwlyZXR1cm4gMTsKKworZnJlZV9tb2RlbDoKKwlrZnJlZShjaGlw LT5wYXJhbWV0ZXJzLm1vZGVsKTsKK2ZyZWVfb25maV9wYXJhbV9wYWdlOgorCWtmcmVlKHApOwor CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL29uZmkuaCBi L2luY2x1ZGUvbGludXgvbXRkL29uZmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjMzOWFjNzk4NTY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgv bXRkL29uZmkuaApAQCAtMCwwICsxLDE3OCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwMC0yMDEwIERhdmlkIFdvb2Rob3Vz ZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqCQkJIFN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVh bGl0eWRpbHV0ZWQuY29tPgorICoJCQkgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXgu ZGU+CisgKgorICogQ29udGFpbnMgYWxsIE9ORkkgcmVsYXRlZCBkZWZpbml0aW9ucworICovCisK KyNpZm5kZWYgX19MSU5VWF9NVERfT05GSV9ICisjZGVmaW5lIF9fTElOVVhfTVREX09ORklfSAor CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogT05GSSB2ZXJzaW9uIGJpdHMgKi8KKyNk ZWZpbmUgT05GSV9WRVJTSU9OXzFfMAkJQklUKDEpCisjZGVmaW5lIE9ORklfVkVSU0lPTl8yXzAJ CUJJVCgyKQorI2RlZmluZSBPTkZJX1ZFUlNJT05fMl8xCQlCSVQoMykKKyNkZWZpbmUgT05GSV9W RVJTSU9OXzJfMgkJQklUKDQpCisjZGVmaW5lIE9ORklfVkVSU0lPTl8yXzMJCUJJVCg1KQorI2Rl ZmluZSBPTkZJX1ZFUlNJT05fM18wCQlCSVQoNikKKyNkZWZpbmUgT05GSV9WRVJTSU9OXzNfMQkJ QklUKDcpCisjZGVmaW5lIE9ORklfVkVSU0lPTl8zXzIJCUJJVCg4KQorI2RlZmluZSBPTkZJX1ZF UlNJT05fNF8wCQlCSVQoOSkKKworLyogT05GSSBmZWF0dXJlcyAqLworI2RlZmluZSBPTkZJX0ZF QVRVUkVfMTZfQklUX0JVUwkJKDEgPDwgMCkKKyNkZWZpbmUgT05GSV9GRUFUVVJFX0VYVF9QQVJB TV9QQUdFCSgxIDw8IDcpCisKKy8qIE9ORkkgdGltaW5nIG1vZGUsIHVzZWQgaW4gYm90aCBhc3lu Y2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIG1vZGUgKi8KKyNkZWZpbmUgT05GSV9USU1JTkdfTU9E RV8wCQkoMSA8PCAwKQorI2RlZmluZSBPTkZJX1RJTUlOR19NT0RFXzEJCSgxIDw8IDEpCisjZGVm aW5lIE9ORklfVElNSU5HX01PREVfMgkJKDEgPDwgMikKKyNkZWZpbmUgT05GSV9USU1JTkdfTU9E RV8zCQkoMSA8PCAzKQorI2RlZmluZSBPTkZJX1RJTUlOR19NT0RFXzQJCSgxIDw8IDQpCisjZGVm aW5lIE9ORklfVElNSU5HX01PREVfNQkJKDEgPDwgNSkKKyNkZWZpbmUgT05GSV9USU1JTkdfTU9E RV9VTktOT1dOCSgxIDw8IDYpCisKKy8qIE9ORkkgZmVhdHVyZSBudW1iZXIvYWRkcmVzcyAqLwor I2RlZmluZSBPTkZJX0ZFQVRVUkVfTlVNQkVSCQkyNTYKKyNkZWZpbmUgT05GSV9GRUFUVVJFX0FE RFJfVElNSU5HX01PREUJMHgxCisKKy8qIFZlbmRvci1zcGVjaWZpYyBmZWF0dXJlIGFkZHJlc3Mg KE1pY3JvbikgKi8KKyNkZWZpbmUgT05GSV9GRUFUVVJFX0FERFJfUkVBRF9SRVRSWQkweDg5Cisj ZGVmaW5lIE9ORklfRkVBVFVSRV9PTl9ESUVfRUNDCQkweDkwCisjZGVmaW5lICAgT05GSV9GRUFU VVJFX09OX0RJRV9FQ0NfRU4JQklUKDMpCisKKy8qIE9ORkkgc3ViZmVhdHVyZSBwYXJhbWV0ZXJz IGxlbmd0aCAqLworI2RlZmluZSBPTkZJX1NVQkZFQVRVUkVfUEFSQU1fTEVOCTQKKworLyogT05G SSBvcHRpb25hbCBjb21tYW5kcyBTRVQvR0VUIEZFQVRVUkVTIHN1cHBvcnRlZD8gKi8KKyNkZWZp bmUgT05GSV9PUFRfQ01EX1NFVF9HRVRfRkVBVFVSRVMJKDEgPDwgMikKKworc3RydWN0IG5hbmRf b25maV9wYXJhbXMgeworCS8qIHJldiBpbmZvIGFuZCBmZWF0dXJlcyBibG9jayAqLworCS8qICdP JyAnTicgJ0YnICdJJyAgKi8KKwl1OCBzaWdbNF07CisJX19sZTE2IHJldmlzaW9uOworCV9fbGUx NiBmZWF0dXJlczsKKwlfX2xlMTYgb3B0X2NtZDsKKwl1OCByZXNlcnZlZDBbMl07CisJX19sZTE2 IGV4dF9wYXJhbV9wYWdlX2xlbmd0aDsgLyogc2luY2UgT05GSSAyLjEgKi8KKwl1OCBudW1fb2Zf cGFyYW1fcGFnZXM7ICAgICAgICAvKiBzaW5jZSBPTkZJIDIuMSAqLworCXU4IHJlc2VydmVkMVsx N107CisKKwkvKiBtYW51ZmFjdHVyZXIgaW5mb3JtYXRpb24gYmxvY2sgKi8KKwljaGFyIG1hbnVm YWN0dXJlclsxMl07CisJY2hhciBtb2RlbFsyMF07CisJdTggamVkZWNfaWQ7CisJX19sZTE2IGRh dGVfY29kZTsKKwl1OCByZXNlcnZlZDJbMTNdOworCisJLyogbWVtb3J5IG9yZ2FuaXphdGlvbiBi bG9jayAqLworCV9fbGUzMiBieXRlX3Blcl9wYWdlOworCV9fbGUxNiBzcGFyZV9ieXRlc19wZXJf cGFnZTsKKwlfX2xlMzIgZGF0YV9ieXRlc19wZXJfcHBhZ2U7CisJX19sZTE2IHNwYXJlX2J5dGVz X3Blcl9wcGFnZTsKKwlfX2xlMzIgcGFnZXNfcGVyX2Jsb2NrOworCV9fbGUzMiBibG9ja3NfcGVy X2x1bjsKKwl1OCBsdW5fY291bnQ7CisJdTggYWRkcl9jeWNsZXM7CisJdTggYml0c19wZXJfY2Vs bDsKKwlfX2xlMTYgYmJfcGVyX2x1bjsKKwlfX2xlMTYgYmxvY2tfZW5kdXJhbmNlOworCXU4IGd1 YXJhbnRlZWRfZ29vZF9ibG9ja3M7CisJX19sZTE2IGd1YXJhbnRlZWRfYmxvY2tfZW5kdXJhbmNl OworCXU4IHByb2dyYW1zX3Blcl9wYWdlOworCXU4IHBwYWdlX2F0dHI7CisJdTggZWNjX2JpdHM7 CisJdTggaW50ZXJsZWF2ZWRfYml0czsKKwl1OCBpbnRlcmxlYXZlZF9vcHM7CisJdTggcmVzZXJ2 ZWQzWzEzXTsKKworCS8qIGVsZWN0cmljYWwgcGFyYW1ldGVyIGJsb2NrICovCisJdTggaW9fcGlu X2NhcGFjaXRhbmNlX21heDsKKwlfX2xlMTYgYXN5bmNfdGltaW5nX21vZGU7CisJX19sZTE2IHBy b2dyYW1fY2FjaGVfdGltaW5nX21vZGU7CisJX19sZTE2IHRfcHJvZzsKKwlfX2xlMTYgdF9iZXJz OworCV9fbGUxNiB0X3I7CisJX19sZTE2IHRfY2NzOworCV9fbGUxNiBzcmNfc3luY190aW1pbmdf bW9kZTsKKwl1OCBzcmNfc3N5bmNfZmVhdHVyZXM7CisJX19sZTE2IGNsa19waW5fY2FwYWNpdGFu Y2VfdHlwOworCV9fbGUxNiBpb19waW5fY2FwYWNpdGFuY2VfdHlwOworCV9fbGUxNiBpbnB1dF9w aW5fY2FwYWNpdGFuY2VfdHlwOworCXU4IGlucHV0X3Bpbl9jYXBhY2l0YW5jZV9tYXg7CisJdTgg ZHJpdmVyX3N0cmVuZ3RoX3N1cHBvcnQ7CisJX19sZTE2IHRfaW50X3I7CisJX19sZTE2IHRfYWRs OworCXU4IHJlc2VydmVkNFs4XTsKKworCS8qIHZlbmRvciAqLworCV9fbGUxNiB2ZW5kb3JfcmV2 aXNpb247CisJdTggdmVuZG9yWzg4XTsKKworCV9fbGUxNiBjcmM7Cit9IF9fcGFja2VkOworCisj ZGVmaW5lIE9ORklfQ1JDX0JBU0UJMHg0RjRFCisKKy8qIEV4dGVuZGVkIEVDQyBpbmZvcm1hdGlv biBCbG9jayBEZWZpbml0aW9uIChzaW5jZSBPTkZJIDIuMSkgKi8KK3N0cnVjdCBvbmZpX2V4dF9l Y2NfaW5mbyB7CisJdTggZWNjX2JpdHM7CisJdTggY29kZXdvcmRfc2l6ZTsKKwlfX2xlMTYgYmJf cGVyX2x1bjsKKwlfX2xlMTYgYmxvY2tfZW5kdXJhbmNlOworCXU4IHJlc2VydmVkWzJdOworfSBf X3BhY2tlZDsKKworI2RlZmluZSBPTkZJX1NFQ1RJT05fVFlQRV8wCTAJLyogVW51c2VkIHNlY3Rp b24uICovCisjZGVmaW5lIE9ORklfU0VDVElPTl9UWVBFXzEJMQkvKiBmb3IgYWRkaXRpb25hbCBz ZWN0aW9ucy4gKi8KKyNkZWZpbmUgT05GSV9TRUNUSU9OX1RZUEVfMgkyCS8qIGZvciBFQ0MgaW5m b3JtYXRpb24uICovCitzdHJ1Y3Qgb25maV9leHRfc2VjdGlvbiB7CisJdTggdHlwZTsKKwl1OCBs ZW5ndGg7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE9ORklfRVhUX1NFQ1RJT05fTUFYIDgKKwor LyogRXh0ZW5kZWQgUGFyYW1ldGVyIFBhZ2UgRGVmaW5pdGlvbiAoc2luY2UgT05GSSAyLjEpICov CitzdHJ1Y3Qgb25maV9leHRfcGFyYW1fcGFnZSB7CisJX19sZTE2IGNyYzsKKwl1OCBzaWdbNF07 ICAgICAgICAgICAgIC8qICdFJyAnUCcgJ1AnICdTJyAqLworCXU4IHJlc2VydmVkMFsxMF07CisJ c3RydWN0IG9uZmlfZXh0X3NlY3Rpb24gc2VjdGlvbnNbT05GSV9FWFRfU0VDVElPTl9NQVhdOwor CisJLyoKKwkgKiBUaGUgYWN0dWFsIHNpemUgb2YgdGhlIEV4dGVuZGVkIFBhcmFtZXRlciBQYWdl IGlzIGluCisJICogQGV4dF9wYXJhbV9wYWdlX2xlbmd0aCBvZiBuYW5kX29uZmlfcGFyYW1ze30u CisJICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhcmlhYmxlIGxlbmd0aCBzZWN0aW9ucy4KKwkg KiBTbyB3ZSBkbyBub3QgYWRkIGFueSBmaWVsZHMgYmVsb3cuIFBsZWFzZSBzZWUgdGhlIE9ORkkg c3BlYy4KKwkgKi8KK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IG9uZmlfcGFyYW1zIC0g T05GSSBzcGVjaWZpYyBwYXJhbWV0ZXJzIHRoYXQgd2lsbCBiZSByZXVzZWQKKyAqIEB2ZXJzaW9u OiBPTkZJIHZlcnNpb24gKEJDRCBlbmNvZGVkKSwgMCBpZiBPTkZJIGlzIG5vdCBzdXBwb3J0ZWQK KyAqIEB0UFJPRzogUGFnZSBwcm9ncmFtIHRpbWUKKyAqIEB0QkVSUzogQmxvY2sgZXJhc2UgdGlt ZQorICogQHRSOiBQYWdlIHJlYWQgdGltZQorICogQHRDQ1M6IENoYW5nZSBjb2x1bW4gc2V0dXAg dGltZQorICogQGFzeW5jX3RpbWluZ19tb2RlOiBTdXBwb3J0ZWQgYXN5bmNocm9ub3VzIHRpbWlu ZyBtb2RlCisgKiBAdmVuZG9yX3JldmlzaW9uOiBWZW5kb3Igc3BlY2lmaWMgcmV2aXNpb24gbnVt YmVyCisgKiBAdmVuZG9yOiBWZW5kb3Igc3BlY2lmaWMgZGF0YQorICovCitzdHJ1Y3Qgb25maV9w YXJhbXMgeworCWludCB2ZXJzaW9uOworCXUxNiB0UFJPRzsKKwl1MTYgdEJFUlM7CisJdTE2IHRS OworCXUxNiB0Q0NTOworCXUxNiBhc3luY190aW1pbmdfbW9kZTsKKwl1MTYgdmVuZG9yX3Jldmlz aW9uOworCXU4IHZlbmRvcls4OF07Cit9OworCisjZW5kaWYgLyogX19MSU5VWF9NVERfT05GSV9I ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9yYXduYW5kLmggYi9pbmNsdWRlL2xp bnV4L210ZC9yYXduYW5kLmgKaW5kZXggZmJlNzY4NmNmYzU5Li5mNGZjMGNjZTdjNTUgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3Jhd25hbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210 ZC9yYXduYW5kLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+ CiAjaW5jbHVkZSA8bGludXgvbXRkL2ZsYXNoY2hpcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9i Ym0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvb25maS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+ CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIApAQCAtMjA0LDE0NyArMjA1LDYgQEAgZW51bSBu YW5kX2VjY19hbGdvIHsKICNkZWZpbmUgTkFORF9DSV9DRUxMVFlQRV9NU0sJMHgwQwogI2RlZmlu ZSBOQU5EX0NJX0NFTExUWVBFX1NISUZUCTIKIAotLyogT05GSSB2ZXJzaW9uIGJpdHMgKi8KLSNk ZWZpbmUgT05GSV9WRVJTSU9OXzFfMAkJQklUKDEpCi0jZGVmaW5lIE9ORklfVkVSU0lPTl8yXzAJ CUJJVCgyKQotI2RlZmluZSBPTkZJX1ZFUlNJT05fMl8xCQlCSVQoMykKLSNkZWZpbmUgT05GSV9W RVJTSU9OXzJfMgkJQklUKDQpCi0jZGVmaW5lIE9ORklfVkVSU0lPTl8yXzMJCUJJVCg1KQotI2Rl ZmluZSBPTkZJX1ZFUlNJT05fM18wCQlCSVQoNikKLSNkZWZpbmUgT05GSV9WRVJTSU9OXzNfMQkJ QklUKDcpCi0jZGVmaW5lIE9ORklfVkVSU0lPTl8zXzIJCUJJVCg4KQotI2RlZmluZSBPTkZJX1ZF UlNJT05fNF8wCQlCSVQoOSkKLQotLyogT05GSSBmZWF0dXJlcyAqLwotI2RlZmluZSBPTkZJX0ZF QVRVUkVfMTZfQklUX0JVUwkJKDEgPDwgMCkKLSNkZWZpbmUgT05GSV9GRUFUVVJFX0VYVF9QQVJB TV9QQUdFCSgxIDw8IDcpCi0KLS8qIE9ORkkgdGltaW5nIG1vZGUsIHVzZWQgaW4gYm90aCBhc3lu Y2hyb25vdXMgYW5kIHN5bmNocm9ub3VzIG1vZGUgKi8KLSNkZWZpbmUgT05GSV9USU1JTkdfTU9E RV8wCQkoMSA8PCAwKQotI2RlZmluZSBPTkZJX1RJTUlOR19NT0RFXzEJCSgxIDw8IDEpCi0jZGVm aW5lIE9ORklfVElNSU5HX01PREVfMgkJKDEgPDwgMikKLSNkZWZpbmUgT05GSV9USU1JTkdfTU9E RV8zCQkoMSA8PCAzKQotI2RlZmluZSBPTkZJX1RJTUlOR19NT0RFXzQJCSgxIDw8IDQpCi0jZGVm aW5lIE9ORklfVElNSU5HX01PREVfNQkJKDEgPDwgNSkKLSNkZWZpbmUgT05GSV9USU1JTkdfTU9E RV9VTktOT1dOCSgxIDw8IDYpCi0KLS8qIE9ORkkgZmVhdHVyZSBudW1iZXIvYWRkcmVzcyAqLwot I2RlZmluZSBPTkZJX0ZFQVRVUkVfTlVNQkVSCQkyNTYKLSNkZWZpbmUgT05GSV9GRUFUVVJFX0FE RFJfVElNSU5HX01PREUJMHgxCi0KLS8qIFZlbmRvci1zcGVjaWZpYyBmZWF0dXJlIGFkZHJlc3Mg KE1pY3JvbikgKi8KLSNkZWZpbmUgT05GSV9GRUFUVVJFX0FERFJfUkVBRF9SRVRSWQkweDg5Ci0j ZGVmaW5lIE9ORklfRkVBVFVSRV9PTl9ESUVfRUNDCQkweDkwCi0jZGVmaW5lICAgT05GSV9GRUFU VVJFX09OX0RJRV9FQ0NfRU4JQklUKDMpCi0KLS8qIE9ORkkgc3ViZmVhdHVyZSBwYXJhbWV0ZXJz IGxlbmd0aCAqLwotI2RlZmluZSBPTkZJX1NVQkZFQVRVUkVfUEFSQU1fTEVOCTQKLQotLyogT05G SSBvcHRpb25hbCBjb21tYW5kcyBTRVQvR0VUIEZFQVRVUkVTIHN1cHBvcnRlZD8gKi8KLSNkZWZp bmUgT05GSV9PUFRfQ01EX1NFVF9HRVRfRkVBVFVSRVMJKDEgPDwgMikKLQotc3RydWN0IG5hbmRf b25maV9wYXJhbXMgewotCS8qIHJldiBpbmZvIGFuZCBmZWF0dXJlcyBibG9jayAqLwotCS8qICdP JyAnTicgJ0YnICdJJyAgKi8KLQl1OCBzaWdbNF07Ci0JX19sZTE2IHJldmlzaW9uOwotCV9fbGUx NiBmZWF0dXJlczsKLQlfX2xlMTYgb3B0X2NtZDsKLQl1OCByZXNlcnZlZDBbMl07Ci0JX19sZTE2 IGV4dF9wYXJhbV9wYWdlX2xlbmd0aDsgLyogc2luY2UgT05GSSAyLjEgKi8KLQl1OCBudW1fb2Zf cGFyYW1fcGFnZXM7ICAgICAgICAvKiBzaW5jZSBPTkZJIDIuMSAqLwotCXU4IHJlc2VydmVkMVsx N107Ci0KLQkvKiBtYW51ZmFjdHVyZXIgaW5mb3JtYXRpb24gYmxvY2sgKi8KLQljaGFyIG1hbnVm YWN0dXJlclsxMl07Ci0JY2hhciBtb2RlbFsyMF07Ci0JdTggamVkZWNfaWQ7Ci0JX19sZTE2IGRh dGVfY29kZTsKLQl1OCByZXNlcnZlZDJbMTNdOwotCi0JLyogbWVtb3J5IG9yZ2FuaXphdGlvbiBi bG9jayAqLwotCV9fbGUzMiBieXRlX3Blcl9wYWdlOwotCV9fbGUxNiBzcGFyZV9ieXRlc19wZXJf cGFnZTsKLQlfX2xlMzIgZGF0YV9ieXRlc19wZXJfcHBhZ2U7Ci0JX19sZTE2IHNwYXJlX2J5dGVz X3Blcl9wcGFnZTsKLQlfX2xlMzIgcGFnZXNfcGVyX2Jsb2NrOwotCV9fbGUzMiBibG9ja3NfcGVy X2x1bjsKLQl1OCBsdW5fY291bnQ7Ci0JdTggYWRkcl9jeWNsZXM7Ci0JdTggYml0c19wZXJfY2Vs bDsKLQlfX2xlMTYgYmJfcGVyX2x1bjsKLQlfX2xlMTYgYmxvY2tfZW5kdXJhbmNlOwotCXU4IGd1 YXJhbnRlZWRfZ29vZF9ibG9ja3M7Ci0JX19sZTE2IGd1YXJhbnRlZWRfYmxvY2tfZW5kdXJhbmNl OwotCXU4IHByb2dyYW1zX3Blcl9wYWdlOwotCXU4IHBwYWdlX2F0dHI7Ci0JdTggZWNjX2JpdHM7 Ci0JdTggaW50ZXJsZWF2ZWRfYml0czsKLQl1OCBpbnRlcmxlYXZlZF9vcHM7Ci0JdTggcmVzZXJ2 ZWQzWzEzXTsKLQotCS8qIGVsZWN0cmljYWwgcGFyYW1ldGVyIGJsb2NrICovCi0JdTggaW9fcGlu X2NhcGFjaXRhbmNlX21heDsKLQlfX2xlMTYgYXN5bmNfdGltaW5nX21vZGU7Ci0JX19sZTE2IHBy b2dyYW1fY2FjaGVfdGltaW5nX21vZGU7Ci0JX19sZTE2IHRfcHJvZzsKLQlfX2xlMTYgdF9iZXJz OwotCV9fbGUxNiB0X3I7Ci0JX19sZTE2IHRfY2NzOwotCV9fbGUxNiBzcmNfc3luY190aW1pbmdf bW9kZTsKLQl1OCBzcmNfc3N5bmNfZmVhdHVyZXM7Ci0JX19sZTE2IGNsa19waW5fY2FwYWNpdGFu Y2VfdHlwOwotCV9fbGUxNiBpb19waW5fY2FwYWNpdGFuY2VfdHlwOwotCV9fbGUxNiBpbnB1dF9w aW5fY2FwYWNpdGFuY2VfdHlwOwotCXU4IGlucHV0X3Bpbl9jYXBhY2l0YW5jZV9tYXg7Ci0JdTgg ZHJpdmVyX3N0cmVuZ3RoX3N1cHBvcnQ7Ci0JX19sZTE2IHRfaW50X3I7Ci0JX19sZTE2IHRfYWRs OwotCXU4IHJlc2VydmVkNFs4XTsKLQotCS8qIHZlbmRvciAqLwotCV9fbGUxNiB2ZW5kb3JfcmV2 aXNpb247Ci0JdTggdmVuZG9yWzg4XTsKLQotCV9fbGUxNiBjcmM7Ci19IF9fcGFja2VkOwotCi0j ZGVmaW5lIE9ORklfQ1JDX0JBU0UJMHg0RjRFCi0KLS8qIEV4dGVuZGVkIEVDQyBpbmZvcm1hdGlv biBCbG9jayBEZWZpbml0aW9uIChzaW5jZSBPTkZJIDIuMSkgKi8KLXN0cnVjdCBvbmZpX2V4dF9l Y2NfaW5mbyB7Ci0JdTggZWNjX2JpdHM7Ci0JdTggY29kZXdvcmRfc2l6ZTsKLQlfX2xlMTYgYmJf cGVyX2x1bjsKLQlfX2xlMTYgYmxvY2tfZW5kdXJhbmNlOwotCXU4IHJlc2VydmVkWzJdOwotfSBf X3BhY2tlZDsKLQotI2RlZmluZSBPTkZJX1NFQ1RJT05fVFlQRV8wCTAJLyogVW51c2VkIHNlY3Rp b24uICovCi0jZGVmaW5lIE9ORklfU0VDVElPTl9UWVBFXzEJMQkvKiBmb3IgYWRkaXRpb25hbCBz ZWN0aW9ucy4gKi8KLSNkZWZpbmUgT05GSV9TRUNUSU9OX1RZUEVfMgkyCS8qIGZvciBFQ0MgaW5m b3JtYXRpb24uICovCi1zdHJ1Y3Qgb25maV9leHRfc2VjdGlvbiB7Ci0JdTggdHlwZTsKLQl1OCBs ZW5ndGg7Ci19IF9fcGFja2VkOwotCi0jZGVmaW5lIE9ORklfRVhUX1NFQ1RJT05fTUFYIDgKLQot LyogRXh0ZW5kZWQgUGFyYW1ldGVyIFBhZ2UgRGVmaW5pdGlvbiAoc2luY2UgT05GSSAyLjEpICov Ci1zdHJ1Y3Qgb25maV9leHRfcGFyYW1fcGFnZSB7Ci0JX19sZTE2IGNyYzsKLQl1OCBzaWdbNF07 ICAgICAgICAgICAgIC8qICdFJyAnUCcgJ1AnICdTJyAqLwotCXU4IHJlc2VydmVkMFsxMF07Ci0J c3RydWN0IG9uZmlfZXh0X3NlY3Rpb24gc2VjdGlvbnNbT05GSV9FWFRfU0VDVElPTl9NQVhdOwot Ci0JLyoKLQkgKiBUaGUgYWN0dWFsIHNpemUgb2YgdGhlIEV4dGVuZGVkIFBhcmFtZXRlciBQYWdl IGlzIGluCi0JICogQGV4dF9wYXJhbV9wYWdlX2xlbmd0aCBvZiBuYW5kX29uZmlfcGFyYW1ze30u Ci0JICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhcmlhYmxlIGxlbmd0aCBzZWN0aW9ucy4KLQkg KiBTbyB3ZSBkbyBub3QgYWRkIGFueSBmaWVsZHMgYmVsb3cuIFBsZWFzZSBzZWUgdGhlIE9ORkkg c3BlYy4KLQkgKi8KLX0gX19wYWNrZWQ7Ci0KIHN0cnVjdCBqZWRlY19lY2NfaW5mbyB7CiAJdTgg ZWNjX2JpdHM7CiAJdTggY29kZXdvcmRfc2l6ZTsKQEAgLTQyMywyOCArMjgzLDYgQEAgc3RydWN0 IG5hbmRfamVkZWNfcGFyYW1zIHsKIAlfX2xlMTYgY3JjOwogfSBfX3BhY2tlZDsKIAotLyoqCi0g KiBzdHJ1Y3Qgb25maV9wYXJhbXMgLSBPTkZJIHNwZWNpZmljIHBhcmFtZXRlcnMgdGhhdCB3aWxs IGJlIHJldXNlZAotICogQHZlcnNpb246IE9ORkkgdmVyc2lvbiAoQkNEIGVuY29kZWQpLCAwIGlm IE9ORkkgaXMgbm90IHN1cHBvcnRlZAotICogQHRQUk9HOiBQYWdlIHByb2dyYW0gdGltZQotICog QHRCRVJTOiBCbG9jayBlcmFzZSB0aW1lCi0gKiBAdFI6IFBhZ2UgcmVhZCB0aW1lCi0gKiBAdEND UzogQ2hhbmdlIGNvbHVtbiBzZXR1cCB0aW1lCi0gKiBAYXN5bmNfdGltaW5nX21vZGU6IFN1cHBv cnRlZCBhc3luY2hyb25vdXMgdGltaW5nIG1vZGUKLSAqIEB2ZW5kb3JfcmV2aXNpb246IFZlbmRv ciBzcGVjaWZpYyByZXZpc2lvbiBudW1iZXIKLSAqIEB2ZW5kb3I6IFZlbmRvciBzcGVjaWZpYyBk YXRhCi0gKi8KLXN0cnVjdCBvbmZpX3BhcmFtcyB7Ci0JaW50IHZlcnNpb247Ci0JdTE2IHRQUk9H OwotCXUxNiB0QkVSUzsKLQl1MTYgdFI7Ci0JdTE2IHRDQ1M7Ci0JdTE2IGFzeW5jX3RpbWluZ19t b2RlOwotCXUxNiB2ZW5kb3JfcmV2aXNpb247Ci0JdTggdmVuZG9yWzg4XTsKLX07Ci0KIC8qKgog ICogc3RydWN0IG5hbmRfcGFyYW1ldGVycyAtIE5BTkQgZ2VuZXJpYyBwYXJhbWV0ZXJzIGZyb20g dGhlIHBhcmFtZXRlciBwYWdlCiAgKiBAbW9kZWw6IE1vZGVsIG5hbWUKLS0gCjIuMTQuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZGV2ZWwgbWFpbGlu ZyBsaXN0CmRldmVsQGxpbnV4ZHJpdmVycHJvamVjdC5vcmcKaHR0cDovL2RyaXZlcmRldi5saW51 eGRyaXZlcnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vZHJpdmVyZGV2LWRldmVsCg==