From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v3 2/7] drm/msm/dpu: clean up dpu plane custom properties Date: Mon, 11 Jun 2018 14:13:19 -0700 Message-ID: <1528751604-32541-3-git-send-email-jsanka@codeaurora.org> References: <1528751604-32541-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1528751604-32541-1-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBjaGFuZ2UgcmVtb3ZlcyBhbGwgdGhlIGRwdSBwbGFuZSBjdXN0b20gcHJvcGVydGllcwph bmQgaXRzIGhhbmRsZXJzLgoKY2hhbmdlcyBpbiB2MjoKICAgIC0gcmVtb3ZlIHN0YWxlIGNvZGUg aW4gYmxlbmQgY29uZmlnKFNlYW4gUGF1bCkKICAgIC0gTWFrZWZpbGUgY2hhbmdlcyB0byByZW1v dmUgd2FybmluZyBmbGFncyhTZWFuIFBhdWwpCmNoYW5nZXMgaW4gdjM6CiAgICAtIHJlYmFzZWQg b24gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL3NlYW5wYXVsLwogICAgICBkcHUtc3Rh Z2luZy9jb21taXQvNDgxZDI5ZDMxY2Q2MjlmZDIxNjM4MWI1M2RlNTY5NWY2NDU0NjVkNQoKU2ln bmVkLW9mZi1ieTogSmV5a3VtYXIgU2Fua2FyYW4gPGpzYW5rYUBjb2RlYXVyb3JhLm9yZz4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAg IDggLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2FkNC5oICAgICAgICAgICAg fCAgIDk5IC0tCiAuLi4vZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb2xvcl9wcm9jZXNzaW5n LmMgICB8IDE1MjEgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NvbG9yX3Byb2Nlc3NpbmcuaCAgIHwgIDEyMCAtLQogZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2NydGMuYyAgICAgICAgICAgfCAgMjA1ICstLQogZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCAgICAgICAgICAgfCAgICAzICstCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jICAgICAgICB8ICAgIDIgLQogZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2FkNC5jICAgICAgICAgfCAxNDQzIC0t LS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19j YXRhbG9nLmMgICAgIHwgICA3MiArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2NhdGFsb2cuaCAgICAgfCAgIDg5IC0tCiAuLi4vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29s b3JfcHJvY19jb21tb25fdjQuaCAgICB8ICAgNjkgLQogLi4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfY29sb3JfcHJvY192NC5jICAgfCAgMjQyIC0tLS0KIC4uLi9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2NfdjQuaCAgIHwgICA0MCAtCiAuLi4vZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nlc3NpbmcuaCAgICB8ICAgMjAgLQogLi4uL21zbS9k aXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nlc3NpbmdfdjFfNy5jICAgfCAgNTY1IC0tLS0tLS0t CiAuLi4vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vzc2luZ192MV83LmggICB8ICAg OTIgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuYyAgICAgICAg IHwgICA0NCAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmggICAg ICAgICB8ICAgMTUgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAu YyAgICAgICAgfCAgMjA5IC0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X2RzcHAuaCAgICAgICAgfCAgMjIwIC0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X2xtLmMgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19tZHNzLmggICAgICAgIHwgICA0NCArLQogZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25nLmMgICAgfCAgIDY4IC0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19waW5ncG9uZy5oICAgIHwgICAgNiAtCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92MS5jICB8ICA3NTcgLS0tLS0tLS0tLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JlZ19kbWFfdjEuaCAgfCAgIDI3 IC0KIC4uLi9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3YxX2NvbG9yX3Byb2MuYyAgIHwg IDk0MyAtLS0tLS0tLS0tLS0KIC4uLi9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3YxX2Nv bG9yX3Byb2MuaCAgIHwgICA3NSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfc3NwcC5jICAgICAgICB8ICAyMjAgLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfc3NwcC5oICAgICAgICB8ICAgNzMgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X3V0aWwuYyAgICAgICAgfCAgICAxIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od191dGlsLmggICAgICAgIHwgIDE1NiArKwogZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jICAgICAgICAgICAgfCAgIDExIC0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jICAgICAgICAgIHwgMTI2OSArLS0tLS0tLS0t LS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaCAgICAgICAg ICB8ICAgMzEgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JlZ19kbWEuYyAg ICAgICAgfCAgMTM5IC0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcmVnX2Rt YS5oICAgICAgICB8ICAzMTAgLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X3JtLmMgICAgICAgICAgICAgfCAgMTAyICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfcm0uaCAgICAgICAgICAgICB8ICAgIDIgLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21f ZHJ2LmggICAgICAgICAgICAgICAgICAgICAgfCAgIDI4IC0KIGluY2x1ZGUvdWFwaS9kcm0vZHB1 X2RybS5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE4NyAtLS0KIGluY2x1ZGUvdWFwaS9k cm0vbXNtX2RybS5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAtCiA0MiBmaWxlcyBj aGFuZ2VkLCAyODIgaW5zZXJ0aW9ucygrKSwgOTI0NyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfYWQ0LmgKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29sb3JfcHJvY2Vz c2luZy5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2NvbG9yX3Byb2Nlc3NpbmcuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19hZDQuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jX2NvbW1vbl92NC5oCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9y X3Byb2NfdjQuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19jb2xvcl9wcm9jX3Y0LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vzc2luZy5oCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nl c3NpbmdfdjFfNy5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nlc3NpbmdfdjFfNy5oCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAuYwogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kc3BwLmgKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcmVnX2Rt YV92MS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X3JlZ19kbWFfdjEuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3YxX2NvbG9yX3Byb2MuYwogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3YxX2Nv bG9yX3Byb2MuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9yZWdfZG1hLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfcmVnX2RtYS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5kZXggOWQxZDUyYy4u OGVjMGJmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQorKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCkBAIC00Niw3ICs0Niw2IEBAIG1zbS15IDo9IFwK IAlkaXNwL21kcDUvbWRwNV9taXhlci5vIFwKIAlkaXNwL21kcDUvbWRwNV9wbGFuZS5vIFwKIAlk aXNwL21kcDUvbWRwNV9zbXAubyBcCi0JZGlzcC9kcHUxL2RwdV9jb2xvcl9wcm9jZXNzaW5nLm8g XAogCWRpc3AvZHB1MS9kcHVfY29yZV9pcnEubyBcCiAJZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYu byBcCiAJZGlzcC9kcHUxL2RwdV9jcnRjLm8gXApAQCAtNTQsMjEgKzUzLDE1IEBAIG1zbS15IDo9 IFwKIAlkaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c19jbWQubyBcCiAJZGlzcC9kcHUxL2RwdV9l bmNvZGVyX3BoeXNfdmlkLm8gXAogCWRpc3AvZHB1MS9kcHVfZm9ybWF0cy5vIFwKLQlkaXNwL2Rw dTEvZHB1X2h3X2FkNC5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X2Jsay5vIFwKIAlkaXNwL2RwdTEv ZHB1X2h3X2NhdGFsb2cubyBcCiAJZGlzcC9kcHUxL2RwdV9od19jZG0ubyBcCi0JZGlzcC9kcHUx L2RwdV9od19jb2xvcl9wcm9jX3Y0Lm8gXAotCWRpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vz c2luZ192MV83Lm8gXAogCWRpc3AvZHB1MS9kcHVfaHdfY3RsLm8gXAogCWRpc3AvZHB1MS9kcHVf aHdfZHMubyBcCi0JZGlzcC9kcHUxL2RwdV9od19kc3BwLm8gXAogCWRpc3AvZHB1MS9kcHVfaHdf aW50ZXJydXB0cy5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X2ludGYubyBcCiAJZGlzcC9kcHUxL2Rw dV9od19sbS5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25nLm8gXAotCWRpc3AvZHB1MS9k cHVfaHdfcmVnX2RtYV92MS5vIFwKLQlkaXNwL2RwdTEvZHB1X2h3X3JlZ19kbWFfdjFfY29sb3Jf cHJvYy5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X3NzcHAubyBcCiAJZGlzcC9kcHUxL2RwdV9od190 b3AubyBcCiAJZGlzcC9kcHUxL2RwdV9od191dGlsLm8gXApAQCAtNzgsNyArNzEsNiBAQCBtc20t eSA6PSBcCiAJZGlzcC9kcHUxL2RwdV9rbXMubyBcCiAJZGlzcC9kcHUxL2RwdV9rbXNfdXRpbHMu byBcCiAJZGlzcC9kcHUxL2RwdV9wbGFuZS5vIFwKLQlkaXNwL2RwdTEvZHB1X3JlZ19kbWEubyBc CiAJZGlzcC9kcHUxL2RwdV9ybS5vIFwKIAlkaXNwL2RwdTEvZHB1X3ZiaWYubyBcCiAJZGlzcC9k cHUxL2RwdV9tZHNzLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2FkNC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2FkNC5oCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjcwYzRhLi4wMDAwMDAwCi0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9hZDQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5 ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Ci0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9EUFVfQUQ0 X0hfCi0jZGVmaW5lIF9EUFVfQUQ0X0hfCi0KLSNpbmNsdWRlIDxkcm0vZHJtX21vZGUuaD4KLSNp bmNsdWRlIDxkcm0vZHJtX3Byb3BlcnR5Lmg+Ci0jaW5jbHVkZSAiZHB1X2h3X2RzcHAuaCIKLQot LyoqCi0gKiBlbnVtIGFkNF9tb2RlcyAtIGFkNCBtb2RlcyBzdXBwb3J0ZWQgYnkgZHJpdmVyCi0g Ki8KLWVudW0gYWQ0X21vZGVzIHsKLQlBRDRfT0ZGLAotCUFENF9BVVRPX1NUUkVOR1RILAotCUFE NF9DQUxJQlJBVElPTiwKLQlBRDRfTUFOVUFMLAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHJtX3By b3BfZW51bV9saXN0IC0gZHJtIHN0cnVjdHVyZSBmb3IgY3JlYXRpbmcgZW51bSBwcm9wZXJ0eSBh bmQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhdGluZyB2YWx1ZXMKLSAq Lwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgYWQ0X21vZGVzW10gPSB7 Ci0Je0FENF9PRkYsICJvZmYifSwKLQl7QUQ0X0FVVE9fU1RSRU5HVEgsICJhdXRvX3N0cmVuZ3Ro X21vZGUifSwKLQl7QUQ0X0NBTElCUkFUSU9OLCAiY2FsaWJyYXRpb25fbW9kZSJ9LAotCXtBRDRf TUFOVUFMLCAibWFudWFsX21vZGUifSwKLX07Ci0KLS8qKgotICogZW51bSBhZF9wcm9wZXJ0eSAt IHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgc2V0IGZvciBhZAotICovCi1lbnVtIGFkX3Byb3BlcnR5 IHsKLQlBRF9NT0RFLAotCUFEX0lOSVQsCi0JQURfQ0ZHLAotCUFEX0lOUFVULAotCUFEX1NVU1BF TkQsCi0JQURfQVNTRVJUSVZFLAotCUFEX0JBQ0tMSUdIVCwKLQlBRF9JUENfU1VTUEVORCwKLQlB RF9JUENfUkVTVU1FLAotCUFEX0lQQ19SRVNFVCwKLQlBRF9QUk9QTUFYLAotfTsKLQotLyoqCi0g KiBlbnVtIGFkX2ludHJfcmVzcF9wcm9wZXJ0eSAtIGFkNCBpbnRlcnJ1cHQgcmVzcG9uc2UgZW51 bQotICovCi1lbnVtIGFkX2ludHJfcmVzcF9wcm9wZXJ0eSB7Ci0JQUQ0X0JBQ0tMSUdIVCwKLQlB RDRfUkVTUE1BWCwKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9hZF9od19jZmcgLSBzdHJ1Y3R1 cmUgZm9yIHNldHRpbmcgdGhlIGFkIHByb3BlcnRpZXMKLSAqIEBwcm9wOiBlbnVtIG9mIGFkIHBy b3BlcnR5Ci0gKiBAaHdfY2ZnOiBwYXlsb2FkIGZvciB0aGUgcHJvcCBiZWluZyBzZXQuCi0gKi8K LXN0cnVjdCBkcHVfYWRfaHdfY2ZnIHsKLQllbnVtIGFkX3Byb3BlcnR5IHByb3A7Ci0Jc3RydWN0 IGRwdV9od19jcF9jZmcgKmh3X2NmZzsKLX07Ci0KLS8qKgotICogZHB1X3ZhbGlkYXRlX2RzcHBf YWQ0KCkgLSBhcGkgdG8gdmFsaWRhdGUgaWYgYWQgcHJvcGVydHkgaXMgYWxsb3dlZCBmb3IKLSAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpc3BsYXkgd2l0aCBhbGxvY2F0ZWQgZHNw cC9taXhlcnMuCi0gKiBAZHNwcDogcG9pbnRlciB0byBkc3BwIGluZm8gc3RydWN0dXJlLgotICog QHByb3A6IHBvaW50ZXIgdG8gdTMyIHBvaW50aW5nIHRvIGFkIHByb3BlcnR5Ci0gKi8KLWludCBk cHVfdmFsaWRhdGVfZHNwcF9hZDQoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLCB1MzIgKnByb3Ap OwotCi0vKioKLSAqIGRwdV9zZXR1cF9kc3BwX2FkNCAtIGFwaSB0byBhcHBseSB0aGUgYWQgcHJv cGVydHksIGRwdV92YWxpZGF0ZV9kc3BwX2FkNAotICogICAgICAgICAgICAgICAgICAgICAgc2hv dWxkIGJlIGNhbGxlZCBiZWZvcmUgY2FsbCB0aGlzIGZ1bmN0aW9uCi0gKiBAZHNwcDogcG9pbnRl ciB0byBkc3BwIGluZm8gc3RydWN0dXJlLgotICogQGNmZzogcG9pbnRlciB0byBzdHJ1Y3QgZHB1 X2FkX2h3X2NmZwotICovCi12b2lkIGRwdV9zZXR1cF9kc3BwX2FkNChzdHJ1Y3QgZHB1X2h3X2Rz cHAgKmRzcHAsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogZHB1X3JlYWRfaW50cl9yZXNwX2FkNCAt IGFwaSB0byBnZXQgYWQ0IGludGVycnVwdCBzdGF0dXMgZm9yIGV2ZW50Ci0gKiBAZHNwcDogcG9p bnRlciB0byBkc3BwIG9iamVjdAotICogQGV2ZW50OiBldmVudCBmb3Igd2hpY2ggcmVzcG9uc2Ug aXMgbmVlZGVkCi0gKiBAcmVzcDogdmFsdWUgb2YgZXZlbnQgcmVxdWVzdGVkCi0gKi8KLXZvaWQg ZHB1X3JlYWRfaW50cl9yZXNwX2FkNChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHUzMiBldmVu dCwgdTMyICpyZXNwKTsKLQotI2VuZGlmIC8qIF9EUFVfQUQ0X0hfICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29sb3JfcHJvY2Vzc2luZy5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvbG9yX3Byb2Nlc3NpbmcuYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzZDFjYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29sb3JfcHJvY2Vzc2luZy5jCisrKyAvZGV2L251bGwK QEAgLTEsMTUyMSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4 IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQK LSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K LSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAq IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpCSIlczogIiBmbXQsIF9fZnVuY19fCi0KLSNp bmNsdWRlIDxkcm0vbXNtX2RybV9wcC5oPgotI2luY2x1ZGUgImRwdV9jb2xvcl9wcm9jZXNzaW5n LmgiCi0jaW5jbHVkZSAiZHB1X2ttcy5oIgotI2luY2x1ZGUgImRwdV9jcnRjLmgiCi0jaW5jbHVk ZSAiZHB1X2h3X2RzcHAuaCIKLSNpbmNsdWRlICJkcHVfaHdfbG0uaCIKLSNpbmNsdWRlICJkcHVf YWQ0LmgiCi0jaW5jbHVkZSAiZHB1X2h3X2ludGVycnVwdHMuaCIKLSNpbmNsdWRlICJkcHVfY29y ZV9pcnEuaCIKLQotc3RydWN0IGRwdV9jcF9ub2RlIHsKLQl1MzIgcHJvcGVydHlfaWQ7Ci0JdTMy IHByb3BfZmxhZ3M7Ci0JdTMyIGZlYXR1cmU7Ci0Jdm9pZCAqYmxvYl9wdHI7Ci0JdWludDY0X3Qg cHJvcF92YWw7Ci0JY29uc3Qgc3RydWN0IGRwdV9wcF9ibGsgKnBwX2JsazsKLQlzdHJ1Y3QgbGlz dF9oZWFkIGZlYXR1cmVfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9saXN0OwotCXN0 cnVjdCBsaXN0X2hlYWQgZGlydHlfbGlzdDsKLQlib29sIGlzX2RzcHBfZmVhdHVyZTsKLQl1MzIg cHJvcF9ibG9iX3N6OwotCXN0cnVjdCBkcHVfaXJxX2NhbGxiYWNrICppcnE7Ci19OwotCi1zdHJ1 Y3QgZHB1X2NwX3Byb3BfYXR0YWNoIHsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc3RydWN0 IGRybV9wcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZTsKLQl1 MzIgZmVhdHVyZTsKLQl1aW50NjRfdCB2YWw7Ci19OwotCi1zdGF0aWMgdm9pZCBkc3BwX3BjY19p bnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLXN0YXRpYyB2b2lkIGRz cHBfaHNpY19pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLXN0YXRp YyB2b2lkIGRzcHBfYWRfaW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwot Ci1zdGF0aWMgdm9pZCBkc3BwX3ZsdXRfaW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMg KmNydGMpOwotCi1zdGF0aWMgdm9pZCBkc3BwX2dhbXV0X2luc3RhbGxfcHJvcGVydHkoc3RydWN0 IGRybV9jcnRjICpjcnRjKTsKLQotc3RhdGljIHZvaWQgZHNwcF9nY19pbnN0YWxsX3Byb3BlcnR5 KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLXN0YXRpYyB2b2lkIGRzcHBfaWdjX2luc3RhbGxf cHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKLQotdHlwZWRlZiB2b2lkICgqZHNwcF9w cm9wX2luc3RhbGxfZnVuY190KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwotCi1zdGF0aWMgZHNw cF9wcm9wX2luc3RhbGxfZnVuY190IGRzcHBfcHJvcF9pbnN0YWxsX2Z1bmNbRFBVX0RTUFBfTUFY XTsKLQotc3RhdGljIHZvaWQgZHB1X2NwX3VwZGF0ZV9saXN0KHN0cnVjdCBkcHVfY3Bfbm9kZSAq cHJvcF9ub2RlLAotCQlzdHJ1Y3QgZHB1X2NydGMgKmNydGMsIGJvb2wgZGlydHlfbGlzdCk7Ci0K LXN0YXRpYyBpbnQgZHB1X2NwX2FkX3ZhbGlkYXRlX3Byb3Aoc3RydWN0IGRwdV9jcF9ub2RlICpw cm9wX25vZGUsCi0JCXN0cnVjdCBkcHVfY3J0YyAqY3J0Yyk7Ci0KLXN0YXRpYyB2b2lkIGRwdV9j cF9ub3RpZnlfYWRfZXZlbnQoc3RydWN0IGRybV9jcnRjICpjcnRjX2RybSwgdm9pZCAqYXJnKTsK LQotc3RhdGljIHZvaWQgZHB1X2NwX2FkX3NldF9wcm9wKHN0cnVjdCBkcHVfY3J0YyAqZHB1X2Ny dGMsCi0JCWVudW0gYWRfcHJvcGVydHkgYWRfcHJvcCk7Ci0KLSNkZWZpbmUgc2V0dXBfZHNwcF9w cm9wX2luc3RhbGxfZnVuY3MoZnVuYykgXAotZG8geyBcCi0JZnVuY1tEUFVfRFNQUF9QQ0NdID0g ZHNwcF9wY2NfaW5zdGFsbF9wcm9wZXJ0eTsgXAotCWZ1bmNbRFBVX0RTUFBfSFNJQ10gPSBkc3Bw X2hzaWNfaW5zdGFsbF9wcm9wZXJ0eTsgXAotCWZ1bmNbRFBVX0RTUFBfQURdID0gZHNwcF9hZF9p bnN0YWxsX3Byb3BlcnR5OyBcCi0JZnVuY1tEUFVfRFNQUF9WTFVUXSA9IGRzcHBfdmx1dF9pbnN0 YWxsX3Byb3BlcnR5OyBcCi0JZnVuY1tEUFVfRFNQUF9HQU1VVF0gPSBkc3BwX2dhbXV0X2luc3Rh bGxfcHJvcGVydHk7IFwKLQlmdW5jW0RQVV9EU1BQX0dDXSA9IGRzcHBfZ2NfaW5zdGFsbF9wcm9w ZXJ0eTsgXAotCWZ1bmNbRFBVX0RTUFBfSUdDXSA9IGRzcHBfaWdjX2luc3RhbGxfcHJvcGVydHk7 IFwKLX0gd2hpbGUgKDApCi0KLXR5cGVkZWYgdm9pZCAoKmxtX3Byb3BfaW5zdGFsbF9mdW5jX3Qp KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLXN0YXRpYyBsbV9wcm9wX2luc3RhbGxfZnVuY190 IGxtX3Byb3BfaW5zdGFsbF9mdW5jW0RQVV9NSVhFUl9NQVhdOwotCi1zdGF0aWMgdm9pZCBsbV9n Y19pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLSNkZWZpbmUgc2V0 dXBfbG1fcHJvcF9pbnN0YWxsX2Z1bmNzKGZ1bmMpIFwKLQkoZnVuY1tEUFVfTUlYRVJfR0NdID0g bG1fZ2NfaW5zdGFsbF9wcm9wZXJ0eSkKLQotZW51bSB7Ci0JLyogQXBwZW5kIG5ldyBEU1BQIGZl YXR1cmVzIGJlZm9yZSBEUFVfQ1BfQ1JUQ19EU1BQX01BWCAqLwotCS8qIERTUFAgRmVhdHVyZXMg c3RhcnQgKi8KLQlEUFVfQ1BfQ1JUQ19EU1BQX0lHQywKLQlEUFVfQ1BfQ1JUQ19EU1BQX1BDQywK LQlEUFVfQ1BfQ1JUQ19EU1BQX0dDLAotCURQVV9DUF9DUlRDX0RTUFBfSFVFLAotCURQVV9DUF9D UlRDX0RTUFBfU0FULAotCURQVV9DUF9DUlRDX0RTUFBfVkFMLAotCURQVV9DUF9DUlRDX0RTUFBf Q09OVCwKLQlEUFVfQ1BfQ1JUQ19EU1BQX01FTUNPTE9SLAotCURQVV9DUF9DUlRDX0RTUFBfU0lY Wk9ORSwKLQlEUFVfQ1BfQ1JUQ19EU1BQX0dBTVVULAotCURQVV9DUF9DUlRDX0RTUFBfRElUSEVS LAotCURQVV9DUF9DUlRDX0RTUFBfSElTVCwKLQlEUFVfQ1BfQ1JUQ19EU1BQX0FELAotCURQVV9D UF9DUlRDX0RTUFBfVkxVVCwKLQlEUFVfQ1BfQ1JUQ19EU1BQX0FEX01PREUsCi0JRFBVX0NQX0NS VENfRFNQUF9BRF9JTklULAotCURQVV9DUF9DUlRDX0RTUFBfQURfQ0ZHLAotCURQVV9DUF9DUlRD X0RTUFBfQURfSU5QVVQsCi0JRFBVX0NQX0NSVENfRFNQUF9BRF9BU1NFUlRJVkVORVNTLAotCURQ VV9DUF9DUlRDX0RTUFBfQURfQkFDS0xJR0hULAotCURQVV9DUF9DUlRDX0RTUFBfTUFYLAotCS8q IERTUFAgZmVhdHVyZXMgZW5kICovCi0KLQkvKiBBcHBlbmQgbmV3IExNIGZlYXR1cmVzIGJlZm9y ZSBEUFVfQ1BfQ1JUQ19NQVhfRkVBVFVSRVMgKi8KLQkvKiBMTSBmZWF0dXJlIHN0YXJ0Ki8KLQlE UFVfQ1BfQ1JUQ19MTV9HQywKLQkvKiBMTSBmZWF0dXJlIGVuZCovCi0KLQlEUFVfQ1BfQ1JUQ19N QVhfRkVBVFVSRVMsCi19OwotCi0jZGVmaW5lIElOSVRfUFJPUF9BVFRBQ0gocCwgY3J0YywgcHJv cCwgbm9kZSwgZmVhdHVyZSwgdmFsKSBcCi0JZG8geyBcCi0JCShwKS0+Y3J0YyA9IGNydGM7IFwK LQkJKHApLT5wcm9wID0gcHJvcDsgXAotCQkocCktPnByb3Bfbm9kZSA9IG5vZGU7IFwKLQkJKHAp LT5mZWF0dXJlID0gZmVhdHVyZTsgXAotCQkocCktPnZhbCA9IHZhbDsgXAotCX0gd2hpbGUgKDAp Ci0KLXN0YXRpYyB2b2lkIGRwdV9jcF9nZXRfaHdfcGF5bG9hZChzdHJ1Y3QgZHB1X2NwX25vZGUg KnByb3Bfbm9kZSwKLQkJCQkgIHN0cnVjdCBkcHVfaHdfY3BfY2ZnICpod19jZmcsCi0JCQkJICBi b29sICpmZWF0dXJlX2VuYWJsZWQpCi17Ci0KLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJs b2IgPSBOVUxMOwotCi0JbWVtc2V0KGh3X2NmZywgMCwgc2l6ZW9mKCpod19jZmcpKTsKLQkqZmVh dHVyZV9lbmFibGVkID0gZmFsc2U7Ci0KLQlibG9iID0gcHJvcF9ub2RlLT5ibG9iX3B0cjsKLQlp ZiAocHJvcF9ub2RlLT5wcm9wX2ZsYWdzICYgRFJNX01PREVfUFJPUF9CTE9CKSB7Ci0JCWlmIChi bG9iKSB7Ci0JCQlod19jZmctPmxlbiA9IGJsb2ItPmxlbmd0aDsKLQkJCWh3X2NmZy0+cGF5bG9h ZCA9IGJsb2ItPmRhdGE7Ci0JCQkqZmVhdHVyZV9lbmFibGVkID0gdHJ1ZTsKLQkJfQotCX0gZWxz ZSBpZiAocHJvcF9ub2RlLT5wcm9wX2ZsYWdzICYgRFJNX01PREVfUFJPUF9SQU5HRSkgewotCQkv KiBDaGVjayBpZiBsb2NhbCBibG9iIGlzIFNldCAqLwotCQlpZiAoIWJsb2IpIHsKLQkJCWlmIChw cm9wX25vZGUtPnByb3BfdmFsKSB7Ci0JCQkJaHdfY2ZnLT5sZW4gPSBzaXplb2YocHJvcF9ub2Rl LT5wcm9wX3ZhbCk7Ci0JCQkJaHdfY2ZnLT5wYXlsb2FkID0gJnByb3Bfbm9kZS0+cHJvcF92YWw7 Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlod19jZmctPmxlbiA9IChwcm9wX25vZGUtPnByb3BfdmFs KSA/IGJsb2ItPmxlbmd0aCA6Ci0JCQkJCTA7Ci0JCQlod19jZmctPnBheWxvYWQgPSAocHJvcF9u b2RlLT5wcm9wX3ZhbCkgPyBibG9iLT5kYXRhCi0JCQkJCQk6IE5VTEw7Ci0JCX0KLQkJaWYgKHBy b3Bfbm9kZS0+cHJvcF92YWwpCi0JCQkqZmVhdHVyZV9lbmFibGVkID0gdHJ1ZTsKLQl9IGVsc2Ug aWYgKHByb3Bfbm9kZS0+cHJvcF9mbGFncyAmIERSTV9NT0RFX1BST1BfRU5VTSkgewotCQkqZmVh dHVyZV9lbmFibGVkID0gKHByb3Bfbm9kZS0+cHJvcF92YWwgIT0gMCk7Ci0JCWh3X2NmZy0+bGVu ID0gc2l6ZW9mKHByb3Bfbm9kZS0+cHJvcF92YWwpOwotCQlod19jZmctPnBheWxvYWQgPSAmcHJv cF9ub2RlLT5wcm9wX3ZhbDsKLQl9IGVsc2UgewotCQlEUk1fRVJST1IoInByb3BlcnR5IHR5cGUg aXMgbm90IHN1cHBvcnRlZFxuIik7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRwdV9jcF9kaXNhYmxl X2NydGNfYmxvYl9wcm9wZXJ0eShzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSkKLXsKLQlz dHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IgPSBwcm9wX25vZGUtPmJsb2JfcHRyOwotCi0J aWYgKCFibG9iKQotCQlyZXR1cm4gMDsKLQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoYmxvYik7Ci0J cHJvcF9ub2RlLT5ibG9iX3B0ciA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg ZHB1X2NwX2NyZWF0ZV9sb2NhbF9ibG9iKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTMyIGZlYXR1 cmUsIGludCBsZW4pCi17Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0JYm9vbCBmb3VuZCA9IGZhbHNl OwotCXN0cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX3By b3BlcnR5X2Jsb2IgKmJsb2JfcHRyOwotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMgPSB0b19k cHVfY3J0YyhjcnRjKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocHJvcF9ub2RlLCAmZHB1X2Ny dGMtPmZlYXR1cmVfbGlzdCwgZmVhdHVyZV9saXN0KSB7Ci0JCWlmIChwcm9wX25vZGUtPmZlYXR1 cmUgPT0gZmVhdHVyZSkgewotCQkJZm91bmQgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0K LQlpZiAoIWZvdW5kIHx8ICEocHJvcF9ub2RlLT5wcm9wX2ZsYWdzICYgRFJNX01PREVfUFJPUF9S QU5HRSkpIHsKLQkJRFJNX0VSUk9SKCJsb2NhbCBibG9iIGNyZWF0ZSBmYWlsZWQgcHJvcCBmb3Vu ZCAlZCBmbGFncyAlZFxuIiwKLQkJICAgICAgIGZvdW5kLCBwcm9wX25vZGUtPnByb3BfZmxhZ3Mp OwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWJsb2JfcHRyID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9i bG9iKGNydGMtPmRldiwgbGVuLCBOVUxMKTsKLQlyZXQgPSAoSVNfRVJSX09SX05VTEwoYmxvYl9w dHIpKSA/IFBUUl9FUlIoYmxvYl9wdHIpIDogMDsKLQlpZiAoIXJldCkKLQkJcHJvcF9ub2RlLT5i bG9iX3B0ciA9IGJsb2JfcHRyOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgZHB1 X2NwX2Rlc3Ryb3lfbG9jYWxfYmxvYihzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSkKLXsK LQlpZiAoIShwcm9wX25vZGUtPnByb3BfZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX0JMT0IpICYmCi0J CXByb3Bfbm9kZS0+YmxvYl9wdHIpCi0JCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChwcm9wX25vZGUt PmJsb2JfcHRyKTsKLX0KLQotc3RhdGljIGludCBkcHVfY3BfaGFuZGxlX3JhbmdlX3Byb3BlcnR5 KHN0cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlLAotCQkJCQl1aW50NjRfdCB2YWwpCi17Ci0J aW50IHJldCA9IDA7Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iX3B0ciA9IHByb3Bf bm9kZS0+YmxvYl9wdHI7Ci0KLQlpZiAoIWJsb2JfcHRyKSB7Ci0JCXByb3Bfbm9kZS0+cHJvcF92 YWwgPSB2YWw7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICghdmFsKSB7Ci0JCXByb3Bfbm9kZS0+ cHJvcF92YWwgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSBjb3B5X2Zyb21fdXNlcihi bG9iX3B0ci0+ZGF0YSwgdTY0X3RvX3VzZXJfcHRyKHZhbCksCi0JCQkgICAgIGJsb2JfcHRyLT5s ZW5ndGgpOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHRoZSBwcm9w ZXJ0eSBpbmZvIHJldCAlZCIsIHJldCk7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JfSBlbHNlIHsKLQkJ cHJvcF9ub2RlLT5wcm9wX3ZhbCA9IHZhbDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0 aWMgaW50IGRwdV9jcF9kaXNhYmxlX2NydGNfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRj LAotCQkJCQkgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCi0JCQkJCSBzdHJ1Y3QgZHB1 X2NwX25vZGUgKnByb3Bfbm9kZSkKLXsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCWlmIChwcm9w ZXJ0eS0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX0JMT0IpIHsKLQkJcmV0ID0gZHB1X2NwX2Rpc2Fi bGVfY3J0Y19ibG9iX3Byb3BlcnR5KHByb3Bfbm9kZSk7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eS0+ ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX1JBTkdFKSB7Ci0JCXJldCA9IGRwdV9jcF9oYW5kbGVfcmFu Z2VfcHJvcGVydHkocHJvcF9ub2RlLCAwKTsKLQl9IGVsc2UgaWYgKHByb3BlcnR5LT5mbGFncyAm IERSTV9NT0RFX1BST1BfRU5VTSkgewotCQlyZXQgPSAwOwotCQlwcm9wX25vZGUtPnByb3BfdmFs ID0gMDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBkcHVfY3BfZW5hYmxlX2Ny dGNfYmxvYl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJCSAgICAgICBzdHJ1 Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSwKLQkJCQkJICAgICAgIHVpbnQ2NF90IHZhbCkKLXsK LQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IgPSBOVUxMOwotCi0JLyoqCi0JICogRm9y IG5vbi1ibG9iIGJhc2VkIHByb3BlcnRpZXMgYWRkIHN1cHBvcnQgdG8gY3JlYXRlIGEgYmxvYgot CSAqIHVzaW5nIHRoZSB2YWwgYW5kIHN0b3JlIHRoZSBibG9iX3B0ciBpbiBwcm9wX25vZGUuCi0J ICovCi0JYmxvYiA9IGRybV9wcm9wZXJ0eV9sb29rdXBfYmxvYihjcnRjLT5kZXYsIHZhbCk7Ci0J aWYgKCFibG9iKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBibG9iIGlkICVsbGRcbiIsIHZhbCk7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoYmxvYi0+bGVuZ3RoICE9IHByb3Bfbm9kZS0+ cHJvcF9ibG9iX3N6KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBibG9iIGxlbiAlemQgZXhwICVk IGZlYXR1cmUgJWRcbiIsCi0JCSAgICBibG9iLT5sZW5ndGgsIHByb3Bfbm9kZS0+cHJvcF9ibG9i X3N6LCBwcm9wX25vZGUtPmZlYXR1cmUpOwotCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoYmxvYik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkvKiBSZWxlYXNlIHJlZmVybmNlIHRvIGV4aXN0aW5n IHBheWxvYWQgb2YgdGhlIHByb3BlcnR5ICovCi0JaWYgKHByb3Bfbm9kZS0+YmxvYl9wdHIpCi0J CWRybV9wcm9wZXJ0eV9ibG9iX3B1dChwcm9wX25vZGUtPmJsb2JfcHRyKTsKLQotCXByb3Bfbm9k ZS0+YmxvYl9wdHIgPSBibG9iOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRwdV9jcF9l bmFibGVfY3J0Y19wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJICAgICAgIHN0 cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQkJCSAgICAgICBzdHJ1Y3QgZHB1X2NwX25v ZGUgKnByb3Bfbm9kZSwKLQkJCQkgICAgICAgdWludDY0X3QgdmFsKQotewotCWludCByZXQgPSAt RUlOVkFMOwotCi0JaWYgKHByb3BlcnR5LT5mbGFncyAmIERSTV9NT0RFX1BST1BfQkxPQikgewot CQlyZXQgPSBkcHVfY3BfZW5hYmxlX2NydGNfYmxvYl9wcm9wZXJ0eShjcnRjLCBwcm9wX25vZGUs IHZhbCk7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eS0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX1JBTkdF KSB7Ci0JCXJldCA9IGRwdV9jcF9oYW5kbGVfcmFuZ2VfcHJvcGVydHkocHJvcF9ub2RlLCB2YWwp OwotCX0gZWxzZSBpZiAocHJvcGVydHktPmZsYWdzICYgRFJNX01PREVfUFJPUF9FTlVNKSB7Ci0J CXJldCA9IDA7Ci0JCXByb3Bfbm9kZS0+cHJvcF92YWwgPSB2YWw7Ci0JfQotCXJldHVybiByZXQ7 Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X2ttcyAqZ2V0X2ttcyhzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCi17Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGNydGMtPmRldi0+ZGV2X3By aXZhdGU7Ci0KLQlyZXR1cm4gdG9fZHB1X2ttcyhwcml2LT5rbXMpOwotfQotCi1zdGF0aWMgdm9p ZCBkcHVfY3BfY3J0Y19wcm9wX2F0dGFjaChzdHJ1Y3QgZHB1X2NwX3Byb3BfYXR0YWNoICpwcm9w X2F0dGFjaCkKLXsKLQotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMgPSB0b19kcHVfY3J0Yyhw cm9wX2F0dGFjaC0+Y3J0Yyk7Ci0KLQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmcHJvcF9h dHRhY2gtPmNydGMtPmJhc2UsCi0JCQkJICAgcHJvcF9hdHRhY2gtPnByb3AsIHByb3BfYXR0YWNo LT52YWwpOwotCi0JSU5JVF9MSVNUX0hFQUQoJnByb3BfYXR0YWNoLT5wcm9wX25vZGUtPmFjdGl2 ZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcHJvcF9hdHRhY2gtPnByb3Bfbm9kZS0+ZGlydHlf bGlzdCk7Ci0KLQlwcm9wX2F0dGFjaC0+cHJvcF9ub2RlLT5wcm9wZXJ0eV9pZCA9IHByb3BfYXR0 YWNoLT5wcm9wLT5iYXNlLmlkOwotCXByb3BfYXR0YWNoLT5wcm9wX25vZGUtPnByb3BfZmxhZ3Mg PSBwcm9wX2F0dGFjaC0+cHJvcC0+ZmxhZ3M7Ci0JcHJvcF9hdHRhY2gtPnByb3Bfbm9kZS0+ZmVh dHVyZSA9IHByb3BfYXR0YWNoLT5mZWF0dXJlOwotCi0JaWYgKHByb3BfYXR0YWNoLT5mZWF0dXJl IDwgRFBVX0NQX0NSVENfRFNQUF9NQVgpCi0JCXByb3BfYXR0YWNoLT5wcm9wX25vZGUtPmlzX2Rz cHBfZmVhdHVyZSA9IHRydWU7Ci0JZWxzZQotCQlwcm9wX2F0dGFjaC0+cHJvcF9ub2RlLT5pc19k c3BwX2ZlYXR1cmUgPSBmYWxzZTsKLQotCWxpc3RfYWRkKCZwcm9wX2F0dGFjaC0+cHJvcF9ub2Rl LT5mZWF0dXJlX2xpc3QsCi0JCSAmZHB1X2NydGMtPmZlYXR1cmVfbGlzdCk7Ci19Ci0KLXZvaWQg ZHB1X2NwX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRwdV9j cnRjICpkcHVfY3J0YyA9IE5VTEw7Ci0KLQlpZiAoIWNydGMpIHsKLQkJRFJNX0VSUk9SKCJpbnZh bGlkIGNydGMgJXBLXG4iLCBjcnRjKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwdV9jcnRjID0gdG9f ZHB1X2NydGMoY3J0Yyk7Ci0JaWYgKCFkcHVfY3J0YykgewotCQlEUk1fRVJST1IoImludmFsaWQg ZHB1X2NydGMgJXBLXG4iLCBkcHVfY3J0Yyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlJTklUX0xJU1Rf SEVBRCgmZHB1X2NydGMtPmFjdGl2ZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmZHB1X2NydGMt PmRpcnR5X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZkcHVfY3J0Yy0+ZmVhdHVyZV9saXN0KTsK LQlJTklUX0xJU1RfSEVBRCgmZHB1X2NydGMtPmFkX2RpcnR5KTsKLQlJTklUX0xJU1RfSEVBRCgm ZHB1X2NydGMtPmFkX2FjdGl2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9jcF9jcnRjX2luc3Rh bGxfaW1tdXRhYmxlX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQkJCSAgIGNo YXIgKm5hbWUsCi0JCQkJCQkgICB1MzIgZmVhdHVyZSkKLXsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5 ICpwcm9wOwotCXN0cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlID0gTlVMTDsKLQlzdHJ1Y3Qg bXNtX2RybV9wcml2YXRlICpwcml2OwotCXN0cnVjdCBkcHVfY3BfcHJvcF9hdHRhY2ggcHJvcF9h dHRhY2g7Ci0JdWludDY0X3QgdmFsID0gMDsKLQotCWlmIChmZWF0dXJlID49ICBEUFVfQ1BfQ1JU Q19NQVhfRkVBVFVSRVMpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGZlYXR1cmUgJWQgbWF4ICVk XG4iLCBmZWF0dXJlLAotCQkgICAgICAgRFBVX0NQX0NSVENfTUFYX0ZFQVRVUkVTKTsKLQkJcmV0 dXJuOwotCX0KLQotCXByb3Bfbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9wX25vZGUpLCBHRlBf S0VSTkVMKTsKLQlpZiAoIXByb3Bfbm9kZSkKLQkJcmV0dXJuOwotCi0JcHJpdiA9IGNydGMtPmRl di0+ZGV2X3ByaXZhdGU7Ci0JcHJvcCA9IHByaXYtPmNwX3Byb3BlcnR5W2ZlYXR1cmVdOwotCi0J aWYgKCFwcm9wKSB7Ci0JCXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlX3JhbmdlKGNydGMtPmRl diwKLQkJCQlEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwgbmFtZSwgMCwgMSk7Ci0JCWlmICghcHJv cCkgewotCQkJRFJNX0VSUk9SKCJwcm9wZXJ0eSBjcmVhdGUgZmFpbGVkOiAlc1xuIiwgbmFtZSk7 Ci0JCQlrZnJlZShwcm9wX25vZGUpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXByaXYtPmNwX3Byb3Bl cnR5W2ZlYXR1cmVdID0gcHJvcDsKLQl9Ci0KLQlJTklUX1BST1BfQVRUQUNIKCZwcm9wX2F0dGFj aCwgY3J0YywgcHJvcCwgcHJvcF9ub2RlLAotCQkJCWZlYXR1cmUsIHZhbCk7Ci0JZHB1X2NwX2Ny dGNfcHJvcF9hdHRhY2goJnByb3BfYXR0YWNoKTsKLX0KLQotc3RhdGljIHZvaWQgZHB1X2NwX2Ny dGNfaW5zdGFsbF9yYW5nZV9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJCSAg ICAgY2hhciAqbmFtZSwKLQkJCQkJICAgICB1MzIgZmVhdHVyZSwKLQkJCQkJICAgICB1aW50NjRf dCBtaW4sIHVpbnQ2NF90IG1heCwKLQkJCQkJICAgICB1aW50NjRfdCB2YWwpCi17Ci0Jc3RydWN0 IGRybV9wcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSA9IE5V TEw7Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKLQlzdHJ1Y3QgZHB1X2NwX3Byb3Bf YXR0YWNoIHByb3BfYXR0YWNoOwotCi0JaWYgKGZlYXR1cmUgPj0gIERQVV9DUF9DUlRDX01BWF9G RUFUVVJFUykgewotCQlEUk1fRVJST1IoImludmFsaWQgZmVhdHVyZSAlZCBtYXggJWRcbiIsIGZl YXR1cmUsCi0JCQkgIERQVV9DUF9DUlRDX01BWF9GRUFUVVJFUyk7Ci0JCXJldHVybjsKLQl9Ci0K LQlwcm9wX25vZGUgPSBremFsbG9jKHNpemVvZigqcHJvcF9ub2RlKSwgR0ZQX0tFUk5FTCk7Ci0J aWYgKCFwcm9wX25vZGUpCi0JCXJldHVybjsKLQotCXByaXYgPSBjcnRjLT5kZXYtPmRldl9wcml2 YXRlOwotCXByb3AgPSBwcml2LT5jcF9wcm9wZXJ0eVtmZWF0dXJlXTsKLQotCWlmICghcHJvcCkg ewotCQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9yYW5nZShjcnRjLT5kZXYsIDAsIG5hbWUs IG1pbiwgbWF4KTsKLQkJaWYgKCFwcm9wKSB7Ci0JCQlEUk1fRVJST1IoInByb3BlcnR5IGNyZWF0 ZSBmYWlsZWQ6ICVzXG4iLCBuYW1lKTsKLQkJCWtmcmVlKHByb3Bfbm9kZSk7Ci0JCQlyZXR1cm47 Ci0JCX0KLQkJcHJpdi0+Y3BfcHJvcGVydHlbZmVhdHVyZV0gPSBwcm9wOwotCX0KLQotCUlOSVRf UFJPUF9BVFRBQ0goJnByb3BfYXR0YWNoLCBjcnRjLCBwcm9wLCBwcm9wX25vZGUsCi0JCQkJZmVh dHVyZSwgdmFsKTsKLQotCWRwdV9jcF9jcnRjX3Byb3BfYXR0YWNoKCZwcm9wX2F0dGFjaCk7Ci19 Ci0KLXN0YXRpYyB2b2lkIGRwdV9jcF9jcnRjX2luc3RhbGxfYmxvYl9wcm9wZXJ0eShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsIGNoYXIgKm5hbWUsCi0JCQl1MzIgZmVhdHVyZSwgdTMyIGJsb2Jfc3op Ci17Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3QgZHB1X2NwX25vZGUgKnBy b3Bfbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKLQl1aW50NjRf dCB2YWwgPSAwOwotCXN0cnVjdCBkcHVfY3BfcHJvcF9hdHRhY2ggcHJvcF9hdHRhY2g7Ci0KLQlp ZiAoZmVhdHVyZSA+PSAgRFBVX0NQX0NSVENfTUFYX0ZFQVRVUkVTKSB7Ci0JCURSTV9FUlJPUigi aW52YWxpZCBmZWF0dXJlICVkIG1heCAlZFxuIiwgZmVhdHVyZSwKLQkJICAgICAgIERQVV9DUF9D UlRDX01BWF9GRUFUVVJFUyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcm9wX25vZGUgPSBremFsbG9j KHNpemVvZigqcHJvcF9ub2RlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcm9wX25vZGUpCi0JCXJl dHVybjsKLQotCXByaXYgPSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOwotCXByb3AgPSBwcml2LT5j cF9wcm9wZXJ0eVtmZWF0dXJlXTsKLQotCWlmICghcHJvcCkgewotCQlwcm9wID0gZHJtX3Byb3Bl cnR5X2NyZWF0ZShjcnRjLT5kZXYsCi0JCQkJCSAgIERSTV9NT0RFX1BST1BfQkxPQiwgbmFtZSwg MCk7Ci0JCWlmICghcHJvcCkgewotCQkJRFJNX0VSUk9SKCJwcm9wZXJ0eSBjcmVhdGUgZmFpbGVk OiAlc1xuIiwgbmFtZSk7Ci0JCQlrZnJlZShwcm9wX25vZGUpOwotCQkJcmV0dXJuOwotCQl9Ci0J CXByaXYtPmNwX3Byb3BlcnR5W2ZlYXR1cmVdID0gcHJvcDsKLQl9Ci0KLQlJTklUX1BST1BfQVRU QUNIKCZwcm9wX2F0dGFjaCwgY3J0YywgcHJvcCwgcHJvcF9ub2RlLAotCQkJCWZlYXR1cmUsIHZh bCk7Ci0JcHJvcF9ub2RlLT5wcm9wX2Jsb2Jfc3ogPSBibG9iX3N6OwotCi0JZHB1X2NwX2NydGNf cHJvcF9hdHRhY2goJnByb3BfYXR0YWNoKTsKLX0KLQotc3RhdGljIHZvaWQgZHB1X2NwX2NydGNf aW5zdGFsbF9lbnVtX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQl1MzIgZmVhdHVy ZSwgY29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCAqbGlzdCwgdTMyIGVudW1fc3osCi0J Y2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wOwotCXN0cnVjdCBkcHVf Y3Bfbm9kZSAqcHJvcF9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2 OwotCXVpbnQ2NF90IHZhbCA9IDA7Ci0Jc3RydWN0IGRwdV9jcF9wcm9wX2F0dGFjaCBwcm9wX2F0 dGFjaDsKLQotCWlmIChmZWF0dXJlID49ICBEUFVfQ1BfQ1JUQ19NQVhfRkVBVFVSRVMpIHsKLQkJ RFJNX0VSUk9SKCJpbnZhbGlkIGZlYXR1cmUgJWQgbWF4ICVkXG4iLCBmZWF0dXJlLAotCQkgICAg ICAgRFBVX0NQX0NSVENfTUFYX0ZFQVRVUkVTKTsKLQkJcmV0dXJuOwotCX0KLQotCXByb3Bfbm9k ZSA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9wX25vZGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3Bf bm9kZSkKLQkJcmV0dXJuOwotCi0JcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7Ci0JcHJv cCA9IHByaXYtPmNwX3Byb3BlcnR5W2ZlYXR1cmVdOwotCi0JaWYgKCFwcm9wKSB7Ci0JCXByb3Ag PSBkcm1fcHJvcGVydHlfY3JlYXRlX2VudW0oY3J0Yy0+ZGV2LCAwLCBuYW1lLAotCQkJbGlzdCwg ZW51bV9zeik7Ci0JCWlmICghcHJvcCkgewotCQkJRFJNX0VSUk9SKCJwcm9wZXJ0eSBjcmVhdGUg ZmFpbGVkOiAlc1xuIiwgbmFtZSk7Ci0JCQlrZnJlZShwcm9wX25vZGUpOwotCQkJcmV0dXJuOwot CQl9Ci0JCXByaXYtPmNwX3Byb3BlcnR5W2ZlYXR1cmVdID0gcHJvcDsKLQl9Ci0KLQlJTklUX1BS T1BfQVRUQUNIKCZwcm9wX2F0dGFjaCwgY3J0YywgcHJvcCwgcHJvcF9ub2RlLAotCQkJCWZlYXR1 cmUsIHZhbCk7Ci0KLQlkcHVfY3BfY3J0Y19wcm9wX2F0dGFjaCgmcHJvcF9hdHRhY2gpOwotfQot Ci1zdGF0aWMgdm9pZCBkcHVfY3BfY3J0Y19zZXRmZWF0dXJlKHN0cnVjdCBkcHVfY3Bfbm9kZSAq cHJvcF9ub2RlLAotCQkJCSAgIHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMpCi17Ci0Jc3RydWN0 IGRwdV9od19jcF9jZmcgaHdfY2ZnOwotCXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3X2xtOwotCXN0 cnVjdCBkcHVfaHdfZHNwcCAqaHdfZHNwcDsKLQl1MzIgbnVtX21peGVycyA9IGRwdV9jcnRjLT5u dW1fbWl4ZXJzOwotCWludCBpID0gMDsKLQlib29sIGZlYXR1cmVfZW5hYmxlZCA9IGZhbHNlOwot CWludCByZXQgPSAwOwotCXN0cnVjdCBkcHVfYWRfaHdfY2ZnIGFkX2NmZzsKLQotCWRwdV9jcF9n ZXRfaHdfcGF5bG9hZChwcm9wX25vZGUsICZod19jZmcsICZmZWF0dXJlX2VuYWJsZWQpOwotCWh3 X2NmZy5udW1fb2ZfbWl4ZXJzID0gZHB1X2NydGMtPm51bV9taXhlcnM7Ci0JaHdfY2ZnLmRpc3Bs YXloID0gZHB1X2NydGMtPmJhc2UubW9kZS5oZGlzcGxheTsKLQlod19jZmcuZGlzcGxheXYgPSBk cHVfY3J0Yy0+YmFzZS5tb2RlLnZkaXNwbGF5OwotCWh3X2NmZy5sYXN0X2ZlYXR1cmUgPSAwOwot Ci0JZm9yIChpID0gMDsgaSA8IG51bV9taXhlcnMgJiYgIXJldDsgaSsrKSB7Ci0JCWh3X2xtID0g ZHB1X2NydGMtPm1peGVyc1tpXS5od19sbTsKLQkJaHdfZHNwcCA9IGRwdV9jcnRjLT5taXhlcnNb aV0uaHdfZHNwcDsKLQkJaHdfY2ZnLmN0bCA9IGRwdV9jcnRjLT5taXhlcnNbaV0uaHdfY3RsOwot CQlod19jZmcubWl4ZXJfaW5mbyA9IGh3X2xtOwotCQlzd2l0Y2ggKHByb3Bfbm9kZS0+ZmVhdHVy ZSkgewotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBfVkxVVDoKLQkJCWlmICghaHdfZHNwcCB8fCAh aHdfZHNwcC0+b3BzLnNldHVwX3ZsdXQpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRp bnVlOwotCQkJfQotCQkJaHdfZHNwcC0+b3BzLnNldHVwX3ZsdXQoaHdfZHNwcCwgJmh3X2NmZyk7 Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX1BDQzoKLQkJCWlmICghaHdfZHNw cCB8fCAhaHdfZHNwcC0+b3BzLnNldHVwX3BjYykgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJ Y29udGludWU7Ci0JCQl9Ci0JCQlod19kc3BwLT5vcHMuc2V0dXBfcGNjKGh3X2RzcHAsICZod19j ZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9JR0M6Ci0JCQlpZiAoIWh3 X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9pZ2MpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwot CQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdfZHNwcC0+b3BzLnNldHVwX2lnYyhod19kc3BwLCAm aHdfY2ZnKTsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBfR0M6Ci0JCQlpZiAo IWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9nYykgewotCQkJCXJldCA9IC1FSU5WQUw7 Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlod19kc3BwLT5vcHMuc2V0dXBfZ2MoaHdfZHNwcCwg Jmh3X2NmZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0hVRToKLQkJCWlm ICghaHdfZHNwcCB8fCAhaHdfZHNwcC0+b3BzLnNldHVwX2h1ZSkgewotCQkJCXJldCA9IC1FSU5W QUw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlod19kc3BwLT5vcHMuc2V0dXBfaHVlKGh3X2Rz cHAsICZod19jZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9TQVQ6Ci0J CQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9zYXQpIHsKLQkJCQlyZXQgPSAt RUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdfZHNwcC0+b3BzLnNldHVwX3NhdCho d19kc3BwLCAmaHdfY2ZnKTsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBfVkFM OgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0dXBfdmFsKSB7Ci0JCQkJcmV0 ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWh3X2RzcHAtPm9wcy5zZXR1cF92 YWwoaHdfZHNwcCwgJmh3X2NmZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQ X0NPTlQ6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9jb250KSB7Ci0J CQkJcmV0ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWh3X2RzcHAtPm9wcy5z ZXR1cF9jb250KGh3X2RzcHAsICZod19jZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NS VENfRFNQUF9NRU1DT0xPUjoKLQkJCWlmICghaHdfZHNwcCB8fCAhaHdfZHNwcC0+b3BzLnNldHVw X3BhX21lbWNvbG9yKSB7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0K LQkJCWh3X2RzcHAtPm9wcy5zZXR1cF9wYV9tZW1jb2xvcihod19kc3BwLCAmaHdfY2ZnKTsKLQkJ CWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBfU0lYWk9ORToKLQkJCWlmICghaHdfZHNw cCB8fCAhaHdfZHNwcC0+b3BzLnNldHVwX3NpeHpvbmUpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwot CQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdfZHNwcC0+b3BzLnNldHVwX3NpeHpvbmUoaHdfZHNw cCwgJmh3X2NmZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0dBTVVUOgot CQkJaWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0dXBfZ2FtdXQpIHsKLQkJCQlyZXQg PSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdfZHNwcC0+b3BzLnNldHVwX2dh bXV0KGh3X2RzcHAsICZod19jZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfTE1f R0M6Ci0JCQlpZiAoIWh3X2xtIHx8ICFod19sbS0+b3BzLnNldHVwX2djKSB7Ci0JCQkJcmV0ID0g LUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWh3X2xtLT5vcHMuc2V0dXBfZ2MoaHdf bG0sICZod19jZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9BRF9NT0RF OgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0dXBfYWQpIHsKLQkJCQlyZXQg PSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYWRfY2ZnLnByb3AgPSBBRF9NT0RF OwotCQkJYWRfY2ZnLmh3X2NmZyA9ICZod19jZmc7Ci0JCQlod19kc3BwLT5vcHMuc2V0dXBfYWQo aHdfZHNwcCwgJmFkX2NmZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FE X0lOSVQ6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9hZCkgewotCQkJ CXJldCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlhZF9jZmcucHJvcCA9IEFE X0lOSVQ7Ci0JCQlhZF9jZmcuaHdfY2ZnID0gJmh3X2NmZzsKLQkJCWh3X2RzcHAtPm9wcy5zZXR1 cF9hZChod19kc3BwLCAmYWRfY2ZnKTsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRDX0RT UFBfQURfQ0ZHOgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0dXBfYWQpIHsK LQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYWRfY2ZnLnByb3Ag PSBBRF9DRkc7Ci0JCQlhZF9jZmcuaHdfY2ZnID0gJmh3X2NmZzsKLQkJCWh3X2RzcHAtPm9wcy5z ZXR1cF9hZChod19kc3BwLCAmYWRfY2ZnKTsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRD X0RTUFBfQURfSU5QVVQ6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9h ZCkgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlhZF9jZmcu cHJvcCA9IEFEX0lOUFVUOwotCQkJYWRfY2ZnLmh3X2NmZyA9ICZod19jZmc7Ci0JCQlod19kc3Bw LT5vcHMuc2V0dXBfYWQoaHdfZHNwcCwgJmFkX2NmZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVf Q1BfQ1JUQ19EU1BQX0FEX0FTU0VSVElWRU5FU1M6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2Rz cHAtPm9wcy5zZXR1cF9hZCkgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7Ci0J CQl9Ci0JCQlhZF9jZmcucHJvcCA9IEFEX0FTU0VSVElWRTsKLQkJCWFkX2NmZy5od19jZmcgPSAm aHdfY2ZnOwotCQkJaHdfZHNwcC0+b3BzLnNldHVwX2FkKGh3X2RzcHAsICZhZF9jZmcpOwotCQkJ YnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9BRF9CQUNLTElHSFQ6Ci0JCQlpZiAoIWh3 X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9hZCkgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0J CQkJY29udGludWU7Ci0JCQl9Ci0JCQlhZF9jZmcucHJvcCA9IEFEX0JBQ0tMSUdIVDsKLQkJCWFk X2NmZy5od19jZmcgPSAmaHdfY2ZnOwotCQkJaHdfZHNwcC0+b3BzLnNldHVwX2FkKGh3X2RzcHAs ICZhZF9jZmcpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJ YnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvICVz IGZlYXR1cmUgJWRcbiIsCi0JCQkoKGZlYXR1cmVfZW5hYmxlZCkgPyAiZW5hYmxlIiA6ICJkaXNh YmxlIiksCi0JCQlwcm9wX25vZGUtPmZlYXR1cmUpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGZl YXR1cmVfZW5hYmxlZCkgewotCQlEUk1fREVCVUdfRFJJVkVSKCJBZGQgZmVhdHVyZSB0byBhY3Rp dmUgbGlzdCAlZFxuIiwKLQkJCQkgcHJvcF9ub2RlLT5wcm9wZXJ0eV9pZCk7Ci0JCWRwdV9jcF91 cGRhdGVfbGlzdChwcm9wX25vZGUsIGRwdV9jcnRjLCBmYWxzZSk7Ci0JfSBlbHNlIHsKLQkJRFJN X0RFQlVHX0RSSVZFUigicmVtb3ZlIGZlYXR1cmUgZnJvbSBhY3RpdmUgbGlzdCAlZFxuIiwKLQkJ CSBwcm9wX25vZGUtPnByb3BlcnR5X2lkKTsKLQkJbGlzdF9kZWxfaW5pdCgmcHJvcF9ub2RlLT5h Y3RpdmVfbGlzdCk7Ci0JfQotCS8qIFByb2dyYW1taW5nIG9mIGZlYXR1cmUgZG9uZSByZW1vdmUg ZnJvbSBkaXJ0eSBsaXN0ICovCi0JbGlzdF9kZWxfaW5pdCgmcHJvcF9ub2RlLT5kaXJ0eV9saXN0 KTsKLX0KLQotdm9pZCBkcHVfY3BfY3J0Y19hcHBseV9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjID0gTlVMTDsKLQlib29sIHNl dF9kc3BwX2ZsdXNoID0gZmFsc2UsIHNldF9sbV9mbHVzaCA9IGZhbHNlOwotCXN0cnVjdCBkcHVf Y3Bfbm9kZSAqcHJvcF9ub2RlID0gTlVMTCwgKm4gPSBOVUxMOwotCXN0cnVjdCBkcHVfaHdfY3Rs ICpjdGw7Ci0JdWludDMyX3QgZmx1c2hfbWFzayA9IDA7Ci0JdTMyIG51bV9taXhlcnMgPSAwLCBp ID0gMDsKLQotCWlmICghY3J0YyB8fCAhY3J0Yy0+ZGV2KSB7Ci0JCURSTV9FUlJPUigiaW52YWxp ZCBjcnRjICVwSyBkZXYgJXBLXG4iLCBjcnRjLAotCQkJICAoY3J0YyA/IGNydGMtPmRldiA6IE5V TEwpKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0J aWYgKCFkcHVfY3J0YykgewotCQlEUk1fRVJST1IoImludmFsaWQgZHB1X2NydGMgJXBLXG4iLCBk cHVfY3J0Yyk7Ci0JCXJldHVybjsKLQl9Ci0KLQludW1fbWl4ZXJzID0gZHB1X2NydGMtPm51bV9t aXhlcnM7Ci0JaWYgKCFudW1fbWl4ZXJzKSB7Ci0JCURSTV9ERUJVR19EUklWRVIoIm5vIG1peGVy cyBmb3IgdGhpcyBjcnRjXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIENoZWNrIGlmIGRpcnR5 IGxpc3RzIGFyZSBlbXB0eSBhbmQgYWQgZmVhdHVyZXMgYXJlIGRpc2FibGVkIGZvcgotCSAqIGVh cmx5IHJldHVybi4gSWYgYWQgcHJvcGVydGllcyBhcmUgYWN0aXZlIHRoZW4gd2UgbmVlZCB0byBp c3N1ZQotCSAqIGRzcHAgZmx1c2guCi0JICoqLwotCWlmIChsaXN0X2VtcHR5KCZkcHVfY3J0Yy0+ ZGlydHlfbGlzdCkgJiYKLQkJbGlzdF9lbXB0eSgmZHB1X2NydGMtPmFkX2RpcnR5KSkgewotCQlp ZiAobGlzdF9lbXB0eSgmZHB1X2NydGMtPmFkX2FjdGl2ZSkpIHsKLQkJCURSTV9ERUJVR19EUklW RVIoIkRpcnR5IGxpc3QgaXMgZW1wdHlcbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWRwdV9jcF9h ZF9zZXRfcHJvcChkcHVfY3J0YywgQURfSVBDX1JFU0VUKTsKLQkJc2V0X2RzcHBfZmx1c2ggPSB0 cnVlOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcm9wX25vZGUsIG4sICZkcHVf Y3J0Yy0+ZGlydHlfbGlzdCwKLQkJCQlkaXJ0eV9saXN0KSB7Ci0JCWRwdV9jcF9jcnRjX3NldGZl YXR1cmUocHJvcF9ub2RlLCBkcHVfY3J0Yyk7Ci0JCS8qIFNldCB0aGUgZmx1c2ggZmxhZyB0byB0 cnVlICovCi0JCWlmIChwcm9wX25vZGUtPmlzX2RzcHBfZmVhdHVyZSkKLQkJCXNldF9kc3BwX2Zs dXNoID0gdHJ1ZTsKLQkJZWxzZQotCQkJc2V0X2xtX2ZsdXNoID0gdHJ1ZTsKLQl9Ci0KLQlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJvcF9ub2RlLCBuLCAmZHB1X2NydGMtPmFkX2RpcnR5LAot CQkJCWRpcnR5X2xpc3QpIHsKLQkJc2V0X2RzcHBfZmx1c2ggPSB0cnVlOwotCQlkcHVfY3BfY3J0 Y19zZXRmZWF0dXJlKHByb3Bfbm9kZSwgZHB1X2NydGMpOwotCX0KLQotCWZvciAoaSA9IDA7IGkg PCBudW1fbWl4ZXJzOyBpKyspIHsKLQkJY3RsID0gZHB1X2NydGMtPm1peGVyc1tpXS5od19jdGw7 Ci0JCWlmICghY3RsKQotCQkJY29udGludWU7Ci0JCWlmIChzZXRfZHNwcF9mbHVzaCAmJiBjdGwt Pm9wcy5nZXRfYml0bWFza19kc3BwCi0JCQkJJiYgZHB1X2NydGMtPm1peGVyc1tpXS5od19kc3Bw KSB7Ci0JCQljdGwtPm9wcy5nZXRfYml0bWFza19kc3BwKGN0bCwKLQkJCQkJJmZsdXNoX21hc2ss Ci0JCQkJCWRwdV9jcnRjLT5taXhlcnNbaV0uaHdfZHNwcC0+aWR4KTsKLQkJCWN0bC0+b3BzLnVw ZGF0ZV9wZW5kaW5nX2ZsdXNoKGN0bCwgZmx1c2hfbWFzayk7Ci0JCX0KLQkJaWYgKHNldF9sbV9m bHVzaCAmJiBjdGwtPm9wcy5nZXRfYml0bWFza19taXhlcgotCQkJCSYmIGRwdV9jcnRjLT5taXhl cnNbaV0uaHdfbG0pIHsKLQkJCWZsdXNoX21hc2sgPSBjdGwtPm9wcy5nZXRfYml0bWFza19taXhl cihjdGwsCi0JCQkJCWRwdV9jcnRjLT5taXhlcnNbaV0uaHdfbG0tPmlkeCk7Ci0JCQljdGwtPm9w cy51cGRhdGVfcGVuZGluZ19mbHVzaChjdGwsIGZsdXNoX21hc2spOwotCQl9Ci0JfQotfQotCi12 b2lkIGRwdV9jcF9jcnRjX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Ci17Ci0Jc3RydWN0IGRwdV9rbXMgKmttcyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVf Y3J0YyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZyA9IE5VTEw7Ci0JdW5z aWduZWQgbG9uZyBmZWF0dXJlcyA9IDA7Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBtc21fZHJtX3By aXZhdGUgKnByaXY7Ci0KLQlpZiAoIWNydGMgfHwgIWNydGMtPmRldiB8fCAhY3J0Yy0+ZGV2LT5k ZXZfcHJpdmF0ZSkgewotCQlEUk1fRVJST1IoImludmFsaWQgY3J0YyAlcEsgZGV2ICVwS1xuIiwK LQkJICAgICAgIGNydGMsICgoY3J0YykgPyBjcnRjLT5kZXYgOiBOVUxMKSk7Ci0JCXJldHVybjsK LQl9Ci0KLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWlmICghZHB1X2NydGMpIHsK LQkJRFJNX0VSUk9SKCJkcHVfY3J0YyAlcEtcbiIsIGRwdV9jcnRjKTsKLQkJcmV0dXJuOwotCX0K LQotCWttcyA9IGdldF9rbXMoY3J0Yyk7Ci0JaWYgKCFrbXMgfHwgIWttcy0+Y2F0YWxvZykgewot CQlEUk1fRVJST1IoImludmFsaWQgZHB1IGttcyAlcEsgY2F0YWxvZyAlcEsgZHB1X2NydGMgJXBL XG4iLAotCQkga21zLCAoKGttcykgPyBrbXMtPmNhdGFsb2cgOiBOVUxMKSwgZHB1X2NydGMpOwot CQlyZXR1cm47Ci0JfQotCi0JLyoqCi0JICogRnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBkdXJpbmcg dGhlIGF0b21pY19jaGVjayB3aXRoIHRlc3Rfb25seSBmbGFnCi0JICogYW5kIGFjdHVhbCBjb21t aXQuIEFsbG9jYXRlIHByb3BlcnRpZXMgb25seSBpZiBmZWF0dXJlIGxpc3QgaXMKLQkgKiBlbXB0 eSBkdXJpbmcgdGhlIGF0b21pY19jaGVjayB3aXRoIHRlc3Rfb25seSBmbGFnLgotCSAqLwotCWlm ICghbGlzdF9lbXB0eSgmZHB1X2NydGMtPmZlYXR1cmVfbGlzdCkpCi0JCXJldHVybjsKLQotCWNh dGFsb2cgPSBrbXMtPmNhdGFsb2c7Ci0JcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7Ci0J LyoqCi0JICogRFNQUC9MTSBwcm9wZXJ0aWVzIGFyZSBnbG9iYWwgdG8gYWxsIHRoZSBDUlRDUy4K LQkgKiBQcm9wZXJ0aWVzIGFyZSBjcmVhdGVkIGZvciBmaXJzdCBDUlRDIGFuZCByZS11c2VkIGZv ciBsYXRlcgotCSAqIGNydGNzLgotCSAqLwotCWlmICghcHJpdi0+Y3BfcHJvcGVydHkpIHsKLQkJ cHJpdi0+Y3BfcHJvcGVydHkgPSBremFsbG9jKChzaXplb2YocHJpdi0+Y3BfcHJvcGVydHkpICoK LQkJCQlEUFVfQ1BfQ1JUQ19NQVhfRkVBVFVSRVMpLCBHRlBfS0VSTkVMKTsKLQkJc2V0dXBfZHNw cF9wcm9wX2luc3RhbGxfZnVuY3MoZHNwcF9wcm9wX2luc3RhbGxfZnVuYyk7Ci0JCXNldHVwX2xt X3Byb3BfaW5zdGFsbF9mdW5jcyhsbV9wcm9wX2luc3RhbGxfZnVuYyk7Ci0JfQotCWlmICghcHJp di0+Y3BfcHJvcGVydHkpCi0JCXJldHVybjsKLQotCWlmICghY2F0YWxvZy0+ZHNwcF9jb3VudCkK LQkJZ290byBsbV9wcm9wZXJ0eTsKLQotCS8qIENoZWNrIGZvciBhbGwgdGhlIERTUFAgcHJvcGVy dGllcyBhbmQgYXR0YWNoIGl0IHRvIENSVEMgKi8KLQlmZWF0dXJlcyA9IGNhdGFsb2ctPmRzcHBb MF0uZmVhdHVyZXM7Ci0JZm9yIChpID0gMDsgaSA8IERQVV9EU1BQX01BWDsgaSsrKSB7Ci0JCWlm ICghdGVzdF9iaXQoaSwgJmZlYXR1cmVzKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoZHNwcF9wcm9w X2luc3RhbGxfZnVuY1tpXSkKLQkJCWRzcHBfcHJvcF9pbnN0YWxsX2Z1bmNbaV0oY3J0Yyk7Ci0J fQotCi1sbV9wcm9wZXJ0eToKLQlpZiAoIWNhdGFsb2ctPm1peGVyX2NvdW50KQotCQlyZXR1cm47 Ci0KLQkvKiBDaGVjayBmb3IgYWxsIHRoZSBMTSBwcm9wZXJ0aWVzIGFuZCBhdHRhY2ggaXQgdG8g Q1JUQyAqLwotCWZlYXR1cmVzID0gY2F0YWxvZy0+bWl4ZXJbMF0uZmVhdHVyZXM7Ci0JZm9yIChp ID0gMDsgaSA8IERQVV9NSVhFUl9NQVg7IGkrKykgewotCQlpZiAoIXRlc3RfYml0KGksICZmZWF0 dXJlcykpCi0JCQljb250aW51ZTsKLQkJaWYgKGxtX3Byb3BfaW5zdGFsbF9mdW5jW2ldKQotCQkJ bG1fcHJvcF9pbnN0YWxsX2Z1bmNbaV0oY3J0Yyk7Ci0JfQotfQotCi1pbnQgZHB1X2NwX2NydGNf c2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQlzdHJ1Y3QgZHJtX3Byb3Bl cnR5ICpwcm9wZXJ0eSwKLQkJCQl1aW50NjRfdCB2YWwpCi17Ci0Jc3RydWN0IGRwdV9jcF9ub2Rl ICpwcm9wX25vZGUgPSBOVUxMOwotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMgPSBOVUxMOwot CWludCByZXQgPSAwLCBpID0gMCwgZHNwcF9jbnQsIGxtX2NudDsKLQl1OCBmb3VuZCA9IDA7Ci0K LQlpZiAoIWNydGMgfHwgIXByb3BlcnR5KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBjcnRjICVw SyBwcm9wZXJ0eSAlcEtcbiIsIGNydGMsIHByb3BlcnR5KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQlpZiAoIWRwdV9jcnRjKSB7Ci0J CURSTV9FUlJPUigiaW52YWxpZCBkcHVfY3J0YyAlcEtcbiIsIGRwdV9jcnRjKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwcm9wX25vZGUsICZkcHVfY3J0 Yy0+ZmVhdHVyZV9saXN0LCBmZWF0dXJlX2xpc3QpIHsKLQkJaWYgKHByb3BlcnR5LT5iYXNlLmlk ID09IHByb3Bfbm9kZS0+cHJvcGVydHlfaWQpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwot CQl9Ci0JfQotCi0JaWYgKCFmb3VuZCkKLQkJcmV0dXJuIDA7Ci0JLyoqCi0JICogZHB1X2NydGMg aXMgdmlydHVhbCBlbnN1cmUgdGhhdCBoYXJkd2FyZSBoYXMgYmVlbiBhdHRhY2hlZCB0byB0aGUK LQkgKiBjcnRjLiBDaGVjayBMTSBhbmQgZHNwcCBjb3VudHMgYmFzZWQgb24gd2hldGhlciBmZWF0 dXJlIGlzIGEKLQkgKiBkc3BwL2xtIGZlYXR1cmUuCi0JICovCi0JaWYgKCFkcHVfY3J0Yy0+bnVt X21peGVycyB8fAotCSAgICBkcHVfY3J0Yy0+bnVtX21peGVycyA+IEFSUkFZX1NJWkUoZHB1X2Ny dGMtPm1peGVycykpIHsKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIG1peGVyIGNvbmZpZyBhY3QgY250 ICVkIG1heCBjbnQgJXpkXG4iLAotCQkJZHB1X2NydGMtPm51bV9taXhlcnMsIEFSUkFZX1NJWkUo ZHB1X2NydGMtPm1peGVycykpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkc3BwX2NudCA9 IDA7Ci0JbG1fY250ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51bV9taXhlcnM7 IGkrKykgewotCQlpZiAoZHB1X2NydGMtPm1peGVyc1tpXS5od19kc3BwKQotCQkJZHNwcF9jbnQr KzsKLQkJaWYgKGRwdV9jcnRjLT5taXhlcnNbaV0uaHdfbG0pCi0JCQlsbV9jbnQrKzsKLQl9Ci0K LQlpZiAocHJvcF9ub2RlLT5pc19kc3BwX2ZlYXR1cmUgJiYgZHNwcF9jbnQgPCBkcHVfY3J0Yy0+ bnVtX21peGVycykgewotCQlEUk1fRVJST1IoImludmFsaWQgZHNwcCBjbnQgJWQgbWl4ZXIgY250 ICVkXG4iLCBkc3BwX2NudCwKLQkJCWRwdV9jcnRjLT5udW1fbWl4ZXJzKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfSBlbHNlIGlmIChsbV9jbnQgPCBkcHVfY3J0Yy0+bnVtX21peGVycykgewotCQlE Uk1fRVJST1IoImludmFsaWQgbG0gY250ICVkIG1peGVyIGNudCAlZFxuIiwgbG1fY250LAotCQkJ ZHB1X2NydGMtPm51bV9taXhlcnMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXQgPSBk cHVfY3BfYWRfdmFsaWRhdGVfcHJvcChwcm9wX25vZGUsIGRwdV9jcnRjKTsKLQlpZiAocmV0KSB7 Ci0JCURSTV9FUlJPUigiYWQgcHJvcGVydHkgdmFsaWRhdGlvbiBmYWlsZWQgcmV0ICVkXG4iLCBy ZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIHJlbW92ZSB0aGUgcHJvcGVydHkgZnJvbSBk aXJ0eSBsaXN0ICovCi0JbGlzdF9kZWxfaW5pdCgmcHJvcF9ub2RlLT5kaXJ0eV9saXN0KTsKLQot CWlmICghdmFsKQotCQlyZXQgPSBkcHVfY3BfZGlzYWJsZV9jcnRjX3Byb3BlcnR5KGNydGMsIHBy b3BlcnR5LCBwcm9wX25vZGUpOwotCWVsc2UKLQkJcmV0ID0gZHB1X2NwX2VuYWJsZV9jcnRjX3By b3BlcnR5KGNydGMsIHByb3BlcnR5LAotCQkJCQkJICBwcm9wX25vZGUsIHZhbCk7Ci0KLQlpZiAo IXJldCkgewotCQkvKiByZW1vdmUgdGhlIHByb3BlcnR5IGZyb20gYWN0aXZlIGxpc3QgKi8KLQkJ bGlzdF9kZWxfaW5pdCgmcHJvcF9ub2RlLT5hY3RpdmVfbGlzdCk7Ci0JCS8qIE1hcmsgdGhlIGZl YXR1cmUgYXMgZGlydHkgKi8KLQkJZHB1X2NwX3VwZGF0ZV9saXN0KHByb3Bfbm9kZSwgZHB1X2Ny dGMsIHRydWUpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgZHB1X2NwX2NydGNfZ2V0X3By b3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAgc3RydWN0IGRybV9wcm9wZXJ0 eSAqcHJvcGVydHksIHVpbnQ2NF90ICp2YWwpCi17Ci0Jc3RydWN0IGRwdV9jcF9ub2RlICpwcm9w X25vZGUgPSBOVUxMOwotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMgPSBOVUxMOwotCi0JaWYg KCFjcnRjIHx8ICFwcm9wZXJ0eSB8fCAhdmFsKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBjcnRj ICVwSyBwcm9wZXJ0eSAlcEsgdmFsICVwS1xuIiwKLQkJCSAgY3J0YywgcHJvcGVydHksIHZhbCk7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7 Ci0JaWYgKCFkcHVfY3J0YykgewotCQlEUk1fRVJST1IoImludmFsaWQgZHB1X2NydGMgJXBLXG4i LCBkcHVfY3J0Yyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkvKiBSZXR1cm4gMCBpZiBwcm9w ZXJ0eSBpcyBub3Qgc3VwcG9ydGVkICovCi0JKnZhbCA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRy eShwcm9wX25vZGUsICZkcHVfY3J0Yy0+ZmVhdHVyZV9saXN0LCBmZWF0dXJlX2xpc3QpIHsKLQkJ aWYgKHByb3BlcnR5LT5iYXNlLmlkID09IHByb3Bfbm9kZS0+cHJvcGVydHlfaWQpIHsKLQkJCSp2 YWwgPSBwcm9wX25vZGUtPnByb3BfdmFsOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7 Ci19Ci0KLXZvaWQgZHB1X2NwX2NydGNfZGVzdHJveV9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjID0gTlVMTDsKLQlzdHJ1Y3Qg ZHB1X2NwX25vZGUgKnByb3Bfbm9kZSA9IE5VTEwsICpuID0gTlVMTDsKLQotCWlmICghY3J0Yykg ewotCQlEUk1fRVJST1IoImludmFsaWQgY3J0YyAlcEtcbiIsIGNydGMpOwotCQlyZXR1cm47Ci0J fQotCi0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQlpZiAoIWRwdV9jcnRjKSB7Ci0J CURSTV9FUlJPUigiaW52YWxpZCBkcHVfY3J0YyAlcEtcbiIsIGRwdV9jcnRjKTsKLQkJcmV0dXJu OwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcm9wX25vZGUsIG4sICZkcHVfY3J0 Yy0+ZmVhdHVyZV9saXN0LAotCQkJCSBmZWF0dXJlX2xpc3QpIHsKLQkJaWYgKHByb3Bfbm9kZS0+ cHJvcF9mbGFncyAmIERSTV9NT0RFX1BST1BfQkxPQgotCQkgICAgJiYgcHJvcF9ub2RlLT5ibG9i X3B0cikKLQkJCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChwcm9wX25vZGUtPmJsb2JfcHRyKTsKLQot CQlsaXN0X2RlbF9pbml0KCZwcm9wX25vZGUtPmFjdGl2ZV9saXN0KTsKLQkJbGlzdF9kZWxfaW5p dCgmcHJvcF9ub2RlLT5kaXJ0eV9saXN0KTsKLQkJbGlzdF9kZWxfaW5pdCgmcHJvcF9ub2RlLT5m ZWF0dXJlX2xpc3QpOwotCQlkcHVfY3BfZGVzdHJveV9sb2NhbF9ibG9iKHByb3Bfbm9kZSk7Ci0J CWtmcmVlKHByb3Bfbm9kZSk7Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJmRwdV9jcnRjLT5hY3Rp dmVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRwdV9jcnRjLT5kaXJ0eV9saXN0KTsKLQlJTklU X0xJU1RfSEVBRCgmZHB1X2NydGMtPmZlYXR1cmVfbGlzdCk7Ci19Ci0KLXZvaWQgZHB1X2NwX2Ny dGNfc3VzcGVuZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpk cHVfY3J0YyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9jcF9ub2RlICpwcm9wX25vZGUgPSBOVUxMLCAq biA9IE5VTEw7Ci0KLQlpZiAoIWNydGMpIHsKLQkJRFJNX0VSUk9SKCJjcnRjICVwS1xuIiwgY3J0 Yyk7Ci0JCXJldHVybjsKLQl9Ci0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQlpZiAo IWRwdV9jcnRjKSB7Ci0JCURSTV9FUlJPUigiZHB1X2NydGMgJXBLXG4iLCBkcHVfY3J0Yyk7Ci0J CXJldHVybjsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJvcF9ub2RlLCBuLCAm ZHB1X2NydGMtPmFjdGl2ZV9saXN0LAotCQkJCSBhY3RpdmVfbGlzdCkgewotCQlkcHVfY3BfdXBk YXRlX2xpc3QocHJvcF9ub2RlLCBkcHVfY3J0YywgdHJ1ZSk7Ci0JCWxpc3RfZGVsX2luaXQoJnBy b3Bfbm9kZS0+YWN0aXZlX2xpc3QpOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShw cm9wX25vZGUsIG4sICZkcHVfY3J0Yy0+YWRfYWN0aXZlLAotCQkJCSBhY3RpdmVfbGlzdCkgewot CQlkcHVfY3BfdXBkYXRlX2xpc3QocHJvcF9ub2RlLCBkcHVfY3J0YywgdHJ1ZSk7Ci0JCWxpc3Rf ZGVsX2luaXQoJnByb3Bfbm9kZS0+YWN0aXZlX2xpc3QpOwotCX0KLX0KLQotdm9pZCBkcHVfY3Bf Y3J0Y19yZXN1bWUoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCS8qIHBsYWNlaG9sZGVyIGZv ciBvcGVyYXRpb25zIG5lZWRlZCBkdXJpbmcgcmVzdW1lICovCi19Ci0KLXN0YXRpYyB2b2lkIGRz cHBfcGNjX2luc3RhbGxfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCWNoYXIg ZmVhdHVyZV9uYW1lWzI1Nl07Ci0Jc3RydWN0IGRwdV9rbXMgKmttcyA9IE5VTEw7Ci0Jc3RydWN0 IGRwdV9tZHNzX2NmZyAqY2F0YWxvZyA9IE5VTEw7Ci0JdTMyIHZlcnNpb247Ci0KLQlrbXMgPSBn ZXRfa21zKGNydGMpOwotCWNhdGFsb2cgPSBrbXMtPmNhdGFsb2c7Ci0KLQl2ZXJzaW9uID0gY2F0 YWxvZy0+ZHNwcFswXS5zYmxrLT5wY2MudmVyc2lvbiA+PiAxNjsKLQlzbnByaW50ZihmZWF0dXJl X25hbWUsIEFSUkFZX1NJWkUoZmVhdHVyZV9uYW1lKSwgIiVzJWQiLAotCQkiRFBVX0RTUFBfUEND X1YiLCB2ZXJzaW9uKTsKLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIDE6Ci0JY2FzZSA0Ogot CQlkcHVfY3BfY3J0Y19pbnN0YWxsX2Jsb2JfcHJvcGVydHkoY3J0YywgZmVhdHVyZV9uYW1lLAot CQkJRFBVX0NQX0NSVENfRFNQUF9QQ0MsIHNpemVvZihzdHJ1Y3QgZHJtX21zbV9wY2MpKTsKLQkJ YnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCJ2ZXJzaW9uICVkIG5vdCBzdXBwb3J0ZWRc biIsIHZlcnNpb24pOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGRzcHBfaHNpY19p bnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQljaGFyIGZlYXR1cmVf bmFtZVsyNTZdOwotCXN0cnVjdCBkcHVfa21zICprbXMgPSBOVUxMOwotCXN0cnVjdCBkcHVfbWRz c19jZmcgKmNhdGFsb2cgPSBOVUxMOwotCXUzMiB2ZXJzaW9uOwotCi0Ja21zID0gZ2V0X2ttcyhj cnRjKTsKLQljYXRhbG9nID0ga21zLT5jYXRhbG9nOwotCXZlcnNpb24gPSBjYXRhbG9nLT5kc3Bw WzBdLnNibGstPmhzaWMudmVyc2lvbiA+PiAxNjsKLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNl IDE6Ci0JCXNucHJpbnRmKGZlYXR1cmVfbmFtZSwgQVJSQVlfU0laRShmZWF0dXJlX25hbWUpLCAi JXMlZCIsCi0JCQkiRFBVX0RTUFBfSFVFX1YiLCB2ZXJzaW9uKTsKLQkJZHB1X2NwX2NydGNfaW5z dGFsbF9yYW5nZV9wcm9wZXJ0eShjcnRjLCBmZWF0dXJlX25hbWUsCi0JCQlEUFVfQ1BfQ1JUQ19E U1BQX0hVRSwgMCwgVTMyX01BWCwgMCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJP UigidmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCB2ZXJzaW9uKTsKLQkJYnJlYWs7Ci0JfQot fQotCi1zdGF0aWMgdm9pZCBkc3BwX3ZsdXRfaW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCi17Ci0JY2hhciBmZWF0dXJlX25hbWVbMjU2XTsKLQlzdHJ1Y3QgZHB1X2ttcyAq a21zID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nID0gTlVMTDsKLQl1MzIg dmVyc2lvbjsKLQotCWttcyA9IGdldF9rbXMoY3J0Yyk7Ci0JY2F0YWxvZyA9IGttcy0+Y2F0YWxv ZzsKLQl2ZXJzaW9uID0gY2F0YWxvZy0+ZHNwcFswXS5zYmxrLT52bHV0LnZlcnNpb24gPj4gMTY7 Ci0Jc25wcmludGYoZmVhdHVyZV9uYW1lLCBBUlJBWV9TSVpFKGZlYXR1cmVfbmFtZSksICIlcyVk IiwKLQkJIkRQVV9EU1BQX1ZMVVRfViIsIHZlcnNpb24pOwotCXN3aXRjaCAodmVyc2lvbikgewot CWNhc2UgMToKLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9yYW5nZV9wcm9wZXJ0eShjcnRjLCBmZWF0 dXJlX25hbWUsCi0JCQlEUFVfQ1BfQ1JUQ19EU1BQX1ZMVVQsIDAsIFU2NF9NQVgsIDApOwotCQlk cHVfY3BfY3JlYXRlX2xvY2FsX2Jsb2IoY3J0YywKLQkJCURQVV9DUF9DUlRDX0RTUFBfVkxVVCwK LQkJCXNpemVvZihzdHJ1Y3QgZHJtX21zbV9wYV92bHV0KSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6 Ci0JCURSTV9FUlJPUigidmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCB2ZXJzaW9uKTsKLQkJ YnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkc3BwX2FkX2luc3RhbGxfcHJvcGVydHkoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQotewotCWNoYXIgZmVhdHVyZV9uYW1lWzI1Nl07Ci0Jc3RydWN0 IGRwdV9rbXMgKmttcyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZyA9IE5V TEw7Ci0JdTMyIHZlcnNpb247Ci0KLQlrbXMgPSBnZXRfa21zKGNydGMpOwotCWNhdGFsb2cgPSBr bXMtPmNhdGFsb2c7Ci0JdmVyc2lvbiA9IGNhdGFsb2ctPmRzcHBbMF0uc2Jsay0+YWQudmVyc2lv biA+PiAxNjsKLQlzbnByaW50ZihmZWF0dXJlX25hbWUsIEFSUkFZX1NJWkUoZmVhdHVyZV9uYW1l KSwgIiVzJWQiLAotCQkiRFBVX0RTUFBfQURfViIsIHZlcnNpb24pOwotCXN3aXRjaCAodmVyc2lv bikgewotCWNhc2UgMzoKLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9pbW11dGFibGVfcHJvcGVydHko Y3J0YywKLQkJCWZlYXR1cmVfbmFtZSwgRFBVX0NQX0NSVENfRFNQUF9BRCk7Ci0JCWJyZWFrOwot CWNhc2UgNDoKLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9pbW11dGFibGVfcHJvcGVydHkoY3J0YywK LQkJCWZlYXR1cmVfbmFtZSwgRFBVX0NQX0NSVENfRFNQUF9BRCk7Ci0KLQkJZHB1X2NwX2NydGNf aW5zdGFsbF9lbnVtX3Byb3BlcnR5KGNydGMsCi0JCQlEUFVfQ1BfQ1JUQ19EU1BQX0FEX01PREUs IGFkNF9tb2RlcywKLQkJCUFSUkFZX1NJWkUoYWQ0X21vZGVzKSwgIkRQVV9EU1BQX0FEX1Y0X01P REUiKTsKLQotCQlkcHVfY3BfY3J0Y19pbnN0YWxsX3JhbmdlX3Byb3BlcnR5KGNydGMsICJEUFVf RFNQUF9BRF9WNF9JTklUIiwKLQkJCURQVV9DUF9DUlRDX0RTUFBfQURfSU5JVCwgMCwgVTY0X01B WCwgMCk7Ci0JCWRwdV9jcF9jcmVhdGVfbG9jYWxfYmxvYihjcnRjLCBEUFVfQ1BfQ1JUQ19EU1BQ X0FEX0lOSVQsCi0JCQlzaXplb2Yoc3RydWN0IGRybV9tc21fYWQ0X2luaXQpKTsKLQotCQlkcHVf Y3BfY3J0Y19pbnN0YWxsX3JhbmdlX3Byb3BlcnR5KGNydGMsICJEUFVfRFNQUF9BRF9WNF9DRkci LAotCQkJRFBVX0NQX0NSVENfRFNQUF9BRF9DRkcsIDAsIFU2NF9NQVgsIDApOwotCQlkcHVfY3Bf Y3JlYXRlX2xvY2FsX2Jsb2IoY3J0YywgRFBVX0NQX0NSVENfRFNQUF9BRF9DRkcsCi0JCQlzaXpl b2Yoc3RydWN0IGRybV9tc21fYWQ0X2NmZykpOwotCQlkcHVfY3BfY3J0Y19pbnN0YWxsX3Jhbmdl X3Byb3BlcnR5KGNydGMsCi0JCQkiRFBVX0RTUFBfQURfVjRfQVNTRVJUSVZFTkVTUyIsCi0JCQlE UFVfQ1BfQ1JUQ19EU1BQX0FEX0FTU0VSVElWRU5FU1MsIDAsIChCSVQoOCkgLSAxKSwgMCk7Ci0J CWRwdV9jcF9jcnRjX2luc3RhbGxfcmFuZ2VfcHJvcGVydHkoY3J0YywgIkRQVV9EU1BQX0FEX1Y0 X0lOUFVUIiwKLQkJCURQVV9DUF9DUlRDX0RTUFBfQURfSU5QVVQsIDAsIFUxNl9NQVgsIDApOwot CQlkcHVfY3BfY3J0Y19pbnN0YWxsX3JhbmdlX3Byb3BlcnR5KGNydGMsCi0JCQkJIkRQVV9EU1BQ X0FEX1Y0X0JBQ0tMSUdIVCIsCi0JCQlEUFVfQ1BfQ1JUQ19EU1BQX0FEX0JBQ0tMSUdIVCwgMCwg KEJJVCgxNikgLSAxKSwKLQkJCTApOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1Io InZlcnNpb24gJWQgbm90IHN1cHBvcnRlZFxuIiwgdmVyc2lvbik7Ci0JCWJyZWFrOwotCX0KLX0K LQotc3RhdGljIHZvaWQgbG1fZ2NfaW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCi17Ci0JY2hhciBmZWF0dXJlX25hbWVbMjU2XTsKLQlzdHJ1Y3QgZHB1X2ttcyAqa21zID0g TlVMTDsKLQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nID0gTlVMTDsKLQl1MzIgdmVyc2lv bjsKLQotCWttcyA9IGdldF9rbXMoY3J0Yyk7Ci0JY2F0YWxvZyA9IGttcy0+Y2F0YWxvZzsKLQl2 ZXJzaW9uID0gY2F0YWxvZy0+bWl4ZXJbMF0uc2Jsay0+Z2MudmVyc2lvbiA+PiAxNjsKLQlzbnBy aW50ZihmZWF0dXJlX25hbWUsIEFSUkFZX1NJWkUoZmVhdHVyZV9uYW1lKSwgIiVzJWQiLAotCQkg IkRQVV9MTV9HQ19WIiwgdmVyc2lvbik7Ci0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0JY2FzZSAxOgot CQlkcHVfY3BfY3J0Y19pbnN0YWxsX2Jsb2JfcHJvcGVydHkoY3J0YywgZmVhdHVyZV9uYW1lLAot CQkJRFBVX0NQX0NSVENfTE1fR0MsIHNpemVvZihzdHJ1Y3QgZHJtX21zbV9wZ2NfbHV0KSk7Ci0J CWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigidmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVk XG4iLCB2ZXJzaW9uKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkc3BwX2dhbXV0 X2luc3RhbGxfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCWNoYXIgZmVhdHVy ZV9uYW1lWzI1Nl07Ci0Jc3RydWN0IGRwdV9rbXMgKmttcyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9t ZHNzX2NmZyAqY2F0YWxvZyA9IE5VTEw7Ci0JdTMyIHZlcnNpb247Ci0KLQlrbXMgPSBnZXRfa21z KGNydGMpOwotCWNhdGFsb2cgPSBrbXMtPmNhdGFsb2c7Ci0KLQl2ZXJzaW9uID0gY2F0YWxvZy0+ ZHNwcFswXS5zYmxrLT5nYW11dC52ZXJzaW9uID4+IDE2OwotCXNucHJpbnRmKGZlYXR1cmVfbmFt ZSwgQVJSQVlfU0laRShmZWF0dXJlX25hbWUpLCAiJXMlZCIsCi0JCSJEUFVfRFNQUF9HQU1VVF9W IiwgdmVyc2lvbik7Ci0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0JY2FzZSA0OgotCQlkcHVfY3BfY3J0 Y19pbnN0YWxsX2Jsb2JfcHJvcGVydHkoY3J0YywgZmVhdHVyZV9uYW1lLAotCQkJRFBVX0NQX0NS VENfRFNQUF9HQU1VVCwKLQkJCXNpemVvZihzdHJ1Y3QgZHJtX21zbV8zZF9nYW11dCkpOwotCQli cmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoInZlcnNpb24gJWQgbm90IHN1cHBvcnRlZFxu IiwgdmVyc2lvbik7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHNwcF9nY19pbnN0 YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQljaGFyIGZlYXR1cmVfbmFt ZVsyNTZdOwotCXN0cnVjdCBkcHVfa21zICprbXMgPSBOVUxMOwotCXN0cnVjdCBkcHVfbWRzc19j ZmcgKmNhdGFsb2cgPSBOVUxMOwotCXUzMiB2ZXJzaW9uOwotCi0Ja21zID0gZ2V0X2ttcyhjcnRj KTsKLQljYXRhbG9nID0ga21zLT5jYXRhbG9nOwotCi0JdmVyc2lvbiA9IGNhdGFsb2ctPmRzcHBb MF0uc2Jsay0+Z2MudmVyc2lvbiA+PiAxNjsKLQlzbnByaW50ZihmZWF0dXJlX25hbWUsIEFSUkFZ X1NJWkUoZmVhdHVyZV9uYW1lKSwgIiVzJWQiLAotCQkiRFBVX0RTUFBfR0NfViIsIHZlcnNpb24p OwotCXN3aXRjaCAodmVyc2lvbikgewotCWNhc2UgMToKLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9i bG9iX3Byb3BlcnR5KGNydGMsIGZlYXR1cmVfbmFtZSwKLQkJCURQVV9DUF9DUlRDX0RTUFBfR0Ms IHNpemVvZihzdHJ1Y3QgZHJtX21zbV9wZ2NfbHV0KSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J CURSTV9FUlJPUigidmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCB2ZXJzaW9uKTsKLQkJYnJl YWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkc3BwX2lnY19pbnN0YWxsX3Byb3BlcnR5KHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKLXsKLQljaGFyIGZlYXR1cmVfbmFtZVsyNTZdOwotCXN0cnVjdCBk cHVfa21zICprbXMgPSBOVUxMOwotCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2cgPSBOVUxM OwotCXUzMiB2ZXJzaW9uOwotCi0Ja21zID0gZ2V0X2ttcyhjcnRjKTsKLQljYXRhbG9nID0ga21z LT5jYXRhbG9nOwotCi0JdmVyc2lvbiA9IGNhdGFsb2ctPmRzcHBbMF0uc2Jsay0+aWdjLnZlcnNp b24gPj4gMTY7Ci0Jc25wcmludGYoZmVhdHVyZV9uYW1lLCBBUlJBWV9TSVpFKGZlYXR1cmVfbmFt ZSksICIlcyVkIiwKLQkJIkRQVV9EU1BQX0lHQ19WIiwgdmVyc2lvbik7Ci0Jc3dpdGNoICh2ZXJz aW9uKSB7Ci0JY2FzZSAzOgotCQlkcHVfY3BfY3J0Y19pbnN0YWxsX2Jsb2JfcHJvcGVydHkoY3J0 YywgZmVhdHVyZV9uYW1lLAotCQkJRFBVX0NQX0NSVENfRFNQUF9JR0MsIHNpemVvZihzdHJ1Y3Qg ZHJtX21zbV9pZ2NfbHV0KSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigidmVy c2lvbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCB2ZXJzaW9uKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1z dGF0aWMgdm9pZCBkcHVfY3BfdXBkYXRlX2xpc3Qoc3RydWN0IGRwdV9jcF9ub2RlICpwcm9wX25v ZGUsCi0JCXN0cnVjdCBkcHVfY3J0YyAqY3J0YywgYm9vbCBkaXJ0eV9saXN0KQotewotCXN3aXRj aCAocHJvcF9ub2RlLT5mZWF0dXJlKSB7Ci0JY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX01PREU6 Ci0JY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX0lOSVQ6Ci0JY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQ X0FEX0NGRzoKLQljYXNlIERQVV9DUF9DUlRDX0RTUFBfQURfSU5QVVQ6Ci0JY2FzZSBEUFVfQ1Bf Q1JUQ19EU1BQX0FEX0FTU0VSVElWRU5FU1M6Ci0JY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX0JB Q0tMSUdIVDoKLQkJaWYgKGRpcnR5X2xpc3QpCi0JCQlsaXN0X2FkZF90YWlsKCZwcm9wX25vZGUt PmRpcnR5X2xpc3QsICZjcnRjLT5hZF9kaXJ0eSk7Ci0JCWVsc2UKLQkJCWxpc3RfYWRkX3RhaWwo JnByb3Bfbm9kZS0+YWN0aXZlX2xpc3QsCi0JCQkJCSZjcnRjLT5hZF9hY3RpdmUpOwotCQlicmVh azsKLQlkZWZhdWx0OgotCQkvKiBjb2xvciBwcm9jZXNzaW5nIHByb3BlcnRpZXMgaGFuZGxlIGhl cmUgKi8KLQkJaWYgKGRpcnR5X2xpc3QpCi0JCQlsaXN0X2FkZF90YWlsKCZwcm9wX25vZGUtPmRp cnR5X2xpc3QsCi0JCQkJCSZjcnRjLT5kaXJ0eV9saXN0KTsKLQkJZWxzZQotCQkJbGlzdF9hZGRf dGFpbCgmcHJvcF9ub2RlLT5hY3RpdmVfbGlzdCwKLQkJCQkJJmNydGMtPmFjdGl2ZV9saXN0KTsK LQkJYnJlYWs7Ci0JfTsKLX0KLQotc3RhdGljIGludCBkcHVfY3BfYWRfdmFsaWRhdGVfcHJvcChz dHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSwKLQkJc3RydWN0IGRwdV9jcnRjICpjcnRjKQot ewotCWludCBpID0gMCwgcmV0ID0gMDsKLQl1MzIgYWRfcHJvcDsKLQotCWZvciAoaSA9IDA7IGkg PCBjcnRjLT5udW1fbWl4ZXJzICYmICFyZXQ7IGkrKykgewotCQlpZiAoIWNydGMtPm1peGVyc1tp XS5od19kc3BwKSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJY29udGludWU7Ci0JCX0KLQkJc3dp dGNoIChwcm9wX25vZGUtPmZlYXR1cmUpIHsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX01P REU6Ci0JCQlhZF9wcm9wID0gQURfTU9ERTsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRD X0RTUFBfQURfSU5JVDoKLQkJCWFkX3Byb3AgPSBBRF9JTklUOwotCQkJYnJlYWs7Ci0JCWNhc2Ug RFBVX0NQX0NSVENfRFNQUF9BRF9DRkc6Ci0JCQlhZF9wcm9wID0gQURfQ0ZHOwotCQkJYnJlYWs7 Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9BRF9JTlBVVDoKLQkJCWFkX3Byb3AgPSBBRF9JTlBV VDsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBfQURfQVNTRVJUSVZFTkVTUzoK LQkJCWFkX3Byb3AgPSBBRF9BU1NFUlRJVkU7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1BfQ1JU Q19EU1BQX0FEX0JBQ0tMSUdIVDoKLQkJCWFkX3Byb3AgPSBBRF9CQUNLTElHSFQ7Ci0JCQlicmVh azsKLQkJZGVmYXVsdDoKLQkJCS8qIE5vdCBhbiBBRCBwcm9wZXJ0eSAqLwotCQkJcmV0dXJuIDA7 Ci0JCX0KLQkJaWYgKCFjcnRjLT5taXhlcnNbaV0uaHdfZHNwcC0+b3BzLnZhbGlkYXRlX2FkKQot CQkJcmV0ID0gLUVJTlZBTDsKLQkJZWxzZQotCQkJcmV0ID0gY3J0Yy0+bWl4ZXJzW2ldLmh3X2Rz cHAtPm9wcy52YWxpZGF0ZV9hZCgKLQkJCQljcnRjLT5taXhlcnNbaV0uaHdfZHNwcCwgJmFkX3By b3ApOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBkcHVfY3BfYWRfaW50ZXJy dXB0X2NiKHZvaWQgKmFyZywgaW50IGlycV9pZHgpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpjcnRj ID0gYXJnOwotCi0JZHB1X2NydGNfZXZlbnRfcXVldWUoJmNydGMtPmJhc2UsIGRwdV9jcF9ub3Rp ZnlfYWRfZXZlbnQsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfY3Bfbm90aWZ5X2FkX2V2 ZW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0Y19kcm0sIHZvaWQgKmFyZykKLXsKLQl1aW50MzJfdCBi bCA9IDA7Ci0Jc3RydWN0IGRwdV9od19taXhlciAqaHdfbG0gPSBOVUxMOwotCXN0cnVjdCBkcHVf aHdfZHNwcCAqaHdfZHNwcCA9IE5VTEw7Ci0JdTMyIG51bV9taXhlcnM7Ci0Jc3RydWN0IGRwdV9j cnRjICpjcnRjOwotCXN0cnVjdCBkcm1fZXZlbnQgZXZlbnQ7Ci0JaW50IGk7Ci0KLQljcnRjID0g dG9fZHB1X2NydGMoY3J0Y19kcm0pOwotCW51bV9taXhlcnMgPSBjcnRjLT5udW1fbWl4ZXJzOwot CWlmICghbnVtX21peGVycykKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV9taXhl cnM7IGkrKykgewotCQlod19sbSA9IGNydGMtPm1peGVyc1tpXS5od19sbTsKLQkJaHdfZHNwcCA9 IGNydGMtPm1peGVyc1tpXS5od19kc3BwOwotCQlpZiAoIWh3X2xtLT5jZmcucmlnaHRfbWl4ZXIp Ci0JCQlicmVhazsKLQl9Ci0KLQlpZiAoIWh3X2RzcHApCi0JCXJldHVybjsKLQotCWh3X2RzcHAt Pm9wcy5hZF9yZWFkX2ludHJfcmVzcChod19kc3BwLCBBRDRfQkFDS0xJR0hULCAmYmwpOwotCWV2 ZW50Lmxlbmd0aCA9IHNpemVvZih1MzIpOwotCWV2ZW50LnR5cGUgPSBEUk1fRVZFTlRfQURfQkFD S0xJR0hUOwotCW1zbV9tb2RlX29iamVjdF9ldmVudF9ub3RpZnkoJmNydGNfZHJtLT5iYXNlLCBj cnRjX2RybS0+ZGV2LAotCQkJJmV2ZW50LCAodTggKikmYmwpOwotfQotCi1pbnQgZHB1X2NwX2Fk X2ludGVycnVwdChzdHJ1Y3QgZHJtX2NydGMgKmNydGNfZHJtLCBib29sIGVuLAotCXN0cnVjdCBk cHVfaXJxX2NhbGxiYWNrICphZF9pcnEpCi17Ci0Jc3RydWN0IGRwdV9rbXMgKmttcyA9IE5VTEw7 Ci0JdTMyIG51bV9taXhlcnM7Ci0Jc3RydWN0IGRwdV9od19taXhlciAqaHdfbG07Ci0Jc3RydWN0 IGRwdV9od19kc3BwICpod19kc3BwID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X2NydGMgKmNydGM7Ci0J aW50IGk7Ci0JaW50IGlycV9pZHgsIHJldDsKLQlzdHJ1Y3QgZHB1X2NwX25vZGUgcHJvcF9ub2Rl OwotCi0JaWYgKCFjcnRjX2RybSB8fCAhYWRfaXJxKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBj cnRjICVwSyBpcnEgJXBLXG4iLCBjcnRjX2RybSwgYWRfaXJxKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JY3J0YyA9IHRvX2RwdV9jcnRjKGNydGNfZHJtKTsKLQlpZiAoIWNydGMpIHsKLQkJ RFJNX0VSUk9SKCJpbnZhbGlkIGRwdV9jcnRjICVwS1xuIiwgY3J0Yyk7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCWttcyA9IGdldF9rbXMoY3J0Y19kcm0pOwotCW51bV9taXhlcnMgPSBjcnRj LT5udW1fbWl4ZXJzOwotCi0JbWVtc2V0KCZwcm9wX25vZGUsIDAsIHNpemVvZihwcm9wX25vZGUp KTsKLQlwcm9wX25vZGUuZmVhdHVyZSA9IERQVV9DUF9DUlRDX0RTUFBfQURfQkFDS0xJR0hUOwot CXJldCA9IGRwdV9jcF9hZF92YWxpZGF0ZV9wcm9wKCZwcm9wX25vZGUsIGNydGMpOwotCWlmIChy ZXQpIHsKLQkJRFJNX0VSUk9SKCJBZCBub3Qgc3VwcG9ydGVkIHJldCAlZFxuIiwgcmV0KTsKLQkJ Z290byBleGl0OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBudW1fbWl4ZXJzOyBpKyspIHsKLQkJ aHdfbG0gPSBjcnRjLT5taXhlcnNbaV0uaHdfbG07Ci0JCWh3X2RzcHAgPSBjcnRjLT5taXhlcnNb aV0uaHdfZHNwcDsKLQkJaWYgKCFod19sbS0+Y2ZnLnJpZ2h0X21peGVyKQotCQkJYnJlYWs7Ci0J fQotCi0JaWYgKCFod19kc3BwKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBkc3BwXG4iKTsKLQkJ cmV0ID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQotCWlycV9pZHggPSBkcHVfY29yZV9p cnFfaWR4X2xvb2t1cChrbXMsIERQVV9JUlFfVFlQRV9BRDRfQkxfRE9ORSwKLQkJCWh3X2RzcHAt PmlkeCk7Ci0JaWYgKGlycV9pZHggPCAwKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCB0 aGUgaXJxIGlkeCByZXQgJWRcbiIsIGlycV9pZHgpOwotCQlyZXQgPSBpcnFfaWR4OwotCQlnb3Rv IGV4aXQ7Ci0JfQotCi0JaWYgKCFlbikgewotCQlkcHVfY29yZV9pcnFfZGlzYWJsZShrbXMsICZp cnFfaWR4LCAxKTsKLQkJZHB1X2NvcmVfaXJxX3VucmVnaXN0ZXJfY2FsbGJhY2soa21zLCBpcnFf aWR4LCBhZF9pcnEpOwotCQlyZXQgPSAwOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JYWRfaXJxLT5h cmcgPSBjcnRjOwotCWFkX2lycS0+ZnVuYyA9IGRwdV9jcF9hZF9pbnRlcnJ1cHRfY2I7Ci0JcmV0 ID0gZHB1X2NvcmVfaXJxX3JlZ2lzdGVyX2NhbGxiYWNrKGttcywgaXJxX2lkeCwgYWRfaXJxKTsK LQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSBjYWxsYmFj ayByZXQgJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JcmV0ID0gZHB1X2NvcmVfaXJx X2VuYWJsZShrbXMsICZpcnFfaWR4LCAxKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiZmFp bGVkIHRvIGVuYWJsZSBpcnEgcmV0ICVkXG4iLCByZXQpOwotCQlkcHVfY29yZV9pcnFfdW5yZWdp c3Rlcl9jYWxsYmFjayhrbXMsIGlycV9pZHgsIGFkX2lycSk7Ci0JfQotZXhpdDoKLQlyZXR1cm4g cmV0OwotfQotCi1zdGF0aWMgdm9pZCBkcHVfY3BfYWRfc2V0X3Byb3Aoc3RydWN0IGRwdV9jcnRj ICpkcHVfY3J0YywKLQkJZW51bSBhZF9wcm9wZXJ0eSBhZF9wcm9wKQotewotCXN0cnVjdCBkcHVf YWRfaHdfY2ZnIGFkX2NmZzsKLQlzdHJ1Y3QgZHB1X2h3X2NwX2NmZyBod19jZmc7Ci0Jc3RydWN0 IGRwdV9od19kc3BwICpod19kc3BwID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X2h3X21peGVyICpod19s bSA9IE5VTEw7Ci0JdTMyIG51bV9taXhlcnMgPSBkcHVfY3J0Yy0+bnVtX21peGVyczsKLQlpbnQg aSA9IDAsIHJldCA9IDA7Ci0KLQlod19jZmcubnVtX29mX21peGVycyA9IGRwdV9jcnRjLT5udW1f bWl4ZXJzOwotCWh3X2NmZy5kaXNwbGF5aCA9IGRwdV9jcnRjLT5iYXNlLm1vZGUuaGRpc3BsYXk7 Ci0JaHdfY2ZnLmRpc3BsYXl2ID0gZHB1X2NydGMtPmJhc2UubW9kZS52ZGlzcGxheTsKLQotCWZv ciAoaSA9IDA7IGkgPCBudW1fbWl4ZXJzICYmICFyZXQ7IGkrKykgewotCQlod19sbSA9IGRwdV9j cnRjLT5taXhlcnNbaV0uaHdfbG07Ci0JCWh3X2RzcHAgPSBkcHVfY3J0Yy0+bWl4ZXJzW2ldLmh3 X2RzcHA7Ci0JCWlmICghaHdfbG0gfHwgIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy52YWxpZGF0 ZV9hZCB8fAotCQkJCSFod19kc3BwLT5vcHMuc2V0dXBfYWQpIHsKLQkJCXJldCA9IC1FSU5WQUw7 Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWh3X2NmZy5taXhlcl9pbmZvID0gaHdfbG07Ci0JCWFk X2NmZy5wcm9wID0gYWRfcHJvcDsKLQkJYWRfY2ZnLmh3X2NmZyA9ICZod19jZmc7Ci0JCXJldCA9 IGh3X2RzcHAtPm9wcy52YWxpZGF0ZV9hZChod19kc3BwLCAodTMyICopJmFkX3Byb3ApOwotCQlp ZiAoIXJldCkKLQkJCWh3X2RzcHAtPm9wcy5zZXR1cF9hZChod19kc3BwLCAmYWRfY2ZnKTsKLQl9 Ci19Ci0KLXZvaWQgZHB1X2NwX2NydGNfcHJlX2lwYyhzdHJ1Y3QgZHJtX2NydGMgKmRybV9jcnRj KQotewotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Ci0KLQlkcHVfY3J0YyA9IHRvX2RwdV9j cnRjKGRybV9jcnRjKTsKLQlpZiAoIWRwdV9jcnRjKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBk cHVfY3J0YyAlcEtcbiIsIGRwdV9jcnRjKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwdV9jcF9hZF9z ZXRfcHJvcChkcHVfY3J0YywgQURfSVBDX1NVU1BFTkQpOwotfQotCi12b2lkIGRwdV9jcF9jcnRj X3Bvc3RfaXBjKHN0cnVjdCBkcm1fY3J0YyAqZHJtX2NydGMpCi17Ci0Jc3RydWN0IGRwdV9jcnRj ICpkcHVfY3J0YzsKLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoZHJtX2NydGMpOwotCWlmICgh ZHB1X2NydGMpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGRwdV9jcnRjICVwS1xuIiwgZHB1X2Ny dGMpOwotCQlyZXR1cm47Ci0JfQotCi0JZHB1X2NwX2FkX3NldF9wcm9wKGRwdV9jcnRjLCBBRF9J UENfUkVTVU1FKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9jb2xvcl9wcm9jZXNzaW5nLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfY29sb3JfcHJvY2Vzc2luZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmE1 NDZjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb2xv cl9wcm9jZXNzaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyogQ29weXJp Z2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAy IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RQVV9DT0xPUl9QUk9DRVNTSU5H X0gKLSNkZWZpbmUgX0RQVV9DT0xPUl9QUk9DRVNTSU5HX0gKLSNpbmNsdWRlIDxkcm0vZHJtX2Ny dGMuaD4KLQotc3RydWN0IGRwdV9pcnFfY2FsbGJhY2s7Ci0KLS8qCi0gKiBQQSBNRU1PUlkgQ09M T1IgdHlwZXMKLSAqIEBNRU1DT0xPUl9TS0lOICAgICAgICAgIFNraW4gbWVtb3J5IGNvbG9yIHR5 cGUKLSAqIEBNRU1DT0xPUl9TS1kgICAgICAgICAgIFNreSBtZW1vcnkgY29sb3IgdHlwZQotICog QE1FTUNPTE9SX0ZPTElBR0UgICAgICAgRm9saWFnZSBtZW1vcnkgY29sb3IgdHlwZQotICovCi1l bnVtIGRwdV9tZW1jb2xvcl90eXBlIHsKLQlNRU1DT0xPUl9TS0lOID0gMCwKLQlNRU1DT0xPUl9T S1ksCi0JTUVNQ09MT1JfRk9MSUFHRQotfTsKLQotLyoqCi0gKiBkcHVfY3BfY3J0Y19pbml0KCk6 IEluaXRpYWxpemUgY29sb3IgcHJvY2Vzc2luZyBsaXN0cyBmb3IgYSBjcnRjLgotICogICAgICAg ICAgICAgICAgICAgICBTaG91bGQgYmUgY2FsbGVkIGR1cmluZyBjcnRjIGluaXRpYWxpemF0aW9u LgotICogQGNydGM6ICBQb2ludGVyIHRvIGRwdV9jcnRjLgotICovCi12b2lkIGRwdV9jcF9jcnRj X2luaXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKLQotLyoqCi0gKiBkcHVfY3BfY3J0Y19pbnN0 YWxsX3Byb3BlcnRpZXMoKTogSW5zdGFsbHMgdGhlIGNvbG9yIHByb2Nlc3NpbmcKLSAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzIGZvciBhIGNydGMuCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgY3J0YyBp bml0aWFsaXphdGlvbi4KLSAqIEBjcnRjOiAgUG9pbnRlciB0byBjcnRjLgotICovCi12b2lkIGRw dV9jcF9jcnRjX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwotCi0v KioKLSAqIGRwdV9jcF9jcnRjX2Rlc3Ryb3lfcHJvcGVydGllczogRGVzdHJveXMgY29sb3IgcHJv Y2Vzc2luZwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy b3BlcnRpZXMgZm9yIGEgY3J0Yy4KLSAqIHNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGNydGMgZGUt aW5pdGlhbGl6YXRpb24uCi0gKiBAY3J0YzogIFBvaW50ZXIgdG8gY3J0Yy4KLSAqLwotdm9pZCBk cHVfY3BfY3J0Y19kZXN0cm95X3Byb3BlcnRpZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKLQot LyoqCi0gKiBkcHVfY3BfY3J0Y19zZXRfcHJvcGVydHk6IFNldCBhIGNvbG9yIHByb2Nlc3Npbmcg cHJvcGVydHkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBj cnRjLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3VsZCBiZSBk dXJpbmcgYXRvbWljIHNldCBwcm9wZXJ0eS4KLSAqIEBjcnRjOiBQb2ludGVyIHRvIGNydGMuCi0g KiBAcHJvcGVydHk6IFByb3BlcnR5IHRoYXQgbmVlZHMgdG8gZW5hYmxlZC9kaXNhYmxlZC4KLSAq IEB2YWw6IFZhbHVlIG9mIHByb3BlcnR5LgotICovCi1pbnQgZHB1X2NwX2NydGNfc2V0X3Byb3Bl cnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9w ZXJ0eSwgdWludDY0X3QgdmFsKTsKLQotLyoqCi0gKiBkcHVfY3BfY3J0Y19hcHBseV9wcm9wZXJ0 aWVzOiBFbmFibGUvZGlzYWJsZSBwcm9wZXJ0aWVzCi0gKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3IgYSBjcnRjLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hv dWxkIGJlIGNhbGxlZCBkdXJpbmcgYXRvbWljIGNvbW1pdCBjYWxsLgotICogQGNydGM6IFBvaW50 ZXIgdG8gY3J0Yy4KLSAqLwotdm9pZCBkcHVfY3BfY3J0Y19hcHBseV9wcm9wZXJ0aWVzKHN0cnVj dCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLS8qKgotICogZHB1X2NwX2NydGNfZ2V0X3Byb3BlcnR5OiBH ZXQgdmFsdWUgb2YgY29sb3IgcHJvY2Vzc2luZyBwcm9wZXJ0eQotICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvciBhIGNydGMuCi0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU2hvdWxkIGJlIGR1cmluZyBhdG9taWMgZ2V0IHByb3BlcnR5Lgot ICogQGNydGM6IFBvaW50ZXIgdG8gY3J0Yy4KLSAqIEBwcm9wZXJ0eTogUHJvcGVydHkgdGhhdCBu ZWVkcyB0byBlbmFibGVkL2Rpc2FibGVkLgotICogQHZhbDogVmFsdWUgb2YgcHJvcGVydHkuCi0g KgotICovCi1pbnQgZHB1X2NwX2NydGNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKLQkJCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgKnZhbCk7Ci0K LS8qKgotICogZHB1X2NwX2NydGNfc3VzcGVuZDogU3VzcGVuZCB0aGUgY3J0YyBmZWF0dXJlcwot ICogQGNydGM6IFBvaW50ZXIgdG8gY3J0Yy4KLSAqLwotdm9pZCBkcHVfY3BfY3J0Y19zdXNwZW5k KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLS8qKgotICogZHB1X2NwX2NydGNfcmVzdW1lOiBS ZXN1bWUgdGhlIGNydGMgZmVhdHVyZXMKLSAqIEBjcnRjOiBQb2ludGVyIHRvIGNydGMuCi0gKi8K LXZvaWQgZHB1X2NwX2NydGNfcmVzdW1lKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLS8qKgot ICogZHB1X2NwX2FkX2ludGVycnVwdDogQXBpIHRvIGVuYWJsZS9kaXNhYmxlIGFkIGludGVycnVw dAotICogQGNydGM6IFBvaW50ZXIgdG8gY3J0Yy4KLSAqIEBlbjogVmFyaWFibGUgdG8gZW5hYmxl L2Rpc2FibGUgaW50ZXJydXB0LgotICogQGlycTogUG9pbnRlciB0byBpcnEgY2FsbGJhY2sKLSAq LwotaW50IGRwdV9jcF9hZF9pbnRlcnJ1cHQoc3RydWN0IGRybV9jcnRjICpjcnRjLCBib29sIGVu LAotCQlzdHJ1Y3QgZHB1X2lycV9jYWxsYmFjayAqaXJxKTsKLQotLyoqCi0gKiBkcHVfY3BfY3J0 Y19wcmVfaXBjOiBIYW5kbGUgY29sb3IgcHJvY2Vzc2luZyBmZWF0dXJlcwotICogICAgICAgICAg ICAgICAgICAgICAgYmVmb3JlIGVudGVyaW5nIElQQwotICogQGNydGM6IFBvaW50ZXIgdG8gY3J0 Yy4KLSAqLwotdm9pZCBkcHVfY3BfY3J0Y19wcmVfaXBjKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7 Ci0KLS8qKgotICogZHB1X2NwX2NydGNfcG9zdF9pcGM6IEhhbmRsZSBjb2xvciBwcm9jZXNzaW5n IGZlYXR1cmVzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZXhpdGluZyBJUEMKLSAq IEBjcnRjOiBQb2ludGVyIHRvIGNydGMuCi0gKi8KLXZvaWQgZHB1X2NwX2NydGNfcG9zdF9pcGMo c3RydWN0IGRybV9jcnRjICpjcnRjKTsKLSNlbmRpZiAvKl9EUFVfQ09MT1JfUFJPQ0VTU0lOR19I ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5j IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwppbmRleCA5OWM1ZTc1 Li43Y2Y1YTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf Y3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKQEAg LTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgv ZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+Ci0jaW5jbHVkZSA8dWFwaS9kcm0v ZHB1X2RybS5oPgogI2luY2x1ZGUgPGRybS9kcm1fbW9kZS5oPgogI2luY2x1ZGUgPGRybS9kcm1f Y3J0Yy5oPgogI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KQEAgLTMxLDEzICszMCwx OCBAQAogI2luY2x1ZGUgImRwdV9od19jdGwuaCIKICNpbmNsdWRlICJkcHVfY3J0Yy5oIgogI2lu Y2x1ZGUgImRwdV9wbGFuZS5oIgotI2luY2x1ZGUgImRwdV9jb2xvcl9wcm9jZXNzaW5nLmgiCiAj aW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKICNpbmNsdWRlICJkcHVfdmJpZi5oIgogI2luY2x1ZGUg ImRwdV9wb3dlcl9oYW5kbGUuaCIKICNpbmNsdWRlICJkcHVfY29yZV9wZXJmLmgiCiAjaW5jbHVk ZSAiZHB1X3RyYWNlLmgiCiAKKyNkZWZpbmUgRFBVX0RSTV9CTEVORF9PUF9OT1RfREVGSU5FRCAg ICAwCisjZGVmaW5lIERQVV9EUk1fQkxFTkRfT1BfT1BBUVVFICAgICAgICAgMQorI2RlZmluZSBE UFVfRFJNX0JMRU5EX09QX1BSRU1VTFRJUExJRUQgIDIKKyNkZWZpbmUgRFBVX0RSTV9CTEVORF9P UF9DT1ZFUkFHRSAgICAgICAzCisjZGVmaW5lIERQVV9EUk1fQkxFTkRfT1BfTUFYICAgICAgICAg ICAgNAorCiAvKiBsYXllciBtaXhlciBpbmRleCBvbiBkcHVfY3J0YyAqLwogI2RlZmluZSBMRUZU X01JWEVSIDAKICNkZWZpbmUgUklHSFRfTUlYRVIgMQpAQCAtNTk0LDcgKzU5OCw2IEBAIHN0YXRp YyB2b2lkIGRwdV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQogCWlmIChkcHVf Y3J0Yy0+YmxvYl9pbmZvKQogCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoZHB1X2NydGMtPmJsb2Jf aW5mbyk7CiAJbXNtX3Byb3BlcnR5X2Rlc3Ryb3koJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvKTsK LQlkcHVfY3BfY3J0Y19kZXN0cm95X3Byb3BlcnRpZXMoY3J0Yyk7CiAJX2RwdV9jcnRjX2Rlc3Ry b3lfZGVzdF9zY2FsZXIoZHB1X2NydGMpOwogCiAJX2RwdV9jcnRjX2RlaW5pdF9ldmVudHMoZHB1 X2NydGMpOwpAQCAtNjIyLDY3ICs2MjUsMTQgQEAgc3RhdGljIGJvb2wgZHB1X2NydGNfbW9kZV9m aXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiB9CiAKIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19z ZXR1cF9ibGVuZF9jZmcoc3RydWN0IGRwdV9jcnRjX21peGVyICptaXhlciwKLQlzdHJ1Y3QgZHB1 X3BsYW5lX3N0YXRlICpwc3RhdGUsIHN0cnVjdCBkcHVfZm9ybWF0ICpmb3JtYXQpCisJCXN0cnVj dCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZSkKIHsKLQl1aW50MzJfdCBibGVuZF9vcCwgZmdfYWxw aGEsIGJnX2FscGhhOwotCXVpbnQzMl90IGJsZW5kX3R5cGU7CiAJc3RydWN0IGRwdV9od19taXhl ciAqbG0gPSBtaXhlci0+aHdfbG07CiAKIAkvKiBkZWZhdWx0IHRvIG9wYXF1ZSBibGVuZGluZyAq LwotCWZnX2FscGhhID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsIFBMQU5FX1BST1Bf QUxQSEEpOwotCWJnX2FscGhhID0gMHhGRiAtIGZnX2FscGhhOwotCWJsZW5kX29wID0gRFBVX0JM RU5EX0ZHX0FMUEhBX0ZHX0NPTlNUIHwgRFBVX0JMRU5EX0JHX0FMUEhBX0JHX0NPTlNUOwotCWJs ZW5kX3R5cGUgPSBkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwgUExBTkVfUFJPUF9CTEVO RF9PUCk7Ci0KLQlEUFVfREVCVUcoImJsZW5kIHR5cGU6MHgleCBibGVuZCBhbHBoYToweCV4XG4i LCBibGVuZF90eXBlLCBmZ19hbHBoYSk7Ci0KLQlzd2l0Y2ggKGJsZW5kX3R5cGUpIHsKLQotCWNh c2UgRFBVX0RSTV9CTEVORF9PUF9PUEFRVUU6Ci0JCWJsZW5kX29wID0gRFBVX0JMRU5EX0ZHX0FM UEhBX0ZHX0NPTlNUIHwKLQkJCURQVV9CTEVORF9CR19BTFBIQV9CR19DT05TVDsKLQkJYnJlYWs7 Ci0KLQljYXNlIERQVV9EUk1fQkxFTkRfT1BfUFJFTVVMVElQTElFRDoKLQkJaWYgKGZvcm1hdC0+ YWxwaGFfZW5hYmxlKSB7Ci0JCQlibGVuZF9vcCA9IERQVV9CTEVORF9GR19BTFBIQV9GR19DT05T VCB8Ci0JCQkJRFBVX0JMRU5EX0JHX0FMUEhBX0ZHX1BJWEVMOwotCQkJaWYgKGZnX2FscGhhICE9 IDB4ZmYpIHsKLQkJCQliZ19hbHBoYSA9IGZnX2FscGhhOwotCQkJCWJsZW5kX29wIHw9IERQVV9C TEVORF9CR19NT0RfQUxQSEEgfAotCQkJCQlEUFVfQkxFTkRfQkdfSU5WX01PRF9BTFBIQTsKLQkJ CX0gZWxzZSB7Ci0JCQkJYmxlbmRfb3AgfD0gRFBVX0JMRU5EX0JHX0lOVl9BTFBIQTsKLQkJCX0K LQkJfQotCQlicmVhazsKLQotCWNhc2UgRFBVX0RSTV9CTEVORF9PUF9DT1ZFUkFHRToKLQkJaWYg KGZvcm1hdC0+YWxwaGFfZW5hYmxlKSB7Ci0JCQlibGVuZF9vcCA9IERQVV9CTEVORF9GR19BTFBI QV9GR19QSVhFTCB8Ci0JCQkJRFBVX0JMRU5EX0JHX0FMUEhBX0ZHX1BJWEVMOwotCQkJaWYgKGZn X2FscGhhICE9IDB4ZmYpIHsKLQkJCQliZ19hbHBoYSA9IGZnX2FscGhhOwotCQkJCWJsZW5kX29w IHw9IERQVV9CTEVORF9GR19NT0RfQUxQSEEgfAotCQkJCQlEUFVfQkxFTkRfRkdfSU5WX01PRF9B TFBIQSB8Ci0JCQkJCURQVV9CTEVORF9CR19NT0RfQUxQSEEgfAotCQkJCQlEUFVfQkxFTkRfQkdf SU5WX01PRF9BTFBIQTsKLQkJCX0gZWxzZSB7Ci0JCQkJYmxlbmRfb3AgfD0gRFBVX0JMRU5EX0JH X0lOVl9BTFBIQTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBkbyBub3Ro aW5nICovCi0JCWJyZWFrOwotCX0KLQotCWxtLT5vcHMuc2V0dXBfYmxlbmRfY29uZmlnKGxtLCBw c3RhdGUtPnN0YWdlLCBmZ19hbHBoYSwKLQkJCQkJCWJnX2FscGhhLCBibGVuZF9vcCk7Ci0JRFBV X0RFQlVHKAotCQkiZm9ybWF0OiAlNC40cywgYWxwaGFfZW5hYmxlICV1IGZnIGFscGhhOjB4JXgg YmcgYWxwaGE6MHgleCBibGVuZF9vcDoweCV4XG4iLAotCQkoY2hhciAqKSAmZm9ybWF0LT5iYXNl LnBpeGVsX2Zvcm1hdCwKLQkJZm9ybWF0LT5hbHBoYV9lbmFibGUsIGZnX2FscGhhLCBiZ19hbHBo YSwgYmxlbmRfb3ApOworCWxtLT5vcHMuc2V0dXBfYmxlbmRfY29uZmlnKGxtLCBwc3RhdGUtPnN0 YWdlLCAwWEZGLCAwLAorCQkJCURQVV9CTEVORF9GR19BTFBIQV9GR19DT05TVCB8CisJCQkJRFBV X0JMRU5EX0JHX0FMUEhBX0JHX0NPTlNUKTsKIH0KIAogc3RhdGljIHZvaWQgX2RwdV9jcnRjX3Nl dHVwX2RpbV9sYXllcl9jZmcoc3RydWN0IGRybV9jcnRjICpjcnRjLApAQCAtODU3LDggKzgwNyw4 IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cF9taXhlcihzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCiAKIAkJLyogYmxlbmQgY29uZmlnIHVwZGF0ZSAqLwogCQlmb3IgKGxtX2lkeCA9 IDA7IGxtX2lkeCA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBsbV9pZHgrKykgewotCQkJX2RwdV9j cnRjX3NldHVwX2JsZW5kX2NmZyhtaXhlciArIGxtX2lkeCwgcHN0YXRlLAotCQkJCQkJCQlmb3Jt YXQpOworCQkJX2RwdV9jcnRjX3NldHVwX2JsZW5kX2NmZyhtaXhlciArIGxtX2lkeCwgcHN0YXRl KTsKKwogCQkJbWl4ZXJbbG1faWR4XS5mbHVzaF9tYXNrIHw9IGZsdXNoX21hc2s7CiAKIAkJCWlm IChiZ19hbHBoYV9lbmFibGUgJiYgIWZvcm1hdC0+YWxwaGFfZW5hYmxlKQpAQCAtMTgxOSwxMSAr MTc2OSwxMCBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2VuY29kZXIo CiAJc3RydWN0IGRwdV9jcnRjX21peGVyICptaXhlcjsKIAlzdHJ1Y3QgZHB1X2h3X2N0bCAqbGFz dF92YWxpZF9jdGwgPSBOVUxMOwogCWludCBpOwotCXN0cnVjdCBkcHVfcm1faHdfaXRlciBsbV9p dGVyLCBjdGxfaXRlciwgZHNwcF9pdGVyLCBkc19pdGVyOworCXN0cnVjdCBkcHVfcm1faHdfaXRl ciBsbV9pdGVyLCBjdGxfaXRlciwgZHNfaXRlcjsKIAogCWRwdV9ybV9pbml0X2h3X2l0ZXIoJmxt X2l0ZXIsIGVuYy0+YmFzZS5pZCwgRFBVX0hXX0JMS19MTSk7CiAJZHB1X3JtX2luaXRfaHdfaXRl cigmY3RsX2l0ZXIsIGVuYy0+YmFzZS5pZCwgRFBVX0hXX0JMS19DVEwpOwotCWRwdV9ybV9pbml0 X2h3X2l0ZXIoJmRzcHBfaXRlciwgZW5jLT5iYXNlLmlkLCBEUFVfSFdfQkxLX0RTUFApOwogCWRw dV9ybV9pbml0X2h3X2l0ZXIoJmRzX2l0ZXIsIGVuYy0+YmFzZS5pZCwgRFBVX0hXX0JMS19EUyk7 CiAKIAkvKiBTZXQgdXAgYWxsIHRoZSBtaXhlcnMgYW5kIGN0bHMgcmVzZXJ2ZWQgYnkgdGhpcyBl bmNvZGVyICovCkBAIC0xODUxLDEwICsxODAwLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX3Nl dHVwX21peGVyX2Zvcl9lbmNvZGVyKAogCQkJcmV0dXJuOwogCQl9CiAKLQkJLyogRHNwcCBtYXkg YmUgbnVsbCAqLwotCQkodm9pZCkgZHB1X3JtX2dldF9odyhybSwgJmRzcHBfaXRlcik7Ci0JCW1p eGVyLT5od19kc3BwID0gKHN0cnVjdCBkcHVfaHdfZHNwcCAqKWRzcHBfaXRlci5odzsKLQogCQkv KiBEUyBtYXkgYmUgbnVsbCAqLwogCQkodm9pZCkgZHB1X3JtX2dldF9odyhybSwgJmRzX2l0ZXIp OwogCQltaXhlci0+aHdfZHMgPSAoc3RydWN0IGRwdV9od19kcyAqKWRzX2l0ZXIuaHc7CkBAIC0x OTg3LDE3ICsxOTMyLDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfYXRvbWljX2JlZ2luKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKIAlfZHB1X2NydGNfZGVzdF9zY2FsZXJfc2V0dXAoY3J0Yyk7CiAK IAkvKgotCSAqIFNpbmNlIENQIHByb3BlcnRpZXMgdXNlIEFYSSBidWZmZXIgdG8gcHJvZ3JhbSB0 aGUKLQkgKiBIVywgY2hlY2sgaWYgY29udGV4dCBiYW5rIGlzIGluIGF0dGFjaGVkCi0JICogc3Rh dGUsCi0JICogYXBwbHkgY29sb3IgcHJvY2Vzc2luZyBwcm9wZXJ0aWVzIG9ubHkgaWYKLQkgKiBz bW11IHN0YXRlIGlzIGF0dGFjaGVkLAotCSAqLwotCWlmICgoc21tdV9zdGF0ZS0+c3RhdGUgIT0g REVUQUNIRUQpICYmCi0JCQkoc21tdV9zdGF0ZS0+c3RhdGUgIT0gREVUQUNIX0FMTF9SRVEpKQot CQlkcHVfY3BfY3J0Y19hcHBseV9wcm9wZXJ0aWVzKGNydGMpOwotCi0JLyoKIAkgKiBQUF9ET05F IGlycSBpcyBvbmx5IHVzZWQgYnkgY29tbWFuZCBtb2RlIGZvciBub3cuCiAJICogSXQgaXMgYmV0 dGVyIHRvIHJlcXVlc3QgcGVuZGluZyBiZWZvcmUgRkxVU0ggYW5kIFNUQVJUIHRyaWdnZXIKIAkg KiB0byBtYWtlIHN1cmUgbm8gcHBfZG9uZSBpcnEgbWlzc2VkLgpAQCAtMjQyOSw3ICsyMzYzLDYg QEAgc3RhdGljIHZvaWQgZHB1X2NydGNfaGFuZGxlX3Bvd2VyX2V2ZW50KHUzMiBldmVudF90eXBl LCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjID0gYXJnOwogCXN0cnVjdCBk cHVfY3J0YyAqZHB1X2NydGM7Ci0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CiAJc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyOwogCXN0cnVjdCBkcHVfY3J0Y19taXhlciAqbTsKIAl1MzIgaSwg bWlzcl9zdGF0dXM7CkBAIC0yNDU0LDggKzIzODcsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19o YW5kbGVfcG93ZXJfZXZlbnQodTMyIGV2ZW50X3R5cGUsIHZvaWQgKmFyZykKIAkJCWRwdV9lbmNv ZGVyX3ZpcnRfcmVzdG9yZShlbmNvZGVyKTsKIAkJfQogCi0JCWRwdV9jcF9jcnRjX3Bvc3RfaXBj KGNydGMpOwotCiAJCWZvciAoaSA9IDA7IGkgPCBkcHVfY3J0Yy0+bnVtX21peGVyczsgKytpKSB7 CiAJCQltID0gJmRwdV9jcnRjLT5taXhlcnNbaV07CiAJCQlpZiAoIW0tPmh3X2xtIHx8ICFtLT5o d19sbS0+b3BzLnNldHVwX21pc3IgfHwKQEAgLTI0NzcsMTggKzI0MDgsMTIgQEAgc3RhdGljIHZv aWQgZHB1X2NydGNfaGFuZGxlX3Bvd2VyX2V2ZW50KHUzMiBldmVudF90eXBlLCB2b2lkICphcmcp CiAJCQlkcHVfY3J0Yy0+bWlzcl9kYXRhW2ldID0gbWlzcl9zdGF0dXMgPyBtaXNyX3N0YXR1cyA6 CiAJCQkJCQkJZHB1X2NydGMtPm1pc3JfZGF0YVtpXTsKIAkJfQotCi0JCWRwdV9jcF9jcnRjX3By ZV9pcGMoY3J0Yyk7CiAJCWJyZWFrOwogCWNhc2UgRFBVX1BPV0VSX0VWRU5UX1BPU1RfRElTQUJM RToKLQkJLyoKLQkJICogc2V0IHJldmFsaWRhdGUgZmxhZyBpbiBwbGFuZXMsIHNvIGl0IHdpbGwg YmUgcmUtcHJvZ3JhbW1lZAotCQkgKiBpbiB0aGUgbmV4dCBmcmFtZSB1cGRhdGUKKwkJLyoqCisJ CSAqIE5vdGhpbmcgdG8gZG8uIEFsbCB0aGUgcGxhbmVzIG9uIHRoZSBDUlRDIHdpbGwgYmUKKwkJ ICogcHJvZ3JhbW1lZCBmb3IgZXZlcnkgZnJhbWUKIAkJICovCi0JCWRybV9hdG9taWNfY3J0Y19m b3JfZWFjaF9wbGFuZShwbGFuZSwgY3J0YykKLQkJCWRwdV9wbGFuZV9zZXRfcmV2YWxpZGF0ZShw bGFuZSwgdHJ1ZSk7Ci0KLQkJZHB1X2NwX2NydGNfc3VzcGVuZChjcnRjKTsKIAkJYnJlYWs7CiAJ ZGVmYXVsdDoKIAkJRFBVX0RFQlVHKCJldmVudDolZCBub3QgaGFuZGxlZFxuIiwgZXZlbnRfdHlw ZSk7CkBAIC0yNTM1LDcgKzI0NjAsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19kaXNhYmxlKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkvKiB1cGRhdGUgY29sb3IgcHJvY2Vzc2luZyBvbiBzdXNw ZW5kICovCiAJZXZlbnQudHlwZSA9IERSTV9FVkVOVF9DUlRDX1BPV0VSOwogCWV2ZW50Lmxlbmd0 aCA9IHNpemVvZih1MzIpOwotCWRwdV9jcF9jcnRjX3N1c3BlbmQoY3J0Yyk7CiAJcG93ZXJfb24g PSAwOwogCW1zbV9tb2RlX29iamVjdF9ldmVudF9ub3RpZnkoJmNydGMtPmJhc2UsIGNydGMtPmRl diwgJmV2ZW50LAogCQkJKHU4ICopJnBvd2VyX29uKTsKQEAgLTI2MzYsNyArMjU2MCw2IEBAIHN0 YXRpYyB2b2lkIGRwdV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJLyogdXBk YXRlIGNvbG9yIHByb2Nlc3Npbmcgb24gcmVzdW1lICovCiAJZXZlbnQudHlwZSA9IERSTV9FVkVO VF9DUlRDX1BPV0VSOwogCWV2ZW50Lmxlbmd0aCA9IHNpemVvZih1MzIpOwotCWRwdV9jcF9jcnRj X3Jlc3VtZShjcnRjKTsKIAlwb3dlcl9vbiA9IDE7CiAJbXNtX21vZGVfb2JqZWN0X2V2ZW50X25v dGlmeSgmY3J0Yy0+YmFzZSwgY3J0Yy0+ZGV2LCAmZXZlbnQsCiAJCQkodTggKikmcG93ZXJfb24p OwpAQCAtMjY3OCw4MiArMjYwMSw2IEBAIHN0YXRpYyBpbnQgcHN0YXRlX2NtcChjb25zdCB2b2lk ICphLCBjb25zdCB2b2lkICpiKQogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBfZHB1X2Ny dGNfZXhjbF9yZWN0X292ZXJsYXBfY2hlY2soc3RydWN0IHBsYW5lX3N0YXRlIHBzdGF0ZXNbXSwK LQlpbnQgY250LCBpbnQgY3Vycl9jbnQsIHN0cnVjdCBkcHVfcmVjdCAqZXhjbF9yZWN0LCBpbnQg el9wb3MpCi17Ci0Jc3RydWN0IGRwdV9yZWN0IGRzdF9yZWN0LCBpbnRlcnNlY3Q7Ci0JaW50IGks IHJjID0gLUVJTlZBTDsKLQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGU7Ci0K LQkvKiBzdGFydCBjaGVja2luZyBmcm9tIG5leHQgcGxhbmUgKi8KLQlmb3IgKGkgPSBjdXJyX2Nu dDsgaSA8IGNudDsgaSsrKSB7Ci0JCXBzdGF0ZSA9IHBzdGF0ZXNbaV0uZHJtX3BzdGF0ZTsKLQkJ UE9QVUxBVEVfUkVDVCgmZHN0X3JlY3QsIHBzdGF0ZS0+Y3J0Y194LCBwc3RhdGUtPmNydGNfeSwK LQkJCQlwc3RhdGUtPmNydGNfdywgcHN0YXRlLT5jcnRjX2gsIGZhbHNlKTsKLQkJZHB1X2ttc19y ZWN0X2ludGVyc2VjdCgmZHN0X3JlY3QsIGV4Y2xfcmVjdCwgJmludGVyc2VjdCk7Ci0KLQkJaWYg KGludGVyc2VjdC53ID09IGV4Y2xfcmVjdC0+dyAmJiBpbnRlcnNlY3QuaCA9PSBleGNsX3JlY3Qt PmgKLQkJCQkvKiBuZXh0IHBsYW5lIG1heSBiZSBvbiBzYW1lIHotb3JkZXIgKi8KLQkJCQkmJiB6 X3BvcyAhPSBwc3RhdGVzW2ldLnN0YWdlKSB7Ci0JCQlyYyA9IDA7Ci0JCQlnb3RvIGVuZDsKLQkJ fQotCX0KLQotCURQVV9FUlJPUigiZXhjbCByZWN0IGRvZXMgbm90IGZpbmQgdG9wIG92ZXJsYXBw aW5nIHJlY3RcbiIpOwotZW5kOgotCXJldHVybiByYzsKLX0KLQotLyogbm8gaW5wdXQgdmFsaWRh dGlvbiAtIGNhbGxlciBBUEkgaGFzIGFsbCB0aGUgY2hlY2tzICovCi1zdGF0aWMgaW50IF9kcHVf Y3J0Y19leGNsX2RpbV9sYXllcl9jaGVjayhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLAot CQlzdHJ1Y3QgcGxhbmVfc3RhdGUgcHN0YXRlc1tdLCBpbnQgY250KQotewotCXN0cnVjdCBkcHVf Y3J0Y19zdGF0ZSAqY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwotCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlID0gJnN0YXRlLT5hZGp1c3RlZF9tb2RlOwotCWNvbnN0IHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpk cHVfcHN0YXRlOwotCWludCByYyA9IDAsIGk7Ci0KLQkvKiBDaGVjayBkaW0gbGF5ZXIgcmVjdCBi b3VuZHMgYW5kIHN0YWdlICovCi0JZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX2RpbV9sYXll cnM7IGkrKykgewotCQlpZiAoKENIRUNLX0xBWUVSX0JPVU5EUyhjc3RhdGUtPmRpbV9sYXllcltp XS5yZWN0LnksCi0JCQljc3RhdGUtPmRpbV9sYXllcltpXS5yZWN0LmgsIG1vZGUtPnZkaXNwbGF5 KSkgfHwKLQkJICAgIChDSEVDS19MQVlFUl9CT1VORFMoY3N0YXRlLT5kaW1fbGF5ZXJbaV0ucmVj dC54LAotCQkJY3N0YXRlLT5kaW1fbGF5ZXJbaV0ucmVjdC53LCBtb2RlLT5oZGlzcGxheSkpIHx8 Ci0JCSAgICAoY3N0YXRlLT5kaW1fbGF5ZXJbaV0uc3RhZ2UgPj0gRFBVX1NUQUdFX01BWCkgfHwK LQkJICAgICghY3N0YXRlLT5kaW1fbGF5ZXJbaV0ucmVjdC53KSB8fAotCQkgICAgKCFjc3RhdGUt PmRpbV9sYXllcltpXS5yZWN0LmgpKSB7Ci0JCQlEUFVfRVJST1IoImludmFsaWQgZGltX2xheWVy OnslZCwlZCwlZCwlZH0sIHN0YWdlOiVkXG4iLAotCQkJCQljc3RhdGUtPmRpbV9sYXllcltpXS5y ZWN0LngsCi0JCQkJCWNzdGF0ZS0+ZGltX2xheWVyW2ldLnJlY3QueSwKLQkJCQkJY3N0YXRlLT5k aW1fbGF5ZXJbaV0ucmVjdC53LAotCQkJCQljc3RhdGUtPmRpbV9sYXllcltpXS5yZWN0LmgsCi0J CQkJCWNzdGF0ZS0+ZGltX2xheWVyW2ldLnN0YWdlKTsKLQkJCURQVV9FUlJPUigiZGlzcGxheTog JWR4JWRcbiIsIG1vZGUtPmhkaXNwbGF5LAotCQkJCQltb2RlLT52ZGlzcGxheSk7Ci0JCQlyYyA9 IC1FMkJJRzsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JfQotCi0JLyogdGhpcyBpcyB0cmF2ZXJzaW5n IG9uIHNvcnRlZCB6LW9yZGVyIHBzdGF0ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKysp IHsKLQkJcHN0YXRlID0gcHN0YXRlc1tpXS5kcm1fcHN0YXRlOwotCQlkcHVfcHN0YXRlID0gdG9f ZHB1X3BsYW5lX3N0YXRlKHBzdGF0ZSk7Ci0JCWlmIChkcHVfcHN0YXRlLT5leGNsX3JlY3QudyAm JiBkcHVfcHN0YXRlLT5leGNsX3JlY3QuaCkgewotCQkJLyogY2hlY2sgb3ZlcmxhcCBvbiBhbGwg dG9wIHotb3JkZXIgKi8KLQkJCXJjID0gX2RwdV9jcnRjX2V4Y2xfcmVjdF9vdmVybGFwX2NoZWNr KHBzdGF0ZXMsIGNudCwKLQkJCSAgICAgaSArIDEsICZkcHVfcHN0YXRlLT5leGNsX3JlY3QsIHBz dGF0ZXNbaV0uc3RhZ2UpOwotCQkJaWYgKHJjKQotCQkJCWdvdG8gZW5kOwotCQl9Ci0JfQotCi1l bmQ6Ci0JcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgaW50IGRwdV9jcnRjX2F0b21pY19jaGVjayhz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCiB7 CkBAIC0yODc5LDEwICsyNzI2LDYgQEAgc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfY2hlY2so c3RydWN0IGRybV9jcnRjICpjcnRjLAogCS8qIGFzc2lnbiBtaXhlciBzdGFnZXMgYmFzZWQgb24g c29ydGVkIHpwb3MgcHJvcGVydHkgKi8KIAlzb3J0KHBzdGF0ZXMsIGNudCwgc2l6ZW9mKHBzdGF0 ZXNbMF0pLCBwc3RhdGVfY21wLCBOVUxMKTsKIAotCXJjID0gX2RwdV9jcnRjX2V4Y2xfZGltX2xh eWVyX2NoZWNrKHN0YXRlLCBwc3RhdGVzLCBjbnQpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0K IAlpZiAoIWRwdV9pc19jdXN0b21fY2xpZW50KCkpIHsKIAkJaW50IHN0YWdlX29sZCA9IHBzdGF0 ZXNbMF0uc3RhZ2U7CiAKQEAgLTMzMDIsMTEgKzMxNDUsOCBAQCBzdGF0aWMgaW50IGRwdV9jcnRj X2F0b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCWJyZWFrOwog CQkJfQogCQl9IGVsc2UgewotCQkJcmV0ID0gZHB1X2NwX2NydGNfc2V0X3Byb3BlcnR5KGNydGMs Ci0JCQkJCXByb3BlcnR5LCB2YWwpOwotCQl9Ci0JCWlmIChyZXQpCiAJCQlEUk1fRVJST1IoImZh aWxlZCB0byBzZXQgdGhlIHByb3BlcnR5XG4iKTsKKwkJfQogCiAJCURQVV9ERUJVRygiY3J0YyVk ICVzWyVkXSA8PSAweCVsbHggcmV0PSVkXG4iLCBjcnRjLT5iYXNlLmlkLAogCQkJCXByb3BlcnR5 LT5uYW1lLCBwcm9wZXJ0eS0+YmFzZS5pZCwgdmFsLCByZXQpOwpAQCAtMzM3MSw5ICszMjExLDYg QEAgc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKIAkJCQkmY3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwKIAkJCQlwcm9wZXJ0eSwgdmFs KTsKIAkJaWYgKHJldCkKLQkJCXJldCA9IGRwdV9jcF9jcnRjX2dldF9wcm9wZXJ0eShjcnRjLAot CQkJCXByb3BlcnR5LCB2YWwpOwotCQlpZiAocmV0KQogCQkJRFJNX0VSUk9SKCJnZXQgcHJvcGVy dHkgZmFpbGVkXG4iKTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTM0ODgsMTAgKzMzMjUsNiBAQCBz dGF0aWMgaW50IF9kcHVfZGVidWdmc19zdGF0dXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZv aWQgKmRhdGEpCiAJCXNlcV9wcmludGYocywgIlx0bXVsdGlyZWN0OiBtb2RlOiAlZCBpbmRleDog JWRcbiIsCiAJCQlwc3RhdGUtPm11bHRpcmVjdF9tb2RlLCBwc3RhdGUtPm11bHRpcmVjdF9pbmRl eCk7CiAKLQkJc2VxX3ByaW50ZihzLCAiXHRleGNsX3JlY3Q6IHg6JTRkIHk6JTRkIHc6JTRkIGg6 JTRkXG4iLAotCQkJcHN0YXRlLT5leGNsX3JlY3QueCwgcHN0YXRlLT5leGNsX3JlY3QueSwKLQkJ CXBzdGF0ZS0+ZXhjbF9yZWN0LncsIHBzdGF0ZS0+ZXhjbF9yZWN0LmgpOwotCiAJCXNlcV9wdXRz KHMsICJcbiIpOwogCX0KIAlpZiAoZHB1X2NydGMtPnZibGFua19jYl9jb3VudCkgewpAQCAtMzkz NSwxMCArMzc2OCw2IEBAIHN0cnVjdCBkcm1fY3J0YyAqZHB1X2NydGNfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAkvKiBJbml0IGRlc3Qgc2Nh bGVyICovCiAJX2RwdV9jcnRjX2Rlc3Rfc2NhbGVyX2luaXQoZHB1X2NydGMsIGttcy0+Y2F0YWxv Zyk7CiAKLQkvKiBJbnN0YWxsIGNvbG9yIHByb2Nlc3NpbmcgcHJvcGVydGllcyAqLwotCWRwdV9j cF9jcnRjX2luaXQoY3J0Yyk7Ci0JZHB1X2NwX2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzKGNydGMp OwotCiAJZHB1X2NydGMtPnBoYW5kbGUgPSAma21zLT5waGFuZGxlOwogCiAJRFBVX0RFQlVHKCIl czogc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGNydGNcbiIsIGRwdV9jcnRjLT5uYW1lKTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCmluZGV4IDY3OGJmMTIuLjc2M2Rk MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaApAQCAtMjAsNiAr MjAsNyBAQAogI2RlZmluZSBfRFBVX0NSVENfSF8KIAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQu aD4KKyNpbmNsdWRlIDx1YXBpL2RybS9kcHVfZHJtLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRj Lmg+CiAjaW5jbHVkZSAibXNtX3Byb3AuaCIKICNpbmNsdWRlICJkcHVfa21zLmgiCkBAIC04Niw3 ICs4Nyw2IEBAIHN0cnVjdCBkcHVfY3J0Y19zbW11X3N0YXRlX2RhdGEgewogICogc3RydWN0IGRw dV9jcnRjX21peGVyOiBzdG9yZXMgdGhlIG1hcCBmb3IgZWFjaCB2aXJ0dWFsIHBpcGVsaW5lIGlu IHRoZSBDUlRDCiAgKiBAaHdfbG06CUxNIEhXIERyaXZlciBjb250ZXh0CiAgKiBAaHdfY3RsOglD VEwgUGF0aCBIVyBkcml2ZXIgY29udGV4dAotICogQGh3X2RzcHA6CURTUFAgSFcgZHJpdmVyIGNv bnRleHQKICAqIEBod19kczoJRFMgSFcgZHJpdmVyIGNvbnRleHQKICAqIEBlbmNvZGVyOglFbmNv ZGVyIGF0dGFjaGVkIHRvIHRoaXMgbG0gJiBjdGwKICAqIEBtaXhlcl9vcF9tb2RlOgltaXhlciBi bGVuZGluZyBvcGVyYXRpb24gbW9kZQpAQCAtOTUsNyArOTUsNiBAQCBzdHJ1Y3QgZHB1X2NydGNf c21tdV9zdGF0ZV9kYXRhIHsKIHN0cnVjdCBkcHVfY3J0Y19taXhlciB7CiAJc3RydWN0IGRwdV9o d19taXhlciAqaHdfbG07CiAJc3RydWN0IGRwdV9od19jdGwgKmh3X2N0bDsKLQlzdHJ1Y3QgZHB1 X2h3X2RzcHAgKmh3X2RzcHA7CiAJc3RydWN0IGRwdV9od19kcyAqaHdfZHM7CiAJc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyOwogCXUzMiBtaXhlcl9vcF9tb2RlOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKaW5kZXggODIzZTlkMi4uNzEzNTQwZSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCkBAIC0xNzM4LDgg KzE3MzgsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfa2lja29mZl9waHlzKHN0cnVjdCBk cHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jKQogCiAJCWlmIChwaHlzLT5zcGxpdF9yb2xlICE9IEVO Q19ST0xFX1NMQVZFKQogCQkJc2V0X2JpdChpLCBkcHVfZW5jLT5mcmFtZV9idXN5X21hc2spOwot CQlpZiAocGh5cy0+aHdfY3RsLT5vcHMucmVnX2RtYV9mbHVzaCkKLQkJCXBoeXMtPmh3X2N0bC0+ b3BzLnJlZ19kbWFfZmx1c2gocGh5cy0+aHdfY3RsKTsKIAkJaWYgKCFwaHlzLT5vcHMubmVlZHNf c2luZ2xlX2ZsdXNoIHx8CiAJCQkJIXBoeXMtPm9wcy5uZWVkc19zaW5nbGVfZmx1c2gocGh5cykp CiAJCQlfZHB1X2VuY29kZXJfdHJpZ2dlcl9mbHVzaCgmZHB1X2VuYy0+YmFzZSwgcGh5cywgMHgw KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19hZDQu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19hZDQuYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4MWM5YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfYWQ0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQzICsw LDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0g KiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaW5jbHVkZSA8ZHJtL21zbV9k cm1fcHAuaD4KLSNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgotI2luY2x1ZGUgImRwdV9od191 dGlsLmgiCi0jaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdfbG0uaCIK LSNpbmNsdWRlICJkcHVfYWQ0LmgiCi0KLSNkZWZpbmUgQURfU1RBVEVfUkVBRFkoeCkgKCh4KSA9 PSAoYWQ0X2luaXQgfCBhZDRfY2ZnIHwgYWQ0X21vZGUgfCBhZDRfaW5wdXQpKQotI2RlZmluZSBN RVJHRV9XSURUSF9SSUdIVCA2Ci0jZGVmaW5lIE1FUkdFX1dJRFRIX0xFRlQgNQotI2RlZmluZSBB RF9JUENfRlJBTUVfQ09VTlQgMgotCi1lbnVtIGFkNF9vcHNfYml0bWFzayB7Ci0JYWQ0X2luaXQg PSBCSVQoQURfSU5JVCksCi0JYWQ0X2NmZyA9IEJJVChBRF9DRkcpLAotCWFkNF9tb2RlID0gQklU KEFEX01PREUpLAotCWFkNF9pbnB1dCA9IEJJVChBRF9JTlBVVCksCi0JYWQ0X29wc19tYXggPSBC SVQoMzEpLAotfTsKLQotZW51bSBhZDRfc3RhdGUgewotCWFkNF9zdGF0ZV9pZGxlLAotCWFkNF9z dGF0ZV9zdGFydHVwLAotCWFkNF9zdGF0ZV9ydW4sCi0JLyogaWRsZSBwb3dlciBjb2xsYXBzZSBz dXNwZW5kIHN0YXRlICovCi0JYWQ0X3N0YXRlX2lwY3MsCi0JLyogaWRsZSBwb3dlciBjb2xsYXBz ZSByZXN1bWUgc3RhdGUgKi8KLQlhZDRfc3RhdGVfaXBjciwKLQlhZDRfc3RhdGVfbWF4LAotfTsK LQotdHlwZWRlZiBpbnQgKCphZDRfcHJvcF9zZXR1cCkoc3RydWN0IGRwdV9od19kc3BwICpkc3Bw LAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqYWQpOwotCi1zdGF0aWMgaW50IGFkNF9wYXJhbXNf Y2hlY2soc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAq Y2ZnKTsKLQotc3RhdGljIGludCBhZDRfbm9fb3Bfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpk c3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X3NldHVwX2Rl YnVnKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwgc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7 Ci1zdGF0aWMgaW50IGFkNF9tb2RlX3NldHVwKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwgZW51 bSBhZDRfbW9kZXMgbW9kZSk7Ci1zdGF0aWMgaW50IGFkNF9tb2RlX3NldHVwX2NvbW1vbihzdHJ1 Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwotc3Rh dGljIGludCBhZDRfaW5pdF9zZXR1cChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHN0cnVjdCBk cHVfYWRfaHdfY2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRfaW5pdF9zZXR1cF9pZGxlKHN0cnVj dCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7Ci1zdGF0 aWMgaW50IGFkNF9pbml0X3NldHVwX3J1bihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0 cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRfaW5pdF9zZXR1cF9pcGNy KHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7 Ci1zdGF0aWMgaW50IGFkNF9jZmdfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLCBzdHJ1 Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2NmZ19zZXR1cF9pZGxlKHN0 cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7Ci1z dGF0aWMgaW50IGFkNF9jZmdfc2V0dXBfcnVuKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJ c3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9jZmdfc2V0dXBfaXBj cihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcp Owotc3RhdGljIGludCBhZDRfaW5wdXRfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAot CQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2lucHV0X3NldHVw X2lkbGUoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAq Y2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2lucHV0X3NldHVwX2lwY3Ioc3RydWN0IGRwdV9od19kc3Bw ICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X3N1 c3BlbmRfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3 X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2Fzc2VydGl2ZV9zZXR1cChzdHJ1Y3QgZHB1X2h3 X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwotc3RhdGljIGludCBh ZDRfYXNzZXJ0aXZlX3NldHVwX2lwY3Ioc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1 Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2JhY2tsaWdodF9zZXR1cChz dHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwot c3RhdGljIGludCBhZDRfYmFja2xpZ2h0X3NldHVwX2lwY3Ioc3RydWN0IGRwdV9od19kc3BwICpk c3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLQotc3RhdGljIGludCBhZDRfaXBj X3N1c3BlbmRfc2V0dXBfcnVuKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRw dV9hZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9pcGNfc3VzcGVuZF9zZXR1cF9pcGNy KHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7 Ci1zdGF0aWMgaW50IGFkNF9pcGNfcmVzdW1lX3NldHVwX2lwY3Moc3RydWN0IGRwdV9od19kc3Bw ICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2lw Y19yZXNldF9zZXR1cF9zdGFydHVwKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0 IGRwdV9hZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9pcGNfcmVzZXRfc2V0dXBfaXBj cihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcp Owotc3RhdGljIGludCBhZDRfY2ZnX2lwY19yZXNldChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAs Ci0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwotCi1zdGF0aWMgYWQ0X3Byb3Bfc2V0dXAg cHJvcF9zZXRfZnVuY1thZDRfc3RhdGVfbWF4XVtBRF9QUk9QTUFYXSA9IHsKLQlbYWQ0X3N0YXRl X2lkbGVdW0FEX01PREVdID0gYWQ0X21vZGVfc2V0dXBfY29tbW9uLAotCVthZDRfc3RhdGVfaWRs ZV1bQURfSU5JVF0gPSBhZDRfaW5pdF9zZXR1cF9pZGxlLAotCVthZDRfc3RhdGVfaWRsZV1bQURf Q0ZHXSA9IGFkNF9jZmdfc2V0dXBfaWRsZSwKLQlbYWQ0X3N0YXRlX2lkbGVdW0FEX0lOUFVUXSA9 IGFkNF9pbnB1dF9zZXR1cF9pZGxlLAotCVthZDRfc3RhdGVfaWRsZV1bQURfU1VTUEVORF0gPSBh ZDRfc3VzcGVuZF9zZXR1cCwKLQlbYWQ0X3N0YXRlX2lkbGVdW0FEX0FTU0VSVElWRV0gPSBhZDRf YXNzZXJ0aXZlX3NldHVwLAotCVthZDRfc3RhdGVfaWRsZV1bQURfQkFDS0xJR0hUXSA9IGFkNF9i YWNrbGlnaHRfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pZGxlXVtBRF9JUENfU1VTUEVORF0gPSBhZDRf bm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pZGxlXVtBRF9JUENfUkVTVU1FXSA9IGFkNF9ub19v cF9zZXR1cCwKLQlbYWQ0X3N0YXRlX2lkbGVdW0FEX0lQQ19SRVNFVF0gPSBhZDRfbm9fb3Bfc2V0 dXAsCi0KLQlbYWQ0X3N0YXRlX3N0YXJ0dXBdW0FEX01PREVdID0gYWQ0X21vZGVfc2V0dXBfY29t bW9uLAotCVthZDRfc3RhdGVfc3RhcnR1cF1bQURfSU5JVF0gPSBhZDRfaW5pdF9zZXR1cCwKLQlb YWQ0X3N0YXRlX3N0YXJ0dXBdW0FEX0NGR10gPSBhZDRfY2ZnX3NldHVwLAotCVthZDRfc3RhdGVf c3RhcnR1cF1bQURfSU5QVVRdID0gYWQ0X2lucHV0X3NldHVwLAotCVthZDRfc3RhdGVfc3RhcnR1 cF1bQURfU1VTUEVORF0gPSBhZDRfc3VzcGVuZF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3N0YXJ0dXBd W0FEX0FTU0VSVElWRV0gPSBhZDRfYXNzZXJ0aXZlX3NldHVwLAotCVthZDRfc3RhdGVfc3RhcnR1 cF1bQURfQkFDS0xJR0hUXSA9IGFkNF9iYWNrbGlnaHRfc2V0dXAsCi0JW2FkNF9zdGF0ZV9zdGFy dHVwXVtBRF9JUENfU1VTUEVORF0gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9zdGFy dHVwXVtBRF9JUENfUkVTVU1FXSA9IGFkNF9ub19vcF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3N0YXJ0 dXBdW0FEX0lQQ19SRVNFVF0gPSBhZDRfaXBjX3Jlc2V0X3NldHVwX3N0YXJ0dXAsCi0KLQlbYWQ0 X3N0YXRlX3J1bl1bQURfTU9ERV0gPSBhZDRfbW9kZV9zZXR1cF9jb21tb24sCi0JW2FkNF9zdGF0 ZV9ydW5dW0FEX0lOSVRdID0gYWQ0X2luaXRfc2V0dXBfcnVuLAotCVthZDRfc3RhdGVfcnVuXVtB RF9DRkddID0gYWQ0X2NmZ19zZXR1cF9ydW4sCi0JW2FkNF9zdGF0ZV9ydW5dW0FEX0lOUFVUXSA9 IGFkNF9pbnB1dF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3J1bl1bQURfU1VTUEVORF0gPSBhZDRfc3Vz cGVuZF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3J1bl1bQURfQVNTRVJUSVZFXSA9IGFkNF9hc3NlcnRp dmVfc2V0dXAsCi0JW2FkNF9zdGF0ZV9ydW5dW0FEX0JBQ0tMSUdIVF0gPSBhZDRfYmFja2xpZ2h0 X3NldHVwLAotCVthZDRfc3RhdGVfcnVuXVtBRF9JUENfU1VTUEVORF0gPSBhZDRfaXBjX3N1c3Bl bmRfc2V0dXBfcnVuLAotCVthZDRfc3RhdGVfcnVuXVtBRF9JUENfUkVTVU1FXSA9IGFkNF9ub19v cF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3J1bl1bQURfSVBDX1JFU0VUXSA9IGFkNF9zZXR1cF9kZWJ1 ZywKLQotCVthZDRfc3RhdGVfaXBjc11bQURfTU9ERV0gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2Fk NF9zdGF0ZV9pcGNzXVtBRF9JTklUXSA9IGFkNF9ub19vcF9zZXR1cCwKLQlbYWQ0X3N0YXRlX2lw Y3NdW0FEX0NGR10gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pcGNzXVtBRF9JTlBV VF0gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pcGNzXVtBRF9TVVNQRU5EXSA9IGFk NF9ub19vcF9zZXR1cCwKLQlbYWQ0X3N0YXRlX2lwY3NdW0FEX0FTU0VSVElWRV0gPSBhZDRfbm9f b3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pcGNzXVtBRF9CQUNLTElHSFRdID0gYWQ0X25vX29wX3Nl dHVwLAotCVthZDRfc3RhdGVfaXBjc11bQURfSVBDX1NVU1BFTkRdID0gYWQ0X25vX29wX3NldHVw LAotCVthZDRfc3RhdGVfaXBjc11bQURfSVBDX1JFU1VNRV0gPSBhZDRfaXBjX3Jlc3VtZV9zZXR1 cF9pcGNzLAotCVthZDRfc3RhdGVfaXBjc11bQURfSVBDX1JFU0VUXSA9IGFkNF9ub19vcF9zZXR1 cCwKLQotCVthZDRfc3RhdGVfaXBjcl1bQURfTU9ERV0gPSBhZDRfbW9kZV9zZXR1cF9jb21tb24s Ci0JW2FkNF9zdGF0ZV9pcGNyXVtBRF9JTklUXSA9IGFkNF9pbml0X3NldHVwX2lwY3IsCi0JW2Fk NF9zdGF0ZV9pcGNyXVtBRF9DRkddID0gYWQ0X2NmZ19zZXR1cF9pcGNyLAotCVthZDRfc3RhdGVf aXBjcl1bQURfSU5QVVRdID0gYWQ0X2lucHV0X3NldHVwX2lwY3IsCi0JW2FkNF9zdGF0ZV9pcGNy XVtBRF9TVVNQRU5EXSA9IGFkNF9zdXNwZW5kX3NldHVwLAotCVthZDRfc3RhdGVfaXBjcl1bQURf QVNTRVJUSVZFXSA9IGFkNF9hc3NlcnRpdmVfc2V0dXBfaXBjciwKLQlbYWQ0X3N0YXRlX2lwY3Jd W0FEX0JBQ0tMSUdIVF0gPSBhZDRfYmFja2xpZ2h0X3NldHVwX2lwY3IsCi0JW2FkNF9zdGF0ZV9p cGNyXVtBRF9JUENfU1VTUEVORF0gPSBhZDRfaXBjX3N1c3BlbmRfc2V0dXBfaXBjciwKLQlbYWQ0 X3N0YXRlX2lwY3JdW0FEX0lQQ19SRVNVTUVdID0gYWQ0X25vX29wX3NldHVwLAotCVthZDRfc3Rh dGVfaXBjcl1bQURfSVBDX1JFU0VUXSA9IGFkNF9pcGNfcmVzZXRfc2V0dXBfaXBjciwKLX07Ci0K LXN0cnVjdCBhZDRfaW5mbyB7Ci0JZW51bSBhZDRfc3RhdGUgc3RhdGU7Ci0JdTMyIGNvbXBsZXRl ZF9vcHNfbWFzazsKLQlib29sIGFkNF9zdXBwb3J0OwotCWVudW0gYWQ0X21vZGVzIG1vZGU7Ci0J Ym9vbCBpc19tYXN0ZXI7Ci0JdTMyIGxhc3RfYXNzZXJ0aXZlOwotCXUzMiBjYWNoZWRfYXNzZXJ0 aXZlOwotCXU2NCBsYXN0X2FsczsKLQl1NjQgY2FjaGVkX2FsczsKLQl1NjQgbGFzdF9ibDsKLQl1 NjQgY2FjaGVkX2JsOwotCXUzMiBsYXN0X3N0cjsKLQl1MzIgZnJhbWVfY291bnQ7Ci0JdTMyIGZy bXRfbW9kZTsKLQl1MzIgaXJkeF9jb250cm9sXzA7Ci0JdTMyIHRmX2N0cmw7Ci0JdTMyIHZjX2Nv bnRyb2xfMDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYWQ0X2luZm8gaW5mb1tEU1BQX01BWF0gPSB7 Ci0JW0RTUFBfMF0gPSB7YWQ0X3N0YXRlX2lkbGUsIDAsIHRydWUsIEFENF9PRkYsIGZhbHNlLCAw eDgwLCAweDgwfSwKLQlbRFNQUF8xXSA9IHthZDRfc3RhdGVfaWRsZSwgMCwgdHJ1ZSwgQUQ0X09G RiwgZmFsc2UsIDB4ODAsIDB4ODB9LAotCVtEU1BQXzJdID0ge2FkNF9zdGF0ZV9tYXgsIDAsIGZh bHNlLCBBRDRfT0ZGLCBmYWxzZSwgMHg4MCwgMHg4MH0sCi0JW0RTUFBfM10gPSB7YWQ0X3N0YXRl X21heCwgMCwgZmFsc2UsIEFENF9PRkYsIGZhbHNlLCAweDgwLCAweDgwfSwKLX07Ci0KLXZvaWQg ZHB1X3NldHVwX2RzcHBfYWQ0KHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwgdm9pZCAqYWRfY2Zn KQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcgPSBhZF9jZmc7 Ci0KLQlyZXQgPSBhZDRfcGFyYW1zX2NoZWNrKGRzcHAsIGFkX2NmZyk7Ci0JaWYgKHJldCkKLQkJ cmV0dXJuOwotCi0JcmV0ID0gcHJvcF9zZXRfZnVuY1tpbmZvW2RzcHAtPmlkeF0uc3RhdGVdW2Nm Zy0+cHJvcF0oZHNwcCwgYWRfY2ZnKTsKLQlpZiAocmV0KQotCQlEUk1fRVJST1IoIm9wIGZhaWxl ZCAlZCByZXQgJWRcbiIsIGNmZy0+cHJvcCwgcmV0KTsKLX0KLQotaW50IGRwdV92YWxpZGF0ZV9k c3BwX2FkNChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHUzMiAqcHJvcCkKLXsKLQotCWlmICgh ZHNwcCB8fCAhcHJvcCkgewotCQlEUk1fRVJST1IoImludmFsaWQgcGFyYW1zIGRzcHAgJXBLIHBy b3AgJXBLXG4iLCBkc3BwLCBwcm9wKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCpw cm9wID49IEFEX1BST1BNQVgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHByb3Agc2V0ICVkXG4i LCAqcHJvcCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChkc3BwLT5pZHggPj0gRFNQ UF9NQVggfHwgIWluZm9bZHNwcC0+aWR4XS5hZDRfc3VwcG9ydCkgewotCQlEUk1fRVJST1IoImFk NCBub3Qgc3VwcG9ydGVkIGZvciBkc3BwIGlkeCAlZFxuIiwgZHNwcC0+aWR4KTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X3BhcmFtc19j aGVjayhzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpj ZmcpCi17Ci0Jc3RydWN0IGRwdV9od19taXhlciAqaHdfbG07Ci0KLQlpZiAoIWRzcHAgfHwgIWNm ZyB8fCAhY2ZnLT5od19jZmcpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGRzcHAgJXBLIGNmZyAl cEsgaHdfY2ZnICVwS1xuIiwKLQkJCWRzcHAsIGNmZywgKChjZmcpID8gKGNmZy0+aHdfY2ZnKSA6 IE5VTEwpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFjZmctPmh3X2NmZy0+bWl4 ZXJfaW5mbykgewotCQlEUk1fRVJST1IoImludmFsaWQgbWl4ZWQgaW5mb1xuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCWlmIChkc3BwLT5pZHggPj0gRFNQUF9NQVggfHwgIWluZm9bZHNw cC0+aWR4XS5hZDRfc3VwcG9ydCkgewotCQlEUk1fRVJST1IoImFkNCBub3Qgc3VwcG9ydGVkIGZv ciBkc3BwIGlkeCAlZFxuIiwgZHNwcC0+aWR4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J aWYgKGNmZy0+cHJvcCA+PSBBRF9QUk9QTUFYKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBwcm9w IHNldCAlZFxuIiwgY2ZnLT5wcm9wKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGlu Zm9bZHNwcC0+aWR4XS5zdGF0ZSA+PSBhZDRfc3RhdGVfbWF4KSB7Ci0JCURSTV9FUlJPUigiaW4g bWF4IHN0YXRlIGZvciBkc3BwIGlkeCAlZFxuIiwgZHNwcC0+aWR4KTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JaWYgKCFwcm9wX3NldF9mdW5jW2luZm9bZHNwcC0+aWR4XS5zdGF0ZV1bY2Zn LT5wcm9wXSkgewotCQlEUk1fRVJST1IoInByb3Agc2V0IG5vdCBpbXBsZW1lbnRlZCBmb3Igc3Rh dGUgJWQgcHJvcCAlZFxuIiwKLQkJCQlpbmZvW2RzcHAtPmlkeF0uc3RhdGUsIGNmZy0+cHJvcCk7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghY2ZnLT5od19jZmctPm51bV9vZl9taXhl cnMgfHwKLQkgICAgY2ZnLT5od19jZmctPm51bV9vZl9taXhlcnMgPiBDUlRDX0RVQUxfTUlYRVJT KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBtaXhlciBjbnQgJWRcbiIsCi0JCQkJY2ZnLT5od19j ZmctPm51bV9vZl9taXhlcnMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaHdfbG0gPSBjZmct Pmh3X2NmZy0+bWl4ZXJfaW5mbzsKLQlpZiAoIWh3X2xtKSB7Ci0JCURSTV9FUlJPUigiaW52YWxp ZCBtaXhlciBpbmZvXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNmZy0+aHdf Y2ZnLT5udW1fb2ZfbWl4ZXJzID09IDEgJiYKLQkgICAgaHdfbG0tPmNmZy5vdXRfaGVpZ2h0ICE9 IGNmZy0+aHdfY2ZnLT5kaXNwbGF5diAmJgotCSAgICBod19sbS0+Y2ZnLm91dF93aWR0aCAhPSBj ZmctPmh3X2NmZy0+ZGlzcGxheWgpIHsKLQkJRFJNX0VSUk9SKCJzaW5nbGVfbG0gbG1oICVkIGxt dyAlZCBkaXNwbGF5aCAlZCBkaXNwbGF5dyAlZFxuIiwKLQkJCWh3X2xtLT5jZmcub3V0X2hlaWdo dCwgaHdfbG0tPmNmZy5vdXRfd2lkdGgsCi0JCQljZmctPmh3X2NmZy0+ZGlzcGxheWgsIGNmZy0+ aHdfY2ZnLT5kaXNwbGF5dik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSBpZiAoaHdfbG0t PmNmZy5vdXRfaGVpZ2h0ICE9IGNmZy0+aHdfY2ZnLT5kaXNwbGF5diAmJgotCQkgICBod19sbS0+ Y2ZnLm91dF93aWR0aCAhPSAoY2ZnLT5od19jZmctPmRpc3BsYXloID4+IDEpKSB7Ci0JCURSTV9F UlJPUigiZHVhbF9sbSBsbWggJWQgbG13ICVkIGRpc3BsYXloICVkIGRpc3BsYXl3ICVkXG4iLAot CQkJaHdfbG0tPmNmZy5vdXRfaGVpZ2h0LCBod19sbS0+Y2ZnLm91dF93aWR0aCwKLQkJCWNmZy0+ aHdfY2ZnLT5kaXNwbGF5aCwgY2ZnLT5od19jZmctPmRpc3BsYXl2KTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X25vX29wX3NldHVwKHN0 cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwgc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZykKLXsKLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRfc2V0dXBfZGVidWcoc3RydWN0IGRwdV9od19k c3BwICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUzMiBzdHJlbmd0aCA9 IDAsIGkgPSAwOwotCXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3X2xtOwotCi0JaHdfbG0gPSBjZmct Pmh3X2NmZy0+bWl4ZXJfaW5mbzsKLQlpZiAoKGNmZy0+aHdfY2ZnLT5udW1fb2ZfbWl4ZXJzID09 IDIpICYmIGh3X2xtLT5jZmcucmlnaHRfbWl4ZXIpIHsKLQkJLyogdGhpcyBBRCBjb3JlIGlzIHRo ZSBzYWx2ZSBjb3JlICovCi0JCWZvciAoaSA9IERTUFBfMDsgaSA8IERTUFBfTUFYOyBpKyspIHsK LQkJCWlmIChpbmZvW2ldLmlzX21hc3RlcikgewotCQkJCXN0cmVuZ3RoID0gaW5mb1tpXS5sYXN0 X3N0cjsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCXN0cmVuZ3RoID0gRFBV X1JFR19SRUFEKCZkc3BwLT5odywKLQkJCQlkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyAweDRj KTsKLQkJcHJfZGVidWcoIiVzKCk6IEFEIHN0cmVuZ3RoID0gJWRcbiIsIF9fZnVuY19fLCBzdHJl bmd0aCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X21vZGVfc2V0dXAo c3RydWN0IGRwdV9od19kc3BwICpkc3BwLCBlbnVtIGFkNF9tb2RlcyBtb2RlKQotewotCXUzMiBi bGtfb2Zmc2V0OwotCi0JYmxrX29mZnNldCA9IDB4MDQ7Ci0JaWYgKG1vZGUgPT0gQUQ0X09GRikg ewotCQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsg YmxrX29mZnNldCwKLQkJCQkweDEwMSk7Ci0JCWluZm9bZHNwcC0+aWR4XS5zdGF0ZSA9IGFkNF9z dGF0ZV9pZGxlOwotCQlwcl9kZWJ1ZygiJXMoKTogQUQgc3RhdGUgbW92ZSB0byBpZGxlXG4iLCBf X2Z1bmNfXyk7Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2sgPSAwOwotCQkv KiByZXNldCBsYXN0IHZhbHVlcyB0byByZWdpc3RlciBkZWZhdWx0ICovCi0JCWluZm9bZHNwcC0+ aWR4XS5sYXN0X2Fzc2VydGl2ZSA9IDB4ODA7Ci0JCWluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYXNz ZXJ0aXZlID0gVThfTUFYOwotCQlpbmZvW2RzcHAtPmlkeF0ubGFzdF9ibCA9IDB4RkZGRjsKLQkJ aW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9ibCA9IFU2NF9NQVg7Ci0JCWluZm9bZHNwcC0+aWR4XS5s YXN0X2FscyA9IDB4MDsKLQkJaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hbHMgPSBVNjRfTUFYOwot CX0gZWxzZSB7Ci0JCWlmIChpbmZvW2RzcHAtPmlkeF0uc3RhdGUgPT0gYWQ0X3N0YXRlX2lkbGUp IHsKLQkJCWluZm9bZHNwcC0+aWR4XS5mcmFtZV9jb3VudCA9IDA7Ci0JCQlpbmZvW2RzcHAtPmlk eF0uc3RhdGUgPSBhZDRfc3RhdGVfc3RhcnR1cDsKLQkJCXByX2RlYnVnKCIlcygpOiBBRCBzdGF0 ZSBtb3ZlIHRvIHN0YXJ0dXBcbiIsIF9fZnVuY19fKTsKLQkJfQotCQlEUFVfUkVHX1dSSVRFKCZk c3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCQkweDEw MCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X2luaXRfc2V0dXAoc3Ry dWN0IGRwdV9od19kc3BwICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUz MiBmcmFtZV9zdGFydCwgZnJhbWVfZW5kLCBwcm9jX3N0YXJ0LCBwcm9jX2VuZDsKLQlzdHJ1Y3Qg ZHB1X2h3X21peGVyICpod19sbTsKLQl1MzIgYmxrX29mZnNldCwgdGlsZV9jdGwsIHZhbCwgaTsK LQl1MzIgb2ZmMSwgb2ZmMiwgb2ZmMywgb2ZmNCwgb2ZmNSwgb2ZmNjsKLQlzdHJ1Y3QgZHJtX21z bV9hZDRfaW5pdCAqaW5pdDsKLQotCWlmICghY2ZnLT5od19jZmctPnBheWxvYWQpIHsKLQkJaW5m b1tkc3BwLT5pZHhdLmNvbXBsZXRlZF9vcHNfbWFzayAmPSB+YWQ0X2luaXQ7Ci0JCXJldHVybiAw OwotCX0KLQotCWlmIChjZmctPmh3X2NmZy0+bGVuICE9IHNpemVvZihzdHJ1Y3QgZHJtX21zbV9h ZDRfaW5pdCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHN6IHBhcmFtIGV4cCAlemQgZ2l2ZW4g JWQgY2ZnICVwS1xuIiwKLQkJCXNpemVvZihzdHJ1Y3QgZHJtX21zbV9hZDRfaW5pdCksIGNmZy0+ aHdfY2ZnLT5sZW4sCi0JCQljZmctPmh3X2NmZy0+cGF5bG9hZCk7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCWh3X2xtID0gY2ZnLT5od19jZmctPm1peGVyX2luZm87Ci0JaWYgKGNmZy0+aHdf Y2ZnLT5udW1fb2ZfbWl4ZXJzID09IDEpIHsKLQkJZnJhbWVfc3RhcnQgPSAwOwotCQlmcmFtZV9l bmQgPSAweGZmZmY7Ci0JCXByb2Nfc3RhcnQgPSAwOwotCQlwcm9jX2VuZCA9IDB4ZmZmZjsKLQkJ dGlsZV9jdGwgPSAwOwotCQlpbmZvW2RzcHAtPmlkeF0uaXNfbWFzdGVyID0gdHJ1ZTsKLQl9IGVs c2UgewotCQl0aWxlX2N0bCA9IDB4NTsKLQkJaWYgKGh3X2xtLT5jZmcucmlnaHRfbWl4ZXIpIHsK LQkJCWZyYW1lX3N0YXJ0ID0gKGNmZy0+aHdfY2ZnLT5kaXNwbGF5aCA+PiAxKSAtCi0JCQkJTUVS R0VfV0lEVEhfUklHSFQ7Ci0JCQlmcmFtZV9lbmQgPSBjZmctPmh3X2NmZy0+ZGlzcGxheWggLSAx OwotCQkJcHJvY19zdGFydCA9IChjZmctPmh3X2NmZy0+ZGlzcGxheWggPj4gMSk7Ci0JCQlwcm9j X2VuZCA9IGZyYW1lX2VuZDsKLQkJCXRpbGVfY3RsIHw9IDB4MTA7Ci0JCQlpbmZvW2RzcHAtPmlk eF0uaXNfbWFzdGVyID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlmcmFtZV9zdGFydCA9IDA7Ci0J CQlmcmFtZV9lbmQgPSAoY2ZnLT5od19jZmctPmRpc3BsYXloID4+IDEpICsKLQkJCQlNRVJHRV9X SURUSF9MRUZUOwotCQkJcHJvY19zdGFydCA9IDA7Ci0JCQlwcm9jX2VuZCA9IChjZmctPmh3X2Nm Zy0+ZGlzcGxheWggPj4gMSkgLSAxOwotCQkJdGlsZV9jdGwgfD0gMHgxMDsKLQkJCWluZm9bZHNw cC0+aWR4XS5pc19tYXN0ZXIgPSB0cnVlOwotCQl9Ci0JfQotCi0JaW5pdCA9IGNmZy0+aHdfY2Zn LT5wYXlsb2FkOwotCi0JaW5mb1tkc3BwLT5pZHhdLmZybXRfbW9kZSA9IChpbml0LT5pbml0X3Bh cmFtXzAwOSAmIChCSVQoMTQpIC0gMSkpOwotCi0JYmxrX29mZnNldCA9IDB4YzsKLQlEUFVfUkVH X1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwK LQkJCWluaXQtPmluaXRfcGFyYW1fMDEwKTsKLQotCWluaXQtPmluaXRfcGFyYW1fMDEyID0gY2Zn LT5od19jZmctPmRpc3BsYXl2ICYgKEJJVCgxNykgLSAxKTsKLQlpbml0LT5pbml0X3BhcmFtXzAx MSA9IGNmZy0+aHdfY2ZnLT5kaXNwbGF5aCAmIChCSVQoMTcpIC0gMSk7Ci0JYmxrX29mZnNldCA9 IDB4MTA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsCi0JCQkoKGluaXQtPmluaXRfcGFyYW1fMDExIDw8IDE2KSB8IGluaXQt PmluaXRfcGFyYW1fMDEyKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxNDsKLQlEUFVfUkVHX1dSSVRF KCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCXRp bGVfY3RsKTsKLQotCWJsa19vZmZzZXQgPSAweDQ0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3 LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKCgoKGluaXQtPmlu aXRfcGFyYW1fMDEzKSAmIChCSVQoMTcpIC0gMSkpIDw8IDE2KSB8Ci0JCQkoaW5pdC0+aW5pdF9w YXJhbV8wMTQgJiAoQklUKDE3KSAtIDEpKSkpOwotCi0JYmxrX29mZnNldCA9IDB4NWM7Ci0JRFBV X1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZz ZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wMTUgJiAoQklUKDE2KSAtIDEpKSk7Ci0JYmxrX29m ZnNldCA9IDB4NjA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+ YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wMTYgJiAoQklUKDgp IC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg2NDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywg ZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3Bh cmFtXzAxNyAmIChCSVQoMTIpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg2ODsKLQlEUFVfUkVH X1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwK LQkJCShpbml0LT5pbml0X3BhcmFtXzAxOCAmIChCSVQoMTIpIC0gMSkpKTsKLQlibGtfb2Zmc2V0 ID0gMHg2YzsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5i YXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzAxOSAmIChCSVQoMTIpIC0g MSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg3MDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNw cC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFt XzAyMCAmIChCSVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg3NDsKLQlEUFVfUkVHX1dS SVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJ CShpbml0LT5pbml0X3BhcmFtXzAyMSAmIChCSVQoOCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAw eDc4OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2Ug KyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDIyICYgKEJJVCg4KSAtIDEpKSk7 Ci0JYmxrX29mZnNldCA9IDB4N2M7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNh cC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wMjMg JiAoQklUKDE2KSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4ODA7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCSgoKGlu aXQtPmluaXRfcGFyYW1fMDI0ICYgKEJJVCgxNikgLSAxKSkgPDwgMTYpIHwKLQkJKChpbml0LT5p bml0X3BhcmFtXzAyNSAmIChCSVQoMTYpIC0gMSkpKSkpOwotCWJsa19vZmZzZXQgPSAweDg0Owot CURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtf b2Zmc2V0LAotCQkoKChpbml0LT5pbml0X3BhcmFtXzAyNiAmIChCSVQoMTYpIC0gMSkpIDw8IDE2 KSB8Ci0JCSgoaW5pdC0+aW5pdF9wYXJhbV8wMjcgJiAoQklUKDE2KSAtIDEpKSkpKTsKLQotCWJs a19vZmZzZXQgPSAweDkwOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNi bGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDI4ICYgKEJJ VCgxNikgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDk0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAt Pmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmlu aXRfcGFyYW1fMDI5ICYgKEJJVCgxNikgLSAxKSkpOwotCi0JYmxrX29mZnNldCA9IDB4OTg7Ci0J RFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19v ZmZzZXQsCi0JCSgoKGluaXQtPmluaXRfcGFyYW1fMDM1ICYgKEJJVCgxNikgLSAxKSkgPDwgMTYp IHwKLQkJKChpbml0LT5pbml0X3BhcmFtXzAzMCAmIChCSVQoMTYpIC0gMSkpKSkpOwotCi0JYmxr X29mZnNldCA9IDB4OWM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Js ay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCSgoKGluaXQtPmluaXRfcGFyYW1fMDMyICYgKEJJ VCgxNikgLSAxKSkgPDwgMTYpIHwKLQkJKChpbml0LT5pbml0X3BhcmFtXzAzMSAmIChCSVQoMTYp IC0gMSkpKSkpOwotCWJsa19vZmZzZXQgPSAweGEwOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3 LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkoKChpbml0LT5pbml0 X3BhcmFtXzAzNCAmIChCSVQoMTYpIC0gMSkpIDw8IDE2KSB8Ci0JCSgoaW5pdC0+aW5pdF9wYXJh bV8wMzMgJiAoQklUKDE2KSAtIDEpKSkpKTsKLQotCWJsa19vZmZzZXQgPSAweGI0OwotCURQVV9S RUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0 LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDM2ICYgKEJJVCg4KSAtIDEpKSk7Ci0JYmxrX29mZnNl dCA9IDB4Y2M7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQu YmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wMzcgJiAoQklUKDgpIC0g MSkpKTsKLQlibGtfb2Zmc2V0ID0gMHhjMDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNw cC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFt XzAzOCAmIChCSVQoOCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweGQ4OwotCURQVV9SRUdfV1JJ VEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJ KGluaXQtPmluaXRfcGFyYW1fMDM5ICYgKEJJVCg4KSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0ID0g MHhlODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNl ICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzA0MCAmIChCSVQoMTYpIC0gMSkp KTsKLQotCWJsa19vZmZzZXQgPSAweGY0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3Bw LT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1f MDQxICYgKEJJVCg4KSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxMDA7Ci0JRFBVX1JFR19X UklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0J CQkoaW5pdC0+aW5pdF9wYXJhbV8wNDIgJiAoQklUKDE2KSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0 ID0gMHgxMGM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQu YmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNDMgJiAoQklUKDgpIC0g MSkpKTsKLQotCWJsa19vZmZzZXQgPSAweDEyMDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywg ZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3Bh cmFtXzA0NCAmIChCSVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxMjQ7Ci0JRFBVX1JF R19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQs Ci0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNDUgJiAoQklUKDE2KSAtIDEpKSk7Ci0KLQlibGtfb2Zm c2V0ID0gMHgxMjg7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+ YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNDYgJiAoQklUKDEp IC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxMmM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcs IGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9w YXJhbV8wNDcgJiAoQklUKDgpIC0gMSkpKTsKLQotCWluZm9bZHNwcC0+aWR4XS5pcmR4X2NvbnRy b2xfMCA9IChpbml0LT5pbml0X3BhcmFtXzA0OCAmIChCSVQoNSkgLSAxKSk7Ci0KLQlibGtfb2Zm c2V0ID0gMHgxNDA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+ YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNDkgJiAoQklUKDgp IC0gMSkpKTsKLQotCWJsa19vZmZzZXQgPSAweDE0NDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5o dywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0 X3BhcmFtXzA1MCAmIChCSVQoOCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDE0ODsKLQlEUFVf UkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNl dCwKLQkJKCgoaW5pdC0+aW5pdF9wYXJhbV8wNTEgJiAoQklUKDgpIC0gMSkpIDw8IDgpIHwKLQkJ KChpbml0LT5pbml0X3BhcmFtXzA1MiAmIChCSVQoOCkgLSAxKSkpKSk7Ci0KLQlibGtfb2Zmc2V0 ID0gMHgxNGM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQu YmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNTMgJiAoQklUKDEwKSAt IDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4MTUwOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBk c3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFy YW1fMDU0ICYgKEJJVCgxMCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDE1NDsKLQlEUFVfUkVH X1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwK LQkJCShpbml0LT5pbml0X3BhcmFtXzA1NSAmIChCSVQoOCkgLSAxKSkpOwotCi0JYmxrX29mZnNl dCA9IDB4MTU4OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFk LmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDU2ICYgKEJJVCg4KSAt IDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4MTY0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBk c3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFy YW1fMDU3ICYgKEJJVCg4KSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4MTY4OwotCURQVV9SRUdf V1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAot CQkJKGluaXQtPmluaXRfcGFyYW1fMDU4ICYgKEJJVCg0KSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0 ID0gMHgxN2M7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQu YmFzZSArIGJsa19vZmZzZXQsCi0JCQkoZnJhbWVfc3RhcnQgJiAoQklUKDE2KSAtIDEpKSk7Ci0J YmxrX29mZnNldCA9IDB4MTgwOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAt PnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGZyYW1lX2VuZCAmIChCSVQoMTYpIC0g MSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxODQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRz cHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkocHJvY19zdGFydCAmIChC SVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxODg7Ci0JRFBVX1JFR19XUklURSgmZHNw cC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkocHJvY19l bmQgJiAoQklUKDE2KSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxOGM7Ci0JRFBVX1JFR19X UklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0J CQkoaW5pdC0+aW5pdF9wYXJhbV8wNTkgJiAoQklUKDQpIC0gMSkpKTsKLQotCWJsa19vZmZzZXQg PSAweDE5MDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5i YXNlICsgYmxrX29mZnNldCwKLQkJKCgoaW5pdC0+aW5pdF9wYXJhbV8wNjEgJiAoQklUKDgpIC0g MSkpIDw8IDgpIHwKLQkJKChpbml0LT5pbml0X3BhcmFtXzA2MCAmIChCSVQoOCkgLSAxKSkpKSk7 Ci0KLQlibGtfb2Zmc2V0ID0gMHgxOTQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8w NjIgJiAoQklUKDEwKSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxYTA7Ci0JRFBVX1JFR19X UklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0J CQkoaW5pdC0+aW5pdF9wYXJhbV8wNjMgJiAoQklUKDEwKSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9 IDB4MWE0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJh c2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDY0ICYgKEJJVCgxMCkgLSAx KSkpOwotCWJsa19vZmZzZXQgPSAweDFhODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNw cC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFt XzA2NSAmIChCSVQoMTApIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxYWM7Ci0JRFBVX1JFR19X UklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0J CQkoaW5pdC0+aW5pdF9wYXJhbV8wNjYgJiAoQklUKDgpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0g MHgxYjA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNjcgJiAoQklUKDgpIC0gMSkp KTsKLQlibGtfb2Zmc2V0ID0gMHgxYjQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8w NjggJiAoQklUKDYpIC0gMSkpKTsKLQotCWJsa19vZmZzZXQgPSAweDQ2MDsKLQlEUFVfUkVHX1dS SVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJ CShpbml0LT5pbml0X3BhcmFtXzA2OSAmIChCSVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0g MHg0NjQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNzAgJiAoQklUKDEwKSAtIDEp KSk7Ci0JYmxrX29mZnNldCA9IDB4NDY4OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3Bw LT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1f MDcxICYgKEJJVCgxMCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDQ2YzsKLQlEUFVfUkVHX1dS SVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJ CShpbml0LT5pbml0X3BhcmFtXzA3MiAmIChCSVQoMTApIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0g MHg0NzA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNzMgJiAoQklUKDgpIC0gMSkp KTsKLQlibGtfb2Zmc2V0ID0gMHg0NzQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8w NzQgJiAoQklUKDEwKSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4NDc4OwotCURQVV9SRUdfV1JJ VEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJ KGluaXQtPmluaXRfcGFyYW1fMDc1ICYgKEJJVCgxMCkgLSAxKSkpOwotCi0Jb2ZmMSA9IDB4MWMw OwotCW9mZjIgPSAweDIxMDsKLQlvZmYzID0gMHgyNjA7Ci0Jb2ZmNCA9IDB4MmIwOwotCW9mZjUg PSAweDM4MDsKLQlvZmY2ID0gMHgzZDA7Ci0JZm9yIChpID0gMDsgaSA8IEFENF9MVVRfR1JQMF9T SVpFIC0gMTsgaSA9IGkgKyAyKSB7Ci0JCXZhbCA9IChpbml0LT5pbml0X3BhcmFtXzAwMVtpXSAm IChCSVQoMTYpIC0gMSkpOwotCQl2YWwgfD0gKChpbml0LT5pbml0X3BhcmFtXzAwMVtpICsgMV0g JiAoQklUKDE2KSAtIDEpKQotCQkJCTw8IDE2KTsKLQkJRFBVX1JFR19XUklURSgmZHNwcC0+aHcs IGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIG9mZjEsIHZhbCk7Ci0JCW9mZjEgKz0gNDsKLQot CQl2YWwgPSAoaW5pdC0+aW5pdF9wYXJhbV8wMDJbaV0gJiAoQklUKDE2KSAtIDEpKTsKLQkJdmFs IHw9ICgoaW5pdC0+aW5pdF9wYXJhbV8wMDJbaSArIDFdICYgKEJJVCgxNikgLSAxKSkKLQkJCQk8 PCAxNik7Ci0JCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJh c2UgKyBvZmYyLCB2YWwpOwotCQlvZmYyICs9IDQ7Ci0KLQkJdmFsID0gKGluaXQtPmluaXRfcGFy YW1fMDAzW2ldICYgKEJJVCgxNikgLSAxKSk7Ci0JCXZhbCB8PSAoKGluaXQtPmluaXRfcGFyYW1f MDAzW2kgKyAxXSAmIChCSVQoMTYpIC0gMSkpCi0JCQkJPDwgMTYpOwotCQlEUFVfUkVHX1dSSVRF KCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2ZmMywgdmFsKTsKLQkJb2Zm MyArPSA0OwotCi0JCXZhbCA9IChpbml0LT5pbml0X3BhcmFtXzAwNFtpXSAmIChCSVQoMTYpIC0g MSkpOwotCQl2YWwgfD0gKChpbml0LT5pbml0X3BhcmFtXzAwNFtpICsgMV0gJiAoQklUKDE2KSAt IDEpKQotCQkJCTw8IDE2KTsKLQkJRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+ c2Jsay0+YWQuYmFzZSArIG9mZjQsIHZhbCk7Ci0JCW9mZjQgKz0gNDsKLQotCQl2YWwgPSAoaW5p dC0+aW5pdF9wYXJhbV8wMDdbaV0gJiAoQklUKDE2KSAtIDEpKTsKLQkJdmFsIHw9ICgoaW5pdC0+ aW5pdF9wYXJhbV8wMDdbaSArIDFdICYKLQkJCQkoQklUKDE2KSAtIDEpKSA8PCAxNik7Ci0JCURQ VV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBvZmY1LCB2 YWwpOwotCQlvZmY1ICs9IDQ7Ci0KLQkJdmFsID0gKGluaXQtPmluaXRfcGFyYW1fMDA4W2ldICYg KEJJVCgxMikgLSAxKSk7Ci0JCXZhbCB8PSAoKGluaXQtPmluaXRfcGFyYW1fMDA4W2kgKyAxXSAm Ci0JCQkJKEJJVCgxMikgLSAxKSkgPDwgMTYpOwotCQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywg ZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2ZmNiwgdmFsKTsKLQkJb2ZmNiArPSA0OwotCX0K LQkvKiB3cml0ZSBsYXN0IGluZGV4IGRhdGEgKi8KLQlpID0gQUQ0X0xVVF9HUlAwX1NJWkUgLSAx OwotCXZhbCA9ICgoaW5pdC0+aW5pdF9wYXJhbV8wMDFbaV0gJiAoQklUKDE2KSAtIDEpKSA8PCAx Nik7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSAr IG9mZjEsIHZhbCk7Ci0JdmFsID0gKChpbml0LT5pbml0X3BhcmFtXzAwMltpXSAmIChCSVQoMTYp IC0gMSkpIDw8IDE2KTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxr LT5hZC5iYXNlICsgb2ZmMiwgdmFsKTsKLQl2YWwgPSAoKGluaXQtPmluaXRfcGFyYW1fMDAzW2ld ICYgKEJJVCgxNikgLSAxKSkgPDwgMTYpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3Bw LT5jYXAtPnNibGstPmFkLmJhc2UgKyBvZmYzLCB2YWwpOwotCXZhbCA9ICgoaW5pdC0+aW5pdF9w YXJhbV8wMDRbaV0gJiAoQklUKDE2KSAtIDEpKSA8PCAxNik7Ci0JRFBVX1JFR19XUklURSgmZHNw cC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIG9mZjQsIHZhbCk7Ci0JdmFsID0gKChp bml0LT5pbml0X3BhcmFtXzAwN1tpXSAmIChCSVQoMTYpIC0gMSkpIDw8IDE2KTsKLQlEUFVfUkVH X1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2ZmNSwgdmFsKTsK LQl2YWwgPSAoKGluaXQtPmluaXRfcGFyYW1fMDA4W2ldICYgKEJJVCgxMikgLSAxKSkgPDwgMTYp OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBv ZmY2LCB2YWwpOwotCi0Jb2ZmMSA9IDB4MzAwOwotCW9mZjIgPSAweDM0MDsKLQlmb3IgKGkgPSAw OyBpIDwgQUQ0X0xVVF9HUlAxX1NJWkU7IGkgPSBpICsgMikgewotCQl2YWwgPSAoaW5pdC0+aW5p dF9wYXJhbV8wMDVbaV0gJiAoQklUKDE2KSAtIDEpKTsKLQkJdmFsIHw9ICgoaW5pdC0+aW5pdF9w YXJhbV8wMDVbaSArIDFdICYKLQkJCQkoQklUKDE2KSAtIDEpKSA8PCAxNik7Ci0JCURQVV9SRUdf V1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBvZmYxLCB2YWwpOwot CQlvZmYxICs9IDQ7Ci0KLQkJdmFsID0gKGluaXQtPmluaXRfcGFyYW1fMDA2W2ldICYgKEJJVCgx NikgLSAxKSk7Ci0JCXZhbCB8PSAoKGluaXQtPmluaXRfcGFyYW1fMDA2W2kgKyAxXSAmIChCSVQo MTYpIC0gMSkpCi0JCQkJPDwgMTYpOwotCQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+ Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2ZmMiwgdmFsKTsKLQkJb2ZmMiArPSA0OwotCX0KLQotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9jZmdfc2V0dXAoc3RydWN0IGRwdV9od19kc3Bw ICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUzMiBibGtfb2Zmc2V0LCB2 YWw7Ci0Jc3RydWN0IGRybV9tc21fYWQ0X2NmZyAqYWRfY2ZnOwotCi0JaWYgKCFjZmctPmh3X2Nm Zy0+cGF5bG9hZCkgewotCQlpbmZvW2RzcHAtPmlkeF0uY29tcGxldGVkX29wc19tYXNrICY9IH5h ZDRfY2ZnOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY2ZnLT5od19jZmctPmxlbiAhPSBzaXpl b2Yoc3RydWN0IGRybV9tc21fYWQ0X2NmZykpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHN6IHBh cmFtIGV4cCAlemQgZ2l2ZW4gJWQgY2ZnICVwS1xuIiwKLQkJCXNpemVvZihzdHJ1Y3QgZHJtX21z bV9hZDRfY2ZnKSwgY2ZnLT5od19jZmctPmxlbiwKLQkJCWNmZy0+aHdfY2ZnLT5wYXlsb2FkKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWFkX2NmZyA9IGNmZy0+aHdfY2ZnLT5wYXlsb2FkOwot Ci0JYmxrX29mZnNldCA9IDB4MTg7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAwMiAmIChC SVQoMTYpIC0gMSkpOwotCXZhbCB8PSAoKGFkX2NmZy0+Y2ZnX3BhcmFtXzAwMSAmIChCSVQoMTYp IC0gMSkpIDw8IDE2KTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxr LT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7Ci0JdmFsID0g KGFkX2NmZy0+Y2ZnX3BhcmFtXzAwNCAmIChCSVQoMTYpIC0gMSkpOwotCXZhbCB8PSAoKGFkX2Nm Zy0+Y2ZnX3BhcmFtXzAwMyAmIChCSVQoMTYpIC0gMSkpIDw8IDE2KTsKLQlEUFVfUkVHX1dSSVRF KCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsK LQotCWJsa19vZmZzZXQgPSAweDIwOwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMDUgJiAo QklUKDgpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGst PmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgPSAweDI0OwotCXZhbCA9 IChhZF9jZmctPmNmZ19wYXJhbV8wMDYgJiAoQklUKDcpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUo JmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwot Ci0JaW5mb1tkc3BwLT5pZHhdLnRmX2N0cmwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDA4ICYgKEJJ VCg4KSAtIDEpKTsKLQotCWJsa19vZmZzZXQgPSAweDM4OwotCXZhbCA9IChhZF9jZmctPmNmZ19w YXJhbV8wMDkgJiAoQklUKDEwKSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNw cC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJsa19vZmZzZXQg PSAweDNjOwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMTAgJiAoQklUKDEyKSAtIDEpKTsK LQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxr X29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7Ci0JdmFsID0gKChhZF9jZmctPmNmZ19w YXJhbV8wMTEgJiAoQklUKDE2KSAtIDEpKSA8PCAxNik7Ci0JdmFsIHw9IChhZF9jZmctPmNmZ19w YXJhbV8wMTIgJiAoQklUKDE2KSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNw cC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJsa19vZmZzZXQg PSAweDg4OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMTMgJiAoQklUKDgpIC0gMSkpOwot CURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtf b2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFy YW1fMDE0ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtfb2Zmc2V0ID0g MHhhNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDE1ICYgKEJJVCgxNikgLSAxKSk7Ci0J RFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19v ZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCArPSA0OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJh bV8wMTYgJiAoQklUKDEwKSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+ Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7 Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAxNyAmIChCSVQoMTYpIC0gMSkpOwotCURQVV9S RUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0 LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDE4 ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+ c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtfb2Zmc2V0ID0gMHhjNDsK LQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDE5ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JF R19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQs IHZhbCk7Ci0JYmxrX29mZnNldCArPSA0OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMjAg JiAoQklUKDE2KSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5z YmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJsa19vZmZzZXQgPSAweGI4Owot CXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMjEgJiAoQklUKDE2KSAtIDEpKTsKLQlEUFVfUkVH X1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwg dmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAyMiAm IChCSVQoMTYpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNi bGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCi0JYmxrX29mZnNldCA9IDB4ZDA7Ci0J dmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAyMyAmIChCSVQoMTYpIC0gMSkpOwotCURQVV9SRUdf V1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2 YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDI0ICYg KEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Js ay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtfb2Zmc2V0ID0gMHhkYzsKLQl2 YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDI1ICYgKEJJVCgxNikgLSAxKSk7Ci0JdmFsIHw9ICgo YWRfY2ZnLT5jZmdfcGFyYW1fMDI2ICYgKEJJVCgxNikgLSAxKSkgPDwgMTYpOwotCURQVV9SRUdf V1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2 YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDI3ICYg KEJJVCgxNikgLSAxKSk7Ci0JdmFsIHw9ICgoYWRfY2ZnLT5jZmdfcGFyYW1fMDI4ICYgKEJJVCgx NikgLSAxKSkgPDwgMTYpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdf cGFyYW1fMDI5ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRz cHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtfb2Zmc2V0 ID0gMHhlYzsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDMwICYgKEJJVCgxNikgLSAxKSk7 Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJs a19vZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCArPSA0OwotCXZhbCA9IChhZF9jZmctPmNmZ19w YXJhbV8wMzEgJiAoQklUKDEyKSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNw cC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJsa19vZmZzZXQg PSAweGY4OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMzIgJiAoQklUKDEwKSAtIDEpKTsK LQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxr X29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3Bh cmFtXzAzMyAmIChCSVQoOCkgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtfb2Zmc2V0ID0g MHgxMDQ7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAzNCAmIChCSVQoMTYpIC0gMSkpOwot CURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtf b2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFy YW1fMDM1ICYgKEJJVCgxMikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtfb2Zmc2V0ID0g MHgxMTA7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAzNiAmIChCSVQoMTIpIC0gMSkpOwot CURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtf b2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFy YW1fMDM3ICYgKEJJVCgxMikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCArPSA0 OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMzggJiAoQklUKDgpIC0gMSkpOwotCURQVV9S RUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0 LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDM5 ICYgKEJJVCg4KSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5z YmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJsa19vZmZzZXQgPSAweDEzNDsK LQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDQwICYgKEJJVCgxMikgLSAxKSk7Ci0JRFBVX1JF R19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQs IHZhbCk7Ci0KLQlpbmZvW2RzcHAtPmlkeF0udmNfY29udHJvbF8wID0gKGFkX2NmZy0+Y2ZnX3Bh cmFtXzA0MSAmIChCSVQoNykgLSAxKSk7Ci0KLQlibGtfb2Zmc2V0ICs9IDE2MDsKLQl2YWwgPSAo YWRfY2ZnLT5jZmdfcGFyYW1fMDQzICYgKEJJVCgxMCkgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0K LQlibGtfb2Zmc2V0ID0gMHgxNmM7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzA0NCAmIChC SVQoOCkgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+ YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCArPSA0OwotCXZhbCA9IChh ZF9jZmctPmNmZ19wYXJhbV8wNDUgJiAoQklUKDgpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRz cHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJs a19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDQ2ICYgKEJJVCgxNikg LSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRf aW5wdXRfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3 X2NmZyAqY2ZnKQotewotCXU2NCAqdmFsLCBhbHM7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAo Y2ZnLT5od19jZmctPmxlbiAhPSBzaXplb2YodTY0KSAmJiBjZmctPmh3X2NmZy0+cGF5bG9hZCkg ewotCQlEUk1fRVJST1IoImludmFsaWQgc3ogcGFyYW0gZXhwICV6ZCBnaXZlbiAlZCBjZmcgJXBL XG4iLAotCQkJc2l6ZW9mKHU2NCksIGNmZy0+aHdfY2ZnLT5sZW4sIGNmZy0+aHdfY2ZnLT5wYXls b2FkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYmxrX29mZnNldCA9IDB4Mjg7Ci0JaWYg KGNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCXZhbCA9IGNmZy0+aHdfY2ZnLT5wYXlsb2FkOwot CX0gZWxzZSB7Ci0JCWFscyA9IDA7Ci0JCXZhbCA9ICZhbHM7Ci0JfQotCWluZm9bZHNwcC0+aWR4 XS5sYXN0X2FscyA9ICgqdmFsICYgKEJJVCgxNikgLSAxKSk7Ci0JaW5mb1tkc3BwLT5pZHhdLmNv bXBsZXRlZF9vcHNfbWFzayB8PSBhZDRfaW5wdXQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcs IGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQlpbmZvW2RzcHAtPmlk eF0ubGFzdF9hbHMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9zdXNwZW5kX3Nl dHVwKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNm ZykKLXsKLQlpbmZvW2RzcHAtPmlkeF0uc3RhdGUgPSBhZDRfc3RhdGVfaWRsZTsKLQlwcl9kZWJ1 ZygiJXMoKTogQUQgc3RhdGUgbW92ZSB0byBpZGxlXG4iLCBfX2Z1bmNfXyk7Ci0JaW5mb1tkc3Bw LT5pZHhdLmNvbXBsZXRlZF9vcHNfbWFzayA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgYWQ0X21vZGVfc2V0dXBfY29tbW9uKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3Ry dWN0IGRwdV9hZF9od19jZmcgKmNmZykKLXsKLQotCWlmIChjZmctPmh3X2NmZy0+bGVuICE9IHNp emVvZih1NjQpIHx8ICFjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fRVJST1IoImludmFs aWQgc3ogcGFyYW0gZXhwICV6ZCBnaXZlbiAlZCBjZmcgJXBLXG4iLAotCQkJc2l6ZW9mKHU2NCks IGNmZy0+aHdfY2ZnLT5sZW4sIGNmZy0+aHdfY2ZnLT5wYXlsb2FkKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JaW5mb1tkc3BwLT5pZHhdLm1vZGUgPSAqKChlbnVtIGFkNF9tb2RlcyAqKQot CQkJCQkoY2ZnLT5od19jZmctPnBheWxvYWQpKTsKLQlpbmZvW2RzcHAtPmlkeF0uY29tcGxldGVk X29wc19tYXNrIHw9IGFkNF9tb2RlOwotCi0JaWYgKEFEX1NUQVRFX1JFQURZKGluZm9bZHNwcC0+ aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spIHx8Ci0JCQkJCWluZm9bZHNwcC0+aWR4XS5tb2RlID09 IEFENF9PRkYpCi0JCWFkNF9tb2RlX3NldHVwKGRzcHAsIGluZm9bZHNwcC0+aWR4XS5tb2RlKTsK LQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9pbml0X3NldHVwX2lkbGUoc3RydWN0 IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCWlu dCByZXQ7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoIWNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7 Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2sgJj0gfmFkNF9pbml0OwotCQly ZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSBhZDRfaW5pdF9zZXR1cChkc3BwLCBjZmcpOwotCWlmIChy ZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBlbmFibGUgbWVtb3J5IGluaXRpYWxpemF0aW9uKi8K LQkvKiBmcm10IG1vZGUgKi8KLQlibGtfb2Zmc2V0ID0gMHg4OwotCURQVV9SRUdfV1JJVEUoJmRz cHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluZm9b ZHNwcC0+aWR4XS5mcm10X21vZGUgJiAweDFmZmYpKTsKLQkvKiBtZW1vcnkgaW5pdCAqLwotCWJs a19vZmZzZXQgPSAweDQ1MDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5z YmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgMHgxKTsKLQotCS8qIGVuZm9yY2UgMCBpbml0aWFs IHN0cmVuZ3RoIHdoZW4gcG93ZXJpbmcgdXAgQUQgY29uZmlnICovCi0JLyogaXJkeF9jb250cm9s XzAgKi8KLQlibGtfb2Zmc2V0ID0gMHgxM2M7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRz cHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIDB4Nik7Ci0KLQlpbmZvW2RzcHAt PmlkeF0uY29tcGxldGVkX29wc19tYXNrIHw9IGFkNF9pbml0OwotCi0JaWYgKEFEX1NUQVRFX1JF QURZKGluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1 cChkc3BwLCBpbmZvW2RzcHAtPmlkeF0ubW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCBhZDRfaW5pdF9zZXR1cF9ydW4oc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1 Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCWludCByZXQ7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0K LQlpZiAoIWNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0 ZWRfb3BzX21hc2sgJj0gfmFkNF9pbml0OwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSBhZDRf aW5pdF9zZXR1cChkc3BwLCBjZmcpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBk aXNhYmxlIG1lbW9yeSBpbml0aWFsaXphdGlvbiovCi0JLyogZnJtdCBtb2RlICovCi0JYmxrX29m ZnNldCA9IDB4ODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5h ZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbmZvW2RzcHAtPmlkeF0uZnJtdF9tb2RlIHwgMHgy MDAwKSk7Ci0JLyogbm8gbmVlZCB0byBleHBsaWNpdGx5IHNldCBtZW1vcnkgaW5pdGlhbGl6YXRp b24gc2VxdWVuY2UsCi0JICogc2luY2UgQUQgaHcgd2VyZSBub3QgcG93ZXJlZCBvZmYuCi0JICov Ci0KLQkvKiBpcmR4X2NvbnRyb2xfMCAqLwotCWJsa19vZmZzZXQgPSAweDEzYzsKLQlEUFVfUkVH X1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwK LQkJCWluZm9bZHNwcC0+aWR4XS5pcmR4X2NvbnRyb2xfMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCBhZDRfaW5pdF9zZXR1cF9pcGNyKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwK LQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZykKLXsKLQlpbnQgcmV0OwotCXUzMiBibGtfb2Zm c2V0OwotCi0JaWYgKCFjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlpbmZvW2RzcHAtPmlkeF0u Y29tcGxldGVkX29wc19tYXNrICY9IH5hZDRfaW5pdDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0 ID0gYWQ0X2luaXRfc2V0dXAoZHNwcCwgY2ZnKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0Owot CS8qIG5vIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgbWVtb3J5IGluaXRpYWxpemF0aW9uIHNlcXVl bmNlLAotCSAqIHNpbmNlIHJlZ2lzdGVyIHJlc2V0IHZhbHVlcyBhcmUgdGhlIGNvcnJlY3QgY29u ZmlndXJhdGlvbgotCSAqLwotCS8qIGZybXQgbW9kZSAqLwotCWJsa19vZmZzZXQgPSAweDg7Ci0J RFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19v ZmZzZXQsCi0JCQkoaW5mb1tkc3BwLT5pZHhdLmZybXRfbW9kZSB8IDB4MjAwMCkpOwotCS8qIGly ZHhfY29udHJvbF8wICovCi0JYmxrX29mZnNldCA9IDB4MTNjOwotCURQVV9SRUdfV1JJVEUoJmRz cHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJaW5mb1tk c3BwLT5pZHhdLmlyZHhfY29udHJvbF8wKTsKLQotCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRf b3BzX21hc2sgfD0gYWQ0X2luaXQ7Ci0JaWYgKEFEX1NUQVRFX1JFQURZKGluZm9bZHNwcC0+aWR4 XS5jb21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1cChkc3BwLCBpbmZvW2RzcHAt PmlkeF0ubW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRfY2ZnX3NldHVw X2lkbGUoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAq Y2ZnKQotewotCWludCByZXQ7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoIWNmZy0+aHdfY2Zn LT5wYXlsb2FkKSB7Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2sgJj0gfmFk NF9jZmc7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldCA9IGFkNF9jZmdfc2V0dXAoZHNwcCwgY2Zn KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogZW5mb3JjZSAwIGluaXRpYWwgc3Ry ZW5ndGggd2hlbiBwb3dlcmluZyB1cCBBRCBjb25maWcgKi8KLQkvKiBhc3NlcnRpdmVuZXNzICov Ci0JYmxrX29mZnNldCA9IDB4MzA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNh cC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIDB4MCk7Ci0JLyogdGYgY29udHJvbCAqLwot CWJsa19vZmZzZXQgPSAweDM0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAt PnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCAweDU1KTsKLQotCS8qIHZjX2NvbnRyb2xfMCAq LwotCWJsa19vZmZzZXQgPSAweDEzODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+ Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJaW5mb1tkc3BwLT5pZHhdLnZjX2Nv bnRyb2xfMCk7Ci0KLQlpbmZvW2RzcHAtPmlkeF0uY29tcGxldGVkX29wc19tYXNrIHw9IGFkNF9j Zmc7Ci0JaWYgKEFEX1NUQVRFX1JFQURZKGluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21h c2spKQotCQlhZDRfbW9kZV9zZXR1cChkc3BwLCBpbmZvW2RzcHAtPmlkeF0ubW9kZSk7Ci0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X2NmZ19zZXR1cF9ydW4oc3RydWN0IGRwdV9od19k c3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCWludCByZXQ7Ci0J dTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoIWNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCWluZm9b ZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2sgJj0gfmFkNF9jZmc7Ci0JCXJldHVybiAwOwot CX0KLQotCXJldCA9IGFkNF9jZmdfc2V0dXAoZHNwcCwgY2ZnKTsKLQlpZiAocmV0KQotCQlyZXR1 cm4gcmV0OwotCi0JLyogYXNzZXJ0aXZlbmVzcyAqLwotCWJsa19vZmZzZXQgPSAweDMwOwotCURQ VV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zm c2V0LAotCQkJaW5mb1tkc3BwLT5pZHhdLmxhc3RfYXNzZXJ0aXZlKTsKLQkvKiB0ZiBjb250cm9s ICovCi0JYmxrX29mZnNldCA9IDB4MzQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCWluZm9bZHNwcC0+aWR4XS50Zl9j dHJsKTsKLQkvKiB2Y19jb250cm9sXzAgKi8KLQlibGtfb2Zmc2V0ID0gMHgxMzg7Ci0JRFBVX1JF R19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQs Ci0JCWluZm9bZHNwcC0+aWR4XS52Y19jb250cm9sXzApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgYWQ0X2NmZ19zZXR1cF9pcGNyKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJ c3RydWN0IGRwdV9hZF9od19jZmcgKmNmZykKLXsKLQlpbnQgcmV0OwotCXUzMiBibGtfb2Zmc2V0 OwotCi0JaWYgKCFjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlpbmZvW2RzcHAtPmlkeF0uY29t cGxldGVkX29wc19tYXNrICY9IH5hZDRfY2ZnOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSBh ZDRfY2ZnX3NldHVwKGRzcHAsIGNmZyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8q IGFzc2VydGl2ZW5lc3MgKi8KLQlibGtfb2Zmc2V0ID0gMHgzMDsKLQlEUFVfUkVHX1dSSVRFKCZk c3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCWluZm9b ZHNwcC0+aWR4XS5sYXN0X2Fzc2VydGl2ZSk7Ci0KLQlpbmZvW2RzcHAtPmlkeF0uY29tcGxldGVk X29wc19tYXNrIHw9IGFkNF9jZmc7Ci0JaWYgKEFEX1NUQVRFX1JFQURZKGluZm9bZHNwcC0+aWR4 XS5jb21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1cChkc3BwLCBpbmZvW2RzcHAt PmlkeF0ubW9kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X2lucHV0X3NldHVw X2lkbGUoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAq Y2ZnKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBhZDRfaW5wdXRfc2V0dXAoZHNwcCwgY2ZnKTsK LQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaW5mb1tkc3BwLT5pZHhdLmNvbXBsZXRlZF9v cHNfbWFzayB8PSBhZDRfaW5wdXQ7Ci0JaWYgKEFEX1NUQVRFX1JFQURZKGluZm9bZHNwcC0+aWR4 XS5jb21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1cChkc3BwLCBpbmZvW2RzcHAt PmlkeF0ubW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRfaW5wdXRfc2V0 dXBfaXBjcihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2Zn ICpjZmcpCi17Ci0JdTY0ICp2YWwsIGFsczsKLQl1MzIgYmxrX29mZnNldDsKLQotCWlmIChjZmct Pmh3X2NmZy0+bGVuICE9IHNpemVvZih1NjQpICYmIGNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0J CURSTV9FUlJPUigiaW52YWxpZCBzeiBwYXJhbSBleHAgJXpkIGdpdmVuICVkIGNmZyAlcEtcbiIs Ci0JCQlzaXplb2YodTY0KSwgY2ZnLT5od19jZmctPmxlbiwgY2ZnLT5od19jZmctPnBheWxvYWQp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibGtfb2Zmc2V0ID0gMHgyODsKLQlpZiAoY2Zn LT5od19jZmctPnBheWxvYWQpIHsKLQkJdmFsID0gY2ZnLT5od19jZmctPnBheWxvYWQ7Ci0JfSBl bHNlIHsKLQkJYWxzID0gMDsKLQkJdmFsID0gJmFsczsKLQl9Ci0JaW5mb1tkc3BwLT5pZHhdLmNh Y2hlZF9hbHMgPSAqdmFsICYgKEJJVCgxNikgLSAxKTsKLQlpbmZvW2RzcHAtPmlkeF0uY29tcGxl dGVkX29wc19tYXNrIHw9IGFkNF9pbnB1dDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNw cC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCWluZm9bZHNwcC0+aWR4XS5s YXN0X2Fscyk7Ci0KLQlpZiAoQURfU1RBVEVfUkVBRFkoaW5mb1tkc3BwLT5pZHhdLmNvbXBsZXRl ZF9vcHNfbWFzaykpCi0JCWFkNF9tb2RlX3NldHVwKGRzcHAsIGluZm9bZHNwcC0+aWR4XS5tb2Rl KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9hc3NlcnRpdmVfc2V0dXAoc3Ry dWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewot CXU2NCAqdmFsLCBhc3NlcnRpdmU7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoY2ZnLT5od19j ZmctPmxlbiAhPSBzaXplb2YodTY0KSAmJiBjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1f RVJST1IoImludmFsaWQgc3ogcGFyYW0gZXhwICV6ZCBnaXZlbiAlZCBjZmcgJXBLXG4iLAotCQkJ c2l6ZW9mKHU2NCksIGNmZy0+aHdfY2ZnLT5sZW4sIGNmZy0+aHdfY2ZnLT5wYXlsb2FkKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYmxrX29mZnNldCA9IDB4MzA7Ci0JaWYgKGNmZy0+aHdf Y2ZnLT5wYXlsb2FkKSB7Ci0JCXZhbCA9IGNmZy0+aHdfY2ZnLT5wYXlsb2FkOwotCX0gZWxzZSB7 Ci0JCWFzc2VydGl2ZSA9IDA7Ci0JCXZhbCA9ICZhc3NlcnRpdmU7Ci0JfQotCi0JaW5mb1tkc3Bw LT5pZHhdLmxhc3RfYXNzZXJ0aXZlID0gKnZhbCAmIChCSVQoOCkgLSAxKTsKLQlEUFVfUkVHX1dS SVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJ CShpbmZvW2RzcHAtPmlkeF0ubGFzdF9hc3NlcnRpdmUpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCBhZDRfYXNzZXJ0aXZlX3NldHVwX2lwY3Ioc3RydWN0IGRwdV9od19kc3BwICpkc3Bw LAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXU2NCAqdmFsLCBhc3NlcnRpdmU7 Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoY2ZnLT5od19jZmctPmxlbiAhPSBzaXplb2YodTY0 KSAmJiBjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fRVJST1IoImludmFsaWQgc3ogcGFy YW0gZXhwICV6ZCBnaXZlbiAlZCBjZmcgJXBLXG4iLAotCQkJc2l6ZW9mKHU2NCksIGNmZy0+aHdf Y2ZnLT5sZW4sIGNmZy0+aHdfY2ZnLT5wYXlsb2FkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JYmxrX29mZnNldCA9IDB4MzA7Ci0JaWYgKGNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCXZh bCA9IGNmZy0+aHdfY2ZnLT5wYXlsb2FkOwotCX0gZWxzZSB7Ci0JCWFzc2VydGl2ZSA9IDA7Ci0J CXZhbCA9ICZhc3NlcnRpdmU7Ci0JfQotCi0JaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hc3NlcnRp dmUgPSAqdmFsICYgKEJJVCg4KSAtIDEpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3Bw LT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJaW5mb1tkc3BwLT5pZHhdLmxh c3RfYXNzZXJ0aXZlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9iYWNrbGln aHRfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2Nm ZyAqY2ZnKQotewotCXU2NCAqdmFsLCBibDsKLQl1MzIgYmxrX29mZnNldDsKLQotCWlmIChjZmct Pmh3X2NmZy0+bGVuICE9IHNpemVvZih1NjQpICYmIGNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0J CURSTV9FUlJPUigiaW52YWxpZCBzeiBwYXJhbSBleHAgJXpkIGdpdmVuICVkIGNmZyAlcEtcbiIs Ci0JCQlzaXplb2YodTY0KSwgY2ZnLT5od19jZmctPmxlbiwgY2ZnLT5od19jZmctPnBheWxvYWQp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibGtfb2Zmc2V0ID0gMHgyYzsKLQlpZiAoY2Zn LT5od19jZmctPnBheWxvYWQpIHsKLQkJdmFsID0gY2ZnLT5od19jZmctPnBheWxvYWQ7Ci0JfSBl bHNlIHsKLQkJYmwgPSAwOwotCQl2YWwgPSAmYmw7Ci0JfQotCi0JaW5mb1tkc3BwLT5pZHhdLmxh c3RfYmwgPSAqdmFsICYgKEJJVCgxNikgLSAxKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywg ZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCWluZm9bZHNwcC0+aWR4 XS5sYXN0X2JsKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRfYmFja2xpZ2h0X3Nl dHVwX2lwY3Ioc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2Nm ZyAqY2ZnKQotewotCXU2NCAqdmFsLCBibDsKLQl1MzIgYmxrX29mZnNldDsKLQotCWlmIChjZmct Pmh3X2NmZy0+bGVuICE9IHNpemVvZih1NjQpICYmIGNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0J CURSTV9FUlJPUigiaW52YWxpZCBzeiBwYXJhbSBleHAgJXpkIGdpdmVuICVkIGNmZyAlcEtcbiIs Ci0JCQlzaXplb2YodTY0KSwgY2ZnLT5od19jZmctPmxlbiwgY2ZnLT5od19jZmctPnBheWxvYWQp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibGtfb2Zmc2V0ID0gMHgyYzsKLQlpZiAoY2Zn LT5od19jZmctPnBheWxvYWQpIHsKLQkJdmFsID0gY2ZnLT5od19jZmctPnBheWxvYWQ7Ci0JfSBl bHNlIHsKLQkJYmwgPSAwOwotCQl2YWwgPSAmYmw7Ci0JfQotCi0JaW5mb1tkc3BwLT5pZHhdLmNh Y2hlZF9ibCA9ICp2YWwgJiAoQklUKDE2KSAtIDEpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3 LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJaW5mb1tkc3BwLT5p ZHhdLmxhc3RfYmwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHB1X3JlYWRfaW50cl9yZXNw X2FkNChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHUzMiBldmVudCwgdTMyICpyZXNwKQotewot CWlmICghZHNwcCB8fCAhcmVzcCkgewotCQlEUk1fRVJST1IoImludmFsaWQgcGFyYW1zIGRzcHAg JXBLIHJlc3AgJXBLXG4iLCBkc3BwLCByZXNwKTsKLQkJcmV0dXJuOwotCX0KLQotCXN3aXRjaCAo ZXZlbnQpIHsKLQljYXNlIEFENF9CQUNLTElHSFQ6Ci0JCSpyZXNwID0gRFBVX1JFR19SRUFEKCZk c3BwLT5odywKLQkJCQlkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyAweDQ4KTsKLQkJYnJlYWs7 Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50IGFkNF9pcGNfc3VzcGVu ZF9zZXR1cF9ydW4oc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3 X2NmZyAqY2ZnKQotewotCXUzMiBzdHJlbmd0aCA9IDAsIGkgPSAwOwotCXN0cnVjdCBkcHVfaHdf bWl4ZXIgKmh3X2xtOwotCi0JaHdfbG0gPSBjZmctPmh3X2NmZy0+bWl4ZXJfaW5mbzsKLQlpZiAo KGNmZy0+aHdfY2ZnLT5udW1fb2ZfbWl4ZXJzID09IDIpICYmIGh3X2xtLT5jZmcucmlnaHRfbWl4 ZXIpIHsKLQkJLyogdGhpcyBBRCBjb3JlIGlzIHRoZSBzYWx2ZSBjb3JlICovCi0JCWZvciAoaSA9 IERTUFBfMDsgaSA8IERTUFBfTUFYOyBpKyspIHsKLQkJCWlmIChpbmZvW2ldLmlzX21hc3Rlcikg ewotCQkJCXN0cmVuZ3RoID0gaW5mb1tpXS5sYXN0X3N0cjsKLQkJCQlicmVhazsKLQkJCX0KLQkJ fQotCX0gZWxzZSB7Ci0JCXN0cmVuZ3RoID0gRFBVX1JFR19SRUFEKCZkc3BwLT5odywKLQkJCQlk c3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyAweDRjKTsKLQkJcHJfZGVidWcoIiVzKCk6IEFEIHN0 cmVuZ3RoID0gJWRcbiIsIF9fZnVuY19fLCBzdHJlbmd0aCk7Ci0JfQotCWluZm9bZHNwcC0+aWR4 XS5sYXN0X3N0ciA9IHN0cmVuZ3RoOwotCWluZm9bZHNwcC0+aWR4XS5zdGF0ZSA9IGFkNF9zdGF0 ZV9pcGNzOwotCXByX2RlYnVnKCIlcygpOiBBRCBzdGF0ZSBtb3ZlIHRvIGlwY3NcbiIsIF9fZnVu Y19fKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9pcGNfcmVzdW1lX3NldHVw X2lwY3Moc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAq Y2ZnKQotewotCXUzMiBibGtfb2Zmc2V0LCB2YWw7Ci0KLQlpbmZvW2RzcHAtPmlkeF0uZnJhbWVf Y291bnQgPSAwOwotCWluZm9bZHNwcC0+aWR4XS5zdGF0ZSA9IGFkNF9zdGF0ZV9pcGNyOwotCXBy X2RlYnVnKCIlcygpOiBBRCBzdGF0ZSBtb3ZlIHRvIGlwY3JcbiIsIF9fZnVuY19fKTsKLQotCS8q IG5vIG5lZWQgdG8gcmV3cml0ZSBmcm10X21vZGUgYml0IDEzIGFuZCBtZW1faW5pdCwKLQkgKiBz aW5jZSB0aGUgZGVmYXVsdCByZWdpc3RlciB2YWx1ZXMgYXJlIGV4YWN0bHkgd2hhdAotCSAqIHdl IHdhbnRlZC4KLQkgKi8KLQotCS8qIGlwYyByZXN1bWUgd2l0aCBtYW51YWwgc3RyZW5ndGggKi8K LQkvKiB0ZiBjb250cm9sICovCi0JYmxrX29mZnNldCA9IDB4MzQ7Ci0JdmFsID0gKDB4NTUgJiAo QklUKDgpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGst PmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCS8qIHNldCBtYW51YWwgc3RyZW5ndGggKi8K LQlibGtfb2Zmc2V0ID0gMHgxNWM7Ci0JdmFsID0gKGluZm9bZHNwcC0+aWR4XS5sYXN0X3N0ciAm IChCSVQoMTApIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNi bGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCS8qIGVuYWJsZSBtYW51YWwgbW9kZSAq LwotCWJsa19vZmZzZXQgPSAweDEzODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+ Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCBhZDRfaXBjX3N1c3BlbmRfc2V0dXBfaXBjcihzdHJ1Y3QgZHB1X2h3X2RzcHAg KmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpCi17Ci0JaW5mb1tkc3BwLT5pZHhd LnN0YXRlID0gYWQ0X3N0YXRlX2lwY3M7Ci0JcHJfZGVidWcoIiVzKCk6IEFEIHN0YXRlIG1vdmUg dG8gaXBjc1xuIiwgX19mdW5jX18pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9p cGNfcmVzZXRfc2V0dXBfaXBjcihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBk cHVfYWRfaHdfY2ZnICpjZmcpCi17Ci0JaW50IHJldDsKLQl1MzIgc3RyZW5ndGggPSAwLCBpID0g MDsKLQlzdHJ1Y3QgZHB1X2h3X21peGVyICpod19sbTsKLQotCS8qIFJlYWQgQUQgY2FsY3VsYXRv ciBzdHJlbmd0aCBvdXRwdXQgZHVyaW5nIHRoZSAyIGZyYW1lcyBvZiBtYW51YWwKLQkgKiBzdHJl bmd0aCBtb2RlLCBhbmQgYXNzaWduIHRoZSBzdHJlbmd0aCBvdXRwdXQgdG8gbGFzdF9zdHIKLQkg KiB3aGVuIGZyYW1lIGNvdW50IHJlYWNoZXMgQURfSVBDX0ZSQU1FX0NPVU5UIHRvIGF2b2lkIGZs aWNrZXJzCi0JICogY2F1c2VkIGJ5IHN0cmVuZ3RoIHdhcyBub3QgY29udmVyZ2VkIGJlZm9yZSBl bnRlcmluZyBJUEMgbW9kZQotCSAqLwotCWh3X2xtID0gY2ZnLT5od19jZmctPm1peGVyX2luZm87 Ci0JaWYgKChjZmctPmh3X2NmZy0+bnVtX29mX21peGVycyA9PSAyKSAmJiBod19sbS0+Y2ZnLnJp Z2h0X21peGVyKSB7Ci0JCS8qIHRoaXMgQUQgY29yZSBpcyB0aGUgc2FsdmUgY29yZSAqLwotCQlm b3IgKGkgPSBEU1BQXzA7IGkgPCBEU1BQX01BWDsgaSsrKSB7Ci0JCQlpZiAoaW5mb1tpXS5pc19t YXN0ZXIpIHsKLQkJCQlzdHJlbmd0aCA9IGluZm9baV0ubGFzdF9zdHI7Ci0JCQkJYnJlYWs7Ci0J CQl9Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJlbmd0aCA9IERQVV9SRUdfUkVBRCgmZHNwcC0+aHcs Ci0JCQkJZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgMHg0Yyk7Ci0JCXByX2RlYnVnKCIlcygp OiBBRCBzdHJlbmd0aCA9ICVkXG4iLCBfX2Z1bmNfXywgc3RyZW5ndGgpOwotCX0KLQotCWlmIChp bmZvW2RzcHAtPmlkeF0uZnJhbWVfY291bnQgPT0gQURfSVBDX0ZSQU1FX0NPVU5UKSB7Ci0JCWlu Zm9bZHNwcC0+aWR4XS5zdGF0ZSA9IGFkNF9zdGF0ZV9ydW47Ci0JCXByX2RlYnVnKCIlcygpOiBB RCBzdGF0ZSBtb3ZlIHRvIHJ1blxuIiwgX19mdW5jX18pOwotCQlpbmZvW2RzcHAtPmlkeF0ubGFz dF9zdHIgPSBzdHJlbmd0aDsKLQkJcmV0ID0gYWQ0X2NmZ19pcGNfcmVzZXQoZHNwcCwgY2ZnKTsK LQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfSBlbHNlIHsKLQkJaW5mb1tkc3BwLT5pZHhd LmZyYW1lX2NvdW50Kys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X2Nm Z19pcGNfcmVzZXQoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3 X2NmZyAqY2ZnKQotewotCXUzMiBibGtfb2Zmc2V0OwotCi0JLyogcmV2ZXJ0IG1hbnVhbCBzdHJl bmd0aCAqLwotCS8qIHRmIGNvbnRyb2wgKi8KLQlibGtfb2Zmc2V0ID0gMHgzNDsKLQlEUFVfUkVH X1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwK LQkJaW5mb1tkc3BwLT5pZHhdLnRmX2N0cmwpOwotCS8qIHZjX2NvbnRyb2xfMCAqLwotCWJsa19v ZmZzZXQgPSAweDEzODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxr LT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJaW5mb1tkc3BwLT5pZHhdLnZjX2NvbnRyb2xfMCk7 Ci0KLQkvKiByZXNldCBjYWNoZWQgQUxTLCBiYWNrbGlnaHQgYW5kIGFzc2VydGl2ZW5lc3MgKi8K LQlpZiAoaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hbHMgIT0gVTY0X01BWCkgewotCQlEUFVfUkVH X1dSSVRFKCZkc3BwLT5odywKLQkJCQlkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyAweDI4LAot CQkJCWluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYWxzKTsKLQkJaW5mb1tkc3BwLT5pZHhdLmxhc3Rf YWxzID0gaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hbHM7Ci0JCWluZm9bZHNwcC0+aWR4XS5jYWNo ZWRfYWxzID0gVTY0X01BWDsKLQl9Ci0JaWYgKGluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYmwgIT0g VTY0X01BWCkgewotCQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywKLQkJCQlkc3BwLT5jYXAtPnNi bGstPmFkLmJhc2UgKyAweDJjLAotCQkJCWluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYmwpOwotCQlp bmZvW2RzcHAtPmlkeF0ubGFzdF9ibCA9IGluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYmw7Ci0JCWlu Zm9bZHNwcC0+aWR4XS5jYWNoZWRfYmwgPSBVNjRfTUFYOwotCX0KLQlpZiAoaW5mb1tkc3BwLT5p ZHhdLmNhY2hlZF9hc3NlcnRpdmUgIT0gVThfTUFYKSB7Ci0JCURQVV9SRUdfV1JJVEUoJmRzcHAt Pmh3LAotCQkJCWRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIDB4MzAsCi0JCQkJaW5mb1tkc3Bw LT5pZHhdLmNhY2hlZF9hc3NlcnRpdmUpOwotCQlpbmZvW2RzcHAtPmlkeF0ubGFzdF9hc3NlcnRp dmUgPQotCQkJCWluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYXNzZXJ0aXZlOwotCQlpbmZvW2RzcHAt PmlkeF0uY2FjaGVkX2Fzc2VydGl2ZSA9IFU4X01BWDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCBhZDRfaXBjX3Jlc2V0X3NldHVwX3N0YXJ0dXAoc3RydWN0IGRwdV9od19kc3Bw ICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUzMiBibGtfb2Zmc2V0 OwotCi0JaWYgKGluZm9bZHNwcC0+aWR4XS5mcmFtZV9jb3VudCA9PSBBRF9JUENfRlJBTUVfQ09V TlQpIHsKLQkJaW5mb1tkc3BwLT5pZHhdLnN0YXRlID0gYWQ0X3N0YXRlX3J1bjsKLQkJcHJfZGVi dWcoIiVzKCk6IEFEIHN0YXRlIG1vdmUgdG8gcnVuXG4iLCBfX2Z1bmNfXyk7Ci0KLQkJLyogcmV2 ZXJ0IGVuZm9yY2UgMCBpbml0aWFsIHN0cmVuZ3RoICovCi0JCS8qIGlyZHhfY29udHJvbF8wICov Ci0JCWJsa19vZmZzZXQgPSAweDEzYzsKLQkJRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkJaW5mb1tkc3BwLT5pZHhdLmly ZHhfY29udHJvbF8wKTsKLQkJLyogYXNzZXJ0aXZlbmVzcyAqLwotCQlibGtfb2Zmc2V0ID0gMHgz MDsKLQkJRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSAr IGJsa19vZmZzZXQsCi0JCQkJaW5mb1tkc3BwLT5pZHhdLmxhc3RfYXNzZXJ0aXZlKTsKLQkJLyog dGYgY29udHJvbCAqLwotCQlibGtfb2Zmc2V0ID0gMHgzNDsKLQkJRFBVX1JFR19XUklURSgmZHNw cC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkJaW5mb1tk c3BwLT5pZHhdLnRmX2N0cmwpOwotCX0gZWxzZSB7Ci0JCWluZm9bZHNwcC0+aWR4XS5mcmFtZV9j b3VudCsrOwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19jYXRhbG9nLmMKaW5kZXggMWMwOTU5Zi4uMGZiMGIyNyAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jCkBAIC0zMiwxNCAr MzIsNiBAQAogI2RlZmluZSBNSVhFUl9TRE04NDVfTUFTSyBcCiAJKEJJVChEUFVfTUlYRVJfU09V UkNFU1BMSVQpIHwgQklUKERQVV9ESU1fTEFZRVIpKQogCi0jZGVmaW5lIERTUFBfU0RNODQ1X01B U0sgXAotCShCSVQoRFBVX0RTUFBfSUdDKSB8IEJJVChEUFVfRFNQUF9QQ0MpIHwgQklUKERQVV9E U1BQX0dDKSB8XAotCUJJVChEUFVfRFNQUF9IU0lDKSB8IEJJVChEUFVfRFNQUF9HQU1VVCkgfCBC SVQoRFBVX0RTUFBfSElTVCkgfFwKLQlCSVQoRFBVX0RTUFBfTUVNQ09MT1IpIHwgQklUKERQVV9E U1BQX1NJWFpPTkUpIHwgQklUKERQVV9EU1BQX1ZMVVQpKQotCi0jZGVmaW5lIERTUFBfQURfU0RN ODQ1X01BU0sgXAotCShEU1BQX1NETTg0NV9NQVNLIHwgQklUKERQVV9EU1BQX0FEKSkKLQogI2Rl ZmluZSBQSU5HUE9OR19TRE04NDVfTUFTSyBCSVQoRFBVX1BJTkdQT05HX0RJVEhFUikKIAogI2Rl ZmluZSBQSU5HUE9OR19TRE04NDVfU1BMSVRfTUFTSyBcCkBAIC0yMzUsNzYgKzIyNywzMyBAQAog CX0sCiB9OwogCi0jZGVmaW5lIExNX0JMSyhfbmFtZSwgX2lkLCBfYmFzZSwgX2RzcHAsIF9kcywg X3BwLCBfbG1wYWlyKSBcCisjZGVmaW5lIExNX0JMSyhfbmFtZSwgX2lkLCBfYmFzZSwgX2RzLCBf cHAsIF9sbXBhaXIpIFwKIAl7IFwKIAkubmFtZSA9IF9uYW1lLCAuaWQgPSBfaWQsIFwKIAkuYmFz ZSA9IF9iYXNlLCAubGVuID0gMHgzMjAsIFwKIAkuZmVhdHVyZXMgPSBNSVhFUl9TRE04NDVfTUFT SywgXAogCS5zYmxrID0gJnNkbTg0NV9sbV9zYmxrLCBcCi0JLmRzcHAgPSBfZHNwcCwgLmRzID0g X2RzLCBcCisJLmRzID0gX2RzLCBcCiAJLnBpbmdwb25nID0gX3BwLCBcCiAJLmxtX3BhaXJfbWFz ayA9ICgxIDw8IF9sbXBhaXIpIFwKIAl9CisKIHN0YXRpYyBzdHJ1Y3QgZHB1X2xtX2NmZyBzZG04 NDVfbG1bXSA9IHsKLQlMTV9CTEsoImxtXzAiLCBMTV8wLCAweDQ1MDAwLCBEU1BQXzAsCisJTE1f QkxLKCJsbV8wIiwgTE1fMCwgMHg0NTAwMCwKIAkJRFNfMCwgUElOR1BPTkdfMCwgTE1fMSksCi0J TE1fQkxLKCJsbV8xIiwgTE1fMSwgMHg0NjAwMCwgRFNQUF8xLAorCUxNX0JMSygibG1fMSIsIExN XzEsIDB4NDYwMDAsCiAJCURTXzEsIFBJTkdQT05HXzEsIExNXzApLAotCUxNX0JMSygibG1fMiIs IExNXzIsIDB4NDcwMDAsIERTUFBfMiwKKwlMTV9CTEsoImxtXzIiLCBMTV8yLCAweDQ3MDAwLAog CQlEU19NQVgsIFBJTkdQT05HXzIsIExNXzUpLAotCUxNX0JMSygibG1fMyIsIExNXzMsIDB4MCwg RFNQUF9NQVgsCisJTE1fQkxLKCJsbV8zIiwgTE1fMywgMHgwLAogCQlEU19NQVgsIFBJTkdQT05H X01BWCwgMCksCi0JTE1fQkxLKCJsbV80IiwgTE1fNCwgMHgwLCBEU1BQX01BWCwKKwlMTV9CTEso ImxtXzQiLCBMTV80LCAweDAsCiAJCURTX01BWCwgUElOR1BPTkdfTUFYLCAwKSwKLQlMTV9CTEso ImxtXzUiLCBMTV81LCAweDRhMDAwLCBEU1BQXzMsCisJTE1fQkxLKCJsbV81IiwgTE1fNSwgMHg0 YTAwMCwKIAkJRFNfTUFYLCBQSU5HUE9OR18zLCBMTV8yKSwKIH07CiAKIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEU1BQ IHN1YiBibG9ja3MgY29uZmlnCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgZHB1X2RzcHBfdG9wX2Nm ZyBzZG04NDVfZHNwcF90b3AgPSB7Ci0JLm5hbWUgPSAiZHNwcF90b3AiLCAuYmFzZSA9IDB4MTMw MCwgLmxlbiA9IDB4YwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfZHNwcF9zdWJfYmxr cyBzZG04NDVfZHNwcF9zYmxrID0gewotCS5pZ2MgPSB7LmlkID0gRFBVX0RTUFBfSUdDLCAuYmFz ZSA9IDB4MCwKLQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDMwMDAxfSwKLQkucGNjID0gey5p ZCA9IERQVV9EU1BQX1BDQywgLmJhc2UgPSAweDE3MDAsCi0JCS5sZW4gPSAweDAsIC52ZXJzaW9u ID0gMHg0MDAwMH0sCi0JLmdjID0gey5pZCA9IERQVV9EU1BQX0dDLCAuYmFzZSA9IDB4MTdjMCwK LQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA4fSwKLQkuaHNpYyA9IHsuaWQgPSBEUFVf RFNQUF9IU0lDLCAuYmFzZSA9IDB4ODAwLAotCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4MTAw MDd9LAotCS5tZW1jb2xvciA9IHsuaWQgPSBEUFVfRFNQUF9NRU1DT0xPUiwgLmJhc2UgPSAweDg4 MCwKLQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA3fSwKLQkuc2l4em9uZSA9IHsuaWQg PSBEUFVfRFNQUF9TSVhaT05FLCAuYmFzZSA9IDB4OTAwLAotCQkubGVuID0gMHgwLCAudmVyc2lv biA9IDB4MTAwMDd9LAotCS5nYW11dCA9IHsuaWQgPSBEUFVfRFNQUF9HQU1VVCwgLmJhc2UgPSAw eDEwMDAsCi0JCS5sZW4gPSAweDAsIC52ZXJzaW9uID0gMHg0MDAwMH0sCi0JLmhpc3QgPSB7Lmlk ID0gRFBVX0RTUFBfSElTVCwgLmJhc2UgPSAweDgwMCwKLQkJLmxlbiA9IDB4MCwgLnZlcnNpb24g PSAweDEwMDA3fSwKLQkvKiBUT0RPIDogTW92ZSBBRCBvdXQgb2YgRFNQUCBjb25maWcgKi8KLQku dmx1dCA9IHsuaWQgPSBEUFVfRFNQUF9WTFVULCAuYmFzZSA9IDB4YTAwLAotCQkubGVuID0gMHgw LCAudmVyc2lvbiA9IDB4MTAwMDh9LAotfTsKLQotI2RlZmluZSBEU1BQX0JMSyhfbmFtZSwgX2lk LCBfYmFzZSkgXAotCXtcCi0JLm5hbWUgPSBfbmFtZSwgLmlkID0gX2lkLCBcCi0JLmJhc2UgPSBf YmFzZSwgLmxlbiA9IDB4MTdlMCwgXAotCS5mZWF0dXJlcyA9IERTUFBfU0RNODQ1X01BU0ssIFwK LQkuc2JsayA9ICZzZG04NDVfZHNwcF9zYmxrLCBcCi0JfQotCi1zdGF0aWMgc3RydWN0IGRwdV9k c3BwX2NmZyBzZG04NDVfZHNwcFtdID0gewotCURTUFBfQkxLKCJkc3BwXzAiLCBEU1BQXzAsIDB4 NTUwMDApLAotCURTUFBfQkxLKCJkc3BwXzEiLCBEU1BQXzEsIDB4NTcwMDApLAotCURTUFBfQkxL KCJkc3BwXzIiLCBEU1BQXzIsIDB4NTkwMDApLAotCURTUFBfQkxLKCJkc3BwXzMiLCBEU1BQXzMs IDB4NWIwMDApLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKICAqIERTIHN1YiBibG9ja3MgY29uZmlnCiAgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K IHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2RzX3RvcF9jZmcgc2RtODQ1X2RzX3RvcCA9IHsKQEAg LTUxOCw5ICs0NjcsNiBAQCB2b2lkIHNkbTg0NV9jZmdfaW5pdChzdHJ1Y3QgZHB1X21kc3NfY2Zn ICpkcHVfY2ZnKQogCQkuc3NwcCA9IHNkbTg0NV9zc3BwLAogCQkubWl4ZXJfY291bnQgPSBBUlJB WV9TSVpFKHNkbTg0NV9sbSksCiAJCS5taXhlciA9IHNkbTg0NV9sbSwKLQkJLmRzcHBfdG9wID0g c2RtODQ1X2RzcHBfdG9wLAotCQkuZHNwcF9jb3VudCA9IEFSUkFZX1NJWkUoc2RtODQ1X2RzcHAp LAotCQkuZHNwcCA9IHNkbTg0NV9kc3BwLAogCQkuZHNfY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0 NV9kcyksCiAJCS5kcyA9IHNkbTg0NV9kcywKIAkJLnBpbmdwb25nX2NvdW50ID0gQVJSQVlfU0la RShzZG04NDVfcHApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X2NhdGFsb2cuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19j YXRhbG9nLmgKaW5kZXggMjQ4YmRhYi4uZjBjYjBkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5oCkBAIC02MywxMSArNjMsNiBAQAogCiAjZGVm aW5lIENSVENfRFVBTF9NSVhFUlMJMgogCi0jZGVmaW5lIERQVV9DT0xPUl9QUk9DRVNTX1ZFUihN QUpPUiwgTUlOT1IpIFwKLQkJKCgoKE1BSk9SKSAmIDB4RkZGRikgPDwgMTYpIHwgKCgoTUlOT1Ip ICYgMHhGRkZGKSkpCi0jZGVmaW5lIERQVV9DT0xPUl9QUk9DRVNTX01BSk9SKHZlcnNpb24pICgo KHZlcnNpb24pICYgMHhGRkZGMDAwMCkgPj4gMTYpCi0jZGVmaW5lIERQVV9DT0xPUl9QUk9DRVNT X01JTk9SKHZlcnNpb24pICgodmVyc2lvbikgJiAweEZGRkYpCi0KICNkZWZpbmUgTUFYX1hJTl9D T1VOVCAxNgogCiAvKioKQEAgLTEwOSwxMCArMTA0LDYgQEAgZW51bSB7CiAgKiBARFBVX1NTUFBf U0NBTEVSX1JHQiwgICAgIFJHQiBTY2FsZXIsIHN1cHBvcnRlZCBieSBSR0IgcGlwZXMKICAqIEBE UFVfU1NQUF9DU0MsICAgICAgICAgICAgU3VwcG9ydCBvZiBDb2xvciBzcGFjZSBjb252ZXJpb24K ICAqIEBEUFVfU1NQUF9DU0NfMTBCSVQsICAgICAgU3VwcG9ydCBvZiAxMC1iaXQgQ29sb3Igc3Bh Y2UgY29udmVyc2lvbgotICogQERQVV9TU1BQX0hTSUMsICAgICAgICAgICBHbG9iYWwgSFNJQyBj b250cm9sCi0gKiBARFBVX1NTUFBfTUVNQ09MT1IgICAgICAgIE1lbW9yeSBDb2xvciBTdXBwb3J0 Ci0gKiBARFBVX1NTUFBfSUdDLCAgICAgICAgICAgIEludmVyc2UgZ2FtbWEgY29ycmVjdGlvbgot ICogQERQVV9TU1BQX1BDQywgICAgICAgICAgICBDb2xvciBjb3JyZWN0aW9uIHN1cHBvcnQKICAq IEBEUFVfU1NQUF9DVVJTT1IsICAgICAgICAgU1NQUCBjYW4gYmUgdXNlZCBhcyBhIGN1cnNvciBs YXllcgogICogQERQVV9TU1BQX1FPUywgICAgICAgICAgICBTU1BQIHN1cHBvcnQgUW9TIGNvbnRy b2wsIGRhbmdlci9zYWZlL2NyZXEKICAqIEBEUFVfU1NQUF9RT1NfOExWTCwgICAgICAgU1NQUCBz dXBwb3J0IDgtbGV2ZWwgUW9TIGNvbnRyb2wKQEAgLTEzMSwxMCArMTIyLDYgQEAgZW51bSB7CiAJ RFBVX1NTUFBfU0NBTEVSX1JHQiwKIAlEUFVfU1NQUF9DU0MsCiAJRFBVX1NTUFBfQ1NDXzEwQklU LAotCURQVV9TU1BQX0hTSUMsCi0JRFBVX1NTUFBfTUVNQ09MT1IsCi0JRFBVX1NTUFBfSUdDLAot CURQVV9TU1BQX1BDQywKIAlEUFVfU1NQUF9DVVJTT1IsCiAJRFBVX1NTUFBfUU9TLAogCURQVV9T U1BQX1FPU184TFZMLApAQCAtMTY0LDM2ICsxNTEsNiBAQCBlbnVtIHsKIH07CiAKIC8qKgotICog RFNQUCBzdWItYmxvY2tzCi0gKiBARFBVX0RTUFBfSUdDICAgICAgICAgICAgIERTUFAgSW52ZXJz ZSBnYW1tYSBjb3JyZWN0aW9uIGJsb2NrCi0gKiBARFBVX0RTUFBfUENDICAgICAgICAgICAgIFBh bmVsIGNvbG9yIGNvcnJlY3Rpb24gYmxvY2sKLSAqIEBEUFVfRFNQUF9HQyAgICAgICAgICAgICAg R2FtbWEgY29ycmVjdGlvbiBibG9jawotICogQERQVV9EU1BQX0hTSUMgICAgICAgICAgICBHbG9i YWwgSFNJQyBibG9jawotICogQERQVV9EU1BQX01FTUNPTE9SICAgICAgICBNZW1vcnkgQ29sb3Ig YmxvY2sKLSAqIEBEUFVfRFNQUF9TSVhaT05FICAgICAgICAgU2l4IHpvbmUgYmxvY2sKLSAqIEBE UFVfRFNQUF9HQU1VVCAgICAgICAgICAgR2FtdXQgYmxvYwotICogQERQVV9EU1BQX0RJVEhFUiAg ICAgICAgICBEaXRoZXIgYmxvY2sKLSAqIEBEUFVfRFNQUF9ISVNUICAgICAgICAgICAgSGlzdG9n cmFtIGJsb2NrCi0gKiBARFBVX0RTUFBfVkxVVCAgICAgICAgICAgIFBBIFZMVVQgYmxvY2sKLSAq IEBEUFVfRFNQUF9BRCAgICAgICAgICAgICAgQUQgYmxvY2sKLSAqIEBEUFVfRFNQUF9NQVggICAg ICAgICAgICAgbWF4aW11bSB2YWx1ZQotICovCi1lbnVtIHsKLQlEUFVfRFNQUF9JR0MgPSAweDEs Ci0JRFBVX0RTUFBfUENDLAotCURQVV9EU1BQX0dDLAotCURQVV9EU1BQX0hTSUMsCi0JRFBVX0RT UFBfTUVNQ09MT1IsCi0JRFBVX0RTUFBfU0lYWk9ORSwKLQlEUFVfRFNQUF9HQU1VVCwKLQlEUFVf RFNQUF9ESVRIRVIsCi0JRFBVX0RTUFBfSElTVCwKLQlEUFVfRFNQUF9WTFVULAotCURQVV9EU1BQ X0FELAotCURQVV9EU1BQX01BWAotfTsKLQotLyoqCiAgKiBQSU5HUE9ORyBzdWItYmxvY2tzCiAg KiBARFBVX1BJTkdQT05HX1RFICAgICAgICAgVGVhciBjaGVjayBibG9jawogICogQERQVV9QSU5H UE9OR19URTIgICAgICAgIEFkZGl0aW9uYWwgdGVhciBjaGVjayBibG9jayBmb3Igc3BsaXQgcGlw ZXMKQEAgLTQyNywyMCArMzg0LDYgQEAgc3RydWN0IGRwdV9sbV9zdWJfYmxrcyB7CiAJc3RydWN0 IGRwdV9wcF9ibGsgZ2M7CiB9OwogCi1zdHJ1Y3QgZHB1X2RzcHBfc3ViX2Jsa3MgewotCXN0cnVj dCBkcHVfcHBfYmxrIGlnYzsKLQlzdHJ1Y3QgZHB1X3BwX2JsayBwY2M7Ci0Jc3RydWN0IGRwdV9w cF9ibGsgZ2M7Ci0Jc3RydWN0IGRwdV9wcF9ibGsgaHNpYzsKLQlzdHJ1Y3QgZHB1X3BwX2JsayBt ZW1jb2xvcjsKLQlzdHJ1Y3QgZHB1X3BwX2JsayBzaXh6b25lOwotCXN0cnVjdCBkcHVfcHBfYmxr IGdhbXV0OwotCXN0cnVjdCBkcHVfcHBfYmxrIGRpdGhlcjsKLQlzdHJ1Y3QgZHB1X3BwX2JsayBo aXN0OwotCXN0cnVjdCBkcHVfcHBfYmxrIGFkOwotCXN0cnVjdCBkcHVfcHBfYmxrIHZsdXQ7Ci19 OwotCiBzdHJ1Y3QgZHB1X3Bpbmdwb25nX3N1Yl9ibGtzIHsKIAlzdHJ1Y3QgZHB1X3BwX2JsayB0 ZTsKIAlzdHJ1Y3QgZHB1X3BwX2JsayB0ZTI7CkBAIC01MzAsNyArNDczLDYgQEAgc3RydWN0IGRw dV9zc3BwX2NmZyB7CiAgKiBAYmFzZSAgICAgICAgICAgICAgIHJlZ2lzdGVyIG9mZnNldCBvZiB0 aGlzIGJsb2NrCiAgKiBAZmVhdHVyZXMgICAgICAgICAgIGJpdCBtYXNrIGlkZW50aWZ5aW5nIHN1 Yi1ibG9ja3MvZmVhdHVyZXMKICAqIEBzYmxrOiAgICAgICAgICAgICAgTE0gU3ViLWJsb2NrcyBp bmZvcm1hdGlvbgotICogQGRzcHA6ICAgICAgICAgICAgICBJRCBvZiBjb25uZWN0ZWQgRFNQUCwg RFNQUF9NQVggaWYgdW5zdXBwb3J0ZWQKICAqIEBwaW5ncG9uZzogICAgICAgICAgSUQgb2YgY29u bmVjdGVkIFBpbmdQb25nLCBQSU5HUE9OR19NQVggaWYgdW5zdXBwb3J0ZWQKICAqIEBkczogICAg ICAgICAgICAgICAgSUQgb2YgY29ubmVjdGVkIERTLCBEU19NQVggaWYgdW5zdXBwb3J0ZWQKICAq IEBsbV9wYWlyX21hc2s6ICAgICAgQml0bWFzayBvZiBMTXMgdGhhdCBjYW4gYmUgY29udHJvbGxl ZCBieSBzYW1lIENUTApAQCAtNTM4LDM3ICs0ODAsMTIgQEAgc3RydWN0IGRwdV9zc3BwX2NmZyB7 CiBzdHJ1Y3QgZHB1X2xtX2NmZyB7CiAJRFBVX0hXX0JMS19JTkZPOwogCWNvbnN0IHN0cnVjdCBk cHVfbG1fc3ViX2Jsa3MgKnNibGs7Ci0JdTMyIGRzcHA7CiAJdTMyIHBpbmdwb25nOwogCXUzMiBk czsKIAl1bnNpZ25lZCBsb25nIGxtX3BhaXJfbWFzazsKIH07CiAKIC8qKgotICogc3RydWN0IGRw dV9kc3BwX2NmZyAtIGluZm9ybWF0aW9uIG9mIERTUFAgdG9wIGJsb2NrCi0gKiBAaWQgICAgICAg ICAgICAgICAgIGVudW0gaWRlbnRpZnlpbmcgdGhpcyBibG9jawotICogQGJhc2UgICAgICAgICAg ICAgICByZWdpc3RlciBvZmZzZXQgb2YgdGhpcyBibG9jawotICogQGZlYXR1cmVzICAgICAgICAg ICBiaXQgbWFzayBpZGVudGlmeWluZyBzdWItYmxvY2tzL2ZlYXR1cmVzCi0gKiAgICAgICAgICAg ICAgICAgICAgIHN1cHBvcnRlZCBieSB0aGlzIGJsb2NrCi0gKi8KLXN0cnVjdCBkcHVfZHNwcF90 b3BfY2ZnICB7Ci0JRFBVX0hXX0JMS19JTkZPOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2Rz cHBfY2ZnIC0gaW5mb3JtYXRpb24gb2YgRFNQUCBibG9ja3MKLSAqIEBpZCAgICAgICAgICAgICAg ICAgZW51bSBpZGVudGlmeWluZyB0aGlzIGJsb2NrCi0gKiBAYmFzZSAgICAgICAgICAgICAgIHJl Z2lzdGVyIG9mZnNldCBvZiB0aGlzIGJsb2NrCi0gKiBAZmVhdHVyZXMgICAgICAgICAgIGJpdCBt YXNrIGlkZW50aWZ5aW5nIHN1Yi1ibG9ja3MvZmVhdHVyZXMKLSAqICAgICAgICAgICAgICAgICAg ICAgc3VwcG9ydGVkIGJ5IHRoaXMgYmxvY2sKLSAqIEBzYmxrICAgICAgICAgICAgICAgc3ViLWJs b2NrcyBpbmZvcm1hdGlvbgotICovCi1zdHJ1Y3QgZHB1X2RzcHBfY2ZnICB7Ci0JRFBVX0hXX0JM S19JTkZPOwotCWNvbnN0IHN0cnVjdCBkcHVfZHNwcF9zdWJfYmxrcyAqc2JsazsKLX07Ci0KLS8q KgogICogc3RydWN0IGRwdV9kc190b3BfY2ZnIC0gaW5mb3JtYXRpb24gb2YgZGVzdCBzY2FsZXIg dG9wCiAgKiBAaWQgICAgICAgICAgICAgICBlbnVtIGlkZW50aWZ5aW5nIHRoaXMgYmxvY2sKICAq IEBiYXNlICAgICAgICAgICAgIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGlzIGJsb2NrCkBAIC04MTEs MTEgKzcyOCw2IEBAIHN0cnVjdCBkcHVfbWRzc19jZmcgewogCXUzMiBtaXhlcl9jb3VudDsKIAlz dHJ1Y3QgZHB1X2xtX2NmZyAqbWl4ZXI7CiAKLQlzdHJ1Y3QgZHB1X2RzcHBfdG9wX2NmZyBkc3Bw X3RvcDsKLQotCXUzMiBkc3BwX2NvdW50OwotCXN0cnVjdCBkcHVfZHNwcF9jZmcgKmRzcHA7Ci0K IAl1MzIgZHNfY291bnQ7CiAJc3RydWN0IGRwdV9kc19jZmcgKmRzOwogCkBAIC04NTksNyArNzcx LDYgQEAgc3RydWN0IGRwdV9tZHNzX2h3X2NmZ19oYW5kbGVyIHsKICNkZWZpbmUgQkxLX0RNQShz KSAoKHMpLT5kbWEpCiAjZGVmaW5lIEJMS19DVVJTT1IocykgKChzKS0+Y3Vyc29yKQogI2RlZmlu ZSBCTEtfTUlYRVIocykgKChzKS0+bWl4ZXIpCi0jZGVmaW5lIEJMS19EU1BQKHMpICgocyktPmRz cHApCiAjZGVmaW5lIEJMS19EUyhzKSAoKHMpLT5kcykKICNkZWZpbmUgQkxLX1BJTkdQT05HKHMp ICgocyktPnBpbmdwb25nKQogI2RlZmluZSBCTEtfQ0RNKHMpICgocyktPmNkbSkKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jX2NvbW1v bl92NC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nf Y29tbW9uX3Y0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NWU2NzUuLjAwMDAw MDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nf Y29tbW9uX3Y0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKiBDb3B5cmlnaHQg KGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfRFBVX0hXX0NPTE9SX1BST0NfQ09NTU9OX1Y0X0hf Ci0jZGVmaW5lIF9EUFVfSFdfQ09MT1JfUFJPQ19DT01NT05fVjRfSF8KLQotI2RlZmluZSBHQU1V VF9UQUJMRV9TRUxfT0ZGIDB4NAotI2RlZmluZSBHQU1VVF9VUFBFUl9DT0xPUl9PRkYgMHg4Ci0j ZGVmaW5lIEdBTVVUX0xPV0VSX0NPTE9SX09GRiAweGMKLSNkZWZpbmUgR0FNVVRfU0NBTEVBX09G RlNFVF9PRkYgMHgxMAotI2RlZmluZSBHQU1VVF9TQ0FMRUJfT0ZGU0VUX09GRiAweGUwCi0jZGVm aW5lIEdBTVVUX1RBQkxFMF9TRUwgQklUKDEyKQotI2RlZmluZSBHQU1VVF9NQVBfRU4gQklUKDEp Ci0jZGVmaW5lIEdBTVVUX0VOIEJJVCgwKQotI2RlZmluZSBHQU1VVF9NT0RFXzEzQl9PRkYgNjQw Ci0jZGVmaW5lIEdBTVVUX01PREVfNV9PRkYgMTI0OAotCi1lbnVtIHsKLQlnYW11dF9tb2RlXzE3 ID0gMCwKLQlnYW11dF9tb2RlXzUsCi0JZ2FtdXRfbW9kZV8xM2EsCi0JZ2FtdXRfbW9kZV8xM2Is Ci19OwotCi0jZGVmaW5lIEdDX0MwX09GRiAweDQKLSNkZWZpbmUgR0NfQzBfSU5ERVhfT0ZGIDB4 OAotI2RlZmluZSBHQ184Ql9ST1VORF9FTiBCSVQoMSkKLSNkZWZpbmUgR0NfRU4gQklUKDApCi0j ZGVmaW5lIEdDX1RCTF9OVU0gMwotI2RlZmluZSBHQ19MVVRfU1dBUF9PRkYgMHgxYwotCi0jZGVm aW5lIElHQ19UQkxfTlVNIDMKLSNkZWZpbmUgSUdDX0RJVEhFUl9PRkYgMHg3ZTAKLSNkZWZpbmUg SUdDX09QTU9ERV9PRkYgMHgwCi0jZGVmaW5lIElHQ19DMF9PRkYgMHgwCi0jZGVmaW5lIElHQ19E QVRBX01BU0sgKEJJVCgxMikgLSAxKQotI2RlZmluZSBJR0NfRFNQUF9TRUxfTUFTS19NQVggKEJJ VCg0KSAtIDEpCi0jZGVmaW5lIElHQ19EU1BQX1NFTF9NQVNLKG4pIFwKLQkoKElHQ19EU1BQX1NF TF9NQVNLX01BWCAmIH4oMSA8PCAobikpKSA8PCAyOCkKLSNkZWZpbmUgSUdDX0lOREVYX1VQREFU RSBCSVQoMjUpCi0jZGVmaW5lIElHQ19FTiBCSVQoMCkKLSNkZWZpbmUgSUdDX0RJUyAwCi0jZGVm aW5lIElHQ19ESVRIRVJfREFUQV9NQVNLIChCSVQoNCkgLSAxKQotCi0jZGVmaW5lIFBDQ19OVU1f UExBTkVTIDMKLSNkZWZpbmUgUENDX05VTV9DT0VGRiAxMQotI2RlZmluZSBQQ0NfRU4gQklUKDAp Ci0jZGVmaW5lIFBDQ19ESVMgMAotI2RlZmluZSBQQ0NfQ19PRkYgMHg0Ci0jZGVmaW5lIFBDQ19S X09GRiAweDEwCi0jZGVmaW5lIFBDQ19HX09GRiAweDFjCi0jZGVmaW5lIFBDQ19CX09GRiAweDI4 Ci0jZGVmaW5lIFBDQ19SR19PRkYgMHgzNAotI2RlZmluZSBQQ0NfUkJfT0ZGIDB4NDAKLSNkZWZp bmUgUENDX0dCX09GRiAweDRjCi0jZGVmaW5lIFBDQ19SR0JfT0ZGIDB4NTgKLSNkZWZpbmUgUEND X1JSX09GRiAweDY0Ci0jZGVmaW5lIFBDQ19HR19PRkYgMHg3MAotI2RlZmluZSBQQ0NfQkJfT0ZG IDB4N2MKLQotI2VuZGlmIC8qIF9EUFVfSFdfQ09MT1JfUFJPQ19DT01NT05fVjRfSF8gKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9j X3Y0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY192 NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzY5M2E4Li4wMDAwMDAwCi0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jX3Y0LmMKKysr IC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgs IFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g Ki8KLSNpbmNsdWRlIDxkcm0vbXNtX2RybV9wcC5oPgotI2luY2x1ZGUgImRwdV9od19jb2xvcl9w cm9jX2NvbW1vbl92NC5oIgotI2luY2x1ZGUgImRwdV9od19jb2xvcl9wcm9jX3Y0LmgiCi0KLXN0 YXRpYyBpbnQgZHB1X3dyaXRlXzNkX2dhbXV0KHN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmh3 LAotCQlzdHJ1Y3QgZHJtX21zbV8zZF9nYW11dCAqcGF5bG9hZCwgdTMyIGJhc2UsCi0JCXUzMiAq b3Bjb2RlKQotewotCXUzMiByZWcsIHRibF9sZW4sIHRibF9vZmYsIHNjYWxlX29mZiwgaSwgajsK LQl1MzIgc2NhbGVfdGJsX2xlbiwgc2NhbGVfdGJsX29mZjsKLQl1MzIgKnNjYWxlX2RhdGE7Ci0K LQlpZiAoIXBheWxvYWQgfHwgIW9wY29kZSB8fCAhaHcpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlk IHBheWxvYWQgJXBLIG9wY29kZSAlcEsgaHcgJXBLXG4iLAotCQkJcGF5bG9hZCwgb3Bjb2RlLCBo dyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAocGF5bG9hZC0+bW9kZSkgewot CWNhc2UgR0FNVVRfM0RfTU9ERV8xNzoKLQkJdGJsX2xlbiA9IEdBTVVUXzNEX01PREUxN19UQkxf U1o7Ci0JCXRibF9vZmYgPSAwOwotCQlzY2FsZV9vZmYgPSBHQU1VVF9TQ0FMRUFfT0ZGU0VUX09G RjsKLQkJKm9wY29kZSA9IGdhbXV0X21vZGVfMTcgPDwgMjsKLQkJYnJlYWs7Ci0JY2FzZSBHQU1V VF8zRF9NT0RFXzEzOgotCQkqb3Bjb2RlID0gKCpvcGNvZGUgJiAoQklUKDQpIC0gMSkpID4+IDI7 Ci0JCWlmICgqb3Bjb2RlID09IGdhbXV0X21vZGVfMTNhKQotCQkJKm9wY29kZSA9IGdhbXV0X21v ZGVfMTNiOwotCQllbHNlCi0JCQkqb3Bjb2RlID0gZ2FtdXRfbW9kZV8xM2E7Ci0JCXRibF9sZW4g PSBHQU1VVF8zRF9NT0RFMTNfVEJMX1NaOwotCQl0Ymxfb2ZmID0gKCpvcGNvZGUgPT0gZ2FtdXRf bW9kZV8xM2EpID8gMCA6Ci0JCQlHQU1VVF9NT0RFXzEzQl9PRkY7Ci0JCXNjYWxlX29mZiA9ICgq b3Bjb2RlID09IGdhbXV0X21vZGVfMTNhKSA/Ci0JCQlHQU1VVF9TQ0FMRUFfT0ZGU0VUX09GRiA6 IEdBTVVUX1NDQUxFQl9PRkZTRVRfT0ZGOwotCQkqb3Bjb2RlIDw8PSAyOwotCQlicmVhazsKLQlj YXNlIEdBTVVUXzNEX01PREVfNToKLQkJKm9wY29kZSA9IGdhbXV0X21vZGVfNSA8PCAyOwotCQl0 YmxfbGVuID0gR0FNVVRfM0RfTU9ERTVfVEJMX1NaOwotCQl0Ymxfb2ZmID0gR0FNVVRfTU9ERV81 X09GRjsKLQkJc2NhbGVfb2ZmID0gR0FNVVRfU0NBTEVCX09GRlNFVF9PRkY7Ci0JCWJyZWFrOwot CWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigiaW52YWxpZCBtb2RlICVkXG4iLCBwYXlsb2FkLT5tb2Rl KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHBheWxvYWQtPmZsYWdzICYgR0FNVVRf M0RfTUFQX0VOKQotCQkqb3Bjb2RlIHw9IEdBTVVUX01BUF9FTjsKLQkqb3Bjb2RlIHw9IEdBTVVU X0VOOwotCi0JZm9yIChpID0gMDsgaSA8IEdBTVVUXzNEX1RCTF9OVU07IGkrKykgewotCQlyZWcg PSBHQU1VVF9UQUJMRTBfU0VMIDw8IGk7Ci0JCXJlZyB8PSAoKHRibF9vZmYpICYgKEJJVCgxMSkg LSAxKSk7Ci0JCURQVV9SRUdfV1JJVEUoaHcsIGJhc2UgKyBHQU1VVF9UQUJMRV9TRUxfT0ZGLCBy ZWcpOwotCQlmb3IgKGogPSAwOyBqIDwgdGJsX2xlbjsgaisrKSB7Ci0JCQlEUFVfUkVHX1dSSVRF KGh3LCBiYXNlICsgR0FNVVRfTE9XRVJfQ09MT1JfT0ZGLAotCQkJCQlwYXlsb2FkLT5jb2xbaV1b al0uYzJfYzEpOwotCQkJRFBVX1JFR19XUklURShodywgYmFzZSArIEdBTVVUX1VQUEVSX0NPTE9S X09GRiwKLQkJCQkJcGF5bG9hZC0+Y29sW2ldW2pdLmMwKTsKLQkJfQotCX0KLQotCWlmICgoKm9w Y29kZSAmIEdBTVVUX01BUF9FTikpIHsKLQkJaWYgKHNjYWxlX29mZiA9PSBHQU1VVF9TQ0FMRUFf T0ZGU0VUX09GRikKLQkJCXNjYWxlX3RibF9sZW4gPSBHQU1VVF8zRF9TQ0FMRV9PRkZfU1o7Ci0J CWVsc2UKLQkJCXNjYWxlX3RibF9sZW4gPSBHQU1VVF8zRF9TQ0FMRUJfT0ZGX1NaOwotCQlmb3Ig KGkgPSAwOyBpIDwgR0FNVVRfM0RfU0NBTEVfT0ZGX1RCTF9OVU07IGkrKykgewotCQkJc2NhbGVf dGJsX29mZiA9IGJhc2UgKyBzY2FsZV9vZmYgKwotCQkJCQlpICogc2NhbGVfdGJsX2xlbiAqIHNp emVvZih1MzIpOwotCQkJc2NhbGVfZGF0YSA9ICZwYXlsb2FkLT5zY2FsZV9vZmZbaV1bMF07Ci0J CQlmb3IgKGogPSAwOyBqIDwgc2NhbGVfdGJsX2xlbjsgaisrKQotCQkJCURQVV9SRUdfV1JJVEUo aHcsCi0JCQkJCXNjYWxlX3RibF9vZmYgKyAoaiAqIHNpemVvZih1MzIpKSwKLQkJCQkJc2NhbGVf ZGF0YVtqXSk7Ci0JCX0KLQl9Ci0JRFBVX1JFR19XUklURShodywgYmFzZSwgKm9wY29kZSk7Ci0J cmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBfM2RfZ2FtdXR2NChzdHJ1Y3QgZHB1 X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1fbXNtXzNkX2dhbXV0ICpw YXlsb2FkOwotCXN0cnVjdCBkcHVfaHdfY3BfY2ZnICpod19jZmcgPSBjZmc7Ci0JdTMyIG9wX21v ZGU7Ci0KLQlpZiAoIWN0eCB8fCAhY2ZnKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBwYXJhbSBj dHggJXBLIGNmZyAlcEtcbiIsIGN0eCwgY2ZnKTsKLQkJcmV0dXJuOwotCX0KLQotCW9wX21vZGUg PSBEUFVfUkVHX1JFQUQoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5nYW11dC5iYXNlKTsKLQlp ZiAoIWh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fREVCVUdfRFJJVkVSKCJkaXNhYmxlIGdhbXV0 IGZlYXR1cmVcbiIpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+ Z2FtdXQuYmFzZSwgMCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwYXlsb2FkID0gaHdfY2ZnLT5wYXls b2FkOwotCWRwdV93cml0ZV8zZF9nYW11dCgmY3R4LT5odywgcGF5bG9hZCwgY3R4LT5jYXAtPnNi bGstPmdhbXV0LmJhc2UsCi0JCSZvcF9tb2RlKTsKLQotfQotCi12b2lkIGRwdV9zZXR1cF9kc3Bw X2lnY3YzKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRy bV9tc21faWdjX2x1dCAqbHV0X2NmZzsKLQlzdHJ1Y3QgZHB1X2h3X2NwX2NmZyAqaHdfY2ZnID0g Y2ZnOwotCWludCBpID0gMCwgaiA9IDA7Ci0JdTMyICphZGRyID0gTlVMTDsKLQl1MzIgb2Zmc2V0 ID0gMDsKLQotCWlmICghY3R4IHx8ICFjZmcpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHBhcmFt IGN0eCAlcEsgY2ZnICVwS1xuIiwgY3R4LCBjZmcpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFo d19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiZGlzYWJsZSBpZ2MgZmVhdHVy ZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIElHQ19PUE1PREVfT0ZGLCAwKTsKLQkJ cmV0dXJuOwotCX0KLQotCWlmIChod19jZmctPmxlbiAhPSBzaXplb2Yoc3RydWN0IGRybV9tc21f aWdjX2x1dCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHNpemUgb2YgcGF5bG9hZCBsZW4gJWQg ZXhwICV6ZFxuIiwKLQkJCQlod19jZmctPmxlbiwgc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX2lnY19s dXQpKTsKLQkJcmV0dXJuOwotCX0KLQotCWx1dF9jZmcgPSBod19jZmctPnBheWxvYWQ7Ci0KLQlm b3IgKGkgPSAwOyBpIDwgSUdDX1RCTF9OVU07IGkrKykgewotCQlhZGRyID0gbHV0X2NmZy0+YzAg KyAoaSAqIEFSUkFZX1NJWkUobHV0X2NmZy0+YzApKTsKLQkJb2Zmc2V0ID0gSUdDX0MwX09GRiAr IChpICogc2l6ZW9mKHUzMikpOwotCi0JCWZvciAoaiA9IDA7IGogPCBJR0NfVEJMX0xFTjsgaisr KSB7Ci0JCQlhZGRyW2pdICY9IElHQ19EQVRBX01BU0s7Ci0JCQlhZGRyW2pdIHw9IElHQ19EU1BQ X1NFTF9NQVNLKGN0eC0+aWR4IC0gMSk7Ci0JCQlpZiAoaiA9PSAwKQotCQkJCWFkZHJbal0gfD0g SUdDX0lOREVYX1VQREFURTsKLQkJCS8qIElHQyBsdXQgcmVnaXN0ZXJzIGFyZSBwYXJ0IG9mIERT UFAgVG9wIEhXIGJsb2NrICovCi0JCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3X3RvcCwgb2Zmc2V0 LCBhZGRyW2pdKTsKLQkJfQotCX0KLQotCWlmIChsdXRfY2ZnLT5mbGFncyAmIElHQ19ESVRIRVJf RU5BQkxFKSB7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIElHQ19ESVRIRVJfT0ZGLAotCQkJ bHV0X2NmZy0+c3RyZW5ndGggJiBJR0NfRElUSEVSX0RBVEFfTUFTSyk7Ci0JfQotCi0JRFBVX1JF R19XUklURSgmY3R4LT5odywgSUdDX09QTU9ERV9PRkYsIElHQ19FTik7Ci19Ci0KLXZvaWQgZHB1 X3NldHVwX2RzcHBfcGNjdjQoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZykKLXsK LQlzdHJ1Y3QgZHB1X2h3X2NwX2NmZyAqaHdfY2ZnID0gY2ZnOwotCXN0cnVjdCBkcm1fbXNtX3Bj YyAqcGNjX2NmZzsKLQlzdHJ1Y3QgZHJtX21zbV9wY2NfY29lZmYgKmNvZWZmcyA9IE5VTEw7Ci0J aW50IGkgPSAwOwotCXUzMiBiYXNlID0gMDsKLQotCWlmICghY3R4IHx8ICFjZmcpIHsKLQkJRFJN X0VSUk9SKCJpbnZhbGlkIHBhcmFtIGN0eCAlcEsgY2ZnICVwS1xuIiwgY3R4LCBjZmcpOwotCQly ZXR1cm47Ci0JfQotCi0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RFQlVHX0RSSVZF UigiZGlzYWJsZSBwY2MgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0 eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSwgMCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaHdfY2Zn LT5sZW4gIT0gc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BjYykpIHsKLQkJRFJNX0VSUk9SKCJpbnZh bGlkIHNpemUgb2YgcGF5bG9hZCBsZW4gJWQgZXhwICV6ZFxuIiwKLQkJCQlod19jZmctPmxlbiwg c2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BjYykpOwotCQlyZXR1cm47Ci0JfQotCi0JcGNjX2NmZyA9 IGh3X2NmZy0+cGF5bG9hZDsKLQotCWZvciAoaSA9IDA7IGkgPCBQQ0NfTlVNX1BMQU5FUzsgaSsr KSB7Ci0JCWJhc2UgPSBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyAoaSAqIHNpemVvZih1MzIp KTsKLQkJc3dpdGNoIChpKSB7Ci0JCWNhc2UgMDoKLQkJCWNvZWZmcyA9ICZwY2NfY2ZnLT5yOwot CQkJRFBVX1JFR19XUklURSgmY3R4LT5odywKLQkJCQliYXNlICsgUENDX1JSX09GRiwgcGNjX2Nm Zy0+cl9ycik7Ci0JCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LAotCQkJCWJhc2UgKyBQQ0NfR0df T0ZGLCBwY2NfY2ZnLT5yX2dnKTsKLQkJCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsCi0JCQkJYmFz ZSArIFBDQ19CQl9PRkYsIHBjY19jZmctPnJfYmIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJ CWNvZWZmcyA9ICZwY2NfY2ZnLT5nOwotCQkJRFBVX1JFR19XUklURSgmY3R4LT5odywKLQkJCQli YXNlICsgUENDX1JSX09GRiwgcGNjX2NmZy0+Z19ycik7Ci0JCQlEUFVfUkVHX1dSSVRFKCZjdHgt Pmh3LAotCQkJCWJhc2UgKyBQQ0NfR0dfT0ZGLCBwY2NfY2ZnLT5nX2dnKTsKLQkJCURQVV9SRUdf V1JJVEUoJmN0eC0+aHcsCi0JCQkJYmFzZSArIFBDQ19CQl9PRkYsIHBjY19jZmctPmdfYmIpOwot CQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWNvZWZmcyA9ICZwY2NfY2ZnLT5iOwotCQkJRFBVX1JF R19XUklURSgmY3R4LT5odywKLQkJCQliYXNlICsgUENDX1JSX09GRiwgcGNjX2NmZy0+Yl9ycik7 Ci0JCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LAotCQkJCWJhc2UgKyBQQ0NfR0dfT0ZGLCBwY2Nf Y2ZnLT5iX2dnKTsKLQkJCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsCi0JCQkJYmFzZSArIFBDQ19C Ql9PRkYsIHBjY19jZmctPmJfYmIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEUk1fRVJS T1IoImludmFsaWQgcGNjIHBsYW5lOiAlZFxuIiwgaSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlE UFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX0NfT0ZGLCBjb2VmZnMtPmMpOwotCQlE UFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX1JfT0ZGLCBjb2VmZnMtPnIpOwotCQlE UFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX0dfT0ZGLCBjb2VmZnMtPmcpOwotCQlE UFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX0JfT0ZGLCBjb2VmZnMtPmIpOwotCQlE UFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX1JHX09GRiwgY29lZmZzLT5yZyk7Ci0J CURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGJhc2UgKyBQQ0NfUkJfT0ZGLCBjb2VmZnMtPnJiKTsK LQkJRFBVX1JFR19XUklURSgmY3R4LT5odywgYmFzZSArIFBDQ19HQl9PRkYsIGNvZWZmcy0+Z2Ip OwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX1JHQl9PRkYsIGNvZWZmcy0+ cmdiKTsKLQl9Ci0KLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNj LmJhc2UsIFBDQ19FTik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfY29sb3JfcHJvY192NC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2NvbG9yX3Byb2NfdjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg YzJmNDQ3ZmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2NvbG9yX3Byb2NfdjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qIENv cHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0g KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9EUFVfSFdfQ09MT1JfUFJPQ19WNF9I XwotI2RlZmluZSBfRFBVX0hXX0NPTE9SX1BST0NfVjRfSF8KLQotI2luY2x1ZGUgImRwdV9od191 dGlsLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2NhdGFsb2cuaCIKLSNpbmNsdWRlICJkcHVfaHdfZHNw cC5oIgotLyoqCi0gKiBkcHVfc2V0dXBfZHNwcF8zZF9nYW11dHY0IC0gRnVuY3Rpb24gZm9yIDNk IGdhbXV0IHY0IHZlcnNpb24gZmVhdHVyZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHByb2dyYW1taW5nLgotICogQGN0eDogZHNwcCBjdHggcG9pbnRlcgotICogQGNmZzogcG9pbnRl ciB0byBkcHVfaHdfY3BfY2ZnCi0gKi8KLXZvaWQgZHB1X3NldHVwX2RzcHBfM2RfZ2FtdXR2NChz dHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLS8qKgotICogZHB1X3NldHVwX2Rz cHBfaWdjdjMgLSBGdW5jdGlvbiBmb3IgaWdjIHYzIHZlcnNpb24gZmVhdHVyZQotICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1taW5nLgotICogQGN0eDogZHNwcCBjdHggcG9p bnRlcgotICogQGNmZzogcG9pbnRlciB0byBkcHVfaHdfY3BfY2ZnCi0gKi8KLXZvaWQgZHB1X3Nl dHVwX2RzcHBfaWdjdjMoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0vKioK LSAqIGRwdV9zZXR1cF9kc3BwX3BjY3Y0IC0gRnVuY3Rpb24gZm9yIHBjYyB2NCB2ZXJzaW9uIGZl YXR1cmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtbWluZy4KLSAqIEBj dHg6IGRzcHAgY3R4IHBvaW50ZXIKLSAqIEBjZmc6IHBvaW50ZXIgdG8gZHB1X2h3X2NwX2NmZwot ICovCi12b2lkIGRwdV9zZXR1cF9kc3BwX3BjY3Y0KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2 b2lkICpjZmcpOwotCi0jZW5kaWYgLyogX0RQVV9IV19DT0xPUl9QUk9DX1Y0X0hfICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vz c2luZy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nl c3NpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiZGZmZC4uMDAwMDAwMAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vzc2lu Zy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCi0gKi8KLQotI2lmbmRlZiBfRFBVX0hXX0NPTE9SX1BST0NFU1NJTkdfSAotI2RlZmluZSBf RFBVX0hXX0NPTE9SX1BST0NFU1NJTkdfSAotCi0jaW5jbHVkZSAiZHB1X2h3X2NvbG9yX3Byb2Nl c3NpbmdfdjFfNy5oIgotI2luY2x1ZGUgImRwdV9od19yZWdfZG1hX3YxX2NvbG9yX3Byb2MuaCIK LSNpbmNsdWRlICJkcHVfaHdfY29sb3JfcHJvY192NC5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jZXNzaW5nX3Yx XzcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jZXNz aW5nX3YxXzcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM2NzYwMi4uMDAwMDAw MAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vz c2luZ192MV83LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NjUgKzAsMCBAQAotLyogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGRybS9tc21fZHJtX3BwLmg+Ci0jaW5jbHVk ZSAiZHB1X2h3X2NvbG9yX3Byb2Nlc3NpbmdfdjFfNy5oIgotI2luY2x1ZGUgImRwdV9od19jdGwu aCIKLQotI2RlZmluZSBQQV9IVUVfVklHX09GRgkJMHgxMTAKLSNkZWZpbmUgUEFfU0FUX1ZJR19P RkYJCTB4MTE0Ci0jZGVmaW5lIFBBX1ZBTF9WSUdfT0ZGCQkweDExOAotI2RlZmluZSBQQV9DT05U X1ZJR19PRkYJCTB4MTFDCi0KLSNkZWZpbmUgUEFfSFVFX0RTUFBfT0ZGCQkweDIzOAotI2RlZmlu ZSBQQV9TQVRfRFNQUF9PRkYJCTB4MjNDCi0jZGVmaW5lIFBBX1ZBTF9EU1BQX09GRgkJMHgyNDAK LSNkZWZpbmUgUEFfQ09OVF9EU1BQX09GRgkweDI0NAotCi0jZGVmaW5lIFBBX0xVVFZfRFNQUF9P RkYJMHgxNDAwCi0jZGVmaW5lIFBBX0xVVF9TV0FQX09GRgkJMHgyMzQKLQotI2RlZmluZSBQQV9M VVRWX0RTUFBfQ1RSTF9PRkYJMHg0YwotI2RlZmluZSBQQV9MVVRWX0RTUFBfU1dBUF9PRkYJMHgx OAotCi0jZGVmaW5lIFBBX0hVRV9NQVNLCQkweEZGRgotI2RlZmluZSBQQV9TQVRfTUFTSwkJMHhG RkZGCi0jZGVmaW5lIFBBX1ZBTF9NQVNLCQkweEZGCi0jZGVmaW5lIFBBX0NPTlRfTUFTSwkJMHhG RgotCi0jZGVmaW5lIE1FTUNPTF9QV0wwX09GRgkJMHg4OAotI2RlZmluZSBNRU1DT0xfUFdMMF9N QVNLCTB4RkZGRjA3RkYKLSNkZWZpbmUgTUVNQ09MX1BXTDFfT0ZGCQkweDhDCi0jZGVmaW5lIE1F TUNPTF9QV0wxX01BU0sJMHhGRkZGRkZGRgotI2RlZmluZSBNRU1DT0xfSFVFX1JFR0lPTl9PRkYJ MHg5MAotI2RlZmluZSBNRU1DT0xfSFVFX1JFR0lPTl9NQVNLCTB4N0ZGMDdGRgotI2RlZmluZSBN RU1DT0xfU0FUX1JFR0lPTl9PRkYJMHg5NAotI2RlZmluZSBNRU1DT0xfU0FUX1JFR0lPTl9NQVNL CTB4RkZGRkZGCi0jZGVmaW5lIE1FTUNPTF9WQUxfUkVHSU9OX09GRgkweDk4Ci0jZGVmaW5lIE1F TUNPTF9WQUxfUkVHSU9OX01BU0sJMHhGRkZGRkYKLSNkZWZpbmUgTUVNQ09MX1AwX0xFTgkJMHgx NAotI2RlZmluZSBNRU1DT0xfUDFfTEVOCQkweDgKLSNkZWZpbmUgTUVNQ09MX1BXTDJfT0ZGCQkw eDIxOAotI2RlZmluZSBNRU1DT0xfUFdMMl9NQVNLCTB4RkZGRkZGRkYKLSNkZWZpbmUgTUVNQ09M X0JMRU5EX0dBSU5fT0ZGCTB4MjFDCi0jZGVmaW5lIE1FTUNPTF9QV0xfSE9MRF9PRkYJMHgyMTQK LQotI2RlZmluZSBWSUdfT1BfUEFfRU4JCUJJVCg0KQotI2RlZmluZSBWSUdfT1BfUEFfU0tJTl9F TglCSVQoNSkKLSNkZWZpbmUgVklHX09QX1BBX0ZPTF9FTglCSVQoNikKLSNkZWZpbmUgVklHX09Q X1BBX1NLWV9FTglCSVQoNykKLSNkZWZpbmUgVklHX09QX1BBX0hVRV9FTglCSVQoMjUpCi0jZGVm aW5lIFZJR19PUF9QQV9TQVRfRU4JQklUKDI2KQotI2RlZmluZSBWSUdfT1BfUEFfVkFMX0VOCUJJ VCgyNykKLSNkZWZpbmUgVklHX09QX1BBX0NPTlRfRU4JQklUKDI4KQotCi0jZGVmaW5lIERTUFBf T1BfU1pfVkFMX0VOCUJJVCgzMSkKLSNkZWZpbmUgRFNQUF9PUF9TWl9TQVRfRU4JQklUKDMwKQot I2RlZmluZSBEU1BQX09QX1NaX0hVRV9FTglCSVQoMjkpCi0jZGVmaW5lIERTUFBfT1BfUEFfSFVF X0VOCUJJVCgyNSkKLSNkZWZpbmUgRFNQUF9PUF9QQV9TQVRfRU4JQklUKDI2KQotI2RlZmluZSBE U1BQX09QX1BBX1ZBTF9FTglCSVQoMjcpCi0jZGVmaW5lIERTUFBfT1BfUEFfQ09OVF9FTglCSVQo MjgpCi0jZGVmaW5lIERTUFBfT1BfUEFfRU4JCUJJVCgyMCkKLSNkZWZpbmUgRFNQUF9PUF9QQV9M VVRWX0VOCUJJVCgxOSkKLSNkZWZpbmUgRFNQUF9PUF9QQV9TS0lOX0VOCUJJVCg1KQotI2RlZmlu ZSBEU1BQX09QX1BBX0ZPTF9FTglCSVQoNikKLSNkZWZpbmUgRFNQUF9PUF9QQV9TS1lfRU4JQklU KDcpCi0KLSNkZWZpbmUgUEFfVklHX0RJU0FCTEVfUkVRVUlSRUQoeCkgXAotCQkJISgoeCkgJiAo VklHX09QX1BBX1NLSU5fRU4gfCBWSUdfT1BfUEFfU0tZX0VOIHwgXAotCQkJVklHX09QX1BBX0ZP TF9FTiB8IFZJR19PUF9QQV9IVUVfRU4gfCBcCi0JCQlWSUdfT1BfUEFfU0FUX0VOIHwgVklHX09Q X1BBX1ZBTF9FTiB8IFwKLQkJCVZJR19PUF9QQV9DT05UX0VOKSkKLQotCi0jZGVmaW5lIFBBX0RT UFBfRElTQUJMRV9SRVFVSVJFRCh4KSBcCi0JCQkhKCh4KSAmIChEU1BQX09QX1BBX1NLSU5fRU4g fCBEU1BQX09QX1BBX1NLWV9FTiB8IFwKLQkJCURTUFBfT1BfUEFfRk9MX0VOIHwgRFNQUF9PUF9Q QV9IVUVfRU4gfCBcCi0JCQlEU1BQX09QX1BBX1NBVF9FTiB8IERTUFBfT1BfUEFfVkFMX0VOIHwg XAotCQkJRFNQUF9PUF9QQV9DT05UX0VOIHwgRFNQUF9PUF9QQV9MVVRWX0VOKSkKLQotI2RlZmlu ZSBEU1BQX09QX1BDQ19FTkFCTEUJQklUKDApCi0jZGVmaW5lIFBDQ19PUF9NT0RFX09GRgkJMAot I2RlZmluZSBQQ0NfQ09OU1RfQ09FRkZfT0ZGCTQKLSNkZWZpbmUgUENDX1JfQ09FRkZfT0ZGCQkw eDEwCi0jZGVmaW5lIFBDQ19HX0NPRUZGX09GRgkJMHgxQwotI2RlZmluZSBQQ0NfQl9DT0VGRl9P RkYJCTB4MjgKLSNkZWZpbmUgUENDX1JHX0NPRUZGX09GRgkweDM0Ci0jZGVmaW5lIFBDQ19SQl9D T0VGRl9PRkYJMHg0MAotI2RlZmluZSBQQ0NfR0JfQ09FRkZfT0ZGCTB4NEMKLSNkZWZpbmUgUEND X1JHQl9DT0VGRl9PRkYJMHg1OAotI2RlZmluZSBQQ0NfQ09OU1RfQ09FRkZfTUFTSwkweEZGRkYK LSNkZWZpbmUgUENDX0NPRUZGX01BU0sJCTB4M0ZGRkYKLQotI2RlZmluZSBTU1BQCTAKLSNkZWZp bmUgRFNQUAkxCi0KLSNkZWZpbmUgUEdDX0MwX09GRiAweDQKLSNkZWZpbmUgUEdDX0MwX0lOREVY X09GRiAweDgKLSNkZWZpbmUgUEdDXzhCX1JPVU5EX0VOIEJJVCgxKQotI2RlZmluZSBQR0NfRU4g QklUKDApCi0jZGVmaW5lIFBHQ19UQkxfTlVNIDMKLSNkZWZpbmUgUEdDX0xVVF9TV0FQX09GRiAw eDFjCi0KLQotc3RhdGljIHZvaWQgX19zZXR1cF9wYV9odWUoc3RydWN0IGRwdV9od19ibGtfcmVn X21hcCAqaHcsCi0JCQljb25zdCBzdHJ1Y3QgZHB1X3BwX2JsayAqYmxrLCB1aW50MzJfdCBodWUs Ci0JCQlpbnQgbG9jYXRpb24pCi17Ci0JdTMyIGJhc2UgPSBibGstPmJhc2U7Ci0JdTMyIG9mZnNl dCA9IChsb2NhdGlvbiA9PSBEU1BQKSA/IFBBX0hVRV9EU1BQX09GRiA6IFBBX0hVRV9WSUdfT0ZG OwotCXUzMiBvcF9odWVfZW4gPSAobG9jYXRpb24gPT0gRFNQUCkgPyBEU1BQX09QX1BBX0hVRV9F TiA6Ci0JCQkJCVZJR19PUF9QQV9IVUVfRU47Ci0JdTMyIG9wX3BhX2VuID0gKGxvY2F0aW9uID09 IERTUFApID8gRFNQUF9PUF9QQV9FTiA6IFZJR19PUF9QQV9FTjsKLQl1MzIgZGlzYWJsZV9yZXE7 Ci0JdTMyIG9wbW9kZTsKLQotCURQVV9SRUdfV1JJVEUoaHcsIGJhc2UgKyBvZmZzZXQsIGh1ZSAm IFBBX0hVRV9NQVNLKTsKLQotCW9wbW9kZSA9IERQVV9SRUdfUkVBRChodywgYmFzZSk7Ci0KLQlp ZiAoIWh1ZSkgewotCQlvcG1vZGUgJj0gfm9wX2h1ZV9lbjsKLQkJZGlzYWJsZV9yZXEgPSAobG9j YXRpb24gPT0gRFNQUCkgPwotCQkJUEFfRFNQUF9ESVNBQkxFX1JFUVVJUkVEKG9wbW9kZSkgOgot CQkJUEFfVklHX0RJU0FCTEVfUkVRVUlSRUQob3Btb2RlKTsKLQkJaWYgKGRpc2FibGVfcmVxKQot CQkJb3Btb2RlICY9IH5vcF9wYV9lbjsKLQl9IGVsc2UgewotCQlvcG1vZGUgfD0gb3BfaHVlX2Vu IHwgb3BfcGFfZW47Ci0JfQotCi0JRFBVX1JFR19XUklURShodywgYmFzZSwgb3Btb2RlKTsKLX0K LQotdm9pZCBkcHVfc2V0dXBfcGlwZV9wYV9odWVfdjFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0 eCwgdm9pZCAqY2ZnKQotewotCXVpbnQzMl90IGh1ZSA9ICooKHVpbnQzMl90ICopY2ZnKTsKLQot CV9fc2V0dXBfcGFfaHVlKCZjdHgtPmh3LCAmY3R4LT5jYXAtPnNibGstPmhzaWNfYmxrLCBodWUs IFNTUFApOwotfQotCi12b2lkIGRwdV9zZXR1cF9kc3BwX3BhX2h1ZV92MV83KHN0cnVjdCBkcHVf aHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0JdWludDMyX3QgaHVlID0gKigodWludDMyX3Qg KiljZmcpOwotCi0JX19zZXR1cF9wYV9odWUoJmN0eC0+aHcsICZjdHgtPmNhcC0+c2Jsay0+aHNp YywgaHVlLCBEU1BQKTsKLX0KLQotc3RhdGljIHZvaWQgX19zZXR1cF9wYV9zYXQoc3RydWN0IGRw dV9od19ibGtfcmVnX21hcCAqaHcsCi0JCQljb25zdCBzdHJ1Y3QgZHB1X3BwX2JsayAqYmxrLCB1 aW50MzJfdCBzYXQsCi0JCQlpbnQgbG9jYXRpb24pCi17Ci0JdTMyIGJhc2UgPSBibGstPmJhc2U7 Ci0JdTMyIG9mZnNldCA9IChsb2NhdGlvbiA9PSBEU1BQKSA/IFBBX1NBVF9EU1BQX09GRiA6IFBB X1NBVF9WSUdfT0ZGOwotCXUzMiBvcF9zYXRfZW4gPSAobG9jYXRpb24gPT0gRFNQUCkgPwotCQkJ RFNQUF9PUF9QQV9TQVRfRU4gOiBWSUdfT1BfUEFfU0FUX0VOOwotCXUzMiBvcF9wYV9lbiA9IChs b2NhdGlvbiA9PSBEU1BQKSA/IERTUFBfT1BfUEFfRU4gOiBWSUdfT1BfUEFfRU47Ci0JdTMyIGRp c2FibGVfcmVxOwotCXUzMiBvcG1vZGU7Ci0KLQlEUFVfUkVHX1dSSVRFKGh3LCBiYXNlICsgb2Zm c2V0LCBzYXQgJiBQQV9TQVRfTUFTSyk7Ci0KLQlvcG1vZGUgPSBEUFVfUkVHX1JFQUQoaHcsIGJh c2UpOwotCi0JaWYgKCFzYXQpIHsKLQkJb3Btb2RlICY9IH5vcF9zYXRfZW47Ci0JCWRpc2FibGVf cmVxID0gKGxvY2F0aW9uID09IERTUFApID8KLQkJCVBBX0RTUFBfRElTQUJMRV9SRVFVSVJFRChv cG1vZGUpIDoKLQkJCVBBX1ZJR19ESVNBQkxFX1JFUVVJUkVEKG9wbW9kZSk7Ci0JCWlmIChkaXNh YmxlX3JlcSkKLQkJCW9wbW9kZSAmPSB+b3BfcGFfZW47Ci0JfSBlbHNlIHsKLQkJb3Btb2RlIHw9 IG9wX3NhdF9lbiB8IG9wX3BhX2VuOwotCX0KLQotCURQVV9SRUdfV1JJVEUoaHcsIGJhc2UsIG9w bW9kZSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX3BpcGVfcGFfc2F0X3YxXzcoc3RydWN0IGRwdV9o d19waXBlICpjdHgsIHZvaWQgKmNmZykKLXsKLQl1aW50MzJfdCBzYXQgPSAqKCh1aW50MzJfdCAq KWNmZyk7Ci0KLQlfX3NldHVwX3BhX3NhdCgmY3R4LT5odywgJmN0eC0+Y2FwLT5zYmxrLT5oc2lj X2Jsaywgc2F0LCBTU1BQKTsKLX0KLQotc3RhdGljIHZvaWQgX19zZXR1cF9wYV92YWwoc3RydWN0 IGRwdV9od19ibGtfcmVnX21hcCAqaHcsCi0JCQljb25zdCBzdHJ1Y3QgZHB1X3BwX2JsayAqYmxr LCB1aW50MzJfdCB2YWx1ZSwKLQkJCWludCBsb2NhdGlvbikKLXsKLQl1MzIgYmFzZSA9IGJsay0+ YmFzZTsKLQl1MzIgb2Zmc2V0ID0gKGxvY2F0aW9uID09IERTUFApID8gUEFfVkFMX0RTUFBfT0ZG IDogUEFfVkFMX1ZJR19PRkY7Ci0JdTMyIG9wX3ZhbF9lbiA9IChsb2NhdGlvbiA9PSBEU1BQKSA/ Ci0JCQlEU1BQX09QX1BBX1ZBTF9FTiA6IFZJR19PUF9QQV9WQUxfRU47Ci0JdTMyIG9wX3BhX2Vu ID0gKGxvY2F0aW9uID09IERTUFApID8gRFNQUF9PUF9QQV9FTiA6IFZJR19PUF9QQV9FTjsKLQl1 MzIgZGlzYWJsZV9yZXE7Ci0JdTMyIG9wbW9kZTsKLQotCURQVV9SRUdfV1JJVEUoaHcsIGJhc2Ug KyBvZmZzZXQsIHZhbHVlICYgUEFfVkFMX01BU0spOwotCi0Jb3Btb2RlID0gRFBVX1JFR19SRUFE KGh3LCBiYXNlKTsKLQotCWlmICghdmFsdWUpIHsKLQkJb3Btb2RlICY9IH5vcF92YWxfZW47Ci0J CWRpc2FibGVfcmVxID0gKGxvY2F0aW9uID09IERTUFApID8KLQkJCVBBX0RTUFBfRElTQUJMRV9S RVFVSVJFRChvcG1vZGUpIDoKLQkJCVBBX1ZJR19ESVNBQkxFX1JFUVVJUkVEKG9wbW9kZSk7Ci0J CWlmIChkaXNhYmxlX3JlcSkKLQkJCW9wbW9kZSAmPSB+b3BfcGFfZW47Ci0JfSBlbHNlIHsKLQkJ b3Btb2RlIHw9IG9wX3ZhbF9lbiB8IG9wX3BhX2VuOwotCX0KLQotCURQVV9SRUdfV1JJVEUoaHcs IGJhc2UsIG9wbW9kZSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX3BpcGVfcGFfdmFsX3YxXzcoc3Ry dWN0IGRwdV9od19waXBlICpjdHgsIHZvaWQgKmNmZykKLXsKLQl1aW50MzJfdCB2YWx1ZSA9ICoo KHVpbnQzMl90ICopY2ZnKTsKLQotCV9fc2V0dXBfcGFfdmFsKCZjdHgtPmh3LCAmY3R4LT5jYXAt PnNibGstPmhzaWNfYmxrLCB2YWx1ZSwgU1NQUCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fc2V0dXBf cGFfY29udChzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpodywKLQkJCWNvbnN0IHN0cnVjdCBk cHVfcHBfYmxrICpibGssIHVpbnQzMl90IGNvbnRyYXN0LAotCQkJaW50IGxvY2F0aW9uKQotewot CXUzMiBiYXNlID0gYmxrLT5iYXNlOwotCXUzMiBvZmZzZXQgPSAobG9jYXRpb24gPT0gRFNQUCkg PyBQQV9DT05UX0RTUFBfT0ZGIDogUEFfQ09OVF9WSUdfT0ZGOwotCXUzMiBvcF9jb250X2VuID0g KGxvY2F0aW9uID09IERTUFApID8gRFNQUF9PUF9QQV9DT05UX0VOIDoKLQkJCQkJVklHX09QX1BB X0NPTlRfRU47Ci0JdTMyIG9wX3BhX2VuID0gKGxvY2F0aW9uID09IERTUFApID8gRFNQUF9PUF9Q QV9FTiA6IFZJR19PUF9QQV9FTjsKLQl1MzIgZGlzYWJsZV9yZXE7Ci0JdTMyIG9wbW9kZTsKLQot CURQVV9SRUdfV1JJVEUoaHcsIGJhc2UgKyBvZmZzZXQsIGNvbnRyYXN0ICYgUEFfQ09OVF9NQVNL KTsKLQotCW9wbW9kZSA9IERQVV9SRUdfUkVBRChodywgYmFzZSk7Ci0KLQlpZiAoIWNvbnRyYXN0 KSB7Ci0JCW9wbW9kZSAmPSB+b3BfY29udF9lbjsKLQkJZGlzYWJsZV9yZXEgPSAobG9jYXRpb24g PT0gRFNQUCkgPwotCQkJUEFfRFNQUF9ESVNBQkxFX1JFUVVJUkVEKG9wbW9kZSkgOgotCQkJUEFf VklHX0RJU0FCTEVfUkVRVUlSRUQob3Btb2RlKTsKLQkJaWYgKGRpc2FibGVfcmVxKQotCQkJb3Bt b2RlICY9IH5vcF9wYV9lbjsKLQl9IGVsc2UgewotCQlvcG1vZGUgfD0gb3BfY29udF9lbiB8IG9w X3BhX2VuOwotCX0KLQotCURQVV9SRUdfV1JJVEUoaHcsIGJhc2UsIG9wbW9kZSk7Ci19Ci0KLXZv aWQgZHB1X3NldHVwX3BpcGVfcGFfY29udF92MV83KHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LCB2 b2lkICpjZmcpCi17Ci0JdWludDMyX3QgY29udHJhc3QgPSAqKCh1aW50MzJfdCAqKWNmZyk7Ci0K LQlfX3NldHVwX3BhX2NvbnQoJmN0eC0+aHcsICZjdHgtPmNhcC0+c2Jsay0+aHNpY19ibGssIGNv bnRyYXN0LCBTU1BQKTsKLX0KLQotdm9pZCBkcHVfc2V0dXBfcGlwZV9wYV9tZW1jb2xfdjFfNyhz dHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKLQkJCQkgICBlbnVtIGRwdV9tZW1jb2xvcl90eXBlIHR5 cGUsCi0JCQkJICAgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1fbXNtX21lbWNvbCAqbWMgPSBj Zmc7Ci0JdTMyIGJhc2UgPSBjdHgtPmNhcC0+c2Jsay0+bWVtY29sb3JfYmxrLmJhc2U7Ci0JdTMy IG9mZiwgb3AsIG1jX2VuLCBob2xkID0gMDsKLQl1MzIgbWNfaSA9IDA7Ci0KLQlzd2l0Y2ggKHR5 cGUpIHsKLQljYXNlIE1FTUNPTE9SX1NLSU46Ci0JCW1jX2VuID0gVklHX09QX1BBX1NLSU5fRU47 Ci0JCW1jX2kgPSAwOwotCQlicmVhazsKLQljYXNlIE1FTUNPTE9SX1NLWToKLQkJbWNfZW4gPSBW SUdfT1BfUEFfU0tZX0VOOwotCQltY19pID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBNRU1DT0xPUl9G T0xJQUdFOgotCQltY19lbiA9IFZJR19PUF9QQV9GT0xfRU47Ci0JCW1jX2kgPSAyOwotCQlicmVh azsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoIkludmFsaWQgbWVtb3J5IGNvbG9yIHR5cGUgJWRc biIsIHR5cGUpOwotCQlyZXR1cm47Ci0JfQotCi0Jb3AgPSBEUFVfUkVHX1JFQUQoJmN0eC0+aHcs IGJhc2UpOwotCWlmICghbWMpIHsKLQkJb3AgJj0gfm1jX2VuOwotCQlpZiAoUEFfVklHX0RJU0FC TEVfUkVRVUlSRUQob3ApKQotCQkJb3AgJj0gflZJR19PUF9QQV9FTjsKLQkJRFBVX1JFR19XUklU RSgmY3R4LT5odywgYmFzZSwgb3ApOwotCQlyZXR1cm47Ci0JfQotCi0Jb2ZmID0gYmFzZSArICht Y19pICogTUVNQ09MX1AwX0xFTik7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgKG9mZiArIE1F TUNPTF9QV0wwX09GRiksCi0JCSAgICAgIG1jLT5jb2xvcl9hZGp1c3RfcDAgJiBNRU1DT0xfUFdM MF9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCAob2ZmICsgTUVNQ09MX1BXTDFfT0ZG KSwKLQkJICAgICAgbWMtPmNvbG9yX2FkanVzdF9wMSAmIE1FTUNPTF9QV0wxX01BU0spOwotCURQ VV9SRUdfV1JJVEUoJmN0eC0+aHcsIChvZmYgKyBNRU1DT0xfSFVFX1JFR0lPTl9PRkYpLAotCQkg ICAgICBtYy0+aHVlX3JlZ2lvbiAmIE1FTUNPTF9IVUVfUkVHSU9OX01BU0spOwotCURQVV9SRUdf V1JJVEUoJmN0eC0+aHcsIChvZmYgKyBNRU1DT0xfU0FUX1JFR0lPTl9PRkYpLAotCQkgICAgICBt Yy0+c2F0X3JlZ2lvbiAmIE1FTUNPTF9TQVRfUkVHSU9OX01BU0spOwotCURQVV9SRUdfV1JJVEUo JmN0eC0+aHcsIChvZmYgKyBNRU1DT0xfVkFMX1JFR0lPTl9PRkYpLAotCQkgICAgICBtYy0+dmFs X3JlZ2lvbiAmIE1FTUNPTF9WQUxfUkVHSU9OX01BU0spOwotCi0Jb2ZmID0gYmFzZSArIChtY19p ICogTUVNQ09MX1AxX0xFTik7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgKG9mZiArIE1FTUNP TF9QV0wyX09GRiksCi0JCSAgICAgIG1jLT5jb2xvcl9hZGp1c3RfcDIgJiBNRU1DT0xfUFdMMl9N QVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCAob2ZmICsgTUVNQ09MX0JMRU5EX0dBSU5f T0ZGKSwgbWMtPmJsZW5kX2dhaW4pOwotCi0JaG9sZCA9IERQVV9SRUdfUkVBRCgmY3R4LT5odywg b2ZmICsgTUVNQ09MX1BXTF9IT0xEX09GRik7Ci0JaG9sZCAmPSB+KDB4RiA8PCAobWNfaSAqIDQp KTsKLQlob2xkIHw9ICgobWMtPnNhdF9ob2xkICYgMHgzKSA8PCAobWNfaSAqIDQpKTsKLQlob2xk IHw9ICgobWMtPnZhbF9ob2xkICYgMHgzKSA8PCAoKG1jX2kgKiA0KSArIDIpKTsKLQlEUFVfUkVH X1dSSVRFKCZjdHgtPmh3LCAob2ZmICsgTUVNQ09MX1BXTF9IT0xEX09GRiksIGhvbGQpOwotCi0J b3AgfD0gVklHX09QX1BBX0VOIHwgbWNfZW47Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgYmFz ZSwgb3ApOwotfQotCi12b2lkIGRwdV9zZXR1cF9kc3BwX3BjY192MV83KHN0cnVjdCBkcHVfaHdf ZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3X2NmZyA9 IGNmZzsKLQlzdHJ1Y3QgZHJtX21zbV9wY2MgKnBjYzsKLQl2b2lkICBfX2lvbWVtICpiYXNlOwot Ci0JaWYgKCFod19jZmcgIHx8IChod19jZmctPmxlbiAhPSBzaXplb2YoKnBjYykgICYmIGh3X2Nm Zy0+cGF5bG9hZCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHBhcmFtcyBodyAlcCBwYXlsb2Fk ICVwIHBheWxvYWRzaXplICVkIFwiXAotCQkJICBleHAgc2l6ZSAlemRcbiIsCi0JCQkgICBod19j ZmcsICgoaHdfY2ZnKSA/IGh3X2NmZy0+cGF5bG9hZCA6IE5VTEwpLAotCQkJICAgKChod19jZmcp ID8gaHdfY2ZnLT5sZW4gOiAwKSwgc2l6ZW9mKCpwY2MpKTsKLQkJcmV0dXJuOwotCX0KLQliYXNl ID0gY3R4LT5ody5iYXNlX29mZiArIGN0eC0+Y2FwLT5iYXNlOwotCi0JLyogVHVybiBvZmYgZmVh dHVyZSAqLwotCWlmICghaHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+ aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSwKLQkJCSAgICAgIFBDQ19PUF9NT0RFX09GRik7 Ci0JCXJldHVybjsKLQl9Ci0JRFJNX0RFQlVHX0RSSVZFUigiRW5hYmxlIFBDQyBmZWF0dXJlXG4i KTsKLQlwY2MgPSBod19jZmctPnBheWxvYWQ7Ci0KLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBj dHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfQ09OU1RfQ09FRkZfT0ZGLAotCQkJCSAgcGNj LT5yLmMgJiBQQ0NfQ09OU1RfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywK LQkJICAgICAgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0NPTlNUX0NPRUZGX09GRiAr IDQsCi0JCSAgICAgIHBjYy0+Zy5jICYgUENDX0NPTlNUX0NPRUZGX01BU0spOwotCURQVV9SRUdf V1JJVEUoJmN0eC0+aHcsCi0JCSAgICAgIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSArIFBDQ19D T05TVF9DT0VGRl9PRkYgKyA4LAotCQkgICAgICBwY2MtPmIuYyAmIFBDQ19DT05TVF9DT0VGRl9N QVNLKTsKLQotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFz ZSArIFBDQ19SX0NPRUZGX09GRiwKLQkJCQkgIHBjYy0+ci5yICYgUENDX0NPRUZGX01BU0spOwot CURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSArIFBDQ19S X0NPRUZGX09GRiArIDQsCi0JCQkJICBwY2MtPmcuciAmIFBDQ19DT0VGRl9NQVNLKTsKLQlEUFVf UkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfUl9DT0VG Rl9PRkYgKyA4LAotCQkJCSAgcGNjLT5iLnIgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0KLQlEUFVfUkVH X1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfR19DT0VGRl9P RkYsCi0JCQkJICBwY2MtPnIuZyAmIFBDQ19DT0VGRl9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZj dHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfR19DT0VGRl9PRkYgKyA0LAot CQkJCSAgcGNjLT5nLmcgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5o dywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0dfQ09FRkZfT0ZGICsgOCwKLQkJCQkg IHBjYy0+Yi5nICYgUENDX0NPRUZGX01BU0spOwotCi0JRFBVX1JFR19XUklURSgmY3R4LT5odywg Y3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0JfQ09FRkZfT0ZGLAotCQkJCSAgcGNjLT5y LmIgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAt PnNibGstPnBjYy5iYXNlICsgUENDX0JfQ09FRkZfT0ZGICsgNCwKLQkJCQkgIHBjYy0+Zy5iICYg UENDX0NPRUZGX01BU0spOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxr LT5wY2MuYmFzZSArIFBDQ19CX0NPRUZGX09GRiArIDgsCi0JCQkJICBwY2MtPmIuYiAmIFBDQ19D T0VGRl9NQVNLKTsKLQotCi0JRFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGst PnBjYy5iYXNlICsgUENDX1JHX0NPRUZGX09GRiwKLQkJCQkgIHBjYy0+ci5yZyAmIFBDQ19DT0VG Rl9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJh c2UgKyBQQ0NfUkdfQ09FRkZfT0ZGICsgNCwKLQkJCQkgIHBjYy0+Zy5yZyAmIFBDQ19DT0VGRl9N QVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2Ug KyBQQ0NfUkdfQ09FRkZfT0ZGICsgOCwKLQkJCQkgIHBjYy0+Yi5yZyAmIFBDQ19DT0VGRl9NQVNL KTsKLQotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSAr IFBDQ19SQl9DT0VGRl9PRkYsCi0JCQkJICBwY2MtPnIucmIgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0J RFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX1JC X0NPRUZGX09GRiArIDQsCi0JCQkJICBwY2MtPmcucmIgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBV X1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX1JCX0NP RUZGX09GRiArIDgsCi0JCQkJICBwY2MtPmIucmIgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0KLQotCURQ VV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSArIFBDQ19HQl9D T0VGRl9PRkYsCi0JCQkJICBwY2MtPnIuZ2IgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19X UklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0dCX0NPRUZGX09G RiArIDQsCi0JCQkJICBwY2MtPmcuZ2IgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19XUklU RSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0dCX0NPRUZGX09GRiAr IDgsCi0JCQkJICBwY2MtPmIuZ2IgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0KLQlEUFVfUkVHX1dSSVRF KCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfUkdCX0NPRUZGX09GRiwK LQkJCQkgIHBjYy0+ci5yZ2IgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19XUklURSgmY3R4 LT5odywKLQkJICAgICAgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX1JHQl9DT0VGRl9P RkYgKyA0LAotCQkgICAgICBwY2MtPmcucmdiICYgUENDX0NPRUZGX01BU0spOwotCURQVV9SRUdf V1JJVEUoJmN0eC0+aHcsCi0JCSAgICAgIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSArIFBDQ19S R0JfQ09FRkZfT0ZGICsgOCwKLQkJICAgICAgcGNjLT5iLnJnYiAmIFBDQ19DT0VGRl9NQVNLKTsK LQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UsIERTUFBf T1BfUENDX0VOQUJMRSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGFfdmx1dF92MV83KHN0 cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRybV9tc21fcGFf dmx1dCAqcGF5bG9hZCA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3X2NmZyA9IGNm ZzsKLQl1MzIgYmFzZSA9IGN0eC0+Y2FwLT5zYmxrLT52bHV0LmJhc2U7Ci0JdTMyIG9mZnNldCA9 IGJhc2UgKyBQQV9MVVRWX0RTUFBfT0ZGOwotCXUzMiBvcF9tb2RlLCB0bXA7Ci0JaW50IGkgPSAw LCBqID0gMDsKLQotCWlmICghaHdfY2ZnIHx8IChod19jZmctPnBheWxvYWQgJiYgaHdfY2ZnLT5s ZW4gIT0KLQkJCXNpemVvZihzdHJ1Y3QgZHJtX21zbV9wYV92bHV0KSkpIHsKLQkJRFJNX0VSUk9S KCJodyAlcEsgcGF5bG9hZCAlcEsgcGF5bG9hZHNpemUgJWQgZXhwIHNpemUgJXpkXG4iLAotCQkJ ICBod19jZmcsICgoaHdfY2ZnKSA/IGh3X2NmZy0+cGF5bG9hZCA6IE5VTEwpLAotCQkJICAoKGh3 X2NmZykgPyBod19jZmctPmxlbiA6IDApLAotCQkJICBzaXplb2Yoc3RydWN0IGRybV9tc21fcGFf dmx1dCkpOwotCQlyZXR1cm47Ci0JfQotCW9wX21vZGUgPSBEUFVfUkVHX1JFQUQoJmN0eC0+aHcs IGJhc2UpOwotCWlmICghaHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCURSTV9ERUJVR19EUklWRVIoIkRp c2FibGUgdmx1dCBmZWF0dXJlXG4iKTsKLQkJLyoqCi0JCSAqIEluIHRoZSBQQV9WTFVUIGRpc2Fi bGUgY2FzZSwgcmVtb3ZlIFBBX1ZMVVQgZW5hYmxlIGJpdCgxOSkKLQkJICogZmlyc3QsIHRoZW4g Y2hlY2sgd2hldGhlciBhbnkgb3RoZXIgUEEgc3ViLWZlYXR1cmVzIGFyZQotCQkgKiBlbmFibGVk IG9yIG5vdC4gSWYgbm9uZSBvZiB0aGUgc3ViLWZlYXR1cmVzIGFyZSBlbmFibGVkLAotCQkgKiBy ZW1vdmUgdGhlIFBBIGdsb2JhbCBlbmFibGUgYml0KDIwKS4KLQkJICovCi0JCW9wX21vZGUgJj0g figodTMyKURTUFBfT1BfUEFfTFVUVl9FTik7Ci0JCWlmIChQQV9EU1BQX0RJU0FCTEVfUkVRVUlS RUQob3BfbW9kZSkpCi0JCQlvcF9tb2RlICY9IH4oKHUzMilEU1BQX09QX1BBX0VOKTsKLQkJRFBV X1JFR19XUklURSgmY3R4LT5odywgYmFzZSwgb3BfbW9kZSk7Ci0JCXJldHVybjsKLQl9Ci0JcGF5 bG9hZCA9IGh3X2NmZy0+cGF5bG9hZDsKLQlEUk1fREVCVUdfRFJJVkVSKCJFbmFibGUgdmx1dCBm ZWF0dXJlIGZsYWdzICVsbHhcbiIsIHBheWxvYWQtPmZsYWdzKTsKLQlmb3IgKGkgPSAwLCBqID0g MDsgaSA8IEFSUkFZX1NJWkUocGF5bG9hZC0+dmFsKTsgaSArPSAyLCBqICs9IDQpIHsKLQkJdG1w ID0gKHBheWxvYWQtPnZhbFtpXSAmIFJFR19NQVNLKDEwKSkgfAotCQkJKChwYXlsb2FkLT52YWxb aSArIDFdICYgUkVHX01BU0soMTApKSA8PCAxNik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcs IChvZmZzZXQgKyBqKSwKLQkJCSAgICAgdG1wKTsKLQl9Ci0JRFBVX1JFR19XUklURSgmY3R4LT5o dywgKGJhc2UgKyBQQV9MVVRfU1dBUF9PRkYpLCAxKTsKLQlvcF9tb2RlIHw9IERTUFBfT1BfUEFf RU4gfCBEU1BQX09QX1BBX0xVVFZfRU47Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgYmFzZSwg b3BfbW9kZSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGFfdmx1dF92MV84KHN0cnVjdCBk cHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRybV9tc21fcGFfdmx1dCAq cGF5bG9hZCA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3X2NmZyA9IGNmZzsKLQlz dHJ1Y3QgZHB1X2h3X2N0bCAqY3RsID0gTlVMTDsKLQl1MzIgdmx1dF9iYXNlLCBwYV9oaXN0X2Jh c2U7Ci0JdTMyIGN0cmxfb2ZmLCBzd2FwX29mZjsKLQl1MzIgdG1wID0gMDsKLQlpbnQgaSA9IDAs IGogPSAwOwotCXUzMiBmbHVzaF9tYXNrID0gMDsKLQotCWlmICghY3R4KSB7Ci0JCURSTV9FUlJP UigiaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIgTlVMTCBjdHhcbiIpOwotCQlyZXR1cm47Ci0JfQot Ci0JaWYgKCFod19jZmcgfHwgKGh3X2NmZy0+cGF5bG9hZCAmJiBod19jZmctPmxlbiAhPQotCQkJ c2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BhX3ZsdXQpKSkgewotCQlEUk1fRVJST1IoImh3ICVwSyBw YXlsb2FkICVwSyBwYXlsb2Fkc2l6ZSAlZCBleHAgc2l6ZSAlemRcbiIsCi0JCQkgIGh3X2NmZywg KChod19jZmcpID8gaHdfY2ZnLT5wYXlsb2FkIDogTlVMTCksCi0JCQkgICgoaHdfY2ZnKSA/IGh3 X2NmZy0+bGVuIDogMCksCi0JCQkgIHNpemVvZihzdHJ1Y3QgZHJtX21zbV9wYV92bHV0KSk7Ci0J CXJldHVybjsKLQl9Ci0KLQljdGwgPSBod19jZmctPmN0bDsKLQl2bHV0X2Jhc2UgPSBjdHgtPmNh cC0+c2Jsay0+dmx1dC5iYXNlOwotCXBhX2hpc3RfYmFzZSA9IGN0eC0+Y2FwLT5zYmxrLT5oaXN0 LmJhc2U7Ci0JY3RybF9vZmYgPSBwYV9oaXN0X2Jhc2UgKyBQQV9MVVRWX0RTUFBfQ1RSTF9PRkY7 Ci0Jc3dhcF9vZmYgPSBwYV9oaXN0X2Jhc2UgKyBQQV9MVVRWX0RTUFBfU1dBUF9PRkY7Ci0KLQlp ZiAoIWh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fREVCVUdfRFJJVkVSKCJEaXNhYmxlIHZsdXQg ZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0cmxfb2ZmLCAwKTsKLQkJ Z290byBleGl0OwotCX0KLQotCXBheWxvYWQgPSBod19jZmctPnBheWxvYWQ7Ci0JRFJNX0RFQlVH X0RSSVZFUigiRW5hYmxlIHZsdXQgZmVhdHVyZSBmbGFncyAlbGx4XG4iLCBwYXlsb2FkLT5mbGFn cyk7Ci0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBBUlJBWV9TSVpFKHBheWxvYWQtPnZhbCk7IGkg Kz0gMiwgaiArPSA0KSB7Ci0JCXRtcCA9IChwYXlsb2FkLT52YWxbaV0gJiBSRUdfTUFTSygxMCkp IHwKLQkJCSgocGF5bG9hZC0+dmFsW2kgKyAxXSAmIFJFR19NQVNLKDEwKSkgPDwgMTYpOwotCQlE UFVfUkVHX1dSSVRFKCZjdHgtPmh3LCAodmx1dF9iYXNlICsgaiksIHRtcCk7Ci0JfQotCURQVV9S RUdfV1JJVEUoJmN0eC0+aHcsIGN0cmxfb2ZmLCAxKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3 LCBzd2FwX29mZiwgMSk7Ci0KLWV4aXQ6Ci0JLyogdXBkYXRlIGZsdXNoIGJpdCAqLwotCWlmIChj dGwgJiYgY3RsLT5vcHMuZ2V0X2JpdG1hc2tfZHNwcF9wYXZsdXQpIHsKLQkJY3RsLT5vcHMuZ2V0 X2JpdG1hc2tfZHNwcF9wYXZsdXQoY3RsLCAmZmx1c2hfbWFzaywgY3R4LT5pZHgpOwotCQlpZiAo Y3RsLT5vcHMudXBkYXRlX3BlbmRpbmdfZmx1c2gpCi0JCQljdGwtPm9wcy51cGRhdGVfcGVuZGlu Z19mbHVzaChjdGwsIGZsdXNoX21hc2spOwotCX0KLX0KLQotdm9pZCBkcHVfc2V0dXBfZHNwcF9n Y192MV83KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRy bV9tc21fcGdjX2x1dCAqcGF5bG9hZCA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3 X2NmZyA9IGNmZzsKLQl1MzIgYzBfb2ZmLCBjMV9vZmYsIGMyX29mZiwgaTsKLQotCWlmICghaHdf Y2ZnIHx8IChod19jZmctPnBheWxvYWQgJiYgaHdfY2ZnLT5sZW4gIT0KLQkJCXNpemVvZihzdHJ1 Y3QgZHJtX21zbV9wZ2NfbHV0KSkpIHsKLQkJRFJNX0VSUk9SKCJodyAlcEsgcGF5bG9hZCAlcEsg cGF5bG9hZHNpemUgJWQgZXhwIHNpemUgJXpkXG4iLAotCQkJICBod19jZmcsICgoaHdfY2ZnKSA/ IGh3X2NmZy0+cGF5bG9hZCA6IE5VTEwpLAotCQkJICAoKGh3X2NmZykgPyBod19jZmctPmxlbiA6 IDApLAotCQkJICBzaXplb2Yoc3RydWN0IGRybV9tc21fcGdjX2x1dCkpOwotCQlyZXR1cm47Ci0J fQotCi0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiRGlzYWJs ZSBwZ2MgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5z YmxrLT5nYy5iYXNlLCAwKTsKLQkJcmV0dXJuOwotCX0KLQlwYXlsb2FkID0gaHdfY2ZnLT5wYXls b2FkOwotCi0JLyogSW5pdGlhbGl6ZSBpbmRleCBvZmZzZXRzICovCi0JYzBfb2ZmID0gY3R4LT5j YXAtPnNibGstPmdjLmJhc2UgKyBQR0NfQzBfSU5ERVhfT0ZGOwotCWMxX29mZiA9IGMwX29mZiAr IChzaXplb2YodTMyKSAqIDIpOwotCWMyX29mZiA9IGMxX29mZiArIChzaXplb2YodTMyKSAqIDIp OwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGMwX29mZiwgMCk7Ci0JRFBVX1JFR19XUklURSgm Y3R4LT5odywgYzFfb2ZmLCAwKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjMl9vZmYsIDAp OwotCi0JLyogSW5pdGlhbGl6ZSB0YWJsZSBvZmZzZXRzICovCi0JYzBfb2ZmID0gY3R4LT5jYXAt PnNibGstPmdjLmJhc2UgKyBQR0NfQzBfT0ZGOwotCWMxX29mZiA9IGMwX29mZiArIChzaXplb2Yo dTMyKSAqIDIpOwotCWMyX29mZiA9IGMxX29mZiArIChzaXplb2YodTMyKSAqIDIpOwotCi0JZm9y IChpID0gMDsgaSA8IFBHQ19UQkxfTEVOOyBpKyspIHsKLQkJRFBVX1JFR19XUklURSgmY3R4LT5o dywgYzBfb2ZmLCBwYXlsb2FkLT5jMFtpXSk7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGMx X29mZiwgcGF5bG9hZC0+YzFbaV0pOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjMl9vZmYs IHBheWxvYWQtPmMyW2ldKTsKLQl9Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAt PnNibGstPmdjLmJhc2UgKyBQR0NfTFVUX1NXQVBfT0ZGLAotCQkJQklUKDApKTsKLQlpID0gQklU KDApIHwgKChwYXlsb2FkLT5mbGFncyAmIFBHQ184Ql9ST1VORCkgPyBCSVQoMSkgOiAwKTsKLQlE UFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+Z2MuYmFzZSwgaSk7Ci19CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJv Y2Vzc2luZ192MV83LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29s b3JfcHJvY2Vzc2luZ192MV83LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ODA3 YWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2Nv bG9yX3Byb2Nlc3NpbmdfdjFfNy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyog Q29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFBVX0hXX0NPTE9SX1BST0NF U1NJTkdfVjFfN19ICi0jZGVmaW5lIF9EUFVfSFdfQ09MT1JfUFJPQ0VTU0lOR19WMV83X0gKLQot I2luY2x1ZGUgImRwdV9od19zc3BwLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2RzcHAuaCIKLQotLyoq Ci0gKiBkcHVfc2V0dXBfcGlwZV9wYV9odWVfdjFfNyAtIHNldHVwIFNTUFAgaHVlIGZlYXR1cmUg aW4gdjEuNyBoYXJkd2FyZQotICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQKLSAqIEBj Zmc6IFBvaW50ZXIgdG8gaHVlIGRhdGEKLSAqLwotdm9pZCBkcHVfc2V0dXBfcGlwZV9wYV9odWVf djFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoqCi0gKiBkcHVf c2V0dXBfcGlwZV9wYV9zYXRfdjFfNyAtIHNldHVwIFNTUFAgc2F0dXJhdGlvbiBmZWF0dXJlIGlu IHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0Ci0gKiBAY2Zn OiBQb2ludGVyIHRvIHNhdHVyYXRpb24gZGF0YQotICovCi12b2lkIGRwdV9zZXR1cF9waXBlX3Bh X3NhdF92MV83KHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LCB2b2lkICpjZmcpOwotCi0vKioKLSAq IGRwdV9zZXR1cF9waXBlX3BhX3ZhbF92MV83IC0gc2V0dXAgU1NQUCB2YWx1ZSBmZWF0dXJlIGlu IHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0Ci0gKiBAY2Zn OiBQb2ludGVyIHRvIHZhbHVlIGRhdGEKLSAqLwotdm9pZCBkcHVfc2V0dXBfcGlwZV9wYV92YWxf djFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoqCi0gKiBkcHVf c2V0dXBfcGlwZV9wYV9jb250X3YxXzcgLSBzZXR1cCBTU1BQIGNvbnRyYXN0IGZlYXR1cmUgaW4g djEuNyBoYXJkd2FyZQotICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQKLSAqIEBjZmc6 IFBvaW50ZXIgdG8gY29udHJhc3QgZGF0YQotICovCi12b2lkIGRwdV9zZXR1cF9waXBlX3BhX2Nv bnRfdjFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoqCi0gKiBk cHVfc2V0dXBfcGlwZV9wYV9tZW1jb2xfdjFfNyAtIHNldHVwIFNTUFAgbWVtb3J5IGNvbG9yIGlu IHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0Ci0gKiBAdHlw ZTogTWVtb3J5IGNvbG9yIHR5cGUgKFNraW4sIHNreSwgb3IgZm9saWFnZSkKLSAqIEBjZmc6IFBv aW50ZXIgdG8gbWVtb3J5IGNvbG9yIGNvbmZpZyBkYXRhCi0gKi8KLXZvaWQgZHB1X3NldHVwX3Bp cGVfcGFfbWVtY29sX3YxXzcoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCQkJICAgZW51bSBk cHVfbWVtY29sb3JfdHlwZSB0eXBlLAotCQkJCSAgIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogZHB1 X3NldHVwX2RzcHBfcGNjX3YxXzcgLSBzZXR1cCBEU1BQIFBDQyB2ZWF0dXJlIGluIHYxLjcgaGFy ZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0gKiBAY2ZnOiBQb2ludGVy IHRvIFBDQyBkYXRhCi0gKi8KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGNjX3YxXzcoc3RydWN0IGRw dV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogZHB1X3NldHVwX2RzcHBfcGFf aHVlX3YxXzcgLSBzZXR1cCBEU1BQIGh1ZSBmZWF0dXJlIGluIHYxLjcgaGFyZHdhcmUKLSAqIEBj dHg6IFBvaW50ZXIgdG8gRFNQUCBjb250ZXh0Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIGh1ZSBkYXRh Ci0gKi8KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGFfaHVlX3YxXzcoc3RydWN0IGRwdV9od19kc3Bw ICpjdHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogZHB1X3NldHVwX2RzcHBfcGFfdmx1dF92MV83 IC0gc2V0dXAgRFNQUCBQQSB2TFVUIGZlYXR1cmUgaW4gdjEuNyBoYXJkd2FyZQotICogQGN0eDog UG9pbnRlciB0byBEU1BQIGNvbnRleHQKLSAqIEBjZmc6IFBvaW50ZXIgdG8gdkxVVCBkYXRhCi0g Ki8KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGFfdmx1dF92MV83KHN0cnVjdCBkcHVfaHdfZHNwcCAq Y3R4LCB2b2lkICpjZmcpOwotCi0vKioKLSAqIGRwdV9zZXR1cF9kc3BwX3BhX3ZsdXRfdjFfOCAt IHNldHVwIERTUFAgUEEgdkxVVCBmZWF0dXJlIGluIHYxLjggaGFyZHdhcmUKLSAqIEBjdHg6IFBv aW50ZXIgdG8gRFNQUCBjb250ZXh0Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIHZMVVQgZGF0YQotICov Ci12b2lkIGRwdV9zZXR1cF9kc3BwX3BhX3ZsdXRfdjFfOChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0 eCwgdm9pZCAqY2ZnKTsKLQotLyoqCi0gKiBkcHVfc2V0dXBfZHNwcF9nY192MV83IC0gc2V0dXAg RFNQUCBnYyBmZWF0dXJlIGluIHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gRFNQ UCBjb250ZXh0Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIGdjIGRhdGEKLSAqLwotdm9pZCBkcHVfc2V0 dXBfZHNwcF9nY192MV83KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0j ZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19j dGwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jdGwuYwppbmRleCA2 YzkyODljLi5hZDAyMzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfY3RsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X2N0bC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSAiZHB1X2h3X2N0bC5oIgogI2luY2x1 ZGUgImRwdV9kYmcuaCIKICNpbmNsdWRlICJkcHVfa21zLmgiCi0jaW5jbHVkZSAiZHB1X3JlZ19k bWEuaCIKIAogI2RlZmluZSAgIENUTF9MQVlFUihsbSkgICAgICAgICAgICAgICAgIFwKIAkoKChs bSkgPT0gTE1fNSkgPyAoMHgwMjQpIDogKCgobG0pIC0gTE1fMCkgKiAweDAwNCkpCkBAIC0yMDMs MzggKzIwMiw2IEBAIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZHB1X2h3X2N0bF9nZXRfYml0bWFz a19taXhlcihzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCXJldHVybiBmbHVzaGJpdHM7CiB9CiAK LXN0YXRpYyBpbmxpbmUgaW50IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfZHNwcChzdHJ1Y3QgZHB1 X2h3X2N0bCAqY3R4LAotCQl1MzIgKmZsdXNoYml0cywgZW51bSBkcHVfZHNwcCBkc3BwKQotewot CXN3aXRjaCAoZHNwcCkgewotCWNhc2UgRFNQUF8wOgotCQkqZmx1c2hiaXRzIHw9IEJJVCgxMyk7 Ci0JCWJyZWFrOwotCWNhc2UgRFNQUF8xOgotCQkqZmx1c2hiaXRzIHw9IEJJVCgxNCk7Ci0JCWJy ZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGlubGluZSBpbnQgZHB1X2h3X2N0bF9nZXRfYml0bWFza19kc3BwX3Bhdmx1dChzdHJ1 Y3QgZHB1X2h3X2N0bCAqY3R4LAotCQl1MzIgKmZsdXNoYml0cywgZW51bSBkcHVfZHNwcCBkc3Bw KQotewotCXN3aXRjaCAoZHNwcCkgewotCWNhc2UgRFNQUF8wOgotCQkqZmx1c2hiaXRzIHw9IEJJ VCgzKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU1BQXzE6Ci0JCSpmbHVzaGJpdHMgfD0gQklUKDQpOwot CQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19 Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfaW50ZihzdHJ1Y3Qg ZHB1X2h3X2N0bCAqY3R4LAogCQl1MzIgKmZsdXNoYml0cywgZW51bSBkcHVfaW50ZiBpbnRmKQog ewpAQCAtNTAwLDE0ICs0NjcsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfY3RsX2ludGZfY2ZnKHN0 cnVjdCBkcHVfaHdfY3RsICpjdHgsCiAJRFBVX1JFR19XUklURShjLCBDVExfVE9QLCBpbnRmX2Nm Zyk7CiB9CiAKLXN0YXRpYyB2b2lkIGRwdV9od19yZWdfZG1hX2ZsdXNoKHN0cnVjdCBkcHVfaHdf Y3RsICpjdHgpCi17Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqb3BzID0gZHB1X3JlZ19k bWFfZ2V0X29wcygpOwotCi0JaWYgKG9wcyAmJiBvcHMtPmxhc3RfY29tbWFuZCkKLQkJb3BzLT5s YXN0X2NvbW1hbmQoY3R4LCBETUFfQ1RMX1FVRVVFMCk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9zZXR1 cF9jdGxfb3BzKHN0cnVjdCBkcHVfaHdfY3RsX29wcyAqb3BzLAogCQl1bnNpZ25lZCBsb25nIGNh cCkKIHsKQEAgLTUyNSwxMSArNDg0LDggQEAgc3RhdGljIHZvaWQgX3NldHVwX2N0bF9vcHMoc3Ry dWN0IGRwdV9od19jdGxfb3BzICpvcHMsCiAJb3BzLT5zZXR1cF9ibGVuZHN0YWdlID0gZHB1X2h3 X2N0bF9zZXR1cF9ibGVuZHN0YWdlOwogCW9wcy0+Z2V0X2JpdG1hc2tfc3NwcCA9IGRwdV9od19j dGxfZ2V0X2JpdG1hc2tfc3NwcDsKIAlvcHMtPmdldF9iaXRtYXNrX21peGVyID0gZHB1X2h3X2N0 bF9nZXRfYml0bWFza19taXhlcjsKLQlvcHMtPmdldF9iaXRtYXNrX2RzcHAgPSBkcHVfaHdfY3Rs X2dldF9iaXRtYXNrX2RzcHA7Ci0Jb3BzLT5nZXRfYml0bWFza19kc3BwX3Bhdmx1dCA9IGRwdV9o d19jdGxfZ2V0X2JpdG1hc2tfZHNwcF9wYXZsdXQ7CiAJb3BzLT5nZXRfYml0bWFza19pbnRmID0g ZHB1X2h3X2N0bF9nZXRfYml0bWFza19pbnRmOwogCW9wcy0+Z2V0X2JpdG1hc2tfY2RtID0gZHB1 X2h3X2N0bF9nZXRfYml0bWFza19jZG07Ci0Jb3BzLT5yZWdfZG1hX2ZsdXNoID0gZHB1X2h3X3Jl Z19kbWFfZmx1c2g7CiB9OwogCiBzdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19v cHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf Y3RsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmgKaW5kZXgg MTg1ZmQyNi4uYzY2YTcxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2N0bC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d19jdGwuaApAQCAtMTM4LDE0ICsxMzgsNiBAQCBzdHJ1Y3QgZHB1X2h3X2N0bF9vcHMgewogCXVp bnQzMl90ICgqZ2V0X2JpdG1hc2tfbWl4ZXIpKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCiAJCWVu dW0gZHB1X2xtIGJsayk7CiAKLQlpbnQgKCpnZXRfYml0bWFza19kc3BwKShzdHJ1Y3QgZHB1X2h3 X2N0bCAqY3R4LAotCQl1MzIgKmZsdXNoYml0cywKLQkJZW51bSBkcHVfZHNwcCBibGspOwotCi0J aW50ICgqZ2V0X2JpdG1hc2tfZHNwcF9wYXZsdXQpKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCi0J CXUzMiAqZmx1c2hiaXRzLAotCQllbnVtIGRwdV9kc3BwIGJsayk7Ci0KIAlpbnQgKCpnZXRfYml0 bWFza19pbnRmKShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCQl1MzIgKmZsdXNoYml0cywKIAkJ ZW51bSBkcHVfaW50ZiBibGspOwpAQCAtMTY4LDEzICsxNjAsNiBAQCBzdHJ1Y3QgZHB1X2h3X2N0 bF9vcHMgewogCSAqLwogCXZvaWQgKCpzZXR1cF9ibGVuZHN0YWdlKShzdHJ1Y3QgZHB1X2h3X2N0 bCAqY3R4LAogCQllbnVtIGRwdV9sbSBsbSwgc3RydWN0IGRwdV9od19zdGFnZV9jZmcgKmNmZyk7 Ci0KLQkvKioKLQkgKiBGbHVzaCB0aGUgcmVnIGRtYSBieSBzZW5kaW5nIGxhc3QgY29tbWFuZC4K LQkgKiBAY3R4ICAgICAgIDogY3RsIHBhdGggY3R4IHBvaW50ZXIKLQkgKi8KLQl2b2lkICgqcmVn X2RtYV9mbHVzaCkoc3RydWN0IGRwdV9od19jdGwgKmN0eCk7Ci0KIH07CiAKIC8qKgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAuYyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kc3BwLmMKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IGEwNDJjYWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2RzcHAuYworKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0v KiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0g KgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGRybS9tc21fZHJtX3BwLmg+ Ci0jaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdpby5oIgotI2luY2x1 ZGUgImRwdV9od19jYXRhbG9nLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2RzcHAuaCIKLSNpbmNsdWRl ICJkcHVfaHdfY29sb3JfcHJvY2Vzc2luZy5oIgotI2luY2x1ZGUgImRwdV9kYmcuaCIKLSNpbmNs dWRlICJkcHVfYWQ0LmgiCi0jaW5jbHVkZSAiZHB1X2ttcy5oIgotCi1zdGF0aWMgc3RydWN0IGRw dV9kc3BwX2NmZyAqX2RzcHBfb2Zmc2V0KGVudW0gZHB1X2RzcHAgZHNwcCwKLQkJc3RydWN0IGRw dV9tZHNzX2NmZyAqbSwKLQkJdm9pZCBfX2lvbWVtICphZGRyLAotCQlzdHJ1Y3QgZHB1X2h3X2Js a19yZWdfbWFwICpiKQotewotCWludCBpOwotCi0JaWYgKCFtIHx8ICFhZGRyIHx8ICFiKQotCQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWZvciAoaSA9IDA7IGkgPCBtLT5kc3BwX2NvdW50 OyBpKyspIHsKLQkJaWYgKGRzcHAgPT0gbS0+ZHNwcFtpXS5pZCkgewotCQkJYi0+YmFzZV9vZmYg PSBhZGRyOwotCQkJYi0+YmxrX29mZiA9IG0tPmRzcHBbaV0uYmFzZTsKLQkJCWItPmxlbmd0aCA9 IG0tPmRzcHBbaV0ubGVuOwotCQkJYi0+aHd2ZXJzaW9uID0gbS0+aHd2ZXJzaW9uOwotCQkJYi0+ bG9nX21hc2sgPSBEUFVfREJHX01BU0tfRFNQUDsKLQkJCXJldHVybiAmbS0+ZHNwcFtpXTsKLQkJ fQotCX0KLQotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQotCi1zdGF0aWMgdm9pZCBfc2V0 dXBfZHNwcF9vcHMoc3RydWN0IGRwdV9od19kc3BwICpjLCB1bnNpZ25lZCBsb25nIGZlYXR1cmVz KQotewotCWludCBpID0gMCwgcmV0OwotCi0JaWYgKCFjIHx8ICFjLT5jYXAgfHwgIWMtPmNhcC0+ c2JsaykKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IERQVV9EU1BQX01BWDsgaSsrKSB7 Ci0JCWlmICghdGVzdF9iaXQoaSwgJmZlYXR1cmVzKSkKLQkJCWNvbnRpbnVlOwotCQlzd2l0Y2gg KGkpIHsKLQkJY2FzZSBEUFVfRFNQUF9QQ0M6Ci0JCQlpZiAoYy0+Y2FwLT5zYmxrLT5wY2MudmVy c2lvbiA9PQotCQkJCShEUFVfQ09MT1JfUFJPQ0VTU19WRVIoMHgxLCAweDcpKSkKLQkJCQljLT5v cHMuc2V0dXBfcGNjID0gZHB1X3NldHVwX2RzcHBfcGNjX3YxXzc7Ci0JCQllbHNlIGlmIChjLT5j YXAtPnNibGstPnBjYy52ZXJzaW9uID09Ci0JCQkJCShEUFVfQ09MT1JfUFJPQ0VTU19WRVIoMHg0 LCAweDApKSkgewotCQkJCXJldCA9IHJlZ19kbWF2MV9pbml0X2RzcHBfb3BfdjQoaSwgYy0+aWR4 KTsKLQkJCQlpZiAoIXJldCkKLQkJCQkJYy0+b3BzLnNldHVwX3BjYyA9Ci0JCQkJCQlyZWdfZG1h djFfc2V0dXBfZHNwcF9wY2N2NDsKLQkJCQllbHNlCi0JCQkJCWMtPm9wcy5zZXR1cF9wY2MgPQot CQkJCQkJZHB1X3NldHVwX2RzcHBfcGNjdjQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVf RFNQUF9IU0lDOgotCQkJaWYgKGMtPmNhcC0+c2Jsay0+aHNpYy52ZXJzaW9uID09Ci0JCQkJKERQ VV9DT0xPUl9QUk9DRVNTX1ZFUigweDEsIDB4NykpKQotCQkJCWMtPm9wcy5zZXR1cF9odWUgPSBk cHVfc2V0dXBfZHNwcF9wYV9odWVfdjFfNzsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9EU1BQX1ZM VVQ6Ci0JCQlpZiAoYy0+Y2FwLT5zYmxrLT52bHV0LnZlcnNpb24gPT0KLQkJCQkoRFBVX0NPTE9S X1BST0NFU1NfVkVSKDB4MSwgMHg3KSkpIHsKLQkJCQljLT5vcHMuc2V0dXBfdmx1dCA9Ci0JCQkJ ICAgIGRwdV9zZXR1cF9kc3BwX3BhX3ZsdXRfdjFfNzsKLQkJCX0gZWxzZSBpZiAoYy0+Y2FwLT5z YmxrLT52bHV0LnZlcnNpb24gPT0KLQkJCQkJKERQVV9DT0xPUl9QUk9DRVNTX1ZFUigweDEsIDB4 OCkpKSB7Ci0JCQkJcmV0ID0gcmVnX2RtYXYxX2luaXRfZHNwcF9vcF92NChpLCBjLT5pZHgpOwot CQkJCWlmICghcmV0KQotCQkJCQljLT5vcHMuc2V0dXBfdmx1dCA9Ci0JCQkJCXJlZ19kbWF2MV9z ZXR1cF9kc3BwX3ZsdXR2MTg7Ci0JCQkJZWxzZQotCQkJCQljLT5vcHMuc2V0dXBfdmx1dCA9Ci0J CQkJCWRwdV9zZXR1cF9kc3BwX3BhX3ZsdXRfdjFfODsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNl IERQVV9EU1BQX0dBTVVUOgotCQkJaWYgKGMtPmNhcC0+c2Jsay0+Z2FtdXQudmVyc2lvbiA9PQot CQkJCQlEUFVfQ09MT1JfUFJPQ0VTU19WRVIoMHg0LCAwKSkgewotCQkJCXJldCA9IHJlZ19kbWF2 MV9pbml0X2RzcHBfb3BfdjQoaSwgYy0+aWR4KTsKLQkJCQlpZiAoIXJldCkKLQkJCQkJYy0+b3Bz LnNldHVwX2dhbXV0ID0KLQkJCQkJCXJlZ19kbWF2MV9zZXR1cF9kc3BwXzNkX2dhbXV0djQ7Ci0J CQkJZWxzZQotCQkJCQljLT5vcHMuc2V0dXBfZ2FtdXQgPQotCQkJCQkJZHB1X3NldHVwX2RzcHBf M2RfZ2FtdXR2NDsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIERQVV9EU1BQX0dDOgotCQkJaWYg KGMtPmNhcC0+c2Jsay0+Z2MudmVyc2lvbiA9PQotCQkJCQlEUFVfQ09MT1JfUFJPQ0VTU19WRVIo MHgxLCA4KSkgewotCQkJCXJldCA9IHJlZ19kbWF2MV9pbml0X2RzcHBfb3BfdjQoaSwgYy0+aWR4 KTsKLQkJCQlpZiAoIXJldCkKLQkJCQkJYy0+b3BzLnNldHVwX2djID0KLQkJCQkJCXJlZ19kbWF2 MV9zZXR1cF9kc3BwX2djdjE4OwotCQkJCS8qKiBwcm9ncmFtbWluZyBmb3IgdjE4IHRocm91Z2gg YWhiIGlzIHNhbWUKLQkJCQkgKiBhcyB2MTcgaGVuY2UgYXNzaWduIHYxNyBmdW5jdGlvbgotCQkJ CSAqLwotCQkJCWVsc2UKLQkJCQkJYy0+b3BzLnNldHVwX2djID0KLQkJCQkJCWRwdV9zZXR1cF9k c3BwX2djX3YxXzc7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfRFNQUF9JR0M6Ci0JCQlp ZiAoYy0+Y2FwLT5zYmxrLT5pZ2MudmVyc2lvbiA9PQotCQkJCQlEUFVfQ09MT1JfUFJPQ0VTU19W RVIoMHgzLCAweDEpKSB7Ci0JCQkJcmV0ID0gcmVnX2RtYXYxX2luaXRfZHNwcF9vcF92NChpLCBj LT5pZHgpOwotCQkJCWlmICghcmV0KQotCQkJCQljLT5vcHMuc2V0dXBfaWdjID0KLQkJCQkJCXJl Z19kbWF2MV9zZXR1cF9kc3BwX2lnY3YzMTsKLQkJCQllbHNlCi0JCQkJCWMtPm9wcy5zZXR1cF9p Z2MgPQotCQkJCQkJZHB1X3NldHVwX2RzcHBfaWdjdjM7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2Fz ZSBEUFVfRFNQUF9BRDoKLQkJCWlmIChjLT5jYXAtPnNibGstPmFkLnZlcnNpb24gPT0KLQkJCSAg ICBEUFVfQ09MT1JfUFJPQ0VTU19WRVIoNCwgMCkpIHsKLQkJCQljLT5vcHMuc2V0dXBfYWQgPSBk cHVfc2V0dXBfZHNwcF9hZDQ7Ci0JCQkJYy0+b3BzLmFkX3JlYWRfaW50cl9yZXNwID0KLQkJCQkJ ZHB1X3JlYWRfaW50cl9yZXNwX2FkNDsKLQkJCQljLT5vcHMudmFsaWRhdGVfYWQgPSBkcHVfdmFs aWRhdGVfZHNwcF9hZDQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwot CQl9Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7 Ci0JLnN0YXJ0ID0gTlVMTCwKLQkuc3RvcCA9IE5VTEwsCi19OwotCi1zdHJ1Y3QgZHB1X2h3X2Rz cHAgKmRwdV9od19kc3BwX2luaXQoZW51bSBkcHVfZHNwcCBpZHgsCi0JCQl2b2lkIF9faW9tZW0g KmFkZHIsCi0JCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptKQotewotCXN0cnVjdCBkcHVfaHdfZHNw cCAqYzsKLQlzdHJ1Y3QgZHB1X2RzcHBfY2ZnICpjZmc7Ci0JaW50IHJjOwotCi0JaWYgKCFhZGRy IHx8ICFtKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWMgPSBremFsbG9jKHNpemVv ZigqYyksIEdGUF9LRVJORUwpOwotCWlmICghYykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7 Ci0KLQljZmcgPSBfZHNwcF9vZmZzZXQoaWR4LCBtLCBhZGRyLCAmYy0+aHcpOwotCWlmIChJU19F UlJfT1JfTlVMTChjZmcpKSB7Ci0JCWtmcmVlKGMpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFM KTsKLQl9Ci0KLQkvKiBQb3B1bGF0ZSBEU1BQIFRvcCBIVyBibG9jayAqLwotCWMtPmh3X3RvcC5i YXNlX29mZiA9IGFkZHI7Ci0JYy0+aHdfdG9wLmJsa19vZmYgPSBtLT5kc3BwX3RvcC5iYXNlOwot CWMtPmh3X3RvcC5sZW5ndGggPSBtLT5kc3BwX3RvcC5sZW47Ci0JYy0+aHdfdG9wLmh3dmVyc2lv biA9IG0tPmh3dmVyc2lvbjsKLQljLT5od190b3AubG9nX21hc2sgPSBEUFVfREJHX01BU0tfRFNQ UDsKLQotCS8qIEFzc2lnbiBvcHMgKi8KLQljLT5pZHggPSBpZHg7Ci0JYy0+Y2FwID0gY2ZnOwot CV9zZXR1cF9kc3BwX29wcyhjLCBjLT5jYXAtPmZlYXR1cmVzKTsKLQotCXJjID0gZHB1X2h3X2Js a19pbml0KCZjLT5iYXNlLCBEUFVfSFdfQkxLX0RTUFAsIGlkeCwgJmRwdV9od19vcHMpOwotCWlm IChyYykgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IGh3IGJsayAlZFxuIiwgcmMpOwot CQlnb3RvIGJsa19pbml0X2Vycm9yOwotCX0KLQotCWRwdV9kYmdfcmVnX3JlZ2lzdGVyX2R1bXBf cmFuZ2UoRFBVX0RCR19OQU1FLCBjZmctPm5hbWUsIGMtPmh3LmJsa19vZmYsCi0JCQljLT5ody5i bGtfb2ZmICsgYy0+aHcubGVuZ3RoLCBjLT5ody54aW5faWQpOwotCi0JcmV0dXJuIGM7Ci0KLWJs a19pbml0X2Vycm9yOgotCWt6ZnJlZShjKTsKLQotCXJldHVybiBFUlJfUFRSKHJjKTsKLX0KLQot dm9pZCBkcHVfaHdfZHNwcF9kZXN0cm95KHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCkKLXsKLQlp ZiAoZHNwcCkgewotCQlyZWdfZG1hdjFfZGVpbml0X2RzcHBfb3BzKGRzcHAtPmlkeCk7Ci0JCWRw dV9od19ibGtfZGVzdHJveSgmZHNwcC0+YmFzZSk7Ci0JfQotCWtmcmVlKGRzcHApOwotfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kc3BwLmgKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGNjNzI0OTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBA Ci0vKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25s eSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9EUFVfSFdfRFNQUF9I Ci0jZGVmaW5lIF9EUFVfSFdfRFNQUF9ICi0KLSNpbmNsdWRlICJkcHVfaHdfYmxrLmgiCi0KLXN0 cnVjdCBkcHVfaHdfZHNwcDsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2h3X2RzcHBfb3BzIC0gaW50 ZXJmYWNlIHRvIHRoZSBkc3BwIGhhcmR3YXJlIGRyaXZlciBmdW5jdGlvbnMKLSAqIENhbGxlciBt dXN0IGNhbGwgdGhlIGluaXQgZnVuY3Rpb24gdG8gZ2V0IHRoZSBkc3BwIGNvbnRleHQgZm9yIGVh Y2ggZHNwcAotICogQXNzdW1wdGlvbiBpcyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQg YWZ0ZXIgY2xvY2tzIGFyZSBlbmFibGVkCi0gKi8KLXN0cnVjdCBkcHVfaHdfZHNwcF9vcHMgewot CS8qKgotCSAqIHNldHVwX2hpc3RvZ3JhbSAtIHNldHVwIGRzcHAgaGlzdG9ncmFtCi0JICogQGN0 eDogUG9pbnRlciB0byBkc3BwIGNvbnRleHQKLQkgKiBAY2ZnOiBQb2ludGVyIHRvIGNvbmZpZ3Vy YXRpb24KLQkgKi8KLQl2b2lkICgqc2V0dXBfaGlzdG9ncmFtKShzdHJ1Y3QgZHB1X2h3X2RzcHAg KmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHJlYWRfaGlzdG9ncmFtIC0gcmVhZCBkc3Bw IGhpc3RvZ3JhbQotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzog UG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnJlYWRfaGlzdG9ncmFtKShz dHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHNldHVwX2ln YyAtIHVwZGF0ZSBkc3BwIGlnYwotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0J ICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2ln Yykoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1 cF9wYSAtIHNldHVwIGRzcHAgcGEKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRzcHAgY29udGV4dAot CSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpzZXR1cF9w YSkoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0 dXBfcGNjIC0gc2V0dXAgZHNwcCBwY2MKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRzcHAgY29udGV4 dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpzZXR1 cF9wY2MpKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICog c2V0dXBfc2hhcnBlbmluZyAtIHNldHVwIGRzcHAgc2hhcnBlbmluZwotCSAqIEBjdHg6IFBvaW50 ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0J ICovCi0Jdm9pZCAoKnNldHVwX3NoYXJwZW5pbmcpKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2 b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfcGFfbWVtY29sb3IgLSBzZXR1cCBkc3BwIG1l bWNvbG9yCi0JICogQGN0eDogUG9pbnRlciB0byBkc3BwIGNvbnRleHQKLQkgKiBAY2ZnOiBQb2lu dGVyIHRvIGNvbmZpZ3VyYXRpb24KLQkgKi8KLQl2b2lkICgqc2V0dXBfcGFfbWVtY29sb3IpKHN0 cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfc2l4 em9uZSAtIHNldHVwIGRzcHAgc2l4IHpvbmUKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRzcHAgY29u dGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpz ZXR1cF9zaXh6b25lKShzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHZvaWQgKmNmZyk7Ci0KLQkv KioKLQkgKiBzZXR1cF9kYW5nZXJfc2FmZSAtIHNldHVwIGRhbmdlciBzYWZlIExVVFMKLQkgKiBA Y3R4OiBQb2ludGVyIHRvIGRzcHAgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmln dXJhdGlvbgotCSAqLwotCXZvaWQgKCpzZXR1cF9kYW5nZXJfc2FmZSkoc3RydWN0IGRwdV9od19k c3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9kaXRoZXIgLSBzZXR1cCBk c3BwIGRpdGhlcgotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzog UG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2RpdGhlcikoc3Ry dWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9odWUg LSBzZXR1cCBkc3BwIFBBIGh1ZQotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0J ICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2h1 ZSkoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1 cF9zYXQgLSBzZXR1cCBkc3BwIFBBIHNhdHVyYXRpb24KLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRz cHAgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZv aWQgKCpzZXR1cF9zYXQpKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0J LyoqCi0JICogc2V0dXBfdmFsIC0gc2V0dXAgZHNwcCBQQSB2YWx1ZQotCSAqIEBjdHg6IFBvaW50 ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0J ICovCi0Jdm9pZCAoKnNldHVwX3ZhbCkoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNm Zyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9jb250IC0gc2V0dXAgZHNwcCBQQSBjb250cmFzdAotCSAq IEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9pbnRlciB0byBjb25m aWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2NvbnQpKHN0cnVjdCBkcHVfaHdfZHNwcCAq Y3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfdmx1dCAtIHNldHVwIGRzcHAgUEEg VkxVVAotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9pbnRl ciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX3ZsdXQpKHN0cnVjdCBkcHVf aHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfZ2MgLSB1cGRhdGUg ZHNwcCBnYwotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9p bnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2djKShzdHJ1Y3QgZHB1 X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHNldHVwX2dhbXV0IC0gdXBk YXRlIGRzcHAgZ2FtdXQKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRzcHAgY29udGV4dAotCSAqIEBj Zmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpzZXR1cF9nYW11dCko c3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiB2YWxpZGF0 ZV9hZCAtIGNoZWNrIGlmIGFkIHByb3BlcnR5IGNhbiBiZSBzZXQKLQkgKiBAY3R4OiBQb2ludGVy IHRvIGRzcHAgY29udGV4dAotCSAqIEBwcm9wOiBQb2ludGVyIHRvIGFkIHByb3BlcnR5IGJlaW5n IHZhbGlkYXRlZAotCSAqLwotCWludCAoKnZhbGlkYXRlX2FkKShzdHJ1Y3QgZHB1X2h3X2RzcHAg KmN0eCwgdTMyICpwcm9wKTsKLQotCS8qKgotCSAqIHNldHVwX2FkIC0gdXBkYXRlIHRoZSBhZCBw cm9wZXJ0eQotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9p bnRlciB0byBhZCBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2FkKShzdHJ1Y3Qg ZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIGFkX3JlYWRfaW50cl9y ZXNwIC0gZnVuY3Rpb24gdG8gZ2V0IGludGVycnVwdCByZXNwb25zZSBmb3IgYWQKLQkgKiBAZXZl bnQ6IEV2ZW50IGZvciB3aGljaCByZXNwb25zZSBuZWVkcyB0byBiZSByZWFkCi0JICogQHJlc3A6 IFBvaW50ZXIgdG8gdTMyIHdoZXJlIHJlc3BvbnNlIHZhbHVlIGlzIGR1bXBlZC4KLQkgKi8KLQl2 b2lkICgqYWRfcmVhZF9pbnRyX3Jlc3ApKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB1MzIgZXZl bnQsCi0JCQl1MzIgKnJlc3ApOwotCi19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfaHdfZHNwcCAt IGRzcHAgZGVzY3JpcHRpb24KLSAqIEBiYXNlOiBIYXJkd2FyZSBibG9jayBiYXNlIHN0cnVjdHVy ZQotICogQGh3OiBCbG9jayBoYXJkd2FyZSBkZXRhaWxzCi0gKiBAaHdfdG9wOiBCbG9jayBoYXJk d2FyZSB0b3AgZGV0YWlscwotICogQGlkeDogRFNQUCBpbmRleAotICogQGNhcDogUG9pbnRlciB0 byBsYXllcl9jZmcKLSAqIEBvcHM6IFBvaW50ZXIgdG8gb3BlcmF0aW9ucyBwb3NzaWJsZSBmb3Ig dGhpcyBEU1BQCi0gKi8KLXN0cnVjdCBkcHVfaHdfZHNwcCB7Ci0Jc3RydWN0IGRwdV9od19ibGsg YmFzZTsKLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3OwotCi0JLyogZHNwcCB0b3AgKi8K LQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3X3RvcDsKLQotCS8qIGRzcHAgKi8KLQllbnVt IGRwdV9kc3BwIGlkeDsKLQljb25zdCBzdHJ1Y3QgZHB1X2RzcHBfY2ZnICpjYXA7Ci0KLQkvKiBP cHMgKi8KLQlzdHJ1Y3QgZHB1X2h3X2RzcHBfb3BzIG9wczsKLX07Ci0KLS8qKgotICogZHB1X2h3 X2RzcHAgLSBjb252ZXJ0IGJhc2Ugb2JqZWN0IGRwdV9od19iYXNlIHRvIGNvbnRhaW5lcgotICog QGh3OiBQb2ludGVyIHRvIGJhc2UgaGFyZHdhcmUgYmxvY2sKLSAqIHJldHVybjogUG9pbnRlciB0 byBoYXJkd2FyZSBibG9jayBjb250YWluZXIKLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHB1 X2h3X2RzcHAgKnRvX2RwdV9od19kc3BwKHN0cnVjdCBkcHVfaHdfYmxrICpodykKLXsKLQlyZXR1 cm4gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgZHB1X2h3X2RzcHAsIGJhc2UpOwotfQotCi0vKioK LSAqIGRwdV9od19kc3BwX2luaXQgLSBpbml0aWFsaXplcyB0aGUgZHNwcCBodyBkcml2ZXIgb2Jq ZWN0LgotICogc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGJlZm9yZSBhY2Nlc3NpbmcgZXZlcnkgZHNw cC4KLSAqIEBpZHg6ICBEU1BQIGluZGV4IGZvciB3aGljaCBkcml2ZXIgb2JqZWN0IGlzIHJlcXVp cmVkCi0gKiBAYWRkcjogTWFwcGVkIHJlZ2lzdGVyIGlvIGFkZHJlc3Mgb2YgTURQCi0gKiBAUmV0 dXJuOiBwb2ludGVyIHRvIHN0cnVjdHVyZSBvciBFUlJfUFRSCi0gKi8KLXN0cnVjdCBkcHVfaHdf ZHNwcCAqZHB1X2h3X2RzcHBfaW5pdChlbnVtIGRwdV9kc3BwIGlkeCwKLQkJCXZvaWQgX19pb21l bSAqYWRkciwKLQkJCXN0cnVjdCBkcHVfbWRzc19jZmcgKm0pOwotCi0vKioKLSAqIGRwdV9od19k c3BwX2Rlc3Ryb3koKTogRGVzdHJveXMgRFNQUCBkcml2ZXIgY29udGV4dAotICogQGRzcHA6ICAg UG9pbnRlciB0byBEU1BQIGRyaXZlciBjb250ZXh0Ci0gKi8KLXZvaWQgZHB1X2h3X2RzcHBfZGVz dHJveShzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHApOwotCi0jZW5kaWYgLypfRFBVX0hXX0RTUFBf SCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2xt LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uYwppbmRleCBhZDIx ODY3Li43NWEzMGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfbG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0u YwpAQCAtMTAsNiArMTAsNyBAQAogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KICAqLwogCisjaW5jbHVkZSA8dWFwaS9kcm0vZHB1X2RybS5oPgogI2luY2x1 ZGUgImRwdV9rbXMuaCIKICNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgogI2luY2x1ZGUgImRw dV9od2lvLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfbWRzcy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaApp bmRleCA3MGQ1N2M5Li5mY2QxNjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfbWRzcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19tZHNzLmgKQEAgLTk5LDcgKzk5LDYgQEAgZW51bSBkcHVfaHdfYmxrX3R5cGUgewog CURQVV9IV19CTEtfVE9QID0gMCwKIAlEUFVfSFdfQkxLX1NTUFAsCiAJRFBVX0hXX0JMS19MTSwK LQlEUFVfSFdfQkxLX0RTUFAsCiAJRFBVX0hXX0JMS19EUywKIAlEUFVfSFdfQkxLX0NUTCwKIAlE UFVfSFdfQkxLX0NETSwKQEAgLTQ2MSwzOSArNDYwLDE2IEBAIHN0cnVjdCBkcHVfbWRzc19jb2xv ciB7CiAgKi8KICNkZWZpbmUgRFBVX0RCR19NQVNLX05PTkUgICAgICgxIDw8IDApCiAjZGVmaW5l IERQVV9EQkdfTUFTS19DRE0gICAgICAoMSA8PCAxKQotI2RlZmluZSBEUFVfREJHX01BU0tfRFNQ UCAgICAgKDEgPDwgMikKLSNkZWZpbmUgRFBVX0RCR19NQVNLX0lOVEYgICAgICgxIDw8IDMpCi0j ZGVmaW5lIERQVV9EQkdfTUFTS19MTSAgICAgICAoMSA8PCA0KQotI2RlZmluZSBEUFVfREJHX01B U0tfQ1RMICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgRFBVX0RCR19NQVNLX1BJTkdQT05HICgxIDw8 IDYpCi0jZGVmaW5lIERQVV9EQkdfTUFTS19TU1BQICAgICAoMSA8PCA3KQotI2RlZmluZSBEUFVf REJHX01BU0tfV0IgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgRFBVX0RCR19NQVNLX1RPUCAgICAg ICgxIDw8IDkpCi0jZGVmaW5lIERQVV9EQkdfTUFTS19WQklGICAgICAoMSA8PCAxMCkKLSNkZWZp bmUgRFBVX0RCR19NQVNLX1JPVCAgICAgICgxIDw8IDExKQotI2RlZmluZSBEUFVfREJHX01BU0tf RFMgICAgICAgKDEgPDwgMTIpCi0KLS8qKgotICogc3RydWN0IGRwdV9od19jcF9jZmc6IGhhcmR3 YXJlIGRzcHAvbG0gZmVhdHVyZSBwYXlsb2FkLgotICogQHBheWxvYWQ6IEZlYXR1cmUgc3BlY2lm aWMgcGF5bG9hZC4KLSAqIEBsZW46IExlbmd0aCBvZiB0aGUgcGF5bG9hZC4KLSAqIEBjdGw6IGNv bnRyb2wgcG9pbnRlciBhc3NvY2lhdGVkIHdpdGggZHNwcC9sbS4KLSAqIEBsYXN0X2ZlYXR1cmU6 IGxhc3QgZmVhdHVyZSB0aGF0IHdpbGwgYmUgc2V0LgotICogQG51bV9vZl9taXhlcnM6IG51bWJl ciBvZiBsYXllciBtaXhlcnMgZm9yIHRoZSBkaXNwbGF5LgotICogQG1peGVyX2luZm86IG1peGVy IGluZm8gcG9pbnRlciBhc3NvY2lhdGVkIHdpdGggbG0uCi0gKiBAZGlzcGxheXY6IGhlaWdodCBv ZiB0aGUgZGlzcGxheS4KLSAqIEBkaXNwbGF5aDogd2lkdGggb2YgdGhlIGRpc3BsYXkuCi0gKi8K LXN0cnVjdCBkcHVfaHdfY3BfY2ZnIHsKLQl2b2lkICpwYXlsb2FkOwotCXUzMiBsZW47Ci0Jdm9p ZCAqY3RsOwotCXUzMiBsYXN0X2ZlYXR1cmU7Ci0JdTMyIG51bV9vZl9taXhlcnM7Ci0Jdm9pZCAq bWl4ZXJfaW5mbzsKLQl1MzIgZGlzcGxheXY7Ci0JdTMyIGRpc3BsYXloOwotfTsKKyNkZWZpbmUg RFBVX0RCR19NQVNLX0lOVEYgICAgICgxIDw8IDIpCisjZGVmaW5lIERQVV9EQkdfTUFTS19MTSAg ICAgICAoMSA8PCAzKQorI2RlZmluZSBEUFVfREJHX01BU0tfQ1RMICAgICAgKDEgPDwgNCkKKyNk ZWZpbmUgRFBVX0RCR19NQVNLX1BJTkdQT05HICgxIDw8IDUpCisjZGVmaW5lIERQVV9EQkdfTUFT S19TU1BQICAgICAoMSA8PCA2KQorI2RlZmluZSBEUFVfREJHX01BU0tfV0IgICAgICAgKDEgPDwg NykKKyNkZWZpbmUgRFBVX0RCR19NQVNLX1RPUCAgICAgICgxIDw8IDgpCisjZGVmaW5lIERQVV9E QkdfTUFTS19WQklGICAgICAoMSA8PCA5KQorI2RlZmluZSBEUFVfREJHX01BU0tfUk9UICAgICAg KDEgPDwgMTApCisjZGVmaW5lIERQVV9EQkdfTUFTS19EUyAgICAgICAoMSA8PCAxMSkKIAogLyoq CiAgKiBzdHJ1Y3QgZHB1X2h3X2RpbV9sYXllcjogZGltIGxheWVyIGNvbmZpZ3MKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19waW5ncG9uZy5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25nLmMKaW5kZXggMGJmYjUx MS4uODRkMjE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X3Bpbmdwb25nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3Bpbmdwb25nLmMKQEAgLTM2LDExICszNiw2IEBACiAjZGVmaW5lIFBQX0ZCQ19CVURHRVRfQ1RM ICAgICAgICAgICAgICAgMHgwMzgKICNkZWZpbmUgUFBfRkJDX0xPU1NZX01PREUgICAgICAgICAg ICAgICAweDAzQwogCi0jZGVmaW5lIERJVEhFUl9ERVBUSF9NQVBfSU5ERVggOQotc3RhdGljIHUz MiBkaXRoZXJfZGVwdGhfbWFwW0RJVEhFUl9ERVBUSF9NQVBfSU5ERVhdID0gewotCTAsIDAsIDAs IDAsIDAsIDEsIDIsIDMsIDMKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgZHB1X3Bpbmdwb25nX2NmZyAq X3Bpbmdwb25nX29mZnNldChlbnVtIGRwdV9waW5ncG9uZyBwcCwKIAkJc3RydWN0IGRwdV9tZHNz X2NmZyAqbSwKIAkJdm9pZCBfX2lvbWVtICphZGRyLApAQCAtMTA5LDU3ICsxMDQsNiBAQCBzdGF0 aWMgaW50IGRwdV9od19wcF9wb2xsX3RpbWVvdXRfd3JfcHRyKHN0cnVjdCBkcHVfaHdfcGluZ3Bv bmcgKnBwLAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBkcHVfaHdfcHBfc2V0dXBfZGl0 aGVyX3YxKHN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKnBwLAotCQkJCQl2b2lkICpjZmcsIHNpemVf dCBsZW4pCi17Ci0Jc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYzsKLQlzdHJ1Y3QgZHJtX21z bV9kaXRoZXIgKmRpdGhlciA9IChzdHJ1Y3QgZHJtX21zbV9kaXRoZXIgKiljZmc7Ci0JdTMyIGJh c2UgPSAwLCBvZmZzZXQgPSAwLCBkYXRhID0gMCwgaSA9IDA7Ci0KLQlpZiAoIXBwKQotCQlyZXR1 cm4gLUVJTlZBTDsKLQotCWMgPSAmcHAtPmh3OwotCWJhc2UgPSBwcC0+Y2Fwcy0+c2Jsay0+ZGl0 aGVyLmJhc2U7Ci0JaWYgKCFkaXRoZXIpIHsKLQkJLyogZGl0aGVyIHByb3BlcnR5IGRpc2FibGUg Y2FzZSAqLwotCQlEUFVfUkVHX1dSSVRFKGMsIGJhc2UsIDApOwotCQlyZXR1cm4gMDsKLQl9Ci0K LQlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgZHJtX21zbV9kaXRoZXIpKSB7Ci0JCURSTV9FUlJP UigiaW5wdXQgbGVuICV6dSwgZXhwZWN0ZWQgbGVuICV6dVxuIiwgbGVuLAotCQkJc2l6ZW9mKHN0 cnVjdCBkcm1fbXNtX2RpdGhlcikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZGl0 aGVyLT5jMF9iaXRkZXB0aCA+PSBESVRIRVJfREVQVEhfTUFQX0lOREVYIHx8Ci0JCWRpdGhlci0+ YzFfYml0ZGVwdGggPj0gRElUSEVSX0RFUFRIX01BUF9JTkRFWCB8fAotCQlkaXRoZXItPmMyX2Jp dGRlcHRoID49IERJVEhFUl9ERVBUSF9NQVBfSU5ERVggfHwKLQkJZGl0aGVyLT5jM19iaXRkZXB0 aCA+PSBESVRIRVJfREVQVEhfTUFQX0lOREVYKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW9mZnNl dCArPSA0OwotCWRhdGEgPSBkaXRoZXJfZGVwdGhfbWFwW2RpdGhlci0+YzBfYml0ZGVwdGhdICYg UkVHX01BU0soMik7Ci0JZGF0YSB8PSAoZGl0aGVyX2RlcHRoX21hcFtkaXRoZXItPmMxX2JpdGRl cHRoXSAmIFJFR19NQVNLKDIpKSA8PCAyOwotCWRhdGEgfD0gKGRpdGhlcl9kZXB0aF9tYXBbZGl0 aGVyLT5jMl9iaXRkZXB0aF0gJiBSRUdfTUFTSygyKSkgPDwgNDsKLQlkYXRhIHw9IChkaXRoZXJf ZGVwdGhfbWFwW2RpdGhlci0+YzNfYml0ZGVwdGhdICYgUkVHX01BU0soMikpIDw8IDY7Ci0JZGF0 YSB8PSAoZGl0aGVyLT50ZW1wb3JhbF9lbikgPyAoMSA8PCA4KSA6IDA7Ci0JRFBVX1JFR19XUklU RShjLCBiYXNlICsgb2Zmc2V0LCBkYXRhKTsKLQotCWZvciAoaSA9IDA7IGkgPCBESVRIRVJfTUFU UklYX1NaIC0gMzsgaSArPSA0KSB7Ci0JCW9mZnNldCArPSA0OwotCQlkYXRhID0gKGRpdGhlci0+ bWF0cml4W2ldICYgUkVHX01BU0soNCkpIHwKLQkJCSgoZGl0aGVyLT5tYXRyaXhbaSArIDFdICYg UkVHX01BU0soNCkpIDw8IDQpIHwKLQkJCSgoZGl0aGVyLT5tYXRyaXhbaSArIDJdICYgUkVHX01B U0soNCkpIDw8IDgpIHwKLQkJCSgoZGl0aGVyLT5tYXRyaXhbaSArIDNdICYgUkVHX01BU0soNCkp IDw8IDEyKTsKLQkJRFBVX1JFR19XUklURShjLCBiYXNlICsgb2Zmc2V0LCBkYXRhKTsKLQl9Ci0J RFBVX1JFR19XUklURShjLCBiYXNlLCAxKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50 IGRwdV9od19wcF9lbmFibGVfdGUoc3RydWN0IGRwdV9od19waW5ncG9uZyAqcHAsIGJvb2wgZW5h YmxlKQogewogCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7CkBAIC0yNDgsMjQgKzE5Miwx MiBAQCBzdGF0aWMgdTMyIGRwdV9od19wcF9nZXRfbGluZV9jb3VudChzdHJ1Y3QgZHB1X2h3X3Bp bmdwb25nICpwcCkKIHN0YXRpYyB2b2lkIF9zZXR1cF9waW5ncG9uZ19vcHMoc3RydWN0IGRwdV9o d19waW5ncG9uZ19vcHMgKm9wcywKIAljb25zdCBzdHJ1Y3QgZHB1X3Bpbmdwb25nX2NmZyAqaHdf Y2FwKQogewotCXUzMiB2ZXJzaW9uID0gMDsKLQogCW9wcy0+c2V0dXBfdGVhcmNoZWNrID0gZHB1 X2h3X3BwX3NldHVwX3RlX2NvbmZpZzsKIAlvcHMtPmVuYWJsZV90ZWFyY2hlY2sgPSBkcHVfaHdf cHBfZW5hYmxlX3RlOwogCW9wcy0+Y29ubmVjdF9leHRlcm5hbF90ZSA9IGRwdV9od19wcF9jb25u ZWN0X2V4dGVybmFsX3RlOwogCW9wcy0+Z2V0X3ZzeW5jX2luZm8gPSBkcHVfaHdfcHBfZ2V0X3Zz eW5jX2luZm87CiAJb3BzLT5wb2xsX3RpbWVvdXRfd3JfcHRyID0gZHB1X2h3X3BwX3BvbGxfdGlt ZW91dF93cl9wdHI7CiAJb3BzLT5nZXRfbGluZV9jb3VudCA9IGRwdV9od19wcF9nZXRfbGluZV9j b3VudDsKLQotCXZlcnNpb24gPSBEUFVfQ09MT1JfUFJPQ0VTU19NQUpPUihod19jYXAtPnNibGst PmRpdGhlci52ZXJzaW9uKTsKLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIDE6Ci0JCW9wcy0+ c2V0dXBfZGl0aGVyID0gZHB1X2h3X3BwX3NldHVwX2RpdGhlcl92MTsKLQkJYnJlYWs7Ci0JZGVm YXVsdDoKLQkJb3BzLT5zZXR1cF9kaXRoZXIgPSBOVUxMOwotCQlicmVhazsKLQl9CiB9OwogCiBz dGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcGluZ3BvbmcuaCBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19waW5ncG9uZy5oCmluZGV4IDdkYmZjYWU0Li4z Y2FjY2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf cGluZ3BvbmcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcGlu Z3BvbmcuaApAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgImRwdV9od19tZHNzLmgiCiAjaW5j bHVkZSAiZHB1X2h3X3V0aWwuaCIKICNpbmNsdWRlICJkcHVfaHdfYmxrLmgiCi0jaW5jbHVkZSA8 dWFwaS9kcm0vbXNtX2RybV9wcC5oPgogCiBzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nOwogCkBAIC04 OCwxMSArODcsNiBAQCBzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nX29wcyB7CiAJaW50ICgqcG9sbF90 aW1lb3V0X3dyX3B0cikoc3RydWN0IGRwdV9od19waW5ncG9uZyAqcHAsIHUzMiB0aW1lb3V0X3Vz KTsKIAogCS8qKgotCSAqIFByb2dyYW0gdGhlIGRpdGhlciBodyBibG9jawotCSAqLwotCWludCAo KnNldHVwX2RpdGhlcikoc3RydWN0IGRwdV9od19waW5ncG9uZyAqcHAsIHZvaWQgKmNmZywgc2l6 ZV90IGxlbik7Ci0KLQkvKioKIAkgKiBPYnRhaW4gY3VycmVudCB2ZXJ0aWNhbCBsaW5lIGNvdW50 ZXIKIAkgKi8KIAl1MzIgKCpnZXRfbGluZV9jb3VudCkoc3RydWN0IGRwdV9od19waW5ncG9uZyAq cHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Jl Z19kbWFfdjEuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1h X3YxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMjc3MmYuLjAwMDAwMDAKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JlZ19kbWFfdjEuYworKysg L2Rldi9udWxsCkBAIC0xLDc1NyArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq LwotI2luY2x1ZGUgImRwdV9od19tZHNzLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2N0bC5oIgotI2lu Y2x1ZGUgImRwdV9od19yZWdfZG1hX3YxLmgiCi0jaW5jbHVkZSAibXNtX2Rydi5oIgotI2luY2x1 ZGUgIm1zbV9rbXMuaCIKLSNpbmNsdWRlICJtc21fbW11LmgiCi0KLSNkZWZpbmUgR1VBUkRfQllU RVMgKEJJVCg4KSAtIDEpCi0jZGVmaW5lIEFMSUdORURfT0ZGU0VUIChVMzJfTUFYICYgfihHVUFS RF9CWVRFUykpCi0jZGVmaW5lIEFERFJfQUxJR04gQklUKDgpCi0jZGVmaW5lIE1BWF9SRUxBVElW RV9PRkYgKEJJVCgyMCkgLSAxKQotCi0jZGVmaW5lIERFQ09ERV9TRUxfT1AgKEJJVChIV19CTEtf U0VMRUNUKSkKLSNkZWZpbmUgUkVHX1dSSVRFX09QICgoQklUKFJFR19TSU5HTEVfV1JJVEUpKSB8 IChCSVQoUkVHX0JMS19XUklURV9TSU5HTEUpKSB8IFwKLQkoQklUKFJFR19CTEtfV1JJVEVfSU5D KSkgfCAoQklUKFJFR19CTEtfV1JJVEVfTVVMVElQTEUpKSkKLQotI2RlZmluZSBSRUdfRE1BX09Q UyAoREVDT0RFX1NFTF9PUCB8IFJFR19XUklURV9PUCkKLSNkZWZpbmUgSVNfT1BfQUxMT1dFRChv cCwgYnVmX29wKSAoQklUKG9wKSAmIGJ1Zl9vcCkKLQotI2RlZmluZSBSRUdfRE1BX09QX01PREVf T0ZGIDB4NAotCi0jZGVmaW5lIFJFR19ETUFfQ1RMMF9RVUVVRV8wX0NNRDBfT0ZGIDB4MTQKLSNk ZWZpbmUgUkVHX0RNQV9DVEwwX1JFU0VUX09GRiAweEU0Ci0jZGVmaW5lIFJFR19ETUFfQ1RMX1RS SUdHRVJfT0ZGIDB4RDQKLQotI2RlZmluZSBTRVRfVVBfUkVHX0RNQV9SRUcoaHcsIHJlZ19kbWEp IFwKLQlkbyB7IFwKLQkJKGh3KS5iYXNlX29mZiA9IChyZWdfZG1hKS0+YWRkcjsgXAotCQkoaHcp LmJsa19vZmYgPSAocmVnX2RtYSktPmNhcHMtPmJhc2U7IFwKLQkJKGh3KS5od3ZlcnNpb24gPSAo cmVnX2RtYSktPmNhcHMtPnZlcnNpb247IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0laRV9E V09SRCh4KSAoKHgpIC8gKHNpemVvZih1MzIpKSkKLSNkZWZpbmUgTk9UX1dPUkRfQUxJR05FRCh4 KSAoKHgpICYgMHgzKQotCi0KLSNkZWZpbmUgR1JQX1ZJR19IV19CTEtfU0VMRUNUIChWSUcwIHwg VklHMSB8IFZJRzIgfCBWSUczKQotI2RlZmluZSBHUlBfRFNQUF9IV19CTEtfU0VMRUNUIChEU1BQ MCB8IERTUFAxIHwgRFNQUDIgfCBEU1BQMykKLSNkZWZpbmUgQlVGRkVSX1NQQUNFX0xFRlQoY2Zn KSAoKGNmZyktPmRtYV9idWYtPmJ1ZmZlcl9zaXplIC0gXAotCQkJKGNmZyktPmRtYV9idWYtPmlu ZGV4KQotCi0jZGVmaW5lIFJFR19ETUFfREVDT0RFX1NFTCAweDE4MEFDMDYwCi0jZGVmaW5lIFNJ TkdMRV9SRUdfV1JJVEVfT1BDT0RFIChCSVQoMjgpKQotI2RlZmluZSBSRUxfQUREUl9PUENPREUg KEJJVCgyNykpCi0jZGVmaW5lIEhXX0lOREVYX1JFR19XUklURV9PUENPREUgKEJJVCgyOCkgfCBC SVQoMjkpKQotI2RlZmluZSBBVVRPX0lOQ19SRUdfV1JJVEVfT1BDT0RFIChCSVQoMzApKQotI2Rl ZmluZSBCTEtfUkVHX1dSSVRFX09QQ09ERSAoQklUKDMwKSB8IEJJVCgyOCkpCi0KLSNkZWZpbmUg V1JBUF9NSU5fU0laRSAyCi0jZGVmaW5lIFdSQVBfTUFYX1NJWkUgKEJJVCg0KSAtIDEpCi0jZGVm aW5lIE1BWF9EV09SRFNfU1ogKEJJVCgxNCkgLSAxKQotI2RlZmluZSBSRUdfRE1BX0hFQURFUlNf QlVGRkVSX1NaIChzaXplb2YodTMyKSAqIDEyOCkKLQotdHlwZWRlZiBpbnQgKCpyZWdfZG1hX2lu dGVybmFsX29wcykgKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotCi1z dGF0aWMgc3RydWN0IGRwdV9od19yZWdfZG1hICpyZWdfZG1hOwotc3RhdGljIHUzMiBvcHNfbWVt X3NpemVbUkVHX0RNQV9TRVRVUF9PUFNfTUFYXSA9IHsKLQlbUkVHX0JMS19XUklURV9TSU5HTEVd ID0gc2l6ZW9mKHUzMikgKiAyLAotCVtSRUdfQkxLX1dSSVRFX0lOQ10gPSBzaXplb2YodTMyKSAq IDIsCi0JW1JFR19CTEtfV1JJVEVfTVVMVElQTEVdID0gc2l6ZW9mKHUzMikgKiAyLAotCVtIV19C TEtfU0VMRUNUXSA9IHNpemVvZih1MzIpICogMiwKLQlbUkVHX1NJTkdMRV9XUklURV0gPSBzaXpl b2YodTMyKSAqIDIKLX07Ci0KLXN0YXRpYyB1MzIgcXVldWVfc2VsW0RNQV9DVExfUVVFVUVfTUFY XSA9IHsKLQlbRE1BX0NUTF9RVUVVRTBdID0gQklUKDApLAotCVtETUFfQ1RMX1FVRVVFMV0gPSBC SVQoNCksCi19OwotCi1zdGF0aWMgdTMyIHJlZ19kbWFfY3RsX3F1ZXVlX29mZltDVExfTUFYXTsK LXN0YXRpYyB1MzIgZHNwcF9yZWFkX3NlbFtEU1BQX0hJU1RfTUFYXSA9IHsKLQlbRFNQUDBfSElT VF0gPSAwLAotCVtEU1BQMV9ISVNUXSA9IDEsCi0JW0RTUFAyX0hJU1RdID0gMiwKLQlbRFNQUDNf SElTVF0gPSAzLAotfTsKLQotc3RhdGljIHUzMiB2MV9zdXBwb3J0ZWRbUkVHX0RNQV9GRUFUVVJF U19NQVhdICA9IHsKLQlbR0FNVVRdID0gR1JQX1ZJR19IV19CTEtfU0VMRUNUIHwgR1JQX0RTUFBf SFdfQkxLX1NFTEVDVCwKLQlbVkxVVF0gPSBHUlBfRFNQUF9IV19CTEtfU0VMRUNULAotCVtHQ10g PSBHUlBfRFNQUF9IV19CTEtfU0VMRUNULAotCVtJR0NdID0gRFNQUF9JR0MgfCBHUlBfRFNQUF9I V19CTEtfU0VMRUNULAotCVtQQ0NdID0gR1JQX0RTUFBfSFdfQkxLX1NFTEVDVCwKLX07Ci0KLXN0 YXRpYyBpbnQgdmFsaWRhdGVfZG1hX2NmZyhzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2Nm ZyAqY2ZnKTsKLXN0YXRpYyBpbnQgdmFsaWRhdGVfd3JpdGVfZGVjb2RlX3NlbChzdHJ1Y3QgZHB1 X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgdmFsaWRhdGVfd3JpdGVf cmVnKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotc3RhdGljIGludCB2 YWxpZGF0ZV93cml0ZV9tdWx0aV9sdXRfcmVnKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNf Y2ZnICpjZmcpOwotc3RhdGljIGludCB2YWxpZGF0ZV9sYXN0X2NtZChzdHJ1Y3QgZHB1X3JlZ19k bWFfc2V0dXBfb3BzX2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgd3JpdGVfZGVjb2RlX3NlbChzdHJ1 Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgd3JpdGVfc2lu Z2xlX3JlZyhzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKTsKLXN0YXRpYyBp bnQgd3JpdGVfbXVsdGlfcmVnX2luZGV4KHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2Zn ICpjZmcpOwotc3RhdGljIGludCB3cml0ZV9tdWx0aV9yZWdfaW5jKHN0cnVjdCBkcHVfcmVnX2Rt YV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotc3RhdGljIGludCB3cml0ZV9tdWx0aV9sdXRfcmVnKHN0 cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotc3RhdGljIGludCB3cml0ZV9s YXN0X2NtZChzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKTsKLXN0YXRpYyBp bnQgcmVzZXRfcmVnX2RtYV9idWZmZXJfdjEoc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqbHV0 X2J1Zik7Ci1zdGF0aWMgaW50IGNoZWNrX3N1cHBvcnRfdjEoZW51bSBkcHVfcmVnX2RtYV9mZWF0 dXJlcyBmZWF0dXJlLAotCQllbnVtIGRwdV9yZWdfZG1hX2JsayBibGssIGJvb2wgKmlzX3N1cHBv cnRlZCk7Ci1zdGF0aWMgaW50IHNldHVwX3BheWxvYWRfdjEoc3RydWN0IGRwdV9yZWdfZG1hX3Nl dHVwX29wc19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGtpY2tfb2ZmX3YxKHN0cnVjdCBkcHVfcmVn X2RtYV9raWNrb2ZmX2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgcmVzZXRfdjEoc3RydWN0IGRwdV9o d19jdGwgKmN0bCk7Ci1zdGF0aWMgaW50IGxhc3RfY21kX3YxKHN0cnVjdCBkcHVfaHdfY3RsICpj dGwsIGVudW0gZHB1X3JlZ19kbWFfcXVldWUgcSk7Ci1zdGF0aWMgc3RydWN0IGRwdV9yZWdfZG1h X2J1ZmZlciAqYWxsb2NfcmVnX2RtYV9idWZfdjEodTMyIHNpemUpOwotc3RhdGljIGludCBkZWFs bG9jX3JlZ19kbWFfdjEoc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqbHV0X2J1Zik7Ci0KLXN0 YXRpYyByZWdfZG1hX2ludGVybmFsX29wcyB3cml0ZV9kbWFfb3BfcGFyYW1zW1JFR19ETUFfU0VU VVBfT1BTX01BWF0gPSB7Ci0JW0hXX0JMS19TRUxFQ1RdID0gd3JpdGVfZGVjb2RlX3NlbCwKLQlb UkVHX1NJTkdMRV9XUklURV0gPSB3cml0ZV9zaW5nbGVfcmVnLAotCVtSRUdfQkxLX1dSSVRFX1NJ TkdMRV0gPSB3cml0ZV9tdWx0aV9yZWdfaW5jLAotCVtSRUdfQkxLX1dSSVRFX0lOQ10gPSB3cml0 ZV9tdWx0aV9yZWdfaW5kZXgsCi0JW1JFR19CTEtfV1JJVEVfTVVMVElQTEVdID0gd3JpdGVfbXVs dGlfbHV0X3JlZywKLX07Ci0KLXN0YXRpYyByZWdfZG1hX2ludGVybmFsX29wcyB2YWxpZGF0ZV9k bWFfb3BfcGFyYW1zW1JFR19ETUFfU0VUVVBfT1BTX01BWF0gPSB7Ci0JW0hXX0JMS19TRUxFQ1Rd ID0gdmFsaWRhdGVfd3JpdGVfZGVjb2RlX3NlbCwKLQlbUkVHX1NJTkdMRV9XUklURV0gPSB2YWxp ZGF0ZV93cml0ZV9yZWcsCi0JW1JFR19CTEtfV1JJVEVfU0lOR0xFXSA9IHZhbGlkYXRlX3dyaXRl X3JlZywKLQlbUkVHX0JMS19XUklURV9JTkNdID0gdmFsaWRhdGVfd3JpdGVfcmVnLAotCVtSRUdf QkxLX1dSSVRFX01VTFRJUExFXSA9IHZhbGlkYXRlX3dyaXRlX211bHRpX2x1dF9yZWcsCi19Owot Ci1zdGF0aWMgc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqbGFzdF9jbWRfYnVmOwotCi1zdGF0 aWMgdm9pZCBnZXRfZGVjb2RlX3NlbCh1bnNpZ25lZCBsb25nIGJsaywgdTMyICpkZWNvZGVfc2Vs KQotewotCWludCBpID0gMDsKLQotCSpkZWNvZGVfc2VsID0gMDsKLQlmb3JfZWFjaF9zZXRfYml0 KGksICZibGssIDMxKSB7Ci0JCXN3aXRjaCAoQklUKGkpKSB7Ci0JCWNhc2UgVklHMDoKLQkJCSpk ZWNvZGVfc2VsIHw9IEJJVCgwKTsKLQkJCWJyZWFrOwotCQljYXNlIFZJRzE6Ci0JCQkqZGVjb2Rl X3NlbCB8PSBCSVQoMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUcyOgotCQkJKmRlY29kZV9zZWwg fD0gQklUKDIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklHMzoKLQkJCSpkZWNvZGVfc2VsIHw9IEJJ VCgzKTsKLQkJCWJyZWFrOwotCQljYXNlIERTUFAwOgotCQkJKmRlY29kZV9zZWwgfD0gQklUKDE3 KTsKLQkJCWJyZWFrOwotCQljYXNlIERTUFAxOgotCQkJKmRlY29kZV9zZWwgfD0gQklUKDE4KTsK LQkJCWJyZWFrOwotCQljYXNlIERTUFAyOgotCQkJKmRlY29kZV9zZWwgfD0gQklUKDE5KTsKLQkJ CWJyZWFrOwotCQljYXNlIERTUFAzOgotCQkJKmRlY29kZV9zZWwgfD0gQklUKDIwKTsKLQkJCWJy ZWFrOwotCQljYXNlIFNTUFBfSUdDOgotCQkJKmRlY29kZV9zZWwgfD0gQklUKDQpOwotCQkJYnJl YWs7Ci0JCWNhc2UgRFNQUF9JR0M6Ci0JCQkqZGVjb2RlX3NlbCB8PSBCSVQoMjEpOwotCQkJYnJl YWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEUk1fRVJST1IoImJsb2NrIG5vdCBzdXBwb3J0ZWQgJWx4XG4i LCBCSVQoaSkpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfbXVs dGlfcmVnKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpCi17Ci0JdTggKmxv YyA9IE5VTEw7Ci0KLQlsb2MgPSAgKHU4ICopY2ZnLT5kbWFfYnVmLT52YWRkciArIGNmZy0+ZG1h X2J1Zi0+aW5kZXg7Ci0JbWVtY3B5KGxvYywgY2ZnLT5kYXRhLCBjZmctPmRhdGFfc2l6ZSk7Ci0J Y2ZnLT5kbWFfYnVmLT5pbmRleCArPSBjZmctPmRhdGFfc2l6ZTsKLQljZmctPmRtYV9idWYtPm5l eHRfb3BfYWxsb3dlZCA9IFJFR19XUklURV9PUCB8IERFQ09ERV9TRUxfT1A7Ci0JY2ZnLT5kbWFf YnVmLT5vcHNfY29tcGxldGVkIHw9IFJFR19XUklURV9PUDsKLQotCXJldHVybiAwOwotfQotCi1p bnQgd3JpdGVfbXVsdGlfcmVnX2luZGV4KHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2Zn ICpjZmcpCi17Ci0JdTMyICpsb2MgPSBOVUxMOwotCi0JbG9jID0gICh1MzIgKikoKHU4ICopY2Zn LT5kbWFfYnVmLT52YWRkciArCi0JCQljZmctPmRtYV9idWYtPmluZGV4KTsKLQlsb2NbMF0gPSBI V19JTkRFWF9SRUdfV1JJVEVfT1BDT0RFOwotCWxvY1swXSB8PSAoY2ZnLT5ibGtfb2Zmc2V0ICYg TUFYX1JFTEFUSVZFX09GRik7Ci0JbG9jWzFdID0gU0laRV9EV09SRChjZmctPmRhdGFfc2l6ZSk7 Ci0JY2ZnLT5kbWFfYnVmLT5pbmRleCArPSBvcHNfbWVtX3NpemVbY2ZnLT5vcHNdOwotCi0JcmV0 dXJuIHdyaXRlX211bHRpX3JlZyhjZmcpOwotfQotCi1pbnQgd3JpdGVfbXVsdGlfcmVnX2luYyhz dHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewotCXUzMiAqbG9jID0gTlVM TDsKLQotCWxvYyA9ICAodTMyICopKCh1OCAqKWNmZy0+ZG1hX2J1Zi0+dmFkZHIgKwotCQkJY2Zn LT5kbWFfYnVmLT5pbmRleCk7Ci0JbG9jWzBdID0gQVVUT19JTkNfUkVHX1dSSVRFX09QQ09ERTsK LQlsb2NbMF0gfD0gKGNmZy0+YmxrX29mZnNldCAmIE1BWF9SRUxBVElWRV9PRkYpOwotCWxvY1sx XSA9IFNJWkVfRFdPUkQoY2ZnLT5kYXRhX3NpemUpOwotCWNmZy0+ZG1hX2J1Zi0+aW5kZXggKz0g b3BzX21lbV9zaXplW2NmZy0+b3BzXTsKLQotCXJldHVybiB3cml0ZV9tdWx0aV9yZWcoY2ZnKTsK LX0KLQotc3RhdGljIGludCB3cml0ZV9tdWx0aV9sdXRfcmVnKHN0cnVjdCBkcHVfcmVnX2RtYV9z ZXR1cF9vcHNfY2ZnICpjZmcpCi17Ci0JdTMyICpsb2MgPSBOVUxMOwotCi0JbG9jID0gICh1MzIg KikoKHU4ICopY2ZnLT5kbWFfYnVmLT52YWRkciArCi0JCQljZmctPmRtYV9idWYtPmluZGV4KTsK LQlsb2NbMF0gPSBCTEtfUkVHX1dSSVRFX09QQ09ERTsKLQlsb2NbMF0gfD0gKGNmZy0+YmxrX29m ZnNldCAmIE1BWF9SRUxBVElWRV9PRkYpOwotCWxvY1sxXSA9IChjZmctPmluYykgPyAwIDogQklU KDMxKTsKLQlsb2NbMV0gfD0gKGNmZy0+d3JhcF9zaXplICYgV1JBUF9NQVhfU0laRSkgPDwgMTY7 Ci0JbG9jWzFdIHw9ICgoU0laRV9EV09SRChjZmctPmRhdGFfc2l6ZSkpICYgTUFYX0RXT1JEU19T Wik7Ci0JY2ZnLT5kbWFfYnVmLT5uZXh0X29wX2FsbG93ZWQgPSBSRUdfV1JJVEVfT1A7Ci0JY2Zn LT5kbWFfYnVmLT5pbmRleCArPSBvcHNfbWVtX3NpemVbY2ZnLT5vcHNdOwotCi0JcmV0dXJuIHdy aXRlX211bHRpX3JlZyhjZmcpOwotfQotCi1zdGF0aWMgaW50IHdyaXRlX3NpbmdsZV9yZWcoc3Ry dWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZykKLXsKLQl1MzIgKmxvYyA9IE5VTEw7 Ci0KLQlsb2MgPSAgKHUzMiAqKSgodTggKiljZmctPmRtYV9idWYtPnZhZGRyICsKLQkJCWNmZy0+ ZG1hX2J1Zi0+aW5kZXgpOwotCWxvY1swXSA9IFNJTkdMRV9SRUdfV1JJVEVfT1BDT0RFOwotCWxv Y1swXSB8PSAoY2ZnLT5ibGtfb2Zmc2V0ICYgTUFYX1JFTEFUSVZFX09GRik7Ci0JbG9jWzFdID0g KmNmZy0+ZGF0YTsKLQljZmctPmRtYV9idWYtPmluZGV4ICs9IG9wc19tZW1fc2l6ZVtjZmctPm9w c107Ci0JY2ZnLT5kbWFfYnVmLT5vcHNfY29tcGxldGVkIHw9IFJFR19XUklURV9PUDsKLQljZmct PmRtYV9idWYtPm5leHRfb3BfYWxsb3dlZCA9IFJFR19XUklURV9PUCB8IERFQ09ERV9TRUxfT1A7 Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3cml0ZV9kZWNvZGVfc2VsKHN0cnVjdCBk cHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpCi17Ci0JdTMyICpsb2MgPSBOVUxMOwotCi0J bG9jID0gICh1MzIgKikoKHU4ICopY2ZnLT5kbWFfYnVmLT52YWRkciArCi0JCQljZmctPmRtYV9i dWYtPmluZGV4KTsKLQlsb2NbMF0gPSBSRUdfRE1BX0RFQ09ERV9TRUw7Ci0JZ2V0X2RlY29kZV9z ZWwoY2ZnLT5ibGssICZsb2NbMV0pOwotCWNmZy0+ZG1hX2J1Zi0+aW5kZXggKz0gc2l6ZW9mKHUz MikgKiAyOwotCWNmZy0+ZG1hX2J1Zi0+b3BzX2NvbXBsZXRlZCB8PSBERUNPREVfU0VMX09QOwot CWNmZy0+ZG1hX2J1Zi0+bmV4dF9vcF9hbGxvd2VkID0gUkVHX1dSSVRFX09QOwotCi0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmFsaWRhdGVfd3JpdGVfbXVsdGlfbHV0X3JlZyhzdHJ1Y3Qg ZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewotCWludCByYzsKLQotCXJjID0gdmFs aWRhdGVfd3JpdGVfcmVnKGNmZyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoY2Zn LT53cmFwX3NpemUgPCBXUkFQX01JTl9TSVpFIHx8IGNmZy0+d3JhcF9zaXplID4gV1JBUF9NQVhf U0laRSkgewotCQlEUk1fRVJST1IoImludmFsaWQgd3JhcCBzeiAlZCBtaW4gJWQgbWF4ICVsZFxu IiwKLQkJCWNmZy0+d3JhcF9zaXplLCBXUkFQX01JTl9TSVpFLCBXUkFQX01BWF9TSVpFKTsKLQkJ cmMgPSAtRUlOVkFMOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCB2YWxpZGF0 ZV93cml0ZV9yZWcoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZykKLXsKLQl1 MzIgcmVtYWluX2xlbiwgd3JpdGVfbGVuOwotCi0JcmVtYWluX2xlbiA9IEJVRkZFUl9TUEFDRV9M RUZUKGNmZyk7Ci0Jd3JpdGVfbGVuID0gb3BzX21lbV9zaXplW2NmZy0+b3BzXSArIGNmZy0+ZGF0 YV9zaXplOwotCWlmIChyZW1haW5fbGVuIDwgd3JpdGVfbGVuKSB7Ci0JCURSTV9FUlJPUigiYnVm ZmVyIGlzIGZ1bGwgc3ogJWQgbmVlZHMgJWQgYnl0ZXNcbiIsCi0JCQkJcmVtYWluX2xlbiwgd3Jp dGVfbGVuKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFjZmctPmRhdGEpIHsKLQkJ RFJNX0VSUk9SKCJpbnZhbGlkIGRhdGEgJXBLIHNpemUgJWQgZXhwIHN6ICVkXG4iLCBjZmctPmRh dGEsCi0JCQljZmctPmRhdGFfc2l6ZSwgd3JpdGVfbGVuKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCWlmICgoU0laRV9EV09SRChjZmctPmRhdGFfc2l6ZSkpID4gTUFYX0RXT1JEU19TWiB8fAot CSAgICBOT1RfV09SRF9BTElHTkVEKGNmZy0+ZGF0YV9zaXplKSkgewotCQlEUk1fRVJST1IoIklu dmFsaWQgZGF0YSBzaXplICVkIG1heCAlbGQgYWxpZ24gJXhcbiIsCi0JCQljZmctPmRhdGFfc2l6 ZSwgTUFYX0RXT1JEU19TWiwKLQkJCU5PVF9XT1JEX0FMSUdORUQoY2ZnLT5kYXRhX3NpemUpKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNmZy0+YmxrX29mZnNldCA+IE1BWF9SRUxB VElWRV9PRkYgfHwKLQkJCU5PVF9XT1JEX0FMSUdORUQoY2ZnLT5ibGtfb2Zmc2V0KSkgewotCQlE Uk1fRVJST1IoImludmFsaWQgb2Zmc2V0ICVkIG1heCAlbGQgYWxpZ24gJXhcbiIsCi0JCQkJY2Zn LT5ibGtfb2Zmc2V0LCBNQVhfUkVMQVRJVkVfT0ZGLAotCQkJCU5PVF9XT1JEX0FMSUdORUQoY2Zn LT5ibGtfb2Zmc2V0KSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IHZhbGlkYXRlX3dyaXRlX2RlY29kZV9zZWwoc3RydWN0IGRwdV9yZWdfZG1h X3NldHVwX29wc19jZmcgKmNmZykKLXsKLQl1MzIgcmVtYWluX2xlbjsKLQotCXJlbWFpbl9sZW4g PSBCVUZGRVJfU1BBQ0VfTEVGVChjZmcpOwotCWlmIChyZW1haW5fbGVuIDwgb3BzX21lbV9zaXpl W0hXX0JMS19TRUxFQ1RdKSB7Ci0JCURSTV9FUlJPUigiYnVmZmVyIGlzIGZ1bGwgbmVlZHMgJWQg Ynl0ZXNcbiIsCi0JCQkJb3BzX21lbV9zaXplW0hXX0JMS19TRUxFQ1RdKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JaWYgKCFjZmctPmJsaykgewotCQlEUk1fRVJST1IoImJsayBzZXQgYXMg MFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkvKiBEU1BQIGFuZCBWSUcgY2FuJ3QgYmUg Y29tYmluZWQgKi8KLQlpZiAoKGNmZy0+YmxrICYgR1JQX1ZJR19IV19CTEtfU0VMRUNUKSAmJgot CQkoY2ZnLT5ibGsgJiBHUlBfRFNQUF9IV19CTEtfU0VMRUNUKSkgewotCQlEUk1fRVJST1IoImlu dmFsaWQgYmxrIGNvbWJpbmF0aW9uICV4XG4iLAotCQkJICAgIGNmZy0+YmxrKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmFsaWRhdGVfZG1h X2NmZyhzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewotCWludCByYyA9 IDA7Ci0JYm9vbCBzdXBwb3J0ZWQ7Ci0KLQlpZiAoIWNmZyB8fCBjZmctPm9wcyA+PSBSRUdfRE1B X1NFVFVQX09QU19NQVggfHwgIWNmZy0+ZG1hX2J1ZikgewotCQlEUk1fRVJST1IoImludmFsaWQg cGFyYW0gY2ZnICVwSyBvcHMgJWQgZG1hX2J1ZiAlcEtcbiIsCi0JCQljZmcsICgoY2ZnKSA/IGNm Zy0+b3BzIDogUkVHX0RNQV9TRVRVUF9PUFNfTUFYKSwKLQkJCSgoY2ZnKSA/IGNmZy0+ZG1hX2J1 ZiA6IE5VTEwpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmMgPSBjaGVja19zdXBwb3J0 X3YxKGNmZy0+ZmVhdHVyZSwgY2ZnLT5ibGssICZzdXBwb3J0ZWQpOwotCWlmIChyYyB8fCAhc3Vw cG9ydGVkKSB7Ci0JCURSTV9FUlJPUigiY2hlY2sgc3VwcG9ydCBmYWlsZWQgcmMgJWQgc3VwcG9y dGVkICVkXG4iLAotCQkJCXJjLCBzdXBwb3J0ZWQpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCXJldHVy biByYzsKLQl9Ci0KLQlpZiAoY2ZnLT5kbWFfYnVmLT5pbmRleCA+PSBjZmctPmRtYV9idWYtPmJ1 ZmZlcl9zaXplIHx8Ci0JICAgIE5PVF9XT1JEX0FMSUdORUQoY2ZnLT5kbWFfYnVmLT5pbmRleCkp IHsKLQkJRFJNX0VSUk9SKCJCdWYgT3ZlcmZsb3cgaW5kZXggJWQgbWF4IHNpemUgJWQgYWxpZ24g JXhcbiIsCi0JCQljZmctPmRtYV9idWYtPmluZGV4LCBjZmctPmRtYV9idWYtPmJ1ZmZlcl9zaXpl LAotCQkJTk9UX1dPUkRfQUxJR05FRChjZmctPmRtYV9idWYtPmluZGV4KSk7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCWlmIChjZmctPmRtYV9idWYtPmlvdmEgJiBHVUFSRF9CWVRFUyB8fCAh Y2ZnLT5kbWFfYnVmLT52YWRkcikgewotCQlEUk1fRVJST1IoImlvdmEgbm90IGFsaWduZWQgdG8g JWx4IGlvdmEgJWxseCBrdmEgJXBLIiwKLQkJCQlBRERSX0FMSUdOLCBjZmctPmRtYV9idWYtPmlv dmEsCi0JCQkJY2ZnLT5kbWFfYnVmLT52YWRkcik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlp ZiAoIUlTX09QX0FMTE9XRUQoY2ZnLT5vcHMsIGNmZy0+ZG1hX2J1Zi0+bmV4dF9vcF9hbGxvd2Vk KSkgewotCQlEUk1fRVJST1IoImludmFsaWQgb3AgJXggYWxsb3dlZCAleFxuIiwgY2ZnLT5vcHMs Ci0JCQkJY2ZnLT5kbWFfYnVmLT5uZXh0X29wX2FsbG93ZWQpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlpZiAoIXZhbGlkYXRlX2RtYV9vcF9wYXJhbXNbY2ZnLT5vcHNdIHx8Ci0JICAgICF3 cml0ZV9kbWFfb3BfcGFyYW1zW2NmZy0+b3BzXSkgewotCQlEUk1fRVJST1IoImludmFsaWQgb3Ag JWQgdmFsaWRhdGUgJXBLIHdyaXRlICVwS1xuIiwgY2ZnLT5vcHMsCi0JCQl2YWxpZGF0ZV9kbWFf b3BfcGFyYW1zW2NmZy0+b3BzXSwKLQkJCXdyaXRlX2RtYV9vcF9wYXJhbXNbY2ZnLT5vcHNdKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCB2YWxp ZGF0ZV9raWNrX29mZl92MShzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcgKmNmZykKLXsK LQotCWlmICghY2ZnIHx8ICFjZmctPmN0bCB8fCAhY2ZnLT5kbWFfYnVmKSB7Ci0JCURSTV9FUlJP UigiaW52YWxpZCBjZmcgJXBLIGN0bCAlcEsgZG1hX2J1ZiAlcEtcbiIsCi0JCQljZmcsICgoIWNm ZykgPyBOVUxMIDogY2ZnLT5jdGwpLAotCQkJKCghY2ZnKSA/IE5VTEwgOiBjZmctPmRtYV9idWYp KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNmZy0+Y3RsLT5pZHggPCBDVExfMCAm JiBjZmctPmN0bC0+aWR4ID49IENUTF9NQVgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGN0bCBp ZHggJWRcbiIsIGNmZy0+Y3RsLT5pZHgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAo Y2ZnLT5vcCA+PSBSRUdfRE1BX09QX01BWCkgewotCQlEUk1fRVJST1IoImludmFsaWQgb3AgJWRc biIsIGNmZy0+b3ApOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoKGNmZy0+b3AgPT0g UkVHX0RNQV9XUklURSkgJiYKLQkgICAgICghKGNmZy0+ZG1hX2J1Zi0+b3BzX2NvbXBsZXRlZCAm IERFQ09ERV9TRUxfT1ApIHx8Ci0JICAgICAhKGNmZy0+ZG1hX2J1Zi0+b3BzX2NvbXBsZXRlZCAm IFJFR19XUklURV9PUCkpKSB7Ci0JCURSTV9FUlJPUigiaW5jb21wbGV0ZSB3cml0ZSBvcHMgJXhc biIsCi0JCQkJY2ZnLT5kbWFfYnVmLT5vcHNfY29tcGxldGVkKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JaWYgKGNmZy0+b3AgPT0gUkVHX0RNQV9SRUFEICYmIGNmZy0+YmxvY2tfc2VsZWN0 ID49IERTUFBfSElTVF9NQVgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGJsb2NrIGZvciByZWFk ICVkXG4iLCBjZmctPmJsb2NrX3NlbGVjdCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8q IE9ubHkgaW1tZWRpYXRlIHRyaWdnZXJzIGFyZSBzdXBwb3J0ZWQgbm93IGhlbmNlIGhhcmRjb2Rl ICovCi0JY2ZnLT50cmlnZ2VyX21vZGUgPSAoY2ZnLT5vcCA9PSBSRUdfRE1BX1JFQUQpID8gKFJF QURfVFJJR0dFUikgOgotCQkJCShXUklURV9UUklHR0VSKTsKLQotCWlmIChjZmctPmRtYV9idWYt PmlvdmEgJiBHVUFSRF9CWVRFUykgewotCQlEUk1fRVJST1IoIkFkZHJlc3MgaXMgbm90IGFsaWdu ZWQgdG8gJWx4IGlvdmEgJWxseCIsIEFERFJfQUxJR04sCi0JCQkJY2ZnLT5kbWFfYnVmLT5pb3Zh KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNmZy0+cXVldWVfc2VsZWN0ID49IERN QV9DVExfUVVFVUVfTUFYKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBxdWV1ZSBzZWxlY3RlZCAl ZFxuIiwgY2ZnLT5xdWV1ZV9zZWxlY3QpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAo U0laRV9EV09SRChjZmctPmRtYV9idWYtPmluZGV4KSA+IE1BWF9EV09SRFNfU1ogfHwKLQkJCSFj ZmctPmRtYV9idWYtPmluZGV4KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBkd29yZCBzaXplICV6 ZCBtYXggJWxkXG4iLAotCQkJU0laRV9EV09SRChjZmctPmRtYV9idWYtPmluZGV4KSwgTUFYX0RX T1JEU19TWik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCB3cml0ZV9raWNrX29mZl92MShzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcgKmNm ZykKLXsKLQl1MzIgY21kMTsKLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3OwotCi0JbWVt c2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7Ci0JY21kMSA9IChjZmctPm9wID09IFJFR19ETUFfUkVB RCkgPwotCQkoZHNwcF9yZWFkX3NlbFtjZmctPmJsb2NrX3NlbGVjdF0gPDwgMzApIDogMDsKLQlj bWQxIHw9IChjZmctPmxhc3RfY29tbWFuZCkgPyBCSVQoMjQpIDogMDsKLQljbWQxIHw9IChjZmct Pm9wID09IFJFR19ETUFfUkVBRCkgPyAoMiA8PCAyMikgOiAwOwotCWNtZDEgfD0gKGNmZy0+b3Ag PT0gUkVHX0RNQV9XUklURSkgPyAoQklUKDIyKSkgOiAwOwotCWNtZDEgfD0gKFNJWkVfRFdPUkQo Y2ZnLT5kbWFfYnVmLT5pbmRleCkgJiBNQVhfRFdPUkRTX1NaKTsKLQotCVNFVF9VUF9SRUdfRE1B X1JFRyhodywgcmVnX2RtYSk7Ci0JRFBVX1JFR19XUklURSgmaHcsIFJFR19ETUFfT1BfTU9ERV9P RkYsIEJJVCgwKSk7Ci0JRFBVX1JFR19XUklURSgmaHcsIHJlZ19kbWFfY3RsX3F1ZXVlX29mZltj ZmctPmN0bC0+aWR4XSwKLQkJCWNmZy0+ZG1hX2J1Zi0+aW92YSk7Ci0JRFBVX1JFR19XUklURSgm aHcsIHJlZ19kbWFfY3RsX3F1ZXVlX29mZltjZmctPmN0bC0+aWR4XSArIDB4NCwKLQkJCWNtZDEp OwotCWlmIChjZmctPmxhc3RfY29tbWFuZCkKLQkJRFBVX1JFR19XUklURSgmY2ZnLT5jdGwtPmh3 LCBSRUdfRE1BX0NUTF9UUklHR0VSX09GRiwKLQkJCXF1ZXVlX3NlbFtjZmctPnF1ZXVlX3NlbGVj dF0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBpbml0X3YxKHN0cnVjdCBkcHVfaHdfcmVnX2Rt YSAqY2ZnKQotewotCWludCBpID0gMDsKLQotCWlmICghY2ZnKQotCQlyZXR1cm4gLUVJTlZBTDsK LQotCXJlZ19kbWEgPSBjZmc7Ci0JaWYgKCFsYXN0X2NtZF9idWYpIHsKLQkJbGFzdF9jbWRfYnVm ID0gYWxsb2NfcmVnX2RtYV9idWZfdjEoUkVHX0RNQV9IRUFERVJTX0JVRkZFUl9TWik7Ci0JCWlm IChJU19FUlJfT1JfTlVMTChsYXN0X2NtZF9idWYpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot CXJlZ19kbWEtPm9wcy5jaGVja19zdXBwb3J0ID0gY2hlY2tfc3VwcG9ydF92MTsKLQlyZWdfZG1h LT5vcHMuc2V0dXBfcGF5bG9hZCA9IHNldHVwX3BheWxvYWRfdjE7Ci0JcmVnX2RtYS0+b3BzLmtp Y2tfb2ZmID0ga2lja19vZmZfdjE7Ci0JcmVnX2RtYS0+b3BzLnJlc2V0ID0gcmVzZXRfdjE7Ci0J cmVnX2RtYS0+b3BzLmFsbG9jX3JlZ19kbWFfYnVmID0gYWxsb2NfcmVnX2RtYV9idWZfdjE7Ci0J cmVnX2RtYS0+b3BzLmRlYWxsb2NfcmVnX2RtYSA9IGRlYWxsb2NfcmVnX2RtYV92MTsKLQlyZWdf ZG1hLT5vcHMucmVzZXRfcmVnX2RtYV9idWYgPSByZXNldF9yZWdfZG1hX2J1ZmZlcl92MTsKLQly ZWdfZG1hLT5vcHMubGFzdF9jb21tYW5kID0gbGFzdF9jbWRfdjE7Ci0KLQlyZWdfZG1hX2N0bF9x dWV1ZV9vZmZbQ1RMXzBdID0gUkVHX0RNQV9DVEwwX1FVRVVFXzBfQ01EMF9PRkY7Ci0JZm9yIChp ID0gQ1RMXzE7IGkgPCBBUlJBWV9TSVpFKHJlZ19kbWFfY3RsX3F1ZXVlX29mZik7IGkrKykKLQkJ cmVnX2RtYV9jdGxfcXVldWVfb2ZmW2ldID0gcmVnX2RtYV9jdGxfcXVldWVfb2ZmW2kgLSAxXSAr Ci0JCQkoc2l6ZW9mKHUzMikgKiA0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNo ZWNrX3N1cHBvcnRfdjEoZW51bSBkcHVfcmVnX2RtYV9mZWF0dXJlcyBmZWF0dXJlLAotCQkgICAg IGVudW0gZHB1X3JlZ19kbWFfYmxrIGJsaywKLQkJICAgICBib29sICppc19zdXBwb3J0ZWQpCi17 Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIWlzX3N1cHBvcnRlZCkKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0KLQlpZiAoZmVhdHVyZSA+PSBSRUdfRE1BX0ZFQVRVUkVTX01BWCB8fCBibGsgPj0gTURTUykg ewotCQkqaXNfc3VwcG9ydGVkID0gZmFsc2U7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JKmlzX3N1 cHBvcnRlZCA9IChibGsgJiB2MV9zdXBwb3J0ZWRbZmVhdHVyZV0pID8gdHJ1ZSA6IGZhbHNlOwot CXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0dXBfcGF5bG9hZF92MShzdHJ1Y3QgZHB1 X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewotCWludCByYyA9IDA7Ci0KLQlyYyA9IHZh bGlkYXRlX2RtYV9jZmcoY2ZnKTsKLQotCWlmICghcmMpCi0JCXJjID0gdmFsaWRhdGVfZG1hX29w X3BhcmFtc1tjZmctPm9wc10oY2ZnKTsKLQotCWlmICghcmMpCi0JCXJjID0gd3JpdGVfZG1hX29w X3BhcmFtc1tjZmctPm9wc10oY2ZnKTsKLQotCXJldHVybiByYzsKLX0KLQotCi1zdGF0aWMgaW50 IGtpY2tfb2ZmX3YxKHN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyAqY2ZnKQotewotCWlu dCByYyA9IDA7Ci0KLQlyYyA9IHZhbGlkYXRlX2tpY2tfb2ZmX3YxKGNmZyk7Ci0JaWYgKHJjKQot CQlyZXR1cm4gcmM7Ci0KLQlyYyA9IHdyaXRlX2tpY2tfb2ZmX3YxKGNmZyk7Ci0JcmV0dXJuIHJj OwotfQotCi1pbnQgcmVzZXRfdjEoc3RydWN0IGRwdV9od19jdGwgKmN0bCkKLXsKLQlzdHJ1Y3Qg ZHB1X2h3X2Jsa19yZWdfbWFwIGh3OwotCXUzMiBpbmRleCwgdmFsOwotCi0JaWYgKCFjdGwgfHwg Y3RsLT5pZHggPiBDVExfTUFYKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBjdGwgJXBLIGN0bCBp ZHggJWRcbiIsCi0JCQljdGwsICgoY3RsKSA/IGN0bC0+aWR4IDogMCkpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKLQlpbmRleCA9IGN0bC0+ aWR4IC0gQ1RMXzA7Ci0JU0VUX1VQX1JFR19ETUFfUkVHKGh3LCByZWdfZG1hKTsKLQlEUFVfUkVH X1dSSVRFKCZodywgUkVHX0RNQV9PUF9NT0RFX09GRiwgQklUKDApKTsKLQlEUFVfUkVHX1dSSVRF KCZodywgKFJFR19ETUFfQ1RMMF9SRVNFVF9PRkYgKyBpbmRleCAqIHNpemVvZih1MzIpKSwKLQkJ CUJJVCgwKSk7Ci0KLQlpbmRleCA9IDA7Ci0JZG8gewotCQl1ZGVsYXkoMTAwMCk7Ci0JCWluZGV4 Kys7Ci0JCXZhbCA9IERQVV9SRUdfUkVBRCgmaHcsCi0JCQkoUkVHX0RNQV9DVEwwX1JFU0VUX09G RiArIGluZGV4ICogc2l6ZW9mKHUzMikpKTsKLQl9IHdoaWxlIChpbmRleCA8IDIgJiYgdmFsKTsK LQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqYWxs b2NfcmVnX2RtYV9idWZfdjEodTMyIHNpemUpCi17Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZl ciAqZG1hX2J1ZiA9IE5VTEw7Ci0JdTMyIGlvdmFfYWxpZ25lZCwgb2Zmc2V0OwotCXUzMiByc2l6 ZSA9IHNpemUgKyBHVUFSRF9CWVRFUzsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0g cmVnX2RtYS0+ZHJtX2Rldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG1zbV9nZW1fYWRkcmVzc19z cGFjZSAqYXNwYWNlID0gTlVMTDsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFzaXplIHx8IFNJWkVf RFdPUkQoc2l6ZSkgPiBNQVhfRFdPUkRTX1NaKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBidWZm ZXIgc2l6ZSAlZFxuIiwgc2l6ZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCX0KLQot CWRtYV9idWYgPSBremFsbG9jKHNpemVvZigqZG1hX2J1ZiksIEdGUF9LRVJORUwpOwotCWlmICgh ZG1hX2J1ZikKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlkbWFfYnVmLT5idWYgPSBt c21fZ2VtX25ldyhyZWdfZG1hLT5kcm1fZGV2LAotCQkJCSAgICByc2l6ZSwgTVNNX0JPX1VOQ0FD SEVEKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoZG1hX2J1Zi0+YnVmKSkgewotCQlyYyA9IC1FSU5W QUw7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlhc3BhY2UgPSBwcml2LT5rbXMtPmFzcGFjZTsKLQlp ZiAoIWFzcGFjZSkgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgYXNwYWNlXG4iKTsKLQkJ cmMgPSAtRUlOVkFMOwotCQlnb3RvIGZyZWVfZ2VtOwotCX0KLQotCWRtYV9idWYtPmFzcGFjZSA9 IGFzcGFjZTsKLQlyYyA9IG1zbV9nZW1fZ2V0X2lvdmEoZG1hX2J1Zi0+YnVmLCBhc3BhY2UsICZk bWFfYnVmLT5pb3ZhKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHRo ZSBpb3ZhIHJjICVkXG4iLCByYyk7Ci0JCWdvdG8gZnJlZV9nZW07Ci0JfQotCi0JZG1hX2J1Zi0+ dmFkZHIgPSBtc21fZ2VtX2dldF92YWRkcihkbWFfYnVmLT5idWYpOwotCWlmIChJU19FUlJfT1Jf TlVMTChkbWFfYnVmLT52YWRkcikpIHsKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHZhIHJj ICVkXG4iLCByYyk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBwdXRfaW92YTsKLQl9Ci0KLQlk bWFfYnVmLT5idWZmZXJfc2l6ZSA9IHNpemU7Ci0JaW92YV9hbGlnbmVkID0gKGRtYV9idWYtPmlv dmEgKyBHVUFSRF9CWVRFUykgJiBBTElHTkVEX09GRlNFVDsKLQlvZmZzZXQgPSBpb3ZhX2FsaWdu ZWQgLSBkbWFfYnVmLT5pb3ZhOwotCWRtYV9idWYtPmlvdmEgPSBkbWFfYnVmLT5pb3ZhICsgb2Zm c2V0OwotCWRtYV9idWYtPnZhZGRyID0gKHZvaWQgKikoKCh1OCAqKWRtYV9idWYtPnZhZGRyKSAr IG9mZnNldCk7Ci0JZG1hX2J1Zi0+bmV4dF9vcF9hbGxvd2VkID0gREVDT0RFX1NFTF9PUDsKLQot CXJldHVybiBkbWFfYnVmOwotCi1wdXRfaW92YToKLQltc21fZ2VtX3B1dF9pb3ZhKGRtYV9idWYt PmJ1ZiwgYXNwYWNlKTsKLWZyZWVfZ2VtOgotCW11dGV4X2xvY2soJnJlZ19kbWEtPmRybV9kZXYt PnN0cnVjdF9tdXRleCk7Ci0JbXNtX2dlbV9mcmVlX29iamVjdChkbWFfYnVmLT5idWYpOwotCW11 dGV4X3VubG9jaygmcmVnX2RtYS0+ZHJtX2Rldi0+c3RydWN0X211dGV4KTsKLWZhaWw6Ci0Ja2Zy ZWUoZG1hX2J1Zik7Ci0JcmV0dXJuIEVSUl9QVFIocmMpOwotfQotCi1zdGF0aWMgaW50IGRlYWxs b2NfcmVnX2RtYV92MShzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpkbWFfYnVmKQotewotCWlm ICghZG1hX2J1ZikgewotCQlEUk1fRVJST1IoImludmFsaWQgcGFyYW0gcmVnX2J1ZiAlcEtcbiIs IGRtYV9idWYpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZG1hX2J1Zi0+YnVmKSB7 Ci0JCW1zbV9nZW1fcHV0X2lvdmEoZG1hX2J1Zi0+YnVmLCAwKTsKLQkJbXV0ZXhfbG9jaygmcmVn X2RtYS0+ZHJtX2Rldi0+c3RydWN0X211dGV4KTsKLQkJbXNtX2dlbV9mcmVlX29iamVjdChkbWFf YnVmLT5idWYpOwotCQltdXRleF91bmxvY2soJnJlZ19kbWEtPmRybV9kZXYtPnN0cnVjdF9tdXRl eCk7Ci0JfQotCi0Ja2ZyZWUoZG1hX2J1Zik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg cmVzZXRfcmVnX2RtYV9idWZmZXJfdjEoc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqbHV0X2J1 ZikKLXsKLQlpZiAoIWx1dF9idWYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbHV0X2J1Zi0+aW5k ZXggPSAwOwotCWx1dF9idWYtPm9wc19jb21wbGV0ZWQgPSAwOwotCWx1dF9idWYtPm5leHRfb3Bf YWxsb3dlZCA9IERFQ09ERV9TRUxfT1A7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmFs aWRhdGVfbGFzdF9jbWQoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZykKLXsK LQl1MzIgcmVtYWluX2xlbiwgd3JpdGVfbGVuOwotCi0JcmVtYWluX2xlbiA9IEJVRkZFUl9TUEFD RV9MRUZUKGNmZyk7Ci0Jd3JpdGVfbGVuID0gc2l6ZW9mKHUzMik7Ci0JaWYgKHJlbWFpbl9sZW4g PCB3cml0ZV9sZW4pIHsKLQkJRFJNX0VSUk9SKCJidWZmZXIgaXMgZnVsbCBzeiAlZCBuZWVkcyAl ZCBieXRlc1xuIiwKLQkJCQlyZW1haW5fbGVuLCB3cml0ZV9sZW4pOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfbGFzdF9jbWQoc3RydWN0 IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZykKLXsKLQl1MzIgKmxvYyA9IE5VTEw7Ci0K LQlsb2MgPSAgKHUzMiAqKSgodTggKiljZmctPmRtYV9idWYtPnZhZGRyICsKLQkJCWNmZy0+ZG1h X2J1Zi0+aW5kZXgpOwotCWxvY1swXSA9IFJFR19ETUFfREVDT0RFX1NFTDsKLQlsb2NbMV0gPSAw OwotCWNmZy0+ZG1hX2J1Zi0+aW5kZXggPSBzaXplb2YodTMyKSAqIDI7Ci0JY2ZnLT5kbWFfYnVm LT5vcHNfY29tcGxldGVkID0gUkVHX1dSSVRFX09QIHwgREVDT0RFX1NFTF9PUDsKLQljZmctPmRt YV9idWYtPm5leHRfb3BfYWxsb3dlZCA9IFJFR19XUklURV9PUDsKLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IGxhc3RfY21kX3YxKHN0cnVjdCBkcHVfaHdfY3RsICpjdGwsIGVudW0gZHB1 X3JlZ19kbWFfcXVldWUgcSkKLXsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBj Zmc7Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX2tpY2tvZmZfY2ZnIGtpY2tfb2ZmOwotCi0JaWYgKCFs YXN0X2NtZF9idWYgfHwgIWN0bCB8fCBxID49IERNQV9DVExfUVVFVUVfTUFYKSB7Ci0JCURSTV9F UlJPUigiaW52YWxpZCBwYXJhbSBidWYgJXBLIGN0bCAlcEsgcSAlZFxuIiwgbGFzdF9jbWRfYnVm LAotCQkJCWN0bCwgcSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghbGFzdF9jbWRf YnVmLT5pb3ZhKSB7Ci0JCURSTV9ERUJVRygiaW92YSBub3Qgc2V0LCBwb3NzaWJsZSBzZWN1cmUg c2Vzc2lvblxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWNmZy5kbWFfYnVmID0gbGFzdF9jbWRf YnVmOwotCXJlc2V0X3JlZ19kbWFfYnVmZmVyX3YxKGxhc3RfY21kX2J1Zik7Ci0JaWYgKHZhbGlk YXRlX2xhc3RfY21kKCZjZmcpKSB7Ci0JCURSTV9FUlJPUigidmFsaWRhdGUgYnVmIGZhaWxlZFxu Iik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh3cml0ZV9sYXN0X2NtZCgmY2ZnKSkg ewotCQlEUk1fRVJST1IoIndyaXRlIGJ1ZiBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlraWNrX29mZi5jdGwgPSBjdGw7Ci0Ja2lja19vZmYucXVldWVfc2VsZWN0ID0gcTsK LQlraWNrX29mZi50cmlnZ2VyX21vZGUgPSBXUklURV9JTU1FRElBVEU7Ci0Ja2lja19vZmYubGFz dF9jb21tYW5kID0gMTsKLQlraWNrX29mZi5vcCA9IFJFR19ETUFfV1JJVEU7Ci0Ja2lja19vZmYu ZG1hX2J1ZiA9IGxhc3RfY21kX2J1ZjsKLQlpZiAoa2lja19vZmZfdjEoJmtpY2tfb2ZmKSkgewot CQlEUk1fRVJST1IoImtpY2sgb2ZmIGxhc3QgY21kIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIGRlaW5pdF92MSh2b2lkKQotewotCWlm IChsYXN0X2NtZF9idWYpCi0JCWRlYWxsb2NfcmVnX2RtYV92MShsYXN0X2NtZF9idWYpOwotCWxh c3RfY21kX2J1ZiA9IE5VTEw7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92MS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X3JlZ19kbWFfdjEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ3 ODRlYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf cmVnX2RtYV92MS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyogQ29weXJpZ2h0 IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX0RQVV9IV19SRUdfRE1BX1YxX0gKLSNkZWZpbmUg X0RQVV9IV19SRUdfRE1BX1YxX0gKLQotI2luY2x1ZGUgImRwdV9yZWdfZG1hLmgiCi0KLS8qKgot ICogaW5pdF92MSgpIC0gaW5pdGlhbGl6ZSB0aGUgcmVnIGRtYSB2MSBkcml2ZXIgYnkgaW5zdGFs bGluZyB2MSBvcHMKLSAqIEByZWdfZG1hIC0gcmVnX2RtYSBodyBpbmZvIHN0cnVjdHVyZSBleHBv c2luZyBjYXBhYmlsaXRpZXMuCi0gKi8KLWludCBpbml0X3YxKHN0cnVjdCBkcHVfaHdfcmVnX2Rt YSAqcmVnX2RtYSk7Ci0KLS8qKgotICogZGVpbml0X3YxKCkgLSBmcmVlIHVwIGFueSByZXNvdXJj ZXMgYWxsb2NhdGVkIGR1cmluZyB0aGUgdjEgcmVnIGRtYSBpbml0Ci0gKi8KLXZvaWQgZGVpbml0 X3YxKHZvaWQpOwotI2VuZGlmIC8qIF9EUFVfSFdfUkVHX0RNQV9WMV9IICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92MV9jb2xvcl9w cm9jLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92MV9j b2xvcl9wcm9jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMWFhNmYuLjAwMDAw MDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JlZ19kbWFfdjFf Y29sb3JfcHJvYy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTQzICswLDAgQEAKLS8qIENvcHlyaWdo dCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgotICovCi0jaW5jbHVkZSA8ZHJtL21zbV9kcm1fcHAuaD4KLSNpbmNsdWRl ICJkcHVfcmVnX2RtYS5oIgotI2luY2x1ZGUgImRwdV9od19yZWdfZG1hX3YxX2NvbG9yX3Byb2Mu aCIKLSNpbmNsdWRlICJkcHVfaHdfY29sb3JfcHJvY19jb21tb25fdjQuaCIKLQotLyogUmVzZXJ2 ZSBzcGFjZSBvZiAxMjggd29yZHMgZm9yIExVVCBkbWEgcGF5bG9hZCBzZXQtdXAgKi8KLSNkZWZp bmUgUkVHX0RNQV9IRUFERVJTX0JVRkZFUl9TWiAoc2l6ZW9mKHUzMikgKiAxMjgpCi0KLSNkZWZp bmUgVkxVVF9NRU1fU0laRSAoKDEyOCAqIHNpemVvZih1MzIpKSArIFJFR19ETUFfSEVBREVSU19C VUZGRVJfU1opCi0jZGVmaW5lIFZMVVRfTEVOICgxMjggKiBzaXplb2YodTMyKSkKLSNkZWZpbmUg UEFfT1BfTU9ERV9PRkYgMHg4MDAKLSNkZWZpbmUgUEFfTFVUVl9PUE1PREVfT0ZGIDB4ODRjCi0K LSNkZWZpbmUgR0FNVVRfTFVUX01FTV9TSVpFICgoc2l6ZW9mKHN0cnVjdCBkcm1fbXNtXzNkX2dh bXV0KSkgKyBcCi0JCVJFR19ETUFfSEVBREVSU19CVUZGRVJfU1opCi0jZGVmaW5lIEdBTVVUX1ND QUxFX09GRl9MRU4gKEdBTVVUXzNEX1NDQUxFX09GRl9TWiAqIFwKLQkJR0FNVVRfM0RfU0NBTEVf T0ZGX1RCTF9OVU0gKiBzaXplb2YodTMyKSkKLSNkZWZpbmUgR0FNVVRfU0NBTEVfT0ZGX0xFTl8x MiAoR0FNVVRfM0RfU0NBTEVCX09GRl9TWiAqIHNpemVvZih1MzIpKQotCi0jZGVmaW5lIEdDX0xV VF9NRU1fU0laRSAoKHNpemVvZihzdHJ1Y3QgZHJtX21zbV9wZ2NfbHV0KSkgKyBcCi0JCVJFR19E TUFfSEVBREVSU19CVUZGRVJfU1opCi0KLSNkZWZpbmUgSUdDX0xVVF9NRU1fU0laRSAoKHNpemVv ZihzdHJ1Y3QgZHJtX21zbV9pZ2NfbHV0KSkgKyBcCi0JCVJFR19ETUFfSEVBREVSU19CVUZGRVJf U1opCi0KLSNkZWZpbmUgUENDX0xVVF9FTlRSSUVTIChQQ0NfTlVNX1BMQU5FUyAqIFBDQ19OVU1f Q09FRkYpCi0jZGVmaW5lIFBDQ19MRU4gKFBDQ19MVVRfRU5UUklFUyAqIHNpemVvZih1MzIpKQot I2RlZmluZSBQQ0NfTUVNX1NJWkUgKFBDQ19MRU4gKyBcCi0JCVJFR19ETUFfSEVBREVSU19CVUZG RVJfU1opCi0KLSNkZWZpbmUgUkVHX01BU0sobikgKChCSVQobikpIC0gMSkKLQotc3RhdGljIHN0 cnVjdCBkcHVfcmVnX2RtYV9idWZmZXIgKmRzcHBfYnVmW1JFR19ETUFfRkVBVFVSRVNfTUFYXVtE U1BQX01BWF07Ci0KLXN0YXRpYyB1MzIgZmVhdHVyZV9tYXBbRFBVX0RTUFBfTUFYXSA9IHsKLQlb RFBVX0RTUFBfVkxVVF0gPSBSRUdfRE1BX0ZFQVRVUkVTX01BWCwKLQlbRFBVX0RTUFBfR0FNVVRd ID0gR0FNVVQsCi0JW0RQVV9EU1BQX0lHQ10gPSBJR0MsCi0JW0RQVV9EU1BQX1BDQ10gPSBQQ0Ms Ci0JW0RQVV9EU1BQX0dDXSA9IEdDLAotCVtEUFVfRFNQUF9IU0lDXSA9IFJFR19ETUFfRkVBVFVS RVNfTUFYLAotCVtEUFVfRFNQUF9NRU1DT0xPUl0gPSBSRUdfRE1BX0ZFQVRVUkVTX01BWCwKLQlb RFBVX0RTUFBfU0lYWk9ORV0gPSBSRUdfRE1BX0ZFQVRVUkVTX01BWCwKLQlbRFBVX0RTUFBfRElU SEVSXSA9IFJFR19ETUFfRkVBVFVSRVNfTUFYLAotCVtEUFVfRFNQUF9ISVNUXSA9IFJFR19ETUFf RkVBVFVSRVNfTUFYLAotCVtEUFVfRFNQUF9BRF0gPSBSRUdfRE1BX0ZFQVRVUkVTX01BWCwKLX07 Ci0KLXN0YXRpYyB1MzIgZmVhdHVyZV9yZWdfZG1hX3N6W0RQVV9EU1BQX01BWF0gPSB7Ci0JW0RQ VV9EU1BQX1ZMVVRdID0gVkxVVF9NRU1fU0laRSwKLQlbRFBVX0RTUFBfR0FNVVRdID0gR0FNVVRf TFVUX01FTV9TSVpFLAotCVtEUFVfRFNQUF9HQ10gPSBHQ19MVVRfTUVNX1NJWkUsCi0JW0RQVV9E U1BQX0lHQ10gPSBJR0NfTFVUX01FTV9TSVpFLAotCVtEUFVfRFNQUF9QQ0NdID0gUENDX01FTV9T SVpFLAotfTsKLQotc3RhdGljIHUzMiBkc3BwX21hcHBpbmdbRFNQUF9NQVhdID0gewotCVtEU1BQ XzBdID0gRFNQUDAsCi0JW0RTUFBfMV0gPSBEU1BQMSwKLQlbRFNQUF8yXSA9IERTUFAyLAotCVtE U1BQXzNdID0gRFNQUDMsCi19OwotCi0jZGVmaW5lIFJFR19ETUFfSU5JVF9PUFMoY2ZnLCBibG9j aywgcmVnX2RtYV9mZWF0dXJlLCBmZWF0dXJlX2RtYV9idWYpIFwKLQlkbyB7IFwKLQkJbWVtc2V0 KCZjZmcsIDAsIHNpemVvZihjZmcpKTsgXAotCQkoY2ZnKS5ibGsgPSBibG9jazsgXAotCQkoY2Zn KS5mZWF0dXJlID0gcmVnX2RtYV9mZWF0dXJlOyBcCi0JCShjZmcpLmRtYV9idWYgPSBmZWF0dXJl X2RtYV9idWY7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFJFR19ETUFfU0VUVVBfT1BTKGNm ZywgYmxvY2tfb2ZmLCBkYXRhX3B0ciwgZGF0YV9sZW4sIG9wLCBcCi0JCXdyYXBfc3osIHdyYXBf aW5jKSBcCi0JZG8geyBcCi0JCShjZmcpLm9wcyA9IG9wOyBcCi0JCShjZmcpLmJsa19vZmZzZXQg PSBibG9ja19vZmY7IFwKLQkJKGNmZykuZGF0YV9zaXplID0gZGF0YV9sZW47IFwKLQkJKGNmZyku ZGF0YSA9IGRhdGFfcHRyOyBcCi0JCShjZmcpLmluYyA9IHdyYXBfaW5jOyBcCi0JCShjZmcpLndy YXBfc2l6ZSA9IHdyYXBfc3o7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFJFR19ETUFfU0VU VVBfS0lDS09GRihjZmcsIGh3X2N0bCwgZmVhdHVyZV9kbWFfYnVmLCBvcHMsIGN0bF9xLCBcCi0J CW1vZGUpIFwKLQlkbyB7IFwKLQkJbWVtc2V0KCZjZmcsIDAsIHNpemVvZihjZmcpKTsgXAotCQko Y2ZnKS5jdGwgPSBod19jdGw7IFwKLQkJKGNmZykuZG1hX2J1ZiA9IGZlYXR1cmVfZG1hX2J1Zjsg XAotCQkoY2ZnKS5vcCA9IG9wczsgXAotCQkoY2ZnKS5xdWV1ZV9zZWxlY3QgPSBjdGxfcTsgXAot CQkoY2ZnKS50cmlnZ2VyX21vZGUgPSBtb2RlOyBcCi0JfSB3aGlsZSAoMCkKLQotc3RhdGljIGlu dCByZWdfZG1hX2J1Zl9pbml0KHN0cnVjdCBkcHVfcmVnX2RtYV9idWZmZXIgKipidWYsIHUzMiBz eik7Ci1zdGF0aWMgaW50IHJlZ19kbWFfZHNwcF9jaGVjayhzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0 eCwgdm9pZCAqY2ZnLAotCQllbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIGZlYXR1cmUpOwotc3Rh dGljIGludCByZWdfZG1hX2Jsa19zZWxlY3QoZW51bSBkcHVfcmVnX2RtYV9mZWF0dXJlcyBmZWF0 dXJlLAotCQllbnVtIGRwdV9yZWdfZG1hX2JsayBibGssIHN0cnVjdCBkcHVfcmVnX2RtYV9idWZm ZXIgKmRtYV9idWYpOwotc3RhdGljIGludCByZWdfZG1hX3dyaXRlKGVudW0gZHB1X3JlZ19kbWFf c2V0dXBfb3BzIG9wcywgdTMyIG9mZiwgdTMyIGRhdGFfc3osCi0JCQl1MzIgKmRhdGEsIHN0cnVj dCBkcHVfcmVnX2RtYV9idWZmZXIgKmRtYV9idWYsCi0JCQllbnVtIGRwdV9yZWdfZG1hX2ZlYXR1 cmVzIGZlYXR1cmUsCi0JCQllbnVtIGRwdV9yZWdfZG1hX2JsayBibGspOwotc3RhdGljIGludCBy ZWdfZG1hX2tpY2tfb2ZmKGVudW0gZHB1X3JlZ19kbWFfb3Agb3AsIGVudW0gZHB1X3JlZ19kbWFf cXVldWUgcSwKLQkJZW51bSBkcHVfcmVnX2RtYV90cmlnZ2VyX21vZGUgbW9kZSwKLQkJc3RydWN0 IGRwdV9yZWdfZG1hX2J1ZmZlciAqZG1hX2J1Ziwgc3RydWN0IGRwdV9od19jdGwgKmN0bCk7Ci0K LXN0YXRpYyBpbnQgcmVnX2RtYV9idWZfaW5pdChzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICoq YnVmLCB1MzIgc2l6ZSkKLXsKLQlzdHJ1Y3QgZHB1X2h3X3JlZ19kbWFfb3BzICpkbWFfb3BzOwot Ci0JZG1hX29wcyA9IGRwdV9yZWdfZG1hX2dldF9vcHMoKTsKLQlpZiAoSVNfRVJSX09SX05VTEwo ZG1hX29wcykpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KLQlpZiAoIWJ1ZikgewotCQlEUk1fRVJS T1IoImludmFsaWQgYnVmXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogYnVmZmVy IGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KLQlpZiAoKmJ1ZikKLQkJcmV0dXJuIDA7Ci0KLQkqYnVm ID0gZG1hX29wcy0+YWxsb2NfcmVnX2RtYV9idWYoc2l6ZSk7Ci0JaWYgKElTX0VSUl9PUl9OVUxM KCpidWYpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IHJlZ19kbWFfZHNwcF9jaGVjayhzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnLAot CQllbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIGZlYXR1cmUpCi17Ci0Jc3RydWN0IGRwdV9od19y ZWdfZG1hX29wcyAqZG1hX29wczsKLQlzdHJ1Y3QgZHB1X2h3X2NwX2NmZyAqaHdfY2ZnID0gY2Zn OwotCi0JaWYgKCFjZmcgfHwgIWN0eCkgewotCQlEUk1fRVJST1IoImludmFsaWQgY2ZnICVwSyBj dHggJXBLXG4iLCBjZmcsIGN0eCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRtYV9vcHMg PSBkcHVfcmVnX2RtYV9nZXRfb3BzKCk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGRtYV9vcHMpKQot CQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghaHdfY2ZnLT5jdGwgfHwgY3R4LT5pZHggPj0gRFNQ UF9NQVggfHwKLQkJZmVhdHVyZSA+PSBSRUdfRE1BX0ZFQVRVUkVTX01BWCkgewotCQlEUk1fRVJS T1IoImludmFsaWQgY3RsICVwSyBkc3BwIGlkeCAlZCBmZWF0dXJlICVkXG4iLAotCQkJaHdfY2Zn LT5jdGwsIGN0eC0+aWR4LCBmZWF0dXJlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYg KCFkc3BwX2J1ZltmZWF0dXJlXVtjdHgtPmlkeF0pIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGRt YV9idWZcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCByZWdfZG1hX2Jsa19zZWxlY3QoZW51bSBkcHVfcmVnX2RtYV9mZWF0dXJlcyBmZWF0 dXJlLAotCQllbnVtIGRwdV9yZWdfZG1hX2JsayBibGssIHN0cnVjdCBkcHVfcmVnX2RtYV9idWZm ZXIgKmRtYV9idWYpCi17Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQlz dHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBkbWFfd3JpdGVfY2ZnOwotCWludCByYyA9 IDA7Ci0KLQlkbWFfb3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCWRtYV9vcHMtPnJlc2V0 X3JlZ19kbWFfYnVmKGRtYV9idWYpOwotCW1lbXNldCgmZG1hX3dyaXRlX2NmZywgMCwgc2l6ZW9m KGRtYV93cml0ZV9jZmcpKTsKLQlkbWFfd3JpdGVfY2ZnLmJsayA9IGJsazsKLQlkbWFfd3JpdGVf Y2ZnLmZlYXR1cmUgPSBmZWF0dXJlOwotCWRtYV93cml0ZV9jZmcub3BzID0gSFdfQkxLX1NFTEVD VDsKLQlkbWFfd3JpdGVfY2ZnLmRtYV9idWYgPSBkbWFfYnVmOwotCi0JcmMgPSBkbWFfb3BzLT5z ZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpCi0JCURSTV9FUlJPUigid3Jp dGUgZGVjb2RlIHNlbGVjdCBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgcmVnX2RtYV93cml0ZShlbnVtIGRwdV9yZWdfZG1hX3NldHVwX29wcyBv cHMsIHUzMiBvZmYsIHUzMiBkYXRhX3N6LAotCQkJdTMyICpkYXRhLCBzdHJ1Y3QgZHB1X3JlZ19k bWFfYnVmZmVyICpkbWFfYnVmLAotCQkJZW51bSBkcHVfcmVnX2RtYV9mZWF0dXJlcyBmZWF0dXJl LAotCQkJZW51bSBkcHVfcmVnX2RtYV9ibGsgYmxrKQotewotCXN0cnVjdCBkcHVfaHdfcmVnX2Rt YV9vcHMgKmRtYV9vcHM7Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgZG1hX3dy aXRlX2NmZzsKLQlpbnQgcmM7Ci0KLQlkbWFfb3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwot CW1lbXNldCgmZG1hX3dyaXRlX2NmZywgMCwgc2l6ZW9mKGRtYV93cml0ZV9jZmcpKTsKLQotCWRt YV93cml0ZV9jZmcub3BzID0gb3BzOwotCWRtYV93cml0ZV9jZmcuYmxrX29mZnNldCA9IG9mZjsK LQlkbWFfd3JpdGVfY2ZnLmRhdGFfc2l6ZSA9IGRhdGFfc3o7Ci0JZG1hX3dyaXRlX2NmZy5kYXRh ID0gZGF0YTsKLQlkbWFfd3JpdGVfY2ZnLmRtYV9idWYgPSBkbWFfYnVmOwotCWRtYV93cml0ZV9j ZmcuZmVhdHVyZSA9IGZlYXR1cmU7Ci0JZG1hX3dyaXRlX2NmZy5ibGsgPSBibGs7Ci0JcmMgPSBk bWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpCi0JCURSTV9F UlJPUigid3JpdGUgc2luZ2xlIHJlZyBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0KLQlyZXR1cm4g cmM7Ci19Ci0KLXN0YXRpYyBpbnQgcmVnX2RtYV9raWNrX29mZihlbnVtIGRwdV9yZWdfZG1hX29w IG9wLCBlbnVtIGRwdV9yZWdfZG1hX3F1ZXVlIHEsCi0JCWVudW0gZHB1X3JlZ19kbWFfdHJpZ2dl cl9tb2RlIG1vZGUsCi0JCXN0cnVjdCBkcHVfcmVnX2RtYV9idWZmZXIgKmRtYV9idWYsIHN0cnVj dCBkcHVfaHdfY3RsICpjdGwpCi17Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX2tpY2tvZmZfY2ZnIGtp Y2tfb2ZmOwotCXN0cnVjdCBkcHVfaHdfcmVnX2RtYV9vcHMgKmRtYV9vcHM7Ci0JaW50IHJjOwot Ci0JZG1hX29wcyA9IGRwdV9yZWdfZG1hX2dldF9vcHMoKTsKLQltZW1zZXQoJmtpY2tfb2ZmLCAw LCBzaXplb2Yoa2lja19vZmYpKTsKLQlraWNrX29mZi5jdGwgPSBjdGw7Ci0Ja2lja19vZmYuZG1h X2J1ZiA9IGRtYV9idWY7Ci0Ja2lja19vZmYub3AgPSBvcDsKLQlraWNrX29mZi5xdWV1ZV9zZWxl Y3QgPSBxOwotCWtpY2tfb2ZmLnRyaWdnZXJfbW9kZSA9IG1vZGU7Ci0JcmMgPSBkbWFfb3BzLT5r aWNrX29mZigma2lja19vZmYpOwotCWlmIChyYykKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8ga2lj ayBvZmYgcmV0ICVkXG4iLCByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCByZWdfZG1hdjFf aW5pdF9kc3BwX29wX3Y0KGludCBmZWF0dXJlLCBlbnVtIGRwdV9kc3BwIGlkeCkKLXsKLQlpbnQg cmMgPSAtRU5PVFNVUFA7Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQli b29sIGlzX3N1cHBvcnRlZCA9IGZhbHNlOwotCXUzMiBibGs7Ci0KLQlpZiAoZmVhdHVyZSA+PSBE UFVfRFNQUF9NQVggfHwgaWR4ID49IERTUFBfTUFYKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBm ZWF0dXJlICV4IG1heCAleCBkc3BwIGlkeCAleCBtYXggJXhkXG4iLAotCQkJZmVhdHVyZSwgRFBV X0RTUFBfTUFYLCBpZHgsIERTUFBfTUFYKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCWlmIChmZWF0 dXJlX21hcFtmZWF0dXJlXSA+PSBSRUdfRE1BX0ZFQVRVUkVTX01BWCkgewotCQlEUk1fRVJST1Io ImludmFsaWQgZmVhdHVyZSBtYXAgJWQgZm9yIGZlYXR1cmUgJWRcbiIsCi0JCQlmZWF0dXJlX21h cFtmZWF0dXJlXSwgZmVhdHVyZSk7Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQotCi0JZG1hX29w cyA9IGRwdV9yZWdfZG1hX2dldF9vcHMoKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoZG1hX29wcykp Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0KLQlibGsgPSAoZmVhdHVyZV9tYXBbZmVhdHVyZV0gPT0g SUdDKSA/IERTUFBfSUdDIDogZHNwcF9tYXBwaW5nW2lkeF07Ci0JcmMgPSBkbWFfb3BzLT5jaGVj a19zdXBwb3J0KGZlYXR1cmVfbWFwW2ZlYXR1cmVdLCBibGssICZpc19zdXBwb3J0ZWQpOwotCWlm ICghcmMpCi0JCXJjID0gKGlzX3N1cHBvcnRlZCkgPyAwIDogLUVOT1RTVVBQOwotCi0JaWYgKCFy YykKLQkJcmMgPSByZWdfZG1hX2J1Zl9pbml0KCZkc3BwX2J1ZltmZWF0dXJlX21hcFtmZWF0dXJl XV1baWR4XSwKLQkJCQlmZWF0dXJlX3JlZ19kbWFfc3pbZmVhdHVyZV0pOwotCi0JcmV0dXJuIHJj OwotfQotCi1pbnQgcmVnX2RtYXYxX2luaXRfc3NwcF9vcF92NChpbnQgZmVhdHVyZSwgZW51bSBk cHVfc3NwcCBpZHgpCi17Ci0JcmV0dXJuIC1FTk9UU1VQUDsKLX0KLQotdm9pZCByZWdfZG1hdjFf c2V0dXBfZHNwcF92bHV0djE4KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17 Ci0Jc3RydWN0IGRybV9tc21fcGFfdmx1dCAqcGF5bG9hZCA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9o d19jcF9jZmcgKmh3X2NmZyA9IGNmZzsKLQl1MzIgb3BfbW9kZTsKLQl1MzIgKmRhdGEgPSBOVUxM OwotCWludCBpLCBqLCByYyA9IDA7Ci0KLQlyYyA9IHJlZ19kbWFfZHNwcF9jaGVjayhjdHgsIGNm ZywgVkxVVCk7Ci0JaWYgKHJjKQotCQlyZXR1cm47Ci0KLQlvcF9tb2RlID0gRFBVX1JFR19SRUFE KCZjdHgtPmh3LCBQQV9PUF9NT0RFX09GRik7Ci0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJ RFJNX0RFQlVHX0RSSVZFUigiRGlzYWJsZSB2bHV0IGZlYXR1cmVcbiIpOwotCQlEUFVfUkVHX1dS SVRFKCZjdHgtPmh3LCBQQV9MVVRWX09QTU9ERV9PRkYsIDApOwotCQlpZiAob3BfbW9kZSAmICh+ KEJJVCgyMCkpKSkKLQkJCW9wX21vZGUgPSAwOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBQ QV9PUF9NT0RFX09GRiwgb3BfbW9kZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyYyA9IHJlZ19kbWFf YmxrX3NlbGVjdChWTFVULCBkc3BwX21hcHBpbmdbY3R4LT5pZHhdLAotCQkJZHNwcF9idWZbVkxV VF1bY3R4LT5pZHhdKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJ3cml0ZSBkZWNvZGUgc2Vs ZWN0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuOwotCX0KLQotCWRhdGEgPSBremFs bG9jKFZMVVRfTEVOLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCXBh eWxvYWQgPSBod19jZmctPnBheWxvYWQ7Ci0JRFJNX0RFQlVHX0RSSVZFUigiRW5hYmxlIHZsdXQg ZmVhdHVyZSBmbGFncyAlbGx4XG4iLCBwYXlsb2FkLT5mbGFncyk7Ci0JZm9yIChpID0gMCwgaiA9 IDA7IGkgPCBBUlJBWV9TSVpFKHBheWxvYWQtPnZhbCk7IGkgKz0gMiwgaisrKQotCQlkYXRhW2pd ID0gKHBheWxvYWQtPnZhbFtpXSAmIFJFR19NQVNLKDEwKSkgfAotCQkJKChwYXlsb2FkLT52YWxb aSArIDFdICYgUkVHX01BU0soMTApKSA8PCAxNik7Ci0KLQlyYyA9IHJlZ19kbWFfd3JpdGUoUkVH X0JMS19XUklURV9TSU5HTEUsIGN0eC0+Y2FwLT5zYmxrLT52bHV0LmJhc2UsCi0JCQlWTFVUX0xF TiwgZGF0YSwKLQkJCWRzcHBfYnVmW1ZMVVRdW2N0eC0+aWR4XSwgVkxVVCwKLQkJCWRzcHBfbWFw cGluZ1tjdHgtPmlkeF0pOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoIndyaXRlIHNpbmdsZSBy ZWcgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcmMgPSByZWdf ZG1hX2tpY2tfb2ZmKFJFR19ETUFfV1JJVEUsIERNQV9DVExfUVVFVUUwLCBXUklURV9JTU1FRElB VEUsCi0JCQlkc3BwX2J1ZltWTFVUXVtjdHgtPmlkeF0sIGh3X2NmZy0+Y3RsKTsKLQlpZiAocmMp IHsKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8ga2ljayBvZmYgcmV0ICVkXG4iLCByYyk7Ci0JCWdv dG8gZXhpdDsKLQl9Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgUEFfTFVUVl9PUE1PREVfT0ZG LCBCSVQoMCkpOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIFBBX09QX01PREVfT0ZGLCBvcF9t b2RlIHwgQklUKDIwKSk7Ci0KLWV4aXQ6Ci0Ja2ZyZWUoZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbnQg ZHB1X2dhbXV0X2dldF9tb2RlX2luZm8oc3RydWN0IGRybV9tc21fM2RfZ2FtdXQgKnBheWxvYWQs Ci0JCXUzMiAqdGJsX2xlbiwgdTMyICp0Ymxfb2ZmLCB1MzIgKm9wY29kZSwgdTMyICpzY2FsZV9v ZmYpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmIChwYXlsb2FkLT5tb2RlID4gR0FNVVRfM0RfTU9E RV8xMykgewotCQlEUk1fRVJST1IoImludmFsaWQgbW9kZSAlZCIsIHBheWxvYWQtPm1vZGUpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzd2l0Y2ggKHBheWxvYWQtPm1vZGUpIHsKLQljYXNl IEdBTVVUXzNEX01PREVfMTc6Ci0JCSp0YmxfbGVuID0gR0FNVVRfM0RfTU9ERTE3X1RCTF9TWiAq IHNpemVvZih1MzIpICogMjsKLQkJKnRibF9vZmYgPSAwOwotCQkqc2NhbGVfb2ZmID0gR0FNVVRf U0NBTEVBX09GRlNFVF9PRkY7Ci0JCSpvcGNvZGUgPSBnYW11dF9tb2RlXzE3IDw8IDI7Ci0JCWJy ZWFrOwotCWNhc2UgR0FNVVRfM0RfTU9ERV81OgotCQkqdGJsX2xlbiA9IEdBTVVUXzNEX01PREU1 X1RCTF9TWiAqIHNpemVvZih1MzIpICogMjsKLQkJKnRibF9vZmYgPSBHQU1VVF9NT0RFXzVfT0ZG OwotCQkqc2NhbGVfb2ZmID0gR0FNVVRfU0NBTEVCX09GRlNFVF9PRkY7Ci0JCSpvcGNvZGUgPSBn YW11dF9tb2RlXzUgPDwgMjsKLQkJYnJlYWs7Ci0JY2FzZSBHQU1VVF8zRF9NT0RFXzEzOgotCQkq dGJsX2xlbiA9IEdBTVVUXzNEX01PREUxM19UQkxfU1ogKiBzaXplb2YodTMyKSAqIDI7Ci0JCSpv cGNvZGUgPSAoKm9wY29kZSAmIChCSVQoNCkgLSAxKSkgPj4gMjsKLQkJaWYgKCpvcGNvZGUgPT0g Z2FtdXRfbW9kZV8xM2EpCi0JCQkqb3Bjb2RlID0gZ2FtdXRfbW9kZV8xM2I7Ci0JCWVsc2UKLQkJ CSpvcGNvZGUgPSBnYW11dF9tb2RlXzEzYTsKLQkJKnRibF9vZmYgPSAoKm9wY29kZSA9PSBnYW11 dF9tb2RlXzEzYSkgPyAwIDoKLQkJCUdBTVVUX01PREVfMTNCX09GRjsKLQkJKnNjYWxlX29mZiA9 ICgqb3Bjb2RlID09IGdhbXV0X21vZGVfMTNhKSA/Ci0JCQlHQU1VVF9TQ0FMRUFfT0ZGU0VUX09G RiA6IEdBTVVUX1NDQUxFQl9PRkZTRVRfT0ZGOwotCQkqb3Bjb2RlIDw8PSAyOwotCQlicmVhazsK LQlkZWZhdWx0OgotCQlyYyA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQlpZiAocGF5bG9hZC0+ ZmxhZ3MgJiBHQU1VVF8zRF9NQVBfRU4pCi0JCSpvcGNvZGUgfD0gR0FNVVRfTUFQX0VOOwotCSpv cGNvZGUgfD0gR0FNVVRfRU47Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzcHBf M2RfZ2FtdXR2NF9vZmYoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZykKLXsKLQlz dHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcga2lja19vZmY7Ci0Jc3RydWN0IGRwdV9od19j cF9jZmcgKmh3X2NmZyA9IGNmZzsKLQl1MzIgb3BfbW9kZSA9IDA7Ci0Jc3RydWN0IGRwdV9od19y ZWdfZG1hX29wcyAqZG1hX29wczsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBk bWFfd3JpdGVfY2ZnOwotCWludCByYzsKLQotCWRtYV9vcHMgPSBkcHVfcmVnX2RtYV9nZXRfb3Bz KCk7Ci0JZG1hX29wcy0+cmVzZXRfcmVnX2RtYV9idWYoZHNwcF9idWZbR0FNVVRdW2N0eC0+aWR4 XSk7Ci0KLQlSRUdfRE1BX0lOSVRfT1BTKGRtYV93cml0ZV9jZmcsIGRzcHBfbWFwcGluZ1tjdHgt PmlkeF0sIEdBTVVULAotCQkJZHNwcF9idWZbR0FNVVRdW2N0eC0+aWR4XSk7Ci0KLQlSRUdfRE1B X1NFVFVQX09QUyhkbWFfd3JpdGVfY2ZnLCAwLCBOVUxMLCAwLCBIV19CTEtfU0VMRUNULCAwLCAw KTsKLQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChy YykgewotCQlEUk1fRVJST1IoIndyaXRlIGRlY29kZSBzZWxlY3QgZmFpbGVkIHJldCAlZFxuIiwg cmMpOwotCQlyZXR1cm47Ci0JfQotCi0JUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywK LQkJY3R4LT5jYXAtPnNibGstPmdhbXV0LmJhc2UsCi0JCSZvcF9tb2RlLCBzaXplb2Yob3BfbW9k ZSksIFJFR19TSU5HTEVfV1JJVEUsIDAsIDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9h ZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigib3Btb2RlIHdyaXRl IHNpbmdsZSByZWcgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0JUkVH X0RNQV9TRVRVUF9LSUNLT0ZGKGtpY2tfb2ZmLCBod19jZmctPmN0bCwgZHNwcF9idWZbR0FNVVRd W2N0eC0+aWR4XSwKLQkJCVJFR19ETUFfV1JJVEUsIERNQV9DVExfUVVFVUUwLCBXUklURV9JTU1F RElBVEUpOwotCXJjID0gZG1hX29wcy0+a2lja19vZmYoJmtpY2tfb2ZmKTsKLQlpZiAocmMpCi0J CURSTV9FUlJPUigiZmFpbGVkIHRvIGtpY2sgb2ZmIHJldCAlZFxuIiwgcmMpOwotfQotCi12b2lk IHJlZ19kbWF2MV9zZXR1cF9kc3BwXzNkX2dhbXV0djQoc3RydWN0IGRwdV9od19kc3BwICpjdHgs IHZvaWQgKmNmZykKLXsKLQlzdHJ1Y3QgZHJtX21zbV8zZF9nYW11dCAqcGF5bG9hZDsKLQlzdHJ1 Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcga2lja19vZmY7Ci0Jc3RydWN0IGRwdV9od19jcF9j ZmcgKmh3X2NmZyA9IGNmZzsKLQl1MzIgb3BfbW9kZSwgcmVnLCB0YmxfbGVuLCB0Ymxfb2ZmLCBz Y2FsZV9vZmYsIGk7Ci0JdTMyIHNjYWxlX3RibF9sZW4sIHNjYWxlX3RibF9vZmY7Ci0JdTMyICpz Y2FsZV9kYXRhOwotCXN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnIGRtYV93cml0ZV9j Zmc7Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQlpbnQgcmM7Ci0KLQly YyA9IHJlZ19kbWFfZHNwcF9jaGVjayhjdHgsIGNmZywgR0FNVVQpOwotCWlmIChyYykKLQkJcmV0 dXJuOwotCi0Jb3BfbW9kZSA9IERQVV9SRUdfUkVBRCgmY3R4LT5odywgY3R4LT5jYXAtPnNibGst PmdhbXV0LmJhc2UpOwotCWlmICghaHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCURSTV9ERUJVR19EUklW RVIoImRpc2FibGUgZ2FtdXQgZmVhdHVyZVxuIik7Ci0JCWRzcHBfM2RfZ2FtdXR2NF9vZmYoY3R4 LCBjZmcpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGh3X2NmZy0+bGVuICE9IHNpemVvZihzdHJ1 Y3QgZHJtX21zbV8zZF9nYW11dCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHNpemUgb2YgcGF5 bG9hZCBsZW4gJWQgZXhwICV6ZFxuIiwKLQkJCQlod19jZmctPmxlbiwgc2l6ZW9mKHN0cnVjdCBk cm1fbXNtXzNkX2dhbXV0KSk7Ci0JCXJldHVybjsKLQl9Ci0JcGF5bG9hZCA9IGh3X2NmZy0+cGF5 bG9hZDsKLQlyYyA9IGRwdV9nYW11dF9nZXRfbW9kZV9pbmZvKHBheWxvYWQsICZ0YmxfbGVuLCAm dGJsX29mZiwgJm9wX21vZGUsCi0JCQkmc2NhbGVfb2ZmKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VS Uk9SKCJpbnZhbGlkIG1vZGUgaW5mbyByYyAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0J ZG1hX29wcyA9IGRwdV9yZWdfZG1hX2dldF9vcHMoKTsKLQlkbWFfb3BzLT5yZXNldF9yZWdfZG1h X2J1Zihkc3BwX2J1ZltHQU1VVF1bY3R4LT5pZHhdKTsKLQotCVJFR19ETUFfSU5JVF9PUFMoZG1h X3dyaXRlX2NmZywgZHNwcF9tYXBwaW5nW2N0eC0+aWR4XSwgR0FNVVQsCi0JCQlkc3BwX2J1ZltH QU1VVF1bY3R4LT5pZHhdKTsKLQotCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsIDAs IE5VTEwsIDAsIEhXX0JMS19TRUxFQ1QsIDAsIDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5 bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigid3JpdGUgZGVj b2RlIHNlbGVjdCBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0JZm9yIChp ID0gMDsgaSA8IEdBTVVUXzNEX1RCTF9OVU07IGkrKykgewotCQlyZWcgPSBHQU1VVF9UQUJMRTBf U0VMIDw8IGk7Ci0JCXJlZyB8PSAoKHRibF9vZmYpICYgKEJJVCgxMSkgLSAxKSk7Ci0JCVJFR19E TUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsCi0JCQljdHgtPmNhcC0+c2Jsay0+Z2FtdXQuYmFz ZSArIEdBTVVUX1RBQkxFX1NFTF9PRkYsCi0JCQkmcmVnLCBzaXplb2YocmVnKSwgUkVHX1NJTkdM RV9XUklURSwgMCwgMCk7Ci0JCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRl X2NmZyk7Ci0JCWlmIChyYykgewotCQkJRFJNX0VSUk9SKCJ3cml0ZSB0Ymwgc2VsIHJlZyBmYWls ZWQgcmV0ICVkXG4iLCByYyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJUkVHX0RNQV9TRVRVUF9PUFMo ZG1hX3dyaXRlX2NmZywKLQkJICAgIGN0eC0+Y2FwLT5zYmxrLT5nYW11dC5iYXNlICsgR0FNVVRf TE9XRVJfQ09MT1JfT0ZGLAotCQkgICAgJnBheWxvYWQtPmNvbFtpXVswXS5jMl9jMSwgdGJsX2xl biwKLQkJICAgIFJFR19CTEtfV1JJVEVfTVVMVElQTEUsIDIsIDApOwotCQlyYyA9IGRtYV9vcHMt PnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCQlpZiAocmMpIHsKLQkJCURSTV9FUlJP Uigid3JpdGUgY29sb3IgcmVnIGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJCXJldHVybjsKLQkJ fQotCX0KLQotCWlmIChvcF9tb2RlICYgR0FNVVRfTUFQX0VOKSB7Ci0JCWlmIChzY2FsZV9vZmYg PT0gR0FNVVRfU0NBTEVBX09GRlNFVF9PRkYpCi0JCQlzY2FsZV90YmxfbGVuID0gR0FNVVRfU0NB TEVfT0ZGX0xFTjsKLQkJZWxzZQotCQkJc2NhbGVfdGJsX2xlbiA9IEdBTVVUX1NDQUxFX09GRl9M RU5fMTI7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEdBTVVUXzNEX1NDQUxFX09GRl9UQkxfTlVNOyBp KyspIHsKLQkJCXNjYWxlX3RibF9vZmYgPSBjdHgtPmNhcC0+c2Jsay0+Z2FtdXQuYmFzZSArIHNj YWxlX29mZiArCi0JCQkJCShpICogc2NhbGVfdGJsX2xlbik7Ci0JCQlzY2FsZV9kYXRhID0gJnBh eWxvYWQtPnNjYWxlX29mZltpXVswXTsKLQkJCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9j ZmcsIHNjYWxlX3RibF9vZmYsCi0JCQkJCXNjYWxlX2RhdGEsIHNjYWxlX3RibF9sZW4sCi0JCQkJ CVJFR19CTEtfV1JJVEVfU0lOR0xFLCAwLCAwKTsKLQkJCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5 bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JCQlpZiAocmMpIHsKLQkJCQlEUk1fRVJST1IoIndyaXRl IHNjYWxlL29mZiByZWcgZmFpbGVkIHJldCAlZFxuIiwKLQkJCQkJCXJjKTsKLQkJCQlyZXR1cm47 Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVfY2ZnLAotCQlj dHgtPmNhcC0+c2Jsay0+Z2FtdXQuYmFzZSwKLQkJJm9wX21vZGUsIHNpemVvZihvcF9tb2RlKSwg UkVHX1NJTkdMRV9XUklURSwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZk bWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJvcG1vZGUgd3JpdGUgc2lu Z2xlIHJlZyBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlSRUdfRE1B X1NFVFVQX0tJQ0tPRkYoa2lja19vZmYsIGh3X2NmZy0+Y3RsLCBkc3BwX2J1ZltHQU1VVF1bY3R4 LT5pZHhdLAotCQkJUkVHX0RNQV9XUklURSwgRE1BX0NUTF9RVUVVRTAsIFdSSVRFX0lNTUVESUFU RSk7Ci0JcmMgPSBkbWFfb3BzLT5raWNrX29mZigma2lja19vZmYpOwotCWlmIChyYykKLQkJRFJN X0VSUk9SKCJmYWlsZWQgdG8ga2ljayBvZmYgcmV0ICVkXG4iLCByYyk7Ci19Ci0KLXZvaWQgcmVn X2RtYXYxX3NldHVwX2RzcHBfZ2N2MTgoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNm ZykKLXsKLQlzdHJ1Y3QgZHJtX21zbV9wZ2NfbHV0ICpsdXRfY2ZnOwotCXN0cnVjdCBkcHVfaHdf cmVnX2RtYV9vcHMgKmRtYV9vcHM7Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX2tpY2tvZmZfY2ZnIGtp Y2tfb2ZmOwotCXN0cnVjdCBkcHVfaHdfY3BfY2ZnICpod19jZmcgPSBjZmc7Ci0Jc3RydWN0IGRw dV9yZWdfZG1hX3NldHVwX29wc19jZmcgZG1hX3dyaXRlX2NmZzsKLQlpbnQgcmMsIGkgPSAwOwot CXUzMiByZWc7Ci0KLQlyYyA9IHJlZ19kbWFfZHNwcF9jaGVjayhjdHgsIGNmZywgR0MpOwotCWlm IChyYykKLQkJcmV0dXJuOwotCi0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RFQlVH X0RSSVZFUigiZGlzYWJsZSBwZ2MgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+ aHcsIGN0eC0+Y2FwLT5zYmxrLT5nYy5iYXNlLCAwKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICho d19jZmctPmxlbiAhPSBzaXplb2Yoc3RydWN0IGRybV9tc21fcGdjX2x1dCkpIHsKLQkJRFJNX0VS Uk9SKCJpbnZhbGlkIHNpemUgb2YgcGF5bG9hZCBsZW4gJWQgZXhwICV6ZFxuIiwKLQkJCQlod19j ZmctPmxlbiwgc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BnY19sdXQpKTsKLQkJcmV0dXJuOwotCX0K LQlsdXRfY2ZnID0gaHdfY2ZnLT5wYXlsb2FkOwotCi0JZG1hX29wcyA9IGRwdV9yZWdfZG1hX2dl dF9vcHMoKTsKLQlkbWFfb3BzLT5yZXNldF9yZWdfZG1hX2J1Zihkc3BwX2J1ZltHQ11bY3R4LT5p ZHhdKTsKLQotCVJFR19ETUFfSU5JVF9PUFMoZG1hX3dyaXRlX2NmZywgZHNwcF9tYXBwaW5nW2N0 eC0+aWR4XSwgR0MsCi0JCQlkc3BwX2J1ZltHQ11bY3R4LT5pZHhdKTsKLQotCVJFR19ETUFfU0VU VVBfT1BTKGRtYV93cml0ZV9jZmcsIDAsIE5VTEwsIDAsIEhXX0JMS19TRUxFQ1QsIDAsIDApOwot CXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7 Ci0JCURSTV9FUlJPUigid3JpdGUgZGVjb2RlIHNlbGVjdCBmYWlsZWQgcmV0ICVkXG4iLCByYyk7 Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgR0NfVEJMX05VTTsgaSsrKSB7Ci0J CXJlZyA9IDA7Ci0JCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsCi0JCQljdHgtPmNh cC0+c2Jsay0+Z2MuYmFzZSArIEdDX0MwX0lOREVYX09GRiArCi0JCQkoaSAqIHNpemVvZih1MzIp ICogMiksCi0JCQkmcmVnLCBzaXplb2YocmVnKSwgUkVHX1NJTkdMRV9XUklURSwgMCwgMCk7Ci0J CXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JCWlmIChyYykg ewotCQkJRFJNX0VSUk9SKCJpbmRleCBpbml0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJCXJl dHVybjsKLQkJfQotCi0JCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsCi0JCQljdHgt PmNhcC0+c2Jsay0+Z2MuYmFzZSArIEdDX0MwX09GRiArCi0JCQkoaSAqIHNpemVvZih1MzIpICog MiksCi0JCQlsdXRfY2ZnLT5jMCArIChBUlJBWV9TSVpFKGx1dF9jZmctPmMwKSAqIGkpLAotCQkJ UEdDX1RCTF9MRU4gKiBzaXplb2YodTMyKSwKLQkJCVJFR19CTEtfV1JJVEVfSU5DLCAwLCAwKTsK LQkJcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQkJaWYgKHJj KSB7Ci0JCQlEUk1fRVJST1IoImx1dCB3cml0ZSBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCQly ZXR1cm47Ci0JCX0KLQl9Ci0KLQlyZWcgPSBCSVQoMCk7Ci0JUkVHX0RNQV9TRVRVUF9PUFMoZG1h X3dyaXRlX2NmZywKLQkJY3R4LT5jYXAtPnNibGstPmdjLmJhc2UgKyBHQ19MVVRfU1dBUF9PRkYs Ci0JCSZyZWcsIHNpemVvZihyZWcpLCBSRUdfU0lOR0xFX1dSSVRFLCAwLCAwKTsKLQlyYyA9IGRt YV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykgewotCQlEUk1f RVJST1IoInNldHRpbmcgc3dhcCBvZmZzZXQgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1 cm47Ci0JfQotCi0JcmVnID0gR0NfRU4gfCAoKGx1dF9jZmctPmZsYWdzICYgUEdDXzhCX1JPVU5E KSA/IEdDXzhCX1JPVU5EX0VOIDogMCk7Ci0JUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2Nm ZywKLQkJY3R4LT5jYXAtPnNibGstPmdjLmJhc2UsCi0JCSZyZWcsIHNpemVvZihyZWcpLCBSRUdf U0lOR0xFX1dSSVRFLCAwLCAwKTsKLQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93 cml0ZV9jZmcpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoImVuYWJsaW5nIGdhbW1hIGNvcnJl Y3Rpb24gZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0JUkVHX0RNQV9T RVRVUF9LSUNLT0ZGKGtpY2tfb2ZmLCBod19jZmctPmN0bCwgZHNwcF9idWZbR0NdW2N0eC0+aWR4 XSwKLQkJCVJFR19ETUFfV1JJVEUsIERNQV9DVExfUVVFVUUwLCBXUklURV9JTU1FRElBVEUpOwot CXJjID0gZG1hX29wcy0+a2lja19vZmYoJmtpY2tfb2ZmKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8ga2ljayBvZmYgcmV0ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci19 Ci0KLXN0YXRpYyB2b2lkIF9kc3BwX2lnY3YzMV9vZmYoc3RydWN0IGRwdV9od19kc3BwICpjdHgs IHZvaWQgKmNmZykKLXsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcga2lja19vZmY7 Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3X2NmZyA9IGNmZzsKLQlzdHJ1Y3QgZHB1X2h3X3Jl Z19kbWFfb3BzICpkbWFfb3BzOwotCXN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnIGRt YV93cml0ZV9jZmc7Ci0JaW50IHJjOwotCXUzMiByZWc7Ci0KLQlkbWFfb3BzID0gZHB1X3JlZ19k bWFfZ2V0X29wcygpOwotCWRtYV9vcHMtPnJlc2V0X3JlZ19kbWFfYnVmKGRzcHBfYnVmW0lHQ11b Y3R4LT5pZHhdKTsKLQotCVJFR19ETUFfSU5JVF9PUFMoZG1hX3dyaXRlX2NmZywgZHNwcF9tYXBw aW5nW2N0eC0+aWR4XSwgSUdDLAotCQlkc3BwX2J1ZltJR0NdW2N0eC0+aWR4XSk7Ci0KLQlSRUdf RE1BX1NFVFVQX09QUyhkbWFfd3JpdGVfY2ZnLCAwLCBOVUxMLCAwLCBIV19CTEtfU0VMRUNULCAw LCAwKTsKLQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlm IChyYykgewotCQlEUk1fRVJST1IoIndyaXRlIGRlY29kZSBzZWxlY3QgZmFpbGVkIHJldCAlZFxu IiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0JcmVnID0gSUdDX0RJUzsKLQlSRUdfRE1BX1NFVFVQ X09QUyhkbWFfd3JpdGVfY2ZnLAotCQljdHgtPmNhcC0+c2Jsay0+aWdjLmJhc2UgKyBJR0NfT1BN T0RFX09GRiwKLQkJJnJlZywgc2l6ZW9mKHJlZyksIFJFR19TSU5HTEVfV1JJVEUsIDAsIDApOwot CXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7 Ci0JCURSTV9FUlJPUigic2V0dGluZyBvcGNvZGUgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQly ZXR1cm47Ci0JfQotCi0JUkVHX0RNQV9TRVRVUF9LSUNLT0ZGKGtpY2tfb2ZmLCBod19jZmctPmN0 bCwgZHNwcF9idWZbSUdDXVtjdHgtPmlkeF0sCi0JCQlSRUdfRE1BX1dSSVRFLCBETUFfQ1RMX1FV RVVFMCwgV1JJVEVfSU1NRURJQVRFKTsKLQlyYyA9IGRtYV9vcHMtPmtpY2tfb2ZmKCZraWNrX29m Zik7Ci0JaWYgKHJjKQotCQlEUk1fRVJST1IoImZhaWxlZCB0byBraWNrIG9mZiByZXQgJWRcbiIs IHJjKTsKLX0KLQotdm9pZCByZWdfZG1hdjFfc2V0dXBfZHNwcF9pZ2N2MzEoc3RydWN0IGRwdV9o d19kc3BwICpjdHgsIHZvaWQgKmNmZykKLXsKLQlzdHJ1Y3QgZHJtX21zbV9pZ2NfbHV0ICpsdXRf Y2ZnOwotCXN0cnVjdCBkcHVfaHdfcmVnX2RtYV9vcHMgKmRtYV9vcHM7Ci0Jc3RydWN0IGRwdV9y ZWdfZG1hX2tpY2tvZmZfY2ZnIGtpY2tfb2ZmOwotCXN0cnVjdCBkcHVfaHdfY3BfY2ZnICpod19j ZmcgPSBjZmc7Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgZG1hX3dyaXRlX2Nm ZzsKLQlpbnQgcmMsIGkgPSAwLCBqID0gMDsKLQl1MzIgKmFkZHIgPSBOVUxMOwotCXUzMiBvZmZz ZXQgPSAwOwotCXUzMiByZWc7Ci0KLQlyYyA9IHJlZ19kbWFfZHNwcF9jaGVjayhjdHgsIGNmZywg SUdDKTsKLQlpZiAocmMpCi0JCXJldHVybjsKLQotCWlmICghaHdfY2ZnLT5wYXlsb2FkKSB7Ci0J CURSTV9ERUJVR19EUklWRVIoImRpc2FibGUgaWdjIGZlYXR1cmVcbiIpOwotCQlfZHNwcF9pZ2N2 MzFfb2ZmKGN0eCwgY2ZnKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChod19jZmctPmxlbiAhPSBz aXplb2Yoc3RydWN0IGRybV9tc21faWdjX2x1dCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHNp emUgb2YgcGF5bG9hZCBsZW4gJWQgZXhwICV6ZFxuIiwKLQkJCQlod19jZmctPmxlbiwgc2l6ZW9m KHN0cnVjdCBkcm1fbXNtX2lnY19sdXQpKTsKLQkJcmV0dXJuOwotCX0KLQotCWx1dF9jZmcgPSBo d19jZmctPnBheWxvYWQ7Ci0KLQlkbWFfb3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCWRt YV9vcHMtPnJlc2V0X3JlZ19kbWFfYnVmKGRzcHBfYnVmW0lHQ11bY3R4LT5pZHhdKTsKLQotCVJF R19ETUFfSU5JVF9PUFMoZG1hX3dyaXRlX2NmZywgRFNQUF9JR0MsIElHQywgZHNwcF9idWZbSUdD XVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywgMCwgTlVM TCwgMCwgSFdfQkxLX1NFTEVDVCwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2Fk KCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJ3cml0ZSBkZWNvZGUg c2VsZWN0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoaSA9 IDA7IGkgPCBJR0NfVEJMX05VTTsgaSsrKSB7Ci0JCWFkZHIgPSBsdXRfY2ZnLT5jMCArIChpICog QVJSQVlfU0laRShsdXRfY2ZnLT5jMCkpOwotCQlvZmZzZXQgPSBJR0NfQzBfT0ZGICsgKGkgKiBz aXplb2YodTMyKSk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IElHQ19UQkxfTEVOOyBqKyspIHsKLQkJ CWFkZHJbal0gJj0gSUdDX0RBVEFfTUFTSzsKLQkJCWFkZHJbal0gfD0gSUdDX0RTUFBfU0VMX01B U0soY3R4LT5pZHggLSAxKTsKLQkJCWlmIChqID09IDApCi0JCQkJYWRkcltqXSB8PSBJR0NfSU5E RVhfVVBEQVRFOwotCQl9Ci0KLQkJUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywgb2Zm c2V0LCBhZGRyLAotCQkJSUdDX1RCTF9MRU4gKiBzaXplb2YodTMyKSwKLQkJCVJFR19CTEtfV1JJ VEVfSU5DLCAwLCAwKTsKLQkJcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVf Y2ZnKTsKLQkJaWYgKHJjKSB7Ci0JCQlEUk1fRVJST1IoImx1dCB3cml0ZSBmYWlsZWQgcmV0ICVk XG4iLCByYyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlSRUdfRE1BX0lOSVRfT1BTKGRtYV93 cml0ZV9jZmcsIGRzcHBfbWFwcGluZ1tjdHgtPmlkeF0sIElHQywKLQkJZHNwcF9idWZbSUdDXVtj dHgtPmlkeF0pOwotCi0JUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywgMCwgTlVMTCwg MCwgSFdfQkxLX1NFTEVDVCwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZk bWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJ3cml0ZSBkZWNvZGUgc2Vs ZWN0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChsdXRfY2Zn LT5mbGFncyAmIElHQ19ESVRIRVJfRU5BQkxFKSB7Ci0JCXJlZyA9IGx1dF9jZmctPnN0cmVuZ3Ro ICYgSUdDX0RJVEhFUl9EQVRBX01BU0s7Ci0JCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9j ZmcsCi0JCQljdHgtPmNhcC0+c2Jsay0+aWdjLmJhc2UgKyBJR0NfRElUSEVSX09GRiwKLQkJCSZy ZWcsIHNpemVvZihyZWcpLCBSRUdfU0lOR0xFX1dSSVRFLCAwLCAwKTsKLQkJcmMgPSBkbWFfb3Bz LT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQkJaWYgKHJjKSB7Ci0JCQlEUk1fRVJS T1IoImRpdGhlciBzdHJlbmd0aCBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCQlyZXR1cm47Ci0J CX0KLQl9Ci0KLQlyZWcgPSBJR0NfRU47Ci0JUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2Nm ZywKLQkJY3R4LT5jYXAtPnNibGstPmlnYy5iYXNlICsgSUdDX09QTU9ERV9PRkYsCi0JCSZyZWcs IHNpemVvZihyZWcpLCBSRUdfU0lOR0xFX1dSSVRFLCAwLCAwKTsKLQlyYyA9IGRtYV9vcHMtPnNl dHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoInNl dHRpbmcgb3Bjb2RlIGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuOwotCX0KLQotCVJF R19ETUFfU0VUVVBfS0lDS09GRihraWNrX29mZiwgaHdfY2ZnLT5jdGwsIGRzcHBfYnVmW0lHQ11b Y3R4LT5pZHhdLAotCQkJUkVHX0RNQV9XUklURSwgRE1BX0NUTF9RVUVVRTAsIFdSSVRFX0lNTUVE SUFURSk7Ci0JcmMgPSBkbWFfb3BzLT5raWNrX29mZigma2lja19vZmYpOwotCWlmIChyYykKLQkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8ga2ljayBvZmYgcmV0ICVkXG4iLCByYyk7Ci19Ci0KLXN0YXRp YyB2b2lkIF9kc3BwX3BjY3Y0X29mZihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2Zn KQotewotCXN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyBraWNrX29mZjsKLQlzdHJ1Y3Qg ZHB1X2h3X2NwX2NmZyAqaHdfY2ZnID0gY2ZnOwotCXN0cnVjdCBkcHVfaHdfcmVnX2RtYV9vcHMg KmRtYV9vcHM7Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgZG1hX3dyaXRlX2Nm ZzsKLQlpbnQgcmM7Ci0JdTMyIHJlZzsKLQotCWRtYV9vcHMgPSBkcHVfcmVnX2RtYV9nZXRfb3Bz KCk7Ci0JZG1hX29wcy0+cmVzZXRfcmVnX2RtYV9idWYoZHNwcF9idWZbUENDXVtjdHgtPmlkeF0p OwotCi0JUkVHX0RNQV9JTklUX09QUyhkbWFfd3JpdGVfY2ZnLCBkc3BwX21hcHBpbmdbY3R4LT5p ZHhdLCBQQ0MsCi0JCWRzcHBfYnVmW1BDQ11bY3R4LT5pZHhdKTsKLQotCVJFR19ETUFfU0VUVVBf T1BTKGRtYV93cml0ZV9jZmcsIDAsIE5VTEwsIDAsIEhXX0JMS19TRUxFQ1QsIDAsIDApOwotCXJj ID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7Ci0J CURSTV9FUlJPUigid3JpdGUgZGVjb2RlIHNlbGVjdCBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0J CXJldHVybjsKLQl9Ci0KLQlyZWcgPSBQQ0NfRElTOwotCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93 cml0ZV9jZmcsCi0JCWN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSwKLQkJJnJlZywgc2l6ZW9mKHJl ZyksIFJFR19TSU5HTEVfV1JJVEUsIDAsIDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9h ZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigic2V0dGluZyBvcGNv ZGUgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0JUkVHX0RNQV9TRVRV UF9LSUNLT0ZGKGtpY2tfb2ZmLCBod19jZmctPmN0bCwgZHNwcF9idWZbUENDXVtjdHgtPmlkeF0s Ci0JCQlSRUdfRE1BX1dSSVRFLCBETUFfQ1RMX1FVRVVFMCwgV1JJVEVfSU1NRURJQVRFKTsKLQly YyA9IGRtYV9vcHMtPmtpY2tfb2ZmKCZraWNrX29mZik7Ci0JaWYgKHJjKQotCQlEUk1fRVJST1Io ImZhaWxlZCB0byBraWNrIG9mZiByZXQgJWRcbiIsIHJjKTsKLX0KLQotdm9pZCByZWdfZG1hdjFf c2V0dXBfZHNwcF9wY2N2NChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKQotewot CXN0cnVjdCBkcHVfaHdfcmVnX2RtYV9vcHMgKmRtYV9vcHM7Ci0Jc3RydWN0IGRwdV9yZWdfZG1h X2tpY2tvZmZfY2ZnIGtpY2tfb2ZmOwotCXN0cnVjdCBkcHVfaHdfY3BfY2ZnICpod19jZmcgPSBj Zmc7Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgZG1hX3dyaXRlX2NmZzsKLQlz dHJ1Y3QgZHJtX21zbV9wY2MgKnBjY19jZmc7Ci0Jc3RydWN0IGRybV9tc21fcGNjX2NvZWZmICpj b2VmZnMgPSBOVUxMOwotCXUzMiAqZGF0YSA9IE5VTEw7Ci0JaW50IHJjLCBpID0gMDsKLQl1MzIg cmVnID0gMDsKLQotCXJjID0gcmVnX2RtYV9kc3BwX2NoZWNrKGN0eCwgY2ZnLCBQQ0MpOwotCWlm IChyYykKLQkJcmV0dXJuOwotCi0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RFQlVH X0RSSVZFUigiZGlzYWJsZSBwY2MgZmVhdHVyZVxuIik7Ci0JCV9kc3BwX3BjY3Y0X29mZihjdHgs IGNmZyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaHdfY2ZnLT5sZW4gIT0gc2l6ZW9mKHN0cnVj dCBkcm1fbXNtX3BjYykpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHNpemUgb2YgcGF5bG9hZCBs ZW4gJWQgZXhwICV6ZFxuIiwKLQkJCQlod19jZmctPmxlbiwgc2l6ZW9mKHN0cnVjdCBkcm1fbXNt X3BjYykpOwotCQlyZXR1cm47Ci0JfQotCi0JcGNjX2NmZyA9IGh3X2NmZy0+cGF5bG9hZDsKLQot CWRtYV9vcHMgPSBkcHVfcmVnX2RtYV9nZXRfb3BzKCk7Ci0JZG1hX29wcy0+cmVzZXRfcmVnX2Rt YV9idWYoZHNwcF9idWZbUENDXVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9JTklUX09QUyhkbWFf d3JpdGVfY2ZnLCBkc3BwX21hcHBpbmdbY3R4LT5pZHhdLAotCQlQQ0MsIGRzcHBfYnVmW1BDQ11b Y3R4LT5pZHhdKTsKLQotCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsIDAsIE5VTEws IDAsIEhXX0JMS19TRUxFQ1QsIDAsIDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgm ZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigid3JpdGUgZGVjb2RlIHNl bGVjdCBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkYXRhID0ga3ph bGxvYyhQQ0NfTEVOLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybjsKLQotCWZv ciAoaSA9IDA7IGkgPCBQQ0NfTlVNX1BMQU5FUzsgaSsrKSB7Ci0JCXN3aXRjaCAoaSkgewotCQlj YXNlIDA6Ci0JCQljb2VmZnMgPSAmcGNjX2NmZy0+cjsKLQkJCWRhdGFbaSArIDI0XSA9IHBjY19j ZmctPnJfcnI7Ci0JCQlkYXRhW2kgKyAyN10gPSBwY2NfY2ZnLT5yX2dnOwotCQkJZGF0YVtpICsg MzBdID0gcGNjX2NmZy0+cl9iYjsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQljb2VmZnMgPSAm cGNjX2NmZy0+ZzsKLQkJCWRhdGFbaSArIDI0XSA9IHBjY19jZmctPmdfcnI7Ci0JCQlkYXRhW2kg KyAyN10gPSBwY2NfY2ZnLT5nX2dnOwotCQkJZGF0YVtpICsgMzBdID0gcGNjX2NmZy0+Z19iYjsK LQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQljb2VmZnMgPSAmcGNjX2NmZy0+YjsKLQkJCWRhdGFb aSArIDI0XSA9IHBjY19jZmctPmJfcnI7Ci0JCQlkYXRhW2kgKyAyN10gPSBwY2NfY2ZnLT5iX2dn OwotCQkJZGF0YVtpICsgMzBdID0gcGNjX2NmZy0+Yl9iYjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0 OgotCQkJRFJNX0VSUk9SKCJpbnZhbGlkIHBjYyBwbGFuZTogJWRcbiIsIGkpOwotCQkJZ290byBl eGl0OwotCQl9Ci0KLQkJZGF0YVtpXSA9IGNvZWZmcy0+YzsKLQkJZGF0YVtpICsgM10gPSBjb2Vm ZnMtPnI7Ci0JCWRhdGFbaSArIDZdID0gY29lZmZzLT5nOwotCQlkYXRhW2kgKyA5XSA9IGNvZWZm cy0+YjsKLQkJZGF0YVtpICsgMTJdID0gY29lZmZzLT5yZzsKLQkJZGF0YVtpICsgMTVdID0gY29l ZmZzLT5yYjsKLQkJZGF0YVtpICsgMThdID0gY29lZmZzLT5nYjsKLQkJZGF0YVtpICsgMjFdID0g Y29lZmZzLT5yZ2I7Ci0JfQotCi0JUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywKLQkJ Y3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0NfT0ZGLAotCQlkYXRhLCBQQ0NfTEVOLAot CQlSRUdfQkxLX1dSSVRFX1NJTkdMRSwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXls b2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJ3cml0ZSBwY2Mg bHV0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJZ290byBleGl0OwotCX0KLQotCXJlZyA9IFBD Q19FTjsKLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVfY2ZnLAotCQljdHgtPmNhcC0+c2Js ay0+cGNjLmJhc2UsCi0JCSZyZWcsIHNpemVvZihyZWcpLCBSRUdfU0lOR0xFX1dSSVRFLCAwLCAw KTsKLQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChy YykgewotCQlEUk1fRVJST1IoInNldHRpbmcgb3Bjb2RlIGZhaWxlZCByZXQgJWRcbiIsIHJjKTsK LQkJZ290byBleGl0OwotCX0KLQotCVJFR19ETUFfU0VUVVBfS0lDS09GRihraWNrX29mZiwgaHdf Y2ZnLT5jdGwsIGRzcHBfYnVmW1BDQ11bY3R4LT5pZHhdLAotCQkJUkVHX0RNQV9XUklURSwgRE1B X0NUTF9RVUVVRTAsIFdSSVRFX0lNTUVESUFURSk7Ci0JcmMgPSBkbWFfb3BzLT5raWNrX29mZigm a2lja19vZmYpOwotCWlmIChyYykKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8ga2ljayBvZmYgcmV0 ICVkXG4iLCByYyk7Ci0KLWV4aXQ6Ci0Ja2ZyZWUoZGF0YSk7Ci19Ci0KLWludCByZWdfZG1hdjFf ZGVpbml0X2RzcHBfb3BzKGVudW0gZHB1X2RzcHAgaWR4KQotewotCWludCBpOwotCXN0cnVjdCBk cHVfaHdfcmVnX2RtYV9vcHMgKmRtYV9vcHM7Ci0KLQlkbWFfb3BzID0gZHB1X3JlZ19kbWFfZ2V0 X29wcygpOwotCWlmIChJU19FUlJfT1JfTlVMTChkbWFfb3BzKSkKLQkJcmV0dXJuIC1FTk9UU1VQ UDsKLQotCWlmIChpZHggPj0gRFNQUF9NQVgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGRzcHAg aWR4ICV4IG1heCAleGRcbiIsIGlkeCwgRFNQUF9NQVgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUkVHX0RNQV9GRUFUVVJFU19NQVg7IGkrKykgewotCQlpZiAo IWRzcHBfYnVmW2ldW2lkeF0pCi0JCQljb250aW51ZTsKLQkJZG1hX29wcy0+ZGVhbGxvY19yZWdf ZG1hKGRzcHBfYnVmW2ldW2lkeF0pOwotCQlkc3BwX2J1ZltpXVtpZHhdID0gTlVMTDsKLQl9Ci0J cmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfcmVnX2RtYV92MV9jb2xvcl9wcm9jLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfcmVnX2RtYV92MV9jb2xvcl9wcm9jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDVjMzMzOTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X3JlZ19kbWFfdjFfY29sb3JfcHJvYy5oCisrKyAvZGV2L251bGwKQEAgLTEs NzUgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh bmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX0RQVV9I V19SRUdfRE1BX1YxX0NPTE9SX1BST0NfSAotI2RlZmluZSBfRFBVX0hXX1JFR19ETUFfVjFfQ09M T1JfUFJPQ19ICi0KLSNpbmNsdWRlICJkcHVfaHdfdXRpbC5oIgotI2luY2x1ZGUgImRwdV9od19j YXRhbG9nLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2RzcHAuaCIKLQotLyoqCi0gKiByZWdfZG1hdjFf aW5pdF9kc3BwX29wX3Y0KCkgLSBpbml0aWFsaXplIHRoZSBkc3BwIGZlYXR1cmUgb3AgZm9yIGRw dSB2NAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgcmVnIGRtYSB2MS4K LSAqIEBmZWF0dXJlOiBkc3BwIGZlYXR1cmUKLSAqIGlkeDogZHNwcCBpZHgKLSAqLwotaW50IHJl Z19kbWF2MV9pbml0X2RzcHBfb3BfdjQoaW50IGZlYXR1cmUsIGVudW0gZHB1X2RzcHAgaWR4KTsK LQotLyoqCi0gKiByZWdfZG1hX2luaXRfc3NwcF9vcF92NCgpIC0gaW5pdGlhbGl6ZSB0aGUgc3Nw cCBmZWF0dXJlIG9wIGZvciBkcHUgdjQKLSAqIEBmZWF0dXJlOiBzc3BwIGZlYXR1cmUKLSAqIEBp ZHg6IHNzcHAgaWR4Ci0gKi8KLWludCByZWdfZG1hdjFfaW5pdF9zc3BwX29wX3Y0KGludCBmZWF0 dXJlLCBlbnVtIGRwdV9zc3BwIGlkeCk7Ci0KLS8qKgotICogcmVnX2RtYXYxX3NldHVwX2RzcHBf dmx1dHYxOCgpIC0gdmx1dCB2MTggaW1wbGVtZW50YXRpb24gdXNpbmcgcmVnIGRtYSB2MS4KLSAq IEBjdHg6IGRzcHAgY3R4IGluZm8KLSAqIEBjZmc6IHBvaW50ZXIgdG8gc3RydWN0IGRwdV9od19j cF9jZmcKLSAqLwotdm9pZCByZWdfZG1hdjFfc2V0dXBfZHNwcF92bHV0djE4KHN0cnVjdCBkcHVf aHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0vKioKLSAqIHJlZ19kbWF2MV9zZXR1cF8zZF9n YW11dHY0KCkgLSBnYW11dCB2NCBpbXBsZW1lbnRhdGlvbiB1c2luZyByZWcgZG1hIHYxLgotICog QGN0eDogZHNwcCBjdHggaW5mbwotICogQGNmZzogcG9pbnRlciB0byBzdHJ1Y3QgZHB1X2h3X2Nw X2NmZwotICovCi12b2lkIHJlZ19kbWF2MV9zZXR1cF9kc3BwXzNkX2dhbXV0djQoc3RydWN0IGRw dV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogcmVnX2RtYXYxX3NldHVwX2Rz cHBfZ2N2MTgoKSAtIGdjIHYxOCBpbXBsZW1lbnRhdGlvbiB1c2luZyByZWcgZG1hIHYxLgotICog QGN0eDogZHNwcCBjdHggaW5mbwotICogQGNmZzogcG9pbnRlciB0byBzdHJ1Y3QgZHB1X2h3X2Nw X2NmZwotICovCi12b2lkIHJlZ19kbWF2MV9zZXR1cF9kc3BwX2djdjE4KHN0cnVjdCBkcHVfaHdf ZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0vKioKLSAqIHJlZ19kbWF2MV9zZXR1cF9kc3BwX2ln Y3YzMSgpIC0gaWdjIHYzMSBpbXBsZW1lbnRhdGlvbiB1c2luZyByZWcgZG1hIHYxLgotICogQGN0 eDogZHNwcCBjdHggaW5mbwotICogQGNmZzogcG9pbnRlciB0byBzdHJ1Y3QgZHB1X2h3X2NwX2Nm ZwotICovCi12b2lkIHJlZ19kbWF2MV9zZXR1cF9kc3BwX2lnY3YzMShzdHJ1Y3QgZHB1X2h3X2Rz cHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoqCi0gKiByZWdfZG1hdjFfc2V0dXBfZHNwcF9wY2N2 NCgpIC0gcGNjIHY0IGltcGxlbWVudGF0aW9uIHVzaW5nIHJlZyBkbWEgdjEuCi0gKiBAY3R4OiBk c3BwIGN0eCBpbmZvCi0gKiBAY2ZnOiBwb2ludGVyIHRvIHN0cnVjdCBkcHVfaHdfY3BfY2ZnCi0g Ki8KLXZvaWQgcmVnX2RtYXYxX3NldHVwX2RzcHBfcGNjdjQoc3RydWN0IGRwdV9od19kc3BwICpj dHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogcmVnX2RtYXYxX2RlaW5pdF9kc3BwX29wcygpIC0g ZGVpbml0aWFsaXplIHRoZSBkc3BwIGZlYXR1cmUgb3AgZm9yIGRwdSB2NAotICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2hpY2ggd2VyZSBpbml0aWFsaXplZC4KLSAqIEBpZHg6IGRz cHAgaWR4Ci0gKi8KLWludCByZWdfZG1hdjFfZGVpbml0X2RzcHBfb3BzKGVudW0gZHB1X2RzcHAg aWR4KTsKLSNlbmRpZiAvKiBfRFBVX0hXX1JFR19ETUFfVjFfQ09MT1JfUFJPQ19IICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuYwppbmRleCBlMDJhOTM4Li42 NjQwOTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf c3NwcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmMK QEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgogI2luY2x1ZGUg ImRwdV9od19sbS5oIgogI2luY2x1ZGUgImRwdV9od19zc3BwLmgiCi0jaW5jbHVkZSAiZHB1X2h3 X2NvbG9yX3Byb2Nlc3NpbmcuaCIKICNpbmNsdWRlICJkcHVfZGJnLmgiCiAjaW5jbHVkZSAiZHB1 X2ttcy5oIgogCkBAIC0xNjUsMTUgKzE2NCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9zc3BwX3N1 YmJsa19vZmZzZXQoc3RydWN0IGRwdV9od19waXBlICpjdHgsCiAJY2FzZSBEUFVfU1NQUF9DU0Nf MTBCSVQ6CiAJCSppZHggPSBzYmxrLT5jc2NfYmxrLmJhc2U7CiAJCWJyZWFrOwotCWNhc2UgRFBV X1NTUFBfSFNJQzoKLQkJKmlkeCA9IHNibGstPmhzaWNfYmxrLmJhc2U7Ci0JCWJyZWFrOwotCWNh c2UgRFBVX1NTUFBfUENDOgotCQkqaWR4ID0gc2Jsay0+cGNjX2Jsay5iYXNlOwotCQlicmVhazsK LQljYXNlIERQVV9TU1BQX01FTUNPTE9SOgotCQkqaWR4ID0gc2Jsay0+bWVtY29sb3JfYmxrLmJh c2U7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJjID0gLUVJTlZBTDsKIAl9CkBAIC00MTMsNjQg KzQwMyw2IEBAIHN0YXRpYyB2b2lkIGRwdV9od19zc3BwX3NldHVwX3BlX2NvbmZpZyhzdHJ1Y3Qg ZHB1X2h3X3BpcGUgKmN0eCwKIAkJCXRvdF9yZXFfcGl4ZWxzWzNdKTsKIH0KIAotc3RhdGljIHZv aWQgX2RwdV9od19zc3BwX3NldHVwX3NjYWxlcihzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKLQkJ c3RydWN0IGRwdV9od19waXBlX2NmZyAqc3NwcCwKLQkJc3RydWN0IGRwdV9od19waXhlbF9leHQg KnBlLAotCQl2b2lkICpzY2FsZXJfY2ZnKQotewotCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAg KmM7Ci0JaW50IGNvbmZpZ19oID0gMHgwOwotCWludCBjb25maWdfdiA9IDB4MDsKLQl1MzIgaWR4 OwotCi0JKHZvaWQpc3NwcDsKLQkodm9pZClzY2FsZXJfY2ZnOwotCWlmIChfc3NwcF9zdWJibGtf b2Zmc2V0KGN0eCwgRFBVX1NTUFBfU0NBTEVSX1FTRUVEMiwgJmlkeCkgfHwgIXBlKQotCQlyZXR1 cm47Ci0KLQljID0gJmN0eC0+aHc7Ci0KLQkvKiBlbmFibGUgc2NhbGVyKHMpIGlmIHZhbGlkIGZp bHRlciBzZXQgKi8KLQlpZiAocGUtPmhvcnpfZmlsdGVyW0RQVV9TU1BQX0NPTVBfMF0gPCBEUFVf U0NBTEVfRklMVEVSX01BWCkKLQkJY29uZmlnX2ggfD0gcGUtPmhvcnpfZmlsdGVyW0RQVV9TU1BQ X0NPTVBfMF0gPDwgODsKLQlpZiAocGUtPmhvcnpfZmlsdGVyW0RQVV9TU1BQX0NPTVBfMV8yXSA8 IERQVV9TQ0FMRV9GSUxURVJfTUFYKQotCQljb25maWdfaCB8PSBwZS0+aG9yel9maWx0ZXJbRFBV X1NTUFBfQ09NUF8xXzJdIDw8IDEyOwotCWlmIChwZS0+aG9yel9maWx0ZXJbRFBVX1NTUFBfQ09N UF8zXSA8IERQVV9TQ0FMRV9GSUxURVJfTUFYKQotCQljb25maWdfaCB8PSBwZS0+aG9yel9maWx0 ZXJbRFBVX1NTUFBfQ09NUF8zXSA8PCAxNjsKLQotCWlmIChjb25maWdfaCkKLQkJY29uZmlnX2gg fD0gQklUKDApOwotCi0JaWYgKHBlLT52ZXJ0X2ZpbHRlcltEUFVfU1NQUF9DT01QXzBdIDwgRFBV X1NDQUxFX0ZJTFRFUl9NQVgpCi0JCWNvbmZpZ192IHw9IHBlLT52ZXJ0X2ZpbHRlcltEUFVfU1NQ UF9DT01QXzBdIDw8IDEwOwotCWlmIChwZS0+dmVydF9maWx0ZXJbRFBVX1NTUFBfQ09NUF8xXzJd IDwgRFBVX1NDQUxFX0ZJTFRFUl9NQVgpCi0JCWNvbmZpZ192IHw9IHBlLT52ZXJ0X2ZpbHRlcltE UFVfU1NQUF9DT01QXzFfMl0gPDwgMTQ7Ci0JaWYgKHBlLT52ZXJ0X2ZpbHRlcltEUFVfU1NQUF9D T01QXzNdIDwgRFBVX1NDQUxFX0ZJTFRFUl9NQVgpCi0JCWNvbmZpZ192IHw9IHBlLT52ZXJ0X2Zp bHRlcltEUFVfU1NQUF9DT01QXzNdIDw8IDE4OwotCi0JaWYgKGNvbmZpZ192KQotCQljb25maWdf diB8PSBCSVQoMSk7Ci0KLQlEUFVfUkVHX1dSSVRFKGMsIFNDQUxFX0NPTkZJRyArIGlkeCwgIGNv bmZpZ19oIHwgY29uZmlnX3YpOwotCURQVV9SRUdfV1JJVEUoYywgQ09NUDBfM19JTklUX1BIQVNF X1ggKyBpZHgsCi0JCXBlLT5pbml0X3BoYXNlX3hbRFBVX1NTUFBfQ09NUF8wXSk7Ci0JRFBVX1JF R19XUklURShjLCBDT01QMF8zX0lOSVRfUEhBU0VfWSArIGlkeCwKLQkJcGUtPmluaXRfcGhhc2Vf eVtEUFVfU1NQUF9DT01QXzBdKTsKLQlEUFVfUkVHX1dSSVRFKGMsIENPTVAwXzNfUEhBU0VfU1RF UF9YICsgaWR4LAotCQlwZS0+cGhhc2Vfc3RlcF94W0RQVV9TU1BQX0NPTVBfMF0pOwotCURQVV9S RUdfV1JJVEUoYywgQ09NUDBfM19QSEFTRV9TVEVQX1kgKyBpZHgsCi0JCXBlLT5waGFzZV9zdGVw X3lbRFBVX1NTUFBfQ09NUF8wXSk7Ci0KLQlEUFVfUkVHX1dSSVRFKGMsIENPTVAxXzJfSU5JVF9Q SEFTRV9YICsgaWR4LAotCQlwZS0+aW5pdF9waGFzZV94W0RQVV9TU1BQX0NPTVBfMV8yXSk7Ci0J RFBVX1JFR19XUklURShjLCBDT01QMV8yX0lOSVRfUEhBU0VfWSArIGlkeCwKLQkJcGUtPmluaXRf cGhhc2VfeVtEUFVfU1NQUF9DT01QXzFfMl0pOwotCURQVV9SRUdfV1JJVEUoYywgQ09NUDFfMl9Q SEFTRV9TVEVQX1ggKyBpZHgsCi0JCXBlLT5waGFzZV9zdGVwX3hbRFBVX1NTUFBfQ09NUF8xXzJd KTsKLQlEUFVfUkVHX1dSSVRFKGMsIENPTVAxXzJfUEhBU0VfU1RFUF9ZICsgaWR4LAotCQlwZS0+ cGhhc2Vfc3RlcF95W0RQVV9TU1BQX0NPTVBfMV8yXSk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9kcHVf aHdfc3NwcF9zZXR1cF9zY2FsZXIzKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAogCQlzdHJ1Y3Qg ZHB1X2h3X3BpcGVfY2ZnICpzc3BwLAogCQlzdHJ1Y3QgZHB1X2h3X3BpeGVsX2V4dCAqcGUsCkBA IC01MDksNyArNDQxLDYgQEAgc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfcmVjdHMoc3Ry dWN0IGRwdV9od19waXBlICpjdHgsCiAJc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYzsKIAl1 MzIgc3JjX3NpemUsIHNyY194eSwgZHN0X3NpemUsIGRzdF94eSwgeXN0cmlkZTAsIHlzdHJpZGUx OwogCXUzMiBzcmNfc2l6ZV9vZmYsIHNyY194eV9vZmYsIG91dF9zaXplX29mZiwgb3V0X3h5X29m ZjsKLQl1MzIgZGVjaW1hdGlvbiA9IDA7CiAJdTMyIGlkeDsKIAogCWlmIChfc3NwcF9zdWJibGtf b2Zmc2V0KGN0eCwgRFBVX1NTUFBfU1JDLCAmaWR4KSB8fCAhY2ZnKQpAQCAtNTYwLDEzICs0OTEs NiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1cF9yZWN0cyhzdHJ1Y3QgZHB1X2h3X3Bp cGUgKmN0eCwKIAkJfQogCX0KIAotCS8qIHByb2dyYW0gc2NhbGVyLCBwaGFzZSByZWdpc3RlcnMs IGlmIHBpcGVzIHN1cHBvcnRpbmcgc2NhbGluZyAqLwotCWlmIChjdHgtPmNhcC0+ZmVhdHVyZXMg JiBEUFVfU1NQUF9TQ0FMRVIpIHsKLQkJLyogcHJvZ3JhbSBkZWNpbWF0aW9uICovCi0JCWRlY2lt YXRpb24gPSAoKDEgPDwgY2ZnLT5ob3J6X2RlY2ltYXRpb24pIC0gMSkgPDwgODsKLQkJZGVjaW1h dGlvbiB8PSAoKDEgPDwgY2ZnLT52ZXJ0X2RlY2ltYXRpb24pIC0gMSk7Ci0JfQotCiAJLyogcmVj dGFuZ2xlIHJlZ2lzdGVyIHByb2dyYW1taW5nICovCiAJRFBVX1JFR19XUklURShjLCBzcmNfc2l6 ZV9vZmYgKyBpZHgsIHNyY19zaXplKTsKIAlEUFVfUkVHX1dSSVRFKGMsIHNyY194eV9vZmYgKyBp ZHgsIHNyY194eSk7CkBAIC01NzUsNTIgKzQ5OSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9od19zc3Bw X3NldHVwX3JlY3RzKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAogCiAJRFBVX1JFR19XUklURShj LCBTU1BQX1NSQ19ZU1RSSURFMCArIGlkeCwgeXN0cmlkZTApOwogCURQVV9SRUdfV1JJVEUoYywg U1NQUF9TUkNfWVNUUklERTEgKyBpZHgsIHlzdHJpZGUxKTsKLQlEUFVfUkVHX1dSSVRFKGMsIFNT UFBfREVDSU1BVElPTl9DT05GSUcgKyBpZHgsIGRlY2ltYXRpb24pOwotfQotCi0vKioKLSAqIF9k cHVfaHdfc3NwcF9zZXR1cF9leGNsX3JlY3QoKSAtIHNldCBleGNsdXNpb24gcmVjdCBjb25maWdz Ci0gKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotICogQGV4Y2xfcmVjdDogRXhjbHVz aW9uIHJlY3QgY29uZmlncwotICovCi1zdGF0aWMgdm9pZCBfZHB1X2h3X3NzcHBfc2V0dXBfZXhj bF9yZWN0KHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAotCQlzdHJ1Y3QgZHB1X3JlY3QgKmV4Y2xf cmVjdCwKLQkJZW51bSBkcHVfc3NwcF9tdWx0aXJlY3RfaW5kZXggcmVjdF9pbmRleCkKLXsKLQlz dHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjOwotCXUzMiBzaXplLCB4eTsKLQl1MzIgaWR4Owot CXUzMiByZWdfeHksIHJlZ19zaXplOwotCXUzMiBleGNsX2N0cmwsIGVuYWJsZV9iaXQ7Ci0KLQlp ZiAoX3NzcHBfc3ViYmxrX29mZnNldChjdHgsIERQVV9TU1BQX1NSQywgJmlkeCkgfHwgIWV4Y2xf cmVjdCkKLQkJcmV0dXJuOwotCi0JaWYgKHJlY3RfaW5kZXggPT0gRFBVX1NTUFBfUkVDVF8wIHx8 IHJlY3RfaW5kZXggPT0gRFBVX1NTUFBfUkVDVF9TT0xPKSB7Ci0JCXJlZ194eSA9IFNTUFBfRVhD TF9SRUNfWFk7Ci0JCXJlZ19zaXplID0gU1NQUF9FWENMX1JFQ19TSVpFOwotCQllbmFibGVfYml0 ID0gQklUKDApOwotCX0gZWxzZSB7Ci0JCXJlZ194eSA9IFNTUFBfRVhDTF9SRUNfWFlfUkVDMTsK LQkJcmVnX3NpemUgPSBTU1BQX0VYQ0xfUkVDX1NJWkVfUkVDMTsKLQkJZW5hYmxlX2JpdCA9IEJJ VCgxKTsKLQl9Ci0KLQljID0gJmN0eC0+aHc7Ci0KLQl4eSA9IChleGNsX3JlY3QtPnkgPDwgMTYp IHwgKGV4Y2xfcmVjdC0+eCk7Ci0Jc2l6ZSA9IChleGNsX3JlY3QtPmggPDwgMTYpIHwgKGV4Y2xf cmVjdC0+dyk7Ci0KLQlleGNsX2N0cmwgPSBEUFVfUkVHX1JFQUQoYywgU1NQUF9FWENMX1JFQ19D VEwgKyBpZHgpOwotCWlmICghc2l6ZSkgewotCQlEUFVfUkVHX1dSSVRFKGMsIFNTUFBfRVhDTF9S RUNfQ1RMICsgaWR4LAotCQkJCWV4Y2xfY3RybCAmIH5lbmFibGVfYml0KTsKLQl9IGVsc2Ugewot CQlEUFVfUkVHX1dSSVRFKGMsIFNTUFBfRVhDTF9SRUNfQ1RMICsgaWR4LAotCQkJCWV4Y2xfY3Ry bCB8IGVuYWJsZV9iaXQpOwotCQlEUFVfUkVHX1dSSVRFKGMsIHJlZ19zaXplICsgaWR4LCBzaXpl KTsKLQkJRFBVX1JFR19XUklURShjLCByZWdfeHkgKyBpZHgsIHh5KTsKLQl9CiB9CiAKIHN0YXRp YyB2b2lkIGRwdV9od19zc3BwX3NldHVwX3NvdXJjZWFkZHJlc3Moc3RydWN0IGRwdV9od19waXBl ICpjdHgsCkBAIC02NjcsMjQgKzU0NSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9od19zc3BwX3NldHVw X2NzYyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKIAlkcHVfaHdfY3NjX3NldHVwKCZjdHgtPmh3 LCBpZHgsIGRhdGEsIGNzYzEwKTsKIH0KIAotc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBf c2hhcnBlbmluZyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKLQkJc3RydWN0IGRwdV9od19zaGFy cF9jZmcgKmNmZykKLXsKLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjOwotCXUzMiBpZHg7 Ci0KLQlpZiAoX3NzcHBfc3ViYmxrX29mZnNldChjdHgsIERQVV9TU1BQX1NDQUxFUl9RU0VFRDIs ICZpZHgpIHx8ICFjZmcgfHwKLQkJCSF0ZXN0X2JpdChEUFVfU1NQUF9TQ0FMRVJfUVNFRUQyLCAm Y3R4LT5jYXAtPmZlYXR1cmVzKSkKLQkJcmV0dXJuOwotCi0JYyA9ICZjdHgtPmh3OwotCi0JRFBV X1JFR19XUklURShjLCBWSUdfMF9RU0VFRDJfU0hBUlAgKyBpZHgsIGNmZy0+c3RyZW5ndGgpOwot CURQVV9SRUdfV1JJVEUoYywgVklHXzBfUVNFRUQyX1NIQVJQICsgaWR4ICsgMHg0LCBjZmctPmVk Z2VfdGhyKTsKLQlEUFVfUkVHX1dSSVRFKGMsIFZJR18wX1FTRUVEMl9TSEFSUCArIGlkeCArIDB4 OCwgY2ZnLT5zbW9vdGhfdGhyKTsKLQlEUFVfUkVHX1dSSVRFKGMsIFZJR18wX1FTRUVEMl9TSEFS UCArIGlkeCArIDB4QywgY2ZnLT5ub2lzZV90aHIpOwotfQotCiBzdGF0aWMgdm9pZCBkcHVfaHdf c3NwcF9zZXR1cF9zb2xpZGZpbGwoc3RydWN0IGRwdV9od19waXBlICpjdHgsIHUzMiBjb2xvciwg ZW51bQogCQlkcHVfc3NwcF9tdWx0aXJlY3RfaW5kZXggcmVjdF9pbmRleCkKIHsKQEAgLTc1NCw1 NyArNjE0LDYgQEAgc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfcW9zX2N0cmwoc3RydWN0 IGRwdV9od19waXBlICpjdHgsCiAJRFBVX1JFR19XUklURSgmY3R4LT5odywgU1NQUF9RT1NfQ1RS TCArIGlkeCwgcW9zX2N0cmwpOwogfQogCi1zdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1cF90 c19wcmVmaWxsKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAotCQlzdHJ1Y3QgZHB1X2h3X3BpcGVf dHNfY2ZnICpjZmcsCi0JCWVudW0gZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4IGluZGV4KQotewot CXUzMiBpZHg7Ci0JdTMyIHRzX29mZnNldCwgdHNfcHJlZmlsbF9vZmZzZXQ7Ci0JdTMyIHRzX2Nv dW50ID0gMCwgdHNfYnl0ZXMgPSAwOwotCWNvbnN0IHN0cnVjdCBkcHVfc3NwcF9jZmcgKmNhcDsK LQotCWlmICghY3R4IHx8ICFjZmcgfHwgIWN0eC0+Y2FwKQotCQlyZXR1cm47Ci0KLQlpZiAoX3Nz cHBfc3ViYmxrX29mZnNldChjdHgsIERQVV9TU1BQX1NSQywgJmlkeCkpCi0JCXJldHVybjsKLQot CWNhcCA9IGN0eC0+Y2FwOwotCi0JaWYgKGluZGV4ID09IERQVV9TU1BQX1JFQ1RfMCAmJgotCQkJ dGVzdF9iaXQoRFBVX1NTUFBfVFNfUFJFRklMTCwgJmNhcC0+ZmVhdHVyZXMpKSB7Ci0JCXRzX29m ZnNldCA9IFNTUFBfVFJBRkZJQ19TSEFQRVI7Ci0JCXRzX3ByZWZpbGxfb2Zmc2V0ID0gU1NQUF9U UkFGRklDX1NIQVBFUl9QUkVGSUxMOwotCX0gZWxzZSBpZiAoaW5kZXggPT0gRFBVX1NTUFBfUkVD VF8xICYmCi0JCQl0ZXN0X2JpdChEUFVfU1NQUF9UU19QUkVGSUxMX1JFQzEsICZjYXAtPmZlYXR1 cmVzKSkgewotCQl0c19vZmZzZXQgPSBTU1BQX1RSQUZGSUNfU0hBUEVSX1JFQzE7Ci0JCXRzX3By ZWZpbGxfb2Zmc2V0ID0gU1NQUF9UUkFGRklDX1NIQVBFUl9SRUMxX1BSRUZJTEw7Ci0JfSBlbHNl IHsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChjZmctPnRpbWUpIHsKLQkJLyogdGhpcyBkb2VzIG11 bHRfZnJhYyBpbiBhIDY0LWJpdCBzYWZlIG1hbm5lciAqLwotCQl1NjQgcmF0ZSA9IFRTX0NMSyAq IDEwMDAwMDBVTEw7Ci0JCXUzMiByZW07Ci0JCXU2NCBxdW90ID0gZGl2X3U2NF9yZW0ocmF0ZSwg Y2ZnLT50aW1lLCAmcmVtKTsKLQotCQl0c19ieXRlcyA9IChxdW90ICogY2ZnLT5zaXplKSArCi0J CQkgICBkaXZfdTY0KHJlbSAqIGNmZy0+c2l6ZSwgY2ZnLT50aW1lKTsKLQotCQlpZiAodHNfYnl0 ZXMgPiBTU1BQX1RSQUZGSUNfU0hBUEVSX0JQQ19NQVgpCi0JCQl0c19ieXRlcyA9IFNTUFBfVFJB RkZJQ19TSEFQRVJfQlBDX01BWDsKLQl9Ci0KLQlpZiAodHNfYnl0ZXMpIHsKLQkJdHNfY291bnQg PSBESVZfUk9VTkRfVVBfVUxMKGNmZy0+c2l6ZSwgdHNfYnl0ZXMpOwotCQl0c19ieXRlcyB8PSBC SVQoMzEpIHwgQklUKDI3KTsKLQl9Ci0KLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCB0c19vZmZz ZXQsIHRzX2J5dGVzKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCB0c19wcmVmaWxsX29mZnNl dCwgdHNfY291bnQpOwotfQotCiBzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1cF9jZHAoc3Ry dWN0IGRwdV9od19waXBlICpjdHgsCiAJCXN0cnVjdCBkcHVfaHdfcGlwZV9jZHBfY2ZnICpjZmcp CiB7CkBAIC04NDAsOSArNjQ5LDYgQEAgc3RhdGljIHZvaWQgX3NldHVwX2xheWVyX29wcyhzdHJ1 Y3QgZHB1X2h3X3BpcGUgKmMsCiAJCWMtPm9wcy5zZXR1cF9wZSA9IGRwdV9od19zc3BwX3NldHVw X3BlX2NvbmZpZzsKIAl9CiAKLQlpZiAodGVzdF9iaXQoRFBVX1NTUFBfRVhDTF9SRUNULCAmZmVh dHVyZXMpKQotCQljLT5vcHMuc2V0dXBfZXhjbF9yZWN0ID0gX2RwdV9od19zc3BwX3NldHVwX2V4 Y2xfcmVjdDsKLQogCWlmICh0ZXN0X2JpdChEUFVfU1NQUF9RT1MsICZmZWF0dXJlcykpIHsKIAkJ Yy0+b3BzLnNldHVwX2Rhbmdlcl9zYWZlX2x1dCA9CiAJCQlkcHVfaHdfc3NwcF9zZXR1cF9kYW5n ZXJfc2FmZV9sdXQ7CkBAIC04NTAsMTggKzY1NiwxMCBAQCBzdGF0aWMgdm9pZCBfc2V0dXBfbGF5 ZXJfb3BzKHN0cnVjdCBkcHVfaHdfcGlwZSAqYywKIAkJYy0+b3BzLnNldHVwX3Fvc19jdHJsID0g ZHB1X2h3X3NzcHBfc2V0dXBfcW9zX2N0cmw7CiAJfQogCi0JaWYgKHRlc3RfYml0KERQVV9TU1BQ X1RTX1BSRUZJTEwsICZmZWF0dXJlcykpCi0JCWMtPm9wcy5zZXR1cF90c19wcmVmaWxsID0gZHB1 X2h3X3NzcHBfc2V0dXBfdHNfcHJlZmlsbDsKLQogCWlmICh0ZXN0X2JpdChEUFVfU1NQUF9DU0Ms ICZmZWF0dXJlcykgfHwKIAkJdGVzdF9iaXQoRFBVX1NTUFBfQ1NDXzEwQklULCAmZmVhdHVyZXMp KQogCQljLT5vcHMuc2V0dXBfY3NjID0gZHB1X2h3X3NzcHBfc2V0dXBfY3NjOwogCi0JaWYgKHRl c3RfYml0KERQVV9TU1BQX1NDQUxFUl9RU0VFRDIsICZmZWF0dXJlcykpIHsKLQkJYy0+b3BzLnNl dHVwX3NoYXJwZW5pbmcgPSBkcHVfaHdfc3NwcF9zZXR1cF9zaGFycGVuaW5nOwotCQljLT5vcHMu c2V0dXBfc2NhbGVyID0gX2RwdV9od19zc3BwX3NldHVwX3NjYWxlcjsKLQl9Ci0KIAlpZiAoZHB1 X2h3X3NzcHBfbXVsdGlyZWN0X2VuYWJsZWQoYy0+Y2FwKSkKIAkJYy0+b3BzLnNldHVwX211bHRp cmVjdCA9IGRwdV9od19zc3BwX3NldHVwX211bHRpcmVjdDsKIApAQCAtODcwLDI0ICs2NjgsNiBA QCBzdGF0aWMgdm9pZCBfc2V0dXBfbGF5ZXJfb3BzKHN0cnVjdCBkcHVfaHdfcGlwZSAqYywKIAkJ Yy0+b3BzLmdldF9zY2FsZXJfdmVyID0gX2RwdV9od19zc3BwX2dldF9zY2FsZXIzX3ZlcjsKIAl9 CiAKLQlpZiAodGVzdF9iaXQoRFBVX1NTUFBfSFNJQywgJmZlYXR1cmVzKSkgewotCQkvKiBUT0RP OiBhZGQgdmVyc2lvbiBiYXNlZCBhc3NpZ25tZW50IGhlcmUgYXMgaW5saW5lIG9yIG1hY3JvICov Ci0JCWlmIChjLT5jYXAtPnNibGstPmhzaWNfYmxrLnZlcnNpb24gPT0KLQkJCShEUFVfQ09MT1Jf UFJPQ0VTU19WRVIoMHgxLCAweDcpKSkgewotCQkJYy0+b3BzLnNldHVwX3BhX2h1ZSA9IGRwdV9z ZXR1cF9waXBlX3BhX2h1ZV92MV83OwotCQkJYy0+b3BzLnNldHVwX3BhX3NhdCA9IGRwdV9zZXR1 cF9waXBlX3BhX3NhdF92MV83OwotCQkJYy0+b3BzLnNldHVwX3BhX3ZhbCA9IGRwdV9zZXR1cF9w aXBlX3BhX3ZhbF92MV83OwotCQkJYy0+b3BzLnNldHVwX3BhX2NvbnQgPSBkcHVfc2V0dXBfcGlw ZV9wYV9jb250X3YxXzc7Ci0JCX0KLQl9Ci0KLQlpZiAodGVzdF9iaXQoRFBVX1NTUFBfTUVNQ09M T1IsICZmZWF0dXJlcykpIHsKLQkJaWYgKGMtPmNhcC0+c2Jsay0+bWVtY29sb3JfYmxrLnZlcnNp b24gPT0KLQkJCShEUFVfQ09MT1JfUFJPQ0VTU19WRVIoMHgxLCAweDcpKSkKLQkJCWMtPm9wcy5z ZXR1cF9wYV9tZW1jb2xvciA9Ci0JCQkJZHB1X3NldHVwX3BpcGVfcGFfbWVtY29sX3YxXzc7Ci0J fQotCiAJaWYgKHRlc3RfYml0KERQVV9TU1BQX0NEUCwgJmZlYXR1cmVzKSkKIAkJYy0+b3BzLnNl dHVwX2NkcCA9IGRwdV9od19zc3BwX3NldHVwX2NkcDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5oCmluZGV4IGEzMmVjYzYuLjBiYjVlY2IgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuaApAQCAtMTgsNyArMTgsNiBA QAogI2luY2x1ZGUgImRwdV9od191dGlsLmgiCiAjaW5jbHVkZSAiZHB1X2h3X2Jsay5oIgogI2lu Y2x1ZGUgImRwdV9mb3JtYXRzLmgiCi0jaW5jbHVkZSAiZHB1X2NvbG9yX3Byb2Nlc3NpbmcuaCIK IAogc3RydWN0IGRwdV9od19waXBlOwogCkBAIC0xNjAsMTIgKzE1OSw2IEBAIHN0cnVjdCBkcHVf aHdfcGl4ZWxfZXh0IHsKICAqIEBzcmNfcmVjdDogIHNyYyBST0ksIGNhbGxlciB0YWtlcyBpbnRv IGFjY291bnQgdGhlIGRpZmZlcmVudCBvcGVyYXRpb25zCiAgKiAgICAgICAgICAgICBzdWNoIGFz IGRlY2ltYXRpb24sIGZsaXAgZXRjIHRvIHByb2dyYW0gdGhpcyBmaWVsZAogICogQGRlc3RfcmVj dDogZGVzdGluYXRpb24gUk9JLgotICogQCBob3J6X2RlY2ltYXRpb24gOiBob3Jpem9udGFsIGRl Y2ltYXRpb24gZmFjdG9yKCAwLCAyLCA0LCA4LCAxNikKLSAqIEAgdmVydF9kZWNpbWF0aW9uIDog dmVydGljYWwgZGVjaW1hdGlvbiBmYWN0b3IoIDAsIDIsIDQsIDgsIDE2KQotICogICAgICAgICAg ICAgIDI6IFJlYWQgMSBsaW5lL3BpeGVsIGRyb3AgMSBsaW5lL3BpeGVsCi0gKiAgICAgICAgICAg ICAgNDogUmVhZCAxIGxpbmUvcGl4ZWwgZHJvcCAzICBsaW5lcy9waXhlbHMKLSAqICAgICAgICAg ICAgICA4OiBSZWFkIDEgbGluZS9waXhlbCBkcm9wIDcgbGluZXMvcGl4ZWxzCi0gKiAgICAgICAg ICAgICAgMTY6IFJlYWQgMSBsaW5lL3BpeGVsIGRyb3AgMTUgbGluZS9waXhlbHMKICAqIEBpbmRl eDogICAgIGluZGV4IG9mIHRoZSByZWN0YW5nbGUgb2YgU1NQUAogICogQG1vZGU6ICAgICAgcGFy YWxsZWwgb3IgdGltZSBtdWx0aXBsZXggbXVsdGlyZWN0IG1vZGUKICAqLwpAQCAtMTczLDggKzE2 Niw2IEBAIHN0cnVjdCBkcHVfaHdfcGlwZV9jZmcgewogCXN0cnVjdCBkcHVfaHdfZm10X2xheW91 dCBsYXlvdXQ7CiAJc3RydWN0IGRwdV9yZWN0IHNyY19yZWN0OwogCXN0cnVjdCBkcHVfcmVjdCBk c3RfcmVjdDsKLQl1OCBob3J6X2RlY2ltYXRpb247Ci0JdTggdmVydF9kZWNpbWF0aW9uOwogCWVu dW0gZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4IGluZGV4OwogCWVudW0gZHB1X3NzcHBfbXVsdGly ZWN0X21vZGUgbW9kZTsKIH07CkBAIC0yNjksMTYgKzI2MCw2IEBAIHN0cnVjdCBkcHVfaHdfc3Nw cF9vcHMgewogCQkJc3RydWN0IGRwdV9od19waXhlbF9leHQgKnBlX2V4dCk7CiAKIAkvKioKLQkg KiBzZXR1cF9leGNsX3JlY3QgLSBzZXR1cCBwaXBlIGV4Y2x1c2lvbiByZWN0YW5nbGUKLQkgKiBA Y3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBleGNsX3JlY3Q6IFBvaW50ZXIgdG8g ZXhjbGNsdXNpb24gcmVjdCBzdHJ1Y3R1cmUKLQkgKiBAaW5kZXg6IHJlY3RhbmdsZSBpbmRleCBp biBtdWx0aXJlY3QKLQkgKi8KLQl2b2lkICgqc2V0dXBfZXhjbF9yZWN0KShzdHJ1Y3QgZHB1X2h3 X3BpcGUgKmN0eCwKLQkJCXN0cnVjdCBkcHVfcmVjdCAqZXhjbF9yZWN0LAotCQkJZW51bSBkcHVf c3NwcF9tdWx0aXJlY3RfaW5kZXggaW5kZXgpOwotCi0JLyoqCiAJICogc2V0dXBfc291cmNlYWRk cmVzcyAtIHNldHVwIHBpcGUgc291cmNlIGFkZHJlc3NlcwogCSAqIEBjdHg6IFBvaW50ZXIgdG8g cGlwZSBjb250ZXh0CiAJICogQGNmZzogUG9pbnRlciB0byBwaXBlIGNvbmZpZyBzdHJ1Y3R1cmUK QEAgLTMyNCw1MCArMzA1LDYgQEAgc3RydWN0IGRwdV9od19zc3BwX29wcyB7CiAJdm9pZCAoKnNl dHVwX3NoYXJwZW5pbmcpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAogCQkJc3RydWN0IGRwdV9o d19zaGFycF9jZmcgKmNmZyk7CiAKLQotCS8qKgotCSAqIHNldHVwX3BhX2h1ZSgpOiBTZXR1cCBz b3VyY2UgaHVlIGFkanVzdG1lbnQKLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAot CSAqIEBjZmc6IFBvaW50ZXIgdG8gaHVlIGRhdGEKLQkgKi8KLQl2b2lkICgqc2V0dXBfcGFfaHVl KShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHNldHVw X3BhX3NhdCgpOiBTZXR1cCBzb3VyY2Ugc2F0dXJhdGlvbiBhZGp1c3RtZW50Ci0JICogQGN0eDog UG9pbnRlciB0byBwaXBlIGNvbnRleHQKLQkgKiBAY2ZnOiBQb2ludGVyIHRvIHNhdHVyYXRpb24g ZGF0YQotCSAqLwotCXZvaWQgKCpzZXR1cF9wYV9zYXQpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4 LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfcGFfdmFsKCk6IFNldHVwIHNvdXJjZSB2 YWx1ZSBhZGp1c3RtZW50Ci0JICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQKLQkgKiBA Y2ZnOiBQb2ludGVyIHRvIHZhbHVlIGRhdGEKLQkgKi8KLQl2b2lkICgqc2V0dXBfcGFfdmFsKShz dHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHNldHVwX3Bh X2NvbnQoKTogU2V0dXAgc291cmNlIGNvbnRyYXN0IGFkanVzdG1lbnQKLQkgKiBAY3R4OiBQb2lu dGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgY29udHJhc3QgZGF0YQotCSAq LwotCXZvaWQgKCpzZXR1cF9wYV9jb250KShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAq Y2ZnKTsKLQotCS8qKgotCSAqIHNldHVwX3BhX21lbWNvbG9yIC0gc2V0dXAgc291cmNlIGNvbG9y IHByb2Nlc3NpbmcKLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEB0eXBl OiBNZW1jb2xvciB0eXBlIChTa2luLCBza3kgb3IgZm9saWFnZSkKLQkgKiBAY2ZnOiBQb2ludGVy IHRvIG1lbW9yeSBjb2xvciBjb25maWcgZGF0YQotCSAqLwotCXZvaWQgKCpzZXR1cF9wYV9tZW1j b2xvcikoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCQllbnVtIGRwdV9tZW1jb2xvcl90eXBl IHR5cGUsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9pZ2MgLSBzZXR1cCBpbnZlcnNl IGdhbW1hIGNvcnJlY3Rpb24KLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAq LwotCXZvaWQgKCpzZXR1cF9pZ2MpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4KTsKLQogCS8qKgog CSAqIHNldHVwX2Rhbmdlcl9zYWZlX2x1dCAtIHNldHVwIGRhbmdlciBzYWZlIExVVHMKIAkgKiBA Y3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dApAQCAtNDIyLDE2ICszNTksNiBAQCBzdHJ1Y3Qg ZHB1X2h3X3NzcHBfb3BzIHsKIAl1MzIgKCpnZXRfc2NhbGVyX3Zlcikoc3RydWN0IGRwdV9od19w aXBlICpjdHgpOwogCiAJLyoqCi0JICogc2V0dXBfdHNfcHJlZmlsbCAtIHNldHVwIHByZWZpbGwg dHJhZmZpYyBzaGFwZXIKLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBj Zmc6IFBvaW50ZXIgdG8gdHJhZmZpYyBzaGFwZXIgY29uZmlndXJhdGlvbgotCSAqIEBpbmRleDog cmVjdGFuZ2xlIGluZGV4IGluIG11bHRpcmVjdAotCSAqLwotCXZvaWQgKCpzZXR1cF90c19wcmVm aWxsKShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKLQkJCXN0cnVjdCBkcHVfaHdfcGlwZV90c19j ZmcgKmNmZywKLQkJCWVudW0gZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4IGluZGV4KTsKLQotCS8q KgogCSAqIHNldHVwX2NkcCAtIHNldHVwIGNsaWVudCBkcml2ZW4gcHJlZmV0Y2gKIAkgKiBAY3R4 OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAogCSAqIEBjZmc6IFBvaW50ZXIgdG8gY2RwIGNvbmZp Z3VyYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d191dGlsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdXRpbC5jCmlu ZGV4IDAxOWE4ZmEuLjFiYTU3MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od191dGlsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X3V0aWwuYwpAQCAtMTEsNyArMTEsNiBAQAogICovCiAjZGVmaW5lIHByX2ZtdChmbXQp CSJbZHJtOiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fCiAKLSNpbmNsdWRlIDx1YXBp L2RybS9kcHVfZHJtLmg+CiAjaW5jbHVkZSAibXNtX2Rydi5oIgogI2luY2x1ZGUgImRwdV9rbXMu aCIKICNpbmNsdWRlICJkcHVfaHdfbWRzcy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X3V0aWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od191dGlsLmgKaW5kZXggZDkyY2FmYi4uNDJmMWIyMiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3V0aWwuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdXRpbC5oCkBAIC0xNTgsNiArMTU4LDE2MiBAQCBz dHJ1Y3QgZHB1X2h3X3NjYWxlcjNfbHV0X2NmZyB7CiAJc2l6ZV90IHNlcF9sZW47CiB9OwogCisv KioKKyAqIHN0cnVjdCBkcHVfZHJtX3BpeF9leHRfdjEgLSB2ZXJzaW9uIDEgb2YgcGl4ZWwgZXh0 IHN0cnVjdHVyZQorICogQG51bV9leHRfcHhsc19scjogTnVtYmVyIG9mIHRvdGFsIGhvcml6b250 YWwgcGl4ZWxzCisgKiBAbnVtX2V4dF9weGxzX3RiOiBOdW1iZXIgb2YgdG90YWwgdmVydGljYWwg bGluZXMKKyAqIEBsZWZ0X2Z0Y2g6ICAgICAgIE51bWJlciBvZiBleHRyYSBwaXhlbHMgdG8gb3Zl cmZldGNoIGZyb20gbGVmdAorICogQHJpZ2h0X2Z0Y2g6ICAgICAgTnVtYmVyIG9mIGV4dHJhIHBp eGVscyB0byBvdmVyZmV0Y2ggZnJvbSByaWdodAorICogQHRvcF9mdGNoOiAgICAgICAgTnVtYmVy IG9mIGV4dHJhIGxpbmVzIHRvIG92ZXJmZXRjaCBmcm9tIHRvcAorICogQGJ0bV9mdGNoOiAgICAg ICAgTnVtYmVyIG9mIGV4dHJhIGxpbmVzIHRvIG92ZXJmZXRjaCBmcm9tIGJvdHRvbQorICogQGxl ZnRfcnB0OiAgICAgICAgTnVtYmVyIG9mIGV4dHJhIHBpeGVscyB0byByZXBlYXQgZnJvbSBsZWZ0 CisgKiBAcmlnaHRfcnB0OiAgICAgICBOdW1iZXIgb2YgZXh0cmEgcGl4ZWxzIHRvIHJlcGVhdCBm cm9tIHJpZ2h0CisgKiBAdG9wX3JwdDogICAgICAgICBOdW1iZXIgb2YgZXh0cmEgbGluZXMgdG8g cmVwZWF0IGZyb20gdG9wCisgKiBAYnRtX3JwdDogICAgICAgICBOdW1iZXIgb2YgZXh0cmEgbGlu ZXMgdG8gcmVwZWF0IGZyb20gYm90dG9tCisgKi8KK3N0cnVjdCBkcHVfZHJtX3BpeF9leHRfdjEg eworCS8qCisJICogTnVtYmVyIG9mIHBpeGVscyBleHQgaW4gbGVmdCwgcmlnaHQsIHRvcCBhbmQg Ym90dG9tIGRpcmVjdGlvbgorCSAqIGZvciBhbGwgY29sb3IgY29tcG9uZW50cy4KKwkgKi8KKwlp bnQzMl90IG51bV9leHRfcHhsc19scltEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCBudW1fZXh0 X3B4bHNfdGJbRFBVX01BWF9QTEFORVNdOworCisJLyoKKwkgKiBOdW1iZXIgb2YgcGl4ZWxzIG5l ZWRzIHRvIGJlIG92ZXJmZXRjaGVkIGluIGxlZnQsIHJpZ2h0LCB0b3AKKwkgKiBhbmQgYm90dG9t IGRpcmVjdGlvbnMgZnJvbSBzb3VyY2UgaW1hZ2UgZm9yIHNjYWxpbmcuCisJICovCisJaW50MzJf dCBsZWZ0X2Z0Y2hbRFBVX01BWF9QTEFORVNdOworCWludDMyX3QgcmlnaHRfZnRjaFtEUFVfTUFY X1BMQU5FU107CisJaW50MzJfdCB0b3BfZnRjaFtEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCBi dG1fZnRjaFtEUFVfTUFYX1BMQU5FU107CisJLyoKKwkgKiBOdW1iZXIgb2YgcGl4ZWxzIG5lZWRz IHRvIGJlIHJlcGVhdGVkIGluIGxlZnQsIHJpZ2h0LCB0b3AgYW5kCisJICogYm90dG9tIGRpcmVj dGlvbnMgZm9yIHNjYWxpbmcuCisJICovCisJaW50MzJfdCBsZWZ0X3JwdFtEUFVfTUFYX1BMQU5F U107CisJaW50MzJfdCByaWdodF9ycHRbRFBVX01BWF9QTEFORVNdOworCWludDMyX3QgdG9wX3Jw dFtEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCBidG1fcnB0W0RQVV9NQVhfUExBTkVTXTsKKwor fTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X2RybV9kZV92MSAtIHZlcnNpb24gMSBvZiBkZXRhaWwg ZW5oYW5jZXIgc3RydWN0dXJlCisgKiBAZW5hYmxlOiAgICAgICAgIEVuYWJsZXMvZGlzYWJsZXMg ZGV0YWlsIGVuaGFuY2VyCisgKiBAc2hhcnBlbl9sZXZlbDE6IFNoYXJwZW5pbmcgc3RyZW5ndGgg Zm9yIG5vaXNlCisgKiBAc2hhcnBlbl9sZXZlbDI6IFNoYXJwZW5pbmcgc3RyZW5ndGggZm9yIGNv bnRleHQKKyAqIEBjbGlwOiAgICAgICAgICAgQ2xpcCBjb2VmZmljaWVudAorICogQGxpbWl0OiAg ICAgICAgICBEZXRhaWwgZW5oYW5jZXIgbGltaXQgZmFjdG9yCisgKiBAdGhyX3F1aWV0OiAgICAg IFF1aXRlIHpvbmUgdGhyZXNob2xkCisgKiBAdGhyX2RpZW91dDogICAgIERpZS1vdXQgem9uZSB0 aHJlc2hvbGQKKyAqIEB0aHJfbG93OiAgICAgICAgTGluZWFyIHpvbmUgbGVmdCB0aHJlc2hvbGQK KyAqIEB0aHJfaGlnaDogICAgICAgTGluZWFyIHpvbmUgcmlnaHQgdGhyZXNob2xkCisgKiBAcHJl Y19zaGlmdDogICAgIERldGFpbCBlbmhhbmNlciBwcmVjaXNpb24KKyAqIEBhZGp1c3RfYTogICAg ICAgTWFwcGluZyBjdXJ2ZXMgQSBjb2VmZmljaWVudHMKKyAqIEBhZGp1c3RfYjogICAgICAgTWFw cGluZyBjdXJ2ZXMgQiBjb2VmZmljaWVudHMKKyAqIEBhZGp1c3RfYzogICAgICAgTWFwcGluZyBj dXJ2ZXMgQyBjb2VmZmljaWVudHMKKyAqLworc3RydWN0IGRwdV9kcm1fZGVfdjEgeworCXVpbnQz Ml90IGVuYWJsZTsKKwlpbnQxNl90IHNoYXJwZW5fbGV2ZWwxOworCWludDE2X3Qgc2hhcnBlbl9s ZXZlbDI7CisJdWludDE2X3QgY2xpcDsKKwl1aW50MTZfdCBsaW1pdDsKKwl1aW50MTZfdCB0aHJf cXVpZXQ7CisJdWludDE2X3QgdGhyX2RpZW91dDsKKwl1aW50MTZfdCB0aHJfbG93OworCXVpbnQx Nl90IHRocl9oaWdoOworCXVpbnQxNl90IHByZWNfc2hpZnQ7CisJaW50MTZfdCBhZGp1c3RfYVtE UFVfTUFYX0RFX0NVUlZFU107CisJaW50MTZfdCBhZGp1c3RfYltEUFVfTUFYX0RFX0NVUlZFU107 CisJaW50MTZfdCBhZGp1c3RfY1tEUFVfTUFYX0RFX0NVUlZFU107Cit9OworCisvKioKKyAqIHN0 cnVjdCBkcHVfZHJtX3NjYWxlcl92MiAtIHZlcnNpb24gMiBvZiBzdHJ1Y3QgZHB1X2RybV9zY2Fs ZXIKKyAqIEBlbmFibGU6ICAgICAgICAgICAgU2NhbGVyIGVuYWJsZQorICogQGRpcl9lbjogICAg ICAgICAgICBEZXRhaWwgZW5oYW5jZXIgZW5hYmxlCisgKiBAcGU6ICAgICAgICAgICAgICAgIFBp eGVsIGV4dGVuc2lvbiBzZXR0aW5ncworICogQGhvcnpfZGVjaW1hdGU6ICAgICBIb3Jpem9udGFs IGRlY2ltYXRpb24gZmFjdG9yCisgKiBAdmVydF9kZWNpbWF0ZTogICAgIFZlcnRpY2FsIGRlY2lt YXRpb24gZmFjdG9yCisgKiBAaW5pdF9waGFzZV94OiAgICAgIEluaXRpYWwgc2NhbGVyIHBoYXNl IHZhbHVlcyBmb3IgeAorICogQHBoYXNlX3N0ZXBfeDogICAgICBQaGFzZSBzdGVwIHZhbHVlcyBm b3IgeAorICogQGluaXRfcGhhc2VfeTogICAgICBJbml0aWFsIHNjYWxlciBwaGFzZSB2YWx1ZXMg Zm9yIHkKKyAqIEBwaGFzZV9zdGVwX3k6ICAgICAgUGhhc2Ugc3RlcCB2YWx1ZXMgZm9yIHkKKyAq IEBwcmVsb2FkX3g6ICAgICAgICAgSG9yaXpvbnRhbCBwcmVsb2FkIHZhbHVlCisgKiBAcHJlbG9h ZF95OiAgICAgICAgIFZlcnRpY2FsIHByZWxvYWQgdmFsdWUKKyAqIEBzcmNfd2lkdGg6ICAgICAg ICAgU291cmNlIHdpZHRoCisgKiBAc3JjX2hlaWdodDogICAgICAgIFNvdXJjZSBoZWlnaHQKKyAq IEBkc3Rfd2lkdGg6ICAgICAgICAgRGVzdGluYXRpb24gd2lkdGgKKyAqIEBkc3RfaGVpZ2h0OiAg ICAgICAgRGVzdGluYXRpb24gaGVpZ2h0CisgKiBAeV9yZ2JfZmlsdGVyX2NmZzogIFkvUkdCIHBs YW5lIGZpbHRlciBjb25maWd1cmF0aW9uCisgKiBAdXZfZmlsdGVyX2NmZzogICAgIFVWIHBsYW5l IGZpbHRlciBjb25maWd1cmF0aW9uCisgKiBAYWxwaGFfZmlsdGVyX2NmZzogIEFscGhhIGZpbHRl ciBjb25maWd1cmF0aW9uCisgKiBAYmxlbmRfY2ZnOiAgICAgICAgIFNlbGVjdGlvbiBvZiBibGVu ZCBjb2VmZmljaWVudHMKKyAqIEBsdXRfZmxhZzogICAgICAgICAgTFVUIGNvbmZpZ3VyYXRpb24g ZmxhZ3MKKyAqIEBkaXJfbHV0X2lkeDogICAgICAgMmQgNHg0IExVVCBpbmRleAorICogQHlfcmdi X2Npcl9sdXRfaWR4OiBZL1JHQiBjaXJjdWxhciBMVVQgaW5kZXgKKyAqIEB1dl9jaXJfbHV0X2lk eDogICAgVVYgY2lyY3VsYXIgTFVUIGluZGV4CisgKiBAeV9yZ2Jfc2VwX2x1dF9pZHg6IFkvUkdC IHNlcGFyYWJsZSBMVVQgaW5kZXgKKyAqIEB1dl9zZXBfbHV0X2lkeDogICAgVVYgc2VwYXJhYmxl IExVVCBpbmRleAorICogQGRlOiAgICAgICAgICAgICAgICBEZXRhaWwgZW5oYW5jZXIgc2V0dGlu Z3MKKyAqLworc3RydWN0IGRwdV9kcm1fc2NhbGVyX3YyIHsKKwkvKgorCSAqIEdlbmVyYWwgZGVm aW5pdGlvbnMKKwkgKi8KKwl1aW50MzJfdCBlbmFibGU7CisJdWludDMyX3QgZGlyX2VuOworCisJ LyoKKwkgKiBQaXggZXh0IHNldHRpbmdzCisJICovCisJc3RydWN0IGRwdV9kcm1fcGl4X2V4dF92 MSBwZTsKKworCS8qCisJICogRGVjaW1hdGlvbiBzZXR0aW5ncworCSAqLworCXVpbnQzMl90IGhv cnpfZGVjaW1hdGU7CisJdWludDMyX3QgdmVydF9kZWNpbWF0ZTsKKworCS8qCisJICogUGhhc2Ug c2V0dGluZ3MKKwkgKi8KKwlpbnQzMl90IGluaXRfcGhhc2VfeFtEUFVfTUFYX1BMQU5FU107CisJ aW50MzJfdCBwaGFzZV9zdGVwX3hbRFBVX01BWF9QTEFORVNdOworCWludDMyX3QgaW5pdF9waGFz ZV95W0RQVV9NQVhfUExBTkVTXTsKKwlpbnQzMl90IHBoYXNlX3N0ZXBfeVtEUFVfTUFYX1BMQU5F U107CisKKwl1aW50MzJfdCBwcmVsb2FkX3hbRFBVX01BWF9QTEFORVNdOworCXVpbnQzMl90IHBy ZWxvYWRfeVtEUFVfTUFYX1BMQU5FU107CisJdWludDMyX3Qgc3JjX3dpZHRoW0RQVV9NQVhfUExB TkVTXTsKKwl1aW50MzJfdCBzcmNfaGVpZ2h0W0RQVV9NQVhfUExBTkVTXTsKKworCXVpbnQzMl90 IGRzdF93aWR0aDsKKwl1aW50MzJfdCBkc3RfaGVpZ2h0OworCisJdWludDMyX3QgeV9yZ2JfZmls dGVyX2NmZzsKKwl1aW50MzJfdCB1dl9maWx0ZXJfY2ZnOworCXVpbnQzMl90IGFscGhhX2ZpbHRl cl9jZmc7CisJdWludDMyX3QgYmxlbmRfY2ZnOworCisJdWludDMyX3QgbHV0X2ZsYWc7CisJdWlu dDMyX3QgZGlyX2x1dF9pZHg7CisKKwkvKiBmb3IgWShSR0IpIGFuZCBVViBwbGFuZXMqLworCXVp bnQzMl90IHlfcmdiX2Npcl9sdXRfaWR4OworCXVpbnQzMl90IHV2X2Npcl9sdXRfaWR4OworCXVp bnQzMl90IHlfcmdiX3NlcF9sdXRfaWR4OworCXVpbnQzMl90IHV2X3NlcF9sdXRfaWR4OworCisJ LyoKKwkgKiBEZXRhaWwgZW5oYW5jZXIgc2V0dGluZ3MKKwkgKi8KKwlzdHJ1Y3QgZHB1X2RybV9k ZV92MSBkZTsKK307CisKKwogdTMyICpkcHVfaHdfdXRpbF9nZXRfbG9nX21hc2tfcHRyKHZvaWQp OwogCiB2b2lkIGRwdV9yZWdfd3JpdGUoc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYywKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwppbmRleCBkYjY2NTY2Li5mZTYxNGMw IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCkBAIC0zNSw3ICszNSw2 IEBACiAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKICNpbmNsdWRlICJkcHVfcGxhbmUuaCIKICNp bmNsdWRlICJkcHVfY3J0Yy5oIgotI2luY2x1ZGUgImRwdV9yZWdfZG1hLmgiCiAKICNkZWZpbmUg Q1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgImRwdV90cmFjZS5oIgpAQCAtMTA2NCw4ICsx MDYzLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9rbXNfaHdfZGVzdHJveShzdHJ1Y3QgZHB1X2ttcyAq ZHB1X2ttcykKIAlpZiAoZHB1X2ttcy0+bW1pbykKIAkJbXNtX2lvdW5tYXAoZHB1X2ttcy0+cGRl diwgZHB1X2ttcy0+bW1pbyk7CiAJZHB1X2ttcy0+bW1pbyA9IE5VTEw7Ci0KLQlkcHVfcmVnX2Rt YV9kZWluaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgZHB1X2ttc19kZXN0cm95KHN0cnVjdCBtc21f a21zICprbXMpCkBAIC0xNTExLDE0ICsxNTA4LDYgQEAgc3RhdGljIGludCBkcHVfa21zX2h3X2lu aXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAkJZ290byBwb3dlcl9lcnJvcjsKIAl9CiAKLQkvKiBJ bml0aWFsaXplIHJlZyBkbWEgYmxvY2sgd2hpY2ggaXMgYSBzaW5nbGV0b24gKi8KLQlyYyA9IGRw dV9yZWdfZG1hX2luaXQoZHB1X2ttcy0+cmVnX2RtYSwgZHB1X2ttcy0+Y2F0YWxvZywKLQkJCWRw dV9rbXMtPmRldik7Ci0JaWYgKHJjKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkOiByZWcgZG1hIGlu aXQgZmFpbGVkXG4iKTsKLQkJZ290byBwb3dlcl9lcnJvcjsKLQl9Ci0KIAlyYyA9IGRwdV9ybV9p bml0KCZkcHVfa21zLT5ybSwgZHB1X2ttcy0+Y2F0YWxvZywgZHB1X2ttcy0+bW1pbywKIAkJCWRw dV9rbXMtPmRldik7CiAJaWYgKHJjKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9wbGFuZS5jCmluZGV4IDNiMmM2MDkuLmU4MWNiMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9wbGFuZS5jCkBAIC0yMCw5ICsyMCw2IEBACiAKICNpbmNsdWRlIDxsaW51 eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgotI2luY2x1ZGUgPHVhcGkv ZHJtL2RwdV9kcm0uaD4KLSNpbmNsdWRlIDx1YXBpL2RybS9tc21fZHJtX3BwLmg+Ci0KICNpbmNs dWRlICJtc21fcHJvcC5oIgogI2luY2x1ZGUgIm1zbV9kcnYuaCIKIApAQCAtMzQsNyArMzEsNiBA QAogI2luY2x1ZGUgImRwdV9jcnRjLmgiCiAjaW5jbHVkZSAiZHB1X3ZiaWYuaCIKICNpbmNsdWRl ICJkcHVfcGxhbmUuaCIKLSNpbmNsdWRlICJkcHVfY29sb3JfcHJvY2Vzc2luZy5oIgogCiBzdGF0 aWMgYm9vbCBzdXNwZW5kX2JsYW5rID0gdHJ1ZTsKIG1vZHVsZV9wYXJhbShzdXNwZW5kX2JsYW5r LCBib29sLCAwNDAwKTsKQEAgLTkzLDggKzg5LDYgQEAgZW51bSBkcHVfcGxhbmVfcW9zIHsKIC8q CiAgKiBzdHJ1Y3QgZHB1X3BsYW5lIC0gbG9jYWwgZHB1IHBsYW5lIHN0cnVjdHVyZQogICogQGFz cGFjZTogYWRkcmVzcyBzcGFjZSBwb2ludGVyCi0gKiBAY3NjX2NmZzogRGVjb2RlZCB1c2VyIGNv bmZpZ3VyYXRpb24gZm9yIGNzYwotICogQGNzY191c3JfcHRyOiBQb2ludHMgdG8gY3NjX2NmZyBp ZiB2YWxpZCB1c2VyIGNvbmZpZyBhdmFpbGFibGUKICAqIEBjc2NfcHRyOiBQb2ludHMgdG8gZHB1 X2NzY19jZmcgc3RydWN0dXJlIHRvIHVzZSBmb3IgY3VycmVudAogICogQG1wbGFuZV9saXN0OiBM aXN0IG9mIG11bHRpcmVjdCBwbGFuZXMgb2YgdGhlIHNhbWUgcGlwZQogICogQGNhdGFsb2c6IFBv aW50cyB0byBkcHUgY2F0YWxvZyBzdHJ1Y3R1cmUKQEAgLTExMiw3ICsxMDYsNiBAQCBzdHJ1Y3Qg ZHB1X3BsYW5lIHsKIAogCXN0cnVjdCBkcHVfaHdfcGlwZSAqcGlwZV9odzsKIAlzdHJ1Y3QgZHB1 X2h3X3BpcGVfY2ZnIHBpcGVfY2ZnOwotCXN0cnVjdCBkcHVfaHdfc2hhcnBfY2ZnIHNoYXJwX2Nm ZzsKIAlzdHJ1Y3QgZHB1X2h3X3BpcGVfcW9zX2NmZyBwaXBlX3Fvc19jZmc7CiAJdWludDMyX3Qg Y29sb3JfZmlsbDsKIAlib29sIGlzX2Vycm9yOwpAQCAtMTIwLDE2ICsxMTMsMTEgQEAgc3RydWN0 IGRwdV9wbGFuZSB7CiAJYm9vbCBpc192aXJ0dWFsOwogCXN0cnVjdCBsaXN0X2hlYWQgbXBsYW5l X2xpc3Q7CiAJc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZzsKLQlib29sIHJldmFsaWRhdGU7 CiAKLQlzdHJ1Y3QgZHB1X2NzY19jZmcgY3NjX2NmZzsKLQlzdHJ1Y3QgZHB1X2NzY19jZmcgKmNz Y191c3JfcHRyOwogCXN0cnVjdCBkcHVfY3NjX2NmZyAqY3NjX3B0cjsKIAogCWNvbnN0IHN0cnVj dCBkcHVfc3NwcF9zdWJfYmxrcyAqcGlwZV9zYmxrOwotCiAJY2hhciBwaXBlX25hbWVbRFBVX05B TUVfU0laRV07Ci0KIAlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gcHJvcGVydHlfaW5mbzsKIAlz dHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgcHJvcGVydHlfZGF0YVtQTEFORV9QUk9QX0NPVU5UXTsK IAlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2JfaW5mbzsKQEAgLTQ0MiwxNyArNDMwLDYg QEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXRfcW9zX2N0cmwoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCiAJCQkmcGRwdS0+cGlwZV9xb3NfY2ZnKTsKIH0KIAotdm9pZCBkcHVfcGxhbmVfc2V0 X3JldmFsaWRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIGJvb2wgZW5hYmxlKQotewotCXN0 cnVjdCBkcHVfcGxhbmUgKnBkcHU7Ci0KLQlpZiAoIXBsYW5lKQotCQlyZXR1cm47Ci0KLQlwZHB1 ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKLQlwZHB1LT5yZXZhbGlkYXRlID0gZW5hYmxlOwotfQot CiBpbnQgZHB1X3BsYW5lX2Rhbmdlcl9zaWduYWxfY3RybChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwgYm9vbCBlbmFibGUpCiB7CiAJc3RydWN0IGRwdV9wbGFuZSAqcGRwdTsKQEAgLTU3Niw1NSAr NTUzLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXRfcW9zX3JlbWFwKHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lKQogfQogCiAvKioKLSAqIF9kcHVfcGxhbmVfc2V0X3RzX3ByZWZpbGwgLSBz ZXQgcHJlZmlsbCB3aXRoIHRyYWZmaWMgc2hhcGVyCi0gKiBAcGxhbmU6CVBvaW50ZXIgdG8gZHJt IHBsYW5lCi0gKiBAcHN0YXRlOglQb2ludGVyIHRvIGRwdSBwbGFuZSBzdGF0ZQotICovCi1zdGF0 aWMgdm9pZCBfZHB1X3BsYW5lX3NldF90c19wcmVmaWxsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAotCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9wbGFu ZSAqcGRwdTsKLQlzdHJ1Y3QgZHB1X2h3X3BpcGVfdHNfY2ZnIGNmZzsKLQlzdHJ1Y3QgbXNtX2Ry bV9wcml2YXRlICpwcml2OwotCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwotCi0JaWYgKCFwbGFu ZSB8fCAhcGxhbmUtPmRldikgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRzIik7Ci0J CXJldHVybjsKLQl9Ci0KLQlwcml2ID0gcGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7Ci0JaWYgKCFw cml2IHx8ICFwcml2LT5rbXMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIEtNUyByZWZlcmVuY2Vc biIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHB1X2ttcyA9IHRvX2RwdV9rbXMocHJpdi0+a21zKTsK LQlwZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKLQlpZiAoIXBkcHUtPnBpcGVfaHcpIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIHBpcGUgcmVmZXJlbmNlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQot CWlmICghcGRwdS0+cGlwZV9odyB8fCAhcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3RzX3ByZWZp bGwpCi0JCXJldHVybjsKLQotCV9kcHVfcGxhbmVfc2V0X3Fvc19jdHJsKHBsYW5lLCBmYWxzZSwg RFBVX1BMQU5FX1FPU19WQkxBTktfQU1PUlRJWkUpOwotCi0JbWVtc2V0KCZjZmcsIDAsIHNpemVv ZihjZmcpKTsKLQljZmcuc2l6ZSA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLAotCQkJ UExBTkVfUFJPUF9QUkVGSUxMX1NJWkUpOwotCWNmZy50aW1lID0gZHB1X3BsYW5lX2dldF9wcm9w ZXJ0eShwc3RhdGUsCi0JCQlQTEFORV9QUk9QX1BSRUZJTExfVElNRSk7Ci0KLQlEUFVfREVCVUco InBsYW5lJWQgc2l6ZTolbGx1IHRpbWU6JWxsdVxuIiwKLQkJCXBsYW5lLT5iYXNlLmlkLCBjZmcu c2l6ZSwgY2ZnLnRpbWUpOwotCURQVV9FVlQzMl9WRVJCT1NFKERSTUlEKHBsYW5lKSwgY2ZnLnNp emUsIGNmZy50aW1lKTsKLQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfdHNfcHJlZmlsbChwZHB1 LT5waXBlX2h3LCAmY2ZnLAotCQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXgpOwotfQotCi0vKioK ICAqIF9kcHVfcGxhbmVfZ2V0X2FzcGFjZTogZ2V0cyB0aGUgYWRkcmVzcyBzcGFjZQogICovCiBz dGF0aWMgaW50IF9kcHVfcGxhbmVfZ2V0X2FzcGFjZSgKQEAgLTcwMSwzNiArNjI5LDYgQEAgc3Rh dGljIGlubGluZSB2b2lkIF9kcHVfcGxhbmVfc2V0X3NjYW5vdXQoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCiAJfQogfQogCi1zdGF0aWMgaW50IF9kcHVfcGxhbmVfc2V0dXBfc2NhbGVyM19sdXQo c3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKLQkJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRl KQotewotCXN0cnVjdCBkcHVfaHdfc2NhbGVyM19jZmcgKmNmZzsKLQlpbnQgcmV0ID0gMDsKLQot CWlmICghcGRwdSB8fCAhcHN0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmdzXG4iKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY2ZnID0gJnBzdGF0ZS0+c2NhbGVyM19jZmc7Ci0K LQljZmctPmRpcl9sdXQgPSBtc21fcHJvcGVydHlfZ2V0X2Jsb2IoCi0JCQkmcGRwdS0+cHJvcGVy dHlfaW5mbywKLQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLCAmY2ZnLT5kaXJfbGVuLAotCQkJ UExBTkVfUFJPUF9TQ0FMRVJfTFVUX0VEKTsKLQljZmctPmNpcl9sdXQgPSBtc21fcHJvcGVydHlf Z2V0X2Jsb2IoCi0JCQkmcGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCSZwc3RhdGUtPnByb3BlcnR5 X3N0YXRlLCAmY2ZnLT5jaXJfbGVuLAotCQkJUExBTkVfUFJPUF9TQ0FMRVJfTFVUX0NJUik7Ci0J Y2ZnLT5zZXBfbHV0ID0gbXNtX3Byb3BlcnR5X2dldF9ibG9iKAotCQkJJnBkcHUtPnByb3BlcnR5 X2luZm8sCi0JCQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgJmNmZy0+c2VwX2xlbiwKLQkJCVBM QU5FX1BST1BfU0NBTEVSX0xVVF9TRVApOwotCWlmICghY2ZnLT5kaXJfbHV0IHx8ICFjZmctPmNp cl9sdXQgfHwgIWNmZy0+c2VwX2x1dCkKLQkJcmV0ID0gLUVOT0RBVEE7Ci0JcmV0dXJuIHJldDsK LX0KLQogc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXR1cF9zY2FsZXIzKHN0cnVjdCBkcHVfcGxh bmUgKnBkcHUsCiAJCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZSwKIAkJdWludDMyX3Qg c3JjX3csIHVpbnQzMl90IHNyY19oLCB1aW50MzJfdCBkc3RfdywgdWludDMyX3QgZHN0X2gsCkBA IC03MzgsNyArNjM2LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXR1cF9zY2FsZXIzKHN0 cnVjdCBkcHVfcGxhbmUgKnBkcHUsCiAJCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmbXQsCiAJ CXVpbnQzMl90IGNocm9tYV9zdWJzbXBsX2gsIHVpbnQzMl90IGNocm9tYV9zdWJzbXBsX3YpCiB7 Ci0JdWludDMyX3QgZGVjaW1hdGVkLCBpOworCXVpbnQzMl90IGk7CiAKIAlpZiAoIXBkcHUgfHwg IXBzdGF0ZSB8fCAhc2NhbGVfY2ZnIHx8ICFmbXQgfHwgIWNocm9tYV9zdWJzbXBsX2ggfHwKIAkJ CSFjaHJvbWFfc3Vic21wbF92KSB7CkBAIC03NTIsMTQgKzY1MCwxMCBAQCBzdGF0aWMgdm9pZCBf ZHB1X3BsYW5lX3NldHVwX3NjYWxlcjMoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIAltZW1zZXQo c2NhbGVfY2ZnLCAwLCBzaXplb2YoKnNjYWxlX2NmZykpOwogCW1lbXNldCgmcHN0YXRlLT5waXhl bF9leHQsIDAsIHNpemVvZihzdHJ1Y3QgZHB1X2h3X3BpeGVsX2V4dCkpOwogCi0JZGVjaW1hdGVk ID0gREVDSU1BVEVEX0RJTUVOU0lPTihzcmNfdywKLQkJCXBkcHUtPnBpcGVfY2ZnLmhvcnpfZGVj aW1hdGlvbik7CiAJc2NhbGVfY2ZnLT5waGFzZV9zdGVwX3hbRFBVX1NTUFBfQ09NUF8wXSA9Ci0J CW11bHRfZnJhYygoMSA8PCBQSEFTRV9TVEVQX1NISUZUKSwgZGVjaW1hdGVkLCBkc3Rfdyk7Ci0J ZGVjaW1hdGVkID0gREVDSU1BVEVEX0RJTUVOU0lPTihzcmNfaCwKLQkJCXBkcHUtPnBpcGVfY2Zn LnZlcnRfZGVjaW1hdGlvbik7CisJCW11bHRfZnJhYygoMSA8PCBQSEFTRV9TVEVQX1NISUZUKSwg c3JjX3csIGRzdF93KTsKIAlzY2FsZV9jZmctPnBoYXNlX3N0ZXBfeVtEUFVfU1NQUF9DT01QXzBd ID0KLQkJbXVsdF9mcmFjKCgxIDw8IFBIQVNFX1NURVBfU0hJRlQpLCBkZWNpbWF0ZWQsIGRzdF9o KTsKKwkJbXVsdF9mcmFjKCgxIDw8IFBIQVNFX1NURVBfU0hJRlQpLCBzcmNfaCwgZHN0X2gpOwog CiAKIAlzY2FsZV9jZmctPnBoYXNlX3N0ZXBfeVtEUFVfU1NQUF9DT01QXzFfMl0gPQpAQCAtNzc4 LDEwICs2NzIsOCBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldHVwX3NjYWxlcjMoc3RydWN0 IGRwdV9wbGFuZSAqcGRwdSwKIAkJc2NhbGVfY2ZnLT5waGFzZV9zdGVwX3lbRFBVX1NTUFBfQ09N UF8wXTsKIAogCWZvciAoaSA9IDA7IGkgPCBEUFVfTUFYX1BMQU5FUzsgaSsrKSB7Ci0JCXNjYWxl X2NmZy0+c3JjX3dpZHRoW2ldID0gREVDSU1BVEVEX0RJTUVOU0lPTihzcmNfdywKLQkJCQlwZHB1 LT5waXBlX2NmZy5ob3J6X2RlY2ltYXRpb24pOwotCQlzY2FsZV9jZmctPnNyY19oZWlnaHRbaV0g PSBERUNJTUFURURfRElNRU5TSU9OKHNyY19oLAotCQkJCXBkcHUtPnBpcGVfY2ZnLnZlcnRfZGVj aW1hdGlvbik7CisJCXNjYWxlX2NmZy0+c3JjX3dpZHRoW2ldID0gc3JjX3c7CisJCXNjYWxlX2Nm Zy0+c3JjX2hlaWdodFtpXSA9IHNyY19oOwogCQlpZiAoaSA9PSBEUFVfU1NQUF9DT01QXzFfMiB8 fCBpID09IERQVV9TU1BQX0NPTVBfMikgewogCQkJc2NhbGVfY2ZnLT5zcmNfd2lkdGhbaV0gLz0g Y2hyb21hX3N1YnNtcGxfaDsKIAkJCXNjYWxlX2NmZy0+c3JjX2hlaWdodFtpXSAvPSBjaHJvbWFf c3Vic21wbF92OwpAQCAtODA3LDE1NCArNjk5LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9z ZXR1cF9zY2FsZXIzKHN0cnVjdCBkcHVfcGxhbmUgKnBkcHUsCiAJc2NhbGVfY2ZnLT5lbmFibGUg PSAxOwogfQogCi0vKioKLSAqIF9kcHVfcGxhbmVfc2V0dXBfc2NhbGVyMiAtIGRldGVybWluZSBk ZWZhdWx0IHNjYWxlciBwaGFzZSBzdGVwcy9maWx0ZXIgdHlwZQotICogQHBkcHU6IFBvaW50ZXIg dG8gRFBVIHBsYW5lIG9iamVjdAotICogQHNyYzogU291cmNlIHNpemUKLSAqIEBkc3Q6IERlc3Rp bmF0aW9uIHNpemUKLSAqIEBwaGFzZV9zdGVwczogUG9pbnRlciB0byBvdXRwdXQgYXJyYXkgZm9y IHBoYXNlIHN0ZXBzCi0gKiBAZmlsdGVyOiBQb2ludGVyIHRvIG91dHB1dCBhcnJheSBmb3IgZmls dGVyIHR5cGUKLSAqIEBmbXQ6IFBvaW50ZXIgdG8gZm9ybWF0IGRlZmluaXRpb24KLSAqIEBjaHJv bWFfc3Vic2FtcGxpbmc6IFN1YnNhbXBsaW5nIGFtb3VudCBmb3IgY2hyb21hIGNoYW5uZWwKLSAq Ci0gKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MKLSAqLwotc3RhdGljIGludCBfZHB1X3BsYW5lX3Nl dHVwX3NjYWxlcjIoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKLQkJdWludDMyX3Qgc3JjLCB1aW50 MzJfdCBkc3QsIHVpbnQzMl90ICpwaGFzZV9zdGVwcywKLQkJZW51bSBkcHVfaHdfZmlsdGVyICpm aWx0ZXIsIGNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmbXQsCi0JCXVpbnQzMl90IGNocm9tYV9z dWJzYW1wbGluZykKLXsKLQlpZiAoIXBkcHUgfHwgIXBoYXNlX3N0ZXBzIHx8ICFmaWx0ZXIgfHwg IWZtdCkgewotCQlEUFVfRVJST1IoCi0JCQkiaW52YWxpZCBhcmcocyksIHBsYW5lICVkIHBoYXNl ICVkIGZpbHRlciAlZCBmbXQgJWRcbiIsCi0JCQlwZHB1ICE9IDAsIHBoYXNlX3N0ZXBzICE9IDAs IGZpbHRlciAhPSAwLCBmbXQgIT0gMCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGNh bGN1bGF0ZSBwaGFzZSBzdGVwcywgbGVhdmUgaW5pdCBwaGFzZSBhcyB6ZXJvICovCi0JcGhhc2Vf c3RlcHNbRFBVX1NTUFBfQ09NUF8wXSA9Ci0JCW11bHRfZnJhYygxIDw8IFBIQVNFX1NURVBfU0hJ RlQsIHNyYywgZHN0KTsKLQlwaGFzZV9zdGVwc1tEUFVfU1NQUF9DT01QXzFfMl0gPQotCQlwaGFz ZV9zdGVwc1tEUFVfU1NQUF9DT01QXzBdIC8gY2hyb21hX3N1YnNhbXBsaW5nOwotCXBoYXNlX3N0 ZXBzW0RQVV9TU1BQX0NPTVBfMl0gPSBwaGFzZV9zdGVwc1tEUFVfU1NQUF9DT01QXzFfMl07Ci0J cGhhc2Vfc3RlcHNbRFBVX1NTUFBfQ09NUF8zXSA9IHBoYXNlX3N0ZXBzW0RQVV9TU1BQX0NPTVBf MF07Ci0KLQkvKiBjYWxjdWxhdGUgc2NhbGVyIGNvbmZpZywgaWYgbmVjZXNzYXJ5ICovCi0JaWYg KERQVV9GT1JNQVRfSVNfWVVWKGZtdCkgfHwgc3JjICE9IGRzdCkgewotCQlmaWx0ZXJbRFBVX1NT UFBfQ09NUF8zXSA9Ci0JCQkoc3JjIDw9IGRzdCkgPyBEUFVfU0NBTEVfRklMVEVSX0JJTCA6Ci0J CQlEUFVfU0NBTEVfRklMVEVSX1BDTU47Ci0KLQkJaWYgKERQVV9GT1JNQVRfSVNfWVVWKGZtdCkp IHsKLQkJCWZpbHRlcltEUFVfU1NQUF9DT01QXzBdID0gRFBVX1NDQUxFX0ZJTFRFUl9DQTsKLQkJ CWZpbHRlcltEUFVfU1NQUF9DT01QXzFfMl0gPSBmaWx0ZXJbRFBVX1NTUFBfQ09NUF8zXTsKLQkJ fSBlbHNlIHsKLQkJCWZpbHRlcltEUFVfU1NQUF9DT01QXzBdID0gZmlsdGVyW0RQVV9TU1BQX0NP TVBfM107Ci0JCQlmaWx0ZXJbRFBVX1NTUFBfQ09NUF8xXzJdID0KLQkJCQlEUFVfU0NBTEVfRklM VEVSX05FQVJFU1Q7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBkaXNhYmxlIHNjYWxlciAqLwotCQlm aWx0ZXJbRFBVX1NTUFBfQ09NUF8wXSA9IERQVV9TQ0FMRV9GSUxURVJfTUFYOwotCQlmaWx0ZXJb RFBVX1NTUFBfQ09NUF8xXzJdID0gRFBVX1NDQUxFX0ZJTFRFUl9NQVg7Ci0JCWZpbHRlcltEUFVf U1NQUF9DT01QXzNdID0gRFBVX1NDQUxFX0ZJTFRFUl9NQVg7Ci0JfQotCXJldHVybiAwOwotfQot Ci0vKioKLSAqIF9kcHVfcGxhbmVfc2V0dXBfcGl4ZWxfZXh0IC0gZGV0ZXJtaW5lIGRlZmF1bHQg cGl4ZWwgZXh0ZW5zaW9uIHZhbHVlcwotICogQHBkcHU6IFBvaW50ZXIgdG8gRFBVIHBsYW5lIG9i amVjdAotICogQHNyYzogU291cmNlIHNpemUKLSAqIEBkc3Q6IERlc3RpbmF0aW9uIHNpemUKLSAq IEBkZWNpbWF0ZWRfc3JjOiBTb3VyY2Ugc2l6ZSBhZnRlciBkZWNpbWF0aW9uLCBpZiBhbnkKLSAq IEBwaGFzZV9zdGVwczogUG9pbnRlciB0byBvdXRwdXQgYXJyYXkgZm9yIHBoYXNlIHN0ZXBzCi0g KiBAb3V0X3NyYzogT3V0cHV0IGFycmF5IGZvciBwaXhlbCBleHRlbnNpb24gdmFsdWVzCi0gKiBA b3V0X2VkZ2UxOiBPdXRwdXQgYXJyYXkgZm9yIHBpeGVsIGV4dGVuc2lvbiBmaXJzdCBlZGdlCi0g KiBAb3V0X2VkZ2UyOiBPdXRwdXQgYXJyYXkgZm9yIHBpeGVsIGV4dGVuc2lvbiBzZWNvbmQgZWRn ZQotICogQGZpbHRlcjogUG9pbnRlciB0byBhcnJheSBmb3IgZmlsdGVyIHR5cGUKLSAqIEBmbXQ6 IFBvaW50ZXIgdG8gZm9ybWF0IGRlZmluaXRpb24KLSAqIEBjaHJvbWFfc3Vic2FtcGxpbmc6IFN1 YnNhbXBsaW5nIGFtb3VudCBmb3IgY2hyb21hIGNoYW5uZWwKLSAqIEBwb3N0X2NvbXBhcmU6IFdo ZXRoZXIgdG8gY2hyb21hIHN1YnNhbXBsZWQgc291cmNlIHNpemUgZm9yIGNvbXBhcmlzaW9ucwot ICovCi1zdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldHVwX3BpeGVsX2V4dChzdHJ1Y3QgZHB1X3Bs YW5lICpwZHB1LAotCQl1aW50MzJfdCBzcmMsIHVpbnQzMl90IGRzdCwgdWludDMyX3QgZGVjaW1h dGVkX3NyYywKLQkJdWludDMyX3QgKnBoYXNlX3N0ZXBzLCB1aW50MzJfdCAqb3V0X3NyYywgaW50 ICpvdXRfZWRnZTEsCi0JCWludCAqb3V0X2VkZ2UyLCBlbnVtIGRwdV9od19maWx0ZXIgKmZpbHRl ciwKLQkJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCwgdWludDMyX3QgY2hyb21hX3N1YnNh bXBsaW5nLAotCQlib29sIHBvc3RfY29tcGFyZSkKLXsKLQlpbnQ2NF90IGVkZ2UxLCBlZGdlMiwg Y2FmOwotCXVpbnQzMl90IHNyY193b3JrOwotCWludCBpLCB0bXA7Ci0KLQlpZiAocGRwdSAmJiBw aGFzZV9zdGVwcyAmJiBvdXRfc3JjICYmIG91dF9lZGdlMSAmJgotCQkJb3V0X2VkZ2UyICYmIGZp bHRlciAmJiBmbXQpIHsKLQkJLyogaGFuZGxlIENBRiBmb3IgWVVWIGZvcm1hdHMgKi8KLQkJaWYg KERQVV9GT1JNQVRfSVNfWVVWKGZtdCkgJiYgKmZpbHRlciA9PSBEUFVfU0NBTEVfRklMVEVSX0NB KQotCQkJY2FmID0gUEhBU0VfU1RFUF9VTklUX1NDQUxFOwotCQllbHNlCi0JCQljYWYgPSAwOwot Ci0JCWZvciAoaSA9IDA7IGkgPCBEUFVfTUFYX1BMQU5FUzsgaSsrKSB7Ci0JCQlzcmNfd29yayA9 IGRlY2ltYXRlZF9zcmM7Ci0JCQlpZiAoaSA9PSBEUFVfU1NQUF9DT01QXzFfMiB8fCBpID09IERQ VV9TU1BQX0NPTVBfMikKLQkJCQlzcmNfd29yayAvPSBjaHJvbWFfc3Vic2FtcGxpbmc7Ci0JCQlp ZiAocG9zdF9jb21wYXJlKQotCQkJCXNyYyA9IHNyY193b3JrOwotCQkJaWYgKCFEUFVfRk9STUFU X0lTX1lVVihmbXQpICYmIChzcmMgPT0gZHN0KSkgewotCQkJCS8qIHVuaXR5ICovCi0JCQkJZWRn ZTEgPSAwOwotCQkJCWVkZ2UyID0gMDsKLQkJCX0gZWxzZSBpZiAoZHN0ID49IHNyYykgewotCQkJ CS8qIHVwc2NhbGUgKi8KLQkJCQllZGdlMSA9ICgxIDw8IFBIQVNFX1JFU0lEVUFMKTsKLQkJCQll ZGdlMSAtPSBjYWY7Ci0JCQkJZWRnZTIgPSAoMSA8PCBQSEFTRV9SRVNJRFVBTCk7Ci0JCQkJZWRn ZTIgKz0gKGRzdCAtIDEpICogKihwaGFzZV9zdGVwcyArIGkpOwotCQkJCWVkZ2UyIC09IChzcmNf d29yayAtIDEpICogUEhBU0VfU1RFUF9VTklUX1NDQUxFOwotCQkJCWVkZ2UyICs9IGNhZjsKLQkJ CQllZGdlMiA9IC0oZWRnZTIpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBkb3duc2NhbGUgKi8KLQkJ CQllZGdlMSA9IDA7Ci0JCQkJZWRnZTIgPSAoZHN0IC0gMSkgKiAqKHBoYXNlX3N0ZXBzICsgaSk7 Ci0JCQkJZWRnZTIgLT0gKHNyY193b3JrIC0gMSkgKiBQSEFTRV9TVEVQX1VOSVRfU0NBTEU7Ci0J CQkJZWRnZTIgKz0gKihwaGFzZV9zdGVwcyArIGkpOwotCQkJCWVkZ2UyID0gLShlZGdlMik7Ci0J CQl9Ci0KLQkJCS8qIG9ubHkgZW5hYmxlIENBRiBmb3IgbHVtYSBwbGFuZSAqLwotCQkJY2FmID0g MDsKLQotCQkJLyogcG9wdWxhdGUgb3V0cHV0IGFycmF5cyAqLwotCQkJKihvdXRfc3JjICsgaSkg PSBzcmNfd29yazsKLQotCQkJLyogZWRnZSB1cGRhdGVzIHRha2VuIGZyb20gX19weGxfZXh0bl9o ZWxwZXIgKi8KLQkJCWlmIChlZGdlMSA+PSAwKSB7Ci0JCQkJdG1wID0gKHVpbnQzMl90KWVkZ2Ux OwotCQkJCXRtcCA+Pj0gUEhBU0VfU1RFUF9TSElGVDsKLQkJCQkqKG91dF9lZGdlMSArIGkpID0g LXRtcDsKLQkJCX0gZWxzZSB7Ci0JCQkJdG1wID0gKHVpbnQzMl90KSgtZWRnZTEpOwotCQkJCSoo b3V0X2VkZ2UxICsgaSkgPQotCQkJCQkodG1wICsgUEhBU0VfU1RFUF9VTklUX1NDQUxFIC0gMSkg Pj4KLQkJCQkJUEhBU0VfU1RFUF9TSElGVDsKLQkJCX0KLQkJCWlmIChlZGdlMiA+PSAwKSB7Ci0J CQkJdG1wID0gKHVpbnQzMl90KWVkZ2UyOwotCQkJCXRtcCA+Pj0gUEhBU0VfU1RFUF9TSElGVDsK LQkJCQkqKG91dF9lZGdlMiArIGkpID0gLXRtcDsKLQkJCX0gZWxzZSB7Ci0JCQkJdG1wID0gKHVp bnQzMl90KSgtZWRnZTIpOwotCQkJCSoob3V0X2VkZ2UyICsgaSkgPQotCQkJCQkodG1wICsgUEhB U0VfU1RFUF9VTklUX1NDQUxFIC0gMSkgPj4KLQkJCQkJUEhBU0VfU1RFUF9TSElGVDsKLQkJCX0K LQkJfQotCX0KLX0KLQogc3RhdGljIGlubGluZSB2b2lkIF9kcHVfcGxhbmVfc2V0dXBfY3NjKHN0 cnVjdCBkcHVfcGxhbmUgKnBkcHUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfY3NjX2Nm ZyBkcHVfY3NjX1lVVjJSR0JfNjAxTCA9IHsKQEAgLTk5MSwxMCArNzM1LDcgQEAgc3RhdGljIGlu bGluZSB2b2lkIF9kcHVfcGxhbmVfc2V0dXBfY3NjKHN0cnVjdCBkcHVfcGxhbmUgKnBkcHUpCiAJ CXJldHVybjsKIAl9CiAKLQkvKiByZXZlcnQgdG8ga2VybmVsIGRlZmF1bHQgaWYgb3ZlcnJpZGUg bm90IGF2YWlsYWJsZSAqLwotCWlmIChwZHB1LT5jc2NfdXNyX3B0cikKLQkJcGRwdS0+Y3NjX3B0 ciA9IHBkcHUtPmNzY191c3JfcHRyOwotCWVsc2UgaWYgKEJJVChEUFVfU1NQUF9DU0NfMTBCSVQp ICYgcGRwdS0+ZmVhdHVyZXMpCisJaWYgKEJJVChEUFVfU1NQUF9DU0NfMTBCSVQpICYgcGRwdS0+ ZmVhdHVyZXMpCiAJCXBkcHUtPmNzY19wdHIgPSAoc3RydWN0IGRwdV9jc2NfY2ZnICopJmRwdV9j c2MxMF9ZVVYyUkdCXzYwMUw7CiAJZWxzZQogCQlwZHB1LT5jc2NfcHRyID0gKHN0cnVjdCBkcHVf Y3NjX2NmZyAqKSZkcHVfY3NjX1lVVjJSR0JfNjAxTDsKQEAgLTEwMDUsNjAgKzc0Niw2IEBAIHN0 YXRpYyBpbmxpbmUgdm9pZCBfZHB1X3BsYW5lX3NldHVwX2NzYyhzdHJ1Y3QgZHB1X3BsYW5lICpw ZHB1KQogCQkJcGRwdS0+Y3NjX3B0ci0+Y3NjX212WzJdKTsKIH0KIAotc3RhdGljIHZvaWQgZHB1 X2NvbG9yX3Byb2Nlc3NfcGxhbmVfc2V0dXAoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCi17Ci0J c3RydWN0IGRwdV9wbGFuZSAqcGRwdTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7 Ci0JdWludDMyX3QgaHVlLCBzYXR1cmF0aW9uLCB2YWx1ZSwgY29udHJhc3Q7Ci0Jc3RydWN0IGRy bV9tc21fbWVtY29sICptZW1jb2wgPSBOVUxMOwotCXNpemVfdCBtZW1jb2xfc3ogPSAwOwotCi0J cGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7Ci0JcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRl KHBsYW5lLT5zdGF0ZSk7Ci0KLQlodWUgPSAodWludDMyX3QpIGRwdV9wbGFuZV9nZXRfcHJvcGVy dHkocHN0YXRlLCBQTEFORV9QUk9QX0hVRV9BREpVU1QpOwotCWlmIChwZHB1LT5waXBlX2h3LT5v cHMuc2V0dXBfcGFfaHVlKQotCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcGFfaHVlKHBkcHUt PnBpcGVfaHcsICZodWUpOwotCXNhdHVyYXRpb24gPSAodWludDMyX3QpIGRwdV9wbGFuZV9nZXRf cHJvcGVydHkocHN0YXRlLAotCQlQTEFORV9QUk9QX1NBVFVSQVRJT05fQURKVVNUKTsKLQlpZiAo cGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BhX3NhdCkKLQkJcGRwdS0+cGlwZV9ody0+b3BzLnNl dHVwX3BhX3NhdChwZHB1LT5waXBlX2h3LCAmc2F0dXJhdGlvbik7Ci0JdmFsdWUgPSAodWludDMy X3QpIGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLAotCQlQTEFORV9QUk9QX1ZBTFVFX0FE SlVTVCk7Ci0JaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9wYV92YWwpCi0JCXBkcHUtPnBp cGVfaHctPm9wcy5zZXR1cF9wYV92YWwocGRwdS0+cGlwZV9odywgJnZhbHVlKTsKLQljb250cmFz dCA9ICh1aW50MzJfdCkgZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsCi0JCVBMQU5FX1BS T1BfQ09OVFJBU1RfQURKVVNUKTsKLQlpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BhX2Nv bnQpCi0JCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9wYV9jb250KHBkcHUtPnBpcGVfaHcsICZj b250cmFzdCk7Ci0KLQlpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BhX21lbWNvbG9yKSB7 Ci0JCS8qIFNraW4gbWVtb3J5IGNvbG9yIHNldHVwICovCi0JCW1lbWNvbCA9IG1zbV9wcm9wZXJ0 eV9nZXRfYmxvYigmcGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCQkJJnBzdGF0ZS0+cHJvcGVydHlf c3RhdGUsCi0JCQkJCSZtZW1jb2xfc3osCi0JCQkJCVBMQU5FX1BST1BfU0tJTl9DT0xPUik7Ci0J CXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9wYV9tZW1jb2xvcihwZHB1LT5waXBlX2h3LAotCQkJ CQlNRU1DT0xPUl9TS0lOLCBtZW1jb2wpOwotCi0JCS8qIFNreSBtZW1vcnkgY29sb3Igc2V0dXAg Ki8KLQkJbWVtY29sID0gbXNtX3Byb3BlcnR5X2dldF9ibG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZv LAotCQkJCQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwKLQkJCQkJJm1lbWNvbF9zeiwKLQkJCQkJ UExBTkVfUFJPUF9TS1lfQ09MT1IpOwotCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcGFfbWVt Y29sb3IocGRwdS0+cGlwZV9odywKLQkJCQkJTUVNQ09MT1JfU0tZLCBtZW1jb2wpOwotCi0JCS8q IEZvbGlhZ2UgbWVtb3J5IGNvbG9yIHNldHVwICovCi0JCW1lbWNvbCA9IG1zbV9wcm9wZXJ0eV9n ZXRfYmxvYigmcGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3Rh dGUsCi0JCQkJCSZtZW1jb2xfc3osCi0JCQkJCVBMQU5FX1BST1BfRk9MSUFHRV9DT0xPUik7Ci0J CXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9wYV9tZW1jb2xvcihwZHB1LT5waXBlX2h3LAotCQkJ CQlNRU1DT0xPUl9GT0xJQUdFLCBtZW1jb2wpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgX2RwdV9w bGFuZV9zZXR1cF9zY2FsZXIoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIAkJc3RydWN0IGRwdV9w bGFuZV9zdGF0ZSAqcHN0YXRlLAogCQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm10LCBib29s IGNvbG9yX2ZpbGwpCkBAIC0xMDc0LDk5ICs3NjEsMjAgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFu ZV9zZXR1cF9zY2FsZXIoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIAogCXBlID0gJnBzdGF0ZS0+ cGl4ZWxfZXh0OwogCi0JcGRwdS0+cGlwZV9jZmcuaG9yel9kZWNpbWF0aW9uID0KLQkJZHB1X3Bs YW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsIFBMQU5FX1BST1BfSF9ERUNJTUFURSk7Ci0JcGRwdS0+ cGlwZV9jZmcudmVydF9kZWNpbWF0aW9uID0KLQkJZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3Rh dGUsIFBMQU5FX1BST1BfVl9ERUNJTUFURSk7Ci0KIAkvKiBkb24ndCBjaHJvbWEgc3Vic2FtcGxl IGlmIGRlY2ltYXRpbmcgKi8KLQljaHJvbWFfc3Vic21wbF9oID0gcGRwdS0+cGlwZV9jZmcuaG9y el9kZWNpbWF0aW9uID8gMSA6CisJY2hyb21hX3N1YnNtcGxfaCA9CiAJCWRybV9mb3JtYXRfaG9y el9jaHJvbWFfc3Vic2FtcGxpbmcoZm10LT5iYXNlLnBpeGVsX2Zvcm1hdCk7Ci0JY2hyb21hX3N1 YnNtcGxfdiA9IHBkcHUtPnBpcGVfY2ZnLnZlcnRfZGVjaW1hdGlvbiA/IDEgOgorCWNocm9tYV9z dWJzbXBsX3YgPQogCQlkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKGZtdC0+YmFz ZS5waXhlbF9mb3JtYXQpOwogCi0JLyogdXBkYXRlIHNjYWxlciAqLwotCWlmIChwZHB1LT5mZWF0 dXJlcyAmIEJJVChEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzKSkgewotCQlpbnQgcmM7Ci0KLQkJaWYg KCFjb2xvcl9maWxsICYmICFwZHB1LT5kZWJ1Z2ZzX2RlZmF1bHRfc2NhbGUpCi0JCQlyYyA9IF9k cHVfcGxhbmVfc2V0dXBfc2NhbGVyM19sdXQocGRwdSwgcHN0YXRlKTsKLQkJZWxzZQotCQkJcmMg PSAtRUlOVkFMOwotCQlpZiAocmMgfHwgcHN0YXRlLT5zY2FsZXJfY2hlY2tfc3RhdGUgIT0KLQkJ CURQVV9QTEFORV9TQ0xDSEVDS19TQ0FMRVJfVjIpIHsKLQkJCS8qIGNhbGN1bGF0ZSBkZWZhdWx0 IGNvbmZpZyBmb3IgUVNFRUQzICovCi0JCQlfZHB1X3BsYW5lX3NldHVwX3NjYWxlcjMocGRwdSwg cHN0YXRlLAotCQkJCQlwZHB1LT5waXBlX2NmZy5zcmNfcmVjdC53LAotCQkJCQlwZHB1LT5waXBl X2NmZy5zcmNfcmVjdC5oLAotCQkJCQlwZHB1LT5waXBlX2NmZy5kc3RfcmVjdC53LAotCQkJCQlw ZHB1LT5waXBlX2NmZy5kc3RfcmVjdC5oLAotCQkJCQkmcHN0YXRlLT5zY2FsZXIzX2NmZywgZm10 LAotCQkJCQljaHJvbWFfc3Vic21wbF9oLCBjaHJvbWFfc3Vic21wbF92KTsKLQkJfQotCX0gZWxz ZSBpZiAocHN0YXRlLT5zY2FsZXJfY2hlY2tfc3RhdGUgIT0gRFBVX1BMQU5FX1NDTENIRUNLX1ND QUxFUl9WMSB8fAotCQkJY29sb3JfZmlsbCB8fCBwZHB1LT5kZWJ1Z2ZzX2RlZmF1bHRfc2NhbGUp IHsKLQkJdWludDMyX3QgZGVjaV9kaW0sIGk7Ci0KLQkJLyogY2FsY3VsYXRlIGRlZmF1bHQgY29u ZmlndXJhdGlvbiBmb3IgUVNFRUQyICovCi0JCW1lbXNldChwZSwgMCwgc2l6ZW9mKHN0cnVjdCBk cHVfaHdfcGl4ZWxfZXh0KSk7Ci0KLQkJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJkZWZhdWx0IGNv bmZpZ1xuIik7Ci0JCWRlY2lfZGltID0gREVDSU1BVEVEX0RJTUVOU0lPTihwZHB1LT5waXBlX2Nm Zy5zcmNfcmVjdC53LAotCQkJCXBkcHUtPnBpcGVfY2ZnLmhvcnpfZGVjaW1hdGlvbik7Ci0JCV9k cHVfcGxhbmVfc2V0dXBfc2NhbGVyMihwZHB1LAotCQkJCWRlY2lfZGltLAotCQkJCXBkcHUtPnBp cGVfY2ZnLmRzdF9yZWN0LncsCi0JCQkJcGUtPnBoYXNlX3N0ZXBfeCwKLQkJCQlwZS0+aG9yel9m aWx0ZXIsIGZtdCwgY2hyb21hX3N1YnNtcGxfaCk7Ci0KLQkJaWYgKERQVV9GT1JNQVRfSVNfWVVW KGZtdCkpCi0JCQlkZWNpX2RpbSAmPSB+MHgxOwotCQlfZHB1X3BsYW5lX3NldHVwX3BpeGVsX2V4 dChwZHB1LCBwZHB1LT5waXBlX2NmZy5zcmNfcmVjdC53LAotCQkJCXBkcHUtPnBpcGVfY2ZnLmRz dF9yZWN0LncsIGRlY2lfZGltLAotCQkJCXBlLT5waGFzZV9zdGVwX3gsCi0JCQkJcGUtPnJvaV93 LAotCQkJCXBlLT5udW1fZXh0X3B4bHNfbGVmdCwKLQkJCQlwZS0+bnVtX2V4dF9weGxzX3JpZ2h0 LCBwZS0+aG9yel9maWx0ZXIsIGZtdCwKLQkJCQljaHJvbWFfc3Vic21wbF9oLCAwKTsKLQotCQlk ZWNpX2RpbSA9IERFQ0lNQVRFRF9ESU1FTlNJT04ocGRwdS0+cGlwZV9jZmcuc3JjX3JlY3QuaCwK LQkJCQlwZHB1LT5waXBlX2NmZy52ZXJ0X2RlY2ltYXRpb24pOwotCQlfZHB1X3BsYW5lX3NldHVw X3NjYWxlcjIocGRwdSwKLQkJCQlkZWNpX2RpbSwKLQkJCQlwZHB1LT5waXBlX2NmZy5kc3RfcmVj dC5oLAotCQkJCXBlLT5waGFzZV9zdGVwX3ksCi0JCQkJcGUtPnZlcnRfZmlsdGVyLCBmbXQsIGNo cm9tYV9zdWJzbXBsX3YpOwotCQlfZHB1X3BsYW5lX3NldHVwX3BpeGVsX2V4dChwZHB1LCBwZHB1 LT5waXBlX2NmZy5zcmNfcmVjdC5oLAotCQkJCXBkcHUtPnBpcGVfY2ZnLmRzdF9yZWN0LmgsIGRl Y2lfZGltLAotCQkJCXBlLT5waGFzZV9zdGVwX3ksCi0JCQkJcGUtPnJvaV9oLAotCQkJCXBlLT5u dW1fZXh0X3B4bHNfdG9wLAotCQkJCXBlLT5udW1fZXh0X3B4bHNfYnRtLCBwZS0+dmVydF9maWx0 ZXIsIGZtdCwKLQkJCQljaHJvbWFfc3Vic21wbF92LCAxKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwg RFBVX01BWF9QTEFORVM7IGkrKykgewotCQkJaWYgKHBlLT5udW1fZXh0X3B4bHNfbGVmdFtpXSA+ PSAwKQotCQkJCXBlLT5sZWZ0X3JwdFtpXSA9IHBlLT5udW1fZXh0X3B4bHNfbGVmdFtpXTsKLQkJ CWVsc2UKLQkJCQlwZS0+bGVmdF9mdGNoW2ldID0gcGUtPm51bV9leHRfcHhsc19sZWZ0W2ldOwot Ci0JCQlpZiAocGUtPm51bV9leHRfcHhsc19yaWdodFtpXSA+PSAwKQotCQkJCXBlLT5yaWdodF9y cHRbaV0gPSBwZS0+bnVtX2V4dF9weGxzX3JpZ2h0W2ldOwotCQkJZWxzZQotCQkJCXBlLT5yaWdo dF9mdGNoW2ldID0gcGUtPm51bV9leHRfcHhsc19yaWdodFtpXTsKLQotCQkJaWYgKHBlLT5udW1f ZXh0X3B4bHNfdG9wW2ldID49IDApCi0JCQkJcGUtPnRvcF9ycHRbaV0gPSBwZS0+bnVtX2V4dF9w eGxzX3RvcFtpXTsKLQkJCWVsc2UKLQkJCQlwZS0+dG9wX2Z0Y2hbaV0gPSBwZS0+bnVtX2V4dF9w eGxzX3RvcFtpXTsKLQotCQkJaWYgKHBlLT5udW1fZXh0X3B4bHNfYnRtW2ldID49IDApCi0JCQkJ cGUtPmJ0bV9ycHRbaV0gPSBwZS0+bnVtX2V4dF9weGxzX2J0bVtpXTsKLQkJCWVsc2UKLQkJCQlw ZS0+YnRtX2Z0Y2hbaV0gPSBwZS0+bnVtX2V4dF9weGxzX2J0bVtpXTsKLQkJfQotCX0KKwkvKiB1 cGRhdGUgc2NhbGVyLiBjYWxjdWxhdGUgZGVmYXVsdCBjb25maWcgZm9yIFFTRUVEMyAqLworCV9k cHVfcGxhbmVfc2V0dXBfc2NhbGVyMyhwZHB1LCBwc3RhdGUsCisJCQlwZHB1LT5waXBlX2NmZy5z cmNfcmVjdC53LAorCQkJcGRwdS0+cGlwZV9jZmcuc3JjX3JlY3QuaCwKKwkJCXBkcHUtPnBpcGVf Y2ZnLmRzdF9yZWN0LncsCisJCQlwZHB1LT5waXBlX2NmZy5kc3RfcmVjdC5oLAorCQkJJnBzdGF0 ZS0+c2NhbGVyM19jZmcsIGZtdCwKKwkJCWNocm9tYV9zdWJzbXBsX2gsIGNocm9tYV9zdWJzbXBs X3YpOwogfQogCiAvKioKQEAgLTE0NjMsMTg5ICsxMDcxLDYgQEAgc3RhdGljIHZvaWQgZHB1X3Bs YW5lX2NsZWFudXBfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJbXNtX2ZyYW1lYnVmZmVy X2NsZWFudXAob2xkX3N0YXRlLT5mYiwgb2xkX3BzdGF0ZS0+YXNwYWNlKTsKIH0KIAotc3RhdGlj IHZvaWQgX2RwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVja19tb2RlX2NoYW5nZWQoc3RydWN0IGRw dV9wbGFuZSAqcGRwdSwKLQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCi0JCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRl ICpwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOwotCXN0cnVjdCBkcHVfcGxhbmVf c3RhdGUgKm9sZF9wc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUob2xkX3N0YXRlKTsKLQlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgKm9sZF9mYjsKLQotCS8qIG5vIG5lZWQgdG8gY2hlY2sg aXQgYWdhaW4gKi8KLQlpZiAocHN0YXRlLT5kaXJ0eSA9PSBEUFVfUExBTkVfRElSVFlfQUxMKQot CQlyZXR1cm47Ci0KLQlpZiAoIWRwdV9wbGFuZV9lbmFibGVkKHN0YXRlKSB8fCAhZHB1X3BsYW5l X2VuYWJsZWQob2xkX3N0YXRlKQotCQkJfHwgcGRwdS0+aXNfZXJyb3IpIHsKLQkJRFBVX0RFQlVH X1BMQU5FKHBkcHUsCi0JCQkiZW5hYmxpbmcvZGlzYWJsaW5nIGZ1bGwgbW9kZXNldCByZXF1aXJl ZFxuIik7Ci0JCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX0FMTDsKLQl9IGVsc2Ug aWYgKHRvX2RwdV9wbGFuZV9zdGF0ZShvbGRfc3RhdGUpLT5wZW5kaW5nKSB7Ci0JCURQVV9ERUJV R19QTEFORShwZHB1LCAic3RpbGwgcGVuZGluZ1xuIik7Ci0JCXBzdGF0ZS0+ZGlydHkgfD0gRFBV X1BMQU5FX0RJUlRZX0FMTDsKLQl9IGVsc2UgaWYgKHBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4ICE9 IG9sZF9wc3RhdGUtPm11bHRpcmVjdF9pbmRleCB8fAotCQkJcHN0YXRlLT5tdWx0aXJlY3RfbW9k ZSAhPSBvbGRfcHN0YXRlLT5tdWx0aXJlY3RfbW9kZSkgewotCQlEUFVfREVCVUdfUExBTkUocGRw dSwgIm11bHRpcmVjdCBjb25maWcgdXBkYXRlZFxuIik7Ci0JCXBzdGF0ZS0+ZGlydHkgfD0gRFBV X1BMQU5FX0RJUlRZX0FMTDsKLQl9IGVsc2UgaWYgKHN0YXRlLT5jcnRjX3cgIT0gb2xkX3N0YXRl LT5jcnRjX3cgfHwKLQkJICAgc3RhdGUtPmNydGNfaCAhPSBvbGRfc3RhdGUtPmNydGNfaCB8fAot CQkgICBzdGF0ZS0+Y3J0Y194ICE9IG9sZF9zdGF0ZS0+Y3J0Y194IHx8Ci0JCSAgIHN0YXRlLT5j cnRjX3kgIT0gb2xkX3N0YXRlLT5jcnRjX3kpIHsKLQkJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJj cnRjIHJlY3QgdXBkYXRlZFxuIik7Ci0JCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZ X1JFQ1RTOwotCX0gZWxzZSBpZiAocHN0YXRlLT5leGNsX3JlY3QudyAhPSBvbGRfcHN0YXRlLT5l eGNsX3JlY3QudyB8fAotCQkgICBwc3RhdGUtPmV4Y2xfcmVjdC5oICE9IG9sZF9wc3RhdGUtPmV4 Y2xfcmVjdC5oIHx8Ci0JCSAgIHBzdGF0ZS0+ZXhjbF9yZWN0LnggIT0gb2xkX3BzdGF0ZS0+ZXhj bF9yZWN0LnggfHwKLQkJICAgcHN0YXRlLT5leGNsX3JlY3QueSAhPSBvbGRfcHN0YXRlLT5leGNs X3JlY3QueSkgewotCQlEUFVfREVCVUdfUExBTkUocGRwdSwgImV4Y2xfcmVjdCB1cGRhdGVkXG4i KTsKLQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfUkVDVFM7Ci0JfQotCi0JZmIg PSBzdGF0ZS0+ZmI7Ci0Jb2xkX2ZiID0gb2xkX3N0YXRlLT5mYjsKLQotCWlmICghZmIgfHwgIW9s ZF9mYikgewotCQlEUFVfREVCVUdfUExBTkUocGRwdSwgImNhbid0IGNvbXBhcmUgZmIgaGFuZGxl c1xuIik7Ci0JfSBlbHNlIGlmIChmYi0+Zm9ybWF0LT5mb3JtYXQgIT0gb2xkX2ZiLT5mb3JtYXQt PmZvcm1hdCkgewotCQlEUFVfREVCVUdfUExBTkUocGRwdSwgImZvcm1hdCBjaGFuZ2VcbiIpOwot CQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9ESVJUWV9GT1JNQVQgfCBEUFVfUExBTkVfRElS VFlfUkVDVFM7Ci0JfSBlbHNlIHsKLQkJdWludDY0X3QgbmV3X21vZCA9IGZiLT5tb2RpZmllcjsK LQkJdWludDY0X3Qgb2xkX21vZCA9IG9sZF9mYi0+bW9kaWZpZXI7Ci0JCXVpbnQzMl90ICpuZXdf cGl0Y2hlcyA9IGZiLT5waXRjaGVzOwotCQl1aW50MzJfdCAqb2xkX3BpdGNoZXMgPSBvbGRfZmIt PnBpdGNoZXM7Ci0JCXVpbnQzMl90ICpuZXdfb2Zmc2V0ID0gZmItPm9mZnNldHM7Ci0JCXVpbnQz Ml90ICpvbGRfb2Zmc2V0ID0gb2xkX2ZiLT5vZmZzZXRzOwotCQlpbnQgaTsKLQotCQlpZiAobmV3 X21vZCAhPSBvbGRfbW9kKSB7Ci0JCQlEUFVfREVCVUdfUExBTkUocGRwdSwKLQkJCQkiZm9ybWF0 IG1vZGlmaWVycyBjaGFuZ2VcIlwKLQkJCQluZXdfbW9kZTolbGx1IG9sZF9tb2RlOiVsbHVcbiIs Ci0JCQkJbmV3X21vZCwgb2xkX21vZCk7Ci0JCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9E SVJUWV9GT1JNQVQgfAotCQkJCURQVV9QTEFORV9ESVJUWV9SRUNUUzsKLQkJfQotCi0JCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZiLT5waXRjaGVzKTsgaSsrKSB7Ci0JCQlpZiAobmV3X3Bp dGNoZXNbaV0gIT0gb2xkX3BpdGNoZXNbaV0pIHsKLQkJCQlEUFVfREVCVUdfUExBTkUocGRwdSwK LQkJCQkJInBpdGNoZXMgY2hhbmdlIHBsYW5lOiVkXCJcCi0JCQkJCW9sZF9waXRjaGVzOiV1IG5l d19waXRjaGVzOiV1XG4iLAotCQkJCQlpLCBvbGRfcGl0Y2hlc1tpXSwgbmV3X3BpdGNoZXNbaV0p OwotCQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX1JFQ1RTOwotCQkJCWJyZWFr OwotCQkJfQotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZiLT5vZmZzZXRzKTsg aSsrKSB7Ci0JCQlpZiAobmV3X29mZnNldFtpXSAhPSBvbGRfb2Zmc2V0W2ldKSB7Ci0JCQkJRFBV X0RFQlVHX1BMQU5FKHBkcHUsCi0JCQkJCSJvZmZzZXQgY2hhbmdlIHBsYW5lOiVkXCJcCi0JCQkJ CW9sZF9vZmZzZXQ6JXUgbmV3X29mZnNldDoldVxuIiwKLQkJCQkJaSwgb2xkX29mZnNldFtpXSwg bmV3X29mZnNldFtpXSk7Ci0JCQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfRk9S TUFUIHwKLQkJCQkJRFBVX1BMQU5FX0RJUlRZX1JFQ1RTOwotCQkJCWJyZWFrOwotCQkJfQotCQl9 Ci0JfQotfQotCi1zdGF0aWMgaW50IF9kcHVfcGxhbmVfdmFsaWRhdGVfc2NhbGVyX3YyKHN0cnVj dCBkcHVfcGxhbmUgKnBkcHUsCi0JCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZSwKLQkJ Y29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCwKLQkJdWludDMyX3QgaW1nX3csIHVpbnQzMl90 IGltZ19oLAotCQl1aW50MzJfdCBzcmNfdywgdWludDMyX3Qgc3JjX2gsCi0JCXVpbnQzMl90IGRl Y2lfdywgdWludDMyX3QgZGVjaV9oKQotewotCWludCBpOwotCi0JaWYgKCFwZHB1IHx8ICFwc3Rh dGUgfHwgIWZtdCkgewotCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImludmFsaWQgYXJndW1lbnRz XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogZG9uJ3QgcnVuIGNoZWNrcyB1bmxl c3Mgc2NhbGVyIGRhdGEgd2FzIGNoYW5nZWQgKi8KLQlpZiAocHN0YXRlLT5zY2FsZXJfY2hlY2tf c3RhdGUgIT0gRFBVX1BMQU5FX1NDTENIRUNLX1NDQUxFUl9WMl9DSEVDSykKLQkJcmV0dXJuIDA7 Ci0KLQlwc3RhdGUtPnNjYWxlcl9jaGVja19zdGF0ZSA9IERQVV9QTEFORV9TQ0xDSEVDS19JTlZB TElEOwotCi0JZm9yIChpID0gMDsgaSA8IERQVV9NQVhfUExBTkVTOyBpKyspIHsKLQkJdWludDMy X3QgaG9yX3JlcV9waXhlbHMsIGhvcl9mZXRjaF9waXhlbHM7Ci0JCXVpbnQzMl90IHZlcnRfcmVx X3BpeGVscywgdmVydF9mZXRjaF9waXhlbHM7Ci0JCXVpbnQzMl90IHNyY193X3RtcCwgc3JjX2hf dG1wOwotCi0JCS8qIHJlLXVzZSBjb2xvciBwbGFuZSAxJ3MgY29uZmlnIGZvciBwbGFuZSAyICov Ci0JCWlmIChpID09IDIpCi0JCQljb250aW51ZTsKLQotCQlzcmNfd190bXAgPSBzcmNfdzsKLQkJ c3JjX2hfdG1wID0gc3JjX2g7Ci0KLQkJLyoKLQkJICogRm9yIGNocm9tYSBwbGFuZSwgd2lkdGgg aXMgaGFsZiBmb3IgdGhlIGZvbGxvd2luZyBzdWIgc2FtcGxlZAotCQkgKiBmb3JtYXRzLiBFeGNl cHQgaW4gY2FzZSBvZiBkZWNpbWF0aW9uLCB3aGVyZSBoYXJkd2FyZSBhdm9pZHMKLQkJICogMSBs aW5lIG9mIGRlY2ltYXRpb24gaW5zdGVhZCBvZiBkb3duc2FtcGxpbmcuCi0JCSAqLwotCQlpZiAo aSA9PSAxKSB7Ci0JCQlpZiAoIWRlY2lfdyAmJgotCQkJCQkoZm10LT5jaHJvbWFfc2FtcGxlID09 IERQVV9DSFJPTUFfNDIwIHx8Ci0JCQkJCSBmbXQtPmNocm9tYV9zYW1wbGUgPT0gRFBVX0NIUk9N QV9IMlYxKSkKLQkJCQlzcmNfd190bXAgPj49IDE7Ci0JCQlpZiAoIWRlY2lfaCAmJgotCQkJCQko Zm10LT5jaHJvbWFfc2FtcGxlID09IERQVV9DSFJPTUFfNDIwIHx8Ci0JCQkJCSBmbXQtPmNocm9t YV9zYW1wbGUgPT0gRFBVX0NIUk9NQV9IMVYyKSkKLQkJCQlzcmNfaF90bXAgPj49IDE7Ci0JCX0K LQotCQlob3JfcmVxX3BpeGVscyA9IHBzdGF0ZS0+cGl4ZWxfZXh0LnJvaV93W2ldOwotCQl2ZXJ0 X3JlcV9waXhlbHMgPSBwc3RhdGUtPnBpeGVsX2V4dC5yb2lfaFtpXTsKLQotCQlob3JfZmV0Y2hf cGl4ZWxzID0gREVDSU1BVEVEX0RJTUVOU0lPTihzcmNfd190bXAgKwotCQkJKGludDhfdCkocHN0 YXRlLT5waXhlbF9leHQubGVmdF9mdGNoW2ldICYgMHhGRikgKwotCQkJKGludDhfdCkocHN0YXRl LT5waXhlbF9leHQucmlnaHRfZnRjaFtpXSAmIDB4RkYpLAotCQkJZGVjaV93KTsKLQkJdmVydF9m ZXRjaF9waXhlbHMgPSBERUNJTUFURURfRElNRU5TSU9OKHNyY19oX3RtcCArCi0JCQkoaW50OF90 KShwc3RhdGUtPnBpeGVsX2V4dC50b3BfZnRjaFtpXSAmIDB4RkYpICsKLQkJCShpbnQ4X3QpKHBz dGF0ZS0+cGl4ZWxfZXh0LmJ0bV9mdGNoW2ldICYgMHhGRiksCi0JCQlkZWNpX2gpOwotCi0JCWlm ICgoaG9yX3JlcV9waXhlbHMgIT0gaG9yX2ZldGNoX3BpeGVscykgfHwKLQkJCShob3JfZmV0Y2hf cGl4ZWxzID4gaW1nX3cpIHx8Ci0JCQkodmVydF9yZXFfcGl4ZWxzICE9IHZlcnRfZmV0Y2hfcGl4 ZWxzKSB8fAotCQkJKHZlcnRfZmV0Y2hfcGl4ZWxzID4gaW1nX2gpKSB7Ci0JCQlEUFVfRVJST1Jf UExBTkUocGRwdSwKLQkJCQkJInJlcSAlZC8lZCwgZmV0Y2ggJWQvJWQsIHNyYyAlZHglZFxuIiwK LQkJCQkJaG9yX3JlcV9waXhlbHMsIHZlcnRfcmVxX3BpeGVscywKLQkJCQkJaG9yX2ZldGNoX3Bp eGVscywgdmVydF9mZXRjaF9waXhlbHMsCi0JCQkJCWltZ193LCBpbWdfaCk7Ci0JCQlyZXR1cm4g LUVJTlZBTDsKLQkJfQotCi0JCS8qCi0JCSAqIEFscGhhIHBsYW5lIGNhbiBvbmx5IGJlIHNjYWxl ZCB1c2luZyBiaWxpbmVhciBvciBwaXhlbAotCQkgKiByZXBlYXQvZHJvcCwgc3JjX3dpZHRoIGFu ZCBzcmNfaGVpZ2h0IGFyZSBvbmx5IHNwZWNpZmllZAotCQkgKiBmb3IgWSBhbmQgVVYgcGxhbmUK LQkJICovCi0JCWlmIChpICE9IDMgJiYKLQkJCShob3JfcmVxX3BpeGVscyAhPSBwc3RhdGUtPnNj YWxlcjNfY2ZnLnNyY193aWR0aFtpXSB8fAotCQkJdmVydF9yZXFfcGl4ZWxzICE9IHBzdGF0ZS0+ c2NhbGVyM19jZmcuc3JjX2hlaWdodFtpXSkpIHsKLQkJCURQVV9FUlJPUl9QTEFORShwZHB1LAot CQkJCSJyb2lbJWRdICVkLyVkLCBzY2FsZXIgc3JjICVkeCVkLCBzcmMgJWR4JWRcbiIsCi0JCQkJ aSwgcHN0YXRlLT5waXhlbF9leHQucm9pX3dbaV0sCi0JCQkJcHN0YXRlLT5waXhlbF9leHQucm9p X2hbaV0sCi0JCQkJcHN0YXRlLT5zY2FsZXIzX2NmZy5zcmNfd2lkdGhbaV0sCi0JCQkJcHN0YXRl LT5zY2FsZXIzX2NmZy5zcmNfaGVpZ2h0W2ldLAotCQkJCXNyY193LCBzcmNfaCk7Ci0JCQlyZXR1 cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCXBzdGF0ZS0+c2NhbGVyX2NoZWNrX3N0YXRlID0gRFBV X1BMQU5FX1NDTENIRUNLX1NDQUxFUl9WMjsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBk cHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQogewpAQCAtMTY1NCw3ICsxMDc5LDYgQEAgc3Rh dGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCiAJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwogCWNvbnN0IHN0cnVjdCBkcHVf Zm9ybWF0ICpmbXQ7CiAJc3RydWN0IGRwdV9yZWN0IHNyYywgZHN0OwotCXVpbnQzMl90IGRlY2lf dywgZGVjaV9oLCBzcmNfZGVjaV93LCBzcmNfZGVjaV9oOwogCXVpbnQzMl90IG1heF91cHNjYWxl LCBtYXhfZG93bnNjYWxlLCBtaW5fc3JjX3NpemUsIG1heF9saW5ld2lkdGg7CiAJYm9vbCBxMTZf ZGF0YSA9IHRydWU7CiAKQEAgLTE2NzQsMTggKzEwOTgsMTIgQEAgc3RhdGljIGludCBkcHVfcGxh bmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCWdvdG8gZXhp dDsKIAl9CiAKLQlkZWNpX3cgPSBkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwgUExBTkVf UFJPUF9IX0RFQ0lNQVRFKTsKLQlkZWNpX2ggPSBkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0 ZSwgUExBTkVfUFJPUF9WX0RFQ0lNQVRFKTsKLQogCS8qIHNyYyB2YWx1ZXMgYXJlIGluIFExNiBm aXhlZCBwb2ludCwgY29udmVydCB0byBpbnRlZ2VyICovCiAJUE9QVUxBVEVfUkVDVCgmc3JjLCBz dGF0ZS0+c3JjX3gsIHN0YXRlLT5zcmNfeSwgc3RhdGUtPnNyY193LAogCQlzdGF0ZS0+c3JjX2gs IHExNl9kYXRhKTsKIAlQT1BVTEFURV9SRUNUKCZkc3QsIHN0YXRlLT5jcnRjX3gsIHN0YXRlLT5j cnRjX3ksIHN0YXRlLT5jcnRjX3csCiAJCXN0YXRlLT5jcnRjX2gsICFxMTZfZGF0YSk7CiAKLQlz cmNfZGVjaV93ID0gREVDSU1BVEVEX0RJTUVOU0lPTihzcmMudywgZGVjaV93KTsKLQlzcmNfZGVj aV9oID0gREVDSU1BVEVEX0RJTUVOU0lPTihzcmMuaCwgZGVjaV9oKTsKLQogCW1heF91cHNjYWxl ID0gcGRwdS0+cGlwZV9zYmxrLT5tYXh1cHNjYWxlOwogCW1heF9kb3duc2NhbGUgPSBwZHB1LT5w aXBlX3NibGstPm1heGR3bnNjYWxlOwogCW1heF9saW5ld2lkdGggPSBwZHB1LT5waXBlX3NibGst PmNvbW1vbi0+bWF4bGluZXdpZHRoOwpAQCAtMTY5NCw3ICsxMTEyLDcgQEAgc3RhdGljIGludCBk cHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCWRw dV9wbGFuZV9lbmFibGVkKHBsYW5lLT5zdGF0ZSksIGRwdV9wbGFuZV9lbmFibGVkKHN0YXRlKSk7 CiAKIAlpZiAoIWRwdV9wbGFuZV9lbmFibGVkKHN0YXRlKSkKLQkJZ290byBtb2Rlc2V0X3VwZGF0 ZTsKKwkJZ290byBleGl0OwogCiAJZm10ID0gdG9fZHB1X2Zvcm1hdChtc21fZnJhbWVidWZmZXJf Zm9ybWF0KHN0YXRlLT5mYikpOwogCkBAIC0xNzMyLDE4ICsxMTUwLDYgQEAgc3RhdGljIGludCBk cHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCXJl dCA9IC1FSU5WQUw7CiAKIAkvKiBkZWNpbWF0aW9uIHZhbGlkYXRpb24gKi8KLQl9IGVsc2UgaWYg KGRlY2lfdyB8fCBkZWNpX2gpIHsKLQkJaWYgKChkZWNpX3cgPiBwZHB1LT5waXBlX3NibGstPmNv bW1vbi0+bWF4aGRlY2lleHApIHx8Ci0JCQkoZGVjaV9oID4gcGRwdS0+cGlwZV9zYmxrLT5jb21t b24tPm1heHZkZWNpZXhwKSkgewotCQkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsCi0JCQkJCSJ0b28g bXVjaCBkZWNpbWF0aW9uIHJlcXVlc3RlZFxuIik7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQl9IGVs c2UgaWYgKGZtdC0+ZmV0Y2hfbW9kZSAhPSBEUFVfRkVUQ0hfTElORUFSKSB7Ci0JCQlEUFVfRVJS T1JfUExBTkUocGRwdSwKLQkJCQkJImRlY2ltYXRpb24gcmVxdWlyZXMgbGluZWFyIGZldGNoXG4i KTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCX0KLQogCX0gZWxzZSBpZiAoIShwZHB1LT5mZWF0dXJl cyAmIERQVV9TU1BQX1NDQUxFUikgJiYKIAkJKChzcmMudyAhPSBkc3QudykgfHwgKHNyYy5oICE9 IGRzdC5oKSkpIHsKIAkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsCkBAIC0xNzUyLDU3ICsxMTU4LDIz IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAogCQlyZXQgPSAtRUlOVkFMOwogCiAJLyogY2hlY2sgZGVjaW1hdGVkIHNvdXJj ZSB3aWR0aCAqLwotCX0gZWxzZSBpZiAoc3JjX2RlY2lfdyA+IG1heF9saW5ld2lkdGgpIHsKKwl9 IGVsc2UgaWYgKHNyYy53ID4gbWF4X2xpbmV3aWR0aCkgewogCQlEUFVfRVJST1JfUExBTkUocGRw dSwKLQkJCQkiaW52YWxpZCBzcmMgdzoldSwgZGVjaSB3OiV1LCBsaW5lIHc6JXVcbiIsCi0JCQkJ c3JjLncsIHNyY19kZWNpX3csIG1heF9saW5ld2lkdGgpOworCQkJCSJpbnZhbGlkIHNyYyB3OiV1 LCBsaW5lIHc6JXVcbiIsCisJCQkJc3JjLncsIG1heF9saW5ld2lkdGgpOwogCQlyZXQgPSAtRTJC SUc7CiAKIAkvKiBjaGVjayBtYXggc2NhbGVyIGNhcGFiaWxpdHkgKi8KLQl9IGVsc2UgaWYgKCgo c3JjX2RlY2lfdyAqIG1heF91cHNjYWxlKSA8IGRzdC53KSB8fAotCQkoKHNyY19kZWNpX2ggKiBt YXhfdXBzY2FsZSkgPCBkc3QuaCkgfHwKLQkJKChkc3QudyAqIG1heF9kb3duc2NhbGUpIDwgc3Jj X2RlY2lfdykgfHwKLQkJKChkc3QuaCAqIG1heF9kb3duc2NhbGUpIDwgc3JjX2RlY2lfaCkpIHsK Kwl9IGVsc2UgaWYgKCgoc3JjLncgKiBtYXhfdXBzY2FsZSkgPCBkc3QudykgfHwKKwkJKChzcmMu aCAqIG1heF91cHNjYWxlKSA8IGRzdC5oKSB8fAorCQkoKGRzdC53ICogbWF4X2Rvd25zY2FsZSkg PCBzcmMudykgfHwKKwkJKChkc3QuaCAqIG1heF9kb3duc2NhbGUpIDwgc3JjLmgpKSB7CiAJCURQ VV9FUlJPUl9QTEFORShwZHB1LAogCQkJInRvbyBtdWNoIHNjYWxpbmcgcmVxdWVzdGVkICV1eCV1 LT4ldXgldVxuIiwKLQkJCXNyY19kZWNpX3csIHNyY19kZWNpX2gsIGRzdC53LCBkc3QuaCk7CisJ CQlzcmMudywgc3JjLmgsIGRzdC53LCBkc3QuaCk7CiAJCXJldCA9IC1FMkJJRzsKLQl9IGVsc2Ug aWYgKF9kcHVfcGxhbmVfdmFsaWRhdGVfc2NhbGVyX3YyKHBkcHUsIHBzdGF0ZSwgZm10LAotCQkJ CXN0YXRlLT5mYi0+d2lkdGgsCi0JCQkJc3RhdGUtPmZiLT5oZWlnaHQsCi0JCQkJc3JjLncsIHNy Yy5oLCBkZWNpX3csIGRlY2lfaCkpIHsKLQkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKLQkvKiBjaGVj ayBleGNsIHJlY3QgY29uZmlncyAqLwotCWlmICghcmV0ICYmIHBzdGF0ZS0+ZXhjbF9yZWN0Lncg JiYgcHN0YXRlLT5leGNsX3JlY3QuaCkgewotCQlzdHJ1Y3QgZHB1X3JlY3QgaW50ZXJzZWN0Owot Ci0JCS8qCi0JCSAqIENoZWNrIGV4Y2x1c2lvbiByZWN0IGFnYWluc3Qgc3JjIHJlY3QuCi0JCSAq IGl0IG11c3QgaW50ZXJzZWN0IHdpdGggc291cmNlIHJlY3QuCi0JCSAqLwotCQlkcHVfa21zX3Jl Y3RfaW50ZXJzZWN0KCZzcmMsICZwc3RhdGUtPmV4Y2xfcmVjdCwgJmludGVyc2VjdCk7Ci0JCWlm IChpbnRlcnNlY3QudyAhPSBwc3RhdGUtPmV4Y2xfcmVjdC53IHx8Ci0JCQkJaW50ZXJzZWN0Lmgg IT0gcHN0YXRlLT5leGNsX3JlY3QuaCB8fAotCQkJCURQVV9GT1JNQVRfSVNfWVVWKGZtdCkpIHsK LQkJCURQVV9FUlJPUl9QTEFORShwZHB1LAotCQkJCSJpbnZhbGlkIGV4Y2xfcmVjdDp7JWQsJWQs JWQsJWR9IHNyYzp7JWQsJWQsJWQsJWR9LCBmbXQ6ICU0LjRzXG4iLAotCQkJCXBzdGF0ZS0+ZXhj bF9yZWN0LngsIHBzdGF0ZS0+ZXhjbF9yZWN0LnksCi0JCQkJcHN0YXRlLT5leGNsX3JlY3Qudywg cHN0YXRlLT5leGNsX3JlY3QuaCwKLQkJCQlzcmMueCwgc3JjLnksIHNyYy53LCBzcmMuaCwKLQkJ CQkoY2hhciAqKSZmbXQtPmJhc2UucGl4ZWxfZm9ybWF0KTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0J CX0KLQkJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJleGNsX3JlY3Q6IHslZCwlZCwlZCwlZH1cbiIs Ci0JCQkJcHN0YXRlLT5leGNsX3JlY3QueCwgcHN0YXRlLT5leGNsX3JlY3QueSwKLQkJCQlwc3Rh dGUtPmV4Y2xfcmVjdC53LCBwc3RhdGUtPmV4Y2xfcmVjdC5oKTsKLQl9Ci0KLW1vZGVzZXRfdXBk YXRlOgotCWlmICghcmV0KQotCQlfZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrX21vZGVfY2hh bmdlZChwZHB1LAotCQkJCXN0YXRlLCBwbGFuZS0+c3RhdGUpOwogZXhpdDoKIAlyZXR1cm4gcmV0 OwogfQpAQCAtMTg5NSw3ICsxMjY3LDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9t aWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiOwogCXN0cnVjdCBkcHVfcmVjdCBzcmMsIGRzdDsKIAlib29sIHExNl9kYXRhID0gdHJ1 ZTsKLQlpbnQgaWR4OwogCiAJaWYgKCFwbGFuZSkgewogCQlEUFVfRVJST1IoImludmFsaWQgcGxh bmVcbiIpOwpAQCAtMTkyNSwxNTAgKzEyOTYsNjkgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3Nw cF9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCWZtdCA9IHRvX2RwdV9m b3JtYXQobXNtX2ZyYW1lYnVmZmVyX2Zvcm1hdChmYikpOwogCW5wbGFuZXMgPSBmbXQtPm51bV9w bGFuZXM7CiAKLQkvKiBmb3JjZSByZXByb2dyYW1taW5nIG9mIGFsbCB0aGUgcGFyYW1ldGVycywg aWYgdGhlIGZsYWcgaXMgc2V0ICovCi0JaWYgKHBkcHUtPnJldmFsaWRhdGUpIHsKLQkJRFBVX0RF QlVHKCJwbGFuZTolZCAtIHJlY29uZmlndXJlIGFsbCB0aGUgcGFyYW1ldGVyc1xuIiwKLQkJCQlw bGFuZS0+YmFzZS5pZCk7Ci0JCXBzdGF0ZS0+ZGlydHkgPSBEUFVfUExBTkVfRElSVFlfQUxMOwot CQlwZHB1LT5yZXZhbGlkYXRlID0gZmFsc2U7Ci0JfQotCi0JLyogZGV0ZXJtaW5lIHdoYXQgbmVl ZHMgdG8gYmUgcmVmcmVzaGVkICovCi0Jd2hpbGUgKChpZHggPSBtc21fcHJvcGVydHlfcG9wX2Rp cnR5KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0ZSkp ID49IDApIHsKLQkJc3dpdGNoIChpZHgpIHsKLQkJY2FzZSBQTEFORV9QUk9QX1NDQUxFUl9WMToK LQkJY2FzZSBQTEFORV9QUk9QX1NDQUxFUl9WMjoKLQkJY2FzZSBQTEFORV9QUk9QX1NDQUxFUl9M VVRfRUQ6Ci0JCWNhc2UgUExBTkVfUFJPUF9TQ0FMRVJfTFVUX0NJUjoKLQkJY2FzZSBQTEFORV9Q Uk9QX1NDQUxFUl9MVVRfU0VQOgotCQljYXNlIFBMQU5FX1BST1BfSF9ERUNJTUFURToKLQkJY2Fz ZSBQTEFORV9QUk9QX1ZfREVDSU1BVEU6Ci0JCWNhc2UgUExBTkVfUFJPUF9TUkNfQ09ORklHOgot CQljYXNlIFBMQU5FX1BST1BfWlBPUzoKLQkJY2FzZSBQTEFORV9QUk9QX0VYQ0xfUkVDVF9WMToK LQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX1JFQ1RTOwotCQkJYnJlYWs7Ci0J CWNhc2UgUExBTkVfUFJPUF9DU0NfVjE6Ci0JCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9E SVJUWV9GT1JNQVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBQTEFORV9QUk9QX0NPTE9SX0ZJTEw6Ci0J CQkvKiBwb3RlbnRpYWxseSBuZWVkIHRvIHJlZnJlc2ggZXZlcnl0aGluZyAqLwotCQkJcHN0YXRl LT5kaXJ0eSA9IERQVV9QTEFORV9ESVJUWV9BTEw7Ci0JCQlicmVhazsKLQkJY2FzZSBQTEFORV9Q Uk9QX0lORk86Ci0JCWNhc2UgUExBTkVfUFJPUF9BTFBIQToKLQkJY2FzZSBQTEFORV9QUk9QX0JM RU5EX09QOgotCQkJLyogbm8gc3BlY2lhbCBhY3Rpb24gcmVxdWlyZWQgKi8KLQkJCWJyZWFrOwot CQljYXNlIFBMQU5FX1BST1BfUFJFRklMTF9TSVpFOgotCQljYXNlIFBMQU5FX1BST1BfUFJFRklM TF9USU1FOgotCQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfUEVSRjsKLQkJCWJy ZWFrOwotCQlkZWZhdWx0OgotCQkJLyogdW5rbm93biBwcm9wZXJ0eSwgcmVmcmVzaCBldmVyeXRo aW5nICovCi0JCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9ESVJUWV9BTEw7Ci0JCQlEUFVf RVJST1IoImV4ZWN1dGluZyBmdWxsIG1vZGUgc2V0LCBwcnBfaWR4ICVkXG4iLCBpZHgpOwotCQkJ YnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBzaW5jZSBwbGFuZV9hdG9taWNfY2hlY2sgaXMg aW52b2tlZCBiZWZvcmUgY3J0Y19hdG9taWNfY2hlY2sKLQkgKiBpbiB0aGUgY29tbWl0IHNlcXVl bmNlLCBhbGwgdGhlIHBhcmFtZXRlcnMgZm9yIHVwZGF0aW5nIHRoZQotCSAqIHBsYW5lIGRpcnR5 IGZsYWcgd2lsbCBub3QgYmUgYXZhaWxhYmxlIGR1cmluZwotCSAqIHBsYW5lX2F0b21pY19jaGVj ayBhcyBzb21lIGZlYXR1cmVzIHBhcmFtcyBhcmUgdXBkYXRlZAotCSAqIGluIGNydGNfYXRvbWlj X2NoZWNrIChlZy46c0RNQSkuIFNvIGNoZWNrIGZvciBtb2RlX2NoYW5nZQotCSAqIGJlZm9yZSBz c3BwIHVwZGF0ZS4KLQkgKi8KLQlfZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrX21vZGVfY2hh bmdlZChwZHB1LCBzdGF0ZSwKLQkJCQkJCQkJb2xkX3N0YXRlKTsKLQotCWlmIChwc3RhdGUtPmRp cnR5ICYgRFBVX1BMQU5FX0RJUlRZX1JFQ1RTKQotCQltZW1zZXQoJihwZHB1LT5waXBlX2NmZyks IDAsIHNpemVvZihzdHJ1Y3QgZHB1X2h3X3BpcGVfY2ZnKSk7CisJbWVtc2V0KCYocGRwdS0+cGlw ZV9jZmcpLCAwLCBzaXplb2Yoc3RydWN0IGRwdV9od19waXBlX2NmZykpOwogCiAJX2RwdV9wbGFu ZV9zZXRfc2Nhbm91dChwbGFuZSwgcHN0YXRlLCAmcGRwdS0+cGlwZV9jZmcsIGZiKTsKIAotCS8q IGVhcmx5IG91dCBpZiBub3RoaW5nIGRpcnR5ICovCi0JaWYgKCFwc3RhdGUtPmRpcnR5KQotCQly ZXR1cm4gMDsKIAlwc3RhdGUtPnBlbmRpbmcgPSB0cnVlOwogCiAJcGRwdS0+aXNfcnRfcGlwZSA9 IChkcHVfY3J0Y19nZXRfY2xpZW50X3R5cGUoY3J0YykgIT0gTlJUX0NMSUVOVCk7CiAJX2RwdV9w bGFuZV9zZXRfcW9zX2N0cmwocGxhbmUsIGZhbHNlLCBEUFVfUExBTkVfUU9TX1BBTklDX0NUUkwp OwogCiAJLyogdXBkYXRlIHJvaSBjb25maWcgKi8KLQlpZiAocHN0YXRlLT5kaXJ0eSAmIERQVV9Q TEFORV9ESVJUWV9SRUNUUykgewotCQlQT1BVTEFURV9SRUNUKCZzcmMsIHN0YXRlLT5zcmNfeCwg c3RhdGUtPnNyY195LAotCQkJc3RhdGUtPnNyY193LCBzdGF0ZS0+c3JjX2gsIHExNl9kYXRhKTsK LQkJUE9QVUxBVEVfUkVDVCgmZHN0LCBzdGF0ZS0+Y3J0Y194LCBzdGF0ZS0+Y3J0Y195LAotCQkJ c3RhdGUtPmNydGNfdywgc3RhdGUtPmNydGNfaCwgIXExNl9kYXRhKTsKLQotCQlEUFVfREVCVUdf UExBTkUocGRwdSwKLQkJCSJGQlsldV0gJXUsJXUsJXV4JXUtPmNydGMldSAlZCwlZCwldXgldSwg JTQuNHMgdWJ3YyAlZFxuIiwKLQkJCQlmYi0+YmFzZS5pZCwgc3JjLngsIHNyYy55LCBzcmMudywg c3JjLmgsCi0JCQkJY3J0Yy0+YmFzZS5pZCwgZHN0LngsIGRzdC55LCBkc3QudywgZHN0LmgsCi0J CQkJKGNoYXIgKikmZm10LT5iYXNlLnBpeGVsX2Zvcm1hdCwKLQkJCQlEUFVfRk9STUFUX0lTX1VC V0MoZm10KSk7Ci0KLQkJaWYgKGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLCBQTEFORV9Q Uk9QX1NSQ19DT05GSUcpICYKLQkJCUJJVChEUFVfRFJNX0RFSU5URVJMQUNFKSkgewotCQkJRFBV X0RFQlVHX1BMQU5FKHBkcHUsICJkZWludGVybGFjZVxuIik7Ci0JCQlmb3IgKGlkeCA9IDA7IGlk eCA8IERQVV9NQVhfUExBTkVTOyArK2lkeCkKLQkJCQlwZHB1LT5waXBlX2NmZy5sYXlvdXQucGxh bmVfcGl0Y2hbaWR4XSA8PD0gMTsKLQkJCXNyYy5oIC89IDI7Ci0JCQlzcmMueSAgPSBESVZfUk9V TkRfVVAoc3JjLnksIDIpOwotCQkJc3JjLnkgJj0gfjB4MTsKLQkJfQotCi0JCXBkcHUtPnBpcGVf Y2ZnLnNyY19yZWN0ID0gc3JjOwotCQlwZHB1LT5waXBlX2NmZy5kc3RfcmVjdCA9IGRzdDsKKwlQ T1BVTEFURV9SRUNUKCZzcmMsIHN0YXRlLT5zcmNfeCwgc3RhdGUtPnNyY195LAorCQlzdGF0ZS0+ c3JjX3csIHN0YXRlLT5zcmNfaCwgcTE2X2RhdGEpOworCVBPUFVMQVRFX1JFQ1QoJmRzdCwgc3Rh dGUtPmNydGNfeCwgc3RhdGUtPmNydGNfeSwKKwkJc3RhdGUtPmNydGNfdywgc3RhdGUtPmNydGNf aCwgIXExNl9kYXRhKTsKKworCURQVV9ERUJVR19QTEFORShwZHB1LAorCQkiRkJbJXVdICV1LCV1 LCV1eCV1LT5jcnRjJXUgJWQsJWQsJXV4JXUsICU0LjRzIHVid2MgJWRcbiIsCisJCQlmYi0+YmFz ZS5pZCwgc3JjLngsIHNyYy55LCBzcmMudywgc3JjLmgsCisJCQljcnRjLT5iYXNlLmlkLCBkc3Qu eCwgZHN0LnksIGRzdC53LCBkc3QuaCwKKwkJCShjaGFyICopJmZtdC0+YmFzZS5waXhlbF9mb3Jt YXQsCisJCQlEUFVfRk9STUFUX0lTX1VCV0MoZm10KSk7CiAKLQkJX2RwdV9wbGFuZV9zZXR1cF9z Y2FsZXIocGRwdSwgcHN0YXRlLCBmbXQsIGZhbHNlKTsKIAotCQkvKiBjaGVjayBmb3IgY29sb3Ig ZmlsbCAqLwotCQlwZHB1LT5jb2xvcl9maWxsID0gKHVpbnQzMl90KWRwdV9wbGFuZV9nZXRfcHJv cGVydHkocHN0YXRlLAotCQkJCVBMQU5FX1BST1BfQ09MT1JfRklMTCk7Ci0JCWlmIChwZHB1LT5j b2xvcl9maWxsICYgRFBVX1BMQU5FX0NPTE9SX0ZJTExfRkxBRykgewotCQkJLyogc2tpcCByZW1h aW5pbmcgcHJvY2Vzc2luZyBvbiBjb2xvciBmaWxsICovCi0JCQlwc3RhdGUtPmRpcnR5ID0gMHgw OwotCQl9IGVsc2UgaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9yZWN0cykgewotCQkJcGRw dS0+cGlwZV9ody0+b3BzLnNldHVwX3JlY3RzKHBkcHUtPnBpcGVfaHcsCi0JCQkJCSZwZHB1LT5w aXBlX2NmZywKLQkJCQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXgpOwotCQl9CisJcGRwdS0+cGlw ZV9jZmcuc3JjX3JlY3QgPSBzcmM7CisJcGRwdS0+cGlwZV9jZmcuZHN0X3JlY3QgPSBkc3Q7CiAK LQkJaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9wZSAmJgotCQkJCShwc3RhdGUtPm11bHRp cmVjdF9pbmRleCAhPSBEUFVfU1NQUF9SRUNUXzEpKQotCQkJcGRwdS0+cGlwZV9ody0+b3BzLnNl dHVwX3BlKHBkcHUtPnBpcGVfaHcsCi0JCQkJCSZwc3RhdGUtPnBpeGVsX2V4dCk7CisJX2RwdV9w bGFuZV9zZXR1cF9zY2FsZXIocGRwdSwgcHN0YXRlLCBmbXQsIGZhbHNlKTsKIAotCQkvKioKLQkJ ICogd2hlbiBwcm9ncmFtbWVkIGluIG11bHRpcmVjdCBtb2RlLCBzY2FsYXIgYmxvY2sgd2lsbCBi ZQotCQkgKiBieXBhc3NlZC4gU3RpbGwgd2UgbmVlZCB0byB1cGRhdGUgYWxwaGEgYW5kIGJpdHdp ZHRoCi0JCSAqIE9OTFkgZm9yIFJFQ1QwCi0JCSAqLwotCQlpZiAocGRwdS0+cGlwZV9ody0+b3Bz LnNldHVwX3NjYWxlciAmJgotCQkJCXBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4ICE9IERQVV9TU1BQ X1JFQ1RfMSkKLQkJCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9zY2FsZXIocGRwdS0+cGlwZV9o dywKLQkJCQkJJnBkcHUtPnBpcGVfY2ZnLCAmcHN0YXRlLT5waXhlbF9leHQsCi0JCQkJCSZwc3Rh dGUtPnNjYWxlcjNfY2ZnKTsKLQotCQkvKiB1cGRhdGUgZXhjbCByZWN0ICovCi0JCWlmIChwZHB1 LT5waXBlX2h3LT5vcHMuc2V0dXBfZXhjbF9yZWN0KQotCQkJcGRwdS0+cGlwZV9ody0+b3BzLnNl dHVwX2V4Y2xfcmVjdChwZHB1LT5waXBlX2h3LAotCQkJCQkmcHN0YXRlLT5leGNsX3JlY3QsCi0J CQkJCXBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4KTsKKwkvKiBvdmVycmlkZSBmb3IgY29sb3IgZmls bCAqLworCWlmIChwZHB1LT5jb2xvcl9maWxsICYgRFBVX1BMQU5FX0NPTE9SX0ZJTExfRkxBRykg eworCQkvKiBza2lwIHJlbWFpbmluZyBwcm9jZXNzaW5nIG9uIGNvbG9yIGZpbGwgKi8KKwkJcmV0 dXJuIDA7CisJfQogCi0JCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfbXVsdGlyZWN0KQot CQkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX211bHRpcmVjdCgKLQkJCQkJcGRwdS0+cGlwZV9o dywKLQkJCQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXgsCi0JCQkJCXBzdGF0ZS0+bXVsdGlyZWN0 X21vZGUpOworCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcmVjdHMpIHsKKwkJcGRwdS0+ cGlwZV9ody0+b3BzLnNldHVwX3JlY3RzKHBkcHUtPnBpcGVfaHcsCisJCQkJJnBkcHUtPnBpcGVf Y2ZnLAorCQkJCXBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4KTsKIAl9CiAKLQlpZiAoKHBzdGF0ZS0+ ZGlydHkgJiBEUFVfUExBTkVfRElSVFlfRk9STUFUKSAmJgotCQkJcGRwdS0+cGlwZV9ody0+b3Bz LnNldHVwX2Zvcm1hdCkgeworCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcGUgJiYKKwkJ CShwc3RhdGUtPm11bHRpcmVjdF9pbmRleCAhPSBEUFVfU1NQUF9SRUNUXzEpKQorCQlwZHB1LT5w aXBlX2h3LT5vcHMuc2V0dXBfcGUocGRwdS0+cGlwZV9odywKKwkJCQkmcHN0YXRlLT5waXhlbF9l eHQpOworCisJLyoqCisJICogd2hlbiBwcm9ncmFtbWVkIGluIG11bHRpcmVjdCBtb2RlLCBzY2Fs YXIgYmxvY2sgd2lsbCBiZQorCSAqIGJ5cGFzc2VkLiBTdGlsbCB3ZSBuZWVkIHRvIHVwZGF0ZSBh bHBoYSBhbmQgYml0d2lkdGgKKwkgKiBPTkxZIGZvciBSRUNUMAorCSAqLworCWlmIChwZHB1LT5w aXBlX2h3LT5vcHMuc2V0dXBfc2NhbGVyICYmCisJCQlwc3RhdGUtPm11bHRpcmVjdF9pbmRleCAh PSBEUFVfU1NQUF9SRUNUXzEpCisJCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9zY2FsZXIocGRw dS0+cGlwZV9odywKKwkJCQkmcGRwdS0+cGlwZV9jZmcsICZwc3RhdGUtPnBpeGVsX2V4dCwKKwkJ CQkmcHN0YXRlLT5zY2FsZXIzX2NmZyk7CisKKwlpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVw X211bHRpcmVjdCkKKwkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX211bHRpcmVjdCgKKwkJCQlw ZHB1LT5waXBlX2h3LAorCQkJCXBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4LAorCQkJCXBzdGF0ZS0+ bXVsdGlyZWN0X21vZGUpOworCisJaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9mb3JtYXQp IHsKIAkJc3JjX2ZsYWdzID0gMHgwOwogCiAJCS8qIHVwZGF0ZSBmb3JtYXQgKi8KQEAgLTIwOTks MzUgKzEzODksMTYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkJcGRwdS0+Y3NjX3B0ciA9IDA7CiAJfQogCi0JZHB1 X2NvbG9yX3Byb2Nlc3NfcGxhbmVfc2V0dXAocGxhbmUpOwotCi0JLyogdXBkYXRlIHNoYXJwZW5p bmcgKi8KLQlpZiAoKHBzdGF0ZS0+ZGlydHkgJiBEUFVfUExBTkVfRElSVFlfU0hBUlBFTikgJiYK LQkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3NoYXJwZW5pbmcpIHsKLQkJcGRwdS0+c2hhcnBf Y2ZnLnN0cmVuZ3RoID0gU0hBUlBfU1RSRU5HVEhfREVGQVVMVDsKLQkJcGRwdS0+c2hhcnBfY2Zn LmVkZ2VfdGhyID0gU0hBUlBfRURHRV9USFJfREVGQVVMVDsKLQkJcGRwdS0+c2hhcnBfY2ZnLnNt b290aF90aHIgPSBTSEFSUF9TTU9PVEhfVEhSX0RFRkFVTFQ7Ci0JCXBkcHUtPnNoYXJwX2NmZy5u b2lzZV90aHIgPSBTSEFSUF9OT0lTRV9USFJfREVGQVVMVDsKLQotCQlwZHB1LT5waXBlX2h3LT5v cHMuc2V0dXBfc2hhcnBlbmluZyhwZHB1LT5waXBlX2h3LAotCQkJCSZwZHB1LT5zaGFycF9jZmcp OwotCX0KLQogCV9kcHVfcGxhbmVfc2V0X3Fvc19sdXQocGxhbmUsIGZiKTsKIAlfZHB1X3BsYW5l X3NldF9kYW5nZXJfbHV0KHBsYW5lLCBmYik7CiAKIAlpZiAocGxhbmUtPnR5cGUgIT0gRFJNX1BM QU5FX1RZUEVfQ1VSU09SKSB7CiAJCV9kcHVfcGxhbmVfc2V0X3Fvc19jdHJsKHBsYW5lLCB0cnVl LCBEUFVfUExBTkVfUU9TX1BBTklDX0NUUkwpOwogCQlfZHB1X3BsYW5lX3NldF9vdF9saW1pdChw bGFuZSwgY3J0Yyk7Ci0JCWlmIChwc3RhdGUtPmRpcnR5ICYgRFBVX1BMQU5FX0RJUlRZX1BFUkYp Ci0JCQlfZHB1X3BsYW5lX3NldF90c19wcmVmaWxsKHBsYW5lLCBwc3RhdGUpOwogCX0KIAogCV9k cHVfcGxhbmVfc2V0X3Fvc19yZW1hcChwbGFuZSk7CiAKLQkvKiBjbGVhciBkaXJ0eSAqLwotCXBz dGF0ZS0+ZGlydHkgPSAweDA7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIwNiwxMyArMTQ3Nyw2 IEBAIHZvaWQgZHB1X3BsYW5lX3Jlc3RvcmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiAKIAlw ZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKIAotCS8qCi0JICogUmV2YWxpZGF0ZSBpcyBvbmx5 IHRydWUgaGVyZSBpZiBpZGxlIFBDIG9jY3VycmVkIGFuZAotCSAqIHRoZXJlIGlzIG5vIHBsYW5l IHN0YXRlIHVwZGF0ZSBpbiBjdXJyZW50IGNvbW1pdCBjeWNsZS4KLQkgKi8KLQlpZiAoIXBkcHUt PnJldmFsaWRhdGUpCi0JCXJldHVybjsKLQogCURQVV9ERUJVR19QTEFORShwZHB1LCAiXG4iKTsK IAogCS8qIGxhc3QgcGxhbmUgc3RhdGUgaXMgc2FtZSBhcyBjdXJyZW50IHN0YXRlICovCkBAIC0y MjIzLDIxICsxNDg3LDkgQEAgdm9pZCBkcHVfcGxhbmVfcmVzdG9yZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSkKIHN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAogCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2csIHUzMiBt YXN0ZXJfcGxhbmVfaWQpCiB7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xp c3QgZV9ibGVuZF9vcFtdID0gewotCQl7RFBVX0RSTV9CTEVORF9PUF9OT1RfREVGSU5FRCwgICAg Im5vdF9kZWZpbmVkIn0sCi0JCXtEUFVfRFJNX0JMRU5EX09QX09QQVFVRSwgICAgICAgICAib3Bh cXVlIn0sCi0JCXtEUFVfRFJNX0JMRU5EX09QX1BSRU1VTFRJUExJRUQsICAicHJlbXVsdGlwbGll ZCJ9LAotCQl7RFBVX0RSTV9CTEVORF9PUF9DT1ZFUkFHRSwgICAgICAgImNvdmVyYWdlIn0KLQl9 OwotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGVfc3JjX2NvbmZpZ1td ID0gewotCQl7RFBVX0RSTV9ERUlOVEVSTEFDRSwgImRlaW50ZXJsYWNlIn0KLQl9OwotCWNvbnN0 IHN0cnVjdCBkcHVfZm9ybWF0X2V4dGVuZGVkICpmb3JtYXRfbGlzdDsKLQlzdHJ1Y3QgZHB1X2tt c19pbmZvICppbmZvOwogCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSB0b19kcHVfcGxhbmUocGxh bmUpOwogCWludCB6cG9zX21heCA9IDI1NTsKIAlpbnQgenBvc19kZWYgPSAwOwotCWNoYXIgZmVh dHVyZV9uYW1lWzI1Nl07CiAKIAlpZiAoIXBsYW5lIHx8ICFwZHB1KSB7CiAJCURQVV9FUlJPUigi aW52YWxpZCBwbGFuZVxuIik7CkBAIC0yMjY3LDM1MyArMTUxOSw2IEBAIHN0YXRpYyB2b2lkIF9k cHVfcGxhbmVfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCiAJ bXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJnBkcHUtPnByb3BlcnR5X2luZm8sICJ6cG9zIiwK IAkJMHgwLCAwLCB6cG9zX21heCwgenBvc19kZWYsIFBMQU5FX1BST1BfWlBPUyk7Ci0KLQltc21f cHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywgImFscGhhIiwKLQkJ MHgwLCAwLCAyNTUsIDI1NSwgUExBTkVfUFJPUF9BTFBIQSk7Ci0KLQlpZiAoIW1hc3Rlcl9wbGFu ZV9pZCkgewotCQlpZiAocGRwdS0+cGlwZV9zYmxrLT5jb21tb24tPm1heGhkZWNpZXhwKSB7Ci0J CQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCQkJ ImhfZGVjaW1hdGUiLCAweDAsIDAsCi0JCQkJCXBkcHUtPnBpcGVfc2Jsay0+Y29tbW9uLT5tYXho ZGVjaWV4cCwgMCwKLQkJCQkJUExBTkVfUFJPUF9IX0RFQ0lNQVRFKTsKLQkJfQotCi0JCWlmIChw ZHB1LT5waXBlX3NibGstPmNvbW1vbi0+bWF4dmRlY2lleHApIHsKLQkJCW1zbV9wcm9wZXJ0eV9p bnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkidl9kZWNpbWF0ZSIsIDB4 MCwgMCwKLQkJCQkJcGRwdS0+cGlwZV9zYmxrLT5jb21tb24tPm1heHZkZWNpZXhwLCAwLAotCQkJ CQlQTEFORV9QUk9QX1ZfREVDSU1BVEUpOwotCQl9Ci0KLQkJaWYgKHBkcHUtPmZlYXR1cmVzICYg QklUKERQVV9TU1BQX1NDQUxFUl9RU0VFRDMpKSB7Ci0JCQltc21fcHJvcGVydHlfaW5zdGFsbF9y YW5nZSgKLQkJCQkJJnBkcHUtPnByb3BlcnR5X2luZm8sICJzY2FsZXJfdjIiLAotCQkJCQkweDAs IDAsIH4wLCAwLCBQTEFORV9QUk9QX1NDQUxFUl9WMik7Ci0JCQltc21fcHJvcGVydHlfaW5zdGFs bF9ibG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkibHV0X2VkIiwgMCwgUExBTkVfUFJP UF9TQ0FMRVJfTFVUX0VEKTsKLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJnBkcHUtPnBy b3BlcnR5X2luZm8sCi0JCQkJCSJsdXRfY2lyIiwgMCwKLQkJCQkJUExBTkVfUFJPUF9TQ0FMRVJf TFVUX0NJUik7Ci0JCQltc21fcHJvcGVydHlfaW5zdGFsbF9ibG9iKCZwZHB1LT5wcm9wZXJ0eV9p bmZvLAotCQkJCQkibHV0X3NlcCIsIDAsCi0JCQkJCVBMQU5FX1BST1BfU0NBTEVSX0xVVF9TRVAp OwotCQl9IGVsc2UgaWYgKHBkcHUtPmZlYXR1cmVzICYgRFBVX1NTUFBfU0NBTEVSKSB7Ci0JCQlt c21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgKLQkJCQkJJnBkcHUtPnByb3BlcnR5X2luZm8sICJz Y2FsZXJfdjEiLCAweDAsCi0JCQkJCTAsIH4wLCAwLCBQTEFORV9QUk9QX1NDQUxFUl9WMSk7Ci0J CX0KLQotCQlpZiAocGRwdS0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBfQ1NDKSB8fAotCQkgICAg cGRwdS0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBfQ1NDXzEwQklUKSkKLQkJCW1zbV9wcm9wZXJ0 eV9pbnN0YWxsX3ZvbGF0aWxlX3JhbmdlKAotCQkJCQkmcGRwdS0+cHJvcGVydHlfaW5mbywgImNz Y192MSIsIDB4MCwKLQkJCQkJMCwgfjAsIDAsIFBMQU5FX1BST1BfQ1NDX1YxKTsKLQotCQlpZiAo cGRwdS0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBfSFNJQykpIHsKLQkJCXNucHJpbnRmKGZlYXR1 cmVfbmFtZSwgc2l6ZW9mKGZlYXR1cmVfbmFtZSksICIlcyVkIiwKLQkJCQkiRFBVX1NTUFBfSFVF X1YiLAotCQkJCXBkcHUtPnBpcGVfc2Jsay0+aHNpY19ibGsudmVyc2lvbiA+PiAxNik7Ci0JCQlt c21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCQlmZWF0 dXJlX25hbWUsIDAsIDAsIDB4RkZGRkZGRkYsIDAsCi0JCQkJUExBTkVfUFJPUF9IVUVfQURKVVNU KTsKLQkJCXNucHJpbnRmKGZlYXR1cmVfbmFtZSwgc2l6ZW9mKGZlYXR1cmVfbmFtZSksICIlcyVk IiwKLQkJCQkiRFBVX1NTUFBfU0FUVVJBVElPTl9WIiwKLQkJCQlwZHB1LT5waXBlX3NibGstPmhz aWNfYmxrLnZlcnNpb24gPj4gMTYpOwotCQkJbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJnBk cHUtPnByb3BlcnR5X2luZm8sCi0JCQkJZmVhdHVyZV9uYW1lLCAwLCAwLCAweEZGRkZGRkZGLCAw LAotCQkJCVBMQU5FX1BST1BfU0FUVVJBVElPTl9BREpVU1QpOwotCQkJc25wcmludGYoZmVhdHVy ZV9uYW1lLCBzaXplb2YoZmVhdHVyZV9uYW1lKSwgIiVzJWQiLAotCQkJCSJEUFVfU1NQUF9WQUxV RV9WIiwKLQkJCQlwZHB1LT5waXBlX3NibGstPmhzaWNfYmxrLnZlcnNpb24gPj4gMTYpOwotCQkJ bXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkJZmVh dHVyZV9uYW1lLCAwLCAwLCAweEZGRkZGRkZGLCAwLAotCQkJCVBMQU5FX1BST1BfVkFMVUVfQURK VVNUKTsKLQkJCXNucHJpbnRmKGZlYXR1cmVfbmFtZSwgc2l6ZW9mKGZlYXR1cmVfbmFtZSksICIl cyVkIiwKLQkJCQkiRFBVX1NTUFBfQ09OVFJBU1RfViIsCi0JCQkJcGRwdS0+cGlwZV9zYmxrLT5o c2ljX2Jsay52ZXJzaW9uID4+IDE2KTsKLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZw ZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCWZlYXR1cmVfbmFtZSwgMCwgMCwgMHhGRkZGRkZGRiwg MCwKLQkJCQlQTEFORV9QUk9QX0NPTlRSQVNUX0FESlVTVCk7Ci0JCX0KLQl9Ci0KLQlpZiAocGRw dS0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBfRVhDTF9SRUNUKSkKLQkJbXNtX3Byb3BlcnR5X2lu c3RhbGxfdm9sYXRpbGVfcmFuZ2UoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkiZXhjbF9yZWN0 X3YxIiwgMHgwLCAwLCB+MCwgMCwgUExBTkVfUFJPUF9FWENMX1JFQ1RfVjEpOwotCi0JbXNtX3By b3BlcnR5X2luc3RhbGxfZW51bSgmcGRwdS0+cHJvcGVydHlfaW5mbywgImJsZW5kX29wIiwgMHgw LCAwLAotCQllX2JsZW5kX29wLCBBUlJBWV9TSVpFKGVfYmxlbmRfb3ApLCBQTEFORV9QUk9QX0JM RU5EX09QKTsKLQotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2VudW0oJnBkcHUtPnByb3BlcnR5X2lu Zm8sICJzcmNfY29uZmlnIiwgMHgwLCAxLAotCQllX3NyY19jb25maWcsIEFSUkFZX1NJWkUoZV9z cmNfY29uZmlnKSwgUExBTkVfUFJPUF9TUkNfQ09ORklHKTsKLQotCWlmIChwZHB1LT5waXBlX2h3 LT5vcHMuc2V0dXBfc29saWRmaWxsKQotCQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmcGRw dS0+cHJvcGVydHlfaW5mbywgImNvbG9yX2ZpbGwiLAotCQkJCTAsIDAsIDB4RkZGRkZGRkYsIDAs IFBMQU5FX1BST1BfQ09MT1JfRklMTCk7Ci0KLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgm cGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCSJwcmVmaWxsX3NpemUiLCAweDAsIDAsIH4wLCAwLAot CQkJUExBTkVfUFJPUF9QUkVGSUxMX1NJWkUpOwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3Jhbmdl KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJInByZWZpbGxfdGltZSIsIDB4MCwgMCwgfjAsIDAs Ci0JCQlQTEFORV9QUk9QX1BSRUZJTExfVElNRSk7Ci0KLQlpbmZvID0ga3phbGxvYyhzaXplb2Yo c3RydWN0IGRwdV9rbXNfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghaW5mbykgewotCQlEUFVf RVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBpbmZvIG1lbW9yeVxuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQltc21fcHJvcGVydHlfaW5zdGFsbF9ibG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiY2Fw YWJpbGl0aWVzIiwKLQkJRFJNX01PREVfUFJPUF9JTU1VVEFCTEUsIFBMQU5FX1BST1BfSU5GTyk7 Ci0JZHB1X2ttc19pbmZvX3Jlc2V0KGluZm8pOwotCi0JaWYgKCFtYXN0ZXJfcGxhbmVfaWQpIHsK LQkJZm9ybWF0X2xpc3QgPSBwZHB1LT5waXBlX3NibGstPmZvcm1hdF9saXN0OwotCX0gZWxzZSB7 Ci0JCWZvcm1hdF9saXN0ID0gcGRwdS0+cGlwZV9zYmxrLT52aXJ0X2Zvcm1hdF9saXN0OwotCQlk cHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAicHJpbWFyeV9zbWFydF9wbGFuZV9pZCIsCi0J CQkJCQltYXN0ZXJfcGxhbmVfaWQpOwotCX0KLQotCWlmIChmb3JtYXRfbGlzdCkgewotCQlkcHVf a21zX2luZm9fc3RhcnQoaW5mbywgInBpeGVsX2Zvcm1hdHMiKTsKLQkJd2hpbGUgKGZvcm1hdF9s aXN0LT5mb3VyY2NfZm9ybWF0KSB7Ci0JCQlkcHVfa21zX2luZm9fYXBwZW5kX2Zvcm1hdChpbmZv LAotCQkJCQlmb3JtYXRfbGlzdC0+Zm91cmNjX2Zvcm1hdCwKLQkJCQkJZm9ybWF0X2xpc3QtPm1v ZGlmaWVyKTsKLQkJCSsrZm9ybWF0X2xpc3Q7Ci0JCX0KLQkJZHB1X2ttc19pbmZvX3N0b3AoaW5m byk7Ci0JfQotCi0JaWYgKHBkcHUtPnBpcGVfaHcgJiYgcGRwdS0+cGlwZV9ody0+b3BzLmdldF9z Y2FsZXJfdmVyKQotCQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAic2NhbGVyX3N0ZXBf dmVyIiwKLQkJCXBkcHUtPnBpcGVfaHctPm9wcy5nZXRfc2NhbGVyX3ZlcihwZHB1LT5waXBlX2h3 KSk7Ci0KLQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWF4X2xpbmV3aWR0aCIsCi0J CQlwZHB1LT5waXBlX3NibGstPmNvbW1vbi0+bWF4bGluZXdpZHRoKTsKLQlkcHVfa21zX2luZm9f YWRkX2tleWludChpbmZvLCAibWF4X3Vwc2NhbGUiLAotCQkJcGRwdS0+cGlwZV9zYmxrLT5tYXh1 cHNjYWxlKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWF4X2Rvd25zY2FsZSIs Ci0JCQlwZHB1LT5waXBlX3NibGstPm1heGR3bnNjYWxlKTsKLQlkcHVfa21zX2luZm9fYWRkX2tl eWludChpbmZvLCAibWF4X2hvcml6b250YWxfZGVjaSIsCi0JCQlwZHB1LT5waXBlX3NibGstPmNv bW1vbi0+bWF4aGRlY2lleHApOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhf dmVydGljYWxfZGVjaSIsCi0JCQlwZHB1LT5waXBlX3NibGstPmNvbW1vbi0+bWF4dmRlY2lleHAp OwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfcGVyX3BpcGVfYnciLAotCQkJ cGRwdS0+cGlwZV9zYmxrLT5tYXhfcGVyX3BpcGVfYncgKiAxMDAwTEwpOwotCW1zbV9wcm9wZXJ0 eV9zZXRfYmxvYigmcGRwdS0+cHJvcGVydHlfaW5mbywgJnBkcHUtPmJsb2JfaW5mbywKLQkJCWlu Zm8tPmRhdGEsIERQVV9LTVNfSU5GT19EQVRBTEVOKGluZm8pLAotCQkJUExBTkVfUFJPUF9JTkZP KTsKLQotCWtmcmVlKGluZm8pOwotCi0JaWYgKHBkcHUtPmZlYXR1cmVzICYgQklUKERQVV9TU1BQ X01FTUNPTE9SKSkgewotCQlzbnByaW50ZihmZWF0dXJlX25hbWUsIHNpemVvZihmZWF0dXJlX25h bWUpLCAiJXMlZCIsCi0JCQkiRFBVX1NTUFBfU0tJTl9DT0xPUl9WIiwKLQkJCXBkcHUtPnBpcGVf c2Jsay0+bWVtY29sb3JfYmxrLnZlcnNpb24gPj4gMTYpOwotCQltc21fcHJvcGVydHlfaW5zdGFs bF9ibG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCBmZWF0dXJlX25hbWUsIDAsCi0JCQlQTEFORV9Q Uk9QX1NLSU5fQ09MT1IpOwotCQlzbnByaW50ZihmZWF0dXJlX25hbWUsIHNpemVvZihmZWF0dXJl X25hbWUpLCAiJXMlZCIsCi0JCQkiRFBVX1NTUFBfU0tZX0NPTE9SX1YiLAotCQkJcGRwdS0+cGlw ZV9zYmxrLT5tZW1jb2xvcl9ibGsudmVyc2lvbiA+PiAxNik7Ci0JCW1zbV9wcm9wZXJ0eV9pbnN0 YWxsX2Jsb2IoJnBkcHUtPnByb3BlcnR5X2luZm8sIGZlYXR1cmVfbmFtZSwgMCwKLQkJCVBMQU5F X1BST1BfU0tZX0NPTE9SKTsKLQkJc25wcmludGYoZmVhdHVyZV9uYW1lLCBzaXplb2YoZmVhdHVy ZV9uYW1lKSwgIiVzJWQiLAotCQkJIkRQVV9TU1BQX0ZPTElBR0VfQ09MT1JfViIsCi0JCQlwZHB1 LT5waXBlX3NibGstPm1lbWNvbG9yX2Jsay52ZXJzaW9uID4+IDE2KTsKLQkJbXNtX3Byb3BlcnR5 X2luc3RhbGxfYmxvYigmcGRwdS0+cHJvcGVydHlfaW5mbywgZmVhdHVyZV9uYW1lLCAwLAotCQkJ UExBTkVfUFJPUF9GT0xJQUdFX0NPTE9SKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBf ZHB1X3BsYW5lX3NldF9jc2NfdjEoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwgdm9pZCAqdXNyX3B0 cikKLXsKLQlzdHJ1Y3QgZHB1X2RybV9jc2NfdjEgY3NjX3YxOwotCWludCBpOwotCi0JaWYgKCFw ZHB1KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0K LQlwZHB1LT5jc2NfdXNyX3B0ciA9IE5VTEw7Ci0JaWYgKCF1c3JfcHRyKSB7Ci0JCURQVV9ERUJV R19QTEFORShwZHB1LCAiY3NjIGRhdGEgcmVtb3ZlZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlp ZiAoY29weV9mcm9tX3VzZXIoJmNzY192MSwgdXNyX3B0ciwgc2l6ZW9mKGNzY192MSkpKSB7Ci0J CURQVV9FUlJPUl9QTEFORShwZHB1LCAiZmFpbGVkIHRvIGNvcHkgY3NjIGRhdGFcbiIpOwotCQly ZXR1cm47Ci0JfQotCi0JLyogcG9wdWxhdGUgZnJvbSB1c2VyIHNwYWNlICovCi0JZm9yIChpID0g MDsgaSA8IERQVV9DU0NfTUFUUklYX0NPRUZGX1NJWkU7ICsraSkKLQkJcGRwdS0+Y3NjX2NmZy5j c2NfbXZbaV0gPSBjc2NfdjEuY3RtX2NvZWZmW2ldID4+IDE2OwotCWZvciAoaSA9IDA7IGkgPCBE UFVfQ1NDX0JJQVNfU0laRTsgKytpKSB7Ci0JCXBkcHUtPmNzY19jZmcuY3NjX3ByZV9idltpXSA9 IGNzY192MS5wcmVfYmlhc1tpXTsKLQkJcGRwdS0+Y3NjX2NmZy5jc2NfcG9zdF9idltpXSA9IGNz Y192MS5wb3N0X2JpYXNbaV07Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBEUFVfQ1NDX0NMQU1QX1NJ WkU7ICsraSkgewotCQlwZHB1LT5jc2NfY2ZnLmNzY19wcmVfbHZbaV0gPSBjc2NfdjEucHJlX2Ns YW1wW2ldOwotCQlwZHB1LT5jc2NfY2ZnLmNzY19wb3N0X2x2W2ldID0gY3NjX3YxLnBvc3RfY2xh bXBbaV07Ci0JfQotCXBkcHUtPmNzY191c3JfcHRyID0gJnBkcHUtPmNzY19jZmc7Ci19Ci0KLXN0 YXRpYyBpbmxpbmUgdm9pZCBfZHB1X3BsYW5lX3NldF9zY2FsZXJfdjEoc3RydWN0IGRwdV9wbGFu ZSAqcGRwdSwKLQkJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlLCB2b2lkICp1c3IpCi17 Ci0Jc3RydWN0IGRwdV9kcm1fc2NhbGVyX3YxIHNjYWxlX3YxOwotCXN0cnVjdCBkcHVfaHdfcGl4 ZWxfZXh0ICpwZTsKLQlpbnQgaTsKLQotCWlmICghcGRwdSB8fCAhcHN0YXRlKSB7Ci0JCURQVV9F UlJPUigiaW52YWxpZCBhcmd1bWVudChzKVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwc3RhdGUt PnNjYWxlcl9jaGVja19zdGF0ZSA9IERQVV9QTEFORV9TQ0xDSEVDS19OT05FOwotCWlmICghdXNy KSB7Ci0JCURQVV9ERUJVR19QTEFORShwZHB1LCAic2NhbGUgZGF0YSByZW1vdmVkXG4iKTsKLQkJ cmV0dXJuOwotCX0KLQotCWlmIChjb3B5X2Zyb21fdXNlcigmc2NhbGVfdjEsIHVzciwgc2l6ZW9m KHNjYWxlX3YxKSkpIHsKLQkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsICJmYWlsZWQgdG8gY29weSBz Y2FsZSBkYXRhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGZvcmNlIHByb3BlcnR5IHRvIGJl IGRpcnR5LCBldmVuIGlmIHRoZSBwb2ludGVyIGRpZG4ndCBjaGFuZ2UgKi8KLQltc21fcHJvcGVy dHlfc2V0X2RpcnR5KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJJnBzdGF0ZS0+cHJvcGVydHlf c3RhdGUsIFBMQU5FX1BST1BfU0NBTEVSX1YxKTsKLQotCS8qIHBvcHVsYXRlIGZyb20gdXNlciBz cGFjZSAqLwotCXBlID0gJnBzdGF0ZS0+cGl4ZWxfZXh0OwotCW1lbXNldChwZSwgMCwgc2l6ZW9m KHN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0KSk7Ci0JZm9yIChpID0gMDsgaSA8IERQVV9NQVhfUExB TkVTOyBpKyspIHsKLQkJcGUtPmluaXRfcGhhc2VfeFtpXSA9IHNjYWxlX3YxLmluaXRfcGhhc2Vf eFtpXTsKLQkJcGUtPnBoYXNlX3N0ZXBfeFtpXSA9IHNjYWxlX3YxLnBoYXNlX3N0ZXBfeFtpXTsK LQkJcGUtPmluaXRfcGhhc2VfeVtpXSA9IHNjYWxlX3YxLmluaXRfcGhhc2VfeVtpXTsKLQkJcGUt PnBoYXNlX3N0ZXBfeVtpXSA9IHNjYWxlX3YxLnBoYXNlX3N0ZXBfeVtpXTsKLQotCQlwZS0+aG9y el9maWx0ZXJbaV0gPSBzY2FsZV92MS5ob3J6X2ZpbHRlcltpXTsKLQkJcGUtPnZlcnRfZmlsdGVy W2ldID0gc2NhbGVfdjEudmVydF9maWx0ZXJbaV07Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBEUFVf TUFYX1BMQU5FUzsgaSsrKSB7Ci0JCXBlLT5sZWZ0X2Z0Y2hbaV0gPSBzY2FsZV92MS5wZS5sZWZ0 X2Z0Y2hbaV07Ci0JCXBlLT5yaWdodF9mdGNoW2ldID0gc2NhbGVfdjEucGUucmlnaHRfZnRjaFtp XTsKLQkJcGUtPmxlZnRfcnB0W2ldID0gc2NhbGVfdjEucGUubGVmdF9ycHRbaV07Ci0JCXBlLT5y aWdodF9ycHRbaV0gPSBzY2FsZV92MS5wZS5yaWdodF9ycHRbaV07Ci0JCXBlLT5yb2lfd1tpXSA9 IHNjYWxlX3YxLnBlLm51bV9leHRfcHhsc19scltpXTsKLQotCQlwZS0+dG9wX2Z0Y2hbaV0gPSBz Y2FsZV92MS5wZS50b3BfZnRjaFtpXTsKLQkJcGUtPmJ0bV9mdGNoW2ldID0gc2NhbGVfdjEucGUu YnRtX2Z0Y2hbaV07Ci0JCXBlLT50b3BfcnB0W2ldID0gc2NhbGVfdjEucGUudG9wX3JwdFtpXTsK LQkJcGUtPmJ0bV9ycHRbaV0gPSBzY2FsZV92MS5wZS5idG1fcnB0W2ldOwotCQlwZS0+cm9pX2hb aV0gPSBzY2FsZV92MS5wZS5udW1fZXh0X3B4bHNfdGJbaV07Ci0JfQotCi0JcHN0YXRlLT5zY2Fs ZXJfY2hlY2tfc3RhdGUgPSBEUFVfUExBTkVfU0NMQ0hFQ0tfU0NBTEVSX1YxOwotCi0JRFBVX0VW VDMyX1ZFUkJPU0UoRFJNSUQoJnBkcHUtPmJhc2UpKTsKLQlEUFVfREVCVUdfUExBTkUocGRwdSwg InVzZXIgcHJvcGVydHkgZGF0YSBjb3BpZWRcbiIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQg X2RwdV9wbGFuZV9zZXRfc2NhbGVyX3YyKHN0cnVjdCBkcHVfcGxhbmUgKnBkcHUsCi0JCXN0cnVj dCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZSwgdm9pZCAqdXNyKQotewotCXN0cnVjdCBkcHVfZHJt X3NjYWxlcl92MiBzY2FsZV92MjsKLQlzdHJ1Y3QgZHB1X2h3X3BpeGVsX2V4dCAqcGU7Ci0JaW50 IGk7Ci0Jc3RydWN0IGRwdV9od19zY2FsZXIzX2NmZyAqY2ZnOwotCi0JaWYgKCFwZHB1IHx8ICFw c3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQkJcmV0dXJu OwotCX0KLQotCWNmZyA9ICZwc3RhdGUtPnNjYWxlcjNfY2ZnOwotCXBzdGF0ZS0+c2NhbGVyX2No ZWNrX3N0YXRlID0gRFBVX1BMQU5FX1NDTENIRUNLX05PTkU7Ci0JaWYgKCF1c3IpIHsKLQkJRFBV X0RFQlVHX1BMQU5FKHBkcHUsICJzY2FsZSBkYXRhIHJlbW92ZWRcbiIpOwotCQlyZXR1cm47Ci0J fQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZzY2FsZV92MiwgdXNyLCBzaXplb2Yoc2NhbGVfdjIp KSkgewotCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImZhaWxlZCB0byBjb3B5IHNjYWxlIGRhdGFc biIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogZGV0YWNoL2lnbm9yZSB1c2VyIGRhdGEgaWYgJ2Rp c2FibGVkJyAqLwotCWlmICghc2NhbGVfdjIuZW5hYmxlKSB7Ci0JCURQVV9ERUJVR19QTEFORShw ZHB1LCAic2NhbGUgZGF0YSByZW1vdmVkXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGZvcmNl IHByb3BlcnR5IHRvIGJlIGRpcnR5LCBldmVuIGlmIHRoZSBwb2ludGVyIGRpZG4ndCBjaGFuZ2Ug Ki8KLQltc21fcHJvcGVydHlfc2V0X2RpcnR5KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJJnBz dGF0ZS0+cHJvcGVydHlfc3RhdGUsIFBMQU5FX1BST1BfU0NBTEVSX1YyKTsKLQotCS8qIHBvcHVs YXRlIGZyb20gdXNlciBzcGFjZSAqLwotCWRwdV9zZXRfc2NhbGVyX3YyKGNmZywgJnNjYWxlX3Yy KTsKLQotCXBlID0gJnBzdGF0ZS0+cGl4ZWxfZXh0OwotCW1lbXNldChwZSwgMCwgc2l6ZW9mKHN0 cnVjdCBkcHVfaHdfcGl4ZWxfZXh0KSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRFBVX01BWF9QTEFO RVM7IGkrKykgewotCQlwZS0+bGVmdF9mdGNoW2ldID0gc2NhbGVfdjIucGUubGVmdF9mdGNoW2ld OwotCQlwZS0+cmlnaHRfZnRjaFtpXSA9IHNjYWxlX3YyLnBlLnJpZ2h0X2Z0Y2hbaV07Ci0JCXBl LT5sZWZ0X3JwdFtpXSA9IHNjYWxlX3YyLnBlLmxlZnRfcnB0W2ldOwotCQlwZS0+cmlnaHRfcnB0 W2ldID0gc2NhbGVfdjIucGUucmlnaHRfcnB0W2ldOwotCQlwZS0+cm9pX3dbaV0gPSBzY2FsZV92 Mi5wZS5udW1fZXh0X3B4bHNfbHJbaV07Ci0KLQkJcGUtPnRvcF9mdGNoW2ldID0gc2NhbGVfdjIu cGUudG9wX2Z0Y2hbaV07Ci0JCXBlLT5idG1fZnRjaFtpXSA9IHNjYWxlX3YyLnBlLmJ0bV9mdGNo W2ldOwotCQlwZS0+dG9wX3JwdFtpXSA9IHNjYWxlX3YyLnBlLnRvcF9ycHRbaV07Ci0JCXBlLT5i dG1fcnB0W2ldID0gc2NhbGVfdjIucGUuYnRtX3JwdFtpXTsKLQkJcGUtPnJvaV9oW2ldID0gc2Nh bGVfdjIucGUubnVtX2V4dF9weGxzX3RiW2ldOwotCX0KLQlwc3RhdGUtPnNjYWxlcl9jaGVja19z dGF0ZSA9IERQVV9QTEFORV9TQ0xDSEVDS19TQ0FMRVJfVjJfQ0hFQ0s7Ci0KLQlEUFVfRVZUMzJf VkVSQk9TRShEUk1JRCgmcGRwdS0+YmFzZSksIGNmZy0+ZW5hYmxlLCBjZmctPmRlLmVuYWJsZSwK LQkJCWNmZy0+c3JjX3dpZHRoWzBdLCBjZmctPnNyY19oZWlnaHRbMF0sCi0JCQljZmctPmRzdF93 aWR0aCwgY2ZnLT5kc3RfaGVpZ2h0KTsKLQlEUFVfREVCVUdfUExBTkUocGRwdSwgInVzZXIgcHJv cGVydHkgZGF0YSBjb3BpZWRcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldF9l eGNsX3JlY3RfdjEoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKLQkJc3RydWN0IGRwdV9wbGFuZV9z dGF0ZSAqcHN0YXRlLCB2b2lkICp1c3JfcHRyKQotewotCXN0cnVjdCBkcm1fY2xpcF9yZWN0IGV4 Y2xfcmVjdF92MTsKLQotCWlmICghcGRwdSkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmVc biIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCF1c3JfcHRyKSB7Ci0JCURQVV9ERUJVR19QTEFO RShwZHB1LCAiaW52YWxpZCAgZXhjbF9yZWN0IHVzZXIgZGF0YVxuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmV4Y2xfcmVjdF92MSwgdXNyX3B0ciwgc2l6ZW9mKGV4 Y2xfcmVjdF92MSkpKSB7Ci0JCURQVV9FUlJPUl9QTEFORShwZHB1LCAiZmFpbGVkIHRvIGNvcHkg ZXhjbF9yZWN0IGRhdGFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogcG9wdWxhdGUgZnJvbSB1 c2VyIHNwYWNlICovCi0JcHN0YXRlLT5leGNsX3JlY3QueCA9IGV4Y2xfcmVjdF92MS54MTsKLQlw c3RhdGUtPmV4Y2xfcmVjdC55ID0gZXhjbF9yZWN0X3YxLnkxOwotCXBzdGF0ZS0+ZXhjbF9yZWN0 LncgPSBleGNsX3JlY3RfdjEueDIgLSBleGNsX3JlY3RfdjEueDE7Ci0JcHN0YXRlLT5leGNsX3Jl Y3QuaCA9IGV4Y2xfcmVjdF92MS55MiAtIGV4Y2xfcmVjdF92MS55MTsKLQotCURQVV9ERUJVR19Q TEFORShwZHB1LCAiZXhjbF9yZWN0OiB7JWQsJWQsJWQsJWR9XG4iLAotCQkJcHN0YXRlLT5leGNs X3JlY3QueCwgcHN0YXRlLT5leGNsX3JlY3QueSwKLQkJCXBzdGF0ZS0+ZXhjbF9yZWN0LncsIHBz dGF0ZS0+ZXhjbF9yZWN0LmgpOwogfQogCiBzdGF0aWMgaW50IGRwdV9wbGFuZV9hdG9taWNfc2V0 X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLApAQCAtMjYyMiw3ICsxNTI3LDcgQEAg c3RhdGljIGludCBkcHVfcGxhbmVfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKIHsKIAlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1ID0gcGxhbmUgPyB0b19kcHVfcGxh bmUocGxhbmUpIDogTlVMTDsKIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7Ci0JaW50 IGlkeCwgcmV0ID0gLUVJTlZBTDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCURQVV9ERUJVR19Q TEFORShwZHB1LCAiXG4iKTsKIApAQCAtMjYzNCwzMSArMTUzOSw2IEBAIHN0YXRpYyBpbnQgZHB1 X3BsYW5lX2F0b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCXBz dGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7CiAJCXJldCA9IG1zbV9wcm9wZXJ0eV9h dG9taWNfc2V0KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAogCQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0 YXRlLCBwcm9wZXJ0eSwgdmFsKTsKLQkJaWYgKCFyZXQpIHsKLQkJCWlkeCA9IG1zbV9wcm9wZXJ0 eV9pbmRleCgmcGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCQkJcHJvcGVydHkpOwotCQkJc3dpdGNo IChpZHgpIHsKLQkJCWNhc2UgUExBTkVfUFJPUF9DU0NfVjE6Ci0JCQkJX2RwdV9wbGFuZV9zZXRf Y3NjX3YxKHBkcHUsCi0JCQkJCQkgICAgICB1NjRfdG9fdXNlcl9wdHIodmFsKSk7Ci0JCQkJYnJl YWs7Ci0JCQljYXNlIFBMQU5FX1BST1BfU0NBTEVSX1YxOgotCQkJCV9kcHVfcGxhbmVfc2V0X3Nj YWxlcl92MShwZHB1LCBwc3RhdGUsCi0JCQkJCQkJIHU2NF90b191c2VyX3B0cih2YWwpKTsKLQkJ CQlicmVhazsKLQkJCWNhc2UgUExBTkVfUFJPUF9TQ0FMRVJfVjI6Ci0JCQkJX2RwdV9wbGFuZV9z ZXRfc2NhbGVyX3YyKHBkcHUsIHBzdGF0ZSwKLQkJCQkJCQkgdTY0X3RvX3VzZXJfcHRyKHZhbCkp OwotCQkJCWJyZWFrOwotCQkJY2FzZSBQTEFORV9QUk9QX0VYQ0xfUkVDVF9WMToKLQkJCQlfZHB1 X3BsYW5lX3NldF9leGNsX3JlY3RfdjEocGRwdSwgcHN0YXRlLAotCQkJCQkJdTY0X3RvX3VzZXJf cHRyKHZhbCkpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQkvKiBub3RoaW5nIHRvIGRv ICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KIAl9CiAKIAlEUFVfREVCVUdfUExBTkUocGRwdSwg IiVzWyVkXSA8PSAweCVsbHggcmV0PSVkXG4iLApAQCAtMjc3MCw3ICsxNjUwLDYgQEAgc3RhdGlj IHZvaWQgZHB1X3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJ bXNtX3Byb3BlcnR5X2R1cGxpY2F0ZV9zdGF0ZSgmcGRwdS0+cHJvcGVydHlfaW5mbywgb2xkX3N0 YXRlLCBwc3RhdGUsCiAJCQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgcHN0YXRlLT5wcm9wZXJ0 eV92YWx1ZXMpOwogCi0JcHN0YXRlLT5kaXJ0eSA9IDB4MDsKIAlwc3RhdGUtPnBlbmRpbmcgPSBm YWxzZTsKIAogCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5l LCAmcHN0YXRlLT5iYXNlKTsKQEAgLTMxNjgsNiArMjA0Nyw4IEBAIHN0cnVjdCBkcm1fcGxhbmUg KmRwdV9wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaWYgKHJldCkKIAkJZ290 byBjbGVhbl9zc3BwOwogCisJcGRwdS0+Y2F0YWxvZyA9IGttcy0+Y2F0YWxvZzsKKwogCS8qIHN1 Y2Nlc3MhIGZpbmFsaXplIGluaXRpYWxpemF0aW9uICovCiAJZHJtX3BsYW5lX2hlbHBlcl9hZGQo cGxhbmUsICZkcHVfcGxhbmVfaGVscGVyX2Z1bmNzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfcGxhbmUuaAppbmRleCAyNWI2YjE1Li5hMDZjOGI0IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaApAQCAtMjYsMzIgKzI2LDYgQEAKICNpbmNs dWRlICJkcHVfaHdfbWRzcy5oIgogI2luY2x1ZGUgImRwdV9od19zc3BwLmgiCiAKLS8qIGRpcnR5 IGJpdHMgZm9yIHVwZGF0ZSBmdW5jdGlvbiAqLwotI2RlZmluZSBEUFVfUExBTkVfRElSVFlfUkVD VFMJMHgxCi0jZGVmaW5lIERQVV9QTEFORV9ESVJUWV9GT1JNQVQJMHgyCi0jZGVmaW5lIERQVV9Q TEFORV9ESVJUWV9TSEFSUEVOCTB4NAotI2RlZmluZSBEUFVfUExBTkVfRElSVFlfUEVSRgkweDgK LSNkZWZpbmUgRFBVX1BMQU5FX0RJUlRZX0FMTAkweEZGRkZGRkZGCi0KLS8qKgotICogZW51bSBk cHVfcGxhbmVfc2NsY2hlY2tfc3RhdGUgLSBVc2VyIHNjYWxlciBkYXRhIHN0YXR1cwotICoKLSAq IEBEUFVfUExBTkVfU0NMQ0hFQ0tfTk9ORTogTm8gdXNlciBkYXRhIHByb3ZpZGVkCi0gKiBARFBV X1BMQU5FX1NDTENIRUNLX0lOVkFMSUQ6IEludmFsaWQgdXNlciBkYXRhIHByb3ZpZGVkCi0gKiBA RFBVX1BMQU5FX1NDTENIRUNLX1NDQUxFUl9WMTogVmFsaWQgc2NhbGVyIHYxIGRhdGEKLSAqIEBE UFVfUExBTkVfU0NMQ0hFQ0tfU0NBTEVSX1YxX0NIRUNLOiBVbmNoZWNrZWQgc2NhbGVyIHYxIGRh dGEKLSAqIEBEUFVfUExBTkVfU0NMQ0hFQ0tfU0NBTEVSX1YyOiBWYWxpZCBzY2FsZXIgdjIgZGF0 YQotICogQERQVV9QTEFORV9TQ0xDSEVDS19TQ0FMRVJfVjJfQ0hFQ0s6IFVuY2hlY2tlZCBzY2Fs ZXIgdjIgZGF0YQotICovCi1lbnVtIGRwdV9wbGFuZV9zY2xjaGVja19zdGF0ZSB7Ci0JRFBVX1BM QU5FX1NDTENIRUNLX05PTkUsCi0JRFBVX1BMQU5FX1NDTENIRUNLX0lOVkFMSUQsCi0JRFBVX1BM QU5FX1NDTENIRUNLX1NDQUxFUl9WMSwKLQlEUFVfUExBTkVfU0NMQ0hFQ0tfU0NBTEVSX1YxX0NI RUNLLAotCURQVV9QTEFORV9TQ0xDSEVDS19TQ0FMRVJfVjIsCi0JRFBVX1BMQU5FX1NDTENIRUNL X1NDQUxFUl9WMl9DSEVDSywKLX07Ci0KIC8qKgogICogc3RydWN0IGRwdV9wbGFuZV9zdGF0ZTog RGVmaW5lIGRwdSBleHRlbnNpb24gb2YgZHJtIHBsYW5lIHN0YXRlIG9iamVjdAogICogQGJhc2U6 CWJhc2UgZHJtIHBsYW5lIHN0YXRlIG9iamVjdApAQCAtNjAsOCArMzQsNiBAQCBlbnVtIGRwdV9w bGFuZV9zY2xjaGVja19zdGF0ZSB7CiAgKiBAYXNwYWNlOglwb2ludGVyIHRvIGFkZHJlc3Mgc3Bh Y2UgZm9yIGlucHV0L291dHB1dCBidWZmZXJzCiAgKiBAaW5wdXRfZmVuY2U6CWRlcmVmZXJlbmNl ZCBpbnB1dCBmZW5jZSBwb2ludGVyCiAgKiBAc3RhZ2U6CWFzc2lnbmVkIGJ5IGNydGMgYmxlbmRl cgotICogQGV4Y2xfcmVjdDoJZXhjbHVzaW9uIHJlY3QgdmFsdWVzCi0gKiBAZGlydHk6CWJpdG1h c2sgZm9yIHdoaWNoIHBpcGUgaC93IGNvbmZpZyBmdW5jdGlvbnMgbmVlZCB0byBiZSB1cGRhdGVk CiAgKiBAbXVsdGlyZWN0X2luZGV4OiBpbmRleCBvZiB0aGUgcmVjdGFuZ2xlIG9mIFNTUFAKICAq IEBtdWx0aXJlY3RfbW9kZTogcGFyYWxsZWwgb3IgdGltZSBtdWx0aXBsZXggbXVsdGlyZWN0IG1v ZGUKICAqIEBwZW5kaW5nOgl3aGV0aGVyIHRoZSBjdXJyZW50IHVwZGF0ZSBpcyBzdGlsbCBwZW5k aW5nCkBAIC03Nyw4ICs0OSw2IEBAIHN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgewogCXN0cnVjdCBt c21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZTsKIAl2b2lkICppbnB1dF9mZW5jZTsKIAllbnVt IGRwdV9zdGFnZSBzdGFnZTsKLQlzdHJ1Y3QgZHB1X3JlY3QgZXhjbF9yZWN0OwotCXVpbnQzMl90 IGRpcnR5OwogCXVpbnQzMl90IG11bHRpcmVjdF9pbmRleDsKIAl1aW50MzJfdCBtdWx0aXJlY3Rf bW9kZTsKIAlib29sIHBlbmRpbmc7CkBAIC04Niw3ICs1Niw2IEBAIHN0cnVjdCBkcHVfcGxhbmVf c3RhdGUgewogCS8qIHNjYWxlciBjb25maWd1cmF0aW9uICovCiAJc3RydWN0IGRwdV9od19zY2Fs ZXIzX2NmZyBzY2FsZXIzX2NmZzsKIAlzdHJ1Y3QgZHB1X2h3X3BpeGVsX2V4dCBwaXhlbF9leHQ7 Ci0JZW51bSBkcHVfcGxhbmVfc2NsY2hlY2tfc3RhdGUgc2NhbGVyX2NoZWNrX3N0YXRlOwogCiAJ c3RydWN0IGRwdV9od19waXBlX2NkcF9jZmcgY2RwX2NmZzsKIH07CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcmVnX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X3JlZ19kbWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggYjgxZTA3MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfcmVnX2RtYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qIENvcHlyaWdo dCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlICJkcHVfcmVnX2RtYS5oIgotI2luY2x1ZGUg ImRwdV9od19yZWdfZG1hX3YxLmgiCi0jaW5jbHVkZSAiZHB1X2RiZy5oIgotCi1zdGF0aWMgaW50 IGRlZmF1bHRfY2hlY2tfc3VwcG9ydChlbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIGZlYXR1cmUs Ci0JCSAgICAgZW51bSBkcHVfcmVnX2RtYV9ibGsgYmxrLAotCQkgICAgIGJvb2wgKmlzX3N1cHBv cnRlZCkKLXsKLQotCWlmICghaXNfc3VwcG9ydGVkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCSpp c19zdXBwb3J0ZWQgPSBmYWxzZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkZWZhdWx0 X3NldHVwX3BheWxvYWQoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZykKLXsK LQlEUk1fRVJST1IoIm5vdCBpbXBsZW1lbnRlZFxuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0K LXN0YXRpYyBpbnQgZGVmYXVsdF9raWNrX29mZihzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9j ZmcgKmNmZykKLXsKLQlEUk1fRVJST1IoIm5vdCBpbXBsZW1lbnRlZFxuIik7Ci0JcmV0dXJuIC1F SU5WQUw7Ci0KLX0KLQotc3RhdGljIGludCBkZWZhdWx0X3Jlc2V0KHN0cnVjdCBkcHVfaHdfY3Rs ICpjdGwpCi17Ci0JRFJNX0VSUk9SKCJub3QgaW1wbGVtZW50ZWRcbiIpOwotCXJldHVybiAtRUlO VkFMOwotfQotCi1zdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpkZWZhdWx0X2FsbG9jX3JlZ19k bWFfYnVmKHUzMiBzaXplKQotewotCURSTV9FUlJPUigibm90IGltcGxlbWVudGVkXG4iKTsKLQly ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLX0KLQotaW50IGRlZmF1bHRfZGVhbGxvY19yZWdfZG1h KHN0cnVjdCBkcHVfcmVnX2RtYV9idWZmZXIgKmx1dF9idWYpCi17Ci0JRFJNX0VSUk9SKCJub3Qg aW1wbGVtZW50ZWRcbiIpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGRlZmF1 bHRfYnVmX3Jlc2V0X3JlZ19kbWEoc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqbHV0X2J1ZikK LXsKLQlEUk1fRVJST1IoIm5vdCBpbXBsZW1lbnRlZFxuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19 Ci0KLXN0YXRpYyBpbnQgZGVmYXVsdF9sYXN0X2NvbW1hbmQoc3RydWN0IGRwdV9od19jdGwgKmN0 bCwKLQkJZW51bSBkcHVfcmVnX2RtYV9xdWV1ZSBxKQotewotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgc3RydWN0IGRwdV9od19yZWdfZG1hIHJlZ19kbWEgPSB7Ci0JLm9wcyA9IHtkZWZhdWx0X2No ZWNrX3N1cHBvcnQsIGRlZmF1bHRfc2V0dXBfcGF5bG9hZCwKLQkJZGVmYXVsdF9raWNrX29mZiwg ZGVmYXVsdF9yZXNldCwgZGVmYXVsdF9hbGxvY19yZWdfZG1hX2J1ZiwKLQkJZGVmYXVsdF9kZWFs bG9jX3JlZ19kbWEsIGRlZmF1bHRfYnVmX3Jlc2V0X3JlZ19kbWEsCi0JCWRlZmF1bHRfbGFzdF9j b21tYW5kfSwKLX07Ci0KLWludCBkcHVfcmVnX2RtYV9pbml0KHZvaWQgX19pb21lbSAqYWRkciwg c3RydWN0IGRwdV9tZHNzX2NmZyAqbSwKLQkJc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlp bnQgcmMgPSAwOwotCi0JaWYgKCFhZGRyIHx8ICFtIHx8ICFkZXYpIHsKLQkJRFJNX0RFQlVHKCJp bnZhbGlkIGFkZHIgJXBLIGNhdGFsb2cgJXBLIGRldiAlcEtcbiIsIGFkZHIsIG0sCi0JCQkJZGV2 KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmVnX2RtYS5kcm1fZGV2ID0gZGV2OwotCXJlZ19kbWEu Y2FwcyA9ICZtLT5kbWFfY2ZnOwotCXJlZ19kbWEuYWRkciA9IGFkZHI7Ci0KLQlpZiAoIW0tPnJl Z19kbWFfY291bnQpCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoIChyZWdfZG1hLmNhcHMtPnZlcnNp b24pIHsKLQljYXNlIDE6Ci0JCXJjID0gaW5pdF92MSgmcmVnX2RtYSk7Ci0JCWlmIChyYykKLQkJ CURSTV9ERUJVRygiaW5pdCB2MSBkbWEgb3BzIGZhaWxlZFxuIik7Ci0JCWVsc2UKLQkJCWRwdV9k YmdfcmVnX3JlZ2lzdGVyX2Jhc2UoInJlZ19kbWEiLCBhZGRyLAotCQkJCQlyZWdfZG1hLmNhcHMt Pmxlbik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwot fQotCi1zdHJ1Y3QgZHB1X2h3X3JlZ19kbWFfb3BzICpkcHVfcmVnX2RtYV9nZXRfb3BzKHZvaWQp Ci17Ci0JcmV0dXJuICZyZWdfZG1hLm9wczsKLX0KLQotdm9pZCBkcHVfcmVnX2RtYV9kZWluaXQo dm9pZCkKLXsKLQlzdHJ1Y3QgZHB1X2h3X3JlZ19kbWEgb3AgPSB7Ci0JLm9wcyA9IHtkZWZhdWx0 X2NoZWNrX3N1cHBvcnQsIGRlZmF1bHRfc2V0dXBfcGF5bG9hZCwKLQkJZGVmYXVsdF9raWNrX29m ZiwgZGVmYXVsdF9yZXNldCwgZGVmYXVsdF9hbGxvY19yZWdfZG1hX2J1ZiwKLQkJZGVmYXVsdF9k ZWFsbG9jX3JlZ19kbWEsIGRlZmF1bHRfYnVmX3Jlc2V0X3JlZ19kbWEsCi0JCWRlZmF1bHRfbGFz dF9jb21tYW5kfSwKLQl9OwotCi0JaWYgKCFyZWdfZG1hLmRybV9kZXYgfHwgIXJlZ19kbWEuY2Fw cykKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChyZWdfZG1hLmNhcHMtPnZlcnNpb24pIHsKLQljYXNl IDE6Ci0JCWRlaW5pdF92MSgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0J bWVtc2V0KCZyZWdfZG1hLCAwLCBzaXplb2YocmVnX2RtYSkpOwotCW1lbWNweSgmcmVnX2RtYS5v cHMsICZvcC5vcHMsIHNpemVvZihvcC5vcHMpKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9yZWdfZG1hLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfcmVnX2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmI5 MmVkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9yZWdf ZG1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTAgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAy MDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFBVX1JFR19ETUFfSAotI2RlZmluZSBfRFBVX1JFR19E TUFfSAotCi0jaW5jbHVkZSAibXNtX2Rydi5oIgotI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgi Ci0jaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdfdG9wLmgiCi0jaW5j bHVkZSAiZHB1X2h3X3V0aWwuaCIKLQotLyoqCi0gKiBlbnVtIGRwdV9yZWdfZG1hX29wIC0gZGVm aW5lcyBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSByZWcgZG1hCi0gKiBAUkVHX0RNQV9SRUFEOiBS ZWFkIHRoZSBoaXN0b2dyYW0gaW50byBidWZmZXIgcHJvdmlkZWQKLSAqIEBSRUdfRE1BX1dSSVRF OiBXcml0ZSB0aGUgcmVnIGRtYSBjb25maWd1cmF0aW9uIGludG8gTURQIGJsb2NrCi0gKiBAUkVH X0RNQV9PUF9NQVg6IE1heCBvcGVyYXRpb24gd2hpY2ggaW5kaWNhdGVzIHRoYXQgb3AgaXMgaW52 YWxpZAotICovCi1lbnVtIGRwdV9yZWdfZG1hX29wIHsKLQlSRUdfRE1BX1JFQUQsCi0JUkVHX0RN QV9XUklURSwKLQlSRUdfRE1BX09QX01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRwdV9yZWdfZG1h X3JlYWRfc2VsIC0gZGVmaW5lcyB0aGUgYmxvY2tzIGZvciBoaXN0b2dyYW0gcmVhZAotICogQERT UFAwX0hJU1Q6IHNlbGVjdCBkc3BwMAotICogQERTUFAxX0hJU1Q6IHNlbGVjdCBkc3BwMQotICog QERTUFAyX0hJU1Q6IHNlbGVjdCBkc3BwMgotICogQERTUFAzX0hJU1Q6IHNlbGVjdCBkc3BwMwot ICogQERTUFBfSElTVF9NQVg6IGludmFsaWQgc2VsZWN0aW9uCi0gKi8KLWVudW0gZHB1X3JlZ19k bWFfcmVhZF9zZWwgewotCURTUFAwX0hJU1QsCi0JRFNQUDFfSElTVCwKLQlEU1BQMl9ISVNULAot CURTUFAzX0hJU1QsCi0JRFNQUF9ISVNUX01BWCwKLX07Ci0KLS8qKgotICogZW51bSBkcHVfcmVn X2RtYV9mZWF0dXJlcyAtIGRlZmluZXMgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHJlZyBkbWEKLSAq IEBRU0VFRDogcXNlZWQgZmVhdHVyZQotICogQEdBTVVUOiBnYW11dCBmZWF0dXJlCi0gKiBASUdD OiBpbnZlcnNlIGdhbW1hIGNvcnJlY3Rpb24KLSAqIEBQQ0M6IHBvbHlub21pY2FsIGNvbG9yIGNv cnJlY3Rpb24KLSAqIEBWTFVUOiBQQSB2bHV0Ci0gKiBATUVNX0NPTE9SOiBtZW1vcnkgY29sb3IK LSAqIEBTSVhfWk9ORTogc2l4IHpvbmUKLSAqIEBIU0lDOiBIdWUsIHNhdHVyYXRpb24gYW5kIGNv bnRyYXN0Ci0gKiBAR0M6IGdhbW1hIGNvcnJlY3Rpb24KLSAqIEBSRUdfRE1BX0ZFQVRVUkVTX01B WDogaW52YWxpZCBzZWxlY3Rpb24KLSAqLwotZW51bSBkcHVfcmVnX2RtYV9mZWF0dXJlcyB7Ci0J UVNFRUQsCi0JR0FNVVQsCi0JSUdDLAotCVBDQywKLQlWTFVULAotCU1FTV9DT0xPUiwKLQlTSVhf Wk9ORSwKLQlIU0lDLAotCUdDLAotCVJFR19ETUFfRkVBVFVSRVNfTUFYLAotfTsKLQotLyoqCi0g KiBlbnVtIGRwdV9yZWdfZG1hX3F1ZXVlIC0gZGVmaW5lcyByZWcgZG1hIHdyaXRlIHF1ZXVlIHZh bHVlcwotICogQERNQV9DVExfUVVFVUUwOiBzZWxlY3QgcXVldWUwCi0gKiBARE1BX0NUTF9RVUVV RTE6IHNlbGVjdCBxdWV1ZTEKLSAqIEBETUFfQ1RMX1FVRVVFX01BWDogaW52YWxpZCBzZWxlY3Rp b24KLSAqLwotZW51bSBkcHVfcmVnX2RtYV9xdWV1ZSB7Ci0JRE1BX0NUTF9RVUVVRTAsCi0JRE1B X0NUTF9RVUVVRTEsCi0JRE1BX0NUTF9RVUVVRV9NQVgsCi19OwotCi0vKioKLSAqIGVudW0gZHB1 X3JlZ19kbWFfdHJpZ2dlcl9tb2RlIC0gZGVmaW5lcyByZWcgZG1hIG9wcyB0cmlnZ2VyIG1vZGUK LSAqIEBXUklURV9JTU1FRElBVEU6IHRyaWdnZXIgd3JpdGUgb3AgaW1tZWRpYXRlbHkKLSAqIEBX UklURV9UUklHR0VSOiB0cmlnZ2VyIHdyaXRlIG9wIHdoZW4gc3cgdHJpZ2dlciBpcyBpc3N1ZWQK LSAqIEBSRUFEX0lNTUVESUFURTogdHJpZ2dlciByZWFkIG9wIGltbWVkaWF0ZWx5Ci0gKiBAUkVB RF9UUklHR0VSOiB0cmlnZ2VyIHJlYWQgb3Agd2hlbiBzdyB0cmlnZ2VyIGlzIGlzc3VlZAotICog QFRJR0dFUl9NQVg6IGludmFsaWQgdHJpZ2dlciBzZWxlY3Rpb24KLSAqLwotZW51bSBkcHVfcmVn X2RtYV90cmlnZ2VyX21vZGUgewotCVdSSVRFX0lNTUVESUFURSwKLQlXUklURV9UUklHR0VSLAot CVJFQURfSU1NRURJQVRFLAotCVJFQURfVFJJR0dFUiwKLQlUSUdHRVJfTUFYLAotfTsKLQotLyoq Ci0gKiBlbnVtIGRwdV9yZWdfZG1hX3NldHVwX29wcyAtIGRlZmluZXMgcmVnIGRtYSB3cml0ZSBj b25maWd1cmF0aW9uCi0gKiBASFdfQkxLX1NFTEVDVDogb3AgZm9yIHNlbGVjdGluZyB0aGUgaGFy ZHdhcmUgYmxvY2sKLSAqIEBSRUdfU0lOR0xFX1dSSVRFOiBvcCBmb3Igd3JpdGluZyBzaW5nbGUg cmVnaXN0ZXIgdmFsdWUKLSAqICAgICAgICAgICAgICAgICAgICBhdCB0aGUgYWRkcmVzcyBwcm92 aWRlZAotICogQFJFR19CTEtfV1JJVEVfU0lOR0xFOiBvcCBmb3Igd3JpdGluZyBtdWx0aXBsZSBy ZWdpc3RlcnMgdXNpbmcgaHcgaW5kZXgKLSAqICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0 ZXIKLSAqIEBSRUdfQkxLX1dSSVRFX0lOQzogb3AgZm9yIHdyaXRpbmcgbXVsdGlwbGUgcmVnaXN0 ZXJzIHVzaW5nIGF1dG8gYWRkcmVzcwotICogICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnQK LSAqIEBSRUdfQkxLX1dSSVRFX01VTFRJUExFOiBvcCBmb3Igd3JpdGluZyBodyBpbmRleCBiYXNl ZCByZWdpc3RlcnMgYXQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1jb25zZWN1dGl2 ZSBsb2NhdGlvbgotICogQFJFR19ETUFfU0VUVVBfT1BTX01BWDogaW52YWxpZCBvcGVyYXRpb24K LSAqLwotZW51bSBkcHVfcmVnX2RtYV9zZXR1cF9vcHMgewotCUhXX0JMS19TRUxFQ1QsCi0JUkVH X1NJTkdMRV9XUklURSwKLQlSRUdfQkxLX1dSSVRFX1NJTkdMRSwKLQlSRUdfQkxLX1dSSVRFX0lO QywKLQlSRUdfQkxLX1dSSVRFX01VTFRJUExFLAotCVJFR19ETUFfU0VUVVBfT1BTX01BWCwKLX07 Ci0KLS8qKgotICogZW51bSBkcHVfcmVnX2RtYV9ibGsgLSBkZWZpbmVzIGJsb2NrcyBmb3Igd2hp Y2ggcmVnIGRtYSBvcCBzaG91bGQgYmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9y bWVkCi0gKiBAVklHMDogc2VsZWN0IHZpZzAgYmxvY2sKLSAqIEBWSUcxOiBzZWxlY3QgdmlnMSBi bG9jawotICogQFZJRzI6IHNlbGVjdCB2aWcyIGJsb2NrCi0gKiBAVklHMzogc2VsZWN0IHZpZzMg YmxvY2sKLSAqIEBMTTA6IHNlbGVjdCBsbTAgYmxvY2sKLSAqIEBMTTE6IHNlbGVjdCBsbTEgYmxv Y2sKLSAqIEBMTTI6IHNlbGVjdCBsbTIgYmxvY2sKLSAqIEBMTTM6IHNlbGVjdCBsbTMgYmxvY2sK LSAqIEBEU1BQMDogc2VsZWN0IGRzcHAwIGJsb2NrCi0gKiBARFNQUDE6IHNlbGVjdCBkc3BwMSBi bG9jawotICogQERTUFAyOiBzZWxlY3QgZHNwcDIgYmxvY2sKLSAqIEBEU1BQMzogc2VsZWN0IGRz cHAzIGJsb2NrCi0gKiBARE1BMDogc2VsZWN0IGRtYTAgYmxvY2sKLSAqIEBETUExOiBzZWxlY3Qg ZG1hMSBibG9jawotICogQERNQTI6IHNlbGVjdCBkbWEyIGJsb2NrCi0gKiBARE1BMzogc2VsZWN0 IGRtYTMgYmxvY2sKLSAqIEBTU1BQX0lHQzogc2VsZWN0IHNzcHAgaWdjIGJsb2NrCi0gKiBARFNQ UF9JR0M6IHNlbGVjdCBkc3BwIGlnYyBibG9jawotICogQE1EU1M6IHNlbGVjdCBtZHNzIGJsb2Nr Ci0gKi8KLWVudW0gZHB1X3JlZ19kbWFfYmxrIHsKLQlWSUcwICA9IEJJVCgwKSwKLQlWSUcxICA9 IEJJVCgxKSwKLQlWSUcyICA9IEJJVCgyKSwKLQlWSUczICA9IEJJVCgzKSwKLQlMTTAgICA9IEJJ VCg0KSwKLQlMTTEgICA9IEJJVCg1KSwKLQlMTTIgICA9IEJJVCg2KSwKLQlMTTMgICA9IEJJVCg3 KSwKLQlEU1BQMCA9IEJJVCg4KSwKLQlEU1BQMSA9IEJJVCg5KSwKLQlEU1BQMiA9IEJJVCgxMCks Ci0JRFNQUDMgPSBCSVQoMTEpLAotCURNQTAgID0gQklUKDEyKSwKLQlETUExICA9IEJJVCgxMyks Ci0JRE1BMiAgPSBCSVQoMTQpLAotCURNQTMgID0gQklUKDE1KSwKLQlTU1BQX0lHQyA9IEJJVCgx NiksCi0JRFNQUF9JR0MgPSBCSVQoMTcpLAotCU1EU1MgID0gQklUKDMxKQotfTsKLQotLyoqCi0g KiBzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyIC0gZGVmaW5lcyByZWcgZG1hIGJ1ZmZlciBzdHJ1 Y3R1cmUuCi0gKiBAZHJtX2dlbV9vYmplY3QgKmJ1ZjogZHJtIGdlbSBoYW5kbGUgZm9yIHRoZSBi dWZmZXIKLSAqIEBhc2FwY2UgOiBwb2ludGVyIHRvIGFkZHJlc3Mgc3BhY2UKLSAqIEBidWZmZXJf c2l6ZTogYnVmZmVyIHNpemUKLSAqIEBpbmRleDogd3JpdGUgcG9pbnRlciBpbmRleAotICogQGlv dmE6IGRldmljZSBhZGRyZXNzCi0gKiBAdmFkZHI6IGNwdSBhZGRyZXNzCi0gKiBAbmV4dF9vcF9h bGxvd2VkOiBvcGVyYXRpb24gYWxsb3dlZCBvbiB0aGUgYnVmZmVyCi0gKiBAb3BzX2NvbXBsZXRl ZDogb3BlcmF0aW9ucyBjb21wbGV0ZWQgb24gYnVmZmVyCi0gKi8KLXN0cnVjdCBkcHVfcmVnX2Rt YV9idWZmZXIgewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYnVmOwotCXN0cnVjdCBtc21fZ2Vt X2FkZHJlc3Nfc3BhY2UgKmFzcGFjZTsKLQl1MzIgYnVmZmVyX3NpemU7Ci0JdTMyIGluZGV4Owot CXU2NCBpb3ZhOwotCXZvaWQgKnZhZGRyOwotCXUzMiBuZXh0X29wX2FsbG93ZWQ7Ci0JdTMyIG9w c19jb21wbGV0ZWQ7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNf Y2ZnIC0gZGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIHJlZyBkbWEgb3BzIG9uIHRoZQotICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgZG1hIGJ1ZmZlci4KLSAqIEBkcHVfcmVn X2RtYV9zZXR1cF9vcHMgb3BzOiBvcHMgdG8gYmUgcGVyZm9ybWVkCi0gKiBAZHB1X3JlZ19kbWFf YmxrIGJsazogYmxvY2sgb24gd2hpY2ggb3AgbmVlZHMgdG8gYmUgcGVyZm9ybWVkCi0gKiBAZHB1 X3JlZ19kbWFfZmVhdHVyZXMgZmVhdHVyZTogZmVhdHVyZSBvbiB3aGljaCBvcCBuZWVkcyB0byBi ZSBkb25lCi0gKiBAd3JhcF9zaXplOiB2YWxpZCBmb3IgUkVHX0JMS19XUklURV9NVUxUSVBMRSwg aW5kaWNhdGVzIHJlZyBpbmRleCBsb2NhdGlvbgotICogICAgICAgICAgICAgc2l6ZQotICogQGlu YzogdmFsaWQgZm9yIFJFR19CTEtfV1JJVEVfTVVMVElQTEUgaW5kaWNhdGVzIHdoZXRoZXIgcmVn IGluZGV4IGxvY2F0aW9uCi0gKiAgICAgICBuZWVkcyBhbiBpbmNyZW1lbnQgb3IgZGVjcmVtZW50 LgotICogICAgICAgMCAtIGRlY3JlbWVudAotICogICAgICAgMSAtIGluY3JlbWVudAotICogQGJs a19vZmZzZXQ6IG9mZnNldCBmb3IgYmxrLCB2YWxpZCBmb3IgSFdfQkxLX1NFTEVDVCBvcCBvbmx5 Ci0gKiBAZHB1X3JlZ19kbWFfYnVmZmVyICpkbWFfYnVmOiByZWcgZG1hIGJ1ZmZlciBvbiB3aGlj aCBvcCBuZWVkcyB0byBiZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZv cm1lZAotICogQGRhdGE6IHBvaW50ZXIgdG8gcGF5bG9hZCB3aGljaCBoYXMgdG8gYmUgd3JpdHRl biBpbnRvIHJlZyBkbWEgYnVmZmVyIGZvcgotICogICAgICAgIHNlbGVjdGVkIG9wLgotICogQGRh dGFfc2l6ZTogc2l6ZSBvZiBwYXlsb2FkIGluIGRhdGEKLSAqLwotc3RydWN0IGRwdV9yZWdfZG1h X3NldHVwX29wc19jZmcgewotCWVudW0gZHB1X3JlZ19kbWFfc2V0dXBfb3BzIG9wczsKLQllbnVt IGRwdV9yZWdfZG1hX2JsayBibGs7Ci0JZW51bSBkcHVfcmVnX2RtYV9mZWF0dXJlcyBmZWF0dXJl OwotCXUzMiB3cmFwX3NpemU7Ci0JdTMyIGluYzsKLQl1MzIgYmxrX29mZnNldDsKLQlzdHJ1Y3Qg ZHB1X3JlZ19kbWFfYnVmZmVyICpkbWFfYnVmOwotCXUzMiAqZGF0YTsKLQl1MzIgZGF0YV9zaXpl OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcgLSBjb21taXQg cmVnIGRtYSBidWZmZXIgdG8gaHcgZW5naW5lCi0gKiBAY3RsOiBjdGwgZm9yIHdoaWNoIHJlZyBk bWEgYnVmZmVyIG5lZWRzIHRvIGJlIGNvbW1pdHRlZC4KLSAqIEBkbWFfYnVmOiByZWcgZG1hIGJ1 ZmZlciB3aXRoIGlvdmEgYWRkcmVzcyBhbmQgc2l6ZSBpbmZvCi0gKiBAYmxvY2tfc2VsZWN0OiBo aXN0b2dyYW0gcmVhZCBzZWxlY3QKLSAqIEB0cmlnZ2VyX21vZGU6IHJlZyBkbWEgb3BzIHRyaWdn ZXIgbW9kZQotICogQHF1ZXVlX3NlbGVjdDogcXVldWUgb24gd2hpY2ggcmVnIGRtYSBidWZmZXIg d2lsbCBiZSBzdWJtaXR0ZWQKLSAqIEBsYXN0X2NvbW1hbmQ6IGxhc3QgY29tbWFuZCBmb3IgdGhp cyB2c3luYwotICovCi1zdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcgewotCXN0cnVjdCBk cHVfaHdfY3RsICpjdGw7Ci0JZW51bSBkcHVfcmVnX2RtYV9vcCBvcDsKLQlzdHJ1Y3QgZHB1X3Jl Z19kbWFfYnVmZmVyICpkbWFfYnVmOwotCWVudW0gZHB1X3JlZ19kbWFfcmVhZF9zZWwgYmxvY2tf c2VsZWN0OwotCWVudW0gZHB1X3JlZ19kbWFfdHJpZ2dlcl9tb2RlIHRyaWdnZXJfbW9kZTsKLQll bnVtIGRwdV9yZWdfZG1hX3F1ZXVlIHF1ZXVlX3NlbGVjdDsKLQl1MzIgbGFzdF9jb21tYW5kOwot fTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2h3X3JlZ19kbWFfb3BzIC0gb3BzIHN1cHBvcnRlZCBi eSByZWcgZG1hIGZyYW1lIHdvcmssIGJhc2VkIG9uCi0gKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmVyc2lvbiBvZiByZWcgZG1hIGFwcHJvcHJpYXRlIG9wcyB3aWxsIGJlCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGR1cmluZyBkcml2ZXIgcHJvYmUuCi0g KiBAY2hlY2tfc3VwcG9ydDogY2hlY2tzIGlmIHJlZyBkbWEgaXMgc3VwcG9ydGVkIG9uIHRoaXMg cGxhdGZvcm0gZm9yIGEKLSAqICAgICAgICAgICAgICAgICBmZWF0dXJlCi0gKiBAc2V0dXBfcGF5 bG9hZDogc2V0dXAgcmVnIGRtYSBidWZmZXIgYmFzZWQgb24gb3BzIGFuZCBwYXlsb2FkIHByb3Zp ZGVkIGJ5Ci0gKiAgICAgICAgICAgICAgICAgY2xpZW50Ci0gKiBAa2lja19vZmY6IHN1Ym1pdCB0 aGUgcmVnIGRtYSBidWZmZXIgdG8gaHcgZW5naW5nZQotICogQHJlc2V0OiByZXNldCB0aGUgcmVn IGRtYSBodyBlbmdpbmdlIGZvciBhIGN0bAotICogQGFsbG9jX3JlZ19kbWFfYnVmOiBhbGxvY2F0 ZSByZWcgZG1hIGJ1ZmZlcgotICogQGRlYWxsb2NfcmVnX2RtYTogZGUtYWxsb2NhdGUgcmVnIGRt YSBidWZmZXIKLSAqIEByZXNldF9yZWdfZG1hX2J1ZjogcmVzZXQgdGhlIGJ1ZmZlciB0byBpbml0 IHN0YXRlCi0gKiBAbGFzdF9jb21tYW5kOiBub3RpZnkgY29udHJvbCB0aGF0IGxhc3QgY29tbWFu ZCBpcyBxdWV1ZWQKLSAqLwotc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyB7Ci0JaW50ICgqY2hl Y2tfc3VwcG9ydCkoZW51bSBkcHVfcmVnX2RtYV9mZWF0dXJlcyBmZWF0dXJlLAotCQkJICAgICBl bnVtIGRwdV9yZWdfZG1hX2JsayBibGssCi0JCQkgICAgIGJvb2wgKmlzX3N1cHBvcnRlZCk7Ci0J aW50ICgqc2V0dXBfcGF5bG9hZCkoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNm Zyk7Ci0JaW50ICgqa2lja19vZmYpKHN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyAqY2Zn KTsKLQlpbnQgKCpyZXNldCkoc3RydWN0IGRwdV9od19jdGwgKmN0bCk7Ci0Jc3RydWN0IGRwdV9y ZWdfZG1hX2J1ZmZlciogKCphbGxvY19yZWdfZG1hX2J1ZikodTMyIHNpemUpOwotCWludCAoKmRl YWxsb2NfcmVnX2RtYSkoc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqbHV0X2J1Zik7Ci0JaW50 ICgqcmVzZXRfcmVnX2RtYV9idWYpKHN0cnVjdCBkcHVfcmVnX2RtYV9idWZmZXIgKmJ1Zik7Ci0J aW50ICgqbGFzdF9jb21tYW5kKShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsLCBlbnVtIGRwdV9yZWdf ZG1hX3F1ZXVlIHEpOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2h3X3JlZ19kbWEgLSBzdHJ1 Y3R1cmUgdG8gaG9sZCByZWcgZG1hIGh3IGluZm8KLSAqIEBkcm1fZGV2OiBkcm0gZHJpdmVyIGRl diBoYW5kbGUKLSAqIEBjYXBzOiByZWcgZG1hIGh3IGNhcHMgb24gdGhlIHBsYXRmb3JtCi0gKiBA b3BzOiByZWcgZG1hIG9wcyBzdXBwb3J0ZWQgb24gdGhlIHBsYXRmb3JtCi0gKiBAYWRkcjogcmVn IGRtYSBodyBibG9jayBiYXNlIGFkZHJlc3MKLSAqLwotc3RydWN0IGRwdV9od19yZWdfZG1hIHsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKLQljb25zdCBzdHJ1Y3QgZHB1X3JlZ19kbWFf Y2ZnICpjYXBzOwotCXN0cnVjdCBkcHVfaHdfcmVnX2RtYV9vcHMgb3BzOwotCXZvaWQgX19pb21l bSAqYWRkcjsKLX07Ci0KLS8qKgotICogZHB1X3JlZ19kbWFfaW5pdCgpIC0gZnVuY3Rpb24gY2Fs bGVkIHRvIGluaXRpYWxpemUgcmVnIGRtYSBkdXJpbmcgZHB1Ci0gKiAgICAgICAgICAgICAgICAg ICAgICAgICBkcm0gZHJpdmVyIHByb2JlLiBJZiByZWcgZG1hIGlzIHN1cHBvcnRlZCBieSBkcHUK LSAqICAgICAgICAgICAgICAgICAgICAgICAgIG9wcyBmb3IgcmVnIGRtYSB2ZXJzaW9uIHdpbGwg YmUgaW5zdGFsbGVkLgotICogICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVnIGRtYSBpcyBu b3Qgc3VwcG9ydGVkIGJ5IGRwdSBkZWZhdWx0IG9wcyB3aWxsCi0gKiAgICAgICAgICAgICAgICAg ICAgICAgICBiZSBpbnN0YWxsZWQuIGNoZWNrX3N1cHBvcnQgb2YgZGVmYXVsdCBvcHMgd2lsbAot ICogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlLCBoZW5jZSB0aGUgY2xpZW50 cyBzaG91bGQgZmFsbCBiYWNrIHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBBSEIgcHJv Z3JhbW1pbmcuCi0gKiBAYWRkcjogcmVnIGRtYSBibG9jayBiYXNlIGFkZHJlc3MKLSAqIEBtOiBj YXRhbG9nIHdoaWNoIGNvbnRhaW5zIGRwdSBodyBjYXBhYmlsaXRpZXMgYW5kIG9mZnNldHMKLSAq IEBkZXY6IGRybSBkcml2ZXIgZGV2aWNlIGhhbmRsZQotICovCi1pbnQgZHB1X3JlZ19kbWFfaW5p dCh2b2lkIF9faW9tZW0gKmFkZHIsIHN0cnVjdCBkcHVfbWRzc19jZmcgKm0sCi0JCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwotCi0vKioKLSAqIGRwdV9yZWdfZG1hX2dldF9vcHMoKSAtIHNpbmds ZXRvbiBtb2R1bGUsIG9wcyBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50cwotICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgd2hvIGNhbGwgdGhpcyBhcGkuCi0gKi8KLXN0cnVjdCBkcHVfaHdf cmVnX2RtYV9vcHMgKmRwdV9yZWdfZG1hX2dldF9vcHModm9pZCk7Ci0KLS8qKgotICogZHB1X3Jl Z19kbWFfZGVpbml0KCkgLSBkZS1pbml0aWFsaXplIHRoZSByZWcgZG1hCi0gKi8KLXZvaWQgZHB1 X3JlZ19kbWFfZGVpbml0KHZvaWQpOwotI2VuZGlmIC8qIF9EUFVfUkVHX0RNQV9IICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCmluZGV4IGJkZGNlNDEuLmI1NTBkN2QgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCkBAIC0xNyw3ICsxNyw2IEBACiAj aW5jbHVkZSAiZHB1X2h3X2xtLmgiCiAjaW5jbHVkZSAiZHB1X2h3X2N0bC5oIgogI2luY2x1ZGUg ImRwdV9od19jZG0uaCIKLSNpbmNsdWRlICJkcHVfaHdfZHNwcC5oIgogI2luY2x1ZGUgImRwdV9o d19kcy5oIgogI2luY2x1ZGUgImRwdV9od19waW5ncG9uZy5oIgogI2luY2x1ZGUgImRwdV9od19p bnRmLmgiCkBAIC0yOCw3ICsyNyw2IEBACiAKICNkZWZpbmUgUk1fUlFfTE9DSyhyKSAoKHIpLT50 b3BfY3RybCAmIEJJVChEUFVfUk1fVE9QQ1RMX1JFU0VSVkVfTE9DSykpCiAjZGVmaW5lIFJNX1JR X0NMRUFSKHIpICgociktPnRvcF9jdHJsICYgQklUKERQVV9STV9UT1BDVExfUkVTRVJWRV9DTEVB UikpCi0jZGVmaW5lIFJNX1JRX0RTUFAocikgKChyKS0+dG9wX2N0cmwgJiBCSVQoRFBVX1JNX1RP UENUTF9EU1BQKSkKICNkZWZpbmUgUk1fUlFfRFMocikgKChyKS0+dG9wX2N0cmwgJiBCSVQoRFBV X1JNX1RPUENUTF9EUykpCiAjZGVmaW5lIFJNX0lTX1RPUE9MT0dZX01BVENIKHQsIHIpICgodCku bnVtX2xtID09IChyKS5udW1fbG0gJiYgXAogCQkJCSh0KS5udW1fY29tcF9lbmMgPT0gKHIpLm51 bV9lbmMgJiYgXApAQCAtMjM2LDkgKzIzNCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfcm1faHdfZGVz dHJveShlbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlLCB2b2lkICpodykKIAljYXNlIERQVV9IV19C TEtfTE06CiAJCWRwdV9od19sbV9kZXN0cm95KGh3KTsKIAkJYnJlYWs7Ci0JY2FzZSBEUFVfSFdf QkxLX0RTUFA6Ci0JCWRwdV9od19kc3BwX2Rlc3Ryb3koaHcpOwotCQlicmVhazsKIAljYXNlIERQ VV9IV19CTEtfRFM6CiAJCWRwdV9od19kc19kZXN0cm95KGh3KTsKIAkJYnJlYWs7CkBAIC0zMTgs OSArMzEzLDYgQEAgc3RhdGljIGludCBfZHB1X3JtX2h3X2Jsa19jcmVhdGUoCiAJY2FzZSBEUFVf SFdfQkxLX0xNOgogCQlodyA9IGRwdV9od19sbV9pbml0KGlkLCBtbWlvLCBjYXQpOwogCQlicmVh azsKLQljYXNlIERQVV9IV19CTEtfRFNQUDoKLQkJaHcgPSBkcHVfaHdfZHNwcF9pbml0KGlkLCBt bWlvLCBjYXQpOwotCQlicmVhazsKIAljYXNlIERQVV9IV19CTEtfRFM6CiAJCWh3ID0gZHB1X2h3 X2RzX2luaXQoaWQsIG1taW8sIGNhdCk7CiAJCWJyZWFrOwpAQCAtNDI4LDE1ICs0MjAsNiBAQCBp bnQgZHB1X3JtX2luaXQoc3RydWN0IGRwdV9ybSAqcm0sCiAJCX0KIAl9CiAKLQlmb3IgKGkgPSAw OyBpIDwgY2F0LT5kc3BwX2NvdW50OyBpKyspIHsKLQkJcmMgPSBfZHB1X3JtX2h3X2Jsa19jcmVh dGUocm0sIGNhdCwgbW1pbywgRFBVX0hXX0JMS19EU1BQLAotCQkJCWNhdC0+ZHNwcFtpXS5pZCwg JmNhdC0+ZHNwcFtpXSk7Ci0JCWlmIChyYykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQ6IGRzcHAg aHcgbm90IGF2YWlsYWJsZVxuIik7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQl9Ci0KIAlpZiAoY2F0 LT5tZHBbMF0uaGFzX2Rlc3Rfc2NhbGVyKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBjYXQtPmRzX2Nv dW50OyBpKyspIHsKIAkJCXJjID0gX2RwdV9ybV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1taW8s IERQVV9IV19CTEtfRFMsCkBAIC01MDAsMTYgKzQ4MywxNCBAQCBpbnQgZHB1X3JtX2luaXQoc3Ry dWN0IGRwdV9ybSAqcm0sCiAvKioKICAqIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0 ZWRfYmxrcyAtIGNoZWNrIGlmIHByb3Bvc2VkIGxheWVyIG1peGVyIG1lZXRzCiAgKglwcm9wb3Nl ZCB1c2UgY2FzZSByZXF1aXJlbWVudHMsIGluY2wuIGhhcmR3aXJlZCBkZXBlbmRlbnQgYmxvY2tz IGxpa2UKLSAqCXBpbmdwb25nLCBhbmQgZHNwcC4KKyAqCXBpbmdwb25nCiAgKiBAcm06IGRwdSBy ZXNvdXJjZSBtYW5hZ2VyIGhhbmRsZQogICogQHJzdnA6IHJlc2VydmF0aW9uIGN1cnJlbnRseSBi ZWluZyBjcmVhdGVkCiAgKiBAcmVxczogcHJvcG9zZWQgdXNlIGNhc2UgcmVxdWlyZW1lbnRzCiAg KiBAbG06IHByb3Bvc2VkIGxheWVyIG1peGVyLCBmdW5jdGlvbiBjaGVja3MgaWYgbG0sIGFuZCBh bGwgb3RoZXIgaGFyZHdpcmVkCi0gKiAgICAgIGJsb2NrcyBjb25uZWN0ZWQgdG8gdGhlIGxtIChw cCwgZHNwcCkgYXJlIGF2YWlsYWJsZSBhbmQgYXBwcm9wcmlhdGUKLSAqIEBkc3BwOiBvdXRwdXQg cGFyYW1ldGVyLCBkc3BwIGJsb2NrIGF0dGFjaGVkIHRvIHRoZSBsYXllciBtaXhlci4KLSAqICAg ICAgICBOVUxMIGlmIGRzcHAgd2FzIG5vdCBhdmFpbGFibGUsIG9yIG5vdCBtYXRjaGluZyByZXF1 aXJlbWVudHMuCisgKiAgICAgIGJsb2NrcyBjb25uZWN0ZWQgdG8gdGhlIGxtIChwcCkgaXMgYXZh aWxhYmxlIGFuZCBhcHByb3ByaWF0ZQogICogQHBwOiBvdXRwdXQgcGFyYW1ldGVyLCBwaW5ncG9u ZyBibG9jayBhdHRhY2hlZCB0byB0aGUgbGF5ZXIgbWl4ZXIuCi0gKiAgICAgIE5VTEwgaWYgZHNw cCB3YXMgbm90IGF2YWlsYWJsZSwgb3Igbm90IG1hdGNoaW5nIHJlcXVpcmVtZW50cy4KKyAqICAg ICAgTlVMTCBpZiBwcCB3YXMgbm90IGF2YWlsYWJsZSwgb3Igbm90IG1hdGNoaW5nIHJlcXVpcmVt ZW50cy4KICAqIEBwcmltYXJ5X2xtOiBpZiBub24tbnVsbCwgdGhpcyBmdW5jdGlvbiBjaGVjayBp ZiBsbSBpcyBjb21wYXRpYmxlIHByaW1hcnlfbG0KICAqICAgICAgICAgICAgICBhcyB3ZWxsIGFz IHNhdGlzZnlpbmcgYWxsIG90aGVyIHJlcXVpcmVtZW50cwogICogQFJldHVybjogdHJ1ZSBpZiBs bSBtYXRjaGVzIGFsbCByZXF1aXJlbWVudHMsIGZhbHNlIG90aGVyd2lzZQpAQCAtNTE5LDIxICs1 MDAsMTkgQEAgc3RhdGljIGJvb2wgX2RwdV9ybV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9i bGtzKAogCQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnAsCiAJCXN0cnVjdCBkcHVfcm1fcmVxdWly ZW1lbnRzICpyZXFzLAogCQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqbG0sCi0JCXN0cnVjdCBkcHVf cm1faHdfYmxrICoqZHNwcCwKIAkJc3RydWN0IGRwdV9ybV9od19ibGsgKipkcywKIAkJc3RydWN0 IGRwdV9ybV9od19ibGsgKipwcCwKIAkJc3RydWN0IGRwdV9ybV9od19ibGsgKnByaW1hcnlfbG0p CiB7CiAJY29uc3Qgc3RydWN0IGRwdV9sbV9jZmcgKmxtX2NmZyA9IHRvX2RwdV9od19taXhlcihs bS0+aHcpLT5jYXA7CiAJc3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXI7Ci0JYm9vbCBpc192YWxp ZF9kc3BwLCBpc192YWxpZF9kcywgcmV0OworCWJvb2wgaXNfdmFsaWRfZHM7CiAKLQkqZHNwcCA9 IE5VTEw7CiAJKmRzID0gTlVMTDsKIAkqcHAgPSBOVUxMOwogCi0JRFBVX0RFQlVHKCJjaGVjayBs bSAlZDogZHNwcCAlZCBkcyAlZCBwcCAlZFxuIiwKLQkJCSAgIGxtX2NmZy0+aWQsIGxtX2NmZy0+ ZHNwcCwKKwlEUFVfREVCVUcoImNoZWNrIGxtICVkIGRzICVkIHBwICVkXG4iLAorCQkJICAgbG1f Y2ZnLT5pZCwKIAkJCSAgIGxtX2NmZy0+ZHMsIGxtX2NmZy0+cGluZ3BvbmcpOwogCiAJLyogQ2hl Y2sgaWYgdGhpcyBsYXllciBtaXhlciBpcyBhIHBlZXIgb2YgdGhlIHByb3Bvc2VkIHByaW1hcnkg TE0gKi8KQEAgLTU0OCwyOCArNTI3LDEzIEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1f YW5kX2dldF9jb25uZWN0ZWRfYmxrcygKIAkJfQogCX0KIAotCWlzX3ZhbGlkX2RzcHAgPSAobG1f Y2ZnLT5kc3BwICE9IERTUFBfTUFYKSA/IHRydWUgOiBmYWxzZTsKIAlpc192YWxpZF9kcyA9IChs bV9jZmctPmRzICE9IERTX01BWCkgPyB0cnVlIDogZmFsc2U7CiAKLQkvKioKLQkgKiBSTV9SUV9Y OiBzcGVjaWZpY2F0aW9uIG9mIHdoaWNoIExNcyB0byBjaG9vc2UKLQkgKiBpc192YWxpZF9YOiBp bmRpY2F0ZXMgd2hldGhlciBMTSBpcyB0aWVkIHdpdGggYmxvY2sgWAotCSAqIHJldDogdHJ1ZSBp ZiBnaXZlbiBMTSBtYXRjaGVzIHRoZSB1c2VyIHJlcXVpcmVtZW50LCBmYWxzZSBvdGhlcndpc2UK LQkgKi8KLQlpZiAoUk1fUlFfRFNQUChyZXFzKSAmJiBSTV9SUV9EUyhyZXFzKSkKLQkJcmV0ID0g KGlzX3ZhbGlkX2RzcHAgJiYgaXNfdmFsaWRfZHMpOwotCWVsc2UgaWYgKFJNX1JRX0RTUFAocmVx cykpCi0JCXJldCA9IGlzX3ZhbGlkX2RzcHA7Ci0JZWxzZSBpZiAoUk1fUlFfRFMocmVxcykpCi0J CXJldCA9IGlzX3ZhbGlkX2RzOwotCWVsc2UKLQkJcmV0ID0gIShpc192YWxpZF9kc3BwIHx8IGlz X3ZhbGlkX2RzKTsKKwlpZiAoUk1fUlFfRFMocmVxcykgJiYgIWlzX3ZhbGlkX2RzKSB7CisJCURQ VV9ERUJVRygiZmFpbDpsbSglZClyZXFfZHMoJWQpZHMoJWQpXG4iLAorCQkJbG1fY2ZnLT5pZCwg KGJvb2wpKFJNX1JRX0RTKHJlcXMpKSwgbG1fY2ZnLT5kcyk7CiAKLQlpZiAoIXJldCkgewotCQlE UFVfREVCVUcoImZhaWw6bG0oJWQpcmVxX2RzcHAoJWQpZHNwcCglZClyZXFfZHMoJWQpZHMoJWQp XG4iLAotCQkJbG1fY2ZnLT5pZCwgKGJvb2wpKFJNX1JRX0RTUFAocmVxcykpLCBsbV9jZmctPmRz cHAsCi0JCQkoYm9vbCkoUk1fUlFfRFMocmVxcykpLCBsbV9jZmctPmRzKTsKLQkJcmV0dXJuIHJl dDsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIEFscmVhZHkgcmVzZXJ2ZWQ/ICovCkBAIC01 NzgsMjggKzU0Miw2IEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25u ZWN0ZWRfYmxrcygKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWlmIChsbV9jZmctPmRzcHAgIT0g RFNQUF9NQVgpIHsKLQkJZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlciwgMCwgRFBVX0hXX0JMS19E U1BQKTsKLQkJd2hpbGUgKF9kcHVfcm1fZ2V0X2h3X2xvY2tlZChybSwgJml0ZXIpKSB7Ci0JCQlp ZiAoaXRlci5ibGstPmlkID09IGxtX2NmZy0+ZHNwcCkgewotCQkJCSpkc3BwID0gaXRlci5ibGs7 Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoISpkc3BwKSB7Ci0JCQlEUFVfREVCVUco ImxtICVkIGZhaWxlZCB0byByZXRyaWV2ZSBkc3BwICVkXG4iLCBsbS0+aWQsCi0JCQkJCWxtX2Nm Zy0+ZHNwcCk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlpZiAoUkVTRVJWRURfQllfT1RI RVIoKmRzcHAsIHJzdnApKSB7Ci0JCQlEUFVfREVCVUcoImxtICVkIGRzcHAgJWQgYWxyZWFkeSBy ZXNlcnZlZFxuIiwKLQkJCQkJbG0tPmlkLCAoKmRzcHApLT5pZCk7Ci0JCQlyZXR1cm4gZmFsc2U7 Ci0JCX0KLQl9Ci0KIAlpZiAobG1fY2ZnLT5kcyAhPSBEU19NQVgpIHsKIAkJZHB1X3JtX2luaXRf aHdfaXRlcigmaXRlciwgMCwgRFBVX0hXX0JMS19EUyk7CiAJCXdoaWxlIChfZHB1X3JtX2dldF9o d19sb2NrZWQocm0sICZpdGVyKSkgewpAQCAtNjM4LDcgKzU4MCw2IEBAIHN0YXRpYyBib29sIF9k cHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcygKIAlpZiAoUkVTRVJWRURfQllf T1RIRVIoKnBwLCByc3ZwKSkgewogCQlEUFVfREVCVUcoImxtICVkIHBwICVkIGFscmVhZHkgcmVz ZXJ2ZWRcbiIsIGxtLT5pZCwKIAkJCQkoKnBwKS0+aWQpOwotCQkqZHNwcCA9IE5VTEw7CiAJCSpk cyA9IE5VTEw7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC02NTMsNyArNTk0LDYgQEAgc3RhdGlj IGludCBfZHB1X3JtX3Jlc2VydmVfbG1zKAogCiB7CiAJc3RydWN0IGRwdV9ybV9od19ibGsgKmxt W01BWF9CTE9DS1NdOwotCXN0cnVjdCBkcHVfcm1faHdfYmxrICpkc3BwW01BWF9CTE9DS1NdOwog CXN0cnVjdCBkcHVfcm1faHdfYmxrICpkc1tNQVhfQkxPQ0tTXTsKIAlzdHJ1Y3QgZHB1X3JtX2h3 X2JsayAqcHBbTUFYX0JMT0NLU107CiAJc3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXJfaSwgaXRl cl9qOwpAQCAtNjcwLDcgKzYxMCw2IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xtcygK IAl3aGlsZSAobG1fY291bnQgIT0gcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSAmJgogCQkJX2RwdV9y bV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRlcl9pKSkgewogCQltZW1zZXQoJmxtLCAwLCBzaXplb2Yo bG0pKTsKLQkJbWVtc2V0KCZkc3BwLCAwLCBzaXplb2YoZHNwcCkpOwogCQltZW1zZXQoJmRzLCAw LCBzaXplb2YoZHMpKTsKIAkJbWVtc2V0KCZwcCwgMCwgc2l6ZW9mKHBwKSk7CiAKQEAgLTY3OCw4 ICs2MTcsNyBAQCBzdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9sbXMoCiAJCWxtW2xtX2NvdW50 XSA9IGl0ZXJfaS5ibGs7CiAKIAkJaWYgKCFfZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVj dGVkX2Jsa3MoCi0JCQkJcm0sIHJzdnAsIHJlcXMsIGxtW2xtX2NvdW50XSwKLQkJCQkmZHNwcFts bV9jb3VudF0sICZkc1tsbV9jb3VudF0sCisJCQkJcm0sIHJzdnAsIHJlcXMsIGxtW2xtX2NvdW50 XSwgJmRzW2xtX2NvdW50XSwKIAkJCQkmcHBbbG1fY291bnRdLCBOVUxMKSkKIAkJCWNvbnRpbnVl OwogCkBAIC02OTUsOCArNjMzLDggQEAgc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfbG1zKAog CiAJCQlpZiAoIV9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcygKIAkJCQkJ cm0sIHJzdnAsIHJlcXMsIGl0ZXJfai5ibGssCi0JCQkJCSZkc3BwW2xtX2NvdW50XSwgJmRzW2xt X2NvdW50XSwKLQkJCQkJJnBwW2xtX2NvdW50XSwgaXRlcl9pLmJsaykpCisJCQkJCSZkc1tsbV9j b3VudF0sICZwcFtsbV9jb3VudF0sCisJCQkJCWl0ZXJfaS5ibGspKQogCQkJCWNvbnRpbnVlOwog CiAJCQlsbVtsbV9jb3VudF0gPSBpdGVyX2ouYmxrOwpAQCAtNzE1LDE0ICs2NTMsMTEgQEAgc3Rh dGljIGludCBfZHB1X3JtX3Jlc2VydmVfbG1zKAogCiAJCWxtW2ldLT5yc3ZwX254dCA9IHJzdnA7 CiAJCXBwW2ldLT5yc3ZwX254dCA9IHJzdnA7Ci0JCWlmIChkc3BwW2ldKQotCQkJZHNwcFtpXS0+ cnN2cF9ueHQgPSByc3ZwOwogCiAJCWlmIChkc1tpXSkKIAkJCWRzW2ldLT5yc3ZwX254dCA9IHJz dnA7CiAKIAkJRFBVX0VWVDMyKGxtW2ldLT50eXBlLCByc3ZwLT5lbmNfaWQsIGxtW2ldLT5pZCwg cHBbaV0tPmlkLAotCQkJCWRzcHBbaV0gPyBkc3BwW2ldLT5pZCA6IDAsCiAJCQkJZHNbaV0gPyBk c1tpXS0+aWQgOiAwKTsKIAl9CiAKQEAgLTg4OSwxOCArODI0LDcgQEAgc3RhdGljIGludCBfZHB1 X3JtX21ha2VfbmV4dF9yc3ZwKAogCXJzdnAtPnRvcG9sb2d5ID0gcmVxcy0+dG9wb2xvZ3ktPnRv cF9uYW1lOwogCWxpc3RfYWRkX3RhaWwoJnJzdnAtPmxpc3QsICZybS0+cnN2cHMpOwogCi0JLyoK LQkgKiBBc3NpZ24gTE1zIGFuZCBibG9ja3Mgd2hvc2UgdXNhZ2UgaXMgdGllZCB0byB0aGVtOiBE U1BQICYgUGluZ3BvbmcuCi0JICogRG8gYXNzaWdubWVudCBwcmVmZXJyaW5nIHRvIGdpdmUgYXdh eSBsb3ctcmVzb3VyY2UgbWl4ZXJzIGZpcnN0OgotCSAqIC0gQ2hlY2sgbWl4ZXJzIHdpdGhvdXQg RFNQUHMKLQkgKiAtIE9ubHkgdGhlbiBhbGxvdyB0byBncmFiIGZyb20gbWl4ZXJzIHdpdGggRFNQ UCBjYXBhYmlsaXR5Ci0JICovCiAJcmV0ID0gX2RwdV9ybV9yZXNlcnZlX2xtcyhybSwgcnN2cCwg cmVxcyk7Ci0JaWYgKHJldCAmJiAhUk1fUlFfRFNQUChyZXFzKSkgewotCQlyZXFzLT50b3BfY3Ry bCB8PSBCSVQoRFBVX1JNX1RPUENUTF9EU1BQKTsKLQkJcmV0ID0gX2RwdV9ybV9yZXNlcnZlX2xt cyhybSwgcnN2cCwgcmVxcyk7Ci0JfQotCiAJaWYgKHJldCkgewogCQlEUFVfRVJST1IoInVuYWJs ZSB0byBmaW5kIGFwcHJvcHJpYXRlIG1peGVyc1xuIik7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uaCBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCmluZGV4IDRjNzc4NzQuLmVmM2Y2N2IgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCkBAIC00NSwxMyArNDUsMTEgQEAgZW51 bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZSB7CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZWxlYXNlIGFueSByZXNlcnZhdGlvbiBoZWxkIGJ5IHRoaXMgZGlzcGxheS4KICAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbCBiZWhhdmlvciB3b3VsZCBub3QgaW1wYWN0 IHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2YXRpb24gbGlzdCBk dXJpbmcgdGhlIEF0b21pY1Rlc3QgcGhhc2UuCi0gKiBARFBVX1JNX1RPUENUTF9EU1BQOiBSZXF1 aXJlIGxheWVyIG1peGVycyB3aXRoIERTUFAgY2FwYWJpbGl0aWVzCiAgKiBARFBVX1JNX1RPUENU TF9EUyAgOiBSZXF1aXJlIGxheWVyIG1peGVycyB3aXRoIERTIGNhcGFiaWxpdGllcwogICovCiBl bnVtIGRwdV9ybV90b3BvbG9neV9jb250cm9sIHsKIAlEUFVfUk1fVE9QQ1RMX1JFU0VSVkVfTE9D SywKIAlEUFVfUk1fVE9QQ1RMX1JFU0VSVkVfQ0xFQVIsCi0JRFBVX1JNX1RPUENUTF9EU1BQLAog CURQVV9STV9UT1BDVExfRFMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCmluZGV4IGI3MzExMmEu LjU3NzBhYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCkBAIC03NCwzOSArNzQsMTEgQEAgc3RydWN0 IG1zbV9maWxlX3ByaXZhdGUgewogfTsKIAogZW51bSBtc21fbWRwX3BsYW5lX3Byb3BlcnR5IHsK LQkvKiBibG9iIHByb3BlcnRpZXMsIGFsd2F5cyBwdXQgdGhlc2UgZmlyc3QgKi8KLQlQTEFORV9Q Uk9QX1NDQUxFUl9WMSwKLQlQTEFORV9QUk9QX1NDQUxFUl9WMiwKLQlQTEFORV9QUk9QX0NTQ19W MSwKLQlQTEFORV9QUk9QX0lORk8sCi0JUExBTkVfUFJPUF9TQ0FMRVJfTFVUX0VELAotCVBMQU5F X1BST1BfU0NBTEVSX0xVVF9DSVIsCi0JUExBTkVfUFJPUF9TQ0FMRVJfTFVUX1NFUCwKLQlQTEFO RV9QUk9QX1NLSU5fQ09MT1IsCi0JUExBTkVfUFJPUF9TS1lfQ09MT1IsCi0JUExBTkVfUFJPUF9G T0xJQUdFX0NPTE9SLAotCVBMQU5FX1BST1BfUk9UX0NBUFNfVjEsCi0KIAkvKiAjIG9mIGJsb2Ig cHJvcGVydGllcyAqLwogCVBMQU5FX1BST1BfQkxPQkNPVU5ULAogCiAJLyogcmFuZ2UgcHJvcGVy dGllcyAqLwogCVBMQU5FX1BST1BfWlBPUyA9IFBMQU5FX1BST1BfQkxPQkNPVU5ULAotCVBMQU5F X1BST1BfQUxQSEEsCi0JUExBTkVfUFJPUF9DT0xPUl9GSUxMLAotCVBMQU5FX1BST1BfSF9ERUNJ TUFURSwKLQlQTEFORV9QUk9QX1ZfREVDSU1BVEUsCi0JUExBTkVfUFJPUF9IVUVfQURKVVNULAot CVBMQU5FX1BST1BfU0FUVVJBVElPTl9BREpVU1QsCi0JUExBTkVfUFJPUF9WQUxVRV9BREpVU1Qs Ci0JUExBTkVfUFJPUF9DT05UUkFTVF9BREpVU1QsCi0JUExBTkVfUFJPUF9FWENMX1JFQ1RfVjEs Ci0JUExBTkVfUFJPUF9QUkVGSUxMX1NJWkUsCi0JUExBTkVfUFJPUF9QUkVGSUxMX1RJTUUsCi0K LQkvKiBlbnVtL2JpdG1hc2sgcHJvcGVydGllcyAqLwotCVBMQU5FX1BST1BfQkxFTkRfT1AsCi0J UExBTkVfUFJPUF9TUkNfQ09ORklHLAogCiAJLyogdG90YWwgIyBvZiBwcm9wZXJ0aWVzICovCiAJ UExBTkVfUFJPUF9DT1VOVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcHVfZHJtLmgg Yi9pbmNsdWRlL3VhcGkvZHJtL2RwdV9kcm0uaAppbmRleCBkYTczMjc5Li45M2FmMWZiIDEwMDY0 NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2RwdV9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJt L2RwdV9kcm0uaApAQCAtNjYsMTkzICs2Niw2IEBACiAvKiBEUk0gYml0bWFza3MgYXJlIHJlc3Ry aWN0ZWQgdG8gMC4uNjMgKi8KICNkZWZpbmUgRFBVX0RSTV9CSVRNQVNLX0NPVU5UICAgICAgIDY0 CiAKLS8qKgotICogc3RydWN0IGRwdV9kcm1fcGl4X2V4dF92MSAtIHZlcnNpb24gMSBvZiBwaXhl bCBleHQgc3RydWN0dXJlCi0gKiBAbnVtX2V4dF9weGxzX2xyOiBOdW1iZXIgb2YgdG90YWwgaG9y aXpvbnRhbCBwaXhlbHMKLSAqIEBudW1fZXh0X3B4bHNfdGI6IE51bWJlciBvZiB0b3RhbCB2ZXJ0 aWNhbCBsaW5lcwotICogQGxlZnRfZnRjaDogICAgICAgTnVtYmVyIG9mIGV4dHJhIHBpeGVscyB0 byBvdmVyZmV0Y2ggZnJvbSBsZWZ0Ci0gKiBAcmlnaHRfZnRjaDogICAgICBOdW1iZXIgb2YgZXh0 cmEgcGl4ZWxzIHRvIG92ZXJmZXRjaCBmcm9tIHJpZ2h0Ci0gKiBAdG9wX2Z0Y2g6ICAgICAgICBO dW1iZXIgb2YgZXh0cmEgbGluZXMgdG8gb3ZlcmZldGNoIGZyb20gdG9wCi0gKiBAYnRtX2Z0Y2g6 ICAgICAgICBOdW1iZXIgb2YgZXh0cmEgbGluZXMgdG8gb3ZlcmZldGNoIGZyb20gYm90dG9tCi0g KiBAbGVmdF9ycHQ6ICAgICAgICBOdW1iZXIgb2YgZXh0cmEgcGl4ZWxzIHRvIHJlcGVhdCBmcm9t IGxlZnQKLSAqIEByaWdodF9ycHQ6ICAgICAgIE51bWJlciBvZiBleHRyYSBwaXhlbHMgdG8gcmVw ZWF0IGZyb20gcmlnaHQKLSAqIEB0b3BfcnB0OiAgICAgICAgIE51bWJlciBvZiBleHRyYSBsaW5l cyB0byByZXBlYXQgZnJvbSB0b3AKLSAqIEBidG1fcnB0OiAgICAgICAgIE51bWJlciBvZiBleHRy YSBsaW5lcyB0byByZXBlYXQgZnJvbSBib3R0b20KLSAqLwotc3RydWN0IGRwdV9kcm1fcGl4X2V4 dF92MSB7Ci0JLyoKLQkgKiBOdW1iZXIgb2YgcGl4ZWxzIGV4dCBpbiBsZWZ0LCByaWdodCwgdG9w IGFuZCBib3R0b20gZGlyZWN0aW9uCi0JICogZm9yIGFsbCBjb2xvciBjb21wb25lbnRzLgotCSAq LwotCWludDMyX3QgbnVtX2V4dF9weGxzX2xyW0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90IG51 bV9leHRfcHhsc190YltEUFVfTUFYX1BMQU5FU107Ci0KLQkvKgotCSAqIE51bWJlciBvZiBwaXhl bHMgbmVlZHMgdG8gYmUgb3ZlcmZldGNoZWQgaW4gbGVmdCwgcmlnaHQsIHRvcAotCSAqIGFuZCBi b3R0b20gZGlyZWN0aW9ucyBmcm9tIHNvdXJjZSBpbWFnZSBmb3Igc2NhbGluZy4KLQkgKi8KLQlp bnQzMl90IGxlZnRfZnRjaFtEUFVfTUFYX1BMQU5FU107Ci0JaW50MzJfdCByaWdodF9mdGNoW0RQ VV9NQVhfUExBTkVTXTsKLQlpbnQzMl90IHRvcF9mdGNoW0RQVV9NQVhfUExBTkVTXTsKLQlpbnQz Ml90IGJ0bV9mdGNoW0RQVV9NQVhfUExBTkVTXTsKLQkvKgotCSAqIE51bWJlciBvZiBwaXhlbHMg bmVlZHMgdG8gYmUgcmVwZWF0ZWQgaW4gbGVmdCwgcmlnaHQsIHRvcCBhbmQKLQkgKiBib3R0b20g ZGlyZWN0aW9ucyBmb3Igc2NhbGluZy4KLQkgKi8KLQlpbnQzMl90IGxlZnRfcnB0W0RQVV9NQVhf UExBTkVTXTsKLQlpbnQzMl90IHJpZ2h0X3JwdFtEUFVfTUFYX1BMQU5FU107Ci0JaW50MzJfdCB0 b3BfcnB0W0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90IGJ0bV9ycHRbRFBVX01BWF9QTEFORVNd OwotCi19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfZHJtX3NjYWxlcl92MSAtIHZlcnNpb24gMSBv ZiBzdHJ1Y3QgZHB1X2RybV9zY2FsZXIKLSAqIEBscjogICAgICAgICAgICBQaXhlbCBleHRlbnNp b24gc2V0dGluZ3MgZm9yIGxlZnQvcmlnaHQKLSAqIEB0YjogICAgICAgICAgICBQaXhlbCBleHRl bnNpb24gc2V0dGluZ3MgZm9yIHRvcC9ib3R0b24KLSAqIEBpbml0X3BoYXNlX3g6ICBJbml0aWFs IHNjYWxlciBwaGFzZSB2YWx1ZXMgZm9yIHgKLSAqIEBwaGFzZV9zdGVwX3g6ICBQaGFzZSBzdGVw IHZhbHVlcyBmb3IgeAotICogQGluaXRfcGhhc2VfeTogIEluaXRpYWwgc2NhbGVyIHBoYXNlIHZh bHVlcyBmb3IgeQotICogQHBoYXNlX3N0ZXBfeTogIFBoYXNlIHN0ZXAgdmFsdWVzIGZvciB5Ci0g KiBAaG9yel9maWx0ZXI6ICAgSG9yaXpvbnRhbCBmaWx0ZXIgYXJyYXkKLSAqIEB2ZXJ0X2ZpbHRl cjogICBWZXJ0aWNhbCBmaWx0ZXIgYXJyYXkKLSAqLwotc3RydWN0IGRwdV9kcm1fc2NhbGVyX3Yx IHsKLQkvKgotCSAqIFBpeCBleHQgc2V0dGluZ3MKLQkgKi8KLQlzdHJ1Y3QgZHB1X2RybV9waXhf ZXh0X3YxIHBlOwotCS8qCi0JICogUGhhc2Ugc2V0dGluZ3MKLQkgKi8KLQlpbnQzMl90IGluaXRf cGhhc2VfeFtEUFVfTUFYX1BMQU5FU107Ci0JaW50MzJfdCBwaGFzZV9zdGVwX3hbRFBVX01BWF9Q TEFORVNdOwotCWludDMyX3QgaW5pdF9waGFzZV95W0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90 IHBoYXNlX3N0ZXBfeVtEUFVfTUFYX1BMQU5FU107Ci0KLQkvKgotCSAqIEZpbHRlciB0eXBlIHRv IGJlIHVzZWQgZm9yIHNjYWxpbmcgaW4gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwKLQkgKiBkaXJl Y3Rpb25zCi0JICovCi0JdWludDMyX3QgaG9yel9maWx0ZXJbRFBVX01BWF9QTEFORVNdOwotCXVp bnQzMl90IHZlcnRfZmlsdGVyW0RQVV9NQVhfUExBTkVTXTsKLX07Ci0KLS8qKgotICogc3RydWN0 IGRwdV9kcm1fZGVfdjEgLSB2ZXJzaW9uIDEgb2YgZGV0YWlsIGVuaGFuY2VyIHN0cnVjdHVyZQot ICogQGVuYWJsZTogICAgICAgICBFbmFibGVzL2Rpc2FibGVzIGRldGFpbCBlbmhhbmNlcgotICog QHNoYXJwZW5fbGV2ZWwxOiBTaGFycGVuaW5nIHN0cmVuZ3RoIGZvciBub2lzZQotICogQHNoYXJw ZW5fbGV2ZWwyOiBTaGFycGVuaW5nIHN0cmVuZ3RoIGZvciBjb250ZXh0Ci0gKiBAY2xpcDogICAg ICAgICAgIENsaXAgY29lZmZpY2llbnQKLSAqIEBsaW1pdDogICAgICAgICAgRGV0YWlsIGVuaGFu Y2VyIGxpbWl0IGZhY3RvcgotICogQHRocl9xdWlldDogICAgICBRdWl0ZSB6b25lIHRocmVzaG9s ZAotICogQHRocl9kaWVvdXQ6ICAgICBEaWUtb3V0IHpvbmUgdGhyZXNob2xkCi0gKiBAdGhyX2xv dzogICAgICAgIExpbmVhciB6b25lIGxlZnQgdGhyZXNob2xkCi0gKiBAdGhyX2hpZ2g6ICAgICAg IExpbmVhciB6b25lIHJpZ2h0IHRocmVzaG9sZAotICogQHByZWNfc2hpZnQ6ICAgICBEZXRhaWwg ZW5oYW5jZXIgcHJlY2lzaW9uCi0gKiBAYWRqdXN0X2E6ICAgICAgIE1hcHBpbmcgY3VydmVzIEEg Y29lZmZpY2llbnRzCi0gKiBAYWRqdXN0X2I6ICAgICAgIE1hcHBpbmcgY3VydmVzIEIgY29lZmZp Y2llbnRzCi0gKiBAYWRqdXN0X2M6ICAgICAgIE1hcHBpbmcgY3VydmVzIEMgY29lZmZpY2llbnRz Ci0gKi8KLXN0cnVjdCBkcHVfZHJtX2RlX3YxIHsKLQl1aW50MzJfdCBlbmFibGU7Ci0JaW50MTZf dCBzaGFycGVuX2xldmVsMTsKLQlpbnQxNl90IHNoYXJwZW5fbGV2ZWwyOwotCXVpbnQxNl90IGNs aXA7Ci0JdWludDE2X3QgbGltaXQ7Ci0JdWludDE2X3QgdGhyX3F1aWV0OwotCXVpbnQxNl90IHRo cl9kaWVvdXQ7Ci0JdWludDE2X3QgdGhyX2xvdzsKLQl1aW50MTZfdCB0aHJfaGlnaDsKLQl1aW50 MTZfdCBwcmVjX3NoaWZ0OwotCWludDE2X3QgYWRqdXN0X2FbRFBVX01BWF9ERV9DVVJWRVNdOwot CWludDE2X3QgYWRqdXN0X2JbRFBVX01BWF9ERV9DVVJWRVNdOwotCWludDE2X3QgYWRqdXN0X2Nb RFBVX01BWF9ERV9DVVJWRVNdOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2RybV9zY2FsZXJf djIgLSB2ZXJzaW9uIDIgb2Ygc3RydWN0IGRwdV9kcm1fc2NhbGVyCi0gKiBAZW5hYmxlOiAgICAg ICAgICAgIFNjYWxlciBlbmFibGUKLSAqIEBkaXJfZW46ICAgICAgICAgICAgRGV0YWlsIGVuaGFu Y2VyIGVuYWJsZQotICogQHBlOiAgICAgICAgICAgICAgICBQaXhlbCBleHRlbnNpb24gc2V0dGlu Z3MKLSAqIEBob3J6X2RlY2ltYXRlOiAgICAgSG9yaXpvbnRhbCBkZWNpbWF0aW9uIGZhY3Rvcgot ICogQHZlcnRfZGVjaW1hdGU6ICAgICBWZXJ0aWNhbCBkZWNpbWF0aW9uIGZhY3RvcgotICogQGlu aXRfcGhhc2VfeDogICAgICBJbml0aWFsIHNjYWxlciBwaGFzZSB2YWx1ZXMgZm9yIHgKLSAqIEBw aGFzZV9zdGVwX3g6ICAgICAgUGhhc2Ugc3RlcCB2YWx1ZXMgZm9yIHgKLSAqIEBpbml0X3BoYXNl X3k6ICAgICAgSW5pdGlhbCBzY2FsZXIgcGhhc2UgdmFsdWVzIGZvciB5Ci0gKiBAcGhhc2Vfc3Rl cF95OiAgICAgIFBoYXNlIHN0ZXAgdmFsdWVzIGZvciB5Ci0gKiBAcHJlbG9hZF94OiAgICAgICAg IEhvcml6b250YWwgcHJlbG9hZCB2YWx1ZQotICogQHByZWxvYWRfeTogICAgICAgICBWZXJ0aWNh bCBwcmVsb2FkIHZhbHVlCi0gKiBAc3JjX3dpZHRoOiAgICAgICAgIFNvdXJjZSB3aWR0aAotICog QHNyY19oZWlnaHQ6ICAgICAgICBTb3VyY2UgaGVpZ2h0Ci0gKiBAZHN0X3dpZHRoOiAgICAgICAg IERlc3RpbmF0aW9uIHdpZHRoCi0gKiBAZHN0X2hlaWdodDogICAgICAgIERlc3RpbmF0aW9uIGhl aWdodAotICogQHlfcmdiX2ZpbHRlcl9jZmc6ICBZL1JHQiBwbGFuZSBmaWx0ZXIgY29uZmlndXJh dGlvbgotICogQHV2X2ZpbHRlcl9jZmc6ICAgICBVViBwbGFuZSBmaWx0ZXIgY29uZmlndXJhdGlv bgotICogQGFscGhhX2ZpbHRlcl9jZmc6ICBBbHBoYSBmaWx0ZXIgY29uZmlndXJhdGlvbgotICog QGJsZW5kX2NmZzogICAgICAgICBTZWxlY3Rpb24gb2YgYmxlbmQgY29lZmZpY2llbnRzCi0gKiBA bHV0X2ZsYWc6ICAgICAgICAgIExVVCBjb25maWd1cmF0aW9uIGZsYWdzCi0gKiBAZGlyX2x1dF9p ZHg6ICAgICAgIDJkIDR4NCBMVVQgaW5kZXgKLSAqIEB5X3JnYl9jaXJfbHV0X2lkeDogWS9SR0Ig Y2lyY3VsYXIgTFVUIGluZGV4Ci0gKiBAdXZfY2lyX2x1dF9pZHg6ICAgIFVWIGNpcmN1bGFyIExV VCBpbmRleAotICogQHlfcmdiX3NlcF9sdXRfaWR4OiBZL1JHQiBzZXBhcmFibGUgTFVUIGluZGV4 Ci0gKiBAdXZfc2VwX2x1dF9pZHg6ICAgIFVWIHNlcGFyYWJsZSBMVVQgaW5kZXgKLSAqIEBkZTog ICAgICAgICAgICAgICAgRGV0YWlsIGVuaGFuY2VyIHNldHRpbmdzCi0gKi8KLXN0cnVjdCBkcHVf ZHJtX3NjYWxlcl92MiB7Ci0JLyoKLQkgKiBHZW5lcmFsIGRlZmluaXRpb25zCi0JICovCi0JdWlu dDMyX3QgZW5hYmxlOwotCXVpbnQzMl90IGRpcl9lbjsKLQotCS8qCi0JICogUGl4IGV4dCBzZXR0 aW5ncwotCSAqLwotCXN0cnVjdCBkcHVfZHJtX3BpeF9leHRfdjEgcGU7Ci0KLQkvKgotCSAqIERl Y2ltYXRpb24gc2V0dGluZ3MKLQkgKi8KLQl1aW50MzJfdCBob3J6X2RlY2ltYXRlOwotCXVpbnQz Ml90IHZlcnRfZGVjaW1hdGU7Ci0KLQkvKgotCSAqIFBoYXNlIHNldHRpbmdzCi0JICovCi0JaW50 MzJfdCBpbml0X3BoYXNlX3hbRFBVX01BWF9QTEFORVNdOwotCWludDMyX3QgcGhhc2Vfc3RlcF94 W0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90IGluaXRfcGhhc2VfeVtEUFVfTUFYX1BMQU5FU107 Ci0JaW50MzJfdCBwaGFzZV9zdGVwX3lbRFBVX01BWF9QTEFORVNdOwotCi0JdWludDMyX3QgcHJl bG9hZF94W0RQVV9NQVhfUExBTkVTXTsKLQl1aW50MzJfdCBwcmVsb2FkX3lbRFBVX01BWF9QTEFO RVNdOwotCXVpbnQzMl90IHNyY193aWR0aFtEUFVfTUFYX1BMQU5FU107Ci0JdWludDMyX3Qgc3Jj X2hlaWdodFtEUFVfTUFYX1BMQU5FU107Ci0KLQl1aW50MzJfdCBkc3Rfd2lkdGg7Ci0JdWludDMy X3QgZHN0X2hlaWdodDsKLQotCXVpbnQzMl90IHlfcmdiX2ZpbHRlcl9jZmc7Ci0JdWludDMyX3Qg dXZfZmlsdGVyX2NmZzsKLQl1aW50MzJfdCBhbHBoYV9maWx0ZXJfY2ZnOwotCXVpbnQzMl90IGJs ZW5kX2NmZzsKLQotCXVpbnQzMl90IGx1dF9mbGFnOwotCXVpbnQzMl90IGRpcl9sdXRfaWR4Owot Ci0JLyogZm9yIFkoUkdCKSBhbmQgVVYgcGxhbmVzKi8KLQl1aW50MzJfdCB5X3JnYl9jaXJfbHV0 X2lkeDsKLQl1aW50MzJfdCB1dl9jaXJfbHV0X2lkeDsKLQl1aW50MzJfdCB5X3JnYl9zZXBfbHV0 X2lkeDsKLQl1aW50MzJfdCB1dl9zZXBfbHV0X2lkeDsKLQotCS8qCi0JICogRGV0YWlsIGVuaGFu Y2VyIHNldHRpbmdzCi0JICovCi0Jc3RydWN0IGRwdV9kcm1fZGVfdjEgZGU7Ci19OwotCiAvKiBO dW1iZXIgb2YgZGVzdCBzY2FsZXJzIHN1cHBvcnRlZCAqLwogI2RlZmluZSBEUFVfTUFYX0RTX0NP VU5UIDIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9tc21fZHJtLmggYi9pbmNsdWRl L3VhcGkvZHJtL21zbV9kcm0uaAppbmRleCA0MDRmMjAxLi42MGIxYTMwIDEwMDY0NAotLS0gYS9p bmNsdWRlL3VhcGkvZHJtL21zbV9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL21zbV9kcm0u aApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBfX01TTV9EUk1fSF9fCiAKICNpbmNsdWRlICJk cm0uaCIKLSNpbmNsdWRlICJkcHVfZHJtLmgiCiAKICNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQog ZXh0ZXJuICJDIiB7Ci0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMg YSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29s bGFib3JhdGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9m cmVlZHJlbm8K