From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Liu, Wenjing" Subject: RE: [PATCH 10/20] drm/amd/display: Add HDCP module Date: Thu, 5 Sep 2019 21:46:03 +0000 Message-ID: References: <20190829162253.10195-1-Bhawanpreet.Lakha@amd.com> <20190829162253.10195-11-Bhawanpreet.Lakha@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190829162253.10195-11-Bhawanpreet.Lakha-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Lakha, Bhawanpreet" UmV2aWV3ZWQgYnkgV2VuamluZy4KClBsZWFzZSByZW1vdmUgYmVsb3cgZnVuY3Rpb24gZGVjbGFy YXRpb25zIGFzIHRoZXkgYXJlIG5vdCBkZWZpbmVkIGluIHlvdXIgY2hhbmdlLgoKKy8qIHRlbXBv cmFyeSAtIGNyZWF0ZSBnbG9iYWwgcHNwIGhkY3Agc2VydmljZSBwZXIgYWRhcHRlciBvbiBkbSBp bml0ICovCitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9jcmVhdGVfcHNwX3NlcnZpY2Uo CisJCXZvaWQgKnBzcF9mdW5jcywgdm9pZCAqcHNwX2hhbmRsZSk7CisKKy8qIHRlbXBvcmFyeSAt IGRlc3Ryb3kgZ2xvYmFsIHBzcCBoZGNwIHNlcnZpY2UgcGVyIGFkYXB0ZXIgb24gZG0gZGVzdHJv eSAqLworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfZGVzdHJveV9wc3Bfc2VydmljZSgK KwkJdm9pZCAqcHNwX2Z1bmNzLCB2b2lkICpwc3BfaGFuZGxlKTsKKwoKCi0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tCkZyb206IEJoYXdhbnByZWV0IExha2hhIDxCaGF3YW5wcmVldC5MYWtoYUBh bWQuY29tPiAKU2VudDogVGh1cnNkYXksIEF1Z3VzdCAyOSwgMjAxOSAxMjoyMyBQTQpUbzogYW1k LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKQ2M6IExha2hhLCBCaGF3YW5wcmVldCA8Qmhhd2Fu cHJlZXQuTGFraGFAYW1kLmNvbT47IExpdSwgV2VuamluZyA8V2VuamluZy5MaXVAYW1kLmNvbT4K U3ViamVjdDogW1BBVENIIDEwLzIwXSBkcm0vYW1kL2Rpc3BsYXk6IEFkZCBIRENQIG1vZHVsZQoK VGhpcyBtb2R1bGUgbWFuYWdlcyBIRENQIGZvciBhbWRncHUgZHJpdmVyLiBUaGUgbW9kdWxlIGJl aGF2ZXMgYXMgYQpzdGF0ZSBtYWNoaW5lIHdoaWNoIGhhbmRsZXMgdGhlIGRpZmZlcmVudCBhdXRo ZW50aWNhdGlvbiBzdGF0ZXMgb2YgSERDUAoKVGhlIG1vZHVsZSBpcyBkaXZpZGVkIGludG8gMyBt YWpvciBjb21wb25lbnRzCistLS0tLS0tLSsKfCBIZGNwLmMgfAorLS0tLS0tLS0rCk1hbmFnZXMg dGhlIHN0YXRlIG1hY2hpbmUsIHNlbmRzIHRoZSBldmVudHMgdG8gYmUgZXhlY3V0ZWQgYW5kIGNv bW11bmljYXRlcwp3aXRoIHRoZSBkbQoKKy0tLS0tLS0tLS0tKwp8RXhlY3V0aW9uLmN8CistLS0t LS0tLS0tLSsKVGhpcyBleGVjdXRlcyBldmVudHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUu IEFsc28gZ2VuZXJhdGVzCmV4ZWN1dGlvbiByZXN1bHRzIGFzIHRyYW5zaXRpb24gaW5wdXRzCgor LS0tLS0tLS0tLS0tKwp8VHJhbnNpdGlvbi5jfAorLS0tLS0tLS0tLS0tKwpEZWNpZGVzIHRoZSBu ZXh0IHN0YXRlIGJhc2VkIG9uIHRoZSBpbnB1dCBhbmQgbWFrZXMgcmVxdWVzdHMgdG8KaGRjcC5j IHRvIGhhbmRsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0t LSsKICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tPiB8IEV4ZWN1dGlvbi5jIHwgLS0tLS0t CiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0tLS0tLS0rICAgICAgIHwK ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVgor LS0tLSsgICAgICAgICAgICAgICstLS0tLS0tLSsgICAgICAgICAgICAgICAgICstLS0tLS0tLS0t LS0tLSsKfCBETSB8ICAgIC0tLS0tPiAgICB8IEhkY3AuYyB8ICA8LS0tLS0tLS0tLS0tICB8IFRy YW5zaXRpb24uYyB8CistLS0tKyAgICA8LS0tLS0gICAgKy0tLS0tLS0tKyAgICAgICAgICAgICAg ICAgKy0tLS0tLS0tLS0tLS0tKwoKU2lnbmVkLW9mZi1ieTogQmhhd2FucHJlZXQgTGFraGEgPEJo YXdhbnByZWV0Lkxha2hhQGFtZC5jb20+ClNpZ25lZC1vZmYtYnk6IFdlbmppbmcgTGl1IDxXZW5q aW5nLkxpdUBhbWQuY29tPgpTaWduZWQtb2ZmLWJ5OiBCaGF3YW5wcmVldCBMYWtoYSA8Qmhhd2Fu cHJlZXQuTGFraGFAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvTWFr ZWZpbGUgICAgICAgICAgfCAgIDcgKwogZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL01h a2VmaWxlICAgICAgIHwgICA0ICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9oZGNw L01ha2VmaWxlICB8ICAyOCArCiAuLi4vZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9oZGNwL2hkY3Bf bXNnLmMgICAgfCAzMjQgKysrKysrKysrKysKIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2luY2x1 ZGUvaGRjcF90eXBlcy5oICB8ICA5NiArKysrCiAuLi4vZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1 bGVzL2hkY3AvTWFrZWZpbGUgfCAgMzIgKysKIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVs ZXMvaGRjcC9oZGNwLmMgICB8IDQyNiArKysrKysrKysrKysrKwogLi4uL2dwdS9kcm0vYW1kL2Rp c3BsYXkvbW9kdWxlcy9oZGNwL2hkY3AuaCAgIHwgNDQyICsrKysrKysrKysrKysrKwogLi4uL2Rp c3BsYXkvbW9kdWxlcy9oZGNwL2hkY3AxX2V4ZWN1dGlvbi5jICAgIHwgNTMxICsrKysrKysrKysr KysrKysrKwogLi4uL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3AxX3RyYW5zaXRpb24uYyAgIHwg MzA3ICsrKysrKysrKysKIC4uLi9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3BfZGRj LmMgICB8IDMwNSArKysrKysrKysrCiAuLi4vZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaGRjcC9o ZGNwX2xvZy5jICAgfCAxNjMgKysrKysrCiAuLi4vZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaGRj cC9oZGNwX2xvZy5oICAgfCAxMzkgKysrKysKIC4uLi9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9p bmMvbW9kX2hkY3AuaCAgICB8IDI5NyArKysrKysrKysrCiAxNCBmaWxlcyBjaGFuZ2VkLCAzMTAx IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvZGMvaGRjcC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9hbWQvZGlzcGxheS9kYy9oZGNwL2hkY3BfbXNnLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvaW5jbHVkZS9oZGNwX3R5cGVzLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL01ha2VmaWxl CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMv aGRjcC9oZGNwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvbW9kdWxlcy9oZGNwL2hkY3AuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcDFfZXhlY3V0aW9uLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3AxX3Ry YW5zaXRpb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9tb2R1bGVzL2hkY3AvaGRjcF9kZGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcF9sb2cuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcF9sb2cuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2lu Yy9tb2RfaGRjcC5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L01ha2VmaWxlCmluZGV4IDQ5NmNl ZTAwMGYxMC4uMzZiM2Q2YTVkMDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L01ha2VmaWxl CkBAIC0zNCwxMiArMzQsMTkgQEAgc3ViZGlyLWNjZmxhZ3MteSArPSAtSSQoRlVMTF9BTURfRElT UExBWV9QQVRIKS9tb2R1bGVzL2ZyZWVzeW5jCiBzdWJkaXItY2NmbGFncy15ICs9IC1JJChGVUxM X0FNRF9ESVNQTEFZX1BBVEgpL21vZHVsZXMvY29sb3IKIHN1YmRpci1jY2ZsYWdzLXkgKz0gLUkk KEZVTExfQU1EX0RJU1BMQVlfUEFUSCkvbW9kdWxlcy9pbmZvX3BhY2tldAogc3ViZGlyLWNjZmxh Z3MteSArPSAtSSQoRlVMTF9BTURfRElTUExBWV9QQVRIKS9tb2R1bGVzL3Bvd2VyCitpZmRlZiBD T05GSUdfRFJNX0FNRF9EQ19IRENQCitzdWJkaXItY2NmbGFncy15ICs9IC1JJChGVUxMX0FNRF9E SVNQTEFZX1BBVEgpL21vZHVsZXMvaGRjcAorZW5kaWYKIAogI1RPRE86IHJlbW92ZSB3aGVuIFRp bWluZyBTeW5jIGZlYXR1cmUgaXMgY29tcGxldGUKIHN1YmRpci1jY2ZsYWdzLXkgKz0gLURCVUlM RF9GRUFUVVJFX1RJTUlOR19TWU5DPTAKIAogREFMX0xJQlMgPSBhbWRncHVfZG0gZGMJbW9kdWxl cy9mcmVlc3luYyBtb2R1bGVzL2NvbG9yIG1vZHVsZXMvaW5mb19wYWNrZXQgbW9kdWxlcy9wb3dl cgogCitpZmRlZiBDT05GSUdfRFJNX0FNRF9EQ19IRENQCitEQUxfTElCUyArPSBtb2R1bGVzL2hk Y3AKK2VuZGlmCisKIEFNRF9EQUwgPSAkKGFkZHN1ZmZpeCAvTWFrZWZpbGUsICQoYWRkcHJlZml4 ICQoRlVMTF9BTURfRElTUExBWV9QQVRIKS8sJChEQUxfTElCUykpKQogCiBpbmNsdWRlICQoQU1E X0RBTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9NYWtlZmlsZQppbmRleCA1NWNlNWI2 NTczOTAuLmNlYWRmZTIxYWQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNw bGF5L2RjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9NYWtl ZmlsZQpAQCAtNDUsNiArNDUsMTAgQEAgRENfTElCUyArPSBkY2UxMTAKIERDX0xJQlMgKz0gZGNl MTAwCiBEQ19MSUJTICs9IGRjZTgwCiAKK2lmZGVmIENPTkZJR19EUk1fQU1EX0RDX0hEQ1AKK0RD X0xJQlMgKz0gaGRjcAorZW5kaWYKKwogQU1EX0RDID0gJChhZGRzdWZmaXggL01ha2VmaWxlLCAk KGFkZHByZWZpeCAkKEZVTExfQU1EX0RJU1BMQVlfUEFUSCkvZGMvLCQoRENfTElCUykpKQogCiBp bmNsdWRlICQoQU1EX0RDKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5 L2RjL2hkY3AvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaGRjcC9N YWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQxNzBiNmVi OWVjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9o ZGNwL01ha2VmaWxlCkBAIC0wLDAgKzEsMjggQEAKKyMgQ29weXJpZ2h0IDIwMTkgQWR2YW5jZWQg TWljcm8gRGV2aWNlcywgSW5jLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorIyBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAorIyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorIyBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKKyMgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyMgVEhFIENPUFlS SUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SCisjIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorIyBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyMgT1RIRVIgREVBTElOR1Mg SU4gVEhFIFNPRlRXQVJFLgorIworIyBNYWtlZmlsZSBmb3IgdGhlICdoZGNwJyBzdWItY29tcG9u ZW50IG9mIERBTC4KKyMKKworSERDUF9NU0cgPSBoZGNwX21zZy5vCisKK0FNRF9EQUxfSERDUF9N U0cgPSAkKGFkZHByZWZpeCAkKEFNRERBTFBBVEgpL2RjL2hkY3AvLCQoSERDUF9NU0cpKQorCitB TURfRElTUExBWV9GSUxFUyArPSAkKEFNRF9EQUxfSERDUF9NU0cpCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaGRjcC9oZGNwX21zZy5jIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2hkY3AvaGRjcF9tc2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjA5M2IyZmI2ZmY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9oZGNwL2hkY3BfbXNnLmMKQEAgLTAsMCArMSwzMjQg QEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisg KgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhP TERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IK KyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBU SEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQU1ECisgKgorICovCisKKyNpbmNsdWRlICJk bV9zZXJ2aWNlcy5oIgorI2luY2x1ZGUgImRtX2hlbHBlcnMuaCIKKyNpbmNsdWRlICJpbmNsdWRl L2hkY3BfdHlwZXMuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2kyY2F1eF9pbnRlcmZhY2UuaCIKKyNp bmNsdWRlICJpbmNsdWRlL3NpZ25hbF90eXBlcy5oIgorI2luY2x1ZGUgImNvcmVfdHlwZXMuaCIK KyNpbmNsdWRlICJkY19saW5rX2RkYy5oIgorI2luY2x1ZGUgImxpbmtfaHdzcy5oIgorCisjZGVm aW5lIERDX0xPR0dFUiBcCisJbGluay0+Y3R4LT5sb2dnZXIKKyNkZWZpbmUgSERDUDE0X0tTVl9T SVpFIDUKKyNkZWZpbmUgSERDUDE0X01BWF9LU1ZfRklGT19TSVpFIDEyNypIRENQMTRfS1NWX1NJ WkUKKworc3RhdGljIGNvbnN0IGJvb2wgaGRjcF9jbWRfaXNfcmVhZFtdID0geworCVtIRENQX01F U1NBR0VfSURfUkVBRF9CS1NWXSA9IHRydWUsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1JJX1Iw XSA9IHRydWUsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1BKXSA9IHRydWUsCisJW0hEQ1BfTUVT U0FHRV9JRF9XUklURV9BS1NWXSA9IGZhbHNlLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUlO Rk9dID0gZmFsc2UsCisJW0hEQ1BfTUVTU0FHRV9JRF9XUklURV9BTl0gPSBmYWxzZSwKKwlbSERD UF9NRVNTQUdFX0lEX1JFQURfVkhfWF0gPSB0cnVlLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9W SF8wXSA9IHRydWUsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzFdID0gdHJ1ZSwKKwlbSERD UF9NRVNTQUdFX0lEX1JFQURfVkhfMl0gPSB0cnVlLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9W SF8zXSA9IHRydWUsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzRdID0gdHJ1ZSwKKwlbSERD UF9NRVNTQUdFX0lEX1JFQURfQkNBUFNdID0gdHJ1ZSwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURf QlNUQVRVU10gPSB0cnVlLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9LU1ZfRklGT10gPSB0cnVl LAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9CSU5GT10gPSB0cnVlLAorCVtIRENQX01FU1NBR0Vf SURfSERDUDJWRVJTSU9OXSA9IHRydWUsCisJW0hEQ1BfTUVTU0FHRV9JRF9SWF9DQVBTXSA9IHRy dWUsCisJW0hEQ1BfTUVTU0FHRV9JRF9XUklURV9BS0VfSU5JVF0gPSBmYWxzZSwKKwlbSERDUF9N RVNTQUdFX0lEX1JFQURfQUtFX1NFTkRfQ0VSVF0gPSB0cnVlLAorCVtIRENQX01FU1NBR0VfSURf V1JJVEVfQUtFX05PX1NUT1JFRF9LTV0gPSBmYWxzZSwKKwlbSERDUF9NRVNTQUdFX0lEX1dSSVRF X0FLRV9TVE9SRURfS01dID0gZmFsc2UsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0FLRV9TRU5E X0hfUFJJTUVdID0gdHJ1ZSwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfQUtFX1NFTkRfUEFJUklO R19JTkZPXSA9IHRydWUsCisJW0hEQ1BfTUVTU0FHRV9JRF9XUklURV9MQ19JTklUXSA9IGZhbHNl LAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9MQ19TRU5EX0xfUFJJTUVdID0gdHJ1ZSwKKwlbSERD UF9NRVNTQUdFX0lEX1dSSVRFX1NLRV9TRU5EX0VLU10gPSBmYWxzZSwKKwlbSERDUF9NRVNTQUdF X0lEX1JFQURfUkVQRUFURVJfQVVUSF9TRU5EX1JFQ0VJVkVSSURfTElTVF0gPSB0cnVlLAorCVtI RENQX01FU1NBR0VfSURfV1JJVEVfUkVQRUFURVJfQVVUSF9TRU5EX0FDS10gPSBmYWxzZSwKKwlb SERDUF9NRVNTQUdFX0lEX1dSSVRFX1JFUEVBVEVSX0FVVEhfU1RSRUFNX01BTkFHRV0gPSBmYWxz ZSwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfUkVQRUFURVJfQVVUSF9TVFJFQU1fUkVBRFldID0g dHJ1ZSwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfUlhTVEFUVVNdID0gdHJ1ZSwKKwlbSERDUF9N RVNTQUdFX0lEX1dSSVRFX0NPTlRFTlRfU1RSRUFNX1RZUEVdID0gZmFsc2UKK307CisKK3N0YXRp YyBjb25zdCB1aW50OF90IGhkY3BfaTJjX29mZnNldHNbXSA9IHsKKwlbSERDUF9NRVNTQUdFX0lE X1JFQURfQktTVl0gPSAweDAsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1JJX1IwXSA9IDB4OCwK KwlbSERDUF9NRVNTQUdFX0lEX1JFQURfUEpdID0gMHhBLAorCVtIRENQX01FU1NBR0VfSURfV1JJ VEVfQUtTVl0gPSAweDEwLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUlORk9dID0gMHgxNSwK KwlbSERDUF9NRVNTQUdFX0lEX1dSSVRFX0FOXSA9IDB4MTgsCisJW0hEQ1BfTUVTU0FHRV9JRF9S RUFEX1ZIX1hdID0gMHgyMCwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfVkhfMF0gPSAweDIwLAor CVtIRENQX01FU1NBR0VfSURfUkVBRF9WSF8xXSA9IDB4MjQsCisJW0hEQ1BfTUVTU0FHRV9JRF9S RUFEX1ZIXzJdID0gMHgyOCwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfVkhfM10gPSAweDJDLAor CVtIRENQX01FU1NBR0VfSURfUkVBRF9WSF80XSA9IDB4MzAsCisJW0hEQ1BfTUVTU0FHRV9JRF9S RUFEX0JDQVBTXSA9IDB4NDAsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0JTVEFUVVNdID0gMHg0 MSwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfS1NWX0ZJRk9dID0gMHg0MywKKwlbSERDUF9NRVNT QUdFX0lEX1JFQURfQklORk9dID0gMHhGRiwKKwlbSERDUF9NRVNTQUdFX0lEX0hEQ1AyVkVSU0lP Tl0gPSAweDUwLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX0lOSVRdID0gMHg2MCwKKwlb SERDUF9NRVNTQUdFX0lEX1JFQURfQUtFX1NFTkRfQ0VSVF0gPSAweDgwLAorCVtIRENQX01FU1NB R0VfSURfV1JJVEVfQUtFX05PX1NUT1JFRF9LTV0gPSAweDYwLAorCVtIRENQX01FU1NBR0VfSURf V1JJVEVfQUtFX1NUT1JFRF9LTV0gPSAweDYwLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9BS0Vf U0VORF9IX1BSSU1FXSA9IDB4ODAsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0FLRV9TRU5EX1BB SVJJTkdfSU5GT10gPSAweDgwLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfTENfSU5JVF0gPSAw eDYwLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9MQ19TRU5EX0xfUFJJTUVdID0gMHg4MCwKKwlb SERDUF9NRVNTQUdFX0lEX1dSSVRFX1NLRV9TRU5EX0VLU10gPSAweDYwLAorCVtIRENQX01FU1NB R0VfSURfUkVBRF9SRVBFQVRFUl9BVVRIX1NFTkRfUkVDRUlWRVJJRF9MSVNUXSA9IDB4ODAsCisJ W0hEQ1BfTUVTU0FHRV9JRF9XUklURV9SRVBFQVRFUl9BVVRIX1NFTkRfQUNLXSA9IDB4NjAsCisJ W0hEQ1BfTUVTU0FHRV9JRF9XUklURV9SRVBFQVRFUl9BVVRIX1NUUkVBTV9NQU5BR0VdID0gMHg2 MCwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfUkVQRUFURVJfQVVUSF9TVFJFQU1fUkVBRFldID0g MHg4MCwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfUlhTVEFUVVNdID0gMHg3MAorfTsKKworc3Ry dWN0IHByb3RlY3Rpb25fcHJvcGVydGllcyB7CisJYm9vbCBzdXBwb3J0ZWQ7CisJYm9vbCAoKnBy b2Nlc3NfdHJhbnNhY3Rpb24pKAorCQlzdHJ1Y3QgZGNfbGluayAqbGluaywKKwkJc3RydWN0IGhk Y3BfcHJvdGVjdGlvbl9tZXNzYWdlICptZXNzYWdlX2luZm8pOworfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBwcm90ZWN0aW9uX3Byb3BlcnRpZXMgbm9uX3N1cHBvcnRlZF9wcm90ZWN0aW9uID0g eworCS5zdXBwb3J0ZWQgPSBmYWxzZQorfTsKKworc3RhdGljIGJvb2wgaGRtaV8xNF9wcm9jZXNz X3RyYW5zYWN0aW9uKAorCXN0cnVjdCBkY19saW5rICpsaW5rLAorCXN0cnVjdCBoZGNwX3Byb3Rl Y3Rpb25fbWVzc2FnZSAqbWVzc2FnZV9pbmZvKQoreworCXVpbnQ4X3QgKmJ1ZmYgPSBOVUxMOwor CWJvb2wgcmVzdWx0OworCWNvbnN0IHVpbnQ4X3QgaGRjcF9pMmNfYWRkcl9saW5rX3ByaW1hcnkg PSAweDNhOyAvKiAweDc0ID4+IDEqLworCWNvbnN0IHVpbnQ4X3QgaGRjcF9pMmNfYWRkcl9saW5r X3NlY29uZGFyeSA9IDB4M2I7IC8qIDB4NzYgPj4gMSovCisJc3RydWN0IGkyY19jb21tYW5kIGky Y19jb21tYW5kOworCXVpbnQ4X3Qgb2Zmc2V0ID0gaGRjcF9pMmNfb2Zmc2V0c1ttZXNzYWdlX2lu Zm8tPm1zZ19pZF07CisJc3RydWN0IGkyY19wYXlsb2FkIGkyY19wYXlsb2Fkc1tdID0geworCQl7 IHRydWUsIDAsIDEsICZvZmZzZXQgfSwKKwkJLyogYWN0dWFsIGhkY3AgcGF5bG9hZCwgd2lsbCBi ZSBmaWxsZWQgbGF0ZXIsIHplcm9lZCBmb3Igbm93Ki8KKwkJeyAwIH0KKwl9OworCisJc3dpdGNo IChtZXNzYWdlX2luZm8tPmxpbmspIHsKKwljYXNlIEhEQ1BfTElOS19TRUNPTkRBUlk6CisJCWky Y19wYXlsb2Fkc1swXS5hZGRyZXNzID0gaGRjcF9pMmNfYWRkcl9saW5rX3NlY29uZGFyeTsKKwkJ aTJjX3BheWxvYWRzWzFdLmFkZHJlc3MgPSBoZGNwX2kyY19hZGRyX2xpbmtfc2Vjb25kYXJ5Owor CQlicmVhazsKKwljYXNlIEhEQ1BfTElOS19QUklNQVJZOgorCWRlZmF1bHQ6CisJCWkyY19wYXls b2Fkc1swXS5hZGRyZXNzID0gaGRjcF9pMmNfYWRkcl9saW5rX3ByaW1hcnk7CisJCWkyY19wYXls b2Fkc1sxXS5hZGRyZXNzID0gaGRjcF9pMmNfYWRkcl9saW5rX3ByaW1hcnk7CisJCWJyZWFrOwor CX0KKworCWlmIChoZGNwX2NtZF9pc19yZWFkW21lc3NhZ2VfaW5mby0+bXNnX2lkXSkgeworCQlp MmNfcGF5bG9hZHNbMV0ud3JpdGUgPSBmYWxzZTsKKwkJaTJjX2NvbW1hbmQubnVtYmVyX29mX3Bh eWxvYWRzID0gQVJSQVlfU0laRShpMmNfcGF5bG9hZHMpOworCQlpMmNfcGF5bG9hZHNbMV0ubGVu Z3RoID0gbWVzc2FnZV9pbmZvLT5sZW5ndGg7CisJCWkyY19wYXlsb2Fkc1sxXS5kYXRhID0gbWVz c2FnZV9pbmZvLT5kYXRhOworCX0gZWxzZSB7CisJCWkyY19jb21tYW5kLm51bWJlcl9vZl9wYXls b2FkcyA9IDE7CisJCWJ1ZmYgPSBremFsbG9jKG1lc3NhZ2VfaW5mby0+bGVuZ3RoICsgMSwgR0ZQ X0tFUk5FTCk7CisKKwkJaWYgKCFidWZmKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWJ1ZmZbMF0g PSBvZmZzZXQ7CisJCW1lbW1vdmUoJmJ1ZmZbMV0sIG1lc3NhZ2VfaW5mby0+ZGF0YSwgbWVzc2Fn ZV9pbmZvLT5sZW5ndGgpOworCQlpMmNfcGF5bG9hZHNbMF0ubGVuZ3RoID0gbWVzc2FnZV9pbmZv LT5sZW5ndGggKyAxOworCQlpMmNfcGF5bG9hZHNbMF0uZGF0YSA9IGJ1ZmY7CisJfQorCisJaTJj X2NvbW1hbmQucGF5bG9hZHMgPSBpMmNfcGF5bG9hZHM7CisJaTJjX2NvbW1hbmQuZW5naW5lID0g STJDX0NPTU1BTkRfRU5HSU5FX0hXOy8vb25seSBIVworCWkyY19jb21tYW5kLnNwZWVkID0gbGlu ay0+ZGRjLT5jdHgtPmRjLT5jYXBzLmkyY19zcGVlZF9pbl9raHo7CisKKwlyZXN1bHQgPSBkbV9o ZWxwZXJzX3N1Ym1pdF9pMmMoCisJCQlsaW5rLT5jdHgsCisJCQlsaW5rLAorCQkJJmkyY19jb21t YW5kKTsKKworCWlmIChidWZmKQorCQlrZnJlZShidWZmKTsKKworCXJldHVybiByZXN1bHQ7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdGVjdGlvbl9wcm9wZXJ0aWVzIGhkbWlfMTRfcHJv dGVjdGlvbiA9IHsKKwkuc3VwcG9ydGVkID0gdHJ1ZSwKKwkucHJvY2Vzc190cmFuc2FjdGlvbiA9 IGhkbWlfMTRfcHJvY2Vzc190cmFuc2FjdGlvbgorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90 IGhkY3BfZHBjZF9hZGRyc1tdID0geworCVtIRENQX01FU1NBR0VfSURfUkVBRF9CS1NWXSA9IDB4 NjgwMDAsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1JJX1IwXSA9IDB4NjgwMDUsCisJW0hEQ1Bf TUVTU0FHRV9JRF9SRUFEX1BKXSA9IDB4RkZGRkZGRkYsCisJW0hEQ1BfTUVTU0FHRV9JRF9XUklU RV9BS1NWXSA9IDB4NjgwMDcsCisJW0hEQ1BfTUVTU0FHRV9JRF9XUklURV9BSU5GT10gPSAweDY4 MDNCLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQU5dID0gMHg2ODAwYywKKwlbSERDUF9NRVNT QUdFX0lEX1JFQURfVkhfWF0gPSAweDY4MDE0LAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9WSF8w XSA9IDB4NjgwMTQsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzFdID0gMHg2ODAxOCwKKwlb SERDUF9NRVNTQUdFX0lEX1JFQURfVkhfMl0gPSAweDY4MDFjLAorCVtIRENQX01FU1NBR0VfSURf UkVBRF9WSF8zXSA9IDB4NjgwMjAsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzRdID0gMHg2 ODAyNCwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfQkNBUFNdID0gMHg2ODAyOCwKKwlbSERDUF9N RVNTQUdFX0lEX1JFQURfQlNUQVRVU10gPSAweDY4MDI5LAorCVtIRENQX01FU1NBR0VfSURfUkVB RF9LU1ZfRklGT10gPSAweDY4MDJjLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9CSU5GT10gPSAw eDY4MDJhLAorCVtIRENQX01FU1NBR0VfSURfUlhfQ0FQU10gPSAweDY5MjFkLAorCVtIRENQX01F U1NBR0VfSURfV1JJVEVfQUtFX0lOSVRdID0gMHg2OTAwMCwKKwlbSERDUF9NRVNTQUdFX0lEX1JF QURfQUtFX1NFTkRfQ0VSVF0gPSAweDY5MDBiLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUtF X05PX1NUT1JFRF9LTV0gPSAweDY5MjIwLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX1NU T1JFRF9LTV0gPSAweDY5MmEwLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9BS0VfU0VORF9IX1BS SU1FXSA9IDB4NjkyYzAsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0FLRV9TRU5EX1BBSVJJTkdf SU5GT10gPSAweDY5MmUwLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfTENfSU5JVF0gPSAweDY5 MmYwLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9MQ19TRU5EX0xfUFJJTUVdID0gMHg2OTJmOCwK KwlbSERDUF9NRVNTQUdFX0lEX1dSSVRFX1NLRV9TRU5EX0VLU10gPSAweDY5MzE4LAorCVtIRENQ X01FU1NBR0VfSURfUkVBRF9SRVBFQVRFUl9BVVRIX1NFTkRfUkVDRUlWRVJJRF9MSVNUXSA9IDB4 NjkzMzAsCisJW0hEQ1BfTUVTU0FHRV9JRF9XUklURV9SRVBFQVRFUl9BVVRIX1NFTkRfQUNLXSA9 IDB4NjkzZTAsCisJW0hEQ1BfTUVTU0FHRV9JRF9XUklURV9SRVBFQVRFUl9BVVRIX1NUUkVBTV9N QU5BR0VdID0gMHg2OTNmMCwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfUkVQRUFURVJfQVVUSF9T VFJFQU1fUkVBRFldID0gMHg2OTQ3MywKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfUlhTVEFUVVNd ID0gMHg2OTQ5MywKKwlbSERDUF9NRVNTQUdFX0lEX1dSSVRFX0NPTlRFTlRfU1RSRUFNX1RZUEVd ID0gMHg2OTQ5NAorfTsKKworc3RhdGljIGJvb2wgZHBjZF9hY2Nlc3NfaGVscGVyKAorCXN0cnVj dCBkY19saW5rICpsaW5rLAorCXVpbnQzMl90IGxlbmd0aCwKKwl1aW50OF90ICpkYXRhLAorCXVp bnQzMl90IGRwY2RfYWRkciwKKwlib29sIGlzX3JlYWQpCit7CisJZW51bSBkY19zdGF0dXMgc3Rh dHVzOworCXVpbnQzMl90IGN1cl9sZW5ndGggPSAwOworCXVpbnQzMl90IG9mZnNldCA9IDA7CisJ dWludDMyX3Qga3N2X3JlYWRfc2l6ZSA9IDB4NjgwM2IgLSAweDY4MDJjOworCisJLyogUmVhZCBL U1YsIG5lZWQgcmVwZWF0ZWRseSBoYW5kbGUgKi8KKwlpZiAoZHBjZF9hZGRyID09IDB4NjgwMmMp IHsKKwkJaWYgKGxlbmd0aCAlIEhEQ1AxNF9LU1ZfU0laRSkgeworCQkJRENfTE9HX0VSUk9SKCIl czogS3N2RmlmbyBTaXplKCVkKSBpcyBub3QgYSBtdWx0aXBsZSBvZiBIRENQMTRfS1NWX1NJWkUo JWQpXG4iLAorCQkJCV9fZnVuY19fLAorCQkJCWxlbmd0aCwKKwkJCQlIRENQMTRfS1NWX1NJWkUp OworCQl9CisJCWlmIChsZW5ndGggPiBIRENQMTRfTUFYX0tTVl9GSUZPX1NJWkUpIHsKKwkJCURD X0xPR19FUlJPUigiJXM6IEtzdkZpZm8gU2l6ZSglZCkgaXMgZ3JlYXRlciB0aGFuIEhEQ1AxNF9N QVhfS1NWX0ZJRk9fU0laRSglZClcbiIsCisJCQkJX19mdW5jX18sCisJCQkJbGVuZ3RoLAorCQkJ CUhEQ1AxNF9NQVhfS1NWX0ZJRk9fU0laRSk7CisJCX0KKworCQlEQ19MT0dfRVJST1IoIiVzOiBS ZWFkaW5nICVkIEtzdihzKSBmcm9tIEtzdkZpZm9cbiIsCisJCQlfX2Z1bmNfXywKKwkJCWxlbmd0 aCAvIEhEQ1AxNF9LU1ZfU0laRSk7CisKKwkJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJCWlmIChs ZW5ndGggPiBrc3ZfcmVhZF9zaXplKSB7CisJCQkJc3RhdHVzID0gY29yZV9saW5rX3JlYWRfZHBj ZCgKKwkJCQkJbGluaywKKwkJCQkJZHBjZF9hZGRyICsgb2Zmc2V0LAorCQkJCQlkYXRhICsgb2Zm c2V0LAorCQkJCQlrc3ZfcmVhZF9zaXplKTsKKworCQkJCWRhdGEgKz0ga3N2X3JlYWRfc2l6ZTsK KwkJCQlsZW5ndGggLT0ga3N2X3JlYWRfc2l6ZTsKKwkJCX0gZWxzZSB7CisJCQkJc3RhdHVzID0g Y29yZV9saW5rX3JlYWRfZHBjZCgKKwkJCQkJbGluaywKKwkJCQkJZHBjZF9hZGRyICsgb2Zmc2V0 LAorCQkJCQlkYXRhICsgb2Zmc2V0LAorCQkJCQlsZW5ndGgpOworCisJCQkJZGF0YSArPSBsZW5n dGg7CisJCQkJbGVuZ3RoID0gMDsKKwkJCX0KKworCQkJaWYgKHN0YXR1cyAhPSBEQ19PSykKKwkJ CQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9IGVsc2UgeworCQl3aGlsZSAobGVuZ3RoID4gMCkgewor CQkJaWYgKGxlbmd0aCA+IERFRkFVTFRfQVVYX01BWF9EQVRBX1NJWkUpCisJCQkJY3VyX2xlbmd0 aCA9IERFRkFVTFRfQVVYX01BWF9EQVRBX1NJWkU7CisJCQllbHNlCisJCQkJY3VyX2xlbmd0aCA9 IGxlbmd0aDsKKworCQkJaWYgKGlzX3JlYWQpIHsKKwkJCQlzdGF0dXMgPSBjb3JlX2xpbmtfcmVh ZF9kcGNkKAorCQkJCQlsaW5rLAorCQkJCQlkcGNkX2FkZHIgKyBvZmZzZXQsCisJCQkJCWRhdGEg KyBvZmZzZXQsCisJCQkJCWN1cl9sZW5ndGgpOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSBj b3JlX2xpbmtfd3JpdGVfZHBjZCgKKwkJCQkJbGluaywKKwkJCQkJZHBjZF9hZGRyICsgb2Zmc2V0 LAorCQkJCQlkYXRhICsgb2Zmc2V0LAorCQkJCQljdXJfbGVuZ3RoKTsKKwkJCX0KKworCQkJaWYg KHN0YXR1cyAhPSBEQ19PSykKKwkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCWxlbmd0aCAtPSBjdXJf bGVuZ3RoOworCQkJb2Zmc2V0ICs9IGN1cl9sZW5ndGg7CisJCX0KKwl9CisJcmV0dXJuIHRydWU7 Cit9CisKK3N0YXRpYyBib29sIGRwXzExX3Byb2Nlc3NfdHJhbnNhY3Rpb24oCisJc3RydWN0IGRj X2xpbmsgKmxpbmssCisJc3RydWN0IGhkY3BfcHJvdGVjdGlvbl9tZXNzYWdlICptZXNzYWdlX2lu Zm8pCit7CisJcmV0dXJuIGRwY2RfYWNjZXNzX2hlbHBlcigKKwkJbGluaywKKwkJbWVzc2FnZV9p bmZvLT5sZW5ndGgsCisJCW1lc3NhZ2VfaW5mby0+ZGF0YSwKKwkJaGRjcF9kcGNkX2FkZHJzW21l c3NhZ2VfaW5mby0+bXNnX2lkXSwKKwkJaGRjcF9jbWRfaXNfcmVhZFttZXNzYWdlX2luZm8tPm1z Z19pZF0pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RlY3Rpb25fcHJvcGVydGllcyBk cF8xMV9wcm90ZWN0aW9uID0geworCS5zdXBwb3J0ZWQgPSB0cnVlLAorCS5wcm9jZXNzX3RyYW5z YWN0aW9uID0gZHBfMTFfcHJvY2Vzc190cmFuc2FjdGlvbgorfTsKKwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2luY2x1ZGUvaGRjcF90eXBlcy5oIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9kaXNwbGF5L2luY2x1ZGUvaGRjcF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjMxZTZiZWZjOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2luY2x1ZGUvaGRjcF90eXBlcy5oCkBAIC0wLDAg KzEsOTYgQEAKKy8qCisqIENvcHlyaWdodCAyMDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIElu Yy4KKyoKKyogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisqCisqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKgorKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9S IEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorKiBPVEhFUiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwKKyogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K KyoKKyogQXV0aG9yczogQU1ECisqCisqLworCisjaWZuZGVmIF9fRENfSERDUF9UWVBFU19IX18K KyNkZWZpbmUgX19EQ19IRENQX1RZUEVTX0hfXworCitlbnVtIGhkY3BfbWVzc2FnZV9pZCB7CisJ SERDUF9NRVNTQUdFX0lEX0lOVkFMSUQgPSAtMSwKKworCS8qIEhEQ1AgMS40ICovCisKKwlIRENQ X01FU1NBR0VfSURfUkVBRF9CS1NWID0gMCwKKwkvKiBIRE1JIGlzIGNhbGxlZCBSaScsIERQIGlz IGNhbGxlZCBSMCcgKi8KKwlIRENQX01FU1NBR0VfSURfUkVBRF9SSV9SMCwKKwlIRENQX01FU1NB R0VfSURfUkVBRF9QSiwKKwlIRENQX01FU1NBR0VfSURfV1JJVEVfQUtTViwKKwlIRENQX01FU1NB R0VfSURfV1JJVEVfQUlORk8sCisJSERDUF9NRVNTQUdFX0lEX1dSSVRFX0FOLAorCUhEQ1BfTUVT U0FHRV9JRF9SRUFEX1ZIX1gsCisJSERDUF9NRVNTQUdFX0lEX1JFQURfVkhfMCwKKwlIRENQX01F U1NBR0VfSURfUkVBRF9WSF8xLAorCUhEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzIsCisJSERDUF9N RVNTQUdFX0lEX1JFQURfVkhfMywKKwlIRENQX01FU1NBR0VfSURfUkVBRF9WSF80LAorCUhEQ1Bf TUVTU0FHRV9JRF9SRUFEX0JDQVBTLAorCUhEQ1BfTUVTU0FHRV9JRF9SRUFEX0JTVEFUVVMsCisJ SERDUF9NRVNTQUdFX0lEX1JFQURfS1NWX0ZJRk8sCisJSERDUF9NRVNTQUdFX0lEX1JFQURfQklO Rk8sCisKKwkvKiBIRENQIDIuMiAqLworCisJSERDUF9NRVNTQUdFX0lEX0hEQ1AyVkVSU0lPTiwK KwlIRENQX01FU1NBR0VfSURfUlhfQ0FQUywKKwlIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX0lO SVQsCisJSERDUF9NRVNTQUdFX0lEX1JFQURfQUtFX1NFTkRfQ0VSVCwKKwlIRENQX01FU1NBR0Vf SURfV1JJVEVfQUtFX05PX1NUT1JFRF9LTSwKKwlIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX1NU T1JFRF9LTSwKKwlIRENQX01FU1NBR0VfSURfUkVBRF9BS0VfU0VORF9IX1BSSU1FLAorCUhEQ1Bf TUVTU0FHRV9JRF9SRUFEX0FLRV9TRU5EX1BBSVJJTkdfSU5GTywKKwlIRENQX01FU1NBR0VfSURf V1JJVEVfTENfSU5JVCwKKwlIRENQX01FU1NBR0VfSURfUkVBRF9MQ19TRU5EX0xfUFJJTUUsCisJ SERDUF9NRVNTQUdFX0lEX1dSSVRFX1NLRV9TRU5EX0VLUywKKwlIRENQX01FU1NBR0VfSURfUkVB RF9SRVBFQVRFUl9BVVRIX1NFTkRfUkVDRUlWRVJJRF9MSVNULAorCUhEQ1BfTUVTU0FHRV9JRF9X UklURV9SRVBFQVRFUl9BVVRIX1NFTkRfQUNLLAorCUhEQ1BfTUVTU0FHRV9JRF9XUklURV9SRVBF QVRFUl9BVVRIX1NUUkVBTV9NQU5BR0UsCisJSERDUF9NRVNTQUdFX0lEX1JFQURfUkVQRUFURVJf QVVUSF9TVFJFQU1fUkVBRFksCisJSERDUF9NRVNTQUdFX0lEX1JFQURfUlhTVEFUVVMsCisJSERD UF9NRVNTQUdFX0lEX1dSSVRFX0NPTlRFTlRfU1RSRUFNX1RZUEUsCisKKwlIRENQX01FU1NBR0Vf SURfTUFYCit9OworCitlbnVtIGhkY3BfdmVyc2lvbiB7CisJSERDUF9Vbmtub3duID0gMCwKKwlI RENQX1ZFUlNJT05fMTQsCisJSERDUF9WRVJTSU9OXzIyLAorfTsKKworZW51bSBoZGNwX2xpbmsg eworCUhEQ1BfTElOS19QUklNQVJZLAorCUhEQ1BfTElOS19TRUNPTkRBUlkKK307CisKK3N0cnVj dCBoZGNwX3Byb3RlY3Rpb25fbWVzc2FnZSB7CisJZW51bSBoZGNwX3ZlcnNpb24gdmVyc2lvbjsK KwkvKiByZWxldmFudCBvbmx5IGZvciBEVkkgKi8KKwllbnVtIGhkY3BfbGluayBsaW5rOworCWVu dW0gaGRjcF9tZXNzYWdlX2lkIG1zZ19pZDsKKwl1aW50MzJfdCBsZW5ndGg7CisJdWludDhfdCBt YXhfcmV0cmllczsKKwl1aW50OF90ICpkYXRhOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaGRjcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFjM2M2ZDQ3OTczYQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvTWFrZWZpbGUKQEAg LTAsMCArMSwzMiBAQAorIworIyBDb3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2Vz LCBJbmMuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisjIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KKyMgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisjIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorIyBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorIyBUSEUgQ09QWVJJR0hUIEhPTERFUihT KSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyMgT1RI RVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsCisjIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorIyBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdB UkUuCisjCisjCisjIE1ha2VmaWxlIGZvciB0aGUgJ2hkY3AnIHN1Yi1tb2R1bGUgb2YgREFMLgor IworCitIRENQID0gaGRjcF9kZGMubyBoZGNwX2xvZy5vIGhkY3BfcHNwLm8gaGRjcC5vIFwKKwkJ aGRjcDFfZXhlY3V0aW9uLm8gaGRjcDFfdHJhbnNpdGlvbi5vCisKK0FNRF9EQUxfSERDUCA9ICQo YWRkcHJlZml4ICQoQU1EREFMUEFUSCkvbW9kdWxlcy9oZGNwLywkKEhEQ1ApKQorIyQoaW5mbyAq KioqKioqKioqKiogIERBTC1IRENQX01BS0VGSUxFICoqKioqKioqKioqKikKKworQU1EX0RJU1BM QVlfRklMRVMgKz0gJChBTURfREFMX0hEQ1ApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9tb2R1bGVzL2hkY3AvaGRjcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uZDdhYzQ0NWRlYzZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L21vZHVsZXMvaGRjcC9oZGNwLmMKQEAgLTAsMCArMSw0MjYgQEAKKy8qCisg KiBDb3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz aGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBP UiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVS IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdB UkUuCisgKgorICogQXV0aG9yczogQU1ECisgKgorICovCisKKyNpbmNsdWRlICJoZGNwLmgiCisK K3N0YXRpYyB2b2lkIHB1c2hfZXJyb3Jfc3RhdHVzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJ ZW51bSBtb2RfaGRjcF9zdGF0dXMgc3RhdHVzKQoreworCXN0cnVjdCBtb2RfaGRjcF90cmFjZSAq dHJhY2UgPSAmaGRjcC0+Y29ubmVjdGlvbi50cmFjZTsKKworCWlmICh0cmFjZS0+ZXJyb3JfY291 bnQgPCBNQVhfTlVNX09GX0VSUk9SX1RSQUNFKSB7CisJCXRyYWNlLT5lcnJvcnNbdHJhY2UtPmVy cm9yX2NvdW50XS5zdGF0dXMgPSBzdGF0dXM7CisJCXRyYWNlLT5lcnJvcnNbdHJhY2UtPmVycm9y X2NvdW50XS5zdGF0ZV9pZCA9IGhkY3AtPnN0YXRlLmlkOworCQl0cmFjZS0+ZXJyb3JfY291bnQr KzsKKwkJSERDUF9FUlJPUl9UUkFDRShoZGNwLCBzdGF0dXMpOworCX0KKworCWhkY3AtPmNvbm5l Y3Rpb24uaGRjcDFfcmV0cnlfY291bnQrKzsKK30KKworc3RhdGljIHVpbnQ4X3QgaXNfY3BfZGVz aXJlZF9oZGNwMShzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJaW50IGksIGRpc3BsYXlfZW5h YmxlZCA9IDA7CisKKwkvKiBpZiBhbGwgZGlzcGxheXMgb24gdGhlIGxpbmsgYXJlIGRpc2FibGVk LCBoZGNwIGlzIG5vdCBkZXNpcmVkICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfRElT UExBWVM7IGkrKykgeworCQlpZiAoaGRjcC0+Y29ubmVjdGlvbi5kaXNwbGF5c1tpXS5zdGF0ZSAh PSBNT0RfSERDUF9ESVNQTEFZX0lOQUNUSVZFICYmCisJCQkJIWhkY3AtPmNvbm5lY3Rpb24uZGlz cGxheXNbaV0uYWRqdXN0LmRpc2FibGUpIHsKKwkJCWRpc3BsYXlfZW5hYmxlZCA9IDE7CisJCQli cmVhazsKKwkJfQorCX0KKworCXJldHVybiAoaGRjcC0+Y29ubmVjdGlvbi5oZGNwMV9yZXRyeV9j b3VudCA8IE1BWF9OVU1fT0ZfQVRURU1QVFMpICYmCisJCQlkaXNwbGF5X2VuYWJsZWQgJiYgIWhk Y3AtPmNvbm5lY3Rpb24ubGluay5hZGp1c3QuaGRjcDEuZGlzYWJsZTsKK30KKworc3RhdGljIGVu dW0gbW9kX2hkY3Bfc3RhdHVzIGV4ZWN1dGlvbihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0 cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJCXVuaW9uIG1vZF9oZGNw X3RyYW5zaXRpb25faW5wdXQgKmlucHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1 cyA9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCisJaWYgKGlzX2luX2luaXRpYWxpemVkX3N0 YXRlKGhkY3ApKSB7CisJCWlmIChldmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQX0VWRU5UX0NB TExCQUNLKSB7CisJCQlldmVudF9jdHgtPnVuZXhwZWN0ZWRfZXZlbnQgPSAxOworCQkJZ290byBv dXQ7CisJCX0KKwkJLyogaW5pdGlhbGl6ZSB0cmFuc2l0aW9uIGlucHV0ICovCisJCW1lbXNldChp bnB1dCwgMCwgc2l6ZW9mKHVuaW9uIG1vZF9oZGNwX3RyYW5zaXRpb25faW5wdXQpKTsKKwl9IGVs c2UgaWYgKGlzX2luX2NwX25vdF9kZXNpcmVkX3N0YXRlKGhkY3ApKSB7CisJCWlmIChldmVudF9j dHgtPmV2ZW50ICE9IE1PRF9IRENQX0VWRU5UX0NBTExCQUNLKSB7CisJCQlldmVudF9jdHgtPnVu ZXhwZWN0ZWRfZXZlbnQgPSAxOworCQkJZ290byBvdXQ7CisJCX0KKwkJLyogdXBkYXRlIHRvcG9s b2d5IGV2ZW50IGlmIGhkY3AgaXMgbm90IGRlc2lyZWQgKi8KKwkJc3RhdHVzID0gbW9kX2hkY3Bf YWRkX2Rpc3BsYXlfdG9wb2xvZ3koaGRjcCk7CisJfSBlbHNlIGlmIChpc19pbl9oZGNwMV9zdGF0 ZXMoaGRjcCkpIHsKKwkJc3RhdHVzID0gbW9kX2hkY3BfaGRjcDFfZXhlY3V0aW9uKGhkY3AsIGV2 ZW50X2N0eCwgJmlucHV0LT5oZGNwMSk7CisJfSBlbHNlIGlmIChpc19pbl9oZGNwMV9kcF9zdGF0 ZXMoaGRjcCkpIHsKKwkJc3RhdHVzID0gbW9kX2hkY3BfaGRjcDFfZHBfZXhlY3V0aW9uKGhkY3As CisJCQkJZXZlbnRfY3R4LCAmaW5wdXQtPmhkY3AxKTsKKwl9CitvdXQ6CisJcmV0dXJuIHN0YXR1 czsKK30KKworc3RhdGljIGVudW0gbW9kX2hkY3Bfc3RhdHVzIHRyYW5zaXRpb24oc3RydWN0IG1v ZF9oZGNwICpoZGNwLAorCQlzdHJ1Y3QgbW9kX2hkY3BfZXZlbnRfY29udGV4dCAqZXZlbnRfY3R4 LAorCQl1bmlvbiBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0ICppbnB1dCwKKwkJc3RydWN0IG1v ZF9oZGNwX291dHB1dCAqb3V0cHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1cyA9 IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCisJaWYgKGV2ZW50X2N0eC0+dW5leHBlY3RlZF9l dmVudCkKKwkJZ290byBvdXQ7CisKKwlpZiAoaXNfaW5faW5pdGlhbGl6ZWRfc3RhdGUoaGRjcCkp IHsKKwkJaWYgKGlzX2RwX2hkY3AoaGRjcCkpCisJCQlpZiAoaXNfY3BfZGVzaXJlZF9oZGNwMSho ZGNwKSkgeworCQkJCWNhbGxiYWNrX2luX21zKDAsIG91dHB1dCk7CisJCQkJc2V0X3N0YXRlX2lk KGhkY3AsIG91dHB1dCwgRDFfQTBfREVURVJNSU5FX1JYX0hEQ1BfQ0FQQUJMRSk7CisJCQl9IGVs c2UgeworCQkJCWNhbGxiYWNrX2luX21zKDAsIG91dHB1dCk7CisJCQkJc2V0X3N0YXRlX2lkKGhk Y3AsIG91dHB1dCwgSERDUF9DUF9OT1RfREVTSVJFRCk7CisJCQl9CisJCWVsc2UgaWYgKGlzX2hk bWlfZHZpX3NsX2hkY3AoaGRjcCkpCisJCQlpZiAoaXNfY3BfZGVzaXJlZF9oZGNwMShoZGNwKSkg eworCQkJCWNhbGxiYWNrX2luX21zKDAsIG91dHB1dCk7CisJCQkJc2V0X3N0YXRlX2lkKGhkY3As IG91dHB1dCwgSDFfQTBfV0FJVF9GT1JfQUNUSVZFX1JYKTsKKwkJCX0gZWxzZSB7CisJCQkJY2Fs bGJhY2tfaW5fbXMoMCwgb3V0cHV0KTsKKwkJCQlzZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0LCBI RENQX0NQX05PVF9ERVNJUkVEKTsKKwkJCX0KKwkJZWxzZSB7CisJCQljYWxsYmFja19pbl9tcygw LCBvdXRwdXQpOworCQkJc2V0X3N0YXRlX2lkKGhkY3AsIG91dHB1dCwgSERDUF9DUF9OT1RfREVT SVJFRCk7CisJCX0KKwl9IGVsc2UgaWYgKGlzX2luX2NwX25vdF9kZXNpcmVkX3N0YXRlKGhkY3Ap KSB7CisJCWluY3JlbWVudF9zdGF5X2NvdW50ZXIoaGRjcCk7CisJfSBlbHNlIGlmIChpc19pbl9o ZGNwMV9zdGF0ZXMoaGRjcCkpIHsKKwkJc3RhdHVzID0gbW9kX2hkY3BfaGRjcDFfdHJhbnNpdGlv bihoZGNwLAorCQkJCWV2ZW50X2N0eCwgJmlucHV0LT5oZGNwMSwgb3V0cHV0KTsKKwl9IGVsc2Ug aWYgKGlzX2luX2hkY3AxX2RwX3N0YXRlcyhoZGNwKSkgeworCQlzdGF0dXMgPSBtb2RfaGRjcF9o ZGNwMV9kcF90cmFuc2l0aW9uKGhkY3AsCisJCQkJZXZlbnRfY3R4LCAmaW5wdXQtPmhkY3AxLCBv dXRwdXQpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19JTlZBTElEX1NU QVRFOworCX0KK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgZW51bSBtb2RfaGRj cF9zdGF0dXMgcmVzZXRfYXV0aGVudGljYXRpb24oc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQlz dHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQpCit7CisJZW51bSBtb2RfaGRjcF9zdGF0dXMg c3RhdHVzID0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1M7CisKKwlpZiAoaXNfaGRjcDEoaGRjcCkp IHsKKwkJaWYgKGhkY3AtPmF1dGgudHJhbnNfaW5wdXQuaGRjcDEuY3JlYXRlX3Nlc3Npb24gIT0g VU5LTk9XTikKKwkJCW1vZF9oZGNwX2hkY3AxX2Rlc3Ryb3lfc2Vzc2lvbihoZGNwKTsKKworCQlp ZiAoaGRjcC0+YXV0aC50cmFuc19pbnB1dC5oZGNwMS5hZGRfdG9wb2xvZ3kgPT0gUEFTUykgewor CQkJc3RhdHVzID0gbW9kX2hkY3BfcmVtb3ZlX2Rpc3BsYXlfdG9wb2xvZ3koaGRjcCk7CisJCQlp ZiAoc3RhdHVzICE9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTKSB7CisJCQkJb3V0cHV0LT5jYWxs YmFja19uZWVkZWQgPSAwOworCQkJCW91dHB1dC0+d2F0Y2hkb2dfdGltZXJfbmVlZGVkID0gMDsK KwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQlIRENQX1RPUF9SRVNFVF9BVVRIX1RSQUNFKGhk Y3ApOworCQltZW1zZXQoJmhkY3AtPmF1dGgsIDAsIHNpemVvZihzdHJ1Y3QgbW9kX2hkY3BfYXV0 aGVudGljYXRpb24pKTsKKwkJbWVtc2V0KCZoZGNwLT5zdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBt b2RfaGRjcF9zdGF0ZSkpOworCQlzZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0LCBIRENQX0lOSVRJ QUxJWkVEKTsKKwl9IGVsc2UgaWYgKGlzX2luX2NwX25vdF9kZXNpcmVkX3N0YXRlKGhkY3ApKSB7 CisJCXN0YXR1cyA9IG1vZF9oZGNwX3JlbW92ZV9kaXNwbGF5X3RvcG9sb2d5KGhkY3ApOworCQlp ZiAoc3RhdHVzICE9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTKSB7CisJCQlvdXRwdXQtPmNhbGxi YWNrX25lZWRlZCA9IDA7CisJCQlvdXRwdXQtPndhdGNoZG9nX3RpbWVyX25lZWRlZCA9IDA7CisJ CQlnb3RvIG91dDsKKwkJfQorCQlIRENQX1RPUF9SRVNFVF9BVVRIX1RSQUNFKGhkY3ApOworCQlt ZW1zZXQoJmhkY3AtPmF1dGgsIDAsIHNpemVvZihzdHJ1Y3QgbW9kX2hkY3BfYXV0aGVudGljYXRp b24pKTsKKwkJbWVtc2V0KCZoZGNwLT5zdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBtb2RfaGRjcF9z dGF0ZSkpOworCQlzZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0LCBIRENQX0lOSVRJQUxJWkVEKTsK Kwl9CisKK291dDoKKwkvKiBzdG9wIGNhbGxiYWNrIGFuZCB3YXRjaGRvZyByZXF1ZXN0cyBmcm9t IHByZXZpb3VzIGF1dGhlbnRpY2F0aW9uKi8KKwlvdXRwdXQtPndhdGNoZG9nX3RpbWVyX3N0b3Ag PSAxOworCW91dHB1dC0+Y2FsbGJhY2tfc3RvcCA9IDE7CisJcmV0dXJuIHN0YXR1czsKK30KKwor c3RhdGljIGVudW0gbW9kX2hkY3Bfc3RhdHVzIHJlc2V0X2Nvbm5lY3Rpb24oc3RydWN0IG1vZF9o ZGNwICpoZGNwLAorCQlzdHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQpCit7CisJZW51bSBt b2RfaGRjcF9zdGF0dXMgc3RhdHVzID0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1M7CisKKwltZW1z ZXQob3V0cHV0LCAwLCBzaXplb2Yoc3RydWN0IG1vZF9oZGNwX291dHB1dCkpOworCisJc3RhdHVz ID0gcmVzZXRfYXV0aGVudGljYXRpb24oaGRjcCwgb3V0cHV0KTsKKwlpZiAoc3RhdHVzICE9IE1P RF9IRENQX1NUQVRVU19TVUNDRVNTKQorCQlnb3RvIG91dDsKKworCWlmIChjdXJyZW50X3N0YXRl KGhkY3ApICE9IEhEQ1BfVU5JTklUSUFMSVpFRCkgeworCQlIRENQX1RPUF9SRVNFVF9DT05OX1RS QUNFKGhkY3ApOworCQlzZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0LCBIRENQX1VOSU5JVElBTEla RUQpOworCX0KKwltZW1zZXQoJmhkY3AtPmNvbm5lY3Rpb24sIDAsIHNpemVvZihoZGNwLT5jb25u ZWN0aW9uKSk7CitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIEltcGxlbWVudGF0 aW9uIG9mIGZ1bmN0aW9ucyBpbiBtb2RfaGRjcC5oCisgKi8KK3NpemVfdCBtb2RfaGRjcF9nZXRf bWVtb3J5X3NpemUodm9pZCkKK3sKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBtb2RfaGRjcCk7Cit9 CisKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3NldHVwKHN0cnVjdCBtb2RfaGRjcCAq aGRjcCwKKwkJc3RydWN0IG1vZF9oZGNwX2NvbmZpZyAqY29uZmlnKQoreworCXN0cnVjdCBtb2Rf aGRjcF9vdXRwdXQgb3V0cHV0OworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1cyA9IE1PRF9I RENQX1NUQVRVU19TVUNDRVNTOworCisJbWVtc2V0KGhkY3AsIDAsIHNpemVvZihzdHJ1Y3QgbW9k X2hkY3ApKTsKKwltZW1zZXQoJm91dHB1dCwgMCwgc2l6ZW9mKG91dHB1dCkpOworCWhkY3AtPmNv bmZpZyA9ICpjb25maWc7CisJSERDUF9UT1BfSU5URVJGQUNFX1RSQUNFKGhkY3ApOworCXN0YXR1 cyA9IHJlc2V0X2Nvbm5lY3Rpb24oaGRjcCwgJm91dHB1dCk7CisJaWYgKHN0YXR1cyAhPSBNT0Rf SERDUF9TVEFUVVNfU1VDQ0VTUykKKwkJcHVzaF9lcnJvcl9zdGF0dXMoaGRjcCwgc3RhdHVzKTsK KwlyZXR1cm4gc3RhdHVzOworfQorCitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF90ZWFy ZG93bihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJZW51bSBtb2RfaGRjcF9zdGF0dXMgc3Rh dHVzID0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1M7CisJc3RydWN0IG1vZF9oZGNwX291dHB1dCBv dXRwdXQ7CisKKwlIRENQX1RPUF9JTlRFUkZBQ0VfVFJBQ0UoaGRjcCk7CisJbWVtc2V0KCZvdXRw dXQsIDAsICBzaXplb2Yob3V0cHV0KSk7CisJc3RhdHVzID0gcmVzZXRfY29ubmVjdGlvbihoZGNw LCAmb3V0cHV0KTsKKwlpZiAoc3RhdHVzID09IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTKQorCQlt ZW1zZXQoaGRjcCwgMCwgc2l6ZW9mKHN0cnVjdCBtb2RfaGRjcCkpOworCWVsc2UKKwkJcHVzaF9l cnJvcl9zdGF0dXMoaGRjcCwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitlbnVtIG1v ZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9hZGRfZGlzcGxheShzdHJ1Y3QgbW9kX2hkY3AgKmhkY3As CisJCXN0cnVjdCBtb2RfaGRjcF9saW5rICpsaW5rLCBzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheSAq ZGlzcGxheSwKKwkJc3RydWN0IG1vZF9oZGNwX291dHB1dCAqb3V0cHV0KQoreworCWVudW0gbW9k X2hkY3Bfc3RhdHVzIHN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCXN0cnVjdCBt b2RfaGRjcF9kaXNwbGF5ICpkaXNwbGF5X2NvbnRhaW5lciA9IE5VTEw7CisKKwlIRENQX1RPUF9J TlRFUkZBQ0VfVFJBQ0VfV0lUSF9JTkRFWChoZGNwLCBkaXNwbGF5LT5pbmRleCk7CisJbWVtc2V0 KG91dHB1dCwgMCwgc2l6ZW9mKHN0cnVjdCBtb2RfaGRjcF9vdXRwdXQpKTsKKworCS8qIHNraXAg aW5hY3RpdmUgZGlzcGxheSAqLworCWlmIChkaXNwbGF5LT5zdGF0ZSAhPSBNT0RfSERDUF9ESVNQ TEFZX0FDVElWRSkgeworCQlzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKwkJZ290 byBvdXQ7CisJfQorCisJLyogY2hlY2sgZXhpc3RpbmcgZGlzcGxheSBjb250YWluZXIgKi8KKwlp ZiAoZ2V0X2FjdGl2ZV9kaXNwbGF5X2F0X2luZGV4KGhkY3AsIGRpc3BsYXktPmluZGV4KSkgewor CQlzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKwkJZ290byBvdXQ7CisJfQorCisJ LyogZmluZCBhbiBlbXB0eSBkaXNwbGF5IGNvbnRhaW5lciAqLworCWRpc3BsYXlfY29udGFpbmVy ID0gZ2V0X2VtcHR5X2Rpc3BsYXlfY29udGFpbmVyKGhkY3ApOworCWlmICghZGlzcGxheV9jb250 YWluZXIpIHsKKwkJc3RhdHVzID0gTU9EX0hEQ1BfU1RBVFVTX0RJU1BMQVlfT1VUX09GX0JPVU5E OworCQlnb3RvIG91dDsKKwl9CisKKwkvKiByZXNldCBleGlzdGluZyBhdXRoZW50aWNhdGlvbiBz dGF0dXMgKi8KKwlzdGF0dXMgPSByZXNldF9hdXRoZW50aWNhdGlvbihoZGNwLCBvdXRwdXQpOwor CWlmIChzdGF0dXMgIT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gb3V0OworCisJ LyogYWRkIGRpc3BsYXkgdG8gY29ubmVjdGlvbiAqLworCWhkY3AtPmNvbm5lY3Rpb24ubGluayA9 ICpsaW5rOworCSpkaXNwbGF5X2NvbnRhaW5lciA9ICpkaXNwbGF5OworCisJLyogcmVzZXQgcmV0 cnkgY291bnRlcnMgKi8KKwlyZXNldF9yZXRyeV9jb3VudHMoaGRjcCk7CisKKwkvKiByZXNldCBl cnJvciB0cmFjZSAqLworCW1lbXNldCgmaGRjcC0+Y29ubmVjdGlvbi50cmFjZSwgMCwgc2l6ZW9m KGhkY3AtPmNvbm5lY3Rpb24udHJhY2UpKTsKKworCS8qIHJlcXVlc3QgYXV0aGVudGljYXRpb24g Ki8KKwlpZiAoY3VycmVudF9zdGF0ZShoZGNwKSAhPSBIRENQX0lOSVRJQUxJWkVEKQorCQlzZXRf c3RhdGVfaWQoaGRjcCwgb3V0cHV0LCBIRENQX0lOSVRJQUxJWkVEKTsKKwljYWxsYmFja19pbl9t cyhoZGNwLT5jb25uZWN0aW9uLmxpbmsuYWRqdXN0LmF1dGhfZGVsYXkgKiAxMDAwLCBvdXRwdXQp Oworb3V0OgorCWlmIChzdGF0dXMgIT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MpCisJCXB1c2hf ZXJyb3Jfc3RhdHVzKGhkY3AsIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitlbnVt IG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZW1vdmVfZGlzcGxheShzdHJ1Y3QgbW9kX2hkY3Ag KmhkY3AsCisJCXVpbnQ4X3QgaW5kZXgsIHN0cnVjdCBtb2RfaGRjcF9vdXRwdXQgKm91dHB1dCkK K3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VT UzsKKwlzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheSAqZGlzcGxheSA9IE5VTEw7CisKKwlIRENQX1RP UF9JTlRFUkZBQ0VfVFJBQ0VfV0lUSF9JTkRFWChoZGNwLCBpbmRleCk7CisJbWVtc2V0KG91dHB1 dCwgMCwgc2l6ZW9mKHN0cnVjdCBtb2RfaGRjcF9vdXRwdXQpKTsKKworCS8qIGZpbmQgZGlzcGxh eSBpbiBjb25uZWN0aW9uICovCisJZGlzcGxheSA9IGdldF9hY3RpdmVfZGlzcGxheV9hdF9pbmRl eChoZGNwLCBpbmRleCk7CisJaWYgKCFkaXNwbGF5KSB7CisJCXN0YXR1cyA9IE1PRF9IRENQX1NU QVRVU19TVUNDRVNTOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBzdG9wIGN1cnJlbnQgYXV0aGVu dGljYXRpb24gKi8KKwlzdGF0dXMgPSByZXNldF9hdXRoZW50aWNhdGlvbihoZGNwLCBvdXRwdXQp OworCWlmIChzdGF0dXMgIT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gb3V0Owor CisJLyogcmVtb3ZlIGRpc3BsYXkgKi8KKwlkaXNwbGF5LT5zdGF0ZSA9IE1PRF9IRENQX0RJU1BM QVlfSU5BQ1RJVkU7CisKKwkvKiBjbGVhciByZXRyeSBjb3VudGVycyAqLworCXJlc2V0X3JldHJ5 X2NvdW50cyhoZGNwKTsKKworCS8qIHJlc2V0IGVycm9yIHRyYWNlICovCisJbWVtc2V0KCZoZGNw LT5jb25uZWN0aW9uLnRyYWNlLCAwLCBzaXplb2YoaGRjcC0+Y29ubmVjdGlvbi50cmFjZSkpOwor CisJLyogcmVxdWVzdCBhdXRoZW50aWNhdGlvbiBmb3IgcmVtYWluaW5nIGRpc3BsYXlzKi8KKwlp ZiAoZ2V0X2FjdGl2ZV9kaXNwbGF5X2NvdW50KGhkY3ApID4gMCkKKwkJY2FsbGJhY2tfaW5fbXMo aGRjcC0+Y29ubmVjdGlvbi5saW5rLmFkanVzdC5hdXRoX2RlbGF5ICogMTAwMCwKKwkJCQlvdXRw dXQpOworb3V0OgorCWlmIChzdGF0dXMgIT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MpCisJCXB1 c2hfZXJyb3Jfc3RhdHVzKGhkY3AsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworZW51 bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfcXVlcnlfZGlzcGxheShzdHJ1Y3QgbW9kX2hkY3Ag KmhkY3AsCisJCXVpbnQ4X3QgaW5kZXgsIHN0cnVjdCBtb2RfaGRjcF9kaXNwbGF5X3F1ZXJ5ICpx dWVyeSkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNf U1VDQ0VTUzsKKwlzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheSAqZGlzcGxheSA9IE5VTEw7CisKKwkv KiBmaW5kIGRpc3BsYXkgaW4gY29ubmVjdGlvbiAqLworCWRpc3BsYXkgPSBnZXRfYWN0aXZlX2Rp c3BsYXlfYXRfaW5kZXgoaGRjcCwgaW5kZXgpOworCWlmICghZGlzcGxheSkgeworCQlzdGF0dXMg PSBNT0RfSERDUF9TVEFUVVNfRElTUExBWV9OT1RfRk9VTkQ7CisJCWdvdG8gb3V0OworCX0KKwor CS8qIHBvcHVsYXRlIHF1ZXJ5ICovCisJcXVlcnktPmxpbmsgPSAmaGRjcC0+Y29ubmVjdGlvbi5s aW5rOworCXF1ZXJ5LT5kaXNwbGF5ID0gZGlzcGxheTsKKwlxdWVyeS0+dHJhY2UgPSAmaGRjcC0+ Y29ubmVjdGlvbi50cmFjZTsKKwlxdWVyeS0+ZW5jcnlwdGlvbl9zdGF0dXMgPSBNT0RfSERDUF9F TkNSWVBUSU9OX1NUQVRVU19IRENQX09GRjsKKworCW1vZF9oZGNwX2hkY3AxX2dldF9saW5rX2Vu Y3J5cHRpb25fc3RhdHVzKGhkY3AsICZxdWVyeS0+ZW5jcnlwdGlvbl9zdGF0dXMpOworCitvdXQ6 CisJcmV0dXJuIHN0YXR1czsKK30KKworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfcmVz ZXRfY29ubmVjdGlvbihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9v dXRwdXQgKm91dHB1dCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERD UF9TVEFUVVNfU1VDQ0VTUzsKKworCUhEQ1BfVE9QX0lOVEVSRkFDRV9UUkFDRShoZGNwKTsKKwlz dGF0dXMgPSByZXNldF9jb25uZWN0aW9uKGhkY3AsIG91dHB1dCk7CisJaWYgKHN0YXR1cyAhPSBN T0RfSERDUF9TVEFUVVNfU1VDQ0VTUykKKwkJcHVzaF9lcnJvcl9zdGF0dXMoaGRjcCwgc3RhdHVz KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNw X3Byb2Nlc3NfZXZlbnQoc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQllbnVtIG1vZF9oZGNwX2V2 ZW50IGV2ZW50LCBzdHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQpCit7CisJZW51bSBtb2Rf aGRjcF9zdGF0dXMgZXhlY19zdGF0dXMsIHRyYW5zX3N0YXR1cywgcmVzZXRfc3RhdHVzLCBzdGF0 dXM7CisJc3RydWN0IG1vZF9oZGNwX2V2ZW50X2NvbnRleHQgZXZlbnRfY3R4OworCisJSERDUF9F VkVOVF9UUkFDRShoZGNwLCBldmVudCk7CisJbWVtc2V0KG91dHB1dCwgMCwgc2l6ZW9mKHN0cnVj dCBtb2RfaGRjcF9vdXRwdXQpKTsKKwltZW1zZXQoJmV2ZW50X2N0eCwgMCwgc2l6ZW9mKHN0cnVj dCBtb2RfaGRjcF9ldmVudF9jb250ZXh0KSk7CisJZXZlbnRfY3R4LmV2ZW50ID0gZXZlbnQ7CisK KwkvKiBleGVjdXRlIGFuZCB0cmFuc2l0aW9uICovCisJZXhlY19zdGF0dXMgPSBleGVjdXRpb24o aGRjcCwgJmV2ZW50X2N0eCwgJmhkY3AtPmF1dGgudHJhbnNfaW5wdXQpOworCXRyYW5zX3N0YXR1 cyA9IHRyYW5zaXRpb24oCisJCQloZGNwLCAmZXZlbnRfY3R4LCAmaGRjcC0+YXV0aC50cmFuc19p bnB1dCwgb3V0cHV0KTsKKwlpZiAodHJhbnNfc3RhdHVzID09IE1PRF9IRENQX1NUQVRVU19TVUND RVNTKSB7CisJCXN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCX0gZWxzZSBpZiAo ZXhlY19zdGF0dXMgPT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJc3RhdHVzID0gTU9E X0hEQ1BfU1RBVFVTX0lOVEVSTkFMX1BPTElDWV9GQUlMVVJFOworCQlwdXNoX2Vycm9yX3N0YXR1 cyhoZGNwLCBzdGF0dXMpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IGV4ZWNfc3RhdHVzOworCQlw dXNoX2Vycm9yX3N0YXR1cyhoZGNwLCBzdGF0dXMpOworCX0KKworCS8qIHJlc2V0IGF1dGhlbnRp Y2F0aW9uIGlmIG5lZWRlZCAqLworCWlmICh0cmFuc19zdGF0dXMgPT0gTU9EX0hEQ1BfU1RBVFVT X1JFU0VUX05FRURFRCkgeworCQlIRENQX0ZVTExfRERDX1RSQUNFKGhkY3ApOworCQlyZXNldF9z dGF0dXMgPSByZXNldF9hdXRoZW50aWNhdGlvbihoZGNwLCBvdXRwdXQpOworCQlpZiAocmVzZXRf c3RhdHVzICE9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTKQorCQkJcHVzaF9lcnJvcl9zdGF0dXMo aGRjcCwgcmVzZXRfc3RhdHVzKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworZW51bSBtb2Rf aGRjcF9vcGVyYXRpb25fbW9kZSBtb2RfaGRjcF9zaWduYWxfdHlwZV90b19vcGVyYXRpb25fbW9k ZSgKKwkJZW51bSBzaWduYWxfdHlwZSBzaWduYWwpCit7CisJZW51bSBtb2RfaGRjcF9vcGVyYXRp b25fbW9kZSBtb2RlID0gTU9EX0hEQ1BfTU9ERV9PRkY7CisKKwlzd2l0Y2ggKHNpZ25hbCkgewor CWNhc2UgU0lHTkFMX1RZUEVfRFZJX1NJTkdMRV9MSU5LOgorCWNhc2UgU0lHTkFMX1RZUEVfSERN SV9UWVBFX0E6CisJCW1vZGUgPSBNT0RfSERDUF9NT0RFX0RFRkFVTFQ7CisJCWJyZWFrOworCWNh c2UgU0lHTkFMX1RZUEVfRURQOgorCWNhc2UgU0lHTkFMX1RZUEVfRElTUExBWV9QT1JUOgorCQlt b2RlID0gTU9EX0hEQ1BfTU9ERV9EUDsKKwkJYnJlYWs7CisJY2FzZSBTSUdOQUxfVFlQRV9ESVNQ TEFZX1BPUlRfTVNUOgorCQltb2RlID0gTU9EX0hEQ1BfTU9ERV9EUF9NU1Q7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCWJyZWFrOworCX07CisKKwlyZXR1cm4gbW9kZTsKK30KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcC5oIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaGRjcC9oZGNwLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40MDJiYjc5OTkwOTMKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3AuaApAQCAtMCww ICsxLDQ0MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMs IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT UyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZ UklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2lm bmRlZiBIRENQX0hfCisjZGVmaW5lIEhEQ1BfSF8KKworI2luY2x1ZGUgIm1vZF9oZGNwLmgiCisj aW5jbHVkZSAiaGRjcF9sb2cuaCIKKworI2RlZmluZSBCQ0FQU19SRUFEWV9NQVNLCQkJCTB4MjAK KyNkZWZpbmUgQkNBUFNfUkVQRUFURVJfTUFTSwkJCQkweDQwCisjZGVmaW5lIEJTVEFUVVNfREVW SUNFX0NPVU5UX01BU0sJCQkwWDAwN0YKKyNkZWZpbmUgQlNUQVRVU19NQVhfREVWU19FWENFRURF RF9NQVNLCQkJMHgwMDgwCisjZGVmaW5lIEJTVEFUVVNfTUFYX0NBU0NBREVfRVhDRUVERURfTUFT SwkJMHgwODAwCisjZGVmaW5lIEJDQVBTX0hEQ1BfQ0FQQUJMRV9NQVNLX0RQCQkJMHgwMQorI2Rl ZmluZSBCQ0FQU19SRVBFQVRFUl9NQVNLX0RQCQkJCTB4MDIKKyNkZWZpbmUgQlNUQVRVU19SRUFE WV9NQVNLX0RQCQkJCTB4MDEKKyNkZWZpbmUgQlNUQVRVU19SMF9QX0FWQUlMQUJMRV9NQVNLX0RQ CQkJMHgwMgorI2RlZmluZSBCU1RBVFVTX0xJTktfSU5URUdSSVRZX0ZBSUxVUkVfTUFTS19EUAkJ MHgwNAorI2RlZmluZSBCU1RBVFVTX1JFQVVUSF9SRVFVRVNUX01BU0tfRFAJCQkweDA4CisjZGVm aW5lIEJJTkZPX0RFVklDRV9DT1VOVF9NQVNLX0RQCQkJMFgwMDdGCisjZGVmaW5lIEJJTkZPX01B WF9ERVZTX0VYQ0VFREVEX01BU0tfRFAJCQkweDAwODAKKyNkZWZpbmUgQklORk9fTUFYX0NBU0NB REVfRVhDRUVERURfTUFTS19EUAkJMHgwODAwCisKKyNkZWZpbmUgUlhTVEFUVVNfTVNHX1NJWkVf TUFTSwkJCQkweDAzRkYKKyNkZWZpbmUgUlhTVEFUVVNfUkVBRFlfTUFTSwkJCQkweDA0MDAKKyNk ZWZpbmUgUlhTVEFUVVNfUkVBVVRIX1JFUVVFU1RfTUFTSwkJCTB4MDgwMAorI2RlZmluZSBSWElE TElTVF9ERVZJQ0VfQ09VTlRfTE9XRVJfTUFTSwkJMHhmMAorI2RlZmluZSBSWElETElTVF9ERVZJ Q0VfQ09VTlRfVVBQRVJfTUFTSwkJMHgwMQorI2RlZmluZSBSWENBUFNfQllURTBfSERDUF9DQVBB QkxFX01BU0tfRFAJCTB4MDIKKyNkZWZpbmUgUlhTVEFUVVNfUkVBRFlfTUFTS19EUAkJCQkweDAw MDEKKyNkZWZpbmUgUlhTVEFUVVNfSF9QX0FWQUlMQUJMRV9NQVNLX0RQCQkJMHgwMDAyCisjZGVm aW5lIFJYU1RBVFVTX1BBSVJJTkdfQVZBSUxBQkxFX01BU0tfRFAJCTB4MDAwNAorI2RlZmluZSBS WFNUQVRVU19SRUFVVEhfUkVRVUVTVF9NQVNLX0RQCQkJMHgwMDA4CisjZGVmaW5lIFJYU1RBVFVT X0xJTktfSU5URUdSSVRZX0ZBSUxVUkVfTUFTS19EUAkJMHgwMDEwCisKK2VudW0gbW9kX2hkY3Bf dHJhbnNfaW5wdXRfcmVzdWx0IHsKKwlVTktOT1dOID0gMCwKKwlQQVNTLAorCUZBSUwKK307CisK K3N0cnVjdCBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hkY3AxIHsKKwl1aW50OF90IGJrc3Zf cmVhZDsKKwl1aW50OF90IGJrc3ZfdmFsaWRhdGlvbjsKKwl1aW50OF90IGFkZF90b3BvbG9neTsK Kwl1aW50OF90IGNyZWF0ZV9zZXNzaW9uOworCXVpbnQ4X3QgYW5fd3JpdGU7CisJdWludDhfdCBh a3N2X3dyaXRlOworCXVpbnQ4X3QgYWluZm9fd3JpdGU7CisJdWludDhfdCBiY2Fwc19yZWFkOwor CXVpbnQ4X3QgcjBwX3JlYWQ7CisJdWludDhfdCByeF92YWxpZGF0aW9uOworCXVpbnQ4X3QgZW5j cnlwdGlvbjsKKwl1aW50OF90IGxpbmtfbWFpbnRlbmFuY2U7CisJdWludDhfdCByZWFkeV9jaGVj azsKKwl1aW50OF90IGJzdGF0dXNfcmVhZDsKKwl1aW50OF90IG1heF9jYXNjYWRlX2NoZWNrOwor CXVpbnQ4X3QgbWF4X2RldnNfY2hlY2s7CisJdWludDhfdCBkZXZpY2VfY291bnRfY2hlY2s7CisJ dWludDhfdCBrc3ZsaXN0X3JlYWQ7CisJdWludDhfdCB2cF9yZWFkOworCXVpbnQ4X3Qga3N2bGlz dF92cF92YWxpZGF0aW9uOworCisJdWludDhfdCBoZGNwX2NhcGFibGVfZHA7CisJdWludDhfdCBi aW5mb19yZWFkX2RwOworCXVpbnQ4X3QgcjBwX2F2YWlsYWJsZV9kcDsKKwl1aW50OF90IGxpbmtf aW50ZWdpcnlfY2hlY2s7CisJdWludDhfdCByZWF1dGhfcmVxdWVzdF9jaGVjazsKKwl1aW50OF90 IHN0cmVhbV9lbmNyeXB0aW9uX2RwOworfTsKKwordW5pb24gbW9kX2hkY3BfdHJhbnNpdGlvbl9p bnB1dCB7CisJc3RydWN0IG1vZF9oZGNwX3RyYW5zaXRpb25faW5wdXRfaGRjcDEgaGRjcDE7Cit9 OworCitzdHJ1Y3QgbW9kX2hkY3BfbWVzc2FnZV9oZGNwMSB7CisJdWludDhfdAkJYW5bOF07CisJ dWludDhfdAkJYWtzdls1XTsKKwl1aW50OF90CQlhaW5mbzsKKwl1aW50OF90CQlia3N2WzVdOwor CXVpbnQxNl90CXIwcDsKKwl1aW50OF90CQliY2FwczsKKwl1aW50MTZfdAlic3RhdHVzOworCXVp bnQ4X3QJCWtzdmxpc3RbNjM1XTsKKwl1aW50MTZfdAlrc3ZsaXN0X3NpemU7CisJdWludDhfdAkJ dnBbMjBdOworCisJdWludDE2X3QJYmluZm9fZHA7Cit9OworCit1bmlvbiBtb2RfaGRjcF9tZXNz YWdlIHsKKwlzdHJ1Y3QgbW9kX2hkY3BfbWVzc2FnZV9oZGNwMSBoZGNwMTsKK307CisKK3N0cnVj dCBtb2RfaGRjcF9hdXRoX2NvdW50ZXJzIHsKKwl1aW50OF90IHN0cmVhbV9tYW5hZ2VtZW50X3Jl dHJ5X2NvdW50OworfTsKKworLyogY29udGFpbnMgdmFsdWVzIHBlciBjb25uZWN0aW9uICovCitz dHJ1Y3QgbW9kX2hkY3BfY29ubmVjdGlvbiB7CisJc3RydWN0IG1vZF9oZGNwX2xpbmsgbGluazsK KwlzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheSBkaXNwbGF5c1tNQVhfTlVNX09GX0RJU1BMQVlTXTsK Kwl1aW50OF90IGlzX3JlcGVhdGVyOworCXVpbnQ4X3QgaXNfa21fc3RvcmVkOworCXN0cnVjdCBt b2RfaGRjcF90cmFjZSB0cmFjZTsKKwl1aW50OF90IGhkY3AxX3JldHJ5X2NvdW50OworfTsKKwor LyogY29udGFpbnMgdmFsdWVzIHBlciBhdXRoZW50aWNhdGlvbiBjeWNsZSAqLworc3RydWN0IG1v ZF9oZGNwX2F1dGhlbnRpY2F0aW9uIHsKKwl1aW50MzJfdCBpZDsKKwl1bmlvbiBtb2RfaGRjcF9t ZXNzYWdlIG1zZzsKKwl1bmlvbiBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0IHRyYW5zX2lucHV0 OworCXN0cnVjdCBtb2RfaGRjcF9hdXRoX2NvdW50ZXJzIGNvdW50OworfTsKKworLyogY29udGFp bnMgdmFsdWVzIHBlciBzdGF0ZSBjaGFuZ2UgKi8KK3N0cnVjdCBtb2RfaGRjcF9zdGF0ZSB7CisJ dWludDhfdCBpZDsKKwl1aW50MzJfdCBzdGF5X2NvdW50OworfTsKKworLyogcGVyIGV2ZW50IGlu IGEgc3RhdGUgKi8KK3N0cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0IHsKKwllbnVtIG1vZF9o ZGNwX2V2ZW50IGV2ZW50OworCXVpbnQ4X3QgcnhfaWRfbGlzdF9yZWFkeTsKKwl1aW50OF90IHVu ZXhwZWN0ZWRfZXZlbnQ7Cit9OworCitzdHJ1Y3QgbW9kX2hkY3AgeworCS8qIHBlciBsaW5rICov CisJc3RydWN0IG1vZF9oZGNwX2NvbmZpZyBjb25maWc7CisJLyogcGVyIGNvbm5lY3Rpb24gKi8K KwlzdHJ1Y3QgbW9kX2hkY3BfY29ubmVjdGlvbiBjb25uZWN0aW9uOworCS8qIHBlciBhdXRoZW50 aWNhdGlvbiBhdHRlbXB0ICovCisJc3RydWN0IG1vZF9oZGNwX2F1dGhlbnRpY2F0aW9uIGF1dGg7 CisJLyogcGVyIHN0YXRlIGluIGFuIGF1dGhlbnRpY2F0aW9uICovCisJc3RydWN0IG1vZF9oZGNw X3N0YXRlIHN0YXRlOworCS8qIHJlc2VydmVkIG1lbW9yeSBidWZmZXIgKi8KKwl1aW50OF90IGJ1 ZlsyMDI1XTsKK307CisKK2VudW0gbW9kX2hkY3BfaW5pdGlhbF9zdGF0ZV9pZCB7CisJSERDUF9V TklOSVRJQUxJWkVEID0gMHgwLAorCUhEQ1BfSU5JVElBTF9TVEFURV9TVEFSVCA9IEhEQ1BfVU5J TklUSUFMSVpFRCwKKwlIRENQX0lOSVRJQUxJWkVELAorCUhEQ1BfQ1BfTk9UX0RFU0lSRUQsCisJ SERDUF9JTklUSUFMX1NUQVRFX0VORCA9IEhEQ1BfQ1BfTk9UX0RFU0lSRUQKK307CisKK2VudW0g bW9kX2hkY3BfaGRjcDFfc3RhdGVfaWQgeworCUhEQ1AxX1NUQVRFX1NUQVJUID0gSERDUF9JTklU SUFMX1NUQVRFX0VORCwKKwlIMV9BMF9XQUlUX0ZPUl9BQ1RJVkVfUlgsCisJSDFfQTFfRVhDSEFO R0VfS1NWUywKKwlIMV9BMl9DT01QVVRBVElPTlNfQTNfVkFMSURBVEVfUlhfQTZfVEVTVF9GT1Jf UkVQRUFURVIsCisJSDFfQTQ1X0FVVEhFTklDQVRFRCwKKwlIMV9BOF9XQUlUX0ZPUl9SRUFEWSwK KwlIMV9BOV9SRUFEX0tTVl9MSVNULAorCUhEQ1AxX1NUQVRFX0VORCA9IEgxX0E5X1JFQURfS1NW X0xJU1QKK307CisKK2VudW0gbW9kX2hkY3BfaGRjcDFfZHBfc3RhdGVfaWQgeworCUhEQ1AxX0RQ X1NUQVRFX1NUQVJUID0gSERDUDFfU1RBVEVfRU5ELAorCUQxX0EwX0RFVEVSTUlORV9SWF9IRENQ X0NBUEFCTEUsCisJRDFfQTFfRVhDSEFOR0VfS1NWUywKKwlEMV9BMjNfV0FJVF9GT1JfUjBfUFJJ TUUsCisJRDFfQTJfQ09NUFVUQVRJT05TX0EzX1ZBTElEQVRFX1JYX0E1X1RFU1RfRk9SX1JFUEVB VEVSLAorCUQxX0E0X0FVVEhFTklDQVRFRCwKKwlEMV9BNl9XQUlUX0ZPUl9SRUFEWSwKKwlEMV9B N19SRUFEX0tTVl9MSVNULAorCUhEQ1AxX0RQX1NUQVRFX0VORCA9IEQxX0E3X1JFQURfS1NWX0xJ U1QsCit9OworCisvKiBoZGNwMSBleGVjdXRpb25zIGFuZCB0cmFuc2l0aW9ucyAqLwordHlwZWRl ZiBlbnVtIG1vZF9oZGNwX3N0YXR1cyAoKm1vZF9oZGNwX2FjdGlvbikoc3RydWN0IG1vZF9oZGNw ICpoZGNwKTsKK3VpbnQ4X3QgbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0KAorCQltb2RfaGRjcF9h Y3Rpb24gZnVuYywgdWludDhfdCAqZmxhZywKKwkJZW51bSBtb2RfaGRjcF9zdGF0dXMgKnN0YXR1 cywgc3RydWN0IG1vZF9oZGNwICpoZGNwLCBjaGFyICpzdHIpOworZW51bSBtb2RfaGRjcF9zdGF0 dXMgbW9kX2hkY3BfaGRjcDFfZXhlY3V0aW9uKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwlzdHJ1 Y3QgbW9kX2hkY3BfZXZlbnRfY29udGV4dCAqZXZlbnRfY3R4LAorCXN0cnVjdCBtb2RfaGRjcF90 cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2Rf aGRjcF9oZGNwMV9kcF9leGVjdXRpb24oc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCXN0cnVjdCBt b2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJc3RydWN0IG1vZF9oZGNwX3RyYW5z aXRpb25faW5wdXRfaGRjcDEgKmlucHV0KTsKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNw X2hkY3AxX3RyYW5zaXRpb24oc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCXN0cnVjdCBtb2RfaGRj cF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJc3RydWN0IG1vZF9oZGNwX3RyYW5zaXRpb25f aW5wdXRfaGRjcDEgKmlucHV0LAorCXN0cnVjdCBtb2RfaGRjcF9vdXRwdXQgKm91dHB1dCk7Citl bnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9oZGNwMV9kcF90cmFuc2l0aW9uKHN0cnVjdCBt b2RfaGRjcCAqaGRjcCwKKwlzdHJ1Y3QgbW9kX2hkY3BfZXZlbnRfY29udGV4dCAqZXZlbnRfY3R4 LAorCXN0cnVjdCBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCwKKwlzdHJ1 Y3QgbW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQpOworCisvKiBsb2cgZnVuY3Rpb25zICovCit2b2lk IG1vZF9oZGNwX2R1bXBfYmluYXJ5X21lc3NhZ2UodWludDhfdCAqbXNnLCB1aW50MzJfdCBtc2df c2l6ZSwKKwkJdWludDhfdCAqYnVmLCB1aW50MzJfdCBidWZfc2l6ZSk7CisvKiBUT0RPOiBhZGQg YWRqdXN0bWVudCBsb2cgKi8KKworLyogcHNwIGZ1bmN0aW9ucyAqLworZW51bSBtb2RfaGRjcF9z dGF0dXMgbW9kX2hkY3BfYWRkX2Rpc3BsYXlfdG9wb2xvZ3koCisJCXN0cnVjdCBtb2RfaGRjcCAq aGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZW1vdmVfZGlzcGxheV90b3Bv bG9neSgKKwkJc3RydWN0IG1vZF9oZGNwICpoZGNwKTsKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1v ZF9oZGNwX2hkY3AxX2NyZWF0ZV9zZXNzaW9uKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVt IG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9oZGNwMV9kZXN0cm95X3Nlc3Npb24oc3RydWN0IG1v ZF9oZGNwICpoZGNwKTsKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX2hkY3AxX3ZhbGlk YXRlX3J4KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2Rf aGRjcF9oZGNwMV9lbmFibGVfZW5jcnlwdGlvbihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51 bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfaGRjcDFfdmFsaWRhdGVfa3N2bGlzdF92cChzdHJ1 Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfaGRjcDFf ZW5hYmxlX2RwX3N0cmVhbV9lbmNyeXB0aW9uKAorCXN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7Citl bnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9oZGNwMV9saW5rX21haW50ZW5hbmNlKHN0cnVj dCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9oZGNwMV9n ZXRfbGlua19lbmNyeXB0aW9uX3N0YXR1cyhzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCQkJCQkJ ICAgICAgIGVudW0gbW9kX2hkY3BfZW5jcnlwdGlvbl9zdGF0dXMgKmVuY3J5cHRpb25fc3RhdHVz KTsKKy8qIGRkYyBmdW5jdGlvbnMgKi8KK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3Jl YWRfYmtzdihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9k X2hkY3BfcmVhZF9iY2FwcyhzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9z dGF0dXMgbW9kX2hkY3BfcmVhZF9ic3RhdHVzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVt IG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX3IwcChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3Ap OworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfcmVhZF9rc3ZsaXN0KHN0cnVjdCBtb2Rf aGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX3ZwKHN0cnVj dCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX2Jp bmZvKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRj cF93cml0ZV9ha3N2KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1 cyBtb2RfaGRjcF93cml0ZV9haW5mbyhzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2Rf aGRjcF9zdGF0dXMgbW9kX2hkY3Bfd3JpdGVfYW4oc3RydWN0IG1vZF9oZGNwICpoZGNwKTsKK2Vu dW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3JlYWRfcnhjYXBzKHN0cnVjdCBtb2RfaGRjcCAq aGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX3J4c3RhdHVzKHN0cnVj dCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX2Fr ZV9jZXJ0KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2Rf aGRjcF9yZWFkX2hfcHJpbWUoc3RydWN0IG1vZF9oZGNwICpoZGNwKTsKK2VudW0gbW9kX2hkY3Bf c3RhdHVzIG1vZF9oZGNwX3JlYWRfcGFpcmluZ19pbmZvKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7 CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX2xfcHJpbWUoc3RydWN0IG1vZF9o ZGNwICpoZGNwKTsKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3JlYWRfcnhfaWRfbGlz dChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3Bf cmVhZF9zdHJlYW1fcmVhZHkoc3RydWN0IG1vZF9oZGNwICpoZGNwKTsKK2VudW0gbW9kX2hkY3Bf c3RhdHVzIG1vZF9oZGNwX3dyaXRlX2FrZV9pbml0KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7Citl bnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF93cml0ZV9ub19zdG9yZWRfa20oc3RydWN0IG1v ZF9oZGNwICpoZGNwKTsKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3dyaXRlX3N0b3Jl ZF9rbShzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hk Y3Bfd3JpdGVfbGNfaW5pdChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9z dGF0dXMgbW9kX2hkY3Bfd3JpdGVfZWtzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1v ZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF93cml0ZV9yZXBlYXRlcl9hdXRoX2FjayhzdHJ1Y3QgbW9k X2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3Bfd3JpdGVfc3RyZWFt X21hbmFnZShzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9k X2hkY3Bfd3JpdGVfY29udGVudF90eXBlKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CisKKy8qIGhk Y3AgdmVyc2lvbiBoZWxwZXJzICovCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaXNfZHBfaGRjcChz dHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJcmV0dXJuIChoZGNwLT5jb25uZWN0aW9uLmxpbmsu bW9kZSA9PSBNT0RfSERDUF9NT0RFX0RQIHx8CisJCQloZGNwLT5jb25uZWN0aW9uLmxpbmsubW9k ZSA9PSBNT0RfSERDUF9NT0RFX0RQX01TVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBp c19kcF9tc3RfaGRjcChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJcmV0dXJuIChoZGNwLT5j b25uZWN0aW9uLmxpbmsubW9kZSA9PSBNT0RfSERDUF9NT0RFX0RQX01TVCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdWludDhfdCBpc19oZG1pX2R2aV9zbF9oZGNwKHN0cnVjdCBtb2RfaGRjcCAqaGRj cCkKK3sKKwlyZXR1cm4gKGhkY3AtPmNvbm5lY3Rpb24ubGluay5tb2RlID09IE1PRF9IRENQX01P REVfREVGQVVMVCk7Cit9CisKKy8qIGhkY3Agc3RhdGUgaGVscGVycyAqLworc3RhdGljIGlubGlu ZSB1aW50OF90IGN1cnJlbnRfc3RhdGUoc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCXJldHVy biBoZGNwLT5zdGF0ZS5pZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9zdGF0ZV9pZChz dHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9vdXRwdXQgKm91dHB1dCwg dWludDhfdCBpZCkKK3sKKwltZW1zZXQoJmhkY3AtPnN0YXRlLCAwLCBzaXplb2YoaGRjcC0+c3Rh dGUpKTsKKwloZGNwLT5zdGF0ZS5pZCA9IGlkOworCS8qIGNhbGxiYWNrIHRpbWVyIHNob3VsZCBi ZSByZXNldCBwZXIgc3RhdGUgKi8KKwlvdXRwdXQtPmNhbGxiYWNrX3N0b3AgPSAxOworCW91dHB1 dC0+d2F0Y2hkb2dfdGltZXJfc3RvcCA9IDE7CisJSERDUF9ORVhUX1NUQVRFX1RSQUNFKGhkY3As IGlkLCBvdXRwdXQpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaXNfaW5faGRjcDFfc3Rh dGVzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwlyZXR1cm4gKGN1cnJlbnRfc3RhdGUoaGRj cCkgPiBIRENQMV9TVEFURV9TVEFSVCAmJgorCQkJY3VycmVudF9zdGF0ZShoZGNwKSA8PSBIRENQ MV9TVEFURV9FTkQpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaXNfaW5faGRjcDFfZHBf c3RhdGVzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwlyZXR1cm4gKGN1cnJlbnRfc3RhdGUo aGRjcCkgPiBIRENQMV9EUF9TVEFURV9TVEFSVCAmJgorCQkJY3VycmVudF9zdGF0ZShoZGNwKSA8 PSBIRENQMV9EUF9TVEFURV9FTkQpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaXNfaGRj cDEoc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCXJldHVybiAoaXNfaW5faGRjcDFfc3RhdGVz KGhkY3ApIHx8IGlzX2luX2hkY3AxX2RwX3N0YXRlcyhoZGNwKSk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdWludDhfdCBpc19pbl9jcF9ub3RfZGVzaXJlZF9zdGF0ZShzdHJ1Y3QgbW9kX2hkY3AgKmhk Y3ApCit7CisJcmV0dXJuIGN1cnJlbnRfc3RhdGUoaGRjcCkgPT0gSERDUF9DUF9OT1RfREVTSVJF RDsKK30KKworc3RhdGljIGlubGluZSB1aW50OF90IGlzX2luX2luaXRpYWxpemVkX3N0YXRlKHN0 cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwlyZXR1cm4gY3VycmVudF9zdGF0ZShoZGNwKSA9PSBI RENQX0lOSVRJQUxJWkVEOworfQorCisvKiB0cmFuc2l0aW9uIG9wZXJhdGlvbiBoZWxwZXJzICov CitzdGF0aWMgaW5saW5lIHZvaWQgaW5jcmVtZW50X3N0YXlfY291bnRlcihzdHJ1Y3QgbW9kX2hk Y3AgKmhkY3ApCit7CisJaGRjcC0+c3RhdGUuc3RheV9jb3VudCsrOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgZmFpbF9hbmRfcmVzdGFydF9pbl9tcyh1aW50MTZfdCB0aW1lLAorCQllbnVtIG1v ZF9oZGNwX3N0YXR1cyAqc3RhdHVzLAorCQlzdHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQp Cit7CisJb3V0cHV0LT5jYWxsYmFja19uZWVkZWQgPSAxOworCW91dHB1dC0+Y2FsbGJhY2tfZGVs YXkgPSB0aW1lOworCW91dHB1dC0+d2F0Y2hkb2dfdGltZXJfbmVlZGVkID0gMDsKKwlvdXRwdXQt PndhdGNoZG9nX3RpbWVyX2RlbGF5ID0gMDsKKwkqc3RhdHVzID0gTU9EX0hEQ1BfU1RBVFVTX1JF U0VUX05FRURFRDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNhbGxiYWNrX2luX21zKHVpbnQx Nl90IHRpbWUsIHN0cnVjdCBtb2RfaGRjcF9vdXRwdXQgKm91dHB1dCkKK3sKKwlvdXRwdXQtPmNh bGxiYWNrX25lZWRlZCA9IDE7CisJb3V0cHV0LT5jYWxsYmFja19kZWxheSA9IHRpbWU7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfd2F0Y2hkb2dfaW5fbXMoc3RydWN0IG1vZF9oZGNwICpo ZGNwLCB1aW50MTZfdCB0aW1lLAorCQlzdHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQpCit7 CisJb3V0cHV0LT53YXRjaGRvZ190aW1lcl9uZWVkZWQgPSAxOworCW91dHB1dC0+d2F0Y2hkb2df dGltZXJfZGVsYXkgPSB0aW1lOworfQorCisvKiBjb25uZWN0aW9uIHRvcG9sb2d5IGhlbHBlcnMg Ki8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBpc19kaXNwbGF5X2FjdGl2ZShzdHJ1Y3QgbW9kX2hk Y3BfZGlzcGxheSAqZGlzcGxheSkKK3sKKwlyZXR1cm4gZGlzcGxheS0+c3RhdGUgPj0gTU9EX0hE Q1BfRElTUExBWV9BQ1RJVkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBpc19kaXNwbGF5 X2FkZGVkKHN0cnVjdCBtb2RfaGRjcF9kaXNwbGF5ICpkaXNwbGF5KQoreworCXJldHVybiBkaXNw bGF5LT5zdGF0ZSA+PSBNT0RfSERDUF9ESVNQTEFZX0FDVElWRV9BTkRfQURERUQ7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdWludDhfdCBpc19kaXNwbGF5X2VuY3J5cHRpb25fZW5hYmxlZChzdHJ1Y3Qg bW9kX2hkY3BfZGlzcGxheSAqZGlzcGxheSkKK3sKKwlyZXR1cm4gZGlzcGxheS0+c3RhdGUgPj0g TU9EX0hEQ1BfRElTUExBWV9FTkNSWVBUSU9OX0VOQUJMRUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUg dWludDhfdCBnZXRfYWN0aXZlX2Rpc3BsYXlfY291bnQoc3RydWN0IG1vZF9oZGNwICpoZGNwKQor eworCXVpbnQ4X3QgYWRkZWRfY291bnQgPSAwOworCXVpbnQ4X3QgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBNQVhfTlVNX09GX0RJU1BMQVlTOyBpKyspCisJCWlmIChpc19kaXNwbGF5X2FjdGl2ZSgm aGRjcC0+Y29ubmVjdGlvbi5kaXNwbGF5c1tpXSkpCisJCQlhZGRlZF9jb3VudCsrOworCXJldHVy biBhZGRlZF9jb3VudDsKK30KKworc3RhdGljIGlubGluZSB1aW50OF90IGdldF9hZGRlZF9kaXNw bGF5X2NvdW50KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwl1aW50OF90IGFkZGVkX2NvdW50 ID0gMDsKKwl1aW50OF90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9PRl9ESVNQTEFZ UzsgaSsrKQorCQlpZiAoaXNfZGlzcGxheV9hZGRlZCgmaGRjcC0+Y29ubmVjdGlvbi5kaXNwbGF5 c1tpXSkpCisJCQlhZGRlZF9jb3VudCsrOworCXJldHVybiBhZGRlZF9jb3VudDsKK30KKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheSAqZ2V0X2ZpcnN0X2FkZGVkX2Rpc3Bs YXkoCisJCXN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwl1aW50OF90IGk7CisJc3RydWN0IG1v ZF9oZGNwX2Rpc3BsYXkgKmRpc3BsYXkgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9O VU1fT0ZfRElTUExBWVM7IGkrKykKKwkJaWYgKGlzX2Rpc3BsYXlfYWRkZWQoJmhkY3AtPmNvbm5l Y3Rpb24uZGlzcGxheXNbaV0pKSB7CisJCQlkaXNwbGF5ID0gJmhkY3AtPmNvbm5lY3Rpb24uZGlz cGxheXNbaV07CisJCQlicmVhazsKKwkJfQorCXJldHVybiBkaXNwbGF5OworfQorCitzdGF0aWMg aW5saW5lIHN0cnVjdCBtb2RfaGRjcF9kaXNwbGF5ICpnZXRfYWN0aXZlX2Rpc3BsYXlfYXRfaW5k ZXgoCisJCXN0cnVjdCBtb2RfaGRjcCAqaGRjcCwgdWludDhfdCBpbmRleCkKK3sKKwl1aW50OF90 IGk7CisJc3RydWN0IG1vZF9oZGNwX2Rpc3BsYXkgKmRpc3BsYXkgPSBOVUxMOworCisJZm9yIChp ID0gMDsgaSA8IE1BWF9OVU1fT0ZfRElTUExBWVM7IGkrKykKKwkJaWYgKGhkY3AtPmNvbm5lY3Rp b24uZGlzcGxheXNbaV0uaW5kZXggPT0gaW5kZXggJiYKKwkJCQlpc19kaXNwbGF5X2FjdGl2ZSgm aGRjcC0+Y29ubmVjdGlvbi5kaXNwbGF5c1tpXSkpIHsKKwkJCWRpc3BsYXkgPSAmaGRjcC0+Y29u bmVjdGlvbi5kaXNwbGF5c1tpXTsKKwkJCWJyZWFrOworCQl9CisJcmV0dXJuIGRpc3BsYXk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1vZF9oZGNwX2Rpc3BsYXkgKmdldF9lbXB0eV9kaXNw bGF5X2NvbnRhaW5lcigKKwkJc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCXVpbnQ4X3QgaTsK KwlzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheSAqZGlzcGxheSA9IE5VTEw7CisKKwlmb3IgKGkgPSAw OyBpIDwgTUFYX05VTV9PRl9ESVNQTEFZUzsgaSsrKQorCQlpZiAoIWlzX2Rpc3BsYXlfYWN0aXZl KCZoZGNwLT5jb25uZWN0aW9uLmRpc3BsYXlzW2ldKSkgeworCQkJZGlzcGxheSA9ICZoZGNwLT5j b25uZWN0aW9uLmRpc3BsYXlzW2ldOworCQkJYnJlYWs7CisJCX0KKwlyZXR1cm4gZGlzcGxheTsK K30KKworc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X3JldHJ5X2NvdW50cyhzdHJ1Y3QgbW9kX2hk Y3AgKmhkY3ApCit7CisJaGRjcC0+Y29ubmVjdGlvbi5oZGNwMV9yZXRyeV9jb3VudCA9IDA7Cit9 CisKKyNlbmRpZiAvKiBIRENQX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3AxX2V4ZWN1dGlvbi5jIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L21vZHVsZXMvaGRjcC9oZGNwMV9leGVjdXRpb24uYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjllNzMwMmVhYzI5OQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcDFfZXhlY3V0 aW9uLmMKQEAgLTAsMCArMSw1MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBN aWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisg KiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQU1ECisg KgorICovCisKKyNpbmNsdWRlICJoZGNwLmgiCisKK3N0YXRpYyBpbmxpbmUgZW51bSBtb2RfaGRj cF9zdGF0dXMgdmFsaWRhdGVfYmtzdihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJdWludDY0 X3QgbiA9ICoodWludDY0X3QgKiloZGNwLT5hdXRoLm1zZy5oZGNwMS5ia3N2OworCXVpbnQ4X3Qg Y291bnQgPSAwOworCisJd2hpbGUgKG4pIHsKKwkJY291bnQrKzsKKwkJbiAmPSAobiAtIDEpOwor CX0KKwlyZXR1cm4gKGNvdW50ID09IDIwKSA/IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTIDoKKwkJ CU1PRF9IRENQX1NUQVRVU19IRENQMV9JTlZBTElEX0JLU1Y7Cit9CisKK3N0YXRpYyBpbmxpbmUg ZW51bSBtb2RfaGRjcF9zdGF0dXMgY2hlY2tfa3N2X3JlYWR5KHN0cnVjdCBtb2RfaGRjcCAqaGRj cCkKK3sKKwlpZiAoaXNfZHBfaGRjcChoZGNwKSkKKwkJcmV0dXJuIChoZGNwLT5hdXRoLm1zZy5o ZGNwMS5ic3RhdHVzICYgQlNUQVRVU19SRUFEWV9NQVNLX0RQKSA/CisJCQkJTU9EX0hEQ1BfU1RB VFVTX1NVQ0NFU1MgOgorCQkJCU1PRF9IRENQX1NUQVRVU19IRENQMV9LU1ZfTElTVF9OT1RfUkVB RFk7CisJcmV0dXJuIChoZGNwLT5hdXRoLm1zZy5oZGNwMS5iY2FwcyAmIEJDQVBTX1JFQURZX01B U0spID8KKwkJCU1PRF9IRENQX1NUQVRVU19TVUNDRVNTIDoKKwkJCU1PRF9IRENQX1NUQVRVU19I RENQMV9LU1ZfTElTVF9OT1RfUkVBRFk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBtb2RfaGRj cF9zdGF0dXMgY2hlY2tfaGRjcF9jYXBhYmxlX2RwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sK KwlyZXR1cm4gKGhkY3AtPmF1dGgubXNnLmhkY3AxLmJjYXBzICYgQkNBUFNfSERDUF9DQVBBQkxF X01BU0tfRFApID8KKwkJCU1PRF9IRENQX1NUQVRVU19TVUNDRVNTIDoKKwkJCU1PRF9IRENQX1NU QVRVU19IRENQMV9OT1RfQ0FQQUJMRTsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG1vZF9oZGNw X3N0YXR1cyBjaGVja19yMHBfYXZhaWxhYmxlX2RwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sK KwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0dXM7CisJaWYgKGlzX2RwX2hkY3AoaGRjcCkpIHsK KwkJc3RhdHVzID0gKGhkY3AtPmF1dGgubXNnLmhkY3AxLmJzdGF0dXMgJgorCQkJCUJTVEFUVVNf UjBfUF9BVkFJTEFCTEVfTUFTS19EUCkgPworCQkJTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MgOgor CQkJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX1IwX1BSSU1FX1BFTkRJTkc7CisJfSBlbHNlIHsKKwkJ c3RhdHVzID0gTU9EX0hEQ1BfU1RBVFVTX0lOVkFMSURfT1BFUkFUSU9OOworCX0KKwlyZXR1cm4g c3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbW9kX2hkY3Bfc3RhdHVzIGNoZWNrX2xp bmtfaW50ZWdyaXR5X2RwKAorCQlzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJcmV0dXJuICho ZGNwLT5hdXRoLm1zZy5oZGNwMS5ic3RhdHVzICYKKwkJCUJTVEFUVVNfTElOS19JTlRFR1JJVFlf RkFJTFVSRV9NQVNLX0RQKSA/CisJCQlNT0RfSERDUF9TVEFUVVNfSERDUDFfTElOS19JTlRFR1JJ VFlfRkFJTFVSRSA6CisJCQlNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGlu bGluZSBlbnVtIG1vZF9oZGNwX3N0YXR1cyBjaGVja19ub19yZWF1dGhlbnRpY2F0aW9uX3JlcXVl c3RfZHAoCisJCXN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwlyZXR1cm4gKGhkY3AtPmF1dGgu bXNnLmhkY3AxLmJzdGF0dXMgJiBCU1RBVFVTX1JFQVVUSF9SRVFVRVNUX01BU0tfRFApID8KKwkJ CU1PRF9IRENQX1NUQVRVU19IRENQMV9SRUFVVEhfUkVRVUVTVF9JU1NVRUQgOgorCQkJTU9EX0hE Q1BfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBtb2RfaGRjcF9zdGF0 dXMgY2hlY2tfbm9fbWF4X2Nhc2NhZGUoc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCWVudW0g bW9kX2hkY3Bfc3RhdHVzIHN0YXR1czsKKworCWlmIChpc19kcF9oZGNwKGhkY3ApKQorCQlzdGF0 dXMgPSAoaGRjcC0+YXV0aC5tc2cuaGRjcDEuYmluZm9fZHAgJgorCQkJCUJJTkZPX01BWF9DQVND QURFX0VYQ0VFREVEX01BU0tfRFApID8KKwkJCU1PRF9IRENQX1NUQVRVU19IRENQMV9NQVhfQ0FT Q0FERV9FWENFRURFRF9GQUlMVVJFIDoKKwkJCU1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCWVs c2UKKwkJc3RhdHVzID0gKGhkY3AtPmF1dGgubXNnLmhkY3AxLmJzdGF0dXMgJgorCQkJCUJTVEFU VVNfTUFYX0NBU0NBREVfRVhDRUVERURfTUFTSykgPworCQkJCU1PRF9IRENQX1NUQVRVU19IRENQ MV9NQVhfQ0FTQ0FERV9FWENFRURFRF9GQUlMVVJFIDoKKwkJCQlNT0RfSERDUF9TVEFUVVNfU1VD Q0VTUzsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbW9kX2hkY3Bf c3RhdHVzIGNoZWNrX25vX21heF9kZXZzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwllbnVt IG1vZF9oZGNwX3N0YXR1cyBzdGF0dXM7CisKKwlpZiAoaXNfZHBfaGRjcChoZGNwKSkKKwkJc3Rh dHVzID0gKGhkY3AtPmF1dGgubXNnLmhkY3AxLmJpbmZvX2RwICYKKwkJCQlCSU5GT19NQVhfREVW U19FWENFRURFRF9NQVNLX0RQKSA/CisJCQkJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX01BWF9ERVZT X0VYQ0VFREVEX0ZBSUxVUkUgOgorCQkJCU1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCWVsc2UK KwkJc3RhdHVzID0gKGhkY3AtPmF1dGgubXNnLmhkY3AxLmJzdGF0dXMgJgorCQkJCUJTVEFUVVNf TUFYX0RFVlNfRVhDRUVERURfTUFTSykgPworCQkJCU1PRF9IRENQX1NUQVRVU19IRENQMV9NQVhf REVWU19FWENFRURFRF9GQUlMVVJFIDoKKwkJCQlNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKwly ZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgZ2V0X2RldmljZV9jb3Vu dChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJcmV0dXJuIGlzX2RwX2hkY3AoaGRjcCkgPwor CQkJKGhkY3AtPmF1dGgubXNnLmhkY3AxLmJpbmZvX2RwICYgQklORk9fREVWSUNFX0NPVU5UX01B U0tfRFApIDoKKwkJCShoZGNwLT5hdXRoLm1zZy5oZGNwMS5ic3RhdHVzICYgQlNUQVRVU19ERVZJ Q0VfQ09VTlRfTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBtb2RfaGRjcF9zdGF0dXMg Y2hlY2tfZGV2aWNlX2NvdW50KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwkvKiBkZXZpY2Ug Y291bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdHJhY2tlZCBoZGNwIGRpc3Bs YXlzICovCisJcmV0dXJuIChnZXRfZGV2aWNlX2NvdW50KGhkY3ApIDwgZ2V0X2FkZGVkX2Rpc3Bs YXlfY291bnQoaGRjcCkpID8KKwkJCU1PRF9IRENQX1NUQVRVU19IRENQMV9ERVZJQ0VfQ09VTlRf TUlTTUFUQ0hfRkFJTFVSRSA6CisJCQlNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3Rh dGljIGVudW0gbW9kX2hkY3Bfc3RhdHVzIHdhaXRfZm9yX2FjdGl2ZV9yeChzdHJ1Y3QgbW9kX2hk Y3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJ CXN0cnVjdCBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCkKK3sKKwllbnVt IG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKworCWlm IChldmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQX0VWRU5UX0NBTExCQUNLKSB7CisJCWV2ZW50 X2N0eC0+dW5leHBlY3RlZF9ldmVudCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbW9k X2hkY3BfZXhlY3V0ZV9hbmRfc2V0KG1vZF9oZGNwX3JlYWRfYmtzdiwKKwkJCSZpbnB1dC0+Ymtz dl9yZWFkLCAmc3RhdHVzLAorCQkJaGRjcCwgImJrc3ZfcmVhZCIpKQorCQlnb3RvIG91dDsKKwlp ZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChtb2RfaGRjcF9yZWFkX2JjYXBzLAorCQkJJmlu cHV0LT5iY2Fwc19yZWFkLCAmc3RhdHVzLAorCQkJaGRjcCwgImJjYXBzX3JlYWQiKSkKKwkJZ290 byBvdXQ7CitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGVudW0gbW9kX2hkY3Bf c3RhdHVzIGV4Y2hhbmdlX2tzdnMoc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQlzdHJ1Y3QgbW9k X2hkY3BfZXZlbnRfY29udGV4dCAqZXZlbnRfY3R4LAorCQlzdHJ1Y3QgbW9kX2hkY3BfdHJhbnNp dGlvbl9pbnB1dF9oZGNwMSAqaW5wdXQpCit7CisJZW51bSBtb2RfaGRjcF9zdGF0dXMgc3RhdHVz ID0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1M7CisKKwlpZiAoZXZlbnRfY3R4LT5ldmVudCAhPSBN T0RfSERDUF9FVkVOVF9DQUxMQkFDSykgeworCQlldmVudF9jdHgtPnVuZXhwZWN0ZWRfZXZlbnQg PSAxOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldCht b2RfaGRjcF9hZGRfZGlzcGxheV90b3BvbG9neSwKKwkJCSZpbnB1dC0+YWRkX3RvcG9sb2d5LCAm c3RhdHVzLAorCQkJaGRjcCwgImFkZF90b3BvbG9neSIpKQorCQlnb3RvIG91dDsKKwlpZiAoIW1v ZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChtb2RfaGRjcF9oZGNwMV9jcmVhdGVfc2Vzc2lvbiwKKwkJ CSZpbnB1dC0+Y3JlYXRlX3Nlc3Npb24sICZzdGF0dXMsCisJCQloZGNwLCAiY3JlYXRlX3Nlc3Np b24iKSkKKwkJZ290byBvdXQ7CisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQobW9kX2hk Y3Bfd3JpdGVfYW4sCisJCQkmaW5wdXQtPmFuX3dyaXRlLCAmc3RhdHVzLAorCQkJaGRjcCwgImFu X3dyaXRlIikpCisJCWdvdG8gb3V0OworCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0KG1v ZF9oZGNwX3dyaXRlX2Frc3YsCisJCQkmaW5wdXQtPmFrc3Zfd3JpdGUsICZzdGF0dXMsCisJCQlo ZGNwLCAiYWtzdl93cml0ZSIpKQorCQlnb3RvIG91dDsKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVf YW5kX3NldChtb2RfaGRjcF9yZWFkX2Jrc3YsCisJCQkmaW5wdXQtPmJrc3ZfcmVhZCwgJnN0YXR1 cywKKwkJCWhkY3AsICJia3N2X3JlYWQiKSkKKwkJZ290byBvdXQ7CisJaWYgKCFtb2RfaGRjcF9l eGVjdXRlX2FuZF9zZXQodmFsaWRhdGVfYmtzdiwKKwkJCSZpbnB1dC0+Ymtzdl92YWxpZGF0aW9u LCAmc3RhdHVzLAorCQkJaGRjcCwgImJrc3ZfdmFsaWRhdGlvbiIpKQorCQlnb3RvIG91dDsKKwlp ZiAoaGRjcC0+YXV0aC5tc2cuaGRjcDEuYWluZm8pIHsKKwkJaWYgKCFtb2RfaGRjcF9leGVjdXRl X2FuZF9zZXQobW9kX2hkY3Bfd3JpdGVfYWluZm8sCisJCQkJJmlucHV0LT5haW5mb193cml0ZSwg JnN0YXR1cywKKwkJCQloZGNwLCAiYWluZm9fd3JpdGUiKSkKKwkJCWdvdG8gb3V0OworCX0KK291 dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgZW51bSBtb2RfaGRjcF9zdGF0dXMgY29t cHV0YXRpb25zX3ZhbGlkYXRlX3J4X3Rlc3RfZm9yX3JlcGVhdGVyKAorCQlzdHJ1Y3QgbW9kX2hk Y3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJ CXN0cnVjdCBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCkKK3sKKwllbnVt IG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKworCWlm IChldmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQX0VWRU5UX0NBTExCQUNLKSB7CisJCWV2ZW50 X2N0eC0+dW5leHBlY3RlZF9ldmVudCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbW9k X2hkY3BfZXhlY3V0ZV9hbmRfc2V0KG1vZF9oZGNwX3JlYWRfcjBwLAorCQkJJmlucHV0LT5yMHBf cmVhZCwgJnN0YXR1cywKKwkJCWhkY3AsICJyMHBfcmVhZCIpKQorCQlnb3RvIG91dDsKKwlpZiAo IW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChtb2RfaGRjcF9oZGNwMV92YWxpZGF0ZV9yeCwKKwkJ CSZpbnB1dC0+cnhfdmFsaWRhdGlvbiwgJnN0YXR1cywKKwkJCWhkY3AsICJyeF92YWxpZGF0aW9u IikpCisJCWdvdG8gb3V0OworCWlmIChoZGNwLT5jb25uZWN0aW9uLmlzX3JlcGVhdGVyKSB7CisJ CWlmICghaGRjcC0+Y29ubmVjdGlvbi5saW5rLmFkanVzdC5oZGNwMS5wb3N0cG9uZV9lbmNyeXB0 aW9uKQorCQkJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQoCisJCQkJCW1vZF9oZGNwX2hk Y3AxX2VuYWJsZV9lbmNyeXB0aW9uLAorCQkJCQkmaW5wdXQtPmVuY3J5cHRpb24sICZzdGF0dXMs CisJCQkJCWhkY3AsICJlbmNyeXB0aW9uIikpCisJCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJ aWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQobW9kX2hkY3BfaGRjcDFfZW5hYmxlX2VuY3J5 cHRpb24sCisJCQkJJmlucHV0LT5lbmNyeXB0aW9uLCAmc3RhdHVzLAorCQkJCWhkY3AsICJlbmNy eXB0aW9uIikpCisJCQlnb3RvIG91dDsKKwkJaWYgKGlzX2RwX21zdF9oZGNwKGhkY3ApKQorCQkJ aWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQoCisJCQkJCW1vZF9oZGNwX2hkY3AxX2VuYWJs ZV9kcF9zdHJlYW1fZW5jcnlwdGlvbiwKKwkJCQkJJmlucHV0LT5zdHJlYW1fZW5jcnlwdGlvbl9k cCwgJnN0YXR1cywKKwkJCQkJaGRjcCwgInN0cmVhbV9lbmNyeXB0aW9uX2RwIikpCisJCQkJZ290 byBvdXQ7CisJfQorb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBlbnVtIG1vZF9o ZGNwX3N0YXR1cyBhdXRoZW50aWNhdGVkKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJc3RydWN0 IG1vZF9oZGNwX2V2ZW50X2NvbnRleHQgKmV2ZW50X2N0eCwKKwkJc3RydWN0IG1vZF9oZGNwX3Ry YW5zaXRpb25faW5wdXRfaGRjcDEgKmlucHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0 YXR1cyA9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCisJaWYgKGV2ZW50X2N0eC0+ZXZlbnQg IT0gTU9EX0hEQ1BfRVZFTlRfQ0FMTEJBQ0spIHsKKwkJZXZlbnRfY3R4LT51bmV4cGVjdGVkX2V2 ZW50ID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9z ZXQobW9kX2hkY3BfaGRjcDFfbGlua19tYWludGVuYW5jZSwKKwkJCSZpbnB1dC0+bGlua19tYWlu dGVuYW5jZSwgJnN0YXR1cywKKwkJCWhkY3AsICJsaW5rX21haW50ZW5hbmNlIikpCisJCWdvdG8g b3V0Oworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBlbnVtIG1vZF9oZGNwX3N0 YXR1cyB3YWl0X2Zvcl9yZWFkeShzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBtb2Rf aGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJCXN0cnVjdCBtb2RfaGRjcF90cmFuc2l0 aW9uX2lucHV0X2hkY3AxICppbnB1dCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMg PSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKworCWlmIChldmVudF9jdHgtPmV2ZW50ICE9IE1P RF9IRENQX0VWRU5UX0NBTExCQUNLICYmCisJCQlldmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQ X0VWRU5UX0NQSVJRICYmCisJCQlldmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQX0VWRU5UX1dB VENIRE9HX1RJTUVPVVQpIHsKKwkJZXZlbnRfY3R4LT51bmV4cGVjdGVkX2V2ZW50ID0gMTsKKwkJ Z290byBvdXQ7CisJfQorCisJaWYgKGlzX2RwX2hkY3AoaGRjcCkpIHsKKwkJaWYgKCFtb2RfaGRj cF9leGVjdXRlX2FuZF9zZXQobW9kX2hkY3BfcmVhZF9ic3RhdHVzLAorCQkJCSZpbnB1dC0+YnN0 YXR1c19yZWFkLCAmc3RhdHVzLAorCQkJCWhkY3AsICJic3RhdHVzX3JlYWQiKSkKKwkJCWdvdG8g b3V0OworCQlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChjaGVja19saW5rX2ludGVncml0 eV9kcCwKKwkJCQkmaW5wdXQtPmxpbmtfaW50ZWdpcnlfY2hlY2ssICZzdGF0dXMsCisJCQkJaGRj cCwgImxpbmtfaW50ZWdpcnlfY2hlY2siKSkKKwkJCWdvdG8gb3V0OworCQlpZiAoIW1vZF9oZGNw X2V4ZWN1dGVfYW5kX3NldChjaGVja19ub19yZWF1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZHAsCisJ CQkJJmlucHV0LT5yZWF1dGhfcmVxdWVzdF9jaGVjaywgJnN0YXR1cywKKwkJCQloZGNwLCAicmVh dXRoX3JlcXVlc3RfY2hlY2siKSkKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCWlmICghbW9k X2hkY3BfZXhlY3V0ZV9hbmRfc2V0KG1vZF9oZGNwX3JlYWRfYmNhcHMsCisJCQkJJmlucHV0LT5i Y2Fwc19yZWFkLCAmc3RhdHVzLAorCQkJCWhkY3AsICJiY2Fwc19yZWFkIikpCisJCQlnb3RvIG91 dDsKKwl9CisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQoY2hlY2tfa3N2X3JlYWR5LAor CQkJJmlucHV0LT5yZWFkeV9jaGVjaywgJnN0YXR1cywKKwkJCWhkY3AsICJyZWFkeV9jaGVjayIp KQorCQlnb3RvIG91dDsKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgZW51bSBt b2RfaGRjcF9zdGF0dXMgcmVhZF9rc3ZfbGlzdChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0 cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJCXN0cnVjdCBtb2RfaGRj cF90cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1 cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKwl1aW50OF90IGRldmljZV9jb3Vu dDsKKworCWlmIChldmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQX0VWRU5UX0NBTExCQUNLKSB7 CisJCWV2ZW50X2N0eC0+dW5leHBlY3RlZF9ldmVudCA9IDE7CisJCWdvdG8gb3V0OworCX0KKwor CWlmIChpc19kcF9oZGNwKGhkY3ApKSB7CisJCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0 KG1vZF9oZGNwX3JlYWRfYmluZm8sCisJCQkJJmlucHV0LT5iaW5mb19yZWFkX2RwLCAmc3RhdHVz LAorCQkJCWhkY3AsICJiaW5mb19yZWFkX2RwIikpCisJCQlnb3RvIG91dDsKKwl9IGVsc2Ugewor CQlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChtb2RfaGRjcF9yZWFkX2JzdGF0dXMsCisJ CQkJJmlucHV0LT5ic3RhdHVzX3JlYWQsICZzdGF0dXMsCisJCQkJaGRjcCwgImJzdGF0dXNfcmVh ZCIpKQorCQkJZ290byBvdXQ7CisJfQorCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0KGNo ZWNrX25vX21heF9jYXNjYWRlLAorCQkJJmlucHV0LT5tYXhfY2FzY2FkZV9jaGVjaywgJnN0YXR1 cywKKwkJCWhkY3AsICJtYXhfY2FzY2FkZV9jaGVjayIpKQorCQlnb3RvIG91dDsKKwlpZiAoIW1v ZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChjaGVja19ub19tYXhfZGV2cywKKwkJCSZpbnB1dC0+bWF4 X2RldnNfY2hlY2ssICZzdGF0dXMsCisJCQloZGNwLCAibWF4X2RldnNfY2hlY2siKSkKKwkJZ290 byBvdXQ7CisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQoY2hlY2tfZGV2aWNlX2NvdW50 LAorCQkJJmlucHV0LT5kZXZpY2VfY291bnRfY2hlY2ssICZzdGF0dXMsCisJCQloZGNwLCAiZGV2 aWNlX2NvdW50X2NoZWNrIikpCisJCWdvdG8gb3V0OworCWRldmljZV9jb3VudCA9IGdldF9kZXZp Y2VfY291bnQoaGRjcCk7CisJaGRjcC0+YXV0aC5tc2cuaGRjcDEua3N2bGlzdF9zaXplID0gZGV2 aWNlX2NvdW50KjU7CisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQobW9kX2hkY3BfcmVh ZF9rc3ZsaXN0LAorCQkJJmlucHV0LT5rc3ZsaXN0X3JlYWQsICZzdGF0dXMsCisJCQloZGNwLCAi a3N2bGlzdF9yZWFkIikpCisJCWdvdG8gb3V0OworCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRf c2V0KG1vZF9oZGNwX3JlYWRfdnAsCisJCQkmaW5wdXQtPnZwX3JlYWQsICZzdGF0dXMsCisJCQlo ZGNwLCAidnBfcmVhZCIpKQorCQlnb3RvIG91dDsKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5k X3NldChtb2RfaGRjcF9oZGNwMV92YWxpZGF0ZV9rc3ZsaXN0X3ZwLAorCQkJJmlucHV0LT5rc3Zs aXN0X3ZwX3ZhbGlkYXRpb24sICZzdGF0dXMsCisJCQloZGNwLCAia3N2bGlzdF92cF92YWxpZGF0 aW9uIikpCisJCWdvdG8gb3V0OworCWlmIChpbnB1dC0+ZW5jcnlwdGlvbiAhPSBQQVNTKQorCQlp ZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChtb2RfaGRjcF9oZGNwMV9lbmFibGVfZW5jcnlw dGlvbiwKKwkJCQkmaW5wdXQtPmVuY3J5cHRpb24sICZzdGF0dXMsCisJCQkJaGRjcCwgImVuY3J5 cHRpb24iKSkKKwkJCWdvdG8gb3V0OworCWlmIChpc19kcF9tc3RfaGRjcChoZGNwKSkKKwkJaWYg KCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQoCisJCQkJbW9kX2hkY3BfaGRjcDFfZW5hYmxlX2Rw X3N0cmVhbV9lbmNyeXB0aW9uLAorCQkJCSZpbnB1dC0+c3RyZWFtX2VuY3J5cHRpb25fZHAsICZz dGF0dXMsCisJCQkJaGRjcCwgInN0cmVhbV9lbmNyeXB0aW9uX2RwIikpCisJCQlnb3RvIG91dDsK K291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgZW51bSBtb2RfaGRjcF9zdGF0dXMg ZGV0ZXJtaW5lX3J4X2hkY3BfY2FwYWJsZV9kcChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0 cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJCXN0cnVjdCBtb2RfaGRj cF90cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1 cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKworCWlmIChldmVudF9jdHgtPmV2 ZW50ICE9IE1PRF9IRENQX0VWRU5UX0NBTExCQUNLKSB7CisJCWV2ZW50X2N0eC0+dW5leHBlY3Rl ZF9ldmVudCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9h bmRfc2V0KG1vZF9oZGNwX3JlYWRfYmNhcHMsCisJCQkmaW5wdXQtPmJjYXBzX3JlYWQsICZzdGF0 dXMsCisJCQloZGNwLCAiYmNhcHNfcmVhZCIpKQorCQlnb3RvIG91dDsKKwlpZiAoIW1vZF9oZGNw X2V4ZWN1dGVfYW5kX3NldChjaGVja19oZGNwX2NhcGFibGVfZHAsCisJCQkmaW5wdXQtPmhkY3Bf Y2FwYWJsZV9kcCwgJnN0YXR1cywKKwkJCWhkY3AsICJoZGNwX2NhcGFibGVfZHAiKSkKKwkJZ290 byBvdXQ7CitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGVudW0gbW9kX2hkY3Bf c3RhdHVzIHdhaXRfZm9yX3IwX3ByaW1lX2RwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJc3Ry dWN0IG1vZF9oZGNwX2V2ZW50X2NvbnRleHQgKmV2ZW50X2N0eCwKKwkJc3RydWN0IG1vZF9oZGNw X3RyYW5zaXRpb25faW5wdXRfaGRjcDEgKmlucHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVz IHN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCisJaWYgKGV2ZW50X2N0eC0+ZXZl bnQgIT0gTU9EX0hEQ1BfRVZFTlRfQ1BJUlEgJiYKKwkJCWV2ZW50X2N0eC0+ZXZlbnQgIT0gTU9E X0hEQ1BfRVZFTlRfV0FUQ0hET0dfVElNRU9VVCkgeworCQlldmVudF9jdHgtPnVuZXhwZWN0ZWRf ZXZlbnQgPSAxOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5k X3NldChtb2RfaGRjcF9yZWFkX2JzdGF0dXMsCisJCQkmaW5wdXQtPmJzdGF0dXNfcmVhZCwgJnN0 YXR1cywKKwkJCWhkY3AsICJic3RhdHVzX3JlYWQiKSkKKwkJZ290byBvdXQ7CisJaWYgKCFtb2Rf aGRjcF9leGVjdXRlX2FuZF9zZXQoY2hlY2tfcjBwX2F2YWlsYWJsZV9kcCwKKwkJCSZpbnB1dC0+ cjBwX2F2YWlsYWJsZV9kcCwgJnN0YXR1cywKKwkJCWhkY3AsICJyMHBfYXZhaWxhYmxlX2RwIikp CisJCWdvdG8gb3V0Oworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBlbnVtIG1v ZF9oZGNwX3N0YXR1cyBhdXRoZW50aWNhdGVkX2RwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJ c3RydWN0IG1vZF9oZGNwX2V2ZW50X2NvbnRleHQgKmV2ZW50X2N0eCwKKwkJc3RydWN0IG1vZF9o ZGNwX3RyYW5zaXRpb25faW5wdXRfaGRjcDEgKmlucHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3Rh dHVzIHN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCisJaWYgKGV2ZW50X2N0eC0+ ZXZlbnQgIT0gTU9EX0hEQ1BfRVZFTlRfQ1BJUlEpIHsKKwkJZXZlbnRfY3R4LT51bmV4cGVjdGVk X2V2ZW50ID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2Fu ZF9zZXQobW9kX2hkY3BfcmVhZF9ic3RhdHVzLAorCQkJJmlucHV0LT5ic3RhdHVzX3JlYWQsICZz dGF0dXMsCisJCQloZGNwLCAiYnN0YXR1c19yZWFkIikpCisJCWdvdG8gb3V0OworCWlmICghbW9k X2hkY3BfZXhlY3V0ZV9hbmRfc2V0KGNoZWNrX2xpbmtfaW50ZWdyaXR5X2RwLAorCQkJJmlucHV0 LT5saW5rX2ludGVnaXJ5X2NoZWNrLCAmc3RhdHVzLAorCQkJaGRjcCwgImxpbmtfaW50ZWdpcnlf Y2hlY2siKSkKKwkJZ290byBvdXQ7CisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQoY2hl Y2tfbm9fcmVhdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2RwLAorCQkJJmlucHV0LT5yZWF1dGhfcmVx dWVzdF9jaGVjaywgJnN0YXR1cywKKwkJCWhkY3AsICJyZWF1dGhfcmVxdWVzdF9jaGVjayIpKQor CQlnb3RvIG91dDsKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCit1aW50OF90IG1vZF9oZGNw X2V4ZWN1dGVfYW5kX3NldCgKKwkJbW9kX2hkY3BfYWN0aW9uIGZ1bmMsIHVpbnQ4X3QgKmZsYWcs CisJCWVudW0gbW9kX2hkY3Bfc3RhdHVzICpzdGF0dXMsIHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwg Y2hhciAqc3RyKQoreworCSpzdGF0dXMgPSBmdW5jKGhkY3ApOworCWlmICgqc3RhdHVzID09IE1P RF9IRENQX1NUQVRVU19TVUNDRVNTICYmICpmbGFnICE9IFBBU1MpIHsKKwkJSERDUF9JTlBVVF9Q QVNTX1RSQUNFKGhkY3AsIHN0cik7CisJCSpmbGFnID0gUEFTUzsKKwl9IGVsc2UgaWYgKCpzdGF0 dXMgIT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MgJiYgKmZsYWcgIT0gRkFJTCkgeworCQlIRENQ X0lOUFVUX0ZBSUxfVFJBQ0UoaGRjcCwgc3RyKTsKKwkJKmZsYWcgPSBGQUlMOworCX0KKwlyZXR1 cm4gKCpzdGF0dXMgPT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MpOworfQorCitlbnVtIG1vZF9o ZGNwX3N0YXR1cyBtb2RfaGRjcF9oZGNwMV9leGVjdXRpb24oc3RydWN0IG1vZF9oZGNwICpoZGNw LAorCQlzdHJ1Y3QgbW9kX2hkY3BfZXZlbnRfY29udGV4dCAqZXZlbnRfY3R4LAorCQlzdHJ1Y3Qg bW9kX2hkY3BfdHJhbnNpdGlvbl9pbnB1dF9oZGNwMSAqaW5wdXQpCit7CisJZW51bSBtb2RfaGRj cF9zdGF0dXMgc3RhdHVzID0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1M7CisKKwlzd2l0Y2ggKGN1 cnJlbnRfc3RhdGUoaGRjcCkpIHsKKwljYXNlIEgxX0EwX1dBSVRfRk9SX0FDVElWRV9SWDoKKwkJ c3RhdHVzID0gd2FpdF9mb3JfYWN0aXZlX3J4KGhkY3AsIGV2ZW50X2N0eCwgaW5wdXQpOworCQli cmVhazsKKwljYXNlIEgxX0ExX0VYQ0hBTkdFX0tTVlM6CisJCXN0YXR1cyA9IGV4Y2hhbmdlX2tz dnMoaGRjcCwgZXZlbnRfY3R4LCBpbnB1dCk7CisJCWJyZWFrOworCWNhc2UgSDFfQTJfQ09NUFVU QVRJT05TX0EzX1ZBTElEQVRFX1JYX0E2X1RFU1RfRk9SX1JFUEVBVEVSOgorCQlzdGF0dXMgPSBj b21wdXRhdGlvbnNfdmFsaWRhdGVfcnhfdGVzdF9mb3JfcmVwZWF0ZXIoaGRjcCwKKwkJCQlldmVu dF9jdHgsIGlucHV0KTsKKwkJYnJlYWs7CisJY2FzZSBIMV9BNDVfQVVUSEVOSUNBVEVEOgorCQlz dGF0dXMgPSBhdXRoZW50aWNhdGVkKGhkY3AsIGV2ZW50X2N0eCwgaW5wdXQpOworCQlicmVhazsK KwljYXNlIEgxX0E4X1dBSVRfRk9SX1JFQURZOgorCQlzdGF0dXMgPSB3YWl0X2Zvcl9yZWFkeSho ZGNwLCBldmVudF9jdHgsIGlucHV0KTsKKwkJYnJlYWs7CisJY2FzZSBIMV9BOV9SRUFEX0tTVl9M SVNUOgorCQlzdGF0dXMgPSByZWFkX2tzdl9saXN0KGhkY3AsIGV2ZW50X2N0eCwgaW5wdXQpOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfSU5WQUxJRF9T VEFURTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworZXh0ZXJuIGVudW0g bW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX2hkY3AxX2RwX2V4ZWN1dGlvbihzdHJ1Y3QgbW9kX2hk Y3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJ CXN0cnVjdCBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCkKK3sKKwllbnVt IG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKworCXN3 aXRjaCAoY3VycmVudF9zdGF0ZShoZGNwKSkgeworCWNhc2UgRDFfQTBfREVURVJNSU5FX1JYX0hE Q1BfQ0FQQUJMRToKKwkJc3RhdHVzID0gZGV0ZXJtaW5lX3J4X2hkY3BfY2FwYWJsZV9kcChoZGNw LCBldmVudF9jdHgsIGlucHV0KTsKKwkJYnJlYWs7CisJY2FzZSBEMV9BMV9FWENIQU5HRV9LU1ZT OgorCQlzdGF0dXMgPSBleGNoYW5nZV9rc3ZzKGhkY3AsIGV2ZW50X2N0eCwgaW5wdXQpOworCQli cmVhazsKKwljYXNlIEQxX0EyM19XQUlUX0ZPUl9SMF9QUklNRToKKwkJc3RhdHVzID0gd2FpdF9m b3JfcjBfcHJpbWVfZHAoaGRjcCwgZXZlbnRfY3R4LCBpbnB1dCk7CisJCWJyZWFrOworCWNhc2Ug RDFfQTJfQ09NUFVUQVRJT05TX0EzX1ZBTElEQVRFX1JYX0E1X1RFU1RfRk9SX1JFUEVBVEVSOgor CQlzdGF0dXMgPSBjb21wdXRhdGlvbnNfdmFsaWRhdGVfcnhfdGVzdF9mb3JfcmVwZWF0ZXIoCisJ CQkJaGRjcCwgZXZlbnRfY3R4LCBpbnB1dCk7CisJCWJyZWFrOworCWNhc2UgRDFfQTRfQVVUSEVO SUNBVEVEOgorCQlzdGF0dXMgPSBhdXRoZW50aWNhdGVkX2RwKGhkY3AsIGV2ZW50X2N0eCwgaW5w dXQpOworCQlicmVhazsKKwljYXNlIEQxX0E2X1dBSVRfRk9SX1JFQURZOgorCQlzdGF0dXMgPSB3 YWl0X2Zvcl9yZWFkeShoZGNwLCBldmVudF9jdHgsIGlucHV0KTsKKwkJYnJlYWs7CisJY2FzZSBE MV9BN19SRUFEX0tTVl9MSVNUOgorCQlzdGF0dXMgPSByZWFkX2tzdl9saXN0KGhkY3AsIGV2ZW50 X2N0eCwgaW5wdXQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSBNT0RfSERDUF9T VEFUVVNfSU5WQUxJRF9TVEFURTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRj cDFfdHJhbnNpdGlvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaGRj cC9oZGNwMV90cmFuc2l0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi4xZDE4NzgwOWI3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3AxX3RyYW5zaXRpb24uYwpAQCAtMCwwICsxLDMwNyBA QAorLyoKKyAqIENvcHlyaWdodCAyMDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z OgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9M REVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgor ICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2luY2x1ZGUgImhk Y3AuaCIKKworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfaGRjcDFfdHJhbnNpdGlvbihz dHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpl dmVudF9jdHgsCisJCXN0cnVjdCBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1 dCwKKwkJc3RydWN0IG1vZF9oZGNwX291dHB1dCAqb3V0cHV0KQoreworCWVudW0gbW9kX2hkY3Bf c3RhdHVzIHN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCXN0cnVjdCBtb2RfaGRj cF9jb25uZWN0aW9uICpjb25uID0gJmhkY3AtPmNvbm5lY3Rpb247CisJc3RydWN0IG1vZF9oZGNw X2xpbmtfYWRqdXN0bWVudCAqYWRqdXN0ID0gJmhkY3AtPmNvbm5lY3Rpb24ubGluay5hZGp1c3Q7 CisKKwlzd2l0Y2ggKGN1cnJlbnRfc3RhdGUoaGRjcCkpIHsKKwljYXNlIEgxX0EwX1dBSVRfRk9S X0FDVElWRV9SWDoKKwkJaWYgKGlucHV0LT5ia3N2X3JlYWQgIT0gUEFTUyB8fCBpbnB1dC0+YmNh cHNfcmVhZCAhPSBQQVNTKSB7CisJCQkvKiAxQS0wNDogcmVwZWF0ZWRseSBhdHRlbXB0cyBvbiBw b3J0IGFjY2VzcyBmYWlsdXJlICovCisJCQljYWxsYmFja19pbl9tcyg1MDAsIG91dHB1dCk7CisJ CQlpbmNyZW1lbnRfc3RheV9jb3VudGVyKGhkY3ApOworCQkJYnJlYWs7CisJCX0KKwkJY2FsbGJh Y2tfaW5fbXMoMCwgb3V0cHV0KTsKKwkJc2V0X3N0YXRlX2lkKGhkY3AsIG91dHB1dCwgSDFfQTFf RVhDSEFOR0VfS1NWUyk7CisJCWJyZWFrOworCWNhc2UgSDFfQTFfRVhDSEFOR0VfS1NWUzoKKwkJ aWYgKGlucHV0LT5hZGRfdG9wb2xvZ3kgIT0gUEFTUyB8fAorCQkJCWlucHV0LT5jcmVhdGVfc2Vz c2lvbiAhPSBQQVNTKSB7CisJCQkvKiBvdXQgb2Ygc3luYyB3aXRoIHBzcCBzdGF0ZSAqLworCQkJ YWRqdXN0LT5oZGNwMS5kaXNhYmxlID0gMTsKKwkJCWZhaWxfYW5kX3Jlc3RhcnRfaW5fbXMoMCwg JnN0YXR1cywgb3V0cHV0KTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGlucHV0LT5hbl93cml0 ZSAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPmFrc3Zfd3JpdGUgIT0gUEFTUyB8fAorCQkJCWlucHV0 LT5ia3N2X3JlYWQgIT0gUEFTUyB8fAorCQkJCWlucHV0LT5ia3N2X3ZhbGlkYXRpb24gIT0gUEFT UyB8fAorCQkJCWlucHV0LT5haW5mb193cml0ZSA9PSBGQUlMKSB7CisJCQkvKiAxQS0wNTogY29u c2lkZXIgaW52YWxpZCBia3N2IGEgZmFpbHVyZSAqLworCQkJZmFpbF9hbmRfcmVzdGFydF9pbl9t cygwLCAmc3RhdHVzLCBvdXRwdXQpOworCQkJYnJlYWs7CisJCX0KKwkJY2FsbGJhY2tfaW5fbXMo MzAwLCBvdXRwdXQpOworCQlzZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0LAorCQkJSDFfQTJfQ09N UFVUQVRJT05TX0EzX1ZBTElEQVRFX1JYX0E2X1RFU1RfRk9SX1JFUEVBVEVSKTsKKwkJYnJlYWs7 CisJY2FzZSBIMV9BMl9DT01QVVRBVElPTlNfQTNfVkFMSURBVEVfUlhfQTZfVEVTVF9GT1JfUkVQ RUFURVI6CisJCWlmIChpbnB1dC0+YmNhcHNfcmVhZCAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPnIw cF9yZWFkICE9IFBBU1MgfHwKKwkJCQlpbnB1dC0+cnhfdmFsaWRhdGlvbiAhPSBQQVNTIHx8CisJ CQkJKCFjb25uLT5pc19yZXBlYXRlciAmJiBpbnB1dC0+ZW5jcnlwdGlvbiAhPSBQQVNTKSkgewor CQkJLyogMUEtMDY6IGNvbnNpZGVyIGludmFsaWQgcjAnIGEgZmFpbHVyZSAqLworCQkJLyogMUEt MDg6IGNvbnNpZGVyIGJrc3YgbGlzdGVkIGluIFNSTSBhIGZhaWx1cmUgKi8KKwkJCWZhaWxfYW5k X3Jlc3RhcnRfaW5fbXMoMCwgJnN0YXR1cywgb3V0cHV0KTsKKwkJCWJyZWFrOworCQl9CisJCWlm IChjb25uLT5pc19yZXBlYXRlcikgeworCQkJY2FsbGJhY2tfaW5fbXMoMCwgb3V0cHV0KTsKKwkJ CXNldF93YXRjaGRvZ19pbl9tcyhoZGNwLCA1MDAwLCBvdXRwdXQpOworCQkJc2V0X3N0YXRlX2lk KGhkY3AsIG91dHB1dCwgSDFfQThfV0FJVF9GT1JfUkVBRFkpOworCQl9IGVsc2UgeworCQkJY2Fs bGJhY2tfaW5fbXMoMCwgb3V0cHV0KTsKKwkJCXNldF9zdGF0ZV9pZChoZGNwLCBvdXRwdXQsIEgx X0E0NV9BVVRIRU5JQ0FURUQpOworCQkJSERDUF9GVUxMX0REQ19UUkFDRShoZGNwKTsKKwkJfQor CQlicmVhazsKKwljYXNlIEgxX0E0NV9BVVRIRU5JQ0FURUQ6CisJCWlmIChpbnB1dC0+bGlua19t YWludGVuYW5jZSAhPSBQQVNTKSB7CisJCQkvKiAxQS0wNzogY29uc2lkZXIgaW52YWxpZCByaScg YSBmYWlsdXJlICovCisJCQkvKiAxQS0wN2E6IGNvbnNpZGVyIHJlYWQgcmknIG5vdCByZXR1cm5l ZCBhIGZhaWx1cmUgKi8KKwkJCWZhaWxfYW5kX3Jlc3RhcnRfaW5fbXMoMCwgJnN0YXR1cywgb3V0 cHV0KTsKKwkJCWJyZWFrOworCQl9CisJCWNhbGxiYWNrX2luX21zKDUwMCwgb3V0cHV0KTsKKwkJ aW5jcmVtZW50X3N0YXlfY291bnRlcihoZGNwKTsKKwkJYnJlYWs7CisJY2FzZSBIMV9BOF9XQUlU X0ZPUl9SRUFEWToKKwkJaWYgKGlucHV0LT5yZWFkeV9jaGVjayAhPSBQQVNTKSB7CisJCQlpZiAo ZXZlbnRfY3R4LT5ldmVudCA9PQorCQkJCQlNT0RfSERDUF9FVkVOVF9XQVRDSERPR19USU1FT1VU KSB7CisJCQkJLyogMUItMDM6IGZhaWwgaGRjcCBvbiBrc3YgbGlzdCBSRUFEWSB0aW1lb3V0ICov CisJCQkJLyogcHJldmVudCBibGFjayBzY3JlZW4gaW4gbmV4dCBhdHRlbXB0ICovCisJCQkJYWRq dXN0LT5oZGNwMS5wb3N0cG9uZV9lbmNyeXB0aW9uID0gMTsKKwkJCQlmYWlsX2FuZF9yZXN0YXJ0 X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQl9IGVsc2UgeworCQkJCS8qIGNvbnRpbnVl IGtzdiBsaXN0IFJFQURZIHBvbGxpbmcqLworCQkJCWNhbGxiYWNrX2luX21zKDUwMCwgb3V0cHV0 KTsKKwkJCQlpbmNyZW1lbnRfc3RheV9jb3VudGVyKGhkY3ApOworCQkJfQorCQkJYnJlYWs7CisJ CX0KKwkJY2FsbGJhY2tfaW5fbXMoMCwgb3V0cHV0KTsKKwkJc2V0X3N0YXRlX2lkKGhkY3AsIG91 dHB1dCwgSDFfQTlfUkVBRF9LU1ZfTElTVCk7CisJCWJyZWFrOworCWNhc2UgSDFfQTlfUkVBRF9L U1ZfTElTVDoKKwkJaWYgKGlucHV0LT5ic3RhdHVzX3JlYWQgIT0gUEFTUyB8fAorCQkJCWlucHV0 LT5tYXhfY2FzY2FkZV9jaGVjayAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPm1heF9kZXZzX2NoZWNr ICE9IFBBU1MgfHwKKwkJCQlpbnB1dC0+ZGV2aWNlX2NvdW50X2NoZWNrICE9IFBBU1MgfHwKKwkJ CQlpbnB1dC0+a3N2bGlzdF9yZWFkICE9IFBBU1MgfHwKKwkJCQlpbnB1dC0+dnBfcmVhZCAhPSBQ QVNTIHx8CisJCQkJaW5wdXQtPmtzdmxpc3RfdnBfdmFsaWRhdGlvbiAhPSBQQVNTIHx8CisJCQkJ aW5wdXQtPmVuY3J5cHRpb24gIT0gUEFTUykgeworCQkJLyogMUItMDY6IGNvbnNpZGVyIE1BWF9D QVNDQURFX0VYQ0VFREVEIGEgZmFpbHVyZSAqLworCQkJLyogMUItMDU6IGNvbnNpZGVyIE1BWF9E RVZTX0VYQ0VFREVEIGEgZmFpbHVyZSAqLworCQkJLyogMUItMDQ6IGNvbnNpZGVyIGludmFsaWQg dicgYSBmYWlsdXJlICovCisJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91 dHB1dCk7CisJCQlicmVhazsKKwkJfQorCQljYWxsYmFja19pbl9tcygwLCBvdXRwdXQpOworCQlz ZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0LCBIMV9BNDVfQVVUSEVOSUNBVEVEKTsKKwkJSERDUF9G VUxMX0REQ19UUkFDRShoZGNwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gTU9E X0hEQ1BfU1RBVFVTX0lOVkFMSURfU1RBVEU7CisJCWZhaWxfYW5kX3Jlc3RhcnRfaW5fbXMoMCwg JnN0YXR1cywgb3V0cHV0KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKwor ZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfaGRjcDFfZHBfdHJhbnNpdGlvbihzdHJ1Y3Qg bW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9j dHgsCisJCXN0cnVjdCBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCwKKwkJ c3RydWN0IG1vZF9oZGNwX291dHB1dCAqb3V0cHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVz IHN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCXN0cnVjdCBtb2RfaGRjcF9jb25u ZWN0aW9uICpjb25uID0gJmhkY3AtPmNvbm5lY3Rpb247CisJc3RydWN0IG1vZF9oZGNwX2xpbmtf YWRqdXN0bWVudCAqYWRqdXN0ID0gJmhkY3AtPmNvbm5lY3Rpb24ubGluay5hZGp1c3Q7CisKKwlz d2l0Y2ggKGN1cnJlbnRfc3RhdGUoaGRjcCkpIHsKKwljYXNlIEQxX0EwX0RFVEVSTUlORV9SWF9I RENQX0NBUEFCTEU6CisJCWlmIChpbnB1dC0+YmNhcHNfcmVhZCAhPSBQQVNTKSB7CisJCQkvKiAx QS0wNDogbm8gYXV0aGVudGljYXRpb24gb24gYmNhcHMgcmVhZCBmYWlsdXJlICovCisJCQlmYWls X2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJfSBl bHNlIGlmIChpbnB1dC0+aGRjcF9jYXBhYmxlX2RwICE9IFBBU1MpIHsKKwkJCWFkanVzdC0+aGRj cDEuZGlzYWJsZSA9IDE7CisJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91 dHB1dCk7CisJCQlicmVhazsKKwkJfQorCQljYWxsYmFja19pbl9tcygwLCBvdXRwdXQpOworCQlz ZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0LCBEMV9BMV9FWENIQU5HRV9LU1ZTKTsKKwkJYnJlYWs7 CisJY2FzZSBEMV9BMV9FWENIQU5HRV9LU1ZTOgorCQlpZiAoaW5wdXQtPmFkZF90b3BvbG9neSAh PSBQQVNTIHx8CisJCQkJaW5wdXQtPmNyZWF0ZV9zZXNzaW9uICE9IFBBU1MpIHsKKwkJCS8qIG91 dCBvZiBzeW5jIHdpdGggcHNwIHN0YXRlICovCisJCQlhZGp1c3QtPmhkY3AxLmRpc2FibGUgPSAx OworCQkJZmFpbF9hbmRfcmVzdGFydF9pbl9tcygwLCAmc3RhdHVzLCBvdXRwdXQpOworCQkJYnJl YWs7CisJCX0gZWxzZSBpZiAoaW5wdXQtPmFuX3dyaXRlICE9IFBBU1MgfHwKKwkJCQlpbnB1dC0+ YWtzdl93cml0ZSAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPmJrc3ZfcmVhZCAhPSBQQVNTIHx8CisJ CQkJaW5wdXQtPmJrc3ZfdmFsaWRhdGlvbiAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPmFpbmZvX3dy aXRlID09IEZBSUwpIHsKKwkJCS8qIDFBLTA1OiBjb25zaWRlciBpbnZhbGlkIGJrc3YgYSBmYWls dXJlICovCisJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJ CQlicmVhazsKKwkJfQorCQlzZXRfd2F0Y2hkb2dfaW5fbXMoaGRjcCwgMTAwLCBvdXRwdXQpOwor CQlzZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0LCBEMV9BMjNfV0FJVF9GT1JfUjBfUFJJTUUpOwor CQlicmVhazsKKwljYXNlIEQxX0EyM19XQUlUX0ZPUl9SMF9QUklNRToKKwkJaWYgKGlucHV0LT5i c3RhdHVzX3JlYWQgIT0gUEFTUykgeworCQkJZmFpbF9hbmRfcmVzdGFydF9pbl9tcygwLCAmc3Rh dHVzLCBvdXRwdXQpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoaW5wdXQtPnIwcF9hdmFpbGFi bGVfZHAgIT0gUEFTUykgeworCQkJaWYgKGV2ZW50X2N0eC0+ZXZlbnQgPT0gTU9EX0hEQ1BfRVZF TlRfV0FUQ0hET0dfVElNRU9VVCkKKwkJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0 dXMsIG91dHB1dCk7CisJCQllbHNlCisJCQkJaW5jcmVtZW50X3N0YXlfY291bnRlcihoZGNwKTsK KwkJCWJyZWFrOworCQl9CisJCWNhbGxiYWNrX2luX21zKDAsIG91dHB1dCk7CisJCXNldF9zdGF0 ZV9pZChoZGNwLCBvdXRwdXQsIEQxX0EyX0NPTVBVVEFUSU9OU19BM19WQUxJREFURV9SWF9BNV9U RVNUX0ZPUl9SRVBFQVRFUik7CisJCWJyZWFrOworCWNhc2UgRDFfQTJfQ09NUFVUQVRJT05TX0Ez X1ZBTElEQVRFX1JYX0E1X1RFU1RfRk9SX1JFUEVBVEVSOgorCQlpZiAoaW5wdXQtPnIwcF9yZWFk ICE9IFBBU1MpIHsKKwkJCWZhaWxfYW5kX3Jlc3RhcnRfaW5fbXMoMCwgJnN0YXR1cywgb3V0cHV0 KTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGlucHV0LT5yeF92YWxpZGF0aW9uICE9IFBBU1Mp IHsKKwkJCWlmIChoZGNwLT5zdGF0ZS5zdGF5X2NvdW50IDwgMikgeworCQkJCS8qIGFsbG93IDIg YWRkaXRpb25hbCByZXRyaWVzICovCisJCQkJY2FsbGJhY2tfaW5fbXMoMCwgb3V0cHV0KTsKKwkJ CQlpbmNyZW1lbnRfc3RheV9jb3VudGVyKGhkY3ApOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJ CSAqIDFBLTA2OiBjb25zaWRlciBpbnZhbGlkIHIwJyBhIGZhaWx1cmUKKwkJCQkgKiBhZnRlciAz IGF0dGVtcHRzLgorCQkJCSAqIDFBLTA4OiBjb25zaWRlciBia3N2IGxpc3RlZCBpbiBTUk0gYSBm YWlsdXJlCisJCQkJICovCisJCQkJZmFpbF9hbmRfcmVzdGFydF9pbl9tcygwLCAmc3RhdHVzLCBv dXRwdXQpOworCQkJfQorCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoKCFjb25uLT5pc19yZXBlYXRl ciAmJiBpbnB1dC0+ZW5jcnlwdGlvbiAhPSBQQVNTKSB8fAorCQkJCSghY29ubi0+aXNfcmVwZWF0 ZXIgJiYgaXNfZHBfbXN0X2hkY3AoaGRjcCkgJiYgaW5wdXQtPnN0cmVhbV9lbmNyeXB0aW9uX2Rw ICE9IFBBU1MpKSB7CisJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1 dCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY29ubi0+aXNfcmVwZWF0ZXIpIHsKKwkJCXNldF93 YXRjaGRvZ19pbl9tcyhoZGNwLCA1MDAwLCBvdXRwdXQpOworCQkJc2V0X3N0YXRlX2lkKGhkY3As IG91dHB1dCwgRDFfQTZfV0FJVF9GT1JfUkVBRFkpOworCQl9IGVsc2UgeworCQkJc2V0X3N0YXRl X2lkKGhkY3AsIG91dHB1dCwgRDFfQTRfQVVUSEVOSUNBVEVEKTsKKwkJCUhEQ1BfRlVMTF9ERENf VFJBQ0UoaGRjcCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBEMV9BNF9BVVRIRU5JQ0FURUQ6CisJ CWlmIChpbnB1dC0+bGlua19pbnRlZ2lyeV9jaGVjayAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPnJl YXV0aF9yZXF1ZXN0X2NoZWNrICE9IFBBU1MpIHsKKwkJCS8qIDFBLTA3OiByZXN0YXJ0IGhkY3Ag b24gYSBsaW5rIGludGVncml0eSBmYWlsdXJlICovCisJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21z KDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIEQx X0E2X1dBSVRfRk9SX1JFQURZOgorCQlpZiAoaW5wdXQtPmxpbmtfaW50ZWdpcnlfY2hlY2sgPT0g RkFJTCB8fAorCQkJCWlucHV0LT5yZWF1dGhfcmVxdWVzdF9jaGVjayA9PSBGQUlMKSB7CisJCQlm YWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJ fSBlbHNlIGlmIChpbnB1dC0+cmVhZHlfY2hlY2sgIT0gUEFTUykgeworCQkJaWYgKGV2ZW50X2N0 eC0+ZXZlbnQgPT0KKwkJCQkJTU9EX0hEQ1BfRVZFTlRfV0FUQ0hET0dfVElNRU9VVCkgeworCQkJ CS8qIDFCLTA0OiBmYWlsIGhkY3Agb24ga3N2IGxpc3QgUkVBRFkgdGltZW91dCAqLworCQkJCS8q IHByZXZlbnQgYmxhY2sgc2NyZWVuIGluIG5leHQgYXR0ZW1wdCAqLworCQkJCWFkanVzdC0+aGRj cDEucG9zdHBvbmVfZW5jcnlwdGlvbiA9IDE7CisJCQkJZmFpbF9hbmRfcmVzdGFydF9pbl9tcygw LCAmc3RhdHVzLCBvdXRwdXQpOworCQkJfSBlbHNlIHsKKwkJCQlpbmNyZW1lbnRfc3RheV9jb3Vu dGVyKGhkY3ApOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJY2FsbGJhY2tfaW5fbXMoMCwgb3V0 cHV0KTsKKwkJc2V0X3N0YXRlX2lkKGhkY3AsIG91dHB1dCwgRDFfQTdfUkVBRF9LU1ZfTElTVCk7 CisJCWJyZWFrOworCWNhc2UgRDFfQTdfUkVBRF9LU1ZfTElTVDoKKwkJaWYgKGlucHV0LT5iaW5m b19yZWFkX2RwICE9IFBBU1MgfHwKKwkJCQlpbnB1dC0+bWF4X2Nhc2NhZGVfY2hlY2sgIT0gUEFT UyB8fAorCQkJCWlucHV0LT5tYXhfZGV2c19jaGVjayAhPSBQQVNTKSB7CisJCQkvKiAxQi0wNjog Y29uc2lkZXIgTUFYX0RFVlNfRVhDRUVERUQgYSBmYWlsdXJlICovCisJCQkvKiAxQi0wNzogY29u c2lkZXIgTUFYX0NBU0NBREVfRVhDRUVERUQgYSBmYWlsdXJlICovCisJCQlmYWlsX2FuZF9yZXN0 YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChp bnB1dC0+ZGV2aWNlX2NvdW50X2NoZWNrICE9IFBBU1MpIHsKKwkJCS8qCisJCQkgKiBzb21lIHNs b3cgZG9uZ2xlIGRvZXNuJ3QgdXBkYXRlCisJCQkgKiBkZXZpY2UgY291bnQgYXMgc29vbiBhcyBk b3duc3RyZWFtIGlzIGNvbm5lY3RlZC4KKwkJCSAqIGdpdmUgaXQgbW9yZSB0aW1lIHRvIHJlYWN0 LgorCQkJICovCisJCQlhZGp1c3QtPmhkY3AxLnBvc3Rwb25lX2VuY3J5cHRpb24gPSAxOworCQkJ ZmFpbF9hbmRfcmVzdGFydF9pbl9tcygxMDAwLCAmc3RhdHVzLCBvdXRwdXQpOworCQkJYnJlYWs7 CisJCX0gZWxzZSBpZiAoaW5wdXQtPmtzdmxpc3RfcmVhZCAhPSBQQVNTIHx8CisJCQkJaW5wdXQt PnZwX3JlYWQgIT0gUEFTUykgeworCQkJZmFpbF9hbmRfcmVzdGFydF9pbl9tcygwLCAmc3RhdHVz LCBvdXRwdXQpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoaW5wdXQtPmtzdmxpc3RfdnBfdmFs aWRhdGlvbiAhPSBQQVNTKSB7CisJCQlpZiAoaGRjcC0+c3RhdGUuc3RheV9jb3VudCA8IDIpIHsK KwkJCQkvKiBhbGxvdyAyIGFkZGl0aW9uYWwgcmV0cmllcyAqLworCQkJCWNhbGxiYWNrX2luX21z KDAsIG91dHB1dCk7CisJCQkJaW5jcmVtZW50X3N0YXlfY291bnRlcihoZGNwKTsKKwkJCX0gZWxz ZSB7CisJCQkJLyoKKwkJCQkgKiAxQi0wNTogY29uc2lkZXIgaW52YWxpZCB2JyBhIGZhaWx1cmUK KwkJCQkgKiBhZnRlciAzIGF0dGVtcHRzLgorCQkJCSAqLworCQkJCWZhaWxfYW5kX3Jlc3RhcnRf aW5fbXMoMCwgJnN0YXR1cywgb3V0cHV0KTsKKwkJCX0KKwkJCWJyZWFrOworCQl9IGVsc2UgaWYg KGlucHV0LT5lbmNyeXB0aW9uICE9IFBBU1MgfHwKKwkJCQkoaXNfZHBfbXN0X2hkY3AoaGRjcCkg JiYgaW5wdXQtPnN0cmVhbV9lbmNyeXB0aW9uX2RwICE9IFBBU1MpKSB7CisJCQlmYWlsX2FuZF9y ZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJfQorCQlzZXRf c3RhdGVfaWQoaGRjcCwgb3V0cHV0LCBEMV9BNF9BVVRIRU5JQ0FURUQpOworCQlIRENQX0ZVTExf RERDX1RSQUNFKGhkY3ApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmYWlsX2FuZF9yZXN0YXJ0 X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzdGF0 dXM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9o ZGNwL2hkY3BfZGRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNw L2hkY3BfZGRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lN2Jh YWUwNTliODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv bW9kdWxlcy9oZGNwL2hkY3BfZGRjLmMKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBDb3B5cmln aHQgMjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1Io UykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAor ICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgor ICogQXV0aG9yczogQU1ECisgKgorICovCisKKyNpbmNsdWRlICJoZGNwLmgiCisKKyNkZWZpbmUg TUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjZGVmaW5lIEhEQ1BfSTJDX0FERFIg MHgzYQkvKiAweDc0ID4+IDEqLworI2RlZmluZSBLU1ZfUkVBRF9TSVpFIDB4ZgkvKiAweDY4MDNi IC0gMHg2ODAyYyAqLworI2RlZmluZSBIRENQX01BWF9BVVhfVFJBTlNBQ1RJT05fU0laRSAxNgor CitlbnVtIG1vZF9oZGNwX2RkY19tZXNzYWdlX2lkIHsKKwlNT0RfSERDUF9NRVNTQUdFX0lEX0lO VkFMSUQgPSAtMSwKKworCS8qIEhEQ1AgMS40ICovCisKKwlNT0RfSERDUF9NRVNTQUdFX0lEX1JF QURfQktTViA9IDAsCisJTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1JJX1IwLAorCU1PRF9IRENQ X01FU1NBR0VfSURfV1JJVEVfQUtTViwKKwlNT0RfSERDUF9NRVNTQUdFX0lEX1dSSVRFX0FJTkZP LAorCU1PRF9IRENQX01FU1NBR0VfSURfV1JJVEVfQU4sCisJTU9EX0hEQ1BfTUVTU0FHRV9JRF9S RUFEX1ZIX1gsCisJTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzAsCisJTU9EX0hEQ1BfTUVT U0FHRV9JRF9SRUFEX1ZIXzEsCisJTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzIsCisJTU9E X0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzMsCisJTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZI XzQsCisJTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0JDQVBTLAorCU1PRF9IRENQX01FU1NBR0Vf SURfUkVBRF9CU1RBVFVTLAorCU1PRF9IRENQX01FU1NBR0VfSURfUkVBRF9LU1ZfRklGTywKKwlN T0RfSERDUF9NRVNTQUdFX0lEX1JFQURfQklORk8sCisKKwlNT0RfSERDUF9NRVNTQUdFX0lEX01B WAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgaGRjcF9pMmNfb2Zmc2V0c1tdID0geworCVtN T0RfSERDUF9NRVNTQUdFX0lEX1JFQURfQktTVl0gPSAweDAsCisJW01PRF9IRENQX01FU1NBR0Vf SURfUkVBRF9SSV9SMF0gPSAweDgsCisJW01PRF9IRENQX01FU1NBR0VfSURfV1JJVEVfQUtTVl0g PSAweDEwLAorCVtNT0RfSERDUF9NRVNTQUdFX0lEX1dSSVRFX0FJTkZPXSA9IDB4MTUsCisJW01P RF9IRENQX01FU1NBR0VfSURfV1JJVEVfQU5dID0gMHgxOCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9J RF9SRUFEX1ZIX1hdID0gMHgyMCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzBdID0g MHgyMCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzFdID0gMHgyNCwKKwlbTU9EX0hE Q1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzJdID0gMHgyOCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9S RUFEX1ZIXzNdID0gMHgyQywKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzRdID0gMHgz MCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0JDQVBTXSA9IDB4NDAsCisJW01PRF9IRENQ X01FU1NBR0VfSURfUkVBRF9CU1RBVFVTXSA9IDB4NDEsCisJW01PRF9IRENQX01FU1NBR0VfSURf UkVBRF9LU1ZfRklGT10gPSAweDQzLAorCVtNT0RfSERDUF9NRVNTQUdFX0lEX1JFQURfQklORk9d ID0gMHhGRiwKK307CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBoZGNwX2RwY2RfYWRkcnNbXSA9 IHsKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0JLU1ZdID0gMHg2ODAwMCwKKwlbTU9EX0hE Q1BfTUVTU0FHRV9JRF9SRUFEX1JJX1IwXSA9IDB4NjgwMDUsCisJW01PRF9IRENQX01FU1NBR0Vf SURfV1JJVEVfQUtTVl0gPSAweDY4MDA3LAorCVtNT0RfSERDUF9NRVNTQUdFX0lEX1dSSVRFX0FJ TkZPXSA9IDB4NjgwM0IsCisJW01PRF9IRENQX01FU1NBR0VfSURfV1JJVEVfQU5dID0gMHg2ODAw YywKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIX1hdID0gMHg2ODAxNCwKKwlbTU9EX0hE Q1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzBdID0gMHg2ODAxNCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9J RF9SRUFEX1ZIXzFdID0gMHg2ODAxOCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzJd ID0gMHg2ODAxYywKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzNdID0gMHg2ODAyMCwK KwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzRdID0gMHg2ODAyNCwKKwlbTU9EX0hEQ1Bf TUVTU0FHRV9JRF9SRUFEX0JDQVBTXSA9IDB4NjgwMjgsCisJW01PRF9IRENQX01FU1NBR0VfSURf UkVBRF9CU1RBVFVTXSA9IDB4NjgwMjksCisJW01PRF9IRENQX01FU1NBR0VfSURfUkVBRF9LU1Zf RklGT10gPSAweDY4MDJjLAorCVtNT0RfSERDUF9NRVNTQUdFX0lEX1JFQURfQklORk9dID0gMHg2 ODAyYSwKK307CisKK3N0YXRpYyBlbnVtIG1vZF9oZGNwX3N0YXR1cyByZWFkKHN0cnVjdCBtb2Rf aGRjcCAqaGRjcCwKKwkJZW51bSBtb2RfaGRjcF9kZGNfbWVzc2FnZV9pZCBtc2dfaWQsCisJCXVp bnQ4X3QgKmJ1ZiwKKwkJdWludDMyX3QgYnVmX2xlbikKK3sKKwlib29sIHN1Y2Nlc3MgPSB0cnVl OworCXVpbnQzMl90IGN1cl9zaXplID0gMDsKKwl1aW50MzJfdCBkYXRhX29mZnNldCA9IDA7CisK KwlpZiAoaXNfZHBfaGRjcChoZGNwKSkgeworCQl3aGlsZSAoYnVmX2xlbiA+IDApIHsKKwkJCWN1 cl9zaXplID0gTUlOKGJ1Zl9sZW4sIEhEQ1BfTUFYX0FVWF9UUkFOU0FDVElPTl9TSVpFKTsKKwkJ CXN1Y2Nlc3MgPSBoZGNwLT5jb25maWcuZGRjLmZ1bmNzLnJlYWRfZHBjZChoZGNwLT5jb25maWcu ZGRjLmhhbmRsZSwKKwkJCQkJaGRjcF9kcGNkX2FkZHJzW21zZ19pZF0gKyBkYXRhX29mZnNldCwK KwkJCQkJYnVmICsgZGF0YV9vZmZzZXQsCisJCQkJCWN1cl9zaXplKTsKKworCQkJaWYgKCFzdWNj ZXNzKQorCQkJCWJyZWFrOworCisJCQlidWZfbGVuIC09IGN1cl9zaXplOworCQkJZGF0YV9vZmZz ZXQgKz0gY3VyX3NpemU7CisJCX0KKwl9IGVsc2UgeworCQlzdWNjZXNzID0gaGRjcC0+Y29uZmln LmRkYy5mdW5jcy5yZWFkX2kyYygKKwkJCQloZGNwLT5jb25maWcuZGRjLmhhbmRsZSwKKwkJCQlI RENQX0kyQ19BRERSLAorCQkJCWhkY3BfaTJjX29mZnNldHNbbXNnX2lkXSwKKwkJCQlidWYsCisJ CQkJKHVpbnQzMl90KWJ1Zl9sZW4pOworCX0KKworCXJldHVybiBzdWNjZXNzID8gTU9EX0hEQ1Bf U1RBVFVTX1NVQ0NFU1MgOiBNT0RfSERDUF9TVEFUVVNfRERDX0ZBSUxVUkU7Cit9CisKK3N0YXRp YyBlbnVtIG1vZF9oZGNwX3N0YXR1cyByZWFkX3JlcGVhdGVkbHkoc3RydWN0IG1vZF9oZGNwICpo ZGNwLAorCQllbnVtIG1vZF9oZGNwX2RkY19tZXNzYWdlX2lkIG1zZ19pZCwKKwkJdWludDhfdCAq YnVmLAorCQl1aW50MzJfdCBidWZfbGVuLAorCQl1aW50OF90IHJlYWRfc2l6ZSkKK3sKKwllbnVt IG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfRERDX0ZBSUxVUkU7CisJ dWludDMyX3QgY3VyX3NpemUgPSAwOworCXVpbnQzMl90IGRhdGFfb2Zmc2V0ID0gMDsKKworCXdo aWxlIChidWZfbGVuID4gMCkgeworCQljdXJfc2l6ZSA9IE1JTihidWZfbGVuLCByZWFkX3NpemUp OworCQlzdGF0dXMgPSByZWFkKGhkY3AsIG1zZ19pZCwgYnVmICsgZGF0YV9vZmZzZXQsIGN1cl9z aXplKTsKKworCQlpZiAoc3RhdHVzICE9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTKQorCQkJYnJl YWs7CisKKwkJYnVmX2xlbiAtPSBjdXJfc2l6ZTsKKwkJZGF0YV9vZmZzZXQgKz0gY3VyX3NpemU7 CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGVudW0gbW9kX2hkY3Bfc3RhdHVz IHdyaXRlKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJZW51bSBtb2RfaGRjcF9kZGNfbWVzc2Fn ZV9pZCBtc2dfaWQsCisJCXVpbnQ4X3QgKmJ1ZiwKKwkJdWludDMyX3QgYnVmX2xlbikKK3sKKwli b29sIHN1Y2Nlc3MgPSB0cnVlOworCXVpbnQzMl90IGN1cl9zaXplID0gMDsKKwl1aW50MzJfdCBk YXRhX29mZnNldCA9IDA7CisKKwlpZiAoaXNfZHBfaGRjcChoZGNwKSkgeworCQl3aGlsZSAoYnVm X2xlbiA+IDApIHsKKwkJCWN1cl9zaXplID0gTUlOKGJ1Zl9sZW4sIEhEQ1BfTUFYX0FVWF9UUkFO U0FDVElPTl9TSVpFKTsKKwkJCXN1Y2Nlc3MgPSBoZGNwLT5jb25maWcuZGRjLmZ1bmNzLndyaXRl X2RwY2QoCisJCQkJCWhkY3AtPmNvbmZpZy5kZGMuaGFuZGxlLAorCQkJCQloZGNwX2RwY2RfYWRk cnNbbXNnX2lkXSArIGRhdGFfb2Zmc2V0LAorCQkJCQlidWYgKyBkYXRhX29mZnNldCwKKwkJCQkJ Y3VyX3NpemUpOworCisJCQlpZiAoIXN1Y2Nlc3MpCisJCQkJYnJlYWs7CisKKwkJCWJ1Zl9sZW4g LT0gY3VyX3NpemU7CisJCQlkYXRhX29mZnNldCArPSBjdXJfc2l6ZTsKKwkJfQorCX0gZWxzZSB7 CisJCWhkY3AtPmJ1ZlswXSA9IGhkY3BfaTJjX29mZnNldHNbbXNnX2lkXTsKKwkJbWVtbW92ZSgm aGRjcC0+YnVmWzFdLCBidWYsIGJ1Zl9sZW4pOworCQlzdWNjZXNzID0gaGRjcC0+Y29uZmlnLmRk Yy5mdW5jcy53cml0ZV9pMmMoCisJCQkJaGRjcC0+Y29uZmlnLmRkYy5oYW5kbGUsCisJCQkJSERD UF9JMkNfQUREUiwKKwkJCQloZGNwLT5idWYsCisJCQkJKHVpbnQzMl90KShidWZfbGVuKzEpKTsK Kwl9CisKKwlyZXR1cm4gc3VjY2VzcyA/IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTIDogTU9EX0hE Q1BfU1RBVFVTX0REQ19GQUlMVVJFOworfQorCitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRj cF9yZWFkX2Jrc3Yoc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCXJldHVybiByZWFkKGhkY3As IE1PRF9IRENQX01FU1NBR0VfSURfUkVBRF9CS1NWLAorCQkJaGRjcC0+YXV0aC5tc2cuaGRjcDEu YmtzdiwKKwkJCXNpemVvZihoZGNwLT5hdXRoLm1zZy5oZGNwMS5ia3N2KSk7Cit9CisKK2VudW0g bW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3JlYWRfYmNhcHMoc3RydWN0IG1vZF9oZGNwICpoZGNw KQoreworCXJldHVybiByZWFkKGhkY3AsIE1PRF9IRENQX01FU1NBR0VfSURfUkVBRF9CQ0FQUywK KwkJCSZoZGNwLT5hdXRoLm1zZy5oZGNwMS5iY2FwcywKKwkJCXNpemVvZihoZGNwLT5hdXRoLm1z Zy5oZGNwMS5iY2FwcykpOworfQorCitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFk X2JzdGF0dXMoc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVz IHN0YXR1czsKKworCWlmIChpc19kcF9oZGNwKGhkY3ApKQorCQlzdGF0dXMgPSByZWFkKGhkY3As IE1PRF9IRENQX01FU1NBR0VfSURfUkVBRF9CU1RBVFVTLAorCQkJCQkodWludDhfdCAqKSZoZGNw LT5hdXRoLm1zZy5oZGNwMS5ic3RhdHVzLAorCQkJCQkxKTsKKwllbHNlCisJCXN0YXR1cyA9IHJl YWQoaGRjcCwgTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0JTVEFUVVMsCisJCQkJKHVpbnQ4X3Qg KikmaGRjcC0+YXV0aC5tc2cuaGRjcDEuYnN0YXR1cywKKwkJCQlzaXplb2YoaGRjcC0+YXV0aC5t c2cuaGRjcDEuYnN0YXR1cykpOworCXJldHVybiBzdGF0dXM7Cit9CisKK2VudW0gbW9kX2hkY3Bf c3RhdHVzIG1vZF9oZGNwX3JlYWRfcjBwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwlyZXR1 cm4gcmVhZChoZGNwLCBNT0RfSERDUF9NRVNTQUdFX0lEX1JFQURfUklfUjAsCisJCQkodWludDhf dCAqKSZoZGNwLT5hdXRoLm1zZy5oZGNwMS5yMHAsCisJCQlzaXplb2YoaGRjcC0+YXV0aC5tc2cu aGRjcDEucjBwKSk7Cit9CisKKy8qIHNwZWNpYWwgY2FzZSwgcmVhZGluZyByZXBlYXRlZGx5IGF0 IHRoZSBzYW1lIGFkZHJlc3MsIGRvbid0IHVzZSByZWFkKCkgKi8KK2VudW0gbW9kX2hkY3Bfc3Rh dHVzIG1vZF9oZGNwX3JlYWRfa3N2bGlzdChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJZW51 bSBtb2RfaGRjcF9zdGF0dXMgc3RhdHVzOworCisJaWYgKGlzX2RwX2hkY3AoaGRjcCkpCisJCXN0 YXR1cyA9IHJlYWRfcmVwZWF0ZWRseShoZGNwLCBNT0RfSERDUF9NRVNTQUdFX0lEX1JFQURfS1NW X0ZJRk8sCisJCQkJaGRjcC0+YXV0aC5tc2cuaGRjcDEua3N2bGlzdCwKKwkJCQloZGNwLT5hdXRo Lm1zZy5oZGNwMS5rc3ZsaXN0X3NpemUsCisJCQkJS1NWX1JFQURfU0laRSk7CisJZWxzZQorCQlz dGF0dXMgPSByZWFkKGhkY3AsIE1PRF9IRENQX01FU1NBR0VfSURfUkVBRF9LU1ZfRklGTywKKwkJ CQkodWludDhfdCAqKSZoZGNwLT5hdXRoLm1zZy5oZGNwMS5rc3ZsaXN0LAorCQkJCWhkY3AtPmF1 dGgubXNnLmhkY3AxLmtzdmxpc3Rfc2l6ZSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworZW51bSBt b2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfcmVhZF92cChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7 CisJZW51bSBtb2RfaGRjcF9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gcmVhZChoZGNwLCBN T0RfSERDUF9NRVNTQUdFX0lEX1JFQURfVkhfMCwKKwkJCSZoZGNwLT5hdXRoLm1zZy5oZGNwMS52 cFswXSwgNCk7CisJaWYgKHN0YXR1cyAhPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUykKKwkJZ290 byBvdXQ7CisKKwlzdGF0dXMgPSByZWFkKGhkY3AsIE1PRF9IRENQX01FU1NBR0VfSURfUkVBRF9W SF8xLAorCQkJJmhkY3AtPmF1dGgubXNnLmhkY3AxLnZwWzRdLCA0KTsKKwlpZiAoc3RhdHVzICE9 IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTKQorCQlnb3RvIG91dDsKKworCXN0YXR1cyA9IHJlYWQo aGRjcCwgTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzIsCisJCQkmaGRjcC0+YXV0aC5tc2cu aGRjcDEudnBbOF0sIDQpOworCWlmIChzdGF0dXMgIT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1Mp CisJCWdvdG8gb3V0OworCisJc3RhdHVzID0gcmVhZChoZGNwLCBNT0RfSERDUF9NRVNTQUdFX0lE X1JFQURfVkhfMywKKwkJCSZoZGNwLT5hdXRoLm1zZy5oZGNwMS52cFsxMl0sIDQpOworCWlmIChz dGF0dXMgIT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gb3V0OworCisJc3RhdHVz ID0gcmVhZChoZGNwLCBNT0RfSERDUF9NRVNTQUdFX0lEX1JFQURfVkhfNCwKKwkJCSZoZGNwLT5h dXRoLm1zZy5oZGNwMS52cFsxNl0sIDQpOworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK2Vu dW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3JlYWRfYmluZm8oc3RydWN0IG1vZF9oZGNwICpo ZGNwKQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1czsKKworCWlmIChpc19kcF9oZGNw KGhkY3ApKQorCQlzdGF0dXMgPSByZWFkKGhkY3AsIE1PRF9IRENQX01FU1NBR0VfSURfUkVBRF9C SU5GTywKKwkJCQkodWludDhfdCAqKSZoZGNwLT5hdXRoLm1zZy5oZGNwMS5iaW5mb19kcCwKKwkJ CQlzaXplb2YoaGRjcC0+YXV0aC5tc2cuaGRjcDEuYmluZm9fZHApKTsKKwllbHNlCisJCXN0YXR1 cyA9IE1PRF9IRENQX1NUQVRVU19JTlZBTElEX09QRVJBVElPTjsKKworCXJldHVybiBzdGF0dXM7 Cit9CisKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3dyaXRlX2Frc3Yoc3RydWN0IG1v ZF9oZGNwICpoZGNwKQoreworCXJldHVybiB3cml0ZShoZGNwLCBNT0RfSERDUF9NRVNTQUdFX0lE X1dSSVRFX0FLU1YsCisJCQloZGNwLT5hdXRoLm1zZy5oZGNwMS5ha3N2LAorCQkJc2l6ZW9mKGhk Y3AtPmF1dGgubXNnLmhkY3AxLmFrc3YpKTsKK30KKworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9k X2hkY3Bfd3JpdGVfYWluZm8oc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCXJldHVybiB3cml0 ZShoZGNwLCBNT0RfSERDUF9NRVNTQUdFX0lEX1dSSVRFX0FJTkZPLAorCQkJJmhkY3AtPmF1dGgu bXNnLmhkY3AxLmFpbmZvLAorCQkJc2l6ZW9mKGhkY3AtPmF1dGgubXNnLmhkY3AxLmFpbmZvKSk7 Cit9CisKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3dyaXRlX2FuKHN0cnVjdCBtb2Rf aGRjcCAqaGRjcCkKK3sKKwlyZXR1cm4gd3JpdGUoaGRjcCwgTU9EX0hEQ1BfTUVTU0FHRV9JRF9X UklURV9BTiwKKwkJCWhkY3AtPmF1dGgubXNnLmhkY3AxLmFuLAorCQkJc2l6ZW9mKGhkY3AtPmF1 dGgubXNnLmhkY3AxLmFuKSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvbW9kdWxlcy9oZGNwL2hkY3BfbG9nLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvbW9kdWxlcy9oZGNwL2hkY3BfbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi5kODY4ZjU1NmQxODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3BfbG9nLmMKQEAgLTAsMCArMSwxNjMgQEAK Ky8qCisgKiBDb3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERF UihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAq IE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuCisgKgorICogQXV0aG9yczogQU1ECisgKgorICovCisKKworI2luY2x1ZGUgImhk Y3AuaCIKKwordm9pZCBtb2RfaGRjcF9kdW1wX2JpbmFyeV9tZXNzYWdlKHVpbnQ4X3QgKm1zZywg dWludDMyX3QgbXNnX3NpemUsCisJCXVpbnQ4X3QgKmJ1ZiwgdWludDMyX3QgYnVmX3NpemUpCit7 CisJY29uc3QgdWludDhfdCBieXRlc19wZXJfbGluZSA9IDE2LAorCQkJYnl0ZV9zaXplID0gMywK KwkJCW5ld2xpbmVfc2l6ZSA9IDEsCisJCQl0ZXJtaW5hdG9yX3NpemUgPSAxOworCXVpbnQzMl90 IGxpbmVfY291bnQgPSBtc2dfc2l6ZSAvIGJ5dGVzX3Blcl9saW5lLAorCQkJdHJhaWxpbmdfYnl0 ZXMgPSBtc2dfc2l6ZSAlIGJ5dGVzX3Blcl9saW5lOworCXVpbnQzMl90IHRhcmdldF9zaXplID0g KGJ5dGVfc2l6ZSAqIGJ5dGVzX3Blcl9saW5lICsgbmV3bGluZV9zaXplKSAqIGxpbmVfY291bnQg KworCQkJYnl0ZV9zaXplICogdHJhaWxpbmdfYnl0ZXMgKyBuZXdsaW5lX3NpemUgKyB0ZXJtaW5h dG9yX3NpemU7CisJdWludDMyX3QgYnVmX3BvcyA9IDA7CisJdWludDMyX3QgaSA9IDA7CisKKwlp ZiAoYnVmX3NpemUgPj0gdGFyZ2V0X3NpemUpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1zZ19zaXpl OyBpKyspIHsKKwkJCWlmIChpICUgYnl0ZXNfcGVyX2xpbmUgPT0gMCkKKwkJCQlidWZbYnVmX3Bv cysrXSA9ICdcbic7CisJCQlzcHJpbnRmKCZidWZbYnVmX3Bvc10sICIlMDJYICIsIG1zZ1tpXSk7 CisJCQlidWZfcG9zICs9IGJ5dGVfc2l6ZTsKKwkJfQorCQlidWZbYnVmX3BvcysrXSA9ICdcMCc7 CisJfQorfQorCitjaGFyICptb2RfaGRjcF9zdGF0dXNfdG9fc3RyKGludDMyX3Qgc3RhdHVzKQor eworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzoKKwkJ cmV0dXJuICJNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUyI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNf RkFJTFVSRToKKwkJcmV0dXJuICJNT0RfSERDUF9TVEFUVVNfRkFJTFVSRSI7CisJY2FzZSBNT0Rf SERDUF9TVEFUVVNfUkVTRVRfTkVFREVEOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19SRVNF VF9ORUVERUQiOworCWNhc2UgTU9EX0hEQ1BfU1RBVFVTX0RJU1BMQVlfT1VUX09GX0JPVU5EOgor CQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19ESVNQTEFZX09VVF9PRl9CT1VORCI7CisJY2FzZSBN T0RfSERDUF9TVEFUVVNfRElTUExBWV9OT1RfRk9VTkQ6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RB VFVTX0RJU1BMQVlfTk9UX0ZPVU5EIjsKKwljYXNlIE1PRF9IRENQX1NUQVRVU19JTlZBTElEX1NU QVRFOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19JTlZBTElEX1NUQVRFIjsKKwljYXNlIE1P RF9IRENQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQ6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVT X05PVF9JTVBMRU1FTlRFRCI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfSU5URVJOQUxfUE9MSUNZ X0ZBSUxVUkU6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0lOVEVSTkFMX1BPTElDWV9GQUlM VVJFIjsKKwljYXNlIE1PRF9IRENQX1NUQVRVU19VUERBVEVfVE9QT0xPR1lfRkFJTFVSRToKKwkJ cmV0dXJuICJNT0RfSERDUF9TVEFUVVNfVVBEQVRFX1RPUE9MT0dZX0ZBSUxVUkUiOworCWNhc2Ug TU9EX0hEQ1BfU1RBVFVTX0NSRUFURV9QU1BfU0VSVklDRV9GQUlMVVJFOgorCQlyZXR1cm4gIk1P RF9IRENQX1NUQVRVU19DUkVBVEVfUFNQX1NFUlZJQ0VfRkFJTFVSRSI7CisJY2FzZSBNT0RfSERD UF9TVEFUVVNfREVTVFJPWV9QU1BfU0VSVklDRV9GQUlMVVJFOgorCQlyZXR1cm4gIk1PRF9IRENQ X1NUQVRVU19ERVNUUk9ZX1BTUF9TRVJWSUNFX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1BfU1RB VFVTX0hEQ1AxX0NSRUFURV9TRVNTSU9OX0ZBSUxVUkU6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RB VFVTX0hEQ1AxX0NSRUFURV9TRVNTSU9OX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1BfU1RBVFVT X0hEQ1AxX0RFU1RST1lfU0VTU0lPTl9GQUlMVVJFOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRV U19IRENQMV9ERVNUUk9ZX1NFU1NJT05fRkFJTFVSRSI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNf SERDUDFfVkFMSURBVEVfRU5DUllQVElPTl9GQUlMVVJFOgorCQlyZXR1cm4gIk1PRF9IRENQX1NU QVRVU19IRENQMV9WQUxJREFURV9FTkNSWVBUSU9OX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1Bf U1RBVFVTX0hEQ1AxX05PVF9IRENQX1JFUEVBVEVSOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRV U19IRENQMV9OT1RfSERDUF9SRVBFQVRFUiI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfSERDUDFf Tk9UX0NBUEFCTEU6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX05PVF9DQVBBQkxF IjsKKwljYXNlIE1PRF9IRENQX1NUQVRVU19IRENQMV9SMF9QUklNRV9QRU5ESU5HOgorCQlyZXR1 cm4gIk1PRF9IRENQX1NUQVRVU19IRENQMV9SMF9QUklNRV9QRU5ESU5HIjsKKwljYXNlIE1PRF9I RENQX1NUQVRVU19IRENQMV9WQUxJREFURV9SWF9GQUlMVVJFOgorCQlyZXR1cm4gIk1PRF9IRENQ X1NUQVRVU19IRENQMV9WQUxJREFURV9SWF9GQUlMVVJFIjsKKwljYXNlIE1PRF9IRENQX1NUQVRV U19IRENQMV9LU1ZfTElTVF9OT1RfUkVBRFk6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0hE Q1AxX0tTVl9MSVNUX05PVF9SRUFEWSI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfSERDUDFfVkFM SURBVEVfS1NWX0xJU1RfRkFJTFVSRToKKwkJcmV0dXJuICJNT0RfSERDUF9TVEFUVVNfSERDUDFf VkFMSURBVEVfS1NWX0xJU1RfRkFJTFVSRSI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfSERDUDFf RU5BQkxFX0VOQ1JZUFRJT046CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0VOQUJM RV9FTkNSWVBUSU9OIjsKKwljYXNlIE1PRF9IRENQX1NUQVRVU19IRENQMV9FTkFCTEVfU1RSRUFN X0VOQ1JZUFRJT05fRkFJTFVSRToKKwkJcmV0dXJuICJNT0RfSERDUF9TVEFUVVNfSERDUDFfRU5B QkxFX1NUUkVBTV9FTkNSWVBUSU9OX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1BfU1RBVFVTX0hE Q1AxX01BWF9DQVNDQURFX0VYQ0VFREVEX0ZBSUxVUkU6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RB VFVTX0hEQ1AxX01BWF9DQVNDQURFX0VYQ0VFREVEX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1Bf U1RBVFVTX0hEQ1AxX01BWF9ERVZTX0VYQ0VFREVEX0ZBSUxVUkU6CisJCXJldHVybiAiTU9EX0hE Q1BfU1RBVFVTX0hEQ1AxX01BWF9ERVZTX0VYQ0VFREVEX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hE Q1BfU1RBVFVTX0hEQ1AxX0RFVklDRV9DT1VOVF9NSVNNQVRDSF9GQUlMVVJFOgorCQlyZXR1cm4g Ik1PRF9IRENQX1NUQVRVU19IRENQMV9ERVZJQ0VfQ09VTlRfTUlTTUFUQ0hfRkFJTFVSRSI7CisJ Y2FzZSBNT0RfSERDUF9TVEFUVVNfSERDUDFfTElOS19JTlRFR1JJVFlfRkFJTFVSRToKKwkJcmV0 dXJuICJNT0RfSERDUF9TVEFUVVNfSERDUDFfTElOS19JTlRFR1JJVFlfRkFJTFVSRSI7CisJY2Fz ZSBNT0RfSERDUF9TVEFUVVNfSERDUDFfUkVBVVRIX1JFUVVFU1RfSVNTVUVEOgorCQlyZXR1cm4g Ik1PRF9IRENQX1NUQVRVU19IRENQMV9SRUFVVEhfUkVRVUVTVF9JU1NVRUQiOworCWNhc2UgTU9E X0hEQ1BfU1RBVFVTX0hEQ1AxX0xJTktfTUFJTlRFTkFOQ0VfRkFJTFVSRToKKwkJcmV0dXJuICJN T0RfSERDUF9TVEFUVVNfSERDUDFfTElOS19NQUlOVEVOQU5DRV9GQUlMVVJFIjsKKwljYXNlIE1P RF9IRENQX1NUQVRVU19IRENQMV9JTlZBTElEX0JLU1Y6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RB VFVTX0hEQ1AxX0lOVkFMSURfQktTViI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfRERDX0ZBSUxV UkU6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0REQ19GQUlMVVJFIjsKKwljYXNlIE1PRF9I RENQX1NUQVRVU19JTlZBTElEX09QRVJBVElPTjoKKwkJcmV0dXJuICJNT0RfSERDUF9TVEFUVVNf SU5WQUxJRF9PUEVSQVRJT04iOworCWRlZmF1bHQ6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVT X1VOS05PV04iOworCX0KK30KKworY2hhciAqbW9kX2hkY3Bfc3RhdGVfaWRfdG9fc3RyKGludDMy X3QgaWQpCit7CisJc3dpdGNoIChpZCkgeworCWNhc2UgSERDUF9VTklOSVRJQUxJWkVEOgorCQly ZXR1cm4gIkhEQ1BfVU5JTklUSUFMSVpFRCI7CisJY2FzZSBIRENQX0lOSVRJQUxJWkVEOgorCQly ZXR1cm4gIkhEQ1BfSU5JVElBTElaRUQiOworCWNhc2UgSERDUF9DUF9OT1RfREVTSVJFRDoKKwkJ cmV0dXJuICJIRENQX0NQX05PVF9ERVNJUkVEIjsKKwljYXNlIEgxX0EwX1dBSVRfRk9SX0FDVElW RV9SWDoKKwkJcmV0dXJuICJIMV9BMF9XQUlUX0ZPUl9BQ1RJVkVfUlgiOworCWNhc2UgSDFfQTFf RVhDSEFOR0VfS1NWUzoKKwkJcmV0dXJuICJIMV9BMV9FWENIQU5HRV9LU1ZTIjsKKwljYXNlIEgx X0EyX0NPTVBVVEFUSU9OU19BM19WQUxJREFURV9SWF9BNl9URVNUX0ZPUl9SRVBFQVRFUjoKKwkJ cmV0dXJuICJIMV9BMl9DT01QVVRBVElPTlNfQTNfVkFMSURBVEVfUlhfQTZfVEVTVF9GT1JfUkVQ RUFURVIiOworCWNhc2UgSDFfQTQ1X0FVVEhFTklDQVRFRDoKKwkJcmV0dXJuICJIMV9BNDVfQVVU SEVOSUNBVEVEIjsKKwljYXNlIEgxX0E4X1dBSVRfRk9SX1JFQURZOgorCQlyZXR1cm4gIkgxX0E4 X1dBSVRfRk9SX1JFQURZIjsKKwljYXNlIEgxX0E5X1JFQURfS1NWX0xJU1Q6CisJCXJldHVybiAi SDFfQTlfUkVBRF9LU1ZfTElTVCI7CisJY2FzZSBEMV9BMF9ERVRFUk1JTkVfUlhfSERDUF9DQVBB QkxFOgorCQlyZXR1cm4gIkQxX0EwX0RFVEVSTUlORV9SWF9IRENQX0NBUEFCTEUiOworCWNhc2Ug RDFfQTFfRVhDSEFOR0VfS1NWUzoKKwkJcmV0dXJuICJEMV9BMV9FWENIQU5HRV9LU1ZTIjsKKwlj YXNlIEQxX0EyM19XQUlUX0ZPUl9SMF9QUklNRToKKwkJcmV0dXJuICJEMV9BMjNfV0FJVF9GT1Jf UjBfUFJJTUUiOworCWNhc2UgRDFfQTJfQ09NUFVUQVRJT05TX0EzX1ZBTElEQVRFX1JYX0E1X1RF U1RfRk9SX1JFUEVBVEVSOgorCQlyZXR1cm4gIkQxX0EyX0NPTVBVVEFUSU9OU19BM19WQUxJREFU RV9SWF9BNV9URVNUX0ZPUl9SRVBFQVRFUiI7CisJY2FzZSBEMV9BNF9BVVRIRU5JQ0FURUQ6CisJ CXJldHVybiAiRDFfQTRfQVVUSEVOSUNBVEVEIjsKKwljYXNlIEQxX0E2X1dBSVRfRk9SX1JFQURZ OgorCQlyZXR1cm4gIkQxX0E2X1dBSVRfRk9SX1JFQURZIjsKKwljYXNlIEQxX0E3X1JFQURfS1NW X0xJU1Q6CisJCXJldHVybiAiRDFfQTdfUkVBRF9LU1ZfTElTVCI7CisJZGVmYXVsdDoKKwkJcmV0 dXJuICJVTktOT1dOX1NUQVRFX0lEIjsKKwl9OworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3BfbG9nLmggYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3BfbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yZmQwZTBhODkzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3BfbG9nLmgKQEAgLTAs MCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2Vz LCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09Q WVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQU1ECisgKgorICovCisKKyNp Zm5kZWYgTU9EX0hEQ1BfTE9HX0hfCisjZGVmaW5lIE1PRF9IRENQX0xPR19IXworCisjaWZkZWYg Q09ORklHX0RSTV9BTURfRENfSERDUAorI2RlZmluZSBIRENQX0xPR19FUlIoaGRjcCwgLi4uKSBE Uk1fRVJST1IoX19WQV9BUkdTX18pCisjZGVmaW5lIEhEQ1BfTE9HX1ZFUihoZGNwLCAuLi4pIERS TV9ERUJVR19LTVMoX19WQV9BUkdTX18pCisjZGVmaW5lIEhEQ1BfTE9HX0ZTTShoZGNwLCAuLi4p IERSTV9ERUJVR19LTVMoX19WQV9BUkdTX18pCisjZGVmaW5lIEhEQ1BfTE9HX1RPUChoZGNwLCAu Li4pIHByX2RlYnVnKCJbSERDUF9UT1BdOiJfX1ZBX0FSR1NfXykKKyNkZWZpbmUgSERDUF9MT0df RERDKGhkY3AsIC4uLikgcHJfZGVidWcoIltIRENQX0REQ106Il9fVkFfQVJHU19fKQorI2VuZGlm CisKKy8qIGRlZmF1bHQgbG9ncyAqLworI2RlZmluZSBIRENQX0VSUk9SX1RSQUNFKGhkY3AsIHN0 YXR1cykgXAorCQlIRENQX0xPR19FUlIoaGRjcCwgXAorCQkJIltMaW5rICVkXSBFUlJPUiAlcyBJ TiBTVEFURSAlcyIsIFwKKwkJCWhkY3AtPmNvbmZpZy5pbmRleCwgXAorCQkJbW9kX2hkY3Bfc3Rh dHVzX3RvX3N0cihzdGF0dXMpLCBcCisJCQltb2RfaGRjcF9zdGF0ZV9pZF90b19zdHIoaGRjcC0+ c3RhdGUuaWQpKQorI2RlZmluZSBIRENQX0hEQ1AxX0VOQUJMRURfVFJBQ0UoaGRjcCwgZGlzcGxh eUluZGV4KSBcCisJCUhEQ1BfTE9HX1ZFUihoZGNwLCBcCisJCQkiW0xpbmsgJWRdIEhEQ1AgMS40 IGVuYWJsZWQgb24gZGlzcGxheSAlZCIsIFwKKwkJCWhkY3AtPmNvbmZpZy5pbmRleCwgZGlzcGxh eUluZGV4KQorLyogc3RhdGUgbWFjaGluZSBsb2dzICovCisjZGVmaW5lIEhEQ1BfUkVNT1ZFX0RJ U1BMQVlfVFJBQ0UoaGRjcCwgZGlzcGxheUluZGV4KSBcCisJCUhEQ1BfTE9HX0ZTTShoZGNwLCBc CisJCQkiW0xpbmsgJWRdIEhEQ1BfUkVNT1ZFX0RJU1BMQVkgaW5kZXggJWQiLCBcCisJCQloZGNw LT5jb25maWcuaW5kZXgsIGRpc3BsYXlJbmRleCkKKyNkZWZpbmUgSERDUF9JTlBVVF9QQVNTX1RS QUNFKGhkY3AsIHN0cikgXAorCQlIRENQX0xPR19GU00oaGRjcCwgXAorCQkJIltMaW5rICVkXVx0 UEFTUyAlcyIsIFwKKwkJCWhkY3AtPmNvbmZpZy5pbmRleCwgc3RyKQorI2RlZmluZSBIRENQX0lO UFVUX0ZBSUxfVFJBQ0UoaGRjcCwgc3RyKSBcCisJCUhEQ1BfTE9HX0ZTTShoZGNwLCBcCisJCQki W0xpbmsgJWRdXHRGQUlMICVzIiwgXAorCQkJaGRjcC0+Y29uZmlnLmluZGV4LCBzdHIpCisjZGVm aW5lIEhEQ1BfTkVYVF9TVEFURV9UUkFDRShoZGNwLCBpZCwgb3V0cHV0KSBkbyB7IFwKKwkJaWYg KG91dHB1dC0+d2F0Y2hkb2dfdGltZXJfbmVlZGVkKSBcCisJCQlIRENQX0xPR19GU00oaGRjcCwg XAorCQkJCSJbTGluayAlZF0gPiAlcyB3aXRoICVkIG1zIHdhdGNoZG9nIiwgXAorCQkJCWhkY3At PmNvbmZpZy5pbmRleCwgXAorCQkJCW1vZF9oZGNwX3N0YXRlX2lkX3RvX3N0cihpZCksIG91dHB1 dC0+d2F0Y2hkb2dfdGltZXJfZGVsYXkpOyBcCisJCWVsc2UgXAorCQkJSERDUF9MT0dfRlNNKGhk Y3AsIFwKKwkJCQkiW0xpbmsgJWRdID4gJXMiLCBoZGNwLT5jb25maWcuaW5kZXgsIFwKKwkJCQlt b2RfaGRjcF9zdGF0ZV9pZF90b19zdHIoaWQpKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgSERD UF9USU1FT1VUX1RSQUNFKGhkY3ApIFwKKwkJSERDUF9MT0dfRlNNKGhkY3AsICJbTGluayAlZF0g LS0+IFRJTUVPVVQiLCBoZGNwLT5jb25maWcuaW5kZXgpCisjZGVmaW5lIEhEQ1BfQ1BJUlFfVFJB Q0UoaGRjcCkgXAorCQlIRENQX0xPR19GU00oaGRjcCwgIltMaW5rICVkXSAtLT4gQ1BJUlEiLCBo ZGNwLT5jb25maWcuaW5kZXgpCisjZGVmaW5lIEhEQ1BfRVZFTlRfVFJBQ0UoaGRjcCwgZXZlbnQp IFwKKwkJaWYgKGV2ZW50ID09IE1PRF9IRENQX0VWRU5UX1dBVENIRE9HX1RJTUVPVVQpIFwKKwkJ CUhEQ1BfVElNRU9VVF9UUkFDRShoZGNwKTsgXAorCQllbHNlIGlmIChldmVudCA9PSBNT0RfSERD UF9FVkVOVF9DUElSUSkgXAorCQkJSERDUF9DUElSUV9UUkFDRShoZGNwKQorLyogVE9ETzogZmlu ZCBzb21lIHdheSB0byB0ZWxsIGlmIGxvZ2dpbmcgaXMgb2ZmIHRvIHNhdmUgdGltZSAqLworI2Rl ZmluZSBIRENQX0REQ19SRUFEX1RSQUNFKGhkY3AsIG1zZ19uYW1lLCBtc2csIG1zZ19zaXplKSBk byB7IFwKKwkJbW9kX2hkY3BfZHVtcF9iaW5hcnlfbWVzc2FnZShtc2csIG1zZ19zaXplLCBoZGNw LT5idWYsIFwKKwkJCQlzaXplb2YoaGRjcC0+YnVmKSk7IFwKKwkJSERDUF9MT0dfRERDKGhkY3As ICJbTGluayAlZF0gUmVhZCAlcyVzIiwgaGRjcC0+Y29uZmlnLmluZGV4LCBcCisJCQkJbXNnX25h bWUsIGhkY3AtPmJ1Zik7IFwKK30gd2hpbGUgKDApCisjZGVmaW5lIEhEQ1BfRERDX1dSSVRFX1RS QUNFKGhkY3AsIG1zZ19uYW1lLCBtc2csIG1zZ19zaXplKSBkbyB7IFwKKwkJbW9kX2hkY3BfZHVt cF9iaW5hcnlfbWVzc2FnZShtc2csIG1zZ19zaXplLCBoZGNwLT5idWYsIFwKKwkJCQlzaXplb2Yo aGRjcC0+YnVmKSk7IFwKKwkJSERDUF9MT0dfRERDKGhkY3AsICJbTGluayAlZF0gV3JpdGUgJXMl cyIsIFwKKwkJCQloZGNwLT5jb25maWcuaW5kZXgsIG1zZ19uYW1lLFwKKwkJCQloZGNwLT5idWYp OyBcCit9IHdoaWxlICgwKQorI2RlZmluZSBIRENQX0ZVTExfRERDX1RSQUNFKGhkY3ApIGRvIHsg XAorCUhEQ1BfRERDX1JFQURfVFJBQ0UoaGRjcCwgIkJLU1YiLCBoZGNwLT5hdXRoLm1zZy5oZGNw MS5ia3N2LCBcCisJCQlzaXplb2YoaGRjcC0+YXV0aC5tc2cuaGRjcDEuYmtzdikpOyBcCisJSERD UF9ERENfUkVBRF9UUkFDRShoZGNwLCAiQkNBUFMiLCAmaGRjcC0+YXV0aC5tc2cuaGRjcDEuYmNh cHMsIFwKKwkJCXNpemVvZihoZGNwLT5hdXRoLm1zZy5oZGNwMS5iY2FwcykpOyBcCisJSERDUF9E RENfV1JJVEVfVFJBQ0UoaGRjcCwgIkFOIiwgaGRjcC0+YXV0aC5tc2cuaGRjcDEuYW4sIFwKKwkJ CXNpemVvZihoZGNwLT5hdXRoLm1zZy5oZGNwMS5hbikpOyBcCisJSERDUF9ERENfV1JJVEVfVFJB Q0UoaGRjcCwgIkFLU1YiLCBoZGNwLT5hdXRoLm1zZy5oZGNwMS5ha3N2LCBcCisJCQlzaXplb2Yo aGRjcC0+YXV0aC5tc2cuaGRjcDEuYWtzdikpOyBcCisJSERDUF9ERENfV1JJVEVfVFJBQ0UoaGRj cCwgIkFJTkZPIiwgJmhkY3AtPmF1dGgubXNnLmhkY3AxLmFpbmZvLCBcCisJCQlzaXplb2YoaGRj cC0+YXV0aC5tc2cuaGRjcDEuYWluZm8pKTsgXAorCUhEQ1BfRERDX1JFQURfVFJBQ0UoaGRjcCwg IlJJJyAvIFIwJyIsIFwKKwkJCSh1aW50OF90ICopJmhkY3AtPmF1dGgubXNnLmhkY3AxLnIwcCwg XAorCQkJc2l6ZW9mKGhkY3AtPmF1dGgubXNnLmhkY3AxLnIwcCkpOyBcCisJSERDUF9ERENfUkVB RF9UUkFDRShoZGNwLCAiQklORk8iLCBcCisJCQkodWludDhfdCAqKSZoZGNwLT5hdXRoLm1zZy5o ZGNwMS5iaW5mb19kcCwgXAorCQkJc2l6ZW9mKGhkY3AtPmF1dGgubXNnLmhkY3AxLmJpbmZvX2Rw KSk7IFwKKwlIRENQX0REQ19SRUFEX1RSQUNFKGhkY3AsICJLU1ZMSVNUIiwgaGRjcC0+YXV0aC5t c2cuaGRjcDEua3N2bGlzdCwgXAorCQkJaGRjcC0+YXV0aC5tc2cuaGRjcDEua3N2bGlzdF9zaXpl KTsgXAorCUhEQ1BfRERDX1JFQURfVFJBQ0UoaGRjcCwgIlYnIiwgaGRjcC0+YXV0aC5tc2cuaGRj cDEudnAsIFwKKwkJCXNpemVvZihoZGNwLT5hdXRoLm1zZy5oZGNwMS52cCkpOyBcCit9IHdoaWxl ICgwKQorI2RlZmluZSBIRENQX1RPUF9BRERfRElTUExBWV9UUkFDRShoZGNwLCBpKSBcCisJCUhE Q1BfTE9HX1RPUChoZGNwLCAiW0xpbmsgJWRdXHRhZGQgZGlzcGxheSAlZCIsIFwKKwkJCQloZGNw LT5jb25maWcuaW5kZXgsIGkpCisjZGVmaW5lIEhEQ1BfVE9QX1JFTU9WRV9ESVNQTEFZX1RSQUNF KGhkY3AsIGkpIFwKKwkJSERDUF9MT0dfVE9QKGhkY3AsICJbTGluayAlZF1cdHJlbW92ZSBkaXNw bGF5ICVkIiwgXAorCQkJCWhkY3AtPmNvbmZpZy5pbmRleCwgaSkKKyNkZWZpbmUgSERDUF9UT1Bf SERDUDFfREVTVFJPWV9TRVNTSU9OX1RSQUNFKGhkY3ApIFwKKwkJSERDUF9MT0dfVE9QKGhkY3As ICJbTGluayAlZF1cdGRlc3Ryb3kgaGRjcDEgc2Vzc2lvbiIsIFwKKwkJCQloZGNwLT5jb25maWcu aW5kZXgpCisjZGVmaW5lIEhEQ1BfVE9QX1JFU0VUX0FVVEhfVFJBQ0UoaGRjcCkgXAorCQlIRENQ X0xPR19UT1AoaGRjcCwgIltMaW5rICVkXVx0cmVzZXQgYXV0aGVudGljYXRpb24iLCBoZGNwLT5j b25maWcuaW5kZXgpCisjZGVmaW5lIEhEQ1BfVE9QX1JFU0VUX0NPTk5fVFJBQ0UoaGRjcCkgXAor CQlIRENQX0xPR19UT1AoaGRjcCwgIltMaW5rICVkXVx0cmVzZXQgY29ubmVjdGlvbiIsIGhkY3At PmNvbmZpZy5pbmRleCkKKyNkZWZpbmUgSERDUF9UT1BfSU5URVJGQUNFX1RSQUNFKGhkY3ApIGRv IHsgXAorCQlIRENQX0xPR19UT1AoaGRjcCwgIlxuIik7IFwKKwkJSERDUF9MT0dfVE9QKGhkY3As ICJbTGluayAlZF0gJXMiLCBoZGNwLT5jb25maWcuaW5kZXgsIF9fZnVuY19fKTsgXAorfSB3aGls ZSAoMCkKKyNkZWZpbmUgSERDUF9UT1BfSU5URVJGQUNFX1RSQUNFX1dJVEhfSU5ERVgoaGRjcCwg aSkgZG8geyBcCisJCUhEQ1BfTE9HX1RPUChoZGNwLCAiXG4iKTsgXAorCQlIRENQX0xPR19UT1Ao aGRjcCwgIltMaW5rICVkXSAlcyBkaXNwbGF5ICVkIiwgaGRjcC0+Y29uZmlnLmluZGV4LCBfX2Z1 bmNfXywgaSk7IFwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAvLyBNT0RfSERDUF9MT0dfSF8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2luYy9tb2RfaGRj cC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaW5jL21vZF9oZGNwLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43OWY4NDZlODkyNDUKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9pbmMv bW9kX2hkY3AuaApAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE5IEFkdmFu Y2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisg KiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBB TUQKKyAqCisgKi8KKworI2lmbmRlZiBNT0RfSERDUF9IXworI2RlZmluZSBNT0RfSERDUF9IXwor CisjaW5jbHVkZSAib3NfdHlwZXMuaCIKKyNpbmNsdWRlICJzaWduYWxfdHlwZXMuaCIKKworLyog Rm9yd2FyZCBEZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBtb2RfaGRjcDsKKworI2RlZmluZSBNQVhf TlVNX09GX0RJU1BMQVlTIDYKKyNkZWZpbmUgTUFYX05VTV9PRl9BVFRFTVBUUyA0CisjZGVmaW5l IE1BWF9OVU1fT0ZfRVJST1JfVFJBQ0UgMTAKKworLyogZGV0YWlsZWQgcmV0dXJuIHN0YXR1cyAq LworZW51bSBtb2RfaGRjcF9zdGF0dXMgeworCU1PRF9IRENQX1NUQVRVU19TVUNDRVNTID0gMCwK KwlNT0RfSERDUF9TVEFUVVNfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfUkVTRVRfTkVFREVE LAorCU1PRF9IRENQX1NUQVRVU19ESVNQTEFZX09VVF9PRl9CT1VORCwKKwlNT0RfSERDUF9TVEFU VVNfRElTUExBWV9OT1RfRk9VTkQsCisJTU9EX0hEQ1BfU1RBVFVTX0lOVkFMSURfU1RBVEUsCisJ TU9EX0hEQ1BfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCwKKwlNT0RfSERDUF9TVEFUVVNfSU5URVJO QUxfUE9MSUNZX0ZBSUxVUkUsCisJTU9EX0hEQ1BfU1RBVFVTX1VQREFURV9UT1BPTE9HWV9GQUlM VVJFLAorCU1PRF9IRENQX1NUQVRVU19DUkVBVEVfUFNQX1NFUlZJQ0VfRkFJTFVSRSwKKwlNT0Rf SERDUF9TVEFUVVNfREVTVFJPWV9QU1BfU0VSVklDRV9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRV U19IRENQMV9DUkVBVEVfU0VTU0lPTl9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19IRENQMV9E RVNUUk9ZX1NFU1NJT05fRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDFfVkFMSURBVEVf RU5DUllQVElPTl9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19IRENQMV9OT1RfSERDUF9SRVBF QVRFUiwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDFfTk9UX0NBUEFCTEUsCisJTU9EX0hEQ1BfU1RB VFVTX0hEQ1AxX1IwX1BSSU1FX1BFTkRJTkcsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX1ZBTElE QVRFX1JYX0ZBSUxVUkUsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0tTVl9MSVNUX05PVF9SRUFE WSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDFfVkFMSURBVEVfS1NWX0xJU1RfRkFJTFVSRSwKKwlN T0RfSERDUF9TVEFUVVNfSERDUDFfRU5BQkxFX0VOQ1JZUFRJT04sCisJTU9EX0hEQ1BfU1RBVFVT X0hEQ1AxX0VOQUJMRV9TVFJFQU1fRU5DUllQVElPTl9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRV U19IRENQMV9NQVhfQ0FTQ0FERV9FWENFRURFRF9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19I RENQMV9NQVhfREVWU19FWENFRURFRF9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19IRENQMV9E RVZJQ0VfQ09VTlRfTUlTTUFUQ0hfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDFfTElO S19JTlRFR1JJVFlfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDFfUkVBVVRIX1JFUVVF U1RfSVNTVUVELAorCU1PRF9IRENQX1NUQVRVU19IRENQMV9MSU5LX01BSU5URU5BTkNFX0ZBSUxV UkUsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0lOVkFMSURfQktTViwKKwlNT0RfSERDUF9TVEFU VVNfRERDX0ZBSUxVUkUsIC8qIFRPRE86IHNwZWNpZmljIGVycm9ycyAqLworCU1PRF9IRENQX1NU QVRVU19JTlZBTElEX09QRVJBVElPTiwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDJfTk9UX0NBUEFC TEUsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX0NSRUFURV9TRVNTSU9OX0ZBSUxVUkUsCisJTU9E X0hEQ1BfU1RBVFVTX0hEQ1AyX0RFU1RST1lfU0VTU0lPTl9GQUlMVVJFLAorCU1PRF9IRENQX1NU QVRVU19IRENQMl9QUkVQX0FLRV9JTklUX0ZBSUxVUkUsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1Ay X0FLRV9DRVJUX1BFTkRJTkcsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX0hfUFJJTUVfUEVORElO RywKKwlNT0RfSERDUF9TVEFUVVNfSERDUDJfUEFJUklOR19JTkZPX1BFTkRJTkcsCisJTU9EX0hE Q1BfU1RBVFVTX0hEQ1AyX1ZBTElEQVRFX0FLRV9DRVJUX0ZBSUxVUkUsCisJTU9EX0hEQ1BfU1RB VFVTX0hEQ1AyX1ZBTElEQVRFX0hfUFJJTUVfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERD UDJfVkFMSURBVEVfUEFJUklOR19JTkZPX0ZBSUxVUkUsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1Ay X1BSRVBfTENfSU5JVF9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19IRENQMl9MX1BSSU1FX1BF TkRJTkcsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX1ZBTElEQVRFX0xfUFJJTUVfRkFJTFVSRSwK KwlNT0RfSERDUF9TVEFUVVNfSERDUDJfUFJFUF9FS1NfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFU VVNfSERDUDJfRU5BQkxFX0VOQ1JZUFRJT05fRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERD UDJfUlhfSURfTElTVF9OT1RfUkVBRFksCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX1ZBTElEQVRF X1JYX0lEX0xJU1RfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDJfRU5BQkxFX1NUUkVB TV9FTkNSWVBUSU9OLAorCU1PRF9IRENQX1NUQVRVU19IRENQMl9TVFJFQU1fUkVBRFlfUEVORElO RywKKwlNT0RfSERDUF9TVEFUVVNfSERDUDJfVkFMSURBVEVfU1RSRUFNX1JFQURZX0ZBSUxVUkUs CisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX1BSRVBBUkVfU1RSRUFNX01BTkFHRU1FTlRfRkFJTFVS RSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDJfUkVBVVRIX1JFUVVFU1QsCisJTU9EX0hEQ1BfU1RB VFVTX0hEQ1AyX1JFQVVUSF9MSU5LX0lOVEVHUklUWV9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRV U19IRENQMl9ERVZJQ0VfQ09VTlRfTUlTTUFUQ0hfRkFJTFVSRSwKK307CisKK3N0cnVjdCBtb2Rf aGRjcF9kaXNwbGF5cG9ydCB7CisJdWludDhfdCByZXY7CisJdWludDhfdCBhc3NyX3N1cHBvcnRl ZDsKK307CisKK3N0cnVjdCBtb2RfaGRjcF9oZG1pIHsKKwl1aW50OF90IHJlc2VydmVkOworfTsK K2VudW0gbW9kX2hkY3Bfb3BlcmF0aW9uX21vZGUgeworCU1PRF9IRENQX01PREVfT0ZGLAorCU1P RF9IRENQX01PREVfREVGQVVMVCwKKwlNT0RfSERDUF9NT0RFX0RQLAorCU1PRF9IRENQX01PREVf RFBfTVNUCit9OworCitlbnVtIG1vZF9oZGNwX2Rpc3BsYXlfc3RhdGUgeworCU1PRF9IRENQX0RJ U1BMQVlfSU5BQ1RJVkUgPSAwLAorCU1PRF9IRENQX0RJU1BMQVlfQUNUSVZFLAorCU1PRF9IRENQ X0RJU1BMQVlfQUNUSVZFX0FORF9BRERFRCwKKwlNT0RfSERDUF9ESVNQTEFZX0VOQ1JZUFRJT05f RU5BQkxFRAorfTsKKworc3RydWN0IG1vZF9oZGNwX2RkYyB7CisJdm9pZCAqaGFuZGxlOworCXN0 cnVjdCB7CisJCWJvb2wgKCpyZWFkX2kyYykodm9pZCAqaGFuZGxlLAorCQkJCXVpbnQzMl90IGFk ZHJlc3MsCisJCQkJdWludDhfdCBvZmZzZXQsCisJCQkJdWludDhfdCAqZGF0YSwKKwkJCQl1aW50 MzJfdCBzaXplKTsKKwkJYm9vbCAoKndyaXRlX2kyYykodm9pZCAqaGFuZGxlLAorCQkJCXVpbnQz Ml90IGFkZHJlc3MsCisJCQkJY29uc3QgdWludDhfdCAqZGF0YSwKKwkJCQl1aW50MzJfdCBzaXpl KTsKKwkJYm9vbCAoKnJlYWRfZHBjZCkodm9pZCAqaGFuZGxlLAorCQkJCXVpbnQzMl90IGFkZHJl c3MsCisJCQkJdWludDhfdCAqZGF0YSwKKwkJCQl1aW50MzJfdCBzaXplKTsKKwkJYm9vbCAoKndy aXRlX2RwY2QpKHZvaWQgKmhhbmRsZSwKKwkJCQl1aW50MzJfdCBhZGRyZXNzLAorCQkJCWNvbnN0 IHVpbnQ4X3QgKmRhdGEsCisJCQkJdWludDMyX3Qgc2l6ZSk7CisJfSBmdW5jczsKK307CisKK3N0 cnVjdCBtb2RfaGRjcF9wc3AgeworCXZvaWQgKmhhbmRsZTsKKwl2b2lkICpmdW5jczsKK307CisK K3N0cnVjdCBtb2RfaGRjcF9kaXNwbGF5X2FkanVzdG1lbnQgeworCXVpbnQ4X3QgZGlzYWJsZQkJ CTogMTsKKwl1aW50OF90IHJlc2VydmVkCQk6IDc7Cit9OworCitzdHJ1Y3QgbW9kX2hkY3BfbGlu a19hZGp1c3RtZW50X2hkY3AxIHsKKwl1aW50OF90IGRpc2FibGUJCQk6IDE7CisJdWludDhfdCBw b3N0cG9uZV9lbmNyeXB0aW9uCTogMTsKKwl1aW50OF90IHJlc2VydmVkCQk6IDY7Cit9OworCitz dHJ1Y3QgbW9kX2hkY3BfbGlua19hZGp1c3RtZW50X2hkY3AyIHsKKwl1aW50OF90IGRpc2FibGUJ CQk6IDE7CisJdWludDhfdCBkaXNhYmxlX3R5cGUxCQk6IDE7CisJdWludDhfdCBmb3JjZV9ub19z dG9yZWRfa20JOiAxOworCXVpbnQ4X3QgaW5jcmVhc2VfaF9wcmltZV90aW1lb3V0OiAxOworCXVp bnQ4X3QgcmVzZXJ2ZWQJCTogNDsKK307CisKK3N0cnVjdCBtb2RfaGRjcF9saW5rX2FkanVzdG1l bnQgeworCXVpbnQ4X3QgYXV0aF9kZWxheTsKKwlzdHJ1Y3QgbW9kX2hkY3BfbGlua19hZGp1c3Rt ZW50X2hkY3AxIGhkY3AxOworCXN0cnVjdCBtb2RfaGRjcF9saW5rX2FkanVzdG1lbnRfaGRjcDIg aGRjcDI7Cit9OworCitzdHJ1Y3QgbW9kX2hkY3BfZXJyb3IgeworCWVudW0gbW9kX2hkY3Bfc3Rh dHVzIHN0YXR1czsKKwl1aW50OF90IHN0YXRlX2lkOworfTsKKworc3RydWN0IG1vZF9oZGNwX3Ry YWNlIHsKKwlzdHJ1Y3QgbW9kX2hkY3BfZXJyb3IgZXJyb3JzW01BWF9OVU1fT0ZfRVJST1JfVFJB Q0VdOworCXVpbnQ4X3QgZXJyb3JfY291bnQ7Cit9OworCitlbnVtIG1vZF9oZGNwX2VuY3J5cHRp b25fc3RhdHVzIHsKKwlNT0RfSERDUF9FTkNSWVBUSU9OX1NUQVRVU19IRENQX09GRiA9IDAsCisJ TU9EX0hEQ1BfRU5DUllQVElPTl9TVEFUVVNfSERDUDFfT04sCisJTU9EX0hEQ1BfRU5DUllQVElP Tl9TVEFUVVNfSERDUDJfVFlQRTBfT04sCisJTU9EX0hEQ1BfRU5DUllQVElPTl9TVEFUVVNfSERD UDJfVFlQRTFfT04KK307CisKKy8qIHBlciBsaW5rIGV2ZW50cyBkbSBoYXMgdG8gbm90aWZ5IHRv IGhkY3AgbW9kdWxlICovCitlbnVtIG1vZF9oZGNwX2V2ZW50IHsKKwlNT0RfSERDUF9FVkVOVF9D QUxMQkFDSyA9IDAsCisJTU9EX0hEQ1BfRVZFTlRfV0FUQ0hET0dfVElNRU9VVCwKKwlNT0RfSERD UF9FVkVOVF9DUElSUQorfTsKKworLyogb3V0cHV0IGZsYWdzIGZyb20gbW9kdWxlIHJlcXVlc3Rp bmcgdGltZXIgb3BlcmF0aW9ucyAqLworc3RydWN0IG1vZF9oZGNwX291dHB1dCB7CisJdWludDhf dCBjYWxsYmFja19uZWVkZWQ7CisJdWludDhfdCBjYWxsYmFja19zdG9wOworCXVpbnQ4X3Qgd2F0 Y2hkb2dfdGltZXJfbmVlZGVkOworCXVpbnQ4X3Qgd2F0Y2hkb2dfdGltZXJfc3RvcDsKKwl1aW50 MTZfdCBjYWxsYmFja19kZWxheTsKKwl1aW50MTZfdCB3YXRjaGRvZ190aW1lcl9kZWxheTsKK307 CisKKy8qIHVzZWQgdG8gcmVwcmVzZW50IHBlciBkaXNwbGF5IGluZm8gKi8KK3N0cnVjdCBtb2Rf aGRjcF9kaXNwbGF5IHsKKwllbnVtIG1vZF9oZGNwX2Rpc3BsYXlfc3RhdGUgc3RhdGU7CisJdWlu dDhfdCBpbmRleDsKKwl1aW50OF90IGNvbnRyb2xsZXI7CisJdWludDhfdCBkaWdfZmU7CisJdW5p b24geworCQl1aW50OF90IHZjX2lkOworCX07CisJc3RydWN0IG1vZF9oZGNwX2Rpc3BsYXlfYWRq dXN0bWVudCBhZGp1c3Q7Cit9OworCisvKiB1c2VkIHRvIHJlcHJlc2VudCBwZXIgbGluayBpbmZv ICovCisvKiBpbiBjYXNlIGEgbGluayBoYXMgbXVsdGlwbGUgZGlzcGxheXMsIHRoZXkgc2hhcmUg dGhlIHNhbWUgbGluayBpbmZvICovCitzdHJ1Y3QgbW9kX2hkY3BfbGluayB7CisJZW51bSBtb2Rf aGRjcF9vcGVyYXRpb25fbW9kZSBtb2RlOworCXVpbnQ4X3QgZGlnX2JlOworCXVpbnQ4X3QgZGRj X2xpbmU7CisJdW5pb24geworCQlzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheXBvcnQgZHA7CisJCXN0 cnVjdCBtb2RfaGRjcF9oZG1pIGhkbWk7CisJfTsKKwlzdHJ1Y3QgbW9kX2hkY3BfbGlua19hZGp1 c3RtZW50IGFkanVzdDsKK307CisKKy8qIGEgcXVlcnkgc3RydWN0dXJlIGZvciBhIGRpc3BsYXkn cyBoZGNwIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheV9xdWVyeSB7CisJ Y29uc3Qgc3RydWN0IG1vZF9oZGNwX2Rpc3BsYXkgKmRpc3BsYXk7CisJY29uc3Qgc3RydWN0IG1v ZF9oZGNwX2xpbmsgKmxpbms7CisJY29uc3Qgc3RydWN0IG1vZF9oZGNwX3RyYWNlICp0cmFjZTsK KwllbnVtIG1vZF9oZGNwX2VuY3J5cHRpb25fc3RhdHVzIGVuY3J5cHRpb25fc3RhdHVzOworfTsK KworLyogY29udGFpbnMgdmFsdWVzIHBlciBvbiBleHRlcm5hbCBkaXNwbGF5IGNvbmZpZ3VyYXRp b24gY2hhbmdlICovCitzdHJ1Y3QgbW9kX2hkY3BfY29uZmlnIHsKKwlzdHJ1Y3QgbW9kX2hkY3Bf cHNwIHBzcDsKKwlzdHJ1Y3QgbW9kX2hkY3BfZGRjIGRkYzsKKwl1aW50OF90IGluZGV4OworfTsK Kworc3RydWN0IG1vZF9oZGNwOworCisvKiBkbSBhbGxvY2F0ZXMgbWVtb3J5IG9mIG1vZF9oZGNw IHBlciBkY19saW5rIG9uIGRtIGluaXQgYmFzZWQgb24gbWVtb3J5IHNpemUqLworc2l6ZV90IG1v ZF9oZGNwX2dldF9tZW1vcnlfc2l6ZSh2b2lkKTsKKworLyogdGVtcG9yYXJ5IC0gY3JlYXRlIGds b2JhbCBwc3AgaGRjcCBzZXJ2aWNlIHBlciBhZGFwdGVyIG9uIGRtIGluaXQgKi8KK2VudW0gbW9k X2hkY3Bfc3RhdHVzIG1vZF9oZGNwX2NyZWF0ZV9wc3Bfc2VydmljZSgKKwkJdm9pZCAqcHNwX2Z1 bmNzLCB2b2lkICpwc3BfaGFuZGxlKTsKKworLyogdGVtcG9yYXJ5IC0gZGVzdHJveSBnbG9iYWwg cHNwIGhkY3Agc2VydmljZSBwZXIgYWRhcHRlciBvbiBkbSBkZXN0cm95ICovCitlbnVtIG1vZF9o ZGNwX3N0YXR1cyBtb2RfaGRjcF9kZXN0cm95X3BzcF9zZXJ2aWNlKAorCQl2b2lkICpwc3BfZnVu Y3MsIHZvaWQgKnBzcF9oYW5kbGUpOworCisvKiBjYWxsZWQgcGVyIGxpbmsgb24gbGluayBjcmVh dGlvbiAqLworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3Bfc2V0dXAoc3RydWN0IG1vZF9o ZGNwICpoZGNwLAorCQlzdHJ1Y3QgbW9kX2hkY3BfY29uZmlnICpjb25maWcpOworCisvKiBjYWxs ZWQgcGVyIGxpbmsgb24gbGluayBkZXN0cm95ICovCitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2Rf aGRjcF90ZWFyZG93bihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworCisvKiBjYWxsZWQgcGVyIGRp c3BsYXkgb24gY3BfZGVzaXJlZCBzZXQgdG8gdHJ1ZSAqLworZW51bSBtb2RfaGRjcF9zdGF0dXMg bW9kX2hkY3BfYWRkX2Rpc3BsYXkoc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQlzdHJ1Y3QgbW9k X2hkY3BfbGluayAqbGluaywgc3RydWN0IG1vZF9oZGNwX2Rpc3BsYXkgKmRpc3BsYXksCisJCXN0 cnVjdCBtb2RfaGRjcF9vdXRwdXQgKm91dHB1dCk7CisKKy8qIGNhbGxlZCBwZXIgZGlzcGxheSBv biBjcF9kZXNpcmVkIHNldCB0byBmYWxzZSAqLworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hk Y3BfcmVtb3ZlX2Rpc3BsYXkoc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQl1aW50OF90IGluZGV4 LCBzdHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQpOworCisvKiBjYWxsZWQgdG8gcXVlcnkg aGRjcCBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGluZGV4ICovCitlbnVtIG1vZF9oZGNwX3N0 YXR1cyBtb2RfaGRjcF9xdWVyeV9kaXNwbGF5KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJdWlu dDhfdCBpbmRleCwgc3RydWN0IG1vZF9oZGNwX2Rpc3BsYXlfcXVlcnkgKnF1ZXJ5KTsKKworLyog Y2FsbGVkIHBlciBsaW5rIG9uIGNvbm5lY3Rpdml0eSBjaGFuZ2UgKi8KK2VudW0gbW9kX2hkY3Bf c3RhdHVzIG1vZF9oZGNwX3Jlc2V0X2Nvbm5lY3Rpb24oc3RydWN0IG1vZF9oZGNwICpoZGNwLAor CQlzdHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQpOworCisvKiBjYWxsZWQgcGVyIGxpbmsg b24gZXZlbnRzIChpLmUuIGNhbGxiYWNrLCB3YXRjaGRvZywgQ1BfSVJRKSAqLworZW51bSBtb2Rf aGRjcF9zdGF0dXMgbW9kX2hkY3BfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3As CisJCWVudW0gbW9kX2hkY3BfZXZlbnQgZXZlbnQsIHN0cnVjdCBtb2RfaGRjcF9vdXRwdXQgKm91 dHB1dCk7CisKKy8qIGNhbGxlZCB0byBjb252ZXJ0IGVudW0gbW9kX2hkY3Bfc3RhdHVzIHRvIGMg c3RyaW5nICovCitjaGFyICptb2RfaGRjcF9zdGF0dXNfdG9fc3RyKGludDMyX3Qgc3RhdHVzKTsK KworLyogY2FsbGVkIHRvIGNvbnZlcnQgc3RhdGUgaWQgdG8gYyBzdHJpbmcgKi8KK2NoYXIgKm1v ZF9oZGNwX3N0YXRlX2lkX3RvX3N0cihpbnQzMl90IGlkKTsKKworLyogY2FsbGVkIHRvIGNvbnZl cnQgc2lnbmFsIHR5cGUgdG8gb3BlcmF0aW9uIG1vZGUgKi8KK2VudW0gbW9kX2hkY3Bfb3BlcmF0 aW9uX21vZGUgbW9kX2hkY3Bfc2lnbmFsX3R5cGVfdG9fb3BlcmF0aW9uX21vZGUoCisJCWVudW0g c2lnbmFsX3R5cGUgc2lnbmFsKTsKKyNlbmRpZiAvKiBNT0RfSERDUF9IXyAqLwotLSAKMi4xNy4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4 IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZng=