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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 00AC4C48260 for ; Fri, 16 Feb 2024 09:21:53 +0000 (UTC) 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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vxw1oJ03dVF3aXBSzBK6ezejKfKQWAf6NM0qQ6E57/M=; b=pW/5zugOprxjYv lp7hEjpEz96GLWjDEM2M8Uyh0qn+G/rVP6rF3wpEBoOHMrh4fkI76vRElLEgXh7yiJ9D6sOg8UIal PJBlTDXV9KMXVQAdo6u0iLE7QKe6n82rLhdiRqXOioQ5n2VsZwuQC6kLp400DfIOrxcM/JHYZGMmP JHjBLPtO6zWlG4qUQoOD/xakFltOwLhRfF++hv0m+UNbaQ8IFFtyt2aLhszFyYpmKOJLTqNWBY7ou 8H3TPeGjouvZ+U9s19MEE6BnCaO2+Sb885U+cvteI9KqVarYcoxapEDuLpVgyQMGQpzW8DNgUuxBv GQUpgo+dhPqy+mc8BXnA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rauPe-00000001iNQ-24qa; Fri, 16 Feb 2024 09:21:42 +0000 Received: from mgamail.intel.com ([192.198.163.12]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rauPY-00000001iMh-49zE for linux-arm-kernel@lists.infradead.org; Fri, 16 Feb 2024 09:21:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1708075297; x=1739611297; h=date:from:to:cc:subject:message-id:references: mime-version:content-transfer-encoding:in-reply-to; bh=Zi8DtS3elipQhx7SnAg3j+sRIzi0uB84VEMiRWHmp1k=; b=kHDYNBGwKkGKlmnnNqi7RWh/oTKMK4j4RLfd1sv3NKFcQgPk5O2wmLUq uqxA1Kn12JGPy4gbziCNBs/LlsooUKqKXqhalwVkQdfYSMULQM4QQlvHg U2PwaDBq7swjjnyeHNWT7UzYmNouj5ytkUJ8aauoAcTAp6jAmjdt26sxA Il/92TAzI0l2/iuu/aUKBwPt/LPnqQAJzYIY/ezeCOMuus5HREpsgd1KH gALH7mMLYommg6MeD8dr/faPdc/z/rwqmFvLT4gwHIwIUrdoC1krakQxN ObqWunPjqeLVbBMhtnuxSDT7T/pM7OBXoeaI7j6qKSzEkp15ILDF+fYxy g==; X-IronPort-AV: E=McAfee;i="6600,9927,10985"; a="5977677" X-IronPort-AV: E=Sophos;i="6.06,164,1705392000"; d="scan'208";a="5977677" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by fmvoesa106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Feb 2024 01:21:35 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.06,164,1705392000"; d="scan'208";a="4152997" Received: from turnipsi.fi.intel.com (HELO kekkonen.fi.intel.com) ([10.237.72.44]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Feb 2024 01:21:31 -0800 Received: from kekkonen.localdomain (localhost [127.0.0.1]) by kekkonen.fi.intel.com (Postfix) with ESMTP id EFCD511F7E1; Fri, 16 Feb 2024 11:21:27 +0200 (EET) Date: Fri, 16 Feb 2024 09:21:27 +0000 From: Sakari Ailus To: Umang Jain Cc: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , NXP Linux Team , Fabio Estevam , Kieran Bingham , Laurent Pinchart , willl will Subject: Re: [PATCH 2/2] media: i2c: Add imx283 camera sensor driver Message-ID: References: <20240215204436.9194-1-umang.jain@ideasonboard.com> <20240215204436.9194-3-umang.jain@ideasonboard.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240215204436.9194-3-umang.jain@ideasonboard.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240216_012137_134907_DD7664EB X-CRM114-Status: GOOD ( 32.47 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgVW1hbmcsCgpPbiBGcmksIEZlYiAxNiwgMjAyNCBhdCAwMjoxNDozNUFNICswNTMwLCBVbWFu ZyBKYWluIHdyb3RlOgo+IEZyb206IEtpZXJhbiBCaW5naGFtIDxraWVyYW4uYmluZ2hhbUBpZGVh c29uYm9hcmQuY29tPgo+IAo+IEFkZCBhIHY0bDIgc3ViZGV2aWNlIGRyaXZlciBmb3IgdGhlIFNv bnkgSU1YMjgzIGltYWdlIHNlbnNvci4KPiAKPiBUaGUgSU1YMjgzIGlzIGEgMjBNUCBEaWFnb25h bCAxNS44NiBtbSAoVHlwZSAxKSBDTU9TIEltYWdlIFNlbnNvciB3aXRoCj4gU3F1YXJlIFBpeGVs IGZvciBDb2xvciBDYW1lcmFzLgo+IAo+IFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBv cnRlZDoKPiAtIE1hbnVhbCBleHBvc3VyZSBhbiBnYWluIGNvbnRyb2wgc3VwcG9ydAo+IC0gdmJs YW5rL2hibGFuay9saW5rIGZyZXEgY29udHJvbCBzdXBwb3J0Cj4gLSBUZXN0IHBhdHRlcm4gc3Vw cG9ydCBjb250cm9sCj4gLSBBcmJpdHJhcnkgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgY3JvcHBp bmcKPiAtIFN1cHBvcnRlZCByZXNvbHV0aW9uOgo+ICAgLSA1NDcyeDM2NDggQCAyMGZwcyAoU1JH R0IxMikKPiAgIC0gNTQ3MngzNjQ4IEAgMjVmcHMgKFNSR0dCMTApCj4gICAtIDI3MzZ4MTgyNCBA IDUwZnBzIChTUkdHQjEyKQo+IAo+IFNpZ25lZC1vZmYtYnk6IEtpZXJhbiBCaW5naGFtIDxraWVy YW4uYmluZ2hhbUBpZGVhc29uYm9hcmQuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFVtYW5nIEphaW4g PHVtYW5nLmphaW5AaWRlYXNvbmJvYXJkLmNvbT4KPiAtLS0KPiAgTUFJTlRBSU5FUlMgICAgICAg ICAgICAgICAgfCAgICAxICsKPiAgZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZyAgfCAgIDEzICsK PiAgZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgfCAgICAxICsKPiAgZHJpdmVycy9tZWRpYS9p MmMvaW14MjgzLmMgfCAxNjAxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ICA0IGZpbGVzIGNoYW5nZWQsIDE2MTYgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9tZWRpYS9pMmMvaW14MjgzLmMKPiAKPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5F UlMgYi9NQUlOVEFJTkVSUwo+IGluZGV4IDUzZGY0YjZlMzI2MC4uMzgyNmU1YzVkNzQ2IDEwMDY0 NAo+IC0tLSBhL01BSU5UQUlORVJTCj4gKysrIGIvTUFJTlRBSU5FUlMKPiBAQCAtMjAzNzMsNiAr MjAzNzMsNyBAQCBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKPiAgUzoJTWFpbnRhaW5l ZAo+ICBUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFfdHJlZS5naXQKPiAgRjoJRG9jdW1l bnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL2kyYy9zb255LGlteDI4My55YW1sCj4g K0Y6CWRyaXZlcnMvbWVkaWEvaTJjL2lteDI4My5jCj4gIAo+ICBTT05ZIElNWDI5MCBTRU5TT1Ig RFJJVkVSCj4gIE06CU1hbml2YW5uYW4gU2FkaGFzaXZhbSA8bWFuaXZhbm5hbi5zYWRoYXNpdmFt QGxpbmFyby5vcmc+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcgYi9k cml2ZXJzL21lZGlhL2kyYy9LY29uZmlnCj4gaW5kZXggNTZmMjc2YjkyMGFiLi5iNzk4YzU1YTJi ZTUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZwo+ICsrKyBiL2RyaXZl cnMvbWVkaWEvaTJjL0tjb25maWcKPiBAQCAtMTUzLDYgKzE1MywxOSBAQCBjb25maWcgVklERU9f SU1YMjc0Cj4gIAkgIFRoaXMgaXMgYSBWNEwyIHNlbnNvciBkcml2ZXIgZm9yIHRoZSBTb255IElN WDI3NAo+ICAJICBDTU9TIGltYWdlIHNlbnNvci4KPiAgCj4gK2NvbmZpZyBWSURFT19JTVgyODMK PiArCXRyaXN0YXRlICJTb255IElNWDI4MyBzZW5zb3Igc3VwcG9ydCIKPiArCWRlcGVuZHMgb24g STJDICYmIFZJREVPX0RFVgoKVGhpcyBpcyBhbHJlYWR5IGdpdmVuLgoKPiArCXNlbGVjdCBNRURJ QV9DT05UUk9MTEVSCj4gKwlzZWxlY3QgVklERU9fVjRMMl9TVUJERVZfQVBJCgpCb3RoIGFyZSBh bHJlYWR5IHNlbGVjdGVkLCBubyBuZWVkIHRvIGRvIHRoaXMgcGVyIGRyaXZlci4KCj4gKwlzZWxl Y3QgVjRMMl9DQ0lfSTJDCj4gKwloZWxwCj4gKwkgIFRoaXMgaXMgYSBWNEwyIHNlbnNvciBkcml2 ZXIgZm9yIHRoZSBTb255IElNWDI4Mwo+ICsJICBDTU9TIGltYWdlIHNlbnNvci4KPiArCj4gKwkg IFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQo+ ICsJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW14MjgzLgo+ICsKPiAgY29uZmlnIFZJREVPX0lN WDI5MAo+ICAJdHJpc3RhdGUgIlNvbnkgSU1YMjkwIHNlbnNvciBzdXBwb3J0Igo+ICAJc2VsZWN0 IFJFR01BUF9JMkMKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgYi9k cml2ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQo+IGluZGV4IGRmYmU2NDQ4YjU0OS4uMGZiZDgxZjlm NDIwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlCj4gKysrIGIvZHJp dmVycy9tZWRpYS9pMmMvTWFrZWZpbGUKPiBAQCAtNDgsNiArNDgsNyBAQCBvYmotJChDT05GSUdf VklERU9fSU1YMjE0KSArPSBpbXgyMTQubwo+ICBvYmotJChDT05GSUdfVklERU9fSU1YMjE5KSAr PSBpbXgyMTkubwo+ICBvYmotJChDT05GSUdfVklERU9fSU1YMjU4KSArPSBpbXgyNTgubwo+ICBv YmotJChDT05GSUdfVklERU9fSU1YMjc0KSArPSBpbXgyNzQubwo+ICtvYmotJChDT05GSUdfVklE RU9fSU1YMjgzKSArPSBpbXgyODMubwo+ICBvYmotJChDT05GSUdfVklERU9fSU1YMjkwKSArPSBp bXgyOTAubwo+ICBvYmotJChDT05GSUdfVklERU9fSU1YMjk2KSArPSBpbXgyOTYubwo+ICBvYmot JChDT05GSUdfVklERU9fSU1YMzE5KSArPSBpbXgzMTkubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL2kyYy9pbXgyODMuYyBiL2RyaXZlcnMvbWVkaWEvaTJjL2lteDI4My5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjUyZmFmZWExOGU3YQo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9kcml2ZXJzL21lZGlhL2kyYy9pbXgyODMuYwo+IEBAIC0wLDAgKzEs MTYwMSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsg KiBWNEwyIFN1cHBvcnQgZm9yIHRoZSBJTVgyODMKPiArICoKPiArICogRGlhZ29uYWwgMTUuODYg bW0gKFR5cGUgMSkgQ01PUyBJbWFnZSBTZW5zb3Igd2l0aCBTcXVhcmUgUGl4ZWwgZm9yIENvbG9y Cj4gKyAqIENhbWVyYXMuCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAyNCBJZGVhcyBvbiBC b2FyZCBPeS4KPiArICoKPiArICogQmFzZWQgb24gU29ueSBJTVgyODMgZHJpdmVyIHByZXBhcmVk IGJ5IFdpbGwgV2hhbmcKPiArICoKPiArICogQmFzZWQgb24gU29ueSBpbXg0NzcgY2FtZXJhIGRy aXZlcgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBSYXNwYmVycnkgUGkgKFRyYWRpbmcp IEx0ZAo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CgpEbyB5b3Ugc3Rp bGwgbmVlZCB0aGlzPwoKPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L2kyYy5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9vZl9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ICsjaW5jbHVkZSA8bWVkaWEv djRsMi1jY2kuaD4KPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KPiArI2luY2x1ZGUg PG1lZGlhL3Y0bDItZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+Cj4g KyNpbmNsdWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPgo+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1t ZWRpYWJ1cy5oPgo+ICsKPiArLyogQ2hpcCBJRCAqLwo+ICsjZGVmaW5lIElNWDI4M19SRUdfQ0hJ UF9JRAkJQ0NJX1JFRzgoMHgzMDAwKQo+ICsjZGVmaW5lIElNWDI4M19DSElQX0lECQkJMHgwYgkv LyBEZWZhdWx0IHBvd2VyIG9uIHN0YXRlCj4gKwo+ICsjZGVmaW5lIElNWDI4M19SRUdfU1RBTkRC WQkJQ0NJX1JFRzgoMHgzMDAwKQo+ICsjZGVmaW5lICAgSU1YMjgzX0FDVElWRQkJCTAKPiArI2Rl ZmluZSAgIElNWDI4M19TVEFOREJZCQlCSVQoMCkKPiArI2RlZmluZSAgIElNWDI4M19TVEJMT0dJ QwkJQklUKDEpCj4gKyNkZWZpbmUgICBJTVgyODNfU1RCTUlQSQkJQklUKDIpCj4gKyNkZWZpbmUg ICBJTVgyODNfU1RCRFYJCQlCSVQoMykKPiArI2RlZmluZSAgIElNWDI4M19TTEVFUAkJCUJJVCg0 KQo+ICsKPiArI2RlZmluZSBJTVgyODNfUkVHX0NMQU1QCQlDQ0lfUkVHOCgweDMwMDEpCj4gKyNk ZWZpbmUgICBJTVgyODNfQ0xQU1FSU1QJCUJJVCg0KQo+ICsKPiArI2RlZmluZSBJTVgyODNfUkVH X1BMU1RNRzA4CQlDQ0lfUkVHOCgweDMwMDMpCj4gKyNkZWZpbmUgICBJTVgyODNfUExTVE1HMDhf VkFMCQkweDc3Cj4gKwo+ICsjZGVmaW5lIElNWDI4M19SRUdfTURTRUwxCQlDQ0lfUkVHOCgweDMw MDQpCj4gKyNkZWZpbmUgSU1YMjgzX1JFR19NRFNFTDIJCUNDSV9SRUc4KDB4MzAwNSkKPiArI2Rl ZmluZSBJTVgyODNfUkVHX01EU0VMMwkJQ0NJX1JFRzgoMHgzMDA2KQo+ICsjZGVmaW5lICAgSU1Y MjgzX01EU0VMM19WQ1JPUF9FTglCSVQoNSkKPiArI2RlZmluZSBJTVgyODNfUkVHX01EU0VMNAkJ Q0NJX1JFRzgoMHgzMDA3KQo+ICsjZGVmaW5lICAgSU1YMjgzX01EU0VMNF9WQ1JPUF9FTgkoQklU KDQpIHwgQklUKDYpKQo+ICsKPiArI2RlZmluZSBJTVgyODNfUkVHX1NWUgkJCUNDSV9SRUcxNl9M RSgweDMwMDkpCj4gKwo+ICsjZGVmaW5lIElNWDI4M19SRUdfSFRSSU1NSU5HCQlDQ0lfUkVHOCgw eDMwMGIpCj4gKyNkZWZpbmUgICBJTVgyODNfTURWUkVWCQkJQklUKDApIC8qIFZGTElQICovCj4g KyNkZWZpbmUgICBJTVgyODNfSFRSSU1NSU5HX0VOCQlCSVQoNCkKPiArCj4gKyNkZWZpbmUgSU1Y MjgzX1JFR19WV0lOUE9TCQlDQ0lfUkVHMTZfTEUoMHgzMDBmKQo+ICsjZGVmaW5lIElNWDI4M19S RUdfVldJRENVVAkJQ0NJX1JFRzE2X0xFKDB4MzAxMSkKPiArCj4gKyNkZWZpbmUgSU1YMjgzX1JF R19NRFNFTDcJCUNDSV9SRUcxNl9MRSgweDMwMTMpCj4gKwo+ICsvKiBDU0kgQ2xvY2sgQ29uZmln dXJhdGlvbiAqLwo+ICsjZGVmaW5lIElNWDI4M19SRUdfVENMS1BPU1QJCUNDSV9SRUc4KDB4MzAx OCkKPiArI2RlZmluZSBJTVgyODNfUkVHX1RIU1BSRVBBUkUJCUNDSV9SRUc4KDB4MzAxYSkKPiAr I2RlZmluZSBJTVgyODNfUkVHX1RIU1pFUk8JCUNDSV9SRUc4KDB4MzAxYykKPiArI2RlZmluZSBJ TVgyODNfUkVHX1RIU1RSQUlMCQlDQ0lfUkVHOCgweDMwMjApCj4gKyNkZWZpbmUgSU1YMjgzX1JF R19UQ0xLUFJFUEFSRQkJQ0NJX1JFRzgoMHgzMDIyKQo+ICsjZGVmaW5lIElNWDI4M19SRUdfVENM S1pFUk8JCUNDSV9SRUcxNl9MRSgweDMwMjQpCj4gKyNkZWZpbmUgSU1YMjgzX1JFR19UTFBYCQkJ Q0NJX1JFRzgoMHgzMDI2KQo+ICsjZGVmaW5lIElNWDI4M19SRUdfVEhTRVhJVAkJQ0NJX1JFRzgo MHgzMDI4KQo+ICsjZGVmaW5lIElNWDI4M19SRUdfVENMS1BSRQkJQ0NJX1JFRzgoMHgzMDJhKQo+ ICsKPiArI2RlZmluZSBJTVgyODNfUkVHX1lfT1VUX1NJWkUJCUNDSV9SRUcxNl9MRSgweDMwMmYp Cj4gKyNkZWZpbmUgSU1YMjgzX1JFR19XUklURV9WU0laRQkJQ0NJX1JFRzE2X0xFKDB4MzAzMSkK PiArI2RlZmluZSBJTVgyODNfUkVHX09CX1NJWkVfVgkJQ0NJX1JFRzgoMHgzMDMzKQo+ICsKPiAr LyogSE1BWCBpbnRlcm5hbCBIQkxBTksgKi8KPiArI2RlZmluZSBJTVgyODNfUkVHX0hNQVgJCQlD Q0lfUkVHMTZfTEUoMHgzMDM2KQo+ICsjZGVmaW5lIElNWDI4M19ITUFYX01BWAkJCTB4ZmZmZgo+ ICsKPiArLyogVk1BWCBpbnRlcm5hbCBWQkxBTksgKi8KPiArI2RlZmluZSBJTVgyODNfUkVHX1ZN QVgJCQlDQ0lfUkVHMjRfTEUoMHgzMDM4KQo+ICsjZGVmaW5lICAgSU1YMjgzX1ZNQVhfTUFYCQkw eGZmZmZmCj4gKwo+ICsvKiBTSFIgaW50ZXJuYWwgKi8KPiArI2RlZmluZSBJTVgyODNfUkVHX1NI UgkJCUNDSV9SRUcxNl9MRSgweDMwM2IpCj4gKyNkZWZpbmUgICBJTVgyODNfU0hSX01JTgkJMTEK PiArCj4gKy8qCj4gKyAqIEFuYWxvZyBnYWluIGNvbnRyb2wKPiArICogIEdhaW4gW2RCXSA9IC0y MGxvZ3soMjA0OCAtIHZhbHVlIFsxMDowXSkgLzIwNDh9Cj4gKyAqICBSYW5nZTogMGRCIHRvIGFw cHJveGltYXRlbHkgKzI3ZEIKPiArICovCj4gKyNkZWZpbmUgSU1YMjgzX1JFR19BTkFMT0dfR0FJ TgkJQ0NJX1JFRzE2X0xFKDB4MzA0MikKPiArI2RlZmluZSAgIElNWDI4M19BTkFfR0FJTl9NSU4J CTAKPiArI2RlZmluZSAgIElNWDI4M19BTkFfR0FJTl9NQVgJCTE5NTcKPiArI2RlZmluZSAgIElN WDI4M19BTkFfR0FJTl9TVEVQCQkxCj4gKyNkZWZpbmUgICBJTVgyODNfQU5BX0dBSU5fREVGQVVM VAkweDAKPiArCj4gKy8qCj4gKyAqIERpZ2l0YWwgZ2FpbiBjb250cm9sCj4gKyAqICBHYWluIFtk Ql0gPSB2YWx1ZSAqIDYKPiArICogIFJhbmdlOiAwZEIgdG8gKzE4ZGIKPiArICovCj4gKyNkZWZp bmUgSU1YMjgzX1JFR19ESUdJVEFMX0dBSU4JCUNDSV9SRUc4KDB4MzA0NCkKPiArI2RlZmluZSBJ TVgyODNfREdUTF9HQUlOX01JTgkJMAo+ICsjZGVmaW5lIElNWDI4M19ER1RMX0dBSU5fTUFYCQkz Cj4gKyNkZWZpbmUgSU1YMjgzX0RHVExfR0FJTl9ERUZBVUxUCTAKPiArI2RlZmluZSBJTVgyODNf REdUTF9HQUlOX1NURVAJCTEKPiArCj4gKyNkZWZpbmUgSU1YMjgzX1JFR19IVFJJTU1JTkdfU1RB UlQJQ0NJX1JFRzE2X0xFKDB4MzA1OCkKPiArI2RlZmluZSBJTVgyODNfUkVHX0hUUklNTUlOR19F TkQJQ0NJX1JFRzE2X0xFKDB4MzA1YSkKPiArCj4gKyNkZWZpbmUgSU1YMjgzX1JFR19NRFNFTDE4 CQlDQ0lfUkVHMTZfTEUoMHgzMGY2KQo+ICsKPiArLyogTWFzdGVyIE1vZGUgT3BlcmF0aW9uIENv bnRyb2wgKi8KPiArI2RlZmluZSBJTVgyODNfUkVHX1hNU1RBCQlDQ0lfUkVHOCgweDMxMDUpCj4g KyNkZWZpbmUgICBJTVgyODNfWE1TVEEJCQlCSVQoMCkKPiArCj4gKyNkZWZpbmUgSU1YMjgzX1JF R19TWU5DRFJWCQlDQ0lfUkVHOCgweDMxMDcpCj4gKyNkZWZpbmUgICBJTVgyODNfU1lOQ0RSVl9Y SFNfWFZTCSgweGEwIHwgMHgwMikKPiArI2RlZmluZSAgIElNWDI4M19TWU5DRFJWX0hJWgkJKDB4 YTAgfCAweDAzKQo+ICsKPiArLyogUExMIFN0YW5kYnkgKi8KPiArI2RlZmluZSBJTVgyODNfUkVH X1NUQlBMCQlDQ0lfUkVHOCgweDMyMGIpCj4gKyNkZWZpbmUgIElNWDI4M19TVEJQTF9OT1JNQUwJ CTB4MDAKPiArI2RlZmluZSAgSU1YMjgzX1NUQlBMX1NUQU5EQlkJCTB4MDMKPiArCj4gKy8qIElu cHV0IEZyZXF1ZW5jeSBTZXR0aW5nICovCj4gKyNkZWZpbmUgSU1YMjgzX1JFR19QTFJEMQkJQ0NJ X1JFRzgoMHgzNmMxKQo+ICsjZGVmaW5lIElNWDI4M19SRUdfUExSRDIJCUNDSV9SRUcxNl9MRSgw eDM2YzIpCj4gKyNkZWZpbmUgSU1YMjgzX1JFR19QTFJEMwkJQ0NJX1JFRzgoMHgzNmY3KQo+ICsj ZGVmaW5lIElNWDI4M19SRUdfUExSRDQJCUNDSV9SRUc4KDB4MzZmOCkKPiArCj4gKyNkZWZpbmUg SU1YMjgzX1JFR19QTFNUTUcwMgkJQ0NJX1JFRzgoMHgzNmFhKQo+ICsjZGVmaW5lICAgSU1YMjgz X1BMU1RNRzAyX1ZBTAkJMHgwMAo+ICsKPiArI2RlZmluZSBJTVgyODNfUkVHX0VCRF9YX09VVF9T SVpFCUNDSV9SRUcxNl9MRSgweDNhNTQpCj4gKwo+ICsvKiBUZXN0IHBhdHRlcm4gZ2VuZXJhdG9y ICovCj4gKyNkZWZpbmUgSU1YMjgzX1JFR19UUEdfQ1RSTAkJQ0NJX1JFRzgoMHgzMTU2KQo+ICsj ZGVmaW5lICAgSU1YMjgzX1RQR19DVFJMX0NMS0VOCQlCSVQoMCkKPiArI2RlZmluZSAgIElNWDI4 M19UUEdfQ1RSTF9QQVRFTgkJQklUKDQpCj4gKwo+ICsjZGVmaW5lIElNWDI4M19SRUdfVFBHX1BB VAkJQ0NJX1JFRzgoMHgzMTU3KQo+ICsjZGVmaW5lICAgSU1YMjgzX1RQR19QQVRfQUxMXzAwMAkw eDAwCj4gKyNkZWZpbmUgICBJTVgyODNfVFBHX1BBVF9BTExfRkZGCTB4MDEKPiArI2RlZmluZSAg IElNWDI4M19UUEdfUEFUX0FMTF81NTUJMHgwMgo+ICsjZGVmaW5lICAgSU1YMjgzX1RQR19QQVRf QUxMX0FBQQkweDAzCj4gKyNkZWZpbmUgICBJTVgyODNfVFBHX1BBVF9IX0NPTE9SX0JBUlMJMHgw YQo+ICsjZGVmaW5lICAgSU1YMjgzX1RQR19QQVRfVl9DT0xPUl9CQVJTCTB4MGIKPiArCj4gKy8q IEV4cG9zdXJlIGNvbnRyb2wgKi8KPiArI2RlZmluZSBJTVgyODNfRVhQT1NVUkVfTUlOCQk1Mgo+ ICsjZGVmaW5lIElNWDI4M19FWFBPU1VSRV9TVEVQCQkxCj4gKyNkZWZpbmUgSU1YMjgzX0VYUE9T VVJFX0RFRkFVTFQJCTEwMDAKPiArI2RlZmluZSBJTVgyODNfRVhQT1NVUkVfTUFYCQk0OTg2NQo+ ICsKPiArLyogRW1iZWRkZWQgbWV0YWRhdGEgc3RyZWFtIHN0cnVjdHVyZSAqLwo+ICsjZGVmaW5l IElNWDI4M19FTUJFRERFRF9MSU5FX1dJRFRIIDE2Mzg0Cj4gKyNkZWZpbmUgSU1YMjgzX05VTV9F TUJFRERFRF9MSU5FUyAxCj4gKwo+ICsjZGVmaW5lIE1IWih4KQkJCQkoKHgpICogMTAwMCAqIDEw MDApCgpXZSBoYXZlIE1FR0EgaW4gbGludXgvdW5pdHMuaC4gQ291bGQgeW91IHVzZSB0aGF0IGlu c3RlYWQgb2YgZGVmaW5pbmcgeW91cgpvd24/Cgo+ICsjZGVmaW5lIElNQUdFX1BBRAkJCTAKPiAr Cj4gKyNkZWZpbmUgaW14MjgzX1hDTFJfTUlOX0RFTEFZX1VTCTEwMDAKPiArI2RlZmluZSBpbXgy ODNfWENMUl9ERUxBWV9SQU5HRV9VUwkxMDAwCj4gKwo+ICsvKiBJTVgyODMgbmF0aXZlIGFuZCBh Y3RpdmUgcGl4ZWwgYXJyYXkgc2l6ZS4gKi8KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3Jl Y3QgaW14MjgzX25hdGl2ZV9hcmVhID0gewo+ICsJLnRvcCA9IDAsCj4gKwkubGVmdCA9IDAsCj4g Kwkud2lkdGggPSA1NTkyLAo+ICsJLmhlaWdodCA9IDM3MTAsCj4gK307Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHY0bDJfcmVjdCBpbXgyODNfYWN0aXZlX2FyZWEgPSB7Cj4gKwkudG9wID0g NDAsCj4gKwkubGVmdCA9IDEwOCwKPiArCS53aWR0aCA9IDU0NzIsCj4gKwkuaGVpZ2h0ID0gMzY0 OCwKPiArfTsKPiArCj4gK3N0cnVjdCBJTVgyODNfcmVnX2xpc3Qgewo+ICsJdW5zaWduZWQgaW50 IG51bV9vZl9yZWdzOwo+ICsJY29uc3Qgc3RydWN0IGNjaV9yZWdfc2VxdWVuY2UgKnJlZ3M7Cj4g K307Cj4gKwo+ICsvKiBNb2RlIDogcmVzb2x1dGlvbiBhbmQgcmVsYXRlZCBjb25maWcgdmFsdWVz ICovCj4gK3N0cnVjdCBpbXgyODNfbW9kZSB7Cj4gKwl1bnNpZ25lZCBpbnQgbW9kZTsKPiArCj4g KwkvKiBCaXRzIHBlciBwaXhlbCAqLwo+ICsJdW5zaWduZWQgaW50IGJwcDsKPiArCj4gKwkvKiBG cmFtZSB3aWR0aCAqLwo+ICsJdW5zaWduZWQgaW50IHdpZHRoOwo+ICsKPiArCS8qIEZyYW1lIGhl aWdodCAqLwo+ICsJdW5zaWduZWQgaW50IGhlaWdodDsKPiArCj4gKwkvKgo+ICsJICogTWluaW11 bSBob3Jpem9udGFsIHRpbWluZyBpbiBwaXhlbC11bml0cwo+ICsJICoKPiArCSAqIE5vdGUgdGhh dCBITUFYIGlzIHdyaXR0ZW4gaW4gNzJNSHogdW5pdHMsIGFuZCB0aGUgZGF0YXNoZWV0IGFzc3Vt ZXMgYQo+ICsJICogNzIwTUh6IGxpbmsgZnJlcXVlbmN5LiBDb252ZXJ0IGRhdGFzaGVldCB2YWx1 ZXMgd2l0aCB0aGUgZm9sbG93aW5nOgo+ICsJICoKPiArCSAqIEZvciAxMiBicHAgbW9kZXMgKDQ4 ME1icHMpIGNvbnZlcnQgd2l0aDoKPiArCSAqICAgaG1heCA9IFtobWF4IGluIDcyTUh6IHVuaXRz XSAqIDQ4MCAvIDcyCj4gKwkgKgo+ICsJICogRm9yIDEwIGJwcCBtb2RlcyAoNTc2TWJwcykgY29u dmVydCB3aXRoOgo+ICsJICogICBobWF4ID0gW2htYXggaW4gNzJNSHogdW5pdHNdICogNTc2IC8g NzIKPiArCSAqLwo+ICsJdTY0IG1pbl9obWF4Owo+ICsKPiArCS8qIG1pbmltdW0gVi10aW1pbmcg aW4gbGluZXMgKi8KPiArCXU2NCBtaW5fdm1heDsKPiArCj4gKwkvKiBkZWZhdWx0IEgtdGltaW5n ICovCj4gKwl1NjQgZGVmYXVsdF9obWF4Owo+ICsKPiArCS8qIGRlZmF1bHQgVi10aW1pbmcgKi8K PiArCXU2NCBkZWZhdWx0X3ZtYXg7Cj4gKwo+ICsJLyogbWluaW11bSBTSFIgKi8KPiArCXU2NCBt aW5fc2hyOwo+ICsKCldoeSBhcmUgYWxsIHRoZXNlIDY0LWJpdCBudW1iZXJzPwoKPiArCS8qIEFi cml0cmFyeSB2ZXJ0aWNhbCBjcm9wcGluZyAqLwo+ICsJdTMyIHZlZmY7Cj4gKwl1MzIgdnN0Owo+ ICsJdTMyIHZjdDsKPiArCj4gKwkvKiBIb3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBiaW5uaW5nIHJh dGlvICovCj4gKwl1OCBoYmluX3JhdGlvOwo+ICsJdTggdmJpbl9yYXRpbzsKPiArCj4gKwkvKiBP cHRpY2FsIEJsYW5raW5nICovCj4gKwl1MzIgaG9yaXpvbnRhbF9vYjsKPiArCXUzMiB2ZXJ0aWNh bF9vYjsKPiArCj4gKwkvKiBBbmFsb2cgY3JvcCByZWN0YW5nbGUuICovCj4gKwlzdHJ1Y3QgdjRs Ml9yZWN0IGNyb3A7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaW14MjgzX2lucHV0X2ZyZXF1ZW5jeSB7 Cj4gKwl1bnNpZ25lZCBpbnQgbWh6Owo+ICsJdW5zaWduZWQgaW50IHJlZ19jb3VudDsKPiArCXN0 cnVjdCBjY2lfcmVnX3NlcXVlbmNlIHJlZ3NbNF07Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGlteDI4M19pbnB1dF9mcmVxdWVuY3kgaW14MjgzX2ZyZXF1ZW5jaWVzW10gPSB7Cj4g Kwl7Cj4gKwkJLm1oeiA9IE1IWig2KSwKPiArCQkucmVnX2NvdW50ID0gNCwKPiArCQkucmVncyA9 IHsKPiArCQkJeyBJTVgyODNfUkVHX1BMUkQxLCAweDAwIH0sCj4gKwkJCXsgSU1YMjgzX1JFR19Q TFJEMiwgMHgwMGYwIH0sCj4gKwkJCXsgSU1YMjgzX1JFR19QTFJEMywgMHgwMCB9LAo+ICsJCQl7 IElNWDI4M19SRUdfUExSRDQsIDB4YzAgfSwKPiArCQl9LAo+ICsJfSwKPiArCXsKPiArCQkubWh6 ID0gTUhaKDEyKSwKPiArCQkucmVnX2NvdW50ID0gNCwKPiArCQkucmVncyA9IHsKPiArCQkJeyBJ TVgyODNfUkVHX1BMUkQxLCAweDAxIH0sCj4gKwkJCXsgSU1YMjgzX1JFR19QTFJEMiwgMHgwMGYw IH0sCj4gKwkJCXsgSU1YMjgzX1JFR19QTFJEMywgMHgwMSB9LAo+ICsJCQl7IElNWDI4M19SRUdf UExSRDQsIDB4YzAgfSwKPiArCQl9LAo+ICsJfSwKPiArCXsKPiArCQkubWh6ID0gTUhaKDE4KSwK PiArCQkucmVnX2NvdW50ID0gNCwKPiArCQkucmVncyA9IHsKPiArCQkJeyBJTVgyODNfUkVHX1BM UkQxLCAweDAxIH0sCj4gKwkJCXsgSU1YMjgzX1JFR19QTFJEMiwgMHgwMGEwIH0sCj4gKwkJCXsg SU1YMjgzX1JFR19QTFJEMywgMHgwMSB9LAo+ICsJCQl7IElNWDI4M19SRUdfUExSRDQsIDB4ODAg fSwKPiArCQl9LAo+ICsJfSwKPiArCXsKPiArCQkubWh6ID0gTUhaKDI0KSwKPiArCQkucmVnX2Nv dW50ID0gNCwKPiArCQkucmVncyA9IHsKPiArCQkJeyBJTVgyODNfUkVHX1BMUkQxLCAweDAyIH0s Cj4gKwkJCXsgSU1YMjgzX1JFR19QTFJEMiwgMHgwMGYwIH0sCj4gKwkJCXsgSU1YMjgzX1JFR19Q TFJEMywgMHgwMiB9LAo+ICsJCQl7IElNWDI4M19SRUdfUExSRDQsIDB4YzAgfSwKPiArCQl9LAo+ ICsJfSwKPiArfTsKPiArCj4gK2VudW0gaW14MjgzX21vZGVzIHsKPiArCUlNWDI4M19NT0RFXzAs Cj4gKwlJTVgyODNfTU9ERV8xLAo+ICsJSU1YMjgzX01PREVfMUEsCj4gKwlJTVgyODNfTU9ERV8x UywKPiArCUlNWDI4M19NT0RFXzIsCj4gKwlJTVgyODNfTU9ERV8yQSwKPiArCUlNWDI4M19NT0RF XzMsCj4gKwlJTVgyODNfTU9ERV80LAo+ICsJSU1YMjgzX01PREVfNSwKPiArCUlNWDI4M19NT0RF XzYsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgaW14MjgzX3JlYWRvdXRfbW9kZSB7Cj4gKwl1NjQgbWRz ZWwxOwo+ICsJdTY0IG1kc2VsMjsKPiArCXU2NCBtZHNlbDM7Cj4gKwl1NjQgbWRzZWw0Owo+ICt9 Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbXgyODNfcmVhZG91dF9tb2RlIGlteDI4M19y ZWFkb3V0X21vZGVzW10gPSB7Cj4gKwkvKiBBbGwgcGl4ZWwgc2NhbiBtb2RlcyAqLwo+ICsJW0lN WDI4M19NT0RFXzBdID0geyAweDA0LCAweDAzLCAweDEwLCAweDAwIH0sIC8qIDEyIGJpdCAqLwo+ ICsJW0lNWDI4M19NT0RFXzFdID0geyAweDA0LCAweDAxLCAweDAwLCAweDAwIH0sIC8qIDEwIGJp dCAqLwo+ICsJW0lNWDI4M19NT0RFXzFBXSA9IHsgMHgwNCwgMHgwMSwgMHgyMCwgMHg1MCB9LCAv KiAxMCBiaXQgKi8KPiArCVtJTVgyODNfTU9ERV8xU10gPSB7IDB4MDQsIDB4NDEsIDB4MjAsIDB4 NTAgfSwgLyogMTAgYml0ICovCj4gKwo+ICsJLyogSG9yaXpvbnRhbCAvIFZlcnRpY2FsIDIvMi1s aW5lIGJpbm5pbmcgKi8KPiArCVtJTVgyODNfTU9ERV8yXSA9IHsgMHgwZCwgMHgxMSwgMHg1MCwg MHgwMCB9LCAvKiAxMiBiaXQgKi8KPiArCVtJTVgyODNfTU9ERV8yQV0gPSB7IDB4MGQsIDB4MTEs IDB4NzAsIDB4NTAgfSwgLyogMTIgYml0ICovCj4gKwo+ICsJLyogSG9yaXpvbnRhbCAvIFZlcnRp Y2FsIDMvMy1saW5lIGJpbm5pbmcgKi8KPiArCVtJTVgyODNfTU9ERV8zXSA9IHsgMHgxZSwgMHgx OCwgMHgxMCwgMHgwMCB9LCAvKiAxMiBiaXQgKi8KPiArCj4gKwkvKiBWZXJpdGNhbCAyLzkgc3Vi c2FtcGxpbmcsIGhvcml6b250YWwgMyBiaW5uaW5nIGNyb3BwaW5nICovCj4gKwlbSU1YMjgzX01P REVfNF0gPSB7IDB4MjksIDB4MTgsIDB4MzAsIDB4NTAgfSwgLyogMTIgYml0ICovCj4gKwo+ICsJ LyogVmVydGljYWwgMi8xOSBzdWJzYW1wbGluZyBiaW5uaW5nLCBob3Jpem9udGFsIDMgYmlubmlu ZyAqLwo+ICsJW0lNWDI4M19NT0RFXzVdID0geyAweDJkLCAweDE4LCAweDEwLCAweDAwIH0sIC8q IDEyIGJpdCAqLwo+ICsKPiArCS8qIFZlcnRpY2FsIDIgYmlubmluZyBob3Jpem9udGFsIDIvNCwg c3Vic2FtcGxpbmcgMTY6OSBjcm9wcGluZyAqLwo+ICsJW0lNWDI4M19NT0RFXzZdID0geyAweDE4 LCAweDIxLCAweDAwLCAweDA5IH0sIC8qIDEwIGJpdCAqLwo+ICt9Owo+ICsKPiArc3RhdGljIGNv bnN0IHN0cnVjdCBjY2lfcmVnX3NlcXVlbmNlIG1pcGlfZGF0YV9yYXRlXzE0NDBNYnBzW10gPSB7 Cj4gKwkvKiBUaGUgZGVmYXVsdCByZWdpc3RlciBzZXR0aW5ncyBwcm92aWRlIHRoZSAxNDQwTWJw cyByYXRlICovCj4gKwl7IENDSV9SRUc4KDB4MzZjNSksIDB4MDAgfSwgLyogVW5kb2N1bWVudGVk ICovCj4gKwl7IENDSV9SRUc4KDB4M2FjNCksIDB4MDAgfSwgLyogVW5kb2N1bWVudGVkICovCj4g Kwo+ICsJeyBDQ0lfUkVHOCgweDMyMEIpLCAweDAwIH0sIC8qIFNUQlBMICovCj4gKwl7IENDSV9S RUc4KDB4MzAxOCksIDB4YTcgfSwgLyogVENMS1BPU1QgKi8KPiArCXsgQ0NJX1JFRzgoMHgzMDFB KSwgMHg2ZiB9LCAvKiBUSFNQUkVQQVJFICovCj4gKwl7IENDSV9SRUc4KDB4MzAxQyksIDB4OWYg fSwgLyogVEhTWkVSTyAqLwo+ICsJeyBDQ0lfUkVHOCgweDMwMUUpLCAweDVmIH0sIC8qIFRIU1RS QUlMICovCj4gKwl7IENDSV9SRUc4KDB4MzAyMCksIDB4NWYgfSwgLyogVENMS1RSQUlMICovCj4g Kwl7IENDSV9SRUc4KDB4MzAyMiksIDB4NmYgfSwgLyogVENMS1BSRVBBUkUgKi8KPiArCXsgQ0NJ X1JFRzgoMHgzMDI0KSwgMHg3ZiB9LCAvKiBUQ0xLWkVST1s3OjBdICovCj4gKwl7IENDSV9SRUc4 KDB4MzAyNSksIDB4MDEgfSwgLyogVENMS1pFUk9bOF0gKi8KPiArCXsgQ0NJX1JFRzgoMHgzMDI2 KSwgMHg0ZiB9LCAvKiBUTFBYKi8KPiArCXsgQ0NJX1JFRzgoMHgzMDI4KSwgMHg0NyB9LCAvKiBU SFNFWElUICovCj4gKwl7IENDSV9SRUc4KDB4MzAyQSksIDB4MDcgfSwgLyogVENLTFBSRSAqLwo+ ICsJeyBDQ0lfUkVHOCgweDMxMDQpLCAweDAyIH0sIC8qIFNZU01PREUgKi8KPiArfTsKPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2NpX3JlZ19zZXF1ZW5jZSBtaXBpX2RhdGFfcmF0ZV83MjBN YnBzW10gPSB7Cj4gKwkvKiBVbmRvY3VtZW50ZWQgQWRkaXRpb25zICJGb3IgNzIwTUJwcyIgU2V0 dGluZyAqLwo+ICsJeyBDQ0lfUkVHOCgweDM2YzUpLCAweDAxIH0sIC8qIFVuZG9jdW1lbnRlZCAq Lwo+ICsJeyBDQ0lfUkVHOCgweDNhYzQpLCAweDAxIH0sIC8qIFVuZG9jdW1lbnRlZCAqLwo+ICsK PiArCXsgQ0NJX1JFRzgoMHgzMjBCKSwgMHgwMCB9LCAvKiBTVEJQTCAqLwo+ICsJeyBDQ0lfUkVH OCgweDMwMTgpLCAweDc3IH0sIC8qIFRDTEtQT1NUICovCj4gKwl7IENDSV9SRUc4KDB4MzAxQSks IDB4MzcgfSwgLyogVEhTUFJFUEFSRSAqLwo+ICsJeyBDQ0lfUkVHOCgweDMwMUMpLCAweDY3IH0s IC8qIFRIU1pFUk8gKi8KPiArCXsgQ0NJX1JFRzgoMHgzMDFFKSwgMHgzNyB9LCAvKiBUSFNUUkFJ TCAqLwo+ICsJeyBDQ0lfUkVHOCgweDMwMjApLCAweDM3IH0sIC8qIFRDTEtUUkFJTCAqLwo+ICsJ eyBDQ0lfUkVHOCgweDMwMjIpLCAweDM3IH0sIC8qIFRDTEtQUkVQQVJFICovCj4gKwl7IENDSV9S RUc4KDB4MzAyNCksIDB4REYgfSwgLyogVENMS1pFUk9bNzowXSAqLwo+ICsJeyBDQ0lfUkVHOCgw eDMwMjUpLCAweDAwIH0sIC8qIFRDTEtaRVJPWzhdICovCj4gKwl7IENDSV9SRUc4KDB4MzAyNiks IDB4MkYgfSwgLyogVExQWCovCj4gKwl7IENDSV9SRUc4KDB4MzAyOCksIDB4NDcgfSwgLyogVEhT RVhJVCAqLwo+ICsJeyBDQ0lfUkVHOCgweDMwMkEpLCAweDBGIH0sIC8qIFRDS0xQUkUgKi8KPiAr CXsgQ0NJX1JFRzgoMHgzMTA0KSwgMHgwMiB9LCAvKiBTWVNNT0RFICovCj4gK307Cj4gKwo+ICtz dGF0aWMgY29uc3QgczY0IGxpbmtfZnJlcXVlbmNpZXNbXSA9IHsKPiArCU1IWig3MjApLCAvKiAx NDQwIE1icHMgbGFuZSBkYXRhIHJhdGUgKi8KPiArCU1IWigzNjApLCAvKiA3MjAgTWJwcyBkYXRh IGxhbmUgcmF0ZSAqLwo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBJTVgyODNfcmVn X2xpc3QgbGlua19mcmVxX3JlZ2xpc3RbXSA9IHsKPiArCXsgLyogTUhaKDcyMCkqLwoKTWlzc2lu ZyBzcGFjZSBiZWZvcmUgJyonLgoKPiArCQkubnVtX29mX3JlZ3MgPSBBUlJBWV9TSVpFKG1pcGlf ZGF0YV9yYXRlXzE0NDBNYnBzKSwKPiArCQkucmVncyA9IG1pcGlfZGF0YV9yYXRlXzE0NDBNYnBz LAo+ICsJfSwKPiArCXsgLyogTUhaKDM2MCkgKi8KPiArCQkubnVtX29mX3JlZ3MgPSBBUlJBWV9T SVpFKG1pcGlfZGF0YV9yYXRlXzcyME1icHMpLAo+ICsJCS5yZWdzID0gbWlwaV9kYXRhX3JhdGVf NzIwTWJwcywKPiArCX0sCj4gK307Cj4gKwo+ICsjZGVmaW5lIENFTlRFUkVEX1JFQ1RBTkdMRShy ZWN0LCBfd2lkdGgsIF9oZWlnaHQpIFwKPiArCXsgXAo+ICsJCS5sZWZ0ID0gcmVjdC5sZWZ0ICsg KChyZWN0LndpZHRoIC0gKF93aWR0aCkpIC8gMiksIFwKPiArCQkudG9wID0gcmVjdC50b3AgKyAo KHJlY3QuaGVpZ2h0IC0gKF9oZWlnaHQpKSAvIDIpLCBcCj4gKwkJLndpZHRoID0gKF93aWR0aCks IFwKPiArCQkuaGVpZ2h0ID0gKF9oZWlnaHQpLCBcCgpQbGVhc2UgYWxpZ24gdGhlIGJhY2tzbGFz aGVzIHRvIHRoZSBzYW1lIGNvbHVtbi4KCj4gKwl9Cj4gKwo+ICsvKiBNb2RlIGNvbmZpZ3MgKi8K PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbXgyODNfbW9kZSBzdXBwb3J0ZWRfbW9kZXNfMTJiaXRb XSA9IHsKPiArCXsKPiArCQkvKiAyME1QaXggMjEuNDAgZnBzIHJlYWRvdXQgbW9kZSAwICovCj4g KwkJLm1vZGUgPSBJTVgyODNfTU9ERV8wLAo+ICsJCS5icHAgPSAxMiwKPiArCQkud2lkdGggPSA1 NDcyLAo+ICsJCS5oZWlnaHQgPSAzNjQ4LAo+ICsJCS5taW5faG1heCA9IDU5MTQsIC8qIDg4NyBA IDQ4ME1Iei83Mk1IeiAqLwo+ICsJCS5taW5fdm1heCA9IDM3OTMsIC8qIExpbmVzICovCj4gKwo+ ICsJCS52ZWZmID0gMzY5NCwKPiArCQkudnN0ID0gMCwKPiArCQkudmN0ID0gMCwKPiArCj4gKwkJ LmhiaW5fcmF0aW8gPSAxLAo+ICsJCS52YmluX3JhdGlvID0gMSwKPiArCj4gKwkJLyogMjAuMDAg RlBTICovCj4gKwkJLmRlZmF1bHRfaG1heCA9IDYwMDAsIC8qIDkwMCBAIDQ4ME1Iei83Mk1IeiAq Lwo+ICsJCS5kZWZhdWx0X3ZtYXggPSA0MDAwLAo+ICsKPiArCQkubWluX3NociA9IDExLAo+ICsJ CS5ob3Jpem9udGFsX29iID0gOTYsCj4gKwkJLnZlcnRpY2FsX29iID0gMTYsCj4gKwkJLmNyb3Ag PSBDRU5URVJFRF9SRUNUQU5HTEUoaW14MjgzX2FjdGl2ZV9hcmVhLCA1NDcyLCAzNjQ4KSwKPiAr CX0sCj4gKwl7Cj4gKwkJLyoKPiArCQkgKiBSZWFkb3V0IG1vZGUgMiA6IDIvMiBiaW5uZWQgbW9k ZSAoMjczNngxODI0KQo+ICsJCSAqLwo+ICsJCS5tb2RlID0gSU1YMjgzX01PREVfMiwKPiArCQku YnBwID0gMTIsCj4gKwkJLndpZHRoID0gMjczNiwKPiArCQkuaGVpZ2h0ID0gMTgyNCwKPiArCQku bWluX2htYXggPSAxODcwLCAvKiBQaXhlbHMgKDM2MiAqIDM2MC83MiArIHBhZGRpbmcpICovCj4g KwkJLm1pbl92bWF4ID0gMzg0MCwgLyogTGluZXMgKi8KPiArCj4gKwkJLyogNTAuMDAgRlBTICov Cj4gKwkJLmRlZmF1bHRfaG1heCA9IDE4NzAsIC8qIDM2MiBAIDM2ME1Iei83Mk1IeiAqLwo+ICsJ CS5kZWZhdWx0X3ZtYXggPSAzOTYwLAo+ICsKPiArCQkudmVmZiA9IDE4MjQsCj4gKwkJLnZzdCA9 IDAsCj4gKwkJLnZjdCA9IDAsCj4gKwo+ICsJCS5oYmluX3JhdGlvID0gMiwKPiArCQkudmJpbl9y YXRpbyA9IDIsCj4gKwo+ICsJCS5taW5fc2hyID0gMTIsCj4gKwkJLmhvcml6b250YWxfb2IgPSA0 OCwKPiArCQkudmVydGljYWxfb2IgPSA0LAo+ICsKPiArCQkuY3JvcCA9IENFTlRFUkVEX1JFQ1RB TkdMRShpbXgyODNfYWN0aXZlX2FyZWEsIDU0NzIsIDM2NDgpLAo+ICsJfSwKPiArfTsKPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgc3VwcG9ydGVkX21vZGVzXzEwYml0W10g PSB7Cj4gKwl7Cj4gKwkJLyogMjBNUGl4IDI1LjQ4IGZwcyByZWFkb3V0IG1vZGUgMSAqLwo+ICsJ CS5tb2RlID0gSU1YMjgzX01PREVfMSwKPiArCQkuYnBwID0gMTAsCj4gKwkJLndpZHRoID0gNTQ3 MiwKPiArCQkuaGVpZ2h0ID0gMzY0OCwKPiArCQkubWluX2htYXggPSA1OTYwLCAvKiA3NDUgQCA1 NzZNSHogLyA3Mk1IeiAqLwo+ICsJCS5taW5fdm1heCA9IDM3OTMsCj4gKwo+ICsJCS8qIDI1LjAw IEZQUyAqLwo+ICsJCS5kZWZhdWx0X2htYXggPSAxNTAwLCAvKiA3NTAgQCA1NzZNSHogLyA3Mk1I eiAqLwo+ICsJCS5kZWZhdWx0X3ZtYXggPSAzODQwLAo+ICsKPiArCQkubWluX3NociA9IDEwLAo+ ICsJCS5ob3Jpem9udGFsX29iID0gOTYsCj4gKwkJLnZlcnRpY2FsX29iID0gMTYsCj4gKwkJLmNy b3AgPSBDRU5URVJFRF9SRUNUQU5HTEUoaW14MjgzX2FjdGl2ZV9hcmVhLCA1NDcyLCAzNjQ4KSwK PiArCX0sCj4gK307Cj4gKwo+ICsvKgo+ICsgKiBUaGUgc3VwcG9ydGVkIG1idXMgZm9ybWF0cy4K PiArICovCj4gK3N0YXRpYyBjb25zdCB1MzIgY29kZXNbXSA9IHsKPiArCS8qIDEyLWJpdCBtb2Rl cy4gKi8KPiArCU1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyLAo+ICsKPiArCS8qIDEwLWJpdCBt b2Rlcy4gKi8KCkknZCBzYXkgdGhlIHRocmVlIGNvbW1lbnRzIGFyZSByZWR1bmRhbnQuCgo+ICsJ TUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTAsCj4gK307Cj4gKwo+ICsvKiByZWd1bGF0b3Igc3Vw cGxpZXMgKi8KPiArc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlteDI4M19zdXBwbHlfbmFtZVtd ID0gewo+ICsJInZhbmEiLCAvKiBBbmFsb2cgKDIuOVYpIHN1cHBseSAqLwo+ICsJInZkaWciLCAv KiBTdXBwbHkgVm9sdGFnZSAyICgxLjhWKSBzdXBwbHkgKi8KPiArCSJ2ZGRsIiwgLyogU3VwcGx5 IFZvbHRhZ2UgMyAoMS4yVikgc3VwcGx5ICovCj4gK307Cj4gKwo+ICsKPiArc3RydWN0IGlteDI4 MyB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgcmVnbWFwICpjY2k7Cj4gKwo+ ICsJY29uc3Qgc3RydWN0IGlteDI4M19pbnB1dF9mcmVxdWVuY3kgKmZyZXE7Cj4gKwo+ICsJc3Ry dWN0IHY0bDJfc3ViZGV2IHNkOwo+ICsJc3RydWN0IG1lZGlhX3BhZCBwYWQ7Cj4gKwo+ICsJdW5z aWduZWQgaW50IGZtdF9jb2RlOwo+ICsKPiArCXN0cnVjdCBjbGsgKnhjbGs7Cj4gKwo+ICsJc3Ry dWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsKPiArCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRh IHN1cHBsaWVzW0FSUkFZX1NJWkUoaW14MjgzX3N1cHBseV9uYW1lKV07Cj4gKwo+ICsJLyogVjRM MiBDb250cm9scyAqLwo+ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsK PiArCXN0cnVjdCB2NGwyX2N0cmwgKnBpeGVsX3JhdGU7Cj4gKwlzdHJ1Y3QgdjRsMl9jdHJsICps aW5rX2ZyZXE7Cj4gKwlzdHJ1Y3QgdjRsMl9jdHJsICpleHBvc3VyZTsKPiArCXN0cnVjdCB2NGwy X2N0cmwgKnZibGFuazsKPiArCXN0cnVjdCB2NGwyX2N0cmwgKmhibGFuazsKPiArCXN0cnVjdCB2 NGwyX2N0cmwgKnZmbGlwOwoKUGxlYXNlIHN0b3JlIHBvaW50ZXJzIG9ubHkgdG8gY29udHJvbHMg eW91IG5lZWQgdG8gYWNjZXNzIG91dHNpZGUgdGhlCmNvbnRyb2wgaGFuZGxlcidzIGNhbGxiYWNr cy4KCj4gKwo+ICsJc3RydWN0IG11dGV4IG11dGV4Owo+ICsKPiArCS8qIEN1cnJlbnQgbW9kZSAq Lwo+ICsJY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICptb2RlOwo+ICsKPiArCXVuc2lnbmVkIGxv bmcgbGlua19mcmVxX2JpdG1hcDsKPiArCj4gKwl1MTYgaG1heDsKPiArCXUzMiB2bWF4Owo+ICt9 Owo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaW14MjgzICp0b19pbXgyODMoc3RydWN0IHY0 bDJfc3ViZGV2ICpfc2QpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoX3NkLCBzdHJ1Y3Qg aW14MjgzLCBzZCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbW9kZV90YWJs ZSh1bnNpZ25lZCBpbnQgY29kZSwKPiArCQkJCSAgY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICoq bW9kZV9saXN0LAo+ICsJCQkJICB1bnNpZ25lZCBpbnQgKm51bV9tb2RlcykKPiArewo+ICsJc3dp dGNoIChjb2RlKSB7Cj4gKwkvKiAxMi1iaXQgKi8KPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9TUkdH QjEyXzFYMTI6Cj4gKwljYXNlIE1FRElBX0JVU19GTVRfU0dSQkcxMl8xWDEyOgo+ICsJY2FzZSBN RURJQV9CVVNfRk1UX1NHQlJHMTJfMVgxMjoKPiArCWNhc2UgTUVESUFfQlVTX0ZNVF9TQkdHUjEy XzFYMTI6Cj4gKwkJKm1vZGVfbGlzdCA9IHN1cHBvcnRlZF9tb2Rlc18xMmJpdDsKPiArCQkqbnVt X21vZGVzID0gQVJSQVlfU0laRShzdXBwb3J0ZWRfbW9kZXNfMTJiaXQpOwo+ICsJCWJyZWFrOwo+ ICsJLyogMTAtYml0ICovCgpUaGVzZSB0d28gY29tbWVudHMgc2VlbSByZWR1ZGFudCwgdG9vLgoK PiArCWNhc2UgTUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTA6Cj4gKwljYXNlIE1FRElBX0JVU19G TVRfU0dSQkcxMF8xWDEwOgo+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1NHQlJHMTBfMVgxMDoKPiAr CWNhc2UgTUVESUFfQlVTX0ZNVF9TQkdHUjEwXzFYMTA6Cj4gKwkJKm1vZGVfbGlzdCA9IHN1cHBv cnRlZF9tb2Rlc18xMGJpdDsKPiArCQkqbnVtX21vZGVzID0gQVJSQVlfU0laRShzdXBwb3J0ZWRf bW9kZXNfMTBiaXQpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQkqbW9kZV9saXN0ID0g TlVMTDsKPiArCQkqbnVtX21vZGVzID0gMDsKPiArCX0KPiArfQo+ICsKPiArLyogQ2FsY3VsYXRl IHRoZSBQaXhlbCBSYXRlIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1vZGUgKi8KPiArc3RhdGljIHU2 NCBpbXgyODNfcGl4ZWxfcmF0ZShzdHJ1Y3QgaW14MjgzICppbXgyODMpCj4gK3sKPiArCWNvbnN0 IHN0cnVjdCBpbXgyODNfbW9kZSAqbW9kZSA9IGlteDI4My0+bW9kZTsKPiArCXVuc2lnbmVkIGlu dCBicHAgPSBtb2RlLT5icHA7Cj4gKwo+ICsJY29uc3QgdW5zaWduZWQgaW50IGRkciA9IDI7IC8q IERvdWJsZSBEYXRhIFJhdGUgKi8KPiArCWNvbnN0IHVuc2lnbmVkIGludCBsYW5lcyA9IDQ7IC8q IE9ubHkgNCBsYW5lIHN1cHBvcnQgKi8KPiArCgpFeHRyYSBuZXdsaW5lcy4KCj4gKwl1NjQgbGlu a19mcmVxdWVuY3kgPSBsaW5rX2ZyZXF1ZW5jaWVzW19fZmZzKGlteDI4My0+bGlua19mcmVxX2Jp dG1hcCldOwo+ICsJdTY0IHBpeGVsX3JhdGUgPSBsaW5rX2ZyZXF1ZW5jeSAqIGRkciAqIGxhbmVz IC8gYnBwOwoKCXJldHVybiAuLi47Cgo+ICsKPiArCXJldHVybiBwaXhlbF9yYXRlOwo+ICt9Cj4g Kwo+ICsvKiBDb252ZXJ0IGZyb20gYSB2YXJpYWJsZSBwaXhlbF9yYXRlIHRvIDcyIE1IeiBjbG9j ayBjeWNsZXMgKi8KPiArc3RhdGljIHU2NCBpbXgyODNfaW50ZXJuYWxfY2xvY2sodW5zaWduZWQg aW50IHBpeGVsX3JhdGUsIHVuc2lnbmVkIGludCBwaXhlbHMpCj4gK3sKPiArCS8qCj4gKwkgKiBE ZXRlcm1pbmUgdGhlIGZvbGxvd2luZyBvcGVyYXRpb24gd2l0aG91dCBvdmVyZmxvdzoKPiArCSAq ICAgIHBpeGVscyAqIE1IWig3MikgLyBwaXhlbF9yYXRlCj4gKwkgKgo+ICsJICogVGhlIGludGVy bmFsIGNsb2NrIGF0IDcyTUh6IGFuZCBQaXhlbCBSYXRlIChiZXR3ZWVuIDI0MCBhbmQgNTc2TUh6 KQo+ICsJICogY2FuIGVhc2lseSBvdmVyZmxvdyB0aGlzIGNhbGN1bGF0aW9uLCBzbyBwcmUtZGl2 aWRlIHRvIHNpbXBsaWZ5Lgo+ICsJICovCj4gKwljb25zdCB1MzIgaWNsa19wcmUgPSBNSFooNzIp IC8gMTAwMDAwMDsKPiArCWNvbnN0IHUzMiBwY2xrX3ByZSA9IHBpeGVsX3JhdGUgLyAxMDAwMDAw Owo+ICsKPiArCXJldHVybiBwaXhlbHMgKiBpY2xrX3ByZSAvIHBjbGtfcHJlOwo+ICt9Cj4gKwo+ ICsvKiBJbnRlcm5hbCBjbG9jayAoNzJNSHopIHRvIFBpeGVsIFJhdGUgY2xvY2sgKFZhcmlhYmxl KSAqLwo+ICtzdGF0aWMgdTY0IGlteDI4M19pY2xrX3RvX3BpeCh1bnNpZ25lZCBpbnQgcGl4ZWxf cmF0ZSwgdW5zaWduZWQgaW50IGN5Y2xlcykKPiArewo+ICsJLyoKPiArCSAqIERldGVybWluZSB0 aGUgZm9sbG93aW5nIG9wZXJhdGlvbiB3aXRob3V0IG92ZXJmbG93Ogo+ICsJICogICAgY3ljbGVz ICogcGl4ZWxfcmF0ZSAvIE1IWig3MikKPiArCSAqCj4gKwkgKiBUaGUgaW50ZXJuYWwgY2xvY2sg YXQgNzJNSHogYW5kIFBpeGVsIFJhdGUgKGJldHdlZW4gMjQwIGFuZCA1NzZNSHopCj4gKwkgKiBj YW4gZWFzaWx5IG92ZXJmbG93IHRoaXMgY2FsY3VsYXRpb24sIHNvIHByZS1kaXZpZGUgdG8gc2lt cGxpZnkuCj4gKwkgKi8KPiArCWNvbnN0IHUzMiBpY2xrX3ByZSA9IE1IWig3MikgLyAxMDAwMDAw Owo+ICsJY29uc3QgdTMyIHBjbGtfcHJlID0gcGl4ZWxfcmF0ZSAvIDEwMDAwMDA7Cj4gKwo+ICsJ cmV0dXJuIGN5Y2xlcyAqIHBjbGtfcHJlIC8gaWNsa19wcmU7Cj4gK30KPiArCj4gKy8qIERldGVy bWluZSB0aGUgZXhwb3N1cmUgYmFzZWQgb24gY3VycmVudCBobWF4LCB2bWF4IGFuZCBhIGdpdmVu IFNIUiAqLwo+ICtzdGF0aWMgdTY0IGlteDI4M19leHBvc3VyZShzdHJ1Y3QgaW14MjgzICppbXgy ODMsIHU2NCBzaHIpCj4gK3sKPiArCXUzMiBzdnIgPSAwOyAvKiBTVlIgZmVhdHVyZSBpcyBub3Qg Y3VycmVudGx5IHN1cHBvcnRlZCAqLwo+ICsJdTMyIGhtYXggPSBpbXgyODMtPmhtYXg7Cj4gKwl1 NjQgdm1heCA9IGlteDI4My0+dm1heDsKPiArCXUzMiBvZmZzZXQ7Cj4gKwl1NjQgbnVtZXJhdG9y Owo+ICsKPiArCS8qIE51bWJlciBvZiBjbG9ja3MgcGVyIGludGVybmFsIG9mZnNldCBwZXJpb2Qg Ki8KPiArCW9mZnNldCA9IGlteDI4My0+bW9kZS0+bW9kZSA9PSBJTVgyODNfTU9ERV8wID8gMjA5 IDogMTU3Owo+ICsJbnVtZXJhdG9yID0gKHZtYXggKiAoc3ZyICsgMSkgLSBzaHIpICogaG1heCAr IG9mZnNldDsKPiArCj4gKwlkb19kaXYobnVtZXJhdG9yLCBobWF4KTsKPiArCW51bWVyYXRvciA9 IGNsYW1wX3QodTMyLCBudW1lcmF0b3IsIDAsIDB4RkZGRkZGRkYpOwo+ICsJcmV0dXJuIG51bWVy YXRvcjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW14MjgzX2V4cG9zdXJlX2xpbWl0cyhzdHJ1 Y3QgaW14MjgzICppbXgyODMsCj4gKwkJCQkgICB1NjQgKm1pbl9leHBvc3VyZSwgdTY0ICptYXhf ZXhwb3N1cmUpCj4gK3sKPiArCXU2NCB2bWF4ID0gaW14MjgzLT52bWF4Owo+ICsJdTMyIHN2ciA9 IDA7IC8qIFNWUiBmZWF0dXJlIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkICovCj4gKwl1NjQg bWluX3NociA9IGlteDI4My0+bW9kZS0+bWluX3NocjsKPiArCXU2NCBtYXhfc2hyID0gKHN2ciAr IDEpICogdm1heCAtIDQ7IC8qIEdsb2JhbCBTaHV0dGVyIGlzIG5vdCBzdXBwb3J0ZWQgKi8KPiAr Cj4gKwltYXhfc2hyID0gbWluX3QodTY0LCBtYXhfc2hyLCAweEZGRkYpOwo+ICsKPiArCSptaW5f ZXhwb3N1cmUgPSBpbXgyODNfZXhwb3N1cmUoaW14MjgzLCBtYXhfc2hyKTsKPiArCSptYXhfZXhw b3N1cmUgPSBpbXgyODNfZXhwb3N1cmUoaW14MjgzLCBtaW5fc2hyKTsKPiArfQo+ICsKPiArLyoK PiArICogSW50ZWdyYXRpb24gVGltZSBbc10gPSBbe1ZNQVggeCAoU1ZSICsgMSkg4oCTIChTSFIp fSB4IEhNQVggKyBvZmZzZXRdCj4gKyAqICAgICAgICAgICAgICAgICAgICAgIC8gKDcyIHggMTBe NikKPiArICovCj4gK3N0YXRpYyB1MzIgaW14MjgzX3NocihzdHJ1Y3QgaW14MjgzICppbXgyODMs IHUzMiBleHBvc3VyZSkKPiArewo+ICsJdTMyIHN2ciA9IDA7IC8qIFNWUiBmZWF0dXJlIGlzIG5v dCBjdXJyZW50bHkgc3VwcG9ydGVkICovCj4gKwl1MzIgaG1heCA9IGlteDI4My0+aG1heDsKPiAr CXU2NCB2bWF4ID0gaW14MjgzLT52bWF4Owo+ICsJdTMyIHNocjsKPiArCXU2NCB0ZW1wOwo+ICsK PiArCS8qIE51bWJlciBvZiBjbG9ja3MgcGVyIGludGVybmFsIG9mZnNldCBwZXJpb2QgKi8KPiAr CXUzMiBvZmZzZXQgPSBpbXgyODMtPm1vZGUtPm1vZGUgPT0gSU1YMjgzX01PREVfMCA/IDIwOSA6 IDE1NzsKPiArCj4gKwl0ZW1wID0gKCh1NjQpZXhwb3N1cmUgKiBobWF4IC0gb2Zmc2V0KTsKPiAr CWRvX2Rpdih0ZW1wLCBobWF4KTsKPiArCXNociA9ICh1MzIpKHZtYXggKiAoc3ZyICsgMSkgLSB0 ZW1wKTsKPiArCj4gKwlyZXR1cm4gc2hyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAq IGNvbnN0IGlteDI4M190cGdfbWVudVtdID0gewo+ICsJIkRpc2FibGVkIiwKPiArCSJBbGwgMDAw aCIsCj4gKwkiQWxsIEZGRmgiLAo+ICsJIkFsbCA1NTVoIiwKPiArCSJBbGwgQUFBaCIsCj4gKwki SG9yaXpvbnRhbCBjb2xvciBiYXJzIiwKPiArCSJWZXJ0aWNhbCBjb2xvciBiYXJzIiwKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBpbnQgaW14MjgzX3RwZ192YWxbXSA9IHsKPiArCUlNWDI4M19U UEdfUEFUX0FMTF8wMDAsCj4gKwlJTVgyODNfVFBHX1BBVF9BTExfMDAwLAo+ICsJSU1YMjgzX1RQ R19QQVRfQUxMX0ZGRiwKPiArCUlNWDI4M19UUEdfUEFUX0FMTF81NTUsCj4gKwlJTVgyODNfVFBH X1BBVF9BTExfQUFBLAo+ICsJSU1YMjgzX1RQR19QQVRfSF9DT0xPUl9CQVJTLAo+ICsJSU1YMjgz X1RQR19QQVRfVl9DT0xPUl9CQVJTLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBpbXgyODNfdXBk YXRlX3Rlc3RfcGF0dGVybihzdHJ1Y3QgaW14MjgzICppbXgyODMsIHUzMiBwYXR0ZXJuX2luZGV4 KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChwYXR0ZXJuX2luZGV4ID49IEFSUkFZX1NJ WkUoaW14MjgzX3RwZ192YWwpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmIChwYXR0 ZXJuX2luZGV4KSB7Cj4gKwkJcmV0ID0gY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVH X1RQR19QQVQsCj4gKwkJCQlpbXgyODNfdHBnX3ZhbFtwYXR0ZXJuX2luZGV4XSwgTlVMTCk7Cj4g KwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJcmV0ID0gY2NpX3dyaXRlKGlt eDI4My0+Y2NpLCBJTVgyODNfUkVHX1RQR19DVFJMLAo+ICsJCQkJSU1YMjgzX1RQR19DVFJMX0NM S0VOIHwgSU1YMjgzX1RQR19DVFJMX1BBVEVOLCBOVUxMKTsKPiArCX0gZWxzZSB7Cj4gKwkJcmV0 ID0gY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1RQR19DVFJMLCAweDAwLCBOVUxM KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlteDI4 M19zZXRfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQo+ICt7Cj4gKwlzdHJ1Y3QgaW14Mjgz ICppbXgyODMgPSBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IGlteDI4MywKPiAr CQkJCQkgICAgIGN0cmxfaGFuZGxlcik7Cj4gKwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1v ZGUgPSBpbXgyODMtPm1vZGU7Cj4gKwl1NjQgc2hyLCBwaXhlbF9yYXRlOwo+ICsJaW50IHJldCA9 IDA7Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSBWQkxBTksgY29udHJvbCBtYXkgY2hhbmdlIHRoZSBs aW1pdHMgb2YgdXNhYmxlIGV4cG9zdXJlLCBzbyBjaGVjawo+ICsJICogYW5kIGFkanVzdCBpZiBu ZWNlc3NhcnkuCj4gKwkgKi8KPiArCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9WQkxBTkspIHsK PiArCQkvKiBIb25vdXIgdGhlIFZCTEFOSyBsaW1pdHMgd2hlbiBzZXR0aW5nIGV4cG9zdXJlLiAq Lwo+ICsJCXU2NCBjdXJyZW50X2V4cG9zdXJlLCBtYXhfZXhwb3N1cmUsIG1pbl9leHBvc3VyZTsK PiArCj4gKwkJaW14MjgzLT52bWF4ID0gbW9kZS0+aGVpZ2h0ICsgY3RybC0+dmFsOwo+ICsKPiAr CQlpbXgyODNfZXhwb3N1cmVfbGltaXRzKGlteDI4MywgJm1pbl9leHBvc3VyZSwgJm1heF9leHBv c3VyZSk7Cj4gKwo+ICsJCWN1cnJlbnRfZXhwb3N1cmUgPSBpbXgyODMtPmV4cG9zdXJlLT52YWw7 Cj4gKwkJY3VycmVudF9leHBvc3VyZSA9IGNsYW1wX3QodTMyLCBjdXJyZW50X2V4cG9zdXJlLCBt aW5fZXhwb3N1cmUsCj4gKwkJCQkJICAgbWF4X2V4cG9zdXJlKTsKPiArCj4gKwkJX192NGwyX2N0 cmxfbW9kaWZ5X3JhbmdlKGlteDI4My0+ZXhwb3N1cmUsIG1pbl9leHBvc3VyZSwKPiArCQkJCQkg bWF4X2V4cG9zdXJlLCAxLCBjdXJyZW50X2V4cG9zdXJlKTsKPiArCX0KPiArCj4gKwkvKgo+ICsJ ICogQXBwbHlpbmcgVjRMMiBjb250cm9sIHZhbHVlIG9ubHkgaGFwcGVucwo+ICsJICogd2hlbiBw b3dlciBpcyB1cCBmb3Igc3RyZWFtaW5nCj4gKwkgKi8KPiArCWlmIChwbV9ydW50aW1lX2dldF9p Zl9pbl91c2UoaW14MjgzLT5kZXYpID09IDApCgpBcyB5b3UncmUgdXNpbmcgYXV0b3N1c3BlbmQs IHlvdSBzaG91bGQgdXNlIHRoZSBpZl9hY3RpdmUgdmFyaWFudCBoZXJlLgoKPiArCQlyZXR1cm4g MDsKPiArCj4gKwlzd2l0Y2ggKGN0cmwtPmlkKSB7Cj4gKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJF Ogo+ICsJCXNociA9IGlteDI4M19zaHIoaW14MjgzLCBjdHJsLT52YWwpOwo+ICsJCWRldl9kYmco aW14MjgzLT5kZXYsICJWNEwyX0NJRF9FWFBPU1VSRSA6ICVkIC0gU0hSOiAlbGxkXG4iLAo+ICsJ CQljdHJsLT52YWwsIHNocik7Cj4gKwkJcmV0ID0gY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgy ODNfUkVHX1NIUiwgc2hyLCBOVUxMKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFY0TDJfQ0lE X0hCTEFOSzoKPiArCQlwaXhlbF9yYXRlID0gaW14MjgzX3BpeGVsX3JhdGUoaW14MjgzKTsKPiAr CQlpbXgyODMtPmhtYXggPSBpbXgyODNfaW50ZXJuYWxfY2xvY2socGl4ZWxfcmF0ZSwgbW9kZS0+ d2lkdGggKyBjdHJsLT52YWwpOwo+ICsJCWRldl9kYmcoaW14MjgzLT5kZXYsICJWNEwyX0NJRF9I QkxBTksgOiAlZCAgSE1BWCA6ICVkXG4iLAo+ICsJCQljdHJsLT52YWwsIGlteDI4My0+aG1heCk7 Cj4gKwkJcmV0ID0gY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX0hNQVgsIGlteDI4 My0+aG1heCwgTlVMTCk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBWNEwyX0NJRF9WQkxBTks6 Cj4gKwkJaW14MjgzLT52bWF4ID0gbW9kZS0+aGVpZ2h0ICsgY3RybC0+dmFsOwo+ICsJCWRldl9k YmcoaW14MjgzLT5kZXYsICJWNEwyX0NJRF9WQkxBTksgOiAlZCAgVk1BWCA6ICVkXG4iLAo+ICsJ CQljdHJsLT52YWwsIGlteDI4My0+dm1heCk7Cj4gKwkJcmV0ID0gY2NpX3dyaXRlKGlteDI4My0+ Y2NpLCBJTVgyODNfUkVHX1ZNQVgsIGlteDI4My0+dm1heCwgTlVMTCk7Cj4gKwkJYnJlYWs7Cj4g Kwo+ICsJY2FzZSBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOOgo+ICsJCXJldCA9IGNjaV93cml0ZShp bXgyODMtPmNjaSwgSU1YMjgzX1JFR19BTkFMT0dfR0FJTiwgY3RybC0+dmFsLCBOVUxMKTsKPiAr CQlicmVhazsKPiArCj4gKwljYXNlIFY0TDJfQ0lEX0RJR0lUQUxfR0FJTjoKPiArCQlyZXQgPSBj Y2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfRElHSVRBTF9HQUlOLCBjdHJsLT52YWws IE5VTEwpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgVjRMMl9DSURfVkZMSVA6Cj4gKwkJLyoK PiArCQkgKiBWRkxJUCBpcyBtYW5hZ2VkIGJ5IEJJVCgwKSBvZiBJTVgyODNfUkVHX0hUUklNTUlO RyBhZGRyZXNzLCBoZW5jZQo+ICsJCSAqIGJvdGggbmVlZGVkIHRvIGJlIHNldCBzaW11bGF0ZW5v dXNseS4KPiArCQkgKi8KPiArCQlpZiAoY3RybC0+dmFsKSB7Cj4gKwkJCWNjaV93cml0ZShpbXgy ODMtPmNjaSwgSU1YMjgzX1JFR19IVFJJTU1JTkcsCj4gKwkJCQkgIElNWDI4M19IVFJJTU1JTkdf RU4gfCBJTVgyODNfTURWUkVWLCAmcmV0KTsKPiArCQl9IGVsc2Ugewo+ICsJCQljY2lfd3JpdGUo aW14MjgzLT5jY2ksIElNWDI4M19SRUdfSFRSSU1NSU5HLAo+ICsJCQkJICBJTVgyODNfSFRSSU1N SU5HX0VOLCAmcmV0KTsKPiArCQl9Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBWNEwyX0NJRF9U RVNUX1BBVFRFUk46Cj4gKwkJcmV0ID0gaW14MjgzX3VwZGF0ZV90ZXN0X3BhdHRlcm4oaW14Mjgz LCBjdHJsLT52YWwpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWRlZmF1bHQ6Cj4gKwkJZGV2X2Vycihp bXgyODMtPmRldiwgImN0cmwoaWQ6MHgleCwgdmFsOjB4JXgpIGlzIG5vdCBoYW5kbGVkXG4iLAo+ ICsJCQljdHJsLT5pZCwgY3RybC0+dmFsKTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlwbV9y dW50aW1lX3B1dChpbXgyODMtPmRldik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIGlteDI4M19jdHJsX29wcyA9IHsKPiAr CS5zX2N0cmwgPSBpbXgyODNfc2V0X2N0cmwsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGlteDI4 M19lbnVtX21idXNfY29kZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAo+ICsJCQkJIHN0cnVjdCB2 NGwyX3N1YmRldl9zdGF0ZSAqc2Rfc3RhdGUsCj4gKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X21i dXNfY29kZV9lbnVtICpjb2RlKQo+ICt7Cj4gKwlpZiAoY29kZS0+aW5kZXggPj0gKEFSUkFZX1NJ WkUoY29kZXMpKSkKCkV4dHJhIHBhcmVudGhlc2VzLgoKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr Cj4gKwljb2RlLT5jb2RlID0gY29kZXNbY29kZS0+aW5kZXhdOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlteDI4M19lbnVtX2ZyYW1lX3NpemUoc3RydWN0IHY0bDJf c3ViZGV2ICpzZCwKPiArCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzZF9zdGF0ZSwK PiArCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX3NpemVfZW51bSAqZnNlKQo+ICt7Cj4g Kwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGVfbGlzdDsKPiArCXVuc2lnbmVkIGludCBu dW1fbW9kZXM7Cj4gKwo+ICsJZ2V0X21vZGVfdGFibGUoZnNlLT5jb2RlLCAmbW9kZV9saXN0LCAm bnVtX21vZGVzKTsKPiArCj4gKwlpZiAoZnNlLT5pbmRleCA+PSBudW1fbW9kZXMpCj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwo+ICsJZnNlLT5taW5fd2lkdGggPSBtb2RlX2xpc3RbZnNlLT5pbmRl eF0ud2lkdGg7Cj4gKwlmc2UtPm1heF93aWR0aCA9IGZzZS0+bWluX3dpZHRoOwo+ICsJZnNlLT5t aW5faGVpZ2h0ID0gbW9kZV9saXN0W2ZzZS0+aW5kZXhdLmhlaWdodDsKPiArCWZzZS0+bWF4X2hl aWdodCA9IGZzZS0+bWluX2hlaWdodDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgaW14MjgzX3Jlc2V0X2NvbG9yc3BhY2Uoc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZt dCAqZm10KQo+ICt7Cj4gKwlmbXQtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfUkFXOwo+ ICsJZm10LT55Y2Jjcl9lbmMgPSBWNEwyX01BUF9ZQ0JDUl9FTkNfREVGQVVMVChmbXQtPmNvbG9y c3BhY2UpOwo+ICsJZm10LT5xdWFudGl6YXRpb24gPSBWNEwyX01BUF9RVUFOVElaQVRJT05fREVG QVVMVCh0cnVlLCBmbXQtPmNvbG9yc3BhY2UsCj4gKwkJCQkJCQkgIGZtdC0+eWNiY3JfZW5jKTsK PiArCWZtdC0+eGZlcl9mdW5jID0gVjRMMl9NQVBfWEZFUl9GVU5DX0RFRkFVTFQoZm10LT5jb2xv cnNwYWNlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW14MjgzX3VwZGF0ZV9pbWFnZV9wYWRf Zm9ybWF0KHN0cnVjdCBpbXgyODMgKmlteDI4MywKPiArCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW14 MjgzX21vZGUgKm1vZGUsCj4gKwkJCQkJICAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm9y bWF0KQo+ICt7Cj4gKwlmb3JtYXQtPndpZHRoID0gbW9kZS0+d2lkdGg7Cj4gKwlmb3JtYXQtPmhl aWdodCA9IG1vZGUtPmhlaWdodDsKPiArCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7 Cj4gKwlpbXgyODNfcmVzZXRfY29sb3JzcGFjZShmb3JtYXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGlteDI4M19pbml0X3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCj4gKwkJCSAgICAg c3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IGlteDI4MyAq aW14MjgzID0gdG9faW14MjgzKHNkKTsKPiArCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZv cm1hdDsKPiArCWNvbnN0IHN0cnVjdCBpbXgyODNfbW9kZSAqbW9kZTsKPiArCXN0cnVjdCB2NGwy X3JlY3QgKmNyb3A7Cj4gKwo+ICsJLyogSW5pdGlhbGl6ZSB0cnlfZm10ICovCj4gKwlmb3JtYXQg PSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHN0YXRlLCBJTUFHRV9QQUQpOwo+ICsKPiAr CW1vZGUgPSAmc3VwcG9ydGVkX21vZGVzXzEyYml0WzBdOwo+ICsJaW14MjgzLT5tb2RlID0gbW9k ZTsKPiArCWZvcm1hdC0+Y29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyOwo+ICsJaW14 MjgzX3VwZGF0ZV9pbWFnZV9wYWRfZm9ybWF0KGlteDI4MywgbW9kZSwgZm9ybWF0KTsKPiArCj4g KwkvKiBJbml0aWFsaXplIGNyb3AgcmVjdGFuZ2xlIHRvIG1vZGUgZGVmYXVsdCAqLwo+ICsJY3Jv cCA9IHY0bDJfc3ViZGV2X3N0YXRlX2dldF9jcm9wKHN0YXRlLCBJTUFHRV9QQUQpOwo+ICsJKmNy b3AgPSBtb2RlLT5jcm9wOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBpbXgyODNfc2V0X2ZyYW1pbmdfbGltaXRzKHN0cnVjdCBpbXgyODMgKmlteDI4MykKPiArewo+ ICsJY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICptb2RlID0gaW14MjgzLT5tb2RlOwo+ICsJdTY0 IHBpeGVsX3JhdGUgPSBpbXgyODNfcGl4ZWxfcmF0ZShpbXgyODMpOwo+ICsJdTY0IG1pbl9oYmxh bmssIG1heF9oYmxhbmssIGRlZl9oYmxhbms7Cj4gKwo+ICsJLyoKPiArCSAqIEluaXRpYWxpc2Ug aG1heCBhbmQgdm1heCBmb3IgZXhwb3N1cmUgY2FsY3VsYXRpb25zCj4gKwkgKi8KCgkvKiBTaW5n bGUtbGluZSBjb21tZW50ICovCgo+ICsJaW14MjgzLT5obWF4ID0gaW14MjgzX2ludGVybmFsX2Ns b2NrKHBpeGVsX3JhdGUsIG1vZGUtPmRlZmF1bHRfaG1heCk7Cj4gKwlpbXgyODMtPnZtYXggPSBt b2RlLT5kZWZhdWx0X3ZtYXg7Cj4gKwo+ICsJLyoKPiArCSAqIEhvcml6b250YWwgQmxhbmtpbmcK PiArCSAqIENvbnZlcnQgdGhlIEhNQVhfTUFYICg3Mk1IeikgdG8gUGl4ZWwgcmF0ZSB2YWx1ZXMg Zm9yIEhCTEFOS19NQVgKPiArCSAqLwo+ICsJbWluX2hibGFuayA9IG1vZGUtPm1pbl9obWF4IC0g bW9kZS0+d2lkdGg7Cj4gKwltYXhfaGJsYW5rID0gaW14MjgzX2ljbGtfdG9fcGl4KHBpeGVsX3Jh dGUsIElNWDI4M19ITUFYX01BWCkgLSBtb2RlLT53aWR0aDsKPiArCWRlZl9oYmxhbmsgPSBtb2Rl LT5kZWZhdWx0X2htYXggLSBtb2RlLT53aWR0aDsKPiArCV9fdjRsMl9jdHJsX21vZGlmeV9yYW5n ZShpbXgyODMtPmhibGFuaywgbWluX2hibGFuaywgbWF4X2hibGFuaywgMSwKPiArCQkJCSBkZWZf aGJsYW5rKTsKPiArCV9fdjRsMl9jdHJsX3NfY3RybChpbXgyODMtPmhibGFuaywgZGVmX2hibGFu ayk7Cj4gKwo+ICsJLyogVmVydGljYWwgQmxhbmtpbmcgKi8KPiArCV9fdjRsMl9jdHJsX21vZGlm eV9yYW5nZShpbXgyODMtPnZibGFuaywgbW9kZS0+bWluX3ZtYXggLSBtb2RlLT5oZWlnaHQsCj4g KwkJCQkgSU1YMjgzX1ZNQVhfTUFYIC0gbW9kZS0+aGVpZ2h0LCAxLAo+ICsJCQkJIG1vZGUtPmRl ZmF1bHRfdm1heCAtIG1vZGUtPmhlaWdodCk7Cj4gKwlfX3Y0bDJfY3RybF9zX2N0cmwoaW14Mjgz LT52YmxhbmssIG1vZGUtPmRlZmF1bHRfdm1heCAtIG1vZGUtPmhlaWdodCk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgaW14MjgzX3NldF9wYWRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2Qs Cj4gKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X3N0YXRlICpzZF9zdGF0ZSwKPiArCQkJCSBzdHJ1 Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpCj4gK3sKPiArCXN0cnVjdCB2NGwyX21idXNfZnJh bWVmbXQgKmZvcm1hdDsKPiArCWNvbnN0IHN0cnVjdCBpbXgyODNfbW9kZSAqbW9kZTsKPiArCXN0 cnVjdCBpbXgyODMgKmlteDI4MyA9IHRvX2lteDI4MyhzZCk7Cj4gKwljb25zdCBzdHJ1Y3QgaW14 MjgzX21vZGUgKm1vZGVfbGlzdDsKPiArCXVuc2lnbmVkIGludCBudW1fbW9kZXM7Cj4gKwo+ICsJ Z2V0X21vZGVfdGFibGUoZm10LT5mb3JtYXQuY29kZSwgJm1vZGVfbGlzdCwgJm51bV9tb2Rlcyk7 Cj4gKwo+ICsJbW9kZSA9IHY0bDJfZmluZF9uZWFyZXN0X3NpemUobW9kZV9saXN0LCBudW1fbW9k ZXMsIHdpZHRoLCBoZWlnaHQsCj4gKwkJCQkgICAgICBmbXQtPmZvcm1hdC53aWR0aCwgZm10LT5m b3JtYXQuaGVpZ2h0KTsKPiArCj4gKwlpbXgyODNfdXBkYXRlX2ltYWdlX3BhZF9mb3JtYXQoaW14 MjgzLCBtb2RlLCAmZm10LT5mb3JtYXQpOwo+ICsKPiArCWZvcm1hdCA9IHY0bDJfc3ViZGV2X3N0 YXRlX2dldF9mb3JtYXQoc2Rfc3RhdGUsIDApOwo+ICsKPiArCWlmIChpbXgyODMtPm1vZGUgPT0g bW9kZSAmJiBmb3JtYXQtPmNvZGUgPT0gZm10LT5mb3JtYXQuY29kZSkKPiArCQlyZXR1cm4gMDsK PiArCj4gKwlpZiAoZm10LT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFKSB7Cj4g KwkJaW14MjgzLT5tb2RlID0gbW9kZTsKPiArCQlpbXgyODMtPmZtdF9jb2RlID0gZm10LT5mb3Jt YXQuY29kZTsKClRoZSBjb2RlIGlzIGF2YWlsYWJsZSBpbiBzdWItZGV2aWNlIHN0YXRlLgoKPiAr CQlpbXgyODNfc2V0X2ZyYW1pbmdfbGltaXRzKGlteDI4Myk7Cj4gKwl9Cj4gKwo+ICsJKmZvcm1h dCA9IGZtdC0+Zm9ybWF0Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGlteDI4M19zdGFuZGJ5X2NhbmNlbChzdHJ1Y3QgaW14MjgzICppbXgyODMpCj4gK3sKPiArCWlu dCByZXQgPSAwOwo+ICsJdW5zaWduZWQgaW50IGxpbmtfZnJlcV9pZHg7CgpQbGVhc2UgZGVjbGFy ZSByZXQgYXMgbGFzdC4KCj4gKwo+ICsJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVH X1NUQU5EQlksCj4gKwkJICBJTVgyODNfU1RCTE9HSUMgfCBJTVgyODNfU1RCRFYsICZyZXQpOwo+ ICsKPiArCS8qIENvbmZpZ3VyZSBQTEwgY2xvY2tzIGJhc2VkIG9uIHRoZSB4Y2xrICovCj4gKwlj Y2lfbXVsdGlfcmVnX3dyaXRlKGlteDI4My0+Y2NpLCBpbXgyODMtPmZyZXEtPnJlZ3MsCj4gKwkJ CSAgICBpbXgyODMtPmZyZXEtPnJlZ19jb3VudCwgJnJldCk7Cj4gKwo+ICsJZGV2X2RiZyhpbXgy ODMtPmRldiwgIlVzaW5nIGNsayBmcmVxICVkIE1IeiIsIGlteDI4My0+ZnJlcS0+bWh6IC8gTUha KDEpKTsKPiArCj4gKwkvKiBJbml0aWFsaXNlIGNvbW11bmljYXRpb24gKi8KPiArCWNjaV93cml0 ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19QTFNUTUcwOCwgSU1YMjgzX1BMU1RNRzA4X1ZBTCwg JnJldCk7Cj4gKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfUExTVE1HMDIsIElN WDI4M19QTFNUTUcwMl9WQUwsICZyZXQpOwo+ICsKPiArCS8qIEVuYWJsZSBQTEwgKi8KPiArCWNj aV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19TVEJQTCwgSU1YMjgzX1NUQlBMX05PUk1B TCwgJnJldCk7Cj4gKwo+ICsJLyogQ29uZmlndXJlIHRoZSBNSVBJIGxpbmsgc3BlZWQgKi8KPiAr CWxpbmtfZnJlcV9pZHggPSBfX2ZmcyhpbXgyODMtPmxpbmtfZnJlcV9iaXRtYXApOwo+ICsJY2Np X211bHRpX3JlZ193cml0ZShpbXgyODMtPmNjaSwKPiArCQkJICAgIGxpbmtfZnJlcV9yZWdsaXN0 W2xpbmtfZnJlcV9pZHhdLnJlZ3MsCj4gKwkJCSAgICBsaW5rX2ZyZXFfcmVnbGlzdFtsaW5rX2Zy ZXFfaWR4XS5udW1fb2ZfcmVncywKPiArCQkJICAgICZyZXQpOwo+ICsKPiArCXVzbGVlcF9yYW5n ZSgxMDAwLCAyMDAwKTsgLyogMXN0IFN0YWJpbGlzYXRpb24gcGVyaW9kIG9mIDEgbXMgb3IgbW9y ZSAqLwo+ICsKPiArCS8qIEFjdGl2YXRlICovCj4gKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElN WDI4M19SRUdfU1RBTkRCWSwgSU1YMjgzX0FDVElWRSwgJnJldCk7Cj4gKwl1c2xlZXBfcmFuZ2Uo MTkwMDAsIDIwMDAwKTsgLyogMm5kIFN0YWJpbGlzYXRpb24gcGVyaW9kIG9mIDE5bXMgb3IgbW9y ZSAqLwo+ICsKPiArCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19DTEFNUCwgSU1Y MjgzX0NMUFNRUlNULCAmcmV0KTsKPiArCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JF R19YTVNUQSwgMCwgJnJldCk7Cj4gKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdf U1lOQ0RSViwgSU1YMjgzX1NZTkNEUlZfWEhTX1hWUywgJnJldCk7Cj4gKwo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArLyogU3RhcnQgc3RyZWFtaW5nICovCj4gK3N0YXRpYyBpbnQgaW14Mjgz X3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgaW14MjgzICppbXgyODMsCj4gKwkJCQkgIHN0cnVjdCB2 NGwyX3N1YmRldl9zdGF0ZSAqc3RhdGUpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBpbXgyODNfcmVh ZG91dF9tb2RlICpyZWFkb3V0Owo+ICsJY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICptb2RlID0g aW14MjgzLT5tb2RlOwo+ICsJdTMyIHZfd2lkY3V0Owo+ICsJczMyIHZfcG9zOwo+ICsJdTMyIHdy aXRlX3Zfc2l6ZTsKPiArCXUzMiB5X291dF9zaXplOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQg PSBpbXgyODNfc3RhbmRieV9jYW5jZWwoaW14MjgzKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZf ZXJyKGlteDI4My0+ZGV2LCAiZmFpbGVkIHRvIGNhbmNlbCBzdGFuZGJ5XG4iKTsKPiArCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBTZXQgdGhlIHJlYWRvdXQgbW9kZSByZWdp c3RlcnMuCj4gKwkgKiBNRFNFTDMgYW5kIE1EU0VMNCBhcmUgdXBkYXRlZCB0byBlbmFibGUgQXJi aXRyYXJ5IFZlcnRpY2FsIENyb3BwaW5nLgo+ICsJICovCj4gKwlyZWFkb3V0ID0gJmlteDI4M19y ZWFkb3V0X21vZGVzW2lteDI4My0+bW9kZS0+bW9kZV07Cj4gKwljY2lfd3JpdGUoaW14MjgzLT5j Y2ksIElNWDI4M19SRUdfTURTRUwxLCByZWFkb3V0LT5tZHNlbDEsICZyZXQpOwo+ICsJY2NpX3dy aXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX01EU0VMMiwgcmVhZG91dC0+bWRzZWwyLCAmcmV0 KTsKPiArCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19NRFNFTDMsCj4gKwkJICBy ZWFkb3V0LT5tZHNlbDMgfCBJTVgyODNfTURTRUwzX1ZDUk9QX0VOLCAmcmV0KTsKPiArCWNjaV93 cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19NRFNFTDQsCj4gKwkJICByZWFkb3V0LT5tZHNl bDQgfCBJTVgyODNfTURTRUw0X1ZDUk9QX0VOLCAmcmV0KTsKPiArCj4gKwkvKiBNb2RlIDFTIHNw ZWNpZmljIGVudHJpZXMgZnJvbSB0aGUgUmVhZG91dCBEcml2ZSBNb2RlIFRhYmxlcyAqLwo+ICsJ aWYgKG1vZGUtPm1vZGUgPT0gSU1YMjgzX01PREVfMVMpIHsKPiArCQljY2lfd3JpdGUoaW14Mjgz LT5jY2ksIElNWDI4M19SRUdfTURTRUw3LCAweDAxLCAmcmV0KTsKPiArCQljY2lfd3JpdGUoaW14 MjgzLT5jY2ksIElNWDI4M19SRUdfTURTRUwxOCwgMHgxMDk4LCAmcmV0KTsKPiArCX0KPiArCj4g KwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihpbXgyODMtPmRldiwgIiVzIGZhaWxlZCB0byBzZXQg cmVhZG91dFxuIiwgX19mdW5jX18pOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyog SW5pdGlhbGlzZSBTVlIuIFVuc3VwcG9ydGVkIGZvciBub3cgLSBBbHdheXMgMCAqLwo+ICsJY2Np X3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1NWUiwgMHgwMCwgJnJldCk7Cj4gKwo+ICsJ ZGV2X2RiZyhpbXgyODMtPmRldiwgIk1vZGU6IFNpemUgJWQgeCAlZFxuIiwgbW9kZS0+d2lkdGgs IG1vZGUtPmhlaWdodCk7Cj4gKwlkZXZfZGJnKGlteDI4My0+ZGV2LCAiQW5hbG9ndWUgQ3JvcCAo aW4gdGhlIG1vZGUpICVkLCVkICVkeCVkXG4iLAo+ICsJCW1vZGUtPmNyb3AubGVmdCwKPiArCQlt b2RlLT5jcm9wLnRvcCwKPiArCQltb2RlLT5jcm9wLndpZHRoLAo+ICsJCW1vZGUtPmNyb3AuaGVp Z2h0KTsKPiArCj4gKwl5X291dF9zaXplID0gbW9kZS0+Y3JvcC5oZWlnaHQgLyBtb2RlLT52Ymlu X3JhdGlvOwo+ICsJd3JpdGVfdl9zaXplID0geV9vdXRfc2l6ZSArIG1vZGUtPnZlcnRpY2FsX29i Owo+ICsJLyoKPiArCSAqIGNyb3BwaW5nIHN0YXJ0IHBvc2l0aW9uID0gKFZXSU5QT1Mg4oCTIFZz dCkgw5cgMgo+ICsJICogY3JvcHBpbmcgd2lkdGggPSBWZWZmIOKAkyAoVldJRENVVCDigJMgVmN0 KSDDlyAyCj4gKwkgKi8KPiArCXZfcG9zID0gaW14MjgzLT52ZmxpcC0+dmFsID8KPiArCQkoKC1t b2RlLT5jcm9wLnRvcCAvIG1vZGUtPnZiaW5fcmF0aW8pIC8gMikgKyBtb2RlLT52c3QgOgo+ICsJ CSgobW9kZS0+Y3JvcC50b3AgLyBtb2RlLT52YmluX3JhdGlvKSAvIDIpICArIG1vZGUtPnZzdDsK PiArCXZfd2lkY3V0ID0gKChtb2RlLT52ZWZmIC0geV9vdXRfc2l6ZSkgLyAyKSArIG1vZGUtPnZj dDsKPiArCj4gKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfWV9PVVRfU0laRSwg eV9vdXRfc2l6ZSwgJnJldCk7Cj4gKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdf V1JJVEVfVlNJWkUsIHdyaXRlX3Zfc2l6ZSwgJnJldCk7Cj4gKwljY2lfd3JpdGUoaW14MjgzLT5j Y2ksIElNWDI4M19SRUdfVldJRENVVCwgdl93aWRjdXQsICZyZXQpOwo+ICsJY2NpX3dyaXRlKGlt eDI4My0+Y2NpLCBJTVgyODNfUkVHX1ZXSU5QT1MsIHZfcG9zLCAmcmV0KTsKPiArCj4gKwljY2lf d3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfT0JfU0laRV9WLCBtb2RlLT52ZXJ0aWNhbF9v YiwgJnJldCk7Cj4gKwo+ICsJLyogVE9ETzogVmFsaWRhdGUgbW9kZS0+Y3JvcCBpcyBmdWxseSBj b250YWluZWQgd2l0aGluIGlteDI4M19uYXRpdmVfYXJlYSAqLwo+ICsJY2NpX3dyaXRlKGlteDI4 My0+Y2NpLCBJTVgyODNfUkVHX0hUUklNTUlOR19TVEFSVCwgbW9kZS0+Y3JvcC5sZWZ0LCAmcmV0 KTsKPiArCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19IVFJJTU1JTkdfRU5ELAo+ ICsJCSAgbW9kZS0+Y3JvcC5sZWZ0ICsgbW9kZS0+Y3JvcC53aWR0aCwgJnJldCk7Cj4gKwo+ICsJ LyogRGlzYWJsZSBlbWJlZGRlZCBkYXRhICovCj4gKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElN WDI4M19SRUdfRUJEX1hfT1VUX1NJWkUsIDAsICZyZXQpOwo+ICsKPiArCS8qIEFwcGx5IGN1c3Rv bWl6ZWQgdmFsdWVzIGZyb20gY29udHJvbHMgKEhNQVgvVk1BWC9TSFIpICovCj4gKwlyZXQgPSAg X192NGwyX2N0cmxfaGFuZGxlcl9zZXR1cChpbXgyODMtPnNkLmN0cmxfaGFuZGxlcik7CgoJcmV0 dXJuIC4uLjsKCldoYXQgZG9lcyBhY3R1YWxseSBzdGFydCBzdHJlYW1pbmcgb24gdGhlIHNlbnNv ciBoZXJlPwoKU2hvdWxkbid0IHRoZSBjb250cm9sIGhhbmRsZXIncyBzZXR1cCBiZSBjYWxsZWQg YmVmb3JlIHRoYXQgKGFuZCBtdWNoIG9mCndoYXQgaGFwcGVucyBwcmV2aW91cyB0byB0aGF0KT8K Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyogU3RvcCBzdHJlYW1pbmcgKi8KPiAr c3RhdGljIHZvaWQgaW14MjgzX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCBpbXgyODMgKmlteDI4MykK PiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBjY2lfd3JpdGUoaW14MjgzLT5jY2ksIElN WDI4M19SRUdfU1RBTkRCWSwgSU1YMjgzX1NUQkxPR0lDLCBOVUxMKTsKPiArCWlmIChyZXQpCj4g KwkJZGV2X2VycihpbXgyODMtPmRldiwgIiVzIGZhaWxlZCB0byBzZXQgc3RyZWFtXG4iLCBfX2Z1 bmNfXyk7Cj4gKwo+ICsJcG1fcnVudGltZV9wdXQoaW14MjgzLT5kZXYpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGlteDI4M19zZXRfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBl bmFibGUpCj4gK3sKPiArCXN0cnVjdCBpbXgyODMgKmlteDI4MyA9IHRvX2lteDI4MyhzZCk7Cj4g KwlzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnN0YXRlOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ ICsJc3RhdGUgPSB2NGwyX3N1YmRldl9sb2NrX2FuZF9nZXRfYWN0aXZlX3N0YXRlKHNkKTsKPiAr Cj4gKwlpZiAoZW5hYmxlKSB7Cj4gKwkJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhpbXgyODMt PmRldik7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJcG1fcnVudGltZV9wdXRfbm9pZGxlKGlt eDI4My0+ZGV2KTsKPiArCQkJZ290byB1bmxvY2s7Cj4gKwkJfQo+ICsKPiArCQkvKgo+ICsJCSAq IEFwcGx5IGRlZmF1bHQgJiBjdXN0b21pemVkIHZhbHVlcwo+ICsJCSAqIGFuZCB0aGVuIHN0YXJ0 IHN0cmVhbWluZy4KPiArCQkgKi8KPiArCQlyZXQgPSBpbXgyODNfc3RhcnRfc3RyZWFtaW5nKGlt eDI4Mywgc3RhdGUpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gZXJyX3JwbV9wdXQ7Cj4gKwl9 IGVsc2Ugewo+ICsJCWlteDI4M19zdG9wX3N0cmVhbWluZyhpbXgyODMpOwo+ICsJfQo+ICsKPiAr CXY0bDJfc3ViZGV2X3VubG9ja19zdGF0ZShzdGF0ZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr Cj4gK2Vycl9ycG1fcHV0Ogo+ICsJcG1fcnVudGltZV9wdXQoaW14MjgzLT5kZXYpOwo+ICt1bmxv Y2s6Cj4gKwl2NGwyX3N1YmRldl91bmxvY2tfc3RhdGUoc3RhdGUpOwo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gKy8qIFBvd2VyL2Nsb2NrIG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCj4g K3N0YXRpYyBpbnQgaW14MjgzX3Bvd2VyX29uKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJ c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKPiArCXN0cnVj dCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKPiArCXN0cnVj dCBpbXgyODMgKmlteDI4MyA9IHRvX2lteDI4MyhzZCk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJl dCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGlteDI4M19zdXBwbHlfbmFtZSks Cj4gKwkJCQkgICAgaW14MjgzLT5zdXBwbGllcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vy cihpbXgyODMtPmRldiwgIiVzOiBmYWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRvcnNcbiIsCj4gKwkJ CV9fZnVuY19fKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShpbXgyODMtPnhjbGspOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoaW14 MjgzLT5kZXYsICIlczogZmFpbGVkIHRvIGVuYWJsZSBjbG9ja1xuIiwKPiArCQkJX19mdW5jX18p Owo+ICsJCWdvdG8gcmVnX29mZjsKPiArCX0KPiArCj4gKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xl ZXAoaW14MjgzLT5yZXNldF9ncGlvLCAxKTsKPiArCj4gKwl1c2xlZXBfcmFuZ2UoaW14MjgzX1hD TFJfTUlOX0RFTEFZX1VTLAo+ICsJCSAgICAgaW14MjgzX1hDTFJfTUlOX0RFTEFZX1VTICsgaW14 MjgzX1hDTFJfREVMQVlfUkFOR0VfVVMpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArcmVnX29m ZjoKPiArCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShpbXgyODNfc3VwcGx5X25h bWUpLCBpbXgyODMtPnN1cHBsaWVzKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgaW14MjgzX3Bvd2VyX29mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVj dCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Cj4gKwlzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gKwlzdHJ1Y3QgaW14 MjgzICppbXgyODMgPSB0b19pbXgyODMoc2QpOwo+ICsKPiArCWdwaW9kX3NldF92YWx1ZV9jYW5z bGVlcChpbXgyODMtPnJlc2V0X2dwaW8sIDApOwo+ICsJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShB UlJBWV9TSVpFKGlteDI4M19zdXBwbHlfbmFtZSksIGlteDI4My0+c3VwcGxpZXMpOwo+ICsJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGlteDI4My0+eGNsayk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgaW14MjgzX2dldF9yZWd1bGF0b3JzKHN0cnVjdCBpbXgyODMgKmlt eDI4MykKPiArewo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoaW14MjgzX3N1cHBseV9uYW1lKTsgaSsrKQo+ICsJCWlteDI4My0+c3VwcGxpZXNb aV0uc3VwcGx5ID0gaW14MjgzX3N1cHBseV9uYW1lW2ldOwo+ICsKPiArCXJldHVybiBkZXZtX3Jl Z3VsYXRvcl9idWxrX2dldChpbXgyODMtPmRldiwKPiArCQkJCSAgICAgICBBUlJBWV9TSVpFKGlt eDI4M19zdXBwbHlfbmFtZSksCj4gKwkJCQkgICAgICAgaW14MjgzLT5zdXBwbGllcyk7Cj4gK30K PiArCj4gKy8qIFZlcmlmeSBjaGlwIElEICovCj4gK3N0YXRpYyBpbnQgaW14MjgzX2lkZW50aWZ5 X21vZHVsZShzdHJ1Y3QgaW14MjgzICppbXgyODMpCj4gK3sKPiArCWludCByZXQ7Cj4gKwl1NjQg dmFsOwo+ICsKPiArCXJldCA9IGNjaV9yZWFkKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX0NISVBf SUQsICZ2YWwsIE5VTEwpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoaW14MjgzLT5kZXYs ICJmYWlsZWQgdG8gcmVhZCBjaGlwIGlkICV4LCB3aXRoIGVycm9yICVkXG4iLAo+ICsJCQlJTVgy ODNfQ0hJUF9JRCwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWlmICh2YWwg IT0gSU1YMjgzX0NISVBfSUQpIHsKPiArCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiY2hpcCBpZCBt aXNtYXRjaDogJXghPSVsbHhcbiIsCj4gKwkJCUlNWDI4M19DSElQX0lELCB2YWwpOwo+ICsJCXJl dHVybiAtRUlPOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGlteDI4M19nZXRfc2VsZWN0aW9uKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCj4gKwkJCQlzdHJ1 Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLAo+ICsJCQkJc3RydWN0IHY0bDJfc3ViZGV2 X3NlbGVjdGlvbiAqc2VsKQo+ICt7Cj4gKwlzd2l0Y2ggKHNlbC0+dGFyZ2V0KSB7Cj4gKwljYXNl IFY0TDJfU0VMX1RHVF9DUk9QOiB7Cj4gKwkJc2VsLT5yID0gKnY0bDJfc3ViZGV2X3N0YXRlX2dl dF9jcm9wKHNkX3N0YXRlLCAwKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwljYXNlIFY0 TDJfU0VMX1RHVF9OQVRJVkVfU0laRToKPiArCQlzZWwtPnIgPSBpbXgyODNfbmF0aXZlX2FyZWE7 Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUF9ERUZBVUxUOgo+ ICsJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUF9CT1VORFM6Cj4gKwkJc2VsLT5yID0gaW14MjgzX2Fj dGl2ZV9hcmVhOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCXJldHVybiAtRUlOVkFMOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGlteDI4 M19jb3JlX29wcyA9IHsKPiArCS5zdWJzY3JpYmVfZXZlbnQgPSB2NGwyX2N0cmxfc3ViZGV2X3N1 YnNjcmliZV9ldmVudCwKPiArCS51bnN1YnNjcmliZV9ldmVudCA9IHY0bDJfZXZlbnRfc3ViZGV2 X3Vuc3Vic2NyaWJlLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRl dl92aWRlb19vcHMgaW14MjgzX3ZpZGVvX29wcyA9IHsKPiArCS5zX3N0cmVhbSA9IGlteDI4M19z ZXRfc3RyZWFtLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9w YWRfb3BzIGlteDI4M19wYWRfb3BzID0gewo+ICsJLmVudW1fbWJ1c19jb2RlID0gaW14MjgzX2Vu dW1fbWJ1c19jb2RlLAo+ICsJLmdldF9mbXQgPSB2NGwyX3N1YmRldl9nZXRfZm10LAo+ICsJLnNl dF9mbXQgPSBpbXgyODNfc2V0X3BhZF9mb3JtYXQsCj4gKwkuZ2V0X3NlbGVjdGlvbiA9IGlteDI4 M19nZXRfc2VsZWN0aW9uLAo+ICsJLmVudW1fZnJhbWVfc2l6ZSA9IGlteDI4M19lbnVtX2ZyYW1l X3NpemUsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2ludGVy bmFsX29wcyBpbXgyODNfaW50ZXJuYWxfb3BzID0gewo+ICsJLmluaXRfc3RhdGUgPSBpbXgyODNf aW5pdF9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZf b3BzIGlteDI4M19zdWJkZXZfb3BzID0gewo+ICsJLmNvcmUgPSAmaW14MjgzX2NvcmVfb3BzLAo+ ICsJLnZpZGVvID0gJmlteDI4M192aWRlb19vcHMsCj4gKwkucGFkID0gJmlteDI4M19wYWRfb3Bz LAo+ICt9Owo+ICsKPiArLyogSW5pdGlhbGl6ZSBjb250cm9sIGhhbmRsZXJzICovCj4gK3N0YXRp YyBpbnQgaW14MjgzX2luaXRfY29udHJvbHMoc3RydWN0IGlteDI4MyAqaW14MjgzKQo+ICt7Cj4g KwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmN0cmxfaGRscjsKPiArCXN0cnVjdCB2NGwyX2Z3 bm9kZV9kZXZpY2VfcHJvcGVydGllcyBwcm9wczsKPiArCWNvbnN0IHN0cnVjdCBpbXgyODNfbW9k ZSAqbW9kZSA9IGlteDI4My0+bW9kZTsKPiArCXU2NCBtaW5faGJsYW5rLCBtYXhfaGJsYW5rLCBk ZWZfaGJsYW5rOwo+ICsJdTY0IHBpeGVsX3JhdGU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWN0cmxf aGRsciA9ICZpbXgyODMtPmN0cmxfaGFuZGxlcjsKPiArCXJldCA9IHY0bDJfY3RybF9oYW5kbGVy X2luaXQoY3RybF9oZGxyLCAxNik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJLyogU2VyaWFsaXplIGNvbnRyb2xzIHdpdGggc2Vuc29yIGRldmljZSAqLwo+ICsJY3RybF9o ZGxyLT5sb2NrID0gJmlteDI4My0+bXV0ZXg7Cj4gKwo+ICsJLyoKPiArCSAqIENyZWF0ZSB0aGUg Y29udHJvbHMgaGVyZSwgYnV0IG1vZGUgc3BlY2lmaWMgbGltaXRzIGFyZSBzZXR1cAo+ICsJICog aW4gdGhlIGlteDI4M19zZXRfZnJhbWluZ19saW1pdHMoKSBjYWxsIGJlbG93Lgo+ICsJICovCj4g Kwo+ICsJLyogQnkgZGVmYXVsdCwgUElYRUxfUkFURSBpcyByZWFkIG9ubHkgKi8KPiArCXBpeGVs X3JhdGUgPSBpbXgyODNfcGl4ZWxfcmF0ZShpbXgyODMpOwo+ICsJaW14MjgzLT5waXhlbF9yYXRl ID0gdjRsMl9jdHJsX25ld19zdGQoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLAo+ICsJCQkJ CSAgICAgICBWNEwyX0NJRF9QSVhFTF9SQVRFLCBwaXhlbF9yYXRlLAo+ICsJCQkJCSAgICAgICBw aXhlbF9yYXRlLCAxLCBwaXhlbF9yYXRlKTsKPiArCj4gKwlpbXgyODMtPmxpbmtfZnJlcSA9IHY0 bDJfY3RybF9uZXdfaW50X21lbnUoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLAo+ICsJCQkJ CQkgICBWNEwyX0NJRF9MSU5LX0ZSRVEsCj4gKwkJCQkJCSAgIF9fZmxzKGlteDI4My0+bGlua19m cmVxX2JpdG1hcCksCj4gKwkJCQkJCSAgIF9fZmZzKGlteDI4My0+bGlua19mcmVxX2JpdG1hcCks Cj4gKwkJCQkJCSAgIGxpbmtfZnJlcXVlbmNpZXMpOwo+ICsJaWYgKGlteDI4My0+bGlua19mcmVx KQo+ICsJCWlteDI4My0+bGlua19mcmVxLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19SRUFEX09O TFk7Cj4gKwo+ICsJLyogSW5pdGlhbGlzZSB2YmxhbmsvaGJsYW5rL2V4cG9zdXJlIGJhc2VkIG9u IHRoZSBjdXJyZW50IG1vZGUuICovCj4gKwlpbXgyODMtPnZibGFuayA9IHY0bDJfY3RybF9uZXdf c3RkKGN0cmxfaGRsciwgJmlteDI4M19jdHJsX29wcywKPiArCQkJCQkgICBWNEwyX0NJRF9WQkxB TkssCj4gKwkJCQkJICAgbW9kZS0+bWluX3ZtYXggLSBtb2RlLT5oZWlnaHQsCj4gKwkJCQkJICAg SU1YMjgzX1ZNQVhfTUFYLCAxLAo+ICsJCQkJCSAgIG1vZGUtPmRlZmF1bHRfdm1heCAtIG1vZGUt PmhlaWdodCk7Cj4gKwo+ICsJbWluX2hibGFuayA9IG1vZGUtPm1pbl9obWF4IC0gbW9kZS0+d2lk dGg7Cj4gKwltYXhfaGJsYW5rID0gaW14MjgzX2ljbGtfdG9fcGl4KHBpeGVsX3JhdGUsIElNWDI4 M19ITUFYX01BWCkgLSBtb2RlLT53aWR0aDsKPiArCWRlZl9oYmxhbmsgPSBtb2RlLT5kZWZhdWx0 X2htYXggLSBtb2RlLT53aWR0aDsKPiArCWlteDI4My0+aGJsYW5rID0gdjRsMl9jdHJsX25ld19z dGQoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLAo+ICsJCQkJCSAgIFY0TDJfQ0lEX0hCTEFO SywgbWluX2hibGFuaywgbWF4X2hibGFuaywKPiArCQkJCQkgICAxLCBkZWZfaGJsYW5rKTsKPiAr Cj4gKwlpbXgyODMtPmV4cG9zdXJlID0gdjRsMl9jdHJsX25ld19zdGQoY3RybF9oZGxyLCAmaW14 MjgzX2N0cmxfb3BzLAo+ICsJCQkJCSAgICAgVjRMMl9DSURfRVhQT1NVUkUsCj4gKwkJCQkJICAg ICBJTVgyODNfRVhQT1NVUkVfTUlOLAo+ICsJCQkJCSAgICAgSU1YMjgzX0VYUE9TVVJFX01BWCwK PiArCQkJCQkgICAgIElNWDI4M19FWFBPU1VSRV9TVEVQLAo+ICsJCQkJCSAgICAgSU1YMjgzX0VY UE9TVVJFX0RFRkFVTFQpOwo+ICsKPiArCXY0bDJfY3RybF9uZXdfc3RkKGN0cmxfaGRsciwgJmlt eDI4M19jdHJsX29wcywgVjRMMl9DSURfQU5BTE9HVUVfR0FJTiwKPiArCQkJICBJTVgyODNfQU5B X0dBSU5fTUlOLCBJTVgyODNfQU5BX0dBSU5fTUFYLAo+ICsJCQkgIElNWDI4M19BTkFfR0FJTl9T VEVQLCBJTVgyODNfQU5BX0dBSU5fREVGQVVMVCk7Cj4gKwo+ICsJdjRsMl9jdHJsX25ld19zdGQo Y3RybF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLCBWNEwyX0NJRF9ESUdJVEFMX0dBSU4sCj4gKwkJ CSAgSU1YMjgzX0RHVExfR0FJTl9NSU4sIElNWDI4M19ER1RMX0dBSU5fTUFYLAo+ICsJCQkgIElN WDI4M19ER1RMX0dBSU5fU1RFUCwgSU1YMjgzX0RHVExfR0FJTl9ERUZBVUxUKTsKPiArCj4gKwlp bXgyODMtPnZmbGlwID0gdjRsMl9jdHJsX25ld19zdGQoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxf b3BzLCBWNEwyX0NJRF9WRkxJUCwKPiArCQkJCQkgIDAsIDEsIDEsIDApOwo+ICsJaWYgKGlteDI4 My0+dmZsaXApCj4gKwkJaW14MjgzLT52ZmxpcC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfTU9E SUZZX0xBWU9VVDsKPiArCj4gKwl2NGwyX2N0cmxfbmV3X3N0ZF9tZW51X2l0ZW1zKGN0cmxfaGRs ciwgJmlteDI4M19jdHJsX29wcywKPiArCQkJCSAgICAgVjRMMl9DSURfVEVTVF9QQVRURVJOLAo+ ICsJCQkJICAgICBBUlJBWV9TSVpFKGlteDI4M190cGdfbWVudSkgLSAxLAo+ICsJCQkJICAgICAw LCAwLCBpbXgyODNfdHBnX21lbnUpOwo+ICsKPiArCWlmIChjdHJsX2hkbHItPmVycm9yKSB7Cj4g KwkJcmV0ID0gY3RybF9oZGxyLT5lcnJvcjsKPiArCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiJXMg Y29udHJvbCBpbml0IGZhaWxlZCAoJWQpXG4iLAo+ICsJCQlfX2Z1bmNfXywgcmV0KTsKPiArCQln b3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCXJldCA9IHY0bDJfZndub2RlX2RldmljZV9wYXJzZShp bXgyODMtPmRldiwgJnByb3BzKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJvcjsKPiArCj4g KwlyZXQgPSB2NGwyX2N0cmxfbmV3X2Z3bm9kZV9wcm9wZXJ0aWVzKGN0cmxfaGRsciwgJmlteDI4 M19jdHJsX29wcywKPiArCQkJCQkgICAgICAmcHJvcHMpOwo+ICsJaWYgKHJldCkKPiArCQlnb3Rv IGVycm9yOwo+ICsKPiArCWlteDI4My0+c2QuY3RybF9oYW5kbGVyID0gY3RybF9oZGxyOwo+ICsK PiArCW11dGV4X2xvY2soJmlteDI4My0+bXV0ZXgpOwo+ICsKPiArCXJldCA9IF9fdjRsMl9jdHJs X3NfY3RybChpbXgyODMtPmxpbmtfZnJlcSwKPiArCQkJCSBfX2ZmcyhpbXgyODMtPmxpbmtfZnJl cV9iaXRtYXApKTsKCklzIHRoaXMgbmVlZGVkPyBUaGUgZGVmYXVsdCBpcyBhbHJlYWR5IHNldCB3 aGVuIGNyZWF0aW5nIHRoZSBjb250cm9sLgoKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJvcjsK PiArCj4gKwkvKiBTZXR1cCBleHBvc3VyZSBhbmQgZnJhbWUvbGluZSBsZW5ndGggbGltaXRzLiAq Lwo+ICsJaW14MjgzX3NldF9mcmFtaW5nX2xpbWl0cyhpbXgyODMpOwo+ICsKPiArCW11dGV4X3Vu bG9jaygmaW14MjgzLT5tdXRleCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJvcjoKPiAr CXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoY3RybF9oZGxyKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpbXgyODNfZnJlZV9jb250cm9scyhzdHJ1Y3QgaW14Mjgz ICppbXgyODMpCj4gK3sKPiArCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoaW14MjgzLT5zZC5jdHJs X2hhbmRsZXIpOwoKWW91IGNvdWxkIGNhbGwgdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgpIGRpcmVj dGx5LgoKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW14Mjgz X2R0X2lkc1tdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJzb255LGlteDI4MyIsIH0sCj4gKwl7 IC8qIHNlbnRpbmVsICovIH0KPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgaW14MjgzX3BhcnNlX2Vu ZHBvaW50KHN0cnVjdCBpbXgyODMgKmlteDI4MykKPiArewo+ICsJc3RydWN0IGZ3bm9kZV9oYW5k bGUgKmZ3bm9kZSA9IGRldl9md25vZGUoaW14MjgzLT5kZXYpOwo+ICsJc3RydWN0IHY0bDJfZndu b2RlX2VuZHBvaW50IGJ1c19jZmcgPSB7Cj4gKwkJLmJ1c190eXBlID0gVjRMMl9NQlVTX0NTSTJf RFBIWQo+ICsJfTsKPiArCXN0cnVjdCBmd25vZGVfaGFuZGxlICplcDsKPiArCWludCByZXQ7Cj4g Kwo+ICsJaWYgKCFmd25vZGUpCj4gKwkJcmV0dXJuIC1FTlhJTzsKPiArCj4gKwllcCA9IGZ3bm9k ZV9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChmd25vZGUsIE5VTEwpOwo+ICsJaWYgKCFlcCkgewo+ ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsICJGYWlsZWQgdG8gZ2V0IG5leHQgZW5kcG9pbnRcbiIp Owo+ICsJCXJldHVybiAtRU5YSU87Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gdjRsMl9md25vZGVfZW5k cG9pbnRfYWxsb2NfcGFyc2UoZXAsICZidXNfY2ZnKTsKPiArCWZ3bm9kZV9oYW5kbGVfcHV0KGVw KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAoYnVzX2NmZy5idXMu bWlwaV9jc2kyLm51bV9kYXRhX2xhbmVzICE9IDQpIHsKPiArCQlkZXZfZXJyKGlteDI4My0+ZGV2 LAo+ICsJCQkibnVtYmVyIG9mIENTSTIgZGF0YSBsYW5lcyAlZCBpcyBub3Qgc3VwcG9ydGVkXG4i LAo+ICsJCQlidXNfY2ZnLmJ1cy5taXBpX2NzaTIubnVtX2RhdGFfbGFuZXMpOwo+ICsJCXJldCA9 IC1FSU5WQUw7Cj4gKwkJZ290byBkb25lX2VuZHBvaW50X2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJcmV0 ID0gdjRsMl9saW5rX2ZyZXFfdG9fYml0bWFwKGlteDI4My0+ZGV2LCBidXNfY2ZnLmxpbmtfZnJl cXVlbmNpZXMsCj4gKwkJCQkgICAgICAgYnVzX2NmZy5ucl9vZl9saW5rX2ZyZXF1ZW5jaWVzLAo+ ICsJCQkJICAgICAgIGxpbmtfZnJlcXVlbmNpZXMsIEFSUkFZX1NJWkUobGlua19mcmVxdWVuY2ll cyksCj4gKwkJCQkgICAgICAgJmlteDI4My0+bGlua19mcmVxX2JpdG1hcCk7Cj4gKwo+ICtkb25l X2VuZHBvaW50X2ZyZWU6Cj4gKwl2NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVlKCZidXNfY2ZnKTsK PiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Owo+ICsKPiArc3RhdGljIGludCBpbXgyODNfcHJvYmUo c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKPiArewo+ICsJc3RydWN0IGlteDI4MyAqaW14Mjgz Owo+ICsJaW50IHJldDsKClBsZWFzZSBkZWNsYXJlIHJldCBhcyBsYXN0LgoKPiArCXVuc2lnbmVk IGludCBpOwo+ICsJdW5zaWduZWQgaW50IHhjbGtfZnJlcTsKPiArCj4gKwlpbXgyODMgPSBkZXZt X2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKmlteDI4MyksIEdGUF9LRVJORUwpOwo+ICsJ aWYgKCFpbXgyODMpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaW14MjgzLT5kZXYgPSAm Y2xpZW50LT5kZXY7Cj4gKwo+ICsJdjRsMl9pMmNfc3ViZGV2X2luaXQoJmlteDI4My0+c2QsIGNs aWVudCwgJmlteDI4M19zdWJkZXZfb3BzKTsKPiArCj4gKwlpbXgyODMtPmNjaSA9IGRldm1fY2Np X3JlZ21hcF9pbml0X2kyYyhjbGllbnQsIDE2KTsKPiArCWlmIChJU19FUlIoaW14MjgzLT5jY2kp KSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihpbXgyODMtPmNjaSk7Cj4gKwkJZGV2X2VycihpbXgyODMt PmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIENDSTogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwkvKiBHZXQgc3lzdGVtIGNsb2NrICh4Y2xrKSAqLwo+ICsJaW14 MjgzLT54Y2xrID0gZGV2bV9jbGtfZ2V0KGlteDI4My0+ZGV2LCBOVUxMKTsKPiArCWlmIChJU19F UlIoaW14MjgzLT54Y2xrKSkgewo+ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsICJmYWlsZWQgdG8g Z2V0IHhjbGtcbiIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGlteDI4My0+eGNsayk7Cj4gKwl9Cj4g Kwo+ICsJeGNsa19mcmVxID0gY2xrX2dldF9yYXRlKGlteDI4My0+eGNsayk7Cj4gKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShpbXgyODNfZnJlcXVlbmNpZXMpOyBpKyspIHsKPiArCQlpZiAo eGNsa19mcmVxID09IGlteDI4M19mcmVxdWVuY2llc1tpXS5taHopIHsKPiArCQkJaW14MjgzLT5m cmVxID0gJmlteDI4M19mcmVxdWVuY2llc1tpXTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ ICsJaWYgKCFpbXgyODMtPmZyZXEpIHsKPiArCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAieGNsayBm cmVxdWVuY3kgdW5zdXBwb3J0ZWQ6ICVkIEh6XG4iLCB4Y2xrX2ZyZXEpOwoKWW91IGNvdWxkIGFs c28gcGljayB0aGUgY2xvc2VzdCB2YWx1ZSBhbmQgd2FybiBhYm91dCBpdCwgdGhlc2UgYXJlbid0 CmFsd2F5cyBleGFjdGx5IHdoYXQncyBleHBlY3RlZC4gVXAgdG8geW91LgoKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXQgPSBpbXgyODNfZ2V0X3JlZ3VsYXRvcnMoaW14Mjgz KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiZmFpbGVkIHRvIGdl dCByZWd1bGF0b3JzXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IGlt eDI4M19wYXJzZV9lbmRwb2ludChpbXgyODMpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIo aW14MjgzLT5kZXYsICJmYWlsZWQgdG8gcGFyc2UgZW5kcG9pbnQgY29uZmlndXJhdGlvblxuIik7 Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwkvKiBSZXF1ZXN0IG9wdGlvbmFsIGVuYWJs ZSBwaW4gKi8KPiArCWlteDI4My0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFs KGlteDI4My0+ZGV2LCAicmVzZXQiLAo+ICsJCQkJCQkgICAgIEdQSU9EX09VVF9ISUdIKTsKPiAr Cj4gKwltdXRleF9pbml0KCZpbXgyODMtPm11dGV4KTsKPiArCj4gKwkvKgo+ICsJICogVGhlIHNl bnNvciBtdXN0IGJlIHBvd2VyZWQgZm9yIGlteDI4M19pZGVudGlmeV9tb2R1bGUoKQo+ICsJICog dG8gYmUgYWJsZSB0byByZWFkIHRoZSBDSElQX0lEIHJlZ2lzdGVyCj4gKwkgKi8KPiArCXJldCA9 IGlteDI4M19wb3dlcl9vbihpbXgyODMtPmRldik7Cj4gKwlpZiAocmV0KQoKbXV0ZXhfZGVzdHJv eSgpIGlzIG1pc3Npbmcgb24gdGhpcyBjb2RlIHBhdGggKGFuZCBlbHNld2hlcmUsIHRvbykuCgo+ ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gaW14MjgzX2lkZW50aWZ5X21vZHVsZShpbXgy ODMpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycm9yX3Bvd2VyX29mZjsKPiArCj4gKwkvKiBJ bml0aWFsaXplIGRlZmF1bHQgZm9ybWF0IGFuZCBtb2RlIHRvIG1heCByZXNvbHV0aW9uICovCj4g KwlpbXgyODMtPm1vZGUgPSAmc3VwcG9ydGVkX21vZGVzXzEyYml0WzBdOwo+ICsJaW14MjgzLT5m bXRfY29kZSA9IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyOwo+ICsKPiArCS8qCj4gKwkgKiBF bmFibGUgcnVudGltZSBQTSB3aXRoIGF1dG9zdXNwZW5kLiBBcyB0aGUgZGV2aWNlIGhhcyBiZWVu IHBvd2VyZWQKPiArCSAqIG1hbnVhbGx5LCBtYXJrIGl0IGFzIGFjdGl2ZSwgYW5kIGluY3JlYXNl IHRoZSB1c2FnZSBjb3VudCB3aXRob3V0Cj4gKwkgKiByZXN1bWluZyB0aGUgZGV2aWNlLgo+ICsJ ICovCj4gKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoaW14MjgzLT5kZXYpOwo+ICsJcG1fcnVudGlt ZV9nZXRfbm9yZXN1bWUoaW14MjgzLT5kZXYpOwo+ICsJcG1fcnVudGltZV9lbmFibGUoaW14Mjgz LT5kZXYpOwo+ICsJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoaW14MjgzLT5kZXYs IDEwMDApOwo+ICsJcG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoaW14MjgzLT5kZXYpOwo+ICsK PiArCS8qIFRoaXMgbmVlZHMgdGhlIHBtIHJ1bnRpbWUgdG8gYmUgcmVnaXN0ZXJlZC4gKi8KPiAr CXJldCA9IGlteDI4M19pbml0X2NvbnRyb2xzKGlteDI4Myk7Cj4gKwlpZiAocmV0KQo+ICsJCWdv dG8gZXJyb3JfcG07Cj4gKwo+ICsJLyogSW5pdGlhbGl6ZSBzdWJkZXYgKi8KPiArCWlteDI4My0+ c2QuZmxhZ3MgfD0gVjRMMl9TVUJERVZfRkxfSEFTX0RFVk5PREUgfAo+ICsJCQkgICAgVjRMMl9T VUJERVZfRkxfSEFTX0VWRU5UUzsKPiArCWlteDI4My0+c2QuZW50aXR5LmZ1bmN0aW9uID0gTUVE SUFfRU5UX0ZfQ0FNX1NFTlNPUjsKPiArCWlteDI4My0+c2QuaW50ZXJuYWxfb3BzID0gJmlteDI4 M19pbnRlcm5hbF9vcHM7Cj4gKwo+ICsJLyogSW5pdGlhbGl6ZSBzb3VyY2UgcGFkcyAqLwo+ICsJ aW14MjgzLT5wYWQuZmxhZ3MgPSBNRURJQV9QQURfRkxfU09VUkNFOwo+ICsKPiArCXJldCA9IG1l ZGlhX2VudGl0eV9wYWRzX2luaXQoJmlteDI4My0+c2QuZW50aXR5LCAxLCAmaW14MjgzLT5wYWQp Owo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsICJmYWlsZWQgdG8gaW5p dCBlbnRpdHkgcGFkczogJWRcbiIsIHJldCk7Cj4gKwkJZ290byBlcnJvcl9oYW5kbGVyX2ZyZWU7 Cj4gKwl9Cj4gKwo+ICsJaW14MjgzLT5zZC5zdGF0ZV9sb2NrID0gaW14MjgzLT5jdHJsX2hhbmRs ZXIubG9jazsKPiArCXJldCA9IHY0bDJfc3ViZGV2X2luaXRfZmluYWxpemUoJmlteDI4My0+c2Qp Owo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAic3ViZGV2IGlu aXQgZXJyb3I6ICVkXG4iLCByZXQpOwo+ICsJCWdvdG8gZXJyb3JfbWVkaWFfZW50aXR5Owo+ICsJ fQo+ICsKPiArCXJldCA9IHY0bDJfYXN5bmNfcmVnaXN0ZXJfc3ViZGV2X3NlbnNvcigmaW14Mjgz LT5zZCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoaW14MjgzLT5kZXYsICJmYWls ZWQgdG8gcmVnaXN0ZXIgc2Vuc29yIHN1Yi1kZXZpY2U6ICVkXG4iLCByZXQpOwo+ICsJCWdvdG8g ZXJyb3Jfc3ViZGV2X2NsZWFudXA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJv cl9zdWJkZXZfY2xlYW51cDoKPiArCXY0bDJfc3ViZGV2X2NsZWFudXAoJmlteDI4My0+c2QpOwo+ ICsKPiArZXJyb3JfbWVkaWFfZW50aXR5Ogo+ICsJbWVkaWFfZW50aXR5X2NsZWFudXAoJmlteDI4 My0+c2QuZW50aXR5KTsKPiArCj4gK2Vycm9yX2hhbmRsZXJfZnJlZToKPiArCWlteDI4M19mcmVl X2NvbnRyb2xzKGlteDI4Myk7Cj4gKwo+ICtlcnJvcl9wbToKPiArCXBtX3J1bnRpbWVfZGlzYWJs ZShpbXgyODMtPmRldik7Cj4gKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoaW14MjgzLT5kZXYp Owo+ICtlcnJvcl9wb3dlcl9vZmY6Cj4gKwlpbXgyODNfcG93ZXJfb2ZmKGlteDI4My0+ZGV2KTsK PiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpbXgyODNfcmVtb3Zl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCB2NGwyX3N1YmRldiAq c2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKPiArCXN0cnVjdCBpbXgyODMgKmlteDI4 MyA9IHRvX2lteDI4MyhzZCk7Cj4gKwo+ICsJdjRsMl9hc3luY191bnJlZ2lzdGVyX3N1YmRldihz ZCk7Cj4gKwl2NGwyX3N1YmRldl9jbGVhbnVwKCZpbXgyODMtPnNkKTsKPiArCW1lZGlhX2VudGl0 eV9jbGVhbnVwKCZzZC0+ZW50aXR5KTsKPiArCWlteDI4M19mcmVlX2NvbnRyb2xzKGlteDI4Myk7 Cj4gKwo+ICsJcG1fcnVudGltZV9kaXNhYmxlKGlteDI4My0+ZGV2KTsKPiArCWlmICghcG1fcnVu dGltZV9zdGF0dXNfc3VzcGVuZGVkKGlteDI4My0+ZGV2KSkKPiArCQlpbXgyODNfcG93ZXJfb2Zm KGlteDI4My0+ZGV2KTsKPiArCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChpbXgyODMtPmRldik7 Cj4gK30KPiArCj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlteDI4M19kdF9pZHMpOwo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGlteDI4M19wbV9vcHMgPSB7Cj4gKwlT RVRfUlVOVElNRV9QTV9PUFMoaW14MjgzX3Bvd2VyX29mZiwgaW14MjgzX3Bvd2VyX29uLCBOVUxM KQo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlteDI4M19pMmNfZHJpdmVy ID0gewo+ICsJLmRyaXZlciA9IHsKPiArCQkubmFtZSA9ICJpbXgyODMiLAo+ICsJCS5vZl9tYXRj aF90YWJsZQk9IGlteDI4M19kdF9pZHMsCj4gKwkJLnBtID0gJmlteDI4M19wbV9vcHMsCj4gKwl9 LAo+ICsJLnByb2JlID0gaW14MjgzX3Byb2JlLAo+ICsJLnJlbW92ZSA9IGlteDI4M19yZW1vdmUs Cj4gK307Cj4gKwo+ICttb2R1bGVfaTJjX2RyaXZlcihpbXgyODNfaTJjX2RyaXZlcik7Cj4gKwo+ ICtNT0RVTEVfQVVUSE9SKCJXaWxsIFdoYW5nIDx3aWxsQHdpbGx3aGFuZy5jb20+Iik7Cj4gK01P RFVMRV9BVVRIT1IoIktpZXJhbiBCaW5naGFtIDxraWVyYW4uYmluZ2hhbUBpZGVhc29uYm9hcmQu Y29tPiIpOwo+ICtNT0RVTEVfQVVUSE9SKCJVbWFuZyBKYWluIDx1bWFuZy5qYWluQGlkZWFzb25i b2FyZC5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiU29ueSBJTVgyODMgU2Vuc29yIERy aXZlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7CgotLSAKS2luZCByZWdhcmRzLAoKU2Fr YXJpIEFpbHVzCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==