From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH 2/7] drm/msm/dpu: clean up dpu plane custom properties Date: Wed, 23 May 2018 12:30:57 -0700 Message-ID: <1527103862-13934-3-git-send-email-jsanka@codeaurora.org> References: <1527103862-13934-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: <1527103862-13934-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: linux-arm-msm@vger.kernel.org VGhpcyBjaGFuZ2UgcmVtb3ZlcyBhbGwgdGhlIGRwdSBwbGFuZSBjdXN0b20gcHJvcGVydGllcwph bmQgaXRzIGhhbmRsZXJzLgoKU2lnbmVkLW9mZi1ieTogSmV5a3VtYXIgU2Fua2FyYW4gPGpzYW5r YUBjb2RlYXVyb3JhLm9yZz4KLS0tCiBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfYWQ0LmggICAgICAgICAgICB8ICAgOTkgLS0KIC4uLi9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2NvbG9yX3Byb2Nlc3NpbmcuYyAgIHwgMTUyMSAtLS0tLS0tLS0tLS0tLS0tLS0t LQogLi4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29sb3JfcHJvY2Vzc2luZy5oICAgfCAg MTIwIC0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jICAgICAgICAg ICB8ICAxNDggKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggICAg ICAgICAgIHwgICAgMyArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXIuYyAgICAgICAgfCAgICAyIC0KIC4uLi9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXJfcGh5c193Yi5jICAgIHwgICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfYWQ0LmMgICAgICAgICB8IDE0NDMgLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYyAgICAgfCAgIDcyICstCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5oICAgICB8ICAgODkgLS0K IC4uLi9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jX2NvbW1vbl92NC5oICAgIHwgICA2 OSAtCiAuLi4vZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jX3Y0LmMgICB8 ICAyNDIgLS0tLQogLi4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY192 NC5oICAgfCAgIDQwIC0KIC4uLi9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vz c2luZy5oICAgIHwgICAyMCAtCiAuLi4vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vz c2luZ192MV83LmMgICB8ICA1NjUgLS0tLS0tLS0KIC4uLi9tc20vZGlzcC9kcHUxL2RwdV9od19j b2xvcl9wcm9jZXNzaW5nX3YxXzcuaCAgIHwgICA5MiAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2N0bC5jICAgICAgICAgfCAgIDQ0IC0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19jdGwuaCAgICAgICAgIHwgICAxNSAtCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHNwcC5jICAgICAgICB8ICAyMDkgLS0tCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHNwcC5oICAgICAgICB8ICAyMjAgLS0tCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uYyAgICAgICAgICB8ICAgIDEg KwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaCAgICAgICAgfCAg IDQ0ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcGluZ3BvbmcuYyAg ICB8ICAgNjggLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25n LmggICAgfCAgICA2IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdf ZG1hX3YxLmMgIHwgIDc1NyAtLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfcmVnX2RtYV92MS5oICB8ICAgMjcgLQogLi4uL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3JlZ19kbWFfdjFfY29sb3JfcHJvYy5jICAgfCAgOTQzIC0tLS0tLS0tLS0tLQogLi4uL21zbS9k aXNwL2RwdTEvZHB1X2h3X3JlZ19kbWFfdjFfY29sb3JfcHJvYy5oICAgfCAgIDc1IC0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmMgICAgICAgIHwgIDIxOSAtLS0K IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmggICAgICAgIHwgICA3 MyAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdXRpbC5jICAgICAgICB8 ICAgIDEgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3V0aWwuaCAgICAg ICAgfCAgMTU2ICsrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMgICAg ICAgICAgICB8ICAgIDMgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5l LmMgICAgICAgICAgfCAxMjY3ICstLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9wbGFuZS5oICAgICAgICAgIHwgICAzMSAtCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfcmVnX2RtYS5jICAgICAgICB8ICAxMzkgLS0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9yZWdfZG1hLmggICAgICAgIHwgIDMxMCAtLS0tCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYyAgICAgICAgICAgICB8ICAxMDIgKy0K IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oICAgICAgICAgICAgIHwgICAg MiAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfd2IuYyAgICAgICAgICAgICB8 ICAgIDIgLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggICAgICAgICAgICAgICAgICAg ICAgfCAgIDI4IC0KIGluY2x1ZGUvdWFwaS9kcm0vZHB1X2RybS5oICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDE4NyAtLS0KIGluY2x1ZGUvdWFwaS9kcm0vbXNtX2RybS5oICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgMSAtCiA0NSBmaWxlcyBjaGFuZ2VkLCAyNzcgaW5zZXJ0aW9ucygr KSwgOTE4OSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfYWQ0LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29sb3JfcHJvY2Vzc2luZy5jCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvbG9yX3Byb2Nlc3NpbmcuaAog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19h ZDQuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19jb2xvcl9wcm9jX2NvbW1vbl92NC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2NfdjQuYwogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jX3Y0 LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfY29sb3JfcHJvY2Vzc2luZy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nlc3NpbmdfdjFfNy5jCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nl c3NpbmdfdjFfNy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2RzcHAuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19kc3BwLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92MS5jCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JlZ19kbWFfdjEuaAogZGVs ZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdf ZG1hX3YxX2NvbG9yX3Byb2MuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3YxX2NvbG9yX3Byb2MuaAogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9yZWdfZG1hLmMKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcmVnX2RtYS5o CgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAzYzAwMDQwLi4xZjIzYzY2 IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMzY0LDcgKzM2NCw3IEBA IEhPU1RfTEZTX0xJQlMgOj0gJChzaGVsbCBnZXRjb25mIExGU19MSUJTKQogSE9TVENDICAgICAg ID0gZ2NjCiBIT1NUQ1hYICAgICAgPSBnKysKIEhPU1RDRkxBR1MgICA6PSAtV2FsbCAtV21pc3Np bmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiBcCi0JCS1mb21pdC1mcmFtZS1w b2ludGVyIC1zdGQ9Z251ODkgJChIT1NUX0xGU19DRkxBR1MpCisJCS1mb21pdC1mcmFtZS1wb2lu dGVyIC1zdGQ9Z251ODkgLVdtYXliZS11bmluaXRpYWxpemVkICQoSE9TVF9MRlNfQ0ZMQUdTKQog SE9TVENYWEZMQUdTIDo9IC1PMiAkKEhPU1RfTEZTX0NGTEFHUykKIEhPU1RMREZMQUdTICA6PSAk KEhPU1RfTEZTX0xERkxBR1MpCiBIT1NUX0xPQURMSUJFUyA6PSAkKEhPU1RfTEZTX0xJQlMpCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L21zbS9NYWtlZmlsZQppbmRleCBkNzU1OGVkLi43YmMzOTIxIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUK QEAgLTQ2LDcgKzQ2LDYgQEAgbXNtLXkgOj0gXAogCWRpc3AvbWRwNS9tZHA1X21peGVyLm8gXAog CWRpc3AvbWRwNS9tZHA1X3BsYW5lLm8gXAogCWRpc3AvbWRwNS9tZHA1X3NtcC5vIFwKLQlkaXNw L2RwdTEvZHB1X2NvbG9yX3Byb2Nlc3NpbmcubyBcCiAJZGlzcC9kcHUxL2RwdV9jb3JlX2lycS5v IFwKIAlkaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5vIFwKIAlkaXNwL2RwdTEvZHB1X2NydGMubyBc CkBAIC01NCwyMSArNTMsMTUgQEAgbXNtLXkgOj0gXAogCWRpc3AvZHB1MS9kcHVfZW5jb2Rlcl9w aHlzX2NtZC5vIFwKIAlkaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQubyBcCiAJZGlzcC9k cHUxL2RwdV9mb3JtYXRzLm8gXAotCWRpc3AvZHB1MS9kcHVfaHdfYWQ0Lm8gXAogCWRpc3AvZHB1 MS9kcHVfaHdfYmxrLm8gXAogCWRpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5vIFwKIAlkaXNwL2Rw dTEvZHB1X2h3X2NkbS5vIFwKLQlkaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2NfdjQubyBcCi0J ZGlzcC9kcHUxL2RwdV9od19jb2xvcl9wcm9jZXNzaW5nX3YxXzcubyBcCiAJZGlzcC9kcHUxL2Rw dV9od19jdGwubyBcCiAJZGlzcC9kcHUxL2RwdV9od19kcy5vIFwKLQlkaXNwL2RwdTEvZHB1X2h3 X2RzcHAubyBcCiAJZGlzcC9kcHUxL2RwdV9od19pbnRlcnJ1cHRzLm8gXAogCWRpc3AvZHB1MS9k cHVfaHdfaW50Zi5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X2xtLm8gXAogCWRpc3AvZHB1MS9kcHVf aHdfcGluZ3BvbmcubyBcCi0JZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3YxLm8gXAotCWRpc3Av ZHB1MS9kcHVfaHdfcmVnX2RtYV92MV9jb2xvcl9wcm9jLm8gXAogCWRpc3AvZHB1MS9kcHVfaHdf c3NwcC5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X3RvcC5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X3V0 aWwubyBcCkBAIC03OCw3ICs3MSw2IEBAIG1zbS15IDo9IFwKIAlkaXNwL2RwdTEvZHB1X2ttcy5v IFwKIAlkaXNwL2RwdTEvZHB1X2ttc191dGlscy5vIFwKIAlkaXNwL2RwdTEvZHB1X3BsYW5lLm8g XAotCWRpc3AvZHB1MS9kcHVfcmVnX2RtYS5vIFwKIAlkaXNwL2RwdTEvZHB1X3JtLm8gXAogCWRp c3AvZHB1MS9kcHVfdmJpZi5vIFwKIAlkcHVfZGJnLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2FkNC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2FkNC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjcwYzRhLi4w MDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9hZDQuaAorKysg L2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBU aGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICov Ci0jaWZuZGVmIF9EUFVfQUQ0X0hfCi0jZGVmaW5lIF9EUFVfQUQ0X0hfCi0KLSNpbmNsdWRlIDxk cm0vZHJtX21vZGUuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX3Byb3BlcnR5Lmg+Ci0jaW5jbHVkZSAi ZHB1X2h3X2RzcHAuaCIKLQotLyoqCi0gKiBlbnVtIGFkNF9tb2RlcyAtIGFkNCBtb2RlcyBzdXBw b3J0ZWQgYnkgZHJpdmVyCi0gKi8KLWVudW0gYWQ0X21vZGVzIHsKLQlBRDRfT0ZGLAotCUFENF9B VVRPX1NUUkVOR1RILAotCUFENF9DQUxJQlJBVElPTiwKLQlBRDRfTUFOVUFMLAotfTsKLQotLyoq Ci0gKiBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IC0gZHJtIHN0cnVjdHVyZSBmb3IgY3JlYXRp bmcgZW51bSBwcm9wZXJ0eSBhbmQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVt ZXJhdGluZyB2YWx1ZXMKLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xp c3QgYWQ0X21vZGVzW10gPSB7Ci0Je0FENF9PRkYsICJvZmYifSwKLQl7QUQ0X0FVVE9fU1RSRU5H VEgsICJhdXRvX3N0cmVuZ3RoX21vZGUifSwKLQl7QUQ0X0NBTElCUkFUSU9OLCAiY2FsaWJyYXRp b25fbW9kZSJ9LAotCXtBRDRfTUFOVUFMLCAibWFudWFsX21vZGUifSwKLX07Ci0KLS8qKgotICog ZW51bSBhZF9wcm9wZXJ0eSAtIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgc2V0IGZvciBhZAotICov Ci1lbnVtIGFkX3Byb3BlcnR5IHsKLQlBRF9NT0RFLAotCUFEX0lOSVQsCi0JQURfQ0ZHLAotCUFE X0lOUFVULAotCUFEX1NVU1BFTkQsCi0JQURfQVNTRVJUSVZFLAotCUFEX0JBQ0tMSUdIVCwKLQlB RF9JUENfU1VTUEVORCwKLQlBRF9JUENfUkVTVU1FLAotCUFEX0lQQ19SRVNFVCwKLQlBRF9QUk9Q TUFYLAotfTsKLQotLyoqCi0gKiBlbnVtIGFkX2ludHJfcmVzcF9wcm9wZXJ0eSAtIGFkNCBpbnRl cnJ1cHQgcmVzcG9uc2UgZW51bQotICovCi1lbnVtIGFkX2ludHJfcmVzcF9wcm9wZXJ0eSB7Ci0J QUQ0X0JBQ0tMSUdIVCwKLQlBRDRfUkVTUE1BWCwKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9h ZF9od19jZmcgLSBzdHJ1Y3R1cmUgZm9yIHNldHRpbmcgdGhlIGFkIHByb3BlcnRpZXMKLSAqIEBw cm9wOiBlbnVtIG9mIGFkIHByb3BlcnR5Ci0gKiBAaHdfY2ZnOiBwYXlsb2FkIGZvciB0aGUgcHJv cCBiZWluZyBzZXQuCi0gKi8KLXN0cnVjdCBkcHVfYWRfaHdfY2ZnIHsKLQllbnVtIGFkX3Byb3Bl cnR5IHByb3A7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3X2NmZzsKLX07Ci0KLS8qKgotICog ZHB1X3ZhbGlkYXRlX2RzcHBfYWQ0KCkgLSBhcGkgdG8gdmFsaWRhdGUgaWYgYWQgcHJvcGVydHkg aXMgYWxsb3dlZCBmb3IKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpc3BsYXkg d2l0aCBhbGxvY2F0ZWQgZHNwcC9taXhlcnMuCi0gKiBAZHNwcDogcG9pbnRlciB0byBkc3BwIGlu Zm8gc3RydWN0dXJlLgotICogQHByb3A6IHBvaW50ZXIgdG8gdTMyIHBvaW50aW5nIHRvIGFkIHBy b3BlcnR5Ci0gKi8KLWludCBkcHVfdmFsaWRhdGVfZHNwcF9hZDQoc3RydWN0IGRwdV9od19kc3Bw ICpkc3BwLCB1MzIgKnByb3ApOwotCi0vKioKLSAqIGRwdV9zZXR1cF9kc3BwX2FkNCAtIGFwaSB0 byBhcHBseSB0aGUgYWQgcHJvcGVydHksIGRwdV92YWxpZGF0ZV9kc3BwX2FkNAotICogICAgICAg ICAgICAgICAgICAgICAgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgY2FsbCB0aGlzIGZ1bmN0aW9u Ci0gKiBAZHNwcDogcG9pbnRlciB0byBkc3BwIGluZm8gc3RydWN0dXJlLgotICogQGNmZzogcG9p bnRlciB0byBzdHJ1Y3QgZHB1X2FkX2h3X2NmZwotICovCi12b2lkIGRwdV9zZXR1cF9kc3BwX2Fk NChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogZHB1X3Jl YWRfaW50cl9yZXNwX2FkNCAtIGFwaSB0byBnZXQgYWQ0IGludGVycnVwdCBzdGF0dXMgZm9yIGV2 ZW50Ci0gKiBAZHNwcDogcG9pbnRlciB0byBkc3BwIG9iamVjdAotICogQGV2ZW50OiBldmVudCBm b3Igd2hpY2ggcmVzcG9uc2UgaXMgbmVlZGVkCi0gKiBAcmVzcDogdmFsdWUgb2YgZXZlbnQgcmVx dWVzdGVkCi0gKi8KLXZvaWQgZHB1X3JlYWRfaW50cl9yZXNwX2FkNChzdHJ1Y3QgZHB1X2h3X2Rz cHAgKmRzcHAsIHUzMiBldmVudCwgdTMyICpyZXNwKTsKLQotI2VuZGlmIC8qIF9EUFVfQUQ0X0hf ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29sb3Jf cHJvY2Vzc2luZy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvbG9yX3By b2Nlc3NpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzZDFjYy4uMDAwMDAw MAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29sb3JfcHJvY2Vzc2lu Zy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUyMSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIw MTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU WSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpCSIlczogIiBm bXQsIF9fZnVuY19fCi0KLSNpbmNsdWRlIDxkcm0vbXNtX2RybV9wcC5oPgotI2luY2x1ZGUgImRw dV9jb2xvcl9wcm9jZXNzaW5nLmgiCi0jaW5jbHVkZSAiZHB1X2ttcy5oIgotI2luY2x1ZGUgImRw dV9jcnRjLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2RzcHAuaCIKLSNpbmNsdWRlICJkcHVfaHdfbG0u aCIKLSNpbmNsdWRlICJkcHVfYWQ0LmgiCi0jaW5jbHVkZSAiZHB1X2h3X2ludGVycnVwdHMuaCIK LSNpbmNsdWRlICJkcHVfY29yZV9pcnEuaCIKLQotc3RydWN0IGRwdV9jcF9ub2RlIHsKLQl1MzIg cHJvcGVydHlfaWQ7Ci0JdTMyIHByb3BfZmxhZ3M7Ci0JdTMyIGZlYXR1cmU7Ci0Jdm9pZCAqYmxv Yl9wdHI7Ci0JdWludDY0X3QgcHJvcF92YWw7Ci0JY29uc3Qgc3RydWN0IGRwdV9wcF9ibGsgKnBw X2JsazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGZlYXR1cmVfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFk IGFjdGl2ZV9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgZGlydHlfbGlzdDsKLQlib29sIGlzX2Rz cHBfZmVhdHVyZTsKLQl1MzIgcHJvcF9ibG9iX3N6OwotCXN0cnVjdCBkcHVfaXJxX2NhbGxiYWNr ICppcnE7Ci19OwotCi1zdHJ1Y3QgZHB1X2NwX3Byb3BfYXR0YWNoIHsKLQlzdHJ1Y3QgZHJtX2Ny dGMgKmNydGM7Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3QgZHB1X2NwX25v ZGUgKnByb3Bfbm9kZTsKLQl1MzIgZmVhdHVyZTsKLQl1aW50NjRfdCB2YWw7Ci19OwotCi1zdGF0 aWMgdm9pZCBkc3BwX3BjY19pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7 Ci0KLXN0YXRpYyB2b2lkIGRzcHBfaHNpY19pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0 YyAqY3J0Yyk7Ci0KLXN0YXRpYyB2b2lkIGRzcHBfYWRfaW5zdGFsbF9wcm9wZXJ0eShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpOwotCi1zdGF0aWMgdm9pZCBkc3BwX3ZsdXRfaW5zdGFsbF9wcm9wZXJ0 eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwotCi1zdGF0aWMgdm9pZCBkc3BwX2dhbXV0X2luc3Rh bGxfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKLQotc3RhdGljIHZvaWQgZHNwcF9n Y19pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLXN0YXRpYyB2b2lk IGRzcHBfaWdjX2luc3RhbGxfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKLQotdHlw ZWRlZiB2b2lkICgqZHNwcF9wcm9wX2luc3RhbGxfZnVuY190KShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpOwotCi1zdGF0aWMgZHNwcF9wcm9wX2luc3RhbGxfZnVuY190IGRzcHBfcHJvcF9pbnN0YWxs X2Z1bmNbRFBVX0RTUFBfTUFYXTsKLQotc3RhdGljIHZvaWQgZHB1X2NwX3VwZGF0ZV9saXN0KHN0 cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlLAotCQlzdHJ1Y3QgZHB1X2NydGMgKmNydGMsIGJv b2wgZGlydHlfbGlzdCk7Ci0KLXN0YXRpYyBpbnQgZHB1X2NwX2FkX3ZhbGlkYXRlX3Byb3Aoc3Ry dWN0IGRwdV9jcF9ub2RlICpwcm9wX25vZGUsCi0JCXN0cnVjdCBkcHVfY3J0YyAqY3J0Yyk7Ci0K LXN0YXRpYyB2b2lkIGRwdV9jcF9ub3RpZnlfYWRfZXZlbnQoc3RydWN0IGRybV9jcnRjICpjcnRj X2RybSwgdm9pZCAqYXJnKTsKLQotc3RhdGljIHZvaWQgZHB1X2NwX2FkX3NldF9wcm9wKHN0cnVj dCBkcHVfY3J0YyAqZHB1X2NydGMsCi0JCWVudW0gYWRfcHJvcGVydHkgYWRfcHJvcCk7Ci0KLSNk ZWZpbmUgc2V0dXBfZHNwcF9wcm9wX2luc3RhbGxfZnVuY3MoZnVuYykgXAotZG8geyBcCi0JZnVu Y1tEUFVfRFNQUF9QQ0NdID0gZHNwcF9wY2NfaW5zdGFsbF9wcm9wZXJ0eTsgXAotCWZ1bmNbRFBV X0RTUFBfSFNJQ10gPSBkc3BwX2hzaWNfaW5zdGFsbF9wcm9wZXJ0eTsgXAotCWZ1bmNbRFBVX0RT UFBfQURdID0gZHNwcF9hZF9pbnN0YWxsX3Byb3BlcnR5OyBcCi0JZnVuY1tEUFVfRFNQUF9WTFVU XSA9IGRzcHBfdmx1dF9pbnN0YWxsX3Byb3BlcnR5OyBcCi0JZnVuY1tEUFVfRFNQUF9HQU1VVF0g PSBkc3BwX2dhbXV0X2luc3RhbGxfcHJvcGVydHk7IFwKLQlmdW5jW0RQVV9EU1BQX0dDXSA9IGRz cHBfZ2NfaW5zdGFsbF9wcm9wZXJ0eTsgXAotCWZ1bmNbRFBVX0RTUFBfSUdDXSA9IGRzcHBfaWdj X2luc3RhbGxfcHJvcGVydHk7IFwKLX0gd2hpbGUgKDApCi0KLXR5cGVkZWYgdm9pZCAoKmxtX3By b3BfaW5zdGFsbF9mdW5jX3QpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLXN0YXRpYyBsbV9w cm9wX2luc3RhbGxfZnVuY190IGxtX3Byb3BfaW5zdGFsbF9mdW5jW0RQVV9NSVhFUl9NQVhdOwot Ci1zdGF0aWMgdm9pZCBsbV9nY19pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0 Yyk7Ci0KLSNkZWZpbmUgc2V0dXBfbG1fcHJvcF9pbnN0YWxsX2Z1bmNzKGZ1bmMpIFwKLQkoZnVu Y1tEUFVfTUlYRVJfR0NdID0gbG1fZ2NfaW5zdGFsbF9wcm9wZXJ0eSkKLQotZW51bSB7Ci0JLyog QXBwZW5kIG5ldyBEU1BQIGZlYXR1cmVzIGJlZm9yZSBEUFVfQ1BfQ1JUQ19EU1BQX01BWCAqLwot CS8qIERTUFAgRmVhdHVyZXMgc3RhcnQgKi8KLQlEUFVfQ1BfQ1JUQ19EU1BQX0lHQywKLQlEUFVf Q1BfQ1JUQ19EU1BQX1BDQywKLQlEUFVfQ1BfQ1JUQ19EU1BQX0dDLAotCURQVV9DUF9DUlRDX0RT UFBfSFVFLAotCURQVV9DUF9DUlRDX0RTUFBfU0FULAotCURQVV9DUF9DUlRDX0RTUFBfVkFMLAot CURQVV9DUF9DUlRDX0RTUFBfQ09OVCwKLQlEUFVfQ1BfQ1JUQ19EU1BQX01FTUNPTE9SLAotCURQ VV9DUF9DUlRDX0RTUFBfU0lYWk9ORSwKLQlEUFVfQ1BfQ1JUQ19EU1BQX0dBTVVULAotCURQVV9D UF9DUlRDX0RTUFBfRElUSEVSLAotCURQVV9DUF9DUlRDX0RTUFBfSElTVCwKLQlEUFVfQ1BfQ1JU Q19EU1BQX0FELAotCURQVV9DUF9DUlRDX0RTUFBfVkxVVCwKLQlEUFVfQ1BfQ1JUQ19EU1BQX0FE X01PREUsCi0JRFBVX0NQX0NSVENfRFNQUF9BRF9JTklULAotCURQVV9DUF9DUlRDX0RTUFBfQURf Q0ZHLAotCURQVV9DUF9DUlRDX0RTUFBfQURfSU5QVVQsCi0JRFBVX0NQX0NSVENfRFNQUF9BRF9B U1NFUlRJVkVORVNTLAotCURQVV9DUF9DUlRDX0RTUFBfQURfQkFDS0xJR0hULAotCURQVV9DUF9D UlRDX0RTUFBfTUFYLAotCS8qIERTUFAgZmVhdHVyZXMgZW5kICovCi0KLQkvKiBBcHBlbmQgbmV3 IExNIGZlYXR1cmVzIGJlZm9yZSBEUFVfQ1BfQ1JUQ19NQVhfRkVBVFVSRVMgKi8KLQkvKiBMTSBm ZWF0dXJlIHN0YXJ0Ki8KLQlEUFVfQ1BfQ1JUQ19MTV9HQywKLQkvKiBMTSBmZWF0dXJlIGVuZCov Ci0KLQlEUFVfQ1BfQ1JUQ19NQVhfRkVBVFVSRVMsCi19OwotCi0jZGVmaW5lIElOSVRfUFJPUF9B VFRBQ0gocCwgY3J0YywgcHJvcCwgbm9kZSwgZmVhdHVyZSwgdmFsKSBcCi0JZG8geyBcCi0JCShw KS0+Y3J0YyA9IGNydGM7IFwKLQkJKHApLT5wcm9wID0gcHJvcDsgXAotCQkocCktPnByb3Bfbm9k ZSA9IG5vZGU7IFwKLQkJKHApLT5mZWF0dXJlID0gZmVhdHVyZTsgXAotCQkocCktPnZhbCA9IHZh bDsgXAotCX0gd2hpbGUgKDApCi0KLXN0YXRpYyB2b2lkIGRwdV9jcF9nZXRfaHdfcGF5bG9hZChz dHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSwKLQkJCQkgIHN0cnVjdCBkcHVfaHdfY3BfY2Zn ICpod19jZmcsCi0JCQkJICBib29sICpmZWF0dXJlX2VuYWJsZWQpCi17Ci0KLQlzdHJ1Y3QgZHJt X3Byb3BlcnR5X2Jsb2IgKmJsb2IgPSBOVUxMOwotCi0JbWVtc2V0KGh3X2NmZywgMCwgc2l6ZW9m KCpod19jZmcpKTsKLQkqZmVhdHVyZV9lbmFibGVkID0gZmFsc2U7Ci0KLQlibG9iID0gcHJvcF9u b2RlLT5ibG9iX3B0cjsKLQlpZiAocHJvcF9ub2RlLT5wcm9wX2ZsYWdzICYgRFJNX01PREVfUFJP UF9CTE9CKSB7Ci0JCWlmIChibG9iKSB7Ci0JCQlod19jZmctPmxlbiA9IGJsb2ItPmxlbmd0aDsK LQkJCWh3X2NmZy0+cGF5bG9hZCA9IGJsb2ItPmRhdGE7Ci0JCQkqZmVhdHVyZV9lbmFibGVkID0g dHJ1ZTsKLQkJfQotCX0gZWxzZSBpZiAocHJvcF9ub2RlLT5wcm9wX2ZsYWdzICYgRFJNX01PREVf UFJPUF9SQU5HRSkgewotCQkvKiBDaGVjayBpZiBsb2NhbCBibG9iIGlzIFNldCAqLwotCQlpZiAo IWJsb2IpIHsKLQkJCWlmIChwcm9wX25vZGUtPnByb3BfdmFsKSB7Ci0JCQkJaHdfY2ZnLT5sZW4g PSBzaXplb2YocHJvcF9ub2RlLT5wcm9wX3ZhbCk7Ci0JCQkJaHdfY2ZnLT5wYXlsb2FkID0gJnBy b3Bfbm9kZS0+cHJvcF92YWw7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlod19jZmctPmxlbiA9IChw cm9wX25vZGUtPnByb3BfdmFsKSA/IGJsb2ItPmxlbmd0aCA6Ci0JCQkJCTA7Ci0JCQlod19jZmct PnBheWxvYWQgPSAocHJvcF9ub2RlLT5wcm9wX3ZhbCkgPyBibG9iLT5kYXRhCi0JCQkJCQk6IE5V TEw7Ci0JCX0KLQkJaWYgKHByb3Bfbm9kZS0+cHJvcF92YWwpCi0JCQkqZmVhdHVyZV9lbmFibGVk ID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKHByb3Bfbm9kZS0+cHJvcF9mbGFncyAmIERSTV9NT0RFX1BS T1BfRU5VTSkgewotCQkqZmVhdHVyZV9lbmFibGVkID0gKHByb3Bfbm9kZS0+cHJvcF92YWwgIT0g MCk7Ci0JCWh3X2NmZy0+bGVuID0gc2l6ZW9mKHByb3Bfbm9kZS0+cHJvcF92YWwpOwotCQlod19j ZmctPnBheWxvYWQgPSAmcHJvcF9ub2RlLT5wcm9wX3ZhbDsKLQl9IGVsc2UgewotCQlEUk1fRVJS T1IoInByb3BlcnR5IHR5cGUgaXMgbm90IHN1cHBvcnRlZFxuIik7Ci0JfQotfQotCi1zdGF0aWMg aW50IGRwdV9jcF9kaXNhYmxlX2NydGNfYmxvYl9wcm9wZXJ0eShzdHJ1Y3QgZHB1X2NwX25vZGUg KnByb3Bfbm9kZSkKLXsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IgPSBwcm9wX25v ZGUtPmJsb2JfcHRyOwotCi0JaWYgKCFibG9iKQotCQlyZXR1cm4gMDsKLQlkcm1fcHJvcGVydHlf YmxvYl9wdXQoYmxvYik7Ci0JcHJvcF9ub2RlLT5ibG9iX3B0ciA9IE5VTEw7Ci0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2NwX2NyZWF0ZV9sb2NhbF9ibG9iKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywgdTMyIGZlYXR1cmUsIGludCBsZW4pCi17Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0J Ym9vbCBmb3VuZCA9IGZhbHNlOwotCXN0cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlID0gTlVM TDsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2JfcHRyOwotCXN0cnVjdCBkcHVfY3J0 YyAqZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnko cHJvcF9ub2RlLCAmZHB1X2NydGMtPmZlYXR1cmVfbGlzdCwgZmVhdHVyZV9saXN0KSB7Ci0JCWlm IChwcm9wX25vZGUtPmZlYXR1cmUgPT0gZmVhdHVyZSkgewotCQkJZm91bmQgPSB0cnVlOwotCQkJ YnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoIWZvdW5kIHx8ICEocHJvcF9ub2RlLT5wcm9wX2ZsYWdz ICYgRFJNX01PREVfUFJPUF9SQU5HRSkpIHsKLQkJRFJNX0VSUk9SKCJsb2NhbCBibG9iIGNyZWF0 ZSBmYWlsZWQgcHJvcCBmb3VuZCAlZCBmbGFncyAlZFxuIiwKLQkJICAgICAgIGZvdW5kLCBwcm9w X25vZGUtPnByb3BfZmxhZ3MpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWJsb2JfcHRyID0gZHJt X3Byb3BlcnR5X2NyZWF0ZV9ibG9iKGNydGMtPmRldiwgbGVuLCBOVUxMKTsKLQlyZXQgPSAoSVNf RVJSX09SX05VTEwoYmxvYl9wdHIpKSA/IFBUUl9FUlIoYmxvYl9wdHIpIDogMDsKLQlpZiAoIXJl dCkKLQkJcHJvcF9ub2RlLT5ibG9iX3B0ciA9IGJsb2JfcHRyOwotCi0JcmV0dXJuIHJldDsKLX0K LQotc3RhdGljIHZvaWQgZHB1X2NwX2Rlc3Ryb3lfbG9jYWxfYmxvYihzdHJ1Y3QgZHB1X2NwX25v ZGUgKnByb3Bfbm9kZSkKLXsKLQlpZiAoIShwcm9wX25vZGUtPnByb3BfZmxhZ3MgJiBEUk1fTU9E RV9QUk9QX0JMT0IpICYmCi0JCXByb3Bfbm9kZS0+YmxvYl9wdHIpCi0JCWRybV9wcm9wZXJ0eV9i bG9iX3B1dChwcm9wX25vZGUtPmJsb2JfcHRyKTsKLX0KLQotc3RhdGljIGludCBkcHVfY3BfaGFu ZGxlX3JhbmdlX3Byb3BlcnR5KHN0cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlLAotCQkJCQl1 aW50NjRfdCB2YWwpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9i ICpibG9iX3B0ciA9IHByb3Bfbm9kZS0+YmxvYl9wdHI7Ci0KLQlpZiAoIWJsb2JfcHRyKSB7Ci0J CXByb3Bfbm9kZS0+cHJvcF92YWwgPSB2YWw7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICghdmFs KSB7Ci0JCXByb3Bfbm9kZS0+cHJvcF92YWwgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQg PSBjb3B5X2Zyb21fdXNlcihibG9iX3B0ci0+ZGF0YSwgdTY0X3RvX3VzZXJfcHRyKHZhbCksCi0J CQkgICAgIGJsb2JfcHRyLT5sZW5ndGgpOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBpbmZvIHJldCAlZCIsIHJldCk7Ci0JCXJldCA9IC1FRkFV TFQ7Ci0JfSBlbHNlIHsKLQkJcHJvcF9ub2RlLT5wcm9wX3ZhbCA9IHZhbDsKLQl9Ci0KLQlyZXR1 cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGRwdV9jcF9kaXNhYmxlX2NydGNfcHJvcGVydHkoc3Ry dWN0IGRybV9jcnRjICpjcnRjLAotCQkJCQkgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHks Ci0JCQkJCSBzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSkKLXsKLQlpbnQgcmV0ID0gLUVJ TlZBTDsKLQotCWlmIChwcm9wZXJ0eS0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX0JMT0IpIHsKLQkJ cmV0ID0gZHB1X2NwX2Rpc2FibGVfY3J0Y19ibG9iX3Byb3BlcnR5KHByb3Bfbm9kZSk7Ci0JfSBl bHNlIGlmIChwcm9wZXJ0eS0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX1JBTkdFKSB7Ci0JCXJldCA9 IGRwdV9jcF9oYW5kbGVfcmFuZ2VfcHJvcGVydHkocHJvcF9ub2RlLCAwKTsKLQl9IGVsc2UgaWYg KHByb3BlcnR5LT5mbGFncyAmIERSTV9NT0RFX1BST1BfRU5VTSkgewotCQlyZXQgPSAwOwotCQlw cm9wX25vZGUtPnByb3BfdmFsID0gMDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlu dCBkcHVfY3BfZW5hYmxlX2NydGNfYmxvYl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMs Ci0JCQkJCSAgICAgICBzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSwKLQkJCQkJICAgICAg IHVpbnQ2NF90IHZhbCkKLXsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2IgPSBOVUxM OwotCi0JLyoqCi0JICogRm9yIG5vbi1ibG9iIGJhc2VkIHByb3BlcnRpZXMgYWRkIHN1cHBvcnQg dG8gY3JlYXRlIGEgYmxvYgotCSAqIHVzaW5nIHRoZSB2YWwgYW5kIHN0b3JlIHRoZSBibG9iX3B0 ciBpbiBwcm9wX25vZGUuCi0JICovCi0JYmxvYiA9IGRybV9wcm9wZXJ0eV9sb29rdXBfYmxvYihj cnRjLT5kZXYsIHZhbCk7Ci0JaWYgKCFibG9iKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBibG9i IGlkICVsbGRcbiIsIHZhbCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoYmxvYi0+bGVu Z3RoICE9IHByb3Bfbm9kZS0+cHJvcF9ibG9iX3N6KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBi bG9iIGxlbiAlemQgZXhwICVkIGZlYXR1cmUgJWRcbiIsCi0JCSAgICBibG9iLT5sZW5ndGgsIHBy b3Bfbm9kZS0+cHJvcF9ibG9iX3N6LCBwcm9wX25vZGUtPmZlYXR1cmUpOwotCQlkcm1fcHJvcGVy dHlfYmxvYl9wdXQoYmxvYik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkvKiBSZWxlYXNlIHJl ZmVybmNlIHRvIGV4aXN0aW5nIHBheWxvYWQgb2YgdGhlIHByb3BlcnR5ICovCi0JaWYgKHByb3Bf bm9kZS0+YmxvYl9wdHIpCi0JCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChwcm9wX25vZGUtPmJsb2Jf cHRyKTsKLQotCXByb3Bfbm9kZS0+YmxvYl9wdHIgPSBibG9iOwotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IGRwdV9jcF9lbmFibGVfY3J0Y19wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQkJCSAgICAg ICBzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSwKLQkJCQkgICAgICAgdWludDY0X3QgdmFs KQotewotCWludCByZXQgPSAtRUlOVkFMOwotCi0JaWYgKHByb3BlcnR5LT5mbGFncyAmIERSTV9N T0RFX1BST1BfQkxPQikgewotCQlyZXQgPSBkcHVfY3BfZW5hYmxlX2NydGNfYmxvYl9wcm9wZXJ0 eShjcnRjLCBwcm9wX25vZGUsIHZhbCk7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eS0+ZmxhZ3MgJiBE Uk1fTU9ERV9QUk9QX1JBTkdFKSB7Ci0JCXJldCA9IGRwdV9jcF9oYW5kbGVfcmFuZ2VfcHJvcGVy dHkocHJvcF9ub2RlLCB2YWwpOwotCX0gZWxzZSBpZiAocHJvcGVydHktPmZsYWdzICYgRFJNX01P REVfUFJPUF9FTlVNKSB7Ci0JCXJldCA9IDA7Ci0JCXByb3Bfbm9kZS0+cHJvcF92YWwgPSB2YWw7 Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X2ttcyAqZ2V0X2ttcyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9 IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlyZXR1cm4gdG9fZHB1X2ttcyhwcml2LT5rbXMp OwotfQotCi1zdGF0aWMgdm9pZCBkcHVfY3BfY3J0Y19wcm9wX2F0dGFjaChzdHJ1Y3QgZHB1X2Nw X3Byb3BfYXR0YWNoICpwcm9wX2F0dGFjaCkKLXsKLQotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2Ny dGMgPSB0b19kcHVfY3J0Yyhwcm9wX2F0dGFjaC0+Y3J0Yyk7Ci0KLQlkcm1fb2JqZWN0X2F0dGFj aF9wcm9wZXJ0eSgmcHJvcF9hdHRhY2gtPmNydGMtPmJhc2UsCi0JCQkJICAgcHJvcF9hdHRhY2gt PnByb3AsIHByb3BfYXR0YWNoLT52YWwpOwotCi0JSU5JVF9MSVNUX0hFQUQoJnByb3BfYXR0YWNo LT5wcm9wX25vZGUtPmFjdGl2ZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcHJvcF9hdHRhY2gt PnByb3Bfbm9kZS0+ZGlydHlfbGlzdCk7Ci0KLQlwcm9wX2F0dGFjaC0+cHJvcF9ub2RlLT5wcm9w ZXJ0eV9pZCA9IHByb3BfYXR0YWNoLT5wcm9wLT5iYXNlLmlkOwotCXByb3BfYXR0YWNoLT5wcm9w X25vZGUtPnByb3BfZmxhZ3MgPSBwcm9wX2F0dGFjaC0+cHJvcC0+ZmxhZ3M7Ci0JcHJvcF9hdHRh Y2gtPnByb3Bfbm9kZS0+ZmVhdHVyZSA9IHByb3BfYXR0YWNoLT5mZWF0dXJlOwotCi0JaWYgKHBy b3BfYXR0YWNoLT5mZWF0dXJlIDwgRFBVX0NQX0NSVENfRFNQUF9NQVgpCi0JCXByb3BfYXR0YWNo LT5wcm9wX25vZGUtPmlzX2RzcHBfZmVhdHVyZSA9IHRydWU7Ci0JZWxzZQotCQlwcm9wX2F0dGFj aC0+cHJvcF9ub2RlLT5pc19kc3BwX2ZlYXR1cmUgPSBmYWxzZTsKLQotCWxpc3RfYWRkKCZwcm9w X2F0dGFjaC0+cHJvcF9ub2RlLT5mZWF0dXJlX2xpc3QsCi0JCSAmZHB1X2NydGMtPmZlYXR1cmVf bGlzdCk7Ci19Ci0KLXZvaWQgZHB1X2NwX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Ci17Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YyA9IE5VTEw7Ci0KLQlpZiAoIWNydGMpIHsK LQkJRFJNX0VSUk9SKCJpbnZhbGlkIGNydGMgJXBLXG4iLCBjcnRjKTsKLQkJcmV0dXJuOwotCX0K LQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JaWYgKCFkcHVfY3J0YykgewotCQlE Uk1fRVJST1IoImludmFsaWQgZHB1X2NydGMgJXBLXG4iLCBkcHVfY3J0Yyk7Ci0JCXJldHVybjsK LQl9Ci0KLQlJTklUX0xJU1RfSEVBRCgmZHB1X2NydGMtPmFjdGl2ZV9saXN0KTsKLQlJTklUX0xJ U1RfSEVBRCgmZHB1X2NydGMtPmRpcnR5X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZkcHVfY3J0 Yy0+ZmVhdHVyZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmZHB1X2NydGMtPmFkX2RpcnR5KTsK LQlJTklUX0xJU1RfSEVBRCgmZHB1X2NydGMtPmFkX2FjdGl2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lk IGRwdV9jcF9jcnRjX2luc3RhbGxfaW1tdXRhYmxlX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKLQkJCQkJCSAgIGNoYXIgKm5hbWUsCi0JCQkJCQkgICB1MzIgZmVhdHVyZSkKLXsKLQlz dHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wOwotCXN0cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2Rl ID0gTlVMTDsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OwotCXN0cnVjdCBkcHVfY3Bf cHJvcF9hdHRhY2ggcHJvcF9hdHRhY2g7Ci0JdWludDY0X3QgdmFsID0gMDsKLQotCWlmIChmZWF0 dXJlID49ICBEUFVfQ1BfQ1JUQ19NQVhfRkVBVFVSRVMpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlk IGZlYXR1cmUgJWQgbWF4ICVkXG4iLCBmZWF0dXJlLAotCQkgICAgICAgRFBVX0NQX0NSVENfTUFY X0ZFQVRVUkVTKTsKLQkJcmV0dXJuOwotCX0KLQotCXByb3Bfbm9kZSA9IGt6YWxsb2Moc2l6ZW9m KCpwcm9wX25vZGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3Bfbm9kZSkKLQkJcmV0dXJuOwot Ci0JcHJpdiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7Ci0JcHJvcCA9IHByaXYtPmNwX3Byb3Bl cnR5W2ZlYXR1cmVdOwotCi0JaWYgKCFwcm9wKSB7Ci0JCXByb3AgPSBkcm1fcHJvcGVydHlfY3Jl YXRlX3JhbmdlKGNydGMtPmRldiwKLQkJCQlEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwgbmFtZSwg MCwgMSk7Ci0JCWlmICghcHJvcCkgewotCQkJRFJNX0VSUk9SKCJwcm9wZXJ0eSBjcmVhdGUgZmFp bGVkOiAlc1xuIiwgbmFtZSk7Ci0JCQlrZnJlZShwcm9wX25vZGUpOwotCQkJcmV0dXJuOwotCQl9 Ci0JCXByaXYtPmNwX3Byb3BlcnR5W2ZlYXR1cmVdID0gcHJvcDsKLQl9Ci0KLQlJTklUX1BST1Bf QVRUQUNIKCZwcm9wX2F0dGFjaCwgY3J0YywgcHJvcCwgcHJvcF9ub2RlLAotCQkJCWZlYXR1cmUs IHZhbCk7Ci0JZHB1X2NwX2NydGNfcHJvcF9hdHRhY2goJnByb3BfYXR0YWNoKTsKLX0KLQotc3Rh dGljIHZvaWQgZHB1X2NwX2NydGNfaW5zdGFsbF9yYW5nZV9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCi0JCQkJCSAgICAgY2hhciAqbmFtZSwKLQkJCQkJICAgICB1MzIgZmVhdHVyZSwK LQkJCQkJICAgICB1aW50NjRfdCBtaW4sIHVpbnQ2NF90IG1heCwKLQkJCQkJICAgICB1aW50NjRf dCB2YWwpCi17Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3QgZHB1X2NwX25v ZGUgKnByb3Bfbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKLQlz dHJ1Y3QgZHB1X2NwX3Byb3BfYXR0YWNoIHByb3BfYXR0YWNoOwotCi0JaWYgKGZlYXR1cmUgPj0g IERQVV9DUF9DUlRDX01BWF9GRUFUVVJFUykgewotCQlEUk1fRVJST1IoImludmFsaWQgZmVhdHVy ZSAlZCBtYXggJWRcbiIsIGZlYXR1cmUsCi0JCQkgIERQVV9DUF9DUlRDX01BWF9GRUFUVVJFUyk7 Ci0JCXJldHVybjsKLQl9Ci0KLQlwcm9wX25vZGUgPSBremFsbG9jKHNpemVvZigqcHJvcF9ub2Rl KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcm9wX25vZGUpCi0JCXJldHVybjsKLQotCXByaXYgPSBj cnRjLT5kZXYtPmRldl9wcml2YXRlOwotCXByb3AgPSBwcml2LT5jcF9wcm9wZXJ0eVtmZWF0dXJl XTsKLQotCWlmICghcHJvcCkgewotCQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9yYW5nZShj cnRjLT5kZXYsIDAsIG5hbWUsIG1pbiwgbWF4KTsKLQkJaWYgKCFwcm9wKSB7Ci0JCQlEUk1fRVJS T1IoInByb3BlcnR5IGNyZWF0ZSBmYWlsZWQ6ICVzXG4iLCBuYW1lKTsKLQkJCWtmcmVlKHByb3Bf bm9kZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcHJpdi0+Y3BfcHJvcGVydHlbZmVhdHVyZV0gPSBw cm9wOwotCX0KLQotCUlOSVRfUFJPUF9BVFRBQ0goJnByb3BfYXR0YWNoLCBjcnRjLCBwcm9wLCBw cm9wX25vZGUsCi0JCQkJZmVhdHVyZSwgdmFsKTsKLQotCWRwdV9jcF9jcnRjX3Byb3BfYXR0YWNo KCZwcm9wX2F0dGFjaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9jcF9jcnRjX2luc3RhbGxfYmxv Yl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGNoYXIgKm5hbWUsCi0JCQl1MzIgZmVh dHVyZSwgdTMyIGJsb2Jfc3opCi17Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1 Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0 ZSAqcHJpdjsKLQl1aW50NjRfdCB2YWwgPSAwOwotCXN0cnVjdCBkcHVfY3BfcHJvcF9hdHRhY2gg cHJvcF9hdHRhY2g7Ci0KLQlpZiAoZmVhdHVyZSA+PSAgRFBVX0NQX0NSVENfTUFYX0ZFQVRVUkVT KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBmZWF0dXJlICVkIG1heCAlZFxuIiwgZmVhdHVyZSwK LQkJICAgICAgIERQVV9DUF9DUlRDX01BWF9GRUFUVVJFUyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlw cm9wX25vZGUgPSBremFsbG9jKHNpemVvZigqcHJvcF9ub2RlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFwcm9wX25vZGUpCi0JCXJldHVybjsKLQotCXByaXYgPSBjcnRjLT5kZXYtPmRldl9wcml2YXRl OwotCXByb3AgPSBwcml2LT5jcF9wcm9wZXJ0eVtmZWF0dXJlXTsKLQotCWlmICghcHJvcCkgewot CQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZShjcnRjLT5kZXYsCi0JCQkJCSAgIERSTV9NT0RF X1BST1BfQkxPQiwgbmFtZSwgMCk7Ci0JCWlmICghcHJvcCkgewotCQkJRFJNX0VSUk9SKCJwcm9w ZXJ0eSBjcmVhdGUgZmFpbGVkOiAlc1xuIiwgbmFtZSk7Ci0JCQlrZnJlZShwcm9wX25vZGUpOwot CQkJcmV0dXJuOwotCQl9Ci0JCXByaXYtPmNwX3Byb3BlcnR5W2ZlYXR1cmVdID0gcHJvcDsKLQl9 Ci0KLQlJTklUX1BST1BfQVRUQUNIKCZwcm9wX2F0dGFjaCwgY3J0YywgcHJvcCwgcHJvcF9ub2Rl LAotCQkJCWZlYXR1cmUsIHZhbCk7Ci0JcHJvcF9ub2RlLT5wcm9wX2Jsb2Jfc3ogPSBibG9iX3N6 OwotCi0JZHB1X2NwX2NydGNfcHJvcF9hdHRhY2goJnByb3BfYXR0YWNoKTsKLX0KLQotc3RhdGlj IHZvaWQgZHB1X2NwX2NydGNfaW5zdGFsbF9lbnVtX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKLQl1MzIgZmVhdHVyZSwgY29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCAqbGlz dCwgdTMyIGVudW1fc3osCi0JY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpw cm9wOwotCXN0cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgbXNt X2RybV9wcml2YXRlICpwcml2OwotCXVpbnQ2NF90IHZhbCA9IDA7Ci0Jc3RydWN0IGRwdV9jcF9w cm9wX2F0dGFjaCBwcm9wX2F0dGFjaDsKLQotCWlmIChmZWF0dXJlID49ICBEUFVfQ1BfQ1JUQ19N QVhfRkVBVFVSRVMpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGZlYXR1cmUgJWQgbWF4ICVkXG4i LCBmZWF0dXJlLAotCQkgICAgICAgRFBVX0NQX0NSVENfTUFYX0ZFQVRVUkVTKTsKLQkJcmV0dXJu OwotCX0KLQotCXByb3Bfbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9wX25vZGUpLCBHRlBfS0VS TkVMKTsKLQlpZiAoIXByb3Bfbm9kZSkKLQkJcmV0dXJuOwotCi0JcHJpdiA9IGNydGMtPmRldi0+ ZGV2X3ByaXZhdGU7Ci0JcHJvcCA9IHByaXYtPmNwX3Byb3BlcnR5W2ZlYXR1cmVdOwotCi0JaWYg KCFwcm9wKSB7Ci0JCXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2VudW0oY3J0Yy0+ZGV2LCAw LCBuYW1lLAotCQkJbGlzdCwgZW51bV9zeik7Ci0JCWlmICghcHJvcCkgewotCQkJRFJNX0VSUk9S KCJwcm9wZXJ0eSBjcmVhdGUgZmFpbGVkOiAlc1xuIiwgbmFtZSk7Ci0JCQlrZnJlZShwcm9wX25v ZGUpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXByaXYtPmNwX3Byb3BlcnR5W2ZlYXR1cmVdID0gcHJv cDsKLQl9Ci0KLQlJTklUX1BST1BfQVRUQUNIKCZwcm9wX2F0dGFjaCwgY3J0YywgcHJvcCwgcHJv cF9ub2RlLAotCQkJCWZlYXR1cmUsIHZhbCk7Ci0KLQlkcHVfY3BfY3J0Y19wcm9wX2F0dGFjaCgm cHJvcF9hdHRhY2gpOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfY3BfY3J0Y19zZXRmZWF0dXJlKHN0 cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlLAotCQkJCSAgIHN0cnVjdCBkcHVfY3J0YyAqZHB1 X2NydGMpCi17Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgaHdfY2ZnOwotCXN0cnVjdCBkcHVfaHdf bWl4ZXIgKmh3X2xtOwotCXN0cnVjdCBkcHVfaHdfZHNwcCAqaHdfZHNwcDsKLQl1MzIgbnVtX21p eGVycyA9IGRwdV9jcnRjLT5udW1fbWl4ZXJzOwotCWludCBpID0gMDsKLQlib29sIGZlYXR1cmVf ZW5hYmxlZCA9IGZhbHNlOwotCWludCByZXQgPSAwOwotCXN0cnVjdCBkcHVfYWRfaHdfY2ZnIGFk X2NmZzsKLQotCWRwdV9jcF9nZXRfaHdfcGF5bG9hZChwcm9wX25vZGUsICZod19jZmcsICZmZWF0 dXJlX2VuYWJsZWQpOwotCWh3X2NmZy5udW1fb2ZfbWl4ZXJzID0gZHB1X2NydGMtPm51bV9taXhl cnM7Ci0JaHdfY2ZnLmRpc3BsYXloID0gZHB1X2NydGMtPmJhc2UubW9kZS5oZGlzcGxheTsKLQlo d19jZmcuZGlzcGxheXYgPSBkcHVfY3J0Yy0+YmFzZS5tb2RlLnZkaXNwbGF5OwotCWh3X2NmZy5s YXN0X2ZlYXR1cmUgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV9taXhlcnMgJiYgIXJldDsg aSsrKSB7Ci0JCWh3X2xtID0gZHB1X2NydGMtPm1peGVyc1tpXS5od19sbTsKLQkJaHdfZHNwcCA9 IGRwdV9jcnRjLT5taXhlcnNbaV0uaHdfZHNwcDsKLQkJaHdfY2ZnLmN0bCA9IGRwdV9jcnRjLT5t aXhlcnNbaV0uaHdfY3RsOwotCQlod19jZmcubWl4ZXJfaW5mbyA9IGh3X2xtOwotCQlzd2l0Y2gg KHByb3Bfbm9kZS0+ZmVhdHVyZSkgewotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBfVkxVVDoKLQkJ CWlmICghaHdfZHNwcCB8fCAhaHdfZHNwcC0+b3BzLnNldHVwX3ZsdXQpIHsKLQkJCQlyZXQgPSAt RUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdfZHNwcC0+b3BzLnNldHVwX3ZsdXQo aHdfZHNwcCwgJmh3X2NmZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX1BD QzoKLQkJCWlmICghaHdfZHNwcCB8fCAhaHdfZHNwcC0+b3BzLnNldHVwX3BjYykgewotCQkJCXJl dCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlod19kc3BwLT5vcHMuc2V0dXBf cGNjKGh3X2RzcHAsICZod19jZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQ UF9JR0M6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9pZ2MpIHsKLQkJ CQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdfZHNwcC0+b3BzLnNl dHVwX2lnYyhod19kc3BwLCAmaHdfY2ZnKTsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRD X0RTUFBfR0M6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9nYykgewot CQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlod19kc3BwLT5vcHMu c2V0dXBfZ2MoaHdfZHNwcCwgJmh3X2NmZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1BfQ1JU Q19EU1BQX0hVRToKLQkJCWlmICghaHdfZHNwcCB8fCAhaHdfZHNwcC0+b3BzLnNldHVwX2h1ZSkg ewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlod19kc3BwLT5v cHMuc2V0dXBfaHVlKGh3X2RzcHAsICZod19jZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQ X0NSVENfRFNQUF9TQVQ6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9z YXQpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdfZHNw cC0+b3BzLnNldHVwX3NhdChod19kc3BwLCAmaHdfY2ZnKTsKLQkJCWJyZWFrOwotCQljYXNlIERQ VV9DUF9DUlRDX0RTUFBfVkFMOgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0 dXBfdmFsKSB7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWh3 X2RzcHAtPm9wcy5zZXR1cF92YWwoaHdfZHNwcCwgJmh3X2NmZyk7Ci0JCQlicmVhazsKLQkJY2Fz ZSBEUFVfQ1BfQ1JUQ19EU1BQX0NPTlQ6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9w cy5zZXR1cF9jb250KSB7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0K LQkJCWh3X2RzcHAtPm9wcy5zZXR1cF9jb250KGh3X2RzcHAsICZod19jZmcpOwotCQkJYnJlYWs7 Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9NRU1DT0xPUjoKLQkJCWlmICghaHdfZHNwcCB8fCAh aHdfZHNwcC0+b3BzLnNldHVwX3BhX21lbWNvbG9yKSB7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJ CQljb250aW51ZTsKLQkJCX0KLQkJCWh3X2RzcHAtPm9wcy5zZXR1cF9wYV9tZW1jb2xvcihod19k c3BwLCAmaHdfY2ZnKTsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBfU0lYWk9O RToKLQkJCWlmICghaHdfZHNwcCB8fCAhaHdfZHNwcC0+b3BzLnNldHVwX3NpeHpvbmUpIHsKLQkJ CQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdfZHNwcC0+b3BzLnNl dHVwX3NpeHpvbmUoaHdfZHNwcCwgJmh3X2NmZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfQ1Bf Q1JUQ19EU1BQX0dBTVVUOgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0dXBf Z2FtdXQpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaHdf ZHNwcC0+b3BzLnNldHVwX2dhbXV0KGh3X2RzcHAsICZod19jZmcpOwotCQkJYnJlYWs7Ci0JCWNh c2UgRFBVX0NQX0NSVENfTE1fR0M6Ci0JCQlpZiAoIWh3X2xtIHx8ICFod19sbS0+b3BzLnNldHVw X2djKSB7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWh3X2xt LT5vcHMuc2V0dXBfZ2MoaHdfbG0sICZod19jZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQ X0NSVENfRFNQUF9BRF9NT0RFOgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3BwLT5vcHMuc2V0 dXBfYWQpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYWRf Y2ZnLnByb3AgPSBBRF9NT0RFOwotCQkJYWRfY2ZnLmh3X2NmZyA9ICZod19jZmc7Ci0JCQlod19k c3BwLT5vcHMuc2V0dXBfYWQoaHdfZHNwcCwgJmFkX2NmZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBE UFVfQ1BfQ1JUQ19EU1BQX0FEX0lOSVQ6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9w cy5zZXR1cF9hZCkgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0J CQlhZF9jZmcucHJvcCA9IEFEX0lOSVQ7Ci0JCQlhZF9jZmcuaHdfY2ZnID0gJmh3X2NmZzsKLQkJ CWh3X2RzcHAtPm9wcy5zZXR1cF9hZChod19kc3BwLCAmYWRfY2ZnKTsKLQkJCWJyZWFrOwotCQlj YXNlIERQVV9DUF9DUlRDX0RTUFBfQURfQ0ZHOgotCQkJaWYgKCFod19kc3BwIHx8ICFod19kc3Bw LT5vcHMuc2V0dXBfYWQpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWNvbnRpbnVlOwotCQkJ fQotCQkJYWRfY2ZnLnByb3AgPSBBRF9DRkc7Ci0JCQlhZF9jZmcuaHdfY2ZnID0gJmh3X2NmZzsK LQkJCWh3X2RzcHAtPm9wcy5zZXR1cF9hZChod19kc3BwLCAmYWRfY2ZnKTsKLQkJCWJyZWFrOwot CQljYXNlIERQVV9DUF9DUlRDX0RTUFBfQURfSU5QVVQ6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3 X2RzcHAtPm9wcy5zZXR1cF9hZCkgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7 Ci0JCQl9Ci0JCQlhZF9jZmcucHJvcCA9IEFEX0lOUFVUOwotCQkJYWRfY2ZnLmh3X2NmZyA9ICZo d19jZmc7Ci0JCQlod19kc3BwLT5vcHMuc2V0dXBfYWQoaHdfZHNwcCwgJmFkX2NmZyk7Ci0JCQli cmVhazsKLQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX0FTU0VSVElWRU5FU1M6Ci0JCQlpZiAo IWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9hZCkgewotCQkJCXJldCA9IC1FSU5WQUw7 Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlhZF9jZmcucHJvcCA9IEFEX0FTU0VSVElWRTsKLQkJ CWFkX2NmZy5od19jZmcgPSAmaHdfY2ZnOwotCQkJaHdfZHNwcC0+b3BzLnNldHVwX2FkKGh3X2Rz cHAsICZhZF9jZmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9BRF9CQUNL TElHSFQ6Ci0JCQlpZiAoIWh3X2RzcHAgfHwgIWh3X2RzcHAtPm9wcy5zZXR1cF9hZCkgewotCQkJ CXJldCA9IC1FSU5WQUw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlhZF9jZmcucHJvcCA9IEFE X0JBQ0tMSUdIVDsKLQkJCWFkX2NmZy5od19jZmcgPSAmaHdfY2ZnOwotCQkJaHdfZHNwcC0+b3Bz LnNldHVwX2FkKGh3X2RzcHAsICZhZF9jZmcpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQly ZXQgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAocmV0KSB7Ci0JCURSTV9F UlJPUigiZmFpbGVkIHRvICVzIGZlYXR1cmUgJWRcbiIsCi0JCQkoKGZlYXR1cmVfZW5hYmxlZCkg PyAiZW5hYmxlIiA6ICJkaXNhYmxlIiksCi0JCQlwcm9wX25vZGUtPmZlYXR1cmUpOwotCQlyZXR1 cm47Ci0JfQotCi0JaWYgKGZlYXR1cmVfZW5hYmxlZCkgewotCQlEUk1fREVCVUdfRFJJVkVSKCJB ZGQgZmVhdHVyZSB0byBhY3RpdmUgbGlzdCAlZFxuIiwKLQkJCQkgcHJvcF9ub2RlLT5wcm9wZXJ0 eV9pZCk7Ci0JCWRwdV9jcF91cGRhdGVfbGlzdChwcm9wX25vZGUsIGRwdV9jcnRjLCBmYWxzZSk7 Ci0JfSBlbHNlIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigicmVtb3ZlIGZlYXR1cmUgZnJvbSBhY3Rp dmUgbGlzdCAlZFxuIiwKLQkJCSBwcm9wX25vZGUtPnByb3BlcnR5X2lkKTsKLQkJbGlzdF9kZWxf aW5pdCgmcHJvcF9ub2RlLT5hY3RpdmVfbGlzdCk7Ci0JfQotCS8qIFByb2dyYW1taW5nIG9mIGZl YXR1cmUgZG9uZSByZW1vdmUgZnJvbSBkaXJ0eSBsaXN0ICovCi0JbGlzdF9kZWxfaW5pdCgmcHJv cF9ub2RlLT5kaXJ0eV9saXN0KTsKLX0KLQotdm9pZCBkcHVfY3BfY3J0Y19hcHBseV9wcm9wZXJ0 aWVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRj ID0gTlVMTDsKLQlib29sIHNldF9kc3BwX2ZsdXNoID0gZmFsc2UsIHNldF9sbV9mbHVzaCA9IGZh bHNlOwotCXN0cnVjdCBkcHVfY3Bfbm9kZSAqcHJvcF9ub2RlID0gTlVMTCwgKm4gPSBOVUxMOwot CXN0cnVjdCBkcHVfaHdfY3RsICpjdGw7Ci0JdWludDMyX3QgZmx1c2hfbWFzayA9IDA7Ci0JdTMy IG51bV9taXhlcnMgPSAwLCBpID0gMDsKLQotCWlmICghY3J0YyB8fCAhY3J0Yy0+ZGV2KSB7Ci0J CURSTV9FUlJPUigiaW52YWxpZCBjcnRjICVwSyBkZXYgJXBLXG4iLCBjcnRjLAotCQkJICAoY3J0 YyA/IGNydGMtPmRldiA6IE5VTEwpKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwdV9jcnRjID0gdG9f ZHB1X2NydGMoY3J0Yyk7Ci0JaWYgKCFkcHVfY3J0YykgewotCQlEUk1fRVJST1IoImludmFsaWQg ZHB1X2NydGMgJXBLXG4iLCBkcHVfY3J0Yyk7Ci0JCXJldHVybjsKLQl9Ci0KLQludW1fbWl4ZXJz ID0gZHB1X2NydGMtPm51bV9taXhlcnM7Ci0JaWYgKCFudW1fbWl4ZXJzKSB7Ci0JCURSTV9ERUJV R19EUklWRVIoIm5vIG1peGVycyBmb3IgdGhpcyBjcnRjXG4iKTsKLQkJcmV0dXJuOwotCX0KLQot CS8qIENoZWNrIGlmIGRpcnR5IGxpc3RzIGFyZSBlbXB0eSBhbmQgYWQgZmVhdHVyZXMgYXJlIGRp c2FibGVkIGZvcgotCSAqIGVhcmx5IHJldHVybi4gSWYgYWQgcHJvcGVydGllcyBhcmUgYWN0aXZl IHRoZW4gd2UgbmVlZCB0byBpc3N1ZQotCSAqIGRzcHAgZmx1c2guCi0JICoqLwotCWlmIChsaXN0 X2VtcHR5KCZkcHVfY3J0Yy0+ZGlydHlfbGlzdCkgJiYKLQkJbGlzdF9lbXB0eSgmZHB1X2NydGMt PmFkX2RpcnR5KSkgewotCQlpZiAobGlzdF9lbXB0eSgmZHB1X2NydGMtPmFkX2FjdGl2ZSkpIHsK LQkJCURSTV9ERUJVR19EUklWRVIoIkRpcnR5IGxpc3QgaXMgZW1wdHlcbiIpOwotCQkJcmV0dXJu OwotCQl9Ci0JCWRwdV9jcF9hZF9zZXRfcHJvcChkcHVfY3J0YywgQURfSVBDX1JFU0VUKTsKLQkJ c2V0X2RzcHBfZmx1c2ggPSB0cnVlOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShw cm9wX25vZGUsIG4sICZkcHVfY3J0Yy0+ZGlydHlfbGlzdCwKLQkJCQlkaXJ0eV9saXN0KSB7Ci0J CWRwdV9jcF9jcnRjX3NldGZlYXR1cmUocHJvcF9ub2RlLCBkcHVfY3J0Yyk7Ci0JCS8qIFNldCB0 aGUgZmx1c2ggZmxhZyB0byB0cnVlICovCi0JCWlmIChwcm9wX25vZGUtPmlzX2RzcHBfZmVhdHVy ZSkKLQkJCXNldF9kc3BwX2ZsdXNoID0gdHJ1ZTsKLQkJZWxzZQotCQkJc2V0X2xtX2ZsdXNoID0g dHJ1ZTsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJvcF9ub2RlLCBuLCAmZHB1 X2NydGMtPmFkX2RpcnR5LAotCQkJCWRpcnR5X2xpc3QpIHsKLQkJc2V0X2RzcHBfZmx1c2ggPSB0 cnVlOwotCQlkcHVfY3BfY3J0Y19zZXRmZWF0dXJlKHByb3Bfbm9kZSwgZHB1X2NydGMpOwotCX0K LQotCWZvciAoaSA9IDA7IGkgPCBudW1fbWl4ZXJzOyBpKyspIHsKLQkJY3RsID0gZHB1X2NydGMt Pm1peGVyc1tpXS5od19jdGw7Ci0JCWlmICghY3RsKQotCQkJY29udGludWU7Ci0JCWlmIChzZXRf ZHNwcF9mbHVzaCAmJiBjdGwtPm9wcy5nZXRfYml0bWFza19kc3BwCi0JCQkJJiYgZHB1X2NydGMt Pm1peGVyc1tpXS5od19kc3BwKSB7Ci0JCQljdGwtPm9wcy5nZXRfYml0bWFza19kc3BwKGN0bCwK LQkJCQkJJmZsdXNoX21hc2ssCi0JCQkJCWRwdV9jcnRjLT5taXhlcnNbaV0uaHdfZHNwcC0+aWR4 KTsKLQkJCWN0bC0+b3BzLnVwZGF0ZV9wZW5kaW5nX2ZsdXNoKGN0bCwgZmx1c2hfbWFzayk7Ci0J CX0KLQkJaWYgKHNldF9sbV9mbHVzaCAmJiBjdGwtPm9wcy5nZXRfYml0bWFza19taXhlcgotCQkJ CSYmIGRwdV9jcnRjLT5taXhlcnNbaV0uaHdfbG0pIHsKLQkJCWZsdXNoX21hc2sgPSBjdGwtPm9w cy5nZXRfYml0bWFza19taXhlcihjdGwsCi0JCQkJCWRwdV9jcnRjLT5taXhlcnNbaV0uaHdfbG0t PmlkeCk7Ci0JCQljdGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVzaChjdGwsIGZsdXNoX21hc2sp OwotCQl9Ci0JfQotfQotCi12b2lkIGRwdV9jcF9jcnRjX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRwdV9rbXMgKmttcyA9IE5VTEw7Ci0Jc3Ry dWN0IGRwdV9jcnRjICpkcHVfY3J0YyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0 YWxvZyA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IDA7Ci0JaW50IGkgPSAwOwot CXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7Ci0KLQlpZiAoIWNydGMgfHwgIWNydGMtPmRl diB8fCAhY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZSkgewotCQlEUk1fRVJST1IoImludmFsaWQgY3J0 YyAlcEsgZGV2ICVwS1xuIiwKLQkJICAgICAgIGNydGMsICgoY3J0YykgPyBjcnRjLT5kZXYgOiBO VUxMKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwot CWlmICghZHB1X2NydGMpIHsKLQkJRFJNX0VSUk9SKCJkcHVfY3J0YyAlcEtcbiIsIGRwdV9jcnRj KTsKLQkJcmV0dXJuOwotCX0KLQotCWttcyA9IGdldF9rbXMoY3J0Yyk7Ci0JaWYgKCFrbXMgfHwg IWttcy0+Y2F0YWxvZykgewotCQlEUk1fRVJST1IoImludmFsaWQgZHB1IGttcyAlcEsgY2F0YWxv ZyAlcEsgZHB1X2NydGMgJXBLXG4iLAotCQkga21zLCAoKGttcykgPyBrbXMtPmNhdGFsb2cgOiBO VUxMKSwgZHB1X2NydGMpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoqCi0JICogRnVuY3Rpb24gY2Fu IGJlIGNhbGxlZCBkdXJpbmcgdGhlIGF0b21pY19jaGVjayB3aXRoIHRlc3Rfb25seSBmbGFnCi0J ICogYW5kIGFjdHVhbCBjb21taXQuIEFsbG9jYXRlIHByb3BlcnRpZXMgb25seSBpZiBmZWF0dXJl IGxpc3QgaXMKLQkgKiBlbXB0eSBkdXJpbmcgdGhlIGF0b21pY19jaGVjayB3aXRoIHRlc3Rfb25s eSBmbGFnLgotCSAqLwotCWlmICghbGlzdF9lbXB0eSgmZHB1X2NydGMtPmZlYXR1cmVfbGlzdCkp Ci0JCXJldHVybjsKLQotCWNhdGFsb2cgPSBrbXMtPmNhdGFsb2c7Ci0JcHJpdiA9IGNydGMtPmRl di0+ZGV2X3ByaXZhdGU7Ci0JLyoqCi0JICogRFNQUC9MTSBwcm9wZXJ0aWVzIGFyZSBnbG9iYWwg dG8gYWxsIHRoZSBDUlRDUy4KLQkgKiBQcm9wZXJ0aWVzIGFyZSBjcmVhdGVkIGZvciBmaXJzdCBD UlRDIGFuZCByZS11c2VkIGZvciBsYXRlcgotCSAqIGNydGNzLgotCSAqLwotCWlmICghcHJpdi0+ Y3BfcHJvcGVydHkpIHsKLQkJcHJpdi0+Y3BfcHJvcGVydHkgPSBremFsbG9jKChzaXplb2YocHJp di0+Y3BfcHJvcGVydHkpICoKLQkJCQlEUFVfQ1BfQ1JUQ19NQVhfRkVBVFVSRVMpLCBHRlBfS0VS TkVMKTsKLQkJc2V0dXBfZHNwcF9wcm9wX2luc3RhbGxfZnVuY3MoZHNwcF9wcm9wX2luc3RhbGxf ZnVuYyk7Ci0JCXNldHVwX2xtX3Byb3BfaW5zdGFsbF9mdW5jcyhsbV9wcm9wX2luc3RhbGxfZnVu Yyk7Ci0JfQotCWlmICghcHJpdi0+Y3BfcHJvcGVydHkpCi0JCXJldHVybjsKLQotCWlmICghY2F0 YWxvZy0+ZHNwcF9jb3VudCkKLQkJZ290byBsbV9wcm9wZXJ0eTsKLQotCS8qIENoZWNrIGZvciBh bGwgdGhlIERTUFAgcHJvcGVydGllcyBhbmQgYXR0YWNoIGl0IHRvIENSVEMgKi8KLQlmZWF0dXJl cyA9IGNhdGFsb2ctPmRzcHBbMF0uZmVhdHVyZXM7Ci0JZm9yIChpID0gMDsgaSA8IERQVV9EU1BQ X01BWDsgaSsrKSB7Ci0JCWlmICghdGVzdF9iaXQoaSwgJmZlYXR1cmVzKSkKLQkJCWNvbnRpbnVl OwotCQlpZiAoZHNwcF9wcm9wX2luc3RhbGxfZnVuY1tpXSkKLQkJCWRzcHBfcHJvcF9pbnN0YWxs X2Z1bmNbaV0oY3J0Yyk7Ci0JfQotCi1sbV9wcm9wZXJ0eToKLQlpZiAoIWNhdGFsb2ctPm1peGVy X2NvdW50KQotCQlyZXR1cm47Ci0KLQkvKiBDaGVjayBmb3IgYWxsIHRoZSBMTSBwcm9wZXJ0aWVz IGFuZCBhdHRhY2ggaXQgdG8gQ1JUQyAqLwotCWZlYXR1cmVzID0gY2F0YWxvZy0+bWl4ZXJbMF0u ZmVhdHVyZXM7Ci0JZm9yIChpID0gMDsgaSA8IERQVV9NSVhFUl9NQVg7IGkrKykgewotCQlpZiAo IXRlc3RfYml0KGksICZmZWF0dXJlcykpCi0JCQljb250aW51ZTsKLQkJaWYgKGxtX3Byb3BfaW5z dGFsbF9mdW5jW2ldKQotCQkJbG1fcHJvcF9pbnN0YWxsX2Z1bmNbaV0oY3J0Yyk7Ci0JfQotfQot Ci1pbnQgZHB1X2NwX2NydGNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJ CQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKLQkJCQl1aW50NjRfdCB2YWwpCi17Ci0J c3RydWN0IGRwdV9jcF9ub2RlICpwcm9wX25vZGUgPSBOVUxMOwotCXN0cnVjdCBkcHVfY3J0YyAq ZHB1X2NydGMgPSBOVUxMOwotCWludCByZXQgPSAwLCBpID0gMCwgZHNwcF9jbnQsIGxtX2NudDsK LQl1OCBmb3VuZCA9IDA7Ci0KLQlpZiAoIWNydGMgfHwgIXByb3BlcnR5KSB7Ci0JCURSTV9FUlJP UigiaW52YWxpZCBjcnRjICVwSyBwcm9wZXJ0eSAlcEtcbiIsIGNydGMsIHByb3BlcnR5KTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQlp ZiAoIWRwdV9jcnRjKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBkcHVfY3J0YyAlcEtcbiIsIGRw dV9jcnRjKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShw cm9wX25vZGUsICZkcHVfY3J0Yy0+ZmVhdHVyZV9saXN0LCBmZWF0dXJlX2xpc3QpIHsKLQkJaWYg KHByb3BlcnR5LT5iYXNlLmlkID09IHByb3Bfbm9kZS0+cHJvcGVydHlfaWQpIHsKLQkJCWZvdW5k ID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFmb3VuZCkKLQkJcmV0dXJuIDA7Ci0J LyoqCi0JICogZHB1X2NydGMgaXMgdmlydHVhbCBlbnN1cmUgdGhhdCBoYXJkd2FyZSBoYXMgYmVl biBhdHRhY2hlZCB0byB0aGUKLQkgKiBjcnRjLiBDaGVjayBMTSBhbmQgZHNwcCBjb3VudHMgYmFz ZWQgb24gd2hldGhlciBmZWF0dXJlIGlzIGEKLQkgKiBkc3BwL2xtIGZlYXR1cmUuCi0JICovCi0J aWYgKCFkcHVfY3J0Yy0+bnVtX21peGVycyB8fAotCSAgICBkcHVfY3J0Yy0+bnVtX21peGVycyA+ IEFSUkFZX1NJWkUoZHB1X2NydGMtPm1peGVycykpIHsKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIG1p eGVyIGNvbmZpZyBhY3QgY250ICVkIG1heCBjbnQgJXpkXG4iLAotCQkJZHB1X2NydGMtPm51bV9t aXhlcnMsIEFSUkFZX1NJWkUoZHB1X2NydGMtPm1peGVycykpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlkc3BwX2NudCA9IDA7Ci0JbG1fY250ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgZHB1 X2NydGMtPm51bV9taXhlcnM7IGkrKykgewotCQlpZiAoZHB1X2NydGMtPm1peGVyc1tpXS5od19k c3BwKQotCQkJZHNwcF9jbnQrKzsKLQkJaWYgKGRwdV9jcnRjLT5taXhlcnNbaV0uaHdfbG0pCi0J CQlsbV9jbnQrKzsKLQl9Ci0KLQlpZiAocHJvcF9ub2RlLT5pc19kc3BwX2ZlYXR1cmUgJiYgZHNw cF9jbnQgPCBkcHVfY3J0Yy0+bnVtX21peGVycykgewotCQlEUk1fRVJST1IoImludmFsaWQgZHNw cCBjbnQgJWQgbWl4ZXIgY250ICVkXG4iLCBkc3BwX2NudCwKLQkJCWRwdV9jcnRjLT5udW1fbWl4 ZXJzKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChsbV9jbnQgPCBkcHVfY3J0Yy0+ bnVtX21peGVycykgewotCQlEUk1fRVJST1IoImludmFsaWQgbG0gY250ICVkIG1peGVyIGNudCAl ZFxuIiwgbG1fY250LAotCQkJZHB1X2NydGMtPm51bV9taXhlcnMpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQlyZXQgPSBkcHVfY3BfYWRfdmFsaWRhdGVfcHJvcChwcm9wX25vZGUsIGRwdV9j cnRjKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiYWQgcHJvcGVydHkgdmFsaWRhdGlvbiBm YWlsZWQgcmV0ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIHJlbW92ZSB0 aGUgcHJvcGVydHkgZnJvbSBkaXJ0eSBsaXN0ICovCi0JbGlzdF9kZWxfaW5pdCgmcHJvcF9ub2Rl LT5kaXJ0eV9saXN0KTsKLQotCWlmICghdmFsKQotCQlyZXQgPSBkcHVfY3BfZGlzYWJsZV9jcnRj X3Byb3BlcnR5KGNydGMsIHByb3BlcnR5LCBwcm9wX25vZGUpOwotCWVsc2UKLQkJcmV0ID0gZHB1 X2NwX2VuYWJsZV9jcnRjX3Byb3BlcnR5KGNydGMsIHByb3BlcnR5LAotCQkJCQkJICBwcm9wX25v ZGUsIHZhbCk7Ci0KLQlpZiAoIXJldCkgewotCQkvKiByZW1vdmUgdGhlIHByb3BlcnR5IGZyb20g YWN0aXZlIGxpc3QgKi8KLQkJbGlzdF9kZWxfaW5pdCgmcHJvcF9ub2RlLT5hY3RpdmVfbGlzdCk7 Ci0JCS8qIE1hcmsgdGhlIGZlYXR1cmUgYXMgZGlydHkgKi8KLQkJZHB1X2NwX3VwZGF0ZV9saXN0 KHByb3Bfbm9kZSwgZHB1X2NydGMsIHRydWUpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQg ZHB1X2NwX2NydGNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAg c3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90ICp2YWwpCi17Ci0Jc3RydWN0 IGRwdV9jcF9ub2RlICpwcm9wX25vZGUgPSBOVUxMOwotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2Ny dGMgPSBOVUxMOwotCi0JaWYgKCFjcnRjIHx8ICFwcm9wZXJ0eSB8fCAhdmFsKSB7Ci0JCURSTV9F UlJPUigiaW52YWxpZCBjcnRjICVwSyBwcm9wZXJ0eSAlcEsgdmFsICVwS1xuIiwKLQkJCSAgY3J0 YywgcHJvcGVydHksIHZhbCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRwdV9jcnRjID0g dG9fZHB1X2NydGMoY3J0Yyk7Ci0JaWYgKCFkcHVfY3J0YykgewotCQlEUk1fRVJST1IoImludmFs aWQgZHB1X2NydGMgJXBLXG4iLCBkcHVfY3J0Yyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkv KiBSZXR1cm4gMCBpZiBwcm9wZXJ0eSBpcyBub3Qgc3VwcG9ydGVkICovCi0JKnZhbCA9IDA7Ci0J bGlzdF9mb3JfZWFjaF9lbnRyeShwcm9wX25vZGUsICZkcHVfY3J0Yy0+ZmVhdHVyZV9saXN0LCBm ZWF0dXJlX2xpc3QpIHsKLQkJaWYgKHByb3BlcnR5LT5iYXNlLmlkID09IHByb3Bfbm9kZS0+cHJv cGVydHlfaWQpIHsKLQkJCSp2YWwgPSBwcm9wX25vZGUtPnByb3BfdmFsOwotCQkJYnJlYWs7Ci0J CX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHB1X2NwX2NydGNfZGVzdHJveV9wcm9wZXJ0 aWVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRj ID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSA9IE5VTEwsICpuID0gTlVM TDsKLQotCWlmICghY3J0YykgewotCQlEUk1fRVJST1IoImludmFsaWQgY3J0YyAlcEtcbiIsIGNy dGMpOwotCQlyZXR1cm47Ci0JfQotCi0JZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQlp ZiAoIWRwdV9jcnRjKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBkcHVfY3J0YyAlcEtcbiIsIGRw dV9jcnRjKTsKLQkJcmV0dXJuOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcm9w X25vZGUsIG4sICZkcHVfY3J0Yy0+ZmVhdHVyZV9saXN0LAotCQkJCSBmZWF0dXJlX2xpc3QpIHsK LQkJaWYgKHByb3Bfbm9kZS0+cHJvcF9mbGFncyAmIERSTV9NT0RFX1BST1BfQkxPQgotCQkgICAg JiYgcHJvcF9ub2RlLT5ibG9iX3B0cikKLQkJCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChwcm9wX25v ZGUtPmJsb2JfcHRyKTsKLQotCQlsaXN0X2RlbF9pbml0KCZwcm9wX25vZGUtPmFjdGl2ZV9saXN0 KTsKLQkJbGlzdF9kZWxfaW5pdCgmcHJvcF9ub2RlLT5kaXJ0eV9saXN0KTsKLQkJbGlzdF9kZWxf aW5pdCgmcHJvcF9ub2RlLT5mZWF0dXJlX2xpc3QpOwotCQlkcHVfY3BfZGVzdHJveV9sb2NhbF9i bG9iKHByb3Bfbm9kZSk7Ci0JCWtmcmVlKHByb3Bfbm9kZSk7Ci0JfQotCi0JSU5JVF9MSVNUX0hF QUQoJmRwdV9jcnRjLT5hY3RpdmVfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRwdV9jcnRjLT5k aXJ0eV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmZHB1X2NydGMtPmZlYXR1cmVfbGlzdCk7Ci19 Ci0KLXZvaWQgZHB1X2NwX2NydGNfc3VzcGVuZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0J c3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9jcF9ub2RlICpw cm9wX25vZGUgPSBOVUxMLCAqbiA9IE5VTEw7Ci0KLQlpZiAoIWNydGMpIHsKLQkJRFJNX0VSUk9S KCJjcnRjICVwS1xuIiwgY3J0Yyk7Ci0JCXJldHVybjsKLQl9Ci0JZHB1X2NydGMgPSB0b19kcHVf Y3J0YyhjcnRjKTsKLQlpZiAoIWRwdV9jcnRjKSB7Ci0JCURSTV9FUlJPUigiZHB1X2NydGMgJXBL XG4iLCBkcHVfY3J0Yyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUocHJvcF9ub2RlLCBuLCAmZHB1X2NydGMtPmFjdGl2ZV9saXN0LAotCQkJCSBhY3RpdmVfbGlz dCkgewotCQlkcHVfY3BfdXBkYXRlX2xpc3QocHJvcF9ub2RlLCBkcHVfY3J0YywgdHJ1ZSk7Ci0J CWxpc3RfZGVsX2luaXQoJnByb3Bfbm9kZS0+YWN0aXZlX2xpc3QpOwotCX0KLQotCWxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZShwcm9wX25vZGUsIG4sICZkcHVfY3J0Yy0+YWRfYWN0aXZlLAotCQkJ CSBhY3RpdmVfbGlzdCkgewotCQlkcHVfY3BfdXBkYXRlX2xpc3QocHJvcF9ub2RlLCBkcHVfY3J0 YywgdHJ1ZSk7Ci0JCWxpc3RfZGVsX2luaXQoJnByb3Bfbm9kZS0+YWN0aXZlX2xpc3QpOwotCX0K LX0KLQotdm9pZCBkcHVfY3BfY3J0Y19yZXN1bWUoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewot CS8qIHBsYWNlaG9sZGVyIGZvciBvcGVyYXRpb25zIG5lZWRlZCBkdXJpbmcgcmVzdW1lICovCi19 Ci0KLXN0YXRpYyB2b2lkIGRzcHBfcGNjX2luc3RhbGxfcHJvcGVydHkoc3RydWN0IGRybV9jcnRj ICpjcnRjKQotewotCWNoYXIgZmVhdHVyZV9uYW1lWzI1Nl07Ci0Jc3RydWN0IGRwdV9rbXMgKmtt cyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZyA9IE5VTEw7Ci0JdTMyIHZl cnNpb247Ci0KLQlrbXMgPSBnZXRfa21zKGNydGMpOwotCWNhdGFsb2cgPSBrbXMtPmNhdGFsb2c7 Ci0KLQl2ZXJzaW9uID0gY2F0YWxvZy0+ZHNwcFswXS5zYmxrLT5wY2MudmVyc2lvbiA+PiAxNjsK LQlzbnByaW50ZihmZWF0dXJlX25hbWUsIEFSUkFZX1NJWkUoZmVhdHVyZV9uYW1lKSwgIiVzJWQi LAotCQkiRFBVX0RTUFBfUENDX1YiLCB2ZXJzaW9uKTsKLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQlj YXNlIDE6Ci0JY2FzZSA0OgotCQlkcHVfY3BfY3J0Y19pbnN0YWxsX2Jsb2JfcHJvcGVydHkoY3J0 YywgZmVhdHVyZV9uYW1lLAotCQkJRFBVX0NQX0NSVENfRFNQUF9QQ0MsIHNpemVvZihzdHJ1Y3Qg ZHJtX21zbV9wY2MpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCJ2ZXJzaW9u ICVkIG5vdCBzdXBwb3J0ZWRcbiIsIHZlcnNpb24pOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRp YyB2b2lkIGRzcHBfaHNpY19pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK LXsKLQljaGFyIGZlYXR1cmVfbmFtZVsyNTZdOwotCXN0cnVjdCBkcHVfa21zICprbXMgPSBOVUxM OwotCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2cgPSBOVUxMOwotCXUzMiB2ZXJzaW9uOwot Ci0Ja21zID0gZ2V0X2ttcyhjcnRjKTsKLQljYXRhbG9nID0ga21zLT5jYXRhbG9nOwotCXZlcnNp b24gPSBjYXRhbG9nLT5kc3BwWzBdLnNibGstPmhzaWMudmVyc2lvbiA+PiAxNjsKLQlzd2l0Y2gg KHZlcnNpb24pIHsKLQljYXNlIDE6Ci0JCXNucHJpbnRmKGZlYXR1cmVfbmFtZSwgQVJSQVlfU0la RShmZWF0dXJlX25hbWUpLCAiJXMlZCIsCi0JCQkiRFBVX0RTUFBfSFVFX1YiLCB2ZXJzaW9uKTsK LQkJZHB1X2NwX2NydGNfaW5zdGFsbF9yYW5nZV9wcm9wZXJ0eShjcnRjLCBmZWF0dXJlX25hbWUs Ci0JCQlEUFVfQ1BfQ1JUQ19EU1BQX0hVRSwgMCwgVTMyX01BWCwgMCk7Ci0JCWJyZWFrOwotCWRl ZmF1bHQ6Ci0JCURSTV9FUlJPUigidmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCB2ZXJzaW9u KTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkc3BwX3ZsdXRfaW5zdGFsbF9wcm9w ZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0JY2hhciBmZWF0dXJlX25hbWVbMjU2XTsK LQlzdHJ1Y3QgZHB1X2ttcyAqa21zID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRh bG9nID0gTlVMTDsKLQl1MzIgdmVyc2lvbjsKLQotCWttcyA9IGdldF9rbXMoY3J0Yyk7Ci0JY2F0 YWxvZyA9IGttcy0+Y2F0YWxvZzsKLQl2ZXJzaW9uID0gY2F0YWxvZy0+ZHNwcFswXS5zYmxrLT52 bHV0LnZlcnNpb24gPj4gMTY7Ci0Jc25wcmludGYoZmVhdHVyZV9uYW1lLCBBUlJBWV9TSVpFKGZl YXR1cmVfbmFtZSksICIlcyVkIiwKLQkJIkRQVV9EU1BQX1ZMVVRfViIsIHZlcnNpb24pOwotCXN3 aXRjaCAodmVyc2lvbikgewotCWNhc2UgMToKLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9yYW5nZV9w cm9wZXJ0eShjcnRjLCBmZWF0dXJlX25hbWUsCi0JCQlEUFVfQ1BfQ1JUQ19EU1BQX1ZMVVQsIDAs IFU2NF9NQVgsIDApOwotCQlkcHVfY3BfY3JlYXRlX2xvY2FsX2Jsb2IoY3J0YywKLQkJCURQVV9D UF9DUlRDX0RTUFBfVkxVVCwKLQkJCXNpemVvZihzdHJ1Y3QgZHJtX21zbV9wYV92bHV0KSk7Ci0J CWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigidmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVk XG4iLCB2ZXJzaW9uKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkc3BwX2FkX2lu c3RhbGxfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCWNoYXIgZmVhdHVyZV9u YW1lWzI1Nl07Ci0Jc3RydWN0IGRwdV9rbXMgKmttcyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9tZHNz X2NmZyAqY2F0YWxvZyA9IE5VTEw7Ci0JdTMyIHZlcnNpb247Ci0KLQlrbXMgPSBnZXRfa21zKGNy dGMpOwotCWNhdGFsb2cgPSBrbXMtPmNhdGFsb2c7Ci0JdmVyc2lvbiA9IGNhdGFsb2ctPmRzcHBb MF0uc2Jsay0+YWQudmVyc2lvbiA+PiAxNjsKLQlzbnByaW50ZihmZWF0dXJlX25hbWUsIEFSUkFZ X1NJWkUoZmVhdHVyZV9uYW1lKSwgIiVzJWQiLAotCQkiRFBVX0RTUFBfQURfViIsIHZlcnNpb24p OwotCXN3aXRjaCAodmVyc2lvbikgewotCWNhc2UgMzoKLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9p bW11dGFibGVfcHJvcGVydHkoY3J0YywKLQkJCWZlYXR1cmVfbmFtZSwgRFBVX0NQX0NSVENfRFNQ UF9BRCk7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9pbW11dGFi bGVfcHJvcGVydHkoY3J0YywKLQkJCWZlYXR1cmVfbmFtZSwgRFBVX0NQX0NSVENfRFNQUF9BRCk7 Ci0KLQkJZHB1X2NwX2NydGNfaW5zdGFsbF9lbnVtX3Byb3BlcnR5KGNydGMsCi0JCQlEUFVfQ1Bf Q1JUQ19EU1BQX0FEX01PREUsIGFkNF9tb2RlcywKLQkJCUFSUkFZX1NJWkUoYWQ0X21vZGVzKSwg IkRQVV9EU1BQX0FEX1Y0X01PREUiKTsKLQotCQlkcHVfY3BfY3J0Y19pbnN0YWxsX3JhbmdlX3By b3BlcnR5KGNydGMsICJEUFVfRFNQUF9BRF9WNF9JTklUIiwKLQkJCURQVV9DUF9DUlRDX0RTUFBf QURfSU5JVCwgMCwgVTY0X01BWCwgMCk7Ci0JCWRwdV9jcF9jcmVhdGVfbG9jYWxfYmxvYihjcnRj LCBEUFVfQ1BfQ1JUQ19EU1BQX0FEX0lOSVQsCi0JCQlzaXplb2Yoc3RydWN0IGRybV9tc21fYWQ0 X2luaXQpKTsKLQotCQlkcHVfY3BfY3J0Y19pbnN0YWxsX3JhbmdlX3Byb3BlcnR5KGNydGMsICJE UFVfRFNQUF9BRF9WNF9DRkciLAotCQkJRFBVX0NQX0NSVENfRFNQUF9BRF9DRkcsIDAsIFU2NF9N QVgsIDApOwotCQlkcHVfY3BfY3JlYXRlX2xvY2FsX2Jsb2IoY3J0YywgRFBVX0NQX0NSVENfRFNQ UF9BRF9DRkcsCi0JCQlzaXplb2Yoc3RydWN0IGRybV9tc21fYWQ0X2NmZykpOwotCQlkcHVfY3Bf Y3J0Y19pbnN0YWxsX3JhbmdlX3Byb3BlcnR5KGNydGMsCi0JCQkiRFBVX0RTUFBfQURfVjRfQVNT RVJUSVZFTkVTUyIsCi0JCQlEUFVfQ1BfQ1JUQ19EU1BQX0FEX0FTU0VSVElWRU5FU1MsIDAsIChC SVQoOCkgLSAxKSwgMCk7Ci0JCWRwdV9jcF9jcnRjX2luc3RhbGxfcmFuZ2VfcHJvcGVydHkoY3J0 YywgIkRQVV9EU1BQX0FEX1Y0X0lOUFVUIiwKLQkJCURQVV9DUF9DUlRDX0RTUFBfQURfSU5QVVQs IDAsIFUxNl9NQVgsIDApOwotCQlkcHVfY3BfY3J0Y19pbnN0YWxsX3JhbmdlX3Byb3BlcnR5KGNy dGMsCi0JCQkJIkRQVV9EU1BQX0FEX1Y0X0JBQ0tMSUdIVCIsCi0JCQlEUFVfQ1BfQ1JUQ19EU1BQ X0FEX0JBQ0tMSUdIVCwgMCwgKEJJVCgxNikgLSAxKSwKLQkJCTApOwotCQlicmVhazsKLQlkZWZh dWx0OgotCQlEUk1fRVJST1IoInZlcnNpb24gJWQgbm90IHN1cHBvcnRlZFxuIiwgdmVyc2lvbik7 Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgbG1fZ2NfaW5zdGFsbF9wcm9wZXJ0eShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0JY2hhciBmZWF0dXJlX25hbWVbMjU2XTsKLQlzdHJ1 Y3QgZHB1X2ttcyAqa21zID0gTlVMTDsKLQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nID0g TlVMTDsKLQl1MzIgdmVyc2lvbjsKLQotCWttcyA9IGdldF9rbXMoY3J0Yyk7Ci0JY2F0YWxvZyA9 IGttcy0+Y2F0YWxvZzsKLQl2ZXJzaW9uID0gY2F0YWxvZy0+bWl4ZXJbMF0uc2Jsay0+Z2MudmVy c2lvbiA+PiAxNjsKLQlzbnByaW50ZihmZWF0dXJlX25hbWUsIEFSUkFZX1NJWkUoZmVhdHVyZV9u YW1lKSwgIiVzJWQiLAotCQkgIkRQVV9MTV9HQ19WIiwgdmVyc2lvbik7Ci0Jc3dpdGNoICh2ZXJz aW9uKSB7Ci0JY2FzZSAxOgotCQlkcHVfY3BfY3J0Y19pbnN0YWxsX2Jsb2JfcHJvcGVydHkoY3J0 YywgZmVhdHVyZV9uYW1lLAotCQkJRFBVX0NQX0NSVENfTE1fR0MsIHNpemVvZihzdHJ1Y3QgZHJt X21zbV9wZ2NfbHV0KSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigidmVyc2lv biAlZCBub3Qgc3VwcG9ydGVkXG4iLCB2ZXJzaW9uKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0 aWMgdm9pZCBkc3BwX2dhbXV0X2luc3RhbGxfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRj KQotewotCWNoYXIgZmVhdHVyZV9uYW1lWzI1Nl07Ci0Jc3RydWN0IGRwdV9rbXMgKmttcyA9IE5V TEw7Ci0Jc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZyA9IE5VTEw7Ci0JdTMyIHZlcnNpb247 Ci0KLQlrbXMgPSBnZXRfa21zKGNydGMpOwotCWNhdGFsb2cgPSBrbXMtPmNhdGFsb2c7Ci0KLQl2 ZXJzaW9uID0gY2F0YWxvZy0+ZHNwcFswXS5zYmxrLT5nYW11dC52ZXJzaW9uID4+IDE2OwotCXNu cHJpbnRmKGZlYXR1cmVfbmFtZSwgQVJSQVlfU0laRShmZWF0dXJlX25hbWUpLCAiJXMlZCIsCi0J CSJEUFVfRFNQUF9HQU1VVF9WIiwgdmVyc2lvbik7Ci0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0JY2Fz ZSA0OgotCQlkcHVfY3BfY3J0Y19pbnN0YWxsX2Jsb2JfcHJvcGVydHkoY3J0YywgZmVhdHVyZV9u YW1lLAotCQkJRFBVX0NQX0NSVENfRFNQUF9HQU1VVCwKLQkJCXNpemVvZihzdHJ1Y3QgZHJtX21z bV8zZF9nYW11dCkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoInZlcnNpb24g JWQgbm90IHN1cHBvcnRlZFxuIiwgdmVyc2lvbik7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGlj IHZvaWQgZHNwcF9nY19pbnN0YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsK LQljaGFyIGZlYXR1cmVfbmFtZVsyNTZdOwotCXN0cnVjdCBkcHVfa21zICprbXMgPSBOVUxMOwot CXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2cgPSBOVUxMOwotCXUzMiB2ZXJzaW9uOwotCi0J a21zID0gZ2V0X2ttcyhjcnRjKTsKLQljYXRhbG9nID0ga21zLT5jYXRhbG9nOwotCi0JdmVyc2lv biA9IGNhdGFsb2ctPmRzcHBbMF0uc2Jsay0+Z2MudmVyc2lvbiA+PiAxNjsKLQlzbnByaW50Zihm ZWF0dXJlX25hbWUsIEFSUkFZX1NJWkUoZmVhdHVyZV9uYW1lKSwgIiVzJWQiLAotCQkiRFBVX0RT UFBfR0NfViIsIHZlcnNpb24pOwotCXN3aXRjaCAodmVyc2lvbikgewotCWNhc2UgMToKLQkJZHB1 X2NwX2NydGNfaW5zdGFsbF9ibG9iX3Byb3BlcnR5KGNydGMsIGZlYXR1cmVfbmFtZSwKLQkJCURQ VV9DUF9DUlRDX0RTUFBfR0MsIHNpemVvZihzdHJ1Y3QgZHJtX21zbV9wZ2NfbHV0KSk7Ci0JCWJy ZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigidmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVkXG4i LCB2ZXJzaW9uKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkc3BwX2lnY19pbnN0 YWxsX3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQljaGFyIGZlYXR1cmVfbmFt ZVsyNTZdOwotCXN0cnVjdCBkcHVfa21zICprbXMgPSBOVUxMOwotCXN0cnVjdCBkcHVfbWRzc19j ZmcgKmNhdGFsb2cgPSBOVUxMOwotCXUzMiB2ZXJzaW9uOwotCi0Ja21zID0gZ2V0X2ttcyhjcnRj KTsKLQljYXRhbG9nID0ga21zLT5jYXRhbG9nOwotCi0JdmVyc2lvbiA9IGNhdGFsb2ctPmRzcHBb MF0uc2Jsay0+aWdjLnZlcnNpb24gPj4gMTY7Ci0Jc25wcmludGYoZmVhdHVyZV9uYW1lLCBBUlJB WV9TSVpFKGZlYXR1cmVfbmFtZSksICIlcyVkIiwKLQkJIkRQVV9EU1BQX0lHQ19WIiwgdmVyc2lv bik7Ci0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0JY2FzZSAzOgotCQlkcHVfY3BfY3J0Y19pbnN0YWxs X2Jsb2JfcHJvcGVydHkoY3J0YywgZmVhdHVyZV9uYW1lLAotCQkJRFBVX0NQX0NSVENfRFNQUF9J R0MsIHNpemVvZihzdHJ1Y3QgZHJtX21zbV9pZ2NfbHV0KSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6 Ci0JCURSTV9FUlJPUigidmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCB2ZXJzaW9uKTsKLQkJ YnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBkcHVfY3BfdXBkYXRlX2xpc3Qoc3RydWN0IGRw dV9jcF9ub2RlICpwcm9wX25vZGUsCi0JCXN0cnVjdCBkcHVfY3J0YyAqY3J0YywgYm9vbCBkaXJ0 eV9saXN0KQotewotCXN3aXRjaCAocHJvcF9ub2RlLT5mZWF0dXJlKSB7Ci0JY2FzZSBEUFVfQ1Bf Q1JUQ19EU1BQX0FEX01PREU6Ci0JY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX0lOSVQ6Ci0JY2Fz ZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX0NGRzoKLQljYXNlIERQVV9DUF9DUlRDX0RTUFBfQURfSU5Q VVQ6Ci0JY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX0FTU0VSVElWRU5FU1M6Ci0JY2FzZSBEUFVf Q1BfQ1JUQ19EU1BQX0FEX0JBQ0tMSUdIVDoKLQkJaWYgKGRpcnR5X2xpc3QpCi0JCQlsaXN0X2Fk ZF90YWlsKCZwcm9wX25vZGUtPmRpcnR5X2xpc3QsICZjcnRjLT5hZF9kaXJ0eSk7Ci0JCWVsc2UK LQkJCWxpc3RfYWRkX3RhaWwoJnByb3Bfbm9kZS0+YWN0aXZlX2xpc3QsCi0JCQkJCSZjcnRjLT5h ZF9hY3RpdmUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBjb2xvciBwcm9jZXNzaW5nIHBy b3BlcnRpZXMgaGFuZGxlIGhlcmUgKi8KLQkJaWYgKGRpcnR5X2xpc3QpCi0JCQlsaXN0X2FkZF90 YWlsKCZwcm9wX25vZGUtPmRpcnR5X2xpc3QsCi0JCQkJCSZjcnRjLT5kaXJ0eV9saXN0KTsKLQkJ ZWxzZQotCQkJbGlzdF9hZGRfdGFpbCgmcHJvcF9ub2RlLT5hY3RpdmVfbGlzdCwKLQkJCQkJJmNy dGMtPmFjdGl2ZV9saXN0KTsKLQkJYnJlYWs7Ci0JfTsKLX0KLQotc3RhdGljIGludCBkcHVfY3Bf YWRfdmFsaWRhdGVfcHJvcChzdHJ1Y3QgZHB1X2NwX25vZGUgKnByb3Bfbm9kZSwKLQkJc3RydWN0 IGRwdV9jcnRjICpjcnRjKQotewotCWludCBpID0gMCwgcmV0ID0gMDsKLQl1MzIgYWRfcHJvcDsK LQotCWZvciAoaSA9IDA7IGkgPCBjcnRjLT5udW1fbWl4ZXJzICYmICFyZXQ7IGkrKykgewotCQlp ZiAoIWNydGMtPm1peGVyc1tpXS5od19kc3BwKSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJY29u dGludWU7Ci0JCX0KLQkJc3dpdGNoIChwcm9wX25vZGUtPmZlYXR1cmUpIHsKLQkJY2FzZSBEUFVf Q1BfQ1JUQ19EU1BQX0FEX01PREU6Ci0JCQlhZF9wcm9wID0gQURfTU9ERTsKLQkJCWJyZWFrOwot CQljYXNlIERQVV9DUF9DUlRDX0RTUFBfQURfSU5JVDoKLQkJCWFkX3Byb3AgPSBBRF9JTklUOwot CQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9BRF9DRkc6Ci0JCQlhZF9wcm9wID0g QURfQ0ZHOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBVX0NQX0NSVENfRFNQUF9BRF9JTlBVVDoKLQkJ CWFkX3Byb3AgPSBBRF9JTlBVVDsKLQkJCWJyZWFrOwotCQljYXNlIERQVV9DUF9DUlRDX0RTUFBf QURfQVNTRVJUSVZFTkVTUzoKLQkJCWFkX3Byb3AgPSBBRF9BU1NFUlRJVkU7Ci0JCQlicmVhazsK LQkJY2FzZSBEUFVfQ1BfQ1JUQ19EU1BQX0FEX0JBQ0tMSUdIVDoKLQkJCWFkX3Byb3AgPSBBRF9C QUNLTElHSFQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIE5vdCBhbiBBRCBwcm9wZXJ0 eSAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaWYgKCFjcnRjLT5taXhlcnNbaV0uaHdfZHNwcC0+ b3BzLnZhbGlkYXRlX2FkKQotCQkJcmV0ID0gLUVJTlZBTDsKLQkJZWxzZQotCQkJcmV0ID0gY3J0 Yy0+bWl4ZXJzW2ldLmh3X2RzcHAtPm9wcy52YWxpZGF0ZV9hZCgKLQkJCQljcnRjLT5taXhlcnNb aV0uaHdfZHNwcCwgJmFkX3Byb3ApOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9p ZCBkcHVfY3BfYWRfaW50ZXJydXB0X2NiKHZvaWQgKmFyZywgaW50IGlycV9pZHgpCi17Ci0Jc3Ry dWN0IGRwdV9jcnRjICpjcnRjID0gYXJnOwotCi0JZHB1X2NydGNfZXZlbnRfcXVldWUoJmNydGMt PmJhc2UsIGRwdV9jcF9ub3RpZnlfYWRfZXZlbnQsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBk cHVfY3Bfbm90aWZ5X2FkX2V2ZW50KHN0cnVjdCBkcm1fY3J0YyAqY3J0Y19kcm0sIHZvaWQgKmFy ZykKLXsKLQl1aW50MzJfdCBibCA9IDA7Ci0Jc3RydWN0IGRwdV9od19taXhlciAqaHdfbG0gPSBO VUxMOwotCXN0cnVjdCBkcHVfaHdfZHNwcCAqaHdfZHNwcCA9IE5VTEw7Ci0JdTMyIG51bV9taXhl cnM7Ci0Jc3RydWN0IGRwdV9jcnRjICpjcnRjOwotCXN0cnVjdCBkcm1fZXZlbnQgZXZlbnQ7Ci0J aW50IGk7Ci0KLQljcnRjID0gdG9fZHB1X2NydGMoY3J0Y19kcm0pOwotCW51bV9taXhlcnMgPSBj cnRjLT5udW1fbWl4ZXJzOwotCWlmICghbnVtX21peGVycykKLQkJcmV0dXJuOwotCi0JZm9yIChp ID0gMDsgaSA8IG51bV9taXhlcnM7IGkrKykgewotCQlod19sbSA9IGNydGMtPm1peGVyc1tpXS5o d19sbTsKLQkJaHdfZHNwcCA9IGNydGMtPm1peGVyc1tpXS5od19kc3BwOwotCQlpZiAoIWh3X2xt LT5jZmcucmlnaHRfbWl4ZXIpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoIWh3X2RzcHApCi0JCXJl dHVybjsKLQotCWh3X2RzcHAtPm9wcy5hZF9yZWFkX2ludHJfcmVzcChod19kc3BwLCBBRDRfQkFD S0xJR0hULCAmYmwpOwotCWV2ZW50Lmxlbmd0aCA9IHNpemVvZih1MzIpOwotCWV2ZW50LnR5cGUg PSBEUk1fRVZFTlRfQURfQkFDS0xJR0hUOwotCW1zbV9tb2RlX29iamVjdF9ldmVudF9ub3RpZnko JmNydGNfZHJtLT5iYXNlLCBjcnRjX2RybS0+ZGV2LAotCQkJJmV2ZW50LCAodTggKikmYmwpOwot fQotCi1pbnQgZHB1X2NwX2FkX2ludGVycnVwdChzdHJ1Y3QgZHJtX2NydGMgKmNydGNfZHJtLCBi b29sIGVuLAotCXN0cnVjdCBkcHVfaXJxX2NhbGxiYWNrICphZF9pcnEpCi17Ci0Jc3RydWN0IGRw dV9rbXMgKmttcyA9IE5VTEw7Ci0JdTMyIG51bV9taXhlcnM7Ci0Jc3RydWN0IGRwdV9od19taXhl ciAqaHdfbG07Ci0Jc3RydWN0IGRwdV9od19kc3BwICpod19kc3BwID0gTlVMTDsKLQlzdHJ1Y3Qg ZHB1X2NydGMgKmNydGM7Ci0JaW50IGk7Ci0JaW50IGlycV9pZHgsIHJldDsKLQlzdHJ1Y3QgZHB1 X2NwX25vZGUgcHJvcF9ub2RlOwotCi0JaWYgKCFjcnRjX2RybSB8fCAhYWRfaXJxKSB7Ci0JCURS TV9FUlJPUigiaW52YWxpZCBjcnRjICVwSyBpcnEgJXBLXG4iLCBjcnRjX2RybSwgYWRfaXJxKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY3J0YyA9IHRvX2RwdV9jcnRjKGNydGNfZHJtKTsK LQlpZiAoIWNydGMpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGRwdV9jcnRjICVwS1xuIiwgY3J0 Yyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWttcyA9IGdldF9rbXMoY3J0Y19kcm0pOwot CW51bV9taXhlcnMgPSBjcnRjLT5udW1fbWl4ZXJzOwotCi0JbWVtc2V0KCZwcm9wX25vZGUsIDAs IHNpemVvZihwcm9wX25vZGUpKTsKLQlwcm9wX25vZGUuZmVhdHVyZSA9IERQVV9DUF9DUlRDX0RT UFBfQURfQkFDS0xJR0hUOwotCXJldCA9IGRwdV9jcF9hZF92YWxpZGF0ZV9wcm9wKCZwcm9wX25v ZGUsIGNydGMpOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJBZCBub3Qgc3VwcG9ydGVkIHJl dCAlZFxuIiwgcmV0KTsKLQkJZ290byBleGl0OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBudW1f bWl4ZXJzOyBpKyspIHsKLQkJaHdfbG0gPSBjcnRjLT5taXhlcnNbaV0uaHdfbG07Ci0JCWh3X2Rz cHAgPSBjcnRjLT5taXhlcnNbaV0uaHdfZHNwcDsKLQkJaWYgKCFod19sbS0+Y2ZnLnJpZ2h0X21p eGVyKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCFod19kc3BwKSB7Ci0JCURSTV9FUlJPUigiaW52 YWxpZCBkc3BwXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQotCWly cV9pZHggPSBkcHVfY29yZV9pcnFfaWR4X2xvb2t1cChrbXMsIERQVV9JUlFfVFlQRV9BRDRfQkxf RE9ORSwKLQkJCWh3X2RzcHAtPmlkeCk7Ci0JaWYgKGlycV9pZHggPCAwKSB7Ci0JCURSTV9FUlJP UigiZmFpbGVkIHRvIGdldCB0aGUgaXJxIGlkeCByZXQgJWRcbiIsIGlycV9pZHgpOwotCQlyZXQg PSBpcnFfaWR4OwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKCFlbikgewotCQlkcHVfY29yZV9p cnFfZGlzYWJsZShrbXMsICZpcnFfaWR4LCAxKTsKLQkJZHB1X2NvcmVfaXJxX3VucmVnaXN0ZXJf Y2FsbGJhY2soa21zLCBpcnFfaWR4LCBhZF9pcnEpOwotCQlyZXQgPSAwOwotCQlnb3RvIGV4aXQ7 Ci0JfQotCi0JYWRfaXJxLT5hcmcgPSBjcnRjOwotCWFkX2lycS0+ZnVuYyA9IGRwdV9jcF9hZF9p bnRlcnJ1cHRfY2I7Ci0JcmV0ID0gZHB1X2NvcmVfaXJxX3JlZ2lzdGVyX2NhbGxiYWNrKGttcywg aXJxX2lkeCwgYWRfaXJxKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIHJl Z2lzdGVyIHRoZSBjYWxsYmFjayByZXQgJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0J cmV0ID0gZHB1X2NvcmVfaXJxX2VuYWJsZShrbXMsICZpcnFfaWR4LCAxKTsKLQlpZiAocmV0KSB7 Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGVuYWJsZSBpcnEgcmV0ICVkXG4iLCByZXQpOwotCQlk cHVfY29yZV9pcnFfdW5yZWdpc3Rlcl9jYWxsYmFjayhrbXMsIGlycV9pZHgsIGFkX2lycSk7Ci0J fQotZXhpdDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBkcHVfY3BfYWRfc2V0X3By b3Aoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YywKLQkJZW51bSBhZF9wcm9wZXJ0eSBhZF9wcm9w KQotewotCXN0cnVjdCBkcHVfYWRfaHdfY2ZnIGFkX2NmZzsKLQlzdHJ1Y3QgZHB1X2h3X2NwX2Nm ZyBod19jZmc7Ci0Jc3RydWN0IGRwdV9od19kc3BwICpod19kc3BwID0gTlVMTDsKLQlzdHJ1Y3Qg ZHB1X2h3X21peGVyICpod19sbSA9IE5VTEw7Ci0JdTMyIG51bV9taXhlcnMgPSBkcHVfY3J0Yy0+ bnVtX21peGVyczsKLQlpbnQgaSA9IDAsIHJldCA9IDA7Ci0KLQlod19jZmcubnVtX29mX21peGVy cyA9IGRwdV9jcnRjLT5udW1fbWl4ZXJzOwotCWh3X2NmZy5kaXNwbGF5aCA9IGRwdV9jcnRjLT5i YXNlLm1vZGUuaGRpc3BsYXk7Ci0JaHdfY2ZnLmRpc3BsYXl2ID0gZHB1X2NydGMtPmJhc2UubW9k ZS52ZGlzcGxheTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fbWl4ZXJzICYmICFyZXQ7IGkrKykg ewotCQlod19sbSA9IGRwdV9jcnRjLT5taXhlcnNbaV0uaHdfbG07Ci0JCWh3X2RzcHAgPSBkcHVf Y3J0Yy0+bWl4ZXJzW2ldLmh3X2RzcHA7Ci0JCWlmICghaHdfbG0gfHwgIWh3X2RzcHAgfHwgIWh3 X2RzcHAtPm9wcy52YWxpZGF0ZV9hZCB8fAotCQkJCSFod19kc3BwLT5vcHMuc2V0dXBfYWQpIHsK LQkJCXJldCA9IC1FSU5WQUw7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWh3X2NmZy5taXhlcl9p bmZvID0gaHdfbG07Ci0JCWFkX2NmZy5wcm9wID0gYWRfcHJvcDsKLQkJYWRfY2ZnLmh3X2NmZyA9 ICZod19jZmc7Ci0JCXJldCA9IGh3X2RzcHAtPm9wcy52YWxpZGF0ZV9hZChod19kc3BwLCAodTMy ICopJmFkX3Byb3ApOwotCQlpZiAoIXJldCkKLQkJCWh3X2RzcHAtPm9wcy5zZXR1cF9hZChod19k c3BwLCAmYWRfY2ZnKTsKLQl9Ci19Ci0KLXZvaWQgZHB1X2NwX2NydGNfcHJlX2lwYyhzdHJ1Y3Qg ZHJtX2NydGMgKmRybV9jcnRjKQotewotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Ci0KLQlk cHVfY3J0YyA9IHRvX2RwdV9jcnRjKGRybV9jcnRjKTsKLQlpZiAoIWRwdV9jcnRjKSB7Ci0JCURS TV9FUlJPUigiaW52YWxpZCBkcHVfY3J0YyAlcEtcbiIsIGRwdV9jcnRjKTsKLQkJcmV0dXJuOwot CX0KLQotCWRwdV9jcF9hZF9zZXRfcHJvcChkcHVfY3J0YywgQURfSVBDX1NVU1BFTkQpOwotfQot Ci12b2lkIGRwdV9jcF9jcnRjX3Bvc3RfaXBjKHN0cnVjdCBkcm1fY3J0YyAqZHJtX2NydGMpCi17 Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMo ZHJtX2NydGMpOwotCWlmICghZHB1X2NydGMpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGRwdV9j cnRjICVwS1xuIiwgZHB1X2NydGMpOwotCQlyZXR1cm47Ci0JfQotCi0JZHB1X2NwX2FkX3NldF9w cm9wKGRwdV9jcnRjLCBBRF9JUENfUkVTVU1FKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb2xvcl9wcm9jZXNzaW5nLmggYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29sb3JfcHJvY2Vzc2luZy5oCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwZmE1NDZjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9jb2xvcl9wcm9jZXNzaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAg KzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQK LSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RQ VV9DT0xPUl9QUk9DRVNTSU5HX0gKLSNkZWZpbmUgX0RQVV9DT0xPUl9QUk9DRVNTSU5HX0gKLSNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KLQotc3RydWN0IGRwdV9pcnFfY2FsbGJhY2s7Ci0KLS8q Ci0gKiBQQSBNRU1PUlkgQ09MT1IgdHlwZXMKLSAqIEBNRU1DT0xPUl9TS0lOICAgICAgICAgIFNr aW4gbWVtb3J5IGNvbG9yIHR5cGUKLSAqIEBNRU1DT0xPUl9TS1kgICAgICAgICAgIFNreSBtZW1v cnkgY29sb3IgdHlwZQotICogQE1FTUNPTE9SX0ZPTElBR0UgICAgICAgRm9saWFnZSBtZW1vcnkg Y29sb3IgdHlwZQotICovCi1lbnVtIGRwdV9tZW1jb2xvcl90eXBlIHsKLQlNRU1DT0xPUl9TS0lO ID0gMCwKLQlNRU1DT0xPUl9TS1ksCi0JTUVNQ09MT1JfRk9MSUFHRQotfTsKLQotLyoqCi0gKiBk cHVfY3BfY3J0Y19pbml0KCk6IEluaXRpYWxpemUgY29sb3IgcHJvY2Vzc2luZyBsaXN0cyBmb3Ig YSBjcnRjLgotICogICAgICAgICAgICAgICAgICAgICBTaG91bGQgYmUgY2FsbGVkIGR1cmluZyBj cnRjIGluaXRpYWxpemF0aW9uLgotICogQGNydGM6ICBQb2ludGVyIHRvIGRwdV9jcnRjLgotICov Ci12b2lkIGRwdV9jcF9jcnRjX2luaXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKLQotLyoqCi0g KiBkcHVfY3BfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoKTogSW5zdGFsbHMgdGhlIGNvbG9yIHBy b2Nlc3NpbmcKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzIGZv ciBhIGNydGMuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvdWxkIGJlIGNh bGxlZCBkdXJpbmcgY3J0YyBpbml0aWFsaXphdGlvbi4KLSAqIEBjcnRjOiAgUG9pbnRlciB0byBj cnRjLgotICovCi12b2lkIGRwdV9jcF9jcnRjX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJt X2NydGMgKmNydGMpOwotCi0vKioKLSAqIGRwdV9jcF9jcnRjX2Rlc3Ryb3lfcHJvcGVydGllczog RGVzdHJveXMgY29sb3IgcHJvY2Vzc2luZwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgZm9yIGEgY3J0Yy4KLSAqIHNob3VsZCBiZSBjYWxs ZWQgZHVyaW5nIGNydGMgZGUtaW5pdGlhbGl6YXRpb24uCi0gKiBAY3J0YzogIFBvaW50ZXIgdG8g Y3J0Yy4KLSAqLwotdm9pZCBkcHVfY3BfY3J0Y19kZXN0cm95X3Byb3BlcnRpZXMoc3RydWN0IGRy bV9jcnRjICpjcnRjKTsKLQotLyoqCi0gKiBkcHVfY3BfY3J0Y19zZXRfcHJvcGVydHk6IFNldCBh IGNvbG9yIHByb2Nlc3NpbmcgcHJvcGVydHkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmb3IgYSBjcnRjLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNob3VsZCBiZSBkdXJpbmcgYXRvbWljIHNldCBwcm9wZXJ0eS4KLSAqIEBjcnRjOiBQ b2ludGVyIHRvIGNydGMuCi0gKiBAcHJvcGVydHk6IFByb3BlcnR5IHRoYXQgbmVlZHMgdG8gZW5h YmxlZC9kaXNhYmxlZC4KLSAqIEB2YWw6IFZhbHVlIG9mIHByb3BlcnR5LgotICovCi1pbnQgZHB1 X2NwX2NydGNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQlzdHJ1Y3Qg ZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgdmFsKTsKLQotLyoqCi0gKiBkcHVfY3Bf Y3J0Y19hcHBseV9wcm9wZXJ0aWVzOiBFbmFibGUvZGlzYWJsZSBwcm9wZXJ0aWVzCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBjcnRjLgotICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgYXRvbWljIGNvbW1pdCBjYWxs LgotICogQGNydGM6IFBvaW50ZXIgdG8gY3J0Yy4KLSAqLwotdm9pZCBkcHVfY3BfY3J0Y19hcHBs eV9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLS8qKgotICogZHB1X2NwX2Ny dGNfZ2V0X3Byb3BlcnR5OiBHZXQgdmFsdWUgb2YgY29sb3IgcHJvY2Vzc2luZyBwcm9wZXJ0eQot ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIGNydGMuCi0gKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvdWxkIGJlIGR1cmluZyBhdG9t aWMgZ2V0IHByb3BlcnR5LgotICogQGNydGM6IFBvaW50ZXIgdG8gY3J0Yy4KLSAqIEBwcm9wZXJ0 eTogUHJvcGVydHkgdGhhdCBuZWVkcyB0byBlbmFibGVkL2Rpc2FibGVkLgotICogQHZhbDogVmFs dWUgb2YgcHJvcGVydHkuCi0gKgotICovCi1pbnQgZHB1X2NwX2NydGNfZ2V0X3Byb3BlcnR5KHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwg dWludDY0X3QgKnZhbCk7Ci0KLS8qKgotICogZHB1X2NwX2NydGNfc3VzcGVuZDogU3VzcGVuZCB0 aGUgY3J0YyBmZWF0dXJlcwotICogQGNydGM6IFBvaW50ZXIgdG8gY3J0Yy4KLSAqLwotdm9pZCBk cHVfY3BfY3J0Y19zdXNwZW5kKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLS8qKgotICogZHB1 X2NwX2NydGNfcmVzdW1lOiBSZXN1bWUgdGhlIGNydGMgZmVhdHVyZXMKLSAqIEBjcnRjOiBQb2lu dGVyIHRvIGNydGMuCi0gKi8KLXZvaWQgZHB1X2NwX2NydGNfcmVzdW1lKHN0cnVjdCBkcm1fY3J0 YyAqY3J0Yyk7Ci0KLS8qKgotICogZHB1X2NwX2FkX2ludGVycnVwdDogQXBpIHRvIGVuYWJsZS9k aXNhYmxlIGFkIGludGVycnVwdAotICogQGNydGM6IFBvaW50ZXIgdG8gY3J0Yy4KLSAqIEBlbjog VmFyaWFibGUgdG8gZW5hYmxlL2Rpc2FibGUgaW50ZXJydXB0LgotICogQGlycTogUG9pbnRlciB0 byBpcnEgY2FsbGJhY2sKLSAqLwotaW50IGRwdV9jcF9hZF9pbnRlcnJ1cHQoc3RydWN0IGRybV9j cnRjICpjcnRjLCBib29sIGVuLAotCQlzdHJ1Y3QgZHB1X2lycV9jYWxsYmFjayAqaXJxKTsKLQot LyoqCi0gKiBkcHVfY3BfY3J0Y19wcmVfaXBjOiBIYW5kbGUgY29sb3IgcHJvY2Vzc2luZyBmZWF0 dXJlcwotICogICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIGVudGVyaW5nIElQQwotICogQGNy dGM6IFBvaW50ZXIgdG8gY3J0Yy4KLSAqLwotdm9pZCBkcHVfY3BfY3J0Y19wcmVfaXBjKHN0cnVj dCBkcm1fY3J0YyAqY3J0Yyk7Ci0KLS8qKgotICogZHB1X2NwX2NydGNfcG9zdF9pcGM6IEhhbmRs ZSBjb2xvciBwcm9jZXNzaW5nIGZlYXR1cmVzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgYWZ0 ZXIgZXhpdGluZyBJUEMKLSAqIEBjcnRjOiBQb2ludGVyIHRvIGNydGMuCi0gKi8KLXZvaWQgZHB1 X2NwX2NydGNfcG9zdF9pcGMoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKLSNlbmRpZiAvKl9EUFVf Q09MT1JfUFJPQ0VTU0lOR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Ny dGMuYwppbmRleCA0ODkyMGIwNS4uZDQzOWE5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfY3J0Yy5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc29ydC5o PgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgot I2luY2x1ZGUgPHVhcGkvZHJtL2RwdV9kcm0uaD4KICNpbmNsdWRlIDxkcm0vZHJtX21vZGUuaD4K ICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVy Lmg+CkBAIC0zMSwxMyArMzAsMTggQEAKICNpbmNsdWRlICJkcHVfaHdfY3RsLmgiCiAjaW5jbHVk ZSAiZHB1X2NydGMuaCIKICNpbmNsdWRlICJkcHVfcGxhbmUuaCIKLSNpbmNsdWRlICJkcHVfY29s b3JfcHJvY2Vzc2luZy5oIgogI2luY2x1ZGUgImRwdV9lbmNvZGVyLmgiCiAjaW5jbHVkZSAiZHB1 X3ZiaWYuaCIKICNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCiAjaW5jbHVkZSAiZHB1X2Nv cmVfcGVyZi5oIgogI2luY2x1ZGUgImRwdV90cmFjZS5oIgogCisjZGVmaW5lIERQVV9EUk1fQkxF TkRfT1BfTk9UX0RFRklORUQgICAgMAorI2RlZmluZSBEUFVfRFJNX0JMRU5EX09QX09QQVFVRSAg ICAgICAgIDEKKyNkZWZpbmUgRFBVX0RSTV9CTEVORF9PUF9QUkVNVUxUSVBMSUVEICAyCisjZGVm aW5lIERQVV9EUk1fQkxFTkRfT1BfQ09WRVJBR0UgICAgICAgMworI2RlZmluZSBEUFVfRFJNX0JM RU5EX09QX01BWCAgICAgICAgICAgIDQKKwogLyogbGF5ZXIgbWl4ZXIgaW5kZXggb24gZHB1X2Ny dGMgKi8KICNkZWZpbmUgTEVGVF9NSVhFUiAwCiAjZGVmaW5lIFJJR0hUX01JWEVSIDEKQEAgLTU5 MCw3ICs1OTQsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKIAlpZiAoZHB1X2NydGMtPmJsb2JfaW5mbykKIAkJZHJtX3Byb3BlcnR5X2Jsb2Jf cHV0KGRwdV9jcnRjLT5ibG9iX2luZm8pOwogCW1zbV9wcm9wZXJ0eV9kZXN0cm95KCZkcHVfY3J0 Yy0+cHJvcGVydHlfaW5mbyk7Ci0JZHB1X2NwX2NydGNfZGVzdHJveV9wcm9wZXJ0aWVzKGNydGMp OwogCV9kcHVfY3J0Y19kZXN0cm95X2Rlc3Rfc2NhbGVyKGRwdV9jcnRjKTsKIAogCV9kcHVfY3J0 Y19kZWluaXRfZXZlbnRzKGRwdV9jcnRjKTsKQEAgLTYyNCwxNSArNjI3LDExIEBAIHN0YXRpYyB2 b2lkIF9kcHVfY3J0Y19zZXR1cF9ibGVuZF9jZmcoc3RydWN0IGRwdV9jcnRjX21peGVyICptaXhl ciwKIAlzdHJ1Y3QgZHB1X2h3X21peGVyICpsbSA9IG1peGVyLT5od19sbTsKIAogCS8qIGRlZmF1 bHQgdG8gb3BhcXVlIGJsZW5kaW5nICovCi0JZmdfYWxwaGEgPSBkcHVfcGxhbmVfZ2V0X3Byb3Bl cnR5KHBzdGF0ZSwgUExBTkVfUFJPUF9BTFBIQSk7CisJZmdfYWxwaGEgPSAwWEZGOwogCWJnX2Fs cGhhID0gMHhGRiAtIGZnX2FscGhhOwotCWJsZW5kX29wID0gRFBVX0JMRU5EX0ZHX0FMUEhBX0ZH X0NPTlNUIHwgRFBVX0JMRU5EX0JHX0FMUEhBX0JHX0NPTlNUOwotCWJsZW5kX3R5cGUgPSBkcHVf cGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwgUExBTkVfUFJPUF9CTEVORF9PUCk7Ci0KLQlEUFVf REVCVUcoImJsZW5kIHR5cGU6MHgleCBibGVuZCBhbHBoYToweCV4XG4iLCBibGVuZF90eXBlLCBm Z19hbHBoYSk7CisJYmxlbmRfdHlwZSA9IERQVV9EUk1fQkxFTkRfT1BfT1BBUVVFOwogCiAJc3dp dGNoIChibGVuZF90eXBlKSB7Ci0KIAljYXNlIERQVV9EUk1fQkxFTkRfT1BfT1BBUVVFOgogCQli bGVuZF9vcCA9IERQVV9CTEVORF9GR19BTFBIQV9GR19DT05TVCB8CiAJCQlEUFVfQkxFTkRfQkdf QUxQSEFfQkdfQ09OU1Q7CkBAIC0xODE0LDExICsxODEzLDEwIEBAIHN0YXRpYyB2b2lkIF9kcHVf Y3J0Y19zZXR1cF9taXhlcl9mb3JfZW5jb2RlcigKIAlzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm1p eGVyOwogCXN0cnVjdCBkcHVfaHdfY3RsICpsYXN0X3ZhbGlkX2N0bCA9IE5VTEw7CiAJaW50IGk7 Ci0Jc3RydWN0IGRwdV9ybV9od19pdGVyIGxtX2l0ZXIsIGN0bF9pdGVyLCBkc3BwX2l0ZXIsIGRz X2l0ZXI7CisJc3RydWN0IGRwdV9ybV9od19pdGVyIGxtX2l0ZXIsIGN0bF9pdGVyLCBkc19pdGVy OwogCiAJZHB1X3JtX2luaXRfaHdfaXRlcigmbG1faXRlciwgZW5jLT5iYXNlLmlkLCBEUFVfSFdf QkxLX0xNKTsKIAlkcHVfcm1faW5pdF9od19pdGVyKCZjdGxfaXRlciwgZW5jLT5iYXNlLmlkLCBE UFVfSFdfQkxLX0NUTCk7Ci0JZHB1X3JtX2luaXRfaHdfaXRlcigmZHNwcF9pdGVyLCBlbmMtPmJh c2UuaWQsIERQVV9IV19CTEtfRFNQUCk7CiAJZHB1X3JtX2luaXRfaHdfaXRlcigmZHNfaXRlciwg ZW5jLT5iYXNlLmlkLCBEUFVfSFdfQkxLX0RTKTsKIAogCS8qIFNldCB1cCBhbGwgdGhlIG1peGVy cyBhbmQgY3RscyByZXNlcnZlZCBieSB0aGlzIGVuY29kZXIgKi8KQEAgLTE4NDYsMTAgKzE4NDQs NiBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2VuY29kZXIoCiAJCQly ZXR1cm47CiAJCX0KIAotCQkvKiBEc3BwIG1heSBiZSBudWxsICovCi0JCSh2b2lkKSBkcHVfcm1f Z2V0X2h3KHJtLCAmZHNwcF9pdGVyKTsKLQkJbWl4ZXItPmh3X2RzcHAgPSAoc3RydWN0IGRwdV9o d19kc3BwICopZHNwcF9pdGVyLmh3OwotCiAJCS8qIERTIG1heSBiZSBudWxsICovCiAJCSh2b2lk KSBkcHVfcm1fZ2V0X2h3KHJtLCAmZHNfaXRlcik7CiAJCW1peGVyLT5od19kcyA9IChzdHJ1Y3Qg ZHB1X2h3X2RzICopZHNfaXRlci5odzsKQEAgLTE5ODIsMTcgKzE5NzYsNiBAQCBzdGF0aWMgdm9p ZCBkcHVfY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAogCV9kcHVfY3J0 Y19kZXN0X3NjYWxlcl9zZXR1cChjcnRjKTsKIAogCS8qCi0JICogU2luY2UgQ1AgcHJvcGVydGll cyB1c2UgQVhJIGJ1ZmZlciB0byBwcm9ncmFtIHRoZQotCSAqIEhXLCBjaGVjayBpZiBjb250ZXh0 IGJhbmsgaXMgaW4gYXR0YWNoZWQKLQkgKiBzdGF0ZSwKLQkgKiBhcHBseSBjb2xvciBwcm9jZXNz aW5nIHByb3BlcnRpZXMgb25seSBpZgotCSAqIHNtbXUgc3RhdGUgaXMgYXR0YWNoZWQsCi0JICov Ci0JaWYgKChzbW11X3N0YXRlLT5zdGF0ZSAhPSBERVRBQ0hFRCkgJiYKLQkJCShzbW11X3N0YXRl LT5zdGF0ZSAhPSBERVRBQ0hfQUxMX1JFUSkpCi0JCWRwdV9jcF9jcnRjX2FwcGx5X3Byb3BlcnRp ZXMoY3J0Yyk7Ci0KLQkvKgogCSAqIFBQX0RPTkUgaXJxIGlzIG9ubHkgdXNlZCBieSBjb21tYW5k IG1vZGUgZm9yIG5vdy4KIAkgKiBJdCBpcyBiZXR0ZXIgdG8gcmVxdWVzdCBwZW5kaW5nIGJlZm9y ZSBGTFVTSCBhbmQgU1RBUlQgdHJpZ2dlcgogCSAqIHRvIG1ha2Ugc3VyZSBubyBwcF9kb25lIGly cSBtaXNzZWQuCkBAIC0yNDI1LDcgKzI0MDgsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19oYW5k bGVfcG93ZXJfZXZlbnQodTMyIGV2ZW50X3R5cGUsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgZHJt X2NydGMgKmNydGMgPSBhcmc7CiAJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZTsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJc3RydWN0 IGRwdV9jcnRjX21peGVyICptOwogCXUzMiBpLCBtaXNyX3N0YXR1czsKQEAgLTI0NTAsOCArMjQz Miw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2hhbmRsZV9wb3dlcl9ldmVudCh1MzIgZXZlbnRf dHlwZSwgdm9pZCAqYXJnKQogCQkJZHB1X2VuY29kZXJfdmlydF9yZXN0b3JlKGVuY29kZXIpOwog CQl9CiAKLQkJZHB1X2NwX2NydGNfcG9zdF9pcGMoY3J0Yyk7Ci0KIAkJZm9yIChpID0gMDsgaSA8 IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyArK2kpIHsKIAkJCW0gPSAmZHB1X2NydGMtPm1peGVyc1tp XTsKIAkJCWlmICghbS0+aHdfbG0gfHwgIW0tPmh3X2xtLT5vcHMuc2V0dXBfbWlzciB8fApAQCAt MjQ3MywxOCArMjQ1MywxMiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19oYW5kbGVfcG93ZXJfZXZl bnQodTMyIGV2ZW50X3R5cGUsIHZvaWQgKmFyZykKIAkJCWRwdV9jcnRjLT5taXNyX2RhdGFbaV0g PSBtaXNyX3N0YXR1cyA/IG1pc3Jfc3RhdHVzIDoKIAkJCQkJCQlkcHVfY3J0Yy0+bWlzcl9kYXRh W2ldOwogCQl9Ci0KLQkJZHB1X2NwX2NydGNfcHJlX2lwYyhjcnRjKTsKIAkJYnJlYWs7CiAJY2Fz ZSBEUFVfUE9XRVJfRVZFTlRfUE9TVF9ESVNBQkxFOgotCQkvKgotCQkgKiBzZXQgcmV2YWxpZGF0 ZSBmbGFnIGluIHBsYW5lcywgc28gaXQgd2lsbCBiZSByZS1wcm9ncmFtbWVkCi0JCSAqIGluIHRo ZSBuZXh0IGZyYW1lIHVwZGF0ZQorCQkvKioKKwkJICogTm90aGluZyB0byBkby4gQWxsIHRoZSBw bGFuZXMgb24gdGhlIENSVEMgd2lsbCBiZQorCQkgKiBwcm9ncmFtbWVkIGZvciBldmVyeSBmcmFt ZQogCQkgKi8KLQkJZHJtX2F0b21pY19jcnRjX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBjcnRjKQot CQkJZHB1X3BsYW5lX3NldF9yZXZhbGlkYXRlKHBsYW5lLCB0cnVlKTsKLQotCQlkcHVfY3BfY3J0 Y19zdXNwZW5kKGNydGMpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUFVfREVCVUcoImV2ZW50 OiVkIG5vdCBoYW5kbGVkXG4iLCBldmVudF90eXBlKTsKQEAgLTI1MzEsNyArMjUwNSw2IEBAIHN0 YXRpYyB2b2lkIGRwdV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCS8qIHVw ZGF0ZSBjb2xvciBwcm9jZXNzaW5nIG9uIHN1c3BlbmQgKi8KIAlldmVudC50eXBlID0gRFJNX0VW RU5UX0NSVENfUE9XRVI7CiAJZXZlbnQubGVuZ3RoID0gc2l6ZW9mKHUzMik7Ci0JZHB1X2NwX2Ny dGNfc3VzcGVuZChjcnRjKTsKIAlwb3dlcl9vbiA9IDA7CiAJbXNtX21vZGVfb2JqZWN0X2V2ZW50 X25vdGlmeSgmY3J0Yy0+YmFzZSwgY3J0Yy0+ZGV2LCAmZXZlbnQsCiAJCQkodTggKikmcG93ZXJf b24pOwpAQCAtMjYzNSw3ICsyNjA4LDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZW5hYmxlKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkvKiB1cGRhdGUgY29sb3IgcHJvY2Vzc2luZyBvbiByZXN1 bWUgKi8KIAlldmVudC50eXBlID0gRFJNX0VWRU5UX0NSVENfUE9XRVI7CiAJZXZlbnQubGVuZ3Ro ID0gc2l6ZW9mKHUzMik7Ci0JZHB1X2NwX2NydGNfcmVzdW1lKGNydGMpOwogCXBvd2VyX29uID0g MTsKIAltc21fbW9kZV9vYmplY3RfZXZlbnRfbm90aWZ5KCZjcnRjLT5iYXNlLCBjcnRjLT5kZXYs ICZldmVudCwKIAkJCSh1OCAqKSZwb3dlcl9vbik7CkBAIC0yNjc3LDgyICsyNjQ5LDYgQEAgc3Rh dGljIGludCBwc3RhdGVfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAJcmV0dXJu IHJjOwogfQogCi1zdGF0aWMgaW50IF9kcHVfY3J0Y19leGNsX3JlY3Rfb3ZlcmxhcF9jaGVjayhz dHJ1Y3QgcGxhbmVfc3RhdGUgcHN0YXRlc1tdLAotCWludCBjbnQsIGludCBjdXJyX2NudCwgc3Ry dWN0IGRwdV9yZWN0ICpleGNsX3JlY3QsIGludCB6X3BvcykKLXsKLQlzdHJ1Y3QgZHB1X3JlY3Qg ZHN0X3JlY3QsIGludGVyc2VjdDsKLQlpbnQgaSwgcmMgPSAtRUlOVkFMOwotCWNvbnN0IHN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQotCS8qIHN0YXJ0IGNoZWNraW5nIGZyb20gbmV4 dCBwbGFuZSAqLwotCWZvciAoaSA9IGN1cnJfY250OyBpIDwgY250OyBpKyspIHsKLQkJcHN0YXRl ID0gcHN0YXRlc1tpXS5kcm1fcHN0YXRlOwotCQlQT1BVTEFURV9SRUNUKCZkc3RfcmVjdCwgcHN0 YXRlLT5jcnRjX3gsIHBzdGF0ZS0+Y3J0Y195LAotCQkJCXBzdGF0ZS0+Y3J0Y193LCBwc3RhdGUt PmNydGNfaCwgZmFsc2UpOwotCQlkcHVfa21zX3JlY3RfaW50ZXJzZWN0KCZkc3RfcmVjdCwgZXhj bF9yZWN0LCAmaW50ZXJzZWN0KTsKLQotCQlpZiAoaW50ZXJzZWN0LncgPT0gZXhjbF9yZWN0LT53 ICYmIGludGVyc2VjdC5oID09IGV4Y2xfcmVjdC0+aAotCQkJCS8qIG5leHQgcGxhbmUgbWF5IGJl IG9uIHNhbWUgei1vcmRlciAqLwotCQkJCSYmIHpfcG9zICE9IHBzdGF0ZXNbaV0uc3RhZ2UpIHsK LQkJCXJjID0gMDsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JfQotCi0JRFBVX0VSUk9SKCJleGNsIHJl Y3QgZG9lcyBub3QgZmluZCB0b3Agb3ZlcmxhcHBpbmcgcmVjdFxuIik7Ci1lbmQ6Ci0JcmV0dXJu IHJjOwotfQotCi0vKiBubyBpbnB1dCB2YWxpZGF0aW9uIC0gY2FsbGVyIEFQSSBoYXMgYWxsIHRo ZSBjaGVja3MgKi8KLXN0YXRpYyBpbnQgX2RwdV9jcnRjX2V4Y2xfZGltX2xheWVyX2NoZWNrKHN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCi0JCXN0cnVjdCBwbGFuZV9zdGF0ZSBwc3RhdGVz W10sIGludCBjbnQpCi17Ci0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGUgPSB0b19kcHVf Y3J0Y19zdGF0ZShzdGF0ZSk7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmc3Rh dGUtPmFkanVzdGVkX21vZGU7Ci0JY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRl OwotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKmRwdV9wc3RhdGU7Ci0JaW50IHJjID0gMCwgaTsK LQotCS8qIENoZWNrIGRpbSBsYXllciByZWN0IGJvdW5kcyBhbmQgc3RhZ2UgKi8KLQlmb3IgKGkg PSAwOyBpIDwgY3N0YXRlLT5udW1fZGltX2xheWVyczsgaSsrKSB7Ci0JCWlmICgoQ0hFQ0tfTEFZ RVJfQk9VTkRTKGNzdGF0ZS0+ZGltX2xheWVyW2ldLnJlY3QueSwKLQkJCWNzdGF0ZS0+ZGltX2xh eWVyW2ldLnJlY3QuaCwgbW9kZS0+dmRpc3BsYXkpKSB8fAotCQkgICAgKENIRUNLX0xBWUVSX0JP VU5EUyhjc3RhdGUtPmRpbV9sYXllcltpXS5yZWN0LngsCi0JCQljc3RhdGUtPmRpbV9sYXllcltp XS5yZWN0LncsIG1vZGUtPmhkaXNwbGF5KSkgfHwKLQkJICAgIChjc3RhdGUtPmRpbV9sYXllcltp XS5zdGFnZSA+PSBEUFVfU1RBR0VfTUFYKSB8fAotCQkgICAgKCFjc3RhdGUtPmRpbV9sYXllcltp XS5yZWN0LncpIHx8Ci0JCSAgICAoIWNzdGF0ZS0+ZGltX2xheWVyW2ldLnJlY3QuaCkpIHsKLQkJ CURQVV9FUlJPUigiaW52YWxpZCBkaW1fbGF5ZXI6eyVkLCVkLCVkLCVkfSwgc3RhZ2U6JWRcbiIs Ci0JCQkJCWNzdGF0ZS0+ZGltX2xheWVyW2ldLnJlY3QueCwKLQkJCQkJY3N0YXRlLT5kaW1fbGF5 ZXJbaV0ucmVjdC55LAotCQkJCQljc3RhdGUtPmRpbV9sYXllcltpXS5yZWN0LncsCi0JCQkJCWNz dGF0ZS0+ZGltX2xheWVyW2ldLnJlY3QuaCwKLQkJCQkJY3N0YXRlLT5kaW1fbGF5ZXJbaV0uc3Rh Z2UpOwotCQkJRFBVX0VSUk9SKCJkaXNwbGF5OiAlZHglZFxuIiwgbW9kZS0+aGRpc3BsYXksCi0J CQkJCW1vZGUtPnZkaXNwbGF5KTsKLQkJCXJjID0gLUUyQklHOwotCQkJZ290byBlbmQ7Ci0JCX0K LQl9Ci0KLQkvKiB0aGlzIGlzIHRyYXZlcnNpbmcgb24gc29ydGVkIHotb3JkZXIgcHN0YXRlcyAq LwotCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQlwc3RhdGUgPSBwc3RhdGVzW2ldLmRy bV9wc3RhdGU7Ci0JCWRwdV9wc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUocHN0YXRlKTsKLQkJ aWYgKGRwdV9wc3RhdGUtPmV4Y2xfcmVjdC53ICYmIGRwdV9wc3RhdGUtPmV4Y2xfcmVjdC5oKSB7 Ci0JCQkvKiBjaGVjayBvdmVybGFwIG9uIGFsbCB0b3Agei1vcmRlciAqLwotCQkJcmMgPSBfZHB1 X2NydGNfZXhjbF9yZWN0X292ZXJsYXBfY2hlY2socHN0YXRlcywgY250LAotCQkJICAgICBpICsg MSwgJmRwdV9wc3RhdGUtPmV4Y2xfcmVjdCwgcHN0YXRlc1tpXS5zdGFnZSk7Ci0JCQlpZiAocmMp Ci0JCQkJZ290byBlbmQ7Ci0JCX0KLQl9Ci0KLWVuZDoKLQlyZXR1cm4gcmM7Ci19Ci0KIHN0YXRp YyBpbnQgZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKIHsKQEAgLTI4NzgsMTAgKzI3NzQsNiBAQCBzdGF0 aWMgaW50IGRwdV9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJLyog YXNzaWduIG1peGVyIHN0YWdlcyBiYXNlZCBvbiBzb3J0ZWQgenBvcyBwcm9wZXJ0eSAqLwogCXNv cnQocHN0YXRlcywgY250LCBzaXplb2YocHN0YXRlc1swXSksIHBzdGF0ZV9jbXAsIE5VTEwpOwog Ci0JcmMgPSBfZHB1X2NydGNfZXhjbF9kaW1fbGF5ZXJfY2hlY2soc3RhdGUsIHBzdGF0ZXMsIGNu dCk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQogCWlmICghZHB1X2lzX2N1c3RvbV9jbGllbnQo KSkgewogCQlpbnQgc3RhZ2Vfb2xkID0gcHN0YXRlc1swXS5zdGFnZTsKIApAQCAtMzMwMSwxMSAr MzE5Myw4IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlyZXQgPSBk cHVfY3BfY3J0Y19zZXRfcHJvcGVydHkoY3J0YywKLQkJCQkJcHJvcGVydHksIHZhbCk7Ci0JCX0K LQkJaWYgKHJldCkKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldCB0aGUgcHJvcGVydHlcbiIp OworCQl9CiAKIAkJRFBVX0RFQlVHKCJjcnRjJWQgJXNbJWRdIDw9IDB4JWxseCByZXQ9JWRcbiIs IGNydGMtPmJhc2UuaWQsCiAJCQkJcHJvcGVydHktPm5hbWUsIHByb3BlcnR5LT5iYXNlLmlkLCB2 YWwsIHJldCk7CkBAIC0zMzcwLDkgKzMyNTksNiBAQCBzdGF0aWMgaW50IGRwdV9jcnRjX2F0b21p Y19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCSZjc3RhdGUtPnByb3Bl cnR5X3N0YXRlLAogCQkJCXByb3BlcnR5LCB2YWwpOwogCQlpZiAocmV0KQotCQkJcmV0ID0gZHB1 X2NwX2NydGNfZ2V0X3Byb3BlcnR5KGNydGMsCi0JCQkJcHJvcGVydHksIHZhbCk7Ci0JCWlmIChy ZXQpCiAJCQlEUk1fRVJST1IoImdldCBwcm9wZXJ0eSBmYWlsZWRcbiIpOwogCX0KIAlyZXR1cm4g cmV0OwpAQCAtMzQ4NywxMCArMzM3Myw2IEBAIHN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2ZzX3N0YXR1 c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKIAkJc2VxX3ByaW50ZihzLCAi XHRtdWx0aXJlY3Q6IG1vZGU6ICVkIGluZGV4OiAlZFxuIiwKIAkJCXBzdGF0ZS0+bXVsdGlyZWN0 X21vZGUsIHBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4KTsKIAotCQlzZXFfcHJpbnRmKHMsICJcdGV4 Y2xfcmVjdDogeDolNGQgeTolNGQgdzolNGQgaDolNGRcbiIsCi0JCQlwc3RhdGUtPmV4Y2xfcmVj dC54LCBwc3RhdGUtPmV4Y2xfcmVjdC55LAotCQkJcHN0YXRlLT5leGNsX3JlY3QudywgcHN0YXRl LT5leGNsX3JlY3QuaCk7Ci0KIAkJc2VxX3B1dHMocywgIlxuIik7CiAJfQogCWlmIChkcHVfY3J0 Yy0+dmJsYW5rX2NiX2NvdW50KSB7CkBAIC0zOTM0LDEwICszODE2LDYgQEAgc3RydWN0IGRybV9j cnRjICpkcHVfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lKQogCS8qIEluaXQgZGVzdCBzY2FsZXIgKi8KIAlfZHB1X2NydGNfZGVzdF9zY2Fs ZXJfaW5pdChkcHVfY3J0Yywga21zLT5jYXRhbG9nKTsKIAotCS8qIEluc3RhbGwgY29sb3IgcHJv Y2Vzc2luZyBwcm9wZXJ0aWVzICovCi0JZHB1X2NwX2NydGNfaW5pdChjcnRjKTsKLQlkcHVfY3Bf Y3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoY3J0Yyk7Ci0KIAlEUFVfREVCVUcoIiVzOiBzdWNjZXNz ZnVsbHkgaW5pdGlhbGl6ZWQgY3J0Y1xuIiwgZHB1X2NydGMtPm5hbWUpOwogCXJldHVybiBjcnRj OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu aCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKaW5kZXggOTMwNDA1 OC4uNWYzODBiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2NydGMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCkBA IC0yMCw2ICsyMCw3IEBACiAjZGVmaW5lIF9EUFVfQ1JUQ19IXwogCiAjaW5jbHVkZSA8bGludXgv a3RocmVhZC5oPgorI2luY2x1ZGUgPHVhcGkvZHJtL2RwdV9kcm0uaD4KICNpbmNsdWRlIDxkcm0v ZHJtX2NydGMuaD4KICNpbmNsdWRlICJtc21fcHJvcC5oIgogI2luY2x1ZGUgImRwdV9rbXMuaCIK QEAgLTg2LDcgKzg3LDYgQEAgc3RydWN0IGRwdV9jcnRjX3NtbXVfc3RhdGVfZGF0YSB7CiAgKiBz dHJ1Y3QgZHB1X2NydGNfbWl4ZXI6IHN0b3JlcyB0aGUgbWFwIGZvciBlYWNoIHZpcnR1YWwgcGlw ZWxpbmUgaW4gdGhlIENSVEMKICAqIEBod19sbToJTE0gSFcgRHJpdmVyIGNvbnRleHQKICAqIEBo d19jdGw6CUNUTCBQYXRoIEhXIGRyaXZlciBjb250ZXh0Ci0gKiBAaHdfZHNwcDoJRFNQUCBIVyBk cml2ZXIgY29udGV4dAogICogQGh3X2RzOglEUyBIVyBkcml2ZXIgY29udGV4dAogICogQGVuY29k ZXI6CUVuY29kZXIgYXR0YWNoZWQgdG8gdGhpcyBsbSAmIGN0bAogICogQG1peGVyX29wX21vZGU6 CW1peGVyIGJsZW5kaW5nIG9wZXJhdGlvbiBtb2RlCkBAIC05NSw3ICs5NSw2IEBAIHN0cnVjdCBk cHVfY3J0Y19zbW11X3N0YXRlX2RhdGEgewogc3RydWN0IGRwdV9jcnRjX21peGVyIHsKIAlzdHJ1 Y3QgZHB1X2h3X21peGVyICpod19sbTsKIAlzdHJ1Y3QgZHB1X2h3X2N0bCAqaHdfY3RsOwotCXN0 cnVjdCBkcHVfaHdfZHNwcCAqaHdfZHNwcDsKIAlzdHJ1Y3QgZHB1X2h3X2RzICpod19kczsKIAlz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJdTMyIG1peGVyX29wX21vZGU7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwppbmRleCA0Mzg2MzYwLi43N2Qz NTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl ci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKQEAg LTE3NDgsOCArMTc0OCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9raWNrb2ZmX3BoeXMo c3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMpCiAKIAkJaWYgKHBoeXMtPnNwbGl0X3Jv bGUgIT0gRU5DX1JPTEVfU0xBVkUpCiAJCQlzZXRfYml0KGksIGRwdV9lbmMtPmZyYW1lX2J1c3lf bWFzayk7Ci0JCWlmIChwaHlzLT5od19jdGwtPm9wcy5yZWdfZG1hX2ZsdXNoKQotCQkJcGh5cy0+ aHdfY3RsLT5vcHMucmVnX2RtYV9mbHVzaChwaHlzLT5od19jdGwpOwogCQlpZiAoIXBoeXMtPm9w cy5uZWVkc19zaW5nbGVfZmx1c2ggfHwKIAkJCQkhcGh5cy0+b3BzLm5lZWRzX3NpbmdsZV9mbHVz aChwaHlzKSkKIAkJCV9kcHVfZW5jb2Rlcl90cmlnZ2VyX2ZsdXNoKCZkcHVfZW5jLT5iYXNlLCBw aHlzLCAweDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2VuY29kZXJfcGh5c193Yi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Vu Y29kZXJfcGh5c193Yi5jCmluZGV4IDNiMTIxMmIuLmQyZTljZDkgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfd2IuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3diLmMKQEAgLTEzLDcg KzEzLDYgQEAKIAogI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybTolczolZF0gIiBmbXQsIF9fZnVu Y19fLCBfX0xJTkVfXwogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDx1YXBp L2RybS9kcHVfZHJtLmg+CiAKICNpbmNsdWRlICJkcHVfZW5jb2Rlcl9waHlzLmgiCiAjaW5jbHVk ZSAiZHB1X2Zvcm1hdHMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19hZDQuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19h ZDQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y4MWM5YS4uMDAwMDAwMAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfYWQ0LmMKKysrIC9kZXYvbnVs bApAQCAtMSwxNDQzICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0g KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaW5j bHVkZSA8ZHJtL21zbV9kcm1fcHAuaD4KLSNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgotI2lu Y2x1ZGUgImRwdV9od191dGlsLmgiCi0jaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRl ICJkcHVfaHdfbG0uaCIKLSNpbmNsdWRlICJkcHVfYWQ0LmgiCi0KLSNkZWZpbmUgQURfU1RBVEVf UkVBRFkoeCkgKCh4KSA9PSAoYWQ0X2luaXQgfCBhZDRfY2ZnIHwgYWQ0X21vZGUgfCBhZDRfaW5w dXQpKQotI2RlZmluZSBNRVJHRV9XSURUSF9SSUdIVCA2Ci0jZGVmaW5lIE1FUkdFX1dJRFRIX0xF RlQgNQotI2RlZmluZSBBRF9JUENfRlJBTUVfQ09VTlQgMgotCi1lbnVtIGFkNF9vcHNfYml0bWFz ayB7Ci0JYWQ0X2luaXQgPSBCSVQoQURfSU5JVCksCi0JYWQ0X2NmZyA9IEJJVChBRF9DRkcpLAot CWFkNF9tb2RlID0gQklUKEFEX01PREUpLAotCWFkNF9pbnB1dCA9IEJJVChBRF9JTlBVVCksCi0J YWQ0X29wc19tYXggPSBCSVQoMzEpLAotfTsKLQotZW51bSBhZDRfc3RhdGUgewotCWFkNF9zdGF0 ZV9pZGxlLAotCWFkNF9zdGF0ZV9zdGFydHVwLAotCWFkNF9zdGF0ZV9ydW4sCi0JLyogaWRsZSBw b3dlciBjb2xsYXBzZSBzdXNwZW5kIHN0YXRlICovCi0JYWQ0X3N0YXRlX2lwY3MsCi0JLyogaWRs ZSBwb3dlciBjb2xsYXBzZSByZXN1bWUgc3RhdGUgKi8KLQlhZDRfc3RhdGVfaXBjciwKLQlhZDRf c3RhdGVfbWF4LAotfTsKLQotdHlwZWRlZiBpbnQgKCphZDRfcHJvcF9zZXR1cCkoc3RydWN0IGRw dV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqYWQpOwotCi1zdGF0aWMg aW50IGFkNF9wYXJhbXNfY2hlY2soc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3Qg ZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLQotc3RhdGljIGludCBhZDRfbm9fb3Bfc2V0dXAoc3RydWN0 IGRwdV9od19kc3BwICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBp bnQgYWQ0X3NldHVwX2RlYnVnKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwgc3RydWN0IGRwdV9h ZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9tb2RlX3NldHVwKHN0cnVjdCBkcHVfaHdf ZHNwcCAqZHNwcCwgZW51bSBhZDRfbW9kZXMgbW9kZSk7Ci1zdGF0aWMgaW50IGFkNF9tb2RlX3Nl dHVwX2NvbW1vbihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdf Y2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRfaW5pdF9zZXR1cChzdHJ1Y3QgZHB1X2h3X2RzcHAg KmRzcHAsIHN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRfaW5pdF9z ZXR1cF9pZGxlKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19j ZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9pbml0X3NldHVwX3J1bihzdHJ1Y3QgZHB1X2h3X2Rz cHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRf aW5pdF9zZXR1cF9pcGNyKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9h ZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9jZmdfc2V0dXAoc3RydWN0IGRwdV9od19k c3BwICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2Nm Z19zZXR1cF9pZGxlKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9o d19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9jZmdfc2V0dXBfcnVuKHN0cnVjdCBkcHVfaHdf ZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFk NF9jZmdfc2V0dXBfaXBjcihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVf YWRfaHdfY2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRfaW5wdXRfc2V0dXAoc3RydWN0IGRwdV9o d19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQg YWQ0X2lucHV0X3NldHVwX2lkbGUoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3Qg ZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2lucHV0X3NldHVwX2lwY3Ioc3Ry dWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0 YXRpYyBpbnQgYWQ0X3N1c3BlbmRfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlz dHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2Fzc2VydGl2ZV9zZXR1 cChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcp Owotc3RhdGljIGludCBhZDRfYXNzZXJ0aXZlX3NldHVwX2lwY3Ioc3RydWN0IGRwdV9od19kc3Bw ICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQgYWQ0X2Jh Y2tsaWdodF9zZXR1cChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRf aHdfY2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRfYmFja2xpZ2h0X3NldHVwX2lwY3Ioc3RydWN0 IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLQotc3Rh dGljIGludCBhZDRfaXBjX3N1c3BlbmRfc2V0dXBfcnVuKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNw cCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9pcGNfc3Vz cGVuZF9zZXR1cF9pcGNyKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9h ZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9pcGNfcmVzdW1lX3NldHVwX2lwY3Moc3Ry dWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKTsKLXN0 YXRpYyBpbnQgYWQ0X2lwY19yZXNldF9zZXR1cF9zdGFydHVwKHN0cnVjdCBkcHVfaHdfZHNwcCAq ZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IGFkNF9pcGNf cmVzZXRfc2V0dXBfaXBjcihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVf YWRfaHdfY2ZnICpjZmcpOwotc3RhdGljIGludCBhZDRfY2ZnX2lwY19yZXNldChzdHJ1Y3QgZHB1 X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpOwotCi1zdGF0aWMg YWQ0X3Byb3Bfc2V0dXAgcHJvcF9zZXRfZnVuY1thZDRfc3RhdGVfbWF4XVtBRF9QUk9QTUFYXSA9 IHsKLQlbYWQ0X3N0YXRlX2lkbGVdW0FEX01PREVdID0gYWQ0X21vZGVfc2V0dXBfY29tbW9uLAot CVthZDRfc3RhdGVfaWRsZV1bQURfSU5JVF0gPSBhZDRfaW5pdF9zZXR1cF9pZGxlLAotCVthZDRf c3RhdGVfaWRsZV1bQURfQ0ZHXSA9IGFkNF9jZmdfc2V0dXBfaWRsZSwKLQlbYWQ0X3N0YXRlX2lk bGVdW0FEX0lOUFVUXSA9IGFkNF9pbnB1dF9zZXR1cF9pZGxlLAotCVthZDRfc3RhdGVfaWRsZV1b QURfU1VTUEVORF0gPSBhZDRfc3VzcGVuZF9zZXR1cCwKLQlbYWQ0X3N0YXRlX2lkbGVdW0FEX0FT U0VSVElWRV0gPSBhZDRfYXNzZXJ0aXZlX3NldHVwLAotCVthZDRfc3RhdGVfaWRsZV1bQURfQkFD S0xJR0hUXSA9IGFkNF9iYWNrbGlnaHRfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pZGxlXVtBRF9JUENf U1VTUEVORF0gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pZGxlXVtBRF9JUENfUkVT VU1FXSA9IGFkNF9ub19vcF9zZXR1cCwKLQlbYWQ0X3N0YXRlX2lkbGVdW0FEX0lQQ19SRVNFVF0g PSBhZDRfbm9fb3Bfc2V0dXAsCi0KLQlbYWQ0X3N0YXRlX3N0YXJ0dXBdW0FEX01PREVdID0gYWQ0 X21vZGVfc2V0dXBfY29tbW9uLAotCVthZDRfc3RhdGVfc3RhcnR1cF1bQURfSU5JVF0gPSBhZDRf aW5pdF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3N0YXJ0dXBdW0FEX0NGR10gPSBhZDRfY2ZnX3NldHVw LAotCVthZDRfc3RhdGVfc3RhcnR1cF1bQURfSU5QVVRdID0gYWQ0X2lucHV0X3NldHVwLAotCVth ZDRfc3RhdGVfc3RhcnR1cF1bQURfU1VTUEVORF0gPSBhZDRfc3VzcGVuZF9zZXR1cCwKLQlbYWQ0 X3N0YXRlX3N0YXJ0dXBdW0FEX0FTU0VSVElWRV0gPSBhZDRfYXNzZXJ0aXZlX3NldHVwLAotCVth ZDRfc3RhdGVfc3RhcnR1cF1bQURfQkFDS0xJR0hUXSA9IGFkNF9iYWNrbGlnaHRfc2V0dXAsCi0J W2FkNF9zdGF0ZV9zdGFydHVwXVtBRF9JUENfU1VTUEVORF0gPSBhZDRfbm9fb3Bfc2V0dXAsCi0J W2FkNF9zdGF0ZV9zdGFydHVwXVtBRF9JUENfUkVTVU1FXSA9IGFkNF9ub19vcF9zZXR1cCwKLQlb YWQ0X3N0YXRlX3N0YXJ0dXBdW0FEX0lQQ19SRVNFVF0gPSBhZDRfaXBjX3Jlc2V0X3NldHVwX3N0 YXJ0dXAsCi0KLQlbYWQ0X3N0YXRlX3J1bl1bQURfTU9ERV0gPSBhZDRfbW9kZV9zZXR1cF9jb21t b24sCi0JW2FkNF9zdGF0ZV9ydW5dW0FEX0lOSVRdID0gYWQ0X2luaXRfc2V0dXBfcnVuLAotCVth ZDRfc3RhdGVfcnVuXVtBRF9DRkddID0gYWQ0X2NmZ19zZXR1cF9ydW4sCi0JW2FkNF9zdGF0ZV9y dW5dW0FEX0lOUFVUXSA9IGFkNF9pbnB1dF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3J1bl1bQURfU1VT UEVORF0gPSBhZDRfc3VzcGVuZF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3J1bl1bQURfQVNTRVJUSVZF XSA9IGFkNF9hc3NlcnRpdmVfc2V0dXAsCi0JW2FkNF9zdGF0ZV9ydW5dW0FEX0JBQ0tMSUdIVF0g PSBhZDRfYmFja2xpZ2h0X3NldHVwLAotCVthZDRfc3RhdGVfcnVuXVtBRF9JUENfU1VTUEVORF0g PSBhZDRfaXBjX3N1c3BlbmRfc2V0dXBfcnVuLAotCVthZDRfc3RhdGVfcnVuXVtBRF9JUENfUkVT VU1FXSA9IGFkNF9ub19vcF9zZXR1cCwKLQlbYWQ0X3N0YXRlX3J1bl1bQURfSVBDX1JFU0VUXSA9 IGFkNF9zZXR1cF9kZWJ1ZywKLQotCVthZDRfc3RhdGVfaXBjc11bQURfTU9ERV0gPSBhZDRfbm9f b3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pcGNzXVtBRF9JTklUXSA9IGFkNF9ub19vcF9zZXR1cCwK LQlbYWQ0X3N0YXRlX2lwY3NdW0FEX0NGR10gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0 ZV9pcGNzXVtBRF9JTlBVVF0gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pcGNzXVtB RF9TVVNQRU5EXSA9IGFkNF9ub19vcF9zZXR1cCwKLQlbYWQ0X3N0YXRlX2lwY3NdW0FEX0FTU0VS VElWRV0gPSBhZDRfbm9fb3Bfc2V0dXAsCi0JW2FkNF9zdGF0ZV9pcGNzXVtBRF9CQUNLTElHSFRd ID0gYWQ0X25vX29wX3NldHVwLAotCVthZDRfc3RhdGVfaXBjc11bQURfSVBDX1NVU1BFTkRdID0g YWQ0X25vX29wX3NldHVwLAotCVthZDRfc3RhdGVfaXBjc11bQURfSVBDX1JFU1VNRV0gPSBhZDRf aXBjX3Jlc3VtZV9zZXR1cF9pcGNzLAotCVthZDRfc3RhdGVfaXBjc11bQURfSVBDX1JFU0VUXSA9 IGFkNF9ub19vcF9zZXR1cCwKLQotCVthZDRfc3RhdGVfaXBjcl1bQURfTU9ERV0gPSBhZDRfbW9k ZV9zZXR1cF9jb21tb24sCi0JW2FkNF9zdGF0ZV9pcGNyXVtBRF9JTklUXSA9IGFkNF9pbml0X3Nl dHVwX2lwY3IsCi0JW2FkNF9zdGF0ZV9pcGNyXVtBRF9DRkddID0gYWQ0X2NmZ19zZXR1cF9pcGNy LAotCVthZDRfc3RhdGVfaXBjcl1bQURfSU5QVVRdID0gYWQ0X2lucHV0X3NldHVwX2lwY3IsCi0J W2FkNF9zdGF0ZV9pcGNyXVtBRF9TVVNQRU5EXSA9IGFkNF9zdXNwZW5kX3NldHVwLAotCVthZDRf c3RhdGVfaXBjcl1bQURfQVNTRVJUSVZFXSA9IGFkNF9hc3NlcnRpdmVfc2V0dXBfaXBjciwKLQlb YWQ0X3N0YXRlX2lwY3JdW0FEX0JBQ0tMSUdIVF0gPSBhZDRfYmFja2xpZ2h0X3NldHVwX2lwY3Is Ci0JW2FkNF9zdGF0ZV9pcGNyXVtBRF9JUENfU1VTUEVORF0gPSBhZDRfaXBjX3N1c3BlbmRfc2V0 dXBfaXBjciwKLQlbYWQ0X3N0YXRlX2lwY3JdW0FEX0lQQ19SRVNVTUVdID0gYWQ0X25vX29wX3Nl dHVwLAotCVthZDRfc3RhdGVfaXBjcl1bQURfSVBDX1JFU0VUXSA9IGFkNF9pcGNfcmVzZXRfc2V0 dXBfaXBjciwKLX07Ci0KLXN0cnVjdCBhZDRfaW5mbyB7Ci0JZW51bSBhZDRfc3RhdGUgc3RhdGU7 Ci0JdTMyIGNvbXBsZXRlZF9vcHNfbWFzazsKLQlib29sIGFkNF9zdXBwb3J0OwotCWVudW0gYWQ0 X21vZGVzIG1vZGU7Ci0JYm9vbCBpc19tYXN0ZXI7Ci0JdTMyIGxhc3RfYXNzZXJ0aXZlOwotCXUz MiBjYWNoZWRfYXNzZXJ0aXZlOwotCXU2NCBsYXN0X2FsczsKLQl1NjQgY2FjaGVkX2FsczsKLQl1 NjQgbGFzdF9ibDsKLQl1NjQgY2FjaGVkX2JsOwotCXUzMiBsYXN0X3N0cjsKLQl1MzIgZnJhbWVf Y291bnQ7Ci0JdTMyIGZybXRfbW9kZTsKLQl1MzIgaXJkeF9jb250cm9sXzA7Ci0JdTMyIHRmX2N0 cmw7Ci0JdTMyIHZjX2NvbnRyb2xfMDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYWQ0X2luZm8gaW5m b1tEU1BQX01BWF0gPSB7Ci0JW0RTUFBfMF0gPSB7YWQ0X3N0YXRlX2lkbGUsIDAsIHRydWUsIEFE NF9PRkYsIGZhbHNlLCAweDgwLCAweDgwfSwKLQlbRFNQUF8xXSA9IHthZDRfc3RhdGVfaWRsZSwg MCwgdHJ1ZSwgQUQ0X09GRiwgZmFsc2UsIDB4ODAsIDB4ODB9LAotCVtEU1BQXzJdID0ge2FkNF9z dGF0ZV9tYXgsIDAsIGZhbHNlLCBBRDRfT0ZGLCBmYWxzZSwgMHg4MCwgMHg4MH0sCi0JW0RTUFBf M10gPSB7YWQ0X3N0YXRlX21heCwgMCwgZmFsc2UsIEFENF9PRkYsIGZhbHNlLCAweDgwLCAweDgw fSwKLX07Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBfYWQ0KHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNw cCwgdm9pZCAqYWRfY2ZnKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBkcHVfYWRfaHdfY2Zn ICpjZmcgPSBhZF9jZmc7Ci0KLQlyZXQgPSBhZDRfcGFyYW1zX2NoZWNrKGRzcHAsIGFkX2NmZyk7 Ci0JaWYgKHJldCkKLQkJcmV0dXJuOwotCi0JcmV0ID0gcHJvcF9zZXRfZnVuY1tpbmZvW2RzcHAt PmlkeF0uc3RhdGVdW2NmZy0+cHJvcF0oZHNwcCwgYWRfY2ZnKTsKLQlpZiAocmV0KQotCQlEUk1f RVJST1IoIm9wIGZhaWxlZCAlZCByZXQgJWRcbiIsIGNmZy0+cHJvcCwgcmV0KTsKLX0KLQotaW50 IGRwdV92YWxpZGF0ZV9kc3BwX2FkNChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHUzMiAqcHJv cCkKLXsKLQotCWlmICghZHNwcCB8fCAhcHJvcCkgewotCQlEUk1fRVJST1IoImludmFsaWQgcGFy YW1zIGRzcHAgJXBLIHByb3AgJXBLXG4iLCBkc3BwLCBwcm9wKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JaWYgKCpwcm9wID49IEFEX1BST1BNQVgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlk IHByb3Agc2V0ICVkXG4iLCAqcHJvcCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChk c3BwLT5pZHggPj0gRFNQUF9NQVggfHwgIWluZm9bZHNwcC0+aWR4XS5hZDRfc3VwcG9ydCkgewot CQlEUk1fRVJST1IoImFkNCBub3Qgc3VwcG9ydGVkIGZvciBkc3BwIGlkeCAlZFxuIiwgZHNwcC0+ aWR4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgYWQ0X3BhcmFtc19jaGVjayhzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBk cHVfYWRfaHdfY2ZnICpjZmcpCi17Ci0Jc3RydWN0IGRwdV9od19taXhlciAqaHdfbG07Ci0KLQlp ZiAoIWRzcHAgfHwgIWNmZyB8fCAhY2ZnLT5od19jZmcpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlk IGRzcHAgJXBLIGNmZyAlcEsgaHdfY2ZnICVwS1xuIiwKLQkJCWRzcHAsIGNmZywgKChjZmcpID8g KGNmZy0+aHdfY2ZnKSA6IE5VTEwpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFj ZmctPmh3X2NmZy0+bWl4ZXJfaW5mbykgewotCQlEUk1fRVJST1IoImludmFsaWQgbWl4ZWQgaW5m b1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChkc3BwLT5pZHggPj0gRFNQUF9N QVggfHwgIWluZm9bZHNwcC0+aWR4XS5hZDRfc3VwcG9ydCkgewotCQlEUk1fRVJST1IoImFkNCBu b3Qgc3VwcG9ydGVkIGZvciBkc3BwIGlkeCAlZFxuIiwgZHNwcC0+aWR4KTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JaWYgKGNmZy0+cHJvcCA+PSBBRF9QUk9QTUFYKSB7Ci0JCURSTV9FUlJP UigiaW52YWxpZCBwcm9wIHNldCAlZFxuIiwgY2ZnLT5wcm9wKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JaWYgKGluZm9bZHNwcC0+aWR4XS5zdGF0ZSA+PSBhZDRfc3RhdGVfbWF4KSB7Ci0J CURSTV9FUlJPUigiaW4gbWF4IHN0YXRlIGZvciBkc3BwIGlkeCAlZFxuIiwgZHNwcC0+aWR4KTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFwcm9wX3NldF9mdW5jW2luZm9bZHNwcC0+ aWR4XS5zdGF0ZV1bY2ZnLT5wcm9wXSkgewotCQlEUk1fRVJST1IoInByb3Agc2V0IG5vdCBpbXBs ZW1lbnRlZCBmb3Igc3RhdGUgJWQgcHJvcCAlZFxuIiwKLQkJCQlpbmZvW2RzcHAtPmlkeF0uc3Rh dGUsIGNmZy0+cHJvcCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghY2ZnLT5od19j ZmctPm51bV9vZl9taXhlcnMgfHwKLQkgICAgY2ZnLT5od19jZmctPm51bV9vZl9taXhlcnMgPiBD UlRDX0RVQUxfTUlYRVJTKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBtaXhlciBjbnQgJWRcbiIs Ci0JCQkJY2ZnLT5od19jZmctPm51bV9vZl9taXhlcnMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0JaHdfbG0gPSBjZmctPmh3X2NmZy0+bWl4ZXJfaW5mbzsKLQlpZiAoIWh3X2xtKSB7Ci0JCURS TV9FUlJPUigiaW52YWxpZCBtaXhlciBpbmZvXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaWYgKGNmZy0+aHdfY2ZnLT5udW1fb2ZfbWl4ZXJzID09IDEgJiYKLQkgICAgaHdfbG0tPmNm Zy5vdXRfaGVpZ2h0ICE9IGNmZy0+aHdfY2ZnLT5kaXNwbGF5diAmJgotCSAgICBod19sbS0+Y2Zn Lm91dF93aWR0aCAhPSBjZmctPmh3X2NmZy0+ZGlzcGxheWgpIHsKLQkJRFJNX0VSUk9SKCJzaW5n bGVfbG0gbG1oICVkIGxtdyAlZCBkaXNwbGF5aCAlZCBkaXNwbGF5dyAlZFxuIiwKLQkJCWh3X2xt LT5jZmcub3V0X2hlaWdodCwgaHdfbG0tPmNmZy5vdXRfd2lkdGgsCi0JCQljZmctPmh3X2NmZy0+ ZGlzcGxheWgsIGNmZy0+aHdfY2ZnLT5kaXNwbGF5dik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0g ZWxzZSBpZiAoaHdfbG0tPmNmZy5vdXRfaGVpZ2h0ICE9IGNmZy0+aHdfY2ZnLT5kaXNwbGF5diAm JgotCQkgICBod19sbS0+Y2ZnLm91dF93aWR0aCAhPSAoY2ZnLT5od19jZmctPmRpc3BsYXloID4+ IDEpKSB7Ci0JCURSTV9FUlJPUigiZHVhbF9sbSBsbWggJWQgbG13ICVkIGRpc3BsYXloICVkIGRp c3BsYXl3ICVkXG4iLAotCQkJaHdfbG0tPmNmZy5vdXRfaGVpZ2h0LCBod19sbS0+Y2ZnLm91dF93 aWR0aCwKLQkJCWNmZy0+aHdfY2ZnLT5kaXNwbGF5aCwgY2ZnLT5od19jZmctPmRpc3BsYXl2KTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0 X25vX29wX3NldHVwKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwgc3RydWN0IGRwdV9hZF9od19j ZmcgKmNmZykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRfc2V0dXBfZGVidWco c3RydWN0IGRwdV9od19kc3BwICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewot CXUzMiBzdHJlbmd0aCA9IDAsIGkgPSAwOwotCXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3X2xtOwot Ci0JaHdfbG0gPSBjZmctPmh3X2NmZy0+bWl4ZXJfaW5mbzsKLQlpZiAoKGNmZy0+aHdfY2ZnLT5u dW1fb2ZfbWl4ZXJzID09IDIpICYmIGh3X2xtLT5jZmcucmlnaHRfbWl4ZXIpIHsKLQkJLyogdGhp cyBBRCBjb3JlIGlzIHRoZSBzYWx2ZSBjb3JlICovCi0JCWZvciAoaSA9IERTUFBfMDsgaSA8IERT UFBfTUFYOyBpKyspIHsKLQkJCWlmIChpbmZvW2ldLmlzX21hc3RlcikgewotCQkJCXN0cmVuZ3Ro ID0gaW5mb1tpXS5sYXN0X3N0cjsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0J CXN0cmVuZ3RoID0gRFBVX1JFR19SRUFEKCZkc3BwLT5odywKLQkJCQlkc3BwLT5jYXAtPnNibGst PmFkLmJhc2UgKyAweDRjKTsKLQkJcHJfZGVidWcoIiVzKCk6IEFEIHN0cmVuZ3RoID0gJWRcbiIs IF9fZnVuY19fLCBzdHJlbmd0aCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg YWQ0X21vZGVfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLCBlbnVtIGFkNF9tb2RlcyBt b2RlKQotewotCXUzMiBibGtfb2Zmc2V0OwotCi0JYmxrX29mZnNldCA9IDB4MDQ7Ci0JaWYgKG1v ZGUgPT0gQUQ0X09GRikgewotCQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5z YmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCQkweDEwMSk7Ci0JCWluZm9bZHNwcC0+aWR4 XS5zdGF0ZSA9IGFkNF9zdGF0ZV9pZGxlOwotCQlwcl9kZWJ1ZygiJXMoKTogQUQgc3RhdGUgbW92 ZSB0byBpZGxlXG4iLCBfX2Z1bmNfXyk7Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3Bz X21hc2sgPSAwOwotCQkvKiByZXNldCBsYXN0IHZhbHVlcyB0byByZWdpc3RlciBkZWZhdWx0ICov Ci0JCWluZm9bZHNwcC0+aWR4XS5sYXN0X2Fzc2VydGl2ZSA9IDB4ODA7Ci0JCWluZm9bZHNwcC0+ aWR4XS5jYWNoZWRfYXNzZXJ0aXZlID0gVThfTUFYOwotCQlpbmZvW2RzcHAtPmlkeF0ubGFzdF9i bCA9IDB4RkZGRjsKLQkJaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9ibCA9IFU2NF9NQVg7Ci0JCWlu Zm9bZHNwcC0+aWR4XS5sYXN0X2FscyA9IDB4MDsKLQkJaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9h bHMgPSBVNjRfTUFYOwotCX0gZWxzZSB7Ci0JCWlmIChpbmZvW2RzcHAtPmlkeF0uc3RhdGUgPT0g YWQ0X3N0YXRlX2lkbGUpIHsKLQkJCWluZm9bZHNwcC0+aWR4XS5mcmFtZV9jb3VudCA9IDA7Ci0J CQlpbmZvW2RzcHAtPmlkeF0uc3RhdGUgPSBhZDRfc3RhdGVfc3RhcnR1cDsKLQkJCXByX2RlYnVn KCIlcygpOiBBRCBzdGF0ZSBtb3ZlIHRvIHN0YXJ0dXBcbiIsIF9fZnVuY19fKTsKLQkJfQotCQlE UFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29m ZnNldCwKLQkJCQkweDEwMCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0 X2luaXRfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2Nm ZyAqY2ZnKQotewotCXUzMiBmcmFtZV9zdGFydCwgZnJhbWVfZW5kLCBwcm9jX3N0YXJ0LCBwcm9j X2VuZDsKLQlzdHJ1Y3QgZHB1X2h3X21peGVyICpod19sbTsKLQl1MzIgYmxrX29mZnNldCwgdGls ZV9jdGwsIHZhbCwgaTsKLQl1MzIgb2ZmMSwgb2ZmMiwgb2ZmMywgb2ZmNCwgb2ZmNSwgb2ZmNjsK LQlzdHJ1Y3QgZHJtX21zbV9hZDRfaW5pdCAqaW5pdDsKLQotCWlmICghY2ZnLT5od19jZmctPnBh eWxvYWQpIHsKLQkJaW5mb1tkc3BwLT5pZHhdLmNvbXBsZXRlZF9vcHNfbWFzayAmPSB+YWQ0X2lu aXQ7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjZmctPmh3X2NmZy0+bGVuICE9IHNpemVvZihz dHJ1Y3QgZHJtX21zbV9hZDRfaW5pdCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHN6IHBhcmFt IGV4cCAlemQgZ2l2ZW4gJWQgY2ZnICVwS1xuIiwKLQkJCXNpemVvZihzdHJ1Y3QgZHJtX21zbV9h ZDRfaW5pdCksIGNmZy0+aHdfY2ZnLT5sZW4sCi0JCQljZmctPmh3X2NmZy0+cGF5bG9hZCk7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCWh3X2xtID0gY2ZnLT5od19jZmctPm1peGVyX2luZm87 Ci0JaWYgKGNmZy0+aHdfY2ZnLT5udW1fb2ZfbWl4ZXJzID09IDEpIHsKLQkJZnJhbWVfc3RhcnQg PSAwOwotCQlmcmFtZV9lbmQgPSAweGZmZmY7Ci0JCXByb2Nfc3RhcnQgPSAwOwotCQlwcm9jX2Vu ZCA9IDB4ZmZmZjsKLQkJdGlsZV9jdGwgPSAwOwotCQlpbmZvW2RzcHAtPmlkeF0uaXNfbWFzdGVy ID0gdHJ1ZTsKLQl9IGVsc2UgewotCQl0aWxlX2N0bCA9IDB4NTsKLQkJaWYgKGh3X2xtLT5jZmcu cmlnaHRfbWl4ZXIpIHsKLQkJCWZyYW1lX3N0YXJ0ID0gKGNmZy0+aHdfY2ZnLT5kaXNwbGF5aCA+ PiAxKSAtCi0JCQkJTUVSR0VfV0lEVEhfUklHSFQ7Ci0JCQlmcmFtZV9lbmQgPSBjZmctPmh3X2Nm Zy0+ZGlzcGxheWggLSAxOwotCQkJcHJvY19zdGFydCA9IChjZmctPmh3X2NmZy0+ZGlzcGxheWgg Pj4gMSk7Ci0JCQlwcm9jX2VuZCA9IGZyYW1lX2VuZDsKLQkJCXRpbGVfY3RsIHw9IDB4MTA7Ci0J CQlpbmZvW2RzcHAtPmlkeF0uaXNfbWFzdGVyID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlmcmFt ZV9zdGFydCA9IDA7Ci0JCQlmcmFtZV9lbmQgPSAoY2ZnLT5od19jZmctPmRpc3BsYXloID4+IDEp ICsKLQkJCQlNRVJHRV9XSURUSF9MRUZUOwotCQkJcHJvY19zdGFydCA9IDA7Ci0JCQlwcm9jX2Vu ZCA9IChjZmctPmh3X2NmZy0+ZGlzcGxheWggPj4gMSkgLSAxOwotCQkJdGlsZV9jdGwgfD0gMHgx MDsKLQkJCWluZm9bZHNwcC0+aWR4XS5pc19tYXN0ZXIgPSB0cnVlOwotCQl9Ci0JfQotCi0JaW5p dCA9IGNmZy0+aHdfY2ZnLT5wYXlsb2FkOwotCi0JaW5mb1tkc3BwLT5pZHhdLmZybXRfbW9kZSA9 IChpbml0LT5pbml0X3BhcmFtXzAwOSAmIChCSVQoMTQpIC0gMSkpOwotCi0JYmxrX29mZnNldCA9 IDB4YzsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNl ICsgYmxrX29mZnNldCwKLQkJCWluaXQtPmluaXRfcGFyYW1fMDEwKTsKLQotCWluaXQtPmluaXRf cGFyYW1fMDEyID0gY2ZnLT5od19jZmctPmRpc3BsYXl2ICYgKEJJVCgxNykgLSAxKTsKLQlpbml0 LT5pbml0X3BhcmFtXzAxMSA9IGNmZy0+aHdfY2ZnLT5kaXNwbGF5aCAmIChCSVQoMTcpIC0gMSk7 Ci0JYmxrX29mZnNldCA9IDB4MTA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNh cC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoKGluaXQtPmluaXRfcGFyYW1fMDEx IDw8IDE2KSB8IGluaXQtPmluaXRfcGFyYW1fMDEyKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxNDsK LQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxr X29mZnNldCwKLQkJCXRpbGVfY3RsKTsKLQotCWJsa19vZmZzZXQgPSAweDQ0OwotCURQVV9SRUdf V1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAot CQkJKCgoKGluaXQtPmluaXRfcGFyYW1fMDEzKSAmIChCSVQoMTcpIC0gMSkpIDw8IDE2KSB8Ci0J CQkoaW5pdC0+aW5pdF9wYXJhbV8wMTQgJiAoQklUKDE3KSAtIDEpKSkpOwotCi0JYmxrX29mZnNl dCA9IDB4NWM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQu YmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wMTUgJiAoQklUKDE2KSAt IDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4NjA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRz cHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJh bV8wMTYgJiAoQklUKDgpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg2NDsKLQlEUFVfUkVHX1dS SVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJ CShpbml0LT5pbml0X3BhcmFtXzAxNyAmIChCSVQoMTIpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0g MHg2ODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNl ICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzAxOCAmIChCSVQoMTIpIC0gMSkp KTsKLQlibGtfb2Zmc2V0ID0gMHg2YzsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+ Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzAx OSAmIChCSVQoMTIpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg3MDsKLQlEUFVfUkVHX1dSSVRF KCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShp bml0LT5pbml0X3BhcmFtXzAyMCAmIChCSVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg3 NDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsg YmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzAyMSAmIChCSVQoOCkgLSAxKSkpOwot CWJsa19vZmZzZXQgPSAweDc4OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAt PnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDIyICYg KEJJVCg4KSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4N2M7Ci0JRFBVX1JFR19XUklURSgmZHNw cC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+ aW5pdF9wYXJhbV8wMjMgJiAoQklUKDE2KSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4ODA7Ci0J RFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19v ZmZzZXQsCi0JCSgoKGluaXQtPmluaXRfcGFyYW1fMDI0ICYgKEJJVCgxNikgLSAxKSkgPDwgMTYp IHwKLQkJKChpbml0LT5pbml0X3BhcmFtXzAyNSAmIChCSVQoMTYpIC0gMSkpKSkpOwotCWJsa19v ZmZzZXQgPSAweDg0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGst PmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkoKChpbml0LT5pbml0X3BhcmFtXzAyNiAmIChCSVQo MTYpIC0gMSkpIDw8IDE2KSB8Ci0JCSgoaW5pdC0+aW5pdF9wYXJhbV8wMjcgJiAoQklUKDE2KSAt IDEpKSkpKTsKLQotCWJsa19vZmZzZXQgPSAweDkwOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3 LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRf cGFyYW1fMDI4ICYgKEJJVCgxNikgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDk0OwotCURQVV9S RUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0 LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDI5ICYgKEJJVCgxNikgLSAxKSkpOwotCi0JYmxrX29m ZnNldCA9IDB4OTg7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+ YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCSgoKGluaXQtPmluaXRfcGFyYW1fMDM1ICYgKEJJVCgx NikgLSAxKSkgPDwgMTYpIHwKLQkJKChpbml0LT5pbml0X3BhcmFtXzAzMCAmIChCSVQoMTYpIC0g MSkpKSkpOwotCi0JYmxrX29mZnNldCA9IDB4OWM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcs IGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCSgoKGluaXQtPmluaXRf cGFyYW1fMDMyICYgKEJJVCgxNikgLSAxKSkgPDwgMTYpIHwKLQkJKChpbml0LT5pbml0X3BhcmFt XzAzMSAmIChCSVQoMTYpIC0gMSkpKSkpOwotCWJsa19vZmZzZXQgPSAweGEwOwotCURQVV9SRUdf V1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAot CQkoKChpbml0LT5pbml0X3BhcmFtXzAzNCAmIChCSVQoMTYpIC0gMSkpIDw8IDE2KSB8Ci0JCSgo aW5pdC0+aW5pdF9wYXJhbV8wMzMgJiAoQklUKDE2KSAtIDEpKSkpKTsKLQotCWJsa19vZmZzZXQg PSAweGI0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJh c2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDM2ICYgKEJJVCg4KSAtIDEp KSk7Ci0JYmxrX29mZnNldCA9IDB4Y2M7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8w MzcgJiAoQklUKDgpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHhjMDsKLQlEUFVfUkVHX1dSSVRF KCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShp bml0LT5pbml0X3BhcmFtXzAzOCAmIChCSVQoOCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweGQ4 OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBi bGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDM5ICYgKEJJVCg4KSAtIDEpKSk7Ci0K LQlibGtfb2Zmc2V0ID0gMHhlODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2Fw LT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzA0MCAm IChCSVQoMTYpIC0gMSkpKTsKLQotCWJsa19vZmZzZXQgPSAweGY0OwotCURQVV9SRUdfV1JJVEUo JmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGlu aXQtPmluaXRfcGFyYW1fMDQxICYgKEJJVCg4KSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgx MDA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSAr IGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNDIgJiAoQklUKDE2KSAtIDEpKSk7 Ci0KLQlibGtfb2Zmc2V0ID0gMHgxMGM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8w NDMgJiAoQklUKDgpIC0gMSkpKTsKLQotCWJsa19vZmZzZXQgPSAweDEyMDsKLQlEUFVfUkVHX1dS SVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJ CShpbml0LT5pbml0X3BhcmFtXzA0NCAmIChCSVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0g MHgxMjQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNDUgJiAoQklUKDE2KSAtIDEp KSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxMjg7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRz cHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJh bV8wNDYgJiAoQklUKDEpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxMmM7Ci0JRFBVX1JFR19X UklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0J CQkoaW5pdC0+aW5pdF9wYXJhbV8wNDcgJiAoQklUKDgpIC0gMSkpKTsKLQotCWluZm9bZHNwcC0+ aWR4XS5pcmR4X2NvbnRyb2xfMCA9IChpbml0LT5pbml0X3BhcmFtXzA0OCAmIChCSVQoNSkgLSAx KSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxNDA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRz cHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJh bV8wNDkgJiAoQklUKDgpIC0gMSkpKTsKLQotCWJsa19vZmZzZXQgPSAweDE0NDsKLQlEUFVfUkVH X1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwK LQkJCShpbml0LT5pbml0X3BhcmFtXzA1MCAmIChCSVQoOCkgLSAxKSkpOwotCWJsa19vZmZzZXQg PSAweDE0ODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5i YXNlICsgYmxrX29mZnNldCwKLQkJKCgoaW5pdC0+aW5pdF9wYXJhbV8wNTEgJiAoQklUKDgpIC0g MSkpIDw8IDgpIHwKLQkJKChpbml0LT5pbml0X3BhcmFtXzA1MiAmIChCSVQoOCkgLSAxKSkpKSk7 Ci0KLQlibGtfb2Zmc2V0ID0gMHgxNGM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8w NTMgJiAoQklUKDEwKSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4MTUwOwotCURQVV9SRUdfV1JJ VEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJ KGluaXQtPmluaXRfcGFyYW1fMDU0ICYgKEJJVCgxMCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAw eDE1NDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNl ICsgYmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzA1NSAmIChCSVQoOCkgLSAxKSkp OwotCi0JYmxrX29mZnNldCA9IDB4MTU4OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3Bw LT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1f MDU2ICYgKEJJVCg4KSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4MTY0OwotCURQVV9SRUdfV1JJ VEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJ KGluaXQtPmluaXRfcGFyYW1fMDU3ICYgKEJJVCg4KSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4 MTY4OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2Ug KyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDU4ICYgKEJJVCg0KSAtIDEpKSk7 Ci0KLQlibGtfb2Zmc2V0ID0gMHgxN2M7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAt PmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoZnJhbWVfc3RhcnQgJiAoQklU KDE2KSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4MTgwOwotCURQVV9SRUdfV1JJVEUoJmRzcHAt Pmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGZyYW1lX2Vu ZCAmIChCSVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxODQ7Ci0JRFBVX1JFR19XUklU RSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQko cHJvY19zdGFydCAmIChCSVQoMTYpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxODg7Ci0JRFBV X1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZz ZXQsCi0JCQkocHJvY19lbmQgJiAoQklUKDE2KSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgx OGM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSAr IGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNTkgJiAoQklUKDQpIC0gMSkpKTsK LQotCWJsa19vZmZzZXQgPSAweDE5MDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+ Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJKCgoaW5pdC0+aW5pdF9wYXJhbV8w NjEgJiAoQklUKDgpIC0gMSkpIDw8IDgpIHwKLQkJKChpbml0LT5pbml0X3BhcmFtXzA2MCAmIChC SVQoOCkgLSAxKSkpKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxOTQ7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5p dC0+aW5pdF9wYXJhbV8wNjIgJiAoQklUKDEwKSAtIDEpKSk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgx YTA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSAr IGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNjMgJiAoQklUKDEwKSAtIDEpKSk7 Ci0JYmxrX29mZnNldCA9IDB4MWE0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5j YXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDY0 ICYgKEJJVCgxMCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDFhODsKLQlEUFVfUkVHX1dSSVRF KCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShp bml0LT5pbml0X3BhcmFtXzA2NSAmIChCSVQoMTApIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgx YWM7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSAr IGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNjYgJiAoQklUKDgpIC0gMSkpKTsK LQlibGtfb2Zmc2V0ID0gMHgxYjA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNh cC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNjcg JiAoQklUKDgpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHgxYjQ7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5p dC0+aW5pdF9wYXJhbV8wNjggJiAoQklUKDYpIC0gMSkpKTsKLQotCWJsa19vZmZzZXQgPSAweDQ2 MDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsg YmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzA2OSAmIChCSVQoMTYpIC0gMSkpKTsK LQlibGtfb2Zmc2V0ID0gMHg0NjQ7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNh cC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNzAg JiAoQklUKDEwKSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4NDY4OwotCURQVV9SRUdfV1JJVEUo JmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJKGlu aXQtPmluaXRfcGFyYW1fMDcxICYgKEJJVCgxMCkgLSAxKSkpOwotCWJsa19vZmZzZXQgPSAweDQ2 YzsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsg YmxrX29mZnNldCwKLQkJCShpbml0LT5pbml0X3BhcmFtXzA3MiAmIChCSVQoMTApIC0gMSkpKTsK LQlibGtfb2Zmc2V0ID0gMHg0NzA7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNh cC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5pdC0+aW5pdF9wYXJhbV8wNzMg JiAoQklUKDgpIC0gMSkpKTsKLQlibGtfb2Zmc2V0ID0gMHg0NzQ7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5p dC0+aW5pdF9wYXJhbV8wNzQgJiAoQklUKDEwKSAtIDEpKSk7Ci0JYmxrX29mZnNldCA9IDB4NDc4 OwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBi bGtfb2Zmc2V0LAotCQkJKGluaXQtPmluaXRfcGFyYW1fMDc1ICYgKEJJVCgxMCkgLSAxKSkpOwot Ci0Jb2ZmMSA9IDB4MWMwOwotCW9mZjIgPSAweDIxMDsKLQlvZmYzID0gMHgyNjA7Ci0Jb2ZmNCA9 IDB4MmIwOwotCW9mZjUgPSAweDM4MDsKLQlvZmY2ID0gMHgzZDA7Ci0JZm9yIChpID0gMDsgaSA8 IEFENF9MVVRfR1JQMF9TSVpFIC0gMTsgaSA9IGkgKyAyKSB7Ci0JCXZhbCA9IChpbml0LT5pbml0 X3BhcmFtXzAwMVtpXSAmIChCSVQoMTYpIC0gMSkpOwotCQl2YWwgfD0gKChpbml0LT5pbml0X3Bh cmFtXzAwMVtpICsgMV0gJiAoQklUKDE2KSAtIDEpKQotCQkJCTw8IDE2KTsKLQkJRFBVX1JFR19X UklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIG9mZjEsIHZhbCk7Ci0J CW9mZjEgKz0gNDsKLQotCQl2YWwgPSAoaW5pdC0+aW5pdF9wYXJhbV8wMDJbaV0gJiAoQklUKDE2 KSAtIDEpKTsKLQkJdmFsIHw9ICgoaW5pdC0+aW5pdF9wYXJhbV8wMDJbaSArIDFdICYgKEJJVCgx NikgLSAxKSkKLQkJCQk8PCAxNik7Ci0JCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5j YXAtPnNibGstPmFkLmJhc2UgKyBvZmYyLCB2YWwpOwotCQlvZmYyICs9IDQ7Ci0KLQkJdmFsID0g KGluaXQtPmluaXRfcGFyYW1fMDAzW2ldICYgKEJJVCgxNikgLSAxKSk7Ci0JCXZhbCB8PSAoKGlu aXQtPmluaXRfcGFyYW1fMDAzW2kgKyAxXSAmIChCSVQoMTYpIC0gMSkpCi0JCQkJPDwgMTYpOwot CQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2Zm MywgdmFsKTsKLQkJb2ZmMyArPSA0OwotCi0JCXZhbCA9IChpbml0LT5pbml0X3BhcmFtXzAwNFtp XSAmIChCSVQoMTYpIC0gMSkpOwotCQl2YWwgfD0gKChpbml0LT5pbml0X3BhcmFtXzAwNFtpICsg MV0gJiAoQklUKDE2KSAtIDEpKQotCQkJCTw8IDE2KTsKLQkJRFBVX1JFR19XUklURSgmZHNwcC0+ aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIG9mZjQsIHZhbCk7Ci0JCW9mZjQgKz0gNDsK LQotCQl2YWwgPSAoaW5pdC0+aW5pdF9wYXJhbV8wMDdbaV0gJiAoQklUKDE2KSAtIDEpKTsKLQkJ dmFsIHw9ICgoaW5pdC0+aW5pdF9wYXJhbV8wMDdbaSArIDFdICYKLQkJCQkoQklUKDE2KSAtIDEp KSA8PCAxNik7Ci0JCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFk LmJhc2UgKyBvZmY1LCB2YWwpOwotCQlvZmY1ICs9IDQ7Ci0KLQkJdmFsID0gKGluaXQtPmluaXRf cGFyYW1fMDA4W2ldICYgKEJJVCgxMikgLSAxKSk7Ci0JCXZhbCB8PSAoKGluaXQtPmluaXRfcGFy YW1fMDA4W2kgKyAxXSAmCi0JCQkJKEJJVCgxMikgLSAxKSkgPDwgMTYpOwotCQlEUFVfUkVHX1dS SVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2ZmNiwgdmFsKTsKLQkJ b2ZmNiArPSA0OwotCX0KLQkvKiB3cml0ZSBsYXN0IGluZGV4IGRhdGEgKi8KLQlpID0gQUQ0X0xV VF9HUlAwX1NJWkUgLSAxOwotCXZhbCA9ICgoaW5pdC0+aW5pdF9wYXJhbV8wMDFbaV0gJiAoQklU KDE2KSAtIDEpKSA8PCAxNik7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+ c2Jsay0+YWQuYmFzZSArIG9mZjEsIHZhbCk7Ci0JdmFsID0gKChpbml0LT5pbml0X3BhcmFtXzAw MltpXSAmIChCSVQoMTYpIC0gMSkpIDw8IDE2KTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywg ZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2ZmMiwgdmFsKTsKLQl2YWwgPSAoKGluaXQtPmlu aXRfcGFyYW1fMDAzW2ldICYgKEJJVCgxNikgLSAxKSkgPDwgMTYpOwotCURQVV9SRUdfV1JJVEUo JmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBvZmYzLCB2YWwpOwotCXZhbCA9 ICgoaW5pdC0+aW5pdF9wYXJhbV8wMDRbaV0gJiAoQklUKDE2KSAtIDEpKSA8PCAxNik7Ci0JRFBV X1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIG9mZjQsIHZh bCk7Ci0JdmFsID0gKChpbml0LT5pbml0X3BhcmFtXzAwN1tpXSAmIChCSVQoMTYpIC0gMSkpIDw8 IDE2KTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNl ICsgb2ZmNSwgdmFsKTsKLQl2YWwgPSAoKGluaXQtPmluaXRfcGFyYW1fMDA4W2ldICYgKEJJVCgx MikgLSAxKSkgPDwgMTYpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNi bGstPmFkLmJhc2UgKyBvZmY2LCB2YWwpOwotCi0Jb2ZmMSA9IDB4MzAwOwotCW9mZjIgPSAweDM0 MDsKLQlmb3IgKGkgPSAwOyBpIDwgQUQ0X0xVVF9HUlAxX1NJWkU7IGkgPSBpICsgMikgewotCQl2 YWwgPSAoaW5pdC0+aW5pdF9wYXJhbV8wMDVbaV0gJiAoQklUKDE2KSAtIDEpKTsKLQkJdmFsIHw9 ICgoaW5pdC0+aW5pdF9wYXJhbV8wMDVbaSArIDFdICYKLQkJCQkoQklUKDE2KSAtIDEpKSA8PCAx Nik7Ci0JCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2Ug KyBvZmYxLCB2YWwpOwotCQlvZmYxICs9IDQ7Ci0KLQkJdmFsID0gKGluaXQtPmluaXRfcGFyYW1f MDA2W2ldICYgKEJJVCgxNikgLSAxKSk7Ci0JCXZhbCB8PSAoKGluaXQtPmluaXRfcGFyYW1fMDA2 W2kgKyAxXSAmIChCSVQoMTYpIC0gMSkpCi0JCQkJPDwgMTYpOwotCQlEUFVfUkVHX1dSSVRFKCZk c3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgb2ZmMiwgdmFsKTsKLQkJb2ZmMiAr PSA0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9jZmdfc2V0dXAoc3Ry dWN0IGRwdV9od19kc3BwICpkc3BwLCBzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUz MiBibGtfb2Zmc2V0LCB2YWw7Ci0Jc3RydWN0IGRybV9tc21fYWQ0X2NmZyAqYWRfY2ZnOwotCi0J aWYgKCFjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlpbmZvW2RzcHAtPmlkeF0uY29tcGxldGVk X29wc19tYXNrICY9IH5hZDRfY2ZnOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY2ZnLT5od19j ZmctPmxlbiAhPSBzaXplb2Yoc3RydWN0IGRybV9tc21fYWQ0X2NmZykpIHsKLQkJRFJNX0VSUk9S KCJpbnZhbGlkIHN6IHBhcmFtIGV4cCAlemQgZ2l2ZW4gJWQgY2ZnICVwS1xuIiwKLQkJCXNpemVv ZihzdHJ1Y3QgZHJtX21zbV9hZDRfY2ZnKSwgY2ZnLT5od19jZmctPmxlbiwKLQkJCWNmZy0+aHdf Y2ZnLT5wYXlsb2FkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWFkX2NmZyA9IGNmZy0+aHdf Y2ZnLT5wYXlsb2FkOwotCi0JYmxrX29mZnNldCA9IDB4MTg7Ci0JdmFsID0gKGFkX2NmZy0+Y2Zn X3BhcmFtXzAwMiAmIChCSVQoMTYpIC0gMSkpOwotCXZhbCB8PSAoKGFkX2NmZy0+Y2ZnX3BhcmFt XzAwMSAmIChCSVQoMTYpIC0gMSkpIDw8IDE2KTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywg ZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0 ICs9IDQ7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAwNCAmIChCSVQoMTYpIC0gMSkpOwot CXZhbCB8PSAoKGFkX2NmZy0+Y2ZnX3BhcmFtXzAwMyAmIChCSVQoMTYpIC0gMSkpIDw8IDE2KTsK LQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxr X29mZnNldCwgdmFsKTsKLQotCWJsa19vZmZzZXQgPSAweDIwOwotCXZhbCA9IChhZF9jZmctPmNm Z19wYXJhbV8wMDUgJiAoQklUKDgpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBk c3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQg PSAweDI0OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMDYgJiAoQklUKDcpIC0gMSkpOwot CURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtf b2Zmc2V0LCB2YWwpOwotCi0JaW5mb1tkc3BwLT5pZHhdLnRmX2N0cmwgPSAoYWRfY2ZnLT5jZmdf cGFyYW1fMDA4ICYgKEJJVCg4KSAtIDEpKTsKLQotCWJsa19vZmZzZXQgPSAweDM4OwotCXZhbCA9 IChhZF9jZmctPmNmZ19wYXJhbV8wMDkgJiAoQklUKDEwKSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRF KCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsK LQotCWJsa19vZmZzZXQgPSAweDNjOwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMTAgJiAo QklUKDEyKSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxr LT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7Ci0JdmFsID0g KChhZF9jZmctPmNmZ19wYXJhbV8wMTEgJiAoQklUKDE2KSAtIDEpKSA8PCAxNik7Ci0JdmFsIHw9 IChhZF9jZmctPmNmZ19wYXJhbV8wMTIgJiAoQklUKDE2KSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRF KCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsK LQotCWJsa19vZmZzZXQgPSAweDg4OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMTMgJiAo QklUKDgpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGst PmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAo YWRfY2ZnLT5jZmdfcGFyYW1fMDE0ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0K LQlibGtfb2Zmc2V0ID0gMHhhNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDE1ICYgKEJJ VCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+ YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCArPSA0OwotCXZhbCA9IChh ZF9jZmctPmNmZ19wYXJhbV8wMTYgJiAoQklUKDEwKSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZk c3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQli bGtfb2Zmc2V0ICs9IDQ7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAxNyAmIChCSVQoMTYp IC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJh c2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2Zn LT5jZmdfcGFyYW1fMDE4ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+ aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtf b2Zmc2V0ID0gMHhjNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDE5ICYgKEJJVCgxNikg LSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCArPSA0OwotCXZhbCA9IChhZF9jZmct PmNmZ19wYXJhbV8wMjAgJiAoQklUKDE2KSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5o dywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJsa19v ZmZzZXQgPSAweGI4OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMjEgJiAoQklUKDE2KSAt IDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNl ICsgYmxrX29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7Ci0JdmFsID0gKGFkX2NmZy0+ Y2ZnX3BhcmFtXzAyMiAmIChCSVQoMTYpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3 LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCi0JYmxrX29m ZnNldCA9IDB4ZDA7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAyMyAmIChCSVQoMTYpIC0g MSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2Ug KyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5j ZmdfcGFyYW1fMDI0ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcs IGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlibGtfb2Zm c2V0ID0gMHhkYzsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDI1ICYgKEJJVCgxNikgLSAx KSk7Ci0JdmFsIHw9ICgoYWRfY2ZnLT5jZmdfcGFyYW1fMDI2ICYgKEJJVCgxNikgLSAxKSkgPDwg MTYpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2Ug KyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5j ZmdfcGFyYW1fMDI3ICYgKEJJVCgxNikgLSAxKSk7Ci0JdmFsIHw9ICgoYWRfY2ZnLT5jZmdfcGFy YW1fMDI4ICYgKEJJVCgxNikgLSAxKSkgPDwgMTYpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwg PSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDI5ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklU RSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7 Ci0KLQlibGtfb2Zmc2V0ID0gMHhlYzsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDMwICYg KEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Js ay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCArPSA0OwotCXZhbCA9 IChhZF9jZmctPmNmZ19wYXJhbV8wMzEgJiAoQklUKDEyKSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRF KCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsK LQotCWJsa19vZmZzZXQgPSAweGY4OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMzIgJiAo QklUKDEwKSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxr LT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQlibGtfb2Zmc2V0ICs9IDQ7Ci0JdmFsID0g KGFkX2NmZy0+Y2ZnX3BhcmFtXzAzMyAmIChCSVQoOCkgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0K LQlibGtfb2Zmc2V0ID0gMHgxMDQ7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAzNCAmIChC SVQoMTYpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGst PmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAo YWRfY2ZnLT5jZmdfcGFyYW1fMDM1ICYgKEJJVCgxMikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0K LQlibGtfb2Zmc2V0ID0gMHgxMTA7Ci0JdmFsID0gKGFkX2NmZy0+Y2ZnX3BhcmFtXzAzNiAmIChC SVQoMTIpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGst PmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAo YWRfY2ZnLT5jZmdfcGFyYW1fMDM3ICYgKEJJVCgxMikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0J YmxrX29mZnNldCArPSA0OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wMzggJiAoQklUKDgp IC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJh c2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2Zn LT5jZmdfcGFyYW1fMDM5ICYgKEJJVCg4KSAtIDEpKTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5o dywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgdmFsKTsKLQotCWJsa19v ZmZzZXQgPSAweDEzNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDQwICYgKEJJVCgxMikg LSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlpbmZvW2RzcHAtPmlkeF0udmNfY29udHJvbF8wID0g KGFkX2NmZy0+Y2ZnX3BhcmFtXzA0MSAmIChCSVQoNykgLSAxKSk7Ci0KLQlibGtfb2Zmc2V0ICs9 IDE2MDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1fMDQzICYgKEJJVCgxMCkgLSAxKSk7Ci0J RFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19v ZmZzZXQsIHZhbCk7Ci0KLQlibGtfb2Zmc2V0ID0gMHgxNmM7Ci0JdmFsID0gKGFkX2NmZy0+Y2Zn X3BhcmFtXzA0NCAmIChCSVQoOCkgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRz cHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0JYmxrX29mZnNldCAr PSA0OwotCXZhbCA9IChhZF9jZmctPmNmZ19wYXJhbV8wNDUgJiAoQklUKDgpIC0gMSkpOwotCURQ VV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zm c2V0LCB2YWwpOwotCWJsa19vZmZzZXQgKz0gNDsKLQl2YWwgPSAoYWRfY2ZnLT5jZmdfcGFyYW1f MDQ2ICYgKEJJVCgxNikgLSAxKSk7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNh cC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIHZhbCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCBhZDRfaW5wdXRfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlz dHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXU2NCAqdmFsLCBhbHM7Ci0JdTMyIGJsa19v ZmZzZXQ7Ci0KLQlpZiAoY2ZnLT5od19jZmctPmxlbiAhPSBzaXplb2YodTY0KSAmJiBjZmctPmh3 X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fRVJST1IoImludmFsaWQgc3ogcGFyYW0gZXhwICV6ZCBn aXZlbiAlZCBjZmcgJXBLXG4iLAotCQkJc2l6ZW9mKHU2NCksIGNmZy0+aHdfY2ZnLT5sZW4sIGNm Zy0+aHdfY2ZnLT5wYXlsb2FkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYmxrX29mZnNl dCA9IDB4Mjg7Ci0JaWYgKGNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCXZhbCA9IGNmZy0+aHdf Y2ZnLT5wYXlsb2FkOwotCX0gZWxzZSB7Ci0JCWFscyA9IDA7Ci0JCXZhbCA9ICZhbHM7Ci0JfQot CWluZm9bZHNwcC0+aWR4XS5sYXN0X2FscyA9ICgqdmFsICYgKEJJVCgxNikgLSAxKSk7Ci0JaW5m b1tkc3BwLT5pZHhdLmNvbXBsZXRlZF9vcHNfbWFzayB8PSBhZDRfaW5wdXQ7Ci0JRFBVX1JFR19X UklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0J CQlpbmZvW2RzcHAtPmlkeF0ubGFzdF9hbHMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IGFkNF9zdXNwZW5kX3NldHVwKHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRw dV9hZF9od19jZmcgKmNmZykKLXsKLQlpbmZvW2RzcHAtPmlkeF0uc3RhdGUgPSBhZDRfc3RhdGVf aWRsZTsKLQlwcl9kZWJ1ZygiJXMoKTogQUQgc3RhdGUgbW92ZSB0byBpZGxlXG4iLCBfX2Z1bmNf Xyk7Ci0JaW5mb1tkc3BwLT5pZHhdLmNvbXBsZXRlZF9vcHNfbWFzayA9IDA7Ci0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X21vZGVfc2V0dXBfY29tbW9uKHN0cnVjdCBkcHVfaHdfZHNw cCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZykKLXsKLQotCWlmIChjZmctPmh3 X2NmZy0+bGVuICE9IHNpemVvZih1NjQpIHx8ICFjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlE Uk1fRVJST1IoImludmFsaWQgc3ogcGFyYW0gZXhwICV6ZCBnaXZlbiAlZCBjZmcgJXBLXG4iLAot CQkJc2l6ZW9mKHU2NCksIGNmZy0+aHdfY2ZnLT5sZW4sIGNmZy0+aHdfY2ZnLT5wYXlsb2FkKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaW5mb1tkc3BwLT5pZHhdLm1vZGUgPSAqKChlbnVt IGFkNF9tb2RlcyAqKQotCQkJCQkoY2ZnLT5od19jZmctPnBheWxvYWQpKTsKLQlpbmZvW2RzcHAt PmlkeF0uY29tcGxldGVkX29wc19tYXNrIHw9IGFkNF9tb2RlOwotCi0JaWYgKEFEX1NUQVRFX1JF QURZKGluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spIHx8Ci0JCQkJCWluZm9bZHNw cC0+aWR4XS5tb2RlID09IEFENF9PRkYpCi0JCWFkNF9tb2RlX3NldHVwKGRzcHAsIGluZm9bZHNw cC0+aWR4XS5tb2RlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9pbml0X3Nl dHVwX2lkbGUoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2Nm ZyAqY2ZnKQotewotCWludCByZXQ7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoIWNmZy0+aHdf Y2ZnLT5wYXlsb2FkKSB7Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2sgJj0g fmFkNF9pbml0OwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSBhZDRfaW5pdF9zZXR1cChkc3Bw LCBjZmcpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBlbmFibGUgbWVtb3J5IGlu aXRpYWxpemF0aW9uKi8KLQkvKiBmcm10IG1vZGUgKi8KLQlibGtfb2Zmc2V0ID0gMHg4OwotCURQ VV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zm c2V0LAotCQkJKGluZm9bZHNwcC0+aWR4XS5mcm10X21vZGUgJiAweDFmZmYpKTsKLQkvKiBtZW1v cnkgaW5pdCAqLwotCWJsa19vZmZzZXQgPSAweDQ1MDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5o dywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgMHgxKTsKLQotCS8qIGVu Zm9yY2UgMCBpbml0aWFsIHN0cmVuZ3RoIHdoZW4gcG93ZXJpbmcgdXAgQUQgY29uZmlnICovCi0J LyogaXJkeF9jb250cm9sXzAgKi8KLQlibGtfb2Zmc2V0ID0gMHgxM2M7Ci0JRFBVX1JFR19XUklU RSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIDB4Nik7 Ci0KLQlpbmZvW2RzcHAtPmlkeF0uY29tcGxldGVkX29wc19tYXNrIHw9IGFkNF9pbml0OwotCi0J aWYgKEFEX1NUQVRFX1JFQURZKGluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spKQot CQlhZDRfbW9kZV9zZXR1cChkc3BwLCBpbmZvW2RzcHAtPmlkeF0ubW9kZSk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBhZDRfaW5pdF9zZXR1cF9ydW4oc3RydWN0IGRwdV9od19kc3Bw ICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCWludCByZXQ7Ci0JdTMy IGJsa19vZmZzZXQ7Ci0KLQlpZiAoIWNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCWluZm9bZHNw cC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2sgJj0gfmFkNF9pbml0OwotCQlyZXR1cm4gMDsKLQl9 Ci0KLQlyZXQgPSBhZDRfaW5pdF9zZXR1cChkc3BwLCBjZmcpOwotCWlmIChyZXQpCi0JCXJldHVy biByZXQ7Ci0KLQkvKiBkaXNhYmxlIG1lbW9yeSBpbml0aWFsaXphdGlvbiovCi0JLyogZnJtdCBt b2RlICovCi0JYmxrX29mZnNldCA9IDB4ODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNw cC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCShpbmZvW2RzcHAtPmlkeF0u ZnJtdF9tb2RlIHwgMHgyMDAwKSk7Ci0JLyogbm8gbmVlZCB0byBleHBsaWNpdGx5IHNldCBtZW1v cnkgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsCi0JICogc2luY2UgQUQgaHcgd2VyZSBub3QgcG93 ZXJlZCBvZmYuCi0JICovCi0KLQkvKiBpcmR4X2NvbnRyb2xfMCAqLwotCWJsa19vZmZzZXQgPSAw eDEzYzsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNl ICsgYmxrX29mZnNldCwKLQkJCWluZm9bZHNwcC0+aWR4XS5pcmR4X2NvbnRyb2xfMCk7Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRfaW5pdF9zZXR1cF9pcGNyKHN0cnVjdCBkcHVf aHdfZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZykKLXsKLQlpbnQgcmV0 OwotCXUzMiBibGtfb2Zmc2V0OwotCi0JaWYgKCFjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlp bmZvW2RzcHAtPmlkeF0uY29tcGxldGVkX29wc19tYXNrICY9IH5hZDRfaW5pdDsKLQkJcmV0dXJu IDA7Ci0JfQotCi0JcmV0ID0gYWQ0X2luaXRfc2V0dXAoZHNwcCwgY2ZnKTsKLQlpZiAocmV0KQot CQlyZXR1cm4gcmV0OwotCS8qIG5vIG5lZWQgdG8gZXhwbGljaXRseSBzZXQgbWVtb3J5IGluaXRp YWxpemF0aW9uIHNlcXVlbmNlLAotCSAqIHNpbmNlIHJlZ2lzdGVyIHJlc2V0IHZhbHVlcyBhcmUg dGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbgotCSAqLwotCS8qIGZybXQgbW9kZSAqLwotCWJsa19v ZmZzZXQgPSAweDg7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+ YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkoaW5mb1tkc3BwLT5pZHhdLmZybXRfbW9kZSB8IDB4 MjAwMCkpOwotCS8qIGlyZHhfY29udHJvbF8wICovCi0JYmxrX29mZnNldCA9IDB4MTNjOwotCURQ VV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zm c2V0LAotCQkJaW5mb1tkc3BwLT5pZHhdLmlyZHhfY29udHJvbF8wKTsKLQotCWluZm9bZHNwcC0+ aWR4XS5jb21wbGV0ZWRfb3BzX21hc2sgfD0gYWQ0X2luaXQ7Ci0JaWYgKEFEX1NUQVRFX1JFQURZ KGluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1cChk c3BwLCBpbmZvW2RzcHAtPmlkeF0ubW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCBhZDRfY2ZnX3NldHVwX2lkbGUoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3Qg ZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCWludCByZXQ7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlp ZiAoIWNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRf b3BzX21hc2sgJj0gfmFkNF9jZmc7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldCA9IGFkNF9jZmdf c2V0dXAoZHNwcCwgY2ZnKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogZW5mb3Jj ZSAwIGluaXRpYWwgc3RyZW5ndGggd2hlbiBwb3dlcmluZyB1cCBBRCBjb25maWcgKi8KLQkvKiBh c3NlcnRpdmVuZXNzICovCi0JYmxrX29mZnNldCA9IDB4MzA7Ci0JRFBVX1JFR19XUklURSgmZHNw cC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsIDB4MCk7Ci0JLyog dGYgY29udHJvbCAqLwotCWJsa19vZmZzZXQgPSAweDM0OwotCURQVV9SRUdfV1JJVEUoJmRzcHAt Pmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCAweDU1KTsKLQotCS8q IHZjX2NvbnRyb2xfMCAqLwotCWJsa19vZmZzZXQgPSAweDEzODsKLQlEUFVfUkVHX1dSSVRFKCZk c3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJaW5mb1tk c3BwLT5pZHhdLnZjX2NvbnRyb2xfMCk7Ci0KLQlpbmZvW2RzcHAtPmlkeF0uY29tcGxldGVkX29w c19tYXNrIHw9IGFkNF9jZmc7Ci0JaWYgKEFEX1NUQVRFX1JFQURZKGluZm9bZHNwcC0+aWR4XS5j b21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1cChkc3BwLCBpbmZvW2RzcHAtPmlk eF0ubW9kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X2NmZ19zZXR1cF9ydW4o c3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQot ewotCWludCByZXQ7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoIWNmZy0+aHdfY2ZnLT5wYXls b2FkKSB7Ci0JCWluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2sgJj0gfmFkNF9jZmc7 Ci0JCXJldHVybiAwOwotCX0KLQotCXJldCA9IGFkNF9jZmdfc2V0dXAoZHNwcCwgY2ZnKTsKLQlp ZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogYXNzZXJ0aXZlbmVzcyAqLwotCWJsa19vZmZz ZXQgPSAweDMwOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFk LmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJaW5mb1tkc3BwLT5pZHhdLmxhc3RfYXNzZXJ0aXZlKTsK LQkvKiB0ZiBjb250cm9sICovCi0JYmxrX29mZnNldCA9IDB4MzQ7Ci0JRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCWluZm9b ZHNwcC0+aWR4XS50Zl9jdHJsKTsKLQkvKiB2Y19jb250cm9sXzAgKi8KLQlibGtfb2Zmc2V0ID0g MHgxMzg7Ci0JRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFz ZSArIGJsa19vZmZzZXQsCi0JCWluZm9bZHNwcC0+aWR4XS52Y19jb250cm9sXzApOwotCi0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQ0X2NmZ19zZXR1cF9pcGNyKHN0cnVjdCBkcHVfaHdf ZHNwcCAqZHNwcCwKLQkJc3RydWN0IGRwdV9hZF9od19jZmcgKmNmZykKLXsKLQlpbnQgcmV0Owot CXUzMiBibGtfb2Zmc2V0OwotCi0JaWYgKCFjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlpbmZv W2RzcHAtPmlkeF0uY29tcGxldGVkX29wc19tYXNrICY9IH5hZDRfY2ZnOwotCQlyZXR1cm4gMDsK LQl9Ci0KLQlyZXQgPSBhZDRfY2ZnX3NldHVwKGRzcHAsIGNmZyk7Ci0JaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKLQotCS8qIGFzc2VydGl2ZW5lc3MgKi8KLQlibGtfb2Zmc2V0ID0gMHgzMDsKLQlE UFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29m ZnNldCwKLQkJCWluZm9bZHNwcC0+aWR4XS5sYXN0X2Fzc2VydGl2ZSk7Ci0KLQlpbmZvW2RzcHAt PmlkeF0uY29tcGxldGVkX29wc19tYXNrIHw9IGFkNF9jZmc7Ci0JaWYgKEFEX1NUQVRFX1JFQURZ KGluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1cChk c3BwLCBpbmZvW2RzcHAtPmlkeF0ubW9kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg YWQ0X2lucHV0X3NldHVwX2lkbGUoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3Qg ZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBhZDRfaW5wdXRfc2V0 dXAoZHNwcCwgY2ZnKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaW5mb1tkc3BwLT5p ZHhdLmNvbXBsZXRlZF9vcHNfbWFzayB8PSBhZDRfaW5wdXQ7Ci0JaWYgKEFEX1NUQVRFX1JFQURZ KGluZm9bZHNwcC0+aWR4XS5jb21wbGV0ZWRfb3BzX21hc2spKQotCQlhZDRfbW9kZV9zZXR1cChk c3BwLCBpbmZvW2RzcHAtPmlkeF0ubW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCBhZDRfaW5wdXRfc2V0dXBfaXBjcihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVj dCBkcHVfYWRfaHdfY2ZnICpjZmcpCi17Ci0JdTY0ICp2YWwsIGFsczsKLQl1MzIgYmxrX29mZnNl dDsKLQotCWlmIChjZmctPmh3X2NmZy0+bGVuICE9IHNpemVvZih1NjQpICYmIGNmZy0+aHdfY2Zn LT5wYXlsb2FkKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBzeiBwYXJhbSBleHAgJXpkIGdpdmVu ICVkIGNmZyAlcEtcbiIsCi0JCQlzaXplb2YodTY0KSwgY2ZnLT5od19jZmctPmxlbiwgY2ZnLT5o d19jZmctPnBheWxvYWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibGtfb2Zmc2V0ID0g MHgyODsKLQlpZiAoY2ZnLT5od19jZmctPnBheWxvYWQpIHsKLQkJdmFsID0gY2ZnLT5od19jZmct PnBheWxvYWQ7Ci0JfSBlbHNlIHsKLQkJYWxzID0gMDsKLQkJdmFsID0gJmFsczsKLQl9Ci0JaW5m b1tkc3BwLT5pZHhdLmNhY2hlZF9hbHMgPSAqdmFsICYgKEJJVCgxNikgLSAxKTsKLQlpbmZvW2Rz cHAtPmlkeF0uY29tcGxldGVkX29wc19tYXNrIHw9IGFkNF9pbnB1dDsKLQlEUFVfUkVHX1dSSVRF KCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJCWlu Zm9bZHNwcC0+aWR4XS5sYXN0X2Fscyk7Ci0KLQlpZiAoQURfU1RBVEVfUkVBRFkoaW5mb1tkc3Bw LT5pZHhdLmNvbXBsZXRlZF9vcHNfbWFzaykpCi0JCWFkNF9tb2RlX3NldHVwKGRzcHAsIGluZm9b ZHNwcC0+aWR4XS5tb2RlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9hc3Nl cnRpdmVfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3 X2NmZyAqY2ZnKQotewotCXU2NCAqdmFsLCBhc3NlcnRpdmU7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0K LQlpZiAoY2ZnLT5od19jZmctPmxlbiAhPSBzaXplb2YodTY0KSAmJiBjZmctPmh3X2NmZy0+cGF5 bG9hZCkgewotCQlEUk1fRVJST1IoImludmFsaWQgc3ogcGFyYW0gZXhwICV6ZCBnaXZlbiAlZCBj ZmcgJXBLXG4iLAotCQkJc2l6ZW9mKHU2NCksIGNmZy0+aHdfY2ZnLT5sZW4sIGNmZy0+aHdfY2Zn LT5wYXlsb2FkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYmxrX29mZnNldCA9IDB4MzA7 Ci0JaWYgKGNmZy0+aHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCXZhbCA9IGNmZy0+aHdfY2ZnLT5wYXls b2FkOwotCX0gZWxzZSB7Ci0JCWFzc2VydGl2ZSA9IDA7Ci0JCXZhbCA9ICZhc3NlcnRpdmU7Ci0J fQotCi0JaW5mb1tkc3BwLT5pZHhdLmxhc3RfYXNzZXJ0aXZlID0gKnZhbCAmIChCSVQoOCkgLSAx KTsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsg YmxrX29mZnNldCwKLQkJCShpbmZvW2RzcHAtPmlkeF0ubGFzdF9hc3NlcnRpdmUpKTsKLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRfYXNzZXJ0aXZlX3NldHVwX2lwY3Ioc3RydWN0IGRw dV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXU2NCAq dmFsLCBhc3NlcnRpdmU7Ci0JdTMyIGJsa19vZmZzZXQ7Ci0KLQlpZiAoY2ZnLT5od19jZmctPmxl biAhPSBzaXplb2YodTY0KSAmJiBjZmctPmh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fRVJST1Io ImludmFsaWQgc3ogcGFyYW0gZXhwICV6ZCBnaXZlbiAlZCBjZmcgJXBLXG4iLAotCQkJc2l6ZW9m KHU2NCksIGNmZy0+aHdfY2ZnLT5sZW4sIGNmZy0+aHdfY2ZnLT5wYXlsb2FkKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JYmxrX29mZnNldCA9IDB4MzA7Ci0JaWYgKGNmZy0+aHdfY2ZnLT5w YXlsb2FkKSB7Ci0JCXZhbCA9IGNmZy0+aHdfY2ZnLT5wYXlsb2FkOwotCX0gZWxzZSB7Ci0JCWFz c2VydGl2ZSA9IDA7Ci0JCXZhbCA9ICZhc3NlcnRpdmU7Ci0JfQotCi0JaW5mb1tkc3BwLT5pZHhd LmNhY2hlZF9hc3NlcnRpdmUgPSAqdmFsICYgKEJJVCg4KSAtIDEpOwotCURQVV9SRUdfV1JJVEUo JmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAotCQkJaW5m b1tkc3BwLT5pZHhdLmxhc3RfYXNzZXJ0aXZlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMg aW50IGFkNF9iYWNrbGlnaHRfc2V0dXAoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1 Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXU2NCAqdmFsLCBibDsKLQl1MzIgYmxrX29mZnNl dDsKLQotCWlmIChjZmctPmh3X2NmZy0+bGVuICE9IHNpemVvZih1NjQpICYmIGNmZy0+aHdfY2Zn LT5wYXlsb2FkKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBzeiBwYXJhbSBleHAgJXpkIGdpdmVu ICVkIGNmZyAlcEtcbiIsCi0JCQlzaXplb2YodTY0KSwgY2ZnLT5od19jZmctPmxlbiwgY2ZnLT5o d19jZmctPnBheWxvYWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibGtfb2Zmc2V0ID0g MHgyYzsKLQlpZiAoY2ZnLT5od19jZmctPnBheWxvYWQpIHsKLQkJdmFsID0gY2ZnLT5od19jZmct PnBheWxvYWQ7Ci0JfSBlbHNlIHsKLQkJYmwgPSAwOwotCQl2YWwgPSAmYmw7Ci0JfQotCi0JaW5m b1tkc3BwLT5pZHhdLmxhc3RfYmwgPSAqdmFsICYgKEJJVCgxNikgLSAxKTsKLQlEUFVfUkVHX1dS SVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJ CWluZm9bZHNwcC0+aWR4XS5sYXN0X2JsKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBh ZDRfYmFja2xpZ2h0X3NldHVwX2lwY3Ioc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1 Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXU2NCAqdmFsLCBibDsKLQl1MzIgYmxrX29mZnNl dDsKLQotCWlmIChjZmctPmh3X2NmZy0+bGVuICE9IHNpemVvZih1NjQpICYmIGNmZy0+aHdfY2Zn LT5wYXlsb2FkKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBzeiBwYXJhbSBleHAgJXpkIGdpdmVu ICVkIGNmZyAlcEtcbiIsCi0JCQlzaXplb2YodTY0KSwgY2ZnLT5od19jZmctPmxlbiwgY2ZnLT5o d19jZmctPnBheWxvYWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibGtfb2Zmc2V0ID0g MHgyYzsKLQlpZiAoY2ZnLT5od19jZmctPnBheWxvYWQpIHsKLQkJdmFsID0gY2ZnLT5od19jZmct PnBheWxvYWQ7Ci0JfSBlbHNlIHsKLQkJYmwgPSAwOwotCQl2YWwgPSAmYmw7Ci0JfQotCi0JaW5m b1tkc3BwLT5pZHhdLmNhY2hlZF9ibCA9ICp2YWwgJiAoQklUKDE2KSAtIDEpOwotCURQVV9SRUdf V1JJVEUoJmRzcHAtPmh3LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LAot CQkJaW5mb1tkc3BwLT5pZHhdLmxhc3RfYmwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHB1 X3JlYWRfaW50cl9yZXNwX2FkNChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHUzMiBldmVudCwg dTMyICpyZXNwKQotewotCWlmICghZHNwcCB8fCAhcmVzcCkgewotCQlEUk1fRVJST1IoImludmFs aWQgcGFyYW1zIGRzcHAgJXBLIHJlc3AgJXBLXG4iLCBkc3BwLCByZXNwKTsKLQkJcmV0dXJuOwot CX0KLQotCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIEFENF9CQUNLTElHSFQ6Ci0JCSpyZXNwID0g RFBVX1JFR19SRUFEKCZkc3BwLT5odywKLQkJCQlkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyAw eDQ4KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50 IGFkNF9pcGNfc3VzcGVuZF9zZXR1cF9ydW4oc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlz dHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUzMiBzdHJlbmd0aCA9IDAsIGkgPSAwOwot CXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3X2xtOwotCi0JaHdfbG0gPSBjZmctPmh3X2NmZy0+bWl4 ZXJfaW5mbzsKLQlpZiAoKGNmZy0+aHdfY2ZnLT5udW1fb2ZfbWl4ZXJzID09IDIpICYmIGh3X2xt LT5jZmcucmlnaHRfbWl4ZXIpIHsKLQkJLyogdGhpcyBBRCBjb3JlIGlzIHRoZSBzYWx2ZSBjb3Jl ICovCi0JCWZvciAoaSA9IERTUFBfMDsgaSA8IERTUFBfTUFYOyBpKyspIHsKLQkJCWlmIChpbmZv W2ldLmlzX21hc3RlcikgewotCQkJCXN0cmVuZ3RoID0gaW5mb1tpXS5sYXN0X3N0cjsKLQkJCQli cmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCXN0cmVuZ3RoID0gRFBVX1JFR19SRUFEKCZk c3BwLT5odywKLQkJCQlkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyAweDRjKTsKLQkJcHJfZGVi dWcoIiVzKCk6IEFEIHN0cmVuZ3RoID0gJWRcbiIsIF9fZnVuY19fLCBzdHJlbmd0aCk7Ci0JfQot CWluZm9bZHNwcC0+aWR4XS5sYXN0X3N0ciA9IHN0cmVuZ3RoOwotCWluZm9bZHNwcC0+aWR4XS5z dGF0ZSA9IGFkNF9zdGF0ZV9pcGNzOwotCXByX2RlYnVnKCIlcygpOiBBRCBzdGF0ZSBtb3ZlIHRv IGlwY3NcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkNF9p cGNfcmVzdW1lX3NldHVwX2lwY3Moc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3Qg ZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUzMiBibGtfb2Zmc2V0LCB2YWw7Ci0KLQlpbmZvW2Rz cHAtPmlkeF0uZnJhbWVfY291bnQgPSAwOwotCWluZm9bZHNwcC0+aWR4XS5zdGF0ZSA9IGFkNF9z dGF0ZV9pcGNyOwotCXByX2RlYnVnKCIlcygpOiBBRCBzdGF0ZSBtb3ZlIHRvIGlwY3JcbiIsIF9f ZnVuY19fKTsKLQotCS8qIG5vIG5lZWQgdG8gcmV3cml0ZSBmcm10X21vZGUgYml0IDEzIGFuZCBt ZW1faW5pdCwKLQkgKiBzaW5jZSB0aGUgZGVmYXVsdCByZWdpc3RlciB2YWx1ZXMgYXJlIGV4YWN0 bHkgd2hhdAotCSAqIHdlIHdhbnRlZC4KLQkgKi8KLQotCS8qIGlwYyByZXN1bWUgd2l0aCBtYW51 YWwgc3RyZW5ndGggKi8KLQkvKiB0ZiBjb250cm9sICovCi0JYmxrX29mZnNldCA9IDB4MzQ7Ci0J dmFsID0gKDB4NTUgJiAoQklUKDgpIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3LCBk c3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCS8qIHNldCBtYW51 YWwgc3RyZW5ndGggKi8KLQlibGtfb2Zmc2V0ID0gMHgxNWM7Ci0JdmFsID0gKGluZm9bZHNwcC0+ aWR4XS5sYXN0X3N0ciAmIChCSVQoMTApIC0gMSkpOwotCURQVV9SRUdfV1JJVEUoJmRzcHAtPmh3 LCBkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyBibGtfb2Zmc2V0LCB2YWwpOwotCS8qIGVuYWJs ZSBtYW51YWwgbW9kZSAqLwotCWJsa19vZmZzZXQgPSAweDEzODsKLQlEUFVfUkVHX1dSSVRFKCZk c3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwgMCk7Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRfaXBjX3N1c3BlbmRfc2V0dXBfaXBjcihzdHJ1 Y3QgZHB1X2h3X2RzcHAgKmRzcHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpCi17Ci0J aW5mb1tkc3BwLT5pZHhdLnN0YXRlID0gYWQ0X3N0YXRlX2lwY3M7Ci0JcHJfZGVidWcoIiVzKCk6 IEFEIHN0YXRlIG1vdmUgdG8gaXBjc1xuIiwgX19mdW5jX18pOwotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IGFkNF9pcGNfcmVzZXRfc2V0dXBfaXBjcihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRz cHAsCi0JCXN0cnVjdCBkcHVfYWRfaHdfY2ZnICpjZmcpCi17Ci0JaW50IHJldDsKLQl1MzIgc3Ry ZW5ndGggPSAwLCBpID0gMDsKLQlzdHJ1Y3QgZHB1X2h3X21peGVyICpod19sbTsKLQotCS8qIFJl YWQgQUQgY2FsY3VsYXRvciBzdHJlbmd0aCBvdXRwdXQgZHVyaW5nIHRoZSAyIGZyYW1lcyBvZiBt YW51YWwKLQkgKiBzdHJlbmd0aCBtb2RlLCBhbmQgYXNzaWduIHRoZSBzdHJlbmd0aCBvdXRwdXQg dG8gbGFzdF9zdHIKLQkgKiB3aGVuIGZyYW1lIGNvdW50IHJlYWNoZXMgQURfSVBDX0ZSQU1FX0NP VU5UIHRvIGF2b2lkIGZsaWNrZXJzCi0JICogY2F1c2VkIGJ5IHN0cmVuZ3RoIHdhcyBub3QgY29u dmVyZ2VkIGJlZm9yZSBlbnRlcmluZyBJUEMgbW9kZQotCSAqLwotCWh3X2xtID0gY2ZnLT5od19j ZmctPm1peGVyX2luZm87Ci0JaWYgKChjZmctPmh3X2NmZy0+bnVtX29mX21peGVycyA9PSAyKSAm JiBod19sbS0+Y2ZnLnJpZ2h0X21peGVyKSB7Ci0JCS8qIHRoaXMgQUQgY29yZSBpcyB0aGUgc2Fs dmUgY29yZSAqLwotCQlmb3IgKGkgPSBEU1BQXzA7IGkgPCBEU1BQX01BWDsgaSsrKSB7Ci0JCQlp ZiAoaW5mb1tpXS5pc19tYXN0ZXIpIHsKLQkJCQlzdHJlbmd0aCA9IGluZm9baV0ubGFzdF9zdHI7 Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJlbmd0aCA9IERQVV9SRUdf UkVBRCgmZHNwcC0+aHcsCi0JCQkJZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgMHg0Yyk7Ci0J CXByX2RlYnVnKCIlcygpOiBBRCBzdHJlbmd0aCA9ICVkXG4iLCBfX2Z1bmNfXywgc3RyZW5ndGgp OwotCX0KLQotCWlmIChpbmZvW2RzcHAtPmlkeF0uZnJhbWVfY291bnQgPT0gQURfSVBDX0ZSQU1F X0NPVU5UKSB7Ci0JCWluZm9bZHNwcC0+aWR4XS5zdGF0ZSA9IGFkNF9zdGF0ZV9ydW47Ci0JCXBy X2RlYnVnKCIlcygpOiBBRCBzdGF0ZSBtb3ZlIHRvIHJ1blxuIiwgX19mdW5jX18pOwotCQlpbmZv W2RzcHAtPmlkeF0ubGFzdF9zdHIgPSBzdHJlbmd0aDsKLQkJcmV0ID0gYWQ0X2NmZ19pcGNfcmVz ZXQoZHNwcCwgY2ZnKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfSBlbHNlIHsKLQkJ aW5mb1tkc3BwLT5pZHhdLmZyYW1lX2NvdW50Kys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgYWQ0X2NmZ19pcGNfcmVzZXQoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlz dHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewotCXUzMiBibGtfb2Zmc2V0OwotCi0JLyogcmV2 ZXJ0IG1hbnVhbCBzdHJlbmd0aCAqLwotCS8qIHRmIGNvbnRyb2wgKi8KLQlibGtfb2Zmc2V0ID0g MHgzNDsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywgZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNl ICsgYmxrX29mZnNldCwKLQkJaW5mb1tkc3BwLT5pZHhdLnRmX2N0cmwpOwotCS8qIHZjX2NvbnRy b2xfMCAqLwotCWJsa19vZmZzZXQgPSAweDEzODsKLQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywg ZHNwcC0+Y2FwLT5zYmxrLT5hZC5iYXNlICsgYmxrX29mZnNldCwKLQkJaW5mb1tkc3BwLT5pZHhd LnZjX2NvbnRyb2xfMCk7Ci0KLQkvKiByZXNldCBjYWNoZWQgQUxTLCBiYWNrbGlnaHQgYW5kIGFz c2VydGl2ZW5lc3MgKi8KLQlpZiAoaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hbHMgIT0gVTY0X01B WCkgewotCQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywKLQkJCQlkc3BwLT5jYXAtPnNibGstPmFk LmJhc2UgKyAweDI4LAotCQkJCWluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYWxzKTsKLQkJaW5mb1tk c3BwLT5pZHhdLmxhc3RfYWxzID0gaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hbHM7Ci0JCWluZm9b ZHNwcC0+aWR4XS5jYWNoZWRfYWxzID0gVTY0X01BWDsKLQl9Ci0JaWYgKGluZm9bZHNwcC0+aWR4 XS5jYWNoZWRfYmwgIT0gVTY0X01BWCkgewotCQlEUFVfUkVHX1dSSVRFKCZkc3BwLT5odywKLQkJ CQlkc3BwLT5jYXAtPnNibGstPmFkLmJhc2UgKyAweDJjLAotCQkJCWluZm9bZHNwcC0+aWR4XS5j YWNoZWRfYmwpOwotCQlpbmZvW2RzcHAtPmlkeF0ubGFzdF9ibCA9IGluZm9bZHNwcC0+aWR4XS5j YWNoZWRfYmw7Ci0JCWluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYmwgPSBVNjRfTUFYOwotCX0KLQlp ZiAoaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hc3NlcnRpdmUgIT0gVThfTUFYKSB7Ci0JCURQVV9S RUdfV1JJVEUoJmRzcHAtPmh3LAotCQkJCWRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIDB4MzAs Ci0JCQkJaW5mb1tkc3BwLT5pZHhdLmNhY2hlZF9hc3NlcnRpdmUpOwotCQlpbmZvW2RzcHAtPmlk eF0ubGFzdF9hc3NlcnRpdmUgPQotCQkJCWluZm9bZHNwcC0+aWR4XS5jYWNoZWRfYXNzZXJ0aXZl OwotCQlpbmZvW2RzcHAtPmlkeF0uY2FjaGVkX2Fzc2VydGl2ZSA9IFU4X01BWDsKLQl9Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDRfaXBjX3Jlc2V0X3NldHVwX3N0YXJ0dXAoc3Ry dWN0IGRwdV9od19kc3BwICpkc3BwLAotCQlzdHJ1Y3QgZHB1X2FkX2h3X2NmZyAqY2ZnKQotewot CXUzMiBibGtfb2Zmc2V0OwotCi0JaWYgKGluZm9bZHNwcC0+aWR4XS5mcmFtZV9jb3VudCA9PSBB RF9JUENfRlJBTUVfQ09VTlQpIHsKLQkJaW5mb1tkc3BwLT5pZHhdLnN0YXRlID0gYWQ0X3N0YXRl X3J1bjsKLQkJcHJfZGVidWcoIiVzKCk6IEFEIHN0YXRlIG1vdmUgdG8gcnVuXG4iLCBfX2Z1bmNf Xyk7Ci0KLQkJLyogcmV2ZXJ0IGVuZm9yY2UgMCBpbml0aWFsIHN0cmVuZ3RoICovCi0JCS8qIGly ZHhfY29udHJvbF8wICovCi0JCWJsa19vZmZzZXQgPSAweDEzYzsKLQkJRFBVX1JFR19XUklURSgm ZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkJaW5m b1tkc3BwLT5pZHhdLmlyZHhfY29udHJvbF8wKTsKLQkJLyogYXNzZXJ0aXZlbmVzcyAqLwotCQli bGtfb2Zmc2V0ID0gMHgzMDsKLQkJRFBVX1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+ c2Jsay0+YWQuYmFzZSArIGJsa19vZmZzZXQsCi0JCQkJaW5mb1tkc3BwLT5pZHhdLmxhc3RfYXNz ZXJ0aXZlKTsKLQkJLyogdGYgY29udHJvbCAqLwotCQlibGtfb2Zmc2V0ID0gMHgzNDsKLQkJRFBV X1JFR19XUklURSgmZHNwcC0+aHcsIGRzcHAtPmNhcC0+c2Jsay0+YWQuYmFzZSArIGJsa19vZmZz ZXQsCi0JCQkJaW5mb1tkc3BwLT5pZHhdLnRmX2N0cmwpOwotCX0gZWxzZSB7Ci0JCWluZm9bZHNw cC0+aWR4XS5mcmFtZV9jb3VudCsrOwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMKaW5kZXggOGU3NzljMC4uN2E3 YzAyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2Nh dGFsb2cuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxv Zy5jCkBAIC0zMiwxNCArMzIsNiBAQAogI2RlZmluZSBNSVhFUl9TRE04NDVfTUFTSyBcCiAJKEJJ VChEUFVfTUlYRVJfU09VUkNFU1BMSVQpIHwgQklUKERQVV9ESU1fTEFZRVIpKQogCi0jZGVmaW5l IERTUFBfU0RNODQ1X01BU0sgXAotCShCSVQoRFBVX0RTUFBfSUdDKSB8IEJJVChEUFVfRFNQUF9Q Q0MpIHwgQklUKERQVV9EU1BQX0dDKSB8XAotCUJJVChEUFVfRFNQUF9IU0lDKSB8IEJJVChEUFVf RFNQUF9HQU1VVCkgfCBCSVQoRFBVX0RTUFBfSElTVCkgfFwKLQlCSVQoRFBVX0RTUFBfTUVNQ09M T1IpIHwgQklUKERQVV9EU1BQX1NJWFpPTkUpIHwgQklUKERQVV9EU1BQX1ZMVVQpKQotCi0jZGVm aW5lIERTUFBfQURfU0RNODQ1X01BU0sgXAotCShEU1BQX1NETTg0NV9NQVNLIHwgQklUKERQVV9E U1BQX0FEKSkKLQogI2RlZmluZSBQSU5HUE9OR19TRE04NDVfTUFTSyBCSVQoRFBVX1BJTkdQT05H X0RJVEhFUikKIAogI2RlZmluZSBQSU5HUE9OR19TRE04NDVfU1BMSVRfTUFTSyBcCkBAIC0yNDgs NzYgKzI0MCwzMyBAQAogCX0sCiB9OwogCi0jZGVmaW5lIExNX0JMSyhfbmFtZSwgX2lkLCBfYmFz ZSwgX2RzcHAsIF9kcywgX3BwLCBfbG1wYWlyKSBcCisjZGVmaW5lIExNX0JMSyhfbmFtZSwgX2lk LCBfYmFzZSwgX2RzLCBfcHAsIF9sbXBhaXIpIFwKIAl7IFwKIAkubmFtZSA9IF9uYW1lLCAuaWQg PSBfaWQsIFwKIAkuYmFzZSA9IF9iYXNlLCAubGVuID0gMHgzMjAsIFwKIAkuZmVhdHVyZXMgPSBN SVhFUl9TRE04NDVfTUFTSywgXAogCS5zYmxrID0gJnNkbTg0NV9sbV9zYmxrLCBcCi0JLmRzcHAg PSBfZHNwcCwgLmRzID0gX2RzLCBcCisJLmRzID0gX2RzLCBcCiAJLnBpbmdwb25nID0gX3BwLCBc CiAJLmxtX3BhaXJfbWFzayA9ICgxIDw8IF9sbXBhaXIpIFwKIAl9CisKIHN0YXRpYyBzdHJ1Y3Qg ZHB1X2xtX2NmZyBzZG04NDVfbG1bXSA9IHsKLQlMTV9CTEsoImxtXzAiLCBMTV8wLCAweDQ1MDAw LCBEU1BQXzAsCisJTE1fQkxLKCJsbV8wIiwgTE1fMCwgMHg0NTAwMCwKIAkJRFNfMCwgUElOR1BP TkdfMCwgTE1fMSksCi0JTE1fQkxLKCJsbV8xIiwgTE1fMSwgMHg0NjAwMCwgRFNQUF8xLAorCUxN X0JMSygibG1fMSIsIExNXzEsIDB4NDYwMDAsCiAJCURTXzEsIFBJTkdQT05HXzEsIExNXzApLAot CUxNX0JMSygibG1fMiIsIExNXzIsIDB4NDcwMDAsIERTUFBfMiwKKwlMTV9CTEsoImxtXzIiLCBM TV8yLCAweDQ3MDAwLAogCQlEU19NQVgsIFBJTkdQT05HXzIsIExNXzUpLAotCUxNX0JMSygibG1f MyIsIExNXzMsIDB4MCwgRFNQUF9NQVgsCisJTE1fQkxLKCJsbV8zIiwgTE1fMywgMHgwLAogCQlE U19NQVgsIFBJTkdQT05HX01BWCwgMCksCi0JTE1fQkxLKCJsbV80IiwgTE1fNCwgMHgwLCBEU1BQ X01BWCwKKwlMTV9CTEsoImxtXzQiLCBMTV80LCAweDAsCiAJCURTX01BWCwgUElOR1BPTkdfTUFY LCAwKSwKLQlMTV9CTEsoImxtXzUiLCBMTV81LCAweDRhMDAwLCBEU1BQXzMsCisJTE1fQkxLKCJs bV81IiwgTE1fNSwgMHg0YTAwMCwKIAkJRFNfTUFYLCBQSU5HUE9OR18zLCBMTV8yKSwKIH07CiAK IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCi0gKiBEU1BQIHN1YiBibG9ja3MgY29uZmlnCi0gKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3Qg ZHB1X2RzcHBfdG9wX2NmZyBzZG04NDVfZHNwcF90b3AgPSB7Ci0JLm5hbWUgPSAiZHNwcF90b3Ai LCAuYmFzZSA9IDB4MTMwMCwgLmxlbiA9IDB4YwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBk cHVfZHNwcF9zdWJfYmxrcyBzZG04NDVfZHNwcF9zYmxrID0gewotCS5pZ2MgPSB7LmlkID0gRFBV X0RTUFBfSUdDLCAuYmFzZSA9IDB4MCwKLQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDMwMDAx fSwKLQkucGNjID0gey5pZCA9IERQVV9EU1BQX1BDQywgLmJhc2UgPSAweDE3MDAsCi0JCS5sZW4g PSAweDAsIC52ZXJzaW9uID0gMHg0MDAwMH0sCi0JLmdjID0gey5pZCA9IERQVV9EU1BQX0dDLCAu YmFzZSA9IDB4MTdjMCwKLQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA4fSwKLQkuaHNp YyA9IHsuaWQgPSBEUFVfRFNQUF9IU0lDLCAuYmFzZSA9IDB4ODAwLAotCQkubGVuID0gMHgwLCAu dmVyc2lvbiA9IDB4MTAwMDd9LAotCS5tZW1jb2xvciA9IHsuaWQgPSBEUFVfRFNQUF9NRU1DT0xP UiwgLmJhc2UgPSAweDg4MCwKLQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA3fSwKLQku c2l4em9uZSA9IHsuaWQgPSBEUFVfRFNQUF9TSVhaT05FLCAuYmFzZSA9IDB4OTAwLAotCQkubGVu ID0gMHgwLCAudmVyc2lvbiA9IDB4MTAwMDd9LAotCS5nYW11dCA9IHsuaWQgPSBEUFVfRFNQUF9H QU1VVCwgLmJhc2UgPSAweDEwMDAsCi0JCS5sZW4gPSAweDAsIC52ZXJzaW9uID0gMHg0MDAwMH0s Ci0JLmhpc3QgPSB7LmlkID0gRFBVX0RTUFBfSElTVCwgLmJhc2UgPSAweDgwMCwKLQkJLmxlbiA9 IDB4MCwgLnZlcnNpb24gPSAweDEwMDA3fSwKLQkvKiBUT0RPIDogTW92ZSBBRCBvdXQgb2YgRFNQ UCBjb25maWcgKi8KLQkudmx1dCA9IHsuaWQgPSBEUFVfRFNQUF9WTFVULCAuYmFzZSA9IDB4YTAw LAotCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4MTAwMDh9LAotfTsKLQotI2RlZmluZSBEU1BQ X0JMSyhfbmFtZSwgX2lkLCBfYmFzZSkgXAotCXtcCi0JLm5hbWUgPSBfbmFtZSwgLmlkID0gX2lk LCBcCi0JLmJhc2UgPSBfYmFzZSwgLmxlbiA9IDB4MTdlMCwgXAotCS5mZWF0dXJlcyA9IERTUFBf U0RNODQ1X01BU0ssIFwKLQkuc2JsayA9ICZzZG04NDVfZHNwcF9zYmxrLCBcCi0JfQotCi1zdGF0 aWMgc3RydWN0IGRwdV9kc3BwX2NmZyBzZG04NDVfZHNwcFtdID0gewotCURTUFBfQkxLKCJkc3Bw XzAiLCBEU1BQXzAsIDB4NTUwMDApLAotCURTUFBfQkxLKCJkc3BwXzEiLCBEU1BQXzEsIDB4NTcw MDApLAotCURTUFBfQkxLKCJkc3BwXzIiLCBEU1BQXzIsIDB4NTkwMDApLAotCURTUFBfQkxLKCJk c3BwXzMiLCBEU1BQXzMsIDB4NWIwMDApLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERTIHN1YiBibG9ja3Mg Y29uZmlnCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2RzX3RvcF9jZmcgc2RtODQ1 X2RzX3RvcCA9IHsKQEAgLTU2MCw5ICs1MDksNiBAQCB2b2lkIHNkbTg0NV9jZmdfaW5pdChzdHJ1 Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQogCQkuc3NwcCA9IHNkbTg0NV9zc3BwLAogCQkubWl4 ZXJfY291bnQgPSBBUlJBWV9TSVpFKHNkbTg0NV9sbSksCiAJCS5taXhlciA9IHNkbTg0NV9sbSwK LQkJLmRzcHBfdG9wID0gc2RtODQ1X2RzcHBfdG9wLAotCQkuZHNwcF9jb3VudCA9IEFSUkFZX1NJ WkUoc2RtODQ1X2RzcHApLAotCQkuZHNwcCA9IHNkbTg0NV9kc3BwLAogCQkuZHNfY291bnQgPSBB UlJBWV9TSVpFKHNkbTg0NV9kcyksCiAJCS5kcyA9IHNkbTg0NV9kcywKIAkJLnBpbmdwb25nX2Nv dW50ID0gQVJSQVlfU0laRShzZG04NDVfcHApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19jYXRhbG9nLmgKaW5kZXggMzliZWMwYS4uY2Q0ZWQ4YiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5oCkBAIC02MywxMSAr NjMsNiBAQAogCiAjZGVmaW5lIENSVENfRFVBTF9NSVhFUlMJMgogCi0jZGVmaW5lIERQVV9DT0xP Ul9QUk9DRVNTX1ZFUihNQUpPUiwgTUlOT1IpIFwKLQkJKCgoKE1BSk9SKSAmIDB4RkZGRikgPDwg MTYpIHwgKCgoTUlOT1IpICYgMHhGRkZGKSkpCi0jZGVmaW5lIERQVV9DT0xPUl9QUk9DRVNTX01B Sk9SKHZlcnNpb24pICgoKHZlcnNpb24pICYgMHhGRkZGMDAwMCkgPj4gMTYpCi0jZGVmaW5lIERQ VV9DT0xPUl9QUk9DRVNTX01JTk9SKHZlcnNpb24pICgodmVyc2lvbikgJiAweEZGRkYpCi0KICNk ZWZpbmUgTUFYX1hJTl9DT1VOVCAxNgogCiAvKioKQEAgLTEwOSwxMCArMTA0LDYgQEAgZW51bSB7 CiAgKiBARFBVX1NTUFBfU0NBTEVSX1JHQiwgICAgIFJHQiBTY2FsZXIsIHN1cHBvcnRlZCBieSBS R0IgcGlwZXMKICAqIEBEUFVfU1NQUF9DU0MsICAgICAgICAgICAgU3VwcG9ydCBvZiBDb2xvciBz cGFjZSBjb252ZXJpb24KICAqIEBEUFVfU1NQUF9DU0NfMTBCSVQsICAgICAgU3VwcG9ydCBvZiAx MC1iaXQgQ29sb3Igc3BhY2UgY29udmVyc2lvbgotICogQERQVV9TU1BQX0hTSUMsICAgICAgICAg ICBHbG9iYWwgSFNJQyBjb250cm9sCi0gKiBARFBVX1NTUFBfTUVNQ09MT1IgICAgICAgIE1lbW9y eSBDb2xvciBTdXBwb3J0Ci0gKiBARFBVX1NTUFBfSUdDLCAgICAgICAgICAgIEludmVyc2UgZ2Ft bWEgY29ycmVjdGlvbgotICogQERQVV9TU1BQX1BDQywgICAgICAgICAgICBDb2xvciBjb3JyZWN0 aW9uIHN1cHBvcnQKICAqIEBEUFVfU1NQUF9DVVJTT1IsICAgICAgICAgU1NQUCBjYW4gYmUgdXNl ZCBhcyBhIGN1cnNvciBsYXllcgogICogQERQVV9TU1BQX1FPUywgICAgICAgICAgICBTU1BQIHN1 cHBvcnQgUW9TIGNvbnRyb2wsIGRhbmdlci9zYWZlL2NyZXEKICAqIEBEUFVfU1NQUF9RT1NfOExW TCwgICAgICAgU1NQUCBzdXBwb3J0IDgtbGV2ZWwgUW9TIGNvbnRyb2wKQEAgLTEzMSwxMCArMTIy LDYgQEAgZW51bSB7CiAJRFBVX1NTUFBfU0NBTEVSX1JHQiwKIAlEUFVfU1NQUF9DU0MsCiAJRFBV X1NTUFBfQ1NDXzEwQklULAotCURQVV9TU1BQX0hTSUMsCi0JRFBVX1NTUFBfTUVNQ09MT1IsCi0J RFBVX1NTUFBfSUdDLAotCURQVV9TU1BQX1BDQywKIAlEUFVfU1NQUF9DVVJTT1IsCiAJRFBVX1NT UFBfUU9TLAogCURQVV9TU1BQX1FPU184TFZMLApAQCAtMTY0LDM2ICsxNTEsNiBAQCBlbnVtIHsK IH07CiAKIC8qKgotICogRFNQUCBzdWItYmxvY2tzCi0gKiBARFBVX0RTUFBfSUdDICAgICAgICAg ICAgIERTUFAgSW52ZXJzZSBnYW1tYSBjb3JyZWN0aW9uIGJsb2NrCi0gKiBARFBVX0RTUFBfUEND ICAgICAgICAgICAgIFBhbmVsIGNvbG9yIGNvcnJlY3Rpb24gYmxvY2sKLSAqIEBEUFVfRFNQUF9H QyAgICAgICAgICAgICAgR2FtbWEgY29ycmVjdGlvbiBibG9jawotICogQERQVV9EU1BQX0hTSUMg ICAgICAgICAgICBHbG9iYWwgSFNJQyBibG9jawotICogQERQVV9EU1BQX01FTUNPTE9SICAgICAg ICBNZW1vcnkgQ29sb3IgYmxvY2sKLSAqIEBEUFVfRFNQUF9TSVhaT05FICAgICAgICAgU2l4IHpv bmUgYmxvY2sKLSAqIEBEUFVfRFNQUF9HQU1VVCAgICAgICAgICAgR2FtdXQgYmxvYwotICogQERQ VV9EU1BQX0RJVEhFUiAgICAgICAgICBEaXRoZXIgYmxvY2sKLSAqIEBEUFVfRFNQUF9ISVNUICAg ICAgICAgICAgSGlzdG9ncmFtIGJsb2NrCi0gKiBARFBVX0RTUFBfVkxVVCAgICAgICAgICAgIFBB IFZMVVQgYmxvY2sKLSAqIEBEUFVfRFNQUF9BRCAgICAgICAgICAgICAgQUQgYmxvY2sKLSAqIEBE UFVfRFNQUF9NQVggICAgICAgICAgICAgbWF4aW11bSB2YWx1ZQotICovCi1lbnVtIHsKLQlEUFVf RFNQUF9JR0MgPSAweDEsCi0JRFBVX0RTUFBfUENDLAotCURQVV9EU1BQX0dDLAotCURQVV9EU1BQ X0hTSUMsCi0JRFBVX0RTUFBfTUVNQ09MT1IsCi0JRFBVX0RTUFBfU0lYWk9ORSwKLQlEUFVfRFNQ UF9HQU1VVCwKLQlEUFVfRFNQUF9ESVRIRVIsCi0JRFBVX0RTUFBfSElTVCwKLQlEUFVfRFNQUF9W TFVULAotCURQVV9EU1BQX0FELAotCURQVV9EU1BQX01BWAotfTsKLQotLyoqCiAgKiBQSU5HUE9O RyBzdWItYmxvY2tzCiAgKiBARFBVX1BJTkdQT05HX1RFICAgICAgICAgVGVhciBjaGVjayBibG9j awogICogQERQVV9QSU5HUE9OR19URTIgICAgICAgIEFkZGl0aW9uYWwgdGVhciBjaGVjayBibG9j ayBmb3Igc3BsaXQgcGlwZXMKQEAgLTQ2OCwyMCArNDI1LDYgQEAgc3RydWN0IGRwdV9sbV9zdWJf YmxrcyB7CiAJc3RydWN0IGRwdV9wcF9ibGsgZ2M7CiB9OwogCi1zdHJ1Y3QgZHB1X2RzcHBfc3Vi X2Jsa3MgewotCXN0cnVjdCBkcHVfcHBfYmxrIGlnYzsKLQlzdHJ1Y3QgZHB1X3BwX2JsayBwY2M7 Ci0Jc3RydWN0IGRwdV9wcF9ibGsgZ2M7Ci0Jc3RydWN0IGRwdV9wcF9ibGsgaHNpYzsKLQlzdHJ1 Y3QgZHB1X3BwX2JsayBtZW1jb2xvcjsKLQlzdHJ1Y3QgZHB1X3BwX2JsayBzaXh6b25lOwotCXN0 cnVjdCBkcHVfcHBfYmxrIGdhbXV0OwotCXN0cnVjdCBkcHVfcHBfYmxrIGRpdGhlcjsKLQlzdHJ1 Y3QgZHB1X3BwX2JsayBoaXN0OwotCXN0cnVjdCBkcHVfcHBfYmxrIGFkOwotCXN0cnVjdCBkcHVf cHBfYmxrIHZsdXQ7Ci19OwotCiBzdHJ1Y3QgZHB1X3Bpbmdwb25nX3N1Yl9ibGtzIHsKIAlzdHJ1 Y3QgZHB1X3BwX2JsayB0ZTsKIAlzdHJ1Y3QgZHB1X3BwX2JsayB0ZTI7CkBAIC01ODMsNyArNTI2 LDYgQEAgc3RydWN0IGRwdV9zc3BwX2NmZyB7CiAgKiBAYmFzZSAgICAgICAgICAgICAgIHJlZ2lz dGVyIG9mZnNldCBvZiB0aGlzIGJsb2NrCiAgKiBAZmVhdHVyZXMgICAgICAgICAgIGJpdCBtYXNr IGlkZW50aWZ5aW5nIHN1Yi1ibG9ja3MvZmVhdHVyZXMKICAqIEBzYmxrOiAgICAgICAgICAgICAg TE0gU3ViLWJsb2NrcyBpbmZvcm1hdGlvbgotICogQGRzcHA6ICAgICAgICAgICAgICBJRCBvZiBj b25uZWN0ZWQgRFNQUCwgRFNQUF9NQVggaWYgdW5zdXBwb3J0ZWQKICAqIEBwaW5ncG9uZzogICAg ICAgICAgSUQgb2YgY29ubmVjdGVkIFBpbmdQb25nLCBQSU5HUE9OR19NQVggaWYgdW5zdXBwb3J0 ZWQKICAqIEBkczogICAgICAgICAgICAgICAgSUQgb2YgY29ubmVjdGVkIERTLCBEU19NQVggaWYg dW5zdXBwb3J0ZWQKICAqIEBsbV9wYWlyX21hc2s6ICAgICAgQml0bWFzayBvZiBMTXMgdGhhdCBj YW4gYmUgY29udHJvbGxlZCBieSBzYW1lIENUTApAQCAtNTkxLDM3ICs1MzMsMTIgQEAgc3RydWN0 IGRwdV9zc3BwX2NmZyB7CiBzdHJ1Y3QgZHB1X2xtX2NmZyB7CiAJRFBVX0hXX0JMS19JTkZPOwog CWNvbnN0IHN0cnVjdCBkcHVfbG1fc3ViX2Jsa3MgKnNibGs7Ci0JdTMyIGRzcHA7CiAJdTMyIHBp bmdwb25nOwogCXUzMiBkczsKIAl1bnNpZ25lZCBsb25nIGxtX3BhaXJfbWFzazsKIH07CiAKIC8q KgotICogc3RydWN0IGRwdV9kc3BwX2NmZyAtIGluZm9ybWF0aW9uIG9mIERTUFAgdG9wIGJsb2Nr Ci0gKiBAaWQgICAgICAgICAgICAgICAgIGVudW0gaWRlbnRpZnlpbmcgdGhpcyBibG9jawotICog QGJhc2UgICAgICAgICAgICAgICByZWdpc3RlciBvZmZzZXQgb2YgdGhpcyBibG9jawotICogQGZl YXR1cmVzICAgICAgICAgICBiaXQgbWFzayBpZGVudGlmeWluZyBzdWItYmxvY2tzL2ZlYXR1cmVz Ci0gKiAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBieSB0aGlzIGJsb2NrCi0gKi8KLXN0 cnVjdCBkcHVfZHNwcF90b3BfY2ZnICB7Ci0JRFBVX0hXX0JMS19JTkZPOwotfTsKLQotLyoqCi0g KiBzdHJ1Y3QgZHB1X2RzcHBfY2ZnIC0gaW5mb3JtYXRpb24gb2YgRFNQUCBibG9ja3MKLSAqIEBp ZCAgICAgICAgICAgICAgICAgZW51bSBpZGVudGlmeWluZyB0aGlzIGJsb2NrCi0gKiBAYmFzZSAg ICAgICAgICAgICAgIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGlzIGJsb2NrCi0gKiBAZmVhdHVyZXMg ICAgICAgICAgIGJpdCBtYXNrIGlkZW50aWZ5aW5nIHN1Yi1ibG9ja3MvZmVhdHVyZXMKLSAqICAg ICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGJ5IHRoaXMgYmxvY2sKLSAqIEBzYmxrICAgICAg ICAgICAgICAgc3ViLWJsb2NrcyBpbmZvcm1hdGlvbgotICovCi1zdHJ1Y3QgZHB1X2RzcHBfY2Zn ICB7Ci0JRFBVX0hXX0JMS19JTkZPOwotCWNvbnN0IHN0cnVjdCBkcHVfZHNwcF9zdWJfYmxrcyAq c2JsazsKLX07Ci0KLS8qKgogICogc3RydWN0IGRwdV9kc190b3BfY2ZnIC0gaW5mb3JtYXRpb24g b2YgZGVzdCBzY2FsZXIgdG9wCiAgKiBAaWQgICAgICAgICAgICAgICBlbnVtIGlkZW50aWZ5aW5n IHRoaXMgYmxvY2sKICAqIEBiYXNlICAgICAgICAgICAgIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGlz IGJsb2NrCkBAIC04OTAsMTEgKzgwNyw2IEBAIHN0cnVjdCBkcHVfbWRzc19jZmcgewogCXUzMiBt aXhlcl9jb3VudDsKIAlzdHJ1Y3QgZHB1X2xtX2NmZyAqbWl4ZXI7CiAKLQlzdHJ1Y3QgZHB1X2Rz cHBfdG9wX2NmZyBkc3BwX3RvcDsKLQotCXUzMiBkc3BwX2NvdW50OwotCXN0cnVjdCBkcHVfZHNw cF9jZmcgKmRzcHA7Ci0KIAl1MzIgZHNfY291bnQ7CiAJc3RydWN0IGRwdV9kc19jZmcgKmRzOwog CkBAIC05NDIsNyArODU0LDYgQEAgc3RydWN0IGRwdV9tZHNzX2h3X2NmZ19oYW5kbGVyIHsKICNk ZWZpbmUgQkxLX0RNQShzKSAoKHMpLT5kbWEpCiAjZGVmaW5lIEJMS19DVVJTT1IocykgKChzKS0+ Y3Vyc29yKQogI2RlZmluZSBCTEtfTUlYRVIocykgKChzKS0+bWl4ZXIpCi0jZGVmaW5lIEJMS19E U1BQKHMpICgocyktPmRzcHApCiAjZGVmaW5lIEJMS19EUyhzKSAoKHMpLT5kcykKICNkZWZpbmUg QkxLX1BJTkdQT05HKHMpICgocyktPnBpbmdwb25nKQogI2RlZmluZSBCTEtfQ0RNKHMpICgocykt PmNkbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19j b2xvcl9wcm9jX2NvbW1vbl92NC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2NvbG9yX3Byb2NfY29tbW9uX3Y0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDQ5NWU2NzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2NvbG9yX3Byb2NfY29tbW9uX3Y0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBA Ci0vKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25s eSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfRFBVX0hXX0NPTE9SX1BS T0NfQ09NTU9OX1Y0X0hfCi0jZGVmaW5lIF9EUFVfSFdfQ09MT1JfUFJPQ19DT01NT05fVjRfSF8K LQotI2RlZmluZSBHQU1VVF9UQUJMRV9TRUxfT0ZGIDB4NAotI2RlZmluZSBHQU1VVF9VUFBFUl9D T0xPUl9PRkYgMHg4Ci0jZGVmaW5lIEdBTVVUX0xPV0VSX0NPTE9SX09GRiAweGMKLSNkZWZpbmUg R0FNVVRfU0NBTEVBX09GRlNFVF9PRkYgMHgxMAotI2RlZmluZSBHQU1VVF9TQ0FMRUJfT0ZGU0VU X09GRiAweGUwCi0jZGVmaW5lIEdBTVVUX1RBQkxFMF9TRUwgQklUKDEyKQotI2RlZmluZSBHQU1V VF9NQVBfRU4gQklUKDEpCi0jZGVmaW5lIEdBTVVUX0VOIEJJVCgwKQotI2RlZmluZSBHQU1VVF9N T0RFXzEzQl9PRkYgNjQwCi0jZGVmaW5lIEdBTVVUX01PREVfNV9PRkYgMTI0OAotCi1lbnVtIHsK LQlnYW11dF9tb2RlXzE3ID0gMCwKLQlnYW11dF9tb2RlXzUsCi0JZ2FtdXRfbW9kZV8xM2EsCi0J Z2FtdXRfbW9kZV8xM2IsCi19OwotCi0jZGVmaW5lIEdDX0MwX09GRiAweDQKLSNkZWZpbmUgR0Nf QzBfSU5ERVhfT0ZGIDB4OAotI2RlZmluZSBHQ184Ql9ST1VORF9FTiBCSVQoMSkKLSNkZWZpbmUg R0NfRU4gQklUKDApCi0jZGVmaW5lIEdDX1RCTF9OVU0gMwotI2RlZmluZSBHQ19MVVRfU1dBUF9P RkYgMHgxYwotCi0jZGVmaW5lIElHQ19UQkxfTlVNIDMKLSNkZWZpbmUgSUdDX0RJVEhFUl9PRkYg MHg3ZTAKLSNkZWZpbmUgSUdDX09QTU9ERV9PRkYgMHgwCi0jZGVmaW5lIElHQ19DMF9PRkYgMHgw Ci0jZGVmaW5lIElHQ19EQVRBX01BU0sgKEJJVCgxMikgLSAxKQotI2RlZmluZSBJR0NfRFNQUF9T RUxfTUFTS19NQVggKEJJVCg0KSAtIDEpCi0jZGVmaW5lIElHQ19EU1BQX1NFTF9NQVNLKG4pIFwK LQkoKElHQ19EU1BQX1NFTF9NQVNLX01BWCAmIH4oMSA8PCAobikpKSA8PCAyOCkKLSNkZWZpbmUg SUdDX0lOREVYX1VQREFURSBCSVQoMjUpCi0jZGVmaW5lIElHQ19FTiBCSVQoMCkKLSNkZWZpbmUg SUdDX0RJUyAwCi0jZGVmaW5lIElHQ19ESVRIRVJfREFUQV9NQVNLIChCSVQoNCkgLSAxKQotCi0j ZGVmaW5lIFBDQ19OVU1fUExBTkVTIDMKLSNkZWZpbmUgUENDX05VTV9DT0VGRiAxMQotI2RlZmlu ZSBQQ0NfRU4gQklUKDApCi0jZGVmaW5lIFBDQ19ESVMgMAotI2RlZmluZSBQQ0NfQ19PRkYgMHg0 Ci0jZGVmaW5lIFBDQ19SX09GRiAweDEwCi0jZGVmaW5lIFBDQ19HX09GRiAweDFjCi0jZGVmaW5l IFBDQ19CX09GRiAweDI4Ci0jZGVmaW5lIFBDQ19SR19PRkYgMHgzNAotI2RlZmluZSBQQ0NfUkJf T0ZGIDB4NDAKLSNkZWZpbmUgUENDX0dCX09GRiAweDRjCi0jZGVmaW5lIFBDQ19SR0JfT0ZGIDB4 NTgKLSNkZWZpbmUgUENDX1JSX09GRiAweDY0Ci0jZGVmaW5lIFBDQ19HR19PRkYgMHg3MAotI2Rl ZmluZSBQQ0NfQkJfT0ZGIDB4N2MKLQotI2VuZGlmIC8qIF9EUFVfSFdfQ09MT1JfUFJPQ19DT01N T05fVjRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19jb2xvcl9wcm9jX3Y0LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfY29sb3JfcHJvY192NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzY5M2E4 Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xv cl9wcm9jX3Y0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyogQ29weXJpZ2h0 IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxkcm0vbXNtX2RybV9wcC5oPgotI2luY2x1ZGUg ImRwdV9od19jb2xvcl9wcm9jX2NvbW1vbl92NC5oIgotI2luY2x1ZGUgImRwdV9od19jb2xvcl9w cm9jX3Y0LmgiCi0KLXN0YXRpYyBpbnQgZHB1X3dyaXRlXzNkX2dhbXV0KHN0cnVjdCBkcHVfaHdf YmxrX3JlZ19tYXAgKmh3LAotCQlzdHJ1Y3QgZHJtX21zbV8zZF9nYW11dCAqcGF5bG9hZCwgdTMy IGJhc2UsCi0JCXUzMiAqb3Bjb2RlKQotewotCXUzMiByZWcsIHRibF9sZW4sIHRibF9vZmYsIHNj YWxlX29mZiwgaSwgajsKLQl1MzIgc2NhbGVfdGJsX2xlbiwgc2NhbGVfdGJsX29mZjsKLQl1MzIg KnNjYWxlX2RhdGE7Ci0KLQlpZiAoIXBheWxvYWQgfHwgIW9wY29kZSB8fCAhaHcpIHsKLQkJRFJN X0VSUk9SKCJpbnZhbGlkIHBheWxvYWQgJXBLIG9wY29kZSAlcEsgaHcgJXBLXG4iLAotCQkJcGF5 bG9hZCwgb3Bjb2RlLCBodyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAocGF5 bG9hZC0+bW9kZSkgewotCWNhc2UgR0FNVVRfM0RfTU9ERV8xNzoKLQkJdGJsX2xlbiA9IEdBTVVU XzNEX01PREUxN19UQkxfU1o7Ci0JCXRibF9vZmYgPSAwOwotCQlzY2FsZV9vZmYgPSBHQU1VVF9T Q0FMRUFfT0ZGU0VUX09GRjsKLQkJKm9wY29kZSA9IGdhbXV0X21vZGVfMTcgPDwgMjsKLQkJYnJl YWs7Ci0JY2FzZSBHQU1VVF8zRF9NT0RFXzEzOgotCQkqb3Bjb2RlID0gKCpvcGNvZGUgJiAoQklU KDQpIC0gMSkpID4+IDI7Ci0JCWlmICgqb3Bjb2RlID09IGdhbXV0X21vZGVfMTNhKQotCQkJKm9w Y29kZSA9IGdhbXV0X21vZGVfMTNiOwotCQllbHNlCi0JCQkqb3Bjb2RlID0gZ2FtdXRfbW9kZV8x M2E7Ci0JCXRibF9sZW4gPSBHQU1VVF8zRF9NT0RFMTNfVEJMX1NaOwotCQl0Ymxfb2ZmID0gKCpv cGNvZGUgPT0gZ2FtdXRfbW9kZV8xM2EpID8gMCA6Ci0JCQlHQU1VVF9NT0RFXzEzQl9PRkY7Ci0J CXNjYWxlX29mZiA9ICgqb3Bjb2RlID09IGdhbXV0X21vZGVfMTNhKSA/Ci0JCQlHQU1VVF9TQ0FM RUFfT0ZGU0VUX09GRiA6IEdBTVVUX1NDQUxFQl9PRkZTRVRfT0ZGOwotCQkqb3Bjb2RlIDw8PSAy OwotCQlicmVhazsKLQljYXNlIEdBTVVUXzNEX01PREVfNToKLQkJKm9wY29kZSA9IGdhbXV0X21v ZGVfNSA8PCAyOwotCQl0YmxfbGVuID0gR0FNVVRfM0RfTU9ERTVfVEJMX1NaOwotCQl0Ymxfb2Zm ID0gR0FNVVRfTU9ERV81X09GRjsKLQkJc2NhbGVfb2ZmID0gR0FNVVRfU0NBTEVCX09GRlNFVF9P RkY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigiaW52YWxpZCBtb2RlICVkXG4i LCBwYXlsb2FkLT5tb2RlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHBheWxvYWQt PmZsYWdzICYgR0FNVVRfM0RfTUFQX0VOKQotCQkqb3Bjb2RlIHw9IEdBTVVUX01BUF9FTjsKLQkq b3Bjb2RlIHw9IEdBTVVUX0VOOwotCi0JZm9yIChpID0gMDsgaSA8IEdBTVVUXzNEX1RCTF9OVU07 IGkrKykgewotCQlyZWcgPSBHQU1VVF9UQUJMRTBfU0VMIDw8IGk7Ci0JCXJlZyB8PSAoKHRibF9v ZmYpICYgKEJJVCgxMSkgLSAxKSk7Ci0JCURQVV9SRUdfV1JJVEUoaHcsIGJhc2UgKyBHQU1VVF9U QUJMRV9TRUxfT0ZGLCByZWcpOwotCQlmb3IgKGogPSAwOyBqIDwgdGJsX2xlbjsgaisrKSB7Ci0J CQlEUFVfUkVHX1dSSVRFKGh3LCBiYXNlICsgR0FNVVRfTE9XRVJfQ09MT1JfT0ZGLAotCQkJCQlw YXlsb2FkLT5jb2xbaV1bal0uYzJfYzEpOwotCQkJRFBVX1JFR19XUklURShodywgYmFzZSArIEdB TVVUX1VQUEVSX0NPTE9SX09GRiwKLQkJCQkJcGF5bG9hZC0+Y29sW2ldW2pdLmMwKTsKLQkJfQot CX0KLQotCWlmICgoKm9wY29kZSAmIEdBTVVUX01BUF9FTikpIHsKLQkJaWYgKHNjYWxlX29mZiA9 PSBHQU1VVF9TQ0FMRUFfT0ZGU0VUX09GRikKLQkJCXNjYWxlX3RibF9sZW4gPSBHQU1VVF8zRF9T Q0FMRV9PRkZfU1o7Ci0JCWVsc2UKLQkJCXNjYWxlX3RibF9sZW4gPSBHQU1VVF8zRF9TQ0FMRUJf T0ZGX1NaOwotCQlmb3IgKGkgPSAwOyBpIDwgR0FNVVRfM0RfU0NBTEVfT0ZGX1RCTF9OVU07IGkr KykgewotCQkJc2NhbGVfdGJsX29mZiA9IGJhc2UgKyBzY2FsZV9vZmYgKwotCQkJCQlpICogc2Nh bGVfdGJsX2xlbiAqIHNpemVvZih1MzIpOwotCQkJc2NhbGVfZGF0YSA9ICZwYXlsb2FkLT5zY2Fs ZV9vZmZbaV1bMF07Ci0JCQlmb3IgKGogPSAwOyBqIDwgc2NhbGVfdGJsX2xlbjsgaisrKQotCQkJ CURQVV9SRUdfV1JJVEUoaHcsCi0JCQkJCXNjYWxlX3RibF9vZmYgKyAoaiAqIHNpemVvZih1MzIp KSwKLQkJCQkJc2NhbGVfZGF0YVtqXSk7Ci0JCX0KLQl9Ci0JRFBVX1JFR19XUklURShodywgYmFz ZSwgKm9wY29kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBfM2RfZ2Ft dXR2NChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1f bXNtXzNkX2dhbXV0ICpwYXlsb2FkOwotCXN0cnVjdCBkcHVfaHdfY3BfY2ZnICpod19jZmcgPSBj Zmc7Ci0JdTMyIG9wX21vZGU7Ci0KLQlpZiAoIWN0eCB8fCAhY2ZnKSB7Ci0JCURSTV9FUlJPUigi aW52YWxpZCBwYXJhbSBjdHggJXBLIGNmZyAlcEtcbiIsIGN0eCwgY2ZnKTsKLQkJcmV0dXJuOwot CX0KLQotCW9wX21vZGUgPSBEUFVfUkVHX1JFQUQoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5n YW11dC5iYXNlKTsKLQlpZiAoIWh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fREVCVUdfRFJJVkVS KCJkaXNhYmxlIGdhbXV0IGZlYXR1cmVcbiIpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBj dHgtPmNhcC0+c2Jsay0+Z2FtdXQuYmFzZSwgMCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwYXlsb2Fk ID0gaHdfY2ZnLT5wYXlsb2FkOwotCWRwdV93cml0ZV8zZF9nYW11dCgmY3R4LT5odywgcGF5bG9h ZCwgY3R4LT5jYXAtPnNibGstPmdhbXV0LmJhc2UsCi0JCSZvcF9tb2RlKTsKLQotfQotCi12b2lk IGRwdV9zZXR1cF9kc3BwX2lnY3YzKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcp Ci17Ci0Jc3RydWN0IGRybV9tc21faWdjX2x1dCAqbHV0X2NmZzsKLQlzdHJ1Y3QgZHB1X2h3X2Nw X2NmZyAqaHdfY2ZnID0gY2ZnOwotCWludCBpID0gMCwgaiA9IDA7Ci0JdTMyICphZGRyID0gTlVM TDsKLQl1MzIgb2Zmc2V0ID0gMDsKLQotCWlmICghY3R4IHx8ICFjZmcpIHsKLQkJRFJNX0VSUk9S KCJpbnZhbGlkIHBhcmFtIGN0eCAlcEsgY2ZnICVwS1xuIiwgY3R4LCBjZmcpOwotCQlyZXR1cm47 Ci0JfQotCi0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiZGlz YWJsZSBpZ2MgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIElHQ19PUE1P REVfT0ZGLCAwKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChod19jZmctPmxlbiAhPSBzaXplb2Yo c3RydWN0IGRybV9tc21faWdjX2x1dCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHNpemUgb2Yg cGF5bG9hZCBsZW4gJWQgZXhwICV6ZFxuIiwKLQkJCQlod19jZmctPmxlbiwgc2l6ZW9mKHN0cnVj dCBkcm1fbXNtX2lnY19sdXQpKTsKLQkJcmV0dXJuOwotCX0KLQotCWx1dF9jZmcgPSBod19jZmct PnBheWxvYWQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSUdDX1RCTF9OVU07IGkrKykgewotCQlhZGRy ID0gbHV0X2NmZy0+YzAgKyAoaSAqIEFSUkFZX1NJWkUobHV0X2NmZy0+YzApKTsKLQkJb2Zmc2V0 ID0gSUdDX0MwX09GRiArIChpICogc2l6ZW9mKHUzMikpOwotCi0JCWZvciAoaiA9IDA7IGogPCBJ R0NfVEJMX0xFTjsgaisrKSB7Ci0JCQlhZGRyW2pdICY9IElHQ19EQVRBX01BU0s7Ci0JCQlhZGRy W2pdIHw9IElHQ19EU1BQX1NFTF9NQVNLKGN0eC0+aWR4IC0gMSk7Ci0JCQlpZiAoaiA9PSAwKQot CQkJCWFkZHJbal0gfD0gSUdDX0lOREVYX1VQREFURTsKLQkJCS8qIElHQyBsdXQgcmVnaXN0ZXJz IGFyZSBwYXJ0IG9mIERTUFAgVG9wIEhXIGJsb2NrICovCi0JCQlEUFVfUkVHX1dSSVRFKCZjdHgt Pmh3X3RvcCwgb2Zmc2V0LCBhZGRyW2pdKTsKLQkJfQotCX0KLQotCWlmIChsdXRfY2ZnLT5mbGFn cyAmIElHQ19ESVRIRVJfRU5BQkxFKSB7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIElHQ19E SVRIRVJfT0ZGLAotCQkJbHV0X2NmZy0+c3RyZW5ndGggJiBJR0NfRElUSEVSX0RBVEFfTUFTSyk7 Ci0JfQotCi0JRFBVX1JFR19XUklURSgmY3R4LT5odywgSUdDX09QTU9ERV9PRkYsIElHQ19FTik7 Ci19Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGNjdjQoc3RydWN0IGRwdV9od19kc3BwICpjdHgs IHZvaWQgKmNmZykKLXsKLQlzdHJ1Y3QgZHB1X2h3X2NwX2NmZyAqaHdfY2ZnID0gY2ZnOwotCXN0 cnVjdCBkcm1fbXNtX3BjYyAqcGNjX2NmZzsKLQlzdHJ1Y3QgZHJtX21zbV9wY2NfY29lZmYgKmNv ZWZmcyA9IE5VTEw7Ci0JaW50IGkgPSAwOwotCXUzMiBiYXNlID0gMDsKLQotCWlmICghY3R4IHx8 ICFjZmcpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHBhcmFtIGN0eCAlcEsgY2ZnICVwS1xuIiwg Y3R4LCBjZmcpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJ RFJNX0RFQlVHX0RSSVZFUigiZGlzYWJsZSBwY2MgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJ VEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSwgMCk7Ci0JCXJldHVybjsKLQl9 Ci0KLQlpZiAoaHdfY2ZnLT5sZW4gIT0gc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BjYykpIHsKLQkJ RFJNX0VSUk9SKCJpbnZhbGlkIHNpemUgb2YgcGF5bG9hZCBsZW4gJWQgZXhwICV6ZFxuIiwKLQkJ CQlod19jZmctPmxlbiwgc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BjYykpOwotCQlyZXR1cm47Ci0J fQotCi0JcGNjX2NmZyA9IGh3X2NmZy0+cGF5bG9hZDsKLQotCWZvciAoaSA9IDA7IGkgPCBQQ0Nf TlVNX1BMQU5FUzsgaSsrKSB7Ci0JCWJhc2UgPSBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyAo aSAqIHNpemVvZih1MzIpKTsKLQkJc3dpdGNoIChpKSB7Ci0JCWNhc2UgMDoKLQkJCWNvZWZmcyA9 ICZwY2NfY2ZnLT5yOwotCQkJRFBVX1JFR19XUklURSgmY3R4LT5odywKLQkJCQliYXNlICsgUEND X1JSX09GRiwgcGNjX2NmZy0+cl9ycik7Ci0JCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LAotCQkJ CWJhc2UgKyBQQ0NfR0dfT0ZGLCBwY2NfY2ZnLT5yX2dnKTsKLQkJCURQVV9SRUdfV1JJVEUoJmN0 eC0+aHcsCi0JCQkJYmFzZSArIFBDQ19CQl9PRkYsIHBjY19jZmctPnJfYmIpOwotCQkJYnJlYWs7 Ci0JCWNhc2UgMToKLQkJCWNvZWZmcyA9ICZwY2NfY2ZnLT5nOwotCQkJRFBVX1JFR19XUklURSgm Y3R4LT5odywKLQkJCQliYXNlICsgUENDX1JSX09GRiwgcGNjX2NmZy0+Z19ycik7Ci0JCQlEUFVf UkVHX1dSSVRFKCZjdHgtPmh3LAotCQkJCWJhc2UgKyBQQ0NfR0dfT0ZGLCBwY2NfY2ZnLT5nX2dn KTsKLQkJCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsCi0JCQkJYmFzZSArIFBDQ19CQl9PRkYsIHBj Y19jZmctPmdfYmIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWNvZWZmcyA9ICZwY2NfY2Zn LT5iOwotCQkJRFBVX1JFR19XUklURSgmY3R4LT5odywKLQkJCQliYXNlICsgUENDX1JSX09GRiwg cGNjX2NmZy0+Yl9ycik7Ci0JCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LAotCQkJCWJhc2UgKyBQ Q0NfR0dfT0ZGLCBwY2NfY2ZnLT5iX2dnKTsKLQkJCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsCi0J CQkJYmFzZSArIFBDQ19CQl9PRkYsIHBjY19jZmctPmJfYmIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1 bHQ6Ci0JCQlEUk1fRVJST1IoImludmFsaWQgcGNjIHBsYW5lOiAlZFxuIiwgaSk7Ci0JCQlyZXR1 cm47Ci0JCX0KLQotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX0NfT0ZGLCBj b2VmZnMtPmMpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX1JfT0ZGLCBj b2VmZnMtPnIpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX0dfT0ZGLCBj b2VmZnMtPmcpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX0JfT0ZGLCBj b2VmZnMtPmIpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX1JHX09GRiwg Y29lZmZzLT5yZyk7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGJhc2UgKyBQQ0NfUkJfT0ZG LCBjb2VmZnMtPnJiKTsKLQkJRFBVX1JFR19XUklURSgmY3R4LT5odywgYmFzZSArIFBDQ19HQl9P RkYsIGNvZWZmcy0+Z2IpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBiYXNlICsgUENDX1JH Ql9PRkYsIGNvZWZmcy0+cmdiKTsKLQl9Ci0KLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgt PmNhcC0+c2Jsay0+cGNjLmJhc2UsIFBDQ19FTik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY29sb3JfcHJvY192NC5oIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2NfdjQuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggYzJmNDQ3ZmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2NfdjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQw ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Ci0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9EUFVfSFdf Q09MT1JfUFJPQ19WNF9IXwotI2RlZmluZSBfRFBVX0hXX0NPTE9SX1BST0NfVjRfSF8KLQotI2lu Y2x1ZGUgImRwdV9od191dGlsLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2NhdGFsb2cuaCIKLSNpbmNs dWRlICJkcHVfaHdfZHNwcC5oIgotLyoqCi0gKiBkcHVfc2V0dXBfZHNwcF8zZF9nYW11dHY0IC0g RnVuY3Rpb24gZm9yIDNkIGdhbXV0IHY0IHZlcnNpb24gZmVhdHVyZQotICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByb2dyYW1taW5nLgotICogQGN0eDogZHNwcCBjdHggcG9pbnRlcgot ICogQGNmZzogcG9pbnRlciB0byBkcHVfaHdfY3BfY2ZnCi0gKi8KLXZvaWQgZHB1X3NldHVwX2Rz cHBfM2RfZ2FtdXR2NChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLS8qKgot ICogZHB1X3NldHVwX2RzcHBfaWdjdjMgLSBGdW5jdGlvbiBmb3IgaWdjIHYzIHZlcnNpb24gZmVh dHVyZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW1taW5nLgotICogQGN0 eDogZHNwcCBjdHggcG9pbnRlcgotICogQGNmZzogcG9pbnRlciB0byBkcHVfaHdfY3BfY2ZnCi0g Ki8KLXZvaWQgZHB1X3NldHVwX2RzcHBfaWdjdjMoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZv aWQgKmNmZyk7Ci0vKioKLSAqIGRwdV9zZXR1cF9kc3BwX3BjY3Y0IC0gRnVuY3Rpb24gZm9yIHBj YyB2NCB2ZXJzaW9uIGZlYXR1cmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9n cmFtbWluZy4KLSAqIEBjdHg6IGRzcHAgY3R4IHBvaW50ZXIKLSAqIEBjZmc6IHBvaW50ZXIgdG8g ZHB1X2h3X2NwX2NmZwotICovCi12b2lkIGRwdV9zZXR1cF9kc3BwX3BjY3Y0KHN0cnVjdCBkcHVf aHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0jZW5kaWYgLyogX0RQVV9IV19DT0xPUl9QUk9D X1Y0X0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfY29sb3JfcHJvY2Vzc2luZy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2NvbG9yX3Byb2Nlc3NpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFi ZGZmZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf Y29sb3JfcHJvY2Vzc2luZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFBVX0hXX0NPTE9SX1BST0NFU1NJ TkdfSAotI2RlZmluZSBfRFBVX0hXX0NPTE9SX1BST0NFU1NJTkdfSAotCi0jaW5jbHVkZSAiZHB1 X2h3X2NvbG9yX3Byb2Nlc3NpbmdfdjFfNy5oIgotI2luY2x1ZGUgImRwdV9od19yZWdfZG1hX3Yx X2NvbG9yX3Byb2MuaCIKLSNpbmNsdWRlICJkcHVfaHdfY29sb3JfcHJvY192NC5oIgotCi0jZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jb2xv cl9wcm9jZXNzaW5nX3YxXzcuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d19jb2xvcl9wcm9jZXNzaW5nX3YxXzcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg NmM2NzYwMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfY29sb3JfcHJvY2Vzc2luZ192MV83LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NjUgKzAsMCBA QAotLyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGRybS9tc21fZHJt X3BwLmg+Ci0jaW5jbHVkZSAiZHB1X2h3X2NvbG9yX3Byb2Nlc3NpbmdfdjFfNy5oIgotI2luY2x1 ZGUgImRwdV9od19jdGwuaCIKLQotI2RlZmluZSBQQV9IVUVfVklHX09GRgkJMHgxMTAKLSNkZWZp bmUgUEFfU0FUX1ZJR19PRkYJCTB4MTE0Ci0jZGVmaW5lIFBBX1ZBTF9WSUdfT0ZGCQkweDExOAot I2RlZmluZSBQQV9DT05UX1ZJR19PRkYJCTB4MTFDCi0KLSNkZWZpbmUgUEFfSFVFX0RTUFBfT0ZG CQkweDIzOAotI2RlZmluZSBQQV9TQVRfRFNQUF9PRkYJCTB4MjNDCi0jZGVmaW5lIFBBX1ZBTF9E U1BQX09GRgkJMHgyNDAKLSNkZWZpbmUgUEFfQ09OVF9EU1BQX09GRgkweDI0NAotCi0jZGVmaW5l IFBBX0xVVFZfRFNQUF9PRkYJMHgxNDAwCi0jZGVmaW5lIFBBX0xVVF9TV0FQX09GRgkJMHgyMzQK LQotI2RlZmluZSBQQV9MVVRWX0RTUFBfQ1RSTF9PRkYJMHg0YwotI2RlZmluZSBQQV9MVVRWX0RT UFBfU1dBUF9PRkYJMHgxOAotCi0jZGVmaW5lIFBBX0hVRV9NQVNLCQkweEZGRgotI2RlZmluZSBQ QV9TQVRfTUFTSwkJMHhGRkZGCi0jZGVmaW5lIFBBX1ZBTF9NQVNLCQkweEZGCi0jZGVmaW5lIFBB X0NPTlRfTUFTSwkJMHhGRgotCi0jZGVmaW5lIE1FTUNPTF9QV0wwX09GRgkJMHg4OAotI2RlZmlu ZSBNRU1DT0xfUFdMMF9NQVNLCTB4RkZGRjA3RkYKLSNkZWZpbmUgTUVNQ09MX1BXTDFfT0ZGCQkw eDhDCi0jZGVmaW5lIE1FTUNPTF9QV0wxX01BU0sJMHhGRkZGRkZGRgotI2RlZmluZSBNRU1DT0xf SFVFX1JFR0lPTl9PRkYJMHg5MAotI2RlZmluZSBNRU1DT0xfSFVFX1JFR0lPTl9NQVNLCTB4N0ZG MDdGRgotI2RlZmluZSBNRU1DT0xfU0FUX1JFR0lPTl9PRkYJMHg5NAotI2RlZmluZSBNRU1DT0xf U0FUX1JFR0lPTl9NQVNLCTB4RkZGRkZGCi0jZGVmaW5lIE1FTUNPTF9WQUxfUkVHSU9OX09GRgkw eDk4Ci0jZGVmaW5lIE1FTUNPTF9WQUxfUkVHSU9OX01BU0sJMHhGRkZGRkYKLSNkZWZpbmUgTUVN Q09MX1AwX0xFTgkJMHgxNAotI2RlZmluZSBNRU1DT0xfUDFfTEVOCQkweDgKLSNkZWZpbmUgTUVN Q09MX1BXTDJfT0ZGCQkweDIxOAotI2RlZmluZSBNRU1DT0xfUFdMMl9NQVNLCTB4RkZGRkZGRkYK LSNkZWZpbmUgTUVNQ09MX0JMRU5EX0dBSU5fT0ZGCTB4MjFDCi0jZGVmaW5lIE1FTUNPTF9QV0xf SE9MRF9PRkYJMHgyMTQKLQotI2RlZmluZSBWSUdfT1BfUEFfRU4JCUJJVCg0KQotI2RlZmluZSBW SUdfT1BfUEFfU0tJTl9FTglCSVQoNSkKLSNkZWZpbmUgVklHX09QX1BBX0ZPTF9FTglCSVQoNikK LSNkZWZpbmUgVklHX09QX1BBX1NLWV9FTglCSVQoNykKLSNkZWZpbmUgVklHX09QX1BBX0hVRV9F TglCSVQoMjUpCi0jZGVmaW5lIFZJR19PUF9QQV9TQVRfRU4JQklUKDI2KQotI2RlZmluZSBWSUdf T1BfUEFfVkFMX0VOCUJJVCgyNykKLSNkZWZpbmUgVklHX09QX1BBX0NPTlRfRU4JQklUKDI4KQot Ci0jZGVmaW5lIERTUFBfT1BfU1pfVkFMX0VOCUJJVCgzMSkKLSNkZWZpbmUgRFNQUF9PUF9TWl9T QVRfRU4JQklUKDMwKQotI2RlZmluZSBEU1BQX09QX1NaX0hVRV9FTglCSVQoMjkpCi0jZGVmaW5l IERTUFBfT1BfUEFfSFVFX0VOCUJJVCgyNSkKLSNkZWZpbmUgRFNQUF9PUF9QQV9TQVRfRU4JQklU KDI2KQotI2RlZmluZSBEU1BQX09QX1BBX1ZBTF9FTglCSVQoMjcpCi0jZGVmaW5lIERTUFBfT1Bf UEFfQ09OVF9FTglCSVQoMjgpCi0jZGVmaW5lIERTUFBfT1BfUEFfRU4JCUJJVCgyMCkKLSNkZWZp bmUgRFNQUF9PUF9QQV9MVVRWX0VOCUJJVCgxOSkKLSNkZWZpbmUgRFNQUF9PUF9QQV9TS0lOX0VO CUJJVCg1KQotI2RlZmluZSBEU1BQX09QX1BBX0ZPTF9FTglCSVQoNikKLSNkZWZpbmUgRFNQUF9P UF9QQV9TS1lfRU4JQklUKDcpCi0KLSNkZWZpbmUgUEFfVklHX0RJU0FCTEVfUkVRVUlSRUQoeCkg XAotCQkJISgoeCkgJiAoVklHX09QX1BBX1NLSU5fRU4gfCBWSUdfT1BfUEFfU0tZX0VOIHwgXAot CQkJVklHX09QX1BBX0ZPTF9FTiB8IFZJR19PUF9QQV9IVUVfRU4gfCBcCi0JCQlWSUdfT1BfUEFf U0FUX0VOIHwgVklHX09QX1BBX1ZBTF9FTiB8IFwKLQkJCVZJR19PUF9QQV9DT05UX0VOKSkKLQot Ci0jZGVmaW5lIFBBX0RTUFBfRElTQUJMRV9SRVFVSVJFRCh4KSBcCi0JCQkhKCh4KSAmIChEU1BQ X09QX1BBX1NLSU5fRU4gfCBEU1BQX09QX1BBX1NLWV9FTiB8IFwKLQkJCURTUFBfT1BfUEFfRk9M X0VOIHwgRFNQUF9PUF9QQV9IVUVfRU4gfCBcCi0JCQlEU1BQX09QX1BBX1NBVF9FTiB8IERTUFBf T1BfUEFfVkFMX0VOIHwgXAotCQkJRFNQUF9PUF9QQV9DT05UX0VOIHwgRFNQUF9PUF9QQV9MVVRW X0VOKSkKLQotI2RlZmluZSBEU1BQX09QX1BDQ19FTkFCTEUJQklUKDApCi0jZGVmaW5lIFBDQ19P UF9NT0RFX09GRgkJMAotI2RlZmluZSBQQ0NfQ09OU1RfQ09FRkZfT0ZGCTQKLSNkZWZpbmUgUEND X1JfQ09FRkZfT0ZGCQkweDEwCi0jZGVmaW5lIFBDQ19HX0NPRUZGX09GRgkJMHgxQwotI2RlZmlu ZSBQQ0NfQl9DT0VGRl9PRkYJCTB4MjgKLSNkZWZpbmUgUENDX1JHX0NPRUZGX09GRgkweDM0Ci0j ZGVmaW5lIFBDQ19SQl9DT0VGRl9PRkYJMHg0MAotI2RlZmluZSBQQ0NfR0JfQ09FRkZfT0ZGCTB4 NEMKLSNkZWZpbmUgUENDX1JHQl9DT0VGRl9PRkYJMHg1OAotI2RlZmluZSBQQ0NfQ09OU1RfQ09F RkZfTUFTSwkweEZGRkYKLSNkZWZpbmUgUENDX0NPRUZGX01BU0sJCTB4M0ZGRkYKLQotI2RlZmlu ZSBTU1BQCTAKLSNkZWZpbmUgRFNQUAkxCi0KLSNkZWZpbmUgUEdDX0MwX09GRiAweDQKLSNkZWZp bmUgUEdDX0MwX0lOREVYX09GRiAweDgKLSNkZWZpbmUgUEdDXzhCX1JPVU5EX0VOIEJJVCgxKQot I2RlZmluZSBQR0NfRU4gQklUKDApCi0jZGVmaW5lIFBHQ19UQkxfTlVNIDMKLSNkZWZpbmUgUEdD X0xVVF9TV0FQX09GRiAweDFjCi0KLQotc3RhdGljIHZvaWQgX19zZXR1cF9wYV9odWUoc3RydWN0 IGRwdV9od19ibGtfcmVnX21hcCAqaHcsCi0JCQljb25zdCBzdHJ1Y3QgZHB1X3BwX2JsayAqYmxr LCB1aW50MzJfdCBodWUsCi0JCQlpbnQgbG9jYXRpb24pCi17Ci0JdTMyIGJhc2UgPSBibGstPmJh c2U7Ci0JdTMyIG9mZnNldCA9IChsb2NhdGlvbiA9PSBEU1BQKSA/IFBBX0hVRV9EU1BQX09GRiA6 IFBBX0hVRV9WSUdfT0ZGOwotCXUzMiBvcF9odWVfZW4gPSAobG9jYXRpb24gPT0gRFNQUCkgPyBE U1BQX09QX1BBX0hVRV9FTiA6Ci0JCQkJCVZJR19PUF9QQV9IVUVfRU47Ci0JdTMyIG9wX3BhX2Vu ID0gKGxvY2F0aW9uID09IERTUFApID8gRFNQUF9PUF9QQV9FTiA6IFZJR19PUF9QQV9FTjsKLQl1 MzIgZGlzYWJsZV9yZXE7Ci0JdTMyIG9wbW9kZTsKLQotCURQVV9SRUdfV1JJVEUoaHcsIGJhc2Ug KyBvZmZzZXQsIGh1ZSAmIFBBX0hVRV9NQVNLKTsKLQotCW9wbW9kZSA9IERQVV9SRUdfUkVBRCho dywgYmFzZSk7Ci0KLQlpZiAoIWh1ZSkgewotCQlvcG1vZGUgJj0gfm9wX2h1ZV9lbjsKLQkJZGlz YWJsZV9yZXEgPSAobG9jYXRpb24gPT0gRFNQUCkgPwotCQkJUEFfRFNQUF9ESVNBQkxFX1JFUVVJ UkVEKG9wbW9kZSkgOgotCQkJUEFfVklHX0RJU0FCTEVfUkVRVUlSRUQob3Btb2RlKTsKLQkJaWYg KGRpc2FibGVfcmVxKQotCQkJb3Btb2RlICY9IH5vcF9wYV9lbjsKLQl9IGVsc2UgewotCQlvcG1v ZGUgfD0gb3BfaHVlX2VuIHwgb3BfcGFfZW47Ci0JfQotCi0JRFBVX1JFR19XUklURShodywgYmFz ZSwgb3Btb2RlKTsKLX0KLQotdm9pZCBkcHVfc2V0dXBfcGlwZV9wYV9odWVfdjFfNyhzdHJ1Y3Qg ZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKQotewotCXVpbnQzMl90IGh1ZSA9ICooKHVpbnQz Ml90ICopY2ZnKTsKLQotCV9fc2V0dXBfcGFfaHVlKCZjdHgtPmh3LCAmY3R4LT5jYXAtPnNibGst PmhzaWNfYmxrLCBodWUsIFNTUFApOwotfQotCi12b2lkIGRwdV9zZXR1cF9kc3BwX3BhX2h1ZV92 MV83KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0JdWludDMyX3QgaHVl ID0gKigodWludDMyX3QgKiljZmcpOwotCi0JX19zZXR1cF9wYV9odWUoJmN0eC0+aHcsICZjdHgt PmNhcC0+c2Jsay0+aHNpYywgaHVlLCBEU1BQKTsKLX0KLQotc3RhdGljIHZvaWQgX19zZXR1cF9w YV9zYXQoc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqaHcsCi0JCQljb25zdCBzdHJ1Y3QgZHB1 X3BwX2JsayAqYmxrLCB1aW50MzJfdCBzYXQsCi0JCQlpbnQgbG9jYXRpb24pCi17Ci0JdTMyIGJh c2UgPSBibGstPmJhc2U7Ci0JdTMyIG9mZnNldCA9IChsb2NhdGlvbiA9PSBEU1BQKSA/IFBBX1NB VF9EU1BQX09GRiA6IFBBX1NBVF9WSUdfT0ZGOwotCXUzMiBvcF9zYXRfZW4gPSAobG9jYXRpb24g PT0gRFNQUCkgPwotCQkJRFNQUF9PUF9QQV9TQVRfRU4gOiBWSUdfT1BfUEFfU0FUX0VOOwotCXUz MiBvcF9wYV9lbiA9IChsb2NhdGlvbiA9PSBEU1BQKSA/IERTUFBfT1BfUEFfRU4gOiBWSUdfT1Bf UEFfRU47Ci0JdTMyIGRpc2FibGVfcmVxOwotCXUzMiBvcG1vZGU7Ci0KLQlEUFVfUkVHX1dSSVRF KGh3LCBiYXNlICsgb2Zmc2V0LCBzYXQgJiBQQV9TQVRfTUFTSyk7Ci0KLQlvcG1vZGUgPSBEUFVf UkVHX1JFQUQoaHcsIGJhc2UpOwotCi0JaWYgKCFzYXQpIHsKLQkJb3Btb2RlICY9IH5vcF9zYXRf ZW47Ci0JCWRpc2FibGVfcmVxID0gKGxvY2F0aW9uID09IERTUFApID8KLQkJCVBBX0RTUFBfRElT QUJMRV9SRVFVSVJFRChvcG1vZGUpIDoKLQkJCVBBX1ZJR19ESVNBQkxFX1JFUVVJUkVEKG9wbW9k ZSk7Ci0JCWlmIChkaXNhYmxlX3JlcSkKLQkJCW9wbW9kZSAmPSB+b3BfcGFfZW47Ci0JfSBlbHNl IHsKLQkJb3Btb2RlIHw9IG9wX3NhdF9lbiB8IG9wX3BhX2VuOwotCX0KLQotCURQVV9SRUdfV1JJ VEUoaHcsIGJhc2UsIG9wbW9kZSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX3BpcGVfcGFfc2F0X3Yx Xzcoc3RydWN0IGRwdV9od19waXBlICpjdHgsIHZvaWQgKmNmZykKLXsKLQl1aW50MzJfdCBzYXQg PSAqKCh1aW50MzJfdCAqKWNmZyk7Ci0KLQlfX3NldHVwX3BhX3NhdCgmY3R4LT5odywgJmN0eC0+ Y2FwLT5zYmxrLT5oc2ljX2Jsaywgc2F0LCBTU1BQKTsKLX0KLQotc3RhdGljIHZvaWQgX19zZXR1 cF9wYV92YWwoc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqaHcsCi0JCQljb25zdCBzdHJ1Y3Qg ZHB1X3BwX2JsayAqYmxrLCB1aW50MzJfdCB2YWx1ZSwKLQkJCWludCBsb2NhdGlvbikKLXsKLQl1 MzIgYmFzZSA9IGJsay0+YmFzZTsKLQl1MzIgb2Zmc2V0ID0gKGxvY2F0aW9uID09IERTUFApID8g UEFfVkFMX0RTUFBfT0ZGIDogUEFfVkFMX1ZJR19PRkY7Ci0JdTMyIG9wX3ZhbF9lbiA9IChsb2Nh dGlvbiA9PSBEU1BQKSA/Ci0JCQlEU1BQX09QX1BBX1ZBTF9FTiA6IFZJR19PUF9QQV9WQUxfRU47 Ci0JdTMyIG9wX3BhX2VuID0gKGxvY2F0aW9uID09IERTUFApID8gRFNQUF9PUF9QQV9FTiA6IFZJ R19PUF9QQV9FTjsKLQl1MzIgZGlzYWJsZV9yZXE7Ci0JdTMyIG9wbW9kZTsKLQotCURQVV9SRUdf V1JJVEUoaHcsIGJhc2UgKyBvZmZzZXQsIHZhbHVlICYgUEFfVkFMX01BU0spOwotCi0Jb3Btb2Rl ID0gRFBVX1JFR19SRUFEKGh3LCBiYXNlKTsKLQotCWlmICghdmFsdWUpIHsKLQkJb3Btb2RlICY9 IH5vcF92YWxfZW47Ci0JCWRpc2FibGVfcmVxID0gKGxvY2F0aW9uID09IERTUFApID8KLQkJCVBB X0RTUFBfRElTQUJMRV9SRVFVSVJFRChvcG1vZGUpIDoKLQkJCVBBX1ZJR19ESVNBQkxFX1JFUVVJ UkVEKG9wbW9kZSk7Ci0JCWlmIChkaXNhYmxlX3JlcSkKLQkJCW9wbW9kZSAmPSB+b3BfcGFfZW47 Ci0JfSBlbHNlIHsKLQkJb3Btb2RlIHw9IG9wX3ZhbF9lbiB8IG9wX3BhX2VuOwotCX0KLQotCURQ VV9SRUdfV1JJVEUoaHcsIGJhc2UsIG9wbW9kZSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX3BpcGVf cGFfdmFsX3YxXzcoc3RydWN0IGRwdV9od19waXBlICpjdHgsIHZvaWQgKmNmZykKLXsKLQl1aW50 MzJfdCB2YWx1ZSA9ICooKHVpbnQzMl90ICopY2ZnKTsKLQotCV9fc2V0dXBfcGFfdmFsKCZjdHgt Pmh3LCAmY3R4LT5jYXAtPnNibGstPmhzaWNfYmxrLCB2YWx1ZSwgU1NQUCk7Ci19Ci0KLXN0YXRp YyB2b2lkIF9fc2V0dXBfcGFfY29udChzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpodywKLQkJ CWNvbnN0IHN0cnVjdCBkcHVfcHBfYmxrICpibGssIHVpbnQzMl90IGNvbnRyYXN0LAotCQkJaW50 IGxvY2F0aW9uKQotewotCXUzMiBiYXNlID0gYmxrLT5iYXNlOwotCXUzMiBvZmZzZXQgPSAobG9j YXRpb24gPT0gRFNQUCkgPyBQQV9DT05UX0RTUFBfT0ZGIDogUEFfQ09OVF9WSUdfT0ZGOwotCXUz MiBvcF9jb250X2VuID0gKGxvY2F0aW9uID09IERTUFApID8gRFNQUF9PUF9QQV9DT05UX0VOIDoK LQkJCQkJVklHX09QX1BBX0NPTlRfRU47Ci0JdTMyIG9wX3BhX2VuID0gKGxvY2F0aW9uID09IERT UFApID8gRFNQUF9PUF9QQV9FTiA6IFZJR19PUF9QQV9FTjsKLQl1MzIgZGlzYWJsZV9yZXE7Ci0J dTMyIG9wbW9kZTsKLQotCURQVV9SRUdfV1JJVEUoaHcsIGJhc2UgKyBvZmZzZXQsIGNvbnRyYXN0 ICYgUEFfQ09OVF9NQVNLKTsKLQotCW9wbW9kZSA9IERQVV9SRUdfUkVBRChodywgYmFzZSk7Ci0K LQlpZiAoIWNvbnRyYXN0KSB7Ci0JCW9wbW9kZSAmPSB+b3BfY29udF9lbjsKLQkJZGlzYWJsZV9y ZXEgPSAobG9jYXRpb24gPT0gRFNQUCkgPwotCQkJUEFfRFNQUF9ESVNBQkxFX1JFUVVJUkVEKG9w bW9kZSkgOgotCQkJUEFfVklHX0RJU0FCTEVfUkVRVUlSRUQob3Btb2RlKTsKLQkJaWYgKGRpc2Fi bGVfcmVxKQotCQkJb3Btb2RlICY9IH5vcF9wYV9lbjsKLQl9IGVsc2UgewotCQlvcG1vZGUgfD0g b3BfY29udF9lbiB8IG9wX3BhX2VuOwotCX0KLQotCURQVV9SRUdfV1JJVEUoaHcsIGJhc2UsIG9w bW9kZSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX3BpcGVfcGFfY29udF92MV83KHN0cnVjdCBkcHVf aHdfcGlwZSAqY3R4LCB2b2lkICpjZmcpCi17Ci0JdWludDMyX3QgY29udHJhc3QgPSAqKCh1aW50 MzJfdCAqKWNmZyk7Ci0KLQlfX3NldHVwX3BhX2NvbnQoJmN0eC0+aHcsICZjdHgtPmNhcC0+c2Js ay0+aHNpY19ibGssIGNvbnRyYXN0LCBTU1BQKTsKLX0KLQotdm9pZCBkcHVfc2V0dXBfcGlwZV9w YV9tZW1jb2xfdjFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKLQkJCQkgICBlbnVtIGRwdV9t ZW1jb2xvcl90eXBlIHR5cGUsCi0JCQkJICAgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1fbXNt X21lbWNvbCAqbWMgPSBjZmc7Ci0JdTMyIGJhc2UgPSBjdHgtPmNhcC0+c2Jsay0+bWVtY29sb3Jf YmxrLmJhc2U7Ci0JdTMyIG9mZiwgb3AsIG1jX2VuLCBob2xkID0gMDsKLQl1MzIgbWNfaSA9IDA7 Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIE1FTUNPTE9SX1NLSU46Ci0JCW1jX2VuID0gVklH X09QX1BBX1NLSU5fRU47Ci0JCW1jX2kgPSAwOwotCQlicmVhazsKLQljYXNlIE1FTUNPTE9SX1NL WToKLQkJbWNfZW4gPSBWSUdfT1BfUEFfU0tZX0VOOwotCQltY19pID0gMTsKLQkJYnJlYWs7Ci0J Y2FzZSBNRU1DT0xPUl9GT0xJQUdFOgotCQltY19lbiA9IFZJR19PUF9QQV9GT0xfRU47Ci0JCW1j X2kgPSAyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUk1fRVJST1IoIkludmFsaWQgbWVtb3J5 IGNvbG9yIHR5cGUgJWRcbiIsIHR5cGUpOwotCQlyZXR1cm47Ci0JfQotCi0Jb3AgPSBEUFVfUkVH X1JFQUQoJmN0eC0+aHcsIGJhc2UpOwotCWlmICghbWMpIHsKLQkJb3AgJj0gfm1jX2VuOwotCQlp ZiAoUEFfVklHX0RJU0FCTEVfUkVRVUlSRUQob3ApKQotCQkJb3AgJj0gflZJR19PUF9QQV9FTjsK LQkJRFBVX1JFR19XUklURSgmY3R4LT5odywgYmFzZSwgb3ApOwotCQlyZXR1cm47Ci0JfQotCi0J b2ZmID0gYmFzZSArIChtY19pICogTUVNQ09MX1AwX0xFTik7Ci0JRFBVX1JFR19XUklURSgmY3R4 LT5odywgKG9mZiArIE1FTUNPTF9QV0wwX09GRiksCi0JCSAgICAgIG1jLT5jb2xvcl9hZGp1c3Rf cDAgJiBNRU1DT0xfUFdMMF9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCAob2ZmICsg TUVNQ09MX1BXTDFfT0ZGKSwKLQkJICAgICAgbWMtPmNvbG9yX2FkanVzdF9wMSAmIE1FTUNPTF9Q V0wxX01BU0spOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIChvZmYgKyBNRU1DT0xfSFVFX1JF R0lPTl9PRkYpLAotCQkgICAgICBtYy0+aHVlX3JlZ2lvbiAmIE1FTUNPTF9IVUVfUkVHSU9OX01B U0spOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIChvZmYgKyBNRU1DT0xfU0FUX1JFR0lPTl9P RkYpLAotCQkgICAgICBtYy0+c2F0X3JlZ2lvbiAmIE1FTUNPTF9TQVRfUkVHSU9OX01BU0spOwot CURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIChvZmYgKyBNRU1DT0xfVkFMX1JFR0lPTl9PRkYpLAot CQkgICAgICBtYy0+dmFsX3JlZ2lvbiAmIE1FTUNPTF9WQUxfUkVHSU9OX01BU0spOwotCi0Jb2Zm ID0gYmFzZSArIChtY19pICogTUVNQ09MX1AxX0xFTik7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5o dywgKG9mZiArIE1FTUNPTF9QV0wyX09GRiksCi0JCSAgICAgIG1jLT5jb2xvcl9hZGp1c3RfcDIg JiBNRU1DT0xfUFdMMl9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCAob2ZmICsgTUVN Q09MX0JMRU5EX0dBSU5fT0ZGKSwgbWMtPmJsZW5kX2dhaW4pOwotCi0JaG9sZCA9IERQVV9SRUdf UkVBRCgmY3R4LT5odywgb2ZmICsgTUVNQ09MX1BXTF9IT0xEX09GRik7Ci0JaG9sZCAmPSB+KDB4 RiA8PCAobWNfaSAqIDQpKTsKLQlob2xkIHw9ICgobWMtPnNhdF9ob2xkICYgMHgzKSA8PCAobWNf aSAqIDQpKTsKLQlob2xkIHw9ICgobWMtPnZhbF9ob2xkICYgMHgzKSA8PCAoKG1jX2kgKiA0KSAr IDIpKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCAob2ZmICsgTUVNQ09MX1BXTF9IT0xEX09G RiksIGhvbGQpOwotCi0Jb3AgfD0gVklHX09QX1BBX0VOIHwgbWNfZW47Ci0JRFBVX1JFR19XUklU RSgmY3R4LT5odywgYmFzZSwgb3ApOwotfQotCi12b2lkIGRwdV9zZXR1cF9kc3BwX3BjY192MV83 KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRwdV9od19j cF9jZmcgKmh3X2NmZyA9IGNmZzsKLQlzdHJ1Y3QgZHJtX21zbV9wY2MgKnBjYzsKLQl2b2lkICBf X2lvbWVtICpiYXNlOwotCi0JaWYgKCFod19jZmcgIHx8IChod19jZmctPmxlbiAhPSBzaXplb2Yo KnBjYykgICYmIGh3X2NmZy0+cGF5bG9hZCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHBhcmFt cyBodyAlcCBwYXlsb2FkICVwIHBheWxvYWRzaXplICVkIFwiXAotCQkJICBleHAgc2l6ZSAlemRc biIsCi0JCQkgICBod19jZmcsICgoaHdfY2ZnKSA/IGh3X2NmZy0+cGF5bG9hZCA6IE5VTEwpLAot CQkJICAgKChod19jZmcpID8gaHdfY2ZnLT5sZW4gOiAwKSwgc2l6ZW9mKCpwY2MpKTsKLQkJcmV0 dXJuOwotCX0KLQliYXNlID0gY3R4LT5ody5iYXNlX29mZiArIGN0eC0+Y2FwLT5iYXNlOwotCi0J LyogVHVybiBvZmYgZmVhdHVyZSAqLwotCWlmICghaHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCURQVV9S RUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSwKLQkJCSAgICAgIFBD Q19PUF9NT0RFX09GRik7Ci0JCXJldHVybjsKLQl9Ci0JRFJNX0RFQlVHX0RSSVZFUigiRW5hYmxl IFBDQyBmZWF0dXJlXG4iKTsKLQlwY2MgPSBod19jZmctPnBheWxvYWQ7Ci0KLQlEUFVfUkVHX1dS SVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfQ09OU1RfQ09FRkZf T0ZGLAotCQkJCSAgcGNjLT5yLmMgJiBQQ0NfQ09OU1RfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19X UklURSgmY3R4LT5odywKLQkJICAgICAgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0NP TlNUX0NPRUZGX09GRiArIDQsCi0JCSAgICAgIHBjYy0+Zy5jICYgUENDX0NPTlNUX0NPRUZGX01B U0spOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsCi0JCSAgICAgIGN0eC0+Y2FwLT5zYmxrLT5w Y2MuYmFzZSArIFBDQ19DT05TVF9DT0VGRl9PRkYgKyA4LAotCQkgICAgICBwY2MtPmIuYyAmIFBD Q19DT05TVF9DT0VGRl9NQVNLKTsKLQotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2Fw LT5zYmxrLT5wY2MuYmFzZSArIFBDQ19SX0NPRUZGX09GRiwKLQkJCQkgIHBjYy0+ci5yICYgUEND X0NPRUZGX01BU0spOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5w Y2MuYmFzZSArIFBDQ19SX0NPRUZGX09GRiArIDQsCi0JCQkJICBwY2MtPmcuciAmIFBDQ19DT0VG Rl9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJh c2UgKyBQQ0NfUl9DT0VGRl9PRkYgKyA4LAotCQkJCSAgcGNjLT5iLnIgJiBQQ0NfQ09FRkZfTUFT Syk7Ci0KLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2Ug KyBQQ0NfR19DT0VGRl9PRkYsCi0JCQkJICBwY2MtPnIuZyAmIFBDQ19DT0VGRl9NQVNLKTsKLQlE UFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfR19D T0VGRl9PRkYgKyA0LAotCQkJCSAgcGNjLT5nLmcgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBVX1JF R19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0dfQ09FRkZf T0ZGICsgOCwKLQkJCQkgIHBjYy0+Yi5nICYgUENDX0NPRUZGX01BU0spOwotCi0JRFBVX1JFR19X UklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0JfQ09FRkZfT0ZG LAotCQkJCSAgcGNjLT5yLmIgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBVX1JFR19XUklURSgmY3R4 LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX0JfQ09FRkZfT0ZGICsgNCwKLQkJ CQkgIHBjYy0+Zy5iICYgUENDX0NPRUZGX01BU0spOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcs IGN0eC0+Y2FwLT5zYmxrLT5wY2MuYmFzZSArIFBDQ19CX0NPRUZGX09GRiArIDgsCi0JCQkJICBw Y2MtPmIuYiAmIFBDQ19DT0VGRl9NQVNLKTsKLQotCi0JRFBVX1JFR19XUklURSgmY3R4LT5odywg Y3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUENDX1JHX0NPRUZGX09GRiwKLQkJCQkgIHBjYy0+ ci5yZyAmIFBDQ19DT0VGRl9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNh cC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfUkdfQ09FRkZfT0ZGICsgNCwKLQkJCQkgIHBjYy0+Zy5y ZyAmIFBDQ19DT0VGRl9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+ c2Jsay0+cGNjLmJhc2UgKyBQQ0NfUkdfQ09FRkZfT0ZGICsgOCwKLQkJCQkgIHBjYy0+Yi5yZyAm IFBDQ19DT0VGRl9NQVNLKTsKLQotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5z YmxrLT5wY2MuYmFzZSArIFBDQ19SQl9DT0VGRl9PRkYsCi0JCQkJICBwY2MtPnIucmIgJiBQQ0Nf Q09FRkZfTUFTSyk7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBj Yy5iYXNlICsgUENDX1JCX0NPRUZGX09GRiArIDQsCi0JCQkJICBwY2MtPmcucmIgJiBQQ0NfQ09F RkZfTUFTSyk7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5i YXNlICsgUENDX1JCX0NPRUZGX09GRiArIDgsCi0JCQkJICBwY2MtPmIucmIgJiBQQ0NfQ09FRkZf TUFTSyk7Ci0KLQotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0eC0+Y2FwLT5zYmxrLT5wY2Mu YmFzZSArIFBDQ19HQl9DT0VGRl9PRkYsCi0JCQkJICBwY2MtPnIuZ2IgJiBQQ0NfQ09FRkZfTUFT Syk7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsg UENDX0dCX0NPRUZGX09GRiArIDQsCi0JCQkJICBwY2MtPmcuZ2IgJiBQQ0NfQ09FRkZfTUFTSyk7 Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsgUEND X0dCX0NPRUZGX09GRiArIDgsCi0JCQkJICBwY2MtPmIuZ2IgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0K LQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0Nf UkdCX0NPRUZGX09GRiwKLQkJCQkgIHBjYy0+ci5yZ2IgJiBQQ0NfQ09FRkZfTUFTSyk7Ci0JRFBV X1JFR19XUklURSgmY3R4LT5odywKLQkJICAgICAgY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlICsg UENDX1JHQl9DT0VGRl9PRkYgKyA0LAotCQkgICAgICBwY2MtPmcucmdiICYgUENDX0NPRUZGX01B U0spOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsCi0JCSAgICAgIGN0eC0+Y2FwLT5zYmxrLT5w Y2MuYmFzZSArIFBDQ19SR0JfQ09FRkZfT0ZGICsgOCwKLQkJICAgICAgcGNjLT5iLnJnYiAmIFBD Q19DT0VGRl9NQVNLKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+ cGNjLmJhc2UsIERTUFBfT1BfUENDX0VOQUJMRSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBf cGFfdmx1dF92MV83KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0Jc3Ry dWN0IGRybV9tc21fcGFfdmx1dCAqcGF5bG9hZCA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9od19jcF9j ZmcgKmh3X2NmZyA9IGNmZzsKLQl1MzIgYmFzZSA9IGN0eC0+Y2FwLT5zYmxrLT52bHV0LmJhc2U7 Ci0JdTMyIG9mZnNldCA9IGJhc2UgKyBQQV9MVVRWX0RTUFBfT0ZGOwotCXUzMiBvcF9tb2RlLCB0 bXA7Ci0JaW50IGkgPSAwLCBqID0gMDsKLQotCWlmICghaHdfY2ZnIHx8IChod19jZmctPnBheWxv YWQgJiYgaHdfY2ZnLT5sZW4gIT0KLQkJCXNpemVvZihzdHJ1Y3QgZHJtX21zbV9wYV92bHV0KSkp IHsKLQkJRFJNX0VSUk9SKCJodyAlcEsgcGF5bG9hZCAlcEsgcGF5bG9hZHNpemUgJWQgZXhwIHNp emUgJXpkXG4iLAotCQkJICBod19jZmcsICgoaHdfY2ZnKSA/IGh3X2NmZy0+cGF5bG9hZCA6IE5V TEwpLAotCQkJICAoKGh3X2NmZykgPyBod19jZmctPmxlbiA6IDApLAotCQkJICBzaXplb2Yoc3Ry dWN0IGRybV9tc21fcGFfdmx1dCkpOwotCQlyZXR1cm47Ci0JfQotCW9wX21vZGUgPSBEUFVfUkVH X1JFQUQoJmN0eC0+aHcsIGJhc2UpOwotCWlmICghaHdfY2ZnLT5wYXlsb2FkKSB7Ci0JCURSTV9E RUJVR19EUklWRVIoIkRpc2FibGUgdmx1dCBmZWF0dXJlXG4iKTsKLQkJLyoqCi0JCSAqIEluIHRo ZSBQQV9WTFVUIGRpc2FibGUgY2FzZSwgcmVtb3ZlIFBBX1ZMVVQgZW5hYmxlIGJpdCgxOSkKLQkJ ICogZmlyc3QsIHRoZW4gY2hlY2sgd2hldGhlciBhbnkgb3RoZXIgUEEgc3ViLWZlYXR1cmVzIGFy ZQotCQkgKiBlbmFibGVkIG9yIG5vdC4gSWYgbm9uZSBvZiB0aGUgc3ViLWZlYXR1cmVzIGFyZSBl bmFibGVkLAotCQkgKiByZW1vdmUgdGhlIFBBIGdsb2JhbCBlbmFibGUgYml0KDIwKS4KLQkJICov Ci0JCW9wX21vZGUgJj0gfigodTMyKURTUFBfT1BfUEFfTFVUVl9FTik7Ci0JCWlmIChQQV9EU1BQ X0RJU0FCTEVfUkVRVUlSRUQob3BfbW9kZSkpCi0JCQlvcF9tb2RlICY9IH4oKHUzMilEU1BQX09Q X1BBX0VOKTsKLQkJRFBVX1JFR19XUklURSgmY3R4LT5odywgYmFzZSwgb3BfbW9kZSk7Ci0JCXJl dHVybjsKLQl9Ci0JcGF5bG9hZCA9IGh3X2NmZy0+cGF5bG9hZDsKLQlEUk1fREVCVUdfRFJJVkVS KCJFbmFibGUgdmx1dCBmZWF0dXJlIGZsYWdzICVsbHhcbiIsIHBheWxvYWQtPmZsYWdzKTsKLQlm b3IgKGkgPSAwLCBqID0gMDsgaSA8IEFSUkFZX1NJWkUocGF5bG9hZC0+dmFsKTsgaSArPSAyLCBq ICs9IDQpIHsKLQkJdG1wID0gKHBheWxvYWQtPnZhbFtpXSAmIFJFR19NQVNLKDEwKSkgfAotCQkJ KChwYXlsb2FkLT52YWxbaSArIDFdICYgUkVHX01BU0soMTApKSA8PCAxNik7Ci0JCURQVV9SRUdf V1JJVEUoJmN0eC0+aHcsIChvZmZzZXQgKyBqKSwKLQkJCSAgICAgdG1wKTsKLQl9Ci0JRFBVX1JF R19XUklURSgmY3R4LT5odywgKGJhc2UgKyBQQV9MVVRfU1dBUF9PRkYpLCAxKTsKLQlvcF9tb2Rl IHw9IERTUFBfT1BfUEFfRU4gfCBEU1BQX09QX1BBX0xVVFZfRU47Ci0JRFBVX1JFR19XUklURSgm Y3R4LT5odywgYmFzZSwgb3BfbW9kZSk7Ci19Ci0KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGFfdmx1 dF92MV84KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRy bV9tc21fcGFfdmx1dCAqcGF5bG9hZCA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3 X2NmZyA9IGNmZzsKLQlzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsID0gTlVMTDsKLQl1MzIgdmx1dF9i YXNlLCBwYV9oaXN0X2Jhc2U7Ci0JdTMyIGN0cmxfb2ZmLCBzd2FwX29mZjsKLQl1MzIgdG1wID0g MDsKLQlpbnQgaSA9IDAsIGogPSAwOwotCXUzMiBmbHVzaF9tYXNrID0gMDsKLQotCWlmICghY3R4 KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIgTlVMTCBjdHhcbiIpOwot CQlyZXR1cm47Ci0JfQotCi0JaWYgKCFod19jZmcgfHwgKGh3X2NmZy0+cGF5bG9hZCAmJiBod19j ZmctPmxlbiAhPQotCQkJc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BhX3ZsdXQpKSkgewotCQlEUk1f RVJST1IoImh3ICVwSyBwYXlsb2FkICVwSyBwYXlsb2Fkc2l6ZSAlZCBleHAgc2l6ZSAlemRcbiIs Ci0JCQkgIGh3X2NmZywgKChod19jZmcpID8gaHdfY2ZnLT5wYXlsb2FkIDogTlVMTCksCi0JCQkg ICgoaHdfY2ZnKSA/IGh3X2NmZy0+bGVuIDogMCksCi0JCQkgIHNpemVvZihzdHJ1Y3QgZHJtX21z bV9wYV92bHV0KSk7Ci0JCXJldHVybjsKLQl9Ci0KLQljdGwgPSBod19jZmctPmN0bDsKLQl2bHV0 X2Jhc2UgPSBjdHgtPmNhcC0+c2Jsay0+dmx1dC5iYXNlOwotCXBhX2hpc3RfYmFzZSA9IGN0eC0+ Y2FwLT5zYmxrLT5oaXN0LmJhc2U7Ci0JY3RybF9vZmYgPSBwYV9oaXN0X2Jhc2UgKyBQQV9MVVRW X0RTUFBfQ1RSTF9PRkY7Ci0Jc3dhcF9vZmYgPSBwYV9oaXN0X2Jhc2UgKyBQQV9MVVRWX0RTUFBf U1dBUF9PRkY7Ci0KLQlpZiAoIWh3X2NmZy0+cGF5bG9hZCkgewotCQlEUk1fREVCVUdfRFJJVkVS KCJEaXNhYmxlIHZsdXQgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0 cmxfb2ZmLCAwKTsKLQkJZ290byBleGl0OwotCX0KLQotCXBheWxvYWQgPSBod19jZmctPnBheWxv YWQ7Ci0JRFJNX0RFQlVHX0RSSVZFUigiRW5hYmxlIHZsdXQgZmVhdHVyZSBmbGFncyAlbGx4XG4i LCBwYXlsb2FkLT5mbGFncyk7Ci0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBBUlJBWV9TSVpFKHBh eWxvYWQtPnZhbCk7IGkgKz0gMiwgaiArPSA0KSB7Ci0JCXRtcCA9IChwYXlsb2FkLT52YWxbaV0g JiBSRUdfTUFTSygxMCkpIHwKLQkJCSgocGF5bG9hZC0+dmFsW2kgKyAxXSAmIFJFR19NQVNLKDEw KSkgPDwgMTYpOwotCQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCAodmx1dF9iYXNlICsgaiksIHRt cCk7Ci0JfQotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGN0cmxfb2ZmLCAxKTsKLQlEUFVfUkVH X1dSSVRFKCZjdHgtPmh3LCBzd2FwX29mZiwgMSk7Ci0KLWV4aXQ6Ci0JLyogdXBkYXRlIGZsdXNo IGJpdCAqLwotCWlmIChjdGwgJiYgY3RsLT5vcHMuZ2V0X2JpdG1hc2tfZHNwcF9wYXZsdXQpIHsK LQkJY3RsLT5vcHMuZ2V0X2JpdG1hc2tfZHNwcF9wYXZsdXQoY3RsLCAmZmx1c2hfbWFzaywgY3R4 LT5pZHgpOwotCQlpZiAoY3RsLT5vcHMudXBkYXRlX3BlbmRpbmdfZmx1c2gpCi0JCQljdGwtPm9w cy51cGRhdGVfcGVuZGluZ19mbHVzaChjdGwsIGZsdXNoX21hc2spOwotCX0KLX0KLQotdm9pZCBk cHVfc2V0dXBfZHNwcF9nY192MV83KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcp Ci17Ci0Jc3RydWN0IGRybV9tc21fcGdjX2x1dCAqcGF5bG9hZCA9IE5VTEw7Ci0Jc3RydWN0IGRw dV9od19jcF9jZmcgKmh3X2NmZyA9IGNmZzsKLQl1MzIgYzBfb2ZmLCBjMV9vZmYsIGMyX29mZiwg aTsKLQotCWlmICghaHdfY2ZnIHx8IChod19jZmctPnBheWxvYWQgJiYgaHdfY2ZnLT5sZW4gIT0K LQkJCXNpemVvZihzdHJ1Y3QgZHJtX21zbV9wZ2NfbHV0KSkpIHsKLQkJRFJNX0VSUk9SKCJodyAl cEsgcGF5bG9hZCAlcEsgcGF5bG9hZHNpemUgJWQgZXhwIHNpemUgJXpkXG4iLAotCQkJICBod19j ZmcsICgoaHdfY2ZnKSA/IGh3X2NmZy0+cGF5bG9hZCA6IE5VTEwpLAotCQkJICAoKGh3X2NmZykg PyBod19jZmctPmxlbiA6IDApLAotCQkJICBzaXplb2Yoc3RydWN0IGRybV9tc21fcGdjX2x1dCkp OwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RFQlVH X0RSSVZFUigiRGlzYWJsZSBwZ2MgZmVhdHVyZVxuIik7Ci0JCURQVV9SRUdfV1JJVEUoJmN0eC0+ aHcsIGN0eC0+Y2FwLT5zYmxrLT5nYy5iYXNlLCAwKTsKLQkJcmV0dXJuOwotCX0KLQlwYXlsb2Fk ID0gaHdfY2ZnLT5wYXlsb2FkOwotCi0JLyogSW5pdGlhbGl6ZSBpbmRleCBvZmZzZXRzICovCi0J YzBfb2ZmID0gY3R4LT5jYXAtPnNibGstPmdjLmJhc2UgKyBQR0NfQzBfSU5ERVhfT0ZGOwotCWMx X29mZiA9IGMwX29mZiArIChzaXplb2YodTMyKSAqIDIpOwotCWMyX29mZiA9IGMxX29mZiArIChz aXplb2YodTMyKSAqIDIpOwotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIGMwX29mZiwgMCk7Ci0J RFBVX1JFR19XUklURSgmY3R4LT5odywgYzFfb2ZmLCAwKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgt Pmh3LCBjMl9vZmYsIDApOwotCi0JLyogSW5pdGlhbGl6ZSB0YWJsZSBvZmZzZXRzICovCi0JYzBf b2ZmID0gY3R4LT5jYXAtPnNibGstPmdjLmJhc2UgKyBQR0NfQzBfT0ZGOwotCWMxX29mZiA9IGMw X29mZiArIChzaXplb2YodTMyKSAqIDIpOwotCWMyX29mZiA9IGMxX29mZiArIChzaXplb2YodTMy KSAqIDIpOwotCi0JZm9yIChpID0gMDsgaSA8IFBHQ19UQkxfTEVOOyBpKyspIHsKLQkJRFBVX1JF R19XUklURSgmY3R4LT5odywgYzBfb2ZmLCBwYXlsb2FkLT5jMFtpXSk7Ci0JCURQVV9SRUdfV1JJ VEUoJmN0eC0+aHcsIGMxX29mZiwgcGF5bG9hZC0+YzFbaV0pOwotCQlEUFVfUkVHX1dSSVRFKCZj dHgtPmh3LCBjMl9vZmYsIHBheWxvYWQtPmMyW2ldKTsKLQl9Ci0JRFBVX1JFR19XUklURSgmY3R4 LT5odywgY3R4LT5jYXAtPnNibGstPmdjLmJhc2UgKyBQR0NfTFVUX1NXQVBfT0ZGLAotCQkJQklU KDApKTsKLQlpID0gQklUKDApIHwgKChwYXlsb2FkLT5mbGFncyAmIFBHQ184Ql9ST1VORCkgPyBC SVQoMSkgOiAwKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBjdHgtPmNhcC0+c2Jsay0+Z2Mu YmFzZSwgaSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfY29sb3JfcHJvY2Vzc2luZ192MV83LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfY29sb3JfcHJvY2Vzc2luZ192MV83LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDc2ODA3YWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2NvbG9yX3Byb2Nlc3NpbmdfdjFfNy5oCisrKyAvZGV2L251bGwKQEAgLTEs OTIgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh bmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFBV X0hXX0NPTE9SX1BST0NFU1NJTkdfVjFfN19ICi0jZGVmaW5lIF9EUFVfSFdfQ09MT1JfUFJPQ0VT U0lOR19WMV83X0gKLQotI2luY2x1ZGUgImRwdV9od19zc3BwLmgiCi0jaW5jbHVkZSAiZHB1X2h3 X2RzcHAuaCIKLQotLyoqCi0gKiBkcHVfc2V0dXBfcGlwZV9wYV9odWVfdjFfNyAtIHNldHVwIFNT UFAgaHVlIGZlYXR1cmUgaW4gdjEuNyBoYXJkd2FyZQotICogQGN0eDogUG9pbnRlciB0byBwaXBl IGNvbnRleHQKLSAqIEBjZmc6IFBvaW50ZXIgdG8gaHVlIGRhdGEKLSAqLwotdm9pZCBkcHVfc2V0 dXBfcGlwZV9wYV9odWVfdjFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsK LQotLyoqCi0gKiBkcHVfc2V0dXBfcGlwZV9wYV9zYXRfdjFfNyAtIHNldHVwIFNTUFAgc2F0dXJh dGlvbiBmZWF0dXJlIGluIHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBj b250ZXh0Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIHNhdHVyYXRpb24gZGF0YQotICovCi12b2lkIGRw dV9zZXR1cF9waXBlX3BhX3NhdF92MV83KHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LCB2b2lkICpj ZmcpOwotCi0vKioKLSAqIGRwdV9zZXR1cF9waXBlX3BhX3ZhbF92MV83IC0gc2V0dXAgU1NQUCB2 YWx1ZSBmZWF0dXJlIGluIHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBj b250ZXh0Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIHZhbHVlIGRhdGEKLSAqLwotdm9pZCBkcHVfc2V0 dXBfcGlwZV9wYV92YWxfdjFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsK LQotLyoqCi0gKiBkcHVfc2V0dXBfcGlwZV9wYV9jb250X3YxXzcgLSBzZXR1cCBTU1BQIGNvbnRy YXN0IGZlYXR1cmUgaW4gdjEuNyBoYXJkd2FyZQotICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNv bnRleHQKLSAqIEBjZmc6IFBvaW50ZXIgdG8gY29udHJhc3QgZGF0YQotICovCi12b2lkIGRwdV9z ZXR1cF9waXBlX3BhX2NvbnRfdjFfNyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2Zn KTsKLQotLyoqCi0gKiBkcHVfc2V0dXBfcGlwZV9wYV9tZW1jb2xfdjFfNyAtIHNldHVwIFNTUFAg bWVtb3J5IGNvbG9yIGluIHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBj b250ZXh0Ci0gKiBAdHlwZTogTWVtb3J5IGNvbG9yIHR5cGUgKFNraW4sIHNreSwgb3IgZm9saWFn ZSkKLSAqIEBjZmc6IFBvaW50ZXIgdG8gbWVtb3J5IGNvbG9yIGNvbmZpZyBkYXRhCi0gKi8KLXZv aWQgZHB1X3NldHVwX3BpcGVfcGFfbWVtY29sX3YxXzcoc3RydWN0IGRwdV9od19waXBlICpjdHgs Ci0JCQkJICAgZW51bSBkcHVfbWVtY29sb3JfdHlwZSB0eXBlLAotCQkJCSAgIHZvaWQgKmNmZyk7 Ci0KLS8qKgotICogZHB1X3NldHVwX2RzcHBfcGNjX3YxXzcgLSBzZXR1cCBEU1BQIFBDQyB2ZWF0 dXJlIGluIHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0g KiBAY2ZnOiBQb2ludGVyIHRvIFBDQyBkYXRhCi0gKi8KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGNj X3YxXzcoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogZHB1 X3NldHVwX2RzcHBfcGFfaHVlX3YxXzcgLSBzZXR1cCBEU1BQIGh1ZSBmZWF0dXJlIGluIHYxLjcg aGFyZHdhcmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gRFNQUCBjb250ZXh0Ci0gKiBAY2ZnOiBQb2lu dGVyIHRvIGh1ZSBkYXRhCi0gKi8KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGFfaHVlX3YxXzcoc3Ry dWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogZHB1X3NldHVwX2Rz cHBfcGFfdmx1dF92MV83IC0gc2V0dXAgRFNQUCBQQSB2TFVUIGZlYXR1cmUgaW4gdjEuNyBoYXJk d2FyZQotICogQGN0eDogUG9pbnRlciB0byBEU1BQIGNvbnRleHQKLSAqIEBjZmc6IFBvaW50ZXIg dG8gdkxVVCBkYXRhCi0gKi8KLXZvaWQgZHB1X3NldHVwX2RzcHBfcGFfdmx1dF92MV83KHN0cnVj dCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0vKioKLSAqIGRwdV9zZXR1cF9kc3Bw X3BhX3ZsdXRfdjFfOCAtIHNldHVwIERTUFAgUEEgdkxVVCBmZWF0dXJlIGluIHYxLjggaGFyZHdh cmUKLSAqIEBjdHg6IFBvaW50ZXIgdG8gRFNQUCBjb250ZXh0Ci0gKiBAY2ZnOiBQb2ludGVyIHRv IHZMVVQgZGF0YQotICovCi12b2lkIGRwdV9zZXR1cF9kc3BwX3BhX3ZsdXRfdjFfOChzdHJ1Y3Qg ZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoqCi0gKiBkcHVfc2V0dXBfZHNwcF9n Y192MV83IC0gc2V0dXAgRFNQUCBnYyBmZWF0dXJlIGluIHYxLjcgaGFyZHdhcmUKLSAqIEBjdHg6 IFBvaW50ZXIgdG8gRFNQUCBjb250ZXh0Ci0gKiBAY2ZnOiBQb2ludGVyIHRvIGdjIGRhdGEKLSAq Lwotdm9pZCBkcHVfc2V0dXBfZHNwcF9nY192MV83KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2 b2lkICpjZmcpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19jdGwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d19jdGwuYwppbmRleCA2OTIyZDhhLi40ODY1NDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2N0bC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSAiZHB1X2h3 X2N0bC5oIgogI2luY2x1ZGUgImRwdV9kYmcuaCIKICNpbmNsdWRlICJkcHVfa21zLmgiCi0jaW5j bHVkZSAiZHB1X3JlZ19kbWEuaCIKIAogI2RlZmluZSAgIENUTF9MQVlFUihsbSkgICAgICAgICAg ICAgICAgIFwKIAkoKChsbSkgPT0gTE1fNSkgPyAoMHgwMjQpIDogKCgobG0pIC0gTE1fMCkgKiAw eDAwNCkpCkBAIC0yMDMsMzggKzIwMiw2IEBAIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZHB1X2h3 X2N0bF9nZXRfYml0bWFza19taXhlcihzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCXJldHVybiBm bHVzaGJpdHM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tf ZHNwcChzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAotCQl1MzIgKmZsdXNoYml0cywgZW51bSBkcHVf ZHNwcCBkc3BwKQotewotCXN3aXRjaCAoZHNwcCkgewotCWNhc2UgRFNQUF8wOgotCQkqZmx1c2hi aXRzIHw9IEJJVCgxMyk7Ci0JCWJyZWFrOwotCWNhc2UgRFNQUF8xOgotCQkqZmx1c2hiaXRzIHw9 IEJJVCgxNCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZHB1X2h3X2N0bF9nZXRfYml0bWFza19k c3BwX3Bhdmx1dChzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAotCQl1MzIgKmZsdXNoYml0cywgZW51 bSBkcHVfZHNwcCBkc3BwKQotewotCXN3aXRjaCAoZHNwcCkgewotCWNhc2UgRFNQUF8wOgotCQkq Zmx1c2hiaXRzIHw9IEJJVCgzKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU1BQXzE6Ci0JCSpmbHVzaGJp dHMgfD0gQklUKDQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9od19jdGxfZ2V0X2JpdG1h c2tfaW50ZihzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCQl1MzIgKmZsdXNoYml0cywgZW51bSBk cHVfaW50ZiBpbnRmKQogewpAQCAtNTE4LDE0ICs0ODUsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdf Y3RsX2ludGZfY2ZnKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCiAJRFBVX1JFR19XUklURShjLCBD VExfVE9QLCBpbnRmX2NmZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGRwdV9od19yZWdfZG1hX2ZsdXNo KHN0cnVjdCBkcHVfaHdfY3RsICpjdHgpCi17Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAq b3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCi0JaWYgKG9wcyAmJiBvcHMtPmxhc3RfY29t bWFuZCkKLQkJb3BzLT5sYXN0X2NvbW1hbmQoY3R4LCBETUFfQ1RMX1FVRVVFMCk7Ci19Ci0KIHN0 YXRpYyB2b2lkIF9zZXR1cF9jdGxfb3BzKHN0cnVjdCBkcHVfaHdfY3RsX29wcyAqb3BzLAogCQl1 bnNpZ25lZCBsb25nIGNhcCkKIHsKQEAgLTU0MywxMiArNTAyLDkgQEAgc3RhdGljIHZvaWQgX3Nl dHVwX2N0bF9vcHMoc3RydWN0IGRwdV9od19jdGxfb3BzICpvcHMsCiAJb3BzLT5zZXR1cF9ibGVu ZHN0YWdlID0gZHB1X2h3X2N0bF9zZXR1cF9ibGVuZHN0YWdlOwogCW9wcy0+Z2V0X2JpdG1hc2tf c3NwcCA9IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfc3NwcDsKIAlvcHMtPmdldF9iaXRtYXNrX21p eGVyID0gZHB1X2h3X2N0bF9nZXRfYml0bWFza19taXhlcjsKLQlvcHMtPmdldF9iaXRtYXNrX2Rz cHAgPSBkcHVfaHdfY3RsX2dldF9iaXRtYXNrX2RzcHA7Ci0Jb3BzLT5nZXRfYml0bWFza19kc3Bw X3Bhdmx1dCA9IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfZHNwcF9wYXZsdXQ7CiAJb3BzLT5nZXRf Yml0bWFza19pbnRmID0gZHB1X2h3X2N0bF9nZXRfYml0bWFza19pbnRmOwogCW9wcy0+Z2V0X2Jp dG1hc2tfY2RtID0gZHB1X2h3X2N0bF9nZXRfYml0bWFza19jZG07CiAJb3BzLT5nZXRfYml0bWFz a193YiA9IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfd2I7Ci0Jb3BzLT5yZWdfZG1hX2ZsdXNoID0g ZHB1X2h3X3JlZ19kbWFfZmx1c2g7CiB9OwogCiBzdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3Bz IGRwdV9od19vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfY3RsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3Rs LmgKaW5kZXggZDM0MzViZS4uYjc3M2E1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19jdGwuaApAQCAtMTQwLDE0ICsxNDAsNiBAQCBzdHJ1Y3QgZHB1X2h3X2N0bF9v cHMgewogCXVpbnQzMl90ICgqZ2V0X2JpdG1hc2tfbWl4ZXIpKHN0cnVjdCBkcHVfaHdfY3RsICpj dHgsCiAJCWVudW0gZHB1X2xtIGJsayk7CiAKLQlpbnQgKCpnZXRfYml0bWFza19kc3BwKShzdHJ1 Y3QgZHB1X2h3X2N0bCAqY3R4LAotCQl1MzIgKmZsdXNoYml0cywKLQkJZW51bSBkcHVfZHNwcCBi bGspOwotCi0JaW50ICgqZ2V0X2JpdG1hc2tfZHNwcF9wYXZsdXQpKHN0cnVjdCBkcHVfaHdfY3Rs ICpjdHgsCi0JCXUzMiAqZmx1c2hiaXRzLAotCQllbnVtIGRwdV9kc3BwIGJsayk7Ci0KIAlpbnQg KCpnZXRfYml0bWFza19pbnRmKShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCQl1MzIgKmZsdXNo Yml0cywKIAkJZW51bSBkcHVfaW50ZiBibGspOwpAQCAtMTc0LDEzICsxNjYsNiBAQCBzdHJ1Y3Qg ZHB1X2h3X2N0bF9vcHMgewogCSAqLwogCXZvaWQgKCpzZXR1cF9ibGVuZHN0YWdlKShzdHJ1Y3Qg ZHB1X2h3X2N0bCAqY3R4LAogCQllbnVtIGRwdV9sbSBsbSwgc3RydWN0IGRwdV9od19zdGFnZV9j ZmcgKmNmZyk7Ci0KLQkvKioKLQkgKiBGbHVzaCB0aGUgcmVnIGRtYSBieSBzZW5kaW5nIGxhc3Qg Y29tbWFuZC4KLQkgKiBAY3R4ICAgICAgIDogY3RsIHBhdGggY3R4IHBvaW50ZXIKLQkgKi8KLQl2 b2lkICgqcmVnX2RtYV9mbHVzaCkoc3RydWN0IGRwdV9od19jdGwgKmN0eCk7Ci0KIH07CiAKIC8q KgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kc3BwLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNDJjYWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAuYworKysgL2Rldi9udWxsCkBAIC0xLDIwOSAr MCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAot ICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGRybS9tc21f ZHJtX3BwLmg+Ci0jaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdpby5o IgotI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2RzcHAuaCIK LSNpbmNsdWRlICJkcHVfaHdfY29sb3JfcHJvY2Vzc2luZy5oIgotI2luY2x1ZGUgImRwdV9kYmcu aCIKLSNpbmNsdWRlICJkcHVfYWQ0LmgiCi0jaW5jbHVkZSAiZHB1X2ttcy5oIgotCi1zdGF0aWMg c3RydWN0IGRwdV9kc3BwX2NmZyAqX2RzcHBfb2Zmc2V0KGVudW0gZHB1X2RzcHAgZHNwcCwKLQkJ c3RydWN0IGRwdV9tZHNzX2NmZyAqbSwKLQkJdm9pZCBfX2lvbWVtICphZGRyLAotCQlzdHJ1Y3Qg ZHB1X2h3X2Jsa19yZWdfbWFwICpiKQotewotCWludCBpOwotCi0JaWYgKCFtIHx8ICFhZGRyIHx8 ICFiKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWZvciAoaSA9IDA7IGkgPCBtLT5k c3BwX2NvdW50OyBpKyspIHsKLQkJaWYgKGRzcHAgPT0gbS0+ZHNwcFtpXS5pZCkgewotCQkJYi0+ YmFzZV9vZmYgPSBhZGRyOwotCQkJYi0+YmxrX29mZiA9IG0tPmRzcHBbaV0uYmFzZTsKLQkJCWIt Pmxlbmd0aCA9IG0tPmRzcHBbaV0ubGVuOwotCQkJYi0+aHd2ZXJzaW9uID0gbS0+aHd2ZXJzaW9u OwotCQkJYi0+bG9nX21hc2sgPSBEUFVfREJHX01BU0tfRFNQUDsKLQkJCXJldHVybiAmbS0+ZHNw cFtpXTsKLQkJfQotCX0KLQotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQotCi1zdGF0aWMg dm9pZCBfc2V0dXBfZHNwcF9vcHMoc3RydWN0IGRwdV9od19kc3BwICpjLCB1bnNpZ25lZCBsb25n IGZlYXR1cmVzKQotewotCWludCBpID0gMCwgcmV0OwotCi0JaWYgKCFjIHx8ICFjLT5jYXAgfHwg IWMtPmNhcC0+c2JsaykKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IERQVV9EU1BQX01B WDsgaSsrKSB7Ci0JCWlmICghdGVzdF9iaXQoaSwgJmZlYXR1cmVzKSkKLQkJCWNvbnRpbnVlOwot CQlzd2l0Y2ggKGkpIHsKLQkJY2FzZSBEUFVfRFNQUF9QQ0M6Ci0JCQlpZiAoYy0+Y2FwLT5zYmxr LT5wY2MudmVyc2lvbiA9PQotCQkJCShEUFVfQ09MT1JfUFJPQ0VTU19WRVIoMHgxLCAweDcpKSkK LQkJCQljLT5vcHMuc2V0dXBfcGNjID0gZHB1X3NldHVwX2RzcHBfcGNjX3YxXzc7Ci0JCQllbHNl IGlmIChjLT5jYXAtPnNibGstPnBjYy52ZXJzaW9uID09Ci0JCQkJCShEUFVfQ09MT1JfUFJPQ0VT U19WRVIoMHg0LCAweDApKSkgewotCQkJCXJldCA9IHJlZ19kbWF2MV9pbml0X2RzcHBfb3BfdjQo aSwgYy0+aWR4KTsKLQkJCQlpZiAoIXJldCkKLQkJCQkJYy0+b3BzLnNldHVwX3BjYyA9Ci0JCQkJ CQlyZWdfZG1hdjFfc2V0dXBfZHNwcF9wY2N2NDsKLQkJCQllbHNlCi0JCQkJCWMtPm9wcy5zZXR1 cF9wY2MgPQotCQkJCQkJZHB1X3NldHVwX2RzcHBfcGNjdjQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJ Y2FzZSBEUFVfRFNQUF9IU0lDOgotCQkJaWYgKGMtPmNhcC0+c2Jsay0+aHNpYy52ZXJzaW9uID09 Ci0JCQkJKERQVV9DT0xPUl9QUk9DRVNTX1ZFUigweDEsIDB4NykpKQotCQkJCWMtPm9wcy5zZXR1 cF9odWUgPSBkcHVfc2V0dXBfZHNwcF9wYV9odWVfdjFfNzsKLQkJCWJyZWFrOwotCQljYXNlIERQ VV9EU1BQX1ZMVVQ6Ci0JCQlpZiAoYy0+Y2FwLT5zYmxrLT52bHV0LnZlcnNpb24gPT0KLQkJCQko RFBVX0NPTE9SX1BST0NFU1NfVkVSKDB4MSwgMHg3KSkpIHsKLQkJCQljLT5vcHMuc2V0dXBfdmx1 dCA9Ci0JCQkJICAgIGRwdV9zZXR1cF9kc3BwX3BhX3ZsdXRfdjFfNzsKLQkJCX0gZWxzZSBpZiAo Yy0+Y2FwLT5zYmxrLT52bHV0LnZlcnNpb24gPT0KLQkJCQkJKERQVV9DT0xPUl9QUk9DRVNTX1ZF UigweDEsIDB4OCkpKSB7Ci0JCQkJcmV0ID0gcmVnX2RtYXYxX2luaXRfZHNwcF9vcF92NChpLCBj LT5pZHgpOwotCQkJCWlmICghcmV0KQotCQkJCQljLT5vcHMuc2V0dXBfdmx1dCA9Ci0JCQkJCXJl Z19kbWF2MV9zZXR1cF9kc3BwX3ZsdXR2MTg7Ci0JCQkJZWxzZQotCQkJCQljLT5vcHMuc2V0dXBf dmx1dCA9Ci0JCQkJCWRwdV9zZXR1cF9kc3BwX3BhX3ZsdXRfdjFfODsKLQkJCX0KLQkJCWJyZWFr OwotCQljYXNlIERQVV9EU1BQX0dBTVVUOgotCQkJaWYgKGMtPmNhcC0+c2Jsay0+Z2FtdXQudmVy c2lvbiA9PQotCQkJCQlEUFVfQ09MT1JfUFJPQ0VTU19WRVIoMHg0LCAwKSkgewotCQkJCXJldCA9 IHJlZ19kbWF2MV9pbml0X2RzcHBfb3BfdjQoaSwgYy0+aWR4KTsKLQkJCQlpZiAoIXJldCkKLQkJ CQkJYy0+b3BzLnNldHVwX2dhbXV0ID0KLQkJCQkJCXJlZ19kbWF2MV9zZXR1cF9kc3BwXzNkX2dh bXV0djQ7Ci0JCQkJZWxzZQotCQkJCQljLT5vcHMuc2V0dXBfZ2FtdXQgPQotCQkJCQkJZHB1X3Nl dHVwX2RzcHBfM2RfZ2FtdXR2NDsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIERQVV9EU1BQX0dD OgotCQkJaWYgKGMtPmNhcC0+c2Jsay0+Z2MudmVyc2lvbiA9PQotCQkJCQlEUFVfQ09MT1JfUFJP Q0VTU19WRVIoMHgxLCA4KSkgewotCQkJCXJldCA9IHJlZ19kbWF2MV9pbml0X2RzcHBfb3BfdjQo aSwgYy0+aWR4KTsKLQkJCQlpZiAoIXJldCkKLQkJCQkJYy0+b3BzLnNldHVwX2djID0KLQkJCQkJ CXJlZ19kbWF2MV9zZXR1cF9kc3BwX2djdjE4OwotCQkJCS8qKiBwcm9ncmFtbWluZyBmb3IgdjE4 IHRocm91Z2ggYWhiIGlzIHNhbWUKLQkJCQkgKiBhcyB2MTcgaGVuY2UgYXNzaWduIHYxNyBmdW5j dGlvbgotCQkJCSAqLwotCQkJCWVsc2UKLQkJCQkJYy0+b3BzLnNldHVwX2djID0KLQkJCQkJCWRw dV9zZXR1cF9kc3BwX2djX3YxXzc7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBEUFVfRFNQUF9J R0M6Ci0JCQlpZiAoYy0+Y2FwLT5zYmxrLT5pZ2MudmVyc2lvbiA9PQotCQkJCQlEUFVfQ09MT1Jf UFJPQ0VTU19WRVIoMHgzLCAweDEpKSB7Ci0JCQkJcmV0ID0gcmVnX2RtYXYxX2luaXRfZHNwcF9v cF92NChpLCBjLT5pZHgpOwotCQkJCWlmICghcmV0KQotCQkJCQljLT5vcHMuc2V0dXBfaWdjID0K LQkJCQkJCXJlZ19kbWF2MV9zZXR1cF9kc3BwX2lnY3YzMTsKLQkJCQllbHNlCi0JCQkJCWMtPm9w cy5zZXR1cF9pZ2MgPQotCQkJCQkJZHB1X3NldHVwX2RzcHBfaWdjdjM7Ci0JCQl9Ci0JCQlicmVh azsKLQkJY2FzZSBEUFVfRFNQUF9BRDoKLQkJCWlmIChjLT5jYXAtPnNibGstPmFkLnZlcnNpb24g PT0KLQkJCSAgICBEUFVfQ09MT1JfUFJPQ0VTU19WRVIoNCwgMCkpIHsKLQkJCQljLT5vcHMuc2V0 dXBfYWQgPSBkcHVfc2V0dXBfZHNwcF9hZDQ7Ci0JCQkJYy0+b3BzLmFkX3JlYWRfaW50cl9yZXNw ID0KLQkJCQkJZHB1X3JlYWRfaW50cl9yZXNwX2FkNDsKLQkJCQljLT5vcHMudmFsaWRhdGVfYWQg PSBkcHVfdmFsaWRhdGVfZHNwcF9hZDQ7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJ CWJyZWFrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9o d19vcHMgPSB7Ci0JLnN0YXJ0ID0gTlVMTCwKLQkuc3RvcCA9IE5VTEwsCi19OwotCi1zdHJ1Y3Qg ZHB1X2h3X2RzcHAgKmRwdV9od19kc3BwX2luaXQoZW51bSBkcHVfZHNwcCBpZHgsCi0JCQl2b2lk IF9faW9tZW0gKmFkZHIsCi0JCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptKQotewotCXN0cnVjdCBk cHVfaHdfZHNwcCAqYzsKLQlzdHJ1Y3QgZHB1X2RzcHBfY2ZnICpjZmc7Ci0JaW50IHJjOwotCi0J aWYgKCFhZGRyIHx8ICFtKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWMgPSBremFs bG9jKHNpemVvZigqYyksIEdGUF9LRVJORUwpOwotCWlmICghYykKLQkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7Ci0KLQljZmcgPSBfZHNwcF9vZmZzZXQoaWR4LCBtLCBhZGRyLCAmYy0+aHcpOwot CWlmIChJU19FUlJfT1JfTlVMTChjZmcpKSB7Ci0JCWtmcmVlKGMpOwotCQlyZXR1cm4gRVJSX1BU UigtRUlOVkFMKTsKLQl9Ci0KLQkvKiBQb3B1bGF0ZSBEU1BQIFRvcCBIVyBibG9jayAqLwotCWMt Pmh3X3RvcC5iYXNlX29mZiA9IGFkZHI7Ci0JYy0+aHdfdG9wLmJsa19vZmYgPSBtLT5kc3BwX3Rv cC5iYXNlOwotCWMtPmh3X3RvcC5sZW5ndGggPSBtLT5kc3BwX3RvcC5sZW47Ci0JYy0+aHdfdG9w Lmh3dmVyc2lvbiA9IG0tPmh3dmVyc2lvbjsKLQljLT5od190b3AubG9nX21hc2sgPSBEUFVfREJH X01BU0tfRFNQUDsKLQotCS8qIEFzc2lnbiBvcHMgKi8KLQljLT5pZHggPSBpZHg7Ci0JYy0+Y2Fw ID0gY2ZnOwotCV9zZXR1cF9kc3BwX29wcyhjLCBjLT5jYXAtPmZlYXR1cmVzKTsKLQotCXJjID0g ZHB1X2h3X2Jsa19pbml0KCZjLT5iYXNlLCBEUFVfSFdfQkxLX0RTUFAsIGlkeCwgJmRwdV9od19v cHMpOwotCWlmIChyYykgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IGh3IGJsayAlZFxu IiwgcmMpOwotCQlnb3RvIGJsa19pbml0X2Vycm9yOwotCX0KLQotCWRwdV9kYmdfcmVnX3JlZ2lz dGVyX2R1bXBfcmFuZ2UoRFBVX0RCR19OQU1FLCBjZmctPm5hbWUsIGMtPmh3LmJsa19vZmYsCi0J CQljLT5ody5ibGtfb2ZmICsgYy0+aHcubGVuZ3RoLCBjLT5ody54aW5faWQpOwotCi0JcmV0dXJu IGM7Ci0KLWJsa19pbml0X2Vycm9yOgotCWt6ZnJlZShjKTsKLQotCXJldHVybiBFUlJfUFRSKHJj KTsKLX0KLQotdm9pZCBkcHVfaHdfZHNwcF9kZXN0cm95KHN0cnVjdCBkcHVfaHdfZHNwcCAqZHNw cCkKLXsKLQlpZiAoZHNwcCkgewotCQlyZWdfZG1hdjFfZGVpbml0X2RzcHBfb3BzKGRzcHAtPmlk eCk7Ci0JCWRwdV9od19ibGtfZGVzdHJveSgmZHNwcC0+YmFzZSk7Ci0JfQotCWtmcmVlKGRzcHAp OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2Rz cHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kc3BwLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNzI0OTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2RzcHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDIy MCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFu ZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9EUFVf SFdfRFNQUF9ICi0jZGVmaW5lIF9EUFVfSFdfRFNQUF9ICi0KLSNpbmNsdWRlICJkcHVfaHdfYmxr LmgiCi0KLXN0cnVjdCBkcHVfaHdfZHNwcDsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2h3X2RzcHBf b3BzIC0gaW50ZXJmYWNlIHRvIHRoZSBkc3BwIGhhcmR3YXJlIGRyaXZlciBmdW5jdGlvbnMKLSAq IENhbGxlciBtdXN0IGNhbGwgdGhlIGluaXQgZnVuY3Rpb24gdG8gZ2V0IHRoZSBkc3BwIGNvbnRl eHQgZm9yIGVhY2ggZHNwcAotICogQXNzdW1wdGlvbiBpcyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBi ZSBjYWxsZWQgYWZ0ZXIgY2xvY2tzIGFyZSBlbmFibGVkCi0gKi8KLXN0cnVjdCBkcHVfaHdfZHNw cF9vcHMgewotCS8qKgotCSAqIHNldHVwX2hpc3RvZ3JhbSAtIHNldHVwIGRzcHAgaGlzdG9ncmFt Ci0JICogQGN0eDogUG9pbnRlciB0byBkc3BwIGNvbnRleHQKLQkgKiBAY2ZnOiBQb2ludGVyIHRv IGNvbmZpZ3VyYXRpb24KLQkgKi8KLQl2b2lkICgqc2V0dXBfaGlzdG9ncmFtKShzdHJ1Y3QgZHB1 X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHJlYWRfaGlzdG9ncmFtIC0g cmVhZCBkc3BwIGhpc3RvZ3JhbQotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0J ICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnJlYWRfaGlz dG9ncmFtKShzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAq IHNldHVwX2lnYyAtIHVwZGF0ZSBkc3BwIGlnYwotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBj b250ZXh0Ci0JICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAo KnNldHVwX2lnYykoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioK LQkgKiBzZXR1cF9wYSAtIHNldHVwIGRzcHAgcGEKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRzcHAg Y29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQg KCpzZXR1cF9wYSkoc3RydWN0IGRwdV9od19kc3BwICpkc3BwLCB2b2lkICpjZmcpOwotCi0JLyoq Ci0JICogc2V0dXBfcGNjIC0gc2V0dXAgZHNwcCBwY2MKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRz cHAgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZv aWQgKCpzZXR1cF9wY2MpKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0J LyoqCi0JICogc2V0dXBfc2hhcnBlbmluZyAtIHNldHVwIGRzcHAgc2hhcnBlbmluZwotCSAqIEBj dHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9pbnRlciB0byBjb25maWd1 cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX3NoYXJwZW5pbmcpKHN0cnVjdCBkcHVfaHdfZHNw cCAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfcGFfbWVtY29sb3IgLSBzZXR1 cCBkc3BwIG1lbWNvbG9yCi0JICogQGN0eDogUG9pbnRlciB0byBkc3BwIGNvbnRleHQKLQkgKiBA Y2ZnOiBQb2ludGVyIHRvIGNvbmZpZ3VyYXRpb24KLQkgKi8KLQl2b2lkICgqc2V0dXBfcGFfbWVt Y29sb3IpKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICog c2V0dXBfc2l4em9uZSAtIHNldHVwIGRzcHAgc2l4IHpvbmUKLQkgKiBAY3R4OiBQb2ludGVyIHRv IGRzcHAgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwot CXZvaWQgKCpzZXR1cF9zaXh6b25lKShzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHAsIHZvaWQgKmNm Zyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9kYW5nZXJfc2FmZSAtIHNldHVwIGRhbmdlciBzYWZlIExV VFMKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRzcHAgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIg dG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpzZXR1cF9kYW5nZXJfc2FmZSkoc3RydWN0 IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9kaXRoZXIg LSBzZXR1cCBkc3BwIGRpdGhlcgotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0J ICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2Rp dGhlcikoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBz ZXR1cF9odWUgLSBzZXR1cCBkc3BwIFBBIGh1ZQotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBj b250ZXh0Ci0JICogQGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAo KnNldHVwX2h1ZSkoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioK LQkgKiBzZXR1cF9zYXQgLSBzZXR1cCBkc3BwIFBBIHNhdHVyYXRpb24KLQkgKiBAY3R4OiBQb2lu dGVyIHRvIGRzcHAgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgot CSAqLwotCXZvaWQgKCpzZXR1cF9zYXQpKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpj ZmcpOwotCi0JLyoqCi0JICogc2V0dXBfdmFsIC0gc2V0dXAgZHNwcCBQQSB2YWx1ZQotCSAqIEBj dHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9pbnRlciB0byBjb25maWd1 cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX3ZhbCkoc3RydWN0IGRwdV9od19kc3BwICpjdHgs IHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9jb250IC0gc2V0dXAgZHNwcCBQQSBjb250 cmFzdAotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNmZzogUG9pbnRl ciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2NvbnQpKHN0cnVjdCBkcHVf aHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfdmx1dCAtIHNldHVw IGRzcHAgUEEgVkxVVAotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICogQGNm ZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX3ZsdXQpKHN0 cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfZ2Mg LSB1cGRhdGUgZHNwcCBnYwotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICog QGNmZzogUG9pbnRlciB0byBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2djKShz dHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHNldHVwX2dh bXV0IC0gdXBkYXRlIGRzcHAgZ2FtdXQKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGRzcHAgY29udGV4 dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gY29uZmlndXJhdGlvbgotCSAqLwotCXZvaWQgKCpzZXR1 cF9nYW11dCkoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkg KiB2YWxpZGF0ZV9hZCAtIGNoZWNrIGlmIGFkIHByb3BlcnR5IGNhbiBiZSBzZXQKLQkgKiBAY3R4 OiBQb2ludGVyIHRvIGRzcHAgY29udGV4dAotCSAqIEBwcm9wOiBQb2ludGVyIHRvIGFkIHByb3Bl cnR5IGJlaW5nIHZhbGlkYXRlZAotCSAqLwotCWludCAoKnZhbGlkYXRlX2FkKShzdHJ1Y3QgZHB1 X2h3X2RzcHAgKmN0eCwgdTMyICpwcm9wKTsKLQotCS8qKgotCSAqIHNldHVwX2FkIC0gdXBkYXRl IHRoZSBhZCBwcm9wZXJ0eQotCSAqIEBjdHg6IFBvaW50ZXIgdG8gZHNwcCBjb250ZXh0Ci0JICog QGNmZzogUG9pbnRlciB0byBhZCBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX2Fk KShzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIGFkX3Jl YWRfaW50cl9yZXNwIC0gZnVuY3Rpb24gdG8gZ2V0IGludGVycnVwdCByZXNwb25zZSBmb3IgYWQK LQkgKiBAZXZlbnQ6IEV2ZW50IGZvciB3aGljaCByZXNwb25zZSBuZWVkcyB0byBiZSByZWFkCi0J ICogQHJlc3A6IFBvaW50ZXIgdG8gdTMyIHdoZXJlIHJlc3BvbnNlIHZhbHVlIGlzIGR1bXBlZC4K LQkgKi8KLQl2b2lkICgqYWRfcmVhZF9pbnRyX3Jlc3ApKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4 LCB1MzIgZXZlbnQsCi0JCQl1MzIgKnJlc3ApOwotCi19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVf aHdfZHNwcCAtIGRzcHAgZGVzY3JpcHRpb24KLSAqIEBiYXNlOiBIYXJkd2FyZSBibG9jayBiYXNl IHN0cnVjdHVyZQotICogQGh3OiBCbG9jayBoYXJkd2FyZSBkZXRhaWxzCi0gKiBAaHdfdG9wOiBC bG9jayBoYXJkd2FyZSB0b3AgZGV0YWlscwotICogQGlkeDogRFNQUCBpbmRleAotICogQGNhcDog UG9pbnRlciB0byBsYXllcl9jZmcKLSAqIEBvcHM6IFBvaW50ZXIgdG8gb3BlcmF0aW9ucyBwb3Nz aWJsZSBmb3IgdGhpcyBEU1BQCi0gKi8KLXN0cnVjdCBkcHVfaHdfZHNwcCB7Ci0Jc3RydWN0IGRw dV9od19ibGsgYmFzZTsKLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3OwotCi0JLyogZHNw cCB0b3AgKi8KLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwIGh3X3RvcDsKLQotCS8qIGRzcHAg Ki8KLQllbnVtIGRwdV9kc3BwIGlkeDsKLQljb25zdCBzdHJ1Y3QgZHB1X2RzcHBfY2ZnICpjYXA7 Ci0KLQkvKiBPcHMgKi8KLQlzdHJ1Y3QgZHB1X2h3X2RzcHBfb3BzIG9wczsKLX07Ci0KLS8qKgot ICogZHB1X2h3X2RzcHAgLSBjb252ZXJ0IGJhc2Ugb2JqZWN0IGRwdV9od19iYXNlIHRvIGNvbnRh aW5lcgotICogQGh3OiBQb2ludGVyIHRvIGJhc2UgaGFyZHdhcmUgYmxvY2sKLSAqIHJldHVybjog UG9pbnRlciB0byBoYXJkd2FyZSBibG9jayBjb250YWluZXIKLSAqLwotc3RhdGljIGlubGluZSBz dHJ1Y3QgZHB1X2h3X2RzcHAgKnRvX2RwdV9od19kc3BwKHN0cnVjdCBkcHVfaHdfYmxrICpodykK LXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgZHB1X2h3X2RzcHAsIGJhc2UpOwot fQotCi0vKioKLSAqIGRwdV9od19kc3BwX2luaXQgLSBpbml0aWFsaXplcyB0aGUgZHNwcCBodyBk cml2ZXIgb2JqZWN0LgotICogc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGJlZm9yZSBhY2Nlc3Npbmcg ZXZlcnkgZHNwcC4KLSAqIEBpZHg6ICBEU1BQIGluZGV4IGZvciB3aGljaCBkcml2ZXIgb2JqZWN0 IGlzIHJlcXVpcmVkCi0gKiBAYWRkcjogTWFwcGVkIHJlZ2lzdGVyIGlvIGFkZHJlc3Mgb2YgTURQ Ci0gKiBAUmV0dXJuOiBwb2ludGVyIHRvIHN0cnVjdHVyZSBvciBFUlJfUFRSCi0gKi8KLXN0cnVj dCBkcHVfaHdfZHNwcCAqZHB1X2h3X2RzcHBfaW5pdChlbnVtIGRwdV9kc3BwIGlkeCwKLQkJCXZv aWQgX19pb21lbSAqYWRkciwKLQkJCXN0cnVjdCBkcHVfbWRzc19jZmcgKm0pOwotCi0vKioKLSAq IGRwdV9od19kc3BwX2Rlc3Ryb3koKTogRGVzdHJveXMgRFNQUCBkcml2ZXIgY29udGV4dAotICog QGRzcHA6ICAgUG9pbnRlciB0byBEU1BQIGRyaXZlciBjb250ZXh0Ci0gKi8KLXZvaWQgZHB1X2h3 X2RzcHBfZGVzdHJveShzdHJ1Y3QgZHB1X2h3X2RzcHAgKmRzcHApOwotCi0jZW5kaWYgLypfRFBV X0hXX0RTUFBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X2xtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uYwpp bmRleCBhZDIxODY3Li43NWEzMGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfbG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfbG0uYwpAQCAtMTAsNiArMTAsNyBAQAogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCisjaW5jbHVkZSA8dWFwaS9kcm0vZHB1X2RybS5o PgogI2luY2x1ZGUgImRwdV9rbXMuaCIKICNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgogI2lu Y2x1ZGUgImRwdV9od2lvLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfbWRzcy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X21kc3MuaAppbmRleCA3MGQ1N2M5Li5mY2QxNjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRzcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19tZHNzLmgKQEAgLTk5LDcgKzk5LDYgQEAgZW51bSBkcHVfaHdfYmxr X3R5cGUgewogCURQVV9IV19CTEtfVE9QID0gMCwKIAlEUFVfSFdfQkxLX1NTUFAsCiAJRFBVX0hX X0JMS19MTSwKLQlEUFVfSFdfQkxLX0RTUFAsCiAJRFBVX0hXX0JMS19EUywKIAlEUFVfSFdfQkxL X0NUTCwKIAlEUFVfSFdfQkxLX0NETSwKQEAgLTQ2MSwzOSArNDYwLDE2IEBAIHN0cnVjdCBkcHVf bWRzc19jb2xvciB7CiAgKi8KICNkZWZpbmUgRFBVX0RCR19NQVNLX05PTkUgICAgICgxIDw8IDAp CiAjZGVmaW5lIERQVV9EQkdfTUFTS19DRE0gICAgICAoMSA8PCAxKQotI2RlZmluZSBEUFVfREJH X01BU0tfRFNQUCAgICAgKDEgPDwgMikKLSNkZWZpbmUgRFBVX0RCR19NQVNLX0lOVEYgICAgICgx IDw8IDMpCi0jZGVmaW5lIERQVV9EQkdfTUFTS19MTSAgICAgICAoMSA8PCA0KQotI2RlZmluZSBE UFVfREJHX01BU0tfQ1RMICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgRFBVX0RCR19NQVNLX1BJTkdQ T05HICgxIDw8IDYpCi0jZGVmaW5lIERQVV9EQkdfTUFTS19TU1BQICAgICAoMSA8PCA3KQotI2Rl ZmluZSBEUFVfREJHX01BU0tfV0IgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgRFBVX0RCR19NQVNL X1RPUCAgICAgICgxIDw8IDkpCi0jZGVmaW5lIERQVV9EQkdfTUFTS19WQklGICAgICAoMSA8PCAx MCkKLSNkZWZpbmUgRFBVX0RCR19NQVNLX1JPVCAgICAgICgxIDw8IDExKQotI2RlZmluZSBEUFVf REJHX01BU0tfRFMgICAgICAgKDEgPDwgMTIpCi0KLS8qKgotICogc3RydWN0IGRwdV9od19jcF9j Zmc6IGhhcmR3YXJlIGRzcHAvbG0gZmVhdHVyZSBwYXlsb2FkLgotICogQHBheWxvYWQ6IEZlYXR1 cmUgc3BlY2lmaWMgcGF5bG9hZC4KLSAqIEBsZW46IExlbmd0aCBvZiB0aGUgcGF5bG9hZC4KLSAq IEBjdGw6IGNvbnRyb2wgcG9pbnRlciBhc3NvY2lhdGVkIHdpdGggZHNwcC9sbS4KLSAqIEBsYXN0 X2ZlYXR1cmU6IGxhc3QgZmVhdHVyZSB0aGF0IHdpbGwgYmUgc2V0LgotICogQG51bV9vZl9taXhl cnM6IG51bWJlciBvZiBsYXllciBtaXhlcnMgZm9yIHRoZSBkaXNwbGF5LgotICogQG1peGVyX2lu Zm86IG1peGVyIGluZm8gcG9pbnRlciBhc3NvY2lhdGVkIHdpdGggbG0uCi0gKiBAZGlzcGxheXY6 IGhlaWdodCBvZiB0aGUgZGlzcGxheS4KLSAqIEBkaXNwbGF5aDogd2lkdGggb2YgdGhlIGRpc3Bs YXkuCi0gKi8KLXN0cnVjdCBkcHVfaHdfY3BfY2ZnIHsKLQl2b2lkICpwYXlsb2FkOwotCXUzMiBs ZW47Ci0Jdm9pZCAqY3RsOwotCXUzMiBsYXN0X2ZlYXR1cmU7Ci0JdTMyIG51bV9vZl9taXhlcnM7 Ci0Jdm9pZCAqbWl4ZXJfaW5mbzsKLQl1MzIgZGlzcGxheXY7Ci0JdTMyIGRpc3BsYXloOwotfTsK KyNkZWZpbmUgRFBVX0RCR19NQVNLX0lOVEYgICAgICgxIDw8IDIpCisjZGVmaW5lIERQVV9EQkdf TUFTS19MTSAgICAgICAoMSA8PCAzKQorI2RlZmluZSBEUFVfREJHX01BU0tfQ1RMICAgICAgKDEg PDwgNCkKKyNkZWZpbmUgRFBVX0RCR19NQVNLX1BJTkdQT05HICgxIDw8IDUpCisjZGVmaW5lIERQ VV9EQkdfTUFTS19TU1BQICAgICAoMSA8PCA2KQorI2RlZmluZSBEUFVfREJHX01BU0tfV0IgICAg ICAgKDEgPDwgNykKKyNkZWZpbmUgRFBVX0RCR19NQVNLX1RPUCAgICAgICgxIDw8IDgpCisjZGVm aW5lIERQVV9EQkdfTUFTS19WQklGICAgICAoMSA8PCA5KQorI2RlZmluZSBEUFVfREJHX01BU0tf Uk9UICAgICAgKDEgPDwgMTApCisjZGVmaW5lIERQVV9EQkdfTUFTS19EUyAgICAgICAoMSA8PCAx MSkKIAogLyoqCiAgKiBzdHJ1Y3QgZHB1X2h3X2RpbV9sYXllcjogZGltIGxheWVyIGNvbmZpZ3MK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19waW5ncG9u Zy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Bpbmdwb25nLmMKaW5k ZXggMGJmYjUxMS4uODRkMjE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X3Bpbmdwb25nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X3Bpbmdwb25nLmMKQEAgLTM2LDExICszNiw2IEBACiAjZGVmaW5lIFBQX0ZCQ19C VURHRVRfQ1RMICAgICAgICAgICAgICAgMHgwMzgKICNkZWZpbmUgUFBfRkJDX0xPU1NZX01PREUg ICAgICAgICAgICAgICAweDAzQwogCi0jZGVmaW5lIERJVEhFUl9ERVBUSF9NQVBfSU5ERVggOQot c3RhdGljIHUzMiBkaXRoZXJfZGVwdGhfbWFwW0RJVEhFUl9ERVBUSF9NQVBfSU5ERVhdID0gewot CTAsIDAsIDAsIDAsIDAsIDEsIDIsIDMsIDMKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgZHB1X3Bpbmdw b25nX2NmZyAqX3Bpbmdwb25nX29mZnNldChlbnVtIGRwdV9waW5ncG9uZyBwcCwKIAkJc3RydWN0 IGRwdV9tZHNzX2NmZyAqbSwKIAkJdm9pZCBfX2lvbWVtICphZGRyLApAQCAtMTA5LDU3ICsxMDQs NiBAQCBzdGF0aWMgaW50IGRwdV9od19wcF9wb2xsX3RpbWVvdXRfd3JfcHRyKHN0cnVjdCBkcHVf aHdfcGluZ3BvbmcgKnBwLAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBkcHVfaHdfcHBf c2V0dXBfZGl0aGVyX3YxKHN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKnBwLAotCQkJCQl2b2lkICpj ZmcsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYzsKLQlzdHJ1 Y3QgZHJtX21zbV9kaXRoZXIgKmRpdGhlciA9IChzdHJ1Y3QgZHJtX21zbV9kaXRoZXIgKiljZmc7 Ci0JdTMyIGJhc2UgPSAwLCBvZmZzZXQgPSAwLCBkYXRhID0gMCwgaSA9IDA7Ci0KLQlpZiAoIXBw KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWMgPSAmcHAtPmh3OwotCWJhc2UgPSBwcC0+Y2Fwcy0+ c2Jsay0+ZGl0aGVyLmJhc2U7Ci0JaWYgKCFkaXRoZXIpIHsKLQkJLyogZGl0aGVyIHByb3BlcnR5 IGRpc2FibGUgY2FzZSAqLwotCQlEUFVfUkVHX1dSSVRFKGMsIGJhc2UsIDApOwotCQlyZXR1cm4g MDsKLQl9Ci0KLQlpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgZHJtX21zbV9kaXRoZXIpKSB7Ci0J CURSTV9FUlJPUigiaW5wdXQgbGVuICV6dSwgZXhwZWN0ZWQgbGVuICV6dVxuIiwgbGVuLAotCQkJ c2l6ZW9mKHN0cnVjdCBkcm1fbXNtX2RpdGhlcikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQlpZiAoZGl0aGVyLT5jMF9iaXRkZXB0aCA+PSBESVRIRVJfREVQVEhfTUFQX0lOREVYIHx8Ci0J CWRpdGhlci0+YzFfYml0ZGVwdGggPj0gRElUSEVSX0RFUFRIX01BUF9JTkRFWCB8fAotCQlkaXRo ZXItPmMyX2JpdGRlcHRoID49IERJVEhFUl9ERVBUSF9NQVBfSU5ERVggfHwKLQkJZGl0aGVyLT5j M19iaXRkZXB0aCA+PSBESVRIRVJfREVQVEhfTUFQX0lOREVYKQotCQlyZXR1cm4gLUVJTlZBTDsK LQotCW9mZnNldCArPSA0OwotCWRhdGEgPSBkaXRoZXJfZGVwdGhfbWFwW2RpdGhlci0+YzBfYml0 ZGVwdGhdICYgUkVHX01BU0soMik7Ci0JZGF0YSB8PSAoZGl0aGVyX2RlcHRoX21hcFtkaXRoZXIt PmMxX2JpdGRlcHRoXSAmIFJFR19NQVNLKDIpKSA8PCAyOwotCWRhdGEgfD0gKGRpdGhlcl9kZXB0 aF9tYXBbZGl0aGVyLT5jMl9iaXRkZXB0aF0gJiBSRUdfTUFTSygyKSkgPDwgNDsKLQlkYXRhIHw9 IChkaXRoZXJfZGVwdGhfbWFwW2RpdGhlci0+YzNfYml0ZGVwdGhdICYgUkVHX01BU0soMikpIDw8 IDY7Ci0JZGF0YSB8PSAoZGl0aGVyLT50ZW1wb3JhbF9lbikgPyAoMSA8PCA4KSA6IDA7Ci0JRFBV X1JFR19XUklURShjLCBiYXNlICsgb2Zmc2V0LCBkYXRhKTsKLQotCWZvciAoaSA9IDA7IGkgPCBE SVRIRVJfTUFUUklYX1NaIC0gMzsgaSArPSA0KSB7Ci0JCW9mZnNldCArPSA0OwotCQlkYXRhID0g KGRpdGhlci0+bWF0cml4W2ldICYgUkVHX01BU0soNCkpIHwKLQkJCSgoZGl0aGVyLT5tYXRyaXhb aSArIDFdICYgUkVHX01BU0soNCkpIDw8IDQpIHwKLQkJCSgoZGl0aGVyLT5tYXRyaXhbaSArIDJd ICYgUkVHX01BU0soNCkpIDw8IDgpIHwKLQkJCSgoZGl0aGVyLT5tYXRyaXhbaSArIDNdICYgUkVH X01BU0soNCkpIDw8IDEyKTsKLQkJRFBVX1JFR19XUklURShjLCBiYXNlICsgb2Zmc2V0LCBkYXRh KTsKLQl9Ci0JRFBVX1JFR19XUklURShjLCBiYXNlLCAxKTsKLQotCXJldHVybiAwOwotfQotCiBz dGF0aWMgaW50IGRwdV9od19wcF9lbmFibGVfdGUoc3RydWN0IGRwdV9od19waW5ncG9uZyAqcHAs IGJvb2wgZW5hYmxlKQogewogCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7CkBAIC0yNDgs MjQgKzE5MiwxMiBAQCBzdGF0aWMgdTMyIGRwdV9od19wcF9nZXRfbGluZV9jb3VudChzdHJ1Y3Qg ZHB1X2h3X3Bpbmdwb25nICpwcCkKIHN0YXRpYyB2b2lkIF9zZXR1cF9waW5ncG9uZ19vcHMoc3Ry dWN0IGRwdV9od19waW5ncG9uZ19vcHMgKm9wcywKIAljb25zdCBzdHJ1Y3QgZHB1X3Bpbmdwb25n X2NmZyAqaHdfY2FwKQogewotCXUzMiB2ZXJzaW9uID0gMDsKLQogCW9wcy0+c2V0dXBfdGVhcmNo ZWNrID0gZHB1X2h3X3BwX3NldHVwX3RlX2NvbmZpZzsKIAlvcHMtPmVuYWJsZV90ZWFyY2hlY2sg PSBkcHVfaHdfcHBfZW5hYmxlX3RlOwogCW9wcy0+Y29ubmVjdF9leHRlcm5hbF90ZSA9IGRwdV9o d19wcF9jb25uZWN0X2V4dGVybmFsX3RlOwogCW9wcy0+Z2V0X3ZzeW5jX2luZm8gPSBkcHVfaHdf cHBfZ2V0X3ZzeW5jX2luZm87CiAJb3BzLT5wb2xsX3RpbWVvdXRfd3JfcHRyID0gZHB1X2h3X3Bw X3BvbGxfdGltZW91dF93cl9wdHI7CiAJb3BzLT5nZXRfbGluZV9jb3VudCA9IGRwdV9od19wcF9n ZXRfbGluZV9jb3VudDsKLQotCXZlcnNpb24gPSBEUFVfQ09MT1JfUFJPQ0VTU19NQUpPUihod19j YXAtPnNibGstPmRpdGhlci52ZXJzaW9uKTsKLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIDE6 Ci0JCW9wcy0+c2V0dXBfZGl0aGVyID0gZHB1X2h3X3BwX3NldHVwX2RpdGhlcl92MTsKLQkJYnJl YWs7Ci0JZGVmYXVsdDoKLQkJb3BzLT5zZXR1cF9kaXRoZXIgPSBOVUxMOwotCQlicmVhazsKLQl9 CiB9OwogCiBzdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcGluZ3BvbmcuaCBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19waW5ncG9uZy5oCmluZGV4IDdk YmZjYWUuLjNjYWNjZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19waW5ncG9uZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19waW5ncG9uZy5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSAiZHB1X2h3X21kc3Mu aCIKICNpbmNsdWRlICJkcHVfaHdfdXRpbC5oIgogI2luY2x1ZGUgImRwdV9od19ibGsuaCIKLSNp bmNsdWRlIDx1YXBpL2RybS9tc21fZHJtX3BwLmg+CiAKIHN0cnVjdCBkcHVfaHdfcGluZ3Bvbmc7 CiAKQEAgLTg4LDExICs4Nyw2IEBAIHN0cnVjdCBkcHVfaHdfcGluZ3Bvbmdfb3BzIHsKIAlpbnQg KCpwb2xsX3RpbWVvdXRfd3JfcHRyKShzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpwcCwgdTMyIHRp bWVvdXRfdXMpOwogCiAJLyoqCi0JICogUHJvZ3JhbSB0aGUgZGl0aGVyIGh3IGJsb2NrCi0JICov Ci0JaW50ICgqc2V0dXBfZGl0aGVyKShzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpwcCwgdm9pZCAq Y2ZnLCBzaXplX3QgbGVuKTsKLQotCS8qKgogCSAqIE9idGFpbiBjdXJyZW50IHZlcnRpY2FsIGxp bmUgY291bnRlcgogCSAqLwogCXUzMiAoKmdldF9saW5lX2NvdW50KShzdHJ1Y3QgZHB1X2h3X3Bp bmdwb25nICpwcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfcmVnX2RtYV92MS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3JlZ19kbWFfdjEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MyNzcyZi4uMDAw MDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92 MS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzU3ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAx Ny0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgotICovCi0jaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdfY3Rs LmgiCi0jaW5jbHVkZSAiZHB1X2h3X3JlZ19kbWFfdjEuaCIKLSNpbmNsdWRlICJtc21fZHJ2Lmgi Ci0jaW5jbHVkZSAibXNtX2ttcy5oIgotI2luY2x1ZGUgIm1zbV9tbXUuaCIKLQotI2RlZmluZSBH VUFSRF9CWVRFUyAoQklUKDgpIC0gMSkKLSNkZWZpbmUgQUxJR05FRF9PRkZTRVQgKFUzMl9NQVgg JiB+KEdVQVJEX0JZVEVTKSkKLSNkZWZpbmUgQUREUl9BTElHTiBCSVQoOCkKLSNkZWZpbmUgTUFY X1JFTEFUSVZFX09GRiAoQklUKDIwKSAtIDEpCi0KLSNkZWZpbmUgREVDT0RFX1NFTF9PUCAoQklU KEhXX0JMS19TRUxFQ1QpKQotI2RlZmluZSBSRUdfV1JJVEVfT1AgKChCSVQoUkVHX1NJTkdMRV9X UklURSkpIHwgKEJJVChSRUdfQkxLX1dSSVRFX1NJTkdMRSkpIHwgXAotCShCSVQoUkVHX0JMS19X UklURV9JTkMpKSB8IChCSVQoUkVHX0JMS19XUklURV9NVUxUSVBMRSkpKQotCi0jZGVmaW5lIFJF R19ETUFfT1BTIChERUNPREVfU0VMX09QIHwgUkVHX1dSSVRFX09QKQotI2RlZmluZSBJU19PUF9B TExPV0VEKG9wLCBidWZfb3ApIChCSVQob3ApICYgYnVmX29wKQotCi0jZGVmaW5lIFJFR19ETUFf T1BfTU9ERV9PRkYgMHg0Ci0KLSNkZWZpbmUgUkVHX0RNQV9DVEwwX1FVRVVFXzBfQ01EMF9PRkYg MHgxNAotI2RlZmluZSBSRUdfRE1BX0NUTDBfUkVTRVRfT0ZGIDB4RTQKLSNkZWZpbmUgUkVHX0RN QV9DVExfVFJJR0dFUl9PRkYgMHhENAotCi0jZGVmaW5lIFNFVF9VUF9SRUdfRE1BX1JFRyhodywg cmVnX2RtYSkgXAotCWRvIHsgXAotCQkoaHcpLmJhc2Vfb2ZmID0gKHJlZ19kbWEpLT5hZGRyOyBc Ci0JCShodykuYmxrX29mZiA9IChyZWdfZG1hKS0+Y2Fwcy0+YmFzZTsgXAotCQkoaHcpLmh3dmVy c2lvbiA9IChyZWdfZG1hKS0+Y2Fwcy0+dmVyc2lvbjsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmlu ZSBTSVpFX0RXT1JEKHgpICgoeCkgLyAoc2l6ZW9mKHUzMikpKQotI2RlZmluZSBOT1RfV09SRF9B TElHTkVEKHgpICgoeCkgJiAweDMpCi0KLQotI2RlZmluZSBHUlBfVklHX0hXX0JMS19TRUxFQ1Qg KFZJRzAgfCBWSUcxIHwgVklHMiB8IFZJRzMpCi0jZGVmaW5lIEdSUF9EU1BQX0hXX0JMS19TRUxF Q1QgKERTUFAwIHwgRFNQUDEgfCBEU1BQMiB8IERTUFAzKQotI2RlZmluZSBCVUZGRVJfU1BBQ0Vf TEVGVChjZmcpICgoY2ZnKS0+ZG1hX2J1Zi0+YnVmZmVyX3NpemUgLSBcCi0JCQkoY2ZnKS0+ZG1h X2J1Zi0+aW5kZXgpCi0KLSNkZWZpbmUgUkVHX0RNQV9ERUNPREVfU0VMIDB4MTgwQUMwNjAKLSNk ZWZpbmUgU0lOR0xFX1JFR19XUklURV9PUENPREUgKEJJVCgyOCkpCi0jZGVmaW5lIFJFTF9BRERS X09QQ09ERSAoQklUKDI3KSkKLSNkZWZpbmUgSFdfSU5ERVhfUkVHX1dSSVRFX09QQ09ERSAoQklU KDI4KSB8IEJJVCgyOSkpCi0jZGVmaW5lIEFVVE9fSU5DX1JFR19XUklURV9PUENPREUgKEJJVCgz MCkpCi0jZGVmaW5lIEJMS19SRUdfV1JJVEVfT1BDT0RFIChCSVQoMzApIHwgQklUKDI4KSkKLQot I2RlZmluZSBXUkFQX01JTl9TSVpFIDIKLSNkZWZpbmUgV1JBUF9NQVhfU0laRSAoQklUKDQpIC0g MSkKLSNkZWZpbmUgTUFYX0RXT1JEU19TWiAoQklUKDE0KSAtIDEpCi0jZGVmaW5lIFJFR19ETUFf SEVBREVSU19CVUZGRVJfU1ogKHNpemVvZih1MzIpICogMTI4KQotCi10eXBlZGVmIGludCAoKnJl Z19kbWFfaW50ZXJuYWxfb3BzKSAoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNm Zyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X2h3X3JlZ19kbWEgKnJlZ19kbWE7Ci1zdGF0aWMgdTMy IG9wc19tZW1fc2l6ZVtSRUdfRE1BX1NFVFVQX09QU19NQVhdID0gewotCVtSRUdfQkxLX1dSSVRF X1NJTkdMRV0gPSBzaXplb2YodTMyKSAqIDIsCi0JW1JFR19CTEtfV1JJVEVfSU5DXSA9IHNpemVv Zih1MzIpICogMiwKLQlbUkVHX0JMS19XUklURV9NVUxUSVBMRV0gPSBzaXplb2YodTMyKSAqIDIs Ci0JW0hXX0JMS19TRUxFQ1RdID0gc2l6ZW9mKHUzMikgKiAyLAotCVtSRUdfU0lOR0xFX1dSSVRF XSA9IHNpemVvZih1MzIpICogMgotfTsKLQotc3RhdGljIHUzMiBxdWV1ZV9zZWxbRE1BX0NUTF9R VUVVRV9NQVhdID0gewotCVtETUFfQ1RMX1FVRVVFMF0gPSBCSVQoMCksCi0JW0RNQV9DVExfUVVF VUUxXSA9IEJJVCg0KSwKLX07Ci0KLXN0YXRpYyB1MzIgcmVnX2RtYV9jdGxfcXVldWVfb2ZmW0NU TF9NQVhdOwotc3RhdGljIHUzMiBkc3BwX3JlYWRfc2VsW0RTUFBfSElTVF9NQVhdID0gewotCVtE U1BQMF9ISVNUXSA9IDAsCi0JW0RTUFAxX0hJU1RdID0gMSwKLQlbRFNQUDJfSElTVF0gPSAyLAot CVtEU1BQM19ISVNUXSA9IDMsCi19OwotCi1zdGF0aWMgdTMyIHYxX3N1cHBvcnRlZFtSRUdfRE1B X0ZFQVRVUkVTX01BWF0gID0gewotCVtHQU1VVF0gPSBHUlBfVklHX0hXX0JMS19TRUxFQ1QgfCBH UlBfRFNQUF9IV19CTEtfU0VMRUNULAotCVtWTFVUXSA9IEdSUF9EU1BQX0hXX0JMS19TRUxFQ1Qs Ci0JW0dDXSA9IEdSUF9EU1BQX0hXX0JMS19TRUxFQ1QsCi0JW0lHQ10gPSBEU1BQX0lHQyB8IEdS UF9EU1BQX0hXX0JMS19TRUxFQ1QsCi0JW1BDQ10gPSBHUlBfRFNQUF9IV19CTEtfU0VMRUNULAot fTsKLQotc3RhdGljIGludCB2YWxpZGF0ZV9kbWFfY2ZnKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1 cF9vcHNfY2ZnICpjZmcpOwotc3RhdGljIGludCB2YWxpZGF0ZV93cml0ZV9kZWNvZGVfc2VsKHN0 cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotc3RhdGljIGludCB2YWxpZGF0 ZV93cml0ZV9yZWcoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZyk7Ci1zdGF0 aWMgaW50IHZhbGlkYXRlX3dyaXRlX211bHRpX2x1dF9yZWcoc3RydWN0IGRwdV9yZWdfZG1hX3Nl dHVwX29wc19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IHZhbGlkYXRlX2xhc3RfY21kKHN0cnVjdCBk cHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotc3RhdGljIGludCB3cml0ZV9kZWNvZGVf c2VsKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwotc3RhdGljIGludCB3 cml0ZV9zaW5nbGVfcmVnKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwot c3RhdGljIGludCB3cml0ZV9tdWx0aV9yZWdfaW5kZXgoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVw X29wc19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IHdyaXRlX211bHRpX3JlZ19pbmMoc3RydWN0IGRw dV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50IHdyaXRlX211bHRpX2x1 dF9yZWcoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZyk7Ci1zdGF0aWMgaW50 IHdyaXRlX2xhc3RfY21kKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpOwot c3RhdGljIGludCByZXNldF9yZWdfZG1hX2J1ZmZlcl92MShzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVm ZmVyICpsdXRfYnVmKTsKLXN0YXRpYyBpbnQgY2hlY2tfc3VwcG9ydF92MShlbnVtIGRwdV9yZWdf ZG1hX2ZlYXR1cmVzIGZlYXR1cmUsCi0JCWVudW0gZHB1X3JlZ19kbWFfYmxrIGJsaywgYm9vbCAq aXNfc3VwcG9ydGVkKTsKLXN0YXRpYyBpbnQgc2V0dXBfcGF5bG9hZF92MShzdHJ1Y3QgZHB1X3Jl Z19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKTsKLXN0YXRpYyBpbnQga2lja19vZmZfdjEoc3RydWN0 IGRwdV9yZWdfZG1hX2tpY2tvZmZfY2ZnICpjZmcpOwotc3RhdGljIGludCByZXNldF92MShzdHJ1 Y3QgZHB1X2h3X2N0bCAqY3RsKTsKLXN0YXRpYyBpbnQgbGFzdF9jbWRfdjEoc3RydWN0IGRwdV9o d19jdGwgKmN0bCwgZW51bSBkcHVfcmVnX2RtYV9xdWV1ZSBxKTsKLXN0YXRpYyBzdHJ1Y3QgZHB1 X3JlZ19kbWFfYnVmZmVyICphbGxvY19yZWdfZG1hX2J1Zl92MSh1MzIgc2l6ZSk7Ci1zdGF0aWMg aW50IGRlYWxsb2NfcmVnX2RtYV92MShzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpsdXRfYnVm KTsKLQotc3RhdGljIHJlZ19kbWFfaW50ZXJuYWxfb3BzIHdyaXRlX2RtYV9vcF9wYXJhbXNbUkVH X0RNQV9TRVRVUF9PUFNfTUFYXSA9IHsKLQlbSFdfQkxLX1NFTEVDVF0gPSB3cml0ZV9kZWNvZGVf c2VsLAotCVtSRUdfU0lOR0xFX1dSSVRFXSA9IHdyaXRlX3NpbmdsZV9yZWcsCi0JW1JFR19CTEtf V1JJVEVfU0lOR0xFXSA9IHdyaXRlX211bHRpX3JlZ19pbmMsCi0JW1JFR19CTEtfV1JJVEVfSU5D XSA9IHdyaXRlX211bHRpX3JlZ19pbmRleCwKLQlbUkVHX0JMS19XUklURV9NVUxUSVBMRV0gPSB3 cml0ZV9tdWx0aV9sdXRfcmVnLAotfTsKLQotc3RhdGljIHJlZ19kbWFfaW50ZXJuYWxfb3BzIHZh bGlkYXRlX2RtYV9vcF9wYXJhbXNbUkVHX0RNQV9TRVRVUF9PUFNfTUFYXSA9IHsKLQlbSFdfQkxL X1NFTEVDVF0gPSB2YWxpZGF0ZV93cml0ZV9kZWNvZGVfc2VsLAotCVtSRUdfU0lOR0xFX1dSSVRF XSA9IHZhbGlkYXRlX3dyaXRlX3JlZywKLQlbUkVHX0JMS19XUklURV9TSU5HTEVdID0gdmFsaWRh dGVfd3JpdGVfcmVnLAotCVtSRUdfQkxLX1dSSVRFX0lOQ10gPSB2YWxpZGF0ZV93cml0ZV9yZWcs Ci0JW1JFR19CTEtfV1JJVEVfTVVMVElQTEVdID0gdmFsaWRhdGVfd3JpdGVfbXVsdGlfbHV0X3Jl ZywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpsYXN0X2NtZF9idWY7 Ci0KLXN0YXRpYyB2b2lkIGdldF9kZWNvZGVfc2VsKHVuc2lnbmVkIGxvbmcgYmxrLCB1MzIgKmRl Y29kZV9zZWwpCi17Ci0JaW50IGkgPSAwOwotCi0JKmRlY29kZV9zZWwgPSAwOwotCWZvcl9lYWNo X3NldF9iaXQoaSwgJmJsaywgMzEpIHsKLQkJc3dpdGNoIChCSVQoaSkpIHsKLQkJY2FzZSBWSUcw OgotCQkJKmRlY29kZV9zZWwgfD0gQklUKDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklHMToKLQkJ CSpkZWNvZGVfc2VsIHw9IEJJVCgxKTsKLQkJCWJyZWFrOwotCQljYXNlIFZJRzI6Ci0JCQkqZGVj b2RlX3NlbCB8PSBCSVQoMik7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUczOgotCQkJKmRlY29kZV9z ZWwgfD0gQklUKDMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFNQUDA6Ci0JCQkqZGVjb2RlX3NlbCB8 PSBCSVQoMTcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFNQUDE6Ci0JCQkqZGVjb2RlX3NlbCB8PSBC SVQoMTgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFNQUDI6Ci0JCQkqZGVjb2RlX3NlbCB8PSBCSVQo MTkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRFNQUDM6Ci0JCQkqZGVjb2RlX3NlbCB8PSBCSVQoMjAp OwotCQkJYnJlYWs7Ci0JCWNhc2UgU1NQUF9JR0M6Ci0JCQkqZGVjb2RlX3NlbCB8PSBCSVQoNCk7 Ci0JCQlicmVhazsKLQkJY2FzZSBEU1BQX0lHQzoKLQkJCSpkZWNvZGVfc2VsIHw9IEJJVCgyMSk7 Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCURSTV9FUlJPUigiYmxvY2sgbm90IHN1cHBvcnRl ZCAlbHhcbiIsIEJJVChpKSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCB3 cml0ZV9tdWx0aV9yZWcoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZykKLXsK LQl1OCAqbG9jID0gTlVMTDsKLQotCWxvYyA9ICAodTggKiljZmctPmRtYV9idWYtPnZhZGRyICsg Y2ZnLT5kbWFfYnVmLT5pbmRleDsKLQltZW1jcHkobG9jLCBjZmctPmRhdGEsIGNmZy0+ZGF0YV9z aXplKTsKLQljZmctPmRtYV9idWYtPmluZGV4ICs9IGNmZy0+ZGF0YV9zaXplOwotCWNmZy0+ZG1h X2J1Zi0+bmV4dF9vcF9hbGxvd2VkID0gUkVHX1dSSVRFX09QIHwgREVDT0RFX1NFTF9PUDsKLQlj ZmctPmRtYV9idWYtPm9wc19jb21wbGV0ZWQgfD0gUkVHX1dSSVRFX09QOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLWludCB3cml0ZV9tdWx0aV9yZWdfaW5kZXgoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVw X29wc19jZmcgKmNmZykKLXsKLQl1MzIgKmxvYyA9IE5VTEw7Ci0KLQlsb2MgPSAgKHUzMiAqKSgo dTggKiljZmctPmRtYV9idWYtPnZhZGRyICsKLQkJCWNmZy0+ZG1hX2J1Zi0+aW5kZXgpOwotCWxv Y1swXSA9IEhXX0lOREVYX1JFR19XUklURV9PUENPREU7Ci0JbG9jWzBdIHw9IChjZmctPmJsa19v ZmZzZXQgJiBNQVhfUkVMQVRJVkVfT0ZGKTsKLQlsb2NbMV0gPSBTSVpFX0RXT1JEKGNmZy0+ZGF0 YV9zaXplKTsKLQljZmctPmRtYV9idWYtPmluZGV4ICs9IG9wc19tZW1fc2l6ZVtjZmctPm9wc107 Ci0KLQlyZXR1cm4gd3JpdGVfbXVsdGlfcmVnKGNmZyk7Ci19Ci0KLWludCB3cml0ZV9tdWx0aV9y ZWdfaW5jKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpCi17Ci0JdTMyICps b2MgPSBOVUxMOwotCi0JbG9jID0gICh1MzIgKikoKHU4ICopY2ZnLT5kbWFfYnVmLT52YWRkciAr Ci0JCQljZmctPmRtYV9idWYtPmluZGV4KTsKLQlsb2NbMF0gPSBBVVRPX0lOQ19SRUdfV1JJVEVf T1BDT0RFOwotCWxvY1swXSB8PSAoY2ZnLT5ibGtfb2Zmc2V0ICYgTUFYX1JFTEFUSVZFX09GRik7 Ci0JbG9jWzFdID0gU0laRV9EV09SRChjZmctPmRhdGFfc2l6ZSk7Ci0JY2ZnLT5kbWFfYnVmLT5p bmRleCArPSBvcHNfbWVtX3NpemVbY2ZnLT5vcHNdOwotCi0JcmV0dXJuIHdyaXRlX211bHRpX3Jl ZyhjZmcpOwotfQotCi1zdGF0aWMgaW50IHdyaXRlX211bHRpX2x1dF9yZWcoc3RydWN0IGRwdV9y ZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZykKLXsKLQl1MzIgKmxvYyA9IE5VTEw7Ci0KLQlsb2Mg PSAgKHUzMiAqKSgodTggKiljZmctPmRtYV9idWYtPnZhZGRyICsKLQkJCWNmZy0+ZG1hX2J1Zi0+ aW5kZXgpOwotCWxvY1swXSA9IEJMS19SRUdfV1JJVEVfT1BDT0RFOwotCWxvY1swXSB8PSAoY2Zn LT5ibGtfb2Zmc2V0ICYgTUFYX1JFTEFUSVZFX09GRik7Ci0JbG9jWzFdID0gKGNmZy0+aW5jKSA/ IDAgOiBCSVQoMzEpOwotCWxvY1sxXSB8PSAoY2ZnLT53cmFwX3NpemUgJiBXUkFQX01BWF9TSVpF KSA8PCAxNjsKLQlsb2NbMV0gfD0gKChTSVpFX0RXT1JEKGNmZy0+ZGF0YV9zaXplKSkgJiBNQVhf RFdPUkRTX1NaKTsKLQljZmctPmRtYV9idWYtPm5leHRfb3BfYWxsb3dlZCA9IFJFR19XUklURV9P UDsKLQljZmctPmRtYV9idWYtPmluZGV4ICs9IG9wc19tZW1fc2l6ZVtjZmctPm9wc107Ci0KLQly ZXR1cm4gd3JpdGVfbXVsdGlfcmVnKGNmZyk7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfc2luZ2xl X3JlZyhzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewotCXUzMiAqbG9j ID0gTlVMTDsKLQotCWxvYyA9ICAodTMyICopKCh1OCAqKWNmZy0+ZG1hX2J1Zi0+dmFkZHIgKwot CQkJY2ZnLT5kbWFfYnVmLT5pbmRleCk7Ci0JbG9jWzBdID0gU0lOR0xFX1JFR19XUklURV9PUENP REU7Ci0JbG9jWzBdIHw9IChjZmctPmJsa19vZmZzZXQgJiBNQVhfUkVMQVRJVkVfT0ZGKTsKLQls b2NbMV0gPSAqY2ZnLT5kYXRhOwotCWNmZy0+ZG1hX2J1Zi0+aW5kZXggKz0gb3BzX21lbV9zaXpl W2NmZy0+b3BzXTsKLQljZmctPmRtYV9idWYtPm9wc19jb21wbGV0ZWQgfD0gUkVHX1dSSVRFX09Q OwotCWNmZy0+ZG1hX2J1Zi0+bmV4dF9vcF9hbGxvd2VkID0gUkVHX1dSSVRFX09QIHwgREVDT0RF X1NFTF9PUDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdyaXRlX2RlY29kZV9zZWwo c3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZykKLXsKLQl1MzIgKmxvYyA9IE5V TEw7Ci0KLQlsb2MgPSAgKHUzMiAqKSgodTggKiljZmctPmRtYV9idWYtPnZhZGRyICsKLQkJCWNm Zy0+ZG1hX2J1Zi0+aW5kZXgpOwotCWxvY1swXSA9IFJFR19ETUFfREVDT0RFX1NFTDsKLQlnZXRf ZGVjb2RlX3NlbChjZmctPmJsaywgJmxvY1sxXSk7Ci0JY2ZnLT5kbWFfYnVmLT5pbmRleCArPSBz aXplb2YodTMyKSAqIDI7Ci0JY2ZnLT5kbWFfYnVmLT5vcHNfY29tcGxldGVkIHw9IERFQ09ERV9T RUxfT1A7Ci0JY2ZnLT5kbWFfYnVmLT5uZXh0X29wX2FsbG93ZWQgPSBSRUdfV1JJVEVfT1A7Ci0K LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2YWxpZGF0ZV93cml0ZV9tdWx0aV9sdXRfcmVn KHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpCi17Ci0JaW50IHJjOwotCi0J cmMgPSB2YWxpZGF0ZV93cml0ZV9yZWcoY2ZnKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQot CWlmIChjZmctPndyYXBfc2l6ZSA8IFdSQVBfTUlOX1NJWkUgfHwgY2ZnLT53cmFwX3NpemUgPiBX UkFQX01BWF9TSVpFKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCB3cmFwIHN6ICVkIG1pbiAlZCBt YXggJWxkXG4iLAotCQkJY2ZnLT53cmFwX3NpemUsIFdSQVBfTUlOX1NJWkUsIFdSQVBfTUFYX1NJ WkUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50 IHZhbGlkYXRlX3dyaXRlX3JlZyhzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2Zn KQotewotCXUzMiByZW1haW5fbGVuLCB3cml0ZV9sZW47Ci0KLQlyZW1haW5fbGVuID0gQlVGRkVS X1NQQUNFX0xFRlQoY2ZnKTsKLQl3cml0ZV9sZW4gPSBvcHNfbWVtX3NpemVbY2ZnLT5vcHNdICsg Y2ZnLT5kYXRhX3NpemU7Ci0JaWYgKHJlbWFpbl9sZW4gPCB3cml0ZV9sZW4pIHsKLQkJRFJNX0VS Uk9SKCJidWZmZXIgaXMgZnVsbCBzeiAlZCBuZWVkcyAlZCBieXRlc1xuIiwKLQkJCQlyZW1haW5f bGVuLCB3cml0ZV9sZW4pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWNmZy0+ZGF0 YSkgewotCQlEUk1fRVJST1IoImludmFsaWQgZGF0YSAlcEsgc2l6ZSAlZCBleHAgc3ogJWRcbiIs IGNmZy0+ZGF0YSwKLQkJCWNmZy0+ZGF0YV9zaXplLCB3cml0ZV9sZW4pOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0JaWYgKChTSVpFX0RXT1JEKGNmZy0+ZGF0YV9zaXplKSkgPiBNQVhfRFdPUkRT X1NaIHx8Ci0JICAgIE5PVF9XT1JEX0FMSUdORUQoY2ZnLT5kYXRhX3NpemUpKSB7Ci0JCURSTV9F UlJPUigiSW52YWxpZCBkYXRhIHNpemUgJWQgbWF4ICVsZCBhbGlnbiAleFxuIiwKLQkJCWNmZy0+ ZGF0YV9zaXplLCBNQVhfRFdPUkRTX1NaLAotCQkJTk9UX1dPUkRfQUxJR05FRChjZmctPmRhdGFf c2l6ZSkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY2ZnLT5ibGtfb2Zmc2V0ID4g TUFYX1JFTEFUSVZFX09GRiB8fAotCQkJTk9UX1dPUkRfQUxJR05FRChjZmctPmJsa19vZmZzZXQp KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBvZmZzZXQgJWQgbWF4ICVsZCBhbGlnbiAleFxuIiwK LQkJCQljZmctPmJsa19vZmZzZXQsIE1BWF9SRUxBVElWRV9PRkYsCi0JCQkJTk9UX1dPUkRfQUxJ R05FRChjZmctPmJsa19vZmZzZXQpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmFsaWRhdGVfd3JpdGVfZGVjb2RlX3NlbChzdHJ1Y3QgZHB1 X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewotCXUzMiByZW1haW5fbGVuOwotCi0JcmVt YWluX2xlbiA9IEJVRkZFUl9TUEFDRV9MRUZUKGNmZyk7Ci0JaWYgKHJlbWFpbl9sZW4gPCBvcHNf bWVtX3NpemVbSFdfQkxLX1NFTEVDVF0pIHsKLQkJRFJNX0VSUk9SKCJidWZmZXIgaXMgZnVsbCBu ZWVkcyAlZCBieXRlc1xuIiwKLQkJCQlvcHNfbWVtX3NpemVbSFdfQkxLX1NFTEVDVF0pOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWNmZy0+YmxrKSB7Ci0JCURSTV9FUlJPUigiYmxr IHNldCBhcyAwXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCS8qIERTUFAgYW5kIFZJRyBj YW4ndCBiZSBjb21iaW5lZCAqLwotCWlmICgoY2ZnLT5ibGsgJiBHUlBfVklHX0hXX0JMS19TRUxF Q1QpICYmCi0JCShjZmctPmJsayAmIEdSUF9EU1BQX0hXX0JMS19TRUxFQ1QpKSB7Ci0JCURSTV9F UlJPUigiaW52YWxpZCBibGsgY29tYmluYXRpb24gJXhcbiIsCi0JCQkgICAgY2ZnLT5ibGspOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2YWxp ZGF0ZV9kbWFfY2ZnKHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpCi17Ci0J aW50IHJjID0gMDsKLQlib29sIHN1cHBvcnRlZDsKLQotCWlmICghY2ZnIHx8IGNmZy0+b3BzID49 IFJFR19ETUFfU0VUVVBfT1BTX01BWCB8fCAhY2ZnLT5kbWFfYnVmKSB7Ci0JCURSTV9FUlJPUigi aW52YWxpZCBwYXJhbSBjZmcgJXBLIG9wcyAlZCBkbWFfYnVmICVwS1xuIiwKLQkJCWNmZywgKChj ZmcpID8gY2ZnLT5vcHMgOiBSRUdfRE1BX1NFVFVQX09QU19NQVgpLAotCQkJKChjZmcpID8gY2Zn LT5kbWFfYnVmIDogTlVMTCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyYyA9IGNoZWNr X3N1cHBvcnRfdjEoY2ZnLT5mZWF0dXJlLCBjZmctPmJsaywgJnN1cHBvcnRlZCk7Ci0JaWYgKHJj IHx8ICFzdXBwb3J0ZWQpIHsKLQkJRFJNX0VSUk9SKCJjaGVjayBzdXBwb3J0IGZhaWxlZCByYyAl ZCBzdXBwb3J0ZWQgJWRcbiIsCi0JCQkJcmMsIHN1cHBvcnRlZCk7Ci0JCXJjID0gLUVJTlZBTDsK LQkJcmV0dXJuIHJjOwotCX0KLQotCWlmIChjZmctPmRtYV9idWYtPmluZGV4ID49IGNmZy0+ZG1h X2J1Zi0+YnVmZmVyX3NpemUgfHwKLQkgICAgTk9UX1dPUkRfQUxJR05FRChjZmctPmRtYV9idWYt PmluZGV4KSkgewotCQlEUk1fRVJST1IoIkJ1ZiBPdmVyZmxvdyBpbmRleCAlZCBtYXggc2l6ZSAl ZCBhbGlnbiAleFxuIiwKLQkJCWNmZy0+ZG1hX2J1Zi0+aW5kZXgsIGNmZy0+ZG1hX2J1Zi0+YnVm ZmVyX3NpemUsCi0JCQlOT1RfV09SRF9BTElHTkVEKGNmZy0+ZG1hX2J1Zi0+aW5kZXgpKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNmZy0+ZG1hX2J1Zi0+aW92YSAmIEdVQVJEX0JZ VEVTIHx8ICFjZmctPmRtYV9idWYtPnZhZGRyKSB7Ci0JCURSTV9FUlJPUigiaW92YSBub3QgYWxp Z25lZCB0byAlbHggaW92YSAlbGx4IGt2YSAlcEsiLAotCQkJCUFERFJfQUxJR04sIGNmZy0+ZG1h X2J1Zi0+aW92YSwKLQkJCQljZmctPmRtYV9idWYtPnZhZGRyKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCWlmICghSVNfT1BfQUxMT1dFRChjZmctPm9wcywgY2ZnLT5kbWFfYnVmLT5uZXh0X29w X2FsbG93ZWQpKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBvcCAleCBhbGxvd2VkICV4XG4iLCBj ZmctPm9wcywKLQkJCQljZmctPmRtYV9idWYtPm5leHRfb3BfYWxsb3dlZCk7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCWlmICghdmFsaWRhdGVfZG1hX29wX3BhcmFtc1tjZmctPm9wc10gfHwK LQkgICAgIXdyaXRlX2RtYV9vcF9wYXJhbXNbY2ZnLT5vcHNdKSB7Ci0JCURSTV9FUlJPUigiaW52 YWxpZCBvcCAlZCB2YWxpZGF0ZSAlcEsgd3JpdGUgJXBLXG4iLCBjZmctPm9wcywKLQkJCXZhbGlk YXRlX2RtYV9vcF9wYXJhbXNbY2ZnLT5vcHNdLAotCQkJd3JpdGVfZG1hX29wX3BhcmFtc1tjZmct Pm9wc10pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IHZhbGlkYXRlX2tpY2tfb2ZmX3YxKHN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyAq Y2ZnKQotewotCi0JaWYgKCFjZmcgfHwgIWNmZy0+Y3RsIHx8ICFjZmctPmRtYV9idWYpIHsKLQkJ RFJNX0VSUk9SKCJpbnZhbGlkIGNmZyAlcEsgY3RsICVwSyBkbWFfYnVmICVwS1xuIiwKLQkJCWNm ZywgKCghY2ZnKSA/IE5VTEwgOiBjZmctPmN0bCksCi0JCQkoKCFjZmcpID8gTlVMTCA6IGNmZy0+ ZG1hX2J1ZikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY2ZnLT5jdGwtPmlkeCA8 IENUTF8wICYmIGNmZy0+Y3RsLT5pZHggPj0gQ1RMX01BWCkgewotCQlEUk1fRVJST1IoImludmFs aWQgY3RsIGlkeCAlZFxuIiwgY2ZnLT5jdGwtPmlkeCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCWlmIChjZmctPm9wID49IFJFR19ETUFfT1BfTUFYKSB7Ci0JCURSTV9FUlJPUigiaW52YWxp ZCBvcCAlZFxuIiwgY2ZnLT5vcCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgoY2Zn LT5vcCA9PSBSRUdfRE1BX1dSSVRFKSAmJgotCSAgICAgKCEoY2ZnLT5kbWFfYnVmLT5vcHNfY29t cGxldGVkICYgREVDT0RFX1NFTF9PUCkgfHwKLQkgICAgICEoY2ZnLT5kbWFfYnVmLT5vcHNfY29t cGxldGVkICYgUkVHX1dSSVRFX09QKSkpIHsKLQkJRFJNX0VSUk9SKCJpbmNvbXBsZXRlIHdyaXRl IG9wcyAleFxuIiwKLQkJCQljZmctPmRtYV9idWYtPm9wc19jb21wbGV0ZWQpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlpZiAoY2ZnLT5vcCA9PSBSRUdfRE1BX1JFQUQgJiYgY2ZnLT5ibG9j a19zZWxlY3QgPj0gRFNQUF9ISVNUX01BWCkgewotCQlEUk1fRVJST1IoImludmFsaWQgYmxvY2sg Zm9yIHJlYWQgJWRcbiIsIGNmZy0+YmxvY2tfc2VsZWN0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JLyogT25seSBpbW1lZGlhdGUgdHJpZ2dlcnMgYXJlIHN1cHBvcnRlZCBub3cgaGVuY2Ug aGFyZGNvZGUgKi8KLQljZmctPnRyaWdnZXJfbW9kZSA9IChjZmctPm9wID09IFJFR19ETUFfUkVB RCkgPyAoUkVBRF9UUklHR0VSKSA6Ci0JCQkJKFdSSVRFX1RSSUdHRVIpOwotCi0JaWYgKGNmZy0+ ZG1hX2J1Zi0+aW92YSAmIEdVQVJEX0JZVEVTKSB7Ci0JCURSTV9FUlJPUigiQWRkcmVzcyBpcyBu b3QgYWxpZ25lZCB0byAlbHggaW92YSAlbGx4IiwgQUREUl9BTElHTiwKLQkJCQljZmctPmRtYV9i dWYtPmlvdmEpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY2ZnLT5xdWV1ZV9zZWxl Y3QgPj0gRE1BX0NUTF9RVUVVRV9NQVgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHF1ZXVlIHNl bGVjdGVkICVkXG4iLCBjZmctPnF1ZXVlX3NlbGVjdCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCWlmIChTSVpFX0RXT1JEKGNmZy0+ZG1hX2J1Zi0+aW5kZXgpID4gTUFYX0RXT1JEU19TWiB8 fAotCQkJIWNmZy0+ZG1hX2J1Zi0+aW5kZXgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGR3b3Jk IHNpemUgJXpkIG1heCAlbGRcbiIsCi0JCQlTSVpFX0RXT1JEKGNmZy0+ZG1hX2J1Zi0+aW5kZXgp LCBNQVhfRFdPUkRTX1NaKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IHdyaXRlX2tpY2tfb2ZmX3YxKHN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2Zm X2NmZyAqY2ZnKQotewotCXUzMiBjbWQxOwotCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgaHc7 Ci0KLQltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKLQljbWQxID0gKGNmZy0+b3AgPT0gUkVH X0RNQV9SRUFEKSA/Ci0JCShkc3BwX3JlYWRfc2VsW2NmZy0+YmxvY2tfc2VsZWN0XSA8PCAzMCkg OiAwOwotCWNtZDEgfD0gKGNmZy0+bGFzdF9jb21tYW5kKSA/IEJJVCgyNCkgOiAwOwotCWNtZDEg fD0gKGNmZy0+b3AgPT0gUkVHX0RNQV9SRUFEKSA/ICgyIDw8IDIyKSA6IDA7Ci0JY21kMSB8PSAo Y2ZnLT5vcCA9PSBSRUdfRE1BX1dSSVRFKSA/IChCSVQoMjIpKSA6IDA7Ci0JY21kMSB8PSAoU0la RV9EV09SRChjZmctPmRtYV9idWYtPmluZGV4KSAmIE1BWF9EV09SRFNfU1opOwotCi0JU0VUX1VQ X1JFR19ETUFfUkVHKGh3LCByZWdfZG1hKTsKLQlEUFVfUkVHX1dSSVRFKCZodywgUkVHX0RNQV9P UF9NT0RFX09GRiwgQklUKDApKTsKLQlEUFVfUkVHX1dSSVRFKCZodywgcmVnX2RtYV9jdGxfcXVl dWVfb2ZmW2NmZy0+Y3RsLT5pZHhdLAotCQkJY2ZnLT5kbWFfYnVmLT5pb3ZhKTsKLQlEUFVfUkVH X1dSSVRFKCZodywgcmVnX2RtYV9jdGxfcXVldWVfb2ZmW2NmZy0+Y3RsLT5pZHhdICsgMHg0LAot CQkJY21kMSk7Ci0JaWYgKGNmZy0+bGFzdF9jb21tYW5kKQotCQlEUFVfUkVHX1dSSVRFKCZjZmct PmN0bC0+aHcsIFJFR19ETUFfQ1RMX1RSSUdHRVJfT0ZGLAotCQkJcXVldWVfc2VsW2NmZy0+cXVl dWVfc2VsZWN0XSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGluaXRfdjEoc3RydWN0IGRwdV9o d19yZWdfZG1hICpjZmcpCi17Ci0JaW50IGkgPSAwOwotCi0JaWYgKCFjZmcpCi0JCXJldHVybiAt RUlOVkFMOwotCi0JcmVnX2RtYSA9IGNmZzsKLQlpZiAoIWxhc3RfY21kX2J1ZikgewotCQlsYXN0 X2NtZF9idWYgPSBhbGxvY19yZWdfZG1hX2J1Zl92MShSRUdfRE1BX0hFQURFUlNfQlVGRkVSX1Na KTsKLQkJaWYgKElTX0VSUl9PUl9OVUxMKGxhc3RfY21kX2J1ZikpCi0JCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0JcmVnX2RtYS0+b3BzLmNoZWNrX3N1cHBvcnQgPSBjaGVja19zdXBwb3J0X3YxOwot CXJlZ19kbWEtPm9wcy5zZXR1cF9wYXlsb2FkID0gc2V0dXBfcGF5bG9hZF92MTsKLQlyZWdfZG1h LT5vcHMua2lja19vZmYgPSBraWNrX29mZl92MTsKLQlyZWdfZG1hLT5vcHMucmVzZXQgPSByZXNl dF92MTsKLQlyZWdfZG1hLT5vcHMuYWxsb2NfcmVnX2RtYV9idWYgPSBhbGxvY19yZWdfZG1hX2J1 Zl92MTsKLQlyZWdfZG1hLT5vcHMuZGVhbGxvY19yZWdfZG1hID0gZGVhbGxvY19yZWdfZG1hX3Yx OwotCXJlZ19kbWEtPm9wcy5yZXNldF9yZWdfZG1hX2J1ZiA9IHJlc2V0X3JlZ19kbWFfYnVmZmVy X3YxOwotCXJlZ19kbWEtPm9wcy5sYXN0X2NvbW1hbmQgPSBsYXN0X2NtZF92MTsKLQotCXJlZ19k bWFfY3RsX3F1ZXVlX29mZltDVExfMF0gPSBSRUdfRE1BX0NUTDBfUVVFVUVfMF9DTUQwX09GRjsK LQlmb3IgKGkgPSBDVExfMTsgaSA8IEFSUkFZX1NJWkUocmVnX2RtYV9jdGxfcXVldWVfb2ZmKTsg aSsrKQotCQlyZWdfZG1hX2N0bF9xdWV1ZV9vZmZbaV0gPSByZWdfZG1hX2N0bF9xdWV1ZV9vZmZb aSAtIDFdICsKLQkJCShzaXplb2YodTMyKSAqIDQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBpbnQgY2hlY2tfc3VwcG9ydF92MShlbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIGZlYXR1cmUs Ci0JCSAgICAgZW51bSBkcHVfcmVnX2RtYV9ibGsgYmxrLAotCQkgICAgIGJvb2wgKmlzX3N1cHBv cnRlZCkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghaXNfc3VwcG9ydGVkKQotCQlyZXR1cm4g LUVJTlZBTDsKLQotCWlmIChmZWF0dXJlID49IFJFR19ETUFfRkVBVFVSRVNfTUFYIHx8IGJsayA+ PSBNRFNTKSB7Ci0JCSppc19zdXBwb3J0ZWQgPSBmYWxzZTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0K LQkqaXNfc3VwcG9ydGVkID0gKGJsayAmIHYxX3N1cHBvcnRlZFtmZWF0dXJlXSkgPyB0cnVlIDog ZmFsc2U7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzZXR1cF9wYXlsb2FkX3YxKHN0 cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnICpjZmcpCi17Ci0JaW50IHJjID0gMDsKLQot CXJjID0gdmFsaWRhdGVfZG1hX2NmZyhjZmcpOwotCi0JaWYgKCFyYykKLQkJcmMgPSB2YWxpZGF0 ZV9kbWFfb3BfcGFyYW1zW2NmZy0+b3BzXShjZmcpOwotCi0JaWYgKCFyYykKLQkJcmMgPSB3cml0 ZV9kbWFfb3BfcGFyYW1zW2NmZy0+b3BzXShjZmcpOwotCi0JcmV0dXJuIHJjOwotfQotCi0KLXN0 YXRpYyBpbnQga2lja19vZmZfdjEoc3RydWN0IGRwdV9yZWdfZG1hX2tpY2tvZmZfY2ZnICpjZmcp Ci17Ci0JaW50IHJjID0gMDsKLQotCXJjID0gdmFsaWRhdGVfa2lja19vZmZfdjEoY2ZnKTsKLQlp ZiAocmMpCi0JCXJldHVybiByYzsKLQotCXJjID0gd3JpdGVfa2lja19vZmZfdjEoY2ZnKTsKLQly ZXR1cm4gcmM7Ci19Ci0KLWludCByZXNldF92MShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsKQotewot CXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgaHc7Ci0JdTMyIGluZGV4LCB2YWw7Ci0KLQlpZiAo IWN0bCB8fCBjdGwtPmlkeCA+IENUTF9NQVgpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGN0bCAl cEsgY3RsIGlkeCAlZFxuIiwKLQkJCWN0bCwgKChjdGwpID8gY3RsLT5pZHggOiAwKSk7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwotCWluZGV4 ID0gY3RsLT5pZHggLSBDVExfMDsKLQlTRVRfVVBfUkVHX0RNQV9SRUcoaHcsIHJlZ19kbWEpOwot CURQVV9SRUdfV1JJVEUoJmh3LCBSRUdfRE1BX09QX01PREVfT0ZGLCBCSVQoMCkpOwotCURQVV9S RUdfV1JJVEUoJmh3LCAoUkVHX0RNQV9DVEwwX1JFU0VUX09GRiArIGluZGV4ICogc2l6ZW9mKHUz MikpLAotCQkJQklUKDApKTsKLQotCWluZGV4ID0gMDsKLQlkbyB7Ci0JCXVkZWxheSgxMDAwKTsK LQkJaW5kZXgrKzsKLQkJdmFsID0gRFBVX1JFR19SRUFEKCZodywKLQkJCShSRUdfRE1BX0NUTDBf UkVTRVRfT0ZGICsgaW5kZXggKiBzaXplb2YodTMyKSkpOwotCX0gd2hpbGUgKGluZGV4IDwgMiAm JiB2YWwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVm ZmVyICphbGxvY19yZWdfZG1hX2J1Zl92MSh1MzIgc2l6ZSkKLXsKLQlzdHJ1Y3QgZHB1X3JlZ19k bWFfYnVmZmVyICpkbWFfYnVmID0gTlVMTDsKLQl1MzIgaW92YV9hbGlnbmVkLCBvZmZzZXQ7Ci0J dTMyIHJzaXplID0gc2l6ZSArIEdVQVJEX0JZVEVTOwotCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUg KnByaXYgPSByZWdfZG1hLT5kcm1fZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbXNtX2dlbV9h ZGRyZXNzX3NwYWNlICphc3BhY2UgPSBOVUxMOwotCWludCByYyA9IDA7Ci0KLQlpZiAoIXNpemUg fHwgU0laRV9EV09SRChzaXplKSA+IE1BWF9EV09SRFNfU1opIHsKLQkJRFJNX0VSUk9SKCJpbnZh bGlkIGJ1ZmZlciBzaXplICVkXG4iLCBzaXplKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7 Ci0JfQotCi0JZG1hX2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpkbWFfYnVmKSwgR0ZQX0tFUk5FTCk7 Ci0JaWYgKCFkbWFfYnVmKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWRtYV9idWYt PmJ1ZiA9IG1zbV9nZW1fbmV3KHJlZ19kbWEtPmRybV9kZXYsCi0JCQkJICAgIHJzaXplLCBNU01f Qk9fVU5DQUNIRUQpOwotCWlmIChJU19FUlJfT1JfTlVMTChkbWFfYnVmLT5idWYpKSB7Ci0JCXJj ID0gLUVJTlZBTDsKLQkJZ290byBmYWlsOwotCX0KLQotCWFzcGFjZSA9IHByaXYtPmttcy0+YXNw YWNlOwotCWlmICghYXNwYWNlKSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBhc3BhY2Vc biIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZnJlZV9nZW07Ci0JfQotCi0JZG1hX2J1Zi0+ YXNwYWNlID0gYXNwYWNlOwotCXJjID0gbXNtX2dlbV9nZXRfaW92YShkbWFfYnVmLT5idWYsIGFz cGFjZSwgJmRtYV9idWYtPmlvdmEpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoImZhaWxlZCB0 byBnZXQgdGhlIGlvdmEgcmMgJWRcbiIsIHJjKTsKLQkJZ290byBmcmVlX2dlbTsKLQl9Ci0KLQlk bWFfYnVmLT52YWRkciA9IG1zbV9nZW1fZ2V0X3ZhZGRyKGRtYV9idWYtPmJ1Zik7Ci0JaWYgKElT X0VSUl9PUl9OVUxMKGRtYV9idWYtPnZhZGRyKSkgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBn ZXQgdmEgcmMgJWRcbiIsIHJjKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIHB1dF9pb3ZhOwot CX0KLQotCWRtYV9idWYtPmJ1ZmZlcl9zaXplID0gc2l6ZTsKLQlpb3ZhX2FsaWduZWQgPSAoZG1h X2J1Zi0+aW92YSArIEdVQVJEX0JZVEVTKSAmIEFMSUdORURfT0ZGU0VUOwotCW9mZnNldCA9IGlv dmFfYWxpZ25lZCAtIGRtYV9idWYtPmlvdmE7Ci0JZG1hX2J1Zi0+aW92YSA9IGRtYV9idWYtPmlv dmEgKyBvZmZzZXQ7Ci0JZG1hX2J1Zi0+dmFkZHIgPSAodm9pZCAqKSgoKHU4ICopZG1hX2J1Zi0+ dmFkZHIpICsgb2Zmc2V0KTsKLQlkbWFfYnVmLT5uZXh0X29wX2FsbG93ZWQgPSBERUNPREVfU0VM X09QOwotCi0JcmV0dXJuIGRtYV9idWY7Ci0KLXB1dF9pb3ZhOgotCW1zbV9nZW1fcHV0X2lvdmEo ZG1hX2J1Zi0+YnVmLCBhc3BhY2UpOwotZnJlZV9nZW06Ci0JbXV0ZXhfbG9jaygmcmVnX2RtYS0+ ZHJtX2Rldi0+c3RydWN0X211dGV4KTsKLQltc21fZ2VtX2ZyZWVfb2JqZWN0KGRtYV9idWYtPmJ1 Zik7Ci0JbXV0ZXhfdW5sb2NrKCZyZWdfZG1hLT5kcm1fZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotZmFp bDoKLQlrZnJlZShkbWFfYnVmKTsKLQlyZXR1cm4gRVJSX1BUUihyYyk7Ci19Ci0KLXN0YXRpYyBp bnQgZGVhbGxvY19yZWdfZG1hX3YxKHN0cnVjdCBkcHVfcmVnX2RtYV9idWZmZXIgKmRtYV9idWYp Ci17Ci0JaWYgKCFkbWFfYnVmKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBwYXJhbSByZWdfYnVm ICVwS1xuIiwgZG1hX2J1Zik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChkbWFfYnVm LT5idWYpIHsKLQkJbXNtX2dlbV9wdXRfaW92YShkbWFfYnVmLT5idWYsIDApOwotCQltdXRleF9s b2NrKCZyZWdfZG1hLT5kcm1fZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQltc21fZ2VtX2ZyZWVfb2Jq ZWN0KGRtYV9idWYtPmJ1Zik7Ci0JCW11dGV4X3VubG9jaygmcmVnX2RtYS0+ZHJtX2Rldi0+c3Ry dWN0X211dGV4KTsKLQl9Ci0KLQlrZnJlZShkbWFfYnVmKTsKLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCByZXNldF9yZWdfZG1hX2J1ZmZlcl92MShzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVy ICpsdXRfYnVmKQotewotCWlmICghbHV0X2J1ZikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlsdXRf YnVmLT5pbmRleCA9IDA7Ci0JbHV0X2J1Zi0+b3BzX2NvbXBsZXRlZCA9IDA7Ci0JbHV0X2J1Zi0+ bmV4dF9vcF9hbGxvd2VkID0gREVDT0RFX1NFTF9PUDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCB2YWxpZGF0ZV9sYXN0X2NtZChzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAq Y2ZnKQotewotCXUzMiByZW1haW5fbGVuLCB3cml0ZV9sZW47Ci0KLQlyZW1haW5fbGVuID0gQlVG RkVSX1NQQUNFX0xFRlQoY2ZnKTsKLQl3cml0ZV9sZW4gPSBzaXplb2YodTMyKTsKLQlpZiAocmVt YWluX2xlbiA8IHdyaXRlX2xlbikgewotCQlEUk1fRVJST1IoImJ1ZmZlciBpcyBmdWxsIHN6ICVk IG5lZWRzICVkIGJ5dGVzXG4iLAotCQkJCXJlbWFpbl9sZW4sIHdyaXRlX2xlbik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3cml0ZV9sYXN0X2Nt ZChzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyAqY2ZnKQotewotCXUzMiAqbG9jID0g TlVMTDsKLQotCWxvYyA9ICAodTMyICopKCh1OCAqKWNmZy0+ZG1hX2J1Zi0+dmFkZHIgKwotCQkJ Y2ZnLT5kbWFfYnVmLT5pbmRleCk7Ci0JbG9jWzBdID0gUkVHX0RNQV9ERUNPREVfU0VMOwotCWxv Y1sxXSA9IDA7Ci0JY2ZnLT5kbWFfYnVmLT5pbmRleCA9IHNpemVvZih1MzIpICogMjsKLQljZmct PmRtYV9idWYtPm9wc19jb21wbGV0ZWQgPSBSRUdfV1JJVEVfT1AgfCBERUNPREVfU0VMX09QOwot CWNmZy0+ZG1hX2J1Zi0+bmV4dF9vcF9hbGxvd2VkID0gUkVHX1dSSVRFX09QOwotCi0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGFzdF9jbWRfdjEoc3RydWN0IGRwdV9od19jdGwgKmN0bCwg ZW51bSBkcHVfcmVnX2RtYV9xdWV1ZSBxKQotewotCXN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9v cHNfY2ZnIGNmZzsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcga2lja19vZmY7Ci0K LQlpZiAoIWxhc3RfY21kX2J1ZiB8fCAhY3RsIHx8IHEgPj0gRE1BX0NUTF9RVUVVRV9NQVgpIHsK LQkJRFJNX0VSUk9SKCJpbnZhbGlkIHBhcmFtIGJ1ZiAlcEsgY3RsICVwSyBxICVkXG4iLCBsYXN0 X2NtZF9idWYsCi0JCQkJY3RsLCBxKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFs YXN0X2NtZF9idWYtPmlvdmEpIHsKLQkJRFJNX0RFQlVHKCJpb3ZhIG5vdCBzZXQsIHBvc3NpYmxl IHNlY3VyZSBzZXNzaW9uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2ZnLmRtYV9idWYgPSBs YXN0X2NtZF9idWY7Ci0JcmVzZXRfcmVnX2RtYV9idWZmZXJfdjEobGFzdF9jbWRfYnVmKTsKLQlp ZiAodmFsaWRhdGVfbGFzdF9jbWQoJmNmZykpIHsKLQkJRFJNX0VSUk9SKCJ2YWxpZGF0ZSBidWYg ZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHdyaXRlX2xhc3RfY21k KCZjZmcpKSB7Ci0JCURSTV9FUlJPUigid3JpdGUgYnVmIGZhaWxlZFxuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCWtpY2tfb2ZmLmN0bCA9IGN0bDsKLQlraWNrX29mZi5xdWV1ZV9zZWxl Y3QgPSBxOwotCWtpY2tfb2ZmLnRyaWdnZXJfbW9kZSA9IFdSSVRFX0lNTUVESUFURTsKLQlraWNr X29mZi5sYXN0X2NvbW1hbmQgPSAxOwotCWtpY2tfb2ZmLm9wID0gUkVHX0RNQV9XUklURTsKLQlr aWNrX29mZi5kbWFfYnVmID0gbGFzdF9jbWRfYnVmOwotCWlmIChraWNrX29mZl92MSgma2lja19v ZmYpKSB7Ci0JCURSTV9FUlJPUigia2ljayBvZmYgbGFzdCBjbWQgZmFpbGVkXG4iKTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZGVpbml0X3YxKHZvaWQp Ci17Ci0JaWYgKGxhc3RfY21kX2J1ZikKLQkJZGVhbGxvY19yZWdfZG1hX3YxKGxhc3RfY21kX2J1 Zik7Ci0JbGFzdF9jbWRfYnVmID0gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3YxLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92MS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA0ZDc4NGViLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19yZWdfZG1hX3YxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKiBD b3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJz aW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfRFBVX0hXX1JFR19ETUFfVjFfSAot I2RlZmluZSBfRFBVX0hXX1JFR19ETUFfVjFfSAotCi0jaW5jbHVkZSAiZHB1X3JlZ19kbWEuaCIK LQotLyoqCi0gKiBpbml0X3YxKCkgLSBpbml0aWFsaXplIHRoZSByZWcgZG1hIHYxIGRyaXZlciBi eSBpbnN0YWxsaW5nIHYxIG9wcwotICogQHJlZ19kbWEgLSByZWdfZG1hIGh3IGluZm8gc3RydWN0 dXJlIGV4cG9zaW5nIGNhcGFiaWxpdGllcy4KLSAqLwotaW50IGluaXRfdjEoc3RydWN0IGRwdV9o d19yZWdfZG1hICpyZWdfZG1hKTsKLQotLyoqCi0gKiBkZWluaXRfdjEoKSAtIGZyZWUgdXAgYW55 IHJlc291cmNlcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSB2MSByZWcgZG1hIGluaXQKLSAqLwotdm9p ZCBkZWluaXRfdjEodm9pZCk7Ci0jZW5kaWYgLyogX0RQVV9IV19SRUdfRE1BX1YxX0ggKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3Yx X2NvbG9yX3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yZWdf ZG1hX3YxX2NvbG9yX3Byb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIxYWE2 Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcmVn X2RtYV92MV9jb2xvcl9wcm9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NDMgKzAsMCBAQAotLyog Q29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxkcm0vbXNtX2RybV9wcC5oPgot I2luY2x1ZGUgImRwdV9yZWdfZG1hLmgiCi0jaW5jbHVkZSAiZHB1X2h3X3JlZ19kbWFfdjFfY29s b3JfcHJvYy5oIgotI2luY2x1ZGUgImRwdV9od19jb2xvcl9wcm9jX2NvbW1vbl92NC5oIgotCi0v KiBSZXNlcnZlIHNwYWNlIG9mIDEyOCB3b3JkcyBmb3IgTFVUIGRtYSBwYXlsb2FkIHNldC11cCAq LwotI2RlZmluZSBSRUdfRE1BX0hFQURFUlNfQlVGRkVSX1NaIChzaXplb2YodTMyKSAqIDEyOCkK LQotI2RlZmluZSBWTFVUX01FTV9TSVpFICgoMTI4ICogc2l6ZW9mKHUzMikpICsgUkVHX0RNQV9I RUFERVJTX0JVRkZFUl9TWikKLSNkZWZpbmUgVkxVVF9MRU4gKDEyOCAqIHNpemVvZih1MzIpKQot I2RlZmluZSBQQV9PUF9NT0RFX09GRiAweDgwMAotI2RlZmluZSBQQV9MVVRWX09QTU9ERV9PRkYg MHg4NGMKLQotI2RlZmluZSBHQU1VVF9MVVRfTUVNX1NJWkUgKChzaXplb2Yoc3RydWN0IGRybV9t c21fM2RfZ2FtdXQpKSArIFwKLQkJUkVHX0RNQV9IRUFERVJTX0JVRkZFUl9TWikKLSNkZWZpbmUg R0FNVVRfU0NBTEVfT0ZGX0xFTiAoR0FNVVRfM0RfU0NBTEVfT0ZGX1NaICogXAotCQlHQU1VVF8z RF9TQ0FMRV9PRkZfVEJMX05VTSAqIHNpemVvZih1MzIpKQotI2RlZmluZSBHQU1VVF9TQ0FMRV9P RkZfTEVOXzEyIChHQU1VVF8zRF9TQ0FMRUJfT0ZGX1NaICogc2l6ZW9mKHUzMikpCi0KLSNkZWZp bmUgR0NfTFVUX01FTV9TSVpFICgoc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX3BnY19sdXQpKSArIFwK LQkJUkVHX0RNQV9IRUFERVJTX0JVRkZFUl9TWikKLQotI2RlZmluZSBJR0NfTFVUX01FTV9TSVpF ICgoc2l6ZW9mKHN0cnVjdCBkcm1fbXNtX2lnY19sdXQpKSArIFwKLQkJUkVHX0RNQV9IRUFERVJT X0JVRkZFUl9TWikKLQotI2RlZmluZSBQQ0NfTFVUX0VOVFJJRVMgKFBDQ19OVU1fUExBTkVTICog UENDX05VTV9DT0VGRikKLSNkZWZpbmUgUENDX0xFTiAoUENDX0xVVF9FTlRSSUVTICogc2l6ZW9m KHUzMikpCi0jZGVmaW5lIFBDQ19NRU1fU0laRSAoUENDX0xFTiArIFwKLQkJUkVHX0RNQV9IRUFE RVJTX0JVRkZFUl9TWikKLQotI2RlZmluZSBSRUdfTUFTSyhuKSAoKEJJVChuKSkgLSAxKQotCi1z dGF0aWMgc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqZHNwcF9idWZbUkVHX0RNQV9GRUFUVVJF U19NQVhdW0RTUFBfTUFYXTsKLQotc3RhdGljIHUzMiBmZWF0dXJlX21hcFtEUFVfRFNQUF9NQVhd ID0gewotCVtEUFVfRFNQUF9WTFVUXSA9IFJFR19ETUFfRkVBVFVSRVNfTUFYLAotCVtEUFVfRFNQ UF9HQU1VVF0gPSBHQU1VVCwKLQlbRFBVX0RTUFBfSUdDXSA9IElHQywKLQlbRFBVX0RTUFBfUEND XSA9IFBDQywKLQlbRFBVX0RTUFBfR0NdID0gR0MsCi0JW0RQVV9EU1BQX0hTSUNdID0gUkVHX0RN QV9GRUFUVVJFU19NQVgsCi0JW0RQVV9EU1BQX01FTUNPTE9SXSA9IFJFR19ETUFfRkVBVFVSRVNf TUFYLAotCVtEUFVfRFNQUF9TSVhaT05FXSA9IFJFR19ETUFfRkVBVFVSRVNfTUFYLAotCVtEUFVf RFNQUF9ESVRIRVJdID0gUkVHX0RNQV9GRUFUVVJFU19NQVgsCi0JW0RQVV9EU1BQX0hJU1RdID0g UkVHX0RNQV9GRUFUVVJFU19NQVgsCi0JW0RQVV9EU1BQX0FEXSA9IFJFR19ETUFfRkVBVFVSRVNf TUFYLAotfTsKLQotc3RhdGljIHUzMiBmZWF0dXJlX3JlZ19kbWFfc3pbRFBVX0RTUFBfTUFYXSA9 IHsKLQlbRFBVX0RTUFBfVkxVVF0gPSBWTFVUX01FTV9TSVpFLAotCVtEUFVfRFNQUF9HQU1VVF0g PSBHQU1VVF9MVVRfTUVNX1NJWkUsCi0JW0RQVV9EU1BQX0dDXSA9IEdDX0xVVF9NRU1fU0laRSwK LQlbRFBVX0RTUFBfSUdDXSA9IElHQ19MVVRfTUVNX1NJWkUsCi0JW0RQVV9EU1BQX1BDQ10gPSBQ Q0NfTUVNX1NJWkUsCi19OwotCi1zdGF0aWMgdTMyIGRzcHBfbWFwcGluZ1tEU1BQX01BWF0gPSB7 Ci0JW0RTUFBfMF0gPSBEU1BQMCwKLQlbRFNQUF8xXSA9IERTUFAxLAotCVtEU1BQXzJdID0gRFNQ UDIsCi0JW0RTUFBfM10gPSBEU1BQMywKLX07Ci0KLSNkZWZpbmUgUkVHX0RNQV9JTklUX09QUyhj ZmcsIGJsb2NrLCByZWdfZG1hX2ZlYXR1cmUsIGZlYXR1cmVfZG1hX2J1ZikgXAotCWRvIHsgXAot CQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykpOyBcCi0JCShjZmcpLmJsayA9IGJsb2NrOyBc Ci0JCShjZmcpLmZlYXR1cmUgPSByZWdfZG1hX2ZlYXR1cmU7IFwKLQkJKGNmZykuZG1hX2J1ZiA9 IGZlYXR1cmVfZG1hX2J1ZjsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUkVHX0RNQV9TRVRV UF9PUFMoY2ZnLCBibG9ja19vZmYsIGRhdGFfcHRyLCBkYXRhX2xlbiwgb3AsIFwKLQkJd3JhcF9z eiwgd3JhcF9pbmMpIFwKLQlkbyB7IFwKLQkJKGNmZykub3BzID0gb3A7IFwKLQkJKGNmZykuYmxr X29mZnNldCA9IGJsb2NrX29mZjsgXAotCQkoY2ZnKS5kYXRhX3NpemUgPSBkYXRhX2xlbjsgXAot CQkoY2ZnKS5kYXRhID0gZGF0YV9wdHI7IFwKLQkJKGNmZykuaW5jID0gd3JhcF9pbmM7IFwKLQkJ KGNmZykud3JhcF9zaXplID0gd3JhcF9zejsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUkVH X0RNQV9TRVRVUF9LSUNLT0ZGKGNmZywgaHdfY3RsLCBmZWF0dXJlX2RtYV9idWYsIG9wcywgY3Rs X3EsIFwKLQkJbW9kZSkgXAotCWRvIHsgXAotCQltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykp OyBcCi0JCShjZmcpLmN0bCA9IGh3X2N0bDsgXAotCQkoY2ZnKS5kbWFfYnVmID0gZmVhdHVyZV9k bWFfYnVmOyBcCi0JCShjZmcpLm9wID0gb3BzOyBcCi0JCShjZmcpLnF1ZXVlX3NlbGVjdCA9IGN0 bF9xOyBcCi0JCShjZmcpLnRyaWdnZXJfbW9kZSA9IG1vZGU7IFwKLQl9IHdoaWxlICgwKQotCi1z dGF0aWMgaW50IHJlZ19kbWFfYnVmX2luaXQoc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqKmJ1 ZiwgdTMyIHN6KTsKLXN0YXRpYyBpbnQgcmVnX2RtYV9kc3BwX2NoZWNrKHN0cnVjdCBkcHVfaHdf ZHNwcCAqY3R4LCB2b2lkICpjZmcsCi0JCWVudW0gZHB1X3JlZ19kbWFfZmVhdHVyZXMgZmVhdHVy ZSk7Ci1zdGF0aWMgaW50IHJlZ19kbWFfYmxrX3NlbGVjdChlbnVtIGRwdV9yZWdfZG1hX2ZlYXR1 cmVzIGZlYXR1cmUsCi0JCWVudW0gZHB1X3JlZ19kbWFfYmxrIGJsaywgc3RydWN0IGRwdV9yZWdf ZG1hX2J1ZmZlciAqZG1hX2J1Zik7Ci1zdGF0aWMgaW50IHJlZ19kbWFfd3JpdGUoZW51bSBkcHVf cmVnX2RtYV9zZXR1cF9vcHMgb3BzLCB1MzIgb2ZmLCB1MzIgZGF0YV9zeiwKLQkJCXUzMiAqZGF0 YSwgc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqZG1hX2J1ZiwKLQkJCWVudW0gZHB1X3JlZ19k bWFfZmVhdHVyZXMgZmVhdHVyZSwKLQkJCWVudW0gZHB1X3JlZ19kbWFfYmxrIGJsayk7Ci1zdGF0 aWMgaW50IHJlZ19kbWFfa2lja19vZmYoZW51bSBkcHVfcmVnX2RtYV9vcCBvcCwgZW51bSBkcHVf cmVnX2RtYV9xdWV1ZSBxLAotCQllbnVtIGRwdV9yZWdfZG1hX3RyaWdnZXJfbW9kZSBtb2RlLAot CQlzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpkbWFfYnVmLCBzdHJ1Y3QgZHB1X2h3X2N0bCAq Y3RsKTsKLQotc3RhdGljIGludCByZWdfZG1hX2J1Zl9pbml0KHN0cnVjdCBkcHVfcmVnX2RtYV9i dWZmZXIgKipidWYsIHUzMiBzaXplKQotewotCXN0cnVjdCBkcHVfaHdfcmVnX2RtYV9vcHMgKmRt YV9vcHM7Ci0KLQlkbWFfb3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCWlmIChJU19FUlJf T1JfTlVMTChkbWFfb3BzKSkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQotCWlmICghYnVmKSB7Ci0J CURSTV9FUlJPUigiaW52YWxpZCBidWZcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkv KiBidWZmZXIgYWxyZWFkeSBpbml0aWFsaXplZCAqLwotCWlmICgqYnVmKQotCQlyZXR1cm4gMDsK LQotCSpidWYgPSBkbWFfb3BzLT5hbGxvY19yZWdfZG1hX2J1ZihzaXplKTsKLQlpZiAoSVNfRVJS X09SX05VTEwoKmJ1ZikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgcmVnX2RtYV9kc3BwX2NoZWNrKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lk ICpjZmcsCi0JCWVudW0gZHB1X3JlZ19kbWFfZmVhdHVyZXMgZmVhdHVyZSkKLXsKLQlzdHJ1Y3Qg ZHB1X2h3X3JlZ19kbWFfb3BzICpkbWFfb3BzOwotCXN0cnVjdCBkcHVfaHdfY3BfY2ZnICpod19j ZmcgPSBjZmc7Ci0KLQlpZiAoIWNmZyB8fCAhY3R4KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBj ZmcgJXBLIGN0eCAlcEtcbiIsIGNmZywgY3R4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J ZG1hX29wcyA9IGRwdV9yZWdfZG1hX2dldF9vcHMoKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoZG1h X29wcykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFod19jZmctPmN0bCB8fCBjdHgtPmlk eCA+PSBEU1BQX01BWCB8fAotCQlmZWF0dXJlID49IFJFR19ETUFfRkVBVFVSRVNfTUFYKSB7Ci0J CURSTV9FUlJPUigiaW52YWxpZCBjdGwgJXBLIGRzcHAgaWR4ICVkIGZlYXR1cmUgJWRcbiIsCi0J CQlod19jZmctPmN0bCwgY3R4LT5pZHgsIGZlYXR1cmUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQlpZiAoIWRzcHBfYnVmW2ZlYXR1cmVdW2N0eC0+aWR4XSkgewotCQlEUk1fRVJST1IoImlu dmFsaWQgZG1hX2J1ZlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IHJlZ19kbWFfYmxrX3NlbGVjdChlbnVtIGRwdV9yZWdfZG1hX2ZlYXR1 cmVzIGZlYXR1cmUsCi0JCWVudW0gZHB1X3JlZ19kbWFfYmxrIGJsaywgc3RydWN0IGRwdV9yZWdf ZG1hX2J1ZmZlciAqZG1hX2J1ZikKLXsKLQlzdHJ1Y3QgZHB1X2h3X3JlZ19kbWFfb3BzICpkbWFf b3BzOwotCXN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnIGRtYV93cml0ZV9jZmc7Ci0J aW50IHJjID0gMDsKLQotCWRtYV9vcHMgPSBkcHVfcmVnX2RtYV9nZXRfb3BzKCk7Ci0JZG1hX29w cy0+cmVzZXRfcmVnX2RtYV9idWYoZG1hX2J1Zik7Ci0JbWVtc2V0KCZkbWFfd3JpdGVfY2ZnLCAw LCBzaXplb2YoZG1hX3dyaXRlX2NmZykpOwotCWRtYV93cml0ZV9jZmcuYmxrID0gYmxrOwotCWRt YV93cml0ZV9jZmcuZmVhdHVyZSA9IGZlYXR1cmU7Ci0JZG1hX3dyaXRlX2NmZy5vcHMgPSBIV19C TEtfU0VMRUNUOwotCWRtYV93cml0ZV9jZmcuZG1hX2J1ZiA9IGRtYV9idWY7Ci0KLQlyYyA9IGRt YV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykKLQkJRFJNX0VS Uk9SKCJ3cml0ZSBkZWNvZGUgc2VsZWN0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQotCXJldHVy biByYzsKLX0KLQotc3RhdGljIGludCByZWdfZG1hX3dyaXRlKGVudW0gZHB1X3JlZ19kbWFfc2V0 dXBfb3BzIG9wcywgdTMyIG9mZiwgdTMyIGRhdGFfc3osCi0JCQl1MzIgKmRhdGEsIHN0cnVjdCBk cHVfcmVnX2RtYV9idWZmZXIgKmRtYV9idWYsCi0JCQllbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVz IGZlYXR1cmUsCi0JCQllbnVtIGRwdV9yZWdfZG1hX2JsayBibGspCi17Ci0Jc3RydWN0IGRwdV9o d19yZWdfZG1hX29wcyAqZG1hX29wczsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2Nm ZyBkbWFfd3JpdGVfY2ZnOwotCWludCByYzsKLQotCWRtYV9vcHMgPSBkcHVfcmVnX2RtYV9nZXRf b3BzKCk7Ci0JbWVtc2V0KCZkbWFfd3JpdGVfY2ZnLCAwLCBzaXplb2YoZG1hX3dyaXRlX2NmZykp OwotCi0JZG1hX3dyaXRlX2NmZy5vcHMgPSBvcHM7Ci0JZG1hX3dyaXRlX2NmZy5ibGtfb2Zmc2V0 ID0gb2ZmOwotCWRtYV93cml0ZV9jZmcuZGF0YV9zaXplID0gZGF0YV9zejsKLQlkbWFfd3JpdGVf Y2ZnLmRhdGEgPSBkYXRhOwotCWRtYV93cml0ZV9jZmcuZG1hX2J1ZiA9IGRtYV9idWY7Ci0JZG1h X3dyaXRlX2NmZy5mZWF0dXJlID0gZmVhdHVyZTsKLQlkbWFfd3JpdGVfY2ZnLmJsayA9IGJsazsK LQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykK LQkJRFJNX0VSUk9SKCJ3cml0ZSBzaW5nbGUgcmVnIGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQot CXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCByZWdfZG1hX2tpY2tfb2ZmKGVudW0gZHB1X3Jl Z19kbWFfb3Agb3AsIGVudW0gZHB1X3JlZ19kbWFfcXVldWUgcSwKLQkJZW51bSBkcHVfcmVnX2Rt YV90cmlnZ2VyX21vZGUgbW9kZSwKLQkJc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqZG1hX2J1 Ziwgc3RydWN0IGRwdV9od19jdGwgKmN0bCkKLXsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29m Zl9jZmcga2lja19vZmY7Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQlp bnQgcmM7Ci0KLQlkbWFfb3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCW1lbXNldCgma2lj a19vZmYsIDAsIHNpemVvZihraWNrX29mZikpOwotCWtpY2tfb2ZmLmN0bCA9IGN0bDsKLQlraWNr X29mZi5kbWFfYnVmID0gZG1hX2J1ZjsKLQlraWNrX29mZi5vcCA9IG9wOwotCWtpY2tfb2ZmLnF1 ZXVlX3NlbGVjdCA9IHE7Ci0Ja2lja19vZmYudHJpZ2dlcl9tb2RlID0gbW9kZTsKLQlyYyA9IGRt YV9vcHMtPmtpY2tfb2ZmKCZraWNrX29mZik7Ci0JaWYgKHJjKQotCQlEUk1fRVJST1IoImZhaWxl ZCB0byBraWNrIG9mZiByZXQgJWRcbiIsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQotaW50IHJl Z19kbWF2MV9pbml0X2RzcHBfb3BfdjQoaW50IGZlYXR1cmUsIGVudW0gZHB1X2RzcHAgaWR4KQot ewotCWludCByYyA9IC1FTk9UU1VQUDsKLQlzdHJ1Y3QgZHB1X2h3X3JlZ19kbWFfb3BzICpkbWFf b3BzOwotCWJvb2wgaXNfc3VwcG9ydGVkID0gZmFsc2U7Ci0JdTMyIGJsazsKLQotCWlmIChmZWF0 dXJlID49IERQVV9EU1BQX01BWCB8fCBpZHggPj0gRFNQUF9NQVgpIHsKLQkJRFJNX0VSUk9SKCJp bnZhbGlkIGZlYXR1cmUgJXggbWF4ICV4IGRzcHAgaWR4ICV4IG1heCAleGRcbiIsCi0JCQlmZWF0 dXJlLCBEUFVfRFNQUF9NQVgsIGlkeCwgRFNQUF9NQVgpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0J aWYgKGZlYXR1cmVfbWFwW2ZlYXR1cmVdID49IFJFR19ETUFfRkVBVFVSRVNfTUFYKSB7Ci0JCURS TV9FUlJPUigiaW52YWxpZCBmZWF0dXJlIG1hcCAlZCBmb3IgZmVhdHVyZSAlZFxuIiwKLQkJCWZl YXR1cmVfbWFwW2ZlYXR1cmVdLCBmZWF0dXJlKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0K LQlkbWFfb3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCWlmIChJU19FUlJfT1JfTlVMTChk bWFfb3BzKSkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQotCWJsayA9IChmZWF0dXJlX21hcFtmZWF0 dXJlXSA9PSBJR0MpID8gRFNQUF9JR0MgOiBkc3BwX21hcHBpbmdbaWR4XTsKLQlyYyA9IGRtYV9v cHMtPmNoZWNrX3N1cHBvcnQoZmVhdHVyZV9tYXBbZmVhdHVyZV0sIGJsaywgJmlzX3N1cHBvcnRl ZCk7Ci0JaWYgKCFyYykKLQkJcmMgPSAoaXNfc3VwcG9ydGVkKSA/IDAgOiAtRU5PVFNVUFA7Ci0K LQlpZiAoIXJjKQotCQlyYyA9IHJlZ19kbWFfYnVmX2luaXQoJmRzcHBfYnVmW2ZlYXR1cmVfbWFw W2ZlYXR1cmVdXVtpZHhdLAotCQkJCWZlYXR1cmVfcmVnX2RtYV9zeltmZWF0dXJlXSk7Ci0KLQly ZXR1cm4gcmM7Ci19Ci0KLWludCByZWdfZG1hdjFfaW5pdF9zc3BwX29wX3Y0KGludCBmZWF0dXJl LCBlbnVtIGRwdV9zc3BwIGlkeCkKLXsKLQlyZXR1cm4gLUVOT1RTVVBQOwotfQotCi12b2lkIHJl Z19kbWF2MV9zZXR1cF9kc3BwX3ZsdXR2MTgoc3RydWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQg KmNmZykKLXsKLQlzdHJ1Y3QgZHJtX21zbV9wYV92bHV0ICpwYXlsb2FkID0gTlVMTDsKLQlzdHJ1 Y3QgZHB1X2h3X2NwX2NmZyAqaHdfY2ZnID0gY2ZnOwotCXUzMiBvcF9tb2RlOwotCXUzMiAqZGF0 YSA9IE5VTEw7Ci0JaW50IGksIGosIHJjID0gMDsKLQotCXJjID0gcmVnX2RtYV9kc3BwX2NoZWNr KGN0eCwgY2ZnLCBWTFVUKTsKLQlpZiAocmMpCi0JCXJldHVybjsKLQotCW9wX21vZGUgPSBEUFVf UkVHX1JFQUQoJmN0eC0+aHcsIFBBX09QX01PREVfT0ZGKTsKLQlpZiAoIWh3X2NmZy0+cGF5bG9h ZCkgewotCQlEUk1fREVCVUdfRFJJVkVSKCJEaXNhYmxlIHZsdXQgZmVhdHVyZVxuIik7Ci0JCURQ VV9SRUdfV1JJVEUoJmN0eC0+aHcsIFBBX0xVVFZfT1BNT0RFX09GRiwgMCk7Ci0JCWlmIChvcF9t b2RlICYgKH4oQklUKDIwKSkpKQotCQkJb3BfbW9kZSA9IDA7Ci0JCURQVV9SRUdfV1JJVEUoJmN0 eC0+aHcsIFBBX09QX01PREVfT0ZGLCBvcF9tb2RlKTsKLQkJcmV0dXJuOwotCX0KLQotCXJjID0g cmVnX2RtYV9ibGtfc2VsZWN0KFZMVVQsIGRzcHBfbWFwcGluZ1tjdHgtPmlkeF0sCi0JCQlkc3Bw X2J1ZltWTFVUXVtjdHgtPmlkeF0pOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoIndyaXRlIGRl Y29kZSBzZWxlY3QgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0JZGF0 YSA9IGt6YWxsb2MoVkxVVF9MRU4sIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJu OwotCi0JcGF5bG9hZCA9IGh3X2NmZy0+cGF5bG9hZDsKLQlEUk1fREVCVUdfRFJJVkVSKCJFbmFi bGUgdmx1dCBmZWF0dXJlIGZsYWdzICVsbHhcbiIsIHBheWxvYWQtPmZsYWdzKTsKLQlmb3IgKGkg PSAwLCBqID0gMDsgaSA8IEFSUkFZX1NJWkUocGF5bG9hZC0+dmFsKTsgaSArPSAyLCBqKyspCi0J CWRhdGFbal0gPSAocGF5bG9hZC0+dmFsW2ldICYgUkVHX01BU0soMTApKSB8Ci0JCQkoKHBheWxv YWQtPnZhbFtpICsgMV0gJiBSRUdfTUFTSygxMCkpIDw8IDE2KTsKLQotCXJjID0gcmVnX2RtYV93 cml0ZShSRUdfQkxLX1dSSVRFX1NJTkdMRSwgY3R4LT5jYXAtPnNibGstPnZsdXQuYmFzZSwKLQkJ CVZMVVRfTEVOLCBkYXRhLAotCQkJZHNwcF9idWZbVkxVVF1bY3R4LT5pZHhdLCBWTFVULAotCQkJ ZHNwcF9tYXBwaW5nW2N0eC0+aWR4XSk7Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigid3JpdGUg c2luZ2xlIHJlZyBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQly YyA9IHJlZ19kbWFfa2lja19vZmYoUkVHX0RNQV9XUklURSwgRE1BX0NUTF9RVUVVRTAsIFdSSVRF X0lNTUVESUFURSwKLQkJCWRzcHBfYnVmW1ZMVVRdW2N0eC0+aWR4XSwgaHdfY2ZnLT5jdGwpOwot CWlmIChyYykgewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBraWNrIG9mZiByZXQgJWRcbiIsIHJj KTsKLQkJZ290byBleGl0OwotCX0KLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBQQV9MVVRWX09Q TU9ERV9PRkYsIEJJVCgwKSk7Ci0JRFBVX1JFR19XUklURSgmY3R4LT5odywgUEFfT1BfTU9ERV9P RkYsIG9wX21vZGUgfCBCSVQoMjApKTsKLQotZXhpdDoKLQlrZnJlZShkYXRhKTsKLX0KLQotc3Rh dGljIGludCBkcHVfZ2FtdXRfZ2V0X21vZGVfaW5mbyhzdHJ1Y3QgZHJtX21zbV8zZF9nYW11dCAq cGF5bG9hZCwKLQkJdTMyICp0YmxfbGVuLCB1MzIgKnRibF9vZmYsIHUzMiAqb3Bjb2RlLCB1MzIg KnNjYWxlX29mZikKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKHBheWxvYWQtPm1vZGUgPiBHQU1V VF8zRF9NT0RFXzEzKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBtb2RlICVkIiwgcGF5bG9hZC0+ bW9kZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAocGF5bG9hZC0+bW9kZSkg ewotCWNhc2UgR0FNVVRfM0RfTU9ERV8xNzoKLQkJKnRibF9sZW4gPSBHQU1VVF8zRF9NT0RFMTdf VEJMX1NaICogc2l6ZW9mKHUzMikgKiAyOwotCQkqdGJsX29mZiA9IDA7Ci0JCSpzY2FsZV9vZmYg PSBHQU1VVF9TQ0FMRUFfT0ZGU0VUX09GRjsKLQkJKm9wY29kZSA9IGdhbXV0X21vZGVfMTcgPDwg MjsKLQkJYnJlYWs7Ci0JY2FzZSBHQU1VVF8zRF9NT0RFXzU6Ci0JCSp0YmxfbGVuID0gR0FNVVRf M0RfTU9ERTVfVEJMX1NaICogc2l6ZW9mKHUzMikgKiAyOwotCQkqdGJsX29mZiA9IEdBTVVUX01P REVfNV9PRkY7Ci0JCSpzY2FsZV9vZmYgPSBHQU1VVF9TQ0FMRUJfT0ZGU0VUX09GRjsKLQkJKm9w Y29kZSA9IGdhbXV0X21vZGVfNSA8PCAyOwotCQlicmVhazsKLQljYXNlIEdBTVVUXzNEX01PREVf MTM6Ci0JCSp0YmxfbGVuID0gR0FNVVRfM0RfTU9ERTEzX1RCTF9TWiAqIHNpemVvZih1MzIpICog MjsKLQkJKm9wY29kZSA9ICgqb3Bjb2RlICYgKEJJVCg0KSAtIDEpKSA+PiAyOwotCQlpZiAoKm9w Y29kZSA9PSBnYW11dF9tb2RlXzEzYSkKLQkJCSpvcGNvZGUgPSBnYW11dF9tb2RlXzEzYjsKLQkJ ZWxzZQotCQkJKm9wY29kZSA9IGdhbXV0X21vZGVfMTNhOwotCQkqdGJsX29mZiA9ICgqb3Bjb2Rl ID09IGdhbXV0X21vZGVfMTNhKSA/IDAgOgotCQkJR0FNVVRfTU9ERV8xM0JfT0ZGOwotCQkqc2Nh bGVfb2ZmID0gKCpvcGNvZGUgPT0gZ2FtdXRfbW9kZV8xM2EpID8KLQkJCUdBTVVUX1NDQUxFQV9P RkZTRVRfT0ZGIDogR0FNVVRfU0NBTEVCX09GRlNFVF9PRkY7Ci0JCSpvcGNvZGUgPDw9IDI7Ci0J CWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJjID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCWlmIChw YXlsb2FkLT5mbGFncyAmIEdBTVVUXzNEX01BUF9FTikKLQkJKm9wY29kZSB8PSBHQU1VVF9NQVBf RU47Ci0JKm9wY29kZSB8PSBHQU1VVF9FTjsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZv aWQgZHNwcF8zZF9nYW11dHY0X29mZihzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2Zn KQotewotCXN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyBraWNrX29mZjsKLQlzdHJ1Y3Qg ZHB1X2h3X2NwX2NmZyAqaHdfY2ZnID0gY2ZnOwotCXUzMiBvcF9tb2RlID0gMDsKLQlzdHJ1Y3Qg ZHB1X2h3X3JlZ19kbWFfb3BzICpkbWFfb3BzOwotCXN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9v cHNfY2ZnIGRtYV93cml0ZV9jZmc7Ci0JaW50IHJjOwotCi0JZG1hX29wcyA9IGRwdV9yZWdfZG1h X2dldF9vcHMoKTsKLQlkbWFfb3BzLT5yZXNldF9yZWdfZG1hX2J1Zihkc3BwX2J1ZltHQU1VVF1b Y3R4LT5pZHhdKTsKLQotCVJFR19ETUFfSU5JVF9PUFMoZG1hX3dyaXRlX2NmZywgZHNwcF9tYXBw aW5nW2N0eC0+aWR4XSwgR0FNVVQsCi0JCQlkc3BwX2J1ZltHQU1VVF1bY3R4LT5pZHhdKTsKLQot CVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsIDAsIE5VTEwsIDAsIEhXX0JMS19TRUxF Q1QsIDAsIDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7 Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigid3JpdGUgZGVjb2RlIHNlbGVjdCBmYWlsZWQgcmV0 ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3Jp dGVfY2ZnLAotCQljdHgtPmNhcC0+c2Jsay0+Z2FtdXQuYmFzZSwKLQkJJm9wX21vZGUsIHNpemVv ZihvcF9tb2RlKSwgUkVHX1NJTkdMRV9XUklURSwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1 cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJvcG1v ZGUgd3JpdGUgc2luZ2xlIHJlZyBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9 Ci0KLQlSRUdfRE1BX1NFVFVQX0tJQ0tPRkYoa2lja19vZmYsIGh3X2NmZy0+Y3RsLCBkc3BwX2J1 ZltHQU1VVF1bY3R4LT5pZHhdLAotCQkJUkVHX0RNQV9XUklURSwgRE1BX0NUTF9RVUVVRTAsIFdS SVRFX0lNTUVESUFURSk7Ci0JcmMgPSBkbWFfb3BzLT5raWNrX29mZigma2lja19vZmYpOwotCWlm IChyYykKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8ga2ljayBvZmYgcmV0ICVkXG4iLCByYyk7Ci19 Ci0KLXZvaWQgcmVnX2RtYXYxX3NldHVwX2RzcHBfM2RfZ2FtdXR2NChzdHJ1Y3QgZHB1X2h3X2Rz cHAgKmN0eCwgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1fbXNtXzNkX2dhbXV0ICpwYXlsb2Fk OwotCXN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyBraWNrX29mZjsKLQlzdHJ1Y3QgZHB1 X2h3X2NwX2NmZyAqaHdfY2ZnID0gY2ZnOwotCXUzMiBvcF9tb2RlLCByZWcsIHRibF9sZW4sIHRi bF9vZmYsIHNjYWxlX29mZiwgaTsKLQl1MzIgc2NhbGVfdGJsX2xlbiwgc2NhbGVfdGJsX29mZjsK LQl1MzIgKnNjYWxlX2RhdGE7Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgZG1h X3dyaXRlX2NmZzsKLQlzdHJ1Y3QgZHB1X2h3X3JlZ19kbWFfb3BzICpkbWFfb3BzOwotCWludCBy YzsKLQotCXJjID0gcmVnX2RtYV9kc3BwX2NoZWNrKGN0eCwgY2ZnLCBHQU1VVCk7Ci0JaWYgKHJj KQotCQlyZXR1cm47Ci0KLQlvcF9tb2RlID0gRFBVX1JFR19SRUFEKCZjdHgtPmh3LCBjdHgtPmNh cC0+c2Jsay0+Z2FtdXQuYmFzZSk7Ci0JaWYgKCFod19jZmctPnBheWxvYWQpIHsKLQkJRFJNX0RF QlVHX0RSSVZFUigiZGlzYWJsZSBnYW11dCBmZWF0dXJlXG4iKTsKLQkJZHNwcF8zZF9nYW11dHY0 X29mZihjdHgsIGNmZyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaHdfY2ZnLT5sZW4gIT0gc2l6 ZW9mKHN0cnVjdCBkcm1fbXNtXzNkX2dhbXV0KSkgewotCQlEUk1fRVJST1IoImludmFsaWQgc2l6 ZSBvZiBwYXlsb2FkIGxlbiAlZCBleHAgJXpkXG4iLAotCQkJCWh3X2NmZy0+bGVuLCBzaXplb2Yo c3RydWN0IGRybV9tc21fM2RfZ2FtdXQpKTsKLQkJcmV0dXJuOwotCX0KLQlwYXlsb2FkID0gaHdf Y2ZnLT5wYXlsb2FkOwotCXJjID0gZHB1X2dhbXV0X2dldF9tb2RlX2luZm8ocGF5bG9hZCwgJnRi bF9sZW4sICZ0Ymxfb2ZmLCAmb3BfbW9kZSwKLQkJCSZzY2FsZV9vZmYpOwotCWlmIChyYykgewot CQlEUk1fRVJST1IoImludmFsaWQgbW9kZSBpbmZvIHJjICVkXG4iLCByYyk7Ci0JCXJldHVybjsK LQl9Ci0KLQlkbWFfb3BzID0gZHB1X3JlZ19kbWFfZ2V0X29wcygpOwotCWRtYV9vcHMtPnJlc2V0 X3JlZ19kbWFfYnVmKGRzcHBfYnVmW0dBTVVUXVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9JTklU X09QUyhkbWFfd3JpdGVfY2ZnLCBkc3BwX21hcHBpbmdbY3R4LT5pZHhdLCBHQU1VVCwKLQkJCWRz cHBfYnVmW0dBTVVUXVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRl X2NmZywgMCwgTlVMTCwgMCwgSFdfQkxLX1NFTEVDVCwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5z ZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJ3 cml0ZSBkZWNvZGUgc2VsZWN0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuOwotCX0K LQlmb3IgKGkgPSAwOyBpIDwgR0FNVVRfM0RfVEJMX05VTTsgaSsrKSB7Ci0JCXJlZyA9IEdBTVVU X1RBQkxFMF9TRUwgPDwgaTsKLQkJcmVnIHw9ICgodGJsX29mZikgJiAoQklUKDExKSAtIDEpKTsK LQkJUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywKLQkJCWN0eC0+Y2FwLT5zYmxrLT5n YW11dC5iYXNlICsgR0FNVVRfVEFCTEVfU0VMX09GRiwKLQkJCSZyZWcsIHNpemVvZihyZWcpLCBS RUdfU0lOR0xFX1dSSVRFLCAwLCAwKTsKLQkJcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZk bWFfd3JpdGVfY2ZnKTsKLQkJaWYgKHJjKSB7Ci0JCQlEUk1fRVJST1IoIndyaXRlIHRibCBzZWwg cmVnIGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJCXJldHVybjsKLQkJfQotCQlSRUdfRE1BX1NF VFVQX09QUyhkbWFfd3JpdGVfY2ZnLAotCQkgICAgY3R4LT5jYXAtPnNibGstPmdhbXV0LmJhc2Ug KyBHQU1VVF9MT1dFUl9DT0xPUl9PRkYsCi0JCSAgICAmcGF5bG9hZC0+Y29sW2ldWzBdLmMyX2Mx LCB0YmxfbGVuLAotCQkgICAgUkVHX0JMS19XUklURV9NVUxUSVBMRSwgMiwgMCk7Ci0JCXJjID0g ZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JCWlmIChyYykgewotCQkJ RFJNX0VSUk9SKCJ3cml0ZSBjb2xvciByZWcgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQkJcmV0 dXJuOwotCQl9Ci0JfQotCi0JaWYgKG9wX21vZGUgJiBHQU1VVF9NQVBfRU4pIHsKLQkJaWYgKHNj YWxlX29mZiA9PSBHQU1VVF9TQ0FMRUFfT0ZGU0VUX09GRikKLQkJCXNjYWxlX3RibF9sZW4gPSBH QU1VVF9TQ0FMRV9PRkZfTEVOOwotCQllbHNlCi0JCQlzY2FsZV90YmxfbGVuID0gR0FNVVRfU0NB TEVfT0ZGX0xFTl8xMjsKLQotCQlmb3IgKGkgPSAwOyBpIDwgR0FNVVRfM0RfU0NBTEVfT0ZGX1RC TF9OVU07IGkrKykgewotCQkJc2NhbGVfdGJsX29mZiA9IGN0eC0+Y2FwLT5zYmxrLT5nYW11dC5i YXNlICsgc2NhbGVfb2ZmICsKLQkJCQkJKGkgKiBzY2FsZV90YmxfbGVuKTsKLQkJCXNjYWxlX2Rh dGEgPSAmcGF5bG9hZC0+c2NhbGVfb2ZmW2ldWzBdOwotCQkJUkVHX0RNQV9TRVRVUF9PUFMoZG1h X3dyaXRlX2NmZywgc2NhbGVfdGJsX29mZiwKLQkJCQkJc2NhbGVfZGF0YSwgc2NhbGVfdGJsX2xl biwKLQkJCQkJUkVHX0JMS19XUklURV9TSU5HTEUsIDAsIDApOwotCQkJcmMgPSBkbWFfb3BzLT5z ZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQkJCWlmIChyYykgewotCQkJCURSTV9FUlJP Uigid3JpdGUgc2NhbGUvb2ZmIHJlZyBmYWlsZWQgcmV0ICVkXG4iLAotCQkJCQkJcmMpOwotCQkJ CXJldHVybjsKLQkJCX0KLQkJfQotCX0KLQotCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9j ZmcsCi0JCWN0eC0+Y2FwLT5zYmxrLT5nYW11dC5iYXNlLAotCQkmb3BfbW9kZSwgc2l6ZW9mKG9w X21vZGUpLCBSRUdfU0lOR0xFX1dSSVRFLCAwLCAwKTsKLQlyYyA9IGRtYV9vcHMtPnNldHVwX3Bh eWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoIm9wbW9kZSB3 cml0ZSBzaW5nbGUgcmVnIGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuOwotCX0KLQot CVJFR19ETUFfU0VUVVBfS0lDS09GRihraWNrX29mZiwgaHdfY2ZnLT5jdGwsIGRzcHBfYnVmW0dB TVVUXVtjdHgtPmlkeF0sCi0JCQlSRUdfRE1BX1dSSVRFLCBETUFfQ1RMX1FVRVVFMCwgV1JJVEVf SU1NRURJQVRFKTsKLQlyYyA9IGRtYV9vcHMtPmtpY2tfb2ZmKCZraWNrX29mZik7Ci0JaWYgKHJj KQotCQlEUk1fRVJST1IoImZhaWxlZCB0byBraWNrIG9mZiByZXQgJWRcbiIsIHJjKTsKLX0KLQot dm9pZCByZWdfZG1hdjFfc2V0dXBfZHNwcF9nY3YxOChzdHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwg dm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1fbXNtX3BnY19sdXQgKmx1dF9jZmc7Ci0Jc3RydWN0 IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29m Zl9jZmcga2lja19vZmY7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3X2NmZyA9IGNmZzsKLQlz dHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBkbWFfd3JpdGVfY2ZnOwotCWludCByYywg aSA9IDA7Ci0JdTMyIHJlZzsKLQotCXJjID0gcmVnX2RtYV9kc3BwX2NoZWNrKGN0eCwgY2ZnLCBH Qyk7Ci0JaWYgKHJjKQotCQlyZXR1cm47Ci0KLQlpZiAoIWh3X2NmZy0+cGF5bG9hZCkgewotCQlE Uk1fREVCVUdfRFJJVkVSKCJkaXNhYmxlIHBnYyBmZWF0dXJlXG4iKTsKLQkJRFBVX1JFR19XUklU RSgmY3R4LT5odywgY3R4LT5jYXAtPnNibGstPmdjLmJhc2UsIDApOwotCQlyZXR1cm47Ci0JfQot Ci0JaWYgKGh3X2NmZy0+bGVuICE9IHNpemVvZihzdHJ1Y3QgZHJtX21zbV9wZ2NfbHV0KSkgewot CQlEUk1fRVJST1IoImludmFsaWQgc2l6ZSBvZiBwYXlsb2FkIGxlbiAlZCBleHAgJXpkXG4iLAot CQkJCWh3X2NmZy0+bGVuLCBzaXplb2Yoc3RydWN0IGRybV9tc21fcGdjX2x1dCkpOwotCQlyZXR1 cm47Ci0JfQotCWx1dF9jZmcgPSBod19jZmctPnBheWxvYWQ7Ci0KLQlkbWFfb3BzID0gZHB1X3Jl Z19kbWFfZ2V0X29wcygpOwotCWRtYV9vcHMtPnJlc2V0X3JlZ19kbWFfYnVmKGRzcHBfYnVmW0dD XVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9JTklUX09QUyhkbWFfd3JpdGVfY2ZnLCBkc3BwX21h cHBpbmdbY3R4LT5pZHhdLCBHQywKLQkJCWRzcHBfYnVmW0dDXVtjdHgtPmlkeF0pOwotCi0JUkVH X0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywgMCwgTlVMTCwgMCwgSFdfQkxLX1NFTEVDVCwg MCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlp ZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJ3cml0ZSBkZWNvZGUgc2VsZWN0IGZhaWxlZCByZXQgJWRc biIsIHJjKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBHQ19UQkxfTlVNOyBp KyspIHsKLQkJcmVnID0gMDsKLQkJUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywKLQkJ CWN0eC0+Y2FwLT5zYmxrLT5nYy5iYXNlICsgR0NfQzBfSU5ERVhfT0ZGICsKLQkJCShpICogc2l6 ZW9mKHUzMikgKiAyKSwKLQkJCSZyZWcsIHNpemVvZihyZWcpLCBSRUdfU0lOR0xFX1dSSVRFLCAw LCAwKTsKLQkJcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQkJ aWYgKHJjKSB7Ci0JCQlEUk1fRVJST1IoImluZGV4IGluaXQgZmFpbGVkIHJldCAlZFxuIiwgcmMp OwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywK LQkJCWN0eC0+Y2FwLT5zYmxrLT5nYy5iYXNlICsgR0NfQzBfT0ZGICsKLQkJCShpICogc2l6ZW9m KHUzMikgKiAyKSwKLQkJCWx1dF9jZmctPmMwICsgKEFSUkFZX1NJWkUobHV0X2NmZy0+YzApICog aSksCi0JCQlQR0NfVEJMX0xFTiAqIHNpemVvZih1MzIpLAotCQkJUkVHX0JMS19XUklURV9JTkMs IDAsIDApOwotCQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwot CQlpZiAocmMpIHsKLQkJCURSTV9FUlJPUigibHV0IHdyaXRlIGZhaWxlZCByZXQgJWRcbiIsIHJj KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCXJlZyA9IEJJVCgwKTsKLQlSRUdfRE1BX1NFVFVQ X09QUyhkbWFfd3JpdGVfY2ZnLAotCQljdHgtPmNhcC0+c2Jsay0+Z2MuYmFzZSArIEdDX0xVVF9T V0FQX09GRiwKLQkJJnJlZywgc2l6ZW9mKHJlZyksIFJFR19TSU5HTEVfV1JJVEUsIDAsIDApOwot CXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7 Ci0JCURSTV9FUlJPUigic2V0dGluZyBzd2FwIG9mZnNldCBmYWlsZWQgcmV0ICVkXG4iLCByYyk7 Ci0JCXJldHVybjsKLQl9Ci0KLQlyZWcgPSBHQ19FTiB8ICgobHV0X2NmZy0+ZmxhZ3MgJiBQR0Nf OEJfUk9VTkQpID8gR0NfOEJfUk9VTkRfRU4gOiAwKTsKLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFf d3JpdGVfY2ZnLAotCQljdHgtPmNhcC0+c2Jsay0+Z2MuYmFzZSwKLQkJJnJlZywgc2l6ZW9mKHJl ZyksIFJFR19TSU5HTEVfV1JJVEUsIDAsIDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9h ZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigiZW5hYmxpbmcgZ2Ft bWEgY29ycmVjdGlvbiBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlS RUdfRE1BX1NFVFVQX0tJQ0tPRkYoa2lja19vZmYsIGh3X2NmZy0+Y3RsLCBkc3BwX2J1ZltHQ11b Y3R4LT5pZHhdLAotCQkJUkVHX0RNQV9XUklURSwgRE1BX0NUTF9RVUVVRTAsIFdSSVRFX0lNTUVE SUFURSk7Ci0JcmMgPSBkbWFfb3BzLT5raWNrX29mZigma2lja19vZmYpOwotCWlmIChyYykgewot CQlEUk1fRVJST1IoImZhaWxlZCB0byBraWNrIG9mZiByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJu OwotCX0KLX0KLQotc3RhdGljIHZvaWQgX2RzcHBfaWdjdjMxX29mZihzdHJ1Y3QgZHB1X2h3X2Rz cHAgKmN0eCwgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyBr aWNrX29mZjsKLQlzdHJ1Y3QgZHB1X2h3X2NwX2NmZyAqaHdfY2ZnID0gY2ZnOwotCXN0cnVjdCBk cHVfaHdfcmVnX2RtYV9vcHMgKmRtYV9vcHM7Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29w c19jZmcgZG1hX3dyaXRlX2NmZzsKLQlpbnQgcmM7Ci0JdTMyIHJlZzsKLQotCWRtYV9vcHMgPSBk cHVfcmVnX2RtYV9nZXRfb3BzKCk7Ci0JZG1hX29wcy0+cmVzZXRfcmVnX2RtYV9idWYoZHNwcF9i dWZbSUdDXVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9JTklUX09QUyhkbWFfd3JpdGVfY2ZnLCBk c3BwX21hcHBpbmdbY3R4LT5pZHhdLCBJR0MsCi0JCWRzcHBfYnVmW0lHQ11bY3R4LT5pZHhdKTsK LQotCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsIDAsIE5VTEwsIDAsIEhXX0JMS19T RUxFQ1QsIDAsIDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2Nm Zyk7Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigid3JpdGUgZGVjb2RlIHNlbGVjdCBmYWlsZWQg cmV0ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZWcgPSBJR0NfRElTOwotCVJFR19E TUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsCi0JCWN0eC0+Y2FwLT5zYmxrLT5pZ2MuYmFzZSAr IElHQ19PUE1PREVfT0ZGLAotCQkmcmVnLCBzaXplb2YocmVnKSwgUkVHX1NJTkdMRV9XUklURSwg MCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlp ZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJzZXR0aW5nIG9wY29kZSBmYWlsZWQgcmV0ICVkXG4iLCBy Yyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlSRUdfRE1BX1NFVFVQX0tJQ0tPRkYoa2lja19vZmYsIGh3 X2NmZy0+Y3RsLCBkc3BwX2J1ZltJR0NdW2N0eC0+aWR4XSwKLQkJCVJFR19ETUFfV1JJVEUsIERN QV9DVExfUVVFVUUwLCBXUklURV9JTU1FRElBVEUpOwotCXJjID0gZG1hX29wcy0+a2lja19vZmYo JmtpY2tfb2ZmKTsKLQlpZiAocmMpCi0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGtpY2sgb2ZmIHJl dCAlZFxuIiwgcmMpOwotfQotCi12b2lkIHJlZ19kbWF2MV9zZXR1cF9kc3BwX2lnY3YzMShzdHJ1 Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKQotewotCXN0cnVjdCBkcm1fbXNtX2lnY19s dXQgKmx1dF9jZmc7Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQlzdHJ1 Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcga2lja19vZmY7Ci0Jc3RydWN0IGRwdV9od19jcF9j ZmcgKmh3X2NmZyA9IGNmZzsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBkbWFf d3JpdGVfY2ZnOwotCWludCByYywgaSA9IDAsIGogPSAwOwotCXUzMiAqYWRkciA9IE5VTEw7Ci0J dTMyIG9mZnNldCA9IDA7Ci0JdTMyIHJlZzsKLQotCXJjID0gcmVnX2RtYV9kc3BwX2NoZWNrKGN0 eCwgY2ZnLCBJR0MpOwotCWlmIChyYykKLQkJcmV0dXJuOwotCi0JaWYgKCFod19jZmctPnBheWxv YWQpIHsKLQkJRFJNX0RFQlVHX0RSSVZFUigiZGlzYWJsZSBpZ2MgZmVhdHVyZVxuIik7Ci0JCV9k c3BwX2lnY3YzMV9vZmYoY3R4LCBjZmcpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGh3X2NmZy0+ bGVuICE9IHNpemVvZihzdHJ1Y3QgZHJtX21zbV9pZ2NfbHV0KSkgewotCQlEUk1fRVJST1IoImlu dmFsaWQgc2l6ZSBvZiBwYXlsb2FkIGxlbiAlZCBleHAgJXpkXG4iLAotCQkJCWh3X2NmZy0+bGVu LCBzaXplb2Yoc3RydWN0IGRybV9tc21faWdjX2x1dCkpOwotCQlyZXR1cm47Ci0JfQotCi0JbHV0 X2NmZyA9IGh3X2NmZy0+cGF5bG9hZDsKLQotCWRtYV9vcHMgPSBkcHVfcmVnX2RtYV9nZXRfb3Bz KCk7Ci0JZG1hX29wcy0+cmVzZXRfcmVnX2RtYV9idWYoZHNwcF9idWZbSUdDXVtjdHgtPmlkeF0p OwotCi0JUkVHX0RNQV9JTklUX09QUyhkbWFfd3JpdGVfY2ZnLCBEU1BQX0lHQywgSUdDLCBkc3Bw X2J1ZltJR0NdW2N0eC0+aWR4XSk7Ci0KLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVfY2Zn LCAwLCBOVUxMLCAwLCBIV19CTEtfU0VMRUNULCAwLCAwKTsKLQlyYyA9IGRtYV9vcHMtPnNldHVw X3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoIndyaXRl IGRlY29kZSBzZWxlY3QgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0J Zm9yIChpID0gMDsgaSA8IElHQ19UQkxfTlVNOyBpKyspIHsKLQkJYWRkciA9IGx1dF9jZmctPmMw ICsgKGkgKiBBUlJBWV9TSVpFKGx1dF9jZmctPmMwKSk7Ci0JCW9mZnNldCA9IElHQ19DMF9PRkYg KyAoaSAqIHNpemVvZih1MzIpKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgSUdDX1RCTF9MRU47IGor KykgewotCQkJYWRkcltqXSAmPSBJR0NfREFUQV9NQVNLOwotCQkJYWRkcltqXSB8PSBJR0NfRFNQ UF9TRUxfTUFTSyhjdHgtPmlkeCAtIDEpOwotCQkJaWYgKGogPT0gMCkKLQkJCQlhZGRyW2pdIHw9 IElHQ19JTkRFWF9VUERBVEU7Ci0JCX0KLQotCQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVf Y2ZnLCBvZmZzZXQsIGFkZHIsCi0JCQlJR0NfVEJMX0xFTiAqIHNpemVvZih1MzIpLAotCQkJUkVH X0JMS19XUklURV9JTkMsIDAsIDApOwotCQlyYyA9IGRtYV9vcHMtPnNldHVwX3BheWxvYWQoJmRt YV93cml0ZV9jZmcpOwotCQlpZiAocmMpIHsKLQkJCURSTV9FUlJPUigibHV0IHdyaXRlIGZhaWxl ZCByZXQgJWRcbiIsIHJjKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCVJFR19ETUFfSU5JVF9P UFMoZG1hX3dyaXRlX2NmZywgZHNwcF9tYXBwaW5nW2N0eC0+aWR4XSwgSUdDLAotCQlkc3BwX2J1 ZltJR0NdW2N0eC0+aWR4XSk7Ci0KLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVfY2ZnLCAw LCBOVUxMLCAwLCBIV19CTEtfU0VMRUNULCAwLCAwKTsKLQlyYyA9IGRtYV9vcHMtPnNldHVwX3Bh eWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoIndyaXRlIGRl Y29kZSBzZWxlY3QgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYg KGx1dF9jZmctPmZsYWdzICYgSUdDX0RJVEhFUl9FTkFCTEUpIHsKLQkJcmVnID0gbHV0X2NmZy0+ c3RyZW5ndGggJiBJR0NfRElUSEVSX0RBVEFfTUFTSzsKLQkJUkVHX0RNQV9TRVRVUF9PUFMoZG1h X3dyaXRlX2NmZywKLQkJCWN0eC0+Y2FwLT5zYmxrLT5pZ2MuYmFzZSArIElHQ19ESVRIRVJfT0ZG LAotCQkJJnJlZywgc2l6ZW9mKHJlZyksIFJFR19TSU5HTEVfV1JJVEUsIDAsIDApOwotCQlyYyA9 IGRtYV9vcHMtPnNldHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCQlpZiAocmMpIHsKLQkJ CURSTV9FUlJPUigiZGl0aGVyIHN0cmVuZ3RoIGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJCXJl dHVybjsKLQkJfQotCX0KLQotCXJlZyA9IElHQ19FTjsKLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFf d3JpdGVfY2ZnLAotCQljdHgtPmNhcC0+c2Jsay0+aWdjLmJhc2UgKyBJR0NfT1BNT0RFX09GRiwK LQkJJnJlZywgc2l6ZW9mKHJlZyksIFJFR19TSU5HTEVfV1JJVEUsIDAsIDApOwotCXJjID0gZG1h X29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7Ci0JaWYgKHJjKSB7Ci0JCURSTV9F UlJPUigic2V0dGluZyBvcGNvZGUgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlyZXR1cm47Ci0J fQotCi0JUkVHX0RNQV9TRVRVUF9LSUNLT0ZGKGtpY2tfb2ZmLCBod19jZmctPmN0bCwgZHNwcF9i dWZbSUdDXVtjdHgtPmlkeF0sCi0JCQlSRUdfRE1BX1dSSVRFLCBETUFfQ1RMX1FVRVVFMCwgV1JJ VEVfSU1NRURJQVRFKTsKLQlyYyA9IGRtYV9vcHMtPmtpY2tfb2ZmKCZraWNrX29mZik7Ci0JaWYg KHJjKQotCQlEUk1fRVJST1IoImZhaWxlZCB0byBraWNrIG9mZiByZXQgJWRcbiIsIHJjKTsKLX0K LQotc3RhdGljIHZvaWQgX2RzcHBfcGNjdjRfb2ZmKHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2 b2lkICpjZmcpCi17Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX2tpY2tvZmZfY2ZnIGtpY2tfb2ZmOwot CXN0cnVjdCBkcHVfaHdfY3BfY2ZnICpod19jZmcgPSBjZmc7Ci0Jc3RydWN0IGRwdV9od19yZWdf ZG1hX29wcyAqZG1hX29wczsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBkbWFf d3JpdGVfY2ZnOwotCWludCByYzsKLQl1MzIgcmVnOwotCi0JZG1hX29wcyA9IGRwdV9yZWdfZG1h X2dldF9vcHMoKTsKLQlkbWFfb3BzLT5yZXNldF9yZWdfZG1hX2J1Zihkc3BwX2J1ZltQQ0NdW2N0 eC0+aWR4XSk7Ci0KLQlSRUdfRE1BX0lOSVRfT1BTKGRtYV93cml0ZV9jZmcsIGRzcHBfbWFwcGlu Z1tjdHgtPmlkeF0sIFBDQywKLQkJZHNwcF9idWZbUENDXVtjdHgtPmlkeF0pOwotCi0JUkVHX0RN QV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywgMCwgTlVMTCwgMCwgSFdfQkxLX1NFTEVDVCwgMCwg MCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAo cmMpIHsKLQkJRFJNX0VSUk9SKCJ3cml0ZSBkZWNvZGUgc2VsZWN0IGZhaWxlZCByZXQgJWRcbiIs IHJjKTsKLQkJcmV0dXJuOwotCX0KLQotCXJlZyA9IFBDQ19ESVM7Ci0JUkVHX0RNQV9TRVRVUF9P UFMoZG1hX3dyaXRlX2NmZywKLQkJY3R4LT5jYXAtPnNibGstPnBjYy5iYXNlLAotCQkmcmVnLCBz aXplb2YocmVnKSwgUkVHX1NJTkdMRV9XUklURSwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1 cF9wYXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJzZXR0 aW5nIG9wY29kZSBmYWlsZWQgcmV0ICVkXG4iLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlSRUdf RE1BX1NFVFVQX0tJQ0tPRkYoa2lja19vZmYsIGh3X2NmZy0+Y3RsLCBkc3BwX2J1ZltQQ0NdW2N0 eC0+aWR4XSwKLQkJCVJFR19ETUFfV1JJVEUsIERNQV9DVExfUVVFVUUwLCBXUklURV9JTU1FRElB VEUpOwotCXJjID0gZG1hX29wcy0+a2lja19vZmYoJmtpY2tfb2ZmKTsKLQlpZiAocmMpCi0JCURS TV9FUlJPUigiZmFpbGVkIHRvIGtpY2sgb2ZmIHJldCAlZFxuIiwgcmMpOwotfQotCi12b2lkIHJl Z19kbWF2MV9zZXR1cF9kc3BwX3BjY3Y0KHN0cnVjdCBkcHVfaHdfZHNwcCAqY3R4LCB2b2lkICpj ZmcpCi17Ci0Jc3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQlzdHJ1Y3QgZHB1 X3JlZ19kbWFfa2lja29mZl9jZmcga2lja19vZmY7Ci0Jc3RydWN0IGRwdV9od19jcF9jZmcgKmh3 X2NmZyA9IGNmZzsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfc2V0dXBfb3BzX2NmZyBkbWFfd3JpdGVf Y2ZnOwotCXN0cnVjdCBkcm1fbXNtX3BjYyAqcGNjX2NmZzsKLQlzdHJ1Y3QgZHJtX21zbV9wY2Nf Y29lZmYgKmNvZWZmcyA9IE5VTEw7Ci0JdTMyICpkYXRhID0gTlVMTDsKLQlpbnQgcmMsIGkgPSAw OwotCXUzMiByZWcgPSAwOwotCi0JcmMgPSByZWdfZG1hX2RzcHBfY2hlY2soY3R4LCBjZmcsIFBD Qyk7Ci0JaWYgKHJjKQotCQlyZXR1cm47Ci0KLQlpZiAoIWh3X2NmZy0+cGF5bG9hZCkgewotCQlE Uk1fREVCVUdfRFJJVkVSKCJkaXNhYmxlIHBjYyBmZWF0dXJlXG4iKTsKLQkJX2RzcHBfcGNjdjRf b2ZmKGN0eCwgY2ZnKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChod19jZmctPmxlbiAhPSBzaXpl b2Yoc3RydWN0IGRybV9tc21fcGNjKSkgewotCQlEUk1fRVJST1IoImludmFsaWQgc2l6ZSBvZiBw YXlsb2FkIGxlbiAlZCBleHAgJXpkXG4iLAotCQkJCWh3X2NmZy0+bGVuLCBzaXplb2Yoc3RydWN0 IGRybV9tc21fcGNjKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwY2NfY2ZnID0gaHdfY2ZnLT5wYXls b2FkOwotCi0JZG1hX29wcyA9IGRwdV9yZWdfZG1hX2dldF9vcHMoKTsKLQlkbWFfb3BzLT5yZXNl dF9yZWdfZG1hX2J1Zihkc3BwX2J1ZltQQ0NdW2N0eC0+aWR4XSk7Ci0KLQlSRUdfRE1BX0lOSVRf T1BTKGRtYV93cml0ZV9jZmcsIGRzcHBfbWFwcGluZ1tjdHgtPmlkeF0sCi0JCVBDQywgZHNwcF9i dWZbUENDXVtjdHgtPmlkeF0pOwotCi0JUkVHX0RNQV9TRVRVUF9PUFMoZG1hX3dyaXRlX2NmZywg MCwgTlVMTCwgMCwgSFdfQkxLX1NFTEVDVCwgMCwgMCk7Ci0JcmMgPSBkbWFfb3BzLT5zZXR1cF9w YXlsb2FkKCZkbWFfd3JpdGVfY2ZnKTsKLQlpZiAocmMpIHsKLQkJRFJNX0VSUk9SKCJ3cml0ZSBk ZWNvZGUgc2VsZWN0IGZhaWxlZCByZXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuOwotCX0KLQotCWRh dGEgPSBremFsbG9jKFBDQ19MRU4sIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJu OwotCi0JZm9yIChpID0gMDsgaSA8IFBDQ19OVU1fUExBTkVTOyBpKyspIHsKLQkJc3dpdGNoIChp KSB7Ci0JCWNhc2UgMDoKLQkJCWNvZWZmcyA9ICZwY2NfY2ZnLT5yOwotCQkJZGF0YVtpICsgMjRd ID0gcGNjX2NmZy0+cl9ycjsKLQkJCWRhdGFbaSArIDI3XSA9IHBjY19jZmctPnJfZ2c7Ci0JCQlk YXRhW2kgKyAzMF0gPSBwY2NfY2ZnLT5yX2JiOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWNv ZWZmcyA9ICZwY2NfY2ZnLT5nOwotCQkJZGF0YVtpICsgMjRdID0gcGNjX2NmZy0+Z19ycjsKLQkJ CWRhdGFbaSArIDI3XSA9IHBjY19jZmctPmdfZ2c7Ci0JCQlkYXRhW2kgKyAzMF0gPSBwY2NfY2Zn LT5nX2JiOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWNvZWZmcyA9ICZwY2NfY2ZnLT5iOwot CQkJZGF0YVtpICsgMjRdID0gcGNjX2NmZy0+Yl9ycjsKLQkJCWRhdGFbaSArIDI3XSA9IHBjY19j ZmctPmJfZ2c7Ci0JCQlkYXRhW2kgKyAzMF0gPSBwY2NfY2ZnLT5iX2JiOwotCQkJYnJlYWs7Ci0J CWRlZmF1bHQ6Ci0JCQlEUk1fRVJST1IoImludmFsaWQgcGNjIHBsYW5lOiAlZFxuIiwgaSk7Ci0J CQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQlkYXRhW2ldID0gY29lZmZzLT5jOwotCQlkYXRhW2kgKyAz XSA9IGNvZWZmcy0+cjsKLQkJZGF0YVtpICsgNl0gPSBjb2VmZnMtPmc7Ci0JCWRhdGFbaSArIDld ID0gY29lZmZzLT5iOwotCQlkYXRhW2kgKyAxMl0gPSBjb2VmZnMtPnJnOwotCQlkYXRhW2kgKyAx NV0gPSBjb2VmZnMtPnJiOwotCQlkYXRhW2kgKyAxOF0gPSBjb2VmZnMtPmdiOwotCQlkYXRhW2kg KyAyMV0gPSBjb2VmZnMtPnJnYjsKLQl9Ci0KLQlSRUdfRE1BX1NFVFVQX09QUyhkbWFfd3JpdGVf Y2ZnLAotCQljdHgtPmNhcC0+c2Jsay0+cGNjLmJhc2UgKyBQQ0NfQ19PRkYsCi0JCWRhdGEsIFBD Q19MRU4sCi0JCVJFR19CTEtfV1JJVEVfU0lOR0xFLCAwLCAwKTsKLQlyYyA9IGRtYV9vcHMtPnNl dHVwX3BheWxvYWQoJmRtYV93cml0ZV9jZmcpOwotCWlmIChyYykgewotCQlEUk1fRVJST1IoIndy aXRlIHBjYyBsdXQgZmFpbGVkIHJldCAlZFxuIiwgcmMpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0J cmVnID0gUENDX0VOOwotCVJFR19ETUFfU0VUVVBfT1BTKGRtYV93cml0ZV9jZmcsCi0JCWN0eC0+ Y2FwLT5zYmxrLT5wY2MuYmFzZSwKLQkJJnJlZywgc2l6ZW9mKHJlZyksIFJFR19TSU5HTEVfV1JJ VEUsIDAsIDApOwotCXJjID0gZG1hX29wcy0+c2V0dXBfcGF5bG9hZCgmZG1hX3dyaXRlX2NmZyk7 Ci0JaWYgKHJjKSB7Ci0JCURSTV9FUlJPUigic2V0dGluZyBvcGNvZGUgZmFpbGVkIHJldCAlZFxu IiwgcmMpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JUkVHX0RNQV9TRVRVUF9LSUNLT0ZGKGtpY2tf b2ZmLCBod19jZmctPmN0bCwgZHNwcF9idWZbUENDXVtjdHgtPmlkeF0sCi0JCQlSRUdfRE1BX1dS SVRFLCBETUFfQ1RMX1FVRVVFMCwgV1JJVEVfSU1NRURJQVRFKTsKLQlyYyA9IGRtYV9vcHMtPmtp Y2tfb2ZmKCZraWNrX29mZik7Ci0JaWYgKHJjKQotCQlEUk1fRVJST1IoImZhaWxlZCB0byBraWNr IG9mZiByZXQgJWRcbiIsIHJjKTsKLQotZXhpdDoKLQlrZnJlZShkYXRhKTsKLX0KLQotaW50IHJl Z19kbWF2MV9kZWluaXRfZHNwcF9vcHMoZW51bSBkcHVfZHNwcCBpZHgpCi17Ci0JaW50IGk7Ci0J c3RydWN0IGRwdV9od19yZWdfZG1hX29wcyAqZG1hX29wczsKLQotCWRtYV9vcHMgPSBkcHVfcmVn X2RtYV9nZXRfb3BzKCk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGRtYV9vcHMpKQotCQlyZXR1cm4g LUVOT1RTVVBQOwotCi0JaWYgKGlkeCA+PSBEU1BQX01BWCkgewotCQlEUk1fRVJST1IoImludmFs aWQgZHNwcCBpZHggJXggbWF4ICV4ZFxuIiwgaWR4LCBEU1BQX01BWCk7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBSRUdfRE1BX0ZFQVRVUkVTX01BWDsgaSsrKSB7 Ci0JCWlmICghZHNwcF9idWZbaV1baWR4XSkKLQkJCWNvbnRpbnVlOwotCQlkbWFfb3BzLT5kZWFs bG9jX3JlZ19kbWEoZHNwcF9idWZbaV1baWR4XSk7Ci0JCWRzcHBfYnVmW2ldW2lkeF0gPSBOVUxM OwotCX0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19yZWdfZG1hX3YxX2NvbG9yX3Byb2MuaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19yZWdfZG1hX3YxX2NvbG9yX3Byb2MuaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggNWMzMzM5OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfcmVnX2RtYV92MV9jb2xvcl9wcm9jLmgKKysrIC9kZXYvbnVs bApAQCAtMSw3NSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4 IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRl ZiBfRFBVX0hXX1JFR19ETUFfVjFfQ09MT1JfUFJPQ19ICi0jZGVmaW5lIF9EUFVfSFdfUkVHX0RN QV9WMV9DT0xPUl9QUk9DX0gKLQotI2luY2x1ZGUgImRwdV9od191dGlsLmgiCi0jaW5jbHVkZSAi ZHB1X2h3X2NhdGFsb2cuaCIKLSNpbmNsdWRlICJkcHVfaHdfZHNwcC5oIgotCi0vKioKLSAqIHJl Z19kbWF2MV9pbml0X2RzcHBfb3BfdjQoKSAtIGluaXRpYWxpemUgdGhlIGRzcHAgZmVhdHVyZSBv cCBmb3IgZHB1IHY0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyByZWcg ZG1hIHYxLgotICogQGZlYXR1cmU6IGRzcHAgZmVhdHVyZQotICogaWR4OiBkc3BwIGlkeAotICov Ci1pbnQgcmVnX2RtYXYxX2luaXRfZHNwcF9vcF92NChpbnQgZmVhdHVyZSwgZW51bSBkcHVfZHNw cCBpZHgpOwotCi0vKioKLSAqIHJlZ19kbWFfaW5pdF9zc3BwX29wX3Y0KCkgLSBpbml0aWFsaXpl IHRoZSBzc3BwIGZlYXR1cmUgb3AgZm9yIGRwdSB2NAotICogQGZlYXR1cmU6IHNzcHAgZmVhdHVy ZQotICogQGlkeDogc3NwcCBpZHgKLSAqLwotaW50IHJlZ19kbWF2MV9pbml0X3NzcHBfb3BfdjQo aW50IGZlYXR1cmUsIGVudW0gZHB1X3NzcHAgaWR4KTsKLQotLyoqCi0gKiByZWdfZG1hdjFfc2V0 dXBfZHNwcF92bHV0djE4KCkgLSB2bHV0IHYxOCBpbXBsZW1lbnRhdGlvbiB1c2luZyByZWcgZG1h IHYxLgotICogQGN0eDogZHNwcCBjdHggaW5mbwotICogQGNmZzogcG9pbnRlciB0byBzdHJ1Y3Qg ZHB1X2h3X2NwX2NmZwotICovCi12b2lkIHJlZ19kbWF2MV9zZXR1cF9kc3BwX3ZsdXR2MTgoc3Ry dWN0IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogcmVnX2RtYXYxX3Nl dHVwXzNkX2dhbXV0djQoKSAtIGdhbXV0IHY0IGltcGxlbWVudGF0aW9uIHVzaW5nIHJlZyBkbWEg djEuCi0gKiBAY3R4OiBkc3BwIGN0eCBpbmZvCi0gKiBAY2ZnOiBwb2ludGVyIHRvIHN0cnVjdCBk cHVfaHdfY3BfY2ZnCi0gKi8KLXZvaWQgcmVnX2RtYXYxX3NldHVwX2RzcHBfM2RfZ2FtdXR2NChz dHJ1Y3QgZHB1X2h3X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoqCi0gKiByZWdfZG1hdjFf c2V0dXBfZHNwcF9nY3YxOCgpIC0gZ2MgdjE4IGltcGxlbWVudGF0aW9uIHVzaW5nIHJlZyBkbWEg djEuCi0gKiBAY3R4OiBkc3BwIGN0eCBpbmZvCi0gKiBAY2ZnOiBwb2ludGVyIHRvIHN0cnVjdCBk cHVfaHdfY3BfY2ZnCi0gKi8KLXZvaWQgcmVnX2RtYXYxX3NldHVwX2RzcHBfZ2N2MTgoc3RydWN0 IGRwdV9od19kc3BwICpjdHgsIHZvaWQgKmNmZyk7Ci0KLS8qKgotICogcmVnX2RtYXYxX3NldHVw X2RzcHBfaWdjdjMxKCkgLSBpZ2MgdjMxIGltcGxlbWVudGF0aW9uIHVzaW5nIHJlZyBkbWEgdjEu Ci0gKiBAY3R4OiBkc3BwIGN0eCBpbmZvCi0gKiBAY2ZnOiBwb2ludGVyIHRvIHN0cnVjdCBkcHVf aHdfY3BfY2ZnCi0gKi8KLXZvaWQgcmVnX2RtYXYxX3NldHVwX2RzcHBfaWdjdjMxKHN0cnVjdCBk cHVfaHdfZHNwcCAqY3R4LCB2b2lkICpjZmcpOwotCi0vKioKLSAqIHJlZ19kbWF2MV9zZXR1cF9k c3BwX3BjY3Y0KCkgLSBwY2MgdjQgaW1wbGVtZW50YXRpb24gdXNpbmcgcmVnIGRtYSB2MS4KLSAq IEBjdHg6IGRzcHAgY3R4IGluZm8KLSAqIEBjZmc6IHBvaW50ZXIgdG8gc3RydWN0IGRwdV9od19j cF9jZmcKLSAqLwotdm9pZCByZWdfZG1hdjFfc2V0dXBfZHNwcF9wY2N2NChzdHJ1Y3QgZHB1X2h3 X2RzcHAgKmN0eCwgdm9pZCAqY2ZnKTsKLQotLyoqCi0gKiByZWdfZG1hdjFfZGVpbml0X2RzcHBf b3BzKCkgLSBkZWluaXRpYWxpemUgdGhlIGRzcHAgZmVhdHVyZSBvcCBmb3IgZHB1IHY0Ci0gKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB3ZXJlIGluaXRpYWxpemVkLgotICog QGlkeDogZHNwcCBpZHgKLSAqLwotaW50IHJlZ19kbWF2MV9kZWluaXRfZHNwcF9vcHMoZW51bSBk cHVfZHNwcCBpZHgpOwotI2VuZGlmIC8qIF9EUFVfSFdfUkVHX0RNQV9WMV9DT0xPUl9QUk9DX0gg Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3Bw LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5jCmluZGV4IDEw YmRjZTMuLjY2NDA5MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19zc3BwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3NzcHAuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgiCiAj aW5jbHVkZSAiZHB1X2h3X2xtLmgiCiAjaW5jbHVkZSAiZHB1X2h3X3NzcHAuaCIKLSNpbmNsdWRl ICJkcHVfaHdfY29sb3JfcHJvY2Vzc2luZy5oIgogI2luY2x1ZGUgImRwdV9kYmcuaCIKICNpbmNs dWRlICJkcHVfa21zLmgiCiAKQEAgLTE2NSwxNSArMTY0LDYgQEAgc3RhdGljIGlubGluZSBpbnQg X3NzcHBfc3ViYmxrX29mZnNldChzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKIAljYXNlIERQVV9T U1BQX0NTQ18xMEJJVDoKIAkJKmlkeCA9IHNibGstPmNzY19ibGsuYmFzZTsKIAkJYnJlYWs7Ci0J Y2FzZSBEUFVfU1NQUF9IU0lDOgotCQkqaWR4ID0gc2Jsay0+aHNpY19ibGsuYmFzZTsKLQkJYnJl YWs7Ci0JY2FzZSBEUFVfU1NQUF9QQ0M6Ci0JCSppZHggPSBzYmxrLT5wY2NfYmxrLmJhc2U7Ci0J CWJyZWFrOwotCWNhc2UgRFBVX1NTUFBfTUVNQ09MT1I6Ci0JCSppZHggPSBzYmxrLT5tZW1jb2xv cl9ibGsuYmFzZTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSAtRUlOVkFMOwogCX0KQEAg LTQxMyw2NCArNDAzLDYgQEAgc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfcGVfY29uZmln KHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAogCQkJdG90X3JlcV9waXhlbHNbM10pOwogfQogCi1z dGF0aWMgdm9pZCBfZHB1X2h3X3NzcHBfc2V0dXBfc2NhbGVyKHN0cnVjdCBkcHVfaHdfcGlwZSAq Y3R4LAotCQlzdHJ1Y3QgZHB1X2h3X3BpcGVfY2ZnICpzc3BwLAotCQlzdHJ1Y3QgZHB1X2h3X3Bp eGVsX2V4dCAqcGUsCi0JCXZvaWQgKnNjYWxlcl9jZmcpCi17Ci0Jc3RydWN0IGRwdV9od19ibGtf cmVnX21hcCAqYzsKLQlpbnQgY29uZmlnX2ggPSAweDA7Ci0JaW50IGNvbmZpZ192ID0gMHgwOwot CXUzMiBpZHg7Ci0KLQkodm9pZClzc3BwOwotCSh2b2lkKXNjYWxlcl9jZmc7Ci0JaWYgKF9zc3Bw X3N1YmJsa19vZmZzZXQoY3R4LCBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQyLCAmaWR4KSB8fCAhcGUp Ci0JCXJldHVybjsKLQotCWMgPSAmY3R4LT5odzsKLQotCS8qIGVuYWJsZSBzY2FsZXIocykgaWYg dmFsaWQgZmlsdGVyIHNldCAqLwotCWlmIChwZS0+aG9yel9maWx0ZXJbRFBVX1NTUFBfQ09NUF8w XSA8IERQVV9TQ0FMRV9GSUxURVJfTUFYKQotCQljb25maWdfaCB8PSBwZS0+aG9yel9maWx0ZXJb RFBVX1NTUFBfQ09NUF8wXSA8PCA4OwotCWlmIChwZS0+aG9yel9maWx0ZXJbRFBVX1NTUFBfQ09N UF8xXzJdIDwgRFBVX1NDQUxFX0ZJTFRFUl9NQVgpCi0JCWNvbmZpZ19oIHw9IHBlLT5ob3J6X2Zp bHRlcltEUFVfU1NQUF9DT01QXzFfMl0gPDwgMTI7Ci0JaWYgKHBlLT5ob3J6X2ZpbHRlcltEUFVf U1NQUF9DT01QXzNdIDwgRFBVX1NDQUxFX0ZJTFRFUl9NQVgpCi0JCWNvbmZpZ19oIHw9IHBlLT5o b3J6X2ZpbHRlcltEUFVfU1NQUF9DT01QXzNdIDw8IDE2OwotCi0JaWYgKGNvbmZpZ19oKQotCQlj b25maWdfaCB8PSBCSVQoMCk7Ci0KLQlpZiAocGUtPnZlcnRfZmlsdGVyW0RQVV9TU1BQX0NPTVBf MF0gPCBEUFVfU0NBTEVfRklMVEVSX01BWCkKLQkJY29uZmlnX3YgfD0gcGUtPnZlcnRfZmlsdGVy W0RQVV9TU1BQX0NPTVBfMF0gPDwgMTA7Ci0JaWYgKHBlLT52ZXJ0X2ZpbHRlcltEUFVfU1NQUF9D T01QXzFfMl0gPCBEUFVfU0NBTEVfRklMVEVSX01BWCkKLQkJY29uZmlnX3YgfD0gcGUtPnZlcnRf ZmlsdGVyW0RQVV9TU1BQX0NPTVBfMV8yXSA8PCAxNDsKLQlpZiAocGUtPnZlcnRfZmlsdGVyW0RQ VV9TU1BQX0NPTVBfM10gPCBEUFVfU0NBTEVfRklMVEVSX01BWCkKLQkJY29uZmlnX3YgfD0gcGUt PnZlcnRfZmlsdGVyW0RQVV9TU1BQX0NPTVBfM10gPDwgMTg7Ci0KLQlpZiAoY29uZmlnX3YpCi0J CWNvbmZpZ192IHw9IEJJVCgxKTsKLQotCURQVV9SRUdfV1JJVEUoYywgU0NBTEVfQ09ORklHICsg aWR4LCAgY29uZmlnX2ggfCBjb25maWdfdik7Ci0JRFBVX1JFR19XUklURShjLCBDT01QMF8zX0lO SVRfUEhBU0VfWCArIGlkeCwKLQkJcGUtPmluaXRfcGhhc2VfeFtEUFVfU1NQUF9DT01QXzBdKTsK LQlEUFVfUkVHX1dSSVRFKGMsIENPTVAwXzNfSU5JVF9QSEFTRV9ZICsgaWR4LAotCQlwZS0+aW5p dF9waGFzZV95W0RQVV9TU1BQX0NPTVBfMF0pOwotCURQVV9SRUdfV1JJVEUoYywgQ09NUDBfM19Q SEFTRV9TVEVQX1ggKyBpZHgsCi0JCXBlLT5waGFzZV9zdGVwX3hbRFBVX1NTUFBfQ09NUF8wXSk7 Ci0JRFBVX1JFR19XUklURShjLCBDT01QMF8zX1BIQVNFX1NURVBfWSArIGlkeCwKLQkJcGUtPnBo YXNlX3N0ZXBfeVtEUFVfU1NQUF9DT01QXzBdKTsKLQotCURQVV9SRUdfV1JJVEUoYywgQ09NUDFf Ml9JTklUX1BIQVNFX1ggKyBpZHgsCi0JCXBlLT5pbml0X3BoYXNlX3hbRFBVX1NTUFBfQ09NUF8x XzJdKTsKLQlEUFVfUkVHX1dSSVRFKGMsIENPTVAxXzJfSU5JVF9QSEFTRV9ZICsgaWR4LAotCQlw ZS0+aW5pdF9waGFzZV95W0RQVV9TU1BQX0NPTVBfMV8yXSk7Ci0JRFBVX1JFR19XUklURShjLCBD T01QMV8yX1BIQVNFX1NURVBfWCArIGlkeCwKLQkJcGUtPnBoYXNlX3N0ZXBfeFtEUFVfU1NQUF9D T01QXzFfMl0pOwotCURQVV9SRUdfV1JJVEUoYywgQ09NUDFfMl9QSEFTRV9TVEVQX1kgKyBpZHgs Ci0JCXBlLT5waGFzZV9zdGVwX3lbRFBVX1NTUFBfQ09NUF8xXzJdKTsKLX0KLQogc3RhdGljIHZv aWQgX2RwdV9od19zc3BwX3NldHVwX3NjYWxlcjMoc3RydWN0IGRwdV9od19waXBlICpjdHgsCiAJ CXN0cnVjdCBkcHVfaHdfcGlwZV9jZmcgKnNzcHAsCiAJCXN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0 ICpwZSwKQEAgLTUwOSw3ICs0NDEsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1cF9y ZWN0cyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKIAlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFw ICpjOwogCXUzMiBzcmNfc2l6ZSwgc3JjX3h5LCBkc3Rfc2l6ZSwgZHN0X3h5LCB5c3RyaWRlMCwg eXN0cmlkZTE7CiAJdTMyIHNyY19zaXplX29mZiwgc3JjX3h5X29mZiwgb3V0X3NpemVfb2ZmLCBv dXRfeHlfb2ZmOwotCXUzMiBkZWNpbWF0aW9uID0gMDsKIAl1MzIgaWR4OwogCiAJaWYgKF9zc3Bw X3N1YmJsa19vZmZzZXQoY3R4LCBEUFVfU1NQUF9TUkMsICZpZHgpIHx8ICFjZmcpCkBAIC01NjAs MTMgKzQ5MSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9od19zc3BwX3NldHVwX3JlY3RzKHN0cnVjdCBk cHVfaHdfcGlwZSAqY3R4LAogCQl9CiAJfQogCi0JLyogcHJvZ3JhbSBzY2FsZXIsIHBoYXNlIHJl Z2lzdGVycywgaWYgcGlwZXMgc3VwcG9ydGluZyBzY2FsaW5nICovCi0JaWYgKGN0eC0+Y2FwLT5m ZWF0dXJlcyAmIERQVV9TU1BQX1NDQUxFUikgewotCQkvKiBwcm9ncmFtIGRlY2ltYXRpb24gKi8K LQkJZGVjaW1hdGlvbiA9ICgoMSA8PCBjZmctPmhvcnpfZGVjaW1hdGlvbikgLSAxKSA8PCA4Owot CQlkZWNpbWF0aW9uIHw9ICgoMSA8PCBjZmctPnZlcnRfZGVjaW1hdGlvbikgLSAxKTsKLQl9Ci0K IAkvKiByZWN0YW5nbGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcgKi8KIAlEUFVfUkVHX1dSSVRFKGMs IHNyY19zaXplX29mZiArIGlkeCwgc3JjX3NpemUpOwogCURQVV9SRUdfV1JJVEUoYywgc3JjX3h5 X29mZiArIGlkeCwgc3JjX3h5KTsKQEAgLTU3NSw1MiArNDk5LDYgQEAgc3RhdGljIHZvaWQgZHB1 X2h3X3NzcHBfc2V0dXBfcmVjdHMoc3RydWN0IGRwdV9od19waXBlICpjdHgsCiAKIAlEUFVfUkVH X1dSSVRFKGMsIFNTUFBfU1JDX1lTVFJJREUwICsgaWR4LCB5c3RyaWRlMCk7CiAJRFBVX1JFR19X UklURShjLCBTU1BQX1NSQ19ZU1RSSURFMSArIGlkeCwgeXN0cmlkZTEpOwotCURQVV9SRUdfV1JJ VEUoYywgU1NQUF9ERUNJTUFUSU9OX0NPTkZJRyArIGlkeCwgZGVjaW1hdGlvbik7Ci19Ci0KLS8q KgotICogX2RwdV9od19zc3BwX3NldHVwX2V4Y2xfcmVjdCgpIC0gc2V0IGV4Y2x1c2lvbiByZWN0 IGNvbmZpZ3MKLSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250ZXh0Ci0gKiBAZXhjbF9yZWN0 OiBFeGNsdXNpb24gcmVjdCBjb25maWdzCi0gKi8KLXN0YXRpYyB2b2lkIF9kcHVfaHdfc3NwcF9z ZXR1cF9leGNsX3JlY3Qoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCXN0cnVjdCBkcHVfcmVj dCAqZXhjbF9yZWN0LAotCQllbnVtIGRwdV9zc3BwX211bHRpcmVjdF9pbmRleCByZWN0X2luZGV4 KQotewotCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7Ci0JdTMyIHNpemUsIHh5OwotCXUz MiBpZHg7Ci0JdTMyIHJlZ194eSwgcmVnX3NpemU7Ci0JdTMyIGV4Y2xfY3RybCwgZW5hYmxlX2Jp dDsKLQotCWlmIChfc3NwcF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfU1JDLCAmaWR4KSB8 fCAhZXhjbF9yZWN0KQotCQlyZXR1cm47Ci0KLQlpZiAocmVjdF9pbmRleCA9PSBEUFVfU1NQUF9S RUNUXzAgfHwgcmVjdF9pbmRleCA9PSBEUFVfU1NQUF9SRUNUX1NPTE8pIHsKLQkJcmVnX3h5ID0g U1NQUF9FWENMX1JFQ19YWTsKLQkJcmVnX3NpemUgPSBTU1BQX0VYQ0xfUkVDX1NJWkU7Ci0JCWVu YWJsZV9iaXQgPSBCSVQoMCk7Ci0JfSBlbHNlIHsKLQkJcmVnX3h5ID0gU1NQUF9FWENMX1JFQ19Y WV9SRUMxOwotCQlyZWdfc2l6ZSA9IFNTUFBfRVhDTF9SRUNfU0laRV9SRUMxOwotCQllbmFibGVf Yml0ID0gQklUKDEpOwotCX0KLQotCWMgPSAmY3R4LT5odzsKLQotCXh5ID0gKGV4Y2xfcmVjdC0+ eSA8PCAxNikgfCAoZXhjbF9yZWN0LT54KTsKLQlzaXplID0gKGV4Y2xfcmVjdC0+aCA8PCAxNikg fCAoZXhjbF9yZWN0LT53KTsKLQotCWV4Y2xfY3RybCA9IERQVV9SRUdfUkVBRChjLCBTU1BQX0VY Q0xfUkVDX0NUTCArIGlkeCk7Ci0JaWYgKCFzaXplKSB7Ci0JCURQVV9SRUdfV1JJVEUoYywgU1NQ UF9FWENMX1JFQ19DVEwgKyBpZHgsCi0JCQkJZXhjbF9jdHJsICYgfmVuYWJsZV9iaXQpOwotCX0g ZWxzZSB7Ci0JCURQVV9SRUdfV1JJVEUoYywgU1NQUF9FWENMX1JFQ19DVEwgKyBpZHgsCi0JCQkJ ZXhjbF9jdHJsIHwgZW5hYmxlX2JpdCk7Ci0JCURQVV9SRUdfV1JJVEUoYywgcmVnX3NpemUgKyBp ZHgsIHNpemUpOwotCQlEUFVfUkVHX1dSSVRFKGMsIHJlZ194eSArIGlkeCwgeHkpOwotCX0KIH0K IAogc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfc291cmNlYWRkcmVzcyhzdHJ1Y3QgZHB1 X2h3X3BpcGUgKmN0eCwKQEAgLTY2NywyNCArNTQ1LDYgQEAgc3RhdGljIHZvaWQgZHB1X2h3X3Nz cHBfc2V0dXBfY3NjKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAogCWRwdV9od19jc2Nfc2V0dXAo JmN0eC0+aHcsIGlkeCwgZGF0YSwgY3NjMTApOwogfQogCi1zdGF0aWMgdm9pZCBkcHVfaHdfc3Nw cF9zZXR1cF9zaGFycGVuaW5nKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAotCQlzdHJ1Y3QgZHB1 X2h3X3NoYXJwX2NmZyAqY2ZnKQotewotCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmM7Ci0J dTMyIGlkeDsKLQotCWlmIChfc3NwcF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfU0NBTEVS X1FTRUVEMiwgJmlkeCkgfHwgIWNmZyB8fAotCQkJIXRlc3RfYml0KERQVV9TU1BQX1NDQUxFUl9R U0VFRDIsICZjdHgtPmNhcC0+ZmVhdHVyZXMpKQotCQlyZXR1cm47Ci0KLQljID0gJmN0eC0+aHc7 Ci0KLQlEUFVfUkVHX1dSSVRFKGMsIFZJR18wX1FTRUVEMl9TSEFSUCArIGlkeCwgY2ZnLT5zdHJl bmd0aCk7Ci0JRFBVX1JFR19XUklURShjLCBWSUdfMF9RU0VFRDJfU0hBUlAgKyBpZHggKyAweDQs IGNmZy0+ZWRnZV90aHIpOwotCURQVV9SRUdfV1JJVEUoYywgVklHXzBfUVNFRUQyX1NIQVJQICsg aWR4ICsgMHg4LCBjZmctPnNtb290aF90aHIpOwotCURQVV9SRUdfV1JJVEUoYywgVklHXzBfUVNF RUQyX1NIQVJQICsgaWR4ICsgMHhDLCBjZmctPm5vaXNlX3Rocik7Ci19Ci0KIHN0YXRpYyB2b2lk IGRwdV9od19zc3BwX3NldHVwX3NvbGlkZmlsbChzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdTMy IGNvbG9yLCBlbnVtCiAJCWRwdV9zc3BwX211bHRpcmVjdF9pbmRleCByZWN0X2luZGV4KQogewpA QCAtNzU0LDU2ICs2MTQsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1cF9xb3NfY3Ry bChzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKIAlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBTU1BQ X1FPU19DVFJMICsgaWR4LCBxb3NfY3RybCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRwdV9od19zc3Bw X3NldHVwX3RzX3ByZWZpbGwoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCXN0cnVjdCBkcHVf aHdfcGlwZV90c19jZmcgKmNmZywKLQkJZW51bSBkcHVfc3NwcF9tdWx0aXJlY3RfaW5kZXggaW5k ZXgpCi17Ci0JdTMyIGlkeDsKLQl1MzIgdHNfb2Zmc2V0LCB0c19wcmVmaWxsX29mZnNldDsKLQl1 MzIgdHNfY291bnQgPSAwLCB0c19ieXRlcyA9IDA7Ci0JY29uc3Qgc3RydWN0IGRwdV9zc3BwX2Nm ZyAqY2FwOwotCi0JaWYgKCFjdHggfHwgIWNmZyB8fCAhY3R4LT5jYXApCi0JCXJldHVybjsKLQot CWlmIChfc3NwcF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfU1JDLCAmaWR4KSkKLQkJcmV0 dXJuOwotCi0JY2FwID0gY3R4LT5jYXA7Ci0KLQlpZiAoaW5kZXggPT0gRFBVX1NTUFBfUkVDVF8w ICYmCi0JCQl0ZXN0X2JpdChEUFVfU1NQUF9UU19QUkVGSUxMLCAmY2FwLT5mZWF0dXJlcykpIHsK LQkJdHNfb2Zmc2V0ID0gU1NQUF9UUkFGRklDX1NIQVBFUjsKLQkJdHNfcHJlZmlsbF9vZmZzZXQg PSBTU1BQX1RSQUZGSUNfU0hBUEVSX1BSRUZJTEw7Ci0JfSBlbHNlIGlmIChpbmRleCA9PSBEUFVf U1NQUF9SRUNUXzEgJiYKLQkJCXRlc3RfYml0KERQVV9TU1BQX1RTX1BSRUZJTExfUkVDMSwgJmNh cC0+ZmVhdHVyZXMpKSB7Ci0JCXRzX29mZnNldCA9IFNTUFBfVFJBRkZJQ19TSEFQRVJfUkVDMTsK LQkJdHNfcHJlZmlsbF9vZmZzZXQgPSBTU1BQX1RSQUZGSUNfU0hBUEVSX1JFQzFfUFJFRklMTDsK LQl9IGVsc2UgewotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGNmZy0+dGltZSkgewotCQkvKiB0aGlz IGRvZXMgbXVsdF9mcmFjIGluIGEgNjQtYml0IHNhZmUgbWFubmVyICovCi0JCXU2NCByYXRlID0g VFNfQ0xLICogMTAwMDAwMFVMTDsKLQkJdTMyIHJlbTsKLQkJdTY0IHF1b3QgPSBkaXZfdTY0X3Jl bShyYXRlLCBjZmctPnRpbWUsICZyZW0pOwotCQl0c19ieXRlcyA9IChxdW90ICogY2ZnLT5zaXpl KSArCi0JCQkgICBkaXZfdTY0KHJlbSAqIGNmZy0+c2l6ZSwgY2ZnLT50aW1lKTsKLQotCQlpZiAo dHNfYnl0ZXMgPiBTU1BQX1RSQUZGSUNfU0hBUEVSX0JQQ19NQVgpCi0JCQl0c19ieXRlcyA9IFNT UFBfVFJBRkZJQ19TSEFQRVJfQlBDX01BWDsKLQl9Ci0KLQlpZiAodHNfYnl0ZXMpIHsKLQkJdHNf Y291bnQgPSBESVZfUk9VTkRfVVBfVUxMKGNmZy0+c2l6ZSwgdHNfYnl0ZXMpOwotCQl0c19ieXRl cyB8PSBCSVQoMzEpIHwgQklUKDI3KTsKLQl9Ci0KLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCB0 c19vZmZzZXQsIHRzX2J5dGVzKTsKLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCB0c19wcmVmaWxs X29mZnNldCwgdHNfY291bnQpOwotfQotCiBzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1cF9j ZHAoc3RydWN0IGRwdV9od19waXBlICpjdHgsCiAJCXN0cnVjdCBkcHVfaHdfcGlwZV9jZHBfY2Zn ICpjZmcpCiB7CkBAIC04MzksOSArNjQ5LDYgQEAgc3RhdGljIHZvaWQgX3NldHVwX2xheWVyX29w cyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmMsCiAJCWMtPm9wcy5zZXR1cF9wZSA9IGRwdV9od19zc3Bw X3NldHVwX3BlX2NvbmZpZzsKIAl9CiAKLQlpZiAodGVzdF9iaXQoRFBVX1NTUFBfRVhDTF9SRUNU LCAmZmVhdHVyZXMpKQotCQljLT5vcHMuc2V0dXBfZXhjbF9yZWN0ID0gX2RwdV9od19zc3BwX3Nl dHVwX2V4Y2xfcmVjdDsKLQogCWlmICh0ZXN0X2JpdChEUFVfU1NQUF9RT1MsICZmZWF0dXJlcykp IHsKIAkJYy0+b3BzLnNldHVwX2Rhbmdlcl9zYWZlX2x1dCA9CiAJCQlkcHVfaHdfc3NwcF9zZXR1 cF9kYW5nZXJfc2FmZV9sdXQ7CkBAIC04NDksMTggKzY1NiwxMCBAQCBzdGF0aWMgdm9pZCBfc2V0 dXBfbGF5ZXJfb3BzKHN0cnVjdCBkcHVfaHdfcGlwZSAqYywKIAkJYy0+b3BzLnNldHVwX3Fvc19j dHJsID0gZHB1X2h3X3NzcHBfc2V0dXBfcW9zX2N0cmw7CiAJfQogCi0JaWYgKHRlc3RfYml0KERQ VV9TU1BQX1RTX1BSRUZJTEwsICZmZWF0dXJlcykpCi0JCWMtPm9wcy5zZXR1cF90c19wcmVmaWxs ID0gZHB1X2h3X3NzcHBfc2V0dXBfdHNfcHJlZmlsbDsKLQogCWlmICh0ZXN0X2JpdChEUFVfU1NQ UF9DU0MsICZmZWF0dXJlcykgfHwKIAkJdGVzdF9iaXQoRFBVX1NTUFBfQ1NDXzEwQklULCAmZmVh dHVyZXMpKQogCQljLT5vcHMuc2V0dXBfY3NjID0gZHB1X2h3X3NzcHBfc2V0dXBfY3NjOwogCi0J aWYgKHRlc3RfYml0KERQVV9TU1BQX1NDQUxFUl9RU0VFRDIsICZmZWF0dXJlcykpIHsKLQkJYy0+ b3BzLnNldHVwX3NoYXJwZW5pbmcgPSBkcHVfaHdfc3NwcF9zZXR1cF9zaGFycGVuaW5nOwotCQlj LT5vcHMuc2V0dXBfc2NhbGVyID0gX2RwdV9od19zc3BwX3NldHVwX3NjYWxlcjsKLQl9Ci0KIAlp ZiAoZHB1X2h3X3NzcHBfbXVsdGlyZWN0X2VuYWJsZWQoYy0+Y2FwKSkKIAkJYy0+b3BzLnNldHVw X211bHRpcmVjdCA9IGRwdV9od19zc3BwX3NldHVwX211bHRpcmVjdDsKIApAQCAtODY5LDI0ICs2 NjgsNiBAQCBzdGF0aWMgdm9pZCBfc2V0dXBfbGF5ZXJfb3BzKHN0cnVjdCBkcHVfaHdfcGlwZSAq YywKIAkJYy0+b3BzLmdldF9zY2FsZXJfdmVyID0gX2RwdV9od19zc3BwX2dldF9zY2FsZXIzX3Zl cjsKIAl9CiAKLQlpZiAodGVzdF9iaXQoRFBVX1NTUFBfSFNJQywgJmZlYXR1cmVzKSkgewotCQkv KiBUT0RPOiBhZGQgdmVyc2lvbiBiYXNlZCBhc3NpZ25tZW50IGhlcmUgYXMgaW5saW5lIG9yIG1h Y3JvICovCi0JCWlmIChjLT5jYXAtPnNibGstPmhzaWNfYmxrLnZlcnNpb24gPT0KLQkJCShEUFVf Q09MT1JfUFJPQ0VTU19WRVIoMHgxLCAweDcpKSkgewotCQkJYy0+b3BzLnNldHVwX3BhX2h1ZSA9 IGRwdV9zZXR1cF9waXBlX3BhX2h1ZV92MV83OwotCQkJYy0+b3BzLnNldHVwX3BhX3NhdCA9IGRw dV9zZXR1cF9waXBlX3BhX3NhdF92MV83OwotCQkJYy0+b3BzLnNldHVwX3BhX3ZhbCA9IGRwdV9z ZXR1cF9waXBlX3BhX3ZhbF92MV83OwotCQkJYy0+b3BzLnNldHVwX3BhX2NvbnQgPSBkcHVfc2V0 dXBfcGlwZV9wYV9jb250X3YxXzc7Ci0JCX0KLQl9Ci0KLQlpZiAodGVzdF9iaXQoRFBVX1NTUFBf TUVNQ09MT1IsICZmZWF0dXJlcykpIHsKLQkJaWYgKGMtPmNhcC0+c2Jsay0+bWVtY29sb3JfYmxr LnZlcnNpb24gPT0KLQkJCShEUFVfQ09MT1JfUFJPQ0VTU19WRVIoMHgxLCAweDcpKSkKLQkJCWMt Pm9wcy5zZXR1cF9wYV9tZW1jb2xvciA9Ci0JCQkJZHB1X3NldHVwX3BpcGVfcGFfbWVtY29sX3Yx Xzc7Ci0JfQotCiAJaWYgKHRlc3RfYml0KERQVV9TU1BQX0NEUCwgJmZlYXR1cmVzKSkKIAkJYy0+ b3BzLnNldHVwX2NkcCA9IGRwdV9od19zc3BwX3NldHVwX2NkcDsKIH0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmggYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5oCmluZGV4IGEzMmVjYzYuLjBiYjVlY2IgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuaApAQCAtMTgsNyAr MTgsNiBAQAogI2luY2x1ZGUgImRwdV9od191dGlsLmgiCiAjaW5jbHVkZSAiZHB1X2h3X2Jsay5o IgogI2luY2x1ZGUgImRwdV9mb3JtYXRzLmgiCi0jaW5jbHVkZSAiZHB1X2NvbG9yX3Byb2Nlc3Np bmcuaCIKIAogc3RydWN0IGRwdV9od19waXBlOwogCkBAIC0xNjAsMTIgKzE1OSw2IEBAIHN0cnVj dCBkcHVfaHdfcGl4ZWxfZXh0IHsKICAqIEBzcmNfcmVjdDogIHNyYyBST0ksIGNhbGxlciB0YWtl cyBpbnRvIGFjY291bnQgdGhlIGRpZmZlcmVudCBvcGVyYXRpb25zCiAgKiAgICAgICAgICAgICBz dWNoIGFzIGRlY2ltYXRpb24sIGZsaXAgZXRjIHRvIHByb2dyYW0gdGhpcyBmaWVsZAogICogQGRl c3RfcmVjdDogZGVzdGluYXRpb24gUk9JLgotICogQCBob3J6X2RlY2ltYXRpb24gOiBob3Jpem9u dGFsIGRlY2ltYXRpb24gZmFjdG9yKCAwLCAyLCA0LCA4LCAxNikKLSAqIEAgdmVydF9kZWNpbWF0 aW9uIDogdmVydGljYWwgZGVjaW1hdGlvbiBmYWN0b3IoIDAsIDIsIDQsIDgsIDE2KQotICogICAg ICAgICAgICAgIDI6IFJlYWQgMSBsaW5lL3BpeGVsIGRyb3AgMSBsaW5lL3BpeGVsCi0gKiAgICAg ICAgICAgICAgNDogUmVhZCAxIGxpbmUvcGl4ZWwgZHJvcCAzICBsaW5lcy9waXhlbHMKLSAqICAg ICAgICAgICAgICA4OiBSZWFkIDEgbGluZS9waXhlbCBkcm9wIDcgbGluZXMvcGl4ZWxzCi0gKiAg ICAgICAgICAgICAgMTY6IFJlYWQgMSBsaW5lL3BpeGVsIGRyb3AgMTUgbGluZS9waXhlbHMKICAq IEBpbmRleDogICAgIGluZGV4IG9mIHRoZSByZWN0YW5nbGUgb2YgU1NQUAogICogQG1vZGU6ICAg ICAgcGFyYWxsZWwgb3IgdGltZSBtdWx0aXBsZXggbXVsdGlyZWN0IG1vZGUKICAqLwpAQCAtMTcz LDggKzE2Niw2IEBAIHN0cnVjdCBkcHVfaHdfcGlwZV9jZmcgewogCXN0cnVjdCBkcHVfaHdfZm10 X2xheW91dCBsYXlvdXQ7CiAJc3RydWN0IGRwdV9yZWN0IHNyY19yZWN0OwogCXN0cnVjdCBkcHVf cmVjdCBkc3RfcmVjdDsKLQl1OCBob3J6X2RlY2ltYXRpb247Ci0JdTggdmVydF9kZWNpbWF0aW9u OwogCWVudW0gZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4IGluZGV4OwogCWVudW0gZHB1X3NzcHBf bXVsdGlyZWN0X21vZGUgbW9kZTsKIH07CkBAIC0yNjksMTYgKzI2MCw2IEBAIHN0cnVjdCBkcHVf aHdfc3NwcF9vcHMgewogCQkJc3RydWN0IGRwdV9od19waXhlbF9leHQgKnBlX2V4dCk7CiAKIAkv KioKLQkgKiBzZXR1cF9leGNsX3JlY3QgLSBzZXR1cCBwaXBlIGV4Y2x1c2lvbiByZWN0YW5nbGUK LQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBleGNsX3JlY3Q6IFBvaW50 ZXIgdG8gZXhjbGNsdXNpb24gcmVjdCBzdHJ1Y3R1cmUKLQkgKiBAaW5kZXg6IHJlY3RhbmdsZSBp bmRleCBpbiBtdWx0aXJlY3QKLQkgKi8KLQl2b2lkICgqc2V0dXBfZXhjbF9yZWN0KShzdHJ1Y3Qg ZHB1X2h3X3BpcGUgKmN0eCwKLQkJCXN0cnVjdCBkcHVfcmVjdCAqZXhjbF9yZWN0LAotCQkJZW51 bSBkcHVfc3NwcF9tdWx0aXJlY3RfaW5kZXggaW5kZXgpOwotCi0JLyoqCiAJICogc2V0dXBfc291 cmNlYWRkcmVzcyAtIHNldHVwIHBpcGUgc291cmNlIGFkZHJlc3NlcwogCSAqIEBjdHg6IFBvaW50 ZXIgdG8gcGlwZSBjb250ZXh0CiAJICogQGNmZzogUG9pbnRlciB0byBwaXBlIGNvbmZpZyBzdHJ1 Y3R1cmUKQEAgLTMyNCw1MCArMzA1LDYgQEAgc3RydWN0IGRwdV9od19zc3BwX29wcyB7CiAJdm9p ZCAoKnNldHVwX3NoYXJwZW5pbmcpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAogCQkJc3RydWN0 IGRwdV9od19zaGFycF9jZmcgKmNmZyk7CiAKLQotCS8qKgotCSAqIHNldHVwX3BhX2h1ZSgpOiBT ZXR1cCBzb3VyY2UgaHVlIGFkanVzdG1lbnQKLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29u dGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8gaHVlIGRhdGEKLQkgKi8KLQl2b2lkICgqc2V0dXBf cGFfaHVlKShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAq IHNldHVwX3BhX3NhdCgpOiBTZXR1cCBzb3VyY2Ugc2F0dXJhdGlvbiBhZGp1c3RtZW50Ci0JICog QGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQKLQkgKiBAY2ZnOiBQb2ludGVyIHRvIHNhdHVy YXRpb24gZGF0YQotCSAqLwotCXZvaWQgKCpzZXR1cF9wYV9zYXQpKHN0cnVjdCBkcHVfaHdfcGlw ZSAqY3R4LCB2b2lkICpjZmcpOwotCi0JLyoqCi0JICogc2V0dXBfcGFfdmFsKCk6IFNldHVwIHNv dXJjZSB2YWx1ZSBhZGp1c3RtZW50Ci0JICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQK LQkgKiBAY2ZnOiBQb2ludGVyIHRvIHZhbHVlIGRhdGEKLQkgKi8KLQl2b2lkICgqc2V0dXBfcGFf dmFsKShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwgdm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHNl dHVwX3BhX2NvbnQoKTogU2V0dXAgc291cmNlIGNvbnRyYXN0IGFkanVzdG1lbnQKLQkgKiBAY3R4 OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgY29udHJhc3QgZGF0 YQotCSAqLwotCXZvaWQgKCpzZXR1cF9wYV9jb250KShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwg dm9pZCAqY2ZnKTsKLQotCS8qKgotCSAqIHNldHVwX3BhX21lbWNvbG9yIC0gc2V0dXAgc291cmNl IGNvbG9yIHByb2Nlc3NpbmcKLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAq IEB0eXBlOiBNZW1jb2xvciB0eXBlIChTa2luLCBza3kgb3IgZm9saWFnZSkKLQkgKiBAY2ZnOiBQ b2ludGVyIHRvIG1lbW9yeSBjb2xvciBjb25maWcgZGF0YQotCSAqLwotCXZvaWQgKCpzZXR1cF9w YV9tZW1jb2xvcikoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCQllbnVtIGRwdV9tZW1jb2xv cl90eXBlIHR5cGUsIHZvaWQgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXR1cF9pZ2MgLSBzZXR1cCBp bnZlcnNlIGdhbW1hIGNvcnJlY3Rpb24KLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4 dAotCSAqLwotCXZvaWQgKCpzZXR1cF9pZ2MpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4KTsKLQog CS8qKgogCSAqIHNldHVwX2Rhbmdlcl9zYWZlX2x1dCAtIHNldHVwIGRhbmdlciBzYWZlIExVVHMK IAkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dApAQCAtNDIyLDE2ICszNTksNiBAQCBz dHJ1Y3QgZHB1X2h3X3NzcHBfb3BzIHsKIAl1MzIgKCpnZXRfc2NhbGVyX3Zlcikoc3RydWN0IGRw dV9od19waXBlICpjdHgpOwogCiAJLyoqCi0JICogc2V0dXBfdHNfcHJlZmlsbCAtIHNldHVwIHBy ZWZpbGwgdHJhZmZpYyBzaGFwZXIKLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAot CSAqIEBjZmc6IFBvaW50ZXIgdG8gdHJhZmZpYyBzaGFwZXIgY29uZmlndXJhdGlvbgotCSAqIEBp bmRleDogcmVjdGFuZ2xlIGluZGV4IGluIG11bHRpcmVjdAotCSAqLwotCXZvaWQgKCpzZXR1cF90 c19wcmVmaWxsKShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKLQkJCXN0cnVjdCBkcHVfaHdfcGlw ZV90c19jZmcgKmNmZywKLQkJCWVudW0gZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4IGluZGV4KTsK LQotCS8qKgogCSAqIHNldHVwX2NkcCAtIHNldHVwIGNsaWVudCBkcml2ZW4gcHJlZmV0Y2gKIAkg KiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAogCSAqIEBjZmc6IFBvaW50ZXIgdG8gY2Rw IGNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od191dGlsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdXRp bC5jCmluZGV4IDAxOWE4ZmEuLjFiYTU3MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od191dGlsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X3V0aWwuYwpAQCAtMTEsNyArMTEsNiBAQAogICovCiAjZGVmaW5lIHByX2Zt dChmbXQpCSJbZHJtOiVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fCiAKLSNpbmNsdWRl IDx1YXBpL2RybS9kcHVfZHJtLmg+CiAjaW5jbHVkZSAibXNtX2Rydi5oIgogI2luY2x1ZGUgImRw dV9rbXMuaCIKICNpbmNsdWRlICJkcHVfaHdfbWRzcy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3V0aWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od191dGlsLmgKaW5kZXggZDkyY2FmYi4uNDJmMWIyMiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3V0aWwuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdXRpbC5oCkBAIC0xNTgsNiArMTU4LDE2 MiBAQCBzdHJ1Y3QgZHB1X2h3X3NjYWxlcjNfbHV0X2NmZyB7CiAJc2l6ZV90IHNlcF9sZW47CiB9 OwogCisvKioKKyAqIHN0cnVjdCBkcHVfZHJtX3BpeF9leHRfdjEgLSB2ZXJzaW9uIDEgb2YgcGl4 ZWwgZXh0IHN0cnVjdHVyZQorICogQG51bV9leHRfcHhsc19scjogTnVtYmVyIG9mIHRvdGFsIGhv cml6b250YWwgcGl4ZWxzCisgKiBAbnVtX2V4dF9weGxzX3RiOiBOdW1iZXIgb2YgdG90YWwgdmVy dGljYWwgbGluZXMKKyAqIEBsZWZ0X2Z0Y2g6ICAgICAgIE51bWJlciBvZiBleHRyYSBwaXhlbHMg dG8gb3ZlcmZldGNoIGZyb20gbGVmdAorICogQHJpZ2h0X2Z0Y2g6ICAgICAgTnVtYmVyIG9mIGV4 dHJhIHBpeGVscyB0byBvdmVyZmV0Y2ggZnJvbSByaWdodAorICogQHRvcF9mdGNoOiAgICAgICAg TnVtYmVyIG9mIGV4dHJhIGxpbmVzIHRvIG92ZXJmZXRjaCBmcm9tIHRvcAorICogQGJ0bV9mdGNo OiAgICAgICAgTnVtYmVyIG9mIGV4dHJhIGxpbmVzIHRvIG92ZXJmZXRjaCBmcm9tIGJvdHRvbQor ICogQGxlZnRfcnB0OiAgICAgICAgTnVtYmVyIG9mIGV4dHJhIHBpeGVscyB0byByZXBlYXQgZnJv bSBsZWZ0CisgKiBAcmlnaHRfcnB0OiAgICAgICBOdW1iZXIgb2YgZXh0cmEgcGl4ZWxzIHRvIHJl cGVhdCBmcm9tIHJpZ2h0CisgKiBAdG9wX3JwdDogICAgICAgICBOdW1iZXIgb2YgZXh0cmEgbGlu ZXMgdG8gcmVwZWF0IGZyb20gdG9wCisgKiBAYnRtX3JwdDogICAgICAgICBOdW1iZXIgb2YgZXh0 cmEgbGluZXMgdG8gcmVwZWF0IGZyb20gYm90dG9tCisgKi8KK3N0cnVjdCBkcHVfZHJtX3BpeF9l eHRfdjEgeworCS8qCisJICogTnVtYmVyIG9mIHBpeGVscyBleHQgaW4gbGVmdCwgcmlnaHQsIHRv cCBhbmQgYm90dG9tIGRpcmVjdGlvbgorCSAqIGZvciBhbGwgY29sb3IgY29tcG9uZW50cy4KKwkg Ki8KKwlpbnQzMl90IG51bV9leHRfcHhsc19scltEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCBu dW1fZXh0X3B4bHNfdGJbRFBVX01BWF9QTEFORVNdOworCisJLyoKKwkgKiBOdW1iZXIgb2YgcGl4 ZWxzIG5lZWRzIHRvIGJlIG92ZXJmZXRjaGVkIGluIGxlZnQsIHJpZ2h0LCB0b3AKKwkgKiBhbmQg Ym90dG9tIGRpcmVjdGlvbnMgZnJvbSBzb3VyY2UgaW1hZ2UgZm9yIHNjYWxpbmcuCisJICovCisJ aW50MzJfdCBsZWZ0X2Z0Y2hbRFBVX01BWF9QTEFORVNdOworCWludDMyX3QgcmlnaHRfZnRjaFtE UFVfTUFYX1BMQU5FU107CisJaW50MzJfdCB0b3BfZnRjaFtEUFVfTUFYX1BMQU5FU107CisJaW50 MzJfdCBidG1fZnRjaFtEUFVfTUFYX1BMQU5FU107CisJLyoKKwkgKiBOdW1iZXIgb2YgcGl4ZWxz IG5lZWRzIHRvIGJlIHJlcGVhdGVkIGluIGxlZnQsIHJpZ2h0LCB0b3AgYW5kCisJICogYm90dG9t IGRpcmVjdGlvbnMgZm9yIHNjYWxpbmcuCisJICovCisJaW50MzJfdCBsZWZ0X3JwdFtEUFVfTUFY X1BMQU5FU107CisJaW50MzJfdCByaWdodF9ycHRbRFBVX01BWF9QTEFORVNdOworCWludDMyX3Qg dG9wX3JwdFtEUFVfTUFYX1BMQU5FU107CisJaW50MzJfdCBidG1fcnB0W0RQVV9NQVhfUExBTkVT XTsKKworfTsKKworLyoqCisgKiBzdHJ1Y3QgZHB1X2RybV9kZV92MSAtIHZlcnNpb24gMSBvZiBk ZXRhaWwgZW5oYW5jZXIgc3RydWN0dXJlCisgKiBAZW5hYmxlOiAgICAgICAgIEVuYWJsZXMvZGlz YWJsZXMgZGV0YWlsIGVuaGFuY2VyCisgKiBAc2hhcnBlbl9sZXZlbDE6IFNoYXJwZW5pbmcgc3Ry ZW5ndGggZm9yIG5vaXNlCisgKiBAc2hhcnBlbl9sZXZlbDI6IFNoYXJwZW5pbmcgc3RyZW5ndGgg Zm9yIGNvbnRleHQKKyAqIEBjbGlwOiAgICAgICAgICAgQ2xpcCBjb2VmZmljaWVudAorICogQGxp bWl0OiAgICAgICAgICBEZXRhaWwgZW5oYW5jZXIgbGltaXQgZmFjdG9yCisgKiBAdGhyX3F1aWV0 OiAgICAgIFF1aXRlIHpvbmUgdGhyZXNob2xkCisgKiBAdGhyX2RpZW91dDogICAgIERpZS1vdXQg em9uZSB0aHJlc2hvbGQKKyAqIEB0aHJfbG93OiAgICAgICAgTGluZWFyIHpvbmUgbGVmdCB0aHJl c2hvbGQKKyAqIEB0aHJfaGlnaDogICAgICAgTGluZWFyIHpvbmUgcmlnaHQgdGhyZXNob2xkCisg KiBAcHJlY19zaGlmdDogICAgIERldGFpbCBlbmhhbmNlciBwcmVjaXNpb24KKyAqIEBhZGp1c3Rf YTogICAgICAgTWFwcGluZyBjdXJ2ZXMgQSBjb2VmZmljaWVudHMKKyAqIEBhZGp1c3RfYjogICAg ICAgTWFwcGluZyBjdXJ2ZXMgQiBjb2VmZmljaWVudHMKKyAqIEBhZGp1c3RfYzogICAgICAgTWFw cGluZyBjdXJ2ZXMgQyBjb2VmZmljaWVudHMKKyAqLworc3RydWN0IGRwdV9kcm1fZGVfdjEgewor CXVpbnQzMl90IGVuYWJsZTsKKwlpbnQxNl90IHNoYXJwZW5fbGV2ZWwxOworCWludDE2X3Qgc2hh cnBlbl9sZXZlbDI7CisJdWludDE2X3QgY2xpcDsKKwl1aW50MTZfdCBsaW1pdDsKKwl1aW50MTZf dCB0aHJfcXVpZXQ7CisJdWludDE2X3QgdGhyX2RpZW91dDsKKwl1aW50MTZfdCB0aHJfbG93Owor CXVpbnQxNl90IHRocl9oaWdoOworCXVpbnQxNl90IHByZWNfc2hpZnQ7CisJaW50MTZfdCBhZGp1 c3RfYVtEUFVfTUFYX0RFX0NVUlZFU107CisJaW50MTZfdCBhZGp1c3RfYltEUFVfTUFYX0RFX0NV UlZFU107CisJaW50MTZfdCBhZGp1c3RfY1tEUFVfTUFYX0RFX0NVUlZFU107Cit9OworCisvKioK KyAqIHN0cnVjdCBkcHVfZHJtX3NjYWxlcl92MiAtIHZlcnNpb24gMiBvZiBzdHJ1Y3QgZHB1X2Ry bV9zY2FsZXIKKyAqIEBlbmFibGU6ICAgICAgICAgICAgU2NhbGVyIGVuYWJsZQorICogQGRpcl9l bjogICAgICAgICAgICBEZXRhaWwgZW5oYW5jZXIgZW5hYmxlCisgKiBAcGU6ICAgICAgICAgICAg ICAgIFBpeGVsIGV4dGVuc2lvbiBzZXR0aW5ncworICogQGhvcnpfZGVjaW1hdGU6ICAgICBIb3Jp em9udGFsIGRlY2ltYXRpb24gZmFjdG9yCisgKiBAdmVydF9kZWNpbWF0ZTogICAgIFZlcnRpY2Fs IGRlY2ltYXRpb24gZmFjdG9yCisgKiBAaW5pdF9waGFzZV94OiAgICAgIEluaXRpYWwgc2NhbGVy IHBoYXNlIHZhbHVlcyBmb3IgeAorICogQHBoYXNlX3N0ZXBfeDogICAgICBQaGFzZSBzdGVwIHZh bHVlcyBmb3IgeAorICogQGluaXRfcGhhc2VfeTogICAgICBJbml0aWFsIHNjYWxlciBwaGFzZSB2 YWx1ZXMgZm9yIHkKKyAqIEBwaGFzZV9zdGVwX3k6ICAgICAgUGhhc2Ugc3RlcCB2YWx1ZXMgZm9y IHkKKyAqIEBwcmVsb2FkX3g6ICAgICAgICAgSG9yaXpvbnRhbCBwcmVsb2FkIHZhbHVlCisgKiBA cHJlbG9hZF95OiAgICAgICAgIFZlcnRpY2FsIHByZWxvYWQgdmFsdWUKKyAqIEBzcmNfd2lkdGg6 ICAgICAgICAgU291cmNlIHdpZHRoCisgKiBAc3JjX2hlaWdodDogICAgICAgIFNvdXJjZSBoZWln aHQKKyAqIEBkc3Rfd2lkdGg6ICAgICAgICAgRGVzdGluYXRpb24gd2lkdGgKKyAqIEBkc3RfaGVp Z2h0OiAgICAgICAgRGVzdGluYXRpb24gaGVpZ2h0CisgKiBAeV9yZ2JfZmlsdGVyX2NmZzogIFkv UkdCIHBsYW5lIGZpbHRlciBjb25maWd1cmF0aW9uCisgKiBAdXZfZmlsdGVyX2NmZzogICAgIFVW IHBsYW5lIGZpbHRlciBjb25maWd1cmF0aW9uCisgKiBAYWxwaGFfZmlsdGVyX2NmZzogIEFscGhh IGZpbHRlciBjb25maWd1cmF0aW9uCisgKiBAYmxlbmRfY2ZnOiAgICAgICAgIFNlbGVjdGlvbiBv ZiBibGVuZCBjb2VmZmljaWVudHMKKyAqIEBsdXRfZmxhZzogICAgICAgICAgTFVUIGNvbmZpZ3Vy YXRpb24gZmxhZ3MKKyAqIEBkaXJfbHV0X2lkeDogICAgICAgMmQgNHg0IExVVCBpbmRleAorICog QHlfcmdiX2Npcl9sdXRfaWR4OiBZL1JHQiBjaXJjdWxhciBMVVQgaW5kZXgKKyAqIEB1dl9jaXJf bHV0X2lkeDogICAgVVYgY2lyY3VsYXIgTFVUIGluZGV4CisgKiBAeV9yZ2Jfc2VwX2x1dF9pZHg6 IFkvUkdCIHNlcGFyYWJsZSBMVVQgaW5kZXgKKyAqIEB1dl9zZXBfbHV0X2lkeDogICAgVVYgc2Vw YXJhYmxlIExVVCBpbmRleAorICogQGRlOiAgICAgICAgICAgICAgICBEZXRhaWwgZW5oYW5jZXIg c2V0dGluZ3MKKyAqLworc3RydWN0IGRwdV9kcm1fc2NhbGVyX3YyIHsKKwkvKgorCSAqIEdlbmVy YWwgZGVmaW5pdGlvbnMKKwkgKi8KKwl1aW50MzJfdCBlbmFibGU7CisJdWludDMyX3QgZGlyX2Vu OworCisJLyoKKwkgKiBQaXggZXh0IHNldHRpbmdzCisJICovCisJc3RydWN0IGRwdV9kcm1fcGl4 X2V4dF92MSBwZTsKKworCS8qCisJICogRGVjaW1hdGlvbiBzZXR0aW5ncworCSAqLworCXVpbnQz Ml90IGhvcnpfZGVjaW1hdGU7CisJdWludDMyX3QgdmVydF9kZWNpbWF0ZTsKKworCS8qCisJICog UGhhc2Ugc2V0dGluZ3MKKwkgKi8KKwlpbnQzMl90IGluaXRfcGhhc2VfeFtEUFVfTUFYX1BMQU5F U107CisJaW50MzJfdCBwaGFzZV9zdGVwX3hbRFBVX01BWF9QTEFORVNdOworCWludDMyX3QgaW5p dF9waGFzZV95W0RQVV9NQVhfUExBTkVTXTsKKwlpbnQzMl90IHBoYXNlX3N0ZXBfeVtEUFVfTUFY X1BMQU5FU107CisKKwl1aW50MzJfdCBwcmVsb2FkX3hbRFBVX01BWF9QTEFORVNdOworCXVpbnQz Ml90IHByZWxvYWRfeVtEUFVfTUFYX1BMQU5FU107CisJdWludDMyX3Qgc3JjX3dpZHRoW0RQVV9N QVhfUExBTkVTXTsKKwl1aW50MzJfdCBzcmNfaGVpZ2h0W0RQVV9NQVhfUExBTkVTXTsKKworCXVp bnQzMl90IGRzdF93aWR0aDsKKwl1aW50MzJfdCBkc3RfaGVpZ2h0OworCisJdWludDMyX3QgeV9y Z2JfZmlsdGVyX2NmZzsKKwl1aW50MzJfdCB1dl9maWx0ZXJfY2ZnOworCXVpbnQzMl90IGFscGhh X2ZpbHRlcl9jZmc7CisJdWludDMyX3QgYmxlbmRfY2ZnOworCisJdWludDMyX3QgbHV0X2ZsYWc7 CisJdWludDMyX3QgZGlyX2x1dF9pZHg7CisKKwkvKiBmb3IgWShSR0IpIGFuZCBVViBwbGFuZXMq LworCXVpbnQzMl90IHlfcmdiX2Npcl9sdXRfaWR4OworCXVpbnQzMl90IHV2X2Npcl9sdXRfaWR4 OworCXVpbnQzMl90IHlfcmdiX3NlcF9sdXRfaWR4OworCXVpbnQzMl90IHV2X3NlcF9sdXRfaWR4 OworCisJLyoKKwkgKiBEZXRhaWwgZW5oYW5jZXIgc2V0dGluZ3MKKwkgKi8KKwlzdHJ1Y3QgZHB1 X2RybV9kZV92MSBkZTsKK307CisKKwogdTMyICpkcHVfaHdfdXRpbF9nZXRfbG9nX21hc2tfcHRy KHZvaWQpOwogCiB2b2lkIGRwdV9yZWdfd3JpdGUoc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAq YywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwppbmRleCAwNmFkYjM4Li5l NDNlMWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21z LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCkBAIC0zNSw3 ICszNSw2IEBACiAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKICNpbmNsdWRlICJkcHVfcGxhbmUu aCIKICNpbmNsdWRlICJkcHVfY3J0Yy5oIgotI2luY2x1ZGUgImRwdV9yZWdfZG1hLmgiCiAKICNk ZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgImRwdV90cmFjZS5oIgpAQCAtMTEw Nyw4ICsxMTA2LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9rbXNfaHdfZGVzdHJveShzdHJ1Y3QgZHB1 X2ttcyAqZHB1X2ttcywKIAlpZiAoZHB1X2ttcy0+bW1pbykKIAkJbXNtX2lvdW5tYXAocGRldiwg ZHB1X2ttcy0+bW1pbyk7CiAJZHB1X2ttcy0+bW1pbyA9IE5VTEw7Ci0KLQlkcHVfcmVnX2RtYV9k ZWluaXQoKTsKIH0KIAogaW50IGRwdV9rbXNfbW11X2RldGFjaChzdHJ1Y3QgZHB1X2ttcyAqZHB1 X2ttcywgYm9vbCBzZWN1cmVfb25seSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X3BsYW5lLmMKaW5kZXggYmE1MjMwZC4uYjAzMzY1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X3BsYW5lLmMKQEAgLTIwLDkgKzIwLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4 L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Ci0jaW5jbHVkZSA8dWFwaS9k cm0vZHB1X2RybS5oPgotI2luY2x1ZGUgPHVhcGkvZHJtL21zbV9kcm1fcHAuaD4KLQogI2luY2x1 ZGUgIm1zbV9wcm9wLmgiCiAjaW5jbHVkZSAibXNtX2Rydi5oIgogCkBAIC0zNCw3ICszMSw2IEBA CiAjaW5jbHVkZSAiZHB1X2NydGMuaCIKICNpbmNsdWRlICJkcHVfdmJpZi5oIgogI2luY2x1ZGUg ImRwdV9wbGFuZS5oIgotI2luY2x1ZGUgImRwdV9jb2xvcl9wcm9jZXNzaW5nLmgiCiAKIHN0YXRp YyBib29sIHN1c3BlbmRfYmxhbmsgPSB0cnVlOwogbW9kdWxlX3BhcmFtKHN1c3BlbmRfYmxhbmss IGJvb2wsIDA0MDApOwpAQCAtOTMsOCArODksNiBAQCBlbnVtIGRwdV9wbGFuZV9xb3MgewogLyoK ICAqIHN0cnVjdCBkcHVfcGxhbmUgLSBsb2NhbCBkcHUgcGxhbmUgc3RydWN0dXJlCiAgKiBAYXNw YWNlOiBhZGRyZXNzIHNwYWNlIHBvaW50ZXIKLSAqIEBjc2NfY2ZnOiBEZWNvZGVkIHVzZXIgY29u ZmlndXJhdGlvbiBmb3IgY3NjCi0gKiBAY3NjX3Vzcl9wdHI6IFBvaW50cyB0byBjc2NfY2ZnIGlm IHZhbGlkIHVzZXIgY29uZmlnIGF2YWlsYWJsZQogICogQGNzY19wdHI6IFBvaW50cyB0byBkcHVf Y3NjX2NmZyBzdHJ1Y3R1cmUgdG8gdXNlIGZvciBjdXJyZW50CiAgKiBAbXBsYW5lX2xpc3Q6IExp c3Qgb2YgbXVsdGlyZWN0IHBsYW5lcyBvZiB0aGUgc2FtZSBwaXBlCiAgKiBAY2F0YWxvZzogUG9p bnRzIHRvIGRwdSBjYXRhbG9nIHN0cnVjdHVyZQpAQCAtMTEyLDcgKzEwNiw2IEBAIHN0cnVjdCBk cHVfcGxhbmUgewogCiAJc3RydWN0IGRwdV9od19waXBlICpwaXBlX2h3OwogCXN0cnVjdCBkcHVf aHdfcGlwZV9jZmcgcGlwZV9jZmc7Ci0Jc3RydWN0IGRwdV9od19zaGFycF9jZmcgc2hhcnBfY2Zn OwogCXN0cnVjdCBkcHVfaHdfcGlwZV9xb3NfY2ZnIHBpcGVfcW9zX2NmZzsKIAl1aW50MzJfdCBj b2xvcl9maWxsOwogCWJvb2wgaXNfZXJyb3I7CkBAIC0xMjAsMTYgKzExMywxMSBAQCBzdHJ1Y3Qg ZHB1X3BsYW5lIHsKIAlib29sIGlzX3ZpcnR1YWw7CiAJc3RydWN0IGxpc3RfaGVhZCBtcGxhbmVf bGlzdDsKIAlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nOwotCWJvb2wgcmV2YWxpZGF0ZTsK IAotCXN0cnVjdCBkcHVfY3NjX2NmZyBjc2NfY2ZnOwotCXN0cnVjdCBkcHVfY3NjX2NmZyAqY3Nj X3Vzcl9wdHI7CiAJc3RydWN0IGRwdV9jc2NfY2ZnICpjc2NfcHRyOwogCiAJY29uc3Qgc3RydWN0 IGRwdV9zc3BwX3N1Yl9ibGtzICpwaXBlX3NibGs7Ci0KIAljaGFyIHBpcGVfbmFtZVtEUFVfTkFN RV9TSVpFXTsKLQogCXN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyBwcm9wZXJ0eV9pbmZvOwogCXN0 cnVjdCBtc21fcHJvcGVydHlfZGF0YSBwcm9wZXJ0eV9kYXRhW1BMQU5FX1BST1BfQ09VTlRdOwog CXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9pbmZvOwpAQCAtNDQyLDE3ICs0MzAsNiBA QCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldF9xb3NfY3RybChzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKIAkJCSZwZHB1LT5waXBlX3Fvc19jZmcpOwogfQogCi12b2lkIGRwdV9wbGFuZV9zZXRf cmV2YWxpZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgYm9vbCBlbmFibGUpCi17Ci0Jc3Ry dWN0IGRwdV9wbGFuZSAqcGRwdTsKLQotCWlmICghcGxhbmUpCi0JCXJldHVybjsKLQotCXBkcHUg PSB0b19kcHVfcGxhbmUocGxhbmUpOwotCXBkcHUtPnJldmFsaWRhdGUgPSBlbmFibGU7Ci19Ci0K IGludCBkcHVfcGxhbmVfZGFuZ2VyX3NpZ25hbF9jdHJsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LCBib29sIGVuYWJsZSkKIHsKIAlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1OwpAQCAtNTc4LDU1ICs1 NTUsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldF9xb3NfcmVtYXAoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpCiB9CiAKIC8qKgotICogX2RwdV9wbGFuZV9zZXRfdHNfcHJlZmlsbCAtIHNl dCBwcmVmaWxsIHdpdGggdHJhZmZpYyBzaGFwZXIKLSAqIEBwbGFuZToJUG9pbnRlciB0byBkcm0g cGxhbmUKLSAqIEBwc3RhdGU6CVBvaW50ZXIgdG8gZHB1IHBsYW5lIHN0YXRlCi0gKi8KLXN0YXRp YyB2b2lkIF9kcHVfcGxhbmVfc2V0X3RzX3ByZWZpbGwoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs Ci0JCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X3BsYW5l ICpwZHB1OwotCXN0cnVjdCBkcHVfaHdfcGlwZV90c19jZmcgY2ZnOwotCXN0cnVjdCBtc21fZHJt X3ByaXZhdGUgKnByaXY7Ci0Jc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7Ci0KLQlpZiAoIXBsYW5l IHx8ICFwbGFuZS0+ZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudHMiKTsKLQkJ cmV0dXJuOwotCX0KLQotCXByaXYgPSBwbGFuZS0+ZGV2LT5kZXZfcHJpdmF0ZTsKLQlpZiAoIXBy aXYgfHwgIXByaXYtPmttcykgewotCQlEUFVfRVJST1IoImludmFsaWQgS01TIHJlZmVyZW5jZVxu Iik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcHVfa21zID0gdG9fZHB1X2ttcyhwcml2LT5rbXMpOwot CXBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOwotCWlmICghcGRwdS0+cGlwZV9odykgewotCQlE UFVfRVJST1IoImludmFsaWQgcGlwZSByZWZlcmVuY2VcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0J aWYgKCFwZHB1LT5waXBlX2h3IHx8ICFwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfdHNfcHJlZmls bCkKLQkJcmV0dXJuOwotCi0JX2RwdV9wbGFuZV9zZXRfcW9zX2N0cmwocGxhbmUsIGZhbHNlLCBE UFVfUExBTkVfUU9TX1ZCTEFOS19BTU9SVElaRSk7Ci0KLQltZW1zZXQoJmNmZywgMCwgc2l6ZW9m KGNmZykpOwotCWNmZy5zaXplID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsCi0JCQlQ TEFORV9QUk9QX1BSRUZJTExfU0laRSk7Ci0JY2ZnLnRpbWUgPSBkcHVfcGxhbmVfZ2V0X3Byb3Bl cnR5KHBzdGF0ZSwKLQkJCVBMQU5FX1BST1BfUFJFRklMTF9USU1FKTsKLQotCURQVV9ERUJVRygi cGxhbmUlZCBzaXplOiVsbHUgdGltZTolbGx1XG4iLAotCQkJcGxhbmUtPmJhc2UuaWQsIGNmZy5z aXplLCBjZmcudGltZSk7Ci0JRFBVX0VWVDMyX1ZFUkJPU0UoRFJNSUQocGxhbmUpLCBjZmcuc2l6 ZSwgY2ZnLnRpbWUpOwotCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF90c19wcmVmaWxsKHBkcHUt PnBpcGVfaHcsICZjZmcsCi0JCQlwc3RhdGUtPm11bHRpcmVjdF9pbmRleCk7Ci19Ci0KLS8qKgog ICogX2RwdV9wbGFuZV9nZXRfYXNwYWNlOiBnZXRzIHRoZSBhZGRyZXNzIHNwYWNlCiAgKi8KIHN0 YXRpYyBpbnQgX2RwdV9wbGFuZV9nZXRfYXNwYWNlKApAQCAtNzAzLDM2ICs2MzEsNiBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgX2RwdV9wbGFuZV9zZXRfc2Nhbm91dChzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX2RwdV9wbGFuZV9zZXR1cF9zY2FsZXIzX2x1dChz dHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAotCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUp Ci17Ci0Jc3RydWN0IGRwdV9od19zY2FsZXIzX2NmZyAqY2ZnOwotCWludCByZXQgPSAwOwotCi0J aWYgKCFwZHB1IHx8ICFwc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3NcbiIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljZmcgPSAmcHN0YXRlLT5zY2FsZXIzX2NmZzsKLQot CWNmZy0+ZGlyX2x1dCA9IG1zbV9wcm9wZXJ0eV9nZXRfYmxvYigKLQkJCSZwZHB1LT5wcm9wZXJ0 eV9pbmZvLAotCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUsICZjZmctPmRpcl9sZW4sCi0JCQlQ TEFORV9QUk9QX1NDQUxFUl9MVVRfRUQpOwotCWNmZy0+Y2lyX2x1dCA9IG1zbV9wcm9wZXJ0eV9n ZXRfYmxvYigKLQkJCSZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJJnBzdGF0ZS0+cHJvcGVydHlf c3RhdGUsICZjZmctPmNpcl9sZW4sCi0JCQlQTEFORV9QUk9QX1NDQUxFUl9MVVRfQ0lSKTsKLQlj ZmctPnNlcF9sdXQgPSBtc21fcHJvcGVydHlfZ2V0X2Jsb2IoCi0JCQkmcGRwdS0+cHJvcGVydHlf aW5mbywKLQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLCAmY2ZnLT5zZXBfbGVuLAotCQkJUExB TkVfUFJPUF9TQ0FMRVJfTFVUX1NFUCk7Ci0JaWYgKCFjZmctPmRpcl9sdXQgfHwgIWNmZy0+Y2ly X2x1dCB8fCAhY2ZnLT5zZXBfbHV0KQotCQlyZXQgPSAtRU5PREFUQTsKLQlyZXR1cm4gcmV0Owot fQotCiBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldHVwX3NjYWxlcjMoc3RydWN0IGRwdV9wbGFu ZSAqcGRwdSwKIAkJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlLAogCQl1aW50MzJfdCBz cmNfdywgdWludDMyX3Qgc3JjX2gsIHVpbnQzMl90IGRzdF93LCB1aW50MzJfdCBkc3RfaCwKQEAg LTc0MCw3ICs2MzgsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldHVwX3NjYWxlcjMoc3Ry dWN0IGRwdV9wbGFuZSAqcGRwdSwKIAkJY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCwKIAkJ dWludDMyX3QgY2hyb21hX3N1YnNtcGxfaCwgdWludDMyX3QgY2hyb21hX3N1YnNtcGxfdikKIHsK LQl1aW50MzJfdCBkZWNpbWF0ZWQsIGk7CisJdWludDMyX3QgaTsKIAogCWlmICghcGRwdSB8fCAh cHN0YXRlIHx8ICFzY2FsZV9jZmcgfHwgIWZtdCB8fCAhY2hyb21hX3N1YnNtcGxfaCB8fAogCQkJ IWNocm9tYV9zdWJzbXBsX3YpIHsKQEAgLTc1NCwxNCArNjUyLDEwIEBAIHN0YXRpYyB2b2lkIF9k cHVfcGxhbmVfc2V0dXBfc2NhbGVyMyhzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAogCW1lbXNldChz Y2FsZV9jZmcsIDAsIHNpemVvZigqc2NhbGVfY2ZnKSk7CiAJbWVtc2V0KCZwc3RhdGUtPnBpeGVs X2V4dCwgMCwgc2l6ZW9mKHN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0KSk7CiAKLQlkZWNpbWF0ZWQg PSBERUNJTUFURURfRElNRU5TSU9OKHNyY193LAotCQkJcGRwdS0+cGlwZV9jZmcuaG9yel9kZWNp bWF0aW9uKTsKIAlzY2FsZV9jZmctPnBoYXNlX3N0ZXBfeFtEUFVfU1NQUF9DT01QXzBdID0KLQkJ bXVsdF9mcmFjKCgxIDw8IFBIQVNFX1NURVBfU0hJRlQpLCBkZWNpbWF0ZWQsIGRzdF93KTsKLQlk ZWNpbWF0ZWQgPSBERUNJTUFURURfRElNRU5TSU9OKHNyY19oLAotCQkJcGRwdS0+cGlwZV9jZmcu dmVydF9kZWNpbWF0aW9uKTsKKwkJbXVsdF9mcmFjKCgxIDw8IFBIQVNFX1NURVBfU0hJRlQpLCBz cmNfdywgZHN0X3cpOwogCXNjYWxlX2NmZy0+cGhhc2Vfc3RlcF95W0RQVV9TU1BQX0NPTVBfMF0g PQotCQltdWx0X2ZyYWMoKDEgPDwgUEhBU0VfU1RFUF9TSElGVCksIGRlY2ltYXRlZCwgZHN0X2gp OworCQltdWx0X2ZyYWMoKDEgPDwgUEhBU0VfU1RFUF9TSElGVCksIHNyY19oLCBkc3RfaCk7CiAK IAogCXNjYWxlX2NmZy0+cGhhc2Vfc3RlcF95W0RQVV9TU1BQX0NPTVBfMV8yXSA9CkBAIC03ODAs MTAgKzY3NCw4IEBAIHN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfc2V0dXBfc2NhbGVyMyhzdHJ1Y3Qg ZHB1X3BsYW5lICpwZHB1LAogCQlzY2FsZV9jZmctPnBoYXNlX3N0ZXBfeVtEUFVfU1NQUF9DT01Q XzBdOwogCiAJZm9yIChpID0gMDsgaSA8IERQVV9NQVhfUExBTkVTOyBpKyspIHsKLQkJc2NhbGVf Y2ZnLT5zcmNfd2lkdGhbaV0gPSBERUNJTUFURURfRElNRU5TSU9OKHNyY193LAotCQkJCXBkcHUt PnBpcGVfY2ZnLmhvcnpfZGVjaW1hdGlvbik7Ci0JCXNjYWxlX2NmZy0+c3JjX2hlaWdodFtpXSA9 IERFQ0lNQVRFRF9ESU1FTlNJT04oc3JjX2gsCi0JCQkJcGRwdS0+cGlwZV9jZmcudmVydF9kZWNp bWF0aW9uKTsKKwkJc2NhbGVfY2ZnLT5zcmNfd2lkdGhbaV0gPSBzcmNfdzsKKwkJc2NhbGVfY2Zn LT5zcmNfaGVpZ2h0W2ldID0gc3JjX2g7CiAJCWlmIChpID09IERQVV9TU1BQX0NPTVBfMV8yIHx8 IGkgPT0gRFBVX1NTUFBfQ09NUF8yKSB7CiAJCQlzY2FsZV9jZmctPnNyY193aWR0aFtpXSAvPSBj aHJvbWFfc3Vic21wbF9oOwogCQkJc2NhbGVfY2ZnLT5zcmNfaGVpZ2h0W2ldIC89IGNocm9tYV9z dWJzbXBsX3Y7CkBAIC04MDksMTU0ICs3MDEsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3Nl dHVwX3NjYWxlcjMoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIAlzY2FsZV9jZmctPmVuYWJsZSA9 IDE7CiB9CiAKLS8qKgotICogX2RwdV9wbGFuZV9zZXR1cF9zY2FsZXIyIC0gZGV0ZXJtaW5lIGRl ZmF1bHQgc2NhbGVyIHBoYXNlIHN0ZXBzL2ZpbHRlciB0eXBlCi0gKiBAcGRwdTogUG9pbnRlciB0 byBEUFUgcGxhbmUgb2JqZWN0Ci0gKiBAc3JjOiBTb3VyY2Ugc2l6ZQotICogQGRzdDogRGVzdGlu YXRpb24gc2l6ZQotICogQHBoYXNlX3N0ZXBzOiBQb2ludGVyIHRvIG91dHB1dCBhcnJheSBmb3Ig cGhhc2Ugc3RlcHMKLSAqIEBmaWx0ZXI6IFBvaW50ZXIgdG8gb3V0cHV0IGFycmF5IGZvciBmaWx0 ZXIgdHlwZQotICogQGZtdDogUG9pbnRlciB0byBmb3JtYXQgZGVmaW5pdGlvbgotICogQGNocm9t YV9zdWJzYW1wbGluZzogU3Vic2FtcGxpbmcgYW1vdW50IGZvciBjaHJvbWEgY2hhbm5lbAotICoK LSAqIFJldHVybnM6IDAgb24gc3VjY2VzcwotICovCi1zdGF0aWMgaW50IF9kcHVfcGxhbmVfc2V0 dXBfc2NhbGVyMihzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAotCQl1aW50MzJfdCBzcmMsIHVpbnQz Ml90IGRzdCwgdWludDMyX3QgKnBoYXNlX3N0ZXBzLAotCQllbnVtIGRwdV9od19maWx0ZXIgKmZp bHRlciwgY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdCwKLQkJdWludDMyX3QgY2hyb21hX3N1 YnNhbXBsaW5nKQotewotCWlmICghcGRwdSB8fCAhcGhhc2Vfc3RlcHMgfHwgIWZpbHRlciB8fCAh Zm10KSB7Ci0JCURQVV9FUlJPUigKLQkJCSJpbnZhbGlkIGFyZyhzKSwgcGxhbmUgJWQgcGhhc2Ug JWQgZmlsdGVyICVkIGZtdCAlZFxuIiwKLQkJCXBkcHUgIT0gMCwgcGhhc2Vfc3RlcHMgIT0gMCwg ZmlsdGVyICE9IDAsIGZtdCAhPSAwKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogY2Fs Y3VsYXRlIHBoYXNlIHN0ZXBzLCBsZWF2ZSBpbml0IHBoYXNlIGFzIHplcm8gKi8KLQlwaGFzZV9z dGVwc1tEUFVfU1NQUF9DT01QXzBdID0KLQkJbXVsdF9mcmFjKDEgPDwgUEhBU0VfU1RFUF9TSElG VCwgc3JjLCBkc3QpOwotCXBoYXNlX3N0ZXBzW0RQVV9TU1BQX0NPTVBfMV8yXSA9Ci0JCXBoYXNl X3N0ZXBzW0RQVV9TU1BQX0NPTVBfMF0gLyBjaHJvbWFfc3Vic2FtcGxpbmc7Ci0JcGhhc2Vfc3Rl cHNbRFBVX1NTUFBfQ09NUF8yXSA9IHBoYXNlX3N0ZXBzW0RQVV9TU1BQX0NPTVBfMV8yXTsKLQlw aGFzZV9zdGVwc1tEUFVfU1NQUF9DT01QXzNdID0gcGhhc2Vfc3RlcHNbRFBVX1NTUFBfQ09NUF8w XTsKLQotCS8qIGNhbGN1bGF0ZSBzY2FsZXIgY29uZmlnLCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAo RFBVX0ZPUk1BVF9JU19ZVVYoZm10KSB8fCBzcmMgIT0gZHN0KSB7Ci0JCWZpbHRlcltEUFVfU1NQ UF9DT01QXzNdID0KLQkJCShzcmMgPD0gZHN0KSA/IERQVV9TQ0FMRV9GSUxURVJfQklMIDoKLQkJ CURQVV9TQ0FMRV9GSUxURVJfUENNTjsKLQotCQlpZiAoRFBVX0ZPUk1BVF9JU19ZVVYoZm10KSkg ewotCQkJZmlsdGVyW0RQVV9TU1BQX0NPTVBfMF0gPSBEUFVfU0NBTEVfRklMVEVSX0NBOwotCQkJ ZmlsdGVyW0RQVV9TU1BQX0NPTVBfMV8yXSA9IGZpbHRlcltEUFVfU1NQUF9DT01QXzNdOwotCQl9 IGVsc2UgewotCQkJZmlsdGVyW0RQVV9TU1BQX0NPTVBfMF0gPSBmaWx0ZXJbRFBVX1NTUFBfQ09N UF8zXTsKLQkJCWZpbHRlcltEUFVfU1NQUF9DT01QXzFfMl0gPQotCQkJCURQVV9TQ0FMRV9GSUxU RVJfTkVBUkVTVDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGRpc2FibGUgc2NhbGVyICovCi0JCWZp bHRlcltEUFVfU1NQUF9DT01QXzBdID0gRFBVX1NDQUxFX0ZJTFRFUl9NQVg7Ci0JCWZpbHRlcltE UFVfU1NQUF9DT01QXzFfMl0gPSBEUFVfU0NBTEVfRklMVEVSX01BWDsKLQkJZmlsdGVyW0RQVV9T U1BQX0NPTVBfM10gPSBEUFVfU0NBTEVfRklMVEVSX01BWDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0K LS8qKgotICogX2RwdV9wbGFuZV9zZXR1cF9waXhlbF9leHQgLSBkZXRlcm1pbmUgZGVmYXVsdCBw aXhlbCBleHRlbnNpb24gdmFsdWVzCi0gKiBAcGRwdTogUG9pbnRlciB0byBEUFUgcGxhbmUgb2Jq ZWN0Ci0gKiBAc3JjOiBTb3VyY2Ugc2l6ZQotICogQGRzdDogRGVzdGluYXRpb24gc2l6ZQotICog QGRlY2ltYXRlZF9zcmM6IFNvdXJjZSBzaXplIGFmdGVyIGRlY2ltYXRpb24sIGlmIGFueQotICog QHBoYXNlX3N0ZXBzOiBQb2ludGVyIHRvIG91dHB1dCBhcnJheSBmb3IgcGhhc2Ugc3RlcHMKLSAq IEBvdXRfc3JjOiBPdXRwdXQgYXJyYXkgZm9yIHBpeGVsIGV4dGVuc2lvbiB2YWx1ZXMKLSAqIEBv dXRfZWRnZTE6IE91dHB1dCBhcnJheSBmb3IgcGl4ZWwgZXh0ZW5zaW9uIGZpcnN0IGVkZ2UKLSAq IEBvdXRfZWRnZTI6IE91dHB1dCBhcnJheSBmb3IgcGl4ZWwgZXh0ZW5zaW9uIHNlY29uZCBlZGdl Ci0gKiBAZmlsdGVyOiBQb2ludGVyIHRvIGFycmF5IGZvciBmaWx0ZXIgdHlwZQotICogQGZtdDog UG9pbnRlciB0byBmb3JtYXQgZGVmaW5pdGlvbgotICogQGNocm9tYV9zdWJzYW1wbGluZzogU3Vi c2FtcGxpbmcgYW1vdW50IGZvciBjaHJvbWEgY2hhbm5lbAotICogQHBvc3RfY29tcGFyZTogV2hl dGhlciB0byBjaHJvbWEgc3Vic2FtcGxlZCBzb3VyY2Ugc2l6ZSBmb3IgY29tcGFyaXNpb25zCi0g Ki8KLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfc2V0dXBfcGl4ZWxfZXh0KHN0cnVjdCBkcHVfcGxh bmUgKnBkcHUsCi0JCXVpbnQzMl90IHNyYywgdWludDMyX3QgZHN0LCB1aW50MzJfdCBkZWNpbWF0 ZWRfc3JjLAotCQl1aW50MzJfdCAqcGhhc2Vfc3RlcHMsIHVpbnQzMl90ICpvdXRfc3JjLCBpbnQg Km91dF9lZGdlMSwKLQkJaW50ICpvdXRfZWRnZTIsIGVudW0gZHB1X2h3X2ZpbHRlciAqZmlsdGVy LAotCQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm10LCB1aW50MzJfdCBjaHJvbWFfc3Vic2Ft cGxpbmcsCi0JCWJvb2wgcG9zdF9jb21wYXJlKQotewotCWludDY0X3QgZWRnZTEsIGVkZ2UyLCBj YWY7Ci0JdWludDMyX3Qgc3JjX3dvcms7Ci0JaW50IGksIHRtcDsKLQotCWlmIChwZHB1ICYmIHBo YXNlX3N0ZXBzICYmIG91dF9zcmMgJiYgb3V0X2VkZ2UxICYmCi0JCQlvdXRfZWRnZTIgJiYgZmls dGVyICYmIGZtdCkgewotCQkvKiBoYW5kbGUgQ0FGIGZvciBZVVYgZm9ybWF0cyAqLwotCQlpZiAo RFBVX0ZPUk1BVF9JU19ZVVYoZm10KSAmJiAqZmlsdGVyID09IERQVV9TQ0FMRV9GSUxURVJfQ0Ep Ci0JCQljYWYgPSBQSEFTRV9TVEVQX1VOSVRfU0NBTEU7Ci0JCWVsc2UKLQkJCWNhZiA9IDA7Ci0K LQkJZm9yIChpID0gMDsgaSA8IERQVV9NQVhfUExBTkVTOyBpKyspIHsKLQkJCXNyY193b3JrID0g ZGVjaW1hdGVkX3NyYzsKLQkJCWlmIChpID09IERQVV9TU1BQX0NPTVBfMV8yIHx8IGkgPT0gRFBV X1NTUFBfQ09NUF8yKQotCQkJCXNyY193b3JrIC89IGNocm9tYV9zdWJzYW1wbGluZzsKLQkJCWlm IChwb3N0X2NvbXBhcmUpCi0JCQkJc3JjID0gc3JjX3dvcms7Ci0JCQlpZiAoIURQVV9GT1JNQVRf SVNfWVVWKGZtdCkgJiYgKHNyYyA9PSBkc3QpKSB7Ci0JCQkJLyogdW5pdHkgKi8KLQkJCQllZGdl MSA9IDA7Ci0JCQkJZWRnZTIgPSAwOwotCQkJfSBlbHNlIGlmIChkc3QgPj0gc3JjKSB7Ci0JCQkJ LyogdXBzY2FsZSAqLwotCQkJCWVkZ2UxID0gKDEgPDwgUEhBU0VfUkVTSURVQUwpOwotCQkJCWVk Z2UxIC09IGNhZjsKLQkJCQllZGdlMiA9ICgxIDw8IFBIQVNFX1JFU0lEVUFMKTsKLQkJCQllZGdl MiArPSAoZHN0IC0gMSkgKiAqKHBoYXNlX3N0ZXBzICsgaSk7Ci0JCQkJZWRnZTIgLT0gKHNyY193 b3JrIC0gMSkgKiBQSEFTRV9TVEVQX1VOSVRfU0NBTEU7Ci0JCQkJZWRnZTIgKz0gY2FmOwotCQkJ CWVkZ2UyID0gLShlZGdlMik7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGRvd25zY2FsZSAqLwotCQkJ CWVkZ2UxID0gMDsKLQkJCQllZGdlMiA9IChkc3QgLSAxKSAqICoocGhhc2Vfc3RlcHMgKyBpKTsK LQkJCQllZGdlMiAtPSAoc3JjX3dvcmsgLSAxKSAqIFBIQVNFX1NURVBfVU5JVF9TQ0FMRTsKLQkJ CQllZGdlMiArPSAqKHBoYXNlX3N0ZXBzICsgaSk7Ci0JCQkJZWRnZTIgPSAtKGVkZ2UyKTsKLQkJ CX0KLQotCQkJLyogb25seSBlbmFibGUgQ0FGIGZvciBsdW1hIHBsYW5lICovCi0JCQljYWYgPSAw OwotCi0JCQkvKiBwb3B1bGF0ZSBvdXRwdXQgYXJyYXlzICovCi0JCQkqKG91dF9zcmMgKyBpKSA9 IHNyY193b3JrOwotCi0JCQkvKiBlZGdlIHVwZGF0ZXMgdGFrZW4gZnJvbSBfX3B4bF9leHRuX2hl bHBlciAqLwotCQkJaWYgKGVkZ2UxID49IDApIHsKLQkJCQl0bXAgPSAodWludDMyX3QpZWRnZTE7 Ci0JCQkJdG1wID4+PSBQSEFTRV9TVEVQX1NISUZUOwotCQkJCSoob3V0X2VkZ2UxICsgaSkgPSAt dG1wOwotCQkJfSBlbHNlIHsKLQkJCQl0bXAgPSAodWludDMyX3QpKC1lZGdlMSk7Ci0JCQkJKihv dXRfZWRnZTEgKyBpKSA9Ci0JCQkJCSh0bXAgKyBQSEFTRV9TVEVQX1VOSVRfU0NBTEUgLSAxKSA+ PgotCQkJCQlQSEFTRV9TVEVQX1NISUZUOwotCQkJfQotCQkJaWYgKGVkZ2UyID49IDApIHsKLQkJ CQl0bXAgPSAodWludDMyX3QpZWRnZTI7Ci0JCQkJdG1wID4+PSBQSEFTRV9TVEVQX1NISUZUOwot CQkJCSoob3V0X2VkZ2UyICsgaSkgPSAtdG1wOwotCQkJfSBlbHNlIHsKLQkJCQl0bXAgPSAodWlu dDMyX3QpKC1lZGdlMik7Ci0JCQkJKihvdXRfZWRnZTIgKyBpKSA9Ci0JCQkJCSh0bXAgKyBQSEFT RV9TVEVQX1VOSVRfU0NBTEUgLSAxKSA+PgotCQkJCQlQSEFTRV9TVEVQX1NISUZUOwotCQkJfQot CQl9Ci0JfQotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgX2RwdV9wbGFuZV9zZXR1cF9jc2Moc3Ry dWN0IGRwdV9wbGFuZSAqcGRwdSkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9jc2NfY2Zn IGRwdV9jc2NfWVVWMlJHQl82MDFMID0gewpAQCAtOTkzLDEwICs3MzcsNyBAQCBzdGF0aWMgaW5s aW5lIHZvaWQgX2RwdV9wbGFuZV9zZXR1cF9jc2Moc3RydWN0IGRwdV9wbGFuZSAqcGRwdSkKIAkJ cmV0dXJuOwogCX0KIAotCS8qIHJldmVydCB0byBrZXJuZWwgZGVmYXVsdCBpZiBvdmVycmlkZSBu b3QgYXZhaWxhYmxlICovCi0JaWYgKHBkcHUtPmNzY191c3JfcHRyKQotCQlwZHB1LT5jc2NfcHRy ID0gcGRwdS0+Y3NjX3Vzcl9wdHI7Ci0JZWxzZSBpZiAoQklUKERQVV9TU1BQX0NTQ18xMEJJVCkg JiBwZHB1LT5mZWF0dXJlcykKKwlpZiAoQklUKERQVV9TU1BQX0NTQ18xMEJJVCkgJiBwZHB1LT5m ZWF0dXJlcykKIAkJcGRwdS0+Y3NjX3B0ciA9IChzdHJ1Y3QgZHB1X2NzY19jZmcgKikmZHB1X2Nz YzEwX1lVVjJSR0JfNjAxTDsKIAllbHNlCiAJCXBkcHUtPmNzY19wdHIgPSAoc3RydWN0IGRwdV9j c2NfY2ZnICopJmRwdV9jc2NfWVVWMlJHQl82MDFMOwpAQCAtMTAwNyw2MCArNzQ4LDYgQEAgc3Rh dGljIGlubGluZSB2b2lkIF9kcHVfcGxhbmVfc2V0dXBfY3NjKHN0cnVjdCBkcHVfcGxhbmUgKnBk cHUpCiAJCQlwZHB1LT5jc2NfcHRyLT5jc2NfbXZbMl0pOwogfQogCi1zdGF0aWMgdm9pZCBkcHVf Y29sb3JfcHJvY2Vzc19wbGFuZV9zZXR1cChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKLXsKLQlz dHJ1Y3QgZHB1X3BsYW5lICpwZHB1OwotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsK LQl1aW50MzJfdCBodWUsIHNhdHVyYXRpb24sIHZhbHVlLCBjb250cmFzdDsKLQlzdHJ1Y3QgZHJt X21zbV9tZW1jb2wgKm1lbWNvbCA9IE5VTEw7Ci0Jc2l6ZV90IG1lbWNvbF9zeiA9IDA7Ci0KLQlw ZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKLQlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUo cGxhbmUtPnN0YXRlKTsKLQotCWh1ZSA9ICh1aW50MzJfdCkgZHB1X3BsYW5lX2dldF9wcm9wZXJ0 eShwc3RhdGUsIFBMQU5FX1BST1BfSFVFX0FESlVTVCk7Ci0JaWYgKHBkcHUtPnBpcGVfaHctPm9w cy5zZXR1cF9wYV9odWUpCi0JCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9wYV9odWUocGRwdS0+ cGlwZV9odywgJmh1ZSk7Ci0Jc2F0dXJhdGlvbiA9ICh1aW50MzJfdCkgZHB1X3BsYW5lX2dldF9w cm9wZXJ0eShwc3RhdGUsCi0JCVBMQU5FX1BST1BfU0FUVVJBVElPTl9BREpVU1QpOwotCWlmIChw ZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcGFfc2F0KQotCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0 dXBfcGFfc2F0KHBkcHUtPnBpcGVfaHcsICZzYXR1cmF0aW9uKTsKLQl2YWx1ZSA9ICh1aW50MzJf dCkgZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsCi0JCVBMQU5FX1BST1BfVkFMVUVfQURK VVNUKTsKLQlpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BhX3ZhbCkKLQkJcGRwdS0+cGlw ZV9ody0+b3BzLnNldHVwX3BhX3ZhbChwZHB1LT5waXBlX2h3LCAmdmFsdWUpOwotCWNvbnRyYXN0 ID0gKHVpbnQzMl90KSBkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwKLQkJUExBTkVfUFJP UF9DT05UUkFTVF9BREpVU1QpOwotCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcGFfY29u dCkKLQkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BhX2NvbnQocGRwdS0+cGlwZV9odywgJmNv bnRyYXN0KTsKLQotCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfcGFfbWVtY29sb3IpIHsK LQkJLyogU2tpbiBtZW1vcnkgY29sb3Igc2V0dXAgKi8KLQkJbWVtY29sID0gbXNtX3Byb3BlcnR5 X2dldF9ibG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkmcHN0YXRlLT5wcm9wZXJ0eV9z dGF0ZSwKLQkJCQkJJm1lbWNvbF9zeiwKLQkJCQkJUExBTkVfUFJPUF9TS0lOX0NPTE9SKTsKLQkJ cGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BhX21lbWNvbG9yKHBkcHUtPnBpcGVfaHcsCi0JCQkJ CU1FTUNPTE9SX1NLSU4sIG1lbWNvbCk7Ci0KLQkJLyogU2t5IG1lbW9yeSBjb2xvciBzZXR1cCAq LwotCQltZW1jb2wgPSBtc21fcHJvcGVydHlfZ2V0X2Jsb2IoJnBkcHUtPnByb3BlcnR5X2luZm8s Ci0JCQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLAotCQkJCQkmbWVtY29sX3N6LAotCQkJCQlQ TEFORV9QUk9QX1NLWV9DT0xPUik7Ci0JCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9wYV9tZW1j b2xvcihwZHB1LT5waXBlX2h3LAotCQkJCQlNRU1DT0xPUl9TS1ksIG1lbWNvbCk7Ci0KLQkJLyog Rm9saWFnZSBtZW1vcnkgY29sb3Igc2V0dXAgKi8KLQkJbWVtY29sID0gbXNtX3Byb3BlcnR5X2dl dF9ibG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0 ZSwKLQkJCQkJJm1lbWNvbF9zeiwKLQkJCQkJUExBTkVfUFJPUF9GT0xJQUdFX0NPTE9SKTsKLQkJ cGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BhX21lbWNvbG9yKHBkcHUtPnBpcGVfaHcsCi0JCQkJ CU1FTUNPTE9SX0ZPTElBR0UsIG1lbWNvbCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBfZHB1X3Bs YW5lX3NldHVwX3NjYWxlcihzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAogCQlzdHJ1Y3QgZHB1X3Bs YW5lX3N0YXRlICpwc3RhdGUsCiAJCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmbXQsIGJvb2wg Y29sb3JfZmlsbCkKQEAgLTEwNzYsOTkgKzc2MywyMCBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5l X3NldHVwX3NjYWxlcihzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAogCiAJcGUgPSAmcHN0YXRlLT5w aXhlbF9leHQ7CiAKLQlwZHB1LT5waXBlX2NmZy5ob3J6X2RlY2ltYXRpb24gPQotCQlkcHVfcGxh bmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwgUExBTkVfUFJPUF9IX0RFQ0lNQVRFKTsKLQlwZHB1LT5w aXBlX2NmZy52ZXJ0X2RlY2ltYXRpb24gPQotCQlkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0 ZSwgUExBTkVfUFJPUF9WX0RFQ0lNQVRFKTsKLQogCS8qIGRvbid0IGNocm9tYSBzdWJzYW1wbGUg aWYgZGVjaW1hdGluZyAqLwotCWNocm9tYV9zdWJzbXBsX2ggPSBwZHB1LT5waXBlX2NmZy5ob3J6 X2RlY2ltYXRpb24gPyAxIDoKKwljaHJvbWFfc3Vic21wbF9oID0KIAkJZHJtX2Zvcm1hdF9ob3J6 X2Nocm9tYV9zdWJzYW1wbGluZyhmbXQtPmJhc2UucGl4ZWxfZm9ybWF0KTsKLQljaHJvbWFfc3Vi c21wbF92ID0gcGRwdS0+cGlwZV9jZmcudmVydF9kZWNpbWF0aW9uID8gMSA6CisJY2hyb21hX3N1 YnNtcGxfdiA9CiAJCWRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcoZm10LT5iYXNl LnBpeGVsX2Zvcm1hdCk7CiAKLQkvKiB1cGRhdGUgc2NhbGVyICovCi0JaWYgKHBkcHUtPmZlYXR1 cmVzICYgQklUKERQVV9TU1BQX1NDQUxFUl9RU0VFRDMpKSB7Ci0JCWludCByYzsKLQotCQlpZiAo IWNvbG9yX2ZpbGwgJiYgIXBkcHUtPmRlYnVnZnNfZGVmYXVsdF9zY2FsZSkKLQkJCXJjID0gX2Rw dV9wbGFuZV9zZXR1cF9zY2FsZXIzX2x1dChwZHB1LCBwc3RhdGUpOwotCQllbHNlCi0JCQlyYyA9 IC1FSU5WQUw7Ci0JCWlmIChyYyB8fCBwc3RhdGUtPnNjYWxlcl9jaGVja19zdGF0ZSAhPQotCQkJ RFBVX1BMQU5FX1NDTENIRUNLX1NDQUxFUl9WMikgewotCQkJLyogY2FsY3VsYXRlIGRlZmF1bHQg Y29uZmlnIGZvciBRU0VFRDMgKi8KLQkJCV9kcHVfcGxhbmVfc2V0dXBfc2NhbGVyMyhwZHB1LCBw c3RhdGUsCi0JCQkJCXBkcHUtPnBpcGVfY2ZnLnNyY19yZWN0LncsCi0JCQkJCXBkcHUtPnBpcGVf Y2ZnLnNyY19yZWN0LmgsCi0JCQkJCXBkcHUtPnBpcGVfY2ZnLmRzdF9yZWN0LncsCi0JCQkJCXBk cHUtPnBpcGVfY2ZnLmRzdF9yZWN0LmgsCi0JCQkJCSZwc3RhdGUtPnNjYWxlcjNfY2ZnLCBmbXQs Ci0JCQkJCWNocm9tYV9zdWJzbXBsX2gsIGNocm9tYV9zdWJzbXBsX3YpOwotCQl9Ci0JfSBlbHNl IGlmIChwc3RhdGUtPnNjYWxlcl9jaGVja19zdGF0ZSAhPSBEUFVfUExBTkVfU0NMQ0hFQ0tfU0NB TEVSX1YxIHx8Ci0JCQljb2xvcl9maWxsIHx8IHBkcHUtPmRlYnVnZnNfZGVmYXVsdF9zY2FsZSkg ewotCQl1aW50MzJfdCBkZWNpX2RpbSwgaTsKLQotCQkvKiBjYWxjdWxhdGUgZGVmYXVsdCBjb25m aWd1cmF0aW9uIGZvciBRU0VFRDIgKi8KLQkJbWVtc2V0KHBlLCAwLCBzaXplb2Yoc3RydWN0IGRw dV9od19waXhlbF9leHQpKTsKLQotCQlEUFVfREVCVUdfUExBTkUocGRwdSwgImRlZmF1bHQgY29u ZmlnXG4iKTsKLQkJZGVjaV9kaW0gPSBERUNJTUFURURfRElNRU5TSU9OKHBkcHUtPnBpcGVfY2Zn LnNyY19yZWN0LncsCi0JCQkJcGRwdS0+cGlwZV9jZmcuaG9yel9kZWNpbWF0aW9uKTsKLQkJX2Rw dV9wbGFuZV9zZXR1cF9zY2FsZXIyKHBkcHUsCi0JCQkJZGVjaV9kaW0sCi0JCQkJcGRwdS0+cGlw ZV9jZmcuZHN0X3JlY3QudywKLQkJCQlwZS0+cGhhc2Vfc3RlcF94LAotCQkJCXBlLT5ob3J6X2Zp bHRlciwgZm10LCBjaHJvbWFfc3Vic21wbF9oKTsKLQotCQlpZiAoRFBVX0ZPUk1BVF9JU19ZVVYo Zm10KSkKLQkJCWRlY2lfZGltICY9IH4weDE7Ci0JCV9kcHVfcGxhbmVfc2V0dXBfcGl4ZWxfZXh0 KHBkcHUsIHBkcHUtPnBpcGVfY2ZnLnNyY19yZWN0LncsCi0JCQkJcGRwdS0+cGlwZV9jZmcuZHN0 X3JlY3QudywgZGVjaV9kaW0sCi0JCQkJcGUtPnBoYXNlX3N0ZXBfeCwKLQkJCQlwZS0+cm9pX3cs Ci0JCQkJcGUtPm51bV9leHRfcHhsc19sZWZ0LAotCQkJCXBlLT5udW1fZXh0X3B4bHNfcmlnaHQs IHBlLT5ob3J6X2ZpbHRlciwgZm10LAotCQkJCWNocm9tYV9zdWJzbXBsX2gsIDApOwotCi0JCWRl Y2lfZGltID0gREVDSU1BVEVEX0RJTUVOU0lPTihwZHB1LT5waXBlX2NmZy5zcmNfcmVjdC5oLAot CQkJCXBkcHUtPnBpcGVfY2ZnLnZlcnRfZGVjaW1hdGlvbik7Ci0JCV9kcHVfcGxhbmVfc2V0dXBf c2NhbGVyMihwZHB1LAotCQkJCWRlY2lfZGltLAotCQkJCXBkcHUtPnBpcGVfY2ZnLmRzdF9yZWN0 LmgsCi0JCQkJcGUtPnBoYXNlX3N0ZXBfeSwKLQkJCQlwZS0+dmVydF9maWx0ZXIsIGZtdCwgY2hy b21hX3N1YnNtcGxfdik7Ci0JCV9kcHVfcGxhbmVfc2V0dXBfcGl4ZWxfZXh0KHBkcHUsIHBkcHUt PnBpcGVfY2ZnLnNyY19yZWN0LmgsCi0JCQkJcGRwdS0+cGlwZV9jZmcuZHN0X3JlY3QuaCwgZGVj aV9kaW0sCi0JCQkJcGUtPnBoYXNlX3N0ZXBfeSwKLQkJCQlwZS0+cm9pX2gsCi0JCQkJcGUtPm51 bV9leHRfcHhsc190b3AsCi0JCQkJcGUtPm51bV9leHRfcHhsc19idG0sIHBlLT52ZXJ0X2ZpbHRl ciwgZm10LAotCQkJCWNocm9tYV9zdWJzbXBsX3YsIDEpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBE UFVfTUFYX1BMQU5FUzsgaSsrKSB7Ci0JCQlpZiAocGUtPm51bV9leHRfcHhsc19sZWZ0W2ldID49 IDApCi0JCQkJcGUtPmxlZnRfcnB0W2ldID0gcGUtPm51bV9leHRfcHhsc19sZWZ0W2ldOwotCQkJ ZWxzZQotCQkJCXBlLT5sZWZ0X2Z0Y2hbaV0gPSBwZS0+bnVtX2V4dF9weGxzX2xlZnRbaV07Ci0K LQkJCWlmIChwZS0+bnVtX2V4dF9weGxzX3JpZ2h0W2ldID49IDApCi0JCQkJcGUtPnJpZ2h0X3Jw dFtpXSA9IHBlLT5udW1fZXh0X3B4bHNfcmlnaHRbaV07Ci0JCQllbHNlCi0JCQkJcGUtPnJpZ2h0 X2Z0Y2hbaV0gPSBwZS0+bnVtX2V4dF9weGxzX3JpZ2h0W2ldOwotCi0JCQlpZiAocGUtPm51bV9l eHRfcHhsc190b3BbaV0gPj0gMCkKLQkJCQlwZS0+dG9wX3JwdFtpXSA9IHBlLT5udW1fZXh0X3B4 bHNfdG9wW2ldOwotCQkJZWxzZQotCQkJCXBlLT50b3BfZnRjaFtpXSA9IHBlLT5udW1fZXh0X3B4 bHNfdG9wW2ldOwotCi0JCQlpZiAocGUtPm51bV9leHRfcHhsc19idG1baV0gPj0gMCkKLQkJCQlw ZS0+YnRtX3JwdFtpXSA9IHBlLT5udW1fZXh0X3B4bHNfYnRtW2ldOwotCQkJZWxzZQotCQkJCXBl LT5idG1fZnRjaFtpXSA9IHBlLT5udW1fZXh0X3B4bHNfYnRtW2ldOwotCQl9Ci0JfQorCS8qIHVw ZGF0ZSBzY2FsZXIuIGNhbGN1bGF0ZSBkZWZhdWx0IGNvbmZpZyBmb3IgUVNFRUQzICovCisJX2Rw dV9wbGFuZV9zZXR1cF9zY2FsZXIzKHBkcHUsIHBzdGF0ZSwKKwkJCXBkcHUtPnBpcGVfY2ZnLnNy Y19yZWN0LncsCisJCQlwZHB1LT5waXBlX2NmZy5zcmNfcmVjdC5oLAorCQkJcGRwdS0+cGlwZV9j ZmcuZHN0X3JlY3QudywKKwkJCXBkcHUtPnBpcGVfY2ZnLmRzdF9yZWN0LmgsCisJCQkmcHN0YXRl LT5zY2FsZXIzX2NmZywgZm10LAorCQkJY2hyb21hX3N1YnNtcGxfaCwgY2hyb21hX3N1YnNtcGxf dik7CiB9CiAKIC8qKgpAQCAtMTQ2NSwxODkgKzEwNzMsNiBAQCBzdGF0aWMgdm9pZCBkcHVfcGxh bmVfY2xlYW51cF9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAltc21fZnJhbWVidWZmZXJf Y2xlYW51cChvbGRfc3RhdGUtPmZiLCBvbGRfcHN0YXRlLT5hc3BhY2UpOwogfQogCi1zdGF0aWMg dm9pZCBfZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrX21vZGVfY2hhbmdlZChzdHJ1Y3QgZHB1 X3BsYW5lICpwZHB1LAotCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKLQkJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQotewotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUg KnBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Ci0Jc3RydWN0IGRwdV9wbGFuZV9z dGF0ZSAqb2xkX3BzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShvbGRfc3RhdGUpOwotCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLCAqb2xkX2ZiOwotCi0JLyogbm8gbmVlZCB0byBjaGVjayBp dCBhZ2FpbiAqLwotCWlmIChwc3RhdGUtPmRpcnR5ID09IERQVV9QTEFORV9ESVJUWV9BTEwpCi0J CXJldHVybjsKLQotCWlmICghZHB1X3BsYW5lX2VuYWJsZWQoc3RhdGUpIHx8ICFkcHVfcGxhbmVf ZW5hYmxlZChvbGRfc3RhdGUpCi0JCQl8fCBwZHB1LT5pc19lcnJvcikgewotCQlEUFVfREVCVUdf UExBTkUocGRwdSwKLQkJCSJlbmFibGluZy9kaXNhYmxpbmcgZnVsbCBtb2Rlc2V0IHJlcXVpcmVk XG4iKTsKLQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfQUxMOwotCX0gZWxzZSBp ZiAodG9fZHB1X3BsYW5lX3N0YXRlKG9sZF9zdGF0ZSktPnBlbmRpbmcpIHsKLQkJRFBVX0RFQlVH X1BMQU5FKHBkcHUsICJzdGlsbCBwZW5kaW5nXG4iKTsKLQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVf UExBTkVfRElSVFlfQUxMOwotCX0gZWxzZSBpZiAocHN0YXRlLT5tdWx0aXJlY3RfaW5kZXggIT0g b2xkX3BzdGF0ZS0+bXVsdGlyZWN0X2luZGV4IHx8Ci0JCQlwc3RhdGUtPm11bHRpcmVjdF9tb2Rl ICE9IG9sZF9wc3RhdGUtPm11bHRpcmVjdF9tb2RlKSB7Ci0JCURQVV9ERUJVR19QTEFORShwZHB1 LCAibXVsdGlyZWN0IGNvbmZpZyB1cGRhdGVkXG4iKTsKLQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVf UExBTkVfRElSVFlfQUxMOwotCX0gZWxzZSBpZiAoc3RhdGUtPmNydGNfdyAhPSBvbGRfc3RhdGUt PmNydGNfdyB8fAotCQkgICBzdGF0ZS0+Y3J0Y19oICE9IG9sZF9zdGF0ZS0+Y3J0Y19oIHx8Ci0J CSAgIHN0YXRlLT5jcnRjX3ggIT0gb2xkX3N0YXRlLT5jcnRjX3ggfHwKLQkJICAgc3RhdGUtPmNy dGNfeSAhPSBvbGRfc3RhdGUtPmNydGNfeSkgewotCQlEUFVfREVCVUdfUExBTkUocGRwdSwgImNy dGMgcmVjdCB1cGRhdGVkXG4iKTsKLQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlf UkVDVFM7Ci0JfSBlbHNlIGlmIChwc3RhdGUtPmV4Y2xfcmVjdC53ICE9IG9sZF9wc3RhdGUtPmV4 Y2xfcmVjdC53IHx8Ci0JCSAgIHBzdGF0ZS0+ZXhjbF9yZWN0LmggIT0gb2xkX3BzdGF0ZS0+ZXhj bF9yZWN0LmggfHwKLQkJICAgcHN0YXRlLT5leGNsX3JlY3QueCAhPSBvbGRfcHN0YXRlLT5leGNs X3JlY3QueCB8fAotCQkgICBwc3RhdGUtPmV4Y2xfcmVjdC55ICE9IG9sZF9wc3RhdGUtPmV4Y2xf cmVjdC55KSB7Ci0JCURQVV9ERUJVR19QTEFORShwZHB1LCAiZXhjbF9yZWN0IHVwZGF0ZWRcbiIp OwotCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9ESVJUWV9SRUNUUzsKLQl9Ci0KLQlmYiA9 IHN0YXRlLT5mYjsKLQlvbGRfZmIgPSBvbGRfc3RhdGUtPmZiOwotCi0JaWYgKCFmYiB8fCAhb2xk X2ZiKSB7Ci0JCURQVV9ERUJVR19QTEFORShwZHB1LCAiY2FuJ3QgY29tcGFyZSBmYiBoYW5kbGVz XG4iKTsKLQl9IGVsc2UgaWYgKGZiLT5mb3JtYXQtPmZvcm1hdCAhPSBvbGRfZmItPmZvcm1hdC0+ Zm9ybWF0KSB7Ci0JCURQVV9ERUJVR19QTEFORShwZHB1LCAiZm9ybWF0IGNoYW5nZVxuIik7Ci0J CXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX0ZPUk1BVCB8IERQVV9QTEFORV9ESVJU WV9SRUNUUzsKLQl9IGVsc2UgewotCQl1aW50NjRfdCBuZXdfbW9kID0gZmItPm1vZGlmaWVyOwot CQl1aW50NjRfdCBvbGRfbW9kID0gb2xkX2ZiLT5tb2RpZmllcjsKLQkJdWludDMyX3QgKm5ld19w aXRjaGVzID0gZmItPnBpdGNoZXM7Ci0JCXVpbnQzMl90ICpvbGRfcGl0Y2hlcyA9IG9sZF9mYi0+ cGl0Y2hlczsKLQkJdWludDMyX3QgKm5ld19vZmZzZXQgPSBmYi0+b2Zmc2V0czsKLQkJdWludDMy X3QgKm9sZF9vZmZzZXQgPSBvbGRfZmItPm9mZnNldHM7Ci0JCWludCBpOwotCi0JCWlmIChuZXdf bW9kICE9IG9sZF9tb2QpIHsKLQkJCURQVV9ERUJVR19QTEFORShwZHB1LAotCQkJCSJmb3JtYXQg bW9kaWZpZXJzIGNoYW5nZVwiXAotCQkJCW5ld19tb2RlOiVsbHUgb2xkX21vZGU6JWxsdVxuIiwK LQkJCQluZXdfbW9kLCBvbGRfbW9kKTsKLQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJ UlRZX0ZPUk1BVCB8Ci0JCQkJRFBVX1BMQU5FX0RJUlRZX1JFQ1RTOwotCQl9Ci0KLQkJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoZmItPnBpdGNoZXMpOyBpKyspIHsKLQkJCWlmIChuZXdfcGl0 Y2hlc1tpXSAhPSBvbGRfcGl0Y2hlc1tpXSkgewotCQkJCURQVV9ERUJVR19QTEFORShwZHB1LAot CQkJCQkicGl0Y2hlcyBjaGFuZ2UgcGxhbmU6JWRcIlwKLQkJCQkJb2xkX3BpdGNoZXM6JXUgbmV3 X3BpdGNoZXM6JXVcbiIsCi0JCQkJCWksIG9sZF9waXRjaGVzW2ldLCBuZXdfcGl0Y2hlc1tpXSk7 Ci0JCQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfUkVDVFM7Ci0JCQkJYnJlYWs7 Ci0JCQl9Ci0JCX0KLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmItPm9mZnNldHMpOyBp KyspIHsKLQkJCWlmIChuZXdfb2Zmc2V0W2ldICE9IG9sZF9vZmZzZXRbaV0pIHsKLQkJCQlEUFVf REVCVUdfUExBTkUocGRwdSwKLQkJCQkJIm9mZnNldCBjaGFuZ2UgcGxhbmU6JWRcIlwKLQkJCQkJ b2xkX29mZnNldDoldSBuZXdfb2Zmc2V0OiV1XG4iLAotCQkJCQlpLCBvbGRfb2Zmc2V0W2ldLCBu ZXdfb2Zmc2V0W2ldKTsKLQkJCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9ESVJUWV9GT1JN QVQgfAotCQkJCQlEUFVfUExBTkVfRElSVFlfUkVDVFM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0K LQl9Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9wbGFuZV92YWxpZGF0ZV9zY2FsZXJfdjIoc3RydWN0 IGRwdV9wbGFuZSAqcGRwdSwKLQkJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlLAotCQlj b25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZm10LAotCQl1aW50MzJfdCBpbWdfdywgdWludDMyX3Qg aW1nX2gsCi0JCXVpbnQzMl90IHNyY193LCB1aW50MzJfdCBzcmNfaCwKLQkJdWludDMyX3QgZGVj aV93LCB1aW50MzJfdCBkZWNpX2gpCi17Ci0JaW50IGk7Ci0KLQlpZiAoIXBkcHUgfHwgIXBzdGF0 ZSB8fCAhZm10KSB7Ci0JCURQVV9FUlJPUl9QTEFORShwZHB1LCAiaW52YWxpZCBhcmd1bWVudHNc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBkb24ndCBydW4gY2hlY2tzIHVubGVz cyBzY2FsZXIgZGF0YSB3YXMgY2hhbmdlZCAqLwotCWlmIChwc3RhdGUtPnNjYWxlcl9jaGVja19z dGF0ZSAhPSBEUFVfUExBTkVfU0NMQ0hFQ0tfU0NBTEVSX1YyX0NIRUNLKQotCQlyZXR1cm4gMDsK LQotCXBzdGF0ZS0+c2NhbGVyX2NoZWNrX3N0YXRlID0gRFBVX1BMQU5FX1NDTENIRUNLX0lOVkFM SUQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRFBVX01BWF9QTEFORVM7IGkrKykgewotCQl1aW50MzJf dCBob3JfcmVxX3BpeGVscywgaG9yX2ZldGNoX3BpeGVsczsKLQkJdWludDMyX3QgdmVydF9yZXFf cGl4ZWxzLCB2ZXJ0X2ZldGNoX3BpeGVsczsKLQkJdWludDMyX3Qgc3JjX3dfdG1wLCBzcmNfaF90 bXA7Ci0KLQkJLyogcmUtdXNlIGNvbG9yIHBsYW5lIDEncyBjb25maWcgZm9yIHBsYW5lIDIgKi8K LQkJaWYgKGkgPT0gMikKLQkJCWNvbnRpbnVlOwotCi0JCXNyY193X3RtcCA9IHNyY193OwotCQlz cmNfaF90bXAgPSBzcmNfaDsKLQotCQkvKgotCQkgKiBGb3IgY2hyb21hIHBsYW5lLCB3aWR0aCBp cyBoYWxmIGZvciB0aGUgZm9sbG93aW5nIHN1YiBzYW1wbGVkCi0JCSAqIGZvcm1hdHMuIEV4Y2Vw dCBpbiBjYXNlIG9mIGRlY2ltYXRpb24sIHdoZXJlIGhhcmR3YXJlIGF2b2lkcwotCQkgKiAxIGxp bmUgb2YgZGVjaW1hdGlvbiBpbnN0ZWFkIG9mIGRvd25zYW1wbGluZy4KLQkJICovCi0JCWlmIChp ID09IDEpIHsKLQkJCWlmICghZGVjaV93ICYmCi0JCQkJCShmbXQtPmNocm9tYV9zYW1wbGUgPT0g RFBVX0NIUk9NQV80MjAgfHwKLQkJCQkJIGZtdC0+Y2hyb21hX3NhbXBsZSA9PSBEUFVfQ0hST01B X0gyVjEpKQotCQkJCXNyY193X3RtcCA+Pj0gMTsKLQkJCWlmICghZGVjaV9oICYmCi0JCQkJCShm bXQtPmNocm9tYV9zYW1wbGUgPT0gRFBVX0NIUk9NQV80MjAgfHwKLQkJCQkJIGZtdC0+Y2hyb21h X3NhbXBsZSA9PSBEUFVfQ0hST01BX0gxVjIpKQotCQkJCXNyY19oX3RtcCA+Pj0gMTsKLQkJfQot Ci0JCWhvcl9yZXFfcGl4ZWxzID0gcHN0YXRlLT5waXhlbF9leHQucm9pX3dbaV07Ci0JCXZlcnRf cmVxX3BpeGVscyA9IHBzdGF0ZS0+cGl4ZWxfZXh0LnJvaV9oW2ldOwotCi0JCWhvcl9mZXRjaF9w aXhlbHMgPSBERUNJTUFURURfRElNRU5TSU9OKHNyY193X3RtcCArCi0JCQkoaW50OF90KShwc3Rh dGUtPnBpeGVsX2V4dC5sZWZ0X2Z0Y2hbaV0gJiAweEZGKSArCi0JCQkoaW50OF90KShwc3RhdGUt PnBpeGVsX2V4dC5yaWdodF9mdGNoW2ldICYgMHhGRiksCi0JCQlkZWNpX3cpOwotCQl2ZXJ0X2Zl dGNoX3BpeGVscyA9IERFQ0lNQVRFRF9ESU1FTlNJT04oc3JjX2hfdG1wICsKLQkJCShpbnQ4X3Qp KHBzdGF0ZS0+cGl4ZWxfZXh0LnRvcF9mdGNoW2ldICYgMHhGRikgKwotCQkJKGludDhfdCkocHN0 YXRlLT5waXhlbF9leHQuYnRtX2Z0Y2hbaV0gJiAweEZGKSwKLQkJCWRlY2lfaCk7Ci0KLQkJaWYg KChob3JfcmVxX3BpeGVscyAhPSBob3JfZmV0Y2hfcGl4ZWxzKSB8fAotCQkJKGhvcl9mZXRjaF9w aXhlbHMgPiBpbWdfdykgfHwKLQkJCSh2ZXJ0X3JlcV9waXhlbHMgIT0gdmVydF9mZXRjaF9waXhl bHMpIHx8Ci0JCQkodmVydF9mZXRjaF9waXhlbHMgPiBpbWdfaCkpIHsKLQkJCURQVV9FUlJPUl9Q TEFORShwZHB1LAotCQkJCQkicmVxICVkLyVkLCBmZXRjaCAlZC8lZCwgc3JjICVkeCVkXG4iLAot CQkJCQlob3JfcmVxX3BpeGVscywgdmVydF9yZXFfcGl4ZWxzLAotCQkJCQlob3JfZmV0Y2hfcGl4 ZWxzLCB2ZXJ0X2ZldGNoX3BpeGVscywKLQkJCQkJaW1nX3csIGltZ19oKTsKLQkJCXJldHVybiAt RUlOVkFMOwotCQl9Ci0KLQkJLyoKLQkJICogQWxwaGEgcGxhbmUgY2FuIG9ubHkgYmUgc2NhbGVk IHVzaW5nIGJpbGluZWFyIG9yIHBpeGVsCi0JCSAqIHJlcGVhdC9kcm9wLCBzcmNfd2lkdGggYW5k IHNyY19oZWlnaHQgYXJlIG9ubHkgc3BlY2lmaWVkCi0JCSAqIGZvciBZIGFuZCBVViBwbGFuZQot CQkgKi8KLQkJaWYgKGkgIT0gMyAmJgotCQkJKGhvcl9yZXFfcGl4ZWxzICE9IHBzdGF0ZS0+c2Nh bGVyM19jZmcuc3JjX3dpZHRoW2ldIHx8Ci0JCQl2ZXJ0X3JlcV9waXhlbHMgIT0gcHN0YXRlLT5z Y2FsZXIzX2NmZy5zcmNfaGVpZ2h0W2ldKSkgewotCQkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsCi0J CQkJInJvaVslZF0gJWQvJWQsIHNjYWxlciBzcmMgJWR4JWQsIHNyYyAlZHglZFxuIiwKLQkJCQlp LCBwc3RhdGUtPnBpeGVsX2V4dC5yb2lfd1tpXSwKLQkJCQlwc3RhdGUtPnBpeGVsX2V4dC5yb2lf aFtpXSwKLQkJCQlwc3RhdGUtPnNjYWxlcjNfY2ZnLnNyY193aWR0aFtpXSwKLQkJCQlwc3RhdGUt PnNjYWxlcjNfY2ZnLnNyY19oZWlnaHRbaV0sCi0JCQkJc3JjX3csIHNyY19oKTsKLQkJCXJldHVy biAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcHN0YXRlLT5zY2FsZXJfY2hlY2tfc3RhdGUgPSBEUFVf UExBTkVfU0NMQ0hFQ0tfU0NBTEVSX1YyOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGRw dV9wbGFuZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCiB7CkBAIC0xNjU2LDcgKzEwODEsNiBAQCBzdGF0 aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7CiAJY29uc3Qgc3RydWN0IGRwdV9m b3JtYXQgKmZtdDsKIAlzdHJ1Y3QgZHB1X3JlY3Qgc3JjLCBkc3Q7Ci0JdWludDMyX3QgZGVjaV93 LCBkZWNpX2gsIHNyY19kZWNpX3csIHNyY19kZWNpX2g7CiAJdWludDMyX3QgbWF4X3Vwc2NhbGUs IG1heF9kb3duc2NhbGUsIG1pbl9zcmNfc2l6ZSwgbWF4X2xpbmV3aWR0aDsKIAlib29sIHExNl9k YXRhID0gdHJ1ZTsKIApAQCAtMTY3NiwxOCArMTEwMCwxMiBAQCBzdGF0aWMgaW50IGRwdV9wbGFu ZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJZ290byBleGl0 OwogCX0KIAotCWRlY2lfdyA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLCBQTEFORV9Q Uk9QX0hfREVDSU1BVEUpOwotCWRlY2lfaCA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRl LCBQTEFORV9QUk9QX1ZfREVDSU1BVEUpOwotCiAJLyogc3JjIHZhbHVlcyBhcmUgaW4gUTE2IGZp eGVkIHBvaW50LCBjb252ZXJ0IHRvIGludGVnZXIgKi8KIAlQT1BVTEFURV9SRUNUKCZzcmMsIHN0 YXRlLT5zcmNfeCwgc3RhdGUtPnNyY195LCBzdGF0ZS0+c3JjX3csCiAJCXN0YXRlLT5zcmNfaCwg cTE2X2RhdGEpOwogCVBPUFVMQVRFX1JFQ1QoJmRzdCwgc3RhdGUtPmNydGNfeCwgc3RhdGUtPmNy dGNfeSwgc3RhdGUtPmNydGNfdywKIAkJc3RhdGUtPmNydGNfaCwgIXExNl9kYXRhKTsKIAotCXNy Y19kZWNpX3cgPSBERUNJTUFURURfRElNRU5TSU9OKHNyYy53LCBkZWNpX3cpOwotCXNyY19kZWNp X2ggPSBERUNJTUFURURfRElNRU5TSU9OKHNyYy5oLCBkZWNpX2gpOwotCiAJbWF4X3Vwc2NhbGUg PSBwZHB1LT5waXBlX3NibGstPm1heHVwc2NhbGU7CiAJbWF4X2Rvd25zY2FsZSA9IHBkcHUtPnBp cGVfc2Jsay0+bWF4ZHduc2NhbGU7CiAJbWF4X2xpbmV3aWR0aCA9IHBkcHUtPnBpcGVfc2Jsay0+ Y29tbW9uLT5tYXhsaW5ld2lkdGg7CkBAIC0xNjk2LDcgKzExMTQsNyBAQCBzdGF0aWMgaW50IGRw dV9wbGFuZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJZHB1 X3BsYW5lX2VuYWJsZWQocGxhbmUtPnN0YXRlKSwgZHB1X3BsYW5lX2VuYWJsZWQoc3RhdGUpKTsK IAogCWlmICghZHB1X3BsYW5lX2VuYWJsZWQoc3RhdGUpKQotCQlnb3RvIG1vZGVzZXRfdXBkYXRl OworCQlnb3RvIGV4aXQ7CiAKIAlmbXQgPSB0b19kcHVfZm9ybWF0KG1zbV9mcmFtZWJ1ZmZlcl9m b3JtYXQoc3RhdGUtPmZiKSk7CiAKQEAgLTE3MzQsMTggKzExNTIsNiBAQCBzdGF0aWMgaW50IGRw dV9wbGFuZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJcmV0 ID0gLUVJTlZBTDsKIAogCS8qIGRlY2ltYXRpb24gdmFsaWRhdGlvbiAqLwotCX0gZWxzZSBpZiAo ZGVjaV93IHx8IGRlY2lfaCkgewotCQlpZiAoKGRlY2lfdyA+IHBkcHUtPnBpcGVfc2Jsay0+Y29t bW9uLT5tYXhoZGVjaWV4cCkgfHwKLQkJCShkZWNpX2ggPiBwZHB1LT5waXBlX3NibGstPmNvbW1v bi0+bWF4dmRlY2lleHApKSB7Ci0JCQlEUFVfRVJST1JfUExBTkUocGRwdSwKLQkJCQkJInRvbyBt dWNoIGRlY2ltYXRpb24gcmVxdWVzdGVkXG4iKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCX0gZWxz ZSBpZiAoZm10LT5mZXRjaF9tb2RlICE9IERQVV9GRVRDSF9MSU5FQVIpIHsKLQkJCURQVV9FUlJP Ul9QTEFORShwZHB1LAotCQkJCQkiZGVjaW1hdGlvbiByZXF1aXJlcyBsaW5lYXIgZmV0Y2hcbiIp OwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJfQotCiAJfSBlbHNlIGlmICghKHBkcHUtPmZlYXR1cmVz ICYgRFBVX1NTUFBfU0NBTEVSKSAmJgogCQkoKHNyYy53ICE9IGRzdC53KSB8fCAoc3JjLmggIT0g ZHN0LmgpKSkgewogCQlEUFVfRVJST1JfUExBTkUocGRwdSwKQEAgLTE3NTQsNTcgKzExNjAsMjMg QEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCiAJCXJldCA9IC1FSU5WQUw7CiAKIAkvKiBjaGVjayBkZWNpbWF0ZWQgc291cmNl IHdpZHRoICovCi0JfSBlbHNlIGlmIChzcmNfZGVjaV93ID4gbWF4X2xpbmV3aWR0aCkgeworCX0g ZWxzZSBpZiAoc3JjLncgPiBtYXhfbGluZXdpZHRoKSB7CiAJCURQVV9FUlJPUl9QTEFORShwZHB1 LAotCQkJCSJpbnZhbGlkIHNyYyB3OiV1LCBkZWNpIHc6JXUsIGxpbmUgdzoldVxuIiwKLQkJCQlz cmMudywgc3JjX2RlY2lfdywgbWF4X2xpbmV3aWR0aCk7CisJCQkJImludmFsaWQgc3JjIHc6JXUs IGxpbmUgdzoldVxuIiwKKwkJCQlzcmMudywgbWF4X2xpbmV3aWR0aCk7CiAJCXJldCA9IC1FMkJJ RzsKIAogCS8qIGNoZWNrIG1heCBzY2FsZXIgY2FwYWJpbGl0eSAqLwotCX0gZWxzZSBpZiAoKChz cmNfZGVjaV93ICogbWF4X3Vwc2NhbGUpIDwgZHN0LncpIHx8Ci0JCSgoc3JjX2RlY2lfaCAqIG1h eF91cHNjYWxlKSA8IGRzdC5oKSB8fAotCQkoKGRzdC53ICogbWF4X2Rvd25zY2FsZSkgPCBzcmNf ZGVjaV93KSB8fAotCQkoKGRzdC5oICogbWF4X2Rvd25zY2FsZSkgPCBzcmNfZGVjaV9oKSkgewor CX0gZWxzZSBpZiAoKChzcmMudyAqIG1heF91cHNjYWxlKSA8IGRzdC53KSB8fAorCQkoKHNyYy5o ICogbWF4X3Vwc2NhbGUpIDwgZHN0LmgpIHx8CisJCSgoZHN0LncgKiBtYXhfZG93bnNjYWxlKSA8 IHNyYy53KSB8fAorCQkoKGRzdC5oICogbWF4X2Rvd25zY2FsZSkgPCBzcmMuaCkpIHsKIAkJRFBV X0VSUk9SX1BMQU5FKHBkcHUsCiAJCQkidG9vIG11Y2ggc2NhbGluZyByZXF1ZXN0ZWQgJXV4JXUt PiV1eCV1XG4iLAotCQkJc3JjX2RlY2lfdywgc3JjX2RlY2lfaCwgZHN0LncsIGRzdC5oKTsKKwkJ CXNyYy53LCBzcmMuaCwgZHN0LncsIGRzdC5oKTsKIAkJcmV0ID0gLUUyQklHOwotCX0gZWxzZSBp ZiAoX2RwdV9wbGFuZV92YWxpZGF0ZV9zY2FsZXJfdjIocGRwdSwgcHN0YXRlLCBmbXQsCi0JCQkJ c3RhdGUtPmZiLT53aWR0aCwKLQkJCQlzdGF0ZS0+ZmItPmhlaWdodCwKLQkJCQlzcmMudywgc3Jj LmgsIGRlY2lfdywgZGVjaV9oKSkgewotCQlyZXQgPSAtRUlOVkFMOwotCX0KLQotCS8qIGNoZWNr IGV4Y2wgcmVjdCBjb25maWdzICovCi0JaWYgKCFyZXQgJiYgcHN0YXRlLT5leGNsX3JlY3QudyAm JiBwc3RhdGUtPmV4Y2xfcmVjdC5oKSB7Ci0JCXN0cnVjdCBkcHVfcmVjdCBpbnRlcnNlY3Q7Ci0K LQkJLyoKLQkJICogQ2hlY2sgZXhjbHVzaW9uIHJlY3QgYWdhaW5zdCBzcmMgcmVjdC4KLQkJICog aXQgbXVzdCBpbnRlcnNlY3Qgd2l0aCBzb3VyY2UgcmVjdC4KLQkJICovCi0JCWRwdV9rbXNfcmVj dF9pbnRlcnNlY3QoJnNyYywgJnBzdGF0ZS0+ZXhjbF9yZWN0LCAmaW50ZXJzZWN0KTsKLQkJaWYg KGludGVyc2VjdC53ICE9IHBzdGF0ZS0+ZXhjbF9yZWN0LncgfHwKLQkJCQlpbnRlcnNlY3QuaCAh PSBwc3RhdGUtPmV4Y2xfcmVjdC5oIHx8Ci0JCQkJRFBVX0ZPUk1BVF9JU19ZVVYoZm10KSkgewot CQkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsCi0JCQkJImludmFsaWQgZXhjbF9yZWN0OnslZCwlZCwl ZCwlZH0gc3JjOnslZCwlZCwlZCwlZH0sIGZtdDogJTQuNHNcbiIsCi0JCQkJcHN0YXRlLT5leGNs X3JlY3QueCwgcHN0YXRlLT5leGNsX3JlY3QueSwKLQkJCQlwc3RhdGUtPmV4Y2xfcmVjdC53LCBw c3RhdGUtPmV4Y2xfcmVjdC5oLAotCQkJCXNyYy54LCBzcmMueSwgc3JjLncsIHNyYy5oLAotCQkJ CShjaGFyICopJmZtdC0+YmFzZS5waXhlbF9mb3JtYXQpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJ fQotCQlEUFVfREVCVUdfUExBTkUocGRwdSwgImV4Y2xfcmVjdDogeyVkLCVkLCVkLCVkfVxuIiwK LQkJCQlwc3RhdGUtPmV4Y2xfcmVjdC54LCBwc3RhdGUtPmV4Y2xfcmVjdC55LAotCQkJCXBzdGF0 ZS0+ZXhjbF9yZWN0LncsIHBzdGF0ZS0+ZXhjbF9yZWN0LmgpOwogCX0KIAotbW9kZXNldF91cGRh dGU6Ci0JaWYgKCFyZXQpCi0JCV9kcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2tfbW9kZV9jaGFu Z2VkKHBkcHUsCi0JCQkJc3RhdGUsIHBsYW5lLT5zdGF0ZSk7CiBleGl0OgogCXJldHVybiByZXQ7 CiB9CkBAIC0xODk3LDcgKzEyNjksNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21p Y191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmI7CiAJc3RydWN0IGRwdV9yZWN0IHNyYywgZHN0OwogCWJvb2wgcTE2X2RhdGEgPSB0cnVl OwotCWludCBpZHg7CiAKIAlpZiAoIXBsYW5lKSB7CiAJCURQVV9FUlJPUigiaW52YWxpZCBwbGFu ZVxuIik7CkBAIC0xOTI3LDE1MCArMTI5OCw2OSBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3Bw X2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJZm10ID0gdG9fZHB1X2Zv cm1hdChtc21fZnJhbWVidWZmZXJfZm9ybWF0KGZiKSk7CiAJbnBsYW5lcyA9IGZtdC0+bnVtX3Bs YW5lczsKIAotCS8qIGZvcmNlIHJlcHJvZ3JhbW1pbmcgb2YgYWxsIHRoZSBwYXJhbWV0ZXJzLCBp ZiB0aGUgZmxhZyBpcyBzZXQgKi8KLQlpZiAocGRwdS0+cmV2YWxpZGF0ZSkgewotCQlEUFVfREVC VUcoInBsYW5lOiVkIC0gcmVjb25maWd1cmUgYWxsIHRoZSBwYXJhbWV0ZXJzXG4iLAotCQkJCXBs YW5lLT5iYXNlLmlkKTsKLQkJcHN0YXRlLT5kaXJ0eSA9IERQVV9QTEFORV9ESVJUWV9BTEw7Ci0J CXBkcHUtPnJldmFsaWRhdGUgPSBmYWxzZTsKLQl9Ci0KLQkvKiBkZXRlcm1pbmUgd2hhdCBuZWVk cyB0byBiZSByZWZyZXNoZWQgKi8KLQl3aGlsZSAoKGlkeCA9IG1zbV9wcm9wZXJ0eV9wb3BfZGly dHkoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlKSkg Pj0gMCkgewotCQlzd2l0Y2ggKGlkeCkgewotCQljYXNlIFBMQU5FX1BST1BfU0NBTEVSX1YxOgot CQljYXNlIFBMQU5FX1BST1BfU0NBTEVSX1YyOgotCQljYXNlIFBMQU5FX1BST1BfU0NBTEVSX0xV VF9FRDoKLQkJY2FzZSBQTEFORV9QUk9QX1NDQUxFUl9MVVRfQ0lSOgotCQljYXNlIFBMQU5FX1BS T1BfU0NBTEVSX0xVVF9TRVA6Ci0JCWNhc2UgUExBTkVfUFJPUF9IX0RFQ0lNQVRFOgotCQljYXNl IFBMQU5FX1BST1BfVl9ERUNJTUFURToKLQkJY2FzZSBQTEFORV9QUk9QX1NSQ19DT05GSUc6Ci0J CWNhc2UgUExBTkVfUFJPUF9aUE9TOgotCQljYXNlIFBMQU5FX1BST1BfRVhDTF9SRUNUX1YxOgot CQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfUkVDVFM7Ci0JCQlicmVhazsKLQkJ Y2FzZSBQTEFORV9QUk9QX0NTQ19WMToKLQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJ UlRZX0ZPUk1BVDsKLQkJCWJyZWFrOwotCQljYXNlIFBMQU5FX1BST1BfQ09MT1JfRklMTDoKLQkJ CS8qIHBvdGVudGlhbGx5IG5lZWQgdG8gcmVmcmVzaCBldmVyeXRoaW5nICovCi0JCQlwc3RhdGUt PmRpcnR5ID0gRFBVX1BMQU5FX0RJUlRZX0FMTDsKLQkJCWJyZWFrOwotCQljYXNlIFBMQU5FX1BS T1BfSU5GTzoKLQkJY2FzZSBQTEFORV9QUk9QX0FMUEhBOgotCQljYXNlIFBMQU5FX1BST1BfQkxF TkRfT1A6Ci0JCQkvKiBubyBzcGVjaWFsIGFjdGlvbiByZXF1aXJlZCAqLwotCQkJYnJlYWs7Ci0J CWNhc2UgUExBTkVfUFJPUF9QUkVGSUxMX1NJWkU6Ci0JCWNhc2UgUExBTkVfUFJPUF9QUkVGSUxM X1RJTUU6Ci0JCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9ESVJUWV9QRVJGOwotCQkJYnJl YWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiB1bmtub3duIHByb3BlcnR5LCByZWZyZXNoIGV2ZXJ5dGhp bmcgKi8KLQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX0FMTDsKLQkJCURQVV9F UlJPUigiZXhlY3V0aW5nIGZ1bGwgbW9kZSBzZXQsIHBycF9pZHggJWRcbiIsIGlkeCk7Ci0JCQli cmVhazsKLQkJfQotCX0KLQotCS8qKgotCSAqIHNpbmNlIHBsYW5lX2F0b21pY19jaGVjayBpcyBp bnZva2VkIGJlZm9yZSBjcnRjX2F0b21pY19jaGVjawotCSAqIGluIHRoZSBjb21taXQgc2VxdWVu Y2UsIGFsbCB0aGUgcGFyYW1ldGVycyBmb3IgdXBkYXRpbmcgdGhlCi0JICogcGxhbmUgZGlydHkg ZmxhZyB3aWxsIG5vdCBiZSBhdmFpbGFibGUgZHVyaW5nCi0JICogcGxhbmVfYXRvbWljX2NoZWNr IGFzIHNvbWUgZmVhdHVyZXMgcGFyYW1zIGFyZSB1cGRhdGVkCi0JICogaW4gY3J0Y19hdG9taWNf Y2hlY2sgKGVnLjpzRE1BKS4gU28gY2hlY2sgZm9yIG1vZGVfY2hhbmdlCi0JICogYmVmb3JlIHNz cHAgdXBkYXRlLgotCSAqLwotCV9kcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2tfbW9kZV9jaGFu Z2VkKHBkcHUsIHN0YXRlLAotCQkJCQkJCQlvbGRfc3RhdGUpOwotCi0JaWYgKHBzdGF0ZS0+ZGly dHkgJiBEUFVfUExBTkVfRElSVFlfUkVDVFMpCi0JCW1lbXNldCgmKHBkcHUtPnBpcGVfY2ZnKSwg MCwgc2l6ZW9mKHN0cnVjdCBkcHVfaHdfcGlwZV9jZmcpKTsKKwltZW1zZXQoJihwZHB1LT5waXBl X2NmZyksIDAsIHNpemVvZihzdHJ1Y3QgZHB1X2h3X3BpcGVfY2ZnKSk7CiAKIAlfZHB1X3BsYW5l X3NldF9zY2Fub3V0KHBsYW5lLCBwc3RhdGUsICZwZHB1LT5waXBlX2NmZywgZmIpOwogCi0JLyog ZWFybHkgb3V0IGlmIG5vdGhpbmcgZGlydHkgKi8KLQlpZiAoIXBzdGF0ZS0+ZGlydHkpCi0JCXJl dHVybiAwOwogCXBzdGF0ZS0+cGVuZGluZyA9IHRydWU7CiAKIAlwZHB1LT5pc19ydF9waXBlID0g KGRwdV9jcnRjX2dldF9jbGllbnRfdHlwZShjcnRjKSAhPSBOUlRfQ0xJRU5UKTsKIAlfZHB1X3Bs YW5lX3NldF9xb3NfY3RybChwbGFuZSwgZmFsc2UsIERQVV9QTEFORV9RT1NfUEFOSUNfQ1RSTCk7 CiAKIAkvKiB1cGRhdGUgcm9pIGNvbmZpZyAqLwotCWlmIChwc3RhdGUtPmRpcnR5ICYgRFBVX1BM QU5FX0RJUlRZX1JFQ1RTKSB7Ci0JCVBPUFVMQVRFX1JFQ1QoJnNyYywgc3RhdGUtPnNyY194LCBz dGF0ZS0+c3JjX3ksCi0JCQlzdGF0ZS0+c3JjX3csIHN0YXRlLT5zcmNfaCwgcTE2X2RhdGEpOwot CQlQT1BVTEFURV9SRUNUKCZkc3QsIHN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3ksCi0JCQlz dGF0ZS0+Y3J0Y193LCBzdGF0ZS0+Y3J0Y19oLCAhcTE2X2RhdGEpOwotCi0JCURQVV9ERUJVR19Q TEFORShwZHB1LAotCQkJIkZCWyV1XSAldSwldSwldXgldS0+Y3J0YyV1ICVkLCVkLCV1eCV1LCAl NC40cyB1YndjICVkXG4iLAotCQkJCWZiLT5iYXNlLmlkLCBzcmMueCwgc3JjLnksIHNyYy53LCBz cmMuaCwKLQkJCQljcnRjLT5iYXNlLmlkLCBkc3QueCwgZHN0LnksIGRzdC53LCBkc3QuaCwKLQkJ CQkoY2hhciAqKSZmbXQtPmJhc2UucGl4ZWxfZm9ybWF0LAotCQkJCURQVV9GT1JNQVRfSVNfVUJX QyhmbXQpKTsKLQotCQlpZiAoZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsIFBMQU5FX1BS T1BfU1JDX0NPTkZJRykgJgotCQkJQklUKERQVV9EUk1fREVJTlRFUkxBQ0UpKSB7Ci0JCQlEUFVf REVCVUdfUExBTkUocGRwdSwgImRlaW50ZXJsYWNlXG4iKTsKLQkJCWZvciAoaWR4ID0gMDsgaWR4 IDwgRFBVX01BWF9QTEFORVM7ICsraWR4KQotCQkJCXBkcHUtPnBpcGVfY2ZnLmxheW91dC5wbGFu ZV9waXRjaFtpZHhdIDw8PSAxOwotCQkJc3JjLmggLz0gMjsKLQkJCXNyYy55ICA9IERJVl9ST1VO RF9VUChzcmMueSwgMik7Ci0JCQlzcmMueSAmPSB+MHgxOwotCQl9Ci0KLQkJcGRwdS0+cGlwZV9j Zmcuc3JjX3JlY3QgPSBzcmM7Ci0JCXBkcHUtPnBpcGVfY2ZnLmRzdF9yZWN0ID0gZHN0OworCVBP UFVMQVRFX1JFQ1QoJnNyYywgc3RhdGUtPnNyY194LCBzdGF0ZS0+c3JjX3ksCisJCXN0YXRlLT5z cmNfdywgc3RhdGUtPnNyY19oLCBxMTZfZGF0YSk7CisJUE9QVUxBVEVfUkVDVCgmZHN0LCBzdGF0 ZS0+Y3J0Y194LCBzdGF0ZS0+Y3J0Y195LAorCQlzdGF0ZS0+Y3J0Y193LCBzdGF0ZS0+Y3J0Y19o LCAhcTE2X2RhdGEpOworCisJRFBVX0RFQlVHX1BMQU5FKHBkcHUsCisJCSJGQlsldV0gJXUsJXUs JXV4JXUtPmNydGMldSAlZCwlZCwldXgldSwgJTQuNHMgdWJ3YyAlZFxuIiwKKwkJCWZiLT5iYXNl LmlkLCBzcmMueCwgc3JjLnksIHNyYy53LCBzcmMuaCwKKwkJCWNydGMtPmJhc2UuaWQsIGRzdC54 LCBkc3QueSwgZHN0LncsIGRzdC5oLAorCQkJKGNoYXIgKikmZm10LT5iYXNlLnBpeGVsX2Zvcm1h dCwKKwkJCURQVV9GT1JNQVRfSVNfVUJXQyhmbXQpKTsKIAotCQlfZHB1X3BsYW5lX3NldHVwX3Nj YWxlcihwZHB1LCBwc3RhdGUsIGZtdCwgZmFsc2UpOwogCi0JCS8qIGNoZWNrIGZvciBjb2xvciBm aWxsICovCi0JCXBkcHUtPmNvbG9yX2ZpbGwgPSAodWludDMyX3QpZHB1X3BsYW5lX2dldF9wcm9w ZXJ0eShwc3RhdGUsCi0JCQkJUExBTkVfUFJPUF9DT0xPUl9GSUxMKTsKLQkJaWYgKHBkcHUtPmNv bG9yX2ZpbGwgJiBEUFVfUExBTkVfQ09MT1JfRklMTF9GTEFHKSB7Ci0JCQkvKiBza2lwIHJlbWFp bmluZyBwcm9jZXNzaW5nIG9uIGNvbG9yIGZpbGwgKi8KLQkJCXBzdGF0ZS0+ZGlydHkgPSAweDA7 Ci0JCX0gZWxzZSBpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3JlY3RzKSB7Ci0JCQlwZHB1 LT5waXBlX2h3LT5vcHMuc2V0dXBfcmVjdHMocGRwdS0+cGlwZV9odywKLQkJCQkJJnBkcHUtPnBp cGVfY2ZnLAotCQkJCQlwc3RhdGUtPm11bHRpcmVjdF9pbmRleCk7Ci0JCX0KKwlwZHB1LT5waXBl X2NmZy5zcmNfcmVjdCA9IHNyYzsKKwlwZHB1LT5waXBlX2NmZy5kc3RfcmVjdCA9IGRzdDsKIAot CQlpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3BlICYmCi0JCQkJKHBzdGF0ZS0+bXVsdGly ZWN0X2luZGV4ICE9IERQVV9TU1BQX1JFQ1RfMSkpCi0JCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0 dXBfcGUocGRwdS0+cGlwZV9odywKLQkJCQkJJnBzdGF0ZS0+cGl4ZWxfZXh0KTsKKwlfZHB1X3Bs YW5lX3NldHVwX3NjYWxlcihwZHB1LCBwc3RhdGUsIGZtdCwgZmFsc2UpOwogCi0JCS8qKgotCQkg KiB3aGVuIHByb2dyYW1tZWQgaW4gbXVsdGlyZWN0IG1vZGUsIHNjYWxhciBibG9jayB3aWxsIGJl Ci0JCSAqIGJ5cGFzc2VkLiBTdGlsbCB3ZSBuZWVkIHRvIHVwZGF0ZSBhbHBoYSBhbmQgYml0d2lk dGgKLQkJICogT05MWSBmb3IgUkVDVDAKLQkJICovCi0JCWlmIChwZHB1LT5waXBlX2h3LT5vcHMu c2V0dXBfc2NhbGVyICYmCi0JCQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXggIT0gRFBVX1NTUFBf UkVDVF8xKQotCQkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3NjYWxlcihwZHB1LT5waXBlX2h3 LAotCQkJCQkmcGRwdS0+cGlwZV9jZmcsICZwc3RhdGUtPnBpeGVsX2V4dCwKLQkJCQkJJnBzdGF0 ZS0+c2NhbGVyM19jZmcpOwotCi0JCS8qIHVwZGF0ZSBleGNsIHJlY3QgKi8KLQkJaWYgKHBkcHUt PnBpcGVfaHctPm9wcy5zZXR1cF9leGNsX3JlY3QpCi0JCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0 dXBfZXhjbF9yZWN0KHBkcHUtPnBpcGVfaHcsCi0JCQkJCSZwc3RhdGUtPmV4Y2xfcmVjdCwKLQkJ CQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXgpOworCS8qIG92ZXJyaWRlIGZvciBjb2xvciBmaWxs ICovCisJaWYgKHBkcHUtPmNvbG9yX2ZpbGwgJiBEUFVfUExBTkVfQ09MT1JfRklMTF9GTEFHKSB7 CisJCS8qIHNraXAgcmVtYWluaW5nIHByb2Nlc3Npbmcgb24gY29sb3IgZmlsbCAqLworCQlyZXR1 cm4gMDsKKwl9CiAKLQkJaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9tdWx0aXJlY3QpCi0J CQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfbXVsdGlyZWN0KAotCQkJCQlwZHB1LT5waXBlX2h3 LAotCQkJCQlwc3RhdGUtPm11bHRpcmVjdF9pbmRleCwKLQkJCQkJcHN0YXRlLT5tdWx0aXJlY3Rf bW9kZSk7CisJaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9yZWN0cykgeworCQlwZHB1LT5w aXBlX2h3LT5vcHMuc2V0dXBfcmVjdHMocGRwdS0+cGlwZV9odywKKwkJCQkmcGRwdS0+cGlwZV9j ZmcsCisJCQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXgpOwogCX0KIAotCWlmICgocHN0YXRlLT5k aXJ0eSAmIERQVV9QTEFORV9ESVJUWV9GT1JNQVQpICYmCi0JCQlwZHB1LT5waXBlX2h3LT5vcHMu c2V0dXBfZm9ybWF0KSB7CisJaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9wZSAmJgorCQkJ KHBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4ICE9IERQVV9TU1BQX1JFQ1RfMSkpCisJCXBkcHUtPnBp cGVfaHctPm9wcy5zZXR1cF9wZShwZHB1LT5waXBlX2h3LAorCQkJCSZwc3RhdGUtPnBpeGVsX2V4 dCk7CisKKwkvKioKKwkgKiB3aGVuIHByb2dyYW1tZWQgaW4gbXVsdGlyZWN0IG1vZGUsIHNjYWxh ciBibG9jayB3aWxsIGJlCisJICogYnlwYXNzZWQuIFN0aWxsIHdlIG5lZWQgdG8gdXBkYXRlIGFs cGhhIGFuZCBiaXR3aWR0aAorCSAqIE9OTFkgZm9yIFJFQ1QwCisJICovCisJaWYgKHBkcHUtPnBp cGVfaHctPm9wcy5zZXR1cF9zY2FsZXIgJiYKKwkJCXBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4ICE9 IERQVV9TU1BQX1JFQ1RfMSkKKwkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX3NjYWxlcihwZHB1 LT5waXBlX2h3LAorCQkJCSZwZHB1LT5waXBlX2NmZywgJnBzdGF0ZS0+cGl4ZWxfZXh0LAorCQkJ CSZwc3RhdGUtPnNjYWxlcjNfY2ZnKTsKKworCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBf bXVsdGlyZWN0KQorCQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfbXVsdGlyZWN0KAorCQkJCXBk cHUtPnBpcGVfaHcsCisJCQkJcHN0YXRlLT5tdWx0aXJlY3RfaW5kZXgsCisJCQkJcHN0YXRlLT5t dWx0aXJlY3RfbW9kZSk7CisKKwlpZiAocGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX2Zvcm1hdCkg ewogCQlzcmNfZmxhZ3MgPSAweDA7CiAKIAkJLyogdXBkYXRlIGZvcm1hdCAqLwpAQCAtMjEwMSwz NSArMTM5MSwxNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY191cGRhdGUoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQlwZHB1LT5jc2NfcHRyID0gMDsKIAl9CiAKLQlkcHVf Y29sb3JfcHJvY2Vzc19wbGFuZV9zZXR1cChwbGFuZSk7Ci0KLQkvKiB1cGRhdGUgc2hhcnBlbmlu ZyAqLwotCWlmICgocHN0YXRlLT5kaXJ0eSAmIERQVV9QTEFORV9ESVJUWV9TSEFSUEVOKSAmJgot CQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfc2hhcnBlbmluZykgewotCQlwZHB1LT5zaGFycF9j Zmcuc3RyZW5ndGggPSBTSEFSUF9TVFJFTkdUSF9ERUZBVUxUOwotCQlwZHB1LT5zaGFycF9jZmcu ZWRnZV90aHIgPSBTSEFSUF9FREdFX1RIUl9ERUZBVUxUOwotCQlwZHB1LT5zaGFycF9jZmcuc21v b3RoX3RociA9IFNIQVJQX1NNT09USF9USFJfREVGQVVMVDsKLQkJcGRwdS0+c2hhcnBfY2ZnLm5v aXNlX3RociA9IFNIQVJQX05PSVNFX1RIUl9ERUZBVUxUOwotCi0JCXBkcHUtPnBpcGVfaHctPm9w cy5zZXR1cF9zaGFycGVuaW5nKHBkcHUtPnBpcGVfaHcsCi0JCQkJJnBkcHUtPnNoYXJwX2NmZyk7 Ci0JfQotCiAJX2RwdV9wbGFuZV9zZXRfcW9zX2x1dChwbGFuZSwgZmIpOwogCV9kcHVfcGxhbmVf c2V0X2Rhbmdlcl9sdXQocGxhbmUsIGZiKTsKIAogCWlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExB TkVfVFlQRV9DVVJTT1IpIHsKIAkJX2RwdV9wbGFuZV9zZXRfcW9zX2N0cmwocGxhbmUsIHRydWUs IERQVV9QTEFORV9RT1NfUEFOSUNfQ1RSTCk7CiAJCV9kcHVfcGxhbmVfc2V0X290X2xpbWl0KHBs YW5lLCBjcnRjKTsKLQkJaWYgKHBzdGF0ZS0+ZGlydHkgJiBEUFVfUExBTkVfRElSVFlfUEVSRikK LQkJCV9kcHVfcGxhbmVfc2V0X3RzX3ByZWZpbGwocGxhbmUsIHBzdGF0ZSk7CiAJfQogCiAJX2Rw dV9wbGFuZV9zZXRfcW9zX3JlbWFwKHBsYW5lKTsKIAotCS8qIGNsZWFyIGRpcnR5ICovCi0JcHN0 YXRlLT5kaXJ0eSA9IDB4MDsKLQogCXJldHVybiAwOwogfQogCkBAIC0yMjA4LDEzICsxNDc5LDYg QEAgdm9pZCBkcHVfcGxhbmVfcmVzdG9yZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAogCXBk cHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOwogCi0JLyoKLQkgKiBSZXZhbGlkYXRlIGlzIG9ubHkg dHJ1ZSBoZXJlIGlmIGlkbGUgUEMgb2NjdXJyZWQgYW5kCi0JICogdGhlcmUgaXMgbm8gcGxhbmUg c3RhdGUgdXBkYXRlIGluIGN1cnJlbnQgY29tbWl0IGN5Y2xlLgotCSAqLwotCWlmICghcGRwdS0+ cmV2YWxpZGF0ZSkKLQkJcmV0dXJuOwotCiAJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwog CiAJLyogbGFzdCBwbGFuZSBzdGF0ZSBpcyBzYW1lIGFzIGN1cnJlbnQgc3RhdGUgKi8KQEAgLTIy MjUsMjEgKzE0ODksOSBAQCB2b2lkIGRwdV9wbGFuZV9yZXN0b3JlKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lKQogc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCiAJc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZywgdTMyIG1h c3Rlcl9wbGFuZV9pZCkKIHsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlz dCBlX2JsZW5kX29wW10gPSB7Ci0JCXtEUFVfRFJNX0JMRU5EX09QX05PVF9ERUZJTkVELCAgICAi bm90X2RlZmluZWQifSwKLQkJe0RQVV9EUk1fQkxFTkRfT1BfT1BBUVVFLCAgICAgICAgICJvcGFx dWUifSwKLQkJe0RQVV9EUk1fQkxFTkRfT1BfUFJFTVVMVElQTElFRCwgICJwcmVtdWx0aXBsaWVk In0sCi0JCXtEUFVfRFJNX0JMRU5EX09QX0NPVkVSQUdFLCAgICAgICAiY292ZXJhZ2UifQotCX07 Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgZV9zcmNfY29uZmlnW10g PSB7Ci0JCXtEUFVfRFJNX0RFSU5URVJMQUNFLCAiZGVpbnRlcmxhY2UifQotCX07Ci0JY29uc3Qg c3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgKmZvcm1hdF9saXN0OwotCXN0cnVjdCBkcHVfa21z X2luZm8gKmluZm87CiAJc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFu ZSk7CiAJaW50IHpwb3NfbWF4ID0gMjU1OwogCWludCB6cG9zX2RlZiA9IDA7Ci0JY2hhciBmZWF0 dXJlX25hbWVbMjU2XTsKIAogCWlmICghcGxhbmUgfHwgIXBkcHUpIHsKIAkJRFBVX0VSUk9SKCJp bnZhbGlkIHBsYW5lXG4iKTsKQEAgLTIyNjksMzUzICsxNTIxLDYgQEAgc3RhdGljIHZvaWQgX2Rw dV9wbGFuZV9pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAKIAlt c21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywgInpwb3MiLAog CQkweDAsIDAsIHpwb3NfbWF4LCB6cG9zX2RlZiwgUExBTkVfUFJPUF9aUE9TKTsKLQotCW1zbV9w cm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiYWxwaGEiLAotCQkw eDAsIDAsIDI1NSwgMjU1LCBQTEFORV9QUk9QX0FMUEhBKTsKLQotCWlmICghbWFzdGVyX3BsYW5l X2lkKSB7Ci0JCWlmIChwZHB1LT5waXBlX3NibGstPmNvbW1vbi0+bWF4aGRlY2lleHApIHsKLQkJ CW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCQki aF9kZWNpbWF0ZSIsIDB4MCwgMCwKLQkJCQkJcGRwdS0+cGlwZV9zYmxrLT5jb21tb24tPm1heGhk ZWNpZXhwLCAwLAotCQkJCQlQTEFORV9QUk9QX0hfREVDSU1BVEUpOwotCQl9Ci0KLQkJaWYgKHBk cHUtPnBpcGVfc2Jsay0+Y29tbW9uLT5tYXh2ZGVjaWV4cCkgewotCQkJbXNtX3Byb3BlcnR5X2lu c3RhbGxfcmFuZ2UoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkJCSJ2X2RlY2ltYXRlIiwgMHgw LCAwLAotCQkJCQlwZHB1LT5waXBlX3NibGstPmNvbW1vbi0+bWF4dmRlY2lleHAsIDAsCi0JCQkJ CVBMQU5FX1BST1BfVl9ERUNJTUFURSk7Ci0JCX0KLQotCQlpZiAocGRwdS0+ZmVhdHVyZXMgJiBC SVQoRFBVX1NTUFBfU0NBTEVSX1FTRUVEMykpIHsKLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3Jh bmdlKAotCQkJCQkmcGRwdS0+cHJvcGVydHlfaW5mbywgInNjYWxlcl92MiIsCi0JCQkJCTB4MCwg MCwgfjAsIDAsIFBMQU5FX1BST1BfU0NBTEVSX1YyKTsKLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxs X2Jsb2IoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkJCSJsdXRfZWQiLCAwLCBQTEFORV9QUk9Q X1NDQUxFUl9MVVRfRUQpOwotCQkJbXNtX3Byb3BlcnR5X2luc3RhbGxfYmxvYigmcGRwdS0+cHJv cGVydHlfaW5mbywKLQkJCQkJImx1dF9jaXIiLCAwLAotCQkJCQlQTEFORV9QUk9QX1NDQUxFUl9M VVRfQ0lSKTsKLQkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJnBkcHUtPnByb3BlcnR5X2lu Zm8sCi0JCQkJCSJsdXRfc2VwIiwgMCwKLQkJCQkJUExBTkVfUFJPUF9TQ0FMRVJfTFVUX1NFUCk7 Ci0JCX0gZWxzZSBpZiAocGRwdS0+ZmVhdHVyZXMgJiBEUFVfU1NQUF9TQ0FMRVIpIHsKLQkJCW1z bV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKAotCQkJCQkmcGRwdS0+cHJvcGVydHlfaW5mbywgInNj YWxlcl92MSIsIDB4MCwKLQkJCQkJMCwgfjAsIDAsIFBMQU5FX1BST1BfU0NBTEVSX1YxKTsKLQkJ fQotCi0JCWlmIChwZHB1LT5mZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9DU0MpIHx8Ci0JCSAgICBw ZHB1LT5mZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9DU0NfMTBCSVQpKQotCQkJbXNtX3Byb3BlcnR5 X2luc3RhbGxfdm9sYXRpbGVfcmFuZ2UoCi0JCQkJCSZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiY3Nj X3YxIiwgMHgwLAotCQkJCQkwLCB+MCwgMCwgUExBTkVfUFJPUF9DU0NfVjEpOwotCi0JCWlmIChw ZHB1LT5mZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9IU0lDKSkgewotCQkJc25wcmludGYoZmVhdHVy ZV9uYW1lLCBzaXplb2YoZmVhdHVyZV9uYW1lKSwgIiVzJWQiLAotCQkJCSJEUFVfU1NQUF9IVUVf ViIsCi0JCQkJcGRwdS0+cGlwZV9zYmxrLT5oc2ljX2Jsay52ZXJzaW9uID4+IDE2KTsKLQkJCW1z bV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCWZlYXR1 cmVfbmFtZSwgMCwgMCwgMHhGRkZGRkZGRiwgMCwKLQkJCQlQTEFORV9QUk9QX0hVRV9BREpVU1Qp OwotCQkJc25wcmludGYoZmVhdHVyZV9uYW1lLCBzaXplb2YoZmVhdHVyZV9uYW1lKSwgIiVzJWQi LAotCQkJCSJEUFVfU1NQUF9TQVRVUkFUSU9OX1YiLAotCQkJCXBkcHUtPnBpcGVfc2Jsay0+aHNp Y19ibGsudmVyc2lvbiA+PiAxNik7Ci0JCQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmcGRw dS0+cHJvcGVydHlfaW5mbywKLQkJCQlmZWF0dXJlX25hbWUsIDAsIDAsIDB4RkZGRkZGRkYsIDAs Ci0JCQkJUExBTkVfUFJPUF9TQVRVUkFUSU9OX0FESlVTVCk7Ci0JCQlzbnByaW50ZihmZWF0dXJl X25hbWUsIHNpemVvZihmZWF0dXJlX25hbWUpLCAiJXMlZCIsCi0JCQkJIkRQVV9TU1BQX1ZBTFVF X1YiLAotCQkJCXBkcHUtPnBpcGVfc2Jsay0+aHNpY19ibGsudmVyc2lvbiA+PiAxNik7Ci0JCQlt c21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCQlmZWF0 dXJlX25hbWUsIDAsIDAsIDB4RkZGRkZGRkYsIDAsCi0JCQkJUExBTkVfUFJPUF9WQUxVRV9BREpV U1QpOwotCQkJc25wcmludGYoZmVhdHVyZV9uYW1lLCBzaXplb2YoZmVhdHVyZV9uYW1lKSwgIiVz JWQiLAotCQkJCSJEUFVfU1NQUF9DT05UUkFTVF9WIiwKLQkJCQlwZHB1LT5waXBlX3NibGstPmhz aWNfYmxrLnZlcnNpb24gPj4gMTYpOwotCQkJbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJnBk cHUtPnByb3BlcnR5X2luZm8sCi0JCQkJZmVhdHVyZV9uYW1lLCAwLCAwLCAweEZGRkZGRkZGLCAw LAotCQkJCVBMQU5FX1BST1BfQ09OVFJBU1RfQURKVVNUKTsKLQkJfQotCX0KLQotCWlmIChwZHB1 LT5mZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9FWENMX1JFQ1QpKQotCQltc21fcHJvcGVydHlfaW5z dGFsbF92b2xhdGlsZV9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCSJleGNsX3JlY3Rf djEiLCAweDAsIDAsIH4wLCAwLCBQTEFORV9QUk9QX0VYQ0xfUkVDVF9WMSk7Ci0KLQltc21fcHJv cGVydHlfaW5zdGFsbF9lbnVtKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiYmxlbmRfb3AiLCAweDAs IDAsCi0JCWVfYmxlbmRfb3AsIEFSUkFZX1NJWkUoZV9ibGVuZF9vcCksIFBMQU5FX1BST1BfQkxF TkRfT1ApOwotCi0JbXNtX3Byb3BlcnR5X2luc3RhbGxfZW51bSgmcGRwdS0+cHJvcGVydHlfaW5m bywgInNyY19jb25maWciLCAweDAsIDEsCi0JCWVfc3JjX2NvbmZpZywgQVJSQVlfU0laRShlX3Ny Y19jb25maWcpLCBQTEFORV9QUk9QX1NSQ19DT05GSUcpOwotCi0JaWYgKHBkcHUtPnBpcGVfaHct Pm9wcy5zZXR1cF9zb2xpZGZpbGwpCi0JCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1 LT5wcm9wZXJ0eV9pbmZvLCAiY29sb3JfZmlsbCIsCi0JCQkJMCwgMCwgMHhGRkZGRkZGRiwgMCwg UExBTkVfUFJPUF9DT0xPUl9GSUxMKTsKLQotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZw ZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJInByZWZpbGxfc2l6ZSIsIDB4MCwgMCwgfjAsIDAsCi0J CQlQTEFORV9QUk9QX1BSRUZJTExfU0laRSk7Ci0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2Uo JnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkicHJlZmlsbF90aW1lIiwgMHgwLCAwLCB+MCwgMCwK LQkJCVBMQU5FX1BST1BfUFJFRklMTF9USU1FKTsKLQotCWluZm8gPSBremFsbG9jKHNpemVvZihz dHJ1Y3QgZHB1X2ttc19pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbmZvKSB7Ci0JCURQVV9F UlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIGluZm8gbWVtb3J5XG4iKTsKLQkJcmV0dXJuOwotCX0K LQotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJnBkcHUtPnByb3BlcnR5X2luZm8sICJjYXBh YmlsaXRpZXMiLAotCQlEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwgUExBTkVfUFJPUF9JTkZPKTsK LQlkcHVfa21zX2luZm9fcmVzZXQoaW5mbyk7Ci0KLQlpZiAoIW1hc3Rlcl9wbGFuZV9pZCkgewot CQlmb3JtYXRfbGlzdCA9IHBkcHUtPnBpcGVfc2Jsay0+Zm9ybWF0X2xpc3Q7Ci0JfSBlbHNlIHsK LQkJZm9ybWF0X2xpc3QgPSBwZHB1LT5waXBlX3NibGstPnZpcnRfZm9ybWF0X2xpc3Q7Ci0JCWRw dV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJwcmltYXJ5X3NtYXJ0X3BsYW5lX2lkIiwKLQkJ CQkJCW1hc3Rlcl9wbGFuZV9pZCk7Ci0JfQotCi0JaWYgKGZvcm1hdF9saXN0KSB7Ci0JCWRwdV9r bXNfaW5mb19zdGFydChpbmZvLCAicGl4ZWxfZm9ybWF0cyIpOwotCQl3aGlsZSAoZm9ybWF0X2xp c3QtPmZvdXJjY19mb3JtYXQpIHsKLQkJCWRwdV9rbXNfaW5mb19hcHBlbmRfZm9ybWF0KGluZm8s Ci0JCQkJCWZvcm1hdF9saXN0LT5mb3VyY2NfZm9ybWF0LAotCQkJCQlmb3JtYXRfbGlzdC0+bW9k aWZpZXIpOwotCQkJKytmb3JtYXRfbGlzdDsKLQkJfQotCQlkcHVfa21zX2luZm9fc3RvcChpbmZv KTsKLQl9Ci0KLQlpZiAocGRwdS0+cGlwZV9odyAmJiBwZHB1LT5waXBlX2h3LT5vcHMuZ2V0X3Nj YWxlcl92ZXIpCi0JCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJzY2FsZXJfc3RlcF92 ZXIiLAotCQkJcGRwdS0+cGlwZV9ody0+b3BzLmdldF9zY2FsZXJfdmVyKHBkcHUtPnBpcGVfaHcp KTsKLQotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfbGluZXdpZHRoIiwKLQkJ CXBkcHUtPnBpcGVfc2Jsay0+Y29tbW9uLT5tYXhsaW5ld2lkdGgpOwotCWRwdV9rbXNfaW5mb19h ZGRfa2V5aW50KGluZm8sICJtYXhfdXBzY2FsZSIsCi0JCQlwZHB1LT5waXBlX3NibGstPm1heHVw c2NhbGUpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfZG93bnNjYWxlIiwK LQkJCXBkcHUtPnBpcGVfc2Jsay0+bWF4ZHduc2NhbGUpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5 aW50KGluZm8sICJtYXhfaG9yaXpvbnRhbF9kZWNpIiwKLQkJCXBkcHUtPnBpcGVfc2Jsay0+Y29t bW9uLT5tYXhoZGVjaWV4cCk7Ci0JZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1heF92 ZXJ0aWNhbF9kZWNpIiwKLQkJCXBkcHUtPnBpcGVfc2Jsay0+Y29tbW9uLT5tYXh2ZGVjaWV4cCk7 Ci0JZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1heF9wZXJfcGlwZV9idyIsCi0JCQlw ZHB1LT5waXBlX3NibGstPm1heF9wZXJfcGlwZV9idyAqIDEwMDBMTCk7Ci0JbXNtX3Byb3BlcnR5 X3NldF9ibG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAmcGRwdS0+YmxvYl9pbmZvLAotCQkJaW5m by0+ZGF0YSwgRFBVX0tNU19JTkZPX0RBVEFMRU4oaW5mbyksCi0JCQlQTEFORV9QUk9QX0lORk8p OwotCi0Ja2ZyZWUoaW5mbyk7Ci0KLQlpZiAocGRwdS0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBf TUVNQ09MT1IpKSB7Ci0JCXNucHJpbnRmKGZlYXR1cmVfbmFtZSwgc2l6ZW9mKGZlYXR1cmVfbmFt ZSksICIlcyVkIiwKLQkJCSJEUFVfU1NQUF9TS0lOX0NPTE9SX1YiLAotCQkJcGRwdS0+cGlwZV9z YmxrLT5tZW1jb2xvcl9ibGsudmVyc2lvbiA+PiAxNik7Ci0JCW1zbV9wcm9wZXJ0eV9pbnN0YWxs X2Jsb2IoJnBkcHUtPnByb3BlcnR5X2luZm8sIGZlYXR1cmVfbmFtZSwgMCwKLQkJCVBMQU5FX1BS T1BfU0tJTl9DT0xPUik7Ci0JCXNucHJpbnRmKGZlYXR1cmVfbmFtZSwgc2l6ZW9mKGZlYXR1cmVf bmFtZSksICIlcyVkIiwKLQkJCSJEUFVfU1NQUF9TS1lfQ09MT1JfViIsCi0JCQlwZHB1LT5waXBl X3NibGstPm1lbWNvbG9yX2Jsay52ZXJzaW9uID4+IDE2KTsKLQkJbXNtX3Byb3BlcnR5X2luc3Rh bGxfYmxvYigmcGRwdS0+cHJvcGVydHlfaW5mbywgZmVhdHVyZV9uYW1lLCAwLAotCQkJUExBTkVf UFJPUF9TS1lfQ09MT1IpOwotCQlzbnByaW50ZihmZWF0dXJlX25hbWUsIHNpemVvZihmZWF0dXJl X25hbWUpLCAiJXMlZCIsCi0JCQkiRFBVX1NTUFBfRk9MSUFHRV9DT0xPUl9WIiwKLQkJCXBkcHUt PnBpcGVfc2Jsay0+bWVtY29sb3JfYmxrLnZlcnNpb24gPj4gMTYpOwotCQltc21fcHJvcGVydHlf aW5zdGFsbF9ibG9iKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCBmZWF0dXJlX25hbWUsIDAsCi0JCQlQ TEFORV9QUk9QX0ZPTElBR0VfQ09MT1IpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9k cHVfcGxhbmVfc2V0X2NzY192MShzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LCB2b2lkICp1c3JfcHRy KQotewotCXN0cnVjdCBkcHVfZHJtX2NzY192MSBjc2NfdjE7Ci0JaW50IGk7Ci0KLQlpZiAoIXBk cHUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKLQkJcmV0dXJuOwotCX0KLQot CXBkcHUtPmNzY191c3JfcHRyID0gTlVMTDsKLQlpZiAoIXVzcl9wdHIpIHsKLQkJRFBVX0RFQlVH X1BMQU5FKHBkcHUsICJjc2MgZGF0YSByZW1vdmVkXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlm IChjb3B5X2Zyb21fdXNlcigmY3NjX3YxLCB1c3JfcHRyLCBzaXplb2YoY3NjX3YxKSkpIHsKLQkJ RFBVX0VSUk9SX1BMQU5FKHBkcHUsICJmYWlsZWQgdG8gY29weSBjc2MgZGF0YVxuIik7Ci0JCXJl dHVybjsKLQl9Ci0KLQkvKiBwb3B1bGF0ZSBmcm9tIHVzZXIgc3BhY2UgKi8KLQlmb3IgKGkgPSAw OyBpIDwgRFBVX0NTQ19NQVRSSVhfQ09FRkZfU0laRTsgKytpKQotCQlwZHB1LT5jc2NfY2ZnLmNz Y19tdltpXSA9IGNzY192MS5jdG1fY29lZmZbaV0gPj4gMTY7Ci0JZm9yIChpID0gMDsgaSA8IERQ VV9DU0NfQklBU19TSVpFOyArK2kpIHsKLQkJcGRwdS0+Y3NjX2NmZy5jc2NfcHJlX2J2W2ldID0g Y3NjX3YxLnByZV9iaWFzW2ldOwotCQlwZHB1LT5jc2NfY2ZnLmNzY19wb3N0X2J2W2ldID0gY3Nj X3YxLnBvc3RfYmlhc1tpXTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IERQVV9DU0NfQ0xBTVBfU0la RTsgKytpKSB7Ci0JCXBkcHUtPmNzY19jZmcuY3NjX3ByZV9sdltpXSA9IGNzY192MS5wcmVfY2xh bXBbaV07Ci0JCXBkcHUtPmNzY19jZmcuY3NjX3Bvc3RfbHZbaV0gPSBjc2NfdjEucG9zdF9jbGFt cFtpXTsKLQl9Ci0JcGRwdS0+Y3NjX3Vzcl9wdHIgPSAmcGRwdS0+Y3NjX2NmZzsKLX0KLQotc3Rh dGljIGlubGluZSB2b2lkIF9kcHVfcGxhbmVfc2V0X3NjYWxlcl92MShzdHJ1Y3QgZHB1X3BsYW5l ICpwZHB1LAotCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUsIHZvaWQgKnVzcikKLXsK LQlzdHJ1Y3QgZHB1X2RybV9zY2FsZXJfdjEgc2NhbGVfdjE7Ci0Jc3RydWN0IGRwdV9od19waXhl bF9leHQgKnBlOwotCWludCBpOwotCi0JaWYgKCFwZHB1IHx8ICFwc3RhdGUpIHsKLQkJRFBVX0VS Uk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXBzdGF0ZS0+ c2NhbGVyX2NoZWNrX3N0YXRlID0gRFBVX1BMQU5FX1NDTENIRUNLX05PTkU7Ci0JaWYgKCF1c3Ip IHsKLQkJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJzY2FsZSBkYXRhIHJlbW92ZWRcbiIpOwotCQly ZXR1cm47Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZzY2FsZV92MSwgdXNyLCBzaXplb2Yo c2NhbGVfdjEpKSkgewotCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImZhaWxlZCB0byBjb3B5IHNj YWxlIGRhdGFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogZm9yY2UgcHJvcGVydHkgdG8gYmUg ZGlydHksIGV2ZW4gaWYgdGhlIHBvaW50ZXIgZGlkbid0IGNoYW5nZSAqLwotCW1zbV9wcm9wZXJ0 eV9zZXRfZGlydHkoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkmcHN0YXRlLT5wcm9wZXJ0eV9z dGF0ZSwgUExBTkVfUFJPUF9TQ0FMRVJfVjEpOwotCi0JLyogcG9wdWxhdGUgZnJvbSB1c2VyIHNw YWNlICovCi0JcGUgPSAmcHN0YXRlLT5waXhlbF9leHQ7Ci0JbWVtc2V0KHBlLCAwLCBzaXplb2Yo c3RydWN0IGRwdV9od19waXhlbF9leHQpKTsKLQlmb3IgKGkgPSAwOyBpIDwgRFBVX01BWF9QTEFO RVM7IGkrKykgewotCQlwZS0+aW5pdF9waGFzZV94W2ldID0gc2NhbGVfdjEuaW5pdF9waGFzZV94 W2ldOwotCQlwZS0+cGhhc2Vfc3RlcF94W2ldID0gc2NhbGVfdjEucGhhc2Vfc3RlcF94W2ldOwot CQlwZS0+aW5pdF9waGFzZV95W2ldID0gc2NhbGVfdjEuaW5pdF9waGFzZV95W2ldOwotCQlwZS0+ cGhhc2Vfc3RlcF95W2ldID0gc2NhbGVfdjEucGhhc2Vfc3RlcF95W2ldOwotCi0JCXBlLT5ob3J6 X2ZpbHRlcltpXSA9IHNjYWxlX3YxLmhvcnpfZmlsdGVyW2ldOwotCQlwZS0+dmVydF9maWx0ZXJb aV0gPSBzY2FsZV92MS52ZXJ0X2ZpbHRlcltpXTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IERQVV9N QVhfUExBTkVTOyBpKyspIHsKLQkJcGUtPmxlZnRfZnRjaFtpXSA9IHNjYWxlX3YxLnBlLmxlZnRf ZnRjaFtpXTsKLQkJcGUtPnJpZ2h0X2Z0Y2hbaV0gPSBzY2FsZV92MS5wZS5yaWdodF9mdGNoW2ld OwotCQlwZS0+bGVmdF9ycHRbaV0gPSBzY2FsZV92MS5wZS5sZWZ0X3JwdFtpXTsKLQkJcGUtPnJp Z2h0X3JwdFtpXSA9IHNjYWxlX3YxLnBlLnJpZ2h0X3JwdFtpXTsKLQkJcGUtPnJvaV93W2ldID0g c2NhbGVfdjEucGUubnVtX2V4dF9weGxzX2xyW2ldOwotCi0JCXBlLT50b3BfZnRjaFtpXSA9IHNj YWxlX3YxLnBlLnRvcF9mdGNoW2ldOwotCQlwZS0+YnRtX2Z0Y2hbaV0gPSBzY2FsZV92MS5wZS5i dG1fZnRjaFtpXTsKLQkJcGUtPnRvcF9ycHRbaV0gPSBzY2FsZV92MS5wZS50b3BfcnB0W2ldOwot CQlwZS0+YnRtX3JwdFtpXSA9IHNjYWxlX3YxLnBlLmJ0bV9ycHRbaV07Ci0JCXBlLT5yb2lfaFtp XSA9IHNjYWxlX3YxLnBlLm51bV9leHRfcHhsc190YltpXTsKLQl9Ci0KLQlwc3RhdGUtPnNjYWxl cl9jaGVja19zdGF0ZSA9IERQVV9QTEFORV9TQ0xDSEVDS19TQ0FMRVJfVjE7Ci0KLQlEUFVfRVZU MzJfVkVSQk9TRShEUk1JRCgmcGRwdS0+YmFzZSkpOwotCURQVV9ERUJVR19QTEFORShwZHB1LCAi dXNlciBwcm9wZXJ0eSBkYXRhIGNvcGllZFxuIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBf ZHB1X3BsYW5lX3NldF9zY2FsZXJfdjIoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKLQkJc3RydWN0 IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlLCB2b2lkICp1c3IpCi17Ci0Jc3RydWN0IGRwdV9kcm1f c2NhbGVyX3YyIHNjYWxlX3YyOwotCXN0cnVjdCBkcHVfaHdfcGl4ZWxfZXh0ICpwZTsKLQlpbnQg aTsKLQlzdHJ1Y3QgZHB1X2h3X3NjYWxlcjNfY2ZnICpjZmc7Ci0KLQlpZiAoIXBkcHUgfHwgIXBz dGF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIpOwotCQlyZXR1cm47 Ci0JfQotCi0JY2ZnID0gJnBzdGF0ZS0+c2NhbGVyM19jZmc7Ci0JcHN0YXRlLT5zY2FsZXJfY2hl Y2tfc3RhdGUgPSBEUFVfUExBTkVfU0NMQ0hFQ0tfTk9ORTsKLQlpZiAoIXVzcikgewotCQlEUFVf REVCVUdfUExBTkUocGRwdSwgInNjYWxlIGRhdGEgcmVtb3ZlZFxuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJnNjYWxlX3YyLCB1c3IsIHNpemVvZihzY2FsZV92Mikp KSB7Ci0JCURQVV9FUlJPUl9QTEFORShwZHB1LCAiZmFpbGVkIHRvIGNvcHkgc2NhbGUgZGF0YVxu Iik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBkZXRhY2gvaWdub3JlIHVzZXIgZGF0YSBpZiAnZGlz YWJsZWQnICovCi0JaWYgKCFzY2FsZV92Mi5lbmFibGUpIHsKLQkJRFBVX0RFQlVHX1BMQU5FKHBk cHUsICJzY2FsZSBkYXRhIHJlbW92ZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogZm9yY2Ug cHJvcGVydHkgdG8gYmUgZGlydHksIGV2ZW4gaWYgdGhlIHBvaW50ZXIgZGlkbid0IGNoYW5nZSAq LwotCW1zbV9wcm9wZXJ0eV9zZXRfZGlydHkoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkmcHN0 YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgUExBTkVfUFJPUF9TQ0FMRVJfVjIpOwotCi0JLyogcG9wdWxh dGUgZnJvbSB1c2VyIHNwYWNlICovCi0JZHB1X3NldF9zY2FsZXJfdjIoY2ZnLCAmc2NhbGVfdjIp OwotCi0JcGUgPSAmcHN0YXRlLT5waXhlbF9leHQ7Ci0JbWVtc2V0KHBlLCAwLCBzaXplb2Yoc3Ry dWN0IGRwdV9od19waXhlbF9leHQpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBEUFVfTUFYX1BMQU5F UzsgaSsrKSB7Ci0JCXBlLT5sZWZ0X2Z0Y2hbaV0gPSBzY2FsZV92Mi5wZS5sZWZ0X2Z0Y2hbaV07 Ci0JCXBlLT5yaWdodF9mdGNoW2ldID0gc2NhbGVfdjIucGUucmlnaHRfZnRjaFtpXTsKLQkJcGUt PmxlZnRfcnB0W2ldID0gc2NhbGVfdjIucGUubGVmdF9ycHRbaV07Ci0JCXBlLT5yaWdodF9ycHRb aV0gPSBzY2FsZV92Mi5wZS5yaWdodF9ycHRbaV07Ci0JCXBlLT5yb2lfd1tpXSA9IHNjYWxlX3Yy LnBlLm51bV9leHRfcHhsc19scltpXTsKLQotCQlwZS0+dG9wX2Z0Y2hbaV0gPSBzY2FsZV92Mi5w ZS50b3BfZnRjaFtpXTsKLQkJcGUtPmJ0bV9mdGNoW2ldID0gc2NhbGVfdjIucGUuYnRtX2Z0Y2hb aV07Ci0JCXBlLT50b3BfcnB0W2ldID0gc2NhbGVfdjIucGUudG9wX3JwdFtpXTsKLQkJcGUtPmJ0 bV9ycHRbaV0gPSBzY2FsZV92Mi5wZS5idG1fcnB0W2ldOwotCQlwZS0+cm9pX2hbaV0gPSBzY2Fs ZV92Mi5wZS5udW1fZXh0X3B4bHNfdGJbaV07Ci0JfQotCXBzdGF0ZS0+c2NhbGVyX2NoZWNrX3N0 YXRlID0gRFBVX1BMQU5FX1NDTENIRUNLX1NDQUxFUl9WMl9DSEVDSzsKLQotCURQVV9FVlQzMl9W RVJCT1NFKERSTUlEKCZwZHB1LT5iYXNlKSwgY2ZnLT5lbmFibGUsIGNmZy0+ZGUuZW5hYmxlLAot CQkJY2ZnLT5zcmNfd2lkdGhbMF0sIGNmZy0+c3JjX2hlaWdodFswXSwKLQkJCWNmZy0+ZHN0X3dp ZHRoLCBjZmctPmRzdF9oZWlnaHQpOwotCURQVV9ERUJVR19QTEFORShwZHB1LCAidXNlciBwcm9w ZXJ0eSBkYXRhIGNvcGllZFxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfc2V0X2V4 Y2xfcmVjdF92MShzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAotCQlzdHJ1Y3QgZHB1X3BsYW5lX3N0 YXRlICpwc3RhdGUsIHZvaWQgKnVzcl9wdHIpCi17Ci0Jc3RydWN0IGRybV9jbGlwX3JlY3QgZXhj bF9yZWN0X3YxOwotCi0JaWYgKCFwZHB1KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwbGFuZVxu Iik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIXVzcl9wdHIpIHsKLQkJRFBVX0RFQlVHX1BMQU5F KHBkcHUsICJpbnZhbGlkICBleGNsX3JlY3QgdXNlciBkYXRhXG4iKTsKLQkJcmV0dXJuOwotCX0K LQotCWlmIChjb3B5X2Zyb21fdXNlcigmZXhjbF9yZWN0X3YxLCB1c3JfcHRyLCBzaXplb2YoZXhj bF9yZWN0X3YxKSkpIHsKLQkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsICJmYWlsZWQgdG8gY29weSBl eGNsX3JlY3QgZGF0YVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBwb3B1bGF0ZSBmcm9tIHVz ZXIgc3BhY2UgKi8KLQlwc3RhdGUtPmV4Y2xfcmVjdC54ID0gZXhjbF9yZWN0X3YxLngxOwotCXBz dGF0ZS0+ZXhjbF9yZWN0LnkgPSBleGNsX3JlY3RfdjEueTE7Ci0JcHN0YXRlLT5leGNsX3JlY3Qu dyA9IGV4Y2xfcmVjdF92MS54MiAtIGV4Y2xfcmVjdF92MS54MTsKLQlwc3RhdGUtPmV4Y2xfcmVj dC5oID0gZXhjbF9yZWN0X3YxLnkyIC0gZXhjbF9yZWN0X3YxLnkxOwotCi0JRFBVX0RFQlVHX1BM QU5FKHBkcHUsICJleGNsX3JlY3Q6IHslZCwlZCwlZCwlZH1cbiIsCi0JCQlwc3RhdGUtPmV4Y2xf cmVjdC54LCBwc3RhdGUtPmV4Y2xfcmVjdC55LAotCQkJcHN0YXRlLT5leGNsX3JlY3QudywgcHN0 YXRlLT5leGNsX3JlY3QuaCk7CiB9CiAKIHN0YXRpYyBpbnQgZHB1X3BsYW5lX2F0b21pY19zZXRf cHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCkBAIC0yNjI0LDcgKzE1MjksNyBAQCBz dGF0aWMgaW50IGRwdV9wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAogewogCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSBwbGFuZSA/IHRvX2RwdV9wbGFu ZShwbGFuZSkgOiBOVUxMOwogCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQlpbnQg aWR4LCByZXQgPSAtRUlOVkFMOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJRFBVX0RFQlVHX1BM QU5FKHBkcHUsICJcbiIpOwogCkBAIC0yNjM2LDMxICsxNTQxLDYgQEAgc3RhdGljIGludCBkcHVf cGxhbmVfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJcHN0 YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHN0YXRlKTsKIAkJcmV0ID0gbXNtX3Byb3BlcnR5X2F0 b21pY19zZXQoJnBkcHUtPnByb3BlcnR5X2luZm8sCiAJCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3Rh dGUsIHByb3BlcnR5LCB2YWwpOwotCQlpZiAoIXJldCkgewotCQkJaWR4ID0gbXNtX3Byb3BlcnR5 X2luZGV4KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCQlwcm9wZXJ0eSk7Ci0JCQlzd2l0Y2gg KGlkeCkgewotCQkJY2FzZSBQTEFORV9QUk9QX0NTQ19WMToKLQkJCQlfZHB1X3BsYW5lX3NldF9j c2NfdjEocGRwdSwKLQkJCQkJCSAgICAgIHU2NF90b191c2VyX3B0cih2YWwpKTsKLQkJCQlicmVh azsKLQkJCWNhc2UgUExBTkVfUFJPUF9TQ0FMRVJfVjE6Ci0JCQkJX2RwdV9wbGFuZV9zZXRfc2Nh bGVyX3YxKHBkcHUsIHBzdGF0ZSwKLQkJCQkJCQkgdTY0X3RvX3VzZXJfcHRyKHZhbCkpOwotCQkJ CWJyZWFrOwotCQkJY2FzZSBQTEFORV9QUk9QX1NDQUxFUl9WMjoKLQkJCQlfZHB1X3BsYW5lX3Nl dF9zY2FsZXJfdjIocGRwdSwgcHN0YXRlLAotCQkJCQkJCSB1NjRfdG9fdXNlcl9wdHIodmFsKSk7 Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFBMQU5FX1BST1BfRVhDTF9SRUNUX1YxOgotCQkJCV9kcHVf cGxhbmVfc2V0X2V4Y2xfcmVjdF92MShwZHB1LCBwc3RhdGUsCi0JCQkJCQl1NjRfdG9fdXNlcl9w dHIodmFsKSk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCS8qIG5vdGhpbmcgdG8gZG8g Ki8KLQkJCQlicmVhazsKLQkJCX0KLQkJfQogCX0KIAogCURQVV9ERUJVR19QTEFORShwZHB1LCAi JXNbJWRdIDw9IDB4JWxseCByZXQ9JWRcbiIsCkBAIC0yNzcyLDcgKzE2NTIsNiBAQCBzdGF0aWMg dm9pZCBkcHVfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlt c21fcHJvcGVydHlfZHVwbGljYXRlX3N0YXRlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCBvbGRfc3Rh dGUsIHBzdGF0ZSwKIAkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBwc3RhdGUtPnByb3BlcnR5 X3ZhbHVlcyk7CiAKLQlwc3RhdGUtPmRpcnR5ID0gMHgwOwogCXBzdGF0ZS0+cGVuZGluZyA9IGZh bHNlOwogCiAJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUs ICZwc3RhdGUtPmJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUu aAppbmRleCAyNWI2YjE1Li5hMDZjOGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfcGxhbmUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfcGxhbmUuaApAQCAtMjYsMzIgKzI2LDYgQEAKICNpbmNsdWRlICJkcHVfaHdfbWRzcy5o IgogI2luY2x1ZGUgImRwdV9od19zc3BwLmgiCiAKLS8qIGRpcnR5IGJpdHMgZm9yIHVwZGF0ZSBm dW5jdGlvbiAqLwotI2RlZmluZSBEUFVfUExBTkVfRElSVFlfUkVDVFMJMHgxCi0jZGVmaW5lIERQ VV9QTEFORV9ESVJUWV9GT1JNQVQJMHgyCi0jZGVmaW5lIERQVV9QTEFORV9ESVJUWV9TSEFSUEVO CTB4NAotI2RlZmluZSBEUFVfUExBTkVfRElSVFlfUEVSRgkweDgKLSNkZWZpbmUgRFBVX1BMQU5F X0RJUlRZX0FMTAkweEZGRkZGRkZGCi0KLS8qKgotICogZW51bSBkcHVfcGxhbmVfc2NsY2hlY2tf c3RhdGUgLSBVc2VyIHNjYWxlciBkYXRhIHN0YXR1cwotICoKLSAqIEBEUFVfUExBTkVfU0NMQ0hF Q0tfTk9ORTogTm8gdXNlciBkYXRhIHByb3ZpZGVkCi0gKiBARFBVX1BMQU5FX1NDTENIRUNLX0lO VkFMSUQ6IEludmFsaWQgdXNlciBkYXRhIHByb3ZpZGVkCi0gKiBARFBVX1BMQU5FX1NDTENIRUNL X1NDQUxFUl9WMTogVmFsaWQgc2NhbGVyIHYxIGRhdGEKLSAqIEBEUFVfUExBTkVfU0NMQ0hFQ0tf U0NBTEVSX1YxX0NIRUNLOiBVbmNoZWNrZWQgc2NhbGVyIHYxIGRhdGEKLSAqIEBEUFVfUExBTkVf U0NMQ0hFQ0tfU0NBTEVSX1YyOiBWYWxpZCBzY2FsZXIgdjIgZGF0YQotICogQERQVV9QTEFORV9T Q0xDSEVDS19TQ0FMRVJfVjJfQ0hFQ0s6IFVuY2hlY2tlZCBzY2FsZXIgdjIgZGF0YQotICovCi1l bnVtIGRwdV9wbGFuZV9zY2xjaGVja19zdGF0ZSB7Ci0JRFBVX1BMQU5FX1NDTENIRUNLX05PTkUs Ci0JRFBVX1BMQU5FX1NDTENIRUNLX0lOVkFMSUQsCi0JRFBVX1BMQU5FX1NDTENIRUNLX1NDQUxF Ul9WMSwKLQlEUFVfUExBTkVfU0NMQ0hFQ0tfU0NBTEVSX1YxX0NIRUNLLAotCURQVV9QTEFORV9T Q0xDSEVDS19TQ0FMRVJfVjIsCi0JRFBVX1BMQU5FX1NDTENIRUNLX1NDQUxFUl9WMl9DSEVDSywK LX07Ci0KIC8qKgogICogc3RydWN0IGRwdV9wbGFuZV9zdGF0ZTogRGVmaW5lIGRwdSBleHRlbnNp b24gb2YgZHJtIHBsYW5lIHN0YXRlIG9iamVjdAogICogQGJhc2U6CWJhc2UgZHJtIHBsYW5lIHN0 YXRlIG9iamVjdApAQCAtNjAsOCArMzQsNiBAQCBlbnVtIGRwdV9wbGFuZV9zY2xjaGVja19zdGF0 ZSB7CiAgKiBAYXNwYWNlOglwb2ludGVyIHRvIGFkZHJlc3Mgc3BhY2UgZm9yIGlucHV0L291dHB1 dCBidWZmZXJzCiAgKiBAaW5wdXRfZmVuY2U6CWRlcmVmZXJlbmNlZCBpbnB1dCBmZW5jZSBwb2lu dGVyCiAgKiBAc3RhZ2U6CWFzc2lnbmVkIGJ5IGNydGMgYmxlbmRlcgotICogQGV4Y2xfcmVjdDoJ ZXhjbHVzaW9uIHJlY3QgdmFsdWVzCi0gKiBAZGlydHk6CWJpdG1hc2sgZm9yIHdoaWNoIHBpcGUg aC93IGNvbmZpZyBmdW5jdGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkCiAgKiBAbXVsdGlyZWN0X2lu ZGV4OiBpbmRleCBvZiB0aGUgcmVjdGFuZ2xlIG9mIFNTUFAKICAqIEBtdWx0aXJlY3RfbW9kZTog cGFyYWxsZWwgb3IgdGltZSBtdWx0aXBsZXggbXVsdGlyZWN0IG1vZGUKICAqIEBwZW5kaW5nOgl3 aGV0aGVyIHRoZSBjdXJyZW50IHVwZGF0ZSBpcyBzdGlsbCBwZW5kaW5nCkBAIC03Nyw4ICs0OSw2 IEBAIHN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgewogCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3Bh Y2UgKmFzcGFjZTsKIAl2b2lkICppbnB1dF9mZW5jZTsKIAllbnVtIGRwdV9zdGFnZSBzdGFnZTsK LQlzdHJ1Y3QgZHB1X3JlY3QgZXhjbF9yZWN0OwotCXVpbnQzMl90IGRpcnR5OwogCXVpbnQzMl90 IG11bHRpcmVjdF9pbmRleDsKIAl1aW50MzJfdCBtdWx0aXJlY3RfbW9kZTsKIAlib29sIHBlbmRp bmc7CkBAIC04Niw3ICs1Niw2IEBAIHN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgewogCS8qIHNjYWxl ciBjb25maWd1cmF0aW9uICovCiAJc3RydWN0IGRwdV9od19zY2FsZXIzX2NmZyBzY2FsZXIzX2Nm ZzsKIAlzdHJ1Y3QgZHB1X2h3X3BpeGVsX2V4dCBwaXhlbF9leHQ7Ci0JZW51bSBkcHVfcGxhbmVf c2NsY2hlY2tfc3RhdGUgc2NhbGVyX2NoZWNrX3N0YXRlOwogCiAJc3RydWN0IGRwdV9od19waXBl X2NkcF9jZmcgY2RwX2NmZzsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfcmVnX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X3JlZ19kbWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxZTA3MS4uMDAwMDAw MAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcmVnX2RtYS5jCisrKyAv ZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBU aGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICov Ci0KLSNpbmNsdWRlICJkcHVfcmVnX2RtYS5oIgotI2luY2x1ZGUgImRwdV9od19yZWdfZG1hX3Yx LmgiCi0jaW5jbHVkZSAiZHB1X2RiZy5oIgotCi1zdGF0aWMgaW50IGRlZmF1bHRfY2hlY2tfc3Vw cG9ydChlbnVtIGRwdV9yZWdfZG1hX2ZlYXR1cmVzIGZlYXR1cmUsCi0JCSAgICAgZW51bSBkcHVf cmVnX2RtYV9ibGsgYmxrLAotCQkgICAgIGJvb2wgKmlzX3N1cHBvcnRlZCkKLXsKLQotCWlmICgh aXNfc3VwcG9ydGVkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCSppc19zdXBwb3J0ZWQgPSBmYWxz ZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkZWZhdWx0X3NldHVwX3BheWxvYWQoc3Ry dWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZykKLXsKLQlEUk1fRVJST1IoIm5vdCBp bXBsZW1lbnRlZFxuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgZGVmYXVs dF9raWNrX29mZihzdHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcgKmNmZykKLXsKLQlEUk1f RVJST1IoIm5vdCBpbXBsZW1lbnRlZFxuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci0KLX0KLQotc3Rh dGljIGludCBkZWZhdWx0X3Jlc2V0KHN0cnVjdCBkcHVfaHdfY3RsICpjdGwpCi17Ci0JRFJNX0VS Uk9SKCJub3QgaW1wbGVtZW50ZWRcbiIpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdHJ1Y3Qg ZHB1X3JlZ19kbWFfYnVmZmVyICpkZWZhdWx0X2FsbG9jX3JlZ19kbWFfYnVmKHUzMiBzaXplKQot ewotCURSTV9FUlJPUigibm90IGltcGxlbWVudGVkXG4iKTsKLQlyZXR1cm4gRVJSX1BUUigtRUlO VkFMKTsKLX0KLQotaW50IGRlZmF1bHRfZGVhbGxvY19yZWdfZG1hKHN0cnVjdCBkcHVfcmVnX2Rt YV9idWZmZXIgKmx1dF9idWYpCi17Ci0JRFJNX0VSUk9SKCJub3QgaW1wbGVtZW50ZWRcbiIpOwot CXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGRlZmF1bHRfYnVmX3Jlc2V0X3JlZ19k bWEoc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqbHV0X2J1ZikKLXsKLQlEUk1fRVJST1IoIm5v dCBpbXBsZW1lbnRlZFxuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgZGVm YXVsdF9sYXN0X2NvbW1hbmQoc3RydWN0IGRwdV9od19jdGwgKmN0bCwKLQkJZW51bSBkcHVfcmVn X2RtYV9xdWV1ZSBxKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRwdV9od19y ZWdfZG1hIHJlZ19kbWEgPSB7Ci0JLm9wcyA9IHtkZWZhdWx0X2NoZWNrX3N1cHBvcnQsIGRlZmF1 bHRfc2V0dXBfcGF5bG9hZCwKLQkJZGVmYXVsdF9raWNrX29mZiwgZGVmYXVsdF9yZXNldCwgZGVm YXVsdF9hbGxvY19yZWdfZG1hX2J1ZiwKLQkJZGVmYXVsdF9kZWFsbG9jX3JlZ19kbWEsIGRlZmF1 bHRfYnVmX3Jlc2V0X3JlZ19kbWEsCi0JCWRlZmF1bHRfbGFzdF9jb21tYW5kfSwKLX07Ci0KLWlu dCBkcHVfcmVnX2RtYV9pbml0KHZvaWQgX19pb21lbSAqYWRkciwgc3RydWN0IGRwdV9tZHNzX2Nm ZyAqbSwKLQkJc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYg KCFhZGRyIHx8ICFtIHx8ICFkZXYpIHsKLQkJRFJNX0RFQlVHKCJpbnZhbGlkIGFkZHIgJXBLIGNh dGFsb2cgJXBLIGRldiAlcEtcbiIsIGFkZHIsIG0sCi0JCQkJZGV2KTsKLQkJcmV0dXJuIDA7Ci0J fQotCi0JcmVnX2RtYS5kcm1fZGV2ID0gZGV2OwotCXJlZ19kbWEuY2FwcyA9ICZtLT5kbWFfY2Zn OwotCXJlZ19kbWEuYWRkciA9IGFkZHI7Ci0KLQlpZiAoIW0tPnJlZ19kbWFfY291bnQpCi0JCXJl dHVybiAwOwotCi0Jc3dpdGNoIChyZWdfZG1hLmNhcHMtPnZlcnNpb24pIHsKLQljYXNlIDE6Ci0J CXJjID0gaW5pdF92MSgmcmVnX2RtYSk7Ci0JCWlmIChyYykKLQkJCURSTV9ERUJVRygiaW5pdCB2 MSBkbWEgb3BzIGZhaWxlZFxuIik7Ci0JCWVsc2UKLQkJCWRwdV9kYmdfcmVnX3JlZ2lzdGVyX2Jh c2UoInJlZ19kbWEiLCBhZGRyLAotCQkJCQlyZWdfZG1hLmNhcHMtPmxlbik7Ci0JCWJyZWFrOwot CWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgZHB1X2h3 X3JlZ19kbWFfb3BzICpkcHVfcmVnX2RtYV9nZXRfb3BzKHZvaWQpCi17Ci0JcmV0dXJuICZyZWdf ZG1hLm9wczsKLX0KLQotdm9pZCBkcHVfcmVnX2RtYV9kZWluaXQodm9pZCkKLXsKLQlzdHJ1Y3Qg ZHB1X2h3X3JlZ19kbWEgb3AgPSB7Ci0JLm9wcyA9IHtkZWZhdWx0X2NoZWNrX3N1cHBvcnQsIGRl ZmF1bHRfc2V0dXBfcGF5bG9hZCwKLQkJZGVmYXVsdF9raWNrX29mZiwgZGVmYXVsdF9yZXNldCwg ZGVmYXVsdF9hbGxvY19yZWdfZG1hX2J1ZiwKLQkJZGVmYXVsdF9kZWFsbG9jX3JlZ19kbWEsIGRl ZmF1bHRfYnVmX3Jlc2V0X3JlZ19kbWEsCi0JCWRlZmF1bHRfbGFzdF9jb21tYW5kfSwKLQl9Owot Ci0JaWYgKCFyZWdfZG1hLmRybV9kZXYgfHwgIXJlZ19kbWEuY2FwcykKLQkJcmV0dXJuOwotCi0J c3dpdGNoIChyZWdfZG1hLmNhcHMtPnZlcnNpb24pIHsKLQljYXNlIDE6Ci0JCWRlaW5pdF92MSgp OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JbWVtc2V0KCZyZWdfZG1hLCAw LCBzaXplb2YocmVnX2RtYSkpOwotCW1lbWNweSgmcmVnX2RtYS5vcHMsICZvcC5vcHMsIHNpemVv ZihvcC5vcHMpKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9yZWdfZG1hLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcmVnX2Rt YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmI5MmVkLi4wMDAwMDAwCi0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9yZWdfZG1hLmgKKysrIC9kZXYvbnVs bApAQCAtMSwzMTAgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lm bmRlZiBfRFBVX1JFR19ETUFfSAotI2RlZmluZSBfRFBVX1JFR19ETUFfSAotCi0jaW5jbHVkZSAi bXNtX2Rydi5oIgotI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgiCi0jaW5jbHVkZSAiZHB1X2h3 X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdfdG9wLmgiCi0jaW5jbHVkZSAiZHB1X2h3X3V0aWwu aCIKLQotLyoqCi0gKiBlbnVtIGRwdV9yZWdfZG1hX29wIC0gZGVmaW5lcyBvcGVyYXRpb25zIHN1 cHBvcnRlZCBieSByZWcgZG1hCi0gKiBAUkVHX0RNQV9SRUFEOiBSZWFkIHRoZSBoaXN0b2dyYW0g aW50byBidWZmZXIgcHJvdmlkZWQKLSAqIEBSRUdfRE1BX1dSSVRFOiBXcml0ZSB0aGUgcmVnIGRt YSBjb25maWd1cmF0aW9uIGludG8gTURQIGJsb2NrCi0gKiBAUkVHX0RNQV9PUF9NQVg6IE1heCBv cGVyYXRpb24gd2hpY2ggaW5kaWNhdGVzIHRoYXQgb3AgaXMgaW52YWxpZAotICovCi1lbnVtIGRw dV9yZWdfZG1hX29wIHsKLQlSRUdfRE1BX1JFQUQsCi0JUkVHX0RNQV9XUklURSwKLQlSRUdfRE1B X09QX01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRwdV9yZWdfZG1hX3JlYWRfc2VsIC0gZGVmaW5l cyB0aGUgYmxvY2tzIGZvciBoaXN0b2dyYW0gcmVhZAotICogQERTUFAwX0hJU1Q6IHNlbGVjdCBk c3BwMAotICogQERTUFAxX0hJU1Q6IHNlbGVjdCBkc3BwMQotICogQERTUFAyX0hJU1Q6IHNlbGVj dCBkc3BwMgotICogQERTUFAzX0hJU1Q6IHNlbGVjdCBkc3BwMwotICogQERTUFBfSElTVF9NQVg6 IGludmFsaWQgc2VsZWN0aW9uCi0gKi8KLWVudW0gZHB1X3JlZ19kbWFfcmVhZF9zZWwgewotCURT UFAwX0hJU1QsCi0JRFNQUDFfSElTVCwKLQlEU1BQMl9ISVNULAotCURTUFAzX0hJU1QsCi0JRFNQ UF9ISVNUX01BWCwKLX07Ci0KLS8qKgotICogZW51bSBkcHVfcmVnX2RtYV9mZWF0dXJlcyAtIGRl ZmluZXMgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHJlZyBkbWEKLSAqIEBRU0VFRDogcXNlZWQgZmVh dHVyZQotICogQEdBTVVUOiBnYW11dCBmZWF0dXJlCi0gKiBASUdDOiBpbnZlcnNlIGdhbW1hIGNv cnJlY3Rpb24KLSAqIEBQQ0M6IHBvbHlub21pY2FsIGNvbG9yIGNvcnJlY3Rpb24KLSAqIEBWTFVU OiBQQSB2bHV0Ci0gKiBATUVNX0NPTE9SOiBtZW1vcnkgY29sb3IKLSAqIEBTSVhfWk9ORTogc2l4 IHpvbmUKLSAqIEBIU0lDOiBIdWUsIHNhdHVyYXRpb24gYW5kIGNvbnRyYXN0Ci0gKiBAR0M6IGdh bW1hIGNvcnJlY3Rpb24KLSAqIEBSRUdfRE1BX0ZFQVRVUkVTX01BWDogaW52YWxpZCBzZWxlY3Rp b24KLSAqLwotZW51bSBkcHVfcmVnX2RtYV9mZWF0dXJlcyB7Ci0JUVNFRUQsCi0JR0FNVVQsCi0J SUdDLAotCVBDQywKLQlWTFVULAotCU1FTV9DT0xPUiwKLQlTSVhfWk9ORSwKLQlIU0lDLAotCUdD LAotCVJFR19ETUFfRkVBVFVSRVNfTUFYLAotfTsKLQotLyoqCi0gKiBlbnVtIGRwdV9yZWdfZG1h X3F1ZXVlIC0gZGVmaW5lcyByZWcgZG1hIHdyaXRlIHF1ZXVlIHZhbHVlcwotICogQERNQV9DVExf UVVFVUUwOiBzZWxlY3QgcXVldWUwCi0gKiBARE1BX0NUTF9RVUVVRTE6IHNlbGVjdCBxdWV1ZTEK LSAqIEBETUFfQ1RMX1FVRVVFX01BWDogaW52YWxpZCBzZWxlY3Rpb24KLSAqLwotZW51bSBkcHVf cmVnX2RtYV9xdWV1ZSB7Ci0JRE1BX0NUTF9RVUVVRTAsCi0JRE1BX0NUTF9RVUVVRTEsCi0JRE1B X0NUTF9RVUVVRV9NQVgsCi19OwotCi0vKioKLSAqIGVudW0gZHB1X3JlZ19kbWFfdHJpZ2dlcl9t b2RlIC0gZGVmaW5lcyByZWcgZG1hIG9wcyB0cmlnZ2VyIG1vZGUKLSAqIEBXUklURV9JTU1FRElB VEU6IHRyaWdnZXIgd3JpdGUgb3AgaW1tZWRpYXRlbHkKLSAqIEBXUklURV9UUklHR0VSOiB0cmln Z2VyIHdyaXRlIG9wIHdoZW4gc3cgdHJpZ2dlciBpcyBpc3N1ZWQKLSAqIEBSRUFEX0lNTUVESUFU RTogdHJpZ2dlciByZWFkIG9wIGltbWVkaWF0ZWx5Ci0gKiBAUkVBRF9UUklHR0VSOiB0cmlnZ2Vy IHJlYWQgb3Agd2hlbiBzdyB0cmlnZ2VyIGlzIGlzc3VlZAotICogQFRJR0dFUl9NQVg6IGludmFs aWQgdHJpZ2dlciBzZWxlY3Rpb24KLSAqLwotZW51bSBkcHVfcmVnX2RtYV90cmlnZ2VyX21vZGUg ewotCVdSSVRFX0lNTUVESUFURSwKLQlXUklURV9UUklHR0VSLAotCVJFQURfSU1NRURJQVRFLAot CVJFQURfVFJJR0dFUiwKLQlUSUdHRVJfTUFYLAotfTsKLQotLyoqCi0gKiBlbnVtIGRwdV9yZWdf ZG1hX3NldHVwX29wcyAtIGRlZmluZXMgcmVnIGRtYSB3cml0ZSBjb25maWd1cmF0aW9uCi0gKiBA SFdfQkxLX1NFTEVDVDogb3AgZm9yIHNlbGVjdGluZyB0aGUgaGFyZHdhcmUgYmxvY2sKLSAqIEBS RUdfU0lOR0xFX1dSSVRFOiBvcCBmb3Igd3JpdGluZyBzaW5nbGUgcmVnaXN0ZXIgdmFsdWUKLSAq ICAgICAgICAgICAgICAgICAgICBhdCB0aGUgYWRkcmVzcyBwcm92aWRlZAotICogQFJFR19CTEtf V1JJVEVfU0lOR0xFOiBvcCBmb3Igd3JpdGluZyBtdWx0aXBsZSByZWdpc3RlcnMgdXNpbmcgaHcg aW5kZXgKLSAqICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIKLSAqIEBSRUdfQkxLX1dS SVRFX0lOQzogb3AgZm9yIHdyaXRpbmcgbXVsdGlwbGUgcmVnaXN0ZXJzIHVzaW5nIGF1dG8gYWRk cmVzcwotICogICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnQKLSAqIEBSRUdfQkxLX1dSSVRF X01VTFRJUExFOiBvcCBmb3Igd3JpdGluZyBodyBpbmRleCBiYXNlZCByZWdpc3RlcnMgYXQKLSAq ICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1jb25zZWN1dGl2ZSBsb2NhdGlvbgotICogQFJF R19ETUFfU0VUVVBfT1BTX01BWDogaW52YWxpZCBvcGVyYXRpb24KLSAqLwotZW51bSBkcHVfcmVn X2RtYV9zZXR1cF9vcHMgewotCUhXX0JMS19TRUxFQ1QsCi0JUkVHX1NJTkdMRV9XUklURSwKLQlS RUdfQkxLX1dSSVRFX1NJTkdMRSwKLQlSRUdfQkxLX1dSSVRFX0lOQywKLQlSRUdfQkxLX1dSSVRF X01VTFRJUExFLAotCVJFR19ETUFfU0VUVVBfT1BTX01BWCwKLX07Ci0KLS8qKgotICogZW51bSBk cHVfcmVnX2RtYV9ibGsgLSBkZWZpbmVzIGJsb2NrcyBmb3Igd2hpY2ggcmVnIGRtYSBvcCBzaG91 bGQgYmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWVkCi0gKiBAVklHMDogc2Vs ZWN0IHZpZzAgYmxvY2sKLSAqIEBWSUcxOiBzZWxlY3QgdmlnMSBibG9jawotICogQFZJRzI6IHNl bGVjdCB2aWcyIGJsb2NrCi0gKiBAVklHMzogc2VsZWN0IHZpZzMgYmxvY2sKLSAqIEBMTTA6IHNl bGVjdCBsbTAgYmxvY2sKLSAqIEBMTTE6IHNlbGVjdCBsbTEgYmxvY2sKLSAqIEBMTTI6IHNlbGVj dCBsbTIgYmxvY2sKLSAqIEBMTTM6IHNlbGVjdCBsbTMgYmxvY2sKLSAqIEBEU1BQMDogc2VsZWN0 IGRzcHAwIGJsb2NrCi0gKiBARFNQUDE6IHNlbGVjdCBkc3BwMSBibG9jawotICogQERTUFAyOiBz ZWxlY3QgZHNwcDIgYmxvY2sKLSAqIEBEU1BQMzogc2VsZWN0IGRzcHAzIGJsb2NrCi0gKiBARE1B MDogc2VsZWN0IGRtYTAgYmxvY2sKLSAqIEBETUExOiBzZWxlY3QgZG1hMSBibG9jawotICogQERN QTI6IHNlbGVjdCBkbWEyIGJsb2NrCi0gKiBARE1BMzogc2VsZWN0IGRtYTMgYmxvY2sKLSAqIEBT U1BQX0lHQzogc2VsZWN0IHNzcHAgaWdjIGJsb2NrCi0gKiBARFNQUF9JR0M6IHNlbGVjdCBkc3Bw IGlnYyBibG9jawotICogQE1EU1M6IHNlbGVjdCBtZHNzIGJsb2NrCi0gKi8KLWVudW0gZHB1X3Jl Z19kbWFfYmxrIHsKLQlWSUcwICA9IEJJVCgwKSwKLQlWSUcxICA9IEJJVCgxKSwKLQlWSUcyICA9 IEJJVCgyKSwKLQlWSUczICA9IEJJVCgzKSwKLQlMTTAgICA9IEJJVCg0KSwKLQlMTTEgICA9IEJJ VCg1KSwKLQlMTTIgICA9IEJJVCg2KSwKLQlMTTMgICA9IEJJVCg3KSwKLQlEU1BQMCA9IEJJVCg4 KSwKLQlEU1BQMSA9IEJJVCg5KSwKLQlEU1BQMiA9IEJJVCgxMCksCi0JRFNQUDMgPSBCSVQoMTEp LAotCURNQTAgID0gQklUKDEyKSwKLQlETUExICA9IEJJVCgxMyksCi0JRE1BMiAgPSBCSVQoMTQp LAotCURNQTMgID0gQklUKDE1KSwKLQlTU1BQX0lHQyA9IEJJVCgxNiksCi0JRFNQUF9JR0MgPSBC SVQoMTcpLAotCU1EU1MgID0gQklUKDMxKQotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X3JlZ19k bWFfYnVmZmVyIC0gZGVmaW5lcyByZWcgZG1hIGJ1ZmZlciBzdHJ1Y3R1cmUuCi0gKiBAZHJtX2dl bV9vYmplY3QgKmJ1ZjogZHJtIGdlbSBoYW5kbGUgZm9yIHRoZSBidWZmZXIKLSAqIEBhc2FwY2Ug OiBwb2ludGVyIHRvIGFkZHJlc3Mgc3BhY2UKLSAqIEBidWZmZXJfc2l6ZTogYnVmZmVyIHNpemUK LSAqIEBpbmRleDogd3JpdGUgcG9pbnRlciBpbmRleAotICogQGlvdmE6IGRldmljZSBhZGRyZXNz Ci0gKiBAdmFkZHI6IGNwdSBhZGRyZXNzCi0gKiBAbmV4dF9vcF9hbGxvd2VkOiBvcGVyYXRpb24g YWxsb3dlZCBvbiB0aGUgYnVmZmVyCi0gKiBAb3BzX2NvbXBsZXRlZDogb3BlcmF0aW9ucyBjb21w bGV0ZWQgb24gYnVmZmVyCi0gKi8KLXN0cnVjdCBkcHVfcmVnX2RtYV9idWZmZXIgewotCXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqYnVmOwotCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFz cGFjZTsKLQl1MzIgYnVmZmVyX3NpemU7Ci0JdTMyIGluZGV4OwotCXU2NCBpb3ZhOwotCXZvaWQg KnZhZGRyOwotCXUzMiBuZXh0X29wX2FsbG93ZWQ7Ci0JdTMyIG9wc19jb21wbGV0ZWQ7Ci19Owot Ci0vKioKLSAqIHN0cnVjdCBkcHVfcmVnX2RtYV9zZXR1cF9vcHNfY2ZnIC0gZGVmaW5lcyBzdHJ1 Y3R1cmUgZm9yIHJlZyBkbWEgb3BzIG9uIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZWcgZG1hIGJ1ZmZlci4KLSAqIEBkcHVfcmVnX2RtYV9zZXR1cF9vcHMgb3Bz OiBvcHMgdG8gYmUgcGVyZm9ybWVkCi0gKiBAZHB1X3JlZ19kbWFfYmxrIGJsazogYmxvY2sgb24g d2hpY2ggb3AgbmVlZHMgdG8gYmUgcGVyZm9ybWVkCi0gKiBAZHB1X3JlZ19kbWFfZmVhdHVyZXMg ZmVhdHVyZTogZmVhdHVyZSBvbiB3aGljaCBvcCBuZWVkcyB0byBiZSBkb25lCi0gKiBAd3JhcF9z aXplOiB2YWxpZCBmb3IgUkVHX0JMS19XUklURV9NVUxUSVBMRSwgaW5kaWNhdGVzIHJlZyBpbmRl eCBsb2NhdGlvbgotICogICAgICAgICAgICAgc2l6ZQotICogQGluYzogdmFsaWQgZm9yIFJFR19C TEtfV1JJVEVfTVVMVElQTEUgaW5kaWNhdGVzIHdoZXRoZXIgcmVnIGluZGV4IGxvY2F0aW9uCi0g KiAgICAgICBuZWVkcyBhbiBpbmNyZW1lbnQgb3IgZGVjcmVtZW50LgotICogICAgICAgMCAtIGRl Y3JlbWVudAotICogICAgICAgMSAtIGluY3JlbWVudAotICogQGJsa19vZmZzZXQ6IG9mZnNldCBm b3IgYmxrLCB2YWxpZCBmb3IgSFdfQkxLX1NFTEVDVCBvcCBvbmx5Ci0gKiBAZHB1X3JlZ19kbWFf YnVmZmVyICpkbWFfYnVmOiByZWcgZG1hIGJ1ZmZlciBvbiB3aGljaCBvcCBuZWVkcyB0byBiZQot ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1lZAotICogQGRhdGE6IHBv aW50ZXIgdG8gcGF5bG9hZCB3aGljaCBoYXMgdG8gYmUgd3JpdHRlbiBpbnRvIHJlZyBkbWEgYnVm ZmVyIGZvcgotICogICAgICAgIHNlbGVjdGVkIG9wLgotICogQGRhdGFfc2l6ZTogc2l6ZSBvZiBw YXlsb2FkIGluIGRhdGEKLSAqLwotc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgewot CWVudW0gZHB1X3JlZ19kbWFfc2V0dXBfb3BzIG9wczsKLQllbnVtIGRwdV9yZWdfZG1hX2JsayBi bGs7Ci0JZW51bSBkcHVfcmVnX2RtYV9mZWF0dXJlcyBmZWF0dXJlOwotCXUzMiB3cmFwX3NpemU7 Ci0JdTMyIGluYzsKLQl1MzIgYmxrX29mZnNldDsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVy ICpkbWFfYnVmOwotCXUzMiAqZGF0YTsKLQl1MzIgZGF0YV9zaXplOwotfTsKLQotLyoqCi0gKiBz dHJ1Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcgLSBjb21taXQgcmVnIGRtYSBidWZmZXIgdG8g aHcgZW5naW5lCi0gKiBAY3RsOiBjdGwgZm9yIHdoaWNoIHJlZyBkbWEgYnVmZmVyIG5lZWRzIHRv IGJlIGNvbW1pdHRlZC4KLSAqIEBkbWFfYnVmOiByZWcgZG1hIGJ1ZmZlciB3aXRoIGlvdmEgYWRk cmVzcyBhbmQgc2l6ZSBpbmZvCi0gKiBAYmxvY2tfc2VsZWN0OiBoaXN0b2dyYW0gcmVhZCBzZWxl Y3QKLSAqIEB0cmlnZ2VyX21vZGU6IHJlZyBkbWEgb3BzIHRyaWdnZXIgbW9kZQotICogQHF1ZXVl X3NlbGVjdDogcXVldWUgb24gd2hpY2ggcmVnIGRtYSBidWZmZXIgd2lsbCBiZSBzdWJtaXR0ZWQK LSAqIEBsYXN0X2NvbW1hbmQ6IGxhc3QgY29tbWFuZCBmb3IgdGhpcyB2c3luYwotICovCi1zdHJ1 Y3QgZHB1X3JlZ19kbWFfa2lja29mZl9jZmcgewotCXN0cnVjdCBkcHVfaHdfY3RsICpjdGw7Ci0J ZW51bSBkcHVfcmVnX2RtYV9vcCBvcDsKLQlzdHJ1Y3QgZHB1X3JlZ19kbWFfYnVmZmVyICpkbWFf YnVmOwotCWVudW0gZHB1X3JlZ19kbWFfcmVhZF9zZWwgYmxvY2tfc2VsZWN0OwotCWVudW0gZHB1 X3JlZ19kbWFfdHJpZ2dlcl9tb2RlIHRyaWdnZXJfbW9kZTsKLQllbnVtIGRwdV9yZWdfZG1hX3F1 ZXVlIHF1ZXVlX3NlbGVjdDsKLQl1MzIgbGFzdF9jb21tYW5kOwotfTsKLQotLyoqCi0gKiBzdHJ1 Y3QgZHB1X2h3X3JlZ19kbWFfb3BzIC0gb3BzIHN1cHBvcnRlZCBieSByZWcgZG1hIGZyYW1lIHdv cmssIGJhc2VkIG9uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiBy ZWcgZG1hIGFwcHJvcHJpYXRlIG9wcyB3aWxsIGJlCi0gKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5zdGFsbGVkIGR1cmluZyBkcml2ZXIgcHJvYmUuCi0gKiBAY2hlY2tfc3VwcG9ydDog Y2hlY2tzIGlmIHJlZyBkbWEgaXMgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0gZm9yIGEKLSAq ICAgICAgICAgICAgICAgICBmZWF0dXJlCi0gKiBAc2V0dXBfcGF5bG9hZDogc2V0dXAgcmVnIGRt YSBidWZmZXIgYmFzZWQgb24gb3BzIGFuZCBwYXlsb2FkIHByb3ZpZGVkIGJ5Ci0gKiAgICAgICAg ICAgICAgICAgY2xpZW50Ci0gKiBAa2lja19vZmY6IHN1Ym1pdCB0aGUgcmVnIGRtYSBidWZmZXIg dG8gaHcgZW5naW5nZQotICogQHJlc2V0OiByZXNldCB0aGUgcmVnIGRtYSBodyBlbmdpbmdlIGZv ciBhIGN0bAotICogQGFsbG9jX3JlZ19kbWFfYnVmOiBhbGxvY2F0ZSByZWcgZG1hIGJ1ZmZlcgot ICogQGRlYWxsb2NfcmVnX2RtYTogZGUtYWxsb2NhdGUgcmVnIGRtYSBidWZmZXIKLSAqIEByZXNl dF9yZWdfZG1hX2J1ZjogcmVzZXQgdGhlIGJ1ZmZlciB0byBpbml0IHN0YXRlCi0gKiBAbGFzdF9j b21tYW5kOiBub3RpZnkgY29udHJvbCB0aGF0IGxhc3QgY29tbWFuZCBpcyBxdWV1ZWQKLSAqLwot c3RydWN0IGRwdV9od19yZWdfZG1hX29wcyB7Ci0JaW50ICgqY2hlY2tfc3VwcG9ydCkoZW51bSBk cHVfcmVnX2RtYV9mZWF0dXJlcyBmZWF0dXJlLAotCQkJICAgICBlbnVtIGRwdV9yZWdfZG1hX2Js ayBibGssCi0JCQkgICAgIGJvb2wgKmlzX3N1cHBvcnRlZCk7Ci0JaW50ICgqc2V0dXBfcGF5bG9h ZCkoc3RydWN0IGRwdV9yZWdfZG1hX3NldHVwX29wc19jZmcgKmNmZyk7Ci0JaW50ICgqa2lja19v ZmYpKHN0cnVjdCBkcHVfcmVnX2RtYV9raWNrb2ZmX2NmZyAqY2ZnKTsKLQlpbnQgKCpyZXNldCko c3RydWN0IGRwdV9od19jdGwgKmN0bCk7Ci0Jc3RydWN0IGRwdV9yZWdfZG1hX2J1ZmZlciogKCph bGxvY19yZWdfZG1hX2J1ZikodTMyIHNpemUpOwotCWludCAoKmRlYWxsb2NfcmVnX2RtYSkoc3Ry dWN0IGRwdV9yZWdfZG1hX2J1ZmZlciAqbHV0X2J1Zik7Ci0JaW50ICgqcmVzZXRfcmVnX2RtYV9i dWYpKHN0cnVjdCBkcHVfcmVnX2RtYV9idWZmZXIgKmJ1Zik7Ci0JaW50ICgqbGFzdF9jb21tYW5k KShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsLCBlbnVtIGRwdV9yZWdfZG1hX3F1ZXVlIHEpOwotfTsK LQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2h3X3JlZ19kbWEgLSBzdHJ1Y3R1cmUgdG8gaG9sZCByZWcg ZG1hIGh3IGluZm8KLSAqIEBkcm1fZGV2OiBkcm0gZHJpdmVyIGRldiBoYW5kbGUKLSAqIEBjYXBz OiByZWcgZG1hIGh3IGNhcHMgb24gdGhlIHBsYXRmb3JtCi0gKiBAb3BzOiByZWcgZG1hIG9wcyBz dXBwb3J0ZWQgb24gdGhlIHBsYXRmb3JtCi0gKiBAYWRkcjogcmVnIGRtYSBodyBibG9jayBiYXNl IGFkZHJlc3MKLSAqLwotc3RydWN0IGRwdV9od19yZWdfZG1hIHsKLQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtX2RldjsKLQljb25zdCBzdHJ1Y3QgZHB1X3JlZ19kbWFfY2ZnICpjYXBzOwotCXN0cnVj dCBkcHVfaHdfcmVnX2RtYV9vcHMgb3BzOwotCXZvaWQgX19pb21lbSAqYWRkcjsKLX07Ci0KLS8q KgotICogZHB1X3JlZ19kbWFfaW5pdCgpIC0gZnVuY3Rpb24gY2FsbGVkIHRvIGluaXRpYWxpemUg cmVnIGRtYSBkdXJpbmcgZHB1Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICBkcm0gZHJpdmVy IHByb2JlLiBJZiByZWcgZG1hIGlzIHN1cHBvcnRlZCBieSBkcHUKLSAqICAgICAgICAgICAgICAg ICAgICAgICAgIG9wcyBmb3IgcmVnIGRtYSB2ZXJzaW9uIHdpbGwgYmUgaW5zdGFsbGVkLgotICog ICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVnIGRtYSBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRw dSBkZWZhdWx0IG9wcyB3aWxsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBiZSBpbnN0YWxs ZWQuIGNoZWNrX3N1cHBvcnQgb2YgZGVmYXVsdCBvcHMgd2lsbAotICogICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlLCBoZW5jZSB0aGUgY2xpZW50cyBzaG91bGQgZmFsbCBiYWNr IHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBBSEIgcHJvZ3JhbW1pbmcuCi0gKiBAYWRk cjogcmVnIGRtYSBibG9jayBiYXNlIGFkZHJlc3MKLSAqIEBtOiBjYXRhbG9nIHdoaWNoIGNvbnRh aW5zIGRwdSBodyBjYXBhYmlsaXRpZXMgYW5kIG9mZnNldHMKLSAqIEBkZXY6IGRybSBkcml2ZXIg ZGV2aWNlIGhhbmRsZQotICovCi1pbnQgZHB1X3JlZ19kbWFfaW5pdCh2b2lkIF9faW9tZW0gKmFk ZHIsIHN0cnVjdCBkcHVfbWRzc19jZmcgKm0sCi0JCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwot Ci0vKioKLSAqIGRwdV9yZWdfZG1hX2dldF9vcHMoKSAtIHNpbmdsZXRvbiBtb2R1bGUsIG9wcyBp cyByZXR1cm5lZCB0byB0aGUgY2xpZW50cwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAg d2hvIGNhbGwgdGhpcyBhcGkuCi0gKi8KLXN0cnVjdCBkcHVfaHdfcmVnX2RtYV9vcHMgKmRwdV9y ZWdfZG1hX2dldF9vcHModm9pZCk7Ci0KLS8qKgotICogZHB1X3JlZ19kbWFfZGVpbml0KCkgLSBk ZS1pbml0aWFsaXplIHRoZSByZWcgZG1hCi0gKi8KLXZvaWQgZHB1X3JlZ19kbWFfZGVpbml0KHZv aWQpOwotI2VuZGlmIC8qIF9EUFVfUkVHX0RNQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9ybS5jCmluZGV4IGFmODIwNWYuLmY0NjdiZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9ybS5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSAiZHB1X2h3X2xt LmgiCiAjaW5jbHVkZSAiZHB1X2h3X2N0bC5oIgogI2luY2x1ZGUgImRwdV9od19jZG0uaCIKLSNp bmNsdWRlICJkcHVfaHdfZHNwcC5oIgogI2luY2x1ZGUgImRwdV9od19kcy5oIgogI2luY2x1ZGUg ImRwdV9od19waW5ncG9uZy5oIgogI2luY2x1ZGUgImRwdV9od19pbnRmLmgiCkBAIC0yOSw3ICsy OCw2IEBACiAKICNkZWZpbmUgUk1fUlFfTE9DSyhyKSAoKHIpLT50b3BfY3RybCAmIEJJVChEUFVf Uk1fVE9QQ1RMX1JFU0VSVkVfTE9DSykpCiAjZGVmaW5lIFJNX1JRX0NMRUFSKHIpICgociktPnRv cF9jdHJsICYgQklUKERQVV9STV9UT1BDVExfUkVTRVJWRV9DTEVBUikpCi0jZGVmaW5lIFJNX1JR X0RTUFAocikgKChyKS0+dG9wX2N0cmwgJiBCSVQoRFBVX1JNX1RPUENUTF9EU1BQKSkKICNkZWZp bmUgUk1fUlFfRFMocikgKChyKS0+dG9wX2N0cmwgJiBCSVQoRFBVX1JNX1RPUENUTF9EUykpCiAj ZGVmaW5lIFJNX0lTX1RPUE9MT0dZX01BVENIKHQsIHIpICgodCkubnVtX2xtID09IChyKS5udW1f bG0gJiYgXAogCQkJCSh0KS5udW1fY29tcF9lbmMgPT0gKHIpLm51bV9lbmMgJiYgXApAQCAtMjM3 LDkgKzIzNSw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfcm1faHdfZGVzdHJveShlbnVtIGRwdV9od19i bGtfdHlwZSB0eXBlLCB2b2lkICpodykKIAljYXNlIERQVV9IV19CTEtfTE06CiAJCWRwdV9od19s bV9kZXN0cm95KGh3KTsKIAkJYnJlYWs7Ci0JY2FzZSBEUFVfSFdfQkxLX0RTUFA6Ci0JCWRwdV9o d19kc3BwX2Rlc3Ryb3koaHcpOwotCQlicmVhazsKIAljYXNlIERQVV9IV19CTEtfRFM6CiAJCWRw dV9od19kc19kZXN0cm95KGh3KTsKIAkJYnJlYWs7CkBAIC0zMjIsOSArMzE3LDYgQEAgc3RhdGlj IGludCBfZHB1X3JtX2h3X2Jsa19jcmVhdGUoCiAJY2FzZSBEUFVfSFdfQkxLX0xNOgogCQlodyA9 IGRwdV9od19sbV9pbml0KGlkLCBtbWlvLCBjYXQpOwogCQlicmVhazsKLQljYXNlIERQVV9IV19C TEtfRFNQUDoKLQkJaHcgPSBkcHVfaHdfZHNwcF9pbml0KGlkLCBtbWlvLCBjYXQpOwotCQlicmVh azsKIAljYXNlIERQVV9IV19CTEtfRFM6CiAJCWh3ID0gZHB1X2h3X2RzX2luaXQoaWQsIG1taW8s IGNhdCk7CiAJCWJyZWFrOwpAQCAtNDM1LDE1ICs0MjcsNiBAQCBpbnQgZHB1X3JtX2luaXQoc3Ry dWN0IGRwdV9ybSAqcm0sCiAJCX0KIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2F0LT5kc3BwX2Nv dW50OyBpKyspIHsKLQkJcmMgPSBfZHB1X3JtX2h3X2Jsa19jcmVhdGUocm0sIGNhdCwgbW1pbywg RFBVX0hXX0JMS19EU1BQLAotCQkJCWNhdC0+ZHNwcFtpXS5pZCwgJmNhdC0+ZHNwcFtpXSk7Ci0J CWlmIChyYykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQ6IGRzcHAgaHcgbm90IGF2YWlsYWJsZVxu Iik7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQl9Ci0KIAlpZiAoY2F0LT5tZHBbMF0uaGFzX2Rlc3Rf c2NhbGVyKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBjYXQtPmRzX2NvdW50OyBpKyspIHsKIAkJCXJj ID0gX2RwdV9ybV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1taW8sIERQVV9IV19CTEtfRFMsCkBA IC01MTYsMTYgKzQ5OSwxNCBAQCBpbnQgZHB1X3JtX2luaXQoc3RydWN0IGRwdV9ybSAqcm0sCiAv KioKICAqIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcyAtIGNoZWNrIGlm IHByb3Bvc2VkIGxheWVyIG1peGVyIG1lZXRzCiAgKglwcm9wb3NlZCB1c2UgY2FzZSByZXF1aXJl bWVudHMsIGluY2wuIGhhcmR3aXJlZCBkZXBlbmRlbnQgYmxvY2tzIGxpa2UKLSAqCXBpbmdwb25n LCBhbmQgZHNwcC4KKyAqCXBpbmdwb25nCiAgKiBAcm06IGRwdSByZXNvdXJjZSBtYW5hZ2VyIGhh bmRsZQogICogQHJzdnA6IHJlc2VydmF0aW9uIGN1cnJlbnRseSBiZWluZyBjcmVhdGVkCiAgKiBA cmVxczogcHJvcG9zZWQgdXNlIGNhc2UgcmVxdWlyZW1lbnRzCiAgKiBAbG06IHByb3Bvc2VkIGxh eWVyIG1peGVyLCBmdW5jdGlvbiBjaGVja3MgaWYgbG0sIGFuZCBhbGwgb3RoZXIgaGFyZHdpcmVk Ci0gKiAgICAgIGJsb2NrcyBjb25uZWN0ZWQgdG8gdGhlIGxtIChwcCwgZHNwcCkgYXJlIGF2YWls YWJsZSBhbmQgYXBwcm9wcmlhdGUKLSAqIEBkc3BwOiBvdXRwdXQgcGFyYW1ldGVyLCBkc3BwIGJs b2NrIGF0dGFjaGVkIHRvIHRoZSBsYXllciBtaXhlci4KLSAqICAgICAgICBOVUxMIGlmIGRzcHAg d2FzIG5vdCBhdmFpbGFibGUsIG9yIG5vdCBtYXRjaGluZyByZXF1aXJlbWVudHMuCisgKiAgICAg IGJsb2NrcyBjb25uZWN0ZWQgdG8gdGhlIGxtIChwcCkgaXMgYXZhaWxhYmxlIGFuZCBhcHByb3By aWF0ZQogICogQHBwOiBvdXRwdXQgcGFyYW1ldGVyLCBwaW5ncG9uZyBibG9jayBhdHRhY2hlZCB0 byB0aGUgbGF5ZXIgbWl4ZXIuCi0gKiAgICAgIE5VTEwgaWYgZHNwcCB3YXMgbm90IGF2YWlsYWJs ZSwgb3Igbm90IG1hdGNoaW5nIHJlcXVpcmVtZW50cy4KKyAqICAgICAgTlVMTCBpZiBwcCB3YXMg bm90IGF2YWlsYWJsZSwgb3Igbm90IG1hdGNoaW5nIHJlcXVpcmVtZW50cy4KICAqIEBwcmltYXJ5 X2xtOiBpZiBub24tbnVsbCwgdGhpcyBmdW5jdGlvbiBjaGVjayBpZiBsbSBpcyBjb21wYXRpYmxl IHByaW1hcnlfbG0KICAqICAgICAgICAgICAgICBhcyB3ZWxsIGFzIHNhdGlzZnlpbmcgYWxsIG90 aGVyIHJlcXVpcmVtZW50cwogICogQFJldHVybjogdHJ1ZSBpZiBsbSBtYXRjaGVzIGFsbCByZXF1 aXJlbWVudHMsIGZhbHNlIG90aGVyd2lzZQpAQCAtNTM1LDIxICs1MTYsMTkgQEAgc3RhdGljIGJv b2wgX2RwdV9ybV9jaGVja19sbV9hbmRfZ2V0X2Nvbm5lY3RlZF9ibGtzKAogCQlzdHJ1Y3QgZHB1 X3JtX3JzdnAgKnJzdnAsCiAJCXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzICpyZXFzLAogCQlz dHJ1Y3QgZHB1X3JtX2h3X2JsayAqbG0sCi0JCXN0cnVjdCBkcHVfcm1faHdfYmxrICoqZHNwcCwK IAkJc3RydWN0IGRwdV9ybV9od19ibGsgKipkcywKIAkJc3RydWN0IGRwdV9ybV9od19ibGsgKipw cCwKIAkJc3RydWN0IGRwdV9ybV9od19ibGsgKnByaW1hcnlfbG0pCiB7CiAJY29uc3Qgc3RydWN0 IGRwdV9sbV9jZmcgKmxtX2NmZyA9IHRvX2RwdV9od19taXhlcihsbS0+aHcpLT5jYXA7CiAJc3Ry dWN0IGRwdV9ybV9od19pdGVyIGl0ZXI7Ci0JYm9vbCBpc192YWxpZF9kc3BwLCBpc192YWxpZF9k cywgcmV0OworCWJvb2wgaXNfdmFsaWRfZHM7CiAKLQkqZHNwcCA9IE5VTEw7CiAJKmRzID0gTlVM TDsKIAkqcHAgPSBOVUxMOwogCi0JRFBVX0RFQlVHKCJjaGVjayBsbSAlZDogZHNwcCAlZCBkcyAl ZCBwcCAlZFxuIiwKLQkJCSAgIGxtX2NmZy0+aWQsIGxtX2NmZy0+ZHNwcCwKKwlEUFVfREVCVUco ImNoZWNrIGxtICVkIGRzICVkIHBwICVkXG4iLAorCQkJICAgbG1fY2ZnLT5pZCwKIAkJCSAgIGxt X2NmZy0+ZHMsIGxtX2NmZy0+cGluZ3BvbmcpOwogCiAJLyogQ2hlY2sgaWYgdGhpcyBsYXllciBt aXhlciBpcyBhIHBlZXIgb2YgdGhlIHByb3Bvc2VkIHByaW1hcnkgTE0gKi8KQEAgLTU2NCwyOCAr NTQzLDEzIEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRf YmxrcygKIAkJfQogCX0KIAotCWlzX3ZhbGlkX2RzcHAgPSAobG1fY2ZnLT5kc3BwICE9IERTUFBf TUFYKSA/IHRydWUgOiBmYWxzZTsKIAlpc192YWxpZF9kcyA9IChsbV9jZmctPmRzICE9IERTX01B WCkgPyB0cnVlIDogZmFsc2U7CiAKLQkvKioKLQkgKiBSTV9SUV9YOiBzcGVjaWZpY2F0aW9uIG9m IHdoaWNoIExNcyB0byBjaG9vc2UKLQkgKiBpc192YWxpZF9YOiBpbmRpY2F0ZXMgd2hldGhlciBM TSBpcyB0aWVkIHdpdGggYmxvY2sgWAotCSAqIHJldDogdHJ1ZSBpZiBnaXZlbiBMTSBtYXRjaGVz IHRoZSB1c2VyIHJlcXVpcmVtZW50LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlpZiAoUk1fUlFf RFNQUChyZXFzKSAmJiBSTV9SUV9EUyhyZXFzKSkKLQkJcmV0ID0gKGlzX3ZhbGlkX2RzcHAgJiYg aXNfdmFsaWRfZHMpOwotCWVsc2UgaWYgKFJNX1JRX0RTUFAocmVxcykpCi0JCXJldCA9IGlzX3Zh bGlkX2RzcHA7Ci0JZWxzZSBpZiAoUk1fUlFfRFMocmVxcykpCi0JCXJldCA9IGlzX3ZhbGlkX2Rz OwotCWVsc2UKLQkJcmV0ID0gIShpc192YWxpZF9kc3BwIHx8IGlzX3ZhbGlkX2RzKTsKKwlpZiAo Uk1fUlFfRFMocmVxcykgJiYgIWlzX3ZhbGlkX2RzKSB7CisJCURQVV9ERUJVRygiZmFpbDpsbSgl ZClyZXFfZHMoJWQpZHMoJWQpXG4iLAorCQkJbG1fY2ZnLT5pZCwgKGJvb2wpKFJNX1JRX0RTKHJl cXMpKSwgbG1fY2ZnLT5kcyk7CiAKLQlpZiAoIXJldCkgewotCQlEUFVfREVCVUcoImZhaWw6bG0o JWQpcmVxX2RzcHAoJWQpZHNwcCglZClyZXFfZHMoJWQpZHMoJWQpXG4iLAotCQkJbG1fY2ZnLT5p ZCwgKGJvb2wpKFJNX1JRX0RTUFAocmVxcykpLCBsbV9jZmctPmRzcHAsCi0JCQkoYm9vbCkoUk1f UlFfRFMocmVxcykpLCBsbV9jZmctPmRzKTsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIGZhbHNl OwogCX0KIAogCS8qIEFscmVhZHkgcmVzZXJ2ZWQ/ICovCkBAIC01OTQsMjggKzU1OCw2IEBAIHN0 YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcygKIAkJcmV0 dXJuIGZhbHNlOwogCX0KIAotCWlmIChsbV9jZmctPmRzcHAgIT0gRFNQUF9NQVgpIHsKLQkJZHB1 X3JtX2luaXRfaHdfaXRlcigmaXRlciwgMCwgRFBVX0hXX0JMS19EU1BQKTsKLQkJd2hpbGUgKF9k cHVfcm1fZ2V0X2h3X2xvY2tlZChybSwgJml0ZXIpKSB7Ci0JCQlpZiAoaXRlci5ibGstPmlkID09 IGxtX2NmZy0+ZHNwcCkgewotCQkJCSpkc3BwID0gaXRlci5ibGs7Ci0JCQkJYnJlYWs7Ci0JCQl9 Ci0JCX0KLQotCQlpZiAoISpkc3BwKSB7Ci0JCQlEUFVfREVCVUcoImxtICVkIGZhaWxlZCB0byBy ZXRyaWV2ZSBkc3BwICVkXG4iLCBsbS0+aWQsCi0JCQkJCWxtX2NmZy0+ZHNwcCk7Ci0JCQlyZXR1 cm4gZmFsc2U7Ci0JCX0KLQotCQlpZiAoUkVTRVJWRURfQllfT1RIRVIoKmRzcHAsIHJzdnApKSB7 Ci0JCQlEUFVfREVCVUcoImxtICVkIGRzcHAgJWQgYWxyZWFkeSByZXNlcnZlZFxuIiwKLQkJCQkJ bG0tPmlkLCAoKmRzcHApLT5pZCk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KIAlpZiAo bG1fY2ZnLT5kcyAhPSBEU19NQVgpIHsKIAkJZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlciwgMCwg RFBVX0hXX0JMS19EUyk7CiAJCXdoaWxlIChfZHB1X3JtX2dldF9od19sb2NrZWQocm0sICZpdGVy KSkgewpAQCAtNjU0LDcgKzU5Niw2IEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1fYW5k X2dldF9jb25uZWN0ZWRfYmxrcygKIAlpZiAoUkVTRVJWRURfQllfT1RIRVIoKnBwLCByc3ZwKSkg ewogCQlEUFVfREVCVUcoImxtICVkIHBwICVkIGFscmVhZHkgcmVzZXJ2ZWRcbiIsIGxtLT5pZCwK IAkJCQkoKnBwKS0+aWQpOwotCQkqZHNwcCA9IE5VTEw7CiAJCSpkcyA9IE5VTEw7CiAJCXJldHVy biBmYWxzZTsKIAl9CkBAIC02NjksNyArNjEwLDYgQEAgc3RhdGljIGludCBfZHB1X3JtX3Jlc2Vy dmVfbG1zKAogCiB7CiAJc3RydWN0IGRwdV9ybV9od19ibGsgKmxtW01BWF9CTE9DS1NdOwotCXN0 cnVjdCBkcHVfcm1faHdfYmxrICpkc3BwW01BWF9CTE9DS1NdOwogCXN0cnVjdCBkcHVfcm1faHdf YmxrICpkc1tNQVhfQkxPQ0tTXTsKIAlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqcHBbTUFYX0JMT0NL U107CiAJc3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXJfaSwgaXRlcl9qOwpAQCAtNjg2LDcgKzYy Niw2IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xtcygKIAl3aGlsZSAobG1fY291bnQg IT0gcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSAmJgogCQkJX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJt LCAmaXRlcl9pKSkgewogCQltZW1zZXQoJmxtLCAwLCBzaXplb2YobG0pKTsKLQkJbWVtc2V0KCZk c3BwLCAwLCBzaXplb2YoZHNwcCkpOwogCQltZW1zZXQoJmRzLCAwLCBzaXplb2YoZHMpKTsKIAkJ bWVtc2V0KCZwcCwgMCwgc2l6ZW9mKHBwKSk7CiAKQEAgLTY5NCw4ICs2MzMsNyBAQCBzdGF0aWMg aW50IF9kcHVfcm1fcmVzZXJ2ZV9sbXMoCiAJCWxtW2xtX2NvdW50XSA9IGl0ZXJfaS5ibGs7CiAK IAkJaWYgKCFfZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3MoCi0JCQkJcm0s IHJzdnAsIHJlcXMsIGxtW2xtX2NvdW50XSwKLQkJCQkmZHNwcFtsbV9jb3VudF0sICZkc1tsbV9j b3VudF0sCisJCQkJcm0sIHJzdnAsIHJlcXMsIGxtW2xtX2NvdW50XSwgJmRzW2xtX2NvdW50XSwK IAkJCQkmcHBbbG1fY291bnRdLCBOVUxMKSkKIAkJCWNvbnRpbnVlOwogCkBAIC03MTEsOCArNjQ5 LDggQEAgc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfbG1zKAogCiAJCQlpZiAoIV9kcHVfcm1f Y2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcygKIAkJCQkJcm0sIHJzdnAsIHJlcXMsIGl0 ZXJfai5ibGssCi0JCQkJCSZkc3BwW2xtX2NvdW50XSwgJmRzW2xtX2NvdW50XSwKLQkJCQkJJnBw W2xtX2NvdW50XSwgaXRlcl9pLmJsaykpCisJCQkJCSZkc1tsbV9jb3VudF0sICZwcFtsbV9jb3Vu dF0sCisJCQkJCWl0ZXJfaS5ibGspKQogCQkJCWNvbnRpbnVlOwogCiAJCQlsbVtsbV9jb3VudF0g PSBpdGVyX2ouYmxrOwpAQCAtNzMxLDE0ICs2NjksMTEgQEAgc3RhdGljIGludCBfZHB1X3JtX3Jl c2VydmVfbG1zKAogCiAJCWxtW2ldLT5yc3ZwX254dCA9IHJzdnA7CiAJCXBwW2ldLT5yc3ZwX254 dCA9IHJzdnA7Ci0JCWlmIChkc3BwW2ldKQotCQkJZHNwcFtpXS0+cnN2cF9ueHQgPSByc3ZwOwog CiAJCWlmIChkc1tpXSkKIAkJCWRzW2ldLT5yc3ZwX254dCA9IHJzdnA7CiAKIAkJRFBVX0VWVDMy KGxtW2ldLT50eXBlLCByc3ZwLT5lbmNfaWQsIGxtW2ldLT5pZCwgcHBbaV0tPmlkLAotCQkJCWRz cHBbaV0gPyBkc3BwW2ldLT5pZCA6IDAsCiAJCQkJZHNbaV0gPyBkc1tpXS0+aWQgOiAwKTsKIAl9 CiAKQEAgLTkxOSwxOCArODU0LDcgQEAgc3RhdGljIGludCBfZHB1X3JtX21ha2VfbmV4dF9yc3Zw KAogCXJzdnAtPnRvcG9sb2d5ID0gcmVxcy0+dG9wb2xvZ3ktPnRvcF9uYW1lOwogCWxpc3RfYWRk X3RhaWwoJnJzdnAtPmxpc3QsICZybS0+cnN2cHMpOwogCi0JLyoKLQkgKiBBc3NpZ24gTE1zIGFu ZCBibG9ja3Mgd2hvc2UgdXNhZ2UgaXMgdGllZCB0byB0aGVtOiBEU1BQICYgUGluZ3BvbmcuCi0J ICogRG8gYXNzaWdubWVudCBwcmVmZXJyaW5nIHRvIGdpdmUgYXdheSBsb3ctcmVzb3VyY2UgbWl4 ZXJzIGZpcnN0OgotCSAqIC0gQ2hlY2sgbWl4ZXJzIHdpdGhvdXQgRFNQUHMKLQkgKiAtIE9ubHkg dGhlbiBhbGxvdyB0byBncmFiIGZyb20gbWl4ZXJzIHdpdGggRFNQUCBjYXBhYmlsaXR5Ci0JICov CiAJcmV0ID0gX2RwdV9ybV9yZXNlcnZlX2xtcyhybSwgcnN2cCwgcmVxcyk7Ci0JaWYgKHJldCAm JiAhUk1fUlFfRFNQUChyZXFzKSkgewotCQlyZXFzLT50b3BfY3RybCB8PSBCSVQoRFBVX1JNX1RP UENUTF9EU1BQKTsKLQkJcmV0ID0gX2RwdV9ybV9yZXNlcnZlX2xtcyhybSwgcnN2cCwgcmVxcyk7 Ci0JfQotCiAJaWYgKHJldCkgewogCQlEUFVfRVJST1IoInVuYWJsZSB0byBmaW5kIGFwcHJvcHJp YXRlIG1peGVyc1xuIik7CiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9ybS5oCmluZGV4IDRjNzc4NzQuLmVmM2Y2N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9ybS5oCkBAIC00NSwxMyArNDUsMTEgQEAgZW51bSBkcHVfcm1fdG9wb2xvZ3lf bmFtZSB7CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlIGFueSByZXNl cnZhdGlvbiBoZWxkIGJ5IHRoaXMgZGlzcGxheS4KICAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5vcm1hbCBiZWhhdmlvciB3b3VsZCBub3QgaW1wYWN0IHRoZQogICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2YXRpb24gbGlzdCBkdXJpbmcgdGhlIEF0b21pY1Rl c3QgcGhhc2UuCi0gKiBARFBVX1JNX1RPUENUTF9EU1BQOiBSZXF1aXJlIGxheWVyIG1peGVycyB3 aXRoIERTUFAgY2FwYWJpbGl0aWVzCiAgKiBARFBVX1JNX1RPUENUTF9EUyAgOiBSZXF1aXJlIGxh eWVyIG1peGVycyB3aXRoIERTIGNhcGFiaWxpdGllcwogICovCiBlbnVtIGRwdV9ybV90b3BvbG9n eV9jb250cm9sIHsKIAlEUFVfUk1fVE9QQ1RMX1JFU0VSVkVfTE9DSywKIAlEUFVfUk1fVE9QQ1RM X1JFU0VSVkVfQ0xFQVIsCi0JRFBVX1JNX1RPUENUTF9EU1BQLAogCURQVV9STV9UT1BDVExfRFMs CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfd2Iu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV93Yi5jCmluZGV4IGNjNzg3ODYu LjliNDdiYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV93 Yi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV93Yi5jCkBAIC0xMyw4 ICsxMyw2IEBACiAKICNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm06JXM6JWRdICIgZm10LCBfX2Z1 bmNfXywgX19MSU5FX18KIAotI2luY2x1ZGUgPHVhcGkvZHJtL2RwdV9kcm0uaD4KLQogI2luY2x1 ZGUgIm1zbV9rbXMuaCIKICNpbmNsdWRlICJkcHVfa21zLmgiCiAjaW5jbHVkZSAiZHB1X3diLmgi CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX2Rydi5oCmluZGV4IDk1NGFjMTIuLjViYWZmMjcgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2Rydi5oCkBAIC03NywzOSArNzcsMTEgQEAgc3RydWN0IG1zbV9maWxlX3ByaXZhdGUgewogfTsK IAogZW51bSBtc21fbWRwX3BsYW5lX3Byb3BlcnR5IHsKLQkvKiBibG9iIHByb3BlcnRpZXMsIGFs d2F5cyBwdXQgdGhlc2UgZmlyc3QgKi8KLQlQTEFORV9QUk9QX1NDQUxFUl9WMSwKLQlQTEFORV9Q Uk9QX1NDQUxFUl9WMiwKLQlQTEFORV9QUk9QX0NTQ19WMSwKLQlQTEFORV9QUk9QX0lORk8sCi0J UExBTkVfUFJPUF9TQ0FMRVJfTFVUX0VELAotCVBMQU5FX1BST1BfU0NBTEVSX0xVVF9DSVIsCi0J UExBTkVfUFJPUF9TQ0FMRVJfTFVUX1NFUCwKLQlQTEFORV9QUk9QX1NLSU5fQ09MT1IsCi0JUExB TkVfUFJPUF9TS1lfQ09MT1IsCi0JUExBTkVfUFJPUF9GT0xJQUdFX0NPTE9SLAotCVBMQU5FX1BS T1BfUk9UX0NBUFNfVjEsCi0KIAkvKiAjIG9mIGJsb2IgcHJvcGVydGllcyAqLwogCVBMQU5FX1BS T1BfQkxPQkNPVU5ULAogCiAJLyogcmFuZ2UgcHJvcGVydGllcyAqLwogCVBMQU5FX1BST1BfWlBP UyA9IFBMQU5FX1BST1BfQkxPQkNPVU5ULAotCVBMQU5FX1BST1BfQUxQSEEsCi0JUExBTkVfUFJP UF9DT0xPUl9GSUxMLAotCVBMQU5FX1BST1BfSF9ERUNJTUFURSwKLQlQTEFORV9QUk9QX1ZfREVD SU1BVEUsCi0JUExBTkVfUFJPUF9IVUVfQURKVVNULAotCVBMQU5FX1BST1BfU0FUVVJBVElPTl9B REpVU1QsCi0JUExBTkVfUFJPUF9WQUxVRV9BREpVU1QsCi0JUExBTkVfUFJPUF9DT05UUkFTVF9B REpVU1QsCi0JUExBTkVfUFJPUF9FWENMX1JFQ1RfVjEsCi0JUExBTkVfUFJPUF9QUkVGSUxMX1NJ WkUsCi0JUExBTkVfUFJPUF9QUkVGSUxMX1RJTUUsCi0KLQkvKiBlbnVtL2JpdG1hc2sgcHJvcGVy dGllcyAqLwotCVBMQU5FX1BST1BfQkxFTkRfT1AsCi0JUExBTkVfUFJPUF9TUkNfQ09ORklHLAog CiAJLyogdG90YWwgIyBvZiBwcm9wZXJ0aWVzICovCiAJUExBTkVfUFJPUF9DT1VOVApkaWZmIC0t Z2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcHVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RwdV9k cm0uaAppbmRleCBkYTczMjc5Li45M2FmMWZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJt L2RwdV9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RwdV9kcm0uaApAQCAtNjYsMTkzICs2 Niw2IEBACiAvKiBEUk0gYml0bWFza3MgYXJlIHJlc3RyaWN0ZWQgdG8gMC4uNjMgKi8KICNkZWZp bmUgRFBVX0RSTV9CSVRNQVNLX0NPVU5UICAgICAgIDY0CiAKLS8qKgotICogc3RydWN0IGRwdV9k cm1fcGl4X2V4dF92MSAtIHZlcnNpb24gMSBvZiBwaXhlbCBleHQgc3RydWN0dXJlCi0gKiBAbnVt X2V4dF9weGxzX2xyOiBOdW1iZXIgb2YgdG90YWwgaG9yaXpvbnRhbCBwaXhlbHMKLSAqIEBudW1f ZXh0X3B4bHNfdGI6IE51bWJlciBvZiB0b3RhbCB2ZXJ0aWNhbCBsaW5lcwotICogQGxlZnRfZnRj aDogICAgICAgTnVtYmVyIG9mIGV4dHJhIHBpeGVscyB0byBvdmVyZmV0Y2ggZnJvbSBsZWZ0Ci0g KiBAcmlnaHRfZnRjaDogICAgICBOdW1iZXIgb2YgZXh0cmEgcGl4ZWxzIHRvIG92ZXJmZXRjaCBm cm9tIHJpZ2h0Ci0gKiBAdG9wX2Z0Y2g6ICAgICAgICBOdW1iZXIgb2YgZXh0cmEgbGluZXMgdG8g b3ZlcmZldGNoIGZyb20gdG9wCi0gKiBAYnRtX2Z0Y2g6ICAgICAgICBOdW1iZXIgb2YgZXh0cmEg bGluZXMgdG8gb3ZlcmZldGNoIGZyb20gYm90dG9tCi0gKiBAbGVmdF9ycHQ6ICAgICAgICBOdW1i ZXIgb2YgZXh0cmEgcGl4ZWxzIHRvIHJlcGVhdCBmcm9tIGxlZnQKLSAqIEByaWdodF9ycHQ6ICAg ICAgIE51bWJlciBvZiBleHRyYSBwaXhlbHMgdG8gcmVwZWF0IGZyb20gcmlnaHQKLSAqIEB0b3Bf cnB0OiAgICAgICAgIE51bWJlciBvZiBleHRyYSBsaW5lcyB0byByZXBlYXQgZnJvbSB0b3AKLSAq IEBidG1fcnB0OiAgICAgICAgIE51bWJlciBvZiBleHRyYSBsaW5lcyB0byByZXBlYXQgZnJvbSBi b3R0b20KLSAqLwotc3RydWN0IGRwdV9kcm1fcGl4X2V4dF92MSB7Ci0JLyoKLQkgKiBOdW1iZXIg b2YgcGl4ZWxzIGV4dCBpbiBsZWZ0LCByaWdodCwgdG9wIGFuZCBib3R0b20gZGlyZWN0aW9uCi0J ICogZm9yIGFsbCBjb2xvciBjb21wb25lbnRzLgotCSAqLwotCWludDMyX3QgbnVtX2V4dF9weGxz X2xyW0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90IG51bV9leHRfcHhsc190YltEUFVfTUFYX1BM QU5FU107Ci0KLQkvKgotCSAqIE51bWJlciBvZiBwaXhlbHMgbmVlZHMgdG8gYmUgb3ZlcmZldGNo ZWQgaW4gbGVmdCwgcmlnaHQsIHRvcAotCSAqIGFuZCBib3R0b20gZGlyZWN0aW9ucyBmcm9tIHNv dXJjZSBpbWFnZSBmb3Igc2NhbGluZy4KLQkgKi8KLQlpbnQzMl90IGxlZnRfZnRjaFtEUFVfTUFY X1BMQU5FU107Ci0JaW50MzJfdCByaWdodF9mdGNoW0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90 IHRvcF9mdGNoW0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90IGJ0bV9mdGNoW0RQVV9NQVhfUExB TkVTXTsKLQkvKgotCSAqIE51bWJlciBvZiBwaXhlbHMgbmVlZHMgdG8gYmUgcmVwZWF0ZWQgaW4g bGVmdCwgcmlnaHQsIHRvcCBhbmQKLQkgKiBib3R0b20gZGlyZWN0aW9ucyBmb3Igc2NhbGluZy4K LQkgKi8KLQlpbnQzMl90IGxlZnRfcnB0W0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90IHJpZ2h0 X3JwdFtEUFVfTUFYX1BMQU5FU107Ci0JaW50MzJfdCB0b3BfcnB0W0RQVV9NQVhfUExBTkVTXTsK LQlpbnQzMl90IGJ0bV9ycHRbRFBVX01BWF9QTEFORVNdOwotCi19OwotCi0vKioKLSAqIHN0cnVj dCBkcHVfZHJtX3NjYWxlcl92MSAtIHZlcnNpb24gMSBvZiBzdHJ1Y3QgZHB1X2RybV9zY2FsZXIK LSAqIEBscjogICAgICAgICAgICBQaXhlbCBleHRlbnNpb24gc2V0dGluZ3MgZm9yIGxlZnQvcmln aHQKLSAqIEB0YjogICAgICAgICAgICBQaXhlbCBleHRlbnNpb24gc2V0dGluZ3MgZm9yIHRvcC9i b3R0b24KLSAqIEBpbml0X3BoYXNlX3g6ICBJbml0aWFsIHNjYWxlciBwaGFzZSB2YWx1ZXMgZm9y IHgKLSAqIEBwaGFzZV9zdGVwX3g6ICBQaGFzZSBzdGVwIHZhbHVlcyBmb3IgeAotICogQGluaXRf cGhhc2VfeTogIEluaXRpYWwgc2NhbGVyIHBoYXNlIHZhbHVlcyBmb3IgeQotICogQHBoYXNlX3N0 ZXBfeTogIFBoYXNlIHN0ZXAgdmFsdWVzIGZvciB5Ci0gKiBAaG9yel9maWx0ZXI6ICAgSG9yaXpv bnRhbCBmaWx0ZXIgYXJyYXkKLSAqIEB2ZXJ0X2ZpbHRlcjogICBWZXJ0aWNhbCBmaWx0ZXIgYXJy YXkKLSAqLwotc3RydWN0IGRwdV9kcm1fc2NhbGVyX3YxIHsKLQkvKgotCSAqIFBpeCBleHQgc2V0 dGluZ3MKLQkgKi8KLQlzdHJ1Y3QgZHB1X2RybV9waXhfZXh0X3YxIHBlOwotCS8qCi0JICogUGhh c2Ugc2V0dGluZ3MKLQkgKi8KLQlpbnQzMl90IGluaXRfcGhhc2VfeFtEUFVfTUFYX1BMQU5FU107 Ci0JaW50MzJfdCBwaGFzZV9zdGVwX3hbRFBVX01BWF9QTEFORVNdOwotCWludDMyX3QgaW5pdF9w aGFzZV95W0RQVV9NQVhfUExBTkVTXTsKLQlpbnQzMl90IHBoYXNlX3N0ZXBfeVtEUFVfTUFYX1BM QU5FU107Ci0KLQkvKgotCSAqIEZpbHRlciB0eXBlIHRvIGJlIHVzZWQgZm9yIHNjYWxpbmcgaW4g aG9yaXpvbnRhbCBhbmQgdmVydGljYWwKLQkgKiBkaXJlY3Rpb25zCi0JICovCi0JdWludDMyX3Qg aG9yel9maWx0ZXJbRFBVX01BWF9QTEFORVNdOwotCXVpbnQzMl90IHZlcnRfZmlsdGVyW0RQVV9N QVhfUExBTkVTXTsKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9kcm1fZGVfdjEgLSB2ZXJzaW9u IDEgb2YgZGV0YWlsIGVuaGFuY2VyIHN0cnVjdHVyZQotICogQGVuYWJsZTogICAgICAgICBFbmFi bGVzL2Rpc2FibGVzIGRldGFpbCBlbmhhbmNlcgotICogQHNoYXJwZW5fbGV2ZWwxOiBTaGFycGVu aW5nIHN0cmVuZ3RoIGZvciBub2lzZQotICogQHNoYXJwZW5fbGV2ZWwyOiBTaGFycGVuaW5nIHN0 cmVuZ3RoIGZvciBjb250ZXh0Ci0gKiBAY2xpcDogICAgICAgICAgIENsaXAgY29lZmZpY2llbnQK LSAqIEBsaW1pdDogICAgICAgICAgRGV0YWlsIGVuaGFuY2VyIGxpbWl0IGZhY3RvcgotICogQHRo cl9xdWlldDogICAgICBRdWl0ZSB6b25lIHRocmVzaG9sZAotICogQHRocl9kaWVvdXQ6ICAgICBE aWUtb3V0IHpvbmUgdGhyZXNob2xkCi0gKiBAdGhyX2xvdzogICAgICAgIExpbmVhciB6b25lIGxl ZnQgdGhyZXNob2xkCi0gKiBAdGhyX2hpZ2g6ICAgICAgIExpbmVhciB6b25lIHJpZ2h0IHRocmVz aG9sZAotICogQHByZWNfc2hpZnQ6ICAgICBEZXRhaWwgZW5oYW5jZXIgcHJlY2lzaW9uCi0gKiBA YWRqdXN0X2E6ICAgICAgIE1hcHBpbmcgY3VydmVzIEEgY29lZmZpY2llbnRzCi0gKiBAYWRqdXN0 X2I6ICAgICAgIE1hcHBpbmcgY3VydmVzIEIgY29lZmZpY2llbnRzCi0gKiBAYWRqdXN0X2M6ICAg ICAgIE1hcHBpbmcgY3VydmVzIEMgY29lZmZpY2llbnRzCi0gKi8KLXN0cnVjdCBkcHVfZHJtX2Rl X3YxIHsKLQl1aW50MzJfdCBlbmFibGU7Ci0JaW50MTZfdCBzaGFycGVuX2xldmVsMTsKLQlpbnQx Nl90IHNoYXJwZW5fbGV2ZWwyOwotCXVpbnQxNl90IGNsaXA7Ci0JdWludDE2X3QgbGltaXQ7Ci0J dWludDE2X3QgdGhyX3F1aWV0OwotCXVpbnQxNl90IHRocl9kaWVvdXQ7Ci0JdWludDE2X3QgdGhy X2xvdzsKLQl1aW50MTZfdCB0aHJfaGlnaDsKLQl1aW50MTZfdCBwcmVjX3NoaWZ0OwotCWludDE2 X3QgYWRqdXN0X2FbRFBVX01BWF9ERV9DVVJWRVNdOwotCWludDE2X3QgYWRqdXN0X2JbRFBVX01B WF9ERV9DVVJWRVNdOwotCWludDE2X3QgYWRqdXN0X2NbRFBVX01BWF9ERV9DVVJWRVNdOwotfTsK LQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2RybV9zY2FsZXJfdjIgLSB2ZXJzaW9uIDIgb2Ygc3RydWN0 IGRwdV9kcm1fc2NhbGVyCi0gKiBAZW5hYmxlOiAgICAgICAgICAgIFNjYWxlciBlbmFibGUKLSAq IEBkaXJfZW46ICAgICAgICAgICAgRGV0YWlsIGVuaGFuY2VyIGVuYWJsZQotICogQHBlOiAgICAg ICAgICAgICAgICBQaXhlbCBleHRlbnNpb24gc2V0dGluZ3MKLSAqIEBob3J6X2RlY2ltYXRlOiAg ICAgSG9yaXpvbnRhbCBkZWNpbWF0aW9uIGZhY3RvcgotICogQHZlcnRfZGVjaW1hdGU6ICAgICBW ZXJ0aWNhbCBkZWNpbWF0aW9uIGZhY3RvcgotICogQGluaXRfcGhhc2VfeDogICAgICBJbml0aWFs IHNjYWxlciBwaGFzZSB2YWx1ZXMgZm9yIHgKLSAqIEBwaGFzZV9zdGVwX3g6ICAgICAgUGhhc2Ug c3RlcCB2YWx1ZXMgZm9yIHgKLSAqIEBpbml0X3BoYXNlX3k6ICAgICAgSW5pdGlhbCBzY2FsZXIg cGhhc2UgdmFsdWVzIGZvciB5Ci0gKiBAcGhhc2Vfc3RlcF95OiAgICAgIFBoYXNlIHN0ZXAgdmFs dWVzIGZvciB5Ci0gKiBAcHJlbG9hZF94OiAgICAgICAgIEhvcml6b250YWwgcHJlbG9hZCB2YWx1 ZQotICogQHByZWxvYWRfeTogICAgICAgICBWZXJ0aWNhbCBwcmVsb2FkIHZhbHVlCi0gKiBAc3Jj X3dpZHRoOiAgICAgICAgIFNvdXJjZSB3aWR0aAotICogQHNyY19oZWlnaHQ6ICAgICAgICBTb3Vy Y2UgaGVpZ2h0Ci0gKiBAZHN0X3dpZHRoOiAgICAgICAgIERlc3RpbmF0aW9uIHdpZHRoCi0gKiBA ZHN0X2hlaWdodDogICAgICAgIERlc3RpbmF0aW9uIGhlaWdodAotICogQHlfcmdiX2ZpbHRlcl9j Zmc6ICBZL1JHQiBwbGFuZSBmaWx0ZXIgY29uZmlndXJhdGlvbgotICogQHV2X2ZpbHRlcl9jZmc6 ICAgICBVViBwbGFuZSBmaWx0ZXIgY29uZmlndXJhdGlvbgotICogQGFscGhhX2ZpbHRlcl9jZmc6 ICBBbHBoYSBmaWx0ZXIgY29uZmlndXJhdGlvbgotICogQGJsZW5kX2NmZzogICAgICAgICBTZWxl Y3Rpb24gb2YgYmxlbmQgY29lZmZpY2llbnRzCi0gKiBAbHV0X2ZsYWc6ICAgICAgICAgIExVVCBj b25maWd1cmF0aW9uIGZsYWdzCi0gKiBAZGlyX2x1dF9pZHg6ICAgICAgIDJkIDR4NCBMVVQgaW5k ZXgKLSAqIEB5X3JnYl9jaXJfbHV0X2lkeDogWS9SR0IgY2lyY3VsYXIgTFVUIGluZGV4Ci0gKiBA dXZfY2lyX2x1dF9pZHg6ICAgIFVWIGNpcmN1bGFyIExVVCBpbmRleAotICogQHlfcmdiX3NlcF9s dXRfaWR4OiBZL1JHQiBzZXBhcmFibGUgTFVUIGluZGV4Ci0gKiBAdXZfc2VwX2x1dF9pZHg6ICAg IFVWIHNlcGFyYWJsZSBMVVQgaW5kZXgKLSAqIEBkZTogICAgICAgICAgICAgICAgRGV0YWlsIGVu aGFuY2VyIHNldHRpbmdzCi0gKi8KLXN0cnVjdCBkcHVfZHJtX3NjYWxlcl92MiB7Ci0JLyoKLQkg KiBHZW5lcmFsIGRlZmluaXRpb25zCi0JICovCi0JdWludDMyX3QgZW5hYmxlOwotCXVpbnQzMl90 IGRpcl9lbjsKLQotCS8qCi0JICogUGl4IGV4dCBzZXR0aW5ncwotCSAqLwotCXN0cnVjdCBkcHVf ZHJtX3BpeF9leHRfdjEgcGU7Ci0KLQkvKgotCSAqIERlY2ltYXRpb24gc2V0dGluZ3MKLQkgKi8K LQl1aW50MzJfdCBob3J6X2RlY2ltYXRlOwotCXVpbnQzMl90IHZlcnRfZGVjaW1hdGU7Ci0KLQkv KgotCSAqIFBoYXNlIHNldHRpbmdzCi0JICovCi0JaW50MzJfdCBpbml0X3BoYXNlX3hbRFBVX01B WF9QTEFORVNdOwotCWludDMyX3QgcGhhc2Vfc3RlcF94W0RQVV9NQVhfUExBTkVTXTsKLQlpbnQz Ml90IGluaXRfcGhhc2VfeVtEUFVfTUFYX1BMQU5FU107Ci0JaW50MzJfdCBwaGFzZV9zdGVwX3lb RFBVX01BWF9QTEFORVNdOwotCi0JdWludDMyX3QgcHJlbG9hZF94W0RQVV9NQVhfUExBTkVTXTsK LQl1aW50MzJfdCBwcmVsb2FkX3lbRFBVX01BWF9QTEFORVNdOwotCXVpbnQzMl90IHNyY193aWR0 aFtEUFVfTUFYX1BMQU5FU107Ci0JdWludDMyX3Qgc3JjX2hlaWdodFtEUFVfTUFYX1BMQU5FU107 Ci0KLQl1aW50MzJfdCBkc3Rfd2lkdGg7Ci0JdWludDMyX3QgZHN0X2hlaWdodDsKLQotCXVpbnQz Ml90IHlfcmdiX2ZpbHRlcl9jZmc7Ci0JdWludDMyX3QgdXZfZmlsdGVyX2NmZzsKLQl1aW50MzJf dCBhbHBoYV9maWx0ZXJfY2ZnOwotCXVpbnQzMl90IGJsZW5kX2NmZzsKLQotCXVpbnQzMl90IGx1 dF9mbGFnOwotCXVpbnQzMl90IGRpcl9sdXRfaWR4OwotCi0JLyogZm9yIFkoUkdCKSBhbmQgVVYg cGxhbmVzKi8KLQl1aW50MzJfdCB5X3JnYl9jaXJfbHV0X2lkeDsKLQl1aW50MzJfdCB1dl9jaXJf bHV0X2lkeDsKLQl1aW50MzJfdCB5X3JnYl9zZXBfbHV0X2lkeDsKLQl1aW50MzJfdCB1dl9zZXBf bHV0X2lkeDsKLQotCS8qCi0JICogRGV0YWlsIGVuaGFuY2VyIHNldHRpbmdzCi0JICovCi0Jc3Ry dWN0IGRwdV9kcm1fZGVfdjEgZGU7Ci19OwotCiAvKiBOdW1iZXIgb2YgZGVzdCBzY2FsZXJzIHN1 cHBvcnRlZCAqLwogI2RlZmluZSBEUFVfTUFYX0RTX0NPVU5UIDIKIApkaWZmIC0tZ2l0IGEvaW5j bHVkZS91YXBpL2RybS9tc21fZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL21zbV9kcm0uaAppbmRl eCA0MDRmMjAxLi42MGIxYTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL21zbV9kcm0u aAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL21zbV9kcm0uaApAQCAtMjYsNyArMjYsNiBAQAogI2Rl ZmluZSBfX01TTV9EUk1fSF9fCiAKICNpbmNsdWRlICJkcm0uaCIKLSNpbmNsdWRlICJkcHVfZHJt LmgiCiAKICNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQogZXh0ZXJuICJDIiB7Ci0tIApUaGUgUXVh bGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVy b3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFp bGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K