From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Geoffrey D. Bennett" Subject: [PATCH RFC RESEND] ALSA: usb-audio: Scarlett mixer interface for 18i20 Gen 2 Date: Wed, 24 Apr 2019 09:28:42 +0930 Message-ID: <20190423235842.GA3614@b4.vu> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from b4.vu (b4.vu [203.16.231.147]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id D3B3FF80730 for ; Wed, 24 Apr 2019 01:58:49 +0200 (CEST) Received: from b4.vu (localhost.localdomain [127.0.0.1]) by b4.vu (8.13.8/8.13.8) with ESMTP id x3NNwhrq003657 for ; Wed, 24 Apr 2019 09:28:43 +0930 Received: (from g@localhost) by b4.vu (8.13.8/8.13.8/Submit) id x3NNwg8i003656 for alsa-devel@alsa-project.org; Wed, 24 Apr 2019 09:28:42 +0930 Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" To: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org QWRkIG1peGVyIHF1aXJrIGZvciB0aGUgRm9jdXNyaXRlIFNjYXJsZXR0IDE4aTIwIEdlbiAyIGF1 ZGlvCmludGVyZmFjZS4gQWx0aG91Z2ggdGhlIGludGVyZmFjZSBpcyBVU0IgY29tcGxpYW50LCBh ZGRpdGlvbmFsCmhhcmR3YXJlIG1peGluZywgcm91dGluZywgYW5kIG1ldGVyaW5nIGZ1bmN0aW9u YWxpdHkgaXMgYXZhaWxhYmxlCnVzaW5nIHByb3ByaWV0YXJ5IFVTQiByZXF1ZXN0cy4KClNpZ25l ZC1vZmYtYnk6IEdlb2ZmcmV5IEQuIEJlbm5ldHQgPGdAYjQudnU+Ci0tLQoocGluZyByZXNlbmQg KG5vIGNoYW5nZXMpIGFzIG5vIGZlZWRiYWNrIHJlY2VpdmVkIGZvciAzIHdlZWtzKQoKSGkgYWxs LAoKVGhpcyBwYXRjaCBhZGRzIHRoZSBmb2xsb3dpbmcgY29udHJvbHMgZm9yIHRoZSBTY2FybGV0 dCAxOGkyMCBHZW4gMjoKLSBNYXN0ZXIgdm9sdW1lIGtub2IgaW5kaWNhdG9yCi0gVm9sdW1lIGNv bnRyb2xzIGZvciB0aGUgMTAgYW5hbG9ndWUgSFcgb3V0cHV0cwotIEhXL1NXIHZvbHVtZSBzd2l0 Y2hlcyBmb3IgdGhlIDEwIGFuYWxvZ3VlIEhXIG91dHB1dHMKLSBPdXRwdXQgbXV4ICh3aGVyZSB0 aGUgc291bmQgZm9yIHRoZSBIVyBvdXRwdXRzIGNvbWVzIGZyb207IGRlZmF1bHRzCiAgdG8gUENN IG91dHB1dHMgMS0yMCkKLSBDYXB0dXJlIG11eCAod2hlcmUgdGhlIHNvdW5kIGZvciBQQ00gcmVj b3JkaW5nIGNvbWVzIGZyb207IGRlZmF1bHRzCiAgdG8gSFcgaW5wdXRzIDEtMTgpCi0gTWF0cml4 IG11eCAod2hlcmUgdGhlIHNvdW5kIGdvaW5nIGludG8gdGhlIG1peGVyIGNvbWVzIGZyb207IDE4 CiAgaW5wdXRzIGRlZmF1bHQgb2ZmKQotIE1peGVyIG1hdHJpeCAoMTggaW5wdXRzICogMTAgb3V0 cHV0cyA9IDE4MCBjb250cm9scykKLSBNdXRlIGFuZCBkaW0gaW5kaWNhdG9ycwotIExldmVsIG1l dGVycwoKVGhpcyBpcyBteSBmaXJzdCBhdHRlbXB0IGF0IHdyaXRpbmcgYW55IGtlcm5lbCBkZXZp Y2UgZHJpdmVyIGNvZGUsIHNvCmFwb2xvZ2llcyBpbiBhZHZhbmNlIGlmIEkgbWlzc2VkIHNvbWV0 aGluZy4gVGhlcmUncyBhIGNvdXBsZSBvZgp0aGluZ3MgSSdtIHBhcnRpY3VsYXJseSB1bnN1cmUg YWJvdXQ6CgotIEkgYWRkZWQgYSBwcml2YXRlIGZpZWxkIHRvIHN0cnVjdCBzbmRfdXNiX2F1ZGlv IGZvciBzdG9yaW5nIHRoZQogIHByaXZhdGUgbWl4ZXIgZGF0YS4gVGhpcyBzZWVtcyB3cm9uZywg YnV0IEkgZGlkbid0IGtub3cgd2hlcmUgZWxzZSBJCiAgY291bGQvc2hvdWxkIHB1dCB0aGF0IGRh dGEuCgotIEkndmUgI2RlZmluZSdkIHRoZSB2ZW5kb3Itc3BlY2lmaWMgaW50ZXJmYWNlLCBlbmRw b2ludCwgbWF4X2RhdGEsCiAgYW5kIGludGVydmFsIHZhbHVlcy4gSXMgaXQgb2theSB0byBsZWF2 ZSB0aGVzZSBoYXJkLWNvZGVkICh0aGV5CiAgbWF0Y2ggdGhlIHZhbHVlcyBwcm92aWRlZCBieSBs c3VzYiAtdjsgSSBwcmVzdW1lIHRoZXkgbmV2ZXIKICBjaGFuZ2U/KSwgb3Igc2hvdWxkIHRoZXkg YmUgbG9va2VkIHVwIGF0IHJ1bnRpbWUgaW5zdGVhZD8gKGFuZCBpZiBhdAogIHJ1bnRpbWUsIGhv dz8pCgotIEknbSBub3Qgc3VyZSBpZiB0aG9zZSBzbmRfcHJpbnRrKClzIGZvciB1bmV4cGVjdGVk IHJlc3BvbnNlcyBmcm9tCiAgdGhlIGhhcmR3YXJlIHNob3VsZCBiZSBsZWZ0IGluIHRoZXJlPyBS ZW1vdmVkPyBSZXdvcmRlZD8KCkNvbW1lbnRzIGFuZCBmZWVkYmFjayB3b3VsZCBiZSB2ZXJ5IHdl bGNvbWUuCgpSZWdhcmRzLApHZW9mZnJleS4KCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvTWFrZWZp bGUgYi9zb3VuZC91c2IvTWFrZWZpbGUKaW5kZXggZDMzMGY3NGM5MGU2Li44Y2Y3MDgxZTE3Y2Ig MTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9NYWtlZmlsZQorKysgYi9zb3VuZC91c2IvTWFrZWZpbGUK QEAgLTExLDYgKzExLDcgQEAgc25kLXVzYi1hdWRpby1vYmpzIDo9IAljYXJkLm8gXAogCQkJbWl4 ZXIubyBcCiAJCQltaXhlcl9xdWlya3MubyBcCiAJCQltaXhlcl9zY2FybGV0dC5vIFwKKwkJCW1p eGVyX3NjYXJsZXR0X2dlbjIubyBcCiAJCQltaXhlcl91czE2eDA4Lm8gXAogCQkJcGNtLm8gXAog CQkJcG93ZXIubyBcCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FyZC5jIGIvc291bmQvdXNiL2Nh cmQuYwppbmRleCA3NDZhNzJlMjNjZjkuLjA2YmQ4MzllOWFiMiAxMDA2NDQKLS0tIGEvc291bmQv dXNiL2NhcmQuYworKysgYi9zb3VuZC91c2IvY2FyZC5jCkBAIC0zNTQsNiArMzU0LDggQEAgc3Rh dGljIHZvaWQgc25kX3VzYl9hdWRpb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKIAlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXAsIG4sICZjaGlwLT5lcF9saXN0LCBsaXN0KQogCQlzbmRf dXNiX2VuZHBvaW50X2ZyZWUoZXApOwogCisJa2ZyZWUoY2hpcC0+cHJpdmF0ZSk7CisKIAltdXRl eF9kZXN0cm95KCZjaGlwLT5tdXRleCk7CiAJaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+c2h1dGRv d24pKQogCQlkZXZfc2V0X2RydmRhdGEoJmNoaXAtPmRldi0+ZGV2LCBOVUxMKTsKZGlmZiAtLWdp dCBhL3NvdW5kL3VzYi9taXhlcl9xdWlya3MuYyBiL3NvdW5kL3VzYi9taXhlcl9xdWlya3MuYwpp bmRleCA4NWFlMGZmMjM4MmEuLjMzMWYwNTk2ZTQyZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL21p eGVyX3F1aXJrcy5jCisrKyBiL3NvdW5kL3VzYi9taXhlcl9xdWlya3MuYwpAQCAtNDUsNiArNDUs NyBAQAogI2luY2x1ZGUgIm1peGVyLmgiCiAjaW5jbHVkZSAibWl4ZXJfcXVpcmtzLmgiCiAjaW5j bHVkZSAibWl4ZXJfc2NhcmxldHQuaCIKKyNpbmNsdWRlICJtaXhlcl9zY2FybGV0dF9nZW4yLmgi CiAjaW5jbHVkZSAibWl4ZXJfdXMxNngwOC5oIgogI2luY2x1ZGUgImhlbHBlci5oIgogCkBAIC0y MjczLDYgKzIyNzQsMTAgQEAgaW50IHNuZF91c2JfbWl4ZXJfYXBwbHlfY3JlYXRlX3F1aXJrKHN0 cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcikKIAkJZXJyID0gc25kX3NjYXJsZXR0X2Nv bnRyb2xzX2NyZWF0ZShtaXhlcik7CiAJCWJyZWFrOwogCisJY2FzZSBVU0JfSUQoMHgxMjM1LCAw eDgyMDEpOiAvKiBGb2N1c3JpdGUgU2NhcmxldHQgMThpMjAgMm5kIEdlbiAqLworCQllcnIgPSBz bmRfc2NhcmxldHRfZ2VuMl9jb250cm9sc19jcmVhdGUobWl4ZXIpOworCQlicmVhazsKKwogCWNh c2UgVVNCX0lEKDB4MDQxZSwgMHgzMjNiKTogLyogQ3JlYXRpdmUgU291bmQgQmxhc3RlciBFMSAq LwogCQllcnIgPSBzbmRfc291bmRibGFzdGVyX2UxX3N3aXRjaF9jcmVhdGUobWl4ZXIpOwogCQli cmVhazsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlcl9zY2FybGV0dF9nZW4yLmMgYi9zb3Vu ZC91c2IvbWl4ZXJfc2NhcmxldHRfZ2VuMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uOTQzYjY1ZmYyN2YxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiL21p eGVyX3NjYXJsZXR0X2dlbjIuYwpAQCAtMCwwICsxLDE1OTIgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogICBGb2N1c3JpdGUgU2NhcmxldHQgMThpMjAgR2Vu IDIgRHJpdmVyIGZvciBBTFNBCisgKgorICogICBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBieSBH ZW9mZnJleSBELiBCZW5uZXR0CisgKgorICogICBCYXNlZCBvbiB0aGUgU2NhcmxldHQgKEdlbiAx KSBEcml2ZXIgZm9yIEFMU0E6CisgKgorICogICBDb3B5cmlnaHQgKGMpIDIwMTMgYnkgVG9iaWFz IEhvZmZtYW5uCisgKiAgIENvcHlyaWdodCAoYykgMjAxMyBieSBSb2JpbiBHYXJldXMgPHJvYmlu IGF0IGdhcmV1cy5vcmc+CisgKiAgIENvcHlyaWdodCAoYykgMjAwMiBieSBUYWthc2hpIEl3YWkg PHRpd2FpIGF0IHN1c2UuZGU+CisgKiAgIENvcHlyaWdodCAoYykgMjAxNCBieSBDaHJpcyBKIEFy Z2VzIDxjaHJpcy5qLmFyZ2VzIGF0IGNhbm9uaWNhbC5jb20+CisgKgorICogICBNYW55IGNvZGVz IGJvcnJvd2VkIGZyb20gYXVkaW8uYyBieQorICogICAgIEFsYW4gQ294IChhbGFuIGF0IGx4b3Jn dWsudWt1dS5vcmcudWspCisgKiAgICAgVGhvbWFzIFNhaWxlciAoc2FpbGVyIGF0IGlmZS5lZS5l dGh6LmNoKQorICoKKyAqICAgQ29kZSBjbGVhbnVwOgorICogICBEYXZpZCBIZW5uaW5nc3NvbiA8 ZGF2aWQuaGVubmluZ3Nzb24gYXQgY2Fub25pY2FsLmNvbT4KKyAqCisgKiAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqLworCisvKiBNaXhlciBJbnRlcmZhY2UgZm9yIHRoZSBGb2N1c3JpdGUgU2NhcmxldHQgMThp MjAgR2VuIDIgYXVkaW8KKyAqIGludGVyZmFjZS4gQmFzZWQgb24gdGhlIEdlbiAxIGRyaXZlciBh bmQgcmV3cml0dGVuLgorICovCisKKy8qIFRoZSBwcm90b2NvbCB3YXMgcmV2ZXJzZSBlbmdpbmVl cmVkIGJ5IGxvb2tpbmcgYXQgdGhlIGNvbW11bmljYXRpb24KKyAqIGJldHdlZW4gRm9jdXNyaXRl IENvbnRyb2wgMi4zLjQgYW5kIHRoZSBGb2N1c3JpdGUoUikgU2NhcmxldHQgMThpMjAKKyAqIChm aXJtd2FyZSAxMDgzKSB1c2luZyB1c2Jtb24gaW4gSnVseS1BdWd1c3QgMjAxOC4KKyAqCisgKiBU aGlzIEFMU0EgbWl4ZXIgZ2l2ZXMgYWNjZXNzIHRvOgorICogIC0gaW5wdXQsIG91dHB1dCwgbWl4 ZXItbWF0cml4IG11eGVzCisgKiAgLSAxOHgxMCBtaXhlci1tYXRyaXggZ2FpbiBzdGFnZXMKKyAq ICAtIGdhaW4vdm9sdW1lIGNvbnRyb2xzCisgKiAgLSBsZXZlbCBtZXRlcnMKKyAqCisgKiA8ZGl0 YWE+CisgKiAgICAvLS0tLS0tLS0tLS0tLS1cICAgIDE4Y2huICAgICAgICAgICAgMjBjaG4gICAg IC8tLS0tLS0tLS0tLS0tLVwKKyAqICAgIHwgSGFyZHdhcmUgIGluICstLSstLS0tLS1cICAgIC8t LS0tLS0tLS0tLS0tKy0tKyBBTFNBIFBDTSBvdXQgfAorICogICAgXC0tLS0tLS0tLS0tLS0tLyAg fCAgICAgIHwgICAgfCAgICAgICAgICAgICB8ICBcLS0tLS0tLS0tLS0tLS0vCisgKiAgICAgICAg ICAgICAgICAgICAgICB8ICAgICAgfCAgICB8ICAgIC8tLS0tLVwgIHwKKyAqICAgICAgICAgICAg ICAgICAgICAgIHwgICAgICB8ICAgIHwgICAgfCAgICAgfCAgfAorICogICAgICAgICAgICAgICAg ICAgICAgfCAgICAgIHYgICAgdiAgICB2ICAgICB8ICB8CisgKiAgICAgICAgICAgICAgICAgICAg ICB8ICAgKy0tLS0tLS0tLS0tLS0tLSsgIHwgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwg ICAgXCBNYXRyaXggIE11eCAvICAgfCAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCAgICAg Ky0tLS0tKy0tLS0tKyAgICB8ICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg ICB8ICAgICAgICAgIHwgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwx OGNobiAgICAgfCAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAg ICAgICB8ICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAxMGNo bnwgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHYgICAgICAgICAgfCAg fAorICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tLSsgICB8ICB8Cisg KiAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IE1peGVyICAgICAgfCAgIHwgIHwKKyAqICAg ICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgIE1hdHJpeCB8ICAgfCAgfAorICogICAgICAg ICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgIHwgICB8ICB8CisgKiAgICAgICAgICAg ICAgICAgICAgICB8ICAgICB8IDE4eDEwIEdhaW4gfCAgIHwgIHwKKyAqICAgICAgICAgICAgICAg ICAgICAgIHwgICAgIHwgICBzdGFnZXMgICB8ICAgfCAgfAorICogICAgICAgICAgICAgICAgICAg ICAgfCAgICAgKy0tLS0tKy0tLS0tLSsgICB8ICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICB8ICAgICAgICAgIHwgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwxOGNo biAgICAgIHwxMGNobiAgICAgfCAgfDIwY2huCisgKiAgICAgICAgICAgICAgICAgICAgICB8ICAg ICAgICAgICB8ICAgICAgICAgIHwgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgICstLS0tLS0tLS0tLyAgfAorICogICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg fCAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgICB2ICAg ICAgICAgICAgIHYKKyAqICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09 PT09PT09PQorICogICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICArLS3igJQt LS0tLS0tLS0tLS0rCisgKiAgICAgICAgICAgICAgICBcIE91dHB1dCAgTXV4IC8gICAgICAgICBc IENhcHR1cmUgTXV4IC8KKyAqICAgICAgICAgICAgICAgICArLS0tKy0tLSstLS0rICAgICAgICAg ICArLS0tLS0rLS0tLS0rCisgKiAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgICAg ICAgICAgICAgfAorICogICAgICAgICAgICAgICAgMTBjaG58ICAgfCAgICAgICAgICAgICAgICAg ICAgIHwxOGNobgorICogICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICAgICAgICAgICAg ICAgIHwKKyAqICAvLS0tLS0tLS0tLS0tLS1cICAgfCAgIHwgICAgICAgICAgICAgICAgICAgICB8 ICAgLy0tLS0tLS0tLS0tLS0tXAorICogIHwgUy9QRElGLCBBREFUIHw8LS0vICAgfDEwY2huICAg ICAgICAgICAgICAgIFwtLT58IEFMU0EgUENNIGluICB8CisgKiAgfCBIYXJkd2FyZSBvdXQgfCAg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFwtLS0tLS0tLS0tLS0tLS8KKyAqICBcLS0t LS0tLS0tLS0tLS0vICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAqICAg ICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0rICAgIHN3aXRjaCBwZXIgY2hhbm5lbCB0byBz ZWxlY3QKKyAqICAgICAgICAgICAgICAgICAgfCBNYXN0ZXIgR2FpbiB8PC0tIGZyb250IHBhbmVs IHZvbHVtZSBrbm9iIG9yCisgKiAgICAgICAgICAgICAgICAgICstLS0tLS0rLS0tLS0tKyAgICBp bmRpdmlkdWFsIHNvZnR3YXJlIGdhaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgIHwxMGNobgorICogIC8tLS0tLS0tLS0tLS0tLVwgICAg ICAgfAorICogIHwgQW5hbG9ndWUgICAgIHw8LS0tLS0tLworICogIHwgSGFyZHdhcmUgb3V0IHwK KyAqICBcLS0tLS0tLS0tLS0tLS0vCisgKiA8L2RpdGFhPgorICoKKyAqLworCisjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8c291bmQv Y29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSAidXNiYXVkaW8u aCIKKyNpbmNsdWRlICJtaXhlci5oIgorI2luY2x1ZGUgImhlbHBlci5oIgorCisjaW5jbHVkZSAi bWl4ZXJfc2NhcmxldHRfZ2VuMi5oIgorCisvKiBzb21lIGd1aSBtaXhlcnMgY2FuJ3QgaGFuZGxl IG5lZ2F0aXZlIGN0bCB2YWx1ZXMgKi8KKyNkZWZpbmUgU0NBUkxFVFRfVk9MVU1FX0JJQVMgMTI3 CisKKy8qIG1peGVyIHJhbmdlIGZyb20gLTgwZEIgdG8gKzZkQiBpbiAwLjVkQiBzdGVwcyAqLwor I2RlZmluZSBTQ0FSTEVUVF9NSVhFUl9NSU5fREIgLTgwCisjZGVmaW5lIFNDQVJMRVRUX01JWEVS X0JJQVMgKC1TQ0FSTEVUVF9NSVhFUl9NSU5fREIgKiAyKQorI2RlZmluZSBTQ0FSTEVUVF9NSVhF Ul9NQVhfREIgNgorI2RlZmluZSBTQ0FSTEVUVF9NSVhFUl9NQVhfVkFMVUUgXAorCSgoU0NBUkxF VFRfTUlYRVJfTUFYX0RCIC0gU0NBUkxFVFRfTUlYRVJfTUlOX0RCKSAqIDIpCisKKy8qIG1hcCBm cm9tIChkQiArIDgwKSAqIDIgdG8gbWl4ZXIgdmFsdWUKKyAqIGZvciBkQiBpbiAwIC4uIDE3Mjog aW50KDgxOTIgKiBwb3coMTAsICgoZEIgLSAxNjApIC8gMiAvIDIwKSkpCisgKi8KK3N0YXRpYyBj b25zdCBfX3UxNiBzY2FybGV0dDJfbWl4ZXJfdmFsdWVzWzE3M10gPSB7CisJMCwgMCwgMCwgMCwg MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMiwKKwkyLCAy LCAzLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA2LCA2LCA2LCA3LCA3LCA4LCA4 LAorCTksIDksIDEwLCAxMCwgMTEsIDEyLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTks IDIwLCAyMSwKKwkyMywgMjQsIDI1LCAyNywgMjksIDMwLCAzMiwgMzQsIDM2LCAzOCwgNDEsIDQz LCA0NiwgNDgsIDUxLAorCTU0LCA1NywgNjEsIDY1LCA2OCwgNzMsIDc3LCA4MSwgODYsIDkxLCA5 NywgMTAzLCAxMDksIDExNSwKKwkxMjIsIDEyOSwgMTM3LCAxNDUsIDE1NCwgMTYzLCAxNzMsIDE4 MywgMTk0LCAyMDUsIDIxNywgMjMwLAorCTI0NCwgMjU5LCAyNzQsIDI5MCwgMzA3LCAzMjYsIDM0 NSwgMzY1LCAzODcsIDQxMCwgNDM0LCA0NjAsCisJNDg3LCA1MTYsIDU0NywgNTc5LCA2MTQsIDY1 MCwgNjg5LCA3MzAsIDc3MywgODE5LCA4NjcsIDkxOSwKKwk5NzMsIDEwMzEsIDEwOTIsIDExNTcs IDEyMjUsIDEyOTgsIDEzNzUsIDE0NTYsIDE1NDMsIDE2MzQsCisJMTczMSwgMTgzMywgMTk0Miwg MjA1NywgMjE3OSwgMjMwOCwgMjQ0NSwgMjU5MCwgMjc0NCwgMjkwNiwKKwkzMDc4LCAzMjYxLCAz NDU0LCAzNjU5LCAzODc2LCA0MTA1LCA0MzQ5LCA0NjA2LCA0ODc5LCA1MTY4LAorCTU0NzUsIDU3 OTksIDYxNDMsIDY1MDcsIDY4OTIsIDczMDEsIDc3MzMsIDgxOTIsIDg2NzcsIDkxOTEsCisJOTcz NiwgMTAzMTMsIDEwOTI0LCAxMTU3MSwgMTIyNTcsIDEyOTgzLCAxMzc1MiwgMTQ1NjcsIDE1NDMw LAorCTE2MzQ1Cit9OworCisvKiBNYXhpbXVtIG51bWJlciBvZiBhbmFsb2d1ZSBvdXRwdXRzICov CisjZGVmaW5lIFNDQVJMRVRUMl9DT05UUk9MU19NQVggMTAKKworLyogTWF4aW11bSBudW1iZXIg b2YgaW5wdXRzIHRvIHRoZSBtaXhlciAqLworI2RlZmluZSBTQ0FSTEVUVDJfSU5QVVRfTUlYX01B WCAxOAorCisvKiBNYXhpbXVtIG51bWJlciBvZiBvdXRwdXRzIGZyb20gdGhlIG1peGVyICovCisj ZGVmaW5lIFNDQVJMRVRUMl9PVVRQVVRfTUlYX01BWCAxMAorCisvKiBNYXhpbXVtIHNpemUgb2Yg dGhlIGRhdGEgaW4gdGhlIFVTQiBtdXggYXNzaWdubWVudCBtZXNzYWdlOgorICogMTggaW5wdXRz LCAyMCBvdXRwdXRzLCAxOCBtYXRyaXggaW5wdXRzLCA4IHNwYXJlCisgKi8KKyNkZWZpbmUgU0NB UkxFVFQyX01VWF9NQVggNjQKKworLyogTnVtYmVyIG9mIG1ldGVyczoKKyAqIDE4IGlucHV0cywg MjAgb3V0cHV0cywgMTggbWF0cml4IGlucHV0cworICovCisjZGVmaW5lIFNDQVJMRVRUMl9OVU1f TUVURVJTIDU2CisKKy8qIEhhcmR3YXJlIHBvcnQgdHlwZXM6CisgKiAtIE5vbmUgKG5vIGlucHV0 IHRvIG11eCkKKyAqIC0gQW5hbG9ndWUgSS9PCisgKiAtIFMvUERJRiBJL08KKyAqIC0gQURBVCBJ L08KKyAqIC0gTWl4ZXIgSS9PCisgKiAtIFBDTSBJL08KKyAqLworZW51bSB7CisJU0NBUkxFVFQy X1BPUlRfVFlQRV9OT05FID0gMCwKKwlTQ0FSTEVUVDJfUE9SVF9UWVBFX0FOQUxPR1VFID0gMSwK KwlTQ0FSTEVUVDJfUE9SVF9UWVBFX1NQRElGID0gMiwKKwlTQ0FSTEVUVDJfUE9SVF9UWVBFX0FE QVQgPSAzLAorCVNDQVJMRVRUMl9QT1JUX1RZUEVfTUlYID0gNCwKKwlTQ0FSTEVUVDJfUE9SVF9U WVBFX1BDTSA9IDUsCisJU0NBUkxFVFQyX1BPUlRfVFlQRV9DT1VOVCA9IDYsCit9OworCisvKiBD b3VudCBvZiB0b3RhbCBJL08gYW5kIG51bWJlciBhdmFpbGFibGUgYXQgZWFjaCBzYW1wbGUgcmF0 ZSAqLworZW51bSB7CisJU0NBUkxFVFQyX1BPUlRfSU4gPSAwLAorCVNDQVJMRVRUMl9QT1JUX09V VCA9IDEsCisJU0NBUkxFVFQyX1BPUlRfT1VUXzQ0ID0gMiwKKwlTQ0FSTEVUVDJfUE9SVF9PVVRf ODggPSAzLAorCVNDQVJMRVRUMl9QT1JUX09VVF8xNzYgPSA0LAorCVNDQVJMRVRUMl9QT1JUX0RJ UkVDVElPTlMgPSA1LAorfTsKKworI2RlZmluZSBTQ0FSTEVUVDJfQlVUVE9OX0NPVU5UIDIKKwor c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNjYXJsZXR0Ml9idXR0b25fbmFtZXNbU0NBUkxFVFQy X0JVVFRPTl9DT1VOVF0gPSB7CisJIk11dGUiLCAiRGltIgorfTsKKworLyogRGVzY3JpcHRpb24g b2YgZWFjaCBoYXJkd2FyZSBwb3J0IHR5cGU6CisgKiAtIGlkOiBoYXJkd2FyZSBJRCBmb3IgdGhp cyBwb3J0IHR5cGUKKyAqIC0gbnVtOiBudW1iZXIgb2Ygc291cmNlcy9kZXN0aW5hdGlvbnMgb2Yg dGhpcyBwb3J0IHR5cGUKKyAqIC0gc3JjX2Rlc2NyOiBwcmludGYgZm9ybWF0IHN0cmluZyBmb3Ig bXV4IGlucHV0IHNlbGVjdGlvbnMKKyAqIC0gc3JjX251bV9vZmZzZXQ6IGFkZGVkIHRvIGNoYW5u ZWwgbnVtYmVyIGZvciB0aGUgZnByaW50ZgorICogLSBkc3RfZGVzY3I6IHByaW50ZiBmb3JtYXQg c3RyaW5nIGZvciBtaXhlciBjb250cm9scworICovCitzdHJ1Y3Qgc2NhcmxldHQyX3BvcnRzIHsK KwlfX3UxNiBpZDsKKwlpbnQgbnVtW1NDQVJMRVRUMl9QT1JUX0RJUkVDVElPTlNdOworCWNvbnN0 IGNoYXIgKiBjb25zdCBzcmNfZGVzY3I7CisJaW50IHNyY19udW1fb2Zmc2V0OworCWNvbnN0IGNo YXIgKiBjb25zdCBkc3RfZGVzY3I7Cit9OworCitzdHJ1Y3Qgc2NhcmxldHQyX2RldmljZV9pbmZv IHsKKwljb25zdCBjaGFyICogY29uc3QgbGluZV9vdXRfZGVzY3JzW1NDQVJMRVRUMl9DT05UUk9M U19NQVhdOworCXN0cnVjdCBzY2FybGV0dDJfcG9ydHMgcG9ydHNbU0NBUkxFVFQyX1BPUlRfVFlQ RV9DT1VOVF07Cit9OworCitzdHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSB7CisJc3RydWN0IG11 dGV4IHVzYl9tdXRleDsgLyogcHJldmVudCBzZW5kaW5nIGNvbmN1cnJlbnQgVVNCIHJlcXVlc3Rz ICovCisJc3RydWN0IG11dGV4IGRhdGFfbXV0ZXg7IC8qIGxvY2sgYWNjZXNzIHRvIHRoaXMgZGF0 YSAqLworCWNvbnN0IHN0cnVjdCBzY2FybGV0dDJfZGV2aWNlX2luZm8gKmluZm87CisJaW50IG51 bV9tdXhfc3JjczsKKwlfX3UxNiBzY2FybGV0dDJfc2VxOworCV9fdTggdm9sX3VwZGF0ZWQ7CisJ X191OCBtYXN0ZXJfdm9sOworCV9fdTggdm9sW1NDQVJMRVRUMl9DT05UUk9MU19NQVhdOworCV9f dTggdm9sX3N3X2h3X3N3aXRjaFtTQ0FSTEVUVDJfQ09OVFJPTFNfTUFYXTsKKwlfX3U4IGJ1dHRv bnNbU0NBUkxFVFQyX0JVVFRPTl9DT1VOVF07CisJc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVy X3ZvbF9jdGw7CisJc3RydWN0IHNuZF9rY29udHJvbCAqdm9sX2N0bHNbU0NBUkxFVFQyX0NPTlRS T0xTX01BWF07CisJc3RydWN0IHNuZF9rY29udHJvbCAqYnV0dG9uX2N0bHNbU0NBUkxFVFQyX0NP TlRST0xTX01BWF07CisJX191OCBtdXhbU0NBUkxFVFQyX01VWF9NQVhdOworCV9fdTggbWl4W1ND QVJMRVRUMl9JTlBVVF9NSVhfTUFYICogU0NBUkxFVFQyX09VVFBVVF9NSVhfTUFYXTsKK307CisK K3N0cnVjdCBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkgc2NhcmxldHQyX3VzYl92b2x1bWVf c3RhdHVzIHsKKwlfX3U4IGJ1dHRvbnNbU0NBUkxFVFQyX0JVVFRPTl9DT1VOVF07IC8qIG11dGUg JiBkaW0gYnV0dG9ucyAqLworCV9fdTggcGFkMTsKKwlfX3MxNiBzd192b2xbMTBdOyAvKiBzb2Z0 d2FyZSB2b2x1bWUgc2V0dGluZyAqLworCV9fczE2IGh3X3ZvbFsxMF07IC8qIGFjdHVhbCB2b2x1 bWUgb2Ygb3V0cHV0IGluYy4gZGltICgtMThkQikgKi8KKwlfX3UxNiBwYWQyWzVdOworCV9fdTgg c3dfaHdfc3dpdGNoWzEwXTsgLyogc3cgKDApIG9yIGh3ICgxKSBjb250cm9sbGVkICovCisJX191 MTYgcGFkM1szXTsKKwlfX3MxNiBtYXN0ZXJfdm9sOyAvKiBmcm9udCBwYW5lbCB2b2x1bWUga25v YiAqLworfTsKKworLyoqKiBNb2RlbC1zcGVjaWZpYyBkYXRhICoqKi8KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBzY2FybGV0dDJfZGV2aWNlX2luZm8gczE4aTIwX2dlbjJfaW5mbyA9IHsKKwkubGlu ZV9vdXRfZGVzY3JzID0geworCQkiTW9uaXRvciBMIiwKKwkJIk1vbml0b3IgUiIsCisJCU5VTEws CisJCU5VTEwsCisJCU5VTEwsCisJCU5VTEwsCisJCSJIZWFkcGhvbmVzIDEgTCIsCisJCSJIZWFk cGhvbmVzIDEgUiIsCisJCSJIZWFkcGhvbmVzIDIgTCIsCisJCSJIZWFkcGhvbmVzIDIgUiIsCisJ fSwKKworCS5wb3J0cyA9IHsKKwkJeworCQkJLmlkID0gMHgwMDAsCisJCQkubnVtID0geyAxLCAw LCA4LCA4LCA2IH0sCisJCQkuc3JjX2Rlc2NyID0gIk9mZiIsCisJCQkuc3JjX251bV9vZmZzZXQg PSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSAweDA4MCwKKwkJCS5udW0gPSB7IDgsIDEwLCAxMCwg MTAsIDEwIH0sCisJCQkuc3JjX2Rlc2NyID0gIkFuYWxvZ3VlICVkIiwKKwkJCS5zcmNfbnVtX29m ZnNldCA9IDEsCisJCQkuZHN0X2Rlc2NyID0gIkFuYWxvZ3VlIE91dHB1dCAlMDJkIFBsYXliYWNr IgorCQl9LAorCQl7CisJCQkvKiBTL1BESUYgb3V0cHV0cyBhcmVuJ3QgYXZhaWxhYmxlIGF0IDE5 MktIegorCQkJICogYnV0IGFyZSBpbmNsdWRlZCBpbiB0aGUgVVNCIG11eCBJL08KKwkJCSAqIGFz c2lnbm1lbnQgbWVzc2FnZSBhbnl3YXkKKwkJCSAqLworCQkJLmlkID0gMHgxODAsCisJCQkubnVt ID0geyAyLCAyLCAyLCAyLCAyIH0sCisJCQkuc3JjX2Rlc2NyID0gIlMvUERJRiAlZCIsCisJCQku c3JjX251bV9vZmZzZXQgPSAxLAorCQkJLmRzdF9kZXNjciA9ICJTL1BESUYgT3V0cHV0ICVkIFBs YXliYWNrIgorCQl9LAorCQl7CisJCQkuaWQgPSAweDIwMCwKKwkJCS5udW0gPSB7IDgsIDgsIDgs IDQsIDAgfSwKKwkJCS5zcmNfZGVzY3IgPSAiQURBVCAlZCIsCisJCQkuc3JjX251bV9vZmZzZXQg PSAxLAorCQkJLmRzdF9kZXNjciA9ICJBREFUIE91dHB1dCAlZCBQbGF5YmFjayIKKwkJfSwKKwkJ eworCQkJLmlkID0gMHgzMDAsCisJCQkubnVtID0geyAxMCwgMTgsIDE4LCAxOCwgMTggfSwKKwkJ CS5zcmNfZGVzY3IgPSAiTWl4ICVjIiwKKwkJCS5zcmNfbnVtX29mZnNldCA9IDY1LAorCQkJLmRz dF9kZXNjciA9ICJNaXhlciBJbnB1dCAlMDJkIENhcHR1cmUiCisJCX0sCisJCXsKKwkJCS5pZCA9 IDB4NjAwLAorCQkJLm51bSA9IHsgMjAsIDE4LCAxOCwgMTQsIDEwIH0sCisJCQkuc3JjX2Rlc2Ny ID0gIlBDTSAlZCIsCisJCQkuc3JjX251bV9vZmZzZXQgPSAxLAorCQkJLmRzdF9kZXNjciA9ICJQ Q00gJTAyZCBDYXB0dXJlIgorCQl9LAorCX0sCit9OworCisvKiBnZXQgdGhlIHN0YXJ0aW5nIHBv cnQgaW5kZXggbnVtYmVyIGZvciBhIGdpdmVuIHBvcnQgdHlwZS9kaXJlY3Rpb24gKi8KK3N0YXRp YyBpbnQgc2NhcmxldHQyX2dldF9wb3J0X3N0YXJ0X251bShjb25zdCBzdHJ1Y3Qgc2NhcmxldHQy X3BvcnRzICpwb3J0cywKKwkJCQkJaW50IGRpcmVjdGlvbiwgaW50IHBvcnRfdHlwZSkKK3sKKwlp bnQgaSwgbnVtID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBwb3J0X3R5cGU7IGkrKykKKwkJbnVt ICs9IHBvcnRzW2ldLm51bVtkaXJlY3Rpb25dOworCisJcmV0dXJuIG51bTsKK30KKworLyoqKiBV U0IgSW50ZXJhY3Rpb25zICoqKi8KKworLyogVmVuZG9yLVNwZWNpZmljIEludGVyZmFjZSwgRW5k cG9pbnQsIE1heFBhY2tldFNpemUsIEludGVydmFsICovCisjZGVmaW5lIFNDQVJMRVRUMl9VU0Jf VkVORE9SX1NQRUNJRklDX0lOVEVSRkFDRSA1CisjZGVmaW5lIFNDQVJMRVRUMl9VU0JfSU5URVJS VVBUX0VORFBPSU5UIDQKKyNkZWZpbmUgU0NBUkxFVFQyX1VTQl9JTlRFUlJVUFRfTUFYX0RBVEEg NjQKKyNkZWZpbmUgU0NBUkxFVFQyX1VTQl9JTlRFUlJVUFRfSU5URVJWQUwgMworCisvKiBJbnRl cnJ1cHQgZmxhZ3MgZm9yIHZvbHVtZSBhbmQgbXV0ZS9kaW0gYnV0dG9uIGNoYW5nZXMgKi8KKyNk ZWZpbmUgU0NBUkxFVFQyX1VTQl9JTlRFUlJVUFRfVk9MX0NIQU5HRSAweDQwMDAwMAorI2RlZmlu ZSBTQ0FSTEVUVDJfVVNCX0lOVEVSUlVQVF9CVVRUT05fQ0hBTkdFIDB4MjAwMDAwCisKKy8qIENv bW1hbmRzIGZvciBzZW5kaW5nL3JlY2VpdmluZyByZXF1ZXN0cy9yZXNwb25zZXMgKi8KKyNkZWZp bmUgU0NBUkxFVFQyX1VTQl9WRU5ET1JfU1BFQ0lGSUNfQ01EX1JFUSAyCisjZGVmaW5lIFNDQVJM RVRUMl9VU0JfVkVORE9SX1NQRUNJRklDX0NNRF9SRVNQIDMKKworI2RlZmluZSBTQ0FSTEVUVDJf VVNCX0lOSVRfU0VRIDB4MDAwMDAwMDAKKyNkZWZpbmUgU0NBUkxFVFQyX1VTQl9HRVRfTUVURVJf TEVWRUxTIDB4MDAwMDEwMDEKKyNkZWZpbmUgU0NBUkxFVFQyX1VTQl9TRVRfTUlYIDB4MDAwMDIw MDIKKyNkZWZpbmUgU0NBUkxFVFQyX1VTQl9TRVRfTVVYIDB4MDAwMDMwMDIKKyNkZWZpbmUgU0NB UkxFVFQyX1VTQl9HRVRfREFUQSAweDAwODAwMDAwCisjZGVmaW5lIFNDQVJMRVRUMl9VU0JfU0VU X0RBVEFfMSAweDAwODAwMDAxCisjZGVmaW5lIFNDQVJMRVRUMl9VU0JfU0VUX0RBVEFfMiAweDAw ODAwMDAyCisKKyNkZWZpbmUgU0NBUkxFVFQyX1VTQl9WT0xVTUVfU1RBVFVTX09GRlNFVCAweDMx CisjZGVmaW5lIFNDQVJMRVRUMl9VU0JfTElORV9PVVRfVk9MVU1FX09GRlNFVCAweDM0CisjZGVm aW5lIFNDQVJMRVRUMl9VU0JfU1dfSFdfU1dJVENIX09GRlNFVCAweDY2CisKKyNkZWZpbmUgU0NB UkxFVFQyX1VTQl9MSU5FX09VVF9WT0xVTUVfU0VUX01BR0lDIDEKKyNkZWZpbmUgU0NBUkxFVFQy X1VTQl9TV19IV19TV0lUQ0hfU0VUX01BR0lDIDMKKyNkZWZpbmUgU0NBUkxFVFQyX1VTQl9NRVRF Ul9MRVZFTFNfR0VUX01BR0lDIDEKKworLyogU2VuZCBhIHByb3ByaWV0YXJ5IGZvcm1hdCByZXF1 ZXN0IHRvIHRoZSBTY2FybGV0dCBpbnRlcmZhY2UuICovCitzdGF0aWMgaW50IHNjYXJsZXR0Ml91 c2IoCisJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyLCBfX3UzMiBjbWQsCisJdm9p ZCAqcmVxX2RhdGEsIF9fdTE2IHJlcV9zaXplLCB2b2lkICpyZXNwX2RhdGEsIF9fdTE2IHJlc3Bf c2l6ZSkKK3sKKwlzdHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9IG1peGVyLT5j aGlwLT5wcml2YXRlOworCisJLyogcHJvcHJpZXRhcnkgcmVxdWVzdC9yZXNwb25zZSBmb3JtYXQg Ki8KKwlzdHJ1Y3Qgc2NhcmxldHQyX3VzYl9wYWNrZXQgeworCQlfX3UzMiBjbWQ7CisJCV9fdTE2 IHNpemU7CisJCV9fdTE2IHNlcTsKKwkJX191MzIgZXJyb3I7CisJCV9fdTMyIHBhZDsKKwkJX191 OCBkYXRhW107CisJfTsKKworCV9fdTE2IHJlcV9idWZfc2l6ZSA9CisJCXNpemVvZihzdHJ1Y3Qg c2NhcmxldHQyX3VzYl9wYWNrZXQpICsgcmVxX3NpemU7CisJX191MTYgcmVzcF9idWZfc2l6ZSA9 CisJCXNpemVvZihzdHJ1Y3Qgc2NhcmxldHQyX3VzYl9wYWNrZXQpICsgcmVzcF9zaXplOworCisJ c3RydWN0IHNjYXJsZXR0Ml91c2JfcGFja2V0ICpyZXEsICpyZXNwOworCisJaW50IHNlcSwgZXJy OworCV9fdTMyIHJlc3BfY21kOworCV9fdTMyIHJlc3Bfc2VxOworCV9fdTE2IHNpemU7CisKKwlt dXRleF9sb2NrKCZwcml2YXRlLT51c2JfbXV0ZXgpOworCisJLyogYnVpbGQgcmVxdWVzdCBtZXNz YWdlIGFuZCBzZW5kIGl0ICovCisKKwlyZXEgPSBrbWFsbG9jKHJlcV9idWZfc2l6ZSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFyZXEpIHsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT51c2JfbXV0ZXgp OworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBzZXF1ZW5jZSBtdXN0IGdvIHVwIGJ5IDEg Zm9yIGVhY2ggcmVxdWVzdCAqLworCXNlcSA9IHByaXZhdGUtPnNjYXJsZXR0Ml9zZXErKzsKKwor CXJlcS0+Y21kID0gY3B1X3RvX2xlMzIoY21kKTsKKwlyZXEtPnNpemUgPSBjcHVfdG9fbGUxNihy ZXFfc2l6ZSk7CisJcmVxLT5zZXEgPSBjcHVfdG9fbGUxNihzZXEpOworCXJlcS0+ZXJyb3IgPSAw OworCXJlcS0+cGFkID0gMDsKKwlpZiAocmVxX3NpemUpCisJCW1lbWNweShyZXEtPmRhdGEsIHJl cV9kYXRhLCByZXFfc2l6ZSk7CisKKwllcnIgPSBzbmRfdXNiX2N0bF9tc2cobWl4ZXItPmNoaXAt PmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShtaXhlci0+Y2hpcC0+ZGV2LCAwKSwKKwkJCVNDQVJM RVRUMl9VU0JfVkVORE9SX1NQRUNJRklDX0NNRF9SRVEsCisJCQlVU0JfUkVDSVBfSU5URVJGQUNF IHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCwKKwkJCTAsCisJCQlTQ0FSTEVUVDJfVVNC X1ZFTkRPUl9TUEVDSUZJQ19JTlRFUkZBQ0UsCisJCQlyZXEsCisJCQlyZXFfYnVmX3NpemUpOwor CisJa2ZyZWUocmVxKTsKKworCWlmIChlcnIgIT0gcmVxX2J1Zl9zaXplKSB7CisJCXNuZF9wcmlu dGsoS0VSTl9FUlIgIlNjYXJsZXR0IEdlbiAyIFVTQiByZXF1ZXN0IHJlc3VsdCAiCisJCQkgICAi Y29tbWFuZCAleCB3YXMgJWRcbiIsIGNtZCwgZXJyKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2YXRl LT51c2JfbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBzZW5kIGEgc2Vjb25k IG1lc3NhZ2UgdG8gZ2V0IHRoZSByZXNwb25zZSAqLworCisJcmVzcCA9IGttYWxsb2MocmVzcF9i dWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXNwKSB7CisJCW11dGV4X3VubG9jaygmcHJp dmF0ZS0+dXNiX211dGV4KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZXJyID0gc25kX3Vz Yl9jdGxfbXNnKG1peGVyLT5jaGlwLT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUobWl4ZXItPmNo aXAtPmRldiwgMCksCisJCQlTQ0FSTEVUVDJfVVNCX1ZFTkRPUl9TUEVDSUZJQ19DTURfUkVTUCwK KwkJCVVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJ CQkwLAorCQkJU0NBUkxFVFQyX1VTQl9WRU5ET1JfU1BFQ0lGSUNfSU5URVJGQUNFLAorCQkJcmVz cCwKKwkJCXJlc3BfYnVmX3NpemUpOworCisJLyogdmFsaWRhdGUgdGhlIHJlc3BvbnNlICovCisK KwlpZiAoZXJyICE9IHJlc3BfYnVmX3NpemUpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiU2Nh cmxldHQgR2VuIDIgVVNCIHJlc3BvbnNlIHJlc3VsdCAiCisJCQkgICAiY29tbWFuZCAleCB3YXMg JWRcbiIsIGNtZCwgZXJyKTsKKwkJa2ZyZWUocmVzcCk7CisJCW11dGV4X3VubG9jaygmcHJpdmF0 ZS0+dXNiX211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzcF9jbWQgPSBsZTMy X3RvX2NwdShyZXNwLT5jbWQpOworCXJlc3Bfc2VxID0gbGUxNl90b19jcHUocmVzcC0+c2VxKTsK KwlzaXplID0gbGUxNl90b19jcHUocmVzcC0+c2l6ZSk7CisKKwlpZiAocmVzcF9jbWQgIT0gY21k IHx8CisJICAgIHJlc3Bfc2VxICE9IHNlcSB8fAorCSAgICBzaXplICE9IHJlc3Bfc2l6ZSB8fAor CSAgICByZXNwLT5lcnJvciB8fAorCSAgICByZXNwLT5wYWQpIHsKKwkJc25kX3ByaW50ayhLRVJO X0VSUiAiU2NhcmxldHQgR2VuIDIgVVNCIGludmFsaWQgcmVzcG9uc2U7ICIKKwkJCSAgICJjbWQg dHgvcnggJWQvJWQgc2VxICVkLyVkIHNpemUgJWQvJWQgIgorCQkJICAgImVycm9yICVkIHBhZCAl ZFxuIiwKKwkJCSAgIGNtZCwgcmVzcF9jbWQsIHNlcSwgcmVzcF9zZXEsIHNpemUsIHJlc3Bfc2l6 ZSwKKwkJCSAgIHJlc3AtPmVycm9yLCByZXNwLT5wYWQpOworCQlrZnJlZShyZXNwKTsKKwkJbXV0 ZXhfdW5sb2NrKCZwcml2YXRlLT51c2JfbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlpZiAocmVzcF9zaXplID4gMCkKKwkJbWVtY3B5KHJlc3BfZGF0YSwgcmVzcC0+ZGF0YSwgcmVz cF9zaXplKTsKKworCWtmcmVlKHJlc3ApOworCW11dGV4X3VubG9jaygmcHJpdmF0ZS0+dXNiX211 dGV4KTsKKwlyZXR1cm4gMDsKK30KKworLyogU2VuZCBhIFVTQiBtZXNzYWdlIHRvIHNldCBkYXRh IChjdXJyZW50bHkgdm9sdW1lIGxldmVsIG9yIHN3aXRjaCkgKi8KK3N0YXRpYyBpbnQgc2Nhcmxl dHQyX3VzYl9zZXQoCisJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyLAorCWludCBp bmRleCwgaW50IHNpemUsIGludCBtYWdpY192YWx1ZSwgaW50IHZhbHVlKQoreworCXN0cnVjdCBf X2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkgeworCQlfX3UzMiBpbmRleDsKKwkJX191MzIgYnl0 ZXM7CisJCV9fczMyIHZhbHVlOworCX0gcmVxOworCV9fdTMyIHJlcTI7CisJaW50IGVycjsKKwor CS8qIHNlbmQgZmlyc3QgbWVzc2FnZSB3aXRoIHRoZSBkYXRhICovCisJcmVxLmluZGV4ID0gY3B1 X3RvX2xlMzIoaW5kZXgpOworCXJlcS5ieXRlcyA9IGNwdV90b19sZTMyKHNpemUpOworCXJlcS52 YWx1ZSA9IGNwdV90b19sZTMyKHZhbHVlKTsKKwllcnIgPSBzY2FybGV0dDJfdXNiKG1peGVyLCBT Q0FSTEVUVDJfVVNCX1NFVF9EQVRBXzEsCisJCQkgICAgJnJlcSwgc2l6ZW9mKF9fdTMyKSAqIDIg KyBzaXplLCBOVUxMLCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIHNl bmQgc2Vjb25kIG1lc3NhZ2Ugd2l0aCB0aGUgbWFnaWMgdmFsdWUgKi8KKwlyZXEyID0gY3B1X3Rv X2xlMzIobWFnaWNfdmFsdWUpOworCWVyciA9IHNjYXJsZXR0Ml91c2IobWl4ZXIsIFNDQVJMRVRU Ml9VU0JfU0VUX0RBVEFfMiwKKwkJCSAgICAmcmVxMiwgc2l6ZW9mKHJlcTIpLCBOVUxMLCAwKTsK KwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCisvKiBTZW5k IGEgVVNCIG1lc3NhZ2UgdG8gZ2V0IGRhdGE7IHJlc3VsdCBwbGFjZWQgaW4gKmJ1ZiAqLworc3Rh dGljIGludCBzY2FybGV0dDJfdXNiX2dldCgKKwlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAq bWl4ZXIsCisJX191MzIgY21kLCBpbnQgb2Zmc2V0LCB2b2lkICpidWYsIGludCBzaXplKQorewor CXN0cnVjdCBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkgeworCQlfX3UzMiBvZmZzZXQ7CisJ CV9fdTMyIHNpemU7CisJfSByZXE7CisJaW50IGVycjsKKworCS8qIHNlbmQgZmlyc3QgbWVzc2Fn ZSB3aXRoIHRoZSBkYXRhICovCisJcmVxLm9mZnNldCA9IGNwdV90b19sZTMyKG9mZnNldCk7CisJ cmVxLnNpemUgPSBjcHVfdG9fbGUzMihzaXplKTsKKwllcnIgPSBzY2FybGV0dDJfdXNiKG1peGVy LCBjbWQsICZyZXEsIHNpemVvZihyZXEpLCBidWYsIHNpemUpOworCWlmIChlcnIgPCAwKQorCQly ZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFNlbmQgYSBVU0IgbWVzc2FnZSB0byBn ZXQgdm9sdW1lIHN0YXR1czsgcmVzdWx0IHBsYWNlZCBpbiAqYnVmICovCitzdGF0aWMgaW50IHNj YXJsZXR0Ml91c2JfZ2V0X3ZvbHVtZV9zdGF0dXMoCisJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZh Y2UgKm1peGVyLAorCXN0cnVjdCBzY2FybGV0dDJfdXNiX3ZvbHVtZV9zdGF0dXMgKmJ1ZikKK3sK KwlyZXR1cm4gc2NhcmxldHQyX3VzYl9nZXQoCisJCW1peGVyLAorCQlTQ0FSTEVUVDJfVVNCX0dF VF9EQVRBLAorCQlTQ0FSTEVUVDJfVVNCX1ZPTFVNRV9TVEFUVVNfT0ZGU0VULAorCQlidWYsIHNp emVvZigqYnVmKSk7Cit9CisKKy8qIFNlbmQgYSBVU0IgbWVzc2FnZSB0byBzZXQgdGhlIHNvZnR3 YXJlIHZvbHVtZSBmb3IgYW4gYW5hbG9ndWUgb3V0cHV0ICovCitzdGF0aWMgaW50IHNjYXJsZXR0 Ml91c2Jfc2V0X2xpbmVfb3V0cHV0X3ZvbHVtZSgKKwlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFj ZSAqbWl4ZXIsCisJaW50IGxpbmVfbnVtLCBpbnQgdm9sdW1lKQoreworCWludCBvZmZzZXQgPSBT Q0FSTEVUVDJfVVNCX0xJTkVfT1VUX1ZPTFVNRV9PRkZTRVQgKyBsaW5lX251bSAqIDI7CisKKwly ZXR1cm4gc2NhcmxldHQyX3VzYl9zZXQoCisJCW1peGVyLCBvZmZzZXQsIDIsCisJCVNDQVJMRVRU Ml9VU0JfTElORV9PVVRfVk9MVU1FX1NFVF9NQUdJQywgdm9sdW1lKTsKK30KKworLyogU2VuZCBh IFVTQiBtZXNzYWdlIHRvIHNldCBzb2Z0d2FyZSAoMCkgb3IgaGFyZHdhcmUgKDEpIHZvbHVtZSBm b3IKKyAqIGFuIGFuYWxvZ3VlIG91dHB1dAorICovCitzdGF0aWMgaW50IHNjYXJsZXR0Ml91c2Jf c2V0X21vbml0b3Jfdm9sdW1lX3N3aXRjaCgKKwlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAq bWl4ZXIsIGludCBsaW5lX251bSwgaW50IHZhbHVlKQoreworCWludCBvZmZzZXQgPSBTQ0FSTEVU VDJfVVNCX1NXX0hXX1NXSVRDSF9PRkZTRVQgKyBsaW5lX251bTsKKworCXJldHVybiBzY2FybGV0 dDJfdXNiX3NldCgKKwkJbWl4ZXIsIG9mZnNldCwgMSwKKwkJU0NBUkxFVFQyX1VTQl9TV19IV19T V0lUQ0hfU0VUX01BR0lDLCB2YWx1ZSk7Cit9CisKKy8qIFNlbmQgYSBVU0IgbWVzc2FnZSB0byBz ZXQgdGhlIHZvbHVtZXMgZm9yIGFsbCBpbnB1dHMgb2Ygb25lIG1peAorICogKHZhbHVlcyBvYnRh aW5lZCBmcm9tIHByaXZhdGUtPm1peFtdKQorICovCitzdGF0aWMgaW50IHNjYXJsZXR0Ml91c2Jf c2V0X21peChzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIsCisJCQkJICAgICBpbnQg bWl4X251bSkKK3sKKwlzdHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9IG1peGVy LT5jaGlwLT5wcml2YXRlOworCWNvbnN0IHN0cnVjdCBzY2FybGV0dDJfZGV2aWNlX2luZm8gKmlu Zm8gPSBwcml2YXRlLT5pbmZvOworCisJc3RydWN0IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18p KSB7CisJCV9fdTE2IG1peF9udW07CisJCV9fdTE2IGRhdGFbU0NBUkxFVFQyX0lOUFVUX01JWF9N QVhdOworCX0gcmVxOworCisJaW50IGksIGosIGVycjsKKwlpbnQgbnVtX21peGVyX2luID0KKwkJ aW5mby0+cG9ydHNbU0NBUkxFVFQyX1BPUlRfVFlQRV9NSVhdLm51bVtTQ0FSTEVUVDJfUE9SVF9P VVRdOworCisJcmVxLm1peF9udW0gPSBjcHVfdG9fbGUxNihtaXhfbnVtKTsKKworCWZvciAoaSA9 IDAsIGogPSBtaXhfbnVtICogbnVtX21peGVyX2luOyBpIDwgbnVtX21peGVyX2luOyBpKyssIGor KykKKwkJcmVxLmRhdGFbaV0gPSBjcHVfdG9fbGUxNigKKwkJCXNjYXJsZXR0Ml9taXhlcl92YWx1 ZXNbcHJpdmF0ZS0+bWl4W2pdXQorCQkpOworCisJZXJyID0gc2NhcmxldHQyX3VzYihtaXhlciwg U0NBUkxFVFQyX1VTQl9TRVRfTUlYLAorCQkJICAgICZyZXEsIChudW1fbWl4ZXJfaW4gKyAxKSAq IHNpemVvZihfX3UxNiksCisJCQkgICAgTlVMTCwgMCk7CisJaWYgKGVyciA8IDApCisJCXJldHVy biBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ29udmVydCBhIHBvcnQgbnVtYmVyIGluZGV4 IChwZXIgaW5mby0+cG9ydHMpIHRvIGEgaGFyZHdhcmUgSUQgKi8KK3N0YXRpYyBfX3UzMiBzY2Fy bGV0dDJfbXV4X3NyY19udW1fdG9faWQoY29uc3Qgc3RydWN0IHNjYXJsZXR0Ml9wb3J0cyAqcG9y dHMsCisJCQkJCSBpbnQgbnVtKQoreworCWludCBwb3J0X3R5cGU7CisKKwlmb3IgKHBvcnRfdHlw ZSA9IDA7CisJICAgICBwb3J0X3R5cGUgPCBTQ0FSTEVUVDJfUE9SVF9UWVBFX0NPVU5UOworCSAg ICAgcG9ydF90eXBlKyspIHsKKwkJaWYgKG51bSA8IHBvcnRzW3BvcnRfdHlwZV0ubnVtW1NDQVJM RVRUMl9QT1JUX0lOXSkKKwkJCXJldHVybiBwb3J0c1twb3J0X3R5cGVdLmlkIHwgbnVtOworCQlu dW0gLT0gcG9ydHNbcG9ydF90eXBlXS5udW1bU0NBUkxFVFQyX1BPUlRfSU5dOworCX0KKworCS8q IE9vcHMgKi8KKwlyZXR1cm4gMDsKK30KKworLyogU2VuZCBVU0IgbWVzc2FnZXMgdG8gc2V0IG11 eCBpbnB1dHMgKi8KK3N0YXRpYyBpbnQgc2NhcmxldHQyX3VzYl9zZXRfbXV4KHN0cnVjdCB1c2Jf bWl4ZXJfaW50ZXJmYWNlICptaXhlcikKK3sKKwlzdHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAq cHJpdmF0ZSA9IG1peGVyLT5jaGlwLT5wcml2YXRlOworCWNvbnN0IHN0cnVjdCBzY2FybGV0dDJf ZGV2aWNlX2luZm8gKmluZm8gPSBwcml2YXRlLT5pbmZvOworCWNvbnN0IHN0cnVjdCBzY2FybGV0 dDJfcG9ydHMgKnBvcnRzID0gaW5mby0+cG9ydHM7CisJaW50IHJhdGUsIHBvcnRfZGlyX3JhdGU7 CisKKwlzdGF0aWMgY29uc3QgaW50IGFzc2lnbm1lbnRfb3JkZXJbU0NBUkxFVFQyX1BPUlRfVFlQ RV9DT1VOVF0gPSB7CisJCVNDQVJMRVRUMl9QT1JUX1RZUEVfUENNLAorCQlTQ0FSTEVUVDJfUE9S VF9UWVBFX0FOQUxPR1VFLAorCQlTQ0FSTEVUVDJfUE9SVF9UWVBFX1NQRElGLAorCQlTQ0FSTEVU VDJfUE9SVF9UWVBFX0FEQVQsCisJCVNDQVJMRVRUMl9QT1JUX1RZUEVfTUlYLAorCQlTQ0FSTEVU VDJfUE9SVF9UWVBFX05PTkUsCisJfTsKKworCXN0cnVjdCBfX2F0dHJpYnV0ZV9fKChfX3BhY2tl ZF9fKSkgeworCQlfX3UxNiBwYWQ7CisJCV9fdTE2IG51bTsKKwkJX191MzIgZGF0YVtTQ0FSTEVU VDJfTVVYX01BWF07CisJfSByZXE7CisKKwlyZXEucGFkID0gMDsKKworCS8qIG11eCBzZXR0aW5n cyBmb3IgZWFjaCByYXRlICovCisJZm9yIChyYXRlID0gMCwgcG9ydF9kaXJfcmF0ZSA9IFNDQVJM RVRUMl9QT1JUX09VVF80NDsKKwkgICAgIHBvcnRfZGlyX3JhdGUgPD0gU0NBUkxFVFQyX1BPUlRf T1VUXzE3NjsKKwkgICAgIHJhdGUrKywgcG9ydF9kaXJfcmF0ZSsrKSB7CisJCWludCBvcmRlcl9u dW0sIGksIGVycjsKKworCQlyZXEubnVtID0gY3B1X3RvX2xlMTYocmF0ZSk7CisKKwkJZm9yIChv cmRlcl9udW0gPSAwLCBpID0gMDsKKwkJICAgICBvcmRlcl9udW0gPCBTQ0FSTEVUVDJfUE9SVF9U WVBFX0NPVU5UOworCQkgICAgIG9yZGVyX251bSsrKSB7CisJCQlpbnQgcG9ydF90eXBlID0gYXNz aWdubWVudF9vcmRlcltvcmRlcl9udW1dOworCQkJaW50IGogPSBzY2FybGV0dDJfZ2V0X3BvcnRf c3RhcnRfbnVtKHBvcnRzLAorCQkJCQkJCSAgICAgU0NBUkxFVFQyX1BPUlRfT1VULAorCQkJCQkJ CSAgICAgcG9ydF90eXBlKTsKKwkJCWludCBwb3J0X2lkID0gcG9ydHNbcG9ydF90eXBlXS5pZDsK KwkJCWludCBjaGFubmVsOworCisJCQlmb3IgKGNoYW5uZWwgPSAwOworCQkJICAgICBjaGFubmVs IDwgcG9ydHNbcG9ydF90eXBlXS5udW1bcG9ydF9kaXJfcmF0ZV07CisJCQkgICAgIGNoYW5uZWwr KywgaSsrLCBqKyspCisJCQkJLyogbG93ZXIgMTIgYml0cyBmb3IgdGhlIGRlc3RpbmF0aW9uIGFu ZAorCQkJCSAqIG5leHQgMTIgYml0cyBmb3IgdGhlIHNvdXJjZQorCQkJCSAqLworCQkJCXJlcS5k YXRhW2ldID0gIXBvcnRfaWQKKwkJCQkJPyAwCisJCQkJCTogY3B1X3RvX2xlMzIoCisJCQkJCQlw b3J0X2lkIHwKKwkJCQkJCWNoYW5uZWwgfAorCQkJCQkJc2NhcmxldHQyX211eF9zcmNfbnVtX3Rv X2lkKAorCQkJCQkJCXBvcnRzLCBwcml2YXRlLT5tdXhbal0KKwkJCQkJCSkgPDwgMTIKKwkJCQkJ ICApOworCisJCQkvKiBza2lwIHByaXZhdGUtPm11eFtqXSBlbnRyaWVzIG5vdCBvdXRwdXQgKi8K KwkJCWogKz0gcG9ydHNbcG9ydF90eXBlXS5udW1bU0NBUkxFVFQyX1BPUlRfT1VUXSAtCisJCQkg ICAgIHBvcnRzW3BvcnRfdHlwZV0ubnVtW3BvcnRfZGlyX3JhdGVdOworCQl9CisKKwkJZXJyID0g c2NhcmxldHQyX3VzYihtaXhlciwgU0NBUkxFVFQyX1VTQl9TRVRfTVVYLAorCQkJCSAgICAmcmVx LCAoaSArIDEpICogc2l6ZW9mKF9fdTMyKSwKKwkJCQkgICAgTlVMTCwgMCk7CisJCWlmIChlcnIg PCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogU2VuZCBVU0Ig bWVzc2FnZSB0byBnZXQgbWV0ZXIgbGV2ZWxzICovCitzdGF0aWMgaW50IHNjYXJsZXR0Ml91c2Jf Z2V0X21ldGVyX2xldmVscyhzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIsCisJCQkJ CSAgX191MTYgKmxldmVscykKK3sKKwlzdHJ1Y3QgX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykp IHsKKwkJX191MTYgcGFkOworCQlfX3UxNiBudW1fbWV0ZXJzOworCQlfX3UzMiBtYWdpYzsKKwl9 IHJlcTsKKwlfX3UzMiByZXNwW1NDQVJMRVRUMl9OVU1fTUVURVJTXTsKKwlpbnQgaSwgZXJyOwor CisJcmVxLnBhZCA9IDA7CisJcmVxLm51bV9tZXRlcnMgPSBjcHVfdG9fbGUxNihTQ0FSTEVUVDJf TlVNX01FVEVSUyk7CisJcmVxLm1hZ2ljID0gY3B1X3RvX2xlMzIoU0NBUkxFVFQyX1VTQl9NRVRF Ul9MRVZFTFNfR0VUX01BR0lDKTsKKwllcnIgPSBzY2FybGV0dDJfdXNiKG1peGVyLCBTQ0FSTEVU VDJfVVNCX0dFVF9NRVRFUl9MRVZFTFMsCisJCQkgICAgJnJlcSwgc2l6ZW9mKHJlcSksIHJlc3As IHNpemVvZihyZXNwKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBjb3B5 LCBjb252ZXJ0IHRvIHUxNiAqLworCWZvciAoaSA9IDA7IGkgPCBTQ0FSTEVUVDJfTlVNX01FVEVS UzsgaSsrKQorCQlsZXZlbHNbaV0gPSByZXNwW2ldOworCisJcmV0dXJuIDA7Cit9CisKKy8qKiog Q29udHJvbCBGdW5jdGlvbnMgKioqLworCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEg bmV3IGNvbnRyb2wgKi8KK3N0YXRpYyBpbnQgYWRkX25ld19jdGwoc3RydWN0IHVzYl9taXhlcl9p bnRlcmZhY2UgKm1peGVyLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcg Km5jb250cm9sLAorCQkgICAgICAgaW50IGluZGV4LCBpbnQgY2hhbm5lbHMsIGNvbnN0IGNoYXIg Km5hbWUsCisJCSAgICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICoqa2N0bF9yZXR1cm4pCit7CisJ c3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAq ZWxlbTsKKwlpbnQgZXJyOworCisJZWxlbSA9IGt6YWxsb2Moc2l6ZW9mKCplbGVtKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFlbGVtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVsZW0tPmhlYWQubWl4 ZXIgPSBtaXhlcjsKKwllbGVtLT5jb250cm9sID0gaW5kZXg7CisJZWxlbS0+aGVhZC5pZCA9IGlu ZGV4OworCWVsZW0tPmNoYW5uZWxzID0gY2hhbm5lbHM7CisKKwlrY3RsID0gc25kX2N0bF9uZXcx KG5jb250cm9sLCBlbGVtKTsKKwlpZiAoIWtjdGwpIHsKKwkJa2ZyZWUoZWxlbSk7CisJCXJldHVy biAtRU5PTUVNOworCX0KKwlrY3RsLT5wcml2YXRlX2ZyZWUgPSBzbmRfdXNiX21peGVyX2VsZW1f ZnJlZTsKKworCXN0cmxjcHkoa2N0bC0+aWQubmFtZSwgbmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5h bWUpKTsKKworCWVyciA9IHNuZF91c2JfbWl4ZXJfYWRkX2NvbnRyb2woJmVsZW0tPmhlYWQsIGtj dGwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGtjdGxfcmV0dXJuKQor CQkqa2N0bF9yZXR1cm4gPSBrY3RsOworCisJcmV0dXJuIDA7Cit9CisKKy8qKiogQW5hbG9ndWUg TGluZSBPdXQgVm9sdW1lIENvbnRyb2xzICoqKi8KKworLyogZmlyc3QtdGltZSBpbml0aWFsaXNh dGlvbiBvZiB2b2x1bWVzICovCitzdGF0aWMgaW50IHNjYXJsZXR0Ml9pbml0X3ZvbHVtZXMoc3Ry dWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyKQoreworCXN0cnVjdCBzY2FybGV0dDJfY2hp cF9kYXRhICpwcml2YXRlID0gbWl4ZXItPmNoaXAtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHNj YXJsZXR0Ml9wb3J0cyAqcG9ydHMgPSBwcml2YXRlLT5pbmZvLT5wb3J0czsKKwlpbnQgbnVtX2xp bmVfb3V0ID0KKwkJcG9ydHNbU0NBUkxFVFQyX1BPUlRfVFlQRV9BTkFMT0dVRV0ubnVtW1NDQVJM RVRUMl9QT1JUX09VVF07CisJc3RydWN0IHNjYXJsZXR0Ml91c2Jfdm9sdW1lX3N0YXR1cyB2b2x1 bWVfc3RhdHVzOworCWludCBlcnIsIGk7CisKKwllcnIgPSBzY2FybGV0dDJfdXNiX2dldF92b2x1 bWVfc3RhdHVzKG1peGVyLCAmdm9sdW1lX3N0YXR1cyk7CisJaWYgKGVyciA8IDApCisJCXJldHVy biBlcnI7CisKKwlwcml2YXRlLT5tYXN0ZXJfdm9sID0gY2xhbXAoCisJCXZvbHVtZV9zdGF0dXMu bWFzdGVyX3ZvbCArIFNDQVJMRVRUX1ZPTFVNRV9CSUFTLAorCQkwLCBTQ0FSTEVUVF9WT0xVTUVf QklBUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2xpbmVfb3V0OyBpKyspIHsKKwkJaW50IHZv bHVtZTsKKworCQlwcml2YXRlLT52b2xfc3dfaHdfc3dpdGNoW2ldID0gISF2b2x1bWVfc3RhdHVz LnN3X2h3X3N3aXRjaFtpXTsKKworCQl2b2x1bWUgPSBwcml2YXRlLT52b2xfc3dfaHdfc3dpdGNo W2ldCisJCQkgICA/IHZvbHVtZV9zdGF0dXMubWFzdGVyX3ZvbAorCQkJICAgOiB2b2x1bWVfc3Rh dHVzLnN3X3ZvbFtpXTsKKwkJdm9sdW1lID0gY2xhbXAodm9sdW1lICsgU0NBUkxFVFRfVk9MVU1F X0JJQVMsCisJCQkgICAgICAgMCwgU0NBUkxFVFRfVk9MVU1FX0JJQVMpOworCQlwcml2YXRlLT52 b2xbaV0gPSB2b2x1bWU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFNDQVJMRVRUMl9CVVRUT05f Q09VTlQ7IGkrKykKKwkJcHJpdmF0ZS0+YnV0dG9uc1tpXSA9ICEhdm9sdW1lX3N0YXR1cy5idXR0 b25zW2ldOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHVwZGF0ZSBoYXJkd2FyZSB2b2x1bWUgY29u dHJvbHMgYWZ0ZXIgcmVjZWl2aW5nIG5vdGlmaWNhdGlvbiB0aGF0CisgKiB0aGV5IGhhdmUgY2hh bmdlZAorICovCitzdGF0aWMgaW50IHNjYXJsZXR0Ml91cGRhdGVfdm9sdW1lcyhzdHJ1Y3QgdXNi X21peGVyX2ludGVyZmFjZSAqbWl4ZXIpCit7CisJc3RydWN0IHNjYXJsZXR0Ml9jaGlwX2RhdGEg KnByaXZhdGUgPSBtaXhlci0+Y2hpcC0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3Qgc2NhcmxldHQy X3BvcnRzICpwb3J0cyA9IHByaXZhdGUtPmluZm8tPnBvcnRzOworCXN0cnVjdCBzY2FybGV0dDJf dXNiX3ZvbHVtZV9zdGF0dXMgdm9sdW1lX3N0YXR1czsKKwlpbnQgbnVtX2xpbmVfb3V0ID0KKwkJ cG9ydHNbU0NBUkxFVFQyX1BPUlRfVFlQRV9BTkFMT0dVRV0ubnVtW1NDQVJMRVRUMl9QT1JUX09V VF07CisJaW50IGVyciwgaTsKKworCXByaXZhdGUtPnZvbF91cGRhdGVkID0gMDsKKworCWVyciA9 IHNjYXJsZXR0Ml91c2JfZ2V0X3ZvbHVtZV9zdGF0dXMobWl4ZXIsICZ2b2x1bWVfc3RhdHVzKTsK KwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXByaXZhdGUtPm1hc3Rlcl92b2wgPSBj bGFtcCgKKwkJdm9sdW1lX3N0YXR1cy5tYXN0ZXJfdm9sICsgU0NBUkxFVFRfVk9MVU1FX0JJQVMs CisJCTAsIFNDQVJMRVRUX1ZPTFVNRV9CSUFTKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fbGlu ZV9vdXQ7IGkrKykgeworCQlpZiAocHJpdmF0ZS0+dm9sX3N3X2h3X3N3aXRjaFtpXSkKKwkJCXBy aXZhdGUtPnZvbFtpXSA9IHByaXZhdGUtPm1hc3Rlcl92b2w7CisJfQorCisJZm9yIChpID0gMDsg aSA8IFNDQVJMRVRUMl9CVVRUT05fQ09VTlQ7IGkrKykKKwkJcHJpdmF0ZS0+YnV0dG9uc1tpXSA9 ICEhdm9sdW1lX3N0YXR1cy5idXR0b25zW2ldOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgc2NhcmxldHQyX3ZvbHVtZV9jdGxfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAor CQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdHJ1Y3QgdXNi X21peGVyX2VsZW1faW5mbyAqZWxlbSA9IGtjdGwtPnByaXZhdGVfZGF0YTsKKworCXVpbmZvLT50 eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IGVsZW0t PmNoYW5uZWxzOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVl LmludGVnZXIubWF4ID0gU0NBUkxFVFRfVk9MVU1FX0JJQVM7CisJdWluZm8tPnZhbHVlLmludGVn ZXIuc3RlcCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2NhcmxldHQyX21hc3Rl cl92b2x1bWVfY3RsX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkJCQkgICBzdHJ1 Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgdXNiX21peGVyX2Vs ZW1faW5mbyAqZWxlbSA9IGtjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2NhcmxldHQyX2No aXBfZGF0YSAqcHJpdmF0ZSA9IGVsZW0tPmhlYWQubWl4ZXItPmNoaXAtPnByaXZhdGU7CisKKwlp ZiAocHJpdmF0ZS0+dm9sX3VwZGF0ZWQpIHsKKwkJbXV0ZXhfbG9jaygmcHJpdmF0ZS0+ZGF0YV9t dXRleCk7CisJCXNjYXJsZXR0Ml91cGRhdGVfdm9sdW1lcyhlbGVtLT5oZWFkLm1peGVyKTsKKwkJ bXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5kYXRhX211dGV4KTsKKwl9CisKKwl1Y29udHJvbC0+dmFs dWUuaW50ZWdlci52YWx1ZVswXSA9IHByaXZhdGUtPm1hc3Rlcl92b2w7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgc2NhcmxldHQyX3ZvbHVtZV9jdGxfZ2V0KHN0cnVjdCBzbmRfa2NvbnRy b2wgKmtjdGwsCisJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQor eworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICplbGVtID0ga2N0bC0+cHJpdmF0ZV9kYXRh OworCXN0cnVjdCBzY2FybGV0dDJfY2hpcF9kYXRhICpwcml2YXRlID0gZWxlbS0+aGVhZC5taXhl ci0+Y2hpcC0+cHJpdmF0ZTsKKwlpbnQgaW5kZXggPSBlbGVtLT5jb250cm9sOworCisJaWYgKHBy aXZhdGUtPnZvbF91cGRhdGVkKSB7CisJCW11dGV4X2xvY2soJnByaXZhdGUtPmRhdGFfbXV0ZXgp OworCQlzY2FybGV0dDJfdXBkYXRlX3ZvbHVtZXMoZWxlbS0+aGVhZC5taXhlcik7CisJCW11dGV4 X3VubG9jaygmcHJpdmF0ZS0+ZGF0YV9tdXRleCk7CisJfQorCisJdWNvbnRyb2wtPnZhbHVlLmlu dGVnZXIudmFsdWVbMF0gPSBwcml2YXRlLT52b2xbaW5kZXhdOworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IHNjYXJsZXR0Ml92b2x1bWVfY3RsX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpr Y3RsLAorCQkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlz dHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqZWxlbSA9IGtjdGwtPnByaXZhdGVfZGF0YTsKKwlz dHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9IGVsZW0tPmhlYWQubWl4ZXItPmNo aXAtPnByaXZhdGU7CisJaW50IGluZGV4ID0gZWxlbS0+Y29udHJvbDsKKwlpbnQgb3ZhbCwgdmFs LCBlcnI7CisKKwltdXRleF9sb2NrKCZwcml2YXRlLT5kYXRhX211dGV4KTsKKworCW92YWwgPSBw cml2YXRlLT52b2xbaW5kZXhdOworCXZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVl WzBdOworCisJaWYgKG92YWwgPT0gdmFsKSB7CisJCW11dGV4X3VubG9jaygmcHJpdmF0ZS0+ZGF0 YV9tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCXByaXZhdGUtPnZvbFtpbmRleF0gPSB2YWw7 CisJZXJyID0gc2NhcmxldHQyX3VzYl9zZXRfbGluZV9vdXRwdXRfdm9sdW1lKGVsZW0tPmhlYWQu bWl4ZXIsCisJCQkJCQkgICBpbmRleCwKKwkJCQkJCSAgIHZhbCAtIFNDQVJMRVRUX1ZPTFVNRV9C SUFTKTsKKwltdXRleF91bmxvY2soJnByaXZhdGUtPmRhdGFfbXV0ZXgpOworCXJldHVybiBlcnIg PCAwID8gZXJyIDogMTsKK30KKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX01JTk1BWCgK KwlkYl9zY2FsZV9zY2FybGV0dF9nYWluLCAtU0NBUkxFVFRfVk9MVU1FX0JJQVMgKiAxMDAsIDAK Kyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzY2FybGV0dDJfbWFz dGVyX3ZvbHVtZV9jdGwgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIs CisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwKKwkJICBTTkRSVl9DVExf RUxFTV9BQ0NFU1NfVExWX1JFQUQsCisJLm5hbWUgPSAiIiwKKwkuaW5mbyA9IHNjYXJsZXR0Ml92 b2x1bWVfY3RsX2luZm8sCisJLmdldCAgPSBzY2FybGV0dDJfbWFzdGVyX3ZvbHVtZV9jdGxfZ2V0 LAorCS5wcml2YXRlX3ZhbHVlID0gMCwgLyogbWF4IHZhbHVlICovCisJLnRsdiA9IHsgLnAgPSBk Yl9zY2FsZV9zY2FybGV0dF9nYWluIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tj b250cm9sX25ldyBzY2FybGV0dDJfbGluZV9vdXRfdm9sdW1lX2N0bCA9IHsKKwkuaWZhY2UgPSBT TkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUND RVNTX1JFQURXUklURSB8CisJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFELAorCS5u YW1lID0gIiIsCisJLmluZm8gPSBzY2FybGV0dDJfdm9sdW1lX2N0bF9pbmZvLAorCS5nZXQgID0g c2NhcmxldHQyX3ZvbHVtZV9jdGxfZ2V0LAorCS5wdXQgID0gc2NhcmxldHQyX3ZvbHVtZV9jdGxf cHV0LAorCS5wcml2YXRlX3ZhbHVlID0gMCwgLyogbWF4IHZhbHVlICovCisJLnRsdiA9IHsgLnAg PSBkYl9zY2FsZV9zY2FybGV0dF9nYWluIH0KK307CisKKy8qKiogSFcvU1cgVm9sdW1lIFN3aXRj aCBDb250cm9scyAqKiovCisKK3N0YXRpYyBpbnQgc2NhcmxldHQyX3N3X2h3X2VudW1fY3RsX2lu Zm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1f aW5mbyAqdWluZm8pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZhbHVlc1syXSA9IHsK KwkJIlNXIiwgIkhXIgorCX07CisKKwlyZXR1cm4gc25kX2N0bF9lbnVtX2luZm8odWluZm8sIDEs IDIsIHZhbHVlcyk7Cit9CisKK3N0YXRpYyBpbnQgc2NhcmxldHQyX3N3X2h3X2VudW1fY3RsX2dl dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3Zh bHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqZWxlbSA9IGtj dGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9 IGVsZW0tPmhlYWQubWl4ZXItPmNoaXAtPnByaXZhdGU7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51 bWVyYXRlZC5pdGVtWzBdID0KKwkJcHJpdmF0ZS0+dm9sX3N3X2h3X3N3aXRjaFtlbGVtLT5jb250 cm9sXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY2FybGV0dDJfc3dfaHdfZW51bV9j dGxfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2Vs ZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICplbGVt ID0ga2N0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzY2FybGV0dDJfY2hpcF9kYXRhICpwcml2 YXRlID0gZWxlbS0+aGVhZC5taXhlci0+Y2hpcC0+cHJpdmF0ZTsKKworCWludCBpbmRleCA9IGVs ZW0tPmNvbnRyb2w7CisJaW50IG92YWwsIHZhbCwgZXJyOworCisJbXV0ZXhfbG9jaygmcHJpdmF0 ZS0+ZGF0YV9tdXRleCk7CisKKwlvdmFsID0gcHJpdmF0ZS0+dm9sX3N3X2h3X3N3aXRjaFtpbmRl eF07CisJdmFsID0gISF1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmIChv dmFsID09IHZhbCkgeworCQltdXRleF91bmxvY2soJnByaXZhdGUtPmRhdGFfbXV0ZXgpOworCQly ZXR1cm4gMDsKKwl9CisKKwlwcml2YXRlLT52b2xfc3dfaHdfc3dpdGNoW2luZGV4XSA9IHZhbDsK KworCS8qIENoYW5nZSBhY2Nlc3MgbW9kZSB0byBSTyAoaGFyZHdhcmUgY29udHJvbGxlZCB2b2x1 bWUpCisJICogb3IgUlcgKHNvZnR3YXJlIGNvbnRyb2xsZWQgdm9sdW1lKQorCSAqLworCWlmICh2 YWwpCisJCXByaXZhdGUtPnZvbF9jdGxzW2luZGV4XS0+dmRbMF0uYWNjZXNzICY9CisJCQl+U05E UlZfQ1RMX0VMRU1fQUNDRVNTX1dSSVRFOworCWVsc2UKKwkJcHJpdmF0ZS0+dm9sX2N0bHNbaW5k ZXhdLT52ZFswXS5hY2Nlc3MgfD0KKwkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19XUklURTsKKwor CS8qIFJlc2V0IHZvbHVtZSB0byBtYXN0ZXIgdm9sdW1lICovCisJcHJpdmF0ZS0+dm9sW2luZGV4 XSA9IHByaXZhdGUtPm1hc3Rlcl92b2w7CisKKwkvKiBTZXQgU1cgdm9sdW1lIHRvIGN1cnJlbnQg SFcgdm9sdW1lICovCisJZXJyID0gc2NhcmxldHQyX3VzYl9zZXRfbGluZV9vdXRwdXRfdm9sdW1l KAorCQllbGVtLT5oZWFkLm1peGVyLCBpbmRleCwKKwkJcHJpdmF0ZS0+bWFzdGVyX3ZvbCAtIFND QVJMRVRUX1ZPTFVNRV9CSUFTKTsKKwlpZiAoZXJyIDwgMCkgeworCQltdXRleF91bmxvY2soJnBy aXZhdGUtPmRhdGFfbXV0ZXgpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIE5vdGlmeSBvZiBS Ty9SVyBjaGFuZ2UgKi8KKwlzbmRfY3RsX25vdGlmeShlbGVtLT5oZWFkLm1peGVyLT5jaGlwLT5j YXJkLAorCQkgICAgICAgU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTywKKwkJICAgICAgICZwcml2 YXRlLT52b2xfY3Rsc1tpbmRleF0tPmlkKTsKKworCS8qIFNlbmQgU1cvSFcgc3dpdGNoIGNoYW5n ZSB0byB0aGUgZGV2aWNlICovCisJZXJyID0gc2NhcmxldHQyX3VzYl9zZXRfbW9uaXRvcl92b2x1 bWVfc3dpdGNoKGVsZW0tPmhlYWQubWl4ZXIsCisJCQkJCQkgICAgICBpbmRleCwgdmFsKTsKKwlt dXRleF91bmxvY2soJnByaXZhdGUtPmRhdGFfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzY2FybGV0dDJfc3dfaHdfZW51bV9j dGwgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAi IiwKKwkuaW5mbyA9IHNjYXJsZXR0Ml9zd19od19lbnVtX2N0bF9pbmZvLAorCS5nZXQgID0gc2Nh cmxldHQyX3N3X2h3X2VudW1fY3RsX2dldCwKKwkucHV0ICA9IHNjYXJsZXR0Ml9zd19od19lbnVt X2N0bF9wdXQsCit9OworCisvKioqIE11dGUvRGltIENvbnRyb2xzICoqKi8KKworc3RhdGljIGlu dCBzY2FybGV0dDJfYnV0dG9uX2N0bF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJ CQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHVz Yl9taXhlcl9lbGVtX2luZm8gKmVsZW0gPSBrY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNj YXJsZXR0Ml9jaGlwX2RhdGEgKnByaXZhdGUgPSBlbGVtLT5oZWFkLm1peGVyLT5jaGlwLT5wcml2 YXRlOworCisJaWYgKHByaXZhdGUtPnZvbF91cGRhdGVkKSB7CisJCW11dGV4X2xvY2soJnByaXZh dGUtPmRhdGFfbXV0ZXgpOworCQlzY2FybGV0dDJfdXBkYXRlX3ZvbHVtZXMoZWxlbS0+aGVhZC5t aXhlcik7CisJCW11dGV4X3VubG9jaygmcHJpdmF0ZS0+ZGF0YV9tdXRleCk7CisJfQorCisJdWNv bnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHByaXZhdGUtPmJ1dHRvbnNbZWxlbS0+ Y29udHJvbF07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250 cm9sX25ldyBzY2FybGV0dDJfYnV0dG9uX2N0bCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxF TV9JRkFDRV9NSVhFUiwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCisJ Lm5hbWUgPSAiIiwKKwkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCisJLmdldCAg PSBzY2FybGV0dDJfYnV0dG9uX2N0bF9nZXQKK307CisKKy8qKiogQ3JlYXRlIHRoZSB2b2x1bWUg YW5kIHZvbHVtZSBzd2l0Y2ggY29udHJvbHMgKioqLworCitzdGF0aWMgaW50IHNjYXJsZXR0Ml9h ZGRfbGluZV9vdXRfY3RscyhzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIpCit7CisJ c3RydWN0IHNjYXJsZXR0Ml9jaGlwX2RhdGEgKnByaXZhdGUgPSBtaXhlci0+Y2hpcC0+cHJpdmF0 ZTsKKwljb25zdCBzdHJ1Y3Qgc2NhcmxldHQyX2RldmljZV9pbmZvICppbmZvID0gcHJpdmF0ZS0+ aW5mbzsKKwljb25zdCBzdHJ1Y3Qgc2NhcmxldHQyX3BvcnRzICpwb3J0cyA9IGluZm8tPnBvcnRz OworCWludCBudW1fbGluZV9vdXQgPQorCQlwb3J0c1tTQ0FSTEVUVDJfUE9SVF9UWVBFX0FOQUxP R1VFXS5udW1bU0NBUkxFVFQyX1BPUlRfT1VUXTsKKwlpbnQgZXJyLCBpOworCWNoYXIgbXhbU05E UlZfQ1RMX0VMRU1fSURfTkFNRV9NQVhMRU5dOworCisJLyogQWRkIFIvTyBIVyB2b2x1bWUgY29u dHJvbCAqLworCXNucHJpbnRmKG14LCBzaXplb2YobXgpLCAiTWFzdGVyIEhXIFBsYXliYWNrIFZv bHVtZSIpOworCWVyciA9IGFkZF9uZXdfY3RsKG1peGVyLCAmc2NhcmxldHQyX21hc3Rlcl92b2x1 bWVfY3RsLAorCQkJICAwLCAxLCBteCwgJnByaXZhdGUtPm1hc3Rlcl92b2xfY3RsKTsKKwlpZiAo ZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIEFkZCB2b2x1bWUgY29udHJvbHMgKi8KKwlm b3IgKGkgPSAwOyBpIDwgbnVtX2xpbmVfb3V0OyBpKyspIHsKKworCQkvKiBGYWRlciAqLworCQlp ZiAoaW5mby0+bGluZV9vdXRfZGVzY3JzW2ldKQorCQkJc25wcmludGYobXgsIHNpemVvZihteCks CisJCQkJICJMaW5lICUwMmQgKCVzKSBQbGF5YmFjayBWb2x1bWUiLAorCQkJCSBpICsgMSwgaW5m by0+bGluZV9vdXRfZGVzY3JzW2ldKTsKKwkJZWxzZQorCQkJc25wcmludGYobXgsIHNpemVvZiht eCksCisJCQkJICJMaW5lICUwMmQgUGxheWJhY2sgVm9sdW1lIiwKKwkJCQkgaSArIDEpOworCQll cnIgPSBhZGRfbmV3X2N0bChtaXhlciwgJnNjYXJsZXR0Ml9saW5lX291dF92b2x1bWVfY3RsLAor CQkJCSAgaSwgMSwgbXgsICZwcml2YXRlLT52b2xfY3Rsc1tpXSk7CisJCWlmIChlcnIgPCAwKQor CQkJcmV0dXJuIGVycjsKKworCQkvKiBNYWtlIHRoZSBmYWRlciByZWFkLW9ubHkgaWYgdGhlIFNX L0hXIHN3aXRjaCBpcyBzZXQgdG8gSFcgKi8KKwkJaWYgKHByaXZhdGUtPnZvbF9zd19od19zd2l0 Y2hbaV0pCisJCQlwcml2YXRlLT52b2xfY3Rsc1tpXS0+dmRbMF0uYWNjZXNzICY9CisJCQkJflNO RFJWX0NUTF9FTEVNX0FDQ0VTU19XUklURTsKKworCQkvKiBTVy9IVyBTd2l0Y2ggKi8KKwkJc25w cmludGYobXgsIHNpemVvZihteCksCisJCQkgIkxpbmUgT3V0ICUwMmQgVm9sdW1lIENvbnRyb2wg UGxheWJhY2sgRW51bSIsCisJCQkgaSArIDEpOworCQllcnIgPSBhZGRfbmV3X2N0bChtaXhlciwg JnNjYXJsZXR0Ml9zd19od19lbnVtX2N0bCwKKwkJCQkgIGksIDEsIG14LCBOVUxMKTsKKwkJaWYg KGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEFkZCBidXR0b24gY29udHJvbHMg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgU0NBUkxFVFQyX0JVVFRPTl9DT1VOVDsgaSsrKSB7CisJCWVy ciA9IGFkZF9uZXdfY3RsKG1peGVyLCAmc2NhcmxldHQyX2J1dHRvbl9jdGwsCisJCQkJICBpLCAx LCBzY2FybGV0dDJfYnV0dG9uX25hbWVzW2ldLAorCQkJCSAgJnByaXZhdGUtPmJ1dHRvbl9jdGxz W2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOwor fQorCisvKioqIE1peGVyIFZvbHVtZSBDb250cm9scyAqKiovCisKK3N0YXRpYyBpbnQgc2Nhcmxl dHQyX21peGVyX2N0bF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCQkJICAgIHN0 cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RydWN0IHVzYl9taXhlcl9lbGVt X2luZm8gKmVsZW0gPSBrY3RsLT5wcml2YXRlX2RhdGE7CisKKwl1aW5mby0+dHlwZSA9IFNORFJW X0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSBlbGVtLT5jaGFubmVsczsK Kwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1h eCA9IFNDQVJMRVRUX01JWEVSX01BWF9WQUxVRTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5zdGVw ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY2FybGV0dDJfbWl4ZXJfY3RsX2dl dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1f dmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICplbGVtID0g a2N0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzY2FybGV0dDJfY2hpcF9kYXRhICpwcml2YXRl ID0gZWxlbS0+aGVhZC5taXhlci0+Y2hpcC0+cHJpdmF0ZTsKKworCXVjb250cm9sLT52YWx1ZS5p bnRlZ2VyLnZhbHVlWzBdID0gcHJpdmF0ZS0+bWl4W2VsZW0tPmNvbnRyb2xdOworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IHNjYXJsZXR0Ml9taXhlcl9jdGxfcHV0KHN0cnVjdCBzbmRfa2Nv bnRyb2wgKmtjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wp Cit7CisJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmVsZW0gPSBrY3RsLT5wcml2YXRlX2Rh dGE7CisJc3RydWN0IHNjYXJsZXR0Ml9jaGlwX2RhdGEgKnByaXZhdGUgPSBlbGVtLT5oZWFkLm1p eGVyLT5jaGlwLT5wcml2YXRlOworCWNvbnN0IHN0cnVjdCBzY2FybGV0dDJfZGV2aWNlX2luZm8g KmluZm8gPSBwcml2YXRlLT5pbmZvOworCWNvbnN0IHN0cnVjdCBzY2FybGV0dDJfcG9ydHMgKnBv cnRzID0gaW5mby0+cG9ydHM7CisJaW50IG92YWwsIHZhbCwgbnVtX21peGVyX2luLCBtaXhfbnVt LCBlcnI7CisKKwltdXRleF9sb2NrKCZwcml2YXRlLT5kYXRhX211dGV4KTsKKworCW92YWwgPSBw cml2YXRlLT5taXhbZWxlbS0+Y29udHJvbF07CisJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVn ZXIudmFsdWVbMF07CisJbnVtX21peGVyX2luID0gcG9ydHNbU0NBUkxFVFQyX1BPUlRfVFlQRV9N SVhdLm51bVtTQ0FSTEVUVDJfUE9SVF9PVVRdOworCW1peF9udW0gPSBlbGVtLT5jb250cm9sIC8g bnVtX21peGVyX2luOworCisJaWYgKG92YWwgPT0gdmFsKSB7CisJCW11dGV4X3VubG9jaygmcHJp dmF0ZS0+ZGF0YV9tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCXByaXZhdGUtPm1peFtlbGVt LT5jb250cm9sXSA9IHZhbDsKKwllcnIgPSBzY2FybGV0dDJfdXNiX3NldF9taXgoZWxlbS0+aGVh ZC5taXhlciwgbWl4X251bSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5kYXRhX211dGV4KTsK KwlyZXR1cm4gZXJyIDwgMCA/IGVyciA6IDE7Cit9CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RM Vl9EQl9NSU5NQVgoCisJZGJfc2NhbGVfc2NhcmxldHRfbWl4ZXIsCisJU0NBUkxFVFRfTUlYRVJf TUlOX0RCICogMTAwLAorCVNDQVJMRVRUX01JWEVSX01BWF9EQiAqIDEwMAorKTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNjYXJsZXR0Ml9taXhlcl9jdGwgPSB7CisJ LmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLmFjY2VzcyA9IFNORFJWX0NU TF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZf UkVBRCwKKwkubmFtZSA9ICIiLAorCS5pbmZvID0gc2NhcmxldHQyX21peGVyX2N0bF9pbmZvLAor CS5nZXQgID0gc2NhcmxldHQyX21peGVyX2N0bF9nZXQsCisJLnB1dCAgPSBzY2FybGV0dDJfbWl4 ZXJfY3RsX3B1dCwKKwkucHJpdmF0ZV92YWx1ZSA9IFNDQVJMRVRUX01JWEVSX01BWF9EQiwgLyog bWF4IHZhbHVlICovCisJLnRsdiA9IHsgLnAgPSBkYl9zY2FsZV9zY2FybGV0dF9taXhlciB9Cit9 OworCitzdGF0aWMgaW50IHNjYXJsZXR0Ml9hZGRfbWl4ZXJfY3RscyhzdHJ1Y3QgdXNiX21peGVy X2ludGVyZmFjZSAqbWl4ZXIpCit7CisJc3RydWN0IHNjYXJsZXR0Ml9jaGlwX2RhdGEgKnByaXZh dGUgPSBtaXhlci0+Y2hpcC0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3Qgc2NhcmxldHQyX3BvcnRz ICpwb3J0cyA9IHByaXZhdGUtPmluZm8tPnBvcnRzOworCWludCBlcnIsIGksIGo7CisJaW50IGlu ZGV4OworCWNoYXIgbXhbU05EUlZfQ1RMX0VMRU1fSURfTkFNRV9NQVhMRU5dOworCisJaW50IG51 bV9pbnB1dHMgPSBwb3J0c1tTQ0FSTEVUVDJfUE9SVF9UWVBFX01JWF0ubnVtW1NDQVJMRVRUMl9Q T1JUX09VVF07CisJaW50IG51bV9vdXRwdXRzID0gcG9ydHNbU0NBUkxFVFQyX1BPUlRfVFlQRV9N SVhdLm51bVtTQ0FSTEVUVDJfUE9SVF9JTl07CisKKwlmb3IgKGkgPSAwLCBpbmRleCA9IDA7IGkg PCBudW1fb3V0cHV0czsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBudW1faW5wdXRzOyBqKyss IGluZGV4KyspIHsKKwkJCXNucHJpbnRmKG14LCBzaXplb2YobXgpLAorCQkJCSAiTWl4ICVjIElu cHV0ICUwMmQgUGxheWJhY2sgVm9sdW1lIiwKKwkJCQkgJ0EnICsgaSwgaiArIDEpOworCQkJZXJy ID0gYWRkX25ld19jdGwobWl4ZXIsICZzY2FybGV0dDJfbWl4ZXJfY3RsLAorCQkJCQkgIGluZGV4 LCAxLCBteCwgTlVMTCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJ fQorCisJcmV0dXJuIDA7Cit9CisKKy8qKiogTXV4IFNvdXJjZSBTZWxlY3Rpb24gQ29udHJvbHMg KioqLworCitzdGF0aWMgaW50IHNjYXJsZXR0Ml9tdXhfc3JjX2VudW1fY3RsX2luZm8oc3RydWN0 IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1 aW5mbykKK3sKKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqZWxlbSA9IGtjdGwtPnByaXZh dGVfZGF0YTsKKwlzdHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9IGVsZW0tPmhl YWQubWl4ZXItPmNoaXAtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHNjYXJsZXR0Ml9wb3J0cyAq cG9ydHMgPSBwcml2YXRlLT5pbmZvLT5wb3J0czsKKwl1bnNpZ25lZCBpbnQgaXRlbSA9IHVpbmZv LT52YWx1ZS5lbnVtZXJhdGVkLml0ZW07CisJaW50IGl0ZW1zID0gcHJpdmF0ZS0+bnVtX211eF9z cmNzOworCWludCBwb3J0X3R5cGU7CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZ UEVfRU5VTUVSQVRFRDsKKwl1aW5mby0+Y291bnQgPSBlbGVtLT5jaGFubmVsczsKKwl1aW5mby0+ dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IGl0ZW1zOworCisJaWYgKGl0ZW0gPj0gaXRlbXMpCisJ CWl0ZW0gPSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gaXRlbXMgLSAxOworCisJZm9y IChwb3J0X3R5cGUgPSAwOworCSAgICAgcG9ydF90eXBlIDwgU0NBUkxFVFQyX1BPUlRfVFlQRV9D T1VOVDsKKwkgICAgIHBvcnRfdHlwZSsrKSB7CisJCWlmIChpdGVtIDwgcG9ydHNbcG9ydF90eXBl XS5udW1bU0NBUkxFVFQyX1BPUlRfSU5dKSB7CisJCQlzcHJpbnRmKHVpbmZvLT52YWx1ZS5lbnVt ZXJhdGVkLm5hbWUsCisJCQkJcG9ydHNbcG9ydF90eXBlXS5zcmNfZGVzY3IsCisJCQkJaXRlbSAr IHBvcnRzW3BvcnRfdHlwZV0uc3JjX251bV9vZmZzZXQpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJ aXRlbSAtPSBwb3J0c1twb3J0X3R5cGVdLm51bVtTQ0FSTEVUVDJfUE9SVF9JTl07CisJfQorCisJ cmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgc2NhcmxldHQyX211eF9zcmNfZW51bV9j dGxfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCQkJCSAgc3RydWN0IHNuZF9jdGxf ZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmVs ZW0gPSBrY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNjYXJsZXR0Ml9jaGlwX2RhdGEgKnBy aXZhdGUgPSBlbGVtLT5oZWFkLm1peGVyLT5jaGlwLT5wcml2YXRlOworCisJdWNvbnRyb2wtPnZh bHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHByaXZhdGUtPm11eFtlbGVtLT5jb250cm9sXTsKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY2FybGV0dDJfbXV4X3NyY19lbnVtX2N0bF9wdXQo c3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3Zh bHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqZWxlbSA9IGtj dGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9 IGVsZW0tPmhlYWQubWl4ZXItPmNoaXAtPnByaXZhdGU7CisJaW50IGluZGV4ID0gZWxlbS0+Y29u dHJvbDsKKwlpbnQgb3ZhbCwgdmFsLCBlcnI7CisKKwltdXRleF9sb2NrKCZwcml2YXRlLT5kYXRh X211dGV4KTsKKworCW92YWwgPSBwcml2YXRlLT5tdXhbaW5kZXhdOworCXZhbCA9IGNsYW1wKHVj b250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdLAorCQkgICAgMEwsIHByaXZhdGUtPm51bV9t dXhfc3JjcyAtIDFMKTsKKworCWlmIChvdmFsID09IHZhbCkgeworCQltdXRleF91bmxvY2soJnBy aXZhdGUtPmRhdGFfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcml2YXRlLT5tdXhbaW5k ZXhdID0gdmFsOworCWVyciA9IHNjYXJsZXR0Ml91c2Jfc2V0X211eChlbGVtLT5oZWFkLm1peGVy KTsKKwltdXRleF91bmxvY2soJnByaXZhdGUtPmRhdGFfbXV0ZXgpOworCXJldHVybiBlcnIgPCAw ID8gZXJyIDogMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNj YXJsZXR0Ml9tdXhfc3JjX2VudW1fY3RsID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lG QUNFX01JWEVSLAorCS5uYW1lID0gIiIsCisJLmluZm8gPSBzY2FybGV0dDJfbXV4X3NyY19lbnVt X2N0bF9pbmZvLAorCS5nZXQgID0gc2NhcmxldHQyX211eF9zcmNfZW51bV9jdGxfZ2V0LAorCS5w dXQgID0gc2NhcmxldHQyX211eF9zcmNfZW51bV9jdGxfcHV0LAorfTsKKworc3RhdGljIGludCBz Y2FybGV0dDJfYWRkX211eF9lbnVtcyhzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIp Cit7CisJc3RydWN0IHNjYXJsZXR0Ml9jaGlwX2RhdGEgKnByaXZhdGUgPSBtaXhlci0+Y2hpcC0+ cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3Qgc2NhcmxldHQyX3BvcnRzICpwb3J0cyA9IHByaXZhdGUt PmluZm8tPnBvcnRzOworCWludCBwb3J0X3R5cGUsIGNoYW5uZWwsIGk7CisKKwlmb3IgKGkgPSAw LCBwb3J0X3R5cGUgPSAwOworCSAgICAgcG9ydF90eXBlIDwgU0NBUkxFVFQyX1BPUlRfVFlQRV9D T1VOVDsKKwkgICAgIHBvcnRfdHlwZSsrKSB7CisJCWZvciAoY2hhbm5lbCA9IDA7CisJCSAgICAg Y2hhbm5lbCA8IHBvcnRzW3BvcnRfdHlwZV0ubnVtW1NDQVJMRVRUMl9QT1JUX09VVF07CisJCSAg ICAgY2hhbm5lbCsrLCBpKyspIHsKKwkJCWludCBlcnI7CisJCQljaGFyIG14W1NORFJWX0NUTF9F TEVNX0lEX05BTUVfTUFYTEVOXTsKKwkJCWNvbnN0IGNoYXIgKmNvbnN0IGRlc2NyID0gcG9ydHNb cG9ydF90eXBlXS5kc3RfZGVzY3I7CisKKwkJCXNucHJpbnRmKG14LCBzaXplb2YobXgpIC0gNSwg ZGVzY3IsIGNoYW5uZWwgKyAxKTsKKwkJCXN0cmNhdChteCwgIiBFbnVtIik7CisKKwkJCWVyciA9 IGFkZF9uZXdfY3RsKG1peGVyLAorCQkJCQkgICZzY2FybGV0dDJfbXV4X3NyY19lbnVtX2N0bCwK KwkJCQkJICBpLCAxLCBteCwgTlVMTCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJy OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKiogTWV0ZXIgQ29udHJvbHMgKioqLwor CitzdGF0aWMgaW50IHNjYXJsZXR0Ml9tZXRlcl9jdGxfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9s ICprY3RsLAorCQkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0 cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICplbGVtID0ga2N0bC0+cHJpdmF0ZV9kYXRhOworCisJ dWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50 ID0gZWxlbS0+Y2hhbm5lbHM7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5m by0+dmFsdWUuaW50ZWdlci5tYXggPSA0MDk1OworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLnN0ZXAg PSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNjYXJsZXR0Ml9tZXRlcl9jdGxfZ2V0 KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92 YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmVsZW0gPSBr Y3RsLT5wcml2YXRlX2RhdGE7CisJX191MTYgbWV0ZXJfbGV2ZWxzW1NDQVJMRVRUMl9OVU1fTUVU RVJTXTsKKwlpbnQgaSwgZXJyOworCisJZXJyID0gc2NhcmxldHQyX3VzYl9nZXRfbWV0ZXJfbGV2 ZWxzKGVsZW0tPmhlYWQubWl4ZXIsIG1ldGVyX2xldmVscyk7CisJaWYgKGVyciA8IDApCisJCXJl dHVybiBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgZWxlbS0+Y2hhbm5lbHM7IGkrKykKKwkJdWNv bnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV0gPSBtZXRlcl9sZXZlbHNbaV07CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNjYXJsZXR0 Ml9tZXRlcl9jdGwgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCS5h Y2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCB8IFNORFJWX0NUTF9FTEVNX0FDQ0VT U19WT0xBVElMRSwKKwkubmFtZSA9ICIiLAorCS5pbmZvID0gc2NhcmxldHQyX21ldGVyX2N0bF9p bmZvLAorCS5nZXQgID0gc2NhcmxldHQyX21ldGVyX2N0bF9nZXQKK307CisKK3N0YXRpYyBpbnQg c2NhcmxldHQyX2FkZF9tZXRlcl9jdGwoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVy KQoreworCXJldHVybiBhZGRfbmV3X2N0bChtaXhlciwgJnNjYXJsZXR0Ml9tZXRlcl9jdGwsCisJ CQkgICAwLCBTQ0FSTEVUVDJfTlVNX01FVEVSUywgIkxldmVsIE1ldGVyIiwgTlVMTCk7Cit9CisK Ky8qKiogSW5pdGlhbGlzYXRpb24gKioqLworCitzdGF0aWMgaW50IHNjYXJsZXR0Ml9jb3VudF9t dXhfc3Jjcyhjb25zdCBzdHJ1Y3Qgc2NhcmxldHQyX3BvcnRzICpwb3J0cykKK3sKKwlpbnQgcG9y dF90eXBlLCBjb3VudCA9IDA7CisKKwlmb3IgKHBvcnRfdHlwZSA9IDA7CisJICAgICBwb3J0X3R5 cGUgPCBTQ0FSTEVUVDJfUE9SVF9UWVBFX0NPVU5UOworCSAgICAgcG9ydF90eXBlKyspCisJCWNv dW50ICs9IHBvcnRzW3BvcnRfdHlwZV0ubnVtW1NDQVJMRVRUMl9QT1JUX0lOXTsKKworCXJldHVy biBjb3VudDsKK30KKworLyogRGVmYXVsdCByb3V0aW5nIGNvbm5lY3RzIFBDTSBvdXRwdXRzIGFu ZCBpbnB1dHMgdG8gQW5hbG9ndWUsCisgKiBTL1BESUYsIHRoZW4gQURBVAorICovCitzdGF0aWMg dm9pZCBzY2FybGV0dDJfaW5pdF9yb3V0aW5nKF9fdTggKm11eCwKKwkJCQkgICBjb25zdCBzdHJ1 Y3Qgc2NhcmxldHQyX3BvcnRzICpwb3J0cykKK3sKKwlpbnQgaSwgaW5wdXRfbnVtLCBpbnB1dF9j b3VudCwgcG9ydF90eXBlOworCWludCBvdXRwdXRfbnVtLCBvdXRwdXRfY291bnQsIHBvcnRfdHlw ZV9jb25uZWN0X251bTsKKworCXN0YXRpYyBjb25zdCBpbnQgY29ubmVjdF9vcmRlcltdID0gewor CQlTQ0FSTEVUVDJfUE9SVF9UWVBFX0FOQUxPR1VFLAorCQlTQ0FSTEVUVDJfUE9SVF9UWVBFX1NQ RElGLAorCQlTQ0FSTEVUVDJfUE9SVF9UWVBFX0FEQVQsCisJCS0xCisJfTsKKworCS8qIEFzc2ln biBQQ00gaW5wdXRzIChyb3V0aW5nIG91dHB1dHMpICovCisJb3V0cHV0X251bSA9IHNjYXJsZXR0 Ml9nZXRfcG9ydF9zdGFydF9udW0ocG9ydHMsCisJCQkJCQkgIFNDQVJMRVRUMl9QT1JUX09VVCwK KwkJCQkJCSAgU0NBUkxFVFQyX1BPUlRfVFlQRV9QQ00pOworCW91dHB1dF9jb3VudCA9IHBvcnRz W1NDQVJMRVRUMl9QT1JUX1RZUEVfUENNXS5udW1bU0NBUkxFVFQyX1BPUlRfT1VUXTsKKworCWZv ciAocG9ydF90eXBlID0gY29ubmVjdF9vcmRlcltwb3J0X3R5cGVfY29ubmVjdF9udW0gPSAwXTsK KwkgICAgIHBvcnRfdHlwZSA+PSAwOworCSAgICAgcG9ydF90eXBlID0gY29ubmVjdF9vcmRlclsr K3BvcnRfdHlwZV9jb25uZWN0X251bV0pIHsKKwkJaW5wdXRfbnVtID0gc2NhcmxldHQyX2dldF9w b3J0X3N0YXJ0X251bSgKKwkJCXBvcnRzLCBTQ0FSTEVUVDJfUE9SVF9JTiwgcG9ydF90eXBlKTsK KwkJaW5wdXRfY291bnQgPSBwb3J0c1twb3J0X3R5cGVdLm51bVtTQ0FSTEVUVDJfUE9SVF9JTl07 CisJCWZvciAoaSA9IDA7CisJCSAgICAgaSA8IGlucHV0X2NvdW50ICYmIG91dHB1dF9jb3VudDsK KwkJICAgICBpKyssIG91dHB1dF9jb3VudC0tKQorCQkJbXV4W291dHB1dF9udW0rK10gPSBpbnB1 dF9udW0rKzsKKwl9CisKKwkvKiBBc3NpZ24gUENNIG91dHB1dHMgKHJvdXRpbmcgaW5wdXRzKSAq LworCWlucHV0X251bSA9IHNjYXJsZXR0Ml9nZXRfcG9ydF9zdGFydF9udW0ocG9ydHMsCisJCQkJ CQkgU0NBUkxFVFQyX1BPUlRfSU4sCisJCQkJCQkgU0NBUkxFVFQyX1BPUlRfVFlQRV9QQ00pOwor CWlucHV0X2NvdW50ID0gcG9ydHNbU0NBUkxFVFQyX1BPUlRfVFlQRV9QQ01dLm51bVtTQ0FSTEVU VDJfUE9SVF9JTl07CisKKwlmb3IgKHBvcnRfdHlwZSA9IGNvbm5lY3Rfb3JkZXJbcG9ydF90eXBl X2Nvbm5lY3RfbnVtID0gMF07CisJICAgICBwb3J0X3R5cGUgPj0gMDsKKwkgICAgIHBvcnRfdHlw ZSA9IGNvbm5lY3Rfb3JkZXJbKytwb3J0X3R5cGVfY29ubmVjdF9udW1dKSB7CisJCW91dHB1dF9u dW0gPSBzY2FybGV0dDJfZ2V0X3BvcnRfc3RhcnRfbnVtKAorCQkJcG9ydHMsIFNDQVJMRVRUMl9Q T1JUX09VVCwgcG9ydF90eXBlKTsKKwkJb3V0cHV0X2NvdW50ID0gcG9ydHNbcG9ydF90eXBlXS5u dW1bU0NBUkxFVFQyX1BPUlRfT1VUXTsKKwkJZm9yIChpID0gMDsKKwkJICAgICBpIDwgb3V0cHV0 X2NvdW50ICYmIGlucHV0X2NvdW50OworCQkgICAgIGkrKywgaW5wdXRfY291bnQtLSkKKwkJCW11 eFtvdXRwdXRfbnVtKytdID0gaW5wdXRfbnVtKys7CisJfQorfQorCisvKiBJbml0aWFsaXNlIHBy aXZhdGUgZGF0YSwgcm91dGluZywgc2VxdWVuY2UgbnVtYmVyICovCitzdGF0aWMgaW50IHNjYXJs ZXR0Ml9pbml0X3ByaXZhdGUoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyLAorCQkJ CSAgY29uc3Qgc3RydWN0IHNjYXJsZXR0Ml9kZXZpY2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qg c2NhcmxldHQyX2NoaXBfZGF0YSAqcHJpdmF0ZSA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBz Y2FybGV0dDJfY2hpcF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXByaXZhdGUpCisJCXJl dHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmcHJpdmF0ZS0+dXNiX211dGV4KTsKKwltdXRl eF9pbml0KCZwcml2YXRlLT5kYXRhX211dGV4KTsKKwlwcml2YXRlLT5pbmZvID0gaW5mbzsKKwlw cml2YXRlLT5udW1fbXV4X3NyY3MgPSBzY2FybGV0dDJfY291bnRfbXV4X3NyY3MoaW5mby0+cG9y dHMpOworCXByaXZhdGUtPnNjYXJsZXR0Ml9zZXEgPSAwOworCW1peGVyLT5jaGlwLT5wcml2YXRl ID0gcHJpdmF0ZTsKKworCS8qIFNldHVwIGRlZmF1bHQgcm91dGluZyAqLworCXNjYXJsZXR0Ml9p bml0X3JvdXRpbmcocHJpdmF0ZS0+bXV4LCBpbmZvLT5wb3J0cyk7CisKKwkvKiBJbml0aWFsaXNl IHRoZSBzZXF1ZW5jZSBudW1iZXIgdXNlZCBmb3IgdGhlIHByb3ByaWV0YXJ5IGNvbW1hbmRzICov CisJcmV0dXJuIHNjYXJsZXR0Ml91c2IobWl4ZXIsIFNDQVJMRVRUMl9VU0JfSU5JVF9TRVEsCisJ CQkgICAgIE5VTEwsIDAsIE5VTEwsIDApOworfQorCisvKiBOb3RpZnkgb24gdm9sdW1lIGNoYW5n ZSAqLworc3RhdGljIHZvaWQgc2NhcmxldHQyX21peGVyX2ludGVycnVwdF92b2xfY2hhbmdlKAor CXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcikKK3sKKwlzdHJ1Y3Qgc2NhcmxldHQy X2NoaXBfZGF0YSAqcHJpdmF0ZSA9IG1peGVyLT5jaGlwLT5wcml2YXRlOworCWNvbnN0IHN0cnVj dCBzY2FybGV0dDJfcG9ydHMgKnBvcnRzID0gcHJpdmF0ZS0+aW5mby0+cG9ydHM7CisJaW50IG51 bV9saW5lX291dCA9CisJCXBvcnRzW1NDQVJMRVRUMl9QT1JUX1RZUEVfQU5BTE9HVUVdLm51bVtT Q0FSTEVUVDJfUE9SVF9PVVRdOworCWludCBpOworCisJcHJpdmF0ZS0+dm9sX3VwZGF0ZWQgPSAx OworCisJc25kX2N0bF9ub3RpZnkobWl4ZXItPmNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9N QVNLX1ZBTFVFLAorCQkgICAgICAgJnByaXZhdGUtPm1hc3Rlcl92b2xfY3RsLT5pZCk7CisKKwlm b3IgKGkgPSAwOyBpIDwgbnVtX2xpbmVfb3V0OyBpKyspIHsKKwkJaWYgKCFwcml2YXRlLT52b2xf c3dfaHdfc3dpdGNoW2ldKQorCQkJY29udGludWU7CisJCXNuZF9jdGxfbm90aWZ5KG1peGVyLT5j aGlwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwKKwkJCSAgICAgICAmcHJpdmF0 ZS0+dm9sX2N0bHNbaV0tPmlkKTsKKwl9Cit9CisKKy8qIE5vdGlmeSBvbiBidXR0b24gY2hhbmdl ICovCitzdGF0aWMgdm9pZCBzY2FybGV0dDJfbWl4ZXJfaW50ZXJydXB0X2J1dHRvbl9jaGFuZ2Uo CisJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyKQoreworCXN0cnVjdCBzY2FybGV0 dDJfY2hpcF9kYXRhICpwcml2YXRlID0gbWl4ZXItPmNoaXAtPnByaXZhdGU7CisJaW50IGk7CisK Kwlwcml2YXRlLT52b2xfdXBkYXRlZCA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0NBUkxFVFQy X0JVVFRPTl9DT1VOVDsgaSsrKQorCQlzbmRfY3RsX25vdGlmeShtaXhlci0+Y2hpcC0+Y2FyZCwg U05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsCisJCQkgICAgICAgJnByaXZhdGUtPmJ1dHRvbl9j dGxzW2ldLT5pZCk7Cit9CisKKy8qIEludGVycnVwdCBjYWxsYmFjayAqLworc3RhdGljIHZvaWQg c2NhcmxldHQyX21peGVyX2ludGVycnVwdChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVz Yl9taXhlcl9pbnRlcmZhY2UgKm1peGVyID0gdXJiLT5jb250ZXh0OworCWludCBsZW4gPSB1cmIt PmFjdHVhbF9sZW5ndGg7CisJaW50IHVzdGF0dXMgPSB1cmItPnN0YXR1czsKKwlfX3UzMiBkYXRh OworCisJaWYgKHVzdGF0dXMgIT0gMCkKKwkJZ290byByZXF1ZXVlOworCisJaWYgKGxlbiA9PSA4 KSB7CisJCWRhdGEgPSBsZTMyX3RvX2NwdSgqKF9fdTMyICopdXJiLT50cmFuc2Zlcl9idWZmZXIp OworCQlpZiAoZGF0YSAmIFNDQVJMRVRUMl9VU0JfSU5URVJSVVBUX1ZPTF9DSEFOR0UpCisJCQlz Y2FybGV0dDJfbWl4ZXJfaW50ZXJydXB0X3ZvbF9jaGFuZ2UobWl4ZXIpOworCQlpZiAoZGF0YSAm IFNDQVJMRVRUMl9VU0JfSU5URVJSVVBUX0JVVFRPTl9DSEFOR0UpCisJCQlzY2FybGV0dDJfbWl4 ZXJfaW50ZXJydXB0X2J1dHRvbl9jaGFuZ2UobWl4ZXIpOworCX0gZWxzZSB7CisJCXNuZF9wcmlu dGsoS0VSTl9FUlIgInNjYXJsZXR0IG1peGVyIGludGVycnVwdCBsZW5ndGggJWRcbiIsCisJCQkg ICBsZW4pOworCX0KKworcmVxdWV1ZToKKwlpZiAodXN0YXR1cyAhPSAtRU5PRU5UICYmCisJICAg IHVzdGF0dXMgIT0gLUVDT05OUkVTRVQgJiYKKwkgICAgdXN0YXR1cyAhPSAtRVNIVVRET1dOKSB7 CisJCXVyYi0+ZGV2ID0gbWl4ZXItPmNoaXAtPmRldjsKKwkJdXNiX3N1Ym1pdF91cmIodXJiLCBH RlBfQVRPTUlDKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2NhcmxldHQyX21peGVyX3N0YXR1c19j cmVhdGUoc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyKQoreworCXZvaWQgKnRyYW5z ZmVyX2J1ZmZlcjsKKworCWlmIChtaXhlci0+dXJiKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIg IiVzOiBtaXhlciB1cmIgYWxyZWFkeSBpbiB1c2UhXG4iLAorCQkJICAgX19mdW5jX18pOworCQly ZXR1cm4gMDsKKwl9CisKKwltaXhlci0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVM KTsKKwlpZiAoIW1peGVyLT51cmIpCisJCXJldHVybiAtRU5PTUVNOworCisJdHJhbnNmZXJfYnVm ZmVyID0ga21hbGxvYyhTQ0FSTEVUVDJfVVNCX0lOVEVSUlVQVF9NQVhfREFUQSwgR0ZQX0tFUk5F TCk7CisJaWYgKCF0cmFuc2Zlcl9idWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJdXNiX2Zp bGxfaW50X3VyYigKKwkJbWl4ZXItPnVyYiwKKwkJbWl4ZXItPmNoaXAtPmRldiwKKwkJdXNiX3Jj dmludHBpcGUobWl4ZXItPmNoaXAtPmRldiwKKwkJCSAgICAgICBTQ0FSTEVUVDJfVVNCX0lOVEVS UlVQVF9FTkRQT0lOVCksCisJCXRyYW5zZmVyX2J1ZmZlciwKKwkJU0NBUkxFVFQyX1VTQl9JTlRF UlJVUFRfTUFYX0RBVEEsCisJCXNjYXJsZXR0Ml9taXhlcl9pbnRlcnJ1cHQsCisJCW1peGVyLAor CQlTQ0FSTEVUVDJfVVNCX0lOVEVSUlVQVF9JTlRFUlZBTCk7CisKKwlyZXR1cm4gdXNiX3N1Ym1p dF91cmIobWl4ZXItPnVyYiwgR0ZQX0tFUk5FTCk7Cit9CisKKy8qIEVudHJ5IHBvaW50ICovCitp bnQgc25kX3NjYXJsZXR0X2dlbjJfY29udHJvbHNfY3JlYXRlKHN0cnVjdCB1c2JfbWl4ZXJfaW50 ZXJmYWNlICptaXhlcikKK3sKKwljb25zdCBzdHJ1Y3Qgc2NhcmxldHQyX2RldmljZV9pbmZvICpp bmZvOworCWludCBlcnI7CisKKwkvKiBvbmx5IHVzZSBVQUNfVkVSU0lPTl8yICovCisJaWYgKCFt aXhlci0+cHJvdG9jb2wpCisJCXJldHVybiAwOworCisJc3dpdGNoIChtaXhlci0+Y2hpcC0+dXNi X2lkKSB7CisJY2FzZSBVU0JfSUQoMHgxMjM1LCAweDgyMDEpOgorCQlpbmZvID0gJnMxOGkyMF9n ZW4yX2luZm87CisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIGRldmljZSBub3QgKHlldCkgc3VwcG9y dGVkICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEluaXRpYWxpc2UgcHJpdmF0ZSBk YXRhLCByb3V0aW5nLCBzZXF1ZW5jZSBudW1iZXIgKi8KKwlpZiAoKGVyciA9IHNjYXJsZXR0Ml9p bml0X3ByaXZhdGUobWl4ZXIsIGluZm8pKSA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBSZWFk IHZvbHVtZSBsZXZlbHMgYW5kIGNvbnRyb2xzIGZyb20gdGhlIGludGVyZmFjZSAqLworCWlmICgo ZXJyID0gc2NhcmxldHQyX2luaXRfdm9sdW1lcyhtaXhlcikpIDwgMCkKKwkJcmV0dXJuIGVycjsK KworCS8qIENyZWF0ZSB0aGUgYW5hbG9ndWUgb3V0cHV0IHZvbHVtZSBjb250cm9scyAqLworCWlm ICgoZXJyID0gc2NhcmxldHQyX2FkZF9saW5lX291dF9jdGxzKG1peGVyKSkgPCAwKQorCQlyZXR1 cm4gZXJyOworCisJLyogQ3JlYXRlIHRoZSBpbnB1dCwgb3V0cHV0LCBhbmQgbWl4ZXIgbXV4IGlu cHV0IHNlbGVjdGlvbnMgKi8KKwlpZiAoKGVyciA9IHNjYXJsZXR0Ml9hZGRfbXV4X2VudW1zKG1p eGVyKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogQ3JlYXRlIHRoZSBtYXRyaXggbWl4ZXIg Y29udHJvbHMgKi8KKwlpZiAoKGVyciA9IHNjYXJsZXR0Ml9hZGRfbWl4ZXJfY3RscyhtaXhlcikp IDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIENyZWF0ZSB0aGUgbGV2ZWwgbWV0ZXIgY29udHJv bHMgKi8KKwlpZiAoKGVyciA9IHNjYXJsZXR0Ml9hZGRfbWV0ZXJfY3RsKG1peGVyKSkgPCAwKQor CQlyZXR1cm4gZXJyOworCisJLyogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcG9sbGluZyAqLworCWlm ICgoZXJyID0gc2NhcmxldHQyX21peGVyX3N0YXR1c19jcmVhdGUobWl4ZXIpKSA8IDApCisJCXJl dHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlcl9z Y2FybGV0dF9nZW4yLmggYi9zb3VuZC91c2IvbWl4ZXJfc2NhcmxldHRfZ2VuMi5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTJlMWRhZDc3YWZkCi0tLSAvZGV2L251 bGwKKysrIGIvc291bmQvdXNiL21peGVyX3NjYXJsZXR0X2dlbjIuaApAQCAtMCwwICsxLDcgQEAK Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisjaWZuZGVmIF9fVVNCX01J WEVSX1NDQVJMRVRUX0dFTjJfSAorI2RlZmluZSBfX1VTQl9NSVhFUl9TQ0FSTEVUVF9HRU4yX0gK KworaW50IHNuZF9zY2FybGV0dF9nZW4yX2NvbnRyb2xzX2NyZWF0ZShzdHJ1Y3QgdXNiX21peGVy X2ludGVyZmFjZSAqbWl4ZXIpOworCisjZW5kaWYgLyogX19VU0JfTUlYRVJfU0NBUkxFVFRfR0VO Ml9IICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uaCBiL3NvdW5kL3VzYi91c2Jh dWRpby5oCmluZGV4IGI5ZmFlY2E2NDVmZC4uMTM1N2E3M2MzYTIwIDEwMDY0NAotLS0gYS9zb3Vu ZC91c2IvdXNiYXVkaW8uaAorKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uaApAQCAtNjYsNiArNjYs OCBAQCBzdHJ1Y3Qgc25kX3VzYl9hdWRpbyB7CiAJCQkJCSAqLwogCiAJc3RydWN0IHVzYl9ob3N0 X2ludGVyZmFjZSAqY3RybF9pbnRmOwkvKiB0aGUgYXVkaW8gY29udHJvbCBpbnRlcmZhY2UgKi8K KworCXZvaWQgKnByaXZhdGU7CiB9OwogCiAjZGVmaW5lIHVzYl9hdWRpb19lcnIoY2hpcCwgZm10 LCBhcmdzLi4uKSBcCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkFsc2EtZGV2ZWwgbWFpbGluZyBsaXN0CkFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZwpo dHRwczovL21haWxtYW4uYWxzYS1wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Fsc2EtZGV2 ZWwK