From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH 2/3] drm/msm/dp: add displayPort driver support Date: Tue, 23 Oct 2018 12:28:21 -0400 Message-ID: <20181023162821.GE154160@art_vandelay> References: <1539191759-14836-1-git-send-email-chandanu@codeaurora.org> <1539191759-14836-3-git-send-email-chandanu@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1539191759-14836-3-git-send-email-chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Chandan Uddaraju Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gV2VkLCBPY3QgMTAsIDIwMTggYXQgMTA6MTU6NThBTSAtMDcwMCwgQ2hhbmRhbiBVZGRhcmFq dSB3cm90ZToKPiBBZGQgdGhlIG5lZWRlZCBkaXNwbGF5UG9ydCBmaWxlcyB0byBlbmFibGUgRFAg ZHJpdmVyCj4gb24gbXNtIHRhcmdldC4KPiAKPiAiZHBfZGlzcGxheSIgbW9kdWxlIGlzIHRoZSBt YWluIG1vZHVsZSB0aGF0IGNhbGxzIGludG8KPiBvdGhlciBzdWItbW9kdWxlcy4gImRwX2RybSIg ZmlsZSByZXByZXNlbnRzIHRoZSBpbnRlcmZhY2UKPiBiZXR3ZWVuIERSTSBmcmFtZXdvcmsgYW5k IERQIGRyaXZlci4KPiAKCkhpIENoYW5kYW4sCkEgZmV3IHRoZW1lcyB3aGljaCBJJ3ZlIHBvaW50 ZWQgb3V0IGJlbG93LCBidXQgd2FudCB0byBjYWxsIG91dCBhdCB0aGUgdG9wIHNvCml0J3Mgb2J2 aW91cy4KCi0gUGxlYXNlIHJlbW92ZSBhbGwgc3VwZXJmbHVvdXMgTlVMTCBjaGVja3MgYXQgdGhl IGJlZ2lubmluZyBvZiBmdW5jdGlvbnMuCiAgSW5jbHVkZWQgaW4gdGhpcyBpcyByZWZsb3dpbmcg aW5pdGlhbGl6YXRpb24gb2YgdmFyaWFibGVzIGFuZCBjaGVja2luZyB0aGF0CiAgcmV0dXJuIHR5 cGVzIHN0aWxsIG1ha2Ugc2Vuc2UgKGllOiBpZiBhIGZ1bmN0aW9uJ3Mgb25seSBlcnJvciBwYXRo IGlzIHRoZSBOVUxMCiAgY2hlY2ssIG1ha2UgaXQgdm9pZCkuCi0gUGxlYXNlIHJlbW92ZSBhbGwg b2YgdGhlIG5ldyBjYWxsYmFja3MgYW5kIGp1c3QgY2FsbCBmdW5jdGlvbnMgZGlyZWN0bHkuIFRo aXMKICBzaG91bGQgYWxzbyBnZXQgcmlkIG9mIHRoZSBfZ2V0L19wdXQgZnVuY3Rpb25zIHRoYXQg YWxsb2NhdGUvc2V0IHRoZW0gdXAKLSBQbGVhc2UgY29uc29saWRhdGUgc3RhdGUgc3RydWN0cyBp bnRvIG9uZSBzdHJ1Y3Qgd2l0aCBhIGZldyBzdWJzdHJ1Y3RzLAogIHRoZXJlJ3MgdG9vIG11Y2gg c3RhdGUgcmlnaHQgbm93LgotIFBsZWFzZSAjZGVmaW5lIGhhcmRjb2RlZCB2YWx1ZXMKLSBJbnN0 ZWFkIG9mIHNwcmlua2xpbmcgd21iKCkgZXZlcnl3aGVyZSwgdXNlIHJlYWRsL3dyaXRlbCBpbnN0 ZWFkIG9mICpfcmVsYXhlZAotIFRoZXJlIGFyZSBhIGJ1bmNoIG9mIHJhY2VzIHRoYXQgSSBmb3Vu ZCwgcGxlYXNlIGF1ZGl0IHRoZSBjb2RlIGFuZCByZW1vdmUKICByYWNlcyB3aXRoIGxvY2tzIGFz IG5lY2Vzc2FyeQotIEkgdHJpZWQgdG8gY2F0Y2ggYXMgbXVjaCBkZWFkIGNvZGUgYXMgcG9zc2li bGUsIHBsZWFzZSBhdWRpdCB0aGUgcmVzdCBmb3IKICB1bnVzZWQgc3RydWN0cy92YXJpYWJsZXMv ZnVuY3Rpb25zL2V0YwotIFVzZSBkcm0gZHAgaGVscGVyIHN0cnVjdHMgZm9yIGxpbmsgcGFyYW1l dGVyIHN0b3JhZ2UKCgo+IFNpZ25lZC1vZmYtYnk6IENoYW5kYW4gVWRkYXJhanUgPGNoYW5kYW51 QGNvZGVhdXJvcmEub3JnPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcgICAg ICAgICAgICAgICAgIHwgICAgOSArCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAg ICAgICAgICAgICAgfCAgIDE1ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9pb191dGlsLmMgfCAgMjA2ICsrKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2lvX3V0aWwuaCB8ICAgNDQgKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1eC5j ICAgICAgICAgICAgIHwgIDU3MCArKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfYXV4LmggICAgICAgICAgICAgfCAgIDQ0ICsKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9jYXRhbG9nLmMgICAgICAgICB8IDExODggKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmggICAgICAgICB8ICAxNDQgKysrCj4gIGRyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5jICAgICAgICAgICAgfCAxNDc1ICsrKysrKysrKysr KysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmggICAgICAg ICAgICB8ICAgNTAgKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RlYnVnLmMgICAgICAg ICAgIHwgIDUwNyArKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kZWJ1Zy5o ICAgICAgICAgICB8ICAgODEgKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5 LmMgICAgICAgICB8ICA5NzcgKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9kaXNwbGF5LmggICAgICAgICB8ICAgNTUgKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX2RybS5jICAgICAgICAgICAgIHwgIDU0MiArKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfZHJtLmggICAgICAgICAgICAgfCAgIDUyICsKPiAgZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9leHRjb24uYyAgICAgICAgICB8ICA0MDAgKysrKysrKwo+ICBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5oICAgICAgICAgIHwgIDExMSArKwo+ICBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuYyAgICAgICAgICAgIHwgMTU0OSArKysrKysrKysrKysr KysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmggICAgICAg ICAgICB8ICAxODQgKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMgICAg ICAgICAgIHwgIDYyNCArKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bh bmVsLmggICAgICAgICAgIHwgIDEyMSArKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9w YXJzZXIuYyAgICAgICAgICB8ICA2NzkgKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfcGFyc2VyLmggICAgICAgICAgfCAgMjA1ICsrKysKPiAgZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9wb3dlci5jICAgICAgICAgICB8ICA1OTkgKysrKysrKysrKysKPiAgZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5oICAgICAgICAgICB8ICAgNTcgKwo+ICBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX3JlZy5oICAgICAgICAgICAgIHwgIDM1NyArKysrKysKPiAgZHJp dmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMgICAgICAgICAgICAgICB8ICAgIDIgKwo+ICBkcml2 ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCAgICAgICAgICAgICAgIHwgICAyMiArCj4gIGluY2x1 ZGUvZHJtL2RybV9kcF9oZWxwZXIuaCAgICAgICAgICAgICAgICAgfCAgIDE5ICsKPiAgMzAgZmls ZXMgY2hhbmdlZCwgMTA4ODcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguYwo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguaAo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmMKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuYwo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmgKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuYwo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kZWJ1Zy5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYwo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmgKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfbGluay5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfcG93ZXIuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9wb3dlci5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX3JlZy5oCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZwo+IGluZGV4IDg0M2E5ZDQu LmMzNjNmMjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnCj4gQEAgLTQ5LDYgKzQ5LDE1IEBAIGNvbmZp ZyBEUk1fTVNNX0hETUlfSERDUAo+ICAJaGVscAo+ICAJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8g ZW5hYmxlIEhEQ1Agc3RhdGUgbWFjaGluZQo+ICAKPiArY29uZmlnIERSTV9NU01fRFAKPiArCWJv b2wgIkVuYWJsZSBEUCBzdXBwb3J0IGluIE1TTSBEUk0gZHJpdmVyIgo+ICsJZGVwZW5kcyBvbiBE Uk1fTVNNCj4gKwlkZWZhdWx0IG4KPiArCWhlbHAKPiArCSAgQ29tcGlsZSBpbiBzdXBwb3J0IGZv ciBEUCBkcml2ZXIgaW4gbXNtIGRybQo+ICsJICBkcml2ZXIuIERQIGV4dGVybmFsIGRpc3BsYXkg c3VwcG9ydCBpcyBlbmFibGVkCj4gKwkgIHRocm91Z2ggdGhpcyBjb25maWcgb3B0aW9uLiBJdCBj YW4gYmUgcHJpbWFyeSBvcgo+ICsJICBzZWNvbmRhcnkgZGlzcGxheSBvbiBkZXZpY2UuCgpXaHkg YXJlIHRoZXNlIGxpbmUgbGVuZ3RocyBzbyBzaG9ydD8gWW91IGNhbiBnbyB0byA4MCBjb2x1bW5z LiBQbGVhc2UgYWxzbyBhZGQKYW4gZW1wdHkgbGluZSBoZXJlLgoKPiAgY29uZmlnIERSTV9NU01f RFNJCj4gIAlib29sICJFbmFibGUgRFNJIHN1cHBvcnQgaW4gTVNNIERSTSBkcml2ZXIiCj4gIAlk ZXBlbmRzIG9uIERSTV9NU00KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKPiBpbmRleCAxOWFiNTIxLi43NjVh OGQ4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCj4gQEAgLTIsNiArMiw3IEBACj4gIGNjZmxhZ3Mt eSA6PSAtSWRyaXZlcnMvZ3B1L2RybS9tc20KPiAgY2NmbGFncy15ICs9IC1JZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEKPiAgY2NmbGFncy0kKENPTkZJR19EUk1fTVNNX0RTSSkgKz0gLUlk cml2ZXJzL2dwdS9kcm0vbXNtL2RzaQo+ICtjY2ZsYWdzLSQoQ09ORklHX0RSTV9NU01fRFApICs9 IC1JZHJpdmVycy9ncHUvZHJtL21zbS9kcAo+ICAKPiAgbXNtLXkgOj0gXAo+ICAJYWRyZW5vL2Fk cmVub19kZXZpY2UubyBcCj4gQEAgLTkzLDcgKzk0LDE5IEBAIG1zbS15IDo9IFwKPiAgCW1zbV9z dWJtaXRxdWV1ZS5vCj4gIAo+ICBtc20tJChDT05GSUdfREVCVUdfRlMpICs9IGFkcmVuby9hNXh4 X2RlYnVnZnMubyBcCj4gLQkJCSAgZGlzcC9kcHUxL2RwdV9kYmcubwo+ICsJCQkgIGRpc3AvZHB1 MS9kcHVfZGJnLm8gXAo+ICsJCQkgIGRwL2RwX2RlYnVnLm8KCkRvZXMgdGhpcyBjb21waWxlIGlm IENPTkZJR19ERUJVR19GUyBpcyBzZWxlY3RlZCwgYnV0IG5vdCBDT05GSUdfRFJNX01TTV9EUD8K Cj4gKwo+ICttc20tJChDT05GSUdfRFJNX01TTV9EUCkrPSBkcC9kcF9leHRjb24ubyBcCj4gKwlk cC9kcF9wYXJzZXIubyBcCj4gKwlkcC9kcF9wb3dlci5vIFwKPiArCWRwL2RwX2NhdGFsb2cubyBc Cj4gKwlkcC9kcF9hdXgubyBcCj4gKwlkcC9kcF9wYW5lbC5vIFwKPiArCWRwL2RwX2xpbmsubyBc Cj4gKwlkcC9kcF9jdHJsLm8gXAo+ICsJZHAvZHBfZGlzcGxheS5vIFwKPiArCWRwL2RwX2RybS5v CgpUaGUgcmVzdCBvZiB0aGUgZmlsZSBoYXMgZmlsZXMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCB0 aGlzIHNob3VsZCB0b28uCgo+ICAKPiAgbXNtLSQoQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04p ICs9IG1zbV9mYmRldi5vCj4gIG1zbS0kKENPTkZJR19DT01NT05fQ0xLKSArPSBkaXNwL21kcDQv bWRwNF9sdmRzX3BsbC5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9pb191dGlsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9f dXRpbC5jCj4gaW5kZXggNzkwZDM5Zi4uMGY1M2ExNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2lvX3V0aWwuYwo+IEBAIC0xNCwxMCArMTQsMjE2IEBACj4gICNp bmNsdWRlIDxsaW51eC9jbGsuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2Nsay9jbGstY29uZi5oPgo+ ICAjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5j bHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPgo+ICAKPiAgI2luY2x1ZGUgImRwdV9pb191dGlsLmgiCj4gIAo+ICtzdGF0aWMgc3RydWN0 IHJlc291cmNlICptc21fZHNzX2dldF9yZXNfYnluYW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYsCj4gKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCB0eXBlLAo+ICsJCQkJCSAgICAgICBj b25zdCBjaGFyICpuYW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7Cj4g Kwo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCB0eXBlLCBuYW1l KTsKPiArCWlmICghcmVzKQo+ICsJCURFVl9FUlIoIiVzOiAnJXMnIHJlc291cmNlIG5vdCBmb3Vu ZFxuIiwgX19mdW5jX18sIG5hbWUpOwo+ICsKPiArCXJldHVybiByZXM7Cj4gK30gLyogbXNtX2Rz c19nZXRfcmVzX2J5bmFtZSAqLwoKV2h5IGRvbid0IHlvdSBqdXN0IGNhbGwgcGxhdGZvcm1fZ2V0 X3Jlc291cmNlX2J5bmFtZSBkaXJlY3RseT8KCj4gKwo+ICtpbnQgbXNtX2Rzc19pb3JlbWFwX2J5 bmFtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICsJCQkgICBzdHJ1Y3QgZHNzX2lv X2RhdGEgKmlvX2RhdGEsIGNvbnN0IGNoYXIgKm5hbWUpCj4gK3sKPiArCXN0cnVjdCByZXNvdXJj ZSAqcmVzID0gTlVMTDsKPiArCj4gKwlpZiAoIXBkZXYgfHwgIWlvX2RhdGEpIHsKCkdpdmVuIHRo YXQgd2UndmUgYmVlbiBhZ2dyZXNzaXZlbHkgdHJ5aW5nIHRvIGdldCByaWQgb2YgdGhlc2Ugc3Vw ZXJmbHVvdXMKY2hlY2tzLCBJJ20gbm90IHRocmlsbGVkIHRoYXQgdGhleSdyZSBiZWluZyByZS1p bnRyb2R1Y2VkLiBDYW4geW91IHBsZWFzZSBnbwp0aHJvdWdoIHRoZSBwYXRjaCBhbmQgcmVtb3Zl IGFsbCBvZiB0aGUgdW5uZWNlc3NhcnkgY2hlY2tzPwoKPiArCQlERVZfRVJSKCIlcFMtPiVzOiBp bnZhbGlkIGlucHV0XG4iLAo+ICsJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIF9fZnVu Y19fKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXMgPSBtc21fZHNzX2dl dF9yZXNfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBuYW1lKTsKPiArCWlmICghcmVzKSB7 Cj4gKwkJREVWX0VSUigiJXBTLT4lczogJyVzJyBtc21fZHNzX2dldF9yZXNfYnluYW1lIGZhaWxl ZFxuIiwKPiArCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNfXywgbmFtZSk7 CgpZZXQgYW5vdGhlciBlcnJvciBmb3JtYXQgOikgQ291bGQgd2UgcGxlYXNlIHN0aWNrIHdpdGgg b25lIG9mIERQVV9FUlJPUiwKRFJNX0VSUk9SLCBvciBEUk1fREVWX0VSUk9SPwoKPiArCQlyZXR1 cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlpb19kYXRhLT5sZW4gPSAodTMyKXJlc291cmNlX3Np emUocmVzKTsKPiArCWlvX2RhdGEtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIGlvX2RhdGEt Pmxlbik7Cj4gKwlpZiAoIWlvX2RhdGEtPmJhc2UpIHsKPiArCQlERVZfRVJSKCIlcFMtPiVzOiAn JXMnIGlvcmVtYXAgZmFpbGVkXG4iLAo+ICsJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCks IF9fZnVuY19fLCBuYW1lKTsKPiArCQlyZXR1cm4gLUVJTzsKPiArCX0KPiArCj4gKwlyZXR1cm4g MDsKPiArfSAvKiBtc21fZHNzX2lvcmVtYXBfYnluYW1lICovCj4gKwo+ICt2b2lkIG1zbV9kc3Nf aW91bm1hcChzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEpCj4gK3sKPiArCWlmICghaW9fZGF0 YSkgewo+ICsJCURFVl9FUlIoIiVwUy0+JXM6IGludmFsaWQgaW5wdXRcbiIsCj4gKwkJCV9fYnVp bHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18pOwo+ICsJCXJldHVybjsKPiArCX0KPiAr Cj4gKwlpZiAoaW9fZGF0YS0+YmFzZSkgewo+ICsJCWlvdW5tYXAoaW9fZGF0YS0+YmFzZSk7Cj4g KwkJaW9fZGF0YS0+YmFzZSA9IE5VTEw7Cj4gKwl9Cj4gKwlpb19kYXRhLT5sZW4gPSAwOwo+ICt9 IC8qIG1zbV9kc3NfaW91bm1hcCAqLwoKVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgb25seSB1c2Vk IGluIGRwX3BhcnNlci5jLCB3aHkgbm90IGp1c3QgbWFrZSB0aGVtIHN0YXRpYwpmdW5jdGlvbnMg dGhlcmU/Cgo+ICsKPiAraW50IG1zbV9kc3NfY29uZmlnX3ZyZWcoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZHNzX3ZyZWcgKmluX3ZyZWcsCj4gKwkJCWludCBudW1fdnJlZywgaW50IGNvbmZp ZykKClRoaXMgc2hvdWxkIGJlIDIgZnVuY3Rpb25zLCBvbmUgZm9yIGluaXRpYWxpemF0aW9uIGFu ZCBvbmUgZm9yIGRlaW5pdGlhbGl6aW5nLAp0aGUgMiBwYXRocyBkb24ndCBzaGFyZSBhbnkgY29k ZSwgc28gdGhlcmUncyBubyBuZWVkIHRvIGNvbWJpbmUgdGhlbS4KCj4gK3sKPiArCWludCBpID0g MCwgcmMgPSAwOwo+ICsJc3RydWN0IGRzc192cmVnICpjdXJyX3ZyZWcgPSBOVUxMOwo+ICsJZW51 bSBkc3NfdnJlZ190eXBlIHR5cGU7Cj4gKwo+ICsJaWYgKCFpbl92cmVnIHx8ICFudW1fdnJlZykK PiArCQlyZXR1cm4gcmM7Cj4gKwo+ICsJaWYgKGNvbmZpZykgewo+ICsJCWZvciAoaSA9IDA7IGkg PCBudW1fdnJlZzsgaSsrKSB7Cj4gKwkJCWN1cnJfdnJlZyA9ICZpbl92cmVnW2ldOwo+ICsJCQlj dXJyX3ZyZWctPnZyZWcgPSByZWd1bGF0b3JfZ2V0KGRldiwKClVzZSBkZXZtXyogcGxlYXNlCgo+ ICsJCQkJY3Vycl92cmVnLT52cmVnX25hbWUpOwo+ICsJCQlyYyA9IFBUUl9SRVQoY3Vycl92cmVn LT52cmVnKTsKClBUUl9SRVQgaXMgZGVwcmVjYXRlZC4gVGhlIHBhdHRlcm4gZm9yIHRoaXMgaXMg dXN1YWxseToKCiAgICAgICAgICAgICAgICAgICAgICAgIHB0ciA9IHNvbWVfZnVuYygpOwogICAg ICAgICAgICAgICAgICAgICAgICBpZiAoSVNfRVJSX09SX05VTEwocHRyKSkgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJjID0gUFRSX0VSUihwdHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g ZmFpbF9sYWJlbDoKICAgICAgICAgICAgICAgICAgICAgICAgfQoKPiArCQkJaWYgKHJjKSB7Cj4g KwkJCQlERVZfRVJSKCIlcFMtPiVzOiAlcyBnZXQgZmFpbGVkLiByYz0lZFxuIiwKPiArCQkJCQkg X19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNfXywKPiArCQkJCQkgY3Vycl92cmVn LT52cmVnX25hbWUsIHJjKTsKPiArCQkJCWN1cnJfdnJlZy0+dnJlZyA9IE5VTEw7Cj4gKwkJCQln b3RvIHZyZWdfZ2V0X2ZhaWw7Cj4gKwkJCX0KPiArCQkJdHlwZSA9IChyZWd1bGF0b3JfY291bnRf dm9sdGFnZXMoY3Vycl92cmVnLT52cmVnKSA+IDApCj4gKwkJCQkJPyBEU1NfUkVHX0xETyA6IERT U19SRUdfVlM7Cj4gKwkJCWlmICh0eXBlID09IERTU19SRUdfTERPKSB7Cj4gKwkJCQlyYyA9IHJl Z3VsYXRvcl9zZXRfdm9sdGFnZSgKPiArCQkJCQljdXJyX3ZyZWctPnZyZWcsCj4gKwkJCQkJY3Vy cl92cmVnLT5taW5fdm9sdGFnZSwKPiArCQkJCQljdXJyX3ZyZWctPm1heF92b2x0YWdlKTsKPiAr CQkJCWlmIChyYyA8IDApIHsKPiArCQkJCQlERVZfRVJSKCIlcFMtPiVzOiAlcyBzZXQgdmx0ZyBm YWlsXG4iLAo+ICsJCQkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksCj4gKwkJCQkJCV9f ZnVuY19fLAo+ICsJCQkJCQljdXJyX3ZyZWctPnZyZWdfbmFtZSk7Cj4gKwkJCQkJZ290byB2cmVn X3NldF92b2x0YWdlX2ZhaWw7Cj4gKwkJCQl9Cj4gKwkJCX0KPiArCQl9Cj4gKwl9IGVsc2Ugewo+ ICsJCWZvciAoaSA9IG51bV92cmVnLTE7IGkgPj0gMDsgaS0tKSB7Cj4gKwkJCWN1cnJfdnJlZyA9 ICZpbl92cmVnW2ldOwo+ICsJCQlpZiAoY3Vycl92cmVnLT52cmVnKSB7Cj4gKwkJCQl0eXBlID0g KHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcygKPiArCQkJCQljdXJyX3ZyZWctPnZyZWcpID4gMCkK PiArCQkJCQk/IERTU19SRUdfTERPIDogRFNTX1JFR19WUzsKPiArCQkJCWlmICh0eXBlID09IERT U19SRUdfTERPKSB7Cj4gKwkJCQkJcmVndWxhdG9yX3NldF92b2x0YWdlKGN1cnJfdnJlZy0+dnJl ZywKPiArCQkJCQkJMCwgY3Vycl92cmVnLT5tYXhfdm9sdGFnZSk7Cj4gKwkJCQl9Cj4gKwkJCQly ZWd1bGF0b3JfcHV0KGN1cnJfdnJlZy0+dnJlZyk7Cj4gKwkJCQljdXJyX3ZyZWctPnZyZWcgPSBO VUxMOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gKwo+ICt2cmVnX3VuY29u ZmlnOgo+ICtpZiAodHlwZSA9PSBEU1NfUkVHX0xETykKPiArCXJlZ3VsYXRvcl9zZXRfbG9hZChj dXJyX3ZyZWctPnZyZWcsIDApOwo+ICsKPiArdnJlZ19zZXRfdm9sdGFnZV9mYWlsOgo+ICsJcmVn dWxhdG9yX3B1dChjdXJyX3ZyZWctPnZyZWcpOwo+ICsJY3Vycl92cmVnLT52cmVnID0gTlVMTDsK PiArCj4gK3ZyZWdfZ2V0X2ZhaWw6Cj4gKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pIHsKPiArCQlj dXJyX3ZyZWcgPSAmaW5fdnJlZ1tpXTsKPiArCQl0eXBlID0gKHJlZ3VsYXRvcl9jb3VudF92b2x0 YWdlcyhjdXJyX3ZyZWctPnZyZWcpID4gMCkKPiArCQkJPyBEU1NfUkVHX0xETyA6IERTU19SRUdf VlM7Cj4gKwkJZ290byB2cmVnX3VuY29uZmlnOwo+ICsJfQo+ICsJcmV0dXJuIHJjOwo+ICt9IC8q IG1zbV9kc3NfY29uZmlnX3ZyZWcgKi8KPiArCj4gK2ludCBtc21fZHNzX2VuYWJsZV92cmVnKHN0 cnVjdCBkc3NfdnJlZyAqaW5fdnJlZywgaW50IG51bV92cmVnLCBpbnQgZW5hYmxlKQo+ICt7Cj4g KwlpbnQgaSA9IDAsIHJjID0gMDsKPiArCWJvb2wgbmVlZF9zbGVlcDsKPiArCj4gKwlpZiAoZW5h YmxlKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IG51bV92cmVnOyBpKyspIHsKPiArCQkJcmMgPSBQ VFJfUkVUKGluX3ZyZWdbaV0udnJlZyk7Cj4gKwkJCWlmIChyYykgewo+ICsJCQkJREVWX0VSUigi JXBTLT4lczogJXMgcmVndWxhdG9yIGVycm9yLiByYz0lZFxuIiwKPiArCQkJCQlfX2J1aWx0aW5f cmV0dXJuX2FkZHJlc3MoMCksIF9fZnVuY19fLAo+ICsJCQkJCWluX3ZyZWdbaV0udnJlZ19uYW1l LCByYyk7Cj4gKwkJCQlnb3RvIHZyZWdfc2V0X29wdF9tb2RlX2ZhaWw7Cj4gKwkJCX0KPiArCQkJ bmVlZF9zbGVlcCA9ICFyZWd1bGF0b3JfaXNfZW5hYmxlZChpbl92cmVnW2ldLnZyZWcpOwo+ICsJ CQlpZiAoaW5fdnJlZ1tpXS5wcmVfb25fc2xlZXAgJiYgbmVlZF9zbGVlcCkKPiArCQkJCXVzbGVl cF9yYW5nZShpbl92cmVnW2ldLnByZV9vbl9zbGVlcCAqIDEwMDAsCj4gKwkJCQkJaW5fdnJlZ1tp XS5wcmVfb25fc2xlZXAgKiAxMDAwKTsKPiArCQkJcmMgPSByZWd1bGF0b3Jfc2V0X2xvYWQoaW5f dnJlZ1tpXS52cmVnLAo+ICsJCQkJaW5fdnJlZ1tpXS5lbmFibGVfbG9hZCk7Cj4gKwkJCWlmIChy YyA8IDApIHsKPiArCQkJCURFVl9FUlIoIiVwUy0+JXM6ICVzIHNldCBvcHQgbSBmYWlsXG4iLAo+ ICsJCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18sCj4gKwkJCQkJaW5f dnJlZ1tpXS52cmVnX25hbWUpOwo+ICsJCQkJZ290byB2cmVnX3NldF9vcHRfbW9kZV9mYWlsOwo+ ICsJCQl9Cj4gKwkJCXJjID0gcmVndWxhdG9yX2VuYWJsZShpbl92cmVnW2ldLnZyZWcpOwo+ICsJ CQlpZiAoaW5fdnJlZ1tpXS5wb3N0X29uX3NsZWVwICYmIG5lZWRfc2xlZXApCj4gKwkJCQl1c2xl ZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wb3N0X29uX3NsZWVwICogMTAwMCwKPiArCQkJCQlpbl92cmVn W2ldLnBvc3Rfb25fc2xlZXAgKiAxMDAwKTsKPiArCQkJaWYgKHJjIDwgMCkgewo+ICsJCQkJREVW X0VSUigiJXBTLT4lczogJXMgZW5hYmxlIGZhaWxlZFxuIiwKPiArCQkJCQlfX2J1aWx0aW5fcmV0 dXJuX2FkZHJlc3MoMCksIF9fZnVuY19fLAo+ICsJCQkJCWluX3ZyZWdbaV0udnJlZ19uYW1lKTsK PiArCQkJCWdvdG8gZGlzYWJsZV92cmVnOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiAr CQlmb3IgKGkgPSBudW1fdnJlZy0xOyBpID49IDA7IGktLSkgewo+ICsJCQlpZiAoaW5fdnJlZ1tp XS5wcmVfb2ZmX3NsZWVwKQo+ICsJCQkJdXNsZWVwX3JhbmdlKGluX3ZyZWdbaV0ucHJlX29mZl9z bGVlcCAqIDEwMDAsCj4gKwkJCQkJaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICogMTAwMCk7Cj4g KwkJCXJlZ3VsYXRvcl9zZXRfbG9hZChpbl92cmVnW2ldLnZyZWcsCj4gKwkJCQlpbl92cmVnW2ld LmRpc2FibGVfbG9hZCk7Cj4gKwkJCXJlZ3VsYXRvcl9kaXNhYmxlKGluX3ZyZWdbaV0udnJlZyk7 Cj4gKwkJCWlmIChpbl92cmVnW2ldLnBvc3Rfb2ZmX3NsZWVwKQo+ICsJCQkJdXNsZWVwX3Jhbmdl KGluX3ZyZWdbaV0ucG9zdF9vZmZfc2xlZXAgKiAxMDAwLAo+ICsJCQkJCWluX3ZyZWdbaV0ucG9z dF9vZmZfc2xlZXAgKiAxMDAwKTsKPiArCQl9Cj4gKwl9Cj4gKwlyZXR1cm4gcmM7Cj4gKwo+ICtk aXNhYmxlX3ZyZWc6Cj4gKwlyZWd1bGF0b3Jfc2V0X2xvYWQoaW5fdnJlZ1tpXS52cmVnLCBpbl92 cmVnW2ldLmRpc2FibGVfbG9hZCk7Cj4gKwo+ICt2cmVnX3NldF9vcHRfbW9kZV9mYWlsOgo+ICsJ Zm9yIChpLS07IGkgPj0gMDsgaS0tKSB7Cj4gKwkJaWYgKGluX3ZyZWdbaV0ucHJlX29mZl9zbGVl cCkKPiArCQkJdXNsZWVwX3JhbmdlKGluX3ZyZWdbaV0ucHJlX29mZl9zbGVlcCAqIDEwMDAsCj4g KwkJCQlpbl92cmVnW2ldLnByZV9vZmZfc2xlZXAgKiAxMDAwKTsKPiArCQlyZWd1bGF0b3Jfc2V0 X2xvYWQoaW5fdnJlZ1tpXS52cmVnLAo+ICsJCQlpbl92cmVnW2ldLmRpc2FibGVfbG9hZCk7Cj4g KwkJcmVndWxhdG9yX2Rpc2FibGUoaW5fdnJlZ1tpXS52cmVnKTsKPiArCQlpZiAoaW5fdnJlZ1tp XS5wb3N0X29mZl9zbGVlcCkKPiArCQkJdXNsZWVwX3JhbmdlKGluX3ZyZWdbaV0ucG9zdF9vZmZf c2xlZXAgKiAxMDAwLAo+ICsJCQkJaW5fdnJlZ1tpXS5wb3N0X29mZl9zbGVlcCAqIDEwMDApOwo+ ICsJfQo+ICsKPiArCXJldHVybiByYzsKPiArfSAvKiBtc21fZHNzX2VuYWJsZV92cmVnICovCj4g KwoKU2FtZSBxdWVzdGlvbiBoZXJlLCBidXQgd2l0aCBkcF9wb3dlci4KCj4gKwo+ICB2b2lkIG1z bV9kc3NfcHV0X2NsayhzdHJ1Y3QgZHNzX2NsayAqY2xrX2FycnksIGludCBudW1fY2xrKQo+ICB7 Cj4gIAlpbnQgaTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2lvX3V0aWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGls LmgKPiBpbmRleCBiYzA3MzgxLi41MjRiMzk0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oCj4gQEAgLTE1LDYgKzE1LDcgQEAKPiAgCj4gICNpbmNs dWRlIDxsaW51eC9ncGlvLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K PiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ICAjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KPiAgCj4gICNkZWZpbmUgREVWX0RCRyhmbXQsIGFyZ3MuLi4pICAgcHJfZGVi dWcoZm10LCAjI2FyZ3MpCj4gQEAgLTIyLDYgKzIzLDM5IEBACj4gICNkZWZpbmUgREVWX1dBUk4o Zm10LCBhcmdzLi4uKSAgcHJfd2FybihmbXQsICMjYXJncykKPiAgI2RlZmluZSBERVZfRVJSKGZt dCwgYXJncy4uLikgICBwcl9lcnIoZm10LCAjI2FyZ3MpCj4gIAo+ICtzdHJ1Y3QgZHNzX2lvX2Rh dGEgewo+ICsJdTMyIGxlbjsKPiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiArfTsKCmxlbiBpc24n dCB1c2VkIGFueXdoZXJlLCBzbyB0aGlzIHN0cnVjdCBjYW4gZ28gYXdheS4gSWYgdGhlIHN0cnVj dCBnb2VzIGF3YXksCnlvdSBjYW4gcmVhbGx5IHNpbXBsaWZ5IChvciBlbGltaW5hdGUgbXNtX2Rz c19pb3JlbWFwX2J5bmFtZSgpKQoKPiArCj4gKy8qCj4gK3ZvaWQgZHNzX3JlZ193KHN0cnVjdCBk c3NfaW9fZGF0YSAqaW8sIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSwgdTMyIGRlYnVnKTsKPiArdTMy IGRzc19yZWdfcihzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvLCB1MzIgb2Zmc2V0LCB1MzIgZGVidWcp Owo+ICt2b2lkIGRzc19yZWdfZHVtcCh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBsZW4sIGNvbnN0 IGNoYXIgKnByZWZpeCwgdTMyIGRlYnVnKTsKPiArCj4gKyNkZWZpbmUgRFNTX1JFR19XX05EKGlv LCBvZmZzZXQsIHZhbCkgIGRzc19yZWdfdyhpbywgb2Zmc2V0LCB2YWwsIGZhbHNlKQo+ICsjZGVm aW5lIERTU19SRUdfVyhpbywgb2Zmc2V0LCB2YWwpICAgICBkc3NfcmVnX3coaW8sIG9mZnNldCwg dmFsLCB0cnVlKQo+ICsjZGVmaW5lIERTU19SRUdfUl9ORChpbywgb2Zmc2V0KSAgICAgICBkc3Nf cmVnX3IoaW8sIG9mZnNldCwgZmFsc2UpCj4gKyNkZWZpbmUgRFNTX1JFR19SKGlvLCBvZmZzZXQp ICAgICAgICAgIGRzc19yZWdfcihpbywgb2Zmc2V0LCB0cnVlKQo+ICsqLwoKTm9uZSBvZiB0aGUg ZHNzX3JlZ18qL0RTU19SRUdfKiBmdW5jdGlvbnMvbWFjcm9zIGFyZSB1c2VkLiBQbGVhc2UgcmVt b3ZlLgoKCj4gK2VudW0gZHNzX3ZyZWdfdHlwZSB7Cj4gKwlEU1NfUkVHX0xETywKPiArCURTU19S RUdfVlMsCj4gK307CgpUaGVzZSBhcmUgb25seSB1c2VkIGluIG1zbV9kc3NfY29uZmlnX3ZyZWco KS4gUGxlYXNlIHJlbW92ZS4KCj4gKwo+ICtzdHJ1Y3QgZHNzX3ZyZWcgewo+ICsJc3RydWN0IHJl Z3VsYXRvciAqdnJlZzsgLyogdnJlZyBoYW5kbGUgKi8KPiArCWNoYXIgdnJlZ19uYW1lWzMyXTsK PiArCWludCBtaW5fdm9sdGFnZTsKPiArCWludCBtYXhfdm9sdGFnZTsKCkNhbid0IHdlIGRlZHVj ZSB0aGVzZSBmcm9tIHRoZSByZWd1bGF0b3Igc3Vic3lzdGVtIHdpdGgKcmVndWxhdG9yX2xpc3Rf dm9sdGFnZSgpPwoKPiArCWludCBlbmFibGVfbG9hZDsKPiArCWludCBkaXNhYmxlX2xvYWQ7CgpU aGVzZSBhcmUgcmVhbGx5IGEgZnVuY3Rpb24gb2YgdGhlIGRwIGRldmljZSB0aGFuIHRoZSByZWd1 bGF0b3IuCgo+ICsJaW50IHByZV9vbl9zbGVlcDsKPiArCWludCBwb3N0X29uX3NsZWVwOwo+ICsJ aW50IHByZV9vZmZfc2xlZXA7Cj4gKwlpbnQgcG9zdF9vZmZfc2xlZXA7CgpOb25lIG9mIHRoZXNl IHNsZWVwIHZhbHVlcyBhcmUgc2V0PyBBbHNvLCBzaG91bGRuJ3QgdGhlc2UgY29uc3RyYWludHMg dXN1YWxseQpleHByZXNzZWQvYWN0ZWQgdXBvbiBpbiB0aGUgcmVndWxhdG9yIGRyaXZlcj8KCj4g K307CgpTbyBpZiB3ZSBjYW4gcmVtb3ZlIGFsbCBvZiB0aGUgZXh0cmEgZ29vcCBhcm91bmQgdGhl IHJlZ3VsYXRvciwgdGhlbiB3ZSBjYW4gZ2V0CnJpZCBvZiBkc3NfdnJlZy4KCj4gKwo+ICBzdHJ1 Y3QgZHNzX2dwaW8gewo+ICAJdW5zaWduZWQgaW50IGdwaW87Cj4gIAl1bnNpZ25lZCBpbnQgdmFs dWU7Cj4gQEAgLTQyLDEyICs3NiwyMiBAQCBzdHJ1Y3QgZHNzX2NsayB7Cj4gIH07Cj4gIAo+ICBz dHJ1Y3QgZHNzX21vZHVsZV9wb3dlciB7Cj4gKwl1bnNpZ25lZCBpbnQgbnVtX3ZyZWc7Cj4gKwlz dHJ1Y3QgZHNzX3ZyZWcgKnZyZWdfY29uZmlnOwo+ICAJdW5zaWduZWQgaW50IG51bV9ncGlvOwo+ ICAJc3RydWN0IGRzc19ncGlvICpncGlvX2NvbmZpZzsKPiAgCXVuc2lnbmVkIGludCBudW1fY2xr Owo+ICAJc3RydWN0IGRzc19jbGsgKmNsa19jb25maWc7Cj4gIH07Cj4gIAo+ICtpbnQgbXNtX2Rz c19pb3JlbWFwX2J5bmFtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICsJCQkgICBz dHJ1Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEsIGNvbnN0IGNoYXIgKm5hbWUpOwo+ICt2b2lkIG1z bV9kc3NfaW91bm1hcChzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEpOwo+ICsKPiAraW50IG1z bV9kc3NfY29uZmlnX3ZyZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHNzX3ZyZWcgKmlu X3ZyZWcsCj4gKwkJCWludCBudW1fdnJlZywgaW50IGNvbmZpZyk7Cj4gK2ludCBtc21fZHNzX2Vu YWJsZV92cmVnKHN0cnVjdCBkc3NfdnJlZyAqaW5fdnJlZywgaW50IG51bV92cmVnLAlpbnQgZW5h YmxlKTsKPiArCj4gIGludCBtc21fZHNzX2dldF9jbGsoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZHNzX2NsayAqY2xrX2FycnksIGludCBudW1fY2xrKTsKPiAgdm9pZCBtc21fZHNzX3B1dF9j bGsoc3RydWN0IGRzc19jbGsgKmNsa19hcnJ5LCBpbnQgbnVtX2Nsayk7CgoKV2h5IGFyZSB0aGVz ZSBtc21fZHNzKiBmdW5jdGlvbnMgaW4gZHB1X2lvX3V0aWwuaD8KCj4gIGludCBtc21fZHNzX2Ns a19zZXRfcmF0ZShzdHJ1Y3QgZHNzX2NsayAqY2xrX2FycnksIGludCBudW1fY2xrKTsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfYXV4LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAu LjAwYjgyYzIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9hdXguYwo+IEBAIC0wLDAgKzEsNTcwIEBACgovc25pcAoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9hdXguaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4 LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjBjMzAwZWQKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguaAoKL3NuaXAK CkkgZGlkbid0IHJlYWxseSByZXZpZXcgdGhlIGRwX2F1eC4qIGZpbGVzIGFzLWlzLiBQbGVhc2Ug Y29udmVydCB0byB1c2luZwpkcm1fZHBfYXV4IGFuZCBJJ2xsIHRha2UgYW5vdGhlciBsb29rLgoK Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAuLjU4MTg2MTIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmMKPiBAQCAtMCwwICsxLDExODggQEAKPiArLyoKPiAr ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPiAr ICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqLwo+ ICsKPiArI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+ ICsKPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2hl bHBlci5oPgo+ICsKPiArI2luY2x1ZGUgImRwX2NhdGFsb2cuaCIKPiArI2luY2x1ZGUgImRwX3Jl Zy5oIgo+ICsKPiArI2RlZmluZSBEUF9HRVRfTVNCKHgpCSh4ID4+IDgpCj4gKyNkZWZpbmUgRFBf R0VUX0xTQih4KQkoeCAmIDB4ZmYpCgpUaGVzZSBhcmVuJ3QgdXNlZCBhbnl3aGVyZQoKPiArCj4g KyNkZWZpbmUgZHBfcmVhZChvZmZzZXQpIHJlYWRsX3JlbGF4ZWQoKG9mZnNldCkpCj4gKyNkZWZp bmUgZHBfd3JpdGUob2Zmc2V0LCBkYXRhKSB3cml0ZWxfcmVsYXhlZCgoZGF0YSksIChvZmZzZXQp KQoKVGhlc2UgbWFjcm9zIGFyZW4ndCB1c2VmdWwuIEkgdGhpbmsgeW91J2QgYmUgbXVjaCBiZXR0 ZXIgaGF2aW5nIGEgcmVhZF8vd3JpdGVfCmZvciB0aGUgZGlmZmVyZW50IGlvIHR5cGVzLCBpZToK CnN0YXRpYyBpbmxpbmUgdTMyIGRwX3JlYWRfYXVkaW8oc3RydWN0IGRwX2NhdGFsb2cgKmNhdGFs b2csIHUzMiBvZmZzZXQpCnsKICAgICAgICByZXR1cm4gcmVhZGxfcmVsYXhlZChjYXRhbG9nLT5p by0+ZHBfbGluay5iYXNlICsgb2Zmc2V0KTsKfQoKVGhlbiB5b3UgY2FuIHJlbW92ZSBhIHRvbiBv ZiBib2lsZXJwbGF0ZSBjb2RlIGJlbG93IGdldHRpbmcgYmFzZTsKCj4gKwo+ICsjZGVmaW5lIGRw X2NhdGFsb2dfZ2V0X3ByaXYoeCkgeyBcCgpzdGF0aWMgaW5saW5lIHN0cnVjdCBkcF9jYXRhbG9n X3ByaXZhdGUgKmRwX2NhdGFsb2dfZ2V0X3ByaXYoLi4uKQp7CiAgICAgICAgLi4uCn0KCj4gKwlz dHJ1Y3QgZHBfY2F0YWxvZyAqZHBfY2F0YWxvZzsgXAo+ICsJZHBfY2F0YWxvZyA9IGNvbnRhaW5l cl9vZih4LCBzdHJ1Y3QgZHBfY2F0YWxvZywgeCk7IFwKPiArCWNhdGFsb2cgPSBjb250YWluZXJf b2YoZHBfY2F0YWxvZywgc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSwgXAo+ICsJCQkJZHBfY2F0 YWxvZyk7IFwKPiArfQo+ICsKPiArI2RlZmluZSBEUF9JTlRFUlJVUFRfU1RBVFVTMSBcCj4gKwko RFBfSU5UUl9BVVhfSTJDX0RPTkV8IFwKPiArCURQX0lOVFJfV1JPTkdfQUREUiB8IERQX0lOVFJf VElNRU9VVCB8IFwKPiArCURQX0lOVFJfTkFDS19ERUZFUiB8IERQX0lOVFJfV1JPTkdfREFUQV9D TlQgfCBcCj4gKwlEUF9JTlRSX0kyQ19OQUNLIHwgRFBfSU5UUl9JMkNfREVGRVIgfCBcCj4gKwlE UF9JTlRSX1BMTF9VTkxPQ0tFRCB8IERQX0lOVFJfQVVYX0VSUk9SKQo+ICsKPiArI2RlZmluZSBE UF9JTlRSX01BU0sxCQkoRFBfSU5URVJSVVBUX1NUQVRVUzEgPDwgMikKPiArCj4gKyNkZWZpbmUg RFBfSU5URVJSVVBUX1NUQVRVUzIgXAo+ICsJKERQX0lOVFJfUkVBRFlfRk9SX1ZJREVPIHwgRFBf SU5UUl9JRExFX1BBVFRFUk5fU0VOVCB8IFwKPiArCURQX0lOVFJfRlJBTUVfRU5EIHwgRFBfSU5U Ul9DUkNfVVBEQVRFRCkKPiArCj4gKyNkZWZpbmUgRFBfSU5UUl9NQVNLMgkJKERQX0lOVEVSUlVQ VF9TVEFUVVMyIDw8IDIpCgpDYW4geW91IHBsZWFzZSByZW5hbWUgdGhlc2UgdG8gYmUgY29uc2lz dGVudCB3aXRoIGVhY2ggb3RoZXI/CkRQX0lOVEVSUlVQVF9TVEFUVVMyX01BU0sgcGVyaGFwcz8K Cj4gKwo+ICtzdGF0aWMgdTggY29uc3Qgdm1fcHJlX2VtcGhhc2lzWzRdWzRdID0gewo+ICsJezB4 MDAsIDB4MEIsIDB4MTIsIDB4RkZ9LCAgICAgICAvKiBwZTAsIDAgZGIgKi8KPiArCXsweDAwLCAw eDBBLCAweDEyLCAweEZGfSwgICAgICAgLyogcGUxLCAzLjUgZGIgKi8KPiArCXsweDAwLCAweDBD LCAweEZGLCAweEZGfSwgICAgICAgLyogcGUyLCA2LjAgZGIgKi8KPiArCXsweEZGLCAweEZGLCAw eEZGLCAweEZGfSAgICAgICAgLyogcGUzLCA5LjUgZGIgKi8KPiArfTsKPiArCj4gKy8qIHZvbHRh Z2Ugc3dpbmcsIDAuMnYgYW5kIDEuMHYgYXJlIG5vdCBzdXBwb3J0ICovCj4gK3N0YXRpYyB1OCBj b25zdCB2bV92b2x0YWdlX3N3aW5nWzRdWzRdID0gewo+ICsJezB4MDcsIDB4MEYsIDB4MTQsIDB4 RkZ9LCAvKiBzdzAsIDAuNHYgICovCj4gKwl7MHgxMSwgMHgxRCwgMHgxRiwgMHhGRn0sIC8qIHN3 MSwgMC42IHYgKi8KPiArCXsweDE4LCAweDFGLCAweEZGLCAweEZGfSwgLyogc3cxLCAwLjggdiAq Lwo+ICsJezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9ICAvKiBzdzEsIDEuMiB2LCBvcHRpb25hbCAq Lwo+ICt9Owo+ICsKPiArLyogYXVkaW8gcmVsYXRlZCBjYXRhbG9nIGZ1bmN0aW9ucyAqLwo+ICtz dHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlIHsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0 cnVjdCBkcF9pbyAqaW87Cj4gKwo+ICsJdTMyICgqYXVkaW9fbWFwKVtEUF9BVURJT19TRFBfSEVB REVSX01BWF07Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZyBkcF9jYXRhbG9nOwo+ICt9Owo+ICsKPiAr LyogYXV4IHJlbGF0ZWQgY2F0YWxvZyBmdW5jdGlvbnMgKi8KPiArc3RhdGljIHUzMiBkcF9jYXRh bG9nX2F1eF9yZWFkX2RhdGEoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpCj4gK3sKPiArCXN0 cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7 Cj4gKwo+ICsJaWYgKCFhdXgpIHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwoKQW5k IGFub3RoZXIgbG9nZ2luZyB0eXBlLCBwbGVhc2UgcmVtb3ZlIHByXyogYW5kIHVzZSBhIERQVV8v RFJNXy9EUk1fREVWXwp2YXJpYW50LgoKPiArCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwlkcF9j YXRhbG9nX2dldF9wcml2KGF1eCk7Cj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNl Owo+ICsKPiArCXJldHVybiBkcF9yZWFkKGJhc2UgKyBEUF9BVVhfREFUQSk7Cj4gK2VuZDoKPiAr CXJldHVybiAwOwoKLi4uIG9yIHlvdSBjb3VsZCBqdXN0IHJldHVybiBkaXJlY3RseSBpbiB0aGUg aWYgYWJvdmUgYW5kIHJlbW92ZSB0aGUgbGFiZWwgOikKU2FtZSBjb21tZW50IGFwcGxpZXMgYmVs b3cuCgpBbHNvLCBwcm9iYWJseSBzaG91bGRuJ3QgcmV0dXJuIDAgaW4gYW4gZXJyb3IgY2FzZS4K ClRoZW4gYWdhaW4sIEknbSBndWVzc2luZyBoaXR0aW5nIHRoZSBOVUxMIGNhc2UgaXMgbGlrZWx5 IGltcG9zc2libGUsIHNvIHlvdSBjYW4KcHJvYmFibHkgcmVtb3ZlIGFsbCBvZiB0aGUgbWFjaGlu ZXJ5IGFyb3VuZCBjaGVja2luZyAhYXV4LgoKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9jYXRh bG9nX2F1eF93cml0ZV9kYXRhKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KQo+ICt7Cj4gKwlp bnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXZv aWQgX19pb21lbSAqYmFzZTsKPiArCj4gKwlpZiAoIWF1eCkgewo+ICsJCXByX2VycigiaW52YWxp ZCBpbnB1dFxuIik7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsK PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXV4KTsKPiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBf YXV4LmJhc2U7Cj4gKwo+ICsJZHBfd3JpdGUoYmFzZSArIERQX0FVWF9EQVRBLCBhdXgtPmRhdGEp Owo+ICtlbmQ6Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfY2F0YWxv Z19hdXhfd3JpdGVfdHJhbnMoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpCj4gK3sKPiArCWlu dCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJdm9p ZCBfX2lvbWVtICpiYXNlOwo+ICsKPiArCWlmICghYXV4KSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlk IGlucHV0XG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9h dXguYmFzZTsKPiArCj4gKwlkcF93cml0ZShiYXNlICsgRFBfQVVYX1RSQU5TX0NUUkwsIGF1eC0+ ZGF0YSk7Cj4gK2VuZDoKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9j YXRhbG9nX2F1eF9jbGVhcl90cmFucyhzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCBy ZWFkKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJdTMyIGRhdGEgPSAwOwo+ICsJc3RydWN0IGRw X2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiArCj4g KwlpZiAoIWF1eCkgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmMgPSAt RUlOVkFMOwo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYo YXV4KTsKPiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfYXV4LmJhc2U7Cj4gKwo+ICsJaWYgKHJl YWQpIHsKPiArCQlkYXRhID0gZHBfcmVhZChiYXNlICsgRFBfQVVYX1RSQU5TX0NUUkwpOwo+ICsJ CWRhdGEgJj0gfkJJVCg5KTsKPiArCQlkcF93cml0ZShiYXNlICsgRFBfQVVYX1RSQU5TX0NUUkws IGRhdGEpOwo+ICsJfSBlbHNlIHsKPiArCQlkcF93cml0ZShiYXNlICsgRFBfQVVYX1RSQU5TX0NU UkwsIDApOwo+ICsJfQo+ICtlbmQ6Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGRwX2NhdGFsb2dfYXV4X3Jlc2V0KHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KQo+ICt7 Cj4gKwl1MzIgYXV4X2N0cmw7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9n Owo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsKPiArCWlmICghYXV4KSB7Cj4gKwkJcHJfZXJy KCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxv Z19nZXRfcHJpdihhdXgpOwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9hdXguYmFzZTsKPiAr Cj4gKwlhdXhfY3RybCA9IGRwX3JlYWQoYmFzZSArIERQX0FVWF9DVFJMKTsKPiArCj4gKwlhdXhf Y3RybCB8PSBCSVQoMSk7CgpXaGF0J3MgQklUKDEpPyBDYW4geW91IHBsZWFzZSAjZGVmaW5lIGl0 PwoKPiArCWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfQ1RSTCwgYXV4X2N0cmwpOwo+ICsJdXNsZWVw X3JhbmdlKDEwMDAsIDEwMTApOyAvKiBoL3cgcmVjb21tZW5kZWQgZGVsYXkgKi8KCjEwdXMgZGlm ZiBpcyByaWdodCBvbiB0aGUgbGluZSBvZiBlbm91Z2ggZGVsYXkgdG8gbWFrZSB1c2xlZXBfcmFu Z2Ugd29ydGggaXQuCkknZCByZWNvbW1lbmQgaW5jcmVhc2luZyB0byAxMDB1cyB0byBpbmNyZWFz ZSB0aGUgY2hhbmNlIG9mIHRoZSBzY2hlZHVsZXIgYmVpbmcKYWJsZSB0byBiYXRjaCB0aGlzIHdh a2V1cCB3aXRoIGFub3RoZXIuCgo+ICsKPiArCWF1eF9jdHJsICY9IH5CSVQoMSk7Cj4gKwlkcF93 cml0ZShiYXNlICsgRFBfQVVYX0NUUkwsIGF1eF9jdHJsKTsKPiArCXdtYigpOwoKQ2FuIHlvdSBq dXN0IHVzZSB3cml0ZWwgZm9yIHRoZXNlIGNhc2VzIGluc3RlYWQgb2YgdXNpbmcgX3JlbGF4ZWQg YW5kIHRoZW4Kd21iKCk/IFRoaXMgYXBwbGllcyBlbHNld2hlcmUgdG9vLgoKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdXhfZW5hYmxlKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAq YXV4LCBib29sIGVuYWJsZSkKPiArewo+ICsJdTMyIGF1eF9jdHJsOwo+ICsJc3RydWN0IGRwX2Nh dGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiArCj4gKwlp ZiAoIWF1eCkgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXV4KTsKPiArCWJhc2UgPSBjYXRhbG9n LT5pby0+ZHBfYXV4LmJhc2U7Cj4gKwo+ICsJYXV4X2N0cmwgPSBkcF9yZWFkKGJhc2UgKyBEUF9B VVhfQ1RSTCk7Cj4gKwo+ICsJaWYgKGVuYWJsZSkgewo+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9U SU1FT1VUX0NPVU5ULCAweGZmZmYpOwo+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfTElNSVRT LCAweGZmZmYpOwo+ICsJCWF1eF9jdHJsIHw9IEJJVCgwKTsKClBsZWFzZSAjZGVmaW5lIEJJVCgw KQoKPiArCX0gZWxzZSB7Cj4gKwkJYXV4X2N0cmwgJj0gfkJJVCgwKTsKPiArCX0KPiArCj4gKwlk cF93cml0ZShiYXNlICsgRFBfQVVYX0NUUkwsIGF1eF9jdHJsKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgZHBfY2F0YWxvZ19hdXhfdXBkYXRlX2NmZyhzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1 eCwKPiArCQlzdHJ1Y3QgZHBfYXV4X2NmZyAqY2ZnLCBlbnVtIGRwX3BoeV9hdXhfY29uZmlnX3R5 cGUgdHlwZSkKPiArewo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiAr CXUzMiBuZXdfaW5kZXggPSAwLCBjdXJyZW50X2luZGV4ID0gMDsKPiArCj4gKwlpZiAoIWF1eCB8 fCAhY2ZnIHx8ICh0eXBlID49IFBIWV9BVVhfQ0ZHX01BWCkpIHsKPiArCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9w cml2KGF1eCk7Cj4gKwo+ICsJY3VycmVudF9pbmRleCA9IGNmZ1t0eXBlXS5jdXJyZW50X2luZGV4 Owo+ICsJbmV3X2luZGV4ID0gKGN1cnJlbnRfaW5kZXggKyAxKSAlIGNmZ1t0eXBlXS5jZmdfY250 Owo+ICsJcHJfZGVidWcoIlVwZGF0aW5nICVzIGZyb20gMHglMDh4IHRvIDB4JTA4eFxuIiwKPiAr CQlkcF9waHlfYXV4X2NvbmZpZ190eXBlX3RvX3N0cmluZyh0eXBlKSwKPiArCWNmZ1t0eXBlXS5s dXRbY3VycmVudF9pbmRleF0sIGNmZ1t0eXBlXS5sdXRbbmV3X2luZGV4XSk7Cj4gKwo+ICsJZHBf d3JpdGUoY2F0YWxvZy0+aW8tPnBoeV9pby5iYXNlICsgY2ZnW3R5cGVdLm9mZnNldCwKPiArCQkJ Y2ZnW3R5cGVdLmx1dFtuZXdfaW5kZXhdKTsKPiArCWNmZ1t0eXBlXS5jdXJyZW50X2luZGV4ID0g bmV3X2luZGV4Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2F1eF9zZXR1cChz dHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwKPiArCQlzdHJ1Y3QgZHBfYXV4X2NmZyAqY2ZnKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJaW50IGkgPSAw Owo+ICsKPiArCWlmICghYXV4IHx8ICFjZmcpIHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRc biIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7 Cj4gKwo+ICsJZHBfd3JpdGUoY2F0YWxvZy0+aW8tPnBoeV9pby5iYXNlICsgRFBfUEhZX1BEX0NU TCwgMHg2NSk7CgpXaGF0J3MgMHg2NT8gUGxlYXNlICNkZWZpbmUKCj4gKwl3bWIoKTsgLyogbWFr ZSBzdXJlIFBEIHByb2dyYW1taW5nIGhhcHBlbmVkICovCj4gKwo+ICsJLyogVHVybiBvbiBCSUFT IGN1cnJlbnQgZm9yIFBIWS9QTEwgKi8KPiArCWRwX3dyaXRlKGNhdGFsb2ctPmlvLT5kcF9wbGxf aW8uYmFzZSArCj4gKwkJUVNFUkRFU19DT01fQklBU19FTl9DTEtCVUZMUl9FTiwgMHgxYik7CgpT YW1lIGhlcmUgZm9yIDB4MWIuIEknbSBnb2luZyB0byBzdG9wIG1lbnRpb25pbmcgdGhpcywgcGxl YXNlIGF1ZGl0IHRoZSBkcml2ZXIKZm9yIG90aGVyIGluc3RhbmNlcyBvZiBoYXJkY29kZWQgdmFs dWVzIChsaWtlIHRoaXMgYW5kIHRoZSBvbmUgYXQgdGhlIGVuZCBvZgp0aGlzIGZ1bmN0aW9uKSBh bmQgYnJlYWsgdGhlbSBvdXQgaW50byBtZWFuaW5nZnVsICNkZWZpbmVzLgoKPiArCj4gKwkvKiBE UCBBVVggQ0ZHIHJlZ2lzdGVyIHByb2dyYW1taW5nICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgUEhZ X0FVWF9DRkdfTUFYOyBpKyspIHsKPiArCQlwcl9kZWJ1ZygiJXM6IG9mZnNldD0weCUwOHgsIHZh bHVlPTB4JTA4eFxuIiwKPiArCQkJZHBfcGh5X2F1eF9jb25maWdfdHlwZV90b19zdHJpbmcoaSks Cj4gKwkJCWNmZ1tpXS5vZmZzZXQsIGNmZ1tpXS5sdXRbY2ZnW2ldLmN1cnJlbnRfaW5kZXhdKTsK PiArCQlkcF93cml0ZShjYXRhbG9nLT5pby0+cGh5X2lvLmJhc2UgKyBjZmdbaV0ub2Zmc2V0LAo+ ICsJCQljZmdbaV0ubHV0W2NmZ1tpXS5jdXJyZW50X2luZGV4XSk7Cj4gKwl9Cj4gKwo+ICsJZHBf d3JpdGUoY2F0YWxvZy0+aW8tPnBoeV9pby5iYXNlICsgRFBfUEhZX0FVWF9JTlRFUlJVUFRfTUFT SywgMHgxRik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfYXV4X2dldF9pcnEo c3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsIGJvb2wgY21kX2J1c3kpCj4gK3sKPiArCXUzMiBh Y2s7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lv bWVtICphaGJfYmFzZTsKPiArCj4gKwlpZiAoIWF1eCkgewo+ICsJCXByX2VycigiaW52YWxpZCBp bnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYo YXV4KTsKPiArCWFoYl9iYXNlID0gY2F0YWxvZy0+aW8tPmRwX2FoYi5iYXNlOwo+ICsKPiArCWF1 eC0+aXNyID0gZHBfcmVhZChhaGJfYmFzZSArIERQX0lOVFJfU1RBVFVTKTsKPiArCWF1eC0+aXNy ICY9IH5EUF9JTlRSX01BU0sxOwo+ICsJYWNrID0gYXV4LT5pc3IgJiBEUF9JTlRFUlJVUFRfU1RB VFVTMTsKPiArCWFjayA8PD0gMTsKPiArCWFjayB8PSBEUF9JTlRSX01BU0sxOwo+ICsJZHBfd3Jp dGUoYWhiX2Jhc2UgKyBEUF9JTlRSX1NUQVRVUywgYWNrKTsKPiArfQo+ICsKPiArLyogY29udHJv bGxlciByZWxhdGVkIGNhdGFsb2cgZnVuY3Rpb25zICovCj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFs b2dfY3RybF91cGRhdGVfdHJhbnNmZXJfdW5pdChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJs KQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJdm9pZCBf X2lvbWVtICpiYXNlOwo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCXByX2VycigiaW52YWxpZCBp bnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYo Y3RybCk7Cj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPiArCj4gKwlkcF93 cml0ZShiYXNlICsgRFBfVkFMSURfQk9VTkRBUlksIGN0cmwtPnZhbGlkX2JvdW5kYXJ5KTsKPiAr CWRwX3dyaXRlKGJhc2UgKyBEUF9UVSwgY3RybC0+ZHBfdHUpOwo+ICsJZHBfd3JpdGUoYmFzZSAr IERQX1ZBTElEX0JPVU5EQVJZXzIsIGN0cmwtPnZhbGlkX2JvdW5kYXJ5Mik7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9zdGF0ZV9jdHJsKHN0cnVjdCBkcF9jYXRhbG9n X2N0cmwgKmN0cmwsIHUzMiBzdGF0ZSkKPiArewo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0 ZSAqY2F0YWxvZzsKPiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiArCj4gKwlpZiAoIWN0cmwpIHsK PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4g KwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9s aW5rLmJhc2U7Cj4gKwo+ICsJZHBfd3JpdGUoYmFzZSArIERQX1NUQVRFX0NUUkwsIHN0YXRlKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX2NvbmZpZ19jdHJsKHN0cnVj dCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIHUzMiBjZmcpCj4gK3sKPiArCXN0cnVjdCBkcF9jYXRh bG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl2b2lkIF9faW9tZW0gKmxpbmtfYmFzZTsKPiArCj4g KwlpZiAoIWN0cmwpIHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVy bjsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+ICsJbGlua19iYXNl ID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPiArCj4gKwlwcl9kZWJ1ZygiRFBfQ09ORklH VVJBVElPTl9DVFJMPTB4JXhcbiIsIGNmZyk7Cj4gKwo+ICsJZHBfd3JpdGUobGlua19iYXNlICsg RFBfQ09ORklHVVJBVElPTl9DVFJMLCBjZmcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9j YXRhbG9nX2N0cmxfbGFuZV9tYXBwaW5nKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpCj4g K3sKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl2b2lkIF9faW9t ZW0gKmJhc2U7Cj4gKwo+ICsJaWYgKCFjdHJsKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0 XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJs KTsKPiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+ICsKPiArCWRwX3dyaXRl KGJhc2UgKyBEUF9MT0dJQ0FMMlBIWVNJQ0FMX0xBTkVfTUFQUElORywgMHhlNCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9tYWlubGlua19jdHJsKHN0cnVjdCBkcF9j YXRhbG9nX2N0cmwgKmN0cmwsCj4gKwkJCQkJCWJvb2wgZW5hYmxlKQo+ICt7Cj4gKwl1MzIgbWFp bmxpbmtfY3RybDsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl2 b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwo+ICsJaWYgKCFjdHJsKSB7Cj4gKwkJcHJfZXJyKCJpbnZh bGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRf cHJpdihjdHJsKTsKPiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+ICsKPiAr CWlmIChlbmFibGUpIHsKPiArCQlkcF93cml0ZShiYXNlICsgRFBfTUFJTkxJTktfQ1RSTCwgMHgw MjAwMDAwMCk7Cj4gKwkJd21iKCk7IC8qIG1ha2Ugc3VyZSBtYWlubGluayBpcyB0dXJuZWQgb2Zm IGJlZm9yZSByZXNldCAqLwo+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9NQUlOTElOS19DVFJMLCAw eDAyMDAwMDAyKTsKPiArCQl3bWIoKTsgLyogbWFrZSBzdXJlIG1haW5saW5rIGVudGVyZWQgcmVz ZXQgKi8KPiArCQlkcF93cml0ZShiYXNlICsgRFBfTUFJTkxJTktfQ1RSTCwgMHgwMjAwMDAwMCk7 Cj4gKwkJd21iKCk7IC8qIG1ha2Ugc3VyZSBtYWlubGluayByZXNldCBkb25lICovCj4gKwkJZHBf d3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0NUUkwsIDB4MDIwMDAwMDEpOwo+ICsJCXdtYigpOyAv KiBtYWtlIHN1cmUgbWFpbmxpbmsgdHVybmVkIG9uICovCgpTYW1lIGNvbW1lbnRzIGhlcmUgcmU6 IHJlYWRsIHZzIHJlYWRsX3JlbGF4ZWQgKyB3bWIKClBsZWFzZSAjZGVmaW5lIHRoZSBiaXRzIHlv dSdyZSBzZXR0aW5nLgoKCj4gKwl9IGVsc2Ugewo+ICsJCW1haW5saW5rX2N0cmwgPSBkcF9yZWFk KGJhc2UgKyBEUF9NQUlOTElOS19DVFJMKTsKPiArCQltYWlubGlua19jdHJsICY9IH5CSVQoMCk7 Cj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0NUUkwsIG1haW5saW5rX2N0cmwpOwo+ ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfY29uZmlnX21pc2Mo c3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKPiArCQkJCQl1MzIgY2MsIHUzMiB0YikKPiAr ewo+ICsJdTMyIG1pc2NfdmFsOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxv ZzsKPiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiArCj4gKwlpZiAoIWN0cmwpIHsKPiArCQlwcl9l cnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkcF9jYXRh bG9nX2dldF9wcml2KGN0cmwpOwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7 Cj4gKwo+ICsJbWlzY192YWwgPSBkcF9yZWFkKGJhc2UgKyBEUF9NSVNDMV9NSVNDMCk7Cj4gKwlt aXNjX3ZhbCB8PSBjYzsKClNob3VsZCB5b3UgbWFzayB0aGlzIHNvIGl0IGRvZXNuJ3Qgc3RvbXAg YXJlYXMgaXQgc2hvdWxkbid0PwoKPiArCW1pc2NfdmFsIHw9ICh0YiA8PCA1KTsKClBhcmVudGhl c2VzIGFyZSB1bm5lY2Vzc2FyeQoKPiArCW1pc2NfdmFsIHw9IEJJVCgwKTsgLyogQ29uZmlndXJl IGNsb2NrIHRvIHN5bmNocm9ub3VzIG1vZGUgKi8KPiArCj4gKwlwcl9kZWJ1ZygibWlzYyBzZXR0 aW5ncyA9IDB4JXhcbiIsIG1pc2NfdmFsKTsKPiArCWRwX3dyaXRlKGJhc2UgKyBEUF9NSVNDMV9N SVNDMCwgbWlzY192YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxf Y29uZmlnX21zYShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAo+ICsJCQkJCXUzMiByYXRl LCB1MzIgc3RyZWFtX3JhdGVfa2h6LAo+ICsJCQkJCWJvb2wgZml4ZWRfbnZpZCkKPiArewo+ICsJ dTMyIHBpeGVsX20sIHBpeGVsX247Cj4gKwl1MzIgbXZpZCwgbnZpZDsKPiArCXU2NCBtdmlkX2Nh bGM7Cj4gKwl1MzIgY29uc3QgbnZpZF9maXhlZCA9IDB4ODAwMDsKCllvdSBzaG91bGQgcHVsbCB0 aGlzIG91dCBpbnRvIGEgI2RlZmluZSBpbiBkcm1fZHBfaGVscGVyLmggYW5kIHVzZSB0aGUgbmV3 CmRlZmluZSBpbiB0aGUgaTkxNSBkcml2ZXIgKGluIGEgc2VwYXJhdGUgcGF0Y2gpIGFzIHdlbGwg YXMgaGVyZS4KCj4gKwl1MzIgY29uc3QgbGlua19yYXRlX2hicjIgPSA1NDAwMDA7Cj4gKwl1MzIg Y29uc3QgbGlua19yYXRlX2hicjMgPSA4MTAwMDA7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2 YXRlICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lvbWVtICpiYXNlX2NjLCAqYmFzZV9jdHJsOwo+ICsK PiArCWlmICghY3RybCkgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0 dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwlpZiAoZml4 ZWRfbnZpZCkgewo+ICsJCXByX2RlYnVnKCJ1c2UgZml4ZWQgTlZJRD0weCV4XG4iLCBudmlkX2Zp eGVkKTsKPiArCQludmlkID0gbnZpZF9maXhlZDsKPiArCj4gKwkJcHJfZGVidWcoImxpbmsgcmF0 ZT0lZGticHMsIHN0cmVhbV9yYXRlX2toej0ldUtoeiIsCj4gKwkJCXJhdGUsIHN0cmVhbV9yYXRl X2toeik7Cj4gKwo+ICsJCS8qCj4gKwkJICogRm9yIGludGVybWVkaWF0ZSByZXN1bHRzLCB1c2Ug NjQgYml0IGFyaXRobWV0aWMgdG8gYXZvaWQKPiArCQkgKiBsb3NzIG9mIHByZWNpc2lvbi4KPiAr CQkgKi8KPiArCQltdmlkX2NhbGMgPSAodTY0KSBzdHJlYW1fcmF0ZV9raHogKiBudmlkOwo+ICsJ CW12aWRfY2FsYyA9IGRpdl91NjQobXZpZF9jYWxjLCByYXRlKTsKPiArCj4gKwkJLyoKPiArCQkg KiB0cnVuY2F0ZSBiYWNrIHRvIDMyIGJpdHMgYXMgdGhpcyBmaW5hbCBkaXZpZGVkIHZhbHVlIHdp bGwKPiArCQkgKiBhbHdheXMgYmUgd2l0aGluIHRoZSByYW5nZSBvZiBhIDMyIGJpdCB1bnNpZ25l ZCBpbnQuCj4gKwkJICovCj4gKwkJbXZpZCA9ICh1MzIpIG12aWRfY2FsYzsKPiArCX0gZWxzZSB7 Cj4gKwkJYmFzZV9jYyA9IGNhdGFsb2ctPmlvLT5kcF9jY19pby5iYXNlOwo+ICsKPiArCQlwaXhl bF9tID0gZHBfcmVhZChiYXNlX2NjICsgTU1TU19EUF9QSVhFTF9NKTsKPiArCQlwaXhlbF9uID0g ZHBfcmVhZChiYXNlX2NjICsgTU1TU19EUF9QSVhFTF9OKTsKPiArCQlwcl9kZWJ1ZygicGl4ZWxf bT0weCV4LCBwaXhlbF9uPTB4JXhcbiIsIHBpeGVsX20sIHBpeGVsX24pOwo+ICsKPiArCQltdmlk ID0gKHBpeGVsX20gJiAweEZGRkYpICogNTsKPiArCQludmlkID0gKDB4RkZGRiAmICh+cGl4ZWxf bikpICsgKHBpeGVsX20gJiAweEZGRkYpOwo+ICsKPiArCQlwcl9kZWJ1ZygicmF0ZSA9ICVkXG4i LCByYXRlKTsKPiArCj4gKwkJaWYgKGxpbmtfcmF0ZV9oYnIyID09IHJhdGUpCj4gKwkJCW52aWQg Kj0gMjsKPiArCj4gKwkJaWYgKGxpbmtfcmF0ZV9oYnIzID09IHJhdGUpCj4gKwkJCW52aWQgKj0g MzsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShy YXRlKSkgewogICAgICAgICAgICAgICAgY2FzZSBEUF9MSU5LX0JXXzVfNDoKICAgICAgICAgICAg ICAgICAgICAgICAgbnZpZCAqPSAyOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIGNhc2UgRFBfTElOS19CV184XzE6CiAgICAgICAgICAgICAgICAgICAgICAg IG52aWQgKj0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg IH0KCkFuZCByZW1vdmUgbGlua19yYXRlX2hiciogYWJvdmUuCgoKPiArCX0KPiArCj4gKwliYXNl X2N0cmwgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+ICsJcHJfZGVidWcoIm12aWQ9MHgl eCwgbnZpZD0weCV4XG4iLCBtdmlkLCBudmlkKTsKPiArCWRwX3dyaXRlKGJhc2VfY3RybCArIERQ X1NPRlRXQVJFX01WSUQsIG12aWQpOwo+ICsJZHBfd3JpdGUoYmFzZV9jdHJsICsgRFBfU09GVFdB UkVfTlZJRCwgbnZpZCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9z ZXRfcGF0dGVybihzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAo+ICsJCQkJCXUzMiBwYXR0 ZXJuKQo+ICt7Cj4gKwlpbnQgYml0LCBjbnQgPSAxMDsKPiArCXUzMiBkYXRhOwo+ICsJc3RydWN0 IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiAr Cj4gKwlpZiAoIWN0cmwpIHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJl dHVybjsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+ICsJYmFzZSA9 IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4gKwo+ICsJYml0ID0gMTsKPiArCWJpdCA8PD0g KHBhdHRlcm4gLSAxKTsKCiAgICAgICAgYml0ID0gQklUKHBhdHRlcm4gLSAxKTsKCj4gKwlwcl9k ZWJ1ZygiaHc6IGJpdD0lZCB0cmFpbj0lZFxuIiwgYml0LCBwYXR0ZXJuKTsKPiArCWRwX3dyaXRl KGJhc2UgKyBEUF9TVEFURV9DVFJMLCBiaXQpOwo+ICsKPiArCWJpdCA9IDg7Cj4gKwliaXQgPDw9 IChwYXR0ZXJuIC0gMSk7CgogICAgICAgIGJpdCA9IEJJVChwYXR0ZXJuIC0gMSkgPDwgMzsKPiAr Cj4gKwl3aGlsZSAoY250LS0pIHsKPiArCQlkYXRhID0gZHBfcmVhZChiYXNlICsgRFBfTUFJTkxJ TktfUkVBRFkpOwo+ICsJCWlmIChkYXRhICYgYml0KQo+ICsJCQlicmVhazsKClNob3VsZCB0aGVy ZSBiZSBhIHNsZWVwIGluIGhlcmU/IEFsc28sIGNvbnNpZGVyIHVzaW5nIHJlYWR4X3BvbGxfdGlt ZW91dCBpbnN0ZWFkCm9mIHJvbGxpbmcgeW91ciBvd24gcG9sbGluZy4KCj4gKwl9Cj4gKwo+ICsJ aWYgKGNudCA9PSAwKQo+ICsJCXByX2Vycigic2V0IGxpbmtfdHJhaW49JWQgZmFpbGVkXG4iLCBw YXR0ZXJuKTsKClRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhbiBpbnQgYW5kIHJlcG9ydCB0 aGlzIGZhaWx1cmUgaW5zdGVhZCBvZiBpZ25vcmluZwppdC4KCj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGRwX2NhdGFsb2dfY3RybF91c2JfcmVzZXQoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3Ry bCwgYm9vbCBmbGlwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9n Owo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCXByX2Vy cigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFs b2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT51c2IzX2RwX2Nv bS5iYXNlOwo+ICsKPiArCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQX0NPTV9SRVNFVF9PVlJEX0NU UkwsIDB4MGEpOwoKQWdhaW4sIGFsbCBvZiB0aGVzZSBtYWdpYyB2YWx1ZXMgbmVlZCB0byBiZSBw dWxsZWQgb3V0IGludG8gI2RlZmluZXMgc28gd2Uga25vdwp3aGF0IHRoZSB2YWx1ZXMgbWVhbi4K Cj4gKwlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01fUEhZX01PREVfQ1RSTCwgMHgwMik7Cj4g KwlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01fU1dfUkVTRVQsIDB4MDEpOwo+ICsJLyogbWFr ZSBzdXJlIHVzYjMgY29tIHBoeSBzb2Z0d2FyZSByZXNldCBpcyBkb25lICovCj4gKwl3bWIoKTsK ClNhbWUgY29tbWVudHMgaGVyZSB3cnQgd21iKCkKCj4gKwo+ICsJaWYgKCFmbGlwKSAvKiBDQzEg Ki8KPiArCQlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01fVFlQRUNfQ1RSTCwgMHgwMik7Cj4g KwllbHNlIC8qIENDMiAqLwo+ICsJCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQX0NPTV9UWVBFQ19D VFJMLCAweDAzKTsKCgogICAgICAgIHUzMiB2YWw7CiAgICAgICAgLi4uCiAgICAgICAgdmFsID0g U09NRV9ERUZJTkVfVEhBVF9NQUtFU19TRU5TRTsKICAgICAgICBpZiAoZmxpcCkKICAgICAgICAg ICAgICAgIHZhbCB8PSBBTk9USEVSX0RFRklORV9USEFUX01FQU5TX0ZMSVA7CgogICAgICAgIGRw X2lvX3dyaXRlKFVTQjNfRFBfQ09NX1RZUEVDX0NUUkwsIHZhbCk7Cgo+ICsKPiArCWRwX3dyaXRl KGJhc2UgKyBVU0IzX0RQX0NPTV9TV0lfQ1RSTCwgMHgwMCk7Cj4gKwlkcF93cml0ZShiYXNlICsg VVNCM19EUF9DT01fU1dfUkVTRVQsIDB4MDApOwo+ICsJLyogbWFrZSBzdXJlIHRoZSBzb2Z0d2Fy ZSByZXNldCBpcyBkb25lICovCj4gKwl3bWIoKTsKPiArCj4gKwlkcF93cml0ZShiYXNlICsgVVNC M19EUF9DT01fUE9XRVJfRE9XTl9DVFJMLCAweDAxKTsKPiArCWRwX3dyaXRlKGJhc2UgKyBVU0Iz X0RQX0NPTV9SRVNFVF9PVlJEX0NUUkwsIDB4MDApOwo+ICsJLyogbWFrZSBzdXJlIHBoeSBpcyBi cm91Z2h0IG91dCBvZiByZXNldCAqLwo+ICsJd21iKCk7Cj4gKwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBkcF9jYXRhbG9nX3BhbmVsX3RwZ19jZmcoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBh bmVsLAo+ICsJYm9vbCBlbmFibGUpCj4gK3sKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUg KmNhdGFsb2c7Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwo+ICsJaWYgKCFwYW5lbCkgewo+ ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiAr CWRwX2NhdGFsb2dfZ2V0X3ByaXYocGFuZWwpOwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9w MC5iYXNlOwo+ICsKPiArCWlmICghZW5hYmxlKSB7Cj4gKwkJZHBfd3JpdGUoYmFzZSArIE1NU1Nf RFBfVFBHX01BSU5fQ09OVFJPTCwgMHgwKTsKPiArCQlkcF93cml0ZShiYXNlICsgTU1TU19EUF9C SVNUX0VOQUJMRSwgMHgwKTsKPiArCQlkcF93cml0ZShiYXNlICsgTU1TU19EUF9USU1JTkdfRU5H SU5FX0VOLCAweDApOwo+ICsJCXdtYigpOyAvKiBlbnN1cmUgVGltaW5nIGdlbmVyYXRvciBpcyB0 dXJuZWQgb2ZmICovCj4gKwkJcmV0dXJuOwo+ICsJfQoKVGhlcmUncyByZWFsbHkgbm8gcmVhc29u IHRvIGhhdmUgYm90aCB0aGUgZW5hYmxlICsgZGlzYWJsZSBwYXRoIGluIHRoZSBzYW1lCmZ1bmN0 aW9uLCB0aGV5IGRvbid0IHNoYXJlIGFueSBjb2RlIChhc2lkZSBmcm9tIHdyaXRpbmcgYSBmZXcg ZGlmZmVyZW50IHZhbHVlcwp0byB0aGUgc2FtZSByZWdpc3RlcnMpLiBDb3VsZCB5b3UgcGxlYXNl IHNwbGl0IHRoaXMgZnVuY3Rpb24gaW50byBhCnRpbWluZ19nZW5lcmF0b3JfZGlzYWJsZSBhbmQg dGltaW5nX2dlbmVyYXRvcl9lbmFibGU/Cgo+ICsKPiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQ X0lOVEZfQ09ORklHLCAweDApOwo+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9IU1lO Q19DVEwsIHBhbmVsLT5oc3luY19jdGwpOwo+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5U Rl9WU1lOQ19QRVJJT0RfRjAsIHBhbmVsLT52c3luY19wZXJpb2QgKgo+ICsJCQlwYW5lbC0+aHN5 bmNfcGVyaW9kKTsKPiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfVlNZTkNfUFVMU0Vf V0lEVEhfRjAsIHBhbmVsLT52X3N5bmNfd2lkdGggKgo+ICsJCQlwYW5lbC0+aHN5bmNfcGVyaW9k KTsKPiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfVlNZTkNfUEVSSU9EX0YxLCAwKTsK PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfVlNZTkNfUFVMU0VfV0lEVEhfRjEsIDAp Owo+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9ESVNQTEFZX0hDVEwsIHBhbmVsLT5k aXNwbGF5X2hjdGwpOwo+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9BQ1RJVkVfSENU TCwgMCk7Cj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19JTlRGX0RJU1BMQVlfVl9TVEFSVF9GMCwg cGFuZWwtPmRpc3BsYXlfdl9zdGFydCk7Cj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRG X0RJU1BMQVlfVl9FTkRfRjAsIHBhbmVsLT5kaXNwbGF5X3ZfZW5kKTsKPiArCWRwX3dyaXRlKGJh c2UgKyBNTVNTX0lOVEZfRElTUExBWV9WX1NUQVJUX0YxLCAwKTsKPiArCWRwX3dyaXRlKGJhc2Ug KyBNTVNTX0RQX0lOVEZfRElTUExBWV9WX0VORF9GMSwgMCk7Cj4gKwlkcF93cml0ZShiYXNlICsg TU1TU19EUF9JTlRGX0FDVElWRV9WX1NUQVJUX0YwLCAwKTsKPiArCWRwX3dyaXRlKGJhc2UgKyBN TVNTX0RQX0lOVEZfQUNUSVZFX1ZfRU5EX0YwLCAwKTsKPiArCWRwX3dyaXRlKGJhc2UgKyBNTVNT X0RQX0lOVEZfQUNUSVZFX1ZfU1RBUlRfRjEsIDApOwo+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1Nf RFBfSU5URl9BQ1RJVkVfVl9FTkRfRjEsIDApOwo+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBf SU5URl9QT0xBUklUWV9DVEwsIDApOwo+ICsJd21iKCk7IC8qIGVuc3VyZSBUUEcgcmVnaXN0ZXJz IGFyZSBwcm9ncmFtbWVkICovCj4gKwo+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfVFBHX01B SU5fQ09OVFJPTCwgMHgxMDApOwo+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfVFBHX1ZJREVP X0NPTkZJRywgMHg1KTsKPiArCXdtYigpOyAvKiBlbnN1cmUgVFBHIGNvbmZpZyBpcyBwcm9ncmFt bWVkICovCj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9CSVNUX0VOQUJMRSwgMHgxKTsKPiAr CWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX1RJTUlOR19FTkdJTkVfRU4sIDB4MSk7Cj4gKwl3bWIo KTsgLyogZW5zdXJlIFRpbWluZyBnZW5lcmF0b3IgaXMgdHVybmVkIG9uICovCj4gKwlwcl9kZWJ1 ZygiJXM6IGVuYWJsZWQgdHBnXG4iLCBfX2Z1bmNfXyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGRwX2NhdGFsb2dfY3RybF9yZXNldChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKQo+ICt7 Cj4gKwl1MzIgc3dfcmVzZXQ7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9n Owo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCXByX2Vy cigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFs b2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2FoYi5iYXNlOwo+ ICsKPiArCXN3X3Jlc2V0ID0gZHBfcmVhZChiYXNlICsgRFBfU1dfUkVTRVQpOwo+ICsKPiArCXN3 X3Jlc2V0IHw9IEJJVCgwKTsKClNob3VsZCBiZSBhICNkZWZpbmUKCj4gKwlkcF93cml0ZShiYXNl ICsgRFBfU1dfUkVTRVQsIHN3X3Jlc2V0KTsKPiArCXVzbGVlcF9yYW5nZSgxMDAwLCAxMDEwKTsg LyogaC93IHJlY29tbWVuZGVkIGRlbGF5ICovCgpTYW1lIGNvbW1lbnQgaGVyZSByZWdhcmRpbmcg dGhlIDEwdXMgcmFuZ2UKCj4gKwo+ICsJc3dfcmVzZXQgJj0gfkJJVCgwKTsKPiArCWRwX3dyaXRl KGJhc2UgKyBEUF9TV19SRVNFVCwgc3dfcmVzZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBk cF9jYXRhbG9nX2N0cmxfbWFpbmxpbmtfcmVhZHkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3Ry bCkKPiArewo+ICsJdTMyIGRhdGE7Cj4gKwlpbnQgY250ID0gMTA7Cj4gKwlzdHJ1Y3QgZHBfY2F0 YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsKPiArCWlm ICghY3RybCkgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJZ290byBlbmQ7 Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKPiArCWJhc2UgPSBjYXRh bG9nLT5pby0+ZHBfbGluay5iYXNlOwo+ICsKPiArCXdoaWxlICgtLWNudCkgewo+ICsJCS8qIERQ X01BSU5MSU5LX1JFQURZICovCj4gKwkJZGF0YSA9IGRwX3JlYWQoYmFzZSArIERQX01BSU5MSU5L X1JFQURZKTsKPiArCQlpZiAoZGF0YSAmIEJJVCgwKSkKPiArCQkJcmV0dXJuIHRydWU7Cj4gKwo+ ICsJCXVzbGVlcF9yYW5nZSgxMDAwLCAxMDEwKTsgLyogMW1zIHdhaXQgYmVmb3JlIG5leHQgcmVn IHJlYWQgKi8KClNhbWUgY29tbWVudCBoZXJlIHJlZ2FyZGluZyB1c2luZyByZWFkeF9wb2xsX3Rp bWVvdXQgd3JhcHBlZCBpbiBhIGhlbHBlciwgYWxzbwoxMHVzIGNvbW1lbnQuCgo+ICsJfQo+ICsJ cHJfZXJyKCJtYWlubGluayBub3QgcmVhZHlcbiIpOwo+ICtlbmQ6Cj4gKwlyZXR1cm4gZmFsc2U7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9lbmFibGVfaXJxKHN0cnVj dCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCj4gKwkJCQkJCWJvb2wgZW5hYmxlKQo+ICt7Cj4gKwlz dHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lvbWVtICpiYXNl Owo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4g KwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwli YXNlID0gY2F0YWxvZy0+aW8tPmRwX2FoYi5iYXNlOwo+ICsKPiArCWlmIChlbmFibGUpIHsKPiAr CQlkcF93cml0ZShiYXNlICsgRFBfSU5UUl9TVEFUVVMsIERQX0lOVFJfTUFTSzEpOwo+ICsJCWRw X3dyaXRlKGJhc2UgKyBEUF9JTlRSX1NUQVRVUzIsIERQX0lOVFJfTUFTSzIpOwo+ICsJfSBlbHNl IHsKPiArCQlkcF93cml0ZShiYXNlICsgRFBfSU5UUl9TVEFUVVMsIDB4MDApOwo+ICsJCWRwX3dy aXRlKGJhc2UgKyBEUF9JTlRSX1NUQVRVUzIsIDB4MDApOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfaHBkX2NvbmZpZyhzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJs ICpjdHJsLCBib29sIGVuKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRh bG9nOwo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCXBy X2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2Nh dGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNl Owo+ICsKPiArCWlmIChlbikgewo+ICsJCXUzMiByZWZ0aW1lciA9IGRwX3JlYWQoYmFzZSArIERQ X0RQX0hQRF9SRUZUSU1FUik7Cj4gKwo+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9EUF9IUERfSU5U X0FDSywgMHhGKTsKPiArCQlkcF93cml0ZShiYXNlICsgRFBfRFBfSFBEX0lOVF9NQVNLLCAweEYp Owo+ICsKPiArCQkvKiBFbmFibGluZyBSRUZUSU1FUiAqLwo+ICsJCXJlZnRpbWVyIHw9IEJJVCgx Nik7CgpZb3UgZG9uJ3QgdXNlIHRoaXMgYW55d2hlcmU/Cgo+ICsJCWRwX3dyaXRlKGJhc2UgKyBE UF9EUF9IUERfUkVGVElNRVIsIDB4Rik7Cj4gKwkJLyogRW5hYmxlIEhQRCAqLwo+ICsJCWRwX3dy aXRlKGJhc2UgKyBEUF9EUF9IUERfQ1RSTCwgMHgxKTsKPiArCX0gZWxzZSB7Cj4gKwkJLypEaXNh YmxlIEhQRCAqLwoKU3BhY2UgYWZ0ZXIgKgoKPiArCQlkcF93cml0ZShiYXNlICsgRFBfRFBfSFBE X0NUUkwsIDB4MCk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3Ry bF9nZXRfaW50ZXJydXB0KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpCj4gK3sKPiArCXUz MiBhY2sgPSAwOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXZv aWQgX19pb21lbSAqYmFzZTsKPiArCj4gKwlpZiAoIWN0cmwpIHsKPiArCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9w cml2KGN0cmwpOwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9haGIuYmFzZTsKPiArCj4gKwlj dHJsLT5pc3IgPSBkcF9yZWFkKGJhc2UgKyBEUF9JTlRSX1NUQVRVUzIpOwoKVGhpcyB2YWx1ZSBz aG91bGQganVzdCBnZXQgcmV0dXJuZWQgaW5zdGVhZCBvZiBiZWluZyBzdG9yZWQuCgo+ICsJY3Ry bC0+aXNyICY9IH5EUF9JTlRSX01BU0syOwoKVW5tYXNraW5nIHRoZSBpbnRlcnJ1cHRzIHNob3Vs ZCBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLCBpdCBzaG91bGQKYmUgcGFydCBv ZiB0aGUgYWNrIGJlbG93LgoKPiArCWFjayA9IGN0cmwtPmlzciAmIERQX0lOVEVSUlVQVF9TVEFU VVMyOwoKQW5kIHRoaXMgZG9lcyB0aGUgYWJvdmUgdW5tYXNrIGFscmVhZHksIHNvIHlvdSBjYW4g anVzdCB0dXJmIGl0LgoKPiArCWFjayA8PD0gMTsKPiArCWFjayB8PSBEUF9JTlRSX01BU0syOwoK SW5zdGVhZCBvZiByb2xsaW5nIHRoZSBhY2sgY29kZSB5b3Vyc2VsZiwgSSdkIHByZWZlciB3aGF0 IHlvdSBkaWQgd2l0aCBfTUFTSywKd2hlcmUgeW91IGRlZmluZSBEUF9JTlRFUlJVUFRfU1RBVFVT Ml9BQ0sgYWJvdmUgYW5kIGp1c3QgZG8gYSBiaXR3aXNlLU9SIHRvIGFkZAp0aGUgYWNrcyBoZXJl LiBXaXRob3V0IHRoZSByZWdpc3RlciBtYXAgaW4gZnJvbnQgb2YgbWUsIGl0IHdvdWxkIHRha2Ug YSB3aGlsZQp0byBmaWd1cmUgb3V0IHdoYXQgeW91J3JlIHRyeWluZyB0byBhY2NvbXBsaXNoLgoK PiArCWRwX3dyaXRlKGJhc2UgKyBEUF9JTlRSX1NUQVRVUzIsIGFjayk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9waHlfcmVzZXQoc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAqY3RybCkKPiArewo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiAr CXZvaWQgX19pb21lbSAqYmFzZTsKPiArCj4gKwlpZiAoIWN0cmwpIHsKPiArCQlwcl9lcnIoImlu dmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dl dF9wcml2KGN0cmwpOwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9haGIuYmFzZTsKPiArCj4g KwlkcF93cml0ZShiYXNlICsgRFBfUEhZX0NUUkwsIDB4NSk7IC8qIGJpdCAwICYgMiAqLwoKVGhl IGNvbW1lbnQgZG9lc24ndCBoZWxwIGhlcmUsIHBsZWFzZSAjZGVmaW5lIHRoZXNlIGJpdHMKCj4g Kwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAxMCk7IC8qIGgvdyByZWNvbW1lbmRlZCBkZWxheSAqLwoK U2FtZSBjb21tZW50IHJlOiBkZWxheSByYW5nZQoKPiArCWRwX3dyaXRlKGJhc2UgKyBEUF9QSFlf Q1RSTCwgMHgwKTsKPiArCXdtYigpOyAvKiBtYWtlIHN1cmUgUEhZIHJlc2V0IGRvbmUgKi8KClNh bWUgY29tbWVudCByZTogd21iCgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0 cmxfcGh5X2xhbmVfY2ZnKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCj4gKwkJYm9vbCBm bGlwcGVkLCB1OCBsbl9jbnQpCj4gK3sKPiArCXUzMiBpbmZvID0gMHgwOwo+ICsJc3RydWN0IGRw X2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXU4IG9yaWVudGF0aW9uID0gQklUKCEhZmxp cHBlZCk7Cj4gKwo+ICsJaWYgKCFjdHJsKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4i KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsK PiArCj4gKwlpbmZvIHw9IChsbl9jbnQgJiAweDBGKTsKClJlbW92ZSB0aGUgfCBhbmQganVzdCBt YWtlIHRoaXMgYW4gYXNzaWdubWVudCAoYW5kIHlvdSBjYW4gcmVtb3ZlIHRoZQppbml0aWFsaXph dGlvbiB0byAwIGFib3ZlKQoKPiArCWluZm8gfD0gKChvcmllbnRhdGlvbiAmIDB4MEYpIDw8IDQp Owo+ICsJcHJfZGVidWcoIlNoYXJlZCBJbmZvID0gMHgleFxuIiwgaW5mbyk7Cj4gKwo+ICsJZHBf d3JpdGUoY2F0YWxvZy0+aW8tPnBoeV9pby5iYXNlICsgRFBfUEhZX1NQQVJFMCwgaW5mbyk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF91cGRhdGVfdnhfcHgoc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKPiArCQl1OCB2X2xldmVsLCB1OCBwX2xldmVsKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lvbWVt ICpiYXNlMCwgKmJhc2UxOwo+ICsJdTggdmFsdWUwLCB2YWx1ZTE7CgpDYW4gd2UgcGxlYXNlIHBp Y2sgYmV0dGVyIG5hbWVzIGZvciB0aGVzZT8hCgo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCXBy X2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2Nh dGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwliYXNlMCA9IGNhdGFsb2ctPmlvLT5sbl90eDBfaW8u YmFzZTsKPiArCWJhc2UxID0gY2F0YWxvZy0+aW8tPmxuX3R4MV9pby5iYXNlOwo+ICsKPiArCXBy X2RlYnVnKCJodzogdj0lZCBwPSVkXG4iLCB2X2xldmVsLCBwX2xldmVsKTsKPiArCj4gKwl2YWx1 ZTAgPSB2bV92b2x0YWdlX3N3aW5nW3ZfbGV2ZWxdW3BfbGV2ZWxdOwo+ICsJdmFsdWUxID0gdm1f cHJlX2VtcGhhc2lzW3ZfbGV2ZWxdW3BfbGV2ZWxdOwo+ICsKPiArCS8qIHByb2dyYW0gZGVmYXVs dCBzZXR0aW5nIGZpcnN0ICovCgpXaHkgZG8geW91IG5lZWQgdG8gZG8gdGhpcz8KCj4gKwlkcF93 cml0ZShiYXNlMCArIFRYbl9UWF9EUlZfTFZMLCAweDJBKTsKPiArCWRwX3dyaXRlKGJhc2UxICsg VFhuX1RYX0RSVl9MVkwsIDB4MkEpOwo+ICsJZHBfd3JpdGUoYmFzZTAgKyBUWG5fVFhfRU1QX1BP U1QxX0xWTCwgMHgyMCk7Cj4gKwlkcF93cml0ZShiYXNlMSArIFRYbl9UWF9FTVBfUE9TVDFfTFZM LCAweDIwKTsKCiNkZWZpbmUgdGhlc2UgbWFnaWMgdmFsdWVzCgo+ICsKPiArCS8qIEVuYWJsZSBN VVggdG8gdXNlIEN1cnNvciB2YWx1ZXMgZnJvbSB0aGVzZSByZWdpc3RlcnMgKi8KPiArCXZhbHVl MCB8PSBCSVQoNSk7Cj4gKwl2YWx1ZTEgfD0gQklUKDUpOwoKI2RlZmluZSB0aGVzZSBiaXRzIHBs ZWFzZQoKPiArCj4gKwkvKiBDb25maWd1cmUgaG9zdCBhbmQgcGFuZWwgb25seSBpZiBib3RoIHZh bHVlcyBhcmUgYWxsb3dlZCAqLwo+ICsJaWYgKHZhbHVlMCAhPSAweEZGICYmIHZhbHVlMSAhPSAw eEZGKSB7CgpZb3UgY2FuIGNoZWNrIHRoaXMgYSBsb3QgZWFybGllciBpbiB0aGUgZnVuY3Rpb24u Cgo+ICsJCWRwX3dyaXRlKGJhc2UwICsgVFhuX1RYX0RSVl9MVkwsIHZhbHVlMCk7Cj4gKwkJZHBf d3JpdGUoYmFzZTEgKyBUWG5fVFhfRFJWX0xWTCwgdmFsdWUwKTsKPiArCQlkcF93cml0ZShiYXNl MCArIFRYbl9UWF9FTVBfUE9TVDFfTFZMLCB2YWx1ZTEpOwo+ICsJCWRwX3dyaXRlKGJhc2UxICsg VFhuX1RYX0VNUF9QT1NUMV9MVkwsIHZhbHVlMSk7Cj4gKwo+ICsJCXByX2RlYnVnKCJodzogdnhf dmFsdWU9MHgleCBweF92YWx1ZT0weCV4XG4iLAo+ICsJCQl2YWx1ZTAsIHZhbHVlMSk7Cj4gKwl9 IGVsc2Ugewo+ICsJCXByX2VycigiaW52YWxpZCB2eCAoMHgleD0weCV4KSwgcHggKDB4JXg9MHgl eFxuIiwKPiArCQkJdl9sZXZlbCwgdmFsdWUwLCBwX2xldmVsLCB2YWx1ZTEpOwoKU2VlbXMgbGlr ZSByZXR1cm5pbmcgYW4gZXJyb3IgaW4gdGhpcyBjYXNlIHdvdWxkIGJlIHVzZWZ1bAoKPiArCX0K PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3NlbmRfcGh5X3BhdHRlcm4o c3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKPiArCQkJdTMyIHBhdHRlcm4pCj4gK3sKPiAr CXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl1MzIgdmFsdWUgPSAweDA7 Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBOVUxMOwo+ICsKPiArCWlmICghY3RybCkgewo+ICsJ CXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRw X2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9s aW5rLmJhc2U7Cj4gKwo+ICsJZHBfd3JpdGUoYmFzZSArIERQX1NUQVRFX0NUUkwsIDB4MCk7CgpE byB5b3UgcmVhbGx5IG5lZWQgdG8gZG8gdGhpcz8KCj4gKwo+ICsJc3dpdGNoIChwYXR0ZXJuKSB7 Cj4gKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fRDEwXzJfTk9fU0NSQU1CTElORzoKPiArCQlk cF93cml0ZShiYXNlICsgRFBfU1RBVEVfQ1RSTCwgMHgxKTsKPiArCQlicmVhazsKPiArCWNhc2Ug RFBfVEVTVF9QSFlfUEFUVEVSTl9TWU1CT0xfRVJSX01FQVNVUkVNRU5UX0NOVDoKPiArCQl2YWx1 ZSAmPSB+KDEgPDwgMTYpOwo+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9IQlIyX0NPTVBMSUFOQ0Vf U0NSQU1CTEVSX1JFU0VULCB2YWx1ZSk7Cj4gKwkJdmFsdWUgfD0gMHhGQzsKPiArCQlkcF93cml0 ZShiYXNlICsgRFBfSEJSMl9DT01QTElBTkNFX1NDUkFNQkxFUl9SRVNFVCwgdmFsdWUpOwo+ICsJ CWRwX3dyaXRlKGJhc2UgKyBEUF9NQUlOTElOS19MRVZFTFMsIDB4Mik7Cj4gKwkJZHBfd3JpdGUo YmFzZSArIERQX1NUQVRFX0NUUkwsIDB4MTApOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUF9URVNU X1BIWV9QQVRURVJOX1BSQlM3Ogo+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCAw eDIwKTsKPiArCQlicmVhazsKPiArCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VT VE9NX1BBVFRFUk46Cj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX1NUQVRFX0NUUkwsIDB4NDApOwo+ ICsJCS8qIDAwMTExMTEwMDAwMDExMTExMDAwMDAxMTExMTAwMDAwICovCj4gKwkJZHBfd3JpdGUo YmFzZSArIERQX1RFU1RfODBCSVRfQ1VTVE9NX1BBVFRFUk5fUkVHMCwgMHgzRTBGODNFMCk7Cj4g KwkJLyogMDAwMDExMTExMDAwMDAxMTExMTAwMDAwMTExMTEwMDAgKi8KPiArCQlkcF93cml0ZShi YXNlICsgRFBfVEVTVF84MEJJVF9DVVNUT01fUEFUVEVSTl9SRUcxLCAweDBGODNFMEY4KTsKPiAr CQkvKiAxMTExMTAwMDAwMTExMTEwICovCj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX1RFU1RfODBC SVRfQ1VTVE9NX1BBVFRFUk5fUkVHMiwgMHgwMDAwRjgzRSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNl IERQX1RFU1RfUEhZX1BBVFRFUk5fSEJSMl9DVFNfRVlFX1BBVFRFUk46Cj4gKwkJdmFsdWUgPSBC SVQoMTYpOwo+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9IQlIyX0NPTVBMSUFOQ0VfU0NSQU1CTEVS X1JFU0VULCB2YWx1ZSk7Cj4gKwkJdmFsdWUgfD0gMHhGQzsKPiArCQlkcF93cml0ZShiYXNlICsg RFBfSEJSMl9DT01QTElBTkNFX1NDUkFNQkxFUl9SRVNFVCwgdmFsdWUpOwo+ICsJCWRwX3dyaXRl KGJhc2UgKyBEUF9NQUlOTElOS19MRVZFTFMsIDB4Mik7Cj4gKwkJZHBfd3JpdGUoYmFzZSArIERQ X1NUQVRFX0NUUkwsIDB4MTApOwoKVGhpcyBjb2RlIGlzIHRoZSBleGFjdCBzYW1lIGFzIHRoZSBj YXNlIGZvciBEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJfTUVBU1VSRU1FTlRfQ05ULCBh c2lkZSBmcm9tIEJJVCgxNikgdnMgfkJJVCgxNikuIENhbiB5b3UgcGxlYXNlIGNvbWJpbmUgdGhl c2UgY2FzZXMKYW5kIHNoYXJlIGNvZGU/Cgo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlw cl9kZWJ1ZygiTm8gdmFsaWQgdGVzdCBwYXR0ZXJuIHJlcXVlc3RlZDogMHgleFxuIiwgcGF0dGVy bik7Cj4gKwkJcmV0dXJuOwo+ICsJfQoKQWxsIG9mIHRoZSBEUF9TVEFURV9DVFJMIHZhbHVlcyBz aG91bGQgYmUgI2RlZmluZWQsIGFuZCB5b3UgY2FuIG1vdmUgdGhlIHdyaXRlCmRvd24gaGVyZSBp bnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGV2ZXJ5d2hlcmUgKHdpdGgKRFBfVEVTVF9QSFlfUEFU VEVSTl84MF9CSVRfQ1VTVE9NX1BBVFRFUk4gd3JpdGluZyBhIDApLgoKPiArCj4gKwkvKiBNYWtl IHN1cmUgdGhlIHRlc3QgcGF0dGVybiBpcyBwcm9ncmFtbWVkIGluIHRoZSBoYXJkd2FyZSAqLwo+ ICsJd21iKCk7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgZHBfY2F0YWxvZ19jdHJsX3JlYWRfcGh5 X3BhdHRlcm4oc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCkKPiArewo+ICsJc3RydWN0IGRw X2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXZvaWQgX19pb21lbSAqYmFzZSA9IE5VTEw7 Cj4gKwo+ICsJaWYgKCFjdHJsKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiAr CQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+ICsK PiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+ICsKPiArCXJldHVybiBkcF9y ZWFkKGJhc2UgKyBEUF9NQUlOTElOS19SRUFEWSk7Cj4gK30KPiArCj4gKy8qIHBhbmVsIHJlbGF0 ZWQgY2F0YWxvZyBmdW5jdGlvbnMgKi8KPiArc3RhdGljIGludCBkcF9jYXRhbG9nX3BhbmVsX3Rp bWluZ19jZmcoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsK PiArCWlmICghcGFuZWwpIHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCWdv dG8gZW5kOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYocGFuZWwpOwo+ICsJYmFz ZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4gKwo+ICsJZHBfd3JpdGUoYmFzZSArIERQ X1RPVEFMX0hPUl9WRVIsIHBhbmVsLT50b3RhbCk7Cj4gKwlkcF93cml0ZShiYXNlICsgRFBfU1RB UlRfSE9SX1ZFUl9GUk9NX1NZTkMsIHBhbmVsLT5zeW5jX3N0YXJ0KTsKPiArCWRwX3dyaXRlKGJh c2UgKyBEUF9IU1lOQ19WU1lOQ19XSURUSF9QT0xBUklUWSwgcGFuZWwtPndpZHRoX2JsYW5raW5n KTsKPiArCWRwX3dyaXRlKGJhc2UgKyBEUF9BQ1RJVkVfSE9SX1ZFUiwgcGFuZWwtPmRwX2FjdGl2 ZSk7Cj4gK2VuZDoKCnVzZWxlc3MgbGFiZWwsIGJ1dCBpdCdsbCBwcm9iYWJseSBnbyBhd2F5IHdo ZW4geW91IHN0cmlwIG91dCBhbGwgb2YgdGhlCnVubmVjZXNzYXJ5IE5VTEwgY2hlY2tzIGZyb20g dGhlIGRyaXZlci4KCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY2F0 YWxvZ19hdWRpb19pbml0KHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbykKPiArewo+ICsJ c3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXN0YXRpYyB1MzIgc2RwX21h cFtdW0RQX0FVRElPX1NEUF9IRUFERVJfTUFYXSA9IHsKPiArCQl7Cj4gKwkJCU1NU1NfRFBfQVVE SU9fU1RSRUFNXzAsCj4gKwkJCU1NU1NfRFBfQVVESU9fU1RSRUFNXzEsCj4gKwkJCU1NU1NfRFBf QVVESU9fU1RSRUFNXzEsCj4gKwkJfSwKPiArCQl7Cj4gKwkJCU1NU1NfRFBfQVVESU9fVElNRVNU QU1QXzAsCj4gKwkJCU1NU1NfRFBfQVVESU9fVElNRVNUQU1QXzEsCj4gKwkJCU1NU1NfRFBfQVVE SU9fVElNRVNUQU1QXzEsCj4gKwkJfSwKPiArCQl7Cj4gKwkJCU1NU1NfRFBfQVVESU9fSU5GT0ZS QU1FXzAsCj4gKwkJCU1NU1NfRFBfQVVESU9fSU5GT0ZSQU1FXzEsCj4gKwkJCU1NU1NfRFBfQVVE SU9fSU5GT0ZSQU1FXzEsCj4gKwkJfSwKPiArCQl7Cj4gKwkJCU1NU1NfRFBfQVVESU9fQ09QWU1B TkFHRU1FTlRfMCwKPiArCQkJTU1TU19EUF9BVURJT19DT1BZTUFOQUdFTUVOVF8xLAo+ICsJCQlN TVNTX0RQX0FVRElPX0NPUFlNQU5BR0VNRU5UXzEsCj4gKwkJfSwKPiArCQl7Cj4gKwkJCU1NU1Nf RFBfQVVESU9fSVNSQ18wLAo+ICsJCQlNTVNTX0RQX0FVRElPX0lTUkNfMSwKPiArCQkJTU1TU19E UF9BVURJT19JU1JDXzEsCj4gKwkJfSwKPiArCX07Cj4gKwo+ICsJaWYgKCFhdWRpbykKPiArCQly ZXR1cm47Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdWRpbyk7Cj4gKwo+ICsJY2F0YWxv Zy0+YXVkaW9fbWFwID0gc2RwX21hcDsKCkhtbSwgdGhpcyBpcyBhIGJpdCBzcG9va3ksIHdlJ3Jl IHN0b3JpbmcgYSAobm9uLWNvbnN0KSBwb2ludGVyIHRvIGEgc3RhdGljCnN0YWNrIHZhcmlhYmxl LiBGb3J0dW5hdGVseSB0aGlzIGxvb2tzIGxpa2UgaXQnbGwgYmUgZWFzeSB0byBmaXggc2luY2Ug dGhpcwpkYXRhIGlzIG9ubHkgYWNjZXNzZWQgaW4gdGhpcyBmaWxlLiBTbyBtb3ZlIHRoZSBtYXAg aW50byBhIHN0YXRpYyBjb25zdCBnbG9iYWwKYW5kIHJlZmVyZW5jZSBpdCBkaXJlY3RseSB3aGVu IG5lZWRlZCAoYW5kIGRyb3AgYXVkaW9fbWFwKS4KCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRw X2NhdGFsb2dfYXVkaW9fY29uZmlnX3NkcChzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8p Cj4gK3sKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl2b2lkIF9f aW9tZW0gKmJhc2U7Cj4gKwl1MzIgc2RwX2NmZyA9IDA7Cj4gKwl1MzIgc2RwX2NmZzIgPSAwOwo+ ICsKPiArCWlmICghYXVkaW8pCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3By aXYoYXVkaW8pOwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4gKwo+ICsJ c2RwX2NmZyA9IGRwX3JlYWQoYmFzZSArIE1NU1NfRFBfU0RQX0NGRyk7Cj4gKwo+ICsJLyogQVVE SU9fVElNRVNUQU1QX1NEUF9FTiAqLwo+ICsJc2RwX2NmZyB8PSBCSVQoMSk7Cj4gKwkvKiBBVURJ T19TVFJFQU1fU0RQX0VOICovCj4gKwlzZHBfY2ZnIHw9IEJJVCgyKTsKPiArCS8qIEFVRElPX0NP UFlfTUFOQUdFTUVOVF9TRFBfRU4gKi8KPiArCXNkcF9jZmcgfD0gQklUKDUpOwo+ICsJLyogQVVE SU9fSVNSQ19TRFBfRU4gICovCj4gKwlzZHBfY2ZnIHw9IEJJVCg2KTsKPiArCS8qIEFVRElPX0lO Rk9GUkFNRV9TRFBfRU4gICovCj4gKwlzZHBfY2ZnIHw9IEJJVCgyMCk7CgojZGVmaW5lIHRoZSB2 YWx1ZXMgYW5kIGNvbWJpbmUgdGhlIGFzc2lnbm1lbnQKCj4gKwo+ICsJcHJfZGVidWcoInNkcF9j ZmcgPSAweCV4XG4iLCBzZHBfY2ZnKTsKPiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX1NEUF9D RkcsIHNkcF9jZmcpOwo+ICsKPiArCXNkcF9jZmcyID0gZHBfcmVhZChiYXNlICsgTU1TU19EUF9T RFBfQ0ZHMik7Cj4gKwkvKiBJRlJNX1JFR1NSQyAtPiBEbyBub3QgdXNlIHJlZyB2YWx1ZXMgKi8K PiArCXNkcF9jZmcyICY9IH5CSVQoMCk7Cj4gKwkvKiBBVURJT19TVFJFQU1fSEIzX1JFR1NSQy0+ IERvIG5vdCB1c2UgcmVnIHZhbHVlcyAqLwo+ICsJc2RwX2NmZzIgJj0gfkJJVCgxKTsKClRoZSBy ZXNldCB2YWx1ZSBvZiB0aGlzIHJlZ2lzdGVyIGlzIDB4NCwgc28gaG93IGNhbiB0aGUgYml0cyBp biBwb3NpdGlvbiAwLzEKZ2V0IGZsaXBwZWQ/IFdlIHNob3VsZG4ndCBuZWVkIHRoaXMgY29kZSwg YWZhaWN0LgoKSWYgd2UgZG8sIHRoZSBzYW1lIGNvbW1lbnRzIHJlZ2FyZGluZyAjZGVmaW5lIGFu ZCBjb21iaW5hdGlvbiBhcyBhYm92ZS4KCj4gKwo+ICsJcHJfZGVidWcoInNkcF9jZmcyID0gMHgl eFxuIiwgc2RwX2NmZzIpOwo+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfU0RQX0NGRzIsIHNk cF9jZmcyKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19nZXRfaGVh ZGVyKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbykKPiArewo+ICsJc3RydWN0IGRwX2Nh dGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXUzMiAoKnNkcF9tYXApW0RQX0FVRElPX1NEUF9I RUFERVJfTUFYXTsKPiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiArCWVudW0gZHBfY2F0YWxvZ19h dWRpb19zZHBfdHlwZSBzZHA7Cj4gKwllbnVtIGRwX2NhdGFsb2dfYXVkaW9faGVhZGVyX3R5cGUg aGVhZGVyOwo+ICsKPiArCWlmICghYXVkaW8pCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRwX2NhdGFs b2dfZ2V0X3ByaXYoYXVkaW8pOwo+ICsKPiArCWJhc2UgICAgPSBjYXRhbG9nLT5pby0+ZHBfbGlu ay5iYXNlOwo+ICsJc2RwX21hcCA9IGNhdGFsb2ctPmF1ZGlvX21hcDsKPiArCXNkcCAgICAgPSBh dWRpby0+c2RwX3R5cGU7Cj4gKwloZWFkZXIgID0gYXVkaW8tPnNkcF9oZWFkZXI7Cj4gKwo+ICsJ YXVkaW8tPmRhdGEgPSBkcF9yZWFkKGJhc2UgKyBzZHBfbWFwW3NkcF1baGVhZGVyXSk7Cj4gK30K ClRoaXMgZnVuY3Rpb24gaXMgdW51c2VkLCBwbGVhc2UgcmVtb3ZlLgoKPiArCj4gK3N0YXRpYyB2 b2lkIGRwX2NhdGFsb2dfYXVkaW9fc2V0X2hlYWRlcihzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAq YXVkaW8pCj4gK3sKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl1 MzIgKCpzZHBfbWFwKVtEUF9BVURJT19TRFBfSEVBREVSX01BWF07Cj4gKwl2b2lkIF9faW9tZW0g KmJhc2U7Cj4gKwllbnVtIGRwX2NhdGFsb2dfYXVkaW9fc2RwX3R5cGUgc2RwOwo+ICsJZW51bSBk cF9jYXRhbG9nX2F1ZGlvX2hlYWRlcl90eXBlIGhlYWRlcjsKPiArCXUzMiBkYXRhOwo+ICsKPiAr CWlmICghYXVkaW8pCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVk aW8pOwo+ICsKPiArCWJhc2UgICAgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+ICsJc2Rw X21hcCA9IGNhdGFsb2ctPmF1ZGlvX21hcDsKPiArCXNkcCAgICAgPSBhdWRpby0+c2RwX3R5cGU7 Cj4gKwloZWFkZXIgID0gYXVkaW8tPnNkcF9oZWFkZXI7Cj4gKwlkYXRhICAgID0gYXVkaW8tPmRh dGE7Cj4gKwo+ICsJZHBfd3JpdGUoYmFzZSArIHNkcF9tYXBbc2RwXVtoZWFkZXJdLCBkYXRhKTsK PiArfQoKVGhpcyBmdW5jdGlvbiBpcyB1bnVzZWQsIHBsZWFzZSByZW1vdmUuCgo+ICsKPiArc3Rh dGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19jb25maWdfYWNyKHN0cnVjdCBkcF9jYXRhbG9nX2F1 ZGlvICphdWRpbykKPiArewo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsK PiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiArCXUzMiBhY3JfY3RybCwgc2VsZWN0Owo+ICsKPiAr CWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOwo+ICsKPiArCXNlbGVjdCA9IGF1ZGlvLT5kYXRh Owo+ICsJYmFzZSAgID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPiArCj4gKwlhY3JfY3Ry bCA9IHNlbGVjdCA8PCA0IHwgQklUKDMxKSB8IEJJVCg4KSB8IEJJVCgxNCk7Cj4gKwo+ICsJcHJf ZGVidWcoInNlbGVjdCA9IDB4JXgsIGFjcl9jdHJsID0gMHgleFxuIiwgc2VsZWN0LCBhY3JfY3Ry bCk7Cj4gKwo+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfQVVESU9fQUNSX0NUUkwsIGFjcl9j dHJsKTsKPiArfQoKVGhpcyBmdW5jdGlvbiBpcyB1bnVzZWQsIHBsZWFzZSByZW1vdmUuCgo+ICsK PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19zYWZlX3RvX2V4aXRfbGV2ZWwoc3RydWN0 IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2 YXRlICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsJdTMyIG1haW5saW5rX2xl dmVscywgc2FmZV90b19leGl0X2xldmVsOwo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVk aW8pOwo+ICsKPiArCWJhc2UgICA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4gKwlzYWZl X3RvX2V4aXRfbGV2ZWwgPSBhdWRpby0+ZGF0YTsKPiArCj4gKwltYWlubGlua19sZXZlbHMgPSBk cF9yZWFkKGJhc2UgKyBEUF9NQUlOTElOS19MRVZFTFMpOwo+ICsJbWFpbmxpbmtfbGV2ZWxzICY9 IDB4RkUwOwo+ICsJbWFpbmxpbmtfbGV2ZWxzIHw9IHNhZmVfdG9fZXhpdF9sZXZlbDsKPiArCj4g Kwlwcl9kZWJ1ZygibWFpbmxpbmtfbGV2ZWwgPSAweCV4LCBzYWZlX3RvX2V4aXRfbGV2ZWwgPSAw eCV4XG4iLAo+ICsJCQltYWlubGlua19sZXZlbHMsIHNhZmVfdG9fZXhpdF9sZXZlbCk7Cj4gKwo+ ICsJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0xFVkVMUywgbWFpbmxpbmtfbGV2ZWxzKTsK PiArfQoKVGhpcyBmdW5jdGlvbiBpcyB1bnVzZWQsIHBsZWFzZSByZW1vdmUuCgo+ICsKPiArc3Rh dGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19lbmFibGUoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8g KmF1ZGlvKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJ dm9pZCBfX2lvbWVtICpiYXNlOwo+ICsJYm9vbCBlbmFibGU7Cj4gKwl1MzIgYXVkaW9fY3RybDsK PiArCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1ZGlvKTsKPiArCj4gKwliYXNlICAgPSBjYXRh bG9nLT5pby0+ZHBfbGluay5iYXNlOwo+ICsJZW5hYmxlID0gISFhdWRpby0+ZGF0YTsKPiArCj4g KwlhdWRpb19jdHJsID0gZHBfcmVhZChiYXNlICsgTU1TU19EUF9BVURJT19DRkcpOwo+ICsKPiAr CWlmIChlbmFibGUpCj4gKwkJYXVkaW9fY3RybCB8PSBCSVQoMCk7Cj4gKwllbHNlCj4gKwkJYXVk aW9fY3RybCAmPSB+QklUKDApOwo+ICsKPiArCXByX2RlYnVnKCJkcF9hdWRpb19jZmcgPSAweCV4 XG4iLCBhdWRpb19jdHJsKTsKPiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0FVRElPX0NGRywg YXVkaW9fY3RybCk7Cj4gKwo+ICsJLyogbWFrZSBzdXJlIGF1ZGlvIGVuZ2luZSBpcyBkaXNhYmxl ZCAqLwo+ICsJd21iKCk7Cj4gK30KClRoaXMgZnVuY3Rpb24gaXMgdW51c2VkLCBwbGVhc2UgcmVt b3ZlLgoKPiArCj4gK3N0cnVjdCBkcF9jYXRhbG9nICpkcF9jYXRhbG9nX2dldChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkcF9pbyAqaW8pCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1 Y3QgZHBfY2F0YWxvZyAqZHBfY2F0YWxvZzsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUg KmNhdGFsb2c7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggYXV4ID0gewo+ICsJCS5yZWFkX2Rh dGEgICAgID0gZHBfY2F0YWxvZ19hdXhfcmVhZF9kYXRhLAo+ICsJCS53cml0ZV9kYXRhICAgID0g ZHBfY2F0YWxvZ19hdXhfd3JpdGVfZGF0YSwKPiArCQkud3JpdGVfdHJhbnMgICA9IGRwX2NhdGFs b2dfYXV4X3dyaXRlX3RyYW5zLAo+ICsJCS5jbGVhcl90cmFucyAgID0gZHBfY2F0YWxvZ19hdXhf Y2xlYXJfdHJhbnMsCj4gKwkJLnJlc2V0ICAgICAgICAgPSBkcF9jYXRhbG9nX2F1eF9yZXNldCwK PiArCQkudXBkYXRlX2F1eF9jZmcgPSBkcF9jYXRhbG9nX2F1eF91cGRhdGVfY2ZnLAo+ICsJCS5l bmFibGUgICAgICAgID0gZHBfY2F0YWxvZ19hdXhfZW5hYmxlLAo+ICsJCS5zZXR1cCAgICAgICAg ID0gZHBfY2F0YWxvZ19hdXhfc2V0dXAsCj4gKwkJLmdldF9pcnEgICAgICAgPSBkcF9jYXRhbG9n X2F1eF9nZXRfaXJxLAoKT3V0IG9mIHRoZXNlLCBpdCBzZWVtcyBsaWtlIHdyaXRlX3RyYW5zLCBj bGVhcl90cmFucywgdXBkYXRlX2F1eF9jZmcsIHNldHVwIGFuZApnZXRfaXJxIGFyZSBhbGwgdW51 c2VkLiBQbGVhc2UgcmVtb3ZlIHRoZW0uCgpQbGVhc2UgYWxzbyBjaGVjayB0aGUgb3RoZXIgZnVu Y3Rpb25zIHRvIGVuc3VyZSB0aGV5J3JlIHVzZWQuCgo+ICsJfTsKPiArCXN0cnVjdCBkcF9jYXRh bG9nX2N0cmwgY3RybCA9IHsKPiArCQkuc3RhdGVfY3RybCAgICAgPSBkcF9jYXRhbG9nX2N0cmxf c3RhdGVfY3RybCwKPiArCQkuY29uZmlnX2N0cmwgICAgPSBkcF9jYXRhbG9nX2N0cmxfY29uZmln X2N0cmwsCj4gKwkJLmxhbmVfbWFwcGluZyAgID0gZHBfY2F0YWxvZ19jdHJsX2xhbmVfbWFwcGlu ZywKPiArCQkubWFpbmxpbmtfY3RybCAgPSBkcF9jYXRhbG9nX2N0cmxfbWFpbmxpbmtfY3RybCwK PiArCQkuY29uZmlnX21pc2MgICAgPSBkcF9jYXRhbG9nX2N0cmxfY29uZmlnX21pc2MsCj4gKwkJ LmNvbmZpZ19tc2EgICAgID0gZHBfY2F0YWxvZ19jdHJsX2NvbmZpZ19tc2EsCj4gKwkJLnNldF9w YXR0ZXJuICAgID0gZHBfY2F0YWxvZ19jdHJsX3NldF9wYXR0ZXJuLAo+ICsJCS5yZXNldCAgICAg ICAgICA9IGRwX2NhdGFsb2dfY3RybF9yZXNldCwKPiArCQkudXNiX3Jlc2V0ICAgICAgPSBkcF9j YXRhbG9nX2N0cmxfdXNiX3Jlc2V0LAo+ICsJCS5tYWlubGlua19yZWFkeSA9IGRwX2NhdGFsb2df Y3RybF9tYWlubGlua19yZWFkeSwKPiArCQkuZW5hYmxlX2lycSAgICAgPSBkcF9jYXRhbG9nX2N0 cmxfZW5hYmxlX2lycSwKPiArCQkuaHBkX2NvbmZpZyAgICAgPSBkcF9jYXRhbG9nX2N0cmxfaHBk X2NvbmZpZywKPiArCQkucGh5X3Jlc2V0ICAgICAgPSBkcF9jYXRhbG9nX2N0cmxfcGh5X3Jlc2V0 LAo+ICsJCS5waHlfbGFuZV9jZmcgICA9IGRwX2NhdGFsb2dfY3RybF9waHlfbGFuZV9jZmcsCj4g KwkJLnVwZGF0ZV92eF9weCAgID0gZHBfY2F0YWxvZ19jdHJsX3VwZGF0ZV92eF9weCwKPiArCQku Z2V0X2ludGVycnVwdCAgPSBkcF9jYXRhbG9nX2N0cmxfZ2V0X2ludGVycnVwdCwKPiArCQkudXBk YXRlX3RyYW5zZmVyX3VuaXQgPSBkcF9jYXRhbG9nX2N0cmxfdXBkYXRlX3RyYW5zZmVyX3VuaXQs Cj4gKwkJLnNlbmRfcGh5X3BhdHRlcm4gICAgPSBkcF9jYXRhbG9nX2N0cmxfc2VuZF9waHlfcGF0 dGVybiwKPiArCQkucmVhZF9waHlfcGF0dGVybiA9IGRwX2NhdGFsb2dfY3RybF9yZWFkX3BoeV9w YXR0ZXJuLAoKU28sIHdoYXQncyB0aGUgYmVuZWZpdCBvZiBhZGRpbmcgdGhlIGNhdGFsb2cgYWJz dHJhY3Rpb25zPyBEbyB5b3UgZXZlciBoYXZlCm11bHRpcGxlL2FsdGVybmF0ZSBpbXBsZW1lbnRh dGlvbnMgb2YgYSBjYXRhbG9nPyBJdCBkb2Vzbid0IHNlZW0gbGlrZSBpdC4gWW91CnNob3VsZCBq dXN0IHJlbW92ZSBhbGwgb2YgdGhlIGNhdGFsb2cgb3ZlcmhlYWQgYW5kIGNhbGwgdGhlIGZ1bmN0 aW9ucyBkaXJlY3RseS4KCj4gKwl9Owo+ICsJc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gYXVkaW8g PSB7Cj4gKwkJLmluaXQgICAgICAgPSBkcF9jYXRhbG9nX2F1ZGlvX2luaXQsCj4gKwkJLmNvbmZp Z19hY3IgPSBkcF9jYXRhbG9nX2F1ZGlvX2NvbmZpZ19hY3IsCj4gKwkJLmVuYWJsZSAgICAgPSBk cF9jYXRhbG9nX2F1ZGlvX2VuYWJsZSwKPiArCQkuY29uZmlnX3NkcCA9IGRwX2NhdGFsb2dfYXVk aW9fY29uZmlnX3NkcCwKPiArCQkuc2V0X2hlYWRlciA9IGRwX2NhdGFsb2dfYXVkaW9fc2V0X2hl YWRlciwKPiArCQkuZ2V0X2hlYWRlciA9IGRwX2NhdGFsb2dfYXVkaW9fZ2V0X2hlYWRlciwKPiAr CQkuc2FmZV90b19leGl0X2xldmVsID0gZHBfY2F0YWxvZ19hdWRpb19zYWZlX3RvX2V4aXRfbGV2 ZWwsCj4gKwl9Owo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgcGFuZWwgPSB7Cj4gKwkJLnRp bWluZ19jZmcgPSBkcF9jYXRhbG9nX3BhbmVsX3RpbWluZ19jZmcsCj4gKwkJLnRwZ19jb25maWcg PSBkcF9jYXRhbG9nX3BhbmVsX3RwZ19jZmcsCj4gKwl9Owo+ICsKPiArCWlmICghaW8pIHsKPiAr CQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3Rv IGVycm9yOwo+ICsJfQo+ICsKPiArCWNhdGFsb2cgID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCpjYXRhbG9nKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWNhdGFsb2cpIHsKPiArCQlyYyA9IC1F Tk9NRU07Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiArCj4gKwljYXRhbG9nLT5kZXYgPSBkZXY7 Cj4gKwljYXRhbG9nLT5pbyA9IGlvOwo+ICsKPiArCWRwX2NhdGFsb2cgPSAmY2F0YWxvZy0+ZHBf Y2F0YWxvZzsKPiArCj4gKwlkcF9jYXRhbG9nLT5hdXggICA9IGF1eDsKPiArCWRwX2NhdGFsb2ct PmN0cmwgID0gY3RybDsKPiArCWRwX2NhdGFsb2ctPmF1ZGlvID0gYXVkaW87Cj4gKwlkcF9jYXRh bG9nLT5wYW5lbCA9IHBhbmVsOwo+ICsKPiArCXJldHVybiBkcF9jYXRhbG9nOwo+ICtlcnJvcjoK PiArCXJldHVybiBFUlJfUFRSKHJjKTsKPiArfQo+ICsKPiArdm9pZCBkcF9jYXRhbG9nX3B1dChz dHJ1Y3QgZHBfY2F0YWxvZyAqZHBfY2F0YWxvZykKPiArewo+ICsJc3RydWN0IGRwX2NhdGFsb2df cHJpdmF0ZSAqY2F0YWxvZzsKPiArCj4gKwlpZiAoIWRwX2NhdGFsb2cpCj4gKwkJcmV0dXJuOwo+ ICsKPiArCWNhdGFsb2cgPSBjb250YWluZXJfb2YoZHBfY2F0YWxvZywgc3RydWN0IGRwX2NhdGFs b2dfcHJpdmF0ZSwKPiArCQkJCWRwX2NhdGFsb2cpOwo+ICsKPiArCWRldm1fa2ZyZWUoY2F0YWxv Zy0+ZGV2LCBjYXRhbG9nKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX2NhdGFsb2cuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi41ODk1MWRmCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oCj4gQEAgLTAs MCArMSwxNDQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhbmQKPiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfRFBfQ0FUQUxPR19IXwo+ICsjZGVm aW5lIF9EUF9DQVRBTE9HX0hfCj4gKwo+ICsjaW5jbHVkZSAiZHBfcGFyc2VyLmgiCj4gKwo+ICsv KiBpbnRlcnJ1cHRzICovCj4gKyNkZWZpbmUgRFBfSU5UUl9IUEQJCUJJVCgwKQo+ICsjZGVmaW5l IERQX0lOVFJfQVVYX0kyQ19ET05FCUJJVCgzKQo+ICsjZGVmaW5lIERQX0lOVFJfV1JPTkdfQURE UglCSVQoNikKPiArI2RlZmluZSBEUF9JTlRSX1RJTUVPVVQJCUJJVCg5KQo+ICsjZGVmaW5lIERQ X0lOVFJfTkFDS19ERUZFUglCSVQoMTIpCj4gKyNkZWZpbmUgRFBfSU5UUl9XUk9OR19EQVRBX0NO VAlCSVQoMTUpCj4gKyNkZWZpbmUgRFBfSU5UUl9JMkNfTkFDSwlCSVQoMTgpCj4gKyNkZWZpbmUg RFBfSU5UUl9JMkNfREVGRVIJQklUKDIxKQo+ICsjZGVmaW5lIERQX0lOVFJfUExMX1VOTE9DS0VE CUJJVCgyNCkKPiArI2RlZmluZSBEUF9JTlRSX0FVWF9FUlJPUglCSVQoMjcpCj4gKwo+ICsjZGVm aW5lIERQX0lOVFJfUkVBRFlfRk9SX1ZJREVPCQlCSVQoMCkKPiArI2RlZmluZSBEUF9JTlRSX0lE TEVfUEFUVEVSTl9TRU5UCUJJVCgzKQo+ICsjZGVmaW5lIERQX0lOVFJfRlJBTUVfRU5ECQlCSVQo NikKPiArI2RlZmluZSBEUF9JTlRSX0NSQ19VUERBVEVECQlCSVQoOSkKPiArCj4gK3N0cnVjdCBk cF9jYXRhbG9nX2F1eCB7Cj4gKwl1MzIgZGF0YTsKPiArCXUzMiBpc3I7Cj4gKwo+ICsJdTMyICgq cmVhZF9kYXRhKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCk7Cj4gKwlpbnQgKCp3cml0ZV9k YXRhKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCk7Cj4gKwlpbnQgKCp3cml0ZV90cmFucyko c3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpOwo+ICsJaW50ICgqY2xlYXJfdHJhbnMpKHN0cnVj dCBkcF9jYXRhbG9nX2F1eCAqYXV4LCBib29sIHJlYWQpOwo+ICsJdm9pZCAoKnJlc2V0KShzdHJ1 Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCk7Cj4gKwl2b2lkICgqZW5hYmxlKShzdHJ1Y3QgZHBfY2F0 YWxvZ19hdXggKmF1eCwgYm9vbCBlbmFibGUpOwo+ICsJdm9pZCAoKnVwZGF0ZV9hdXhfY2ZnKShz dHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwKPiArCQlzdHJ1Y3QgZHBfYXV4X2NmZyAqY2ZnLCBl bnVtIGRwX3BoeV9hdXhfY29uZmlnX3R5cGUgdHlwZSk7Cj4gKwl2b2lkICgqc2V0dXApKHN0cnVj dCBkcF9jYXRhbG9nX2F1eCAqYXV4LAo+ICsJCQlzdHJ1Y3QgZHBfYXV4X2NmZyAqYXV4X2NmZyk7 Cj4gKwl2b2lkICgqZ2V0X2lycSkoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsIGJvb2wgY21k X2J1c3kpOwo+ICt9Owo+ICsKPiArc3RydWN0IGRwX2NhdGFsb2dfY3RybCB7Cj4gKwl1MzIgZHBf dHU7Cj4gKwl1MzIgdmFsaWRfYm91bmRhcnk7Cj4gKwl1MzIgdmFsaWRfYm91bmRhcnkyOwo+ICsJ dTMyIGlzcjsKPiArCj4gKwl2b2lkICgqc3RhdGVfY3RybCkoc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAqY3RybCwgdTMyIHN0YXRlKTsKPiArCXZvaWQgKCpjb25maWdfY3RybCkoc3RydWN0IGRwX2Nh dGFsb2dfY3RybCAqY3RybCwgdTMyIGNvbmZpZyk7Cj4gKwl2b2lkICgqbGFuZV9tYXBwaW5nKShz dHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKTsKPiArCXZvaWQgKCptYWlubGlua19jdHJsKShz dHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCBib29sIGVuYWJsZSk7Cj4gKwl2b2lkICgqY29u ZmlnX21pc2MpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIHUzMiBjYywgdTMyIHRiKTsK PiArCXZvaWQgKCpjb25maWdfbXNhKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIg cmF0ZSwKPiArCQkJCXUzMiBzdHJlYW1fcmF0ZV9raHosIGJvb2wgZml4ZWRfbnZpZCk7Cj4gKwl2 b2lkICgqc2V0X3BhdHRlcm4pKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIHUzMiBwYXR0 ZXJuKTsKPiArCXZvaWQgKCpyZXNldCkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7Cj4g Kwl2b2lkICgqdXNiX3Jlc2V0KShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCBib29sIGZs aXApOwo+ICsJYm9vbCAoKm1haW5saW5rX3JlYWR5KShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpj dHJsKTsKPiArCXZvaWQgKCplbmFibGVfaXJxKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJs LCBib29sIGVuYWJsZSk7Cj4gKwl2b2lkICgqaHBkX2NvbmZpZykoc3RydWN0IGRwX2NhdGFsb2df Y3RybCAqY3RybCwgYm9vbCBlbmFibGUpOwo+ICsJdm9pZCAoKnBoeV9yZXNldCkoc3RydWN0IGRw X2NhdGFsb2dfY3RybCAqY3RybCk7Cj4gKwl2b2lkICgqcGh5X2xhbmVfY2ZnKShzdHJ1Y3QgZHBf Y2F0YWxvZ19jdHJsICpjdHJsLCBib29sIGZsaXBwZWQsCj4gKwkJCQl1OCBsYW5lX2NudCk7Cj4g Kwl2b2lkICgqdXBkYXRlX3Z4X3B4KShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1OCB2 X2xldmVsLAo+ICsJCQkJdTggcF9sZXZlbCk7Cj4gKwl2b2lkICgqZ2V0X2ludGVycnVwdCkoc3Ry dWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7Cj4gKwl2b2lkICgqdXBkYXRlX3RyYW5zZmVyX3Vu aXQpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOwo+ICsJdm9pZCAoKnNlbmRfcGh5X3Bh dHRlcm4pKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCj4gKwkJCXUzMiBwYXR0ZXJuKTsK PiArCXUzMiAoKnJlYWRfcGh5X3BhdHRlcm4pKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwp Owo+ICt9Owo+ICsKPiArZW51bSBkcF9jYXRhbG9nX2F1ZGlvX3NkcF90eXBlIHsKPiArCURQX0FV RElPX1NEUF9TVFJFQU0sCj4gKwlEUF9BVURJT19TRFBfVElNRVNUQU1QLAo+ICsJRFBfQVVESU9f U0RQX0lORk9GUkFNRSwKPiArCURQX0FVRElPX1NEUF9DT1BZTUFOQUdFTUVOVCwKPiArCURQX0FV RElPX1NEUF9JU1JDLAo+ICsJRFBfQVVESU9fU0RQX01BWCwKPiArfTsKPiArCj4gK2VudW0gZHBf Y2F0YWxvZ19hdWRpb19oZWFkZXJfdHlwZSB7Cj4gKwlEUF9BVURJT19TRFBfSEVBREVSXzEsCj4g KwlEUF9BVURJT19TRFBfSEVBREVSXzIsCj4gKwlEUF9BVURJT19TRFBfSEVBREVSXzMsCj4gKwlE UF9BVURJT19TRFBfSEVBREVSX01BWCwKPiArfTsKPiArCj4gK3N0cnVjdCBkcF9jYXRhbG9nX2F1 ZGlvIHsKPiArCWVudW0gZHBfY2F0YWxvZ19hdWRpb19zZHBfdHlwZSBzZHBfdHlwZTsKPiArCWVu dW0gZHBfY2F0YWxvZ19hdWRpb19oZWFkZXJfdHlwZSBzZHBfaGVhZGVyOwo+ICsJdTMyIGRhdGE7 Cj4gKwo+ICsJdm9pZCAoKmluaXQpKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbyk7Cj4g Kwl2b2lkICgqZW5hYmxlKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8pOwo+ICsJdm9p ZCAoKmNvbmZpZ19hY3IpKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbyk7Cj4gKwl2b2lk ICgqY29uZmlnX3NkcCkoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKTsKPiArCXZvaWQg KCpzZXRfaGVhZGVyKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8pOwo+ICsJdm9pZCAo KmdldF9oZWFkZXIpKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbyk7Cj4gKwl2b2lkICgq c2FmZV90b19leGl0X2xldmVsKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8pOwoKTm9u ZSBvZiB0aGVzZSBhcmUgY2FsbGVkPyBTbyBnZXQgcmlkIG9mIHRoaXMgZW50aXJlIHN0cnVjdHVy ZSwgdGhlIGZ1bmN0aW9ucwp0aGF0IGFyZW4ndCBjYWxsZWQsIGFuZCB0aGUgYXVkaW8gZW51bXMg YWJvdmUuCgo+ICt9Owo+ICsKPiArc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgewo+ICsJdTMyIHRv dGFsOwo+ICsJdTMyIHN5bmNfc3RhcnQ7Cj4gKwl1MzIgd2lkdGhfYmxhbmtpbmc7Cj4gKwl1MzIg ZHBfYWN0aXZlOwo+ICsKPiArCS8qIFRQRyAqLwo+ICsJdTMyIGhzeW5jX3BlcmlvZDsKPiArCXUz MiB2c3luY19wZXJpb2Q7Cj4gKwl1MzIgZGlzcGxheV92X3N0YXJ0Owo+ICsJdTMyIGRpc3BsYXlf dl9lbmQ7Cj4gKwl1MzIgdl9zeW5jX3dpZHRoOwo+ICsJdTMyIGhzeW5jX2N0bDsKPiArCXUzMiBk aXNwbGF5X2hjdGw7CgpBbGwgb2YgdGhpcyBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IGF2YWlsYWJs ZSBmcm9tIGRybSBjb3JlLCBzbyBpdCBjYW4gZ28uCgo+ICsKPiArCWludCAoKnRpbWluZ19jZmcp KHN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpwYW5lbCk7Cj4gKwl2b2lkICgqdHBnX2NvbmZpZyko c3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBhbmVsLCBib29sIGVuYWJsZSk7CgpBcyBzdWdnZXN0 ZWQgZWxzZXdoZXJlLCB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIGp1c3QgYmUgY2FsbGVkIGRpcmVj dGx5IHdoZXJldmVyCmFwcGxpY2FibGUuIFNvIHdlIGNhbiBnZXQgcmlkIG9mIHRoaXMgc3RydWN0 LgoKPiArfTsKPiArCj4gK3N0cnVjdCBkcF9jYXRhbG9nIHsKPiArCXN0cnVjdCBkcF9jYXRhbG9n X2F1eCBhdXg7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIGN0cmw7Cj4gKwlzdHJ1Y3QgZHBf Y2F0YWxvZ19hdWRpbyBhdWRpbzsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsIHBhbmVsOwo+ ICt9Owo+ICsKPiArc3RydWN0IGRwX2NhdGFsb2cgKmRwX2NhdGFsb2dfZ2V0KHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRwX2lvICppbyk7Cj4gK3ZvaWQgZHBfY2F0YWxvZ19wdXQoc3RydWN0 IGRwX2NhdGFsb2cgKmNhdGFsb2cpOwoKQXMgbWVudGlvbmVkIGFib3ZlLCBhbGwgb2YgdGhpcyBz aG91bGQgYmUgcmVtb3ZlZC4gV2UgY2FuIGp1c3QgY2FsbCB0aGUKZnVuY3Rpb25zIGRpcmVjdGx5 LgoKPiArCj4gKyNlbmRpZiAvKiBfRFBfQ0FUQUxPR19IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf Y3RybC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4wOGE1MmY1Cj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5jCj4g QEAgLTAsMCArMSwxNDc1IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBU aGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiAr ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNkZWZpbmUgcHJfZm10KGZtdCkJIltk cm0tZHBdICVzOiAiIGZtdCwgX19mdW5jX18KPiArCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5o Pgo+ICsjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgo+ICsjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KPiArCj4gKyNpbmNsdWRlICJkcF9jdHJsLmgiCj4gKwo+ICsjZGVmaW5lIERQX0tIWl9U T19IWiAxMDAwCj4gKwo+ICsjZGVmaW5lIERQX0NUUkxfSU5UUl9SRUFEWV9GT1JfVklERU8gICAg IEJJVCgwKQo+ICsjZGVmaW5lIERQX0NUUkxfSU5UUl9JRExFX1BBVFRFUk5fU0VOVCAgQklUKDMp Cj4gKwo+ICsvKiBkcCBzdGF0ZSBjdHJsICovCj4gKyNkZWZpbmUgU1RfVFJBSU5fUEFUVEVSTl8x CQlCSVQoMCkKPiArI2RlZmluZSBTVF9UUkFJTl9QQVRURVJOXzIJCUJJVCgxKQo+ICsjZGVmaW5l IFNUX1RSQUlOX1BBVFRFUk5fMwkJQklUKDIpCj4gKyNkZWZpbmUgU1RfVFJBSU5fUEFUVEVSTl80 CQlCSVQoMykKPiArI2RlZmluZSBTVF9TWU1CT0xfRVJSX1JBVEVfTUVBU1VSRU1FTlQJQklUKDQp Cj4gKyNkZWZpbmUgU1RfUFJCUzcJCQlCSVQoNSkKPiArI2RlZmluZSBTVF9DVVNUT01fODBfQklU X1BBVFRFUk4JQklUKDYpCj4gKyNkZWZpbmUgU1RfU0VORF9WSURFTwkJCUJJVCg3KQo+ICsjZGVm aW5lIFNUX1BVU0hfSURMRQkJCUJJVCg4KQoKSSdkIGxpa2UgdG8gc2VlIHRoZXNlIGRlZmluZWQg d2l0aCBEUF9TVEFURV9DVFJMIChhbmQgcy9TVC9EUF9TVEFURV9DVFJMLykuCgo+ICsKPiArI2Rl ZmluZSBNUl9MSU5LX1RSQUlOSU5HMSAgMHg4Cj4gKyNkZWZpbmUgTVJfTElOS19TWU1CT0xfRVJN IDB4ODAKPiArI2RlZmluZSBNUl9MSU5LX1BSQlM3IDB4MTAwCj4gKyNkZWZpbmUgTVJfTElOS19D VVNUT004MCAweDIwMAo+ICsKPiArc3RydWN0IGRwX3ZjX3R1X21hcHBpbmdfdGFibGUgewo+ICsJ dTMyIHZpYzsKPiArCXU4IGxhbmVzOwo+ICsJdTggbHJhdGU7IC8qIERQX0xJTktfUkFURSAtPiAx NjIoNiksIDI3MCgxMCksIDU0MCgyMCksIDgxMCAoMzApICovCj4gKwl1OCBicHA7Cj4gKwl1OCB2 YWxpZF9ib3VuZGFyeV9saW5rOwo+ICsJdTE2IGRlbGF5X3N0YXJ0X2xpbms7Cj4gKwlib29sIGJv dW5kYXJ5X21vZGVyYXRpb25fZW47Cj4gKwl1OCB2YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rOwo+ ICsJdTggdXBwZXJfYm91bmRhcnlfY291bnQ7Cj4gKwl1OCBsb3dlcl9ib3VuZGFyeV9jb3VudDsK PiArCXU4IHR1X3NpemVfbWludXMxOwoKUGxlYXNlIGNoZWNrIHRoaXMgc3RydWN0IGZvciB1bnVz ZWQgbWVtYmVycywgdGhlcmUgYXJlIGF0IGxlYXN0IGEgY291cGxlLgoKPiArfTsKPiArCj4gK3N0 cnVjdCBkcF9jdHJsX3ByaXZhdGUgewo+ICsJc3RydWN0IGRwX2N0cmwgZHBfY3RybDsKPiArCj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgZHBfYXV4ICphdXg7Cj4gKwlzdHJ1Y3Qg ZHBfcGFuZWwgKnBhbmVsOwo+ICsJc3RydWN0IGRwX2xpbmsgKmxpbms7Cj4gKwlzdHJ1Y3QgZHBf cG93ZXIgKnBvd2VyOwo+ICsJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwo+ICsJc3RydWN0IGRw X2NhdGFsb2dfY3RybCAqY2F0YWxvZzsKCk9uY2UgeW91IHJlbW92ZSBzdHJ1Y3QgZHBfY3RybCBh bmQgY2FsbCB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5LCBJIHN1c3BlY3QgeW91CmNhbiBnZXQgcmlk IG9mIGFsbCBvZiB0aGVzZS4KCj4gKwo+ICsJc3RydWN0IGNvbXBsZXRpb24gaWRsZV9jb21wOwo+ ICsJc3RydWN0IGNvbXBsZXRpb24gdmlkZW9fY29tcDsKPiArCj4gKwlib29sIG9yaWVudGF0aW9u Owo+ICsJYXRvbWljX3QgYWJvcnRlZDsKPiArCj4gKwl1MzIgcGl4ZWxfcmF0ZTsKPiArCXUzMiB2 aWM7CgondTMyIHZpYycgc2hvd3MgdXAgaW4gMyBwbGFjZXMgaW4gdGhpcyBkcml2ZXIsIGJ1dCB0 aGVyZSBpcyBub3Qgb25lIHVzZSBvZiBhbnkKdmljIDopIFBsZWFzZSByZW1vdmUgZnJvbSBoZXJl IGFuZCBlbHNld2hlcmUuCgo+ICt9Owo+ICsKPiArZW51bSBub3RpZmljYXRpb25fc3RhdHVzIHsK PiArCU5PVElGWV9VTktOT1dOLAo+ICsJTk9USUZZX0NPTk5FQ1QsCj4gKwlOT1RJRllfRElTQ09O TkVDVCwKPiArCU5PVElGWV9DT05ORUNUX0lSUV9IUEQsCj4gKwlOT1RJRllfRElTQ09OTkVDVF9J UlFfSFBELAo+ICt9OwoKVW51c2VkLCBwbGVhc2UgcmVtb3ZlLgoKPiArCj4gK3N0YXRpYyB2b2lk IGRwX2N0cmxfaWRsZV9wYXR0ZXJuc19zZW50KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwp Cj4gK3sKPiArCXByX2RlYnVnKCJpZGxlX3BhdHRlcm5zX3NlbnRcbiIpOwo+ICsJY29tcGxldGUo JmN0cmwtPmlkbGVfY29tcCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxfdmlkZW9f cmVhZHkoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPiArewo+ICsJcHJfZGVidWcoImRw X3ZpZGVvX3JlYWR5XG4iKTsKPiArCWNvbXBsZXRlKCZjdHJsLT52aWRlb19jb21wKTsKPiArfQoK VGhlc2UgZnVuY3Rpb25zIGRvbid0IHByb3ZpZGUgdmFsdWUsIHBsZWFzZSByZW1vdmUgYW5kIGp1 c3QgY2FsbCBjb21wbGV0ZSgpCmRpcmVjdGx5LgoKPiArCj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxf YWJvcnQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4gK3sKPiArCXN0cnVjdCBkcF9jdHJsX3By aXZhdGUgKmN0cmw7Cj4gKwo+ICsJaWYgKCFkcF9jdHJsKSB7Cj4gKwkJcHJfZXJyKCJJbnZhbGlk IGlucHV0IGRhdGFcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwljdHJsID0gY29udGFp bmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwoKSkZZSSwg dGhpcyBpcyBzcHJpbmtsZWQgZXZlcnl3aGVyZSwgd291bGQgYmUgYSBnb29kIGNhbmRpZGF0ZSBm b3IgYW4gaW5saW5lCmZ1bmN0aW9uLiBTaW5jZSBkcF9jdHJsIGNhbiBiZSByZW1vdmVkLCBpdCdz IGtpbmQgb2YgYSBtb290IHBvaW50IG5vdy4KCj4gKwo+ICsJYXRvbWljX3NldCgmY3RybC0+YWJv cnRlZCwgMSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxfc3RhdGVfY3RybChzdHJ1 Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsLCB1MzIgc3RhdGUpCj4gK3sKPiArCWN0cmwtPmNhdGFs b2ctPnN0YXRlX2N0cmwoY3RybC0+Y2F0YWxvZywgc3RhdGUpOwoKTm8gbmVlZCB0byB3cmFwIHRo aXMgaW4gYSBmdW5jdGlvbgoKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY3RybF9wdXNoX2lk bGUoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4gK3sKPiArCWludCBjb25zdCBpZGxlX3BhdHRl cm5fY29tcGxldGlvbl90aW1lb3V0X21zID0gMyAqIEhaIC8gMTAwOwoKVGhpcyBzaG91bGQgYmUg I2RlZmluZSdkIG91dHNpZGUgb2YgdGhlIGZ1bmN0aW9uaW5zdGVhZC4gQWxzbywgd2h5IHRoZSAn X21zXycKc3VmZml4PyBUaGUgdW5pdHMgYXJlIGluIGppZmZpZXMuCgpJIHRoaW5rIHNvbWV0aGlu ZyBsaWtlCgojZGVmaW5lIElETEVfUEFUVEVSTl9DT01QTEVUSU9OX1RJTUVPVVRfSklGRklFUyAo MzAgKiBIWiAvIDEwMDApIC8qIDMwIG1zICovCgp3b3VsZCBiZSBjbGVhcmVyLgoKPiArCXN0cnVj dCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7Cj4gKwo+ICsJaWYgKCFkcF9jdHJsKSB7Cj4gKwkJcHJf ZXJyKCJJbnZhbGlkIGlucHV0IGRhdGFcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlj dHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0 cmwpOwo+ICsKPiArCXJlaW5pdF9jb21wbGV0aW9uKCZjdHJsLT5pZGxlX2NvbXApOwoKVGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIGJ1bmNoIG9mIHBsYWNlcywgYW5kIGlkbGVfY29tcCBp cyBhbHNvIHVzZWQgaW4gYQpidW5jaCBvZiBwbGFjZXMuIEFyZSB5b3UgY2VydGFpbiB0aGlzIGlz IHRocmVhZC1zYWZlIGlmIHlvdSBoYXZlIGNvbmN1cnJlbnQKY2FsbGVycyBvciB1c2VycyBvZiBp ZGxlX2NvbXA/Cgo+ICsJZHBfY3RybF9zdGF0ZV9jdHJsKGN0cmwsIFNUX1BVU0hfSURMRSk7Cj4g Kwo+ICsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmN0cmwtPmlkbGVfY29tcCwK PiArCQkJaWRsZV9wYXR0ZXJuX2NvbXBsZXRpb25fdGltZW91dF9tcykpCj4gKwkJcHJfd2Fybigi UFVTSF9JRExFIHBhdHRlcm4gdGltZWRvdXRcbiIpOwoKUmV0dXJuIGFuIGVycm9yPwoKPiArCj4g Kwlwcl9kZWJ1ZygibWFpbmxpbmsgb2ZmIGRvbmVcbiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBkcF9jdHJsX2NvbmZpZ19jdHJsKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCj4gK3sK PiArCXUzMiBjb25maWcgPSAwLCB0YmQ7Cj4gKwl1OCAqZHBjZCA9IGN0cmwtPnBhbmVsLT5kcGNk Owo+ICsKPiArCWNvbmZpZyB8PSAoMiA8PCAxMyk7IC8qIERlZmF1bHQtPiBMU0NMSyBESVY6IDEv NCBMQ0xLICAqLwoKI2RlZmluZSB2YWx1ZQoKPiArCWNvbmZpZyB8PSAoMCA8PCAxMSk7IC8qIFJH QiAqLwoKVGhpcyBpcyBhIG5vLW9wLCBjYW4gYmUgcmVtb3ZlZAoKPiArCj4gKwkvKiBTY3JhbWJs ZXIgcmVzZXQgZW5hYmxlICovCj4gKwlpZiAoZHBjZFtEUF9FRFBfQ09ORklHVVJBVElPTl9DQVBd ICYgRFBfQUxURVJOQVRFX1NDUkFNQkxFUl9SRVNFVF9DQVApCj4gKwkJY29uZmlnIHw9ICgxIDw8 IDEwKTsKPiArCj4gKwl0YmQgPSBjdHJsLT5saW5rLT5nZXRfdGVzdF9iaXRzX2RlcHRoKGN0cmwt PmxpbmssCj4gKwkJCWN0cmwtPnBhbmVsLT5waW5mby5icHApOwo+ICsKPiArCWlmICh0YmQgPT0g RFBfVEVTVF9CSVRfREVQVEhfVU5LTk9XTikKClNob3VsZCB3ZSBwcmludCBhIGRlYnVnIG1lc3Nh Z2UgaGVyZT8KCj4gKwkJdGJkID0gRFBfVEVTVF9CSVRfREVQVEhfODsKPiArCj4gKwljb25maWcg fD0gdGJkIDw8IDg7Cj4gKwo+ICsJLyogTnVtIG9mIExhbmVzICovCj4gKwljb25maWcgfD0gKChj dHJsLT5saW5rLT5saW5rX3BhcmFtcy5sYW5lX2NvdW50IC0gMSkgPDwgNCk7CgpUaGVzZSBzaGlm dCB2YWx1ZXMgc2hvdWxkIGJlICNkZWZpbmVkCgo+ICsKPiArCWlmIChkcm1fZHBfZW5oYW5jZWRf ZnJhbWVfY2FwKGRwY2QpKQo+ICsJCWNvbmZpZyB8PSAweDQwOwoKI2RlZmluZSAweDQwCgo+ICsK PiArCWNvbmZpZyB8PSAweDA0OyAvKiBwcm9ncmVzc2l2ZSB2aWRlbyAqLwo+ICsKPiArCWNvbmZp ZyB8PSAweDAzOwkvKiBzeWNuIGNsb2NrICYgc3RhdGljIE12aWQgKi8KCkFuZCB0aGVzZSwgcGx1 cyBzL3N5Y24vc3luYy8KCj4gKwo+ICsJY3RybC0+Y2F0YWxvZy0+Y29uZmlnX2N0cmwoY3RybC0+ Y2F0YWxvZywgY29uZmlnKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRwX2N0cmxfY29uZmlndXJl X3NvdXJjZV9wYXJhbXMoKSAtIGNvbmZpZ3VyZXMgRFAgdHJhbnNtaXR0ZXIgc291cmNlIHBhcmFt cwo+ICsgKiBAY3RybDogRGlzcGxheSBQb3J0IERyaXZlciBkYXRhCj4gKyAqCj4gKyAqIENvbmZp Z3VyZXMgdGhlIERQIHRyYW5zbWl0dGVyIHNvdXJjZSBwYXJhbXMgaW5jbHVkaW5nIGRldGFpbHMg c3VjaCBhcyBsYW5lCj4gKyAqIGNvbmZpZ3VyYXRpb24sIG91dHB1dCBmb3JtYXQgYW5kIHNpbmsv cGFuZWwgdGltaW5nIGluZm9ybWF0aW9uLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgZHBfY3RybF9j b25maWd1cmVfc291cmNlX3BhcmFtcyhzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7 Cj4gKwl1MzIgY2MsIHRiOwo+ICsKPiArCWN0cmwtPmNhdGFsb2ctPmxhbmVfbWFwcGluZyhjdHJs LT5jYXRhbG9nKTsKPiArCWN0cmwtPmNhdGFsb2ctPm1haW5saW5rX2N0cmwoY3RybC0+Y2F0YWxv ZywgdHJ1ZSk7CgpXZSBnbyB0aHJvdWdoIGN0cmwtPmNhdGFsb2ctPmNhbGxiYWNrX2hvb2sgdG8g Y2FsbCBhIGZ1bmN0aW9uIHRoYXQgaXMgc3BlY2lmaWMKdG8gY3RybCBhbmQgb25seSBjYWxsZWQg aW4gdGhpcyBmaWxlLiBJdCBjb3VsZCBlYXNpbHkganVzdCBiZSBhIHN0YXRpYyBmdW5jdGlvbgp3 aXRob3V0IGhhdmluZyB0byBnbyB0aHJvdWdoIDIgc3RydWN0cyBhbmQgYSBjYWxsYmFjayBob29r LgoKPiArCj4gKwlkcF9jdHJsX2NvbmZpZ19jdHJsKGN0cmwpOwo+ICsKPiArCXRiID0gY3RybC0+ bGluay0+Z2V0X3Rlc3RfYml0c19kZXB0aChjdHJsLT5saW5rLAo+ICsJCWN0cmwtPnBhbmVsLT5w aW5mby5icHApOwo+ICsJY2MgPSBjdHJsLT5saW5rLT5nZXRfY29sb3JpbWV0cnlfY29uZmlnKGN0 cmwtPmxpbmspOwo+ICsJY3RybC0+Y2F0YWxvZy0+Y29uZmlnX21pc2MoY3RybC0+Y2F0YWxvZywg Y2MsIHRiKTsKClNhbWUgY29tbWVudHMgd2l0aCB0aGVzZSBob29rcywgdGhleSdyZSBvbmx5IGNh bGxlZCBmcm9tIHRoaXMgZmlsZS4gSSdsbCBzdG9wCmhhcnBpbmcgb24gdGhpcywgYnV0IGNvdWxk IHdlIHBsZWFzZSByZW1vdmUgdGhlIGxheWVycyBvZiBpbmRpcmVjdGlvbiBhbmQganVzdAplbWJl ZCBhbmQgY2FsbCBmdW5jdGlvbnMgYXMgYXBwcm9wcmlhdGU/Cgo+ICsJY3RybC0+cGFuZWwtPnRp bWluZ19jZmcoY3RybC0+cGFuZWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX2dl dF9leHRyYV9yZXFfYnl0ZXModTY0IHJlc3VsdF92YWxpZCwKPiArCQkJCQlpbnQgdmFsaWRfYmRh cnlfbGluaywKPiArCQkJCQl1NjQgdmFsdWUxLCB1NjQgdmFsdWUyLAo+ICsJCQkJCWJvb2wgKm5l Z2F0aXZlLCB1NjQgKnJlc3VsdCwKPiArCQkJCQl1NjQgY29tcGFyZSkKPiArewo+ICsJKm5lZ2F0 aXZlID0gZmFsc2U7Cj4gKwlpZiAocmVzdWx0X3ZhbGlkID49IGNvbXBhcmUpIHsKPiArCQlpZiAo dmFsaWRfYmRhcnlfbGluawo+ICsJCQkJPj0gY29tcGFyZSkKPiArCQkJKnJlc3VsdCA9IHZhbHVl MSArIHZhbHVlMjsKPiArCQllbHNlIHsKPiArCQkJaWYgKHZhbHVlMSA8IHZhbHVlMikKPiArCQkJ CSpuZWdhdGl2ZSA9IHRydWU7Cj4gKwkJCSpyZXN1bHQgPSAodmFsdWUxID49IHZhbHVlMikgPwo+ ICsJCQkJKHZhbHVlMSAtIHZhbHVlMikgOiAodmFsdWUyIC0gdmFsdWUxKTsKPiArCQl9Cj4gKwl9 IGVsc2Ugewo+ICsJCWlmICh2YWxpZF9iZGFyeV9saW5rCj4gKwkJCQk+PSBjb21wYXJlKSB7Cj4g KwkJCWlmICh2YWx1ZTEgPj0gdmFsdWUyKQo+ICsJCQkJKm5lZ2F0aXZlID0gdHJ1ZTsKPiArCQkJ KnJlc3VsdCA9ICh2YWx1ZTEgPj0gdmFsdWUyKSA/Cj4gKwkJCQkodmFsdWUxIC0gdmFsdWUyKSA6 ICh2YWx1ZTIgLSB2YWx1ZTEpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCSpyZXN1bHQgPSB2YWx1ZTEg KyB2YWx1ZTI7Cj4gKwkJCSpuZWdhdGl2ZSA9IHRydWU7Cj4gKwkJfQo+ICsJfQoKSSB0aGluayB0 aGlzIGNhbiBiZSBzaW1wbGlmaWVkIHRvIHRoZSBmb2xsb3dpbmcsIGl0J3Mgc3RpbGwgc3VwZXIg aGFyZCB0bwpmb2xsb3csIGJ1dCBJJ20gbm90IHN1cmUgaWYgdGhhdCBjYW4gYmUgaGVscGVkLgoK ICAgICAgICBib29sIHJlc3VsdF9iaWdnZXIgPSByZXN1bHRfdmFsaWQgPj0gY29tcGFyZTsKICAg ICAgICBib29sIHZhbGlkX2JkYXJ5X2JpZ2dlciA9IHZhbGlkX2JkYXJ5X2xpbmsgPj0gY29tcGFy ZTsKCglpZiAocmVzdWx0X2JpZ2dlciAmJiB2YWxpZF9iZGFyeV9iaWdnZXIgfHwKICAgICAgICAg ICAgIXJlc3VsdF9iaWdnZXIgJiYgIXZhbGlkX2JkYXJ5X2JpZ2dlcikgewogICAgICAgICAgICAg ICAgKm5lZ2F0aXZlID0gIXZhbGlkX2JkYXJ5X2JpZ2dlcjsKICAgICAgICAgICAgICAgIHJldHVy biB2YWx1ZTEgKyB2YWx1ZTI7CiAgICAgICAgfQoKICAgICAgICAqbmVnYXRpdmUgPSAocmVzdWx0 X2JpZ2dlciAmJiAhdmFsaWRfYmRhcnlfYmlnZ2VyICYmIHZhbHVlMSA8IHZhbHVlMikgfHwKICAg ICAgICAgICAgICAgICAgICAoIXJlc3VsdF9iaWdnZXIgJiYgdmFsaWRfYmRhcnlfYmlnZ2VyICYm IHZhbHVlMSA+PSB2YWx1ZTIpOwogICAgICAgIHJldHVybiBtYXgodmFsdWUxLCB2YWx1ZTIpIC0g bWluKHZhbHVlMSwgdmFsdWUyKTsKCkkgZG9uJ3Qga25vdy4gVGhlIG1vcmUgSSBzdGFyZSBhdCB0 aGlzIHRoZSBsZXNzIGNvbnZpbmNlZCBJIGJlY29tZSB0aGF0IGl0J3MKYmV0dGVyLiBTbyB0YWtl IGl0IG9yIGxlYXZlIGl0LiBBdCB0aGUgdmVyeSBsZWFzdCB5b3UgY2FuIGNvbGxhcHNlIHRoZQoK aWYgKGNvbmQpCiAgICAgICAgKm5lZ2F0aXZlID0gdHJ1ZTsKCnRvCgoqbmVnYXRpdmUgPSBjb25k OwoKYW5kIGRvIHRoZSBtYXgodix2KSAtIG1pbih2LHYpIHRyaWNrIHRvIHNoYXZlIG9mZiBzb21l IG9mIHRoZSBjb25kaXRpb25hbHMgaW4KdGhlIG9yaWdpbmFsLgoKCj4gK30KPiArCj4gK3N0YXRp YyB1NjQgcm91bmR1cF91NjQodTY0IHgsIHU2NCB5KQo+ICt7Cj4gKwl4ICs9ICh5IC0gMSk7Cj4g KwlyZXR1cm4gKGRpdjY0X3VsKHgsIHkpICogeSk7Cj4gK30KClBsZWFzZSByZXBsYWNlIGFsbCB1 c2FnZSB3aXRoIERJVl9ST1VORF9VUF9VTEwKCj4gKwo+ICtzdGF0aWMgdTY0IHJvdW5kZG93bl91 NjQodTY0IHgsIHU2NCB5KQo+ICt7Cj4gKwl1NjQgcmVtOwo+ICsKPiArCWRpdjY0X3U2NF9yZW0o eCwgeSwgJnJlbSk7Cj4gKwlyZXR1cm4gKHggLSByZW0pOwo+ICt9CgpQbGVhc2UgcmVwbGFjZSBh bGwgdXNhZ2Ugd2l0aCBESVZfUk9VTkRfRE9XTl9VTEwKCj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9j dHJsX2NhbGNfdHVfcGFyYW1ldGVycyhzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsLAo+ICsJ CQkJICAgICAgIHN0cnVjdCBkcF92Y190dV9tYXBwaW5nX3RhYmxlICp0dV90YWJsZSkKPiArewo+ ICsJdTMyIG11bHRpcGxpZXIgPSAxMDAwMDAwOwo+ICsJdTY0IHBjbGssIGxjbGs7Cj4gKwl1OCBi cHAsIGxuX2NudDsKPiArCWludCBydW5faWR4ID0gMDsKPiArCXUzMiBsd2lkdGgsIGhfYmxhbms7 Cj4gKwl1MzIgZmlmb19lbXB0eSA9IDA7Cj4gKwl1MzIgcmF0aW9fc2NhbGUgPSAxMDAxOwo+ICsJ dTY0IHRlbXAsIHJhdGlvLCBvcmlnaW5hbF9yYXRpbzsKPiArCXU2NCB0ZW1wMiwgcmVtaW5kZXI7 Cj4gKwl1NjQgdGVtcDMsIHRlbXA0LCByZXN1bHQgPSAwOwo+ICsKPiArCXU2NCBlcnIgPSBtdWx0 aXBsaWVyOwo+ICsJdTY0IG5fZXJyID0gMCwgbl9uX2VyciA9IDA7Cj4gKwlib29sIG5fZXJyX25l Zywgbm5fZXJyX25lZzsKPiArCXU4IGhibGFua19tYXJnaW4gPSAxNjsKPiArCj4gKwl1OCB0dV9z aXplLCB0dV9zaXplX2Rlc2lyZWQgPSAwLCB0dV9zaXplX21pbnVzMTsKPiArCWludCB2YWxpZF9i b3VuZGFyeV9saW5rOwo+ICsJdTY0IHJlc3VsdGluZ192YWxpZDsKPiArCXU2NCB0b3RhbF92YWxp ZDsKPiArCXU2NCBlZmZlY3RpdmVfdmFsaWQ7Cj4gKwl1NjQgZWZmZWN0aXZlX3ZhbGlkX3JlY29y ZGVkOwo+ICsJaW50IG5fdHVzOwo+ICsJaW50IG5fdHVzX3Blcl9sYW5lOwo+ICsJaW50IHBhaXJl ZF90dXM7Cj4gKwlpbnQgcmVtYWluZGVyX3R1czsKPiArCWludCByZW1haW5kZXJfdHVzX3VwcGVy LCByZW1haW5kZXJfdHVzX2xvd2VyOwo+ICsJaW50IGV4dHJhX2J5dGVzOwo+ICsJaW50IGZpbGxl cl9zaXplOwo+ICsJaW50IGRlbGF5X3N0YXJ0X2xpbms7Cj4gKwlpbnQgYm91bmRhcnlfbW9kZXJh dGlvbl9lbiA9IDA7Cj4gKwlpbnQgdXBwZXJfYmRyeV9jbnQgPSAwOwo+ICsJaW50IGxvd2VyX2Jk cnlfY250ID0gMDsKPiArCWludCBpX3VwcGVyX2JkcnlfY250ID0gMDsKPiArCWludCBpX2xvd2Vy X2JkcnlfY250ID0gMDsKPiArCWludCB2YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rID0gMDsKPiAr CWludCBldmVuX2Rpc3RyaWJ1dGlvbl9iZiA9IDA7Cj4gKwlpbnQgZXZlbl9kaXN0cmlidXRpb25f bGVnYWN5ID0gMDsKPiArCWludCBldmVuX2Rpc3RyaWJ1dGlvbiA9IDA7Cj4gKwlpbnQgbWluX2hi bGFuayA9IDA7Cj4gKwlpbnQgZXh0cmFfcGNsa19jeWNsZXM7Cj4gKwl1OCBleHRyYV9wY2xrX2N5 Y2xlX2RlbGF5ID0gNDsKPiArCWludCBleHRyYV9wY2xrX2N5Y2xlc19pbl9saW5rX2NsazsKPiAr CXU2NCByYXRpb19ieV90dTsKPiArCXU2NCBhdmVyYWdlX3ZhbGlkMjsKPiArCXU2NCBleHRyYV9i dWZmZXJfbWFyZ2luOwo+ICsJaW50IG5ld192YWxpZF9ib3VuZGFyeV9saW5rOwo+ICsKPiArCXU2 NCByZXN1bHRpbmdfdmFsaWRfdG1wOwo+ICsJdTY0IHJhdGlvX2J5X3R1X3RtcDsKPiArCWludCBu X3R1c190bXA7Cj4gKwlpbnQgZXh0cmFfcGNsa19jeWNsZXNfdG1wOwo+ICsJaW50IGV4dHJhX3Bj bGtfY3ljbGVzX2luX2xjbGtfdG1wOwo+ICsJaW50IGV4dHJhX3JlcV9ieXRlc19uZXdfdG1wOwo+ ICsJaW50IGZpbGxlcl9zaXplX3RtcDsKPiArCWludCBsb3dlcl9maWxsZXJfc2l6ZV90bXA7Cj4g KwlpbnQgZGVsYXlfc3RhcnRfbGlua190bXA7Cj4gKwlpbnQgbWluX2hibGFua190bXAgPSAwOwo+ ICsJYm9vbCBleHRyYV9yZXFfYnl0ZXNfaXNfbmVnID0gZmFsc2U7Cj4gKwlzdHJ1Y3QgZHBfcGFu ZWxfaW5mbyAqcGluZm8gPSAmY3RybC0+cGFuZWwtPnBpbmZvOwo+ICsKPiArCXU4IGRwX2JydXRl X2ZvcmNlID0gMTsKPiArCXU2NCBicnV0ZV9mb3JjZV90aHJlc2hvbGQgPSAxMDsKPiArCXU2NCBk aWZmX2FiczsKCgo3NiBzdGFjayB2YXJzIGFuZCB+NDUwIGxpbmVzIG11c3QgYmUgYSBuZXcgcmVj b3JkIHNvbWV3aGVyZSA6KQoKSSdtIGdvaW5nIHRvIHNraXAgcmV2aWV3aW5nIHRoaXMgZnVuY3Rp b24gYW5kIGxldCB5b3Ugc3BsaXQvc2ltcGxpZnkvcmVkdWNlIGl0LgpQbGVhc2UganVzdCBtYWtl IGl0IG1vcmUgcmVhZGFibGUgKGNvbW1lbnRzLCBkb2NzLCBoZWxwZXIgZnVuY3Rpb25zLCBldGMp LgoKPiArCj4gKwlsbl9jbnQgPSAgY3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudDsK PiArCj4gKwlicHAgPSBwaW5mby0+YnBwOwo+ICsJbHdpZHRoID0gcGluZm8tPmhfYWN0aXZlOwo+ ICsJaF9ibGFuayA9IHBpbmZvLT5oX2JhY2tfcG9yY2ggKyBwaW5mby0+aF9mcm9udF9wb3JjaCAr Cj4gKwkJCQlwaW5mby0+aF9zeW5jX3dpZHRoOwo+ICsJcGNsayA9IHBpbmZvLT5waXhlbF9jbGtf a2h6ICogMTAwMDsKPiArCj4gKwlib3VuZGFyeV9tb2RlcmF0aW9uX2VuID0gMDsKPiArCXVwcGVy X2JkcnlfY250ID0gMDsKPiArCWxvd2VyX2JkcnlfY250ID0gMDsKPiArCWlfdXBwZXJfYmRyeV9j bnQgPSAwOwo+ICsJaV9sb3dlcl9iZHJ5X2NudCA9IDA7Cj4gKwl2YWxpZF9sb3dlcl9ib3VuZGFy eV9saW5rID0gMDsKPiArCWV2ZW5fZGlzdHJpYnV0aW9uX2JmID0gMDsKPiArCWV2ZW5fZGlzdHJp YnV0aW9uX2xlZ2FjeSA9IDA7Cj4gKwlldmVuX2Rpc3RyaWJ1dGlvbiA9IDA7Cj4gKwltaW5faGJs YW5rID0gMDsKPiArCj4gKwlsY2xrID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKAo+ICsJ CWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUpICogRFBfS0haX1RPX0haOwo+ICsKPiAr CXByX2RlYnVnKCJwY2xrPSVsbGQsIGFjdGl2ZV93aWR0aD0lZCwgaF9ibGFuaz0lZFxuIiwKPiAr CQkJCQkJcGNsaywgbHdpZHRoLCBoX2JsYW5rKTsKPiArCXByX2RlYnVnKCJsY2xrID0gJWxsZCwg bG5fY250ID0gJWRcbiIsIGxjbGssIGxuX2NudCk7Cj4gKwlyYXRpbyA9IGRpdjY0X3U2NF9yZW0o cGNsayAqIGJwcCAqIG11bHRpcGxpZXIsCj4gKwkJCQk4ICogbG5fY250ICogbGNsaywgJnJlbWlu ZGVyKTsKPiArCXJhdGlvID0gZGl2NjRfdTY0KChwY2xrICogYnBwICogbXVsdGlwbGllciksICg4 ICogbG5fY250ICogbGNsaykpOwo+ICsJb3JpZ2luYWxfcmF0aW8gPSByYXRpbzsKPiArCj4gKwll eHRyYV9idWZmZXJfbWFyZ2luID0gcm91bmR1cF91NjQoZGl2NjRfdTY0KGV4dHJhX3BjbGtfY3lj bGVfZGVsYXkKPiArCQkJCSogbGNsayAqIG11bHRpcGxpZXIsIHBjbGspLCBtdWx0aXBsaWVyKTsK PiArCWV4dHJhX2J1ZmZlcl9tYXJnaW4gPSBkaXY2NF91NjQoZXh0cmFfYnVmZmVyX21hcmdpbiwg bXVsdGlwbGllcik7Cj4gKwo+ICsJLyogVG8gZGVhbCB3aXRoIGNhc2VzIHdoZXJlIGxpbmVzIGFy ZSBub3QgZGlzdHJpYnV0YWJsZSAqLwo+ICsJaWYgKCgobHdpZHRoICUgbG5fY250KSAhPSAwKSAm JiByYXRpbyA8IG11bHRpcGxpZXIpIHsKPiArCQlyYXRpbyA9IHJhdGlvICogcmF0aW9fc2NhbGU7 Cj4gKwkJcmF0aW8gPSByYXRpbyA8ICgxMDAwICogbXVsdGlwbGllcikKPiArCQkJCT8gcmF0aW8g OiAoMTAwMCAqIG11bHRpcGxpZXIpOwo+ICsJfQo+ICsJcHJfZGVidWcoInJhdGlvID0gJWxsZFxu IiwgcmF0aW8pOwo+ICsKPiArCWZvciAodHVfc2l6ZSA9IDMyOyB0dV9zaXplIDw9IDY0OyB0dV9z aXplKyspIHsKPiArCQl0ZW1wID0gcmF0aW8gKiB0dV9zaXplOwo+ICsJCXRlbXAyID0gKCh0ZW1w IC8gbXVsdGlwbGllcikgKyAxKSAqIG11bHRpcGxpZXI7Cj4gKwkJbl9lcnIgPSByb3VuZHVwX3U2 NCh0ZW1wLCBtdWx0aXBsaWVyKSAtIHRlbXA7Cj4gKwo+ICsJCWlmIChuX2VyciA8IGVycikgewo+ ICsJCQllcnIgPSBuX2VycjsKPiArCQkJdHVfc2l6ZV9kZXNpcmVkID0gdHVfc2l6ZTsKPiArCQl9 Cj4gKwl9Cj4gKwlwcl9kZWJ1ZygiSW5mbzogdHVfc2l6ZV9kZXNpcmVkID0gJWRcbiIsIHR1X3Np emVfZGVzaXJlZCk7Cj4gKwo+ICsJdHVfc2l6ZV9taW51czEgPSB0dV9zaXplX2Rlc2lyZWQgLSAx Owo+ICsKPiArCXZhbGlkX2JvdW5kYXJ5X2xpbmsgPSByb3VuZHVwX3U2NChyYXRpbyAqIHR1X3Np emVfZGVzaXJlZCwgbXVsdGlwbGllcik7Cj4gKwl2YWxpZF9ib3VuZGFyeV9saW5rIC89IG11bHRp cGxpZXI7Cj4gKwluX3R1cyA9IHJvdW5kZG93bigobHdpZHRoICogYnBwICogbXVsdGlwbGllcikK PiArCQkJLyAoOCAqIHZhbGlkX2JvdW5kYXJ5X2xpbmspLCBtdWx0aXBsaWVyKSAvIG11bHRpcGxp ZXI7Cj4gKwlldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kgPSBuX3R1cyAlIGxuX2NudCA9PSAwID8g MSA6IDA7Cj4gKwlwcl9kZWJ1ZygiSW5mbzogbl9zeW1ib2xfcGVyX3R1PSVkLCBudW1iZXJfb2Zf dHVzPSVkXG4iLAo+ICsJCQkJCXZhbGlkX2JvdW5kYXJ5X2xpbmssIG5fdHVzKTsKPiArCj4gKwll eHRyYV9ieXRlcyA9IHJvdW5kdXBfdTY0KChuX3R1cyArIDEpCj4gKwkJCSogKCh2YWxpZF9ib3Vu ZGFyeV9saW5rICogbXVsdGlwbGllcikKPiArCQkJLSAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXpl X2Rlc2lyZWQpKSwgbXVsdGlwbGllcik7Cj4gKwlleHRyYV9ieXRlcyAvPSBtdWx0aXBsaWVyOwo+ ICsJZXh0cmFfcGNsa19jeWNsZXMgPSByb3VuZHVwKGV4dHJhX2J5dGVzICogOCAqIG11bHRpcGxp ZXIgLyBicHAsCj4gKwkJCW11bHRpcGxpZXIpOwo+ICsJZXh0cmFfcGNsa19jeWNsZXMgLz0gbXVs dGlwbGllcjsKPiArCWV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xrID0gcm91bmR1cF91NjQo ZGl2NjRfdTY0KGV4dHJhX3BjbGtfY3ljbGVzCj4gKwkJCQkqIGxjbGsgKiBtdWx0aXBsaWVyLCBw Y2xrKSwgbXVsdGlwbGllcik7Cj4gKwlleHRyYV9wY2xrX2N5Y2xlc19pbl9saW5rX2NsayAvPSBt dWx0aXBsaWVyOwo+ICsJZmlsbGVyX3NpemUgPSByb3VuZHVwX3U2NCgodHVfc2l6ZV9kZXNpcmVk IC0gdmFsaWRfYm91bmRhcnlfbGluaykKPiArCQkJCQkJKiBtdWx0aXBsaWVyLCBtdWx0aXBsaWVy KTsKPiArCWZpbGxlcl9zaXplIC89IG11bHRpcGxpZXI7Cj4gKwlyYXRpb19ieV90dSA9IGRpdjY0 X3U2NChyYXRpbyAqIHR1X3NpemVfZGVzaXJlZCwgbXVsdGlwbGllcik7Cj4gKwo+ICsJcHJfZGVi dWcoImV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xrPSVkLCBleHRyYV9ieXRlcz0lZFxuIiwK PiArCQkJCWV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xrLCBleHRyYV9ieXRlcyk7Cj4gKwlw cl9kZWJ1ZygiZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGs9JWRcbiIsCj4gKwkJCQlleHRy YV9wY2xrX2N5Y2xlc19pbl9saW5rX2Nsayk7Cj4gKwlwcl9kZWJ1ZygiZmlsbGVyX3NpemU9JWQs IGV4dHJhX2J1ZmZlcl9tYXJnaW49JWxsZFxuIiwKPiArCQkJCWZpbGxlcl9zaXplLCBleHRyYV9i dWZmZXJfbWFyZ2luKTsKPiArCj4gKwlkZWxheV9zdGFydF9saW5rID0gKChleHRyYV9ieXRlcyA+ IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xrKQo+ICsJCQk/IGV4dHJhX2J5dGVzCj4gKwkJ CTogZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGspCj4gKwkJCQkrIGZpbGxlcl9zaXplICsg ZXh0cmFfYnVmZmVyX21hcmdpbjsKPiArCXJlc3VsdGluZ192YWxpZCA9IHZhbGlkX2JvdW5kYXJ5 X2xpbms7Cj4gKwlwcl9kZWJ1ZygiSW5mbzogZGVsYXlfc3RhcnRfbGluaz0lZCwgZmlsbGVyX3Np emU9JWRcbiIsCj4gKwkJCQlkZWxheV9zdGFydF9saW5rLCBmaWxsZXJfc2l6ZSk7Cj4gKwlwcl9k ZWJ1ZygidmFsaWRfYm91bmRhcnlfbGluaz0lZCByYXRpb19ieV90dT0lbGxkXG4iLAo+ICsJCQkJ dmFsaWRfYm91bmRhcnlfbGluaywgcmF0aW9fYnlfdHUpOwo+ICsKPiArCWRpZmZfYWJzID0gKHJl c3VsdGluZ192YWxpZCA+PSByYXRpb19ieV90dSkKPiArCQkJCT8gKHJlc3VsdGluZ192YWxpZCAt IHJhdGlvX2J5X3R1KQo+ICsJCQkJOiAocmF0aW9fYnlfdHUgLSByZXN1bHRpbmdfdmFsaWQpOwo+ ICsKPiArCWlmIChlcnIgIT0gMCAmJiAoKGRpZmZfYWJzID4gYnJ1dGVfZm9yY2VfdGhyZXNob2xk KQo+ICsJCQl8fCAoZXZlbl9kaXN0cmlidXRpb25fbGVnYWN5ID09IDApCj4gKwkJCXx8IChkcF9i cnV0ZV9mb3JjZSA9PSAxKSkpIHsKPiArCQllcnIgPSBtdWx0aXBsaWVyOwo+ICsJCWZvciAodHVf c2l6ZSA9IDMyOyB0dV9zaXplIDw9IDY0OyB0dV9zaXplKyspIHsKPiArCQkJZm9yIChpX3VwcGVy X2JkcnlfY250ID0gMTsgaV91cHBlcl9iZHJ5X2NudCA8PSAxNTsKPiArCQkJCQkJaV91cHBlcl9i ZHJ5X2NudCsrKSB7Cj4gKwkJCQlmb3IgKGlfbG93ZXJfYmRyeV9jbnQgPSAxOwo+ICsJCQkJCWlf bG93ZXJfYmRyeV9jbnQgPD0gMTU7Cj4gKwkJCQkJaV9sb3dlcl9iZHJ5X2NudCsrKSB7Cj4gKwkJ CQkJbmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbmsgPQo+ICsJCQkJCQlyb3VuZHVwX3U2NChyYXRpbwo+ ICsJCQkJCQkqIHR1X3NpemUsIG11bHRpcGxpZXIpOwo+ICsJCQkJCWF2ZXJhZ2VfdmFsaWQyID0g KGlfdXBwZXJfYmRyeV9jbnQKPiArCQkJCQkJKiBuZXdfdmFsaWRfYm91bmRhcnlfbGluawo+ICsJ CQkJCQkrIGlfbG93ZXJfYmRyeV9jbnQKPiArCQkJCQkJKiAobmV3X3ZhbGlkX2JvdW5kYXJ5X2xp bmsKPiArCQkJCQkJCS0gbXVsdGlwbGllcikpCj4gKwkJCQkJCS8gKGlfdXBwZXJfYmRyeV9jbnQK PiArCQkJCQkJCSsgaV9sb3dlcl9iZHJ5X2NudCk7Cj4gKwkJCQkJbl90dXMgPSByb3VuZGRvd25f dTY0KGRpdjY0X3U2NChsd2lkdGgKPiArCQkJCQkJKiBtdWx0aXBsaWVyICogbXVsdGlwbGllcgo+ ICsJCQkJCQkqIChicHAgLyA4KSwgYXZlcmFnZV92YWxpZDIpLAo+ICsJCQkJCQkJbXVsdGlwbGll cik7Cj4gKwkJCQkJbl90dXMgLz0gbXVsdGlwbGllcjsKPiArCQkJCQluX3R1c19wZXJfbGFuZQo+ ICsJCQkJCQk9IHJvdW5kZG93bihuX3R1cwo+ICsJCQkJCQkJKiBtdWx0aXBsaWVyCj4gKwkJCQkJ CQkvIGxuX2NudCwgbXVsdGlwbGllcik7Cj4gKwkJCQkJbl90dXNfcGVyX2xhbmUgLz0gbXVsdGlw bGllcjsKPiArCQkJCQlwYWlyZWRfdHVzID0KPiArCQkJCQkJcm91bmRkb3duKChuX3R1c19wZXJf bGFuZSkKPiArCQkJCQkJCSogbXVsdGlwbGllcgo+ICsJCQkJCQkJLyAoaV91cHBlcl9iZHJ5X2Nu dAo+ICsJCQkJCQkJKyBpX2xvd2VyX2JkcnlfY250KSwKPiArCQkJCQkJCW11bHRpcGxpZXIpOwo+ ICsJCQkJCXBhaXJlZF90dXMgLz0gbXVsdGlwbGllcjsKPiArCQkJCQlyZW1haW5kZXJfdHVzID0g bl90dXNfcGVyX2xhbmUKPiArCQkJCQkJCS0gcGFpcmVkX3R1cwo+ICsJCQkJCQkqIChpX3VwcGVy X2JkcnlfY250Cj4gKwkJCQkJCQkrIGlfbG93ZXJfYmRyeV9jbnQpOwo+ICsJCQkJCWlmICgocmVt YWluZGVyX3R1cwo+ICsJCQkJCQktIGlfdXBwZXJfYmRyeV9jbnQpID4gMCkgewo+ICsJCQkJCQly ZW1haW5kZXJfdHVzX3VwcGVyCj4gKwkJCQkJCQk9IGlfdXBwZXJfYmRyeV9jbnQ7Cj4gKwkJCQkJ CXJlbWFpbmRlcl90dXNfbG93ZXIgPQo+ICsJCQkJCQkJcmVtYWluZGVyX3R1cwo+ICsJCQkJCQkJ LSBpX3VwcGVyX2JkcnlfY250Owo+ICsJCQkJCX0gZWxzZSB7Cj4gKwkJCQkJCXJlbWFpbmRlcl90 dXNfdXBwZXIKPiArCQkJCQkJCT0gcmVtYWluZGVyX3R1czsKPiArCQkJCQkJcmVtYWluZGVyX3R1 c19sb3dlciA9IDA7Cj4gKwkJCQkJfQo+ICsJCQkJCXRvdGFsX3ZhbGlkID0gcGFpcmVkX3R1cwo+ ICsJCQkJCQkqIChpX3VwcGVyX2JkcnlfY250Cj4gKwkJCQkJCSogbmV3X3ZhbGlkX2JvdW5kYXJ5 X2xpbmsKPiArCQkJCQkJCSsgaV9sb3dlcl9iZHJ5X2NudAo+ICsJCQkJCQkqIChuZXdfdmFsaWRf Ym91bmRhcnlfbGluawo+ICsJCQkJCQkJLSBtdWx0aXBsaWVyKSkKPiArCQkJCQkJKyAocmVtYWlu ZGVyX3R1c191cHBlcgo+ICsJCQkJCQkqIG5ld192YWxpZF9ib3VuZGFyeV9saW5rKQo+ICsJCQkJ CQkrIChyZW1haW5kZXJfdHVzX2xvd2VyCj4gKwkJCQkJCSogKG5ld192YWxpZF9ib3VuZGFyeV9s aW5rCj4gKwkJCQkJCQktIG11bHRpcGxpZXIpKTsKPiArCQkJCQluX2Vycl9uZWcgPSBubl9lcnJf bmVnID0gZmFsc2U7Cj4gKwkJCQkJZWZmZWN0aXZlX3ZhbGlkCj4gKwkJCQkJCT0gZGl2X3U2NCh0 b3RhbF92YWxpZCwKPiArCQkJCQkJCW5fdHVzX3Blcl9sYW5lKTsKPiArCQkJCQluX25fZXJyID0g KGVmZmVjdGl2ZV92YWxpZAo+ICsJCQkJCQkJPj0gKHJhdGlvICogdHVfc2l6ZSkpCj4gKwkJCQkJ CT8gKGVmZmVjdGl2ZV92YWxpZAo+ICsJCQkJCQkJLSAocmF0aW8gKiB0dV9zaXplKSkKPiArCQkJ CQkJOiAoKHJhdGlvICogdHVfc2l6ZSkKPiArCQkJCQkJCS0gZWZmZWN0aXZlX3ZhbGlkKTsKPiAr CQkJCQlpZiAoZWZmZWN0aXZlX3ZhbGlkIDwgKHJhdGlvICogdHVfc2l6ZSkpCj4gKwkJCQkJCW5u X2Vycl9uZWcgPSB0cnVlOwo+ICsJCQkJCW5fZXJyID0gKGF2ZXJhZ2VfdmFsaWQyCj4gKwkJCQkJ CT49IChyYXRpbyAqIHR1X3NpemUpKQo+ICsJCQkJCQk/IChhdmVyYWdlX3ZhbGlkMgo+ICsJCQkJ CQkJLSAocmF0aW8gKiB0dV9zaXplKSkKPiArCQkJCQkJOiAoKHJhdGlvICogdHVfc2l6ZSkKPiAr CQkJCQkJCS0gYXZlcmFnZV92YWxpZDIpOwo+ICsJCQkJCWlmIChhdmVyYWdlX3ZhbGlkMiA8IChy YXRpbyAqIHR1X3NpemUpKQo+ICsJCQkJCQluX2Vycl9uZWcgPSB0cnVlOwo+ICsJCQkJCWV2ZW5f ZGlzdHJpYnV0aW9uID0KPiArCQkJCQkJbl90dXMgJSBsbl9jbnQgPT0gMCA/IDEgOiAwOwo+ICsJ CQkJCWRpZmZfYWJzID0KPiArCQkJCQkJcmVzdWx0aW5nX3ZhbGlkID49IHJhdGlvX2J5X3R1Cj4g KwkJCQkJCT8gKHJlc3VsdGluZ192YWxpZAo+ICsJCQkJCQkJLSByYXRpb19ieV90dSkKPiArCQkJ CQkJOiAocmF0aW9fYnlfdHUKPiArCQkJCQkJCS0gcmVzdWx0aW5nX3ZhbGlkKTsKPiArCj4gKwkJ CQkJcmVzdWx0aW5nX3ZhbGlkX3RtcCA9IGRpdjY0X3U2NCgKPiArCQkJCQkJKGlfdXBwZXJfYmRy eV9jbnQKPiArCQkJCQkJKiBuZXdfdmFsaWRfYm91bmRhcnlfbGluawo+ICsJCQkJCQkrIGlfbG93 ZXJfYmRyeV9jbnQKPiArCQkJCQkJKiAobmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbmsKPiArCQkJCQkJ CS0gbXVsdGlwbGllcikpLAo+ICsJCQkJCQkoaV91cHBlcl9iZHJ5X2NudAo+ICsJCQkJCQkJKyBp X2xvd2VyX2JkcnlfY250KSk7Cj4gKwkJCQkJcmF0aW9fYnlfdHVfdG1wID0KPiArCQkJCQkJb3Jp Z2luYWxfcmF0aW8gKiB0dV9zaXplOwo+ICsJCQkJCXJhdGlvX2J5X3R1X3RtcCAvPSBtdWx0aXBs aWVyOwo+ICsJCQkJCW5fdHVzX3RtcCA9IHJvdW5kZG93bl91NjQoCj4gKwkJCQkJCWRpdjY0X3U2 NChsd2lkdGgKPiArCQkJCQkJKiBtdWx0aXBsaWVyICogbXVsdGlwbGllcgo+ICsJCQkJCQkqIGJw cCAvIDgsCj4gKwkJCQkJCXJlc3VsdGluZ192YWxpZF90bXApLAo+ICsJCQkJCQltdWx0aXBsaWVy KTsKPiArCQkJCQluX3R1c190bXAgLz0gbXVsdGlwbGllcjsKPiArCj4gKwkJCQkJdGVtcDMgPSAo cmVzdWx0aW5nX3ZhbGlkX3RtcAo+ICsJCQkJCQk+PSAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXpl KSkKPiArCQkJCQkJPyAocmVzdWx0aW5nX3ZhbGlkX3RtcAo+ICsJCQkJCQktIG9yaWdpbmFsX3Jh dGlvICogdHVfc2l6ZSkKPiArCQkJCQkJOiAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKQo+ICsJ CQkJCQktIHJlc3VsdGluZ192YWxpZF90bXA7Cj4gKwkJCQkJdGVtcDMgPSAobl90dXNfdG1wICsg MSkgKiB0ZW1wMzsKPiArCQkJCQl0ZW1wNCA9IChuZXdfdmFsaWRfYm91bmRhcnlfbGluawo+ICsJ CQkJCQk+PSAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKSkKPiArCQkJCQkJPyAobmV3X3ZhbGlk X2JvdW5kYXJ5X2xpbmsKPiArCQkJCQkJCS0gb3JpZ2luYWxfcmF0aW8KPiArCQkJCQkJCSogdHVf c2l6ZSkKPiArCQkJCQkJOiAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKQo+ICsJCQkJCQktIG5l d192YWxpZF9ib3VuZGFyeV9saW5rOwo+ICsJCQkJCXRlbXA0ID0gKGlfdXBwZXJfYmRyeV9jbnQK PiArCQkJCQkJCSogbG5fY250ICogdGVtcDQpOwo+ICsKPiArCQkJCQl0ZW1wMyA9IHJvdW5kdXBf dTY0KHRlbXAzLCBtdWx0aXBsaWVyKTsKPiArCQkJCQl0ZW1wNCA9IHJvdW5kdXBfdTY0KHRlbXA0 LCBtdWx0aXBsaWVyKTsKPiArCQkJCQlkcF9jdHJsX2dldF9leHRyYV9yZXFfYnl0ZXMKPiArCQkJ CQkJKHJlc3VsdGluZ192YWxpZF90bXAsCj4gKwkJCQkJCW5ld192YWxpZF9ib3VuZGFyeV9saW5r LAo+ICsJCQkJCQl0ZW1wMywgdGVtcDQsCj4gKwkJCQkJCSZleHRyYV9yZXFfYnl0ZXNfaXNfbmVn LAo+ICsJCQkJCQkmcmVzdWx0LAo+ICsJCQkJCQkob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKSk7 Cj4gKwkJCQkJZXh0cmFfcmVxX2J5dGVzX25ld190bXAKPiArCQkJCQkJPSBkaXY2NF91bChyZXN1 bHQsIG11bHRpcGxpZXIpOwo+ICsJCQkJCWlmICgoZXh0cmFfcmVxX2J5dGVzX2lzX25lZykKPiAr CQkJCQkJJiYgKGV4dHJhX3JlcV9ieXRlc19uZXdfdG1wCj4gKwkJCQkJCQk+IDEpKQo+ICsJCQkJ CQlleHRyYV9yZXFfYnl0ZXNfbmV3X3RtcAo+ICsJCQkJCQk9IGV4dHJhX3JlcV9ieXRlc19uZXdf dG1wIC0gMTsKPiArCQkJCQlpZiAoZXh0cmFfcmVxX2J5dGVzX25ld190bXAgPT0gMCkKPiArCQkJ CQkJZXh0cmFfcmVxX2J5dGVzX25ld190bXAgPSAxOwo+ICsJCQkJCWV4dHJhX3BjbGtfY3ljbGVz X3RtcCA9Cj4gKwkJCQkJCSh1NjQpKGV4dHJhX3JlcV9ieXRlc19uZXdfdG1wCj4gKwkJCQkJCSAg ICAgICogOCAqIG11bHRpcGxpZXIpIC8gYnBwOwo+ICsJCQkJCWV4dHJhX3BjbGtfY3ljbGVzX3Rt cCAvPSBtdWx0aXBsaWVyOwo+ICsKPiArCQkJCQlpZiAoZXh0cmFfcGNsa19jeWNsZXNfdG1wIDw9 IDApCj4gKwkJCQkJCWV4dHJhX3BjbGtfY3ljbGVzX3RtcCA9IDE7Cj4gKwkJCQkJZXh0cmFfcGNs a19jeWNsZXNfaW5fbGNsa190bXAgPQo+ICsJCQkJCQlyb3VuZHVwX3U2NChkaXY2NF91NjQoCj4g KwkJCQkJCQlleHRyYV9wY2xrX2N5Y2xlc190bXAKPiArCQkJCQkJCSogbGNsayAqIG11bHRpcGxp ZXIsCj4gKwkJCQkJCQlwY2xrKSwgbXVsdGlwbGllcik7Cj4gKwkJCQkJZXh0cmFfcGNsa19jeWNs ZXNfaW5fbGNsa190bXAKPiArCQkJCQkJLz0gbXVsdGlwbGllcjsKPiArCQkJCQlmaWxsZXJfc2l6 ZV90bXAgPSByb3VuZHVwX3U2NCgKPiArCQkJCQkJKHR1X3NpemUgKiBtdWx0aXBsaWVyICoKPiAr CQkJCQkJbmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbmspLAo+ICsJCQkJCQltdWx0aXBsaWVyKTsKPiAr CQkJCQlmaWxsZXJfc2l6ZV90bXAgLz0gbXVsdGlwbGllcjsKPiArCQkJCQlsb3dlcl9maWxsZXJf c2l6ZV90bXAgPQo+ICsJCQkJCQlmaWxsZXJfc2l6ZV90bXAgKyAxOwo+ICsJCQkJCWlmIChleHRy YV9yZXFfYnl0ZXNfaXNfbmVnKQo+ICsJCQkJCQl0ZW1wMyA9IChleHRyYV9yZXFfYnl0ZXNfbmV3 X3RtcAo+ICsJCQkJCQk+IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xjbGtfdG1wCj4gKwkJCQkJCT8g ZXh0cmFfcGNsa19jeWNsZXNfaW5fbGNsa190bXAKPiArCQkJCQkJOiBleHRyYV9yZXFfYnl0ZXNf bmV3X3RtcCk7Cj4gKwkJCQkJZWxzZQo+ICsJCQkJCQl0ZW1wMyA9IChleHRyYV9yZXFfYnl0ZXNf bmV3X3RtcAo+ICsJCQkJCQk+IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xjbGtfdG1wCj4gKwkJCQkJ CT8gZXh0cmFfcmVxX2J5dGVzX25ld190bXAgOgo+ICsJCQkJCQlleHRyYV9wY2xrX2N5Y2xlc19p bl9sY2xrX3RtcCk7Cj4gKwo+ICsJCQkJCXRlbXA0ID0gbG93ZXJfZmlsbGVyX3NpemVfdG1wCj4g KwkJCQkJCSsgZXh0cmFfYnVmZmVyX21hcmdpbjsKPiArCQkJCQlpZiAoZXh0cmFfcmVxX2J5dGVz X2lzX25lZykKPiArCQkJCQkJZGVsYXlfc3RhcnRfbGlua190bXAKPiArCQkJCQkJCT0gKHRlbXAz ID49IHRlbXA0KQo+ICsJCQkJCQkJPyAodGVtcDMgLSB0ZW1wNCkKPiArCQkJCQkJCTogKHRlbXA0 IC0gdGVtcDMpOwo+ICsJCQkJCWVsc2UKPiArCQkJCQkJZGVsYXlfc3RhcnRfbGlua190bXAKPiAr CQkJCQkJCT0gdGVtcDMgKyB0ZW1wNDsKPiArCj4gKwkJCQkJbWluX2hibGFua190bXAgPSAoaW50 KWRpdjY0X3U2NCgKPiArCQkJCQkJcm91bmR1cF91NjQoCj4gKwkJCQkJCWRpdjY0X3U2NChkZWxh eV9zdGFydF9saW5rX3RtcAo+ICsJCQkJCQkqIHBjbGsgKiBtdWx0aXBsaWVyLCBsY2xrKSwKPiAr CQkJCQkJbXVsdGlwbGllciksIG11bHRpcGxpZXIpCj4gKwkJCQkJCSsgaGJsYW5rX21hcmdpbjsK PiArCj4gKwkJCQkJaWYgKCgoZXZlbl9kaXN0cmlidXRpb24gPT0gMSkKPiArCQkJCQkJfHwgKChl dmVuX2Rpc3RyaWJ1dGlvbl9iZiA9PSAwKQo+ICsJCQkJCQkmJiAoZXZlbl9kaXN0cmlidXRpb25f bGVnYWN5Cj4gKwkJCQkJCQkJPT0gMCkpKQo+ICsJCQkJCQkmJiAhbl9lcnJfbmVnICYmICFubl9l cnJfbmVnCj4gKwkJCQkJCSYmIG5fbl9lcnIgPCBlcnIKPiArCQkJCQkJJiYgKG5fbl9lcnIgPCBk aWZmX2Ficwo+ICsJCQkJCQl8fCAoZHBfYnJ1dGVfZm9yY2UgPT0gMSkpCj4gKwkJCQkJCSYmIChu ZXdfdmFsaWRfYm91bmRhcnlfbGluawo+ICsJCQkJCQkJCQktIDEpID4gMAo+ICsJCQkJCQkmJiAo aF9ibGFuayA+PQo+ICsJCQkJCQkJKHUzMiltaW5faGJsYW5rX3RtcCkpIHsKPiArCQkJCQkJdXBw ZXJfYmRyeV9jbnQgPQo+ICsJCQkJCQkJaV91cHBlcl9iZHJ5X2NudDsKPiArCQkJCQkJbG93ZXJf YmRyeV9jbnQgPQo+ICsJCQkJCQkJaV9sb3dlcl9iZHJ5X2NudDsKPiArCQkJCQkJZXJyID0gbl9u X2VycjsKPiArCQkJCQkJYm91bmRhcnlfbW9kZXJhdGlvbl9lbiA9IDE7Cj4gKwkJCQkJCXR1X3Np emVfZGVzaXJlZCA9IHR1X3NpemU7Cj4gKwkJCQkJCXZhbGlkX2JvdW5kYXJ5X2xpbmsgPQo+ICsJ CQkJCQkJbmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbms7Cj4gKwkJCQkJCWVmZmVjdGl2ZV92YWxpZF9y ZWNvcmRlZAo+ICsJCQkJCQkJPSBlZmZlY3RpdmVfdmFsaWQ7Cj4gKwkJCQkJCWRlbGF5X3N0YXJ0 X2xpbmsKPiArCQkJCQkJCT0gZGVsYXlfc3RhcnRfbGlua190bXA7Cj4gKwkJCQkJCWZpbGxlcl9z aXplID0gZmlsbGVyX3NpemVfdG1wOwo+ICsJCQkJCQltaW5faGJsYW5rID0gbWluX2hibGFua190 bXA7Cj4gKwkJCQkJCW5fdHVzID0gbl90dXNfdG1wOwo+ICsJCQkJCQlldmVuX2Rpc3RyaWJ1dGlv bl9iZiA9IDE7Cj4gKwo+ICsJCQkJCQlwcl9kZWJ1ZygidXBwZXJfYmRyeV9jbnQ9JWQsIGxvd2Vy X2JvdW5kYXJ5X2NudD0lZCwgZXJyPSVsbGQsIHR1X3NpemVfZGVzaXJlZD0lZCwgdmFsaWRfYm91 bmRhcnlfbGluaz0lZCwgZWZmZWN0aXZlX3ZhbGlkPSVsbGRcbiIsCj4gKwkJCQkJCQl1cHBlcl9i ZHJ5X2NudCwKPiArCQkJCQkJCWxvd2VyX2JkcnlfY250LCBlcnIsCj4gKwkJCQkJCQl0dV9zaXpl X2Rlc2lyZWQsCj4gKwkJCQkJCQl2YWxpZF9ib3VuZGFyeV9saW5rLAo+ICsJCQkJCQkJZWZmZWN0 aXZlX3ZhbGlkKTsKPiArCQkJCQl9Cj4gKwkJCQl9Cj4gKwkJCX0KPiArCQl9Cj4gKwo+ICsJCWlm IChib3VuZGFyeV9tb2RlcmF0aW9uX2VuID09IDEpIHsKPiArCQkJcmVzdWx0aW5nX3ZhbGlkID0g KHU2NCkodXBwZXJfYmRyeV9jbnQKPiArCQkJCQkqdmFsaWRfYm91bmRhcnlfbGluayArIGxvd2Vy X2JkcnlfY250Cj4gKwkJCQkJKiAodmFsaWRfYm91bmRhcnlfbGluayAtIDEpKQo+ICsJCQkJCS8g KHVwcGVyX2JkcnlfY250ICsgbG93ZXJfYmRyeV9jbnQpOwo+ICsJCQlyYXRpb19ieV90dSA9IG9y aWdpbmFsX3JhdGlvICogdHVfc2l6ZV9kZXNpcmVkOwo+ICsJCQl2YWxpZF9sb3dlcl9ib3VuZGFy eV9saW5rID0KPiArCQkJCSh2YWxpZF9ib3VuZGFyeV9saW5rIC8gbXVsdGlwbGllcikgLSAxOwo+ ICsKPiArCQkJdHVfc2l6ZV9taW51czEgPSB0dV9zaXplX2Rlc2lyZWQgLSAxOwo+ICsJCQlldmVu X2Rpc3RyaWJ1dGlvbl9iZiA9IDE7Cj4gKwkJCXZhbGlkX2JvdW5kYXJ5X2xpbmsgLz0gbXVsdGlw bGllcjsKPiArCQkJcHJfZGVidWcoIkluZm86IEJvdW5kYXJ5X21vZGVyYXRpb24gZW5hYmxlZFxu Iik7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCW1pbl9oYmxhbmsgPSAoKGludCkgcm91bmR1cF91NjQo ZGl2NjRfdTY0KGRlbGF5X3N0YXJ0X2xpbmsgKiBwY2xrCj4gKwkJCSogbXVsdGlwbGllciwgbGNs ayksIG11bHRpcGxpZXIpKQo+ICsJCQkvIG11bHRpcGxpZXIgKyBoYmxhbmtfbWFyZ2luOwo+ICsJ aWYgKGhfYmxhbmsgPCAodTMyKW1pbl9oYmxhbmspIHsKPiArCQlwcl9kZWJ1ZygiIFdBUk5JTkc6 IHJ1bl9pZHg9JWQgUHJvZ3JhbW1lZCBoX2JsYW5rICVkIGlzIHNtYWxsZXIgdGhhbiB0aGUgbWlu X2hibGFuayAlZCBzdXBwb3J0ZWQuXG4iLAo+ICsJCQkJCXJ1bl9pZHgsIGhfYmxhbmssIG1pbl9o YmxhbmspOwo+ICsJfQo+ICsKPiArCWlmIChmaWZvX2VtcHR5KQl7Cj4gKwkJdHVfc2l6ZV9taW51 czEgPSAzMTsKPiArCQl2YWxpZF9ib3VuZGFyeV9saW5rID0gMzI7Cj4gKwkJZGVsYXlfc3RhcnRf bGluayA9IDA7Cj4gKwkJYm91bmRhcnlfbW9kZXJhdGlvbl9lbiA9IDA7Cj4gKwl9Cj4gKwo+ICsJ cHJfZGVidWcoInR1X3NpemVfbWludXMxPSVkIHZhbGlkX2JvdW5kYXJ5X2xpbms9JWQgZGVsYXlf c3RhcnRfbGluaz0lZCBib3VuZGFyeV9tb2RlcmF0aW9uX2VuPSVkXG4gdXBwZXJfYm91bmRhcnlf Y250PSVkIGxvd2VyX2JvdW5kYXJ5X2NudD0lZCB2YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rPSVk IG1pbl9oYmxhbms9JWRcbiIsCj4gKwkJdHVfc2l6ZV9taW51czEsIHZhbGlkX2JvdW5kYXJ5X2xp bmssIGRlbGF5X3N0YXJ0X2xpbmssCj4gKwkJYm91bmRhcnlfbW9kZXJhdGlvbl9lbiwgdXBwZXJf YmRyeV9jbnQsIGxvd2VyX2JkcnlfY250LAo+ICsJCXZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xpbmss IG1pbl9oYmxhbmspOwo+ICsKPiArCXR1X3RhYmxlLT52YWxpZF9ib3VuZGFyeV9saW5rID0gdmFs aWRfYm91bmRhcnlfbGluazsKPiArCXR1X3RhYmxlLT5kZWxheV9zdGFydF9saW5rID0gZGVsYXlf c3RhcnRfbGluazsKPiArCXR1X3RhYmxlLT5ib3VuZGFyeV9tb2RlcmF0aW9uX2VuID0gYm91bmRh cnlfbW9kZXJhdGlvbl9lbjsKPiArCXR1X3RhYmxlLT52YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5r ID0gdmFsaWRfbG93ZXJfYm91bmRhcnlfbGluazsKPiArCXR1X3RhYmxlLT51cHBlcl9ib3VuZGFy eV9jb3VudCA9IHVwcGVyX2JkcnlfY250Owo+ICsJdHVfdGFibGUtPmxvd2VyX2JvdW5kYXJ5X2Nv dW50ID0gbG93ZXJfYmRyeV9jbnQ7Cj4gKwl0dV90YWJsZS0+dHVfc2l6ZV9taW51czEgPSB0dV9z aXplX21pbnVzMTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY3RybF9zZXR1cF90cl91bml0 KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCj4gK3sKPiArCXUzMiBkcF90dSA9IDB4MDsK PiArCXUzMiB2YWxpZF9ib3VuZGFyeSA9IDB4MDsKPiArCXUzMiB2YWxpZF9ib3VuZGFyeTIgPSAw eDA7Cj4gKwlzdHJ1Y3QgZHBfdmNfdHVfbWFwcGluZ190YWJsZSB0dV9jYWxjX3RhYmxlOwo+ICsK PiArCWRwX2N0cmxfY2FsY190dV9wYXJhbWV0ZXJzKGN0cmwsICZ0dV9jYWxjX3RhYmxlKTsKPiAr Cj4gKwlkcF90dSB8PSB0dV9jYWxjX3RhYmxlLnR1X3NpemVfbWludXMxOwo+ICsJdmFsaWRfYm91 bmRhcnkgfD0gdHVfY2FsY190YWJsZS52YWxpZF9ib3VuZGFyeV9saW5rOwo+ICsJdmFsaWRfYm91 bmRhcnkgfD0gKHR1X2NhbGNfdGFibGUuZGVsYXlfc3RhcnRfbGluayA8PCAxNik7Cj4gKwo+ICsJ dmFsaWRfYm91bmRhcnkyIHw9ICh0dV9jYWxjX3RhYmxlLnZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xp bmsgPDwgMSk7Cj4gKwl2YWxpZF9ib3VuZGFyeTIgfD0gKHR1X2NhbGNfdGFibGUudXBwZXJfYm91 bmRhcnlfY291bnQgPDwgMTYpOwo+ICsJdmFsaWRfYm91bmRhcnkyIHw9ICh0dV9jYWxjX3RhYmxl Lmxvd2VyX2JvdW5kYXJ5X2NvdW50IDw8IDIwKTsKPiArCj4gKwlpZiAodHVfY2FsY190YWJsZS5i b3VuZGFyeV9tb2RlcmF0aW9uX2VuKQo+ICsJCXZhbGlkX2JvdW5kYXJ5MiB8PSBCSVQoMCk7Cj4g Kwo+ICsJcHJfZGVidWcoImRwX3R1PTB4JXgsIHZhbGlkX2JvdW5kYXJ5PTB4JXgsIHZhbGlkX2Jv dW5kYXJ5Mj0weCV4XG4iLAo+ICsJCQlkcF90dSwgdmFsaWRfYm91bmRhcnksIHZhbGlkX2JvdW5k YXJ5Mik7Cj4gKwo+ICsJY3RybC0+Y2F0YWxvZy0+ZHBfdHUgPSBkcF90dTsKPiArCWN0cmwtPmNh dGFsb2ctPnZhbGlkX2JvdW5kYXJ5ID0gdmFsaWRfYm91bmRhcnk7Cj4gKwljdHJsLT5jYXRhbG9n LT52YWxpZF9ib3VuZGFyeTIgPSB2YWxpZF9ib3VuZGFyeTI7Cj4gKwo+ICsJY3RybC0+Y2F0YWxv Zy0+dXBkYXRlX3RyYW5zZmVyX3VuaXQoY3RybC0+Y2F0YWxvZyk7CgpBZ2FpbiBoZXJlLCBpZiB5 b3UganVzdCBjYWxsIHRoZSBmdW5jdGlvbiBkaXJlY3RseSwgeW91IGNhbiBhdm9pZCB0aGUgY2Fs bGJhY2suCklmIHlvdSBhZGQgZnVuY3Rpb24gYXJndW1lbnRzLCB5b3UgY2FuIGF2b2lkIGhhdmlu ZyB0byBzdG9yZSBkcF90dS92YWxpZF9ib3VuZGFyeS8KdmFsaWRfYm91bmRhcnkyIGVudGlyZWx5 LgoKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9jdHJsX3dhaXQ0dmlkZW9fcmVhZHkoc3RydWN0 IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPiArewo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJcmV0 ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjdHJsLT52aWRlb19jb21wLCBIWiAvIDIp OwoKQnJlYWsgb3V0IHRoZSB0aW1lb3V0IGludG8gYSAjZGVmaW5lCgo+ICsJaWYgKHJldCA8PSAw KSB7Cj4gKwkJcHJfZXJyKCJMaW5rIFRyYWluIHRpbWVkb3V0XG4iKTsKPiArCQlyZXQgPSAtRUlO VkFMOwo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7CgpZb3UncmUgbm90IGNoZWNraW5nIHRoZSBy ZXR1cm4gdmFsdWUgYXQgdGhlIGNhbGxzaXRlLgoKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9j dHJsX3VwZGF0ZV9zaW5rX3Z4X3B4KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwsCj4gKwkJ CQkgICAgIHUzMiB2b2x0YWdlX2xldmVsLCB1MzIgcHJlX2VtcGhhc2lzX2xldmVsKQoKSSBkb24n dCB0aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgZnVuY3Rpb24sIGp1c3QgbW92ZSBpdCBhbGwgaW50 bwpkcF9jdHJsX3VwZGF0ZV92eF9weC4KCj4gK3sKPiArCWludCBpOwo+ICsJdTggYnVmWzRdOwo+ ICsJdTMyIG1heF9sZXZlbF9yZWFjaGVkID0gMDsKPiArCj4gKwlpZiAodm9sdGFnZV9sZXZlbCA9 PSBEUF9MSU5LX1ZPTFRBR0VfTUFYKSB7Cj4gKwkJcHJfZGVidWcoIm1heC4gdm9sdGFnZSBzd2lu ZyBsZXZlbCByZWFjaGVkICVkXG4iLAo+ICsJCQkJdm9sdGFnZV9sZXZlbCk7Cj4gKwkJbWF4X2xl dmVsX3JlYWNoZWQgfD0gQklUKDIpOwoKICAgICAgICBEUF9UUkFJTl9NQVhfU1dJTkdfUkVBQ0hF RAoKPiArCX0KPiArCj4gKwlpZiAocHJlX2VtcGhhc2lzX2xldmVsID09IERQX0xJTktfUFJFX0VN UEhBU0lTX01BWCkgewo+ICsJCXByX2RlYnVnKCJtYXguIHByZS1lbXBoYXNpcyBsZXZlbCByZWFj aGVkICVkXG4iLAo+ICsJCQkJcHJlX2VtcGhhc2lzX2xldmVsKTsKPiArCQltYXhfbGV2ZWxfcmVh Y2hlZCAgfD0gQklUKDUpOwoKICAgICAgICBEUF9UUkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNI RUQKCj4gKwl9Cj4gKwo+ICsJcHJlX2VtcGhhc2lzX2xldmVsIDw8PSAzOwoKVGhpcyBpcyBEUF9U UkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQsIGJ1dCBJJ20gZ3Vlc3NpbmcgeW91IGFyZW4ndCB1c2lu ZyB0aGUKRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfKiB2YWx1ZXMgd2hlbiB5b3Ugc2V0IHBfbGV2 ZWwuIFNvIHRoZSByaWdodCB3YXkgdG8gZml4CnRoaXMgaXMgdG8gdXNlIHRob3NlICNkZWZpbmVz IGFuZCBnZXQgcmlkIG9mIHRoaXMgc2hpZnQuCgo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCA0OyBp KyspCgpZb3Ugc2hvdWxkbid0IGFzc3VtZSA0IGxhbmVzIGhlcmUsIHVzZSBkcm1fZHBfbGluay0+ bnVtX2xhbmVzCgo+ICsJCWJ1ZltpXSA9IHZvbHRhZ2VfbGV2ZWwgfCBwcmVfZW1waGFzaXNfbGV2 ZWwgfCBtYXhfbGV2ZWxfcmVhY2hlZDsKPiArCj4gKwlwcl9kZWJ1Zygic2luazogcHx2PTB4JXhc biIsIHZvbHRhZ2VfbGV2ZWwgfCBwcmVfZW1waGFzaXNfbGV2ZWwpOwo+ICsJcmV0dXJuIGRybV9k cF9kcGNkX3dyaXRlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgMHgxMDMsIGJ1ZiwgNCk7CgpzLzB4MTAz L0RQX1RSQUlOSU5HX0xBTkUwX1NFVC8gYW5kIHMvNC9kcm1fZHBfbGluay0+bnVtX2xhbmVzLwoK QWxzbywgdGhpcyB3aWxsIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgdHJhbnNtaXR0ZWQsIG5vdCAo MCB8fCAtZXJybm8pLgoKCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxfdXBkYXRlX3Z4 X3B4KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCj4gK3sKPiArCXN0cnVjdCBkcF9saW5r ICpsaW5rID0gY3RybC0+bGluazsKPiArCj4gKwljdHJsLT5jYXRhbG9nLT51cGRhdGVfdnhfcHgo Y3RybC0+Y2F0YWxvZywKPiArCQlsaW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwsIGxpbmstPnBoeV9w YXJhbXMucF9sZXZlbCk7Cj4gKwo+ICsJZHBfY3RybF91cGRhdGVfc2lua192eF9weChjdHJsLCBs aW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwsCj4gKwkJbGluay0+cGh5X3BhcmFtcy5wX2xldmVsKTsK CkZvcnR1bmF0ZWx5IChvciB1bmZvcnR1bmF0ZWx5KSwgdGhlIHJldHVybiB2YWx1ZSBpc24ndCBj aGVja2VkLiBTbyBwbGVhc2UgY2hlY2sKdGhlIHJldHVybiB2YWx1ZS4KCj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGRwX2N0cmxfdHJhaW5fcGF0dGVybl9zZXQoc3RydWN0IGRwX2N0cmxfcHJpdmF0 ZSAqY3RybCwKPiArCQl1OCBwYXR0ZXJuKQo+ICt7Cj4gKwl1OCBidWZbNF07CgpXaHkgND8KCj4g Kwo+ICsJcHJfZGVidWcoInNpbms6IHBhdHRlcm49JXhcbiIsIHBhdHRlcm4pOwo+ICsKPiArCWJ1 ZlswXSA9IHBhdHRlcm47Cj4gKwlkcm1fZHBfZHBjZF93cml0ZShjdHJsLT5hdXgtPmRybV9hdXgs IERQX1RSQUlOSU5HX1BBVFRFUk5fU0VULCBidWYsIDEpOwoKQ2hlY2sgdGhlIHJldHVybiB2YWx1 ZSBvZiB0aGlzIGFuZCBhbGxsIGRybV9kcF9kcGNkXyhyZWFkfHdyaXRlKSBjYWxscy4KCj4gK30K PiArCj4gK3N0YXRpYyBpbnQgZHBfY3RybF9yZWFkX2xpbmtfc3RhdHVzKHN0cnVjdCBkcF9jdHJs X3ByaXZhdGUgKmN0cmwsCj4gKwkJCQkgICAgdTggKmxpbmtfc3RhdHVzKQo+ICt7Cj4gKwlpbnQg cmV0ID0gMCwgbGVuOwo+ICsJdTMyIGNvbnN0IG9mZnNldCA9IERQX0xBTkVfQUxJR05fU1RBVFVT X1VQREFURUQgLSBEUF9MQU5FMF8xX1NUQVRVUzsKPiArCXUzMiBsaW5rX3N0YXR1c19yZWFkX21h eF9yZXRyaWVzID0gMTAwOwo+ICsKPiArCXdoaWxlICgtLWxpbmtfc3RhdHVzX3JlYWRfbWF4X3Jl dHJpZXMpIHsKPiArCQlsZW4gPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKGN0cmwtPmF1 eC0+ZHJtX2F1eCwKPiArCQkJbGlua19zdGF0dXMpOwo+ICsJCWlmIChsZW4gIT0gRFBfTElOS19T VEFUVVNfU0laRSkgewo+ICsJCQlwcl9lcnIoIkRQIGxpbmsgc3RhdHVzIHJlYWQgZmFpbGVkLCBl cnI6ICVkXG4iLCBsZW4pOwo+ICsJCQlyZXQgPSBsZW47Cj4gKwkJCWJyZWFrOwoKSnVzdCByZXR1 cm4gZGlyZWN0bHkgaGVyZS4gWW91IGNhbiBhbHNvIGp1c3QgZHJvcCBsZW4gYW5kIHVzZSByZXQg KG9yIGRyb3AgcmV0CmFuZCB1c2UgbGVuKS4KCj4gKwkJfQo+ICsKPiArCQlpZiAoIShsaW5rX3N0 YXR1c1tvZmZzZXRdICYgRFBfTElOS19TVEFUVVNfVVBEQVRFRCkpCj4gKwkJCWJyZWFrOwoKQW5k IHJldHVybiAwIGRpcmVjdGx5IGhlcmUKCj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKCkhlcmUg eW91J3JlIHJldHVybmluZyBzdWNjZXNzZnVsIGluIHRoZSB0aW1lb3V0IGNhc2UgOiggT25jZSB5 b3UgY29udmVydCB0aGUgYWJvdmUKdG8gZGlyZWN0IHJldHVybnMsIHRoaXMgY2FuIGJlY29tZSBy ZXR1cm4gLUVUSU1FRE9VVDsKCkkgdGhpbmsgeW91IHNob3VsZCBhbHNvIGRyb3AgdGhlIG51bWJl ciBvZiByZXRyaWVzIGRyYXN0aWNhbGx5LgoKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9jdHJs X2xpbmtfdHJhaW5fMShzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7Cj4gKwlpbnQg dHJpZXMsIG9sZF92X2xldmVsLCByZXQgPSAwOwo+ICsJdTggbGlua19zdGF0dXNbRFBfTElOS19T VEFUVVNfU0laRV07Cj4gKwlpbnQgY29uc3QgbWF4aW11bV9yZXRyaWVzID0gNTsKPiArCj4gKwlk cF9jdHJsX3N0YXRlX2N0cmwoY3RybCwgMCk7Cj4gKwkvKiBNYWtlIHN1cmUgdG8gY2xlYXIgdGhl IGN1cnJlbnQgcGF0dGVybiBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgb25lICovCj4gKwl3bWIoKTsK PiArCj4gKwljdHJsLT5jYXRhbG9nLT5zZXRfcGF0dGVybihjdHJsLT5jYXRhbG9nLCAweDAxKTsK CiNkZWZpbmUgdGhhdCBiaXQgcGxlYXNlCgo+ICsJZHBfY3RybF90cmFpbl9wYXR0ZXJuX3NldChj dHJsLCBEUF9UUkFJTklOR19QQVRURVJOXzEgfAo+ICsJCURQX0xJTktfU0NSQU1CTElOR19ESVNB QkxFKTsgLyogdHJhaW5fMSAqLwoKdGhlIHRyYWluXzEgY29tbWVudCBpc24ndCBuZWVkZWQuCgo+ ICsJZHBfY3RybF91cGRhdGVfdnhfcHgoY3RybCk7Cj4gKwo+ICsJdHJpZXMgPSAwOwo+ICsJb2xk X3ZfbGV2ZWwgPSBjdHJsLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWw7Cj4gKwl3aGlsZSAoMSkg ewoKSW5zdGVhZCBvZiB1bmJvdW5kZWQsIHRoaXMgc2hvdWxkIGJlOgogICAgICAgIGZvciAodHJp ZXMgPSAwOyB0cmllcyA8IG1heGltdW1fcmV0cmllczsgdHJpZXMrKykgewoKWW91J2xsIG5lZWQg dG8gcy9icmVhay9yZXR1cm4gcmV0LyBpbiB0aGUgcmVzdCBvZiB0aGUgbG9vcCBhbmQgbW92ZSB0 aGUgdGltZW91dAplcnJvciB0byB0aGUgYm90dG9tIG9mIHRoZSBmdW5jdGlvbgoKPiArCQlkcm1f ZHBfbGlua190cmFpbl9jbG9ja19yZWNvdmVyeV9kZWxheShjdHJsLT5wYW5lbC0+ZHBjZCk7Cj4g Kwo+ICsJCXJldCA9IGRwX2N0cmxfcmVhZF9saW5rX3N0YXR1cyhjdHJsLCBsaW5rX3N0YXR1cyk7 Cj4gKwkJaWYgKHJldCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWlmIChkcm1fZHBfY2xvY2tfcmVj b3Zlcnlfb2sobGlua19zdGF0dXMsCj4gKwkJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVf Y291bnQpKSB7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJaWYgKGN0cmwtPmxpbmstPnBo eV9wYXJhbXMudl9sZXZlbCA9PSBEUF9MSU5LX1ZPTFRBR0VfTUFYKSB7CgpTaW5jZSBEUF9MSU5L X1ZPTFRBR0VfTUFYID09IERQX0xJTktfVk9MVEFHRV9MRVZFTF8yLCB5b3UnbGwgZW5kIHVwIG5v dCByZXRyeWluZwpMRVZFTF8yIGF0IGFsbC4KCj4gKwkJCXByX2Vycl9yYXRlbGltaXRlZCgibWF4 IHZfbGV2ZWwgcmVhY2hlZFxuIik7Cj4gKwkJCXJldCA9IC1FQUdBSU47Cj4gKwkJCWJyZWFrOwo+ ICsJCX0KPiArCj4gKwkJaWYgKG9sZF92X2xldmVsID09IGN0cmwtPmxpbmstPnBoeV9wYXJhbXMu dl9sZXZlbCkgewo+ICsJCQl0cmllcysrOwo+ICsJCQlpZiAodHJpZXMgPj0gbWF4aW11bV9yZXRy aWVzKSB7Cj4gKwkJCQlwcl9lcnIoIm1heCB0cmllcyByZWFjaGVkXG4iKTsKPiArCQkJCXJldCA9 IC1FVElNRURPVVQ7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCX0gZWxzZSB7Cj4gKwkJCXRy aWVzID0gMDsKPiArCQkJb2xkX3ZfbGV2ZWwgPSBjdHJsLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2 ZWw7Cj4gKwkJfQo+ICsKPiArCQlwcl9kZWJ1ZygiY2xvY2sgcmVjb3Zlcnkgbm90IGRvbmUsIGFk anVzdGluZyB2eCBweFxuIik7Cj4gKwo+ICsJCWN0cmwtPmxpbmstPmFkanVzdF9sZXZlbHMoY3Ry bC0+bGluaywgbGlua19zdGF0dXMpOwo+ICsJCWRwX2N0cmxfdXBkYXRlX3Z4X3B4KGN0cmwpOwo+ ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfY3RybF9s aW5rX3JhdGVfZG93bl9zaGlmdChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7Cj4g KwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoIWN0cmwpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJc3dpdGNoIChjdHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlKSB7Cj4gKwljYXNl IERQX0xJTktfQldfOF8xOgo+ICsJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUgPSBE UF9MSU5LX0JXXzVfNDsKPiArCQlicmVhazsKPiArCWNhc2UgRFBfTElOS19CV181XzQ6Cj4gKwkJ Y3RybC0+bGluay0+bGlua19wYXJhbXMuYndfY29kZSA9IERQX0xJTktfQldfMl83Owo+ICsJCWJy ZWFrOwo+ICsJY2FzZSBEUF9MSU5LX0JXXzJfNzoKPiArCWNhc2UgRFBfTElOS19CV18xXzYyOgo+ ICsJZGVmYXVsdDoKPiArCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlID0gRFBfTElO S19CV18xXzYyOwo+ICsJCWJyZWFrOwo+ICsJfTsKPiArCj4gKwlwcl9kZWJ1ZygibmV3IGJ3IGNv ZGU9MHgleFxuIiwgY3RybC0+bGluay0+bGlua19wYXJhbXMuYndfY29kZSk7Cj4gKwo+ICsJcmV0 dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY3RybF9jbGVhcl90cmFpbmluZ19w YXR0ZXJuKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCj4gK3sKPiArCWRwX2N0cmxfdHJh aW5fcGF0dGVybl9zZXQoY3RybCwgMCk7CgoKRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFCgoK PiArCWRybV9kcF9saW5rX3RyYWluX2NoYW5uZWxfZXFfZGVsYXkoY3RybC0+cGFuZWwtPmRwY2Qp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2N0cmxfbGlua190cmFpbmluZ18yKHN0cnVjdCBk cF9jdHJsX3ByaXZhdGUgKmN0cmwpCj4gK3sKPiArCWludCB0cmllcyA9IDAsIHJldCA9IDA7Cj4g KwljaGFyIHBhdHRlcm47Cj4gKwlpbnQgY29uc3QgbWF4aW11bV9yZXRyaWVzID0gNTsKPiArCXU4 IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOwo+ICsKPiArCWRwX2N0cmxfc3RhdGVf Y3RybChjdHJsLCAwKTsKPiArCS8qIE1ha2Ugc3VyZSB0byBjbGVhciB0aGUgY3VycmVudCBwYXR0 ZXJuIGJlZm9yZSBzdGFydGluZyBhIG5ldyBvbmUgKi8KPiArCXdtYigpOwo+ICsKPiArCWlmIChk cm1fZHBfdHBzM19zdXBwb3J0ZWQoY3RybC0+cGFuZWwtPmRwY2QpKQo+ICsJCXBhdHRlcm4gPSBE UF9UUkFJTklOR19QQVRURVJOXzM7Cj4gKwllbHNlCj4gKwkJcGF0dGVybiA9IERQX1RSQUlOSU5H X1BBVFRFUk5fMjsKPiArCj4gKwlkcF9jdHJsX3VwZGF0ZV92eF9weChjdHJsKTsKPiArCWN0cmwt PmNhdGFsb2ctPnNldF9wYXR0ZXJuKGN0cmwtPmNhdGFsb2csIHBhdHRlcm4pOwo+ICsJZHBfY3Ry bF90cmFpbl9wYXR0ZXJuX3NldChjdHJsLCBwYXR0ZXJuIHwgRFBfUkVDT1ZFUkVEX0NMT0NLX09V VF9FTik7Cj4gKwo+ICsJZG8gIHsKCiAgICAgICAgZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgbWF4 aW11bV9yZXRyaWVzOyB0cmllcysrKQoKPiArCQlkcm1fZHBfbGlua190cmFpbl9jaGFubmVsX2Vx X2RlbGF5KGN0cmwtPnBhbmVsLT5kcGNkKTsKPiArCj4gKwkJcmV0ID0gZHBfY3RybF9yZWFkX2xp bmtfc3RhdHVzKGN0cmwsIGxpbmtfc3RhdHVzKTsKPiArCQlpZiAocmV0KQo+ICsJCQlicmVhazsK PiArCj4gKwkJaWYgKGRybV9kcF9jaGFubmVsX2VxX29rKGxpbmtfc3RhdHVzLAo+ICsJCQljdHJs LT5saW5rLT5saW5rX3BhcmFtcy5sYW5lX2NvdW50KSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWlm ICh0cmllcyA+IG1heGltdW1fcmV0cmllcykgewo+ICsJCQlyZXQgPSAtRVRJTUVET1VUOwo+ICsJ CQlicmVhazsKPiArCQl9Cj4gKwkJdHJpZXMrKzsKPiArCj4gKwkJY3RybC0+bGluay0+YWRqdXN0 X2xldmVscyhjdHJsLT5saW5rLCBsaW5rX3N0YXR1cyk7Cj4gKwkJZHBfY3RybF91cGRhdGVfdnhf cHgoY3RybCk7Cj4gKwl9IHdoaWxlICgxKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGRwX2N0cmxfbGlua190cmFpbihzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpj dHJsKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCXU4IGVuY29kaW5nID0gMHgxOwoKRFBfU0VU X0FOU0lfOEIxMEIKCj4gKwlzdHJ1Y3QgZHJtX2RwX2xpbmsgbGlua19pbmZvID0gezB9Owo+ICsK PiArCWN0cmwtPmxpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IDA7Cj4gKwljdHJsLT5saW5rLT5w aHlfcGFyYW1zLnZfbGV2ZWwgPSAwOwo+ICsKPiArCWRwX2N0cmxfY29uZmlnX2N0cmwoY3RybCk7 Cj4gKwo+ICsJbGlua19pbmZvLm51bV9sYW5lcyA9IGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxh bmVfY291bnQ7Cj4gKwlsaW5rX2luZm8ucmF0ZSA9IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0 ZSgKPiArCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlKTsKPiArCWxpbmtfaW5mby5j YXBhYmlsaXRpZXMgPSBjdHJsLT5wYW5lbC0+bGlua19pbmZvLmNhcGFiaWxpdGllczsKCkRyb3Ag dGhlIGhhbmQtcm9sbGVkIGN0cmwtPnBhbmVsLT5saW5rX2luZm8gYW5kIHVzZSBkcm1fZHBfbGlu a19wcm9iZSB0byBmaWxsIGluCmRybV9kcF9saW5rLgoKPiArCj4gKwlkcm1fZHBfbGlua19jb25m aWd1cmUoY3RybC0+YXV4LT5kcm1fYXV4LCAmbGlua19pbmZvKTsKPiArCWRybV9kcF9kcGNkX3dy aXRlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgRFBfTUFJTl9MSU5LX0NIQU5ORUxfQ09ESU5HX1NFVCwK PiArCQkJCSZlbmNvZGluZywgMSk7Cj4gKwo+ICsJcmV0ID0gZHBfY3RybF9saW5rX3RyYWluXzEo Y3RybCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJfZXJyKCJsaW5rIHRyYWluaW5nICMxIGZhaWxl ZFxuIik7CgpwcmludCByZXQKCj4gKwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJLyogcHJpbnQg c3VjY2VzcyBpbmZvIGFzIHRoaXMgaXMgYSByZXN1bHQgb2YgdXNlciBpbml0aWF0ZWQgYWN0aW9u ICovCj4gKwlwcl9pbmZvKCJsaW5rIHRyYWluaW5nICMxIHN1Y2Nlc3NmdWxcbiIpOwoKdGhpcyBz aG91bGQgYmUgZGVidWcgbG9nbGV2ZWwKCj4gKwo+ICsJcmV0ID0gZHBfY3RybF9saW5rX3RyYWlu aW5nXzIoY3RybCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJfZXJyKCJsaW5rIHRyYWluaW5nICMy IGZhaWxlZFxuIik7CgpwcmludCByZXQKCj4gKwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJLyog cHJpbnQgc3VjY2VzcyBpbmZvIGFzIHRoaXMgaXMgYSByZXN1bHQgb2YgdXNlciBpbml0aWF0ZWQg YWN0aW9uICovCj4gKwlwcl9pbmZvKCJsaW5rIHRyYWluaW5nICMyIHN1Y2Nlc3NmdWxcbiIpOwoK ZGVidWcgbG9nbGV2ZWwKCj4gKwo+ICtlbmQ6Cj4gKwlkcF9jdHJsX3N0YXRlX2N0cmwoY3RybCwg MCk7Cj4gKwkvKiBNYWtlIHN1cmUgdG8gY2xlYXIgdGhlIGN1cnJlbnQgcGF0dGVybiBiZWZvcmUg c3RhcnRpbmcgYSBuZXcgb25lICovCj4gKwl3bWIoKTsKClNhbWUgY29tbWVudHMgcmU6IHdtYgoK PiArCj4gKwlkcF9jdHJsX2NsZWFyX3RyYWluaW5nX3BhdHRlcm4oY3RybCk7Cj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2N0cmxfc2V0dXBfbWFpbl9saW5rKHN0cnVj dCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwsIGJvb2wgdHJhaW4pCj4gK3sKPiArCWJvb2wgbWFpbmxp bmtfcmVhZHkgPSBmYWxzZTsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWN0cmwtPmNhdGFsb2ct Pm1haW5saW5rX2N0cmwoY3RybC0+Y2F0YWxvZywgdHJ1ZSk7Cj4gKwo+ICsJcmV0ID0gY3RybC0+ bGluay0+cHNtX2NvbmZpZyhjdHJsLT5saW5rLAo+ICsJCSZjdHJsLT5wYW5lbC0+bGlua19pbmZv LCBmYWxzZSk7CgpUaGlzIGNhbiBmaXQgb24gb25lIGxpbmUKCj4gKwlpZiAocmV0KQo+ICsJCWdv dG8gZW5kOwoKQWxsIG9mIHRoZSAiZ290byBlbmQiJ3MgY2FuIGJlIHJlcGxhY2VkIHdpdGggInJl dHVybiByZXQiLCB0aGVuIGRlbGV0ZSB0aGUgZW5kCmxhYmVsLgoKPiArCj4gKwlpZiAoY3RybC0+ bGluay0+c2lua19yZXF1ZXN0ICYgRFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk4pCgpZb3Ug c2hvdWxkIHJlYWxseSBwcm90ZWN0IHNpbmtfcmVxdWVzdCB3aXRoIGEgbG9jaywgaXQncyByYWN5 LiBJJ20gdHJ5aW5nCnRvIGNhdGNoIHRoZSByYWNlIGNvbmRpdGlvbnMgd2hpbGUgSSByZXZpZXcs IGJ1dCBJJ2QgdXJnZSB5b3UgdG8gYXVkaXQgdGhlCmRyaXZlciBmb3Igb3RoZXIgcGxhY2VzIHRo YXQgbmVlZCBsb2NraW5nLgoKPiArCQlnb3RvIGVuZDsKPiArCj4gKwlpZiAoIXRyYWluKQo+ICsJ CWdvdG8gc2VuZF92aWRlbzsKCkluc3RlYWQgb2YgYWRkaW5nIHRoZSBsYWJlbCwganVzdCB3cmFw IHRoZSByZXNldCBhbmQgdHJhaW4gY2FsbHMgaW4gYW4KaWYgKHRyYWluKSB7fSBibG9jay4KCgo+ ICsKPiArCS8qCj4gKwkgKiBBcyBwYXJ0IG9mIHByZXZpb3VzIGNhbGxzLCBEUCBjb250cm9sbGVy IHN0YXRlIG1pZ2h0IGhhdmUKPiArCSAqIHRyYW5zaXRpb25lZCB0byBQVVNIX0lETEUuIEluIG9y ZGVyIHRvIHN0YXJ0IHRyYW5zbWl0dGluZyBhIGxpbmsKPiArCSAqIHRyYWluaW5nIHBhdHRlcm4s IHdlIGhhdmUgdG8gZmlyc3QgdG8gYSBEUCBzb2Z0d2FyZSByZXNldC4KCiJ3ZSBoYXZlIHRvIGZp cnN0IF9kb18gYS4uLiIKCj4gKwkgKi8KPiArCWN0cmwtPmNhdGFsb2ctPnJlc2V0KGN0cmwtPmNh dGFsb2cpOwo+ICsKPiArCXJldCA9IGRwX2N0cmxfbGlua190cmFpbihjdHJsKTsKPiArCWlmIChy ZXQpCj4gKwkJZ290byBlbmQ7Cj4gKwo+ICtzZW5kX3ZpZGVvOgo+ICsJLyoKPiArCSAqIFNldCB1 cCB0cmFuc2ZlciB1bml0IHZhbHVlcyBhbmQgc2V0IGNvbnRyb2xsZXIgc3RhdGUgdG8gc2VuZAo+ ICsJICogdmlkZW8uCj4gKwkgKi8KPiArCWRwX2N0cmxfc2V0dXBfdHJfdW5pdChjdHJsKTsKPiAr CWN0cmwtPmNhdGFsb2ctPnN0YXRlX2N0cmwoY3RybC0+Y2F0YWxvZywgU1RfU0VORF9WSURFTyk7 Cj4gKwo+ICsJZHBfY3RybF93YWl0NHZpZGVvX3JlYWR5KGN0cmwpOwoKQ2hlY2sgcmV0dXJuIHZh bHVlIHBsZWFzZQoKPiArCW1haW5saW5rX3JlYWR5ID0gY3RybC0+Y2F0YWxvZy0+bWFpbmxpbmtf cmVhZHkoY3RybC0+Y2F0YWxvZyk7Cj4gKwlwcl9kZWJ1ZygibWFpbmxpbmsgJXNcbiIsIG1haW5s aW5rX3JlYWR5ID8gIlJFQURZIiA6ICJOT1QgUkVBRFkiKTsKPiArZW5kOgo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY3RybF9zZXRfY2xvY2tfcmF0ZShzdHJ1Y3Qg ZHBfY3RybF9wcml2YXRlICpjdHJsLAo+ICsJCQkJICAgY2hhciAqbmFtZSwgdTMyIHJhdGUpCj4g K3sKPiArCXUzMiBudW0gPSBjdHJsLT5wYXJzZXItPm1wW0RQX0NUUkxfUE1dLm51bV9jbGs7Cj4g KwlzdHJ1Y3QgZHNzX2NsayAqY2ZnID0gY3RybC0+cGFyc2VyLT5tcFtEUF9DVFJMX1BNXS5jbGtf Y29uZmlnOwo+ICsKPiArCXdoaWxlIChudW0gJiYgc3RyY21wKGNmZy0+Y2xrX25hbWUsIG5hbWUp KSB7Cj4gKwkJbnVtLS07Cj4gKwkJY2ZnKys7Cj4gKwl9Cj4gKwo+ICsJcHJfZGVidWcoInNldHRp bmcgcmF0ZT0lZCBvbiBjbGs9JXNcbiIsIHJhdGUsIG5hbWUpOwo+ICsKPiArCWlmIChudW0pCj4g KwkJY2ZnLT5yYXRlID0gcmF0ZTsKPiArCWVsc2UKPiArCQlwcl9lcnIoIiVzIGNsb2NrIGNvdWxk IG5vdCBiZSBzZXQgd2l0aCByYXRlICVkXG4iLCBuYW1lLCByYXRlKTsKPiArfQoKSW5zdGVhZCBv ZiBkb2luZyBhbGwgb2YgdGhpcyB3b3JrLCBqdXN0IHN0b3JlIHBvaW50ZXJzIHRvIHRoZSBsaW5r IGFuZCBwaXhlbApjbG9jayB3aGVuIHlvdSBwYXJzZSB0aGUgZHQuIFRoYXQgd2F5IHlvdSBjYW4g anVzdCBhY2Nlc3MgdGhlbSBkaXJlY3RseSBpbgpkcF9jdHJsX2VuYWJsZV9tYWlubGlua19jbG9j a3MuCgo+ICsKPiArc3RhdGljIGludCBkcF9jdHJsX2VuYWJsZV9tYWlubGlua19jbG9ja3Moc3Ry dWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPiArewo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJ Y3RybC0+cG93ZXItPnNldF9waXhlbF9jbGtfcGFyZW50KGN0cmwtPnBvd2VyKTsKPiArCj4gKwlk cF9jdHJsX3NldF9jbG9ja19yYXRlKGN0cmwsICJjdHJsX2xpbmtfY2xrIiwKPiArCQlkcm1fZHBf YndfY29kZV90b19saW5rX3JhdGUoY3RybC0+bGluay0+bGlua19wYXJhbXMuYndfY29kZSkpOwo+ ICsKPiArCWRwX2N0cmxfc2V0X2Nsb2NrX3JhdGUoY3RybCwgImN0cmxfcGl4ZWxfY2xrIiwgY3Ry bC0+cGl4ZWxfcmF0ZSk7Cj4gKwo+ICsJcmV0ID0gY3RybC0+cG93ZXItPmNsa19lbmFibGUoY3Ry bC0+cG93ZXIsIERQX0NUUkxfUE0sIHRydWUpOwo+ICsJaWYgKHJldCkgewo+ICsJCXByX2Vycigi VW5hYmxlZCB0byBzdGFydCBsaW5rIGNsb2Nrc1xuIik7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiAr CX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2N0cmxfZGlz YWJsZV9tYWlubGlua19jbG9ja3Moc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPiArewo+ ICsJcmV0dXJuIGN0cmwtPnBvd2VyLT5jbGtfZW5hYmxlKGN0cmwtPnBvd2VyLCBEUF9DVFJMX1BN LCBmYWxzZSk7Cj4gK30KClRoaXMgZnVuY3Rpb24gaXNuJ3QgbmVjZXNhcnkgKGV2ZW4gbGVzcyBz byB3aGVuIGFsbCBvZiB0aGUgY2F0YWxvZyBhYnN0cmFjdGlvbnMKYXJlIGdvbmUpLgoKPiArCj4g K3N0YXRpYyBpbnQgZHBfY3RybF9ob3N0X2luaXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwsIGJv b2wgZmxpcCkKPiArewo+ICsJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPiArCXN0cnVj dCBkcF9jYXRhbG9nX2N0cmwgKmNhdGFsb2c7Cj4gKwo+ICsJaWYgKCFkcF9jdHJsKSB7Cj4gKwkJ cHJfZXJyKCJJbnZhbGlkIGlucHV0IGRhdGFcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJ fQo+ICsKPiArCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJp dmF0ZSwgZHBfY3RybCk7Cj4gKwo+ICsJY3RybC0+b3JpZW50YXRpb24gPSBmbGlwOwo+ICsJY2F0 YWxvZyA9IGN0cmwtPmNhdGFsb2c7Cj4gKwo+ICsJY2F0YWxvZy0+dXNiX3Jlc2V0KGN0cmwtPmNh dGFsb2csIGZsaXApOwo+ICsJY2F0YWxvZy0+cGh5X3Jlc2V0KGN0cmwtPmNhdGFsb2cpOwo+ICsJ Y2F0YWxvZy0+ZW5hYmxlX2lycShjdHJsLT5jYXRhbG9nLCB0cnVlKTsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRwX2N0cmxfaG9zdF9kZWluaXQoKSAtIFVuaW5pdGlh bGl6ZSBEUCBjb250cm9sbGVyCj4gKyAqIEBjdHJsOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEK PiArICoKPiArICogUGVyZm9ybSByZXF1aXJlZCBzdGVwcyB0byB1bmluaXRpYWxpemUgRFAgY29u dHJvbGxlcgo+ICsgKiBhbmQgaXRzIHJlc291cmNlcy4KPiArICovCj4gK3N0YXRpYyB2b2lkIGRw X2N0cmxfaG9zdF9kZWluaXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4gK3sKPiArCXN0cnVj dCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7Cj4gKwo+ICsJaWYgKCFkcF9jdHJsKSB7Cj4gKwkJcHJf ZXJyKCJJbnZhbGlkIGlucHV0IGRhdGFcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlj dHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0 cmwpOwo+ICsKPiArCWN0cmwtPmNhdGFsb2ctPmVuYWJsZV9pcnEoY3RybC0+Y2F0YWxvZywgZmFs c2UpOwo+ICsKPiArCXByX2RlYnVnKCJIb3N0IGRlaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XG4i KTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgZHBfY3RybF91c2VfZml4ZWRfbnZpZChzdHJ1Y3Qg ZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7Cj4gKwl1OCAqZHBjZCA9IGN0cmwtPnBhbmVsLT5k cGNkOwo+ICsKPiArCS8qCj4gKwkgKiBGb3IgYmV0dGVyIGludGVyb3AgZXhwZXJpZW5jZSwgdXNl ZCBhIGZpeGVkIE5WSUQ9MHg4MDAwCj4gKwkgKiB3aGVuZXZlciBjb25uZWN0ZWQgdG8gYSBWR0Eg ZG9uZ2xlIGRvd25zdHJlYW0uCj4gKwkgKi8KPiArCWlmIChkcGNkW0RQX0RPV05TVFJFQU1QT1JU X1BSRVNFTlRdICYgRFBfRFdOX1NUUk1fUE9SVF9QUkVTRU5UKSB7Cj4gKwkJdTggdHlwZSA9IGRw Y2RbRFBfRE9XTlNUUkVBTVBPUlRfUFJFU0VOVF0gJgo+ICsJCQlEUF9EV05fU1RSTV9QT1JUX1RZ UEVfTUFTSzsKPiArCQlpZiAodHlwZSA9PSBEUF9EV05fU1RSTV9QT1JUX1RZUEVfQU5BTE9HKQo+ ICsJCQlyZXR1cm4gdHJ1ZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KCkZvciB0 aGlzLCB5b3Ugc2hvdWxkIHVzZSB0aGUgRFBfRFBDRF9RVUlSS19DT05TVEFOVF9OIHF1aXJrIGFu ZApkcm1fZHBfaGFzX3F1aXJrKCkgaW5zdGVhZC4KCgo+ICsKPiArc3RhdGljIGludCBkcF9jdHJs X2xpbmtfbWFpbnRlbmFuY2Uoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPiArewo+ICsJ aW50IHJldCA9IDA7Cj4gKwo+ICsJY3RybC0+ZHBfY3RybC5wdXNoX2lkbGUoJmN0cmwtPmRwX2N0 cmwpOwo+ICsJY3RybC0+ZHBfY3RybC5yZXNldCgmY3RybC0+ZHBfY3RybCk7Cj4gKwo+ICsJY3Ry bC0+cGl4ZWxfcmF0ZSA9IGN0cmwtPnBhbmVsLT5waW5mby5waXhlbF9jbGtfa2h6Owo+ICsKPiAr CWRvIHsKPiArCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKPiArCQkJLyogdHJ5IHdpdGggbG93ZXIg bGluayByYXRlICovCj4gKwkJCWRwX2N0cmxfbGlua19yYXRlX2Rvd25fc2hpZnQoY3RybCk7Cj4g Kwo+ICsJCQljdHJsLT5jYXRhbG9nLT5tYWlubGlua19jdHJsKGN0cmwtPmNhdGFsb2csIGZhbHNl KTsKPiArCQl9Cj4gKwo+ICsJCWN0cmwtPmNhdGFsb2ctPnBoeV9sYW5lX2NmZyhjdHJsLT5jYXRh bG9nLAo+ICsJCQljdHJsLT5vcmllbnRhdGlvbiwgY3RybC0+bGluay0+bGlua19wYXJhbXMubGFu ZV9jb3VudCk7Cj4gKwo+ICsJCS8qCj4gKwkJICogRGlzYWJsZSBhbmQgcmUtZW5hYmxlIHRoZSBt YWlubGluayBjbG9jayBzaW5jZSB0aGUKPiArCQkgKiBsaW5rIGNsb2NrIG1pZ2h0IGhhdmUgYmVl biBhZGp1c3RlZCBhcyBwYXJ0IG9mIHRoZQo+ICsJCSAqIGxpbmsgbWFpbnRlbmFuY2UuCj4gKwkJ ICovCj4gKwkJZHBfY3RybF9kaXNhYmxlX21haW5saW5rX2Nsb2NrcyhjdHJsKTsKClJldHVybiB2 YWx1ZSBzaG91bGQgYmUgY2hlY2tlZAoKCkJlbG93IHlvdSBoYXZlOgoKKwkJLyogaHcgcmVjb21t ZW5kZWQgZGVsYXkgYmVmb3JlIHJlLWVuYWJsaW5nIGNsb2NrcyAqLworCQltc2xlZXAoMjApOwoK QmV0d2VlbiB0aGUgZGlzYWJsZSBhbmQgZW5hYmxlLCBzbyB5b3Ugc2hvdWxkIHByb2JhYmx5IGhh dmUgdGhhdCBoZXJlIHRvbz8KCj4gKwo+ICsJCXJldCA9IGRwX2N0cmxfZW5hYmxlX21haW5saW5r X2Nsb2NrcyhjdHJsKTsKPiArCQlpZiAocmV0KQo+ICsJCQljb250aW51ZTsKCkRvIHlvdSByZWFs bHkgd2FudCB0byBjb250aW51ZSBoZXJlPyBTZWVtcyBsaWtlIHlvdSBjb3VsZCBnZXQgaW50byBh biBpbmZpbml0ZQpsb29wIHByZXR0eSBlYXNpbHkgaW4gdGhlIC1FSU5WQUwgY2FzZS4KCj4gKwo+ ICsJCWRwX2N0cmxfY29uZmlndXJlX3NvdXJjZV9wYXJhbXMoY3RybCk7Cj4gKwo+ICsJCWN0cmwt PmNhdGFsb2ctPmNvbmZpZ19tc2EoY3RybC0+Y2F0YWxvZywKPiArCQkJZHJtX2RwX2J3X2NvZGVf dG9fbGlua19yYXRlKAo+ICsJCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlKSwKPiAr CQkJY3RybC0+cGl4ZWxfcmF0ZSwgZHBfY3RybF91c2VfZml4ZWRfbnZpZChjdHJsKSk7Cj4gKwo+ ICsJCXJlaW5pdF9jb21wbGV0aW9uKCZjdHJsLT5pZGxlX2NvbXApOwoKQXJlIHlvdSBndWFyYW50 ZWVkIHRoYXQgdGhpcyBkb2Vzbid0IHJhY2Ugd2l0aCBvdGhlciBpZGxlX2NvbXAgdXNlcz8KCj4g Kwo+ICsJCXJldCA9IGRwX2N0cmxfc2V0dXBfbWFpbl9saW5rKGN0cmwsIHRydWUpOwo+ICsJfSB3 aGlsZSAocmV0ID09IC1FQUdBSU4pOwoKVGhlIGRvL3doaWxlIGlzIGEgYml0IGF3a3dhcmQsIGVz cGVjaWFsbHkgc2luY2UgaXQgc3RhcnRzIHdpdGggYSBjb25kaXRpb25hbApibG9jayB0aGF0IGNh bid0IHBvc3NpYmx5IGJlIHRydWUgb24gdGhlIGZpcnN0IGl0ZXJhdGlvbi4gSG93IGFib3V0OgoK CWZvciAodHJpZXMgPSAwOyB0cmllcyA8IG1heF90cmllczsgdHJpZXMrKykgewoJCWN0cmwtPmNh dGFsb2ctPnBoeV9sYW5lX2NmZyhjdHJsLT5jYXRhbG9nLAoJCQljdHJsLT5vcmllbnRhdGlvbiwg Y3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudCk7CgoJCS8qCgkJICogRGlzYWJsZSBh bmQgcmUtZW5hYmxlIHRoZSBtYWlubGluayBjbG9jayBzaW5jZSB0aGUKCQkgKiBsaW5rIGNsb2Nr IG1pZ2h0IGhhdmUgYmVlbiBhZGp1c3RlZCBhcyBwYXJ0IG9mIHRoZQoJCSAqIGxpbmsgbWFpbnRl bmFuY2UuCgkJICovCgkJcmV0ID0gZHBfY3RybF9kaXNhYmxlX21haW5saW5rX2Nsb2NrcyhjdHJs KTsKICAgICAgICAgICAgICAgIGlmIChyZXQpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biByZXQ7CgoJCXJldCA9IGRwX2N0cmxfZW5hYmxlX21haW5saW5rX2Nsb2NrcyhjdHJsKTsKCQlp ZiAocmV0KQoJCQlyZXR1cm4gcmV0OwoKCQlkcF9jdHJsX2NvbmZpZ3VyZV9zb3VyY2VfcGFyYW1z KGN0cmwpOwoKCQljdHJsLT5jYXRhbG9nLT5jb25maWdfbXNhKGN0cmwtPmNhdGFsb2csCgkJCWRy bV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZSgKCQkJY3RybC0+bGluay0+bGlua19wYXJhbXMuYndf Y29kZSksCgkJCWN0cmwtPnBpeGVsX3JhdGUsIGRwX2N0cmxfdXNlX2ZpeGVkX252aWQoY3RybCkp OwoKCQlyZWluaXRfY29tcGxldGlvbigmY3RybC0+aWRsZV9jb21wKTsKCgkJcmV0ID0gZHBfY3Ry bF9zZXR1cF9tYWluX2xpbmsoY3RybCwgdHJ1ZSk7CgkJaWYgKHJldCAhPSAtRUFHQUlOKQogICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwoKICAgICAgICAgICAgICAgIC8qIHRyeSB3 aXRoIGxvd2VyIGxpbmsgcmF0ZSAqLwogICAgICAgICAgICAgICAgZHBfY3RybF9saW5rX3JhdGVf ZG93bl9zaGlmdChjdHJsKTsKCiAgICAgICAgICAgICAgICBjdHJsLT5jYXRhbG9nLT5tYWlubGlu a19jdHJsKGN0cmwtPmNhdGFsb2csIGZhbHNlKTsKCX0KCiAgICAgICAgcmV0dXJuIC1FVElNRURP VVQ7CgoKVGhlcmUncyBhIGxvdCBvZiBzaW1pbGFyaXR5IGJldHdlZW4gdGhpcyBjb2RlIGFuZCBk cF9jdHJsX29uLiBJZiB0aGUgY29kZSB3ZXJlCnNoYXJlZCwgd2Ugd291bGRuJ3QgaGF2ZSB0aGUg bWlzc2luZyAyMG1zIGRlbGF5IGFib3ZlLiBTbyBjYW4geW91IHBsZWFzZSBwdWxsCnRoZSBjb21t b24gYml0cyB3aGljaCBbcmUtXWluaXRpYWxpemUgdGhlIGxpbmsgaW50byBhIGhlbHBlciBmdW5j dGlvbiB0aGF0IHlvdQpjYWxsIGZyb20gYm90aCBmdW5jdGlvbnM/Cgo+ICsKPiArCXJldHVybiBy ZXQ7CgpJdCdzIG5pY2UgdGhhdCB3ZSByZXR1cm4gYSB2YWx1ZSBoZXJlLCBidXQgaXQncyBuZXZl ciBjaGVja2VkIGJ5IG91ciBjYWxsZXJzIDooCgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9j dHJsX3Byb2Nlc3NfcGh5X3Rlc3RfcmVxdWVzdChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJs KQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoIWN0cmwtPmxpbmstPnBoeV9wYXJh bXMucGh5X3Rlc3RfcGF0dGVybl9zZWwpIHsKPiArCQlwcl9kZWJ1Zygibm8gdGVzdCBwYXR0ZXJu IHNlbGVjdGVkIGJ5IHNpbmtcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlwcl9kZWJ1 Zygic3RhcnRcbiIpOwoKVGhpcyBhbmQgdGhlICJlbmQiIGRlYnVnIHN0YXRlbWVudHMgc2hvdWxk IGJlIHJlbW92ZWQKCj4gKwo+ICsJY3RybC0+ZHBfY3RybC5wdXNoX2lkbGUoJmN0cmwtPmRwX2N0 cmwpOwo+ICsJLyoKPiArCSAqIFRoZSBnbG9iYWwgcmVzZXQgd2lsbCBuZWVkIERQIGxpbmsgcmFs YXRlZCBjbG9ja3MgdG8gYmUKCnMvcmVsYXRlZC9yYWxhdGVkLwoKPiArCSAqIHJ1bm5pbmcuIEFk ZCB0aGUgZ2xvYmFsIHJlc2V0IGp1c3QgYmVmb3JlIGRpc2FibGluZyB0aGUKPiArCSAqIGxpbmsg Y2xvY2tzIGFuZCBjb3JlIGNsb2Nrcy4KPiArCSAqLwo+ICsJY3RybC0+ZHBfY3RybC5yZXNldCgm Y3RybC0+ZHBfY3RybCk7Cj4gKwljdHJsLT5kcF9jdHJsLm9mZigmY3RybC0+ZHBfY3RybCk7Cj4g Kwo+ICsJcmV0ID0gY3RybC0+ZHBfY3RybC5vbigmY3RybC0+ZHBfY3RybCk7Cj4gKwlpZiAocmV0 KQo+ICsJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBEUCBjb250cm9sbGVyXG4iKTsKClBsZWFz ZSBwcm9wYWdhdGUgZXJyb3JzIGluc3RlYWQgb2Ygc3dhbGxvd2luZyB0aGVtLgoKPiArCj4gKwlw cl9kZWJ1ZygiZW5kXG4iKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY3RybF9zZW5kX3Bo eV90ZXN0X3BhdHRlcm4oc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPiArewo+ICsJYm9v bCBzdWNjZXNzID0gZmFsc2U7Cj4gKwl1MzIgcGF0dGVybl9zZW50ID0gMHgwOwo+ICsJdTMyIHBh dHRlcm5fcmVxdWVzdGVkID0gY3RybC0+bGluay0+cGh5X3BhcmFtcy5waHlfdGVzdF9wYXR0ZXJu X3NlbDsKPiArCj4gKwlwcl9kZWJ1ZygicmVxdWVzdDogJXNcbiIsCj4gKwkJCWRwX2xpbmtfZ2V0 X3BoeV90ZXN0X3BhdHRlcm4ocGF0dGVybl9yZXF1ZXN0ZWQpKTsKPiArCj4gKwljdHJsLT5jYXRh bG9nLT51cGRhdGVfdnhfcHgoY3RybC0+Y2F0YWxvZywKPiArCQkJY3RybC0+bGluay0+cGh5X3Bh cmFtcy52X2xldmVsLAo+ICsJCQljdHJsLT5saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwpOwo+ICsJ Y3RybC0+Y2F0YWxvZy0+c2VuZF9waHlfcGF0dGVybihjdHJsLT5jYXRhbG9nLCBwYXR0ZXJuX3Jl cXVlc3RlZCk7Cj4gKwljdHJsLT5saW5rLT5zZW5kX3Rlc3RfcmVzcG9uc2UoY3RybC0+bGluayk7 Cj4gKwo+ICsJcGF0dGVybl9zZW50ID0gY3RybC0+Y2F0YWxvZy0+cmVhZF9waHlfcGF0dGVybihj dHJsLT5jYXRhbG9nKTsKPiArCj4gKwlzd2l0Y2ggKHBhdHRlcm5fc2VudCkgewo+ICsJY2FzZSBN Ul9MSU5LX1RSQUlOSU5HMToKPiArCQlpZiAocGF0dGVybl9yZXF1ZXN0ZWQgPT0KPiArCQkJCURQ X1RFU1RfUEhZX1BBVFRFUk5fRDEwXzJfTk9fU0NSQU1CTElORykKPiArCQkJc3VjY2VzcyA9IHRy dWU7CgoKc3VjY2VzcyA9IHBhdHRlcm5fcmVxdWVzdGVkID09IERQX0xJTktfUVVBTF9QQVRURVJO XzExX0QxMF8yOwoKU2FtZSBjYW4gYmUgZG9uZSBiZWxvdy4KCgo+ICsJCWJyZWFrOwo+ICsJY2Fz ZSBNUl9MSU5LX1NZTUJPTF9FUk06Cj4gKwkJaWYgKChwYXR0ZXJuX3JlcXVlc3RlZCA9PQo+ICsJ CQkJRFBfVEVTVF9QSFlfUEFUVEVSTl9TWU1CT0xfRVJSX01FQVNVUkVNRU5UX0NOVCkKPiArCQkJ fHwgKHBhdHRlcm5fcmVxdWVzdGVkID09Cj4gKwkJCQlEUF9URVNUX1BIWV9QQVRURVJOX0hCUjJf Q1RTX0VZRV9QQVRURVJOKSkKPiArCQkJc3VjY2VzcyA9IHRydWU7Cj4gKwkJYnJlYWs7Cj4gKwlj YXNlIE1SX0xJTktfUFJCUzc6Cj4gKwkJaWYgKHBhdHRlcm5fcmVxdWVzdGVkID09IERQX1RFU1Rf UEhZX1BBVFRFUk5fUFJCUzcpCj4gKwkJCXN1Y2Nlc3MgPSB0cnVlOwo+ICsJCWJyZWFrOwo+ICsJ Y2FzZSBNUl9MSU5LX0NVU1RPTTgwOgo+ICsJCWlmIChwYXR0ZXJuX3JlcXVlc3RlZCA9PQo+ICsJ CQkJRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VTVE9NX1BBVFRFUk4pCj4gKwkJCXN1Y2Nl c3MgPSB0cnVlOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlzdWNjZXNzID0gZmFsc2U7 Cj4gKwkJcmV0dXJuOwo+ICsJfQoKSSBmZWVsIGxpa2UgeW91IHNob3VsZCByZXR1cm4gc3VjY2Vz cyAob3IgYSByZXQpLiBBcyBpdCBpcywgdGhpcyBkb2Vzbid0IGRvIG11Y2guCgo+ICsKPiArCXBy X2RlYnVnKCIlczogJXNcbiIsIHN1Y2Nlc3MgPyAic3VjY2VzcyIgOiAiZmFpbGVkIiwKPiArCQkJ ZHBfbGlua19nZXRfcGh5X3Rlc3RfcGF0dGVybihwYXR0ZXJuX3JlcXVlc3RlZCkpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX2hhbmRsZV9zaW5rX3JlcXVlc3Qoc3RydWN0IGRwX2N0 cmwgKmRwX2N0cmwpCj4gK3sKPiArCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7Cj4gKwl1 MzIgc2lua19yZXF1ZXN0ID0gMHgwOwo+ICsKPiArCWlmICghZHBfY3RybCkgewo+ICsJCXByX2Vy cigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWN0cmwgPSBj b250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7Cj4g KwlzaW5rX3JlcXVlc3QgPSBjdHJsLT5saW5rLT5zaW5rX3JlcXVlc3Q7Cj4gKwo+ICsJaWYgKHNp bmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKSB7Cj4gKwkJcHJfaW5m bygiUEhZX1RFU1RfUEFUVEVSTiByZXF1ZXN0XG4iKTsKCkRvd25ncmFkZSB0byBERUJVRyBsZXZl bCBwbGVhc2UKCj4gKwkJZHBfY3RybF9wcm9jZXNzX3BoeV90ZXN0X3JlcXVlc3QoY3RybCk7Cj4g Kwl9Cj4gKwo+ICsJaWYgKHNpbmtfcmVxdWVzdCAmIERQX0xJTktfU1RBVFVTX1VQREFURUQpCj4g KwkJZHBfY3RybF9saW5rX21haW50ZW5hbmNlKGN0cmwpOwoKQ2hlY2sgcmV0dXJuIHZhbHVlCgo+ ICsKPiArCWlmIChzaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfVFJBSU5JTkcpIHsKPiArCQlj dHJsLT5saW5rLT5zZW5kX3Rlc3RfcmVzcG9uc2UoY3RybC0+bGluayk7Cj4gKwkJZHBfY3RybF9s aW5rX21haW50ZW5hbmNlKGN0cmwpOwoKQ2hlY2sgcmV0dXJuIHZhbHVlCgo+ICsJfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX3Jlc2V0KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwo+ICsKPiArCWlmICghZHBfY3Ry bCkgewo+ICsJCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwo+ICsJCXJldHVybjsKPiArCX0K PiArCj4gKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZh dGUsIGRwX2N0cmwpOwo+ICsJY3RybC0+Y2F0YWxvZy0+cmVzZXQoY3RybC0+Y2F0YWxvZyk7Cj4g K30KCkkgdGhpbmsgdGhpcyBmdW5jdGlvbiBnb2VzIGF3YXkgd2l0aCBhbGwgb2YgdGhlIGNhdGFs b2cgc3R1ZmYgcmVtb3ZlZC4KCj4gKwo+ICtzdGF0aWMgaW50IGRwX2N0cmxfb24oc3RydWN0IGRw X2N0cmwgKmRwX2N0cmwpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfY3RybF9w cml2YXRlICpjdHJsOwo+ICsJdTMyIHJhdGUgPSAwOwo+ICsJdTMyIGxpbmtfdHJhaW5fbWF4X3Jl dHJpZXMgPSAxMDA7CgpUaGlzIGFtb3VudCBpcyBleGNlc3NpdmUsIDUgdGltZXMgc2hvdWxkIHN1 ZmZpY2UgKHVubGVzcyB5b3UgaGF2ZSBkYXRhIHRoYXQKc3VnZ2VzdHMgb3RoZXJ3aXNlKS4KCj4g Kwl1MzIgY29uc3QgcGh5X2N0c19waXhlbF9jbGtfa2h6ID0gMTQ4NTAwOwoKU2hvdWxkIHRoaXMg YmUgYSAjZGVmaW5lIGluIGRybV9kcF9oZWxwZXI/Cgo+ICsKPiArCWlmICghZHBfY3RybCkgewo+ ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwljdHJsID0gY29u dGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwo+ICsK PiArCWF0b21pY19zZXQoJmN0cmwtPmFib3J0ZWQsIDApOwoKV2h5IGlzIHRoaXMgbmVlZGVkIG92 ZXIgaXNfY29ubmVjdGVkPyBJdCBzZWVtcyBsaWtlIGlmIHlvdSBoYWQgcHJvcGVyIGxvY2tpbmcK YXJvdW5kIGlzX2Nvbm5lY3RlZCAod2hpY2ggSSB0aGluayBpcyBuZWNlc3NhcnkpLCB5b3UgY291 bGQganVzdCBhY3F1aXJlIHRoZSBsb2NrCmFuZCB0cnkgdGhlIHRyYWluaW5nLiBJZiBpdCBmYWls cyBiL2Mgc29tZW9uZSB1bnBsdWdnZWQgdGhlIGNhYmxlLCB0aGF0J3MgcXVpdGUKT2suCgo+ICsJ cmF0ZSA9IGN0cmwtPnBhbmVsLT5saW5rX2luZm8ucmF0ZTsKPiArCj4gKwljdHJsLT5wb3dlci0+ Y2xrX2VuYWJsZShjdHJsLT5wb3dlciwgRFBfQ09SRV9QTSwgdHJ1ZSk7Cj4gKwljdHJsLT5jYXRh bG9nLT5ocGRfY29uZmlnKGN0cmwtPmNhdGFsb2csIHRydWUpOwo+ICsKPiArCWlmIChjdHJsLT5s aW5rLT5zaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikgewo+ICsJ CXByX2RlYnVnKCJ1c2luZyBwaHkgdGVzdCBsaW5rIHBhcmFtZXRlcnNcbiIpOwo+ICsJCWlmICgh Y3RybC0+cGFuZWwtPnBpbmZvLnBpeGVsX2Nsa19raHopCj4gKwkJCWN0cmwtPnBpeGVsX3JhdGUg PSBwaHlfY3RzX3BpeGVsX2Nsa19raHo7Cj4gKwl9IGVsc2Ugewo+ICsJCWN0cmwtPmxpbmstPmxp bmtfcGFyYW1zLmJ3X2NvZGUgPQo+ICsJCQlkcm1fZHBfbGlua19yYXRlX3RvX2J3X2NvZGUocmF0 ZSk7Cj4gKwkJY3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudCA9Cj4gKwkJCWN0cmwt PnBhbmVsLT5saW5rX2luZm8ubnVtX2xhbmVzOwo+ICsJCWN0cmwtPnBpeGVsX3JhdGUgPSBjdHJs LT5wYW5lbC0+cGluZm8ucGl4ZWxfY2xrX2toejsKPiArCX0KPiArCj4gKwlwcl9kZWJ1ZygiYndf Y29kZT0lZCwgbGFuZV9jb3VudD0lZCwgcGl4ZWxfcmF0ZT0lZFxuIiwKPiArCQljdHJsLT5saW5r LT5saW5rX3BhcmFtcy5id19jb2RlLAo+ICsJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVf Y291bnQsIGN0cmwtPnBpeGVsX3JhdGUpOwo+ICsKPiArCWN0cmwtPmNhdGFsb2ctPnBoeV9sYW5l X2NmZyhjdHJsLT5jYXRhbG9nLAo+ICsJCQljdHJsLT5vcmllbnRhdGlvbiwgY3RybC0+bGluay0+ bGlua19wYXJhbXMubGFuZV9jb3VudCk7Cj4gKwo+ICsJcmMgPSBkcF9jdHJsX2VuYWJsZV9tYWlu bGlua19jbG9ja3MoY3RybCk7Cj4gKwlpZiAocmMpCj4gKwkJZ290byBlbmQ7Cj4gKwo+ICsJcmVp bml0X2NvbXBsZXRpb24oJmN0cmwtPmlkbGVfY29tcCk7CgpBcmUgeW91IGd1YXJhbnRlZWQgdGhh dCB0aGlzIGRvZXNuJ3QgcmFjZSB3aXRoIG90aGVyIGlkbGVfY29tcCB1c2VzIChvciBvdGhlcgpk cF9jdHJsX29uIGNhbGxlcnMpPwoKPiArCj4gKwlkcF9jdHJsX2NvbmZpZ3VyZV9zb3VyY2VfcGFy YW1zKGN0cmwpOwo+ICsKPiArCXdoaWxlICgtLWxpbmtfdHJhaW5fbWF4X3JldHJpZXMgJiYgIWF0 b21pY19yZWFkKCZjdHJsLT5hYm9ydGVkKSkgewo+ICsJCWN0cmwtPmNhdGFsb2ctPmNvbmZpZ19t c2EoY3RybC0+Y2F0YWxvZywKPiArCQkJZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKAo+ICsJ CQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlKSwKPiArCQkJY3RybC0+cGl4ZWxfcmF0 ZSwgZHBfY3RybF91c2VfZml4ZWRfbnZpZChjdHJsKSk7Cj4gKwo+ICsJCXJjID0gZHBfY3RybF9z ZXR1cF9tYWluX2xpbmsoY3RybCwgdHJ1ZSk7Cj4gKwkJaWYgKCFyYykKPiArCQkJYnJlYWs7Cj4g Kwo+ICsJCS8qIHRyeSB3aXRoIGxvd2VyIGxpbmsgcmF0ZSAqLwo+ICsJCWRwX2N0cmxfbGlua19y YXRlX2Rvd25fc2hpZnQoY3RybCk7Cj4gKwo+ICsJCWN0cmwtPmNhdGFsb2ctPm1haW5saW5rX2N0 cmwoY3RybC0+Y2F0YWxvZywgZmFsc2UpOwo+ICsKPiArCQlkcF9jdHJsX2Rpc2FibGVfbWFpbmxp bmtfY2xvY2tzKGN0cmwpOwoKQ2hlY2sgcmV0dXJuIGNvZGUKCj4gKwkJLyogaHcgcmVjb21tZW5k ZWQgZGVsYXkgYmVmb3JlIHJlLWVuYWJsaW5nIGNsb2NrcyAqLwo+ICsJCW1zbGVlcCgyMCk7Cj4g Kwo+ICsJCWRwX2N0cmxfZW5hYmxlX21haW5saW5rX2Nsb2NrcyhjdHJsKTsKCkNoZWNrIHJldHVy biBjb2RlCgo+ICsJfQoKU2FtZSBjb21tZW50IGhlcmUgYXMgaW4gZHBfY3RybF9saW5rX21haW50 ZW5hbmNlKCksIHdlIHNob3VsZCBwdWxsIG91dCB0aGUKY29tbW9uIGNvZGUgYW5kIHB1dCBpdCBp biBhIGhlbHBlci4KCj4gKwo+ICsJaWYgKGN0cmwtPmxpbmstPnNpbmtfcmVxdWVzdCAmIERQX1RF U1RfTElOS19QSFlfVEVTVF9QQVRURVJOKQoKVGhpcyBpcyByYWN5LCBzaW5rX3JlcXVlc3QgY291 bGQgY2hhbmdlIGJldHdlZW4gdGhlIGNoZWNrIGFib3ZlIGFuZCBoZXJlLgoKPiArCQlkcF9jdHJs X3NlbmRfcGh5X3Rlc3RfcGF0dGVybihjdHJsKTsKPiArCj4gKwlwcl9kZWJ1ZygiRW5kLVxuIik7 CgpQbGVhc2UgcmVtb3ZlCgo+ICsKPiArZW5kOgo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBkcF9jdHJsX29mZihzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkKPiArewo+ICsJ c3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPiArCj4gKwlpZiAoIWRwX2N0cmwpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0 cmxfcHJpdmF0ZSwgZHBfY3RybCk7Cj4gKwo+ICsJY3RybC0+Y2F0YWxvZy0+bWFpbmxpbmtfY3Ry bChjdHJsLT5jYXRhbG9nLCBmYWxzZSk7Cj4gKwljdHJsLT5jYXRhbG9nLT5yZXNldChjdHJsLT5j YXRhbG9nKTsKPiArCj4gKwkvKiBNYWtlIHN1cmUgRFAgaXMgZGlzYWJsZWQgYmVmb3JlIGNsayBk aXNhYmxlICovCj4gKwl3bWIoKTsKCnJlYWRsL3dtYiBuaXQKCj4gKwo+ICsJZHBfY3RybF9kaXNh YmxlX21haW5saW5rX2Nsb2NrcyhjdHJsKTsKCkNoZWNrIGFuZCBwcm9wYWdhdGUgcmV0dXJuIHZh bHVlCgo+ICsKPiArCXByX2RlYnVnKCJEUCBvZmYgZG9uZVxuIik7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGRwX2N0cmxfaXNyKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwo+ICsKPiArCWlmICghZHBfY3RybCkKPiArCQlyZXR1 cm47Cj4gKwo+ICsJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3RybF9w cml2YXRlLCBkcF9jdHJsKTsKPiArCj4gKwljdHJsLT5jYXRhbG9nLT5nZXRfaW50ZXJydXB0KGN0 cmwtPmNhdGFsb2cpOwoKVGhpcyBzaG91bGQgcmV0dXJuIHRoZSBpc3IgaW5zdGVhZCBvZiBzdG9y ZSBpdCBpbiBjdHJsLT5jYXRhbG9nLT5pc3IsIHNpbmNlIHRoYXQKY291bGQgcG90ZW50aWFsbHkg YmUgb3ZlcndyaXR0ZW4gYWZ0ZXIgdGhpcyBmdW5jdGlvbiBhY2tzIHRoZSBjdXJyZW50CmludGVy cnVwdHMuCgooQWxzbywgaXQncyBvbmx5IHVzZWQgaW4gdGhpcyBmdW5jdGlvbiwgc28gdGhlcmUn cyBubyBuZWVkIHRvIHN0b3JlIGl0KS4gT25lIHlvdQpyZW1vdmUgdGhlIGNhdGFsb2cgaW5kaXJl Y3Rpb24sIGhvcGVmdWxseSB0aGVyZSB3aWxsIGJlIGEgYnVuY2ggb2YgdGhlc2UgY2FzZXMKdGhh dCBiZWNvbWUgY2xlYXIuCgoKPiArCj4gKwlpZiAoY3RybC0+Y2F0YWxvZy0+aXNyICYgRFBfQ1RS TF9JTlRSX1JFQURZX0ZPUl9WSURFTykKPiArCQlkcF9jdHJsX3ZpZGVvX3JlYWR5KGN0cmwpOwo+ ICsKPiArCWlmIChjdHJsLT5jYXRhbG9nLT5pc3IgJiBEUF9DVFJMX0lOVFJfSURMRV9QQVRURVJO X1NFTlQpCj4gKwkJZHBfY3RybF9pZGxlX3BhdHRlcm5zX3NlbnQoY3RybCk7CgpBcyBtZW50aW9u ZWQgYWJvdmUsIGp1c3QgY2FsbCB0aGUgY29tcGxldGlvbnMgZGlyZWN0bHkuCgo+ICt9Cj4gKwo+ ICtzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybF9nZXQoc3RydWN0IGRwX2N0cmxfaW4gKmluKQo+ICt7 Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPiArCXN0 cnVjdCBkcF9jdHJsICpkcF9jdHJsOwo+ICsKPiArCWlmICghaW4tPmRldiB8fCAhaW4tPnBhbmVs IHx8ICFpbi0+YXV4IHx8Cj4gKwkgICAgIWluLT5saW5rIHx8ICFpbi0+Y2F0YWxvZykgewo+ICsJ CXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8g ZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJY3RybCA9IGRldm1fa3phbGxvYyhpbi0+ZGV2LCBzaXplb2Yo KmN0cmwpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghY3RybCkgewo+ICsJCXJjID0gLUVOT01FTTsK PiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCWluaXRfY29tcGxldGlvbigmY3RybC0+aWRs ZV9jb21wKTsKPiArCWluaXRfY29tcGxldGlvbigmY3RybC0+dmlkZW9fY29tcCk7Cj4gKwo+ICsJ LyogaW4gcGFyYW1ldGVycyAqLwo+ICsJY3RybC0+cGFyc2VyICAgPSBpbi0+cGFyc2VyOwo+ICsJ Y3RybC0+cGFuZWwgICAgPSBpbi0+cGFuZWw7Cj4gKwljdHJsLT5wb3dlciAgICA9IGluLT5wb3dl cjsKPiArCWN0cmwtPmF1eCAgICAgID0gaW4tPmF1eDsKPiArCWN0cmwtPmxpbmsgICAgID0gaW4t Pmxpbms7Cj4gKwljdHJsLT5jYXRhbG9nICA9IGluLT5jYXRhbG9nOwo+ICsJY3RybC0+ZGV2ICAg ICAgPSBpbi0+ZGV2Owo+ICsKPiArCWRwX2N0cmwgPSAmY3RybC0+ZHBfY3RybDsKPiArCj4gKwkv KiBvdXQgcGFyYW1ldGVycyAqLwo+ICsJZHBfY3RybC0+aW5pdCAgICAgID0gZHBfY3RybF9ob3N0 X2luaXQ7Cj4gKwlkcF9jdHJsLT5kZWluaXQgICAgPSBkcF9jdHJsX2hvc3RfZGVpbml0Owo+ICsJ ZHBfY3RybC0+b24gICAgICAgID0gZHBfY3RybF9vbjsKPiArCWRwX2N0cmwtPm9mZiAgICAgICA9 IGRwX2N0cmxfb2ZmOwo+ICsJZHBfY3RybC0+cHVzaF9pZGxlID0gZHBfY3RybF9wdXNoX2lkbGU7 Cj4gKwlkcF9jdHJsLT5hYm9ydCAgICAgPSBkcF9jdHJsX2Fib3J0Owo+ICsJZHBfY3RybC0+aXNy ICAgICAgID0gZHBfY3RybF9pc3I7Cj4gKwlkcF9jdHJsLT5yZXNldAkgICA9IGRwX2N0cmxfcmVz ZXQ7Cj4gKwlkcF9jdHJsLT5oYW5kbGVfc2lua19yZXF1ZXN0ID0gZHBfY3RybF9oYW5kbGVfc2lu a19yZXF1ZXN0Owo+ICsKPiArCXJldHVybiBkcF9jdHJsOwo+ICtlcnJvcjoKPiArCXJldHVybiBF UlJfUFRSKHJjKTsKPiArfQo+ICsKPiArdm9pZCBkcF9jdHJsX3B1dChzdHJ1Y3QgZHBfY3RybCAq ZHBfY3RybCkKPiArewo+ICsJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPiArCj4gKwlp ZiAoIWRwX2N0cmwpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWN0cmwgPSBjb250YWluZXJfb2YoZHBf Y3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7Cj4gKwo+ICsJZGV2bV9rZnJl ZShjdHJsLT5kZXYsIGN0cmwpOwo+ICt9CgpPbmNlIGFnYWluLCB0aGVzZSBmdW5jdGlvbnMgY2Fu IGJlIGRlbGV0ZWQuIEp1c3Qgc3RvcmUgdGhlIF9uZWNlc3NhcnlfIGRhdGEgaW4gYQpjZW50cmFs IHN0cnVjdCAod2l0aCBzdWJzdHJ1Y3RzIGFzIG5lY2Vzc2FyeSkgYW5kIGNhbGwgZnVuY3Rpb25z IGRpcmVjdGx5LgoKCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3Ry bC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmgKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAuLjZhYjIyMWEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmgKPiBAQCAtMCwwICsxLDUwIEBACj4gKy8qCj4g KyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4g KyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8K PiArCj4gKyNpZm5kZWYgX0RQX0NUUkxfSF8KPiArI2RlZmluZSBfRFBfQ1RSTF9IXwo+ICsKPiAr I2luY2x1ZGUgImRwX2F1eC5oIgo+ICsjaW5jbHVkZSAiZHBfcGFuZWwuaCIKPiArI2luY2x1ZGUg ImRwX2xpbmsuaCIKPiArI2luY2x1ZGUgImRwX3BhcnNlci5oIgo+ICsjaW5jbHVkZSAiZHBfcG93 ZXIuaCIKPiArI2luY2x1ZGUgImRwX2NhdGFsb2cuaCIKPiArCj4gK3N0cnVjdCBkcF9jdHJsIHsK PiArCWludCAoKmluaXQpKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsLCBib29sIGZsaXApOwo+ICsJ dm9pZCAoKmRlaW5pdCkoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+ICsJaW50ICgqb24pKHN0 cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKPiArCXZvaWQgKCpvZmYpKHN0cnVjdCBkcF9jdHJsICpk cF9jdHJsKTsKPiArCXZvaWQgKCpyZXNldCkoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+ICsJ dm9pZCAoKnB1c2hfaWRsZSkoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+ICsJdm9pZCAoKmFi b3J0KShzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7Cj4gKwl2b2lkICgqaXNyKShzdHJ1Y3QgZHBf Y3RybCAqZHBfY3RybCk7Cj4gKwl2b2lkICgqaGFuZGxlX3NpbmtfcmVxdWVzdCkoc3RydWN0IGRw X2N0cmwgKmRwX2N0cmwpOwo+ICt9OwoKU2FtZSBjb21tZW50IGFzIGNhdGFsb2csIHRoZXNlIHNo b3VsZCBqdXN0IGJlIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgZGlyZWN0bHkuCgo+ICsKPiArc3Ry dWN0IGRwX2N0cmxfaW4gewo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJc3RydWN0IGRwX3Bh bmVsICpwYW5lbDsKPiArCXN0cnVjdCBkcF9hdXggKmF1eDsKPiArCXN0cnVjdCBkcF9saW5rICps aW5rOwo+ICsJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwo+ICsJc3RydWN0IGRwX3Bvd2VyICpw b3dlcjsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmNhdGFsb2c7Cj4gK307CgpUaGlzIHN0 cnVjdCBpcyBub3QgbmVlZGVkLCBmdW5jdGlvbiBhcmd1bWVudHMgd29yayBqdXN0IGFzIHdlbGwu Cgo+ICsKPiArc3RydWN0IGRwX2N0cmwgKmRwX2N0cmxfZ2V0KHN0cnVjdCBkcF9jdHJsX2luICpp bik7Cj4gK3ZvaWQgZHBfY3RybF9wdXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+ICsKPiAr I2VuZGlmIC8qIF9EUF9DVFJMX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfZGVidWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNWMwYThjZQo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RlYnVnLmMKPiBAQCAtMCwwICsx LDUwNyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZv dW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4g KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFuZAo+ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4g KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KPiArICoKPiArICovCj4gKwo+ICsjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczog IiBmbXQsIF9fZnVuY19fCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KPiArCj4gKyNpbmNsdWRlICJkcF9wYXJzZXIuaCIK PiArI2luY2x1ZGUgImRwX3Bvd2VyLmgiCj4gKyNpbmNsdWRlICJkcF9jYXRhbG9nLmgiCj4gKyNp bmNsdWRlICJkcF9hdXguaCIKPiArI2luY2x1ZGUgImRwX2N0cmwuaCIKPiArI2luY2x1ZGUgImRw X2RlYnVnLmgiCj4gKyNpbmNsdWRlICJkcF9kaXNwbGF5LmgiCj4gKwo+ICsjZGVmaW5lIERFQlVH X05BTUUgImRybV9kcCIKPiArCj4gK3N0cnVjdCBkcF9kZWJ1Z19wcml2YXRlIHsKPiArCXN0cnVj dCBkZW50cnkgKnJvb3Q7Cj4gKwo+ICsJc3RydWN0IGRwX3VzYnBkICp1c2JwZDsKPiArCXN0cnVj dCBkcF9saW5rICpsaW5rOwo+ICsJc3RydWN0IGRwX3BhbmVsICpwYW5lbDsKPiArCXN0cnVjdCBk cm1fY29ubmVjdG9yICoqY29ubmVjdG9yOwo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsKPiAr CXN0cnVjdCBkcF9kZWJ1ZyBkcF9kZWJ1ZzsKPiArfTsKPiArCj4gK3N0YXRpYyBzc2l6ZV90IGRw X2RlYnVnX3dyaXRlX2hwZChzdHJ1Y3QgZmlsZSAqZmlsZSwKPiArCQljb25zdCBjaGFyIF9fdXNl ciAqdXNlcl9idWZmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKPiArewo+ICsJc3RydWN0 IGRwX2RlYnVnX3ByaXZhdGUgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ICsJY2hhciBi dWZbU1pfOF07Cj4gKwlzaXplX3QgbGVuID0gMDsKPiArCWludCBocGQ7Cj4gKwo+ICsJaWYgKCFk ZWJ1ZykKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlpZiAoKnBwb3MpCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJLyogTGVhdmUgcm9vbSBmb3IgdGVybWluYXRpb24gY2hhciAqLwo+ICsJbGVu ID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgU1pfOCAtIDEpOwo+ICsJaWYgKGNvcHlfZnJvbV91c2Vy KGJ1ZiwgdXNlcl9idWZmLCBsZW4pKQo+ICsJCWdvdG8gZW5kOwo+ICsKPiArCWJ1ZltsZW5dID0g J1wwJzsKPiArCj4gKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZocGQpICE9IDApCj4gKwkJZ290 byBlbmQ7Cj4gKwo+ICsJaWYgKGRlYnVnLT51c2JwZCAmJiBkZWJ1Zy0+dXNicGQtPmNvbm5lY3Qp Cj4gKwkJZGVidWctPnVzYnBkLT5jb25uZWN0KGRlYnVnLT51c2JwZCwgaHBkKTsKPiArCj4gK2Vu ZDoKPiArCXJldHVybiAtbGVuOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBkcF9kZWJ1Z193 cml0ZV9lZGlkX21vZGVzKHN0cnVjdCBmaWxlICpmaWxlLAo+ICsJCWNvbnN0IGNoYXIgX191c2Vy ICp1c2VyX2J1ZmYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQo+ICt7Cj4gKwlzdHJ1Y3Qg ZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gKwljaGFyIGJ1 ZltTWl8zMl07Cj4gKwlzaXplX3QgbGVuID0gMDsKPiArCWludCBoZGlzcGxheSA9IDAsIHZkaXNw bGF5ID0gMCwgdnJlZnJlc2ggPSAwOwo+ICsKPiArCWlmICghZGVidWcpCj4gKwkJcmV0dXJuIC1F Tk9ERVY7Cj4gKwo+ICsJaWYgKCpwcG9zKQo+ICsJCWdvdG8gZW5kOwo+ICsKPiArCS8qIExlYXZl IHJvb20gZm9yIHRlcm1pbmF0aW9uIGNoYXIgKi8KPiArCWxlbiA9IG1pbl90KHNpemVfdCwgY291 bnQsIFNaXzMyIC0gMSk7Cj4gKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZmYsIGxl bikpCj4gKwkJZ290byBjbGVhcjsKPiArCj4gKwlidWZbbGVuXSA9ICdcMCc7Cj4gKwo+ICsJaWYg KHNzY2FuZihidWYsICIlZCAlZCAlZCIsICZoZGlzcGxheSwgJnZkaXNwbGF5LCAmdnJlZnJlc2gp ICE9IDMpCj4gKwkJZ290byBjbGVhcjsKPiArCj4gKwlpZiAoIWhkaXNwbGF5IHx8ICF2ZGlzcGxh eSB8fCAhdnJlZnJlc2gpCj4gKwkJZ290byBjbGVhcjsKPiArCj4gKwlkZWJ1Zy0+ZHBfZGVidWcu ZGVidWdfZW4gPSB0cnVlOwo+ICsJZGVidWctPmRwX2RlYnVnLmhkaXNwbGF5ID0gaGRpc3BsYXk7 Cj4gKwlkZWJ1Zy0+ZHBfZGVidWcudmRpc3BsYXkgPSB2ZGlzcGxheTsKPiArCWRlYnVnLT5kcF9k ZWJ1Zy52cmVmcmVzaCA9IHZyZWZyZXNoOwo+ICsJZ290byBlbmQ7Cj4gK2NsZWFyOgo+ICsJcHJf ZGVidWcoImNsZWFyaW5nIGRlYnVnIG1vZGVzXG4iKTsKPiArCWRlYnVnLT5kcF9kZWJ1Zy5kZWJ1 Z19lbiA9IGZhbHNlOwo+ICtlbmQ6Cj4gKwlyZXR1cm4gbGVuOwo+ICt9Cj4gKwo+ICtzdGF0aWMg c3NpemVfdCBkcF9kZWJ1Z19yZWFkX2Nvbm5lY3RlZChzdHJ1Y3QgZmlsZSAqZmlsZSwKPiArCQlj aGFyIF9fdXNlciAqdXNlcl9idWZmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKPiArewo+ ICsJc3RydWN0IGRwX2RlYnVnX3ByaXZhdGUgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ ICsJY2hhciBidWZbU1pfOF07Cj4gKwl1MzIgbGVuID0gMDsKPiArCj4gKwlpZiAoIWRlYnVnKQo+ ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWlmICgqcHBvcykKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwlpZiAoIWRlYnVnLT51c2JwZCkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlsZW4g Kz0gc25wcmludGYoYnVmLCBTWl84LCAiJWRcbiIsIGRlYnVnLT51c2JwZC0+aHBkX2hpZ2gpOwo+ ICsKPiArCWlmIChjb3B5X3RvX3VzZXIodXNlcl9idWZmLCBidWYsIGxlbikpCj4gKwkJcmV0dXJu IC1FRkFVTFQ7Cj4gKwo+ICsJKnBwb3MgKz0gbGVuOwo+ICsJcmV0dXJuIGxlbjsKPiArfQo+ICsK PiArc3RhdGljIHNzaXplX3QgZHBfZGVidWdfcmVhZF9lZGlkX21vZGVzKHN0cnVjdCBmaWxlICpm aWxlLAo+ICsJCWNoYXIgX191c2VyICp1c2VyX2J1ZmYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpw cG9zKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcgPSBmaWxlLT5wcml2 YXRlX2RhdGE7Cj4gKwljaGFyICpidWY7Cj4gKwl1MzIgbGVuID0gMDsKPiArCWludCByYyA9IDA7 Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGU7Cj4gKwo+ICsJaWYgKCFkZWJ1Zykgewo+ICsJCXByX2VycigiaW52YWxp ZCBkYXRhXG4iKTsKPiArCQlyYyA9IC1FTk9ERVY7Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiAr Cj4gKwljb25uZWN0b3IgPSAqZGVidWctPmNvbm5lY3RvcjsKPiArCj4gKwlpZiAoIWNvbm5lY3Rv cikgewo+ICsJCXByX2VycigiY29ubmVjdG9yIGlzIE5VTExcbiIpOwo+ICsJCXJjID0gLUVJTlZB TDsKPiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCWlmICgqcHBvcykKPiArCQlnb3RvIGVy cm9yOwo+ICsKPiArCWJ1ZiA9IGt6YWxsb2MoU1pfNEssIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFi dWYpIHsKPiArCQlyYyA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiArCj4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7Cj4gKwkJ bGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgU1pfNEsgLSBsZW4sCj4gKwkJIiVzICVkICVkICVk ICVkICVkICVkICVkICVkICVkIDB4JXhcbiIsCj4gKwkJbW9kZS0+bmFtZSwgbW9kZS0+dnJlZnJl c2gsIG1vZGUtPmhkaXNwbGF5LAo+ICsJCW1vZGUtPmhzeW5jX3N0YXJ0LCBtb2RlLT5oc3luY19l bmQsIG1vZGUtPmh0b3RhbCwKPiArCQltb2RlLT52ZGlzcGxheSwgbW9kZS0+dnN5bmNfc3RhcnQs IG1vZGUtPnZzeW5jX2VuZCwKPiArCQltb2RlLT52dG90YWwsIG1vZGUtPmZsYWdzKTsKPiArCX0K PiArCj4gKwlpZiAoY29weV90b191c2VyKHVzZXJfYnVmZiwgYnVmLCBsZW4pKSB7Cj4gKwkJa2Zy ZWUoYnVmKTsKPiArCQlyYyA9IC1FRkFVTFQ7Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiArCj4g KwkqcHBvcyArPSBsZW47Cj4gKwlrZnJlZShidWYpOwo+ICsKPiArCXJldHVybiBsZW47Cj4gK2Vy cm9yOgo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2RlYnVnX2NoZWNr X2J1ZmZlcl9vdmVyZmxvdyhpbnQgcmMsIGludCAqbWF4X3NpemUsIGludCAqbGVuKQo+ICt7Cj4g KwlpZiAocmMgPj0gKm1heF9zaXplKSB7Cj4gKwkJcHJfZXJyKCJidWZmZXIgb3ZlcmZsb3dcbiIp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsJKmxlbiArPSByYzsKPiArCSptYXhfc2l6 ZSA9IFNaXzRLIC0gKmxlbjsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHNz aXplX3QgZHBfZGVidWdfcmVhZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAq dXNlcl9idWZmLAo+ICsJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gKwljaGFy ICpidWY7Cj4gKwl1MzIgbGVuID0gMCwgcmMgPSAwOwo+ICsJdTY0IGxjbGsgPSAwOwo+ICsJdTMy IG1heF9zaXplID0gU1pfNEs7Cj4gKwo+ICsJaWYgKCFkZWJ1ZykKPiArCQlyZXR1cm4gLUVOT0RF VjsKPiArCj4gKwlpZiAoKnBwb3MpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJYnVmID0ga3phbGxv YyhTWl80SywgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWJ1ZikKPiArCQlyZXR1cm4gLUVOT01FTTsK PiArCj4gKwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsICJcdG5hbWUgPSAlc1xu IiwgREVCVUdfTkFNRSk7Cj4gKwlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJj LCAmbWF4X3NpemUsICZsZW4pKQo+ICsJCWdvdG8gZXJyb3I7Cj4gKwo+ICsJcmMgPSBzbnByaW50 ZihidWYgKyBsZW4sIG1heF9zaXplLAo+ICsJCSJcdGRwX3BhbmVsXG5cdFx0bWF4X3BjbGtfa2h6 ID0gJWRcbiIsCj4gKwkJZGVidWctPnBhbmVsLT5tYXhfcGNsa19raHopOwo+ICsJaWYgKGRwX2Rl YnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkKPiArCQlnb3Rv IGVycm9yOwo+ICsKPiArCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKPiArCQki XHRkcm1fZHBfbGlua1xuXHRcdHJhdGUgPSAldVxuIiwKPiArCQlkZWJ1Zy0+cGFuZWwtPmxpbmtf aW5mby5yYXRlKTsKPiArCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZt YXhfc2l6ZSwgJmxlbikpCj4gKwkJZ290byBlcnJvcjsKPiArCj4gKwlyYyA9IHNucHJpbnRmKGJ1 ZiArIGxlbiwgbWF4X3NpemUsCj4gKwkJIlx0XHRudW1fbGFuZXMgPSAldVxuIiwKPiArCQlkZWJ1 Zy0+cGFuZWwtPmxpbmtfaW5mby5udW1fbGFuZXMpOwo+ICsJaWYgKGRwX2RlYnVnX2NoZWNrX2J1 ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkKPiArCQlnb3RvIGVycm9yOwo+ICsK PiArCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKPiArCQkiXHRcdGNhcGFiaWxp dGllcyA9ICVsdVxuIiwKPiArCQlkZWJ1Zy0+cGFuZWwtPmxpbmtfaW5mby5jYXBhYmlsaXRpZXMp Owo+ICsJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAm bGVuKSkKPiArCQlnb3RvIGVycm9yOwo+ICsKPiArCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBt YXhfc2l6ZSwKPiArCQkiXHRkcF9wYW5lbF9pbmZvOlxuXHRcdGFjdGl2ZSA9ICVkeCVkXG4iLAo+ ICsJCWRlYnVnLT5wYW5lbC0+cGluZm8uaF9hY3RpdmUsCj4gKwkJZGVidWctPnBhbmVsLT5waW5m by52X2FjdGl2ZSk7Cj4gKwlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAm bWF4X3NpemUsICZsZW4pKQo+ICsJCWdvdG8gZXJyb3I7Cj4gKwo+ICsJcmMgPSBzbnByaW50Zihi dWYgKyBsZW4sIG1heF9zaXplLAo+ICsJCSJcdFx0YmFja19wb3JjaCA9ICVkeCVkXG4iLAo+ICsJ CWRlYnVnLT5wYW5lbC0+cGluZm8uaF9iYWNrX3BvcmNoLAo+ICsJCWRlYnVnLT5wYW5lbC0+cGlu Zm8udl9iYWNrX3BvcmNoKTsKPiArCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3co cmMsICZtYXhfc2l6ZSwgJmxlbikpCj4gKwkJZ290byBlcnJvcjsKPiArCj4gKwlyYyA9IHNucHJp bnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCj4gKwkJIlx0XHRmcm9udF9wb3JjaCA9ICVkeCVkXG4i LAo+ICsJCWRlYnVnLT5wYW5lbC0+cGluZm8uaF9mcm9udF9wb3JjaCwKPiArCQlkZWJ1Zy0+cGFu ZWwtPnBpbmZvLnZfZnJvbnRfcG9yY2gpOwo+ICsJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9v dmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkKPiArCQlnb3RvIGVycm9yOwo+ICsKPiArCXJj ID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKPiArCQkiXHRcdHN5bmNfd2lkdGggPSAl ZHglZFxuIiwKPiArCQlkZWJ1Zy0+cGFuZWwtPnBpbmZvLmhfc3luY193aWR0aCwKPiArCQlkZWJ1 Zy0+cGFuZWwtPnBpbmZvLnZfc3luY193aWR0aCk7Cj4gKwlpZiAoZHBfZGVidWdfY2hlY2tfYnVm ZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQo+ICsJCWdvdG8gZXJyb3I7Cj4gKwo+ ICsJcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAo+ICsJCSJcdFx0YWN0aXZlX2xv dyA9ICVkeCVkXG4iLAo+ICsJCWRlYnVnLT5wYW5lbC0+cGluZm8uaF9hY3RpdmVfbG93LAo+ICsJ CWRlYnVnLT5wYW5lbC0+cGluZm8udl9hY3RpdmVfbG93KTsKPiArCWlmIChkcF9kZWJ1Z19jaGVj a19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhfc2l6ZSwgJmxlbikpCj4gKwkJZ290byBlcnJvcjsK PiArCj4gKwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCj4gKwkJIlx0XHRoX3Nr ZXcgPSAlZFxuIiwKPiArCQlkZWJ1Zy0+cGFuZWwtPnBpbmZvLmhfc2tldyk7Cj4gKwlpZiAoZHBf ZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQo+ICsJCWdv dG8gZXJyb3I7Cj4gKwo+ICsJcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAo+ICsJ CSJcdFx0cmVmcmVzaCByYXRlID0gJWRcbiIsCj4gKwkJZGVidWctPnBhbmVsLT5waW5mby5yZWZy ZXNoX3JhdGUpOwo+ICsJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1h eF9zaXplLCAmbGVuKSkKPiArCQlnb3RvIGVycm9yOwo+ICsKPiArCXJjID0gc25wcmludGYoYnVm ICsgbGVuLCBtYXhfc2l6ZSwKPiArCQkiXHRcdHBpeGVsIGNsb2NrIGtoeiA9ICVkXG4iLAo+ICsJ CWRlYnVnLT5wYW5lbC0+cGluZm8ucGl4ZWxfY2xrX2toeik7Cj4gKwlpZiAoZHBfZGVidWdfY2hl Y2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQo+ICsJCWdvdG8gZXJyb3I7 Cj4gKwo+ICsJcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAo+ICsJCSJcdFx0YnBw ID0gJWRcbiIsCj4gKwkJZGVidWctPnBhbmVsLT5waW5mby5icHApOwo+ICsJaWYgKGRwX2RlYnVn X2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkKPiArCQlnb3RvIGVy cm9yOwo+ICsKPiArCS8qIExpbmsgSW5mb3JtYXRpb24gKi8KPiArCXJjID0gc25wcmludGYoYnVm ICsgbGVuLCBtYXhfc2l6ZSwKPiArCQkiXHRkcF9saW5rOlxuXHRcdHRlc3RfcmVxdWVzdGVkID0g JWRcbiIsCj4gKwkJZGVidWctPmxpbmstPnNpbmtfcmVxdWVzdCk7Cj4gKwlpZiAoZHBfZGVidWdf Y2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQo+ICsJCWdvdG8gZXJy b3I7Cj4gKwo+ICsJcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAo+ICsJCSJcdFx0 bGFuZV9jb3VudCA9ICVkXG4iLCBkZWJ1Zy0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudCk7 Cj4gKwlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZs ZW4pKQo+ICsJCWdvdG8gZXJyb3I7Cj4gKwo+ICsJcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1h eF9zaXplLAo+ICsJCSJcdFx0YndfY29kZSA9ICVkXG4iLCBkZWJ1Zy0+bGluay0+bGlua19wYXJh bXMuYndfY29kZSk7Cj4gKwlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAm bWF4X3NpemUsICZsZW4pKQo+ICsJCWdvdG8gZXJyb3I7Cj4gKwo+ICsJbGNsayA9IGRybV9kcF9i d19jb2RlX3RvX2xpbmtfcmF0ZSgKPiArCQkJZGVidWctPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2Nv ZGUpICogMTAwMDsKPiArCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKPiArCQki XHRcdGxjbGsgPSAlbGxkXG4iLCBsY2xrKTsKPiArCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJf b3ZlcmZsb3cocmMsICZtYXhfc2l6ZSwgJmxlbikpCj4gKwkJZ290byBlcnJvcjsKPiArCj4gKwly YyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCj4gKwkJIlx0XHR2X2xldmVsID0gJWRc biIsIGRlYnVnLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwpOwo+ICsJaWYgKGRwX2RlYnVnX2No ZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkKPiArCQlnb3RvIGVycm9y Owo+ICsKPiArCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKPiArCQkiXHRcdHBf bGV2ZWwgPSAlZFxuIiwgZGVidWctPmxpbmstPnBoeV9wYXJhbXMucF9sZXZlbCk7Cj4gKwlpZiAo ZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQo+ICsJ CWdvdG8gZXJyb3I7Cj4gKwo+ICsJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZmYsIGJ1ZiwgbGVu KSkKPiArCQlnb3RvIGVycm9yOwo+ICsKPiArCSpwcG9zICs9IGxlbjsKPiArCj4gKwlrZnJlZShi dWYpOwo+ICsJcmV0dXJuIGxlbjsKPiArZXJyb3I6Cj4gKwlrZnJlZShidWYpOwo+ICsJcmV0dXJu IC1FSU5WQUw7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IGRwX2RlYnVnX2ZvcHMgPSB7Cj4gKwkub3BlbiA9IHNpbXBsZV9vcGVuLAo+ICsJLnJlYWQgPSBk cF9kZWJ1Z19yZWFkX2luZm8sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBlZGlkX21vZGVzX2ZvcHMgPSB7Cj4gKwkub3BlbiA9IHNpbXBsZV9vcGVuLAo+ ICsJLnJlYWQgPSBkcF9kZWJ1Z19yZWFkX2VkaWRfbW9kZXMsCj4gKwkud3JpdGUgPSBkcF9kZWJ1 Z193cml0ZV9lZGlkX21vZGVzLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxl X29wZXJhdGlvbnMgaHBkX2ZvcHMgPSB7Cj4gKwkub3BlbiA9IHNpbXBsZV9vcGVuLAo+ICsJLndy aXRlID0gZHBfZGVidWdfd3JpdGVfaHBkLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgY29ubmVjdGVkX2ZvcHMgPSB7Cj4gKwkub3BlbiA9IHNpbXBsZV9v cGVuLAo+ICsJLnJlYWQgPSBkcF9kZWJ1Z19yZWFkX2Nvbm5lY3RlZCwKPiArfTsKCmVkaWQsIGhw ZCwgYW5kIGNvbm5lY3RlZCBjYW4gYWxsIGJlIGRlbGV0ZWQuIFRoZXkncmUgcHJvdmlkZWQgYnkg Y29yZS4KCkFGQUlDVCwgeW91IGNhbiBhbHNvIGluZmVyIHRoZSBpbmZvcm1hdGlvbiBmcm9tIGRw X2RlYnVnLCBzbyBJIHRoaW5rIHlvdSBjYW4KanVzdCBkcm9wIHRoaXMgZW50aXJlIGZpbGUuCgo+ ICsKPiArc3RhdGljIGludCBkcF9kZWJ1Z19pbml0KHN0cnVjdCBkcF9kZWJ1ZyAqZHBfZGVidWcp Cj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcg PSBjb250YWluZXJfb2YoZHBfZGVidWcsCj4gKwkJc3RydWN0IGRwX2RlYnVnX3ByaXZhdGUsIGRw X2RlYnVnKTsKPiArCXN0cnVjdCBkZW50cnkgKmRpciwgKmZpbGUsICplZGlkX21vZGVzOwo+ICsJ c3RydWN0IGRlbnRyeSAqaHBkLCAqY29ubmVjdGVkOwo+ICsKPiArCWRpciA9IGRlYnVnZnNfY3Jl YXRlX2RpcihERUJVR19OQU1FLCBOVUxMKTsKPiArCWlmIChJU19FUlJfT1JfTlVMTChkaXIpKSB7 Cj4gKwkJcmMgPSBQVFJfRVJSKGRpcik7Cj4gKwkJcHJfZXJyKCJbJXNdIGRlYnVnZnMgY3JlYXRl IGRpciBmYWlsZWQsIHJjID0gJWRcbiIsCj4gKwkJICAgICAgIERFQlVHX05BTUUsIHJjKTsKPiAr CQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCWZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJk cF9kZWJ1ZyIsIDA0NDQsIGRpciwKPiArCQkJCWRlYnVnLCAmZHBfZGVidWdfZm9wcyk7Cj4gKwlp ZiAoSVNfRVJSX09SX05VTEwoZmlsZSkpIHsKPiArCQlyYyA9IFBUUl9FUlIoZmlsZSk7Cj4gKwkJ cHJfZXJyKCJbJXNdIGRlYnVnZnMgY3JlYXRlIGZpbGUgZmFpbGVkLCByYz0lZFxuIiwKPiArCQkg ICAgICAgREVCVUdfTkFNRSwgcmMpOwo+ICsJCWdvdG8gZXJyb3JfcmVtb3ZlX2RpcjsKPiArCX0K PiArCj4gKwllZGlkX21vZGVzID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZWRpZF9tb2RlcyIsIDA2 NDQsIGRpciwKPiArCQkJCQlkZWJ1ZywgJmVkaWRfbW9kZXNfZm9wcyk7Cj4gKwlpZiAoSVNfRVJS X09SX05VTEwoZWRpZF9tb2RlcykpIHsKPiArCQlyYyA9IFBUUl9FUlIoZWRpZF9tb2Rlcyk7Cj4g KwkJcHJfZXJyKCJbJXNdIGRlYnVnZnMgY3JlYXRlIGVkaWRfbW9kZXMgZmFpbGVkLCByYz0lZFxu IiwKPiArCQkgICAgICAgREVCVUdfTkFNRSwgcmMpOwo+ICsJCWdvdG8gZXJyb3JfcmVtb3ZlX2Rp cjsKPiArCX0KPiArCj4gKwlocGQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJocGQiLCAwNjQ0LCBk aXIsCj4gKwkJCQkJZGVidWcsICZocGRfZm9wcyk7Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwoaHBk KSkgewo+ICsJCXJjID0gUFRSX0VSUihocGQpOwo+ICsJCXByX2VycigiWyVzXSBkZWJ1Z2ZzIGhw ZCBmYWlsZWQsIHJjPSVkXG4iLAo+ICsJCQlERUJVR19OQU1FLCByYyk7Cj4gKwkJZ290byBlcnJv cl9yZW1vdmVfZGlyOwo+ICsJfQo+ICsKPiArCWNvbm5lY3RlZCA9IGRlYnVnZnNfY3JlYXRlX2Zp bGUoImNvbm5lY3RlZCIsIDA0NDQsIGRpciwKPiArCQkJCQlkZWJ1ZywgJmNvbm5lY3RlZF9mb3Bz KTsKPiArCWlmIChJU19FUlJfT1JfTlVMTChjb25uZWN0ZWQpKSB7Cj4gKwkJcmMgPSBQVFJfRVJS KGNvbm5lY3RlZCk7Cj4gKwkJcHJfZXJyKCJbJXNdIGRlYnVnZnMgY29ubmVjdGVkIGZhaWxlZCwg cmM9JWRcbiIsCj4gKwkJCURFQlVHX05BTUUsIHJjKTsKPiArCQlnb3RvIGVycm9yX3JlbW92ZV9k aXI7Cj4gKwl9Cj4gKwo+ICsJZGVidWctPnJvb3QgPSBkaXI7Cj4gKwlyZXR1cm4gcmM7Cj4gK2Vy cm9yX3JlbW92ZV9kaXI6Cj4gKwlkZWJ1Z2ZzX3JlbW92ZShkaXIpOwo+ICtlcnJvcjoKPiArCXJl dHVybiByYzsKPiArfQo+ICsKPiArc3RydWN0IGRwX2RlYnVnICpkcF9kZWJ1Z19nZXQoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfcGFuZWwgKnBhbmVsLAo+ICsJCQlzdHJ1Y3QgZHBfdXNi cGQgKnVzYnBkLCBzdHJ1Y3QgZHBfbGluayAqbGluaywKPiArCQkJc3RydWN0IGRybV9jb25uZWN0 b3IgKipjb25uZWN0b3IpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfZGVidWdf cHJpdmF0ZSAqZGVidWc7Cj4gKwlzdHJ1Y3QgZHBfZGVidWcgKmRwX2RlYnVnOwo+ICsKPiArCWlm ICghZGV2IHx8ICFwYW5lbCB8fCAhdXNicGQgfHwgIWxpbmspIHsKPiArCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ ICsKPiArCWRlYnVnID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZWJ1ZyksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCFkZWJ1Zykgewo+ICsJCXJjID0gLUVOT01FTTsKPiArCQlnb3RvIGVycm9y Owo+ICsJfQo+ICsKPiArCWRlYnVnLT5kcF9kZWJ1Zy5kZWJ1Z19lbiA9IGZhbHNlOwo+ICsJZGVi dWctPnVzYnBkID0gdXNicGQ7Cj4gKwlkZWJ1Zy0+bGluayA9IGxpbms7Cj4gKwlkZWJ1Zy0+cGFu ZWwgPSBwYW5lbDsKPiArCWRlYnVnLT5kZXYgPSBkZXY7Cj4gKwlkZWJ1Zy0+Y29ubmVjdG9yID0g Y29ubmVjdG9yOwo+ICsKPiArCWRwX2RlYnVnID0gJmRlYnVnLT5kcF9kZWJ1ZzsKPiArCWRwX2Rl YnVnLT52ZGlzcGxheSA9IDA7Cj4gKwlkcF9kZWJ1Zy0+aGRpc3BsYXkgPSAwOwo+ICsJZHBfZGVi dWctPnZyZWZyZXNoID0gMDsKPiArCj4gKwlyYyA9IGRwX2RlYnVnX2luaXQoZHBfZGVidWcpOwo+ ICsJaWYgKHJjKSB7Cj4gKwkJZGV2bV9rZnJlZShkZXYsIGRlYnVnKTsKPiArCQlnb3RvIGVycm9y Owo+ICsJfQo+ICsKPiArCXJldHVybiBkcF9kZWJ1ZzsKPiArZXJyb3I6Cj4gKwlyZXR1cm4gRVJS X1BUUihyYyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfZGVidWdfZGVpbml0KHN0cnVjdCBk cF9kZWJ1ZyAqZHBfZGVidWcpCj4gK3sKPiArCXN0cnVjdCBkcF9kZWJ1Z19wcml2YXRlICpkZWJ1 ZzsKPiArCj4gKwlpZiAoIWRwX2RlYnVnKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWRl YnVnID0gY29udGFpbmVyX29mKGRwX2RlYnVnLCBzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSwgZHBf ZGVidWcpOwo+ICsKPiArCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkZWJ1Zy0+cm9vdCk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgZHBfZGVidWdfcHV0KHN0cnVjdCBkcF9k ZWJ1ZyAqZHBfZGVidWcpCj4gK3sKPiArCXN0cnVjdCBkcF9kZWJ1Z19wcml2YXRlICpkZWJ1ZzsK PiArCj4gKwlpZiAoIWRwX2RlYnVnKQo+ICsJCXJldHVybjsKPiArCj4gKwlkZWJ1ZyA9IGNvbnRh aW5lcl9vZihkcF9kZWJ1Zywgc3RydWN0IGRwX2RlYnVnX3ByaXZhdGUsIGRwX2RlYnVnKTsKPiAr Cj4gKwlkcF9kZWJ1Z19kZWluaXQoZHBfZGVidWcpOwo+ICsKPiArCWRldm1fa2ZyZWUoZGVidWct PmRldiwgZGVidWcpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfZGVidWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuaAo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYTY0ODBlMQo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RlYnVnLmgKPiBAQCAtMCwwICsxLDgxIEBA Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYW5kCj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsg Kgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0RQX0RFQlVHX0hfCj4gKyNkZWZpbmUgX0RQX0RFQlVH X0hfCj4gKwo+ICsjaW5jbHVkZSAiZHBfcGFuZWwuaCIKPiArI2luY2x1ZGUgImRwX2xpbmsuaCIK PiArI2luY2x1ZGUgImRwX2V4dGNvbi5oIgo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBkcF9kZWJ1 Zwo+ICsgKiBAZGVidWdfZW46IHNwZWNpZmllcyB3aGV0aGVyIGRlYnVnIG1vZGUgZW5hYmxlZAo+ ICsgKiBAdmRpc3BsYXk6IHVzZWQgdG8gZmlsdGVyIG91dCB2ZGlzcGxheSB2YWx1ZQo+ICsgKiBA aGRpc3BsYXk6IHVzZWQgdG8gZmlsdGVyIG91dCBoZGlzcGxheSB2YWx1ZQo+ICsgKiBAdnJlZnJl c2g6IHVzZWQgdG8gZmlsdGVyIG91dCB2cmVmcmVzaCB2YWx1ZQo+ICsgKiBAdHBnX3N0YXRlOiBz cGVjaWZpZXMgd2hldGhlciB0cGcgZmVhdHVyZSBpcyBlbmFibGVkCj4gKyAqLwo+ICtzdHJ1Y3Qg ZHBfZGVidWcgewo+ICsJYm9vbCBkZWJ1Z19lbjsKPiArCWludCBhc3BlY3RfcmF0aW87Cj4gKwlp bnQgdmRpc3BsYXk7Cj4gKwlpbnQgaGRpc3BsYXk7Cj4gKwlpbnQgdnJlZnJlc2g7Cj4gK307Cj4g Kwo+ICsjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCj4gKwo+ICsvKioKPiArICogZHBfZGVi dWdfZ2V0KCkgLSBjb25maWd1cmUgYW5kIGdldCB0aGUgRGlzcGxheVBsb3QgZGVidWcgbW9kdWxl IGRhdGEKPiArICoKPiArICogQGRldjogZGV2aWNlIGluc3RhbmNlIG9mIHRoZSBjYWxsZXIKPiAr ICogQHBhbmVsOiBpbnN0YW5jZSBvZiBwYW5lbCBtb2R1bGUKPiArICogQHVzYnBkOiBpbnN0YW5j ZSBvZiB1c2JwZCBtb2R1bGUKPiArICogQGxpbms6IGluc3RhbmNlIG9mIGxpbmsgbW9kdWxlCj4g KyAqIEBjb25uZWN0b3I6IGRvdWJsZSBwb2ludGVyIHRvIGRpc3BsYXkgY29ubmVjdG9yCj4gKyAq IHJldHVybjogcG9pbnRlciB0byBhbGxvY2F0ZWQgZGVidWcgbW9kdWxlIGRhdGEKPiArICoKPiAr ICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBkZWJ1ZyBtb2R1bGUgYW5kIHByb3ZpZGVzIGEg d2F5Cj4gKyAqIGZvciBkZWJ1Z2ZzIGlucHV0IHRvIGJlIGNvbW11bmljYXRlZCB3aXRoIGV4aXN0 aW5nIG1vZHVsZXMKPiArICovCj4gK3N0cnVjdCBkcF9kZWJ1ZyAqZHBfZGVidWdfZ2V0KHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX3BhbmVsICpwYW5lbCwKPiArCQkJc3RydWN0IGRwX3Vz YnBkICp1c2JwZCwgc3RydWN0IGRwX2xpbmsgKmxpbmssCj4gKwkJCXN0cnVjdCBkcm1fY29ubmVj dG9yICoqY29ubmVjdG9yKTsKPiArLyoqCj4gKyAqIGRwX2RlYnVnX3B1dCgpCj4gKyAqCj4gKyAq IENsZWFucyB1cCBkcF9kZWJ1ZyBpbnN0YW5jZQo+ICsgKgo+ICsgKiBAZHBfZGVidWc6IGluc3Rh bmNlIG9mIGRwX2RlYnVnCj4gKyAqLwo+ICt2b2lkIGRwX2RlYnVnX3B1dChzdHJ1Y3QgZHBfZGVi dWcgKmRwX2RlYnVnKTsKPiArCj4gKyNlbHNlCj4gKwo+ICtzdGF0aWMgaW5saW5lCj4gK3N0cnVj dCBkcF9kZWJ1ZyAqZHBfZGVidWdfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX3Bh bmVsICpwYW5lbCwKPiArCQkJc3RydWN0IGRwX3VzYnBkICp1c2JwZCwgc3RydWN0IGRwX2xpbmsg KmxpbmssCj4gKwkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9yKQo+ICt7Cj4gKwly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGRw X2RlYnVnX3B1dChzdHJ1Y3QgZHBfZGVidWcgKmRwX2RlYnVnKQo+ICt7Cj4gK30KPiArCj4gKyNl bmRpZiAvKiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgKi8KCkRyb3AgdGhpcyB0b28KCj4gKwo+ ICsjZW5kaWYgLyogX0RQX0RFQlVHX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5 LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjhjOTgzOTkKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMKPiBA QCAtMCwwICsxLDk3NyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KPiArICoKPiArICovCj4gKwo+ICsjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJt LWRwXSAlczogIiBmbXQsIF9fZnVuY19fCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25l bnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgo+ICsKPiArI2luY2x1ZGUgIm1zbV9k cnYuaCIKPiArI2luY2x1ZGUgImRwX2V4dGNvbi5oIgo+ICsjaW5jbHVkZSAiZHBfcGFyc2VyLmgi Cj4gKyNpbmNsdWRlICJkcF9wb3dlci5oIgo+ICsjaW5jbHVkZSAiZHBfY2F0YWxvZy5oIgo+ICsj aW5jbHVkZSAiZHBfYXV4LmgiCj4gKyNpbmNsdWRlICJkcF9saW5rLmgiCj4gKyNpbmNsdWRlICJk cF9wYW5lbC5oIgo+ICsjaW5jbHVkZSAiZHBfY3RybC5oIgo+ICsjaW5jbHVkZSAiZHBfZGlzcGxh eS5oIgo+ICsjaW5jbHVkZSAiZHBfZHJtLmgiCj4gKyNpbmNsdWRlICJkcF9kZWJ1Zy5oIgo+ICsK PiArc3RhdGljIHN0cnVjdCBtc21fZHAgKmdfZHBfZGlzcGxheTsKPiArI2RlZmluZSBIUERfU1RS SU5HX1NJWkUgMzAKPiArCj4gK3N0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgewo+ICsJY2hhciAq bmFtZTsKPiArCWludCBpcnE7Cj4gKwo+ICsJLyogc3RhdGUgdmFyaWFibGVzICovCj4gKwlib29s IGNvcmVfaW5pdGlhbGl6ZWQ7Cj4gKwlib29sIHBvd2VyX29uOwo+ICsJYm9vbCBocGRfaXJxX29u Owo+ICsJYm9vbCBhdWRpb19zdXBwb3J0ZWQ7Cj4gKwo+ICsJc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldjsKPiArCXN0cnVjdCBkZW50cnkgKnJvb3Q7Cj4gKwlzdHJ1Y3QgY29tcGxldGlvbiBu b3RpZmljYXRpb25fY29tcDsKPiArCj4gKwlzdHJ1Y3QgZHBfdXNicGQgICAqdXNicGQ7Cj4gKwlz dHJ1Y3QgZHBfcGFyc2VyICAqcGFyc2VyOwo+ICsJc3RydWN0IGRwX3Bvd2VyICAgKnBvd2VyOwo+ ICsJc3RydWN0IGRwX2NhdGFsb2cgKmNhdGFsb2c7Cj4gKwlzdHJ1Y3QgZHBfYXV4ICAgICAqYXV4 Owo+ICsJc3RydWN0IGRwX2xpbmsgICAgKmxpbms7Cj4gKwlzdHJ1Y3QgZHBfcGFuZWwgICAqcGFu ZWw7Cj4gKwlzdHJ1Y3QgZHBfY3RybCAgICAqY3RybDsKPiArCXN0cnVjdCBkcF9kZWJ1ZyAgICpk ZWJ1ZzsKPiArCj4gKwlzdHJ1Y3QgZHBfdXNicGRfY2IgdXNicGRfY2I7Cj4gKwlzdHJ1Y3QgZHBf ZGlzcGxheV9tb2RlIG1vZGU7Cj4gKwlzdHJ1Y3QgbXNtX2RwIGRwX2Rpc3BsYXk7Cj4gKwo+ICt9 Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHBfZHRfbWF0Y2hbXSA9 IHsKPiArCXsuY29tcGF0aWJsZSA9ICJxY29tLGRwLWRpc3BsYXkifSwKPiArCXt9Cj4gK307Cj4g Kwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgZHBfZGlzcGxheV9pcnEoaW50IGlycSwgdm9pZCAqZGV2 X2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCA9IGRldl9pZDsKPiAr Cj4gKwlpZiAoIWRwKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGRhdGFcbiIpOwo+ICsJCXJldHVy biBJUlFfTk9ORTsKPiArCX0KPiArCj4gKwkvKiBEUCBjb250cm9sbGVyIGlzciAqLwo+ICsJZHAt PmN0cmwtPmlzcihkcC0+Y3RybCk7Cj4gKwo+ICsJLyogRFAgYXV4IGlzciAqLwo+ICsJZHAtPmF1 eC0+aXNyKGRwLT5hdXgpOwo+ICsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkcF9kaXNwbGF5X2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlICptYXN0ZXIsCj4gKwkJCSAgIHZvaWQgKmRhdGEpCj4gK3sKPiArCWludCByYyA9IDA7Cj4g KwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpk cm07Cj4gKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2Owo+ICsJc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwo+ICsKPiArCWlmICghZGV2 IHx8ICFwZGV2IHx8ICFtYXN0ZXIpIHsKPiArCQlwcl9lcnIoImludmFsaWQgcGFyYW0ocyksIGRl diAlcEssIHBkZXYgJXBLLCBtYXN0ZXIgJXBLXG4iLAo+ICsJCQkJZGV2LCBwZGV2LCBtYXN0ZXIp Owo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwlkcm0gPSBk ZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKPiArCWRwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRl dik7Cj4gKwlpZiAoIWRybSB8fCAhZHApIHsKPiArCQlwcl9lcnIoImludmFsaWQgcGFyYW0ocyks IGRybSAlcEssIGRwICVwS1xuIiwKPiArCQkJCWRybSwgZHApOwo+ICsJCXJjID0gLUVJTlZBTDsK PiArCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwlkcC0+ZHBfZGlzcGxheS5kcm1fZGV2ID0gZHJt Owo+ICsJcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlwcml2LT5kcCA9ICYoZHAtPmRwX2Rp c3BsYXkpOwo+ICsKPiArCXJjID0gZHAtPnBhcnNlci0+cGFyc2UoZHAtPnBhcnNlcik7Cj4gKwlp ZiAocmMpIHsKPiArCQlwcl9lcnIoImRldmljZSB0cmVlIHBhcnNpbmcgZmFpbGVkXG4iKTsKPiAr CQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwlyYyA9IGRwLT5hdXgtPmRybV9hdXhfcmVnaXN0ZXIo ZHAtPmF1eCk7Cj4gKwlpZiAocmMpIHsKPiArCQlwcl9lcnIoIkRSTSBEUCBBVVggcmVnaXN0ZXIg ZmFpbGVkXG4iKTsKPiArCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwlyYyA9IGRwLT5wb3dlci0+ cG93ZXJfY2xpZW50X2luaXQoZHAtPnBvd2VyKTsKPiArCWlmIChyYykgewo+ICsJCXByX2Vycigi UG93ZXIgY2xpZW50IGNyZWF0ZSBmYWlsZWRcbiIpOwo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsK PiArZW5kOgo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9kaXNwbGF5 X3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQkJ ICAgICAgdm9pZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7 Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRl dik7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7 Cj4gKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiAr Cj4gKwlpZiAoIWRldiB8fCAhcGRldikgewo+ICsJCXByX2VycigiaW52YWxpZCBwYXJhbShzKVxu Iik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo cGRldik7Cj4gKwlpZiAoIWRwKSB7Cj4gKwkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Cj4g KwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCSh2b2lkKWRwLT5wb3dlci0+cG93ZXJfY2xpZW50X2Rl aW5pdChkcC0+cG93ZXIpOwo+ICsJKHZvaWQpZHAtPmF1eC0+ZHJtX2F1eF9kZXJlZ2lzdGVyKGRw LT5hdXgpOwo+ICsJcHJpdi0+ZHAgPSBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGNvbXBvbmVudF9vcHMgZHBfZGlzcGxheV9jb21wX29wcyA9IHsKPiArCS5iaW5kID0gZHBf ZGlzcGxheV9iaW5kLAo+ICsJLnVuYmluZCA9IGRwX2Rpc3BsYXlfdW5iaW5kLAo+ICt9Owo+ICsK PiArc3RhdGljIGJvb2wgZHBfZGlzcGxheV9pc19kc19icmlkZ2Uoc3RydWN0IGRwX3BhbmVsICpw YW5lbCkKPiArewo+ICsJcmV0dXJuIChwYW5lbC0+ZHBjZFtEUF9ET1dOU1RSRUFNUE9SVF9QUkVT RU5UXSAmCj4gKwkJRFBfRFdOX1NUUk1fUE9SVF9QUkVTRU5UKTsKPiArfQo+ICsKPiArc3RhdGlj IGJvb2wgZHBfZGlzcGxheV9pc19zaW5rX2NvdW50X3plcm8oc3RydWN0IGRwX2Rpc3BsYXlfcHJp dmF0ZSAqZHApCj4gK3sKPiArCXJldHVybiBkcF9kaXNwbGF5X2lzX2RzX2JyaWRnZShkcC0+cGFu ZWwpICYmCj4gKwkJKGRwLT5saW5rLT5zaW5rX2NvdW50LmNvdW50ID09IDApOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBkcF9kaXNwbGF5X3NlbmRfaHBkX2V2ZW50KHN0cnVjdCBtc21fZHAgKmRw X2Rpc3BsYXkpCj4gK3sKPiArCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOwo+ICsJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiArCj4gKwlpZiAoIWRwX2Rpc3BsYXkpIHsK PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4g KwlkcCA9IGNvbnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRl LCBkcF9kaXNwbGF5KTsKPiArCWlmICghZHApIHsKPiArCQlwcl9lcnIoImludmFsaWQgcGFyYW1z XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJY29ubmVjdG9yID0gZHAtPmRwX2Rpc3Bs YXkuY29ubmVjdG9yOwo+ICsJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGNvbm5lY3Rvci0+ZGV2 KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X3NlbmRfaHBkX25vdGlmaWNhdGlv bihzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCwKPiArCQkJCQkgICAgYm9vbCBocGQpCgpU aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGEgZmV3IGRpZmZlcmVudCB0aHJlYWRzIHdpdGgg bm8gbG9ja2luZy4gSXQgc2VlbXMKbGlrZSB0aGVyZSdzIGdvb2Qgb3Bwb3J0dW5pdHkgZm9yIGlz X2Nvbm5lY3RlZCBhbmQgbm90aWZpY2F0aW9uX2NvbXAgdG8gZ2V0IG91dApvZiBzeW5jLgoKQWRk aXRpb25hbGx5LCBpc19jb25uZWN0ZWQgaXMgc2V0IHRvIHRydWUgYmVmb3JlIHRoZSBmdW5jdGlv biByZXR1cm5zIChhbmQKZW5hYmxlIGhhcyBiZWVuIGNvbXBsZXRlZCkuIFNvIGlzIHRoYXQgZ29p bmcgdG8gY2F1c2UgcHJvYmxlbXMgd2hlbiB3ZSBjYWxsCmRldGVjdC9nZXRfbW9kZXMgd2hlcmUg aXNfY29ubmVjdGVkID09IHRydWUgYW5kIHRoZSBodyBpcyBub3QgdXA/CgpQZXJoYXBzIEknbSBt aXNyZWFkaW5nIHRoaXMgZnVuY3Rpb24sIGJ1dCBpdCBzZWVtcyBsaWtlIHRoZSBwbGFuIGlzIHRv IGJsb2NrCnVudGlsIHVzZXJzcGFjZSBoYXMgYmVlbiBub3RpZmllZCBhbmQgZG9lcyBhIGZ1bGwg bW9kZXNldCAoaWU6IGVuYWJsZSk/IElmIHRoYXQKaXMgdGhlIGNhc2UsIHdlIHVzdWFsbHkgZG9u J3Qgd2FudCB0byBoYXZlIHRoZSBoYXJkd2FyZSBsaXQgdXAgdW50aWwgaXQncwphY3R1YWxseSBn b2luZyB0byBiZSB1c2VkLiBJbiB0aGVzZSBjYXNlcywgd2UnbGwgd3JhcCBnZXRfbW9kZXMgaW4K ZW5hYmxlL2Rpc2FibGUgKHdpdGggcHJvcGVyIGxvY2tpbmcpLCBhbmQgd2FpdCBmb3IgbW9kZXNl dCB0byBsZWF2ZSBpdCBvbi4KCj4gK3sKPiArCWlmICgoaHBkICYmIGRwLT5kcF9kaXNwbGF5Lmlz X2Nvbm5lY3RlZCkgfHwKPiArCQkJKCFocGQgJiYgIWRwLT5kcF9kaXNwbGF5LmlzX2Nvbm5lY3Rl ZCkpIHsKPiArCQlwcl9pbmZvKCJIUEQgYWxyZWFkeSAlc1xuIiwgKGhwZCA/ICJvbiIgOiAib2Zm IikpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCS8qIHJlc2V0IHZpZGVvIHBhdHRlcm4g ZmxhZyBvbiBkaXNjb25uZWN0ICovCj4gKwlpZiAoIWhwZCkKPiArCQlkcC0+cGFuZWwtPnZpZGVv X3Rlc3QgPSBmYWxzZTsKPiArCj4gKwlkcC0+ZHBfZGlzcGxheS5pc19jb25uZWN0ZWQgPSBocGQ7 Cj4gKwlyZWluaXRfY29tcGxldGlvbigmZHAtPm5vdGlmaWNhdGlvbl9jb21wKTsKPiArCWRwX2Rp c3BsYXlfc2VuZF9ocGRfZXZlbnQoJmRwLT5kcF9kaXNwbGF5KTsKPiArCj4gKwlpZiAoIXdhaXRf Zm9yX2NvbXBsZXRpb25fdGltZW91dCgmZHAtPm5vdGlmaWNhdGlvbl9jb21wLCBIWiAqIDIpKSB7 Cj4gKwkJcHJfd2FybigiJXMgdGltZW91dFxuIiwgaHBkID8gImNvbm5lY3QiIDogImRpc2Nvbm5l Y3QiKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2hpZ2goc3RydWN0IGRwX2Rp c3BsYXlfcHJpdmF0ZSAqZHApCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZWRpZCAq ZWRpZDsKPiArCj4gKwlkcC0+YXV4LT5pbml0KGRwLT5hdXgsIGRwLT5wYXJzZXItPmF1eF9jZmcp Owo+ICsKPiArCWlmIChkcC0+bGluay0+cHNtX2VuYWJsZWQpCj4gKwkJZ290byBub3RpZnk7Cj4g Kwo+ICsJcmMgPSBkcC0+cGFuZWwtPnJlYWRfc2lua19jYXBzKGRwLT5wYW5lbCwgZHAtPmRwX2Rp c3BsYXkuY29ubmVjdG9yKTsKPiArCWlmIChyYykKPiArCQlnb3RvIG5vdGlmeTsKPiArCj4gKwlk cC0+bGluay0+cHJvY2Vzc19yZXF1ZXN0KGRwLT5saW5rKTsKPiArCj4gKwlpZiAoZHBfZGlzcGxh eV9pc19zaW5rX2NvdW50X3plcm8oZHApKSB7Cj4gKwkJcHJfZGVidWcoIm5vIGRvd25zdHJlYW0g ZGV2aWNlcyBjb25uZWN0ZWRcbiIpOwo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGVuZDsK PiArCX0KPiArCj4gKwllZGlkID0gZHAtPnBhbmVsLT5lZGlkOwo+ICsKPiArCWRwLT5hdWRpb19z dXBwb3J0ZWQgPSBkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8oZWRpZCk7Cj4gKwo+ICsJZHAtPnBh bmVsLT5oYW5kbGVfc2lua19yZXF1ZXN0KGRwLT5wYW5lbCk7Cj4gKwo+ICsJZHAtPmRwX2Rpc3Bs YXkubWF4X3BjbGtfa2h6ID0gZHAtPnBhcnNlci0+bWF4X3BjbGtfa2h6Owo+ICtub3RpZnk6Cj4g KwlkcF9kaXNwbGF5X3NlbmRfaHBkX25vdGlmaWNhdGlvbihkcCwgdHJ1ZSk7Cj4gKwo+ICtlbmQ6 Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfaG9zdF9p bml0KHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwKQo+ICt7Cj4gKwlib29sIGZsaXAgPSBm YWxzZTsKPiArCj4gKwlpZiAoZHAtPmNvcmVfaW5pdGlhbGl6ZWQpIHsKPiArCQlwcl9kZWJ1Zygi RFAgY29yZSBhbHJlYWR5IGluaXRpYWxpemVkXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ ICsJaWYgKGRwLT51c2JwZC0+b3JpZW50YXRpb24gPT0gT1JJRU5UQVRJT05fQ0MyKQo+ICsJCWZs aXAgPSB0cnVlOwo+ICsKPiArCWRwLT5wb3dlci0+aW5pdChkcC0+cG93ZXIsIGZsaXApOwo+ICsJ ZHAtPmN0cmwtPmluaXQoZHAtPmN0cmwsIGZsaXApOwo+ICsJZW5hYmxlX2lycShkcC0+aXJxKTsK PiArCWRwLT5jb3JlX2luaXRpYWxpemVkID0gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg ZHBfZGlzcGxheV9ob3N0X2RlaW5pdChzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCkKPiAr ewo+ICsJaWYgKCFkcC0+Y29yZV9pbml0aWFsaXplZCkgewo+ICsJCXByX2RlYnVnKCJEUCBjb3Jl IGFscmVhZHkgb2ZmXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHAtPmN0cmwtPmRl aW5pdChkcC0+Y3RybCk7Cj4gKwlkcC0+cG93ZXItPmRlaW5pdChkcC0+cG93ZXIpOwo+ICsJZGlz YWJsZV9pcnEoZHAtPmlycSk7Cj4gKwlkcC0+Y29yZV9pbml0aWFsaXplZCA9IGZhbHNlOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2xvdyhzdHJ1Y3QgZHBf ZGlzcGxheV9wcml2YXRlICpkcCkKPiArewo+ICsJLyogY2FuY2VsIGFueSBwZW5kaW5nIHJlcXVl c3QgKi8KPiArCWRwLT5jdHJsLT5hYm9ydChkcC0+Y3RybCk7Cj4gKwo+ICsJZHBfZGlzcGxheV9z ZW5kX2hwZF9ub3RpZmljYXRpb24oZHAsIGZhbHNlKTsKPiArCj4gKwlkcC0+YXV4LT5kZWluaXQo ZHAtPmF1eCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV91c2JwZF9jb25maWd1 cmVfY2Ioc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0 IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Cj4gKwo+ICsJaWYgKCFkZXYpIHsKPiArCQlwcl9lcnIo ImludmFsaWQgZGV2XG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlbmQ7Cj4gKwl9 Cj4gKwo+ICsJZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCWlmICghZHApIHsKPiArCQlw cl9lcnIoIm5vIGRyaXZlciBkYXRhIGZvdW5kXG4iKTsKPiArCQlyYyA9IC1FTk9ERVY7Cj4gKwkJ Z290byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJZHBfZGlzcGxheV9ob3N0X2luaXQoZHApOwo+ICsKPiAr CWlmIChkcC0+dXNicGQtPmhwZF9oaWdoKQo+ICsJCWRwX2Rpc3BsYXlfcHJvY2Vzc19ocGRfaGln aChkcCk7Cj4gK2VuZDoKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBf ZGlzcGxheV9jbGVhbihzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCkKPiArewo+ICsJZHAt PmN0cmwtPnB1c2hfaWRsZShkcC0+Y3RybCk7Cj4gKwlkcC0+Y3RybC0+b2ZmKGRwLT5jdHJsKTsK PiArfQo+ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X3VzYnBkX2Rpc2Nvbm5lY3RfY2Ioc3Ry dWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2Rpc3Bs YXlfcHJpdmF0ZSAqZHA7Cj4gKwo+ICsJaWYgKCFkZXYpIHsKPiArCQlwcl9lcnIoImludmFsaWQg ZGV2XG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJ ZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCWlmICghZHApIHsKPiArCQlwcl9lcnIoIm5v IGRyaXZlciBkYXRhIGZvdW5kXG4iKTsKPiArCQlyYyA9IC1FTk9ERVY7Cj4gKwkJZ290byBlbmQ7 Cj4gKwl9Cj4gKwo+ICsJLyogY2FuY2VsIGFueSBwZW5kaW5nIHJlcXVlc3QgKi8KPiArCWRwLT5j dHJsLT5hYm9ydChkcC0+Y3RybCk7Cj4gKwo+ICsJcmMgPSBkcF9kaXNwbGF5X3NlbmRfaHBkX25v dGlmaWNhdGlvbihkcCwgZmFsc2UpOwo+ICsKPiArCS8qIGlmIGNhYmxlIGlzIGRpc2Nvbm5lY3Rl ZCwgcmVzZXQgcHNtX2VuYWJsZWQgZmxhZyAqLwo+ICsJaWYgKCFkcC0+dXNicGQtPmFsdF9tb2Rl X2NmZ19kb25lKQo+ICsJCWRwLT5saW5rLT5wc21fZW5hYmxlZCA9IGZhbHNlOwo+ICsKPiArCWlm ICgocmMgPCAwKSAmJiBkcC0+cG93ZXJfb24pCj4gKwkJZHBfZGlzcGxheV9jbGVhbihkcCk7Cj4g Kwo+ICsJZHBfZGlzcGxheV9ob3N0X2RlaW5pdChkcCk7Cj4gK2VuZDoKPiArCXJldHVybiByYzsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfZGlzcGxheV9oYW5kbGVfdmlkZW9fcmVxdWVzdChz dHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCkKPiArewo+ICsJaWYgKGRwLT5saW5rLT5zaW5r X3JlcXVlc3QgJiBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTikgewo+ICsJCS8qIGZvcmNlIGRp c2Nvbm5lY3QgZm9sbG93ZWQgYnkgY29ubmVjdCAqLwo+ICsJCWRwLT51c2JwZC0+Y29ubmVjdChk cC0+dXNicGQsIGZhbHNlKTsKPiArCQlkcC0+cGFuZWwtPnZpZGVvX3Rlc3QgPSB0cnVlOwo+ICsJ CWRwLT51c2JwZC0+Y29ubmVjdChkcC0+dXNicGQsIHRydWUpOwo+ICsJCWRwLT5saW5rLT5zZW5k X3Rlc3RfcmVzcG9uc2UoZHAtPmxpbmspOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRw X2Rpc3BsYXlfaGFuZGxlX2hwZF9pcnEoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCj4g K3sKPiArCWlmIChkcC0+bGluay0+c2lua19yZXF1ZXN0ICYgRFNfUE9SVF9TVEFUVVNfQ0hBTkdF RCkgewo+ICsJCWRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZpY2F0aW9uKGRwLCBmYWxzZSk7Cj4g Kwo+ICsJCWlmIChkcF9kaXNwbGF5X2lzX3NpbmtfY291bnRfemVybyhkcCkpIHsKPiArCQkJcHJf ZGVidWcoInNpbmsgY291bnQgaXMgemVybywgbm90aGluZyB0byBkb1xuIik7Cj4gKwkJCXJldHVy biAwOwo+ICsJCX0KPiArCj4gKwkJcmV0dXJuIGRwX2Rpc3BsYXlfcHJvY2Vzc19ocGRfaGlnaChk cCk7Cj4gKwl9Cj4gKwo+ICsJZHAtPmN0cmwtPmhhbmRsZV9zaW5rX3JlcXVlc3QoZHAtPmN0cmwp Owo+ICsKPiArCWRwX2Rpc3BsYXlfaGFuZGxlX3ZpZGVvX3JlcXVlc3QoZHApOwo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfdXNicGRfYXR0ZW50aW9u X2NiKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBk cF9kaXNwbGF5X3ByaXZhdGUgKmRwOwo+ICsKPiArCWlmICghZGV2KSB7Cj4gKwkJcHJfZXJyKCJp bnZhbGlkIGRldlxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZHAgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCWlmICghZHApIHsKPiArCQlwcl9lcnIoIm5vIGRyaXZl ciBkYXRhIGZvdW5kXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlpZiAo ZHAtPnVzYnBkLT5ocGRfaXJxKSB7Cj4gKwkJZHAtPmhwZF9pcnFfb24gPSB0cnVlOwo+ICsKPiAr CQlyYyA9IGRwLT5saW5rLT5wcm9jZXNzX3JlcXVlc3QoZHAtPmxpbmspOwo+ICsJCS8qIGNoZWNr IGZvciBhbnkgdGVzdCByZXF1ZXN0IGlzc3VlZCBieSBzaW5rICovCj4gKwkJaWYgKCFyYykKPiAr CQkJZHBfZGlzcGxheV9oYW5kbGVfaHBkX2lycShkcCk7Cj4gKwo+ICsJCWRwLT5ocGRfaXJxX29u ID0gZmFsc2U7Cj4gKwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFkcC0+dXNicGQtPmhw ZF9oaWdoKSB7Cj4gKwkJZHBfZGlzcGxheV9wcm9jZXNzX2hwZF9sb3coZHApOwo+ICsJCWdvdG8g ZW5kOwo+ICsJfQo+ICsKPiArCWlmIChkcC0+dXNicGQtPmFsdF9tb2RlX2NmZ19kb25lKQo+ICsJ CWRwX2Rpc3BsYXlfcHJvY2Vzc19ocGRfaGlnaChkcCk7Cj4gK2VuZDoKPiArCXJldHVybiByYzsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfZGlzcGxheV9kZWluaXRfc3ViX21vZHVsZXMoc3Ry dWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCj4gK3sKPiArCWRwX2N0cmxfcHV0KGRwLT5jdHJs KTsKPiArCWRwX2xpbmtfcHV0KGRwLT5saW5rKTsKPiArCWRwX3BhbmVsX3B1dChkcC0+cGFuZWwp Owo+ICsJZHBfYXV4X3B1dChkcC0+YXV4KTsKPiArCWRwX3Bvd2VyX3B1dChkcC0+cG93ZXIpOwo+ ICsJZHBfY2F0YWxvZ19wdXQoZHAtPmNhdGFsb2cpOwo+ICsJZHBfcGFyc2VyX3B1dChkcC0+cGFy c2VyKTsKPiArCWRwX2RlYnVnX3B1dChkcC0+ZGVidWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGRwX2luaXRfc3ViX21vZHVsZXMoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCj4gK3sK PiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHAtPnBkZXYtPmRldjsK PiArCXN0cnVjdCBkcF91c2JwZF9jYiAqY2IgPSAmZHAtPnVzYnBkX2NiOwo+ICsJc3RydWN0IGRw X2N0cmxfaW4gY3RybF9pbiA9IHsKPiArCQkuZGV2ID0gZGV2LAo+ICsJfTsKPiArCXN0cnVjdCBk cF9wYW5lbF9pbiBwYW5lbF9pbiA9IHsKPiArCQkuZGV2ID0gZGV2LAo+ICsJfTsKPiArCj4gKwkv KiBDYWxsYmFjayBBUElzIHVzZWQgZm9yIGNhYmxlIHN0YXR1cyBjaGFuZ2UgZXZlbnQgKi8KPiAr CWNiLT5jb25maWd1cmUgID0gZHBfZGlzcGxheV91c2JwZF9jb25maWd1cmVfY2I7Cj4gKwljYi0+ ZGlzY29ubmVjdCA9IGRwX2Rpc3BsYXlfdXNicGRfZGlzY29ubmVjdF9jYjsKPiArCWNiLT5hdHRl bnRpb24gID0gZHBfZGlzcGxheV91c2JwZF9hdHRlbnRpb25fY2I7Cj4gKwo+ICsJZHAtPnBhcnNl ciA9IGRwX3BhcnNlcl9nZXQoZHAtPnBkZXYpOwo+ICsJaWYgKElTX0VSUihkcC0+cGFyc2VyKSkg ewo+ICsJCXJjID0gUFRSX0VSUihkcC0+cGFyc2VyKTsKPiArCQlwcl9lcnIoImZhaWxlZCB0byBp bml0aWFsaXplIHBhcnNlciwgcmMgPSAlZFxuIiwgcmMpOwo+ICsJCWRwLT5wYXJzZXIgPSBOVUxM Owo+ICsJCWdvdG8gZXJyb3JfcGFyc2VyOwo+ICsJfQo+ICsKPiArCWRwLT5jYXRhbG9nID0gZHBf Y2F0YWxvZ19nZXQoZGV2LCAmZHAtPnBhcnNlci0+aW8pOwo+ICsJaWYgKElTX0VSUihkcC0+Y2F0 YWxvZykpIHsKPiArCQlyYyA9IFBUUl9FUlIoZHAtPmNhdGFsb2cpOwo+ICsJCXByX2VycigiZmFp bGVkIHRvIGluaXRpYWxpemUgY2F0YWxvZywgcmMgPSAlZFxuIiwgcmMpOwo+ICsJCWRwLT5jYXRh bG9nID0gTlVMTDsKPiArCQlnb3RvIGVycm9yX2NhdGFsb2c7Cj4gKwl9Cj4gKwo+ICsJZHAtPnBv d2VyID0gZHBfcG93ZXJfZ2V0KGRwLT5wYXJzZXIpOwo+ICsJaWYgKElTX0VSUihkcC0+cG93ZXIp KSB7Cj4gKwkJcmMgPSBQVFJfRVJSKGRwLT5wb3dlcik7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8g aW5pdGlhbGl6ZSBwb3dlciwgcmMgPSAlZFxuIiwgcmMpOwo+ICsJCWRwLT5wb3dlciA9IE5VTEw7 Cj4gKwkJZ290byBlcnJvcl9wb3dlcjsKPiArCX0KPiArCj4gKwlkcC0+YXV4ID0gZHBfYXV4X2dl dChkZXYsICZkcC0+Y2F0YWxvZy0+YXV4LCBkcC0+cGFyc2VyLT5hdXhfY2ZnKTsKPiArCWlmIChJ U19FUlIoZHAtPmF1eCkpIHsKPiArCQlyYyA9IFBUUl9FUlIoZHAtPmF1eCk7Cj4gKwkJcHJfZXJy KCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdXgsIHJjID0gJWRcbiIsIHJjKTsKPiArCQlkcC0+YXV4 ID0gTlVMTDsKPiArCQlnb3RvIGVycm9yX2F1eDsKPiArCX0KPiArCj4gKwlkcC0+bGluayA9IGRw X2xpbmtfZ2V0KGRldiwgZHAtPmF1eCk7Cj4gKwlpZiAoSVNfRVJSKGRwLT5saW5rKSkgewo+ICsJ CXJjID0gUFRSX0VSUihkcC0+bGluayk7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6 ZSBsaW5rLCByYyA9ICVkXG4iLCByYyk7Cj4gKwkJZHAtPmxpbmsgPSBOVUxMOwo+ICsJCWdvdG8g ZXJyb3JfbGluazsKPiArCX0KPiArCj4gKwlwYW5lbF9pbi5hdXggPSBkcC0+YXV4Owo+ICsJcGFu ZWxfaW4uY2F0YWxvZyA9ICZkcC0+Y2F0YWxvZy0+cGFuZWw7Cj4gKwlwYW5lbF9pbi5saW5rID0g ZHAtPmxpbms7Cj4gKwo+ICsJZHAtPnBhbmVsID0gZHBfcGFuZWxfZ2V0KCZwYW5lbF9pbik7Cj4g KwlpZiAoSVNfRVJSKGRwLT5wYW5lbCkpIHsKPiArCQlyYyA9IFBUUl9FUlIoZHAtPnBhbmVsKTsK PiArCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXplIHBhbmVsLCByYyA9ICVkXG4iLCByYyk7 Cj4gKwkJZHAtPnBhbmVsID0gTlVMTDsKPiArCQlnb3RvIGVycm9yX3BhbmVsOwo+ICsJfQo+ICsK PiArCWN0cmxfaW4ubGluayA9IGRwLT5saW5rOwo+ICsJY3RybF9pbi5wYW5lbCA9IGRwLT5wYW5l bDsKPiArCWN0cmxfaW4uYXV4ID0gZHAtPmF1eDsKPiArCWN0cmxfaW4ucG93ZXIgPSBkcC0+cG93 ZXI7Cj4gKwljdHJsX2luLmNhdGFsb2cgPSAmZHAtPmNhdGFsb2ctPmN0cmw7Cj4gKwljdHJsX2lu LnBhcnNlciA9IGRwLT5wYXJzZXI7Cj4gKwo+ICsJZHAtPmN0cmwgPSBkcF9jdHJsX2dldCgmY3Ry bF9pbik7Cj4gKwlpZiAoSVNfRVJSKGRwLT5jdHJsKSkgewo+ICsJCXJjID0gUFRSX0VSUihkcC0+ Y3RybCk7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjdHJsLCByYyA9ICVkXG4i LCByYyk7Cj4gKwkJZHAtPmN0cmwgPSBOVUxMOwo+ICsJCWdvdG8gZXJyb3JfY3RybDsKPiArCX0K PiArCj4gKwlkcC0+ZGVidWcgPSBkcF9kZWJ1Z19nZXQoZGV2LCBkcC0+cGFuZWwsIGRwLT51c2Jw ZCwKPiArCQkJCWRwLT5saW5rLCAmZHAtPmRwX2Rpc3BsYXkuY29ubmVjdG9yKTsKPiArCWlmIChJ U19FUlIoZHAtPmRlYnVnKSkgewo+ICsJCXJjID0gUFRSX0VSUihkcC0+ZGVidWcpOwo+ICsJCXBy X2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgZGVidWcsIHJjID0gJWRcbiIsIHJjKTsKPiArCQlk cC0+ZGVidWcgPSBOVUxMOwo+ICsJCWdvdG8gZXJyb3JfZGVidWc7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIHJjOwo+ICtlcnJvcl9kZWJ1ZzoKPiArCWRwX2N0cmxfcHV0KGRwLT5jdHJsKTsKPiArZXJy b3JfY3RybDoKPiArCWRwX3BhbmVsX3B1dChkcC0+cGFuZWwpOwo+ICtlcnJvcl9wYW5lbDoKPiAr CWRwX2xpbmtfcHV0KGRwLT5saW5rKTsKPiArZXJyb3JfbGluazoKPiArCWRwX2F1eF9wdXQoZHAt PmF1eCk7Cj4gK2Vycm9yX2F1eDoKPiArCWRwX3Bvd2VyX3B1dChkcC0+cG93ZXIpOwo+ICtlcnJv cl9wb3dlcjoKPiArCWRwX2NhdGFsb2dfcHV0KGRwLT5jYXRhbG9nKTsKPiArZXJyb3JfY2F0YWxv ZzoKPiArCWRwX3BhcnNlcl9wdXQoZHAtPnBhcnNlcik7Cj4gK2Vycm9yX3BhcnNlcjoKPiArCXJl dHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X3NldF9tb2RlKHN0cnVj dCBtc21fZHAgKmRwX2Rpc3BsYXksCj4gKwkJCSAgICAgICBzdHJ1Y3QgZHBfZGlzcGxheV9tb2Rl ICptb2RlKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0 ZSAqZHA7Cj4gKwo+ICsJaWYgKCFkcF9kaXNwbGF5KSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlu cHV0XG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiArCWRw ID0gY29udGFpbmVyX29mKGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRw X2Rpc3BsYXkpOwo+ICsKPiArCWRwLT5wYW5lbC0+cGluZm8gPSBtb2RlLT50aW1pbmc7Cj4gKwlk cC0+cGFuZWwtPmluaXRfaW5mbyhkcC0+cGFuZWwpOwo+ICtlcnJvcjoKPiArCXJldHVybiByYzsK PiArfQo+ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X3ByZXBhcmUoc3RydWN0IG1zbV9kcCAq ZHApCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlf ZW5hYmxlKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpCj4gK3sKPiArCWludCByYyA9IDA7Cj4g KwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPiArCj4gKwlpZiAoIWRwX2Rpc3BsYXkp IHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJjID0gLUVJTlZBTDsKPiAr CQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCWRwID0gY29udGFpbmVyX29mKGRwX2Rpc3BsYXks IHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOwo+ICsKPiArCWlmIChkcC0+ cG93ZXJfb24pIHsKPiArCQlwcl9kZWJ1ZygiTGluayBhbHJlYWR5IHNldHVwLCByZXR1cm5cbiIp Owo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWRwLT5hdXgtPmluaXQoZHAtPmF1eCwgZHAt PnBhcnNlci0+YXV4X2NmZyk7Cj4gKwo+ICsJcmMgPSBkcC0+Y3RybC0+b24oZHAtPmN0cmwpOwo+ ICsJaWYgKCFyYykKPiArCQlkcC0+cG93ZXJfb24gPSB0cnVlOwo+ICtlcnJvcjoKPiArCXJldHVy biByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X3Bvc3RfZW5hYmxlKHN0cnVj dCBtc21fZHAgKmRwX2Rpc3BsYXkpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBf ZGlzcGxheV9wcml2YXRlICpkcDsKPiArCj4gKwlpZiAoIWRwX2Rpc3BsYXkpIHsKPiArCQlwcl9l cnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGVuZDsK PiArCX0KPiArCj4gKwlkcCA9IGNvbnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlz cGxheV9wcml2YXRlLCBkcF9kaXNwbGF5KTsKPiArCj4gKwljb21wbGV0ZV9hbGwoJmRwLT5ub3Rp ZmljYXRpb25fY29tcCk7Cj4gKwo+ICtlbmQ6Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZHBfZGlzcGxheV9wcmVfZGlzYWJsZShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5 KQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7 Cj4gKwo+ICsJaWYgKCFkcF9kaXNwbGF5KSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4i KTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiArCj4gKwlkcCA9 IGNvbnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9k aXNwbGF5KTsKPiArCj4gKwlpZiAoZHAtPnVzYnBkLT5hbHRfbW9kZV9jZmdfZG9uZSAmJiAoZHAt PnVzYnBkLT5ocGRfaGlnaCB8fAo+ICsJCWRwLT51c2JwZC0+Zm9yY2VkX2Rpc2Nvbm5lY3QpKQo+ ICsJCWRwLT5saW5rLT5wc21fY29uZmlnKGRwLT5saW5rLCAmZHAtPnBhbmVsLT5saW5rX2luZm8s IHRydWUpOwo+ICsKPiArCWRwLT5jdHJsLT5wdXNoX2lkbGUoZHAtPmN0cmwpOwo+ICtlcnJvcjoK PiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9kaXNwbGF5X2Rpc2FibGUo c3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVj dCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOwo+ICsKPiArCWlmICghZHBfZGlzcGxheSkgewo+ICsJ CXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8g ZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJZHAgPSBjb250YWluZXJfb2YoZHBfZGlzcGxheSwgc3RydWN0 IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgZHBfZGlzcGxheSk7Cj4gKwo+ICsJaWYgKCFkcC0+cG93ZXJf b24gfHwgIWRwLT5jb3JlX2luaXRpYWxpemVkKQo+ICsJCWdvdG8gZXJyb3I7Cj4gKwo+ICsJZHAt PmN0cmwtPm9mZihkcC0+Y3RybCk7Cj4gKwo+ICsJZHAtPnBvd2VyX29uID0gZmFsc2U7Cj4gKwo+ ICsJY29tcGxldGVfYWxsKCZkcC0+bm90aWZpY2F0aW9uX2NvbXApOwo+ICtlcnJvcjoKPiArCXJl dHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9yZXF1ZXN0X2lycShzdHJ1Y3QgbXNt X2RwICpkcF9kaXNwbGF5KQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2Rpc3Bs YXlfcHJpdmF0ZSAqZHA7Cj4gKwo+ICsJaWYgKCFkcF9kaXNwbGF5KSB7Cj4gKwkJcHJfZXJyKCJp bnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlkcCA9 IGNvbnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9k aXNwbGF5KTsKPiArCj4gKwlkcC0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZHAtPnBkZXYt PmRldi5vZl9ub2RlLCAwKTsKPiArCWlmIChkcC0+aXJxIDwgMCkgewo+ICsJCXJjID0gZHAtPmly cTsKPiArCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgaXJxOiAlZFxuIiwgcmMpOwo+ICsJCXJldHVy biByYzsKPiArCX0KPiArCj4gKwlyYyA9IGRldm1fcmVxdWVzdF9pcnEoJmRwLT5wZGV2LT5kZXYs IGRwLT5pcnEsIGRwX2Rpc3BsYXlfaXJxLAo+ICsJCUlSUUZfVFJJR0dFUl9ISUdILCAiZHBfZGlz cGxheV9pc3IiLCBkcCk7Cj4gKwlpZiAocmMgPCAwKSB7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8g cmVxdWVzdCBJUlEldTogJWRcbiIsCj4gKwkJCQlkcC0+aXJxLCByYyk7Cj4gKwkJcmV0dXJuIHJj Owo+ICsJfQo+ICsJZGlzYWJsZV9pcnEoZHAtPmlycSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHBfZGVidWcgKmRwX2dldF9kZWJ1ZyhzdHJ1Y3QgbXNtX2Rw ICpkcF9kaXNwbGF5KQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPiAr Cj4gKwlpZiAoIWRwX2Rpc3BsYXkpIHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICsJfQo+ICsKPiArCWRwID0gY29udGFpbmVy X29mKGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIGRwX2Rpc3BsYXkpOwo+ ICsKPiArCXJldHVybiBkcC0+ZGVidWc7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxh eV91bnByZXBhcmUoc3RydWN0IG1zbV9kcCAqZHApCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZShzdHJ1Y3QgbXNtX2RwICpk cCwgdTMyIG1vZGVfcGNsa19raHopCj4gK3sKPiArCWNvbnN0IHUzMiBudW1fY29tcG9uZW50cyA9 IDMsIGRlZmF1bHRfYnBwID0gMjQ7Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9k aXNwbGF5Owo+ICsJc3RydWN0IGRybV9kcF9saW5rICpsaW5rX2luZm87Cj4gKwl1MzIgbW9kZV9y YXRlX2toeiA9IDAsIHN1cHBvcnRlZF9yYXRlX2toeiA9IDAsIG1vZGVfYnBwID0gMDsKPiArCj4g KwlpZiAoIWRwIHx8ICFtb2RlX3BjbGtfa2h6IHx8ICFkcC0+Y29ubmVjdG9yKSB7Cj4gKwkJcHJf ZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ ICsJZHBfZGlzcGxheSA9IGNvbnRhaW5lcl9vZihkcCwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0 ZSwgZHBfZGlzcGxheSk7Cj4gKwlsaW5rX2luZm8gPSAmZHBfZGlzcGxheS0+cGFuZWwtPmxpbmtf aW5mbzsKPiArCj4gKwltb2RlX2JwcCA9IGRwLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMg KiBudW1fY29tcG9uZW50czsKPiArCWlmICghbW9kZV9icHApCj4gKwkJbW9kZV9icHAgPSBkZWZh dWx0X2JwcDsKPiArCj4gKwltb2RlX2JwcCA9IGRwX2Rpc3BsYXktPnBhbmVsLT5nZXRfbW9kZV9i cHAoZHBfZGlzcGxheS0+cGFuZWwsCj4gKwkJCW1vZGVfYnBwLCBtb2RlX3BjbGtfa2h6KTsKPiAr Cj4gKwltb2RlX3JhdGVfa2h6ID0gbW9kZV9wY2xrX2toeiAqIG1vZGVfYnBwOwo+ICsJc3VwcG9y dGVkX3JhdGVfa2h6ID0gbGlua19pbmZvLT5udW1fbGFuZXMgKiBsaW5rX2luZm8tPnJhdGUgKiA4 Owo+ICsKPiArCWlmIChtb2RlX3JhdGVfa2h6ID4gc3VwcG9ydGVkX3JhdGVfa2h6KQo+ICsJCXJl dHVybiBNT0RFX0JBRDsKPiArCj4gKwlyZXR1cm4gTU9ERV9PSzsKPiArfQo+ICsKPiArc3RhdGlj IGludCBkcF9kaXNwbGF5X2dldF9tb2RlcyhzdHJ1Y3QgbXNtX2RwICpkcCwKPiArCQkJCXN0cnVj dCBkcF9kaXNwbGF5X21vZGUgKmRwX21vZGUpCj4gK3sKPiArCXN0cnVjdCBkcF9kaXNwbGF5X3By aXZhdGUgKmRwX2Rpc3BsYXk7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoIWRwKSB7Cj4g KwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ ICsJZHBfZGlzcGxheSA9IGNvbnRhaW5lcl9vZihkcCwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0 ZSwgZHBfZGlzcGxheSk7Cj4gKwo+ICsJcmV0ID0gZHBfZGlzcGxheS0+cGFuZWwtPmdldF9tb2Rl cyhkcF9kaXNwbGF5LT5wYW5lbCwKPiArCQlkcC0+Y29ubmVjdG9yLCBkcF9tb2RlKTsKPiArCWlm IChkcF9tb2RlLT50aW1pbmcucGl4ZWxfY2xrX2toeikKPiArCQlkcC0+bWF4X3BjbGtfa2h6ID0g ZHBfbW9kZS0+dGltaW5nLnBpeGVsX2Nsa19raHo7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgYm9vbCBkcF9kaXNwbGF5X2NoZWNrX3ZpZGVvX3Rlc3Qoc3RydWN0IG1zbV9kcCAq ZHApCj4gK3sKPiArCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwX2Rpc3BsYXk7Cj4gKwo+ ICsJaWYgKCFkcCkgewo+ICsJCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwo+ICsJCXJldHVy biBmYWxzZTsKPiArCX0KPiArCj4gKwlkcF9kaXNwbGF5ID0gY29udGFpbmVyX29mKGRwLCBzdHJ1 Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9kaXNwbGF5KTsKPiArCj4gKwlpZiAoZHBfZGlzcGxh eS0+cGFuZWwtPnZpZGVvX3Rlc3QpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJcmV0dXJuIGZh bHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfZ2V0X3Rlc3RfYnBwKHN0cnVj dCBtc21fZHAgKmRwKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9kaXNw bGF5Owo+ICsKPiArCWlmICghZHApIHsKPiArCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsK PiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlkcF9kaXNwbGF5ID0gY29udGFpbmVyX29mKGRw LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCBkcF9kaXNwbGF5KTsKPiArCj4gKwlyZXR1cm4g ZHBfbGlua19iaXRfZGVwdGhfdG9fYnBwKAo+ICsJCWRwX2Rpc3BsYXktPmxpbmstPnRlc3Rfdmlk ZW8udGVzdF9iaXRfZGVwdGgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJaW50IHJjID0gMDsKPiAr CXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOwo+ICsKPiArCWlmICghcGRldiB8fCAhcGRl di0+ZGV2Lm9mX25vZGUpIHsKPiArCQlwcl9lcnIoInBkZXYgbm90IGZvdW5kXG4iKTsKPiArCQly ZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlkcCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2 LCBzaXplb2YoKmRwKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWRwKQo+ICsJCXJldHVybiAtRU5P TUVNOwo+ICsKPiArCWluaXRfY29tcGxldGlvbigmZHAtPm5vdGlmaWNhdGlvbl9jb21wKTsKPiAr Cj4gKwlkcC0+cGRldiA9IHBkZXY7Cj4gKwlkcC0+bmFtZSA9ICJkcm1fZHAiOwo+ICsKPiArCXJj ID0gZHBfaW5pdF9zdWJfbW9kdWxlcyhkcCk7Cj4gKwlpZiAocmMpIHsKPiArCQlwcl9lcnIoImlu aXQgc3ViIG1vZHVsZSBmYWlsZWRcbiIpOwo+ICsJCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgZHAp Owo+ICsJCXJldHVybiAtRVBST0JFX0RFRkVSOwo+ICsJfQo+ICsKPiArCXBsYXRmb3JtX3NldF9k cnZkYXRhKHBkZXYsIGRwKTsKPiArCj4gKwlnX2RwX2Rpc3BsYXkgPSAmZHAtPmRwX2Rpc3BsYXk7 Cj4gKwo+ICsJZ19kcF9kaXNwbGF5LT5lbmFibGUgICAgICAgID0gZHBfZGlzcGxheV9lbmFibGU7 Cj4gKwlnX2RwX2Rpc3BsYXktPnBvc3RfZW5hYmxlICAgPSBkcF9kaXNwbGF5X3Bvc3RfZW5hYmxl Owo+ICsJZ19kcF9kaXNwbGF5LT5wcmVfZGlzYWJsZSAgID0gZHBfZGlzcGxheV9wcmVfZGlzYWJs ZTsKPiArCWdfZHBfZGlzcGxheS0+ZGlzYWJsZSAgICAgICA9IGRwX2Rpc3BsYXlfZGlzYWJsZTsK PiArCWdfZHBfZGlzcGxheS0+c2V0X21vZGUgICAgICA9IGRwX2Rpc3BsYXlfc2V0X21vZGU7Cj4g KwlnX2RwX2Rpc3BsYXktPnZhbGlkYXRlX21vZGUgPSBkcF9kaXNwbGF5X3ZhbGlkYXRlX21vZGU7 Cj4gKwlnX2RwX2Rpc3BsYXktPmdldF9tb2RlcyAgICAgPSBkcF9kaXNwbGF5X2dldF9tb2RlczsK PiArCWdfZHBfZGlzcGxheS0+cHJlcGFyZSAgICAgICA9IGRwX2Rpc3BsYXlfcHJlcGFyZTsKPiAr CWdfZHBfZGlzcGxheS0+dW5wcmVwYXJlICAgICA9IGRwX2Rpc3BsYXlfdW5wcmVwYXJlOwo+ICsJ Z19kcF9kaXNwbGF5LT5yZXF1ZXN0X2lycSAgID0gZHBfcmVxdWVzdF9pcnE7Cj4gKwlnX2RwX2Rp c3BsYXktPmdldF9kZWJ1ZyAgICAgPSBkcF9nZXRfZGVidWc7Cj4gKwlnX2RwX2Rpc3BsYXktPnNl bmRfaHBkX2V2ZW50ICAgID0gZHBfZGlzcGxheV9zZW5kX2hwZF9ldmVudDsKPiArCWdfZHBfZGlz cGxheS0+aXNfdmlkZW9fdGVzdCA9IGRwX2Rpc3BsYXlfY2hlY2tfdmlkZW9fdGVzdDsKPiArCWdf ZHBfZGlzcGxheS0+Z2V0X3Rlc3RfYnBwID0gZHBfZGlzcGxheV9nZXRfdGVzdF9icHA7Cj4gKwo+ ICsJcmMgPSBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZkcF9kaXNwbGF5X2NvbXBfb3BzKTsK PiArCWlmIChyYykgewo+ICsJCXByX2VycigiY29tcG9uZW50IGFkZCBmYWlsZWQsIHJjPSVkXG4i LCByYyk7Cj4gKwkJZHBfZGlzcGxheV9kZWluaXRfc3ViX21vZHVsZXMoZHApOwo+ICsJCWRldm1f a2ZyZWUoJnBkZXYtPmRldiwgZHApOwo+ICsJfQo+ICsKPiArCXJldHVybiByYzsKPiArfQo+ICsK PiAraW50IGRwX2Rpc3BsYXlfZ2V0X2Rpc3BsYXlzKHZvaWQgKipkaXNwbGF5cywgaW50IGNvdW50 KQo+ICt7Cj4gKwlpZiAoIWRpc3BsYXlzKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGRhdGFcbiIp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWlmIChjb3VudCAhPSAxKSB7Cj4g KwkJcHJfZXJyKCJpbnZhbGlkIG51bWJlciBvZiBkaXNwbGF5c1xuIik7Cj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZGlzcGxheXNbMF0gPSBnX2RwX2Rpc3BsYXk7Cj4gKwlyZXR1 cm4gY291bnQ7Cj4gK30KPiArCj4gK2ludCBkcF9kaXNwbGF5X2dldF9udW1fb2ZfZGlzcGxheXMo dm9pZCkKPiArewo+ICsJcmV0dXJuIDE7Cj4gK30KClRoZXNlIDIgZnVuY3Rpb25zIGFyZSBuZXZl ciB1c2VkLCBhbmQgYXMgc3VjaCBnX2RwX2Rpc3BsYXkgaXMgbmV2ZXIgdXNlZC4KQUZBSUNULCB0 aGUgY2FsbGJhY2sgaG9va3MgbGlua2VkIGZyb20gZ19kcF9kaXNwbGF5IGFsc28gYXJlbid0IGNh bGxlZCBmcm9tCmFueXdoZXJlIGVsc2UuIFNvIGNhbiB5b3UganVzdCBkdW1wIHRoZXNlIGZ1bmN0 aW9ucywgdGhlIHN0cnVjdCwgYW5kIGFsbCBvZiB0aGUKdW51c2VkIGNhbGxiYWNrIGhvb2tzPwoK PiArCj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Cj4gKwo+ICsJ aWYgKCFwZGV2KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWRwID0gcGxhdGZvcm1fZ2V0 X2RydmRhdGEocGRldik7Cj4gKwo+ICsJZHBfZGlzcGxheV9kZWluaXRfc3ViX21vZHVsZXMoZHAp Owo+ICsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwo+ICsJZGV2bV9rZnJl ZSgmcGRldi0+ZGV2LCBkcCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRwX2Rpc3BsYXlfZHJpdmVyID0gewo+ICsJLnByb2JlICA9 IGRwX2Rpc3BsYXlfcHJvYmUsCj4gKwkucmVtb3ZlID0gZHBfZGlzcGxheV9yZW1vdmUsCj4gKwku ZHJpdmVyID0gewo+ICsJCS5uYW1lID0gIm1zbS1kcC1kaXNwbGF5IiwKPiArCQkub2ZfbWF0Y2hf dGFibGUgPSBkcF9kdF9tYXRjaCwKPiArCX0sCj4gK307Cj4gKwo+ICtpbnQgX19pbml0IG1zbV9k cF9yZWdpc3Rlcih2b2lkKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHBsYXRmb3Jt X2RyaXZlcl9yZWdpc3RlcigmZHBfZGlzcGxheV9kcml2ZXIpOwo+ICsJaWYgKHJldCkgewo+ICsJ CXByX2VycigiZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZCIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBfX2V4aXQgbXNtX2RwX3VucmVn aXN0ZXIodm9pZCkKPiArewo+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRwX2Rpc3Bs YXlfZHJpdmVyKTsKPiArfQo+ICsKPiAraW50IG1zbV9kcF9tb2Rlc2V0X2luaXQoc3RydWN0IG1z bV9kcCAqZHBfZGlzcGxheSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQoKV2hlcmUgaXMgdGhpcyBjYWxsZWQ/Cgo+ICt7Cj4gKwlzdHJ1 Y3QgbXNtX2RybV9wcml2YXRlICpwcml2Owo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoV0FSTl9P TighZW5jb2RlcikgfHwgV0FSTl9PTighZHBfZGlzcGxheSkgfHwgV0FSTl9PTighZGV2KSkKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCWRw X2Rpc3BsYXktPmRybV9kZXYgPSBkZXY7Cj4gKwo+ICsJcmV0ID0gZHBfZHJtX2JyaWRnZV9pbml0 KGRwX2Rpc3BsYXksIGVuY29kZXIpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LT5k ZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRwIGJyaWRnZTogJWRcbiIsIHJldCk7Cj4gKwkJZHBfZGlz cGxheS0+YnJpZGdlID0gTlVMTDsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJZHBfZGlzcGxh eS0+ZW5jb2RlciA9IGVuY29kZXI7Cj4gKwo+ICsJZHBfZGlzcGxheS0+Y29ubmVjdG9yID0gZHBf ZHJtX2Nvbm5lY3Rvcl9pbml0KGRwX2Rpc3BsYXkpOwo+ICsJaWYgKElTX0VSUihkcF9kaXNwbGF5 LT5jb25uZWN0b3IpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihkcF9kaXNwbGF5LT5jb25uZWN0b3Ip Owo+ICsJCWRldl9lcnIoZGV2LT5kZXYsCj4gKwkJCSJmYWlsZWQgdG8gY3JlYXRlIGRwIGNvbm5l Y3RvcjogJWRcbiIsIHJldCk7Cj4gKwkJZHBfZGlzcGxheS0+Y29ubmVjdG9yID0gTlVMTDsKPiAr CQlnb3RvIGNvbm5fZmFpbDsKPiArCX0KPiArCj4gKwlwcml2LT5icmlkZ2VzW3ByaXYtPm51bV9i cmlkZ2VzKytdID0gZHBfZGlzcGxheS0+YnJpZGdlOwo+ICsJcHJpdi0+Y29ubmVjdG9yc1twcml2 LT5udW1fY29ubmVjdG9ycysrXSA9IGRwX2Rpc3BsYXktPmNvbm5lY3RvcjsKPiArCXJldHVybiAw Owo+ICsKPiArY29ubl9mYWlsOgo+ICsJaWYgKGRwX2Rpc3BsYXktPmJyaWRnZSkgewo+ICsJCWRw X2RybV9icmlkZ2VfZGVpbml0KGRwX2Rpc3BsYXkpOwo+ICsJCWRwX2Rpc3BsYXktPmJyaWRnZSA9 IE5VTEw7Cj4gKwl9Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9k aXNwbGF5LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmNhNWVhZTUK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5 LmgKPiBAQCAtMCwwICsxLDU1IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4 LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0RQX0RJU1BMQVlf SF8KPiArI2RlZmluZSBfRFBfRElTUExBWV9IXwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+ Cj4gKwo+ICsjaW5jbHVkZSAiZHBfcGFuZWwuaCIKPiArCj4gK3N0cnVjdCBtc21fZHAgewo+ICsJ c3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXY7Cj4gKwlzdHJ1Y3QgZHBfYnJpZGdlICpkcF9icmlk Z2U7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsJc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZTsKPiArCj4gKwkvKiB0aGUgZW5jb2RlciB3ZSBhcmUgaG9va2VkIHRvIChv dXRzaWRlIG9mIGRzaSBibG9jaykgKi8KPiArCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsK PiArCWJvb2wgaXNfY29ubmVjdGVkOwo+ICsJdTMyIG1heF9wY2xrX2toejsKPiArCj4gKwlpbnQg KCplbmFibGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+ICsJaW50ICgqcG9zdF9lbmFi bGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+ICsKPiArCWludCAoKnByZV9kaXNhYmxl KShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKPiArCWludCAoKmRpc2FibGUpKHN0cnVjdCBt c21fZHAgKmRwX2Rpc3BsYXkpOwo+ICsKPiArCWludCAoKnNldF9tb2RlKShzdHJ1Y3QgbXNtX2Rw ICpkcF9kaXNwbGF5LAo+ICsJCQlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICptb2RlKTsKPiArCWlu dCAoKnZhbGlkYXRlX21vZGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXksIHUzMiBtb2RlX3Bj bGtfa2h6KTsKPiArCWludCAoKmdldF9tb2Rlcykoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwK PiArCQlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICpkcF9tb2RlKTsKPiArCWludCAoKnByZXBhcmUp KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+ICsJaW50ICgqdW5wcmVwYXJlKShzdHJ1Y3Qg bXNtX2RwICpkcF9kaXNwbGF5KTsKPiArCWludCAoKnJlcXVlc3RfaXJxKShzdHJ1Y3QgbXNtX2Rw ICpkcF9kaXNwbGF5KTsKPiArCXN0cnVjdCBkcF9kZWJ1ZyAqKCpnZXRfZGVidWcpKHN0cnVjdCBt c21fZHAgKmRwX2Rpc3BsYXkpOwo+ICsJdm9pZCAoKnNlbmRfaHBkX2V2ZW50KShzdHJ1Y3QgbXNt X2RwICpkcF9kaXNwbGF5KTsKPiArCWJvb2wgKCppc192aWRlb190ZXN0KShzdHJ1Y3QgbXNtX2Rw ICpkcF9kaXNwbGF5KTsKPiArCWludCAoKmdldF90ZXN0X2JwcCkoc3RydWN0IG1zbV9kcCAqZHBf ZGlzcGxheSk7Cj4gK307Cj4gKwo+ICtpbnQgZHBfZGlzcGxheV9nZXRfbnVtX29mX2Rpc3BsYXlz KHZvaWQpOwo+ICtpbnQgZHBfZGlzcGxheV9nZXRfZGlzcGxheXModm9pZCAqKmRpc3BsYXlzLCBp bnQgY291bnQpOwo+ICsjZW5kaWYgLyogX0RQX0RJU1BMQVlfSF8gKi8KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfZHJtLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjY0ZDY0NDkK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uYwo+ IEBAIC0wLDAgKzEsNTQyIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBU aGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiAr ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNkZWZpbmUgcHJfZm10KGZtdCkJIltk cm0tZHBdOiAlczogIiBmbXQsIF9fZnVuY19fCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjLmg+Cj4gKwo+ICsjaW5jbHVkZSAibXNtX2Rydi5oIgo+ICsjaW5jbHVkZSAi bXNtX2ttcy5oIgo+ICsvLyNpbmNsdWRlICJkcHVfY29ubmVjdG9yLmgiCj4gKyNpbmNsdWRlICJk cF9kcm0uaCIKPiArI2luY2x1ZGUgImRwX2RlYnVnLmgiCj4gKwo+ICtzdHJ1Y3QgZHBfY29ubmVj dG9yIHsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yIGJhc2U7Cj4gKwlzdHJ1Y3QgbXNtX2RwICpk cF9kaXNwbGF5Owo+ICt9Owo+ICsjZGVmaW5lIHRvX2RwX2Nvbm5lY3Rvcih4KSBjb250YWluZXJf b2YoeCwgc3RydWN0IGRwX2Nvbm5lY3RvciwgYmFzZSkKPiArI2RlZmluZSB0b19kcF9icmlkZ2Uo eCkgICAgIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBkcF9icmlkZ2UsIGJhc2UpCj4gKwo+ICtz dGF0aWMgdm9pZCBjb252ZXJ0X3RvX2RwX21vZGUoY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKmRybV9tb2RlLAo+ICsJCQlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICpkcF9tb2RlLCBzdHJ1 Y3QgbXNtX2RwICpkcCkKPiArewo+ICsJY29uc3QgdTMyIG51bV9jb21wb25lbnRzID0gMzsKPiAr Cj4gKwltZW1zZXQoZHBfbW9kZSwgMCwgc2l6ZW9mKCpkcF9tb2RlKSk7Cj4gKwo+ICsJZHBfbW9k ZS0+dGltaW5nLmhfYWN0aXZlID0gZHJtX21vZGUtPmhkaXNwbGF5Owo+ICsJZHBfbW9kZS0+dGlt aW5nLmhfYmFja19wb3JjaCA9IGRybV9tb2RlLT5odG90YWwgLSBkcm1fbW9kZS0+aHN5bmNfZW5k Owo+ICsJZHBfbW9kZS0+dGltaW5nLmhfc3luY193aWR0aCA9IGRybV9tb2RlLT5odG90YWwgLQo+ ICsJCQkoZHJtX21vZGUtPmhzeW5jX3N0YXJ0ICsgZHBfbW9kZS0+dGltaW5nLmhfYmFja19wb3Jj aCk7Cj4gKwlkcF9tb2RlLT50aW1pbmcuaF9mcm9udF9wb3JjaCA9IGRybV9tb2RlLT5oc3luY19z dGFydCAtCj4gKwkJCQkJIGRybV9tb2RlLT5oZGlzcGxheTsKPiArCWRwX21vZGUtPnRpbWluZy5o X3NrZXcgPSBkcm1fbW9kZS0+aHNrZXc7Cj4gKwo+ICsJZHBfbW9kZS0+dGltaW5nLnZfYWN0aXZl ID0gZHJtX21vZGUtPnZkaXNwbGF5Owo+ICsJZHBfbW9kZS0+dGltaW5nLnZfYmFja19wb3JjaCA9 IGRybV9tb2RlLT52dG90YWwgLSBkcm1fbW9kZS0+dnN5bmNfZW5kOwo+ICsJZHBfbW9kZS0+dGlt aW5nLnZfc3luY193aWR0aCA9IGRybV9tb2RlLT52dG90YWwgLQo+ICsJCShkcm1fbW9kZS0+dnN5 bmNfc3RhcnQgKyBkcF9tb2RlLT50aW1pbmcudl9iYWNrX3BvcmNoKTsKPiArCj4gKwlkcF9tb2Rl LT50aW1pbmcudl9mcm9udF9wb3JjaCA9IGRybV9tb2RlLT52c3luY19zdGFydCAtCj4gKwkJCQkJ IGRybV9tb2RlLT52ZGlzcGxheTsKPiArCj4gKwlpZiAoZHAtPmlzX3ZpZGVvX3Rlc3QoZHApKQo+ ICsJCWRwX21vZGUtPnRpbWluZy5icHAgPSBkcC0+Z2V0X3Rlc3RfYnBwKGRwKTsKPiArCWVsc2UK PiArCQlkcF9tb2RlLT50aW1pbmcuYnBwID0gZHAtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJw YyAqCj4gKwkJbnVtX2NvbXBvbmVudHM7Cj4gKwo+ICsJaWYgKCFkcF9tb2RlLT50aW1pbmcuYnBw KQo+ICsJCWRwX21vZGUtPnRpbWluZy5icHAgPSAyNDsKPiArCj4gKwlkcF9tb2RlLT50aW1pbmcu cmVmcmVzaF9yYXRlID0gZHJtX21vZGUtPnZyZWZyZXNoOwo+ICsKPiArCWRwX21vZGUtPnRpbWlu Zy5waXhlbF9jbGtfa2h6ID0gZHJtX21vZGUtPmNsb2NrOwo+ICsKPiArCWRwX21vZGUtPnRpbWlu Zy52X2FjdGl2ZV9sb3cgPQo+ICsJCSEhKGRybV9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdf TlZTWU5DKTsKPiArCj4gKwlkcF9tb2RlLT50aW1pbmcuaF9hY3RpdmVfbG93ID0KPiArCQkhIShk cm1fbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lOQyk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGNvbnZlcnRfdG9fZHJtX21vZGUoY29uc3Qgc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAq ZHBfbW9kZSwKPiArCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZSkKPiArewo+ ICsJdTMyIGZsYWdzID0gMDsKPiArCj4gKwltZW1zZXQoZHJtX21vZGUsIDAsIHNpemVvZigqZHJt X21vZGUpKTsKPiArCj4gKwlkcm1fbW9kZS0+aGRpc3BsYXkgPSBkcF9tb2RlLT50aW1pbmcuaF9h Y3RpdmU7Cj4gKwlkcm1fbW9kZS0+aHN5bmNfc3RhcnQgPSBkcm1fbW9kZS0+aGRpc3BsYXkgKwo+ ICsJCQkJZHBfbW9kZS0+dGltaW5nLmhfZnJvbnRfcG9yY2g7Cj4gKwlkcm1fbW9kZS0+aHN5bmNf ZW5kID0gZHJtX21vZGUtPmhzeW5jX3N0YXJ0ICsKPiArCQkJICAgICAgZHBfbW9kZS0+dGltaW5n Lmhfc3luY193aWR0aDsKPiArCWRybV9tb2RlLT5odG90YWwgPSBkcm1fbW9kZS0+aHN5bmNfZW5k ICsgZHBfbW9kZS0+dGltaW5nLmhfYmFja19wb3JjaDsKPiArCWRybV9tb2RlLT5oc2tldyA9IGRw X21vZGUtPnRpbWluZy5oX3NrZXc7Cj4gKwo+ICsJZHJtX21vZGUtPnZkaXNwbGF5ID0gZHBfbW9k ZS0+dGltaW5nLnZfYWN0aXZlOwo+ICsJZHJtX21vZGUtPnZzeW5jX3N0YXJ0ID0gZHJtX21vZGUt PnZkaXNwbGF5ICsKPiArCQkJCWRwX21vZGUtPnRpbWluZy52X2Zyb250X3BvcmNoOwo+ICsJZHJt X21vZGUtPnZzeW5jX2VuZCA9IGRybV9tb2RlLT52c3luY19zdGFydCArCj4gKwkJCSAgICAgIGRw X21vZGUtPnRpbWluZy52X3N5bmNfd2lkdGg7Cj4gKwlkcm1fbW9kZS0+dnRvdGFsID0gZHJtX21v ZGUtPnZzeW5jX2VuZCArIGRwX21vZGUtPnRpbWluZy52X2JhY2tfcG9yY2g7Cj4gKwo+ICsJZHJt X21vZGUtPnZyZWZyZXNoID0gZHBfbW9kZS0+dGltaW5nLnJlZnJlc2hfcmF0ZTsKPiArCWRybV9t b2RlLT5jbG9jayA9IGRwX21vZGUtPnRpbWluZy5waXhlbF9jbGtfa2h6Owo+ICsKPiArCWlmIChk cF9tb2RlLT50aW1pbmcuaF9hY3RpdmVfbG93KQo+ICsJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdf TkhTWU5DOwo+ICsJZWxzZQo+ICsJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUEhTWU5DOwo+ICsK PiArCWlmIChkcF9tb2RlLT50aW1pbmcudl9hY3RpdmVfbG93KQo+ICsJCWZsYWdzIHw9IERSTV9N T0RFX0ZMQUdfTlZTWU5DOwo+ICsJZWxzZQo+ICsJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUFZT WU5DOwo+ICsKPiArCWRybV9tb2RlLT5mbGFncyA9IGZsYWdzOwo+ICsKPiArCWRybV9tb2RlLT50 eXBlID0gMHg0ODsKPiArCWRybV9tb2RlX3NldF9uYW1lKGRybV9tb2RlKTsKPiArfQoKSnVzdCB1 c2UgdGhlIGRybSBtb2RlcyBkaXJlY3RseSBhbmQgZGVsZXRlIHRoZXNlIGZ1bmN0aW9ucy4KCj4g Kwo+ICtzdGF0aWMgdm9pZCBkcF9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAq ZHJtX2JyaWRnZSkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9icmlkZ2UgKmJy aWRnZTsKPiArCXN0cnVjdCBtc21fZHAgKmRwOwo+ICsKPiArCWlmICghZHJtX2JyaWRnZSkgewo+ ICsJCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4g KwlicmlkZ2UgPSB0b19kcF9icmlkZ2UoZHJtX2JyaWRnZSk7Cj4gKwlkcCA9IGJyaWRnZS0+ZGlz cGxheTsKPiArCj4gKwkvKiBCeSB0aGlzIHBvaW50IG1vZGUgc2hvdWxkIGhhdmUgYmVlbiB2YWxp ZGF0ZWQgdGhyb3VnaCBtb2RlX2ZpeHVwICovCj4gKwlyYyA9IGRwLT5zZXRfbW9kZShkcCwgJmJy aWRnZS0+ZHBfbW9kZSk7Cj4gKwlpZiAocmMpIHsKPiArCQlwcl9lcnIoIlslZF0gZmFpbGVkIHRv IHBlcmZvcm0gYSBtb2RlIHNldCwgcmM9JWRcbiIsCj4gKwkJICAgICAgIGJyaWRnZS0+aWQsIHJj KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJcmMgPSBkcC0+cHJlcGFyZShkcCk7Cj4gKwlp ZiAocmMpIHsKPiArCQlwcl9lcnIoIlslZF0gRFAgZGlzcGxheSBwcmVwYXJlIGZhaWxlZCwgcmM9 JWRcbiIsCj4gKwkJICAgICAgIGJyaWRnZS0+aWQsIHJjKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4g Kwo+ICsJcmMgPSBkcC0+ZW5hYmxlKGRwKTsKPiArCWlmIChyYykgewo+ICsJCXByX2VycigiWyVk XSBEUCBkaXNwbGF5IGVuYWJsZSBmYWlsZWQsIHJjPSVkXG4iLAo+ICsJCSAgICAgICBicmlkZ2Ut PmlkLCByYyk7Cj4gKwkJZHAtPnVucHJlcGFyZShkcCk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGRwX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmRybV9icmlkZ2UpCj4g K3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2U7Cj4gKwlzdHJ1 Y3QgbXNtX2RwICpkcDsKPiArCj4gKwlpZiAoIWRybV9icmlkZ2UpIHsKPiArCQlwcl9lcnIoIklu dmFsaWQgcGFyYW1zXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJYnJpZGdlID0gdG9f ZHBfYnJpZGdlKGRybV9icmlkZ2UpOwo+ICsJZHAgPSBicmlkZ2UtPmRpc3BsYXk7Cj4gKwo+ICsJ cmMgPSBkcC0+cG9zdF9lbmFibGUoZHApOwo+ICsJaWYgKHJjKQo+ICsJCXByX2VycigiWyVkXSBE UCBkaXNwbGF5IHBvc3QgZW5hYmxlIGZhaWxlZCwgcmM9JWRcbiIsCj4gKwkJICAgICAgIGJyaWRn ZS0+aWQsIHJjKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfYnJpZGdlX2Rpc2FibGUoc3Ry dWN0IGRybV9icmlkZ2UgKmRybV9icmlkZ2UpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1 Y3QgZHBfYnJpZGdlICpicmlkZ2U7Cj4gKwlzdHJ1Y3QgbXNtX2RwICpkcDsKPiArCj4gKwlpZiAo IWRybV9icmlkZ2UpIHsKPiArCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKPiArCQlyZXR1 cm47Cj4gKwl9Cj4gKwo+ICsJYnJpZGdlID0gdG9fZHBfYnJpZGdlKGRybV9icmlkZ2UpOwo+ICsJ ZHAgPSBicmlkZ2UtPmRpc3BsYXk7Cj4gKwo+ICsJcmMgPSBkcC0+cHJlX2Rpc2FibGUoZHApOwo+ ICsJaWYgKHJjKSB7Cj4gKwkJcHJfZXJyKCJbJWRdIERQIGRpc3BsYXkgcHJlIGRpc2FibGUgZmFp bGVkLCByYz0lZFxuIiwKPiArCQkgICAgICAgYnJpZGdlLT5pZCwgcmMpOwo+ICsJfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBkcF9icmlkZ2VfcG9zdF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdl ICpkcm1fYnJpZGdlKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2JyaWRnZSAq YnJpZGdlOwo+ICsJc3RydWN0IG1zbV9kcCAqZHA7Cj4gKwo+ICsJaWYgKCFkcm1fYnJpZGdlKSB7 Cj4gKwkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsK PiArCWJyaWRnZSA9IHRvX2RwX2JyaWRnZShkcm1fYnJpZGdlKTsKPiArCWRwID0gYnJpZGdlLT5k aXNwbGF5Owo+ICsKPiArCXJjID0gZHAtPmRpc2FibGUoZHApOwo+ICsJaWYgKHJjKSB7Cj4gKwkJ cHJfZXJyKCJbJWRdIERQIGRpc3BsYXkgZGlzYWJsZSBmYWlsZWQsIHJjPSVkXG4iLAo+ICsJCSAg ICAgICBicmlkZ2UtPmlkLCByYyk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXJjID0gZHAt PnVucHJlcGFyZShkcCk7Cj4gKwlpZiAocmMpIHsKPiArCQlwcl9lcnIoIlslZF0gRFAgZGlzcGxh eSB1bnByZXBhcmUgZmFpbGVkLCByYz0lZFxuIiwKPiArCQkgICAgICAgYnJpZGdlLT5pZCwgcmMp Owo+ICsJCXJldHVybjsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfYnJpZGdlX21v ZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpkcm1fYnJpZGdlLAo+ICsJCQkJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0 ZWRfbW9kZSkKPiArewo+ICsJc3RydWN0IGRwX2JyaWRnZSAqYnJpZGdlOwo+ICsJc3RydWN0IG1z bV9kcCAqZHA7Cj4gKwo+ICsJaWYgKCFkcm1fYnJpZGdlIHx8ICFtb2RlIHx8ICFhZGp1c3RlZF9t b2RlKSB7Cj4gKwkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Cj4gKwkJcmV0dXJuOwo+ICsJ fQo+ICsKPiArCWJyaWRnZSA9IHRvX2RwX2JyaWRnZShkcm1fYnJpZGdlKTsKPiArCWRwID0gYnJp ZGdlLT5kaXNwbGF5Owo+ICsKPiArCW1lbXNldCgmYnJpZGdlLT5kcF9tb2RlLCAweDAsIHNpemVv ZihzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlKSk7Cj4gKwljb252ZXJ0X3RvX2RwX21vZGUoYWRqdXN0 ZWRfbW9kZSwgJmJyaWRnZS0+ZHBfbW9kZSwgZHApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBk cF9icmlkZ2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqZHJtX2JyaWRnZSwKPiArCQkJ CSAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJCQkgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQo+ICt7Cj4gKwlib29sIHJldCA9IHRydWU7 Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlIGRwX21vZGU7Cj4gKwlzdHJ1Y3QgZHBfYnJpZGdl ICpicmlkZ2U7Cj4gKwlzdHJ1Y3QgbXNtX2RwICpkcDsKPiArCj4gKwlpZiAoIWRybV9icmlkZ2Ug fHwgIW1vZGUgfHwgIWFkanVzdGVkX21vZGUpIHsKPiArCQlwcl9lcnIoIkludmFsaWQgcGFyYW1z XG4iKTsKPiArCQlyZXQgPSBmYWxzZTsKPiArCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwlicmlk Z2UgPSB0b19kcF9icmlkZ2UoZHJtX2JyaWRnZSk7Cj4gKwlkcCA9IGJyaWRnZS0+ZGlzcGxheTsK PiArCj4gKwljb252ZXJ0X3RvX2RwX21vZGUobW9kZSwgJmRwX21vZGUsIGRwKTsKPiArCWNvbnZl cnRfdG9fZHJtX21vZGUoJmRwX21vZGUsIGFkanVzdGVkX21vZGUpOwo+ICtlbmQ6Cj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mg ZHBfYnJpZGdlX29wcyA9IHsKPiArCS5tb2RlX2ZpeHVwICAgPSBkcF9icmlkZ2VfbW9kZV9maXh1 cCwKPiArCS5wcmVfZW5hYmxlICAgPSBkcF9icmlkZ2VfcHJlX2VuYWJsZSwKPiArCS5lbmFibGUg ICAgICAgPSBkcF9icmlkZ2VfZW5hYmxlLAo+ICsJLmRpc2FibGUgICAgICA9IGRwX2JyaWRnZV9k aXNhYmxlLAo+ICsJLnBvc3RfZGlzYWJsZSA9IGRwX2JyaWRnZV9wb3N0X2Rpc2FibGUsCj4gKwku bW9kZV9zZXQgICAgID0gZHBfYnJpZGdlX21vZGVfc2V0LAo+ICt9OwoKSSdtIG5vdCBjb252aW5j ZWQgeW91IG5lZWQgYW55IG9mIHRoaXMuIFRoZSBvbmx5IGFkdmFudGFnZSBhIGJyaWRnZSBnZXRz IHlvdSBpcwp0byBiZSBpbnZvbHZlZCBpbiBtb2Rlc2V0LiBIb3dldmVyIHRoZSBvbmx5IHRoaW5n IHlvdSBkbyBpbiBtb2Rlc2V0IGlzIHNhdmUgdGhlCm1vZGUgKHdoaWNoIGlzIG9ubHkgdXNlZCBp biBlbmFibGUpLiBTbyB3aHkgbm90IGp1c3QgdXNlIHRoZSBtb2RlIGZyb20gdGhlCmNydGMncyBz dGF0ZSB3aGVuIGVuY29kZXItPmVuYWJsZSBpcyBjYWxsZWQ/CgpUaGF0IGFsbG93cyB5b3UgdG8g ZGVsZXRlIGFsbCBvZiB0aGUgYnJpZGdlIHN0dWZmIGhlcmUuCgo+ICsKPiAraW50IGRwX2Nvbm5l Y3Rvcl9wb3N0X2luaXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgdm9pZCAqZGlz cGxheSkKPiArewo+ICsJc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSA9IGRpc3BsYXk7Cj4gKwo+ ICsJaWYgKCFkcF9kaXNwbGF5KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWRwX2Rpc3Bs YXktPmNvbm5lY3RvciA9IGNvbm5lY3RvcjsKPiArCXJldHVybiAwOwo+ICt9CgpUaGlzIGlzbid0 IGNhbGxlZCBmcm9tIGFueXRoaW5nPwoKPiArCj4gKy8qKgo+ICsgKiBkcF9jb25uZWN0b3JfZGV0 ZWN0IC0gY2FsbGJhY2sgdG8gZGV0ZXJtaW5lIGlmIGNvbm5lY3RvciBpcyBjb25uZWN0ZWQKPiAr ICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQo+ICsgKiBA Zm9yY2U6IEZvcmNlIGRldGVjdCBzZXR0aW5nIGZyb20gZHJtIGZyYW1ld29yawo+ICsgKiBSZXR1 cm5zOiBDb25uZWN0b3IgJ2lzIGNvbm5lY3RlZCcgc3RhdHVzCj4gKyAqLwo+ICtzdGF0aWMgZW51 bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBkcF9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uLAo+ICsJCWJvb2wgZm9yY2UpCj4gK3sKPiArCWVudW0gZHJtX2Nvbm5lY3Rv cl9zdGF0dXMgc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwo+ICsJc3RhdGljIGVu dW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY3VycmVudF9zdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVz X3Vua25vd247Cj4gKwlzdHJ1Y3QgbXNtX2RwICpkcDsKPiArCXN0cnVjdCBkcF9jb25uZWN0b3Ig KmRwX2Nvbm47Cj4gKwlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0gY29ubi0+ZGV2LT5k ZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtc21fa21zICprbXMgPSBwcml2LT5rbXM7Cj4gKwo+ICsJ ZHBfY29ubiA9IHRvX2RwX2Nvbm5lY3Rvcihjb25uKTsKPiArCWRwID0gZHBfY29ubi0+ZHBfZGlz cGxheTsKCm5vIG5lZWQgZm9yIGRwX2Nvbm4sIGp1c3QgZG8KCiAgICAgICAgZHAgPSB0b19kcF9j b25uZWN0b3IoY29ubiktPmRwX2Rpc3BsYXk7Cgo+ICsKPiArCXByX2VycigiaXNfY29ubmVjdGVk ID0gJXNcbiIsCj4gKwkJKGRwLT5pc19jb25uZWN0ZWQpID8gInRydWUiIDogImZhbHNlIik7Cj4g Kwo+ICsJc3RhdHVzID0gKGRwLT5pc19jb25uZWN0ZWQpID8gY29ubmVjdG9yX3N0YXR1c19jb25u ZWN0ZWQgOgo+ICsJCQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ICsKPiArCWlm IChkcC0+aXNfY29ubmVjdGVkICYmIGRwLT5icmlkZ2UtPmVuY29kZXIKPiArCQkJCSYmIChjdXJy ZW50X3N0YXR1cyAhPSBzdGF0dXMpCgpUaGlzIGlzIGFsd2F5cyB0cnVlLgoKPiArCQkJCSYmIGtt cy0+ZnVuY3MtPnNldF9lbmNvZGVyX21vZGUpIHsKPiArCQlrbXMtPmZ1bmNzLT5zZXRfZW5jb2Rl cl9tb2RlKGttcywKPiArCQkJCWRwLT5icmlkZ2UtPmVuY29kZXIsIGZhbHNlKTsKPiArCQlwcl9l cnIoImNhbGwgc2V0X2VuY29kZXJfbW9kZVxuIik7CgpkZXRlY3QoKSBzaG91bGQgbmV2ZXIgZG8g d29yaywgcGxlYXNlIHJlbW92ZS4KCj4gKwl9Cj4gKwljdXJyZW50X3N0YXR1cyA9IHN0YXR1czsK CldoeT8KCj4gKwlyZXR1cm4gc3RhdHVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jb25u ZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlz dHJ1Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uID0gdG9fZHBfY29ubmVjdG9yKGNvbm5lY3Rvcik7 Cj4gKwo+ICsJREJHKCIiKTsKPiArCj4gKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9y KTsKPiArCj4gKwlrZnJlZShkcF9jb25uKTsKCk9uY2UgZHBfY29ubiBpcyBkZXZtIG1hbmFnZWQs IHlvdSBjYW4ganVzdCByZW1vdmUgdGhpcyBmdW5jdGlvbiBhbmQgc2V0IC5kZXN0cm95CnRvIGRy bV9jb25uZWN0b3JfY2xlYW51cAoKPiArfQo+ICsKPiArdm9pZCBkcF9jb25uZWN0b3Jfc2VuZF9o cGRfZXZlbnQodm9pZCAqZGlzcGxheSkKCldoZXJlIGlzIHRoaXMgY2FsbGVkPwoKPiArewo+ICsJ c3RydWN0IG1zbV9kcCAqZHA7Cj4gKwo+ICsJaWYgKCFkaXNwbGF5KSB7Cj4gKwkJcHJfZXJyKCJp bnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHAgPSBkaXNwbGF5 Owo+ICsKPiArCWlmIChkcC0+c2VuZF9ocGRfZXZlbnQpCj4gKwkJZHAtPnNlbmRfaHBkX2V2ZW50 KGRwKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRwX2Nvbm5lY3Rvcl9nZXRfbW9kZXMgLSBjYWxs YmFjayB0byBhZGQgZHJtIG1vZGVzIHZpYSBkcm1fbW9kZV9wcm9iZWRfYWRkKCkKPiArICogQGNv bm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQo+ICsgKiBSZXR1cm5z OiBOdW1iZXIgb2YgbW9kZXMgYWRkZWQKPiArICovCj4gK3N0YXRpYyBpbnQgZHBfY29ubmVjdG9y X2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlpbnQg cmMgPSAwOwo+ICsJc3RydWN0IG1zbV9kcCAqZHA7Cj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9tb2Rl ICpkcF9tb2RlID0gTlVMTDsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptLCBkcm1fbW9k ZTsKPiArCXN0cnVjdCBkcF9jb25uZWN0b3IgKmRwX2Nvbm47Cj4gKwo+ICsJaWYgKCFjb25uZWN0 b3IpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZHBfY29ubiA9IHRvX2RwX2Nvbm5lY3Rvcihjb25u ZWN0b3IpOwo+ICsJZHAgPSBkcF9jb25uLT5kcF9kaXNwbGF5Owo+ICsKPiArCWRwX21vZGUgPSBr emFsbG9jKHNpemVvZigqZHBfbW9kZSksICBHRlBfS0VSTkVMKTsKPiArCWlmICghZHBfbW9kZSkK PiArCQlyZXR1cm4gMDsKCldoZW4geW91IGdldCByaWQgb2YgZHBfZGlzcGxheV9tb2RlLCBwbGVh c2UgdXNlIHRoZSBzdGFjayBmb3IgdGhlIG5ldwpkcm1fZGlzcGxheV9tb2RlCgo+ICsKPiArCS8q IHBsdWdnYWJsZSBjYXNlIGFzc3VtZXMgRURJRCBpcyByZWFkIHdoZW4gSFBEICovCj4gKwlpZiAo ZHAtPmlzX2Nvbm5lY3RlZCkgewo+ICsJCXJjID0gZHAtPmdldF9tb2RlcyhkcCwgZHBfbW9kZSk7 CgpXaHkgaXMgb25seSBvbmUgbW9kZSByZXR1cm5lZD8KCj4gKwkJaWYgKCFyYykKClRoaXMgY2Fu IGFsc28gcmV0dXJuIC1lcnJubywgeW91IHNob3VsZCBjaGVjayBmb3IgdGhhdCB0b28uCgo+ICsJ CQlwcl9lcnIoImZhaWxlZCB0byBnZXQgRFAgc2luayBtb2RlcywgcmM9JWRcbiIsIHJjKTsKCldo eSBjb250aW51ZSBpZiB5b3Uga25vdyB5b3UgZmFpbGVkPwoKPiArCj4gKwkJaWYgKGRwX21vZGUt PnRpbWluZy5waXhlbF9jbGtfa2h6KSB7IC8qIHZhbGlkIERQIG1vZGUgKi8KPiArCQkJbWVtc2V0 KCZkcm1fbW9kZSwgMHgwLCBzaXplb2YoZHJtX21vZGUpKTsKPiArCQkJY29udmVydF90b19kcm1f bW9kZShkcF9tb2RlLCAmZHJtX21vZGUpOwo+ICsJCQltID0gZHJtX21vZGVfZHVwbGljYXRlKGNv bm5lY3Rvci0+ZGV2LCAmZHJtX21vZGUpOwo+ICsJCQlpZiAoIW0pIHsKPiArCQkJCXByX2Vycigi ZmFpbGVkIHRvIGFkZCBtb2RlICV1eCV1XG4iLAo+ICsJCQkJICAgICAgIGRybV9tb2RlLmhkaXNw bGF5LAo+ICsJCQkJICAgICAgIGRybV9tb2RlLnZkaXNwbGF5KTsKPiArCQkJCWtmcmVlKGRwX21v ZGUpOwo+ICsJCQkJcmV0dXJuIDA7Cj4gKwkJCX0KPiArCQkJbS0+d2lkdGhfbW0gPSBjb25uZWN0 b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbTsKPiArCQkJbS0+aGVpZ2h0X21tID0gY29ubmVjdG9y LT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tOwoKWW91IHNob3VsZG4ndCBvdmVyd3JpdGUgdGhlc2Uu Cgo+ICsJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbSk7Cj4gKwkJfQo+ICsJfSBl bHNlIHsKPiArCQlwcl9lcnIoIk5vIHNpbmsgY29ubmVjdGVkXG4iKTsKClRoaXMgc2hvdWxkbid0 IGJlIGFuIGVycm9yCgo+ICsJfQo+ICsJa2ZyZWUoZHBfbW9kZSk7Cj4gKwo+ICsJcmV0dXJuIHJj Owo+ICt9Cj4gKwo+ICtpbnQgZHBfZHJtX2JyaWRnZV9pbml0KHZvaWQgKmRhdGEsIHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcikKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9i cmlkZ2UgKmRwX2JyaWRnZTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3Qg bXNtX2RwICpkcF9kaXNwbGF5ID0gZGF0YTsKPiArCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnBy aXYgPSBOVUxMOwo+ICsKPiArCWRwX2JyaWRnZSA9IGt6YWxsb2Moc2l6ZW9mKCpkcF9icmlkZ2Up LCBHRlBfS0VSTkVMKTsKPiArCWlmICghZHBfYnJpZGdlKSB7Cj4gKwkJcmMgPSAtRU5PTUVNOwo+ ICsJCWdvdG8gZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJZGV2ID0gZHBfZGlzcGxheS0+ZHJtX2RldjsK PiArCWRwX2JyaWRnZS0+ZGlzcGxheSA9IGRwX2Rpc3BsYXk7Cj4gKwlkcF9icmlkZ2UtPmJhc2Uu ZnVuY3MgPSAmZHBfYnJpZGdlX29wczsKPiArCWRwX2JyaWRnZS0+YmFzZS5lbmNvZGVyID0gZW5j b2RlcjsKPiArCj4gKwlwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCj4gKwlyYyA9IGRybV9i cmlkZ2VfYXR0YWNoKGVuY29kZXIsICZkcF9icmlkZ2UtPmJhc2UsIE5VTEwpOwo+ICsJaWYgKHJj KSB7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gYXR0YWNoIGJyaWRnZSwgcmM9JWRcbiIsIHJjKTsK PiArCQlnb3RvIGVycm9yX2ZyZWVfYnJpZGdlOwo+ICsJfQo+ICsKPiArCXJjID0gZHBfZGlzcGxh eS0+cmVxdWVzdF9pcnEoZHBfZGlzcGxheSk7Cj4gKwlpZiAocmMpIHsKPiArCQlwcl9lcnIoInJl cXVlc3RfaXJxIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKPiArCQlnb3RvIGVycm9yX2ZyZWVfYnJp ZGdlOwo+ICsJfQo+ICsKPiArCWVuY29kZXItPmJyaWRnZSA9ICZkcF9icmlkZ2UtPmJhc2U7Cj4g KwlkcF9kaXNwbGF5LT5kcF9icmlkZ2UgPSBkcF9icmlkZ2U7Cj4gKwlkcF9kaXNwbGF5LT5icmlk Z2UgPSAmZHBfYnJpZGdlLT5iYXNlOwo+ICsKPiArCXJldHVybiAwOwo+ICtlcnJvcl9mcmVlX2Jy aWRnZToKPiArCWtmcmVlKGRwX2JyaWRnZSk7Cj4gK2Vycm9yOgo+ICsJcmV0dXJuIHJjOwo+ICt9 Cj4gKwo+ICt2b2lkIGRwX2RybV9icmlkZ2VfZGVpbml0KHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0 cnVjdCBtc21fZHAgKmRpc3BsYXkgPSBkYXRhOwo+ICsJc3RydWN0IGRwX2JyaWRnZSAqYnJpZGdl ID0gZGlzcGxheS0+ZHBfYnJpZGdlOwo+ICsKPiArCWlmIChicmlkZ2UgJiYgYnJpZGdlLT5iYXNl LmVuY29kZXIpCj4gKwkJYnJpZGdlLT5iYXNlLmVuY29kZXItPmJyaWRnZSA9IE5VTEw7Cj4gKwo+ ICsJa2ZyZWUoYnJpZGdlKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRwX2Nvbm5lY3Rvcl9tb2Rl X3ZhbGlkIC0gY2FsbGJhY2sgdG8gZGV0ZXJtaW5lIGlmIHNwZWNpZmllZCBtb2RlIGlzIHZhbGlk Cj4gKyAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKPiAr ICogQG1vZGU6IFBvaW50ZXIgdG8gZHJtIG1vZGUgc3RydWN0dXJlCj4gKyAqIFJldHVybnM6IFZh bGlkaXR5IHN0YXR1cyBmb3Igc3BlY2lmaWVkIG1vZGUKPiArICovCj4gK3N0YXRpYyBlbnVtIGRy bV9tb2RlX3N0YXR1cyBkcF9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAo+ICsJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ICt7Cj4g KwlzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwOwo+ICsJc3RydWN0IGRwX2RlYnVnICpkZWJ1ZzsKPiAr CXN0cnVjdCBkcF9jb25uZWN0b3IgKmRwX2Nvbm47Cj4gKwo+ICsJaWYgKCFtb2RlIHx8ICFjb25u ZWN0b3IpIHsKPiArCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKPiArCQlyZXR1cm4gTU9E RV9FUlJPUjsKPiArCX0KPiArCj4gKwlkcF9jb25uID0gdG9fZHBfY29ubmVjdG9yKGNvbm5lY3Rv cik7Cj4gKwlkcF9kaXNwID0gZHBfY29ubi0+ZHBfZGlzcGxheTsKPiArCWRlYnVnID0gZHBfZGlz cC0+Z2V0X2RlYnVnKGRwX2Rpc3ApOwo+ICsKPiArCW1vZGUtPnZyZWZyZXNoID0gZHJtX21vZGVf dnJlZnJlc2gobW9kZSk7Cj4gKwo+ICsJaWYgKG1vZGUtPmNsb2NrID4gZHBfZGlzcC0+bWF4X3Bj bGtfa2h6KQoKSSB0aGluayB0aGUgdmFsdWUgb2YgbWF4X3BjbGtfa2h6IGlzIHJhY3ksIHlvdSds bCBwcm9iYWJseSB3YW50IHRvIGF1ZGl0IGl0cwp1c2UuCgoKPiArCQlyZXR1cm4gTU9ERV9CQUQ7 Cj4gKwo+ICsJaWYgKGRlYnVnLT5kZWJ1Z19lbiAmJiAobW9kZS0+aGRpc3BsYXkgIT0gZGVidWct PmhkaXNwbGF5IHx8Cj4gKwkJCW1vZGUtPnZkaXNwbGF5ICE9IGRlYnVnLT52ZGlzcGxheSB8fAo+ ICsJCQltb2RlLT52cmVmcmVzaCAhPSBkZWJ1Zy0+dnJlZnJlc2ggfHwKPiArCQkJbW9kZS0+cGlj dHVyZV9hc3BlY3RfcmF0aW8gIT0gZGVidWctPmFzcGVjdF9yYXRpbykpCj4gKwkJcmV0dXJuIE1P REVfQkFEOwoKUGxlYXNlIGRyb3AgdGhpcy4KCj4gKwo+ICsJcmV0dXJuIGRwX2Rpc3AtPnZhbGlk YXRlX21vZGUoZHBfZGlzcCwgbW9kZS0+Y2xvY2spOwoKU28gSSBndWVzcyBJIHdhcyB3cm9uZyB3 aGVuIEkgc2FpZCBub25lIG9mIHRoZSBnX2RwX2Rpc3BsYXkgZnVuY3Rpb25zIGFyZSBiZWluZwp1 c2VkLiBJJ20gc3RpbGwgdW5zdXJlIHdoZXJlIHRoZXkncmUgc2V0LCBwZXJoYXBzIHRoZXJlJ3Mg c29tZSBtaXNzaW5nIGNvZGUuIEF0CmFueSByYXRlLCB3aGF0J3MgdGhlIGJlbmVmaXQgb2Ygc3Rp Y2tpbmcgYWxsIG9mIHRoYXQgd29yayBpbnRvIGFuIGFic3RyYWN0CmNhbGxiYWNrIGhvb2sgd2hl biBpdCBvbmx5IGhhcyBvbmUgaW1wbGVtZW50YXRpb24gYW5kIG9uZSBjYWxsc2l0ZS4KCkFsbCBv ZiB0aGF0IGNvZGUgY2FuIG1vdmUgaW4gaGVyZSAoYW5kIHRoZSBzYW1lIGdvZXMgZm9yIHRoZSBv dGhlciBjYWxsYmFja3MKKG1vdmUgdGhlIGNvZGUgd2hlcmUgaXQncyB1c2VkKS4KCj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBkcF9jb25uZWN0b3Jf ZnVuY3MgPSB7Cj4gKwkuZGV0ZWN0ID0gZHBfY29ubmVjdG9yX2RldGVjdCwKPiArCS5maWxsX21v ZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAo+ICsJLmRlc3Ry b3kgPSBkcF9jb25uZWN0b3JfZGVzdHJveSwKPiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21p Y19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9z dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAo+ICt9Owo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBkcF9j b25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewo+ICsJLmdldF9tb2RlcyA9IGRwX2Nvbm5lY3Rvcl9n ZXRfbW9kZXMsCj4gKwkubW9kZV92YWxpZCA9IGRwX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkLAo+ICt9 Owo+ICsKPiArLyogY29ubmVjdG9yIGluaXRpYWxpemF0aW9uICovCj4gK3N0cnVjdCBkcm1fY29u bmVjdG9yICpkcF9kcm1fY29ubmVjdG9yX2luaXQoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSkK PiArewo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IE5VTEw7Cj4gKwlzdHJ1 Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uZWN0b3I7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRwX2Nv bm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKCpkcF9jb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKClVz ZSBkZXZtX2t6YWxsb2MgKHlvdSd2ZSBhbHJlYWR5IGdvdCBhIG1lbW9yeSBsZWFrIGlmIGRybV9j b25uZWN0b3JfaW5pdCBmYWlscwpiZWxvdykuCgo+ICsJaWYgKCFkcF9jb25uZWN0b3IpCj4gKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJZHBfY29ubmVjdG9yLT5kcF9kaXNwbGF5 ID0gZHBfZGlzcGxheTsKPiArCj4gKwljb25uZWN0b3IgPSAmZHBfY29ubmVjdG9yLT5iYXNlOwo+ ICsKPiArCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChkcF9kaXNwbGF5LT5kcm1fZGV2LCBjb25u ZWN0b3IsICZkcF9jb25uZWN0b3JfZnVuY3MsCj4gKwkJCURSTV9NT0RFX0NPTk5FQ1RPUl9EaXNw bGF5UG9ydCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwo+ICsJ ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmRwX2Nvbm5lY3Rvcl9oZWxwZXJf ZnVuY3MpOwo+ICsKPiArCS8qCj4gKwkgKiBFbmFibGUgSFBEIHRvIGxldCBocGQgZXZlbnQgaXMg aGFuZGxlZAo+ICsJICogd2hlbiBjYWJsZSBpcyBhdHRhY2hlZCB0byB0aGUgaG9zdC4KClRoZXNl IGxpbmVzIGRvbid0IGV4dGVuZCB0byA4MCBjaGFycwoKPiArCSAqLwo+ICsJY29ubmVjdG9yLT5w b2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOwo+ICsKPiArCS8qIERpc3BsYXkgZHJpdmVy IGRvZXNuJ3Qgc3VwcG9ydCBpbnRlcmxhY2Ugbm93LiAqLwo+ICsJY29ubmVjdG9yLT5pbnRlcmxh Y2VfYWxsb3dlZCA9IGZhbHNlOwo+ICsJY29ubmVjdG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSBm YWxzZTsKClRoZXNlIGFyZSBhbHJlYWR5IGZhbHNlIGJ5IHZpcnR1ZSBvZiBremFsbG9jCgo+ICsK PiArCWRybV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBkcF9kaXNwbGF5LT5l bmNvZGVyKTsKPiArCj4gKwlyZXR1cm4gY29ubmVjdG9yOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X2RybS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5lZmJjMWJlCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmgKPiBA QCAtMCwwICsxLDUyIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUg TGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0RQX0RSTV9IXwo+ICsjZGVm aW5lIF9EUF9EUk1fSF8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsKPiArI2luY2x1ZGUgIm1zbV9kcnYuaCIKPiArI2lu Y2x1ZGUgImRwX2Rpc3BsYXkuaCIKPiArCj4gK3N0cnVjdCBkcF9icmlkZ2Ugewo+ICsJc3RydWN0 IGRybV9icmlkZ2UgYmFzZTsKPiArCXUzMiBpZDsKPiArCj4gKwlzdHJ1Y3QgbXNtX2RwICpkaXNw bGF5Owo+ICsJc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSBkcF9tb2RlOwo+ICt9Owo+ICsKPiArLyoq Cj4gKyAqIGRwX2Nvbm5lY3Rvcl9wb3N0X2luaXQgLSBjYWxsYmFjayB0byBwZXJmb3JtIGFkZGl0 aW9uYWwgaW5pdGlhbGl6YXRpb24gc3RlcHMKPiArICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBk cm0gY29ubmVjdG9yIHN0cnVjdHVyZQo+ICsgKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRl IGRpc3BsYXkgaGFuZGxlCj4gKyAqIFJldHVybnM6IFplcm8gb24gc3VjY2Vzcwo+ICsgKi8KPiAr aW50IGRwX2Nvbm5lY3Rvcl9wb3N0X2luaXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwgdm9pZCAqZGlzcGxheSk7Cj4gKwo+ICt2b2lkIGRwX2Nvbm5lY3Rvcl9zZW5kX2hwZF9ldmVu dCh2b2lkICpkaXNwbGF5KTsKPiArCj4gK2ludCBkcF9kcm1fYnJpZGdlX2luaXQodm9pZCAqZGlz cGxheSwKPiArCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7Cj4gKwo+ICt2b2lkIGRwX2Ry bV9icmlkZ2VfZGVpbml0KHZvaWQgKmRpc3BsYXkpOwo+ICsKPiArc3RydWN0IGRybV9jb25uZWN0 b3IgKmRwX2RybV9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKPiAr Cj4gKyNlbmRpZiAvKiBfRFBfRFJNX0hfICovCj4gKwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9leHRj b24uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNjM1YzEzYgo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5jCj4g QEAgLTAsMCArMSw0MDAgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRo ZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2RlZmluZSBwcl9mbXQoZm10KQkiW2Ry bS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZXh0Y29uLmg+ Cj4gKwo+ICsjaW5jbHVkZSAiZHBfZXh0Y29uLmgiCj4gKwo+ICsvKiBEUCBzcGVjaWZpYyBWRE0g Y29tbWFuZHMgKi8KPiArI2RlZmluZSBEUF9VU0JQRF9WRE1fU1RBVFVTCTB4MTAKPiArI2RlZmlu ZSBEUF9VU0JQRF9WRE1fQ09ORklHVVJFCTB4MTEKPiArCj4gKy8qIFVTQlBELVR5cGVDIHNwZWNp ZmljIE1hY3JvcyAqLwo+ICsjZGVmaW5lIFZETV9WRVJTSU9OCQkweDAKPiArI2RlZmluZSBVU0Jf Q19EUF9TSUQJCTB4RkYwMQo+ICsKPiArZW51bSBkcF91c2JwZF9waW5fYXNzaWdubWVudCB7Cj4g KwlEUF9VU0JQRF9QSU5fQSwKPiArCURQX1VTQlBEX1BJTl9CLAo+ICsJRFBfVVNCUERfUElOX0Ms Cj4gKwlEUF9VU0JQRF9QSU5fRCwKPiArCURQX1VTQlBEX1BJTl9FLAo+ICsJRFBfVVNCUERfUElO X0YsCj4gKwlEUF9VU0JQRF9QSU5fTUFYLAo+ICt9Owo+ICsKPiArc3RydWN0IGRwX3VzYnBkX2Nh cGFiaWxpdGllcyB7Cj4gKwllbnVtIGRwX3VzYnBkX3BvcnQgcG9ydDsKPiArCWJvb2wgcmVjZXB0 YWNsZV9zdGF0ZTsKPiArCXU4IHVsaW5rX3Bpbl9jb25maWc7Cj4gKwl1OCBkbGlua19waW5fY29u ZmlnOwo+ICt9OwoKV2hlcmUgaXMgdGhpcyB1c2VkPwoKPiArCj4gK3N0cnVjdCBkcF9leHRjb25f cHJpdmF0ZSB7Cj4gKwl1MzIgdmRvOwo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJc3RydWN0 IG5vdGlmaWVyX2Jsb2NrIGV4dGNvbl9uYjsKPiArCXN0cnVjdCBleHRjb25fZGV2ICpleHRjb247 Cj4gKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZXh0Y29uX3dxOwo+ICsJc3RydWN0IHdvcmtf c3RydWN0IGV2ZW50X3dvcms7Cj4gKwlzdHJ1Y3QgdXNicGQgKnBkOwo+ICsJc3RydWN0IGRwX3Vz YnBkX2NiICpkcF9jYjsKPiArCXN0cnVjdCBkcF91c2JwZF9jYXBhYmlsaXRpZXMgY2FwOwo+ICsJ c3RydWN0IGRwX3VzYnBkIGRwX3VzYnBkOwo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIg KmRwX3VzYnBkX3Bpbl9uYW1lKHU4IHBpbikKPiArewo+ICsJc3dpdGNoIChwaW4pIHsKPiArCWNh c2UgRFBfVVNCUERfUElOX0E6IHJldHVybiAiRFBfVVNCUERfUElOX0FTU0lHTk1FTlRfQSI7Cj4g KwljYXNlIERQX1VTQlBEX1BJTl9COiByZXR1cm4gIkRQX1VTQlBEX1BJTl9BU1NJR05NRU5UX0Ii Owo+ICsJY2FzZSBEUF9VU0JQRF9QSU5fQzogcmV0dXJuICJEUF9VU0JQRF9QSU5fQVNTSUdOTUVO VF9DIjsKPiArCWNhc2UgRFBfVVNCUERfUElOX0Q6IHJldHVybiAiRFBfVVNCUERfUElOX0FTU0lH Tk1FTlRfRCI7Cj4gKwljYXNlIERQX1VTQlBEX1BJTl9FOiByZXR1cm4gIkRQX1VTQlBEX1BJTl9B U1NJR05NRU5UX0UiOwo+ICsJY2FzZSBEUF9VU0JQRF9QSU5fRjogcmV0dXJuICJEUF9VU0JQRF9Q SU5fQVNTSUdOTUVOVF9GIjsKPiArCWRlZmF1bHQ6IHJldHVybiAiVU5LTk9XTiI7Cj4gKwl9Cj4g K30KCk5vIG5lZWQgdG8gaGF2ZSB0aGlzIGp1c3QgZm9yIG9uZSBkZWJ1ZyBzdGF0ZW1lbnQsIGp1 c3QgcHJpbnQgdGhlIGVudW0gdmFsdWUKd2l0aCAlZCBiZWxvdy4KCj4gKwo+ICtzdGF0aWMgY29u c3QgY2hhciAqZHBfdXNicGRfcG9ydF9uYW1lKGVudW0gZHBfdXNicGRfcG9ydCBwb3J0KQo+ICt7 Cj4gKwlzd2l0Y2ggKHBvcnQpIHsKPiArCWNhc2UgRFBfVVNCUERfUE9SVF9OT05FOiByZXR1cm4g IkRQX1VTQlBEX1BPUlRfTk9ORSI7Cj4gKwljYXNlIERQX1VTQlBEX1BPUlRfVUZQX0Q6IHJldHVy biAiRFBfVVNCUERfUE9SVF9VRlBfRCI7Cj4gKwljYXNlIERQX1VTQlBEX1BPUlRfREZQX0Q6IHJl dHVybiAiRFBfVVNCUERfUE9SVF9ERlBfRCI7Cj4gKwljYXNlIERQX1VTQlBEX1BPUlRfRF9VRlBf RDogcmV0dXJuICJEUF9VU0JQRF9QT1JUX0RfVUZQX0QiOwo+ICsJZGVmYXVsdDogcmV0dXJuICJE UF9VU0JQRF9QT1JUX05PTkUiOwo+ICsJfQo+ICt9CgpTYW1lIGhlcmUuCgo+ICsKPiArc3RhdGlj IHZvaWQgZHBfdXNicGRfaW5pdF9wb3J0KGVudW0gZHBfdXNicGRfcG9ydCAqcG9ydCwgdTMyIGlu X3BvcnQpCj4gK3sKPiArCXN3aXRjaCAoaW5fcG9ydCkgewo+ICsJY2FzZSAwOgo+ICsJCSpwb3J0 ID0gRFBfVVNCUERfUE9SVF9OT05FOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSAxOgo+ICsJCSpwb3J0 ID0gRFBfVVNCUERfUE9SVF9VRlBfRDsKPiArCQlicmVhazsKPiArCWNhc2UgMjoKPiArCQkqcG9y dCA9IERQX1VTQlBEX1BPUlRfREZQX0Q7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDM6Cj4gKwkJKnBv cnQgPSBEUF9VU0JQRF9QT1JUX0RfVUZQX0Q7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJ CSpwb3J0ID0gRFBfVVNCUERfUE9SVF9OT05FOwo+ICsJfQo+ICsJcHJfZGVidWcoInBvcnQ6JXNc biIsIGRwX3VzYnBkX3BvcnRfbmFtZSgqcG9ydCkpOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX3VzYnBk X2dldF9jYXBhYmlsaXRpZXMoc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpwZCkKCldoZXJlIGlz IHRoaXMgY2FsbGVkIGZyb20/Cgo+ICt7Cj4gKwlzdHJ1Y3QgZHBfdXNicGRfY2FwYWJpbGl0aWVz ICpjYXAgPSAmcGQtPmNhcDsKPiArCXUzMiBidWYgPSBwZC0+dmRvOwo+ICsJaW50IHBvcnQgPSBi dWYgJiAweDM7Cj4gKwo+ICsJY2FwLT5yZWNlcHRhY2xlX3N0YXRlID0gKGJ1ZiAmIEJJVCg2KSkg PyB0cnVlIDogZmFsc2U7Cj4gKwljYXAtPmRsaW5rX3Bpbl9jb25maWcgPSAoYnVmID4+IDgpICYg MHhmZjsKPiArCWNhcC0+dWxpbmtfcGluX2NvbmZpZyA9IChidWYgPj4gMTYpICYgMHhmZjsKClBs ZWFzZSAjZGVmaW5lIGhhcmRjb2RlZCB2YWx1ZXMKCj4gKwo+ICsJZHBfdXNicGRfaW5pdF9wb3J0 KCZjYXAtPnBvcnQsIHBvcnQpOwoKQWxsIG9mIHRoZSB2YWx1ZXMgaW4gY2FwLT5wb3J0IHNlZW0g dG8gYmUgaGFyZGNvZGVkLCBzbyB3aHkgbm90IGp1c3QgdXNlIHRoZQojZGVmaW5lJ3MgZGlyZWN0 bHkgd2hlcmUgYXBwbGljYWJsZT8KCj4gK30KPiArCj4gK3ZvaWQgZHBfdXNicGRfZ2V0X3N0YXR1 cyhzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKnBkKQoKV2hlcmUgaXMgdGhpcyBjYWxsZWQ/Cgo+ ICt7Cj4gKwlzdHJ1Y3QgZHBfdXNicGQgKnN0YXR1cyA9ICZwZC0+ZHBfdXNicGQ7Cj4gKwl1MzIg YnVmID0gcGQtPnZkbzsKPiArCWludCBwb3J0ID0gYnVmICYgMHgzOwo+ICsKPiArCXN0YXR1cy0+ bG93X3Bvd19zdCAgICAgPSAoYnVmICYgQklUKDIpKSA/IHRydWUgOiBmYWxzZTsKPiArCXN0YXR1 cy0+YWRhcHRvcl9kcF9lbiAgPSAoYnVmICYgQklUKDMpKSA/IHRydWUgOiBmYWxzZTsKPiArCXN0 YXR1cy0+bXVsdGlfZnVuYyAgICAgPSAoYnVmICYgQklUKDQpKSA/IHRydWUgOiBmYWxzZTsKPiAr CXN0YXR1cy0+dXNiX2NvbmZpZ19yZXEgPSAoYnVmICYgQklUKDUpKSA/IHRydWUgOiBmYWxzZTsK PiArCXN0YXR1cy0+ZXhpdF9kcF9tb2RlICAgPSAoYnVmICYgQklUKDYpKSA/IHRydWUgOiBmYWxz ZTsKPiArCXN0YXR1cy0+aHBkX2hpZ2ggICAgICAgPSAoYnVmICYgQklUKDcpKSA/IHRydWUgOiBm YWxzZTsKPiArCXN0YXR1cy0+aHBkX2lycSAgICAgICAgPSAoYnVmICYgQklUKDgpKSA/IHRydWUg OiBmYWxzZTsKPiArCj4gKwlwcl9kZWJ1ZygibG93X3Bvd19zdCA9ICVkLCBhZGFwdG9yX2RwX2Vu ID0gJWQsIG11bHRpX2Z1bmMgPSAlZFxuIiwKPiArCQkJc3RhdHVzLT5sb3dfcG93X3N0LCBzdGF0 dXMtPmFkYXB0b3JfZHBfZW4sCj4gKwkJCXN0YXR1cy0+bXVsdGlfZnVuYyk7Cj4gKwlwcl9kZWJ1 ZygidXNiX2NvbmZpZ19yZXEgPSAlZCwgZXhpdF9kcF9tb2RlID0gJWQsIGhwZF9oaWdoID0lZFxu IiwKPiArCQkJc3RhdHVzLT51c2JfY29uZmlnX3JlcSwKPiArCQkJc3RhdHVzLT5leGl0X2RwX21v ZGUsIHN0YXR1cy0+aHBkX2hpZ2gpOwo+ICsJcHJfZGVidWcoImhwZF9pcnEgPSAlZFxuIiwgc3Rh dHVzLT5ocGRfaXJxKTsKPiArCj4gKwlkcF91c2JwZF9pbml0X3BvcnQoJnN0YXR1cy0+cG9ydCwg cG9ydCk7CgpPbmx5IG11bHRpX2Z1bmMsIGhwZF9oaWdoLCBhbmQgaHBkX2lycSBhcmUgdXNlZCBv dXQgb2YgdGhpcyBzdHJ1Y3QuIENhbiB5b3UgY3VsbAp0aGUgdmFsdWVzIGRvd24/IGhwZF9pcnEg aXMgYWxzbyBvbmx5IHNldCB0byBpdHMgaGFyZGNvZGVkIHZhbHVlLCBzbyBqdXN0IHVzZQp0aGF0 IHZhbHVlIGRpcmVjdGx5IHdoZXJlIGFwcGxpY2FibGUuCgoKPiArfQo+ICsKPiArdTMyIGRwX3Vz YnBkX2dlbl9jb25maWdfcGt0KHN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAqcGQpCgpUaGlzIGZ1 bmN0aW9uIGlzIGFsc28gdW51c2VkCgo+ICt7Cj4gKwl1OCBwaW5fY2ZnLCBwaW47Cj4gKwl1MzIg Y29uZmlnID0gMDsKPiArCWNvbnN0IHUzMiB1ZnBfZF9jb25maWcgPSAweDIsIGRwX3ZlciA9IDB4 MTsKPiArCj4gKwlpZiAocGQtPmNhcC5yZWNlcHRhY2xlX3N0YXRlKQo+ICsJCXBpbl9jZmcgPSBw ZC0+Y2FwLnVsaW5rX3Bpbl9jb25maWc7Cj4gKwllbHNlCj4gKwkJcGluX2NmZyA9IHBkLT5jYXAu ZGxpbmtfcGluX2NvbmZpZzsKPiArCj4gKwlmb3IgKHBpbiA9IERQX1VTQlBEX1BJTl9BOyBwaW4g PCBEUF9VU0JQRF9QSU5fTUFYOyBwaW4rKykgewo+ICsJCWlmIChwaW5fY2ZnICYgQklUKHBpbikp IHsKPiArCQkJaWYgKHBkLT5kcF91c2JwZC5tdWx0aV9mdW5jKSB7Cj4gKwkJCQlpZiAocGluID09 IERQX1VTQlBEX1BJTl9EKQo+ICsJCQkJCWJyZWFrOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJYnJl YWs7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKHBpbiA9PSBEUF9VU0JQRF9QSU5f TUFYKQo+ICsJCXBpbiA9IERQX1VTQlBEX1BJTl9DOwo+ICsKPiArCXByX2RlYnVnKCJwaW4gYXNz aWdubWVudDogJXNcbiIsIGRwX3VzYnBkX3Bpbl9uYW1lKHBpbikpOwo+ICsKPiArCWNvbmZpZyB8 PSBCSVQocGluKSA8PCA4Owo+ICsKPiArCWNvbmZpZyB8PSAoZHBfdmVyIDw8IDIpOwo+ICsJY29u ZmlnIHw9IHVmcF9kX2NvbmZpZzsKPiArCj4gKwlwcl9kZWJ1ZygiY29uZmlnID0gMHgleFxuIiwg Y29uZmlnKTsKPiArCXJldHVybiBjb25maWc7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfZXh0 Y29uX2Nvbm5lY3Qoc3RydWN0IGRwX3VzYnBkICpkcF91c2JwZCwgYm9vbCBocGQpCj4gK3sKPiAr CWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKmV4dGNvbjsKPiArCj4g KwlpZiAoIWRwX3VzYnBkKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQly YyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnJvcjsKCkp1c3QgcmV0dXJuIC1FSU5WQUwgYW5kIGdl dCByaWQgb2YgdGhlIGVycm9yIGxhYmVsIGFuZCByYy4KCj4gKwl9Cj4gKwo+ICsJZXh0Y29uID0g Y29udGFpbmVyX29mKGRwX3VzYnBkLCBzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUsIGRwX3VzYnBk KTsKPiArCj4gKwlkcF91c2JwZC0+aHBkX2hpZ2ggPSBocGQ7Cj4gKwlkcF91c2JwZC0+Zm9yY2Vk X2Rpc2Nvbm5lY3QgPSAhaHBkOwoKSWYgZm9yY2VkX2Rpc2Nvbm5lY3QgaXMgYWx3YXlzICFkcF91 c2JwZC0+aHBkX2hpZ2gsIHdoeSBub3QganVzdCB1c2UKIWRwX3VzYnBkLT5ocGRfaGlnaCBkaXJl Y3RseT8KCj4gKwo+ICsJaWYgKGhwZCkKPiArCQlleHRjb24tPmRwX2NiLT5jb25maWd1cmUoZXh0 Y29uLT5kZXYpOwo+ICsJZWxzZQo+ICsJCWV4dGNvbi0+ZHBfY2ItPmRpc2Nvbm5lY3QoZXh0Y29u LT5kZXYpOwoKRG8geW91IG5lZWQgbG9ja2luZyBpbiB0aGlzIGZ1bmN0aW9uL2ZpbGU/Cgo+ICsK PiArZXJyb3I6Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfZXh0Y29u X2dldF9sYW5lcyhzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKmV4dGNvbl9wcml2KQo+ICt7Cj4g Kwl1bmlvbiBleHRjb25fcHJvcGVydHlfdmFsdWUgcHJvcGVydHk7Cj4gKwl1OCBsYW5lczsKPiAr Cj4gKwlpZiAoIWV4dGNvbl9wcml2IHx8ICFleHRjb25fcHJpdi0+ZXh0Y29uKSB7Cj4gKwkJcHJf ZXJyKCJJbnZhbGlkIGlucHV0IGFyZ3VtZW50c1xuIik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4g Kwo+ICsJZXh0Y29uX2dldF9wcm9wZXJ0eShleHRjb25fcHJpdi0+ZXh0Y29uLAo+ICsJCQkJCUVY VENPTl9ESVNQX0RQLAo+ICsJCQkJCUVYVENPTl9QUk9QX1VTQl9TUywKPiArCQkJCQkmcHJvcGVy dHkpOwo+ICsJbGFuZXMgPSAoKTsKPiArCj4gKwlyZXR1cm4gbGFuZXM7CgogICAgICAgIHJldHVy biAocHJvcGVydHkuaW50dmFsKSA/IDIgOiA0OwoKYW5kIGRlbGV0ZSBsYW5lcwoKCj4gK30KPiAr Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9leHRjb25fZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAqZXh0Y29uX3ByaXY7 Cj4gKwlpbnQgZHBfc3RhdGUsIHJldDsKPiArCWludCBsYW5lczsKPiArCXVuaW9uIGV4dGNvbl9w cm9wZXJ0eV92YWx1ZSBwcm9wZXJ0eTsKPiArCj4gKwlleHRjb25fcHJpdiA9IGNvbnRhaW5lcl9v Zih3b3JrLAo+ICsJCQlzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUsIGV2ZW50X3dvcmspOwo+ICsK PiArCWlmICghZXh0Y29uX3ByaXYgfHwgIWV4dGNvbl9wcml2LT5leHRjb24pIHsKPiArCQlwcl9l cnIoIkludmFsaWQgZXh0Y29uIGRldmljZSBoYW5kbGVyXG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9 Cj4gKwo+ICsJZHBfc3RhdGUgPSBleHRjb25fZ2V0X3N0YXRlKGV4dGNvbl9wcml2LT5leHRjb24s Cj4gKwkJCQkJCUVYVENPTl9ESVNQX0RQKTsKCkNhbiBmaXQgb24gMSBsaW5lCgo+ICsKPiArCWlm IChkcF9zdGF0ZSA+IDApIHsKPiArCQlyZXQgPSBleHRjb25fZ2V0X3Byb3BlcnR5KGV4dGNvbl9w cml2LT5leHRjb24sCj4gKwkJCQkJRVhUQ09OX0RJU1BfRFAsCj4gKwkJCQkJRVhUQ09OX1BST1Bf VVNCX1RZUEVDX1BPTEFSSVRZLAo+ICsJCQkJCSZwcm9wZXJ0eSk7Cj4gKwkJaWYgKHJldCkgewo+ ICsJCQlwcl9lcnIoIkdldCBQb2xhcml0eSBwcm9wZXJ0eSBmYWlsZWRcbiIpOwo+ICsJCQlyZXR1 cm47Cj4gKwkJfQo+ICsJCWV4dGNvbl9wcml2LT5kcF91c2JwZC5vcmllbnRhdGlvbiA9Cj4gKwkJ CSgocHJvcGVydHkuaW50dmFsKSA/CgpDYW4gZml0IG9uIDEgbGluZSwgcGx1cyByZW1vdmUgYWxs ICgpIGZyb20gdGhpcywgdGhleSdyZSBub3QgbmVlZGVkLgoKPiArCQkJCU9SSUVOVEFUSU9OX0ND MiA6IE9SSUVOVEFUSU9OX0NDMSk7Cj4gKwo+ICsJCWxhbmVzID0gZHBfZXh0Y29uX2dldF9sYW5l cyhleHRjb25fcHJpdik7Cj4gKwkJaWYgKCFsYW5lcykKPiArCQkJcmV0dXJuOwo+ICsJCWV4dGNv bl9wcml2LT5kcF91c2JwZC5tdWx0aV9mdW5jID0KPiArCQkJCQkoKGxhbmVzID09IDIpID8gZmFs c2UgOiB0cnVlKTsKClRoaXMgcGFydCBpcyBhIGJpdCBjb25mdXNpbmcsIHlvdSBhZGQgYSBoZWxw ZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBsYW5lcywgYW5kCmludGVycHJldCB0aGUgVVNCX1NTIHBy b3BlcnR5IHRvIHJldHVybiAyIHZzLiA0LCBidXQgdGhlbiBpbW1lZGlhdGVseSBjb252ZXJ0CnRo YXQgYmFjayBpbnRvIHdoYXQgdGhlIFVTQl9TUyBwcm9wZXJ0eSByZXR1cm5zLiBJbnN0ZWFkLCBy ZW1vdmUgdGhlIGhlbHBlcgpmdW5jdGlvbiBhbmQgcmVhZCBVU0JfU1MgZGlyZWN0bHkgaGVyZS4K Cj4gKwo+ICsJCWlmIChleHRjb25fcHJpdi0+ZHBfY2IgJiYgZXh0Y29uX3ByaXYtPmRwX2NiLT5j b25maWd1cmUpCgpJIGZlZWwgbGlrZSB0aGlzIGNhbiBuZXZlciBiZSBmYWxzZSBhbnl3YXlzLCBi dXQgeW91J3JlIG5vdCB1c2luZyBlaXRoZXIgb2YKdGhlc2UgbWVtYmVycyBpbiB0aGUgY29uZGl0 aW9uYWwgYmxvY2suIFNvIHdoeSBub3QganVzdCBjYWxsIGRwX2V4dGNvbl9jb25uZWN0CnVuY29u ZGl0aW9uYWxseT8KCj4gKwkJCWRwX2V4dGNvbl9jb25uZWN0KCZleHRjb25fcHJpdi0+ZHBfdXNi cGQsIHRydWUpOwoKQ2hlY2sgcmV0dXJuIHZhbHVlCgo+ICsJfSBlbHNlIHsKPiArCQlpZiAoZXh0 Y29uX3ByaXYtPmRwX2NiICYmIGV4dGNvbl9wcml2LT5kcF9jYi0+ZGlzY29ubmVjdCkKClNhbWUg aGVyZS4KCj4gKwkJCWRwX2V4dGNvbl9jb25uZWN0KCZleHRjb25fcHJpdi0+ZHBfdXNicGQsIGZh bHNlKTsKCkNoZWNrIHJldHVybiB2YWx1ZQoKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBk cF9leHRjb25fY3JlYXRlX3dvcmtxdWV1ZShzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKmV4dGNv bl9wcml2KQo+ICt7Cj4gKwlleHRjb25fcHJpdi0+ZXh0Y29uX3dxID0gY3JlYXRlX3NpbmdsZXRo cmVhZF93b3JrcXVldWUoImRybV9kcF9leHRjb24iKTsKCldoYXQncyB0aGUgYmVuZWZpdCBvZiB1 c2luZyBhIGRlZGljYXRlZCB3b3JrcXVldWUgaW5zdGVhZCBvZiB0aGUgc3lzdGVtIHdxPwoKPiAr CWlmIChJU19FUlJfT1JfTlVMTChleHRjb25fcHJpdi0+ZXh0Y29uX3dxKSkgewo+ICsJCXByX2Vy cigiRXJyb3IgY3JlYXRpbmcgZXh0Y29uIHdxXG4iKTsKPiArCQlyZXR1cm4gLUVQRVJNOwo+ICsJ fQo+ICsKPiArCUlOSVRfV09SSygmZXh0Y29uX3ByaXYtPmV2ZW50X3dvcmssIGRwX2V4dGNvbl9l dmVudF93b3JrKTsKPiArCj4gKwlyZXR1cm4gMDsKClRoaXMgZnVuY3Rpb24gY2FuJ3QgZmFpbCwg c28gaXQgc2hvdWxkIHJldHVybiB2b2lkLiBJbiBmYWN0LCB0aGlzIHJlYWxseSBkb2Vzbid0Cm5l ZWQgdG8gYmUgYSBzZXBhcmF0ZSBmdW5jdGlvbiwgcm9sbCBpdCBpbnRvIGRwX2V4dGNvbl9yZWdp c3RlcigpLgoKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9leHRjb25fZXZlbnRfbm90aWZ5KHN0 cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCj4gKwkJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZv aWQgKnByaXYpCj4gK3sKPiArCXN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAqZXh0Y29uX3ByaXY7 Cj4gKwo+ICsJZXh0Y29uX3ByaXYgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBkcF9leHRjb25f cHJpdmF0ZSwKPiArCQkJCQkJZXh0Y29uX25iKTsKPiArCj4gKwlxdWV1ZV93b3JrKGV4dGNvbl9w cml2LT5leHRjb25fd3EsICZleHRjb25fcHJpdi0+ZXZlbnRfd29yayk7Cj4gKwlyZXR1cm4gTk9U SUZZX0RPTkU7Cj4gK30KPiArCj4gK2ludCBkcF9leHRjb25fcmVnaXN0ZXIoc3RydWN0IGRwX3Vz YnBkICpkcF91c2JwZCkKPiArewo+ICsJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpleHRjb25f cHJpdjsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWlmICghZHBfdXNicGQpCj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwo+ICsJcHJfZXJyKCJTdGFydCsrKysiKTsKCllpa2VzLCB0aGlzIGRvZXNu J3QgbG9vayBsaWtlIGFuIGVycm9yIQoKPiArCWV4dGNvbl9wcml2ID0gY29udGFpbmVyX29mKGRw X3VzYnBkLCBzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUsIGRwX3VzYnBkKTsKPiArCj4gKwlleHRj b25fcHJpdi0+ZXh0Y29uX25iLm5vdGlmaWVyX2NhbGwgPSBkcF9leHRjb25fZXZlbnRfbm90aWZ5 Owo+ICsJcmV0ID0gZGV2bV9leHRjb25fcmVnaXN0ZXJfbm90aWZpZXIoZXh0Y29uX3ByaXYtPmRl diwgZXh0Y29uX3ByaXYtPmV4dGNvbiwKPiArCQkJCQkgICAgRVhUQ09OX0RJU1BfRFAsCj4gKwkJ CQkJICAgICZleHRjb25fcHJpdi0+ZXh0Y29uX25iKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZf ZXJyKGV4dGNvbl9wcml2LT5kZXYsCj4gKwkJCSJyZWdpc3RlciBFWFRDT05fRElTUF9EUCBub3Rp ZmllciBlcnJcbiIpOwo+ICsJCXJldCA9IC1FSU5WQUw7CgpXaHkga2VlcCBnb2luZyBhbmQgY3Jl YXRlIHRoZSB3b3JrcXVldWUgaWYgd2UgaGF2ZSBubyBub3RpZmllcj8gVGhpcyBzaG91bGQKcHJv YmFibHkgYmUgYSByZXR1cm4uCgo+ICsJfQo+ICsKPiArCXJldCA9IGRwX2V4dGNvbl9jcmVhdGVf d29ya3F1ZXVlKGV4dGNvbl9wcml2KTsKPiArCWlmIChyZXQpIHsKPiArCQlwcl9lcnIoIkZhaWxl ZCB0byBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKPiArCQlkcF9leHRjb25fdW5yZWdpc3RlcihkcF91 c2JwZCk7CgpyZXR1cm4gcmV0PwoKPiArCX0KPiArCj4gKwlwcl9lcnIoIkVuZC0tLS0iKTsKClNh bWUgaGVyZQoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3ZvaWQgZHBfZXh0Y29uX3VucmVn aXN0ZXIoc3RydWN0IGRwX3VzYnBkICpkcF91c2JwZCkKPiArewo+ICsJc3RydWN0IGRwX2V4dGNv bl9wcml2YXRlICpleHRjb25fcHJpdjsKPiArCj4gKwlpZiAoIWRwX3VzYnBkKSB7Cj4gKwkJcHJf ZXJyKCJJbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJcHJfZXJy KCJTdGFydCsrKysiKTsKCnJlbW92ZS4KCj4gKwlleHRjb25fcHJpdiA9IGNvbnRhaW5lcl9vZihk cF91c2JwZCwgc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlLCBkcF91c2JwZCk7Cj4gKwo+ICsJZGV2 bV9leHRjb25fdW5yZWdpc3Rlcl9ub3RpZmllcihleHRjb25fcHJpdi0+ZGV2LCBleHRjb25fcHJp di0+ZXh0Y29uLAo+ICsJCQkJCSAgICBFWFRDT05fRElTUF9EUCwKPiArCQkJCQkgICAgJmV4dGNv bl9wcml2LT5leHRjb25fbmIpOwo+ICsKPiArCWlmIChleHRjb25fcHJpdi0+ZXh0Y29uX3dxKQo+ ICsJCWRlc3Ryb3lfd29ya3F1ZXVlKGV4dGNvbl9wcml2LT5leHRjb25fd3EpOwo+ICsKPiArCXBy X2VycigiRW5kLS0tLSIpOwoKcmVtb3ZlLgoKPiArCXJldHVybjsKPiArfQo+ICsKPiArc3RydWN0 IGRwX3VzYnBkICpkcF9leHRjb25fZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX3Vz YnBkX2NiICpjYikKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9leHRjb25fcHJp dmF0ZSAqZHBfZXh0Y29uOwo+ICsJc3RydWN0IGRwX3VzYnBkICpkcF91c2JwZDsKPiArCj4gKwlp ZiAoIWNiKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGNiIGRhdGFcbiIpOwo+ICsJCXJjID0gLUVJ TlZBTDsKPiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCXByX2VycigiJXM6IFN0YXJ0Iiwg X19mdW5jX18pOwoKcmVtb3ZlLgoKPiArCWRwX2V4dGNvbiA9IGRldm1fa3phbGxvYyhkZXYsIHNp emVvZigqZHBfZXh0Y29uKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWRwX2V4dGNvbikgewo+ICsJ CXJjID0gLUVOT01FTTsKPiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCWRwX2V4dGNvbi0+ ZXh0Y29uID0gZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUoZGV2LCAwKTsKPiArCWlmICghZHBf ZXh0Y29uLT5leHRjb24pIHsKPiArCQlwcl9lcnIoImludmFsaWQgZXh0Y29uIGRhdGFcbiIpOwo+ ICsJCXJjID0gLUVJTlZBTDsKPiArCQlkZXZtX2tmcmVlKGRldiwgZHBfZXh0Y29uKTsKPiArCQln b3RvIGVycm9yOwo+ICsgICAgICAgIH0KPiArCj4gKwlkcF9leHRjb24tPmRldiA9IGRldjsKPiAr CWRwX2V4dGNvbi0+ZHBfY2IgPSBjYjsKPiArCj4gKwlkcF9leHRjb24tPmRwX3VzYnBkLmNvbm5l Y3QgPSBkcF9leHRjb25fY29ubmVjdDsKPiArCWRwX3VzYnBkID0gJmRwX2V4dGNvbi0+ZHBfdXNi cGQ7Cj4gKwo+ICsJcHJfZXJyKCIlczogZW5kIiwgX19mdW5jX18pOwoKcmVtb3ZlLgoKPiArCXJl dHVybiBkcF91c2JwZDsKPiArZXJyb3I6CgpUaGlzIGxhYmVsIGlzbid0IHVzZWZ1bCwgcmV0dXJu IGRpcmVjdGx5IHdoZXJlIGFwcGxpY2FibGUuCgo+ICsJcmV0dXJuIEVSUl9QVFIocmMpOwo+ICt9 Cj4gKwo+ICt2b2lkIGRwX2V4dGNvbl9wdXQoc3RydWN0IGRwX3VzYnBkICpkcF91c2JwZCkKPiAr ewo+ICsJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpleHRjb247Cj4gKwo+ICsJaWYgKCFkcF91 c2JwZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZXh0Y29uID0gY29udGFpbmVyX29mKGRwX3VzYnBk LCBzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUsIGRwX3VzYnBkKTsKPiArCj4gKwlkZXZtX2tmcmVl KGV4dGNvbi0+ZGV2LCBleHRjb24pOwo+ICsKPiArCXByX2VycigiJXM6IGVuZCIsIF9fZnVuY19f KTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5o IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9leHRjb24uaAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uMWY4M2ExOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5oCj4gQEAgLTAsMCArMSwxMTEgQEAKPiArLyoK PiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQK PiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAq Lwo+ICsKPiArI2lmbmRlZiBfRFBfRVhUQ09OX0hfCj4gKyNkZWZpbmUgX0RQX0VYVENPTl9IXwo+ ICsKPiArLy8jaW5jbHVkZSA8bGludXgvdXNiL3VzYnBkLmg+Cj4gKwo+ICsjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsKPiArLyoqCj4gKyAq IGVudW0gZHBfdXNicGRfcG9ydCAtIHVzYi9kcCBwb3J0IHR5cGUKPiArICogQERQX1VTQlBEX1BP UlRfTk9ORTogcG9ydCBub3QgY29uZmlndXJlZAo+ICsgKiBARFBfVVNCUERfUE9SVF9VRlBfRDog VXBzdHJlYW0gRmFjaW5nIFBvcnQgLSBEaXNwbGF5UG9ydAo+ICsgKiBARFBfVVNCUERfUE9SVF9E RlBfRDogRG93bnN0cmVhbSBGYWNpbmcgUG9ydCAtIERpc3BsYXlQb3J0Cj4gKyAqIEBEUF9VU0JQ RF9QT1JUX0RfVUZQX0Q6IEJvdGggVUZQICYgREZQIC0gRGlzcGxheVBvcnQKPiArICovCj4gKwo+ ICtlbnVtIGRwX3VzYnBkX3BvcnQgewo+ICsJRFBfVVNCUERfUE9SVF9OT05FLAo+ICsJRFBfVVNC UERfUE9SVF9VRlBfRCwKPiArCURQX1VTQlBEX1BPUlRfREZQX0QsCj4gKwlEUF9VU0JQRF9QT1JU X0RfVUZQX0QsCj4gK307Cj4gKwo+ICtlbnVtIHBsdWdfb3JpZW50YXRpb24gewo+ICsJT1JJRU5U QVRJT05fTk9ORSwKPiArCU9SSUVOVEFUSU9OX0NDMSwKPiArCU9SSUVOVEFUSU9OX0NDMiwKPiAr fTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHBfdXNicGQgLSBEaXNwbGF5UG9ydCBzdGF0dXMK PiArICoKPiArICogQHBvcnQ6IHBvcnQgY29uZmlndXJlZAo+ICsgKiBvcmllbnRhdGlvbjogcGx1 ZyBvcmllbnRhdGlvbiBjb25maWd1cmF0aW9uCj4gKyAqIEBsb3dfcG93X3N0OiBsb3cgcG93ZXIg c3RhdGUKPiArICogQGFkYXB0b3JfZHBfZW46IGFkYXB0b3IgZnVuY3Rpb25hbGl0eSBlbmFibGVk Cj4gKyAqIEBtdWx0aV9mdW5jOiBtdWx0aS1mdW5jdGlvbiBwcmVmZXJyZWQKPiArICogQHVzYl9j b25maWdfcmVxOiByZXF1ZXN0IHRvIHN3aXRjaCB0byB1c2IKPiArICogQGV4aXRfZHBfbW9kZTog cmVxdWVzdCBleGl0IGZyb20gZGlzcGxheXBvcnQgbW9kZQo+ICsgKiBAaHBkX2hpZ2g6IEhvdCBQ bHVnIERldGVjdCBzaWduYWwgaXMgaGlnaC4KPiArICogQGhwZF9pcnE6IENoYW5nZSBpbiB0aGUg c3RhdHVzIHNpbmNlIGxhc3QgbWVzc2FnZQo+ICsgKiBAYWx0X21vZGVfY2ZnX2RvbmU6IGJvb2wg dG8gc3BlY2lmeSBhbHQgbW9kZSBzdGF0dXMKPiArICogQGRlYnVnX2VuOiBib29sIHRvIHNwZWNp ZnkgZGVidWcgbW9kZQo+ICsgKiBAY29ubmVjdDogc2ltdWxhdGUgZGlzY29ubmVjdCBvciBjb25u ZWN0IGZvciBkZWJ1ZyBtb2RlCj4gKyAqLwo+ICtzdHJ1Y3QgZHBfdXNicGQgewo+ICsJZW51bSBk cF91c2JwZF9wb3J0IHBvcnQ7Cj4gKwllbnVtIHBsdWdfb3JpZW50YXRpb24gb3JpZW50YXRpb247 Cj4gKwlib29sIGxvd19wb3dfc3Q7Cj4gKwlib29sIGFkYXB0b3JfZHBfZW47Cj4gKwlib29sIG11 bHRpX2Z1bmM7Cj4gKwlib29sIHVzYl9jb25maWdfcmVxOwo+ICsJYm9vbCBleGl0X2RwX21vZGU7 Cj4gKwlib29sIGhwZF9oaWdoOwo+ICsJYm9vbCBocGRfaXJxOwo+ICsJYm9vbCBhbHRfbW9kZV9j ZmdfZG9uZTsKPiArCWJvb2wgZGVidWdfZW47Cj4gKwlib29sIGZvcmNlZF9kaXNjb25uZWN0Owo+ ICsKPiArCWludCAoKmNvbm5lY3QpKHN0cnVjdCBkcF91c2JwZCAqZHBfdXNicGQsIGJvb2wgaHBk KTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHBfdXNicGRfY2IgLSBjYWxsYmFjayBm dW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGNsaWVudAo+ICsgKgo+ICsgKiBAY29uZmlndXJlOiBj YWxsZWQgYnkgdXNicGQgbW9kdWxlIHdoZW4gUEQgY29tbXVuaWNhdGlvbiBoYXMKPiArICogYmVl biBjb21wbGV0ZWQgYW5kIHRoZSB1c2IgcGVyaXBoZXJhbCBoYXMgYmVlbiBjb25maWd1cmVkIG9u Cj4gKyAqIGRwIG1vZGUuCj4gKyAqIEBkaXNjb25uZWN0OiBub3RpZnkgdGhlIGNhYmxlIGRpc2Nv bm5lY3QgaXNzdWVkIGJ5IHVzYi4KPiArICogQGF0dGVudGlvbjogbm90aWZ5IGFueSBhdHRlbnRp b24gbWVzc2FnZSBpc3N1ZWQgYnkgdXNiLgo+ICsgKi8KPiArc3RydWN0IGRwX3VzYnBkX2NiIHsK PiArCWludCAoKmNvbmZpZ3VyZSkoc3RydWN0IGRldmljZSAqZGV2KTsKPiArCWludCAoKmRpc2Nv bm5lY3QpKHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gKwlpbnQgKCphdHRlbnRpb24pKHN0cnVjdCBk ZXZpY2UgKmRldik7Cj4gK307Cj4gKwo+ICsvKioKPiArICogZHBfZXh0Y29uX2dldCgpIC0gc2V0 dXAgdXNicGQgbW9kdWxlCj4gKyAqCj4gKyAqIEBkZXY6IGRldmljZSBpbnN0YW5jZSBvZiB0aGUg Y2FsbGVyCj4gKyAqIEBjYjogc3RydWN0IGNvbnRhaW5pbmcgY2FsbGJhY2sgZnVuY3Rpb24gcG9p bnRlcnMuCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSBjbGllbnQgdG8gaW5p dGlhbGl6ZSB0aGUgdXNicGQKPiArICogbW9kdWxlLiBUaGUgbW9kdWxlIHdpbGwgY29tbXVuaWNh dGUgd2l0aCB1c2IgZHJpdmVyIGFuZAo+ICsgKiBoYW5kbGVzIHRoZSBwb3dlciBkZWxpdmVyeSAo UEQpIGNvbW11bmljYXRpb24gd2l0aCB0aGUKPiArICogc2luay91c2IgZGV2aWNlLiBUaGlzIG1v ZHVsZSB3aWxsIG5vdGlmeSB0aGUgY2xpZW50IHVzaW5nCj4gKyAqIHRoZSBjYWxsYmFjayBmdW5j dGlvbnMgYWJvdXQgdGhlIGNvbm5lY3Rpb24gYW5kIHN0YXR1cy4KPiArICovCj4gK3N0cnVjdCBk cF91c2JwZCAqZHBfZXh0Y29uX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF91c2Jw ZF9jYiAqY2IpOwo+ICsKPiArdm9pZCBkcF9leHRjb25fcHV0KHN0cnVjdCBkcF91c2JwZCAqcGQp Owo+ICsKPiAraW50IGRwX2V4dGNvbl9yZWdpc3RlcihzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBk KTsKPiArdm9pZCBkcF9leHRjb25fdW5yZWdpc3RlcihzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBk KTsKPiArCj4gKyNlbmRpZiAvKiBfRFBfRVhUQ09OX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfbGluay5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9s aW5rLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjVhYjFlZmMKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmMKPiBA QCAtMCwwICsxLDE1NDkgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRo ZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2RlZmluZSBwcl9mbXQoZm10KQkiW2Ry bS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+ICsKPiArI2luY2x1ZGUgImRwX2xpbmsuaCIKPiAr I2luY2x1ZGUgImRwX3BhbmVsLmgiCj4gKwo+ICtlbnVtIGR5bmFtaWNfcmFuZ2Ugewo+ICsJRFBf RFlOQU1JQ19SQU5HRV9SR0JfVkVTQSA9IDB4MDAsCj4gKwlEUF9EWU5BTUlDX1JBTkdFX1JHQl9D RUEgPSAweDAxLAo+ICsJRFBfRFlOQU1JQ19SQU5HRV9VTktOT1dOID0gMHhGRkZGRkZGRiwKPiAr fTsKClRoZXNlIHNob3VsZCBiZSBpbiBkcm1fZHBfaGVscGVyLmgKCj4gKwo+ICtlbnVtIGF1ZGlv X3NhbXBsZV9yYXRlIHsKPiArCUFVRElPX1NBTVBMRV9SQVRFXzMyX0tIWgk9IDB4MDAsCj4gKwlB VURJT19TQU1QTEVfUkFURV80NF8xX0tIWgk9IDB4MDEsCj4gKwlBVURJT19TQU1QTEVfUkFURV80 OF9LSFoJPSAweDAyLAo+ICsJQVVESU9fU0FNUExFX1JBVEVfODhfMl9LSFoJPSAweDAzLAo+ICsJ QVVESU9fU0FNUExFX1JBVEVfOTZfS0haCT0gMHgwNCwKPiArCUFVRElPX1NBTVBMRV9SQVRFXzE3 Nl80X0tIWgk9IDB4MDUsCj4gKwlBVURJT19TQU1QTEVfUkFURV8xOTJfS0haCT0gMHgwNiwKPiAr fTsKPiArCj4gK2VudW0gYXVkaW9fcGF0dGVybl90eXBlIHsKPiArCUFVRElPX1RFU1RfUEFUVEVS Tl9PUEVSQVRPUl9ERUZJTkVECT0gMHgwMCwKPiArCUFVRElPX1RFU1RfUEFUVEVSTl9TQVdUT09U SAkJPSAweDAxLAo+ICt9Owo+ICsKPiArc3RydWN0IGRwX2xpbmtfcmVxdWVzdCB7Cj4gKwl1MzIg dGVzdF9yZXF1ZXN0ZWQ7Cj4gKwl1MzIgdGVzdF9saW5rX3JhdGU7Cj4gKwl1MzIgdGVzdF9sYW5l X2NvdW50Owo+ICt9Owo+ICsKPiArc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSB7Cj4gKwl1MzIgcHJl dl9zaW5rX2NvdW50Owo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJc3RydWN0IGRwX2F1eCAq YXV4Owo+ICsJc3RydWN0IGRwX2xpbmsgZHBfbGluazsKPiArCj4gKwlzdHJ1Y3QgZHBfbGlua19y ZXF1ZXN0IHJlcXVlc3Q7Cj4gKwl1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsK PiArfTsKPiArCj4gK3N0YXRpYyBjaGFyICpkcF9saW5rX2dldF9hdWRpb190ZXN0X3BhdHRlcm4o dTMyIHBhdHRlcm4pCj4gK3sKPiArCXN3aXRjaCAocGF0dGVybikgewo+ICsJY2FzZSBBVURJT19U RVNUX1BBVFRFUk5fT1BFUkFUT1JfREVGSU5FRDoKPiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NU UihBVURJT19URVNUX1BBVFRFUk5fT1BFUkFUT1JfREVGSU5FRCk7Cj4gKwljYXNlIEFVRElPX1RF U1RfUEFUVEVSTl9TQVdUT09USDoKPiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihBVURJT19U RVNUX1BBVFRFUk5fU0FXVE9PVEgpOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gInVua25vd24i Owo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgY2hhciAqZHBfbGlua19nZXRfYXVkaW9fc2FtcGxl X3JhdGUodTMyIHJhdGUpCj4gK3sKPiArCXN3aXRjaCAocmF0ZSkgewo+ICsJY2FzZSBBVURJT19T QU1QTEVfUkFURV8zMl9LSFo6Cj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoQVVESU9fU0FN UExFX1JBVEVfMzJfS0haKTsKPiArCWNhc2UgQVVESU9fU0FNUExFX1JBVEVfNDRfMV9LSFo6Cj4g KwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoQVVESU9fU0FNUExFX1JBVEVfNDRfMV9LSFopOwo+ ICsJY2FzZSBBVURJT19TQU1QTEVfUkFURV80OF9LSFo6Cj4gKwkJcmV0dXJuIERQX0xJTktfRU5V TV9TVFIoQVVESU9fU0FNUExFX1JBVEVfNDhfS0haKTsKPiArCWNhc2UgQVVESU9fU0FNUExFX1JB VEVfODhfMl9LSFo6Cj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoQVVESU9fU0FNUExFX1JB VEVfODhfMl9LSFopOwo+ICsJY2FzZSBBVURJT19TQU1QTEVfUkFURV85Nl9LSFo6Cj4gKwkJcmV0 dXJuIERQX0xJTktfRU5VTV9TVFIoQVVESU9fU0FNUExFX1JBVEVfOTZfS0haKTsKPiArCWNhc2Ug QVVESU9fU0FNUExFX1JBVEVfMTc2XzRfS0haOgo+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RS KEFVRElPX1NBTVBMRV9SQVRFXzE3Nl80X0tIWik7Cj4gKwljYXNlIEFVRElPX1NBTVBMRV9SQVRF XzE5Ml9LSFo6Cj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoQVVESU9fU0FNUExFX1JBVEVf MTkyX0tIWik7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAidW5rbm93biI7Cj4gKwl9Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgZHBfbGlua19nZXRfcGVyaW9kKHN0cnVjdCBkcF9saW5rX3ByaXZh dGUgKmxpbmssIGludCBjb25zdCBhZGRyKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCXU4IGJw Owo+ICsJdTggZGF0YTsKPiArCXUzMiBjb25zdCBwYXJhbV9sZW4gPSAweDE7Cj4gKwl1MzIgY29u c3QgbWF4X2F1ZGlvX3BlcmlvZCA9IDB4QTsKPiArCj4gKwkvKiBURVNUX0FVRElPX1BFUklPRF9D SF9YWCAqLwo+ICsJaWYgKGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCBhZGRy LCAmYnAsCj4gKwkJcGFyYW1fbGVuKSA8IHBhcmFtX2xlbikgewo+ICsJCXByX2VycigiZmFpbGVk IHRvIHJlYWQgdGVzdF9hdWRpb19wZXJpb2QgKDB4JXgpXG4iLCBhZGRyKTsKPiArCQlyZXQgPSAt RUlOVkFMOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlkYXRhID0gYnA7Cj4gKwo+ICsJ LyogUGVyaW9kIC0gQml0cyAzOjAgKi8KPiArCWRhdGEgPSBkYXRhICYgMHhGOwo+ICsJaWYgKChp bnQpZGF0YSA+IG1heF9hdWRpb19wZXJpb2QpIHsKPiArCQlwcl9lcnIoImludmFsaWQgdGVzdF9h dWRpb19wZXJpb2RfY2hfMSA9IDB4JXhcbiIsIGRhdGEpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4g KwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCXJldCA9IGRhdGE7Cj4gK2V4aXQ6Cj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfYXVkaW9fY2hhbm5l bF9wZXJpb2Qoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPiArewo+ICsJaW50IHJldCA9 IDA7Cj4gKwlzdHJ1Y3QgZHBfbGlua190ZXN0X2F1ZGlvICpyZXEgPSAmbGluay0+ZHBfbGluay50 ZXN0X2F1ZGlvOwo+ICsKPiArCXJldCA9IGRwX2xpbmtfZ2V0X3BlcmlvZChsaW5rLCBEUF9URVNU X0FVRElPX1BFUklPRF9DSDEpOwo+ICsJaWYgKHJldCA9PSAtRUlOVkFMKQo+ICsJCWdvdG8gZXhp dDsKPiArCj4gKwlyZXEtPnRlc3RfYXVkaW9fcGVyaW9kX2NoXzEgPSByZXQ7Cj4gKwlwcl9kZWJ1 ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfMSA9IDB4JXhcbiIsIHJldCk7Cj4gKwo+ICsJcmV0ID0g ZHBfbGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMik7Cj4gKwlp ZiAocmV0ID09IC1FSU5WQUwpCj4gKwkJZ290byBleGl0Owo+ICsKPiArCXJlcS0+dGVzdF9hdWRp b19wZXJpb2RfY2hfMiA9IHJldDsKPiArCXByX2RlYnVnKCJ0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8y ID0gMHgleFxuIiwgcmV0KTsKPiArCj4gKwkvKiBURVNUX0FVRElPX1BFUklPRF9DSF8zIChCeXRl IDB4Mjc1KSAqLwo+ICsJcmV0ID0gZHBfbGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVE SU9fUEVSSU9EX0NIMyk7Cj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4gKwkJZ290byBleGl0Owo+ ICsKPiArCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfMyA9IHJldDsKPiArCXByX2RlYnVnKCJ0 ZXN0X2F1ZGlvX3BlcmlvZF9jaF8zID0gMHgleFxuIiwgcmV0KTsKPiArCj4gKwlyZXQgPSBkcF9s aW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g0KTsKPiArCWlmIChy ZXQgPT0gLUVJTlZBTCkKPiArCQlnb3RvIGV4aXQ7Cj4gKwo+ICsJcmVxLT50ZXN0X2F1ZGlvX3Bl cmlvZF9jaF80ID0gcmV0Owo+ICsJcHJfZGVidWcoInRlc3RfYXVkaW9fcGVyaW9kX2NoXzQgPSAw eCV4XG4iLCByZXQpOwo+ICsKPiArCXJldCA9IGRwX2xpbmtfZ2V0X3BlcmlvZChsaW5rLCBEUF9U RVNUX0FVRElPX1BFUklPRF9DSDUpOwo+ICsJaWYgKHJldCA9PSAtRUlOVkFMKQo+ICsJCWdvdG8g ZXhpdDsKPiArCj4gKwlyZXEtPnRlc3RfYXVkaW9fcGVyaW9kX2NoXzUgPSByZXQ7Cj4gKwlwcl9k ZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfNSA9IDB4JXhcbiIsIHJldCk7Cj4gKwo+ICsJcmV0 ID0gZHBfbGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NINik7Cj4g KwlpZiAocmV0ID09IC1FSU5WQUwpCj4gKwkJZ290byBleGl0Owo+ICsKPiArCXJlcS0+dGVzdF9h dWRpb19wZXJpb2RfY2hfNiA9IHJldDsKPiArCXByX2RlYnVnKCJ0ZXN0X2F1ZGlvX3BlcmlvZF9j aF82ID0gMHgleFxuIiwgcmV0KTsKPiArCj4gKwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGlu aywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g3KTsKPiArCWlmIChyZXQgPT0gLUVJTlZBTCkKPiAr CQlnb3RvIGV4aXQ7Cj4gKwo+ICsJcmVxLT50ZXN0X2F1ZGlvX3BlcmlvZF9jaF83ID0gcmV0Owo+ ICsJcHJfZGVidWcoInRlc3RfYXVkaW9fcGVyaW9kX2NoXzcgPSAweCV4XG4iLCByZXQpOwo+ICsK PiArCXJldCA9IGRwX2xpbmtfZ2V0X3BlcmlvZChsaW5rLCBEUF9URVNUX0FVRElPX1BFUklPRF9D SDgpOwo+ICsJaWYgKHJldCA9PSAtRUlOVkFMKQo+ICsJCWdvdG8gZXhpdDsKPiArCj4gKwlyZXEt PnRlc3RfYXVkaW9fcGVyaW9kX2NoXzggPSByZXQ7Cj4gKwlwcl9kZWJ1ZygidGVzdF9hdWRpb19w ZXJpb2RfY2hfOCA9IDB4JXhcbiIsIHJldCk7Cj4gK2V4aXQ6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfYXVkaW9fcGF0dGVybl90eXBlKHN0cnVj dCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJdTggYnA7 Cj4gKwl1OCBkYXRhOwo+ICsJaW50IHJsZW47Cj4gKwlpbnQgY29uc3QgcGFyYW1fbGVuID0gMHgx Owo+ICsJaW50IGNvbnN0IG1heF9hdWRpb19wYXR0ZXJuX3R5cGUgPSAweDE7Cj4gKwo+ICsJcmxl biA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LAo+ICsJCURQX1RFU1RfQVVE SU9fUEFUVEVSTl9UWVBFLCAmYnAsIHBhcmFtX2xlbik7Cj4gKwlpZiAocmxlbiA8IHBhcmFtX2xl bikgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgbGluayBhdWRpbyBtb2RlIGRhdGFcbiIp Owo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsJZGF0YSA9IGJw Owo+ICsKPiArCS8qIEF1ZGlvIFBhdHRlcm4gVHlwZSAtIEJpdHMgNzowICovCj4gKwlpZiAoKGlu dClkYXRhID4gbWF4X2F1ZGlvX3BhdHRlcm5fdHlwZSkgewo+ICsJCXByX2VycigiaW52YWxpZCBh dWRpbyBwYXR0ZXJuIHR5cGUgPSAweCV4XG4iLCBkYXRhKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVz dF9hdWRpb19wYXR0ZXJuX3R5cGUgPSBkYXRhOwo+ICsJcHJfZGVidWcoImF1ZGlvIHBhdHRlcm4g dHlwZSA9ICVzXG4iLAo+ICsJCQlkcF9saW5rX2dldF9hdWRpb190ZXN0X3BhdHRlcm4oZGF0YSkp Owo+ICtleGl0Ogo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9saW5r X3BhcnNlX2F1ZGlvX21vZGUoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPiArewo+ICsJ aW50IHJldCA9IDA7Cj4gKwl1OCBicDsKPiArCXU4IGRhdGE7Cj4gKwlpbnQgcmxlbjsKPiArCWlu dCBjb25zdCBwYXJhbV9sZW4gPSAweDE7Cj4gKwlpbnQgY29uc3QgbWF4X2F1ZGlvX3NhbXBsaW5n X3JhdGUgPSAweDY7Cj4gKwlpbnQgY29uc3QgbWF4X2F1ZGlvX2NoYW5uZWxfY291bnQgPSAweDg7 Cj4gKwlpbnQgc2FtcGxpbmdfcmF0ZSA9IDB4MDsKPiArCWludCBjaGFubmVsX2NvdW50ID0gMHgw Owo+ICsKPiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBf VEVTVF9BVURJT19NT0RFLAo+ICsJCQkmYnAsIHBhcmFtX2xlbik7Cj4gKwlpZiAocmxlbiA8IHBh cmFtX2xlbikgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgbGluayBhdWRpbyBtb2RlIGRh dGFcbiIpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsJZGF0 YSA9IGJwOwo+ICsKPiArCS8qIFNhbXBsaW5nIFJhdGUgLSBCaXRzIDM6MCAqLwo+ICsJc2FtcGxp bmdfcmF0ZSA9IGRhdGEgJiAweEY7Cj4gKwlpZiAoc2FtcGxpbmdfcmF0ZSA+IG1heF9hdWRpb19z YW1wbGluZ19yYXRlKSB7Cj4gKwkJcHJfZXJyKCJzYW1wbGluZyByYXRlICgweCV4KSBncmVhdGVy IHRoYW4gbWF4ICgweCV4KVxuIiwKPiArCQkJCXNhbXBsaW5nX3JhdGUsIG1heF9hdWRpb19zYW1w bGluZ19yYXRlKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiAr Cj4gKwkvKiBDaGFubmVsIENvdW50IC0gQml0cyA3OjQgKi8KPiArCWNoYW5uZWxfY291bnQgPSAo KGRhdGEgJiAweEYwKSA+PiA0KSArIDE7Cj4gKwlpZiAoY2hhbm5lbF9jb3VudCA+IG1heF9hdWRp b19jaGFubmVsX2NvdW50KSB7Cj4gKwkJcHJfZXJyKCJjaGFubmVsX2NvdW50ICgweCV4KSBncmVh dGVyIHRoYW4gbWF4ICgweCV4KVxuIiwKPiArCQkJCWNoYW5uZWxfY291bnQsIG1heF9hdWRpb19j aGFubmVsX2NvdW50KTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0K PiArCj4gKwlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVzdF9hdWRpb19zYW1wbGluZ19yYXRl ID0gc2FtcGxpbmdfcmF0ZTsKPiArCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlv X2NoYW5uZWxfY291bnQgPSBjaGFubmVsX2NvdW50Owo+ICsJcHJfZGVidWcoInNhbXBsaW5nX3Jh dGUgPSAlcywgY2hhbm5lbF9jb3VudCA9IDB4JXhcbiIsCj4gKwkJZHBfbGlua19nZXRfYXVkaW9f c2FtcGxlX3JhdGUoc2FtcGxpbmdfcmF0ZSksIGNoYW5uZWxfY291bnQpOwo+ICtleGl0Ogo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRwX3BhcnNlX2F1ZGlvX3BhdHRlcm5f cGFyYW1zKCkgLSBwYXJzZXMgYXVkaW8gcGF0dGVybiBwYXJhbWV0ZXJzIGZyb20gRFBDRAo+ICsg KiBAbGluazogRGlzcGxheSBQb3J0IERyaXZlciBkYXRhCj4gKyAqCj4gKyAqIFJldHVybnMgMCBp ZiBpdCBzdWNjZXNzZnVsbHkgcGFyc2VzIHRoZSBhdWRpbyBsaW5rIHBhdHRlcm4gcGFyYW1ldGVy cy4KPiArICovCj4gK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9hdWRpb19wYXR0ZXJuX3BhcmFt cyhzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiAr Cj4gKwlyZXQgPSBkcF9saW5rX3BhcnNlX2F1ZGlvX21vZGUobGluayk7Cj4gKwlpZiAocmV0KQo+ ICsJCWdvdG8gZXhpdDsKPiArCj4gKwlyZXQgPSBkcF9saW5rX3BhcnNlX2F1ZGlvX3BhdHRlcm5f dHlwZShsaW5rKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBleGl0Owo+ICsKPiArCXJldCA9IGRw X2xpbmtfcGFyc2VfYXVkaW9fY2hhbm5lbF9wZXJpb2QobGluayk7Cj4gKwo+ICtleGl0Ogo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRwX2xpbmtfaXNfdmlkZW9fcGF0dGVy bl92YWxpZCgpIC0gdmFsaWRhdGVzIHRoZSB2aWRlbyBwYXR0ZXJuCj4gKyAqIEBwYXR0ZXJuOiB2 aWRlbyBwYXR0ZXJuIHJlcXVlc3RlZCBieSB0aGUgc2luawo+ICsgKgo+ICsgKiBSZXR1cm5zIHRy dWUgaWYgdGhlIHJlcXVlc3RlZCB2aWRlbyBwYXR0ZXJuIGlzIHN1cHBvcnRlZC4KPiArICovCj4g K3N0YXRpYyBib29sIGRwX2xpbmtfaXNfdmlkZW9fcGF0dGVybl92YWxpZCh1MzIgcGF0dGVybikK PiArewo+ICsJc3dpdGNoIChwYXR0ZXJuKSB7Cj4gKwljYXNlIERQX05PX1RFU1RfUEFUVEVSTjoK PiArCWNhc2UgRFBfQ09MT1JfUkFNUDoKPiArCWNhc2UgRFBfQkxBQ0tfQU5EX1dISVRFX1ZFUlRJ Q0FMX0xJTkVTOgo+ICsJY2FzZSBEUF9DT0xPUl9TUVVBUkU6Cj4gKwkJcmV0dXJuIHRydWU7Cj4g KwlkZWZhdWx0Ogo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGNo YXIgKmRwX2xpbmtfdmlkZW9fcGF0dGVybl90b19zdHJpbmcodTMyIHRlc3RfdmlkZW9fcGF0dGVy bikKPiArewo+ICsJc3dpdGNoICh0ZXN0X3ZpZGVvX3BhdHRlcm4pIHsKPiArCWNhc2UgRFBfTk9f VEVTVF9QQVRURVJOOgo+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX05PX1RFU1RfUEFU VEVSTik7Cj4gKwljYXNlIERQX0NPTE9SX1JBTVA6Cj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9T VFIoRFBfQ09MT1JfUkFNUCk7Cj4gKwljYXNlIERQX0JMQUNLX0FORF9XSElURV9WRVJUSUNBTF9M SU5FUzoKPiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9CTEFDS19BTkRfV0hJVEVfVkVS VElDQUxfTElORVMpOwo+ICsJY2FzZSBEUF9DT0xPUl9TUVVBUkU6Cj4gKwkJcmV0dXJuIERQX0xJ TktfRU5VTV9TVFIoRFBfQ09MT1JfU1FVQVJFKTsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuICJ1 bmtub3duIjsKPiArCX0KPiArfQo+ICsKPiArLyoqCj4gKyAqIGRwX2xpbmtfaXNfZHluYW1pY19y YW5nZV92YWxpZCgpIC0gdmFsaWRhdGVzIHRoZSBkeW5hbWljIHJhbmdlCj4gKyAqIEBiaXRfZGVw dGg6IHRoZSBkeW5hbWljIHJhbmdlIHZhbHVlIHRvIGJlIGNoZWNrZWQKPiArICoKPiArICogUmV0 dXJucyB0cnVlIGlmIHRoZSBkeW5hbWljIHJhbmdlIHZhbHVlIGlzIHN1cHBvcnRlZC4KPiArICov Cj4gK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfZHluYW1pY19yYW5nZV92YWxpZCh1MzIgZHIpCj4g K3sKPiArCXN3aXRjaCAoZHIpIHsKPiArCWNhc2UgRFBfRFlOQU1JQ19SQU5HRV9SR0JfVkVTQToK PiArCWNhc2UgRFBfRFlOQU1JQ19SQU5HRV9SR0JfQ0VBOgo+ICsJCXJldHVybiB0cnVlOwo+ICsJ ZGVmYXVsdDoKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBjaGFy ICpkcF9saW5rX2R5bmFtaWNfcmFuZ2VfdG9fc3RyaW5nKHUzMiBkcikKPiArewo+ICsJc3dpdGNo IChkcikgewo+ICsJY2FzZSBEUF9EWU5BTUlDX1JBTkdFX1JHQl9WRVNBOgo+ICsJCXJldHVybiBE UF9MSU5LX0VOVU1fU1RSKERQX0RZTkFNSUNfUkFOR0VfUkdCX1ZFU0EpOwo+ICsJY2FzZSBEUF9E WU5BTUlDX1JBTkdFX1JHQl9DRUE6Cj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfRFlO QU1JQ19SQU5HRV9SR0JfQ0VBKTsKPiArCWNhc2UgRFBfRFlOQU1JQ19SQU5HRV9VTktOT1dOOgo+ ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gInVua25vd24iOwo+ICsJfQo+ICt9CgpObyBuZWVkIGZv ciB0aGlzLCBqdXN0IHByaW50IHRoZSB2YWx1ZSBpbiB0aGUgZGVidWcgc3RhdGVtZW50LgoKPiAr Cj4gKy8qKgo+ICsgKiBkcF9saW5rX2lzX2JpdF9kZXB0aF92YWxpZCgpIC0gdmFsaWRhdGVzIHRo ZSBiaXQgZGVwdGggcmVxdWVzdGVkCj4gKyAqIEBiaXRfZGVwdGg6IGJpdCBkZXB0aCByZXF1ZXN0 ZWQgYnkgdGhlIHNpbmsKPiArICoKPiArICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQg Yml0IGRlcHRoIGlzIHN1cHBvcnRlZC4KPiArICovCj4gK3N0YXRpYyBib29sIGRwX2xpbmtfaXNf Yml0X2RlcHRoX3ZhbGlkKHUzMiB0YmQpCj4gK3sKPiArCS8qIERQX1RFU1RfVklERU9fUEFUVEVS Tl9OT05FIGlzIHRyZWF0ZWQgYXMgaW52YWxpZCAqLwo+ICsJc3dpdGNoICh0YmQpIHsKPiArCWNh c2UgRFBfVEVTVF9CSVRfREVQVEhfNjoKPiArCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfODoKPiAr CWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfMTA6Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwlkZWZhdWx0 Ogo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGNoYXIgKmRwX2xp bmtfYml0X2RlcHRoX3RvX3N0cmluZyh1MzIgdGJkKQo+ICt7Cj4gKwlzd2l0Y2ggKHRiZCkgewo+ ICsJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF82Ogo+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RS KERQX1RFU1RfQklUX0RFUFRIXzYpOwo+ICsJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF84Ogo+ICsJ CXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX1RFU1RfQklUX0RFUFRIXzgpOwo+ICsJY2FzZSBE UF9URVNUX0JJVF9ERVBUSF8xMDoKPiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9URVNU X0JJVF9ERVBUSF8xMCk7Cj4gKwljYXNlIERQX1RFU1RfQklUX0RFUFRIX1VOS05PV046Cj4gKwlk ZWZhdWx0Ogo+ICsJCXJldHVybiAidW5rbm93biI7Cj4gKwl9Cj4gK30KClNhbWUgdGhpbmcgaGVy ZSwganVzdCByZW1vdmUgdGhpcyBhbmQgcHJpbnQgdGhlIGVudW0gdmFsdWUuCgo+ICsKPiArc3Rh dGljIGludCBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMxKHN0cnVjdCBkcF9saW5rX3ByaXZh dGUgKmxpbmssCj4gKwkJCQkJaW50IGNvbnN0IGFkZHIsIGludCBjb25zdCBsZW4sIHUzMiAqdmFs KQoKcGFzcy1ieS12YWx1ZSBkb2Vzbid0IG5lZWQgY29uc3Qgc2FtZSBjb21tZW50IGFwcGxpZXMg ZWxzZXdoZXJlLCBwbGVhc2Ugc3dlZXAKdGhlIGNvZGUgZm9yIG90aGVyIGluc3RhbmNlcy4KCj4g K3sKPiArCXU4IGJwWzJdOwo+ICsJaW50IHJsZW47Cj4gKwo+ICsJaWYgKGxlbiA8IDIpCgpJZiB5 b3UncmUgZ29pbmcgdG8gY2hlY2sgbGVuIDwgMiwgeW91IHNob3VsZCBwcm9iYWJseSBhbHNvIGNo ZWNrIGxlbiA+IDIgdG8KcHJldmVudCBvdmVyZmxvdy4gQXQgdGhpcyBwb2ludCwgbGVuIGNhbiBy ZWFsbHkgb25seSBiZSAyLCBzbyB5b3UgY2FuIGp1c3QgcmVtb3ZlCml0IGVudGlyZWx5IGFzIGFu IGFyZ3VtZW50LgoKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkvKiBSZWFkIHRoZSByZXF1 ZXN0ZWQgdmlkZW8gbGluayBwYXR0ZXJuIChCeXRlIDB4MjIxKS4gKi8KPiArCXJsZW4gPSBkcm1f ZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgYWRkciwgYnAsIGxlbik7Cj4gKwlpZiAo cmxlbiA8IGxlbikgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgMHgleFxuIiwgYWRkcik7 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJKnZhbCA9IGJwWzFdIHwgKGJwWzBd IDw8IDgpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2xpbmtf cGFyc2VfdGltaW5nX3BhcmFtczIoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaywKPiArCQkJ CQlpbnQgY29uc3QgYWRkciwgaW50IGNvbnN0IGxlbiwKPiArCQkJCQl1MzIgKnZhbDEsIHUzMiAq dmFsMikKPiArewo+ICsJdTggYnBbMl07Cj4gKwlpbnQgcmxlbjsKPiArCj4gKwlpZiAobGVuIDwg MikKClNhbWUgY29tbWVudCBoZXJlIHJ0IGJvdW5kcyBjaGVja2luZwoKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCj4gKwkvKiBSZWFkIHRoZSByZXF1ZXN0ZWQgdmlkZW8gbGluayBwYXR0ZXJuIChC eXRlIDB4MjIxKS4gKi8KPiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJt X2F1eCwgYWRkciwgYnAsIGxlbik7Cj4gKwlpZiAocmxlbiA8IGxlbikgewo+ICsJCXByX2Vycigi ZmFpbGVkIHRvIHJlYWQgMHgleFxuIiwgYWRkcik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9 Cj4gKwo+ICsJKnZhbDEgPSAoYnBbMF0gJiBCSVQoNykpID4+IDc7Cj4gKwkqdmFsMiA9IGJwWzFd IHwgKChicFswXSAmIDB4N0YpIDw8IDgpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczMoc3RydWN0IGRwX2xpbmtfcHJp dmF0ZSAqbGluaywKPiArCQkJCQlpbnQgY29uc3QgYWRkciwgdTMyICp2YWwpCj4gK3sKPiArCXU4 IGJwOwo+ICsJdTMyIGxlbiA9IDE7Cj4gKwlpbnQgcmxlbjsKPiArCj4gKwlybGVuID0gZHJtX2Rw X2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIGFkZHIsICZicCwgbGVuKTsKPiArCWlmIChy bGVuIDwgMSkgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgMHgleFxuIiwgYWRkcik7Cj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwkqdmFsID0gYnA7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KClB1dHRpbmcgYXNpZGUgdGhlIHVuaW5mb3JtYXRpdmUgbmFtZXMsIHRoZXNlIGRwX2xp bmtfcGFyc2VfdGltaW5nX3BhcmFtcyoKY2FuIGJlIGNvbWJpbmVkIGludG8gb25lIHByZXR0eSBl YXNpbHksIGxpa2U6CgpzdGF0aWMgaW50IGRwX2xpbmtfcmVhZF91MzIoc3RydWN0IGRwX2xpbmtf cHJpdmF0ZSAqbGluaywgdW5zaWduZWQgaW50IG9mZnNldCwKCQkgICAgICAgICAgICB1MzIgKnZh bCwgaW50IG51bV9ieXRlcykKewogICAgICAgIGludCBpOwogICAgICAgIHNzaXplX3QgcmV0Owog ICAgICAgIF9fYmUzMiB0bXBfdmFsOwoKICAgICAgICBmb3IgKGkgPSAwOyBudW1fYnl0ZXMgPiAw OyBpICs9IHNpemVvZigqdmFsKSkgewogICAgICAgICAgICAgICAgaW50IHRvX3JlYWQgPSBtaW4o c2l6ZW9mKHRtcF92YWwpLCBudW1fYnl0ZXMpOwoKICAgICAgICAgICAgICAgIHRtcF92YWwgPSAw OwogICAgICAgICAgICAgICAgcmV0ID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9h dXgsIG9mZnNldCArIGksICZ0bXBfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0b19yZWFkKTsKICAgICAgICAgICAgICAgIGlmIChybGVuIDwgMCkgewogICAgICAg ICAgICAgICAgICAgICAgICAvKiBwcmludCBlcnJvciBtZXNzYWdlIGhlcmUgKi8KICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHJsZW47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICB2YWxbaV0gPSBiZTMyX3RvX2NwdSh0bXBfdmFsKTsKICAgICAgICAgICAgICAgIG51bV9i eXRlcyAtPSB0b19yZWFkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKfQoKSWYgeW91IG5l ZWQgdG8gc3RyaXAgb2ZmIHRoZSBmaXJzdCBiaXQsIGRvIGl0IGZyb20gdGhlIGNhbGxlci4KCkkg ZGlkbid0IGNvbXBpbGUgb3IgdGVzdCB0aGlzLCBzbyBpdCBtaWdodCBuZWVkIHR3ZWFraW5nLCBi dXQgeW91IGdldCB0aGUgaWRlYS4KCgo+ICsKPiArLyoqCj4gKyAqIGRwX3BhcnNlX3ZpZGVvX3Bh dHRlcm5fcGFyYW1zKCkgLSBwYXJzZXMgdmlkZW8gcGF0dGVybiBwYXJhbWV0ZXJzIGZyb20gRFBD RAo+ICsgKiBAbGluazogRGlzcGxheSBQb3J0IERyaXZlciBkYXRhCj4gKyAqCj4gKyAqIFJldHVy bnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgcGFyc2VzIHRoZSB2aWRlbyBsaW5rIHBhdHRlcm4gYW5k IHRoZSBsaW5rCj4gKyAqIGJpdCBkZXB0aCByZXF1ZXN0ZWQgYnkgdGhlIHNpbmsgYW5kLCBhbmQg aWYgdGhlIHZhbHVlcyBwYXJzZWQgYXJlIHZhbGlkLgo+ICsgKi8KPiArc3RhdGljIGludCBkcF9s aW5rX3BhcnNlX3ZpZGVvX3BhdHRlcm5fcGFyYW1zKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxp bmspCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJaW50IHJsZW47Cgpzc2l6ZV90Cgo+ICsJdTgg YnA7Cj4gKwl1OCBkYXRhOwoKV2h5IGRvIHlvdSBuZWVkIGRhdGEgYW5kIGJwPyBJIHRoaW5rIHlv dSBvbmx5IG5lZWQgb25lLgoKPiArCXUzMiBkeW5fcmFuZ2U7Cj4gKwlpbnQgY29uc3QgcGFyYW1f bGVuID0gMHgxOwo+ICsKPiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJt X2F1eCwgRFBfVEVTVF9QQVRURVJOLAo+ICsJCQkmYnAsIHBhcmFtX2xlbik7Cj4gKwlpZiAocmxl biA8IHBhcmFtX2xlbikgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgbGluayB2aWRlbyBw YXR0ZXJuXG4iKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiAr CWRhdGEgPSBicDsKPiArCj4gKwlpZiAoIWRwX2xpbmtfaXNfdmlkZW9fcGF0dGVybl92YWxpZChk YXRhKSkgewo+ICsJCXByX2VycigiaW52YWxpZCBsaW5rIHZpZGVvIHBhdHRlcm4gPSAweCV4XG4i LCBkYXRhKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4g KwlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92aWRlb19wYXR0ZXJuID0gZGF0YTsKPiAr CXByX2RlYnVnKCJsaW5rIHZpZGVvIHBhdHRlcm4gPSAweCV4ICglcylcbiIsCj4gKwkJbGluay0+ ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfdmlkZW9fcGF0dGVybiwKPiArCQlkcF9saW5rX3ZpZGVv X3BhdHRlcm5fdG9fc3RyaW5nKAo+ICsJCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92 aWRlb19wYXR0ZXJuKSk7Cj4gKwo+ICsJLyogUmVhZCB0aGUgcmVxdWVzdGVkIGNvbG9yIGJpdCBk ZXB0aCBhbmQgZHluYW1pYyByYW5nZSAoQnl0ZSAweDIzMikgKi8KPiArCXJsZW4gPSBkcm1fZHBf ZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVTVF9NSVNDMCwKPiArCQkJJmJwLCBw YXJhbV9sZW4pOwo+ICsJaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKPiArCQlwcl9lcnIoImZhaWxl ZCB0byByZWFkIGxpbmsgYml0IGRlcHRoXG4iKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdv dG8gZXhpdDsKPiArCX0KPiArCWRhdGEgPSBicDsKPiArCj4gKwkvKiBEeW5hbWljIFJhbmdlICov Cj4gKwlkeW5fcmFuZ2UgPSAoZGF0YSAmIERQX1RFU1RfRFlOQU1JQ19SQU5HRV9DRUEpID4+IDM7 CgpUaGlzIG1hc2sgaXNvbGF0ZXMgb25lIGJpdCBmcm9tIGRhdGEKCj4gKwlpZiAoIWRwX2xpbmtf aXNfZHluYW1pY19yYW5nZV92YWxpZChkeW5fcmFuZ2UpKSB7CgphbmQgdGhpcyBmdW5jdGlvbiBy ZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IGlzIDAgfHwgMQoKU28gcmVtb3ZlIHRoaXMgY29kZSwg YW5kIHJlbW92ZSBkcF9saW5rX2lzX2R5bmFtaWNfcmFuZ2VfdmFsaWQuCgo+ICsJCXByX2Vycigi aW52YWxpZCBsaW5rIGR5bmFtaWMgcmFuZ2UgPSAweCV4IiwgZHluX3JhbmdlKTsKPiArCQlyZXQg PSAtRUlOVkFMOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCWxpbmstPmRwX2xpbmsudGVzdF92 aWRlby50ZXN0X2R5bl9yYW5nZSA9IGR5bl9yYW5nZTsKCkFuZCBub3cgeW91IGNhbiBqdXN0IGFz c2lnbiB0aGlzIGRpcmVjdGx5LiBZb3Ugc2hvdWxkIHByb2JhYmx5IHN0YXkgY29uc2lzdGVudAph bmQgc3RvcmUgdGhlIHZhbHVlIHNoaWZ0ZWQgbGlrZSB0aGUgb3RoZXIgdmFsdWVzIHlvdSdyZSBz dG9yaW5nLgoKPiArCXByX2RlYnVnKCJsaW5rIGR5bmFtaWMgcmFuZ2UgPSAweCV4ICglcylcbiIs Cj4gKwkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfZHluX3JhbmdlLAo+ICsJCWRwX2xp bmtfZHluYW1pY19yYW5nZV90b19zdHJpbmcoCj4gKwkJCWxpbmstPmRwX2xpbmsudGVzdF92aWRl by50ZXN0X2R5bl9yYW5nZSkpOwo+ICsKPiArCS8qIENvbG9yIGJpdCBkZXB0aCAqLwo+ICsJZGF0 YSAmPSBEUF9URVNUX0JJVF9ERVBUSF9NQVNLOwo+ICsJaWYgKCFkcF9saW5rX2lzX2JpdF9kZXB0 aF92YWxpZChkYXRhKSkgewo+ICsJCXByX2VycigiaW52YWxpZCBsaW5rIGJpdCBkZXB0aCA9IDB4 JXhcbiIsIGRhdGEpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ ICsKPiArCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2JpdF9kZXB0aCA9IGRhdGE7Cj4g Kwlwcl9kZWJ1ZygibGluayBiaXQgZGVwdGggPSAweCV4ICglcylcbiIsCj4gKwkJbGluay0+ZHBf bGluay50ZXN0X3ZpZGVvLnRlc3RfYml0X2RlcHRoLAo+ICsJCWRwX2xpbmtfYml0X2RlcHRoX3Rv X3N0cmluZygKPiArCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9iaXRfZGVwdGgpKTsK PiArCj4gKwkvKiByZXNvbHV0aW9uIHRpbWluZyBwYXJhbXMgKi8KPiArCXJldCA9IGRwX2xpbmtf cGFyc2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVTVF9IX1RPVEFMX0hJLCAyLAo+ICsJCQkm bGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfaF90b3RhbCk7Cj4gKwlpZiAocmV0KSB7Cj4g KwkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgdGVzdF9oX3RvdGFsIChEUF9URVNUX0hfVE9UQUxf SEkpXG4iKTsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwlwcl9kZWJ1ZygiVEVTVF9IX1RPVEFM ID0gJWRcbiIsIGxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hfdG90YWwpOwo+ICsKPiAr CXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVTVF9WX1RPVEFM X0hJLCAyLAo+ICsJCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rfdl90b3RhbCk7Cj4g KwlpZiAocmV0KSB7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgdGVzdF92X3RvdGFsIChE UF9URVNUX1ZfVE9UQUxfSEkpXG4iKTsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwlwcl9kZWJ1 ZygiVEVTVF9WX1RPVEFMID0gJWRcbiIsIGxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3Zf dG90YWwpOwo+ICsKPiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEobGluaywg RFBfVEVTVF9IX1NUQVJUX0hJLCAyLAo+ICsJCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRl c3RfaF9zdGFydCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ug dGVzdF9oX3N0YXJ0IChEUF9URVNUX0hfU1RBUlRfSEkpXG4iKTsKPiArCQlnb3RvIGV4aXQ7Cj4g Kwl9Cj4gKwlwcl9kZWJ1ZygiVEVTVF9IX1NUQVJUID0gJWRcbiIsIGxpbmstPmRwX2xpbmsudGVz dF92aWRlby50ZXN0X2hfc3RhcnQpOwo+ICsKPiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5n X3BhcmFtczEobGluaywgRFBfVEVTVF9WX1NUQVJUX0hJLCAyLAo+ICsJCQkmbGluay0+ZHBfbGlu ay50ZXN0X3ZpZGVvLnRlc3Rfdl9zdGFydCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJfZXJyKCJm YWlsZWQgdG8gcGFyc2UgdGVzdF92X3N0YXJ0IChEUF9URVNUX1ZfU1RBUlRfSEkpXG4iKTsKPiAr CQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwlwcl9kZWJ1ZygiVEVTVF9WX1NUQVJUID0gJWRcbiIsIGxp bmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3Zfc3RhcnQpOwo+ICsKPiArCXJldCA9IGRwX2xp bmtfcGFyc2VfdGltaW5nX3BhcmFtczIobGluaywgRFBfVEVTVF9IU1lOQ19ISSwgMiwKPiArCQkJ JmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hzeW5jX3BvbCwKPiArCQkJJmxpbmstPmRw X2xpbmsudGVzdF92aWRlby50ZXN0X2hzeW5jX3dpZHRoKTsKPiArCWlmIChyZXQpIHsKPiArCQlw cl9lcnIoImZhaWxlZCB0byBwYXJzZSAoRFBfVEVTVF9IU1lOQ19ISSlcbiIpOwo+ICsJCWdvdG8g ZXhpdDsKPiArCX0KPiArCXByX2RlYnVnKCJURVNUX0hTWU5DX1BPTCA9ICVkXG4iLAo+ICsJCWxp bmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hzeW5jX3BvbCk7Cj4gKwlwcl9kZWJ1ZygiVEVT VF9IU1lOQ19XSURUSCA9ICVkXG4iLAo+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0 X2hzeW5jX3dpZHRoKTsKPiArCj4gKwlyZXQgPSBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMy KGxpbmssIERQX1RFU1RfVlNZTkNfSEksIDIsCj4gKwkJCSZsaW5rLT5kcF9saW5rLnRlc3Rfdmlk ZW8udGVzdF92c3luY19wb2wsCj4gKwkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92 c3luY193aWR0aCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ug KERQX1RFU1RfVlNZTkNfSEkpXG4iKTsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwlwcl9kZWJ1 ZygiVEVTVF9WU1lOQ19QT0wgPSAlZFxuIiwKPiArCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8u dGVzdF92c3luY19wb2wpOwo+ICsJcHJfZGVidWcoIlRFU1RfVlNZTkNfV0lEVEggPSAlZFxuIiwK PiArCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92c3luY193aWR0aCk7Cj4gKwo+ICsJ cmV0ID0gZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMShsaW5rLCBEUF9URVNUX0hfV0lEVEhf SEksIDIsCj4gKwkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3dpZHRoKTsKPiAr CWlmIChyZXQpIHsKPiArCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSB0ZXN0X2hfd2lkdGggKERQ X1RFU1RfSF9XSURUSF9ISSlcbiIpOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCXByX2RlYnVn KCJURVNUX0hfV0lEVEggPSAlZFxuIiwgbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfaF93 aWR0aCk7Cj4gKwo+ICsJcmV0ID0gZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMShsaW5rLCBE UF9URVNUX1ZfSEVJR0hUX0hJLCAyLAo+ICsJCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRl c3Rfdl9oZWlnaHQpOwo+ICsJaWYgKHJldCkgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIHBhcnNl IHRlc3Rfdl9oZWlnaHQgKERQX1RFU1RfVl9IRUlHSFRfSEkpXG4iKTsKPiArCQlnb3RvIGV4aXQ7 Cj4gKwl9Cj4gKwlwcl9kZWJ1ZygiVEVTVF9WX0hFSUdIVCA9ICVkXG4iLAo+ICsJCWxpbmstPmRw X2xpbmsudGVzdF92aWRlby50ZXN0X3ZfaGVpZ2h0KTsKPiArCj4gKwlyZXQgPSBkcF9saW5rX3Bh cnNlX3RpbWluZ19wYXJhbXMzKGxpbmssIERQX1RFU1RfTUlTQzEsCj4gKwkJJmxpbmstPmRwX2xp bmsudGVzdF92aWRlby50ZXN0X3JyX2QpOwo+ICsJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRl c3RfcnJfZCAmPSBEUF9URVNUX1JFRlJFU0hfREVOT01JTkFUT1I7Cj4gKwlpZiAocmV0KSB7Cj4g KwkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgdGVzdF9ycl9kIChEUF9URVNUX01JU0MxKVxuIik7 Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsJcHJfZGVidWcoIlRFU1RfUkVGUkVTSF9ERU5PTUlO QVRPUiA9ICVkXG4iLAo+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3JyX2QpOwo+ ICsKPiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczMobGluaywgRFBfVEVTVF9S RUZSRVNIX1JBVEVfTlVNRVJBVE9SLAo+ICsJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVz dF9ycl9uKTsKPiArCWlmIChyZXQpIHsKPiArCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSB0ZXN0 X3JyX24gKERQX1RFU1RfUkVGUkVTSF9SQVRFX05VTUVSQVRPUilcbiIpOwo+ICsJCWdvdG8gZXhp dDsKPiArCX0KPiArCXByX2RlYnVnKCJURVNUX1JFRlJFU0hfTlVNRVJBVE9SID0gJWRcbiIsCj4g KwkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfcnJfbik7CgpJbnN0ZWFkIG9mIHNwcmlu a2xpbmcgYWxsIG9mIHRoZXNlIHByX2RlYnVnIG1lc3NhZ2VzIGFyb3VuZCwganVzdCBoYXZlIG9u ZSBiaWcKZGVidWcgYXQgdGhlIGVuZCB0byBwcmludCBldmVyeXRoaW5nLgoKPiArZXhpdDoKClRo aXMgbGFiZWwgaXNuJ3QgdXNlZnVsLCBqdXN0IHJldHVybiBkaXJlY3RseSBhYm92ZQoKPiArCXJl dHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcF9saW5rX3BhcnNlX2xpbmtfdHJhaW5p bmdfcGFyYW1zKCkgLSBwYXJzZXMgbGluayB0cmFpbmluZyBwYXJhbWV0ZXJzIGZyb20KPiArICog RFBDRAo+ICsgKiBAbGluazogRGlzcGxheSBQb3J0IERyaXZlciBkYXRhCj4gKyAqCj4gKyAqIFJl dHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgcGFyc2VzIHRoZSBsaW5rIHJhdGUgKEJ5dGUgMHgy MTkpIGFuZCBsYW5lCj4gKyAqIGNvdW50IChCeXRlIDB4MjIwKSwgYW5kIGlmIHRoZXNlIHZhbHVl cyBwYXJzZSBhcmUgdmFsaWQuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfbGlu a190cmFpbmluZ19wYXJhbXMoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPiArewo+ICsJ dTggYnA7Cj4gKwl1OCBkYXRhOwoKWW91IGRvbid0IG5lZWQgYm90aCBicCBhbmQgZGF0YQoKPiAr CWludCByZXQgPSAwOwo+ICsJaW50IHJsZW47Cgpzc2l6ZV90Cgo+ICsJaW50IGNvbnN0IHBhcmFt X2xlbiA9IDB4MTsKCkp1c3QgdXNlIDEgZGlyZWN0bHkgYmVsb3cuCgo+ICsKPiArCXJsZW4gPSBk cm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVTVF9MSU5LX1JBVEUsCj4g KwkJCSZicCwgcGFyYW1fbGVuKTsKPiArCWlmIChybGVuIDwgcGFyYW1fbGVuKSB7Cj4gKwkJcHJf ZXJyKCJmYWlsZWQgdG8gcmVhZCBsaW5rIHJhdGVcbiIpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4g KwkJZ290byBleGl0Owo+ICsJfQo+ICsJZGF0YSA9IGJwOwo+ICsKPiArCWlmICghaXNfbGlua19y YXRlX3ZhbGlkKGRhdGEpKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGxpbmsgcmF0ZSA9IDB4JXhc biIsIGRhdGEpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsK PiArCWxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGUgPSBkYXRhOwo+ICsJcHJfZGVidWcoImxp bmsgcmF0ZSA9IDB4JXhcbiIsIGxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGUpOwo+ICsKPiAr CXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVTVF9MQU5F X0NPVU5ULAo+ICsJCQkmYnAsIHBhcmFtX2xlbik7Cj4gKwlpZiAocmxlbiA8IHBhcmFtX2xlbikg ewo+ICsJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgbGFuZSBjb3VudFxuIik7Cj4gKwkJcmV0ID0g LUVJTlZBTDsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwlkYXRhID0gYnA7Cj4gKwlkYXRhICY9 IDB4MUY7CgpEUF9NQVhfTEFORV9DT1VOVF9NQVNLCgo+ICsKPiArCWlmICghaXNfbGFuZV9jb3Vu dF92YWxpZChkYXRhKSkgewoKWW91IG1pZ2h0IGFsc28gd2FudCB0byBkYXRhIGFnYWluc3QgbWF4 IGxhbmVzCgo+ICsJCXByX2VycigiaW52YWxpZCBsYW5lIGNvdW50ID0gMHgleFxuIiwgZGF0YSk7 Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwo+ICsJbGluay0+ cmVxdWVzdC50ZXN0X2xhbmVfY291bnQgPSBkYXRhOwo+ICsJcHJfZGVidWcoImxhbmUgY291bnQg PSAweCV4XG4iLCBsaW5rLT5yZXF1ZXN0LnRlc3RfbGFuZV9jb3VudCk7Cj4gK2V4aXQ6Cj4gKwly ZXR1cm4gcmV0OwoKcmV0dXJuIGRpcmVjdGx5IGFib3ZlIGFuZCByZW1vdmUgZXhpdCArIHJldDsK Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfcGh5X3Rlc3RfcGF0dGVybl9zdXBw b3J0ZWQodTMyIHBoeV90ZXN0X3BhdHRlcm5fc2VsKQo+ICt7Cj4gKwlzd2l0Y2ggKHBoeV90ZXN0 X3BhdHRlcm5fc2VsKSB7Cj4gKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fTk9ORToKPiArCWNh c2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9EMTBfMl9OT19TQ1JBTUJMSU5HOgo+ICsJY2FzZSBEUF9U RVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJfTUVBU1VSRU1FTlRfQ05UOgo+ICsJY2FzZSBEUF9U RVNUX1BIWV9QQVRURVJOX1BSQlM3Ogo+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOXzgwX0JJ VF9DVVNUT01fUEFUVEVSTjoKPiArCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9IQlIyX0NUU19F WUVfUEFUVEVSTjoKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIGZh bHNlOwo+ICsJfQo+ICt9Cj4gKwo+ICsvKioKPiArICogZHBfcGFyc2VfcGh5X3Rlc3RfcGFyYW1z KCkgLSBwYXJzZXMgdGhlIHBoeSBsaW5rIHBhcmFtZXRlcnMKPiArICogQGxpbms6IERpc3BsYXkg UG9ydCBEcml2ZXIgZGF0YQo+ICsgKgo+ICsgKiBQYXJzZXMgdGhlIERQQ0QgKEJ5dGUgMHgyNDgp IGZvciB0aGUgRFAgUEhZIGxpbmsgcGF0dGVybiB0aGF0IGlzIGJlaW5nCj4gKyAqIHJlcXVlc3Rl ZC4KPiArICovCj4gK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9waHlfdGVzdF9wYXJhbXMoc3Ry dWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPiArewo+ICsJdTggYnA7Cj4gKwl1OCBkYXRhOwoK T25seSBuZWVkIG9uZSBvZiB0aGVzZS4KCj4gKwlpbnQgcmxlbjsKCnNzaXplX3QKCj4gKwlpbnQg Y29uc3QgcGFyYW1fbGVuID0gMHgxOwoKSnVzdCB1c2UgMSBiZWxvdwoKPiArCWludCByZXQgPSAw Owo+ICsKPiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBf VEVTVF9QSFlfUEFUVEVSTiwKPiArCQkJJmJwLCBwYXJhbV9sZW4pOwo+ICsJaWYgKHJsZW4gPCBw YXJhbV9sZW4pIHsKCkZXSVcsIGRybV9kcF9kcGNkX3JlYWQgd2lsbCByZXR1cm4gZWl0aGVyIGxl biBvciBhbiAtZXJybm8uIFBhcnRpYWwgcmVhZHMgcmV0dXJuCi1FUFJPVE8uIFNvIGluc3RlYWQg b2YgY2hlY2tpbmcgdGhhdCBybGVuIDwgcGFyYW1fbGVuLCB5b3UgY2FuIGp1c3QgZG8gcmxlbiA8 IDAuCgpQbGVhc2UgYWxzbyBjaGFuZ2UgYWxsIG9mIHRoZSAxLWJ5dGUgcmVhZHMgb3ZlciB0byB1 c2luZyBkcm1fZHBfZHBjZF9yZWFkYigpLgoKCj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBw aHkgbGluayBwYXR0ZXJuXG4iKTsKCnByaW50IGFuZCByZXR1cm4gcmxlbi4KCj4gKwkJcmV0ID0g LUVJTlZBTDsKPiArCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwlkYXRhID0gYnA7Cj4gKwo+ICsJ bGluay0+ZHBfbGluay5waHlfcGFyYW1zLnBoeV90ZXN0X3BhdHRlcm5fc2VsID0gZGF0YTsKPiAr Cj4gKwlwcl9kZWJ1ZygicGh5X3Rlc3RfcGF0dGVybl9zZWwgPSAlc1xuIiwKPiArCQkJZHBfbGlu a19nZXRfcGh5X3Rlc3RfcGF0dGVybihkYXRhKSk7Cj4gKwo+ICsJaWYgKCFkcF9saW5rX2lzX3Bo eV90ZXN0X3BhdHRlcm5fc3VwcG9ydGVkKGRhdGEpKQoKSnVzdCBlbWJlZCB0aGF0IGNvZGUgaGVy ZS4KCj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArZW5kOgoKUmVtb3ZlIGxhYmVsL3JldCBhbmQgcmV0 dXJuIGRpcmVjdGx5Cgo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGNoYXIgKmRw X2xpbmtfZ2V0X3Rlc3RfbmFtZSh1MzIgdGVzdF9yZXF1ZXN0ZWQpCj4gK3sKPiArCXN3aXRjaCAo dGVzdF9yZXF1ZXN0ZWQpIHsKPiArCWNhc2UgRFBfVEVTVF9MSU5LX1RSQUlOSU5HOgo+ICsJCXJl dHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX1RFU1RfTElOS19UUkFJTklORyk7Cj4gKwljYXNlIERQ X1RFU1RfTElOS19WSURFT19QQVRURVJOOgo+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQ X1RFU1RfTElOS19WSURFT19QQVRURVJOKTsKPiArCWNhc2UgRFBfVEVTVF9MSU5LX0VESURfUkVB RDoKPiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9URVNUX0xJTktfRURJRF9SRUFEKTsK PiArCWNhc2UgRFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk46Cj4gKwkJcmV0dXJuIERQX0xJ TktfRU5VTV9TVFIoRFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk4pOwo+ICsJY2FzZSBEUF9U RVNUX0xJTktfQVVESU9fUEFUVEVSTjoKPiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9U RVNUX0xJTktfQVVESU9fUEFUVEVSTik7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAidW5rbm93 biI7Cj4gKwl9Cj4gK30KClJlbW92ZSB0aGlzIGFuZCBqdXN0IHByaW50IHRoZSBlbnVtLgoKPiAr Cj4gKy8qKgo+ICsgKiBkcF9saW5rX2lzX3ZpZGVvX2F1ZGlvX3Rlc3RfcmVxdWVzdGVkKCkgLSBj aGVja3MgZm9yIGF1ZGlvL3ZpZGVvIGxpbmsgcmVxdWVzdAo+ICsgKiBAbGluazogbGluayByZXF1 ZXN0ZWQgYnkgdGhlIHNpbmsKPiArICoKPiArICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0 ZWQgbGluayBpcyBhIHBlcm1pdHRlZCBhdWRpby92aWRlbyBsaW5rLgo+ICsgKi8KPiArc3RhdGlj IGJvb2wgZHBfbGlua19pc192aWRlb19hdWRpb190ZXN0X3JlcXVlc3RlZCh1MzIgbGluaykKPiAr ewoKU2hvdWxkIHlvdSBiZSBtYXNraW5nIGxpbmsgdG8gaXNvbGF0ZSB0aGVzZSBiaXRzPwoKPiAr CXJldHVybiAobGluayA9PSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTikgfHwKPiArCQkobGlu ayA9PSAoRFBfVEVTVF9MSU5LX0FVRElPX1BBVFRFUk4gfAo+ICsJCURQX1RFU1RfTElOS19WSURF T19QQVRURVJOKSkgfHwKPiArCQkobGluayA9PSBEUF9URVNUX0xJTktfQVVESU9fUEFUVEVSTikg fHwKPiArCQkobGluayA9PSAoRFBfVEVTVF9MSU5LX0FVRElPX1BBVFRFUk4gfAo+ICsJCURQX1RF U1RfTElOS19BVURJT19ESVNBQkxFRF9WSURFTykpOwoKQW5kIG9uY2UgeW91IG1hc2sgdGhlIHZh bHVlLCBqdXN0IGNoZWNrIGlmIGFueSBvZiB0aGUgYml0cyBhcmUgc2V0IGluc3RlYWQgb2YKZW51 bWVyYXRpbmcgYWxsIHBvc3NpYmxlIHZhbHVlcy4KCgo+ICt9Cj4gKwo+ICsvKioKPiArICogZHBf bGlua19zdXBwb3J0ZWQoKSAtIGNoZWNrcyBpZiBsaW5rIHJlcXVlc3RlZCBieSBzaW5rIGlzIHN1 cHBvcnRlZAo+ICsgKiBAdGVzdF9yZXF1ZXN0ZWQ6IGxpbmsgcmVxdWVzdGVkIGJ5IHRoZSBzaW5r Cj4gKyAqCj4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGxpbmsgaXMgc3VwcG9y dGVkLgo+ICsgKi8KPiArc3RhdGljIGJvb2wgZHBfbGlua19pc190ZXN0X3N1cHBvcnRlZCh1MzIg dGVzdF9yZXF1ZXN0ZWQpCj4gK3sKPiArCXJldHVybiAodGVzdF9yZXF1ZXN0ZWQgPT0gRFBfVEVT VF9MSU5LX1RSQUlOSU5HKSB8fAo+ICsJCSh0ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNUX0xJTktf RURJRF9SRUFEKSB8fAo+ICsJCSh0ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNUX0xJTktfUEhZX1RF U1RfUEFUVEVSTikgfHwKPiArCQlkcF9saW5rX2lzX3ZpZGVvX2F1ZGlvX3Rlc3RfcmVxdWVzdGVk KHRlc3RfcmVxdWVzdGVkKTsKCkkgdGhpbmsgdGhpcyBhbGwgZXF1YXRlcyB0bzoKCglyZXR1cm4g dGVzdF9yZXF1ZXN0ZWQgIT0gRFBfVEVTVF9MSU5LX0ZBVVhfUEFUVEVSTjsKCmFuZCBpbiB0aGF0 IGNhc2UsIHlvdSBjYW4ganVzdCByZW1vdmUgdGhpcyBmdW5jdGlvbiBhbmQgaW5zZXJ0IHRoYXQg Y29uZGl0aW9uIGluCnRoZSBpZiBzdGF0ZW1lbnQgYmVsb3cuCgo+ICt9Cj4gKwo+ICtzdGF0aWMg Ym9vbCBkcF9saW5rX2lzX3Rlc3RfZWRpZF9yZWFkKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxp bmspCj4gK3sKPiArCXJldHVybiAobGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCA9PSBEUF9U RVNUX0xJTktfRURJRF9SRUFEKTsKPiArfQoKVGhpcyBkb2Vzbid0IHdhcnJhbnQgaXRzIG93biBm dW5jdGlvbi4gQWxzbywgc2hvdWxkIHRoaXMgYmUgJiBpbnN0ZWFkIG9mID09PwoKPiArCj4gKy8q Kgo+ICsgKiBkcF9zaW5rX3BhcnNlX3Rlc3RfcmVxdWVzdCgpIC0gcGFyc2VzIGxpbmsgcmVxdWVz dCBwYXJhbWV0ZXJzIGZyb20gc2luawo+ICsgKiBAbGluazogRGlzcGxheSBQb3J0IERyaXZlciBk YXRhCj4gKyAqCj4gKyAqIFBhcnNlcyB0aGUgRFBDRCB0byBjaGVjayBpZiBhbiBhdXRvbWF0ZWQg bGluayBpcyByZXF1ZXN0ZWQgKEJ5dGUgMHgyMDEpLAo+ICsgKiBhbmQgd2hhdCB0eXBlIG9mIGxp bmsgYXV0b21hdGlvbiBpcyBiZWluZyByZXF1ZXN0ZWQgKEJ5dGUgMHgyMTgpLgo+ICsgKi8KPiAr c3RhdGljIGludCBkcF9saW5rX3BhcnNlX3JlcXVlc3Qoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAq bGluaykKPiArewo+ICsJaW50IHJldCA9IDA7Cj4gKwl1OCBicDsKPiArCXU4IGRhdGE7CgpPbmx5 IG5lZWQgMSBvZiBicC9kYXRhCgo+ICsJaW50IHJsZW47Cgpzc2l6ZV90Cgo+ICsJdTMyIGNvbnN0 IHBhcmFtX2xlbiA9IDB4MTsKCk5vdCBuZWVkZWQsIHVzZSBkcm1fZHBfZHBjZF9yZWFkYigpCgo+ ICsKPiArCS8qKgo+ICsJICogUmVhZCB0aGUgZGV2aWNlIHNlcnZpY2UgSVJRIHZlY3RvciAoQnl0 ZSAweDIwMSkgdG8gZGV0ZXJtaW5lCj4gKwkgKiB3aGV0aGVyIGFuIGF1dG9tYXRlZCBsaW5rIGhh cyBiZWVuIHJlcXVlc3RlZCBieSB0aGUgc2luay4KPiArCSAqLwo+ICsJcmxlbiA9IGRybV9kcF9k cGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LAo+ICsJCURQX0RFVklDRV9TRVJWSUNFX0lSUV9W RUNUT1IsICZicCwgcGFyYW1fbGVuKTsKPiArCWlmIChybGVuIDwgcGFyYW1fbGVuKSB7Cj4gKwkJ cHJfZXJyKCJhdXggcmVhZCBmYWlsZWRcbiIpOwoKUHJpbnQgZXJyb3IuIFRoaXMgZ29lcyBmb3Ig b3RoZXIgZmFpbHVyZSBtZXNzYWdlcyBpbiB0aGlzIGZpbGUuCgo+ICsJCXJldCA9IC1FSU5WQUw7 Cj4gKwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJZGF0YSA9IGJwOwo+ICsKPiArCXByX2RlYnVn KCJkZXZpY2Ugc2VydmljZSBpcnEgdmVjdG9yID0gMHgleFxuIiwgZGF0YSk7Cj4gKwo+ICsJaWYg KCEoZGF0YSAmIERQX0FVVE9NQVRFRF9URVNUX1JFUVVFU1QpKSB7Cj4gKwkJcHJfZGVidWcoIm5v IHRlc3QgcmVxdWVzdGVkXG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwkvKioKPiAr CSAqIFJlYWQgdGhlIGxpbmsgcmVxdWVzdCBieXRlIChCeXRlIDB4MjE4KSB0byBkZXRlcm1pbmUg d2hhdCB0eXBlCj4gKwkgKiBvZiBhdXRvbWF0ZWQgbGluayBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkg dGhlIHNpbmsuCj4gKwkgKi8KPiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ ZHJtX2F1eCwgRFBfVEVTVF9SRVFVRVNULAo+ICsJCQkmYnAsIHBhcmFtX2xlbik7Cj4gKwlpZiAo cmxlbiA8IHBhcmFtX2xlbikgewo+ICsJCXByX2VycigiYXV4IHJlYWQgZmFpbGVkXG4iKTsKPiAr CQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsKPiArCWRhdGEgPSBicDsK PiArCj4gKwlpZiAoIWRwX2xpbmtfaXNfdGVzdF9zdXBwb3J0ZWQoZGF0YSkpIHsKPiArCQlwcl9k ZWJ1ZygibGluayAweCV4IG5vdCBzdXBwb3J0ZWRcbiIsIGRhdGEpOwo+ICsJCWdvdG8gZW5kOwo+ ICsJfQo+ICsKPiArCXByX2RlYnVnKCIlcyAoMHgleCkgcmVxdWVzdGVkXG4iLCBkcF9saW5rX2dl dF90ZXN0X25hbWUoZGF0YSksIGRhdGEpOwo+ICsJbGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3Rl ZCA9IGRhdGE7CgpJZiB0ZXN0X3JlcXVlc3RlZCBpcyBvbmx5IHVzZWQgaW4gdGhlIHNjb3BlIG9m IHRoaXMgZnVuY3Rpb24sIGp1c3QgdXNlIGEgbG9jYWwKYW5kIHBhc3MgaXQgYXJvdW5kLiBJZiB0 ZXN0X3JlcXVlc3RlZCBpcyB1c2VkIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMKZnVuY3Rpb24s IHlvdSBuZWVkIGxvY2tpbmcuCgo+ICsKPiArCWlmIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVz dGVkID09IERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKSB7Cj4gKwkJcmV0ID0gZHBfbGlu a19wYXJzZV9waHlfdGVzdF9wYXJhbXMobGluayk7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBl bmQ7Cj4gKwkJcmV0ID0gZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcyhsaW5rKTsK CkNoZWNrIHRoZSByZXR1cm4gaGVyZSBvciBpdCBjb3VsZCBnZXQgc3RvbXBlZAoKPiArCX0KPiAr Cj4gKwlpZiAobGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNUX0xJTktfVFJB SU5JTkcpCj4gKwkJcmV0ID0gZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcyhsaW5r KTsKCkNoZWNrIHRoZSByZXR1cm4gaGVyZSBvciBpdCBjb3VsZCBnZXQgc3RvbXBlZAoKPiArCj4g KwlpZiAoZHBfbGlua19pc192aWRlb19hdWRpb190ZXN0X3JlcXVlc3RlZCgKPiArCQkJbGluay0+ cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCkpIHsKClNob3VsZCBmaXQgb24gMSBsaW5lLCBJIHRoaW5r Cgo+ICsJCXJldCA9IGRwX2xpbmtfcGFyc2VfdmlkZW9fcGF0dGVybl9wYXJhbXMobGluayk7Cj4g KwkJaWYgKHJldCkKPiArCQkJZ290byBlbmQ7Cj4gKwo+ICsJCXJldCA9IGRwX2xpbmtfcGFyc2Vf YXVkaW9fcGF0dGVybl9wYXJhbXMobGluayk7CgpDaGVjayB0aGUgcmV0dXJuIGhlcmUgb3IgaXQg Y291bGQgZ2V0IHN0b21wZWQKCj4gKwl9Cj4gK2VuZDoKPiArCS8qKgoKLyoKCj4gKwkgKiBTZW5k IGEgRFBfVEVTVF9BQ0sgaWYgYWxsIGxpbmsgcGFyYW1ldGVycyBhcmUgdmFsaWQsIG90aGVyd2lz ZSBzZW5kCj4gKwkgKiBhIERQX1RFU1RfTkFLLgo+ICsJICovCj4gKwlpZiAocmV0KSB7Cj4gKwkJ bGluay0+ZHBfbGluay50ZXN0X3Jlc3BvbnNlID0gRFBfVEVTVF9OQUs7Cj4gKwl9IGVsc2Ugewo+ ICsJCWlmICghZHBfbGlua19pc190ZXN0X2VkaWRfcmVhZChsaW5rKSkKPiArCQkJbGluay0+ZHBf bGluay50ZXN0X3Jlc3BvbnNlID0gRFBfVEVTVF9BQ0s7Cj4gKwkJZWxzZQo+ICsJCQlsaW5rLT5k cF9saW5rLnRlc3RfcmVzcG9uc2UgPQo+ICsJCQkJRFBfVEVTVF9FRElEX0NIRUNLU1VNX1dSSVRF Owo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcF9saW5r X3BhcnNlX3NpbmtfY291bnQoKSAtIHBhcnNlcyB0aGUgc2luayBjb3VudAo+ICsgKgo+ICsgKiBQ YXJzZXMgdGhlIERQQ0QgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW4gdXBkYXRlIHRvIHRoZSBzaW5r IGNvdW50Cj4gKyAqIChCeXRlIDB4MjAwKSwgYW5kIHdoZXRoZXIgYWxsIHRoZSBzaW5rIGRldmlj ZXMgY29ubmVjdGVkIGhhdmUgQ29udGVudAo+ICsgKiBQcm90ZWN0aW9uIGVuYWJsZWQuCj4gKyAq Lwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2Vfc2lua19jb3VudChzdHJ1Y3QgZHBfbGluayAq ZHBfbGluaykKPiArewo+ICsJaW50IHJsZW47Cj4gKwlpbnQgY29uc3QgcGFyYW1fbGVuID0gMHgx OwoKZHJtX2RwX2RwY2RfcmVhZGIKCj4gKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rID0g Y29udGFpbmVyX29mKGRwX2xpbmssCj4gKwkJCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRwX2xp bmspOwo+ICsKPiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwg RFBfU0lOS19DT1VOVCwKPiArCQkJJmxpbmstPmRwX2xpbmsuc2lua19jb3VudC5jb3VudCwgcGFy YW1fbGVuKTsKPiArCWlmIChybGVuIDwgcGFyYW1fbGVuKSB7Cj4gKwkJcHJfZXJyKCJmYWlsZWQg dG8gcmVhZCBzaW5rIGNvdW50XG4iKTsKCnByaW50IHJldAoKPiArCQlyZXR1cm4gLUVJTlZBTDsK CnJldHVybiByZXQKCj4gKwl9Cj4gKwo+ICsJbGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNwX3Jl YWR5ID0KPiArCQlsaW5rLT5kcF9saW5rLnNpbmtfY291bnQuY291bnQgJiBEUF9TSU5LX0NQX1JF QURZOwoKY3BfcmVhZHkgaXMgb25seSB1c2VkIGluIHRoaXMgZnVuY3Rpb24sIHBsZWFzZSBkb24n dCBzdG9yZSBzdHVmZiBsaWtlIHRoaXMKYmV5b25kIGl0cyBzY29wZS4KCj4gKwkvKiBCSVQgNywg QklUIDU6MCAqLwoKRG9uJ3QgbmVlZCB0aGlzIGNvbW1lbnQKCj4gKwlsaW5rLT5kcF9saW5rLnNp bmtfY291bnQuY291bnQgPQo+ICsJCURQX0dFVF9TSU5LX0NPVU5UKGxpbmstPmRwX2xpbmsuc2lu a19jb3VudC5jb3VudCk7Cj4gKwo+ICsJcHJfZGVidWcoInNpbmtfY291bnQgPSAweCV4LCBjcF9y ZWFkeSA9IDB4JXhcbiIsCj4gKwkJbGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNvdW50LAo+ICsJ CWxpbmstPmRwX2xpbmsuc2lua19jb3VudC5jcF9yZWFkeSk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgZHBfbGlua19wYXJzZV9zaW5rX3N0YXR1c19maWVsZChzdHJ1Y3Qg ZHBfbGlua19wcml2YXRlICpsaW5rKQo+ICt7Cj4gKwlpbnQgbGVuID0gMDsKPiArCj4gKwlsaW5r LT5wcmV2X3NpbmtfY291bnQgPSBsaW5rLT5kcF9saW5rLnNpbmtfY291bnQuY291bnQ7Cj4gKwlk cF9saW5rX3BhcnNlX3NpbmtfY291bnQoJmxpbmstPmRwX2xpbmspOwo+ICsKPiArCWxlbiA9IGRy bV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMobGluay0+YXV4LT5kcm1fYXV4LAo+ICsJCWxpbmst Pmxpbmtfc3RhdHVzKTsKPiArCWlmIChsZW4gPCBEUF9MSU5LX1NUQVRVU19TSVpFKQo+ICsJCXBy X2VycigiRFAgbGluayBzdGF0dXMgcmVhZCBmYWlsZWRcbiIpOwo+ICsJZHBfbGlua19wYXJzZV9y ZXF1ZXN0KGxpbmspOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBkcF9saW5rX2lzX2xpbmtfdHJh aW5pbmdfcmVxdWVzdGVkKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCj4gK3sKPiArCXJl dHVybiAobGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNUX0xJTktfVFJBSU5J TkcpOwo+ICt9CgpObyBuZWVkIGZvciBkZWRpY2F0ZWQgZnVuY3Rpb24KCj4gKwo+ICsvKioKPiAr ICogZHBfbGlua19wcm9jZXNzX2xpbmtfdHJhaW5pbmdfcmVxdWVzdCgpIC0gcHJvY2Vzc2VzIG5l dyB0cmFpbmluZyByZXF1ZXN0cwo+ICsgKiBAbGluazogRGlzcGxheSBQb3J0IGxpbmsgZGF0YQo+ ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIG5ldyBsaW5rIHRyYWluaW5nIHJl cXVlc3RzIHRoYXQgYXJlIGluaXRpYXRlZCBieQo+ICsgKiB0aGUgc2luay4gSW4gcGFydGljdWxh ciwgaXQgd2lsbCB1cGRhdGUgdGhlIHJlcXVlc3RlZCBsYW5lIGNvdW50IGFuZCBsaW5rCj4gKyAq IGxpbmsgcmF0ZSwgYW5kIHRoZW4gdHJpZ2dlciB0aGUgbGluayByZXRyYWluaW5nIHByb2NlZHVy ZS4KPiArICoKPiArICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgYSBsaW5rIHRyYWlu aW5nIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkLAo+ICsgKiBvdGhlcndpc2UgaXQgd2lsbCBy ZXR1cm4gLUVJTlZBTC4KPiArICovCj4gK3N0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX2xpbmtf dHJhaW5pbmdfcmVxdWVzdChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQo+ICt7Cj4gKwlp ZiAoIWRwX2xpbmtfaXNfbGlua190cmFpbmluZ19yZXF1ZXN0ZWQobGluaykpCj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwo+ICsJcHJfZGVidWcoIiVzIGxpbmsgcmF0ZSA9IDB4JXgsIGxhbmUgY291 bnQgPSAweCV4XG4iLAo+ICsJCQlkcF9saW5rX2dldF90ZXN0X25hbWUoRFBfVEVTVF9MSU5LX1RS QUlOSU5HKSwKPiArCQkJbGluay0+cmVxdWVzdC50ZXN0X2xpbmtfcmF0ZSwKPiArCQkJbGluay0+ cmVxdWVzdC50ZXN0X2xhbmVfY291bnQpOwo+ICsKPiArCWxpbmstPmRwX2xpbmsubGlua19wYXJh bXMubGFuZV9jb3VudCA9IGxpbmstPnJlcXVlc3QudGVzdF9sYW5lX2NvdW50Owo+ICsJbGluay0+ ZHBfbGluay5saW5rX3BhcmFtcy5id19jb2RlID0gbGluay0+cmVxdWVzdC50ZXN0X2xpbmtfcmF0 ZTsKClNob3VsZCBiZSB1c2luZyBkcCBoZWxwZXIgc3RydWN0cyBmb3IgdGhpcyBzdHVmZgoKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfbGlua19zZW5kX3Rlc3Rf cmVzcG9uc2Uoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmspCj4gK3sKPiArCXN0cnVjdCBkcF9saW5r X3ByaXZhdGUgKmxpbmsgPSBOVUxMOwo+ICsJdTMyIGNvbnN0IHJlc3BvbnNlX2xlbiA9IDB4MTsK PiArCj4gKwlpZiAoIWRwX2xpbmspIHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlsaW5rID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0 cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRwX2xpbmspOwo+ICsKPiArCWRybV9kcF9kcGNkX3dyaXRl KGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVTVF9SRVNQT05TRSwKPiArCQkJJmRwX2xpbmstPnRl c3RfcmVzcG9uc2UsIHJlc3BvbnNlX2xlbik7CgpJIHN0cm9uZ2x5IHN1c3BlY3QgeW91IHNob3Vs ZCBoYXZlIGxvY2tpbmcgcHJvdGVjdGluZyB0ZXN0X3Jlc3BvbnNlLgoKPiArfQo+ICsKPiArc3Rh dGljIGludCBkcF9saW5rX3BzbV9jb25maWcoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssCj4gKwkJ CSAgICAgIHN0cnVjdCBkcm1fZHBfbGluayAqbGlua19pbmZvLCBib29sIGVuYWJsZSkKClRoaXMg aXMgYW5vdGhlciByYWN5IGZ1bmN0aW9uIHdoZXJlIHlvdSBjb3VsZCBiZSBzaW11bHRhbmVvdXNs eSBwb3dlcmluZyB1cCBhbmQKcG93ZXJpbmcgZG93biB0aGUgbGluay4gU28geW91IG1pZ2h0IHdh bnQgc29tZSBsb2NraW5nLgoKPiArewo+ICsJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluayA9 IE5VTEw7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlpZiAoIWRwX2xpbmspIHsKPiArCQlwcl9l cnIoImludmFsaWQgcGFyYW1zXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4g KwlsaW5rID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRw X2xpbmspOwo+ICsKPiArCWlmIChlbmFibGUpCj4gKwkJcmV0ID0gZHJtX2RwX2xpbmtfcG93ZXJf ZG93bihsaW5rLT5hdXgtPmRybV9hdXgsIGxpbmtfaW5mbyk7Cj4gKwllbHNlCj4gKwkJcmV0ID0g ZHJtX2RwX2xpbmtfcG93ZXJfdXAobGluay0+YXV4LT5kcm1fYXV4LCBsaW5rX2luZm8pOwo+ICsK PiArCWlmIChyZXQpCj4gKwkJcHJfZXJyKCJGYWlsZWQgdG8gJXMgbG93IHBvd2VyIG1vZGVcbiIs Cj4gKwkJCShlbmFibGUgPyAiZW50ZXIiIDogImV4aXQiKSk7Cgp1bm5lZWRlZCAoKS4gWW91IGNv dWxkIHByb2JhYmx5IHJld29yZCB0byBmaXQgb24gb25lIGxpbmUgdG9vCgo+ICsJZWxzZQo+ICsJ CWRwX2xpbmstPnBzbV9lbmFibGVkID0gZW5hYmxlOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGRwX2xpbmtfc2VuZF9lZGlkX2NoZWNrc3VtKHN0cnVjdCBkcF9s aW5rICpkcF9saW5rLCB1OCBjaGVja3N1bSkKPiArewo+ICsJc3RydWN0IGRwX2xpbmtfcHJpdmF0 ZSAqbGluayA9IE5VTEw7Cj4gKwl1MzIgY29uc3QgcmVzcG9uc2VfbGVuID0gMHgxOwoKZHJtX2Rw X2RwY2RfcmVhZGIuIEknbGwgc3RvcCBjb21tZW50aW5nIG9uIHRoZXNlLCBqdXN0IHBsZWFzZSBn byB0aHJvdWdoIGFuZApjb252ZXJ0IGFsbCAxLWJ5dGUgcmVhZHMvd3JpdGVzCgo+ICsKPiArCWlm ICghZHBfbGluaykgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJu Owo+ICsJfQo+ICsKPiArCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xp bmtfcHJpdmF0ZSwgZHBfbGluayk7Cj4gKwo+ICsJZHJtX2RwX2RwY2Rfd3JpdGUobGluay0+YXV4 LT5kcm1fYXV4LCBEUF9URVNUX0VESURfQ0hFQ0tTVU0sCj4gKwkJCSZjaGVja3N1bSwgcmVzcG9u c2VfbGVuKTsKCkNoZWNrIGFuZCByZXR1cm4gdGhlIHJlc3VsdAoKPiArfQo+ICsKPiArc3RhdGlj IGludCBkcF9saW5rX3BhcnNlX3Z4X3B4KHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCj4g K3sKPiArCXU4IGJwOwo+ICsJdTggZGF0YTsKCk9ubHkgbmVlZCBvbmUgb2YgdGhlc2UKCj4gKwlp bnQgY29uc3QgcGFyYW1fbGVuID0gMHgxOwoKZHJtX2RwX2RwY2RfcmVhZGIKCj4gKwlpbnQgcmV0 ID0gMDsKPiArCXUzMiB2MCwgcDAsIHYxLCBwMSwgdjIsIHAyLCB2MywgcDM7Cj4gKwlpbnQgcmxl bjsKCnNzaXplX3QKCj4gKwo+ICsJcHJfZGVidWcoIlxuIik7CgpyZW1vdmUKCj4gKwo+ICsJcmxl biA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCBEUF9BREpVU1RfUkVRVUVT VF9MQU5FMF8xLAo+ICsJCQkmYnAsIHBhcmFtX2xlbik7Cj4gKwlpZiAocmxlbiA8IHBhcmFtX2xl bikgewo+ICsJCXByX2VycigiZmFpbGVkIHJlYWRpbmcgbGFuZXMgMC8xXG4iKTsKCnByaW50IGVy cm9yCgo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJZGF0 YSA9IGJwOwo+ICsKPiArCXByX2RlYnVnKCJsYW5lcyAwLzEgKEJ5dGUgMHgyMDYpOiAweCV4XG4i LCBkYXRhKTsKPiArCj4gKwl2MCA9IGRhdGEgJiAweDM7Cj4gKwlkYXRhID0gZGF0YSA+PiAyOwo+ ICsJcDAgPSBkYXRhICYgMHgzOwo+ICsJZGF0YSA9IGRhdGEgPj4gMjsKPiArCj4gKwl2MSA9IGRh dGEgJiAweDM7Cj4gKwlkYXRhID0gZGF0YSA+PiAyOwo+ICsJcDEgPSBkYXRhICYgMHgzOwo+ICsJ ZGF0YSA9IGRhdGEgPj4gMjsKPiArCj4gKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5h dXgtPmRybV9hdXgsIERQX0FESlVTVF9SRVFVRVNUX0xBTkUyXzMsCj4gKwkJCSZicCwgcGFyYW1f bGVuKTsKPiArCWlmIChybGVuIDwgcGFyYW1fbGVuKSB7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgcmVh ZGluZyBsYW5lcyAyLzNcbiIpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBlbmQ7Cj4g Kwl9Cj4gKwo+ICsJZGF0YSA9IGJwOwo+ICsKPiArCXByX2RlYnVnKCJsYW5lcyAyLzMgKEJ5dGUg MHgyMDcpOiAweCV4XG4iLCBkYXRhKTsKPiArCj4gKwl2MiA9IGRhdGEgJiAweDM7Cj4gKwlkYXRh ID0gZGF0YSA+PiAyOwo+ICsJcDIgPSBkYXRhICYgMHgzOwo+ICsJZGF0YSA9IGRhdGEgPj4gMjsK PiArCj4gKwl2MyA9IGRhdGEgJiAweDM7Cj4gKwlkYXRhID0gZGF0YSA+PiAyOwo+ICsJcDMgPSBk YXRhICYgMHgzOwo+ICsJZGF0YSA9IGRhdGEgPj4gMjsKCkkgdGhpbmsgeW91IGNhbiB1c2UgZHJt X2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKCkgZm9yIGFsbCBvZiB0aGlzLgoKPiArCj4g Kwlwcl9kZWJ1Zygidng6IDA9JWQsIDE9JWQsIDI9JWQsIDM9JWRcbiIsIHYwLCB2MSwgdjIsIHYz KTsKPiArCXByX2RlYnVnKCJweDogMD0lZCwgMT0lZCwgMj0lZCwgMz0lZFxuIiwgcDAsIHAxLCBw MiwgcDMpOwo+ICsKPiArCS8qKgo+ICsJICogVXBkYXRlIHRoZSB2b2x0YWdlIGFuZCBwcmUtZW1w aGFzaXMgbGV2ZWxzIGFzIHBlciBEUENEIHJlcXVlc3QKPiArCSAqIHZlY3Rvci4KPiArCSAqLwo+ ICsJcHJfZGVidWcoIkN1cnJlbnQ6IHZfbGV2ZWwgPSAweCV4LCBwX2xldmVsID0gMHgleFxuIiwK PiArCQkJbGluay0+ZHBfbGluay5waHlfcGFyYW1zLnZfbGV2ZWwsCj4gKwkJCWxpbmstPmRwX2xp bmsucGh5X3BhcmFtcy5wX2xldmVsKTsKPiArCXByX2RlYnVnKCJSZXF1ZXN0ZWQ6IHZfbGV2ZWwg PSAweCV4LCBwX2xldmVsID0gMHgleFxuIiwgdjAsIHAwKTsKPiArCWxpbmstPmRwX2xpbmsucGh5 X3BhcmFtcy52X2xldmVsID0gdjA7Cj4gKwlsaW5rLT5kcF9saW5rLnBoeV9wYXJhbXMucF9sZXZl bCA9IHAwOwo+ICsKPiArCXByX2RlYnVnKCJTdWNjZXNzXG4iKTsKClJlbW92ZQoKPiArZW5kOgoK cmV0dXJuIGRpcmVjdGx5IGV2ZXJ5d2hlcmUgYW5kIHJlbW92ZSBlbmQgJiByZXQKCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogZHBfbGlua19wcm9jZXNzX3BoeV90ZXN0X3Bh dHRlcm5fcmVxdWVzdCgpIC0gcHJvY2VzcyBuZXcgcGh5IGxpbmsgcmVxdWVzdHMKPiArICogQGxp bms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHdp bGwgaGFuZGxlIG5ldyBwaHkgbGluayBwYXR0ZXJuIHJlcXVlc3RzIHRoYXQgYXJlIGluaXRpYXRl ZAo+ICsgKiBieSB0aGUgc2luay4gVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgYSBwaHkg bGluayBwYXR0ZXJuIGhhcyBiZWVuCj4gKyAqIHByb2Nlc3NlZCwgb3RoZXJ3aXNlIGl0IHdpbGwg cmV0dXJuIC1FSU5WQUwuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfcHJvY2Vzc19waHlf dGVzdF9wYXR0ZXJuX3JlcXVlc3QoCj4gKwkJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykK PiArewo+ICsJdTMyIHRlc3RfbGlua19yYXRlID0gMCwgdGVzdF9sYW5lX2NvdW50ID0gMDsKPiAr Cj4gKwlpZiAoIShsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkICYgRFBfVEVTVF9MSU5LX1BI WV9URVNUX1BBVFRFUk4pKSB7CgpJcyB0ZXN0X3JlcXVlc3RlZCBhbHdheXMgZXhwZWN0ZWQgdG8g aGF2ZSB0aGlzIHZhbHVlIHBvcHVsYXRlZCB3aGVuCmRwX2xpbmtfcHJvY2Vzc19yZXF1ZXN0KCk/ Cgo+ICsJCXByX2RlYnVnKCJubyBwaHkgdGVzdFxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwl9Cj4gKwo+ICsJdGVzdF9saW5rX3JhdGUgPSBsaW5rLT5yZXF1ZXN0LnRlc3RfbGlua19yYXRl Owo+ICsJdGVzdF9sYW5lX2NvdW50ID0gbGluay0+cmVxdWVzdC50ZXN0X2xhbmVfY291bnQ7CgpK dXN0IHVzZSB0aGVzZSB2YWx1ZXMgZGlyZWN0bHkgaW5zdGVhZCBvZiBhZGRpbmcgbW9yZSBsb2Nh bHMuCgo+ICsKPiArCWlmICghaXNfbGlua19yYXRlX3ZhbGlkKHRlc3RfbGlua19yYXRlKSB8fAo+ ICsJCSFpc19sYW5lX2NvdW50X3ZhbGlkKHRlc3RfbGFuZV9jb3VudCkpIHsKPiArCQlwcl9lcnIo IkludmFsaWQgcGFyYW1zOiBsaW5rIHJhdGUgPSAweCV4LCBsYW5lIGNvdW50ID0gMHgleFxuIiwK PiArCQkJCXRlc3RfbGlua19yYXRlLCB0ZXN0X2xhbmVfY291bnQpOwo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsJfQo+ICsKPiArCXByX2RlYnVnKCJzdGFydFxuIik7CgpSZW1vdmUKCj4gKwo+ICsJ cHJfaW5mbygiQ3VycmVudDogYndfY29kZSA9IDB4JXgsIGxhbmUgY291bnQgPSAweCV4XG4iLAo+ ICsJCQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLmJ3X2NvZGUsCj4gKwkJCWxpbmstPmRwX2xp bmsubGlua19wYXJhbXMubGFuZV9jb3VudCk7Cj4gKwo+ICsJcHJfaW5mbygiUmVxdWVzdGVkOiBi d19jb2RlID0gMHgleCwgbGFuZSBjb3VudCA9IDB4JXhcbiIsCj4gKwkJCXRlc3RfbGlua19yYXRl LCB0ZXN0X2xhbmVfY291bnQpOwoKVGhlc2Ugc2hvdWxkIGJlIGRlYnVnIGxldmVsIHByaW50cwoK PiArCj4gKwlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLmxhbmVfY291bnQgPSBsaW5rLT5yZXF1 ZXN0LnRlc3RfbGFuZV9jb3VudDsKPiArCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMuYndfY29k ZSA9IGxpbmstPnJlcXVlc3QudGVzdF9saW5rX3JhdGU7Cj4gKwo+ICsJZHBfbGlua19wYXJzZV92 eF9weChsaW5rKTsKCkNoZWNrIHJldHVybiB2YWx1ZSBhbmQgcHJvcGFnYXRlIGl0LgoKPiArCj4g Kwlwcl9kZWJ1ZygiZW5kXG4iKTsKClJlbW92ZQoKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIHU4IGdldF9saW5rX3N0YXR1cyhjb25zdCB1OCBsaW5rX3N0YXR1c1tEUF9MSU5L X1NUQVRVU19TSVpFXSwgaW50IHIpCj4gK3sKPiArCXJldHVybiBsaW5rX3N0YXR1c1tyIC0gRFBf TEFORTBfMV9TVEFUVVNdOwoKSSBkb24ndCB0aGluayB5b3UncmUgcmVhbGx5IHN1cHBvc2VkIHRv IHJlYWNoIGludG8gdGhlIGxpbmtfc3RhdHVzIGxpa2UgdGhpcy4KSG93IGFib3V0IGFkZGluZyBh IG5ldyBoZWxwZXIgdG8gY2hlY2sgZm9yIERQX0xJTktfU1RBVFVTX1VQREFURUQgYW5kIG9uZSBm b3IKRFBfRE9XTlNUUkVBTV9QT1JUX1NUQVRVU19DSEFOR0VEPwoKPiArfQo+ICsKPiArLyoqCj4g KyAqIGRwX2xpbmtfcHJvY2Vzc19saW5rX3N0YXR1c191cGRhdGUoKSAtIHByb2Nlc3NlcyBsaW5r IHN0YXR1cyB1cGRhdGVzCj4gKyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgbGluayBtb2R1bGUgZGF0 YQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgZm9yIGNoYW5nZXMgaW4gdGhl IGxpbmsgc3RhdHVzLCBlLmcuIGNsb2NrCj4gKyAqIHJlY292ZXJ5IGRvbmUgb24gYWxsIGxhbmVz LCBhbmQgdHJpZ2dlciBsaW5rIHRyYWluaW5nIGlmIHRoZXJlIGlzIGEKPiArICogZmFpbHVyZS9l cnJvciBvbiB0aGUgbGluay4KPiArICoKPiArICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAg aWYgdGhlIGEgbGluayBzdGF0dXMgdXBkYXRlIGhhcyBiZWVuIHByb2Nlc3NlZCwKPiArICogb3Ro ZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGRwX2xp bmtfcHJvY2Vzc19saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGlu aykKPiArewo+ICsJaWYgKCEoZ2V0X2xpbmtfc3RhdHVzKGxpbmstPmxpbmtfc3RhdHVzLCBEUF9M QU5FX0FMSUdOX1NUQVRVU19VUERBVEVEKSAmCj4gKwkJRFBfTElOS19TVEFUVVNfVVBEQVRFRCkg fHwgLyogbGluayBzdGF0dXMgdXBkYXRlZCAqLwo+ICsJCShkcm1fZHBfY2xvY2tfcmVjb3Zlcnlf b2sobGluay0+bGlua19zdGF0dXMsCj4gKwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubGFu ZV9jb3VudCkgJiYKPiArCSAgICAgZHJtX2RwX2NoYW5uZWxfZXFfb2sobGluay0+bGlua19zdGF0 dXMsCj4gKwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubGFuZV9jb3VudCkpKQoKQ2FuIHlv dSBwbGVhc2UgZml4IHRoZSBhbGlnbm1lbnQgaGVyZSwgaXQncyB0b3VnaCB0byByZWFkLgoKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlwcl9kZWJ1ZygiY2hhbm5lbF9lcV9kb25lID0gJWQs IGNsb2NrX3JlY292ZXJ5X2RvbmUgPSAlZFxuIiwKPiArCQkJZHJtX2RwX2Nsb2NrX3JlY292ZXJ5 X29rKGxpbmstPmxpbmtfc3RhdHVzLAo+ICsJCQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLmxh bmVfY291bnQpLAo+ICsJCQlkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGluay0+bGlua19zdGF0 dXMsCj4gKwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubGFuZV9jb3VudCkpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBkcF9saW5rX2lzX2RzX3BvcnRfc3Rh dHVzX2NoYW5nZWQoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPiArewo+ICsJaWYgKGdl dF9saW5rX3N0YXR1cyhsaW5rLT5saW5rX3N0YXR1cywgRFBfTEFORV9BTElHTl9TVEFUVVNfVVBE QVRFRCkgJgo+ICsJCURQX0RPV05TVFJFQU1fUE9SVF9TVEFUVVNfQ0hBTkdFRCkgLyogcG9ydCBz dGF0dXMgY2hhbmdlZCAqLwo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCWlmIChsaW5rLT5wcmV2 X3NpbmtfY291bnQgIT0gbGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNvdW50KQoKSXQgc2VlbXMg bGlrZSB0aGlzIGlzIHJ1bm5pbmcgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgZnJvbSB3aGVyZSBwcmV2 X3NpbmtfY291bnQgaXMKc2V0LCBwb3RlbnRpYWwgcmFjZSBoZXJlPwoKPiArCQlyZXR1cm4gdHJ1 ZTsKPiArCj4gKwlyZXR1cm4gZmFsc2U7CgoJcmV0dXJuIGxpbmstPnByZXZfc2lua19jb3VudCAh PSBsaW5rLT5kcF9saW5rLnNpbmtfY291bnQuY291bnQ7Cgo+ICt9Cj4gKwo+ICsvKioKPiArICog ZHBfbGlua19wcm9jZXNzX2Rvd25zdHJlYW1fcG9ydF9zdGF0dXNfY2hhbmdlKCkgLSBwcm9jZXNz IHBvcnQgc3RhdHVzIGNoYW5nZXMKPiArICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0 YQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIGRvd25zdHJlYW0gcG9ydCB1 cGRhdGVzIHRoYXQgYXJlIGluaXRpYXRlZCBieQo+ICsgKiB0aGUgc2luay4gSWYgdGhlIGRvd25z dHJlYW0gcG9ydCBzdGF0dXMgaGFzIGNoYW5nZWQsIHRoZSBFRElEIGlzIHJlYWQgdmlhCj4gKyAq IEFVWC4KPiArICoKPiArICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgYSBkb3duc3Ry ZWFtIHBvcnQgdXBkYXRlIGhhcyBiZWVuCj4gKyAqIHByb2Nlc3NlZCwgb3RoZXJ3aXNlIGl0IHdp bGwgcmV0dXJuIC1FSU5WQUwuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfcHJvY2Vzc19k c19wb3J0X3N0YXR1c19jaGFuZ2Uoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPiArewo+ ICsJaWYgKCFkcF9saW5rX2lzX2RzX3BvcnRfc3RhdHVzX2NoYW5nZWQobGluaykpCgpKdXN0IGVt YmVkIHRoZSBjb250ZW50cyBvZiBpc19kc19wb3J0X3N0YXR1c19jaGFuZ2VkIGhlcmUsIG5vIG5l ZWQgZm9yIDIgZnVuY3MKCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJLyogcmVzZXQgcHJl dl9zaW5rX2NvdW50ICovCj4gKwlsaW5rLT5wcmV2X3NpbmtfY291bnQgPSBsaW5rLT5kcF9saW5r LnNpbmtfY291bnQuY291bnQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIGRwX2xpbmtfaXNfdmlkZW9fcGF0dGVybl9yZXF1ZXN0ZWQoc3RydWN0IGRwX2xpbmtfcHJp dmF0ZSAqbGluaykKPiArewo+ICsJcmV0dXJuIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVk ICYgRFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk4pCj4gKwkJJiYgIShsaW5rLT5yZXF1ZXN0LnRl c3RfcmVxdWVzdGVkICYKPiArCQlEUF9URVNUX0xJTktfQVVESU9fRElTQUJMRURfVklERU8pOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBkcF9saW5rX2lzX2F1ZGlvX3BhdHRlcm5fcmVxdWVzdGVk KHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCj4gK3sKPiArCXJldHVybiAobGluay0+cmVx dWVzdC50ZXN0X3JlcXVlc3RlZCAmIERQX1RFU1RfTElOS19BVURJT19QQVRURVJOKTsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIGRwX2xpbmtfcHJvY2Vzc192aWRlb19wYXR0ZXJuX3JlcXVlc3QoKSAt IHByb2Nlc3MgbmV3IHZpZGVvIHBhdHRlcm4gcmVxdWVzdAo+ICsgKiBAbGluazogRGlzcGxheSBQ b3J0IGxpbmsgbW9kdWxlJ3MgZGF0YQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaGFu ZGxlIGEgbmV3IHZpZGVvIHBhdHRlcm4gcmVxdWVzdCB0aGF0IGFyZSBpbml0aWF0ZWQgYnkKPiAr ICogdGhlIHNpbmsuIFRoaXMgaXMgYWNoZWlldmVkIGJ5IGZpcnN0IHNlbmRpbmcgYSBkaXNjb25u ZWN0IG5vdGlmaWNhdGlvbiB0bwo+ICsgKiB0aGUgc2luayBmb2xsb3dlZCBieSBhIHN1YnNlcXVl bnQgY29ubmVjdCBub3RpZmljYXRpb24gdG8gdGhlIHVzZXIgbW9kdWxlcywKPiArICogd2hlcmUg aXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgdXNlciBtb2R1bGVzIHdvdWxkIGRyYXcgdGhlIHJlcXVp cmVkIGxpbmsKPiArICogcGF0dGVybi4KPiArICovCj4gK3N0YXRpYyBpbnQgZHBfbGlua19wcm9j ZXNzX3ZpZGVvX3BhdHRlcm5fcmVxdWVzdChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQo+ ICt7Cj4gKwlpZiAoIWRwX2xpbmtfaXNfdmlkZW9fcGF0dGVybl9yZXF1ZXN0ZWQobGluaykpCgpK dXN0IGRvIHRoaXMgZGlyZWN0bHkgaW4gZHBfbGlua19wcm9jZXNzX3JlcXVlc3QgYW5kIGdldCBy aWQgb2YgdGhpcyBmdW5jdGlvbgoKPiArCQlnb3RvIGVuZDsKPiArCj4gKwlwcl9kZWJ1ZygiJXM6 IGJpdCBkZXB0aD0lZCglZCBicHApIHBhdHRlcm49JXNcbiIsCj4gKwkJZHBfbGlua19nZXRfdGVz dF9uYW1lKERQX1RFU1RfTElOS19WSURFT19QQVRURVJOKSwKPiArCQlsaW5rLT5kcF9saW5rLnRl c3RfdmlkZW8udGVzdF9iaXRfZGVwdGgsCj4gKwkJZHBfbGlua19iaXRfZGVwdGhfdG9fYnBwKAo+ ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2JpdF9kZXB0aCksCj4gKwkJZHBfbGlu a192aWRlb19wYXR0ZXJuX3RvX3N0cmluZygKPiArCQkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVv LnRlc3RfdmlkZW9fcGF0dGVybikpOwo+ICsKPiArCXJldHVybiAwOwo+ICtlbmQ6Cj4gKwlyZXR1 cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRwX2xpbmtfcHJvY2Vzc19hdWRpb19w YXR0ZXJuX3JlcXVlc3QoKSAtIHByb2Nlc3MgbmV3IGF1ZGlvIHBhdHRlcm4gcmVxdWVzdAo+ICsg KiBAbGluazogRGlzcGxheSBQb3J0IGxpbmsgbW9kdWxlIGRhdGEKPiArICoKPiArICogVGhpcyBm dW5jdGlvbiB3aWxsIGhhbmRsZSBhIG5ldyBhdWRpbyBwYXR0ZXJuIHJlcXVlc3QgdGhhdCBpcyBp bml0aWF0ZWQgYnkKPiArICogdGhlIHNpbmsuIFRoaXMgaXMgYWNoZWlldmVkIGJ5IHNlbmRpbmcg dGhlIG5lY2Vzc2FyeSBzZWNvbmRhcnkgZGF0YSBwYWNrZXRzCj4gKyAqIHRvIHRoZSBzaW5rLiBJ dCBpcyBleHBlY3RlZCB0aGF0IGFueSBzaW11bGF0ZW5vdXMgcmVxdWVzdHMgZm9yIHZpZGVvCj4g KyAqIHBhdHRlcm5zIHdpbGwgYmUgaGFuZGxlZCBiZWZvcmUgdGhlIGF1ZGlvIHBhdHRlcm4gaXMg c2VudCB0byB0aGUgc2luay4KPiArICovCj4gK3N0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX2F1 ZGlvX3BhdHRlcm5fcmVxdWVzdChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQo+ICt7Cj4g KwlpZiAoIWRwX2xpbmtfaXNfYXVkaW9fcGF0dGVybl9yZXF1ZXN0ZWQobGluaykpCgpTYW1lIGhl cmUKCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcHJfZGVidWcoInNhbXBsaW5nX3JhdGU9 JXMsIGNoYW5uZWxfY291bnQ9JWQsIHBhdHRlcm5fdHlwZT0lc1xuIiwKPiArCQlkcF9saW5rX2dl dF9hdWRpb19zYW1wbGVfcmF0ZSgKPiArCQkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3Rf YXVkaW9fc2FtcGxpbmdfcmF0ZSksCj4gKwkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3Rf YXVkaW9fY2hhbm5lbF9jb3VudCwKPiArCQlkcF9saW5rX2dldF9hdWRpb190ZXN0X3BhdHRlcm4o Cj4gKwkJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3BhdHRlcm5fdHlwZSkp Owo+ICsKPiArCXByX2RlYnVnKCJhdWRpb19wZXJpb2Q6IGNoMT0weCV4LCBjaDI9MHgleCwgY2gz PTB4JXgsIGNoND0weCV4XG4iLAo+ICsJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1 ZGlvX3BlcmlvZF9jaF8xLAo+ICsJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlv X3BlcmlvZF9jaF8yLAo+ICsJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3Bl cmlvZF9jaF8zLAo+ICsJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3Blcmlv ZF9jaF80KTsKPiArCj4gKwlwcl9kZWJ1ZygiYXVkaW9fcGVyaW9kOiBjaDU9MHgleCwgY2g2PTB4 JXgsIGNoNz0weCV4LCBjaDg9MHgleFxuIiwKPiArCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8u dGVzdF9hdWRpb19wZXJpb2RfY2hfNSwKPiArCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVz dF9hdWRpb19wZXJpb2RfY2hfNiwKPiArCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVzdF9h dWRpb19wZXJpb2RfY2hfNywKPiArCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVzdF9hdWRp b19wZXJpb2RfY2hfOCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGRwX2xpbmtfcmVzZXRfZGF0YShzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQo+ICt7Cj4g KwlsaW5rLT5yZXF1ZXN0ID0gKGNvbnN0IHN0cnVjdCBkcF9saW5rX3JlcXVlc3QpeyAwIH07Cj4g KwlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8gPSAoY29uc3Qgc3RydWN0IGRwX2xpbmtfdGVzdF92 aWRlbyl7IDAgfTsKPiArCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2JpdF9kZXB0aCA9 IERQX1RFU1RfQklUX0RFUFRIX1VOS05PV047Cj4gKwlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8g PSAoY29uc3Qgc3RydWN0IGRwX2xpbmtfdGVzdF9hdWRpbyl7IDAgfTsKPiArCWxpbmstPmRwX2xp bmsucGh5X3BhcmFtcy5waHlfdGVzdF9wYXR0ZXJuX3NlbCA9IDA7Cj4gKwlsaW5rLT5kcF9saW5r LnNpbmtfcmVxdWVzdCA9IDA7Cj4gKwlsaW5rLT5kcF9saW5rLnRlc3RfcmVzcG9uc2UgPSAwOwoK CW1lbXNldD8KCj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcF9saW5rX3Byb2Nlc3NfcmVxdWVzdCgp IC0gaGFuZGxlIEhQRCBJUlEgdHJhbnNpdGlvbiB0byBISUdICj4gKyAqIEBsaW5rOiBwb2ludGVy IHRvIGxpbmsgbW9kdWxlIGRhdGEKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRs ZSB0aGUgSFBEIElSUSBzdGF0ZSB0cmFuc2l0aW9ucyBmcm9tIExPVyB0byBISUdICj4gKyAqIChp bmNsdWRpbmcgY2FzZXMgd2hlbiB0aGVyZSBhcmUgYmFjayB0byBiYWNrIEhQRCBJUlEgSElHSCkg aW5kaWNhdGluZwo+ICsgKiB0aGUgc3RhcnQgb2YgYSBuZXcgbGluayB0cmFpbmluZyByZXF1ZXN0 IG9yIHNpbmsgc3RhdHVzIHVwZGF0ZS4KPiArICovCj4gK3N0YXRpYyBpbnQgZHBfbGlua19wcm9j ZXNzX3JlcXVlc3Qoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmspCj4gK3sKPiArCWludCByZXQgPSAw Owo+ICsJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluazsKPiArCj4gKwlpZiAoIWRwX2xpbmsp IHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsJfQo+ICsKPiArCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtf cHJpdmF0ZSwgZHBfbGluayk7Cj4gKwo+ICsJcHJfZGVidWcoInN0YXJ0XG4iKTsKPiArCj4gKwlk cF9saW5rX3Jlc2V0X2RhdGEobGluayk7Cj4gKwo+ICsJZHBfbGlua19wYXJzZV9zaW5rX3N0YXR1 c19maWVsZChsaW5rKTsKPiArCj4gKwlpZiAoZHBfbGlua19pc190ZXN0X2VkaWRfcmVhZChsaW5r KSkgewo+ICsJCWRwX2xpbmstPnNpbmtfcmVxdWVzdCB8PSBEUF9URVNUX0xJTktfRURJRF9SRUFE Owo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlyZXQgPSBkcF9saW5rX3Byb2Nlc3NfZHNf cG9ydF9zdGF0dXNfY2hhbmdlKGxpbmspOwo+ICsJaWYgKCFyZXQpIHsKPiArCQlkcF9saW5rLT5z aW5rX3JlcXVlc3QgfD0gRFNfUE9SVF9TVEFUVVNfQ0hBTkdFRDsKPiArCQlnb3RvIGV4aXQ7Cj4g Kwl9Cj4gKwo+ICsJcmV0ID0gZHBfbGlua19wcm9jZXNzX2xpbmtfdHJhaW5pbmdfcmVxdWVzdChs aW5rKTsKPiArCWlmICghcmV0KSB7Cj4gKwkJZHBfbGluay0+c2lua19yZXF1ZXN0IHw9IERQX1RF U1RfTElOS19UUkFJTklORzsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHBf bGlua19wcm9jZXNzX3BoeV90ZXN0X3BhdHRlcm5fcmVxdWVzdChsaW5rKTsKPiArCWlmICghcmV0 KSB7Cj4gKwkJZHBfbGluay0+c2lua19yZXF1ZXN0IHw9IERQX1RFU1RfTElOS19QSFlfVEVTVF9Q QVRURVJOOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlyZXQgPSBkcF9saW5rX3Byb2Nl c3NfbGlua19zdGF0dXNfdXBkYXRlKGxpbmspOwo+ICsJaWYgKCFyZXQpIHsKPiArCQlkcF9saW5r LT5zaW5rX3JlcXVlc3QgfD0gRFBfTElOS19TVEFUVVNfVVBEQVRFRDsKPiArCQlnb3RvIGV4aXQ7 Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHBfbGlua19wcm9jZXNzX3ZpZGVvX3BhdHRlcm5fcmVxdWVz dChsaW5rKTsKPiArCWlmICghcmV0KSB7Cj4gKwkJZHBfbGluay0+c2lua19yZXF1ZXN0IHw9IERQ X1RFU1RfTElOS19WSURFT19QQVRURVJOOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwly ZXQgPSBkcF9saW5rX3Byb2Nlc3NfYXVkaW9fcGF0dGVybl9yZXF1ZXN0KGxpbmspOwo+ICsJaWYg KCFyZXQpIHsKPiArCQlkcF9saW5rLT5zaW5rX3JlcXVlc3QgfD0gRFBfVEVTVF9MSU5LX0FVRElP X1BBVFRFUk47Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCXByX2RlYnVnKCJkb25lXG4i KTsKPiArZXhpdDoKCnJlbW92ZSBleGl0ICYgcmV0LCBqdXN0IHJldHVybiB2YWx1ZXMgZGlyZWN0 bHkKCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfZ2V0X2Nv bG9yaW1ldHJ5X2NvbmZpZyhzdHJ1Y3QgZHBfbGluayAqZHBfbGluaykKPiArewo+ICsJdTMyIGNj Owo+ICsJZW51bSBkeW5hbWljX3JhbmdlIGRyOwo+ICsJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAq bGluazsKPiArCj4gKwlpZiAoIWRwX2xpbmspIHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRc biIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWxpbmsgPSBjb250YWluZXJf b2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7Cj4gKwo+ICsJLyog dW5sZXNzIGEgdmlkZW8gcGF0dGVybiBDVFMgdGVzdCBpcyBvbmdvaW5nLCB1c2UgQ0VBX1ZFU0Eg Ki8KCnMvQ0VBX1ZFU0EvUkdCX1ZFU0E/Cgo+ICsJaWYgKGRwX2xpbmtfaXNfdmlkZW9fcGF0dGVy bl9yZXF1ZXN0ZWQobGluaykpCj4gKwkJZHIgPSBsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVz dF9keW5fcmFuZ2U7Cj4gKwllbHNlCj4gKwkJZHIgPSBEUF9EWU5BTUlDX1JBTkdFX1JHQl9WRVNB Owo+ICsKPiArCS8qIE9ubHkgUkdCX1ZFU0EgbmQgUkdCX0NFQSBzdXBwb3J0ZWQgZm9yIG5vdyAq LwoKcy9uZC9hbmQvCgo+ICsJc3dpdGNoIChkcikgewo+ICsJY2FzZSBEUF9EWU5BTUlDX1JBTkdF X1JHQl9DRUE6Cj4gKwkJY2MgPSBCSVQoMyk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERQX0RZTkFN SUNfUkFOR0VfUkdCX1ZFU0E6Cj4gKwlkZWZhdWx0Ogo+ICsJCWNjID0gMDsKPiArCX0KCklmIHlv dSBzdG9yZSB0aGUgdmFsdWUgc2hpZnRlZCBsaWtlIEkgc3VnZ2VzdGVkLCB5b3UgZG9uJ3QgaGF2 ZSB0byBkbyB0aGlzCnN3aXRjaCAod2hpY2ggcmVhbGx5IHNob3VsZCBiZSBhbiBpZiBhbnl3YXlz IHNpbmNlIHRoZSByYW5nZSBpcyAwOjEpLgoKPiArCj4gKwlyZXR1cm4gY2M7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgZHBfbGlua19hZGp1c3RfbGV2ZWxzKHN0cnVjdCBkcF9saW5rICpkcF9saW5r LCB1OCAqbGlua19zdGF0dXMpCj4gK3sKPiArCWludCBpOwo+ICsJaW50IG1heCA9IDA7Cj4gKwl1 OCBkYXRhOwo+ICsJc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluazsKPiArCj4gKwlpZiAoIWRw X2xpbmspIHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsJfQo+ICsKPiArCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRw X2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7Cj4gKwo+ICsJLyogdXNlIHRoZSBtYXggbGV2ZWwgYWNy b3NzIGxhbmVzICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgZHBfbGluay0+bGlua19wYXJhbXMubGFu ZV9jb3VudDsgaSsrKSB7Cj4gKwkJZGF0YSA9IGRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rfdm9s dGFnZShsaW5rX3N0YXR1cywgaSk7Cj4gKwkJcHJfZGVidWcoImxhbmU9JWQgcmVxX3ZvbHRhZ2Vf c3dpbmc9JWRcbiIsIGksIGRhdGEpOwo+ICsJCWlmIChtYXggPCBkYXRhKQo+ICsJCQltYXggPSBk YXRhOwo+ICsJfQo+ICsKPiArCWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCA9IG1heCA+PiBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX1NISUZUOwo+ICsKPiArCS8qIHVzZSB0aGUgbWF4IGxldmVs IGFjcm9zcyBsYW5lcyAqLwo+ICsJbWF4ID0gMDsKPiArCWZvciAoaSA9IDA7IGkgPCBkcF9saW5r LT5saW5rX3BhcmFtcy5sYW5lX2NvdW50OyBpKyspIHsKPiArCQlkYXRhID0gZHJtX2RwX2dldF9h ZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMobGlua19zdGF0dXMsIGkpOwo+ICsJCXByX2RlYnVn KCJsYW5lPSVkIHJlcV9wcmVfZW1waGFzaXM9JWRcbiIsIGksIGRhdGEpOwo+ICsJCWlmIChtYXgg PCBkYXRhKQo+ICsJCQltYXggPSBkYXRhOwo+ICsJfQoKWW91IGNhbiBjb21iaW5lIHRoZXNlIGxv b3BzIGFuZCBkbyB0aGUgd29yayBhdCBvbmNlIChjaGVjayBvdXQKaW50ZWxfZ2V0X2FkanVzdF90 cmFpbikKCj4gKwo+ICsJZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVsID0gbWF4ID4+IERQX1RS QUlOX1BSRV9FTVBIQVNJU19TSElGVDsKPiArCj4gKwkvKioKPiArCSAqIEFkanVzdCB0aGUgdm9s dGFnZSBzd2luZyBhbmQgcHJlLWVtcGhhc2lzIGxldmVsIGNvbWJpbmF0aW9uIHRvIHdpdGhpbgo+ ICsJICogdGhlIGFsbG93YWJsZSByYW5nZS4KPiArCSAqLwo+ICsJaWYgKGRwX2xpbmstPnBoeV9w YXJhbXMudl9sZXZlbCA+IERQX0xJTktfVk9MVEFHRV9NQVgpIHsKPiArCQlwcl9kZWJ1ZygiUmVx dWVzdGVkIHZTd2luZ0xldmVsPSVkLCBjaGFuZ2UgdG8gJWRcbiIsCj4gKwkJCWRwX2xpbmstPnBo eV9wYXJhbXMudl9sZXZlbCwgRFBfTElOS19WT0xUQUdFX01BWCk7Cj4gKwkJZHBfbGluay0+cGh5 X3BhcmFtcy52X2xldmVsID0gRFBfTElOS19WT0xUQUdFX01BWDsKPiArCX0KPiArCj4gKwlpZiAo ZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVsID4gRFBfTElOS19QUkVfRU1QSEFTSVNfTUFYKSB7 Cj4gKwkJcHJfZGVidWcoIlJlcXVlc3RlZCBwcmVFbXBoYXNpc0xldmVsPSVkLCBjaGFuZ2UgdG8g JWRcbiIsCj4gKwkJCWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCwgRFBfTElOS19QUkVfRU1Q SEFTSVNfTUFYKTsKPiArCQlkcF9saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwgPSBEUF9MSU5LX1BS RV9FTVBIQVNJU19NQVg7Cj4gKwl9Cj4gKwo+ICsJaWYgKChkcF9saW5rLT5waHlfcGFyYW1zLnBf bGV2ZWwgPiBEUF9MSU5LX1BSRV9FTVBIQVNJU19MRVZFTF8xKQo+ICsJCSYmIChkcF9saW5rLT5w aHlfcGFyYW1zLnZfbGV2ZWwgPT0gRFBfTElOS19WT0xUQUdFX0xFVkVMXzIpKSB7Cj4gKwkJcHJf ZGVidWcoIlJlcXVlc3RlZCBwcmVFbXBoYXNpc0xldmVsPSVkLCBjaGFuZ2UgdG8gJWRcbiIsCj4g KwkJCWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCwKPiArCQkJRFBfTElOS19QUkVfRU1QSEFT SVNfTEVWRUxfMSk7Cj4gKwkJZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVsID0gRFBfTElOS19Q UkVfRU1QSEFTSVNfTEVWRUxfMTsKPiArCX0KPiArCj4gKwlwcl9kZWJ1ZygiYWRqdXN0ZWQ6IHZf bGV2ZWw9JWQsIHBfbGV2ZWw9JWRcbiIsCj4gKwkJZHBfbGluay0+cGh5X3BhcmFtcy52X2xldmVs LCBkcF9saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGRwX2xpbmtfc2VuZF9wc21fcmVxdWVzdChzdHJ1Y3QgZHBfbGluayAq ZHBfbGluaywgYm9vbCByZXEpCj4gK3sKPiArCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbms7 Cj4gKwo+ICsJaWYgKCFkcF9saW5rKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlsaW5rID0gY29udGFpbmVyX29mKGRw X2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRwX2xpbmspOwoKVGhpcyBpcyBhIHN0dWIs IHdoeSBkbyB0aGlzPwoKPiArCj4gKwlyZXR1cm4gMDsKCkZ1cnRoZXIsIHdoeSBoYXZlIGEgc3R1 YiBhdCBhbGw/IFRoZSBob29rIGlzIG5ldmVyIGNhbGxlZCwgc28gZGVsZXRlIGl0IGFsbApwbGVh c2UuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGRwX2xpbmtfZ2V0X3Rlc3RfYml0c19kZXB0aChz dHJ1Y3QgZHBfbGluayAqZHBfbGluaywgdTMyIGJwcCkKPiArewo+ICsJdTMyIHRiZDsKPiArCj4g KwkvKgo+ICsJICogRmV3IHNpbXBsaXN0aWMgcnVsZXMgYW5kIGFzc3VtcHRpb25zIG1hZGUgaGVy ZToKPiArCSAqICAgIDEuIFRlc3QgYml0IGRlcHRoIGlzIGJpdCBkZXB0aCBwZXIgY29sb3IgY29t cG9uZW50Cj4gKwkgKiAgICAyLiBBc3N1bWUgMyBjb2xvciBjb21wb25lbnRzCj4gKwkgKi8KPiAr CXN3aXRjaCAoYnBwKSB7Cj4gKwljYXNlIDE4Ogo+ICsJCXRiZCA9IERQX1RFU1RfQklUX0RFUFRI XzY7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDI0Ogo+ICsJCXRiZCA9IERQX1RFU1RfQklUX0RFUFRI Xzg7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDMwOgo+ICsJCXRiZCA9IERQX1RFU1RfQklUX0RFUFRI XzEwOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQl0YmQgPSBEUF9URVNUX0JJVF9ERVBU SF9VTktOT1dOOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWlmICh0YmQgIT0gRFBfVEVTVF9C SVRfREVQVEhfVU5LTk9XTikKPiArCQl0YmQgPSAodGJkID4+IERQX1RFU1RfQklUX0RFUFRIX1NI SUZUKTsKCkFGQUlDVCB0YmQgY29ycmVzcG9uZHMgdG8gYSBTb0MgcmVnaXN0ZXIgdmFsdWUsIGFz IG9wcG9zZWQgdG8gdGhlIERQQ0QgdmFsdWUuCkl0J3MgYSBoYXBweSBjb2luY2lkZW5jZSB0aGF0 IHRoZXkncmUgdGhlIHNhbWUsIGhvd2V2ZXIgSSB0aGluayB5b3Ugc2hvdWxkIHVzZSBhCnNlcGFy YXRlIG1zbS1zcGVjaWZpYyAjZGVmaW5lIGluc3RlYWQgb2YgdGhlIGRybV9kcF9oZWxwZXIgdmFs dWVzLgoKPiArCj4gKwlyZXR1cm4gdGJkOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHBfbGluayAqZHBf bGlua19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfYXV4ICphdXgpCj4gK3sKPiAr CWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rOwo+ICsJc3RydWN0 IGRwX2xpbmsgKmRwX2xpbms7Cj4gKwo+ICsJaWYgKCFkZXYgfHwgIWF1eCkgewo+ICsJCXByX2Vy cigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXJyb3I7 Cj4gKwl9Cj4gKwo+ICsJbGluayA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGluayksIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFsaW5rKSB7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8g ZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJbGluay0+ZGV2ICAgPSBkZXY7Cj4gKwlsaW5rLT5hdXggICA9 IGF1eDsKPiArCj4gKwlkcF9saW5rID0gJmxpbmstPmRwX2xpbms7Cj4gKwo+ICsJZHBfbGluay0+ cHJvY2Vzc19yZXF1ZXN0ICAgICAgICA9IGRwX2xpbmtfcHJvY2Vzc19yZXF1ZXN0Owo+ICsJZHBf bGluay0+Z2V0X3Rlc3RfYml0c19kZXB0aCAgICA9IGRwX2xpbmtfZ2V0X3Rlc3RfYml0c19kZXB0 aDsKPiArCWRwX2xpbmstPmdldF9jb2xvcmltZXRyeV9jb25maWcgPSBkcF9saW5rX2dldF9jb2xv cmltZXRyeV9jb25maWc7Cj4gKwlkcF9saW5rLT5hZGp1c3RfbGV2ZWxzICAgICAgICAgID0gZHBf bGlua19hZGp1c3RfbGV2ZWxzOwo+ICsJZHBfbGluay0+c2VuZF9wc21fcmVxdWVzdCAgICAgICA9 IGRwX2xpbmtfc2VuZF9wc21fcmVxdWVzdDsKPiArCWRwX2xpbmstPnNlbmRfdGVzdF9yZXNwb25z ZSAgICAgPSBkcF9saW5rX3NlbmRfdGVzdF9yZXNwb25zZTsKPiArCWRwX2xpbmstPnBzbV9jb25m aWcgICAgICAgICAgICAgPSBkcF9saW5rX3BzbV9jb25maWc7Cj4gKwlkcF9saW5rLT5zZW5kX2Vk aWRfY2hlY2tzdW0gICAgID0gZHBfbGlua19zZW5kX2VkaWRfY2hlY2tzdW07Cj4gKwo+ICsJcmV0 dXJuIGRwX2xpbms7Cj4gK2Vycm9yOgo+ICsJcmV0dXJuIEVSUl9QVFIocmMpOwo+ICt9Cj4gKwo+ ICt2b2lkIGRwX2xpbmtfcHV0KHN0cnVjdCBkcF9saW5rICpkcF9saW5rKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHBfbGlua19wcml2YXRlICpsaW5rOwo+ICsKPiArCWlmICghZHBfbGluaykKPiArCQlyZXR1 cm47Cj4gKwo+ICsJbGluayA9IGNvbnRhaW5lcl9vZihkcF9saW5rLCBzdHJ1Y3QgZHBfbGlua19w cml2YXRlLCBkcF9saW5rKTsKPiArCj4gKwlkZXZtX2tmcmVlKGxpbmstPmRldiwgbGluayk7Cj4g K30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmggYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uNmQ2ZWY0Mwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX2xpbmsuaAo+IEBAIC0wLDAgKzEsMTg0IEBACj4gKy8qCj4gKyAqIENvcHly aWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAqIG9ubHkg dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNp Zm5kZWYgX0RQX0xJTktfSF8KPiArI2RlZmluZSBfRFBfTElOS19IXwo+ICsKPiArI2luY2x1ZGUg ImRwX2F1eC5oIgo+ICsKPiArI2RlZmluZSBEU19QT1JUX1NUQVRVU19DSEFOR0VEIDB4MjAwCj4g KyNkZWZpbmUgRFBfVEVTVF9CSVRfREVQVEhfVU5LTk9XTiAweEZGRkZGRkZGCj4gKyNkZWZpbmUg RFBfTElOS19FTlVNX1NUUih4KQkJI3gKPiArCj4gK2VudW0gZHBfbGlua192b2x0YWdlX2xldmVs IHsKPiArCURQX0xJTktfVk9MVEFHRV9MRVZFTF8wCT0gMCwKPiArCURQX0xJTktfVk9MVEFHRV9M RVZFTF8xCT0gMSwKPiArCURQX0xJTktfVk9MVEFHRV9MRVZFTF8yCT0gMiwKPiArCURQX0xJTktf Vk9MVEFHRV9NQVgJPSBEUF9MSU5LX1ZPTFRBR0VfTEVWRUxfMiwKPiArfTsKCkRQX1RSQUlOX1ZP TFRBR0VfU1dJTkdfKgoKPiArCj4gK2VudW0gZHBfbGlua19wcmVlbWFwaGFzaXNfbGV2ZWwgewo+ ICsJRFBfTElOS19QUkVfRU1QSEFTSVNfTEVWRUxfMAk9IDAsCj4gKwlEUF9MSU5LX1BSRV9FTVBI QVNJU19MRVZFTF8xCT0gMSwKPiArCURQX0xJTktfUFJFX0VNUEhBU0lTX0xFVkVMXzIJPSAyLAo+ ICsJRFBfTElOS19QUkVfRU1QSEFTSVNfTUFYCT0gRFBfTElOS19QUkVfRU1QSEFTSVNfTEVWRUxf MiwKPiArfTsKCkRQX1RSQUlOX1BSRV9FTVBIKgoKPiArCj4gK3N0cnVjdCBkcF9saW5rX3Npbmtf Y291bnQgewo+ICsJdTMyIGNvdW50Owo+ICsJYm9vbCBjcF9yZWFkeTsKPiArfTsKPiArCj4gK3N0 cnVjdCBkcF9saW5rX3Rlc3RfdmlkZW8gewo+ICsJdTMyIHRlc3RfdmlkZW9fcGF0dGVybjsKPiAr CXUzMiB0ZXN0X2JpdF9kZXB0aDsKPiArCXUzMiB0ZXN0X2R5bl9yYW5nZTsKPiArCXUzMiB0ZXN0 X2hfdG90YWw7Cj4gKwl1MzIgdGVzdF92X3RvdGFsOwo+ICsJdTMyIHRlc3RfaF9zdGFydDsKPiAr CXUzMiB0ZXN0X3Zfc3RhcnQ7Cj4gKwl1MzIgdGVzdF9oc3luY19wb2w7Cj4gKwl1MzIgdGVzdF9o c3luY193aWR0aDsKPiArCXUzMiB0ZXN0X3ZzeW5jX3BvbDsKPiArCXUzMiB0ZXN0X3ZzeW5jX3dp ZHRoOwo+ICsJdTMyIHRlc3RfaF93aWR0aDsKPiArCXUzMiB0ZXN0X3ZfaGVpZ2h0Owo+ICsJdTMy IHRlc3RfcnJfZDsKPiArCXUzMiB0ZXN0X3JyX247Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHBfbGlu a190ZXN0X2F1ZGlvIHsKPiArCXUzMiB0ZXN0X2F1ZGlvX3NhbXBsaW5nX3JhdGU7Cj4gKwl1MzIg dGVzdF9hdWRpb19jaGFubmVsX2NvdW50Owo+ICsJdTMyIHRlc3RfYXVkaW9fcGF0dGVybl90eXBl Owo+ICsJdTMyIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzE7Cj4gKwl1MzIgdGVzdF9hdWRpb19wZXJp b2RfY2hfMjsKPiArCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8zOwo+ICsJdTMyIHRlc3RfYXVk aW9fcGVyaW9kX2NoXzQ7Cj4gKwl1MzIgdGVzdF9hdWRpb19wZXJpb2RfY2hfNTsKPiArCXUzMiB0 ZXN0X2F1ZGlvX3BlcmlvZF9jaF82Owo+ICsJdTMyIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzc7Cj4g Kwl1MzIgdGVzdF9hdWRpb19wZXJpb2RfY2hfODsKPiArfTsKPiArCj4gK3N0cnVjdCBkcF9saW5r X3BoeV9wYXJhbXMgewo+ICsJdTMyIHBoeV90ZXN0X3BhdHRlcm5fc2VsOwo+ICsJdTggdl9sZXZl bDsKPiArCXU4IHBfbGV2ZWw7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHBfbGlua19wYXJhbXMgewo+ ICsJdTMyIGxhbmVfY291bnQ7Cj4gKwl1MzIgYndfY29kZTsKPiArfTsKClVzZSBkcm1fZHBfbGlu awoKPiArCj4gK3N0cnVjdCBkcF9saW5rIHsKPiArCXUzMiBzaW5rX3JlcXVlc3Q7Cj4gKwl1MzIg dGVzdF9yZXNwb25zZTsKPiArCWJvb2wgcHNtX2VuYWJsZWQ7Cj4gKwo+ICsJc3RydWN0IGRwX2xp bmtfc2lua19jb3VudCBzaW5rX2NvdW50Owo+ICsJc3RydWN0IGRwX2xpbmtfdGVzdF92aWRlbyB0 ZXN0X3ZpZGVvOwo+ICsJc3RydWN0IGRwX2xpbmtfdGVzdF9hdWRpbyB0ZXN0X2F1ZGlvOwo+ICsJ c3RydWN0IGRwX2xpbmtfcGh5X3BhcmFtcyBwaHlfcGFyYW1zOwo+ICsJc3RydWN0IGRwX2xpbmtf cGFyYW1zIGxpbmtfcGFyYW1zOwo+ICsKPiArCXUzMiAoKmdldF90ZXN0X2JpdHNfZGVwdGgpKHN0 cnVjdCBkcF9saW5rICpkcF9saW5rLCB1MzIgYnBwKTsKPiArCWludCAoKnByb2Nlc3NfcmVxdWVz dCkoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmspOwo+ICsJaW50ICgqZ2V0X2NvbG9yaW1ldHJ5X2Nv bmZpZykoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmspOwo+ICsJaW50ICgqYWRqdXN0X2xldmVscyko c3RydWN0IGRwX2xpbmsgKmRwX2xpbmssIHU4ICpsaW5rX3N0YXR1cyk7Cj4gKwlpbnQgKCpzZW5k X3BzbV9yZXF1ZXN0KShzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywgYm9vbCByZXEpOwo+ICsJdm9p ZCAoKnNlbmRfdGVzdF9yZXNwb25zZSkoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmspOwo+ICsJaW50 ICgqcHNtX2NvbmZpZykoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssCj4gKwkJc3RydWN0IGRybV9k cF9saW5rICpsaW5rX2luZm8sIGJvb2wgZW5hYmxlKTsKPiArCXZvaWQgKCpzZW5kX2VkaWRfY2hl Y2tzdW0pKHN0cnVjdCBkcF9saW5rICpkcF9saW5rLCB1OCBjaGVja3N1bSk7Cj4gK307Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIGNoYXIgKmRwX2xpbmtfZ2V0X3BoeV90ZXN0X3BhdHRlcm4odTMyIHBo eV90ZXN0X3BhdHRlcm5fc2VsKQo+ICt7Cj4gKwlzd2l0Y2ggKHBoeV90ZXN0X3BhdHRlcm5fc2Vs KSB7Cj4gKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fTk9ORToKPiArCQlyZXR1cm4gRFBfTElO S19FTlVNX1NUUihEUF9URVNUX1BIWV9QQVRURVJOX05PTkUpOwo+ICsJY2FzZSBEUF9URVNUX1BI WV9QQVRURVJOX0QxMF8yX05PX1NDUkFNQkxJTkc6Cj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9T VFIoCj4gKwkJCURQX1RFU1RfUEhZX1BBVFRFUk5fRDEwXzJfTk9fU0NSQU1CTElORyk7Cj4gKwlj YXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fU1lNQk9MX0VSUl9NRUFTVVJFTUVOVF9DTlQ6Cj4gKwkJ cmV0dXJuIERQX0xJTktfRU5VTV9TVFIoCj4gKwkJCURQX1RFU1RfUEhZX1BBVFRFUk5fU1lNQk9M X0VSUl9NRUFTVVJFTUVOVF9DTlQpOwo+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX1BSQlM3 Ogo+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX1RFU1RfUEhZX1BBVFRFUk5fUFJCUzcp Owo+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOXzgwX0JJVF9DVVNUT01fUEFUVEVSTjoKPiAr CQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUigKPiArCQkJRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9C SVRfQ1VTVE9NX1BBVFRFUk4pOwo+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX0hCUjJfQ1RT X0VZRV9QQVRURVJOOgo+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKAo+ICsJCQlEUF9URVNU X1BIWV9QQVRURVJOX0hCUjJfQ1RTX0VZRV9QQVRURVJOKTsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0 dXJuICJ1bmtub3duIjsKPiArCX0KPiArfQoKVGhpcyBpcyBvbmx5IHVzZWQgZm9yIGRlYnVnIHN0 YXRlbWVudHMsIGp1c3QgcmVtb3ZlIGl0IGFuZCBwcmludCB0aGUgZW51bSBhcyBhbgppbnQuIFRo aXMgd2lsbCBsZXQgeW91IHJlbW92ZSBEUF9MSU5LX0VOVU1fU1RSIGFzIHdlbGwuCgo+ICsKPiAr LyoqCj4gKyAqIG1kc3NfZHBfdGVzdF9iaXRfZGVwdGhfdG9fYnBwKCkgLSBjb252ZXJ0IHRlc3Qg Yml0IGRlcHRoIHRvIGJwcAo+ICsgKiBAdGJkOiB0ZXN0IGJpdCBkZXB0aAo+ICsgKgo+ICsgKiBS ZXR1cm5zIHRoZSBiaXRzIHBlciBwaXhlbCAoYnBwKSB0byBiZSB1c2VkIGNvcnJlc3BvbmRpbmcg dG8gdGhlCj4gKyAqIGdpdCBiaXQgZGVwdGggdmFsdWUuIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0 aGF0IGJpdCBkZXB0aCBoYXMKPiArICogYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4KPiArICovCj4g K3N0YXRpYyBpbmxpbmUgdTMyIGRwX2xpbmtfYml0X2RlcHRoX3RvX2JwcCh1MzIgdGJkKQo+ICt7 Cj4gKwl1MzIgYnBwOwo+ICsKPiArCS8qCj4gKwkgKiBGZXcgc2ltcGxpc3RpYyBydWxlcyBhbmQg YXNzdW1wdGlvbnMgbWFkZSBoZXJlOgo+ICsJICogICAgMS4gQml0IGRlcHRoIGlzIHBlciBjb2xv ciBjb21wb25lbnQKPiArCSAqICAgIDIuIElmIGJpdCBkZXB0aCBpcyB1bmtub3duIHJldHVybiAw Cj4gKwkgKiAgICAzLiBBc3N1bWUgMyBjb2xvciBjb21wb25lbnRzCj4gKwkgKi8KPiArCXN3aXRj aCAodGJkKSB7Cj4gKwljYXNlIERQX1RFU1RfQklUX0RFUFRIXzY6Cj4gKwkJYnBwID0gMTg7Cj4g KwkJYnJlYWs7Cj4gKwljYXNlIERQX1RFU1RfQklUX0RFUFRIXzg6Cj4gKwkJYnBwID0gMjQ7Cj4g KwkJYnJlYWs7Cj4gKwljYXNlIERQX1RFU1RfQklUX0RFUFRIXzEwOgo+ICsJCWJwcCA9IDMwOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOOgo+ICsJZGVmYXVs dDoKPiArCQlicHAgPSAwOwo+ICsJfQo+ICsKPiArCXJldHVybiBicHA7CgpKdXN0IHJldHVybiBk aXJlY3RseSBmcm9tIGVhY2ggY2FzZS4KCj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcF9saW5rX2dl dCgpIC0gZ2V0IHRoZSBmdW5jdGlvbmFsaXRpZXMgb2YgZHAgdGVzdCBtb2R1bGUKPiArICoKPiAr ICoKPiArICogcmV0dXJuOiBhIHBvaW50ZXIgdG8gZHBfbGluayBzdHJ1Y3QKPiArICovCj4gK3N0 cnVjdCBkcF9saW5rICpkcF9saW5rX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9h dXggKmF1eCk7Cj4gKwo+ICsvKioKPiArICogZHBfbGlua19wdXQoKSAtIHJlbGVhc2VzIHRoZSBk cCB0ZXN0IG1vZHVsZSdzIHJlc291cmNlcwo+ICsgKgo+ICsgKiBAZHBfbGluazogYW4gaW5zdGFu Y2Ugb2YgZHBfbGluayBtb2R1bGUKPiArICoKPiArICovCj4gK3ZvaWQgZHBfbGlua19wdXQoc3Ry dWN0IGRwX2xpbmsgKmRwX2xpbmspOwo+ICsKPiArI2VuZGlmIC8qIF9EUF9MSU5LX0hfICovCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfcGFuZWwuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMC4uZTQ5N2I0NAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX3BhbmVsLmMKPiBAQCAtMCwwICsxLDYyNCBAQAo+ICsvKgo+ICsgKiBDb3B5cmln aHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+ICsgKiBvbmx5IHZl cnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiAr ICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICovCj4gKwo+ICsjZGVm aW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCj4gKwo+ICsjaW5j bHVkZSAiZHBfcGFuZWwuaCIKPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5oPgo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+Cj4gKwo+ICsjZGVmaW5lIERQX1BBTkVMX0RFRkFV TFRfQlBQIDI0Cgp1bnVzZWQKCj4gKyNkZWZpbmUgRFBfTUFYX0RTX1BPUlRfQ09VTlQgMQo+ICsK PiArZW51bSB7Cj4gKwlEUF9MSU5LX1JBVEVfTVVMVElQTElFUiA9IDI3MDAwMDAwLAo+ICt9OwoK dW51c2VkCgo+ICsKPiArc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgewo+ICsJc3RydWN0IGRldmlj ZSAqZGV2Owo+ICsJc3RydWN0IGRwX3BhbmVsIGRwX3BhbmVsOwo+ICsJc3RydWN0IGRwX2F1eCAq YXV4Owo+ICsJc3RydWN0IGRwX2xpbmsgKmxpbms7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wYW5l bCAqY2F0YWxvZzsKPiArCWJvb2wgcGFuZWxfb247Cj4gKwlib29sIGF1eF9jZmdfdXBkYXRlX2Rv bmU7Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRwX3BhbmVsX2luZm8gZmFpbF9z YWZlID0gewo+ICsJLmhfYWN0aXZlID0gNjQwLAo+ICsJLnZfYWN0aXZlID0gNDgwLAo+ICsJLmhf YmFja19wb3JjaCA9IDQ4LAo+ICsJLmhfZnJvbnRfcG9yY2ggPSAxNiwKPiArCS5oX3N5bmNfd2lk dGggPSA5NiwKPiArCS5oX2FjdGl2ZV9sb3cgPSAwLAo+ICsJLnZfYmFja19wb3JjaCA9IDMzLAo+ ICsJLnZfZnJvbnRfcG9yY2ggPSAxMCwKPiArCS52X3N5bmNfd2lkdGggPSAyLAo+ICsJLnZfYWN0 aXZlX2xvdyA9IDAsCj4gKwkuaF9za2V3ID0gMCwKPiArCS5yZWZyZXNoX3JhdGUgPSA2MCwKPiAr CS5waXhlbF9jbGtfa2h6ID0gMjUyMDAsCj4gKwkuYnBwID0gMjQsCj4gK307CgpEcm9wIHRoaXMs IHVzZXJzcGFjZSBjYW4gYWRkIGEgbW9kZSBpZiBhcHByb3ByaWF0ZQoKPiArCj4gK3N0YXRpYyBp bnQgZHBfcGFuZWxfcmVhZF9kcGNkKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4gK3sKPiAr CWludCBybGVuLCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7Cj4g KwlzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmtfaW5mbzsKPiArCXU4ICpkcGNkLCBtYWpvciA9IDAs IG1pbm9yID0gMDsKPiArCXUzMiBkZnBfY291bnQgPSAwOwo+ICsJdW5zaWduZWQgbG9uZyBjYXBz ID0gRFBfTElOS19DQVBfRU5IQU5DRURfRlJBTUlORzsKPiArCj4gKwlpZiAoIWRwX3BhbmVsKSB7 Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJ Z290byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJZHBjZCA9IGRwX3BhbmVsLT5kcGNkOwo+ICsKPiArCXBh bmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBf cGFuZWwpOwo+ICsJbGlua19pbmZvID0gJmRwX3BhbmVsLT5saW5rX2luZm87Cj4gKwo+ICsJcmxl biA9IGRybV9kcF9kcGNkX3JlYWQocGFuZWwtPmF1eC0+ZHJtX2F1eCwgRFBfRFBDRF9SRVYsCj4g KwkJZHBjZCwgKERQX1JFQ0VJVkVSX0NBUF9TSVpFICsgMSkpOwo+ICsJaWYgKHJsZW4gPCAoRFBf UkVDRUlWRVJfQ0FQX1NJWkUgKyAxKSkgewo+ICsJCXByX2VycigiZHBjZCByZWFkIGZhaWxlZCwg cmxlbj0lZFxuIiwgcmxlbik7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZW5kOwo+ICsJ fQo+ICsKPiArCWxpbmtfaW5mby0+cmV2aXNpb24gPSBkcF9wYW5lbC0+ZHBjZFtEUF9EUENEX1JF Vl07Cj4gKwo+ICsJbWFqb3IgPSAobGlua19pbmZvLT5yZXZpc2lvbiA+PiA0KSAmIDB4MGY7Cj4g KwltaW5vciA9IGxpbmtfaW5mby0+cmV2aXNpb24gJiAweDBmOwo+ICsJcHJfZGVidWcoInZlcnNp b246ICVkLiVkXG4iLCBtYWpvciwgbWlub3IpOwo+ICsKPiArCWxpbmtfaW5mby0+cmF0ZSA9Cj4g KwkJZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKGRwX3BhbmVsLT5kcGNkW0RQX01BWF9MSU5L X1JBVEVdKTsKPiArCXByX2RlYnVnKCJsaW5rX3JhdGU9JWRcbiIsIGxpbmtfaW5mby0+cmF0ZSk7 Cj4gKwo+ICsJbGlua19pbmZvLT5udW1fbGFuZXMgPSBkcF9wYW5lbC0+ZHBjZFtEUF9NQVhfTEFO RV9DT1VOVF0gJgo+ICsJCQkJRFBfTUFYX0xBTkVfQ09VTlRfTUFTSzsKPiArCj4gKwlwcl9kZWJ1 ZygibGFuZV9jb3VudD0lZFxuIiwgbGlua19pbmZvLT5udW1fbGFuZXMpOwo+ICsKPiArCWlmIChk cm1fZHBfZW5oYW5jZWRfZnJhbWVfY2FwKGRwY2QpKQo+ICsJCWxpbmtfaW5mby0+Y2FwYWJpbGl0 aWVzIHw9IGNhcHM7CgpBbGwgb2YgdGhlIGxpbmtfaW5mbyBpbml0aWFsaXphdGlvbiBzaG91bGQg YmUgZG9uZSBieSBkcm1fZHBfbGlua19wcm9iZSgpLgoKPiArCj4gKwlkZnBfY291bnQgPSBkcGNk W0RQX0RPV05fU1RSRUFNX1BPUlRfQ09VTlRdICYKPiArCQkJCQkJRFBfRE9XTl9TVFJFQU1fUE9S VF9DT1VOVDsKCk1vdmUgdGhpcyBkb3duIHRvIHdoZXJlIGl0J3MgdXNlZAoKPiArCj4gKwlpZiAo KGRwY2RbRFBfRE9XTlNUUkVBTVBPUlRfUFJFU0VOVF0gJiBEUF9EV05fU1RSTV9QT1JUX1BSRVNF TlQpCj4gKwkJJiYgKGRwY2RbRFBfRFBDRF9SRVZdID4gMHgxMCkpIHsKPiArCQlybGVuID0gZHJt X2RwX2RwY2RfcmVhZChwYW5lbC0+YXV4LT5kcm1fYXV4LAo+ICsJCQlEUF9ET1dOU1RSRUFNX1BP UlRfMCwgZHBfcGFuZWwtPmRzX3BvcnRzLAo+ICsJCQlEUF9NQVhfRE9XTlNUUkVBTV9QT1JUUyk7 Cj4gKwkJaWYgKHJsZW4gPCBEUF9NQVhfRE9XTlNUUkVBTV9QT1JUUykgewo+ICsJCQlwcl9lcnIo ImRzIHBvcnQgc3RhdHVzIGZhaWxlZCwgcmxlbj0lZFxuIiwgcmxlbik7Cj4gKwkJCXJjID0gLUVJ TlZBTDsKPiArCQkJZ290byBlbmQ7Cj4gKwkJfQo+ICsJfQoKWW91IGRvbid0IHVzZSBkc19wb3J0 cyBhbnl3aGVyZSwgc28gcmVtb3ZlIHRoaXMgYW5kIHJlbW92ZSBkc19wb3J0cwoKPiArCj4gKwlp ZiAoZGZwX2NvdW50ID4gRFBfTUFYX0RTX1BPUlRfQ09VTlQpCj4gKwkJcHJfZGVidWcoIkRTIHBv cnQgY291bnQgJWQgZ3JlYXRlciB0aGF0IG1heCAoJWQpIHN1cHBvcnRlZFxuIiwKPiArCQkJZGZw X2NvdW50LCBEUF9NQVhfRFNfUE9SVF9DT1VOVCk7CgpTaG91bGQgdGhpcyBiZSBhbiBlcnJvcj8K Cj4gKwo+ICtlbmQ6Cj4gKwlyZXR1cm4gcmM7CgpTYW1lIGRyaWxsIGFzIGJlZm9yZQoKPiArfQo+ ICsKPiArc3RhdGljIGludCBkcF9wYW5lbF9zZXRfZGVmYXVsdF9saW5rX3BhcmFtcyhzdHJ1Y3Qg ZHBfcGFuZWwgKmRwX3BhbmVsKQo+ICt7CgpMZXQncyBqdXN0IGZhaWwgaW5zdGVhZCBvZiBkb2lu ZyB0aGlzLgoKPiArCXN0cnVjdCBkcm1fZHBfbGluayAqbGlua19pbmZvOwo+ICsJY29uc3QgaW50 IGRlZmF1bHRfYndfY29kZSA9IDE2MjAwMDsKPiArCWNvbnN0IGludCBkZWZhdWx0X251bV9sYW5l cyA9IDE7Cj4gKwo+ICsJaWYgKCFkcF9wYW5lbCkgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1 dFxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwlsaW5rX2luZm8gPSAmZHBfcGFu ZWwtPmxpbmtfaW5mbzsKPiArCWxpbmtfaW5mby0+cmF0ZSA9IGRlZmF1bHRfYndfY29kZTsKPiAr CWxpbmtfaW5mby0+bnVtX2xhbmVzID0gZGVmYXVsdF9udW1fbGFuZXM7Cj4gKwlwcl9kZWJ1Zygi bGlua19yYXRlPSVkIG51bV9sYW5lcz0lZFxuIiwKPiArCQlsaW5rX2luZm8tPnJhdGUsIGxpbmtf aW5mby0+bnVtX2xhbmVzKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRw X3BhbmVsX3JlYWRfZWRpZChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+ICsJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJaW50IHJldHJ5X2NudCA9IDA7Cj4gKwlj b25zdCBpbnQgbWF4X3JldHJ5ID0gMTA7Cj4gKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFu ZWw7Cj4gKwo+ICsJaWYgKCFkcF9wYW5lbCkgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxu Iik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcGFuZWwgPSBjb250YWluZXJf b2YoZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7Cj4gKwo+ICsJ ZG8gewo+ICsJCWtmcmVlKGRwX3BhbmVsLT5lZGlkKTsKPiArCQlkcF9wYW5lbC0+ZWRpZCA9IGRy bV9nZXRfZWRpZChjb25uZWN0b3IsCj4gKwkJCQkJICAgICAgJnBhbmVsLT5hdXgtPmRybV9hdXgt PmRkYyk7Cj4gKwkJaWYgKCFkcF9wYW5lbC0+ZWRpZCkgewo+ICsJCQlwcl9lcnIoIkVESUQgcmVh ZCBmYWlsZWRcbiIpOwo+ICsJCQlyZXRyeV9jbnQrKzsKPiArCQkJcGFuZWwtPmF1eC0+cmVjb25m aWcocGFuZWwtPmF1eCk7Cj4gKwkJCXBhbmVsLT5hdXhfY2ZnX3VwZGF0ZV9kb25lID0gdHJ1ZTsK PiArCQl9IGVsc2Ugewo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwl9IHdoaWxlIChyZXRyeV9j bnQgPCBtYXhfcmV0cnkpOwoKVGhlIGNvcmUgd2lsbCBkbyByZXRyeXMgd2hlbiBhdXggcmVhZHMg ZmFpbCwgc28geW91IGRvbid0IG5lZWQgdG8uIFdpdGggdGhhdCwKeW91IGNhbiBqdXN0IHJlbW92 ZSB0aGlzIGZ1bmN0aW9uIGFuZCBjYWxsIGRybV9nZXRfZWRpZCBpbiByZWFkX3NpbmtfY2FwcwoK PiArCj4gKwlyZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9wYW5lbF9y ZWFkX3NpbmtfY2FwcyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+ICsJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9w YW5lbF9wcml2YXRlICpwYW5lbDsKPiArCj4gKwlpZiAoIWRwX3BhbmVsIHx8ICFjb25uZWN0b3Ip IHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsJfQo+ICsKPiArCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFu ZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+ICsKPiArCXJjID0gZHBfcGFuZWxfcmVhZF9kcGNkKGRw X3BhbmVsKTsKPiArCWlmIChyYyB8fCAhaXNfbGlua19yYXRlX3ZhbGlkKGRybV9kcF9saW5rX3Jh dGVfdG9fYndfY29kZSgKPiArCQlkcF9wYW5lbC0+bGlua19pbmZvLnJhdGUpKSB8fCAhaXNfbGFu ZV9jb3VudF92YWxpZCgKPiArCQlkcF9wYW5lbC0+bGlua19pbmZvLm51bV9sYW5lcykgfHwKPiAr CQkoKGRybV9kcF9saW5rX3JhdGVfdG9fYndfY29kZShkcF9wYW5lbC0+bGlua19pbmZvLnJhdGUp KSA+Cj4gKwkJZHBfcGFuZWwtPm1heF9id19jb2RlKSkgewo+ICsJCWlmICgocmMgPT0gLUVUSU1F RE9VVCkgfHwgKHJjID09IC1FTk9ERVYpKSB7Cj4gKwkJCXByX2VycigiRFBDRCByZWFkIGZhaWxl ZCwgcmV0dXJuIGVhcmx5XG4iKTsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiArCQlwcl9lcnIo InBhbmVsIGRwY2QgcmVhZCBmYWlsZWQvaW5jb3JyZWN0LCBzZXQgZGVmYXVsdCBwYXJhbXNcbiIp Owo+ICsJCWRwX3BhbmVsX3NldF9kZWZhdWx0X2xpbmtfcGFyYW1zKGRwX3BhbmVsKTsKPiArCX0K ClNpbmNlIHRoZSBkZWZhdWx0cyBhcmUgZ29pbmcgYXdheSwgdGhpcyBnZXRzIHNpbXBsZXIgKGFu ZCBldmVuIHNpbXBsZXIgaWYgeW91CnN0YXNoIGJ3X2NvZGUpOgoKCWJ3X2NvZGUgPSBkcm1fZHBf bGlua19yYXRlX3RvX2J3X2NvZGUoZHBfcGFuZWwtPmxpbmtfaW5mby5yYXRlKTsKCWlmIChyYyB8 fCAhaXNfbGlua19yYXRlX3ZhbGlkKGJ3X2NvZGUpIHx8CiAgICAgICAgICAgICFpc19sYW5lX2Nv dW50X3ZhbGlkKGRwX3BhbmVsLT5saW5rX2luZm8ubnVtX2xhbmVzKSB8fAoJICAgIGJ3X2NvZGUg PiBkcF9wYW5lbC0+bWF4X2J3X2NvZGUpIHsKCQlwcl9lcnIoInJlYWRfZHBjZCBmYWlsZWQgJWRc biIsIHJjKTsKCQlyZXR1cm4gcmM7Cgl9Cgo+ICsKPiArCXJjID0gZHBfcGFuZWxfcmVhZF9lZGlk KGRwX3BhbmVsLCBjb25uZWN0b3IpOwoKV2h5IHJlYWQgdGhlIGVkaWQgc28gZWFybHk/IENhbid0 IHlvdSB3YWl0IHVudGlsIGdldF9tb2RlcyBpcyBjYWxsZWQgKHlvdSdsbApoYXZlIHRvIHJlLXJl YWQgYW55d2F5cykuCgo+ICsJaWYgKHJjKSB7Cj4gKwkJcHJfZXJyKCJwYW5lbCBlZGlkIHJlYWQg ZmFpbGVkLCBzZXQgZmFpbHNhZmUgbW9kZVxuIik7Cj4gKwkJcmV0dXJuIHJjOwo+ICsJfQo+ICsK PiArCWlmIChwYW5lbC0+YXV4X2NmZ191cGRhdGVfZG9uZSkgewo+ICsJCXByX2RlYnVnKCJyZWFk IERQQ0Qgd2l0aCB1cGRhdGVkIEFVWCBjb25maWdcbiIpOwo+ICsJCWRwX3BhbmVsX3JlYWRfZHBj ZChkcF9wYW5lbCk7CgpDaGVjayByZXR1cm4gdmFsdWUuIFNob3VsZCB5b3UgYWxzbyBjaGVjayB0 aGUgcmF0ZS9sYW5lX2NvdW50IHZhbGlkaXR5IGFnYWluIHRvbz8KCj4gKwkJcGFuZWwtPmF1eF9j ZmdfdXBkYXRlX2RvbmUgPSBmYWxzZTsKClNob3VsZCB5b3UgaGF2ZSBsb2NraW5nIGZvciBhdXhf Y2ZnX3VwZGF0ZV9kb25lPwoKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIHUzMiBkcF9wYW5lbF9nZXRfc3VwcG9ydGVkX2JwcChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3Bh bmVsLAo+ICsJCXUzMiBtb2RlX2VkaWRfYnBwLCB1MzIgbW9kZV9wY2xrX2toeikKPiArewo+ICsJ c3RydWN0IGRybV9kcF9saW5rICpsaW5rX2luZm87Cj4gKwljb25zdCB1MzIgbWF4X3N1cHBvcnRl ZF9icHAgPSAzMCwgbWluX3N1cHBvcnRlZF9icHAgPSAxODsKPiArCXUzMiBicHAgPSAwLCBkYXRh X3JhdGVfa2h6ID0gMDsKPiArCj4gKwlicHAgPSBtaW5fdCh1MzIsIG1vZGVfZWRpZF9icHAsIG1h eF9zdXBwb3J0ZWRfYnBwKTsKPiArCj4gKwlsaW5rX2luZm8gPSAmZHBfcGFuZWwtPmxpbmtfaW5m bzsKPiArCWRhdGFfcmF0ZV9raHogPSBsaW5rX2luZm8tPm51bV9sYW5lcyAqIGxpbmtfaW5mby0+ cmF0ZSAqIDg7Cj4gKwo+ICsJd2hpbGUgKGJwcCA+IG1pbl9zdXBwb3J0ZWRfYnBwKSB7Cj4gKwkJ aWYgKG1vZGVfcGNsa19raHogKiBicHAgPD0gZGF0YV9yYXRlX2toeikKPiArCQkJYnJlYWs7Cj4g KwkJYnBwIC09IDY7CgpXYXRjaCBvdXQgZm9yIHVuZGVyZmxvdyBoZXJlLgoKPiArCX0KPiArCj4g KwlyZXR1cm4gYnBwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGRwX3BhbmVsX2dldF9tb2RlX2Jw cChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+ICsJCXUzMiBtb2RlX2VkaWRfYnBwLCB1MzIg bW9kZV9wY2xrX2toeikKPiArewo+ICsJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOwo+ ICsJdTMyIGJwcCA9IG1vZGVfZWRpZF9icHA7Cj4gKwo+ICsJaWYgKCFkcF9wYW5lbCB8fCAhbW9k ZV9lZGlkX2JwcCB8fCAhbW9kZV9wY2xrX2toeikgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1 dFxuIik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJcGFuZWwgPSBjb250YWluZXJfb2Yo ZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7Cj4gKwo+ICsJaWYg KGRwX3BhbmVsLT52aWRlb190ZXN0KQo+ICsJCWJwcCA9IGRwX2xpbmtfYml0X2RlcHRoX3RvX2Jw cCgKPiArCQkJCXBhbmVsLT5saW5rLT50ZXN0X3ZpZGVvLnRlc3RfYml0X2RlcHRoKTsKPiArCWVs c2UKPiArCQlicHAgPSBkcF9wYW5lbF9nZXRfc3VwcG9ydGVkX2JwcChkcF9wYW5lbCwgbW9kZV9l ZGlkX2JwcCwKPiArCQkJCW1vZGVfcGNsa19raHopOwo+ICsKPiArCXJldHVybiBicHA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGRwX3BhbmVsX3NldF90ZXN0X21vZGUoc3RydWN0IGRwX3BhbmVs X3ByaXZhdGUgKnBhbmVsLAo+ICsJCXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sK PiArCXN0cnVjdCBkcF9wYW5lbF9pbmZvICpwaW5mbyA9IE5VTEw7CgoKQXMgbWVudGlvbmVkIGVh cmxpZXIsIG5vIG5lZWQgdG8gZHVwbGljYXRlIGRybV9kaXNwbGF5X21vZGUgaW50bwpkcF9kaXNw bGF5X21vZGUsIHNhbWUgZ29lcyBmb3IgZHBfcGFuZWxfaW5mbywgcGxlYXNlIGp1c3QgdXNlIGRy bV9kaXNwbGF5X21vZGUuCgo+ICsJc3RydWN0IGRwX2xpbmtfdGVzdF92aWRlbyAqdGVzdF9pbmZv ID0gTlVMTDsKPiArCj4gKwlpZiAoIXBhbmVsKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFt c1xuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXBpbmZvID0gJm1vZGUtPnRpbWluZzsK PiArCXRlc3RfaW5mbyA9ICZwYW5lbC0+bGluay0+dGVzdF92aWRlbzsKPiArCj4gKwlwaW5mby0+ aF9hY3RpdmUgPSB0ZXN0X2luZm8tPnRlc3RfaF93aWR0aDsKPiArCXBpbmZvLT5oX3N5bmNfd2lk dGggPSB0ZXN0X2luZm8tPnRlc3RfaHN5bmNfd2lkdGg7Cj4gKwlwaW5mby0+aF9iYWNrX3BvcmNo ID0gdGVzdF9pbmZvLT50ZXN0X2hfc3RhcnQgLQo+ICsJCXRlc3RfaW5mby0+dGVzdF9oc3luY193 aWR0aDsKPiArCXBpbmZvLT5oX2Zyb250X3BvcmNoID0gdGVzdF9pbmZvLT50ZXN0X2hfdG90YWwg LQo+ICsJCSh0ZXN0X2luZm8tPnRlc3RfaF9zdGFydCArIHRlc3RfaW5mby0+dGVzdF9oX3dpZHRo KTsKPiArCj4gKwlwaW5mby0+dl9hY3RpdmUgPSB0ZXN0X2luZm8tPnRlc3Rfdl9oZWlnaHQ7Cj4g KwlwaW5mby0+dl9zeW5jX3dpZHRoID0gdGVzdF9pbmZvLT50ZXN0X3ZzeW5jX3dpZHRoOwo+ICsJ cGluZm8tPnZfYmFja19wb3JjaCA9IHRlc3RfaW5mby0+dGVzdF92X3N0YXJ0IC0KPiArCQl0ZXN0 X2luZm8tPnRlc3RfdnN5bmNfd2lkdGg7Cj4gKwlwaW5mby0+dl9mcm9udF9wb3JjaCA9IHRlc3Rf aW5mby0+dGVzdF92X3RvdGFsIC0KPiArCQkodGVzdF9pbmZvLT50ZXN0X3Zfc3RhcnQgKyB0ZXN0 X2luZm8tPnRlc3Rfdl9oZWlnaHQpOwo+ICsKPiArCXBpbmZvLT5icHAgPSBkcF9saW5rX2JpdF9k ZXB0aF90b19icHAodGVzdF9pbmZvLT50ZXN0X2JpdF9kZXB0aCk7Cj4gKwlwaW5mby0+aF9hY3Rp dmVfbG93ID0gdGVzdF9pbmZvLT50ZXN0X2hzeW5jX3BvbDsKPiArCXBpbmZvLT52X2FjdGl2ZV9s b3cgPSB0ZXN0X2luZm8tPnRlc3RfdnN5bmNfcG9sOwo+ICsKPiArCXBpbmZvLT5yZWZyZXNoX3Jh dGUgPSB0ZXN0X2luZm8tPnRlc3RfcnJfbjsKPiArCXBpbmZvLT5waXhlbF9jbGtfa2h6ID0gdGVz dF9pbmZvLT50ZXN0X2hfdG90YWwgKgo+ICsJCXRlc3RfaW5mby0+dGVzdF92X3RvdGFsICogcGlu Zm8tPnJlZnJlc2hfcmF0ZTsKPiArCj4gKwlpZiAodGVzdF9pbmZvLT50ZXN0X3JyX2QgPT0gMCkK PiArCQlwaW5mby0+cGl4ZWxfY2xrX2toeiAvPSAxMDAwOwo+ICsJZWxzZQo+ICsJCXBpbmZvLT5w aXhlbF9jbGtfa2h6IC89IDEwMDE7Cj4gKwo+ICsJaWYgKHRlc3RfaW5mby0+dGVzdF9oX3dpZHRo ID09IDY0MCkKPiArCQlwaW5mby0+cGl4ZWxfY2xrX2toeiA9IDI1MTcwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGRwX3BhbmVsX3VwZGF0ZV9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAo+ICsJc3RydWN0IGVkaWQgKmVkaWQpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwo+ ICsJcHJfZGVidWcoIiVzICsiLCBfX2Z1bmNfXyk7CgpyZW1vdmUKCk9rLCBzbyB0aGlzIGlzIHdo ZXJlIHlvdSBzaG91bGQgYmUgcmVhZGluZyBlZGlkLgoKPiArCWlmIChlZGlkKSB7Cj4gKwkJZHJt X2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsCj4gKwkJCWVkaWQpOwoK Sm9pbiBvbiBvbmUgbGluZSBhbmQgY2hlY2sgcmV0dXJuIHZhbHVlCgo+ICsJCXJjID0gZHJtX2Fk ZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7Cj4gKwkJcHJfZGVidWcoIiVzIC0iLCBfX2Z1 bmNfXyk7Cj4gKwkJcmV0dXJuIHJjOwo+ICsJfQo+ICsKPiArCWRybV9jb25uZWN0b3JfdXBkYXRl X2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBOVUxMKTsKCkNoZWNrIHJldHVybiB2YWx1ZQoKPiAr CXByX2RlYnVnKCIlcyBudWxsIGVkaWQgLSIsIF9fZnVuY19fKTsKPiArCXJldHVybiByYzsKClRo aXMgaXMgYWx3YXlzIDAKCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfcGFuZWxfZ2V0X21vZGVz KHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLCBzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICptb2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBf cGFuZWxfcHJpdmF0ZSAqcGFuZWw7Cj4gKwo+ICsJaWYgKCFkcF9wYW5lbCkgewo+ICsJCXByX2Vy cigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJ cGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBk cF9wYW5lbCk7Cj4gKwo+ICsJaWYgKGRwX3BhbmVsLT52aWRlb190ZXN0KSB7Cj4gKwkJZHBfcGFu ZWxfc2V0X3Rlc3RfbW9kZShwYW5lbCwgbW9kZSk7Cj4gKwkJcmV0dXJuIDE7Cj4gKwl9IGVsc2Ug aWYgKGRwX3BhbmVsLT5lZGlkKSB7Cj4gKwkgIHJldHVybiBkcF9wYW5lbF91cGRhdGVfbW9kZXMo Y29ubmVjdG9yLCBkcF9wYW5lbC0+ZWRpZCk7CgpJbmRlbnRhdGlvbiBpcyB3cm9uZwoKPiArCX0K PiArCj4gKwkvKiBmYWlsLXNhZmUgbW9kZSAqLwo+ICsJbWVtY3B5KCZtb2RlLT50aW1pbmcsICZm YWlsX3NhZmUsCj4gKwkJc2l6ZW9mKGZhaWxfc2FmZSkpOwo+ICsJcmV0dXJuIDE7CgpEZWxldGUg ZmFpbCBzYWZlIGFuZCByZXR1cm4gMDsKCj4gK30KPiArCj4gK3N0YXRpYyB1OCBkcF9wYW5lbF9n ZXRfZWRpZF9jaGVja3N1bShzdHJ1Y3QgZWRpZCAqZWRpZCkKPiArewo+ICsJc3RydWN0IGVkaWQg Kmxhc3RfYmxvY2sgPSBOVUxMOwo+ICsJdTggKnJhd19lZGlkID0gTlVMTDsKCk5vIG5lZWQgdG8g aW5pdGlhbGl6ZSB0aGVzZS4KCj4gKwo+ICsJaWYgKCFlZGlkKSB7Cj4gKwkJcHJfZXJyKCJpbnZh bGlkIGVkaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCXJhd19lZGlk ID0gKHU4ICopZWRpZDsKPiArCXJhd19lZGlkICs9IChlZGlkLT5leHRlbnNpb25zICogRURJRF9M RU5HVEgpOwo+ICsJbGFzdF9ibG9jayA9IChzdHJ1Y3QgZWRpZCAqKXJhd19lZGlkOwo+ICsKPiAr CWlmIChsYXN0X2Jsb2NrKQoKSSBkb3VidCBsYXN0X2Jsb2NrIHdpbGwgZXZlciBiZSBOVUxMLCBz byB0aGlzIGNoZWNrIGlzIGtpbmQgb2YgcG9pbnRsZXNzLgpQZXJoYXBzIGNhbGwgZHJtX2VkaWRf YmxvY2tfdmFsaWQoKSBpbnN0ZWFkLgoKPiArCQlyZXR1cm4gbGFzdF9ibG9jay0+Y2hlY2tzdW07 Cj4gKwo+ICsJcHJfZXJyKCJJbnZhbGlkIGJsb2NrLCBubyBjaGVja3N1bVxuIik7Cj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfcGFuZWxfaGFuZGxlX3NpbmtfcmVxdWVz dChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfcGFuZWxfcHJp dmF0ZSAqcGFuZWw7Cj4gKwo+ICsJaWYgKCFkcF9wYW5lbCkgewo+ICsJCXByX2VycigiaW52YWxp ZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXBhbmVsID0gY29udGFpbmVy X29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+ICsKPiAr CWlmIChwYW5lbC0+bGluay0+c2lua19yZXF1ZXN0ICYgRFBfVEVTVF9MSU5LX0VESURfUkVBRCkg ewo+ICsJCXU4IGNoZWNrc3VtID0gZHBfcGFuZWxfZ2V0X2VkaWRfY2hlY2tzdW0oZHBfcGFuZWwt PmVkaWQpOwo+ICsKPiArCQlwYW5lbC0+bGluay0+c2VuZF9lZGlkX2NoZWNrc3VtKHBhbmVsLT5s aW5rLCBjaGVja3N1bSk7Cj4gKwkJcGFuZWwtPmxpbmstPnNlbmRfdGVzdF9yZXNwb25zZShwYW5l bC0+bGluayk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX3BhbmVsX3RwZ19jb25m aWcoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCwgYm9vbCBlbmFibGUpCj4gK3sKPiArCXUzMiBo c3luY19zdGFydF94LCBoc3luY19lbmRfeDsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpj YXRhbG9nOwo+ICsJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOwo+ICsJc3RydWN0IGRw X3BhbmVsX2luZm8gKnBpbmZvOwo+ICsKPiArCWlmICghZHBfcGFuZWwpIHsKPiArCQlwcl9lcnIo ImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlwYW5lbCA9IGNv bnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsK PiArCWNhdGFsb2cgPSBwYW5lbC0+Y2F0YWxvZzsKPiArCXBpbmZvID0gJnBhbmVsLT5kcF9wYW5l bC5waW5mbzsKPiArCj4gKwlpZiAoIXBhbmVsLT5wYW5lbF9vbikgewo+ICsJCXByX2RlYnVnKCJE UCBwYW5lbCBub3QgZW5hYmxlZCwgaGFuZGxlIFRQRyBvbiBuZXh0IHBhbmVsIG9uXG4iKTsKPiAr CQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJaWYgKCFlbmFibGUpIHsKPiArCQlwYW5lbC0+Y2F0YWxv Zy0+dHBnX2NvbmZpZyhjYXRhbG9nLCBmYWxzZSk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiAr CS8qIFRQRyBjb25maWcgKi8KPiArCWNhdGFsb2ctPmhzeW5jX3BlcmlvZCA9IHBpbmZvLT5oX3N5 bmNfd2lkdGggKyBwaW5mby0+aF9iYWNrX3BvcmNoICsKPiArCQkJcGluZm8tPmhfYWN0aXZlICsg cGluZm8tPmhfZnJvbnRfcG9yY2g7Cj4gKwljYXRhbG9nLT52c3luY19wZXJpb2QgPSBwaW5mby0+ dl9zeW5jX3dpZHRoICsgcGluZm8tPnZfYmFja19wb3JjaCArCj4gKwkJCXBpbmZvLT52X2FjdGl2 ZSArIHBpbmZvLT52X2Zyb250X3BvcmNoOwo+ICsKPiArCWNhdGFsb2ctPmRpc3BsYXlfdl9zdGFy dCA9ICgocGluZm8tPnZfc3luY193aWR0aCArCj4gKwkJCXBpbmZvLT52X2JhY2tfcG9yY2gpICog Y2F0YWxvZy0+aHN5bmNfcGVyaW9kKTsKPiArCWNhdGFsb2ctPmRpc3BsYXlfdl9lbmQgPSAoKGNh dGFsb2ctPnZzeW5jX3BlcmlvZCAtCj4gKwkJCXBpbmZvLT52X2Zyb250X3BvcmNoKSAqIGNhdGFs b2ctPmhzeW5jX3BlcmlvZCkgLSAxOwo+ICsKPiArCWNhdGFsb2ctPmRpc3BsYXlfdl9zdGFydCAr PSBwaW5mby0+aF9zeW5jX3dpZHRoICsgcGluZm8tPmhfYmFja19wb3JjaDsKPiArCWNhdGFsb2ct PmRpc3BsYXlfdl9lbmQgLT0gcGluZm8tPmhfZnJvbnRfcG9yY2g7Cj4gKwo+ICsJaHN5bmNfc3Rh cnRfeCA9IHBpbmZvLT5oX2JhY2tfcG9yY2ggKyBwaW5mby0+aF9zeW5jX3dpZHRoOwo+ICsJaHN5 bmNfZW5kX3ggPSBjYXRhbG9nLT5oc3luY19wZXJpb2QgLSBwaW5mby0+aF9mcm9udF9wb3JjaCAt IDE7Cj4gKwo+ICsJY2F0YWxvZy0+dl9zeW5jX3dpZHRoID0gcGluZm8tPnZfc3luY193aWR0aDsK PiArCj4gKwljYXRhbG9nLT5oc3luY19jdGwgPSAoY2F0YWxvZy0+aHN5bmNfcGVyaW9kIDw8IDE2 KSB8Cj4gKwkJCXBpbmZvLT5oX3N5bmNfd2lkdGg7Cj4gKwljYXRhbG9nLT5kaXNwbGF5X2hjdGwg PSAoaHN5bmNfZW5kX3ggPDwgMTYpIHwgaHN5bmNfc3RhcnRfeDsKCk1vcmUgbW9kZSB0aW1pbmcg cGFyYW1ldGVycyB0byBkZWxldGUhCgo+ICsKPiArCXByX2VycigiJXM6IGNhbGxpbmcgY2F0YWxv ZyB0cGdfY29uZmlnXG4iLCBfX2Z1bmNfXyk7Cj4gKwlwYW5lbC0+Y2F0YWxvZy0+dHBnX2NvbmZp ZyhjYXRhbG9nLCB0cnVlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9wYW5lbF90aW1pbmdf Y2ZnKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwl1 MzIgZGF0YSwgdG90YWxfdmVyLCB0b3RhbF9ob3I7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wYW5l bCAqY2F0YWxvZzsKPiArCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKPiArCXN0cnVj dCBkcF9wYW5lbF9pbmZvICpwaW5mbzsKPiArCj4gKwlpZiAoIWRwX3BhbmVsKSB7Cj4gKwkJcHJf ZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlbmQ7 Cj4gKwl9Cj4gKwpUaGlzIGlzIGNhbGxlZCBmcm9tIDIgZGlmZmVyZW50IHBsYWNlcywgZG8geW91 IG5lZWQgbG9ja2luZz8KCj4gKwlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0 IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPiArCWNhdGFsb2cgPSBwYW5lbC0+Y2F0YWxv ZzsKPiArCXBpbmZvID0gJnBhbmVsLT5kcF9wYW5lbC5waW5mbzsKPiArCj4gKwlwcl9kZWJ1Zygi d2lkdGg9JWQgaHBvcmNoPSAlZCAlZCAlZFxuIiwKPiArCQlwaW5mby0+aF9hY3RpdmUsIHBpbmZv LT5oX2JhY2tfcG9yY2gsCj4gKwkJcGluZm8tPmhfZnJvbnRfcG9yY2gsIHBpbmZvLT5oX3N5bmNf d2lkdGgpOwo+ICsKPiArCXByX2RlYnVnKCJoZWlnaHQ9JWQgdnBvcmNoPSAlZCAlZCAlZFxuIiwK PiArCQlwaW5mby0+dl9hY3RpdmUsIHBpbmZvLT52X2JhY2tfcG9yY2gsCj4gKwkJcGluZm8tPnZf ZnJvbnRfcG9yY2gsIHBpbmZvLT52X3N5bmNfd2lkdGgpOwo+ICsKPiArCXRvdGFsX2hvciA9IHBp bmZvLT5oX2FjdGl2ZSArIHBpbmZvLT5oX2JhY2tfcG9yY2ggKwo+ICsJCXBpbmZvLT5oX2Zyb250 X3BvcmNoICsgcGluZm8tPmhfc3luY193aWR0aDsKPiArCj4gKwl0b3RhbF92ZXIgPSBwaW5mby0+ dl9hY3RpdmUgKyBwaW5mby0+dl9iYWNrX3BvcmNoICsKPiArCQkJcGluZm8tPnZfZnJvbnRfcG9y Y2ggKyBwaW5mby0+dl9zeW5jX3dpZHRoOwo+ICsKPiArCWRhdGEgPSB0b3RhbF92ZXI7Cj4gKwlk YXRhIDw8PSAxNjsKPiArCWRhdGEgfD0gdG90YWxfaG9yOwo+ICsKPiArCWNhdGFsb2ctPnRvdGFs ID0gZGF0YTsKPiArCj4gKwlkYXRhID0gKHBpbmZvLT52X2JhY2tfcG9yY2ggKyBwaW5mby0+dl9z eW5jX3dpZHRoKTsKPiArCWRhdGEgPDw9IDE2Owo+ICsJZGF0YSB8PSAocGluZm8tPmhfYmFja19w b3JjaCArIHBpbmZvLT5oX3N5bmNfd2lkdGgpOwo+ICsKPiArCWNhdGFsb2ctPnN5bmNfc3RhcnQg PSBkYXRhOwo+ICsKPiArCWRhdGEgPSBwaW5mby0+dl9zeW5jX3dpZHRoOwo+ICsJZGF0YSA8PD0g MTY7Cj4gKwlkYXRhIHw9IChwaW5mby0+dl9hY3RpdmVfbG93IDw8IDMxKTsKPiArCWRhdGEgfD0g cGluZm8tPmhfc3luY193aWR0aDsKPiArCWRhdGEgfD0gKHBpbmZvLT5oX2FjdGl2ZV9sb3cgPDwg MTUpOwo+ICsKPiArCWNhdGFsb2ctPndpZHRoX2JsYW5raW5nID0gZGF0YTsKPiArCj4gKwlkYXRh ID0gcGluZm8tPnZfYWN0aXZlOwo+ICsJZGF0YSA8PD0gMTY7Cj4gKwlkYXRhIHw9IHBpbmZvLT5o X2FjdGl2ZTsKPiArCj4gKwljYXRhbG9nLT5kcF9hY3RpdmUgPSBkYXRhOwo+ICsKPiArCXBhbmVs LT5jYXRhbG9nLT50aW1pbmdfY2ZnKGNhdGFsb2cpOwo+ICsJcGFuZWwtPnBhbmVsX29uID0gdHJ1 ZTsKCkFnYWluLCBhbGwgb2YgdGhpcyBzaG91bGQgYmUgZGVyaXZlZCBmcm9tIGEgZHJtX2Rpc3Bs YXlfbW9kZSBhdCB0aGUgcG9pbnQgd2hlcmUKaXQgaXMgY29tbWl0dGVkIHRvIGhhcmR3YXJlLiBO byBuZWVkIHRvIHN0b3JlIGl0IGluIGFub3RoZXIgZm9ybSBpbiB0aGUgaW50ZXJpbQoKCj4gK2Vu ZDoKPiArCXJldHVybiByYzsKClJlbW92ZSBlbmQvcmMgYW5kIHJldHVybiBkaXJlY3RseQoKPiAr fQo+ICsKPiArc3RhdGljIGludCBkcF9wYW5lbF9pbml0X3BhbmVsX2luZm8oc3RydWN0IGRwX3Bh bmVsICpkcF9wYW5lbCkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9wYW5lbF9p bmZvICpwaW5mbzsKPiArCj4gKwlpZiAoIWRwX3BhbmVsKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlk IGlucHV0XG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ ICsJcGluZm8gPSAmZHBfcGFuZWwtPnBpbmZvOwo+ICsKPiArCS8qCj4gKwkgKiBwcmludCByZXNv bHV0aW9uIGluZm8gYXMgdGhpcyBpcyBhIHJlc3VsdAo+ICsJICogb2YgdXNlciBpbml0aWF0ZWQg YWN0aW9uIG9mIGNhYmxlIGNvbm5lY3Rpb24KPiArCSAqLwo+ICsJcHJfaW5mbygiU0VUIE5FVyBS RVNPTFVUSU9OOlxuIik7Cj4gKwlwcl9pbmZvKCIlZHglZEAlZGZwc1xuIiwgcGluZm8tPmhfYWN0 aXZlLAo+ICsJCXBpbmZvLT52X2FjdGl2ZSwgcGluZm8tPnJlZnJlc2hfcmF0ZSk7Cj4gKwlwcl9p bmZvKCJoX3BvcmNoZXMoYmFja3xmcm9udHx3aWR0aCkgPSAoJWR8JWR8JWQpXG4iLAo+ICsJCQlw aW5mby0+aF9iYWNrX3BvcmNoLAo+ICsJCQlwaW5mby0+aF9mcm9udF9wb3JjaCwKPiArCQkJcGlu Zm8tPmhfc3luY193aWR0aCk7Cj4gKwlwcl9pbmZvKCJ2X3BvcmNoZXMoYmFja3xmcm9udHx3aWR0 aCkgPSAoJWR8JWR8JWQpXG4iLAo+ICsJCQlwaW5mby0+dl9iYWNrX3BvcmNoLAo+ICsJCQlwaW5m by0+dl9mcm9udF9wb3JjaCwKPiArCQkJcGluZm8tPnZfc3luY193aWR0aCk7Cj4gKwlwcl9pbmZv KCJwaXhlbCBjbG9jayAoS0h6KT0oJWQpXG4iLCBwaW5mby0+cGl4ZWxfY2xrX2toeik7Cj4gKwlw cl9pbmZvKCJicHAgPSAlZFxuIiwgcGluZm8tPmJwcCk7Cj4gKwlwcl9pbmZvKCJhY3RpdmUgbG93 IChofHYpPSglZHwlZClcbiIsIHBpbmZvLT5oX2FjdGl2ZV9sb3csCj4gKwkJcGluZm8tPnZfYWN0 aXZlX2xvdyk7Cj4gKwo+ICsJcGluZm8tPmJwcCA9IG1heF90KHUzMiwgMTgsIG1pbl90KHUzMiwg cGluZm8tPmJwcCwgMzApKTsKPiArCXByX2luZm8oInVwZGF0ZWQgYnBwID0gJWRcbiIsIHBpbmZv LT5icHApOwoKCk5vIGluZm8gbGV2ZWwgbG9ncywgcGxlYXNlLgoKPiArZW5kOgo+ICsJcmV0dXJu IHJjOwoKUmVtb3ZlIGVuZC9yYyBhbmQgcmV0dXJuIGRpcmVjdGx5Cgo+ICt9Cj4gKwo+ICtzdGF0 aWMgdTMyIGRwX3BhbmVsX2dldF9taW5fcmVxX2xpbmtfcmF0ZShzdHJ1Y3QgZHBfcGFuZWwgKmRw X3BhbmVsKQo+ICt7Cj4gKwljb25zdCB1MzIgZW5jb2RpbmdfZmFjdHgxMCA9IDg7Cj4gKwl1MzIg bWluX2xpbmtfcmF0ZV9raHogPSAwLCBsYW5lX2NudDsKPiArCXN0cnVjdCBkcF9wYW5lbF9pbmZv ICpwaW5mbzsKPiArCj4gKwlpZiAoIWRwX3BhbmVsKSB7CgpUaGUgb25seSB3YXkgdG8gY2FsbCB0 aGlzIGZ1bmN0aW9uIGlzIHRocm91Z2ggYSBkcF9wYW5lbCBjYWxsYmFjaywgYW5kIHlldCB3ZQpj aGVjayBpZiBkcF9wYW5lbCBpcyBOVUxMIDopCgpUaGUgc2FtZSBpcyB0cnVlIGZvciBtb3N0IGZ1 bmN0aW9ucyBpbiB0aGlzIHBhdGNoLiBUaGluZ3Mgd2lsbCBiZSBhIGxvdCBzaW1wbGVyCndoZW4g YWxsIG9mIHRoZXNlIGFyZSByZW1vdmVkLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm8gbG9uZ2VyIGhh dmUgYW4gZXJyb3IgcGF0aAphbmQgbGFuZV9jbnQvcGluZm8gY2FuIGJlIGluaXRpYWxpemVkIGRp cmVjdGx5IGFib3ZlLgoKCj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlnb3Rv IGVuZDsKPiArCX0KPiArCj4gKwlsYW5lX2NudCA9IGRwX3BhbmVsLT5saW5rX2luZm8ubnVtX2xh bmVzOwo+ICsJcGluZm8gPSAmZHBfcGFuZWwtPnBpbmZvOwo+ICsKPiArCS8qIG51bV9sYW5lcyAq IGxhbmVfY291bnQgKiA4ID49IHBjbGsgKiBicHAgKiAxMCAqLwo+ICsJbWluX2xpbmtfcmF0ZV9r aHogPSBwaW5mby0+cGl4ZWxfY2xrX2toeiAvCj4gKwkJCQkobGFuZV9jbnQgKiBlbmNvZGluZ19m YWN0eDEwKTsKPiArCW1pbl9saW5rX3JhdGVfa2h6ICo9IHBpbmZvLT5icHA7Cj4gKwo+ICsJcHJf ZGVidWcoIm1pbiBsY2xrIHJlcT0lZCBraHogZm9yIHBjbGs9JWQga2h6LCBsYW5lcz0lZCwgYnBw PSVkXG4iLAo+ICsJCW1pbl9saW5rX3JhdGVfa2h6LCBwaW5mby0+cGl4ZWxfY2xrX2toeiwgbGFu ZV9jbnQsCj4gKwkJcGluZm8tPmJwcCk7Cj4gK2VuZDoKPiArCXJldHVybiBtaW5fbGlua19yYXRl X2toejsKClJlbW92ZSBlbmQgYW5kIHJldHVybiBkaXJlY3RseSBhYm92ZQoKPiArfQo+ICsKPiAr c3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbF9nZXQoc3RydWN0IGRwX3BhbmVsX2luICppbikKPiAr ewo+ICsJaW50IHJjID0gMDsKPiArCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKPiAr CXN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWw7Cj4gKwo+ICsJaWYgKCFpbi0+ZGV2IHx8ICFpbi0+ Y2F0YWxvZyB8fCAhaW4tPmF1eCB8fCAhaW4tPmxpbmspIHsKPiArCQlwcl9lcnIoImludmFsaWQg aW5wdXRcbiIpOwo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsK PiArCXBhbmVsID0gZGV2bV9remFsbG9jKGluLT5kZXYsIHNpemVvZigqcGFuZWwpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghcGFuZWwpIHsKPiArCQlyYyA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJv cjsKPiArCX0KPiArCj4gKwlwYW5lbC0+ZGV2ID0gaW4tPmRldjsKPiArCXBhbmVsLT5hdXggPSBp bi0+YXV4Owo+ICsJcGFuZWwtPmNhdGFsb2cgPSBpbi0+Y2F0YWxvZzsKPiArCXBhbmVsLT5saW5r ID0gaW4tPmxpbms7Cj4gKwo+ICsJZHBfcGFuZWwgPSAmcGFuZWwtPmRwX3BhbmVsOwo+ICsJZHBf cGFuZWwtPm1heF9id19jb2RlID0gRFBfTElOS19CV184XzE7Cj4gKwlwYW5lbC0+YXV4X2NmZ191 cGRhdGVfZG9uZSA9IGZhbHNlOwo+ICsKPiArCWRwX3BhbmVsLT5pbml0X2luZm8gPSBkcF9wYW5l bF9pbml0X3BhbmVsX2luZm87Cj4gKwlkcF9wYW5lbC0+dGltaW5nX2NmZyA9IGRwX3BhbmVsX3Rp bWluZ19jZmc7Cj4gKwlkcF9wYW5lbC0+cmVhZF9zaW5rX2NhcHMgPSBkcF9wYW5lbF9yZWFkX3Np bmtfY2FwczsKPiArCWRwX3BhbmVsLT5nZXRfbWluX3JlcV9saW5rX3JhdGUgPSBkcF9wYW5lbF9n ZXRfbWluX3JlcV9saW5rX3JhdGU7Cj4gKwlkcF9wYW5lbC0+Z2V0X21vZGVfYnBwID0gZHBfcGFu ZWxfZ2V0X21vZGVfYnBwOwo+ICsJZHBfcGFuZWwtPmdldF9tb2RlcyA9IGRwX3BhbmVsX2dldF9t b2RlczsKPiArCWRwX3BhbmVsLT5oYW5kbGVfc2lua19yZXF1ZXN0ID0gZHBfcGFuZWxfaGFuZGxl X3NpbmtfcmVxdWVzdDsKPiArCWRwX3BhbmVsLT50cGdfY29uZmlnID0gZHBfcGFuZWxfdHBnX2Nv bmZpZzsKPiArCj4gKwlyZXR1cm4gZHBfcGFuZWw7Cj4gK2Vycm9yOgo+ICsJcmV0dXJuIEVSUl9Q VFIocmMpOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX3BhbmVsX3B1dChzdHJ1Y3QgZHBfcGFuZWwgKmRw X3BhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7Cj4gKwo+ICsJ aWYgKCFkcF9wYW5lbCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJcGFuZWwgPSBjb250YWluZXJfb2Yo ZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7Cj4gKwo+ICsJa2Zy ZWUoZHBfcGFuZWwtPmVkaWQpOwo+ICsJZHBfcGFuZWwtPmVkaWQgPSBOVUxMOwo+ICsJZGV2bV9r ZnJlZShwYW5lbC0+ZGV2LCBwYW5lbCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9wYW5lbC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5o Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5iZjgwMmRmCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaAo+IEBAIC0w LDAgKzEsMTIxIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0RQX1BBTkVMX0hfCj4gKyNkZWZp bmUgX0RQX1BBTkVMX0hfCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL21zbV9kcm0uaD4KPiArCj4gKyNp bmNsdWRlICJkcF9hdXguaCIKPiArI2luY2x1ZGUgImRwX2xpbmsuaCIKPiArI2luY2x1ZGUgImRw X2V4dGNvbi5oIgo+ICsKPiArc3RydWN0IGVkaWQ7Cj4gKwo+ICtlbnVtIGRwX2xhbmVfY291bnQg ewo+ICsJRFBfTEFORV9DT1VOVF8xCT0gMSwKPiArCURQX0xBTkVfQ09VTlRfMgk9IDIsCj4gKwlE UF9MQU5FX0NPVU5UXzQJPSA0LAo+ICt9OwoKWW91IGRvbid0IG5lZWQgYW4gZW51bSBmb3IgdGhp cywgdGhlIHZhbHVlIGNvbWluZyBmcm9tIGRwY2QgaXMganVzdCBhbiBpbnRlZ2VyIGFuZApjYW4g YmUgdXNlZCBhcyBzdWNoLgoKPiArCj4gKyNkZWZpbmUgRFBfTUFYX0RPV05TVFJFQU1fUE9SVFMg MHgxMAo+ICsKPiArc3RydWN0IGRwX3BhbmVsX2luZm8gewo+ICsJdTMyIGhfYWN0aXZlOwo+ICsJ dTMyIHZfYWN0aXZlOwo+ICsJdTMyIGhfYmFja19wb3JjaDsKPiArCXUzMiBoX2Zyb250X3BvcmNo Owo+ICsJdTMyIGhfc3luY193aWR0aDsKPiArCXUzMiBoX2FjdGl2ZV9sb3c7Cj4gKwl1MzIgdl9i YWNrX3BvcmNoOwo+ICsJdTMyIHZfZnJvbnRfcG9yY2g7Cj4gKwl1MzIgdl9zeW5jX3dpZHRoOwo+ ICsJdTMyIHZfYWN0aXZlX2xvdzsKPiArCXUzMiBoX3NrZXc7Cj4gKwl1MzIgcmVmcmVzaF9yYXRl Owo+ICsJdTMyIHBpeGVsX2Nsa19raHo7Cj4gKwl1MzIgYnBwOwo+ICt9OwoKRHJvcCB0aGlzIHN0 cnVjdCBhbmQgdXNlIGRybV9kaXNwbGF5X21vZGUKCgo+ICsKPiArc3RydWN0IGRwX2Rpc3BsYXlf bW9kZSB7Cj4gKwlzdHJ1Y3QgZHBfcGFuZWxfaW5mbyB0aW1pbmc7Cj4gKwl1MzIgY2FwYWJpbGl0 aWVzOwo+ICt9Owo+ICsKPiArc3RydWN0IGRwX3BhbmVsX2luIHsKPiArCXN0cnVjdCBkZXZpY2Ug KmRldjsKPiArCXN0cnVjdCBkcF9hdXggKmF1eDsKPiArCXN0cnVjdCBkcF9saW5rICpsaW5rOwo+ ICsJc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKmNhdGFsb2c7Cj4gK307Cj4gKwo+ICtzdHJ1Y3Qg ZHBfcGFuZWwgewo+ICsJLyogZHBjZCByYXcgZGF0YSAqLwo+ICsJdTggZHBjZFtEUF9SRUNFSVZF Ul9DQVBfU0laRSArIDFdOwoKV2h5ICsgMT8KCj4gKwl1OCBkc19wb3J0c1tEUF9NQVhfRE9XTlNU UkVBTV9QT1JUU107Cj4gKwo+ICsJc3RydWN0IGRybV9kcF9saW5rIGxpbmtfaW5mbzsKPiArCXN0 cnVjdCBlZGlkICplZGlkOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiAr CXN0cnVjdCBkcF9wYW5lbF9pbmZvIHBpbmZvOwo+ICsJYm9vbCB2aWRlb190ZXN0Owo+ICsKPiAr CXUzMiB2aWM7Cj4gKwl1MzIgbWF4X3BjbGtfa2h6Owo+ICsKPiArCXUzMiBtYXhfYndfY29kZTsK PiArCWludCAoKmluaXRfaW5mbykoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7Cj4gKwlpbnQg KCpkZWluaXQpKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpOwo+ICsJaW50ICgqdGltaW5nX2Nm Zykoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7Cj4gKwlpbnQgKCpyZWFkX3NpbmtfY2Fwcyko c3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCwKPiArCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKTsKPiArCXUzMiAoKmdldF9taW5fcmVxX2xpbmtfcmF0ZSkoc3RydWN0IGRwX3BhbmVs ICpkcF9wYW5lbCk7CgpUaGlzIGZ1bmN0aW9uIGlzbid0IGNhbGxlZCBhbnl3aGVyZQoKPiArCXUz MiAoKmdldF9tb2RlX2JwcCkoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCwgdTMyIG1vZGVfbWF4 X2JwcCwKPiArCQkJdTMyIG1vZGVfcGNsa19raHopOwo+ICsJaW50ICgqZ2V0X21vZGVzKShzdHJ1 Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+ICsJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsIHN0cnVjdCBkcF9kaXNwbGF5X21vZGUgKm1vZGUpOwo+ICsJdm9pZCAoKmhhbmRsZV9zaW5r X3JlcXVlc3QpKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpOwo+ICsJdm9pZCAoKnRwZ19jb25m aWcpKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsIGJvb2wgZW5hYmxlKTsKPiArfTsKPiArCj4g Ky8qKgo+ICsgKiBpc19saW5rX3JhdGVfdmFsaWQoKSAtIHZhbGlkYXRlcyB0aGUgbGluayByYXRl Cj4gKyAqIEBsYW5lX3JhdGU6IGxpbmsgcmF0ZSByZXF1ZXN0ZWQgYnkgdGhlIHNpbmsKPiArICoK PiArICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgbGluayByYXRlIGlzIHN1cHBvcnRl ZC4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19saW5rX3JhdGVfdmFsaWQodTMyIGJ3 X2NvZGUpCj4gK3sKPiArCXJldHVybiAoKGJ3X2NvZGUgPT0gRFBfTElOS19CV18xXzYyKSB8fAo+ ICsJCShid19jb2RlID09IERQX0xJTktfQldfMl83KSB8fAo+ICsJCShid19jb2RlID09IERQX0xJ TktfQldfNV80KSB8fAo+ICsJCShid19jb2RlID09IERQX0xJTktfQldfOF8xKSk7CgpFYWNoIG9m IHRoZXNlIGNvbmRpdGlvbnMgaGFzIHVubmVlZGVkICgpCgo+ICt9Cj4gKwo+ICsvKioKPiArICog ZHBfbGlua19pc19sYW5lX2NvdW50X3ZhbGlkKCkgLSB2YWxpZGF0ZXMgdGhlIGxhbmUgY291bnQK PiArICogQGxhbmVfY291bnQ6IGxhbmUgY291bnQgcmVxdWVzdGVkIGJ5IHRoZSBzaW5rCj4gKyAq Cj4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGxhbmUgY291bnQgaXMgc3VwcG9y dGVkLgo+ICsgKi8KPiArc3RhdGljIGlubGluZSBib29sIGlzX2xhbmVfY291bnRfdmFsaWQodTMy IGxhbmVfY291bnQpCj4gK3sKPiArCXJldHVybiAobGFuZV9jb3VudCA9PSBEUF9MQU5FX0NPVU5U XzEpIHx8Cj4gKwkJKGxhbmVfY291bnQgPT0gRFBfTEFORV9DT1VOVF8yKSB8fAo+ICsJCShsYW5l X2NvdW50ID09IERQX0xBTkVfQ09VTlRfNCk7Cj4gK30KPiArCj4gK3N0cnVjdCBkcF9wYW5lbCAq ZHBfcGFuZWxfZ2V0KHN0cnVjdCBkcF9wYW5lbF9pbiAqaW4pOwo+ICt2b2lkIGRwX3BhbmVsX3B1 dChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKPiArI2VuZGlmIC8qIF9EUF9QQU5FTF9IXyAq Lwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uYTM2NmRjNQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX3BhcnNlci5jCj4gQEAgLTAsMCArMSw2NzkgQEAKPiArLyoKPiArICog Q29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPiArICog b25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqLwo+ICsK PiArI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+ICsK PiArI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KPiArCj4gKyNpbmNsdWRlICJkcF9wYXJzZXIu aCIKPiArCj4gK3N0YXRpYyB2b2lkIGRwX3BhcnNlcl91bm1hcF9pb19yZXNvdXJjZXMoc3RydWN0 IGRwX3BhcnNlciAqcGFyc2VyKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfaW8gKmlvID0gJnBhcnNlci0+ aW87Cj4gKwo+ICsJbXNtX2Rzc19pb3VubWFwKCZpby0+ZHBfYWhiKTsKPiArCW1zbV9kc3NfaW91 bm1hcCgmaW8tPmRwX2F1eCk7Cj4gKwltc21fZHNzX2lvdW5tYXAoJmlvLT5kcF9saW5rKTsKPiAr CW1zbV9kc3NfaW91bm1hcCgmaW8tPmRwX3AwKTsKPiArCW1zbV9kc3NfaW91bm1hcCgmaW8tPnBo eV9pbyk7Cj4gKwltc21fZHNzX2lvdW5tYXAoJmlvLT5sbl90eDBfaW8pOwo+ICsJbXNtX2Rzc19p b3VubWFwKCZpby0+bG5fdHgwX2lvKTsKPiArCW1zbV9kc3NfaW91bm1hcCgmaW8tPmRwX3BsbF9p byk7Cj4gKwltc21fZHNzX2lvdW5tYXAoJmlvLT5kcF9jY19pbyk7Cj4gKwltc21fZHNzX2lvdW5t YXAoJmlvLT51c2IzX2RwX2NvbSk7Cj4gKwltc21fZHNzX2lvdW5tYXAoJmlvLT5xZnByb21faW8p Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX3BhcnNlcl9jdHJsX3JlcyhzdHJ1Y3QgZHBfcGFy c2VyICpwYXJzZXIpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwl1MzIgaW5kZXg7Cj4gKwlzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcGFyc2VyLT5wZGV2Owo+ICsJc3RydWN0IGRldmlj ZV9ub2RlICpvZl9ub2RlID0gcGFyc2VyLT5wZGV2LT5kZXYub2Zfbm9kZTsKPiArCXN0cnVjdCBk cF9pbyAqaW8gPSAmcGFyc2VyLT5pbzsKPiArCj4gKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMy KG9mX25vZGUsICJjZWxsLWluZGV4IiwgJmluZGV4KTsKPiArCWlmIChyYykgewo+ICsJCXByX2Vy cigiY2VsbC1pbmRleCBub3Qgc3BlY2lmaWVkLCByYz0lZFxuIiwgcmMpOwo+ICsJCWdvdG8gZXJy OwoKVGhpcyBjYW4gYmUgYSBkaXJlY3QgcmV0dXJuIG9mIHJjLgoKPiArCX0KPiArCj4gKwlyYyA9 IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5kcF9haGIsICJkcF9haGIiKTsKPiAr CWlmIChyYykgewo+ICsJCXByX2VycigidW5hYmxlIHRvIHJlbWFwIGRwIGlvIHJlc291cmNlc1xu Iik7CgpQcmludCByYyBoZXJlIGFuZCBiZWxvdy4KCj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ ICsJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+ZHBfYXV4LCAiZHBfYXV4 Iik7Cj4gKwlpZiAocmMpIHsKPiArCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBpbyByZXNv dXJjZXNcbiIpOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCXJjID0gbXNtX2Rzc19pb3Jl bWFwX2J5bmFtZShwZGV2LCAmaW8tPmRwX2xpbmssICJkcF9saW5rIik7Cj4gKwlpZiAocmMpIHsK PiArCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBpbyByZXNvdXJjZXNcbiIpOwo+ICsJCWdv dG8gZXJyOwo+ICsJfQo+ICsKPiArCXJjID0gbXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAm aW8tPmRwX3AwLCAiZHBfcDAiKTsKPiArCWlmIChyYykgewo+ICsJCXByX2VycigidW5hYmxlIHRv IHJlbWFwIGRwIGlvIHJlc291cmNlc1xuIik7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJ cmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+cGh5X2lvLCAiZHBfcGh5Iik7 Cj4gKwlpZiAocmMpIHsKPiArCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBQSFkgcmVzb3Vy Y2VzXG4iKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlyYyA9IG1zbV9kc3NfaW9yZW1h cF9ieW5hbWUocGRldiwgJmlvLT5sbl90eDBfaW8sICJkcF9sbl90eDAiKTsKPiArCWlmIChyYykg ewo+ICsJCXByX2VycigidW5hYmxlIHRvIHJlbWFwIGRwIFRYMCByZXNvdXJjZXNcbiIpOwo+ICsJ CWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCXJjID0gbXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2 LCAmaW8tPmxuX3R4MV9pbywgImRwX2xuX3R4MSIpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJcHJfZXJy KCJ1bmFibGUgdG8gcmVtYXAgZHAgVFgxIHJlc291cmNlc1xuIik7Cj4gKwkJZ290byBlcnI7Cj4g Kwl9Cj4gKwo+ICsJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+ZHBfcGxs X2lvLCAiZHBfcGxsIik7Cj4gKwlpZiAocmMpIHsKPiArCQlwcl9lcnIoInVuYWJsZSB0byByZW1h cCBEUCBQTEwgcmVzb3VyY2VzXG4iKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlyYyA9 IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT51c2IzX2RwX2NvbSwgInVzYjNfZHBf Y29tIik7Cj4gKwlpZiAocmMpIHsKPiArCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBVU0IzIERQ IGNvbSByZXNvdXJjZXNcbiIpOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCWlmIChtc21f ZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+ZHBfY2NfaW8sICJkcF9tbXNzX2NjIikpIHsK PiArCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBNTVNTX0NDIHJlc291cmNlc1xuIik7Cj4g KwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJaWYgKG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRl diwgJmlvLT5xZnByb21faW8sICJxZnByb21fcGh5c2ljYWwiKSkKPiArCQlwcl93YXJuKCJ1bmFi bGUgdG8gcmVtYXAgZHAgcWZwcm9tIHJlc291cmNlc1xuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K2VycjoKPiArCWRwX3BhcnNlcl91bm1hcF9pb19yZXNvdXJjZXMocGFyc2VyKTsKPiArCXJldHVy biByYzsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKmRwX2dldF9waHlfYXV4X2NvbmZp Z19wcm9wZXJ0eSh1MzIgY2ZnX3R5cGUpCj4gK3sKPiArCXN3aXRjaCAoY2ZnX3R5cGUpIHsKPiAr CWNhc2UgUEhZX0FVWF9DRkcwOgo+ICsJCXJldHVybiAicWNvbSxhdXgtY2ZnMC1zZXR0aW5ncyI7 Cj4gKwljYXNlIFBIWV9BVVhfQ0ZHMToKPiArCQlyZXR1cm4gInFjb20sYXV4LWNmZzEtc2V0dGlu Z3MiOwo+ICsJY2FzZSBQSFlfQVVYX0NGRzI6Cj4gKwkJcmV0dXJuICJxY29tLGF1eC1jZmcyLXNl dHRpbmdzIjsKPiArCWNhc2UgUEhZX0FVWF9DRkczOgo+ICsJCXJldHVybiAicWNvbSxhdXgtY2Zn My1zZXR0aW5ncyI7Cj4gKwljYXNlIFBIWV9BVVhfQ0ZHNDoKPiArCQlyZXR1cm4gInFjb20sYXV4 LWNmZzQtc2V0dGluZ3MiOwo+ICsJY2FzZSBQSFlfQVVYX0NGRzU6Cj4gKwkJcmV0dXJuICJxY29t LGF1eC1jZmc1LXNldHRpbmdzIjsKPiArCWNhc2UgUEhZX0FVWF9DRkc2Ogo+ICsJCXJldHVybiAi cWNvbSxhdXgtY2ZnNi1zZXR0aW5ncyI7Cj4gKwljYXNlIFBIWV9BVVhfQ0ZHNzoKPiArCQlyZXR1 cm4gInFjb20sYXV4LWNmZzctc2V0dGluZ3MiOwo+ICsJY2FzZSBQSFlfQVVYX0NGRzg6Cj4gKwkJ cmV0dXJuICJxY29tLGF1eC1jZmc4LXNldHRpbmdzIjsKPiArCWNhc2UgUEhZX0FVWF9DRkc5Ogo+ ICsJCXJldHVybiAicWNvbSxhdXgtY2ZnOS1zZXR0aW5ncyI7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJl dHVybiAidW5rbm93biI7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX3BhcnNlcl9w aHlfYXV4X2NmZ19yZXNldChzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCj4gK3sKPiArCWludCBp ID0gMDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgUEhZX0FVWF9DRkdfTUFYOyBpKyspCj4gKwkJ cGFyc2VyLT5hdXhfY2ZnW2ldID0gKGNvbnN0IHN0cnVjdCBkcF9hdXhfY2ZnKXsgMCB9Owo+ICt9 CgpObyBuZWVkIGZvciBhIHNlcGFyYXRlIGZ1bmN0aW9uLCBqdXN0IHB1dCB0aGUgbG9vcCBpbiB0 aGUgZXJyb3IgbGFiZWwgYmVsb3cuCgo+ICsKPiArc3RhdGljIGludCBkcF9wYXJzZXJfYXV4KHN0 cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKPiArewo+ICsJc3RydWN0IGRldmljZV9ub2RlICpvZl9u b2RlID0gcGFyc2VyLT5wZGV2LT5kZXYub2Zfbm9kZTsKPiArCWludCBsZW4gPSAwLCBpID0gMCwg aiA9IDAsIGNvbmZpZ19jb3VudCA9IDA7Cj4gKwljb25zdCBjaGFyICpkYXRhOwo+ICsJaW50IGNv bnN0IG1pbmltdW1fY29uZmlnX2NvdW50ID0gMTsKCkp1c3QgdXNlIDEgZGlyZWN0bHkKCj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IFBIWV9BVVhfQ0ZHX01BWDsgaSsrKSB7Cj4gKwkJY29uc3QgY2hh ciAqcHJvcGVydHkgPSBkcF9nZXRfcGh5X2F1eF9jb25maWdfcHJvcGVydHkoaSk7Cj4gKwo+ICsJ CWRhdGEgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgcHJvcGVydHksICZsZW4pOwo+ICsJCWlm ICghZGF0YSkgewoKWW91IHNob3VsZCB1c2Ugb2ZfcHJvcGVydHlfcmVhZF91MzIoKSBpbnN0ZWFk IG9mIHJlYWRpbmcgYXMgYSBzdHJpbmcKCj4gKwkJCXByX2VycigiVW5hYmxlIHRvIHJlYWQgJXNc biIsIHByb3BlcnR5KTsKPiArCQkJZ290byBlcnJvcjsKPiArCQl9Cj4gKwo+ICsJCWNvbmZpZ19j b3VudCA9IGxlbiAtIDE7Cj4gKwkJaWYgKChjb25maWdfY291bnQgPCBtaW5pbXVtX2NvbmZpZ19j b3VudCkgfHwKPiArCQkJKGNvbmZpZ19jb3VudCA+IERQX0FVWF9DRkdfTUFYX1ZBTFVFX0NOVCkp IHsKClJlbW92ZSBleHRyYSAoKQoKPiArCQkJcHJfZXJyKCJJbnZhbGlkIGNvbmZpZyBjb3VudCAo JWQpIGNvbmZpZ3MgZm9yICVzXG4iLAo+ICsJCQkJCWNvbmZpZ19jb3VudCwgcHJvcGVydHkpOwo+ ICsJCQlnb3RvIGVycm9yOwo+ICsJCX0KPiArCj4gKwkJcGFyc2VyLT5hdXhfY2ZnW2ldLm9mZnNl dCA9IGRhdGFbMF07Cj4gKwkJcGFyc2VyLT5hdXhfY2ZnW2ldLmNmZ19jbnQgPSBjb25maWdfY291 bnQ7Cj4gKwkJcHJfZGVidWcoIiVzIG9mZnNldD0weCV4LCBjZmdfY250PSVkXG4iLAo+ICsJCQkJ cHJvcGVydHksCj4gKwkJCQlwYXJzZXItPmF1eF9jZmdbaV0ub2Zmc2V0LAo+ICsJCQkJcGFyc2Vy LT5hdXhfY2ZnW2ldLmNmZ19jbnQpOwo+ICsJCWZvciAoaiA9IDE7IGogPCBsZW47IGorKykgewo+ ICsJCQlwYXJzZXItPmF1eF9jZmdbaV0ubHV0W2ogLSAxXSA9IGRhdGFbal07CgpBbmQgdGhpcyBj b3VsZCB1c2Ugb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoKQoKPiArCQkJcHJfZGVidWcoIiVz IGx1dFslZF09MHgleFxuIiwKPiArCQkJCQlwcm9wZXJ0eSwKPiArCQkJCQlpLAo+ICsJCQkJCXBh cnNlci0+YXV4X2NmZ1tpXS5sdXRbaiAtIDFdKTsKPiArCQl9Cj4gKwl9Cj4gKwkJcmV0dXJuIDA7 Cj4gKwo+ICtlcnJvcjoKPiArCWRwX3BhcnNlcl9waHlfYXV4X2NmZ19yZXNldChwYXJzZXIpOwo+ ICsJcmV0dXJuIC1FSU5WQUw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfcGFyc2VyX21pc2Mo c3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0 IGRldmljZV9ub2RlICpvZl9ub2RlID0gcGFyc2VyLT5wZGV2LT5kZXYub2Zfbm9kZTsKPiArCj4g KwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsCj4gKwkJInFjb20sbWF4LXBjbGst ZnJlcXVlbmN5LWtoeiIsICZwYXJzZXItPm1heF9wY2xrX2toeik7Cj4gKwlpZiAocmMpCj4gKwkJ cGFyc2VyLT5tYXhfcGNsa19raHogPSBEUF9NQVhfUElYRUxfQ0xLX0tIWjsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9wYXJzZXJfcGluY3RybChzdHJ1Y3QgZHBf cGFyc2VyICpwYXJzZXIpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfcGluY3Ry bCAqcGluY3RybCA9ICZwYXJzZXItPnBpbmN0cmw7Cj4gKwo+ICsJcGluY3RybC0+cGluID0gZGV2 bV9waW5jdHJsX2dldCgmcGFyc2VyLT5wZGV2LT5kZXYpOwo+ICsKPiArCWlmIChJU19FUlJfT1Jf TlVMTChwaW5jdHJsLT5waW4pKSB7Cj4gKwkJcmMgPSBQVFJfRVJSKHBpbmN0cmwtPnBpbik7Cj4g KwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHBpbmN0cmwsIHJjPSVkXG4iLCByYyk7Cj4gKwkJZ290 byBlcnJvcjsKPiArCX0KPiArCj4gKwlwaW5jdHJsLT5zdGF0ZV9hY3RpdmUgPSBwaW5jdHJsX2xv b2t1cF9zdGF0ZShwaW5jdHJsLT5waW4sCj4gKwkJCQkJIm1kc3NfZHBfYWN0aXZlIik7Cj4gKwlp ZiAoSVNfRVJSX09SX05VTEwocGluY3RybC0+c3RhdGVfYWN0aXZlKSkgewo+ICsJCXJjID0gUFRS X0VSUihwaW5jdHJsLT5zdGF0ZV9hY3RpdmUpOwoKV2hhdCBpZiBpdCdzIE5VTEw/Cgo+ICsJCXBy X2VycigiZmFpbGVkIHRvIGdldCBwaW5jdHJsIGFjdGl2ZSBzdGF0ZSwgcmM9JWRcbiIsIHJjKTsK PiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCXBpbmN0cmwtPnN0YXRlX3N1c3BlbmQgPSBw aW5jdHJsX2xvb2t1cF9zdGF0ZShwaW5jdHJsLT5waW4sCj4gKwkJCQkJIm1kc3NfZHBfc2xlZXAi KTsKPiArCWlmIChJU19FUlJfT1JfTlVMTChwaW5jdHJsLT5zdGF0ZV9zdXNwZW5kKSkgewo+ICsJ CXJjID0gUFRSX0VSUihwaW5jdHJsLT5zdGF0ZV9zdXNwZW5kKTsKCldoYXQgaWYgaXQncyBOVUxM PwoKPiArCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgcGluY3RybCBzdXNwZW5kIHN0YXRlLCByYz0l ZFxuIiwgcmMpOwo+ICsJCWdvdG8gZXJyb3I7Cj4gKwl9Cj4gK2Vycm9yOgo+ICsJcmV0dXJuIHJj Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX3BhcnNlcl9ncGlvKHN0cnVjdCBkcF9wYXJzZXIg KnBhcnNlcikKPiArewo+ICsJaW50IGkgPSAwOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBh cnNlci0+cGRldi0+ZGV2Owo+ICsJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlID0gZGV2LT5v Zl9ub2RlOwo+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJnBhcnNlci0+bXBbRFBf Q09SRV9QTV07Cj4gKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRwX2dwaW9zW10gPSB7Cj4g KwkJInFjb20sYXV4LWVuLWdwaW8iLAo+ICsJCSJxY29tLGF1eC1zZWwtZ3BpbyIsCj4gKwkJInFj b20sdXNicGx1Zy1jYy1ncGlvIiwKPiArCX07Cj4gKwo+ICsJbXAtPmdwaW9fY29uZmlnID0gZGV2 bV9remFsbG9jKGRldiwKPiArCQlzaXplb2Yoc3RydWN0IGRzc19ncGlvKSAqIEFSUkFZX1NJWkUo ZHBfZ3Bpb3MpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbXAtPmdwaW9fY29uZmlnKQo+ICsJCXJl dHVybiAtRU5PTUVNOwo+ICsKPiArCW1wLT5udW1fZ3BpbyA9IEFSUkFZX1NJWkUoZHBfZ3Bpb3Mp OwoKSWYgeW91IGRvIHRoaXMgZmlyc3QsIHlvdSBjYW4gcy9BUlJBWV9TSVpFKGRwX2dwaW9zKS9t cC0+bnVtX2dwaW8vIGluIHRoZSByZXN0Cm9mIHRoZSBmdW5jdGlvbi4KCj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoZHBfZ3Bpb3MpOyBpKyspIHsKPiArCQltcC0+Z3Bpb19jb25m aWdbaV0uZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG9mX25vZGUsCj4gKwkJCWRwX2dwaW9zW2ld LCAwKTsKPiArCj4gKwkJaWYgKCFncGlvX2lzX3ZhbGlkKG1wLT5ncGlvX2NvbmZpZ1tpXS5ncGlv KSkgewo+ICsJCQlwcl9lcnIoIiVzIGdwaW8gbm90IHNwZWNpZmllZFxuIiwgZHBfZ3Bpb3NbaV0p Owo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJCXN0cmxjcHkobXAtPmdwaW9f Y29uZmlnW2ldLmdwaW9fbmFtZSwgZHBfZ3Bpb3NbaV0sCj4gKwkJCXNpemVvZihtcC0+Z3Bpb19j b25maWdbaV0uZ3Bpb19uYW1lKSk7CgpBcyBtZW50aW9uZWQgZWFybGllciwgcGxlYXNlIGRvbid0 IGltcGxlbWVudCB5b3VyIG93biBzdHJpbmcgc3RvcmUvbG9va3VwLCBqdXN0CnByb3ZpZGUgYWNj ZXNzIHRvIHRoZSBncGlvcyBpbiBhIG1vcmUgZGlyZWN0IG1hbm5lciAocG9pbnRlciBvciBmdW5j dGlvbikuCgo+ICsKPiArCQltcC0+Z3Bpb19jb25maWdbaV0udmFsdWUgPSAwOwo+ICsJfQo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqZHBfcGFyc2VyX3N1 cHBseV9ub2RlX25hbWUoZW51bSBkcF9wbV90eXBlIG1vZHVsZSkKPiArewo+ICsJc3dpdGNoICht b2R1bGUpIHsKPiArCWNhc2UgRFBfQ09SRV9QTToJcmV0dXJuICJxY29tLGNvcmUtc3VwcGx5LWVu dHJpZXMiOwo+ICsJY2FzZSBEUF9DVFJMX1BNOglyZXR1cm4gInFjb20sY3RybC1zdXBwbHktZW50 cmllcyI7Cj4gKwljYXNlIERQX1BIWV9QTToJCXJldHVybiAicWNvbSxwaHktc3VwcGx5LWVudHJp ZXMiOwo+ICsJZGVmYXVsdDoJCXJldHVybiAiPz8/IjsKPiArCX0KPiArfQo+ICsKPiArc3RhdGlj IGludCBkcF9wYXJzZXJfZ2V0X3ZyZWcoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyLAo+ICsJCWVu dW0gZHBfcG1fdHlwZSBtb2R1bGUpCj4gK3sKPiArCWludCBpID0gMCwgcmMgPSAwOwo+ICsJdTMy IHRtcCA9IDA7Cj4gKwljb25zdCBjaGFyICpwbV9zdXBwbHlfbmFtZSA9IE5VTEw7Cj4gKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKnN1cHBseV9ub2RlID0gTlVMTDsKPiArCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqb2Zfbm9kZSA9IHBhcnNlci0+cGRldi0+ZGV2Lm9mX25vZGU7Cj4gKwlzdHJ1Y3QgZGV2aWNl X25vZGUgKnN1cHBseV9yb290X25vZGUgPSBOVUxMOwo+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93 ZXIgKm1wID0gJnBhcnNlci0+bXBbbW9kdWxlXTsKPiArCj4gKwltcC0+bnVtX3ZyZWcgPSAwOwo+ ICsJcG1fc3VwcGx5X25hbWUgPSBkcF9wYXJzZXJfc3VwcGx5X25vZGVfbmFtZShtb2R1bGUpOwo+ ICsJc3VwcGx5X3Jvb3Rfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG9mX25vZGUsIHBtX3N1 cHBseV9uYW1lKTsKPiArCWlmICghc3VwcGx5X3Jvb3Rfbm9kZSkgewo+ICsJCXByX2Vycigibm8g c3VwcGx5IGVudHJ5IHByZXNlbnQ6ICVzXG4iLCBwbV9zdXBwbHlfbmFtZSk7Cj4gKwkJZ290byBu b3ZyZWc7Cj4gKwl9Cj4gKwo+ICsJbXAtPm51bV92cmVnID0gb2ZfZ2V0X2F2YWlsYWJsZV9jaGls ZF9jb3VudChzdXBwbHlfcm9vdF9ub2RlKTsKPiArCj4gKwlpZiAobXAtPm51bV92cmVnID09IDAp IHsKPiArCQlwcl9kZWJ1Zygibm8gdnJlZ1xuIik7Cj4gKwkJZ290byBub3ZyZWc7Cj4gKwl9IGVs c2Ugewo+ICsJCXByX2RlYnVnKCJ2cmVnIGZvdW5kLiBjb3VudD0lZFxuIiwgbXAtPm51bV92cmVn KTsKClRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIHdyYXBwZWQgaW4gYW4gZWxzZQoKPiArCX0KPiAr Cj4gKwltcC0+dnJlZ19jb25maWcgPSBkZXZtX2t6YWxsb2MoJnBhcnNlci0+cGRldi0+ZGV2LAo+ ICsJCXNpemVvZihzdHJ1Y3QgZHNzX3ZyZWcpICogbXAtPm51bV92cmVnLCBHRlBfS0VSTkVMKTsK PiArCWlmICghbXAtPnZyZWdfY29uZmlnKSB7Cj4gKwkJcmMgPSAtRU5PTUVNOwo+ICsJCWdvdG8g ZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShzdXBwbHlfcm9vdF9u b2RlLCBzdXBwbHlfbm9kZSkgewo+ICsJCWNvbnN0IGNoYXIgKnN0ID0gTlVMTDsKPiArCQkvKiB2 cmVnLW5hbWUgKi8KPiArCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKHN1cHBseV9ub2Rl LAo+ICsJCQkicWNvbSxzdXBwbHktbmFtZSIsICZzdCk7Cj4gKwkJaWYgKHJjKSB7Cj4gKwkJCXBy X2VycigiZXJyb3IgcmVhZGluZyBuYW1lLiByYz0lZFxuIiwKPiArCQkJCSByYyk7Cj4gKwkJCWdv dG8gZXJyb3I7Cj4gKwkJfQo+ICsJCXNucHJpbnRmKG1wLT52cmVnX2NvbmZpZ1tpXS52cmVnX25h bWUsCj4gKwkJCUFSUkFZX1NJWkUoKG1wLT52cmVnX2NvbmZpZ1tpXS52cmVnX25hbWUpKSwgIiVz Iiwgc3QpOwoKSW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBuYW1lIGp1c3QgdG8gZ2V0IGEgcmVndWxh dG9yIHJlZmVyZW5jZSBsYXRlciwgd2h5IGRvbid0CnlvdSBqdXN0IGdyYWIgdGhlIHJlZmVyZW5j ZSBub3cgYW5kIGF2b2lkIHRoZSBzdHJpbmcgb3BzPwoKPiArCQkvKiB2cmVnLW1pbi12b2x0YWdl ICovCj4gKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihzdXBwbHlfbm9kZSwKPiArCQkJInFj b20sc3VwcGx5LW1pbi12b2x0YWdlIiwgJnRtcCk7Cj4gKwkJaWYgKHJjKSB7Cj4gKwkJCXByX2Vy cigiZXJyb3IgcmVhZGluZyBtaW4gdm9sdC4gcmM9JWRcbiIsCj4gKwkJCQlyYyk7Cj4gKwkJCWdv dG8gZXJyb3I7Cj4gKwkJfQo+ICsJCW1wLT52cmVnX2NvbmZpZ1tpXS5taW5fdm9sdGFnZSA9IHRt cDsKPiArCj4gKwkJLyogdnJlZy1tYXgtdm9sdGFnZSAqLwo+ICsJCXJjID0gb2ZfcHJvcGVydHlf cmVhZF91MzIoc3VwcGx5X25vZGUsCj4gKwkJCSJxY29tLHN1cHBseS1tYXgtdm9sdGFnZSIsICZ0 bXApOwo+ICsJCWlmIChyYykgewo+ICsJCQlwcl9lcnIoImVycm9yIHJlYWRpbmcgbWF4IHZvbHQu IHJjPSVkXG4iLAo+ICsJCQkJcmMpOwo+ICsJCQlnb3RvIGVycm9yOwo+ICsJCX0KPiArCQltcC0+ dnJlZ19jb25maWdbaV0ubWF4X3ZvbHRhZ2UgPSB0bXA7Cj4gKwo+ICsJCS8qIGVuYWJsZS1sb2Fk ICovCj4gKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihzdXBwbHlfbm9kZSwKPiArCQkJInFj b20sc3VwcGx5LWVuYWJsZS1sb2FkIiwgJnRtcCk7Cj4gKwkJaWYgKHJjKSB7Cj4gKwkJCXByX2Vy cigiZXJyb3IgcmVhZGluZyBlbmFibGUgbG9hZC4gcmM9JWRcbiIsCj4gKwkJCQlyYyk7Cj4gKwkJ CWdvdG8gZXJyb3I7Cj4gKwkJfQo+ICsJCW1wLT52cmVnX2NvbmZpZ1tpXS5lbmFibGVfbG9hZCA9 IHRtcDsKPiArCj4gKwkJLyogZGlzYWJsZS1sb2FkICovCj4gKwkJcmMgPSBvZl9wcm9wZXJ0eV9y ZWFkX3UzMihzdXBwbHlfbm9kZSwKPiArCQkJInFjb20sc3VwcGx5LWRpc2FibGUtbG9hZCIsICZ0 bXApOwo+ICsJCWlmIChyYykgewo+ICsJCQlwcl9lcnIoImVycm9yIHJlYWRpbmcgZGlzYWJsZSBs b2FkLiByYz0lZFxuIiwKPiArCQkJCXJjKTsKPiArCQkJZ290byBlcnJvcjsKPiArCQl9Cj4gKwkJ bXAtPnZyZWdfY29uZmlnW2ldLmRpc2FibGVfbG9hZCA9IHRtcDsKPiArCj4gKwkJcHJfZGVidWco IiVzIG1pbj0lZCwgbWF4PSVkLCBlbmFibGU9JWQsIGRpc2FibGU9JWRcbiIsCj4gKwkJCW1wLT52 cmVnX2NvbmZpZ1tpXS52cmVnX25hbWUsCj4gKwkJCW1wLT52cmVnX2NvbmZpZ1tpXS5taW5fdm9s dGFnZSwKPiArCQkJbXAtPnZyZWdfY29uZmlnW2ldLm1heF92b2x0YWdlLAo+ICsJCQltcC0+dnJl Z19jb25maWdbaV0uZW5hYmxlX2xvYWQsCj4gKwkJCW1wLT52cmVnX2NvbmZpZ1tpXS5kaXNhYmxl X2xvYWQKPiArCQkJKTsKPiArCQkrK2k7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJjOwo+ICsKPiAr ZXJyb3I6Cj4gKwlpZiAobXAtPnZyZWdfY29uZmlnKSB7Cj4gKwkJZGV2bV9rZnJlZSgmcGFyc2Vy LT5wZGV2LT5kZXYsIG1wLT52cmVnX2NvbmZpZyk7Cj4gKwkJbXAtPnZyZWdfY29uZmlnID0gTlVM TDsKPiArCX0KClRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgdGhhdCdzIHRoZSBuaWNlIHRo aW5nIGFib3V0IGRldmljZSBtYW5hZ2VkCnJlc291cmNlcy4KCj4gK25vdnJlZzoKPiArCW1wLT5u dW1fdnJlZyA9IDA7Cj4gKwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBk cF9wYXJzZXJfcHV0X3ZyZWdfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwlzdHJ1Y3QgZHNz X21vZHVsZV9wb3dlciAqbXApCj4gK3sKPiArCWlmICghbXApIHsKPiArCQlERVZfRVJSKCJpbnZh bGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJaWYgKG1wLT52cmVnX2Nv bmZpZykgewo+ICsJCWRldm1fa2ZyZWUoZGV2LCBtcC0+dnJlZ19jb25maWcpOwo+ICsJCW1wLT52 cmVnX2NvbmZpZyA9IE5VTEw7Cj4gKwl9CgpTYW1lIGhlcmUsIHRoaXMgZnVuY3Rpb24gY2FuIGdv IGF3YXkgb25jZSB5b3UgdGFrZSBvdXQgdGhlIGRwX3BhcnNlcgphYnN0cmFjdGlvbiBsYXllci4K Cj4gKwltcC0+bnVtX3ZyZWcgPSAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX3BhcnNlcl9y ZWd1bGF0b3Ioc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQo+ICt7Cj4gKwlpbnQgaSwgcmMgPSAw Owo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHBhcnNlci0+cGRldjsKPiArCj4g KwkvKiBQYXJzZSB0aGUgcmVndWxhdG9yIGluZm9ybWF0aW9uICovCj4gKwlmb3IgKGkgPSBEUF9D T1JFX1BNOyBpIDwgRFBfTUFYX1BNOyBpKyspIHsKPiArCQlyYyA9IGRwX3BhcnNlcl9nZXRfdnJl ZyhwYXJzZXIsIGkpOwo+ICsJCWlmIChyYykgewo+ICsJCQlwcl9lcnIoImdldF9kdF92cmVnX2Rh dGEgZmFpbGVkIGZvciAlcy4gcmM9JWRcbiIsCj4gKwkJCQlkcF9wYXJzZXJfcG1fbmFtZShpKSwg cmMpOwo+ICsJCQlpLS07Cj4gKwkJCWZvciAoOyBpID49IERQX0NPUkVfUE07IGktLSkKPiArCQkJ CWRwX3BhcnNlcl9wdXRfdnJlZ19kYXRhKCZwZGV2LT5kZXYsCj4gKwkJCQkJJnBhcnNlci0+bXBb aV0pOwo+ICsJCQlicmVhazsKCkFuZCBoZXJlIHlvdSBjYW4ganVzdCByZXR1cm4gdGhlIGVycm9y IGRpcmVjdGx5IGFuZCB0aGUgcmVzb3VyY2VzIHdpbGwgYmUgZnJlZWQKbWFnaWNhbGx5LgoKPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJjOwoKQW5kIHRoaXMgYmVjb21lcyByZXR1cm4gMDsK Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGRwX3BhcnNlcl9jaGVja19wcmVmaXgoY29uc3QgY2hh ciAqY2xrX3ByZWZpeCwgY29uc3QgY2hhciAqY2xrX25hbWUpCj4gK3sKPiArCXJldHVybiAhIXN0 cm5zdHIoY2xrX25hbWUsIGNsa19wcmVmaXgsIHN0cmxlbihjbGtfbmFtZSkpOwoKVGhpcyBpcyBs aWtlbHkgbm90IHdoYXQgeW91IHdhbnQgc2luY2UgdGhpcyB3aWxsIGxvb2sgZm9yIHByZWZpeCBf YW55d2hlcmVfIGluCmNsayBuYW1lLiBBbiBleGFtcGxlIG9mIGhvdyB0aGlzIGNvdWxkIGdvIHNp ZGV3YXlzOgoKCWRwX3BhcnNlcl9jaGVja19wcmVmaXgoImNvcmUiLCAiY29yZS1kcC1wb3dlci1j dHJsIik7CglkcF9wYXJzZXJfY2hlY2tfcHJlZml4KCJjdHJsIiwgImNvcmUtZHAtcG93ZXItY3Ry bCIpOwoKQm90aCByZXR1cm4gdHJ1ZS4KCkFueXdheXMsIHN0cm5jbXAgaXMgYSBiZXR0ZXIgY2hv aWNlIGhlcmUgKGlmIHdlIG11c3QgZG8gc3RyaW5nIG9wZXJhdGlvbnMpLgoKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgZHBfcGFyc2VyX3B1dF9jbGtfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4g KwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXApCj4gK3sKPiArCWlmICghbXApIHsKPiArCQlE RVZfRVJSKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOwo+ICsJCXJldHVybjsKPiAr CX0KPiArCj4gKwlpZiAobXAtPmNsa19jb25maWcpIHsKPiArCQlkZXZtX2tmcmVlKGRldiwgbXAt PmNsa19jb25maWcpOwo+ICsJCW1wLT5jbGtfY29uZmlnID0gTlVMTDsKPiArCX0KPiArCj4gKwlt cC0+bnVtX2NsayA9IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX3BhcnNlcl9wdXRfZ3Bp b19kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICpt cCkKPiArewo+ICsJaWYgKCFtcCkgewo+ICsJCURFVl9FUlIoIiVzOiBpbnZhbGlkIGlucHV0XG4i LCBfX2Z1bmNfXyk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWlmIChtcC0+Z3Bpb19jb25m aWcpIHsKPiArCQlkZXZtX2tmcmVlKGRldiwgbXAtPmdwaW9fY29uZmlnKTsKPiArCQltcC0+Z3Bp b19jb25maWcgPSBOVUxMOwo+ICsJfQo+ICsKPiArCW1wLT5udW1fZ3BpbyA9IDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgZHBfcGFyc2VyX2luaXRfY2xrX2RhdGEoc3RydWN0IGRwX3BhcnNlciAq cGFyc2VyKQo+ICt7Cj4gKwlpbnQgbnVtX2NsayA9IDAsIGkgPSAwLCByYyA9IDA7Cj4gKwlpbnQg Y29yZV9jbGtfY291bnQgPSAwLCBjdHJsX2Nsa19jb3VudCA9IDA7Cj4gKwljb25zdCBjaGFyICpj b3JlX2NsayA9ICJjb3JlIjsKPiArCWNvbnN0IGNoYXIgKmN0cmxfY2xrID0gImN0cmwiOwo+ICsJ Y29uc3QgY2hhciAqY2xrX25hbWU7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGFyc2VyLT5w ZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqY29yZV9wb3dlciA9ICZwYXJz ZXItPm1wW0RQX0NPUkVfUE1dOwo+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKmN0cmxfcG93 ZXIgPSAmcGFyc2VyLT5tcFtEUF9DVFJMX1BNXTsKPiArCj4gKwludW1fY2xrID0gb2ZfcHJvcGVy dHlfY291bnRfc3RyaW5ncyhkZXYtPm9mX25vZGUsICJjbG9jay1uYW1lcyIpOwo+ICsJaWYgKG51 bV9jbGsgPD0gMCkgewo+ICsJCXByX2Vycigibm8gY2xvY2tzIGFyZSBkZWZpbmVkXG4iKTsKPiAr CQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCBudW1fY2xrOyBpKyspIHsKPiArCQlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChk ZXYtPm9mX25vZGUsCj4gKwkJCQkiY2xvY2stbmFtZXMiLCBpLCAmY2xrX25hbWUpOwoKQ2hlY2sg cmV0dXJuIHZhbHVlCgo+ICsKPiArCQlpZiAoZHBfcGFyc2VyX2NoZWNrX3ByZWZpeChjb3JlX2Ns aywgY2xrX25hbWUpKQo+ICsJCQljb3JlX2Nsa19jb3VudCsrOwo+ICsKPiArCQlpZiAoZHBfcGFy c2VyX2NoZWNrX3ByZWZpeChjdHJsX2NsaywgY2xrX25hbWUpKQo+ICsJCQljdHJsX2Nsa19jb3Vu dCsrOwoKSnVzdCB1c2UgImNvcmUiLyJjdHJsIiBkaXJlY3RseSBoZXJlLgoKSGF2ZSB5b3UgY29u c2lkZXJlZCBqdXN0IGhhdmluZyAyIGNsb2NrIGxpc3RzPyBUaGF0IHdvdWxkIGF2b2lkIGhhdmlu ZyB0byBkbwp0aGlzLgoKPiArCX0KPiArCj4gKwkvKiBJbml0aWFsaXplIHRoZSBDT1JFIHBvd2Vy IG1vZHVsZSAqLwo+ICsJaWYgKGNvcmVfY2xrX2NvdW50IDw9IDApIHsKCkhvdyBkb2VzIHRoaXMg Z2V0IGJlbG93IDA/Cgo+ICsJCXByX2Vycigibm8gY29yZSBjbG9ja3MgYXJlIGRlZmluZWRcbiIp Owo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwo+ICsJY29yZV9w b3dlci0+bnVtX2NsayA9IGNvcmVfY2xrX2NvdW50Owo+ICsJY29yZV9wb3dlci0+Y2xrX2NvbmZp ZyA9IGRldm1fa3phbGxvYyhkZXYsCj4gKwkJCXNpemVvZihzdHJ1Y3QgZHNzX2NsaykgKiBjb3Jl X3Bvd2VyLT5udW1fY2xrLAo+ICsJCQlHRlBfS0VSTkVMKTsKPiArCWlmICghY29yZV9wb3dlci0+ Y2xrX2NvbmZpZykgewo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4g Kwo+ICsJLyogSW5pdGlhbGl6ZSB0aGUgQ1RSTCBwb3dlciBtb2R1bGUgKi8KPiArCWlmIChjdHJs X2Nsa19jb3VudCA8PSAwKSB7CgpIb3cgZG9lcyB0aGlzIGdldCBiZWxvdyAwPwoKPiArCQlwcl9l cnIoIm5vIGN0cmwgY2xvY2tzIGFyZSBkZWZpbmVkXG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4g KwkJZ290byBjdHJsX2Nsb2NrX2Vycm9yOwo+ICsJfQo+ICsKPiArCWN0cmxfcG93ZXItPm51bV9j bGsgPSBjdHJsX2Nsa19jb3VudDsKPiArCWN0cmxfcG93ZXItPmNsa19jb25maWcgPSBkZXZtX2t6 YWxsb2MoZGV2LAo+ICsJCQlzaXplb2Yoc3RydWN0IGRzc19jbGspICogY3RybF9wb3dlci0+bnVt X2NsaywKPiArCQkJR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWN0cmxfcG93ZXItPmNsa19jb25maWcp IHsKPiArCQljdHJsX3Bvd2VyLT5udW1fY2xrID0gMDsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJ Z290byBjdHJsX2Nsb2NrX2Vycm9yOwo+ICsJfQo+ICsKPiArCXJldHVybiByYzsKPiArCj4gK2N0 cmxfY2xvY2tfZXJyb3I6Cj4gKwlkcF9wYXJzZXJfcHV0X2Nsa19kYXRhKGRldiwgY29yZV9wb3dl cik7Cj4gK2V4aXQ6Cj4gKwlyZXR1cm4gcmM7CgpKdXN0IHJldHVybiBkaXJlY3RseSBhbmQgZGVs ZXRlIGV4aXQKCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfcGFyc2VyX2Nsb2NrKHN0cnVjdCBk cF9wYXJzZXIgKnBhcnNlcikKPiArewo+ICsJaW50IHJjID0gMCwgaSA9IDA7Cj4gKwlpbnQgbnVt X2NsayA9IDA7Cj4gKwlpbnQgY29yZV9jbGtfaW5kZXggPSAwLCBjdHJsX2Nsa19pbmRleCA9IDA7 Cj4gKwlpbnQgY29yZV9jbGtfY291bnQgPSAwLCBjdHJsX2Nsa19jb3VudCA9IDA7Cj4gKwljb25z dCBjaGFyICpjbGtfbmFtZTsKPiArCWNvbnN0IGNoYXIgKmNvcmVfY2xrID0gImNvcmUiOwo+ICsJ Y29uc3QgY2hhciAqY3RybF9jbGsgPSAiY3RybCI7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm cGFyc2VyLT5wZGV2LT5kZXY7CgotLS0tIFNUQVJUIGhtbW1tCgo+ICsJc3RydWN0IGRzc19tb2R1 bGVfcG93ZXIgKmNvcmVfcG93ZXIgPSAmcGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKPiArCXN0cnVj dCBkc3NfbW9kdWxlX3Bvd2VyICpjdHJsX3Bvd2VyID0gJnBhcnNlci0+bXBbRFBfQ1RSTF9QTV07 Cj4gKwo+ICsJY29yZV9wb3dlciA9ICZwYXJzZXItPm1wW0RQX0NPUkVfUE1dOwo+ICsJY3RybF9w b3dlciA9ICZwYXJzZXItPm1wW0RQX0NUUkxfUE1dOwoKLS0tLSBFTkQgaG1tbW0KCj4gKwo+ICsJ cmMgPSAgZHBfcGFyc2VyX2luaXRfY2xrX2RhdGEocGFyc2VyKTsKPiArCWlmIChyYykgewo+ICsJ CXByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgcG93ZXIgZGF0YVxuIik7Cj4gKwkJcmMgPSAt RUlOVkFMOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwljb3JlX2Nsa19jb3VudCA9IGNv cmVfcG93ZXItPm51bV9jbGs7Cj4gKwljdHJsX2Nsa19jb3VudCA9IGN0cmxfcG93ZXItPm51bV9j bGs7Cj4gKwo+ICsJbnVtX2NsayA9IGNvcmVfY2xrX2NvdW50ICsgY3RybF9jbGtfY291bnQ7Cj4g Kwo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jbGs7IGkrKykgewo+ICsJCW9mX3Byb3BlcnR5X3Jl YWRfc3RyaW5nX2luZGV4KGRldi0+b2Zfbm9kZSwgImNsb2NrLW5hbWVzIiwKPiArCQkJCWksICZj bGtfbmFtZSk7CgpDaGVjayByZXR1cm4gdmFsdWUKCj4gKwo+ICsJCWlmIChkcF9wYXJzZXJfY2hl Y2tfcHJlZml4KGNvcmVfY2xrLCBjbGtfbmFtZSkgJiYKPiArCQkJCWNvcmVfY2xrX2luZGV4IDwg Y29yZV9jbGtfY291bnQpIHsKPiArCQkJc3RydWN0IGRzc19jbGsgKmNsayA9Cj4gKwkJCQkmY29y ZV9wb3dlci0+Y2xrX2NvbmZpZ1tjb3JlX2Nsa19pbmRleF07Cj4gKwkJCXN0cmxjcHkoY2xrLT5j bGtfbmFtZSwgY2xrX25hbWUsIHNpemVvZihjbGstPmNsa19uYW1lKSk7Cj4gKwkJCWNsay0+dHlw ZSA9IERTU19DTEtfQUhCOwo+ICsJCQljb3JlX2Nsa19pbmRleCsrOwo+ICsJCX0gZWxzZSBpZiAo ZHBfcGFyc2VyX2NoZWNrX3ByZWZpeChjdHJsX2NsaywgY2xrX25hbWUpICYmCj4gKwkJCSAgIGN0 cmxfY2xrX2luZGV4IDwgY3RybF9jbGtfY291bnQpIHsKPiArCQkJc3RydWN0IGRzc19jbGsgKmNs ayA9Cj4gKwkJCQkmY3RybF9wb3dlci0+Y2xrX2NvbmZpZ1tjdHJsX2Nsa19pbmRleF07Cj4gKwkJ CXN0cmxjcHkoY2xrLT5jbGtfbmFtZSwgY2xrX25hbWUsIHNpemVvZihjbGstPmNsa19uYW1lKSk7 Cj4gKwkJCWN0cmxfY2xrX2luZGV4Kys7Cj4gKwo+ICsJCQlpZiAoIXN0cmNtcChjbGtfbmFtZSwg ImN0cmxfbGlua19jbGsiKSB8fAo+ICsJCQkgICAgIXN0cmNtcChjbGtfbmFtZSwgImN0cmxfcGl4 ZWxfY2xrIikpCgpzdHJuY21wCgo+ICsJCQkJY2xrLT50eXBlID0gRFNTX0NMS19QQ0xLOwo+ICsJ CQllbHNlCj4gKwkJCQljbGstPnR5cGUgPSBEU1NfQ0xLX0FIQjsKPiArCQl9Cj4gKwl9Cj4gKwo+ ICsJcHJfZGVidWcoImNsb2NrIHBhcnNpbmcgc3VjY2Vzc2Z1bFxuIik7Cj4gKwo+ICtleGl0OgoK RGVsZXRlIHRoZSBsYWJlbCBhbmQgcmV0dXJuIGRpcmVjdGx5Cgo+ICsJcmV0dXJuIHJjOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGRwX3BhcnNlcl9wYXJzZShzdHJ1Y3QgZHBfcGFyc2VyICpwYXJz ZXIpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwo+ICsJaWYgKCFwYXJzZXIpIHsKPiArCQlwcl9l cnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycjsK PiArCX0KPiArCj4gKwlyYyA9IGRwX3BhcnNlcl9jdHJsX3JlcyhwYXJzZXIpOwo+ICsJaWYgKHJj KQo+ICsJCWdvdG8gZXJyOwo+ICsKPiArCXJjID0gZHBfcGFyc2VyX2F1eChwYXJzZXIpOwo+ICsJ aWYgKHJjKQo+ICsJCWdvdG8gZXJyOwo+ICsKPiArCXJjID0gZHBfcGFyc2VyX21pc2MocGFyc2Vy KTsKPiArCWlmIChyYykKPiArCQlnb3RvIGVycjsKPiArCj4gKwlyYyA9IGRwX3BhcnNlcl9jbG9j ayhwYXJzZXIpOwo+ICsJaWYgKHJjKQo+ICsJCWdvdG8gZXJyOwo+ICsKPiArCXJjID0gZHBfcGFy c2VyX3JlZ3VsYXRvcihwYXJzZXIpOwo+ICsJaWYgKHJjKQo+ICsJCWdvdG8gZXJyOwo+ICsKPiAr CXJjID0gZHBfcGFyc2VyX2dwaW8ocGFyc2VyKTsKPiArCWlmIChyYykKPiArCQlnb3RvIGVycjsK PiArCj4gKwlyYyA9IGRwX3BhcnNlcl9waW5jdHJsKHBhcnNlcik7Cj4gK2VycjoKCkRlbGV0ZSB0 aGUgbGFiZWwgYW5kIHJldHVybiBkaXJlY3RseQoKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiAr c3RydWN0IGRwX3BhcnNlciAqZHBfcGFyc2VyX2dldChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7Cj4gKwo+ICsJcGFyc2VyID0g ZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcGFyc2VyKSwgR0ZQX0tFUk5FTCk7Cj4g KwlpZiAoIXBhcnNlcikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlwYXJz ZXItPnBhcnNlID0gZHBfcGFyc2VyX3BhcnNlOwo+ICsJcGFyc2VyLT5wZGV2ID0gcGRldjsKPiAr Cj4gKwlyZXR1cm4gcGFyc2VyOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX3BhcnNlcl9wdXQoc3RydWN0 IGRwX3BhcnNlciAqcGFyc2VyKQo+ICt7Cj4gKwlpbnQgaSA9IDA7Cj4gKwlzdHJ1Y3QgZHNzX21v ZHVsZV9wb3dlciAqcG93ZXIgPSBOVUxMOwo+ICsKPiArCWlmICghcGFyc2VyKSB7Cj4gKwkJcHJf ZXJyKCJpbnZhbGlkIHBhcnNlciBtb2R1bGVcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4g Kwlwb3dlciA9IHBhcnNlci0+bXA7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IERQX01BWF9QTTsg aSsrKSB7Cj4gKwkJZHBfcGFyc2VyX3B1dF9jbGtfZGF0YSgmcGFyc2VyLT5wZGV2LT5kZXYsICZw b3dlcltpXSk7Cj4gKwkJZHBfcGFyc2VyX3B1dF92cmVnX2RhdGEoJnBhcnNlci0+cGRldi0+ZGV2 LCAmcG93ZXJbaV0pOwo+ICsJCWRwX3BhcnNlcl9wdXRfZ3Bpb19kYXRhKCZwYXJzZXItPnBkZXYt PmRldiwgJnBvd2VyW2ldKTsKPiArCX0KPiArCj4gKwlkZXZtX2tmcmVlKCZwYXJzZXItPnBkZXYt PmRldiwgcGFyc2VyKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX3BhcnNlci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaAo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYjM5ZWEwMgo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5oCj4gQEAgLTAsMCArMSwy MDUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhbmQKPiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Cj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfRFBfUEFSU0VSX0hfCj4gKyNkZWZpbmUgX0RQ X1BBUlNFUl9IXwo+ICsKPiArI2luY2x1ZGUgImRwdV9pb191dGlsLmgiCj4gKwo+ICsjZGVmaW5l IERQX0xBQkVMICJNRFNTIERQIERJU1BMQVkiCj4gKyNkZWZpbmUgQVVYX0NGR19MRU4JMTAKPiAr I2RlZmluZSBEUF9NQVhfUElYRUxfQ0xLX0tIWgk2NzUwMDAKPiArCj4gK2VudW0gZHBfcG1fdHlw ZSB7Cj4gKwlEUF9DT1JFX1BNLAo+ICsJRFBfQ1RSTF9QTSwKPiArCURQX1BIWV9QTSwKPiArCURQ X01BWF9QTQo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkcF9wYXJzZXJf cG1fbmFtZShlbnVtIGRwX3BtX3R5cGUgbW9kdWxlKQo+ICt7Cj4gKwlzd2l0Y2ggKG1vZHVsZSkg ewo+ICsJY2FzZSBEUF9DT1JFX1BNOglyZXR1cm4gIkRQX0NPUkVfUE0iOwo+ICsJY2FzZSBEUF9D VFJMX1BNOglyZXR1cm4gIkRQX0NUUkxfUE0iOwo+ICsJY2FzZSBEUF9QSFlfUE06CQlyZXR1cm4g IkRQX1BIWV9QTSI7Cj4gKwlkZWZhdWx0OgkJcmV0dXJuICI/Pz8iOwo+ICsJfQo+ICt9CgpEZWxl dGUgdGhlIGZ1bmN0aW9uIGFuZCBqdXN0IHByaW50IHRoZSBlbnVtIHZhbHVlCgo+ICsKPiArLyoq Cj4gKyAqIHN0cnVjdCBkcF9kaXNwbGF5X2RhdGEgIC0gZGlzcGxheSByZWxhdGVkIGRldmljZSB0 cmVlIGRhdGEuCj4gKyAqCj4gKyAqIEBjdHJsX25vZGU6IHJlZmVyZWNlIHRvIGNvbnRyb2xsZXIg ZGV2aWNlCj4gKyAqIEBwaHlfbm9kZTogIHJlZmVyZW5jZSB0byBwaHkgZGV2aWNlCj4gKyAqIEBp c19hY3RpdmU6IGlzIHRoZSBjb250cm9sbGVyIGN1cnJlbnRseSBhY3RpdmUKPiArICogQG5hbWU6 IG5hbWUgb2YgdGhlIGRpc3BsYXkKPiArICogQGRpc3BsYXlfdHlwZTogdHlwZSBvZiB0aGUgZGlz cGxheQo+ICsgKi8KPiArc3RydWN0IGRwX2Rpc3BsYXlfZGF0YSB7Cj4gKwlzdHJ1Y3QgZGV2aWNl X25vZGUgKmN0cmxfbm9kZTsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25vZGU7Cj4gKwli b29sIGlzX2FjdGl2ZTsKPiArCWNvbnN0IGNoYXIgKm5hbWU7Cj4gKwljb25zdCBjaGFyICpkaXNw bGF5X3R5cGU7Cj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGRwX2N0cmxfcmVzb3VyY2Ug LSBjb250cm9sbGVyJ3MgSU8gcmVsYXRlZCBkYXRhCj4gKyAqCj4gKyAqIEBkcF9haGI6IGNvbnRy b2xsZXIncyBhaGIgbWFwcGVkIG1lbW9yeSBhZGRyZXNzCj4gKyAqIEBkcF9hdXg6IGNvbnRyb2xs ZXIncyBhdXggbWFwcGVkIG1lbW9yeSBhZGRyZXNzCj4gKyAqIEBkcF9saW5rOiBjb250cm9sbGVy J3MgbGluayBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPiArICogQGRwX3AwOiBjb250cm9sbGVyJ3Mg cDAgbWFwcGVkIG1lbW9yeSBhZGRyZXNzCj4gKyAqIEBwaHlfaW86IHBoeSdzIG1hcHBlZCBtZW1v cnkgYWRkcmVzcwo+ICsgKiBAbG5fdHgwX2lvOiBVU0ItRFAgbGFuZSBUWDAncyBtYXBwZWQgbWVt b3J5IGFkZHJlc3MKPiArICogQGxuX3R4MV9pbzogVVNCLURQIGxhbmUgVFgxJ3MgbWFwcGVkIG1l bW9yeSBhZGRyZXNzCj4gKyAqIEBkcF9jY19pbzogRFAgY2MncyBtYXBwZWQgbWVtb3J5IGFkZHJl c3MKPiArICogQHFmcHJvbV9pbzogcWZwcm9tJ3MgbWFwcGVkIG1lbW9yeSBhZGRyZXNzCj4gKyAq IEBkcF9wbGxfaW86IERQIFBMTCBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPiArICogQHVzYjNfZHBf Y29tOiBVU0IzIERQIFBIWSBjb21ibyBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPiArICovCj4gK3N0 cnVjdCBkcF9pbyB7Cj4gKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgY3RybF9pbzsKPiArCXN0cnVjdCBk c3NfaW9fZGF0YSBkcF9haGI7Cj4gKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgZHBfYXV4Owo+ICsJc3Ry dWN0IGRzc19pb19kYXRhIGRwX2xpbms7Cj4gKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgZHBfcDA7Cj4g KwlzdHJ1Y3QgZHNzX2lvX2RhdGEgcGh5X2lvOwo+ICsJc3RydWN0IGRzc19pb19kYXRhIGxuX3R4 MF9pbzsKPiArCXN0cnVjdCBkc3NfaW9fZGF0YSBsbl90eDFfaW87Cj4gKwlzdHJ1Y3QgZHNzX2lv X2RhdGEgZHBfY2NfaW87Cj4gKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgcWZwcm9tX2lvOwo+ICsJc3Ry dWN0IGRzc19pb19kYXRhIGRwX3BsbF9pbzsKPiArCXN0cnVjdCBkc3NfaW9fZGF0YSB1c2IzX2Rw X2NvbTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHBfcGluY3RybCAtIERQJ3MgcGlu IGNvbnRyb2wKPiArICoKPiArICogQHBpbjogcGluLWNvbnRyb2xsZXIncyBpbnN0YW5jZQo+ICsg KiBAc3RhdGVfYWN0aXZlOiBhY3RpdmUgc3RhdGUgcGluIGNvbnRyb2wKPiArICogQHN0YXRlX2hw ZF9hY3RpdmU6IGhwZCBhY3RpdmUgc3RhdGUgcGluIGNvbnRyb2wKPiArICogQHN0YXRlX3N1c3Bl bmQ6IHN1c3BlbmQgc3RhdGUgcGluIGNvbnRyb2wKPiArICovCj4gK3N0cnVjdCBkcF9waW5jdHJs IHsKPiArCXN0cnVjdCBwaW5jdHJsICpwaW47Cj4gKwlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqc3Rh dGVfYWN0aXZlOwo+ICsJc3RydWN0IHBpbmN0cmxfc3RhdGUgKnN0YXRlX2hwZF9hY3RpdmU7Cj4g KwlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqc3RhdGVfc3VzcGVuZDsKPiArfTsKPiArCj4gKyNkZWZp bmUgRFBfRU5VTV9TVFIoeCkJI3gKCk9uY2UgeW91IGdldCByaWQgb2YgYWxsIG9mIHRoZSBlbnVt LT5zdHJpbmcgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgZm9yCmRlYnVnZ2luZywgeW91IGNhbiBk ZWxldGUgdGhpcy4KCj4gKyNkZWZpbmUgRFBfQVVYX0NGR19NQVhfVkFMVUVfQ05UIDMKPiArLyoq Cj4gKyAqIHN0cnVjdCBkcF9hdXhfY2ZnIC0gRFAncyBBVVggY29uZmlndXJhdGlvbiBzZXR0aW5n cwo+ICsgKgo+ICsgKiBAY2ZnX2NudDogY291bnQgb2YgdGhlIGNvbmZpZ3VyYWJsZSBzZXR0aW5n cyBmb3IgdGhlIEFVWCByZWdpc3Rlcgo+ICsgKiBAY3VycmVudF9pbmRleDogY3VycmVudCBpbmRl eCBvZiB0aGUgQVVYIGNvbmZpZyBsdXQKPiArICogQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IG9m IHRoZSBBVVggY29uZmlnIHJlZ2lzdGVyCj4gKyAqIEBsdXQ6IGxvb2sgdXAgdGFibGUgZm9yIHRo ZSBBVVggY29uZmlnIHZhbHVlcyBmb3IgdGhpcyByZWdpc3Rlcgo+ICsgKi8KPiArc3RydWN0IGRw X2F1eF9jZmcgewo+ICsJdTMyIGNmZ19jbnQ7Cj4gKwl1MzIgY3VycmVudF9pbmRleDsKPiArCXUz MiBvZmZzZXQ7Cj4gKwl1MzIgbHV0W0RQX0FVWF9DRkdfTUFYX1ZBTFVFX0NOVF07Cj4gK307Cj4g Kwo+ICsvKiBQSFkgQVVYIGNvbmZpZyByZWdpc3RlcnMgKi8KPiArZW51bSBkcF9waHlfYXV4X2Nv bmZpZ190eXBlIHsKPiArCVBIWV9BVVhfQ0ZHMCwKPiArCVBIWV9BVVhfQ0ZHMSwKPiArCVBIWV9B VVhfQ0ZHMiwKPiArCVBIWV9BVVhfQ0ZHMywKPiArCVBIWV9BVVhfQ0ZHNCwKPiArCVBIWV9BVVhf Q0ZHNSwKPiArCVBIWV9BVVhfQ0ZHNiwKPiArCVBIWV9BVVhfQ0ZHNywKPiArCVBIWV9BVVhfQ0ZH OCwKPiArCVBIWV9BVVhfQ0ZHOSwKPiArCVBIWV9BVVhfQ0ZHX01BWCwKPiArfTsKPiArCj4gK3N0 YXRpYyBpbmxpbmUgY2hhciAqZHBfcGh5X2F1eF9jb25maWdfdHlwZV90b19zdHJpbmcodTMyIGNm Z190eXBlKQo+ICt7Cj4gKwlzd2l0Y2ggKGNmZ190eXBlKSB7Cj4gKwljYXNlIFBIWV9BVVhfQ0ZH MDoKPiArCQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkcwKTsKPiArCWNhc2UgUEhZX0FV WF9DRkcxOgo+ICsJCXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzEpOwo+ICsJY2FzZSBQ SFlfQVVYX0NGRzI6Cj4gKwkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHMik7Cj4gKwlj YXNlIFBIWV9BVVhfQ0ZHMzoKPiArCQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkczKTsK PiArCWNhc2UgUEhZX0FVWF9DRkc0Ogo+ICsJCXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NG RzQpOwo+ICsJY2FzZSBQSFlfQVVYX0NGRzU6Cj4gKwkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9B VVhfQ0ZHNSk7Cj4gKwljYXNlIFBIWV9BVVhfQ0ZHNjoKPiArCQlyZXR1cm4gRFBfRU5VTV9TVFIo UEhZX0FVWF9DRkc2KTsKPiArCWNhc2UgUEhZX0FVWF9DRkc3Ogo+ICsJCXJldHVybiBEUF9FTlVN X1NUUihQSFlfQVVYX0NGRzcpOwo+ICsJY2FzZSBQSFlfQVVYX0NGRzg6Cj4gKwkJcmV0dXJuIERQ X0VOVU1fU1RSKFBIWV9BVVhfQ0ZHOCk7Cj4gKwljYXNlIFBIWV9BVVhfQ0ZHOToKPiArCQlyZXR1 cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkc5KTsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuICJ1 bmtub3duIjsKPiArCX0KPiArfQoKU2FtZSBkZWFsIGFzIHRoZSBvdGhlcnMsIHJlbW92ZSBhbmQg cHJpbnQgdGhlIGVudW0gdmFsdWUgaW5zdGVhZC4KCj4gKwo+ICsvKioKPiArICogc3RydWN0IGRw X3BhcnNlciAtIERQIHBhcnNlcidzIGRhdGEgZXhwb3NlZCB0byBjbGllbnRzCj4gKyAqCj4gKyAq IEBwZGV2OiBwbGF0Zm9ybSBkYXRhIG9mIHRoZSBjbGllbnQKPiArICogQG1wOiBncGlvLCByZWd1 bGF0b3IgYW5kIGNsb2NrIHJlbGF0ZWQgZGF0YQo+ICsgKiBAcGluY3RybDogcGluLWNvbnRyb2wg cmVsYXRlZCBkYXRhCj4gKyAqIEBkaXNwX2RhdGE6IGNvbnRyb2xsZXIncyBkaXNwbGF5IHJlbGF0 ZWQgZGF0YQo+ICsgKiBAcGFyc2U6IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBieSBjbGllbnQgdG8g cGFyc2UgZGV2aWNlIHRyZWUuCj4gKyAqLwo+ICtzdHJ1Y3QgZHBfcGFyc2VyIHsKPiArCXN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciBtcFtE UF9NQVhfUE1dOwo+ICsJc3RydWN0IGRwX3BpbmN0cmwgcGluY3RybDsKPiArCXN0cnVjdCBkcF9p byBpbzsKPiArCXN0cnVjdCBkcF9kaXNwbGF5X2RhdGEgZGlzcF9kYXRhOwo+ICsKPiArCXU4IGxf bWFwWzRdOwo+ICsJc3RydWN0IGRwX2F1eF9jZmcgYXV4X2NmZ1tBVVhfQ0ZHX0xFTl07Cj4gKwl1 MzIgbWF4X3BjbGtfa2h6Owo+ICsKPiArCWludCAoKnBhcnNlKShzdHJ1Y3QgZHBfcGFyc2VyICpw YXJzZXIpOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGRwX3BhcnNlcl9nZXQoKSAtIGdldCB0aGUg RFAncyBkZXZpY2UgdHJlZSBwYXJzZXIgbW9kdWxlCj4gKyAqCj4gKyAqIEBwZGV2OiBwbGF0Zm9y bSBkYXRhIG9mIHRoZSBjbGllbnQKPiArICogcmV0dXJuOiBwb2ludGVyIHRvIGRwX3BhcnNlciBz dHJ1Y3R1cmUuCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgY2xpZW50IGNhcGFi aWxpdHkgdG8gcGFyc2UgdGhlCj4gKyAqIGRldmljZSB0cmVlIGFuZCBwb3B1bGF0ZSB0aGUgZGF0 YSBzdHJ1Y3R1cmVzLiBUaGUgZGF0YQo+ICsgKiByZWxhdGVkIHRvIGNsb2NrLCByZWd1bGF0b3Jz LCBwaW4tY29udHJvbCBhbmQgb3RoZXIKPiArICogY2FuIGJlIHBhcnNlZCB1c2luZyB0aGlzIG1v ZHVsZS4KPiArICovCj4gK3N0cnVjdCBkcF9wYXJzZXIgKmRwX3BhcnNlcl9nZXQoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldik7Cj4gKwo+ICsvKioKPiArICogZHBfcGFyc2VyX3B1dCgpIC0g Y2xlYW5zIHRoZSBkcF9wYXJzZXIgbW9kdWxlCj4gKyAqCj4gKyAqIEBwYXJzZXI6IHBvaW50ZXIg dG8gdGhlIHBhcnNlcidzIGRhdGEuCj4gKyAqLwo+ICt2b2lkIGRwX3BhcnNlcl9wdXQoc3RydWN0 IGRwX3BhcnNlciAqcGFyc2VyKTsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfcG93ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIu Ywo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMWQ1ODQ4MAo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmMKPiBAQCAt MCwwICsxLDU5OSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExp bnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAo+ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KPiArICoKPiArICovCj4gKwo+ICsjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRw XSAlczogIiBmbXQsIF9fZnVuY19fCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNp bmNsdWRlICJkcF9wb3dlci5oIgo+ICsKPiArI2RlZmluZSBEUF9DTElFTlRfTkFNRV9TSVpFCTIw CgpVbnVzZWQKCj4gKwo+ICtzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSB7Cj4gKwlzdHJ1Y3QgZHBf cGFyc2VyICpwYXJzZXI7Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owo+ICsJc3Ry dWN0IGNsayAqcGl4ZWxfY2xrX3JjZzsKPiArCXN0cnVjdCBjbGsgKnBpeGVsX3BhcmVudDsKPiAr Cj4gKwlzdHJ1Y3QgZHBfcG93ZXIgZHBfcG93ZXI7Cj4gKwo+ICsJYm9vbCBjb3JlX2Nsa3Nfb247 Cj4gKwlib29sIGxpbmtfY2xrc19vbjsKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJf cmVndWxhdG9yX2luaXQoc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyKQo+ICt7Cj4gKwlp bnQgcmMgPSAwLCBpID0gMCwgaiA9IDA7Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 Owo+ICsJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwo+ICsKPiArCXBhcnNlciA9IHBvd2VyLT5w YXJzZXI7Cj4gKwlwZGV2ID0gcG93ZXItPnBkZXY7CgpNb3ZlIHRoZXNlIGluaXRpYWxpemF0aW9u cyB1cCB0byB0aGUgZGVjbGFyYXRpb24uIFBsZWFzZSBhcHBseSB0aGlzIHRvIHRoZSByZXN0Cm9m IHRoZSBjb2RlIGFzIHdlbGwuCgoKPiArCj4gKwlmb3IgKGkgPSBEUF9DT1JFX1BNOyAhcmMgJiYg KGkgPCBEUF9NQVhfUE0pOyBpKyspIHsKCk5vIG5lZWQgdG8gY2hlY2sgcmMgd2hlbiB0aGUgb25s eSBwbGFjZSBpdCBjYW4gZ28gbm9uLXplcm8gaXMgdGhlIHBsYWNlIHRoYXQKaGFzIGEgYnJlYWs7 Cgo+ICsJCXJjID0gbXNtX2Rzc19jb25maWdfdnJlZygmcGRldi0+ZGV2LAo+ICsJCQlwYXJzZXIt Pm1wW2ldLnZyZWdfY29uZmlnLAo+ICsJCQlwYXJzZXItPm1wW2ldLm51bV92cmVnLCAxKTsKPiAr CQlpZiAocmMpIHsKPiArCQkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdCB2cmVncyBmb3IgJXNcbiIs Cj4gKwkJCQlkcF9wYXJzZXJfcG1fbmFtZShpKSk7Cj4gKwkJCWZvciAoaiA9IGkgLSAxOyBqID49 IERQX0NPUkVfUE07IGotLSkgewo+ICsJCQkJbXNtX2Rzc19jb25maWdfdnJlZygmcGRldi0+ZGV2 LAo+ICsJCQkJcGFyc2VyLT5tcFtqXS52cmVnX2NvbmZpZywKPiArCQkJCXBhcnNlci0+bXBbal0u bnVtX3ZyZWcsIDApOwo+ICsJCQl9CgpQdXQgdGhpcyBsb29wIGluIHRoZSBlcnJvciBsYWJlbCBh bmQgcmV0dXJuIDAgYWJvdmUgaXQuIEJldHRlciB5ZXQsIGp1c3QgY2FsbAp0aGUgZHBfcG93ZXJf cmVndWxhdG9yX2RlaW5pdCBpbiBlcnJvci4KCj4gKwo+ICsJCQlnb3RvIGVycm9yOwo+ICsJCX0K PiArCX0KPiArZXJyb3I6Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRw X3Bvd2VyX3JlZ3VsYXRvcl9kZWluaXQoc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyKQo+ ICt7Cj4gKwlpbnQgcmMgPSAwLCBpID0gMDsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXY7Cj4gKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7Cj4gKwo+ICsJcGFyc2VyID0gcG93ZXIt PnBhcnNlcjsKPiArCXBkZXYgPSBwb3dlci0+cGRldjsKPiArCj4gKwlmb3IgKGkgPSBEUF9DT1JF X1BNOyAoaSA8IERQX01BWF9QTSk7IGkrKykgewoKVW5uZWNlc3NhcnkgKCksIGFwcGxpZXMgZWxz ZXdoZXJlIHRvbywgcGxlYXNlIG1ha2UgYSBwYXNzCgo+ICsJCXJjID0gbXNtX2Rzc19jb25maWdf dnJlZygmcGRldi0+ZGV2LAo+ICsJCQlwYXJzZXItPm1wW2ldLnZyZWdfY29uZmlnLAo+ICsJCQlw YXJzZXItPm1wW2ldLm51bV92cmVnLCAwKTsKPiArCQlpZiAocmMpCj4gKwkJCXByX2VycigiZmFp bGVkIHRvIGRlaW5pdCB2cmVncyBmb3IgJXNcbiIsCj4gKwkJCQlkcF9wYXJzZXJfcG1fbmFtZShp KSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJfcmVndWxhdG9yX2N0cmwo c3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyLCBib29sIGVuYWJsZSkKPiArewo+ICsJaW50 IHJjID0gMCwgaSA9IDAsIGogPSAwOwo+ICsJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwo+ICsK PiArCXBhcnNlciA9IHBvd2VyLT5wYXJzZXI7Cj4gKwo+ICsJZm9yIChpID0gRFBfQ09SRV9QTTsg aSA8IERQX01BWF9QTTsgaSsrKSB7Cj4gKwkJcmMgPSBtc21fZHNzX2VuYWJsZV92cmVnKAo+ICsJ CQlwYXJzZXItPm1wW2ldLnZyZWdfY29uZmlnLAo+ICsJCQlwYXJzZXItPm1wW2ldLm51bV92cmVn LCBlbmFibGUpOwo+ICsJCWlmIChyYykgewo+ICsJCQlwcl9lcnIoImZhaWxlZCB0byAnJXMnIHZy ZWdzIGZvciAlc1xuIiwKPiArCQkJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIiwKPiAr CQkJCQlkcF9wYXJzZXJfcG1fbmFtZShpKSk7Cj4gKwkJCWlmIChlbmFibGUpIHsKPiArCQkJCWZv ciAoaiA9IGktMTsgaiA+PSBEUF9DT1JFX1BNOyBqLS0pIHsKPiArCQkJCQltc21fZHNzX2VuYWJs ZV92cmVnKAo+ICsJCQkJCXBhcnNlci0+bXBbal0udnJlZ19jb25maWcsCj4gKwkJCQkJcGFyc2Vy LT5tcFtqXS5udW1fdnJlZywgMCk7Cj4gKwkJCQl9Cj4gKwkJCX0KPiArCQkJZ290byBlcnJvcjsK PiArCQl9Cj4gKwl9Cj4gK2Vycm9yOgo+ICsJcmV0dXJuIHJjOwo+ICt9CgpUaGlzIGZ1bmN0aW9u IGlzIGJhc2ljYWxseSBpZGVudGljYWwgdG8gZHBfcG93ZXJfcmVndWxhdG9yX2luaXQoKSwgcGxl YXNlCmRlbGV0ZSB0aGlzIGZ1bmN0aW9uIGFuZCB1c2UgZHBfcG93ZXJfcmVndWxhdG9yX2luaXQo KS4KCgo+ICsKPiArc3RhdGljIGludCBkcF9wb3dlcl9waW5jdHJsX3NldChzdHJ1Y3QgZHBfcG93 ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wgYWN0aXZlKQo+ICt7Cj4gKwlpbnQgcmMgPSAtRUZBVUxU Owo+ICsJc3RydWN0IHBpbmN0cmxfc3RhdGUgKnBpbl9zdGF0ZTsKPiArCXN0cnVjdCBkcF9wYXJz ZXIgKnBhcnNlcjsKPiArCj4gKwlwYXJzZXIgPSBwb3dlci0+cGFyc2VyOwo+ICsKPiArCWlmIChJ U19FUlJfT1JfTlVMTChwYXJzZXItPnBpbmN0cmwucGluKSkKPiArCQlyZXR1cm4gUFRSX0VSUihw YXJzZXItPnBpbmN0cmwucGluKTsKPiArCj4gKwlwaW5fc3RhdGUgPSBhY3RpdmUgPyBwYXJzZXIt PnBpbmN0cmwuc3RhdGVfYWN0aXZlCj4gKwkJCQk6IHBhcnNlci0+cGluY3RybC5zdGF0ZV9zdXNw ZW5kOwo+ICsJaWYgKCFJU19FUlJfT1JfTlVMTChwaW5fc3RhdGUpKSB7CgpIb3cgaXMgdGhpcyBu b3QgcG9zc2libGU/IFlvdSBjaGVjayB0aGVzZSBvbiBpbml0aWFsaXphdGlvbi4KCj4gKwkJcmMg PSBwaW5jdHJsX3NlbGVjdF9zdGF0ZShwYXJzZXItPnBpbmN0cmwucGluLAo+ICsJCQkJcGluX3N0 YXRlKTsKCkNvbWJpbmUgb24gMSBsaW5lCgo+ICsJCWlmIChyYykKPiArCQkJcHJfZXJyKCJjYW4g bm90IHNldCAlcyBwaW5zXG4iLAo+ICsJCQkgICAgICAgYWN0aXZlID8gImRwX2FjdGl2ZSIKPiAr CQkJICAgICAgIDogImRwX3NsZWVwIik7CgoKQ29tYmluZSBvbiBvbmUgbGluZS4gQWxzbyByZXR1 cm4gaW1tZWRpYXRlbHkgaWYgdGhpcyBpcyB0aGUgY2FzZS4KCj4gKwl9IGVsc2Ugewo+ICsJCXBy X2VycigiaW52YWxpZCAnJXMnIHBpbnN0YXRlXG4iLAo+ICsJCSAgICAgICBhY3RpdmUgPyAiZHBf YWN0aXZlIgo+ICsJCSAgICAgICA6ICJkcF9zbGVlcCIpOwo+ICsJfQo+ICsKPiArCXJldHVybiBy YzsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9wb3dlcl9jbGtfaW5pdChzdHJ1Y3QgZHBfcG93 ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wgZW5hYmxlKQoKU3BsaXQgdGhpcyBpbnRvIGluaXQvZGVp bml0LCB0aGUgcGF0aHMgZG9uJ3Qgc2hhcmUgY29kZS4KCj4gK3sKPiArCWludCByYyA9IDA7Cj4g KwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqY29yZSwgKmN0cmw7Cj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXY7Cj4gKwo+ICsJY29yZSA9ICZwb3dlci0+cGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKPiAr CWN0cmwgPSAmcG93ZXItPnBhcnNlci0+bXBbRFBfQ1RSTF9QTV07Cj4gKwo+ICsJZGV2ID0gJnBv d2VyLT5wZGV2LT5kZXY7Cj4gKwo+ICsJaWYgKCFjb3JlIHx8ICFjdHJsKSB7Cj4gKwkJcHJfZXJy KCJpbnZhbGlkIHBvd2VyX2RhdGFcbiIpOwo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGV4 aXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGVuYWJsZSkgewo+ICsJCXJjID0gbXNtX2Rzc19nZXRfY2xr KGRldiwgY29yZS0+Y2xrX2NvbmZpZywgY29yZS0+bnVtX2Nsayk7Cj4gKwkJaWYgKHJjKSB7Cj4g KwkJCXByX2VycigiZmFpbGVkIHRvIGdldCAlcyBjbGsuIGVycj0lZFxuIiwKPiArCQkJCWRwX3Bh cnNlcl9wbV9uYW1lKERQX0NPUkVfUE0pLCByYyk7Cj4gKwkJCWdvdG8gZXhpdDsKPiArCQl9Cj4g Kwo+ICsJCXJjID0gbXNtX2Rzc19nZXRfY2xrKGRldiwgY3RybC0+Y2xrX2NvbmZpZywgY3RybC0+ bnVtX2Nsayk7Cj4gKwkJaWYgKHJjKSB7Cj4gKwkJCXByX2VycigiZmFpbGVkIHRvIGdldCAlcyBj bGsuIGVycj0lZFxuIiwKPiArCQkJCWRwX3BhcnNlcl9wbV9uYW1lKERQX0NUUkxfUE0pLCByYyk7 Cj4gKwkJCWdvdG8gY3RybF9nZXRfZXJyb3I7Cj4gKwkJfQo+ICsKPiArCQlwb3dlci0+cGl4ZWxf Y2xrX3JjZyA9IGRldm1fY2xrX2dldChkZXYsICJwaXhlbF9jbGtfcmNnIik7Cj4gKwkJaWYgKElT X0VSUihwb3dlci0+cGl4ZWxfY2xrX3JjZykpIHsKPiArCQkJcHJfZGVidWcoIlVuYWJsZSB0byBn ZXQgRFAgcGl4ZWwgY2xrIFJDR1xuIik7Cj4gKwkJCXBvd2VyLT5waXhlbF9jbGtfcmNnID0gTlVM TDsKPiArCQl9Cj4gKwo+ICsJCXBvd2VyLT5waXhlbF9wYXJlbnQgPSBkZXZtX2Nsa19nZXQoZGV2 LCAicGl4ZWxfcGFyZW50Iik7Cj4gKwkJaWYgKElTX0VSUihwb3dlci0+cGl4ZWxfcGFyZW50KSkg ewo+ICsJCQlwcl9kZWJ1ZygiVW5hYmxlIHRvIGdldCBEUCBwaXhlbCBSQ0cgcGFyZW50XG4iKTsK PiArCQkJcG93ZXItPnBpeGVsX3BhcmVudCA9IE5VTEw7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiAr CQlpZiAocG93ZXItPnBpeGVsX3BhcmVudCkKPiArCQkJZGV2bV9jbGtfcHV0KGRldiwgcG93ZXIt PnBpeGVsX3BhcmVudCk7Cj4gKwo+ICsJCWlmIChwb3dlci0+cGl4ZWxfY2xrX3JjZykKPiArCQkJ ZGV2bV9jbGtfcHV0KGRldiwgcG93ZXItPnBpeGVsX2Nsa19yY2cpOwoKZGV2aWNlIG1hbmFnZWQg cmVzb3VyY2VzIGRvbid0IG5lZWQgdG8gYmUgZnJlZWQKCj4gKwo+ICsJCW1zbV9kc3NfcHV0X2Ns ayhjdHJsLT5jbGtfY29uZmlnLCBjdHJsLT5udW1fY2xrKTsKPiArCQltc21fZHNzX3B1dF9jbGso Y29yZS0+Y2xrX2NvbmZpZywgY29yZS0+bnVtX2Nsayk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJj Owo+ICsKPiArY3RybF9nZXRfZXJyb3I6Cj4gKwltc21fZHNzX3B1dF9jbGsoY29yZS0+Y2xrX2Nv bmZpZywgY29yZS0+bnVtX2Nsayk7CgpTaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBpbiBvbmUgcGxh Y2UsIGp1c3QgZG8gaXQgYWJvdmUgYW5kIHJldHVybiBkaXJlY3RseS4KCj4gK2V4aXQ6CgpEZWxl dGUgZXhpdCBsYWJlbCBhbmQgcmV0dXJuIGRpcmVjdGx5Cgo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGRwX3Bvd2VyX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgZHBfcG93ZXJfcHJp dmF0ZSAqcG93ZXIsCj4gKwkJZW51bSBkcF9wbV90eXBlIG1vZHVsZSwgYm9vbCBlbmFibGUpCj4g K3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXA7Cj4gKwo+ ICsJaWYgKCFwb3dlcikgewo+ICsJCXByX2VycigiaW52YWxpZCBwb3dlciBkYXRhXG4iKTsKPiAr CQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCW1wID0gJnBvd2Vy LT5wYXJzZXItPm1wW21vZHVsZV07Cj4gKwo+ICsJaWYgKGVuYWJsZSkgewo+ICsJCXJjID0gbXNt X2Rzc19jbGtfc2V0X3JhdGUobXAtPmNsa19jb25maWcsIG1wLT5udW1fY2xrKTsKPiArCQlpZiAo cmMpIHsKPiArCQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IGNsa3MgcmF0ZS5cbiIpOwo+ICsJCQln b3RvIGV4aXQ7Cj4gKwkJfQo+ICsKPiArCQlyYyA9IG1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xr X2NvbmZpZywgbXAtPm51bV9jbGssIDEpOwo+ICsJCWlmIChyYykgewo+ICsJCQlwcl9lcnIoImZh aWxlZCB0byBlbmFibGUgY2xrc1xuIik7Cj4gKwkJCWdvdG8gZXhpdDsKPiArCQl9Cj4gKwl9IGVs c2Ugewo+ICsJCXJjID0gbXNtX2Rzc19lbmFibGVfY2xrKG1wLT5jbGtfY29uZmlnLCBtcC0+bnVt X2NsaywgMCk7Cj4gKwkJaWYgKHJjKSB7Cj4gKwkJCXByX2VycigiZmFpbGVkIHRvIGRpc2FibGUg Y2xrc1xuIik7Cj4gKwkJCQlnb3RvIGV4aXQ7Cj4gKwkJfQoKVGhpcyBmdW5jdGlvbiBhY3R1YWxs eSBjYW4gc2hhcmUgY29kZSwgYnV0IGl0IGRvZXNuJ3QgOiggUGxlYXNlIHB1bGwgdGhpcyBvdXQK Zm9yIGJvdGggcGF0aHMKCj4gKwl9Cj4gK2V4aXQ6CgpEZWxldGUgZXhpdCBsYWJlbCBhbmQgcmV0 dXJuIGRpcmVjdGx5Cgo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwX3Bv d2VyX2Nsa19lbmFibGUoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlciwKPiArCQllbnVtIGRwX3Bt X3R5cGUgcG1fdHlwZSwgYm9vbCBlbmFibGUpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1 Y3QgZHNzX21vZHVsZV9wb3dlciAqbXA7Cj4gKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93 ZXI7Cj4gKwo+ICsJaWYgKCFkcF9wb3dlcikgewo+ICsJCXByX2VycigiaW52YWxpZCBwb3dlciBk YXRhXG4iKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiArCj4g Kwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUs IGRwX3Bvd2VyKTsKPiArCj4gKwltcCA9ICZwb3dlci0+cGFyc2VyLT5tcFtwbV90eXBlXTsKPiAr Cj4gKwlpZiAoKHBtX3R5cGUgIT0gRFBfQ09SRV9QTSkgJiYgKHBtX3R5cGUgIT0gRFBfQ1RSTF9Q TSkpIHsKClN0cmlwIG91dCB1bm5lY2Vzc2FyeSAoKQoKPiArCQlwcl9lcnIoInVuc3VwcG9ydGVk IHBvd2VyIG1vZHVsZTogJXNcbiIsCj4gKwkJCQlkcF9wYXJzZXJfcG1fbmFtZShwbV90eXBlKSk7 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKGVuYWJsZSkgewo+ICsJCWlm ICgocG1fdHlwZSA9PSBEUF9DT1JFX1BNKQo+ICsJCQkmJiAocG93ZXItPmNvcmVfY2xrc19vbikp IHsKCkhlcmUgdG9vCgpDb21iaW5lIG9uIG9uZSBsaW5lIGFzIHdlbGwKCj4gKwkJCXByX2RlYnVn KCJjb3JlIGNsa3MgYWxyZWFkeSBlbmFibGVkXG4iKTsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJfQo+ ICsKPiArCQlpZiAoKHBtX3R5cGUgPT0gRFBfQ1RSTF9QTSkKPiArCQkJJiYgKHBvd2VyLT5saW5r X2Nsa3Nfb24pKSB7CgphbmQgaGVyZQoKPiArCQkJcHJfZGVidWcoImxpbmtzIGNsa3MgYWxyZWFk eSBlbmFibGVkXG4iKTsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJfQo+ICsKPiArCQlpZiAoKHBtX3R5 cGUgPT0gRFBfQ1RSTF9QTSkgJiYgKCFwb3dlci0+Y29yZV9jbGtzX29uKSkgewoKYW5kIGhlcmUK Cj4gKwkJCXByX2RlYnVnKCJOZWVkIHRvIGVuYWJsZSBjb3JlIGNsa3MgYmVmb3JlIGxpbmsgY2xr c1xuIik7Cj4gKwo+ICsJCQlyYyA9IGRwX3Bvd2VyX2Nsa19zZXRfcmF0ZShwb3dlciwgRFBfQ09S RV9QTSwgZW5hYmxlKTsKPiArCQkJaWYgKHJjKSB7Cj4gKwkJCQlwcl9lcnIoImZhaWxlZCB0byBl bmFibGUgY2xrczogJXMuIGVycj0lZFxuIiwKPiArCQkJCQlkcF9wYXJzZXJfcG1fbmFtZShEUF9D T1JFX1BNKSwgcmMpOwo+ICsJCQkJZ290byBlcnJvcjsKPiArCQkJfSBlbHNlIHsKPiArCQkJCXBv d2VyLT5jb3JlX2Nsa3Nfb24gPSB0cnVlOwoKVGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgd3JhcHBl ZCBpbiB0aGUgZWxzZQoKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArCj4gKwlyYyA9IGRwX3Bvd2Vy X2Nsa19zZXRfcmF0ZShwb3dlciwgcG1fdHlwZSwgZW5hYmxlKTsKPiArCWlmIChyYykgewo+ICsJ CXByX2VycigiZmFpbGVkIHRvICclcycgY2xrcyBmb3I6ICVzLiBlcnI9JWRcbiIsCj4gKwkJCWVu YWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiLAo+ICsJCQlkcF9wYXJzZXJfcG1fbmFtZShwbV90 eXBlKSwgcmMpOwo+ICsJCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCWlmIChwbV90eXBlID09 IERQX0NPUkVfUE0pCj4gKwkJcG93ZXItPmNvcmVfY2xrc19vbiA9IGVuYWJsZTsKPiArCWVsc2UK PiArCQlwb3dlci0+bGlua19jbGtzX29uID0gZW5hYmxlOwo+ICsKPiArCXByX2RlYnVnKCIlcyBj bG9ja3MgZm9yICVzXG4iLAo+ICsJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIiwKPiAr CQkJZHBfcGFyc2VyX3BtX25hbWUocG1fdHlwZSkpOwo+ICsJcHJfZGVidWcoImxpbmtfY2xrczol cyBjb3JlX2Nsa3M6JXNcbiIsCj4gKwkJcG93ZXItPmxpbmtfY2xrc19vbiA/ICJvbiIgOiAib2Zm IiwKPiArCQlwb3dlci0+Y29yZV9jbGtzX29uID8gIm9uIiA6ICJvZmYiKTsKPiArZXJyb3I6CgpE ZWxldGUgZXJyb3IgbGFiZWwgYW5kIHJldHVybiBkaXJlY3RseQoKPiArCXJldHVybiByYzsKPiAr fQo+ICsKPiArc3RhdGljIGludCBkcF9wb3dlcl9yZXF1ZXN0X2dwaW9zKHN0cnVjdCBkcF9wb3dl cl9wcml2YXRlICpwb3dlcikKPiArewo+ICsJaW50IHJjID0gMCwgaTsKPiArCXN0cnVjdCBkZXZp Y2UgKmRldjsKPiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcDsKPiArCXN0YXRpYyBjb25z dCBjaGFyICogY29uc3QgZ3Bpb19uYW1lc1tdID0gewo+ICsJCSJhdXhfZW5hYmxlIiwgImF1eF9z ZWwiLCAidXNicGx1Z19jYyIsCj4gKwl9Owo+ICsKPiArCWlmICghcG93ZXIpIHsKPiArCQlwcl9l cnIoImludmFsaWQgcG93ZXIgZGF0YVxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4g Kwo+ICsJZGV2ID0gJnBvd2VyLT5wZGV2LT5kZXY7Cj4gKwltcCA9ICZwb3dlci0+cGFyc2VyLT5t cFtEUF9DT1JFX1BNXTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShncGlvX25h bWVzKTsgaSsrKSB7Cj4gKwkJdW5zaWduZWQgaW50IGdwaW8gPSBtcC0+Z3Bpb19jb25maWdbaV0u Z3BpbzsKPiArCj4gKwkJaWYgKGdwaW9faXNfdmFsaWQoZ3BpbykpIHsKCmlmICghZ3Bpb19pc192 YWxpZChncGlvKSkKCWNvbnRpbnVlOwoKYW5kIHNhdmUgeW91cnNlbGYgc29tZSBpbmRlbnQgc3Bh Y2UKCj4gKwkJCXJjID0gZGV2bV9ncGlvX3JlcXVlc3QoZGV2LCBncGlvLCBncGlvX25hbWVzW2ld KTsKPiArCQkJaWYgKHJjKSB7Cj4gKwkJCQlwcl9lcnIoInJlcXVlc3QgJXMgZ3BpbyBmYWlsZWQs IHJjPSVkXG4iLAo+ICsJCQkJCSAgICAgICBncGlvX25hbWVzW2ldLCByYyk7Cj4gKwkJCQlnb3Rv IGVycm9yOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK2Vycm9yOgo+ICsJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ3Bpb19uYW1lcyk7IGkrKykgewo+ICsJCXVuc2ln bmVkIGludCBncGlvID0gbXAtPmdwaW9fY29uZmlnW2ldLmdwaW87Cj4gKwo+ICsJCWlmIChncGlv X2lzX3ZhbGlkKGdwaW8pKQo+ICsJCQlncGlvX2ZyZWUoZ3Bpbyk7Cj4gKwl9CgpncGlvcyBhcmUg ZGV2aWNlIG1hbmFnZWQsIHNvIHlvdSBzaG91bGRuJ3QgbmVlZCB0aGlzLgoKPiArCXJldHVybiBy YzsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgZHBfcG93ZXJfZmluZF9ncGlvKGNvbnN0IGNoYXIg KmdwaW8xLCBjb25zdCBjaGFyICpncGlvMikKPiArewo+ICsJcmV0dXJuICEhc3RybnN0cihncGlv MSwgZ3BpbzIsIHN0cmxlbihncGlvMSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9wb3dl cl9zZXRfZ3BpbyhzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wgZmxpcCkKPiAr ewo+ICsJaW50IGk7Cj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXAgPSAmcG93ZXItPnBh cnNlci0+bXBbRFBfQ09SRV9QTV07Cj4gKwlzdHJ1Y3QgZHNzX2dwaW8gKmNvbmZpZyA9IG1wLT5n cGlvX2NvbmZpZzsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbXAtPm51bV9ncGlvOyBpKyspIHsK PiArCQlpZiAoZHBfcG93ZXJfZmluZF9ncGlvKGNvbmZpZy0+Z3Bpb19uYW1lLCAiYXV4LXNlbCIp KQo+ICsJCQljb25maWctPnZhbHVlID0gZmxpcDsKPiArCj4gKwkJaWYgKGdwaW9faXNfdmFsaWQo Y29uZmlnLT5ncGlvKSkgewo+ICsJCQlwcl9kZWJ1ZygiZ3BpbyAlcywgdmFsdWUgJWRcbiIsIGNv bmZpZy0+Z3Bpb19uYW1lLAo+ICsJCQkJY29uZmlnLT52YWx1ZSk7Cj4gKwo+ICsJCQlpZiAoZHBf cG93ZXJfZmluZF9ncGlvKGNvbmZpZy0+Z3Bpb19uYW1lLCAiYXV4LWVuIikgfHwKPiArCQkJICAg IGRwX3Bvd2VyX2ZpbmRfZ3Bpbyhjb25maWctPmdwaW9fbmFtZSwgImF1eC1zZWwiKSkKPiArCQkJ CWdwaW9fZGlyZWN0aW9uX291dHB1dChjb25maWctPmdwaW8sCj4gKwkJCQkJY29uZmlnLT52YWx1 ZSk7Cj4gKwkJCWVsc2UKPiArCQkJCWdwaW9fc2V0X3ZhbHVlKGNvbmZpZy0+Z3BpbywgY29uZmln LT52YWx1ZSk7Cj4gKwo+ICsJCX0KPiArCQljb25maWcrKzsKPiArCX0KCkluc3RlYWQgb2YgYWxs IG9mIHRoZXNlIHN0cmluZyBvcHMsIHBsZWFzZSBqdXN0IG1ha2UgcG9pbnRlcnMgYWNjZXNzaWJs ZSBzbyB5b3UKY2FuIGdldCBhdCB0aGUgZ3BpbyBkaXJlY3RseS4KCj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZHBfcG93ZXJfY29uZmlnX2dwaW9zKHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dl ciwgYm9vbCBmbGlwLAo+ICsJCQkJCWJvb2wgZW5hYmxlKQoKU3BsaXQgaW50byAyIGZ1bmN0aW9u cwoKPiArewo+ICsJaW50IHJjID0gMCwgaTsKPiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICpt cDsKPiArCXN0cnVjdCBkc3NfZ3BpbyAqY29uZmlnOwo+ICsKPiArCW1wID0gJnBvd2VyLT5wYXJz ZXItPm1wW0RQX0NPUkVfUE1dOwo+ICsJY29uZmlnID0gbXAtPmdwaW9fY29uZmlnOwo+ICsKPiAr CWlmIChlbmFibGUpIHsKPiArCQlyYyA9IGRwX3Bvd2VyX3JlcXVlc3RfZ3Bpb3MocG93ZXIpOwo+ ICsJCWlmIChyYykgewo+ICsJCQlwcl9lcnIoImdwaW8gcmVxdWVzdCBmYWlsZWRcbiIpOwo+ICsJ CQlyZXR1cm4gcmM7Cj4gKwkJfQo+ICsKPiArCQlkcF9wb3dlcl9zZXRfZ3Bpbyhwb3dlciwgZmxp cCk7Cj4gKwl9IGVsc2Ugewo+ICsJCWZvciAoaSA9IDA7IGkgPCBtcC0+bnVtX2dwaW87IGkrKykg ewo+ICsJCQlncGlvX3NldF92YWx1ZShjb25maWdbaV0uZ3BpbywgMCk7Cj4gKwkJCWdwaW9fZnJl ZShjb25maWdbaV0uZ3Bpbyk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGRwX3Bvd2VyX2NsaWVudF9pbml0KHN0cnVjdCBkcF9wb3dlciAqZHBf cG93ZXIpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAq cG93ZXI7Cj4gKwo+ICsJaWYgKCFkcF9wb3dlcikgewo+ICsJCXByX2VycigiaW52YWxpZCBwb3dl ciBkYXRhXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlwb3dlciA9IGNv bnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsK PiArCj4gKwlwbV9ydW50aW1lX2VuYWJsZSgmcG93ZXItPnBkZXYtPmRldik7Cj4gKwo+ICsJcmMg PSBkcF9wb3dlcl9yZWd1bGF0b3JfaW5pdChwb3dlcik7Cj4gKwlpZiAocmMpIHsKPiArCQlwcl9l cnIoImZhaWxlZCB0byBpbml0IHJlZ3VsYXRvcnNcbiIpOwoKUHJpbnQgcmMKCj4gKwkJZ290byBl cnJvcl9wb3dlcjsKPiArCX0KPiArCj4gKwlyYyA9IGRwX3Bvd2VyX2Nsa19pbml0KHBvd2VyLCB0 cnVlKTsKPiArCWlmIChyYykgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIGluaXQgY2xvY2tzXG4i KTsKClByaW50IHJjCgo+ICsJCWdvdG8gZXJyb3JfY2xrOwo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4g Kwo+ICtlcnJvcl9jbGs6Cj4gKwlkcF9wb3dlcl9yZWd1bGF0b3JfZGVpbml0KHBvd2VyKTsKPiAr ZXJyb3JfcG93ZXI6Cj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBvd2VyLT5wZGV2LT5kZXYpOwo+ ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9wb3dlcl9jbGllbnRfZGVp bml0KHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIpCj4gK3sKPiArCXN0cnVjdCBkcF9wb3dlcl9w cml2YXRlICpwb3dlcjsKPiArCj4gKwlpZiAoIWRwX3Bvd2VyKSB7Cj4gKwkJcHJfZXJyKCJpbnZh bGlkIHBvd2VyIGRhdGFcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlwb3dlciA9IGNv bnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsK PiArCj4gKwlkcF9wb3dlcl9jbGtfaW5pdChwb3dlciwgZmFsc2UpOwo+ICsJZHBfcG93ZXJfcmVn dWxhdG9yX2RlaW5pdChwb3dlcik7Cj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBvd2VyLT5wZGV2 LT5kZXYpOwo+ICsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9wb3dlcl9zZXRfcGl4ZWxfY2xr X3BhcmVudChzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ ICsJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyOwo+ICsKPiArCWlmICghZHBfcG93ZXIp IHsKPiArCQlwcl9lcnIoImludmFsaWQgcG93ZXIgZGF0YVxuIik7Cj4gKwkJcmMgPSAtRUlOVkFM Owo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9w b3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsKPiArCj4gKwlpZiAocG93 ZXItPnBpeGVsX2Nsa19yY2cgJiYgcG93ZXItPnBpeGVsX3BhcmVudCkKPiArCQljbGtfc2V0X3Bh cmVudChwb3dlci0+cGl4ZWxfY2xrX3JjZywgcG93ZXItPnBpeGVsX3BhcmVudCk7CgpDaGVjayBy ZXR1cm4gdmFsdWUKCj4gK2V4aXQ6CgpEZWxldGUgbGFiZWwvcmMsIHJldHVybiBpbW1lZGlhdGVs eS4KCj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJfaW5pdChz dHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyLCBib29sIGZsaXApCj4gK3sKPiArCWludCByYyA9IDA7 Cj4gKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7Cj4gKwo+ICsJaWYgKCFkcF9wb3dl cikgewo+ICsJCXByX2VycigiaW52YWxpZCBwb3dlciBkYXRhXG4iKTsKPiArCQlyYyA9IC1FSU5W QUw7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCXBvd2VyID0gY29udGFpbmVyX29mKGRw X3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOwo+ICsKPiArCXBtX3J1 bnRpbWVfZ2V0X3N5bmMoJnBvd2VyLT5wZGV2LT5kZXYpOwo+ICsJcmMgPSBkcF9wb3dlcl9yZWd1 bGF0b3JfY3RybChwb3dlciwgdHJ1ZSk7Cj4gKwlpZiAocmMpIHsKPiArCQlwcl9lcnIoImZhaWxl ZCB0byBlbmFibGUgcmVndWxhdG9yc1xuIik7CgpQcmludCByYwoKPiArCQlnb3RvIGV4aXQ7Cj4g Kwl9Cj4gKwo+ICsJcmMgPSBkcF9wb3dlcl9waW5jdHJsX3NldChwb3dlciwgdHJ1ZSk7Cj4gKwlp ZiAocmMpIHsKClByaW50IHJjCgo+ICsJCXByX2VycigiZmFpbGVkIHRvIHNldCBwaW5jdHJsIHN0 YXRlXG4iKTsKPiArCQlnb3RvIGVycl9waW5jdHJsOwo+ICsJfQo+ICsKPiArCXJjID0gZHBfcG93 ZXJfY29uZmlnX2dwaW9zKHBvd2VyLCBmbGlwLCB0cnVlKTsKPiArCWlmIChyYykgewoKUHJpbnQg cmMKCj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIGdwaW9zXG4iKTsKPiArCQlnb3RvIGVy cl9ncGlvOwo+ICsJfQo+ICsKPiArCXJjID0gZHBfcG93ZXJfY2xrX2VuYWJsZShkcF9wb3dlciwg RFBfQ09SRV9QTSwgdHJ1ZSk7Cj4gKwlpZiAocmMpIHsKClByaW50IHJjCgo+ICsJCXByX2Vycigi ZmFpbGVkIHRvIGVuYWJsZSBEUCBjb3JlIGNsb2Nrc1xuIik7Cj4gKwkJZ290byBlcnJfY2xrOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX2NsazoKPiArCWRwX3Bvd2VyX2NvbmZp Z19ncGlvcyhwb3dlciwgZmxpcCwgZmFsc2UpOwo+ICtlcnJfZ3BpbzoKPiArCWRwX3Bvd2VyX3Bp bmN0cmxfc2V0KHBvd2VyLCBmYWxzZSk7Cj4gK2Vycl9waW5jdHJsOgo+ICsJZHBfcG93ZXJfcmVn dWxhdG9yX2N0cmwocG93ZXIsIGZhbHNlKTsKPiArZXhpdDoKPiArCXBtX3J1bnRpbWVfcHV0X3N5 bmMoJnBvd2VyLT5wZGV2LT5kZXYpOwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGRwX3Bvd2VyX2RlaW5pdChzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyKQo+ICt7Cj4gKwlp bnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyOwo+ICsKPiArCWlm ICghZHBfcG93ZXIpIHsKPiArCQlwcl9lcnIoImludmFsaWQgcG93ZXIgZGF0YVxuIik7Cj4gKwkJ cmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlwb3dlciA9IGNvbnRh aW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsKPiAr Cj4gKwlkcF9wb3dlcl9jbGtfZW5hYmxlKGRwX3Bvd2VyLCBEUF9DT1JFX1BNLCBmYWxzZSk7Cj4g KwlkcF9wb3dlcl9jb25maWdfZ3Bpb3MocG93ZXIsIGZhbHNlLCBmYWxzZSk7Cj4gKwlkcF9wb3dl cl9waW5jdHJsX3NldChwb3dlciwgZmFsc2UpOwo+ICsJZHBfcG93ZXJfcmVndWxhdG9yX2N0cmwo cG93ZXIsIGZhbHNlKTsKPiArCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBvd2VyLT5wZGV2LT5kZXYp Owo+ICtleGl0OgoKRGVsZXRlIGV4aXQgbGFiZWwvcmMgYW5kIHJldHVybiBkaXJlY3RseQoKPiAr CXJldHVybiByYzsKPiArfQo+ICsKPiArc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcl9nZXQoc3Ry dWN0IGRwX3BhcnNlciAqcGFyc2VyKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRw X3Bvd2VyX3ByaXZhdGUgKnBvd2VyOwo+ICsJc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcjsKPiAr Cj4gKwlpZiAoIXBhcnNlcikgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJ cmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJcG93ZXIgPSBkZXZt X2t6YWxsb2MoJnBhcnNlci0+cGRldi0+ZGV2LCBzaXplb2YoKnBvd2VyKSwgR0ZQX0tFUk5FTCk7 Cj4gKwlpZiAoIXBvd2VyKSB7Cj4gKwkJcmMgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyb3I7Cj4g Kwl9Cj4gKwo+ICsJcG93ZXItPnBhcnNlciA9IHBhcnNlcjsKPiArCXBvd2VyLT5wZGV2ID0gcGFy c2VyLT5wZGV2Owo+ICsKPiArCWRwX3Bvd2VyID0gJnBvd2VyLT5kcF9wb3dlcjsKPiArCj4gKwlk cF9wb3dlci0+aW5pdCA9IGRwX3Bvd2VyX2luaXQ7Cj4gKwlkcF9wb3dlci0+ZGVpbml0ID0gZHBf cG93ZXJfZGVpbml0Owo+ICsJZHBfcG93ZXItPmNsa19lbmFibGUgPSBkcF9wb3dlcl9jbGtfZW5h YmxlOwo+ICsJZHBfcG93ZXItPnNldF9waXhlbF9jbGtfcGFyZW50ID0gZHBfcG93ZXJfc2V0X3Bp eGVsX2Nsa19wYXJlbnQ7Cj4gKwlkcF9wb3dlci0+cG93ZXJfY2xpZW50X2luaXQgPSBkcF9wb3dl cl9jbGllbnRfaW5pdDsKPiArCWRwX3Bvd2VyLT5wb3dlcl9jbGllbnRfZGVpbml0ID0gZHBfcG93 ZXJfY2xpZW50X2RlaW5pdDsKPiArCj4gKwlyZXR1cm4gZHBfcG93ZXI7Cj4gK2Vycm9yOgo+ICsJ cmV0dXJuIEVSUl9QVFIocmMpOwo+ICt9Cj4gKwo+ICt2b2lkIGRwX3Bvd2VyX3B1dChzdHJ1Y3Qg ZHBfcG93ZXIgKmRwX3Bvd2VyKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93 ZXIgPSBOVUxMOwo+ICsKPiArCWlmICghZHBfcG93ZXIpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXBv d2VyID0gY29udGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBf cG93ZXIpOwo+ICsKPiArCWRldm1fa2ZyZWUoJnBvd2VyLT5wZGV2LT5kZXYsIHBvd2VyKTsKPiAr fQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmggYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAuLmQxYWRhYWYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9wb3dlci5oCj4gQEAgLTAsMCArMSw1NyBAQAo+ICsvKgo+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+ICsgKiBvbmx5 IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K PiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICovCj4gKwo+ICsj aWZuZGVmIF9EUF9QT1dFUl9IXwo+ICsjZGVmaW5lIF9EUF9QT1dFUl9IXwo+ICsKPiArI2luY2x1 ZGUgImRwX3BhcnNlci5oIgo+ICsjaW5jbHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgo+ICsKPiAr LyoqCj4gKyAqIHNydWN0IGRwX3Bvd2VyIC0gRGlzcGxheVBvcnQncyBwb3dlciByZWxhdGVkIGRh dGEKPiArICoKPiArICogQGluaXQ6IGluaXRpYWxpemVzIHRoZSByZWd1bGF0b3JzL2NvcmUgY2xv Y2tzL0dQSU9zL3BpbmN0cmwKPiArICogQGRlaW5pdDogdHVybnMgb2ZmIHRoZSByZWd1bGF0b3Jz L2NvcmUgY2xvY2tzL0dQSU9zL3BpbmN0cmwKPiArICogQGNsa19lbmFibGU6IGVuYWJsZS9kaXNh YmxlIHRoZSBEUCBjbG9ja3MKPiArICogQHNldF9waXhlbF9jbGtfcGFyZW50OiBzZXQgdGhlIHBh cmVudCBvZiBEUCBwaXhlbCBjbG9jawo+ICsgKi8KPiArc3RydWN0IGRwX3Bvd2VyIHsKPiArCWlu dCAoKmluaXQpKHN0cnVjdCBkcF9wb3dlciAqcG93ZXIsIGJvb2wgZmxpcCk7Cj4gKwlpbnQgKCpk ZWluaXQpKHN0cnVjdCBkcF9wb3dlciAqcG93ZXIpOwo+ICsJaW50ICgqY2xrX2VuYWJsZSkoc3Ry dWN0IGRwX3Bvd2VyICpwb3dlciwgZW51bSBkcF9wbV90eXBlIHBtX3R5cGUsCj4gKwkJCQlib29s IGVuYWJsZSk7Cj4gKwlpbnQgKCpzZXRfcGl4ZWxfY2xrX3BhcmVudCkoc3RydWN0IGRwX3Bvd2Vy ICpwb3dlcik7Cj4gKwlpbnQgKCpwb3dlcl9jbGllbnRfaW5pdCkoc3RydWN0IGRwX3Bvd2VyICpw b3dlcik7Cj4gKwl2b2lkICgqcG93ZXJfY2xpZW50X2RlaW5pdCkoc3RydWN0IGRwX3Bvd2VyICpw b3dlcik7Cj4gK307Cj4gKwo+ICsvKioKPiArICogZHBfcG93ZXJfZ2V0KCkgLSBjb25maWd1cmUg YW5kIGdldCB0aGUgRGlzcGxheVBvcnQgcG93ZXIgbW9kdWxlIGRhdGEKPiArICoKPiArICogQHBh cnNlcjogaW5zdGFuY2Ugb2YgcGFyc2VyIG1vZHVsZQo+ICsgKiByZXR1cm46IHBvaW50ZXIgdG8g YWxsb2NhdGVkIHBvd2VyIG1vZHVsZSBkYXRhCj4gKyAqCj4gKyAqIFRoaXMgQVBJIHdpbGwgY29u ZmlndXJlIHRoZSBEaXNwbGF5UG9ydCdzIHBvd2VyIG1vZHVsZSBhbmQgcHJvdmlkZXMKPiArICog bWV0aG9kcyB0byBiZSBjYWxsZWQgYnkgdGhlIGNsaWVudCB0byBjb25maWd1cmUgdGhlIHBvd2Vy IHJlbGF0ZWQKPiArICogbW9kdWVsZXMuCj4gKyAqLwo+ICtzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bv d2VyX2dldChzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpOwo+ICsKPiArLyoqCj4gKyAqIGRwX3Bv d2VyX3B1dCgpIC0gcmVsZWFzZSB0aGUgcG93ZXIgcmVsYXRlZCByZXNvdXJjZXMKPiArICoKPiAr ICogQHBvd2VyOiBwb2ludGVyIHRvIHRoZSBwb3dlciBtb2R1bGUncyBkYXRhCj4gKyAqLwo+ICt2 b2lkIGRwX3Bvd2VyX3B1dChzdHJ1Y3QgZHBfcG93ZXIgKnBvd2VyKTsKPiArI2VuZGlmIC8qIF9E UF9QT1dFUl9IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Jl Zy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9yZWcuaAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uNzdiNWMwZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3JlZy5oCj4gQEAgLTAsMCArMSwzNTcgQEAKPiArLyoKPiAr ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPiAr ICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqLwo+ ICsKPiArI2lmbmRlZiBfRFBfUkVHX0hfCj4gKyNkZWZpbmUgX0RQX1JFR19IXwo+ICsKPiArLyog RFBfVFggUmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgRFBfSFdfVkVSU0lPTgkJCQkoMHgwMDAwMDAw MCkKPiArI2RlZmluZSBEUF9TV19SRVNFVAkJCQkoMHgwMDAwMDAxMCkKPiArI2RlZmluZSBEUF9Q SFlfQ1RSTAkJCQkoMHgwMDAwMDAxNCkKPiArI2RlZmluZSBEUF9DTEtfQ1RSTAkJCQkoMHgwMDAw MDAxOCkKPiArI2RlZmluZSBEUF9DTEtfQUNUSVZFCQkJCSgweDAwMDAwMDFDKQo+ICsjZGVmaW5l IERQX0lOVFJfU1RBVFVTCQkJCSgweDAwMDAwMDIwKQo+ICsjZGVmaW5lIERQX0lOVFJfU1RBVFVT MgkJCQkoMHgwMDAwMDAyNCkKPiArI2RlZmluZSBEUF9JTlRSX1NUQVRVUzMJCQkJKDB4MDAwMDAw MjgpCj4gKwo+ICsjZGVmaW5lIERQX0RQX0hQRF9DVFJMCQkJCSgweDAwMDAwMDAwKQo+ICsjZGVm aW5lIERQX0RQX0hQRF9JTlRfU1RBVFVTCQkJKDB4MDAwMDAwMDQpCj4gKyNkZWZpbmUgRFBfRFBf SFBEX0lOVF9BQ0sJCQkoMHgwMDAwMDAwOCkKPiArI2RlZmluZSBEUF9EUF9IUERfSU5UX01BU0sJ CQkoMHgwMDAwMDAwQykKPiArI2RlZmluZSBEUF9EUF9IUERfUkVGVElNRVIJCQkoMHgwMDAwMDAx OCkKPiArI2RlZmluZSBEUF9EUF9IUERfRVZFTlRfVElNRV8wCQkJKDB4MDAwMDAwMUMpCj4gKyNk ZWZpbmUgRFBfRFBfSFBEX0VWRU5UX1RJTUVfMQkJCSgweDAwMDAwMDIwKQo+ICsjZGVmaW5lIERQ X0FVWF9DVFJMCQkJCSgweDAwMDAwMDMwKQo+ICsjZGVmaW5lIERQX0FVWF9EQVRBCQkJCSgweDAw MDAwMDM0KQo+ICsjZGVmaW5lIERQX0FVWF9UUkFOU19DVFJMCQkJKDB4MDAwMDAwMzgpCj4gKyNk ZWZpbmUgRFBfVElNRU9VVF9DT1VOVAkJCSgweDAwMDAwMDNDKQo+ICsjZGVmaW5lIERQX0FVWF9M SU1JVFMJCQkJKDB4MDAwMDAwNDApCj4gKyNkZWZpbmUgRFBfQVVYX1NUQVRVUwkJCQkoMHgwMDAw MDA0NCkKPiArCj4gKyNkZWZpbmUgRFBfRFBDRF9DUF9JUlEJCQkJKDB4MjAxKQo+ICsjZGVmaW5l IERQX0RQQ0RfUlhTVEFUVVMJCQkoMHg2OTQ5MykKPiArCj4gKyNkZWZpbmUgRFBfSU5URVJSVVBU X1RSQU5TX05VTQkJCSgweDAwMDAwMEEwKQo+ICsKPiArI2RlZmluZSBEUF9NQUlOTElOS19DVFJM CQkJKDB4MDAwMDAwMDApCj4gKyNkZWZpbmUgRFBfU1RBVEVfQ1RSTAkJCQkoMHgwMDAwMDAwNCkK PiArI2RlZmluZSBEUF9DT05GSUdVUkFUSU9OX0NUUkwJCQkoMHgwMDAwMDAwOCkKPiArI2RlZmlu ZSBEUF9TT0ZUV0FSRV9NVklECQkJKDB4MDAwMDAwMTApCj4gKyNkZWZpbmUgRFBfU09GVFdBUkVf TlZJRAkJCSgweDAwMDAwMDE4KQo+ICsjZGVmaW5lIERQX1RPVEFMX0hPUl9WRVIJCQkoMHgwMDAw MDAxQykKPiArI2RlZmluZSBEUF9TVEFSVF9IT1JfVkVSX0ZST01fU1lOQwkJKDB4MDAwMDAwMjAp Cj4gKyNkZWZpbmUgRFBfSFNZTkNfVlNZTkNfV0lEVEhfUE9MQVJJVFkJCSgweDAwMDAwMDI0KQo+ ICsjZGVmaW5lIERQX0FDVElWRV9IT1JfVkVSCQkJKDB4MDAwMDAwMjgpCj4gKyNkZWZpbmUgRFBf TUlTQzFfTUlTQzAJCQkJKDB4MDAwMDAwMkMpCj4gKyNkZWZpbmUgRFBfVkFMSURfQk9VTkRBUlkJ CQkoMHgwMDAwMDAzMCkKPiArI2RlZmluZSBEUF9WQUxJRF9CT1VOREFSWV8yCQkJKDB4MDAwMDAw MzQpCj4gKyNkZWZpbmUgRFBfTE9HSUNBTDJQSFlTSUNBTF9MQU5FX01BUFBJTkcJKDB4MDAwMDAw MzgpCj4gKwo+ICsjZGVmaW5lIERQX01BSU5MSU5LX1JFQURZCQkJKDB4MDAwMDAwNDApCj4gKyNk ZWZpbmUgRFBfTUFJTkxJTktfTEVWRUxTCQkJKDB4MDAwMDAwNDQpCj4gKyNkZWZpbmUgRFBfVFUJ CQkJCSgweDAwMDAwMDRDKQo+ICsKPiArI2RlZmluZSBEUF9IQlIyX0NPTVBMSUFOQ0VfU0NSQU1C TEVSX1JFU0VUCSgweDAwMDAwMDU0KQo+ICsjZGVmaW5lIERQX1RFU1RfODBCSVRfQ1VTVE9NX1BB VFRFUk5fUkVHMAkoMHgwMDAwMDBDMCkKPiArI2RlZmluZSBEUF9URVNUXzgwQklUX0NVU1RPTV9Q QVRURVJOX1JFRzEJKDB4MDAwMDAwQzQpCj4gKyNkZWZpbmUgRFBfVEVTVF84MEJJVF9DVVNUT01f UEFUVEVSTl9SRUcyCSgweDAwMDAwMEM4KQo+ICsKPiArI2RlZmluZSBNTVNTX0RQX01JU0MxX01J U0MwCQkJKDB4MDAwMDAwMkMpCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19USU1JTkdfR0VOCQko MHgwMDAwMDA4MCkKPiArI2RlZmluZSBNTVNTX0RQX0FVRElPX1RJTUlOR19SQlJfMzIJCSgweDAw MDAwMDg0KQo+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNSU5HX0hCUl8zMgkJKDB4MDAwMDAw ODgpCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19USU1JTkdfUkJSXzQ0CQkoMHgwMDAwMDA4QykK PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX1RJTUlOR19IQlJfNDQJCSgweDAwMDAwMDkwKQo+ICsj ZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNSU5HX1JCUl80OAkJKDB4MDAwMDAwOTQpCj4gKyNkZWZp bmUgTU1TU19EUF9BVURJT19USU1JTkdfSEJSXzQ4CQkoMHgwMDAwMDA5OCkKPiArCj4gKyNkZWZp bmUgTU1TU19EUF9QU1JfQ1JDX1JHCQkJKDB4MDAwMDAxNTQpCj4gKyNkZWZpbmUgTU1TU19EUF9Q U1JfQ1JDX0IJCQkoMHgwMDAwMDE1OCkKPiArCj4gKyNkZWZpbmUgRFBfQ09NUFJFU1NJT05fTU9E RV9DVFJMCQkoMHgwMDAwMDE4MCkKPiArCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19DRkcJCQko MHgwMDAwMDIwMCkKPiArI2RlZmluZSBNTVNTX0RQX0FVRElPX1NUQVRVUwkJCSgweDAwMDAwMjA0 KQo+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fUEtUX0NUUkwJCQkoMHgwMDAwMDIwOCkKPiArI2Rl ZmluZSBNTVNTX0RQX0FVRElPX1BLVF9DVFJMMgkJCSgweDAwMDAwMjBDKQo+ICsjZGVmaW5lIE1N U1NfRFBfQVVESU9fQUNSX0NUUkwJCQkoMHgwMDAwMDIxMCkKPiArI2RlZmluZSBNTVNTX0RQX0FV RElPX0NUUkxfUkVTRVQJCSgweDAwMDAwMjE0KQo+ICsKPiArI2RlZmluZSBNTVNTX0RQX1NEUF9D RkcJCQkJKDB4MDAwMDAyMjgpCj4gKyNkZWZpbmUgTU1TU19EUF9TRFBfQ0ZHMgkJCSgweDAwMDAw MjJDKQo+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNRVNUQU1QXzAJCSgweDAwMDAwMjMwKQo+ ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fVElNRVNUQU1QXzEJCSgweDAwMDAwMjM0KQo+ICsKPiAr I2RlZmluZSBNTVNTX0RQX0FVRElPX1NUUkVBTV8wCQkJKDB4MDAwMDAyNDApCj4gKyNkZWZpbmUg TU1TU19EUF9BVURJT19TVFJFQU1fMQkJCSgweDAwMDAwMjQ0KQo+ICsKPiArI2RlZmluZSBNTVNT X0RQX0VYVEVOU0lPTl8wCQkJKDB4MDAwMDAyNTApCj4gKyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJ T05fMQkJCSgweDAwMDAwMjU0KQo+ICsjZGVmaW5lIE1NU1NfRFBfRVhURU5TSU9OXzIJCQkoMHgw MDAwMDI1OCkKPiArI2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl8zCQkJKDB4MDAwMDAyNUMpCj4g KyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJT05fNAkJCSgweDAwMDAwMjYwKQo+ICsjZGVmaW5lIE1N U1NfRFBfRVhURU5TSU9OXzUJCQkoMHgwMDAwMDI2NCkKPiArI2RlZmluZSBNTVNTX0RQX0VYVEVO U0lPTl82CQkJKDB4MDAwMDAyNjgpCj4gKyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJT05fNwkJCSgw eDAwMDAwMjZDKQo+ICsjZGVmaW5lIE1NU1NfRFBfRVhURU5TSU9OXzgJCQkoMHgwMDAwMDI3MCkK PiArI2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl85CQkJKDB4MDAwMDAyNzQpCj4gKyNkZWZpbmUg TU1TU19EUF9BVURJT19DT1BZTUFOQUdFTUVOVF8wCQkoMHgwMDAwMDI3OCkKPiArI2RlZmluZSBN TVNTX0RQX0FVRElPX0NPUFlNQU5BR0VNRU5UXzEJCSgweDAwMDAwMjdDKQo+ICsjZGVmaW5lIE1N U1NfRFBfQVVESU9fQ09QWU1BTkFHRU1FTlRfMgkJKDB4MDAwMDAyODApCj4gKyNkZWZpbmUgTU1T U19EUF9BVURJT19DT1BZTUFOQUdFTUVOVF8zCQkoMHgwMDAwMDI4NCkKPiArI2RlZmluZSBNTVNT X0RQX0FVRElPX0NPUFlNQU5BR0VNRU5UXzQJCSgweDAwMDAwMjg4KQo+ICsjZGVmaW5lIE1NU1Nf RFBfQVVESU9fQ09QWU1BTkFHRU1FTlRfNQkJKDB4MDAwMDAyOEMpCj4gKyNkZWZpbmUgTU1TU19E UF9BVURJT19JU1JDXzAJCQkoMHgwMDAwMDI5MCkKPiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0lT UkNfMQkJCSgweDAwMDAwMjk0KQo+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fSVNSQ18yCQkJKDB4 MDAwMDAyOTgpCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19JU1JDXzMJCQkoMHgwMDAwMDI5QykK PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0lTUkNfNAkJCSgweDAwMDAwMkEwKQo+ICsjZGVmaW5l IE1NU1NfRFBfQVVESU9fSVNSQ181CQkJKDB4MDAwMDAyQTQpCj4gKyNkZWZpbmUgTU1TU19EUF9B VURJT19JTkZPRlJBTUVfMAkJKDB4MDAwMDAyQTgpCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19J TkZPRlJBTUVfMQkJKDB4MDAwMDAyQUMpCj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19JTkZPRlJB TUVfMgkJKDB4MDAwMDAyQjApCj4gKwo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfMAkJCSgw eDAwMDAwMzAwKQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfMQkJCSgweDAwMDAwMzA0KQo+ ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfMgkJCSgweDAwMDAwMzA4KQo+ICsjZGVmaW5lIE1N U1NfRFBfR0VORVJJQzBfMwkJCSgweDAwMDAwMzBDKQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJ QzBfNAkJCSgweDAwMDAwMzEwKQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfNQkJCSgweDAw MDAwMzE0KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfNgkJCSgweDAwMDAwMzE4KQo+ICsj ZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfNwkJCSgweDAwMDAwMzFDKQo+ICsjZGVmaW5lIE1NU1Nf RFBfR0VORVJJQzBfOAkJCSgweDAwMDAwMzIwKQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBf OQkJCSgweDAwMDAwMzI0KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfMAkJCSgweDAwMDAw MzI4KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfMQkJCSgweDAwMDAwMzJDKQo+ICsjZGVm aW5lIE1NU1NfRFBfR0VORVJJQzFfMgkJCSgweDAwMDAwMzMwKQo+ICsjZGVmaW5lIE1NU1NfRFBf R0VORVJJQzFfMwkJCSgweDAwMDAwMzM0KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfNAkJ CSgweDAwMDAwMzM4KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfNQkJCSgweDAwMDAwMzND KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfNgkJCSgweDAwMDAwMzQwKQo+ICsjZGVmaW5l IE1NU1NfRFBfR0VORVJJQzFfNwkJCSgweDAwMDAwMzQ0KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VO RVJJQzFfOAkJCSgweDAwMDAwMzQ4KQo+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfOQkJCSgw eDAwMDAwMzRDKQo+ICsKPiArI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF8wCQkJKDB4MDAwMDAyRDAp Cj4gKyNkZWZpbmUgTU1TU19EUF9WU0NFWFRfMQkJCSgweDAwMDAwMkQ0KQo+ICsjZGVmaW5lIE1N U1NfRFBfVlNDRVhUXzIJCQkoMHgwMDAwMDJEOCkKPiArI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF8z CQkJKDB4MDAwMDAyREMpCj4gKyNkZWZpbmUgTU1TU19EUF9WU0NFWFRfNAkJCSgweDAwMDAwMkUw KQo+ICsjZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzUJCQkoMHgwMDAwMDJFNCkKPiArI2RlZmluZSBN TVNTX0RQX1ZTQ0VYVF82CQkJKDB4MDAwMDAyRTgpCj4gKyNkZWZpbmUgTU1TU19EUF9WU0NFWFRf NwkJCSgweDAwMDAwMkVDKQo+ICsjZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzgJCQkoMHgwMDAwMDJG MCkKPiArI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF85CQkJKDB4MDAwMDAyRjQpCj4gKwo+ICsjZGVm aW5lIE1NU1NfRFBfQklTVF9FTkFCTEUJCQkoMHgwMDAwMDAwMCkKPiArI2RlZmluZSBNTVNTX0RQ X1RJTUlOR19FTkdJTkVfRU4JCSgweDAwMDAwMDEwKQo+ICsjZGVmaW5lIE1NU1NfRFBfSU5URl9D T05GSUcJCQkoMHgwMDAwMDAxNCkKPiArI2RlZmluZSBNTVNTX0RQX0lOVEZfSFNZTkNfQ1RMCQkJ KDB4MDAwMDAwMTgpCj4gKyNkZWZpbmUgTU1TU19EUF9JTlRGX1ZTWU5DX1BFUklPRF9GMAkJKDB4 MDAwMDAwMUMpCj4gKyNkZWZpbmUgTU1TU19EUF9JTlRGX1ZTWU5DX1BFUklPRF9GMQkJKDB4MDAw MDAwMjApCj4gKyNkZWZpbmUgTU1TU19EUF9JTlRGX1ZTWU5DX1BVTFNFX1dJRFRIX0YwCSgweDAw MDAwMDI0KQo+ICsjZGVmaW5lIE1NU1NfRFBfSU5URl9WU1lOQ19QVUxTRV9XSURUSF9GMQkoMHgw MDAwMDAyOCkKPiArI2RlZmluZSBNTVNTX0lOVEZfRElTUExBWV9WX1NUQVJUX0YwCQkoMHgwMDAw MDAyQykKPiArI2RlZmluZSBNTVNTX0lOVEZfRElTUExBWV9WX1NUQVJUX0YxCQkoMHgwMDAwMDAz MCkKPiArI2RlZmluZSBNTVNTX0RQX0lOVEZfRElTUExBWV9WX0VORF9GMAkJKDB4MDAwMDAwMzQp Cj4gKyNkZWZpbmUgTU1TU19EUF9JTlRGX0RJU1BMQVlfVl9FTkRfRjEJCSgweDAwMDAwMDM4KQo+ ICsjZGVmaW5lIE1NU1NfRFBfSU5URl9BQ1RJVkVfVl9TVEFSVF9GMAkJKDB4MDAwMDAwM0MpCj4g KyNkZWZpbmUgTU1TU19EUF9JTlRGX0FDVElWRV9WX1NUQVJUX0YxCQkoMHgwMDAwMDA0MCkKPiAr I2RlZmluZSBNTVNTX0RQX0lOVEZfQUNUSVZFX1ZfRU5EX0YwCQkoMHgwMDAwMDA0NCkKPiArI2Rl ZmluZSBNTVNTX0RQX0lOVEZfQUNUSVZFX1ZfRU5EX0YxCQkoMHgwMDAwMDA0OCkKPiArI2RlZmlu ZSBNTVNTX0RQX0lOVEZfRElTUExBWV9IQ1RMCQkoMHgwMDAwMDA0QykKPiArI2RlZmluZSBNTVNT X0RQX0lOVEZfQUNUSVZFX0hDVEwJCSgweDAwMDAwMDUwKQo+ICsjZGVmaW5lIE1NU1NfRFBfSU5U Rl9QT0xBUklUWV9DVEwJCSgweDAwMDAwMDU4KQo+ICsjZGVmaW5lIE1NU1NfRFBfVFBHX01BSU5f Q09OVFJPTAkJKDB4MDAwMDAwNjApCj4gKyNkZWZpbmUgTU1TU19EUF9UUEdfVklERU9fQ09ORklH CQkoMHgwMDAwMDA2NCkKPiArI2RlZmluZSBNTVNTX0RQX0FTWU5DX0ZJRk9fQ09ORklHCQkoMHgw MDAwMDA4OCkKPiArCj4gKy8qRFAgUEhZIFJlZ2lzdGVyIG9mZnNldHMgKi8KPiArI2RlZmluZSBE UF9QSFlfUkVWSVNJT05fSUQwICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCj4gKyNk ZWZpbmUgRFBfUEhZX1JFVklTSU9OX0lEMSAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA0 KQo+ICsjZGVmaW5lIERQX1BIWV9SRVZJU0lPTl9JRDIgICAgICAgICAgICAgICAgICAgICAoMHgw MDAwMDAwOCkKPiArI2RlZmluZSBEUF9QSFlfUkVWSVNJT05fSUQzICAgICAgICAgICAgICAgICAg ICAgKDB4MDAwMDAwMEMpCj4gKwo+ICsjZGVmaW5lIERQX1BIWV9DRkcgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoMHgwMDAwMDAxMCkKPiArI2RlZmluZSBEUF9QSFlfUERfQ1RMICAgICAg ICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMTgpCj4gKyNkZWZpbmUgRFBfUEhZX01PREUg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDFDKQo+ICsKPiArI2RlZmluZSBE UF9QSFlfQVVYX0NGRzAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMjApCj4gKyNk ZWZpbmUgRFBfUEhZX0FVWF9DRkcxICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDI0 KQo+ICsjZGVmaW5lIERQX1BIWV9BVVhfQ0ZHMiAgICAgICAgICAgICAgICAgICAgICAgICAoMHgw MDAwMDAyOCkKPiArI2RlZmluZSBEUF9QSFlfQVVYX0NGRzMgICAgICAgICAgICAgICAgICAgICAg ICAgKDB4MDAwMDAwMkMpCj4gKyNkZWZpbmUgRFBfUEhZX0FVWF9DRkc0ICAgICAgICAgICAgICAg ICAgICAgICAgICgweDAwMDAwMDMwKQo+ICsjZGVmaW5lIERQX1BIWV9BVVhfQ0ZHNSAgICAgICAg ICAgICAgICAgICAgICAgICAoMHgwMDAwMDAzNCkKPiArI2RlZmluZSBEUF9QSFlfQVVYX0NGRzYg ICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMzgpCj4gKyNkZWZpbmUgRFBfUEhZX0FV WF9DRkc3ICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDNDKQo+ICsjZGVmaW5lIERQ X1BIWV9BVVhfQ0ZHOCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDA0MCkKPiArI2Rl ZmluZSBEUF9QSFlfQVVYX0NGRzkgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwNDQp Cj4gKyNkZWZpbmUgRFBfUEhZX0FVWF9JTlRFUlJVUFRfTUFTSyAgICAgICAgICAgICAgICgweDAw MDAwMDQ4KQo+ICsjZGVmaW5lIERQX1BIWV9BVVhfSU5URVJSVVBUX0NMRUFSICAgICAgICAgICAg ICAoMHgwMDAwMDA0QykKPiArI2RlZmluZSBEUF9QSFlfQVVYX0JJU1RfQ0ZHCQkJKDB4MDAwMDAw NTApCj4gKwo+ICsjZGVmaW5lIERQX1BIWV9WQ09fRElWCQkJCTB4MDA2NAo+ICsjZGVmaW5lIERQ X1BIWV9UWDBfVFgxX0xBTkVfQ1RMCQkJMHgwMDZDCj4gKyNkZWZpbmUgRFBfUEhZX1RYMl9UWDNf TEFORV9DVEwJCQkweDAwODgKPiArCj4gKyNkZWZpbmUgRFBfUEhZX1NQQVJFMAkJCQkoMHgwMEFD KQo+ICsjZGVmaW5lIERQX1BIWV9TVEFUVVMJCQkJKDB4MDBDMCkKPiArCj4gKy8qIFR4IHJlZ2lz dGVycyAqLwo+ICsjZGVmaW5lIFRYbl9CSVNUX01PREVfTEFORU5PCQkJMHgwMDAwCj4gKyNkZWZp bmUgVFhuX0NMS0JVRl9FTkFCTEUJCQkweDAwMDgKPiArI2RlZmluZSBUWG5fVFhfRU1QX1BPU1Qx X0xWTAkJCTB4MDAwQwo+ICsKPiArI2RlZmluZSBUWG5fVFhfRFJWX0xWTAkJCQkweDAwMUMKPiAr Cj4gKyNkZWZpbmUgVFhuX1JFU0VUX1RTWU5DX0VOCQkJMHgwMDI0Cj4gKyNkZWZpbmUgVFhuX1BS RV9TVEFMTF9MRE9fQk9PU1RfRU4JCTB4MDAyOAo+ICsjZGVmaW5lIFRYbl9UWF9CQU5ECQkJCTB4 MDAyQwo+ICsjZGVmaW5lIFRYbl9TTEVXX0NOVEwJCQkJMHgwMDMwCj4gKyNkZWZpbmUgVFhuX0lO VEVSRkFDRV9TRUxFQ1QJCQkweDAwMzQKPiArCj4gKyNkZWZpbmUgVFhuX1JFU19DT0RFX0xBTkVf VFgJCQkweDAwM0MKPiArI2RlZmluZSBUWG5fUkVTX0NPREVfTEFORV9SWAkJCTB4MDA0MAo+ICsj ZGVmaW5lIFRYbl9SRVNfQ09ERV9MQU5FX09GRlNFVF9UWAkJMHgwMDQ0Cj4gKyNkZWZpbmUgVFhu X1JFU19DT0RFX0xBTkVfT0ZGU0VUX1JYCQkweDAwNDgKPiArCj4gKyNkZWZpbmUgVFhuX0RFQlVH X0JVU19TRUwJCQkweDAwNTgKPiArI2RlZmluZSBUWG5fVFJBTlNDRUlWRVJfQklBU19FTgkJCTB4 MDA1Qwo+ICsjZGVmaW5lIFRYbl9ISUdIWl9EUlZSX0VOCQkJMHgwMDYwCj4gKyNkZWZpbmUgVFhu X1RYX1BPTF9JTlYJCQkJMHgwMDY0Cj4gKyNkZWZpbmUgVFhuX1BBUlJBVEVfUkVDX0RFVEVDVF9J RExFX0VOCQkweDAwNjgKPiArCj4gKyNkZWZpbmUgVFhuX0xBTkVfTU9ERV8xCQkJCTB4MDA4Qwo+ ICsKPiArI2RlZmluZSBUWG5fVFJBTl9EUlZSX0VNUF9FTgkJCTB4MDBDMAo+ICsjZGVmaW5lIFRY bl9UWF9JTlRFUkZBQ0VfTU9ERQkJCTB4MDBDNAo+ICsKPiArI2RlZmluZSBUWG5fVk1PREVfQ1RS TDEJCQkJMHgwMEYwCj4gKwo+ICsvKiBQTEwgcmVnaXN0ZXIgb2Zmc2V0ICovCj4gKyNkZWZpbmUg UVNFUkRFU19DT01fQVRCX1NFTDEJCQkweDAwMDAKPiArI2RlZmluZSBRU0VSREVTX0NPTV9BVEJf U0VMMgkJCTB4MDAwNAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0ZSRVFfVVBEQVRFCQkJMHgwMDA4 Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQkdfVElNRVIJCQkweDAwMEMKPiArI2RlZmluZSBRU0VS REVTX0NPTV9TU0NfRU5fQ0VOVEVSCQkweDAwMTAKPiArI2RlZmluZSBRU0VSREVTX0NPTV9TU0Nf QURKX1BFUjEJCTB4MDAxNAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX1NTQ19BREpfUEVSMgkJMHgw MDE4Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fU1NDX1BFUjEJCQkweDAwMUMKPiArI2RlZmluZSBR U0VSREVTX0NPTV9TU0NfUEVSMgkJCTB4MDAyMAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX1NTQ19T VEVQX1NJWkUxCQkweDAwMjQKPiArI2RlZmluZSBRU0VSREVTX0NPTV9TU0NfU1RFUF9TSVpFMgkJ MHgwMDI4Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fUE9TVF9ESVYJCQkweDAwMkMKPiArI2RlZmlu ZSBRU0VSREVTX0NPTV9QT1NUX0RJVl9NVVgJCTB4MDAzMAo+ICsjZGVmaW5lIFFTRVJERVNfQ09N X0JJQVNfRU5fQ0xLQlVGTFJfRU4JCTB4MDAzNAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NMS19F TkFCTEUxCQkJMHgwMDM4Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fU1lTX0NMS19DVFJMCQkweDAw M0MKPiArI2RlZmluZSBRU0VSREVTX0NPTV9TWVNDTEtfQlVGX0VOQUJMRQkJMHgwMDQwCj4gKyNk ZWZpbmUgUVNFUkRFU19DT01fUExMX0VOCQkJMHgwMDQ0Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01f UExMX0lWQ08JCQkweDAwNDgKPiArI2RlZmluZSBRU0VSREVTX0NPTV9DTU5fSUVUUklNCQkJMHgw MDRDCj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQ01OX0lQVFJJTQkJCTB4MDA1MAo+ICsKPiArI2Rl ZmluZSBRU0VSREVTX0NPTV9DUF9DVFJMX01PREUwCQkweDAwNjAKPiArI2RlZmluZSBRU0VSREVT X0NPTV9DUF9DVFJMX01PREUxCQkweDAwNjQKPiArI2RlZmluZSBRU0VSREVTX0NPTV9QTExfUkNU UkxfTU9ERTAJCTB4MDA2OAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9SQ1RSTF9NT0RFMQkJ MHgwMDZDCj4gKyNkZWZpbmUgUVNFUkRFU19DT01fUExMX0NDVFJMX01PREUwCQkweDAwNzAKPiAr I2RlZmluZSBRU0VSREVTX0NPTV9QTExfQ0NUUkxfTU9ERTEJCTB4MDA3NAo+ICsjZGVmaW5lIFFT RVJERVNfQ09NX1BMTF9DTlRSTAkJCTB4MDA3OAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0JJQVNf RU5fQ1RSTF9CWV9QU00JCTB4MDA3Qwo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX1NZU0NMS19FTl9T RUwJCTB4MDA4MAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NNTF9TWVNDTEtfU0VMCQkweDAwODQK PiArI2RlZmluZSBRU0VSREVTX0NPTV9SRVNFVFNNX0NOVFJMCQkweDAwODgKPiArI2RlZmluZSBR U0VSREVTX0NPTV9SRVNFVFNNX0NOVFJMMgkJMHgwMDhDCj4gKyNkZWZpbmUgUVNFUkRFU19DT01f TE9DS19DTVBfRU4JCQkweDAwOTAKPiArI2RlZmluZSBRU0VSREVTX0NPTV9MT0NLX0NNUF9DRkcJ CTB4MDA5NAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0xPQ0tfQ01QMV9NT0RFMAkJMHgwMDk4Cj4g KyNkZWZpbmUgUVNFUkRFU19DT01fTE9DS19DTVAyX01PREUwCQkweDAwOUMKPiArI2RlZmluZSBR U0VSREVTX0NPTV9MT0NLX0NNUDNfTU9ERTAJCTB4MDBBMAo+ICsKPiArI2RlZmluZSBRU0VSREVT X0NPTV9ERUNfU1RBUlRfTU9ERTAJCTB4MDBCMAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0RFQ19T VEFSVF9NT0RFMQkJMHgwMEI0Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQx X01PREUwCTB4MDBCOAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMl9NT0RF MAkweDAwQkMKPiArI2RlZmluZSBRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDNfTU9ERTAJMHgw MEMwCj4gKyNkZWZpbmUgUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQxX01PREUxCTB4MDBDNAo+ ICsjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMl9NT0RFMQkweDAwQzgKPiArI2Rl ZmluZSBRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDNfTU9ERTEJMHgwMENDCj4gKyNkZWZpbmUg UVNFUkRFU19DT01fSU5URUdMT09QX0lOSVRWQUwJCTB4MDBEMAo+ICsjZGVmaW5lIFFTRVJERVNf Q09NX0lOVEVHTE9PUF9FTgkJMHgwMEQ0Cj4gKyNkZWZpbmUgUVNFUkRFU19DT01fSU5URUdMT09Q X0dBSU4wX01PREUwCTB4MDBEOAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0lOVEVHTE9PUF9HQUlO MV9NT0RFMAkweDAwREMKPiArI2RlZmluZSBRU0VSREVTX0NPTV9JTlRFR0xPT1BfR0FJTjBfTU9E RTEJMHgwMEUwCj4gKyNkZWZpbmUgUVNFUkRFU19DT01fSU5URUdMT09QX0dBSU4xX01PREUxCTB4 MDBFNAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX1ZDT0NBTF9ERUFETUFOX0NUUkwJCTB4MDBFOAo+ ICsjZGVmaW5lIFFTRVJERVNfQ09NX1ZDT19UVU5FX0NUUkwJCTB4MDBFQwo+ICsjZGVmaW5lIFFT RVJERVNfQ09NX1ZDT19UVU5FX01BUAkJMHgwMEYwCj4gKwo+ICsjZGVmaW5lIFFTRVJERVNfQ09N X0NNTl9TVEFUVVMJCQkweDAxMjQKPiArI2RlZmluZSBRU0VSREVTX0NPTV9SRVNFVF9TTV9TVEFU VVMJCTB4MDEyOAo+ICsKPiArI2RlZmluZSBRU0VSREVTX0NPTV9DTEtfU0VMCQkJMHgwMTM4Cj4g KyNkZWZpbmUgUVNFUkRFU19DT01fSFNDTEtfU0VMCQkJMHgwMTNDCj4gKwo+ICsjZGVmaW5lIFFT RVJERVNfQ09NX0NPUkVDTEtfRElWX01PREUwCQkweDAxNDgKPiArCj4gKyNkZWZpbmUgUVNFUkRF U19DT01fU1dfUkVTRVQJCQkweDAxNTAKPiArI2RlZmluZSBRU0VSREVTX0NPTV9DT1JFX0NMS19F TgkJCTB4MDE1NAo+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NfUkVBRFlfU1RBVFVTCQkweDAxNTgK PiArI2RlZmluZSBRU0VSREVTX0NPTV9DTU5fQ09ORklHCQkJMHgwMTVDCj4gKwo+ICsjZGVmaW5l IFFTRVJERVNfQ09NX1NWU19NT0RFX0NMS19TRUwJCTB4MDE2NAo+ICsKPiArLyogRFAgTU1TU19D QyByZWdpc3RlcnMgKi8KPiArI2RlZmluZSBNTVNTX0RQX0xJTktfQ01EX1JDR1IJCQkoMHgwMTM4 KQo+ICsjZGVmaW5lIE1NU1NfRFBfTElOS19DRkdfUkNHUgkJCSgweDAxM0MpCj4gKyNkZWZpbmUg TU1TU19EUF9QSVhFTF9NCQkJCSgweDAxNzQpCj4gKyNkZWZpbmUgTU1TU19EUF9QSVhFTF9OCQkJ CSgweDAxNzgpCj4gKwo+ICsvKiBEUCBIRENQIDEuMyByZWdpc3RlcnMgKi8KPiArI2RlZmluZSBE UF9IRENQX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDBBMCkKPiAr I2RlZmluZSBEUF9IRENQX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgw eDBBNCkKPiArI2RlZmluZSBEUF9IRENQX1NXX1VQUEVSX0FLU1YgICAgICAgICAgICAgICAgICAg ICAgICAgICgweDA5OCkKPiArI2RlZmluZSBEUF9IRENQX1NXX0xPV0VSX0FLU1YgICAgICAgICAg ICAgICAgICAgICAgICAgICgweDA5QykKPiArI2RlZmluZSBEUF9IRENQX0VOVFJPUFlfQ1RSTDAg ICAgICAgICAgICAgICAgICAgICAgICAgICgweDM1MCkKPiArI2RlZmluZSBEUF9IRENQX0VOVFJP UFlfQ1RSTDEgICAgICAgICAgICAgICAgICAgICAgICAgICgweDM1QykKPiArI2RlZmluZSBEUF9I RENQX1NIQV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDBDOCkKPiArI2Rl ZmluZSBEUF9IRENQX1JDVlBPUlRfREFUQTJfMCAgICAgICAgICAgICAgICAgICAgICAgICgweDBC MCkKPiArI2RlZmluZSBEUF9IRENQX1JDVlBPUlRfREFUQTMgICAgICAgICAgICAgICAgICAgICAg ICAgICgweDBBNCkKPiArI2RlZmluZSBEUF9IRENQX1JDVlBPUlRfREFUQTQgICAgICAgICAgICAg ICAgICAgICAgICAgICgweDBBOCkKPiArI2RlZmluZSBEUF9IRENQX1JDVlBPUlRfREFUQTUgICAg ICAgICAgICAgICAgICAgICAgICAgICgweDBDMCkKPiArI2RlZmluZSBEUF9IRENQX1JDVlBPUlRf REFUQTYgICAgICAgICAgICAgICAgICAgICAgICAgICgweDBDNCkKPiArCj4gKyNkZWZpbmUgSERD UF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1NIQV9DVFJMICAgICAgICAgICAoMHgwMjQpCj4gKyNk ZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1NIQV9EQVRBICAgICAgICAgICAoMHgw MjgpCj4gKyNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTAg ICAgICAoMHgwMDQpCj4gKyNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBP UlRfREFUQTEgICAgICAoMHgwMDgpCj4gKyNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19I RENQX1JDVlBPUlRfREFUQTcgICAgICAoMHgwMEMpCj4gKyNkZWZpbmUgSERDUF9TRUNfRFBfVFpf SFZfSExPU19IRENQX1JDVlBPUlRfREFUQTggICAgICAoMHgwMTApCj4gKyNkZWZpbmUgSERDUF9T RUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTkgICAgICAoMHgwMTQpCj4gKyNkZWZp bmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTEwICAgICAoMHgwMTgp Cj4gKyNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTExICAg ICAoMHgwMUMpCj4gKyNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRf REFUQTEyICAgICAoMHgwMjApCj4gKwo+ICsvKiBVU0IzIERQIENPTSByZWdpc3RlcnMgKi8KPiAr I2RlZmluZSBVU0IzX0RQX0NPTV9SRVNFVF9PVlJEX0NUUkwgKDB4MUMpCj4gKyNkZWZpbmUgVVNC M19EUF9DT01fUEhZX01PREVfQ1RSTCAgICgweDAwKQo+ICsjZGVmaW5lIFVTQjNfRFBfQ09NX1NX X1JFU0VUICAgICAgICAoMHgwNCkKPiArI2RlZmluZSBVU0IzX0RQX0NPTV9UWVBFQ19DVFJMICAg ICAgKDB4MTApCj4gKyNkZWZpbmUgVVNCM19EUF9DT01fU1dJX0NUUkwgICAgICAgICgweDBjKQo+ ICsjZGVmaW5lIFVTQjNfRFBfQ09NX1BPV0VSX0RPV05fQ1RSTCAoMHgwOCkKPiArCj4gKwo+ICsK PiArI2VuZGlmIC8qIF9EUF9SRUdfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9tc21fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwo+IGluZGV4IGY1 Y2Q3ZjYuLmJlODAxYmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2 LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwo+IEBAIC0xMzY3LDYgKzEz NjcsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBtc21fZHJtX3JlZ2lzdGVyKHZvaWQpCj4gIAltc21f ZHNpX3JlZ2lzdGVyKCk7Cj4gIAltc21fZWRwX3JlZ2lzdGVyKCk7Cj4gIAltc21faGRtaV9yZWdp c3RlcigpOwo+ICsJbXNtX2RwX3JlZ2lzdGVyKCk7Cj4gIAlhZHJlbm9fcmVnaXN0ZXIoKTsKPiAg CXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1zbV9wbGF0Zm9ybV9kcml2ZXIpOwo+ ICB9Cj4gQEAgLTEzNzUsNiArMTM3Niw3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBtc21fZHJtX3Vu cmVnaXN0ZXIodm9pZCkKPiAgewo+ICAJREJHKCJmaW5pIik7Cj4gIAlwbGF0Zm9ybV9kcml2ZXJf dW5yZWdpc3RlcigmbXNtX3BsYXRmb3JtX2RyaXZlcik7Cj4gKwltc21fZHBfdW5yZWdpc3Rlcigp Owo+ICAJbXNtX2hkbWlfdW5yZWdpc3RlcigpOwo+ICAJYWRyZW5vX3VucmVnaXN0ZXIoKTsKPiAg CW1zbV9lZHBfdW5yZWdpc3RlcigpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4gaW5kZXggOWQxMWYz Mi4uZmIxZTZmNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4gQEAgLTE3Niw2ICsxNzYsNyBA QCBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlIHsKPiAgCS8qIERTSSBpcyBzaGFyZWQgYnkgbWRwNCBh bmQgbWRwNSAqLwo+ICAJc3RydWN0IG1zbV9kc2kgKmRzaVsyXTsKPiAgCj4gKwlzdHJ1Y3QgbXNt X2RwICpkcDsKCkNhbiB5b3UgcGxlYXNlIGFkZCBhbiBleHRyYSBsaW5lIGhlcmU/Cgo+ICAJLyog d2hlbiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgJ21zbV9ncHUnIHRoZXNlIG5lZWQgdG8gYmUgYW4g YXJyYXk6ICovCj4gIAlzdHJ1Y3QgbXNtX2dwdSAqZ3B1Owo+ICAJc3RydWN0IG1zbV9maWxlX3By aXZhdGUgKmxhc3RjdHg7Cj4gQEAgLTM2NCw2ICszNjUsMjcgQEAgc3RhdGljIGlubGluZSBpbnQg bXNtX2RzaV9tb2Rlc2V0X2luaXQoc3RydWN0IG1zbV9kc2kgKm1zbV9kc2ksCj4gIH0KPiAgI2Vu ZGlmCj4gIAo+ICsjaWZkZWYgQ09ORklHX0RSTV9NU01fRFAKPiAraW50IF9faW5pdCBtc21fZHBf cmVnaXN0ZXIodm9pZCk7Cj4gK3ZvaWQgX19leGl0IG1zbV9kcF91bnJlZ2lzdGVyKHZvaWQpOwo+ ICtpbnQgbXNtX2RwX21vZGVzZXRfaW5pdChzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5LCBzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCQkgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsK PiArI2Vsc2UKPiArc3RhdGljIGlubGluZSBpbnQgX19pbml0IG1zbV9kcF9yZWdpc3Rlcih2b2lk KQo+ICt7Cj4gKwlyZXR1cm4gLUVJTlZBTDsKPiArfQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgX19l eGl0IG1zbV9kcF91bnJlZ2lzdGVyKHZvaWQpCj4gK3sKPiArfQo+ICtzdGF0aWMgaW5saW5lIGlu dCBtc21fZHBfbW9kZXNldF9pbml0KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXksCj4gKwkJCQkg ICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCj4gK3sKPiArCXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gKyNlbmRpZgo+ ICsKPiAgdm9pZCBfX2luaXQgbXNtX21kcF9yZWdpc3Rlcih2b2lkKTsKPiAgdm9pZCBfX2V4aXQg bXNtX21kcF91bnJlZ2lzdGVyKHZvaWQpOwo+ICB2b2lkIF9faW5pdCBtc21fZHB1X3JlZ2lzdGVy KHZvaWQpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfaGVscGVyLmggYi9pbmNs dWRlL2RybS9kcm1fZHBfaGVscGVyLmgKPiBpbmRleCAyYTM4NDNmLi5iMDgxNmY1IDEwMDY0NAo+ IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2Ry bV9kcF9oZWxwZXIuaAoKU3BsaXQgdGhlc2UgY2hhbmdlcyBvdXQgaW50byBhIHNlcGFyYXRlIHBh dGNoLCBwbGVhc2UKCj4gQEAgLTU1MSw2ICs1NTEsOCBAQAo+ICAjIGRlZmluZSBEUF9URVNUX0xJ TktfRURJRF9SRUFECQkgICAgKDEgPDwgMikKPiAgIyBkZWZpbmUgRFBfVEVTVF9MSU5LX1BIWV9U RVNUX1BBVFRFUk4JICAgICgxIDw8IDMpIC8qIERQQ0QgPj0gMS4xICovCj4gICMgZGVmaW5lIERQ X1RFU1RfTElOS19GQVVYX1BBVFRFUk4JICAgICgxIDw8IDQpIC8qIERQQ0QgPj0gMS4yICovCj4g KyMgZGVmaW5lIERQX1RFU1RfTElOS19BVURJT19QQVRURVJOICAgICAoMSA8PCA1KQo+ICsjIGRl ZmluZSBEUF9URVNUX0xJTktfQVVESU9fRElTQUJMRURfVklERU8gKDEgPDwgNikKCkFkZCBEUENE IHZlcnNpb24gaW4gY29tbWVudHMgZm9yIHRoZXNlIGxpa2UgYWJvdmUuCgo+ICAKPiAgI2RlZmlu ZSBEUF9URVNUX0xJTktfUkFURQkJICAgIDB4MjE5Cj4gICMgZGVmaW5lIERQX0xJTktfUkFURV8x NjIJCSAgICAoMHg2KQo+IEBAIC02MzksNiArNjQxLDEzIEBACj4gICNkZWZpbmUJRFBfVEVTVF84 MEJJVF9DVVNUT01fUEFUVEVSTl83MV82NCAgMHgyNTgKPiAgI2RlZmluZQlEUF9URVNUXzgwQklU X0NVU1RPTV9QQVRURVJOXzc5XzcyICAweDI1OQo+ICAKPiArI2RlZmluZSBEUF9URVNUX1BIWV9Q QVRURVJOX05PTkUJCQkweDAKPiArI2RlZmluZSBEUF9URVNUX1BIWV9QQVRURVJOX0QxMF8yX05P X1NDUkFNQkxJTkcJMHgxCj4gKyNkZWZpbmUgRFBfVEVTVF9QSFlfUEFUVEVSTl9TWU1CT0xfRVJS X01FQVNVUkVNRU5UX0NOVCAweDIKPiArI2RlZmluZSBEUF9URVNUX1BIWV9QQVRURVJOX1BSQlM3 CQkJMHgzCj4gKyNkZWZpbmUgRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VTVE9NX1BBVFRF Uk4JMHg0Cj4gKyNkZWZpbmUgRFBfVEVTVF9QSFlfUEFUVEVSTl9IQlIyX0NUU19FWUVfUEFUVEVS TgkweDUKClRoZXNlIGFyZSBhbHJlYWR5IGluIGRybV9kcF9oZWxwZXIgdW5kZXIgRFBfTElOS19R VUFMX1BBVFRFUk5fKgoKPiArCj4gICNkZWZpbmUgRFBfVEVTVF9SRVNQT05TRQkJICAgIDB4MjYw Cj4gICMgZGVmaW5lIERQX1RFU1RfQUNLCQkJICAgICgxIDw8IDApCj4gICMgZGVmaW5lIERQX1RF U1RfTkFLCQkJICAgICgxIDw8IDEpCj4gQEAgLTY0OCw2ICs2NTcsMTYgQEAKPiAgCj4gICNkZWZp bmUgRFBfVEVTVF9TSU5LCQkJICAgIDB4MjcwCj4gICMgZGVmaW5lIERQX1RFU1RfU0lOS19TVEFS VAkJICAgICgxIDw8IDApCj4gKyNkZWZpbmUgRFBfVEVTVF9BVURJT19NT0RFCQkgICAgMHgyNzEK PiArI2RlZmluZSBEUF9URVNUX0FVRElPX1BBVFRFUk5fVFlQRQkgICAgMHgyNzIKPiArI2RlZmlu ZSBEUF9URVNUX0FVRElPX1BFUklPRF9DSDEJICAgIDB4MjczCj4gKyNkZWZpbmUgRFBfVEVTVF9B VURJT19QRVJJT0RfQ0gyCSAgICAweDI3NAo+ICsjZGVmaW5lIERQX1RFU1RfQVVESU9fUEVSSU9E X0NIMwkgICAgMHgyNzUKPiArI2RlZmluZSBEUF9URVNUX0FVRElPX1BFUklPRF9DSDQJICAgIDB4 Mjc2Cj4gKyNkZWZpbmUgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g1CSAgICAweDI3Nwo+ICsjZGVm aW5lIERQX1RFU1RfQVVESU9fUEVSSU9EX0NINgkgICAgMHgyNzgKPiArI2RlZmluZSBEUF9URVNU X0FVRElPX1BFUklPRF9DSDcJICAgIDB4Mjc5Cj4gKyNkZWZpbmUgRFBfVEVTVF9BVURJT19QRVJJ T0RfQ0g4CSAgICAweDI3QQo+ICAKPiAgI2RlZmluZSBEUF9GRUNfU1RBVFVTCQkJICAgIDB4Mjgw ICAgIC8qIDEuNCAqLwo+ICAjIGRlZmluZSBEUF9GRUNfREVDT0RFX0VOX0RFVEVDVEVECSAgICAo MSA8PCAwKQo+IC0tIAo+IFRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBh IG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCj4gYSBMaW51eCBGb3VuZGF0aW9uIENv bGxhYm9yYXRpdmUgUHJvamVjdAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gRnJlZWRyZW5vIG1haWxpbmcgbGlzdAo+IEZyZWVkcmVub0BsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ZyZWVkcmVubwoKLS0gClNlYW4gUGF1bCwgU29mdHdhcmUgRW5naW5lZXIsIEdv b2dsZSAvIENocm9taXVtIE9TCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Zy ZWVkcmVubwo=