From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 60294C433F5 for ; Mon, 27 Sep 2021 19:17:42 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id EE7BD60F94 for ; Mon, 27 Sep 2021 19:17:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org EE7BD60F94 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=tsUZZDWqPhWO0T+nn/m1KcwTnwx8m2ok2fcbXc6p+zE=; b=1TrXJyFVebBMgt HjjEihVmYWjg+dsvaVOHXZg7mzt4/AEUfj2kziizBBMOx/wYGZBGzE8O3FhhUMVf0Pngxh9MLBjmb elBe4rXcaihTplzUI8Qd9aHBpXPQbVjW3sJg1MEW+PksH6LUf7RlnulMQAr74tXKSJRsg/MRxtLqg yLgJSNEZD7KCa2PfO5/348ACRdBEvaU7rBN2GykecAdkX9QM4+P/xpOBZyFh/dlST6ay7TSRWm2Ek ebHRN3AniyLMORLZ8w/KWlTxfd8iRpbF+1bRYwNEVqrHIoCtJ3xPdUu+IJIHJLdvM8Adt9wOgyvPo 6wu2aosT2hJPV7pcVZ1g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mUw88-003xeo-AA; Mon, 27 Sep 2021 19:17:36 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mUw7q-003xaS-8T; Mon, 27 Sep 2021 19:17:23 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: nicolas) with ESMTPSA id 1CB301F43480 Message-ID: Subject: Re: [PATCH v6 09/10] media: hantro: Support VP9 on the G2 core From: Nicolas Dufresne To: Andrzej Pietrasiewicz , linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev Cc: Benjamin Gaignard , Boris Brezillon , Ezequiel Garcia , Fabio Estevam , Greg Kroah-Hartman , Hans Verkuil , Heiko Stuebner , Jernej Skrabec , Mauro Carvalho Chehab , NXP Linux Team , Pengutronix Kernel Team , Philipp Zabel , Sascha Hauer , Shawn Guo , kernel@collabora.com Date: Mon, 27 Sep 2021 15:17:02 -0400 In-Reply-To: <20210927151958.24426-10-andrzej.p@collabora.com> References: <20210927151958.24426-1-andrzej.p@collabora.com> <20210927151958.24426-10-andrzej.p@collabora.com> User-Agent: Evolution 3.40.4 (3.40.4-1.fc34) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210927_121718_756190_2BBD34A1 X-CRM114-Status: GOOD ( 32.59 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org TGUgbHVuZGkgMjcgc2VwdGVtYnJlIDIwMjEgw6AgMTc6MTkgKzAyMDAsIEFuZHJ6ZWogUGlldHJh c2lld2ljeiBhIMOpY3JpdMKgOgo+IFZlcmlTaWxpY29uIEhhbnRybyBHMiBjb3JlIHN1cHBvcnRz IFZQOSBjb2RlYy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBbmRyemVqIFBpZXRyYXNpZXdpY3ogPGFu ZHJ6ZWoucEBjb2xsYWJvcmEuY29tPgo+IFJldmlld2VkLWJ5OiBCZW5qYW1pbiBHYWlnbmFyZCA8 YmVuamFtaW4uZ2FpZ25hcmRAY29sbGFib3JhLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9LY29uZmlnICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9NYWtlZmlsZSAgICAgICAgIHwgICA2ICstCj4gIGRyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvLmggICAgICAgICB8ICAyNiArCj4gIGRyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvX2Rydi5jICAgICB8ICAxOCArLQo+ICBkcml2ZXJzL3N0YWdp bmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmggfCAgOTcgKysKPiAgLi4uL3N0YWdpbmcv bWVkaWEvaGFudHJvL2hhbnRyb19nMl92cDlfZGVjLmMgIHwgOTc4ICsrKysrKysrKysrKysrKysr Kwo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oICAgICAgfCAgNjcg KysKPiAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fdjRsMi5jICAgIHwgICA2 ICsKPiAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fdnA5LmMgICAgIHwgMjQw ICsrKysrCj4gIGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5oICAgICB8 IDEwMyArKwo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2lteDhtX3ZwdV9ody5jICAg fCAgMjIgKy0KPiAgMTEgZmlsZXMgY2hhbmdlZCwgMTU2MCBpbnNlcnRpb25zKCspLCA0IGRlbGV0 aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRy by9oYW50cm9fZzJfdnA5X2RlYy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdp bmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fdnA5LmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL21lZGlh L2hhbnRyby9LY29uZmlnCj4gaW5kZXggMjBiMWY2ZDdiNjljLi4wMGE1N2Q4OGM5MmUgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9LY29uZmlnCj4gKysrIGIvZHJp dmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9LY29uZmlnCj4gQEAgLTksNiArOSw3IEBAIGNvbmZp ZyBWSURFT19IQU5UUk8KPiAgCXNlbGVjdCBWSURFT0JVRjJfVk1BTExPQwo+ICAJc2VsZWN0IFY0 TDJfTUVNMk1FTV9ERVYKPiAgCXNlbGVjdCBWNEwyX0gyNjQKPiArCXNlbGVjdCBWNEwyX1ZQOQo+ ICAJaGVscAo+ICAJICBTdXBwb3J0IGZvciB0aGUgSGFudHJvIElQIGJhc2VkIFZpZGVvIFByb2Nl c3NpbmcgVW5pdHMgcHJlc2VudCBvbgo+ICAJICBSb2NrY2hpcCBhbmQgTlhQIGkuTVg4TSBTb0Nz LCB3aGljaCBhY2NlbGVyYXRlIHZpZGVvIGFuZCBpbWFnZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvbWVkaWEvaGFudHJvL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hh bnRyby9NYWtlZmlsZQo+IGluZGV4IGZlNmQ4NDg3MWQwNy4uMjhhZjBhMWVlNGJmIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vTWFrZWZpbGUKPiArKysgYi9kcml2 ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL01ha2VmaWxlCj4gQEAgLTEwLDkgKzEwLDEwIEBAIGhh bnRyby12cHUteSArPSBcCj4gIAkJaGFudHJvX2cxLm8gXAo+ICAJCWhhbnRyb19nMV9oMjY0X2Rl Yy5vIFwKPiAgCQloYW50cm9fZzFfbXBlZzJfZGVjLm8gXAo+IC0JCWhhbnRyb19nMl9oZXZjX2Rl Yy5vIFwKPiAgCQloYW50cm9fZzFfdnA4X2RlYy5vIFwKPiAgCQloYW50cm9fZzIubyBcCj4gKwkJ aGFudHJvX2cyX2hldmNfZGVjLm8gXAo+ICsJCWhhbnRyb19nMl92cDlfZGVjLm8gXAo+ICAJCXJv Y2tjaGlwX3ZwdTJfaHdfanBlZ19lbmMubyBcCj4gIAkJcm9ja2NoaXBfdnB1Ml9od19oMjY0X2Rl Yy5vIFwKPiAgCQlyb2NrY2hpcF92cHUyX2h3X21wZWcyX2RlYy5vIFwKPiBAQCAtMjEsNyArMjIs OCBAQCBoYW50cm8tdnB1LXkgKz0gXAo+ICAJCWhhbnRyb19oMjY0Lm8gXAo+ICAJCWhhbnRyb19o ZXZjLm8gXAo+ICAJCWhhbnRyb19tcGVnMi5vIFwKPiAtCQloYW50cm9fdnA4Lm8KPiArCQloYW50 cm9fdnA4Lm8gXAo+ICsJCWhhbnRyb192cDkubwo+ICAKPiAgaGFudHJvLXZwdS0kKENPTkZJR19W SURFT19IQU5UUk9fSU1YOE0pICs9IFwKPiAgCQlpbXg4bV92cHVfaHcubwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyby5oIGIvZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9oYW50cm8uaAo+IGluZGV4IGQ5MWViMmIxYzUwOS4uMWU4YzFhNmUzZWIw IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvLmgKPiAr KysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyby5oCj4gQEAgLTM2LDYgKzM2 LDcgQEAgc3RydWN0IGhhbnRyb19wb3N0cHJvY19vcHM7Cj4gICNkZWZpbmUgSEFOVFJPX1ZQOF9E RUNPREVSCUJJVCgxNykKPiAgI2RlZmluZSBIQU5UUk9fSDI2NF9ERUNPREVSCUJJVCgxOCkKPiAg I2RlZmluZSBIQU5UUk9fSEVWQ19ERUNPREVSCUJJVCgxOSkKPiArI2RlZmluZSBIQU5UUk9fVlA5 X0RFQ09ERVIJQklUKDIwKQo+ICAjZGVmaW5lIEhBTlRST19ERUNPREVSUwkJMHhmZmZmMDAwMAo+ ICAKPiAgLyoqCj4gQEAgLTExMCw2ICsxMTEsNyBAQCBlbnVtIGhhbnRyb19jb2RlY19tb2RlIHsK PiAgCUhBTlRST19NT0RFX01QRUcyX0RFQywKPiAgCUhBTlRST19NT0RFX1ZQOF9ERUMsCj4gIAlI QU5UUk9fTU9ERV9IRVZDX0RFQywKPiArCUhBTlRST19NT0RFX1ZQOV9ERUMsCj4gIH07Cj4gIAo+ ICAvKgo+IEBAIC0yMjMsNiArMjI1LDcgQEAgc3RydWN0IGhhbnRyb19kZXYgewo+ICAgKiBAbXBl ZzJfZGVjOgkJTVBFRy0yLWRlY29kaW5nIGNvbnRleHQuCj4gICAqIEB2cDhfZGVjOgkJVlA4LWRl Y29kaW5nIGNvbnRleHQuCj4gICAqIEBoZXZjX2RlYzoJCUhFVkMtZGVjb2RpbmcgY29udGV4dC4K PiArICogQHZwOV9kZWM6CQlWUDktZGVjb2RpbmcgY29udGV4dC4KPiAgICovCj4gIHN0cnVjdCBo YW50cm9fY3R4IHsKPiAgCXN0cnVjdCBoYW50cm9fZGV2ICpkZXY7Cj4gQEAgLTI1MCw2ICsyNTMs NyBAQCBzdHJ1Y3QgaGFudHJvX2N0eCB7Cj4gIAkJc3RydWN0IGhhbnRyb19tcGVnMl9kZWNfaHdf Y3R4IG1wZWcyX2RlYzsKPiAgCQlzdHJ1Y3QgaGFudHJvX3ZwOF9kZWNfaHdfY3R4IHZwOF9kZWM7 Cj4gIAkJc3RydWN0IGhhbnRyb19oZXZjX2RlY19od19jdHggaGV2Y19kZWM7Cj4gKwkJc3RydWN0 IGhhbnRyb192cDlfZGVjX2h3X2N0eCB2cDlfZGVjOwo+ICAJfTsKPiAgfTsKPiAgCj4gQEAgLTI5 OSw2ICszMDMsMjIgQEAgc3RydWN0IGhhbnRyb19wb3N0cHJvY19yZWdzIHsKPiAgCXN0cnVjdCBo YW50cm9fcmVnIGRpc3BsYXlfd2lkdGg7Cj4gIH07Cj4gIAo+ICtzdHJ1Y3QgaGFudHJvX3ZwOV9k ZWNvZGVkX2J1ZmZlcl9pbmZvIHsKPiArCS8qIEluZm8gbmVlZGVkIHdoZW4gdGhlIGRlY29kZWQg ZnJhbWUgc2VydmVzIGFzIGEgcmVmZXJlbmNlIGZyYW1lLiAqLwo+ICsJdW5zaWduZWQgc2hvcnQg d2lkdGg7Cj4gKwl1bnNpZ25lZCBzaG9ydCBoZWlnaHQ7Cj4gKwl1MzIgYml0X2RlcHRoIDogNDsK PiArfTsKPiArCj4gK3N0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgewo+ICsJLyogTXVzdCBi ZSB0aGUgZmlyc3QgZmllbGQgaW4gdGhpcyBzdHJ1Y3QuICovCj4gKwlzdHJ1Y3QgdjRsMl9tMm1f YnVmZmVyIGJhc2U7Cj4gKwo+ICsJdW5pb24gewo+ICsJCXN0cnVjdCBoYW50cm9fdnA5X2RlY29k ZWRfYnVmZmVyX2luZm8gdnA5Owo+ICsJfTsKPiArfTsKPiArCj4gIC8qIExvZ2dpbmcgaGVscGVy cyAqLwo+ICAKPiAgLyoqCj4gQEAgLTQzNiw2ICs0NTYsMTIgQEAgaGFudHJvX2dldF9kZWNfYnVm X2FkZHIoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgc3RydWN0IHZiMl9idWZmZXIgKnZiKQo+ICAJ cmV0dXJuIHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKHZiLCAwKTsKPiAgfQo+ICAKPiAr c3RhdGljIGlubGluZSBzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICoKPiArdmIyX3RvX2hh bnRyb19kZWNvZGVkX2J1ZihzdHJ1Y3QgdmIyX2J1ZmZlciAqYnVmKQo+ICt7Cj4gKwlyZXR1cm4g Y29udGFpbmVyX29mKGJ1Ziwgc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciwgYmFzZS52Yi52 YjJfYnVmKTsKPiArfQo+ICsKPiAgdm9pZCBoYW50cm9fcG9zdHByb2NfZGlzYWJsZShzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4KTsKPiAgdm9pZCBoYW50cm9fcG9zdHByb2NfZW5hYmxlKHN0cnVjdCBo YW50cm9fY3R4ICpjdHgpOwo+ICB2b2lkIGhhbnRyb19wb3N0cHJvY19mcmVlKHN0cnVjdCBoYW50 cm9fY3R4ICpjdHgpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJv L2hhbnRyb19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2Rydi5j Cj4gaW5kZXggOGEyZWRkNjdmMmM2Li44MDBjODg3OWFlZTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZHJ2LmMKPiArKysgYi9kcml2ZXJzL3N0YWdp bmcvbWVkaWEvaGFudHJvL2hhbnRyb19kcnYuYwo+IEBAIC0yMzIsNyArMjMyLDcgQEAgcXVldWVf aW5pdCh2b2lkICpwcml2LCBzdHJ1Y3QgdmIyX3F1ZXVlICpzcmNfdnEsIHN0cnVjdCB2YjJfcXVl dWUgKmRzdF92cSkKPiAgCWRzdF92cS0+aW9fbW9kZXMgPSBWQjJfTU1BUCB8IFZCMl9ETUFCVUY7 Cj4gIAlkc3RfdnEtPmRydl9wcml2ID0gY3R4Owo+ICAJZHN0X3ZxLT5vcHMgPSAmaGFudHJvX3F1 ZXVlX29wczsKPiAtCWRzdF92cS0+YnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwy X20ybV9idWZmZXIpOwo+ICsJZHN0X3ZxLT5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0 IGhhbnRyb19kZWNvZGVkX2J1ZmZlcik7Cj4gIAlkc3RfdnEtPnRpbWVzdGFtcF9mbGFncyA9IFY0 TDJfQlVGX0ZMQUdfVElNRVNUQU1QX0NPUFk7Cj4gIAlkc3RfdnEtPmxvY2sgPSAmY3R4LT5kZXYt PnZwdV9tdXRleDsKPiAgCWRzdF92cS0+ZGV2ID0gY3R4LT5kZXYtPnY0bDJfZGV2LmRldjsKPiBA QCAtMjY2LDYgKzI2NiwxMiBAQCBzdGF0aWMgaW50IGhhbnRyb190cnlfY3RybChzdHJ1Y3QgdjRs Ml9jdHJsICpjdHJsKQo+ICAJCWlmIChzcHMtPmZsYWdzICYgVjRMMl9IRVZDX1NQU19GTEFHX1ND QUxJTkdfTElTVF9FTkFCTEVEKQo+ICAJCQkvKiBObyBzY2FsaW5nIHN1cHBvcnQgKi8KPiAgCQkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwl9IGVsc2UgaWYgKGN0cmwtPmlkID09IFY0TDJfQ0lEX1NUQVRF TEVTU19WUDlfRlJBTUUpIHsKPiArCQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAq ZGVjX3BhcmFtcyA9IGN0cmwtPnBfbmV3LnBfdnA5X2ZyYW1lOwo+ICsKPiArCQkvKiBXZSBvbmx5 IHN1cHBvcnQgcHJvZmlsZSAwICovCj4gKwkJaWYgKGRlY19wYXJhbXMtPnByb2ZpbGUgIT0gMCkK PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gIAl9Cj4gIAlyZXR1cm4gMDsKPiAgfQo+IEBAIC00NTks NiArNDY1LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGFudHJvX2N0cmwgY29udHJvbHNbXSA9 IHsKPiAgCQkJLnN0ZXAgPSAxLAo+ICAJCQkub3BzID0gJmhhbnRyb19oZXZjX2N0cmxfb3BzLAo+ ICAJCX0sCj4gKwl9LCB7Cj4gKwkJLmNvZGVjID0gSEFOVFJPX1ZQOV9ERUNPREVSLAo+ICsJCS5j ZmcgPSB7Cj4gKwkJCS5pZCA9IFY0TDJfQ0lEX1NUQVRFTEVTU19WUDlfRlJBTUUsCj4gKwkJfSwK PiArCX0sIHsKPiArCQkuY29kZWMgPSBIQU5UUk9fVlA5X0RFQ09ERVIsCj4gKwkJLmNmZyA9IHsK PiArCQkJLmlkID0gVjRMMl9DSURfU1RBVEVMRVNTX1ZQOV9DT01QUkVTU0VEX0hEUiwKPiArCQl9 LAo+ICAJfSwKPiAgfTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9o YW50cm8vaGFudHJvX2cyX3JlZ3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFu dHJvX2cyX3JlZ3MuaAo+IGluZGV4IDBhYzBiYTM3NWU4MC4uMjFjYTIxNjQ4NjE0IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3JlZ3MuaAo+ICsr KyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3JlZ3MuaAo+IEBAIC0y OCw2ICsyOCw3IEBACj4gICNkZWZpbmUgRzJfUkVHX0lOVEVSUlVQVF9ERUNfRQkJQklUKDApCj4g IAo+ICAjZGVmaW5lIEhFVkNfREVDX01PREUJCQkweGMKPiArI2RlZmluZSBWUDlfREVDX01PREUJ CQkweGQKPiAgCj4gICNkZWZpbmUgQlVTX1dJRFRIXzMyCQkJMAo+ICAjZGVmaW5lIEJVU19XSURU SF82NAkJCTEKPiBAQCAtNDksNiArNTAsNyBAQAo+ICAjZGVmaW5lIGcyX3BpY19oZWlnaHRfaW5f Y2JzCUcyX0RFQ19SRUcoNCwgNiwgIDB4MWZmZikKPiAgI2RlZmluZSBnMl9udW1fcmVmX2ZyYW1l cwlHMl9ERUNfUkVHKDQsIDAsICAweDFmKQo+ICAKPiArI2RlZmluZSBnMl9zdGFydF9iaXQJCUcy X0RFQ19SRUcoNSwgMjUsIDB4N2YpCj4gICNkZWZpbmUgZzJfc2NhbGluZ19saXN0X2UJRzJfREVD X1JFRyg1LCAyNCwgMHgxKQo+ICAjZGVmaW5lIGcyX2NiX3FwX29mZnNldAkJRzJfREVDX1JFRyg1 LCAxOSwgMHgxZikKPiAgI2RlZmluZSBnMl9jcl9xcF9vZmZzZXQJCUcyX0RFQ19SRUcoNSwgMTQs IDB4MWYpCj4gQEAgLTg0LDYgKzg2LDcgQEAKPiAgI2RlZmluZSBnMl9iaXRfZGVwdGhfeV9taW51 czgJRzJfREVDX1JFRyg4LCA2LCAgMHgzKQo+ICAjZGVmaW5lIGcyX2JpdF9kZXB0aF9jX21pbnVz OAlHMl9ERUNfUkVHKDgsIDQsICAweDMpCj4gICNkZWZpbmUgZzJfb3V0cHV0XzhfYml0cwlHMl9E RUNfUkVHKDgsIDMsICAweDEpCj4gKyNkZWZpbmUgZzJfb3V0cHV0X2Zvcm1hdAlHMl9ERUNfUkVH KDgsIDAsICAweDcpCj4gIAo+ICAjZGVmaW5lIGcyX3JlZmlkeDFfYWN0aXZlCUcyX0RFQ19SRUco OSwgMTksIDB4MWYpCj4gICNkZWZpbmUgZzJfcmVmaWR4MF9hY3RpdmUJRzJfREVDX1JFRyg5LCAx NCwgMHgxZikKPiBAQCAtOTYsNiArOTksMTQgQEAKPiAgI2RlZmluZSBnMl90aWxlX2UJCUcyX0RF Q19SRUcoMTAsIDEsICAweDEpCj4gICNkZWZpbmUgZzJfZW50cm9weV9zeW5jX2UJRzJfREVDX1JF RygxMCwgMCwgIDB4MSkKPiAgCj4gKyNkZWZpbmUgdnA5X3RyYW5zZm9ybV9tb2RlCUcyX0RFQ19S RUcoMTEsIDI3LCAweDcpCj4gKyNkZWZpbmUgdnA5X2ZpbHRfc2hhcnBuZXNzCUcyX0RFQ19SRUco MTEsIDIxLCAweDcpCj4gKyNkZWZpbmUgdnA5X21jb21wX2ZpbHRfdHlwZQlHMl9ERUNfUkVHKDEx LCAgOCwgMHg3KQo+ICsjZGVmaW5lIHZwOV9oaWdoX3ByZWNfbXZfZQlHMl9ERUNfUkVHKDExLCAg NywgMHgxKQo+ICsjZGVmaW5lIHZwOV9jb21wX3ByZWRfbW9kZQlHMl9ERUNfUkVHKDExLCAgNCwg MHgzKQo+ICsjZGVmaW5lIHZwOV9ncmVmX3NpZ25fYmlhcwlHMl9ERUNfUkVHKDExLCAgMiwgMHgx KQo+ICsjZGVmaW5lIHZwOV9hcmVmX3NpZ25fYmlhcwlHMl9ERUNfUkVHKDExLCAgMCwgMHgxKQo+ ICsKPiAgI2RlZmluZSBnMl9yZWZlcl9sdGVybV9lCUcyX0RFQ19SRUcoMTIsIDE2LCAweGZmZmYp Cj4gICNkZWZpbmUgZzJfbWluX2NiX3NpemUJCUcyX0RFQ19SRUcoMTIsIDEzLCAweDcpCj4gICNk ZWZpbmUgZzJfbWF4X2NiX3NpemUJCUcyX0RFQ19SRUcoMTIsIDEwLCAweDcpCj4gQEAgLTE1NCw2 ICsxNjUsNTAgQEAKPiAgI2RlZmluZSBnMl9wYXJ0aWFsX2N0Yl95CUcyX0RFQ19SRUcoMjAsIDMw LCAweDEpCj4gICNkZWZpbmUgZzJfcGljX3dpZHRoXzR4NAlHMl9ERUNfUkVHKDIwLCAxNiwgMHhm ZmYpCj4gICNkZWZpbmUgZzJfcGljX2hlaWdodF80eDQJRzJfREVDX1JFRygyMCwgMCwgIDB4ZmZm KQo+ICsKPiArI2RlZmluZSB2cDlfcXBfZGVsdGFfeV9kYwlHMl9ERUNfUkVHKDEzLCAyMywgMHgz ZikKPiArI2RlZmluZSB2cDlfcXBfZGVsdGFfY2hfZGMJRzJfREVDX1JFRygxMywgMTcsIDB4M2Yp Cj4gKyNkZWZpbmUgdnA5X3FwX2RlbHRhX2NoX2FjCUcyX0RFQ19SRUcoMTMsIDExLCAweDNmKQo+ ICsjZGVmaW5lIHZwOV9sYXN0X3NpZ25fYmlhcwlHMl9ERUNfUkVHKDEzLCAxMCwgMHgxKQo+ICsj ZGVmaW5lIHZwOV9sb3NzbGVzc19lCQlHMl9ERUNfUkVHKDEzLCAgOSwgMHgxKQo+ICsjZGVmaW5l IHZwOV9jb21wX3ByZWRfdmFyX3JlZjEJRzJfREVDX1JFRygxMywgIDcsIDB4MykKPiArI2RlZmlu ZSB2cDlfY29tcF9wcmVkX3Zhcl9yZWYwCUcyX0RFQ19SRUcoMTMsICA1LCAweDMpCj4gKyNkZWZp bmUgdnA5X2NvbXBfcHJlZF9maXhlZF9yZWYJRzJfREVDX1JFRygxMywgIDMsIDB4MykKPiArI2Rl ZmluZSB2cDlfc2VnbWVudF90ZW1wX3VwZF9lCUcyX0RFQ19SRUcoMTMsICAyLCAweDEpCj4gKyNk ZWZpbmUgdnA5X3NlZ21lbnRfdXBkX2UJRzJfREVDX1JFRygxMywgIDEsIDB4MSkKPiArI2RlZmlu ZSB2cDlfc2VnbWVudF9lCQlHMl9ERUNfUkVHKDEzLCAgMCwgMHgxKQo+ICsKPiArI2RlZmluZSB2 cDlfZmlsdF9sZXZlbAkJRzJfREVDX1JFRygxNCwgMTgsIDB4M2YpCj4gKyNkZWZpbmUgdnA5X3Jl ZnBpY19zZWcwCQlHMl9ERUNfUkVHKDE0LCAxNSwgMHg3KQo+ICsjZGVmaW5lIHZwOV9za2lwX3Nl ZzAJCUcyX0RFQ19SRUcoMTQsIDE0LCAweDEpCj4gKyNkZWZpbmUgdnA5X2ZpbHRfbGV2ZWxfc2Vn MAlHMl9ERUNfUkVHKDE0LCAgOCwgMHgzZikKPiArI2RlZmluZSB2cDlfcXVhbnRfc2VnMAkJRzJf REVDX1JFRygxNCwgIDAsIDB4ZmYpCj4gKwo+ICsjZGVmaW5lIHZwOV9yZWZwaWNfc2VnMQkJRzJf REVDX1JFRygxNSwgMTUsIDB4NykKPiArI2RlZmluZSB2cDlfc2tpcF9zZWcxCQlHMl9ERUNfUkVH KDE1LCAxNCwgMHgxKQo+ICsjZGVmaW5lIHZwOV9maWx0X2xldmVsX3NlZzEJRzJfREVDX1JFRygx NSwgIDgsIDB4M2YpCj4gKyNkZWZpbmUgdnA5X3F1YW50X3NlZzEJCUcyX0RFQ19SRUcoMTUsICAw LCAweGZmKQo+ICsKPiArI2RlZmluZSB2cDlfcmVmcGljX3NlZzIJCUcyX0RFQ19SRUcoMTYsIDE1 LCAweDcpCj4gKyNkZWZpbmUgdnA5X3NraXBfc2VnMgkJRzJfREVDX1JFRygxNiwgMTQsIDB4MSkK PiArI2RlZmluZSB2cDlfZmlsdF9sZXZlbF9zZWcyCUcyX0RFQ19SRUcoMTYsICA4LCAweDNmKQo+ ICsjZGVmaW5lIHZwOV9xdWFudF9zZWcyCQlHMl9ERUNfUkVHKDE2LCAgMCwgMHhmZikKPiArCj4g KyNkZWZpbmUgdnA5X3JlZnBpY19zZWczCQlHMl9ERUNfUkVHKDE3LCAxNSwgMHg3KQo+ICsjZGVm aW5lIHZwOV9za2lwX3NlZzMJCUcyX0RFQ19SRUcoMTcsIDE0LCAweDEpCj4gKyNkZWZpbmUgdnA5 X2ZpbHRfbGV2ZWxfc2VnMwlHMl9ERUNfUkVHKDE3LCAgOCwgMHgzZikKPiArI2RlZmluZSB2cDlf cXVhbnRfc2VnMwkJRzJfREVDX1JFRygxNywgIDAsIDB4ZmYpCj4gKwo+ICsjZGVmaW5lIHZwOV9y ZWZwaWNfc2VnNAkJRzJfREVDX1JFRygxOCwgMTUsIDB4NykKPiArI2RlZmluZSB2cDlfc2tpcF9z ZWc0CQlHMl9ERUNfUkVHKDE4LCAxNCwgMHgxKQo+ICsjZGVmaW5lIHZwOV9maWx0X2xldmVsX3Nl ZzQJRzJfREVDX1JFRygxOCwgIDgsIDB4M2YpCj4gKyNkZWZpbmUgdnA5X3F1YW50X3NlZzQJCUcy X0RFQ19SRUcoMTgsICAwLCAweGZmKQo+ICsKPiArI2RlZmluZSB2cDlfcmVmcGljX3NlZzUJCUcy X0RFQ19SRUcoMTksIDE1LCAweDcpCj4gKyNkZWZpbmUgdnA5X3NraXBfc2VnNQkJRzJfREVDX1JF RygxOSwgMTQsIDB4MSkKPiArI2RlZmluZSB2cDlfZmlsdF9sZXZlbF9zZWc1CUcyX0RFQ19SRUco MTksICA4LCAweDNmKQo+ICsjZGVmaW5lIHZwOV9xdWFudF9zZWc1CQlHMl9ERUNfUkVHKDE5LCAg MCwgMHhmZikKPiArCj4gICNkZWZpbmUgaGV2Y19jdXJfcG9jXzAwCQlHMl9ERUNfUkVHKDQ2LCAy NCwgMHhmZikKPiAgI2RlZmluZSBoZXZjX2N1cl9wb2NfMDEJCUcyX0RFQ19SRUcoNDYsIDE2LCAw eGZmKQo+ICAjZGVmaW5lIGhldmNfY3VyX3BvY18wMgkJRzJfREVDX1JFRyg0NiwgOCwgIDB4ZmYp Cj4gQEAgLTE3NCw2ICsyMjksNDQgQEAKPiAgI2RlZmluZSBoZXZjX2N1cl9wb2NfMTQJCUcyX0RF Q19SRUcoNDksIDgsICAweGZmKQo+ICAjZGVmaW5lIGhldmNfY3VyX3BvY18xNQkJRzJfREVDX1JF Ryg0OSwgMCwgIDB4ZmYpCj4gIAo+ICsjZGVmaW5lIHZwOV9yZWZwaWNfc2VnNgkJRzJfREVDX1JF RygzMSwgMTUsIDB4NykKPiArI2RlZmluZSB2cDlfc2tpcF9zZWc2CQlHMl9ERUNfUkVHKDMxLCAx NCwgMHgxKQo+ICsjZGVmaW5lIHZwOV9maWx0X2xldmVsX3NlZzYJRzJfREVDX1JFRygzMSwgIDgs IDB4M2YpCj4gKyNkZWZpbmUgdnA5X3F1YW50X3NlZzYJCUcyX0RFQ19SRUcoMzEsICAwLCAweGZm KQo+ICsKPiArI2RlZmluZSB2cDlfcmVmcGljX3NlZzcJCUcyX0RFQ19SRUcoMzIsIDE1LCAweDcp Cj4gKyNkZWZpbmUgdnA5X3NraXBfc2VnNwkJRzJfREVDX1JFRygzMiwgMTQsIDB4MSkKPiArI2Rl ZmluZSB2cDlfZmlsdF9sZXZlbF9zZWc3CUcyX0RFQ19SRUcoMzIsICA4LCAweDNmKQo+ICsjZGVm aW5lIHZwOV9xdWFudF9zZWc3CQlHMl9ERUNfUkVHKDMyLCAgMCwgMHhmZikKPiArCj4gKyNkZWZp bmUgdnA5X2xyZWZfd2lkdGgJCUcyX0RFQ19SRUcoMzMsIDE2LCAweGZmZmYpCj4gKyNkZWZpbmUg dnA5X2xyZWZfaGVpZ2h0CQlHMl9ERUNfUkVHKDMzLCAgMCwgMHhmZmZmKQo+ICsKPiArI2RlZmlu ZSB2cDlfZ3JlZl93aWR0aAkJRzJfREVDX1JFRygzNCwgMTYsIDB4ZmZmZikKPiArI2RlZmluZSB2 cDlfZ3JlZl9oZWlnaHQJCUcyX0RFQ19SRUcoMzQsICAwLCAweGZmZmYpCj4gKwo+ICsjZGVmaW5l IHZwOV9hcmVmX3dpZHRoCQlHMl9ERUNfUkVHKDM1LCAxNiwgMHhmZmZmKQo+ICsjZGVmaW5lIHZw OV9hcmVmX2hlaWdodAkJRzJfREVDX1JFRygzNSwgIDAsIDB4ZmZmZikKPiArCj4gKyNkZWZpbmUg dnA5X2xyZWZfaG9yX3NjYWxlCUcyX0RFQ19SRUcoMzYsIDE2LCAweGZmZmYpCj4gKyNkZWZpbmUg dnA5X2xyZWZfdmVyX3NjYWxlCUcyX0RFQ19SRUcoMzYsICAwLCAweGZmZmYpCj4gKwo+ICsjZGVm aW5lIHZwOV9ncmVmX2hvcl9zY2FsZQlHMl9ERUNfUkVHKDM3LCAxNiwgMHhmZmZmKQo+ICsjZGVm aW5lIHZwOV9ncmVmX3Zlcl9zY2FsZQlHMl9ERUNfUkVHKDM3LCAgMCwgMHhmZmZmKQo+ICsKPiAr I2RlZmluZSB2cDlfYXJlZl9ob3Jfc2NhbGUJRzJfREVDX1JFRygzOCwgMTYsIDB4ZmZmZikKPiAr I2RlZmluZSB2cDlfYXJlZl92ZXJfc2NhbGUJRzJfREVDX1JFRygzOCwgIDAsIDB4ZmZmZikKPiAr Cj4gKyNkZWZpbmUgdnA5X2ZpbHRfcmVmX2Fkal8wCUcyX0RFQ19SRUcoNDYsIDI0LCAweDdmKQo+ ICsjZGVmaW5lIHZwOV9maWx0X3JlZl9hZGpfMQlHMl9ERUNfUkVHKDQ2LCAxNiwgMHg3ZikKPiAr I2RlZmluZSB2cDlfZmlsdF9yZWZfYWRqXzIJRzJfREVDX1JFRyg0NiwgIDgsIDB4N2YpCj4gKyNk ZWZpbmUgdnA5X2ZpbHRfcmVmX2Fkal8zCUcyX0RFQ19SRUcoNDYsICAwLCAweDdmKQo+ICsKPiAr I2RlZmluZSB2cDlfZmlsdF9tYl9hZGpfMAlHMl9ERUNfUkVHKDQ3LCAyNCwgMHg3ZikKPiArI2Rl ZmluZSB2cDlfZmlsdF9tYl9hZGpfMQlHMl9ERUNfUkVHKDQ3LCAxNiwgMHg3ZikKPiArI2RlZmlu ZSB2cDlfZmlsdF9tYl9hZGpfMglHMl9ERUNfUkVHKDQ3LCAgOCwgMHg3ZikKPiArI2RlZmluZSB2 cDlfZmlsdF9tYl9hZGpfMwlHMl9ERUNfUkVHKDQ3LCAgMCwgMHg3ZikKPiArCj4gICNkZWZpbmUg ZzJfYXBmX3RocmVzaG9sZAlHMl9ERUNfUkVHKDU1LCAwLCAweGZmZmYpCj4gIAo+ICAjZGVmaW5l IGcyX2Nsa19nYXRlX2UJCUcyX0RFQ19SRUcoNTgsIDE2LCAweDEpCj4gQEAgLTE4Niw2ICsyNzks OCBAQAo+ICAKPiAgI2RlZmluZSBHMl9BRERSX0RTVAkJKEcyX1NXUkVHKDY1KSkKPiAgI2RlZmlu ZSBHMl9SRUdfQUREUl9SRUYoaSkJKEcyX1NXUkVHKDY3KSAgKyAoKGkpICogMHg4KSkKPiArI2Rl ZmluZSBWUDlfQUREUl9TRUdNRU5UX1dSSVRFCShHMl9TV1JFRyg3OSkpCj4gKyNkZWZpbmUgVlA5 X0FERFJfU0VHTUVOVF9SRUFECShHMl9TV1JFRyg4MSkpCj4gICNkZWZpbmUgRzJfQUREUl9EU1Rf Q0hSCQkoRzJfU1dSRUcoOTkpKQo+ICAjZGVmaW5lIEcyX1JFR19DSFJfUkVGKGkpCShHMl9TV1JF RygxMDEpICsgKChpKSAqIDB4OCkpCj4gICNkZWZpbmUgRzJfQUREUl9EU1RfTVYJCShHMl9TV1JF RygxMzMpKQo+IEBAIC0xOTMsNiArMjg4LDggQEAKPiAgI2RlZmluZSBHMl9BRERSX1RJTEVfU0la RQkoRzJfU1dSRUcoMTY3KSkKCkkgdGhpbmsgdGhpcyBuYW1lIGNhbiBiZSBpbXByb3ZlZC4gV2Ug ZG9uJ3Qgc2F5ICJHMiBhZGRyZXNzIHRpbGUgc2l6ZSIsIGJ1dCAiRzIKdGlsZSBzaXplIGFkZHJl c3MiLiBBbHNvLCB0aGVyZSBpcyBtdWx0aXBsZSB0aWxlIHNpemVzLCBzbyBJJ2QgcHJlZmVyIGlm IHdlIHNheQoiRzIgdGlsZSBzaXplcyBhZGRyZXNzIi4gTWF5IEkgc3VnZ2VzdCB0aGlzIG5hbWlu ZyB0aGVuID8KCiAgI2RlZmluZSBHMl9USUxFX1NJWkVTX0FERFJfTFNCIC4uLgoKQXMgYSByZWZl cmVuY2UsIFZTSSBuYW1lcyB0aGlzIHN3X3RpbGVfYmFzZV9sc2IgLiBUaGF0IGRlbm90ZXMgdGhh dCB0aGUgbmFtZQphbHNvIGZhaWxzIHRvIGNhcHR1cmUgdGhhdCB0aGlzIGlzIG9ubHkgdGhlIGxv d2VyIDMyYml0IG9mIHRoZSB0aWxlX3NpemVzCmFkZHJlc3MgYW5kIHRoYXQgaWYgc29tZW9uZSBo YXZlIGEgRzIgY29yZSBvbiBhIGxhcmdlciBhbW91bnQgb2YgUkFNIGl0IHdpbGwKbmVlZCB0byBm aWd1cmUgd2hlcmUgaXMgdGhlIHNlY29uZCBoYWxmIChzcG9pbGVyLCBpdCBsb29rcyBsaWtlIGl0 J3MKRzFfU1dSRUcoMTY2KSApLiBBbnl3YXksIHRoYXQncyB3aHkgSSdtIHByb3Bvc2luZyBkcm9w cGluZyBMU0IgaW4gdGhlcmUuIE5vdApzdXJlIGJldHdlZW4gTFNCX0FERFIgb3IgQUREUl9MU0Iu Cgo+ICAjZGVmaW5lIEcyX0FERFJfU1RSCQkoRzJfU1dSRUcoMTY5KSkKPiAgI2RlZmluZSBIRVZD X1NDQUxJTkdfTElTVAkoRzJfU1dSRUcoMTcxKSkKPiArI2RlZmluZSBWUDlfQUREUl9DVFIJCShH Ml9TV1JFRygxNzEpKQo+ICsjZGVmaW5lIFZQOV9BRERSX1BST0JTCQkoRzJfU1dSRUcoMTczKSkK PiAgI2RlZmluZSBHMl9SQVNURVJfU0NBTgkJKEcyX1NXUkVHKDE3NSkpCj4gICNkZWZpbmUgRzJf UkFTVEVSX1NDQU5fQ0hSCShHMl9TV1JFRygxNzcpKQo+ICAjZGVmaW5lIEcyX1RJTEVfRklMVEVS CQkoRzJfU1dSRUcoMTc5KSkKClRoaXMgb25lIGlzIGFsc28gYW4gYWRkcmVzcywgYnV0IGRvZXMg bm90IHNheSBzbyBhdCBhbGwuIEl0J3MgYWxzbyB0aGUgTFNCLCB0aGUKTVNCIGlzIFJFRyAxNzgu IFZTSSBkZXNjcmliZXMgaXQgYXMgIkJhc2UgYWRkcmVzcyBMU0IgdG8gc3RvcmUvcmVhZCBmaWx0 ZXJpbmcKY29lZmZpZW50cyBvZiBjdXJyZW50IHBpY3R1cmUgYXQgdGlsZSBib3JkZXIuIi4gSSB0 aGluayBzb21lIGNsZWFudXAgd291bGQgYmUKbmljZSBoZXJlLiBUaGVyZSBpcyBsaWtlbHkgYSBs b3Qgb2Ygb3RoZXIgd2VpcmRseSBuYW1lZCByZWdpc3RlcnMgaGVyZSBhbmQgdGhlc2UKbmFtZSBk b24ndCBzZWVtIHRvIGNvbWUgZnJvbSByZWZlcmVuY2UgY29kZS4KCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3ZwOV9kZWMuYyBiL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3ZwOV9kZWMuYwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mMWIyMDc2NjZmYTcKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZzJfdnA5X2RlYy5j Cj4gQEAgLTAsMCArMSw5NzggQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAKPiArLyoKPiArICogSGFudHJvIFZQOSBjb2RlYyBkcml2ZXIKPiArICoKPiArICogQ29weXJp Z2h0IChDKSAyMDIxIENvbGxhYm9yYSBMdGQuCj4gKyAqLwo+ICsjaW5jbHVkZSAibWVkaWEvdmlk ZW9idWYyLWNvcmUuaCIKPiArI2luY2x1ZGUgIm1lZGlhL3ZpZGVvYnVmMi1kbWEtY29udGlnLmgi Cj4gKyNpbmNsdWRlICJtZWRpYS92aWRlb2J1ZjItdjRsMi5oIgo+ICsjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Cj4gKyNpbmNsdWRlIDxtZWRp YS92NGwyLW1lbTJtZW0uaD4KPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItdnA5Lmg+Cj4gKwo+ICsj aW5jbHVkZSAiaGFudHJvLmgiCj4gKyNpbmNsdWRlICJoYW50cm9fdnA5LmgiCj4gKyNpbmNsdWRl ICJoYW50cm9fZzJfcmVncy5oIgo+ICsKPiArI2RlZmluZSBHMl9BTElHTiAxNgo+ICsKPiArZW51 bSBoYW50cm9fcmVmX2ZyYW1lcyB7Cj4gKwlJTlRSQV9GUkFNRSA9IDAsCj4gKwlMQVNUX0ZSQU1F ID0gMSwKPiArCUdPTERFTl9GUkFNRSA9IDIsCj4gKwlBTFRSRUZfRlJBTUUgPSAzLAo+ICsJTUFY X1JFRl9GUkFNRVMgPSA0Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHN0YXJ0X3ByZXBhcmVfcnVu KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1l ICoqZGVjX3BhcmFtcykKPiArewo+ICsJY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfY29tcHJl c3NlZF9oZHIgKnByb2JfdXBkYXRlczsKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHgg KnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKPiAr CXVuc2lnbmVkIGludCBmY3R4X2lkeDsKPiArCj4gKwkvKiB2NGwyLXNwZWNpZmljIHN0dWZmICov Cj4gKwloYW50cm9fc3RhcnRfcHJlcGFyZV9ydW4oY3R4KTsKPiArCj4gKwljdHJsID0gdjRsMl9j dHJsX2ZpbmQoJmN0eC0+Y3RybF9oYW5kbGVyLCBWNEwyX0NJRF9TVEFURUxFU1NfVlA5X0ZSQU1F KTsKPiArCWlmIChXQVJOX09OKCFjdHJsKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCSpkZWNf cGFyYW1zID0gY3RybC0+cF9jdXIucDsKPiArCj4gKwljdHJsID0gdjRsMl9jdHJsX2ZpbmQoJmN0 eC0+Y3RybF9oYW5kbGVyLCBWNEwyX0NJRF9TVEFURUxFU1NfVlA5X0NPTVBSRVNTRURfSERSKTsK PiArCWlmIChXQVJOX09OKCFjdHJsKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCXByb2JfdXBk YXRlcyA9IGN0cmwtPnBfY3VyLnA7Cj4gKwl2cDlfY3R4LT5jdXIudHhfbW9kZSA9IHByb2JfdXBk YXRlcy0+dHhfbW9kZTsKPiArCj4gKwkvKgo+ICsJICogdnA5IHN0dWZmCj4gKwkgKgo+ICsJICog YnkgdGhpcyBwb2ludCB0aGUgdXNlcnNwYWNlIGhhcyBkb25lIGFsbCBwYXJ0cyBvZiA2LjIgdW5j b21wcmVzc2VkX2hlYWRlcigpCj4gKwkgKiBleGNlcHQgdGhpcyBmcmFnbWVudDoKPiArCSAqIGlm ICggRnJhbWVJc0ludHJhIHx8IGVycm9yX3Jlc2lsaWVudF9tb2RlICkgewo+ICsJICoJc2V0dXBf cGFzdF9pbmRlcGVuZGVuY2UgKCApCj4gKwkgKglpZiAoIGZyYW1lX3R5cGUgPT0gS0VZX0ZSQU1F IHx8IGVycm9yX3Jlc2lsaWVudF9tb2RlID09IDEgfHwKPiArCSAqCSAgICAgcmVzZXRfZnJhbWVf Y29udGV4dCA9PSAzICkgewo+ICsJICoJCWZvciAoIGkgPSAwOyBpIDwgNDsgaSArKyApIHsKPiAr CSAqCQkJc2F2ZV9wcm9icyggaSApCj4gKwkgKgkJfQo+ICsJICoJfSBlbHNlIGlmICggcmVzZXRf ZnJhbWVfY29udGV4dCA9PSAyICkgewo+ICsJICoJCXNhdmVfcHJvYnMoIGZyYW1lX2NvbnRleHRf aWR4ICkKPiArCSAqCX0KPiArCSAqCWZyYW1lX2NvbnRleHRfaWR4ID0gMAo+ICsJICogfQo+ICsJ ICovCj4gKwlmY3R4X2lkeCA9IHY0bDJfdnA5X3Jlc2V0X2ZyYW1lX2N0eCgqZGVjX3BhcmFtcywg dnA5X2N0eC0+ZnJhbWVfY29udGV4dCk7Cj4gKwl2cDlfY3R4LT5jdXIuZnJhbWVfY29udGV4dF9p ZHggPSBmY3R4X2lkeDsKPiArCj4gKwkvKiA2LjEgZnJhbWUoc3opOiBsb2FkX3Byb2JzKCkgYW5k IGxvYWRfcHJvYnMyKCkgKi8KPiArCXZwOV9jdHgtPnByb2JhYmlsaXR5X3RhYmxlcyA9IHZwOV9j dHgtPmZyYW1lX2NvbnRleHRbZmN0eF9pZHhdOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgdXNlcnNw YWNlIGhhcyBhbHNvIHBlcmZvcm1lZCA2LjMgY29tcHJlc3NlZF9oZWFkZXIoKSwgYnV0IGhhbmRs aW5nIHRoZQo+ICsJICogcHJvYnMgaW4gYSBzcGVjaWFsIHdheS4gQWxsIHByb2JzIHdoaWNoIG5l ZWQgdXBkYXRpbmcsIGV4Y2VwdCBNVi1yZWxhdGVkLAo+ICsJICogaGF2ZSBiZWVuIHJlYWQgZnJv bSB0aGUgYml0c3RyZWFtIGFuZCB0cmFuc2xhdGVkIHRocm91Z2ggaW52X21hcF90YWJsZVtdLAo+ ICsJICogYnV0IG5vIDYuMy42IGludl9yZWNlbnRlcl9ub25uZWcodiwgbSkgaGFzIGJlZW4gcGVy Zm9ybWVkLiBUaGUgdmFsdWVzIHBhc3NlZAo+ICsJICogYnkgdXNlcnNwYWNlIGFyZSBlaXRoZXIg dHJhbnNsYXRlZCB2YWx1ZXMgKHRoZXJlIGFyZSBubyAwIHZhbHVlcyBpbgo+ICsJICogaW52X21h cF90YWJsZVtdKSwgb3IgemVybyB0byBpbmRpY2F0ZSBubyB1cGRhdGUuIEFsbCBNVi1yZWxhdGVk IHByb2JzIHdoaWNoIG5lZWQKPiArCSAqIHVwZGF0aW5nIGhhdmUgYmVlbiByZWFkIGZyb20gdGhl IGJpdHN0cmVhbSBhbmQgKG12X3Byb2IgPDwgMSkgfCAxIGhhcyBiZWVuCj4gKwkgKiBwZXJmb3Jt ZWQuIFRoZSB2YWx1ZXMgcGFzc2VkIGJ5IHVzZXJzcGFjZSBhcmUgZWl0aGVyIG5ldyB2YWx1ZXMK PiArCSAqIHRvIHJlcGxhY2Ugb2xkIG9uZXMgKHRoZSBhYm92ZSBtZW50aW9uZWQgc2hpZnQgYW5k IGJpdHdpc2Ugb3IgbmV2ZXIgcmVzdWx0IGluCj4gKwkgKiBhIHplcm8pIG9yIHplcm8gdG8gaW5k aWNhdGUgbm8gdXBkYXRlLgo+ICsJICogZndfdXBkYXRlX3Byb2JzKCkgcGVyZm9ybXMgYWN0dWFs IHByb2JzIHVwZGF0ZXMgb3IgbGVhdmVzIHByb2JzIGFzLWlzCj4gKwkgKiBmb3IgdmFsdWVzIGZv ciB3aGljaCBhIHplcm8gd2FzIHBhc3NlZCBmcm9tIHVzZXJzcGFjZS4KPiArCSAqLwo+ICsJdjRs Ml92cDlfZndfdXBkYXRlX3Byb2JzKCZ2cDlfY3R4LT5wcm9iYWJpbGl0eV90YWJsZXMsIHByb2Jf dXBkYXRlcywgKmRlY19wYXJhbXMpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgc2l6ZV90IGNocm9tYV9vZmZzZXQoY29uc3Qgc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiAr CQkJICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7 Cj4gKwlpbnQgYnl0ZXNfcGVyX3BpeGVsID0gZGVjX3BhcmFtcy0+Yml0X2RlcHRoID09IDggPyAx IDogMjsKPiArCj4gKwlyZXR1cm4gY3R4LT5zcmNfZm10LndpZHRoICogY3R4LT5zcmNfZm10Lmhl aWdodCAqIGJ5dGVzX3Blcl9waXhlbDsKPiArfQo+ICsKPiArc3RhdGljIHNpemVfdCBtdl9vZmZz ZXQoY29uc3Qgc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiArCQkJY29uc3Qgc3RydWN0IHY0bDJf Y3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sKPiArCXNpemVfdCBjcl9vZmZzZXQgPSBj aHJvbWFfb2Zmc2V0KGN0eCwgZGVjX3BhcmFtcyk7Cj4gKwo+ICsJcmV0dXJuIEFMSUdOKChjcl9v ZmZzZXQgKiAzKSAvIDIsIEcyX0FMSUdOKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBoYW50 cm9fZGVjb2RlZF9idWZmZXIgKgo+ICtnZXRfcmVmX2J1ZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4 LCBzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICpkc3QsIHU2NCB0aW1lc3RhbXApCj4gK3sKPiArCXN0 cnVjdCB2NGwyX20ybV9jdHggKm0ybV9jdHggPSBjdHgtPmZoLm0ybV9jdHg7Cj4gKwlzdHJ1Y3Qg dmIyX3F1ZXVlICpjYXBfcSA9ICZtMm1fY3R4LT5jYXBfcV9jdHgucTsKPiArCWludCBidWZfaWR4 Owo+ICsKPiArCS8qCj4gKwkgKiBJZiBhIHJlZiBpcyB1bnVzZWQgb3IgaW52YWxpZCwgYWRkcmVz cyBvZiBjdXJyZW50IGRlc3RpbmF0aW9uCj4gKwkgKiBidWZmZXIgaXMgcmV0dXJuZWQuCj4gKwkg Ki8KPiArCWJ1Zl9pZHggPSB2YjJfZmluZF90aW1lc3RhbXAoY2FwX3EsIHRpbWVzdGFtcCwgMCk7 Cj4gKwlpZiAoYnVmX2lkeCA8IDApCj4gKwkJcmV0dXJuIHZiMl90b19oYW50cm9fZGVjb2RlZF9i dWYoJmRzdC0+dmIyX2J1Zik7Cj4gKwo+ICsJcmV0dXJuIHZiMl90b19oYW50cm9fZGVjb2RlZF9i dWYodmIyX2dldF9idWZmZXIoY2FwX3EsIGJ1Zl9pZHgpKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgdXBkYXRlX2RlY19idWZfaW5mbyhzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpidWYs Cj4gKwkJCQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAqZGVjX3BhcmFtcykKPiAr ewo+ICsJYnVmLT52cDkud2lkdGggPSBkZWNfcGFyYW1zLT5mcmFtZV93aWR0aF9taW51c18xICsg MTsKPiArCWJ1Zi0+dnA5LmhlaWdodCA9IGRlY19wYXJhbXMtPmZyYW1lX2hlaWdodF9taW51c18x ICsgMTsKPiArCWJ1Zi0+dnA5LmJpdF9kZXB0aCA9IGRlY19wYXJhbXMtPmJpdF9kZXB0aDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgdXBkYXRlX2N0eF9jdXJfaW5mbyhzdHJ1Y3QgaGFudHJvX3Zw OV9kZWNfaHdfY3R4ICp2cDlfY3R4LAo+ICsJCQkJc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZl ciAqYnVmLAo+ICsJCQkJY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJh bXMpCj4gK3sKPiArCXZwOV9jdHgtPmN1ci52YWxpZCA9IHRydWU7Cj4gKwl2cDlfY3R4LT5jdXIu cmVmZXJlbmNlX21vZGUgPSBkZWNfcGFyYW1zLT5yZWZlcmVuY2VfbW9kZTsKPiArCXZwOV9jdHgt PmN1ci5pbnRlcnBvbGF0aW9uX2ZpbHRlciA9IGRlY19wYXJhbXMtPmludGVycG9sYXRpb25fZmls dGVyOwo+ICsJdnA5X2N0eC0+Y3VyLmZsYWdzID0gZGVjX3BhcmFtcy0+ZmxhZ3M7Cj4gKwl2cDlf Y3R4LT5jdXIudGltZXN0YW1wID0gYnVmLT5iYXNlLnZiLnZiMl9idWYudGltZXN0YW1wOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfb3V0cHV0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgs Cj4gKwkJCSAgc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciAqZHN0LAo+ICsJCQkgIGNvbnN0 IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwlkbWFfYWRk cl90IGx1bWFfYWRkciwgY2hyb21hX2FkZHIsIG12X2FkZHI7Cj4gKwo+ICsJaGFudHJvX3JlZ193 cml0ZShjdHgtPmRldiwgJmcyX291dF9kaXMsIDApOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgt PmRldiwgJmcyX291dHB1dF9mb3JtYXQsIDApOwo+ICsKPiArCWx1bWFfYWRkciA9IHZiMl9kbWFf Y29udGlnX3BsYW5lX2RtYV9hZGRyKCZkc3QtPmJhc2UudmIudmIyX2J1ZiwgMCk7Cj4gKwloYW50 cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJfQUREUl9EU1QsIGx1bWFfYWRkcik7Cj4gKwo+ICsJ Y2hyb21hX2FkZHIgPSBsdW1hX2FkZHIgKyBjaHJvbWFfb2Zmc2V0KGN0eCwgZGVjX3BhcmFtcyk7 Cj4gKwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJfQUREUl9EU1RfQ0hSLCBjaHJvbWFf YWRkcik7Cj4gKwo+ICsJbXZfYWRkciA9IGx1bWFfYWRkciArIG12X29mZnNldChjdHgsIGRlY19w YXJhbXMpOwo+ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX0FERFJfRFNUX01WLCBt dl9hZGRyKTsKPiArfQo+ICsKPiArc3RydWN0IGhhbnRyb192cDlfcmVmX3JlZyB7Cj4gKwljb25z dCBzdHJ1Y3QgaGFudHJvX3JlZyB3aWR0aDsKPiArCWNvbnN0IHN0cnVjdCBoYW50cm9fcmVnIGhl aWdodDsKPiArCWNvbnN0IHN0cnVjdCBoYW50cm9fcmVnIGhvcl9zY2FsZTsKPiArCWNvbnN0IHN0 cnVjdCBoYW50cm9fcmVnIHZlcl9zY2FsZTsKPiArCXUzMiB5X2Jhc2U7Cj4gKwl1MzIgY19iYXNl Owo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgY29uZmlnX3JlZihzdHJ1Y3QgaGFudHJvX2N0eCAq Y3R4LAo+ICsJCSAgICAgICBzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpkc3QsCj4gKwkJ ICAgICAgIGNvbnN0IHN0cnVjdCBoYW50cm9fdnA5X3JlZl9yZWcgKnJlZl9yZWcsCj4gKwkJICAg ICAgIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+ICsJCSAg ICAgICB1NjQgcmVmX3RzKQo+ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpi dWY7Cj4gKwlkbWFfYWRkcl90IGx1bWFfYWRkciwgY2hyb21hX2FkZHI7Cj4gKwl1MzIgcmVmdywg cmVmaDsKPiArCj4gKwlidWYgPSBnZXRfcmVmX2J1ZihjdHgsICZkc3QtPmJhc2UudmIsIHJlZl90 cyk7Cj4gKwlyZWZ3ID0gYnVmLT52cDkud2lkdGg7Cj4gKwlyZWZoID0gYnVmLT52cDkuaGVpZ2h0 Owo+ICsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZyZWZfcmVnLT53aWR0aCwgcmVm dyk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmcmVmX3JlZy0+aGVpZ2h0LCByZWZo KTsKPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmcmVmX3JlZy0+aG9yX3NjYWxl LCAocmVmdyA8PCAxNCkgLyBkc3QtPnZwOS53aWR0aCk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0 eC0+ZGV2LCAmcmVmX3JlZy0+dmVyX3NjYWxlLCAocmVmaCA8PCAxNCkgLyBkc3QtPnZwOS5oZWln aHQpOwo+ICsKPiArCWx1bWFfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZi dWYtPmJhc2UudmIudmIyX2J1ZiwgMCk7Cj4gKwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwg cmVmX3JlZy0+eV9iYXNlLCBsdW1hX2FkZHIpOwo+ICsKPiArCWNocm9tYV9hZGRyID0gbHVtYV9h ZGRyICsgY2hyb21hX29mZnNldChjdHgsIGRlY19wYXJhbXMpOwo+ICsJaGFudHJvX3dyaXRlX2Fk ZHIoY3R4LT5kZXYsIHJlZl9yZWctPmNfYmFzZSwgY2hyb21hX2FkZHIpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBjb25maWdfcmVmX3JlZ2lzdGVycyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ ICsJCQkJIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+ICsJ CQkJIHN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgKmRzdCwKPiArCQkJCSBzdHJ1Y3QgaGFu dHJvX2RlY29kZWRfYnVmZmVyICptdl9yZWYpCj4gK3sKPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3Qg aGFudHJvX3ZwOV9yZWZfcmVnIHJlZl9yZWdzW10gPSB7Cj4gKwkJewo+ICsJCQkvKiBMYXN0ICov Cj4gKwkJCS53aWR0aCA9IHZwOV9scmVmX3dpZHRoLAo+ICsJCQkuaGVpZ2h0ID0gdnA5X2xyZWZf aGVpZ2h0LAo+ICsJCQkuaG9yX3NjYWxlID0gdnA5X2xyZWZfaG9yX3NjYWxlLAo+ICsJCQkudmVy X3NjYWxlID0gdnA5X2xyZWZfdmVyX3NjYWxlLAo+ICsJCQkueV9iYXNlID0gRzJfUkVHX0FERFJf UkVGKDApLAo+ICsJCQkuY19iYXNlID0gRzJfUkVHX0NIUl9SRUYoMCksCj4gKwkJfSwgewo+ICsJ CQkvKiBHb2xkZW4gKi8KPiArCQkJLndpZHRoID0gdnA5X2dyZWZfd2lkdGgsCj4gKwkJCS5oZWln aHQgPSB2cDlfZ3JlZl9oZWlnaHQsCj4gKwkJCS5ob3Jfc2NhbGUgPSB2cDlfZ3JlZl9ob3Jfc2Nh bGUsCj4gKwkJCS52ZXJfc2NhbGUgPSB2cDlfZ3JlZl92ZXJfc2NhbGUsCj4gKwkJCS55X2Jhc2Ug PSBHMl9SRUdfQUREUl9SRUYoNCksCj4gKwkJCS5jX2Jhc2UgPSBHMl9SRUdfQ0hSX1JFRig0KSwK PiArCQl9LCB7Cj4gKwkJCS8qIEFsdHJlZiAqLwo+ICsJCQkud2lkdGggPSB2cDlfYXJlZl93aWR0 aCwKPiArCQkJLmhlaWdodCA9IHZwOV9hcmVmX2hlaWdodCwKPiArCQkJLmhvcl9zY2FsZSA9IHZw OV9hcmVmX2hvcl9zY2FsZSwKPiArCQkJLnZlcl9zY2FsZSA9IHZwOV9hcmVmX3Zlcl9zY2FsZSwK PiArCQkJLnlfYmFzZSA9IEcyX1JFR19BRERSX1JFRig1KSwKPiArCQkJLmNfYmFzZSA9IEcyX1JF R19DSFJfUkVGKDUpLAo+ICsJCX0sCj4gKwl9Owo+ICsJZG1hX2FkZHJfdCBtdl9hZGRyOwo+ICsK PiArCWNvbmZpZ19yZWYoY3R4LCBkc3QsICZyZWZfcmVnc1swXSwgZGVjX3BhcmFtcywgZGVjX3Bh cmFtcy0+bGFzdF9mcmFtZV90cyk7Cj4gKwljb25maWdfcmVmKGN0eCwgZHN0LCAmcmVmX3JlZ3Nb MV0sIGRlY19wYXJhbXMsIGRlY19wYXJhbXMtPmdvbGRlbl9mcmFtZV90cyk7Cj4gKwljb25maWdf cmVmKGN0eCwgZHN0LCAmcmVmX3JlZ3NbMl0sIGRlY19wYXJhbXMsIGRlY19wYXJhbXMtPmFsdF9m cmFtZV90cyk7Cj4gKwo+ICsJbXZfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRy KCZtdl9yZWYtPmJhc2UudmIudmIyX2J1ZiwgMCkgKwo+ICsJCSAgbXZfb2Zmc2V0KGN0eCwgZGVj X3BhcmFtcyk7Cj4gKwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJfUkVHX0RNVl9SRUYo MCksIG12X2FkZHIpOwo+ICsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfbGFz dF9zaWduX2JpYXMsCj4gKwkJCSBkZWNfcGFyYW1zLT5yZWZfZnJhbWVfc2lnbl9iaWFzICYgVjRM Ml9WUDlfU0lHTl9CSUFTX0xBU1QgPyAxIDogMCk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShj dHgtPmRldiwgJnZwOV9ncmVmX3NpZ25fYmlhcywKPiArCQkJIGRlY19wYXJhbXMtPnJlZl9mcmFt ZV9zaWduX2JpYXMgJiBWNEwyX1ZQOV9TSUdOX0JJQVNfR09MREVOID8gMSA6IDApOwo+ICsKPiAr CWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfYXJlZl9zaWduX2JpYXMsCj4gKwkJCSBk ZWNfcGFyYW1zLT5yZWZfZnJhbWVfc2lnbl9iaWFzICYgVjRMMl9WUDlfU0lHTl9CSUFTX0FMVCA/ IDEgOiAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmVjb21wdXRlX3RpbGVfaW5mbyh1bnNp Z25lZCBzaG9ydCAqdGlsZV9pbmZvLCB1bnNpZ25lZCBpbnQgdGlsZXMsIHVuc2lnbmVkIGludCBz YnMpCj4gK3sKPiArCWludCBpOwo+ICsJdW5zaWduZWQgaW50IGFjY3VtdWxhdGVkID0gMDsKPiAr CXVuc2lnbmVkIGludCBuZXh0X2FjY3VtdWxhdGVkOwo+ICsKPiArCWZvciAoaSA9IDE7IGkgPD0g dGlsZXM7ICsraSkgewo+ICsJCW5leHRfYWNjdW11bGF0ZWQgPSBpICogc2JzIC8gdGlsZXM7Cj4g KwkJKnRpbGVfaW5mbysrID0gbmV4dF9hY2N1bXVsYXRlZCAtIGFjY3VtdWxhdGVkOwo+ICsJCWFj Y3VtdWxhdGVkID0gbmV4dF9hY2N1bXVsYXRlZDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZv aWQKPiArcmVjb21wdXRlX3RpbGVfcmNfaW5mbyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJ CSAgICAgICB1bnNpZ25lZCBpbnQgdGlsZV9yLCB1bnNpZ25lZCBpbnQgdGlsZV9jLAo+ICsJCSAg ICAgICB1bnNpZ25lZCBpbnQgc2JzX3IsIHVuc2lnbmVkIGludCBzYnNfYykKPiArewo+ICsJc3Ry dWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7Cj4gKwo+ ICsJcmVjb21wdXRlX3RpbGVfaW5mbyh2cDlfY3R4LT50aWxlX3JfaW5mbywgdGlsZV9yLCBzYnNf cik7Cj4gKwlyZWNvbXB1dGVfdGlsZV9pbmZvKHZwOV9jdHgtPnRpbGVfY19pbmZvLCB0aWxlX2Ms IHNic19jKTsKPiArCj4gKwl2cDlfY3R4LT5sYXN0X3RpbGVfciA9IHRpbGVfcjsKPiArCXZwOV9j dHgtPmxhc3RfdGlsZV9jID0gdGlsZV9jOwo+ICsJdnA5X2N0eC0+bGFzdF9zYnNfciA9IHNic19y Owo+ICsJdnA5X2N0eC0+bGFzdF9zYnNfYyA9IHNic19jOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGludCBmaXJzdF90aWxlX3Jvdyh1bnNpZ25lZCBpbnQgdGlsZV9yLCB1bnNp Z25lZCBpbnQgc2JzX3IpCj4gK3sKPiArCWlmICh0aWxlX3IgPT0gc2JzX3IgKyAxKQo+ICsJCXJl dHVybiAxOwo+ICsKPiArCWlmICh0aWxlX3IgPT0gc2JzX3IgKyAyKQo+ICsJCXJldHVybiAyOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtmaWxsX3RpbGVfaW5m byhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJICAgICAgIHVuc2lnbmVkIGludCB0aWxlX3Is IHVuc2lnbmVkIGludCB0aWxlX2MsCj4gKwkgICAgICAgdW5zaWduZWQgaW50IHNic19yLCB1bnNp Z25lZCBpbnQgc2JzX2MsCj4gKwkgICAgICAgdW5zaWduZWQgc2hvcnQgKnRpbGVfbWVtKQo+ICt7 Cj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlfY3R4ID0gJmN0eC0+dnA5X2Rl YzsKPiArCXVuc2lnbmVkIGludCBpLCBqOwo+ICsJYm9vbCBmaXJzdCA9IHRydWU7Cj4gKwo+ICsJ Zm9yIChpID0gZmlyc3RfdGlsZV9yb3codGlsZV9yLCBzYnNfcik7IGkgPCB0aWxlX3I7ICsraSkg ewo+ICsJCXVuc2lnbmVkIHNob3J0IHJfaW5mbyA9IHZwOV9jdHgtPnRpbGVfcl9pbmZvW2ldOwo+ ICsKPiArCQlpZiAoZmlyc3QpIHsKPiArCQkJaWYgKGkgPiAwKQo+ICsJCQkJcl9pbmZvICs9IHZw OV9jdHgtPnRpbGVfcl9pbmZvWzBdOwo+ICsJCQlpZiAoaSA9PSAyKQo+ICsJCQkJcl9pbmZvICs9 IHZwOV9jdHgtPnRpbGVfcl9pbmZvWzFdOwo+ICsJCQlmaXJzdCA9IGZhbHNlOwo+ICsJCX0KPiAr CQlmb3IgKGogPSAwOyBqIDwgdGlsZV9jOyArK2opIHsKPiArCQkJKnRpbGVfbWVtKysgPSB2cDlf Y3R4LT50aWxlX2NfaW5mb1tqXTsKPiArCQkJKnRpbGVfbWVtKysgPSByX2luZm87Cj4gKwkJfQo+ ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtjb25maWdfdGlsZXMoc3RydWN0IGhhbnRy b19jdHggKmN0eCwKPiArCSAgICAgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRl Y19wYXJhbXMsCj4gKwkgICAgIHN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgKmRzdCkKPiAr ewo+ICsJc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9k ZWM7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F1eF9idWYgKm1pc2MgPSAmdnA5X2N0eC0+bWlzYzsKPiAr CXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAqdGlsZV9lZGdlID0gJnZwOV9jdHgtPnRpbGVfZWRnZTsK PiArCWRtYV9hZGRyX3QgYWRkcjsKPiArCXVuc2lnbmVkIHNob3J0ICp0aWxlX21lbTsKPiArCj4g KwlhZGRyID0gbWlzYy0+ZG1hICsgdnA5X2N0eC0+dGlsZV9pbmZvX29mZnNldDsKPiArCWhhbnRy b193cml0ZV9hZGRyKGN0eC0+ZGV2LCBHMl9BRERSX1RJTEVfU0laRSwgYWRkcik7Cj4gKwo+ICsJ dGlsZV9tZW0gPSBtaXNjLT5jcHUgKyB2cDlfY3R4LT50aWxlX2luZm9fb2Zmc2V0Owo+ICsJaWYg KGRlY19wYXJhbXMtPnRpbGVfY29sc19sb2cyIHx8IGRlY19wYXJhbXMtPnRpbGVfcm93c19sb2cy KSB7Cj4gKwkJdW5zaWduZWQgaW50IHRpbGVfciA9ICgxIDw8IGRlY19wYXJhbXMtPnRpbGVfcm93 c19sb2cyKTsKPiArCQl1bnNpZ25lZCBpbnQgdGlsZV9jID0gKDEgPDwgZGVjX3BhcmFtcy0+dGls ZV9jb2xzX2xvZzIpOwo+ICsJCXVuc2lnbmVkIGludCBzYnNfciA9IGhhbnRyb192cDlfbnVtX3Ni cyhkc3QtPnZwOS5oZWlnaHQpOwo+ICsJCXVuc2lnbmVkIGludCBzYnNfYyA9IGhhbnRyb192cDlf bnVtX3Nicyhkc3QtPnZwOS53aWR0aCk7Cj4gKwo+ICsJCWlmICh0aWxlX3IgIT0gdnA5X2N0eC0+ bGFzdF90aWxlX3IgfHwgdGlsZV9jICE9IHZwOV9jdHgtPmxhc3RfdGlsZV9jIHx8Cj4gKwkJICAg IHNic19yICE9IHZwOV9jdHgtPmxhc3Rfc2JzX3IgfHwgc2JzX2MgIT0gdnA5X2N0eC0+bGFzdF9z YnNfYykKPiArCQkJcmVjb21wdXRlX3RpbGVfcmNfaW5mbyhjdHgsIHRpbGVfciwgdGlsZV9jLCBz YnNfciwgc2JzX2MpOwo+ICsKPiArCQlmaWxsX3RpbGVfaW5mbyhjdHgsIHRpbGVfciwgdGlsZV9j LCBzYnNfciwgc2JzX2MsIHRpbGVfbWVtKTsKPiArCj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgt PmRldiwgJmcyX3RpbGVfZSwgMSk7Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcy X251bV90aWxlX2NvbHMsIHRpbGVfYyk7Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwg JmcyX251bV90aWxlX3Jvd3MsIHRpbGVfcik7Cj4gKwo+ICsJCWFkZHIgPSB0aWxlX2VkZ2UtPmRt YTsKPiArCQloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJfVElMRV9GSUxURVIsIGFkZHIp Owo+ICsKPiArCQlhZGRyID0gdGlsZV9lZGdlLT5kbWEgKyB2cDlfY3R4LT5ic2RfY3RybF9vZmZz ZXQ7Cj4gKwkJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX1RJTEVfQlNELCBhZGRyKTsK PiArCX0gZWxzZSB7Cj4gKwkJdGlsZV9tZW1bMF0gPSBoYW50cm9fdnA5X251bV9zYnMoZHN0LT52 cDkud2lkdGgpOwo+ICsJCXRpbGVfbWVtWzFdID0gaGFudHJvX3ZwOV9udW1fc2JzKGRzdC0+dnA5 LmhlaWdodCk7Cj4gKwo+ICsJCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl90aWxlX2Us IDApOwo+ICsJCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9udW1fdGlsZV9jb2xzLCAx KTsKPiArCQloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfbnVtX3RpbGVfcm93cywgMSk7 Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3VwZGF0ZV9mZWF0X2FuZF9mbGFnKHN0 cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHgsCj4gKwkJICAgICBjb25zdCBzdHJ1 Y3QgdjRsMl92cDlfc2VnbWVudGF0aW9uICpzZWcsCj4gKwkJICAgICB1bnNpZ25lZCBpbnQgZmVh dHVyZSwKPiArCQkgICAgIHVuc2lnbmVkIGludCBzZWdpZCkKPiArewo+ICsJdTggbWFzayA9IFY0 TDJfVlA5X1NFR01FTlRfRkVBVFVSRV9FTkFCTEVEKGZlYXR1cmUpOwo+ICsKPiArCXZwOV9jdHgt PmZlYXR1cmVfZGF0YVtzZWdpZF1bZmVhdHVyZV0gPSBzZWctPmZlYXR1cmVfZGF0YVtzZWdpZF1b ZmVhdHVyZV07Cj4gKwl2cDlfY3R4LT5mZWF0dXJlX2VuYWJsZWRbc2VnaWRdICY9IH5tYXNrOwo+ ICsJdnA5X2N0eC0+ZmVhdHVyZV9lbmFibGVkW3NlZ2lkXSB8PSAoc2VnLT5mZWF0dXJlX2VuYWJs ZWRbc2VnaWRdICYgbWFzayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgczE2IGNsaXAzKHMx NiB4LCBzMTYgeSwgczE2IHopCj4gK3sKPiArCXJldHVybiAoeiA8IHgpID8geCA6ICh6ID4geSkg PyB5IDogejsKPiArfQo+ICsKPiArc3RhdGljIHMxNiBmZWF0X3ZhbF9jbGlwMyhzMTYgZmVhdF92 YWwsIHMxNiBmZWF0dXJlX2RhdGEsIGJvb2wgYWJzb2x1dGUsIHU4IGNsaXApCj4gK3sKPiArCWlm IChhYnNvbHV0ZSkKPiArCQlyZXR1cm4gZmVhdHVyZV9kYXRhOwo+ICsKPiArCXJldHVybiBjbGlw MygwLCAyNTUsIGZlYXRfdmFsICsgZmVhdHVyZV9kYXRhKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgY29uZmlnX3NlZ21lbnQoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgY29uc3Qgc3RydWN0IHY0 bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fdnA5 X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJY29uc3Qgc3RydWN0IHY0 bDJfdnA5X3NlZ21lbnRhdGlvbiAqc2VnOwo+ICsJczE2IGZlYXRfdmFsOwo+ICsJdW5zaWduZWQg Y2hhciBmZWF0X2lkOwo+ICsJdW5zaWduZWQgaW50IHNlZ2lkOwo+ICsJYm9vbCBzZWdtZW50X2Vu YWJsZWQsIGFic29sdXRlLCB1cGRhdGVfZGF0YTsKPiArCj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0 IGhhbnRyb19yZWcgc2VnX3JlZ3NbOF1bVjRMMl9WUDlfU0VHX0xWTF9NQVhdID0gewo+ICsJCXsg dnA5X3F1YW50X3NlZzAsIHZwOV9maWx0X2xldmVsX3NlZzAsIHZwOV9yZWZwaWNfc2VnMCwgdnA5 X3NraXBfc2VnMCB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzEsIHZwOV9maWx0X2xldmVsX3NlZzEs IHZwOV9yZWZwaWNfc2VnMSwgdnA5X3NraXBfc2VnMSB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzIs IHZwOV9maWx0X2xldmVsX3NlZzIsIHZwOV9yZWZwaWNfc2VnMiwgdnA5X3NraXBfc2VnMiB9LAo+ ICsJCXsgdnA5X3F1YW50X3NlZzMsIHZwOV9maWx0X2xldmVsX3NlZzMsIHZwOV9yZWZwaWNfc2Vn MywgdnA5X3NraXBfc2VnMyB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzQsIHZwOV9maWx0X2xldmVs X3NlZzQsIHZwOV9yZWZwaWNfc2VnNCwgdnA5X3NraXBfc2VnNCB9LAo+ICsJCXsgdnA5X3F1YW50 X3NlZzUsIHZwOV9maWx0X2xldmVsX3NlZzUsIHZwOV9yZWZwaWNfc2VnNSwgdnA5X3NraXBfc2Vn NSB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzYsIHZwOV9maWx0X2xldmVsX3NlZzYsIHZwOV9yZWZw aWNfc2VnNiwgdnA5X3NraXBfc2VnNiB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzcsIHZwOV9maWx0 X2xldmVsX3NlZzcsIHZwOV9yZWZwaWNfc2VnNywgdnA5X3NraXBfc2VnNyB9LAo+ICsJfTsKPiAr Cj4gKwlzZWdtZW50X2VuYWJsZWQgPSAhIShkZWNfcGFyYW1zLT5zZWcuZmxhZ3MgJiBWNEwyX1ZQ OV9TRUdNRU5UQVRJT05fRkxBR19FTkFCTEVEKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5k ZXYsICZ2cDlfc2VnbWVudF9lLCBzZWdtZW50X2VuYWJsZWQpOwo+ICsJaGFudHJvX3JlZ193cml0 ZShjdHgtPmRldiwgJnZwOV9zZWdtZW50X3VwZF9lLAo+ICsJCQkgISEoZGVjX3BhcmFtcy0+c2Vn LmZsYWdzICYgVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfVVBEQVRFX01BUCkpOwo+ICsJaGFu dHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9zZWdtZW50X3RlbXBfdXBkX2UsCj4gKwkJCSAh IShkZWNfcGFyYW1zLT5zZWcuZmxhZ3MgJiBWNEwyX1ZQOV9TRUdNRU5UQVRJT05fRkxBR19URU1Q T1JBTF9VUERBVEUpKTsKPiArCj4gKwlzZWcgPSAmZGVjX3BhcmFtcy0+c2VnOwo+ICsJYWJzb2x1 dGUgPSAhIShzZWctPmZsYWdzICYgVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfQUJTX09SX0RF TFRBX1VQREFURSk7Cj4gKwl1cGRhdGVfZGF0YSA9ICEhKHNlZy0+ZmxhZ3MgJiBWNEwyX1ZQOV9T RUdNRU5UQVRJT05fRkxBR19VUERBVEVfREFUQSk7Cj4gKwo+ICsJZm9yIChzZWdpZCA9IDA7IHNl Z2lkIDwgODsgKytzZWdpZCkgewo+ICsJCS8qIFF1YW50aXplciBzZWdtZW50IGZlYXR1cmUgKi8K PiArCQlmZWF0X2lkID0gVjRMMl9WUDlfU0VHX0xWTF9BTFRfUTsKPiArCQlmZWF0X3ZhbCA9IGRl Y19wYXJhbXMtPnF1YW50LmJhc2VfcV9pZHg7Cj4gKwkJaWYgKHNlZ21lbnRfZW5hYmxlZCkgewo+ ICsJCQlpZiAodXBkYXRlX2RhdGEpCj4gKwkJCQl1cGRhdGVfZmVhdF9hbmRfZmxhZyh2cDlfY3R4 LCBzZWcsIGZlYXRfaWQsIHNlZ2lkKTsKPiArCQkJaWYgKHY0bDJfdnA5X3NlZ19mZWF0X2VuYWJs ZWQodnA5X2N0eC0+ZmVhdHVyZV9lbmFibGVkLCBmZWF0X2lkLCBzZWdpZCkpCj4gKwkJCQlmZWF0 X3ZhbCA9IGZlYXRfdmFsX2NsaXAzKGZlYXRfdmFsLAo+ICsJCQkJCQkJICB2cDlfY3R4LT5mZWF0 dXJlX2RhdGFbc2VnaWRdW2ZlYXRfaWRdLAo+ICsJCQkJCQkJICBhYnNvbHV0ZSwgMjU1KTsKPiAr CQl9Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnNlZ19yZWdzW3NlZ2lkXVtmZWF0 X2lkXSwgZmVhdF92YWwpOwo+ICsKPiArCQkvKiBMb29wIGZpbHRlciBzZWdtZW50IGZlYXR1cmUg Ki8KPiArCQlmZWF0X2lkID0gVjRMMl9WUDlfU0VHX0xWTF9BTFRfTDsKPiArCQlmZWF0X3ZhbCA9 IGRlY19wYXJhbXMtPmxmLmxldmVsOwo+ICsJCWlmIChzZWdtZW50X2VuYWJsZWQpIHsKPiArCQkJ aWYgKHVwZGF0ZV9kYXRhKQo+ICsJCQkJdXBkYXRlX2ZlYXRfYW5kX2ZsYWcodnA5X2N0eCwgc2Vn LCBmZWF0X2lkLCBzZWdpZCk7Cj4gKwkJCWlmICh2NGwyX3ZwOV9zZWdfZmVhdF9lbmFibGVkKHZw OV9jdHgtPmZlYXR1cmVfZW5hYmxlZCwgZmVhdF9pZCwgc2VnaWQpKQo+ICsJCQkJZmVhdF92YWwg PSBmZWF0X3ZhbF9jbGlwMyhmZWF0X3ZhbCwKPiArCQkJCQkJCSAgdnA5X2N0eC0+ZmVhdHVyZV9k YXRhW3NlZ2lkXVtmZWF0X2lkXSwKPiArCQkJCQkJCSAgYWJzb2x1dGUsIDYzKTsKPiArCQl9Cj4g KwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnNlZ19yZWdzW3NlZ2lkXVtmZWF0X2lkXSwg ZmVhdF92YWwpOwo+ICsKPiArCQkvKiBSZWZlcmVuY2UgZnJhbWUgc2VnbWVudCBmZWF0dXJlICov Cj4gKwkJZmVhdF9pZCA9IFY0TDJfVlA5X1NFR19MVkxfUkVGX0ZSQU1FOwo+ICsJCWZlYXRfdmFs ID0gMDsKPiArCQlpZiAoc2VnbWVudF9lbmFibGVkKSB7Cj4gKwkJCWlmICh1cGRhdGVfZGF0YSkK PiArCQkJCXVwZGF0ZV9mZWF0X2FuZF9mbGFnKHZwOV9jdHgsIHNlZywgZmVhdF9pZCwgc2VnaWQp Owo+ICsJCQlpZiAoIShkZWNfcGFyYW1zLT5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZ X0ZSQU1FKSAmJgo+ICsJCQkgICAgdjRsMl92cDlfc2VnX2ZlYXRfZW5hYmxlZCh2cDlfY3R4LT5m ZWF0dXJlX2VuYWJsZWQsIGZlYXRfaWQsIHNlZ2lkKSkKPiArCQkJCWZlYXRfdmFsID0gdnA5X2N0 eC0+ZmVhdHVyZV9kYXRhW3NlZ2lkXVtmZWF0X2lkXSArIDE7Cj4gKwkJfQo+ICsJCWhhbnRyb19y ZWdfd3JpdGUoY3R4LT5kZXYsICZzZWdfcmVnc1tzZWdpZF1bZmVhdF9pZF0sIGZlYXRfdmFsKTsK PiArCj4gKwkJLyogU2tpcCBzZWdtZW50IGZlYXR1cmUgKi8KPiArCQlmZWF0X2lkID0gVjRMMl9W UDlfU0VHX0xWTF9TS0lQOwo+ICsJCWZlYXRfdmFsID0gMDsKPiArCQlpZiAoc2VnbWVudF9lbmFi bGVkKSB7Cj4gKwkJCWlmICh1cGRhdGVfZGF0YSkKPiArCQkJCXVwZGF0ZV9mZWF0X2FuZF9mbGFn KHZwOV9jdHgsIHNlZywgZmVhdF9pZCwgc2VnaWQpOwo+ICsJCQlmZWF0X3ZhbCA9IHY0bDJfdnA5 X3NlZ19mZWF0X2VuYWJsZWQodnA5X2N0eC0+ZmVhdHVyZV9lbmFibGVkLAo+ICsJCQkJCQkJICAg ICBmZWF0X2lkLCBzZWdpZCkgPyAxIDogMDsKPiArCQl9Cj4gKwkJaGFudHJvX3JlZ193cml0ZShj dHgtPmRldiwgJnNlZ19yZWdzW3NlZ2lkXVtmZWF0X2lkXSwgZmVhdF92YWwpOwo+ICsJfQo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfbG9vcF9maWx0ZXIoc3RydWN0IGhhbnRyb19jdHgg KmN0eCwgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sK PiArCWJvb2wgZCA9IGRlY19wYXJhbXMtPmxmLmZsYWdzICYgVjRMMl9WUDlfTE9PUF9GSUxURVJf RkxBR19ERUxUQV9FTkFCTEVEOwo+ICsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2 cDlfZmlsdF9sZXZlbCwgZGVjX3BhcmFtcy0+bGYubGV2ZWwpOwo+ICsJaGFudHJvX3JlZ193cml0 ZShjdHgtPmRldiwgJmcyX291dF9maWx0ZXJpbmdfZGlzLCBkZWNfcGFyYW1zLT5sZi5sZXZlbCA9 PSAwKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9zaGFycG5lc3Ms IGRlY19wYXJhbXMtPmxmLnNoYXJwbmVzcyk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgt PmRldiwgJnZwOV9maWx0X3JlZl9hZGpfMCwgZCA/IGRlY19wYXJhbXMtPmxmLnJlZl9kZWx0YXNb MF0gOiAwKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9yZWZfYWRq XzEsIGQgPyBkZWNfcGFyYW1zLT5sZi5yZWZfZGVsdGFzWzFdIDogMCk7Cj4gKwloYW50cm9fcmVn X3dyaXRlKGN0eC0+ZGV2LCAmdnA5X2ZpbHRfcmVmX2Fkal8yLCBkID8gZGVjX3BhcmFtcy0+bGYu cmVmX2RlbHRhc1syXSA6IDApOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9m aWx0X3JlZl9hZGpfMywgZCA/IGRlY19wYXJhbXMtPmxmLnJlZl9kZWx0YXNbM10gOiAwKTsKPiAr CWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9tYl9hZGpfMCwgZCA/IGRlY19w YXJhbXMtPmxmLm1vZGVfZGVsdGFzWzBdIDogMCk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ ZGV2LCAmdnA5X2ZpbHRfbWJfYWRqXzEsIGQgPyBkZWNfcGFyYW1zLT5sZi5tb2RlX2RlbHRhc1sx XSA6IDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfcGljdHVyZV9kaW1lbnNpb25z KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIHN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgKmRz dCkKPiArewo+ICsJdTMyIHBpY193XzR4NCwgcGljX2hfNHg0Owo+ICsKPiArCWhhbnRyb19yZWdf d3JpdGUoY3R4LT5kZXYsICZnMl9waWNfd2lkdGhfaW5fY2JzLCAoZHN0LT52cDkud2lkdGggKyA3 KSAvIDgpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3BpY19oZWlnaHRfaW5f Y2JzLCAoZHN0LT52cDkuaGVpZ2h0ICsgNykgLyA4KTsKPiArCXBpY193XzR4NCA9IHJvdW5kdXAo ZHN0LT52cDkud2lkdGgsIDgpID4+IDI7Cj4gKwlwaWNfaF80eDQgPSByb3VuZHVwKGRzdC0+dnA5 LmhlaWdodCwgOCkgPj4gMjsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9waWNf d2lkdGhfNHg0LCBwaWNfd180eDQpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcy X3BpY19oZWlnaHRfNHg0LCBwaWNfaF80eDQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtj b25maWdfYml0X2RlcHRoKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwy X2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0 eC0+ZGV2LCAmZzJfYml0X2RlcHRoX3lfbWludXM4LCBkZWNfcGFyYW1zLT5iaXRfZGVwdGggLSA4 KTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9iaXRfZGVwdGhfY19taW51czgs IGRlY19wYXJhbXMtPmJpdF9kZXB0aCAtIDgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJv b2wgaXNfbG9zc2xlc3MoY29uc3Qgc3RydWN0IHY0bDJfdnA5X3F1YW50aXphdGlvbiAqcXVhbnQp Cj4gK3sKPiArCXJldHVybiBxdWFudC0+YmFzZV9xX2lkeCA9PSAwICYmIHF1YW50LT5kZWx0YV9x X3V2X2FjID09IDAgJiYKPiArCSAgICAgICBxdWFudC0+ZGVsdGFfcV91dl9kYyA9PSAwICYmIHF1 YW50LT5kZWx0YV9xX3lfZGMgPT0gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArY29uZmln X3F1YW50KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5 X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAm dnA5X3FwX2RlbHRhX3lfZGMsIGRlY19wYXJhbXMtPnF1YW50LmRlbHRhX3FfeV9kYyk7Cj4gKwlo YW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X3FwX2RlbHRhX2NoX2RjLCBkZWNfcGFyYW1z LT5xdWFudC5kZWx0YV9xX3V2X2RjKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2 cDlfcXBfZGVsdGFfY2hfYWMsIGRlY19wYXJhbXMtPnF1YW50LmRlbHRhX3FfdXZfYWMpOwo+ICsJ aGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9sb3NzbGVzc19lLCBpc19sb3NzbGVzcygm ZGVjX3BhcmFtcy0+cXVhbnQpKTsKPiArfQo+ICsKPiArc3RhdGljIHUzMgo+ICtoYW50cm9faW50 ZXJwX2ZpbHRlcl9mcm9tX3Y0bDIodW5zaWduZWQgaW50IGludGVycG9sYXRpb25fZmlsdGVyKQo+ ICt7Cj4gKwlzd2l0Y2ggKGludGVycG9sYXRpb25fZmlsdGVyKSB7Cj4gKwljYXNlIFY0TDJfVlA5 X0lOVEVSUF9GSUxURVJfRUlHSFRUQVA6Cj4gKwkJcmV0dXJuIDB4MTsKPiArCWNhc2UgVjRMMl9W UDlfSU5URVJQX0ZJTFRFUl9FSUdIVFRBUF9TTU9PVEg6Cj4gKwkJcmV0dXJuIDA7Cj4gKwljYXNl IFY0TDJfVlA5X0lOVEVSUF9GSUxURVJfRUlHSFRUQVBfU0hBUlA6Cj4gKwkJcmV0dXJuIDB4MjsK PiArCWNhc2UgVjRMMl9WUDlfSU5URVJQX0ZJTFRFUl9CSUxJTkVBUjoKPiArCQlyZXR1cm4gMHgz Owo+ICsJY2FzZSBWNEwyX1ZQOV9JTlRFUlBfRklMVEVSX1NXSVRDSEFCTEU6Cj4gKwkJcmV0dXJu IDB4NDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAr Y29uZmlnX290aGVycyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgdjRsMl9j dHJsX3ZwOV9mcmFtZSAqZGVjX3BhcmFtcywKPiArCSAgICAgIGJvb2wgaW50cmFfb25seSwgYm9v bCByZXNvbHV0aW9uX2NoYW5nZSkKPiArewo+ICsJc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0 eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgt PmRldiwgJmcyX2lkcl9waWNfZSwgaW50cmFfb25seSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0 ZShjdHgtPmRldiwgJnZwOV90cmFuc2Zvcm1fbW9kZSwgdnA5X2N0eC0+Y3VyLnR4X21vZGUpOwo+ ICsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfbWNvbXBfZmlsdF90eXBlLCBp bnRyYV9vbmx5ID8KPiArCQkwIDogaGFudHJvX2ludGVycF9maWx0ZXJfZnJvbV92NGwyKGRlY19w YXJhbXMtPmludGVycG9sYXRpb25fZmlsdGVyKSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShj dHgtPmRldiwgJnZwOV9oaWdoX3ByZWNfbXZfZSwKPiArCQkJICEhKGRlY19wYXJhbXMtPmZsYWdz ICYgVjRMMl9WUDlfRlJBTUVfRkxBR19BTExPV19ISUdIX1BSRUNfTVYpKTsKPiArCj4gKwloYW50 cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X2NvbXBfcHJlZF9tb2RlLCBkZWNfcGFyYW1zLT5y ZWZlcmVuY2VfbW9kZSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3Rl bXBvcl9tdnBfZSwKPiArCQkJICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwyX1ZQOV9GUkFNRV9G TEFHX0VSUk9SX1JFU0lMSUVOVCkgJiYKPiArCQkJICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwy X1ZQOV9GUkFNRV9GTEFHX0tFWV9GUkFNRSkgJiYKPiArCQkJICEodnA5X2N0eC0+bGFzdC5mbGFn cyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZX0ZSQU1FKSAmJgo+ICsJCQkgIShkZWNfcGFyYW1z LT5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfSU5UUkFfT05MWSkgJiYKPiArCQkJICFyZXNv bHV0aW9uX2NoYW5nZSAmJgo+ICsJCQkgdnA5X2N0eC0+bGFzdC5mbGFncyAmIFY0TDJfVlA5X0ZS QU1FX0ZMQUdfU0hPV19GUkFNRQo+ICsJKTsKPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ ZGV2LCAmZzJfd3JpdGVfbXZzX2UsCj4gKwkJCSAhKGRlY19wYXJhbXMtPmZsYWdzICYgVjRMMl9W UDlfRlJBTUVfRkxBR19LRVlfRlJBTUUpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArY29u ZmlnX2NvbXBvdW5kX3JlZmVyZW5jZShzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJCQkgIGNv bnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwl1MzIg Y29tcF9maXhlZF9yZWYsIGNvbXBfdmFyX3JlZlsyXTsKPiArCWJvb2wgbGFzdF9yZWZfZnJhbWVf c2lnbl9iaWFzOwo+ICsJYm9vbCBnb2xkZW5fcmVmX2ZyYW1lX3NpZ25fYmlhczsKPiArCWJvb2wg YWx0X3JlZl9mcmFtZV9zaWduX2JpYXM7Cj4gKwlib29sIGNvbXBfcmVmX2FsbG93ZWQgPSAwOwo+ ICsKPiArCWNvbXBfZml4ZWRfcmVmID0gMDsKPiArCWNvbXBfdmFyX3JlZlswXSA9IDA7Cj4gKwlj b21wX3Zhcl9yZWZbMV0gPSAwOwo+ICsKPiArCWxhc3RfcmVmX2ZyYW1lX3NpZ25fYmlhcyA9IGRl Y19wYXJhbXMtPnJlZl9mcmFtZV9zaWduX2JpYXMgJiBWNEwyX1ZQOV9TSUdOX0JJQVNfTEFTVDsK PiArCWdvbGRlbl9yZWZfZnJhbWVfc2lnbl9iaWFzID0gZGVjX3BhcmFtcy0+cmVmX2ZyYW1lX3Np Z25fYmlhcyAmIFY0TDJfVlA5X1NJR05fQklBU19HT0xERU47Cj4gKwlhbHRfcmVmX2ZyYW1lX3Np Z25fYmlhcyA9IGRlY19wYXJhbXMtPnJlZl9mcmFtZV9zaWduX2JpYXMgJiBWNEwyX1ZQOV9TSUdO X0JJQVNfQUxUOwo+ICsKPiArCS8qIDYuMy4xMiBGcmFtZSByZWZlcmVuY2UgbW9kZSBzeW50YXgg Ki8KPiArCWNvbXBfcmVmX2FsbG93ZWQgfD0gZ29sZGVuX3JlZl9mcmFtZV9zaWduX2JpYXMgIT0g bGFzdF9yZWZfZnJhbWVfc2lnbl9iaWFzOwo+ICsJY29tcF9yZWZfYWxsb3dlZCB8PSBhbHRfcmVm X2ZyYW1lX3NpZ25fYmlhcyAhPSBsYXN0X3JlZl9mcmFtZV9zaWduX2JpYXM7Cj4gKwo+ICsJaWYg KGNvbXBfcmVmX2FsbG93ZWQpIHsKPiArCQlpZiAobGFzdF9yZWZfZnJhbWVfc2lnbl9iaWFzID09 Cj4gKwkJICAgIGdvbGRlbl9yZWZfZnJhbWVfc2lnbl9iaWFzKSB7Cj4gKwkJCWNvbXBfZml4ZWRf cmVmID0gQUxUUkVGX0ZSQU1FOwo+ICsJCQljb21wX3Zhcl9yZWZbMF0gPSBMQVNUX0ZSQU1FOwo+ ICsJCQljb21wX3Zhcl9yZWZbMV0gPSBHT0xERU5fRlJBTUU7Cj4gKwkJfSBlbHNlIGlmIChsYXN0 X3JlZl9mcmFtZV9zaWduX2JpYXMgPT0KPiArCQkJICAgYWx0X3JlZl9mcmFtZV9zaWduX2JpYXMp IHsKPiArCQkJY29tcF9maXhlZF9yZWYgPSBHT0xERU5fRlJBTUU7Cj4gKwkJCWNvbXBfdmFyX3Jl ZlswXSA9IExBU1RfRlJBTUU7Cj4gKwkJCWNvbXBfdmFyX3JlZlsxXSA9IEFMVFJFRl9GUkFNRTsK PiArCQl9IGVsc2Ugewo+ICsJCQljb21wX2ZpeGVkX3JlZiA9IExBU1RfRlJBTUU7Cj4gKwkJCWNv bXBfdmFyX3JlZlswXSA9IEdPTERFTl9GUkFNRTsKPiArCQkJY29tcF92YXJfcmVmWzFdID0gQUxU UkVGX0ZSQU1FOwo+ICsJCX0KPiArCX0KPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2 LCAmdnA5X2NvbXBfcHJlZF9maXhlZF9yZWYsIGNvbXBfZml4ZWRfcmVmKTsKPiArCWhhbnRyb19y ZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfY29tcF9wcmVkX3Zhcl9yZWYwLCBjb21wX3Zhcl9yZWZb MF0pOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9jb21wX3ByZWRfdmFyX3Jl ZjEsIGNvbXBfdmFyX3JlZlsxXSk7Cj4gK30KPiArCj4gKyNkZWZpbmUgSU5ORVJfTE9PUCBcCj4g K2RvIHsJCQkJCQkJCQlcCj4gKwlmb3IgKG0gPSAwOyBtIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+ Y29lZlswXVswXVswXVswXSk7ICsrbSkgewlcCj4gKwkJbWVtY3B5KGFkYXB0aXZlLT5jb2VmW2ld W2pdW2tdW2xdW21dLAkJCVwKPiArCQkgICAgICAgcHJvYnMtPmNvZWZbaV1bal1ba11bbF1bbV0s CQkJXAo+ICsJCSAgICAgICBzaXplb2YocHJvYnMtPmNvZWZbaV1bal1ba11bbF1bbV0pKTsJCVwK PiArCQkJCQkJCQkJXAo+ICsJCWFkYXB0aXZlLT5jb2VmW2ldW2pdW2tdW2xdW21dWzNdID0gMDsJ CQlcCj4gKwl9CQkJCQkJCQlcCj4gK30gd2hpbGUgKDApCj4gKwo+ICtzdGF0aWMgdm9pZCBjb25m aWdfcHJvYnMoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92 cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19j dHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICpt aXNjID0gJnZwOV9jdHgtPm1pc2M7Cj4gKwlzdHJ1Y3QgaGFudHJvX2cyX2FsbF9wcm9icyAqYWxs X3Byb2JzID0gbWlzYy0+Y3B1Owo+ICsJc3RydWN0IGhhbnRyb19nMl9wcm9icyAqYWRhcHRpdmU7 Cj4gKwlzdHJ1Y3QgaGFudHJvX2cyX212X3Byb2JzICptdjsKPiArCWNvbnN0IHN0cnVjdCB2NGwy X3ZwOV9zZWdtZW50YXRpb24gKnNlZyA9ICZkZWNfcGFyYW1zLT5zZWc7Cj4gKwljb25zdCBzdHJ1 Y3QgdjRsMl92cDlfZnJhbWVfY29udGV4dCAqcHJvYnMgPSAmdnA5X2N0eC0+cHJvYmFiaWxpdHlf dGFibGVzOwo+ICsJaW50IGksIGosIGssIGwsIG07Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoYWxsX3Byb2JzLT5rZl95X21vZGVfcHJvYik7ICsraSkKPiArCQlmb3IgKGogPSAw OyBqIDwgQVJSQVlfU0laRShhbGxfcHJvYnMtPmtmX3lfbW9kZV9wcm9iWzBdKTsgKytqKSB7Cj4g KwkJCW1lbWNweShhbGxfcHJvYnMtPmtmX3lfbW9kZV9wcm9iW2ldW2pdLAo+ICsJCQkgICAgICAg djRsMl92cDlfa2ZfeV9tb2RlX3Byb2JbaV1bal0sCj4gKwkJCSAgICAgICBBUlJBWV9TSVpFKGFs bF9wcm9icy0+a2ZfeV9tb2RlX3Byb2JbaV1bal0pKTsKPiArCj4gKwkJCWFsbF9wcm9icy0+a2Zf eV9tb2RlX3Byb2JfdGFpbFtpXVtqXVswXSA9Cj4gKwkJCQl2NGwyX3ZwOV9rZl95X21vZGVfcHJv YltpXVtqXVs4XTsKPiArCQl9Cj4gKwo+ICsJbWVtY3B5KGFsbF9wcm9icy0+bWJfc2VnbWVudF90 cmVlX3Byb2JzLCBzZWctPnRyZWVfcHJvYnMsCj4gKwkgICAgICAgc2l6ZW9mKGFsbF9wcm9icy0+ bWJfc2VnbWVudF90cmVlX3Byb2JzKSk7Cj4gKwo+ICsJbWVtY3B5KGFsbF9wcm9icy0+c2VnbWVu dF9wcmVkX3Byb2JzLCBzZWctPnByZWRfcHJvYnMsCj4gKwkgICAgICAgc2l6ZW9mKGFsbF9wcm9i cy0+c2VnbWVudF9wcmVkX3Byb2JzKSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoYWxsX3Byb2JzLT5rZl91dl9tb2RlX3Byb2IpOyArK2kpIHsKPiArCQltZW1jcHkoYWxsX3By b2JzLT5rZl91dl9tb2RlX3Byb2JbaV0sIHY0bDJfdnA5X2tmX3V2X21vZGVfcHJvYltpXSwKPiAr CQkgICAgICAgQVJSQVlfU0laRShhbGxfcHJvYnMtPmtmX3V2X21vZGVfcHJvYltpXSkpOwo+ICsK PiArCQlhbGxfcHJvYnMtPmtmX3V2X21vZGVfcHJvYl90YWlsW2ldWzBdID0gdjRsMl92cDlfa2Zf dXZfbW9kZV9wcm9iW2ldWzhdOwo+ICsJfQo+ICsKPiArCWFkYXB0aXZlID0gJmFsbF9wcm9icy0+ cHJvYnM7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWRhcHRpdmUtPmludGVy X21vZGUpOyArK2kpIHsKPiArCQltZW1jcHkoYWRhcHRpdmUtPmludGVyX21vZGVbaV0sIHByb2Jz LT5pbnRlcl9tb2RlW2ldLAo+ICsJCSAgICAgICBzaXplb2YocHJvYnMtPmludGVyX21vZGUpKTsK PiArCj4gKwkJYWRhcHRpdmUtPmludGVyX21vZGVbaV1bM10gPSAwOwo+ICsJfQo+ICsKPiArCW1l bWNweShhZGFwdGl2ZS0+aXNfaW50ZXIsIHByb2JzLT5pc19pbnRlciwgc2l6ZW9mKGFkYXB0aXZl LT5pc19pbnRlcikpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkYXB0aXZl LT51dl9tb2RlKTsgKytpKSB7Cj4gKwkJbWVtY3B5KGFkYXB0aXZlLT51dl9tb2RlW2ldLCBwcm9i cy0+dXZfbW9kZVtpXSwKPiArCQkgICAgICAgc2l6ZW9mKGFkYXB0aXZlLT51dl9tb2RlW2ldKSk7 Cj4gKwkJYWRhcHRpdmUtPnV2X21vZGVfdGFpbFtpXVswXSA9IHByb2JzLT51dl9tb2RlW2ldWzhd Owo+ICsJfQo+ICsKPiArCW1lbWNweShhZGFwdGl2ZS0+dHg4LCBwcm9icy0+dHg4LCBzaXplb2Yo YWRhcHRpdmUtPnR4OCkpOwo+ICsJbWVtY3B5KGFkYXB0aXZlLT50eDE2LCBwcm9icy0+dHgxNiwg c2l6ZW9mKGFkYXB0aXZlLT50eDE2KSk7Cj4gKwltZW1jcHkoYWRhcHRpdmUtPnR4MzIsIHByb2Jz LT50eDMyLCBzaXplb2YoYWRhcHRpdmUtPnR4MzIpKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShhZGFwdGl2ZS0+eV9tb2RlKTsgKytpKSB7Cj4gKwkJbWVtY3B5KGFkYXB0aXZl LT55X21vZGVbaV0sIHByb2JzLT55X21vZGVbaV0sCj4gKwkJICAgICAgIEFSUkFZX1NJWkUoYWRh cHRpdmUtPnlfbW9kZVtpXSkpOwo+ICsKPiArCQlhZGFwdGl2ZS0+eV9tb2RlX3RhaWxbaV1bMF0g PSBwcm9icy0+eV9tb2RlW2ldWzhdOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGFkYXB0aXZlLT5wYXJ0aXRpb25bMF0pOyArK2kpIHsKPiArCQltZW1jcHkoYWRhcHRp dmUtPnBhcnRpdGlvblswXVtpXSwgdjRsMl92cDlfa2ZfcGFydGl0aW9uX3Byb2JzW2ldLAo+ICsJ CSAgICAgICBzaXplb2YodjRsMl92cDlfa2ZfcGFydGl0aW9uX3Byb2JzW2ldKSk7Cj4gKwo+ICsJ CWFkYXB0aXZlLT5wYXJ0aXRpb25bMF1baV1bM10gPSAwOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGFkYXB0aXZlLT5wYXJ0aXRpb25bMV0pOyArK2kpIHsKPiArCQlt ZW1jcHkoYWRhcHRpdmUtPnBhcnRpdGlvblsxXVtpXSwgcHJvYnMtPnBhcnRpdGlvbltpXSwKPiAr CQkgICAgICAgc2l6ZW9mKHByb2JzLT5wYXJ0aXRpb25baV0pKTsKPiArCj4gKwkJYWRhcHRpdmUt PnBhcnRpdGlvblsxXVtpXVszXSA9IDA7Cj4gKwl9Cj4gKwo+ICsJbWVtY3B5KGFkYXB0aXZlLT5p bnRlcnBfZmlsdGVyLCBwcm9icy0+aW50ZXJwX2ZpbHRlciwKPiArCSAgICAgICBzaXplb2YoYWRh cHRpdmUtPmludGVycF9maWx0ZXIpKTsKPiArCj4gKwltZW1jcHkoYWRhcHRpdmUtPmNvbXBfbW9k ZSwgcHJvYnMtPmNvbXBfbW9kZSwgc2l6ZW9mKGFkYXB0aXZlLT5jb21wX21vZGUpKTsKPiArCj4g KwltZW1jcHkoYWRhcHRpdmUtPnNraXAsIHByb2JzLT5za2lwLCBzaXplb2YoYWRhcHRpdmUtPnNr aXApKTsKPiArCj4gKwltdiA9ICZhZGFwdGl2ZS0+bXY7Cj4gKwo+ICsJbWVtY3B5KG12LT5qb2lu dCwgcHJvYnMtPm12LmpvaW50LCBzaXplb2YobXYtPmpvaW50KSk7Cj4gKwltZW1jcHkobXYtPnNp Z24sIHByb2JzLT5tdi5zaWduLCBzaXplb2YobXYtPnNpZ24pKTsKPiArCW1lbWNweShtdi0+Y2xh c3MwX2JpdCwgcHJvYnMtPm12LmNsYXNzMF9iaXQsIHNpemVvZihtdi0+Y2xhc3MwX2JpdCkpOwo+ ICsJbWVtY3B5KG12LT5mciwgcHJvYnMtPm12LmZyLCBzaXplb2YobXYtPmZyKSk7Cj4gKwltZW1j cHkobXYtPmNsYXNzMF9ocCwgcHJvYnMtPm12LmNsYXNzMF9ocCwgc2l6ZW9mKG12LT5jbGFzczBf aHApKTsKPiArCW1lbWNweShtdi0+aHAsIHByb2JzLT5tdi5ocCwgc2l6ZW9mKG12LT5ocCkpOwo+ ICsJbWVtY3B5KG12LT5jbGFzc2VzLCBwcm9icy0+bXYuY2xhc3Nlcywgc2l6ZW9mKG12LT5jbGFz c2VzKSk7Cj4gKwltZW1jcHkobXYtPmNsYXNzMF9mciwgcHJvYnMtPm12LmNsYXNzMF9mciwgc2l6 ZW9mKG12LT5jbGFzczBfZnIpKTsKPiArCW1lbWNweShtdi0+Yml0cywgcHJvYnMtPm12LmJpdHMs IHNpemVvZihtdi0+Yml0cykpOwo+ICsKPiArCW1lbWNweShhZGFwdGl2ZS0+c2luZ2xlX3JlZiwg cHJvYnMtPnNpbmdsZV9yZWYsIHNpemVvZihhZGFwdGl2ZS0+c2luZ2xlX3JlZikpOwo+ICsKPiAr CW1lbWNweShhZGFwdGl2ZS0+Y29tcF9yZWYsIHByb2JzLT5jb21wX3JlZiwgc2l6ZW9mKGFkYXB0 aXZlLT5jb21wX3JlZikpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkYXB0 aXZlLT5jb2VmKTsgKytpKQo+ICsJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGFkYXB0aXZl LT5jb2VmWzBdKTsgKytqKQo+ICsJCQlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShhZGFwdGl2 ZS0+Y29lZlswXVswXSk7ICsraykKPiArCQkJCWZvciAobCA9IDA7IGwgPCBBUlJBWV9TSVpFKGFk YXB0aXZlLT5jb2VmWzBdWzBdWzBdKTsgKytsKQo+ICsJCQkJCUlOTkVSX0xPT1A7Cj4gKwo+ICsJ aGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIFZQOV9BRERSX1BST0JTLCBtaXNjLT5kbWEpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfY291bnRzKHN0cnVjdCBoYW50cm9fY3R4ICpj dHgpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9kZWMgPSAmY3R4 LT52cDlfZGVjOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICptaXNjID0gJnZwOV9kZWMtPm1p c2M7Cj4gKwlkbWFfYWRkcl90IGFkZHIgPSBtaXNjLT5kbWEgKyB2cDlfZGVjLT5jdHhfY291bnRl cnNfb2Zmc2V0Owo+ICsKPiArCWhhbnRyb193cml0ZV9hZGRyKGN0eC0+ZGV2LCBWUDlfQUREUl9D VFIsIGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfc2VnX21hcChzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4LAo+ICsJCQkgICBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFt ZSAqZGVjX3BhcmFtcywKPiArCQkJICAgYm9vbCBpbnRyYV9vbmx5LCBib29sIHVwZGF0ZV9tYXAp Cj4gK3sKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52 cDlfZGVjOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICpzZWdtZW50X21hcCA9ICZ2cDlfY3R4 LT5zZWdtZW50X21hcDsKPiArCWRtYV9hZGRyX3QgYWRkcjsKPiArCj4gKwlpZiAoaW50cmFfb25s eSB8fAo+ICsJICAgIChkZWNfcGFyYW1zLT5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfRVJS T1JfUkVTSUxJRU5UKSkgewo+ICsJCW1lbXNldChzZWdtZW50X21hcC0+Y3B1LCAwLCBzZWdtZW50 X21hcC0+c2l6ZSk7Cj4gKwkJbWVtc2V0KHZwOV9jdHgtPmZlYXR1cmVfZGF0YSwgMCwgc2l6ZW9m KHZwOV9jdHgtPmZlYXR1cmVfZGF0YSkpOwo+ICsJCW1lbXNldCh2cDlfY3R4LT5mZWF0dXJlX2Vu YWJsZWQsIDAsIHNpemVvZih2cDlfY3R4LT5mZWF0dXJlX2VuYWJsZWQpKTsKPiArCX0KPiArCj4g KwlhZGRyID0gc2VnbWVudF9tYXAtPmRtYSArIHZwOV9jdHgtPmFjdGl2ZV9zZWdtZW50ICogdnA5 X2N0eC0+c2VnbWVudF9tYXBfc2l6ZTsKPiArCWhhbnRyb193cml0ZV9hZGRyKGN0eC0+ZGV2LCBW UDlfQUREUl9TRUdNRU5UX1JFQUQsIGFkZHIpOwo+ICsKPiArCWFkZHIgPSBzZWdtZW50X21hcC0+ ZG1hICsgKDEgLSB2cDlfY3R4LT5hY3RpdmVfc2VnbWVudCkgKiB2cDlfY3R4LT5zZWdtZW50X21h cF9zaXplOwo+ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIFZQOV9BRERSX1NFR01FTlRf V1JJVEUsIGFkZHIpOwo+ICsKPiArCWlmICh1cGRhdGVfbWFwKQo+ICsJCXZwOV9jdHgtPmFjdGl2 ZV9zZWdtZW50ID0gMSAtIHZwOV9jdHgtPmFjdGl2ZV9zZWdtZW50Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZAo+ICtjb25maWdfc291cmNlKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0 cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+ICsJICAgICAgc3RydWN0IHZi Ml92NGwyX2J1ZmZlciAqdmIyX3NyYykKPiArewo+ICsJZG1hX2FkZHJfdCBzdHJlYW1fYmFzZSwg dG1wX2FkZHI7Cj4gKwl1bnNpZ25lZCBpbnQgaGVhZHJlc19zaXplOwo+ICsJdTMyIHNyY19sZW4s IHN0YXJ0X2JpdCwgc3JjX2J1Zl9sZW47Cj4gKwo+ICsJaGVhZHJlc19zaXplID0gZGVjX3BhcmFt cy0+dW5jb21wcmVzc2VkX2hlYWRlcl9zaXplCj4gKwkJICAgICArIGRlY19wYXJhbXMtPmNvbXBy ZXNzZWRfaGVhZGVyX3NpemU7Cj4gKwo+ICsJc3RyZWFtX2Jhc2UgPSB2YjJfZG1hX2NvbnRpZ19w bGFuZV9kbWFfYWRkcigmdmIyX3NyYy0+dmIyX2J1ZiwgMCk7Cj4gKwloYW50cm9fd3JpdGVfYWRk cihjdHgtPmRldiwgRzJfQUREUl9TVFIsIHN0cmVhbV9iYXNlKTsKPiArCj4gKwl0bXBfYWRkciA9 IHN0cmVhbV9iYXNlICsgaGVhZHJlc19zaXplOwo+ICsJc3RhcnRfYml0ID0gKHRtcF9hZGRyICYg MHhmKSAqIDg7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfc3RhcnRfYml0LCBz dGFydF9iaXQpOwo+ICsKPiArCXNyY19sZW4gPSB2YjJfZ2V0X3BsYW5lX3BheWxvYWQoJnZiMl9z cmMtPnZiMl9idWYsIDApOwo+ICsJc3JjX2xlbiArPSBzdGFydF9iaXQgLyA4IC0gaGVhZHJlc19z aXplOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3N0cmVhbV9sZW4sIHNyY19s ZW4pOwo+ICsKPiArCXRtcF9hZGRyICY9IH4weGY7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ ZGV2LCAmZzJfc3RybV9zdGFydF9vZmZzZXQsIHRtcF9hZGRyIC0gc3RyZWFtX2Jhc2UpOwo+ICsJ c3JjX2J1Zl9sZW4gPSB2YjJfcGxhbmVfc2l6ZSgmdmIyX3NyYy0+dmIyX2J1ZiwgMCk7Cj4gKwlo YW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfc3RybV9idWZmZXJfbGVuLCBzcmNfYnVmX2xl bik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK2NvbmZpZ19yZWdpc3RlcnMoc3RydWN0IGhh bnRyb19jdHggKmN0eCwgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJh bXMsCj4gKwkJIHN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZiMl9zcmMsIHN0cnVjdCB2YjJfdjRs Ml9idWZmZXIgKnZiMl9kc3QpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIg KmRzdCwgKmxhc3QsICptdl9yZWY7Cj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2 cDlfY3R4ID0gJmN0eC0+dnA5X2RlYzsKPiArCWNvbnN0IHN0cnVjdCB2NGwyX3ZwOV9zZWdtZW50 YXRpb24gKnNlZzsKPiArCWJvb2wgaW50cmFfb25seSwgcmVzb2x1dGlvbl9jaGFuZ2U7Cj4gKwo+ ICsJLyogdnA5IHN0dWZmICovCj4gKwlkc3QgPSB2YjJfdG9faGFudHJvX2RlY29kZWRfYnVmKCZ2 YjJfZHN0LT52YjJfYnVmKTsKPiArCj4gKwlpZiAodnA5X2N0eC0+bGFzdC52YWxpZCkKPiArCQls YXN0ID0gZ2V0X3JlZl9idWYoY3R4LCAmZHN0LT5iYXNlLnZiLCB2cDlfY3R4LT5sYXN0LnRpbWVz dGFtcCk7Cj4gKwllbHNlCj4gKwkJbGFzdCA9IGRzdDsKPiArCj4gKwl1cGRhdGVfZGVjX2J1Zl9p bmZvKGRzdCwgZGVjX3BhcmFtcyk7Cj4gKwl1cGRhdGVfY3R4X2N1cl9pbmZvKHZwOV9jdHgsIGRz dCwgZGVjX3BhcmFtcyk7Cj4gKwlzZWcgPSAmZGVjX3BhcmFtcy0+c2VnOwo+ICsKPiArCWludHJh X29ubHkgPSAhIShkZWNfcGFyYW1zLT5mbGFncyAmCj4gKwkJCShWNEwyX1ZQOV9GUkFNRV9GTEFH X0tFWV9GUkFNRSB8Cj4gKwkJCVY0TDJfVlA5X0ZSQU1FX0ZMQUdfSU5UUkFfT05MWSkpOwo+ICsK PiArCWlmICghaW50cmFfb25seSAmJgo+ICsJICAgICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwy X1ZQOV9GUkFNRV9GTEFHX0VSUk9SX1JFU0lMSUVOVCkgJiYKPiArCSAgICB2cDlfY3R4LT5sYXN0 LnZhbGlkKQo+ICsJCW12X3JlZiA9IGxhc3Q7Cj4gKwllbHNlCj4gKwkJbXZfcmVmID0gZHN0Owo+ ICsKPiArCXJlc29sdXRpb25fY2hhbmdlID0gZHN0LT52cDkud2lkdGggIT0gbGFzdC0+dnA5Lndp ZHRoIHx8Cj4gKwkJCSAgICBkc3QtPnZwOS5oZWlnaHQgIT0gbGFzdC0+dnA5LmhlaWdodDsKPiAr Cj4gKwkvKiBjb25maWd1cmUgYmFzaWMgcmVnaXN0ZXJzICovCj4gKwloYW50cm9fcmVnX3dyaXRl KGN0eC0+ZGV2LCAmZzJfbW9kZSwgVlA5X0RFQ19NT0RFKTsKPiArCWhhbnRyb19yZWdfd3JpdGUo Y3R4LT5kZXYsICZnMl9zdHJtX3N3YXAsIDB4Zik7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ ZGV2LCAmZzJfZGlybXZfc3dhcCwgMHhmKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYs ICZnMl9jb21wcmVzc19zd2FwLCAweGYpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwg JmcyX2J1c3dpZHRoLCBCVVNfV0lEVEhfMTI4KTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5k ZXYsICZnMl9tYXhfYnVyc3QsIDE2KTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZn Ml9hcGZfdGhyZXNob2xkLCA4KTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9y ZWZfY29tcHJlc3NfYnlwYXNzLCAxKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZn Ml9jbGtfZ2F0ZV9lLCAxKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9tYXhf Y2Jfc2l6ZSwgNik7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfbWluX2NiX3Np emUsIDMpOwo+ICsKPiArCWNvbmZpZ19vdXRwdXQoY3R4LCBkc3QsIGRlY19wYXJhbXMpOwo+ICsK PiArCWlmICghaW50cmFfb25seSkKPiArCQljb25maWdfcmVmX3JlZ2lzdGVycyhjdHgsIGRlY19w YXJhbXMsIGRzdCwgbXZfcmVmKTsKPiArCj4gKwljb25maWdfdGlsZXMoY3R4LCBkZWNfcGFyYW1z LCBkc3QpOwo+ICsJY29uZmlnX3NlZ21lbnQoY3R4LCBkZWNfcGFyYW1zKTsKPiArCWNvbmZpZ19s b29wX2ZpbHRlcihjdHgsIGRlY19wYXJhbXMpOwo+ICsJY29uZmlnX3BpY3R1cmVfZGltZW5zaW9u cyhjdHgsIGRzdCk7Cj4gKwljb25maWdfYml0X2RlcHRoKGN0eCwgZGVjX3BhcmFtcyk7Cj4gKwlj b25maWdfcXVhbnQoY3R4LCBkZWNfcGFyYW1zKTsKPiArCWNvbmZpZ19vdGhlcnMoY3R4LCBkZWNf cGFyYW1zLCBpbnRyYV9vbmx5LCByZXNvbHV0aW9uX2NoYW5nZSk7Cj4gKwljb25maWdfY29tcG91 bmRfcmVmZXJlbmNlKGN0eCwgZGVjX3BhcmFtcyk7Cj4gKwljb25maWdfcHJvYnMoY3R4LCBkZWNf cGFyYW1zKTsKPiArCWNvbmZpZ19jb3VudHMoY3R4KTsKPiArCWNvbmZpZ19zZWdfbWFwKGN0eCwg ZGVjX3BhcmFtcywgaW50cmFfb25seSwKPiArCQkgICAgICAgc2VnLT5mbGFncyAmIFY0TDJfVlA5 X1NFR01FTlRBVElPTl9GTEFHX1VQREFURV9NQVApOwo+ICsJY29uZmlnX3NvdXJjZShjdHgsIGRl Y19wYXJhbXMsIHZiMl9zcmMpOwo+ICt9Cj4gKwo+ICtpbnQgaGFudHJvX2cyX3ZwOV9kZWNfcnVu KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxf dnA5X2ZyYW1lICpkZWNvZGVfcGFyYW1zOwo+ICsJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqc3Jj Owo+ICsJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqZHN0Owo+ICsJaW50IHJldDsKPiArCj4gKwlo YW50cm9fZzJfY2hlY2tfaWRsZShjdHgtPmRldik7Cj4gKwo+ICsJcmV0ID0gc3RhcnRfcHJlcGFy ZV9ydW4oY3R4LCAmZGVjb2RlX3BhcmFtcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJaGFudHJvX2Vu ZF9wcmVwYXJlX3J1bihjdHgpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJc3JjID0g aGFudHJvX2dldF9zcmNfYnVmKGN0eCk7Cj4gKwlkc3QgPSBoYW50cm9fZ2V0X2RzdF9idWYoY3R4 KTsKPiArCj4gKwljb25maWdfcmVnaXN0ZXJzKGN0eCwgZGVjb2RlX3BhcmFtcywgc3JjLCBkc3Qp Owo+ICsKPiArCWhhbnRyb19lbmRfcHJlcGFyZV9ydW4oY3R4KTsKPiArCj4gKwl2ZHB1X3dyaXRl KGN0eC0+ZGV2LCBHMl9SRUdfSU5URVJSVVBUX0RFQ19FLCBHMl9SRUdfSU5URVJSVVBUKTsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArI2RlZmluZSBjb3B5X3R4X2FuZF9za2lwKHAxLCBw MikJCQkJXAo+ICtkbyB7CQkJCQkJCQlcCj4gKwltZW1jcHkoKHAxKS0+dHg4LCAocDIpLT50eDgs IHNpemVvZigocDEpLT50eDgpKTsJXAo+ICsJbWVtY3B5KChwMSktPnR4MTYsIChwMiktPnR4MTYs IHNpemVvZigocDEpLT50eDE2KSk7CVwKPiArCW1lbWNweSgocDEpLT50eDMyLCAocDIpLT50eDMy LCBzaXplb2YoKHAxKS0+dHgzMikpOwlcCj4gKwltZW1jcHkoKHAxKS0+c2tpcCwgKHAyKS0+c2tp cCwgc2l6ZW9mKChwMSktPnNraXApKTsJXAo+ICt9IHdoaWxlICgwKQo+ICsKPiArdm9pZCBoYW50 cm9fZzJfdnA5X2RlY19kb25lKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCXN0cnVj dCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJdW5z aWduZWQgaW50IGZjdHhfaWR4Owo+ICsKPiArCWlmICghKHZwOV9jdHgtPmN1ci5mbGFncyAmIFY0 TDJfVlA5X0ZSQU1FX0ZMQUdfUkVGUkVTSF9GUkFNRV9DVFgpKQo+ICsJCWdvdG8gb3V0X3VwZGF0 ZV9sYXN0Owo+ICsKPiArCWZjdHhfaWR4ID0gdnA5X2N0eC0+Y3VyLmZyYW1lX2NvbnRleHRfaWR4 Owo+ICsKPiArCWlmICghKHZwOV9jdHgtPmN1ci5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdf UEFSQUxMRUxfREVDX01PREUpKSB7Cj4gKwkJLyogZXJyb3JfcmVzaWxpZW50X21vZGUgPT0gMCAm JiBmcmFtZV9wYXJhbGxlbF9kZWNvZGluZ19tb2RlID09IDAgKi8KPiArCQlzdHJ1Y3QgdjRsMl92 cDlfZnJhbWVfY29udGV4dCAqcHJvYnMgPSAmdnA5X2N0eC0+cHJvYmFiaWxpdHlfdGFibGVzOwo+ ICsJCWJvb2wgZnJhbWVfaXNfaW50cmEgPSB2cDlfY3R4LT5jdXIuZmxhZ3MgJgo+ICsJCSAgICAo VjRMMl9WUDlfRlJBTUVfRkxBR19LRVlfRlJBTUUgfCBWNEwyX1ZQOV9GUkFNRV9GTEFHX0lOVFJB X09OTFkpOwo+ICsJCXN0cnVjdCB0eF9hbmRfc2tpcCB7Cj4gKwkJCXU4IHR4OFsyXVsxXTsKPiAr CQkJdTggdHgxNlsyXVsyXTsKPiArCQkJdTggdHgzMlsyXVszXTsKPiArCQkJdTggc2tpcFszXTsK PiArCQl9IF90eF9za2lwLCAqdHhfc2tpcCA9ICZfdHhfc2tpcDsKPiArCQlzdHJ1Y3QgdjRsMl92 cDlfZnJhbWVfc3ltYm9sX2NvdW50cyAqY291bnRzOwo+ICsJCXN0cnVjdCBzeW1ib2xfY291bnRz ICpoYW50cm9fY250czsKPiArCQl1MzIgdHgxNnBbMl1bNF07Cj4gKwkJaW50IGk7Cj4gKwo+ICsJ CS8qIGJ1ZmZlciB0aGUgZm9yd2FyZC11cGRhdGVkIFRYIGFuZCBza2lwIHByb2JzICovCj4gKwkJ aWYgKGZyYW1lX2lzX2ludHJhKQo+ICsJCQljb3B5X3R4X2FuZF9za2lwKHR4X3NraXAsIHByb2Jz KTsKPiArCj4gKwkJLyogNi4xLjIgcmVmcmVzaF9wcm9icygpOiBsb2FkX3Byb2JzKCkgYW5kIGxv YWRfcHJvYnMyKCkgKi8KPiArCQkqcHJvYnMgPSB2cDlfY3R4LT5mcmFtZV9jb250ZXh0W2ZjdHhf aWR4XTsKPiArCj4gKwkJLyogaWYgRnJhbWVJc0ludHJhIHRoZW4gdW5kbyB0aGUgZWZmZWN0IG9m IGxvYWRfcHJvYnMyKCkgKi8KPiArCQlpZiAoZnJhbWVfaXNfaW50cmEpCj4gKwkJCWNvcHlfdHhf YW5kX3NraXAocHJvYnMsIHR4X3NraXApOwo+ICsKPiArCQljb3VudHMgPSAmdnA5X2N0eC0+Y250 czsKPiArCQloYW50cm9fY250cyA9IHZwOV9jdHgtPm1pc2MuY3B1ICsgdnA5X2N0eC0+Y3R4X2Nv dW50ZXJzX29mZnNldDsKPiArCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0eDE2cCk7ICsr aSkgewo+ICsJCQltZW1jcHkodHgxNnBbaV0sCj4gKwkJCSAgICAgICBoYW50cm9fY250cy0+dHgx NngxNl9jb3VudFtpXSwKPiArCQkJICAgICAgIHNpemVvZihoYW50cm9fY250cy0+dHgxNngxNl9j b3VudFswXSkpOwo+ICsJCQl0eDE2cFtpXVszXSA9IDA7Cj4gKwkJfQo+ICsJCWNvdW50cy0+dHgx NnAgPSAmdHgxNnA7Cj4gKwo+ICsJCXY0bDJfdnA5X2FkYXB0X2NvZWZfcHJvYnMocHJvYnMsIGNv dW50cywKPiArCQkJCQkgICF2cDlfY3R4LT5sYXN0LnZhbGlkIHx8Cj4gKwkJCQkJICB2cDlfY3R4 LT5sYXN0LmZsYWdzICYgVjRMMl9WUDlfRlJBTUVfRkxBR19LRVlfRlJBTUUsCj4gKwkJCQkJICBm cmFtZV9pc19pbnRyYSk7Cj4gKwo+ICsJCWlmICghZnJhbWVfaXNfaW50cmEpIHsKPiArCQkJLyog bG9hZF9wcm9iczIoKSBhbHJlYWR5IGRvbmUgKi8KPiArCQkJdTMyIG12X21vZGVbN11bNF07Cj4g Kwo+ICsJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdl9tb2RlKTsgKytpKSB7Cj4gKwkJ CQltdl9tb2RlW2ldWzBdID0gaGFudHJvX2NudHMtPmludGVyX21vZGVfY291bnRzW2ldWzFdWzBd Owo+ICsJCQkJbXZfbW9kZVtpXVsxXSA9IGhhbnRyb19jbnRzLT5pbnRlcl9tb2RlX2NvdW50c1tp XVsyXVswXTsKPiArCQkJCW12X21vZGVbaV1bMl0gPSBoYW50cm9fY250cy0+aW50ZXJfbW9kZV9j b3VudHNbaV1bMF1bMF07Cj4gKwkJCQltdl9tb2RlW2ldWzNdID0gaGFudHJvX2NudHMtPmludGVy X21vZGVfY291bnRzW2ldWzJdWzFdOwo+ICsJCQl9Cj4gKwkJCWNvdW50cy0+bXZfbW9kZSA9ICZt dl9tb2RlOwo+ICsJCQl2NGwyX3ZwOV9hZGFwdF9ub25jb2VmX3Byb2JzKCZ2cDlfY3R4LT5wcm9i YWJpbGl0eV90YWJsZXMsIGNvdW50cywKPiArCQkJCQkJICAgICB2cDlfY3R4LT5jdXIucmVmZXJl bmNlX21vZGUsCj4gKwkJCQkJCSAgICAgdnA5X2N0eC0+Y3VyLmludGVycG9sYXRpb25fZmlsdGVy LAo+ICsJCQkJCQkgICAgIHZwOV9jdHgtPmN1ci50eF9tb2RlLCB2cDlfY3R4LT5jdXIuZmxhZ3Mp Owo+ICsJCX0KPiArCX0KPiArCj4gKwl2cDlfY3R4LT5mcmFtZV9jb250ZXh0W2ZjdHhfaWR4XSA9 IHZwOV9jdHgtPnByb2JhYmlsaXR5X3RhYmxlczsKPiArCj4gK291dF91cGRhdGVfbGFzdDoKPiAr CXZwOV9jdHgtPmxhc3QgPSB2cDlfY3R4LT5jdXI7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9faHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRp YS9oYW50cm8vaGFudHJvX2h3LmgKPiBpbmRleCA0MmIzZjM5NjFmNzUuLjI5NjFkMzk5ZmQ2MCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oCj4g KysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9faHcuaAo+IEBAIC0xMiw2 ICsxMiw3IEBACj4gICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiAgI2luY2x1ZGUgPGxp bnV4L3Y0bDItY29udHJvbHMuaD4KPiAgI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KPiAr I2luY2x1ZGUgPG1lZGlhL3Y0bDItdnA5Lmg+Cj4gICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjIt Y29yZS5oPgo+ICAKPiAgI2RlZmluZSBERUNfODE5MF9BTElHTl9NQVNLCTB4MDdVCj4gQEAgLTE2 MSw2ICsxNjIsNTAgQEAgc3RydWN0IGhhbnRyb192cDhfZGVjX2h3X2N0eCB7Cj4gIAlzdHJ1Y3Qg aGFudHJvX2F1eF9idWYgcHJvYl90Ymw7Cj4gIH07Cj4gIAo+ICtzdHJ1Y3QgaGFudHJvX3ZwOV9m cmFtZV9pbmZvIHsKPiArCXUzMiB2YWxpZCA6IDE7Cj4gKwl1MzIgZnJhbWVfY29udGV4dF9pZHgg OiAyOwo+ICsJdTMyIHJlZmVyZW5jZV9tb2RlIDogMjsKPiArCXUzMiB0eF9tb2RlIDogMzsKPiAr CXUzMiBpbnRlcnBvbGF0aW9uX2ZpbHRlciA6IDM7Cj4gKwl1MzIgZmxhZ3M7Cj4gKwl1NjQgdGlt ZXN0YW1wOwo+ICt9Owo+ICsKPiArI2RlZmluZSBNQVhfU0JfQ09MUwk2NAo+ICsjZGVmaW5lIE1B WF9TQl9ST1dTCTM0Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0 eAo+ICsgKgo+ICsgKi8KPiArc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCB7Cj4gKwlzdHJ1 Y3QgaGFudHJvX2F1eF9idWYgdGlsZV9lZGdlOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmIHNl Z21lbnRfbWFwOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmIG1pc2M7Cj4gKwlzdHJ1Y3QgdjRs Ml92cDlfZnJhbWVfc3ltYm9sX2NvdW50cyBjbnRzOwo+ICsJc3RydWN0IHY0bDJfdnA5X2ZyYW1l X2NvbnRleHQgcHJvYmFiaWxpdHlfdGFibGVzOwo+ICsJc3RydWN0IHY0bDJfdnA5X2ZyYW1lX2Nv bnRleHQgZnJhbWVfY29udGV4dFs0XTsKPiArCXN0cnVjdCBoYW50cm9fdnA5X2ZyYW1lX2luZm8g Y3VyOwo+ICsJc3RydWN0IGhhbnRyb192cDlfZnJhbWVfaW5mbyBsYXN0Owo+ICsKPiArCXVuc2ln bmVkIGludCBic2RfY3RybF9vZmZzZXQ7Cj4gKwl1bnNpZ25lZCBpbnQgc2VnbWVudF9tYXBfc2l6 ZTsKPiArCXVuc2lnbmVkIGludCBjdHhfY291bnRlcnNfb2Zmc2V0Owo+ICsJdW5zaWduZWQgaW50 IHRpbGVfaW5mb19vZmZzZXQ7Cj4gKwo+ICsJdW5zaWduZWQgc2hvcnQgdGlsZV9yX2luZm9bTUFY X1NCX1JPV1NdOwo+ICsJdW5zaWduZWQgc2hvcnQgdGlsZV9jX2luZm9bTUFYX1NCX0NPTFNdOwo+ ICsJdW5zaWduZWQgaW50IGxhc3RfdGlsZV9yOwo+ICsJdW5zaWduZWQgaW50IGxhc3RfdGlsZV9j Owo+ICsJdW5zaWduZWQgaW50IGxhc3Rfc2JzX3I7Cj4gKwl1bnNpZ25lZCBpbnQgbGFzdF9zYnNf YzsKPiArCj4gKwl1bnNpZ25lZCBpbnQgYWN0aXZlX3NlZ21lbnQ7Cj4gKwl1OCBmZWF0dXJlX2Vu YWJsZWRbOF07Cj4gKwlzMTYgZmVhdHVyZV9kYXRhWzhdWzRdOwo+ICt9Owo+ICsKPiAgLyoqCj4g ICAqIHN0cnVjdCBoYW50cm9fcG9zdHByb2NfY3R4Cj4gICAqCj4gQEAgLTI2Nyw2ICszMTIsMjQg QEAgdm9pZCBoYW50cm9faGV2Y19yZWZfcmVtb3ZlX3VudXNlZChzdHJ1Y3QgaGFudHJvX2N0eCAq Y3R4KTsKPiAgc2l6ZV90IGhhbnRyb19oZXZjX2Nocm9tYV9vZmZzZXQoY29uc3Qgc3RydWN0IHY0 bDJfY3RybF9oZXZjX3NwcyAqc3BzKTsKPiAgc2l6ZV90IGhhbnRyb19oZXZjX21vdGlvbl92ZWN0 b3JzX29mZnNldChjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzICpzcHMpOwo+ICAKPiAr c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoYW50cm9fdnA5X251bV9zYnModW5zaWduZWQg c2hvcnQgZGltZW5zaW9uKQo+ICt7Cj4gKwlyZXR1cm4gKGRpbWVuc2lvbiArIDYzKSAvIDY0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHNpemVfdAo+ICtoYW50cm9fdnA5X212X3NpemUodW5z aWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQo+ICt7Cj4gKwlpbnQgbnVtX2N0 YnM7Cj4gKwo+ICsJLyoKPiArCSAqIFRoZXJlIGNhbiBiZSB1cCB0byAoQ1RCcyB4IDY0KSBudW1i ZXIgb2YgYmxvY2tzLAo+ICsJICogYW5kIHRoZSBtb3Rpb24gdmVjdG9yIGZvciBlYWNoIGJsb2Nr IG5lZWRzIDE2IGJ5dGVzLgo+ICsJICovCj4gKwludW1fY3RicyA9IGhhbnRyb192cDlfbnVtX3Ni cyh3aWR0aCkgKiBoYW50cm9fdnA5X251bV9zYnMoaGVpZ2h0KTsKPiArCXJldHVybiAobnVtX2N0 YnMgKiA2NCkgKiAxNjsKPiArfQo+ICsKPiAgc3RhdGljIGlubGluZSBzaXplX3QKPiAgaGFudHJv X2gyNjRfbXZfc2l6ZSh1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQpCj4g IHsKPiBAQCAtMzA4LDYgKzM3MSwxMCBAQCB2b2lkIGhhbnRyb192cDhfZGVjX2V4aXQoc3RydWN0 IGhhbnRyb19jdHggKmN0eCk7Cj4gIHZvaWQgaGFudHJvX3ZwOF9wcm9iX3VwZGF0ZShzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4LAo+ICAJCQkgICAgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDhfZnJh bWUgKmhkcik7Cj4gIAo+ICtpbnQgaGFudHJvX2cyX3ZwOV9kZWNfcnVuKHN0cnVjdCBoYW50cm9f Y3R4ICpjdHgpOwo+ICt2b2lkIGhhbnRyb19nMl92cDlfZGVjX2RvbmUoc3RydWN0IGhhbnRyb19j dHggKmN0eCk7Cj4gK2ludCBoYW50cm9fdnA5X2RlY19pbml0KHN0cnVjdCBoYW50cm9fY3R4ICpj dHgpOwo+ICt2b2lkIGhhbnRyb192cDlfZGVjX2V4aXQoc3RydWN0IGhhbnRyb19jdHggKmN0eCk7 Cj4gIHZvaWQgaGFudHJvX2cyX2NoZWNrX2lkbGUoc3RydWN0IGhhbnRyb19kZXYgKnZwdSk7Cj4g IAo+ICAjZW5kaWYgLyogSEFOVFJPX0hXX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3Y0bDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9o YW50cm8vaGFudHJvX3Y0bDIuYwo+IGluZGV4IGQxZjA2MGM1NWZlZC4uZTRiMDY0NWJhNmZjIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3Y0bDIuYwo+ ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3Y0bDIuYwo+IEBAIC0y OTksNiArMjk5LDExIEBAIHN0YXRpYyBpbnQgaGFudHJvX3RyeV9mbXQoY29uc3Qgc3RydWN0IGhh bnRyb19jdHggKmN0eCwKPiAgCQkJcGl4X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlICs9Cj4g IAkJCQloYW50cm9faDI2NF9tdl9zaXplKHBpeF9tcC0+d2lkdGgsCj4gIAkJCQkJCSAgICBwaXhf bXAtPmhlaWdodCk7Cj4gKwkJZWxzZSBpZiAoY3R4LT52cHVfc3JjX2ZtdC0+Zm91cmNjID09IFY0 TDJfUElYX0ZNVF9WUDlfRlJBTUUgJiYKPiArCQkJICFoYW50cm9fbmVlZHNfcG9zdHByb2MoY3R4 LCBmbXQpKQo+ICsJCQlwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgKz0KPiArCQkJCWhh bnRyb192cDlfbXZfc2l6ZShwaXhfbXAtPndpZHRoLAo+ICsJCQkJCQkgICBwaXhfbXAtPmhlaWdo dCk7Cj4gIAl9IGVsc2UgaWYgKCFwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UpIHsKPiAg CQkvKgo+ICAJCSAqIEZvciBjb2RlZCBmb3JtYXRzIHRoZSBhcHBsaWNhdGlvbiBjYW4gc3BlY2lm eQo+IEBAIC00MDcsNiArNDEyLDcgQEAgaGFudHJvX3VwZGF0ZV9yZXF1aXJlc19yZXF1ZXN0KHN0 cnVjdCBoYW50cm9fY3R4ICpjdHgsIHUzMiBmb3VyY2MpCj4gIAljYXNlIFY0TDJfUElYX0ZNVF9W UDhfRlJBTUU6Cj4gIAljYXNlIFY0TDJfUElYX0ZNVF9IMjY0X1NMSUNFOgo+ICAJY2FzZSBWNEwy X1BJWF9GTVRfSEVWQ19TTElDRToKPiArCWNhc2UgVjRMMl9QSVhfRk1UX1ZQOV9GUkFNRToKPiAg CQljdHgtPmZoLm0ybV9jdHgtPm91dF9xX2N0eC5xLnJlcXVpcmVzX3JlcXVlc3RzID0gdHJ1ZTsK PiAgCQlicmVhazsKPiAgCWRlZmF1bHQ6Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9t ZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9o YW50cm9fdnA5LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4u NTY2Y2QzNzZjMDk3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRp YS9oYW50cm8vaGFudHJvX3ZwOS5jCj4gQEAgLTAsMCArMSwyNDAgQEAKPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogSGFudHJvIFZQOSBjb2RlYyBkcml2 ZXIKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDIxIENvbGxhYm9yYSBMdGQuCj4gKyAqLwo+ ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLW1l bTJtZW0uaD4KPiArCj4gKyNpbmNsdWRlICJoYW50cm8uaCIKPiArI2luY2x1ZGUgImhhbnRyb19o dy5oIgo+ICsjaW5jbHVkZSAiaGFudHJvX3ZwOS5oIgo+ICsKPiArI2RlZmluZSBQT1cyKHgpICgx IDw8ICh4KSkKPiArCj4gKyNkZWZpbmUgTUFYX0xPRzJfVElMRV9DT0xVTU5TIDYKPiArI2RlZmlu ZSBNQVhfTlVNX1RJTEVfQ09MUyBQT1cyKE1BWF9MT0cyX1RJTEVfQ09MVU1OUykKPiArI2RlZmlu ZSBNQVhfVElMRV9DT0xTIDIwCj4gKyNkZWZpbmUgTUFYX1RJTEVfUk9XUyAyMgo+ICsKPiArc3Rh dGljIHNpemVfdCBoYW50cm9fdnA5X3RpbGVfZmlsdGVyX3NpemUodW5zaWduZWQgaW50IGhlaWdo dCkKPiArewo+ICsJdTMyIGgsIGhlaWdodDMyLCBzaXplOwo+ICsKPiArCWggPSByb3VuZHVwKGhl aWdodCwgOCk7Cj4gKwo+ICsJaGVpZ2h0MzIgPSByb3VuZHVwKGgsIDY0KTsKPiArCXNpemUgPSAy NCAqIGhlaWdodDMyICogKE1BWF9OVU1fVElMRV9DT0xTIC0gMSk7IC8qIGx1bWE6IDgsIGNocm9t YTogOCArIDggKi8KPiArCj4gKwlyZXR1cm4gc2l6ZTsKPiArfQo+ICsKPiArc3RhdGljIHNpemVf dCBoYW50cm9fdnA5X2JzZF9jb250cm9sX3NpemUodW5zaWduZWQgaW50IGhlaWdodCkKPiArewo+ ICsJdTMyIGgsIGhlaWdodDMyOwo+ICsKPiArCWggPSByb3VuZHVwKGhlaWdodCwgOCk7Cj4gKwlo ZWlnaHQzMiA9IHJvdW5kdXAoaCwgNjQpOwo+ICsKPiArCXJldHVybiAxNiAqIChoZWlnaHQzMiAv IDQpICogKE1BWF9OVU1fVElMRV9DT0xTIC0gMSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzaXplX3Qg aGFudHJvX3ZwOV9zZWdtZW50X21hcF9zaXplKHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQg aW50IGhlaWdodCkKPiArewo+ICsJdTMyIHcsIGg7Cj4gKwlpbnQgbnVtX2N0YnM7Cj4gKwo+ICsJ dyA9IHJvdW5kdXAod2lkdGgsIDgpOwo+ICsJaCA9IHJvdW5kdXAoaGVpZ2h0LCA4KTsKPiArCW51 bV9jdGJzID0gKCh3ICsgNjMpIC8gNjQpICogKChoICsgNjMpIC8gNjQpOwo+ICsKPiArCXJldHVy biBudW1fY3RicyAqIDMyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHNpemVfdCBoYW50cm9f dnA5X3Byb2JfdGFiX3NpemUodm9pZCkKPiArewo+ICsJcmV0dXJuIHJvdW5kdXAoc2l6ZW9mKHN0 cnVjdCBoYW50cm9fZzJfYWxsX3Byb2JzKSwgMTYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5l IHNpemVfdCBoYW50cm9fdnA5X2NvdW50X3RhYl9zaXplKHZvaWQpCj4gK3sKPiArCXJldHVybiBy b3VuZHVwKHNpemVvZihzdHJ1Y3Qgc3ltYm9sX2NvdW50cyksIDE2KTsKPiArfQo+ICsKPiArc3Rh dGljIGlubGluZSBzaXplX3QgaGFudHJvX3ZwOV90aWxlX2luZm9fc2l6ZSh2b2lkKQo+ICt7Cj4g KwlyZXR1cm4gcm91bmR1cCgoTUFYX1RJTEVfQ09MUyAqIE1BWF9USUxFX1JPV1MgKiA0ICogc2l6 ZW9mKHUxNikgKyAxNSArIDE2KSAmIH4weGYsIDE2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg KmdldF9jb2VmZnNfYXJyKHN0cnVjdCBzeW1ib2xfY291bnRzICpjbnRzLCBpbnQgaSwgaW50IGos IGludCBrLCBpbnQgbCwgaW50IG0pCj4gK3sKPiArCWlmIChpID09IDApCj4gKwkJcmV0dXJuICZj bnRzLT5jb3VudF9jb2VmZnNbal1ba11bbF1bbV07Cj4gKwo+ICsJaWYgKGkgPT0gMSkKPiArCQly ZXR1cm4gJmNudHMtPmNvdW50X2NvZWZmczh4OFtqXVtrXVtsXVttXTsKPiArCj4gKwlpZiAoaSA9 PSAyKQo+ICsJCXJldHVybiAmY250cy0+Y291bnRfY29lZmZzMTZ4MTZbal1ba11bbF1bbV07Cj4g Kwo+ICsJaWYgKGkgPT0gMykKPiArCQlyZXR1cm4gJmNudHMtPmNvdW50X2NvZWZmczMyeDMyW2pd W2tdW2xdW21dOwo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAq Z2V0X2VvYnMxKHN0cnVjdCBzeW1ib2xfY291bnRzICpjbnRzLCBpbnQgaSwgaW50IGosIGludCBr LCBpbnQgbCwgaW50IG0pCj4gK3sKPiArCWlmIChpID09IDApCj4gKwkJcmV0dXJuICZjbnRzLT5j b3VudF9jb2VmZnNbal1ba11bbF1bbV1bM107Cj4gKwo+ICsJaWYgKGkgPT0gMSkKPiArCQlyZXR1 cm4gJmNudHMtPmNvdW50X2NvZWZmczh4OFtqXVtrXVtsXVttXVszXTsKPiArCj4gKwlpZiAoaSA9 PSAyKQo+ICsJCXJldHVybiAmY250cy0+Y291bnRfY29lZmZzMTZ4MTZbal1ba11bbF1bbV1bM107 Cj4gKwo+ICsJaWYgKGkgPT0gMykKPiArCQlyZXR1cm4gJmNudHMtPmNvdW50X2NvZWZmczMyeDMy W2pdW2tdW2xdW21dWzNdOwo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICsjZGVmaW5l IElOTkVSX0xPT1AgXAo+ICsJZG8gewkJCQkJCQkJCQlcCj4gKwkJZm9yIChtID0gMDsgbSA8IEFS UkFZX1NJWkUodnA5X2N0eC0+Y250cy5jb2VmZltpXVswXVswXVswXSk7ICsrbSkgewlcCj4gKwkJ CXZwOV9jdHgtPmNudHMuY29lZmZbaV1bal1ba11bbF1bbV0gPQkJCQlcCj4gKwkJCQlnZXRfY29l ZmZzX2FycihjbnRzLCBpLCBqLCBrLCBsLCBtKTsJCQlcCj4gKwkJCXZwOV9jdHgtPmNudHMuZW9i W2ldW2pdW2tdW2xdW21dWzBdID0JCQkJXAo+ICsJCQkJJmNudHMtPmNvdW50X2VvYnNbaV1bal1b a11bbF1bbV07CQkJXAo+ICsJCQl2cDlfY3R4LT5jbnRzLmVvYltpXVtqXVtrXVtsXVttXVsxXSA9 CQkJCVwKPiArCQkJCWdldF9lb2JzMShjbnRzLCBpLCBqLCBrLCBsLCBtKTsJCQkJXAo+ICsJCX0J CQkJCQkJCQlcCj4gKwl9IHdoaWxlICgwKQo+ICsKPiArc3RhdGljIHZvaWQgaW5pdF92NGwyX3Zw OV9jb3VudF90Ymwoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiArewo+ICsJc3RydWN0IGhhbnRy b192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7Cj4gKwlzdHJ1Y3Qgc3lt Ym9sX2NvdW50cyAqY250cyA9IHZwOV9jdHgtPm1pc2MuY3B1ICsgdnA5X2N0eC0+Y3R4X2NvdW50 ZXJzX29mZnNldDsKPiArCWludCBpLCBqLCBrLCBsLCBtOwo+ICsKPiArCXZwOV9jdHgtPmNudHMu cGFydGl0aW9uID0gJmNudHMtPnBhcnRpdGlvbl9jb3VudHM7Cj4gKwl2cDlfY3R4LT5jbnRzLnNr aXAgPSAmY250cy0+bWJza2lwX2NvdW50Owo+ICsJdnA5X2N0eC0+Y250cy5pbnRyYV9pbnRlciA9 ICZjbnRzLT5pbnRyYV9pbnRlcl9jb3VudDsKPiArCXZwOV9jdHgtPmNudHMudHgzMnAgPSAmY250 cy0+dHgzMngzMl9jb3VudDsKPiArCS8qCj4gKwkgKiBnMiBoYXJkd2FyZSB1c2VzIHR4MTZ4MTZf Y291bnRbMl1bM10sIHdoaWxlIHRoZSBhcGkKPiArCSAqIGV4cGVjdHMgdHgxNnBbMl1bNF0sIHNv IHRoaXMgbXVzdCBiZSBleHBsaWNpdGx5IGNvcGllZAo+ICsJICogaW50byB2cDlfY3R4LT5jbnRz LnR4MTZwIHdoZW4gcGFzc2luZyB0aGUgZGF0YSB0byB0aGUKPiArCSAqIHZwOSBsaWJyYXJ5IGZ1 bmN0aW9uCj4gKwkgKi8KPiArCXZwOV9jdHgtPmNudHMudHg4cCA9ICZjbnRzLT50eDh4OF9jb3Vu dDsKPiArCj4gKwl2cDlfY3R4LT5jbnRzLnlfbW9kZSA9ICZjbnRzLT5zYl95bW9kZV9jb3VudHM7 Cj4gKwl2cDlfY3R4LT5jbnRzLnV2X21vZGUgPSAmY250cy0+dXZfbW9kZV9jb3VudHM7Cj4gKwl2 cDlfY3R4LT5jbnRzLmNvbXAgPSAmY250cy0+Y29tcF9pbnRlcl9jb3VudDsKPiArCXZwOV9jdHgt PmNudHMuY29tcF9yZWYgPSAmY250cy0+Y29tcF9yZWZfY291bnQ7Cj4gKwl2cDlfY3R4LT5jbnRz LnNpbmdsZV9yZWYgPSAmY250cy0+c2luZ2xlX3JlZl9jb3VudDsKPiArCXZwOV9jdHgtPmNudHMu ZmlsdGVyID0gJmNudHMtPnN3aXRjaGFibGVfaW50ZXJwX2NvdW50czsKPiArCXZwOV9jdHgtPmNu dHMubXZfam9pbnQgPSAmY250cy0+bXZfY291bnRzLmpvaW50czsKPiArCXZwOV9jdHgtPmNudHMu c2lnbiA9ICZjbnRzLT5tdl9jb3VudHMuc2lnbjsKPiArCXZwOV9jdHgtPmNudHMuY2xhc3NlcyA9 ICZjbnRzLT5tdl9jb3VudHMuY2xhc3NlczsKPiArCXZwOV9jdHgtPmNudHMuY2xhc3MwID0gJmNu dHMtPm12X2NvdW50cy5jbGFzczA7Cj4gKwl2cDlfY3R4LT5jbnRzLmJpdHMgPSAmY250cy0+bXZf Y291bnRzLmJpdHM7Cj4gKwl2cDlfY3R4LT5jbnRzLmNsYXNzMF9mcCA9ICZjbnRzLT5tdl9jb3Vu dHMuY2xhc3MwX2ZwOwo+ICsJdnA5X2N0eC0+Y250cy5mcCA9ICZjbnRzLT5tdl9jb3VudHMuZnA7 Cj4gKwl2cDlfY3R4LT5jbnRzLmNsYXNzMF9ocCA9ICZjbnRzLT5tdl9jb3VudHMuY2xhc3MwX2hw Owo+ICsJdnA5X2N0eC0+Y250cy5ocCA9ICZjbnRzLT5tdl9jb3VudHMuaHA7Cj4gKwo+ICsJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnA5X2N0eC0+Y250cy5jb2VmZik7ICsraSkKPiArCQlm b3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRSh2cDlfY3R4LT5jbnRzLmNvZWZmW2ldKTsgKytqKQo+ ICsJCQlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRSh2cDlfY3R4LT5jbnRzLmNvZWZmW2ldWzBd KTsgKytrKQo+ICsJCQkJZm9yIChsID0gMDsgbCA8IEFSUkFZX1NJWkUodnA5X2N0eC0+Y250cy5j b2VmZltpXVswXVswXSk7ICsrbCkKPiArCQkJCQlJTk5FUl9MT09QOwo+ICt9Cj4gKwo+ICtpbnQg aGFudHJvX3ZwOV9kZWNfaW5pdChzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICt7Cj4gKwlzdHJ1 Y3QgaGFudHJvX2RldiAqdnB1ID0gY3R4LT5kZXY7Cj4gKwljb25zdCBzdHJ1Y3QgaGFudHJvX3Zh cmlhbnQgKnZhcmlhbnQgPSB2cHUtPnZhcmlhbnQ7Cj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNf aHdfY3R4ICp2cDlfZGVjID0gJmN0eC0+dnA5X2RlYzsKPiArCXN0cnVjdCBoYW50cm9fYXV4X2J1 ZiAqdGlsZV9lZGdlID0gJnZwOV9kZWMtPnRpbGVfZWRnZTsKPiArCXN0cnVjdCBoYW50cm9fYXV4 X2J1ZiAqc2VnbWVudF9tYXAgPSAmdnA5X2RlYy0+c2VnbWVudF9tYXA7Cj4gKwlzdHJ1Y3QgaGFu dHJvX2F1eF9idWYgKm1pc2MgPSAmdnA5X2RlYy0+bWlzYzsKPiArCXUzMiBpLCBtYXhfd2lkdGgs IG1heF9oZWlnaHQsIHNpemU7Cj4gKwo+ICsJaWYgKHZhcmlhbnQtPm51bV9kZWNfZm10cyA8IDEp Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHZhcmlhbnQtPm51 bV9kZWNfZm10czsgKytpKQo+ICsJCWlmICh2YXJpYW50LT5kZWNfZm10c1tpXS5mb3VyY2MgPT0g VjRMMl9QSVhfRk1UX1ZQOV9GUkFNRSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJaWYgKGkgPT0gdmFy aWFudC0+bnVtX2RlY19mbXRzKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCW1heF93aWR0 aCA9IHZwdS0+dmFyaWFudC0+ZGVjX2ZtdHNbaV0uZnJtc2l6ZS5tYXhfd2lkdGg7Cj4gKwltYXhf aGVpZ2h0ID0gdnB1LT52YXJpYW50LT5kZWNfZm10c1tpXS5mcm1zaXplLm1heF9oZWlnaHQ7Cj4g Kwo+ICsJc2l6ZSA9IGhhbnRyb192cDlfdGlsZV9maWx0ZXJfc2l6ZShtYXhfaGVpZ2h0KTsKPiAr CXZwOV9kZWMtPmJzZF9jdHJsX29mZnNldCA9IHNpemU7Cj4gKwlzaXplICs9IGhhbnRyb192cDlf YnNkX2NvbnRyb2xfc2l6ZShtYXhfaGVpZ2h0KTsKPiArCj4gKwl0aWxlX2VkZ2UtPmNwdSA9IGRt YV9hbGxvY19jb2hlcmVudCh2cHUtPmRldiwgc2l6ZSwgJnRpbGVfZWRnZS0+ZG1hLCBHRlBfS0VS TkVMKTsKPiArCWlmICghdGlsZV9lZGdlLT5jcHUpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ ICsJdGlsZV9lZGdlLT5zaXplID0gc2l6ZTsKPiArCW1lbXNldCh0aWxlX2VkZ2UtPmNwdSwgMCwg c2l6ZSk7Cj4gKwo+ICsJc2l6ZSA9IGhhbnRyb192cDlfc2VnbWVudF9tYXBfc2l6ZShtYXhfd2lk dGgsIG1heF9oZWlnaHQpOwo+ICsJdnA5X2RlYy0+c2VnbWVudF9tYXBfc2l6ZSA9IHNpemU7Cj4g KwlzaXplICo9IDI7IC8qIHdlIG5lZWQgdHdvIGFyZWFzIG9mIHRoaXMgc2l6ZSwgdXNlZCBhbHRl cm5hdGVseSAqLwo+ICsKPiArCXNlZ21lbnRfbWFwLT5jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQo dnB1LT5kZXYsIHNpemUsICZzZWdtZW50X21hcC0+ZG1hLCBHRlBfS0VSTkVMKTsKPiArCWlmICgh c2VnbWVudF9tYXAtPmNwdSkKPiArCQlnb3RvIGVycl9zZWdtZW50X21hcDsKPiArCj4gKwlzZWdt ZW50X21hcC0+c2l6ZSA9IHNpemU7Cj4gKwltZW1zZXQoc2VnbWVudF9tYXAtPmNwdSwgMCwgc2l6 ZSk7Cj4gKwo+ICsJc2l6ZSA9IGhhbnRyb192cDlfcHJvYl90YWJfc2l6ZSgpOwo+ICsJdnA5X2Rl Yy0+Y3R4X2NvdW50ZXJzX29mZnNldCA9IHNpemU7Cj4gKwlzaXplICs9IGhhbnRyb192cDlfY291 bnRfdGFiX3NpemUoKTsKPiArCXZwOV9kZWMtPnRpbGVfaW5mb19vZmZzZXQgPSBzaXplOwo+ICsJ c2l6ZSArPSBoYW50cm9fdnA5X3RpbGVfaW5mb19zaXplKCk7Cj4gKwo+ICsJbWlzYy0+Y3B1ID0g ZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LCBzaXplLCAmbWlzYy0+ZG1hLCBHRlBfS0VSTkVM KTsKPiArCWlmICghbWlzYy0+Y3B1KQo+ICsJCWdvdG8gZXJyX21pc2M7Cj4gKwo+ICsJbWlzYy0+ c2l6ZSA9IHNpemU7Cj4gKwltZW1zZXQobWlzYy0+Y3B1LCAwLCBzaXplKTsKPiArCj4gKwlpbml0 X3Y0bDJfdnA5X2NvdW50X3RibChjdHgpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX21p c2M6Cj4gKwlkbWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgc2VnbWVudF9tYXAtPnNpemUsIHNl Z21lbnRfbWFwLT5jcHUsIHNlZ21lbnRfbWFwLT5kbWEpOwo+ICsKPiArZXJyX3NlZ21lbnRfbWFw Ogo+ICsJZG1hX2ZyZWVfY29oZXJlbnQodnB1LT5kZXYsIHRpbGVfZWRnZS0+c2l6ZSwgdGlsZV9l ZGdlLT5jcHUsIHRpbGVfZWRnZS0+ZG1hKTsKPiArCj4gKwlyZXR1cm4gLUVOT01FTTsKPiArfQo+ ICsKPiArdm9pZCBoYW50cm9fdnA5X2RlY19leGl0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4g K3sKPiArCXN0cnVjdCBoYW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPiArCXN0cnVjdCBoYW50 cm9fdnA5X2RlY19od19jdHggKnZwOV9kZWMgPSAmY3R4LT52cDlfZGVjOwo+ICsJc3RydWN0IGhh bnRyb19hdXhfYnVmICp0aWxlX2VkZ2UgPSAmdnA5X2RlYy0+dGlsZV9lZGdlOwo+ICsJc3RydWN0 IGhhbnRyb19hdXhfYnVmICpzZWdtZW50X21hcCA9ICZ2cDlfZGVjLT5zZWdtZW50X21hcDsKPiAr CXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAqbWlzYyA9ICZ2cDlfZGVjLT5taXNjOwo+ICsKPiArCWRt YV9mcmVlX2NvaGVyZW50KHZwdS0+ZGV2LCBtaXNjLT5zaXplLCBtaXNjLT5jcHUsIG1pc2MtPmRt YSk7Cj4gKwlkbWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgc2VnbWVudF9tYXAtPnNpemUsIHNl Z21lbnRfbWFwLT5jcHUsIHNlZ21lbnRfbWFwLT5kbWEpOwo+ICsJZG1hX2ZyZWVfY29oZXJlbnQo dnB1LT5kZXYsIHRpbGVfZWRnZS0+c2l6ZSwgdGlsZV9lZGdlLT5jcHUsIHRpbGVfZWRnZS0+ZG1h KTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRy b192cDkuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5oCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmM3ZjRiZDNmZjhkZAo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192 cDkuaAo+IEBAIC0wLDAgKzEsMTAzIEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wICovCj4gKy8qCj4gKyAqIEhhbnRybyBWUDkgY29kZWMgZHJpdmVyCj4gKyAqCj4gKyAq IENvcHlyaWdodCAoQykgMjAyMSBDb2xsYWJvcmEgTHRkLgo+ICsgKi8KPiArCj4gK3N0cnVjdCBo YW50cm9fZzJfbXZfcHJvYnMgewo+ICsJdTggam9pbnRbM107Cj4gKwl1OCBzaWduWzJdOwo+ICsJ dTggY2xhc3MwX2JpdFsyXVsxXTsKPiArCXU4IGZyWzJdWzNdOwo+ICsJdTggY2xhc3MwX2hwWzJd Owo+ICsJdTggaHBbMl07Cj4gKwl1OCBjbGFzc2VzWzJdWzEwXTsKPiArCXU4IGNsYXNzMF9mclsy XVsyXVszXTsKPiArCXU4IGJpdHNbMl1bMTBdOwo+ICt9Owo+ICsKPiArc3RydWN0IGhhbnRyb19n Ml9wcm9icyB7Cj4gKwl1OCBpbnRlcl9tb2RlWzddWzRdOwo+ICsJdTggaXNfaW50ZXJbNF07Cj4g Kwl1OCB1dl9tb2RlWzEwXVs4XTsKPiArCXU4IHR4OFsyXVsxXTsKPiArCXU4IHR4MTZbMl1bMl07 Cj4gKwl1OCB0eDMyWzJdWzNdOwo+ICsJdTggeV9tb2RlX3RhaWxbNF1bMV07Cj4gKwl1OCB5X21v ZGVbNF1bOF07Cj4gKwl1OCBwYXJ0aXRpb25bMl1bMTZdWzRdOyAvKiBba2V5ZnJhbWVdW11bXSwg W2ludGVyXVtdW10gKi8KPiArCXU4IHV2X21vZGVfdGFpbFsxMF1bMV07Cj4gKwl1OCBpbnRlcnBf ZmlsdGVyWzRdWzJdOwo+ICsJdTggY29tcF9tb2RlWzVdOwo+ICsJdTggc2tpcFszXTsKPiArCj4g Kwl1OCBwYWQxWzFdOwo+ICsKPiArCXN0cnVjdCBoYW50cm9fZzJfbXZfcHJvYnMgbXY7Cj4gKwo+ ICsJdTggc2luZ2xlX3JlZls1XVsyXTsKPiArCXU4IGNvbXBfcmVmWzVdOwo+ICsKPiArCXU4IHBh ZDJbMTddOwo+ICsKPiArCXU4IGNvZWZbNF1bMl1bMl1bNl1bNl1bNF07Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgaGFudHJvX2cyX2FsbF9wcm9icyB7Cj4gKwl1OCBrZl95X21vZGVfcHJvYlsxMF1bMTBd WzhdOwo+ICsKPiArCXU4IGtmX3lfbW9kZV9wcm9iX3RhaWxbMTBdWzEwXVsxXTsKPiArCXU4IHJl Zl9wcmVkX3Byb2JzWzNdOwo+ICsJdTggbWJfc2VnbWVudF90cmVlX3Byb2JzWzddOwo+ICsJdTgg c2VnbWVudF9wcmVkX3Byb2JzWzNdOwo+ICsJdTggcmVmX3Njb3Jlc1s0XTsKPiArCXU4IHByb2Jf Y29tcHByZWRbMl07Cj4gKwo+ICsJdTggcGFkMVs5XTsKPiArCj4gKwl1OCBrZl91dl9tb2RlX3By b2JbMTBdWzhdOwo+ICsJdTgga2ZfdXZfbW9kZV9wcm9iX3RhaWxbMTBdWzFdOwo+ICsKPiArCXU4 IHBhZDJbNl07Cj4gKwo+ICsJc3RydWN0IGhhbnRyb19nMl9wcm9icyBwcm9iczsKPiArfTsKPiAr Cj4gK3N0cnVjdCBtdl9jb3VudHMgewo+ICsJdTMyIGpvaW50c1s0XTsKPiArCXUzMiBzaWduWzJd WzJdOwo+ICsJdTMyIGNsYXNzZXNbMl1bMTFdOwo+ICsJdTMyIGNsYXNzMFsyXVsyXTsKPiArCXUz MiBiaXRzWzJdWzEwXVsyXTsKPiArCXUzMiBjbGFzczBfZnBbMl1bMl1bNF07Cj4gKwl1MzIgZnBb Ml1bNF07Cj4gKwl1MzIgY2xhc3MwX2hwWzJdWzJdOwo+ICsJdTMyIGhwWzJdWzJdOwo+ICt9Owo+ ICsKPiArc3RydWN0IHN5bWJvbF9jb3VudHMgewo+ICsJdTMyIGludGVyX21vZGVfY291bnRzWzdd WzNdWzJdOwo+ICsJdTMyIHNiX3ltb2RlX2NvdW50c1s0XVsxMF07Cj4gKwl1MzIgdXZfbW9kZV9j b3VudHNbMTBdWzEwXTsKPiArCXUzMiBwYXJ0aXRpb25fY291bnRzWzE2XVs0XTsKPiArCXUzMiBz d2l0Y2hhYmxlX2ludGVycF9jb3VudHNbNF1bM107Cj4gKwl1MzIgaW50cmFfaW50ZXJfY291bnRb NF1bMl07Cj4gKwl1MzIgY29tcF9pbnRlcl9jb3VudFs1XVsyXTsKPiArCXUzMiBzaW5nbGVfcmVm X2NvdW50WzVdWzJdWzJdOwo+ICsJdTMyIGNvbXBfcmVmX2NvdW50WzVdWzJdOwo+ICsJdTMyIHR4 MzJ4MzJfY291bnRbMl1bNF07Cj4gKwl1MzIgdHgxNngxNl9jb3VudFsyXVszXTsKPiArCXUzMiB0 eDh4OF9jb3VudFsyXVsyXTsKPiArCXUzMiBtYnNraXBfY291bnRbM11bMl07Cj4gKwo+ICsJc3Ry dWN0IG12X2NvdW50cyBtdl9jb3VudHM7Cj4gKwo+ICsJdTMyIGNvdW50X2NvZWZmc1syXVsyXVs2 XVs2XVs0XTsKPiArCXUzMiBjb3VudF9jb2VmZnM4eDhbMl1bMl1bNl1bNl1bNF07Cj4gKwl1MzIg Y291bnRfY29lZmZzMTZ4MTZbMl1bMl1bNl1bNl1bNF07Cj4gKwl1MzIgY291bnRfY29lZmZzMzJ4 MzJbMl1bMl1bNl1bNl1bNF07Cj4gKwo+ICsJdTMyIGNvdW50X2VvYnNbNF1bMl1bMl1bNl1bNl07 Cj4gK307Cj4gKwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2lt eDhtX3ZwdV9ody5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9pbXg4bV92cHVfaHcu Ywo+IGluZGV4IGE0MGIxNjFlNTk1Ni4uNDU1YTEwN2ZmYjAyIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaW14OG1fdnB1X2h3LmMKPiArKysgYi9kcml2ZXJzL3N0 YWdpbmcvbWVkaWEvaGFudHJvL2lteDhtX3ZwdV9ody5jCj4gQEAgLTE1MCw2ICsxNTAsMTkgQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fZm10IGlteDhtX3ZwdV9nMl9kZWNfZm10c1tdID0g ewo+ICAJCQkuc3RlcF9oZWlnaHQgPSBNQl9ESU0sCj4gIAkJfSwKPiAgCX0sCj4gKwl7Cj4gKwkJ LmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9WUDlfRlJBTUUsCj4gKwkJLmNvZGVjX21vZGUgPSBIQU5U Uk9fTU9ERV9WUDlfREVDLAo+ICsJCS5tYXhfZGVwdGggPSAyLAo+ICsJCS5mcm1zaXplID0gewo+ ICsJCQkubWluX3dpZHRoID0gNDgsCj4gKwkJCS5tYXhfd2lkdGggPSAzODQwLAo+ICsJCQkuc3Rl cF93aWR0aCA9IE1CX0RJTSwKPiArCQkJLm1pbl9oZWlnaHQgPSA0OCwKPiArCQkJLm1heF9oZWln aHQgPSAyMTYwLAo+ICsJCQkuc3RlcF9oZWlnaHQgPSBNQl9ESU0sCj4gKwkJfSwKPiArCX0sCj4g IH07Cj4gIAo+ICBzdGF0aWMgaXJxcmV0dXJuX3QgaW14OG1fdnB1X2cxX2lycShpbnQgaXJxLCB2 b2lkICpkZXZfaWQpCj4gQEAgLTI0MSw2ICsyNTQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBo YW50cm9fY29kZWNfb3BzIGlteDhtcV92cHVfZzJfY29kZWNfb3BzW10gPSB7Cj4gIAkJLmluaXQg PSBoYW50cm9faGV2Y19kZWNfaW5pdCwKPiAgCQkuZXhpdCA9IGhhbnRyb19oZXZjX2RlY19leGl0 LAo+ICAJfSwKPiArCVtIQU5UUk9fTU9ERV9WUDlfREVDXSA9IHsKPiArCQkucnVuID0gaGFudHJv X2cyX3ZwOV9kZWNfcnVuLAo+ICsJCS5kb25lID0gaGFudHJvX2cyX3ZwOV9kZWNfZG9uZSwKPiAr CQkucmVzZXQgPSBpbXg4bV92cHVfZzJfcmVzZXQsCj4gKwkJLmluaXQgPSBoYW50cm9fdnA5X2Rl Y19pbml0LAo+ICsJCS5leGl0ID0gaGFudHJvX3ZwOV9kZWNfZXhpdCwKPiArCX0sCj4gIH07Cj4g IAo+ICAvKgo+IEBAIC0yODEsNyArMzAxLDcgQEAgY29uc3Qgc3RydWN0IGhhbnRyb192YXJpYW50 IGlteDhtcV92cHVfZzJfdmFyaWFudCA9IHsKPiAgCS5kZWNfb2Zmc2V0ID0gMHgwLAo+ICAJLmRl Y19mbXRzID0gaW14OG1fdnB1X2cyX2RlY19mbXRzLAo+ICAJLm51bV9kZWNfZm10cyA9IEFSUkFZ X1NJWkUoaW14OG1fdnB1X2cyX2RlY19mbXRzKSwKPiAtCS5jb2RlYyA9IEhBTlRST19IRVZDX0RF Q09ERVIsCj4gKwkuY29kZWMgPSBIQU5UUk9fSEVWQ19ERUNPREVSIHwgSEFOVFJPX1ZQOV9ERUNP REVSLAo+ICAJLmNvZGVjX29wcyA9IGlteDhtcV92cHVfZzJfY29kZWNfb3BzLAo+ICAJLmluaXQg PSBpbXg4bXFfdnB1X2h3X2luaXQsCj4gIAkucnVudGltZV9yZXN1bWUgPSBpbXg4bXFfcnVudGlt ZV9yZXN1bWUsCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtcm9ja2NoaXAK