From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhawanpreet Lakha Subject: [PATCH 10/20] drm/amd/display: Add HDCP module Date: Tue, 10 Sep 2019 15:04:12 -0400 Message-ID: <20190910190422.794-11-Bhawanpreet.Lakha@amd.com> References: <20190910190422.794-1-Bhawanpreet.Lakha@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190910190422.794-1-Bhawanpreet.Lakha-5C7GfCeVMHo@public.gmane.org> 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: Wenjing Liu , Bhawanpreet Lakha VGhpcyBtb2R1bGUgbWFuYWdlcyBIRENQIGZvciBhbWRncHUgZHJpdmVyLiBUaGUgbW9kdWxlIGJl aGF2ZXMgYXMgYQpzdGF0ZSBtYWNoaW5lIHdoaWNoIGhhbmRsZXMgdGhlIGRpZmZlcmVudCBhdXRo ZW50aWNhdGlvbiBzdGF0ZXMgb2YgSERDUAoKVGhlIG1vZHVsZSBpcyBkaXZpZGVkIGludG8gMyBt YWpvciBjb21wb25lbnRzCistLS0tLS0tLSsKfCBIZGNwLmMgfAorLS0tLS0tLS0rCk1hbmFnZXMg dGhlIHN0YXRlIG1hY2hpbmUsIHNlbmRzIHRoZSBldmVudHMgdG8gYmUgZXhlY3V0ZWQgYW5kIGNv bW11bmljYXRlcwp3aXRoIHRoZSBkbQoKKy0tLS0tLS0tLS0tKwp8RXhlY3V0aW9uLmN8CistLS0t LS0tLS0tLSsKVGhpcyBleGVjdXRlcyBldmVudHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUu IEFsc28gZ2VuZXJhdGVzCmV4ZWN1dGlvbiByZXN1bHRzIGFzIHRyYW5zaXRpb24gaW5wdXRzCgor LS0tLS0tLS0tLS0tKwp8VHJhbnNpdGlvbi5jfAorLS0tLS0tLS0tLS0tKwpEZWNpZGVzIHRoZSBu ZXh0IHN0YXRlIGJhc2VkIG9uIHRoZSBpbnB1dCBhbmQgbWFrZXMgcmVxdWVzdHMgdG8KaGRjcC5j IHRvIGhhbmRsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0t LSsKICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tPiB8IEV4ZWN1dGlvbi5jIHwgLS0tLS0t CiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tLS0tLS0tLS0tLS0rICAgICAgIHwK ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVgor LS0tLSsgICAgICAgICAgICAgICstLS0tLS0tLSsgICAgICAgICAgICAgICAgICstLS0tLS0tLS0t LS0tLSsKfCBETSB8ICAgIC0tLS0tPiAgICB8IEhkY3AuYyB8ICA8LS0tLS0tLS0tLS0tICB8IFRy YW5zaXRpb24uYyB8CistLS0tKyAgICA8LS0tLS0gICAgKy0tLS0tLS0tKyAgICAgICAgICAgICAg ICAgKy0tLS0tLS0tLS0tLS0tKwoKU2lnbmVkLW9mZi1ieTogQmhhd2FucHJlZXQgTGFraGEgPEJo YXdhbnByZWV0Lkxha2hhQGFtZC5jb20+ClNpZ25lZC1vZmYtYnk6IFdlbmppbmcgTGl1IDxXZW5q aW5nLkxpdUBhbWQuY29tPgpSZXZpZXdlZC1ieTogV2VuamluZyBMaXUgPFdlbmppbmcuTGl1QGFt ZC5jb20+CkFja2VkLWJ5OiBIYXJyeSBXZW50bGFuZCA8aGFycnkud2VudGxhbmRAYW1kLmNvbT4K LS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvTWFrZWZpbGUgICAgICAgICAgfCAgIDcg KwogZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL01ha2VmaWxlICAgICAgIHwgICA0ICsK IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9oZGNwL01ha2VmaWxlICB8ICAyOCArCiAu Li4vZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9oZGNwL2hkY3BfbXNnLmMgICAgfCAzMjQgKysrKysr KysrKysKIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2luY2x1ZGUvaGRjcF90eXBlcy5oICB8ICA5 NiArKysrCiAuLi4vZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvTWFrZWZpbGUgfCAg MzIgKysKIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaGRjcC9oZGNwLmMgICB8IDQy NiArKysrKysrKysrKysrKwogLi4uL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hk Y3AuaCAgIHwgNDQyICsrKysrKysrKysrKysrKwogLi4uL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hk Y3AxX2V4ZWN1dGlvbi5jICAgIHwgNTMxICsrKysrKysrKysrKysrKysrKwogLi4uL2Rpc3BsYXkv bW9kdWxlcy9oZGNwL2hkY3AxX3RyYW5zaXRpb24uYyAgIHwgMzA3ICsrKysrKysrKysKIC4uLi9k cm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3BfZGRjLmMgICB8IDMwNSArKysrKysrKysr CiAuLi4vZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaGRjcC9oZGNwX2xvZy5jICAgfCAxNjMgKysr KysrCiAuLi4vZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaGRjcC9oZGNwX2xvZy5oICAgfCAxMzkg KysrKysKIC4uLi9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9pbmMvbW9kX2hkY3AuaCAgICB8IDI4 OSArKysrKysrKysrCiAxNCBmaWxlcyBjaGFuZ2VkLCAzMDkzIGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaGRjcC9NYWtlZmls ZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9oZGNw L2hkY3BfbXNnLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvaW5jbHVkZS9oZGNwX3R5cGVzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaGRjcC9oZGNwLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3Au aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVz L2hkY3AvaGRjcDFfZXhlY3V0aW9uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3AxX3RyYW5zaXRpb24uYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcF9k ZGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1 bGVzL2hkY3AvaGRjcF9sb2cuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcF9sb2cuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2luYy9tb2RfaGRjcC5oCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L01ha2VmaWxlCmluZGV4IDQ5NmNlZTAwMGYxMC4uMzZiM2Q2YTVkMDRk IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvTWFrZWZpbGUKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L01ha2VmaWxlCkBAIC0zNCwxMiArMzQsMTkgQEAg c3ViZGlyLWNjZmxhZ3MteSArPSAtSSQoRlVMTF9BTURfRElTUExBWV9QQVRIKS9tb2R1bGVzL2Zy ZWVzeW5jCiBzdWJkaXItY2NmbGFncy15ICs9IC1JJChGVUxMX0FNRF9ESVNQTEFZX1BBVEgpL21v ZHVsZXMvY29sb3IKIHN1YmRpci1jY2ZsYWdzLXkgKz0gLUkkKEZVTExfQU1EX0RJU1BMQVlfUEFU SCkvbW9kdWxlcy9pbmZvX3BhY2tldAogc3ViZGlyLWNjZmxhZ3MteSArPSAtSSQoRlVMTF9BTURf RElTUExBWV9QQVRIKS9tb2R1bGVzL3Bvd2VyCitpZmRlZiBDT05GSUdfRFJNX0FNRF9EQ19IRENQ CitzdWJkaXItY2NmbGFncy15ICs9IC1JJChGVUxMX0FNRF9ESVNQTEFZX1BBVEgpL21vZHVsZXMv aGRjcAorZW5kaWYKIAogI1RPRE86IHJlbW92ZSB3aGVuIFRpbWluZyBTeW5jIGZlYXR1cmUgaXMg Y29tcGxldGUKIHN1YmRpci1jY2ZsYWdzLXkgKz0gLURCVUlMRF9GRUFUVVJFX1RJTUlOR19TWU5D PTAKIAogREFMX0xJQlMgPSBhbWRncHVfZG0gZGMJbW9kdWxlcy9mcmVlc3luYyBtb2R1bGVzL2Nv bG9yIG1vZHVsZXMvaW5mb19wYWNrZXQgbW9kdWxlcy9wb3dlcgogCitpZmRlZiBDT05GSUdfRFJN X0FNRF9EQ19IRENQCitEQUxfTElCUyArPSBtb2R1bGVzL2hkY3AKK2VuZGlmCisKIEFNRF9EQUwg PSAkKGFkZHN1ZmZpeCAvTWFrZWZpbGUsICQoYWRkcHJlZml4ICQoRlVMTF9BTURfRElTUExBWV9Q QVRIKS8sJChEQUxfTElCUykpKQogCiBpbmNsdWRlICQoQU1EX0RBTCkKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9NYWtlZmlsZQppbmRleCA2Mjc5ODJjYjE1ZDIuLmExNjA1MTJhMmYwNCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL01ha2VmaWxlCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9NYWtlZmlsZQpAQCAtNDgsNiArNDgsMTAg QEAgRENfTElCUyArPSBkY2UxMTAKIERDX0xJQlMgKz0gZGNlMTAwCiBEQ19MSUJTICs9IGRjZTgw CiAKK2lmZGVmIENPTkZJR19EUk1fQU1EX0RDX0hEQ1AKK0RDX0xJQlMgKz0gaGRjcAorZW5kaWYK KwogQU1EX0RDID0gJChhZGRzdWZmaXggL01ha2VmaWxlLCAkKGFkZHByZWZpeCAkKEZVTExfQU1E X0RJU1BMQVlfUEFUSCkvZGMvLCQoRENfTElCUykpKQogCiBpbmNsdWRlICQoQU1EX0RDKQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2hkY3AvTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvaGRjcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQxNzBiNmViOWVjMAotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9oZGNwL01ha2VmaWxlCkBAIC0wLDAg KzEsMjggQEAKKyMgQ29weXJpZ2h0IDIwMTkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgor IworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorIyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorIyB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisjIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorIyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyMgU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMK KyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyMgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVU SE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisjIE9USEVSIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LAorIyBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IKKyMgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIwor IyBNYWtlZmlsZSBmb3IgdGhlICdoZGNwJyBzdWItY29tcG9uZW50IG9mIERBTC4KKyMKKworSERD UF9NU0cgPSBoZGNwX21zZy5vCisKK0FNRF9EQUxfSERDUF9NU0cgPSAkKGFkZHByZWZpeCAkKEFN RERBTFBBVEgpL2RjL2hkY3AvLCQoSERDUF9NU0cpKQorCitBTURfRElTUExBWV9GSUxFUyArPSAk KEFNRF9EQUxfSERDUF9NU0cpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvZGMvaGRjcC9oZGNwX21zZy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2hk Y3AvaGRjcF9tc2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA5 M2IyZmI2ZmY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9kYy9oZGNwL2hkY3BfbXNnLmMKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg MjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNs dWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICog QVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICog QXV0aG9yczogQU1ECisgKgorICovCisKKyNpbmNsdWRlICJkbV9zZXJ2aWNlcy5oIgorI2luY2x1 ZGUgImRtX2hlbHBlcnMuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2hkY3BfdHlwZXMuaCIKKyNpbmNs dWRlICJpbmNsdWRlL2kyY2F1eF9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJpbmNsdWRlL3NpZ25h bF90eXBlcy5oIgorI2luY2x1ZGUgImNvcmVfdHlwZXMuaCIKKyNpbmNsdWRlICJkY19saW5rX2Rk Yy5oIgorI2luY2x1ZGUgImxpbmtfaHdzcy5oIgorCisjZGVmaW5lIERDX0xPR0dFUiBcCisJbGlu ay0+Y3R4LT5sb2dnZXIKKyNkZWZpbmUgSERDUDE0X0tTVl9TSVpFIDUKKyNkZWZpbmUgSERDUDE0 X01BWF9LU1ZfRklGT19TSVpFIDEyNypIRENQMTRfS1NWX1NJWkUKKworc3RhdGljIGNvbnN0IGJv b2wgaGRjcF9jbWRfaXNfcmVhZFtdID0geworCVtIRENQX01FU1NBR0VfSURfUkVBRF9CS1NWXSA9 IHRydWUsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1JJX1IwXSA9IHRydWUsCisJW0hEQ1BfTUVT U0FHRV9JRF9SRUFEX1BKXSA9IHRydWUsCisJW0hEQ1BfTUVTU0FHRV9JRF9XUklURV9BS1NWXSA9 IGZhbHNlLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUlORk9dID0gZmFsc2UsCisJW0hEQ1Bf TUVTU0FHRV9JRF9XUklURV9BTl0gPSBmYWxzZSwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfVkhf WF0gPSB0cnVlLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9WSF8wXSA9IHRydWUsCisJW0hEQ1Bf TUVTU0FHRV9JRF9SRUFEX1ZIXzFdID0gdHJ1ZSwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfVkhf Ml0gPSB0cnVlLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9WSF8zXSA9IHRydWUsCisJW0hEQ1Bf TUVTU0FHRV9JRF9SRUFEX1ZIXzRdID0gdHJ1ZSwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfQkNB UFNdID0gdHJ1ZSwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfQlNUQVRVU10gPSB0cnVlLAorCVtI RENQX01FU1NBR0VfSURfUkVBRF9LU1ZfRklGT10gPSB0cnVlLAorCVtIRENQX01FU1NBR0VfSURf UkVBRF9CSU5GT10gPSB0cnVlLAorCVtIRENQX01FU1NBR0VfSURfSERDUDJWRVJTSU9OXSA9IHRy dWUsCisJW0hEQ1BfTUVTU0FHRV9JRF9SWF9DQVBTXSA9IHRydWUsCisJW0hEQ1BfTUVTU0FHRV9J RF9XUklURV9BS0VfSU5JVF0gPSBmYWxzZSwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfQUtFX1NF TkRfQ0VSVF0gPSB0cnVlLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX05PX1NUT1JFRF9L TV0gPSBmYWxzZSwKKwlbSERDUF9NRVNTQUdFX0lEX1dSSVRFX0FLRV9TVE9SRURfS01dID0gZmFs c2UsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0FLRV9TRU5EX0hfUFJJTUVdID0gdHJ1ZSwKKwlb SERDUF9NRVNTQUdFX0lEX1JFQURfQUtFX1NFTkRfUEFJUklOR19JTkZPXSA9IHRydWUsCisJW0hE Q1BfTUVTU0FHRV9JRF9XUklURV9MQ19JTklUXSA9IGZhbHNlLAorCVtIRENQX01FU1NBR0VfSURf UkVBRF9MQ19TRU5EX0xfUFJJTUVdID0gdHJ1ZSwKKwlbSERDUF9NRVNTQUdFX0lEX1dSSVRFX1NL RV9TRU5EX0VLU10gPSBmYWxzZSwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfUkVQRUFURVJfQVVU SF9TRU5EX1JFQ0VJVkVSSURfTElTVF0gPSB0cnVlLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVf UkVQRUFURVJfQVVUSF9TRU5EX0FDS10gPSBmYWxzZSwKKwlbSERDUF9NRVNTQUdFX0lEX1dSSVRF X1JFUEVBVEVSX0FVVEhfU1RSRUFNX01BTkFHRV0gPSBmYWxzZSwKKwlbSERDUF9NRVNTQUdFX0lE X1JFQURfUkVQRUFURVJfQVVUSF9TVFJFQU1fUkVBRFldID0gdHJ1ZSwKKwlbSERDUF9NRVNTQUdF X0lEX1JFQURfUlhTVEFUVVNdID0gdHJ1ZSwKKwlbSERDUF9NRVNTQUdFX0lEX1dSSVRFX0NPTlRF TlRfU1RSRUFNX1RZUEVdID0gZmFsc2UKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IGhkY3Bf aTJjX29mZnNldHNbXSA9IHsKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfQktTVl0gPSAweDAsCisJ W0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1JJX1IwXSA9IDB4OCwKKwlbSERDUF9NRVNTQUdFX0lEX1JF QURfUEpdID0gMHhBLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUtTVl0gPSAweDEwLAorCVtI RENQX01FU1NBR0VfSURfV1JJVEVfQUlORk9dID0gMHgxNSwKKwlbSERDUF9NRVNTQUdFX0lEX1dS SVRFX0FOXSA9IDB4MTgsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIX1hdID0gMHgyMCwKKwlb SERDUF9NRVNTQUdFX0lEX1JFQURfVkhfMF0gPSAweDIwLAorCVtIRENQX01FU1NBR0VfSURfUkVB RF9WSF8xXSA9IDB4MjQsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzJdID0gMHgyOCwKKwlb SERDUF9NRVNTQUdFX0lEX1JFQURfVkhfM10gPSAweDJDLAorCVtIRENQX01FU1NBR0VfSURfUkVB RF9WSF80XSA9IDB4MzAsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0JDQVBTXSA9IDB4NDAsCisJ W0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0JTVEFUVVNdID0gMHg0MSwKKwlbSERDUF9NRVNTQUdFX0lE X1JFQURfS1NWX0ZJRk9dID0gMHg0MywKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfQklORk9dID0g MHhGRiwKKwlbSERDUF9NRVNTQUdFX0lEX0hEQ1AyVkVSU0lPTl0gPSAweDUwLAorCVtIRENQX01F U1NBR0VfSURfV1JJVEVfQUtFX0lOSVRdID0gMHg2MCwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURf QUtFX1NFTkRfQ0VSVF0gPSAweDgwLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX05PX1NU T1JFRF9LTV0gPSAweDYwLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX1NUT1JFRF9LTV0g PSAweDYwLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9BS0VfU0VORF9IX1BSSU1FXSA9IDB4ODAs CisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0FLRV9TRU5EX1BBSVJJTkdfSU5GT10gPSAweDgwLAor CVtIRENQX01FU1NBR0VfSURfV1JJVEVfTENfSU5JVF0gPSAweDYwLAorCVtIRENQX01FU1NBR0Vf SURfUkVBRF9MQ19TRU5EX0xfUFJJTUVdID0gMHg4MCwKKwlbSERDUF9NRVNTQUdFX0lEX1dSSVRF X1NLRV9TRU5EX0VLU10gPSAweDYwLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9SRVBFQVRFUl9B VVRIX1NFTkRfUkVDRUlWRVJJRF9MSVNUXSA9IDB4ODAsCisJW0hEQ1BfTUVTU0FHRV9JRF9XUklU RV9SRVBFQVRFUl9BVVRIX1NFTkRfQUNLXSA9IDB4NjAsCisJW0hEQ1BfTUVTU0FHRV9JRF9XUklU RV9SRVBFQVRFUl9BVVRIX1NUUkVBTV9NQU5BR0VdID0gMHg2MCwKKwlbSERDUF9NRVNTQUdFX0lE X1JFQURfUkVQRUFURVJfQVVUSF9TVFJFQU1fUkVBRFldID0gMHg4MCwKKwlbSERDUF9NRVNTQUdF X0lEX1JFQURfUlhTVEFUVVNdID0gMHg3MAorfTsKKworc3RydWN0IHByb3RlY3Rpb25fcHJvcGVy dGllcyB7CisJYm9vbCBzdXBwb3J0ZWQ7CisJYm9vbCAoKnByb2Nlc3NfdHJhbnNhY3Rpb24pKAor CQlzdHJ1Y3QgZGNfbGluayAqbGluaywKKwkJc3RydWN0IGhkY3BfcHJvdGVjdGlvbl9tZXNzYWdl ICptZXNzYWdlX2luZm8pOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90ZWN0aW9uX3By b3BlcnRpZXMgbm9uX3N1cHBvcnRlZF9wcm90ZWN0aW9uID0geworCS5zdXBwb3J0ZWQgPSBmYWxz ZQorfTsKKworc3RhdGljIGJvb2wgaGRtaV8xNF9wcm9jZXNzX3RyYW5zYWN0aW9uKAorCXN0cnVj dCBkY19saW5rICpsaW5rLAorCXN0cnVjdCBoZGNwX3Byb3RlY3Rpb25fbWVzc2FnZSAqbWVzc2Fn ZV9pbmZvKQoreworCXVpbnQ4X3QgKmJ1ZmYgPSBOVUxMOworCWJvb2wgcmVzdWx0OworCWNvbnN0 IHVpbnQ4X3QgaGRjcF9pMmNfYWRkcl9saW5rX3ByaW1hcnkgPSAweDNhOyAvKiAweDc0ID4+IDEq LworCWNvbnN0IHVpbnQ4X3QgaGRjcF9pMmNfYWRkcl9saW5rX3NlY29uZGFyeSA9IDB4M2I7IC8q IDB4NzYgPj4gMSovCisJc3RydWN0IGkyY19jb21tYW5kIGkyY19jb21tYW5kOworCXVpbnQ4X3Qg b2Zmc2V0ID0gaGRjcF9pMmNfb2Zmc2V0c1ttZXNzYWdlX2luZm8tPm1zZ19pZF07CisJc3RydWN0 IGkyY19wYXlsb2FkIGkyY19wYXlsb2Fkc1tdID0geworCQl7IHRydWUsIDAsIDEsICZvZmZzZXQg fSwKKwkJLyogYWN0dWFsIGhkY3AgcGF5bG9hZCwgd2lsbCBiZSBmaWxsZWQgbGF0ZXIsIHplcm9l ZCBmb3Igbm93Ki8KKwkJeyAwIH0KKwl9OworCisJc3dpdGNoIChtZXNzYWdlX2luZm8tPmxpbmsp IHsKKwljYXNlIEhEQ1BfTElOS19TRUNPTkRBUlk6CisJCWkyY19wYXlsb2Fkc1swXS5hZGRyZXNz ID0gaGRjcF9pMmNfYWRkcl9saW5rX3NlY29uZGFyeTsKKwkJaTJjX3BheWxvYWRzWzFdLmFkZHJl c3MgPSBoZGNwX2kyY19hZGRyX2xpbmtfc2Vjb25kYXJ5OworCQlicmVhazsKKwljYXNlIEhEQ1Bf TElOS19QUklNQVJZOgorCWRlZmF1bHQ6CisJCWkyY19wYXlsb2Fkc1swXS5hZGRyZXNzID0gaGRj cF9pMmNfYWRkcl9saW5rX3ByaW1hcnk7CisJCWkyY19wYXlsb2Fkc1sxXS5hZGRyZXNzID0gaGRj cF9pMmNfYWRkcl9saW5rX3ByaW1hcnk7CisJCWJyZWFrOworCX0KKworCWlmIChoZGNwX2NtZF9p c19yZWFkW21lc3NhZ2VfaW5mby0+bXNnX2lkXSkgeworCQlpMmNfcGF5bG9hZHNbMV0ud3JpdGUg PSBmYWxzZTsKKwkJaTJjX2NvbW1hbmQubnVtYmVyX29mX3BheWxvYWRzID0gQVJSQVlfU0laRShp MmNfcGF5bG9hZHMpOworCQlpMmNfcGF5bG9hZHNbMV0ubGVuZ3RoID0gbWVzc2FnZV9pbmZvLT5s ZW5ndGg7CisJCWkyY19wYXlsb2Fkc1sxXS5kYXRhID0gbWVzc2FnZV9pbmZvLT5kYXRhOworCX0g ZWxzZSB7CisJCWkyY19jb21tYW5kLm51bWJlcl9vZl9wYXlsb2FkcyA9IDE7CisJCWJ1ZmYgPSBr emFsbG9jKG1lc3NhZ2VfaW5mby0+bGVuZ3RoICsgMSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFi dWZmKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWJ1ZmZbMF0gPSBvZmZzZXQ7CisJCW1lbW1vdmUo JmJ1ZmZbMV0sIG1lc3NhZ2VfaW5mby0+ZGF0YSwgbWVzc2FnZV9pbmZvLT5sZW5ndGgpOworCQlp MmNfcGF5bG9hZHNbMF0ubGVuZ3RoID0gbWVzc2FnZV9pbmZvLT5sZW5ndGggKyAxOworCQlpMmNf cGF5bG9hZHNbMF0uZGF0YSA9IGJ1ZmY7CisJfQorCisJaTJjX2NvbW1hbmQucGF5bG9hZHMgPSBp MmNfcGF5bG9hZHM7CisJaTJjX2NvbW1hbmQuZW5naW5lID0gSTJDX0NPTU1BTkRfRU5HSU5FX0hX Oy8vb25seSBIVworCWkyY19jb21tYW5kLnNwZWVkID0gbGluay0+ZGRjLT5jdHgtPmRjLT5jYXBz LmkyY19zcGVlZF9pbl9raHo7CisKKwlyZXN1bHQgPSBkbV9oZWxwZXJzX3N1Ym1pdF9pMmMoCisJ CQlsaW5rLT5jdHgsCisJCQlsaW5rLAorCQkJJmkyY19jb21tYW5kKTsKKworCWlmIChidWZmKQor CQlrZnJlZShidWZmKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcHJvdGVjdGlvbl9wcm9wZXJ0aWVzIGhkbWlfMTRfcHJvdGVjdGlvbiA9IHsKKwkuc3VwcG9y dGVkID0gdHJ1ZSwKKwkucHJvY2Vzc190cmFuc2FjdGlvbiA9IGhkbWlfMTRfcHJvY2Vzc190cmFu c2FjdGlvbgorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IGhkY3BfZHBjZF9hZGRyc1tdID0g eworCVtIRENQX01FU1NBR0VfSURfUkVBRF9CS1NWXSA9IDB4NjgwMDAsCisJW0hEQ1BfTUVTU0FH RV9JRF9SRUFEX1JJX1IwXSA9IDB4NjgwMDUsCisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1BKXSA9 IDB4RkZGRkZGRkYsCisJW0hEQ1BfTUVTU0FHRV9JRF9XUklURV9BS1NWXSA9IDB4NjgwMDcsCisJ W0hEQ1BfTUVTU0FHRV9JRF9XUklURV9BSU5GT10gPSAweDY4MDNCLAorCVtIRENQX01FU1NBR0Vf SURfV1JJVEVfQU5dID0gMHg2ODAwYywKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfVkhfWF0gPSAw eDY4MDE0LAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9WSF8wXSA9IDB4NjgwMTQsCisJW0hEQ1Bf TUVTU0FHRV9JRF9SRUFEX1ZIXzFdID0gMHg2ODAxOCwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURf VkhfMl0gPSAweDY4MDFjLAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9WSF8zXSA9IDB4NjgwMjAs CisJW0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzRdID0gMHg2ODAyNCwKKwlbSERDUF9NRVNTQUdF X0lEX1JFQURfQkNBUFNdID0gMHg2ODAyOCwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfQlNUQVRV U10gPSAweDY4MDI5LAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9LU1ZfRklGT10gPSAweDY4MDJj LAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9CSU5GT10gPSAweDY4MDJhLAorCVtIRENQX01FU1NB R0VfSURfUlhfQ0FQU10gPSAweDY5MjFkLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX0lO SVRdID0gMHg2OTAwMCwKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfQUtFX1NFTkRfQ0VSVF0gPSAw eDY5MDBiLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX05PX1NUT1JFRF9LTV0gPSAweDY5 MjIwLAorCVtIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX1NUT1JFRF9LTV0gPSAweDY5MmEwLAor CVtIRENQX01FU1NBR0VfSURfUkVBRF9BS0VfU0VORF9IX1BSSU1FXSA9IDB4NjkyYzAsCisJW0hE Q1BfTUVTU0FHRV9JRF9SRUFEX0FLRV9TRU5EX1BBSVJJTkdfSU5GT10gPSAweDY5MmUwLAorCVtI RENQX01FU1NBR0VfSURfV1JJVEVfTENfSU5JVF0gPSAweDY5MmYwLAorCVtIRENQX01FU1NBR0Vf SURfUkVBRF9MQ19TRU5EX0xfUFJJTUVdID0gMHg2OTJmOCwKKwlbSERDUF9NRVNTQUdFX0lEX1dS SVRFX1NLRV9TRU5EX0VLU10gPSAweDY5MzE4LAorCVtIRENQX01FU1NBR0VfSURfUkVBRF9SRVBF QVRFUl9BVVRIX1NFTkRfUkVDRUlWRVJJRF9MSVNUXSA9IDB4NjkzMzAsCisJW0hEQ1BfTUVTU0FH RV9JRF9XUklURV9SRVBFQVRFUl9BVVRIX1NFTkRfQUNLXSA9IDB4NjkzZTAsCisJW0hEQ1BfTUVT U0FHRV9JRF9XUklURV9SRVBFQVRFUl9BVVRIX1NUUkVBTV9NQU5BR0VdID0gMHg2OTNmMCwKKwlb SERDUF9NRVNTQUdFX0lEX1JFQURfUkVQRUFURVJfQVVUSF9TVFJFQU1fUkVBRFldID0gMHg2OTQ3 MywKKwlbSERDUF9NRVNTQUdFX0lEX1JFQURfUlhTVEFUVVNdID0gMHg2OTQ5MywKKwlbSERDUF9N RVNTQUdFX0lEX1dSSVRFX0NPTlRFTlRfU1RSRUFNX1RZUEVdID0gMHg2OTQ5NAorfTsKKworc3Rh dGljIGJvb2wgZHBjZF9hY2Nlc3NfaGVscGVyKAorCXN0cnVjdCBkY19saW5rICpsaW5rLAorCXVp bnQzMl90IGxlbmd0aCwKKwl1aW50OF90ICpkYXRhLAorCXVpbnQzMl90IGRwY2RfYWRkciwKKwli b29sIGlzX3JlYWQpCit7CisJZW51bSBkY19zdGF0dXMgc3RhdHVzOworCXVpbnQzMl90IGN1cl9s ZW5ndGggPSAwOworCXVpbnQzMl90IG9mZnNldCA9IDA7CisJdWludDMyX3Qga3N2X3JlYWRfc2l6 ZSA9IDB4NjgwM2IgLSAweDY4MDJjOworCisJLyogUmVhZCBLU1YsIG5lZWQgcmVwZWF0ZWRseSBo YW5kbGUgKi8KKwlpZiAoZHBjZF9hZGRyID09IDB4NjgwMmMpIHsKKwkJaWYgKGxlbmd0aCAlIEhE Q1AxNF9LU1ZfU0laRSkgeworCQkJRENfTE9HX0VSUk9SKCIlczogS3N2RmlmbyBTaXplKCVkKSBp cyBub3QgYSBtdWx0aXBsZSBvZiBIRENQMTRfS1NWX1NJWkUoJWQpXG4iLAorCQkJCV9fZnVuY19f LAorCQkJCWxlbmd0aCwKKwkJCQlIRENQMTRfS1NWX1NJWkUpOworCQl9CisJCWlmIChsZW5ndGgg PiBIRENQMTRfTUFYX0tTVl9GSUZPX1NJWkUpIHsKKwkJCURDX0xPR19FUlJPUigiJXM6IEtzdkZp Zm8gU2l6ZSglZCkgaXMgZ3JlYXRlciB0aGFuIEhEQ1AxNF9NQVhfS1NWX0ZJRk9fU0laRSglZClc biIsCisJCQkJX19mdW5jX18sCisJCQkJbGVuZ3RoLAorCQkJCUhEQ1AxNF9NQVhfS1NWX0ZJRk9f U0laRSk7CisJCX0KKworCQlEQ19MT0dfRVJST1IoIiVzOiBSZWFkaW5nICVkIEtzdihzKSBmcm9t IEtzdkZpZm9cbiIsCisJCQlfX2Z1bmNfXywKKwkJCWxlbmd0aCAvIEhEQ1AxNF9LU1ZfU0laRSk7 CisKKwkJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJCWlmIChsZW5ndGggPiBrc3ZfcmVhZF9zaXpl KSB7CisJCQkJc3RhdHVzID0gY29yZV9saW5rX3JlYWRfZHBjZCgKKwkJCQkJbGluaywKKwkJCQkJ ZHBjZF9hZGRyICsgb2Zmc2V0LAorCQkJCQlkYXRhICsgb2Zmc2V0LAorCQkJCQlrc3ZfcmVhZF9z aXplKTsKKworCQkJCWRhdGEgKz0ga3N2X3JlYWRfc2l6ZTsKKwkJCQlsZW5ndGggLT0ga3N2X3Jl YWRfc2l6ZTsKKwkJCX0gZWxzZSB7CisJCQkJc3RhdHVzID0gY29yZV9saW5rX3JlYWRfZHBjZCgK KwkJCQkJbGluaywKKwkJCQkJZHBjZF9hZGRyICsgb2Zmc2V0LAorCQkJCQlkYXRhICsgb2Zmc2V0 LAorCQkJCQlsZW5ndGgpOworCisJCQkJZGF0YSArPSBsZW5ndGg7CisJCQkJbGVuZ3RoID0gMDsK KwkJCX0KKworCQkJaWYgKHN0YXR1cyAhPSBEQ19PSykKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0K Kwl9IGVsc2UgeworCQl3aGlsZSAobGVuZ3RoID4gMCkgeworCQkJaWYgKGxlbmd0aCA+IERFRkFV TFRfQVVYX01BWF9EQVRBX1NJWkUpCisJCQkJY3VyX2xlbmd0aCA9IERFRkFVTFRfQVVYX01BWF9E QVRBX1NJWkU7CisJCQllbHNlCisJCQkJY3VyX2xlbmd0aCA9IGxlbmd0aDsKKworCQkJaWYgKGlz X3JlYWQpIHsKKwkJCQlzdGF0dXMgPSBjb3JlX2xpbmtfcmVhZF9kcGNkKAorCQkJCQlsaW5rLAor CQkJCQlkcGNkX2FkZHIgKyBvZmZzZXQsCisJCQkJCWRhdGEgKyBvZmZzZXQsCisJCQkJCWN1cl9s ZW5ndGgpOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSBjb3JlX2xpbmtfd3JpdGVfZHBjZCgK KwkJCQkJbGluaywKKwkJCQkJZHBjZF9hZGRyICsgb2Zmc2V0LAorCQkJCQlkYXRhICsgb2Zmc2V0 LAorCQkJCQljdXJfbGVuZ3RoKTsKKwkJCX0KKworCQkJaWYgKHN0YXR1cyAhPSBEQ19PSykKKwkJ CQlyZXR1cm4gZmFsc2U7CisKKwkJCWxlbmd0aCAtPSBjdXJfbGVuZ3RoOworCQkJb2Zmc2V0ICs9 IGN1cl9sZW5ndGg7CisJCX0KKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGRw XzExX3Byb2Nlc3NfdHJhbnNhY3Rpb24oCisJc3RydWN0IGRjX2xpbmsgKmxpbmssCisJc3RydWN0 IGhkY3BfcHJvdGVjdGlvbl9tZXNzYWdlICptZXNzYWdlX2luZm8pCit7CisJcmV0dXJuIGRwY2Rf YWNjZXNzX2hlbHBlcigKKwkJbGluaywKKwkJbWVzc2FnZV9pbmZvLT5sZW5ndGgsCisJCW1lc3Nh Z2VfaW5mby0+ZGF0YSwKKwkJaGRjcF9kcGNkX2FkZHJzW21lc3NhZ2VfaW5mby0+bXNnX2lkXSwK KwkJaGRjcF9jbWRfaXNfcmVhZFttZXNzYWdlX2luZm8tPm1zZ19pZF0pOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IHByb3RlY3Rpb25fcHJvcGVydGllcyBkcF8xMV9wcm90ZWN0aW9uID0gewor CS5zdXBwb3J0ZWQgPSB0cnVlLAorCS5wcm9jZXNzX3RyYW5zYWN0aW9uID0gZHBfMTFfcHJvY2Vz c190cmFuc2FjdGlvbgorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNw bGF5L2luY2x1ZGUvaGRjcF90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2lu Y2x1ZGUvaGRjcF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uZjMxZTZiZWZjOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2luY2x1ZGUvaGRjcF90eXBlcy5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisqIENvcHly aWdodCAyMDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyoKKyogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqCisqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk IGluCisqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl LgorKgorKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCisqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyogQVJJU0lORyBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S CisqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyoKKyogQXV0aG9yczogQU1ECisq CisqLworCisjaWZuZGVmIF9fRENfSERDUF9UWVBFU19IX18KKyNkZWZpbmUgX19EQ19IRENQX1RZ UEVTX0hfXworCitlbnVtIGhkY3BfbWVzc2FnZV9pZCB7CisJSERDUF9NRVNTQUdFX0lEX0lOVkFM SUQgPSAtMSwKKworCS8qIEhEQ1AgMS40ICovCisKKwlIRENQX01FU1NBR0VfSURfUkVBRF9CS1NW ID0gMCwKKwkvKiBIRE1JIGlzIGNhbGxlZCBSaScsIERQIGlzIGNhbGxlZCBSMCcgKi8KKwlIRENQ X01FU1NBR0VfSURfUkVBRF9SSV9SMCwKKwlIRENQX01FU1NBR0VfSURfUkVBRF9QSiwKKwlIRENQ X01FU1NBR0VfSURfV1JJVEVfQUtTViwKKwlIRENQX01FU1NBR0VfSURfV1JJVEVfQUlORk8sCisJ SERDUF9NRVNTQUdFX0lEX1dSSVRFX0FOLAorCUhEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIX1gsCisJ SERDUF9NRVNTQUdFX0lEX1JFQURfVkhfMCwKKwlIRENQX01FU1NBR0VfSURfUkVBRF9WSF8xLAor CUhEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzIsCisJSERDUF9NRVNTQUdFX0lEX1JFQURfVkhfMywK KwlIRENQX01FU1NBR0VfSURfUkVBRF9WSF80LAorCUhEQ1BfTUVTU0FHRV9JRF9SRUFEX0JDQVBT LAorCUhEQ1BfTUVTU0FHRV9JRF9SRUFEX0JTVEFUVVMsCisJSERDUF9NRVNTQUdFX0lEX1JFQURf S1NWX0ZJRk8sCisJSERDUF9NRVNTQUdFX0lEX1JFQURfQklORk8sCisKKwkvKiBIRENQIDIuMiAq LworCisJSERDUF9NRVNTQUdFX0lEX0hEQ1AyVkVSU0lPTiwKKwlIRENQX01FU1NBR0VfSURfUlhf Q0FQUywKKwlIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX0lOSVQsCisJSERDUF9NRVNTQUdFX0lE X1JFQURfQUtFX1NFTkRfQ0VSVCwKKwlIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX05PX1NUT1JF RF9LTSwKKwlIRENQX01FU1NBR0VfSURfV1JJVEVfQUtFX1NUT1JFRF9LTSwKKwlIRENQX01FU1NB R0VfSURfUkVBRF9BS0VfU0VORF9IX1BSSU1FLAorCUhEQ1BfTUVTU0FHRV9JRF9SRUFEX0FLRV9T RU5EX1BBSVJJTkdfSU5GTywKKwlIRENQX01FU1NBR0VfSURfV1JJVEVfTENfSU5JVCwKKwlIRENQ X01FU1NBR0VfSURfUkVBRF9MQ19TRU5EX0xfUFJJTUUsCisJSERDUF9NRVNTQUdFX0lEX1dSSVRF X1NLRV9TRU5EX0VLUywKKwlIRENQX01FU1NBR0VfSURfUkVBRF9SRVBFQVRFUl9BVVRIX1NFTkRf UkVDRUlWRVJJRF9MSVNULAorCUhEQ1BfTUVTU0FHRV9JRF9XUklURV9SRVBFQVRFUl9BVVRIX1NF TkRfQUNLLAorCUhEQ1BfTUVTU0FHRV9JRF9XUklURV9SRVBFQVRFUl9BVVRIX1NUUkVBTV9NQU5B R0UsCisJSERDUF9NRVNTQUdFX0lEX1JFQURfUkVQRUFURVJfQVVUSF9TVFJFQU1fUkVBRFksCisJ SERDUF9NRVNTQUdFX0lEX1JFQURfUlhTVEFUVVMsCisJSERDUF9NRVNTQUdFX0lEX1dSSVRFX0NP TlRFTlRfU1RSRUFNX1RZUEUsCisKKwlIRENQX01FU1NBR0VfSURfTUFYCit9OworCitlbnVtIGhk Y3BfdmVyc2lvbiB7CisJSERDUF9Vbmtub3duID0gMCwKKwlIRENQX1ZFUlNJT05fMTQsCisJSERD UF9WRVJTSU9OXzIyLAorfTsKKworZW51bSBoZGNwX2xpbmsgeworCUhEQ1BfTElOS19QUklNQVJZ LAorCUhEQ1BfTElOS19TRUNPTkRBUlkKK307CisKK3N0cnVjdCBoZGNwX3Byb3RlY3Rpb25fbWVz c2FnZSB7CisJZW51bSBoZGNwX3ZlcnNpb24gdmVyc2lvbjsKKwkvKiByZWxldmFudCBvbmx5IGZv ciBEVkkgKi8KKwllbnVtIGhkY3BfbGluayBsaW5rOworCWVudW0gaGRjcF9tZXNzYWdlX2lkIG1z Z19pZDsKKwl1aW50MzJfdCBsZW5ndGg7CisJdWludDhfdCBtYXhfcmV0cmllczsKKwl1aW50OF90 ICpkYXRhOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvbW9kdWxlcy9oZGNwL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5 L21vZHVsZXMvaGRjcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjFjM2M2ZDQ3OTczYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvTWFrZWZpbGUKQEAgLTAsMCArMSwzMiBAQAorIworIyBD b3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisjCisjIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisjIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyMgdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCisjIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorIyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNs dWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0 d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorIyBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyMgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisjIEFSSVNJTkcg RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUgorIyBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisjCisjCisjIE1ha2VmaWxl IGZvciB0aGUgJ2hkY3AnIHN1Yi1tb2R1bGUgb2YgREFMLgorIworCitIRENQID0gaGRjcF9kZGMu byBoZGNwX2xvZy5vIGhkY3BfcHNwLm8gaGRjcC5vIFwKKwkJaGRjcDFfZXhlY3V0aW9uLm8gaGRj cDFfdHJhbnNpdGlvbi5vCisKK0FNRF9EQUxfSERDUCA9ICQoYWRkcHJlZml4ICQoQU1EREFMUEFU SCkvbW9kdWxlcy9oZGNwLywkKEhEQ1ApKQorIyQoaW5mbyAqKioqKioqKioqKiogIERBTC1IRENQ X01BS0VGSUxFICoqKioqKioqKioqKikKKworQU1EX0RJU1BMQVlfRklMRVMgKz0gJChBTURfREFM X0hEQ1ApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9o ZGNwL2hkY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRj cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDdhYzQ0NWRlYzZm Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMv aGRjcC9oZGNwLmMKQEAgLTAsMCArMSw0MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOSBBZHZh bmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgor ICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisg KgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczog QU1ECisgKgorICovCisKKyNpbmNsdWRlICJoZGNwLmgiCisKK3N0YXRpYyB2b2lkIHB1c2hfZXJy b3Jfc3RhdHVzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJZW51bSBtb2RfaGRjcF9zdGF0dXMg c3RhdHVzKQoreworCXN0cnVjdCBtb2RfaGRjcF90cmFjZSAqdHJhY2UgPSAmaGRjcC0+Y29ubmVj dGlvbi50cmFjZTsKKworCWlmICh0cmFjZS0+ZXJyb3JfY291bnQgPCBNQVhfTlVNX09GX0VSUk9S X1RSQUNFKSB7CisJCXRyYWNlLT5lcnJvcnNbdHJhY2UtPmVycm9yX2NvdW50XS5zdGF0dXMgPSBz dGF0dXM7CisJCXRyYWNlLT5lcnJvcnNbdHJhY2UtPmVycm9yX2NvdW50XS5zdGF0ZV9pZCA9IGhk Y3AtPnN0YXRlLmlkOworCQl0cmFjZS0+ZXJyb3JfY291bnQrKzsKKwkJSERDUF9FUlJPUl9UUkFD RShoZGNwLCBzdGF0dXMpOworCX0KKworCWhkY3AtPmNvbm5lY3Rpb24uaGRjcDFfcmV0cnlfY291 bnQrKzsKK30KKworc3RhdGljIHVpbnQ4X3QgaXNfY3BfZGVzaXJlZF9oZGNwMShzdHJ1Y3QgbW9k X2hkY3AgKmhkY3ApCit7CisJaW50IGksIGRpc3BsYXlfZW5hYmxlZCA9IDA7CisKKwkvKiBpZiBh bGwgZGlzcGxheXMgb24gdGhlIGxpbmsgYXJlIGRpc2FibGVkLCBoZGNwIGlzIG5vdCBkZXNpcmVk ICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfRElTUExBWVM7IGkrKykgeworCQlpZiAo aGRjcC0+Y29ubmVjdGlvbi5kaXNwbGF5c1tpXS5zdGF0ZSAhPSBNT0RfSERDUF9ESVNQTEFZX0lO QUNUSVZFICYmCisJCQkJIWhkY3AtPmNvbm5lY3Rpb24uZGlzcGxheXNbaV0uYWRqdXN0LmRpc2Fi bGUpIHsKKwkJCWRpc3BsYXlfZW5hYmxlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJl dHVybiAoaGRjcC0+Y29ubmVjdGlvbi5oZGNwMV9yZXRyeV9jb3VudCA8IE1BWF9OVU1fT0ZfQVRU RU1QVFMpICYmCisJCQlkaXNwbGF5X2VuYWJsZWQgJiYgIWhkY3AtPmNvbm5lY3Rpb24ubGluay5h ZGp1c3QuaGRjcDEuZGlzYWJsZTsKK30KKworc3RhdGljIGVudW0gbW9kX2hkY3Bfc3RhdHVzIGV4 ZWN1dGlvbihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9j b250ZXh0ICpldmVudF9jdHgsCisJCXVuaW9uIG1vZF9oZGNwX3RyYW5zaXRpb25faW5wdXQgKmlu cHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19T VUNDRVNTOworCisJaWYgKGlzX2luX2luaXRpYWxpemVkX3N0YXRlKGhkY3ApKSB7CisJCWlmIChl dmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQX0VWRU5UX0NBTExCQUNLKSB7CisJCQlldmVudF9j dHgtPnVuZXhwZWN0ZWRfZXZlbnQgPSAxOworCQkJZ290byBvdXQ7CisJCX0KKwkJLyogaW5pdGlh bGl6ZSB0cmFuc2l0aW9uIGlucHV0ICovCisJCW1lbXNldChpbnB1dCwgMCwgc2l6ZW9mKHVuaW9u IG1vZF9oZGNwX3RyYW5zaXRpb25faW5wdXQpKTsKKwl9IGVsc2UgaWYgKGlzX2luX2NwX25vdF9k ZXNpcmVkX3N0YXRlKGhkY3ApKSB7CisJCWlmIChldmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQ X0VWRU5UX0NBTExCQUNLKSB7CisJCQlldmVudF9jdHgtPnVuZXhwZWN0ZWRfZXZlbnQgPSAxOwor CQkJZ290byBvdXQ7CisJCX0KKwkJLyogdXBkYXRlIHRvcG9sb2d5IGV2ZW50IGlmIGhkY3AgaXMg bm90IGRlc2lyZWQgKi8KKwkJc3RhdHVzID0gbW9kX2hkY3BfYWRkX2Rpc3BsYXlfdG9wb2xvZ3ko aGRjcCk7CisJfSBlbHNlIGlmIChpc19pbl9oZGNwMV9zdGF0ZXMoaGRjcCkpIHsKKwkJc3RhdHVz ID0gbW9kX2hkY3BfaGRjcDFfZXhlY3V0aW9uKGhkY3AsIGV2ZW50X2N0eCwgJmlucHV0LT5oZGNw MSk7CisJfSBlbHNlIGlmIChpc19pbl9oZGNwMV9kcF9zdGF0ZXMoaGRjcCkpIHsKKwkJc3RhdHVz ID0gbW9kX2hkY3BfaGRjcDFfZHBfZXhlY3V0aW9uKGhkY3AsCisJCQkJZXZlbnRfY3R4LCAmaW5w dXQtPmhkY3AxKTsKKwl9CitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGVudW0g bW9kX2hkY3Bfc3RhdHVzIHRyYW5zaXRpb24oc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQlzdHJ1 Y3QgbW9kX2hkY3BfZXZlbnRfY29udGV4dCAqZXZlbnRfY3R4LAorCQl1bmlvbiBtb2RfaGRjcF90 cmFuc2l0aW9uX2lucHV0ICppbnB1dCwKKwkJc3RydWN0IG1vZF9oZGNwX291dHB1dCAqb3V0cHV0 KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19TVUND RVNTOworCisJaWYgKGV2ZW50X2N0eC0+dW5leHBlY3RlZF9ldmVudCkKKwkJZ290byBvdXQ7CisK KwlpZiAoaXNfaW5faW5pdGlhbGl6ZWRfc3RhdGUoaGRjcCkpIHsKKwkJaWYgKGlzX2RwX2hkY3Ao aGRjcCkpCisJCQlpZiAoaXNfY3BfZGVzaXJlZF9oZGNwMShoZGNwKSkgeworCQkJCWNhbGxiYWNr X2luX21zKDAsIG91dHB1dCk7CisJCQkJc2V0X3N0YXRlX2lkKGhkY3AsIG91dHB1dCwgRDFfQTBf REVURVJNSU5FX1JYX0hEQ1BfQ0FQQUJMRSk7CisJCQl9IGVsc2UgeworCQkJCWNhbGxiYWNrX2lu X21zKDAsIG91dHB1dCk7CisJCQkJc2V0X3N0YXRlX2lkKGhkY3AsIG91dHB1dCwgSERDUF9DUF9O T1RfREVTSVJFRCk7CisJCQl9CisJCWVsc2UgaWYgKGlzX2hkbWlfZHZpX3NsX2hkY3AoaGRjcCkp CisJCQlpZiAoaXNfY3BfZGVzaXJlZF9oZGNwMShoZGNwKSkgeworCQkJCWNhbGxiYWNrX2luX21z KDAsIG91dHB1dCk7CisJCQkJc2V0X3N0YXRlX2lkKGhkY3AsIG91dHB1dCwgSDFfQTBfV0FJVF9G T1JfQUNUSVZFX1JYKTsKKwkJCX0gZWxzZSB7CisJCQkJY2FsbGJhY2tfaW5fbXMoMCwgb3V0cHV0 KTsKKwkJCQlzZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0LCBIRENQX0NQX05PVF9ERVNJUkVEKTsK KwkJCX0KKwkJZWxzZSB7CisJCQljYWxsYmFja19pbl9tcygwLCBvdXRwdXQpOworCQkJc2V0X3N0 YXRlX2lkKGhkY3AsIG91dHB1dCwgSERDUF9DUF9OT1RfREVTSVJFRCk7CisJCX0KKwl9IGVsc2Ug aWYgKGlzX2luX2NwX25vdF9kZXNpcmVkX3N0YXRlKGhkY3ApKSB7CisJCWluY3JlbWVudF9zdGF5 X2NvdW50ZXIoaGRjcCk7CisJfSBlbHNlIGlmIChpc19pbl9oZGNwMV9zdGF0ZXMoaGRjcCkpIHsK KwkJc3RhdHVzID0gbW9kX2hkY3BfaGRjcDFfdHJhbnNpdGlvbihoZGNwLAorCQkJCWV2ZW50X2N0 eCwgJmlucHV0LT5oZGNwMSwgb3V0cHV0KTsKKwl9IGVsc2UgaWYgKGlzX2luX2hkY3AxX2RwX3N0 YXRlcyhoZGNwKSkgeworCQlzdGF0dXMgPSBtb2RfaGRjcF9oZGNwMV9kcF90cmFuc2l0aW9uKGhk Y3AsCisJCQkJZXZlbnRfY3R4LCAmaW5wdXQtPmhkY3AxLCBvdXRwdXQpOworCX0gZWxzZSB7CisJ CXN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19JTlZBTElEX1NUQVRFOworCX0KK291dDoKKwlyZXR1 cm4gc3RhdHVzOworfQorCitzdGF0aWMgZW51bSBtb2RfaGRjcF9zdGF0dXMgcmVzZXRfYXV0aGVu dGljYXRpb24oc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQlzdHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0 ICpvdXRwdXQpCit7CisJZW51bSBtb2RfaGRjcF9zdGF0dXMgc3RhdHVzID0gTU9EX0hEQ1BfU1RB VFVTX1NVQ0NFU1M7CisKKwlpZiAoaXNfaGRjcDEoaGRjcCkpIHsKKwkJaWYgKGhkY3AtPmF1dGgu dHJhbnNfaW5wdXQuaGRjcDEuY3JlYXRlX3Nlc3Npb24gIT0gVU5LTk9XTikKKwkJCW1vZF9oZGNw X2hkY3AxX2Rlc3Ryb3lfc2Vzc2lvbihoZGNwKTsKKworCQlpZiAoaGRjcC0+YXV0aC50cmFuc19p bnB1dC5oZGNwMS5hZGRfdG9wb2xvZ3kgPT0gUEFTUykgeworCQkJc3RhdHVzID0gbW9kX2hkY3Bf cmVtb3ZlX2Rpc3BsYXlfdG9wb2xvZ3koaGRjcCk7CisJCQlpZiAoc3RhdHVzICE9IE1PRF9IRENQ X1NUQVRVU19TVUNDRVNTKSB7CisJCQkJb3V0cHV0LT5jYWxsYmFja19uZWVkZWQgPSAwOworCQkJ CW91dHB1dC0+d2F0Y2hkb2dfdGltZXJfbmVlZGVkID0gMDsKKwkJCQlnb3RvIG91dDsKKwkJCX0K KwkJfQorCQlIRENQX1RPUF9SRVNFVF9BVVRIX1RSQUNFKGhkY3ApOworCQltZW1zZXQoJmhkY3At PmF1dGgsIDAsIHNpemVvZihzdHJ1Y3QgbW9kX2hkY3BfYXV0aGVudGljYXRpb24pKTsKKwkJbWVt c2V0KCZoZGNwLT5zdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBtb2RfaGRjcF9zdGF0ZSkpOworCQlz ZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0LCBIRENQX0lOSVRJQUxJWkVEKTsKKwl9IGVsc2UgaWYg KGlzX2luX2NwX25vdF9kZXNpcmVkX3N0YXRlKGhkY3ApKSB7CisJCXN0YXR1cyA9IG1vZF9oZGNw X3JlbW92ZV9kaXNwbGF5X3RvcG9sb2d5KGhkY3ApOworCQlpZiAoc3RhdHVzICE9IE1PRF9IRENQ X1NUQVRVU19TVUNDRVNTKSB7CisJCQlvdXRwdXQtPmNhbGxiYWNrX25lZWRlZCA9IDA7CisJCQlv dXRwdXQtPndhdGNoZG9nX3RpbWVyX25lZWRlZCA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCQlI RENQX1RPUF9SRVNFVF9BVVRIX1RSQUNFKGhkY3ApOworCQltZW1zZXQoJmhkY3AtPmF1dGgsIDAs IHNpemVvZihzdHJ1Y3QgbW9kX2hkY3BfYXV0aGVudGljYXRpb24pKTsKKwkJbWVtc2V0KCZoZGNw LT5zdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBtb2RfaGRjcF9zdGF0ZSkpOworCQlzZXRfc3RhdGVf aWQoaGRjcCwgb3V0cHV0LCBIRENQX0lOSVRJQUxJWkVEKTsKKwl9CisKK291dDoKKwkvKiBzdG9w IGNhbGxiYWNrIGFuZCB3YXRjaGRvZyByZXF1ZXN0cyBmcm9tIHByZXZpb3VzIGF1dGhlbnRpY2F0 aW9uKi8KKwlvdXRwdXQtPndhdGNoZG9nX3RpbWVyX3N0b3AgPSAxOworCW91dHB1dC0+Y2FsbGJh Y2tfc3RvcCA9IDE7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGVudW0gbW9kX2hkY3Bf c3RhdHVzIHJlc2V0X2Nvbm5lY3Rpb24oc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQlzdHJ1Y3Qg bW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQpCit7CisJZW51bSBtb2RfaGRjcF9zdGF0dXMgc3RhdHVz ID0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1M7CisKKwltZW1zZXQob3V0cHV0LCAwLCBzaXplb2Yo c3RydWN0IG1vZF9oZGNwX291dHB1dCkpOworCisJc3RhdHVzID0gcmVzZXRfYXV0aGVudGljYXRp b24oaGRjcCwgb3V0cHV0KTsKKwlpZiAoc3RhdHVzICE9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNT KQorCQlnb3RvIG91dDsKKworCWlmIChjdXJyZW50X3N0YXRlKGhkY3ApICE9IEhEQ1BfVU5JTklU SUFMSVpFRCkgeworCQlIRENQX1RPUF9SRVNFVF9DT05OX1RSQUNFKGhkY3ApOworCQlzZXRfc3Rh dGVfaWQoaGRjcCwgb3V0cHV0LCBIRENQX1VOSU5JVElBTElaRUQpOworCX0KKwltZW1zZXQoJmhk Y3AtPmNvbm5lY3Rpb24sIDAsIHNpemVvZihoZGNwLT5jb25uZWN0aW9uKSk7CitvdXQ6CisJcmV0 dXJuIHN0YXR1czsKK30KKworLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBpbiBt b2RfaGRjcC5oCisgKi8KK3NpemVfdCBtb2RfaGRjcF9nZXRfbWVtb3J5X3NpemUodm9pZCkKK3sK KwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBtb2RfaGRjcCk7Cit9CisKK2VudW0gbW9kX2hkY3Bfc3Rh dHVzIG1vZF9oZGNwX3NldHVwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJc3RydWN0IG1vZF9o ZGNwX2NvbmZpZyAqY29uZmlnKQoreworCXN0cnVjdCBtb2RfaGRjcF9vdXRwdXQgb3V0cHV0Owor CWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOwor CisJbWVtc2V0KGhkY3AsIDAsIHNpemVvZihzdHJ1Y3QgbW9kX2hkY3ApKTsKKwltZW1zZXQoJm91 dHB1dCwgMCwgc2l6ZW9mKG91dHB1dCkpOworCWhkY3AtPmNvbmZpZyA9ICpjb25maWc7CisJSERD UF9UT1BfSU5URVJGQUNFX1RSQUNFKGhkY3ApOworCXN0YXR1cyA9IHJlc2V0X2Nvbm5lY3Rpb24o aGRjcCwgJm91dHB1dCk7CisJaWYgKHN0YXR1cyAhPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUykK KwkJcHVzaF9lcnJvcl9zdGF0dXMoaGRjcCwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQor CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF90ZWFyZG93bihzdHJ1Y3QgbW9kX2hkY3Ag KmhkY3ApCit7CisJZW51bSBtb2RfaGRjcF9zdGF0dXMgc3RhdHVzID0gTU9EX0hEQ1BfU1RBVFVT X1NVQ0NFU1M7CisJc3RydWN0IG1vZF9oZGNwX291dHB1dCBvdXRwdXQ7CisKKwlIRENQX1RPUF9J TlRFUkZBQ0VfVFJBQ0UoaGRjcCk7CisJbWVtc2V0KCZvdXRwdXQsIDAsICBzaXplb2Yob3V0cHV0 KSk7CisJc3RhdHVzID0gcmVzZXRfY29ubmVjdGlvbihoZGNwLCAmb3V0cHV0KTsKKwlpZiAoc3Rh dHVzID09IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTKQorCQltZW1zZXQoaGRjcCwgMCwgc2l6ZW9m KHN0cnVjdCBtb2RfaGRjcCkpOworCWVsc2UKKwkJcHVzaF9lcnJvcl9zdGF0dXMoaGRjcCwgc3Rh dHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRj cF9hZGRfZGlzcGxheShzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9s aW5rICpsaW5rLCBzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheSAqZGlzcGxheSwKKwkJc3RydWN0IG1v ZF9oZGNwX291dHB1dCAqb3V0cHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1cyA9 IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCXN0cnVjdCBtb2RfaGRjcF9kaXNwbGF5ICpkaXNw bGF5X2NvbnRhaW5lciA9IE5VTEw7CisKKwlIRENQX1RPUF9JTlRFUkZBQ0VfVFJBQ0VfV0lUSF9J TkRFWChoZGNwLCBkaXNwbGF5LT5pbmRleCk7CisJbWVtc2V0KG91dHB1dCwgMCwgc2l6ZW9mKHN0 cnVjdCBtb2RfaGRjcF9vdXRwdXQpKTsKKworCS8qIHNraXAgaW5hY3RpdmUgZGlzcGxheSAqLwor CWlmIChkaXNwbGF5LT5zdGF0ZSAhPSBNT0RfSERDUF9ESVNQTEFZX0FDVElWRSkgeworCQlzdGF0 dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY2hl Y2sgZXhpc3RpbmcgZGlzcGxheSBjb250YWluZXIgKi8KKwlpZiAoZ2V0X2FjdGl2ZV9kaXNwbGF5 X2F0X2luZGV4KGhkY3AsIGRpc3BsYXktPmluZGV4KSkgeworCQlzdGF0dXMgPSBNT0RfSERDUF9T VEFUVVNfU1VDQ0VTUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyogZmluZCBhbiBlbXB0eSBkaXNw bGF5IGNvbnRhaW5lciAqLworCWRpc3BsYXlfY29udGFpbmVyID0gZ2V0X2VtcHR5X2Rpc3BsYXlf Y29udGFpbmVyKGhkY3ApOworCWlmICghZGlzcGxheV9jb250YWluZXIpIHsKKwkJc3RhdHVzID0g TU9EX0hEQ1BfU1RBVFVTX0RJU1BMQVlfT1VUX09GX0JPVU5EOworCQlnb3RvIG91dDsKKwl9CisK KwkvKiByZXNldCBleGlzdGluZyBhdXRoZW50aWNhdGlvbiBzdGF0dXMgKi8KKwlzdGF0dXMgPSBy ZXNldF9hdXRoZW50aWNhdGlvbihoZGNwLCBvdXRwdXQpOworCWlmIChzdGF0dXMgIT0gTU9EX0hE Q1BfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gb3V0OworCisJLyogYWRkIGRpc3BsYXkgdG8gY29u bmVjdGlvbiAqLworCWhkY3AtPmNvbm5lY3Rpb24ubGluayA9ICpsaW5rOworCSpkaXNwbGF5X2Nv bnRhaW5lciA9ICpkaXNwbGF5OworCisJLyogcmVzZXQgcmV0cnkgY291bnRlcnMgKi8KKwlyZXNl dF9yZXRyeV9jb3VudHMoaGRjcCk7CisKKwkvKiByZXNldCBlcnJvciB0cmFjZSAqLworCW1lbXNl dCgmaGRjcC0+Y29ubmVjdGlvbi50cmFjZSwgMCwgc2l6ZW9mKGhkY3AtPmNvbm5lY3Rpb24udHJh Y2UpKTsKKworCS8qIHJlcXVlc3QgYXV0aGVudGljYXRpb24gKi8KKwlpZiAoY3VycmVudF9zdGF0 ZShoZGNwKSAhPSBIRENQX0lOSVRJQUxJWkVEKQorCQlzZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0 LCBIRENQX0lOSVRJQUxJWkVEKTsKKwljYWxsYmFja19pbl9tcyhoZGNwLT5jb25uZWN0aW9uLmxp bmsuYWRqdXN0LmF1dGhfZGVsYXkgKiAxMDAwLCBvdXRwdXQpOworb3V0OgorCWlmIChzdGF0dXMg IT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MpCisJCXB1c2hfZXJyb3Jfc3RhdHVzKGhkY3AsIHN0 YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2Rf aGRjcF9yZW1vdmVfZGlzcGxheShzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXVpbnQ4X3QgaW5k ZXgsIHN0cnVjdCBtb2RfaGRjcF9vdXRwdXQgKm91dHB1dCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0 YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKwlzdHJ1Y3QgbW9kX2hkY3Bf ZGlzcGxheSAqZGlzcGxheSA9IE5VTEw7CisKKwlIRENQX1RPUF9JTlRFUkZBQ0VfVFJBQ0VfV0lU SF9JTkRFWChoZGNwLCBpbmRleCk7CisJbWVtc2V0KG91dHB1dCwgMCwgc2l6ZW9mKHN0cnVjdCBt b2RfaGRjcF9vdXRwdXQpKTsKKworCS8qIGZpbmQgZGlzcGxheSBpbiBjb25uZWN0aW9uICovCisJ ZGlzcGxheSA9IGdldF9hY3RpdmVfZGlzcGxheV9hdF9pbmRleChoZGNwLCBpbmRleCk7CisJaWYg KCFkaXNwbGF5KSB7CisJCXN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCQlnb3Rv IG91dDsKKwl9CisKKwkvKiBzdG9wIGN1cnJlbnQgYXV0aGVudGljYXRpb24gKi8KKwlzdGF0dXMg PSByZXNldF9hdXRoZW50aWNhdGlvbihoZGNwLCBvdXRwdXQpOworCWlmIChzdGF0dXMgIT0gTU9E X0hEQ1BfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gb3V0OworCisJLyogcmVtb3ZlIGRpc3BsYXkg Ki8KKwlkaXNwbGF5LT5zdGF0ZSA9IE1PRF9IRENQX0RJU1BMQVlfSU5BQ1RJVkU7CisKKwkvKiBj bGVhciByZXRyeSBjb3VudGVycyAqLworCXJlc2V0X3JldHJ5X2NvdW50cyhoZGNwKTsKKworCS8q IHJlc2V0IGVycm9yIHRyYWNlICovCisJbWVtc2V0KCZoZGNwLT5jb25uZWN0aW9uLnRyYWNlLCAw LCBzaXplb2YoaGRjcC0+Y29ubmVjdGlvbi50cmFjZSkpOworCisJLyogcmVxdWVzdCBhdXRoZW50 aWNhdGlvbiBmb3IgcmVtYWluaW5nIGRpc3BsYXlzKi8KKwlpZiAoZ2V0X2FjdGl2ZV9kaXNwbGF5 X2NvdW50KGhkY3ApID4gMCkKKwkJY2FsbGJhY2tfaW5fbXMoaGRjcC0+Y29ubmVjdGlvbi5saW5r LmFkanVzdC5hdXRoX2RlbGF5ICogMTAwMCwKKwkJCQlvdXRwdXQpOworb3V0OgorCWlmIChzdGF0 dXMgIT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MpCisJCXB1c2hfZXJyb3Jfc3RhdHVzKGhkY3As IHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9k X2hkY3BfcXVlcnlfZGlzcGxheShzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXVpbnQ4X3QgaW5k ZXgsIHN0cnVjdCBtb2RfaGRjcF9kaXNwbGF5X3F1ZXJ5ICpxdWVyeSkKK3sKKwllbnVtIG1vZF9o ZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKwlzdHJ1Y3QgbW9k X2hkY3BfZGlzcGxheSAqZGlzcGxheSA9IE5VTEw7CisKKwkvKiBmaW5kIGRpc3BsYXkgaW4gY29u bmVjdGlvbiAqLworCWRpc3BsYXkgPSBnZXRfYWN0aXZlX2Rpc3BsYXlfYXRfaW5kZXgoaGRjcCwg aW5kZXgpOworCWlmICghZGlzcGxheSkgeworCQlzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfRElT UExBWV9OT1RfRk9VTkQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHBvcHVsYXRlIHF1ZXJ5ICov CisJcXVlcnktPmxpbmsgPSAmaGRjcC0+Y29ubmVjdGlvbi5saW5rOworCXF1ZXJ5LT5kaXNwbGF5 ID0gZGlzcGxheTsKKwlxdWVyeS0+dHJhY2UgPSAmaGRjcC0+Y29ubmVjdGlvbi50cmFjZTsKKwlx dWVyeS0+ZW5jcnlwdGlvbl9zdGF0dXMgPSBNT0RfSERDUF9FTkNSWVBUSU9OX1NUQVRVU19IRENQ X09GRjsKKworCW1vZF9oZGNwX2hkY3AxX2dldF9saW5rX2VuY3J5cHRpb25fc3RhdHVzKGhkY3As ICZxdWVyeS0+ZW5jcnlwdGlvbl9zdGF0dXMpOworCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30K KworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfcmVzZXRfY29ubmVjdGlvbihzdHJ1Y3Qg bW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9vdXRwdXQgKm91dHB1dCkKK3sKKwll bnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKwor CUhEQ1BfVE9QX0lOVEVSRkFDRV9UUkFDRShoZGNwKTsKKwlzdGF0dXMgPSByZXNldF9jb25uZWN0 aW9uKGhkY3AsIG91dHB1dCk7CisJaWYgKHN0YXR1cyAhPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VT UykKKwkJcHVzaF9lcnJvcl9zdGF0dXMoaGRjcCwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7 Cit9CisKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3Byb2Nlc3NfZXZlbnQoc3RydWN0 IG1vZF9oZGNwICpoZGNwLAorCQllbnVtIG1vZF9oZGNwX2V2ZW50IGV2ZW50LCBzdHJ1Y3QgbW9k X2hkY3Bfb3V0cHV0ICpvdXRwdXQpCit7CisJZW51bSBtb2RfaGRjcF9zdGF0dXMgZXhlY19zdGF0 dXMsIHRyYW5zX3N0YXR1cywgcmVzZXRfc3RhdHVzLCBzdGF0dXM7CisJc3RydWN0IG1vZF9oZGNw X2V2ZW50X2NvbnRleHQgZXZlbnRfY3R4OworCisJSERDUF9FVkVOVF9UUkFDRShoZGNwLCBldmVu dCk7CisJbWVtc2V0KG91dHB1dCwgMCwgc2l6ZW9mKHN0cnVjdCBtb2RfaGRjcF9vdXRwdXQpKTsK KwltZW1zZXQoJmV2ZW50X2N0eCwgMCwgc2l6ZW9mKHN0cnVjdCBtb2RfaGRjcF9ldmVudF9jb250 ZXh0KSk7CisJZXZlbnRfY3R4LmV2ZW50ID0gZXZlbnQ7CisKKwkvKiBleGVjdXRlIGFuZCB0cmFu c2l0aW9uICovCisJZXhlY19zdGF0dXMgPSBleGVjdXRpb24oaGRjcCwgJmV2ZW50X2N0eCwgJmhk Y3AtPmF1dGgudHJhbnNfaW5wdXQpOworCXRyYW5zX3N0YXR1cyA9IHRyYW5zaXRpb24oCisJCQlo ZGNwLCAmZXZlbnRfY3R4LCAmaGRjcC0+YXV0aC50cmFuc19pbnB1dCwgb3V0cHV0KTsKKwlpZiAo dHJhbnNfc3RhdHVzID09IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTKSB7CisJCXN0YXR1cyA9IE1P RF9IRENQX1NUQVRVU19TVUNDRVNTOworCX0gZWxzZSBpZiAoZXhlY19zdGF0dXMgPT0gTU9EX0hE Q1BfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJc3RhdHVzID0gTU9EX0hEQ1BfU1RBVFVTX0lOVEVSTkFM X1BPTElDWV9GQUlMVVJFOworCQlwdXNoX2Vycm9yX3N0YXR1cyhoZGNwLCBzdGF0dXMpOworCX0g ZWxzZSB7CisJCXN0YXR1cyA9IGV4ZWNfc3RhdHVzOworCQlwdXNoX2Vycm9yX3N0YXR1cyhoZGNw LCBzdGF0dXMpOworCX0KKworCS8qIHJlc2V0IGF1dGhlbnRpY2F0aW9uIGlmIG5lZWRlZCAqLwor CWlmICh0cmFuc19zdGF0dXMgPT0gTU9EX0hEQ1BfU1RBVFVTX1JFU0VUX05FRURFRCkgeworCQlI RENQX0ZVTExfRERDX1RSQUNFKGhkY3ApOworCQlyZXNldF9zdGF0dXMgPSByZXNldF9hdXRoZW50 aWNhdGlvbihoZGNwLCBvdXRwdXQpOworCQlpZiAocmVzZXRfc3RhdHVzICE9IE1PRF9IRENQX1NU QVRVU19TVUNDRVNTKQorCQkJcHVzaF9lcnJvcl9zdGF0dXMoaGRjcCwgcmVzZXRfc3RhdHVzKTsK Kwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworZW51bSBtb2RfaGRjcF9vcGVyYXRpb25fbW9kZSBt b2RfaGRjcF9zaWduYWxfdHlwZV90b19vcGVyYXRpb25fbW9kZSgKKwkJZW51bSBzaWduYWxfdHlw ZSBzaWduYWwpCit7CisJZW51bSBtb2RfaGRjcF9vcGVyYXRpb25fbW9kZSBtb2RlID0gTU9EX0hE Q1BfTU9ERV9PRkY7CisKKwlzd2l0Y2ggKHNpZ25hbCkgeworCWNhc2UgU0lHTkFMX1RZUEVfRFZJ X1NJTkdMRV9MSU5LOgorCWNhc2UgU0lHTkFMX1RZUEVfSERNSV9UWVBFX0E6CisJCW1vZGUgPSBN T0RfSERDUF9NT0RFX0RFRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgU0lHTkFMX1RZUEVfRURQOgor CWNhc2UgU0lHTkFMX1RZUEVfRElTUExBWV9QT1JUOgorCQltb2RlID0gTU9EX0hEQ1BfTU9ERV9E UDsKKwkJYnJlYWs7CisJY2FzZSBTSUdOQUxfVFlQRV9ESVNQTEFZX1BPUlRfTVNUOgorCQltb2Rl ID0gTU9EX0hEQ1BfTU9ERV9EUF9NU1Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwor CX07CisKKwlyZXR1cm4gbW9kZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5 L21vZHVsZXMvaGRjcC9oZGNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi40MDJiYjc5OTkwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3AuaApAQCAtMCwwICsxLDQ0MiBAQAorLyoKKyAqIENv cHlyaWdodCAyMDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFV VEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K KyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2lmbmRlZiBIRENQX0hfCisjZGVmaW5l IEhEQ1BfSF8KKworI2luY2x1ZGUgIm1vZF9oZGNwLmgiCisjaW5jbHVkZSAiaGRjcF9sb2cuaCIK KworI2RlZmluZSBCQ0FQU19SRUFEWV9NQVNLCQkJCTB4MjAKKyNkZWZpbmUgQkNBUFNfUkVQRUFU RVJfTUFTSwkJCQkweDQwCisjZGVmaW5lIEJTVEFUVVNfREVWSUNFX0NPVU5UX01BU0sJCQkwWDAw N0YKKyNkZWZpbmUgQlNUQVRVU19NQVhfREVWU19FWENFRURFRF9NQVNLCQkJMHgwMDgwCisjZGVm aW5lIEJTVEFUVVNfTUFYX0NBU0NBREVfRVhDRUVERURfTUFTSwkJMHgwODAwCisjZGVmaW5lIEJD QVBTX0hEQ1BfQ0FQQUJMRV9NQVNLX0RQCQkJMHgwMQorI2RlZmluZSBCQ0FQU19SRVBFQVRFUl9N QVNLX0RQCQkJCTB4MDIKKyNkZWZpbmUgQlNUQVRVU19SRUFEWV9NQVNLX0RQCQkJCTB4MDEKKyNk ZWZpbmUgQlNUQVRVU19SMF9QX0FWQUlMQUJMRV9NQVNLX0RQCQkJMHgwMgorI2RlZmluZSBCU1RB VFVTX0xJTktfSU5URUdSSVRZX0ZBSUxVUkVfTUFTS19EUAkJMHgwNAorI2RlZmluZSBCU1RBVFVT X1JFQVVUSF9SRVFVRVNUX01BU0tfRFAJCQkweDA4CisjZGVmaW5lIEJJTkZPX0RFVklDRV9DT1VO VF9NQVNLX0RQCQkJMFgwMDdGCisjZGVmaW5lIEJJTkZPX01BWF9ERVZTX0VYQ0VFREVEX01BU0tf RFAJCQkweDAwODAKKyNkZWZpbmUgQklORk9fTUFYX0NBU0NBREVfRVhDRUVERURfTUFTS19EUAkJ MHgwODAwCisKKyNkZWZpbmUgUlhTVEFUVVNfTVNHX1NJWkVfTUFTSwkJCQkweDAzRkYKKyNkZWZp bmUgUlhTVEFUVVNfUkVBRFlfTUFTSwkJCQkweDA0MDAKKyNkZWZpbmUgUlhTVEFUVVNfUkVBVVRI X1JFUVVFU1RfTUFTSwkJCTB4MDgwMAorI2RlZmluZSBSWElETElTVF9ERVZJQ0VfQ09VTlRfTE9X RVJfTUFTSwkJMHhmMAorI2RlZmluZSBSWElETElTVF9ERVZJQ0VfQ09VTlRfVVBQRVJfTUFTSwkJ MHgwMQorI2RlZmluZSBSWENBUFNfQllURTBfSERDUF9DQVBBQkxFX01BU0tfRFAJCTB4MDIKKyNk ZWZpbmUgUlhTVEFUVVNfUkVBRFlfTUFTS19EUAkJCQkweDAwMDEKKyNkZWZpbmUgUlhTVEFUVVNf SF9QX0FWQUlMQUJMRV9NQVNLX0RQCQkJMHgwMDAyCisjZGVmaW5lIFJYU1RBVFVTX1BBSVJJTkdf QVZBSUxBQkxFX01BU0tfRFAJCTB4MDAwNAorI2RlZmluZSBSWFNUQVRVU19SRUFVVEhfUkVRVUVT VF9NQVNLX0RQCQkJMHgwMDA4CisjZGVmaW5lIFJYU1RBVFVTX0xJTktfSU5URUdSSVRZX0ZBSUxV UkVfTUFTS19EUAkJMHgwMDEwCisKK2VudW0gbW9kX2hkY3BfdHJhbnNfaW5wdXRfcmVzdWx0IHsK KwlVTktOT1dOID0gMCwKKwlQQVNTLAorCUZBSUwKK307CisKK3N0cnVjdCBtb2RfaGRjcF90cmFu c2l0aW9uX2lucHV0X2hkY3AxIHsKKwl1aW50OF90IGJrc3ZfcmVhZDsKKwl1aW50OF90IGJrc3Zf dmFsaWRhdGlvbjsKKwl1aW50OF90IGFkZF90b3BvbG9neTsKKwl1aW50OF90IGNyZWF0ZV9zZXNz aW9uOworCXVpbnQ4X3QgYW5fd3JpdGU7CisJdWludDhfdCBha3N2X3dyaXRlOworCXVpbnQ4X3Qg YWluZm9fd3JpdGU7CisJdWludDhfdCBiY2Fwc19yZWFkOworCXVpbnQ4X3QgcjBwX3JlYWQ7CisJ dWludDhfdCByeF92YWxpZGF0aW9uOworCXVpbnQ4X3QgZW5jcnlwdGlvbjsKKwl1aW50OF90IGxp bmtfbWFpbnRlbmFuY2U7CisJdWludDhfdCByZWFkeV9jaGVjazsKKwl1aW50OF90IGJzdGF0dXNf cmVhZDsKKwl1aW50OF90IG1heF9jYXNjYWRlX2NoZWNrOworCXVpbnQ4X3QgbWF4X2RldnNfY2hl Y2s7CisJdWludDhfdCBkZXZpY2VfY291bnRfY2hlY2s7CisJdWludDhfdCBrc3ZsaXN0X3JlYWQ7 CisJdWludDhfdCB2cF9yZWFkOworCXVpbnQ4X3Qga3N2bGlzdF92cF92YWxpZGF0aW9uOworCisJ dWludDhfdCBoZGNwX2NhcGFibGVfZHA7CisJdWludDhfdCBiaW5mb19yZWFkX2RwOworCXVpbnQ4 X3QgcjBwX2F2YWlsYWJsZV9kcDsKKwl1aW50OF90IGxpbmtfaW50ZWdpcnlfY2hlY2s7CisJdWlu dDhfdCByZWF1dGhfcmVxdWVzdF9jaGVjazsKKwl1aW50OF90IHN0cmVhbV9lbmNyeXB0aW9uX2Rw OworfTsKKwordW5pb24gbW9kX2hkY3BfdHJhbnNpdGlvbl9pbnB1dCB7CisJc3RydWN0IG1vZF9o ZGNwX3RyYW5zaXRpb25faW5wdXRfaGRjcDEgaGRjcDE7Cit9OworCitzdHJ1Y3QgbW9kX2hkY3Bf bWVzc2FnZV9oZGNwMSB7CisJdWludDhfdAkJYW5bOF07CisJdWludDhfdAkJYWtzdls1XTsKKwl1 aW50OF90CQlhaW5mbzsKKwl1aW50OF90CQlia3N2WzVdOworCXVpbnQxNl90CXIwcDsKKwl1aW50 OF90CQliY2FwczsKKwl1aW50MTZfdAlic3RhdHVzOworCXVpbnQ4X3QJCWtzdmxpc3RbNjM1XTsK Kwl1aW50MTZfdAlrc3ZsaXN0X3NpemU7CisJdWludDhfdAkJdnBbMjBdOworCisJdWludDE2X3QJ YmluZm9fZHA7Cit9OworCit1bmlvbiBtb2RfaGRjcF9tZXNzYWdlIHsKKwlzdHJ1Y3QgbW9kX2hk Y3BfbWVzc2FnZV9oZGNwMSBoZGNwMTsKK307CisKK3N0cnVjdCBtb2RfaGRjcF9hdXRoX2NvdW50 ZXJzIHsKKwl1aW50OF90IHN0cmVhbV9tYW5hZ2VtZW50X3JldHJ5X2NvdW50OworfTsKKworLyog Y29udGFpbnMgdmFsdWVzIHBlciBjb25uZWN0aW9uICovCitzdHJ1Y3QgbW9kX2hkY3BfY29ubmVj dGlvbiB7CisJc3RydWN0IG1vZF9oZGNwX2xpbmsgbGluazsKKwlzdHJ1Y3QgbW9kX2hkY3BfZGlz cGxheSBkaXNwbGF5c1tNQVhfTlVNX09GX0RJU1BMQVlTXTsKKwl1aW50OF90IGlzX3JlcGVhdGVy OworCXVpbnQ4X3QgaXNfa21fc3RvcmVkOworCXN0cnVjdCBtb2RfaGRjcF90cmFjZSB0cmFjZTsK Kwl1aW50OF90IGhkY3AxX3JldHJ5X2NvdW50OworfTsKKworLyogY29udGFpbnMgdmFsdWVzIHBl ciBhdXRoZW50aWNhdGlvbiBjeWNsZSAqLworc3RydWN0IG1vZF9oZGNwX2F1dGhlbnRpY2F0aW9u IHsKKwl1aW50MzJfdCBpZDsKKwl1bmlvbiBtb2RfaGRjcF9tZXNzYWdlIG1zZzsKKwl1bmlvbiBt b2RfaGRjcF90cmFuc2l0aW9uX2lucHV0IHRyYW5zX2lucHV0OworCXN0cnVjdCBtb2RfaGRjcF9h dXRoX2NvdW50ZXJzIGNvdW50OworfTsKKworLyogY29udGFpbnMgdmFsdWVzIHBlciBzdGF0ZSBj aGFuZ2UgKi8KK3N0cnVjdCBtb2RfaGRjcF9zdGF0ZSB7CisJdWludDhfdCBpZDsKKwl1aW50MzJf dCBzdGF5X2NvdW50OworfTsKKworLyogcGVyIGV2ZW50IGluIGEgc3RhdGUgKi8KK3N0cnVjdCBt b2RfaGRjcF9ldmVudF9jb250ZXh0IHsKKwllbnVtIG1vZF9oZGNwX2V2ZW50IGV2ZW50OworCXVp bnQ4X3QgcnhfaWRfbGlzdF9yZWFkeTsKKwl1aW50OF90IHVuZXhwZWN0ZWRfZXZlbnQ7Cit9Owor CitzdHJ1Y3QgbW9kX2hkY3AgeworCS8qIHBlciBsaW5rICovCisJc3RydWN0IG1vZF9oZGNwX2Nv bmZpZyBjb25maWc7CisJLyogcGVyIGNvbm5lY3Rpb24gKi8KKwlzdHJ1Y3QgbW9kX2hkY3BfY29u bmVjdGlvbiBjb25uZWN0aW9uOworCS8qIHBlciBhdXRoZW50aWNhdGlvbiBhdHRlbXB0ICovCisJ c3RydWN0IG1vZF9oZGNwX2F1dGhlbnRpY2F0aW9uIGF1dGg7CisJLyogcGVyIHN0YXRlIGluIGFu IGF1dGhlbnRpY2F0aW9uICovCisJc3RydWN0IG1vZF9oZGNwX3N0YXRlIHN0YXRlOworCS8qIHJl c2VydmVkIG1lbW9yeSBidWZmZXIgKi8KKwl1aW50OF90IGJ1ZlsyMDI1XTsKK307CisKK2VudW0g bW9kX2hkY3BfaW5pdGlhbF9zdGF0ZV9pZCB7CisJSERDUF9VTklOSVRJQUxJWkVEID0gMHgwLAor CUhEQ1BfSU5JVElBTF9TVEFURV9TVEFSVCA9IEhEQ1BfVU5JTklUSUFMSVpFRCwKKwlIRENQX0lO SVRJQUxJWkVELAorCUhEQ1BfQ1BfTk9UX0RFU0lSRUQsCisJSERDUF9JTklUSUFMX1NUQVRFX0VO RCA9IEhEQ1BfQ1BfTk9UX0RFU0lSRUQKK307CisKK2VudW0gbW9kX2hkY3BfaGRjcDFfc3RhdGVf aWQgeworCUhEQ1AxX1NUQVRFX1NUQVJUID0gSERDUF9JTklUSUFMX1NUQVRFX0VORCwKKwlIMV9B MF9XQUlUX0ZPUl9BQ1RJVkVfUlgsCisJSDFfQTFfRVhDSEFOR0VfS1NWUywKKwlIMV9BMl9DT01Q VVRBVElPTlNfQTNfVkFMSURBVEVfUlhfQTZfVEVTVF9GT1JfUkVQRUFURVIsCisJSDFfQTQ1X0FV VEhFTklDQVRFRCwKKwlIMV9BOF9XQUlUX0ZPUl9SRUFEWSwKKwlIMV9BOV9SRUFEX0tTVl9MSVNU LAorCUhEQ1AxX1NUQVRFX0VORCA9IEgxX0E5X1JFQURfS1NWX0xJU1QKK307CisKK2VudW0gbW9k X2hkY3BfaGRjcDFfZHBfc3RhdGVfaWQgeworCUhEQ1AxX0RQX1NUQVRFX1NUQVJUID0gSERDUDFf U1RBVEVfRU5ELAorCUQxX0EwX0RFVEVSTUlORV9SWF9IRENQX0NBUEFCTEUsCisJRDFfQTFfRVhD SEFOR0VfS1NWUywKKwlEMV9BMjNfV0FJVF9GT1JfUjBfUFJJTUUsCisJRDFfQTJfQ09NUFVUQVRJ T05TX0EzX1ZBTElEQVRFX1JYX0E1X1RFU1RfRk9SX1JFUEVBVEVSLAorCUQxX0E0X0FVVEhFTklD QVRFRCwKKwlEMV9BNl9XQUlUX0ZPUl9SRUFEWSwKKwlEMV9BN19SRUFEX0tTVl9MSVNULAorCUhE Q1AxX0RQX1NUQVRFX0VORCA9IEQxX0E3X1JFQURfS1NWX0xJU1QsCit9OworCisvKiBoZGNwMSBl eGVjdXRpb25zIGFuZCB0cmFuc2l0aW9ucyAqLwordHlwZWRlZiBlbnVtIG1vZF9oZGNwX3N0YXR1 cyAoKm1vZF9oZGNwX2FjdGlvbikoc3RydWN0IG1vZF9oZGNwICpoZGNwKTsKK3VpbnQ4X3QgbW9k X2hkY3BfZXhlY3V0ZV9hbmRfc2V0KAorCQltb2RfaGRjcF9hY3Rpb24gZnVuYywgdWludDhfdCAq ZmxhZywKKwkJZW51bSBtb2RfaGRjcF9zdGF0dXMgKnN0YXR1cywgc3RydWN0IG1vZF9oZGNwICpo ZGNwLCBjaGFyICpzdHIpOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfaGRjcDFfZXhl Y3V0aW9uKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwlzdHJ1Y3QgbW9kX2hkY3BfZXZlbnRfY29u dGV4dCAqZXZlbnRfY3R4LAorCXN0cnVjdCBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hkY3Ax ICppbnB1dCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9oZGNwMV9kcF9leGVjdXRp b24oc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0 ICpldmVudF9jdHgsCisJc3RydWN0IG1vZF9oZGNwX3RyYW5zaXRpb25faW5wdXRfaGRjcDEgKmlu cHV0KTsKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX2hkY3AxX3RyYW5zaXRpb24oc3Ry dWN0IG1vZF9oZGNwICpoZGNwLAorCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVu dF9jdHgsCisJc3RydWN0IG1vZF9oZGNwX3RyYW5zaXRpb25faW5wdXRfaGRjcDEgKmlucHV0LAor CXN0cnVjdCBtb2RfaGRjcF9vdXRwdXQgKm91dHB1dCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBt b2RfaGRjcF9oZGNwMV9kcF90cmFuc2l0aW9uKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwlzdHJ1 Y3QgbW9kX2hkY3BfZXZlbnRfY29udGV4dCAqZXZlbnRfY3R4LAorCXN0cnVjdCBtb2RfaGRjcF90 cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCwKKwlzdHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0ICpv dXRwdXQpOworCisvKiBsb2cgZnVuY3Rpb25zICovCit2b2lkIG1vZF9oZGNwX2R1bXBfYmluYXJ5 X21lc3NhZ2UodWludDhfdCAqbXNnLCB1aW50MzJfdCBtc2dfc2l6ZSwKKwkJdWludDhfdCAqYnVm LCB1aW50MzJfdCBidWZfc2l6ZSk7CisvKiBUT0RPOiBhZGQgYWRqdXN0bWVudCBsb2cgKi8KKwor LyogcHNwIGZ1bmN0aW9ucyAqLworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfYWRkX2Rp c3BsYXlfdG9wb2xvZ3koCisJCXN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNw X3N0YXR1cyBtb2RfaGRjcF9yZW1vdmVfZGlzcGxheV90b3BvbG9neSgKKwkJc3RydWN0IG1vZF9o ZGNwICpoZGNwKTsKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX2hkY3AxX2NyZWF0ZV9z ZXNzaW9uKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2Rf aGRjcF9oZGNwMV9kZXN0cm95X3Nlc3Npb24oc3RydWN0IG1vZF9oZGNwICpoZGNwKTsKK2VudW0g bW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX2hkY3AxX3ZhbGlkYXRlX3J4KHN0cnVjdCBtb2RfaGRj cCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9oZGNwMV9lbmFibGVfZW5j cnlwdGlvbihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9k X2hkY3BfaGRjcDFfdmFsaWRhdGVfa3N2bGlzdF92cChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOwor ZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfaGRjcDFfZW5hYmxlX2RwX3N0cmVhbV9lbmNy eXB0aW9uKAorCXN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBt b2RfaGRjcF9oZGNwMV9saW5rX21haW50ZW5hbmNlKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7Citl bnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9oZGNwMV9nZXRfbGlua19lbmNyeXB0aW9uX3N0 YXR1cyhzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCQkJCQkJICAgICAgIGVudW0gbW9kX2hkY3Bf ZW5jcnlwdGlvbl9zdGF0dXMgKmVuY3J5cHRpb25fc3RhdHVzKTsKKy8qIGRkYyBmdW5jdGlvbnMg Ki8KK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3JlYWRfYmtzdihzdHJ1Y3QgbW9kX2hk Y3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfcmVhZF9iY2FwcyhzdHJ1 Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfcmVhZF9i c3RhdHVzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2Rf aGRjcF9yZWFkX3IwcChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0 dXMgbW9kX2hkY3BfcmVhZF9rc3ZsaXN0KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1v ZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX3ZwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7Citl bnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX2JpbmZvKHN0cnVjdCBtb2RfaGRjcCAq aGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF93cml0ZV9ha3N2KHN0cnVjdCBt b2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF93cml0ZV9haW5m byhzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3Bf d3JpdGVfYW4oc3RydWN0IG1vZF9oZGNwICpoZGNwKTsKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1v ZF9oZGNwX3JlYWRfcnhjYXBzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNw X3N0YXR1cyBtb2RfaGRjcF9yZWFkX3J4c3RhdHVzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7Citl bnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX2FrZV9jZXJ0KHN0cnVjdCBtb2RfaGRj cCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX2hfcHJpbWUoc3Ry dWN0IG1vZF9oZGNwICpoZGNwKTsKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3JlYWRf cGFpcmluZ19pbmZvKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1 cyBtb2RfaGRjcF9yZWFkX2xfcHJpbWUoc3RydWN0IG1vZF9oZGNwICpoZGNwKTsKK2VudW0gbW9k X2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3JlYWRfcnhfaWRfbGlzdChzdHJ1Y3QgbW9kX2hkY3AgKmhk Y3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfcmVhZF9zdHJlYW1fcmVhZHkoc3Ry dWN0IG1vZF9oZGNwICpoZGNwKTsKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3dyaXRl X2FrZV9pbml0KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBt b2RfaGRjcF93cml0ZV9ub19zdG9yZWRfa20oc3RydWN0IG1vZF9oZGNwICpoZGNwKTsKK2VudW0g bW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3dyaXRlX3N0b3JlZF9rbShzdHJ1Y3QgbW9kX2hkY3Ag KmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3Bfd3JpdGVfbGNfaW5pdChzdHJ1 Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3Bfd3JpdGVf ZWtzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRj cF93cml0ZV9yZXBlYXRlcl9hdXRoX2FjayhzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApOworZW51bSBt b2RfaGRjcF9zdGF0dXMgbW9kX2hkY3Bfd3JpdGVfc3RyZWFtX21hbmFnZShzdHJ1Y3QgbW9kX2hk Y3AgKmhkY3ApOworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3Bfd3JpdGVfY29udGVudF90 eXBlKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCk7CisKKy8qIGhkY3AgdmVyc2lvbiBoZWxwZXJzICov CitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaXNfZHBfaGRjcChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3Ap Cit7CisJcmV0dXJuIChoZGNwLT5jb25uZWN0aW9uLmxpbmsubW9kZSA9PSBNT0RfSERDUF9NT0RF X0RQIHx8CisJCQloZGNwLT5jb25uZWN0aW9uLmxpbmsubW9kZSA9PSBNT0RfSERDUF9NT0RFX0RQ X01TVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBpc19kcF9tc3RfaGRjcChzdHJ1Y3Qg bW9kX2hkY3AgKmhkY3ApCit7CisJcmV0dXJuIChoZGNwLT5jb25uZWN0aW9uLmxpbmsubW9kZSA9 PSBNT0RfSERDUF9NT0RFX0RQX01TVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBpc19o ZG1pX2R2aV9zbF9oZGNwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwlyZXR1cm4gKGhkY3At PmNvbm5lY3Rpb24ubGluay5tb2RlID09IE1PRF9IRENQX01PREVfREVGQVVMVCk7Cit9CisKKy8q IGhkY3Agc3RhdGUgaGVscGVycyAqLworc3RhdGljIGlubGluZSB1aW50OF90IGN1cnJlbnRfc3Rh dGUoc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCXJldHVybiBoZGNwLT5zdGF0ZS5pZDsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIHNldF9zdGF0ZV9pZChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3As CisJCXN0cnVjdCBtb2RfaGRjcF9vdXRwdXQgKm91dHB1dCwgdWludDhfdCBpZCkKK3sKKwltZW1z ZXQoJmhkY3AtPnN0YXRlLCAwLCBzaXplb2YoaGRjcC0+c3RhdGUpKTsKKwloZGNwLT5zdGF0ZS5p ZCA9IGlkOworCS8qIGNhbGxiYWNrIHRpbWVyIHNob3VsZCBiZSByZXNldCBwZXIgc3RhdGUgKi8K KwlvdXRwdXQtPmNhbGxiYWNrX3N0b3AgPSAxOworCW91dHB1dC0+d2F0Y2hkb2dfdGltZXJfc3Rv cCA9IDE7CisJSERDUF9ORVhUX1NUQVRFX1RSQUNFKGhkY3AsIGlkLCBvdXRwdXQpOworfQorCitz dGF0aWMgaW5saW5lIHVpbnQ4X3QgaXNfaW5faGRjcDFfc3RhdGVzKHN0cnVjdCBtb2RfaGRjcCAq aGRjcCkKK3sKKwlyZXR1cm4gKGN1cnJlbnRfc3RhdGUoaGRjcCkgPiBIRENQMV9TVEFURV9TVEFS VCAmJgorCQkJY3VycmVudF9zdGF0ZShoZGNwKSA8PSBIRENQMV9TVEFURV9FTkQpOworfQorCitz dGF0aWMgaW5saW5lIHVpbnQ4X3QgaXNfaW5faGRjcDFfZHBfc3RhdGVzKHN0cnVjdCBtb2RfaGRj cCAqaGRjcCkKK3sKKwlyZXR1cm4gKGN1cnJlbnRfc3RhdGUoaGRjcCkgPiBIRENQMV9EUF9TVEFU RV9TVEFSVCAmJgorCQkJY3VycmVudF9zdGF0ZShoZGNwKSA8PSBIRENQMV9EUF9TVEFURV9FTkQp OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgaXNfaGRjcDEoc3RydWN0IG1vZF9oZGNwICpo ZGNwKQoreworCXJldHVybiAoaXNfaW5faGRjcDFfc3RhdGVzKGhkY3ApIHx8IGlzX2luX2hkY3Ax X2RwX3N0YXRlcyhoZGNwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBpc19pbl9jcF9u b3RfZGVzaXJlZF9zdGF0ZShzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJcmV0dXJuIGN1cnJl bnRfc3RhdGUoaGRjcCkgPT0gSERDUF9DUF9OT1RfREVTSVJFRDsKK30KKworc3RhdGljIGlubGlu ZSB1aW50OF90IGlzX2luX2luaXRpYWxpemVkX3N0YXRlKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkK K3sKKwlyZXR1cm4gY3VycmVudF9zdGF0ZShoZGNwKSA9PSBIRENQX0lOSVRJQUxJWkVEOworfQor CisvKiB0cmFuc2l0aW9uIG9wZXJhdGlvbiBoZWxwZXJzICovCitzdGF0aWMgaW5saW5lIHZvaWQg aW5jcmVtZW50X3N0YXlfY291bnRlcihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJaGRjcC0+ c3RhdGUuc3RheV9jb3VudCsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmFpbF9hbmRfcmVz dGFydF9pbl9tcyh1aW50MTZfdCB0aW1lLAorCQllbnVtIG1vZF9oZGNwX3N0YXR1cyAqc3RhdHVz LAorCQlzdHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQpCit7CisJb3V0cHV0LT5jYWxsYmFj a19uZWVkZWQgPSAxOworCW91dHB1dC0+Y2FsbGJhY2tfZGVsYXkgPSB0aW1lOworCW91dHB1dC0+ d2F0Y2hkb2dfdGltZXJfbmVlZGVkID0gMDsKKwlvdXRwdXQtPndhdGNoZG9nX3RpbWVyX2RlbGF5 ID0gMDsKKwkqc3RhdHVzID0gTU9EX0hEQ1BfU1RBVFVTX1JFU0VUX05FRURFRDsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIGNhbGxiYWNrX2luX21zKHVpbnQxNl90IHRpbWUsIHN0cnVjdCBtb2Rf aGRjcF9vdXRwdXQgKm91dHB1dCkKK3sKKwlvdXRwdXQtPmNhbGxiYWNrX25lZWRlZCA9IDE7CisJ b3V0cHV0LT5jYWxsYmFja19kZWxheSA9IHRpbWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBz ZXRfd2F0Y2hkb2dfaW5fbXMoc3RydWN0IG1vZF9oZGNwICpoZGNwLCB1aW50MTZfdCB0aW1lLAor CQlzdHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQpCit7CisJb3V0cHV0LT53YXRjaGRvZ190 aW1lcl9uZWVkZWQgPSAxOworCW91dHB1dC0+d2F0Y2hkb2dfdGltZXJfZGVsYXkgPSB0aW1lOwor fQorCisvKiBjb25uZWN0aW9uIHRvcG9sb2d5IGhlbHBlcnMgKi8KK3N0YXRpYyBpbmxpbmUgdWlu dDhfdCBpc19kaXNwbGF5X2FjdGl2ZShzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheSAqZGlzcGxheSkK K3sKKwlyZXR1cm4gZGlzcGxheS0+c3RhdGUgPj0gTU9EX0hEQ1BfRElTUExBWV9BQ1RJVkU7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBpc19kaXNwbGF5X2FkZGVkKHN0cnVjdCBtb2RfaGRj cF9kaXNwbGF5ICpkaXNwbGF5KQoreworCXJldHVybiBkaXNwbGF5LT5zdGF0ZSA+PSBNT0RfSERD UF9ESVNQTEFZX0FDVElWRV9BTkRfQURERUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBp c19kaXNwbGF5X2VuY3J5cHRpb25fZW5hYmxlZChzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheSAqZGlz cGxheSkKK3sKKwlyZXR1cm4gZGlzcGxheS0+c3RhdGUgPj0gTU9EX0hEQ1BfRElTUExBWV9FTkNS WVBUSU9OX0VOQUJMRUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBnZXRfYWN0aXZlX2Rp c3BsYXlfY291bnQoc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCXVpbnQ4X3QgYWRkZWRfY291 bnQgPSAwOworCXVpbnQ4X3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX09GX0RJU1BM QVlTOyBpKyspCisJCWlmIChpc19kaXNwbGF5X2FjdGl2ZSgmaGRjcC0+Y29ubmVjdGlvbi5kaXNw bGF5c1tpXSkpCisJCQlhZGRlZF9jb3VudCsrOworCXJldHVybiBhZGRlZF9jb3VudDsKK30KKwor c3RhdGljIGlubGluZSB1aW50OF90IGdldF9hZGRlZF9kaXNwbGF5X2NvdW50KHN0cnVjdCBtb2Rf aGRjcCAqaGRjcCkKK3sKKwl1aW50OF90IGFkZGVkX2NvdW50ID0gMDsKKwl1aW50OF90IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9PRl9ESVNQTEFZUzsgaSsrKQorCQlpZiAoaXNfZGlz cGxheV9hZGRlZCgmaGRjcC0+Y29ubmVjdGlvbi5kaXNwbGF5c1tpXSkpCisJCQlhZGRlZF9jb3Vu dCsrOworCXJldHVybiBhZGRlZF9jb3VudDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW9k X2hkY3BfZGlzcGxheSAqZ2V0X2ZpcnN0X2FkZGVkX2Rpc3BsYXkoCisJCXN0cnVjdCBtb2RfaGRj cCAqaGRjcCkKK3sKKwl1aW50OF90IGk7CisJc3RydWN0IG1vZF9oZGNwX2Rpc3BsYXkgKmRpc3Bs YXkgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfRElTUExBWVM7IGkrKykK KwkJaWYgKGlzX2Rpc3BsYXlfYWRkZWQoJmhkY3AtPmNvbm5lY3Rpb24uZGlzcGxheXNbaV0pKSB7 CisJCQlkaXNwbGF5ID0gJmhkY3AtPmNvbm5lY3Rpb24uZGlzcGxheXNbaV07CisJCQlicmVhazsK KwkJfQorCXJldHVybiBkaXNwbGF5OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtb2RfaGRj cF9kaXNwbGF5ICpnZXRfYWN0aXZlX2Rpc3BsYXlfYXRfaW5kZXgoCisJCXN0cnVjdCBtb2RfaGRj cCAqaGRjcCwgdWludDhfdCBpbmRleCkKK3sKKwl1aW50OF90IGk7CisJc3RydWN0IG1vZF9oZGNw X2Rpc3BsYXkgKmRpc3BsYXkgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0Zf RElTUExBWVM7IGkrKykKKwkJaWYgKGhkY3AtPmNvbm5lY3Rpb24uZGlzcGxheXNbaV0uaW5kZXgg PT0gaW5kZXggJiYKKwkJCQlpc19kaXNwbGF5X2FjdGl2ZSgmaGRjcC0+Y29ubmVjdGlvbi5kaXNw bGF5c1tpXSkpIHsKKwkJCWRpc3BsYXkgPSAmaGRjcC0+Y29ubmVjdGlvbi5kaXNwbGF5c1tpXTsK KwkJCWJyZWFrOworCQl9CisJcmV0dXJuIGRpc3BsYXk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IG1vZF9oZGNwX2Rpc3BsYXkgKmdldF9lbXB0eV9kaXNwbGF5X2NvbnRhaW5lcigKKwkJc3Ry dWN0IG1vZF9oZGNwICpoZGNwKQoreworCXVpbnQ4X3QgaTsKKwlzdHJ1Y3QgbW9kX2hkY3BfZGlz cGxheSAqZGlzcGxheSA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9PRl9ESVNQ TEFZUzsgaSsrKQorCQlpZiAoIWlzX2Rpc3BsYXlfYWN0aXZlKCZoZGNwLT5jb25uZWN0aW9uLmRp c3BsYXlzW2ldKSkgeworCQkJZGlzcGxheSA9ICZoZGNwLT5jb25uZWN0aW9uLmRpc3BsYXlzW2ld OworCQkJYnJlYWs7CisJCX0KKwlyZXR1cm4gZGlzcGxheTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkIHJlc2V0X3JldHJ5X2NvdW50cyhzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJaGRjcC0+ Y29ubmVjdGlvbi5oZGNwMV9yZXRyeV9jb3VudCA9IDA7Cit9CisKKyNlbmRpZiAvKiBIRENQX0hf ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNw L2hkY3AxX2V4ZWN1dGlvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMv aGRjcC9oZGNwMV9leGVjdXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjllNzMwMmVhYzI5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcDFfZXhlY3V0aW9uLmMKQEAgLTAsMCArMSw1MzEg QEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisg KgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhP TERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IK KyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBU SEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQU1ECisgKgorICovCisKKyNpbmNsdWRlICJo ZGNwLmgiCisKK3N0YXRpYyBpbmxpbmUgZW51bSBtb2RfaGRjcF9zdGF0dXMgdmFsaWRhdGVfYmtz dihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJdWludDY0X3QgbiA9ICoodWludDY0X3QgKilo ZGNwLT5hdXRoLm1zZy5oZGNwMS5ia3N2OworCXVpbnQ4X3QgY291bnQgPSAwOworCisJd2hpbGUg KG4pIHsKKwkJY291bnQrKzsKKwkJbiAmPSAobiAtIDEpOworCX0KKwlyZXR1cm4gKGNvdW50ID09 IDIwKSA/IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTIDoKKwkJCU1PRF9IRENQX1NUQVRVU19IRENQ MV9JTlZBTElEX0JLU1Y7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBtb2RfaGRjcF9zdGF0dXMg Y2hlY2tfa3N2X3JlYWR5KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwlpZiAoaXNfZHBfaGRj cChoZGNwKSkKKwkJcmV0dXJuIChoZGNwLT5hdXRoLm1zZy5oZGNwMS5ic3RhdHVzICYgQlNUQVRV U19SRUFEWV9NQVNLX0RQKSA/CisJCQkJTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MgOgorCQkJCU1P RF9IRENQX1NUQVRVU19IRENQMV9LU1ZfTElTVF9OT1RfUkVBRFk7CisJcmV0dXJuIChoZGNwLT5h dXRoLm1zZy5oZGNwMS5iY2FwcyAmIEJDQVBTX1JFQURZX01BU0spID8KKwkJCU1PRF9IRENQX1NU QVRVU19TVUNDRVNTIDoKKwkJCU1PRF9IRENQX1NUQVRVU19IRENQMV9LU1ZfTElTVF9OT1RfUkVB RFk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBtb2RfaGRjcF9zdGF0dXMgY2hlY2tfaGRjcF9j YXBhYmxlX2RwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwlyZXR1cm4gKGhkY3AtPmF1dGgu bXNnLmhkY3AxLmJjYXBzICYgQkNBUFNfSERDUF9DQVBBQkxFX01BU0tfRFApID8KKwkJCU1PRF9I RENQX1NUQVRVU19TVUNDRVNTIDoKKwkJCU1PRF9IRENQX1NUQVRVU19IRENQMV9OT1RfQ0FQQUJM RTsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG1vZF9oZGNwX3N0YXR1cyBjaGVja19yMHBfYXZh aWxhYmxlX2RwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1 cyBzdGF0dXM7CisJaWYgKGlzX2RwX2hkY3AoaGRjcCkpIHsKKwkJc3RhdHVzID0gKGhkY3AtPmF1 dGgubXNnLmhkY3AxLmJzdGF0dXMgJgorCQkJCUJTVEFUVVNfUjBfUF9BVkFJTEFCTEVfTUFTS19E UCkgPworCQkJTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MgOgorCQkJTU9EX0hEQ1BfU1RBVFVTX0hE Q1AxX1IwX1BSSU1FX1BFTkRJTkc7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gTU9EX0hEQ1BfU1RB VFVTX0lOVkFMSURfT1BFUkFUSU9OOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMg aW5saW5lIGVudW0gbW9kX2hkY3Bfc3RhdHVzIGNoZWNrX2xpbmtfaW50ZWdyaXR5X2RwKAorCQlz dHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJcmV0dXJuIChoZGNwLT5hdXRoLm1zZy5oZGNwMS5i c3RhdHVzICYKKwkJCUJTVEFUVVNfTElOS19JTlRFR1JJVFlfRkFJTFVSRV9NQVNLX0RQKSA/CisJ CQlNT0RfSERDUF9TVEFUVVNfSERDUDFfTElOS19JTlRFR1JJVFlfRkFJTFVSRSA6CisJCQlNT0Rf SERDUF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG1vZF9oZGNwX3N0 YXR1cyBjaGVja19ub19yZWF1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZHAoCisJCXN0cnVjdCBtb2Rf aGRjcCAqaGRjcCkKK3sKKwlyZXR1cm4gKGhkY3AtPmF1dGgubXNnLmhkY3AxLmJzdGF0dXMgJiBC U1RBVFVTX1JFQVVUSF9SRVFVRVNUX01BU0tfRFApID8KKwkJCU1PRF9IRENQX1NUQVRVU19IRENQ MV9SRUFVVEhfUkVRVUVTVF9JU1NVRUQgOgorCQkJTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1M7Cit9 CisKK3N0YXRpYyBpbmxpbmUgZW51bSBtb2RfaGRjcF9zdGF0dXMgY2hlY2tfbm9fbWF4X2Nhc2Nh ZGUoc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1 czsKKworCWlmIChpc19kcF9oZGNwKGhkY3ApKQorCQlzdGF0dXMgPSAoaGRjcC0+YXV0aC5tc2cu aGRjcDEuYmluZm9fZHAgJgorCQkJCUJJTkZPX01BWF9DQVNDQURFX0VYQ0VFREVEX01BU0tfRFAp ID8KKwkJCU1PRF9IRENQX1NUQVRVU19IRENQMV9NQVhfQ0FTQ0FERV9FWENFRURFRF9GQUlMVVJF IDoKKwkJCU1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCWVsc2UKKwkJc3RhdHVzID0gKGhkY3At PmF1dGgubXNnLmhkY3AxLmJzdGF0dXMgJgorCQkJCUJTVEFUVVNfTUFYX0NBU0NBREVfRVhDRUVE RURfTUFTSykgPworCQkJCU1PRF9IRENQX1NUQVRVU19IRENQMV9NQVhfQ0FTQ0FERV9FWENFRURF RF9GQUlMVVJFIDoKKwkJCQlNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKwlyZXR1cm4gc3RhdHVz OworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbW9kX2hkY3Bfc3RhdHVzIGNoZWNrX25vX21heF9k ZXZzKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0 dXM7CisKKwlpZiAoaXNfZHBfaGRjcChoZGNwKSkKKwkJc3RhdHVzID0gKGhkY3AtPmF1dGgubXNn LmhkY3AxLmJpbmZvX2RwICYKKwkJCQlCSU5GT19NQVhfREVWU19FWENFRURFRF9NQVNLX0RQKSA/ CisJCQkJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX01BWF9ERVZTX0VYQ0VFREVEX0ZBSUxVUkUgOgor CQkJCU1PRF9IRENQX1NUQVRVU19TVUNDRVNTOworCWVsc2UKKwkJc3RhdHVzID0gKGhkY3AtPmF1 dGgubXNnLmhkY3AxLmJzdGF0dXMgJgorCQkJCUJTVEFUVVNfTUFYX0RFVlNfRVhDRUVERURfTUFT SykgPworCQkJCU1PRF9IRENQX1NUQVRVU19IRENQMV9NQVhfREVWU19FWENFRURFRF9GQUlMVVJF IDoKKwkJCQlNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKwlyZXR1cm4gc3RhdHVzOworfQorCitz dGF0aWMgaW5saW5lIHVpbnQ4X3QgZ2V0X2RldmljZV9jb3VudChzdHJ1Y3QgbW9kX2hkY3AgKmhk Y3ApCit7CisJcmV0dXJuIGlzX2RwX2hkY3AoaGRjcCkgPworCQkJKGhkY3AtPmF1dGgubXNnLmhk Y3AxLmJpbmZvX2RwICYgQklORk9fREVWSUNFX0NPVU5UX01BU0tfRFApIDoKKwkJCShoZGNwLT5h dXRoLm1zZy5oZGNwMS5ic3RhdHVzICYgQlNUQVRVU19ERVZJQ0VfQ09VTlRfTUFTSyk7Cit9CisK K3N0YXRpYyBpbmxpbmUgZW51bSBtb2RfaGRjcF9zdGF0dXMgY2hlY2tfZGV2aWNlX2NvdW50KHN0 cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwkvKiBkZXZpY2UgY291bnQgbXVzdCBiZSBncmVhdGVy IHRoYW4gb3IgZXF1YWwgdG8gdHJhY2tlZCBoZGNwIGRpc3BsYXlzICovCisJcmV0dXJuIChnZXRf ZGV2aWNlX2NvdW50KGhkY3ApIDwgZ2V0X2FkZGVkX2Rpc3BsYXlfY291bnQoaGRjcCkpID8KKwkJ CU1PRF9IRENQX1NUQVRVU19IRENQMV9ERVZJQ0VfQ09VTlRfTUlTTUFUQ0hfRkFJTFVSRSA6CisJ CQlNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGVudW0gbW9kX2hkY3Bfc3Rh dHVzIHdhaXRfZm9yX2FjdGl2ZV9yeChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBt b2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJCXN0cnVjdCBtb2RfaGRjcF90cmFu c2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0 dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKworCWlmIChldmVudF9jdHgtPmV2ZW50ICE9 IE1PRF9IRENQX0VWRU5UX0NBTExCQUNLKSB7CisJCWV2ZW50X2N0eC0+dW5leHBlY3RlZF9ldmVu dCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0 KG1vZF9oZGNwX3JlYWRfYmtzdiwKKwkJCSZpbnB1dC0+Ymtzdl9yZWFkLCAmc3RhdHVzLAorCQkJ aGRjcCwgImJrc3ZfcmVhZCIpKQorCQlnb3RvIG91dDsKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVf YW5kX3NldChtb2RfaGRjcF9yZWFkX2JjYXBzLAorCQkJJmlucHV0LT5iY2Fwc19yZWFkLCAmc3Rh dHVzLAorCQkJaGRjcCwgImJjYXBzX3JlYWQiKSkKKwkJZ290byBvdXQ7CitvdXQ6CisJcmV0dXJu IHN0YXR1czsKK30KKworc3RhdGljIGVudW0gbW9kX2hkY3Bfc3RhdHVzIGV4Y2hhbmdlX2tzdnMo c3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQlzdHJ1Y3QgbW9kX2hkY3BfZXZlbnRfY29udGV4dCAq ZXZlbnRfY3R4LAorCQlzdHJ1Y3QgbW9kX2hkY3BfdHJhbnNpdGlvbl9pbnB1dF9oZGNwMSAqaW5w dXQpCit7CisJZW51bSBtb2RfaGRjcF9zdGF0dXMgc3RhdHVzID0gTU9EX0hEQ1BfU1RBVFVTX1NV Q0NFU1M7CisKKwlpZiAoZXZlbnRfY3R4LT5ldmVudCAhPSBNT0RfSERDUF9FVkVOVF9DQUxMQkFD SykgeworCQlldmVudF9jdHgtPnVuZXhwZWN0ZWRfZXZlbnQgPSAxOworCQlnb3RvIG91dDsKKwl9 CisKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChtb2RfaGRjcF9hZGRfZGlzcGxheV90 b3BvbG9neSwKKwkJCSZpbnB1dC0+YWRkX3RvcG9sb2d5LCAmc3RhdHVzLAorCQkJaGRjcCwgImFk ZF90b3BvbG9neSIpKQorCQlnb3RvIG91dDsKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3Nl dChtb2RfaGRjcF9oZGNwMV9jcmVhdGVfc2Vzc2lvbiwKKwkJCSZpbnB1dC0+Y3JlYXRlX3Nlc3Np b24sICZzdGF0dXMsCisJCQloZGNwLCAiY3JlYXRlX3Nlc3Npb24iKSkKKwkJZ290byBvdXQ7CisJ aWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQobW9kX2hkY3Bfd3JpdGVfYW4sCisJCQkmaW5w dXQtPmFuX3dyaXRlLCAmc3RhdHVzLAorCQkJaGRjcCwgImFuX3dyaXRlIikpCisJCWdvdG8gb3V0 OworCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0KG1vZF9oZGNwX3dyaXRlX2Frc3YsCisJ CQkmaW5wdXQtPmFrc3Zfd3JpdGUsICZzdGF0dXMsCisJCQloZGNwLCAiYWtzdl93cml0ZSIpKQor CQlnb3RvIG91dDsKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChtb2RfaGRjcF9yZWFk X2Jrc3YsCisJCQkmaW5wdXQtPmJrc3ZfcmVhZCwgJnN0YXR1cywKKwkJCWhkY3AsICJia3N2X3Jl YWQiKSkKKwkJZ290byBvdXQ7CisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQodmFsaWRh dGVfYmtzdiwKKwkJCSZpbnB1dC0+Ymtzdl92YWxpZGF0aW9uLCAmc3RhdHVzLAorCQkJaGRjcCwg ImJrc3ZfdmFsaWRhdGlvbiIpKQorCQlnb3RvIG91dDsKKwlpZiAoaGRjcC0+YXV0aC5tc2cuaGRj cDEuYWluZm8pIHsKKwkJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQobW9kX2hkY3Bfd3Jp dGVfYWluZm8sCisJCQkJJmlucHV0LT5haW5mb193cml0ZSwgJnN0YXR1cywKKwkJCQloZGNwLCAi YWluZm9fd3JpdGUiKSkKKwkJCWdvdG8gb3V0OworCX0KK291dDoKKwlyZXR1cm4gc3RhdHVzOwor fQorCitzdGF0aWMgZW51bSBtb2RfaGRjcF9zdGF0dXMgY29tcHV0YXRpb25zX3ZhbGlkYXRlX3J4 X3Rlc3RfZm9yX3JlcGVhdGVyKAorCQlzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBt b2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJCXN0cnVjdCBtb2RfaGRjcF90cmFu c2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0 dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKworCWlmIChldmVudF9jdHgtPmV2ZW50ICE9 IE1PRF9IRENQX0VWRU5UX0NBTExCQUNLKSB7CisJCWV2ZW50X2N0eC0+dW5leHBlY3RlZF9ldmVu dCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0 KG1vZF9oZGNwX3JlYWRfcjBwLAorCQkJJmlucHV0LT5yMHBfcmVhZCwgJnN0YXR1cywKKwkJCWhk Y3AsICJyMHBfcmVhZCIpKQorCQlnb3RvIG91dDsKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5k X3NldChtb2RfaGRjcF9oZGNwMV92YWxpZGF0ZV9yeCwKKwkJCSZpbnB1dC0+cnhfdmFsaWRhdGlv biwgJnN0YXR1cywKKwkJCWhkY3AsICJyeF92YWxpZGF0aW9uIikpCisJCWdvdG8gb3V0OworCWlm IChoZGNwLT5jb25uZWN0aW9uLmlzX3JlcGVhdGVyKSB7CisJCWlmICghaGRjcC0+Y29ubmVjdGlv bi5saW5rLmFkanVzdC5oZGNwMS5wb3N0cG9uZV9lbmNyeXB0aW9uKQorCQkJaWYgKCFtb2RfaGRj cF9leGVjdXRlX2FuZF9zZXQoCisJCQkJCW1vZF9oZGNwX2hkY3AxX2VuYWJsZV9lbmNyeXB0aW9u LAorCQkJCQkmaW5wdXQtPmVuY3J5cHRpb24sICZzdGF0dXMsCisJCQkJCWhkY3AsICJlbmNyeXB0 aW9uIikpCisJCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJaWYgKCFtb2RfaGRjcF9leGVjdXRl X2FuZF9zZXQobW9kX2hkY3BfaGRjcDFfZW5hYmxlX2VuY3J5cHRpb24sCisJCQkJJmlucHV0LT5l bmNyeXB0aW9uLCAmc3RhdHVzLAorCQkJCWhkY3AsICJlbmNyeXB0aW9uIikpCisJCQlnb3RvIG91 dDsKKwkJaWYgKGlzX2RwX21zdF9oZGNwKGhkY3ApKQorCQkJaWYgKCFtb2RfaGRjcF9leGVjdXRl X2FuZF9zZXQoCisJCQkJCW1vZF9oZGNwX2hkY3AxX2VuYWJsZV9kcF9zdHJlYW1fZW5jcnlwdGlv biwKKwkJCQkJJmlucHV0LT5zdHJlYW1fZW5jcnlwdGlvbl9kcCwgJnN0YXR1cywKKwkJCQkJaGRj cCwgInN0cmVhbV9lbmNyeXB0aW9uX2RwIikpCisJCQkJZ290byBvdXQ7CisJfQorb3V0OgorCXJl dHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBlbnVtIG1vZF9oZGNwX3N0YXR1cyBhdXRoZW50aWNh dGVkKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJc3RydWN0IG1vZF9oZGNwX2V2ZW50X2NvbnRl eHQgKmV2ZW50X2N0eCwKKwkJc3RydWN0IG1vZF9oZGNwX3RyYW5zaXRpb25faW5wdXRfaGRjcDEg KmlucHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1cyA9IE1PRF9IRENQX1NUQVRV U19TVUNDRVNTOworCisJaWYgKGV2ZW50X2N0eC0+ZXZlbnQgIT0gTU9EX0hEQ1BfRVZFTlRfQ0FM TEJBQ0spIHsKKwkJZXZlbnRfY3R4LT51bmV4cGVjdGVkX2V2ZW50ID0gMTsKKwkJZ290byBvdXQ7 CisJfQorCisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQobW9kX2hkY3BfaGRjcDFfbGlu a19tYWludGVuYW5jZSwKKwkJCSZpbnB1dC0+bGlua19tYWludGVuYW5jZSwgJnN0YXR1cywKKwkJ CWhkY3AsICJsaW5rX21haW50ZW5hbmNlIikpCisJCWdvdG8gb3V0Oworb3V0OgorCXJldHVybiBz dGF0dXM7Cit9CisKK3N0YXRpYyBlbnVtIG1vZF9oZGNwX3N0YXR1cyB3YWl0X2Zvcl9yZWFkeShz dHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpl dmVudF9jdHgsCisJCXN0cnVjdCBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1 dCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VD Q0VTUzsKKworCWlmIChldmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQX0VWRU5UX0NBTExCQUNL ICYmCisJCQlldmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQX0VWRU5UX0NQSVJRICYmCisJCQll dmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQX0VWRU5UX1dBVENIRE9HX1RJTUVPVVQpIHsKKwkJ ZXZlbnRfY3R4LT51bmV4cGVjdGVkX2V2ZW50ID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYg KGlzX2RwX2hkY3AoaGRjcCkpIHsKKwkJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQobW9k X2hkY3BfcmVhZF9ic3RhdHVzLAorCQkJCSZpbnB1dC0+YnN0YXR1c19yZWFkLCAmc3RhdHVzLAor CQkJCWhkY3AsICJic3RhdHVzX3JlYWQiKSkKKwkJCWdvdG8gb3V0OworCQlpZiAoIW1vZF9oZGNw X2V4ZWN1dGVfYW5kX3NldChjaGVja19saW5rX2ludGVncml0eV9kcCwKKwkJCQkmaW5wdXQtPmxp bmtfaW50ZWdpcnlfY2hlY2ssICZzdGF0dXMsCisJCQkJaGRjcCwgImxpbmtfaW50ZWdpcnlfY2hl Y2siKSkKKwkJCWdvdG8gb3V0OworCQlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChjaGVj a19ub19yZWF1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZHAsCisJCQkJJmlucHV0LT5yZWF1dGhfcmVx dWVzdF9jaGVjaywgJnN0YXR1cywKKwkJCQloZGNwLCAicmVhdXRoX3JlcXVlc3RfY2hlY2siKSkK KwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0 KG1vZF9oZGNwX3JlYWRfYmNhcHMsCisJCQkJJmlucHV0LT5iY2Fwc19yZWFkLCAmc3RhdHVzLAor CQkJCWhkY3AsICJiY2Fwc19yZWFkIikpCisJCQlnb3RvIG91dDsKKwl9CisJaWYgKCFtb2RfaGRj cF9leGVjdXRlX2FuZF9zZXQoY2hlY2tfa3N2X3JlYWR5LAorCQkJJmlucHV0LT5yZWFkeV9jaGVj aywgJnN0YXR1cywKKwkJCWhkY3AsICJyZWFkeV9jaGVjayIpKQorCQlnb3RvIG91dDsKK291dDoK KwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgZW51bSBtb2RfaGRjcF9zdGF0dXMgcmVhZF9r c3ZfbGlzdChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9j b250ZXh0ICpldmVudF9jdHgsCisJCXN0cnVjdCBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hk Y3AxICppbnB1dCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9T VEFUVVNfU1VDQ0VTUzsKKwl1aW50OF90IGRldmljZV9jb3VudDsKKworCWlmIChldmVudF9jdHgt PmV2ZW50ICE9IE1PRF9IRENQX0VWRU5UX0NBTExCQUNLKSB7CisJCWV2ZW50X2N0eC0+dW5leHBl Y3RlZF9ldmVudCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpc19kcF9oZGNwKGhkY3Ap KSB7CisJCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0KG1vZF9oZGNwX3JlYWRfYmluZm8s CisJCQkJJmlucHV0LT5iaW5mb19yZWFkX2RwLCAmc3RhdHVzLAorCQkJCWhkY3AsICJiaW5mb19y ZWFkX2RwIikpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQlpZiAoIW1vZF9oZGNwX2V4ZWN1 dGVfYW5kX3NldChtb2RfaGRjcF9yZWFkX2JzdGF0dXMsCisJCQkJJmlucHV0LT5ic3RhdHVzX3Jl YWQsICZzdGF0dXMsCisJCQkJaGRjcCwgImJzdGF0dXNfcmVhZCIpKQorCQkJZ290byBvdXQ7CisJ fQorCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0KGNoZWNrX25vX21heF9jYXNjYWRlLAor CQkJJmlucHV0LT5tYXhfY2FzY2FkZV9jaGVjaywgJnN0YXR1cywKKwkJCWhkY3AsICJtYXhfY2Fz Y2FkZV9jaGVjayIpKQorCQlnb3RvIG91dDsKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3Nl dChjaGVja19ub19tYXhfZGV2cywKKwkJCSZpbnB1dC0+bWF4X2RldnNfY2hlY2ssICZzdGF0dXMs CisJCQloZGNwLCAibWF4X2RldnNfY2hlY2siKSkKKwkJZ290byBvdXQ7CisJaWYgKCFtb2RfaGRj cF9leGVjdXRlX2FuZF9zZXQoY2hlY2tfZGV2aWNlX2NvdW50LAorCQkJJmlucHV0LT5kZXZpY2Vf Y291bnRfY2hlY2ssICZzdGF0dXMsCisJCQloZGNwLCAiZGV2aWNlX2NvdW50X2NoZWNrIikpCisJ CWdvdG8gb3V0OworCWRldmljZV9jb3VudCA9IGdldF9kZXZpY2VfY291bnQoaGRjcCk7CisJaGRj cC0+YXV0aC5tc2cuaGRjcDEua3N2bGlzdF9zaXplID0gZGV2aWNlX2NvdW50KjU7CisJaWYgKCFt b2RfaGRjcF9leGVjdXRlX2FuZF9zZXQobW9kX2hkY3BfcmVhZF9rc3ZsaXN0LAorCQkJJmlucHV0 LT5rc3ZsaXN0X3JlYWQsICZzdGF0dXMsCisJCQloZGNwLCAia3N2bGlzdF9yZWFkIikpCisJCWdv dG8gb3V0OworCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0KG1vZF9oZGNwX3JlYWRfdnAs CisJCQkmaW5wdXQtPnZwX3JlYWQsICZzdGF0dXMsCisJCQloZGNwLCAidnBfcmVhZCIpKQorCQln b3RvIG91dDsKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChtb2RfaGRjcF9oZGNwMV92 YWxpZGF0ZV9rc3ZsaXN0X3ZwLAorCQkJJmlucHV0LT5rc3ZsaXN0X3ZwX3ZhbGlkYXRpb24sICZz dGF0dXMsCisJCQloZGNwLCAia3N2bGlzdF92cF92YWxpZGF0aW9uIikpCisJCWdvdG8gb3V0Owor CWlmIChpbnB1dC0+ZW5jcnlwdGlvbiAhPSBQQVNTKQorCQlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVf YW5kX3NldChtb2RfaGRjcF9oZGNwMV9lbmFibGVfZW5jcnlwdGlvbiwKKwkJCQkmaW5wdXQtPmVu Y3J5cHRpb24sICZzdGF0dXMsCisJCQkJaGRjcCwgImVuY3J5cHRpb24iKSkKKwkJCWdvdG8gb3V0 OworCWlmIChpc19kcF9tc3RfaGRjcChoZGNwKSkKKwkJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2Fu ZF9zZXQoCisJCQkJbW9kX2hkY3BfaGRjcDFfZW5hYmxlX2RwX3N0cmVhbV9lbmNyeXB0aW9uLAor CQkJCSZpbnB1dC0+c3RyZWFtX2VuY3J5cHRpb25fZHAsICZzdGF0dXMsCisJCQkJaGRjcCwgInN0 cmVhbV9lbmNyeXB0aW9uX2RwIikpCisJCQlnb3RvIG91dDsKK291dDoKKwlyZXR1cm4gc3RhdHVz OworfQorCitzdGF0aWMgZW51bSBtb2RfaGRjcF9zdGF0dXMgZGV0ZXJtaW5lX3J4X2hkY3BfY2Fw YWJsZV9kcChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9j b250ZXh0ICpldmVudF9jdHgsCisJCXN0cnVjdCBtb2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hk Y3AxICppbnB1dCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0dXMgPSBNT0RfSERDUF9T VEFUVVNfU1VDQ0VTUzsKKworCWlmIChldmVudF9jdHgtPmV2ZW50ICE9IE1PRF9IRENQX0VWRU5U X0NBTExCQUNLKSB7CisJCWV2ZW50X2N0eC0+dW5leHBlY3RlZF9ldmVudCA9IDE7CisJCWdvdG8g b3V0OworCX0KKworCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0KG1vZF9oZGNwX3JlYWRf YmNhcHMsCisJCQkmaW5wdXQtPmJjYXBzX3JlYWQsICZzdGF0dXMsCisJCQloZGNwLCAiYmNhcHNf cmVhZCIpKQorCQlnb3RvIG91dDsKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChjaGVj a19oZGNwX2NhcGFibGVfZHAsCisJCQkmaW5wdXQtPmhkY3BfY2FwYWJsZV9kcCwgJnN0YXR1cywK KwkJCWhkY3AsICJoZGNwX2NhcGFibGVfZHAiKSkKKwkJZ290byBvdXQ7CitvdXQ6CisJcmV0dXJu IHN0YXR1czsKK30KKworc3RhdGljIGVudW0gbW9kX2hkY3Bfc3RhdHVzIHdhaXRfZm9yX3IwX3By aW1lX2RwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJc3RydWN0IG1vZF9oZGNwX2V2ZW50X2Nv bnRleHQgKmV2ZW50X2N0eCwKKwkJc3RydWN0IG1vZF9oZGNwX3RyYW5zaXRpb25faW5wdXRfaGRj cDEgKmlucHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1cyA9IE1PRF9IRENQX1NU QVRVU19TVUNDRVNTOworCisJaWYgKGV2ZW50X2N0eC0+ZXZlbnQgIT0gTU9EX0hEQ1BfRVZFTlRf Q1BJUlEgJiYKKwkJCWV2ZW50X2N0eC0+ZXZlbnQgIT0gTU9EX0hEQ1BfRVZFTlRfV0FUQ0hET0df VElNRU9VVCkgeworCQlldmVudF9jdHgtPnVuZXhwZWN0ZWRfZXZlbnQgPSAxOworCQlnb3RvIG91 dDsKKwl9CisKKwlpZiAoIW1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldChtb2RfaGRjcF9yZWFkX2Jz dGF0dXMsCisJCQkmaW5wdXQtPmJzdGF0dXNfcmVhZCwgJnN0YXR1cywKKwkJCWhkY3AsICJic3Rh dHVzX3JlYWQiKSkKKwkJZ290byBvdXQ7CisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQo Y2hlY2tfcjBwX2F2YWlsYWJsZV9kcCwKKwkJCSZpbnB1dC0+cjBwX2F2YWlsYWJsZV9kcCwgJnN0 YXR1cywKKwkJCWhkY3AsICJyMHBfYXZhaWxhYmxlX2RwIikpCisJCWdvdG8gb3V0Oworb3V0Ogor CXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBlbnVtIG1vZF9oZGNwX3N0YXR1cyBhdXRoZW50 aWNhdGVkX2RwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJc3RydWN0IG1vZF9oZGNwX2V2ZW50 X2NvbnRleHQgKmV2ZW50X2N0eCwKKwkJc3RydWN0IG1vZF9oZGNwX3RyYW5zaXRpb25faW5wdXRf aGRjcDEgKmlucHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1cyA9IE1PRF9IRENQ X1NUQVRVU19TVUNDRVNTOworCisJaWYgKGV2ZW50X2N0eC0+ZXZlbnQgIT0gTU9EX0hEQ1BfRVZF TlRfQ1BJUlEpIHsKKwkJZXZlbnRfY3R4LT51bmV4cGVjdGVkX2V2ZW50ID0gMTsKKwkJZ290byBv dXQ7CisJfQorCisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQobW9kX2hkY3BfcmVhZF9i c3RhdHVzLAorCQkJJmlucHV0LT5ic3RhdHVzX3JlYWQsICZzdGF0dXMsCisJCQloZGNwLCAiYnN0 YXR1c19yZWFkIikpCisJCWdvdG8gb3V0OworCWlmICghbW9kX2hkY3BfZXhlY3V0ZV9hbmRfc2V0 KGNoZWNrX2xpbmtfaW50ZWdyaXR5X2RwLAorCQkJJmlucHV0LT5saW5rX2ludGVnaXJ5X2NoZWNr LCAmc3RhdHVzLAorCQkJaGRjcCwgImxpbmtfaW50ZWdpcnlfY2hlY2siKSkKKwkJZ290byBvdXQ7 CisJaWYgKCFtb2RfaGRjcF9leGVjdXRlX2FuZF9zZXQoY2hlY2tfbm9fcmVhdXRoZW50aWNhdGlv bl9yZXF1ZXN0X2RwLAorCQkJJmlucHV0LT5yZWF1dGhfcmVxdWVzdF9jaGVjaywgJnN0YXR1cywK KwkJCWhkY3AsICJyZWF1dGhfcmVxdWVzdF9jaGVjayIpKQorCQlnb3RvIG91dDsKK291dDoKKwly ZXR1cm4gc3RhdHVzOworfQorCit1aW50OF90IG1vZF9oZGNwX2V4ZWN1dGVfYW5kX3NldCgKKwkJ bW9kX2hkY3BfYWN0aW9uIGZ1bmMsIHVpbnQ4X3QgKmZsYWcsCisJCWVudW0gbW9kX2hkY3Bfc3Rh dHVzICpzdGF0dXMsIHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwgY2hhciAqc3RyKQoreworCSpzdGF0 dXMgPSBmdW5jKGhkY3ApOworCWlmICgqc3RhdHVzID09IE1PRF9IRENQX1NUQVRVU19TVUNDRVNT ICYmICpmbGFnICE9IFBBU1MpIHsKKwkJSERDUF9JTlBVVF9QQVNTX1RSQUNFKGhkY3AsIHN0cik7 CisJCSpmbGFnID0gUEFTUzsKKwl9IGVsc2UgaWYgKCpzdGF0dXMgIT0gTU9EX0hEQ1BfU1RBVFVT X1NVQ0NFU1MgJiYgKmZsYWcgIT0gRkFJTCkgeworCQlIRENQX0lOUFVUX0ZBSUxfVFJBQ0UoaGRj cCwgc3RyKTsKKwkJKmZsYWcgPSBGQUlMOworCX0KKwlyZXR1cm4gKCpzdGF0dXMgPT0gTU9EX0hE Q1BfU1RBVFVTX1NVQ0NFU1MpOworfQorCitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9o ZGNwMV9leGVjdXRpb24oc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQlzdHJ1Y3QgbW9kX2hkY3Bf ZXZlbnRfY29udGV4dCAqZXZlbnRfY3R4LAorCQlzdHJ1Y3QgbW9kX2hkY3BfdHJhbnNpdGlvbl9p bnB1dF9oZGNwMSAqaW5wdXQpCit7CisJZW51bSBtb2RfaGRjcF9zdGF0dXMgc3RhdHVzID0gTU9E X0hEQ1BfU1RBVFVTX1NVQ0NFU1M7CisKKwlzd2l0Y2ggKGN1cnJlbnRfc3RhdGUoaGRjcCkpIHsK KwljYXNlIEgxX0EwX1dBSVRfRk9SX0FDVElWRV9SWDoKKwkJc3RhdHVzID0gd2FpdF9mb3JfYWN0 aXZlX3J4KGhkY3AsIGV2ZW50X2N0eCwgaW5wdXQpOworCQlicmVhazsKKwljYXNlIEgxX0ExX0VY Q0hBTkdFX0tTVlM6CisJCXN0YXR1cyA9IGV4Y2hhbmdlX2tzdnMoaGRjcCwgZXZlbnRfY3R4LCBp bnB1dCk7CisJCWJyZWFrOworCWNhc2UgSDFfQTJfQ09NUFVUQVRJT05TX0EzX1ZBTElEQVRFX1JY X0E2X1RFU1RfRk9SX1JFUEVBVEVSOgorCQlzdGF0dXMgPSBjb21wdXRhdGlvbnNfdmFsaWRhdGVf cnhfdGVzdF9mb3JfcmVwZWF0ZXIoaGRjcCwKKwkJCQlldmVudF9jdHgsIGlucHV0KTsKKwkJYnJl YWs7CisJY2FzZSBIMV9BNDVfQVVUSEVOSUNBVEVEOgorCQlzdGF0dXMgPSBhdXRoZW50aWNhdGVk KGhkY3AsIGV2ZW50X2N0eCwgaW5wdXQpOworCQlicmVhazsKKwljYXNlIEgxX0E4X1dBSVRfRk9S X1JFQURZOgorCQlzdGF0dXMgPSB3YWl0X2Zvcl9yZWFkeShoZGNwLCBldmVudF9jdHgsIGlucHV0 KTsKKwkJYnJlYWs7CisJY2FzZSBIMV9BOV9SRUFEX0tTVl9MSVNUOgorCQlzdGF0dXMgPSByZWFk X2tzdl9saXN0KGhkY3AsIGV2ZW50X2N0eCwgaW5wdXQpOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfSU5WQUxJRF9TVEFURTsKKwkJYnJlYWs7CisJfQor CisJcmV0dXJuIHN0YXR1czsKK30KKworZXh0ZXJuIGVudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9o ZGNwX2hkY3AxX2RwX2V4ZWN1dGlvbihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0cnVjdCBt b2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJCXN0cnVjdCBtb2RfaGRjcF90cmFu c2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0 dXMgPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzsKKworCXN3aXRjaCAoY3VycmVudF9zdGF0ZSho ZGNwKSkgeworCWNhc2UgRDFfQTBfREVURVJNSU5FX1JYX0hEQ1BfQ0FQQUJMRToKKwkJc3RhdHVz ID0gZGV0ZXJtaW5lX3J4X2hkY3BfY2FwYWJsZV9kcChoZGNwLCBldmVudF9jdHgsIGlucHV0KTsK KwkJYnJlYWs7CisJY2FzZSBEMV9BMV9FWENIQU5HRV9LU1ZTOgorCQlzdGF0dXMgPSBleGNoYW5n ZV9rc3ZzKGhkY3AsIGV2ZW50X2N0eCwgaW5wdXQpOworCQlicmVhazsKKwljYXNlIEQxX0EyM19X QUlUX0ZPUl9SMF9QUklNRToKKwkJc3RhdHVzID0gd2FpdF9mb3JfcjBfcHJpbWVfZHAoaGRjcCwg ZXZlbnRfY3R4LCBpbnB1dCk7CisJCWJyZWFrOworCWNhc2UgRDFfQTJfQ09NUFVUQVRJT05TX0Ez X1ZBTElEQVRFX1JYX0E1X1RFU1RfRk9SX1JFUEVBVEVSOgorCQlzdGF0dXMgPSBjb21wdXRhdGlv bnNfdmFsaWRhdGVfcnhfdGVzdF9mb3JfcmVwZWF0ZXIoCisJCQkJaGRjcCwgZXZlbnRfY3R4LCBp bnB1dCk7CisJCWJyZWFrOworCWNhc2UgRDFfQTRfQVVUSEVOSUNBVEVEOgorCQlzdGF0dXMgPSBh dXRoZW50aWNhdGVkX2RwKGhkY3AsIGV2ZW50X2N0eCwgaW5wdXQpOworCQlicmVhazsKKwljYXNl IEQxX0E2X1dBSVRfRk9SX1JFQURZOgorCQlzdGF0dXMgPSB3YWl0X2Zvcl9yZWFkeShoZGNwLCBl dmVudF9jdHgsIGlucHV0KTsKKwkJYnJlYWs7CisJY2FzZSBEMV9BN19SRUFEX0tTVl9MSVNUOgor CQlzdGF0dXMgPSByZWFkX2tzdl9saXN0KGhkY3AsIGV2ZW50X2N0eCwgaW5wdXQpOworCQlicmVh azsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSBNT0RfSERDUF9TVEFUVVNfSU5WQUxJRF9TVEFURTsK KwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2hkY3AvaGRjcDFfdHJhbnNpdGlvbi5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L21vZHVsZXMvaGRjcC9oZGNwMV90cmFuc2l0aW9uLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xZDE4NzgwOWI3MDkKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNw L2hkY3AxX3RyYW5zaXRpb24uYwpAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqIENvcHlyaWdodCAy MDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1 ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0 d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBB UklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBB dXRob3JzOiBBTUQKKyAqCisgKi8KKworI2luY2x1ZGUgImhkY3AuaCIKKworZW51bSBtb2RfaGRj cF9zdGF0dXMgbW9kX2hkY3BfaGRjcDFfdHJhbnNpdGlvbihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3As CisJCXN0cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJCXN0cnVjdCBt b2RfaGRjcF90cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCwKKwkJc3RydWN0IG1vZF9oZGNw X291dHB1dCAqb3V0cHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1cyA9IE1PRF9I RENQX1NUQVRVU19TVUNDRVNTOworCXN0cnVjdCBtb2RfaGRjcF9jb25uZWN0aW9uICpjb25uID0g JmhkY3AtPmNvbm5lY3Rpb247CisJc3RydWN0IG1vZF9oZGNwX2xpbmtfYWRqdXN0bWVudCAqYWRq dXN0ID0gJmhkY3AtPmNvbm5lY3Rpb24ubGluay5hZGp1c3Q7CisKKwlzd2l0Y2ggKGN1cnJlbnRf c3RhdGUoaGRjcCkpIHsKKwljYXNlIEgxX0EwX1dBSVRfRk9SX0FDVElWRV9SWDoKKwkJaWYgKGlu cHV0LT5ia3N2X3JlYWQgIT0gUEFTUyB8fCBpbnB1dC0+YmNhcHNfcmVhZCAhPSBQQVNTKSB7CisJ CQkvKiAxQS0wNDogcmVwZWF0ZWRseSBhdHRlbXB0cyBvbiBwb3J0IGFjY2VzcyBmYWlsdXJlICov CisJCQljYWxsYmFja19pbl9tcyg1MDAsIG91dHB1dCk7CisJCQlpbmNyZW1lbnRfc3RheV9jb3Vu dGVyKGhkY3ApOworCQkJYnJlYWs7CisJCX0KKwkJY2FsbGJhY2tfaW5fbXMoMCwgb3V0cHV0KTsK KwkJc2V0X3N0YXRlX2lkKGhkY3AsIG91dHB1dCwgSDFfQTFfRVhDSEFOR0VfS1NWUyk7CisJCWJy ZWFrOworCWNhc2UgSDFfQTFfRVhDSEFOR0VfS1NWUzoKKwkJaWYgKGlucHV0LT5hZGRfdG9wb2xv Z3kgIT0gUEFTUyB8fAorCQkJCWlucHV0LT5jcmVhdGVfc2Vzc2lvbiAhPSBQQVNTKSB7CisJCQkv KiBvdXQgb2Ygc3luYyB3aXRoIHBzcCBzdGF0ZSAqLworCQkJYWRqdXN0LT5oZGNwMS5kaXNhYmxl ID0gMTsKKwkJCWZhaWxfYW5kX3Jlc3RhcnRfaW5fbXMoMCwgJnN0YXR1cywgb3V0cHV0KTsKKwkJ CWJyZWFrOworCQl9IGVsc2UgaWYgKGlucHV0LT5hbl93cml0ZSAhPSBQQVNTIHx8CisJCQkJaW5w dXQtPmFrc3Zfd3JpdGUgIT0gUEFTUyB8fAorCQkJCWlucHV0LT5ia3N2X3JlYWQgIT0gUEFTUyB8 fAorCQkJCWlucHV0LT5ia3N2X3ZhbGlkYXRpb24gIT0gUEFTUyB8fAorCQkJCWlucHV0LT5haW5m b193cml0ZSA9PSBGQUlMKSB7CisJCQkvKiAxQS0wNTogY29uc2lkZXIgaW52YWxpZCBia3N2IGEg ZmFpbHVyZSAqLworCQkJZmFpbF9hbmRfcmVzdGFydF9pbl9tcygwLCAmc3RhdHVzLCBvdXRwdXQp OworCQkJYnJlYWs7CisJCX0KKwkJY2FsbGJhY2tfaW5fbXMoMzAwLCBvdXRwdXQpOworCQlzZXRf c3RhdGVfaWQoaGRjcCwgb3V0cHV0LAorCQkJSDFfQTJfQ09NUFVUQVRJT05TX0EzX1ZBTElEQVRF X1JYX0E2X1RFU1RfRk9SX1JFUEVBVEVSKTsKKwkJYnJlYWs7CisJY2FzZSBIMV9BMl9DT01QVVRB VElPTlNfQTNfVkFMSURBVEVfUlhfQTZfVEVTVF9GT1JfUkVQRUFURVI6CisJCWlmIChpbnB1dC0+ YmNhcHNfcmVhZCAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPnIwcF9yZWFkICE9IFBBU1MgfHwKKwkJ CQlpbnB1dC0+cnhfdmFsaWRhdGlvbiAhPSBQQVNTIHx8CisJCQkJKCFjb25uLT5pc19yZXBlYXRl ciAmJiBpbnB1dC0+ZW5jcnlwdGlvbiAhPSBQQVNTKSkgeworCQkJLyogMUEtMDY6IGNvbnNpZGVy IGludmFsaWQgcjAnIGEgZmFpbHVyZSAqLworCQkJLyogMUEtMDg6IGNvbnNpZGVyIGJrc3YgbGlz dGVkIGluIFNSTSBhIGZhaWx1cmUgKi8KKwkJCWZhaWxfYW5kX3Jlc3RhcnRfaW5fbXMoMCwgJnN0 YXR1cywgb3V0cHV0KTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb25uLT5pc19yZXBlYXRlcikg eworCQkJY2FsbGJhY2tfaW5fbXMoMCwgb3V0cHV0KTsKKwkJCXNldF93YXRjaGRvZ19pbl9tcyho ZGNwLCA1MDAwLCBvdXRwdXQpOworCQkJc2V0X3N0YXRlX2lkKGhkY3AsIG91dHB1dCwgSDFfQThf V0FJVF9GT1JfUkVBRFkpOworCQl9IGVsc2UgeworCQkJY2FsbGJhY2tfaW5fbXMoMCwgb3V0cHV0 KTsKKwkJCXNldF9zdGF0ZV9pZChoZGNwLCBvdXRwdXQsIEgxX0E0NV9BVVRIRU5JQ0FURUQpOwor CQkJSERDUF9GVUxMX0REQ19UUkFDRShoZGNwKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEgxX0E0 NV9BVVRIRU5JQ0FURUQ6CisJCWlmIChpbnB1dC0+bGlua19tYWludGVuYW5jZSAhPSBQQVNTKSB7 CisJCQkvKiAxQS0wNzogY29uc2lkZXIgaW52YWxpZCByaScgYSBmYWlsdXJlICovCisJCQkvKiAx QS0wN2E6IGNvbnNpZGVyIHJlYWQgcmknIG5vdCByZXR1cm5lZCBhIGZhaWx1cmUgKi8KKwkJCWZh aWxfYW5kX3Jlc3RhcnRfaW5fbXMoMCwgJnN0YXR1cywgb3V0cHV0KTsKKwkJCWJyZWFrOworCQl9 CisJCWNhbGxiYWNrX2luX21zKDUwMCwgb3V0cHV0KTsKKwkJaW5jcmVtZW50X3N0YXlfY291bnRl cihoZGNwKTsKKwkJYnJlYWs7CisJY2FzZSBIMV9BOF9XQUlUX0ZPUl9SRUFEWToKKwkJaWYgKGlu cHV0LT5yZWFkeV9jaGVjayAhPSBQQVNTKSB7CisJCQlpZiAoZXZlbnRfY3R4LT5ldmVudCA9PQor CQkJCQlNT0RfSERDUF9FVkVOVF9XQVRDSERPR19USU1FT1VUKSB7CisJCQkJLyogMUItMDM6IGZh aWwgaGRjcCBvbiBrc3YgbGlzdCBSRUFEWSB0aW1lb3V0ICovCisJCQkJLyogcHJldmVudCBibGFj ayBzY3JlZW4gaW4gbmV4dCBhdHRlbXB0ICovCisJCQkJYWRqdXN0LT5oZGNwMS5wb3N0cG9uZV9l bmNyeXB0aW9uID0gMTsKKwkJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91 dHB1dCk7CisJCQl9IGVsc2UgeworCQkJCS8qIGNvbnRpbnVlIGtzdiBsaXN0IFJFQURZIHBvbGxp bmcqLworCQkJCWNhbGxiYWNrX2luX21zKDUwMCwgb3V0cHV0KTsKKwkJCQlpbmNyZW1lbnRfc3Rh eV9jb3VudGVyKGhkY3ApOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJY2FsbGJhY2tfaW5fbXMo MCwgb3V0cHV0KTsKKwkJc2V0X3N0YXRlX2lkKGhkY3AsIG91dHB1dCwgSDFfQTlfUkVBRF9LU1Zf TElTVCk7CisJCWJyZWFrOworCWNhc2UgSDFfQTlfUkVBRF9LU1ZfTElTVDoKKwkJaWYgKGlucHV0 LT5ic3RhdHVzX3JlYWQgIT0gUEFTUyB8fAorCQkJCWlucHV0LT5tYXhfY2FzY2FkZV9jaGVjayAh PSBQQVNTIHx8CisJCQkJaW5wdXQtPm1heF9kZXZzX2NoZWNrICE9IFBBU1MgfHwKKwkJCQlpbnB1 dC0+ZGV2aWNlX2NvdW50X2NoZWNrICE9IFBBU1MgfHwKKwkJCQlpbnB1dC0+a3N2bGlzdF9yZWFk ICE9IFBBU1MgfHwKKwkJCQlpbnB1dC0+dnBfcmVhZCAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPmtz dmxpc3RfdnBfdmFsaWRhdGlvbiAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPmVuY3J5cHRpb24gIT0g UEFTUykgeworCQkJLyogMUItMDY6IGNvbnNpZGVyIE1BWF9DQVNDQURFX0VYQ0VFREVEIGEgZmFp bHVyZSAqLworCQkJLyogMUItMDU6IGNvbnNpZGVyIE1BWF9ERVZTX0VYQ0VFREVEIGEgZmFpbHVy ZSAqLworCQkJLyogMUItMDQ6IGNvbnNpZGVyIGludmFsaWQgdicgYSBmYWlsdXJlICovCisJCQlm YWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJ fQorCQljYWxsYmFja19pbl9tcygwLCBvdXRwdXQpOworCQlzZXRfc3RhdGVfaWQoaGRjcCwgb3V0 cHV0LCBIMV9BNDVfQVVUSEVOSUNBVEVEKTsKKwkJSERDUF9GVUxMX0REQ19UUkFDRShoZGNwKTsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gTU9EX0hEQ1BfU1RBVFVTX0lOVkFMSURf U1RBVEU7CisJCWZhaWxfYW5kX3Jlc3RhcnRfaW5fbXMoMCwgJnN0YXR1cywgb3V0cHV0KTsKKwkJ YnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworZW51bSBtb2RfaGRjcF9zdGF0dXMg bW9kX2hkY3BfaGRjcDFfZHBfdHJhbnNpdGlvbihzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXN0 cnVjdCBtb2RfaGRjcF9ldmVudF9jb250ZXh0ICpldmVudF9jdHgsCisJCXN0cnVjdCBtb2RfaGRj cF90cmFuc2l0aW9uX2lucHV0X2hkY3AxICppbnB1dCwKKwkJc3RydWN0IG1vZF9oZGNwX291dHB1 dCAqb3V0cHV0KQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1cyA9IE1PRF9IRENQX1NU QVRVU19TVUNDRVNTOworCXN0cnVjdCBtb2RfaGRjcF9jb25uZWN0aW9uICpjb25uID0gJmhkY3At PmNvbm5lY3Rpb247CisJc3RydWN0IG1vZF9oZGNwX2xpbmtfYWRqdXN0bWVudCAqYWRqdXN0ID0g JmhkY3AtPmNvbm5lY3Rpb24ubGluay5hZGp1c3Q7CisKKwlzd2l0Y2ggKGN1cnJlbnRfc3RhdGUo aGRjcCkpIHsKKwljYXNlIEQxX0EwX0RFVEVSTUlORV9SWF9IRENQX0NBUEFCTEU6CisJCWlmIChp bnB1dC0+YmNhcHNfcmVhZCAhPSBQQVNTKSB7CisJCQkvKiAxQS0wNDogbm8gYXV0aGVudGljYXRp b24gb24gYmNhcHMgcmVhZCBmYWlsdXJlICovCisJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAs ICZzdGF0dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChpbnB1dC0+aGRjcF9j YXBhYmxlX2RwICE9IFBBU1MpIHsKKwkJCWFkanVzdC0+aGRjcDEuZGlzYWJsZSA9IDE7CisJCQlm YWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJ fQorCQljYWxsYmFja19pbl9tcygwLCBvdXRwdXQpOworCQlzZXRfc3RhdGVfaWQoaGRjcCwgb3V0 cHV0LCBEMV9BMV9FWENIQU5HRV9LU1ZTKTsKKwkJYnJlYWs7CisJY2FzZSBEMV9BMV9FWENIQU5H RV9LU1ZTOgorCQlpZiAoaW5wdXQtPmFkZF90b3BvbG9neSAhPSBQQVNTIHx8CisJCQkJaW5wdXQt PmNyZWF0ZV9zZXNzaW9uICE9IFBBU1MpIHsKKwkJCS8qIG91dCBvZiBzeW5jIHdpdGggcHNwIHN0 YXRlICovCisJCQlhZGp1c3QtPmhkY3AxLmRpc2FibGUgPSAxOworCQkJZmFpbF9hbmRfcmVzdGFy dF9pbl9tcygwLCAmc3RhdHVzLCBvdXRwdXQpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoaW5w dXQtPmFuX3dyaXRlICE9IFBBU1MgfHwKKwkJCQlpbnB1dC0+YWtzdl93cml0ZSAhPSBQQVNTIHx8 CisJCQkJaW5wdXQtPmJrc3ZfcmVhZCAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPmJrc3ZfdmFsaWRh dGlvbiAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPmFpbmZvX3dyaXRlID09IEZBSUwpIHsKKwkJCS8q IDFBLTA1OiBjb25zaWRlciBpbnZhbGlkIGJrc3YgYSBmYWlsdXJlICovCisJCQlmYWlsX2FuZF9y ZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJfQorCQlzZXRf d2F0Y2hkb2dfaW5fbXMoaGRjcCwgMTAwLCBvdXRwdXQpOworCQlzZXRfc3RhdGVfaWQoaGRjcCwg b3V0cHV0LCBEMV9BMjNfV0FJVF9GT1JfUjBfUFJJTUUpOworCQlicmVhazsKKwljYXNlIEQxX0Ey M19XQUlUX0ZPUl9SMF9QUklNRToKKwkJaWYgKGlucHV0LT5ic3RhdHVzX3JlYWQgIT0gUEFTUykg eworCQkJZmFpbF9hbmRfcmVzdGFydF9pbl9tcygwLCAmc3RhdHVzLCBvdXRwdXQpOworCQkJYnJl YWs7CisJCX0gZWxzZSBpZiAoaW5wdXQtPnIwcF9hdmFpbGFibGVfZHAgIT0gUEFTUykgeworCQkJ aWYgKGV2ZW50X2N0eC0+ZXZlbnQgPT0gTU9EX0hEQ1BfRVZFTlRfV0FUQ0hET0dfVElNRU9VVCkK KwkJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQllbHNl CisJCQkJaW5jcmVtZW50X3N0YXlfY291bnRlcihoZGNwKTsKKwkJCWJyZWFrOworCQl9CisJCWNh bGxiYWNrX2luX21zKDAsIG91dHB1dCk7CisJCXNldF9zdGF0ZV9pZChoZGNwLCBvdXRwdXQsIEQx X0EyX0NPTVBVVEFUSU9OU19BM19WQUxJREFURV9SWF9BNV9URVNUX0ZPUl9SRVBFQVRFUik7CisJ CWJyZWFrOworCWNhc2UgRDFfQTJfQ09NUFVUQVRJT05TX0EzX1ZBTElEQVRFX1JYX0E1X1RFU1Rf Rk9SX1JFUEVBVEVSOgorCQlpZiAoaW5wdXQtPnIwcF9yZWFkICE9IFBBU1MpIHsKKwkJCWZhaWxf YW5kX3Jlc3RhcnRfaW5fbXMoMCwgJnN0YXR1cywgb3V0cHV0KTsKKwkJCWJyZWFrOworCQl9IGVs c2UgaWYgKGlucHV0LT5yeF92YWxpZGF0aW9uICE9IFBBU1MpIHsKKwkJCWlmIChoZGNwLT5zdGF0 ZS5zdGF5X2NvdW50IDwgMikgeworCQkJCS8qIGFsbG93IDIgYWRkaXRpb25hbCByZXRyaWVzICov CisJCQkJY2FsbGJhY2tfaW5fbXMoMCwgb3V0cHV0KTsKKwkJCQlpbmNyZW1lbnRfc3RheV9jb3Vu dGVyKGhkY3ApOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIDFBLTA2OiBjb25zaWRlciBp bnZhbGlkIHIwJyBhIGZhaWx1cmUKKwkJCQkgKiBhZnRlciAzIGF0dGVtcHRzLgorCQkJCSAqIDFB LTA4OiBjb25zaWRlciBia3N2IGxpc3RlZCBpbiBTUk0gYSBmYWlsdXJlCisJCQkJICovCisJCQkJ ZmFpbF9hbmRfcmVzdGFydF9pbl9tcygwLCAmc3RhdHVzLCBvdXRwdXQpOworCQkJfQorCQkJYnJl YWs7CisJCX0gZWxzZSBpZiAoKCFjb25uLT5pc19yZXBlYXRlciAmJiBpbnB1dC0+ZW5jcnlwdGlv biAhPSBQQVNTKSB8fAorCQkJCSghY29ubi0+aXNfcmVwZWF0ZXIgJiYgaXNfZHBfbXN0X2hkY3Ao aGRjcCkgJiYgaW5wdXQtPnN0cmVhbV9lbmNyeXB0aW9uX2RwICE9IFBBU1MpKSB7CisJCQlmYWls X2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJfQor CQlpZiAoY29ubi0+aXNfcmVwZWF0ZXIpIHsKKwkJCXNldF93YXRjaGRvZ19pbl9tcyhoZGNwLCA1 MDAwLCBvdXRwdXQpOworCQkJc2V0X3N0YXRlX2lkKGhkY3AsIG91dHB1dCwgRDFfQTZfV0FJVF9G T1JfUkVBRFkpOworCQl9IGVsc2UgeworCQkJc2V0X3N0YXRlX2lkKGhkY3AsIG91dHB1dCwgRDFf QTRfQVVUSEVOSUNBVEVEKTsKKwkJCUhEQ1BfRlVMTF9ERENfVFJBQ0UoaGRjcCk7CisJCX0KKwkJ YnJlYWs7CisJY2FzZSBEMV9BNF9BVVRIRU5JQ0FURUQ6CisJCWlmIChpbnB1dC0+bGlua19pbnRl Z2lyeV9jaGVjayAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPnJlYXV0aF9yZXF1ZXN0X2NoZWNrICE9 IFBBU1MpIHsKKwkJCS8qIDFBLTA3OiByZXN0YXJ0IGhkY3Agb24gYSBsaW5rIGludGVncml0eSBm YWlsdXJlICovCisJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91dHB1dCk7 CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIEQxX0E2X1dBSVRfRk9SX1JFQURZOgor CQlpZiAoaW5wdXQtPmxpbmtfaW50ZWdpcnlfY2hlY2sgPT0gRkFJTCB8fAorCQkJCWlucHV0LT5y ZWF1dGhfcmVxdWVzdF9jaGVjayA9PSBGQUlMKSB7CisJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21z KDAsICZzdGF0dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChpbnB1dC0+cmVh ZHlfY2hlY2sgIT0gUEFTUykgeworCQkJaWYgKGV2ZW50X2N0eC0+ZXZlbnQgPT0KKwkJCQkJTU9E X0hEQ1BfRVZFTlRfV0FUQ0hET0dfVElNRU9VVCkgeworCQkJCS8qIDFCLTA0OiBmYWlsIGhkY3Ag b24ga3N2IGxpc3QgUkVBRFkgdGltZW91dCAqLworCQkJCS8qIHByZXZlbnQgYmxhY2sgc2NyZWVu IGluIG5leHQgYXR0ZW1wdCAqLworCQkJCWFkanVzdC0+aGRjcDEucG9zdHBvbmVfZW5jcnlwdGlv biA9IDE7CisJCQkJZmFpbF9hbmRfcmVzdGFydF9pbl9tcygwLCAmc3RhdHVzLCBvdXRwdXQpOwor CQkJfSBlbHNlIHsKKwkJCQlpbmNyZW1lbnRfc3RheV9jb3VudGVyKGhkY3ApOworCQkJfQorCQkJ YnJlYWs7CisJCX0KKwkJY2FsbGJhY2tfaW5fbXMoMCwgb3V0cHV0KTsKKwkJc2V0X3N0YXRlX2lk KGhkY3AsIG91dHB1dCwgRDFfQTdfUkVBRF9LU1ZfTElTVCk7CisJCWJyZWFrOworCWNhc2UgRDFf QTdfUkVBRF9LU1ZfTElTVDoKKwkJaWYgKGlucHV0LT5iaW5mb19yZWFkX2RwICE9IFBBU1MgfHwK KwkJCQlpbnB1dC0+bWF4X2Nhc2NhZGVfY2hlY2sgIT0gUEFTUyB8fAorCQkJCWlucHV0LT5tYXhf ZGV2c19jaGVjayAhPSBQQVNTKSB7CisJCQkvKiAxQi0wNjogY29uc2lkZXIgTUFYX0RFVlNfRVhD RUVERUQgYSBmYWlsdXJlICovCisJCQkvKiAxQi0wNzogY29uc2lkZXIgTUFYX0NBU0NBREVfRVhD RUVERUQgYSBmYWlsdXJlICovCisJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMs IG91dHB1dCk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChpbnB1dC0+ZGV2aWNlX2NvdW50X2No ZWNrICE9IFBBU1MpIHsKKwkJCS8qCisJCQkgKiBzb21lIHNsb3cgZG9uZ2xlIGRvZXNuJ3QgdXBk YXRlCisJCQkgKiBkZXZpY2UgY291bnQgYXMgc29vbiBhcyBkb3duc3RyZWFtIGlzIGNvbm5lY3Rl ZC4KKwkJCSAqIGdpdmUgaXQgbW9yZSB0aW1lIHRvIHJlYWN0LgorCQkJICovCisJCQlhZGp1c3Qt PmhkY3AxLnBvc3Rwb25lX2VuY3J5cHRpb24gPSAxOworCQkJZmFpbF9hbmRfcmVzdGFydF9pbl9t cygxMDAwLCAmc3RhdHVzLCBvdXRwdXQpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoaW5wdXQt Pmtzdmxpc3RfcmVhZCAhPSBQQVNTIHx8CisJCQkJaW5wdXQtPnZwX3JlYWQgIT0gUEFTUykgewor CQkJZmFpbF9hbmRfcmVzdGFydF9pbl9tcygwLCAmc3RhdHVzLCBvdXRwdXQpOworCQkJYnJlYWs7 CisJCX0gZWxzZSBpZiAoaW5wdXQtPmtzdmxpc3RfdnBfdmFsaWRhdGlvbiAhPSBQQVNTKSB7CisJ CQlpZiAoaGRjcC0+c3RhdGUuc3RheV9jb3VudCA8IDIpIHsKKwkJCQkvKiBhbGxvdyAyIGFkZGl0 aW9uYWwgcmV0cmllcyAqLworCQkJCWNhbGxiYWNrX2luX21zKDAsIG91dHB1dCk7CisJCQkJaW5j cmVtZW50X3N0YXlfY291bnRlcihoZGNwKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiAx Qi0wNTogY29uc2lkZXIgaW52YWxpZCB2JyBhIGZhaWx1cmUKKwkJCQkgKiBhZnRlciAzIGF0dGVt cHRzLgorCQkJCSAqLworCQkJCWZhaWxfYW5kX3Jlc3RhcnRfaW5fbXMoMCwgJnN0YXR1cywgb3V0 cHV0KTsKKwkJCX0KKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGlucHV0LT5lbmNyeXB0aW9uICE9 IFBBU1MgfHwKKwkJCQkoaXNfZHBfbXN0X2hkY3AoaGRjcCkgJiYgaW5wdXQtPnN0cmVhbV9lbmNy eXB0aW9uX2RwICE9IFBBU1MpKSB7CisJCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0 dXMsIG91dHB1dCk7CisJCQlicmVhazsKKwkJfQorCQlzZXRfc3RhdGVfaWQoaGRjcCwgb3V0cHV0 LCBEMV9BNF9BVVRIRU5JQ0FURUQpOworCQlIRENQX0ZVTExfRERDX1RSQUNFKGhkY3ApOworCQli cmVhazsKKwlkZWZhdWx0OgorCQlmYWlsX2FuZF9yZXN0YXJ0X2luX21zKDAsICZzdGF0dXMsIG91 dHB1dCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3BfZGRjLmMgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3BfZGRjLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lN2JhYWUwNTliODUKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3BfZGRj LmMKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNy byBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisg KiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBP VEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogQU1ECisgKgor ICovCisKKyNpbmNsdWRlICJoZGNwLmgiCisKKyNkZWZpbmUgTUlOKGEsIGIpICgoYSkgPCAoYikg PyAoYSkgOiAoYikpCisjZGVmaW5lIEhEQ1BfSTJDX0FERFIgMHgzYQkvKiAweDc0ID4+IDEqLwor I2RlZmluZSBLU1ZfUkVBRF9TSVpFIDB4ZgkvKiAweDY4MDNiIC0gMHg2ODAyYyAqLworI2RlZmlu ZSBIRENQX01BWF9BVVhfVFJBTlNBQ1RJT05fU0laRSAxNgorCitlbnVtIG1vZF9oZGNwX2RkY19t ZXNzYWdlX2lkIHsKKwlNT0RfSERDUF9NRVNTQUdFX0lEX0lOVkFMSUQgPSAtMSwKKworCS8qIEhE Q1AgMS40ICovCisKKwlNT0RfSERDUF9NRVNTQUdFX0lEX1JFQURfQktTViA9IDAsCisJTU9EX0hE Q1BfTUVTU0FHRV9JRF9SRUFEX1JJX1IwLAorCU1PRF9IRENQX01FU1NBR0VfSURfV1JJVEVfQUtT ViwKKwlNT0RfSERDUF9NRVNTQUdFX0lEX1dSSVRFX0FJTkZPLAorCU1PRF9IRENQX01FU1NBR0Vf SURfV1JJVEVfQU4sCisJTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIX1gsCisJTU9EX0hEQ1Bf TUVTU0FHRV9JRF9SRUFEX1ZIXzAsCisJTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzEsCisJ TU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzIsCisJTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFE X1ZIXzMsCisJTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzQsCisJTU9EX0hEQ1BfTUVTU0FH RV9JRF9SRUFEX0JDQVBTLAorCU1PRF9IRENQX01FU1NBR0VfSURfUkVBRF9CU1RBVFVTLAorCU1P RF9IRENQX01FU1NBR0VfSURfUkVBRF9LU1ZfRklGTywKKwlNT0RfSERDUF9NRVNTQUdFX0lEX1JF QURfQklORk8sCisKKwlNT0RfSERDUF9NRVNTQUdFX0lEX01BWAorfTsKKworc3RhdGljIGNvbnN0 IHVpbnQ4X3QgaGRjcF9pMmNfb2Zmc2V0c1tdID0geworCVtNT0RfSERDUF9NRVNTQUdFX0lEX1JF QURfQktTVl0gPSAweDAsCisJW01PRF9IRENQX01FU1NBR0VfSURfUkVBRF9SSV9SMF0gPSAweDgs CisJW01PRF9IRENQX01FU1NBR0VfSURfV1JJVEVfQUtTVl0gPSAweDEwLAorCVtNT0RfSERDUF9N RVNTQUdFX0lEX1dSSVRFX0FJTkZPXSA9IDB4MTUsCisJW01PRF9IRENQX01FU1NBR0VfSURfV1JJ VEVfQU5dID0gMHgxOCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIX1hdID0gMHgyMCwK KwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzBdID0gMHgyMCwKKwlbTU9EX0hEQ1BfTUVT U0FHRV9JRF9SRUFEX1ZIXzFdID0gMHgyNCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZI XzJdID0gMHgyOCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzNdID0gMHgyQywKKwlb TU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzRdID0gMHgzMCwKKwlbTU9EX0hEQ1BfTUVTU0FH RV9JRF9SRUFEX0JDQVBTXSA9IDB4NDAsCisJW01PRF9IRENQX01FU1NBR0VfSURfUkVBRF9CU1RB VFVTXSA9IDB4NDEsCisJW01PRF9IRENQX01FU1NBR0VfSURfUkVBRF9LU1ZfRklGT10gPSAweDQz LAorCVtNT0RfSERDUF9NRVNTQUdFX0lEX1JFQURfQklORk9dID0gMHhGRiwKK307CisKK3N0YXRp YyBjb25zdCB1aW50MzJfdCBoZGNwX2RwY2RfYWRkcnNbXSA9IHsKKwlbTU9EX0hEQ1BfTUVTU0FH RV9JRF9SRUFEX0JLU1ZdID0gMHg2ODAwMCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1JJ X1IwXSA9IDB4NjgwMDUsCisJW01PRF9IRENQX01FU1NBR0VfSURfV1JJVEVfQUtTVl0gPSAweDY4 MDA3LAorCVtNT0RfSERDUF9NRVNTQUdFX0lEX1dSSVRFX0FJTkZPXSA9IDB4NjgwM0IsCisJW01P RF9IRENQX01FU1NBR0VfSURfV1JJVEVfQU5dID0gMHg2ODAwYywKKwlbTU9EX0hEQ1BfTUVTU0FH RV9JRF9SRUFEX1ZIX1hdID0gMHg2ODAxNCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZI XzBdID0gMHg2ODAxNCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzFdID0gMHg2ODAx OCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzJdID0gMHg2ODAxYywKKwlbTU9EX0hE Q1BfTUVTU0FHRV9JRF9SRUFEX1ZIXzNdID0gMHg2ODAyMCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9J RF9SRUFEX1ZIXzRdID0gMHg2ODAyNCwKKwlbTU9EX0hEQ1BfTUVTU0FHRV9JRF9SRUFEX0JDQVBT XSA9IDB4NjgwMjgsCisJW01PRF9IRENQX01FU1NBR0VfSURfUkVBRF9CU1RBVFVTXSA9IDB4Njgw MjksCisJW01PRF9IRENQX01FU1NBR0VfSURfUkVBRF9LU1ZfRklGT10gPSAweDY4MDJjLAorCVtN T0RfSERDUF9NRVNTQUdFX0lEX1JFQURfQklORk9dID0gMHg2ODAyYSwKK307CisKK3N0YXRpYyBl bnVtIG1vZF9oZGNwX3N0YXR1cyByZWFkKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJZW51bSBt b2RfaGRjcF9kZGNfbWVzc2FnZV9pZCBtc2dfaWQsCisJCXVpbnQ4X3QgKmJ1ZiwKKwkJdWludDMy X3QgYnVmX2xlbikKK3sKKwlib29sIHN1Y2Nlc3MgPSB0cnVlOworCXVpbnQzMl90IGN1cl9zaXpl ID0gMDsKKwl1aW50MzJfdCBkYXRhX29mZnNldCA9IDA7CisKKwlpZiAoaXNfZHBfaGRjcChoZGNw KSkgeworCQl3aGlsZSAoYnVmX2xlbiA+IDApIHsKKwkJCWN1cl9zaXplID0gTUlOKGJ1Zl9sZW4s IEhEQ1BfTUFYX0FVWF9UUkFOU0FDVElPTl9TSVpFKTsKKwkJCXN1Y2Nlc3MgPSBoZGNwLT5jb25m aWcuZGRjLmZ1bmNzLnJlYWRfZHBjZChoZGNwLT5jb25maWcuZGRjLmhhbmRsZSwKKwkJCQkJaGRj cF9kcGNkX2FkZHJzW21zZ19pZF0gKyBkYXRhX29mZnNldCwKKwkJCQkJYnVmICsgZGF0YV9vZmZz ZXQsCisJCQkJCWN1cl9zaXplKTsKKworCQkJaWYgKCFzdWNjZXNzKQorCQkJCWJyZWFrOworCisJ CQlidWZfbGVuIC09IGN1cl9zaXplOworCQkJZGF0YV9vZmZzZXQgKz0gY3VyX3NpemU7CisJCX0K Kwl9IGVsc2UgeworCQlzdWNjZXNzID0gaGRjcC0+Y29uZmlnLmRkYy5mdW5jcy5yZWFkX2kyYygK KwkJCQloZGNwLT5jb25maWcuZGRjLmhhbmRsZSwKKwkJCQlIRENQX0kyQ19BRERSLAorCQkJCWhk Y3BfaTJjX29mZnNldHNbbXNnX2lkXSwKKwkJCQlidWYsCisJCQkJKHVpbnQzMl90KWJ1Zl9sZW4p OworCX0KKworCXJldHVybiBzdWNjZXNzID8gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MgOiBNT0Rf SERDUF9TVEFUVVNfRERDX0ZBSUxVUkU7Cit9CisKK3N0YXRpYyBlbnVtIG1vZF9oZGNwX3N0YXR1 cyByZWFkX3JlcGVhdGVkbHkoc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQllbnVtIG1vZF9oZGNw X2RkY19tZXNzYWdlX2lkIG1zZ19pZCwKKwkJdWludDhfdCAqYnVmLAorCQl1aW50MzJfdCBidWZf bGVuLAorCQl1aW50OF90IHJlYWRfc2l6ZSkKK3sKKwllbnVtIG1vZF9oZGNwX3N0YXR1cyBzdGF0 dXMgPSBNT0RfSERDUF9TVEFUVVNfRERDX0ZBSUxVUkU7CisJdWludDMyX3QgY3VyX3NpemUgPSAw OworCXVpbnQzMl90IGRhdGFfb2Zmc2V0ID0gMDsKKworCXdoaWxlIChidWZfbGVuID4gMCkgewor CQljdXJfc2l6ZSA9IE1JTihidWZfbGVuLCByZWFkX3NpemUpOworCQlzdGF0dXMgPSByZWFkKGhk Y3AsIG1zZ19pZCwgYnVmICsgZGF0YV9vZmZzZXQsIGN1cl9zaXplKTsKKworCQlpZiAoc3RhdHVz ICE9IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTKQorCQkJYnJlYWs7CisKKwkJYnVmX2xlbiAtPSBj dXJfc2l6ZTsKKwkJZGF0YV9vZmZzZXQgKz0gY3VyX3NpemU7CisJfQorCisJcmV0dXJuIHN0YXR1 czsKK30KKworc3RhdGljIGVudW0gbW9kX2hkY3Bfc3RhdHVzIHdyaXRlKHN0cnVjdCBtb2RfaGRj cCAqaGRjcCwKKwkJZW51bSBtb2RfaGRjcF9kZGNfbWVzc2FnZV9pZCBtc2dfaWQsCisJCXVpbnQ4 X3QgKmJ1ZiwKKwkJdWludDMyX3QgYnVmX2xlbikKK3sKKwlib29sIHN1Y2Nlc3MgPSB0cnVlOwor CXVpbnQzMl90IGN1cl9zaXplID0gMDsKKwl1aW50MzJfdCBkYXRhX29mZnNldCA9IDA7CisKKwlp ZiAoaXNfZHBfaGRjcChoZGNwKSkgeworCQl3aGlsZSAoYnVmX2xlbiA+IDApIHsKKwkJCWN1cl9z aXplID0gTUlOKGJ1Zl9sZW4sIEhEQ1BfTUFYX0FVWF9UUkFOU0FDVElPTl9TSVpFKTsKKwkJCXN1 Y2Nlc3MgPSBoZGNwLT5jb25maWcuZGRjLmZ1bmNzLndyaXRlX2RwY2QoCisJCQkJCWhkY3AtPmNv bmZpZy5kZGMuaGFuZGxlLAorCQkJCQloZGNwX2RwY2RfYWRkcnNbbXNnX2lkXSArIGRhdGFfb2Zm c2V0LAorCQkJCQlidWYgKyBkYXRhX29mZnNldCwKKwkJCQkJY3VyX3NpemUpOworCisJCQlpZiAo IXN1Y2Nlc3MpCisJCQkJYnJlYWs7CisKKwkJCWJ1Zl9sZW4gLT0gY3VyX3NpemU7CisJCQlkYXRh X29mZnNldCArPSBjdXJfc2l6ZTsKKwkJfQorCX0gZWxzZSB7CisJCWhkY3AtPmJ1ZlswXSA9IGhk Y3BfaTJjX29mZnNldHNbbXNnX2lkXTsKKwkJbWVtbW92ZSgmaGRjcC0+YnVmWzFdLCBidWYsIGJ1 Zl9sZW4pOworCQlzdWNjZXNzID0gaGRjcC0+Y29uZmlnLmRkYy5mdW5jcy53cml0ZV9pMmMoCisJ CQkJaGRjcC0+Y29uZmlnLmRkYy5oYW5kbGUsCisJCQkJSERDUF9JMkNfQUREUiwKKwkJCQloZGNw LT5idWYsCisJCQkJKHVpbnQzMl90KShidWZfbGVuKzEpKTsKKwl9CisKKwlyZXR1cm4gc3VjY2Vz cyA/IE1PRF9IRENQX1NUQVRVU19TVUNDRVNTIDogTU9EX0hEQ1BfU1RBVFVTX0REQ19GQUlMVVJF OworfQorCitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX2Jrc3Yoc3RydWN0IG1v ZF9oZGNwICpoZGNwKQoreworCXJldHVybiByZWFkKGhkY3AsIE1PRF9IRENQX01FU1NBR0VfSURf UkVBRF9CS1NWLAorCQkJaGRjcC0+YXV0aC5tc2cuaGRjcDEuYmtzdiwKKwkJCXNpemVvZihoZGNw LT5hdXRoLm1zZy5oZGNwMS5ia3N2KSk7Cit9CisKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9o ZGNwX3JlYWRfYmNhcHMoc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCXJldHVybiByZWFkKGhk Y3AsIE1PRF9IRENQX01FU1NBR0VfSURfUkVBRF9CQ0FQUywKKwkJCSZoZGNwLT5hdXRoLm1zZy5o ZGNwMS5iY2FwcywKKwkJCXNpemVvZihoZGNwLT5hdXRoLm1zZy5oZGNwMS5iY2FwcykpOworfQor CitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRjcF9yZWFkX2JzdGF0dXMoc3RydWN0IG1vZF9o ZGNwICpoZGNwKQoreworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1czsKKworCWlmIChpc19k cF9oZGNwKGhkY3ApKQorCQlzdGF0dXMgPSByZWFkKGhkY3AsIE1PRF9IRENQX01FU1NBR0VfSURf UkVBRF9CU1RBVFVTLAorCQkJCQkodWludDhfdCAqKSZoZGNwLT5hdXRoLm1zZy5oZGNwMS5ic3Rh dHVzLAorCQkJCQkxKTsKKwllbHNlCisJCXN0YXR1cyA9IHJlYWQoaGRjcCwgTU9EX0hEQ1BfTUVT U0FHRV9JRF9SRUFEX0JTVEFUVVMsCisJCQkJKHVpbnQ4X3QgKikmaGRjcC0+YXV0aC5tc2cuaGRj cDEuYnN0YXR1cywKKwkJCQlzaXplb2YoaGRjcC0+YXV0aC5tc2cuaGRjcDEuYnN0YXR1cykpOwor CXJldHVybiBzdGF0dXM7Cit9CisKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3JlYWRf cjBwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwlyZXR1cm4gcmVhZChoZGNwLCBNT0RfSERD UF9NRVNTQUdFX0lEX1JFQURfUklfUjAsCisJCQkodWludDhfdCAqKSZoZGNwLT5hdXRoLm1zZy5o ZGNwMS5yMHAsCisJCQlzaXplb2YoaGRjcC0+YXV0aC5tc2cuaGRjcDEucjBwKSk7Cit9CisKKy8q IHNwZWNpYWwgY2FzZSwgcmVhZGluZyByZXBlYXRlZGx5IGF0IHRoZSBzYW1lIGFkZHJlc3MsIGRv bid0IHVzZSByZWFkKCkgKi8KK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3JlYWRfa3N2 bGlzdChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJZW51bSBtb2RfaGRjcF9zdGF0dXMgc3Rh dHVzOworCisJaWYgKGlzX2RwX2hkY3AoaGRjcCkpCisJCXN0YXR1cyA9IHJlYWRfcmVwZWF0ZWRs eShoZGNwLCBNT0RfSERDUF9NRVNTQUdFX0lEX1JFQURfS1NWX0ZJRk8sCisJCQkJaGRjcC0+YXV0 aC5tc2cuaGRjcDEua3N2bGlzdCwKKwkJCQloZGNwLT5hdXRoLm1zZy5oZGNwMS5rc3ZsaXN0X3Np emUsCisJCQkJS1NWX1JFQURfU0laRSk7CisJZWxzZQorCQlzdGF0dXMgPSByZWFkKGhkY3AsIE1P RF9IRENQX01FU1NBR0VfSURfUkVBRF9LU1ZfRklGTywKKwkJCQkodWludDhfdCAqKSZoZGNwLT5h dXRoLm1zZy5oZGNwMS5rc3ZsaXN0LAorCQkJCWhkY3AtPmF1dGgubXNnLmhkY3AxLmtzdmxpc3Rf c2l6ZSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hk Y3BfcmVhZF92cChzdHJ1Y3QgbW9kX2hkY3AgKmhkY3ApCit7CisJZW51bSBtb2RfaGRjcF9zdGF0 dXMgc3RhdHVzOworCisJc3RhdHVzID0gcmVhZChoZGNwLCBNT0RfSERDUF9NRVNTQUdFX0lEX1JF QURfVkhfMCwKKwkJCSZoZGNwLT5hdXRoLm1zZy5oZGNwMS52cFswXSwgNCk7CisJaWYgKHN0YXR1 cyAhPSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUykKKwkJZ290byBvdXQ7CisKKwlzdGF0dXMgPSBy ZWFkKGhkY3AsIE1PRF9IRENQX01FU1NBR0VfSURfUkVBRF9WSF8xLAorCQkJJmhkY3AtPmF1dGgu bXNnLmhkY3AxLnZwWzRdLCA0KTsKKwlpZiAoc3RhdHVzICE9IE1PRF9IRENQX1NUQVRVU19TVUND RVNTKQorCQlnb3RvIG91dDsKKworCXN0YXR1cyA9IHJlYWQoaGRjcCwgTU9EX0hEQ1BfTUVTU0FH RV9JRF9SRUFEX1ZIXzIsCisJCQkmaGRjcC0+YXV0aC5tc2cuaGRjcDEudnBbOF0sIDQpOworCWlm IChzdGF0dXMgIT0gTU9EX0hEQ1BfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gb3V0OworCisJc3Rh dHVzID0gcmVhZChoZGNwLCBNT0RfSERDUF9NRVNTQUdFX0lEX1JFQURfVkhfMywKKwkJCSZoZGNw LT5hdXRoLm1zZy5oZGNwMS52cFsxMl0sIDQpOworCWlmIChzdGF0dXMgIT0gTU9EX0hEQ1BfU1RB VFVTX1NVQ0NFU1MpCisJCWdvdG8gb3V0OworCisJc3RhdHVzID0gcmVhZChoZGNwLCBNT0RfSERD UF9NRVNTQUdFX0lEX1JFQURfVkhfNCwKKwkJCSZoZGNwLT5hdXRoLm1zZy5oZGNwMS52cFsxNl0s IDQpOworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1v ZF9oZGNwX3JlYWRfYmluZm8oc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCWVudW0gbW9kX2hk Y3Bfc3RhdHVzIHN0YXR1czsKKworCWlmIChpc19kcF9oZGNwKGhkY3ApKQorCQlzdGF0dXMgPSBy ZWFkKGhkY3AsIE1PRF9IRENQX01FU1NBR0VfSURfUkVBRF9CSU5GTywKKwkJCQkodWludDhfdCAq KSZoZGNwLT5hdXRoLm1zZy5oZGNwMS5iaW5mb19kcCwKKwkJCQlzaXplb2YoaGRjcC0+YXV0aC5t c2cuaGRjcDEuYmluZm9fZHApKTsKKwllbHNlCisJCXN0YXR1cyA9IE1PRF9IRENQX1NUQVRVU19J TlZBTElEX09QRVJBVElPTjsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2VudW0gbW9kX2hkY3Bf c3RhdHVzIG1vZF9oZGNwX3dyaXRlX2Frc3Yoc3RydWN0IG1vZF9oZGNwICpoZGNwKQoreworCXJl dHVybiB3cml0ZShoZGNwLCBNT0RfSERDUF9NRVNTQUdFX0lEX1dSSVRFX0FLU1YsCisJCQloZGNw LT5hdXRoLm1zZy5oZGNwMS5ha3N2LAorCQkJc2l6ZW9mKGhkY3AtPmF1dGgubXNnLmhkY3AxLmFr c3YpKTsKK30KKworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3Bfd3JpdGVfYWluZm8oc3Ry dWN0IG1vZF9oZGNwICpoZGNwKQoreworCXJldHVybiB3cml0ZShoZGNwLCBNT0RfSERDUF9NRVNT QUdFX0lEX1dSSVRFX0FJTkZPLAorCQkJJmhkY3AtPmF1dGgubXNnLmhkY3AxLmFpbmZvLAorCQkJ c2l6ZW9mKGhkY3AtPmF1dGgubXNnLmhkY3AxLmFpbmZvKSk7Cit9CisKK2VudW0gbW9kX2hkY3Bf c3RhdHVzIG1vZF9oZGNwX3dyaXRlX2FuKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCkKK3sKKwlyZXR1 cm4gd3JpdGUoaGRjcCwgTU9EX0hEQ1BfTUVTU0FHRV9JRF9XUklURV9BTiwKKwkJCWhkY3AtPmF1 dGgubXNnLmhkY3AxLmFuLAorCQkJc2l6ZW9mKGhkY3AtPmF1dGgubXNnLmhkY3AxLmFuKSk7Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hk Y3BfbG9nLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9oZGNwL2hkY3Bf bG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kODY4ZjU1NmQx ODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxl cy9oZGNwL2hkY3BfbG9nLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAx OSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRl ZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJ U0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0 aG9yczogQU1ECisgKgorICovCisKKworI2luY2x1ZGUgImhkY3AuaCIKKwordm9pZCBtb2RfaGRj cF9kdW1wX2JpbmFyeV9tZXNzYWdlKHVpbnQ4X3QgKm1zZywgdWludDMyX3QgbXNnX3NpemUsCisJ CXVpbnQ4X3QgKmJ1ZiwgdWludDMyX3QgYnVmX3NpemUpCit7CisJY29uc3QgdWludDhfdCBieXRl c19wZXJfbGluZSA9IDE2LAorCQkJYnl0ZV9zaXplID0gMywKKwkJCW5ld2xpbmVfc2l6ZSA9IDEs CisJCQl0ZXJtaW5hdG9yX3NpemUgPSAxOworCXVpbnQzMl90IGxpbmVfY291bnQgPSBtc2dfc2l6 ZSAvIGJ5dGVzX3Blcl9saW5lLAorCQkJdHJhaWxpbmdfYnl0ZXMgPSBtc2dfc2l6ZSAlIGJ5dGVz X3Blcl9saW5lOworCXVpbnQzMl90IHRhcmdldF9zaXplID0gKGJ5dGVfc2l6ZSAqIGJ5dGVzX3Bl cl9saW5lICsgbmV3bGluZV9zaXplKSAqIGxpbmVfY291bnQgKworCQkJYnl0ZV9zaXplICogdHJh aWxpbmdfYnl0ZXMgKyBuZXdsaW5lX3NpemUgKyB0ZXJtaW5hdG9yX3NpemU7CisJdWludDMyX3Qg YnVmX3BvcyA9IDA7CisJdWludDMyX3QgaSA9IDA7CisKKwlpZiAoYnVmX3NpemUgPj0gdGFyZ2V0 X3NpemUpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1zZ19zaXplOyBpKyspIHsKKwkJCWlmIChpICUg Ynl0ZXNfcGVyX2xpbmUgPT0gMCkKKwkJCQlidWZbYnVmX3BvcysrXSA9ICdcbic7CisJCQlzcHJp bnRmKCZidWZbYnVmX3Bvc10sICIlMDJYICIsIG1zZ1tpXSk7CisJCQlidWZfcG9zICs9IGJ5dGVf c2l6ZTsKKwkJfQorCQlidWZbYnVmX3BvcysrXSA9ICdcMCc7CisJfQorfQorCitjaGFyICptb2Rf aGRjcF9zdGF0dXNfdG9fc3RyKGludDMyX3Qgc3RhdHVzKQoreworCXN3aXRjaCAoc3RhdHVzKSB7 CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfU1VDQ0VTUzoKKwkJcmV0dXJuICJNT0RfSERDUF9TVEFU VVNfU1VDQ0VTUyI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfRkFJTFVSRToKKwkJcmV0dXJuICJN T0RfSERDUF9TVEFUVVNfRkFJTFVSRSI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfUkVTRVRfTkVF REVEOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19SRVNFVF9ORUVERUQiOworCWNhc2UgTU9E X0hEQ1BfU1RBVFVTX0RJU1BMQVlfT1VUX09GX0JPVU5EOgorCQlyZXR1cm4gIk1PRF9IRENQX1NU QVRVU19ESVNQTEFZX09VVF9PRl9CT1VORCI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfRElTUExB WV9OT1RfRk9VTkQ6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0RJU1BMQVlfTk9UX0ZPVU5E IjsKKwljYXNlIE1PRF9IRENQX1NUQVRVU19JTlZBTElEX1NUQVRFOgorCQlyZXR1cm4gIk1PRF9I RENQX1NUQVRVU19JTlZBTElEX1NUQVRFIjsKKwljYXNlIE1PRF9IRENQX1NUQVRVU19OT1RfSU1Q TEVNRU5URUQ6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCI7CisJ Y2FzZSBNT0RfSERDUF9TVEFUVVNfSU5URVJOQUxfUE9MSUNZX0ZBSUxVUkU6CisJCXJldHVybiAi TU9EX0hEQ1BfU1RBVFVTX0lOVEVSTkFMX1BPTElDWV9GQUlMVVJFIjsKKwljYXNlIE1PRF9IRENQ X1NUQVRVU19VUERBVEVfVE9QT0xPR1lfRkFJTFVSRToKKwkJcmV0dXJuICJNT0RfSERDUF9TVEFU VVNfVVBEQVRFX1RPUE9MT0dZX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1BfU1RBVFVTX0NSRUFU RV9QU1BfU0VSVklDRV9GQUlMVVJFOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19DUkVBVEVf UFNQX1NFUlZJQ0VfRkFJTFVSRSI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfREVTVFJPWV9QU1Bf U0VSVklDRV9GQUlMVVJFOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19ERVNUUk9ZX1BTUF9T RVJWSUNFX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0NSRUFURV9TRVNT SU9OX0ZBSUxVUkU6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0NSRUFURV9TRVNT SU9OX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0RFU1RST1lfU0VTU0lP Tl9GQUlMVVJFOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19IRENQMV9ERVNUUk9ZX1NFU1NJ T05fRkFJTFVSRSI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfSERDUDFfVkFMSURBVEVfRU5DUllQ VElPTl9GQUlMVVJFOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19IRENQMV9WQUxJREFURV9F TkNSWVBUSU9OX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX05PVF9IRENQ X1JFUEVBVEVSOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19IRENQMV9OT1RfSERDUF9SRVBF QVRFUiI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfSERDUDFfTk9UX0NBUEFCTEU6CisJCXJldHVy biAiTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX05PVF9DQVBBQkxFIjsKKwljYXNlIE1PRF9IRENQX1NU QVRVU19IRENQMV9SMF9QUklNRV9QRU5ESU5HOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19I RENQMV9SMF9QUklNRV9QRU5ESU5HIjsKKwljYXNlIE1PRF9IRENQX1NUQVRVU19IRENQMV9WQUxJ REFURV9SWF9GQUlMVVJFOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19IRENQMV9WQUxJREFU RV9SWF9GQUlMVVJFIjsKKwljYXNlIE1PRF9IRENQX1NUQVRVU19IRENQMV9LU1ZfTElTVF9OT1Rf UkVBRFk6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0tTVl9MSVNUX05PVF9SRUFE WSI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfSERDUDFfVkFMSURBVEVfS1NWX0xJU1RfRkFJTFVS RToKKwkJcmV0dXJuICJNT0RfSERDUF9TVEFUVVNfSERDUDFfVkFMSURBVEVfS1NWX0xJU1RfRkFJ TFVSRSI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfSERDUDFfRU5BQkxFX0VOQ1JZUFRJT046CisJ CXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0VOQUJMRV9FTkNSWVBUSU9OIjsKKwljYXNl IE1PRF9IRENQX1NUQVRVU19IRENQMV9FTkFCTEVfU1RSRUFNX0VOQ1JZUFRJT05fRkFJTFVSRToK KwkJcmV0dXJuICJNT0RfSERDUF9TVEFUVVNfSERDUDFfRU5BQkxFX1NUUkVBTV9FTkNSWVBUSU9O X0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX01BWF9DQVNDQURFX0VYQ0VF REVEX0ZBSUxVUkU6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX01BWF9DQVNDQURF X0VYQ0VFREVEX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX01BWF9ERVZT X0VYQ0VFREVEX0ZBSUxVUkU6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX01BWF9E RVZTX0VYQ0VFREVEX0ZBSUxVUkUiOworCWNhc2UgTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0RFVklD RV9DT1VOVF9NSVNNQVRDSF9GQUlMVVJFOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19IRENQ MV9ERVZJQ0VfQ09VTlRfTUlTTUFUQ0hfRkFJTFVSRSI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNf SERDUDFfTElOS19JTlRFR1JJVFlfRkFJTFVSRToKKwkJcmV0dXJuICJNT0RfSERDUF9TVEFUVVNf SERDUDFfTElOS19JTlRFR1JJVFlfRkFJTFVSRSI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfSERD UDFfUkVBVVRIX1JFUVVFU1RfSVNTVUVEOgorCQlyZXR1cm4gIk1PRF9IRENQX1NUQVRVU19IRENQ MV9SRUFVVEhfUkVRVUVTVF9JU1NVRUQiOworCWNhc2UgTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0xJ TktfTUFJTlRFTkFOQ0VfRkFJTFVSRToKKwkJcmV0dXJuICJNT0RfSERDUF9TVEFUVVNfSERDUDFf TElOS19NQUlOVEVOQU5DRV9GQUlMVVJFIjsKKwljYXNlIE1PRF9IRENQX1NUQVRVU19IRENQMV9J TlZBTElEX0JLU1Y6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0lOVkFMSURfQktT ViI7CisJY2FzZSBNT0RfSERDUF9TVEFUVVNfRERDX0ZBSUxVUkU6CisJCXJldHVybiAiTU9EX0hE Q1BfU1RBVFVTX0REQ19GQUlMVVJFIjsKKwljYXNlIE1PRF9IRENQX1NUQVRVU19JTlZBTElEX09Q RVJBVElPTjoKKwkJcmV0dXJuICJNT0RfSERDUF9TVEFUVVNfSU5WQUxJRF9PUEVSQVRJT04iOwor CWRlZmF1bHQ6CisJCXJldHVybiAiTU9EX0hEQ1BfU1RBVFVTX1VOS05PV04iOworCX0KK30KKwor Y2hhciAqbW9kX2hkY3Bfc3RhdGVfaWRfdG9fc3RyKGludDMyX3QgaWQpCit7CisJc3dpdGNoIChp ZCkgeworCWNhc2UgSERDUF9VTklOSVRJQUxJWkVEOgorCQlyZXR1cm4gIkhEQ1BfVU5JTklUSUFM SVpFRCI7CisJY2FzZSBIRENQX0lOSVRJQUxJWkVEOgorCQlyZXR1cm4gIkhEQ1BfSU5JVElBTEla RUQiOworCWNhc2UgSERDUF9DUF9OT1RfREVTSVJFRDoKKwkJcmV0dXJuICJIRENQX0NQX05PVF9E RVNJUkVEIjsKKwljYXNlIEgxX0EwX1dBSVRfRk9SX0FDVElWRV9SWDoKKwkJcmV0dXJuICJIMV9B MF9XQUlUX0ZPUl9BQ1RJVkVfUlgiOworCWNhc2UgSDFfQTFfRVhDSEFOR0VfS1NWUzoKKwkJcmV0 dXJuICJIMV9BMV9FWENIQU5HRV9LU1ZTIjsKKwljYXNlIEgxX0EyX0NPTVBVVEFUSU9OU19BM19W QUxJREFURV9SWF9BNl9URVNUX0ZPUl9SRVBFQVRFUjoKKwkJcmV0dXJuICJIMV9BMl9DT01QVVRB VElPTlNfQTNfVkFMSURBVEVfUlhfQTZfVEVTVF9GT1JfUkVQRUFURVIiOworCWNhc2UgSDFfQTQ1 X0FVVEhFTklDQVRFRDoKKwkJcmV0dXJuICJIMV9BNDVfQVVUSEVOSUNBVEVEIjsKKwljYXNlIEgx X0E4X1dBSVRfRk9SX1JFQURZOgorCQlyZXR1cm4gIkgxX0E4X1dBSVRfRk9SX1JFQURZIjsKKwlj YXNlIEgxX0E5X1JFQURfS1NWX0xJU1Q6CisJCXJldHVybiAiSDFfQTlfUkVBRF9LU1ZfTElTVCI7 CisJY2FzZSBEMV9BMF9ERVRFUk1JTkVfUlhfSERDUF9DQVBBQkxFOgorCQlyZXR1cm4gIkQxX0Ew X0RFVEVSTUlORV9SWF9IRENQX0NBUEFCTEUiOworCWNhc2UgRDFfQTFfRVhDSEFOR0VfS1NWUzoK KwkJcmV0dXJuICJEMV9BMV9FWENIQU5HRV9LU1ZTIjsKKwljYXNlIEQxX0EyM19XQUlUX0ZPUl9S MF9QUklNRToKKwkJcmV0dXJuICJEMV9BMjNfV0FJVF9GT1JfUjBfUFJJTUUiOworCWNhc2UgRDFf QTJfQ09NUFVUQVRJT05TX0EzX1ZBTElEQVRFX1JYX0E1X1RFU1RfRk9SX1JFUEVBVEVSOgorCQly ZXR1cm4gIkQxX0EyX0NPTVBVVEFUSU9OU19BM19WQUxJREFURV9SWF9BNV9URVNUX0ZPUl9SRVBF QVRFUiI7CisJY2FzZSBEMV9BNF9BVVRIRU5JQ0FURUQ6CisJCXJldHVybiAiRDFfQTRfQVVUSEVO SUNBVEVEIjsKKwljYXNlIEQxX0E2X1dBSVRfRk9SX1JFQURZOgorCQlyZXR1cm4gIkQxX0E2X1dB SVRfRk9SX1JFQURZIjsKKwljYXNlIEQxX0E3X1JFQURfS1NWX0xJU1Q6CisJCXJldHVybiAiRDFf QTdfUkVBRF9LU1ZfTElTVCI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVTktOT1dOX1NUQVRFX0lE IjsKKwl9OworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9k dWxlcy9oZGNwL2hkY3BfbG9nLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxl cy9oZGNwL2hkY3BfbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li4yZmQwZTBhODkzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvbW9kdWxlcy9oZGNwL2hkY3BfbG9nLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBD b3B5cmlnaHQgMjAxOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs bCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBB VVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu CisgKgorICogQXV0aG9yczogQU1ECisgKgorICovCisKKyNpZm5kZWYgTU9EX0hEQ1BfTE9HX0hf CisjZGVmaW5lIE1PRF9IRENQX0xPR19IXworCisjaWZkZWYgQ09ORklHX0RSTV9BTURfRENfSERD UAorI2RlZmluZSBIRENQX0xPR19FUlIoaGRjcCwgLi4uKSBEUk1fRVJST1IoX19WQV9BUkdTX18p CisjZGVmaW5lIEhEQ1BfTE9HX1ZFUihoZGNwLCAuLi4pIERSTV9ERUJVR19LTVMoX19WQV9BUkdT X18pCisjZGVmaW5lIEhEQ1BfTE9HX0ZTTShoZGNwLCAuLi4pIERSTV9ERUJVR19LTVMoX19WQV9B UkdTX18pCisjZGVmaW5lIEhEQ1BfTE9HX1RPUChoZGNwLCAuLi4pIHByX2RlYnVnKCJbSERDUF9U T1BdOiJfX1ZBX0FSR1NfXykKKyNkZWZpbmUgSERDUF9MT0dfRERDKGhkY3AsIC4uLikgcHJfZGVi dWcoIltIRENQX0REQ106Il9fVkFfQVJHU19fKQorI2VuZGlmCisKKy8qIGRlZmF1bHQgbG9ncyAq LworI2RlZmluZSBIRENQX0VSUk9SX1RSQUNFKGhkY3AsIHN0YXR1cykgXAorCQlIRENQX0xPR19F UlIoaGRjcCwgXAorCQkJIltMaW5rICVkXSBFUlJPUiAlcyBJTiBTVEFURSAlcyIsIFwKKwkJCWhk Y3AtPmNvbmZpZy5pbmRleCwgXAorCQkJbW9kX2hkY3Bfc3RhdHVzX3RvX3N0cihzdGF0dXMpLCBc CisJCQltb2RfaGRjcF9zdGF0ZV9pZF90b19zdHIoaGRjcC0+c3RhdGUuaWQpKQorI2RlZmluZSBI RENQX0hEQ1AxX0VOQUJMRURfVFJBQ0UoaGRjcCwgZGlzcGxheUluZGV4KSBcCisJCUhEQ1BfTE9H X1ZFUihoZGNwLCBcCisJCQkiW0xpbmsgJWRdIEhEQ1AgMS40IGVuYWJsZWQgb24gZGlzcGxheSAl ZCIsIFwKKwkJCWhkY3AtPmNvbmZpZy5pbmRleCwgZGlzcGxheUluZGV4KQorLyogc3RhdGUgbWFj aGluZSBsb2dzICovCisjZGVmaW5lIEhEQ1BfUkVNT1ZFX0RJU1BMQVlfVFJBQ0UoaGRjcCwgZGlz cGxheUluZGV4KSBcCisJCUhEQ1BfTE9HX0ZTTShoZGNwLCBcCisJCQkiW0xpbmsgJWRdIEhEQ1Bf UkVNT1ZFX0RJU1BMQVkgaW5kZXggJWQiLCBcCisJCQloZGNwLT5jb25maWcuaW5kZXgsIGRpc3Bs YXlJbmRleCkKKyNkZWZpbmUgSERDUF9JTlBVVF9QQVNTX1RSQUNFKGhkY3AsIHN0cikgXAorCQlI RENQX0xPR19GU00oaGRjcCwgXAorCQkJIltMaW5rICVkXVx0UEFTUyAlcyIsIFwKKwkJCWhkY3At PmNvbmZpZy5pbmRleCwgc3RyKQorI2RlZmluZSBIRENQX0lOUFVUX0ZBSUxfVFJBQ0UoaGRjcCwg c3RyKSBcCisJCUhEQ1BfTE9HX0ZTTShoZGNwLCBcCisJCQkiW0xpbmsgJWRdXHRGQUlMICVzIiwg XAorCQkJaGRjcC0+Y29uZmlnLmluZGV4LCBzdHIpCisjZGVmaW5lIEhEQ1BfTkVYVF9TVEFURV9U UkFDRShoZGNwLCBpZCwgb3V0cHV0KSBkbyB7IFwKKwkJaWYgKG91dHB1dC0+d2F0Y2hkb2dfdGlt ZXJfbmVlZGVkKSBcCisJCQlIRENQX0xPR19GU00oaGRjcCwgXAorCQkJCSJbTGluayAlZF0gPiAl cyB3aXRoICVkIG1zIHdhdGNoZG9nIiwgXAorCQkJCWhkY3AtPmNvbmZpZy5pbmRleCwgXAorCQkJ CW1vZF9oZGNwX3N0YXRlX2lkX3RvX3N0cihpZCksIG91dHB1dC0+d2F0Y2hkb2dfdGltZXJfZGVs YXkpOyBcCisJCWVsc2UgXAorCQkJSERDUF9MT0dfRlNNKGhkY3AsIFwKKwkJCQkiW0xpbmsgJWRd ID4gJXMiLCBoZGNwLT5jb25maWcuaW5kZXgsIFwKKwkJCQltb2RfaGRjcF9zdGF0ZV9pZF90b19z dHIoaWQpKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgSERDUF9USU1FT1VUX1RSQUNFKGhkY3Ap IFwKKwkJSERDUF9MT0dfRlNNKGhkY3AsICJbTGluayAlZF0gLS0+IFRJTUVPVVQiLCBoZGNwLT5j b25maWcuaW5kZXgpCisjZGVmaW5lIEhEQ1BfQ1BJUlFfVFJBQ0UoaGRjcCkgXAorCQlIRENQX0xP R19GU00oaGRjcCwgIltMaW5rICVkXSAtLT4gQ1BJUlEiLCBoZGNwLT5jb25maWcuaW5kZXgpCisj ZGVmaW5lIEhEQ1BfRVZFTlRfVFJBQ0UoaGRjcCwgZXZlbnQpIFwKKwkJaWYgKGV2ZW50ID09IE1P RF9IRENQX0VWRU5UX1dBVENIRE9HX1RJTUVPVVQpIFwKKwkJCUhEQ1BfVElNRU9VVF9UUkFDRSho ZGNwKTsgXAorCQllbHNlIGlmIChldmVudCA9PSBNT0RfSERDUF9FVkVOVF9DUElSUSkgXAorCQkJ SERDUF9DUElSUV9UUkFDRShoZGNwKQorLyogVE9ETzogZmluZCBzb21lIHdheSB0byB0ZWxsIGlm IGxvZ2dpbmcgaXMgb2ZmIHRvIHNhdmUgdGltZSAqLworI2RlZmluZSBIRENQX0REQ19SRUFEX1RS QUNFKGhkY3AsIG1zZ19uYW1lLCBtc2csIG1zZ19zaXplKSBkbyB7IFwKKwkJbW9kX2hkY3BfZHVt cF9iaW5hcnlfbWVzc2FnZShtc2csIG1zZ19zaXplLCBoZGNwLT5idWYsIFwKKwkJCQlzaXplb2Yo aGRjcC0+YnVmKSk7IFwKKwkJSERDUF9MT0dfRERDKGhkY3AsICJbTGluayAlZF0gUmVhZCAlcyVz IiwgaGRjcC0+Y29uZmlnLmluZGV4LCBcCisJCQkJbXNnX25hbWUsIGhkY3AtPmJ1Zik7IFwKK30g d2hpbGUgKDApCisjZGVmaW5lIEhEQ1BfRERDX1dSSVRFX1RSQUNFKGhkY3AsIG1zZ19uYW1lLCBt c2csIG1zZ19zaXplKSBkbyB7IFwKKwkJbW9kX2hkY3BfZHVtcF9iaW5hcnlfbWVzc2FnZShtc2cs IG1zZ19zaXplLCBoZGNwLT5idWYsIFwKKwkJCQlzaXplb2YoaGRjcC0+YnVmKSk7IFwKKwkJSERD UF9MT0dfRERDKGhkY3AsICJbTGluayAlZF0gV3JpdGUgJXMlcyIsIFwKKwkJCQloZGNwLT5jb25m aWcuaW5kZXgsIG1zZ19uYW1lLFwKKwkJCQloZGNwLT5idWYpOyBcCit9IHdoaWxlICgwKQorI2Rl ZmluZSBIRENQX0ZVTExfRERDX1RSQUNFKGhkY3ApIGRvIHsgXAorCUhEQ1BfRERDX1JFQURfVFJB Q0UoaGRjcCwgIkJLU1YiLCBoZGNwLT5hdXRoLm1zZy5oZGNwMS5ia3N2LCBcCisJCQlzaXplb2Yo aGRjcC0+YXV0aC5tc2cuaGRjcDEuYmtzdikpOyBcCisJSERDUF9ERENfUkVBRF9UUkFDRShoZGNw LCAiQkNBUFMiLCAmaGRjcC0+YXV0aC5tc2cuaGRjcDEuYmNhcHMsIFwKKwkJCXNpemVvZihoZGNw LT5hdXRoLm1zZy5oZGNwMS5iY2FwcykpOyBcCisJSERDUF9ERENfV1JJVEVfVFJBQ0UoaGRjcCwg IkFOIiwgaGRjcC0+YXV0aC5tc2cuaGRjcDEuYW4sIFwKKwkJCXNpemVvZihoZGNwLT5hdXRoLm1z Zy5oZGNwMS5hbikpOyBcCisJSERDUF9ERENfV1JJVEVfVFJBQ0UoaGRjcCwgIkFLU1YiLCBoZGNw LT5hdXRoLm1zZy5oZGNwMS5ha3N2LCBcCisJCQlzaXplb2YoaGRjcC0+YXV0aC5tc2cuaGRjcDEu YWtzdikpOyBcCisJSERDUF9ERENfV1JJVEVfVFJBQ0UoaGRjcCwgIkFJTkZPIiwgJmhkY3AtPmF1 dGgubXNnLmhkY3AxLmFpbmZvLCBcCisJCQlzaXplb2YoaGRjcC0+YXV0aC5tc2cuaGRjcDEuYWlu Zm8pKTsgXAorCUhEQ1BfRERDX1JFQURfVFJBQ0UoaGRjcCwgIlJJJyAvIFIwJyIsIFwKKwkJCSh1 aW50OF90ICopJmhkY3AtPmF1dGgubXNnLmhkY3AxLnIwcCwgXAorCQkJc2l6ZW9mKGhkY3AtPmF1 dGgubXNnLmhkY3AxLnIwcCkpOyBcCisJSERDUF9ERENfUkVBRF9UUkFDRShoZGNwLCAiQklORk8i LCBcCisJCQkodWludDhfdCAqKSZoZGNwLT5hdXRoLm1zZy5oZGNwMS5iaW5mb19kcCwgXAorCQkJ c2l6ZW9mKGhkY3AtPmF1dGgubXNnLmhkY3AxLmJpbmZvX2RwKSk7IFwKKwlIRENQX0REQ19SRUFE X1RSQUNFKGhkY3AsICJLU1ZMSVNUIiwgaGRjcC0+YXV0aC5tc2cuaGRjcDEua3N2bGlzdCwgXAor CQkJaGRjcC0+YXV0aC5tc2cuaGRjcDEua3N2bGlzdF9zaXplKTsgXAorCUhEQ1BfRERDX1JFQURf VFJBQ0UoaGRjcCwgIlYnIiwgaGRjcC0+YXV0aC5tc2cuaGRjcDEudnAsIFwKKwkJCXNpemVvZiho ZGNwLT5hdXRoLm1zZy5oZGNwMS52cCkpOyBcCit9IHdoaWxlICgwKQorI2RlZmluZSBIRENQX1RP UF9BRERfRElTUExBWV9UUkFDRShoZGNwLCBpKSBcCisJCUhEQ1BfTE9HX1RPUChoZGNwLCAiW0xp bmsgJWRdXHRhZGQgZGlzcGxheSAlZCIsIFwKKwkJCQloZGNwLT5jb25maWcuaW5kZXgsIGkpCisj ZGVmaW5lIEhEQ1BfVE9QX1JFTU9WRV9ESVNQTEFZX1RSQUNFKGhkY3AsIGkpIFwKKwkJSERDUF9M T0dfVE9QKGhkY3AsICJbTGluayAlZF1cdHJlbW92ZSBkaXNwbGF5ICVkIiwgXAorCQkJCWhkY3At PmNvbmZpZy5pbmRleCwgaSkKKyNkZWZpbmUgSERDUF9UT1BfSERDUDFfREVTVFJPWV9TRVNTSU9O X1RSQUNFKGhkY3ApIFwKKwkJSERDUF9MT0dfVE9QKGhkY3AsICJbTGluayAlZF1cdGRlc3Ryb3kg aGRjcDEgc2Vzc2lvbiIsIFwKKwkJCQloZGNwLT5jb25maWcuaW5kZXgpCisjZGVmaW5lIEhEQ1Bf VE9QX1JFU0VUX0FVVEhfVFJBQ0UoaGRjcCkgXAorCQlIRENQX0xPR19UT1AoaGRjcCwgIltMaW5r ICVkXVx0cmVzZXQgYXV0aGVudGljYXRpb24iLCBoZGNwLT5jb25maWcuaW5kZXgpCisjZGVmaW5l IEhEQ1BfVE9QX1JFU0VUX0NPTk5fVFJBQ0UoaGRjcCkgXAorCQlIRENQX0xPR19UT1AoaGRjcCwg IltMaW5rICVkXVx0cmVzZXQgY29ubmVjdGlvbiIsIGhkY3AtPmNvbmZpZy5pbmRleCkKKyNkZWZp bmUgSERDUF9UT1BfSU5URVJGQUNFX1RSQUNFKGhkY3ApIGRvIHsgXAorCQlIRENQX0xPR19UT1Ao aGRjcCwgIlxuIik7IFwKKwkJSERDUF9MT0dfVE9QKGhkY3AsICJbTGluayAlZF0gJXMiLCBoZGNw LT5jb25maWcuaW5kZXgsIF9fZnVuY19fKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgSERDUF9U T1BfSU5URVJGQUNFX1RSQUNFX1dJVEhfSU5ERVgoaGRjcCwgaSkgZG8geyBcCisJCUhEQ1BfTE9H X1RPUChoZGNwLCAiXG4iKTsgXAorCQlIRENQX0xPR19UT1AoaGRjcCwgIltMaW5rICVkXSAlcyBk aXNwbGF5ICVkIiwgaGRjcC0+Y29uZmlnLmluZGV4LCBfX2Z1bmNfXywgaSk7IFwKK30gd2hpbGUg KDApCisKKyNlbmRpZiAvLyBNT0RfSERDUF9MT0dfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2luYy9tb2RfaGRjcC5oIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L21vZHVsZXMvaW5jL21vZF9oZGNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi5kZWEyMTcwMmVkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9pbmMvbW9kX2hkY3AuaApAQCAtMCwwICsx LDI4OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIElu Yy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklH SFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdT IElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2lmbmRl ZiBNT0RfSERDUF9IXworI2RlZmluZSBNT0RfSERDUF9IXworCisjaW5jbHVkZSAib3NfdHlwZXMu aCIKKyNpbmNsdWRlICJzaWduYWxfdHlwZXMuaCIKKworLyogRm9yd2FyZCBEZWNsYXJhdGlvbnMg Ki8KK3N0cnVjdCBtb2RfaGRjcDsKKworI2RlZmluZSBNQVhfTlVNX09GX0RJU1BMQVlTIDYKKyNk ZWZpbmUgTUFYX05VTV9PRl9BVFRFTVBUUyA0CisjZGVmaW5lIE1BWF9OVU1fT0ZfRVJST1JfVFJB Q0UgMTAKKworLyogZGV0YWlsZWQgcmV0dXJuIHN0YXR1cyAqLworZW51bSBtb2RfaGRjcF9zdGF0 dXMgeworCU1PRF9IRENQX1NUQVRVU19TVUNDRVNTID0gMCwKKwlNT0RfSERDUF9TVEFUVVNfRkFJ TFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfUkVTRVRfTkVFREVELAorCU1PRF9IRENQX1NUQVRVU19E SVNQTEFZX09VVF9PRl9CT1VORCwKKwlNT0RfSERDUF9TVEFUVVNfRElTUExBWV9OT1RfRk9VTkQs CisJTU9EX0hEQ1BfU1RBVFVTX0lOVkFMSURfU1RBVEUsCisJTU9EX0hEQ1BfU1RBVFVTX05PVF9J TVBMRU1FTlRFRCwKKwlNT0RfSERDUF9TVEFUVVNfSU5URVJOQUxfUE9MSUNZX0ZBSUxVUkUsCisJ TU9EX0hEQ1BfU1RBVFVTX1VQREFURV9UT1BPTE9HWV9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRV U19DUkVBVEVfUFNQX1NFUlZJQ0VfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfREVTVFJPWV9Q U1BfU0VSVklDRV9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19IRENQMV9DUkVBVEVfU0VTU0lP Tl9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19IRENQMV9ERVNUUk9ZX1NFU1NJT05fRkFJTFVS RSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDFfVkFMSURBVEVfRU5DUllQVElPTl9GQUlMVVJFLAor CU1PRF9IRENQX1NUQVRVU19IRENQMV9OT1RfSERDUF9SRVBFQVRFUiwKKwlNT0RfSERDUF9TVEFU VVNfSERDUDFfTk9UX0NBUEFCTEUsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX1IwX1BSSU1FX1BF TkRJTkcsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX1ZBTElEQVRFX1JYX0ZBSUxVUkUsCisJTU9E X0hEQ1BfU1RBVFVTX0hEQ1AxX0tTVl9MSVNUX05PVF9SRUFEWSwKKwlNT0RfSERDUF9TVEFUVVNf SERDUDFfVkFMSURBVEVfS1NWX0xJU1RfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDFf RU5BQkxFX0VOQ1JZUFRJT04sCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AxX0VOQUJMRV9TVFJFQU1f RU5DUllQVElPTl9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19IRENQMV9NQVhfQ0FTQ0FERV9F WENFRURFRF9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19IRENQMV9NQVhfREVWU19FWENFRURF RF9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19IRENQMV9ERVZJQ0VfQ09VTlRfTUlTTUFUQ0hf RkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDFfTElOS19JTlRFR1JJVFlfRkFJTFVSRSwK KwlNT0RfSERDUF9TVEFUVVNfSERDUDFfUkVBVVRIX1JFUVVFU1RfSVNTVUVELAorCU1PRF9IRENQ X1NUQVRVU19IRENQMV9MSU5LX01BSU5URU5BTkNFX0ZBSUxVUkUsCisJTU9EX0hEQ1BfU1RBVFVT X0hEQ1AxX0lOVkFMSURfQktTViwKKwlNT0RfSERDUF9TVEFUVVNfRERDX0ZBSUxVUkUsIC8qIFRP RE86IHNwZWNpZmljIGVycm9ycyAqLworCU1PRF9IRENQX1NUQVRVU19JTlZBTElEX09QRVJBVElP TiwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDJfTk9UX0NBUEFCTEUsCisJTU9EX0hEQ1BfU1RBVFVT X0hEQ1AyX0NSRUFURV9TRVNTSU9OX0ZBSUxVUkUsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX0RF U1RST1lfU0VTU0lPTl9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19IRENQMl9QUkVQX0FLRV9J TklUX0ZBSUxVUkUsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX0FLRV9DRVJUX1BFTkRJTkcsCisJ TU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX0hfUFJJTUVfUEVORElORywKKwlNT0RfSERDUF9TVEFUVVNf SERDUDJfUEFJUklOR19JTkZPX1BFTkRJTkcsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX1ZBTElE QVRFX0FLRV9DRVJUX0ZBSUxVUkUsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX1ZBTElEQVRFX0hf UFJJTUVfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDJfVkFMSURBVEVfUEFJUklOR19J TkZPX0ZBSUxVUkUsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX1BSRVBfTENfSU5JVF9GQUlMVVJF LAorCU1PRF9IRENQX1NUQVRVU19IRENQMl9MX1BSSU1FX1BFTkRJTkcsCisJTU9EX0hEQ1BfU1RB VFVTX0hEQ1AyX1ZBTElEQVRFX0xfUFJJTUVfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERD UDJfUFJFUF9FS1NfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDJfRU5BQkxFX0VOQ1JZ UFRJT05fRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNfSERDUDJfUlhfSURfTElTVF9OT1RfUkVB RFksCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX1ZBTElEQVRFX1JYX0lEX0xJU1RfRkFJTFVSRSwK KwlNT0RfSERDUF9TVEFUVVNfSERDUDJfRU5BQkxFX1NUUkVBTV9FTkNSWVBUSU9OLAorCU1PRF9I RENQX1NUQVRVU19IRENQMl9TVFJFQU1fUkVBRFlfUEVORElORywKKwlNT0RfSERDUF9TVEFUVVNf SERDUDJfVkFMSURBVEVfU1RSRUFNX1JFQURZX0ZBSUxVUkUsCisJTU9EX0hEQ1BfU1RBVFVTX0hE Q1AyX1BSRVBBUkVfU1RSRUFNX01BTkFHRU1FTlRfRkFJTFVSRSwKKwlNT0RfSERDUF9TVEFUVVNf SERDUDJfUkVBVVRIX1JFUVVFU1QsCisJTU9EX0hEQ1BfU1RBVFVTX0hEQ1AyX1JFQVVUSF9MSU5L X0lOVEVHUklUWV9GQUlMVVJFLAorCU1PRF9IRENQX1NUQVRVU19IRENQMl9ERVZJQ0VfQ09VTlRf TUlTTUFUQ0hfRkFJTFVSRSwKK307CisKK3N0cnVjdCBtb2RfaGRjcF9kaXNwbGF5cG9ydCB7CisJ dWludDhfdCByZXY7CisJdWludDhfdCBhc3NyX3N1cHBvcnRlZDsKK307CisKK3N0cnVjdCBtb2Rf aGRjcF9oZG1pIHsKKwl1aW50OF90IHJlc2VydmVkOworfTsKK2VudW0gbW9kX2hkY3Bfb3BlcmF0 aW9uX21vZGUgeworCU1PRF9IRENQX01PREVfT0ZGLAorCU1PRF9IRENQX01PREVfREVGQVVMVCwK KwlNT0RfSERDUF9NT0RFX0RQLAorCU1PRF9IRENQX01PREVfRFBfTVNUCit9OworCitlbnVtIG1v ZF9oZGNwX2Rpc3BsYXlfc3RhdGUgeworCU1PRF9IRENQX0RJU1BMQVlfSU5BQ1RJVkUgPSAwLAor CU1PRF9IRENQX0RJU1BMQVlfQUNUSVZFLAorCU1PRF9IRENQX0RJU1BMQVlfQUNUSVZFX0FORF9B RERFRCwKKwlNT0RfSERDUF9ESVNQTEFZX0VOQ1JZUFRJT05fRU5BQkxFRAorfTsKKworc3RydWN0 IG1vZF9oZGNwX2RkYyB7CisJdm9pZCAqaGFuZGxlOworCXN0cnVjdCB7CisJCWJvb2wgKCpyZWFk X2kyYykodm9pZCAqaGFuZGxlLAorCQkJCXVpbnQzMl90IGFkZHJlc3MsCisJCQkJdWludDhfdCBv ZmZzZXQsCisJCQkJdWludDhfdCAqZGF0YSwKKwkJCQl1aW50MzJfdCBzaXplKTsKKwkJYm9vbCAo KndyaXRlX2kyYykodm9pZCAqaGFuZGxlLAorCQkJCXVpbnQzMl90IGFkZHJlc3MsCisJCQkJY29u c3QgdWludDhfdCAqZGF0YSwKKwkJCQl1aW50MzJfdCBzaXplKTsKKwkJYm9vbCAoKnJlYWRfZHBj ZCkodm9pZCAqaGFuZGxlLAorCQkJCXVpbnQzMl90IGFkZHJlc3MsCisJCQkJdWludDhfdCAqZGF0 YSwKKwkJCQl1aW50MzJfdCBzaXplKTsKKwkJYm9vbCAoKndyaXRlX2RwY2QpKHZvaWQgKmhhbmRs ZSwKKwkJCQl1aW50MzJfdCBhZGRyZXNzLAorCQkJCWNvbnN0IHVpbnQ4X3QgKmRhdGEsCisJCQkJ dWludDMyX3Qgc2l6ZSk7CisJfSBmdW5jczsKK307CisKK3N0cnVjdCBtb2RfaGRjcF9wc3Agewor CXZvaWQgKmhhbmRsZTsKKwl2b2lkICpmdW5jczsKK307CisKK3N0cnVjdCBtb2RfaGRjcF9kaXNw bGF5X2FkanVzdG1lbnQgeworCXVpbnQ4X3QgZGlzYWJsZQkJCTogMTsKKwl1aW50OF90IHJlc2Vy dmVkCQk6IDc7Cit9OworCitzdHJ1Y3QgbW9kX2hkY3BfbGlua19hZGp1c3RtZW50X2hkY3AxIHsK Kwl1aW50OF90IGRpc2FibGUJCQk6IDE7CisJdWludDhfdCBwb3N0cG9uZV9lbmNyeXB0aW9uCTog MTsKKwl1aW50OF90IHJlc2VydmVkCQk6IDY7Cit9OworCitzdHJ1Y3QgbW9kX2hkY3BfbGlua19h ZGp1c3RtZW50X2hkY3AyIHsKKwl1aW50OF90IGRpc2FibGUJCQk6IDE7CisJdWludDhfdCBkaXNh YmxlX3R5cGUxCQk6IDE7CisJdWludDhfdCBmb3JjZV9ub19zdG9yZWRfa20JOiAxOworCXVpbnQ4 X3QgaW5jcmVhc2VfaF9wcmltZV90aW1lb3V0OiAxOworCXVpbnQ4X3QgcmVzZXJ2ZWQJCTogNDsK K307CisKK3N0cnVjdCBtb2RfaGRjcF9saW5rX2FkanVzdG1lbnQgeworCXVpbnQ4X3QgYXV0aF9k ZWxheTsKKwlzdHJ1Y3QgbW9kX2hkY3BfbGlua19hZGp1c3RtZW50X2hkY3AxIGhkY3AxOworCXN0 cnVjdCBtb2RfaGRjcF9saW5rX2FkanVzdG1lbnRfaGRjcDIgaGRjcDI7Cit9OworCitzdHJ1Y3Qg bW9kX2hkY3BfZXJyb3IgeworCWVudW0gbW9kX2hkY3Bfc3RhdHVzIHN0YXR1czsKKwl1aW50OF90 IHN0YXRlX2lkOworfTsKKworc3RydWN0IG1vZF9oZGNwX3RyYWNlIHsKKwlzdHJ1Y3QgbW9kX2hk Y3BfZXJyb3IgZXJyb3JzW01BWF9OVU1fT0ZfRVJST1JfVFJBQ0VdOworCXVpbnQ4X3QgZXJyb3Jf Y291bnQ7Cit9OworCitlbnVtIG1vZF9oZGNwX2VuY3J5cHRpb25fc3RhdHVzIHsKKwlNT0RfSERD UF9FTkNSWVBUSU9OX1NUQVRVU19IRENQX09GRiA9IDAsCisJTU9EX0hEQ1BfRU5DUllQVElPTl9T VEFUVVNfSERDUDFfT04sCisJTU9EX0hEQ1BfRU5DUllQVElPTl9TVEFUVVNfSERDUDJfVFlQRTBf T04sCisJTU9EX0hEQ1BfRU5DUllQVElPTl9TVEFUVVNfSERDUDJfVFlQRTFfT04KK307CisKKy8q IHBlciBsaW5rIGV2ZW50cyBkbSBoYXMgdG8gbm90aWZ5IHRvIGhkY3AgbW9kdWxlICovCitlbnVt IG1vZF9oZGNwX2V2ZW50IHsKKwlNT0RfSERDUF9FVkVOVF9DQUxMQkFDSyA9IDAsCisJTU9EX0hE Q1BfRVZFTlRfV0FUQ0hET0dfVElNRU9VVCwKKwlNT0RfSERDUF9FVkVOVF9DUElSUQorfTsKKwor Lyogb3V0cHV0IGZsYWdzIGZyb20gbW9kdWxlIHJlcXVlc3RpbmcgdGltZXIgb3BlcmF0aW9ucyAq Lworc3RydWN0IG1vZF9oZGNwX291dHB1dCB7CisJdWludDhfdCBjYWxsYmFja19uZWVkZWQ7CisJ dWludDhfdCBjYWxsYmFja19zdG9wOworCXVpbnQ4X3Qgd2F0Y2hkb2dfdGltZXJfbmVlZGVkOwor CXVpbnQ4X3Qgd2F0Y2hkb2dfdGltZXJfc3RvcDsKKwl1aW50MTZfdCBjYWxsYmFja19kZWxheTsK Kwl1aW50MTZfdCB3YXRjaGRvZ190aW1lcl9kZWxheTsKK307CisKKy8qIHVzZWQgdG8gcmVwcmVz ZW50IHBlciBkaXNwbGF5IGluZm8gKi8KK3N0cnVjdCBtb2RfaGRjcF9kaXNwbGF5IHsKKwllbnVt IG1vZF9oZGNwX2Rpc3BsYXlfc3RhdGUgc3RhdGU7CisJdWludDhfdCBpbmRleDsKKwl1aW50OF90 IGNvbnRyb2xsZXI7CisJdWludDhfdCBkaWdfZmU7CisJdW5pb24geworCQl1aW50OF90IHZjX2lk OworCX07CisJc3RydWN0IG1vZF9oZGNwX2Rpc3BsYXlfYWRqdXN0bWVudCBhZGp1c3Q7Cit9Owor CisvKiB1c2VkIHRvIHJlcHJlc2VudCBwZXIgbGluayBpbmZvICovCisvKiBpbiBjYXNlIGEgbGlu ayBoYXMgbXVsdGlwbGUgZGlzcGxheXMsIHRoZXkgc2hhcmUgdGhlIHNhbWUgbGluayBpbmZvICov CitzdHJ1Y3QgbW9kX2hkY3BfbGluayB7CisJZW51bSBtb2RfaGRjcF9vcGVyYXRpb25fbW9kZSBt b2RlOworCXVpbnQ4X3QgZGlnX2JlOworCXVpbnQ4X3QgZGRjX2xpbmU7CisJdW5pb24geworCQlz dHJ1Y3QgbW9kX2hkY3BfZGlzcGxheXBvcnQgZHA7CisJCXN0cnVjdCBtb2RfaGRjcF9oZG1pIGhk bWk7CisJfTsKKwlzdHJ1Y3QgbW9kX2hkY3BfbGlua19hZGp1c3RtZW50IGFkanVzdDsKK307CisK Ky8qIGEgcXVlcnkgc3RydWN0dXJlIGZvciBhIGRpc3BsYXkncyBoZGNwIGluZm9ybWF0aW9uICov CitzdHJ1Y3QgbW9kX2hkY3BfZGlzcGxheV9xdWVyeSB7CisJY29uc3Qgc3RydWN0IG1vZF9oZGNw X2Rpc3BsYXkgKmRpc3BsYXk7CisJY29uc3Qgc3RydWN0IG1vZF9oZGNwX2xpbmsgKmxpbms7CisJ Y29uc3Qgc3RydWN0IG1vZF9oZGNwX3RyYWNlICp0cmFjZTsKKwllbnVtIG1vZF9oZGNwX2VuY3J5 cHRpb25fc3RhdHVzIGVuY3J5cHRpb25fc3RhdHVzOworfTsKKworLyogY29udGFpbnMgdmFsdWVz IHBlciBvbiBleHRlcm5hbCBkaXNwbGF5IGNvbmZpZ3VyYXRpb24gY2hhbmdlICovCitzdHJ1Y3Qg bW9kX2hkY3BfY29uZmlnIHsKKwlzdHJ1Y3QgbW9kX2hkY3BfcHNwIHBzcDsKKwlzdHJ1Y3QgbW9k X2hkY3BfZGRjIGRkYzsKKwl1aW50OF90IGluZGV4OworfTsKKworc3RydWN0IG1vZF9oZGNwOwor CisvKiBkbSBhbGxvY2F0ZXMgbWVtb3J5IG9mIG1vZF9oZGNwIHBlciBkY19saW5rIG9uIGRtIGlu aXQgYmFzZWQgb24gbWVtb3J5IHNpemUqLworc2l6ZV90IG1vZF9oZGNwX2dldF9tZW1vcnlfc2l6 ZSh2b2lkKTsKKworLyogY2FsbGVkIHBlciBsaW5rIG9uIGxpbmsgY3JlYXRpb24gKi8KK2VudW0g bW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3NldHVwKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJ c3RydWN0IG1vZF9oZGNwX2NvbmZpZyAqY29uZmlnKTsKKworLyogY2FsbGVkIHBlciBsaW5rIG9u IGxpbmsgZGVzdHJveSAqLworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3BfdGVhcmRvd24o c3RydWN0IG1vZF9oZGNwICpoZGNwKTsKKworLyogY2FsbGVkIHBlciBkaXNwbGF5IG9uIGNwX2Rl c2lyZWQgc2V0IHRvIHRydWUgKi8KK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX2FkZF9k aXNwbGF5KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJc3RydWN0IG1vZF9oZGNwX2xpbmsgKmxp bmssIHN0cnVjdCBtb2RfaGRjcF9kaXNwbGF5ICpkaXNwbGF5LAorCQlzdHJ1Y3QgbW9kX2hkY3Bf b3V0cHV0ICpvdXRwdXQpOworCisvKiBjYWxsZWQgcGVyIGRpc3BsYXkgb24gY3BfZGVzaXJlZCBz ZXQgdG8gZmFsc2UgKi8KK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1vZF9oZGNwX3JlbW92ZV9kaXNw bGF5KHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJdWludDhfdCBpbmRleCwgc3RydWN0IG1vZF9o ZGNwX291dHB1dCAqb3V0cHV0KTsKKworLyogY2FsbGVkIHRvIHF1ZXJ5IGhkY3AgaW5mb3JtYXRp b24gb24gYSBzcGVjaWZpYyBpbmRleCAqLworZW51bSBtb2RfaGRjcF9zdGF0dXMgbW9kX2hkY3Bf cXVlcnlfZGlzcGxheShzdHJ1Y3QgbW9kX2hkY3AgKmhkY3AsCisJCXVpbnQ4X3QgaW5kZXgsIHN0 cnVjdCBtb2RfaGRjcF9kaXNwbGF5X3F1ZXJ5ICpxdWVyeSk7CisKKy8qIGNhbGxlZCBwZXIgbGlu ayBvbiBjb25uZWN0aXZpdHkgY2hhbmdlICovCitlbnVtIG1vZF9oZGNwX3N0YXR1cyBtb2RfaGRj cF9yZXNldF9jb25uZWN0aW9uKHN0cnVjdCBtb2RfaGRjcCAqaGRjcCwKKwkJc3RydWN0IG1vZF9o ZGNwX291dHB1dCAqb3V0cHV0KTsKKworLyogY2FsbGVkIHBlciBsaW5rIG9uIGV2ZW50cyAoaS5l LiBjYWxsYmFjaywgd2F0Y2hkb2csIENQX0lSUSkgKi8KK2VudW0gbW9kX2hkY3Bfc3RhdHVzIG1v ZF9oZGNwX3Byb2Nlc3NfZXZlbnQoc3RydWN0IG1vZF9oZGNwICpoZGNwLAorCQllbnVtIG1vZF9o ZGNwX2V2ZW50IGV2ZW50LCBzdHJ1Y3QgbW9kX2hkY3Bfb3V0cHV0ICpvdXRwdXQpOworCisvKiBj YWxsZWQgdG8gY29udmVydCBlbnVtIG1vZF9oZGNwX3N0YXR1cyB0byBjIHN0cmluZyAqLworY2hh ciAqbW9kX2hkY3Bfc3RhdHVzX3RvX3N0cihpbnQzMl90IHN0YXR1cyk7CisKKy8qIGNhbGxlZCB0 byBjb252ZXJ0IHN0YXRlIGlkIHRvIGMgc3RyaW5nICovCitjaGFyICptb2RfaGRjcF9zdGF0ZV9p ZF90b19zdHIoaW50MzJfdCBpZCk7CisKKy8qIGNhbGxlZCB0byBjb252ZXJ0IHNpZ25hbCB0eXBl IHRvIG9wZXJhdGlvbiBtb2RlICovCitlbnVtIG1vZF9oZGNwX29wZXJhdGlvbl9tb2RlIG1vZF9o ZGNwX3NpZ25hbF90eXBlX3RvX29wZXJhdGlvbl9tb2RlKAorCQllbnVtIHNpZ25hbF90eXBlIHNp Z25hbCk7CisjZW5kaWYgLyogTU9EX0hEQ1BfSF8gKi8KLS0gCjIuMTcuMQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QK YW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4