From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [PATCH v2 5/8] drm/rockchip: dsi: migrate to use dw-mipi-dsi bridge driver Date: Tue, 3 Jul 2018 15:06:51 +0200 Message-ID: <20180703130653eucas1p2c9b4e30ee6bde7916e5aef8b69903bac~93bPikLMo2138821388eucas1p2z@eucas1p2.samsung.com> References: <20180618102806.15650-1-heiko@sntech.de> <20180618102806.15650-6-heiko@sntech.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180618102806.15650-6-heiko@sntech.de> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Heiko Stuebner , dri-devel@lists.freedesktop.org Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, briannorris@chromium.org, hoegsberg@gmail.com, philippe.cornu@st.com, yannick.fertre@st.com, linux-rockchip@lists.infradead.org, nickey.yang@rock-chips.com, robh+dt@kernel.org, thierry.reding@gmail.com, laurent.pinchart@ideasonboard.com, mka@chromium.org List-Id: devicetree@vger.kernel.org T24gMTguMDYuMjAxOCAxMjoyOCwgSGVpa28gU3R1ZWJuZXIgd3JvdGU6Cj4gRnJvbTogTmlja2V5 IFlhbmcgPG5pY2tleS55YW5nQHJvY2stY2hpcHMuY29tPgo+Cj4gQWRkIHRoZSBST0NLQ0hJUCBE U0kgY29udHJvbGxlciBkcml2ZXIgdGhhdCB1c2VzIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlCj4g TUlQSSBEU0kgaG9zdCBjb250cm9sbGVyIGJyaWRnZSBhbmQgcmVtb3ZlIHRoZSBvbGQgc2VwYXJh dGUgb25lLgo+Cj4gY2hhbmdlczoKPgo+IHYyOgo+ICAgIGFkZCBlcnJfcGxscmVmLCByZW1vdmUg dW5uZWNlc3NhcnkgZW5jb2Rlci5lbmFibGUgJiBkaXNhYmxlCj4gICAgY29ycmVjdCBzcGVsbGlu ZyBtaXN0YWtlcwo+IHYzOgo+ICAgIGNhbGwgZHdfbWlwaV9kc2lfdW5iaW5kKCkgaW4gZHdfbWlw aV9kc2lfcm9ja2NoaXBfdW5iaW5kKCkKPiAgICBmaXggdHlwbywgdXNlIG9mX2RldmljZV9nZXRf bWF0Y2hfZGF0YSgpLAo+ICAgIGNoYW5nZSBzb21lIGJpbmQoKSBsb2dpYyBpbnRvIHByb2JlKCkK PiAgICBhZGQgJ2Rldl9zZXRfZHJ2ZGF0YSgpJwo+IHY0Ogo+ICAgcmV0dXJuIC1FSU5WQUwgd2hl biBjYW4gbm90IGdldCBiZXN0X2ZyZXEKPiAgIGFkZCBhIGNsYXJpZnlpbmcgY29tbWVudCB3aGVu IGdldCB2Y28KPiAgIGFkZCByZXZpZXcgdGFnCj4gdjU6Cj4gICBrZWVwIG91ciBwb3dlciBkb21h aW4gZW5hYmxlZCB3aGlsZSB0b3VjaGluZyBHUkYKPiB2NjoKPiAgIGNoYW5nZSBmdW5jIG5hbWUg ZHdfbWlwaV9lbmNvZGVyX2Rpc2FibGUgdG8KPiAgIGR3X21pcGlfZHNpX2VuY29kZXJfZGlzYWJs ZQo+IHY3Ogo+ICAgbm9uZQo+IHY4OiBIZWlrbwo+ICAgYWRkIEFyY2hpdCdzIFJldmlldyB0YWcK PiAgIGFkYXB0IHRvIHJlY2VudCBjaGFuZ2VzIGluIHRoZSBvcmlnaW5hbCByb2NrY2hpcC1kc2kg ZHJpdmVyCj4gICBiZWF1dGlmeSBncmYtaGFuZGxpbmcKPiAgIHNwbGl0IGh3LXNldHVwIChyZXNv dXJjZXMsIGRzaS1ob3N0KSBmcm9tIGJpbmQgaW50byBwcm9iZQo+IHYyLW5ldzogSGVpa28KPiAg IGFkZCBTUERYIGhlYWRlciBpbnN0ZWFkIG9mIGxpY2Vuc2UgYmx1cmIKPiAgIGRyb3Agb2xkIHZl cnNpb25pbmcgdG8gbm90IGNvbmZ1c2UgcGVvcGxlCj4KPgo+IFNpZ25lZC1vZmYtYnk6IE5pY2tl eSBZYW5nIDxuaWNrZXkueWFuZ0Byb2NrLWNoaXBzLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBCcmlh biBOb3JyaXMgPGJyaWFubm9ycmlzQGNocm9taXVtLm9yZz4KPiBSZXZpZXdlZC1ieTogQnJpYW4g Tm9ycmlzIDxicmlhbm5vcnJpc0BjaHJvbWl1bS5vcmc+Cj4gUmV2aWV3ZWQtYnk6IFNlYW4gUGF1 bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgo+IFJldmlld2VkLWJ5OiBBcmNoaXQgVGFuZWphIDxh cmNoaXR0QGNvZGVhdXJvcmEub3JnPgo+IFNpZ25lZC1vZmYtYnk6IEhlaWtvIFN0dWVibmVyIDxo ZWlrb0BzbnRlY2guZGU+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmln ICAgICAgICAgICAgICB8ICAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2Vm aWxlICAgICAgICAgICAgIHwgICAgMiArLQo+ICAuLi4vZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBp LWRzaS1yb2NrY2hpcC5jICAgfCAgOTI3ICsrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9kdy1taXBpLWRzaS5jICAgICAgICB8IDEzNDkgLS0tLS0tLS0tLS0tLS0tLS0KPiAg ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuYyAgIHwgICAgMiArLQo+ ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5oICAgfCAgICAyICst Cj4gIDYgZmlsZXMgY2hhbmdlZCwgOTMxIGluc2VydGlvbnMoKyksIDEzNTMgZGVsZXRpb25zKC0p Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1k c2ktcm9ja2NoaXAuYwo+ICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL2R3LW1pcGktZHNpLmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9LY29uZmlnCj4gaW5kZXggMGNj Yzc2MjE3ZWU0Li45ZWI0Nzk1NTk2ZDMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwo+ IEBAIC03LDcgKzcsNyBAQCBjb25maWcgRFJNX1JPQ0tDSElQCj4gIAlzZWxlY3QgVklERU9NT0RF X0hFTFBFUlMKPiAgCXNlbGVjdCBEUk1fQU5BTE9HSVhfRFAgaWYgUk9DS0NISVBfQU5BTE9HSVhf RFAKPiAgCXNlbGVjdCBEUk1fRFdfSERNSSBpZiBST0NLQ0hJUF9EV19IRE1JCj4gLQlzZWxlY3Qg RFJNX01JUElfRFNJIGlmIFJPQ0tDSElQX0RXX01JUElfRFNJCj4gKwlzZWxlY3QgRFJNX0RXX01J UElfRFNJIGlmIFJPQ0tDSElQX0RXX01JUElfRFNJCj4gIAlzZWxlY3QgU05EX1NPQ19IRE1JX0NP REVDIGlmIFJPQ0tDSElQX0NETl9EUCAmJiBTTkRfU09DCj4gIAloZWxwCj4gIAkgIENob29zZSB0 aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFJvY2tjaGlwIHNvYyBjaGlwc2V0Lgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvTWFrZWZpbGUKPiBpbmRleCBhMzE0ZTIxMDllNzYuLjBmMjJkYWQxYzk5NiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKPiBAQCAtMTEsNyArMTEsNyBAQCByb2NrY2hp cGRybS0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSByb2NrY2hpcF9kcm1fZmJkZXYu bwo+ICByb2NrY2hpcGRybS0kKENPTkZJR19ST0NLQ0hJUF9BTkFMT0dJWF9EUCkgKz0gYW5hbG9n aXhfZHAtcm9ja2NoaXAubwo+ICByb2NrY2hpcGRybS0kKENPTkZJR19ST0NLQ0hJUF9DRE5fRFAp ICs9IGNkbi1kcC1jb3JlLm8gY2RuLWRwLXJlZy5vCj4gIHJvY2tjaGlwZHJtLSQoQ09ORklHX1JP Q0tDSElQX0RXX0hETUkpICs9IGR3X2hkbWktcm9ja2NoaXAubwo+IC1yb2NrY2hpcGRybS0kKENP TkZJR19ST0NLQ0hJUF9EV19NSVBJX0RTSSkgKz0gZHctbWlwaS1kc2kubwo+ICtyb2NrY2hpcGRy bS0kKENPTkZJR19ST0NLQ0hJUF9EV19NSVBJX0RTSSkgKz0gZHctbWlwaS1kc2ktcm9ja2NoaXAu bwo+ICByb2NrY2hpcGRybS0kKENPTkZJR19ST0NLQ0hJUF9JTk5PX0hETUkpICs9IGlubm9faGRt aS5vCj4gIHJvY2tjaGlwZHJtLSQoQ09ORklHX1JPQ0tDSElQX0xWRFMpICs9IHJvY2tjaGlwX2x2 ZHMubwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGkt ZHNpLXJvY2tjaGlwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2ktcm9j a2NoaXAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4xMmU0 ZGFjYzc5NzAKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L2R3LW1pcGktZHNpLXJvY2tjaGlwLmMKPiBAQCAtMCwwICsxLDkyNyBAQAo+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSBGdXpo b3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uTHRkCj4gKyAqIEF1dGhvcjoKPiArICogICAgICBD aHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgo+ICsgKiAgICAgIE5pY2tleSBZYW5nIDxu aWNrZXkueWFuZ0Byb2NrLWNoaXBzLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgv Y2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21h dGg2NC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9v Zl9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cj4gKyNpbmNsdWRl IDxkcm0vYnJpZGdlL2R3X21pcGlfZHNpLmg+Cj4gKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3Bs YXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9v Zi5oPgo+ICsjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgoKQWxwaGFiZXRpYyBvcmRlci4K Cgo+ICsKPiArI2luY2x1ZGUgInJvY2tjaGlwX2RybV9kcnYuaCIKPiArI2luY2x1ZGUgInJvY2tj aGlwX2RybV92b3AuaCIKPiArCj4gKyNkZWZpbmUgRFNJX1BIWV9SU1RaCQkJMHhhMAo+ICsjZGVm aW5lIFBIWV9ESVNGT1JDRVBMTAkJCTAKPiArI2RlZmluZSBQSFlfRU5GT1JDRVBMTAkJCUJJVCgz KQo+ICsjZGVmaW5lIFBIWV9ESVNBQkxFQ0xLCQkJMAo+ICsjZGVmaW5lIFBIWV9FTkFCTEVDTEsJ CQlCSVQoMikKPiArI2RlZmluZSBQSFlfUlNUWgkJCTAKPiArI2RlZmluZSBQSFlfVU5SU1RaCQkJ QklUKDEpCj4gKyNkZWZpbmUgUEhZX1NIVVRET1dOWgkJCTAKPiArI2RlZmluZSBQSFlfVU5TSFVU RE9XTloJCQlCSVQoMCkKPiArCj4gKyNkZWZpbmUgRFNJX1BIWV9JRl9DRkcJCQkweGE0Cj4gKyNk ZWZpbmUgTl9MQU5FUyhuKQkJCSgoKChuKSAtIDEpICYgMHgzKSA8PCAwKQo+ICsjZGVmaW5lIFBI WV9TVE9QX1dBSVRfVElNRShjeWNsZSkJKCgoY3ljbGUpICYgMHhmZikgPDwgOCkKPiArCj4gKyNk ZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweGIwCj4gKyNkZWZpbmUgTE9DSwkJCQlCSVQoMCkKPiAr I2RlZmluZSBTVE9QX1NUQVRFX0NMS19MQU5FCQlCSVQoMikKPiArCj4gKyNkZWZpbmUgRFNJX1BI WV9UU1RfQ1RSTDAJCTB4YjQKPiArI2RlZmluZSBQSFlfVEVTVENMSwkJCUJJVCgxKQo+ICsjZGVm aW5lIFBIWV9VTlRFU1RDTEsJCQkwCj4gKyNkZWZpbmUgUEhZX1RFU1RDTFIJCQlCSVQoMCkKPiAr I2RlZmluZSBQSFlfVU5URVNUQ0xSCQkJMAo+ICsKPiArI2RlZmluZSBEU0lfUEhZX1RTVF9DVFJM MQkJMHhiOAo+ICsjZGVmaW5lIFBIWV9URVNURU4JCQlCSVQoMTYpCj4gKyNkZWZpbmUgUEhZX1VO VEVTVEVOCQkJMAo+ICsjZGVmaW5lIFBIWV9URVNURE9VVChuKQkJCSgoKG4pICYgMHhmZikgPDwg OCkKPiArI2RlZmluZSBQSFlfVEVTVERJTihuKQkJCSgoKG4pICYgMHhmZikgPDwgMCkKPiArCj4g KyNkZWZpbmUgRFNJX0lOVF9TVDAJCQkweGJjCj4gKyNkZWZpbmUgRFNJX0lOVF9TVDEJCQkweGMw Cj4gKyNkZWZpbmUgRFNJX0lOVF9NU0swCQkJMHhjNAo+ICsjZGVmaW5lIERTSV9JTlRfTVNLMQkJ CTB4YzgKPiArCj4gKyNkZWZpbmUgUEhZX1NUQVRVU19USU1FT1VUX1VTCQkxMDAwMAo+ICsjZGVm aW5lIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMJMjAwMDAKPiArCj4gKyNkZWZpbmUgQllQQVNT X1ZDT19SQU5HRQlCSVQoNykKPiArI2RlZmluZSBWQ09fUkFOR0VfQ09OX1NFTCh2YWwpCSgoKHZh bCkgJiAweDcpIDw8IDMpCj4gKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fREVGQVVMVAkoMHgwIDw8 IDEpCj4gKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fTE9XCSgweDEgPDwgMSkKPiArI2RlZmluZSBW Q09fSU5fQ0FQX0NPTl9ISUdICSgweDIgPDwgMSkKPiArI2RlZmluZSBSRUZfQklBU19DVVJfU0VM CUJJVCgwKQo+ICsKPiArI2RlZmluZSBDUF9DVVJSRU5UXzNVQQkweDEKPiArI2RlZmluZSBDUF9D VVJSRU5UXzRfNVVBCTB4Mgo+ICsjZGVmaW5lIENQX0NVUlJFTlRfN181VUEJMHg2Cj4gKyNkZWZp bmUgQ1BfQ1VSUkVOVF82VUEJMHg5Cj4gKyNkZWZpbmUgQ1BfQ1VSUkVOVF8xMlVBCTB4Ygo+ICsj ZGVmaW5lIENQX0NVUlJFTlRfU0VMKHZhbCkJKCh2YWwpICYgMHhmKQo+ICsjZGVmaW5lIENQX1BS T0dSQU1fRU4JCUJJVCg3KQo+ICsKPiArI2RlZmluZSBMUEZfUkVTSVNUT1JTXzE1XzVLT0hNCTB4 MQo+ICsjZGVmaW5lIExQRl9SRVNJU1RPUlNfMTNLT0hNCTB4Mgo+ICsjZGVmaW5lIExQRl9SRVNJ U1RPUlNfMTFfNUtPSE0JMHg0Cj4gKyNkZWZpbmUgTFBGX1JFU0lTVE9SU18xMF81S09ITQkweDgK PiArI2RlZmluZSBMUEZfUkVTSVNUT1JTXzhLT0hNCTB4MTAKPiArI2RlZmluZSBMUEZfUFJPR1JB TV9FTgkJQklUKDYpCj4gKyNkZWZpbmUgTFBGX1JFU0lTVE9SU19TRUwodmFsKQkoKHZhbCkgJiAw eDNmKQo+ICsKPiArI2RlZmluZSBIU0ZSRVFSQU5HRV9TRUwodmFsKQkoKCh2YWwpICYgMHgzZikg PDwgMSkKPiArCj4gKyNkZWZpbmUgSU5QVVRfRElWSURFUih2YWwpCSgoKHZhbCkgLSAxKSAmIDB4 N2YpCj4gKyNkZWZpbmUgTE9XX1BST0dSQU1fRU4JCTAKPiArI2RlZmluZSBISUdIX1BST0dSQU1f RU4JCUJJVCg3KQo+ICsjZGVmaW5lIExPT1BfRElWX0xPV19TRUwodmFsKQkoKCh2YWwpIC0gMSkg JiAweDFmKQo+ICsjZGVmaW5lIExPT1BfRElWX0hJR0hfU0VMKHZhbCkJKCgoKHZhbCkgLSAxKSA+ PiA1KSAmIDB4ZikKPiArI2RlZmluZSBQTExfTE9PUF9ESVZfRU4JCUJJVCg1KQo+ICsjZGVmaW5l IFBMTF9JTlBVVF9ESVZfRU4JQklUKDQpCj4gKwo+ICsjZGVmaW5lIFBPV0VSX0NPTlRST0wJCUJJ VCg2KQo+ICsjZGVmaW5lIElOVEVSTkFMX1JFR19DVVJSRU5UCUJJVCgzKQo+ICsjZGVmaW5lIEJJ QVNfQkxPQ0tfT04JCUJJVCgyKQo+ICsjZGVmaW5lIEJBTkRHQVBfT04JCUJJVCgwKQo+ICsKPiAr I2RlZmluZSBURVJfUkVTSVNUT1JfSElHSAlCSVQoNykKPiArI2RlZmluZQlURVJfUkVTSVNUT1Jf TE9XCTAKPiArI2RlZmluZSBMRVZFTF9TSElGVEVSU19PTglCSVQoNikKPiArI2RlZmluZSBURVJf Q0FMX0RPTkUJCUJJVCg1KQo+ICsjZGVmaW5lIFNFVFJEX01BWAkJKDB4NyA8PCAyKQo+ICsjZGVm aW5lIFBPV0VSX01BTkFHRQkJQklUKDEpCj4gKyNkZWZpbmUgVEVSX1JFU0lTVE9SU19PTglCSVQo MCkKPiArCj4gKyNkZWZpbmUgQklBU0VYVFJfU0VMKHZhbCkJKCh2YWwpICYgMHg3KQo+ICsjZGVm aW5lIEJBTkRHQVBfU0VMKHZhbCkJKCh2YWwpICYgMHg3KQo+ICsjZGVmaW5lIFRMUF9QUk9HUkFN X0VOCQlCSVQoNykKPiArI2RlZmluZSBUSFNfUFJFX1BST0dSQU1fRU4JQklUKDcpCj4gKyNkZWZp bmUgVEhTX1pFUk9fUFJPR1JBTV9FTglCSVQoNikKPiArCj4gKyNkZWZpbmUgUExMX0JJQVNfQ1VS X1NFTF9DQVBfVkNPX0NPTlRST0wJCTB4MTAKPiArI2RlZmluZSBQTExfQ1BfQ09OVFJPTF9QTExf TE9DS19CWVBBU1MJCQkweDExCj4gKyNkZWZpbmUgUExMX0xQRl9BTkRfQ1BfQ09OVFJPTAkJCQkw eDEyCj4gKyNkZWZpbmUgUExMX0lOUFVUX0RJVklERVJfUkFUSU8JCQkJMHgxNwo+ICsjZGVmaW5l IFBMTF9MT09QX0RJVklERVJfUkFUSU8JCQkJMHgxOAo+ICsjZGVmaW5lIFBMTF9JTlBVVF9BTkRf TE9PUF9ESVZJREVSX1JBVElPU19DT05UUk9MCTB4MTkKPiArI2RlZmluZSBCQU5ER0FQX0FORF9C SUFTX0NPTlRST0wJCQkweDIwCj4gKyNkZWZpbmUgVEVSTUlOQVRJT05fUkVTSVNURVJfQ09OVFJP TAkJCTB4MjEKPiArI2RlZmluZSBBRkVfQklBU19CQU5ER0FQX0FOQUxPR19QUk9HUkFNTUFCSUxJ VFkJCTB4MjIKPiArI2RlZmluZSBIU19SWF9DT05UUk9MX09GX0xBTkVfMAkJCQkweDQ0Cj4gKyNk ZWZpbmUgSFNfVFhfQ0xPQ0tfTEFORV9SRVFVRVNUX1NUQVRFX1RJTUVfQ09OVFJPTAkweDYwCj4g KyNkZWZpbmUgSFNfVFhfQ0xPQ0tfTEFORV9QUkVQQVJFX1NUQVRFX1RJTUVfQ09OVFJPTAkweDYx Cj4gKyNkZWZpbmUgSFNfVFhfQ0xPQ0tfTEFORV9IU19aRVJPX1NUQVRFX1RJTUVfQ09OVFJPTAkw eDYyCj4gKyNkZWZpbmUgSFNfVFhfQ0xPQ0tfTEFORV9UUkFJTF9TVEFURV9USU1FX0NPTlRST0wJ MHg2Mwo+ICsjZGVmaW5lIEhTX1RYX0NMT0NLX0xBTkVfRVhJVF9TVEFURV9USU1FX0NPTlRST0wJ MHg2NAo+ICsjZGVmaW5lIEhTX1RYX0NMT0NLX0xBTkVfUE9TVF9USU1FX0NPTlRST0wJCTB4NjUK PiArI2RlZmluZSBIU19UWF9EQVRBX0xBTkVfUkVRVUVTVF9TVEFURV9USU1FX0NPTlRST0wJMHg3 MAo+ICsjZGVmaW5lIEhTX1RYX0RBVEFfTEFORV9QUkVQQVJFX1NUQVRFX1RJTUVfQ09OVFJPTAkw eDcxCj4gKyNkZWZpbmUgSFNfVFhfREFUQV9MQU5FX0hTX1pFUk9fU1RBVEVfVElNRV9DT05UUk9M CTB4NzIKPiArI2RlZmluZSBIU19UWF9EQVRBX0xBTkVfVFJBSUxfU1RBVEVfVElNRV9DT05UUk9M CTB4NzMKPiArI2RlZmluZSBIU19UWF9EQVRBX0xBTkVfRVhJVF9TVEFURV9USU1FX0NPTlRST0wJ CTB4NzQKPiArCj4gKyNkZWZpbmUgRFdfTUlQSV9ORUVEU19QSFlfQ0ZHX0NMSwlCSVQoMCkKPiAr I2RlZmluZSBEV19NSVBJX05FRURTX0dSRl9DTEsJCUJJVCgxKQo+ICsKPiArI2RlZmluZSBSSzMy ODhfR1JGX1NPQ19DT042CQkweDAyNWMKPiArI2RlZmluZSBSSzMyODhfRFNJMF9MQ0RDX1NFTAkJ QklUKDYpCj4gKyNkZWZpbmUgUkszMjg4X0RTSTFfTENEQ19TRUwJCUJJVCg5KQo+ICsKPiArI2Rl ZmluZSBSSzMzOTlfR1JGX1NPQ19DT04yMAkJMHg2MjUwCj4gKyNkZWZpbmUgUkszMzk5X0RTSTBf TENEQ19TRUwJCUJJVCgwKQo+ICsjZGVmaW5lIFJLMzM5OV9EU0kxX0xDRENfU0VMCQlCSVQoNCkK PiArCj4gKyNkZWZpbmUgUkszMzk5X0dSRl9TT0NfQ09OMjIJCTB4NjI1OAo+ICsjZGVmaW5lIFJL MzM5OV9EU0kwX1RVUk5SRVFVRVNUCQkoMHhmIDw8IDEyKQo+ICsjZGVmaW5lIFJLMzM5OV9EU0kw X1RVUk5ESVNBQkxFCQkoMHhmIDw8IDgpCj4gKyNkZWZpbmUgUkszMzk5X0RTSTBfRk9SQ0VUWFNU T1BNT0RFCSgweGYgPDwgNCkKPiArI2RlZmluZSBSSzMzOTlfRFNJMF9GT1JDRVJYTU9ERQkJKDB4 ZiA8PCAwKQo+ICsKPiArI2RlZmluZSBSSzMzOTlfR1JGX1NPQ19DT04yMwkJMHg2MjVjCj4gKyNk ZWZpbmUgUkszMzk5X0RTSTFfVFVSTkRJU0FCTEUJCSgweGYgPDwgMTIpCj4gKyNkZWZpbmUgUksz Mzk5X0RTSTFfRk9SQ0VUWFNUT1BNT0RFCSgweGYgPDwgOCkKPiArI2RlZmluZSBSSzMzOTlfRFNJ MV9GT1JDRVJYTU9ERQkJKDB4ZiA8PCA0KQo+ICsjZGVmaW5lIFJLMzM5OV9EU0kxX0VOQUJMRQkJ KDB4ZiA8PCAwKQo+ICsKPiArI2RlZmluZSBSSzMzOTlfR1JGX1NPQ19DT04yNAkJMHg2MjYwCj4g KyNkZWZpbmUgUkszMzk5X1RYUlhfTUFTVEVSU0xBVkVaCUJJVCg3KQo+ICsjZGVmaW5lIFJLMzM5 OV9UWFJYX0VOQUJMRUNMSwkJQklUKDYpCj4gKyNkZWZpbmUgUkszMzk5X1RYUlhfQkFTRURJUgkJ QklUKDUpCj4gKwo+ICsjZGVmaW5lIEhJV09SRF9VUERBVEUodmFsLCBtYXNrKQkodmFsIHwgKG1h c2spIDw8IDE2KQo+ICsKPiArI2RlZmluZSB0b19kc2kobm0pCWNvbnRhaW5lcl9vZihubSwgc3Ry dWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwLCBubSkKPiArCj4gK2VudW0gewo+ICsJQkFOREdBUF85 N18wNywKPiArCUJBTkRHQVBfOThfMDUsCj4gKwlCQU5ER0FQXzk5XzAyLAo+ICsJQkFOREdBUF8x MDBfMDAsCj4gKwlCQU5ER0FQXzkzXzE3LAo+ICsJQkFOREdBUF85NF8xNSwKPiArCUJBTkRHQVBf OTVfMTIsCj4gKwlCQU5ER0FQXzk2XzEwLAo+ICt9Owo+ICsKPiArZW51bSB7Cj4gKwlCSUFTRVhU Ul84N18xLAo+ICsJQklBU0VYVFJfOTFfNSwKPiArCUJJQVNFWFRSXzk1XzksCj4gKwlCSUFTRVhU Ul8xMDAsCj4gKwlCSUFTRVhUUl8xMDVfOTQsCj4gKwlCSUFTRVhUUl8xMTFfODgsCj4gKwlCSUFT RVhUUl8xMThfOCwKPiArCUJJQVNFWFRSXzEyN183LAo+ICt9Owo+ICsKPiArc3RydWN0IHJvY2tj aGlwX2R3X2RzaV9jaGlwX2RhdGEgewo+ICsJdTMyIHJlZzsKPiArCj4gKwl1MzIgbGNkc2VsX2dy Zl9yZWc7Cj4gKwl1MzIgbGNkc2VsX2JpZzsKPiArCXUzMiBsY2RzZWxfbGl0Owo+ICsKPiArCXUz MiBlbmFibGVfZ3JmX3JlZzsKPiArCXUzMiBlbmFibGU7Cj4gKwo+ICsJdTMyIGxhbmVjZmcxX2dy Zl9yZWc7Cj4gKwl1MzIgbGFuZWNmZzE7Cj4gKwl1MzIgbGFuZWNmZzJfZ3JmX3JlZzsKPiArCXUz MiBsYW5lY2ZnMjsKPiArCj4gKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cj4gKwl1bnNpZ25lZCBpbnQg bWF4X2RhdGFfbGFuZXM7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAg ewo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7 Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwo+ICsJc3RydWN0IHJlZ21hcCAqZ3JmX3JlZ21h cDsKPiArCXN0cnVjdCBjbGsgKnBsbHJlZl9jbGs7Cj4gKwlzdHJ1Y3QgY2xrICpncmZfY2xrOwo+ ICsJc3RydWN0IGNsayAqcGh5X2NmZ19jbGs7Cj4gKwo+ICsJdW5zaWduZWQgaW50IGxhbmVfbWJw czsgLyogcGVyIGxhbmUgKi8KPiArCXUxNiBpbnB1dF9kaXY7Cj4gKwl1MTYgZmVlZGJhY2tfZGl2 Owo+ICsJdTMyIGZvcm1hdDsKPiArCj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRtZDsKPiArCWNv bnN0IHN0cnVjdCByb2NrY2hpcF9kd19kc2lfY2hpcF9kYXRhICpjZGF0YTsKPiArCXN0cnVjdCBk d19taXBpX2RzaV9wbGF0X2RhdGEgcGRhdGE7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHBoeV9wbGxf cGFyYW1ldGVyX21hcCB7Cj4gKwl1bnNpZ25lZCBpbnQgbWF4X21icHM7Cj4gKwl1OCBoc2ZyZXFy YW5nZTsKPiArCXU4IGljcGN0cmw7Cj4gKwl1OCBscGZjdHJsOwo+ICt9Owo+ICsKPiArLyogVGhl IHRhYmxlIGlzIGJhc2VkIG9uIDI3TUh6IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBkcGh5X3BsbF9wYXJhbWV0ZXJfbWFwIGRwcGFfbWFwW10gPSB7 Cj4gKwl7ICA4OSwgMHgwMCwgQ1BfQ1VSUkVOVF8zVUEsIExQRl9SRVNJU1RPUlNfMTNLT0hNIH0s Cj4gKwl7ICA5OSwgMHgxMCwgQ1BfQ1VSUkVOVF8zVUEsIExQRl9SRVNJU1RPUlNfMTNLT0hNIH0s Cj4gKwl7IDEwOSwgMHgyMCwgQ1BfQ1VSUkVOVF8zVUEsIExQRl9SRVNJU1RPUlNfMTNLT0hNIH0s Cj4gKwl7IDEyOSwgMHgwMSwgQ1BfQ1VSUkVOVF8zVUEsIExQRl9SRVNJU1RPUlNfMTVfNUtPSE0g fSwKPiArCXsgMTM5LCAweDExLCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JFU0lTVE9SU18xNV81S09I TSB9LAo+ICsJeyAxNDksIDB4MjEsIENQX0NVUlJFTlRfM1VBLCBMUEZfUkVTSVNUT1JTXzE1XzVL T0hNIH0sCj4gKwl7IDE2OSwgMHgwMiwgQ1BfQ1VSUkVOVF82VUEsIExQRl9SRVNJU1RPUlNfMTNL T0hNIH0sCj4gKwl7IDE3OSwgMHgxMiwgQ1BfQ1VSUkVOVF82VUEsIExQRl9SRVNJU1RPUlNfMTNL T0hNIH0sCj4gKwl7IDE5OSwgMHgyMiwgQ1BfQ1VSUkVOVF82VUEsIExQRl9SRVNJU1RPUlNfMTNL T0hNIH0sCj4gKwl7IDIxOSwgMHgwMywgQ1BfQ1VSUkVOVF80XzVVQSwgTFBGX1JFU0lTVE9SU18x M0tPSE0gfSwKPiArCXsgMjM5LCAweDEzLCBDUF9DVVJSRU5UXzRfNVVBLCBMUEZfUkVTSVNUT1JT XzEzS09ITSB9LAo+ICsJeyAyNDksIDB4MjMsIENQX0NVUlJFTlRfNF81VUEsIExQRl9SRVNJU1RP UlNfMTNLT0hNIH0sCj4gKwl7IDI2OSwgMHgwNCwgQ1BfQ1VSUkVOVF82VUEsIExQRl9SRVNJU1RP UlNfMTFfNUtPSE0gfSwKPiArCXsgMjk5LCAweDE0LCBDUF9DVVJSRU5UXzZVQSwgTFBGX1JFU0lT VE9SU18xMV81S09ITSB9LAo+ICsJeyAzMjksIDB4MDUsIENQX0NVUlJFTlRfM1VBLCBMUEZfUkVT SVNUT1JTXzE1XzVLT0hNIH0sCj4gKwl7IDM1OSwgMHgxNSwgQ1BfQ1VSUkVOVF8zVUEsIExQRl9S RVNJU1RPUlNfMTVfNUtPSE0gfSwKPiArCXsgMzk5LCAweDI1LCBDUF9DVVJSRU5UXzNVQSwgTFBG X1JFU0lTVE9SU18xNV81S09ITSB9LAo+ICsJeyA0NDksIDB4MDYsIENQX0NVUlJFTlRfN181VUEs IExQRl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKPiArCXsgNDk5LCAweDE2LCBDUF9DVVJSRU5UXzdf NVVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCj4gKwl7IDU0OSwgMHgwNywgQ1BfQ1VSUkVO VF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMF81S09ITSB9LAo+ICsJeyA1OTksIDB4MTcsIENQX0NV UlJFTlRfN181VUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKPiArCXsgNjQ5LCAweDA4LCBD UF9DVVJSRU5UXzdfNVVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCj4gKwl7IDY5OSwgMHgx OCwgQ1BfQ1VSUkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITSB9LAo+ICsJeyA3NDks IDB4MDksIENQX0NVUlJFTlRfN181VUEsIExQRl9SRVNJU1RPUlNfMTFfNUtPSE0gfSwKPiArCXsg Nzk5LCAweDE5LCBDUF9DVVJSRU5UXzdfNVVBLCBMUEZfUkVTSVNUT1JTXzExXzVLT0hNIH0sCj4g Kwl7IDg0OSwgMHgyOSwgQ1BfQ1VSUkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITSB9 LAo+ICsJeyA4OTksIDB4MzksIENQX0NVUlJFTlRfN181VUEsIExQRl9SRVNJU1RPUlNfMTFfNUtP SE0gfSwKPiArCXsgOTQ5LCAweDBhLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfOEtP SE0gfSwKPiArCXsgOTk5LCAweDFhLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfOEtP SE0gfSwKPiArCXsxMDQ5LCAweDJhLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfOEtP SE0gfSwKPiArCXsxMDk5LCAweDNhLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfOEtP SE0gfSwKPiArCXsxMTQ5LCAweDBiLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfMTBf NUtPSE0gfSwKPiArCXsxMTk5LCAweDFiLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNf MTBfNUtPSE0gfSwKPiArCXsxMjQ5LCAweDJiLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RP UlNfMTBfNUtPSE0gfSwKPiArCXsxMjk5LCAweDNiLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJ U1RPUlNfMTBfNUtPSE0gfSwKPiArCXsxMzQ5LCAweDBjLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9S RVNJU1RPUlNfMTBfNUtPSE0gfSwKPiArCXsxMzk5LCAweDFjLCBDUF9DVVJSRU5UXzEyVUEsIExQ Rl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKPiArCXsxNDQ5LCAweDJjLCBDUF9DVVJSRU5UXzEyVUEs IExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfSwKPiArCXsxNTAwLCAweDNjLCBDUF9DVVJSRU5UXzEy VUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE0gfQo+ICt9Owo+ICsKPiArc3RhdGljIGludCBtYXhf bWJwc190b19wYXJhbWV0ZXIodW5zaWduZWQgaW50IG1heF9tYnBzKQo+ICt7Cj4gKwlpbnQgaTsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcHBhX21hcCk7IGkrKykKPiArCQlp ZiAoZHBwYV9tYXBbaV0ubWF4X21icHMgPj0gbWF4X21icHMpCj4gKwkJCXJldHVybiBpOwo+ICsK PiArCXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHNpX3dy aXRlKHN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpLCB1MzIgcmVnLCB1MzIgdmFsKQo+ ICt7Cj4gKwl3cml0ZWwodmFsLCBkc2ktPmJhc2UgKyByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW5saW5lIHUzMiBkc2lfcmVhZChzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwgdTMy IHJlZykKPiArewo+ICsJcmV0dXJuIHJlYWRsKGRzaS0+YmFzZSArIHJlZyk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfc2V0KHN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAq ZHNpLCB1MzIgcmVnLCB1MzIgbWFzaykKPiArewo+ICsJZHNpX3dyaXRlKGRzaSwgcmVnLCBkc2lf cmVhZChkc2ksIHJlZykgfCBtYXNrKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGRz aV91cGRhdGVfYml0cyhzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwgdTMyIHJlZywK PiArCQkJCSAgIHUzMiBtYXNrLCB1MzIgdmFsKQo+ICt7Cj4gKwlkc2lfd3JpdGUoZHNpLCByZWcs IChkc2lfcmVhZChkc2ksIHJlZykgJiB+bWFzaykgfCB2YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9waHlfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpk c2ksCj4gKwkJCQkgIHU4IHRlc3RfY29kZSwKPiArCQkJCSAgdTggdGVzdF9kYXRhKQo+ICt7Cj4g KwkvKgo+ICsJICogV2l0aCB0aGUgZmFsbGluZyBlZGdlIG9uIFRFU1RDTEssIHRoZSBURVNURElO Wzc6MF0gc2lnbmFsIGNvbnRlbnQKPiArCSAqIGlzIGxhdGNoZWQgaW50ZXJuYWxseSBhcyB0aGUg Y3VycmVudCB0ZXN0IGNvZGUuIFRlc3QgZGF0YSBpcwo+ICsJICogcHJvZ3JhbW1lZCBpbnRlcm5h bGx5IGJ5IHJpc2luZyBlZGdlIG9uIFRFU1RDTEsuCj4gKwkgKi8KPiArCWRzaV93cml0ZShkc2ks IERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOwo+ICsKPiAr CWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVEVTVEVOIHwgUEhZX1RFU1RE T1VUKDApIHwKPiArCQkJCQkgIFBIWV9URVNURElOKHRlc3RfY29kZSkpOwo+ICsKPiArCWRzaV93 cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xLIHwgUEhZX1VOVEVTVENM Uik7Cj4gKwo+ICsJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDEsIFBIWV9VTlRFU1RF TiB8IFBIWV9URVNURE9VVCgwKSB8Cj4gKwkJCQkJICBQSFlfVEVTVERJTih0ZXN0X2RhdGEpKTsK PiArCj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1RFU1RDTEsgfCBQ SFlfVU5URVNUQ0xSKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIG5zMmJjIC0gTmFub3NlY29uZHMg dG8gYnl0ZSBjbG9jayBjeWNsZXMKPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50 IG5zMmJjKHN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpLCBpbnQgbnMpCj4gK3sKPiAr CXJldHVybiBESVZfUk9VTkRfVVAobnMgKiBkc2ktPmxhbmVfbWJwcyAvIDgsIDEwMDApOwo+ICt9 Cj4gKwo+ICsvKioKPiArICogbnMydWkgLSBOYW5vc2Vjb25kcyB0byBVSSB0aW1lIHBlcmlvZHMK PiArICovCj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5zMnVpKHN0cnVjdCBkd19taXBp X2RzaV9yb2NrY2hpcCAqZHNpLCBpbnQgbnMpCj4gK3sKPiArCXJldHVybiBESVZfUk9VTkRfVVAo bnMgKiBkc2ktPmxhbmVfbWJwcywgMTAwMCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHdfbWlw aV9kc2lfcGh5X2luaXQodm9pZCAqcHJpdl9kYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9k c2lfcm9ja2NoaXAgKmRzaSA9IHByaXZfZGF0YTsKPiArCWludCByZXQsIGksIHZjbzsKPiArCj4g KwkvKgo+ICsJICogR2V0IHZjbyBmcm9tIGZyZXF1ZW5jeShsYW5lX21icHMpCj4gKwkgKiB2Y28J ZnJlcXVlbmN5IHRhYmxlCj4gKwkgKiAwMDAgLSBiZXR3ZWVuICAgODAgYW5kICAyMDAgTUh6Cj4g KwkgKiAwMDEgLSBiZXR3ZWVuICAyMDAgYW5kICAzMDAgTUh6Cj4gKwkgKiAwMTAgLSBiZXR3ZWVu ICAzMDAgYW5kICA1MDAgTUh6Cj4gKwkgKiAwMTEgLSBiZXR3ZWVuICA1MDAgYW5kICA3MDAgTUh6 Cj4gKwkgKiAxMDAgLSBiZXR3ZWVuICA3MDAgYW5kICA5MDAgTUh6Cj4gKwkgKiAxMDEgLSBiZXR3 ZWVuICA5MDAgYW5kIDExMDAgTUh6Cj4gKwkgKiAxMTAgLSBiZXR3ZWVuIDExMDAgYW5kIDEzMDAg TUh6Cj4gKwkgKiAxMTEgLSBiZXR3ZWVuIDEzMDAgYW5kIDE1MDAgTUh6Cj4gKwkgKi8KPiArCXZj byA9IChkc2ktPmxhbmVfbWJwcyA8IDIwMCkgPyAwIDogKGRzaS0+bGFuZV9tYnBzICsgMTAwKSAv IDIwMDsKPiArCj4gKwlpID0gbWF4X21icHNfdG9fcGFyYW1ldGVyKGRzaS0+bGFuZV9tYnBzKTsK PiArCWlmIChpIDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCj4gKwkJCSAgICAg ICJmYWlsZWQgdG8gZ2V0IHBhcmFtZXRlciBmb3IgJWRtYnBzIGNsb2NrXG4iLAo+ICsJCQkgICAg ICBkc2ktPmxhbmVfbWJwcyk7Cj4gKwkJcmV0dXJuIGk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKGRzaS0+cGh5X2NmZ19jbGspOwo+ICsJaWYgKHJldCkgewo+ICsJCURS TV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBoeV9jZmdfY2xrXG4iKTsK PiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ks IFBMTF9CSUFTX0NVUl9TRUxfQ0FQX1ZDT19DT05UUk9MLAo+ICsJCQkgICAgICBCWVBBU1NfVkNP X1JBTkdFIHwKPiArCQkJICAgICAgVkNPX1JBTkdFX0NPTl9TRUwodmNvKSB8Cj4gKwkJCSAgICAg IFZDT19JTl9DQVBfQ09OX0xPVyB8Cj4gKwkJCSAgICAgIFJFRl9CSUFTX0NVUl9TRUwpOwo+ICsK PiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFBMTF9DUF9DT05UUk9MX1BMTF9MT0NLX0JZ UEFTUywKPiArCQkJICAgICAgQ1BfQ1VSUkVOVF9TRUwoZHBwYV9tYXBbaV0uaWNwY3RybCkpOwo+ ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0xQRl9BTkRfQ1BfQ09OVFJPTCwKPiAr CQkJICAgICAgQ1BfUFJPR1JBTV9FTiB8IExQRl9QUk9HUkFNX0VOIHwKPiArCQkJICAgICAgTFBG X1JFU0lTVE9SU19TRUwoZHBwYV9tYXBbaV0ubHBmY3RybCkpOwo+ICsKPiArCWR3X21pcGlfZHNp X3BoeV93cml0ZShkc2ksIEhTX1JYX0NPTlRST0xfT0ZfTEFORV8wLAo+ICsJCQkgICAgICBIU0ZS RVFSQU5HRV9TRUwoZHBwYV9tYXBbaV0uaHNmcmVxcmFuZ2UpKTsKPiArCj4gKwlkd19taXBpX2Rz aV9waHlfd3JpdGUoZHNpLCBQTExfSU5QVVRfRElWSURFUl9SQVRJTywKPiArCQkJICAgICAgSU5Q VVRfRElWSURFUihkc2ktPmlucHV0X2RpdikpOwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRz aSwgUExMX0xPT1BfRElWSURFUl9SQVRJTywKPiArCQkJICAgICAgTE9PUF9ESVZfTE9XX1NFTChk c2ktPmZlZWRiYWNrX2RpdikgfAo+ICsJCQkgICAgICBMT1dfUFJPR1JBTV9FTik7Cj4gKwkvKgo+ ICsJICogV2UgbmVlZCBzZXQgUExMX0lOUFVUX0FORF9MT09QX0RJVklERVJfUkFUSU9TX0NPTlRS T0wgaW1tZWRpYXRlbHkKPiArCSAqIHRvIG1ha2UgdGhlIGNvbmZpZ3VyZWQgTFNCIGVmZmVjdGl2 ZSBhY2NvcmRpbmcgdG8gSVAgc2ltdWxhdGlvbgo+ICsJICogYW5kIGxhYiB0ZXN0IHJlc3VsdHMu Cj4gKwkgKiBPbmx5IGluIHRoaXMgd2F5IGNhbiB3ZSBnZXQgY29ycmVjdCBtaXBpIHBoeSBwbGwg ZnJlcXVlbmN5Lgo+ICsJICovCj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBQTExfSU5Q VVRfQU5EX0xPT1BfRElWSURFUl9SQVRJT1NfQ09OVFJPTCwKPiArCQkJICAgICAgUExMX0xPT1Bf RElWX0VOIHwgUExMX0lOUFVUX0RJVl9FTik7Cj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNp LCBQTExfTE9PUF9ESVZJREVSX1JBVElPLAo+ICsJCQkgICAgICBMT09QX0RJVl9ISUdIX1NFTChk c2ktPmZlZWRiYWNrX2RpdikgfAo+ICsJCQkgICAgICBISUdIX1BST0dSQU1fRU4pOwo+ICsJZHdf bWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0lOUFVUX0FORF9MT09QX0RJVklERVJfUkFUSU9T X0NPTlRST0wsCj4gKwkJCSAgICAgIFBMTF9MT09QX0RJVl9FTiB8IFBMTF9JTlBVVF9ESVZfRU4p Owo+ICsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEFGRV9CSUFTX0JBTkRHQVBfQU5B TE9HX1BST0dSQU1NQUJJTElUWSwKPiArCQkJICAgICAgTE9XX1BST0dSQU1fRU4gfCBCSUFTRVhU Ul9TRUwoQklBU0VYVFJfMTI3XzcpKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEFG RV9CSUFTX0JBTkRHQVBfQU5BTE9HX1BST0dSQU1NQUJJTElUWSwKPiArCQkJICAgICAgSElHSF9Q Uk9HUkFNX0VOIHwgQkFOREdBUF9TRUwoQkFOREdBUF85Nl8xMCkpOwo+ICsKPiArCWR3X21pcGlf ZHNpX3BoeV93cml0ZShkc2ksIEJBTkRHQVBfQU5EX0JJQVNfQ09OVFJPTCwKPiArCQkJICAgICAg UE9XRVJfQ09OVFJPTCB8IElOVEVSTkFMX1JFR19DVVJSRU5UIHwKPiArCQkJICAgICAgQklBU19C TE9DS19PTiB8IEJBTkRHQVBfT04pOwo+ICsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ks IFRFUk1JTkFUSU9OX1JFU0lTVEVSX0NPTlRST0wsCj4gKwkJCSAgICAgIFRFUl9SRVNJU1RPUl9M T1cgfCBURVJfQ0FMX0RPTkUgfAo+ICsJCQkgICAgICBTRVRSRF9NQVggfCBURVJfUkVTSVNUT1JT X09OKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFRFUk1JTkFUSU9OX1JFU0lTVEVS X0NPTlRST0wsCj4gKwkJCSAgICAgIFRFUl9SRVNJU1RPUl9ISUdIIHwgTEVWRUxfU0hJRlRFUlNf T04gfAo+ICsJCQkgICAgICBTRVRSRF9NQVggfCBQT1dFUl9NQU5BR0UgfAo+ICsJCQkgICAgICBU RVJfUkVTSVNUT1JTX09OKTsKPiArCj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19U WF9DTE9DS19MQU5FX1JFUVVFU1RfU1RBVEVfVElNRV9DT05UUk9MLAo+ICsJCQkgICAgICBUTFBf UFJPR1JBTV9FTiB8IG5zMmJjKGRzaSwgNTAwKSk7Cj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUo ZHNpLCBIU19UWF9DTE9DS19MQU5FX1BSRVBBUkVfU1RBVEVfVElNRV9DT05UUk9MLAo+ICsJCQkg ICAgICBUSFNfUFJFX1BST0dSQU1fRU4gfCBuczJ1aShkc2ksIDQwKSk7Cj4gKwlkd19taXBpX2Rz aV9waHlfd3JpdGUoZHNpLCBIU19UWF9DTE9DS19MQU5FX0hTX1pFUk9fU1RBVEVfVElNRV9DT05U Uk9MLAo+ICsJCQkgICAgICBUSFNfWkVST19QUk9HUkFNX0VOIHwgbnMyYmMoZHNpLCAzMDApKTsK PiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0NMT0NLX0xBTkVfVFJBSUxfU1RB VEVfVElNRV9DT05UUk9MLAo+ICsJCQkgICAgICBUSFNfUFJFX1BST0dSQU1fRU4gfCBuczJ1aShk c2ksIDEwMCkpOwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNfVFhfQ0xPQ0tfTEFO RV9FWElUX1NUQVRFX1RJTUVfQ09OVFJPTCwKPiArCQkJICAgICAgQklUKDUpIHwgbnMyYmMoZHNp LCAxMDApKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0NMT0NLX0xBTkVf UE9TVF9USU1FX0NPTlRST0wsCj4gKwkJCSAgICAgIEJJVCg1KSB8IChuczJiYyhkc2ksIDYwKSAr IDcpKTsKPiArCj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9EQVRBX0xBTkVf UkVRVUVTVF9TVEFURV9USU1FX0NPTlRST0wsCj4gKwkJCSAgICAgIFRMUF9QUk9HUkFNX0VOIHwg bnMyYmMoZHNpLCA1MDApKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0RB VEFfTEFORV9QUkVQQVJFX1NUQVRFX1RJTUVfQ09OVFJPTCwKPiArCQkJICAgICAgVEhTX1BSRV9Q Uk9HUkFNX0VOIHwgKG5zMnVpKGRzaSwgNTApICsgMjApKTsKPiArCWR3X21pcGlfZHNpX3BoeV93 cml0ZShkc2ksIEhTX1RYX0RBVEFfTEFORV9IU19aRVJPX1NUQVRFX1RJTUVfQ09OVFJPTCwKPiAr CQkJICAgICAgVEhTX1pFUk9fUFJPR1JBTV9FTiB8IChuczJiYyhkc2ksIDE0MCkgKyAyKSk7Cj4g Kwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9EQVRBX0xBTkVfVFJBSUxfU1RBVEVf VElNRV9DT05UUk9MLAo+ICsJCQkgICAgICBUSFNfUFJFX1BST0dSQU1fRU4gfCAobnMydWkoZHNp LCA2MCkgKyA4KSk7Cj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9EQVRBX0xB TkVfRVhJVF9TVEFURV9USU1FX0NPTlRST0wsCj4gKwkJCSAgICAgIEJJVCg1KSB8IG5zMmJjKGRz aSwgMTAwKSk7Cj4gKwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGh5X2NmZ19jbGsp Owo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArZHdfbWlwaV9k c2lfZ2V0X2xhbmVfbWJwcyh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlLAo+ICsJCQkgIHVuc2lnbmVkIGxvbmcgbW9kZV9mbGFncywgdTMyIGxhbmVzLCB1MzIg Zm9ybWF0LAo+ICsJCQkgIHVuc2lnbmVkIGludCAqbGFuZV9tYnBzKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHByaXZfZGF0YTsKPiArCWludCBicHA7Cj4gKwl1 bnNpZ25lZCBsb25nIG1wY2xrLCB0bXA7Cj4gKwl1bnNpZ25lZCBpbnQgdGFyZ2V0X21icHMgPSAx MDAwOwo+ICsJdW5zaWduZWQgaW50IG1heF9tYnBzID0gZHBwYV9tYXBbQVJSQVlfU0laRShkcHBh X21hcCkgLSAxXS5tYXhfbWJwczsKPiArCXVuc2lnbmVkIGxvbmcgYmVzdF9mcmVxID0gMDsKPiAr CXVuc2lnbmVkIGxvbmcgZnZjb19taW4sIGZ2Y29fbWF4LCBmaW4sIGZvdXQ7Cj4gKwl1bnNpZ25l ZCBpbnQgbWluX3ByZWRpdiwgbWF4X3ByZWRpdjsKPiArCXVuc2lnbmVkIGludCBfcHJlZGl2LCB1 bmluaXRpYWxpemVkX3ZhcihiZXN0X3ByZWRpdik7Cj4gKwl1bnNpZ25lZCBsb25nIF9mYmRpdiwg dW5pbml0aWFsaXplZF92YXIoYmVzdF9mYmRpdik7Cj4gKwl1bnNpZ25lZCBsb25nIG1pbl9kZWx0 YSA9IFVMT05HX01BWDsKPiArCj4gKwlkc2ktPmZvcm1hdCA9IGZvcm1hdDsKPiArCWJwcCA9IG1p cGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpOwo+ICsJaWYgKGJwcCA8IDAp IHsKPiArCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LAo+ICsJCQkgICAgICAiZmFpbGVkIHRvIGdl dCBicHAgZm9yIHBpeGVsIGZvcm1hdCAlZFxuIiwKPiArCQkJICAgICAgZHNpLT5mb3JtYXQpOwo+ ICsJCXJldHVybiBicHA7Cj4gKwl9Cj4gKwo+ICsJbXBjbGsgPSBESVZfUk9VTkRfVVAobW9kZS0+ Y2xvY2ssIE1TRUNfUEVSX1NFQyk7Cj4gKwlpZiAobXBjbGspIHsKPiArCQkvKiB0YWtlIDEgLyAw LjgsIHNpbmNlIG1icHMgbXVzdCBiaWcgdGhhbiBiYW5kd2lkdGggb2YgUkdCICovCj4gKwkJdG1w ID0gbXBjbGsgKiAoYnBwIC8gbGFuZXMpICogMTAgLyA4Owo+ICsJCWlmICh0bXAgPCBtYXhfbWJw cykKPiArCQkJdGFyZ2V0X21icHMgPSB0bXA7Cj4gKwkJZWxzZQo+ICsJCQlEUk1fREVWX0VSUk9S KGRzaS0+ZGV2LAo+ICsJCQkJICAgICAgIkRQSFkgY2xvY2sgZnJlcXVlbmN5IGlzIG91dCBvZiBy YW5nZVxuIik7Cj4gKwl9Cj4gKwo+ICsJZmluID0gY2xrX2dldF9yYXRlKGRzaS0+cGxscmVmX2Ns ayk7Cj4gKwlmb3V0ID0gdGFyZ2V0X21icHMgKiBVU0VDX1BFUl9TRUM7Cj4gKwo+ICsJLyogY29u c3RyYWludDogNU1oeiA8PSBGcmVmIC8gTiA8PSA0ME1IeiAqLwo+ICsJbWluX3ByZWRpdiA9IERJ Vl9ST1VORF9VUChmaW4sIDQwICogVVNFQ19QRVJfU0VDKTsKPiArCW1heF9wcmVkaXYgPSBmaW4g LyAoNSAqIFVTRUNfUEVSX1NFQyk7Cj4gKwo+ICsJLyogY29uc3RyYWludDogODBNSHogPD0gRnZj byA8PSAxNTAwTWh6ICovCj4gKwlmdmNvX21pbiA9IDgwICogVVNFQ19QRVJfU0VDOwo+ICsJZnZj b19tYXggPSAxNTAwICogVVNFQ19QRVJfU0VDOwo+ICsKPiArCWZvciAoX3ByZWRpdiA9IG1pbl9w cmVkaXY7IF9wcmVkaXYgPD0gbWF4X3ByZWRpdjsgX3ByZWRpdisrKSB7Cj4gKwkJdTY0IHRtcDsK PiArCQl1MzIgZGVsdGE7Cj4gKwkJLyogRnZjbyA9IEZyZWYgKiBNIC8gTiAqLwo+ICsJCXRtcCA9 ICh1NjQpZm91dCAqIF9wcmVkaXY7Cj4gKwkJZG9fZGl2KHRtcCwgZmluKTsKPiArCQlfZmJkaXYg PSB0bXA7Cj4gKwkJLyoKPiArCQkgKiBEdWUgdG8gdGhlIHVzZSBvZiBhICJieSAyIHByZS1zY2Fs ZXIsIiB0aGUgcmFuZ2Ugb2YgdGhlCj4gKwkJICogZmVlZGJhY2sgbXVsdGlwbGljYXRpb24gdmFs dWUgTSBpcyBsaW1pdGVkIHRvIGV2ZW4gZGl2aXNpb24KPiArCQkgKiBudW1iZXJzLCBhbmQgbSBt dXN0IGJlIGdyZWF0ZXIgdGhhbiA2LCBub3QgYmlnZ2VyIHRoYW4gNTEyLgo+ICsJCSAqLwo+ICsJ CWlmIChfZmJkaXYgPCA2IHx8IF9mYmRpdiA+IDUxMikKPiArCQkJY29udGludWU7Cj4gKwo+ICsJ CV9mYmRpdiArPSBfZmJkaXYgJSAyOwo+ICsKPiArCQl0bXAgPSAodTY0KV9mYmRpdiAqIGZpbjsK PiArCQlkb19kaXYodG1wLCBfcHJlZGl2KTsKPiArCQlpZiAodG1wIDwgZnZjb19taW4gfHwgdG1w ID4gZnZjb19tYXgpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlkZWx0YSA9IGFicyhmb3V0IC0g dG1wKTsKPiArCQlpZiAoZGVsdGEgPCBtaW5fZGVsdGEpIHsKPiArCQkJYmVzdF9wcmVkaXYgPSBf cHJlZGl2Owo+ICsJCQliZXN0X2ZiZGl2ID0gX2ZiZGl2Owo+ICsJCQltaW5fZGVsdGEgPSBkZWx0 YTsKPiArCQkJYmVzdF9mcmVxID0gdG1wOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoYmVzdF9m cmVxKSB7Cj4gKwkJZHNpLT5sYW5lX21icHMgPSBESVZfUk9VTkRfVVAoYmVzdF9mcmVxLCBVU0VD X1BFUl9TRUMpOwo+ICsJCSpsYW5lX21icHMgPSBkc2ktPmxhbmVfbWJwczsKPiArCQlkc2ktPmlu cHV0X2RpdiA9IGJlc3RfcHJlZGl2Owo+ICsJCWRzaS0+ZmVlZGJhY2tfZGl2ID0gYmVzdF9mYmRp djsKPiArCX0gZWxzZSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkNhbiBub3QgZmlu ZCBiZXN0X2ZyZXEgZm9yIERQSFlcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNp X3BoeV9vcHMgZHdfbWlwaV9kc2lfcm9ja2NoaXBfcGh5X29wcyA9IHsKPiArCS5pbml0ID0gZHdf bWlwaV9kc2lfcGh5X2luaXQsCj4gKwkuZ2V0X2xhbmVfbWJwcyA9IGR3X21pcGlfZHNpX2dldF9s YW5lX21icHMsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9yb2NrY2hpcF9j b25maWcoc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2ksCj4gKwkJCQkJaW50IG11eCkK PiArewo+ICsJcG1fcnVudGltZV9nZXRfc3luYyhkc2ktPmRldik7Cj4gKwo+ICsJaWYgKGRzaS0+ Y2RhdGEtPmxjZHNlbF9ncmZfcmVnKQo+ICsJCXJlZ21hcF93cml0ZShkc2ktPmdyZl9yZWdtYXAs IGRzaS0+Y2RhdGEtPmxjZHNlbF9ncmZfcmVnLAo+ICsJCQltdXggPyBkc2ktPmNkYXRhLT5sY2Rz ZWxfbGl0IDogZHNpLT5jZGF0YS0+bGNkc2VsX2JpZyk7Cj4gKwo+ICsJaWYgKGRzaS0+Y2RhdGEt PmxhbmVjZmcxX2dyZl9yZWcpCj4gKwkJcmVnbWFwX3dyaXRlKGRzaS0+Z3JmX3JlZ21hcCwgZHNp LT5jZGF0YS0+bGFuZWNmZzFfZ3JmX3JlZywKPiArCQkJCQkgICAgICBkc2ktPmNkYXRhLT5sYW5l Y2ZnMSk7Cj4gKwo+ICsJaWYgKGRzaS0+Y2RhdGEtPmxhbmVjZmcyX2dyZl9yZWcpCj4gKwkJcmVn bWFwX3dyaXRlKGRzaS0+Z3JmX3JlZ21hcCwgZHNpLT5jZGF0YS0+bGFuZWNmZzJfZ3JmX3JlZywK PiArCQkJCQkgICAgICBkc2ktPmNkYXRhLT5sYW5lY2ZnMik7Cj4gKwo+ICsJaWYgKGRzaS0+Y2Rh dGEtPmVuYWJsZV9ncmZfcmVnKQo+ICsJCXJlZ21hcF93cml0ZShkc2ktPmdyZl9yZWdtYXAsIGRz aS0+Y2RhdGEtPmVuYWJsZV9ncmZfcmVnLAo+ICsJCQkJCSAgICAgIGRzaS0+Y2RhdGEtPmVuYWJs ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2VuY29kZXJfbW9kZV9zZXQo c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ICsJCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSwKPiArCQkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHRvX2RzaShlbmNvZGVy KTsKPiArCWludCByZXQsIG11eDsKPiArCj4gKwltdXggPSBkcm1fb2ZfZW5jb2Rlcl9hY3RpdmVf ZW5kcG9pbnRfaWQoZHNpLT5kZXYtPm9mX25vZGUsCj4gKwkJCQkJCSZkc2ktPmVuY29kZXIpOwo+ ICsJaWYgKG11eCA8IDApCj4gKwkJcmV0dXJuOwo+ICsKPiArCS8qCj4gKwkgKiBGb3IgdGhlIFJL MzM5OSwgdGhlIGNsayBvZiBncmYgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSB3cml0aW5nIGdyZgo+ ICsJICogcmVnaXN0ZXIuIEFuZCBmb3IgUkszMjg4IG9yIG90aGVyIHNvYywgdGhpcyBncmZfY2xr IG11c3QgYmUgTlVMTCwKPiArCSAqIHRoZSBjbGtfcHJlcGFyZV9lbmFibGUgcmV0dXJuIHRydWUg ZGlyZWN0bHkuCj4gKwkgKi8KPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmdyZl9j bGspOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQg dG8gZW5hYmxlIGdyZl9jbGs6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4g Kwlkd19taXBpX2RzaV9yb2NrY2hpcF9jb25maWcoZHNpLCBtdXgpOwo+ICsKPiArCWNsa19kaXNh YmxlX3VucHJlcGFyZShkc2ktPmdyZl9jbGspOwo+ICt9CgpEZXNjcmlwdGlvbiBvZiAubW9kZV9z ZXQgY2FsbGJhY2sgc3RhdGVzIGNsZWFybHkgaHcgdG91Y2hpbmcgc2hvdWxkIGJlCmRvbmUgaW4g LmVuYWJsZSBjYWxsYmFjay4gSXMgdGhlcmUgYSByZWFzb24gdG8gZG8gaXQgaGVyZT8KCgo+ICsK PiArc3RhdGljIGludAo+ICtkd19taXBpX2RzaV9lbmNvZGVyX2F0b21pY19jaGVjayhzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIsCj4gKwkJCQkgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLAo+ICsJCQkJIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+ ICt7Cj4gKwlzdHJ1Y3Qgcm9ja2NoaXBfY3J0Y19zdGF0ZSAqcyA9IHRvX3JvY2tjaGlwX2NydGNf c3RhdGUoY3J0Y19zdGF0ZSk7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9 IHRvX2RzaShlbmNvZGVyKTsKPiArCj4gKwlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7Cj4gKwljYXNl IE1JUElfRFNJX0ZNVF9SR0I4ODg6Cj4gKwkJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRf TU9ERV9QODg4Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2Ogo+ICsJ CXMtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfUDY2NjsKPiArCQlicmVhazsKPiAr CWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKPiArCQlzLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQ X09VVF9NT0RFX1A1NjU7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCVdBUk5fT04oMSk7 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcy0+b3V0cHV0X3R5cGUgPSBEUk1f TU9ERV9DT05ORUNUT1JfRFNJOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHRvX2RzaShl bmNvZGVyKTsKPiArCj4gKwlwbV9ydW50aW1lX3B1dChkc2ktPmRldik7Cj4gK30KPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzCj4gK2R3X21pcGlfZHNp X2VuY29kZXJfaGVscGVyX2Z1bmNzID0gewo+ICsJLm1vZGVfc2V0ID0gZHdfbWlwaV9kc2lfZW5j b2Rlcl9tb2RlX3NldCwKPiArCS5hdG9taWNfY2hlY2sgPSBkd19taXBpX2RzaV9lbmNvZGVyX2F0 b21pY19jaGVjaywKPiArCS5kaXNhYmxlID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxlLAo+ ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBkd19taXBp X2RzaV9lbmNvZGVyX2Z1bmNzID0gewo+ICsJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVw LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCByb2NrY2hpcF9kc2lfZHJtX2NyZWF0ZV9lbmNvZGVy KHN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpLAo+ICsJCQkJCSAgIHN0cnVjdCBkcm1f ZGV2aWNlICpkcm1fZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAm ZHNpLT5lbmNvZGVyOwo+ICsJaW50IHJldDsKPiArCj4gKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRj cyA9IGRybV9vZl9maW5kX3Bvc3NpYmxlX2NydGNzKGRybV9kZXYsCj4gKwkJCQkJCQkgICAgIGRz aS0+ZGV2LT5vZl9ub2RlKTsKPiArCj4gKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybV9kZXYs IGVuY29kZXIsICZkd19taXBpX2RzaV9lbmNvZGVyX2Z1bmNzLAo+ICsJCQkgICAgICAgRFJNX01P REVfRU5DT0RFUl9EU0ksIE5VTEwpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiRmFp bGVkIHRvIGluaXRpYWxpemUgZW5jb2RlciB3aXRoIGRybVxuIik7Cj4gKwkJcmV0dXJuIHJldDsK PiArCX0KPiArCj4gKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZkd19taXBpX2Rz aV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZHdfbWlwaV9kc2lfcm9ja2NoaXBfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4g KwkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQkJCSAgICAgdm9pZCAqZGF0YSkK PiArewo+ICsJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKPiArCXN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJLyoKPiArCSAqIEhhbmRsZSBwcm9iZS1kZWZlcnJhbHMgZHVlIHRvIG1p c3NpbmcgZGlzcGxheS4KPiArCSAqLwo+ICsJcmV0ID0gZHJtX29mX2ZpbmRfcGFuZWxfb3JfYnJp ZGdlKGRzaS0+ZGV2LT5vZl9ub2RlLCAxLCAwLAo+ICsJCQkJCSAgJnBhbmVsLCAmYnJpZGdlKTsK PiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKCkRvIHdlIHJlYWxseSBuZWVkIGl0PyBBdCBs ZWFzdCBpZiB5b3UgY29uc2lkZXIgbXkgY29tbWVudHMgdG8gcHJldmlvdXMKcGF0Y2hlcy4KCj4g Kwo+ICsJcmV0ID0gcm9ja2NoaXBfZHNpX2RybV9jcmVhdGVfZW5jb2Rlcihkc2ksIGRybV9kZXYp Owo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGNyZWF0 ZSBkcm0gZW5jb2RlclxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBk d19taXBpX2RzaV9iaW5kKGRzaS0+ZG1kLCAmZHNpLT5lbmNvZGVyKTsKPiArCWlmIChyZXQpIHsK PiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBiaW5kOiAlZFxuIiwgcmV0KTsKPiAr CQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9yb2NrY2hpcF91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LAo+ICsJ CQkJCXN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQkJCQl2b2lkICpkYXRhKQo+ICt7Cj4gKwlz dHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ ICsKPiArCWR3X21pcGlfZHNpX3VuYmluZChkc2ktPmRtZCk7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBkd19taXBpX2RzaV9yb2NrY2hpcF9vcHMgPSB7Cj4g KwkuYmluZAk9IGR3X21pcGlfZHNpX3JvY2tjaGlwX2JpbmQsCj4gKwkudW5iaW5kCT0gZHdfbWlw aV9kc2lfcm9ja2NoaXBfdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBkd19taXBpX2Rz aV9yb2NrY2hpcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IGRldmljZV9ub2RlICpu cCA9IGRldi0+b2Zfbm9kZTsKPiArCXN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpOwo+ ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKwljb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfZHdfZHNp X2NoaXBfZGF0YSAqY2RhdGEgPQo+ICsJCQkJb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7 Cj4gKwlpbnQgcmV0LCBpOwo+ICsKPiArCWRzaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq ZHNpKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWRzaSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDAp Owo+ICsJZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKPiArCWlm IChJU19FUlIoZHNpLT5iYXNlKSkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiVW5hYmxlIHRv IGdldCBkc2kgcmVnaXN0ZXJzXG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihkc2ktPmJhc2UpOwo+ ICsJfQo+ICsKPiArCWkgPSAwOwo+ICsJd2hpbGUgKGNkYXRhW2ldLnJlZykgewo+ICsJCWlmIChj ZGF0YVtpXS5yZWcgPT0gcmVzLT5zdGFydCkgewo+ICsJCQlkc2ktPmNkYXRhID0gJmNkYXRhW2ld Owo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWkrKzsKPiArCX0KPiArCj4gKwlpZiAoIWRz aS0+Y2RhdGEpIHsKPiArCQlkZXZfZXJyKGRldiwgIm5vIGRzaS1jb25maWcgZm9yICVzIG5vZGVc biIsIG5wLT5uYW1lKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlkc2ktPnBs bHJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicmVmIik7Cj4gKwlpZiAoSVNfRVJSKGRzaS0+ cGxscmVmX2NsaykpIHsKPiArCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGxscmVmX2Nsayk7Cj4gKwkJ RFJNX0RFVl9FUlJPUihkZXYsCj4gKwkJCSAgICAgICJVbmFibGUgdG8gZ2V0IHBsbCByZWZlcmVu Y2UgY2xvY2s6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJaWYg KGRzaS0+Y2RhdGEtPmZsYWdzICYgRFdfTUlQSV9ORUVEU19QSFlfQ0ZHX0NMSykgewo+ICsJCWRz aS0+cGh5X2NmZ19jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGh5X2NmZyIpOwo+ICsJCWlmIChJ U19FUlIoZHNpLT5waHlfY2ZnX2NsaykpIHsKPiArCQkJcmV0ID0gUFRSX0VSUihkc2ktPnBoeV9j ZmdfY2xrKTsKPiArCQkJRFJNX0RFVl9FUlJPUihkZXYsCj4gKwkJCQkgICAgICAiVW5hYmxlIHRv IGdldCBwaHlfY2ZnX2NsazogJWRcbiIsIHJldCk7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ ICsJfQo+ICsKPiArCWlmIChkc2ktPmNkYXRhLT5mbGFncyAmIERXX01JUElfTkVFRFNfR1JGX0NM Sykgewo+ICsJCWRzaS0+Z3JmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJncmYiKTsKPiArCQlp ZiAoSVNfRVJSKGRzaS0+Z3JmX2NsaykpIHsKPiArCQkJcmV0ID0gUFRSX0VSUihkc2ktPmdyZl9j bGspOwo+ICsJCQlEUk1fREVWX0VSUk9SKGRldiwgIlVuYWJsZSB0byBnZXQgZ3JmX2NsazogJWRc biIsIHJldCk7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWRzaS0+Z3Jm X3JlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJyb2NrY2hpcCxn cmYiKTsKPiArCWlmIChJU19FUlIoZHNpLT5ncmZfcmVnbWFwKSkgewo+ICsJCURSTV9ERVZfRVJS T1IoZHNpLT5kZXYsICJVbmFibGUgdG8gZ2V0IHJvY2tjaGlwLGdyZlxuIik7Cj4gKwkJcmV0dXJu IFBUUl9FUlIoZHNpLT5ncmZfcmVnbWFwKTsKPiArCX0KPiArCj4gKwlkc2ktPmRldiA9IGRldjsK PiArCWRzaS0+cGRhdGEuYmFzZSA9IGRzaS0+YmFzZTsKPiArCWRzaS0+cGRhdGEubWF4X2RhdGFf bGFuZXMgPSBkc2ktPmNkYXRhLT5tYXhfZGF0YV9sYW5lczsKPiArCWRzaS0+cGRhdGEucGh5X29w cyA9ICZkd19taXBpX2RzaV9yb2NrY2hpcF9waHlfb3BzOwo+ICsJZHNpLT5wZGF0YS5wcml2X2Rh dGEgPSBkc2k7Cj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkc2kpOwo+ICsKPiArCXJl dCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBsbHJlZl9jbGspOwoKQ2FuJ3QgeW91IGVuYWJs ZSB0aGUgY2xvY2sgbGF0ZXI/IFJlc291cmNlcyB1c3VhbGx5IHNob3VsZCBiZSBlbmFibGVkIGFz CmxhdGUgYXMgcG9zc2libGUuCgpSZWdhcmRzCkFuZHJ6ZWoKCj4gKwlpZiAocmV0KSB7Cj4gKwkJ RFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHBsbHJlZl9jbGs6ICVkXG4iLCBy ZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZHNpLT5kbWQgPSBkd19taXBpX2Rz aV9wcm9iZShwZGV2LCAmZHNpLT5wZGF0YSk7Cj4gKwlpZiAoSVNfRVJSKGRzaS0+ZG1kKSkgewo+ ICsJCXJldCA9IFBUUl9FUlIoZHNpLT5kbWQpOwo+ICsJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZF UikKPiArCQkJRFJNX0RFVl9FUlJPUihkZXYsCj4gKwkJCQkgICAgICAiRmFpbGVkIHRvIHByb2Jl IGR3X21pcGlfZHNpOiAlZFxuIiwgcmV0KTsKPiArCQlnb3RvIGVycl9jbGtkaXNhYmxlOwo+ICsJ fQo+ICsKPiArCXJldCA9IGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJmR3X21pcGlfZHNpX3Jv Y2tjaGlwX29wcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWls ZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50OiAlZFxuIiwgcmV0KTsKPiArCQlnb3RvIGVycl9kc2lw cm9iZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9kc2lwcm9iZToKPiArCWR3 X21pcGlfZHNpX3JlbW92ZShkc2ktPmRtZCk7Cj4gK2Vycl9jbGtkaXNhYmxlOgo+ICsJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGRzaS0+cGxscmVmX2Nsayk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGR3X21pcGlfZHNpX3JvY2tjaGlwX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRz aSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsKPiArCWNvbXBvbmVudF9kZWwoJnBk ZXYtPmRldiwgJmR3X21pcGlfZHNpX3JvY2tjaGlwX29wcyk7Cj4gKwlkd19taXBpX2RzaV9yZW1v dmUoZHNpLT5kbWQpOwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGxscmVmX2Nsayk7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcm9ja2No aXBfZHdfZHNpX2NoaXBfZGF0YSByazMyODhfY2hpcF9kYXRhW10gPSB7Cj4gKwl7Cj4gKwkJLnJl ZyA9IDB4ZmY5NjAwMDAsCj4gKwkJLmxjZHNlbF9ncmZfcmVnID0gUkszMjg4X0dSRl9TT0NfQ09O NiwKPiArCQkubGNkc2VsX2JpZyA9IEhJV09SRF9VUERBVEUoMCwgUkszMjg4X0RTSTBfTENEQ19T RUwpLAo+ICsJCS5sY2RzZWxfbGl0ID0gSElXT1JEX1VQREFURShSSzMyODhfRFNJMF9MQ0RDX1NF TCwgUkszMjg4X0RTSTBfTENEQ19TRUwpLAo+ICsKPiArCQkubWF4X2RhdGFfbGFuZXMgPSA0LAo+ ICsJfSwKPiArCXsKPiArCQkucmVnID0gMHhmZjk2NDAwMCwKPiArCQkubGNkc2VsX2dyZl9yZWcg PSBSSzMyODhfR1JGX1NPQ19DT042LAo+ICsJCS5sY2RzZWxfYmlnID0gSElXT1JEX1VQREFURSgw LCBSSzMyODhfRFNJMV9MQ0RDX1NFTCksCj4gKwkJLmxjZHNlbF9saXQgPSBISVdPUkRfVVBEQVRF KFJLMzI4OF9EU0kxX0xDRENfU0VMLCBSSzMyODhfRFNJMV9MQ0RDX1NFTCksCj4gKwo+ICsJCS5t YXhfZGF0YV9sYW5lcyA9IDQsCj4gKwl9LAo+ICsJeyAvKiBzZW50aW5lbCAqLyB9Cj4gK307Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2R3X2RzaV9jaGlwX2RhdGEgcmszMzk5 X2NoaXBfZGF0YVtdID0gewo+ICsJewo+ICsJCS5yZWcgPSAweGZmOTYwMDAwLAo+ICsJCS5sY2Rz ZWxfZ3JmX3JlZyA9IFJLMzM5OV9HUkZfU09DX0NPTjIwLAo+ICsJCS5sY2RzZWxfYmlnID0gSElX T1JEX1VQREFURSgwLCBSSzMzOTlfRFNJMF9MQ0RDX1NFTCksCj4gKwkJLmxjZHNlbF9saXQgPSBI SVdPUkRfVVBEQVRFKFJLMzM5OV9EU0kwX0xDRENfU0VMLAo+ICsJCQkJCSAgICBSSzMzOTlfRFNJ MF9MQ0RDX1NFTCksCj4gKwo+ICsJCS5sYW5lY2ZnMV9ncmZfcmVnID0gUkszMzk5X0dSRl9TT0Nf Q09OMjIsCj4gKwkJLmxhbmVjZmcxID0gSElXT1JEX1VQREFURSgwLCBSSzMzOTlfRFNJMF9UVVJO UkVRVUVTVCB8Cj4gKwkJCQkJICAgICBSSzMzOTlfRFNJMF9UVVJORElTQUJMRSB8Cj4gKwkJCQkJ ICAgICBSSzMzOTlfRFNJMF9GT1JDRVRYU1RPUE1PREUgfAo+ICsJCQkJCSAgICAgUkszMzk5X0RT STBfRk9SQ0VSWE1PREUpLAo+ICsKPiArCQkuZmxhZ3MgPSBEV19NSVBJX05FRURTX1BIWV9DRkdf Q0xLIHwgRFdfTUlQSV9ORUVEU19HUkZfQ0xLLAo+ICsJCS5tYXhfZGF0YV9sYW5lcyA9IDQsCj4g Kwl9LAo+ICsJewo+ICsJCS5yZWcgPSAweGZmOTY4MDAwLAo+ICsJCS5sY2RzZWxfZ3JmX3JlZyA9 IFJLMzM5OV9HUkZfU09DX0NPTjIwLAo+ICsJCS5sY2RzZWxfYmlnID0gSElXT1JEX1VQREFURSgw LCBSSzMzOTlfRFNJMV9MQ0RDX1NFTCksCj4gKwkJLmxjZHNlbF9saXQgPSBISVdPUkRfVVBEQVRF KFJLMzM5OV9EU0kxX0xDRENfU0VMLAo+ICsJCQkJCSAgICBSSzMzOTlfRFNJMV9MQ0RDX1NFTCks Cj4gKwo+ICsJCS5sYW5lY2ZnMV9ncmZfcmVnID0gUkszMzk5X0dSRl9TT0NfQ09OMjMsCj4gKwkJ LmxhbmVjZmcxID0gSElXT1JEX1VQREFURSgwLCBSSzMzOTlfRFNJMV9UVVJORElTQUJMRSB8Cj4g KwkJCQkJICAgICBSSzMzOTlfRFNJMV9GT1JDRVRYU1RPUE1PREUgfAo+ICsJCQkJCSAgICAgUksz Mzk5X0RTSTFfRk9SQ0VSWE1PREUgfAo+ICsJCQkJCSAgICAgUkszMzk5X0RTSTFfRU5BQkxFKSwK PiArCj4gKwkJLmxhbmVjZmcyX2dyZl9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yNCwKPiArCQku bGFuZWNmZzIgPSBISVdPUkRfVVBEQVRFKFJLMzM5OV9UWFJYX01BU1RFUlNMQVZFWiB8Cj4gKwkJ CQkJICBSSzMzOTlfVFhSWF9FTkFCTEVDTEssCj4gKwkJCQkJICBSSzMzOTlfVFhSWF9NQVNURVJT TEFWRVogfAo+ICsJCQkJCSAgUkszMzk5X1RYUlhfRU5BQkxFQ0xLIHwKPiArCQkJCQkgIFJLMzM5 OV9UWFJYX0JBU0VESVIpLAo+ICsKPiArCQkuZW5hYmxlX2dyZl9yZWcgPSBSSzMzOTlfR1JGX1NP Q19DT04yMywKPiArCQkuZW5hYmxlID0gSElXT1JEX1VQREFURShSSzMzOTlfRFNJMV9FTkFCTEUs IFJLMzM5OV9EU0kxX0VOQUJMRSksCj4gKwo+ICsJCS5mbGFncyA9IERXX01JUElfTkVFRFNfUEhZ X0NGR19DTEsgfCBEV19NSVBJX05FRURTX0dSRl9DTEssCj4gKwkJLm1heF9kYXRhX2xhbmVzID0g NCwKPiArCX0sCj4gKwl7IC8qIHNlbnRpbmVsICovIH0KPiArfTsKPiArCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3X21pcGlfZHNpX3JvY2tjaGlwX2R0X2lkc1tdID0gewo+ ICsJewo+ICsJIC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1taXBpLWRzaSIsCj4gKwkg LmRhdGEgPSAmcmszMjg4X2NoaXBfZGF0YSwKPiArCX0sIHsKPiArCSAuY29tcGF0aWJsZSA9ICJy b2NrY2hpcCxyazMzOTktbWlwaS1kc2kiLAo+ICsJIC5kYXRhID0gJnJrMzM5OV9jaGlwX2RhdGEs Cj4gKwl9LAo+ICsJeyAvKiBzZW50aW5lbCAqLyB9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFC TEUob2YsIGR3X21pcGlfZHNpX3JvY2tjaGlwX2R0X2lkcyk7Cj4gKwo+ICtzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIGR3X21pcGlfZHNpX3JvY2tjaGlwX2RyaXZlciA9IHsKPiArCS5wcm9iZQkJPSBk d19taXBpX2RzaV9yb2NrY2hpcF9wcm9iZSwKPiArCS5yZW1vdmUJCT0gZHdfbWlwaV9kc2lfcm9j a2NoaXBfcmVtb3ZlLAo+ICsJLmRyaXZlcgkJPSB7Cj4gKwkJLm9mX21hdGNoX3RhYmxlID0gZHdf bWlwaV9kc2lfcm9ja2NoaXBfZHRfaWRzLAo+ICsJCS5uYW1lCT0gImR3LW1pcGktZHNpLXJvY2tj aGlwIiwKPiArCX0sCj4gK307Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9kdy1taXBpLWRzaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMK PiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCBkNTNkNWEwOTU0N2YuLjAwMDAwMDAw MDAwMAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCj4gKysr IC9kZXYvbnVsbAo+IEBAIC0xLDEzNDkgKzAsMCBAQAo+IC0vKgo+IC0gKiBDb3B5cmlnaHQgKGMp IDIwMTYsIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby4sIEx0ZAo+IC0gKgo+IC0gKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQo+IC0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+IC0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+IC0gKiAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+IC0gKi8KPiAtI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgo+IC0jaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9p b3BvbGwuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgo+IC0jaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiAtI2luY2x1ZGUgPGxp bnV4L3BtX3J1bnRpbWUuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+IC0jaW5jbHVk ZSA8bGludXgvcmVzZXQuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KPiAtI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+IC0jaW5jbHVkZSA8ZHJtL2RybV9jcnRj Lmg+Cj4gLSNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gLSNpbmNsdWRlIDxkcm0v ZHJtX21pcGlfZHNpLmg+Cj4gLSNpbmNsdWRlIDxkcm0vZHJtX29mLmg+Cj4gLSNpbmNsdWRlIDxk cm0vZHJtX3BhbmVsLmg+Cj4gLSNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+IC0jaW5jbHVkZSA8dmlk ZW8vbWlwaV9kaXNwbGF5Lmg+Cj4gLQo+IC0jaW5jbHVkZSAicm9ja2NoaXBfZHJtX2Rydi5oIgo+ IC0jaW5jbHVkZSAicm9ja2NoaXBfZHJtX3ZvcC5oIgo+IC0KPiAtI2RlZmluZSBEUklWRVJfTkFN RSAgICAiZHctbWlwaS1kc2kiCj4gLQo+IC0jZGVmaW5lIFJLMzI4OF9HUkZfU09DX0NPTjYJCTB4 MDI1Ywo+IC0jZGVmaW5lIFJLMzI4OF9EU0kwX1NFTF9WT1BfTElUCQlCSVQoNikKPiAtI2RlZmlu ZSBSSzMyODhfRFNJMV9TRUxfVk9QX0xJVAkJQklUKDkpCj4gLQo+IC0jZGVmaW5lIFJLMzM5OV9H UkZfU09DX0NPTjIwCQkweDYyNTAKPiAtI2RlZmluZSBSSzMzOTlfRFNJMF9TRUxfVk9QX0xJVAkJ QklUKDApCj4gLSNkZWZpbmUgUkszMzk5X0RTSTFfU0VMX1ZPUF9MSVQJCUJJVCg0KQo+IC0KPiAt LyogZGlzYWJsZSB0dXJucmVxdWVzdCwgdHVybmRpc2FibGUsIGZvcmNldHhzdG9wbW9kZSwgZm9y Y2VyeG1vZGUgKi8KPiAtI2RlZmluZSBSSzMzOTlfR1JGX1NPQ19DT04yMgkJMHg2MjU4Cj4gLSNk ZWZpbmUgUkszMzk5X0dSRl9EU0lfTU9ERQkJMHhmZmZmMDAwMAo+IC0KPiAtI2RlZmluZSBEU0lf VkVSU0lPTgkJCTB4MDAKPiAtI2RlZmluZSBEU0lfUFdSX1VQCQkJMHgwNAo+IC0jZGVmaW5lIFJF U0VUCQkJCTAKPiAtI2RlZmluZSBQT1dFUlVQCQkJCUJJVCgwKQo+IC0KPiAtI2RlZmluZSBEU0lf Q0xLTUdSX0NGRwkJCTB4MDgKPiAtI2RlZmluZSBUT19DTEtfRElWSURTSU9OKGRpdikJCSgoKGRp dikgJiAweGZmKSA8PCA4KQo+IC0jZGVmaW5lIFRYX0VTQ19DTEtfRElWSURTSU9OKGRpdikJKCgo ZGl2KSAmIDB4ZmYpIDw8IDApCj4gLQo+IC0jZGVmaW5lIERTSV9EUElfVkNJRAkJCTB4MGMKPiAt I2RlZmluZSBEUElfVklEKHZpZCkJCQkoKCh2aWQpICYgMHgzKSA8PCAwKQo+IC0KPiAtI2RlZmlu ZSBEU0lfRFBJX0NPTE9SX0NPRElORwkJMHgxMAo+IC0jZGVmaW5lIEVOMThfTE9PU0VMWQkJCUJJ VCg4KQo+IC0jZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMQkweDAKPiAtI2RlZmluZSBE UElfQ09MT1JfQ09ESU5HXzE2QklUXzIJMHgxCj4gLSNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18x NkJJVF8zCTB4Mgo+IC0jZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMQkweDMKPiAtI2Rl ZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzIJMHg0Cj4gLSNkZWZpbmUgRFBJX0NPTE9SX0NP RElOR18yNEJJVAkJMHg1Cj4gLQo+IC0jZGVmaW5lIERTSV9EUElfQ0ZHX1BPTAkJCTB4MTQKPiAt I2RlZmluZSBDT0xPUk1fQUNUSVZFX0xPVwkJQklUKDQpCj4gLSNkZWZpbmUgU0hVVERfQUNUSVZF X0xPVwkJQklUKDMpCj4gLSNkZWZpbmUgSFNZTkNfQUNUSVZFX0xPVwkJQklUKDIpCj4gLSNkZWZp bmUgVlNZTkNfQUNUSVZFX0xPVwkJQklUKDEpCj4gLSNkZWZpbmUgREFUQUVOX0FDVElWRV9MT1cJ CUJJVCgwKQo+IC0KPiAtI2RlZmluZSBEU0lfRFBJX0xQX0NNRF9USU0JCTB4MTgKPiAtI2RlZmlu ZSBPVVRWQUNUX0xQQ01EX1RJTUUocCkJCSgoKHApICYgMHhmZikgPDwgMTYpCj4gLSNkZWZpbmUg SU5WQUNUX0xQQ01EX1RJTUUocCkJCSgocCkgJiAweGZmKQo+IC0KPiAtI2RlZmluZSBEU0lfREJJ X0NGRwkJCTB4MjAKPiAtI2RlZmluZSBEU0lfREJJX0NNRFNJWkUJCQkweDI4Cj4gLQo+IC0jZGVm aW5lIERTSV9QQ0tIRExfQ0ZHCQkJMHgyYwo+IC0jZGVmaW5lIEVOX0NSQ19SWAkJCUJJVCg0KQo+ IC0jZGVmaW5lIEVOX0VDQ19SWAkJCUJJVCgzKQo+IC0jZGVmaW5lIEVOX0JUQQkJCQlCSVQoMikK PiAtI2RlZmluZSBFTl9FT1RQX1JYCQkJQklUKDEpCj4gLSNkZWZpbmUgRU5fRU9UUF9UWAkJCUJJ VCgwKQo+IC0KPiAtI2RlZmluZSBEU0lfTU9ERV9DRkcJCQkweDM0Cj4gLSNkZWZpbmUgRU5BQkxF X1ZJREVPX01PREUJCTAKPiAtI2RlZmluZSBFTkFCTEVfQ01EX01PREUJCQlCSVQoMCkKPiAtCj4g LSNkZWZpbmUgRFNJX1ZJRF9NT0RFX0NGRwkJMHgzOAo+IC0jZGVmaW5lIEZSQU1FX0JUQV9BQ0sJ CQlCSVQoMTQpCj4gLSNkZWZpbmUgRU5BQkxFX0xPV19QT1dFUgkJKDB4M2YgPDwgOCkKPiAtI2Rl ZmluZSBFTkFCTEVfTE9XX1BPV0VSX01BU0sJCSgweDNmIDw8IDgpCj4gLSNkZWZpbmUgVklEX01P REVfVFlQRV9OT05fQlVSU1RfU1lOQ19QVUxTRVMJMHgwCj4gLSNkZWZpbmUgVklEX01PREVfVFlQ RV9OT05fQlVSU1RfU1lOQ19FVkVOVFMJMHgxCj4gLSNkZWZpbmUgVklEX01PREVfVFlQRV9CVVJT VAkJCTB4Mgo+IC0jZGVmaW5lIFZJRF9NT0RFX1RZUEVfTUFTSwkJCTB4Mwo+IC0KPiAtI2RlZmlu ZSBEU0lfVklEX1BLVF9TSVpFCQkweDNjCj4gLSNkZWZpbmUgVklEX1BLVF9TSVpFKHApCQkJKCgo cCkgJiAweDNmZmYpIDw8IDApCj4gLSNkZWZpbmUgVklEX1BLVF9NQVhfU0laRQkJMHgzZmZmCj4g LQo+IC0jZGVmaW5lIERTSV9WSURfSFNBX1RJTUUJCTB4NDgKPiAtI2RlZmluZSBEU0lfVklEX0hC UF9USU1FCQkweDRjCj4gLSNkZWZpbmUgRFNJX1ZJRF9ITElORV9USU1FCQkweDUwCj4gLSNkZWZp bmUgRFNJX1ZJRF9WU0FfTElORVMJCTB4NTQKPiAtI2RlZmluZSBEU0lfVklEX1ZCUF9MSU5FUwkJ MHg1OAo+IC0jZGVmaW5lIERTSV9WSURfVkZQX0xJTkVTCQkweDVjCj4gLSNkZWZpbmUgRFNJX1ZJ RF9WQUNUSVZFX0xJTkVTCQkweDYwCj4gLSNkZWZpbmUgRFNJX0NNRF9NT0RFX0NGRwkJMHg2OAo+ IC0jZGVmaW5lIE1BWF9SRF9QS1RfU0laRV9MUAkJQklUKDI0KQo+IC0jZGVmaW5lIERDU19MV19U WF9MUAkJCUJJVCgxOSkKPiAtI2RlZmluZSBEQ1NfU1JfMFBfVFhfTFAJCQlCSVQoMTgpCj4gLSNk ZWZpbmUgRENTX1NXXzFQX1RYX0xQCQkJQklUKDE3KQo+IC0jZGVmaW5lIERDU19TV18wUF9UWF9M UAkJCUJJVCgxNikKPiAtI2RlZmluZSBHRU5fTFdfVFhfTFAJCQlCSVQoMTQpCj4gLSNkZWZpbmUg R0VOX1NSXzJQX1RYX0xQCQkJQklUKDEzKQo+IC0jZGVmaW5lIEdFTl9TUl8xUF9UWF9MUAkJCUJJ VCgxMikKPiAtI2RlZmluZSBHRU5fU1JfMFBfVFhfTFAJCQlCSVQoMTEpCj4gLSNkZWZpbmUgR0VO X1NXXzJQX1RYX0xQCQkJQklUKDEwKQo+IC0jZGVmaW5lIEdFTl9TV18xUF9UWF9MUAkJCUJJVCg5 KQo+IC0jZGVmaW5lIEdFTl9TV18wUF9UWF9MUAkJCUJJVCg4KQo+IC0jZGVmaW5lIEVOX0FDS19S UVNUCQkJQklUKDEpCj4gLSNkZWZpbmUgRU5fVEVBUl9GWAkJCUJJVCgwKQo+IC0KPiAtI2RlZmlu ZSBDTURfTU9ERV9BTExfTFAJCQkoTUFYX1JEX1BLVF9TSVpFX0xQIHwgXAo+IC0JCQkJCSBEQ1Nf TFdfVFhfTFAgfCBcCj4gLQkJCQkJIERDU19TUl8wUF9UWF9MUCB8IFwKPiAtCQkJCQkgRENTX1NX XzFQX1RYX0xQIHwgXAo+IC0JCQkJCSBEQ1NfU1dfMFBfVFhfTFAgfCBcCj4gLQkJCQkJIEdFTl9M V19UWF9MUCB8IFwKPiAtCQkJCQkgR0VOX1NSXzJQX1RYX0xQIHwgXAo+IC0JCQkJCSBHRU5fU1Jf MVBfVFhfTFAgfCBcCj4gLQkJCQkJIEdFTl9TUl8wUF9UWF9MUCB8IFwKPiAtCQkJCQkgR0VOX1NX XzJQX1RYX0xQIHwgXAo+IC0JCQkJCSBHRU5fU1dfMVBfVFhfTFAgfCBcCj4gLQkJCQkJIEdFTl9T V18wUF9UWF9MUCkKPiAtCj4gLSNkZWZpbmUgRFNJX0dFTl9IRFIJCQkweDZjCj4gLSNkZWZpbmUg R0VOX0hEQVRBKGRhdGEpCQkJKCgoZGF0YSkgJiAweGZmZmYpIDw8IDgpCj4gLSNkZWZpbmUgR0VO X0hEQVRBX01BU0sJCQkoMHhmZmZmIDw8IDgpCj4gLSNkZWZpbmUgR0VOX0hUWVBFKHR5cGUpCQkJ KCgodHlwZSkgJiAweGZmKSA8PCAwKQo+IC0jZGVmaW5lIEdFTl9IVFlQRV9NQVNLCQkJMHhmZgo+ IC0KPiAtI2RlZmluZSBEU0lfR0VOX1BMRF9EQVRBCQkweDcwCj4gLQo+IC0jZGVmaW5lIERTSV9D TURfUEtUX1NUQVRVUwkJMHg3NAo+IC0jZGVmaW5lIEdFTl9DTURfRU1QVFkJCQlCSVQoMCkKPiAt I2RlZmluZSBHRU5fQ01EX0ZVTEwJCQlCSVQoMSkKPiAtI2RlZmluZSBHRU5fUExEX1dfRU1QVFkJ CQlCSVQoMikKPiAtI2RlZmluZSBHRU5fUExEX1dfRlVMTAkJCUJJVCgzKQo+IC0jZGVmaW5lIEdF Tl9QTERfUl9FTVBUWQkJCUJJVCg0KQo+IC0jZGVmaW5lIEdFTl9QTERfUl9GVUxMCQkJQklUKDUp Cj4gLSNkZWZpbmUgR0VOX1JEX0NNRF9CVVNZCQkJQklUKDYpCj4gLQo+IC0jZGVmaW5lIERTSV9U T19DTlRfQ0ZHCQkJMHg3OAo+IC0jZGVmaW5lIEhTVFhfVE9fQ05UKHApCQkJKCgocCkgJiAweGZm ZmYpIDw8IDE2KQo+IC0jZGVmaW5lIExQUlhfVE9fQ05UKHApCQkJKChwKSAmIDB4ZmZmZikKPiAt Cj4gLSNkZWZpbmUgRFNJX0JUQV9UT19DTlQJCQkweDhjCj4gLSNkZWZpbmUgRFNJX0xQQ0xLX0NU UkwJCQkweDk0Cj4gLSNkZWZpbmUgQVVUT19DTEtMQU5FX0NUUkwJCUJJVCgxKQo+IC0jZGVmaW5l IFBIWV9UWFJFUVVFU1RDTEtIUwkJQklUKDApCj4gLQo+IC0jZGVmaW5lIERTSV9QSFlfVE1SX0xQ Q0xLX0NGRwkJMHg5OAo+IC0jZGVmaW5lIFBIWV9DTEtIUzJMUF9USU1FKGxiY2MpCQkoKChsYmNj KSAmIDB4M2ZmKSA8PCAxNikKPiAtI2RlZmluZSBQSFlfQ0xLTFAySFNfVElNRShsYmNjKQkJKChs YmNjKSAmIDB4M2ZmKQo+IC0KPiAtI2RlZmluZSBEU0lfUEhZX1RNUl9DRkcJCQkweDljCj4gLSNk ZWZpbmUgUEhZX0hTMkxQX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHhmZikgPDwgMjQpCj4gLSNk ZWZpbmUgUEhZX0xQMkhTX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHhmZikgPDwgMTYpCj4gLSNk ZWZpbmUgTUFYX1JEX1RJTUUobGJjYykJCSgobGJjYykgJiAweDdmZmYpCj4gLQo+IC0jZGVmaW5l IERTSV9QSFlfUlNUWgkJCTB4YTAKPiAtI2RlZmluZSBQSFlfRElTRk9SQ0VQTEwJCQkwCj4gLSNk ZWZpbmUgUEhZX0VORk9SQ0VQTEwJCQlCSVQoMykKPiAtI2RlZmluZSBQSFlfRElTQUJMRUNMSwkJ CTAKPiAtI2RlZmluZSBQSFlfRU5BQkxFQ0xLCQkJQklUKDIpCj4gLSNkZWZpbmUgUEhZX1JTVFoJ CQkwCj4gLSNkZWZpbmUgUEhZX1VOUlNUWgkJCUJJVCgxKQo+IC0jZGVmaW5lIFBIWV9TSFVURE9X TloJCQkwCj4gLSNkZWZpbmUgUEhZX1VOU0hVVERPV05aCQkJQklUKDApCj4gLQo+IC0jZGVmaW5l IERTSV9QSFlfSUZfQ0ZHCQkJMHhhNAo+IC0jZGVmaW5lIE5fTEFORVMobikJCQkoKCgobikgLSAx KSAmIDB4MykgPDwgMCkKPiAtI2RlZmluZSBQSFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUpCSgoKGN5 Y2xlKSAmIDB4ZmYpIDw8IDgpCj4gLQo+IC0jZGVmaW5lIERTSV9QSFlfU1RBVFVTCQkJMHhiMAo+ IC0jZGVmaW5lIExPQ0sJCQkJQklUKDApCj4gLSNkZWZpbmUgU1RPUF9TVEFURV9DTEtfTEFORQkJ QklUKDIpCj4gLQo+IC0jZGVmaW5lIERTSV9QSFlfVFNUX0NUUkwwCQkweGI0Cj4gLSNkZWZpbmUg UEhZX1RFU1RDTEsJCQlCSVQoMSkKPiAtI2RlZmluZSBQSFlfVU5URVNUQ0xLCQkJMAo+IC0jZGVm aW5lIFBIWV9URVNUQ0xSCQkJQklUKDApCj4gLSNkZWZpbmUgUEhZX1VOVEVTVENMUgkJCTAKPiAt Cj4gLSNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDEJCTB4YjgKPiAtI2RlZmluZSBQSFlfVEVTVEVO CQkJQklUKDE2KQo+IC0jZGVmaW5lIFBIWV9VTlRFU1RFTgkJCTAKPiAtI2RlZmluZSBQSFlfVEVT VERPVVQobikJCQkoKChuKSAmIDB4ZmYpIDw8IDgpCj4gLSNkZWZpbmUgUEhZX1RFU1RESU4obikJ CQkoKChuKSAmIDB4ZmYpIDw8IDApCj4gLQo+IC0jZGVmaW5lIERTSV9JTlRfU1QwCQkJMHhiYwo+ IC0jZGVmaW5lIERTSV9JTlRfU1QxCQkJMHhjMAo+IC0jZGVmaW5lIERTSV9JTlRfTVNLMAkJCTB4 YzQKPiAtI2RlZmluZSBEU0lfSU5UX01TSzEJCQkweGM4Cj4gLQo+IC0jZGVmaW5lIFBIWV9TVEFU VVNfVElNRU9VVF9VUwkJMTAwMDAKPiAtI2RlZmluZSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VT CTIwMDAwCj4gLQo+IC0jZGVmaW5lIEJZUEFTU19WQ09fUkFOR0UJQklUKDcpCj4gLSNkZWZpbmUg VkNPX1JBTkdFX0NPTl9TRUwodmFsKQkoKCh2YWwpICYgMHg3KSA8PCAzKQo+IC0jZGVmaW5lIFZD T19JTl9DQVBfQ09OX0RFRkFVTFQJKDB4MCA8PCAxKQo+IC0jZGVmaW5lIFZDT19JTl9DQVBfQ09O X0xPVwkoMHgxIDw8IDEpCj4gLSNkZWZpbmUgVkNPX0lOX0NBUF9DT05fSElHSAkoMHgyIDw8IDEp Cj4gLSNkZWZpbmUgUkVGX0JJQVNfQ1VSX1NFTAlCSVQoMCkKPiAtCj4gLSNkZWZpbmUgQ1BfQ1VS UkVOVF8zTUEJCUJJVCgzKQo+IC0jZGVmaW5lIENQX1BST0dSQU1fRU4JCUJJVCg3KQo+IC0jZGVm aW5lIExQRl9QUk9HUkFNX0VOCQlCSVQoNikKPiAtI2RlZmluZSBMUEZfUkVTSVNUT1JTXzIwX0tP SE0JMAo+IC0KPiAtI2RlZmluZSBIU0ZSRVFSQU5HRV9TRUwodmFsKQkoKCh2YWwpICYgMHgzZikg PDwgMSkKPiAtCj4gLSNkZWZpbmUgSU5QVVRfRElWSURFUih2YWwpCSgoKHZhbCkgLSAxKSAmIDB4 N2YpCj4gLSNkZWZpbmUgTE9XX1BST0dSQU1fRU4JCTAKPiAtI2RlZmluZSBISUdIX1BST0dSQU1f RU4JCUJJVCg3KQo+IC0jZGVmaW5lIExPT1BfRElWX0xPV19TRUwodmFsKQkoKCh2YWwpIC0gMSkg JiAweDFmKQo+IC0jZGVmaW5lIExPT1BfRElWX0hJR0hfU0VMKHZhbCkJKCgoKHZhbCkgLSAxKSA+ PiA1KSAmIDB4MWYpCj4gLSNkZWZpbmUgUExMX0xPT1BfRElWX0VOCQlCSVQoNSkKPiAtI2RlZmlu ZSBQTExfSU5QVVRfRElWX0VOCUJJVCg0KQo+IC0KPiAtI2RlZmluZSBQT1dFUl9DT05UUk9MCQlC SVQoNikKPiAtI2RlZmluZSBJTlRFUk5BTF9SRUdfQ1VSUkVOVAlCSVQoMykKPiAtI2RlZmluZSBC SUFTX0JMT0NLX09OCQlCSVQoMikKPiAtI2RlZmluZSBCQU5ER0FQX09OCQlCSVQoMCkKPiAtCj4g LSNkZWZpbmUgVEVSX1JFU0lTVE9SX0hJR0gJQklUKDcpCj4gLSNkZWZpbmUJVEVSX1JFU0lTVE9S X0xPVwkwCj4gLSNkZWZpbmUgTEVWRUxfU0hJRlRFUlNfT04JQklUKDYpCj4gLSNkZWZpbmUgVEVS X0NBTF9ET05FCQlCSVQoNSkKPiAtI2RlZmluZSBTRVRSRF9NQVgJCSgweDcgPDwgMikKPiAtI2Rl ZmluZSBQT1dFUl9NQU5BR0UJCUJJVCgxKQo+IC0jZGVmaW5lIFRFUl9SRVNJU1RPUlNfT04JQklU KDApCj4gLQo+IC0jZGVmaW5lIEJJQVNFWFRSX1NFTCh2YWwpCSgodmFsKSAmIDB4NykKPiAtI2Rl ZmluZSBCQU5ER0FQX1NFTCh2YWwpCSgodmFsKSAmIDB4NykKPiAtI2RlZmluZSBUTFBfUFJPR1JB TV9FTgkJQklUKDcpCj4gLSNkZWZpbmUgVEhTX1BSRV9QUk9HUkFNX0VOCUJJVCg3KQo+IC0jZGVm aW5lIFRIU19aRVJPX1BST0dSQU1fRU4JQklUKDYpCj4gLQo+IC0jZGVmaW5lIERXX01JUElfTkVF RFNfUEhZX0NGR19DTEsJQklUKDApCj4gLSNkZWZpbmUgRFdfTUlQSV9ORUVEU19HUkZfQ0xLCQlC SVQoMSkKPiAtCj4gLWVudW0gewo+IC0JQkFOREdBUF85N18wNywKPiAtCUJBTkRHQVBfOThfMDUs Cj4gLQlCQU5ER0FQXzk5XzAyLAo+IC0JQkFOREdBUF8xMDBfMDAsCj4gLQlCQU5ER0FQXzkzXzE3 LAo+IC0JQkFOREdBUF85NF8xNSwKPiAtCUJBTkRHQVBfOTVfMTIsCj4gLQlCQU5ER0FQXzk2XzEw LAo+IC19Owo+IC0KPiAtZW51bSB7Cj4gLQlCSUFTRVhUUl84N18xLAo+IC0JQklBU0VYVFJfOTFf NSwKPiAtCUJJQVNFWFRSXzk1XzksCj4gLQlCSUFTRVhUUl8xMDAsCj4gLQlCSUFTRVhUUl8xMDVf OTQsCj4gLQlCSUFTRVhUUl8xMTFfODgsCj4gLQlCSUFTRVhUUl8xMThfOCwKPiAtCUJJQVNFWFRS XzEyN183LAo+IC19Owo+IC0KPiAtc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSB7Cj4gLQl1 MzIgZHNpMF9lbl9iaXQ7Cj4gLQl1MzIgZHNpMV9lbl9iaXQ7Cj4gLQl1MzIgZ3JmX3N3aXRjaF9y ZWc7Cj4gLQl1MzIgZ3JmX2RzaTBfbW9kZTsKPiAtCXUzMiBncmZfZHNpMF9tb2RlX3JlZzsKPiAt CXVuc2lnbmVkIGludCBmbGFnczsKPiAtCXVuc2lnbmVkIGludCBtYXhfZGF0YV9sYW5lczsKPiAt fTsKPiAtCj4gLXN0cnVjdCBkd19taXBpX2RzaSB7Cj4gLQlzdHJ1Y3QgZHJtX2VuY29kZXIgZW5j b2RlcjsKPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKPiAtCXN0cnVjdCBtaXBp X2RzaV9ob3N0IGRzaV9ob3N0Owo+IC0Jc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7Cj4gLQlzdHJ1 Y3QgZGV2aWNlICpkZXY7Cj4gLQlzdHJ1Y3QgcmVnbWFwICpncmZfcmVnbWFwOwo+IC0Jdm9pZCBf X2lvbWVtICpiYXNlOwo+IC0KPiAtCXN0cnVjdCBjbGsgKmdyZl9jbGs7Cj4gLQlzdHJ1Y3QgY2xr ICpwbGxyZWZfY2xrOwo+IC0Jc3RydWN0IGNsayAqcGNsazsKPiAtCXN0cnVjdCBjbGsgKnBoeV9j ZmdfY2xrOwo+IC0KPiAtCWludCBkcG1zX21vZGU7Cj4gLQl1bnNpZ25lZCBpbnQgbGFuZV9tYnBz OyAvKiBwZXIgbGFuZSAqLwo+IC0JdTMyIGNoYW5uZWw7Cj4gLQl1MzIgbGFuZXM7Cj4gLQl1MzIg Zm9ybWF0Owo+IC0JdTE2IGlucHV0X2RpdjsKPiAtCXUxNiBmZWVkYmFja19kaXY7Cj4gLQl1bnNp Z25lZCBsb25nIG1vZGVfZmxhZ3M7Cj4gLQo+IC0JY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3Bs YXRfZGF0YSAqcGRhdGE7Cj4gLX07Cj4gLQo+IC1lbnVtIGR3X21pcGlfZHNpX21vZGUgewo+IC0J RFdfTUlQSV9EU0lfQ01EX01PREUsCj4gLQlEV19NSVBJX0RTSV9WSURfTU9ERSwKPiAtfTsKPiAt Cj4gLXN0cnVjdCBkcGh5X3BsbF90ZXN0ZGluX21hcCB7Cj4gLQl1bnNpZ25lZCBpbnQgbWF4X21i cHM7Cj4gLQl1OCB0ZXN0ZGluOwo+IC19Owo+IC0KPiAtLyogVGhlIHRhYmxlIGlzIGJhc2VkIG9u IDI3TUh6IERQSFkgcGxsIHJlZmVyZW5jZSBjbG9jay4gKi8KPiAtc3RhdGljIGNvbnN0IHN0cnVj dCBkcGh5X3BsbF90ZXN0ZGluX21hcCBkcHRkaW5fbWFwW10gPSB7Cj4gLQl7ICA5MCwgMHgwMH0s IHsgMTAwLCAweDEwfSwgeyAxMTAsIDB4MjB9LCB7IDEzMCwgMHgwMX0sCj4gLQl7IDE0MCwgMHgx MX0sIHsgMTUwLCAweDIxfSwgeyAxNzAsIDB4MDJ9LCB7IDE4MCwgMHgxMn0sCj4gLQl7IDIwMCwg MHgyMn0sIHsgMjIwLCAweDAzfSwgeyAyNDAsIDB4MTN9LCB7IDI1MCwgMHgyM30sCj4gLQl7IDI3 MCwgMHgwNH0sIHsgMzAwLCAweDE0fSwgeyAzMzAsIDB4MDV9LCB7IDM2MCwgMHgxNX0sCj4gLQl7 IDQwMCwgMHgyNX0sIHsgNDUwLCAweDA2fSwgeyA1MDAsIDB4MTZ9LCB7IDU1MCwgMHgwN30sCj4g LQl7IDYwMCwgMHgxN30sIHsgNjUwLCAweDA4fSwgeyA3MDAsIDB4MTh9LCB7IDc1MCwgMHgwOX0s Cj4gLQl7IDgwMCwgMHgxOX0sIHsgODUwLCAweDI5fSwgeyA5MDAsIDB4Mzl9LCB7IDk1MCwgMHgw YX0sCj4gLQl7MTAwMCwgMHgxYX0sIHsxMDUwLCAweDJhfSwgezExMDAsIDB4M2F9LCB7MTE1MCwg MHgwYn0sCj4gLQl7MTIwMCwgMHgxYn0sIHsxMjUwLCAweDJifSwgezEzMDAsIDB4M2J9LCB7MTM1 MCwgMHgwY30sCj4gLQl7MTQwMCwgMHgxY30sIHsxNDUwLCAweDJjfSwgezE1MDAsIDB4M2N9Cj4g LX07Cj4gLQo+IC1zdGF0aWMgaW50IG1heF9tYnBzX3RvX3Rlc3RkaW4odW5zaWduZWQgaW50IG1h eF9tYnBzKQo+IC17Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShkcHRkaW5fbWFwKTsgaSsrKQo+IC0JCWlmIChkcHRkaW5fbWFwW2ldLm1heF9tYnBzID4gbWF4 X21icHMpCj4gLQkJCXJldHVybiBkcHRkaW5fbWFwW2ldLnRlc3RkaW47Cj4gLQo+IC0JcmV0dXJu IC1FSU5WQUw7Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIFRoZSBjb250cm9sbGVyIHNob3VsZCBnZW5l cmF0ZSAyIGZyYW1lcyBiZWZvcmUKPiAtICogcHJlcGFyaW5nIHRoZSBwZXJpcGhlcmFsLgo+IC0g Ki8KPiAtc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfd2FpdF9mb3JfdHdvX2ZyYW1lcyhzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiAtewo+IC0JaW50IHJlZnJlc2gsIHR3b19mcmFtZXM7 Cj4gLQo+IC0JcmVmcmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpOwo+IC0JdHdvX2ZyYW1l cyA9IERJVl9ST1VORF9VUChNU0VDX1BFUl9TRUMsIHJlZnJlc2gpICogMjsKPiAtCW1zbGVlcCh0 d29fZnJhbWVzKTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBzdHJ1Y3QgZHdfbWlwaV9kc2kg Kmhvc3RfdG9fZHNpKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0KQo+IC17Cj4gLQlyZXR1cm4g Y29udGFpbmVyX29mKGhvc3QsIHN0cnVjdCBkd19taXBpX2RzaSwgZHNpX2hvc3QpOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAqY29uX3RvX2RzaShzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29uKQo+IC17Cj4gLQlyZXR1cm4gY29udGFpbmVyX29mKGNvbiwgc3Ry dWN0IGR3X21pcGlfZHNpLCBjb25uZWN0b3IpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHN0 cnVjdCBkd19taXBpX2RzaSAqZW5jb2Rlcl90b19kc2koc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQo+IC17Cj4gLQlyZXR1cm4gY29udGFpbmVyX29mKGVuY29kZXIsIHN0cnVjdCBkd19taXBp X2RzaSwgZW5jb2Rlcik7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBkc2lfd3JpdGUo c3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiByZWcsIHUzMiB2YWwpCj4gLXsKPiAtCXdyaXRl bCh2YWwsIGRzaS0+YmFzZSArIHJlZyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdTMyIGRz aV9yZWFkKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnKQo+IC17Cj4gLQlyZXR1cm4g cmVhZGwoZHNpLT5iYXNlICsgcmVnKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHdfbWlwaV9k c2lfcGh5X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1OCB0ZXN0X2NvZGUsCj4gLQkJ CQkgIHU4IHRlc3RfZGF0YSkKPiAtewo+IC0JLyoKPiAtCSAqIFdpdGggdGhlIGZhbGxpbmcgZWRn ZSBvbiBURVNUQ0xLLCB0aGUgVEVTVERJTls3OjBdIHNpZ25hbCBjb250ZW50Cj4gLQkgKiBpcyBs YXRjaGVkIGludGVybmFsbHkgYXMgdGhlIGN1cnJlbnQgdGVzdCBjb2RlLiBUZXN0IGRhdGEgaXMK PiAtCSAqIHByb2dyYW1tZWQgaW50ZXJuYWxseSBieSByaXNpbmcgZWRnZSBvbiBURVNUQ0xLLgo+ IC0JICovCj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1RFU1RDTEsg fCBQSFlfVU5URVNUQ0xSKTsKPiAtCj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJM MSwgUEhZX1RFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8Cj4gLQkJCQkJICBQSFlfVEVTVERJTih0 ZXN0X2NvZGUpKTsKPiAtCj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZ X1VOVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOwo+IC0KPiAtCWRzaV93cml0ZShkc2ksIERTSV9Q SFlfVFNUX0NUUkwxLCBQSFlfVU5URVNURU4gfCBQSFlfVEVTVERPVVQoMCkgfAo+IC0JCQkJCSAg UEhZX1RFU1RESU4odGVzdF9kYXRhKSk7Cj4gLQo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9U U1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7Cj4gLX0KPiAtCj4gLS8qKgo+ IC0gKiBuczJiYyAtIE5hbm9zZWNvbmRzIHRvIGJ5dGUgY2xvY2sgY3ljbGVzCj4gLSAqLwo+IC1z dGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuczJiYyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwg aW50IG5zKQo+IC17Cj4gLQlyZXR1cm4gRElWX1JPVU5EX1VQKG5zICogZHNpLT5sYW5lX21icHMg LyA4LCAxMDAwKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIG5zMnVpIC0gTmFub3NlY29uZHMgdG8g VUkgdGltZSBwZXJpb2RzCj4gLSAqLwo+IC1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuczJ1 aShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgaW50IG5zKQo+IC17Cj4gLQlyZXR1cm4gRElWX1JP VU5EX1VQKG5zICogZHNpLT5sYW5lX21icHMsIDEwMDApOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50 IGR3X21pcGlfZHNpX3BoeV9pbml0KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQo+IC17Cj4gLQlp bnQgcmV0LCB0ZXN0ZGluLCB2Y28sIHZhbDsKPiAtCj4gLQl2Y28gPSAoZHNpLT5sYW5lX21icHMg PCAyMDApID8gMCA6IChkc2ktPmxhbmVfbWJwcyArIDEwMCkgLyAyMDA7Cj4gLQo+IC0JdGVzdGRp biA9IG1heF9tYnBzX3RvX3Rlc3RkaW4oZHNpLT5sYW5lX21icHMpOwo+IC0JaWYgKHRlc3RkaW4g PCAwKSB7Cj4gLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKPiAtCQkJICAgICAgImZhaWxlZCB0 byBnZXQgdGVzdGRpbiBmb3IgJWRtYnBzIGxhbmUgY2xvY2tcbiIsCj4gLQkJCSAgICAgIGRzaS0+ bGFuZV9tYnBzKTsKPiAtCQlyZXR1cm4gdGVzdGRpbjsKPiAtCX0KPiAtCj4gLQkvKiBTdGFydCBi eSBjbGVhcmluZyBQSFkgc3RhdGUgKi8KPiAtCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NU UkwwLCBQSFlfVU5URVNUQ0xSKTsKPiAtCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkww LCBQSFlfVEVTVENMUik7Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZ X1VOVEVTVENMUik7Cj4gLQo+IC0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGh5X2Nm Z19jbGspOwo+IC0JaWYgKHJldCkgewo+IC0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWls ZWQgdG8gZW5hYmxlIHBoeV9jZmdfY2xrXG4iKTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0K PiAtCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTAsIEJZUEFTU19WQ09fUkFOR0UgfAo+ IC0JCQkJCSBWQ09fUkFOR0VfQ09OX1NFTCh2Y28pIHwKPiAtCQkJCQkgVkNPX0lOX0NBUF9DT05f TE9XIHwKPiAtCQkJCQkgUkVGX0JJQVNfQ1VSX1NFTCk7Cj4gLQo+IC0JZHdfbWlwaV9kc2lfcGh5 X3dyaXRlKGRzaSwgMHgxMSwgQ1BfQ1VSUkVOVF8zTUEpOwo+IC0JZHdfbWlwaV9kc2lfcGh5X3dy aXRlKGRzaSwgMHgxMiwgQ1BfUFJPR1JBTV9FTiB8IExQRl9QUk9HUkFNX0VOIHwKPiAtCQkJCQkg TFBGX1JFU0lTVE9SU18yMF9LT0hNKTsKPiAtCj4gLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNp LCAweDQ0LCBIU0ZSRVFSQU5HRV9TRUwodGVzdGRpbikpOwo+IC0KPiAtCWR3X21pcGlfZHNpX3Bo eV93cml0ZShkc2ksIDB4MTcsIElOUFVUX0RJVklERVIoZHNpLT5pbnB1dF9kaXYpKTsKPiAtCWR3 X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTgsIExPT1BfRElWX0xPV19TRUwoZHNpLT5mZWVk YmFja19kaXYpIHwKPiAtCQkJCQkgTE9XX1BST0dSQU1fRU4pOwo+IC0JZHdfbWlwaV9kc2lfcGh5 X3dyaXRlKGRzaSwgMHgxOCwgTE9PUF9ESVZfSElHSF9TRUwoZHNpLT5mZWVkYmFja19kaXYpIHwK PiAtCQkJCQkgSElHSF9QUk9HUkFNX0VOKTsKPiAtCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ks IDB4MTksIFBMTF9MT09QX0RJVl9FTiB8IFBMTF9JTlBVVF9ESVZfRU4pOwo+IC0KPiAtCWR3X21p cGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjIsIExPV19QUk9HUkFNX0VOIHwKPiAtCQkJCQkgQklB U0VYVFJfU0VMKEJJQVNFWFRSXzEyN183KSk7Cj4gLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNp LCAweDIyLCBISUdIX1BST0dSQU1fRU4gfAo+IC0JCQkJCSBCQU5ER0FQX1NFTChCQU5ER0FQXzk2 XzEwKSk7Cj4gLQo+IC0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMCwgUE9XRVJfQ09O VFJPTCB8IElOVEVSTkFMX1JFR19DVVJSRU5UIHwKPiAtCQkJCQkgQklBU19CTE9DS19PTiB8IEJB TkRHQVBfT04pOwo+IC0KPiAtCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjEsIFRFUl9S RVNJU1RPUl9MT1cgfCBURVJfQ0FMX0RPTkUgfAo+IC0JCQkJCSBTRVRSRF9NQVggfCBURVJfUkVT SVNUT1JTX09OKTsKPiAtCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjEsIFRFUl9SRVNJ U1RPUl9ISUdIIHwgTEVWRUxfU0hJRlRFUlNfT04gfAo+IC0JCQkJCSBTRVRSRF9NQVggfCBQT1dF Ul9NQU5BR0UgfAo+IC0JCQkJCSBURVJfUkVTSVNUT1JTX09OKTsKPiAtCj4gLQlkd19taXBpX2Rz aV9waHlfd3JpdGUoZHNpLCAweDYwLCBUTFBfUFJPR1JBTV9FTiB8IG5zMmJjKGRzaSwgNTAwKSk7 Cj4gLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDYxLCBUSFNfUFJFX1BST0dSQU1fRU4g fCBuczJ1aShkc2ksIDQwKSk7Cj4gLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDYyLCBU SFNfWkVST19QUk9HUkFNX0VOIHwgbnMyYmMoZHNpLCAzMDApKTsKPiAtCWR3X21pcGlfZHNpX3Bo eV93cml0ZShkc2ksIDB4NjMsIFRIU19QUkVfUFJPR1JBTV9FTiB8IG5zMnVpKGRzaSwgMTAwKSk7 Cj4gLQlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDY0LCBCSVQoNSkgfCBuczJiYyhkc2ks IDEwMCkpOwo+IC0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg2NSwgQklUKDUpIHwgKG5z MmJjKGRzaSwgNjApICsgNykpOwo+IC0KPiAtCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4 NzAsIFRMUF9QUk9HUkFNX0VOIHwgbnMyYmMoZHNpLCA1MDApKTsKPiAtCWR3X21pcGlfZHNpX3Bo eV93cml0ZShkc2ksIDB4NzEsCj4gLQkJCSAgICAgIFRIU19QUkVfUFJPR1JBTV9FTiB8IChuczJ1 aShkc2ksIDUwKSArIDUpKTsKPiAtCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NzIsCj4g LQkJCSAgICAgIFRIU19aRVJPX1BST0dSQU1fRU4gfCAobnMyYmMoZHNpLCAxNDApICsgMikpOwo+ IC0JZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg3MywKPiAtCQkJICAgICAgVEhTX1BSRV9Q Uk9HUkFNX0VOIHwgKG5zMnVpKGRzaSwgNjApICsgOCkpOwo+IC0JZHdfbWlwaV9kc2lfcGh5X3dy aXRlKGRzaSwgMHg3NCwgQklUKDUpIHwgbnMyYmMoZHNpLCAxMDApKTsKPiAtCj4gLQlkc2lfd3Jp dGUoZHNpLCBEU0lfUEhZX1JTVFosIFBIWV9FTkZPUkNFUExMIHwgUEhZX0VOQUJMRUNMSyB8Cj4g LQkJCQkgICAgIFBIWV9VTlJTVFogfCBQSFlfVU5TSFVURE9XTlopOwo+IC0KPiAtCXJldCA9IHJl YWRsX3BvbGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfUEhZX1NUQVRVUywKPiAtCQkJCSB2YWws IHZhbCAmIExPQ0ssIDEwMDAsIFBIWV9TVEFUVVNfVElNRU9VVF9VUyk7Cj4gLQlpZiAocmV0IDwg MCkgewo+IC0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJmYWlsZWQgdG8gd2FpdCBmb3IgcGh5 IGxvY2sgc3RhdGVcbiIpOwo+IC0JCWdvdG8gcGh5X2luaXRfZW5kOwo+IC0JfQo+IC0KPiAtCXJl dCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfUEhZX1NUQVRVUywKPiAtCQkJ CSB2YWwsIHZhbCAmIFNUT1BfU1RBVEVfQ0xLX0xBTkUsIDEwMDAsCj4gLQkJCQkgUEhZX1NUQVRV U19USU1FT1VUX1VTKTsKPiAtCWlmIChyZXQgPCAwKQo+IC0JCURSTV9ERVZfRVJST1IoZHNpLT5k ZXYsCj4gLQkJCSAgICAgICJmYWlsZWQgdG8gd2FpdCBmb3IgcGh5IGNsayBsYW5lIHN0b3Agc3Rh dGVcbiIpOwo+IC0KPiAtcGh5X2luaXRfZW5kOgo+IC0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRz aS0+cGh5X2NmZ19jbGspOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBp bnQgZHdfbWlwaV9kc2lfZ2V0X2xhbmVfYnBzKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAo+IC0J CQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+IC17Cj4gLQl1bnNpZ25lZCBp bnQgaSwgcHJlOwo+IC0JdW5zaWduZWQgbG9uZyBtcGNsaywgcGxscmVmLCB0bXA7Cj4gLQl1bnNp Z25lZCBpbnQgbSA9IDEsIG4gPSAxLCB0YXJnZXRfbWJwcyA9IDEwMDA7Cj4gLQl1bnNpZ25lZCBp bnQgbWF4X21icHMgPSBkcHRkaW5fbWFwW0FSUkFZX1NJWkUoZHB0ZGluX21hcCkgLSAxXS5tYXhf bWJwczsKPiAtCWludCBicHA7Cj4gLQo+IC0JYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3Rv X2JwcChkc2ktPmZvcm1hdCk7Cj4gLQlpZiAoYnBwIDwgMCkgewo+IC0JCURSTV9ERVZfRVJST1Io ZHNpLT5kZXYsCj4gLQkJCSAgICAgICJmYWlsZWQgdG8gZ2V0IGJwcCBmb3IgcGl4ZWwgZm9ybWF0 ICVkXG4iLAo+IC0JCQkgICAgICBkc2ktPmZvcm1hdCk7Cj4gLQkJcmV0dXJuIGJwcDsKPiAtCX0K PiAtCj4gLQltcGNsayA9IERJVl9ST1VORF9VUChtb2RlLT5jbG9jaywgTVNFQ19QRVJfU0VDKTsK PiAtCWlmIChtcGNsaykgewo+IC0JCS8qIHRha2UgMSAvIDAuOCwgc2luY2UgbWJwcyBtdXN0IGJp ZyB0aGFuIGJhbmR3aWR0aCBvZiBSR0IgKi8KPiAtCQl0bXAgPSBtcGNsayAqIChicHAgLyBkc2kt PmxhbmVzKSAqIDEwIC8gODsKPiAtCQlpZiAodG1wIDwgbWF4X21icHMpCj4gLQkJCXRhcmdldF9t YnBzID0gdG1wOwo+IC0JCWVsc2UKPiAtCQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKPiAtCQkJ CSAgICAgICJEUEhZIGNsb2NrIGZyZXF1ZW5jeSBpcyBvdXQgb2YgcmFuZ2VcbiIpOwo+IC0JfQo+ IC0KPiAtCXBsbHJlZiA9IERJVl9ST1VORF9VUChjbGtfZ2V0X3JhdGUoZHNpLT5wbGxyZWZfY2xr KSwgVVNFQ19QRVJfU0VDKTsKPiAtCXRtcCA9IHBsbHJlZjsKPiAtCj4gLQkvKgo+IC0JICogVGhl IGxpbWl0cyBvbiB0aGUgUExMIGRpdmlzb3IgYXJlOgo+IC0JICoKPiAtCSAqCTVNSHogPD0gKHBs bHJlZiAvIG4pIDw9IDQwTUh6Cj4gLQkgKgo+IC0JICogd2Ugd2FsayBvdmVyIHRoZXNlIHZhbHVl cyBpbiBkZXNjcmVhc2luZyBvcmRlciBzbyB0aGF0IGlmIHdlIGhpdAo+IC0JICogYW4gZXhhY3Qg bWF0Y2ggZm9yIHRhcmdldF9tYnBzIGl0IGlzIG1vcmUgbGlrZWx5IHRoYXQgIm0iIHdpbGwgYmUK PiAtCSAqIGV2ZW4uCj4gLQkgKgo+IC0JICogVE9ETzogZW5zdXJlIHRoYXQgIm0iIGlzIGV2ZW4g YWZ0ZXIgdGhpcyBsb29wLgo+IC0JICovCj4gLQlmb3IgKGkgPSBwbGxyZWYgLyA1OyBpID4gKHBs bHJlZiAvIDQwKTsgaS0tKSB7Cj4gLQkJcHJlID0gcGxscmVmIC8gaTsKPiAtCQlpZiAoKHRtcCA+ ICh0YXJnZXRfbWJwcyAlIHByZSkpICYmICh0YXJnZXRfbWJwcyAvIHByZSA8IDUxMikpIHsKPiAt CQkJdG1wID0gdGFyZ2V0X21icHMgJSBwcmU7Cj4gLQkJCW4gPSBpOwo+IC0JCQltID0gdGFyZ2V0 X21icHMgLyBwcmU7Cj4gLQkJfQo+IC0JCWlmICh0bXAgPT0gMCkKPiAtCQkJYnJlYWs7Cj4gLQl9 Cj4gLQo+IC0JZHNpLT5sYW5lX21icHMgPSBwbGxyZWYgLyBuICogbTsKPiAtCWRzaS0+aW5wdXRf ZGl2ID0gbjsKPiAtCWRzaS0+ZmVlZGJhY2tfZGl2ID0gbTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAt fQo+IC0KPiAtc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3QgbWlwaV9k c2lfaG9zdCAqaG9zdCwKPiAtCQkJCSAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkK PiAtewo+IC0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsKPiAt Cj4gLQlpZiAoZGV2aWNlLT5sYW5lcyA+IGRzaS0+cGRhdGEtPm1heF9kYXRhX2xhbmVzKSB7Cj4g LQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKPiAtCQkJICAgICAgInRoZSBudW1iZXIgb2YgZGF0 YSBsYW5lcygldSkgaXMgdG9vIG1hbnlcbiIsCj4gLQkJCSAgICAgIGRldmljZS0+bGFuZXMpOwo+ IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWRzaS0+bGFuZXMgPSBkZXZpY2UtPmxh bmVzOwo+IC0JZHNpLT5jaGFubmVsID0gZGV2aWNlLT5jaGFubmVsOwo+IC0JZHNpLT5mb3JtYXQg PSBkZXZpY2UtPmZvcm1hdDsKPiAtCWRzaS0+bW9kZV9mbGFncyA9IGRldmljZS0+bW9kZV9mbGFn czsKPiAtCWRzaS0+cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChkZXZpY2UtPmRldi5vZl9ub2Rl KTsKPiAtCWlmIChkc2ktPnBhbmVsKQo+IC0JCXJldHVybiBkcm1fcGFuZWxfYXR0YWNoKGRzaS0+ cGFuZWwsICZkc2ktPmNvbm5lY3Rvcik7Cj4gLQo+IC0JcmV0dXJuIC1FSU5WQUw7Cj4gLX0KPiAt Cj4gLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hv c3QgKmhvc3QsCj4gLQkJCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpCj4gLXsK PiAtCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7Cj4gLQo+IC0J ZHJtX3BhbmVsX2RldGFjaChkc2ktPnBhbmVsKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQgZHdfbWlwaV9tZXNzYWdlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kg KmRzaSwKPiAtCQkJCSAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKPiAtewo+IC0J Ym9vbCBscG0gPSBtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1VTRV9MUE07Cj4gLQl1MzIgdmFs ID0gMDsKPiAtCj4gLQlpZiAobXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19SRVFfQUNLKQo+IC0J CXZhbCB8PSBFTl9BQ0tfUlFTVDsKPiAtCWlmIChscG0pCj4gLQkJdmFsIHw9IENNRF9NT0RFX0FM TF9MUDsKPiAtCj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfTFBDTEtfQ1RSTCwgbHBtID8gMCA6IFBI WV9UWFJFUVVFU1RDTEtIUyk7Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfQ01EX01PREVfQ0ZHLCB2 YWwpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRl KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgaGRyX3ZhbCkKPiAtewo+IC0JaW50IHJldDsK PiAtCXUzMiB2YWwsIG1hc2s7Cj4gLQo+IC0JcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGRzaS0+ YmFzZSArIERTSV9DTURfUEtUX1NUQVRVUywKPiAtCQkJCSB2YWwsICEodmFsICYgR0VOX0NNRF9G VUxMKSwgMTAwMCwKPiAtCQkJCSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTKTsKPiAtCWlmIChy ZXQgPCAwKSB7Cj4gLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKPiAtCQkJICAgICAgImZhaWxl ZCB0byBnZXQgYXZhaWxhYmxlIGNvbW1hbmQgRklGT1xuIik7Cj4gLQkJcmV0dXJuIHJldDsKPiAt CX0KPiAtCj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX0hEUiwgaGRyX3ZhbCk7Cj4gLQo+IC0J bWFzayA9IEdFTl9DTURfRU1QVFkgfCBHRU5fUExEX1dfRU1QVFk7Cj4gLQlyZXQgPSByZWFkbF9w b2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX0NNRF9QS1RfU1RBVFVTLAo+IC0JCQkJIHZhbCwg KHZhbCAmIG1hc2spID09IG1hc2ssCj4gLQkJCQkgMTAwMCwgQ01EX1BLVF9TVEFUVVNfVElNRU9V VF9VUyk7Cj4gLQlpZiAocmV0IDwgMCkgewo+IC0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJm YWlsZWQgdG8gd3JpdGUgY29tbWFuZCBGSUZPXG4iKTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+ IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGR3X21pcGlfZHNpX2Rjc19z aG9ydF93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKPiAtCQkJCSAgICAgICBjb25zdCBz dHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCj4gLXsKPiAtCWNvbnN0IHU4ICp0eF9idWYgPSBtc2ct PnR4X2J1ZjsKPiAtCXUxNiBkYXRhID0gMDsKPiAtCXUzMiB2YWw7Cj4gLQo+IC0JaWYgKG1zZy0+ dHhfbGVuID4gMCkKPiAtCQlkYXRhIHw9IHR4X2J1ZlswXTsKPiAtCWlmIChtc2ctPnR4X2xlbiA+ IDEpCj4gLQkJZGF0YSB8PSB0eF9idWZbMV0gPDwgODsKPiAtCj4gLQlpZiAobXNnLT50eF9sZW4g PiAyKSB7Cj4gLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKPiAtCQkJICAgICAgInRvbyBsb25n IHR4IGJ1ZiBsZW5ndGggJXp1IGZvciBzaG9ydCB3cml0ZVxuIiwKPiAtCQkJICAgICAgbXNnLT50 eF9sZW4pOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCXZhbCA9IEdFTl9IREFU QShkYXRhKSB8IEdFTl9IVFlQRShtc2ctPnR5cGUpOwo+IC0JcmV0dXJuIGR3X21pcGlfZHNpX2dl bl9wa3RfaGRyX3dyaXRlKGRzaSwgdmFsKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBkd19taXBp X2RzaV9kY3NfbG9uZ193cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKPiAtCQkJCSAgICAg IGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKPiAtewo+IC0JY29uc3QgdTggKnR4X2J1 ZiA9IG1zZy0+dHhfYnVmOwo+IC0JaW50IGxlbiA9IG1zZy0+dHhfbGVuLCBwbGRfZGF0YV9ieXRl cyA9IHNpemVvZih1MzIpLCByZXQ7Cj4gLQl1MzIgaGRyX3ZhbCA9IEdFTl9IREFUQShtc2ctPnR4 X2xlbikgfCBHRU5fSFRZUEUobXNnLT50eXBlKTsKPiAtCXUzMiByZW1haW5kZXI7Cj4gLQl1MzIg dmFsOwo+IC0KPiAtCWlmIChtc2ctPnR4X2xlbiA8IDMpIHsKPiAtCQlEUk1fREVWX0VSUk9SKGRz aS0+ZGV2LAo+IC0JCQkgICAgICAid3JvbmcgdHggYnVmIGxlbmd0aCAlenUgZm9yIGxvbmcgd3Jp dGVcbiIsCj4gLQkJCSAgICAgIG1zZy0+dHhfbGVuKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAt CX0KPiAtCj4gLQl3aGlsZSAoRElWX1JPVU5EX1VQKGxlbiwgcGxkX2RhdGFfYnl0ZXMpKSB7Cj4g LQkJaWYgKGxlbiA8IHBsZF9kYXRhX2J5dGVzKSB7Cj4gLQkJCXJlbWFpbmRlciA9IDA7Cj4gLQkJ CW1lbWNweSgmcmVtYWluZGVyLCB0eF9idWYsIGxlbik7Cj4gLQkJCWRzaV93cml0ZShkc2ksIERT SV9HRU5fUExEX0RBVEEsIHJlbWFpbmRlcik7Cj4gLQkJCWxlbiA9IDA7Cj4gLQkJfSBlbHNlIHsK PiAtCQkJbWVtY3B5KCZyZW1haW5kZXIsIHR4X2J1ZiwgcGxkX2RhdGFfYnl0ZXMpOwo+IC0JCQlk c2lfd3JpdGUoZHNpLCBEU0lfR0VOX1BMRF9EQVRBLCByZW1haW5kZXIpOwo+IC0JCQl0eF9idWYg Kz0gcGxkX2RhdGFfYnl0ZXM7Cj4gLQkJCWxlbiAtPSBwbGRfZGF0YV9ieXRlczsKPiAtCQl9Cj4g LQo+IC0JCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9T VEFUVVMsCj4gLQkJCQkJIHZhbCwgISh2YWwgJiBHRU5fUExEX1dfRlVMTCksIDEwMDAsCj4gLQkJ CQkJIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMpOwo+IC0JCWlmIChyZXQgPCAwKSB7Cj4gLQkJ CURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCj4gLQkJCQkgICAgICAiZmFpbGVkIHRvIGdldCBhdmFp bGFibGUgd3JpdGUgcGF5bG9hZCBGSUZPXG4iKTsKPiAtCQkJcmV0dXJuIHJldDsKPiAtCQl9Cj4g LQl9Cj4gLQo+IC0JcmV0dXJuIGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRlKGRzaSwgaGRy X3ZhbCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzc2l6ZV90IGR3X21pcGlfZHNpX2hvc3RfdHJhbnNm ZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCj4gLQkJCQkJIGNvbnN0IHN0cnVjdCBtaXBp X2RzaV9tc2cgKm1zZykKPiAtewo+IC0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0X3Rv X2RzaShob3N0KTsKPiAtCWludCByZXQ7Cj4gLQo+IC0JZHdfbWlwaV9tZXNzYWdlX2NvbmZpZyhk c2ksIG1zZyk7Cj4gLQo+IC0Jc3dpdGNoIChtc2ctPnR5cGUpIHsKPiAtCWNhc2UgTUlQSV9EU0lf RENTX1NIT1JUX1dSSVRFOgo+IC0JY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEVfUEFSQU06 Cj4gLQljYXNlIE1JUElfRFNJX1NFVF9NQVhJTVVNX1JFVFVSTl9QQUNLRVRfU0laRToKPiAtCQly ZXQgPSBkd19taXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoZHNpLCBtc2cpOwo+IC0JCWJyZWFrOwo+ IC0JY2FzZSBNSVBJX0RTSV9EQ1NfTE9OR19XUklURToKPiAtCQlyZXQgPSBkd19taXBpX2RzaV9k Y3NfbG9uZ193cml0ZShkc2ksIG1zZyk7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCURS TV9ERVZfRVJST1IoZHNpLT5kZXYsICJ1bnN1cHBvcnRlZCBtZXNzYWdlIHR5cGUgMHglMDJ4XG4i LAo+IC0JCQkgICAgICBtc2ctPnR5cGUpOwo+IC0JCXJldCA9IC1FSU5WQUw7Cj4gLQl9Cj4gLQo+ IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9o b3N0X29wcyBkd19taXBpX2RzaV9ob3N0X29wcyA9IHsKPiAtCS5hdHRhY2ggPSBkd19taXBpX2Rz aV9ob3N0X2F0dGFjaCwKPiAtCS5kZXRhY2ggPSBkd19taXBpX2RzaV9ob3N0X2RldGFjaCwKPiAt CS50cmFuc2ZlciA9IGR3X21pcGlfZHNpX2hvc3RfdHJhbnNmZXIsCj4gLX07Cj4gLQo+IC1zdGF0 aWMgdm9pZCBkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kg KmRzaSkKPiAtewo+IC0JdTMyIHZhbDsKPiAtCj4gLQl2YWwgPSBFTkFCTEVfTE9XX1BPV0VSOwo+ IC0KPiAtCWlmIChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKQo+ IC0JCXZhbCB8PSBWSURfTU9ERV9UWVBFX0JVUlNUOwo+IC0JZWxzZSBpZiAoZHNpLT5tb2RlX2Zs YWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKQo+IC0JCXZhbCB8PSBWSURfTU9E RV9UWVBFX05PTl9CVVJTVF9TWU5DX1BVTFNFUzsKPiAtCWVsc2UKPiAtCQl2YWwgfD0gVklEX01P REVfVFlQRV9OT05fQlVSU1RfU1lOQ19FVkVOVFM7Cj4gLQo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJ X1ZJRF9NT0RFX0NGRywgdmFsKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lf c2V0X21vZGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCj4gLQkJCQkgZW51bSBkd19taXBpX2Rz aV9tb2RlIG1vZGUpCj4gLXsKPiAtCWlmIChtb2RlID09IERXX01JUElfRFNJX0NNRF9NT0RFKSB7 Cj4gLQkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOwo+IC0JCWRzaV93cml0ZShk c2ksIERTSV9NT0RFX0NGRywgRU5BQkxFX0NNRF9NT0RFKTsKPiAtCQlkc2lfd3JpdGUoZHNpLCBE U0lfUFdSX1VQLCBQT1dFUlVQKTsKPiAtCX0gZWxzZSB7Cj4gLQkJZHNpX3dyaXRlKGRzaSwgRFNJ X1BXUl9VUCwgUkVTRVQpOwo+IC0JCWRzaV93cml0ZShkc2ksIERTSV9NT0RFX0NGRywgRU5BQkxF X1ZJREVPX01PREUpOwo+IC0JCWR3X21pcGlfZHNpX3ZpZGVvX21vZGVfY29uZmlnKGRzaSk7Cj4g LQkJZHNpX3dyaXRlKGRzaSwgRFNJX0xQQ0xLX0NUUkwsIFBIWV9UWFJFUVVFU1RDTEtIUyk7Cj4g LQkJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7Cj4gLQl9Cj4gLX0KPiAtCj4g LXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2Rpc2FibGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Cj4gLXsKPiAtCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKPiAtCWRzaV93cml0 ZShkc2ksIERTSV9QSFlfUlNUWiwgUEhZX1JTVFopOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBk d19taXBpX2RzaV9pbml0KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQo+IC17Cj4gLQkvKgo+IC0J ICogVGhlIG1heGltdW0gcGVybWl0dGVkIGVzY2FwZSBjbG9jayBpcyAyME1IeiBhbmQgaXQgaXMg ZGVyaXZlZCBmcm9tCj4gLQkgKiBsYW5lYnl0ZWNsaywgd2hpY2ggaXMgcnVubmluZyBhdCAibGFu ZV9tYnBzIC8gOCIuICBUaHVzIHdlIHdhbnQ6Cj4gLQkgKgo+IC0JICogICAgIChsYW5lX21icHMg Pj4gMykgLyBlc2NfY2xrX2RpdmlzaW9uIDwgMjAKPiAtCSAqIHdoaWNoIGlzOgo+IC0JICogICAg IChsYW5lX21icHMgPj4gMykgLyAyMCA+IGVzY19jbGtfZGl2aXNpb24KPiAtCSAqLwo+IC0JdTMy IGVzY19jbGtfZGl2aXNpb24gPSAoZHNpLT5sYW5lX21icHMgPj4gMykgLyAyMCArIDE7Cj4gLQo+ IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOwo+IC0JZHNpX3dyaXRlKGRzaSwg RFNJX1BIWV9SU1RaLCBQSFlfRElTRk9SQ0VQTEwgfCBQSFlfRElTQUJMRUNMSwo+IC0JCSAgfCBQ SFlfUlNUWiB8IFBIWV9TSFVURE9XTlopOwo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX0NMS01HUl9D RkcsIFRPX0NMS19ESVZJRFNJT04oMTApIHwKPiAtCQkgIFRYX0VTQ19DTEtfRElWSURTSU9OKGVz Y19jbGtfZGl2aXNpb24pKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBp X2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKPiAtCQkJCSAgIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlKQo+IC17Cj4gLQl1MzIgdmFsID0gMCwgY29sb3IgPSAwOwo+IC0KPiAt CXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKPiAtCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKPiAt CQljb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMjRCSVQ7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIE1J UElfRFNJX0ZNVF9SR0I2NjY6Cj4gLQkJY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzIg fCBFTjE4X0xPT1NFTFk7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZf UEFDS0VEOgo+IC0JCWNvbG9yID0gRFBJX0NPTE9SX0NPRElOR18xOEJJVF8xOwo+IC0JCWJyZWFr Owo+IC0JY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1Ogo+IC0JCWNvbG9yID0gRFBJX0NPTE9SX0NP RElOR18xNkJJVF8xOwo+IC0JCWJyZWFrOwo+IC0JfQo+IC0KPiAtCWlmIChtb2RlLT5mbGFncyAm IERSTV9NT0RFX0ZMQUdfTlZTWU5DKQo+IC0JCXZhbCB8PSBWU1lOQ19BQ1RJVkVfTE9XOwo+IC0J aWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCj4gLQkJdmFsIHw9IEhTWU5D X0FDVElWRV9MT1c7Cj4gLQo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9WQ0lELCBEUElfVklE KGRzaS0+Y2hhbm5lbCkpOwo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9DT0xPUl9DT0RJTkcs IGNvbG9yKTsKPiAtCWRzaV93cml0ZShkc2ksIERTSV9EUElfQ0ZHX1BPTCwgdmFsKTsKPiAtCWRz aV93cml0ZShkc2ksIERTSV9EUElfTFBfQ01EX1RJTSwgT1VUVkFDVF9MUENNRF9USU1FKDQpCj4g LQkJICB8IElOVkFDVF9MUENNRF9USU1FKDQpKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHdf bWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQo+ IC17Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfUENLSERMX0NGRywgRU5fQ1JDX1JYIHwgRU5fRUND X1JYIHwgRU5fQlRBKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdmlkZW9f cGFja2V0X2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKPiAtCQkJCQkgICAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gLXsKPiAtCWRzaV93cml0ZShkc2ksIERTSV9WSURf UEtUX1NJWkUsIFZJRF9QS1RfU0laRShtb2RlLT5oZGlzcGxheSkpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCBkd19taXBpX2RzaV9jb21tYW5kX21vZGVfY29uZmlnKHN0cnVjdCBkd19taXBpX2Rz aSAqZHNpKQo+IC17Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfVE9fQ05UX0NGRywgSFNUWF9UT19D TlQoMTAwMCkgfCBMUFJYX1RPX0NOVCgxMDAwKSk7Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfQlRB X1RPX0NOVCwgMHhkMDApOwo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX01PREVfQ0ZHLCBFTkFCTEVf Q01EX01PREUpOwo+IC19Cj4gLQo+IC0vKiBHZXQgbGFuZSBieXRlIGNsb2NrIGN5Y2xlcy4gKi8K PiAtc3RhdGljIHUzMiBkd19taXBpX2RzaV9nZXRfaGNvbXBvbmVudF9sYmNjKHN0cnVjdCBkd19t aXBpX2RzaSAqZHNpLAo+IC0JCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ IC0JCQkJCSAgIHUzMiBoY29tcG9uZW50KQo+IC17Cj4gLQl1MzIgZnJhYywgbGJjYzsKPiAtCj4g LQlsYmNjID0gaGNvbXBvbmVudCAqIGRzaS0+bGFuZV9tYnBzICogTVNFQ19QRVJfU0VDIC8gODsK PiAtCj4gLQlmcmFjID0gbGJjYyAlIG1vZGUtPmNsb2NrOwo+IC0JbGJjYyA9IGxiY2MgLyBtb2Rl LT5jbG9jazsKPiAtCWlmIChmcmFjKQo+IC0JCWxiY2MrKzsKPiAtCj4gLQlyZXR1cm4gbGJjYzsK PiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfbGluZV90aW1lcl9jb25maWcoc3Ry dWN0IGR3X21pcGlfZHNpICpkc2ksCj4gLQkJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKPiAtewo+IC0JdTMyIGh0b3RhbCwgaHNhLCBoYnAsIGxiY2M7Cj4gLQo+IC0JaHRvdGFs ID0gbW9kZS0+aHRvdGFsOwo+IC0JaHNhID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNf c3RhcnQ7Cj4gLQloYnAgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7Cj4gLQo+IC0J bGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2MoZHNpLCBtb2RlLCBodG90YWwp Owo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9ITElORV9USU1FLCBsYmNjKTsKPiAtCj4gLQls YmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIG1vZGUsIGhzYSk7Cj4g LQlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX0hTQV9USU1FLCBsYmNjKTsKPiAtCj4gLQlsYmNjID0g ZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIG1vZGUsIGhicCk7Cj4gLQlkc2lf d3JpdGUoZHNpLCBEU0lfVklEX0hCUF9USU1FLCBsYmNjKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZv aWQgZHdfbWlwaV9kc2lfdmVydGljYWxfdGltaW5nX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kg KmRzaSwKPiAtCQkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gLXsK PiAtCXUzMiB2YWN0aXZlLCB2c2EsIHZmcCwgdmJwOwo+IC0KPiAtCXZhY3RpdmUgPSBtb2RlLT52 ZGlzcGxheTsKPiAtCXZzYSA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0Owo+ IC0JdmZwID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsKPiAtCXZicCA9IG1v ZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZDsKPiAtCj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lf VklEX1ZBQ1RJVkVfTElORVMsIHZhY3RpdmUpOwo+IC0JZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9W U0FfTElORVMsIHZzYSk7Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1ZGUF9MSU5FUywgdmZw KTsKPiAtCWRzaV93cml0ZShkc2ksIERTSV9WSURfVkJQX0xJTkVTLCB2YnApOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWcoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCj4gLXsKPiAtCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVE1SX0NGRywgUEhZ X0hTMkxQX1RJTUUoMHg0MCkKPiAtCQkgIHwgUEhZX0xQMkhTX1RJTUUoMHg0MCkgfCBNQVhfUkRf VElNRSgxMDAwMCkpOwo+IC0KPiAtCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVE1SX0xQQ0xLX0NG RywgUEhZX0NMS0hTMkxQX1RJTUUoMHg0MCkKPiAtCQkgIHwgUEhZX0NMS0xQMkhTX1RJTUUoMHg0 MCkpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9j b25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCj4gLXsKPiAtCWRzaV93cml0ZShkc2ksIERT SV9QSFlfSUZfQ0ZHLCBQSFlfU1RPUF9XQUlUX1RJTUUoMHgyMCkgfAo+IC0JCSAgTl9MQU5FUyhk c2ktPmxhbmVzKSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2NsZWFyX2Vy cihzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKPiAtewo+IC0JZHNpX3JlYWQoZHNpLCBEU0lfSU5U X1NUMCk7Cj4gLQlkc2lfcmVhZChkc2ksIERTSV9JTlRfU1QxKTsKPiAtCWRzaV93cml0ZShkc2ks IERTSV9JTlRfTVNLMCwgMCk7Cj4gLQlkc2lfd3JpdGUoZHNpLCBEU0lfSU5UX01TSzEsIDApOwo+ IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9lbmNvZGVyX2Rpc2FibGUoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyKQo+IC17Cj4gLQlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9 IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOwo+IC0KPiAtCWlmIChkc2ktPmRwbXNfbW9kZSAhPSBE Uk1fTU9ERV9EUE1TX09OKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpZiAoY2xrX3ByZXBhcmVfZW5h YmxlKGRzaS0+cGNsaykpIHsKPiAtCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRv IGVuYWJsZSBwY2xrXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JZHJtX3BhbmVsX2Rp c2FibGUoZHNpLT5wYW5lbCk7Cj4gLQo+IC0JZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBEV19N SVBJX0RTSV9DTURfTU9ERSk7Cj4gLQlkcm1fcGFuZWxfdW5wcmVwYXJlKGRzaS0+cGFuZWwpOwo+ IC0KPiAtCWR3X21pcGlfZHNpX2Rpc2FibGUoZHNpKTsKPiAtCXBtX3J1bnRpbWVfcHV0KGRzaS0+ ZGV2KTsKPiAtCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGspOwo+IC0JZHNpLT5kcG1z X21vZGUgPSBEUk1fTU9ERV9EUE1TX09GRjsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHdfbWlw aV9kc2lfZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+IC17Cj4g LQlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOwo+IC0J c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmZW5jb2Rlci0+Y3J0Yy0+c3RhdGUtPmFk anVzdGVkX21vZGU7Cj4gLQljb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwZGF0 YSA9IGRzaS0+cGRhdGE7Cj4gLQlpbnQgbXV4ID0gZHJtX29mX2VuY29kZXJfYWN0aXZlX2VuZHBv aW50X2lkKGRzaS0+ZGV2LT5vZl9ub2RlLCBlbmNvZGVyKTsKPiAtCXUzMiB2YWw7Cj4gLQlpbnQg cmV0Owo+IC0KPiAtCXJldCA9IGR3X21pcGlfZHNpX2dldF9sYW5lX2Jwcyhkc2ksIG1vZGUpOwo+ IC0JaWYgKHJldCA8IDApCj4gLQkJcmV0dXJuOwo+IC0KPiAtCWlmIChkc2ktPmRwbXNfbW9kZSA9 PSBEUk1fTU9ERV9EUE1TX09OKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpZiAoY2xrX3ByZXBhcmVf ZW5hYmxlKGRzaS0+cGNsaykpIHsKPiAtCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVk IHRvIGVuYWJsZSBwY2xrXG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JcG1fcnVudGlt ZV9nZXRfc3luYyhkc2ktPmRldik7Cj4gLQlkd19taXBpX2RzaV9pbml0KGRzaSk7Cj4gLQlkd19t aXBpX2RzaV9kcGlfY29uZmlnKGRzaSwgbW9kZSk7Cj4gLQlkd19taXBpX2RzaV9wYWNrZXRfaGFu ZGxlcl9jb25maWcoZHNpKTsKPiAtCWR3X21pcGlfZHNpX3ZpZGVvX21vZGVfY29uZmlnKGRzaSk7 Cj4gLQlkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKGRzaSwgbW9kZSk7Cj4gLQlkd19t aXBpX2RzaV9jb21tYW5kX21vZGVfY29uZmlnKGRzaSk7Cj4gLQlkd19taXBpX2RzaV9saW5lX3Rp bWVyX2NvbmZpZyhkc2ksIG1vZGUpOwo+IC0JZHdfbWlwaV9kc2lfdmVydGljYWxfdGltaW5nX2Nv bmZpZyhkc2ksIG1vZGUpOwo+IC0JZHdfbWlwaV9kc2lfZHBoeV90aW1pbmdfY29uZmlnKGRzaSk7 Cj4gLQlkd19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWcoZHNpKTsKPiAtCWR3X21pcGlf ZHNpX2NsZWFyX2Vycihkc2kpOwo+IC0KPiAtCS8qCj4gLQkgKiBGb3IgdGhlIFJLMzM5OSwgdGhl IGNsayBvZiBncmYgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSB3cml0aW5nIGdyZgo+IC0JICogcmVn aXN0ZXIuIEFuZCBmb3IgUkszMjg4IG9yIG90aGVyIHNvYywgdGhpcyBncmZfY2xrIG11c3QgYmUg TlVMTCwKPiAtCSAqIHRoZSBjbGtfcHJlcGFyZV9lbmFibGUgcmV0dXJuIHRydWUgZGlyZWN0bHku Cj4gLQkgKi8KPiAtCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmdyZl9jbGspOwo+IC0J aWYgKHJldCkgewo+IC0JCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxl IGdyZl9jbGs6ICVkXG4iLCByZXQpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlpZiAocGRh dGEtPmdyZl9kc2kwX21vZGVfcmVnKQo+IC0JCXJlZ21hcF93cml0ZShkc2ktPmdyZl9yZWdtYXAs IHBkYXRhLT5ncmZfZHNpMF9tb2RlX3JlZywKPiAtCQkJICAgICBwZGF0YS0+Z3JmX2RzaTBfbW9k ZSk7Cj4gLQo+IC0JZHdfbWlwaV9kc2lfcGh5X2luaXQoZHNpKTsKPiAtCWR3X21pcGlfZHNpX3dh aXRfZm9yX3R3b19mcmFtZXMobW9kZSk7Cj4gLQo+IC0JZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNp LCBEV19NSVBJX0RTSV9DTURfTU9ERSk7Cj4gLQlpZiAoZHJtX3BhbmVsX3ByZXBhcmUoZHNpLT5w YW5lbCkpCj4gLQkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgImZhaWxlZCB0byBwcmVwYXJlIHBh bmVsXG4iKTsKPiAtCj4gLQlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIERXX01JUElfRFNJX1ZJ RF9NT0RFKTsKPiAtCWRybV9wYW5lbF9lbmFibGUoZHNpLT5wYW5lbCk7Cj4gLQo+IC0JY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7Cj4gLQo+IC0JaWYgKG11eCkKPiAtCQl2YWwgPSBw ZGF0YS0+ZHNpMF9lbl9iaXQgfCAocGRhdGEtPmRzaTBfZW5fYml0IDw8IDE2KTsKPiAtCWVsc2UK PiAtCQl2YWwgPSBwZGF0YS0+ZHNpMF9lbl9iaXQgPDwgMTY7Cj4gLQo+IC0JcmVnbWFwX3dyaXRl KGRzaS0+Z3JmX3JlZ21hcCwgcGRhdGEtPmdyZl9zd2l0Y2hfcmVnLCB2YWwpOwo+IC0JRFJNX0RF Vl9ERUJVRyhkc2ktPmRldiwKPiAtCQkgICAgICAidm9wICVzIG91dHB1dCB0byBkc2kwXG4iLCAo bXV4KSA/ICJMSVQiIDogIkJJRyIpOwo+IC0JZHNpLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1T X09OOwo+IC0KPiAtCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmdyZl9jbGspOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW50Cj4gLWR3X21pcGlfZHNpX2VuY29kZXJfYXRvbWljX2NoZWNrKHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPiAtCQkJCSBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCj4gLQkJCQkgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUp Cj4gLXsKPiAtCXN0cnVjdCByb2NrY2hpcF9jcnRjX3N0YXRlICpzID0gdG9fcm9ja2NoaXBfY3J0 Y19zdGF0ZShjcnRjX3N0YXRlKTsKPiAtCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZW5jb2Rl cl90b19kc2koZW5jb2Rlcik7Cj4gLQo+IC0Jc3dpdGNoIChkc2ktPmZvcm1hdCkgewo+IC0JY2Fz ZSBNSVBJX0RTSV9GTVRfUkdCODg4Ogo+IC0JCXMtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VU X01PREVfUDg4ODsKPiAtCQlicmVhazsKPiAtCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKPiAt CQlzLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX1A2NjY7Cj4gLQkJYnJlYWs7Cj4g LQljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6Cj4gLQkJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJ UF9PVVRfTU9ERV9QNTY1Owo+IC0JCWJyZWFrOwo+IC0JZGVmYXVsdDoKPiAtCQlXQVJOX09OKDEp Owo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCXMtPm91dHB1dF90eXBlID0gRFJN X01PREVfQ09OTkVDVE9SX0RTSTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MKPiAtZHdfbWlwaV9kc2lfZW5j b2Rlcl9oZWxwZXJfZnVuY3MgPSB7Cj4gLQkuZW5hYmxlID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9l bmFibGUsCj4gLQkuZGlzYWJsZSA9IGR3X21pcGlfZHNpX2VuY29kZXJfZGlzYWJsZSwKPiAtCS5h dG9taWNfY2hlY2sgPSBkd19taXBpX2RzaV9lbmNvZGVyX2F0b21pY19jaGVjaywKPiAtfTsKPiAt Cj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgZHdfbWlwaV9kc2lfZW5j b2Rlcl9mdW5jcyA9IHsKPiAtCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKPiAtfTsK PiAtCj4gLXN0YXRpYyBpbnQgZHdfbWlwaV9kc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+IC17Cj4gLQlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsKPiAtCj4gLQlyZXR1cm4gZHJtX3BhbmVsX2dldF9t b2Rlcyhkc2ktPnBhbmVsKTsKPiAtfQo+IC0KPiAtc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9y X2hlbHBlcl9mdW5jcyBkd19taXBpX2RzaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewo+IC0J LmdldF9tb2RlcyA9IGR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCj4gLX07Cj4gLQo+ IC1zdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAtewo+IC0JZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVy KGNvbm5lY3Rvcik7Cj4gLQlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKPiAtfQo+ IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGR3X21pcGlfZHNp X2F0b21pY19jb25uZWN0b3JfZnVuY3MgPSB7Cj4gLQkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJf cHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKPiAtCS5kZXN0cm95ID0gZHdfbWlwaV9kc2lf ZHJtX2Nvbm5lY3Rvcl9kZXN0cm95LAo+IC0JLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX3Jlc2V0LAo+IC0JLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hl bHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAo+IC0JLmF0b21pY19kZXN0cm95X3N0YXRl ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCj4gLX07Cj4gLQo+ IC1zdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0s Cj4gLQkJCQlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKPiAtewo+IC0Jc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyID0gJmRzaS0+ZW5jb2RlcjsKPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IgPSAmZHNpLT5jb25uZWN0b3I7Cj4gLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2kt PmRldjsKPiAtCWludCByZXQ7Cj4gLQo+IC0JZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBkcm1f b2ZfZmluZF9wb3NzaWJsZV9jcnRjcyhkcm0sCj4gLQkJCQkJCQkgICAgIGRldi0+b2Zfbm9kZSk7 Cj4gLQkvKgo+IC0JICogSWYgd2UgZmFpbGVkIHRvIGZpbmQgdGhlIENSVEMocykgd2hpY2ggdGhp cyBlbmNvZGVyIGlzCj4gLQkgKiBzdXBwb3NlZCB0byBiZSBjb25uZWN0ZWQgdG8sIGl0J3MgYmVj YXVzZSB0aGUgQ1JUQyBoYXMKPiAtCSAqIG5vdCBiZWVuIHJlZ2lzdGVyZWQgeWV0LiAgRGVmZXIg cHJvYmluZywgYW5kIGhvcGUgdGhhdAo+IC0JICogdGhlIHJlcXVpcmVkIENSVEMgaXMgYWRkZWQg bGF0ZXIuCj4gLQkgKi8KPiAtCWlmIChlbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9PSAwKQo+IC0J CXJldHVybiAtRVBST0JFX0RFRkVSOwo+IC0KPiAtCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJmRz aS0+ZW5jb2RlciwKPiAtCQkJICAgICAgICZkd19taXBpX2RzaV9lbmNvZGVyX2hlbHBlcl9mdW5j cyk7Cj4gLQlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KGRybSwgJmRzaS0+ZW5jb2RlciwgJmR3X21p cGlfZHNpX2VuY29kZXJfZnVuY3MsCj4gLQkJCSAgICAgICBEUk1fTU9ERV9FTkNPREVSX0RTSSwg TlVMTCk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8g aW5pdGlhbGl6ZSBlbmNvZGVyIHdpdGggZHJtXG4iKTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+ IC0KPiAtCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsCj4gLQkJCQkgJmR3X21p cGlfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwo+IC0KPiAtCWRybV9jb25uZWN0b3JfaW5p dChkcm0sICZkc2ktPmNvbm5lY3RvciwKPiAtCQkJICAgJmR3X21pcGlfZHNpX2F0b21pY19jb25u ZWN0b3JfZnVuY3MsCj4gLQkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0kpOwo+IC0KPiAtCWRy bV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOwo+IC0K PiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHJvY2tjaGlwX21pcGlfcGFyc2Vf ZHQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCj4gLXsKPiAtCXN0cnVjdCBkZXZpY2Vfbm9kZSAq bnAgPSBkc2ktPmRldi0+b2Zfbm9kZTsKPiAtCj4gLQlkc2ktPmdyZl9yZWdtYXAgPSBzeXNjb25f cmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAicm9ja2NoaXAsZ3JmIik7Cj4gLQlpZiAoSVNf RVJSKGRzaS0+Z3JmX3JlZ21hcCkpIHsKPiAtCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiVW5h YmxlIHRvIGdldCByb2NrY2hpcCxncmZcbiIpOwo+IC0JCXJldHVybiBQVFJfRVJSKGRzaS0+Z3Jm X3JlZ21hcCk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1 Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHJrMzI4OF9taXBpX2RzaV9kcnZfZGF0YSA9IHsKPiAt CS5kc2kwX2VuX2JpdCA9IFJLMzI4OF9EU0kwX1NFTF9WT1BfTElULAo+IC0JLmRzaTFfZW5fYml0 ID0gUkszMjg4X0RTSTFfU0VMX1ZPUF9MSVQsCj4gLQkuZ3JmX3N3aXRjaF9yZWcgPSBSSzMyODhf R1JGX1NPQ19DT042LAo+IC0JLm1heF9kYXRhX2xhbmVzID0gNCwKPiAtfTsKPiAtCj4gLXN0YXRp YyBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHJrMzM5OV9taXBpX2RzaV9kcnZfZGF0YSA9 IHsKPiAtCS5kc2kwX2VuX2JpdCA9IFJLMzM5OV9EU0kwX1NFTF9WT1BfTElULAo+IC0JLmRzaTFf ZW5fYml0ID0gUkszMzk5X0RTSTFfU0VMX1ZPUF9MSVQsCj4gLQkuZ3JmX3N3aXRjaF9yZWcgPSBS SzMzOTlfR1JGX1NPQ19DT04yMCwKPiAtCS5ncmZfZHNpMF9tb2RlID0gUkszMzk5X0dSRl9EU0lf TU9ERSwKPiAtCS5ncmZfZHNpMF9tb2RlX3JlZyA9IFJLMzM5OV9HUkZfU09DX0NPTjIyLAo+IC0J LmZsYWdzID0gRFdfTUlQSV9ORUVEU19QSFlfQ0ZHX0NMSyB8IERXX01JUElfTkVFRFNfR1JGX0NM SywKPiAtCS5tYXhfZGF0YV9sYW5lcyA9IDQsCj4gLX07Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCBkd19taXBpX2RzaV9kdF9pZHNbXSA9IHsKPiAtCXsKPiAtCSAuY29t cGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgtbWlwaS1kc2kiLAo+IC0JIC5kYXRhID0gJnJrMzI4 OF9taXBpX2RzaV9kcnZfZGF0YSwKPiAtCX0sIHsKPiAtCSAuY29tcGF0aWJsZSA9ICJyb2NrY2hp cCxyazMzOTktbWlwaS1kc2kiLAo+IC0JIC5kYXRhID0gJnJrMzM5OV9taXBpX2RzaV9kcnZfZGF0 YSwKPiAtCX0sCj4gLQl7IC8qIHNlbnRpbmVsICovIH0KPiAtfTsKPiAtTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgZHdfbWlwaV9kc2lfZHRfaWRzKTsKPiAtCj4gLXN0YXRpYyBpbnQgZHdfbWlwaV9k c2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiAtCQkJ ICAgIHZvaWQgKmRhdGEpCj4gLXsKPiAtCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lk ID0KPiAtCQkJb2ZfbWF0Y2hfZGV2aWNlKGR3X21pcGlfZHNpX2R0X2lkcywgZGV2KTsKPiAtCWNv bnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRhID0gb2ZfaWQtPmRhdGE7Cj4g LQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7 Cj4gLQlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqYXBiX3JzdDsKPiAtCXN0cnVjdCBkcm1fZGV2aWNl ICpkcm0gPSBkYXRhOwo+IC0Jc3RydWN0IGR3X21pcGlfZHNpICpkc2k7Cj4gLQlzdHJ1Y3QgcmVz b3VyY2UgKnJlczsKPiAtCWludCByZXQ7Cj4gLQo+IC0JZHNpID0gZGV2bV9remFsbG9jKGRldiwg c2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghZHNpKQo+IC0JCXJldHVybiAtRU5P TUVNOwo+IC0KPiAtCWRzaS0+ZGV2ID0gZGV2Owo+IC0JZHNpLT5wZGF0YSA9IHBkYXRhOwo+IC0J ZHNpLT5kcG1zX21vZGUgPSBEUk1fTU9ERV9EUE1TX09GRjsKPiAtCj4gLQlyZXQgPSByb2NrY2hp cF9taXBpX3BhcnNlX2R0KGRzaSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+ IC0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsK PiAtCWRzaS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7Cj4gLQlpZiAo SVNfRVJSKGRzaS0+YmFzZSkpCj4gLQkJcmV0dXJuIFBUUl9FUlIoZHNpLT5iYXNlKTsKPiAtCj4g LQlkc2ktPnBsbHJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicmVmIik7Cj4gLQlpZiAoSVNf RVJSKGRzaS0+cGxscmVmX2NsaykpIHsKPiAtCQlyZXQgPSBQVFJfRVJSKGRzaS0+cGxscmVmX2Ns ayk7Cj4gLQkJRFJNX0RFVl9FUlJPUihkZXYsCj4gLQkJCSAgICAgICJVbmFibGUgdG8gZ2V0IHBs bCByZWZlcmVuY2UgY2xvY2s6ICVkXG4iLCByZXQpOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4g LQo+IC0JZHNpLT5wY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKPiAtCWlmIChJU19F UlIoZHNpLT5wY2xrKSkgewo+IC0JCXJldCA9IFBUUl9FUlIoZHNpLT5wY2xrKTsKPiAtCQlEUk1f REVWX0VSUk9SKGRldiwgIlVuYWJsZSB0byBnZXQgcGNsazogJWRcbiIsIHJldCk7Cj4gLQkJcmV0 dXJuIHJldDsKPiAtCX0KPiAtCj4gLQkvKgo+IC0JICogTm90ZSB0aGF0IHRoZSByZXNldCB3YXMg bm90IGRlZmluZWQgaW4gdGhlIGluaXRpYWwgZGV2aWNlIHRyZWUsIHNvCj4gLQkgKiB3ZSBoYXZl IHRvIGJlIHByZXBhcmVkIGZvciBpdCBub3QgYmVpbmcgZm91bmQuCj4gLQkgKi8KPiAtCWFwYl9y c3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGRldiwgImFwYiIpOwo+IC0JaWYgKElTX0VSUihh cGJfcnN0KSkgewo+IC0JCXJldCA9IFBUUl9FUlIoYXBiX3JzdCk7Cj4gLQkJaWYgKHJldCA9PSAt RU5PRU5UKSB7Cj4gLQkJCWFwYl9yc3QgPSBOVUxMOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCURSTV9E RVZfRVJST1IoZGV2LAo+IC0JCQkJICAgICAgIlVuYWJsZSB0byBnZXQgcmVzZXQgY29udHJvbDog JWRcbiIsIHJldCk7Cj4gLQkJCXJldHVybiByZXQ7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWlmIChh cGJfcnN0KSB7Cj4gLQkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsayk7Cj4gLQkJ aWYgKHJldCkgewo+IC0JCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBlbmFibGUgcGNs a1xuIik7Cj4gLQkJCXJldHVybiByZXQ7Cj4gLQkJfQo+IC0KPiAtCQlyZXNldF9jb250cm9sX2Fz c2VydChhcGJfcnN0KTsKPiAtCQl1c2xlZXBfcmFuZ2UoMTAsIDIwKTsKPiAtCQlyZXNldF9jb250 cm9sX2RlYXNzZXJ0KGFwYl9yc3QpOwo+IC0KPiAtCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNp LT5wY2xrKTsKPiAtCX0KPiAtCj4gLQlpZiAocGRhdGEtPmZsYWdzICYgRFdfTUlQSV9ORUVEU19Q SFlfQ0ZHX0NMSykgewo+IC0JCWRzaS0+cGh5X2NmZ19jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAi cGh5X2NmZyIpOwo+IC0JCWlmIChJU19FUlIoZHNpLT5waHlfY2ZnX2NsaykpIHsKPiAtCQkJcmV0 ID0gUFRSX0VSUihkc2ktPnBoeV9jZmdfY2xrKTsKPiAtCQkJRFJNX0RFVl9FUlJPUihkZXYsCj4g LQkJCQkgICAgICAiVW5hYmxlIHRvIGdldCBwaHlfY2ZnX2NsazogJWRcbiIsIHJldCk7Cj4gLQkJ CXJldHVybiByZXQ7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWlmIChwZGF0YS0+ZmxhZ3MgJiBEV19N SVBJX05FRURTX0dSRl9DTEspIHsKPiAtCQlkc2ktPmdyZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2 LCAiZ3JmIik7Cj4gLQkJaWYgKElTX0VSUihkc2ktPmdyZl9jbGspKSB7Cj4gLQkJCXJldCA9IFBU Ul9FUlIoZHNpLT5ncmZfY2xrKTsKPiAtCQkJRFJNX0RFVl9FUlJPUihkZXYsICJVbmFibGUgdG8g Z2V0IGdyZl9jbGs6ICVkXG4iLCByZXQpOwo+IC0JCQlyZXR1cm4gcmV0Owo+IC0JCX0KPiAtCX0K PiAtCj4gLQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wbGxyZWZfY2xrKTsKPiAtCWlm IChyZXQpIHsKPiAtCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBlbmFibGUgcGxscmVm X2Nsa1xuIik7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQlyZXQgPSBkd19taXBpX2Rz aV9yZWdpc3Rlcihkcm0sIGRzaSk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0RFVl9FUlJPUihk ZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgbWlwaV9kc2k6ICVkXG4iLCByZXQpOwo+IC0JCWdvdG8g ZXJyX3BsbHJlZjsKPiAtCX0KPiAtCj4gLQlkc2ktPmRzaV9ob3N0Lm9wcyA9ICZkd19taXBpX2Rz aV9ob3N0X29wczsKPiAtCWRzaS0+ZHNpX2hvc3QuZGV2ID0gZGV2Owo+IC0JcmV0ID0gbWlwaV9k c2lfaG9zdF9yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJN X0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTUlQSSBob3N0OiAlZFxuIiwgcmV0 KTsKPiAtCQlnb3RvIGVycl9jbGVhbnVwOwo+IC0JfQo+IC0KPiAtCWlmICghZHNpLT5wYW5lbCkg ewo+IC0JCXJldCA9IC1FUFJPQkVfREVGRVI7Cj4gLQkJZ290byBlcnJfbWlwaV9kc2lfaG9zdDsK PiAtCX0KPiAtCj4gLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBkc2kpOwo+IC0JcG1fcnVudGltZV9l bmFibGUoZGV2KTsKPiAtCXJldHVybiAwOwo+IC0KPiAtZXJyX21pcGlfZHNpX2hvc3Q6Cj4gLQlt aXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOwo+IC1lcnJfY2xlYW51cDoK PiAtCWRzaS0+Y29ubmVjdG9yLmZ1bmNzLT5kZXN0cm95KCZkc2ktPmNvbm5lY3Rvcik7Cj4gLQlk c2ktPmVuY29kZXIuZnVuY3MtPmRlc3Ryb3koJmRzaS0+ZW5jb2Rlcik7Cj4gLWVycl9wbGxyZWY6 Cj4gLQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wbGxyZWZfY2xrKTsKPiAtCXJldHVybiBy ZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3VuYmluZChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiAtCQkJICAgICAgIHZvaWQgKmRhdGEp Cj4gLXsKPiAtCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZGV2X2dldF9kcnZkYXRhKGRldik7 Cj4gLQo+IC0JbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKPiAtCXBt X3J1bnRpbWVfZGlzYWJsZShkZXYpOwo+IC0KPiAtCWRzaS0+Y29ubmVjdG9yLmZ1bmNzLT5kZXN0 cm95KCZkc2ktPmNvbm5lY3Rvcik7Cj4gLQlkc2ktPmVuY29kZXIuZnVuY3MtPmRlc3Ryb3koJmRz aS0+ZW5jb2Rlcik7Cj4gLQo+IC0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGxscmVmX2Ns ayk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBkd19taXBp X2RzaV9vcHMgPSB7Cj4gLQkuYmluZAk9IGR3X21pcGlfZHNpX2JpbmQsCj4gLQkudW5iaW5kCT0g ZHdfbWlwaV9kc2lfdW5iaW5kLAo+IC19Owo+IC0KPiAtc3RhdGljIGludCBkd19taXBpX2RzaV9w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+IC17Cj4gLQlyZXR1cm4gY29tcG9u ZW50X2FkZCgmcGRldi0+ZGV2LCAmZHdfbWlwaV9kc2lfb3BzKTsKPiAtfQo+IC0KPiAtc3RhdGlj IGludCBkd19taXBpX2RzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAt ewo+IC0JY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmZHdfbWlwaV9kc2lfb3BzKTsKPiAtCXJl dHVybiAwOwo+IC19Cj4gLQo+IC1zdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X21pcGlfZHNpX2Ry aXZlciA9IHsKPiAtCS5wcm9iZQkJPSBkd19taXBpX2RzaV9wcm9iZSwKPiAtCS5yZW1vdmUJCT0g ZHdfbWlwaV9kc2lfcmVtb3ZlLAo+IC0JLmRyaXZlcgkJPSB7Cj4gLQkJLm9mX21hdGNoX3RhYmxl ID0gZHdfbWlwaV9kc2lfZHRfaWRzLAo+IC0JCS5uYW1lCT0gRFJJVkVSX05BTUUsCj4gLQl9LAo+ IC19Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJt X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuYwo+IGlu ZGV4IGY4MTRkMzdiMWRiMi4uNjIzY2NlNzdlYmFlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5jCj4gQEAgLTQ3Nyw3ICs0NzcsNyBAQCBzdGF0aWMg aW50IF9faW5pdCByb2NrY2hpcF9kcm1faW5pdCh2b2lkKQo+ICAJQUREX1JPQ0tDSElQX1NVQl9E UklWRVIoY2RuX2RwX2RyaXZlciwgQ09ORklHX1JPQ0tDSElQX0NETl9EUCk7Cj4gIAlBRERfUk9D S0NISVBfU1VCX0RSSVZFUihkd19oZG1pX3JvY2tjaGlwX3BsdGZtX2RyaXZlciwKPiAgCQkJCUNP TkZJR19ST0NLQ0hJUF9EV19IRE1JKTsKPiAtCUFERF9ST0NLQ0hJUF9TVUJfRFJJVkVSKGR3X21p cGlfZHNpX2RyaXZlciwKPiArCUFERF9ST0NLQ0hJUF9TVUJfRFJJVkVSKGR3X21pcGlfZHNpX3Jv Y2tjaGlwX2RyaXZlciwKPiAgCQkJCUNPTkZJR19ST0NLQ0hJUF9EV19NSVBJX0RTSSk7Cj4gIAlB RERfUk9DS0NISVBfU1VCX0RSSVZFUihpbm5vX2hkbWlfZHJpdmVyLCBDT05GSUdfUk9DS0NISVBf SU5OT19IRE1JKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJt X2Rydi5oCj4gaW5kZXggM2E2ZWJmYzI2MDM2Li45NmJiNGNhOGZlYmYgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuaAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmgKPiBAQCAtNjcsNyArNjcsNyBA QCBpbnQgcm9ja2NoaXBfZHJtX3dhaXRfdmFjdF9lbmQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1 bnNpZ25lZCBpbnQgbXN0aW1lb3V0KTsKPiAgCj4gIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyIGNkbl9kcF9kcml2ZXI7Cj4gIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X2hk bWlfcm9ja2NoaXBfcGx0Zm1fZHJpdmVyOwo+IC1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBkd19taXBpX2RzaV9kcml2ZXI7Cj4gK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3 X21pcGlfZHNpX3JvY2tjaGlwX2RyaXZlcjsKPiAgZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgaW5ub19oZG1pX2RyaXZlcjsKPiAgZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcm9j a2NoaXBfZHBfZHJpdmVyOwo+ICBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciByb2NrY2hp cF9sdmRzX2RyaXZlcjsKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK