From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v3 6/6] drm/msm: remove dsi-staging driver Date: Fri, 25 May 2018 14:26:07 -0700 Message-ID: <1527283567-6546-7-git-send-email-jsanka@codeaurora.org> References: <1527283567-6546-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: <1527283567-6546-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, Rajesh Yadav List-Id: linux-arm-msm@vger.kernel.org U0RNODQ1IGhhcyBzd2l0Y2hlZCBmcm9tIGRzaS1zdGFnaW5nIHRvIGRzaSBkcml2ZXIuIFJlbW92 aW5nCnN0YWxlIGNvZGUuCgpjaGFuZ2VzIGluIHYyOgoJLSByZW1vdmUgZmlsZSBjaGFuZ2VzIHVu cmVsYXRlZCB1cHN0cmVhbQpjaGFuZ2VzIGluIHYzOgoJLSByZW1vdmUgTWFrZWZpbGUgY2hhbmdl cwoKU2lnbmVkLW9mZi1ieTogSmV5a3VtYXIgU2Fua2FyYW4gPGpzYW5rYUBjb2RlYXVyb3JhLm9y Zz4KU2lnbmVkLW9mZi1ieTogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+ClNpZ25l ZC1vZmYtYnk6IFJhamVzaCBZYWRhdiA8cnlhZGF2QGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9tc20vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiAtCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jYXRhbG9nLmMgICAgICB8ICAyNDEg LS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cuaCAgICAgIHwg IDIwMSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jbGsuaCAgICAgICAg ICB8ICAyNzYgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Nsa19tYW5h Z2VyLmMgIHwgMTIzNSAtLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNp X2N0cmwuYyAgICAgICAgIHwgMjg0NiAtLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9jdHJsLmggICAgICAgICB8ICA2MjMgLS0tCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3LmggICAgICB8ICA3NTIgLS0tLQogZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od18xXzQuYyAgfCAgNDgwIC0tLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od18yXzAuYyAgfCAgMjM0 IC0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMi5jICB8 ICAgNDIgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od19jbW4u YyAgfCAxMzEyIC0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3Ry bF9yZWcuaCAgICAgfCAgMTk2IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNp X2RlZnMuaCAgICAgICAgIHwgIDU3OSAtLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX2Rpc3BsYXkuYyAgICAgIHwgNDIyMSAtLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5oICAgICAgfCAgNTU2IC0tLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheV90ZXN0LmMgfCAgMTE0 IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXlfdGVzdC5oIHwg ICAzMSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kcm0uYyAgICAgICAg ICB8ICA2ODEgLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZHJtLmgg ICAgICAgICAgfCAgMTI3IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2h3 LmggICAgICAgICAgIHwgICA0OCAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2Rz aV9wYW5lbC5jICAgICAgICB8IDMzMjEgLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9wYW5lbC5oICAgICAgICB8ICAyNTcgLS0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeS5jICAgICAgICAgIHwgIDkzNyAtLS0tLQogZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5LmggICAgICAgICAgfCAgMjM1IC0t CiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfaHcuaCAgICAgICB8ICAy NjAgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9od192Ml8wLmMg IHwgIDI1MiAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3X3Yz XzAuYyAgfCAgNDQ3IC0tLQogLi4uL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGlt aW5nX2NhbGMuYyAgfCAgNjc2IC0tLS0KIC4uLi9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf cGh5X3RpbWluZ19jYWxjLmggIHwgIDE0NCAtCiAuLi4vZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX3BoeV90aW1pbmdfdjJfMC5jICB8ICAxMjYgLQogLi4uL2dwdS9kcm0vbXNtL2RzaS1zdGFn aW5nL2RzaV9waHlfdGltaW5nX3YzXzAuYyAgfCAgMTA3IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX3B3ci5jICAgICAgICAgIHwgIDM2NSAtLQogZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfcHdyLmggICAgICAgICAgfCAgIDkzIC0KIDM0IGZpbGVzIGNo YW5nZWQsIDIyMDI3IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cuaAogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Nsay5oCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2xrX21hbmFn ZXIuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX2N0cmwuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0 YWdpbmcvZHNpX2N0cmwuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHcuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMV80LmMKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMC5jCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9o d18yXzIuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX2N0cmxfaHdfY21uLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX3JlZy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGVmcy5oCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5jCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5oCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlz cGxheV90ZXN0LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3QuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2RybS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZHJtLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9ody5oCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGFuZWwuYwogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVsLmgKIGRl bGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHku YwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNp X3BoeS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2lu Zy9kc2lfcGh5X2h3LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rz aS1zdGFnaW5nL2RzaV9waHlfaHdfdjJfMC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3X3YzXzAuYwogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2FsYy5j CiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf cGh5X3RpbWluZ19jYWxjLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX3YyXzAuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjNfMC5jCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcHdyLmMK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9w d3IuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vS2NvbmZpZwppbmRleCBhMzgzM2U3Li5hZGI4OGI5IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9LY29u ZmlnCkBAIC03MSwxOCArNzEsNiBAQCBjb25maWcgRFJNX01TTV9EU0kKIAkgIENob29zZSB0aGlz IG9wdGlvbiBpZiB5b3UgaGF2ZSBhIG5lZWQgZm9yIE1JUEkgRFNJIGNvbm5lY3RvcgogCSAgc3Vw cG9ydC4KIAotY29uZmlnIERSTV9NU01fRFNJX1NUQUdJTkcKLQlib29sICJFbmFibGUgbmV3IERT SSBkcml2ZXIgc3VwcG9ydCBpbiBNU00gRFJNIGRyaXZlciIKLQlkZXBlbmRzIG9uIERSTV9NU00K LQlzZWxlY3QgRFJNX1BBTkVMCi0Jc2VsZWN0IERSTV9NSVBJX0RTSQotCWRlZmF1bHQgeQotCWhl bHAKLQkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgbmVlZCBNSVBJIERTSSBjb25uZWN0b3Ig c3VwcG9ydCBvbiBNU00KLQkgIHdoaWNoIGNvbmZvcm1zIHRvIERSTS4gTUlQSSBzdGFuZHMgZm9y IE1vYmlsZSBJbmR1c3RyeSBQcm9jZXNzb3IKLQkgIEludGVyZmFjZSBhbmQgRFNJIHN0YW5kcyBm b3IgRGlzcGxheSBTZXJpYWwgSW50ZXJmYWNlIHdoaWNoIHBvd2VycwotCSAgdGhlIHByaW1hcnkg ZGlzcGxheSBvZiB5b3VyIG1vYmlsZSBkZXZpY2UuCi0KIGNvbmZpZyBEUk1fTVNNX0RTSV9QTEwK IAlib29sICJFbmFibGUgRFNJIFBMTCBkcml2ZXIgaW4gTVNNIERSTSIKIAlkZXBlbmRzIG9uIERS TV9NU01fRFNJICYmIENPTU1PTl9DTEsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX2NhdGFsb2cuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NiNjU5YS4u MDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jYXRhbG9n LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykg MjAxNS0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq Ci0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotICoKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpICJtc20tZHNpLWNhdGFsb2c6 WyVzXSAiIGZtdCwgX19mdW5jX18KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotCi0jaW5jbHVk ZSAiZHNpX2NhdGFsb2cuaCIKLQotLyoqCi0gKiBkc2lfY2F0YWxvZ19jbW5faW5pdCgpIC0gY2F0 YWxvZyBpbml0IGZvciBkc2kgY29udHJvbGxlciB2MS40Ci0gKi8KLXN0YXRpYyB2b2lkIGRzaV9j YXRhbG9nX2Ntbl9pbml0KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJZW51bSBkc2lfY3Ry bF92ZXJzaW9uIHZlcnNpb24pCi17Ci0JLyogY29tbW9uIGZ1bmN0aW9ucyAqLwotCWN0cmwtPm9w cy5ob3N0X3NldHVwICAgICAgICAgICAgID0gZHNpX2N0cmxfaHdfY21uX2hvc3Rfc2V0dXA7Ci0J Y3RybC0+b3BzLnZpZGVvX2VuZ2luZV9lbiAgICAgICAgPSBkc2lfY3RybF9od19jbW5fdmlkZW9f ZW5naW5lX2VuOwotCWN0cmwtPm9wcy52aWRlb19lbmdpbmVfc2V0dXAgICAgID0gZHNpX2N0cmxf aHdfY21uX3ZpZGVvX2VuZ2luZV9zZXR1cDsKLQljdHJsLT5vcHMuc2V0X3ZpZGVvX3RpbWluZyAg ICAgICA9IGRzaV9jdHJsX2h3X2Ntbl9zZXRfdmlkZW9fdGltaW5nOwotCWN0cmwtPm9wcy5zZXRf dGltaW5nX2RiICAgICAgICAgID0gZHNpX2N0cmxfaHdfY21uX3NldF90aW1pbmdfZGI7Ci0JY3Ry bC0+b3BzLmNtZF9lbmdpbmVfc2V0dXAgICAgICAgPSBkc2lfY3RybF9od19jbW5fY21kX2VuZ2lu ZV9zZXR1cDsKLQljdHJsLT5vcHMuc2V0dXBfY21kX3N0cmVhbSAgICAgICA9IGRzaV9jdHJsX2h3 X2Ntbl9zZXR1cF9jbWRfc3RyZWFtOwotCWN0cmwtPm9wcy5jdHJsX2VuICAgICAgICAgICAgICAg ID0gZHNpX2N0cmxfaHdfY21uX2N0cmxfZW47Ci0JY3RybC0+b3BzLmNtZF9lbmdpbmVfZW4gICAg ICAgICAgPSBkc2lfY3RybF9od19jbW5fY21kX2VuZ2luZV9lbjsKLQljdHJsLT5vcHMucGh5X3N3 X3Jlc2V0ICAgICAgICAgICA9IGRzaV9jdHJsX2h3X2Ntbl9waHlfc3dfcmVzZXQ7Ci0JY3RybC0+ b3BzLnNvZnRfcmVzZXQgICAgICAgICAgICAgPSBkc2lfY3RybF9od19jbW5fc29mdF9yZXNldDsK LQljdHJsLT5vcHMua2lja29mZl9jb21tYW5kICAgICAgICA9IGRzaV9jdHJsX2h3X2Ntbl9raWNr b2ZmX2NvbW1hbmQ7Ci0JY3RybC0+b3BzLmtpY2tvZmZfZmlmb19jb21tYW5kICAgPSBkc2lfY3Ry bF9od19jbW5fa2lja29mZl9maWZvX2NvbW1hbmQ7Ci0JY3RybC0+b3BzLnJlc2V0X2NtZF9maWZv ICAgICAgICAgPSBkc2lfY3RybF9od19jbW5fcmVzZXRfY21kX2ZpZm87Ci0JY3RybC0+b3BzLnRy aWdnZXJfY29tbWFuZF9kbWEgICAgPSBkc2lfY3RybF9od19jbW5fdHJpZ2dlcl9jb21tYW5kX2Rt YTsKLQljdHJsLT5vcHMuZ2V0X2ludGVycnVwdF9zdGF0dXMgICA9IGRzaV9jdHJsX2h3X2Ntbl9n ZXRfaW50ZXJydXB0X3N0YXR1czsKLQljdHJsLT5vcHMuZ2V0X2Vycm9yX3N0YXR1cyAgICAgICA9 IGRzaV9jdHJsX2h3X2Ntbl9nZXRfZXJyb3Jfc3RhdHVzOwotCWN0cmwtPm9wcy5jbGVhcl9lcnJv cl9zdGF0dXMgICAgID0gZHNpX2N0cmxfaHdfY21uX2NsZWFyX2Vycm9yX3N0YXR1czsKLQljdHJs LT5vcHMuY2xlYXJfaW50ZXJydXB0X3N0YXR1cyA9Ci0JCWRzaV9jdHJsX2h3X2Ntbl9jbGVhcl9p bnRlcnJ1cHRfc3RhdHVzOwotCWN0cmwtPm9wcy5lbmFibGVfc3RhdHVzX2ludGVycnVwdHMgPQot CQlkc2lfY3RybF9od19jbW5fZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHRzOwotCWN0cmwtPm9wcy5l bmFibGVfZXJyb3JfaW50ZXJydXB0cyA9Ci0JCWRzaV9jdHJsX2h3X2Ntbl9lbmFibGVfZXJyb3Jf aW50ZXJydXB0czsKLQljdHJsLT5vcHMudmlkZW9fdGVzdF9wYXR0ZXJuX3NldHVwID0KLQkJZHNp X2N0cmxfaHdfY21uX3ZpZGVvX3Rlc3RfcGF0dGVybl9zZXR1cDsKLQljdHJsLT5vcHMuY21kX3Rl c3RfcGF0dGVybl9zZXR1cCA9Ci0JCWRzaV9jdHJsX2h3X2Ntbl9jbWRfdGVzdF9wYXR0ZXJuX3Nl dHVwOwotCWN0cmwtPm9wcy50ZXN0X3BhdHRlcm5fZW5hYmxlICAgID0gZHNpX2N0cmxfaHdfY21u X3Rlc3RfcGF0dGVybl9lbmFibGU7Ci0JY3RybC0+b3BzLnRyaWdnZXJfY21kX3Rlc3RfcGF0dGVy biA9Ci0JCWRzaV9jdHJsX2h3X2Ntbl90cmlnZ2VyX2NtZF90ZXN0X3BhdHRlcm47Ci0JY3RybC0+ b3BzLmNsZWFyX3BoeTBfbG5fZXJyID0gZHNpX2N0cmxfaHdfZGxuMF9waHlfZXJyOwotCWN0cmwt Pm9wcy5waHlfcmVzZXRfY29uZmlnID0gZHNpX2N0cmxfaHdfY21uX3BoeV9yZXNldF9jb25maWc7 Ci0JY3RybC0+b3BzLnNldHVwX21pc3IgPSBkc2lfY3RybF9od19jbW5fc2V0dXBfbWlzcjsKLQlj dHJsLT5vcHMuY29sbGVjdF9taXNyID0gZHNpX2N0cmxfaHdfY21uX2NvbGxlY3RfbWlzcjsKLQlj dHJsLT5vcHMuZGVidWdfYnVzID0gZHNpX2N0cmxfaHdfY21uX2RlYnVnX2J1czsKLQotCXN3aXRj aCAodmVyc2lvbikgewotCWNhc2UgRFNJX0NUUkxfVkVSU0lPTl8xXzQ6Ci0JCWN0cmwtPm9wcy5z ZXR1cF9sYW5lX21hcCA9IGRzaV9jdHJsX2h3XzE0X3NldHVwX2xhbmVfbWFwOwotCQljdHJsLT5v cHMudWxwc19vcHMudWxwc19yZXF1ZXN0ID0gZHNpX2N0cmxfaHdfMTRfdWxwc19yZXF1ZXN0Owot CQljdHJsLT5vcHMudWxwc19vcHMudWxwc19leGl0ID0gZHNpX2N0cmxfaHdfMTRfdWxwc19leGl0 OwotCQljdHJsLT5vcHMud2FpdF9mb3JfbGFuZV9pZGxlID0KLQkJCWRzaV9jdHJsX2h3XzE0X3dh aXRfZm9yX2xhbmVfaWRsZTsKLQkJY3RybC0+b3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91bHBz ID0KLQkJCWRzaV9jdHJsX2h3XzE0X2dldF9sYW5lc19pbl91bHBzOwotCQljdHJsLT5vcHMuY2xh bXBfZW5hYmxlID0gZHNpX2N0cmxfaHdfMTRfY2xhbXBfZW5hYmxlOwotCQljdHJsLT5vcHMuY2xh bXBfZGlzYWJsZSA9IGRzaV9jdHJsX2h3XzE0X2NsYW1wX2Rpc2FibGU7Ci0JCWN0cmwtPm9wcy5y ZWdfZHVtcF90b19idWZmZXIgPQotCQkJZHNpX2N0cmxfaHdfMTRfcmVnX2R1bXBfdG9fYnVmZmVy OwotCQlicmVhazsKLQljYXNlIERTSV9DVFJMX1ZFUlNJT05fMl8wOgotCQljdHJsLT5vcHMuc2V0 dXBfbGFuZV9tYXAgPSBkc2lfY3RybF9od18yMF9zZXR1cF9sYW5lX21hcDsKLQkJY3RybC0+b3Bz LndhaXRfZm9yX2xhbmVfaWRsZSA9Ci0JCQlkc2lfY3RybF9od18yMF93YWl0X2Zvcl9sYW5lX2lk bGU7Ci0JCWN0cmwtPm9wcy5yZWdfZHVtcF90b19idWZmZXIgPQotCQkJZHNpX2N0cmxfaHdfMjBf cmVnX2R1bXBfdG9fYnVmZmVyOwotCQljdHJsLT5vcHMudWxwc19vcHMudWxwc19yZXF1ZXN0ID0g TlVMTDsKLQkJY3RybC0+b3BzLnVscHNfb3BzLnVscHNfZXhpdCA9IE5VTEw7Ci0JCWN0cmwtPm9w cy51bHBzX29wcy5nZXRfbGFuZXNfaW5fdWxwcyA9IE5VTEw7Ci0JCWN0cmwtPm9wcy5jbGFtcF9l bmFibGUgPSBOVUxMOwotCQljdHJsLT5vcHMuY2xhbXBfZGlzYWJsZSA9IE5VTEw7Ci0JCWJyZWFr OwotCWNhc2UgRFNJX0NUUkxfVkVSU0lPTl8yXzI6Ci0JCWN0cmwtPm9wcy5waHlfcmVzZXRfY29u ZmlnID0gZHNpX2N0cmxfaHdfMjJfcGh5X3Jlc2V0X2NvbmZpZzsKLQkJY3RybC0+b3BzLnNldHVw X2xhbmVfbWFwID0gZHNpX2N0cmxfaHdfMjBfc2V0dXBfbGFuZV9tYXA7Ci0JCWN0cmwtPm9wcy53 YWl0X2Zvcl9sYW5lX2lkbGUgPQotCQkJZHNpX2N0cmxfaHdfMjBfd2FpdF9mb3JfbGFuZV9pZGxl OwotCQljdHJsLT5vcHMucmVnX2R1bXBfdG9fYnVmZmVyID0KLQkJCWRzaV9jdHJsX2h3XzIwX3Jl Z19kdW1wX3RvX2J1ZmZlcjsKLQkJY3RybC0+b3BzLnVscHNfb3BzLnVscHNfcmVxdWVzdCA9IE5V TEw7Ci0JCWN0cmwtPm9wcy51bHBzX29wcy51bHBzX2V4aXQgPSBOVUxMOwotCQljdHJsLT5vcHMu dWxwc19vcHMuZ2V0X2xhbmVzX2luX3VscHMgPSBOVUxMOwotCQljdHJsLT5vcHMuY2xhbXBfZW5h YmxlID0gTlVMTDsKLQkJY3RybC0+b3BzLmNsYW1wX2Rpc2FibGUgPSBOVUxMOwotCQlicmVhazsK LQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLS8qKgotICogZHNpX2NhdGFsb2dfY3RybF9z ZXR1cCgpIC0gcmV0dXJuIGNhdGFsb2cgaW5mbyBmb3IgZHNpIGNvbnRyb2xsZXIKLSAqIEBjdHJs OiAgICAgICAgUG9pbnRlciB0byBEU0kgY29udHJvbGxlciBodyBvYmplY3QuCi0gKiBAdmVyc2lv bjogICAgIERTSSBjb250cm9sbGVyIHZlcnNpb24uCi0gKiBAaW5kZXg6ICAgICAgIERTSSBjb250 cm9sbGVyIGluc3RhbmNlIElELgotICogQHBoeV9pc29sYXRpb25fZW5hYmxlZDogICAgICAgRFNJ IGNvbnRyb2xsZXIgd29ya3MgaXNvbGF0ZWQgZnJvbSBwaHkuCi0gKgotICogVGhpcyBmdW5jdGlv biBzZXR1cHMgdGhlIGNhdGFsb2cgaW5mb3JtYXRpb24gaW4gdGhlIGRzaV9jdHJsX2h3IG9iamVj dC4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgZm9yIGZhaWx1cmUgYW5kIDAgZm9yIHN1Y2Nl c3MuCi0gKi8KLWludCBkc2lfY2F0YWxvZ19jdHJsX3NldHVwKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCwKLQkJICAgZW51bSBkc2lfY3RybF92ZXJzaW9uIHZlcnNpb24sIHUzMiBpbmRleCwKLQkJ ICAgYm9vbCBwaHlfaXNvbGF0aW9uX2VuYWJsZWQpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICh2 ZXJzaW9uID09IERTSV9DVFJMX1ZFUlNJT05fVU5LTk9XTiB8fAotCSAgICB2ZXJzaW9uID49IERT SV9DVFJMX1ZFUlNJT05fTUFYKSB7Ci0JCXByX2VycigiVW5zdXBwb3J0ZWQgdmVyc2lvbjogJWRc biIsIHZlcnNpb24pOwotCQlyZXR1cm4gLUVOT1RTVVBQOwotCX0KLQotCWN0cmwtPmluZGV4ID0g aW5kZXg7Ci0Jc2V0X2JpdChEU0lfQ1RSTF9WSURFT19UUEcsIGN0cmwtPmZlYXR1cmVfbWFwKTsK LQlzZXRfYml0KERTSV9DVFJMX0NNRF9UUEcsIGN0cmwtPmZlYXR1cmVfbWFwKTsKLQlzZXRfYml0 KERTSV9DVFJMX1ZBUklBQkxFX1JFRlJFU0hfUkFURSwgY3RybC0+ZmVhdHVyZV9tYXApOwotCXNl dF9iaXQoRFNJX0NUUkxfRFlOQU1JQ19SRUZSRVNILCBjdHJsLT5mZWF0dXJlX21hcCk7Ci0Jc2V0 X2JpdChEU0lfQ1RSTF9ERVNLRVdfQ0FMSUIsIGN0cmwtPmZlYXR1cmVfbWFwKTsKLQlzZXRfYml0 KERTSV9DVFJMX0RQSFksIGN0cmwtPmZlYXR1cmVfbWFwKTsKLQotCXN3aXRjaCAodmVyc2lvbikg ewotCWNhc2UgRFNJX0NUUkxfVkVSU0lPTl8xXzQ6Ci0JCWRzaV9jYXRhbG9nX2Ntbl9pbml0KGN0 cmwsIHZlcnNpb24pOwotCQlicmVhazsKLQljYXNlIERTSV9DVFJMX1ZFUlNJT05fMl8wOgotCWNh c2UgRFNJX0NUUkxfVkVSU0lPTl8yXzI6Ci0JCWN0cmwtPnBoeV9pc29sYXRpb25fZW5hYmxlZCA9 IHBoeV9pc29sYXRpb25fZW5hYmxlZDsKLQkJZHNpX2NhdGFsb2dfY21uX2luaXQoY3RybCwgdmVy c2lvbik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQotCi0J cmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9jYXRhbG9nX3BoeV8yXzBfaW5pdCgpIC0gY2F0 YWxvZyBpbml0IGZvciBEU0kgUEhZIDE0bm0KLSAqLwotc3RhdGljIHZvaWQgZHNpX2NhdGFsb2df cGh5XzJfMF9pbml0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpCi17Ci0JcGh5LT5vcHMucmVndWxh dG9yX2VuYWJsZSA9IGRzaV9waHlfaHdfdjJfMF9yZWd1bGF0b3JfZW5hYmxlOwotCXBoeS0+b3Bz LnJlZ3VsYXRvcl9kaXNhYmxlID0gZHNpX3BoeV9od192Ml8wX3JlZ3VsYXRvcl9kaXNhYmxlOwot CXBoeS0+b3BzLmVuYWJsZSA9IGRzaV9waHlfaHdfdjJfMF9lbmFibGU7Ci0JcGh5LT5vcHMuZGlz YWJsZSA9IGRzaV9waHlfaHdfdjJfMF9kaXNhYmxlOwotCXBoeS0+b3BzLmNhbGN1bGF0ZV90aW1p bmdfcGFyYW1zID0KLQkJZHNpX3BoeV9od19jYWxjdWxhdGVfdGltaW5nX3BhcmFtczsKLQlwaHkt Pm9wcy5waHlfaWRsZV9vbiA9IGRzaV9waHlfaHdfdjJfMF9pZGxlX29uOwotCXBoeS0+b3BzLnBo eV9pZGxlX29mZiA9IGRzaV9waHlfaHdfdjJfMF9pZGxlX29mZjsKLQlwaHktPm9wcy5jYWxjdWxh dGVfdGltaW5nX3BhcmFtcyA9Ci0JCWRzaV9waHlfaHdfY2FsY3VsYXRlX3RpbWluZ19wYXJhbXM7 Ci0JcGh5LT5vcHMucGh5X3RpbWluZ192YWwgPSBkc2lfcGh5X2h3X3RpbWluZ192YWxfdjJfMDsK LX0KLQotLyoqCi0gKiBkc2lfY2F0YWxvZ19waHlfM18wX2luaXQoKSAtIGNhdGFsb2cgaW5pdCBm b3IgRFNJIFBIWSAxMG5tCi0gKi8KLXN0YXRpYyB2b2lkIGRzaV9jYXRhbG9nX3BoeV8zXzBfaW5p dChzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5KQotewotCXBoeS0+b3BzLnJlZ3VsYXRvcl9lbmFibGUg PSBkc2lfcGh5X2h3X3YzXzBfcmVndWxhdG9yX2VuYWJsZTsKLQlwaHktPm9wcy5yZWd1bGF0b3Jf ZGlzYWJsZSA9IGRzaV9waHlfaHdfdjNfMF9yZWd1bGF0b3JfZGlzYWJsZTsKLQlwaHktPm9wcy5l bmFibGUgPSBkc2lfcGh5X2h3X3YzXzBfZW5hYmxlOwotCXBoeS0+b3BzLmRpc2FibGUgPSBkc2lf cGh5X2h3X3YzXzBfZGlzYWJsZTsKLQlwaHktPm9wcy5jYWxjdWxhdGVfdGltaW5nX3BhcmFtcyA9 Ci0JCWRzaV9waHlfaHdfY2FsY3VsYXRlX3RpbWluZ19wYXJhbXM7Ci0JcGh5LT5vcHMudWxwc19v cHMud2FpdF9mb3JfbGFuZV9pZGxlID0KLQkJZHNpX3BoeV9od192M18wX3dhaXRfZm9yX2xhbmVf aWRsZTsKLQlwaHktPm9wcy51bHBzX29wcy51bHBzX3JlcXVlc3QgPQotCQlkc2lfcGh5X2h3X3Yz XzBfdWxwc19yZXF1ZXN0OwotCXBoeS0+b3BzLnVscHNfb3BzLnVscHNfZXhpdCA9Ci0JCWRzaV9w aHlfaHdfdjNfMF91bHBzX2V4aXQ7Ci0JcGh5LT5vcHMudWxwc19vcHMuZ2V0X2xhbmVzX2luX3Vs cHMgPQotCQlkc2lfcGh5X2h3X3YzXzBfZ2V0X2xhbmVzX2luX3VscHM7Ci0JcGh5LT5vcHMudWxw c19vcHMuaXNfbGFuZXNfaW5fdWxwcyA9Ci0JCWRzaV9waHlfaHdfdjNfMF9pc19sYW5lc19pbl91 bHBzOwotCXBoeS0+b3BzLnBoeV90aW1pbmdfdmFsID0gZHNpX3BoeV9od190aW1pbmdfdmFsX3Yz XzA7Ci19Ci0KLS8qKgotICogZHNpX2NhdGFsb2dfcGh5X3NldHVwKCkgLSByZXR1cm4gY2F0YWxv ZyBpbmZvIGZvciBkc2kgcGh5IGhhcmR3YXJlCi0gKiBAY3RybDogICAgICAgIFBvaW50ZXIgdG8g RFNJIFBIWSBodyBvYmplY3QuCi0gKiBAdmVyc2lvbjogICAgIERTSSBQSFkgdmVyc2lvbi4KLSAq IEBpbmRleDogICAgICAgRFNJIFBIWSBpbnN0YW5jZSBJRC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9u IHNldHVwcyB0aGUgY2F0YWxvZyBpbmZvcm1hdGlvbiBpbiB0aGUgZHNpX3BoeV9odyBvYmplY3Qu Ci0gKgotICogcmV0dXJuOiBlcnJvciBjb2RlIGZvciBmYWlsdXJlIGFuZCAwIGZvciBzdWNjZXNz LgotICovCi1pbnQgZHNpX2NhdGFsb2dfcGh5X3NldHVwKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHks Ci0JCQkgIGVudW0gZHNpX3BoeV92ZXJzaW9uIHZlcnNpb24sCi0JCQkgIHUzMiBpbmRleCkKLXsK LQlpbnQgcmMgPSAwOwotCi0JaWYgKHZlcnNpb24gPT0gRFNJX1BIWV9WRVJTSU9OX1VOS05PV04g fHwKLQkgICAgdmVyc2lvbiA+PSBEU0lfUEhZX1ZFUlNJT05fTUFYKSB7Ci0JCXByX2VycigiVW5z dXBwb3J0ZWQgdmVyc2lvbjogJWRcbiIsIHZlcnNpb24pOwotCQlyZXR1cm4gLUVOT1RTVVBQOwot CX0KLQotCXBoeS0+aW5kZXggPSBpbmRleDsKLQlzZXRfYml0KERTSV9QSFlfRFBIWSwgcGh5LT5m ZWF0dXJlX21hcCk7Ci0KLQlkc2lfcGh5X3RpbWluZ19jYWxjX2luaXQocGh5LCB2ZXJzaW9uKTsK LQotCXN3aXRjaCAodmVyc2lvbikgewotCWNhc2UgRFNJX1BIWV9WRVJTSU9OXzJfMDoKLQkJZHNp X2NhdGFsb2dfcGh5XzJfMF9pbml0KHBoeSk7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX1BIWV9WRVJT SU9OXzNfMDoKLQkJZHNpX2NhdGFsb2dfcGh5XzNfMF9pbml0KHBoeSk7Ci0JCWJyZWFrOwotCWNh c2UgRFNJX1BIWV9WRVJTSU9OXzBfMF9IUE06Ci0JY2FzZSBEU0lfUEhZX1ZFUlNJT05fMF8wX0xQ TToKLQljYXNlIERTSV9QSFlfVkVSU0lPTl8xXzA6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9U U1VQUDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2F0YWxvZy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfY2F0YWxvZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw YTQ2YWUwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNp X2NhdGFsb2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0vKgotICogQ29weXJp Z2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAy IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RTSV9DQVRBTE9HX0hfCi0jZGVm aW5lIF9EU0lfQ0FUQUxPR19IXwotCi0jaW5jbHVkZSAiZHNpX2N0cmxfaHcuaCIKLSNpbmNsdWRl ICJkc2lfcGh5X2h3LmgiCi0KLS8qKgotICogZHNpX2NhdGFsb2dfY3RybF9zZXR1cCgpIC0gcmV0 dXJuIGNhdGFsb2cgaW5mbyBmb3IgZHNpIGNvbnRyb2xsZXIKLSAqIEBjdHJsOiAgICAgICAgUG9p bnRlciB0byBEU0kgY29udHJvbGxlciBodyBvYmplY3QuCi0gKiBAdmVyc2lvbjogICAgIERTSSBj b250cm9sbGVyIHZlcnNpb24uCi0gKiBAaW5kZXg6ICAgICAgIERTSSBjb250cm9sbGVyIGluc3Rh bmNlIElELgotICogQHBoeV9pc29sYXRpb25fZW5hYmxlZDogICAgICAgRFNJIGNvbnRyb2xsZXIg d29ya3MgaXNvbGF0ZWQgZnJvbSBwaHkuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzZXR1cHMgdGhl IGNhdGFsb2cgaW5mb3JtYXRpb24gaW4gdGhlIGRzaV9jdHJsX2h3IG9iamVjdC4KLSAqCi0gKiBy ZXR1cm46IGVycm9yIGNvZGUgZm9yIGZhaWx1cmUgYW5kIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWlu dCBkc2lfY2F0YWxvZ19jdHJsX3NldHVwKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJICAg ZW51bSBkc2lfY3RybF92ZXJzaW9uIHZlcnNpb24sIHUzMiBpbmRleCwKLQkJICAgYm9vbCBwaHlf aXNvbGF0aW9uX2VuYWJsZWQpOwotCi0vKioKLSAqIGRzaV9jYXRhbG9nX3BoeV9zZXR1cCgpIC0g cmV0dXJuIGNhdGFsb2cgaW5mbyBmb3IgZHNpIHBoeSBoYXJkd2FyZQotICogQHBoeTogICAgICAg IFBvaW50ZXIgdG8gRFNJIFBIWSBodyBvYmplY3QuCi0gKiBAdmVyc2lvbjogICAgIERTSSBQSFkg dmVyc2lvbi4KLSAqIEBpbmRleDogICAgICAgRFNJIFBIWSBpbnN0YW5jZSBJRC4KLSAqCi0gKiBU aGlzIGZ1bmN0aW9uIHNldHVwcyB0aGUgY2F0YWxvZyBpbmZvcm1hdGlvbiBpbiB0aGUgZHNpX3Bo eV9odyBvYmplY3QuCi0gKgotICogcmV0dXJuOiBlcnJvciBjb2RlIGZvciBmYWlsdXJlIGFuZCAw IGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX2NhdGFsb2dfcGh5X3NldHVwKHN0cnVjdCBkc2lf cGh5X2h3ICpwaHksCi0JCQkgIGVudW0gZHNpX3BoeV92ZXJzaW9uIHZlcnNpb24sCi0JCQkgIHUz MiBpbmRleCk7Ci0KLS8qKgotICogZHNpX3BoeV90aW1pbmdfY2FsY19pbml0KCkgLSBpbml0aWFs aXplIGluZm8gZm9yIERTSSBQSFkgdGltaW5nIGNhbGN1bGF0aW9ucwotICogQHBoeTogICAgICAg IFBvaW50ZXIgdG8gRFNJIFBIWSBodyBvYmplY3QuCi0gKiBAdmVyc2lvbjogICAgIERTSSBQSFkg dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHVwcyB0aGUgY2F0YWxvZyBpbmZvcm1h dGlvbiBpbiB0aGUgZHNpX3BoeV9odyBvYmplY3QuCi0gKgotICogcmV0dXJuOiBlcnJvciBjb2Rl IGZvciBmYWlsdXJlIGFuZCAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX3BoeV90aW1pbmdf Y2FsY19pbml0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JZW51bSBkc2lfcGh5X3ZlcnNpb24g dmVyc2lvbik7Ci0KLS8qKgotICogZHNpX3BoeV9od19jYWxjdWxhdGVfdGltaW5nX3BhcmFtcygp IC0gRFNJIFBIWSB0aW1pbmcgcGFyYW1ldGVyIGNhbGN1bGF0aW9ucwotICogQHBoeTogICAgICAg IFBvaW50ZXIgdG8gRFNJIFBIWSBodyBvYmplY3QuCi0gKiBAbW9kZTogICAgICAgRFNJIG1vZGUg aW5mb3JtYXRpb24uCi0gKiBAaG9zdDogICAgICAgRFNJIGhvc3QgY29uZmlndXJhdGlvbi4KLSAq IEB0aW1pbmc6ICAgICBEU0kgcGh5IGxhbmUgY29uZmlndXJhdGlvbnMuCi0gKgotICogVGhpcyBm dW5jdGlvbiBzZXR1cHMgdGhlIGNhdGFsb2cgaW5mb3JtYXRpb24gaW4gdGhlIGRzaV9waHlfaHcg b2JqZWN0LgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBmb3IgZmFpbHVyZSBhbmQgMCBmb3Ig c3VjY2Vzcy4KLSAqLwotaW50IGRzaV9waHlfaHdfY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMoc3Ry dWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCQkJICAgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2Rl LAotCXN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpob3N0LAotCXN0cnVjdCBkc2lfcGh5X3Bl cl9sYW5lX2NmZ3MgKnRpbWluZyk7Ci0KLS8qIERlZmluaXRpb25zIGZvciAxNG5tIFBIWSBoYXJk d2FyZSBkcml2ZXIgKi8KLXZvaWQgZHNpX3BoeV9od192Ml8wX3JlZ3VsYXRvcl9lbmFibGUoc3Ry dWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCQkgICAgICBzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9j ZmdzICpjZmcpOwotdm9pZCBkc2lfcGh5X2h3X3YyXzBfcmVndWxhdG9yX2Rpc2FibGUoc3RydWN0 IGRzaV9waHlfaHcgKnBoeSk7Ci12b2lkIGRzaV9waHlfaHdfdjJfMF9lbmFibGUoc3RydWN0IGRz aV9waHlfaHcgKnBoeSwgc3RydWN0IGRzaV9waHlfY2ZnICpjZmcpOwotdm9pZCBkc2lfcGh5X2h3 X3YyXzBfZGlzYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCBzdHJ1Y3QgZHNpX3BoeV9jZmcg KmNmZyk7Ci12b2lkIGRzaV9waHlfaHdfdjJfMF9pZGxlX29uKHN0cnVjdCBkc2lfcGh5X2h3ICpw aHksIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKTsKLXZvaWQgZHNpX3BoeV9od192Ml8wX2lkbGVf b2ZmKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpOwotaW50IGRzaV9waHlfaHdfdGltaW5nX3ZhbF92 Ml8wKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZ19jZmcsCi0JCXUzMiAqdGlt aW5nX3ZhbCwgdTMyIHNpemUpOwotCi0vKiBEZWZpbml0aW9ucyBmb3IgMTBubSBQSFkgaGFyZHdh cmUgZHJpdmVyICovCi12b2lkIGRzaV9waHlfaHdfdjNfMF9yZWd1bGF0b3JfZW5hYmxlKHN0cnVj dCBkc2lfcGh5X2h3ICpwaHksCi0JCQkJICAgICAgc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2Zn cyAqY2ZnKTsKLXZvaWQgZHNpX3BoeV9od192M18wX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCBk c2lfcGh5X2h3ICpwaHkpOwotdm9pZCBkc2lfcGh5X2h3X3YzXzBfZW5hYmxlKHN0cnVjdCBkc2lf cGh5X2h3ICpwaHksIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKTsKLXZvaWQgZHNpX3BoeV9od192 M18wX2Rpc2FibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwgc3RydWN0IGRzaV9waHlfY2ZnICpj ZmcpOwotaW50IGRzaV9waHlfaHdfdjNfMF93YWl0X2Zvcl9sYW5lX2lkbGUoc3RydWN0IGRzaV9w aHlfaHcgKnBoeSwgdTMyIGxhbmVzKTsKLXZvaWQgZHNpX3BoeV9od192M18wX3VscHNfcmVxdWVz dChzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQlzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZywgdTMy IGxhbmVzKTsKLXZvaWQgZHNpX3BoeV9od192M18wX3VscHNfZXhpdChzdHJ1Y3QgZHNpX3BoeV9o dyAqcGh5LAotCQkJc3RydWN0IGRzaV9waHlfY2ZnICpjZmcsIHUzMiBsYW5lcyk7Ci11MzIgZHNp X3BoeV9od192M18wX2dldF9sYW5lc19pbl91bHBzKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpOwot Ym9vbCBkc2lfcGh5X2h3X3YzXzBfaXNfbGFuZXNfaW5fdWxwcyh1MzIgbGFuZXMsIHUzMiB1bHBz X2xhbmVzKTsKLWludCBkc2lfcGh5X2h3X3RpbWluZ192YWxfdjNfMChzdHJ1Y3QgZHNpX3BoeV9w ZXJfbGFuZV9jZmdzICp0aW1pbmdfY2ZnLAotCQl1MzIgKnRpbWluZ192YWwsIHUzMiBzaXplKTsK LQotLyogRFNJIGNvbnRyb2xsZXIgY29tbW9uIG9wcyAqLwotdTMyIGRzaV9jdHJsX2h3X2Ntbl9n ZXRfaW50ZXJydXB0X3N0YXR1cyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotdm9pZCBkc2lf Y3RybF9od19jbW5fZGVidWdfYnVzKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci12b2lkIGRz aV9jdHJsX2h3X2Ntbl9jbGVhcl9pbnRlcnJ1cHRfc3RhdHVzKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCwgdTMyIGludHMpOwotdm9pZCBkc2lfY3RybF9od19jbW5fZW5hYmxlX3N0YXR1c19pbnRl cnJ1cHRzKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkJICAgICB1MzIgaW50cyk7Ci0K LXU2NCBkc2lfY3RybF9od19jbW5fZ2V0X2Vycm9yX3N0YXR1cyhzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwpOwotdm9pZCBkc2lfY3RybF9od19jbW5fY2xlYXJfZXJyb3Jfc3RhdHVzKHN0cnVjdCBk c2lfY3RybF9odyAqY3RybCwgdTY0IGVycm9ycyk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9lbmFi bGVfZXJyb3JfaW50ZXJydXB0cyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJCSAgICB1 NjQgZXJyb3JzKTsKLQotdm9pZCBkc2lfY3RybF9od19jbW5fdmlkZW9fdGVzdF9wYXR0ZXJuX3Nl dHVwKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgZW51bSBkc2lfdGVzdF9wYXR0ZXJu IHR5cGUsCi0JCQkJIHUzMiBpbml0X3ZhbCk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jbWRfdGVz dF9wYXR0ZXJuX3NldHVwKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCSAgICAgICBlbnVt IGRzaV90ZXN0X3BhdHRlcm4gIHR5cGUsCi0JCQkgICAgICAgdTMyIGluaXRfdmFsLAotCQkJICAg ICAgIHUzMiBzdHJlYW1faWQpOwotdm9pZCBkc2lfY3RybF9od19jbW5fdGVzdF9wYXR0ZXJuX2Vu YWJsZShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIGJvb2wgZW5hYmxlKTsKLXZvaWQgZHNpX2N0 cmxfaHdfY21uX3RyaWdnZXJfY21kX3Rlc3RfcGF0dGVybihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0 cmwsCi0JCQkJIHUzMiBzdHJlYW1faWQpOwotCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9ob3N0X3Nl dHVwKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCSAgICAgICBzdHJ1Y3QgZHNpX2hvc3Rf Y29tbW9uX2NmZyAqY29uZmlnKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX3ZpZGVvX2VuZ2luZV9l bihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIGJvb2wgb24pOwotdm9pZCBkc2lfY3RybF9od19j bW5fdmlkZW9fZW5naW5lX3NldHVwKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAg ICAgc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmNvbW1vbl9jZmcsCi0JCQkJICAgICAgIHN0 cnVjdCBkc2lfdmlkZW9fZW5naW5lX2NmZyAqY2ZnKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX3Nl dF92aWRlb190aW1pbmcoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJIHN0cnVjdCBkc2lf bW9kZV9pbmZvICptb2RlKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX3NldF90aW1pbmdfZGIoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgYm9vbCBlbmFibGUpOwotdm9pZCBkc2lf Y3RybF9od19jbW5fY21kX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0J CQkJICAgICBzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAqY29tbW9uX2NmZywKLQkJCQkgICAg IHN0cnVjdCBkc2lfY21kX2VuZ2luZV9jZmcgKmNmZyk7Ci0KLXZvaWQgZHNpX2N0cmxfaHdfY21u X2N0cmxfZW4oc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCBib29sIG9uKTsKLXZvaWQgZHNpX2N0 cmxfaHdfY21uX2NtZF9lbmdpbmVfZW4oc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCBib29sIG9u KTsKLQotdm9pZCBkc2lfY3RybF9od19jbW5fc2V0dXBfY21kX3N0cmVhbShzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwsCi0JCQkJICAgICBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqbW9kZSwKLQkJCQkg ICAgIHUzMiBoX3N0cmlkZSwKLQkJCQkgICAgIHUzMiB2Y19pZCwKLQkJCQkgICAgIHN0cnVjdCBk c2lfcmVjdCAqcm9pKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX3BoeV9zd19yZXNldChzdHJ1Y3Qg ZHNpX2N0cmxfaHcgKmN0cmwpOwotdm9pZCBkc2lfY3RybF9od19jbW5fc29mdF9yZXNldChzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9zZXR1cF9taXNy KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCWVudW0gZHNpX29wX21vZGUgcGFuZWxfbW9k ZSwKLQkJCWJvb2wgZW5hYmxlLCB1MzIgZnJhbWVfY291bnQpOwotdTMyIGRzaV9jdHJsX2h3X2Nt bl9jb2xsZWN0X21pc3Ioc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJZW51bSBkc2lfb3Bf bW9kZSBwYW5lbF9tb2RlKTsKLQotdm9pZCBkc2lfY3RybF9od19jbW5fa2lja29mZl9jb21tYW5k KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCXN0cnVjdCBkc2lfY3RybF9jbWRfZG1hX2lu Zm8gKmNtZCwKLQkJCXUzMiBmbGFncyk7Ci0KLXZvaWQgZHNpX2N0cmxfaHdfY21uX2tpY2tvZmZf Zmlmb19jb21tYW5kKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCSAgICAgc3RydWN0IGRz aV9jdHJsX2NtZF9kbWFfZmlmb19pbmZvICpjbWQsCi0JCQkgICAgIHUzMiBmbGFncyk7Ci12b2lk IGRzaV9jdHJsX2h3X2Ntbl9yZXNldF9jbWRfZmlmbyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwp Owotdm9pZCBkc2lfY3RybF9od19jbW5fdHJpZ2dlcl9jb21tYW5kX2RtYShzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwpOwotdm9pZCBkc2lfY3RybF9od19kbG4wX3BoeV9lcnIoc3RydWN0IGRzaV9j dHJsX2h3ICpjdHJsKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX3BoeV9yZXNldF9jb25maWcoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJYm9vbCBlbmFibGUpOwotdm9pZCBkc2lfY3RybF9o d18yMl9waHlfcmVzZXRfY29uZmlnKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCWJvb2wg ZW5hYmxlKTsKLQotLyogRGVmaW5pdGlvbnMgc3BlY2lmaWMgdG8gMS40IERTSSBjb250cm9sbGVy IGhhcmR3YXJlICovCi1pbnQgZHNpX2N0cmxfaHdfMTRfd2FpdF9mb3JfbGFuZV9pZGxlKHN0cnVj dCBkc2lfY3RybF9odyAqY3RybCwgdTMyIGxhbmVzKTsKLXZvaWQgZHNpX2N0cmxfaHdfMTRfc2V0 dXBfbGFuZV9tYXAoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkgICAgICAgc3RydWN0IGRz aV9sYW5lX21hcCAqbGFuZV9tYXApOwotdm9pZCBkc2lfY3RybF9od18xNF91bHBzX3JlcXVlc3Qo c3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgbGFuZXMpOwotdm9pZCBkc2lfY3RybF9od18x NF91bHBzX2V4aXQoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgbGFuZXMpOwotdTMyIGRz aV9jdHJsX2h3XzE0X2dldF9sYW5lc19pbl91bHBzKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7 Ci0KLXZvaWQgZHNpX2N0cmxfaHdfMTRfY2xhbXBfZW5hYmxlKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCwKLQkJCQkgdTMyIGxhbmVzLAotCQkJCSBib29sIGVuYWJsZV91bHBzKTsKLQotdm9pZCBk c2lfY3RybF9od18xNF9jbGFtcF9kaXNhYmxlKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJ CQkgIHUzMiBsYW5lcywKLQkJCQkgIGJvb2wgZGlzYWJsZV91bHBzKTsKLXNzaXplX3QgZHNpX2N0 cmxfaHdfMTRfcmVnX2R1bXBfdG9fYnVmZmVyKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJ CQkJICBjaGFyICpidWYsCi0JCQkJCSAgdTMyIHNpemUpOwotCi0vKiBEZWZpbml0aW9ucyBzcGVj aWZpYyB0byAyLjAgRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUgKi8KLXZvaWQgZHNpX2N0cmxfaHdf MjBfc2V0dXBfbGFuZV9tYXAoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkgICAgICAgc3Ry dWN0IGRzaV9sYW5lX21hcCAqbGFuZV9tYXApOwotaW50IGRzaV9jdHJsX2h3XzIwX3dhaXRfZm9y X2xhbmVfaWRsZShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBsYW5lcyk7Ci1zc2l6ZV90 IGRzaV9jdHJsX2h3XzIwX3JlZ19kdW1wX3RvX2J1ZmZlcihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0 cmwsCi0JCQkJCSAgY2hhciAqYnVmLAotCQkJCQkgIHUzMiBzaXplKTsKLQotI2VuZGlmIC8qIF9E U0lfQ0FUQUxPR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfY2xrLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jbGsu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhmY2EwNC4uMDAwMDAwMAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jbGsuaAorKysgL2Rldi9udWxsCkBA IC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0K LSNpZm5kZWYgX0RTSV9DTEtfSF8KLSNkZWZpbmUgX0RTSV9DTEtfSF8KLQotI2luY2x1ZGUgPGxp bnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1 ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSAiZHB1 X3Bvd2VyX2hhbmRsZS5oIgotCi0jZGVmaW5lIE1BWF9TVFJJTkdfTEVOIDMyCi0jZGVmaW5lIE1B WF9EU0lfQ1RSTCAyCi0KLWVudW0gZHNpX2Nsa19zdGF0ZSB7Ci0JRFNJX0NMS19PRkYsCi0JRFNJ X0NMS19PTiwKLQlEU0lfQ0xLX0VBUkxZX0dBVEUsCi19OwotCi1lbnVtIGNsa19yZXFfY2xpZW50 IHsKLQlEU0lfQ0xLX1JFUV9NRFBfQ0xJRU5UID0gMCwKLQlEU0lfQ0xLX1JFUV9EU0lfQ0xJRU5U LAotfTsKLQotZW51bSBkc2lfbGlua19jbGtfdHlwZSB7Ci0JRFNJX0xJTktfRVNDX0NMSywKLQlE U0lfTElOS19CWVRFX0NMSywKLQlEU0lfTElOS19QSVhfQ0xLLAotCURTSV9MSU5LX0JZVEVfSU5U Rl9DTEssCi0JRFNJX0xJTktfQ0xLX01BWCwKLX07Ci0KLWVudW0gZHNpX2Nsa190eXBlIHsKLQlE U0lfQ09SRV9DTEsgPSBCSVQoMCksCi0JRFNJX0xJTktfQ0xLID0gQklUKDEpLAotCURTSV9BTExf Q0xLUyA9IChCSVQoMCkgfCBCSVQoMSkpLAotCURTSV9DTEtTX01BWCA9IEJJVCgyKSwKLX07Ci0K LXN0cnVjdCBkc2lfY2xrX2N0cmxfaW5mbyB7Ci0JZW51bSBkc2lfY2xrX3R5cGUgY2xrX3R5cGU7 Ci0JZW51bSBkc2lfY2xrX3N0YXRlIGNsa19zdGF0ZTsKLQllbnVtIGNsa19yZXFfY2xpZW50IGNs aWVudDsKLX07Ci0KLXN0cnVjdCBjbGtfY3RybF9jYiB7Ci0Jdm9pZCAqcHJpdjsKLQlpbnQgKCpk c2lfY2xrX2NiKSh2b2lkICpwcml2LCBzdHJ1Y3QgZHNpX2Nsa19jdHJsX2luZm8gY2xrX2N0cmxf aW5mbyk7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfY29yZV9jbGtfaW5mbyAtIENvcmUgY2xv Y2sgaW5mb3JtYXRpb24gZm9yIERTSSBoYXJkd2FyZQotICogQG1kcF9jb3JlX2NsazogICAgICAg IEhhbmRsZSB0byBNRFAgY29yZSBjbG9jay4KLSAqIEBpZmFjZV9jbGs6ICAgICAgICAgICBIYW5k bGUgdG8gTURQIGludGVyZmFjZSBjbG9jay4KLSAqIEBjb3JlX21tc3NfY2xrOiAgICAgICBIYW5k bGUgdG8gTU1TUyBjb3JlIGNsb2NrLgotICogQGJ1c19jbGs6ICAgICAgICAgICAgIEhhbmRsZSB0 byBidXMgY2xvY2suCi0gKiBAbW5vY19jbGs6ICAgICAgICAgICAgSGFuZGxlIHRvIE1NU1MgTk9D IGNsb2NrLgotICogQGRzaV9jb3JlX2NsaWVudDoJIFBvaW50ZXIgdG8gRFBVIHBvd2VyIGNsaWVu dAotICogQHBoYW5kbGU6ICAgICAgICAgICAgIFBvaW50ZXIgdG8gRFBVIHBvd2VyIGhhbmRsZQot ICovCi1zdHJ1Y3QgZHNpX2NvcmVfY2xrX2luZm8gewotCXN0cnVjdCBjbGsgKm1kcF9jb3JlX2Ns azsKLQlzdHJ1Y3QgY2xrICppZmFjZV9jbGs7Ci0Jc3RydWN0IGNsayAqY29yZV9tbXNzX2NsazsK LQlzdHJ1Y3QgY2xrICpidXNfY2xrOwotCXN0cnVjdCBjbGsgKm1ub2NfY2xrOwotCXN0cnVjdCBk cHVfcG93ZXJfY2xpZW50ICpkc2lfY29yZV9jbGllbnQ7Ci0Jc3RydWN0IGRwdV9wb3dlcl9oYW5k bGUgKnBoYW5kbGU7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfbGlua19jbGtfaW5mbyAtIExp bmsgY2xvY2sgaW5mb3JtYXRpb24gZm9yIERTSSBoYXJkd2FyZS4KLSAqIEBieXRlX2NsazogICAg ICAgIEhhbmRsZSB0byBEU0kgYnl0ZSBjbG9jay4KLSAqIEBwaXhlbF9jbGs6ICAgICAgIEhhbmRs ZSB0byBEU0kgcGl4ZWwgY2xvY2suCi0gKiBAZXNjX2NsazogICAgICAgICBIYW5kbGUgdG8gRFNJ IGVzY2FwZSBjbG9jay4KLSAqIEBieXRlX2ludGZfY2xrOiAgIEhhbmRsZSB0byBEU0kgYnl0ZSBp bnRmLiBjbG9jay4KLSAqLwotc3RydWN0IGRzaV9saW5rX2Nsa19pbmZvIHsKLQlzdHJ1Y3QgY2xr ICpieXRlX2NsazsKLQlzdHJ1Y3QgY2xrICpwaXhlbF9jbGs7Ci0Jc3RydWN0IGNsayAqZXNjX2Ns azsKLQlzdHJ1Y3QgY2xrICpieXRlX2ludGZfY2xrOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgbGlu a19jbGtfZnJlcSAtIENsb2NrIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBmb3IgTGluayBjbG9ja3MK LSAqIEBieXRlX2Nsa19yYXRlOiAgIEZyZXF1ZW5jeSBvZiBEU0kgYnl0ZSBjbG9jayBpbiBLSHou Ci0gKiBAcGl4ZWxfY2xrX3JhdGU6ICBGcmVxdWVuY3kgb2YgRFNJIHBpeGVsIGNsb2NrIGluIEtI ei4KLSAqIEBlc2NfY2xrX3JhdGU6ICAgIEZyZXF1ZW5jeSBvZiBEU0kgZXNjYXBlIGNsb2NrIGlu IEtIei4KLSAqLwotc3RydWN0IGxpbmtfY2xrX2ZyZXEgewotCXUzMiBieXRlX2Nsa19yYXRlOwot CXUzMiBwaXhfY2xrX3JhdGU7Ci0JdTMyIGVzY19jbGtfcmF0ZTsKLX07Ci0KLS8qKgotICogdHlw ZWRlZiAqcHJlX2Nsb2Nrb2ZmX2NiKCkgLSBDYWxsYmFjayBiZWZvcmUgY2xvY2sgaXMgdHVybmVk IG9mZgotICogQHByaXY6IHByaXZhdGUgZGF0YSBwb2ludGVyLgotICogQGNsa190eXBlOiBjbG9j ayB3aGljaCBpcyBiZWluZyB0dXJuZWQgb2ZmLgotICogQG5ld19zdGF0ZTogbmV4dCBzdGF0ZSBm b3IgdGhlIGNsb2NrLgotICoKLSAqIEByZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLXR5cGVkZWYg aW50ICgqcHJlX2Nsb2Nrb2ZmX2NiKSh2b2lkICpwcml2LAotCQkJICAgICAgIGVudW0gZHNpX2Ns a190eXBlIGNsa190eXBlLAotCQkJICAgICAgIGVudW0gZHNpX2Nsa19zdGF0ZSBuZXdfc3RhdGUp OwotCi0vKioKLSAqIHR5cGVkZWYgKnBvc3RfY2xvY2tvZmZfY2IoKSAtIENhbGxiYWNrIGFmdGVy IGNsb2NrIGlzIHR1cm5lZCBvZmYKLSAqIEBwcml2OiBwcml2YXRlIGRhdGEgcG9pbnRlci4KLSAq IEBjbGtfdHlwZTogY2xvY2sgd2hpY2ggd2FzIHR1cm5lZCBvZmYuCi0gKiBAY3Vycl9zdGF0ZTog Y3VycmVudCBzdGF0ZSBmb3IgdGhlIGNsb2NrLgotICoKLSAqIEByZXR1cm46IGVycm9yIGNvZGUu Ci0gKi8KLXR5cGVkZWYgaW50ICgqcG9zdF9jbG9ja29mZl9jYikodm9pZCAqcHJpdiwKLQkJCQll bnVtIGRzaV9jbGtfdHlwZSBjbGtfdHlwZSwKLQkJCQllbnVtIGRzaV9jbGtfc3RhdGUgY3Vycl9z dGF0ZSk7Ci0KLS8qKgotICogdHlwZWRlZiAqcG9zdF9jbG9ja29uX2NiKCkgLSBDYWxsYmFjayBh ZnRlciBjbG9jayBpcyB0dXJuZWQgb24KLSAqIEBwcml2OiBwcml2YXRlIGRhdGEgcG9pbnRlci4K LSAqIEBjbGtfdHlwZTogY2xvY2sgd2hpY2ggd2FzIHR1cm5lZCBvbi4KLSAqIEBjdXJyX3N0YXRl OiBjdXJyZW50IHN0YXRlIGZvciB0aGUgY2xvY2suCi0gKgotICogQHJldHVybjogZXJyb3IgY29k ZS4KLSAqLwotdHlwZWRlZiBpbnQgKCpwb3N0X2Nsb2Nrb25fY2IpKHZvaWQgKnByaXYsCi0JCQkg ICAgICAgZW51bSBkc2lfY2xrX3R5cGUgY2xrX3R5cGUsCi0JCQkgICAgICAgZW51bSBkc2lfY2xr X3N0YXRlIGN1cnJfc3RhdGUpOwotCi0vKioKLSAqIHR5cGVkZWYgKnByZV9jbG9ja29uX2NiKCkg LSBDYWxsYmFjayBiZWZvcmUgY2xvY2sgaXMgdHVybmVkIG9uCi0gKiBAcHJpdjogcHJpdmF0ZSBk YXRhIHBvaW50ZXIuCi0gKiBAY2xrX3R5cGU6IGNsb2NrIHdoaWNoIGlzIGJlaW5nIHR1cm5lZCBv bi4KLSAqIEBuZXdfc3RhdGU6IG5leHQgc3RhdGUgZm9yIHRoZSBjbG9jay4KLSAqCi0gKiBAcmV0 dXJuOiBlcnJvciBjb2RlLgotICovCi10eXBlZGVmIGludCAoKnByZV9jbG9ja29uX2NiKSh2b2lk ICpwcml2LAotCQkJICAgICAgZW51bSBkc2lfY2xrX3R5cGUgY2xrX3R5cGUsCi0JCQkgICAgICBl bnVtIGRzaV9jbGtfc3RhdGUgbmV3X3N0YXRlKTsKLQotCi0vKioKLSAqIHN0cnVjdCBkc2lfY2xr X2luZm8gLSBjbG9jayBpbmZvcm1hdGlvbiBmb3IgRFNJIGhhcmR3YXJlLgotICogQG5hbWU6ICAg ICAgICAgICAgICAgICAgICBjbGllbnQgbmFtZS4KLSAqIEBjX2Nsa3NbTUFYX0RTSV9DVFJMXSAg ICAgYXJyYXkgb2YgY29yZSBjbG9jayBjb25maWd1cmF0aW9ucwotICogQGxfY2xrc1tNQVhfRFNJ X0NUUkxdICAgICBhcnJheSBvZiBsaW5rIGNsb2NrIGNvbmZpZ3VyYXRpb25zCi0gKiBAYnVzX2hh bmRsZVtNQVhfRFNJX0NUUkxdIGFycmF5IG9mIGJ1cyBoYW5kbGVzCi0gKiBAY3RybF9pbmRleFtN QVhfRFNJX0NUUkxdIGFycmF5IG9mIERTSSBjb250cm9sbGVyIGluZGV4ZXMgbWFwcGVkCi0gKiAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNvcmUgYW5kIGxpbmsgY2xvY2sgY29uZmlndXJh dGlvbnMKLSAqIEBwcmVfY2xrb2ZmX2NiICAgICAgICAgICAgY2FsbGJhY2sgYmVmb3JlIGNsb2Nr IGlzIHR1cm5lZCBvZmYKLSAqIEBwb3N0X2Nsa29mZl9jYiAgICAgICAgICAgY2FsbGJhY2sgYWZ0 ZXIgY2xvY2sgaXMgdHVybmVkIG9mZgotICogQHBvc3RfY2xrb25fY2IgICAgICAgICAgICBjYWxs YmFjayBhZnRlciBjbG9jayBpcyB0dXJuZWQgb24KLSAqIEBwcmVfY2xrb25fY2IgICAgICAgICAg ICAgY2FsbGJhY2sgYmVmb3JlIGNsb2NrIGlzIHR1cm5lZCBvbgotICogQHByaXZfZGF0YSAgICAg ICAgICAgICAgICBwb2ludGVyIHRvIHByaXZhdGUgZGF0YQotICogQG1hc3Rlcl9uZHggICAgICAg ICAgICAgICBtYXN0ZXIgRFNJIGNvbnRyb2xsZXIgaW5kZXgKLSAqIEBkc2lfY3RybF9jb3VudCAg ICAgICAgICAgbnVtYmVyIG9mIERTSSBjb250cm9sbGVycwotICovCi1zdHJ1Y3QgZHNpX2Nsa19p bmZvIHsKLQljaGFyIG5hbWVbTUFYX1NUUklOR19MRU5dOwotCXN0cnVjdCBkc2lfY29yZV9jbGtf aW5mbyBjX2Nsa3NbTUFYX0RTSV9DVFJMXTsKLQlzdHJ1Y3QgZHNpX2xpbmtfY2xrX2luZm8gbF9j bGtzW01BWF9EU0lfQ1RSTF07Ci0JdTMyIGJ1c19oYW5kbGVbTUFYX0RTSV9DVFJMXTsKLQl1MzIg Y3RybF9pbmRleFtNQVhfRFNJX0NUUkxdOwotCXByZV9jbG9ja29mZl9jYiBwcmVfY2xrb2ZmX2Ni OwotCXBvc3RfY2xvY2tvZmZfY2IgcG9zdF9jbGtvZmZfY2I7Ci0JcG9zdF9jbG9ja29uX2NiIHBv c3RfY2xrb25fY2I7Ci0JcHJlX2Nsb2Nrb25fY2IgcHJlX2Nsa29uX2NiOwotCXZvaWQgKnByaXZf ZGF0YTsKLQl1MzIgbWFzdGVyX25keDsKLQl1MzIgZHNpX2N0cmxfY291bnQ7Ci19OwotCi0vKioK LSAqIHN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0IC0gUGFpciBvZiBjbG9jayBoYW5kbGVzIHRvIGRl c2NyaWJlIGxpbmsgY2xvY2tzCi0gKiBAYnl0ZV9jbGs6ICAgICBIYW5kbGUgdG8gRFNpIGJ5dGUg Y2xvY2suCi0gKiBAcGl4ZWxfY2xrOiAgICBIYW5kbGUgdG8gRFNJIHBpeGVsIGNsb2NrLgotICov Ci1zdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCB7Ci0Jc3RydWN0IGNsayAqYnl0ZV9jbGs7Ci0Jc3Ry dWN0IGNsayAqcGl4ZWxfY2xrOwotfTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9jbGtfbWdyX3Jl Z2lzdGVyKCkgLSBSZWdpc3RlciBEU0kgY2xvY2sgbWFuYWdlcgotICogQGluZm86ICAgICBTdHJ1 Y3R1cmUgY29udGFpbmluZyBEU0kgY2xvY2sgaW5mb3JtYXRpb24KLSAqLwotdm9pZCAqZHNpX2Rp c3BsYXlfY2xrX21uZ3JfcmVnaXN0ZXIoc3RydWN0IGRzaV9jbGtfaW5mbyAqaW5mbyk7Ci0KLS8q KgotICogZHNpX2Rpc3BsYXlfY2xrX21uZ3JfZGVyZWdpc3RlcigpIC0gRGVyZWdpc3RlciBEU0kg Y2xvY2sgbWFuYWdlcgotICogQGNsa19tbmdyOiAgRFNJIGNsb2NrIG1hbmFnZXIgcG9pbnRlcgot ICovCi1pbnQgZHNpX2Rpc3BsYXlfY2xrX21uZ3JfZGVyZWdpc3Rlcih2b2lkICpjbGtfbW5ncik7 Ci0KLS8qKgotICogZHNpX3JlZ2lzdGVyX2Nsa19oYW5kbGUoKSAtIFJlZ2lzdGVyIGNsb2NrIGhh bmRsZSB3aXRoIERTSSBjbG9jayBtYW5hZ2VyCi0gKiBAY2xrX21uZ3I6ICBEU0kgY2xvY2sgbWFu YWdlciBwb2ludGVyCi0gKiBAY2xpZW50OiAgICAgRFNJIGNsb2NrIGNsaWVudCBwb2ludGVyLgot ICovCi12b2lkICpkc2lfcmVnaXN0ZXJfY2xrX2hhbmRsZSh2b2lkICpjbGtfbW5nciwgY2hhciAq Y2xpZW50KTsKLQotLyoqCi0gKiBkc2lfZGVyZWdpc3Rlcl9jbGtfaGFuZGxlKCkgLSBEZXJlZ2lz dGVyIGNsb2NrIGhhbmRsZSBmcm9tIERTSSBjbG9jayBtYW5hZ2VyCi0gKiBAY2xpZW50OiAgICAg RFNJIGNsb2NrIGNsaWVudCBwb2ludGVyLgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBpbiBj YXNlIG9mIGZhaWx1cmUgb3IgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9kZXJlZ2lzdGVy X2Nsa19oYW5kbGUodm9pZCAqY2xpZW50KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9jbGtfY3Ry bCgpIC0gc2V0IGZyZXF1ZW5jaWVzIGZvciBsaW5rIGNsa3MKLSAqIEBoYW5kbGU6ICAgICBIYW5k bGUgb2YgZGVzaXJlZCBEU0kgY2xvY2sgY2xpZW50LgotICogQGNsa190eXBlOiAgIENsb2NrIHdo aWNoIGlzIGJlaW5nIGNvbnRyb2xsZWQuCi0gKiBAY2xrX3N0YXRlOiAgRGVzaXJlZCBzdGF0ZSBv ZiBjbG9jawotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUgb3Ig MCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9kaXNwbGF5X2Nsa19jdHJsKHZvaWQgKmhhbmRs ZSwKLQllbnVtIGRzaV9jbGtfdHlwZSBjbGtfdHlwZSwgZW51bSBkc2lfY2xrX3N0YXRlIGNsa19z dGF0ZSk7Ci0KLS8qKgotICogZHNpX2Nsa19zZXRfbGlua19mcmVxdWVuY2llcygpIC0gc2V0IGZy ZXF1ZW5jaWVzIGZvciBsaW5rIGNsa3MKLSAqIEBjbGllbnQ6ICAgICBEU0kgY2xvY2sgY2xpZW50 IHBvaW50ZXIuCi0gKiBAZnJlcTogICAgICAgU3RydWN0dXJlIGNvbnRhaW5pbmcgbGluayBjbG9j ayBmcmVxdWVuY2llcy4KLSAqIEBpbmRleDogICAgICBJbmRleCBvZiB0aGUgRFNJIGNvbnRyb2xs ZXIuCi0gKgotICogcmV0dXJuOiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZv ciBzdWNjZXNzLgotICovCi1pbnQgZHNpX2Nsa19zZXRfbGlua19mcmVxdWVuY2llcyh2b2lkICpj bGllbnQsIHN0cnVjdCBsaW5rX2Nsa19mcmVxIGZyZXEsCi0JCQkJCXUzMiBpbmRleCk7Ci0KLQot LyoqCi0gKiBkc2lfY2xrX3NldF9waXhlbF9jbGtfcmF0ZSgpIC0gc2V0IGZyZXF1ZW5jeSBmb3Ig cGl4ZWwgY2xvY2sKLSAqIEBjbGllbnQ6ICAgICAgIERTSSBjbG9jayBjbGllbnQgcG9pbnRlci4K LSAqIEBwaXhlbF9jbGs6IFBpeGVsIGNsb2NrIHJhdGUgaW4gSHouCi0gKiBAaW5kZXg6ICAgICAg SW5kZXggb2YgdGhlIERTSSBjb250cm9sbGVyLgotICogcmV0dXJuOiBlcnJvciBjb2RlIGluIGNh c2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX2Nsa19zZXRfcGl4 ZWxfY2xrX3JhdGUodm9pZCAqY2xpZW50LCB1NjQgcGl4ZWxfY2xrLCB1MzIgaW5kZXgpOwotCi0K LS8qKgotICogZHNpX2Nsa19zZXRfYnl0ZV9jbGtfcmF0ZSgpIC0gc2V0IGZyZXF1ZW5jeSBmb3Ig Ynl0ZSBjbG9jawotICogQGNsaWVudDogICAgICAgRFNJIGNsb2NrIGNsaWVudCBwb2ludGVyLgot ICogQGJ5dGVfY2xrOiBQaXhlbCBjbG9jayByYXRlIGluIEh6LgotICogQGluZGV4OiAgICAgIElu ZGV4IG9mIHRoZSBEU0kgY29udHJvbGxlci4KLSAqIHJldHVybjogZXJyb3IgY29kZSBpbiBjYXNl IG9mIGZhaWx1cmUgb3IgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9jbGtfc2V0X2J5dGVf Y2xrX3JhdGUodm9pZCAqY2xpZW50LCB1NjQgYnl0ZV9jbGssIHUzMiBpbmRleCk7Ci0KLS8qKgot ICogZHNpX2Nsa191cGRhdGVfcGFyZW50KCkgLSB1cGRhdGUgcGFyZW50IGNsb2NrcyBmb3Igc3Bl Y2lmaWVkIGNsb2NrCi0gKiBAcGFyZW50OiAgICAgICBsaW5rIGNsb2NrIHBhaXIgd2hpY2ggYXJl IHNldCBhcyBwYXJlbnQuCi0gKiBAY2hpbGQ6ICAgICAgICBsaW5rIGNsb2NrIHBhaXIgd2hvc2Ug cGFyZW50IGhhcyB0byBiZSBzZXQuCi0gKi8KLWludCBkc2lfY2xrX3VwZGF0ZV9wYXJlbnQoc3Ry dWN0IGRzaV9jbGtfbGlua19zZXQgKnBhcmVudCwKLQkJCSAgc3RydWN0IGRzaV9jbGtfbGlua19z ZXQgKmNoaWxkKTsKLSNlbmRpZiAvKiBfRFNJX0NMS19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2xrX21hbmFnZXIuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Nsa19tYW5hZ2VyLmMKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDMyZGQwMmEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfY2xrX21hbmFnZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMzUgKzAs MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Ci0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaW5jbHVkZSA8 bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KLSNpbmNsdWRlICJkc2lfY2xrLmgiCi0KLSNpZmRlZiBDT05GSUdfQ0hST01FX0JVU19T Q0FMRQotI2luY2x1ZGUgPGxpbnV4L21zbS1idXMuaD4KLSNlbmRpZgotCi1zdHJ1Y3QgZHNpX2Nv cmVfY2xrcyB7Ci0Jc3RydWN0IGRzaV9jb3JlX2Nsa19pbmZvIGNsa3M7Ci0JdTMyIGJ1c19oYW5k bGU7Ci19OwotCi1zdHJ1Y3QgZHNpX2xpbmtfY2xrcyB7Ci0Jc3RydWN0IGRzaV9saW5rX2Nsa19p bmZvIGNsa3M7Ci0Jc3RydWN0IGxpbmtfY2xrX2ZyZXEgZnJlcTsKLX07Ci0KLXN0cnVjdCBkc2lf Y2xrX21uZ3IgewotCWNoYXIgbmFtZVtNQVhfU1RSSU5HX0xFTl07Ci0Jc3RydWN0IG11dGV4IGNs a19tdXRleDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGNsaWVudF9saXN0OwotCi0JdTMyIGRzaV9jdHJs X2NvdW50OwotCXUzMiBtYXN0ZXJfbmR4OwotCXN0cnVjdCBkc2lfY29yZV9jbGtzIGNvcmVfY2xr c1tNQVhfRFNJX0NUUkxdOwotCXN0cnVjdCBkc2lfbGlua19jbGtzIGxpbmtfY2xrc1tNQVhfRFNJ X0NUUkxdOwotCXUzMiBjdHJsX2luZGV4W01BWF9EU0lfQ1RSTF07Ci0JdTMyIGNvcmVfY2xrX3N0 YXRlOwotCXUzMiBsaW5rX2Nsa19zdGF0ZTsKLQotCXByZV9jbG9ja29mZl9jYiBwcmVfY2xrb2Zm X2NiOwotCXBvc3RfY2xvY2tvZmZfY2IgcG9zdF9jbGtvZmZfY2I7Ci0JcG9zdF9jbG9ja29uX2Ni IHBvc3RfY2xrb25fY2I7Ci0JcHJlX2Nsb2Nrb25fY2IgcHJlX2Nsa29uX2NiOwotCi0Jdm9pZCAq cHJpdl9kYXRhOwotfTsKLQotc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8gewotCWNoYXIgbmFt ZVtNQVhfU1RSSU5HX0xFTl07Ci0JdTMyIGNvcmVfcmVmY291bnQ7Ci0JdTMyIGxpbmtfcmVmY291 bnQ7Ci0JdTMyIGNvcmVfY2xrX3N0YXRlOwotCXUzMiBsaW5rX2Nsa19zdGF0ZTsKLQlzdHJ1Y3Qg bGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGRzaV9jbGtfbW5nciAqbW5ncjsKLX07Ci0KLXN0YXRp YyBpbnQgX2dldF9jbGtfbW5ncl9pbmRleChzdHJ1Y3QgZHNpX2Nsa19tbmdyICptbmdyLAotCQkJ CXUzMiBkc2lfY3RybF9pbmRleCwKLQkJCQl1MzIgKmNsa19tbmdyX2luZGV4KQotewotCWludCBp OwotCi0JZm9yIChpID0gMDsgaSA8IG1uZ3ItPmRzaV9jdHJsX2NvdW50OyBpKyspIHsKLQkJaWYg KG1uZ3ItPmN0cmxfaW5kZXhbaV0gPT0gZHNpX2N0cmxfaW5kZXgpIHsKLQkJCSpjbGtfbW5ncl9p bmRleCA9IGk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQot Ci0vKioKLSAqIGRzaV9jbGtfc2V0X2xpbmtfZnJlcXVlbmNpZXMoKSAtIHNldCBmcmVxdWVuY2ll cyBmb3IgbGluayBjbGtzCi0gKiBAY2xrczogICAgICAgICBMaW5rIGNsb2NrIGluZm9ybWF0aW9u Ci0gKiBAcGl4ZWxfY2xrOiAgICBwaXhlbCBjbG9jayBmcmVxdWVuY3kgaW4gS0h6LgotICogQGJ5 dGVfY2xrOiAgICAgQnl0ZSBjbG9jayBmcmVxdWVuY3kgaW4gS0h6LgotICogQGVzY19jbGs6ICAg ICAgRXNjYXBlIGNsb2NrIGZyZXF1ZW5jeSBpbiBLSHouCi0gKgotICogcmV0dXJuOiBlcnJvciBj b2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX2Ns a19zZXRfbGlua19mcmVxdWVuY2llcyh2b2lkICpjbGllbnQsIHN0cnVjdCBsaW5rX2Nsa19mcmVx IGZyZXEsCi0JCQkJdTMyIGluZGV4KQotewotCWludCByYyA9IDAsIGNsa19tbmdyX2luZGV4ID0g MDsKLQlzdHJ1Y3QgZHNpX2Nsa19jbGllbnRfaW5mbyAqYyA9IGNsaWVudDsKLQlzdHJ1Y3QgZHNp X2Nsa19tbmdyICptbmdyOwotCi0JaWYgKCFjbGllbnQpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBh cmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW1uZ3IgPSBjLT5tbmdyOwotCXJj ID0gX2dldF9jbGtfbW5ncl9pbmRleChtbmdyLCBpbmRleCwgJmNsa19tbmdyX2luZGV4KTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gbWFwIGNvbnRyb2wgaW5kZXggJWRcbiIsIGlu ZGV4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbWVtY3B5KCZtbmdyLT5saW5rX2Nsa3Nb Y2xrX21uZ3JfaW5kZXhdLmZyZXEsICZmcmVxLAotCQlzaXplb2Yoc3RydWN0IGxpbmtfY2xrX2Zy ZXEpKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY2xrX3NldF9waXhlbF9jbGtf cmF0ZSgpIC0gc2V0IGZyZXF1ZW5jeSBmb3IgcGl4ZWwgY2xvY2sKLSAqIEBjbGtzOiAgICAgIERT SSBsaW5rIGNsb2NrIGluZm9ybWF0aW9uLgotICogQHBpeGVsX2NsazogUGl4ZWwgY2xvY2sgcmF0 ZSBpbiBLSHouCi0gKgotICogcmV0dXJuOiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBv ciAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX2Nsa19zZXRfcGl4ZWxfY2xrX3JhdGUodm9p ZCAqY2xpZW50LCB1NjQgcGl4ZWxfY2xrLCB1MzIgaW5kZXgpCi17Ci0JaW50IHJjID0gMDsKLQlz dHJ1Y3QgZHNpX2Nsa19jbGllbnRfaW5mbyAqYyA9IGNsaWVudDsKLQlzdHJ1Y3QgZHNpX2Nsa19t bmdyICptbmdyOwotCi0JbW5nciA9IGMtPm1uZ3I7Ci0JcmMgPSBjbGtfc2V0X3JhdGUobW5nci0+ bGlua19jbGtzW2luZGV4XS5jbGtzLnBpeGVsX2NsaywgcGl4ZWxfY2xrKTsKLQlpZiAocmMpCi0J CXByX2VycigiZmFpbGVkIHRvIHNldCBjbGsgcmF0ZSBmb3IgcGl4ZWwgY2xrLCByYz0lZFxuIiwg cmMpOwotCWVsc2UKLQkJbW5nci0+bGlua19jbGtzW2luZGV4XS5mcmVxLnBpeF9jbGtfcmF0ZSA9 IHBpeGVsX2NsazsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY2xrX3NldF9ieXRl X2Nsa19yYXRlKCkgLSBzZXQgZnJlcXVlbmN5IGZvciBieXRlIGNsb2NrCi0gKiBAY2xpZW50OiAg ICAgICBEU0kgY2xvY2sgY2xpZW50IHBvaW50ZXIuCi0gKiBAYnl0ZV9jbGs6IFBpeGVsIGNsb2Nr IHJhdGUgaW4gSHouCi0gKiBAaW5kZXg6ICAgICAgSW5kZXggb2YgdGhlIERTSSBjb250cm9sbGVy LgotICogcmV0dXJuOiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNj ZXNzLgotICovCi1pbnQgZHNpX2Nsa19zZXRfYnl0ZV9jbGtfcmF0ZSh2b2lkICpjbGllbnQsIHU2 NCBieXRlX2NsaywgdTMyIGluZGV4KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9jbGtf Y2xpZW50X2luZm8gKmMgPSBjbGllbnQ7Ci0Jc3RydWN0IGRzaV9jbGtfbW5nciAqbW5ncjsKLQot CW1uZ3IgPSBjLT5tbmdyOwotCXJjID0gY2xrX3NldF9yYXRlKG1uZ3ItPmxpbmtfY2xrc1tpbmRl eF0uY2xrcy5ieXRlX2NsaywgYnl0ZV9jbGspOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQg dG8gc2V0IGNsayByYXRlIGZvciBieXRlIGNsaywgcmM9JWRcbiIsIHJjKTsKLQllbHNlCi0JCW1u Z3ItPmxpbmtfY2xrc1tpbmRleF0uZnJlcS5ieXRlX2Nsa19yYXRlID0gYnl0ZV9jbGs7Ci0KLQly ZXR1cm4gcmM7Ci0KLX0KLQotLyoqCi0gKiBkc2lfY2xrX3VwZGF0ZV9wYXJlbnQoKSAtIHVwZGF0 ZSBwYXJlbnQgY2xvY2tzIGZvciBzcGVjaWZpZWQgY2xvY2sKLSAqIEBwYXJlbnQ6ICAgICAgIGxp bmsgY2xvY2sgcGFpciB3aGljaCBhcmUgc2V0IGFzIHBhcmVudC4KLSAqIEBjaGlsZDogICAgICAg IGxpbmsgY2xvY2sgcGFpciB3aG9zZSBwYXJlbnQgaGFzIHRvIGJlIHNldC4KLSAqLwotaW50IGRz aV9jbGtfdXBkYXRlX3BhcmVudChzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqcGFyZW50LAotCQkJ ICBzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqY2hpbGQpCi17Ci0JaW50IHJjID0gMDsKLQotCXJj ID0gY2xrX3NldF9wYXJlbnQoY2hpbGQtPmJ5dGVfY2xrLCBwYXJlbnQtPmJ5dGVfY2xrKTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IGJ5dGUgY2xrIHBhcmVudFxuIik7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjbGtfc2V0X3BhcmVudChjaGlsZC0+cGl4ZWxfY2xr LCBwYXJlbnQtPnBpeGVsX2Nsayk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHNl dCBwaXhlbCBjbGsgcGFyZW50XG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci1lcnJvcjoKLQlyZXR1 cm4gcmM7Ci19Ci0KLWludCBkc2lfY29yZV9jbGtfc3RhcnQoc3RydWN0IGRzaV9jb3JlX2Nsa3Mg KmNfY2xrcykKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKGNfY2xrcy0+Y2xrcy5tZHBfY29yZV9j bGspIHsKLQkJcmMgPSBjbGtfcHJlcGFyZV9lbmFibGUoY19jbGtzLT5jbGtzLm1kcF9jb3JlX2Ns ayk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIG1kcF9jb3JlX2Ns aywgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlpZiAoY19jbGtz LT5jbGtzLm1ub2NfY2xrKSB7Ci0JCXJjID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNfY2xrcy0+Y2xr cy5tbm9jX2Nsayk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIG1u b2NfY2xrLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX2NvcmVfY2xrOwot CQl9Ci0JfQotCi0JaWYgKGNfY2xrcy0+Y2xrcy5pZmFjZV9jbGspIHsKLQkJcmMgPSBjbGtfcHJl cGFyZV9lbmFibGUoY19jbGtzLT5jbGtzLmlmYWNlX2Nsayk7Ci0JCWlmIChyYykgewotCQkJcHJf ZXJyKCJmYWlsZWQgdG8gZW5hYmxlIGlmYWNlX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8g ZXJyb3JfZGlzYWJsZV9tbm9jX2NsazsKLQkJfQotCX0KLQotCWlmIChjX2Nsa3MtPmNsa3MuYnVz X2NsaykgewotCQlyYyA9IGNsa19wcmVwYXJlX2VuYWJsZShjX2Nsa3MtPmNsa3MuYnVzX2Nsayk7 Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIGJ1c19jbGssIHJjPSVk XG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfaWZhY2VfY2xrOwotCQl9Ci0JfQotCi0J aWYgKGNfY2xrcy0+Y2xrcy5jb3JlX21tc3NfY2xrKSB7Ci0JCXJjID0gY2xrX3ByZXBhcmVfZW5h YmxlKGNfY2xrcy0+Y2xrcy5jb3JlX21tc3NfY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo ImZhaWxlZCB0byBlbmFibGUgY29yZV9tbXNzX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8g ZXJyb3JfZGlzYWJsZV9idXNfY2xrOwotCQl9Ci0JfQotCi0jaWZkZWYgQ09ORklHX0NIUk9NRV9C VVNfU0NBTEUKLQlpZiAoY19jbGtzLT5idXNfaGFuZGxlKSB7Ci0JCXJjID0gbXNtX2J1c19zY2Fs ZV9jbGllbnRfdXBkYXRlX3JlcXVlc3QoY19jbGtzLT5idXNfaGFuZGxlLCAxKTsKLQkJaWYgKHJj KSB7Ci0JCQlwcl9lcnIoImJ1cyBzY2FsZSBjbGllbnQgZW5hYmxlIGZhaWxlZCwgcmM9JWRcbiIs IHJjKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9tbXNzX2NsazsKLQkJfQotCX0KLSNlbmRpZgot CXJldHVybiByYzsKLQotI2lmZGVmIENPTkZJR19DSFJPTUVfQlVTX1NDQUxFCi1lcnJvcl9kaXNh YmxlX21tc3NfY2xrOgotCWlmIChjX2Nsa3MtPmNsa3MuY29yZV9tbXNzX2NsaykKLQkJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGNfY2xrcy0+Y2xrcy5jb3JlX21tc3NfY2xrKTsKLSNlbmRpZgotCi1l cnJvcl9kaXNhYmxlX2J1c19jbGs6Ci0JaWYgKGNfY2xrcy0+Y2xrcy5idXNfY2xrKQotCQljbGtf ZGlzYWJsZV91bnByZXBhcmUoY19jbGtzLT5jbGtzLmJ1c19jbGspOwotZXJyb3JfZGlzYWJsZV9p ZmFjZV9jbGs6Ci0JaWYgKGNfY2xrcy0+Y2xrcy5pZmFjZV9jbGspCi0JCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShjX2Nsa3MtPmNsa3MuaWZhY2VfY2xrKTsKLWVycm9yX2Rpc2FibGVfbW5vY19jbGs6 Ci0JaWYgKGNfY2xrcy0+Y2xrcy5tbm9jX2NsaykKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNf Y2xrcy0+Y2xrcy5tbm9jX2Nsayk7Ci1lcnJvcl9kaXNhYmxlX2NvcmVfY2xrOgotCWlmIChjX2Ns a3MtPmNsa3MubWRwX2NvcmVfY2xrKQotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY19jbGtzLT5j bGtzLm1kcF9jb3JlX2Nsayk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfY29y ZV9jbGtfc3RvcChzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY19jbGtzKQotewotCWludCByYyA9IDA7 Ci0KLSNpZmRlZiBDT05GSUdfQ0hST01FX0JVU19TQ0FMRQotCWlmIChjX2Nsa3MtPmJ1c19oYW5k bGUpIHsKLQkJcmMgPSBtc21fYnVzX3NjYWxlX2NsaWVudF91cGRhdGVfcmVxdWVzdChjX2Nsa3Mt PmJ1c19oYW5kbGUsIDApOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiYnVzIHNjYWxlIGNsaWVu dCBkaXNhYmxlIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJCXJldHVybiByYzsKLQkJfQotCX0K LSNlbmRpZgotCi0JaWYgKGNfY2xrcy0+Y2xrcy5jb3JlX21tc3NfY2xrKQotCQljbGtfZGlzYWJs ZV91bnByZXBhcmUoY19jbGtzLT5jbGtzLmNvcmVfbW1zc19jbGspOwotCi0JaWYgKGNfY2xrcy0+ Y2xrcy5idXNfY2xrKQotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY19jbGtzLT5jbGtzLmJ1c19j bGspOwotCi0JaWYgKGNfY2xrcy0+Y2xrcy5pZmFjZV9jbGspCi0JCWNsa19kaXNhYmxlX3VucHJl cGFyZShjX2Nsa3MtPmNsa3MuaWZhY2VfY2xrKTsKLQotCWlmIChjX2Nsa3MtPmNsa3MubW5vY19j bGspCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShjX2Nsa3MtPmNsa3MubW5vY19jbGspOwotCi0J aWYgKGNfY2xrcy0+Y2xrcy5tZHBfY29yZV9jbGspCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShj X2Nsa3MtPmNsa3MubWRwX2NvcmVfY2xrKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCBkc2lfbGlua19jbGtfc2V0X3JhdGUoc3RydWN0IGRzaV9saW5rX2Nsa3MgKmxfY2xrcykKLXsK LQlpbnQgcmMgPSAwOwotCi0JcmMgPSBjbGtfc2V0X3JhdGUobF9jbGtzLT5jbGtzLmVzY19jbGss IGxfY2xrcy0+ZnJlcS5lc2NfY2xrX3JhdGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoImNsa19z ZXRfcmF0ZSBmYWlsZWQgZm9yIGVzY19jbGsgcmMgPSAlZFxuIiwgcmMpOwotCQlnb3RvIGVycm9y OwotCX0KLQotCXJjID0gY2xrX3NldF9yYXRlKGxfY2xrcy0+Y2xrcy5ieXRlX2NsaywgbF9jbGtz LT5mcmVxLmJ5dGVfY2xrX3JhdGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoImNsa19zZXRfcmF0 ZSBmYWlsZWQgZm9yIGJ5dGVfY2xrIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQlyYyA9IGNsa19zZXRfcmF0ZShsX2Nsa3MtPmNsa3MucGl4ZWxfY2xrLCBsX2Nsa3MtPmZy ZXEucGl4X2Nsa19yYXRlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJjbGtfc2V0X3JhdGUgZmFp bGVkIGZvciBwaXhlbF9jbGsgcmMgPSAlZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQot CS8qCi0JICogSWYgYnl0ZV9pbnRmX2NsayBpcyBwcmVzZW50LCBzZXQgcmF0ZSBmb3IgdGhhdCB0 b28uCi0JICogRm9yIERQSFk6IGJ5dGVfaW50Zl9jbGtfcmF0ZSA9IGJ5dGVfY2xrX3JhdGUgLyAy Ci0JICogdG9kbzogdGhpcyBuZWVkcyB0byBiZSByZXZpc2l0ZWQgd2hlbiBzdXBwb3J0IGZvciBD UEhZIGlzIGFkZGVkCi0JICovCi0JaWYgKGxfY2xrcy0+Y2xrcy5ieXRlX2ludGZfY2xrKSB7Ci0J CXJjID0gY2xrX3NldF9yYXRlKGxfY2xrcy0+Y2xrcy5ieXRlX2ludGZfY2xrLAotCQkJKGxfY2xr cy0+ZnJlcS5ieXRlX2Nsa19yYXRlIC8gMikpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vycigic2V0 X3JhdGUgZmFpbGVkIGZvciBieXRlX2ludGZfY2xrIHJjID0gJWRcbiIsCi0JCQkJcmMpOwotCQkJ Z290byBlcnJvcjsKLQkJfQotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCBkc2lfbGlua19jbGtfcHJlcGFyZShzdHJ1Y3QgZHNpX2xpbmtfY2xrcyAqbF9jbGtzKQotewot CWludCByYyA9IDA7Ci0KLQlyYyA9IGNsa19wcmVwYXJlKGxfY2xrcy0+Y2xrcy5lc2NfY2xrKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcHJlcGFyZSBkc2kgZXNjIGNsaywgcmM9 JWRcbiIsIHJjKTsKLQkJZ290byBlc2NfY2xrX2VycjsKLQl9Ci0KLQlyYyA9IGNsa19wcmVwYXJl KGxfY2xrcy0+Y2xrcy5ieXRlX2Nsayk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRv IHByZXBhcmUgZHNpIGJ5dGUgY2xrLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGJ5dGVfY2xrX2Vy cjsKLQl9Ci0KLQlyYyA9IGNsa19wcmVwYXJlKGxfY2xrcy0+Y2xrcy5waXhlbF9jbGspOwotCWlm IChyYykgewotCQlwcl9lcnIoIkZhaWxlZCB0byBwcmVwYXJlIGRzaSBwaXhlbCBjbGssIHJjPSVk XG4iLCByYyk7Ci0JCWdvdG8gcGl4ZWxfY2xrX2VycjsKLQl9Ci0KLQlpZiAobF9jbGtzLT5jbGtz LmJ5dGVfaW50Zl9jbGspIHsKLQkJcmMgPSBjbGtfcHJlcGFyZShsX2Nsa3MtPmNsa3MuYnl0ZV9p bnRmX2Nsayk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJGYWlsZWQgdG8gcHJlcGFyZSBkc2kg Ynl0ZSBpbnRmIGNsaywgcmM9JWRcbiIsCi0JCQkJcmMpOwotCQkJZ290byBieXRlX2ludGZfY2xr X2VycjsKLQkJfQotCX0KLQotCXJldHVybiByYzsKLQotYnl0ZV9pbnRmX2Nsa19lcnI6Ci0JY2xr X3VucHJlcGFyZShsX2Nsa3MtPmNsa3MucGl4ZWxfY2xrKTsKLXBpeGVsX2Nsa19lcnI6Ci0JY2xr X3VucHJlcGFyZShsX2Nsa3MtPmNsa3MuYnl0ZV9jbGspOwotYnl0ZV9jbGtfZXJyOgotCWNsa191 bnByZXBhcmUobF9jbGtzLT5jbGtzLmVzY19jbGspOwotZXNjX2Nsa19lcnI6Ci0JcmV0dXJuIHJj OwotfQotCi1zdGF0aWMgdm9pZCBkc2lfbGlua19jbGtfdW5wcmVwYXJlKHN0cnVjdCBkc2lfbGlu a19jbGtzICpsX2Nsa3MpCi17Ci0JaWYgKGxfY2xrcy0+Y2xrcy5ieXRlX2ludGZfY2xrKQotCQlj bGtfdW5wcmVwYXJlKGxfY2xrcy0+Y2xrcy5ieXRlX2ludGZfY2xrKTsKLQljbGtfdW5wcmVwYXJl KGxfY2xrcy0+Y2xrcy5waXhlbF9jbGspOwotCWNsa191bnByZXBhcmUobF9jbGtzLT5jbGtzLmJ5 dGVfY2xrKTsKLQljbGtfdW5wcmVwYXJlKGxfY2xrcy0+Y2xrcy5lc2NfY2xrKTsKLX0KLQotc3Rh dGljIGludCBkc2lfbGlua19jbGtfZW5hYmxlKHN0cnVjdCBkc2lfbGlua19jbGtzICpsX2Nsa3Mp Ci17Ci0JaW50IHJjID0gMDsKLQotCXJjID0gY2xrX2VuYWJsZShsX2Nsa3MtPmNsa3MuZXNjX2Ns ayk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGVuYWJsZSBkc2kgZXNjIGNsaywg cmM9JWRcbiIsIHJjKTsKLQkJZ290byBlc2NfY2xrX2VycjsKLQl9Ci0KLQlyYyA9IGNsa19lbmFi bGUobF9jbGtzLT5jbGtzLmJ5dGVfY2xrKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQg dG8gZW5hYmxlIGRzaSBieXRlIGNsaywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBieXRlX2Nsa19l cnI7Ci0JfQotCi0JcmMgPSBjbGtfZW5hYmxlKGxfY2xrcy0+Y2xrcy5waXhlbF9jbGspOwotCWlm IChyYykgewotCQlwcl9lcnIoIkZhaWxlZCB0byBlbmFibGUgZHNpIHBpeGVsIGNsaywgcmM9JWRc biIsIHJjKTsKLQkJZ290byBwaXhlbF9jbGtfZXJyOwotCX0KLQotCWlmIChsX2Nsa3MtPmNsa3Mu Ynl0ZV9pbnRmX2NsaykgewotCQlyYyA9IGNsa19lbmFibGUobF9jbGtzLT5jbGtzLmJ5dGVfaW50 Zl9jbGspOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiRmFpbGVkIHRvIGVuYWJsZSBkc2kgYnl0 ZSBpbnRmIGNsaywgcmM9JWRcbiIsCi0JCQkJcmMpOwotCQkJZ290byBieXRlX2ludGZfY2xrX2Vy cjsKLQkJfQotCX0KLQotCXJldHVybiByYzsKLQotYnl0ZV9pbnRmX2Nsa19lcnI6Ci0JY2xrX2Rp c2FibGUobF9jbGtzLT5jbGtzLnBpeGVsX2Nsayk7Ci1waXhlbF9jbGtfZXJyOgotCWNsa19kaXNh YmxlKGxfY2xrcy0+Y2xrcy5ieXRlX2Nsayk7Ci1ieXRlX2Nsa19lcnI6Ci0JY2xrX2Rpc2FibGUo bF9jbGtzLT5jbGtzLmVzY19jbGspOwotZXNjX2Nsa19lcnI6Ci0JcmV0dXJuIHJjOwotfQotCi1z dGF0aWMgdm9pZCBkc2lfbGlua19jbGtfZGlzYWJsZShzdHJ1Y3QgZHNpX2xpbmtfY2xrcyAqbF9j bGtzKQotewotCWlmIChsX2Nsa3MtPmNsa3MuYnl0ZV9pbnRmX2NsaykKLQkJY2xrX2Rpc2FibGUo bF9jbGtzLT5jbGtzLmJ5dGVfaW50Zl9jbGspOwotCWNsa19kaXNhYmxlKGxfY2xrcy0+Y2xrcy5l c2NfY2xrKTsKLQljbGtfZGlzYWJsZShsX2Nsa3MtPmNsa3MucGl4ZWxfY2xrKTsKLQljbGtfZGlz YWJsZShsX2Nsa3MtPmNsa3MuYnl0ZV9jbGspOwotfQotCi0vKioKLSAqIGRzaV9saW5rX2Nsa19z dGFydCgpIC0gZW5hYmxlIGRzaSBsaW5rIGNsb2NrcwotICovCi1pbnQgZHNpX2xpbmtfY2xrX3N0 YXJ0KHN0cnVjdCBkc2lfbGlua19jbGtzICpjbGtzKQotewotCWludCByYyA9IDA7Ci0KLQlyYyA9 IGRzaV9saW5rX2Nsa19zZXRfcmF0ZShjbGtzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWls ZWQgdG8gc2V0IGNsayByYXRlcywgcmMgPSAlZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0K LQotCXJjID0gZHNpX2xpbmtfY2xrX3ByZXBhcmUoY2xrcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiZmFpbGVkIHRvIHByZXBhcmUgbGluayBjbGtzLCByYyA9ICVkXG4iLCByYyk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfbGlua19jbGtfZW5hYmxlKGNsa3MpOwotCWlmIChyYykg ewotCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgbGluayBjbGtzLCByYyA9ICVkXG4iLCByYyk7 Ci0JCWdvdG8gZXJyb3JfdW5wcmVwYXJlOwotCX0KLQotCXByX2RlYnVnKCJMaW5rIGNsb2NrcyBh cmUgZW5hYmxlZFxuIik7Ci0JcmV0dXJuIHJjOwotZXJyb3JfdW5wcmVwYXJlOgotCWRzaV9saW5r X2Nsa191bnByZXBhcmUoY2xrcyk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICog ZHNpX2xpbmtfY2xrX3N0b3AoKSAtIFN0b3AgRFNJIGxpbmsgY2xvY2tzLgotICovCi1pbnQgZHNp X2xpbmtfY2xrX3N0b3Aoc3RydWN0IGRzaV9saW5rX2Nsa3MgKmNsa3MpCi17Ci0JZHNpX2xpbmtf Y2xrX2Rpc2FibGUoY2xrcyk7Ci0JZHNpX2xpbmtfY2xrX3VucHJlcGFyZShjbGtzKTsKLQotCXBy X2RlYnVnKCJMaW5rIGNsb2NrcyBkaXNhYmxlZFxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCBkc2lfZGlzcGxheV9jb3JlX2Nsa19lbmFibGUoc3RydWN0IGRzaV9jb3JlX2Nsa3Mg KmNsa3MsCi0JdTMyIGN0cmxfY291bnQsIHUzMiBtYXN0ZXJfbmR4KQotewotCWludCByYyA9IDA7 Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9jb3JlX2Nsa3MgKmNsaywgKm1fY2xrczsKLQotCS8qCi0J ICogSW4gY2FzZSBvZiBzcGxpdCBEU0kgdXNlY2FzZXMsIHRoZSBjbG9jayBmb3IgbWFzdGVyIGNv bnRyb2xsZXIgc2hvdWxkCi0JICogYmUgZW5hYmxlZCBiZWZvcmUgdGhlIG90aGVyIGNvbnRyb2xs ZXIuIE1hc3RlciBjb250cm9sbGVyIGluIHRoZQotCSAqIGNsb2NrIGNvbnRleHQgcmVmZXJzIHRv IHRoZSBjb250cm9sbGVyIHRoYXQgc291cmNlcyB0aGUgY2xvY2suCi0JICovCi0KLQltX2Nsa3Mg PSAmY2xrc1ttYXN0ZXJfbmR4XTsKLQlyYyA9IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUobV9j bGtzLT5jbGtzLnBoYW5kbGUsCi0JCQltX2Nsa3MtPmNsa3MuZHNpX2NvcmVfY2xpZW50LCB0cnVl KTsKLQotCWlmIChyYykgewotCQlwcl9lcnIoIlBvd2VyIHJlc291cmNlIGVuYWJsZSBmYWlsZWQs IHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfY29yZV9jbGtf c3RhcnQobV9jbGtzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gdHVybiBvbiBt YXN0ZXIgY2xvY2tzLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yX2Rpc2FibGVfbWFzdGVy X3Jlc291cmNlOwotCX0KLQotCS8qIFR1cm4gb24gcmVzdCBvZiB0aGUgY29yZSBjbG9ja3MgKi8K LQlmb3IgKGkgPSAwOyBpIDwgY3RybF9jb3VudDsgaSsrKSB7Ci0JCWNsayA9ICZjbGtzW2ldOwot CQlpZiAoIWNsayB8fCAoY2xrID09IG1fY2xrcykpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRw dV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoY2xrLT5jbGtzLnBoYW5kbGUsCi0JCQkJY2xrLT5jbGtz LmRzaV9jb3JlX2NsaWVudCwgdHJ1ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJQb3dlciBy ZXNvdXJjZSBlbmFibGUgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNh YmxlX21hc3RlcjsKLQkJfQotCi0JCXJjID0gZHNpX2NvcmVfY2xrX3N0YXJ0KGNsayk7Ci0JCWlm IChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gdHVybiBvbiBjbG9ja3MsIHJjPSVkXG4iLCBy Yyk7Ci0JCQkodm9pZClkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKGNsay0+Y2xrcy5waGFuZGxl LAotCQkJCQljbGstPmNsa3MuZHNpX2NvcmVfY2xpZW50LCBmYWxzZSk7Ci0JCQlnb3RvIGVycm9y X2Rpc2FibGVfbWFzdGVyOwotCQl9Ci0JfQotCXJldHVybiByYzsKLWVycm9yX2Rpc2FibGVfbWFz dGVyOgotCSh2b2lkKWRzaV9jb3JlX2Nsa19zdG9wKG1fY2xrcyk7Ci0KLWVycm9yX2Rpc2FibGVf bWFzdGVyX3Jlc291cmNlOgotCSh2b2lkKWRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUobV9jbGtz LT5jbGtzLnBoYW5kbGUsCi0JCQkJbV9jbGtzLT5jbGtzLmRzaV9jb3JlX2NsaWVudCwgZmFsc2Up OwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2xpbmtf Y2xrX2VuYWJsZShzdHJ1Y3QgZHNpX2xpbmtfY2xrcyAqY2xrcywKLQl1MzIgY3RybF9jb3VudCwg dTMyIG1hc3Rlcl9uZHgpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2xp bmtfY2xrcyAqY2xrLCAqbV9jbGtzOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIHNwbGl0IERTSSB1 c2VjYXNlcywgdGhlIGNsb2NrIGZvciBtYXN0ZXIgY29udHJvbGxlciBzaG91bGQKLQkgKiBiZSBl bmFibGVkIGJlZm9yZSB0aGUgb3RoZXIgY29udHJvbGxlci4gTWFzdGVyIGNvbnRyb2xsZXIgaW4g dGhlCi0JICogY2xvY2sgY29udGV4dCByZWZlcnMgdG8gdGhlIGNvbnRyb2xsZXIgdGhhdCBzb3Vy Y2VzIHRoZSBjbG9jay4KLQkgKi8KLQotCW1fY2xrcyA9ICZjbGtzW21hc3Rlcl9uZHhdOwotCi0J cmMgPSBkc2lfbGlua19jbGtfc3RhcnQobV9jbGtzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJm YWlsZWQgdG8gdHVybiBvbiBtYXN0ZXIgY2xvY2tzLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVy cm9yOwotCX0KLQotCS8qIFR1cm4gb24gcmVzdCBvZiB0aGUgY29yZSBjbG9ja3MgKi8KLQlmb3Ig KGkgPSAwOyBpIDwgY3RybF9jb3VudDsgaSsrKSB7Ci0JCWNsayA9ICZjbGtzW2ldOwotCQlpZiAo IWNsayB8fCAoY2xrID09IG1fY2xrcykpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9saW5r X2Nsa19zdGFydChjbGspOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHR1cm4g b24gY2xvY2tzLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX21hc3RlcjsK LQkJfQotCX0KLQlyZXR1cm4gcmM7Ci1lcnJvcl9kaXNhYmxlX21hc3RlcjoKLQkodm9pZClkc2lf bGlua19jbGtfc3RvcChtX2Nsa3MpOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IGRzaV9kaXNwbGF5X2NvcmVfY2xrX2Rpc2FibGUoc3RydWN0IGRzaV9jb3JlX2Nsa3MgKmNs a3MsCi0JdTMyIGN0cmxfY291bnQsIHUzMiBtYXN0ZXJfbmR4KQotewotCWludCByYyA9IDA7Ci0J aW50IGk7Ci0Jc3RydWN0IGRzaV9jb3JlX2Nsa3MgKmNsaywgKm1fY2xrczsKLQotCS8qCi0JICog SW4gY2FzZSBvZiBzcGxpdCBEU0kgdXNlY2FzZXMsIGNsb2NrIGZvciBzbGF2ZSBEU0kgY29udHJv bGxlcnMgc2hvdWxkCi0JICogYmUgZGlzYWJsZWQgZmlyc3QgYmVmb3JlIGRpc2FibGluZyBjbG9j ayBmb3IgbWFzdGVyIGNvbnRyb2xsZXIuIFNsYXZlCi0JICogY29udHJvbGxlcnMgaW4gdGhlIGNs b2NrIGNvbnRleHQgcmVmZXIgdG8gY29udHJvbGxlciB3aGljaCBzb3VyY2UKLQkgKiBjbG9jayBm cm9tIGFub3RoZXIgY29udHJvbGxlci4KLQkgKi8KLQotCW1fY2xrcyA9ICZjbGtzW21hc3Rlcl9u ZHhdOwotCi0JLyogVHVybiBvZmYgbm9uLW1hc3RlciBjb3JlIGNsb2NrcyAqLwotCWZvciAoaSA9 IDA7IGkgPCBjdHJsX2NvdW50OyBpKyspIHsKLQkJY2xrID0gJmNsa3NbaV07Ci0JCWlmICghY2xr IHx8IChjbGsgPT0gbV9jbGtzKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2NvcmVfY2xr X3N0b3AoY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHR1cm4gb2Zm IGNsb2NrcywgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQlyYyA9IGRw dV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoY2xrLT5jbGtzLnBoYW5kbGUsCi0JCQkJY2xrLT5jbGtz LmRzaV9jb3JlX2NsaWVudCwgZmFsc2UpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiUG93ZXIg cmVzb3VyY2UgZGlzYWJsZSBmYWlsZWQ6ICVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9 Ci0JfQotCi0JcmMgPSBkc2lfY29yZV9jbGtfc3RvcChtX2Nsa3MpOwotCWlmIChyYykgewotCQlw cl9lcnIoImZhaWxlZCB0byB0dXJuIG9mZiBtYXN0ZXIgY2xvY2tzLCByYz0lZFxuIiwgcmMpOwot CQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZShtX2Ns a3MtPmNsa3MucGhhbmRsZSwKLQkJCQltX2Nsa3MtPmNsa3MuZHNpX2NvcmVfY2xpZW50LCBmYWxz ZSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlBvd2VyIHJlc291cmNlIGRpc2FibGUgZmFpbGVkOiAl ZFxuIiwgcmMpOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNw bGF5X2xpbmtfY2xrX2Rpc2FibGUoc3RydWN0IGRzaV9saW5rX2Nsa3MgKmNsa3MsCi0JdTMyIGN0 cmxfY291bnQsIHUzMiBtYXN0ZXJfbmR4KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3Ry dWN0IGRzaV9saW5rX2Nsa3MgKmNsaywgKm1fY2xrczsKLQotCS8qCi0JICogSW4gY2FzZSBvZiBz cGxpdCBEU0kgdXNlY2FzZXMsIGNsb2NrIGZvciBzbGF2ZSBEU0kgY29udHJvbGxlcnMgc2hvdWxk Ci0JICogYmUgZGlzYWJsZWQgZmlyc3QgYmVmb3JlIGRpc2FibGluZyBjbG9jayBmb3IgbWFzdGVy IGNvbnRyb2xsZXIuIFNsYXZlCi0JICogY29udHJvbGxlcnMgaW4gdGhlIGNsb2NrIGNvbnRleHQg cmVmZXIgdG8gY29udHJvbGxlciB3aGljaCBzb3VyY2UKLQkgKiBjbG9jayBmcm9tIGFub3RoZXIg Y29udHJvbGxlci4KLQkgKi8KLQotCW1fY2xrcyA9ICZjbGtzW21hc3Rlcl9uZHhdOwotCi0JLyog VHVybiBvZmYgbm9uLW1hc3RlciBsaW5rIGNsb2NrcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjdHJs X2NvdW50OyBpKyspIHsKLQkJY2xrID0gJmNsa3NbaV07Ci0JCWlmICghY2xrIHx8IChjbGsgPT0g bV9jbGtzKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2xpbmtfY2xrX3N0b3AoY2xrKTsK LQkJaWYgKHJjKQotCQkJcHJfZXJyKCJmYWlsZWQgdG8gdHVybiBvZmYgY2xvY2tzLCByYz0lZFxu IiwgcmMpOwotCX0KLQotCXJjID0gZHNpX2xpbmtfY2xrX3N0b3AobV9jbGtzKTsKLQlpZiAocmMp Ci0JCXByX2VycigiZmFpbGVkIHRvIHR1cm4gb2ZmIG1hc3RlciBjbG9ja3MsIHJjPSVkXG4iLCBy Yyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3VwZGF0ZV9jbGtfc3RhdGUo c3RydWN0IGRzaV9jb3JlX2Nsa3MgKmNfY2xrcywgdTMyIGNfc3RhdGUsCi0JCQkJc3RydWN0IGRz aV9saW5rX2Nsa3MgKmxfY2xrcywgdTMyIGxfc3RhdGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1 Y3QgZHNpX2Nsa19tbmdyICptbmdyOwotCWJvb2wgbF9jX29uID0gZmFsc2U7Ci0KLQlpZiAoY19j bGtzKSB7Ci0JCW1uZ3IgPQotCQljb250YWluZXJfb2YoY19jbGtzLCBzdHJ1Y3QgZHNpX2Nsa19t bmdyLCBjb3JlX2Nsa3NbMF0pOwotCX0gZWxzZSBpZiAobF9jbGtzKSB7Ci0JCW1uZ3IgPQotCQlj b250YWluZXJfb2YobF9jbGtzLCBzdHJ1Y3QgZHNpX2Nsa19tbmdyLCBsaW5rX2Nsa3NbMF0pOwot CX0gZWxzZSB7Ci0JCW1uZ3IgPSBOVUxMOwotCX0KLQotCWlmICghbW5ncikKLQkJcmV0dXJuIC1F SU5WQUw7Ci0KLQlwcl9kZWJ1ZygiY19zdGF0ZSA9ICVkLCBsX3N0YXRlID0gJWRcbiIsCi0JCSBj X2Nsa3MgPyBjX3N0YXRlIDogLTEsIGxfY2xrcyA/IGxfc3RhdGUgOiAtMSk7Ci0JLyoKLQkgKiBC ZWxvdyBpcyB0aGUgc2VxdWVuY2UgdG8gdG9nZ2xlIERTSSBjbG9ja3M6Ci0JICoJMS4gRm9yIE9O IHNlcXVlbmNlLCBDb3JlIGNsb2NrcyBiZWZvcmUgbGluayBjbG9ja3MKLQkgKgkyLiBGb3IgT0ZG IHNlcXVlbmNlLCBMaW5rIGNsb2NrcyBiZWZvcmUgY29yZSBjbG9ja3MuCi0JICovCi0JaWYgKGNf Y2xrcyAmJiAoY19zdGF0ZSA9PSBEU0lfQ0xLX09OKSkgewotCQlpZiAobW5nci0+Y29yZV9jbGtf c3RhdGUgPT0gRFNJX0NMS19PRkYpIHsKLQkJCXJjID0gbW5nci0+cHJlX2Nsa29uX2NiKG1uZ3It PnByaXZfZGF0YSwKLQkJCQkJCURTSV9DT1JFX0NMSywKLQkJCQkJCURTSV9DTEtfT04pOwotCQkJ aWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJmYWlsZWQgdG8gdHVybiBvbiBNRFAgRlMgcmM9ICVkXG4i LCByYyk7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQotCQlyYyA9IGRzaV9kaXNwbGF5X2Nv cmVfY2xrX2VuYWJsZShjX2Nsa3MsIG1uZ3ItPmRzaV9jdHJsX2NvdW50LAotCQkJCW1uZ3ItPm1h c3Rlcl9uZHgpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHR1cm4gb24gY29y ZSBjbGtzIHJjID0gJWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQlpZiAobW5n ci0+cG9zdF9jbGtvbl9jYikgewotCQkJcmMgPSBtbmdyLT5wb3N0X2Nsa29uX2NiKG1uZ3ItPnBy aXZfZGF0YSwKLQkJCQkJCSBEU0lfQ09SRV9DTEssCi0JCQkJCQkgRFNJX0NMS19PTik7Ci0JCQlp ZiAocmMpCi0JCQkJcHJfZXJyKCJwb3N0IGNsayBvbiBjYiBmYWlsZWQsIHJjID0gJWRcbiIsIHJj KTsKLQkJfQotCQltbmdyLT5jb3JlX2Nsa19zdGF0ZSA9IERTSV9DTEtfT047Ci0JfQotCi0JaWYg KGxfY2xrcykgewotCQlpZiAobF9zdGF0ZSA9PSBEU0lfQ0xLX09OKSB7Ci0JCQlpZiAobW5nci0+ cHJlX2Nsa29uX2NiKSB7Ci0JCQkJcmMgPSBtbmdyLT5wcmVfY2xrb25fY2IobW5nci0+cHJpdl9k YXRhLAotCQkJCQlEU0lfTElOS19DTEssIGxfc3RhdGUpOwotCQkJCWlmIChyYykKLQkJCQkJcHJf ZXJyKCJwcmUgbGluayBjbGsgb24gY2IgZmFpbGVkXG4iKTsKLQkJCX0KLQkJCXJjID0gZHNpX2Rp c3BsYXlfbGlua19jbGtfZW5hYmxlKGxfY2xrcywKLQkJCQkJbW5nci0+ZHNpX2N0cmxfY291bnQs IG1uZ3ItPm1hc3Rlcl9uZHgpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJmYWlsZWQgdG8g c3RhcnQgbGluayBjbGsgcmM9ICVkXG4iLCByYyk7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJ CWlmIChtbmdyLT5wb3N0X2Nsa29uX2NiKSB7Ci0JCQkJcmMgPSBtbmdyLT5wb3N0X2Nsa29uX2Ni KG1uZ3ItPnByaXZfZGF0YSwKLQkJCQkJCQlEU0lfTElOS19DTEssCi0JCQkJCQkJbF9zdGF0ZSk7 Ci0JCQkJaWYgKHJjKQotCQkJCQlwcl9lcnIoInBvc3QgbGluayBjbGsgb24gY2IgZmFpbGVkXG4i KTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBUd28gY29uZGl0aW9ucyB0aGF0IG5l ZWQgdG8gYmUgY2hlY2tlZCBmb3IgTGluawotCQkJICogY2xvY2tzOgotCQkJICogMS4gTGluayBj bG9ja3MgbmVlZCBjb3JlIGNsb2NrcyB0byBiZSBvbiB3aGVuCi0JCQkgKiAgICB0cmFuc2l0aW9u aW5nIGZyb20gRUFSTFlfR0FURSB0byBPRkYgc3RhdGUuCi0JCQkgKiAyLiBVTFBTIG1vZGUgbWln aHQgaGF2ZSB0byBiZSBlbmFibGVkIGluIGNhc2Ugb2YgT0ZGCi0JCQkgKiAgICBzdGF0ZS4gRm9y IFVMUFMsIExpbmsgY2xvY2tzIHNob3VsZCBiZSB0dXJuZWQgT04KLQkJCSAqICAgIGZpcnN0IGJl Zm9yZSB0aGV5IGFyZSB0dXJuZWQgb2ZmIGFnYWluLgotCQkJICoKLQkJCSAqIElmIExpbmsgaXMg Z29pbmcgZnJvbSBFQVJMWV9HQVRFIHRvIE9GRiBzdGF0ZSBBTkQKLQkJCSAqIENvcmUgY2xvY2sg aXMgYWxyZWFkeSBpbiBFQVJMWV9HQVRFIG9yIE9GRiBzdGF0ZSwKLQkJCSAqIHR1cm4gb24gQ29y ZSBjbG9ja3MgYW5kIGxpbmsgY2xvY2tzLgotCQkJICoKLQkJCSAqIFVMUFMgc3RhdGUgaXMgbWFu YWdlZCBhcyBwYXJ0IG9mIHRoZSBwcmVfY2xrb2ZmX2NiLgotCQkJICovCi0JCQlpZiAoKGxfc3Rh dGUgPT0gRFNJX0NMS19PRkYpICYmCi0JCQkgICAgKG1uZ3ItPmxpbmtfY2xrX3N0YXRlID09Ci0J CQkgICAgRFNJX0NMS19FQVJMWV9HQVRFKSAmJgotCQkJICAgIChtbmdyLT5jb3JlX2Nsa19zdGF0 ZSAhPQotCQkJICAgIERTSV9DTEtfT04pKSB7Ci0JCQkJcmMgPSBkc2lfZGlzcGxheV9jb3JlX2Ns a19lbmFibGUoCi0JCQkJCW1uZ3ItPmNvcmVfY2xrcywgbW5nci0+ZHNpX2N0cmxfY291bnQsCi0J CQkJCW1uZ3ItPm1hc3Rlcl9uZHgpOwotCQkJCWlmIChyYykgewotCQkJCQlwcl9lcnIoImNvcmUg Y2xrcyBkaWQgbm90IHN0YXJ0XG4iKTsKLQkJCQkJZ290byBlcnJvcjsKLQkJCQl9Ci0KLQkJCQly YyA9IGRzaV9kaXNwbGF5X2xpbmtfY2xrX2VuYWJsZShsX2Nsa3MsCi0JCQkJCW1uZ3ItPmRzaV9j dHJsX2NvdW50LCBtbmdyLT5tYXN0ZXJfbmR4KTsKLQkJCQlpZiAocmMpIHsKLQkJCQkJcHJfZXJy KCJMaW5rIGNsa3MgZGlkIG5vdCBzdGFydFxuIik7Ci0JCQkJCWdvdG8gZXJyb3I7Ci0JCQkJfQot CQkJCWxfY19vbiA9IHRydWU7Ci0JCQkJcHJfZGVidWcoIkVDRzogY29yZSBhbmQgTGlua19vblxu Iik7Ci0JCQl9Ci0KLQkJCWlmIChtbmdyLT5wcmVfY2xrb2ZmX2NiKSB7Ci0JCQkJcmMgPSBtbmdy LT5wcmVfY2xrb2ZmX2NiKG1uZ3ItPnByaXZfZGF0YSwKLQkJCQkJRFNJX0xJTktfQ0xLLCBsX3N0 YXRlKTsKLQkJCQlpZiAocmMpCi0JCQkJCXByX2VycigicHJlIGxpbmsgY2xrIG9mZiBjYiBmYWls ZWRcbiIpOwotCQkJfQotCi0JCQlyYyA9IGRzaV9kaXNwbGF5X2xpbmtfY2xrX2Rpc2FibGUobF9j bGtzLAotCQkJCW1uZ3ItPmRzaV9jdHJsX2NvdW50LCBtbmdyLT5tYXN0ZXJfbmR4KTsKLQkJCWlm IChyYykgewotCQkJCXByX2VycigiZmFpbGVkIHRvIHN0b3AgbGluayBjbGssIHJjID0gJWRcbiIs Ci0JCQkJICAgICAgIHJjKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCi0JCQlpZiAobW5nci0+ cG9zdF9jbGtvZmZfY2IpIHsKLQkJCQlyYyA9IG1uZ3ItPnBvc3RfY2xrb2ZmX2NiKG1uZ3ItPnBy aXZfZGF0YSwKLQkJCQkJRFNJX0xJTktfQ0xLLCBsX3N0YXRlKTsKLQkJCQlpZiAocmMpCi0JCQkJ CXByX2VycigicG9zdCBsaW5rIGNsayBvZmYgY2IgZmFpbGVkXG4iKTsKLQkJCX0KLQkJCS8qCi0J CQkgKiBUaGlzIGNoZWNrIGlzIHRvIHNhdmUgdW5uZWNlc3NhcnkgY2xvY2sgc3RhdGUKLQkJCSAq IGNoYW5nZSB3aGVuIGdvaW5nIGZyb20gRUFSTFlfR0FURSB0byBPRkYuIEluIHRoZQotCQkJICog Y2FzZSB3aGVyZSB0aGUgcmVxdWVzdCBoYXBwZW5zIGZvciBib3RoIENvcmUgYW5kIExpbmsKLQkJ CSAqIGNsb2NrcyBpbiB0aGUgc2FtZSBjYWxsLCBjb3JlIGNsb2NrcyBuZWVkIHRvIGJlCi0JCQkg KiB0dXJuZWQgb24gZmlyc3QgYmVmb3JlIE9GRiBzdGF0ZSBjYW4gYmUgZW50ZXJlZC4KLQkJCSAq Ci0JCQkgKiBDb3JlIGNsb2NrcyBhcmUgdHVybmVkIG9uIGhlcmUgZm9yIExpbmsgY2xvY2tzIHRv IGdvCi0JCQkgKiB0byBPRkYgc3RhdGUuIElmIGNvcmUgY2xvY2sgcmVxdWVzdCBpcyBhbHNvIHBy ZXNlbnQsCi0JCQkgKiB0aGVuIGNvcmUgY2xvY2tzIGNhbiBiZSB0dXJuZWQgb2ZmIENvcmUgY2xv Y2tzIGFyZQotCQkJICogdHJhbnNpdGlvbmVkIHRvIE9GRiBzdGF0ZS4KLQkJCSAqLwotCQkJaWYg KGxfY19vbiAmJiAoIShjX2Nsa3MgJiYgKGNfc3RhdGUgPT0gRFNJX0NMS19PRkYpCi0JCQkJCSAm JiAobW5nci0+Y29yZV9jbGtfc3RhdGUgPT0KLQkJCQkJICAgICBEU0lfQ0xLX0VBUkxZX0dBVEUp KSkpIHsKLQkJCQlyYyA9IGRzaV9kaXNwbGF5X2NvcmVfY2xrX2Rpc2FibGUoCi0JCQkJCW1uZ3It PmNvcmVfY2xrcywgbW5nci0+ZHNpX2N0cmxfY291bnQsCi0JCQkJCW1uZ3ItPm1hc3Rlcl9uZHgp OwotCQkJCWlmIChyYykgewotCQkJCQlwcl9lcnIoImNvcmUgY2xrcyBkaWQgbm90IHN0b3BcbiIp OwotCQkJCQlnb3RvIGVycm9yOwotCQkJCX0KLQotCQkJCWxfY19vbiA9IGZhbHNlOwotCQkJCXBy X2RlYnVnKCJFQ0c6IGNvcmUgb2ZmXG4iKTsKLQkJCX0gZWxzZQotCQkJCXByX2RlYnVnKCJFQ0c6 IGNvcmUgb2ZmIHNraXBcbiIpOwotCQl9Ci0KLQkJbW5nci0+bGlua19jbGtfc3RhdGUgPSBsX3N0 YXRlOwotCX0KLQotCWlmIChjX2Nsa3MgJiYgKGNfc3RhdGUgIT0gRFNJX0NMS19PTikpIHsKLQkJ LyoKLQkJICogV2hlbiBnb2luZyB0byBPRkYgc3RhdGUgZnJvbSBFQVJMWSBHQVRFIHN0YXRlLCBD b3JlIGNsb2NrcwotCQkgKiBzaG91bGQgYmUgdHVybmVkIG9uIGZpcnN0IHNvIHRoYXQgdGhlIElP cyBjYW4gYmUgY2xhbXBlZC4KLQkJICogbF9jX29uIGZsYWcgaXMgc2V0LCB0aGVuIHRoZSBjb3Jl IGNsb2NrcyB3ZXJlIHR1cm5lZCBiZWZvcmUKLQkJICogdG8gdGhlIExpbmsgY2xvY2tzIGdvIHRv IE9GRiBzdGF0ZS4gU28gQ29yZSBjbG9ja3MgYXJlCi0JCSAqIGFscmVhZHkgT04gYW5kIHRoaXMg c3RlcCBjYW4gYmUgc2tpcHBlZC4KLQkJICoKLQkJICogSU9zIGFyZSBjbGFtcGVkIGluIHByZV9j bGtvZmZfY2IgY2FsbGJhY2suCi0JCSAqLwotCQlpZiAoKGNfc3RhdGUgPT0gRFNJX0NMS19PRkYp ICYmCi0JCSAgICAobW5nci0+Y29yZV9jbGtfc3RhdGUgPT0KLQkJICAgIERTSV9DTEtfRUFSTFlf R0FURSkgJiYgIWxfY19vbikgewotCQkJcmMgPSBkc2lfZGlzcGxheV9jb3JlX2Nsa19lbmFibGUo bW5nci0+Y29yZV9jbGtzLAotCQkJCW1uZ3ItPmRzaV9jdHJsX2NvdW50LCBtbmdyLT5tYXN0ZXJf bmR4KTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiY29yZSBjbGtzIGRpZCBub3Qgc3RhcnRc biIpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCQlwcl9kZWJ1ZygiRUNHOiBjb3JlIG9uXG4i KTsKLQkJfSBlbHNlCi0JCQlwcl9kZWJ1ZygiRUNHOiBjb3JlIG9uIHNraXBcbiIpOwotCi0JCWlm IChtbmdyLT5wcmVfY2xrb2ZmX2NiKSB7Ci0JCQlyYyA9IG1uZ3ItPnByZV9jbGtvZmZfY2IobW5n ci0+cHJpdl9kYXRhLAotCQkJCQkJIERTSV9DT1JFX0NMSywKLQkJCQkJCSBjX3N0YXRlKTsKLQkJ CWlmIChyYykKLQkJCQlwcl9lcnIoInByZSBjb3JlIGNsayBvZmYgY2IgZmFpbGVkXG4iKTsKLQkJ fQotCi0JCXJjID0gZHNpX2Rpc3BsYXlfY29yZV9jbGtfZGlzYWJsZShjX2Nsa3MsIG1uZ3ItPmRz aV9jdHJsX2NvdW50LAotCQkJbW5nci0+bWFzdGVyX25keCk7Ci0JCWlmIChyYykgewotCQkJcHJf ZXJyKCJmYWlsZWQgdG8gdHVybiBvZmYgY29yZSBjbGtzIHJjID0gJWRcbiIsIHJjKTsKLQkJCWdv dG8gZXJyb3I7Ci0JCX0KLQotCQlpZiAoY19zdGF0ZSA9PSBEU0lfQ0xLX09GRikgewotCQkJaWYg KG1uZ3ItPnBvc3RfY2xrb2ZmX2NiKSB7Ci0JCQkJcmMgPSBtbmdyLT5wb3N0X2Nsa29mZl9jYiht bmdyLT5wcml2X2RhdGEsCi0JCQkJCQlEU0lfQ09SRV9DTEssCi0JCQkJCQlEU0lfQ0xLX09GRik7 Ci0JCQkJaWYgKHJjKQotCQkJCQlwcl9lcnIoInBvc3QgY2xrb2ZmIGNiIGZhaWwsIHJjID0gJWRc biIsCi0JCQkJCSAgICAgICByYyk7Ci0JCQl9Ci0JCX0KLQkJbW5nci0+Y29yZV9jbGtfc3RhdGUg PSBjX3N0YXRlOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRz aV9yZWNoZWNrX2Nsa19zdGF0ZShzdHJ1Y3QgZHNpX2Nsa19tbmdyICptbmdyKQotewotCWludCBy YyA9IDA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zID0gTlVMTDsKLQlzdHJ1Y3QgZHNpX2Nsa19j bGllbnRfaW5mbyAqYzsKLQl1MzIgbmV3X2NvcmVfY2xrX3N0YXRlID0gRFNJX0NMS19PRkY7Ci0J dTMyIG5ld19saW5rX2Nsa19zdGF0ZSA9IERTSV9DTEtfT0ZGOwotCXUzMiBvbGRfY19jbGtfc3Rh dGUgPSBEU0lfQ0xLX09GRjsKLQl1MzIgb2xkX2xfY2xrX3N0YXRlID0gRFNJX0NMS19PRkY7Ci0J c3RydWN0IGRzaV9jb3JlX2Nsa3MgKmNfY2xrcyA9IE5VTEw7Ci0Jc3RydWN0IGRzaV9saW5rX2Ns a3MgKmxfY2xrcyA9IE5VTEw7Ci0KLQkvKgotCSAqIENvbmRpdGlvbnMgdG8gbWFpbnRhaW4gRFNJ IG1hbmFnZXIgY2xvY2sgc3RhdGUgYmFzZWQgb24KLQkgKgkJY2xvY2sgc3RhdGVzIG9mIHZhcmlv dXMgY2xpZW50czoKLQkgKgkxLiBJZiBhbnkgY2xpZW50IGhhcyBjbG9jayBpbiBPTiBzdGF0ZSwg RFNJIG1hbmFnZXIgY2xvY2sgc3RhdGUKLQkgKgkJc2hvdWxkIGJlIE9OLgotCSAqCTIuIElmIGFu eSBjbGllbnQgaXMgaW4gRUNHIHN0YXRlIHdpdGggcmVzdCBvZiB0aGVtIHR1cm5lZCBPRkYsCi0J ICoJICAgZ28gdG8gRWFybHkgZ2F0ZSBzdGF0ZS4KLQkgKgkzLiBJZiBhbGwgY2xpZW50cyBoYXZl IGNsb2NrcyBhcyBPRkYsIHRoZW4gZ28gdG8gT0ZGIHN0YXRlLgotCSAqLwotCWxpc3RfZm9yX2Vh Y2gocG9zLCAmbW5nci0+Y2xpZW50X2xpc3QpIHsKLQkJYyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1 Y3QgZHNpX2Nsa19jbGllbnRfaW5mbywgbGlzdCk7Ci0JCWlmIChjLT5jb3JlX2Nsa19zdGF0ZSA9 PSBEU0lfQ0xLX09OKSB7Ci0JCQluZXdfY29yZV9jbGtfc3RhdGUgPSBEU0lfQ0xLX09OOwotCQkJ YnJlYWs7Ci0JCX0gZWxzZSBpZiAoYy0+Y29yZV9jbGtfc3RhdGUgPT0gRFNJX0NMS19FQVJMWV9H QVRFKSB7Ci0JCQluZXdfY29yZV9jbGtfc3RhdGUgPSBEU0lfQ0xLX0VBUkxZX0dBVEU7Ci0JCX0K LQl9Ci0KLQlsaXN0X2Zvcl9lYWNoKHBvcywgJm1uZ3ItPmNsaWVudF9saXN0KSB7Ci0JCWMgPSBs aXN0X2VudHJ5KHBvcywgc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8sIGxpc3QpOwotCQlpZiAo Yy0+bGlua19jbGtfc3RhdGUgPT0gRFNJX0NMS19PTikgewotCQkJbmV3X2xpbmtfY2xrX3N0YXRl ID0gRFNJX0NMS19PTjsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKGMtPmxpbmtfY2xrX3N0YXRl ID09IERTSV9DTEtfRUFSTFlfR0FURSkgewotCQkJbmV3X2xpbmtfY2xrX3N0YXRlID0gRFNJX0NM S19FQVJMWV9HQVRFOwotCQl9Ci0JfQotCi0JaWYgKG5ld19jb3JlX2Nsa19zdGF0ZSAhPSBtbmdy LT5jb3JlX2Nsa19zdGF0ZSkKLQkJY19jbGtzID0gbW5nci0+Y29yZV9jbGtzOwotCi0JaWYgKG5l d19saW5rX2Nsa19zdGF0ZSAhPSBtbmdyLT5saW5rX2Nsa19zdGF0ZSkKLQkJbF9jbGtzID0gbW5n ci0+bGlua19jbGtzOwotCi0Jb2xkX2NfY2xrX3N0YXRlID0gbW5nci0+Y29yZV9jbGtfc3RhdGU7 Ci0Jb2xkX2xfY2xrX3N0YXRlID0gbW5nci0+bGlua19jbGtfc3RhdGU7Ci0KLQlwcl9kZWJ1Zygi Y19jbGtfc3RhdGUgKCVkIC0+ICVkKVxuIiwKLQkJb2xkX2NfY2xrX3N0YXRlLCBuZXdfY29yZV9j bGtfc3RhdGUpOwotCXByX2RlYnVnKCJsX2Nsa19zdGF0ZSAoJWQgLT4gJWQpXG4iLAotCQlvbGRf bF9jbGtfc3RhdGUsIG5ld19saW5rX2Nsa19zdGF0ZSk7Ci0KLQlpZiAoY19jbGtzIHx8IGxfY2xr cykgewotCQlyYyA9IGRzaV91cGRhdGVfY2xrX3N0YXRlKGNfY2xrcywgbmV3X2NvcmVfY2xrX3N0 YXRlLAotCQkJCQkgIGxfY2xrcywgbmV3X2xpbmtfY2xrX3N0YXRlKTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoImZhaWxlZCB0byB1cGRhdGUgY2xvY2sgc3RhdGUsIHJjID0gJWRcbiIsIHJjKTsK LQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotaW50 IGRzaV9jbGtfcmVxX3N0YXRlKHZvaWQgKmNsaWVudCwgZW51bSBkc2lfY2xrX3R5cGUgY2xrLAot CWVudW0gZHNpX2Nsa19zdGF0ZSBzdGF0ZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lf Y2xrX2NsaWVudF9pbmZvICpjID0gY2xpZW50OwotCXN0cnVjdCBkc2lfY2xrX21uZ3IgKm1uZ3I7 Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0KLQlpZiAoIWNsaWVudCB8fCAhY2xrIHx8IGNsayA+ IChEU0lfQ09SRV9DTEsgfCBEU0lfTElOS19DTEspIHx8Ci0JICAgIHN0YXRlID4gRFNJX0NMS19F QVJMWV9HQVRFKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXMsIGNsaWVudCA9ICVwSywgY2xr ID0gMHgleCwgc3RhdGUgPSAlZFxuIiwKLQkJICAgICAgIGNsaWVudCwgY2xrLCBzdGF0ZSk7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCW1uZ3IgPSBjLT5tbmdyOwotCW11dGV4X2xvY2soJm1u Z3ItPmNsa19tdXRleCk7Ci0KLQlwcl9kZWJ1ZygiWyVzXSVzOiBDTEs9JWQsIG5ld19zdGF0ZT0l ZCwgY29yZT0lZCwgbGlua2w9JWRcbiIsCi0JICAgICAgIG1uZ3ItPm5hbWUsIGMtPm5hbWUsIGNs aywgc3RhdGUsIGMtPmNvcmVfY2xrX3N0YXRlLAotCSAgICAgICBjLT5saW5rX2Nsa19zdGF0ZSk7 Ci0KLQkvKgotCSAqIENsb2NrIHJlZmNvdW50IGhhbmRsaW5nIGFzIGJlbG93OgotCSAqCWkuIElu Y3JlbWVudCByZWZjb3VudCB3aGVuZXZlciBPTiBpcyBjYWxsZWQuCi0JICoJaWkuIERlY3JlbWVu dCByZWZjb3VudCB3aGVuIHRyYW5zaXRpb25pbmcgZnJvbSBPTiBzdGF0ZSB0bwotCSAqCQllaXRo ZXIgT0ZGIG9yIEVBUkxZX0dBVEUuCi0JICoJaWlpLiBEbyBub3QgZGVjcmVtZW50IHJlZmNvdW50 IHdoZW4gY2hhbmdpbmcgZnJvbQotCSAqCQlFQVJMWV9HQVRFIHRvIE9GRi4KLQkgKi8KLQlpZiAo c3RhdGUgPT0gRFNJX0NMS19PTikgewotCQlpZiAoY2xrICYgRFNJX0NPUkVfQ0xLKSB7Ci0JCQlj LT5jb3JlX3JlZmNvdW50Kys7Ci0JCQlpZiAoYy0+Y29yZV9jbGtfc3RhdGUgIT0gRFNJX0NMS19P TikgewotCQkJCWMtPmNvcmVfY2xrX3N0YXRlID0gRFNJX0NMS19PTjsKLQkJCQljaGFuZ2VkID0g dHJ1ZTsKLQkJCX0KLQkJfQotCQlpZiAoY2xrICYgRFNJX0xJTktfQ0xLKSB7Ci0JCQljLT5saW5r X3JlZmNvdW50Kys7Ci0JCQlpZiAoYy0+bGlua19jbGtfc3RhdGUgIT0gRFNJX0NMS19PTikgewot CQkJCWMtPmxpbmtfY2xrX3N0YXRlID0gRFNJX0NMS19PTjsKLQkJCQljaGFuZ2VkID0gdHJ1ZTsK LQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoKHN0YXRlID09IERTSV9DTEtfRUFSTFlfR0FURSkgfHwK LQkJICAgKHN0YXRlID09IERTSV9DTEtfT0ZGKSkgewotCQlpZiAoY2xrICYgRFNJX0NPUkVfQ0xL KSB7Ci0JCQlpZiAoYy0+Y29yZV9yZWZjb3VudCA9PSAwKSB7Ci0JCQkJaWYgKChjLT5jb3JlX2Ns a19zdGF0ZSA9PQotCQkJCSAgICBEU0lfQ0xLX0VBUkxZX0dBVEUpICYmCi0JCQkJICAgIChzdGF0 ZSA9PSBEU0lfQ0xLX09GRikpIHsKLQkJCQkJY2hhbmdlZCA9IHRydWU7Ci0JCQkJCWMtPmNvcmVf Y2xrX3N0YXRlID0gRFNJX0NMS19PRkY7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJfd2FybigiQ29y ZSByZWZjb3VudCBpcyB6ZXJvIGZvciAlcyIsCi0JCQkJCQljLT5uYW1lKTsKLQkJCQl9Ci0JCQl9 IGVsc2UgewotCQkJCWMtPmNvcmVfcmVmY291bnQtLTsKLQkJCQlpZiAoYy0+Y29yZV9yZWZjb3Vu dCA9PSAwKSB7Ci0JCQkJCWMtPmNvcmVfY2xrX3N0YXRlID0gc3RhdGU7Ci0JCQkJCWNoYW5nZWQg PSB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAoY2xrICYgRFNJX0xJTktfQ0xLKSB7Ci0J CQlpZiAoYy0+bGlua19yZWZjb3VudCA9PSAwKSB7Ci0JCQkJaWYgKChjLT5saW5rX2Nsa19zdGF0 ZSA9PQotCQkJCSAgICBEU0lfQ0xLX0VBUkxZX0dBVEUpICYmCi0JCQkJICAgIChzdGF0ZSA9PSBE U0lfQ0xLX09GRikpIHsKLQkJCQkJY2hhbmdlZCA9IHRydWU7Ci0JCQkJCWMtPmxpbmtfY2xrX3N0 YXRlID0gRFNJX0NMS19PRkY7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJfd2FybigiTGluayByZWZj b3VudCBpcyB6ZXJvIGZvciAlcyIsCi0JCQkJCQljLT5uYW1lKTsKLQkJCQl9Ci0JCQl9IGVsc2Ug ewotCQkJCWMtPmxpbmtfcmVmY291bnQtLTsKLQkJCQlpZiAoYy0+bGlua19yZWZjb3VudCA9PSAw KSB7Ci0JCQkJCWMtPmxpbmtfY2xrX3N0YXRlID0gc3RhdGU7Ci0JCQkJCWNoYW5nZWQgPSB0cnVl OwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlwcl9kZWJ1ZygiWyVzXSVzOiBjaGFuZ2U9JWQsIENv cmUgKHJlZj0lZCwgc3RhdGU9JWQpLCBMaW5rIChyZWY9JWQsIHN0YXRlPSVkKVxuIiwKLQkJIG1u Z3ItPm5hbWUsIGMtPm5hbWUsIGNoYW5nZWQsIGMtPmNvcmVfcmVmY291bnQsCi0JCSBjLT5jb3Jl X2Nsa19zdGF0ZSwgYy0+bGlua19yZWZjb3VudCwgYy0+bGlua19jbGtfc3RhdGUpOwotCi0JaWYg KGNoYW5nZWQpIHsKLQkJcmMgPSBkc2lfcmVjaGVja19jbGtfc3RhdGUobW5ncik7Ci0JCWlmIChy YykKLQkJCXByX2VycigiRmFpbGVkIHRvIGFkanVzdCBjbG9jayBzdGF0ZSByYyA9ICVkXG4iLCBy Yyk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZtbmdyLT5jbGtfbXV0ZXgpOwotCXJldHVybiByYzsK LX0KLQotREVGSU5FX01VVEVYKGRzaV9tbmdyX2Nsa19tdXRleCk7Ci0KLWludCBkc2lfZGlzcGxh eV9jbGtfY3RybCh2b2lkICpoYW5kbGUsCi0JZW51bSBkc2lfY2xrX3R5cGUgY2xrX3R5cGUsIGVu dW0gZHNpX2Nsa19zdGF0ZSBjbGtfc3RhdGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghaGFu ZGxlKSB7Ci0JCXByX2VycigiJXM6IEludmFsaWQgYXJnXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9tbmdyX2Nsa19tdXRleCk7Ci0JcmMg PSBkc2lfY2xrX3JlcV9zdGF0ZShoYW5kbGUsIGNsa190eXBlLCBjbGtfc3RhdGUpOwotCWlmIChy YykKLQkJcHJfZXJyKCIlczogZmFpbGVkIHNldCBjbGsgc3RhdGUsIHJjID0gJWRcbiIsIF9fZnVu Y19fLCByYyk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfbW5ncl9jbGtfbXV0ZXgpOwotCi0JcmV0dXJu IHJjOwotfQotCi12b2lkICpkc2lfcmVnaXN0ZXJfY2xrX2hhbmRsZSh2b2lkICpjbGtfbW5nciwg Y2hhciAqY2xpZW50KQotewotCXZvaWQgKmhhbmRsZSA9IE5VTEw7Ci0Jc3RydWN0IGRzaV9jbGtf bW5nciAqbW5nciA9IGNsa19tbmdyOwotCXN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvICpjOwot Ci0JaWYgKCFtbmdyKSB7Ci0JCXByX2VycigiYmFkIHBhcmFtc1xuIik7Ci0JCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOwotCX0KLQotCW11dGV4X2xvY2soJm1uZ3ItPmNsa19tdXRleCk7Ci0KLQlj ID0ga3phbGxvYyhzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWMpIHsKLQkJaGFuZGxl ID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlzdHJsY3B5KGMtPm5h bWUsIGNsaWVudCwgTUFYX1NUUklOR19MRU4pOwotCWMtPm1uZ3IgPSBtbmdyOwotCi0JbGlzdF9h ZGQoJmMtPmxpc3QsICZtbmdyLT5jbGllbnRfbGlzdCk7Ci0KLQlwcl9kZWJ1ZygiWyVzXTogQWRk ZWQgbmV3IGNsaWVudCAoJXMpXG4iLCBtbmdyLT5uYW1lLCBjLT5uYW1lKTsKLQloYW5kbGUgPSBj OwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZtbmdyLT5jbGtfbXV0ZXgpOwotCXJldHVybiBoYW5k bGU7Ci19Ci0KLWludCBkc2lfZGVyZWdpc3Rlcl9jbGtfaGFuZGxlKHZvaWQgKmNsaWVudCkKLXsK LQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvICpjID0gY2xpZW50Owot CXN0cnVjdCBkc2lfY2xrX21uZ3IgKm1uZ3I7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zID0gTlVM TDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBOVUxMOwotCXN0cnVjdCBkc2lfY2xrX2NsaWVu dF9pbmZvICpub2RlID0gTlVMTDsKLQotCWlmICghY2xpZW50KSB7Ci0JCXByX2VycigiSW52YWxp ZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltbmdyID0gYy0+bW5ncjsK LQlwcl9kZWJ1ZygiJXM6IEVOVEVSXG4iLCBtbmdyLT5uYW1lKTsKLQltdXRleF9sb2NrKCZtbmdy LT5jbGtfbXV0ZXgpOwotCWMtPmNvcmVfY2xrX3N0YXRlID0gRFNJX0NMS19PRkY7Ci0JYy0+bGlu a19jbGtfc3RhdGUgPSBEU0lfQ0xLX09GRjsKLQotCXJjID0gZHNpX3JlY2hlY2tfY2xrX3N0YXRl KG1uZ3IpOwotCWlmIChyYykgewotCQlwcl9lcnIoImNsb2NrIHN0YXRlIHJlY2hlY2sgZmFpbGVk IHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX3Nh ZmUocG9zLCB0bXAsICZtbmdyLT5jbGllbnRfbGlzdCkgewotCQlub2RlID0gbGlzdF9lbnRyeShw b3MsIHN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvLAotCQkJICBsaXN0KTsKLQkJaWYgKG5vZGUg PT0gYykgewotCQkJbGlzdF9kZWwoJm5vZGUtPmxpc3QpOwotCQkJcHJfZGVidWcoIlJlbW92ZWQg ZGV2aWNlICglcylcbiIsIG5vZGUtPm5hbWUpOwotCQkJa2ZyZWUobm9kZSk7Ci0JCQlicmVhazsK LQkJfQotCX0KLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZtbmdyLT5jbGtfbXV0ZXgpOwotCXBy X2RlYnVnKCIlczogRVhJVCwgcmMgPSAlZFxuIiwgbW5nci0+bmFtZSwgcmMpOwotCXJldHVybiBy YzsKLX0KLQotdm9pZCAqZHNpX2Rpc3BsYXlfY2xrX21uZ3JfcmVnaXN0ZXIoc3RydWN0IGRzaV9j bGtfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgZHNpX2Nsa19tbmdyICptbmdyOwotCWludCBpID0g MDsKLQotCWlmICghaW5mbykgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0 dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQotCi0JbW5nciA9IGt6YWxsb2Moc2l6ZW9mKCptbmdy KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtbmdyKSB7Ci0JCW1uZ3IgPSBFUlJfUFRSKC1FTk9NRU0p OwotCQlnb3RvIGVycm9yOwotCX0KLQotCW11dGV4X2luaXQoJm1uZ3ItPmNsa19tdXRleCk7Ci0J bW5nci0+ZHNpX2N0cmxfY291bnQgPSBpbmZvLT5kc2lfY3RybF9jb3VudDsKLQltbmdyLT5tYXN0 ZXJfbmR4ID0gaW5mby0+bWFzdGVyX25keDsKLQotCWlmIChtbmdyLT5kc2lfY3RybF9jb3VudCA+ IE1BWF9EU0lfQ1RSTCkgewotCQlrZnJlZShtbmdyKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG1uZ3ItPmRzaV9jdHJsX2NvdW50OyBpKyspIHsK LQkJbWVtY3B5KCZtbmdyLT5jb3JlX2Nsa3NbaV0uY2xrcywgJmluZm8tPmNfY2xrc1tpXSwKLQkJ CXNpemVvZihzdHJ1Y3QgZHNpX2NvcmVfY2xrX2luZm8pKTsKLQkJbWVtY3B5KCZtbmdyLT5saW5r X2Nsa3NbaV0uY2xrcywgJmluZm8tPmxfY2xrc1tpXSwKLQkJCXNpemVvZihzdHJ1Y3QgZHNpX2xp bmtfY2xrX2luZm8pKTsKLQkJbW5nci0+Y29yZV9jbGtzW2ldLmJ1c19oYW5kbGUgPSBpbmZvLT5i dXNfaGFuZGxlW2ldOwotCQltbmdyLT5jdHJsX2luZGV4W2ldID0gaW5mby0+Y3RybF9pbmRleFtp XTsKLQl9Ci0KLQlJTklUX0xJU1RfSEVBRCgmbW5nci0+Y2xpZW50X2xpc3QpOwotCW1uZ3ItPnBy ZV9jbGtvbl9jYiA9IGluZm8tPnByZV9jbGtvbl9jYjsKLQltbmdyLT5wb3N0X2Nsa29uX2NiID0g aW5mby0+cG9zdF9jbGtvbl9jYjsKLQltbmdyLT5wcmVfY2xrb2ZmX2NiID0gaW5mby0+cHJlX2Ns a29mZl9jYjsKLQltbmdyLT5wb3N0X2Nsa29mZl9jYiA9IGluZm8tPnBvc3RfY2xrb2ZmX2NiOwot CW1uZ3ItPnByaXZfZGF0YSA9IGluZm8tPnByaXZfZGF0YTsKLQltZW1jcHkobW5nci0+bmFtZSwg aW5mby0+bmFtZSwgTUFYX1NUUklOR19MRU4pOwotCi1lcnJvcjoKLQlwcl9kZWJ1ZygiRVhJVCwg cmMgPSAlbGRcbiIsIFBUUl9FUlIobW5ncikpOwotCXJldHVybiBtbmdyOwotfQotCi1pbnQgZHNp X2Rpc3BsYXlfY2xrX21uZ3JfZGVyZWdpc3Rlcih2b2lkICpjbGtfbW5ncikKLXsKLQlpbnQgcmMg PSAwOwotCXN0cnVjdCBkc2lfY2xrX21uZ3IgKm1uZ3IgPSBjbGtfbW5ncjsKLQlzdHJ1Y3QgbGlz dF9oZWFkICpwb3NpdGlvbiA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdG1wID0gTlVMTDsK LQlzdHJ1Y3QgZHNpX2Nsa19jbGllbnRfaW5mbyAqbm9kZSA9IE5VTEw7Ci0KLQlpZiAoIW1uZ3Ip IHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCXByX2RlYnVnKCIlczogRU5URVJcbiIsIG1uZ3ItPm5hbWUpOwotCW11dGV4X2xvY2soJm1u Z3ItPmNsa19tdXRleCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zaXRpb24sIHRtcCwgJm1u Z3ItPmNsaWVudF9saXN0KSB7Ci0JCW5vZGUgPSBsaXN0X2VudHJ5KHBvc2l0aW9uLCBzdHJ1Y3Qg ZHNpX2Nsa19jbGllbnRfaW5mbywKLQkJCSAgbGlzdCk7Ci0JCWxpc3RfZGVsKCZub2RlLT5saXN0 KTsKLQkJcHJfZGVidWcoIlJlbW92ZWQgZGV2aWNlICglcylcbiIsIG5vZGUtPm5hbWUpOwotCQlr ZnJlZShub2RlKTsKLQl9Ci0KLQlyYyA9IGRzaV9yZWNoZWNrX2Nsa19zdGF0ZShtbmdyKTsKLQlp ZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRvIGRpc2FibGUgYWxsIGNsb2Nrc1xuIik7Ci0KLQlt dXRleF91bmxvY2soJm1uZ3ItPmNsa19tdXRleCk7Ci0JcHJfZGVidWcoIiVzOiBFWElULCByYyA9 ICVkXG4iLCBtbmdyLT5uYW1lLCByYyk7Ci0Ja2ZyZWUobW5ncik7Ci0JcmV0dXJuIHJjOwotfQot CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDE3OThmNDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg0NiArMCww IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQK LSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2RlZmluZSBwcl9mbXQo Zm10KQkiZHNpLWN0cmw6WyVzXSAiIGZtdCwgX19mdW5jX18KLQotI2luY2x1ZGUgPGxpbnV4L29m X2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3Vs YXRvci9jb25zdW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2lmZGVmIENPTkZJR19D SFJPTUVfQlVTX1NDQUxFCi0jaW5jbHVkZSA8bGludXgvbXNtLWJ1cy5oPgotI2VuZGlmCi0jaW5j bHVkZSA8bGludXgvb2ZfaXJxLmg+Ci0jaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Ci0K LSNpbmNsdWRlICJtc21fZHJ2LmgiCi0jaW5jbHVkZSAibXNtX2ttcy5oIgotI2luY2x1ZGUgIm1z bV9ncHUuaCIKLSNpbmNsdWRlICJtc21fbW11LmgiCi0jaW5jbHVkZSAiZHNpX2N0cmwuaCIKLSNp bmNsdWRlICJkc2lfY3RybF9ody5oIgotI2luY2x1ZGUgImRzaV9jbGsuaCIKLSNpbmNsdWRlICJk c2lfcHdyLmgiCi0jaW5jbHVkZSAiZHNpX2NhdGFsb2cuaCIKLQotI2luY2x1ZGUgImRwdV9kYmcu aCIKLQotI2RlZmluZSBEU0lfQ1RSTF9ERUZBVUxUX0xBQkVMICJNRFNTIERTSSBDVFJMIgotCi0j ZGVmaW5lIERTSV9DVFJMX1RYX1RPX01TICAgICAyMDAKLQotI2RlZmluZSBUT19PTl9PRkYoeCkg KCh4KSA/ICJPTiIgOiAiT0ZGIikKLQotI2RlZmluZSBDRUlMKHgsIHkpICAgICAgICAgICAgICAo KCh4KSArICgoeSktMSkpIC8gKHkpKQotLyoqCi0gKiBlbnVtIGRzaV9jdHJsX2RyaXZlcl9vcHMg LSBjb250cm9sbGVyIGRyaXZlciBvcHMKLSAqLwotZW51bSBkc2lfY3RybF9kcml2ZXJfb3BzIHsK LQlEU0lfQ1RSTF9PUF9QT1dFUl9TVEFURV9DSEFOR0UsCi0JRFNJX0NUUkxfT1BfQ01EX0VOR0lO RSwKLQlEU0lfQ1RSTF9PUF9WSURfRU5HSU5FLAotCURTSV9DVFJMX09QX0hPU1RfRU5HSU5FLAot CURTSV9DVFJMX09QX0NNRF9UWCwKLQlEU0lfQ1RSTF9PUF9IT1NUX0lOSVQsCi0JRFNJX0NUUkxf T1BfVFBHLAotCURTSV9DVFJMX09QX1BIWV9TV19SRVNFVCwKLQlEU0lfQ1RSTF9PUF9BU1lOQ19U SU1JTkcsCi0JRFNJX0NUUkxfT1BfTUFYCi19OwotCi1zdHJ1Y3QgZHNpX2N0cmxfbGlzdF9pdGVt IHsKLQlzdHJ1Y3QgZHNpX2N0cmwgKmN0cmw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsK LQotc3RhdGljIExJU1RfSEVBRChkc2lfY3RybF9saXN0KTsKLXN0YXRpYyBERUZJTkVfTVVURVgo ZHNpX2N0cmxfbGlzdF9sb2NrKTsKLQotc3RhdGljIGNvbnN0IGVudW0gZHNpX2N0cmxfdmVyc2lv biBkc2lfY3RybF92MV80ID0gRFNJX0NUUkxfVkVSU0lPTl8xXzQ7Ci1zdGF0aWMgY29uc3QgZW51 bSBkc2lfY3RybF92ZXJzaW9uIGRzaV9jdHJsX3YyXzAgPSBEU0lfQ1RSTF9WRVJTSU9OXzJfMDsK LXN0YXRpYyBjb25zdCBlbnVtIGRzaV9jdHJsX3ZlcnNpb24gZHNpX2N0cmxfdjJfMiA9IERTSV9D VFJMX1ZFUlNJT05fMl8yOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtc21f ZHNpX29mX21hdGNoW10gPSB7Ci0JewotCQkuY29tcGF0aWJsZSA9ICJxY29tLGRzaS1jdHJsLWh3 LXYxLjQiLAotCQkuZGF0YSA9ICZkc2lfY3RybF92MV80LAotCX0sCi0JewotCQkuY29tcGF0aWJs ZSA9ICJxY29tLGRzaS1jdHJsLWh3LXYyLjAiLAotCQkuZGF0YSA9ICZkc2lfY3RybF92Ml8wLAot CX0sCi0JewotCQkuY29tcGF0aWJsZSA9ICJxY29tLGRzaS1jdHJsLWh3LXYyLjIiLAotCQkuZGF0 YSA9ICZkc2lfY3RybF92Ml8yLAotCX0sCi0Je30KLX07Ci0KLXN0YXRpYyBzc2l6ZV90IGRlYnVn ZnNfc3RhdGVfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgICAgICBjaGFyIF9f dXNlciAqYnVmZiwKLQkJCQkgICAgICAgc2l6ZV90IGNvdW50LAotCQkJCSAgICAgICBsb2ZmX3Qg KnBwb3MpCi17Ci0Jc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCA9IGZpbGUtPnByaXZhdGVfZGF0 YTsKLQljaGFyICpidWY7Ci0JdTMyIGxlbiA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsKQotCQlyZXR1 cm4gLUVOT0RFVjsKLQotCWlmICgqcHBvcykKLQkJcmV0dXJuIDA7Ci0KLQlidWYgPSBremFsbG9j KFNaXzRLLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkv KiBEdW1wIGN1cnJlbnQgc3RhdGUgKi8KLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChT Wl80SyAtIGxlbiksICJDdXJyZW50IFN0YXRlOlxuIik7Ci0JbGVuICs9IHNucHJpbnRmKChidWYg KyBsZW4pLCAoU1pfNEsgLSBsZW4pLAotCQkJIlx0Q1RSTF9FTkdJTkUgPSAlc1xuIiwKLQkJCVRP X09OX09GRihkc2lfY3RybC0+Y3VycmVudF9zdGF0ZS5jb250cm9sbGVyX3N0YXRlKSk7Ci0JbGVu ICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoU1pfNEsgLSBsZW4pLAotCQkJIlx0VklERU9fRU5H SU5FID0gJXNcblx0Q09NTUFORF9FTkdJTkUgPSAlc1xuIiwKLQkJCVRPX09OX09GRihkc2lfY3Ry bC0+Y3VycmVudF9zdGF0ZS52aWRfZW5naW5lX3N0YXRlKSwKLQkJCVRPX09OX09GRihkc2lfY3Ry bC0+Y3VycmVudF9zdGF0ZS5jbWRfZW5naW5lX3N0YXRlKSk7Ci0KLQkvKiBEdW1wIGNsb2NrIGlu Zm9ybWF0aW9uICovCi0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoU1pfNEsgLSBsZW4p LCAiXG5DbG9jayBJbmZvOlxuIik7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoU1pf NEsgLSBsZW4pLAotCQkJIlx0QllURV9DTEsgPSAldSwgUElYRUxfQ0xLID0gJXUsIEVTQ19DTEsg PSAldVxuIiwKLQkJCWRzaV9jdHJsLT5jbGtfZnJlcS5ieXRlX2Nsa19yYXRlLAotCQkJZHNpX2N0 cmwtPmNsa19mcmVxLnBpeF9jbGtfcmF0ZSwKLQkJCWRzaV9jdHJsLT5jbGtfZnJlcS5lc2NfY2xr X3JhdGUpOwotCi0JLyogVE9ETzogbWFrZSBzdXJlIHRoYXQgdGhpcyBkb2VzIG5vdCBleGNlZWQg NEsgKi8KLQlpZiAoY29weV90b191c2VyKGJ1ZmYsIGJ1ZiwgbGVuKSkgewotCQlrZnJlZShidWYp OwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQkqcHBvcyArPSBsZW47Ci0Ja2ZyZWUoYnVmKTsK LQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBkZWJ1Z2ZzX3JlZ19kdW1wX3JlYWQo c3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgICBjaGFyIF9fdXNlciAqYnVmZiwKLQkJCQkgICAg IHNpemVfdCBjb3VudCwKLQkJCQkgICAgIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZHNpX2N0 cmwgKmRzaV9jdHJsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmJ1ZjsKLQl1MzIgbGVu ID0gMDsKLQlzdHJ1Y3QgZHNpX2Nsa19jdHJsX2luZm8gY2xrX2luZm87Ci0JaW50IHJjID0gMDsK LQotCWlmICghZHNpX2N0cmwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKCpwcG9zKQotCQly ZXR1cm4gMDsKLQotCWJ1ZiA9IGt6YWxsb2MoU1pfNEssIEdGUF9LRVJORUwpOwotCWlmICghYnVm KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNsa19pbmZvLmNsaWVudCA9IERTSV9DTEtfUkVRX0RT SV9DTElFTlQ7Ci0JY2xrX2luZm8uY2xrX3R5cGUgPSBEU0lfQ09SRV9DTEs7Ci0JY2xrX2luZm8u Y2xrX3N0YXRlID0gRFNJX0NMS19PTjsKLQotCXJjID0gZHNpX2N0cmwtPmNsa19jYi5kc2lfY2xr X2NiKGRzaV9jdHJsLT5jbGtfY2IucHJpdiwgY2xrX2luZm8pOwotCWlmIChyYykgewotCQlwcl9l cnIoImZhaWxlZCB0byBlbmFibGUgRFNJIGNvcmUgY2xvY2tzXG4iKTsKLQkJa2ZyZWUoYnVmKTsK LQkJcmV0dXJuIHJjOwotCX0KLQotCWlmIChkc2lfY3RybC0+aHcub3BzLnJlZ19kdW1wX3RvX2J1 ZmZlcikKLQkJbGVuID0gZHNpX2N0cmwtPmh3Lm9wcy5yZWdfZHVtcF90b19idWZmZXIoJmRzaV9j dHJsLT5odywKLQkJCQlidWYsIFNaXzRLKTsKLQotCWNsa19pbmZvLmNsa19zdGF0ZSA9IERTSV9D TEtfT0ZGOwotCXJjID0gZHNpX2N0cmwtPmNsa19jYi5kc2lfY2xrX2NiKGRzaV9jdHJsLT5jbGtf Y2IucHJpdiwgY2xrX2luZm8pOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBkaXNh YmxlIERTSSBjb3JlIGNsb2Nrc1xuIik7Ci0JCWtmcmVlKGJ1Zik7Ci0JCXJldHVybiByYzsKLQl9 Ci0KLQotCS8qIFRPRE86IG1ha2Ugc3VyZSB0aGF0IHRoaXMgZG9lcyBub3QgZXhjZWVkIDRLICov Ci0JaWYgKGNvcHlfdG9fdXNlcihidWZmLCBidWYsIGxlbikpIHsKLQkJa2ZyZWUoYnVmKTsKLQkJ cmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JKnBwb3MgKz0gbGVuOwotCWtmcmVlKGJ1Zik7Ci0JcmV0 dXJuIGxlbjsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhdGVf aW5mb19mb3BzID0gewotCS5vcGVuID0gc2ltcGxlX29wZW4sCi0JLnJlYWQgPSBkZWJ1Z2ZzX3N0 YXRlX2luZm9fcmVhZCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IHJlZ19kdW1wX2ZvcHMgPSB7Ci0JLm9wZW4gPSBzaW1wbGVfb3BlbiwKLQkucmVhZCA9IGRlYnVn ZnNfcmVnX2R1bXBfcmVhZCwKLX07Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfZGVidWdmc19pbml0 KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkJIHN0cnVjdCBkZW50cnkgKnBhcmVudCkK LXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkZW50cnkgKmRpciwgKnN0YXRlX2ZpbGUsICpyZWdf ZHVtcDsKLQljaGFyIGRiZ19uYW1lW0RTSV9ERUJVR19OQU1FX0xFTl07Ci0KLQlkaXIgPSBkZWJ1 Z2ZzX2NyZWF0ZV9kaXIoZHNpX2N0cmwtPm5hbWUsIHBhcmVudCk7Ci0JaWYgKElTX0VSUl9PUl9O VUxMKGRpcikpIHsKLQkJcmMgPSBQVFJfRVJSKGRpcik7Ci0JCXByX2VycigiW0RTSV8lZF0gZGVi dWdmcyBjcmVhdGUgZGlyIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2Vs bF9pbmRleCwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXN0YXRlX2ZpbGUgPSBkZWJ1Z2Zz X2NyZWF0ZV9maWxlKCJzdGF0ZV9pbmZvIiwKLQkJCQkJIDA0NDQsCi0JCQkJCSBkaXIsCi0JCQkJ CSBkc2lfY3RybCwKLQkJCQkJICZzdGF0ZV9pbmZvX2ZvcHMpOwotCWlmIChJU19FUlJfT1JfTlVM TChzdGF0ZV9maWxlKSkgewotCQlyYyA9IFBUUl9FUlIoc3RhdGVfZmlsZSk7Ci0JCXByX2Vycigi W0RTSV8lZF0gc3RhdGUgZmlsZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2N0cmwt PmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcl9yZW1vdmVfZGlyOwotCX0KLQotCXJlZ19k dW1wID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVnX2R1bXAiLAotCQkJCSAgICAgICAwNDQ0LAot CQkJCSAgICAgICBkaXIsCi0JCQkJICAgICAgIGRzaV9jdHJsLAotCQkJCSAgICAgICAmcmVnX2R1 bXBfZm9wcyk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHJlZ19kdW1wKSkgewotCQlyYyA9IFBUUl9F UlIocmVnX2R1bXApOwotCQlwcl9lcnIoIltEU0lfJWRdIHJlZyBkdW1wIGZpbGUgZmFpbGVkLCBy Yz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZXJy b3JfcmVtb3ZlX2RpcjsKLQl9Ci0KLQlkc2lfY3RybC0+ZGVidWdmc19yb290ID0gZGlyOwotCi0J c25wcmludGYoZGJnX25hbWUsIERTSV9ERUJVR19OQU1FX0xFTiwgImRzaSVkX2N0cmwiLAotCQkJ CQkJZHNpX2N0cmwtPmNlbGxfaW5kZXgpOwotCWRwdV9kYmdfcmVnX3JlZ2lzdGVyX2Jhc2UoZGJn X25hbWUsIGRzaV9jdHJsLT5ody5iYXNlLAotCQkJCW1zbV9pb21hcF9zaXplKGRzaV9jdHJsLT5w ZGV2LCAiZHNpX2N0cmwiKSk7Ci1lcnJvcl9yZW1vdmVfZGlyOgotCWRlYnVnZnNfcmVtb3ZlKGRp cik7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfZGVidWdm c19kZWluaXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlkZWJ1Z2ZzX3JlbW92ZShk c2lfY3RybC0+ZGVidWdmc19yb290KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBz dHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlKgotZHNpX2N0cmxfZ2V0X2FzcGFjZShzdHJ1Y3Qg ZHNpX2N0cmwgKmRzaV9jdHJsLAotCQlpbnQgZG9tYWluKQotewotCWlmICghZHNpX2N0cmwgfHwg IWRzaV9jdHJsLT5kcm1fZGV2KQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBtc21fZ2VtX3Nt bXVfYWRkcmVzc19zcGFjZV9nZXQoZHNpX2N0cmwtPmRybV9kZXYsIGRvbWFpbik7Ci19Ci0KLXN0 YXRpYyBpbnQgZHNpX2N0cmxfY2hlY2tfc3RhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwK LQkJCQllbnVtIGRzaV9jdHJsX2RyaXZlcl9vcHMgb3AsCi0JCQkJdTMyIG9wX3N0YXRlKQotewot CWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9jdHJsX3N0YXRlX2luZm8gKnN0YXRlID0gJmRzaV9j dHJsLT5jdXJyZW50X3N0YXRlOwotCi0Jc3dpdGNoIChvcCkgewotCWNhc2UgRFNJX0NUUkxfT1Bf UE9XRVJfU1RBVEVfQ0hBTkdFOgotCQlpZiAoc3RhdGUtPnBvd2VyX3N0YXRlID09IG9wX3N0YXRl KSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXSBObyBjaGFuZ2UgaW4gc3RhdGUsIHB3cl9zdGF0ZT0lZFxu IiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgb3Bfc3RhdGUpOwotCQkJcmMgPSAt RUlOVkFMOwotCQl9IGVsc2UgaWYgKHN0YXRlLT5wb3dlcl9zdGF0ZSA9PSBEU0lfQ1RSTF9QT1dF Ul9WUkVHX09OKSB7Ci0JCQlpZiAoc3RhdGUtPnZpZF9lbmdpbmVfc3RhdGUgPT0gRFNJX0NUUkxf RU5HSU5FX09OKSB7Ci0JCQkJcHJfZGVidWcoIlslZF1TdGF0ZSBlcnJvcjogb3A9JWQ6ICVkXG4i LAotCQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwKLQkJCQkgICAgICAgb3Bfc3RhdGUs Ci0JCQkJICAgICAgIHN0YXRlLT52aWRfZW5naW5lX3N0YXRlKTsKLQkJCQlyYyA9IC1FSU5WQUw7 Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9DTURfRU5HSU5FOgotCQlp ZiAoc3RhdGUtPmNtZF9lbmdpbmVfc3RhdGUgPT0gb3Bfc3RhdGUpIHsKLQkJCXByX2RlYnVnKCJb JWRdIE5vIGNoYW5nZSBpbiBzdGF0ZSwgY21kX3N0YXRlPSVkXG4iLAotCQkJICAgICAgIGRzaV9j dHJsLT5jZWxsX2luZGV4LCBvcF9zdGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0gZWxzZSBp ZiAoKHN0YXRlLT5wb3dlcl9zdGF0ZSAhPSBEU0lfQ1RSTF9QT1dFUl9WUkVHX09OKSB8fAotCQkJ ICAgKHN0YXRlLT5jb250cm9sbGVyX3N0YXRlICE9IERTSV9DVFJMX0VOR0lORV9PTikpIHsKLQkJ CXByX2RlYnVnKCJbJWRdU3RhdGUgZXJyb3I6IG9wPSVkOiAlZCwgJWRcbiIsCi0JCQkgICAgICAg ZHNpX2N0cmwtPmNlbGxfaW5kZXgsCi0JCQkgICAgICAgb3AsCi0JCQkgICAgICAgc3RhdGUtPnBv d2VyX3N0YXRlLAotCQkJICAgICAgIHN0YXRlLT5jb250cm9sbGVyX3N0YXRlKTsKLQkJCXJjID0g LUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQljYXNlIERTSV9DVFJMX09QX1ZJRF9FTkdJTkU6Ci0J CWlmIChzdGF0ZS0+dmlkX2VuZ2luZV9zdGF0ZSA9PSBvcF9zdGF0ZSkgewotCQkJcHJfZGVidWco IlslZF0gTm8gY2hhbmdlIGluIHN0YXRlLCBjbWRfc3RhdGU9JWRcbiIsCi0JCQkgICAgICAgZHNp X2N0cmwtPmNlbGxfaW5kZXgsIG9wX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfSBlbHNl IGlmICgoc3RhdGUtPnBvd2VyX3N0YXRlICE9IERTSV9DVFJMX1BPV0VSX1ZSRUdfT04pIHx8Ci0J CQkgICAoc3RhdGUtPmNvbnRyb2xsZXJfc3RhdGUgIT0gRFNJX0NUUkxfRU5HSU5FX09OKSkgewot CQkJcHJfZGVidWcoIlslZF1TdGF0ZSBlcnJvcjogb3A9JWQ6ICVkLCAlZFxuIiwKLQkJCSAgICAg ICBkc2lfY3RybC0+Y2VsbF9pbmRleCwKLQkJCSAgICAgICBvcCwKLQkJCSAgICAgICBzdGF0ZS0+ cG93ZXJfc3RhdGUsCi0JCQkgICAgICAgc3RhdGUtPmNvbnRyb2xsZXJfc3RhdGUpOwotCQkJcmMg PSAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NUUkxfT1BfSE9TVF9FTkdJTkU6 Ci0JCWlmIChzdGF0ZS0+Y29udHJvbGxlcl9zdGF0ZSA9PSBvcF9zdGF0ZSkgewotCQkJcHJfZGVi dWcoIlslZF0gTm8gY2hhbmdlIGluIHN0YXRlLCBjdHJsX3N0YXRlPSVkXG4iLAotCQkJICAgICAg IGRzaV9jdHJsLT5jZWxsX2luZGV4LCBvcF9zdGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0g ZWxzZSBpZiAoc3RhdGUtPnBvd2VyX3N0YXRlICE9IERTSV9DVFJMX1BPV0VSX1ZSRUdfT04pIHsK LQkJCXByX2RlYnVnKCJbJWRdU3RhdGUgZXJyb3IgKGxpbmsgaXMgb2ZmKTogb3A9JWQ6LCAlZFxu IiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwKLQkJCSAgICAgICBvcF9zdGF0ZSwK LQkJCSAgICAgICBzdGF0ZS0+cG93ZXJfc3RhdGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9IGVs c2UgaWYgKChvcF9zdGF0ZSA9PSBEU0lfQ1RSTF9FTkdJTkVfT0ZGKSAmJgotCQkJICAgKChzdGF0 ZS0+Y21kX2VuZ2luZV9zdGF0ZSAhPSBEU0lfQ1RSTF9FTkdJTkVfT0ZGKSB8fAotCQkJICAgIChz dGF0ZS0+dmlkX2VuZ2luZV9zdGF0ZSAhPSBEU0lfQ1RSTF9FTkdJTkVfT0ZGKSkpIHsKLQkJCXBy X2RlYnVnKCJbJWRdU3RhdGUgZXJyb3IgKGVuZyBvbik6IG9wPSVkOiAlZCwgJWRcbiIsCi0JCQkJ ICBkc2lfY3RybC0+Y2VsbF9pbmRleCwKLQkJCQkgIG9wX3N0YXRlLAotCQkJCSAgc3RhdGUtPmNt ZF9lbmdpbmVfc3RhdGUsCi0JCQkJICBzdGF0ZS0+dmlkX2VuZ2luZV9zdGF0ZSk7Ci0JCQlyYyA9 IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9DTURfVFg6Ci0JCWlm ICgoc3RhdGUtPnBvd2VyX3N0YXRlICE9IERTSV9DVFJMX1BPV0VSX1ZSRUdfT04pIHx8Ci0JCSAg ICAoc3RhdGUtPmhvc3RfaW5pdGlhbGl6ZWQgIT0gdHJ1ZSkgfHwKLQkJICAgIChzdGF0ZS0+Y21k X2VuZ2luZV9zdGF0ZSAhPSBEU0lfQ1RSTF9FTkdJTkVfT04pKSB7Ci0JCQlwcl9kZWJ1ZygiWyVk XVN0YXRlIGVycm9yOiBvcD0lZDogJWQsICVkLCAlZFxuIiwKLQkJCSAgICAgICBkc2lfY3RybC0+ Y2VsbF9pbmRleCwKLQkJCSAgICAgICBvcCwKLQkJCSAgICAgICBzdGF0ZS0+cG93ZXJfc3RhdGUs Ci0JCQkgICAgICAgc3RhdGUtPmhvc3RfaW5pdGlhbGl6ZWQsCi0JCQkgICAgICAgc3RhdGUtPmNt ZF9lbmdpbmVfc3RhdGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCWNhc2Ug RFNJX0NUUkxfT1BfSE9TVF9JTklUOgotCQlpZiAoc3RhdGUtPmhvc3RfaW5pdGlhbGl6ZWQgPT0g b3Bfc3RhdGUpIHsKLQkJCXByX2RlYnVnKCJbJWRdIE5vIGNoYW5nZSBpbiBzdGF0ZSwgaG9zdF9p bml0PSVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBvcF9zdGF0ZSk7Ci0J CQlyYyA9IC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAoc3RhdGUtPnBvd2VyX3N0YXRlICE9IERTSV9D VFJMX1BPV0VSX1ZSRUdfT04pIHsKLQkJCXByX2RlYnVnKCJbJWRdU3RhdGUgZXJyb3I6IG9wPSVk OiAlZFxuIiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgb3AsIHN0YXRlLT5wb3dl cl9zdGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RS TF9PUF9UUEc6Ci0JCWlmIChzdGF0ZS0+dHBnX2VuYWJsZWQgPT0gb3Bfc3RhdGUpIHsKLQkJCXBy X2RlYnVnKCJbJWRdIE5vIGNoYW5nZSBpbiBzdGF0ZSwgdHBnX2VuYWJsZWQ9JWRcbiIsCi0JCQkg ICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIG9wX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsK LQkJfSBlbHNlIGlmICgoc3RhdGUtPnBvd2VyX3N0YXRlICE9IERTSV9DVFJMX1BPV0VSX1ZSRUdf T04pIHx8Ci0JCQkgICAoc3RhdGUtPmNvbnRyb2xsZXJfc3RhdGUgIT0gRFNJX0NUUkxfRU5HSU5F X09OKSkgewotCQkJcHJfZGVidWcoIlslZF1TdGF0ZSBlcnJvcjogb3A9JWQ6ICVkLCAlZFxuIiwK LQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwKLQkJCSAgICAgICBvcCwKLQkJCSAgICAg ICBzdGF0ZS0+cG93ZXJfc3RhdGUsCi0JCQkgICAgICAgc3RhdGUtPmNvbnRyb2xsZXJfc3RhdGUp OwotCQkJcmMgPSAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NUUkxfT1BfUEhZ X1NXX1JFU0VUOgotCQlpZiAoc3RhdGUtPnBvd2VyX3N0YXRlICE9IERTSV9DVFJMX1BPV0VSX1ZS RUdfT04pIHsKLQkJCXByX2RlYnVnKCJbJWRdU3RhdGUgZXJyb3I6IG9wPSVkOiAlZFxuIiwKLQkJ CSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgb3AsIHN0YXRlLT5wb3dlcl9zdGF0ZSk7Ci0J CQlyYyA9IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9BU1lOQ19U SU1JTkc6Ci0JCWlmIChzdGF0ZS0+dmlkX2VuZ2luZV9zdGF0ZSAhPSBvcF9zdGF0ZSkgewotCQkJ cHJfZXJyKCJbJWRdIFVuZXhwZWN0ZWQgZW5naW5lIHN0YXRlIHZpZF9zdGF0ZT0lZFxuIiwKLQkJ CSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgb3Bfc3RhdGUpOwotCQkJcmMgPSAtRUlOVkFM OwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJjID0gLUVOT1RTVVBQOwotCQlicmVhazsK LQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9jdHJsX3VwZGF0ZV9zdGF0 ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCSAgZW51bSBkc2lfY3RybF9kcml2ZXJf b3BzIG9wLAotCQkJCSAgdTMyIG9wX3N0YXRlKQotewotCXN0cnVjdCBkc2lfY3RybF9zdGF0ZV9p bmZvICpzdGF0ZSA9ICZkc2lfY3RybC0+Y3VycmVudF9zdGF0ZTsKLQotCXN3aXRjaCAob3ApIHsK LQljYXNlIERTSV9DVFJMX09QX1BPV0VSX1NUQVRFX0NIQU5HRToKLQkJc3RhdGUtPnBvd2VyX3N0 YXRlID0gb3Bfc3RhdGU7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NUUkxfT1BfQ01EX0VOR0lORToK LQkJc3RhdGUtPmNtZF9lbmdpbmVfc3RhdGUgPSBvcF9zdGF0ZTsKLQkJYnJlYWs7Ci0JY2FzZSBE U0lfQ1RSTF9PUF9WSURfRU5HSU5FOgotCQlzdGF0ZS0+dmlkX2VuZ2luZV9zdGF0ZSA9IG9wX3N0 YXRlOwotCQlicmVhazsKLQljYXNlIERTSV9DVFJMX09QX0hPU1RfRU5HSU5FOgotCQlzdGF0ZS0+ Y29udHJvbGxlcl9zdGF0ZSA9IG9wX3N0YXRlOwotCQlicmVhazsKLQljYXNlIERTSV9DVFJMX09Q X0hPU1RfSU5JVDoKLQkJc3RhdGUtPmhvc3RfaW5pdGlhbGl6ZWQgPSAob3Bfc3RhdGUgPT0gMSkg PyB0cnVlIDogZmFsc2U7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NUUkxfT1BfVFBHOgotCQlzdGF0 ZS0+dHBnX2VuYWJsZWQgPSAob3Bfc3RhdGUgPT0gMSkgPyB0cnVlIDogZmFsc2U7Ci0JCWJyZWFr OwotCWNhc2UgRFNJX0NUUkxfT1BfQ01EX1RYOgotCWNhc2UgRFNJX0NUUkxfT1BfUEhZX1NXX1JF U0VUOgotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBkc2lfY3RybF9p bml0X3JlZ21hcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCXN0cnVjdCBkc2lf Y3RybCAqY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCXZvaWQgX19pb21lbSAqcHRyOwotCi0JcHRy ID0gbXNtX2lvcmVtYXAocGRldiwgImRzaV9jdHJsIiwgY3RybC0+bmFtZSk7Ci0JaWYgKElTX0VS UihwdHIpKSB7Ci0JCXJjID0gUFRSX0VSUihwdHIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JY3Ry bC0+aHcuYmFzZSA9IHB0cjsKLQlwcl9kZWJ1ZygiWyVzXSBtYXAgZHNpX2N0cmwgcmVnaXN0ZXJz IHRvICVwXG4iLCBjdHJsLT5uYW1lLAotCQkgY3RybC0+aHcuYmFzZSk7Ci0KLQlzd2l0Y2ggKGN0 cmwtPnZlcnNpb24pIHsKLQljYXNlIERTSV9DVFJMX1ZFUlNJT05fMV80OgotCWNhc2UgRFNJX0NU UkxfVkVSU0lPTl8yXzA6Ci0JCXB0ciA9IG1zbV9pb3JlbWFwKHBkZXYsICJtbXNzX21pc2MiLCBj dHJsLT5uYW1lKTsKLQkJaWYgKElTX0VSUihwdHIpKSB7Ci0JCQlwcl9lcnIoIm1tc3NfbWlzYyBi YXNlIGFkZHJlc3Mgbm90IGZvdW5kIGZvciBbJXNdXG4iLAotCQkJCQljdHJsLT5uYW1lKTsKLQkJ CXJjID0gUFRSX0VSUihwdHIpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JCWN0cmwtPmh3Lm1tc3Nf bWlzY19iYXNlID0gcHRyOwotCQljdHJsLT5ody5kaXNwX2NjX2Jhc2UgPSBOVUxMOwotCQlicmVh azsKLQljYXNlIERTSV9DVFJMX1ZFUlNJT05fMl8yOgotCQlwdHIgPSBtc21faW9yZW1hcChwZGV2 LCAiZGlzcF9jY19iYXNlIiwgY3RybC0+bmFtZSk7Ci0JCWlmIChJU19FUlIocHRyKSkgewotCQkJ cHJfZXJyKCJkaXNwX2NjIGJhc2UgYWRkcmVzcyBub3QgZm91bmQgZm9yIFslc11cbiIsCi0JCQkJ CWN0cmwtPm5hbWUpOwotCQkJcmMgPSBQVFJfRVJSKHB0cik7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0K LQkJY3RybC0+aHcuZGlzcF9jY19iYXNlID0gcHRyOwotCQljdHJsLT5ody5tbXNzX21pc2NfYmFz ZSA9IE5VTEw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIGludCBkc2lfY3RybF9jbG9ja3NfZGVpbml0KHN0cnVjdCBkc2lfY3Ry bCAqY3RybCkKLXsKLQlzdHJ1Y3QgZHNpX2NvcmVfY2xrX2luZm8gKmNvcmUgPSAmY3RybC0+Y2xr X2luZm8uY29yZV9jbGtzOwotCXN0cnVjdCBkc2lfbGlua19jbGtfaW5mbyAqbGluayA9ICZjdHJs LT5jbGtfaW5mby5saW5rX2Nsa3M7Ci0Jc3RydWN0IGRzaV9jbGtfbGlua19zZXQgKnJjZyA9ICZj dHJsLT5jbGtfaW5mby5yY2dfY2xrczsKLQotCWlmIChjb3JlLT5tZHBfY29yZV9jbGspCi0JCWRl dm1fY2xrX3B1dCgmY3RybC0+cGRldi0+ZGV2LCBjb3JlLT5tZHBfY29yZV9jbGspOwotCWlmIChj b3JlLT5pZmFjZV9jbGspCi0JCWRldm1fY2xrX3B1dCgmY3RybC0+cGRldi0+ZGV2LCBjb3JlLT5p ZmFjZV9jbGspOwotCWlmIChjb3JlLT5jb3JlX21tc3NfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0 cmwtPnBkZXYtPmRldiwgY29yZS0+Y29yZV9tbXNzX2Nsayk7Ci0JaWYgKGNvcmUtPmJ1c19jbGsp Ci0JCWRldm1fY2xrX3B1dCgmY3RybC0+cGRldi0+ZGV2LCBjb3JlLT5idXNfY2xrKTsKLQlpZiAo Y29yZS0+bW5vY19jbGspCi0JCWRldm1fY2xrX3B1dCgmY3RybC0+cGRldi0+ZGV2LCBjb3JlLT5t bm9jX2Nsayk7Ci0KLQltZW1zZXQoY29yZSwgMHgwLCBzaXplb2YoKmNvcmUpKTsKLQotCWlmIChs aW5rLT5ieXRlX2NsaykKLQkJZGV2bV9jbGtfcHV0KCZjdHJsLT5wZGV2LT5kZXYsIGxpbmstPmJ5 dGVfY2xrKTsKLQlpZiAobGluay0+cGl4ZWxfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0cmwtPnBk ZXYtPmRldiwgbGluay0+cGl4ZWxfY2xrKTsKLQlpZiAobGluay0+ZXNjX2NsaykKLQkJZGV2bV9j bGtfcHV0KCZjdHJsLT5wZGV2LT5kZXYsIGxpbmstPmVzY19jbGspOwotCWlmIChsaW5rLT5ieXRl X2ludGZfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0cmwtPnBkZXYtPmRldiwgbGluay0+Ynl0ZV9p bnRmX2Nsayk7Ci0KLQltZW1zZXQobGluaywgMHgwLCBzaXplb2YoKmxpbmspKTsKLQotCWlmIChy Y2ctPmJ5dGVfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0cmwtPnBkZXYtPmRldiwgcmNnLT5ieXRl X2Nsayk7Ci0JaWYgKHJjZy0+cGl4ZWxfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0cmwtPnBkZXYt PmRldiwgcmNnLT5waXhlbF9jbGspOwotCi0JbWVtc2V0KHJjZywgMHgwLCBzaXplb2YoKnJjZykp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfY2xvY2tzX2luaXQoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQlzdHJ1Y3QgZHNpX2N0cmwgKmN0cmwpCi17 Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2NvcmVfY2xrX2luZm8gKmNvcmUgPSAmY3RybC0+ Y2xrX2luZm8uY29yZV9jbGtzOwotCXN0cnVjdCBkc2lfbGlua19jbGtfaW5mbyAqbGluayA9ICZj dHJsLT5jbGtfaW5mby5saW5rX2Nsa3M7Ci0Jc3RydWN0IGRzaV9jbGtfbGlua19zZXQgKnJjZyA9 ICZjdHJsLT5jbGtfaW5mby5yY2dfY2xrczsKLQotCWNvcmUtPm1kcF9jb3JlX2NsayA9IGRldm1f Y2xrX2dldCgmcGRldi0+ZGV2LCAibWRwX2NvcmVfY2xrIik7Ci0JaWYgKElTX0VSUihjb3JlLT5t ZHBfY29yZV9jbGspKSB7Ci0JCWNvcmUtPm1kcF9jb3JlX2NsayA9IE5VTEw7Ci0JCXByX2RlYnVn KCJmYWlsZWQgdG8gZ2V0IG1kcF9jb3JlX2NsaywgcmM9JWRcbiIsIHJjKTsKLQl9Ci0KLQljb3Jl LT5pZmFjZV9jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImlmYWNlX2NsayIpOwotCWlm IChJU19FUlIoY29yZS0+aWZhY2VfY2xrKSkgewotCQljb3JlLT5pZmFjZV9jbGsgPSBOVUxMOwot CQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGdldCBpZmFjZV9jbGssIHJjPSVkXG4iLCByYyk7Ci0JfQot Ci0JY29yZS0+Y29yZV9tbXNzX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiY29yZV9t bXNzX2NsayIpOwotCWlmIChJU19FUlIoY29yZS0+Y29yZV9tbXNzX2NsaykpIHsKLQkJY29yZS0+ Y29yZV9tbXNzX2NsayA9IE5VTEw7Ci0JCXByX2RlYnVnKCJmYWlsZWQgdG8gZ2V0IGNvcmVfbW1z c19jbGssIHJjPSVkXG4iLCByYyk7Ci0JfQotCi0JY29yZS0+YnVzX2NsayA9IGRldm1fY2xrX2dl dCgmcGRldi0+ZGV2LCAiYnVzX2NsayIpOwotCWlmIChJU19FUlIoY29yZS0+YnVzX2NsaykpIHsK LQkJY29yZS0+YnVzX2NsayA9IE5VTEw7Ci0JCXByX2RlYnVnKCJmYWlsZWQgdG8gZ2V0IGJ1c19j bGssIHJjPSVkXG4iLCByYyk7Ci0JfQotCi0JY29yZS0+bW5vY19jbGsgPSBkZXZtX2Nsa19nZXQo JnBkZXYtPmRldiwgIm1ub2NfY2xrIik7Ci0JaWYgKElTX0VSUihjb3JlLT5tbm9jX2NsaykpIHsK LQkJY29yZS0+bW5vY19jbGsgPSBOVUxMOwotCQlwcl9kZWJ1ZygiY2FuJ3QgZ2V0IG1ub2MgY2xv Y2ssIHJjPSVkXG4iLCByYyk7Ci0JfQotCi0JbGluay0+Ynl0ZV9jbGsgPSBkZXZtX2Nsa19nZXQo JnBkZXYtPmRldiwgImJ5dGVfY2xrIik7Ci0JaWYgKElTX0VSUihsaW5rLT5ieXRlX2NsaykpIHsK LQkJcmMgPSBQVFJfRVJSKGxpbmstPmJ5dGVfY2xrKTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0 IGJ5dGVfY2xrLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JbGluay0+cGl4 ZWxfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJwaXhlbF9jbGsiKTsKLQlpZiAoSVNf RVJSKGxpbmstPnBpeGVsX2NsaykpIHsKLQkJcmMgPSBQVFJfRVJSKGxpbmstPnBpeGVsX2Nsayk7 Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBwaXhlbF9jbGssIHJjPSVkXG4iLCByYyk7Ci0JCWdv dG8gZmFpbDsKLQl9Ci0KLQlsaW5rLT5lc2NfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYs ICJlc2NfY2xrIik7Ci0JaWYgKElTX0VSUihsaW5rLT5lc2NfY2xrKSkgewotCQlyYyA9IFBUUl9F UlIobGluay0+ZXNjX2Nsayk7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBlc2NfY2xrLCByYz0l ZFxuIiwgcmMpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JbGluay0+Ynl0ZV9pbnRmX2NsayA9IGRl dm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiYnl0ZV9pbnRmX2NsayIpOwotCWlmIChJU19FUlIobGlu ay0+Ynl0ZV9pbnRmX2NsaykpIHsKLQkJbGluay0+Ynl0ZV9pbnRmX2NsayA9IE5VTEw7Ci0JCXBy X2RlYnVnKCJjYW4ndCBmaW5kIGJ5dGUgaW50ZiBjbGssIHJjPSVkXG4iLCByYyk7Ci0JfQotCi0J cmNnLT5ieXRlX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiYnl0ZV9jbGtfcmNnIik7 Ci0JaWYgKElTX0VSUihyY2ctPmJ5dGVfY2xrKSkgewotCQlyYyA9IFBUUl9FUlIocmNnLT5ieXRl X2Nsayk7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBieXRlX2Nsa19yY2csIHJjPSVkXG4iLCBy Yyk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlyY2ctPnBpeGVsX2NsayA9IGRldm1fY2xrX2dldCgm cGRldi0+ZGV2LCAicGl4ZWxfY2xrX3JjZyIpOwotCWlmIChJU19FUlIocmNnLT5waXhlbF9jbGsp KSB7Ci0JCXJjID0gUFRSX0VSUihyY2ctPnBpeGVsX2Nsayk7Ci0JCXByX2VycigiZmFpbGVkIHRv IGdldCBwaXhlbF9jbGtfcmNnLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0J cmV0dXJuIDA7Ci1mYWlsOgotCWRzaV9jdHJsX2Nsb2Nrc19kZWluaXQoY3RybCk7Ci0JcmV0dXJu IHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX3N1cHBsaWVzX2RlaW5pdChzdHJ1Y3QgZHNp X2N0cmwgKmN0cmwpCi17Ci0JaW50IGkgPSAwOwotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9y ZWd1bGF0b3JfaW5mbyAqcmVnczsKLQotCXJlZ3MgPSAmY3RybC0+cHdyX2luZm8uZGlnaXRhbDsK LQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykgewotCQlpZiAoIXJlZ3MtPnZyZWdz W2ldLnZyZWcpCi0JCQlwcl9lcnIoInZyZWcgaXMgTlVMTCwgc2hvdWxkIG5vdCByZWFjaCBoZXJl XG4iKTsKLQkJZWxzZQotCQkJZGV2bV9yZWd1bGF0b3JfcHV0KHJlZ3MtPnZyZWdzW2ldLnZyZWcp OwotCX0KLQotCXJlZ3MgPSAmY3RybC0+cHdyX2luZm8uaG9zdF9wd3I7Ci0JZm9yIChpID0gMDsg aSA8IHJlZ3MtPmNvdW50OyBpKyspIHsKLQkJaWYgKCFyZWdzLT52cmVnc1tpXS52cmVnKQotCQkJ cHJfZXJyKCJ2cmVnIGlzIE5VTEwsIHNob3VsZCBub3QgcmVhY2ggaGVyZVxuIik7Ci0JCWVsc2UK LQkJCWRldm1fcmVndWxhdG9yX3B1dChyZWdzLT52cmVnc1tpXS52cmVnKTsKLQl9Ci0KLQlpZiAo IWN0cmwtPnB3cl9pbmZvLmhvc3RfcHdyLnZyZWdzKSB7Ci0JCWRldm1fa2ZyZWUoJmN0cmwtPnBk ZXYtPmRldiwgY3RybC0+cHdyX2luZm8uaG9zdF9wd3IudnJlZ3MpOwotCQljdHJsLT5wd3JfaW5m by5ob3N0X3B3ci52cmVncyA9IE5VTEw7Ci0JCWN0cmwtPnB3cl9pbmZvLmhvc3RfcHdyLmNvdW50 ID0gMDsKLQl9Ci0KLQlpZiAoIWN0cmwtPnB3cl9pbmZvLmRpZ2l0YWwudnJlZ3MpIHsKLQkJZGV2 bV9rZnJlZSgmY3RybC0+cGRldi0+ZGV2LCBjdHJsLT5wd3JfaW5mby5kaWdpdGFsLnZyZWdzKTsK LQkJY3RybC0+cHdyX2luZm8uZGlnaXRhbC52cmVncyA9IE5VTEw7Ci0JCWN0cmwtPnB3cl9pbmZv LmRpZ2l0YWwuY291bnQgPSAwOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfY3RybF9zdXBwbGllc19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJ ICBzdHJ1Y3QgZHNpX2N0cmwgKmN0cmwpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaSA9IDA7Ci0J c3RydWN0IGRzaV9yZWd1bGF0b3JfaW5mbyAqcmVnczsKLQlzdHJ1Y3QgcmVndWxhdG9yICp2cmVn ID0gTlVMTDsKLQotCXJjID0gZHNpX3B3cl9nZXRfZHRfdnJlZ19kYXRhKCZwZGV2LT5kZXYsCi0J CQkJCSAgJmN0cmwtPnB3cl9pbmZvLmRpZ2l0YWwsCi0JCQkJCSAgInFjb20sY29yZS1zdXBwbHkt ZW50cmllcyIpOwotCWlmIChyYykKLQkJcHJfZGVidWcoImZhaWxlZCB0byBnZXQgZGlnaXRhbCBz dXBwbHksIHJjID0gJWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX3B3cl9nZXRfZHRfdnJlZ19kYXRh KCZwZGV2LT5kZXYsCi0JCQkJCSAgJmN0cmwtPnB3cl9pbmZvLmhvc3RfcHdyLAotCQkJCQkgICJx Y29tLGN0cmwtc3VwcGx5LWVudHJpZXMiKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQg dG8gZ2V0IGhvc3QgcG93ZXIgc3VwcGxpZXMsIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBlcnJv cl9kaWdpdGFsOwotCX0KLQotCXJlZ3MgPSAmY3RybC0+cHdyX2luZm8uZGlnaXRhbDsKLQlmb3Ig KGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykgewotCQl2cmVnID0gZGV2bV9yZWd1bGF0b3Jf Z2V0KCZwZGV2LT5kZXYsIHJlZ3MtPnZyZWdzW2ldLnZyZWdfbmFtZSk7Ci0JCWlmIChJU19FUlIo dnJlZykpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCAlcyByZWd1bGF0b3JcbiIsCi0JCQkg ICAgICAgcmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lKTsKLQkJCXJjID0gUFRSX0VSUih2cmVnKTsK LQkJCWdvdG8gZXJyb3JfaG9zdF9wd3I7Ci0JCX0KLQkJcmVncy0+dnJlZ3NbaV0udnJlZyA9IHZy ZWc7Ci0JfQotCi0JcmVncyA9ICZjdHJsLT5wd3JfaW5mby5ob3N0X3B3cjsKLQlmb3IgKGkgPSAw OyBpIDwgcmVncy0+Y291bnQ7IGkrKykgewotCQl2cmVnID0gZGV2bV9yZWd1bGF0b3JfZ2V0KCZw ZGV2LT5kZXYsIHJlZ3MtPnZyZWdzW2ldLnZyZWdfbmFtZSk7Ci0JCWlmIChJU19FUlIodnJlZykp IHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCAlcyByZWd1bGF0b3JcbiIsCi0JCQkgICAgICAg cmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lKTsKLQkJCWZvciAoLS1pOyBpID49IDA7IGktLSkKLQkJ CQlkZXZtX3JlZ3VsYXRvcl9wdXQocmVncy0+dnJlZ3NbaV0udnJlZyk7Ci0JCQlyYyA9IFBUUl9F UlIodnJlZyk7Ci0JCQlnb3RvIGVycm9yX2RpZ2l0YWxfcHV0OwotCQl9Ci0JCXJlZ3MtPnZyZWdz W2ldLnZyZWcgPSB2cmVnOwotCX0KLQotCXJldHVybiByYzsKLQotZXJyb3JfZGlnaXRhbF9wdXQ6 Ci0JcmVncyA9ICZjdHJsLT5wd3JfaW5mby5kaWdpdGFsOwotCWZvciAoaSA9IDA7IGkgPCByZWdz LT5jb3VudDsgaSsrKQotCQlkZXZtX3JlZ3VsYXRvcl9wdXQocmVncy0+dnJlZ3NbaV0udnJlZyk7 Ci1lcnJvcl9ob3N0X3B3cjoKLQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGN0cmwtPnB3cl9pbmZv Lmhvc3RfcHdyLnZyZWdzKTsKLQljdHJsLT5wd3JfaW5mby5ob3N0X3B3ci52cmVncyA9IE5VTEw7 Ci0JY3RybC0+cHdyX2luZm8uaG9zdF9wd3IuY291bnQgPSAwOwotZXJyb3JfZGlnaXRhbDoKLQlp ZiAoY3RybC0+cHdyX2luZm8uZGlnaXRhbC52cmVncykKLQkJZGV2bV9rZnJlZSgmcGRldi0+ZGV2 LCBjdHJsLT5wd3JfaW5mby5kaWdpdGFsLnZyZWdzKTsKLQljdHJsLT5wd3JfaW5mby5kaWdpdGFs LnZyZWdzID0gTlVMTDsKLQljdHJsLT5wd3JfaW5mby5kaWdpdGFsLmNvdW50ID0gMDsKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfYXhpX2J1c19jbGllbnRfaW5pdChzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQlzdHJ1Y3QgZHNpX2N0cmwgKmN0cmwpCi17 Ci0JaW50IHJjID0gMDsKLSNpZmRlZiBDT05GSUdfQ0hST01FX0JVU19TQ0FMRQotCXN0cnVjdCBk c2lfY3RybF9idXNfc2NhbGVfaW5mbyAqYnVzID0gJmN0cmwtPmF4aV9idXNfaW5mbzsKLQotCWJ1 cy0+YnVzX3NjYWxlX3RhYmxlID0gbXNtX2J1c19jbF9nZXRfcGRhdGEocGRldik7Ci0JaWYgKElT X0VSUl9PUl9OVUxMKGJ1cy0+YnVzX3NjYWxlX3RhYmxlKSkgewotCQlyYyA9IFBUUl9FUlIoYnVz LT5idXNfc2NhbGVfdGFibGUpOwotCQlwcl9kZWJ1ZygibXNtX2J1c19jbF9nZXRfcGRhdGEoKSBm YWlsZWQsIHJjID0gJWRcbiIsIHJjKTsKLQkJYnVzLT5idXNfc2NhbGVfdGFibGUgPSBOVUxMOwot CQlyZXR1cm4gcmM7Ci0JfQotCi0JYnVzLT5idXNfaGFuZGxlID0gbXNtX2J1c19zY2FsZV9yZWdp c3Rlcl9jbGllbnQoYnVzLT5idXNfc2NhbGVfdGFibGUpOwotCWlmICghYnVzLT5idXNfaGFuZGxl KSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgYXhpIGJ1 cyBjbGllbnRcbiIpOwotCX0KLSNlbmRpZgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfY3RybF9heGlfYnVzX2NsaWVudF9kZWluaXQoc3RydWN0IGRzaV9jdHJsICpjdHJsKQotewot I2lmZGVmIENPTkZJR19DSFJPTUVfQlVTX1NDQUxFCi0Jc3RydWN0IGRzaV9jdHJsX2J1c19zY2Fs ZV9pbmZvICpidXMgPSAmY3RybC0+YXhpX2J1c19pbmZvOwotCi0JaWYgKGJ1cy0+YnVzX2hhbmRs ZSkgewotCQltc21fYnVzX3NjYWxlX3VucmVnaXN0ZXJfY2xpZW50KGJ1cy0+YnVzX2hhbmRsZSk7 Ci0KLQkJYnVzLT5idXNfaGFuZGxlID0gMDsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCBkc2lfY3RybF92YWxpZGF0ZV9wYW5lbF9pbmZvKHN0cnVjdCBkc2lfY3RybCAq ZHNpX2N0cmwsCi0JCQkJCXN0cnVjdCBkc2lfaG9zdF9jb25maWcgKmNvbmZpZykKLXsKLQlpbnQg cmMgPSAwOwotCXN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpob3N0X2NmZyA9ICZjb25maWct PmNvbW1vbl9jb25maWc7Ci0KLQlpZiAoY29uZmlnLT5wYW5lbF9tb2RlID49IERTSV9PUF9NT0RF X01BWCkgewotCQlwcl9lcnIoIkludmFsaWQgZHNpIG9wZXJhdGlvbiBtb2RlICglZClcbiIsIGNv bmZpZy0+cGFuZWxfbW9kZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnI7Ci0JfQotCi0J aWYgKChob3N0X2NmZy0+ZGF0YV9sYW5lcyAmIChEU0lfQ0xPQ0tfTEFORSAtIDEpKSA9PSAwKSB7 Ci0JCXByX2VycigiTm8gZGF0YSBsYW5lcyBhcmUgZW5hYmxlZFxuIik7Ci0JCXJjID0gLUVJTlZB TDsKLQkJZ290byBlcnI7Ci0JfQotZXJyOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfY3RybF91cGRhdGVfbGlua19mcmVxcyhzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCXN0 cnVjdCBkc2lfaG9zdF9jb25maWcgKmNvbmZpZywgdm9pZCAqY2xrX2hhbmRsZSkKLXsKLQlpbnQg cmMgPSAwOwotCXUzMiBudW1fb2ZfbGFuZXMgPSAwOwotCXUzMiBicHAgPSAzOwotCXU2NCBoX3Bl cmlvZCwgdl9wZXJpb2QsIGJpdF9yYXRlLCBwY2xrX3JhdGUsIGJpdF9yYXRlX3Blcl9sYW5lLAot CSAgICBieXRlX2Nsa19yYXRlOwotCXN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpob3N0X2Nm ZyA9ICZjb25maWctPmNvbW1vbl9jb25maWc7Ci0Jc3RydWN0IGRzaV9tb2RlX2luZm8gKnRpbWlu ZyA9ICZjb25maWctPnZpZGVvX3RpbWluZzsKLQotCWlmIChob3N0X2NmZy0+ZGF0YV9sYW5lcyAm IERTSV9EQVRBX0xBTkVfMCkKLQkJbnVtX29mX2xhbmVzKys7Ci0JaWYgKGhvc3RfY2ZnLT5kYXRh X2xhbmVzICYgRFNJX0RBVEFfTEFORV8xKQotCQludW1fb2ZfbGFuZXMrKzsKLQlpZiAoaG9zdF9j ZmctPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpCi0JCW51bV9vZl9sYW5lcysrOwotCWlm IChob3N0X2NmZy0+ZGF0YV9sYW5lcyAmIERTSV9EQVRBX0xBTkVfMykKLQkJbnVtX29mX2xhbmVz Kys7Ci0KLQloX3BlcmlvZCA9IERTSV9IX1RPVEFMX0RTQyh0aW1pbmcpOwotCXZfcGVyaW9kID0g RFNJX1ZfVE9UQUwodGltaW5nKTsKLQotCWJpdF9yYXRlID0gaF9wZXJpb2QgKiB2X3BlcmlvZCAq IHRpbWluZy0+cmVmcmVzaF9yYXRlICogYnBwICogODsKLQliaXRfcmF0ZV9wZXJfbGFuZSA9IGJp dF9yYXRlOwotCWRvX2RpdihiaXRfcmF0ZV9wZXJfbGFuZSwgbnVtX29mX2xhbmVzKTsKLQlwY2xr X3JhdGUgPSBiaXRfcmF0ZTsKLQlkb19kaXYocGNsa19yYXRlLCAoOCAqIGJwcCkpOwotCWJ5dGVf Y2xrX3JhdGUgPSBiaXRfcmF0ZV9wZXJfbGFuZTsKLQlkb19kaXYoYnl0ZV9jbGtfcmF0ZSwgOCk7 Ci0JcHJfZGVidWcoImJpdF9jbGtfcmF0ZSA9ICVsbHUsIGJpdF9jbGtfcmF0ZV9wZXJfbGFuZSA9 ICVsbHVcbiIsCi0JCSBiaXRfcmF0ZSwgYml0X3JhdGVfcGVyX2xhbmUpOwotCXByX2RlYnVnKCJi eXRlX2Nsa19yYXRlID0gJWxsdSwgcGNsa19yYXRlID0gJWxsdVxuIiwKLQkJICBieXRlX2Nsa19y YXRlLCBwY2xrX3JhdGUpOwotCi0JZHNpX2N0cmwtPmNsa19mcmVxLmJ5dGVfY2xrX3JhdGUgPSBi eXRlX2Nsa19yYXRlOwotCWRzaV9jdHJsLT5jbGtfZnJlcS5waXhfY2xrX3JhdGUgPSBwY2xrX3Jh dGU7Ci0JZHNpX2N0cmwtPmNsa19mcmVxLmVzY19jbGtfcmF0ZSA9IGNvbmZpZy0+ZXNjX2Nsa19y YXRlX2h6OwotCi0JcmMgPSBkc2lfY2xrX3NldF9saW5rX2ZyZXF1ZW5jaWVzKGNsa19oYW5kbGUs IGRzaV9jdHJsLT5jbGtfZnJlcSwKLQkJCQkJZHNpX2N0cmwtPmNlbGxfaW5kZXgpOwotCWlmIChy YykKLQkJcHJfZXJyKCJGYWlsZWQgdG8gdXBkYXRlIGxpbmsgZnJlcXVlbmNpZXNcbiIpOwotCi0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX2VuYWJsZV9zdXBwbGllcyhzdHJ1 Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLCBib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0J aWYgKGVuYWJsZSkgewotCQlpZiAoIWRzaV9jdHJsLT5jdXJyZW50X3N0YXRlLmhvc3RfaW5pdGlh bGl6ZWQpIHsKLQkJCXJjID0gZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKAotCQkJCSZkc2lfY3Ry bC0+cHdyX2luZm8uaG9zdF9wd3IsIHRydWUpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJm YWlsZWQgdG8gZW5hYmxlIGhvc3QgcG93ZXIgcmVnc1xuIik7Ci0JCQkJZ290byBlcnJvcjsKLQkJ CX0KLQkJfQotCi0JCXJjID0gZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKCZkc2lfY3RybC0+cHdy X2luZm8uZGlnaXRhbCwKLQkJCQkJICAgICAgdHJ1ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJy KCJmYWlsZWQgdG8gZW5hYmxlIGdkc2MsIHJjPSVkXG4iLCByYyk7Ci0JCQkodm9pZClkc2lfcHdy X2VuYWJsZV9yZWd1bGF0b3IoCi0JCQkJCQkmZHNpX2N0cmwtPnB3cl9pbmZvLmhvc3RfcHdyLAot CQkJCQkJZmFsc2UKLQkJCQkJCSk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfSBlbHNlIHsKLQkJ cmMgPSBkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoJmRzaV9jdHJsLT5wd3JfaW5mby5kaWdpdGFs LAotCQkJCQkgICAgICBmYWxzZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8g ZGlzYWJsZSBnZHNjLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCWlm ICghZHNpX2N0cmwtPmN1cnJlbnRfc3RhdGUuaG9zdF9pbml0aWFsaXplZCkgewotCQkJcmMgPSBk c2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoCi0JCQkJJmRzaV9jdHJsLT5wd3JfaW5mby5ob3N0X3B3 ciwgZmFsc2UpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJmYWlsZWQgdG8gZGlzYWJsZSBo b3N0IHBvd2VyIHJlZ3NcbiIpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCX0KLQl9Ci1lcnJv cjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfY29weV9hbmRfcGFkX2Nt ZChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IG1pcGlf ZHNpX3BhY2tldCAqcGFja2V0LAotCQkJCSAgICAgdTggKipidWZmZXIsCi0JCQkJICAgICB1MzIg KnNpemUpCi17Ci0JaW50IHJjID0gMDsKLQl1OCAqYnVmID0gTlVMTDsKLQl1MzIgbGVuOwotCi0J bGVuID0gcGFja2V0LT5zaXplOwotCWxlbiArPSAweDM7IGxlbiAmPSB+MHgwMzsgLyogQWxpZ24g dG8gMzIgYml0cyAqLwotCi0JYnVmID0gZGV2bV9remFsbG9jKCZkc2lfY3RybC0+cGRldi0+ZGV2 LCBsZW4gKiBzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1F Tk9NRU07Ci0KLQkvKiBNU00gc3BlY2lmaWMgY29tbWFuZCBmb3JtYXQgaW4gbWVtb3J5ICovCi0J YnVmWzBdID0gcGFja2V0LT5oZWFkZXJbMV07Ci0JYnVmWzFdID0gcGFja2V0LT5oZWFkZXJbMl07 Ci0JYnVmWzJdID0gcGFja2V0LT5oZWFkZXJbMF07Ci0JYnVmWzNdID0gQklUKDcpOwotCWlmIChw YWNrZXQtPnBheWxvYWRfbGVuZ3RoID4gMCkKLQkJYnVmWzNdIHw9IEJJVCg2KTsKLQotCS8qIExv bmcgcGFja2V0ICovCi0JaWYgKHBhY2tldC0+cGF5bG9hZCAmJiBwYWNrZXQtPnBheWxvYWRfbGVu Z3RoKQotCQltZW1jcHkoYnVmICsgNCwgcGFja2V0LT5wYXlsb2FkLCBwYWNrZXQtPnBheWxvYWRf bGVuZ3RoKTsKLQotCS8qIEFwcGVuZCAweGZmIHRvIHRoZSBlbmQgKi8KLQlpZiAocGFja2V0LT5z aXplIDwgbGVuKQotCQltZW1zZXQoYnVmICsgcGFja2V0LT5zaXplLCAweGZmLCBsZW4gLSBwYWNr ZXQtPnNpemUpOwotCi0JKmJ1ZmZlciA9IGJ1ZjsKLQkqc2l6ZSA9IGxlbjsKLQotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIHZvaWQgZHNpX2N0cmxfd2FpdF9mb3JfdmlkZW9fZG9uZShzdHJ1Y3Qg ZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCXUzMiB2X3RvdGFsID0gMCwgdl9ibGFuayA9IDAsIHNs ZWVwX21zID0gMCwgZnBzID0gMCwgcmV0OwotCXN0cnVjdCBkc2lfbW9kZV9pbmZvICp0aW1pbmc7 Ci0KLQlpZiAoZHNpX2N0cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUgIT0gRFNJX09QX1ZJREVP X01PREUpCi0JCXJldHVybjsKLQotCWRzaV9jdHJsLT5ody5vcHMuY2xlYXJfaW50ZXJydXB0X3N0 YXR1cygmZHNpX2N0cmwtPmh3LAotCQkJCURTSV9WSURFT19NT0RFX0ZSQU1FX0RPTkUpOwotCi0J ZHNpX2N0cmxfZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHQoZHNpX2N0cmwsCi0JCQkJRFNJX1NJTlRf VklERU9fTU9ERV9GUkFNRV9ET05FLCBOVUxMKTsKLQlyZWluaXRfY29tcGxldGlvbigmZHNpX2N0 cmwtPmlycV9pbmZvLnZpZF9mcmFtZV9kb25lKTsKLQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9u X3RpbWVvdXQoCi0JCQkmZHNpX2N0cmwtPmlycV9pbmZvLnZpZF9mcmFtZV9kb25lLAotCQkJbXNl Y3NfdG9famlmZmllcyhEU0lfQ1RSTF9UWF9UT19NUykpOwotCWlmIChyZXQgPD0gMCkKLQkJcHJf ZGVidWcoIndhaXQgZm9yIHZpZGVvIGRvbmUgZmFpbGVkXG4iKTsKLQlkc2lfY3RybF9kaXNhYmxl X3N0YXR1c19pbnRlcnJ1cHQoZHNpX2N0cmwsCi0JCQkJRFNJX1NJTlRfVklERU9fTU9ERV9GUkFN RV9ET05FKTsKLQotCXRpbWluZyA9ICYoZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZpZGVvX3RpbWlu Zyk7Ci0Jdl90b3RhbCA9IHRpbWluZy0+dl9zeW5jX3dpZHRoICsgdGltaW5nLT52X2JhY2tfcG9y Y2ggKwotCQkJdGltaW5nLT52X2Zyb250X3BvcmNoICsgdGltaW5nLT52X2FjdGl2ZTsKLQl2X2Js YW5rID0gdGltaW5nLT52X3N5bmNfd2lkdGggKyB0aW1pbmctPnZfYmFja19wb3JjaDsKLQlmcHMg PSB0aW1pbmctPnJlZnJlc2hfcmF0ZTsKLQotCXNsZWVwX21zID0gQ0VJTCgodl9ibGFuayAqIDEw MDApLCAodl90b3RhbCAqIGZwcykpICsgMTsKLQl1ZGVsYXkoc2xlZXBfbXMgKiAxMDAwKTsKLX0K LQotc3RhdGljIGludCBkc2lfbWVzc2FnZV90eChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAot CQkJICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2csCi0JCQkgIHUzMiBmbGFncykKLXsK LQlpbnQgcmMgPSAwLCByZXQgPSAwOwotCXN0cnVjdCBtaXBpX2RzaV9wYWNrZXQgcGFja2V0Owot CXN0cnVjdCBkc2lfY3RybF9jbWRfZG1hX2ZpZm9faW5mbyBjbWQ7Ci0Jc3RydWN0IGRzaV9jdHJs X2NtZF9kbWFfaW5mbyBjbWRfbWVtOwotCXUzMiBod19mbGFncyA9IDA7Ci0JdTMyIGxlbmd0aCA9 IDA7Ci0JdTggKmJ1ZmZlciA9IE5VTEw7Ci0JdTMyIGNudCA9IDA7Ci0JdTggKmNtZGJ1ZjsKLQot CXJjID0gbWlwaV9kc2lfY3JlYXRlX3BhY2tldCgmcGFja2V0LCBtc2cpOwotCWlmIChyYykgewot CQlwcl9lcnIoIkZhaWxlZCB0byBjcmVhdGUgbWVzc2FnZSBwYWNrZXQsIHJjPSVkXG4iLCByYyk7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKGZsYWdzICYgRFNJX0NUUkxfQ01EX0ZFVENIX01F TU9SWSkgewotCQlyYyA9IGRzaV9jdHJsX2NvcHlfYW5kX3BhZF9jbWQoZHNpX2N0cmwsCi0JCQkJ JnBhY2tldCwKLQkJCQkmYnVmZmVyLAotCQkJCSZsZW5ndGgpOwotCi0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJbJXNdIGZhaWxlZCB0byBjb3B5IG1lc3NhZ2UsIHJjPSVkXG4iLAotCQkJCQlkc2lf Y3RybC0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCWNtZF9tZW0ub2Zmc2V0 ID0gZHNpX2N0cmwtPmNtZF9idWZmZXJfaW92YTsKLQkJY21kX21lbS5sZW5ndGggPSBsZW5ndGg7 Ci0JCWNtZF9tZW0uZW5fYnJvYWRjYXN0ID0gKGZsYWdzICYgRFNJX0NUUkxfQ01EX0JST0FEQ0FT VCkgPwotCQkJdHJ1ZSA6IGZhbHNlOwotCQljbWRfbWVtLmlzX21hc3RlciA9IChmbGFncyAmIERT SV9DVFJMX0NNRF9CUk9BRENBU1RfTUFTVEVSKSA/Ci0JCQl0cnVlIDogZmFsc2U7Ci0JCWNtZF9t ZW0udXNlX2xwbSA9IChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1VTRV9MUE0pID8KLQkJCXRy dWUgOiBmYWxzZTsKLQotCQljbWRidWYgPSAodTggKikoZHNpX2N0cmwtPnZhZGRyKTsKLQkJZm9y IChjbnQgPSAwOyBjbnQgPCBsZW5ndGg7IGNudCsrKQotCQkJY21kYnVmW2NudF0gPSBidWZmZXJb Y250XTsKLQotCX0gZWxzZSBpZiAoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfRklGT19TVE9SRSkgewot CQlyYyA9IGRzaV9jdHJsX2NvcHlfYW5kX3BhZF9jbWQoZHNpX2N0cmwsCi0JCQkJCSAgICAgICAm cGFja2V0LAotCQkJCQkgICAgICAgJmJ1ZmZlciwKLQkJCQkJICAgICAgICZsZW5ndGgpOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gY29weSBtZXNzYWdlLCByYz0lZFxu IiwKLQkJCSAgICAgICBkc2lfY3RybC0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQot CQljbWQuY29tbWFuZCA9ICAodTMyICopYnVmZmVyOwotCQljbWQuc2l6ZSA9IGxlbmd0aDsKLQkJ Y21kLmVuX2Jyb2FkY2FzdCA9IChmbGFncyAmIERTSV9DVFJMX0NNRF9CUk9BRENBU1QpID8KLQkJ CQkgICAgIHRydWUgOiBmYWxzZTsKLQkJY21kLmlzX21hc3RlciA9IChmbGFncyAmIERTSV9DVFJM X0NNRF9CUk9BRENBU1RfTUFTVEVSKSA/Ci0JCQkJICB0cnVlIDogZmFsc2U7Ci0JCWNtZC51c2Vf bHBtID0gKG1zZy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfVVNFX0xQTSkgPwotCQkJCSAgdHJ1ZSA6 IGZhbHNlOwotCX0KLQotCWh3X2ZsYWdzIHw9IChmbGFncyAmIERTSV9DVFJMX0NNRF9ERUZFUl9U UklHR0VSKSA/Ci0JCQlEU0lfQ1RSTF9IV19DTURfV0FJVF9GT1JfVFJJR0dFUiA6IDA7Ci0KLQlp ZiAoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfREVGRVJfVFJJR0dFUikgewotCQlpZiAoZmxhZ3MgJiBE U0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZKSB7Ci0JCQlkc2lfY3RybC0+aHcub3BzLmtpY2tvZmZf Y29tbWFuZCgmZHNpX2N0cmwtPmh3LAotCQkJCQkJCSZjbWRfbWVtLAotCQkJCQkJCWh3X2ZsYWdz KTsKLQkJfSBlbHNlIGlmIChmbGFncyAmIERTSV9DVFJMX0NNRF9GSUZPX1NUT1JFKSB7Ci0JCQlk c2lfY3RybC0+aHcub3BzLmtpY2tvZmZfZmlmb19jb21tYW5kKCZkc2lfY3RybC0+aHcsCi0JCQkJ CQkJICAgICAgJmNtZCwKLQkJCQkJCQkgICAgICBod19mbGFncyk7Ci0JCX0KLQl9Ci0KLQlpZiAo IShmbGFncyAmIERTSV9DVFJMX0NNRF9ERUZFUl9UUklHR0VSKSkgewotCQlkc2lfY3RybF93YWl0 X2Zvcl92aWRlb19kb25lKGRzaV9jdHJsKTsKLQkJZHNpX2N0cmxfZW5hYmxlX3N0YXR1c19pbnRl cnJ1cHQoZHNpX2N0cmwsCi0JCQkJCURTSV9TSU5UX0NNRF9NT0RFX0RNQV9ET05FLCBOVUxMKTsK LQkJcmVpbml0X2NvbXBsZXRpb24oJmRzaV9jdHJsLT5pcnFfaW5mby5jbWRfZG1hX2RvbmUpOwot Ci0JCWlmIChmbGFncyAmIERTSV9DVFJMX0NNRF9GRVRDSF9NRU1PUlkpIHsKLQkJCWRzaV9jdHJs LT5ody5vcHMua2lja29mZl9jb21tYW5kKCZkc2lfY3RybC0+aHcsCi0JCQkJCQkgICAgICAmY21k X21lbSwKLQkJCQkJCSAgICAgIGh3X2ZsYWdzKTsKLQkJfSBlbHNlIGlmIChmbGFncyAmIERTSV9D VFJMX0NNRF9GSUZPX1NUT1JFKSB7Ci0JCQlkc2lfY3RybC0+aHcub3BzLmtpY2tvZmZfZmlmb19j b21tYW5kKCZkc2lfY3RybC0+aHcsCi0JCQkJCQkJICAgICAgJmNtZCwKLQkJCQkJCQkgICAgICBo d19mbGFncyk7Ci0JCX0KLQotCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoCi0J CQkJJmRzaV9jdHJsLT5pcnFfaW5mby5jbWRfZG1hX2RvbmUsCi0JCQkJbXNlY3NfdG9famlmZmll cyhEU0lfQ1RSTF9UWF9UT19NUykpOwotCi0JCWlmIChyZXQgPT0gMCkgewotCQkJdTMyIHN0YXR1 cyA9IDA7Ci0JCQl1MzIgbWFzayA9IERTSV9DTURfTU9ERV9ETUFfRE9ORTsKLQotCQkJaWYgKHN0 YXR1cyAmIG1hc2spIHsKLQkJCQlzdGF0dXMgfD0gKERTSV9DTURfTU9ERV9ETUFfRE9ORSB8Ci0J CQkJCQlEU0lfQlRBX0RPTkUpOwotCQkJCWRzaV9jdHJsLT5ody5vcHMuY2xlYXJfaW50ZXJydXB0 X3N0YXR1cygKLQkJCQkJCQkJJmRzaV9jdHJsLT5odywKLQkJCQkJCQkJc3RhdHVzKTsKLQkJCQlk c2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQoZHNpX2N0cmwsCi0JCQkJCQlEU0lfU0lO VF9DTURfTU9ERV9ETUFfRE9ORSk7Ci0JCQkJY29tcGxldGVfYWxsKCZkc2lfY3RybC0+aXJxX2lu Zm8uY21kX2RtYV9kb25lKTsKLQkJCQlwcl93YXJuKCJkbWFfdHggZG9uZSBidXQgaXJxIG5vdCB0 cmlnZ2VyZWRcbiIpOwotCQkJfSBlbHNlIHsKLQkJCQlyYyA9IC1FVElNRURPVVQ7Ci0JCQkJZHNp X2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJydXB0KGRzaV9jdHJsLAotCQkJCQkJRFNJX1NJTlRf Q01EX01PREVfRE1BX0RPTkUpOwotCQkJCXByX2VycigiW0RTSV8lZF1Db21tYW5kIHRyYW5zZmVy IGZhaWxlZFxuIiwKLQkJCQkJCWRzaV9jdHJsLT5jZWxsX2luZGV4KTsKLQkJCX0KLQkJfQotCi0J CWRzaV9jdHJsLT5ody5vcHMucmVzZXRfY21kX2ZpZm8oJmRzaV9jdHJsLT5odyk7Ci0JfQotZXJy b3I6Ci0JaWYgKGJ1ZmZlcikKLQkJZGV2bV9rZnJlZSgmZHNpX2N0cmwtPnBkZXYtPmRldiwgYnVm ZmVyKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3NldF9tYXhfcmV0dXJuX3Np emUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgbWlwaV9k c2lfbXNnICpyeF9tc2csCi0JCQkJICAgdTMyIHNpemUpCi17Ci0JaW50IHJjID0gMDsKLQl1OCB0 eFsyXSA9IHsgKHU4KShzaXplICYgMHhGRiksICh1OCkoc2l6ZSA+PiA4KSB9OwotCXN0cnVjdCBt aXBpX2RzaV9tc2cgbXNnID0gewotCQkuY2hhbm5lbCA9IHJ4X21zZy0+Y2hhbm5lbCwKLQkJLnR5 cGUgPSBNSVBJX0RTSV9TRVRfTUFYSU1VTV9SRVRVUk5fUEFDS0VUX1NJWkUsCi0JCS50eF9sZW4g PSAyLAotCQkudHhfYnVmID0gdHgsCi0JfTsKLQotCXJjID0gZHNpX21lc3NhZ2VfdHgoZHNpX2N0 cmwsICZtc2csIDB4MCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBzZW5kIG1heCBy ZXR1cm4gc2l6ZSBwYWNrZXQsIHJjPSVkXG4iLCByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0 YXRpYyBpbnQgZHNpX21lc3NhZ2Vfcngoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCSAg Y29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnLAotCQkJICB1MzIgZmxhZ3MpCi17Ci0JaW50 IHJjID0gMDsKLQl1MzIgcmRfcGt0X3NpemU7Ci0JdTMyIHRvdGFsX3JlYWRfbGVuOwotCXUzMiBi eXRlc19yZWFkID0gMCwgdG90X2J5dGVzX3JlYWQgPSAwOwotCXUzMiBjdXJyZW50X3JlYWRfbGVu OwotCWJvb2wgc2hvcnRfcmVzcCA9IGZhbHNlOwotCWJvb2wgcmVhZF9kb25lID0gZmFsc2U7Ci0K LQlpZiAobXNnLT5yeF9sZW4gPD0gMikgewotCQlzaG9ydF9yZXNwID0gdHJ1ZTsKLQkJcmRfcGt0 X3NpemUgPSBtc2ctPnJ4X2xlbjsKLQkJdG90YWxfcmVhZF9sZW4gPSA0OwotCX0gZWxzZSB7Ci0J CXNob3J0X3Jlc3AgPSBmYWxzZTsKLQkJY3VycmVudF9yZWFkX2xlbiA9IDEwOwotCQlpZiAobXNn LT5yeF9sZW4gPCBjdXJyZW50X3JlYWRfbGVuKQotCQkJcmRfcGt0X3NpemUgPSBtc2ctPnJ4X2xl bjsKLQkJZWxzZQotCQkJcmRfcGt0X3NpemUgPSBjdXJyZW50X3JlYWRfbGVuOwotCi0JCXRvdGFs X3JlYWRfbGVuID0gY3VycmVudF9yZWFkX2xlbiArIDY7Ci0JfQotCi0Jd2hpbGUgKCFyZWFkX2Rv bmUpIHsKLQkJcmMgPSBkc2lfc2V0X21heF9yZXR1cm5fc2l6ZShkc2lfY3RybCwgbXNnLCByZF9w a3Rfc2l6ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJGYWlsZWQgdG8gc2V0IG1heCByZXR1 cm4gcGFja2V0IHNpemUsIHJjPSVkXG4iLAotCQkJICAgICAgIHJjKTsKLQkJCWdvdG8gZXJyb3I7 Ci0JCX0KLQotCQlyYyA9IGRzaV9tZXNzYWdlX3R4KGRzaV9jdHJsLCBtc2csIGZsYWdzKTsKLQkJ aWYgKHJjKSB7Ci0JCQlwcl9lcnIoIk1lc3NhZ2UgdHJhbnNtaXNzaW9uIGZhaWxlZCwgcmM9JWRc biIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCi0JCXRvdF9ieXRlc19yZWFkICs9IGJ5 dGVzX3JlYWQ7Ci0JCWlmIChzaG9ydF9yZXNwKQotCQkJcmVhZF9kb25lID0gdHJ1ZTsKLQkJZWxz ZSBpZiAobXNnLT5yeF9sZW4gPD0gdG90X2J5dGVzX3JlYWQpCi0JCQlyZWFkX2RvbmUgPSB0cnVl OwotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotCi1zdGF0aWMgaW50IGRzaV9lbmFibGVf dWxwcyhzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCWludCByYyA9IDA7Ci0JdTMyIGxh bmVzID0gMDsKLQl1MzIgdWxwc19sYW5lczsKLQotCWlmIChkc2lfY3RybC0+aG9zdF9jb25maWcu cGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpCi0JCWxhbmVzID0gZHNpX2N0cmwtPmhvc3Rf Y29uZmlnLmNvbW1vbl9jb25maWcuZGF0YV9sYW5lczsKLQotCXJjID0gZHNpX2N0cmwtPmh3Lm9w cy53YWl0X2Zvcl9sYW5lX2lkbGUoJmRzaV9jdHJsLT5odywgbGFuZXMpOwotCWlmIChyYykgewot CQlwcl9lcnIoImxhbmVzIG5vdCBlbnRlcmluZyBpZGxlLCBza2lwIFVMUFNcbiIpOwotCQlyZXR1 cm4gcmM7Ci0JfQotCi0JaWYgKCFkc2lfY3RybC0+aHcub3BzLnVscHNfb3BzLnVscHNfcmVxdWVz dCB8fAotCQkJIWRzaV9jdHJsLT5ody5vcHMudWxwc19vcHMudWxwc19leGl0KSB7Ci0JCXByX2Rl YnVnKCJEU0kgY29udHJvbGxlciBVTFBTIG9wcyBub3QgcHJlc2VudFxuIik7Ci0JCXJldHVybiAw OwotCX0KLQotCWxhbmVzIHw9IERTSV9DTE9DS19MQU5FOwotCWRzaV9jdHJsLT5ody5vcHMudWxw c19vcHMudWxwc19yZXF1ZXN0KCZkc2lfY3RybC0+aHcsIGxhbmVzKTsKLQotCXVscHNfbGFuZXMg PSBkc2lfY3RybC0+aHcub3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91bHBzKCZkc2lfY3RybC0+ aHcpOwotCi0JaWYgKChsYW5lcyAmIHVscHNfbGFuZXMpICE9IGxhbmVzKSB7Ci0JCXByX2Vycigi RmFpbGVkIHRvIGVudGVyIFVMUFMsIHJlcXVlc3Q9MHgleCwgYWN0dWFsPTB4JXhcbiIsCi0JCSAg ICAgICBsYW5lcywgdWxwc19sYW5lcyk7Ci0JCXJjID0gLUVJTzsKLQl9Ci0KLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc2FibGVfdWxwcyhzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9j dHJsKQotewotCWludCByYyA9IDA7Ci0JdTMyIHVscHNfbGFuZXMsIGxhbmVzID0gMDsKLQotCWRz aV9jdHJsLT5ody5vcHMuY2xlYXJfcGh5MF9sbl9lcnIoJmRzaV9jdHJsLT5odyk7Ci0KLQlpZiAo IWRzaV9jdHJsLT5ody5vcHMudWxwc19vcHMudWxwc19yZXF1ZXN0IHx8Ci0JCQkhZHNpX2N0cmwt Pmh3Lm9wcy51bHBzX29wcy51bHBzX2V4aXQpIHsKLQkJcHJfZGVidWcoIkRTSSBjb250cm9sbGVy IFVMUFMgb3BzIG5vdCBwcmVzZW50XG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGRzaV9j dHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9tb2RlID09IERTSV9PUF9DTURfTU9ERSkKLQkJbGFuZXMg PSBkc2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZy5kYXRhX2xhbmVzOwotCi0JbGFu ZXMgfD0gRFNJX0NMT0NLX0xBTkU7Ci0KLQl1bHBzX2xhbmVzID0gZHNpX2N0cmwtPmh3Lm9wcy51 bHBzX29wcy5nZXRfbGFuZXNfaW5fdWxwcygmZHNpX2N0cmwtPmh3KTsKLQotCWlmICgobGFuZXMg JiB1bHBzX2xhbmVzKSAhPSBsYW5lcykKLQkJcHJfZXJyKCJNaXNtYXRjaCBiZXR3ZWVuIGxhbmVz IGluIFVMUFNcbiIpOwotCi0JbGFuZXMgJj0gdWxwc19sYW5lczsKLQotCWRzaV9jdHJsLT5ody5v cHMudWxwc19vcHMudWxwc19leGl0KCZkc2lfY3RybC0+aHcsIGxhbmVzKTsKLQotCXVscHNfbGFu ZXMgPSBkc2lfY3RybC0+aHcub3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91bHBzKCZkc2lfY3Ry bC0+aHcpOwotCWlmICh1bHBzX2xhbmVzICYgbGFuZXMpIHsKLQkJcHJfZXJyKCJMYW5lcyAoMHgl eCkgc3R1Y2sgaW4gVUxQU1xuIiwgdWxwc19sYW5lcyk7Ci0JCXJjID0gLUVJTzsKLQl9Ci0KLQly ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfZHJ2X3N0YXRlX2luaXQoc3RydWN0 IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCWJvb2wgc3BsYXNoX2VuYWJs ZWQgPSBmYWxzZTsKLQlzdHJ1Y3QgZHNpX2N0cmxfc3RhdGVfaW5mbyAqc3RhdGUgPSAmZHNpX2N0 cmwtPmN1cnJlbnRfc3RhdGU7Ci0KLQlpZiAoIXNwbGFzaF9lbmFibGVkKSB7Ci0JCXN0YXRlLT5w b3dlcl9zdGF0ZSA9IERTSV9DVFJMX1BPV0VSX1ZSRUdfT0ZGOwotCQlzdGF0ZS0+Y21kX2VuZ2lu ZV9zdGF0ZSA9IERTSV9DVFJMX0VOR0lORV9PRkY7Ci0JCXN0YXRlLT52aWRfZW5naW5lX3N0YXRl ID0gRFNJX0NUUkxfRU5HSU5FX09GRjsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX2N0cmxfYnVmZmVyX2RlaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewot CXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSA9IE5VTEw7Ci0KLQlpZiAoZHNp X2N0cmwtPnR4X2NtZF9idWYpIHsKLQkJYXNwYWNlID0gZHNpX2N0cmxfZ2V0X2FzcGFjZShkc2lf Y3RybCwKLQkJCQlNU01fU01NVV9ET01BSU5fVU5TRUNVUkUpOwotCQlpZiAoIWFzcGFjZSkgewot CQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGFkZHJlc3Mgc3BhY2VcbiIpOwotCQkJcmV0dXJuIC1F Tk9NRU07Ci0JCX0KLQotCQltc21fZ2VtX3B1dF9pb3ZhKGRzaV9jdHJsLT50eF9jbWRfYnVmLCBh c3BhY2UpOwotCi0JCW11dGV4X2xvY2soJmRzaV9jdHJsLT5kcm1fZGV2LT5zdHJ1Y3RfbXV0ZXgp OwotCQltc21fZ2VtX2ZyZWVfb2JqZWN0KGRzaV9jdHJsLT50eF9jbWRfYnVmKTsKLQkJbXV0ZXhf dW5sb2NrKCZkc2lfY3RybC0+ZHJtX2Rldi0+c3RydWN0X211dGV4KTsKLQkJZHNpX2N0cmwtPnR4 X2NtZF9idWYgPSBOVUxMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgZHNpX2N0cmxfYnVm ZmVyX2luaXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCXU2 NCBpb3ZhID0gMDsKLQlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2UgPSBOVUxM OwotCi0JYXNwYWNlID0gZHNpX2N0cmxfZ2V0X2FzcGFjZShkc2lfY3RybCwgTVNNX1NNTVVfRE9N QUlOX1VOU0VDVVJFKTsKLQlpZiAoIWFzcGFjZSkgewotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQg YWRkcmVzcyBzcGFjZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWRzaV9jdHJsLT50 eF9jbWRfYnVmID0gbXNtX2dlbV9uZXcoZHNpX2N0cmwtPmRybV9kZXYsCi0JCQkJCSAgIFNaXzRL LAotCQkJCQkgICBNU01fQk9fVU5DQUNIRUQpOwotCi0JaWYgKElTX0VSUihkc2lfY3RybC0+dHhf Y21kX2J1ZikpIHsKLQkJcmMgPSBQVFJfRVJSKGRzaV9jdHJsLT50eF9jbWRfYnVmKTsKLQkJcHJf ZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgZ2VtLCByYz0lZFxuIiwgcmMpOwotCQlkc2lfY3RybC0+ dHhfY21kX2J1ZiA9IE5VTEw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZHNpX2N0cmwtPmNtZF9i dWZmZXJfc2l6ZSA9IFNaXzRLOwotCi0JcmMgPSBtc21fZ2VtX2dldF9pb3ZhKGRzaV9jdHJsLT50 eF9jbWRfYnVmLCBhc3BhY2UsICZpb3ZhKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQg dG8gZ2V0IGlvdmEsIHJjPSVkXG4iLCByYyk7Ci0JCSh2b2lkKWRzaV9jdHJsX2J1ZmZlcl9kZWlu aXQoZHNpX2N0cmwpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChpb3ZhICYgMHgwNykgewot CQlwcl9lcnIoIlR4IGNvbW1hbmQgYnVmZmVyIGlzIG5vdCA4IGJ5dGUgYWxpZ25lZFxuIik7Ci0J CXJjID0gLUVOT1RTVVBQOwotCQkodm9pZClkc2lfY3RybF9idWZmZXJfZGVpbml0KGRzaV9jdHJs KTsKLQkJZ290byBlcnJvcjsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX2VuYWJsZV9pb19jbGFtcChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQlib29s IGVuYWJsZSwgYm9vbCB1bHBzX2VuYWJsZWQpCi17Ci0JdTMyIGxhbmVzID0gMDsKLQotCWlmIChk c2lfY3RybC0+aG9zdF9jb25maWcucGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpCi0JCWxh bmVzID0gZHNpX2N0cmwtPmhvc3RfY29uZmlnLmNvbW1vbl9jb25maWcuZGF0YV9sYW5lczsKLQot CWxhbmVzIHw9IERTSV9DTE9DS19MQU5FOwotCi0JaWYgKGVuYWJsZSkKLQkJZHNpX2N0cmwtPmh3 Lm9wcy5jbGFtcF9lbmFibGUoJmRzaV9jdHJsLT5odywKLQkJCWxhbmVzLCB1bHBzX2VuYWJsZWQp OwotCWVsc2UKLQkJZHNpX2N0cmwtPmh3Lm9wcy5jbGFtcF9kaXNhYmxlKCZkc2lfY3RybC0+aHcs Ci0JCQlsYW5lcywgdWxwc19lbmFibGVkKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IGRzaV9jdHJsX2R0c19wYXJzZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCSAgc3Ry dWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCXUzMiBpbmRleCA9IDA7Ci0JaW50IHJjID0g MDsKLQotCWlmICghZHNpX2N0cmwgfHwgIW9mX25vZGUpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGRz aV9jdHJsOiVkIG9yIG9mX25vZGU6JWRcbiIsCi0JCQkJCWRzaV9jdHJsICE9IE5VTEwsIG9mX25v ZGUgIT0gTlVMTCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlf cmVhZF91MzIob2Zfbm9kZSwgImNlbGwtaW5kZXgiLCAmaW5kZXgpOwotCWlmIChyYykgewotCQlw cl9kZWJ1ZygiY2VsbCBpbmRleCBub3Qgc2V0LCBkZWZhdWx0IHRvIDBcbiIpOwotCQlpbmRleCA9 IDA7Ci0JfQotCi0JZHNpX2N0cmwtPmNlbGxfaW5kZXggPSBpbmRleDsKLQlkc2lfY3RybC0+bmFt ZSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCAibGFiZWwiLCBOVUxMKTsKLQlpZiAoIWRzaV9j dHJsLT5uYW1lKQotCQlkc2lfY3RybC0+bmFtZSA9IERTSV9DVFJMX0RFRkFVTFRfTEFCRUw7Ci0K LQlkc2lfY3RybC0+cGh5X2lzb2xhdGlvbl9lbmFibGVkID0gb2ZfcHJvcGVydHlfcmVhZF9ib29s KG9mX25vZGUsCi0JCQkJICAgICJxY29tLGRzaS1waHktaXNvbGF0aW9uLWVuYWJsZWQiKTsKLQot CXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX2Rldl9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmw7Ci0Jc3Ry dWN0IGRzaV9jdHJsX2xpc3RfaXRlbSAqaXRlbTsKLQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk ICppZDsKLQllbnVtIGRzaV9jdHJsX3ZlcnNpb24gdmVyc2lvbjsKLQlpbnQgcmMgPSAwOwotCi0J aWQgPSBvZl9tYXRjaF9ub2RlKG1zbV9kc2lfb2ZfbWF0Y2gsIHBkZXYtPmRldi5vZl9ub2RlKTsK LQlpZiAoIWlkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXZlcnNpb24gPSAqKGVudW0gZHNpX2N0 cmxfdmVyc2lvbiAqKWlkLT5kYXRhOwotCi0JaXRlbSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2 LCBzaXplb2YoKml0ZW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWl0ZW0pCi0JCXJldHVybiAtRU5P TUVNOwotCi0JZHNpX2N0cmwgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkc2lf Y3RybCksIEdGUF9LRVJORUwpOwotCWlmICghZHNpX2N0cmwpCi0JCXJldHVybiAtRU5PTUVNOwot Ci0JZHNpX2N0cmwtPnZlcnNpb24gPSB2ZXJzaW9uOwotCWRzaV9jdHJsLT5pcnFfaW5mby5pcnFf bnVtID0gLTE7Ci0JZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X21hc2sgPSAweDA7Ci0KLQlz cGluX2xvY2tfaW5pdCgmZHNpX2N0cmwtPmlycV9pbmZvLmlycV9sb2NrKTsKLQotCXJjID0gZHNp X2N0cmxfZHRzX3BhcnNlKGRzaV9jdHJsLCBwZGV2LT5kZXYub2Zfbm9kZSk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiY3RybDolZCBkdHMgcGFyc2UgZmFpbGVkLCByYyA9ICVkXG4iLAotCQkJCQkJ ZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBmYWlsOwotCX0KLQotCXJjID0gZHNp X2N0cmxfaW5pdF9yZWdtYXAocGRldiwgZHNpX2N0cmwpOwotCWlmIChyYykgewotCQlwcl9lcnIo IkZhaWxlZCB0byBwYXJzZSByZWdpc3RlciBpbmZvcm1hdGlvbiwgcmMgPSAlZFxuIiwgcmMpOwot CQlnb3RvIGZhaWw7Ci0JfQotCi0JcmMgPSBkc2lfY3RybF9jbG9ja3NfaW5pdChwZGV2LCBkc2lf Y3RybCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHBhcnNlIGNsb2NrIGluZm9y bWF0aW9uLCByYyA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlyYyA9IGRzaV9j dHJsX3N1cHBsaWVzX2luaXQocGRldiwgZHNpX2N0cmwpOwotCWlmIChyYykgewotCQlwcl9lcnIo IkZhaWxlZCB0byBwYXJzZSB2b2x0YWdlIHN1cHBsaWVzLCByYyA9ICVkXG4iLCByYyk7Ci0JCWdv dG8gZmFpbF9jbGtzOwotCX0KLQotCXJjID0gZHNpX2NhdGFsb2dfY3RybF9zZXR1cCgmZHNpX2N0 cmwtPmh3LCBkc2lfY3RybC0+dmVyc2lvbiwKLQkJICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBk c2lfY3RybC0+cGh5X2lzb2xhdGlvbl9lbmFibGVkKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJD YXRhbG9nIGRvZXMgbm90IHN1cHBvcnQgdmVyc2lvbiAoJWQpXG4iLAotCQkgICAgICAgZHNpX2N0 cmwtPnZlcnNpb24pOwotCQlnb3RvIGZhaWxfc3VwcGxpZXM7Ci0JfQotCi0JcmMgPSBkc2lfY3Ry bF9heGlfYnVzX2NsaWVudF9pbml0KHBkZXYsIGRzaV9jdHJsKTsKLQlpZiAocmMpCi0JCXByX2Rl YnVnKCJmYWlsZWQgdG8gaW5pdCBheGkgYnVzIGNsaWVudCwgcmMgPSAlZFxuIiwgcmMpOwotCi0J aXRlbS0+Y3RybCA9IGRzaV9jdHJsOwotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmxfbGlzdF9sb2Nr KTsKLQlsaXN0X2FkZCgmaXRlbS0+bGlzdCwgJmRzaV9jdHJsX2xpc3QpOwotCW11dGV4X3VubG9j aygmZHNpX2N0cmxfbGlzdF9sb2NrKTsKLQotCW11dGV4X2luaXQoJmRzaV9jdHJsLT5jdHJsX2xv Y2spOwotCi0JZHNpX2N0cmwtPnBkZXYgPSBwZGV2OwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIGRzaV9jdHJsKTsKLQlwcl9pbmZvKCJQcm9iZSBzdWNjZXNzZnVsIGZvciAlc1xuIiwgZHNp X2N0cmwtPm5hbWUpOwotCi0JcmV0dXJuIDA7Ci0KLWZhaWxfc3VwcGxpZXM6Ci0JKHZvaWQpZHNp X2N0cmxfc3VwcGxpZXNfZGVpbml0KGRzaV9jdHJsKTsKLWZhaWxfY2xrczoKLQkodm9pZClkc2lf Y3RybF9jbG9ja3NfZGVpbml0KGRzaV9jdHJsKTsKLWZhaWw6Ci0JcmV0dXJuIHJjOwotfQotCi1z dGF0aWMgaW50IGRzaV9jdHJsX2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmw7Ci0Jc3RydWN0 IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwotCi0JZHNpX2N0cmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0 YShwZGV2KTsKLQotCW11dGV4X2xvY2soJmRzaV9jdHJsX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3Jf ZWFjaF9zYWZlKHBvcywgdG1wLCAmZHNpX2N0cmxfbGlzdCkgewotCQlzdHJ1Y3QgZHNpX2N0cmxf bGlzdF9pdGVtICpuID0gbGlzdF9lbnRyeShwb3MsCi0JCQkJCQkgIHN0cnVjdCBkc2lfY3RybF9s aXN0X2l0ZW0sCi0JCQkJCQkgIGxpc3QpOwotCQlpZiAobi0+Y3RybCA9PSBkc2lfY3RybCkgewot CQkJbGlzdF9kZWwoJm4tPmxpc3QpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2Nr KCZkc2lfY3RybF9saXN0X2xvY2spOwotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9j ayk7Ci0JcmMgPSBkc2lfY3RybF9heGlfYnVzX2NsaWVudF9kZWluaXQoZHNpX2N0cmwpOwotCWlm IChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZGVpbml0aWFsaXplIGF4aSBidXMgY2xpZW50LCBy YyA9ICVkXG4iLCByYyk7Ci0KLQlyYyA9IGRzaV9jdHJsX3N1cHBsaWVzX2RlaW5pdChkc2lfY3Ry bCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBkZWluaXRpYWxpemUgdm9sdGFnZSBz dXBwbGllcywgcmM9JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX2N0cmxfY2xvY2tzX2RlaW5pdChk c2lfY3RybCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBkZWluaXRpYWxpemUgY2xv Y2tzLCByYz0lZFxuIiwgcmMpOwotCi0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2Nr KTsKLQotCW11dGV4X2Rlc3Ryb3koJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCWRldm1fa2ZyZWUo JnBkZXYtPmRldiwgZHNpX2N0cmwpOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVM TCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRzaV9j dHJsX2RyaXZlciA9IHsKLQkucHJvYmUgPSBkc2lfY3RybF9kZXZfcHJvYmUsCi0JLnJlbW92ZSA9 IGRzaV9jdHJsX2Rldl9yZW1vdmUsCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiZHJtX2RzaV9j dHJsIiwKLQkJLm9mX21hdGNoX3RhYmxlID0gbXNtX2RzaV9vZl9tYXRjaCwKLQl9LAotfTsKLQot I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQotCi12b2lkIGRzaV9jdHJsX2RlYnVnX2R1bXAo dm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7Ci0Jc3RydWN0IGRzaV9jdHJs ICpjdHJsID0gTlVMTDsKLQotCW11dGV4X2xvY2soJmRzaV9jdHJsX2xpc3RfbG9jayk7Ci0JbGlz dF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCAmZHNpX2N0cmxfbGlzdCkgewotCQlzdHJ1Y3QgZHNp X2N0cmxfbGlzdF9pdGVtICpuOwotCi0JCW4gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGRzaV9j dHJsX2xpc3RfaXRlbSwgbGlzdCk7Ci0JCWN0cmwgPSBuLT5jdHJsOwotCQlwcl9lcnIoImRzaSBj dHJsOiVkXG4iLCBjdHJsLT5jZWxsX2luZGV4KTsKLQkJY3RybC0+aHcub3BzLmRlYnVnX2J1cygm Y3RybC0+aHcpOwotCX0KLQltdXRleF91bmxvY2soJmRzaV9jdHJsX2xpc3RfbG9jayk7Ci19Ci0K LSNlbmRpZgotLyoqCi0gKiBkc2lfY3RybF9nZXQoKSAtIGdldCBhIGRzaV9jdHJsIGhhbmRsZSBm cm9tIGFuIG9mX25vZGUKLSAqIEBvZl9ub2RlOiAgICBvZl9ub2RlIG9mIHRoZSBEU0kgY29udHJv bGxlci4KLSAqCi0gKiBHZXRzIHRoZSBEU0kgY29udHJvbGxlciBoYW5kbGUgZm9yIHRoZSBjb3Jy ZXNwb25kaW5nIG9mX25vZGUuIFRoZSByZWYgY291bnQKLSAqIGlzIGluY3JlbWVudGVkIHRvIG9u ZSBhbmQgYWxsIHN1YnNlcXVlbnQgZ2V0cyB3aWxsIGZhaWwgdW50aWwgdGhlIG9yaWdpbmFsCi0g KiBjbGllbnRzIGNhbGxzIGEgcHV0LgotICoKLSAqIFJldHVybjogRFNJIENvbnRyb2xsZXIgaGFu ZGxlLgotICovCi1zdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsX2dldChzdHJ1Y3QgZGV2aWNlX25v ZGUgKm9mX25vZGUpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwotCXN0cnVjdCBk c2lfY3RybCAqY3RybCA9IE5VTEw7Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybF9saXN0X2xvY2sp OwotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmRzaV9jdHJsX2xpc3QpIHsKLQkJc3Ry dWN0IGRzaV9jdHJsX2xpc3RfaXRlbSAqbjsKLQotCQluID0gbGlzdF9lbnRyeShwb3MsIHN0cnVj dCBkc2lfY3RybF9saXN0X2l0ZW0sIGxpc3QpOwotCQlpZiAobi0+Y3RybC0+cGRldi0+ZGV2Lm9m X25vZGUgPT0gb2Zfbm9kZSkgewotCQkJY3RybCA9IG4tPmN0cmw7Ci0JCQlicmVhazsKLQkJfQot CX0KLQltdXRleF91bmxvY2soJmRzaV9jdHJsX2xpc3RfbG9jayk7Ci0KLQlpZiAoIWN0cmwpIHsK LQkJcHJfZXJyKCJEZXZpY2Ugd2l0aCBvZiBub2RlIG5vdCBmb3VuZFxuIik7Ci0JCWN0cmwgPSBF UlJfUFRSKC1FUFJPQkVfREVGRVIpOwotCQlyZXR1cm4gY3RybDsKLQl9Ci0KLQltdXRleF9sb2Nr KCZjdHJsLT5jdHJsX2xvY2spOwotCWlmIChjdHJsLT5yZWZjb3VudCA9PSAxKSB7Ci0JCXByX2Vy cigiWyVzXSBEZXZpY2UgaW4gdXNlXG4iLCBjdHJsLT5uYW1lKTsKLQkJY3RybCA9IEVSUl9QVFIo LUVCVVNZKTsKLQl9IGVsc2UgewotCQljdHJsLT5yZWZjb3VudCsrOwotCX0KLQltdXRleF91bmxv Y2soJmN0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIGN0cmw7Ci19Ci0KLS8qKgotICogZHNpX2N0 cmxfcHV0KCkgLSByZWxlYXNlcyBhIGRzaSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBkc2lfY3Ry bDogICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIFJlbGVhc2VzIHRoZSBEU0kg Y29udHJvbGxlci4gRHJpdmVyIHdpbGwgY2xlYW4gdXAgYWxsIHJlc291cmNlcyBhbmQgcHV0cyBi YWNrCi0gKiB0aGUgRFNJIGNvbnRyb2xsZXIgaW50byByZXNldCBzdGF0ZS4KLSAqLwotdm9pZCBk c2lfY3RybF9wdXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQltdXRleF9sb2NrKCZk c2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCWlmIChkc2lfY3RybC0+cmVmY291bnQgPT0gMCkKLQkJ cHJfZXJyKCJVbmJhbGFuY2VkICVzIGNhbGxcbiIsIF9fZnVuY19fKTsKLQllbHNlCi0JCWRzaV9j dHJsLT5yZWZjb3VudC0tOwotCi0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsK LX0KLQotLyoqCi0gKiBkc2lfY3RybF9kcnZfaW5pdCgpIC0gaW5pdGlhbGl6ZSBkc2kgY29udHJv bGxlciBkcml2ZXIuCi0gKiBAZHNpX2N0cmw6ICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgot ICogQHBhcmVudDogICAgICAgIFBhcmVudCBkaXJlY3RvcnkgZm9yIGRlYnVnIGZzLgotICoKLSAq IEluaXRpYWxpemVzIERTSSBjb250cm9sbGVyIGRyaXZlci4gRHJpdmVyIHNob3VsZCBiZSBpbml0 aWFsaXplZCBhZnRlcgotICogZHNpX2N0cmxfZ2V0KCkgc3VjY2VlZHMuCi0gKgotICogUmV0dXJu OiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfZHJ2X2luaXQoc3RydWN0IGRzaV9jdHJs ICpkc2lfY3RybCwgc3RydWN0IGRlbnRyeSAqcGFyZW50KQotewotCWludCByYyA9IDA7Ci0KLQlp ZiAoIWRzaV9jdHJsIHx8ICFwYXJlbnQpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xv Y2spOwotCXJjID0gZHNpX2N0cmxfZHJ2X3N0YXRlX2luaXQoZHNpX2N0cmwpOwotCWlmIChyYykg ewotCQlwcl9lcnIoIkZhaWxlZCB0byBpbml0aWFsaXplIGRyaXZlciBzdGF0ZSwgcmM9JWRcbiIs IHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9jdHJsX2RlYnVnZnNfaW5pdChk c2lfY3RybCwgcGFyZW50KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBmYWlsZWQg dG8gaW5pdCBkZWJ1ZyBmcywgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRl eCwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkc2lf Y3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfZHJ2 X2RlaW5pdCgpIC0gZGUtaW5pdGlhbGl6ZXMgZHNpIGNvbnRyb2xsZXIgZHJpdmVyCi0gKiBAZHNp X2N0cmw6ICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIFJlbGVhc2VzIGFsbCBy ZXNvdXJjZXMgYWNxdWlyZWQgYnkgZHNpX2N0cmxfZHJ2X2luaXQoKS4KLSAqCi0gKiBSZXR1cm46 IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9kcnZfZGVpbml0KHN0cnVjdCBkc2lfY3Ry bCAqZHNpX2N0cmwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwpIHsKLQkJcHJf ZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4 X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JcmMgPSBkc2lfY3RybF9kZWJ1Z2ZzX2Rl aW5pdChkc2lfY3RybCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byByZWxlYXNlIGRl YnVnZnMgcm9vdCwgcmM9JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX2N0cmxfYnVmZmVyX2RlaW5p dChkc2lfY3RybCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIkZhaWxlZCB0byBmcmVlIGNtZCBidWZm ZXJzLCByYz0lZFxuIiwgcmMpOwotCi0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2Nr KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfY3RybF9jbGtfY2JfcmVnaXN0ZXIoc3RydWN0 IGRzaV9jdHJsICpkc2lfY3RybCwKLQlzdHJ1Y3QgY2xrX2N0cmxfY2IgKmNsa19jYikKLXsKLQlp ZiAoIWRzaV9jdHJsIHx8ICFjbGtfY2IpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRzaV9jdHJsLT5jbGtfY2IucHJpdiA9IGNsa19j Yi0+cHJpdjsKLQlkc2lfY3RybC0+Y2xrX2NiLmRzaV9jbGtfY2IgPSBjbGtfY2ItPmRzaV9jbGtf Y2I7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfcGh5X3N3X3Jlc2V0KCkgLSBw ZXJmb3JtIGEgUEhZIHNvZnR3YXJlIHJlc2V0Ci0gKiBAZHNpX2N0cmw6ICAgICAgICAgRFNJIGNv bnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIFBlcmZvcm1zIGEgUEhZIHNvZnR3YXJlIHJlc2V0IG9u IHRoZSBEU0kgY29udHJvbGxlci4gUmVzZXQgc2hvdWxkIGJlIGRvbmUKLSAqIHdoZW4gdGhlIGNv bnRyb2xsZXIgcG93ZXIgc3RhdGUgaXMgRFNJX0NUUkxfUE9XRVJfQ09SRV9DTEtfT04gYW5kIHRo ZSBQSFkgaXMKLSAqIG5vdCBlbmFibGVkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmYWls IGlmIGRyaXZlciBpcyBpbiBhbnkgb3RoZXIgc3RhdGUuCi0gKgotICogUmV0dXJuOiBlcnJvciBj b2RlLgotICovCi1pbnQgZHNpX2N0cmxfcGh5X3N3X3Jlc2V0KHN0cnVjdCBkc2lfY3RybCAqZHNp X2N0cmwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2so JmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJjID0gZHNpX2N0cmxfY2hlY2tfc3RhdGUoZHNpX2N0 cmwsIERTSV9DVFJMX09QX1BIWV9TV19SRVNFVCwgMHgwKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJbRFNJXyVkXSBDb250cm9sbGVyIHN0YXRlIGNoZWNrIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAg ICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWRz aV9jdHJsLT5ody5vcHMucGh5X3N3X3Jlc2V0KCZkc2lfY3RybC0+aHcpOwotCi0JcHJfZGVidWco IltEU0lfJWRdIFBIWSBzb2Z0IHJlc2V0IGRvbmVcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4KTsK LQlkc2lfY3RybF91cGRhdGVfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX1BIWV9TV19SRVNF VCwgMHgwKTsKLWVycm9yOgotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0J cmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX3NlYW1sZXNzX3RpbWluZ191cGRhdGUo KSAtIHVwZGF0ZSBvbmx5IGNvbnRyb2xsZXIgdGltaW5nCi0gKiBAZHNpX2N0cmw6ICAgICAgICAg IERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEB0aW1pbmc6ICAgICAgICAgICAgTmV3IERTSSB0 aW1pbmcgaW5mbwotICoKLSAqIFVwZGF0ZXMgaG9zdCB0aW1pbmcgdmFsdWVzIHRvIGNvbmR1Y3Qg YSBzZWFtbGVzcyB0cmFuc2l0aW9uIHRvIG5ldyB0aW1pbmcKLSAqIEZvciBleGFtcGxlLCB0byB1 cGRhdGUgdGhlIHBvcmNoIHZhbHVlcyBpbiBhIGR5bmFtaWMgZnBzIHN3aXRjaC4KLSAqCi0gKiBS ZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9hc3luY190aW1pbmdfdXBkYXRl KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCXN0cnVjdCBkc2lfbW9kZV9pbmZvICp0aW1p bmcpCi17Ci0Jc3RydWN0IGRzaV9tb2RlX2luZm8gKmhvc3RfbW9kZTsKLQlpbnQgcmMgPSAwOwot Ci0JaWYgKCFkc2lfY3RybCB8fCAhdGltaW5nKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3Ry bF9sb2NrKTsKLQotCXJjID0gZHNpX2N0cmxfY2hlY2tfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJM X09QX0FTWU5DX1RJTUlORywKLQkJCURTSV9DVFJMX0VOR0lORV9PTik7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiW0RTSV8lZF0gQ29udHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4i LAotCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBleGl0OwotCX0K LQotCWhvc3RfbW9kZSA9ICZkc2lfY3RybC0+aG9zdF9jb25maWcudmlkZW9fdGltaW5nOwotCW1l bWNweShob3N0X21vZGUsIHRpbWluZywgc2l6ZW9mKCpob3N0X21vZGUpKTsKLQlkc2lfY3RybC0+ aHcub3BzLnNldF90aW1pbmdfZGIoJmRzaV9jdHJsLT5odywgdHJ1ZSk7Ci0JZHNpX2N0cmwtPmh3 Lm9wcy5zZXRfdmlkZW9fdGltaW5nKCZkc2lfY3RybC0+aHcsIGhvc3RfbW9kZSk7Ci0KLWV4aXQ6 Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0K LS8qKgotICogZHNpX2N0cmxfdGltaW5nX2RiX3VwZGF0ZSgpIC0gdXBkYXRlIG9ubHkgY29udHJv bGxlciBUaW1pbmcgREIKLSAqIEBkc2lfY3RybDogICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFu ZGxlLgotICogQGVuYWJsZTogICAgICAgICAgICBFbmFibGUvZGlzYWJsZSBUaW1pbmcgREIgcmVn aXN0ZXIKLSAqCi0gKiAgVXBkYXRlIHRpbWluZyBkYiByZWdpc3RlciB2YWx1ZSBkdXJpbmcgZGZw cyB1c2VjYXNlcwotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJs X3RpbWluZ19kYl91cGRhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJYm9vbCBlbmFi bGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZh bGlkIGRzaV9jdHJsXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygm ZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRzaV9jdHJsX2NoZWNrX3N0YXRlKGRzaV9j dHJsLCBEU0lfQ1RSTF9PUF9BU1lOQ19USU1JTkcsCi0JCQlEU0lfQ1RSTF9FTkdJTkVfT04pOwot CWlmIChyYykgewotCQlwcl9lcnIoIltEU0lfJWRdIENvbnRyb2xsZXIgc3RhdGUgY2hlY2sgZmFp bGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdv dG8gZXhpdDsKLQl9Ci0KLQkvKgotCSAqIEFkZCBIVyByZWNvbW1lbmRlZCBkZWxheSBmb3IgZGZw cyBmZWF0dXJlLgotCSAqIFdoZW4gcHJlZmV0Y2ggaXMgZW5hYmxlZCwgTURTUyBIVyB3b3JrcyBv biAyIHZzeW5jCi0JICogYm91bmRhcmllcyBpLmUuIG1kcF92c3luYyBhbmQgcGFuZWxfdnN5bmMu Ci0JICogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gd2UgYXJlIG9ubHkgd2FpdGluZwot CSAqIGZvciBtZHBfdnN5bmMuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaW50ZXJmYWNlCi0J ICogZmx1c2ggaXMgYWZ0ZXIgcGFuZWxfdnN5bmMuIFNvLCBhZGRlZCB0aGUgcmVjb21tZW5kZWQK LQkgKiBkZWxheXMgYWZ0ZXIgZGZwcyB1cGRhdGUuCi0JICovCi0JdXNsZWVwX3JhbmdlKDIwMDAs IDIwMTApOwotCi0JZHNpX2N0cmwtPmh3Lm9wcy5zZXRfdGltaW5nX2RiKCZkc2lfY3RybC0+aHcs IGVuYWJsZSk7Ci0KLWV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsK LQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfY3RybF9zZXR1cChzdHJ1Y3QgZHNpX2N0cmwgKmRz aV9jdHJsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsKSB7Ci0JCXByX2Vycigi SW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2Nr KCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCWRzaV9jdHJsLT5ody5vcHMuc2V0dXBfbGFuZV9t YXAoJmRzaV9jdHJsLT5odywKLQkJCQkJJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy5sYW5lX21hcCk7 Ci0KLQlkc2lfY3RybC0+aHcub3BzLmhvc3Rfc2V0dXAoJmRzaV9jdHJsLT5odywKLQkJCQkgICAg JmRzaV9jdHJsLT5ob3N0X2NvbmZpZy5jb21tb25fY29uZmlnKTsKLQotCWlmIChkc2lfY3RybC0+ aG9zdF9jb25maWcucGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpIHsKLQkJZHNpX2N0cmwt Pmh3Lm9wcy5jbWRfZW5naW5lX3NldHVwKCZkc2lfY3RybC0+aHcsCi0JCQkJCSZkc2lfY3RybC0+ aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZywKLQkJCQkJJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy51 LmNtZF9lbmdpbmUpOwotCi0JCWRzaV9jdHJsLT5ody5vcHMuc2V0dXBfY21kX3N0cmVhbSgmZHNp X2N0cmwtPmh3LAotCQkJCSZkc2lfY3RybC0+aG9zdF9jb25maWcudmlkZW9fdGltaW5nLAotCQkJ CWRzaV9jdHJsLT5ob3N0X2NvbmZpZy52aWRlb190aW1pbmcuaF9hY3RpdmUgKiAzLAotCQkJCTB4 MCwKLQkJCQkmZHNpX2N0cmwtPnJvaSk7Ci0JCWRzaV9jdHJsLT5ody5vcHMuY21kX2VuZ2luZV9l bigmZHNpX2N0cmwtPmh3LCB0cnVlKTsKLQl9IGVsc2UgewotCQlkc2lfY3RybC0+aHcub3BzLnZp ZGVvX2VuZ2luZV9zZXR1cCgmZHNpX2N0cmwtPmh3LAotCQkJCQkmZHNpX2N0cmwtPmhvc3RfY29u ZmlnLmNvbW1vbl9jb25maWcsCi0JCQkJCSZkc2lfY3RybC0+aG9zdF9jb25maWcudS52aWRlb19l bmdpbmUpOwotCQlkc2lfY3RybC0+aHcub3BzLnNldF92aWRlb190aW1pbmcoJmRzaV9jdHJsLT5o dywKLQkJCQkJICAmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZpZGVvX3RpbWluZyk7Ci0JCWRzaV9j dHJsLT5ody5vcHMudmlkZW9fZW5naW5lX2VuKCZkc2lfY3RybC0+aHcsIHRydWUpOwotCX0KLQot CWRzaV9jdHJsLT5ody5vcHMuZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHRzKCZkc2lfY3RybC0+aHcs IDB4MCk7Ci0JZHNpX2N0cmwtPmh3Lm9wcy5lbmFibGVfZXJyb3JfaW50ZXJydXB0cygmZHNpX2N0 cmwtPmh3LCAweDApOwotCWRzaV9jdHJsLT5ody5vcHMuY3RybF9lbigmZHNpX2N0cmwtPmh3LCB0 cnVlKTsKLQotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJj OwotfQotCi0vKioKLSAqIGRzaV9jdHJsX3BoeV9yZXNldF9jb25maWcoKSAtIE1hc2svdW5tYXNr IHByb3BhZ2F0aW9uIG9mIGFoYiByZXNldCBzaWduYWwKLSAqCXRvIERTSSBQSFkgaGFyZHdhcmUu Ci0gKiBAZHNpX2N0cmw6ICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZW5hYmxl OgkJCU1hc2svdW5tYXNrIHRoZSBQSFkgcmVzZXQgc2lnbmFsLgotICoKLSAqIFJldHVybjogZXJy b3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3BoeV9yZXNldF9jb25maWcoc3RydWN0IGRzaV9j dHJsICpkc2lfY3RybCwgYm9vbCBlbmFibGUpCi17Ci0JaWYgKCFkc2lfY3RybCkgewotCQlwcl9l cnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGRz aV9jdHJsLT5ody5vcHMucGh5X3Jlc2V0X2NvbmZpZykKLQkJZHNpX2N0cmwtPmh3Lm9wcy5waHlf cmVzZXRfY29uZmlnKCZkc2lfY3RybC0+aHcsIGVuYWJsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIHZvaWQgZHNpX2N0cmxfaGFuZGxlX2Vycm9yX3N0YXR1cyhzdHJ1Y3QgZHNpX2N0cmwg KmRzaV9jdHJsLAotCQkJCXVuc2lnbmVkIGxvbmcgaW50IGVycm9yKQotewotCXByX2VycigiJXM6 ICVsdVxuIiwgX19mdW5jX18sIGVycm9yKTsKLQotCS8qIERUTE4gUEhZIGVycm9yICovCi0JaWYg KGVycm9yICYgMHgzMDAwZTAwKQotCQlpZiAoZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9lcnJvcl9z dGF0dXMpCi0JCQlkc2lfY3RybC0+aHcub3BzLmNsZWFyX2Vycm9yX3N0YXR1cygmZHNpX2N0cmwt Pmh3LAotCQkJCQkweDMwMDBlMDApOwotCi0JLyogRFNJIEZJRk8gT1ZFUkZMT1cgZXJyb3IgKi8K LQlpZiAoZXJyb3IgJiAweGYwMDAwKSB7Ci0JCWlmIChkc2lfY3RybC0+aHcub3BzLmNsZWFyX2Vy cm9yX3N0YXR1cykKLQkJCWRzaV9jdHJsLT5ody5vcHMuY2xlYXJfZXJyb3Jfc3RhdHVzKCZkc2lf Y3RybC0+aHcsCi0JCQkJCTB4ZjAwMDApOwotCX0KLQotCS8qIERTSSBGSUZPIFVOREVSRkxPVyBl cnJvciAqLwotCWlmIChlcnJvciAmIDB4ZjAwMDAwKSB7Ci0JCWlmIChkc2lfY3RybC0+aHcub3Bz LmNsZWFyX2Vycm9yX3N0YXR1cykKLQkJCWRzaV9jdHJsLT5ody5vcHMuY2xlYXJfZXJyb3Jfc3Rh dHVzKCZkc2lfY3RybC0+aHcsCi0JCQkJCTB4ZjAwMDAwKTsKLQl9Ci0KLQkvKiBEU0kgUExMIFVO TE9DSyBlcnJvciAqLwotCWlmIChlcnJvciAmIEJJVCg4KSkKLQkJaWYgKGRzaV9jdHJsLT5ody5v cHMuY2xlYXJfZXJyb3Jfc3RhdHVzKQotCQkJZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9lcnJvcl9z dGF0dXMoJmRzaV9jdHJsLT5odywKLQkJCQkJQklUKDgpKTsKLX0KLQotLyoqCi0gKiBkc2lfY3Ry bF9pc3IgLSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBEU0kgQ1RSTCBjb21wb25lbnQK LSAqIEBpcnE6IEluY29taW5nIElSUSBudW1iZXIKLSAqIEBwdHI6IFBvaW50ZXIgdG8gdXNlciBk YXRhIHN0cnVjdHVyZSAoc3RydWN0IGRzaV9jdHJsKQotICogUmV0dXJuczogSVJRX0hBTkRMRUQg aWYgbm8gZnVydGhlciBhY3Rpb24gcmVxdWlyZWQKLSAqLwotc3RhdGljIGlycXJldHVybl90IGRz aV9jdHJsX2lzcihpbnQgaXJxLCB2b2lkICpwdHIpCi17Ci0Jc3RydWN0IGRzaV9jdHJsICpkc2lf Y3RybDsKLQlzdHJ1Y3QgZHNpX2V2ZW50X2NiX2luZm8gY2JfaW5mbzsKLQl1bnNpZ25lZCBsb25n IGZsYWdzOwotCXVpbnQzMl90IGNlbGxfaW5kZXgsIHN0YXR1cywgaTsKLQl1aW50NjRfdCBlcnJv cnM7Ci0KLQlpZiAoIXB0cikKLQkJcmV0dXJuIElSUV9OT05FOwotCWRzaV9jdHJsID0gcHRyOwot Ci0JLyogY2xlYXIgc3RhdHVzIGludGVycnVwdHMgKi8KLQlpZiAoZHNpX2N0cmwtPmh3Lm9wcy5n ZXRfaW50ZXJydXB0X3N0YXR1cykKLQkJc3RhdHVzID0gZHNpX2N0cmwtPmh3Lm9wcy5nZXRfaW50 ZXJydXB0X3N0YXR1cygmZHNpX2N0cmwtPmh3KTsKLQllbHNlCi0JCXN0YXR1cyA9IDB4MDsKLQot CWlmIChkc2lfY3RybC0+aHcub3BzLmNsZWFyX2ludGVycnVwdF9zdGF0dXMpCi0JCWRzaV9jdHJs LT5ody5vcHMuY2xlYXJfaW50ZXJydXB0X3N0YXR1cygmZHNpX2N0cmwtPmh3LCBzdGF0dXMpOwot Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbG9jaywgZmxhZ3Mp OwotCWNlbGxfaW5kZXggPSBkc2lfY3RybC0+Y2VsbF9pbmRleDsKLQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkc2lfY3RybC0+aXJxX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKLQotCS8qIGNsZWFy IGVycm9yIGludGVycnVwdHMgKi8KLQlpZiAoZHNpX2N0cmwtPmh3Lm9wcy5nZXRfZXJyb3Jfc3Rh dHVzKQotCQllcnJvcnMgPSBkc2lfY3RybC0+aHcub3BzLmdldF9lcnJvcl9zdGF0dXMoJmRzaV9j dHJsLT5odyk7Ci0JZWxzZQotCQllcnJvcnMgPSAweDA7Ci0KLQlpZiAoZXJyb3JzKSB7Ci0JCS8q IGhhbmRsZSBEU0kgZXJyb3IgcmVjb3ZlcnkgKi8KLQkJZHNpX2N0cmxfaGFuZGxlX2Vycm9yX3N0 YXR1cyhkc2lfY3RybCwgZXJyb3JzKTsKLQkJaWYgKGRzaV9jdHJsLT5ody5vcHMuY2xlYXJfZXJy b3Jfc3RhdHVzKQotCQkJZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9lcnJvcl9zdGF0dXMoJmRzaV9j dHJsLT5odywKLQkJCQkJCQllcnJvcnMpOwotCX0KLQotCWlmIChzdGF0dXMgJiBEU0lfQ01EX01P REVfRE1BX0RPTkUpIHsKLQkJZHNpX2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJydXB0KGRzaV9j dHJsLAotCQkJCQlEU0lfU0lOVF9DTURfTU9ERV9ETUFfRE9ORSk7Ci0JCWNvbXBsZXRlX2FsbCgm ZHNpX2N0cmwtPmlycV9pbmZvLmNtZF9kbWFfZG9uZSk7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIERT SV9DTURfRlJBTUVfRE9ORSkgewotCQlkc2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQo ZHNpX2N0cmwsCi0JCQkJCURTSV9TSU5UX0NNRF9GUkFNRV9ET05FKTsKLQkJY29tcGxldGVfYWxs KCZkc2lfY3RybC0+aXJxX2luZm8uY21kX2ZyYW1lX2RvbmUpOwotCX0KLQotCWlmIChzdGF0dXMg JiBEU0lfVklERU9fTU9ERV9GUkFNRV9ET05FKSB7Ci0JCWRzaV9jdHJsX2Rpc2FibGVfc3RhdHVz X2ludGVycnVwdChkc2lfY3RybCwKLQkJCQkJRFNJX1NJTlRfVklERU9fTU9ERV9GUkFNRV9ET05F KTsKLQkJY29tcGxldGVfYWxsKCZkc2lfY3RybC0+aXJxX2luZm8udmlkX2ZyYW1lX2RvbmUpOwot CX0KLQotCWlmIChzdGF0dXMgJiBEU0lfQlRBX0RPTkUpIHsKLQkJZHNpX2N0cmxfZGlzYWJsZV9z dGF0dXNfaW50ZXJydXB0KGRzaV9jdHJsLAotCQkJCQlEU0lfU0lOVF9CVEFfRE9ORSk7Ci0JCWNv bXBsZXRlX2FsbCgmZHNpX2N0cmwtPmlycV9pbmZvLmJ0YV9kb25lKTsKLQl9Ci0KLQlmb3IgKGkg PSAwOyBzdGF0dXMgJiYgaSA8IERTSV9TVEFUVVNfSU5URVJSVVBUX0NPVU5UOyArK2kpIHsKLQkJ aWYgKHN0YXR1cyAmIDB4MSkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRzaV9jdHJsLT5pcnFf aW5mby5pcnFfbG9jaywgZmxhZ3MpOwotCQkJY2JfaW5mbyA9IGRzaV9jdHJsLT5pcnFfaW5mby5p cnFfc3RhdF9jYltpXTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCi0JCQkJCSZkc2lfY3Ry bC0+aXJxX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKLQotCQkJaWYgKGNiX2luZm8uZXZlbnRfY2Ip Ci0JCQkJKHZvaWQpY2JfaW5mby5ldmVudF9jYihjYl9pbmZvLmV2ZW50X3Vzcl9wdHIsCi0JCQkJ CQljYl9pbmZvLmV2ZW50X2lkeCwKLQkJCQkJCWNlbGxfaW5kZXgsIGlycSwgMCwgMCwgMCk7Ci0J CX0KLQkJc3RhdHVzID4+PSAxOwotCX0KLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyoq Ci0gKiBfZHNpX2N0cmxfc2V0dXBfaXNyIC0gcmVnaXN0ZXIgSVNSIGhhbmRsZXIKLSAqIEBkc2lf Y3RybDogUG9pbnRlciB0byBhc3NvY2lhdGVkIGRzaV9jdHJsIHN0cnVjdHVyZQotICogUmV0dXJu czogWmVybyBvbiBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQgZHNpX2N0cmxfc2V0dXBfaXNyKHN0 cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JaW50IGlycV9udW0sIHJjOwotCi0JaWYgKCFk c2lfY3RybCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGRzaV9jdHJsLT5pcnFfaW5mby5pcnFf bnVtICE9IC0xKQotCQlyZXR1cm4gMDsKLQotCWluaXRfY29tcGxldGlvbigmZHNpX2N0cmwtPmly cV9pbmZvLmNtZF9kbWFfZG9uZSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZkc2lfY3RybC0+aXJxX2lu Zm8udmlkX2ZyYW1lX2RvbmUpOwotCWluaXRfY29tcGxldGlvbigmZHNpX2N0cmwtPmlycV9pbmZv LmNtZF9mcmFtZV9kb25lKTsKLQlpbml0X2NvbXBsZXRpb24oJmRzaV9jdHJsLT5pcnFfaW5mby5i dGFfZG9uZSk7Ci0KLQlpcnFfbnVtID0gcGxhdGZvcm1fZ2V0X2lycShkc2lfY3RybC0+cGRldiwg MCk7Ci0JaWYgKGlycV9udW0gPCAwKSB7Ci0JCXByX2VycigiW0RTSV8lZF0gRmFpbGVkIHRvIGdl dCBJUlEgbnVtYmVyLCAlZFxuIiwKLQkJCQlkc2lfY3RybC0+Y2VsbF9pbmRleCwgaXJxX251bSk7 Ci0JCXJjID0gaXJxX251bTsKLQl9IGVsc2UgewotCQlyYyA9IGRldm1fcmVxdWVzdF90aHJlYWRl ZF9pcnEoJmRzaV9jdHJsLT5wZGV2LT5kZXYsIGlycV9udW0sCi0JCQkJZHNpX2N0cmxfaXNyLCBO VUxMLCAwLCAiZHNpX2N0cmwiLCBkc2lfY3RybCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJb RFNJXyVkXSBGYWlsZWQgdG8gcmVxdWVzdCBJUlEsICVkXG4iLAotCQkJCQlkc2lfY3RybC0+Y2Vs bF9pbmRleCwgcmMpOwotCQl9IGVsc2UgewotCQkJZHNpX2N0cmwtPmlycV9pbmZvLmlycV9udW0g PSBpcnFfbnVtOwotCQkJZGlzYWJsZV9pcnFfbm9zeW5jKGlycV9udW0pOwotCi0JCQlwcl9kZWJ1 ZygiW0RTSV8lZF0gSVJRICVkIHJlZ2lzdGVyZWRcbiIsCi0JCQkJCWRzaV9jdHJsLT5jZWxsX2lu ZGV4LCBpcnFfbnVtKTsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogX2RzaV9j dHJsX2Rlc3Ryb3lfaXNyIC0gdW5yZWdpc3RlciBJU1IgaGFuZGxlcgotICogQGRzaV9jdHJsOiBQ b2ludGVyIHRvIGFzc29jaWF0ZWQgZHNpX2N0cmwgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lk IF9kc2lfY3RybF9kZXN0cm95X2lzcihzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCWlm ICghZHNpX2N0cmwgfHwgIWRzaV9jdHJsLT5wZGV2IHx8IGRzaV9jdHJsLT5pcnFfaW5mby5pcnFf bnVtIDwgMCkKLQkJcmV0dXJuOwotCi0JaWYgKGRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbnVtICE9 IC0xKSB7Ci0JCWRldm1fZnJlZV9pcnEoJmRzaV9jdHJsLT5wZGV2LT5kZXYsCi0JCQkJZHNpX2N0 cmwtPmlycV9pbmZvLmlycV9udW0sIGRzaV9jdHJsKTsKLQkJZHNpX2N0cmwtPmlycV9pbmZvLmly cV9udW0gPSAtMTsKLQl9Ci19Ci0KLXZvaWQgZHNpX2N0cmxfZW5hYmxlX3N0YXR1c19pbnRlcnJ1 cHQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJdWludDMyX3QgaW50cl9pZHgsIHN0cnVj dCBkc2lfZXZlbnRfY2JfaW5mbyAqZXZlbnRfaW5mbykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdz OwotCi0JaWYgKCFkc2lfY3RybCB8fCBkc2lfY3RybC0+aXJxX2luZm8uaXJxX251bSA9PSAtMSB8 fAotCQkJaW50cl9pZHggPj0gRFNJX1NUQVRVU19JTlRFUlJVUFRfQ09VTlQpCi0JCXJldHVybjsK LQotCXNwaW5fbG9ja19pcnFzYXZlKCZkc2lfY3RybC0+aXJxX2luZm8uaXJxX2xvY2ssIGZsYWdz KTsKLQotCWlmIChkc2lfY3RybC0+aXJxX2luZm8uaXJxX3N0YXRfcmVmY291bnRbaW50cl9pZHhd ID09IDApIHsKLQkJLyogZW5hYmxlIGlycSBvbiBmaXJzdCByZXF1ZXN0ICovCi0JCWlmIChkc2lf Y3RybC0+aXJxX2luZm8uaXJxX3N0YXRfbWFzayA9PSAwKQotCQkJZW5hYmxlX2lycShkc2lfY3Ry bC0+aXJxX2luZm8uaXJxX251bSk7Ci0KLQkJLyogdXBkYXRlIGhhcmR3YXJlIG1hc2sgKi8KLQkJ ZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X21hc2sgfD0gQklUKGludHJfaWR4KTsKLQkJZHNp X2N0cmwtPmh3Lm9wcy5lbmFibGVfc3RhdHVzX2ludGVycnVwdHMoJmRzaV9jdHJsLT5odywKLQkJ CQlkc2lfY3RybC0+aXJxX2luZm8uaXJxX3N0YXRfbWFzayk7Ci0JfQotCSsrKGRzaV9jdHJsLT5p cnFfaW5mby5pcnFfc3RhdF9yZWZjb3VudFtpbnRyX2lkeF0pOwotCi0JaWYgKGV2ZW50X2luZm8p Ci0JCWRzaV9jdHJsLT5pcnFfaW5mby5pcnFfc3RhdF9jYltpbnRyX2lkeF0gPSAqZXZlbnRfaW5m bzsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbG9j aywgZmxhZ3MpOwotfQotCi12b2lkIGRzaV9jdHJsX2Rpc2FibGVfc3RhdHVzX2ludGVycnVwdChz dHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQl1aW50MzJfdCBpbnRyX2lkeCkKLXsKLQl1bnNp Z25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFkc2lfY3RybCB8fCBkc2lfY3RybC0+aXJxX2luZm8u aXJxX251bSA9PSAtMSB8fAotCQkJaW50cl9pZHggPj0gRFNJX1NUQVRVU19JTlRFUlJVUFRfQ09V TlQpCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkc2lfY3RybC0+aXJxX2luZm8u aXJxX2xvY2ssIGZsYWdzKTsKLQotCWlmIChkc2lfY3RybC0+aXJxX2luZm8uaXJxX3N0YXRfcmVm Y291bnRbaW50cl9pZHhdKQotCQlpZiAoLS0oZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X3Jl ZmNvdW50W2ludHJfaWR4XSkgPT0gMCkgewotCQkJZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0 X21hc2sgJj0gfkJJVChpbnRyX2lkeCk7Ci0JCQlkc2lfY3RybC0+aHcub3BzLmVuYWJsZV9zdGF0 dXNfaW50ZXJydXB0cygmZHNpX2N0cmwtPmh3LAotCQkJCQlkc2lfY3RybC0+aXJxX2luZm8uaXJx X3N0YXRfbWFzayk7Ci0KLQkJCS8qIGRvbid0IG5lZWQgaXJxIGlmIG5vIGxpbmVzIGFyZSBlbmFi bGVkICovCi0JCQlpZiAoZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X21hc2sgPT0gMCkKLQkJ CQlkaXNhYmxlX2lycV9ub3N5bmMoZHNpX2N0cmwtPmlycV9pbmZvLmlycV9udW0pOwotCQl9Ci0K LQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkc2lfY3RybC0+aXJxX2luZm8uaXJxX2xvY2ssIGZs YWdzKTsKLX0KLQotaW50IGRzaV9jdHJsX2hvc3RfdGltaW5nX3VwZGF0ZShzdHJ1Y3QgZHNpX2N0 cmwgKmRzaV9jdHJsKQotewotCWlmICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBh cmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChkc2lfY3RybC0+aHcub3Bz Lmhvc3Rfc2V0dXApCi0JCWRzaV9jdHJsLT5ody5vcHMuaG9zdF9zZXR1cCgmZHNpX2N0cmwtPmh3 LAotCQkJCSZkc2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZyk7Ci0KLQlpZiAoZHNp X2N0cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RFKSB7Ci0JCWlm IChkc2lfY3RybC0+aHcub3BzLmNtZF9lbmdpbmVfc2V0dXApCi0JCQlkc2lfY3RybC0+aHcub3Bz LmNtZF9lbmdpbmVfc2V0dXAoJmRzaV9jdHJsLT5odywKLQkJCQkJJmRzaV9jdHJsLT5ob3N0X2Nv bmZpZy5jb21tb25fY29uZmlnLAotCQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnUuY21kX2Vu Z2luZSk7Ci0KLQkJaWYgKGRzaV9jdHJsLT5ody5vcHMuc2V0dXBfY21kX3N0cmVhbSkKLQkJCWRz aV9jdHJsLT5ody5vcHMuc2V0dXBfY21kX3N0cmVhbSgmZHNpX2N0cmwtPmh3LAotCQkJCSZkc2lf Y3RybC0+aG9zdF9jb25maWcudmlkZW9fdGltaW5nLAotCQkJCWRzaV9jdHJsLT5ob3N0X2NvbmZp Zy52aWRlb190aW1pbmcuaF9hY3RpdmUgKiAzLAotCQkJCTB4MCwgTlVMTCk7Ci0JfSBlbHNlIHsK LQkJcHJfZXJyKCJpbnZhbGlkIHBhbmVsIG1vZGUgZm9yIHJlc29sdXRpb24gc3dpdGNoXG4iKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHNpX2N0 cmxfaG9zdF9pbml0KCkgLSBJbml0aWFsaXplIERTSSBob3N0IGhhcmR3YXJlLgotICogQGRzaV9j dHJsOiAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIEluaXRpYWxpemVzIERT SSBjb250cm9sbGVyIGhhcmR3YXJlIHdpdGggaG9zdCBjb25maWd1cmF0aW9uIHByb3ZpZGVkIGJ5 Ci0gKiBkc2lfY3RybF91cGRhdGVfaG9zdF9jb25maWcoKS4gSW5pdGlhbGl6YXRpb24gY2FuIGJl IHBlcmZvcm1lZCBvbmx5IGR1cmluZwotICogRFNJX0NUUkxfUE9XRVJfQ09SRV9DTEtfT04gc3Rh dGUgYW5kIGFmdGVyIHRoZSBQSFkgU1cgcmVzZXQgaGFzIGJlZW4KLSAqIHBlcmZvcm1lZC4KLSAq Ci0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9ob3N0X2luaXQoc3Ry dWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfY3Ry bCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmMgPSBkc2lfY3RybF9j aGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfSE9TVF9JTklULCAweDEpOwotCWlmIChy YykgewotCQlwcl9lcnIoIltEU0lfJWRdIENvbnRyb2xsZXIgc3RhdGUgY2hlY2sgZmFpbGVkLCBy Yz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0JZHNpX2N0cmwtPmh3Lm9wcy5zZXR1cF9sYW5lX21hcCgmZHNpX2N0cmwtPmh3 LAotCQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLmxhbmVfbWFwKTsKLQotCWRzaV9jdHJsLT5o dy5vcHMuaG9zdF9zZXR1cCgmZHNpX2N0cmwtPmh3LAotCQkJCSAgICAmZHNpX2N0cmwtPmhvc3Rf Y29uZmlnLmNvbW1vbl9jb25maWcpOwotCi0JaWYgKGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5l bF9tb2RlID09IERTSV9PUF9DTURfTU9ERSkgewotCQlkc2lfY3RybC0+aHcub3BzLmNtZF9lbmdp bmVfc2V0dXAoJmRzaV9jdHJsLT5odywKLQkJCQkJJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy5jb21t b25fY29uZmlnLAotCQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnUuY21kX2VuZ2luZSk7Ci0K LQkJZHNpX2N0cmwtPmh3Lm9wcy5zZXR1cF9jbWRfc3RyZWFtKCZkc2lfY3RybC0+aHcsCi0JCQkJ JmRzaV9jdHJsLT5ob3N0X2NvbmZpZy52aWRlb190aW1pbmcsCi0JCQkJZHNpX2N0cmwtPmhvc3Rf Y29uZmlnLnZpZGVvX3RpbWluZy5oX2FjdGl2ZSAqIDMsCi0JCQkJMHgwLAotCQkJCU5VTEwpOwot CX0gZWxzZSB7Ci0JCWRzaV9jdHJsLT5ody5vcHMudmlkZW9fZW5naW5lX3NldHVwKCZkc2lfY3Ry bC0+aHcsCi0JCQkJCSZkc2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZywKLQkJCQkJ JmRzaV9jdHJsLT5ob3N0X2NvbmZpZy51LnZpZGVvX2VuZ2luZSk7Ci0JCWRzaV9jdHJsLT5ody5v cHMuc2V0X3ZpZGVvX3RpbWluZygmZHNpX2N0cmwtPmh3LAotCQkJCQkgICZkc2lfY3RybC0+aG9z dF9jb25maWcudmlkZW9fdGltaW5nKTsKLQl9Ci0KLQlkc2lfY3RybF9zZXR1cF9pc3IoZHNpX2N0 cmwpOwotCi0JZHNpX2N0cmwtPmh3Lm9wcy5lbmFibGVfc3RhdHVzX2ludGVycnVwdHMoJmRzaV9j dHJsLT5odywgMHgwKTsKLQlkc2lfY3RybC0+aHcub3BzLmVuYWJsZV9lcnJvcl9pbnRlcnJ1cHRz KCZkc2lfY3RybC0+aHcsIDB4MCk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF1Ib3N0IGluaXRpYWxp emF0aW9uIGNvbXBsZXRlXG4iLAotCQlkc2lfY3RybC0+Y2VsbF9pbmRleCk7Ci0JZHNpX2N0cmxf dXBkYXRlX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9IT1NUX0lOSVQsIDB4MSk7Ci1lcnJv cjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0K LQotaW50IGRzaV9jdHJsX3NvZnRfcmVzZXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsK LQlpZiAoIWRzaV9jdHJsKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmRzaV9j dHJsLT5jdHJsX2xvY2spOwotCWRzaV9jdHJsLT5ody5vcHMuc29mdF9yZXNldCgmZHNpX2N0cmwt Pmh3KTsKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JcHJfZGVidWco IltEU0lfJWRdU29mdCByZXNldCBjb21wbGV0ZVxuIiwgZHNpX2N0cmwtPmNlbGxfaW5kZXgpOwot CXJldHVybiAwOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX2hvc3RfZGVpbml0KCkgLSBEZS1Jbml0 aWFsaXplIERTSSBob3N0IGhhcmR3YXJlLgotICogQGRzaV9jdHJsOiAgICAgICAgRFNJIGNvbnRy b2xsZXIgaGFuZGxlLgotICoKLSAqIERlLWluaXRpYWxpemVzIERTSSBjb250cm9sbGVyIGhhcmR3 YXJlLiBJdCBjYW4gYmUgcGVyZm9ybWVkIG9ubHkgZHVyaW5nCi0gKiBEU0lfQ1RSTF9QT1dFUl9D T1JFX0NMS19PTiBzdGF0ZSBhZnRlciBMSU5LIGNsb2NrcyBoYXZlIGJlZW4gdHVybmVkIG9mZi4K LSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9ob3N0X2RlaW5p dChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRz aV9jdHJsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCV9kc2lfY3Ry bF9kZXN0cm95X2lzcihkc2lfY3RybCk7Ci0KLQlyYyA9IGRzaV9jdHJsX2NoZWNrX3N0YXRlKGRz aV9jdHJsLCBEU0lfQ1RSTF9PUF9IT1NUX0lOSVQsIDB4MCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiW0RTSV8lZF0gQ29udHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLAotCQkg ICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJcHJfZXJyKCJkcml2ZXIgc3RhdGUg Y2hlY2sgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXByX2Rl YnVnKCJbRFNJXyVkXSBIb3N0IGRlaW5pdGl6YXRpb24gY29tcGxldGVcbiIsCi0JCWRzaV9jdHJs LT5jZWxsX2luZGV4KTsKLQlkc2lfY3RybF91cGRhdGVfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJM X09QX0hPU1RfSU5JVCwgMHgwKTsKLWVycm9yOgotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0 cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX3VwZGF0ZV9ob3N0 X2NvbmZpZygpIC0gdXBkYXRlIGRzaSBob3N0IGNvbmZpZ3VyYXRpb24KLSAqIEBkc2lfY3RybDog ICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGNvbmZpZzogICAgICAgICAgICBE U0kgaG9zdCBjb25maWd1cmF0aW9uLgotICogQGZsYWdzOiAgICAgICAgICAgICBkc2lfbW9kZV9m bGFncyBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yCi0gKgotICogVXBkYXRlcyBkcml2ZXIgd2l0aCBu ZXcgSG9zdCBjb25maWd1cmF0aW9uIHRvIHVzZSBmb3IgaG9zdCBpbml0aWFsaXphdGlvbi4KLSAq IFRoaXMgZnVuY3Rpb24gY2FsbCB3aWxsIG9ubHkgdXBkYXRlIHRoZSBzb2Z0d2FyZSBjb250ZXh0 LiBUaGUgc3RvcmVkCi0gKiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCB3 aGVuIHRoZSBob3N0IGlzIGluaXRpYWxpemVkLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4K LSAqLwotaW50IGRzaV9jdHJsX3VwZGF0ZV9ob3N0X2NvbmZpZyhzdHJ1Y3QgZHNpX2N0cmwgKmN0 cmwsCi0JCQkJc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAqY29uZmlnLAotCQkJCWludCBmbGFncywg dm9pZCAqY2xrX2hhbmRsZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFjdHJsIHx8ICFjb25m aWcpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCW11dGV4X2xvY2soJmN0cmwtPmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRzaV9jdHJsX3Zh bGlkYXRlX3BhbmVsX2luZm8oY3RybCwgY29uZmlnKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJw YW5lbCB2YWxpZGF0aW9uIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQlpZiAoIShmbGFncyAmIChEU0lfTU9ERV9GTEFHX1NFQU1MRVNTIHwgRFNJX01PREVfRkxB R19WUlIpKSkgewotCQlyYyA9IGRzaV9jdHJsX3VwZGF0ZV9saW5rX2ZyZXFzKGN0cmwsIGNvbmZp ZywgY2xrX2hhbmRsZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byB1 cGRhdGUgbGluayBmcmVxdWVuY2llcywgcmM9JWRcbiIsCi0JCQkgICAgICAgY3RybC0+bmFtZSwg cmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCXByX2RlYnVnKCJbRFNJXyVkXUhvc3Qg Y29uZmlnIHVwZGF0ZWRcbiIsIGN0cmwtPmNlbGxfaW5kZXgpOwotCW1lbWNweSgmY3RybC0+aG9z dF9jb25maWcsIGNvbmZpZywgc2l6ZW9mKGN0cmwtPmhvc3RfY29uZmlnKSk7Ci0JY3RybC0+bW9k ZV9ib3VuZHMueCA9IGN0cmwtPmhvc3RfY29uZmlnLnZpZGVvX3RpbWluZy5oX2FjdGl2ZSAqCi0J CQljdHJsLT5ob3Jpel9pbmRleDsKLQljdHJsLT5tb2RlX2JvdW5kcy55ID0gMDsKLQljdHJsLT5t b2RlX2JvdW5kcy53ID0gY3RybC0+aG9zdF9jb25maWcudmlkZW9fdGltaW5nLmhfYWN0aXZlOwot CWN0cmwtPm1vZGVfYm91bmRzLmggPSBjdHJsLT5ob3N0X2NvbmZpZy52aWRlb190aW1pbmcudl9h Y3RpdmU7Ci0JbWVtY3B5KCZjdHJsLT5yb2ksICZjdHJsLT5tb2RlX2JvdW5kcywgc2l6ZW9mKGN0 cmwtPm1vZGVfYm91bmRzKSk7Ci0JY3RybC0+cm9pLnggPSAwOwotZXJyb3I6Ci0JbXV0ZXhfdW5s b2NrKCZjdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3Ry bF92YWxpZGF0ZV90aW1pbmcoKSAtIHZhbGlkYXRlIGEgdmlkZW8gdGltaW5nIGNvbmZpZ3VyYXRp b24KLSAqIEBkc2lfY3RybDogICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQHRpbWlu ZzogICAgICAgICBQb2ludGVyIHRvIHRpbWluZyBkYXRhLgotICoKLSAqIERyaXZlciB3aWxsIHZh bGlkYXRlIGlmIHRoZSB0aW1pbmcgY29uZmlndXJhdGlvbiBpcyBzdXBwb3J0ZWQgb24gdGhlCi0g KiBjb250cm9sbGVyIGhhcmR3YXJlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZSBpZiB0aW1p bmcgaXMgbm90IHN1cHBvcnRlZC4KLSAqLwotaW50IGRzaV9jdHJsX3ZhbGlkYXRlX3RpbWluZyhz dHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJICAgICBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAq bW9kZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfY3RybCB8fCAhbW9kZSkgewotCQlw cl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0 ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+ Y3RybF9sb2NrKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9jbWRfdHJh bnNmZXIoKSAtIFRyYW5zZmVyIGNvbW1hbmRzIG9uIERTSSBsaW5rCi0gKiBAZHNpX2N0cmw6ICAg ICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBtc2c6ICAgICAgICAgICAgICAg ICAgTWVzc2FnZSB0byB0cmFuc2ZlciBvbiBEU0kgbGluay4KLSAqIEBmbGFnczogICAgICAgICAg ICAgICAgTW9kaWZpZXJzIGZvciBtZXNzYWdlIHRyYW5zZmVyLgotICoKLSAqIENvbW1hbmQgdHJh bnNmZXIgY2FuIGJlIGRvbmUgb25seSB3aGVuIGNvbW1hbmQgZW5naW5lIGlzIGVuYWJsZWQuIFRo ZQotICogdHJhbnNmZXIgQVBJIHdpbGwgYmxvY2sgdW50aWwgZWl0aGVyIHRoZSBjb21tYW5kIHRy YW5zZmVyIGZpbmlzaGVzIG9yCi0gKiB0aGUgdGltZW91dCB2YWx1ZSBpcyByZWFjaGVkLiBJZiB0 aGUgdHJpZ2dlciBpcyBkZWZlcnJlZCwgaXQgd2lsbCByZXR1cm4KLSAqIHdpdGhvdXQgdHJpZ2dl cmluZyB0aGUgdHJhbnNmZXIuIENvbW1hbmQgcGFyYW1ldGVycyBhcmUgcHJvZ3JhbW1lZCB0bwot ICogaGFyZHdhcmUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0 cmxfY21kX3RyYW5zZmVyKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkgIGNvbnN0IHN0 cnVjdCBtaXBpX2RzaV9tc2cgKm1zZywKLQkJCSAgdTMyIGZsYWdzKQotewotCWludCByYyA9IDA7 Ci0KLQlpZiAoIWRzaV9jdHJsIHx8ICFtc2cpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xu Iik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJs X2xvY2spOwotCi0JcmMgPSBkc2lfY3RybF9jaGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxf T1BfQ01EX1RYLCAweDApOwotCWlmIChyYykgewotCQlwcl9lcnIoIltEU0lfJWRdIENvbnRyb2xs ZXIgc3RhdGUgY2hlY2sgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxs X2luZGV4LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKGZsYWdzICYgRFNJX0NUUkxf Q01EX1JFQUQpIHsKLQkJcmMgPSBkc2lfbWVzc2FnZV9yeChkc2lfY3RybCwgbXNnLCBmbGFncyk7 Ci0JCWlmIChyYykKLQkJCXByX2VycigicmVhZCBtZXNzYWdlIGZhaWxlZCwgcmM9JWRcbiIsIHJj KTsKLQl9IGVsc2UgewotCQlyYyA9IGRzaV9tZXNzYWdlX3R4KGRzaV9jdHJsLCBtc2csIGZsYWdz KTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJjb21tYW5kIG1zZyB0cmFuc2ZlciBmYWlsZWQsIHJj ID0gJWRcbiIsIHJjKTsKLQl9Ci0KLQlkc2lfY3RybF91cGRhdGVfc3RhdGUoZHNpX2N0cmwsIERT SV9DVFJMX09QX0NNRF9UWCwgMHgwKTsKLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3Ry bC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfY21kX3R4 X3RyaWdnZXIoKSAtIFRyaWdnZXIgYSBkZWZlcnJlZCBjb21tYW5kLgotICogQGRzaV9jdHJsOiAg ICAgICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGZsYWdzOiAgICAgICAgICAg ICAgICAgTW9kaWZpZXJzLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRz aV9jdHJsX2NtZF90eF90cmlnZ2VyKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIHUzMiBmbGFn cykKLXsKLQlpbnQgcmMgPSAwLCByZXQgPSAwOwotCXUzMiBzdGF0dXMgPSAwOwotCXUzMiBtYXNr ID0gKERTSV9DTURfTU9ERV9ETUFfRE9ORSk7Ci0KLQlpZiAoIWRzaV9jdHJsKSB7Ci0JCXByX2Vy cigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9s b2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCWlmICghKGZsYWdzICYgRFNJX0NUUkxfQ01E X0JST0FEQ0FTVF9NQVNURVIpKQotCQlkc2lfY3RybC0+aHcub3BzLnRyaWdnZXJfY29tbWFuZF9k bWEoJmRzaV9jdHJsLT5odyk7Ci0KLQlpZiAoKGZsYWdzICYgRFNJX0NUUkxfQ01EX0JST0FEQ0FT VCkgJiYKLQkJKGZsYWdzICYgRFNJX0NUUkxfQ01EX0JST0FEQ0FTVF9NQVNURVIpKSB7Ci0JCWRz aV9jdHJsX2VuYWJsZV9zdGF0dXNfaW50ZXJydXB0KGRzaV9jdHJsLAotCQkJCQlEU0lfU0lOVF9D TURfTU9ERV9ETUFfRE9ORSwgTlVMTCk7Ci0JCXJlaW5pdF9jb21wbGV0aW9uKCZkc2lfY3RybC0+ aXJxX2luZm8uY21kX2RtYV9kb25lKTsKLQotCQkvKiB0cmlnZ2VyIGNvbW1hbmQgKi8KLQkJZHNp X2N0cmwtPmh3Lm9wcy50cmlnZ2VyX2NvbW1hbmRfZG1hKCZkc2lfY3RybC0+aHcpOwotCi0JCXJl dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgKLQkJCQkmZHNpX2N0cmwtPmlycV9pbmZv LmNtZF9kbWFfZG9uZSwKLQkJCQltc2Vjc190b19qaWZmaWVzKERTSV9DVFJMX1RYX1RPX01TKSk7 Ci0KLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQlzdGF0dXMgPSBkc2lfY3RybC0+aHcub3BzLmdldF9p bnRlcnJ1cHRfc3RhdHVzKAotCQkJCQkJCQkmZHNpX2N0cmwtPmh3KTsKLQkJCWlmIChzdGF0dXMg JiBtYXNrKSB7Ci0JCQkJc3RhdHVzIHw9IChEU0lfQ01EX01PREVfRE1BX0RPTkUgfAotCQkJCQkJ RFNJX0JUQV9ET05FKTsKLQkJCQlkc2lfY3RybC0+aHcub3BzLmNsZWFyX2ludGVycnVwdF9zdGF0 dXMoCi0JCQkJCQkJCSZkc2lfY3RybC0+aHcsCi0JCQkJCQkJCXN0YXR1cyk7Ci0JCQkJZHNpX2N0 cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJydXB0KGRzaV9jdHJsLAotCQkJCQkJRFNJX1NJTlRfQ01E X01PREVfRE1BX0RPTkUpOwotCQkJCWNvbXBsZXRlX2FsbCgmZHNpX2N0cmwtPmlycV9pbmZvLmNt ZF9kbWFfZG9uZSk7Ci0JCQkJcHJfd2FybigiZG1hX3R4IGRvbmUgYnV0IGlycSBub3QgdHJpZ2dl cmVkXG4iKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmMgPSAtRVRJTUVET1VUOwotCQkJCWRzaV9jdHJs X2Rpc2FibGVfc3RhdHVzX2ludGVycnVwdChkc2lfY3RybCwKLQkJCQkJCURTSV9TSU5UX0NNRF9N T0RFX0RNQV9ET05FKTsKLQkJCQlwcl9lcnIoIltEU0lfJWRdQ29tbWFuZCB0cmFuc2ZlciBmYWls ZWRcbiIsCi0JCQkJCQlkc2lfY3RybC0+Y2VsbF9pbmRleCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlt dXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoq Ci0gKiBfZHNpX2N0cmxfY2FjaGVfbWlzciAtIENhY2hlIGZyYW1lIE1JU1IgdmFsdWUKLSAqIEBk c2lfY3RybDogUG9pbnRlciB0byBhc3NvY2lhdGVkIGRzaV9jdHJsIHN0cnVjdHVyZQotICovCi1z dGF0aWMgdm9pZCBfZHNpX2N0cmxfY2FjaGVfbWlzcihzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJs KQotewotCXUzMiBtaXNyOwotCi0JaWYgKCFkc2lfY3RybCB8fCAhZHNpX2N0cmwtPmh3Lm9wcy5j b2xsZWN0X21pc3IpCi0JCXJldHVybjsKLQotCW1pc3IgPSBkc2lfY3RybC0+aHcub3BzLmNvbGxl Y3RfbWlzcigmZHNpX2N0cmwtPmh3LAotCQkJCWRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9t b2RlKTsKLQotCWlmIChtaXNyKQotCQlkc2lfY3RybC0+bWlzcl9jYWNoZSA9IG1pc3I7Ci0KLQlw cl9kZWJ1ZygiRFNJXyVkIG1pc3JfY2FjaGUgPSAleFxuIiwgZHNpX2N0cmwtPmNlbGxfaW5kZXgs Ci0JCWRzaV9jdHJsLT5taXNyX2NhY2hlKTsKLQotfQotCi0vKioKLSAqIGRzaV9jdHJsX3NldF9w b3dlcl9zdGF0ZSgpIC0gc2V0IHBvd2VyIHN0YXRlIGZvciBkc2kgY29udHJvbGxlcgotICogQGRz aV9jdHJsOiAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAc3RhdGU6ICAgICAg ICAgICAgIFBvd2VyIHN0YXRlLgotICoKLSAqIFNldCBwb3dlciBzdGF0ZSBmb3IgRFNJIGNvbnRy b2xsZXIuIFBvd2VyIHN0YXRlIGNhbiBiZSBjaGFuZ2VkIG9ubHkgd2hlbgotICogQ29udHJvbGxl ciwgVmlkZW8gYW5kIENvbW1hbmQgZW5naW5lcyBhcmUgdHVybmVkIG9mZi4KLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0 IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCSAgICAgZW51bSBkc2lfcG93ZXJfc3RhdGUgc3RhdGUp Ci17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwgfHwgKHN0YXRlID49IERTSV9DVFJM X1BPV0VSX01BWCkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIFBhcmFtc1xuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JcmMg PSBkc2lfY3RybF9jaGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfUE9XRVJfU1RBVEVf Q0hBTkdFLAotCQkJCSAgc3RhdGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoIltEU0lfJWRdIENv bnRyb2xsZXIgc3RhdGUgY2hlY2sgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJs LT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKHN0YXRlID09IERT SV9DVFJMX1BPV0VSX1ZSRUdfT04pIHsKLQkJcmMgPSBkc2lfY3RybF9lbmFibGVfc3VwcGxpZXMo ZHNpX2N0cmwsIHRydWUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVkXWZhaWxlZCB0byBl bmFibGUgdm9sdGFnZSBzdXBwbGllcywgcmM9JWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNl bGxfaW5kZXgsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9IGVsc2UgaWYgKHN0YXRlID09 IERTSV9DVFJMX1BPV0VSX1ZSRUdfT0ZGKSB7Ci0JCWlmIChkc2lfY3RybC0+bWlzcl9lbmFibGUp Ci0JCQlfZHNpX2N0cmxfY2FjaGVfbWlzcihkc2lfY3RybCk7Ci0KLQkJcmMgPSBkc2lfY3RybF9l bmFibGVfc3VwcGxpZXMoZHNpX2N0cmwsIGZhbHNlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo IlslZF1mYWlsZWQgdG8gZGlzYWJsZSB2cmVnIHN1cHBsaWVzLCByYz0lZFxuIiwKLQkJCSAgICAg ICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQot CXByX2RlYnVnKCJbRFNJXyVkXSBQb3dlciBzdGF0ZSB1cGRhdGVkIHRvICVkXG4iLCBkc2lfY3Ry bC0+Y2VsbF9pbmRleCwKLQkJIHN0YXRlKTsKLQlkc2lfY3RybF91cGRhdGVfc3RhdGUoZHNpX2N0 cmwsIERTSV9DVFJMX09QX1BPV0VSX1NUQVRFX0NIQU5HRSwgc3RhdGUpOwotZXJyb3I6Ci0JbXV0 ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgot ICogZHNpX2N0cmxfc2V0X3RwZ19zdGF0ZSgpIC0gZW5hYmxlL2Rpc2FibGUgdGVzdCBwYXR0ZXJu IG9uIHRoZSBjb250cm9sbGVyCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgIERTSSBjb250cm9sbGVy IGhhbmRsZS4KLSAqIEBvbjogICAgICAgICAgICAgICAgZW5hYmxlL2Rpc2FibGUgdGVzdCBwYXR0 ZXJuLgotICoKLSAqIFRlc3QgcGF0dGVybiBjYW4gYmUgZW5hYmxlZCBvbmx5IGFmdGVyIFZpZGVv IGVuZ2luZSAoZm9yIHZpZGVvIG1vZGUgcGFuZWxzKQotICogb3IgY29tbWFuZCBlbmdpbmUgKGZv ciBjbWQgbW9kZSBwYW5lbHMpIGlzIGVuYWJsZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2Rl LgotICovCi1pbnQgZHNpX2N0cmxfc2V0X3RwZ19zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9j dHJsLCBib29sIG9uKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsKSB7Ci0JCXBy X2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRl eF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0gZHNpX2N0cmxfY2hlY2tfc3Rh dGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX1RQRywgb24pOwotCWlmIChyYykgewotCQlwcl9lcnIo IltEU0lfJWRdIENvbnRyb2xsZXIgc3RhdGUgY2hlY2sgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAg ICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYg KG9uKSB7Ci0JCWlmIChkc2lfY3RybC0+aG9zdF9jb25maWcucGFuZWxfbW9kZSA9PSBEU0lfT1Bf VklERU9fTU9ERSkgewotCQkJZHNpX2N0cmwtPmh3Lm9wcy52aWRlb190ZXN0X3BhdHRlcm5fc2V0 dXAoJmRzaV9jdHJsLT5odywKLQkJCQkJCQkgIERTSV9URVNUX1BBVFRFUk5fSU5DLAotCQkJCQkJ CSAgMHhGRkZGKTsKLQkJfSBlbHNlIHsKLQkJCWRzaV9jdHJsLT5ody5vcHMuY21kX3Rlc3RfcGF0 dGVybl9zZXR1cCgKLQkJCQkJCQkmZHNpX2N0cmwtPmh3LAotCQkJCQkJCURTSV9URVNUX1BBVFRF Uk5fSU5DLAotCQkJCQkJCTB4RkZGRiwKLQkJCQkJCQkweDApOwotCQl9Ci0JfQotCWRzaV9jdHJs LT5ody5vcHMudGVzdF9wYXR0ZXJuX2VuYWJsZSgmZHNpX2N0cmwtPmh3LCBvbik7Ci0KLQlwcl9k ZWJ1ZygiW0RTSV8lZF1TZXQgdGVzdCBwYXR0ZXJuIHN0YXRlPSVkXG4iLAotCQlkc2lfY3RybC0+ Y2VsbF9pbmRleCwgb24pOwotCWRzaV9jdHJsX3VwZGF0ZV9zdGF0ZShkc2lfY3RybCwgRFNJX0NU UkxfT1BfVFBHLCBvbik7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xv Y2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfaG9zdF9lbmdpbmVf c3RhdGUoKSAtIHNldCBob3N0IGVuZ2luZSBzdGF0ZQotICogQGRzaV9jdHJsOiAgICAgICAgICAg IERTSSBDb250cm9sbGVyIGhhbmRsZS4KLSAqIEBzdGF0ZTogICAgICAgICAgICAgICBFbmdpbmUg c3RhdGUuCi0gKgotICogSG9zdCBlbmdpbmUgc3RhdGUgY2FuIGJlIG1vZGlmaWVkIG9ubHkgd2hl biBEU0kgY29udHJvbGxlciBwb3dlciBzdGF0ZSBpcwotICogc2V0IHRvIERTSV9DVFJMX1BPV0VS X0xJTktfQ0xLX09OIGFuZCBjbWQsIHZpZGVvIGVuZ2luZXMgYXJlIGRpc2FibGVkLgotICoKLSAq IFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9z dGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCSAgIGVudW0gZHNpX2VuZ2luZV9z dGF0ZSBzdGF0ZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfY3RybCB8fCAoc3RhdGUg Pj0gRFNJX0NUUkxfRU5HSU5FX01BWCkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xv Y2spOwotCi0JcmMgPSBkc2lfY3RybF9jaGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1Bf SE9TVF9FTkdJTkUsIHN0YXRlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBDb250 cm9sbGVyIHN0YXRlIGNoZWNrIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+ Y2VsbF9pbmRleCwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChzdGF0ZSA9PSBEU0lf Q1RSTF9FTkdJTkVfT04pCi0JCWRzaV9jdHJsLT5ody5vcHMuY3RybF9lbigmZHNpX2N0cmwtPmh3 LCB0cnVlKTsKLQllbHNlCi0JCWRzaV9jdHJsLT5ody5vcHMuY3RybF9lbigmZHNpX2N0cmwtPmh3 LCBmYWxzZSk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gU2V0IGhvc3QgZW5naW5lIHN0YXRlID0g JWRcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4LAotCQkgc3RhdGUpOwotCWRzaV9jdHJsX3VwZGF0 ZV9zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfSE9TVF9FTkdJTkUsIHN0YXRlKTsKLWVycm9y OgotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQot Ci0vKioKLSAqIGRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKCkgLSBzZXQgY29tbWFuZCBl bmdpbmUgc3RhdGUKLSAqIEBkc2lfY3RybDogICAgICAgICAgICBEU0kgQ29udHJvbGxlciBoYW5k bGUuCi0gKiBAc3RhdGU6ICAgICAgICAgICAgICAgRW5naW5lIHN0YXRlLgotICoKLSAqIENvbW1h bmQgZW5naW5lIHN0YXRlIGNhbiBiZSBtb2RpZmllZCBvbmx5IHdoZW4gRFNJIGNvbnRyb2xsZXIg cG93ZXIgc3RhdGUgaXMKLSAqIHNldCB0byBEU0lfQ1RSTF9QT1dFUl9MSU5LX0NMS19PTi4KLSAq Ci0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfY21kX2VuZ2lu ZV9zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCSAgZW51bSBkc2lfZW5naW5l X3N0YXRlIHN0YXRlKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsIHx8IChzdGF0 ZSA+PSBEU0lfQ1RSTF9FTkdJTkVfTUFYKSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4i KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxf bG9jayk7Ci0KLQlyYyA9IGRzaV9jdHJsX2NoZWNrX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9P UF9DTURfRU5HSU5FLCBzdGF0ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiW0RTSV8lZF0gQ29u dHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2N0cmwt PmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoc3RhdGUgPT0gRFNJ X0NUUkxfRU5HSU5FX09OKQotCQlkc2lfY3RybC0+aHcub3BzLmNtZF9lbmdpbmVfZW4oJmRzaV9j dHJsLT5odywgdHJ1ZSk7Ci0JZWxzZQotCQlkc2lfY3RybC0+aHcub3BzLmNtZF9lbmdpbmVfZW4o JmRzaV9jdHJsLT5odywgZmFsc2UpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFNldCBjbWQgZW5n aW5lIHN0YXRlID0gJWRcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4LAotCQkgc3RhdGUpOwotCWRz aV9jdHJsX3VwZGF0ZV9zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfQ01EX0VOR0lORSwgc3Rh dGUpOwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1 cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X3ZpZF9lbmdpbmVfc3RhdGUoKSAtIHNl dCB2aWRlbyBlbmdpbmUgc3RhdGUKLSAqIEBkc2lfY3RybDogICAgICAgICAgICBEU0kgQ29udHJv bGxlciBoYW5kbGUuCi0gKiBAc3RhdGU6ICAgICAgICAgICAgICAgRW5naW5lIHN0YXRlLgotICoK LSAqIFZpZGVvIGVuZ2luZSBzdGF0ZSBjYW4gYmUgbW9kaWZpZWQgb25seSB3aGVuIERTSSBjb250 cm9sbGVyIHBvd2VyIHN0YXRlIGlzCi0gKiBzZXQgdG8gRFNJX0NUUkxfUE9XRVJfTElOS19DTEtf T04uCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0X3Zp ZF9lbmdpbmVfc3RhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCQkgIGVudW0gZHNp X2VuZ2luZV9zdGF0ZSBzdGF0ZSkKLXsKLQlpbnQgcmMgPSAwOwotCWJvb2wgb247Ci0KLQlpZiAo IWRzaV9jdHJsIHx8IChzdGF0ZSA+PSBEU0lfQ1RSTF9FTkdJTkVfTUFYKSkgewotCQlwcl9lcnIo IkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9j aygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRzaV9jdHJsX2NoZWNrX3N0YXRlKGRz aV9jdHJsLCBEU0lfQ1RSTF9PUF9WSURfRU5HSU5FLCBzdGF0ZSk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiW0RTSV8lZF0gQ29udHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLAot CQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0K LQlvbiA9IChzdGF0ZSA9PSBEU0lfQ1RSTF9FTkdJTkVfT04pID8gdHJ1ZSA6IGZhbHNlOwotCWRz aV9jdHJsLT5ody5vcHMudmlkZW9fZW5naW5lX2VuKCZkc2lfY3RybC0+aHcsIG9uKTsKLQotCS8q IHBlcmZvcm0gYSByZXNldCB3aGVuIHR1cm5pbmcgb2ZmIHZpZGVvIGVuZ2luZSAqLwotCWlmICgh b24pCi0JCWRzaV9jdHJsLT5ody5vcHMuc29mdF9yZXNldCgmZHNpX2N0cmwtPmh3KTsKLQotCXBy X2RlYnVnKCJbRFNJXyVkXSBTZXQgdmlkZW8gZW5naW5lIHN0YXRlID0gJWRcbiIsIGRzaV9jdHJs LT5jZWxsX2luZGV4LAotCQkgc3RhdGUpOwotCWRzaV9jdHJsX3VwZGF0ZV9zdGF0ZShkc2lfY3Ry bCwgRFNJX0NUUkxfT1BfVklEX0VOR0lORSwgc3RhdGUpOwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2Nr KCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0 cmxfc2V0X3VscHMoKSAtIHNldCBVTFBTIHN0YXRlIGZvciBEU0kgbGFuZXMuCi0gKiBAZHNpX2N0 cmw6CQlEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZW5hYmxlOgkJZW5hYmxlL2Rpc2FibGUg VUxQUy4KLSAqCi0gKiBVTFBTIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIGFmdGVyIERTSSBob3N0 IGVuZ2luZSBpcyB0dXJuZWQgb24uCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1p bnQgZHNpX2N0cmxfc2V0X3VscHMoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwgYm9vbCBlbmFi bGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZh bGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRz aV9jdHJsLT5jdHJsX2xvY2spOwotCi0JaWYgKGVuYWJsZSkKLQkJcmMgPSBkc2lfZW5hYmxlX3Vs cHMoZHNpX2N0cmwpOwotCWVsc2UKLQkJcmMgPSBkc2lfZGlzYWJsZV91bHBzKGRzaV9jdHJsKTsK LQotCWlmIChyYykgewotCQlwcl9lcnIoIltEU0lfJWRdIFVscHMgc3RhdGUgY2hhbmdlKCVkKSBm YWlsZWQsIHJjPSVkXG4iLAotCQkJZHNpX2N0cmwtPmNlbGxfaW5kZXgsIGVuYWJsZSwgcmMpOwot CQlnb3RvIGVycm9yOwotCX0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gVUxQUyBzdGF0ZSA9ICVkXG4i LCBkc2lfY3RybC0+Y2VsbF9pbmRleCwgZW5hYmxlKTsKLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2Nr KCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0 cmxfc2V0X2NsYW1wX3N0YXRlKCkgLSBzZXQgY2xhbXAgc3RhdGUgZm9yIERTSSBwaHkKLSAqIEBk c2lfY3RybDogICAgICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGVuYWJsZTog ICAgICAgICAgICAgICBlbmFibGUvZGlzYWJsZSBjbGFtcGluZy4KLSAqCi0gKiBDbGFtcHMgY2Fu IGJlIGVuYWJsZWQvZGlzYWJsZWQgd2hpbGUgRFNJIGNvbnRyb2xsZXIgaXMgc3RpbGwgdHVybmVk IG9uLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3NldF9j bGFtcF9zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQlib29sIGVuYWJsZSwgYm9v bCB1bHBzX2VuYWJsZWQpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwpIHsKLQkJ cHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlm ICghZHNpX2N0cmwtPmh3Lm9wcy5jbGFtcF9lbmFibGUgfHwKLQkJCSFkc2lfY3RybC0+aHcub3Bz LmNsYW1wX2Rpc2FibGUpIHsKLQkJcHJfZGVidWcoIk5vIGNsYW1wIGNvbnRyb2wgZm9yIERTSSBj b250cm9sbGVyXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwt PmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRzaV9lbmFibGVfaW9fY2xhbXAoZHNpX2N0cmwsIGVuYWJs ZSwgdWxwc19lbmFibGVkKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBGYWlsZWQg dG8gZW5hYmxlIElPIGNsYW1wXG4iLAotCQkJZHNpX2N0cmwtPmNlbGxfaW5kZXgpOwotCQlnb3Rv IGVycm9yOwotCX0KLQotCXByX2RlYnVnKCJbRFNJXyVkXSBDbGFtcCBzdGF0ZSA9ICVkXG4iLCBk c2lfY3RybC0+Y2VsbF9pbmRleCwgZW5hYmxlKTsKLWVycm9yOgotCW11dGV4X3VubG9jaygmZHNp X2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX3Nl dF9jbG9ja19zb3VyY2UoKSAtIHNldCBjbG9jayBzb3VyY2UgZnByIGRzaSBsaW5rIGNsb2Nrcwot ICogQGRzaV9jdHJsOiAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQHNvdXJjZV9j bGtzOiAgICAgU291cmNlIGNsb2NrcyBmb3IgRFNJIGxpbmsgY2xvY2tzLgotICoKLSAqIENsb2Nr IHNvdXJjZSBzaG91bGQgYmUgY2hhbmdlZCB3aGlsZSBsaW5rIGNsb2NrcyBhcmUgZGlzYWJsZWQu Ci0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0X2Nsb2Nr X3NvdXJjZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJICAgICAgc3RydWN0IGRzaV9j bGtfbGlua19zZXQgKnNvdXJjZV9jbGtzKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9j dHJsIHx8ICFzb3VyY2VfY2xrcykgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7 Ci0KLQlyYyA9IGRzaV9jbGtfdXBkYXRlX3BhcmVudChzb3VyY2VfY2xrcywgJmRzaV9jdHJsLT5j bGtfaW5mby5yY2dfY2xrcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiW0RTSV8lZF1GYWlsZWQg dG8gdXBkYXRlIGxpbmsgY2xrIHBhcmVudCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+ Y2VsbF9pbmRleCwgcmMpOwotCQkodm9pZClkc2lfY2xrX3VwZGF0ZV9wYXJlbnQoJmRzaV9jdHJs LT5jbGtfaW5mby5wbGxfb3BfY2xrcywKLQkJCQkJICAgICZkc2lfY3RybC0+Y2xrX2luZm8ucmNn X2Nsa3MpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWRzaV9jdHJsLT5jbGtfaW5mby5wbGxfb3Bf Y2xrcy5ieXRlX2NsayA9IHNvdXJjZV9jbGtzLT5ieXRlX2NsazsKLQlkc2lfY3RybC0+Y2xrX2lu Zm8ucGxsX29wX2Nsa3MucGl4ZWxfY2xrID0gc291cmNlX2Nsa3MtPnBpeGVsX2NsazsKLQotCXBy X2RlYnVnKCJbRFNJXyVkXSBTb3VyY2UgY2xvY2tzIGFyZSB1cGRhdGVkXG4iLCBkc2lfY3RybC0+ Y2VsbF9pbmRleCk7Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9j ayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX3NldHVwX21pc3IoKSAtIFNl dHVwIGZyYW1lIE1JU1IKLSAqIEBkc2lfY3RybDogICAgICAgICAgICAgIERTSSBjb250cm9sbGVy IGhhbmRsZS4KLSAqIEBlbmFibGU6ICAgICAgICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIE1JU1Iu Ci0gKiBAZnJhbWVfY291bnQ6ICAgICAgICAgICBOdW1iZXIgb2YgZnJhbWVzIHRvIGFjY3VtdWxh dGUgTUlTUi4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9z ZXR1cF9taXNyKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQlib29sIGVuYWJsZSwKLQkJ CXUzMiBmcmFtZV9jb3VudCkKLXsKLQlpZiAoIWRzaV9jdHJsKSB7Ci0JCXByX2VycigiSW52YWxp ZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWRzaV9jdHJsLT5o dy5vcHMuc2V0dXBfbWlzcikKLQkJcmV0dXJuIDA7Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+ Y3RybF9sb2NrKTsKLQlkc2lfY3RybC0+bWlzcl9lbmFibGUgPSBlbmFibGU7Ci0JZHNpX2N0cmwt Pmh3Lm9wcy5zZXR1cF9taXNyKCZkc2lfY3RybC0+aHcsCi0JCQlkc2lfY3RybC0+aG9zdF9jb25m aWcucGFuZWxfbW9kZSwKLQkJCWVuYWJsZSwgZnJhbWVfY291bnQpOwotCW11dGV4X3VubG9jaygm ZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxf Y29sbGVjdF9taXNyKCkgLSBSZWFkIGZyYW1lIE1JU1IKLSAqIEBkc2lfY3RybDogICAgICAgICAg ICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0gKiBSZXR1cm46IE1JU1IgdmFsdWUuCi0g Ki8KLXUzMiBkc2lfY3RybF9jb2xsZWN0X21pc3Ioc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkK LXsKLQl1MzIgbWlzcjsKLQotCWlmICghZHNpX2N0cmwgfHwgIWRzaV9jdHJsLT5ody5vcHMuY29s bGVjdF9taXNyKQotCQlyZXR1cm4gMDsKLQotCW1pc3IgPSBkc2lfY3RybC0+aHcub3BzLmNvbGxl Y3RfbWlzcigmZHNpX2N0cmwtPmh3LAotCQkJCWRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9t b2RlKTsKLQlpZiAoIW1pc3IpCi0JCW1pc3IgPSBkc2lfY3RybC0+bWlzcl9jYWNoZTsKLQotCXBy X2RlYnVnKCJEU0lfJWQgY2FjaGVkIG1pc3IgPSAleCwgZmluYWwgPSAleFxuIiwKLQkJZHNpX2N0 cmwtPmNlbGxfaW5kZXgsIGRzaV9jdHJsLT5taXNyX2NhY2hlLCBtaXNyKTsKLQotCXJldHVybiBt aXNyOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX2Rydl9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgcGxh dGZvcm0gZHJpdmVyIGZvciBkc2kgY29udHJvbGxlcgotICovCi12b2lkIGRzaV9jdHJsX2Rydl9y ZWdpc3Rlcih2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZHNpX2N0cmxfZHJp dmVyKTsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9kcnZfdW5yZWdpc3RlcigpIC0gdW5yZWdpc3Rl ciBwbGF0Zm9ybSBkcml2ZXIKLSAqLwotdm9pZCBkc2lfY3RybF9kcnZfdW5yZWdpc3Rlcih2b2lk KQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkc2lfY3RybF9kcml2ZXIpOwotfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybC5oIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybC5oCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAxODI2MzcyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZHNpLXN0YWdpbmcvZHNpX2N0cmwuaAorKysgL2Rldi9udWxsCkBAIC0xLDYyMyArMCwwIEBA Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAq IG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RTSV9D VFJMX0hfCi0jZGVmaW5lIF9EU0lfQ1RSTF9IXwotCi0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5o PgotCi0jaW5jbHVkZSAiZHNpX2RlZnMuaCIKLSNpbmNsdWRlICJkc2lfY3RybF9ody5oIgotI2lu Y2x1ZGUgImRzaV9jbGsuaCIKLSNpbmNsdWRlICJkc2lfcHdyLmgiCi0jaW5jbHVkZSA8ZHJtL2Ry bV9taXBpX2RzaS5oPgotCi0vKgotICogRFNJIENvbW1hbmQgdHJhbnNmZXIgbW9kaWZpZXJzCi0g KiBARFNJX0NUUkxfQ01EX1JFQUQ6ICAgICAgICAgICAgIFRoZSBjdXJyZW50IHRyYW5zZmVyIGlu dm9sdmVzIHJlYWRpbmcgZGF0YS4KLSAqIEBEU0lfQ1RSTF9DTURfQlJPQURDQVNUOiAgICAgICAg VGhlIGN1cnJlbnQgdHJhbnNmZXIgbmVlZHMgdG8gYmUgZG9uZSBpbgotICoJCQkJICAgYnJvYWRj YXN0IG1vZGUgdG8gbXVsdGlwbGUgc2xhdmVzLgotICogQERTSV9DVFJMX0NNRF9CUk9BRENBU1Rf TUFTVEVSOiBUaGlzIGNvbnRyb2xsZXIgaXMgdGhlIG1hc3RlciBhbmQgdGhlIHNsYXZlcwotICoJ CQkJICAgc3luYyB0byB0aGlzIHRyaWdnZXIuCi0gKiBARFNJX0NUUkxfQ01EX0RFRkVSX1RSSUdH RVI6ICAgIERlZmVyIHRoZSBjb21tYW5kIHRyaWdnZXIgdG8gbGF0ZXIuCi0gKiBARFNJX0NUUkxf Q01EX0ZJRk9fU1RPUkU6ICAgICAgIFVzZSBGSUZPIGZvciBjb21tYW5kIHRyYW5zZmVyIGluIHBs YWNlIG9mCi0gKgkJCQkgICByZWFkaW5nIGRhdGEgZnJvbSBtZW1vcnkuCi0gKiBARFNJX0NUUkxf Q01EX0ZFVENIX01FTU9SWTogICAgIEZldGNoIGNvbW1hbmQgZnJvbSBtZW1vcnkgdGhyb3VnaCBB WEkgYnVzCi0gKgkJCQkgICBhbmQgdHJhbnNmZXIgaXQuCi0gKi8KLSNkZWZpbmUgRFNJX0NUUkxf Q01EX1JFQUQgICAgICAgICAgICAgMHgxCi0jZGVmaW5lIERTSV9DVFJMX0NNRF9CUk9BRENBU1Qg ICAgICAgIDB4MgotI2RlZmluZSBEU0lfQ1RSTF9DTURfQlJPQURDQVNUX01BU1RFUiAweDQKLSNk ZWZpbmUgRFNJX0NUUkxfQ01EX0RFRkVSX1RSSUdHRVIgICAgMHg4Ci0jZGVmaW5lIERTSV9DVFJM X0NNRF9GSUZPX1NUT1JFICAgICAgIDB4MTAKLSNkZWZpbmUgRFNJX0NUUkxfQ01EX0ZFVENIX01F TU9SWSAgICAgMHgyMAotCi0vKioKLSAqIGVudW0gZHNpX3Bvd2VyX3N0YXRlIC0gZGVmaW5lcyBw b3dlciBzdGF0ZXMgZm9yIGRzaSBjb250cm9sbGVyLgotICogQERTSV9DVFJMX1BPV0VSX1ZSRUdf T0ZGOiAgICBEaWdpdGFsIGFuZCBhbmFsb2cgc3VwcGxpZXMgZm9yIERTSSBjb250cm9sbGVyCi0J CQkJdHVybmVkIG9mZgotICogQERTSV9DVFJMX1BPV0VSX1ZSRUdfT046ICAgICBEaWdpdGFsIGFu ZCBhbmFsb2cgc3VwcGxpZXMgZm9yIERTSSBjb250cm9sbGVyCi0gKiBARFNJX0NUUkxfUE9XRVJf TUFYOiAgICAgICAgIE1heGltdW0gdmFsdWUuCi0gKi8KLWVudW0gZHNpX3Bvd2VyX3N0YXRlIHsK LQlEU0lfQ1RSTF9QT1dFUl9WUkVHX09GRiA9IDAsCi0JRFNJX0NUUkxfUE9XRVJfVlJFR19PTiwK LQlEU0lfQ1RSTF9QT1dFUl9NQVgsCi19OwotCi0vKioKLSAqIGVudW0gZHNpX2VuZ2luZV9zdGF0 ZSAtIGRlZmluZSBlbmdpbmUgc3RhdHVzIGZvciBkc2kgY29udHJvbGxlci4KLSAqIEBEU0lfQ1RS TF9FTkdJTkVfT0ZGOiAgRW5naW5lIGlzIHR1cm5lZCBvZmYuCi0gKiBARFNJX0NUUkxfRU5HSU5F X09OOiAgIEVuZ2luZSBpcyB0dXJuZWQgb24uCi0gKiBARFNJX0NUUkxfRU5HSU5FX01BWDogIE1h eGltdW0gdmFsdWUuCi0gKi8KLWVudW0gZHNpX2VuZ2luZV9zdGF0ZSB7Ci0JRFNJX0NUUkxfRU5H SU5FX09GRiA9IDAsCi0JRFNJX0NUUkxfRU5HSU5FX09OLAotCURTSV9DVFJMX0VOR0lORV9NQVgs Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfY3RybF9wb3dlcl9pbmZvIC0gZGlnaXRhbCBhbmQg YW5hbG9nIHBvd2VyIHN1cHBsaWVzIGZvciBkc2kgaG9zdAotICogQGRpZ2l0YWw6ICBEaWdpdGFs IHBvd2VyIHN1cHBseSByZXF1aXJlZCB0byB0dXJuIG9uIERTSSBjb250cm9sbGVyIGhhcmR3YXJl LgotICogQGhvc3RfcHdyOiBBbmFsb2cgcG93ZXIgc3VwcGxpZXMgcmVxdWlyZWQgdG8gdHVybiBv biBEU0kgY29udHJvbGxlciBoYXJkd2FyZS4KLSAqICAgICAgICAgICAgRXZlbiB0aG91Z2ggRFNJ IGNvbnRyb2xsZXIgaXQgc2VsZiBkb2VzIG5vdCByZXF1aXJlIGFuIGFuYWxvZwotICogICAgICAg ICAgICBwb3dlciBzdXBwbHksIHN1cHBsaWVzIHJlcXVpcmVkIGZvciBQTEwgY2FuIGJlIGRlZmlu ZWQgaGVyZSB0bwotICogICAgICAgICAgICBhbGxvdyBwcm9wZXIgY29udHJvbCBvdmVyIHRoZXNl IHN1cHBsaWVzLgotICovCi1zdHJ1Y3QgZHNpX2N0cmxfcG93ZXJfaW5mbyB7Ci0Jc3RydWN0IGRz aV9yZWd1bGF0b3JfaW5mbyBkaWdpdGFsOwotCXN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gaG9z dF9wd3I7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfY3RybF9jbGtfaW5mbyAtIGNsb2NrIGlu Zm9ybWF0aW9uIGZvciBEU0kgY29udHJvbGxlcgotICogQGNvcmVfY2xrczogICAgICAgICAgQ29y ZSBjbG9ja3MgbmVlZGVkIHRvIGFjY2VzcyBEU0kgY29udHJvbGxlciByZWdpc3RlcnMuCi0gKiBA bGlua19jbGtzOiAgICAgICAgICBMaW5rIGNsb2NrcyByZXF1aXJlZCB0byB0cmFuc21pdCBkYXRh IG92ZXIgRFNJIGxpbmsuCi0gKiBAcmNnX2Nsa3M6ICAgICAgICAgICBSb290IGNsb2NrIGdlbmVy YXRpb24gY2xvY2tzIGdlbmVyYXRlZCBpbiBNTVNTX0NDLiBUaGUKLSAqCQkJb3V0cHV0IG9mIHRo ZSBQTEwgaXMgc2V0IGFzIHBhcmVudCBmb3IgdGhlc2Ugcm9vdAotICoJCQljbG9ja3MuIFRoZXNl IGNsb2NrcyBhcmUgc3BlY2lmaWMgdG8gY29udHJvbGxlcgotICoJCQlpbnN0YW5jZS4KLSAqIEBt dXhfY2xrczogICAgICAgICAgIE11eCBjbG9ja3MgdXNlZCBmb3IgRHluYW1pYyByZWZyZXNoIGZl YXR1cmUuCi0gKiBAZXh0X2Nsa3M6ICAgICAgICAgICBFeHRlcm5hbCBieXRlL3BpeGVsIGNsb2Nr cyBmcm9tIHRoZSBNTVNTIGJsb2NrLiBUaGVzZQotICoJCQljbG9ja3MgYXJlIHNldCBhcyBwYXJl bnQgdG8gcmNnIGNsb2Nrcy4KLSAqIEBwbGxfb3BfY2xrczogICAgICAgIFRPRE86Ci0gKiBAc2hh ZG93X2Nsa3M6ICAgICAgICBUT0RPOgotICovCi1zdHJ1Y3QgZHNpX2N0cmxfY2xrX2luZm8gewot CS8qIENsb2NrcyBwYXJzZWQgZnJvbSBEVCAqLwotCXN0cnVjdCBkc2lfY29yZV9jbGtfaW5mbyBj b3JlX2Nsa3M7Ci0Jc3RydWN0IGRzaV9saW5rX2Nsa19pbmZvIGxpbmtfY2xrczsKLQlzdHJ1Y3Qg ZHNpX2Nsa19saW5rX3NldCByY2dfY2xrczsKLQotCS8qIENsb2NrcyBzZXQgYnkgRFNJIE1hbmFn ZXIgKi8KLQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCBtdXhfY2xrczsKLQlzdHJ1Y3QgZHNpX2Ns a19saW5rX3NldCBleHRfY2xrczsKLQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCBwbGxfb3BfY2xr czsKLQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCBzaGFkb3dfY2xrczsKLX07Ci0KLS8qKgotICog c3RydWN0IGRzaV9jdHJsX2J1c19zY2FsZV9pbmZvIC0gQnVzIHNjYWxlIGluZm8gZm9yIG1zbS1i dXMgYmFuZHdpZHRoIHZvdGluZwotICogQGJ1c19zY2FsZV90YWJsZTogICAgICAgIEJ1cyBzY2Fs ZSB2b3RpbmcgdXNlY2FzZXMuCi0gKiBAYnVzX2hhbmRsZTogICAgICAgICAgICAgSGFuZGxlIHVz ZWQgZm9yIHZvdGluZyBiYW5kd2lkdGguCi0gKi8KLXN0cnVjdCBkc2lfY3RybF9idXNfc2NhbGVf aW5mbyB7Ci0Jc3RydWN0IG1zbV9idXNfc2NhbGVfcGRhdGEgKmJ1c19zY2FsZV90YWJsZTsKLQl1 MzIgYnVzX2hhbmRsZTsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9jdHJsX3N0YXRlX2luZm8g LSBjdXJyZW50IGRyaXZlciBzdGF0ZSBpbmZvcm1hdGlvbgotICogQHBvd2VyX3N0YXRlOiAgICAg ICAgU3RhdHVzIG9mIHBvd2VyIHN0YXRlcyBvbiBEU0kgY29udHJvbGxlci4KLSAqIEBjbWRfZW5n aW5lX3N0YXRlOiAgIFN0YXR1cyBvZiBEU0kgY29tbWFuZCBlbmdpbmUuCi0gKiBAdmlkX2VuZ2lu ZV9zdGF0ZTogICBTdGF0dXMgb2YgRFNJIHZpZGVvIGVuZ2luZS4KLSAqIEBjb250cm9sbGVyX3N0 YXRlOiAgIFN0YXR1cyBvZiBEU0kgQ29udHJvbGxlciBlbmdpbmUuCi0gKiBAaG9zdF9pbml0aWFs aXplZDoJQm9vbGVhbiB0byBpbmRpY2F0ZSBzdGF0dXMgb2YgRFNpIGhvc3QgSW5pdGlhbGl6YXRp b24KLSAqIEB0cGdfZW5hYmxlZDogICAgICAgIEJvb2xlYW4gdG8gaW5kaWNhdGUgd2hldGhlciB0 cGcgaXMgZW5hYmxlZC4KLSAqLwotc3RydWN0IGRzaV9jdHJsX3N0YXRlX2luZm8gewotCWVudW0g ZHNpX3Bvd2VyX3N0YXRlIHBvd2VyX3N0YXRlOwotCWVudW0gZHNpX2VuZ2luZV9zdGF0ZSBjbWRf ZW5naW5lX3N0YXRlOwotCWVudW0gZHNpX2VuZ2luZV9zdGF0ZSB2aWRfZW5naW5lX3N0YXRlOwot CWVudW0gZHNpX2VuZ2luZV9zdGF0ZSBjb250cm9sbGVyX3N0YXRlOwotCWJvb2wgaG9zdF9pbml0 aWFsaXplZDsKLQlib29sIHRwZ19lbmFibGVkOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2N0 cmxfaW50ZXJydXB0cyAtIGRlZmluZSBpbnRlcnJ1cHQgaW5mb3JtYXRpb24KLSAqIEBpcnFfbG9j azogICAgICAgICAgICBTcGlubG9jayBmb3IgSVNSIGhhbmRsZXIuCi0gKiBAaXJxX251bTogICAg ICAgICAgICAgTGludXggaW50ZXJydXB0IG51bWJlciBhc3NvY2lhdGVkIHdpdGggZGV2aWNlLgot ICogQGlycV9zdGF0X21hc2s6ICAgICAgIEhhcmR3YXJlIG1hc2sgb2YgY3VycmVudGx5IGVuYWJs ZWQgaW50ZXJydXB0cy4KLSAqIEBpcnFfc3RhdF9yZWZjb3VudDogICBOdW1iZXIgb2YgdGltZXMg ZWFjaCBpbnRlcnJ1cHQgaGFzIGJlZW4gcmVxdWVzdGVkLgotICogQGlycV9zdGF0X2NiOiAgICAg ICAgIFN0YXR1cyBJUlEgY2FsbGJhY2sgZGVmaW5pdGlvbnMuCi0gKiBAY21kX2RtYV9kb25lOiAg ICAgICAgICBDb21wbGV0aW9uIHNpZ25hbCBmb3IgRFNJX0NNRF9NT0RFX0RNQV9ET05FIGludGVy cnVwdAotICogQHZpZF9mcmFtZV9kb25lOiAgICAgICAgQ29tcGxldGlvbiBzaWduYWwgZm9yIERT SV9WSURFT19NT0RFX0ZSQU1FX0RPTkUgaW50LgotICogQGNtZF9mcmFtZV9kb25lOiAgICAgICAg Q29tcGxldGlvbiBzaWduYWwgZm9yIERTSV9DTURfRlJBTUVfRE9ORSBpbnRlcnJ1cHQuCi0gKi8K LXN0cnVjdCBkc2lfY3RybF9pbnRlcnJ1cHRzIHsKLQlzcGlubG9ja190IGlycV9sb2NrOwotCWlu dCBpcnFfbnVtOwotCXVpbnQzMl90IGlycV9zdGF0X21hc2s7Ci0JaW50IGlycV9zdGF0X3JlZmNv dW50W0RTSV9TVEFUVVNfSU5URVJSVVBUX0NPVU5UXTsKLQlzdHJ1Y3QgZHNpX2V2ZW50X2NiX2lu Zm8gaXJxX3N0YXRfY2JbRFNJX1NUQVRVU19JTlRFUlJVUFRfQ09VTlRdOwotCi0Jc3RydWN0IGNv bXBsZXRpb24gY21kX2RtYV9kb25lOwotCXN0cnVjdCBjb21wbGV0aW9uIHZpZF9mcmFtZV9kb25l OwotCXN0cnVjdCBjb21wbGV0aW9uIGNtZF9mcmFtZV9kb25lOwotCXN0cnVjdCBjb21wbGV0aW9u IGJ0YV9kb25lOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2N0cmwgLSBEU0kgY29udHJvbGxl ciBvYmplY3QKLSAqIEBwZGV2OiAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHBsYXRmb3JtIGRl dmljZS4KLSAqIEBjZWxsX2luZGV4OiAgICAgICAgICBJbnN0YW5jZSBjZWxsIGlkLgotICogQGhv cml6X2luZGV4OiAgICAgICAgIEluZGV4IGluIHBoeXNpY2FsIGhvcml6b250YWwgQ1RSTCBsYXlv dXQsIDAgPSBsZWZ0bW9zdAotICogQG5hbWU6ICAgICAgICAgICAgICAgIE5hbWUgb2YgdGhlIGNv bnRyb2xsZXIgaW5zdGFuY2UuCi0gKiBAcmVmY291bnQ6ICAgICAgICAgICAgcmVmIGNvdW50ZXIu Ci0gKiBAY3RybF9sb2NrOiAgICAgICAgICAgTXV0ZXggZm9yIGhhcmR3YXJlIGFuZCBvYmplY3Qg YWNjZXNzLgotICogQGRybV9kZXY6ICAgICAgICAgICAgIFBvaW50ZXIgdG8gRFJNIGRldmljZS4K LSAqIEB2ZXJzaW9uOiAgICAgICAgICAgICBEU0kgY29udHJvbGxlciB2ZXJzaW9uLgotICogQGh3 OiAgICAgICAgICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhcmR3YXJlIG9iamVjdC4KLSAqIEBj dXJyZW50X3N0YXRlOiAgICAgICBDdXJyZW50IGRyaXZlciBhbmQgaGFyZHdhcmUgc3RhdGUuCi0g KiBAY2xrX2NiOgkJIENhbGxiYWNrIGZvciBEU0kgY2xvY2sgY29udHJvbC4KLSAqIEBpcnFfaW5m bzogICAgICAgICAgICBJbnRlcnJ1cHQgaW5mb3JtYXRpb24uCi0gKiBAY2xrX2luZm86ICAgICAg ICAgICAgQ2xvY2sgaW5mb3JtYXRpb24uCi0gKiBAY2xrX2ZyZXE6ICAgICAgICAgICAgRFNpIExp bmsgY2xvY2sgZnJlcXVlbmN5IGluZm9ybWF0aW9uLgotICogQHB3cl9pbmZvOiAgICAgICAgICAg IFBvd2VyIGluZm9ybWF0aW9uLgotICogQGF4aV9idXNfaW5mbzogICAgICAgIEFYSSBidXMgaW5m b3JtYXRpb24uCi0gKiBAaG9zdF9jb25maWc6ICAgICAgICAgQ3VycmVudCBob3N0IGNvbmZpZ3Vy YXRpb24uCi0gKiBAbW9kZV9ib3VuZHM6ICAgICAgICAgQm91bmRhcmllcyBvZiB0aGUgZGVmYXVs dCBtb2RlIFJPSS4KLSAqICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW4gaXMgYXQgdG9wIGxl ZnQgb2YgYWxsIENUUkxzLgotICogQHJvaTogICAgICAgICAgICAgICAgIFBhcnRpYWwgdXBkYXRl IHJlZ2lvbiBvZiBpbnRlcmVzdC4KLSAqICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW4gaXMg dG9wIGxlZnQgb2YgdGhpcyBDVFJMLgotICogQHR4X2NtZF9idWY6ICAgICAgICAgIFR4IGNvbW1h bmQgYnVmZmVyLgotICogQGNtZF9idWZmZXJfaW92YTogICAgIGNtZCBidWZmZXIgbWFwcGVkIGFk ZHJlc3MuCi0gKiBAdmFkZHI6CQkgQ1BVIHZpcnR1YWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyLgot ICogQGNtZF9idWZmZXJfc2l6ZTogICAgIFNpemUgb2YgY29tbWFuZCBidWZmZXIuCi0gKiBAZGVi dWdmc19yb290OiAgICAgICAgUm9vdCBmb3IgZGVidWdmcyBlbnRyaWVzLgotICogQG1pc3JfZW5h YmxlOiAgICAgICAgIEZyYW1lIE1JU1IgZW5hYmxlL2Rpc2FibGUKLSAqIEBtaXNyX2NhY2hlOiAg ICAgICAgICBDYWNoZWQgRnJhbWUgTUlTUiB2YWx1ZQotICogQHBoeV9pc29sYXRpb25fZW5hYmxl ZDogICAgQSBib29sZWFuIHByb3BlcnR5IGFsbG93cyB0byBpc29sYXRlIHRoZSBwaHkgZnJvbQot ICogICAgICAgICAgICAgICAgICAgICAgICAgIGRzaSBjb250cm9sbGVyIGFuZCBydW4gb25seSBk c2kgY29udHJvbGxlci4KLSAqLwotc3RydWN0IGRzaV9jdHJsIHsKLQlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2OwotCXUzMiBjZWxsX2luZGV4OwotCXUzMiBob3Jpel9pbmRleDsKLQljb25z dCBjaGFyICpuYW1lOwotCXUzMiByZWZjb3VudDsKLQlzdHJ1Y3QgbXV0ZXggY3RybF9sb2NrOwot CXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2OwotCi0JZW51bSBkc2lfY3RybF92ZXJzaW9uIHZl cnNpb247Ci0Jc3RydWN0IGRzaV9jdHJsX2h3IGh3OwotCi0JLyogQ3VycmVudCBzdGF0ZSAqLwot CXN0cnVjdCBkc2lfY3RybF9zdGF0ZV9pbmZvIGN1cnJlbnRfc3RhdGU7Ci0Jc3RydWN0IGNsa19j dHJsX2NiIGNsa19jYjsKLQotCXN0cnVjdCBkc2lfY3RybF9pbnRlcnJ1cHRzIGlycV9pbmZvOwot Ci0JLyogQ2xvY2sgYW5kIHBvd2VyIHN0YXRlcyAqLwotCXN0cnVjdCBkc2lfY3RybF9jbGtfaW5m byBjbGtfaW5mbzsKLQlzdHJ1Y3QgbGlua19jbGtfZnJlcSBjbGtfZnJlcTsKLQlzdHJ1Y3QgZHNp X2N0cmxfcG93ZXJfaW5mbyBwd3JfaW5mbzsKLQlzdHJ1Y3QgZHNpX2N0cmxfYnVzX3NjYWxlX2lu Zm8gYXhpX2J1c19pbmZvOwotCi0Jc3RydWN0IGRzaV9ob3N0X2NvbmZpZyBob3N0X2NvbmZpZzsK LQlzdHJ1Y3QgZHNpX3JlY3QgbW9kZV9ib3VuZHM7Ci0Jc3RydWN0IGRzaV9yZWN0IHJvaTsKLQot CS8qIENvbW1hbmQgdHggYW5kIHJ4ICovCi0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICp0eF9jbWRf YnVmOwotCXUzMiBjbWRfYnVmZmVyX3NpemU7Ci0JdTMyIGNtZF9idWZmZXJfaW92YTsKLQl2b2lk ICp2YWRkcjsKLQotCS8qIERlYnVnIEluZm9ybWF0aW9uICovCi0Jc3RydWN0IGRlbnRyeSAqZGVi dWdmc19yb290OwotCi0JLyogTUlTUiAqLwotCWJvb2wgbWlzcl9lbmFibGU7Ci0JdTMyIG1pc3Jf Y2FjaGU7Ci0KLQlib29sIHBoeV9pc29sYXRpb25fZW5hYmxlZDsKLX07Ci0KLS8qKgotICogZHNp X2N0cmxfZ2V0KCkgLSBnZXQgYSBkc2lfY3RybCBoYW5kbGUgZnJvbSBhbiBvZl9ub2RlCi0gKiBA b2Zfbm9kZTogICAgb2Zfbm9kZSBvZiB0aGUgRFNJIGNvbnRyb2xsZXIuCi0gKgotICogR2V0cyB0 aGUgRFNJIGNvbnRyb2xsZXIgaGFuZGxlIGZvciB0aGUgY29ycmVzcG9uZGluZyBvZl9ub2RlLiBU aGUgcmVmIGNvdW50Ci0gKiBpcyBpbmNyZW1lbnRlZCB0byBvbmUgYW5kIGFsbCBzdWJzZXF1ZW50 IGdldHMgd2lsbCBmYWlsIHVudGlsIHRoZSBvcmlnaW5hbAotICogY2xpZW50cyBjYWxscyBhIHB1 dC4KLSAqCi0gKiBSZXR1cm46IERTSSBDb250cm9sbGVyIGhhbmRsZS4KLSAqLwotc3RydWN0IGRz aV9jdHJsICpkc2lfY3RybF9nZXQoc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKTsKLQotLyoq Ci0gKiBkc2lfY3RybF9wdXQoKSAtIHJlbGVhc2VzIGEgZHNpIGNvbnRyb2xsZXIgaGFuZGxlLgot ICogQGRzaV9jdHJsOiAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgotICogUmVsZWFz ZXMgdGhlIERTSSBjb250cm9sbGVyLiBEcml2ZXIgd2lsbCBjbGVhbiB1cCBhbGwgcmVzb3VyY2Vz IGFuZCBwdXRzIGJhY2sKLSAqIHRoZSBEU0kgY29udHJvbGxlciBpbnRvIHJlc2V0IHN0YXRlLgot ICovCi12b2lkIGRzaV9jdHJsX3B1dChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKTsKLQotLyoq Ci0gKiBkc2lfY3RybF9kcnZfaW5pdCgpIC0gaW5pdGlhbGl6ZSBkc2kgY29udHJvbGxlciBkcml2 ZXIuCi0gKiBAZHNpX2N0cmw6ICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQHBhcmVu dDogICAgICAgIFBhcmVudCBkaXJlY3RvcnkgZm9yIGRlYnVnIGZzLgotICoKLSAqIEluaXRpYWxp emVzIERTSSBjb250cm9sbGVyIGRyaXZlci4gRHJpdmVyIHNob3VsZCBiZSBpbml0aWFsaXplZCBh ZnRlcgotICogZHNpX2N0cmxfZ2V0KCkgc3VjY2VlZHMuCi0gKgotICogUmV0dXJuOiBlcnJvciBj b2RlLgotICovCi1pbnQgZHNpX2N0cmxfZHJ2X2luaXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3Ry bCwgc3RydWN0IGRlbnRyeSAqcGFyZW50KTsKLQotLyoqCi0gKiBkc2lfY3RybF9kcnZfZGVpbml0 KCkgLSBkZS1pbml0aWFsaXplcyBkc2kgY29udHJvbGxlciBkcml2ZXIKLSAqIEBkc2lfY3RybDog ICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgotICogUmVsZWFzZXMgYWxsIHJlc291cmNl cyBhY3F1aXJlZCBieSBkc2lfY3RybF9kcnZfaW5pdCgpLgotICoKLSAqIFJldHVybjogZXJyb3Ig Y29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2Rydl9kZWluaXQoc3RydWN0IGRzaV9jdHJsICpkc2lf Y3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxfdmFsaWRhdGVfdGltaW5nKCkgLSB2YWxpZGF0ZSBh IHZpZGVvIHRpbWluZyBjb25maWd1cmF0aW9uCi0gKiBAZHNpX2N0cmw6ICAgICAgIERTSSBjb250 cm9sbGVyIGhhbmRsZS4KLSAqIEB0aW1pbmc6ICAgICAgICAgUG9pbnRlciB0byB0aW1pbmcgZGF0 YS4KLSAqCi0gKiBEcml2ZXIgd2lsbCB2YWxpZGF0ZSBpZiB0aGUgdGltaW5nIGNvbmZpZ3VyYXRp b24gaXMgc3VwcG9ydGVkIG9uIHRoZQotICogY29udHJvbGxlciBoYXJkd2FyZS4KLSAqCi0gKiBS ZXR1cm46IGVycm9yIGNvZGUgaWYgdGltaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCi0gKi8KLWludCBk c2lfY3RybF92YWxpZGF0ZV90aW1pbmcoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCSAg ICAgc3RydWN0IGRzaV9tb2RlX2luZm8gKnRpbWluZyk7Ci0KLS8qKgotICogZHNpX2N0cmxfdXBk YXRlX2hvc3RfY29uZmlnKCkgLSB1cGRhdGUgZHNpIGhvc3QgY29uZmlndXJhdGlvbgotICogQGRz aV9jdHJsOiAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAY29uZmlnOiAgICAg ICAgICAgIERTSSBob3N0IGNvbmZpZ3VyYXRpb24uCi0gKiBAZmxhZ3M6ICAgICAgICAgICAgIGRz aV9tb2RlX2ZsYWdzIG1vZGlmeWluZyB0aGUgYmVoYXZpb3IKLSAqIEBjbGtfaGFuZGxlOiAgICAg ICAgQ2xvY2sgaGFuZGxlIGZvciBEU0kgY2xvY2tzCi0gKgotICogVXBkYXRlcyBkcml2ZXIgd2l0 aCBuZXcgSG9zdCBjb25maWd1cmF0aW9uIHRvIHVzZSBmb3IgaG9zdCBpbml0aWFsaXphdGlvbi4K LSAqIFRoaXMgZnVuY3Rpb24gY2FsbCB3aWxsIG9ubHkgdXBkYXRlIHRoZSBzb2Z0d2FyZSBjb250 ZXh0LiBUaGUgc3RvcmVkCi0gKiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNl ZCB3aGVuIHRoZSBob3N0IGlzIGluaXRpYWxpemVkLgotICoKLSAqIFJldHVybjogZXJyb3IgY29k ZS4KLSAqLwotaW50IGRzaV9jdHJsX3VwZGF0ZV9ob3N0X2NvbmZpZyhzdHJ1Y3QgZHNpX2N0cmwg KmRzaV9jdHJsLAotCQkJCXN0cnVjdCBkc2lfaG9zdF9jb25maWcgKmNvbmZpZywKLQkJCQlpbnQg ZmxhZ3MsIHZvaWQgKmNsa19oYW5kbGUpOwotCi0vKioKLSAqIGRzaV9jdHJsX3RpbWluZ19kYl91 cGRhdGUoKSAtIHVwZGF0ZSBvbmx5IGNvbnRyb2xsZXIgVGltaW5nIERCCi0gKiBAZHNpX2N0cmw6 ICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBlbmFibGU6ICAgICAgICAgICAg RW5hYmxlL2Rpc2FibGUgVGltaW5nIERCIHJlZ2lzdGVyCi0gKgotICogVXBkYXRlIHRpbWluZyBk YiByZWdpc3RlciB2YWx1ZSBkdXJpbmcgZGZwcyB1c2VjYXNlcwotICoKLSAqIFJldHVybjogZXJy b3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3RpbWluZ19kYl91cGRhdGUoc3RydWN0IGRzaV9j dHJsICpkc2lfY3RybCwKLQkJYm9vbCBlbmFibGUpOwotCi0vKioKLSAqIGRzaV9jdHJsX2FzeW5j X3RpbWluZ191cGRhdGUoKSAtIHVwZGF0ZSBvbmx5IGNvbnRyb2xsZXIgdGltaW5nCi0gKiBAZHNp X2N0cmw6ICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEB0aW1pbmc6ICAgICAg ICAgICAgTmV3IERTSSB0aW1pbmcgaW5mbwotICoKLSAqIFVwZGF0ZXMgaG9zdCB0aW1pbmcgdmFs dWVzIHRvIGFzeW5jaHJvbm91c2x5IHRyYW5zaXRpb24gdG8gbmV3IHRpbWluZwotICogRm9yIGV4 YW1wbGUsIHRvIHVwZGF0ZSB0aGUgcG9yY2ggdmFsdWVzIGluIGEgc2VhbWxlc3MvZHluYW1pYyBm cHMgc3dpdGNoLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJs X2FzeW5jX3RpbWluZ191cGRhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJc3RydWN0 IGRzaV9tb2RlX2luZm8gKnRpbWluZyk7Ci0KLS8qKgotICogZHNpX2N0cmxfcGh5X3N3X3Jlc2V0 KCkgLSBwZXJmb3JtIGEgUEhZIHNvZnR3YXJlIHJlc2V0Ci0gKiBAZHNpX2N0cmw6ICAgICAgICAg RFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIFBlcmZvcm1zIGEgUEhZIHNvZnR3YXJlIHJl c2V0IG9uIHRoZSBEU0kgY29udHJvbGxlci4gUmVzZXQgc2hvdWxkIGJlIGRvbmUKLSAqIHdoZW4g dGhlIGNvbnRyb2xsZXIgcG93ZXIgc3RhdGUgaXMgRFNJX0NUUkxfUE9XRVJfQ09SRV9DTEtfT04g YW5kIHRoZSBQSFkgaXMKLSAqIG5vdCBlbmFibGVkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2ls bCBmYWlsIGlmIGRyaXZlciBpcyBpbiBhbnkgb3RoZXIgc3RhdGUuCi0gKgotICogUmV0dXJuOiBl cnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfcGh5X3N3X3Jlc2V0KHN0cnVjdCBkc2lfY3Ry bCAqZHNpX2N0cmwpOwotCi0vKioKLSAqIGRzaV9jdHJsX3BoeV9yZXNldF9jb25maWcoKSAtIE1h c2svdW5tYXNrIHByb3BhZ2F0aW9uIG9mIGFoYiByZXNldCBzaWduYWwKLSAqCXRvIERTSSBQSFkg aGFyZHdhcmUuCi0gKiBAZHNpX2N0cmw6ICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0g KiBAZW5hYmxlOgkJCU1hc2svdW5tYXNrIHRoZSBQSFkgcmVzZXQgc2lnbmFsLgotICoKLSAqIFJl dHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3BoeV9yZXNldF9jb25maWcoc3Ry dWN0IGRzaV9jdHJsICpkc2lfY3RybCwgYm9vbCBlbmFibGUpOwotCi0vKioKLSAqIGRzaV9jdHJs X3NvZnRfcmVzZXQoKSAtIHBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9uIERTSSBjb250cm9sbGVyCi0g KiBAZHNpX2N0cmw6ICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIFRoZSB2 aWRlbywgY29tbWFuZCBhbmQgY29udHJvbGxlciBlbmdpbmVzIHdpbGwgYmUgZGlzYWJsZWQgYmVm b3JlIHRoZQotICogcmVzZXQgaXMgdHJpZ2dlcmVkLiBBZnRlciwgdGhlIGVuZ2luZXMgd2lsbCBi ZSByZS1lbmFibGVkIHRvIHRoZSBzYW1lIHN0YXRlCi0gKiBhcyBiZWZvcmUgdGhlIHJlc2V0Lgot ICoKLSAqIElmIHRoZSByZXNldCBpcyBkb25lIHdoaWxlIE1EUCB0aW1pbmcgZW5naW5lIGlzIHR1 cm5lZCBvbiwgdGhlIHZpZGVvCi0gKiBlbmdpbmUgc2hvdWxkIGJlIHJlLWVuYWJsZWQgb25seSBk dXJpbmcgdGhlIHZlcnRpY2FsIGJsYW5raW5nIHRpbWUuCi0gKgotICogUmV0dXJuOiBlcnJvciBj b2RlCi0gKi8KLWludCBkc2lfY3RybF9zb2Z0X3Jlc2V0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0 cmwpOwotCi0vKioKLSAqIGRzaV9jdHJsX2hvc3RfdGltaW5nX3VwZGF0ZSAtIHJlaW5pdGlhbGl6 ZSBob3N0IHdpdGggbmV3IHRpbWluZyB2YWx1ZXMKLSAqIEBkc2lfY3RybDogICAgICAgICBEU0kg Y29udHJvbGxlciBoYW5kbGUuCi0gKgotICogUmVpbml0aWFsaXplIERTSSBjb250cm9sbGVyIGhh cmR3YXJlIHdpdGggbmV3IGRpc3BsYXkgdGltaW5nIHZhbHVlcwotICogd2hlbiByZXNvbHV0aW9u IGlzIHN3aXRjaGVkIGR5bmFtaWNhbGx5LgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZQotICov Ci1pbnQgZHNpX2N0cmxfaG9zdF90aW1pbmdfdXBkYXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0 cmwpOwotCi0vKioKLSAqIGRzaV9jdHJsX2hvc3RfaW5pdCgpIC0gSW5pdGlhbGl6ZSBEU0kgaG9z dCBoYXJkd2FyZS4KLSAqIEBkc2lfY3RybDogICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4K LSAqCi0gKiBJbml0aWFsaXplcyBEU0kgY29udHJvbGxlciBoYXJkd2FyZSB3aXRoIGhvc3QgY29u ZmlndXJhdGlvbiBwcm92aWRlZCBieQotICogZHNpX2N0cmxfdXBkYXRlX2hvc3RfY29uZmlnKCku IEluaXRpYWxpemF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgb25seSBkdXJpbmcKLSAqIERTSV9DVFJM X1BPV0VSX0NPUkVfQ0xLX09OIHN0YXRlIGFuZCBhZnRlciB0aGUgUEhZIFNXIHJlc2V0IGhhcyBi ZWVuCi0gKiBwZXJmb3JtZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQg ZHNpX2N0cmxfaG9zdF9pbml0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpOwotCi0vKioKLSAq IGRzaV9jdHJsX2hvc3RfZGVpbml0KCkgLSBEZS1Jbml0aWFsaXplIERTSSBob3N0IGhhcmR3YXJl LgotICogQGRzaV9jdHJsOiAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIERl LWluaXRpYWxpemVzIERTSSBjb250cm9sbGVyIGhhcmR3YXJlLiBJdCBjYW4gYmUgcGVyZm9ybWVk IG9ubHkgZHVyaW5nCi0gKiBEU0lfQ1RSTF9QT1dFUl9DT1JFX0NMS19PTiBzdGF0ZSBhZnRlciBM SU5LIGNsb2NrcyBoYXZlIGJlZW4gdHVybmVkIG9mZi4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNv ZGUuCi0gKi8KLWludCBkc2lfY3RybF9ob3N0X2RlaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9j dHJsKTsKLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfdWxwcygpIC0gc2V0IFVMUFMgc3RhdGUgZm9y IERTSSBsYW5lcy4KLSAqIEBkc2lfY3RybDoJCURTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBl bmFibGU6CQllbmFibGUvZGlzYWJsZSBVTFBTLgotICoKLSAqIFVMUFMgY2FuIGJlIGVuYWJsZWQv ZGlzYWJsZWQgYWZ0ZXIgRFNJIGhvc3QgZW5naW5lIGlzIHR1cm5lZCBvbi4KLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfdWxwcyhzdHJ1Y3QgZHNpX2N0 cmwgKmRzaV9jdHJsLCBib29sIGVuYWJsZSk7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0dXAoKSAt IFNldHVwIERTSSBob3N0IGhhcmR3YXJlIHdoaWxlIGNvbWluZyBvdXQgb2YgaWRsZSBzY3JlZW4u Ci0gKiBAZHNpX2N0cmw6ICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgotICogSW5p dGlhbGl6ZXMgRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUgd2l0aCBob3N0IGNvbmZpZ3VyYXRpb24g cHJvdmlkZWQgYnkKLSAqIGRzaV9jdHJsX3VwZGF0ZV9ob3N0X2NvbmZpZygpLiBJbml0aWFsaXph dGlvbiBjYW4gYmUgcGVyZm9ybWVkIG9ubHkgZHVyaW5nCi0gKiBEU0lfQ1RSTF9QT1dFUl9DT1JF X0NMS19PTiBzdGF0ZSBhbmQgYWZ0ZXIgdGhlIFBIWSBTVyByZXNldCBoYXMgYmVlbgotICogcGVy Zm9ybWVkLgotICoKLSAqIEFsc28gdXNlZCB0byBwcm9ncmFtIHRoZSB2aWRlbyBtb2RlIHRpbWlu ZyB2YWx1ZXMuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxf c2V0dXAoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0 X3RwZ19zdGF0ZSgpIC0gZW5hYmxlL2Rpc2FibGUgdGVzdCBwYXR0ZXJuIG9uIHRoZSBjb250cm9s bGVyCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBv bjogICAgICAgICAgICAgICAgZW5hYmxlL2Rpc2FibGUgdGVzdCBwYXR0ZXJuLgotICoKLSAqIFRl c3QgcGF0dGVybiBjYW4gYmUgZW5hYmxlZCBvbmx5IGFmdGVyIFZpZGVvIGVuZ2luZSAoZm9yIHZp ZGVvIG1vZGUgcGFuZWxzKQotICogb3IgY29tbWFuZCBlbmdpbmUgKGZvciBjbWQgbW9kZSBwYW5l bHMpIGlzIGVuYWJsZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNp X2N0cmxfc2V0X3RwZ19zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLCBib29sIG9uKTsK LQotLyoqCi0gKiBkc2lfY3RybF9jbWRfdHJhbnNmZXIoKSAtIFRyYW5zZmVyIGNvbW1hbmRzIG9u IERTSSBsaW5rCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRs ZS4KLSAqIEBtc2c6ICAgICAgICAgICAgICAgICAgTWVzc2FnZSB0byB0cmFuc2ZlciBvbiBEU0kg bGluay4KLSAqIEBmbGFnczogICAgICAgICAgICAgICAgTW9kaWZpZXJzIGZvciBtZXNzYWdlIHRy YW5zZmVyLgotICoKLSAqIENvbW1hbmQgdHJhbnNmZXIgY2FuIGJlIGRvbmUgb25seSB3aGVuIGNv bW1hbmQgZW5naW5lIGlzIGVuYWJsZWQuIFRoZQotICogdHJhbnNmZXIgQVBJIHdpbGwgdW50aWwg ZWl0aGVyIHRoZSBjb21tYW5kIHRyYW5zZmVyIGZpbmlzaGVzIG9yIHRoZSB0aW1lb3V0Ci0gKiB2 YWx1ZSBpcyByZWFjaGVkLiBJZiB0aGUgdHJpZ2dlciBpcyBkZWZlcnJlZCwgaXQgd2lsbCByZXR1 cm4gd2l0aG91dAotICogdHJpZ2dlcmluZyB0aGUgdHJhbnNmZXIuIENvbW1hbmQgcGFyYW1ldGVy cyBhcmUgcHJvZ3JhbW1lZCB0byBoYXJkd2FyZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUu Ci0gKi8KLWludCBkc2lfY3RybF9jbWRfdHJhbnNmZXIoc3RydWN0IGRzaV9jdHJsICpkc2lfY3Ry bCwKLQkJCSAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnLAotCQkJICB1MzIgZmxhZ3Mp OwotCi0vKioKLSAqIGRzaV9jdHJsX2NtZF90eF90cmlnZ2VyKCkgLSBUcmlnZ2VyIGEgZGVmZXJy ZWQgY29tbWFuZC4KLSAqIEBkc2lfY3RybDogICAgICAgICAgICAgIERTSSBjb250cm9sbGVyIGhh bmRsZS4KLSAqIEBmbGFnczogICAgICAgICAgICAgICAgIE1vZGlmaWVycy4KLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9jbWRfdHhfdHJpZ2dlcihzdHJ1Y3Qg ZHNpX2N0cmwgKmRzaV9jdHJsLCB1MzIgZmxhZ3MpOwotCi0vKioKLSAqIGRzaV9jdHJsX3NldF9w b3dlcl9zdGF0ZSgpIC0gc2V0IHBvd2VyIHN0YXRlIGZvciBkc2kgY29udHJvbGxlcgotICogQGRz aV9jdHJsOiAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAc3RhdGU6ICAgICAg ICAgICAgIFBvd2VyIHN0YXRlLgotICoKLSAqIFNldCBwb3dlciBzdGF0ZSBmb3IgRFNJIGNvbnRy b2xsZXIuIFBvd2VyIHN0YXRlIGNhbiBiZSBjaGFuZ2VkIG9ubHkgd2hlbgotICogQ29udHJvbGxl ciwgVmlkZW8gYW5kIENvbW1hbmQgZW5naW5lcyBhcmUgdHVybmVkIG9mZi4KLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0 IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCSAgICAgZW51bSBkc2lfcG93ZXJfc3RhdGUgc3RhdGUp OwotCi0vKioKLSAqIGRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKCkgLSBzZXQgY29tbWFu ZCBlbmdpbmUgc3RhdGUKLSAqIEBkc2lfY3RybDogICAgICAgICAgICBEU0kgQ29udHJvbGxlciBo YW5kbGUuCi0gKiBAc3RhdGU6ICAgICAgICAgICAgICAgRW5naW5lIHN0YXRlLgotICoKLSAqIENv bW1hbmQgZW5naW5lIHN0YXRlIGNhbiBiZSBtb2RpZmllZCBvbmx5IHdoZW4gRFNJIGNvbnRyb2xs ZXIgcG93ZXIgc3RhdGUgaXMKLSAqIHNldCB0byBEU0lfQ1RSTF9QT1dFUl9MSU5LX0NMS19PTi4K LSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfY21kX2Vu Z2luZV9zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCSAgZW51bSBkc2lfZW5n aW5lX3N0YXRlIHN0YXRlKTsKLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfdmlkX2VuZ2luZV9zdGF0 ZSgpIC0gc2V0IHZpZGVvIGVuZ2luZSBzdGF0ZQotICogQGRzaV9jdHJsOiAgICAgICAgICAgIERT SSBDb250cm9sbGVyIGhhbmRsZS4KLSAqIEBzdGF0ZTogICAgICAgICAgICAgICBFbmdpbmUgc3Rh dGUuCi0gKgotICogVmlkZW8gZW5naW5lIHN0YXRlIGNhbiBiZSBtb2RpZmllZCBvbmx5IHdoZW4g RFNJIGNvbnRyb2xsZXIgcG93ZXIgc3RhdGUgaXMKLSAqIHNldCB0byBEU0lfQ1RSTF9QT1dFUl9M SU5LX0NMS19PTi4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3Ry bF9zZXRfdmlkX2VuZ2luZV9zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCSAg ZW51bSBkc2lfZW5naW5lX3N0YXRlIHN0YXRlKTsKLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfaG9z dF9lbmdpbmVfc3RhdGUoKSAtIHNldCBob3N0IGVuZ2luZSBzdGF0ZQotICogQGRzaV9jdHJsOiAg ICAgICAgICAgIERTSSBDb250cm9sbGVyIGhhbmRsZS4KLSAqIEBzdGF0ZTogICAgICAgICAgICAg ICBFbmdpbmUgc3RhdGUuCi0gKgotICogSG9zdCBlbmdpbmUgc3RhdGUgY2FuIGJlIG1vZGlmaWVk IG9ubHkgd2hlbiBEU0kgY29udHJvbGxlciBwb3dlciBzdGF0ZSBpcwotICogc2V0IHRvIERTSV9D VFJMX1BPV0VSX0xJTktfQ0xLX09OIGFuZCBjbWQsIHZpZGVvIGVuZ2luZXMgYXJlIGRpc2FibGVk LgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3NldF9ob3N0 X2VuZ2luZV9zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCSAgIGVudW0gZHNp X2VuZ2luZV9zdGF0ZSBzdGF0ZSk7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X3VscHMoKSAtIHNl dCBVTFBTIHN0YXRlIGZvciBEU0kgbGFuZXMuCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgRFNJIGNv bnRyb2xsZXIgaGFuZGxlLgotICogQGVuYWJsZTogICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIFVM UFMuCi0gKgotICogVUxQUyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhZnRlciBEU0kgaG9zdCBl bmdpbmUgaXMgdHVybmVkIG9uLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9jdHJsX3NldF91bHBzKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIGJvb2wgZW5hYmxl KTsKLQotLyoqCi0gKiBkc2lfY3RybF9jbGtfY2JfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIERTSSBj b250cm9sbGVyIGNsayBjb250cm9sIGNhbGxiYWNrCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgRFNJ IGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGNsa19fY2I6ICAgICAgU3RydWN0dXJlIGNvbnRhaW5p bmcgY2FsbGJhY2sgZm9yIGNsb2NrIGNvbnRyb2wuCi0gKgotICogUmVnaXN0ZXIgY2FsbCBmb3Ig RFNJIGNsb2NrIGNvbnRyb2wKLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBk c2lfY3RybF9jbGtfY2JfcmVnaXN0ZXIoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQlzdHJ1 Y3QgY2xrX2N0cmxfY2IgKmNsa19jYik7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X2NsYW1wX3N0 YXRlKCkgLSBzZXQgY2xhbXAgc3RhdGUgZm9yIERTSSBwaHkKLSAqIEBkc2lfY3RybDogICAgICAg ICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGVuYWJsZTogICAgICAgICAgICAgICBl bmFibGUvZGlzYWJsZSBjbGFtcGluZy4KLSAqIEB1bHBzX2VuYWJsZWQ6ICAgICAgICAgdWxwcyBz dGF0ZS4KLSAqCi0gKiBDbGFtcHMgY2FuIGJlIGVuYWJsZWQvZGlzYWJsZWQgd2hpbGUgRFNJIGNv bnRyb2xsZXIgaXMgc3RpbGwgdHVybmVkIG9uLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4K LSAqLwotaW50IGRzaV9jdHJsX3NldF9jbGFtcF9zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9D dHJsLAotCQlib29sIGVuYWJsZSwgYm9vbCB1bHBzX2VuYWJsZWQpOwotCi0vKioKLSAqIGRzaV9j dHJsX3NldF9jbG9ja19zb3VyY2UoKSAtIHNldCBjbG9jayBzb3VyY2UgZnByIGRzaSBsaW5rIGNs b2NrcwotICogQGRzaV9jdHJsOiAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQHNv dXJjZV9jbGtzOiAgICAgU291cmNlIGNsb2NrcyBmb3IgRFNJIGxpbmsgY2xvY2tzLgotICoKLSAq IENsb2NrIHNvdXJjZSBzaG91bGQgYmUgY2hhbmdlZCB3aGlsZSBsaW5rIGNsb2NrcyBhcmUgZGlz YWJsZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0 X2Nsb2NrX3NvdXJjZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJICAgICAgc3RydWN0 IGRzaV9jbGtfbGlua19zZXQgKnNvdXJjZV9jbGtzKTsKLQotLyoqCi0gKiBkc2lfY3RybF9lbmFi bGVfc3RhdHVzX2ludGVycnVwdCgpIC0gZW5hYmxlIHN0YXR1cyBpbnRlcnJ1cHRzCi0gKiBAZHNp X2N0cmw6ICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAaW50cl9pZHg6ICAgICAg ICBJbmRleCBpbnRlcnJ1cHQgdG8gZGlzYWJsZS4KLSAqIEBldmVudF9pbmZvOiAgICAgIFBvaW50 ZXIgdG8gZXZlbnQgY2FsbGJhY2sgZGVmaW5pdGlvbgotICovCi12b2lkIGRzaV9jdHJsX2VuYWJs ZV9zdGF0dXNfaW50ZXJydXB0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCXVpbnQzMl90 IGludHJfaWR4LCBzdHJ1Y3QgZHNpX2V2ZW50X2NiX2luZm8gKmV2ZW50X2luZm8pOwotCi0vKioK LSAqIGRzaV9jdHJsX2Rpc2FibGVfc3RhdHVzX2ludGVycnVwdCgpIC0gZGlzYWJsZSBzdGF0dXMg aW50ZXJydXB0cwotICogQGRzaV9jdHJsOiAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgot ICogQGludHJfaWR4OiAgICAgICAgSW5kZXggaW50ZXJydXB0IHRvIGRpc2FibGUuCi0gKi8KLXZv aWQgZHNpX2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJydXB0KAotCQlzdHJ1Y3QgZHNpX2N0cmwg KmRzaV9jdHJsLCB1aW50MzJfdCBpbnRyX2lkeCk7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0dXBf bWlzcigpIC0gU2V0dXAgZnJhbWUgTUlTUgotICogQGRzaV9jdHJsOiAgICAgICAgICAgICAgRFNJ IGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGVuYWJsZTogICAgICAgICAgICAgICAgZW5hYmxlL2Rp c2FibGUgTUlTUi4KLSAqIEBmcmFtZV9jb3VudDogICAgICAgICAgIE51bWJlciBvZiBmcmFtZXMg dG8gYWNjdW11bGF0ZSBNSVNSLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9jdHJsX3NldHVwX21pc3Ioc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCWJvb2wg ZW5hYmxlLAotCQkJdTMyIGZyYW1lX2NvdW50KTsKLQotLyoqCi0gKiBkc2lfY3RybF9jb2xsZWN0 X21pc3IoKSAtIFJlYWQgZnJhbWUgTUlTUgotICogQGRzaV9jdHJsOiAgICAgICAgICAgICAgRFNJ IGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIFJldHVybjogTUlTUiB2YWx1ZS4KLSAqLwotdTMy IGRzaV9jdHJsX2NvbGxlY3RfbWlzcihzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKTsKLQotLyoq Ci0gKiBkc2lfY3RybF9kcnZfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIHBsYXRmb3JtIGRyaXZlciBm b3IgZHNpIGNvbnRyb2xsZXIKLSAqLwotdm9pZCBkc2lfY3RybF9kcnZfcmVnaXN0ZXIodm9pZCk7 Ci0KLS8qKgotICogZHNpX2N0cmxfZHJ2X3VucmVnaXN0ZXIoKSAtIHVucmVnaXN0ZXIgcGxhdGZv cm0gZHJpdmVyCi0gKi8KLXZvaWQgZHNpX2N0cmxfZHJ2X3VucmVnaXN0ZXIodm9pZCk7Ci0KLSNl bmRpZiAvKiBfRFNJX0NUUkxfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHcuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX2N0cmxfaHcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNiMjBmNC4u MDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3 LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykg MjAxNS0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq Ci0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotICovCi0KLSNpZm5kZWYgX0RTSV9DVFJMX0hXX0hfCi0jZGVmaW5lIF9EU0lfQ1RS TF9IV19IXwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlw ZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRtYXAu aD4KLQotI2luY2x1ZGUgImRzaV9kZWZzLmgiCi0KLS8qKgotICogTW9kaWZpZXIgZmxhZyBmb3Ig Y29tbWFuZCB0cmFuc21pc3Npb24uIElmIHRoaXMgZmxhZyBpcyBzZXQsIGNvbW1hbmQKLSAqIGlu Zm9ybWF0aW9uIGlzIHByb2dyYW1tZWQgdG8gaGFyZHdhcmUgYW5kIHRyYW5zbWlzc2lvbiBpcyBu b3QgdHJpZ2dlcmVkLgotICogQ2FsbGVyIHNob3VsZCBjYWxsIHRoZSB0cmlnZ2VyX2NvbW1hbmRf ZG1hKCkgdG8gc3RhcnQgdGhlIHRyYW5zbWlzc2lvbi4gVGhpcwotICogZmxhZyBpcyB2YWxlZCBm b3Iga2lja29mZl9jb21tYW5kKCkgYW5kIGtpY2tvZmZfZmlmb19jb21tYW5kKCkgb3BlcmF0aW9u cy4KLSAqLwotI2RlZmluZSBEU0lfQ1RSTF9IV19DTURfV0FJVF9GT1JfVFJJR0dFUiAgICAgICAg ICAgIDB4MQotCi0vKioKLSAqIGVudW0gZHNpX2N0cmxfdmVyc2lvbiAtIHZlcnNpb24gb2YgdGhl IGRzaSBob3N0IGNvbnRyb2xsZXIKLSAqIEBEU0lfQ1RSTF9WRVJTSU9OX1VOS05PV046IFVua25v d24gY29udHJvbGxlciB2ZXJzaW9uCi0gKiBARFNJX0NUUkxfVkVSU0lPTl8xXzQ6ICAgICBEU0kg aG9zdCB2MS40IGNvbnRyb2xsZXIKLSAqIEBEU0lfQ1RSTF9WRVJTSU9OXzJfMDogICAgIERTSSBo b3N0IHYyLjAgY29udHJvbGxlcgotICogQERTSV9DVFJMX1ZFUlNJT05fTUFYOiAgICAgbWF4IHZl cnNpb24KLSAqLwotZW51bSBkc2lfY3RybF92ZXJzaW9uIHsKLQlEU0lfQ1RSTF9WRVJTSU9OX1VO S05PV04sCi0JRFNJX0NUUkxfVkVSU0lPTl8xXzQsCi0JRFNJX0NUUkxfVkVSU0lPTl8yXzAsCi0J RFNJX0NUUkxfVkVSU0lPTl8yXzIsCi0JRFNJX0NUUkxfVkVSU0lPTl9NQVgKLX07Ci0KLS8qKgot ICogZW51bSBkc2lfY3RybF9od19mZWF0dXJlcyAtIGZlYXR1cmVzIHN1cHBvcnRlZCBieSBkc2kg aG9zdCBjb250cm9sbGVyCi0gKiBARFNJX0NUUkxfVklERU9fVFBHOiAgICAgICAgICAgICAgIFRl c3QgcGF0dGVybiBzdXBwb3J0IGZvciB2aWRlbyBtb2RlLgotICogQERTSV9DVFJMX0NNRF9UUEc6 ICAgICAgICAgICAgICAgICBUZXN0IHBhdHRlcm4gc3VwcG9ydCBmb3IgY29tbWFuZCBtb2RlLgot ICogQERTSV9DVFJMX1ZBUklBQkxFX1JFRlJFU0hfUkFURTogICB2YXJpYWJsZSBwYW5lbCB0aW1p bmcKLSAqIEBEU0lfQ1RSTF9EWU5BTUlDX1JFRlJFU0g6ICAgICAgICAgdmFyaWFibGUgcGl4ZWwg Y2xvY2sgcmF0ZQotICogQERTSV9DVFJMX05VTExfUEFDS0VUX0lOU0VSVElPTjogICBOVUxMIHBh Y2tldCBpbnNlcnRpb24KLSAqIEBEU0lfQ1RSTF9ERVNLRVdfQ0FMSUI6ICAgICAgICAgICAgRGVz a2V3IGNhbGlicmF0aW9uIHN1cHBvcnQKLSAqIEBEU0lfQ1RSTF9EUEhZOiAgICAgICAgICAgICAg ICAgICAgQ29udHJvbGxlciBzdXBwb3J0IGZvciBEUEhZCi0gKiBARFNJX0NUUkxfQ1BIWTogICAg ICAgICAgICAgICAgICAgIENvbnRyb2xsZXIgc3VwcG9ydCBmb3IgQ1BIWQotICogQERTSV9DVFJM X01BWF9GRUFUVVJFUzoKLSAqLwotZW51bSBkc2lfY3RybF9od19mZWF0dXJlcyB7Ci0JRFNJX0NU UkxfVklERU9fVFBHLAotCURTSV9DVFJMX0NNRF9UUEcsCi0JRFNJX0NUUkxfVkFSSUFCTEVfUkVG UkVTSF9SQVRFLAotCURTSV9DVFJMX0RZTkFNSUNfUkVGUkVTSCwKLQlEU0lfQ1RSTF9OVUxMX1BB Q0tFVF9JTlNFUlRJT04sCi0JRFNJX0NUUkxfREVTS0VXX0NBTElCLAotCURTSV9DVFJMX0RQSFks Ci0JRFNJX0NUUkxfQ1BIWSwKLQlEU0lfQ1RSTF9NQVhfRkVBVFVSRVMKLX07Ci0KLS8qKgotICog ZW51bSBkc2lfdGVzdF9wYXR0ZXJuIC0gdGVzdCBwYXR0ZXJuIHR5cGUKLSAqIEBEU0lfVEVTVF9Q QVRURVJOX0ZJWEVEOiAgICAgVGVzdCBwYXR0ZXJuIGlzIGZpeGVkLCBiYXNlZCBvbiBpbml0IHZh bHVlLgotICogQERTSV9URVNUX1BBVFRFUk5fSU5DOiAgICAgICBJbmNyZW1lbnRhbCB0ZXN0IHBh dHRlcm4sIGJhc2Ugb24gaW5pdCB2YWx1ZS4KLSAqIEBEU0lfVEVTVF9QQVRURVJOX1BPTFk6ICAg ICAgUGF0dGVybiBnZW5lcmF0ZWQgZnJvbSBwb2x5bm9taWFsIGFuZCBpbml0IHZhbC4KLSAqIEBE U0lfVEVTVF9QQVRURVJOX01BWDoKLSAqLwotZW51bSBkc2lfdGVzdF9wYXR0ZXJuIHsKLQlEU0lf VEVTVF9QQVRURVJOX0ZJWEVEID0gMCwKLQlEU0lfVEVTVF9QQVRURVJOX0lOQywKLQlEU0lfVEVT VF9QQVRURVJOX1BPTFksCi0JRFNJX1RFU1RfUEFUVEVSTl9NQVgKLX07Ci0KLS8qKgotICogZW51 bSBkc2lfc3RhdHVzX2ludF9pbmRleCAtIGluZGV4IG9mIGludGVycnVwdHMgZ2VuZXJhdGVkIGJ5 IERTSSBjb250cm9sbGVyCi0gKiBARFNJX1NJTlRfQ01EX01PREVfRE1BX0RPTkU6ICAgICAgICBD b21tYW5kIG1vZGUgRE1BIHBhY2tldHMgYXJlIHNlbnQgb3V0LgotICogQERTSV9TSU5UX0NNRF9T VFJFQU0wX0ZSQU1FX0RPTkU6ICAgQSBmcmFtZSBvZiBjbWQgbW9kZSBzdHJlYW0wIGlzIHNlbnQg b3V0LgotICogQERTSV9TSU5UX0NNRF9TVFJFQU0xX0ZSQU1FX0RPTkU6ICAgQSBmcmFtZSBvZiBj bWQgbW9kZSBzdHJlYW0xIGlzIHNlbnQgb3V0LgotICogQERTSV9TSU5UX0NNRF9TVFJFQU0yX0ZS QU1FX0RPTkU6ICAgQSBmcmFtZSBvZiBjbWQgbW9kZSBzdHJlYW0yIGlzIHNlbnQgb3V0LgotICog QERTSV9TSU5UX1ZJREVPX01PREVfRlJBTUVfRE9ORTogICAgQSBmcmFtZSBvZiB2aWRlbyBtb2Rl IHN0cmVhbSBpcyBzZW50IG91dC4KLSAqIEBEU0lfU0lOVF9CVEFfRE9ORTogICAgICAgICAgICAg ICAgIEEgQlRBIGlzIGNvbXBsZXRlZC4KLSAqIEBEU0lfU0lOVF9DTURfRlJBTUVfRE9ORTogICAg ICAgICAgIEEgZnJhbWUgb2Ygc2VsZWN0ZWQgY21kIG1vZGUgc3RyZWFtIGlzCi0gKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW50IG91dCBieSBNRFAuCi0gKiBARFNJX1NJ TlRfRFlOX1JFRlJFU0hfRE9ORTogICAgICAgICBUaGUgZHluYW1pYyByZWZyZXNoIG9wZXJhdGlv biBjb21wbGV0ZWQuCi0gKiBARFNJX1NJTlRfREVTS0VXX0RPTkU6ICAgICAgICAgICAgICBUaGUg ZGVza2V3IGNhbGlicmF0aW9uIG9wZXJhdGlvbiBkb25lLgotICogQERTSV9TSU5UX0RZTl9CTEFO S19ETUFfRE9ORTogICAgICAgVGhlIGR5bmFtaWMgYmxhbmtpbiBETUEgb3BlcmF0aW9uIGhhcwot ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkLgotICovCi1l bnVtIGRzaV9zdGF0dXNfaW50X2luZGV4IHsKLQlEU0lfU0lOVF9DTURfTU9ERV9ETUFfRE9ORSA9 IDAsCi0JRFNJX1NJTlRfQ01EX1NUUkVBTTBfRlJBTUVfRE9ORSA9IDEsCi0JRFNJX1NJTlRfQ01E X1NUUkVBTTFfRlJBTUVfRE9ORSA9IDIsCi0JRFNJX1NJTlRfQ01EX1NUUkVBTTJfRlJBTUVfRE9O RSA9IDMsCi0JRFNJX1NJTlRfVklERU9fTU9ERV9GUkFNRV9ET05FID0gNCwKLQlEU0lfU0lOVF9C VEFfRE9ORSA9IDUsCi0JRFNJX1NJTlRfQ01EX0ZSQU1FX0RPTkUgPSA2LAotCURTSV9TSU5UX0RZ Tl9SRUZSRVNIX0RPTkUgPSA3LAotCURTSV9TSU5UX0RFU0tFV19ET05FID0gOCwKLQlEU0lfU0lO VF9EWU5fQkxBTktfRE1BX0RPTkUgPSA5LAotCi0JRFNJX1NUQVRVU19JTlRFUlJVUFRfQ09VTlQK LX07Ci0KLS8qKgotICogZW51bSBkc2lfc3RhdHVzX2ludF90eXBlIC0gc3RhdHVzIGludGVycnVw dHMgZ2VuZXJhdGVkIGJ5IERTSSBjb250cm9sbGVyCi0gKiBARFNJX0NNRF9NT0RFX0RNQV9ET05F OiAgICAgICAgQ29tbWFuZCBtb2RlIERNQSBwYWNrZXRzIGFyZSBzZW50IG91dC4KLSAqIEBEU0lf Q01EX1NUUkVBTTBfRlJBTUVfRE9ORTogICBBIGZyYW1lIG9mIGNvbW1hbmQgbW9kZSBzdHJlYW0w IGlzIHNlbnQgb3V0LgotICogQERTSV9DTURfU1RSRUFNMV9GUkFNRV9ET05FOiAgIEEgZnJhbWUg b2YgY29tbWFuZCBtb2RlIHN0cmVhbTEgaXMgc2VudCBvdXQuCi0gKiBARFNJX0NNRF9TVFJFQU0y X0ZSQU1FX0RPTkU6ICAgQSBmcmFtZSBvZiBjb21tYW5kIG1vZGUgc3RyZWFtMiBpcyBzZW50IG91 dC4KLSAqIEBEU0lfVklERU9fTU9ERV9GUkFNRV9ET05FOiAgICBBIGZyYW1lIG9mIHZpZGVvIG1v ZGUgc3RyZWFtIGlzIHNlbnQgb3V0LgotICogQERTSV9CVEFfRE9ORTogICAgICAgICAgICAgICAg IEEgQlRBIGlzIGNvbXBsZXRlZC4KLSAqIEBEU0lfQ01EX0ZSQU1FX0RPTkU6ICAgICAgICAgICBB IGZyYW1lIG9mIHNlbGVjdGVkIGNvbW1hbmQgbW9kZSBzdHJlYW0gaXMKLSAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzZW50IG91dCBieSBNRFAuCi0gKiBARFNJX0RZTl9SRUZSRVNI X0RPTkU6ICAgICAgICAgVGhlIGR5bmFtaWMgcmVmcmVzaCBvcGVyYXRpb24gaGFzIGNvbXBsZXRl ZC4KLSAqIEBEU0lfREVTS0VXX0RPTkU6ICAgICAgICAgICAgICBUaGUgZGVza2V3IGNhbGlicmF0 aW9uIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkCi0gKiBARFNJX0RZTl9CTEFOS19ETUFfRE9ORTog ICAgICAgVGhlIGR5bmFtaWMgYmxhbmtpbiBETUEgb3BlcmF0aW9uIGhhcwotICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZC4KLSAqLwotZW51bSBkc2lfc3RhdHVzX2lu dF90eXBlIHsKLQlEU0lfQ01EX01PREVfRE1BX0RPTkUgPSBCSVQoRFNJX1NJTlRfQ01EX01PREVf RE1BX0RPTkUpLAotCURTSV9DTURfU1RSRUFNMF9GUkFNRV9ET05FID0gQklUKERTSV9TSU5UX0NN RF9TVFJFQU0wX0ZSQU1FX0RPTkUpLAotCURTSV9DTURfU1RSRUFNMV9GUkFNRV9ET05FID0gQklU KERTSV9TSU5UX0NNRF9TVFJFQU0xX0ZSQU1FX0RPTkUpLAotCURTSV9DTURfU1RSRUFNMl9GUkFN RV9ET05FID0gQklUKERTSV9TSU5UX0NNRF9TVFJFQU0yX0ZSQU1FX0RPTkUpLAotCURTSV9WSURF T19NT0RFX0ZSQU1FX0RPTkUgPSBCSVQoRFNJX1NJTlRfVklERU9fTU9ERV9GUkFNRV9ET05FKSwK LQlEU0lfQlRBX0RPTkUgPSBCSVQoRFNJX1NJTlRfQlRBX0RPTkUpLAotCURTSV9DTURfRlJBTUVf RE9ORSA9IEJJVChEU0lfU0lOVF9DTURfRlJBTUVfRE9ORSksCi0JRFNJX0RZTl9SRUZSRVNIX0RP TkUgPSBCSVQoRFNJX1NJTlRfRFlOX1JFRlJFU0hfRE9ORSksCi0JRFNJX0RFU0tFV19ET05FID0g QklUKERTSV9TSU5UX0RFU0tFV19ET05FKSwKLQlEU0lfRFlOX0JMQU5LX0RNQV9ET05FID0gQklU KERTSV9TSU5UX0RZTl9CTEFOS19ETUFfRE9ORSkKLX07Ci0KLS8qKgotICogZW51bSBkc2lfZXJy b3JfaW50X2luZGV4IC0gaW5kZXggb2YgZXJyb3IgaW50ZXJydXB0cyBmcm9tIERTSSBjb250cm9s bGVyCi0gKiBARFNJX0VJTlRfUkRCS19TSU5HTEVfRUNDX0VSUjogICAgICAgIFNpbmdsZSBiaXQg RUNDIGVycm9yIGluIHJlYWQgcGFja2V0LgotICogQERTSV9FSU5UX1JEQktfTVVMVElfRUNDX0VS UjogICAgICAgICBNdWx0aSBiaXQgRUNDIGVycm9yIGluIHJlYWQgcGFja2V0LgotICogQERTSV9F SU5UX1JEQktfQ1JDX0VSUjogICAgICAgICAgICAgICBDUkMgZXJyb3IgaW4gcmVhZCBwYWNrZXQu Ci0gKiBARFNJX0VJTlRfUkRCS19JTkNPTVBMRVRFX1BLVDogICAgICAgIEluY29tcGxldGUgcmVh ZCBwYWNrZXQuCi0gKiBARFNJX0VJTlRfUEVSSVBIX0VSUk9SX1BLVDogICAgICAgICAgIEVycm9y IHBhY2tldCByZXR1cm5lZCBmcm9tIHBlcmlwaGVyYWwsCi0gKiBARFNJX0VJTlRfTFBfUlhfVElN RU9VVDogICAgICAgICAgICAgIExvdyBwb3dlciByZXZlcnNlIHRyYW5zbWlzc2lvbiB0aW1lb3V0 LgotICogQERTSV9FSU5UX0hTX1RYX1RJTUVPVVQ6ICAgICAgICAgICAgICBIaWdoIHNwZWVkIGZ3 ZCB0cmFuc21pc3Npb24gdGltZW91dC4KLSAqIEBEU0lfRUlOVF9CVEFfVElNRU9VVDogICAgICAg ICAgICAgICAgQlRBIHRpbWVvdXQuCi0gKiBARFNJX0VJTlRfUExMX1VOTE9DSzogICAgICAgICAg ICAgICAgIFBMTCBoYXMgdW5sb2NrZWQuCi0gKiBARFNJX0VJTlRfRExOMF9FU0NfRU5UUllfRVJS OiAgICAgICAgIEluY29ycmVjdCBMUCBSeCBlc2NhcGUgZW50cnkuCi0gKiBARFNJX0VJTlRfRExO MF9FU0NfU1lOQ19FUlI6ICAgICAgICAgIExQIFJ4IGRhdGEgaXMgbm90IGJ5dGUgYWxpZ25lZC4K LSAqIEBEU0lfRUlOVF9ETE4wX0xQX0NPTlRST0xfRVJSOiAgICAgICAgSW5jb3JyZWN0IExQIFJ4 IHN0YXRlIHNlcXVlbmNlLgotICogQERTSV9FSU5UX1BFTkRJTkdfSFNfVFhfVElNRU9VVDogICAg ICBQZW5kaW5nIEhpZ2gtc3BlZWQgdHJhbnNmZXIgdGltZW91dC4KLSAqIEBEU0lfRUlOVF9JTlRF UkxFQVZFX09QX0NPTlRFTlRJT046ICAgSW50ZXJsZWF2ZSBvcGVyYXRpb24gY29udGVudGlvbi4K LSAqIEBEU0lfRUlOVF9DTURfRE1BX0ZJRk9fVU5ERVJGTE9XOiAgICAgQ29tbWFuZCBtb2RlIERN QSBGSUZPIHVuZGVyZmxvdy4KLSAqIEBEU0lfRUlOVF9DTURfTURQX0ZJRk9fVU5ERVJGTE9XOiAg ICAgQ29tbWFuZCBNRFAgRklGTyB1bmRlcmZsb3cgKGZhaWxlZCB0bwotICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlIG9uZSBjb21wbGV0ZSBsaW5lIGZyb20g TURQKS4KLSAqIEBEU0lfRUlOVF9ETE4wX0hTX0ZJRk9fT1ZFUkZMT1c6ICAgICAgSGlnaCBzcGVl ZCBGSUZPIGRhdGEgbGFuZSAwIG92ZXJmbG93cy4KLSAqIEBEU0lfRUlOVF9ETE4xX0hTX0ZJRk9f T1ZFUkZMT1c6ICAgICAgSGlnaCBzcGVlZCBGSUZPIGRhdGEgbGFuZSAxIG92ZXJmbG93cy4KLSAq IEBEU0lfRUlOVF9ETE4yX0hTX0ZJRk9fT1ZFUkZMT1c6ICAgICAgSGlnaCBzcGVlZCBGSUZPIGRh dGEgbGFuZSAyIG92ZXJmbG93cy4KLSAqIEBEU0lfRUlOVF9ETE4zX0hTX0ZJRk9fT1ZFUkZMT1c6 ICAgICAgSGlnaCBzcGVlZCBGSUZPIGRhdGEgbGFuZSAzIG92ZXJmbG93cy4KLSAqIEBEU0lfRUlO VF9ETE4wX0hTX0ZJRk9fVU5ERVJGTE9XOiAgICAgSGlnaCBzcGVlZCBGSUZPIGRhdGEgbGFuZSAw IHVuZGVyZmxvd3MuCi0gKiBARFNJX0VJTlRfRExOMV9IU19GSUZPX1VOREVSRkxPVzogICAgIEhp Z2ggc3BlZWQgRklGTyBkYXRhIGxhbmUgMSB1bmRlcmZsb3dzLgotICogQERTSV9FSU5UX0RMTjJf SFNfRklGT19VTkRFUkZMT1c6ICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0YSBsYW5lIDIgdW5kZXJm bG93cy4KLSAqIEBEU0lfRUlOVF9ETE4zX0hTX0ZJRk9fVU5ERVJGTE9XOiAgICAgSGlnaCBzcGVl ZCBGSUZPIGRhdGEgbGFuZSAzIHVuZGVmbG93cy4KLSAqIEBEU0lfRUlOVF9ETE4wX0xQMF9DT05U RU5USU9OOiAgICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAwIGxvdy4KLSAq IEBEU0lfRUlOVF9ETE4xX0xQMF9DT05URU5USU9OOiAgICAgICAgUEhZIGxldmVsIGNvbnRlbnRp b24gd2hpbGUgbGFuZSAxIGxvdy4KLSAqIEBEU0lfRUlOVF9ETE4yX0xQMF9DT05URU5USU9OOiAg ICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAyIGxvdy4KLSAqIEBEU0lfRUlO VF9ETE4zX0xQMF9DT05URU5USU9OOiAgICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUg bGFuZSAzIGxvdy4KLSAqIEBEU0lfRUlOVF9ETE4wX0xQMV9DT05URU5USU9OOiAgICAgICAgUEhZ IGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAwIGhpZ2guCi0gKiBARFNJX0VJTlRfRExOMV9M UDFfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxlIGxhbmUgMSBo aWdoLgotICogQERTSV9FSU5UX0RMTjJfTFAxX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwg Y29udGVudGlvbiB3aGlsZSBsYW5lIDIgaGlnaC4KLSAqIEBEU0lfRUlOVF9ETE4zX0xQMV9DT05U RU5USU9OOiAgICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAzIGhpZ2guCi0g Ki8KLWVudW0gZHNpX2Vycm9yX2ludF9pbmRleCB7Ci0JRFNJX0VJTlRfUkRCS19TSU5HTEVfRUND X0VSUiA9IDAsCi0JRFNJX0VJTlRfUkRCS19NVUxUSV9FQ0NfRVJSID0gMSwKLQlEU0lfRUlOVF9S REJLX0NSQ19FUlIgPSAyLAotCURTSV9FSU5UX1JEQktfSU5DT01QTEVURV9QS1QgPSAzLAotCURT SV9FSU5UX1BFUklQSF9FUlJPUl9QS1QgPSA0LAotCURTSV9FSU5UX0xQX1JYX1RJTUVPVVQgPSA1 LAotCURTSV9FSU5UX0hTX1RYX1RJTUVPVVQgPSA2LAotCURTSV9FSU5UX0JUQV9USU1FT1VUID0g NywKLQlEU0lfRUlOVF9QTExfVU5MT0NLID0gOCwKLQlEU0lfRUlOVF9ETE4wX0VTQ19FTlRSWV9F UlIgPSA5LAotCURTSV9FSU5UX0RMTjBfRVNDX1NZTkNfRVJSID0gMTAsCi0JRFNJX0VJTlRfRExO MF9MUF9DT05UUk9MX0VSUiA9IDExLAotCURTSV9FSU5UX1BFTkRJTkdfSFNfVFhfVElNRU9VVCA9 IDEyLAotCURTSV9FSU5UX0lOVEVSTEVBVkVfT1BfQ09OVEVOVElPTiA9IDEzLAotCURTSV9FSU5U X0NNRF9ETUFfRklGT19VTkRFUkZMT1cgPSAxNCwKLQlEU0lfRUlOVF9DTURfTURQX0ZJRk9fVU5E RVJGTE9XID0gMTUsCi0JRFNJX0VJTlRfRExOMF9IU19GSUZPX09WRVJGTE9XID0gMTYsCi0JRFNJ X0VJTlRfRExOMV9IU19GSUZPX09WRVJGTE9XID0gMTcsCi0JRFNJX0VJTlRfRExOMl9IU19GSUZP X09WRVJGTE9XID0gMTgsCi0JRFNJX0VJTlRfRExOM19IU19GSUZPX09WRVJGTE9XID0gMTksCi0J RFNJX0VJTlRfRExOMF9IU19GSUZPX1VOREVSRkxPVyA9IDIwLAotCURTSV9FSU5UX0RMTjFfSFNf RklGT19VTkRFUkZMT1cgPSAyMSwKLQlEU0lfRUlOVF9ETE4yX0hTX0ZJRk9fVU5ERVJGTE9XID0g MjIsCi0JRFNJX0VJTlRfRExOM19IU19GSUZPX1VOREVSRkxPVyA9IDIzLAotCURTSV9FSU5UX0RM TjBfTFAwX0NPTlRFTlRJT04gPSAyNCwKLQlEU0lfRUlOVF9ETE4xX0xQMF9DT05URU5USU9OID0g MjUsCi0JRFNJX0VJTlRfRExOMl9MUDBfQ09OVEVOVElPTiA9IDI2LAotCURTSV9FSU5UX0RMTjNf TFAwX0NPTlRFTlRJT04gPSAyNywKLQlEU0lfRUlOVF9ETE4wX0xQMV9DT05URU5USU9OID0gMjgs Ci0JRFNJX0VJTlRfRExOMV9MUDFfQ09OVEVOVElPTiA9IDI5LAotCURTSV9FSU5UX0RMTjJfTFAx X0NPTlRFTlRJT04gPSAzMCwKLQlEU0lfRUlOVF9ETE4zX0xQMV9DT05URU5USU9OID0gMzEsCi0K LQlEU0lfRVJST1JfSU5URVJSVVBUX0NPVU5UCi19OwotCi0vKioKLSAqIGVudW0gZHNpX2Vycm9y X2ludF90eXBlIC0gZXJyb3IgaW50ZXJydXB0cyBnZW5lcmF0ZWQgYnkgRFNJIGNvbnRyb2xsZXIK LSAqIEBEU0lfUkRCS19TSU5HTEVfRUNDX0VSUjogICAgICAgIFNpbmdsZSBiaXQgRUNDIGVycm9y IGluIHJlYWQgcGFja2V0LgotICogQERTSV9SREJLX01VTFRJX0VDQ19FUlI6ICAgICAgICAgTXVs dGkgYml0IEVDQyBlcnJvciBpbiByZWFkIHBhY2tldC4KLSAqIEBEU0lfUkRCS19DUkNfRVJSOiAg ICAgICAgICAgICAgIENSQyBlcnJvciBpbiByZWFkIHBhY2tldC4KLSAqIEBEU0lfUkRCS19JTkNP TVBMRVRFX1BLVDogICAgICAgIEluY29tcGxldGUgcmVhZCBwYWNrZXQuCi0gKiBARFNJX1BFUklQ SF9FUlJPUl9QS1Q6ICAgICAgICAgICBFcnJvciBwYWNrZXQgcmV0dXJuZWQgZnJvbSBwZXJpcGhl cmFsLAotICogQERTSV9MUF9SWF9USU1FT1VUOiAgICAgICAgICAgICAgTG93IHBvd2VyIHJldmVy c2UgdHJhbnNtaXNzaW9uIHRpbWVvdXQuCi0gKiBARFNJX0hTX1RYX1RJTUVPVVQ6ICAgICAgICAg ICAgICBIaWdoIHNwZWVkIGZvcndhcmQgdHJhbnNtaXNzaW9uIHRpbWVvdXQuCi0gKiBARFNJX0JU QV9USU1FT1VUOiAgICAgICAgICAgICAgICBCVEEgdGltZW91dC4KLSAqIEBEU0lfUExMX1VOTE9D SzogICAgICAgICAgICAgICAgIFBMTCBoYXMgdW5sb2NrZWQuCi0gKiBARFNJX0RMTjBfRVNDX0VO VFJZX0VSUjogICAgICAgICBJbmNvcnJlY3QgTFAgUnggZXNjYXBlIGVudHJ5LgotICogQERTSV9E TE4wX0VTQ19TWU5DX0VSUjogICAgICAgICAgTFAgUnggZGF0YSBpcyBub3QgYnl0ZSBhbGlnbmVk LgotICogQERTSV9ETE4wX0xQX0NPTlRST0xfRVJSOiAgICAgICAgSW5jb3JyZWN0IExQIFJ4IHN0 YXRlIHNlcXVlbmNlLgotICogQERTSV9QRU5ESU5HX0hTX1RYX1RJTUVPVVQ6ICAgICAgUGVuZGlu ZyBIaWdoLXNwZWVkIHRyYW5zZmVyIHRpbWVvdXQuCi0gKiBARFNJX0lOVEVSTEVBVkVfT1BfQ09O VEVOVElPTjogICBJbnRlcmxlYXZlIG9wZXJhdGlvbiBjb250ZW50aW9uLgotICogQERTSV9DTURf RE1BX0ZJRk9fVU5ERVJGTE9XOiAgICAgQ29tbWFuZCBtb2RlIERNQSBGSUZPIHVuZGVyZmxvdy4K LSAqIEBEU0lfQ01EX01EUF9GSUZPX1VOREVSRkxPVzogICAgIENvbW1hbmQgTURQIEZJRk8gdW5k ZXJmbG93IChmYWlsZWQgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl Y2VpdmUgb25lIGNvbXBsZXRlIGxpbmUgZnJvbSBNRFApLgotICogQERTSV9ETE4wX0hTX0ZJRk9f T1ZFUkZMT1c6ICAgICAgSGlnaCBzcGVlZCBGSUZPIGZvciBkYXRhIGxhbmUgMCBvdmVyZmxvd3Mu Ci0gKiBARFNJX0RMTjFfSFNfRklGT19PVkVSRkxPVzogICAgICBIaWdoIHNwZWVkIEZJRk8gZm9y IGRhdGEgbGFuZSAxIG92ZXJmbG93cy4KLSAqIEBEU0lfRExOMl9IU19GSUZPX09WRVJGTE9XOiAg ICAgIEhpZ2ggc3BlZWQgRklGTyBmb3IgZGF0YSBsYW5lIDIgb3ZlcmZsb3dzLgotICogQERTSV9E TE4zX0hTX0ZJRk9fT1ZFUkZMT1c6ICAgICAgSGlnaCBzcGVlZCBGSUZPIGZvciBkYXRhIGxhbmUg MyBvdmVyZmxvd3MuCi0gKiBARFNJX0RMTjBfSFNfRklGT19VTkRFUkZMT1c6ICAgICBIaWdoIHNw ZWVkIEZJRk8gZm9yIGRhdGEgbGFuZSAwIHVuZGVyZmxvd3MuCi0gKiBARFNJX0RMTjFfSFNfRklG T19VTkRFUkZMT1c6ICAgICBIaWdoIHNwZWVkIEZJRk8gZm9yIGRhdGEgbGFuZSAxIHVuZGVyZmxv d3MuCi0gKiBARFNJX0RMTjJfSFNfRklGT19VTkRFUkZMT1c6ICAgICBIaWdoIHNwZWVkIEZJRk8g Zm9yIGRhdGEgbGFuZSAyIHVuZGVyZmxvd3MuCi0gKiBARFNJX0RMTjNfSFNfRklGT19VTkRFUkZM T1c6ICAgICBIaWdoIHNwZWVkIEZJRk8gZm9yIGRhdGEgbGFuZSAzIHVuZGVmbG93cy4KLSAqIEBE U0lfRExOMF9MUDBfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxl IGxhbmUgMCBpcyBsb3cuCi0gKiBARFNJX0RMTjFfTFAwX0NPTlRFTlRJT046ICAgICAgICBQSFkg bGV2ZWwgY29udGVudGlvbiB3aGlsZSBsYW5lIDEgaXMgbG93LgotICogQERTSV9ETE4yX0xQMF9D T05URU5USU9OOiAgICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAyIGlzIGxv dy4KLSAqIEBEU0lfRExOM19MUDBfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50 aW9uIHdoaWxlIGxhbmUgMyBpcyBsb3cuCi0gKiBARFNJX0RMTjBfTFAxX0NPTlRFTlRJT046ICAg ICAgICBQSFkgbGV2ZWwgY29udGVudGlvbiB3aGlsZSBsYW5lIDAgaXMgaGlnaC4KLSAqIEBEU0lf RExOMV9MUDFfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxlIGxh bmUgMSBpcyBoaWdoLgotICogQERTSV9ETE4yX0xQMV9DT05URU5USU9OOiAgICAgICAgUEhZIGxl dmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAyIGlzIGhpZ2guCi0gKiBARFNJX0RMTjNfTFAxX0NP TlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVudGlvbiB3aGlsZSBsYW5lIDMgaXMgaGln aC4KLSAqLwotZW51bSBkc2lfZXJyb3JfaW50X3R5cGUgewotCURTSV9SREJLX1NJTkdMRV9FQ0Nf RVJSID0gQklUKERTSV9FSU5UX1JEQktfU0lOR0xFX0VDQ19FUlIpLAotCURTSV9SREJLX01VTFRJ X0VDQ19FUlIgPSBCSVQoRFNJX0VJTlRfUkRCS19NVUxUSV9FQ0NfRVJSKSwKLQlEU0lfUkRCS19D UkNfRVJSID0gQklUKERTSV9FSU5UX1JEQktfQ1JDX0VSUiksCi0JRFNJX1JEQktfSU5DT01QTEVU RV9QS1QgPSBCSVQoRFNJX0VJTlRfUkRCS19JTkNPTVBMRVRFX1BLVCksCi0JRFNJX1BFUklQSF9F UlJPUl9QS1QgPSBCSVQoRFNJX0VJTlRfUEVSSVBIX0VSUk9SX1BLVCksCi0JRFNJX0xQX1JYX1RJ TUVPVVQgPSBCSVQoRFNJX0VJTlRfTFBfUlhfVElNRU9VVCksCi0JRFNJX0hTX1RYX1RJTUVPVVQg PSBCSVQoRFNJX0VJTlRfSFNfVFhfVElNRU9VVCksCi0JRFNJX0JUQV9USU1FT1VUID0gQklUKERT SV9FSU5UX0JUQV9USU1FT1VUKSwKLQlEU0lfUExMX1VOTE9DSyA9IEJJVChEU0lfRUlOVF9QTExf VU5MT0NLKSwKLQlEU0lfRExOMF9FU0NfRU5UUllfRVJSID0gQklUKERTSV9FSU5UX0RMTjBfRVND X0VOVFJZX0VSUiksCi0JRFNJX0RMTjBfRVNDX1NZTkNfRVJSID0gQklUKERTSV9FSU5UX0RMTjBf RVNDX1NZTkNfRVJSKSwKLQlEU0lfRExOMF9MUF9DT05UUk9MX0VSUiA9IEJJVChEU0lfRUlOVF9E TE4wX0xQX0NPTlRST0xfRVJSKSwKLQlEU0lfUEVORElOR19IU19UWF9USU1FT1VUID0gQklUKERT SV9FSU5UX1BFTkRJTkdfSFNfVFhfVElNRU9VVCksCi0JRFNJX0lOVEVSTEVBVkVfT1BfQ09OVEVO VElPTiA9IEJJVChEU0lfRUlOVF9JTlRFUkxFQVZFX09QX0NPTlRFTlRJT04pLAotCURTSV9DTURf RE1BX0ZJRk9fVU5ERVJGTE9XID0gQklUKERTSV9FSU5UX0NNRF9ETUFfRklGT19VTkRFUkZMT1cp LAotCURTSV9DTURfTURQX0ZJRk9fVU5ERVJGTE9XID0gQklUKERTSV9FSU5UX0NNRF9NRFBfRklG T19VTkRFUkZMT1cpLAotCURTSV9ETE4wX0hTX0ZJRk9fT1ZFUkZMT1cgPSBCSVQoRFNJX0VJTlRf RExOMF9IU19GSUZPX09WRVJGTE9XKSwKLQlEU0lfRExOMV9IU19GSUZPX09WRVJGTE9XID0gQklU KERTSV9FSU5UX0RMTjFfSFNfRklGT19PVkVSRkxPVyksCi0JRFNJX0RMTjJfSFNfRklGT19PVkVS RkxPVyA9IEJJVChEU0lfRUlOVF9ETE4yX0hTX0ZJRk9fT1ZFUkZMT1cpLAotCURTSV9ETE4zX0hT X0ZJRk9fT1ZFUkZMT1cgPSBCSVQoRFNJX0VJTlRfRExOM19IU19GSUZPX09WRVJGTE9XKSwKLQlE U0lfRExOMF9IU19GSUZPX1VOREVSRkxPVyA9IEJJVChEU0lfRUlOVF9ETE4wX0hTX0ZJRk9fVU5E RVJGTE9XKSwKLQlEU0lfRExOMV9IU19GSUZPX1VOREVSRkxPVyA9IEJJVChEU0lfRUlOVF9ETE4x X0hTX0ZJRk9fVU5ERVJGTE9XKSwKLQlEU0lfRExOMl9IU19GSUZPX1VOREVSRkxPVyA9IEJJVChE U0lfRUlOVF9ETE4yX0hTX0ZJRk9fVU5ERVJGTE9XKSwKLQlEU0lfRExOM19IU19GSUZPX1VOREVS RkxPVyA9IEJJVChEU0lfRUlOVF9ETE4zX0hTX0ZJRk9fVU5ERVJGTE9XKSwKLQlEU0lfRExOMF9M UDBfQ09OVEVOVElPTiA9IEJJVChEU0lfRUlOVF9ETE4wX0xQMF9DT05URU5USU9OKSwKLQlEU0lf RExOMV9MUDBfQ09OVEVOVElPTiA9IEJJVChEU0lfRUlOVF9ETE4xX0xQMF9DT05URU5USU9OKSwK LQlEU0lfRExOMl9MUDBfQ09OVEVOVElPTiA9IEJJVChEU0lfRUlOVF9ETE4yX0xQMF9DT05URU5U SU9OKSwKLQlEU0lfRExOM19MUDBfQ09OVEVOVElPTiA9IEJJVChEU0lfRUlOVF9ETE4zX0xQMF9D T05URU5USU9OKSwKLQlEU0lfRExOMF9MUDFfQ09OVEVOVElPTiA9IEJJVChEU0lfRUlOVF9ETE4w X0xQMV9DT05URU5USU9OKSwKLQlEU0lfRExOMV9MUDFfQ09OVEVOVElPTiA9IEJJVChEU0lfRUlO VF9ETE4xX0xQMV9DT05URU5USU9OKSwKLQlEU0lfRExOMl9MUDFfQ09OVEVOVElPTiA9IEJJVChE U0lfRUlOVF9ETE4yX0xQMV9DT05URU5USU9OKSwKLQlEU0lfRExOM19MUDFfQ09OVEVOVElPTiA9 IEJJVChEU0lfRUlOVF9ETE4zX0xQMV9DT05URU5USU9OKSwKLX07Ci0KLS8qKgotICogc3RydWN0 IGRzaV9jdHJsX2NtZF9kbWFfaW5mbyAtIGNvbW1hbmQgYnVmZmVyIGluZm9ybWF0aW9uCi0gKiBA b2Zmc2V0OiAgICAgICAgSU9NTVUgVkEgZm9yIGNvbW1hbmQgYnVmZmVyIGFkZHJlc3MuCi0gKiBA bGVuZ3RoOiAgICAgICAgTGVuZ3RoIG9mIHRoZSBjb21tYW5kIGJ1ZmZlci4KLSAqIEBlbl9icm9h ZGNhc3Q6ICBFbmFibGUgYnJvYWRjYXN0IG1vZGUgaWYgc2V0IHRvIHRydWUuCi0gKiBAaXNfbWFz dGVyOiAgICAgSXMgbWFzdGVyIGluIGJyb2FkY2FzdCBtb2RlLgotICogQHVzZV9scG06ICAgICAg IFVzZSBsb3cgcG93ZXIgbW9kZSBmb3IgY29tbWFuZCB0cmFuc21pc3Npb24uCi0gKi8KLXN0cnVj dCBkc2lfY3RybF9jbWRfZG1hX2luZm8gewotCXUzMiBvZmZzZXQ7Ci0JdTMyIGxlbmd0aDsKLQli b29sIGVuX2Jyb2FkY2FzdDsKLQlib29sIGlzX21hc3RlcjsKLQlib29sIHVzZV9scG07Ci19Owot Ci0vKioKLSAqIHN0cnVjdCBkc2lfY3RybF9jbWRfZG1hX2ZpZm9faW5mbyAtIGNvbW1hbmQgcGF5 bG9hZCB0cCBiZSBzZW50IHVzaW5nIEZJRk8KLSAqIEBjb21tYW5kOiAgICAgICAgVkEgZm9yIGNv bW1hbmQgYnVmZmVyLgotICogQHNpemU6ICAgICAgICAgICBTaXplIG9mIHRoZSBjb21tYW5kIGJ1 ZmZlci4KLSAqIEBlbl9icm9hZGNhc3Q6ICAgRW5hYmxlIGJyb2FkY2FzdCBtb2RlIGlmIHNldCB0 byB0cnVlLgotICogQGlzX21hc3RlcjogICAgICBJcyBtYXN0ZXIgaW4gYnJvYWRjYXN0IG1vZGUu Ci0gKiBAdXNlX2xwbTogICAgICAgIFVzZSBsb3cgcG93ZXIgbW9kZSBmb3IgY29tbWFuZCB0cmFu c21pc3Npb24uCi0gKi8KLXN0cnVjdCBkc2lfY3RybF9jbWRfZG1hX2ZpZm9faW5mbyB7Ci0JdTMy ICpjb21tYW5kOwotCXUzMiBzaXplOwotCWJvb2wgZW5fYnJvYWRjYXN0OwotCWJvb2wgaXNfbWFz dGVyOwotCWJvb2wgdXNlX2xwbTsKLX07Ci0KLXN0cnVjdCBkc2lfY3RybF9odzsKLQotc3RydWN0 IGN0cmxfdWxwc19jb25maWdfb3BzIHsKLQkvKioKLQkgKiB1bHBzX3JlcXVlc3QoKSAtIHJlcXVl c3QgdWxwcyBlbnRyeSBmb3Igc3BlY2lmaWVkIGxhbmVzCi0JICogQGN0cmw6ICAgICAgICAgIFBv aW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAbGFuZXM6ICAgICAg ICAgT1JlZCBsaXN0IG9mIGxhbmVzIChlbnVtIGRzaV9kYXRhX2xhbmVzKSB3aGljaCBuZWVkCi0J ICogICAgICAgICAgICAgICAgIHRvIGVudGVyIFVMUFMuCi0JICoKLQkgKiBDYWxsZXIgc2hvdWxk IGNoZWNrIGlmIGxhbmVzIGFyZSBpbiBVTFBTIG1vZGUgYnkgY2FsbGluZwotCSAqIGdldF9sYW5l c19pbl91bHBzKCkgb3BlcmF0aW9uLgotCSAqLwotCXZvaWQgKCp1bHBzX3JlcXVlc3QpKHN0cnVj dCBkc2lfY3RybF9odyAqY3RybCwgdTMyIGxhbmVzKTsKLQotCS8qKgotCSAqIHVscHNfZXhpdCgp IC0gZXhpdCBVTFBTIG9uIHNwZWNpZmllZCBsYW5lcwotCSAqIEBjdHJsOiAgICAgICAgICBQb2lu dGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGxhbmVzOiAgICAgICAg IE9SZWQgbGlzdCBvZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5lcykgd2hpY2ggbmVlZAotCSAq ICAgICAgICAgICAgICAgICB0byBleGl0IFVMUFMuCi0JICoKLQkgKiBDYWxsZXIgc2hvdWxkIGNo ZWNrIGlmIGxhbmVzIGFyZSBpbiBhY3RpdmUgbW9kZSBieSBjYWxsaW5nCi0JICogZ2V0X2xhbmVz X2luX3VscHMoKSBvcGVyYXRpb24uCi0JICovCi0Jdm9pZCAoKnVscHNfZXhpdCkoc3RydWN0IGRz aV9jdHJsX2h3ICpjdHJsLCB1MzIgbGFuZXMpOwotCi0JLyoqCi0JICogZ2V0X2xhbmVzX2luX3Vs cHMoKSAtIHJldHVybnMgdGhlIGxpc3Qgb2YgbGFuZXMgaW4gVUxQUyBtb2RlCi0JICogQGN0cmw6 ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKgot CSAqIFJldHVybnMgYW4gT1JlZCBsaXN0IG9mIGxhbmVzIChlbnVtIGRzaV9kYXRhX2xhbmVzKSB0 aGF0IGFyZSBpbiBVTFBTCi0JICogc3RhdGUuIElmIDAgaXMgcmV0dXJuZWQsIGFsbCB0aGUgbGFu ZXMgYXJlIGFjdGl2ZS4KLQkgKgotCSAqIFJldHVybjogTGlzdCBvZiBsYW5lcyBpbiBVTFBTIHN0 YXRlLgotCSAqLwotCXUzMiAoKmdldF9sYW5lc19pbl91bHBzKShzdHJ1Y3QgZHNpX2N0cmxfaHcg KmN0cmwpOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2N0cmxfaHdfb3BzIC0gb3BlcmF0aW9u cyBzdXBwb3J0ZWQgYnkgZHNpIGhvc3QgaGFyZHdhcmUKLSAqLwotc3RydWN0IGRzaV9jdHJsX2h3 X29wcyB7Ci0KLQkvKioKLQkgKiBob3N0X3NldHVwKCkgLSBTZXR1cCBEU0kgaG9zdCBjb25maWd1 cmF0aW9uCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gY29udHJvbGxlciBob3N0IGhh cmR3YXJlLgotCSAqIEBjb25maWc6ICAgICAgICBDb25maWd1cmF0aW9uIGZvciBEU0kgaG9zdCBj b250cm9sbGVyCi0JICovCi0Jdm9pZCAoKmhvc3Rfc2V0dXApKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCwKLQkJCSAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpjb25maWcpOwotCi0JLyoq Ci0JICogdmlkZW9fZW5naW5lX2VuKCkgLSBlbmFibGUgRFNJIHZpZGVvIGVuZ2luZQotCSAqIEBj dHJsOiAgICAgICAgICBQb2ludGVyIHRvIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBA b246ICAgICAgICAgICAgRW5hYmxlL2Rpc2FiZWwgdmlkZW8gZW5naW5lLgotCSAqLwotCXZvaWQg KCp2aWRlb19lbmdpbmVfZW4pKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgYm9vbCBvbik7Ci0K LQkvKioKLQkgKiB2aWRlb19lbmdpbmVfc2V0dXAoKSAtIFNldHVwIGRzaSBob3N0IGNvbnRyb2xs ZXIgZm9yIHZpZGVvIG1vZGUKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byBjb250cm9s bGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGNvbW1vbl9jZmc6ICAgIENvbW1vbiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcnMuCi0JICogQGNmZzogICAgICAgICAgIFZpZGVvIG1vZGUgY29uZmlndXJh dGlvbi4KLQkgKgotCSAqIFNldCB1cCBEU0kgdmlkZW8gZW5naW5lIHdpdGggYSBzcGVjaWZpYyBj b25maWd1cmF0aW9uLiBDb250cm9sbGVyIGFuZAotCSAqIHZpZGVvIGVuZ2luZSBhcmUgbm90IGVu YWJsZWQgYXMgcGFydCBvZiB0aGlzIGZ1bmN0aW9uLgotCSAqLwotCXZvaWQgKCp2aWRlb19lbmdp bmVfc2V0dXApKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICBzdHJ1Y3QgZHNpX2hv c3RfY29tbW9uX2NmZyAqY29tbW9uX2NmZywKLQkJCQkgICBzdHJ1Y3QgZHNpX3ZpZGVvX2VuZ2lu ZV9jZmcgKmNmZyk7Ci0KLQkvKioKLQkgKiBzZXRfdmlkZW9fdGltaW5nKCkgLSBzZXQgdXAgdGhl IHRpbWluZyBmb3IgdmlkZW8gZnJhbWUKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byBj b250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQG1vZGU6ICAgICAgICAgIFZpZGVvIG1vZGUg aW5mb3JtYXRpb24uCi0JICoKLQkgKiBTZXQgdXAgdGhlIHZpZGVvIHRpbWluZyBwYXJhbWV0ZXJz IGZvciB0aGUgRFNJIHZpZGVvIG1vZGUgb3BlcmF0aW9uLgotCSAqLwotCXZvaWQgKCpzZXRfdmlk ZW9fdGltaW5nKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJIHN0cnVjdCBkc2lfbW9k ZV9pbmZvICptb2RlKTsKLQotCS8qKgotCSAqIGNtZF9lbmdpbmVfc2V0dXAoKSAtIHNldHVwIGRz aSBob3N0IGNvbnRyb2xsZXIgZm9yIGNvbW1hbmQgbW9kZQotCSAqIEBjdHJsOiAgICAgICAgICBQ b2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGNvbW1vbl9jZmc6 ICAgIENvbW1vbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCi0JICogQGNmZzogICAgICAgICAg IENvbW1hbmQgbW9kZSBjb25maWd1cmF0aW9uLgotCSAqCi0JICogU2V0dXAgRFNJIENNRCBlbmdp bmUgd2l0aCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIENvbnRyb2xsZXIgYW5kCi0JICogY29t bWFuZCBlbmdpbmUgYXJlIG5vdCBlbmFibGVkIGFzIHBhcnQgb2YgdGhpcyBmdW5jdGlvbi4KLQkg Ki8KLQl2b2lkICgqY21kX2VuZ2luZV9zZXR1cCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAot CQkJCSBzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAqY29tbW9uX2NmZywKLQkJCQkgc3RydWN0 IGRzaV9jbWRfZW5naW5lX2NmZyAqY2ZnKTsKLQotCS8qKgotCSAqIHNldHVwX2NtZF9zdHJlYW0o KSAtIHNldCB1cCBwYXJhbWV0ZXJzIGZvciBjb21tYW5kIHBpeGVsIHN0cmVhbXMKLQkgKiBAY3Ry bDogICAgICAgICAgICAgIFBvaW50ZXIgdG8gY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAq IEBtb2RlOiAgICAgICAgICAgICAgUG9pbnRlciB0byBtb2RlIGluZm9ybWF0aW9uLgotCSAqIEBo X3N0cmlkZTogICAgICAgICAgSG9yaXpvbnRhbCBzdHJpZGUgaW4gYnl0ZXMuCi0JICogQHZjX2lk OiAgICAgICAgICAgICBzdHJlYW1faWQuCi0JICoKLQkgKiBTZXR1cCBwYXJhbWV0ZXJzIGZvciBj b21tYW5kIG1vZGUgcGl4ZWwgc3RyZWFtIHNpemUuCi0JICovCi0Jdm9pZCAoKnNldHVwX2NtZF9z dHJlYW0pKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgc3RydWN0IGRzaV9tb2RlX2lu Zm8gKm1vZGUsCi0JCQkJIHUzMiBoX3N0cmlkZSwKLQkJCQkgdTMyIHZjX2lkLAotCQkJCSBzdHJ1 Y3QgZHNpX3JlY3QgKnJvaSk7Ci0KLQkvKioKLQkgKiBjdHJsX2VuKCkgLSBlbmFibGUgRFNJIGNv bnRyb2xsZXIgZW5naW5lCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRy b2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAb246ICAgICAgICAgICAgdHVybiBvbi9vZmYgdGhl IERTSSBjb250cm9sbGVyIGVuZ2luZS4KLQkgKi8KLQl2b2lkICgqY3RybF9lbikoc3RydWN0IGRz aV9jdHJsX2h3ICpjdHJsLCBib29sIG9uKTsKLQotCS8qKgotCSAqIGNtZF9lbmdpbmVfZW4oKSAt IGVuYWJsZSBEU0kgY29udHJvbGxlciBjb21tYW5kIGVuZ2luZQotCSAqIEBjdHJsOiAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQG9uOiAgICAg ICAgICAgIFR1cm4gb24vb2ZmIHRoZSBEU0kgY29tbWFuZCBlbmdpbmUuCi0JICovCi0Jdm9pZCAo KmNtZF9lbmdpbmVfZW4pKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgYm9vbCBvbik7Ci0KLQkv KioKLQkgKiBwaHlfc3dfcmVzZXQoKSAtIHBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9uIHRoZSBQSFku Ci0JICogQGN0cmw6ICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdh cmUuCi0JICovCi0Jdm9pZCAoKnBoeV9zd19yZXNldCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJs KTsKLQotCS8qKgotCSAqIGRlYnVnX2J1cygpIC0gZ2V0IGRzaSBkZWJ1ZyBidXMgc3RhdHVzLgot CSAqIEBjdHJsOiAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotCSAqLwotCXZvaWQgKCpkZWJ1Z19idXMpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci0K LQkvKioKLQkgKiBzb2Z0X3Jlc2V0KCkgLSBwZXJmb3JtIGEgc29mdCByZXNldCBvbiBEU0kgY29u dHJvbGxlcgotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhv c3QgaGFyZHdhcmUuCi0JICoKLQkgKiBUaGUgdmlkZW8sIGNvbW1hbmQgYW5kIGNvbnRyb2xsZXIg ZW5naW5lcyB3aWxsIGJlIGRpc2FibGVkIGJlZm9yZSB0aGUKLQkgKiByZXNldCBpcyB0cmlnZ2Vy ZWQuIEFmdGVyLCB0aGUgZW5naW5lcyB3aWxsIGJlIHJlLWVuYWJsZWQgdG8gdGhlIHNhbWUKLQkg KiBzdGF0ZSBhcyBiZWZvcmUgdGhlIHJlc2V0LgotCSAqCi0JICogSWYgdGhlIHJlc2V0IGlzIGRv bmUgd2hpbGUgTURQIHRpbWluZyBlbmdpbmUgaXMgdHVybmVkIG9uLCB0aGUgdmlkZW8KLQkgKiBl bmdpbmUgc2hvdWxkIGJlIHJlLWVuYWJsZWQgb25seSBkdXJpbmcgdGhlIHZlcnRpY2FsIGJsYW5r aW5nIHRpbWUuCi0JICovCi0Jdm9pZCAoKnNvZnRfcmVzZXQpKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCk7Ci0KLQkvKioKLQkgKiBzZXR1cF9sYW5lX21hcCgpIC0gc2V0dXAgbWFwcGluZyBiZXR3 ZWVuIGxvZ2ljYWwgYW5kIHBoeXNpY2FsIGxhbmVzCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAbGFuZV9tYXA6ICAgICAg U3RydWN0dXJlIGRlZmluaW5nIHRoZSBtYXBwaW5nIGJldHdlZW4gRFNJIGxvZ2ljYWwKLQkgKiAg ICAgICAgICAgICAgICAgbGFuZXMgYW5kIHBoeXNpY2FsIGxhbmVzLgotCSAqLwotCXZvaWQgKCpz ZXR1cF9sYW5lX21hcCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJICAgICAgIHN0cnVj dCBkc2lfbGFuZV9tYXAgKmxhbmVfbWFwKTsKLQotCS8qKgotCSAqIGtpY2tvZmZfY29tbWFuZCgp IC0gdHJhbnNtaXRzIGNvbW1hbmRzIHN0b3JlZCBpbiBtZW1vcnkKLQkgKiBAY3RybDogICAgICAg ICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBjbWQ6ICAg ICAgICAgICBDb21tYW5kIGluZm9ybWF0aW9uLgotCSAqIEBmbGFnczogICAgICAgICBNb2RpZmll cnMgZm9yIGNvbW1hbmQgdHJhbnNtaXNzaW9uLgotCSAqCi0JICogVGhlIGNvbnRyb2xsZXIgaGFy ZHdhcmUgaXMgcHJvZ3JhbW1lZCB3aXRoIGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlCi0JICogY29t bWFuZCBidWZmZXIuIFRoZSB0cmFuc21pc3Npb24gaXMga2lja2VkIG9mZiBpZgotCSAqIERTSV9D VFJMX0hXX0NNRF9XQUlUX0ZPUl9UUklHR0VSIGZsYWcgaXMgbm90IHNldC4gSWYgdGhpcyBmbGFn IGlzCi0JICogc2V0LCBjYWxsZXIgc2hvdWxkIG1ha2UgYSBzZXBhcmF0ZSBjYWxsIHRvIHRyaWdn ZXJfY29tbWFuZF9kbWEoKSB0bwotCSAqIHRyYW5zbWl0IHRoZSBjb21tYW5kLgotCSAqLwotCXZv aWQgKCpraWNrb2ZmX2NvbW1hbmQpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQlzdHJ1 Y3QgZHNpX2N0cmxfY21kX2RtYV9pbmZvICpjbWQsCi0JCQkJdTMyIGZsYWdzKTsKLQotCS8qKgot CSAqIGtpY2tvZmZfZmlmb19jb21tYW5kKCkgLSB0cmFuc21pdHMgYSBjb21tYW5kIHVzaW5nIEZJ Rk8gaW4gZHNpCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLgotCSAqIEBj dHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0J ICogQGNtZDogICAgICAgICAgIENvbW1hbmQgaW5mb3JtYXRpb24uCi0JICogQGZsYWdzOiAgICAg ICAgIE1vZGlmaWVycyBmb3IgY29tbWFuZCB0cmFuc21pc3Npb24uCi0JICoKLQkgKiBUaGUgY29u dHJvbGxlciBoYXJkd2FyZSBGSUZPIGlzIHByb2dyYW1tZWQgd2l0aCBjb21tYW5kIGhlYWRlciBh bmQKLQkgKiBwYXlsb2FkLiBUaGUgdHJhbnNtaXNzaW9uIGlzIGtpY2tlZCBvZmYgaWYKLQkgKiBE U0lfQ1RSTF9IV19DTURfV0FJVF9GT1JfVFJJR0dFUiBmbGFnIGlzIG5vdCBzZXQuIElmIHRoaXMg ZmxhZyBpcwotCSAqIHNldCwgY2FsbGVyIHNob3VsZCBtYWtlIGEgc2VwYXJhdGUgY2FsbCB0byB0 cmlnZ2VyX2NvbW1hbmRfZG1hKCkgdG8KLQkgKiB0cmFuc21pdCB0aGUgY29tbWFuZC4KLQkgKi8K LQl2b2lkICgqa2lja29mZl9maWZvX2NvbW1hbmQpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwK LQkJCQkgICAgIHN0cnVjdCBkc2lfY3RybF9jbWRfZG1hX2ZpZm9faW5mbyAqY21kLAotCQkJCSAg ICAgdTMyIGZsYWdzKTsKLQotCXZvaWQgKCpyZXNldF9jbWRfZmlmbykoc3RydWN0IGRzaV9jdHJs X2h3ICpjdHJsKTsKLQkvKioKLQkgKiB0cmlnZ2VyX2NvbW1hbmRfZG1hKCkgLSB0cmlnZ2VyIHRy YW5zbWlzc2lvbiBvZiBjb21tYW5kIGJ1ZmZlci4KLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRl ciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqCi0JICogVGhpcyB0cmlnZ2Vy IGNhbiBiZSBvbmx5IHVzZWQgaWYgdGhlcmUgd2FzIGEgcHJpb3IgY2FsbCB0bwotCSAqIGtpY2tv ZmZfY29tbWFuZCgpIG9mIGtpY2tvZmZfZmlmb19jb21tYW5kKCkgd2l0aAotCSAqIERTSV9DVFJM X0hXX0NNRF9XQUlUX0ZPUl9UUklHR0VSIGZsYWcuCi0JICovCi0Jdm9pZCAoKnRyaWdnZXJfY29t bWFuZF9kbWEpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci0KLQkvKioKLQkgKiBnZXRfY21k X3JlYWRfZGF0YSgpIC0gZ2V0IGRhdGEgcmVhZCBmcm9tIHRoZSBwZXJpcGhlcmFsCi0JICogQGN0 cmw6ICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0J ICogQHJkX2J1ZjogICAgICAgICBCdWZmZXIgd2hlcmUgZGF0YSB3aWxsIGJlIHJlYWQgaW50by4K LQkgKiBAdG90YWxfcmVhZF9sZW46IE51bWJlciBvZiBieXRlcyB0byByZWFkLgotCSAqLwotCXUz MiAoKmdldF9jbWRfcmVhZF9kYXRhKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJIHU4 ICpyZF9idWYsCi0JCQkJIHUzMiB0b3RhbF9yZWFkX2xlbik7Ci0KLQkvKioKLQkgKiB3YWl0X2Zv cl9sYW5lX2lkbGUoKSAtIHdhaXQgZm9yIERTSSBsYW5lcyB0byBnbyB0byBpZGxlIHN0YXRlCi0J ICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2Fy ZS4KLQkgKiBAbGFuZXM6ICAgICAgICAgT1JlZCBsaXN0IG9mIGxhbmVzIChlbnVtIGRzaV9kYXRh X2xhbmVzKSB3aGljaCBuZWVkCi0JICogICAgICAgICAgICAgICAgIHRvIGJlIGNoZWNrZWQgdG8g YmUgaW4gaWRsZSBzdGF0ZS4KLQkgKi8KLQlpbnQgKCp3YWl0X2Zvcl9sYW5lX2lkbGUpKHN0cnVj dCBkc2lfY3RybF9odyAqY3RybCwgdTMyIGxhbmVzKTsKLQotCXN0cnVjdCBjdHJsX3VscHNfY29u ZmlnX29wcyB1bHBzX29wczsKLQotCS8qKgotCSAqIGNsYW1wX2VuYWJsZSgpIC0gZW5hYmxlIERT SSBjbGFtcHMKLQkgKiBAY3RybDogICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhv c3QgaGFyZHdhcmUuCi0JICogQGxhbmVzOiAgICAgICAgT1JlZCBsaXN0IG9mIGxhbmVzIHdoaWNo IG5lZWQgdG8gaGF2ZSBjbGFtcHMgcmVsZWFzZWQuCi0JICogQGVuYWJsZV91bHBzOiB1bHBzIHN0 YXRlLgotCSAqLwotCi0JLyoqCi0JICogY2xhbXBfZW5hYmxlKCkgLSBlbmFibGUgRFNJIGNsYW1w cyB0byBrZWVwIFBIWSBkcml2aW5nIGEgc3RhYmxlIGxpbmsKLQkgKiBAY3RybDogICAgICAgICBQ b2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGxhbmVzOiAgICAg ICAgT1JlZCBsaXN0IG9mIGxhbmVzIHdoaWNoIG5lZWQgdG8gaGF2ZSBjbGFtcHMgcmVsZWFzZWQu Ci0JICogQGVuYWJsZV91bHBzOiBUT0RPOj8/Ci0JICovCi0Jdm9pZCAoKmNsYW1wX2VuYWJsZSko c3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJICAgICB1MzIgbGFuZXMsCi0JCQkgICAgIGJv b2wgZW5hYmxlX3VscHMpOwotCi0JLyoqCi0JICogY2xhbXBfZGlzYWJsZSgpIC0gZGlzYWJsZSBE U0kgY2xhbXBzCi0JICogQGN0cmw6ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBo b3N0IGhhcmR3YXJlLgotCSAqIEBsYW5lczogICAgICAgIE9SZWQgbGlzdCBvZiBsYW5lcyB3aGlj aCBuZWVkIHRvIGhhdmUgY2xhbXBzIHJlbGVhc2VkLgotCSAqIEBkaXNhYmxlX3VscHM6IHVscHMg c3RhdGUuCi0JICovCi0Jdm9pZCAoKmNsYW1wX2Rpc2FibGUpKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCwKLQkJCSAgICAgIHUzMiBsYW5lcywKLQkJCSAgICAgIGJvb2wgZGlzYWJsZV91bHBzKTsK LQotCS8qKgotCSAqIHBoeV9yZXNldF9jb25maWcoKSAtIERpc2FibGUvZW5hYmxlIHByb3BhZ2F0 aW9uIG9mICByZXNldCBzaWduYWwKLQkgKglmcm9tIGFoYiBkb21haW4gdG8gRFNJIFBIWQotCSAq IEBjdHJsOiAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4K LQkgKiBAZW5hYmxlOglUcnVlIHRvIG1hc2sgdGhlIHJlc2V0IHNpZ25hbCwgZmFsc2UgdG8gdW5t YXNrCi0JICovCi0Jdm9pZCAoKnBoeV9yZXNldF9jb25maWcpKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCwKLQkJCSAgICAgYm9vbCBlbmFibGUpOwotCi0JLyoqCi0JICogZ2V0X2ludGVycnVwdF9z dGF0dXMoKSAtIHJldHVybnMgdGhlIGludGVycnVwdCBzdGF0dXMKLQkgKiBAY3RybDogICAgICAg ICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqCi0JICogUmV0 dXJucyB0aGUgT1JlZCBsaXN0IG9mIGludGVycnVwdHMoZW51bSBkc2lfc3RhdHVzX2ludF90eXBl KSB0aGF0Ci0JICogYXJlIGFjdGl2ZS4gVGhpcyBsaXN0IGRvZXMgbm90IGluY2x1ZGUgYW55IGVy cm9yIGludGVycnVwdHMuIENhbGxlcgotCSAqIHNob3VsZCBjYWxsIGdldF9lcnJvcl9zdGF0dXMg Zm9yIGVycm9yIGludGVycnVwdHMuCi0JICoKLQkgKiBSZXR1cm46IExpc3Qgb2YgYWN0aXZlIGlu dGVycnVwdHMuCi0JICovCi0JdTMyICgqZ2V0X2ludGVycnVwdF9zdGF0dXMpKHN0cnVjdCBkc2lf Y3RybF9odyAqY3RybCk7Ci0KLQkvKioKLQkgKiBjbGVhcl9pbnRlcnJ1cHRfc3RhdHVzKCkgLSBj bGVhcnMgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAaW50czogICAgICAgICAg TGlzdCBvZiBpbnRlcnJ1cHRzIHRvIGJlIGNsZWFyZWQuCi0JICovCi0Jdm9pZCAoKmNsZWFyX2lu dGVycnVwdF9zdGF0dXMpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgdTMyIGludHMpOwotCi0J LyoqCi0JICogZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHRzKCkgLSBlbmFibGUgdGhlIHNwZWNpZmll ZCBpbnRlcnJ1cHRzCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xs ZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAaW50czogICAgICAgICAgTGlzdCBvZiBpbnRlcnJ1cHRz IHRvIGJlIGVuYWJsZWQuCi0JICoKLQkgKiBFbmFibGVzIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0 cy4gVGhpcyBsaXN0IHdpbGwgb3ZlcnJpZGUgdGhlCi0JICogcHJldmlvdXMgaW50ZXJydXB0cyBl bmFibGVkIHRocm91Z2ggdGhpcyBmdW5jdGlvbi4gQ2FsbGVyIGhhcyB0bwotCSAqIG1haW50YWlu IHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0cyBlbmFibGVkLiBUbyBkaXNhYmxlIGFsbAotCSAq IGludGVycnVwdHMsIHNldCBpbnRzIHRvIDAuCi0JICovCi0Jdm9pZCAoKmVuYWJsZV9zdGF0dXNf aW50ZXJydXB0cykoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgaW50cyk7Ci0KLQkvKioK LQkgKiBnZXRfZXJyb3Jfc3RhdHVzKCkgLSByZXR1cm5zIHRoZSBlcnJvciBzdGF0dXMKLQkgKiBA Y3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgot CSAqCi0JICogUmV0dXJucyB0aGUgT1JlZCBsaXN0IG9mIGVycm9ycyhlbnVtIGRzaV9lcnJvcl9p bnRfdHlwZSkgdGhhdCBhcmUKLQkgKiBhY3RpdmUuIFRoaXMgbGlzdCBkb2VzIG5vdCBpbmNsdWRl IGFueSBzdGF0dXMgaW50ZXJydXB0cy4gQ2FsbGVyCi0JICogc2hvdWxkIGNhbGwgZ2V0X2ludGVy cnVwdF9zdGF0dXMgZm9yIHN0YXR1cyBpbnRlcnJ1cHRzLgotCSAqCi0JICogUmV0dXJuOiBMaXN0 IG9mIGFjdGl2ZSBlcnJvciBpbnRlcnJ1cHRzLgotCSAqLwotCXU2NCAoKmdldF9lcnJvcl9zdGF0 dXMpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci0KLQkvKioKLQkgKiBjbGVhcl9lcnJvcl9z dGF0dXMoKSAtIGNsZWFycyB0aGUgc3BlY2lmaWVkIGVycm9ycwotCSAqIEBjdHJsOiAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGVycm9yczog ICAgICAgICAgTGlzdCBvZiBlcnJvcnMgdG8gYmUgY2xlYXJlZC4KLQkgKi8KLQl2b2lkICgqY2xl YXJfZXJyb3Jfc3RhdHVzKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHU2NCBlcnJvcnMpOwot Ci0JLyoqCi0JICogZW5hYmxlX2Vycm9yX2ludGVycnVwdHMoKSAtIGVuYWJsZSB0aGUgc3BlY2lm aWVkIGludGVycnVwdHMKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJv bGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBlcnJvcnM6ICAgICAgICBMaXN0IG9mIGVycm9ycyB0 byBiZSBlbmFibGVkLgotCSAqCi0JICogRW5hYmxlcyB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMu IFRoaXMgbGlzdCB3aWxsIG92ZXJyaWRlIHRoZQotCSAqIHByZXZpb3VzIGludGVycnVwdHMgZW5h YmxlZCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uIENhbGxlciBoYXMgdG8KLQkgKiBtYWludGFpbiB0 aGUgc3RhdGUgb2YgdGhlIGludGVycnVwdHMgZW5hYmxlZC4gVG8gZGlzYWJsZSBhbGwKLQkgKiBp bnRlcnJ1cHRzLCBzZXQgZXJyb3JzIHRvIDAuCi0JICovCi0Jdm9pZCAoKmVuYWJsZV9lcnJvcl9p bnRlcnJ1cHRzKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHU2NCBlcnJvcnMpOwotCi0JLyoq Ci0JICogdmlkZW9fdGVzdF9wYXR0ZXJuX3NldHVwKCkgLSBzZXR1cCB0ZXN0IHBhdHRlcm4gZW5n aW5lIGZvciB2aWRlbyBtb2RlCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNv bnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAdHlwZTogICAgICAgICAgVHlwZSBvZiB0ZXN0 IHBhdHRlcm4uCi0JICogQGluaXRfdmFsOiAgICAgIEluaXRpYWwgdmFsdWUgdG8gdXNlIGZvciBn ZW5lcmF0aW5nIHRlc3QgcGF0dGVybi4KLQkgKi8KLQl2b2lkICgqdmlkZW9fdGVzdF9wYXR0ZXJu X3NldHVwKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJCSBlbnVtIGRzaV90ZXN0X3Bh dHRlcm4gdHlwZSwKLQkJCQkJIHUzMiBpbml0X3ZhbCk7Ci0KLQkvKioKLQkgKiBjbWRfdGVzdF9w YXR0ZXJuX3NldHVwKCkgLSBzZXR1cCB0ZXN0IHBhdHR0ZXJuIGVuZ2luZSBmb3IgY21kIG1vZGUK LQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3 YXJlLgotCSAqIEB0eXBlOiAgICAgICAgICBUeXBlIG9mIHRlc3QgcGF0dGVybi4KLQkgKiBAaW5p dF92YWw6ICAgICAgSW5pdGlhbCB2YWx1ZSB0byB1c2UgZm9yIGdlbmVyYXRpbmcgdGVzdCBwYXR0 ZXJuLgotCSAqIEBzdHJlYW1faWQ6ICAgICBTdHJlYW0gSWQgb24gd2hpY2ggcGFja2V0cyBhcmUg Z2VuZXJhdGVkLgotCSAqLwotCXZvaWQgKCpjbWRfdGVzdF9wYXR0ZXJuX3NldHVwKShzdHJ1Y3Qg ZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJICAgICAgIGVudW0gZHNpX3Rlc3RfcGF0dGVybiAgdHlw ZSwKLQkJCQkgICAgICAgdTMyIGluaXRfdmFsLAotCQkJCSAgICAgICB1MzIgc3RyZWFtX2lkKTsK LQotCS8qKgotCSAqIHRlc3RfcGF0dGVybl9lbmFibGUoKSAtIGVuYWJsZSB0ZXN0IHBhdHRlcm4g ZW5naW5lCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9z dCBoYXJkd2FyZS4KLQkgKiBAZW5hYmxlOiAgICAgICAgRW5hYmxlL0Rpc2FibGUgdGVzdCBwYXR0 ZXJuIGVuZ2luZS4KLQkgKi8KLQl2b2lkICgqdGVzdF9wYXR0ZXJuX2VuYWJsZSkoc3RydWN0IGRz aV9jdHJsX2h3ICpjdHJsLCBib29sIGVuYWJsZSk7Ci0KLQkvKioKLQkgKiBjbGVhcl9waHkwX2xu X2VycigpIC0gY2xlYXIgRFNJIFBIWSBsYW5lLTAgZXJyb3JzCi0JICogQGN0cmw6ICAgICAgICAg IFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKi8KLQl2b2lkICgq Y2xlYXJfcGh5MF9sbl9lcnIpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci0KLQkvKioKLQkg KiB0cmlnZ2VyX2NtZF90ZXN0X3BhdHRlcm4oKSAtIHRyaWdnZXIgYSBjb21tYW5kIG1vZGUgZnJh bWUgdXBkYXRlIHdpdGgKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QgcGF0 dGVybgotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0JICogQHN0cmVhbV9pZDogICAgIFN0cmVhbSBvbiB3aGljaCBmcmFtZSB1cGRh dGUgaXMgc2VudC4KLQkgKi8KLQl2b2lkICgqdHJpZ2dlcl9jbWRfdGVzdF9wYXR0ZXJuKShzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJCSB1MzIgc3RyZWFtX2lkKTsKLQotCXNzaXplX3Qg KCpyZWdfZHVtcF90b19idWZmZXIpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAg ICBjaGFyICpidWYsCi0JCQkJICAgICAgdTMyIHNpemUpOwotCi0JLyoqCi0JICogc2V0dXBfbWlz cigpIC0gU2V0dXAgZnJhbWUgTUlTUgotCSAqIEBjdHJsOiAgICAgICAgIFBvaW50ZXIgdG8gdGhl IGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAcGFuZWxfbW9kZTogICBDTUQgb3IgVklE RU8gbW9kZSBpbmRpY2F0b3IKLQkgKiBAZW5hYmxlOiAgICAgICBFbmFibGUvZGlzYWJsZSBNSVNS LgotCSAqIEBmcmFtZV9jb3VudDogIE51bWJlciBvZiBmcmFtZXMgdG8gYWNjdW11bGF0ZSBNSVNS LgotCSAqLwotCXZvaWQgKCpzZXR1cF9taXNyKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0J CQkgICBlbnVtIGRzaV9vcF9tb2RlIHBhbmVsX21vZGUsCi0JCQkgICBib29sIGVuYWJsZSwgdTMy IGZyYW1lX2NvdW50KTsKLQotCS8qKgotCSAqIGNvbGxlY3RfbWlzcigpIC0gUmVhZCBmcmFtZSBN SVNSCi0JICogQGN0cmw6ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhh cmR3YXJlLgotCSAqIEBwYW5lbF9tb2RlOiAgIENNRCBvciBWSURFTyBtb2RlIGluZGljYXRvcgot CSAqLwotCXUzMiAoKmNvbGxlY3RfbWlzcikoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJ ICAgIGVudW0gZHNpX29wX21vZGUgcGFuZWxfbW9kZSk7Ci0KLQkvKioKLQkgKiBzZXRfdGltaW5n X2RiKCkgLSBlbmFibGUvZGlzYWJsZSBUaW1pbmcgREIgcmVnaXN0ZXIKLQkgKiBAY3RybDogICAg ICAgICAgUG9pbnRlciB0byBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGVuYWJsZTog ICAgICAgIEVuYWJsZS9EaXNhYmxlIGZsYWcuCi0JICoKLQkgKiBFbmFibGUgb3IgRGlzYWJlIHRo ZSBUaW1pbmcgREIgcmVnaXN0ZXIuCi0JICovCi0Jdm9pZCAoKnNldF90aW1pbmdfZGIpKHN0cnVj dCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgYm9vbCBlbmFibGUpOwotfTsKLQotLyoKLSAqIHN0 cnVjdCBkc2lfY3RybF9odyAtIERTSSBjb250cm9sbGVyIGhhcmR3YXJlIG9iamVjdCBzcGVjaWZp YyB0byBhbiBpbnN0YW5jZQotICogQGJhc2U6ICAgICAgICAgICAgICAgICAgIFZBIGZvciB0aGUg RFNJIGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzLgotICogQGxlbmd0aDogICAgICAgICAgICAgICAg IExlbmd0aCBvZiB0aGUgRFNJIGNvbnRyb2xsZXIgcmVnaXN0ZXIgbWFwLgotICogQG1tc3NfbWlz Y19iYXNlOiAgICAgICAgIEJhc2UgYWRkcmVzcyBvZiBtbXNzX21pc2MgcmVnaXN0ZXIgbWFwLgot ICogQG1tc3NfbWlzY19sZW5ndGg6ICAgICAgIExlbmd0aCBvZiBtbXNzX21pc2MgcmVnaXN0ZXIg bWFwLgotICogQGRpc3BfY2NfYmFzZTogICAgICAgICAgIEJhc2UgYWRkcmVzcyBvZiBkaXNwX2Nj IHJlZ2lzdGVyIG1hcC4KLSAqIEBkaXNwX2NjX2xlbmd0aDogICAgICAgICBMZW5ndGggb2YgZGlz cF9jYyByZWdpc3RlciBtYXAuCi0gKiBAaW5kZXg6ICAgICAgICAgICAgICAgICAgSW5zdGFuY2Ug SUQgb2YgdGhlIGNvbnRyb2xsZXIuCi0gKiBAZmVhdHVyZV9tYXA6ICAgICAgICAgICAgRmVhdHVy ZXMgc3VwcG9ydGVkIGJ5IHRoZSBEU0kgY29udHJvbGxlci4KLSAqIEBvcHM6ICAgICAgICAgICAg ICAgICAgICBGdW5jdGlvbiBwb2ludGVycyB0byB0aGUgb3BlcmF0aW9ucyBzdXBwb3J0ZWQgYnkg dGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci4KLSAqIEBzdXBwb3J0 ZWRfaW50ZXJydXB0czogICBOdW1iZXIgb2Ygc3VwcG9ydGVkIGludGVycnVwdHMuCi0gKiBAc3Vw cG9ydGVkX2Vycm9yczogICAgICAgTnVtYmVyIG9mIHN1cHBvcnRlZCBlcnJvcnMuCi0gKiBAcGh5 X2lzb2xhdGlvbl9lbmFibGVkOiAgICBBIGJvb2xlYW4gcHJvcGVydHkgYWxsb3dzIHRvIGlzb2xh dGUgdGhlIHBoeSBmcm9tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZHNpIGNvbnRyb2xs ZXIgYW5kIHJ1biBvbmx5IGRzaSBjb250cm9sbGVyLgotICovCi1zdHJ1Y3QgZHNpX2N0cmxfaHcg ewotCXZvaWQgX19pb21lbSAqYmFzZTsKLQl1MzIgbGVuZ3RoOwotCXZvaWQgX19pb21lbSAqbW1z c19taXNjX2Jhc2U7Ci0JdTMyIG1tc3NfbWlzY19sZW5ndGg7Ci0Jdm9pZCBfX2lvbWVtICpkaXNw X2NjX2Jhc2U7Ci0JdTMyIGRpc3BfY2NfbGVuZ3RoOwotCXUzMiBpbmRleDsKLQotCS8qIGZlYXR1 cmVzICovCi0JREVDTEFSRV9CSVRNQVAoZmVhdHVyZV9tYXAsIERTSV9DVFJMX01BWF9GRUFUVVJF Uyk7Ci0Jc3RydWN0IGRzaV9jdHJsX2h3X29wcyBvcHM7Ci0KLQkvKiBjYXBhYmlsaXRpZXMgKi8K LQl1MzIgc3VwcG9ydGVkX2ludGVycnVwdHM7Ci0JdTY0IHN1cHBvcnRlZF9lcnJvcnM7Ci0KLQli b29sIHBoeV9pc29sYXRpb25fZW5hYmxlZDsKLX07Ci0KLSNlbmRpZiAvKiBfRFNJX0NUUkxfSFdf SF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0 cmxfaHdfMV80LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3 XzFfNC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDIxMDVmLi4wMDAwMDAwCi0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMV80LmMKKysr IC9kZXYvbnVsbApAQCAtMSw0ODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0y MDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgotICoKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpICJkc2ktaHc6IiBmbXQKLSNpbmNsdWRl IDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgotCi0jaW5jbHVkZSAi ZHNpX2N0cmxfaHcuaCIKLSNpbmNsdWRlICJkc2lfY3RybF9yZWcuaCIKLSNpbmNsdWRlICJkc2lf aHcuaCIKLQotI2RlZmluZSBNTVNTX01JU0NfQ0xBTVBfUkVHX09GRiAgICAgICAgICAgMHgwMDE0 Ci0KLS8qKgotICogZHNpX2N0cmxfaHdfMTRfc2V0dXBfbGFuZV9tYXAoKSAtIHNldHVwIG1hcHBp bmcgYmV0d2VlbgotICoJbG9naWNhbCBhbmQgcGh5c2ljYWwgbGFuZXMKLSAqIEBjdHJsOiAgICAg ICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAbGFuZV9t YXA6ICAgICAgU3RydWN0dXJlIGRlZmluaW5nIHRoZSBtYXBwaW5nIGJldHdlZW4gRFNJIGxvZ2lj YWwKLSAqICAgICAgICAgICAgICAgICBsYW5lcyBhbmQgcGh5c2ljYWwgbGFuZXMuCi0gKi8KLXZv aWQgZHNpX2N0cmxfaHdfMTRfc2V0dXBfbGFuZV9tYXAoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJs LAotCQkJICAgICAgIHN0cnVjdCBkc2lfbGFuZV9tYXAgKmxhbmVfbWFwKQotewotCURTSV9XMzIo Y3RybCwgRFNJX0xBTkVfU1dBUF9DVFJMLCBsYW5lX21hcC0+bGFuZV9tYXBfdjEpOwotCi0JcHJf ZGVidWcoIltEU0lfJWRdIExhbmUgc3dhcCBzZXR1cCBjb21wbGV0ZVxuIiwgY3RybC0+aW5kZXgp OwotfQotCi0vKioKLSAqIGRzaV9jdHJsX2h3XzE0X3dhaXRfZm9yX2xhbmVfaWRsZSgpCi0gKiBU aGlzIGZ1bmN0aW9uIHdhaXRzIGZvciBhbGwgdGhlIGFjdGl2ZSBEU0kgbGFuZXMgdG8gYmUgaWRs ZSBieSBwb2xsaW5nIGFsbAotICogdGhlIEZJRk9fRU1QVFkgYml0cyBhbmQgcG9sbGluZyBoZSBs YW5lIHN0YXR1cyB0byBlbnN1cmUgdGhhdCBhbGwgdGhlIGxhbmVzCi0gKiBhcmUgaW4gc3RvcCBz dGF0ZS4gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGJ1cyBjbG9ja3MgcmVxdWlyZWQg dG8KLSAqIGFjY2VzcyB0aGUgcmVnaXN0ZXJzIGFyZSBhbHJlYWR5IHR1cm5lZCBvbi4KLSAqCi0g KiBAY3RybDogICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0g KiBAbGFuZXM6ICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgKGVudW0gZHNpX2RhdGFfbGFuZXMpIHdo aWNoIG5lZWQKLSAqICAgICAgICAgICAgIHRvIGJlIHN0b3BwZWQuCi0gKgotICogcmV0dXJuOiBF cnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfaHdfMTRfd2FpdF9mb3JfbGFuZV9pZGxlKHN0 cnVjdCBkc2lfY3RybF9odyAqY3RybCwgdTMyIGxhbmVzKQotewotCWludCByYyA9IDAsIHZhbCA9 IDA7Ci0JdTMyIHN0b3Bfc3RhdGVfbWFzayA9IDAsIGZpZm9fZW1wdHlfbWFzayA9IDA7Ci0JdTMy IGNvbnN0IHNsZWVwX3VzID0gMTA7Ci0JdTMyIGNvbnN0IHRpbWVvdXRfdXMgPSAxMDA7Ci0KLQlp ZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzApIHsKLQkJc3RvcF9zdGF0ZV9tYXNrIHw9IEJJVCgw KTsKLQkJZmlmb19lbXB0eV9tYXNrIHw9IChCSVQoMTIpIHwgQklUKDE2KSk7Ci0JfQotCWlmIChs YW5lcyAmIERTSV9EQVRBX0xBTkVfMSkgewotCQlzdG9wX3N0YXRlX21hc2sgfD0gQklUKDEpOwot CQkJZmlmb19lbXB0eV9tYXNrIHw9IEJJVCgyMCk7Ci0JfQotCWlmIChsYW5lcyAmIERTSV9EQVRB X0xBTkVfMikgewotCQlzdG9wX3N0YXRlX21hc2sgfD0gQklUKDIpOwotCQlmaWZvX2VtcHR5X21h c2sgfD0gQklUKDI0KTsKLQl9Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8zKSB7Ci0JCXN0 b3Bfc3RhdGVfbWFzayB8PSBCSVQoMyk7Ci0JCWZpZm9fZW1wdHlfbWFzayB8PSBCSVQoMjgpOwot CX0KLQotCXByX2RlYnVnKCIlczogcG9sbGluZyBmb3IgZmlmbyBlbXB0eSwgbWFzaz0weCUwOHhc biIsIF9fZnVuY19fLAotCQlmaWZvX2VtcHR5X21hc2spOwotCXJjID0gcmVhZGxfcG9sbF90aW1l b3V0KGN0cmwtPmJhc2UgKyBEU0lfRklGT19TVEFUVVMsIHZhbCwKLQkJCSh2YWwgJiBmaWZvX2Vt cHR5X21hc2spLCBzbGVlcF91cywgdGltZW91dF91cyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi JXM6IGZpZm8gbm90IGVtcHR5LCBGSUZPX1NUQVRVUz0weCUwOHhcbiIsCi0JCQkJX19mdW5jX18s IHZhbCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBwb2xsaW5nIGZvciBs YW5lcyB0byBiZSBpbiBzdG9wIHN0YXRlLCBtYXNrPTB4JTA4eFxuIiwKLQkJX19mdW5jX18sIHN0 b3Bfc3RhdGVfbWFzayk7Ci0JcmMgPSByZWFkbF9wb2xsX3RpbWVvdXQoY3RybC0+YmFzZSArIERT SV9MQU5FX1NUQVRVUywgdmFsLAotCQkJKHZhbCAmIHN0b3Bfc3RhdGVfbWFzayksIHNsZWVwX3Vz LCB0aW1lb3V0X3VzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCIlczogbGFuZXMgbm90IGluIHN0 b3Agc3RhdGUsIExBTkVfU1RBVFVTPTB4JTA4eFxuIiwKLQkJCV9fZnVuY19fLCB2YWwpOwotCQln b3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotCi19Ci0KLS8qKgotICogdWxw c19yZXF1ZXN0KCkgLSByZXF1ZXN0IHVscHMgZW50cnkgZm9yIHNwZWNpZmllZCBsYW5lcwotICog QGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4K LSAqIEBsYW5lczogICAgICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgKGVudW0gZHNpX2RhdGFfbGFu ZXMpIHdoaWNoIG5lZWQKLSAqICAgICAgICAgICAgICAgICB0byBlbnRlciBVTFBTLgotICoKLSAq IENhbGxlciBzaG91bGQgY2hlY2sgaWYgbGFuZXMgYXJlIGluIFVMUFMgbW9kZSBieSBjYWxsaW5n Ci0gKiBnZXRfbGFuZXNfaW5fdWxwcygpIG9wZXJhdGlvbi4KLSAqLwotdm9pZCBkc2lfY3RybF9o d18xNF91bHBzX3JlcXVlc3Qoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgbGFuZXMpCi17 Ci0JdTMyIHJlZyA9IDA7Ci0KLQlpZiAobGFuZXMgJiBEU0lfQ0xPQ0tfTEFORSkKLQkJcmVnID0g QklUKDQpOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMCkKLQkJcmVnIHw9IEJJVCgwKTsK LQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzEpCi0JCXJlZyB8PSBCSVQoMSk7Ci0JaWYgKGxh bmVzICYgRFNJX0RBVEFfTEFORV8yKQotCQlyZWcgfD0gQklUKDIpOwotCWlmIChsYW5lcyAmIERT SV9EQVRBX0xBTkVfMykKLQkJcmVnIHw9IEJJVCgzKTsKLQotCS8qCi0JICogVUxQUyBlbnRyeSBy ZXF1ZXN0LiBXYWl0IGZvciBzaG9ydCB0aW1lIHRvIG1ha2Ugc3VyZQotCSAqIHRoYXQgdGhlIGxh bmVzIGVudGVyIFVMUFMuIFJlY29tbWVuZGVkIGFzIHBlciBIUEcuCi0JICovCi0JRFNJX1czMihj dHJsLCBEU0lfTEFORV9DVFJMLCByZWcpOwotCXVzbGVlcF9yYW5nZSgxMDAsIDExMCk7Ci0KLQlw cl9kZWJ1ZygiW0RTSV8lZF0gVUxQUyByZXF1ZXN0ZWQgZm9yIGxhbmVzIDB4JXhcbiIsIGN0cmwt PmluZGV4LAotCQkgbGFuZXMpOwotfQotCi0vKioKLSAqIHVscHNfZXhpdCgpIC0gZXhpdCBVTFBT IG9uIHNwZWNpZmllZCBsYW5lcwotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNv bnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBsYW5lczogICAgICAgICBPUmVkIGxpc3Qgb2Yg bGFuZXMgKGVudW0gZHNpX2RhdGFfbGFuZXMpIHdoaWNoIG5lZWQKLSAqICAgICAgICAgICAgICAg ICB0byBleGl0IFVMUFMuCi0gKgotICogQ2FsbGVyIHNob3VsZCBjaGVjayBpZiBsYW5lcyBhcmUg aW4gYWN0aXZlIG1vZGUgYnkgY2FsbGluZwotICogZ2V0X2xhbmVzX2luX3VscHMoKSBvcGVyYXRp b24uCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfMTRfdWxwc19leGl0KHN0cnVjdCBkc2lfY3RybF9o dyAqY3RybCwgdTMyIGxhbmVzKQotewotCXUzMiByZWcgPSAwOwotCi0JaWYgKGxhbmVzICYgRFNJ X0NMT0NLX0xBTkUpCi0JCXJlZyA9IEJJVCgxMik7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFO RV8wKQotCQlyZWcgfD0gQklUKDgpOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMSkKLQkJ cmVnIHw9IEJJVCg5KTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpCi0JCXJlZyB8PSBC SVQoMTApOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMykKLQkJcmVnIHw9IEJJVCgxMSk7 Ci0KLQkvKgotCSAqIFVMUFMgRXhpdCBSZXF1ZXN0Ci0JICogSGFyZHdhcmUgcmVxdWlyZW1lbnQg aXMgdG8gd2FpdCBmb3IgYXQgbGVhc3QgMW1zCi0JICovCi0JRFNJX1czMihjdHJsLCBEU0lfTEFO RV9DVFJMLCByZWcpOwotCXVzbGVlcF9yYW5nZSgxMDAwLCAxMDEwKTsKLQkvKgotCSAqIFNvbWV0 aW1lcyB3aGVuIGV4aXRpbmcgVUxQUywgaXQgaXMgcG9zc2libGUgdGhhdCBzb21lIERTSQotCSAq IGxhbmVzIGFyZSBub3QgaW4gdGhlIHN0b3Agc3RhdGUgd2hpY2ggY291bGQgbGVhZCB0byBEU0kK LQkgKiBjb21tYW5kcyBub3QgZ29pbmcgdGhyb3VnaC4gVG8gYXZvaWQgdGhpcywgZm9yY2UgdGhl IGxhbmVzCi0JICogdG8gYmUgaW4gc3RvcCBzdGF0ZS4KLQkgKi8KLQlEU0lfVzMyKGN0cmwsIERT SV9MQU5FX0NUUkwsIHJlZyA8PCA4KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9MQU5FX0NUUkwsIDB4 MCk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gVUxQUyBleGl0IHJlcXVlc3QgZm9yIGxhbmVzPTB4 JXhcbiIsCi0JCSBjdHJsLT5pbmRleCwgbGFuZXMpOwotfQotCi0vKioKLSAqIGdldF9sYW5lc19p bl91bHBzKCkgLSByZXR1cm5zIHRoZSBsaXN0IG9mIGxhbmVzIGluIFVMUFMgbW9kZQotICogQGN0 cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAq Ci0gKiBSZXR1cm5zIGFuIE9SZWQgbGlzdCBvZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5lcykg dGhhdCBhcmUgaW4gVUxQUwotICogc3RhdGUuIElmIDAgaXMgcmV0dXJuZWQsIGFsbCB0aGUgbGFu ZXMgYXJlIGFjdGl2ZS4KLSAqCi0gKiBSZXR1cm46IExpc3Qgb2YgbGFuZXMgaW4gVUxQUyBzdGF0 ZS4KLSAqLwotdTMyIGRzaV9jdHJsX2h3XzE0X2dldF9sYW5lc19pbl91bHBzKHN0cnVjdCBkc2lf Y3RybF9odyAqY3RybCkKLXsKLQl1MzIgcmVnID0gMDsKLQl1MzIgbGFuZXMgPSAwOwotCi0JcmVn ID0gRFNJX1IzMihjdHJsLCBEU0lfTEFORV9TVEFUVVMpOwotCWlmICghKHJlZyAmIEJJVCg4KSkp Ci0JCWxhbmVzIHw9IERTSV9EQVRBX0xBTkVfMDsKLQlpZiAoIShyZWcgJiBCSVQoOSkpKQotCQls YW5lcyB8PSBEU0lfREFUQV9MQU5FXzE7Ci0JaWYgKCEocmVnICYgQklUKDEwKSkpCi0JCWxhbmVz IHw9IERTSV9EQVRBX0xBTkVfMjsKLQlpZiAoIShyZWcgJiBCSVQoMTEpKSkKLQkJbGFuZXMgfD0g RFNJX0RBVEFfTEFORV8zOwotCWlmICghKHJlZyAmIEJJVCgxMikpKQotCQlsYW5lcyB8PSBEU0lf Q0xPQ0tfTEFORTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBsYW5lcyBpbiB1bHBzID0gMHgleFxu IiwgY3RybC0+aW5kZXgsIGxhbmVzKTsKLQlyZXR1cm4gbGFuZXM7Ci19Ci0KLS8qKgotICogY2xh bXBfZW5hYmxlKCkgLSBlbmFibGUgRFNJIGNsYW1wcyB0byBrZWVwIFBIWSBkcml2aW5nIGEgc3Rh YmxlIGxpbmsKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhv c3QgaGFyZHdhcmUuCi0gKiBAbGFuZXM6ICAgICAgICAgT1JlZCBsaXN0IG9mIGxhbmVzIHdoaWNo IG5lZWQgdG8gYmUgY2xhbXBlZC4KLSAqIEBlbmFibGVfdWxwczogICBCb29sZWFuIHRvIHNwZWNp ZnkgaWYgVUxQUyBpcyBlbmFibGVkIGluIERTSSBjb250cm9sbGVyCi0gKi8KLXZvaWQgZHNpX2N0 cmxfaHdfMTRfY2xhbXBfZW5hYmxlKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgdTMy IGxhbmVzLAotCQkJCSBib29sIGVuYWJsZV91bHBzKQotewotCXUzMiBjbGFtcF9yZWcgPSAwOwot CXUzMiBiaXRfc2hpZnQgPSAwOwotCXUzMiByZWcgPSAwOwotCi0JaWYgKGN0cmwtPmluZGV4ID09 IDEpCi0JCWJpdF9zaGlmdCA9IDE2OwotCi0JaWYgKGxhbmVzICYgRFNJX0NMT0NLX0xBTkUpIHsK LQkJY2xhbXBfcmVnIHw9IEJJVCg5KTsKLQkJaWYgKGVuYWJsZV91bHBzKQotCQkJY2xhbXBfcmVn IHw9IEJJVCg4KTsKLQl9Ci0KLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzApIHsKLQkJY2xh bXBfcmVnIHw9IEJJVCg3KTsKLQkJaWYgKGVuYWJsZV91bHBzKQotCQkJY2xhbXBfcmVnIHw9IEJJ VCg2KTsKLQl9Ci0KLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzEpIHsKLQkJY2xhbXBfcmVn IHw9IEJJVCg1KTsKLQkJaWYgKGVuYWJsZV91bHBzKQotCQkJY2xhbXBfcmVnIHw9IEJJVCg0KTsK LQl9Ci0KLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpIHsKLQkJY2xhbXBfcmVnIHw9IEJJ VCgzKTsKLQkJaWYgKGVuYWJsZV91bHBzKQotCQkJY2xhbXBfcmVnIHw9IEJJVCgyKTsKLQl9Ci0K LQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpIHsKLQkJY2xhbXBfcmVnIHw9IEJJVCgxKTsK LQkJaWYgKGVuYWJsZV91bHBzKQotCQkJY2xhbXBfcmVnIHw9IEJJVCgwKTsKLQl9Ci0KLQlyZWcg PSBEU0lfTU1TU19NSVNDX1IzMihjdHJsLCBNTVNTX01JU0NfQ0xBTVBfUkVHX09GRik7Ci0JcmVn IHw9IChjbGFtcF9yZWcgPDwgYml0X3NoaWZ0KTsKLQlEU0lfTU1TU19NSVNDX1czMihjdHJsLCBN TVNTX01JU0NfQ0xBTVBfUkVHX09GRiwgcmVnKTsKLQotCXJlZyA9IERTSV9NTVNTX01JU0NfUjMy KGN0cmwsIE1NU1NfTUlTQ19DTEFNUF9SRUdfT0ZGKTsKLQlyZWcgfD0gKEJJVCgxNSkgPDwgYml0 X3NoaWZ0KTsJLyogRW5hYmxlIGNsYW1wICovCi0JRFNJX01NU1NfTUlTQ19XMzIoY3RybCwgTU1T U19NSVNDX0NMQU1QX1JFR19PRkYsIHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gQ2xhbXBz IGVuYWJsZWQgZm9yIGxhbmVzPTB4JXhcbiIsIGN0cmwtPmluZGV4LAotCQkgbGFuZXMpOwotfQot Ci0vKioKLSAqIGNsYW1wX2Rpc2FibGUoKSAtIGRpc2FibGUgRFNJIGNsYW1wcwotICogQGN0cmw6 ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBs YW5lczogICAgICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgd2hpY2ggbmVlZCB0byBoYXZlIGNsYW1w cyByZWxlYXNlZC4KLSAqIEBkaXNhYmxlX3VscHM6ICAgQm9vbGVhbiB0byBzcGVjaWZ5IGlmIFVM UFMgaXMgZW5hYmxlZCBpbiBEU0kgY29udHJvbGxlcgotICovCi12b2lkIGRzaV9jdHJsX2h3XzE0 X2NsYW1wX2Rpc2FibGUoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgdTMyIGxhbmVz LAotCQkJCSAgYm9vbCBkaXNhYmxlX3VscHMpCi17Ci0JdTMyIGNsYW1wX3JlZyA9IDA7Ci0JdTMy IGJpdF9zaGlmdCA9IDA7Ci0JdTMyIHJlZyA9IDA7Ci0KLQlpZiAoY3RybC0+aW5kZXggPT0gMSkK LQkJYml0X3NoaWZ0ID0gMTY7Ci0KLQlpZiAobGFuZXMgJiBEU0lfQ0xPQ0tfTEFORSkgewotCQlj bGFtcF9yZWcgfD0gQklUKDkpOwotCQlpZiAoZGlzYWJsZV91bHBzKQotCQkJY2xhbXBfcmVnIHw9 IEJJVCg4KTsKLQl9Ci0KLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzApIHsKLQkJY2xhbXBf cmVnIHw9IEJJVCg3KTsKLQkJaWYgKGRpc2FibGVfdWxwcykKLQkJCWNsYW1wX3JlZyB8PSBCSVQo Nik7Ci0JfQotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8xKSB7Ci0JCWNsYW1wX3JlZyB8 PSBCSVQoNSk7Ci0JCWlmIChkaXNhYmxlX3VscHMpCi0JCQljbGFtcF9yZWcgfD0gQklUKDQpOwot CX0KLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMikgewotCQljbGFtcF9yZWcgfD0gQklU KDMpOwotCQlpZiAoZGlzYWJsZV91bHBzKQotCQkJY2xhbXBfcmVnIHw9IEJJVCgyKTsKLQl9Ci0K LQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpIHsKLQkJY2xhbXBfcmVnIHw9IEJJVCgxKTsK LQkJaWYgKGRpc2FibGVfdWxwcykKLQkJCWNsYW1wX3JlZyB8PSBCSVQoMCk7Ci0JfQotCi0JY2xh bXBfcmVnIHw9IEJJVCgxNSk7IC8qIEVuYWJsZSBjbGFtcCAqLwotCWNsYW1wX3JlZyA8PD0gYml0 X3NoaWZ0OwotCi0JcmVnID0gRFNJX01NU1NfTUlTQ19SMzIoY3RybCwgTU1TU19NSVNDX0NMQU1Q X1JFR19PRkYpOwotCXJlZyAmPSB+KGNsYW1wX3JlZyk7Ci0JRFNJX01NU1NfTUlTQ19XMzIoY3Ry bCwgTU1TU19NSVNDX0NMQU1QX1JFR19PRkYsIHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0g RGlzYWJsZSBjbGFtcHMgZm9yIGxhbmVzPSVkXG4iLCBjdHJsLT5pbmRleCwgbGFuZXMpOwotfQot Ci0jZGVmaW5lIERVTVBfUkVHX1ZBTFVFKG9mZikgIlx0JS0zMHM6IDB4JTA4eFxuIiwgI29mZiwg RFNJX1IzMihjdHJsLCBvZmYpCi1zc2l6ZV90IGRzaV9jdHJsX2h3XzE0X3JlZ19kdW1wX3RvX2J1 ZmZlcihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJCSAgY2hhciAqYnVmLAotCQkJCQkg IHUzMiBzaXplKQotewotCXUzMiBsZW4gPSAwOwotCi0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksICJDT05GSUdVUkFUSU9OIFJFR1M6XG4iKTsKLQotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X0hXX1ZFUlNJT04pKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYg KyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfU1RBVFVTKSk7Ci0J bGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19W QUxVRShEU0lfRklGT19TVEFUVVMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChz aXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX0NUUkwpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9WSURFT19NT0RFX1NZTkNfREFUQVRZUEUpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1 ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RF X1BJWEVMX0RBVEFUWVBFKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAt IGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9CTEFOS0lOR19EQVRBVFlQ RSkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfREFUQV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9f TU9ERV9BQ1RJVkVfSCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBs ZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfQUNUSVZFX1YpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9WSURFT19NT0RFX1RPVEFMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAo c2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9IU1lOQykpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX1ZJREVPX01PREVfVlNZTkMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxl biksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX1ZTWU5D X1ZQT1MpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJ CURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfRE1BX0NUUkwpKTsKLQlsZW4gKz0gc25w cmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9D T01NQU5EX01PREVfTURQX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChz aXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX0RDU19D TURfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX0RNQV9DTURfT0ZGU0VUKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRE1BX0NN RF9MRU5HVEgpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETUFfRklGT19DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRE1BX05V TExfUEFDS0VUX0RBVEEpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0g bGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTBfQ1RS TCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMF9UT1RBTCkpOwotCWxlbiAr PSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUo RFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChi dWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9N T0RFX01EUF9TVFJFQU0xX1RPVEFMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAo c2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQUNLX0VSUl9TVEFUVVMpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9SREJLX0RBVEEwKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBMSkpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X1JEQktfREFUQTIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9SREJLX0RBVEEzKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19E QVRBVFlQRTApKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9SREJLX0RBVEFUWVBFMSkpOwotCWxlbiArPSBzbnByaW50 ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RSSUdf Q1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJ RFVNUF9SRUdfVkFMVUUoRFNJX0VYVF9NVVgpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxl biksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9FWFRfTVVYX1RFX1BVTFNF X0RFVEVDVF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxl biksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ01EX01PREVfRE1BX1NXX1RSSUdHRVIpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9DTURfTU9ERV9NRFBfU1dfVFJJR0dFUikpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NNRF9NT0RFX0JU QV9TV19UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxl biksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkVTRVRfU1dfVFJJR0dFUikpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X0xBTkVfU1RBVFVTKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxl biksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfTEFORV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfTEFORV9T V0FQX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETE4wX1BIWV9FUlIpKTsKLQlsZW4gKz0gc25wcmludGYo KGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9MUF9USU1F Ul9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0J CQlEVU1QX1JFR19WQUxVRShEU0lfSFNfVElNRVJfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RJTUVPVVRf U1RBVFVTKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0J CQlEVU1QX1JFR19WQUxVRShEU0lfQ0xLT1VUX1RJTUlOR19DVFJMKSk7Ci0JbGVuICs9IHNucHJp bnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRU9U X1BBQ0tFVCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX0VPVF9QQUNLRVRfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50 ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0dFTkVS SUNfRVNDX1RYX1RSSUdHRVIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9FUlJfSU5UX01BU0swKSk7Ci0JbGVuICs9 IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShE U0lfSU5UX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9TT0ZUX1JFU0VUKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ0xLX0NU UkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9DTEtfU1RBVFVTKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUEhZX1NXX1JFU0VUKSk7 Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JF R19WQUxVRShEU0lfQVhJMkFIQl9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01EUF9D VFJMMikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJ RFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMl9DVFJMKSk7Ci0JbGVu ICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxV RShEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJFQU0yX1RPVEFMKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVkJJRl9D VFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlE VU1QX1JFR19WQUxVRShEU0lfQUVTX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxl biksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9SREJLX0RBVEFfQ1RSTCkp OwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9S RUdfVkFMVUUoRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX0RNQV9JTklUX1ZBTDIpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9UUEdfRE1BX0ZJRk9fU1RBVFVTKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVFBHX0RNQV9GSUZPX1dSSVRF X1RSSUdHRVIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9EU0lfVElNSU5HX0ZMVVNIKSk7Ci0JbGVuICs9IHNucHJp bnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRFNJ X1RJTUlOR19EQl9NT0RFKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAt IGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVFBHX0RNQV9GSUZPX1JFU0VUKSk7Ci0JbGVu ICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxV RShEU0lfVkVSU0lPTikpOwotCi0JcHJfZXJyKCJMTEVOR1RIID0gJWRcbiIsIGxlbik7Ci0JcmV0 dXJuIGxlbjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX2N0cmxfaHdfMl8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9j dHJsX2h3XzJfMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmQ2Mzc4Li4wMDAw MDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMl8w LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykg MjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq Ci0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotICoKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpICJkc2ktaHc6IiBmbXQKLSNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgotCi0jaW5j bHVkZSAiZHNpX2N0cmxfaHcuaCIKLSNpbmNsdWRlICJkc2lfY3RybF9yZWcuaCIKLSNpbmNsdWRl ICJkc2lfaHcuaCIKLQotdm9pZCBkc2lfY3RybF9od18yMF9zZXR1cF9sYW5lX21hcChzdHJ1Y3Qg ZHNpX2N0cmxfaHcgKmN0cmwsCi0JCSAgICAgICBzdHJ1Y3QgZHNpX2xhbmVfbWFwICpsYW5lX21h cCkKLXsKLQl1MzIgcmVnX3ZhbHVlID0gbGFuZV9tYXAtPmxhbmVfbWFwX3YyW0RTSV9MT0dJQ0FM X0xBTkVfMF0gfAotCQkJKGxhbmVfbWFwLT5sYW5lX21hcF92MltEU0lfTE9HSUNBTF9MQU5FXzFd IDw8IDQpIHwKLQkJCShsYW5lX21hcC0+bGFuZV9tYXBfdjJbRFNJX0xPR0lDQUxfTEFORV8yXSA8 PCA4KSB8Ci0JCQkobGFuZV9tYXAtPmxhbmVfbWFwX3YyW0RTSV9MT0dJQ0FMX0xBTkVfM10gPDwg MTIpOwotCi0JRFNJX1czMihjdHJsLCBEU0lfTEFORV9TV0FQX0NUUkwsIHJlZ192YWx1ZSk7Ci0K LQlwcl9kZWJ1ZygiW0RTSV8lZF0gTGFuZSBzd2FwIHNldHVwIGNvbXBsZXRlXG4iLCBjdHJsLT5p bmRleCk7Ci19Ci0KLWludCBkc2lfY3RybF9od18yMF93YWl0X2Zvcl9sYW5lX2lkbGUoc3RydWN0 IGRzaV9jdHJsX2h3ICpjdHJsLAotCQl1MzIgbGFuZXMpCi17Ci0JaW50IHJjID0gMCwgdmFsID0g MDsKLQl1MzIgZmlmb19lbXB0eV9tYXNrID0gMDsKLQl1MzIgY29uc3Qgc2xlZXBfdXMgPSAxMDsK LQl1MzIgY29uc3QgdGltZW91dF91cyA9IDEwMDsKLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xB TkVfMCkKLQkJZmlmb19lbXB0eV9tYXNrIHw9IChCSVQoMTIpIHwgQklUKDE2KSk7Ci0KLQlpZiAo bGFuZXMgJiBEU0lfREFUQV9MQU5FXzEpCi0JCWZpZm9fZW1wdHlfbWFzayB8PSBCSVQoMjApOwot Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8yKQotCQlmaWZvX2VtcHR5X21hc2sgfD0gQklU KDI0KTsKLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMykKLQkJZmlmb19lbXB0eV9tYXNr IHw9IEJJVCgyOCk7Ci0KLQlwcl9kZWJ1ZygiJXM6IHBvbGxpbmcgZm9yIGZpZm8gZW1wdHksIG1h c2s9MHglMDh4XG4iLCBfX2Z1bmNfXywKLQkJZmlmb19lbXB0eV9tYXNrKTsKLQlyYyA9IHJlYWRs X3BvbGxfdGltZW91dChjdHJsLT5iYXNlICsgRFNJX0ZJRk9fU1RBVFVTLCB2YWwsCi0JCQkodmFs ICYgZmlmb19lbXB0eV9tYXNrKSwgc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwotCWlmIChyYykgewot CQlwcl9lcnIoIiVzOiBmaWZvIG5vdCBlbXB0eSwgRklGT19TVEFUVVM9MHglMDh4XG4iLAotCQkJ CV9fZnVuY19fLCB2YWwpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJj OwotfQotCi0jZGVmaW5lIERVTVBfUkVHX1ZBTFVFKG9mZikgIlx0JS0zMHM6IDB4JTA4eFxuIiwg I29mZiwgRFNJX1IzMihjdHJsLCBvZmYpCi1zc2l6ZV90IGRzaV9jdHJsX2h3XzIwX3JlZ19kdW1w X3RvX2J1ZmZlcihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJCSAgY2hhciAqYnVmLAot CQkJCQkgIHUzMiBzaXplKQotewotCXUzMiBsZW4gPSAwOwotCi0JbGVuICs9IHNucHJpbnRmKChi dWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksICJDT05GSUdVUkFUSU9OIFJFR1M6XG4iKTsKLQotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX0hXX1ZFUlNJT04pKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfU1RBVFVT KSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1Q X1JFR19WQUxVRShEU0lfRklGT19TVEFUVVMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxl biksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX0NUUkwp KTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBf UkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX1NZTkNfREFUQVRZUEUpKTsKLQlsZW4gKz0gc25wcmlu dGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURF T19NT0RFX1BJWEVMX0RBVEFUWVBFKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAo c2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9CTEFOS0lOR19E QVRBVFlQRSkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfREFUQV9DVFJMKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf VklERU9fTU9ERV9BQ1RJVkVfSCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNp emUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfQUNUSVZFX1YpKTsK LQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVH X1ZBTFVFKERTSV9WSURFT19NT0RFX1RPVEFMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9IU1lO QykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfVlNZTkMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1 ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RF X1ZTWU5DX1ZQT1MpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfRE1BX0NUUkwpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9DT01NQU5EX01PREVfTURQX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxl biksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQ X0RDU19DTURfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBs ZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0RNQV9DTURfT0ZGU0VUKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf RE1BX0NNRF9MRU5HVEgpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0g bGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETUFfRklGT19DVFJMKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf RE1BX05VTExfUEFDS0VUX0RBVEEpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChz aXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVB TTBfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMF9UT1RBTCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMV9DVFJMKSk7Ci0JbGVuICs9IHNucHJp bnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09N TUFORF9NT0RFX01EUF9TVFJFQU0xX1RPVEFMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQUNLX0VSUl9TVEFUVVMp KTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBf UkVHX1ZBTFVFKERTSV9SREJLX0RBVEEwKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBMSkpOwotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX1JEQktfREFUQTIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9SREJLX0RBVEEzKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf UkRCS19EQVRBVFlQRTApKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0g bGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9SREJLX0RBVEFUWVBFMSkpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X1RSSUdfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4p LAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0VYVF9NVVgpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1 ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9FWFRfTVVYX1RF X1BVTFNFX0RFVEVDVF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ01EX01PREVfRE1BX1NXX1RSSUdHRVIp KTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBf UkVHX1ZBTFVFKERTSV9DTURfTU9ERV9NRFBfU1dfVFJJR0dFUikpOwotCWxlbiArPSBzbnByaW50 ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NNRF9N T0RFX0JUQV9TV19UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkVTRVRfU1dfVFJJR0dFUikpOwotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX01JU1JfQ01EX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChz aXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9NSVNSX1ZJREVPX0NUUkwpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9MQU5FX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNp emUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0xBTkVfQ1RSTCkpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X0xBTkVfU1dBUF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAt IGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRExOMF9QSFlfRVJSKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf TFBfVElNRVJfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBs ZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0hTX1RJTUVSX0NUUkwpKTsKLQlsZW4gKz0gc25w cmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9U SU1FT1VUX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBs ZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NMS09VVF9USU1JTkdfQ1RSTCkpOwotCWxlbiAr PSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUo RFNJX0VPVF9QQUNLRVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0g bGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9FT1RfUEFDS0VUX0NUUkwpKTsKLQlsZW4gKz0g c25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERT SV9HRU5FUklDX0VTQ19UWF9UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRVJSX0lOVF9NQVNLMCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX0lOVF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfU09GVF9SRVNFVCkpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X0NMS19DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ0xLX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1BIWV9TV19S RVNFVCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJ RFVNUF9SRUdfVkFMVUUoRFNJX0FYSTJBSEJfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX01JU1JfQ01EX01E UDBfMzJCSVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9NSVNSX0NNRF9NRFAxXzMyQklUKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf TUlTUl9WSURFT18zMkJJVCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUg LSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfQ1RSTDIpKTsK LQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVH X1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTJfQ1RSTCkpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NP TU1BTkRfTU9ERV9NRFBfU1RSRUFNMl9UT1RBTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsg bGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZCSUZfQ1RSTCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX0FFU19DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBX0NUUkwpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9ETUFfSU5JVF9WQUwyKSk7Ci0JbGVuICs9IHNucHJp bnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVFBH X0RNQV9GSUZPX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUg LSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RQR19ETUFfRklGT19XUklURV9UUklHR0VS KSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1Q X1JFR19WQUxVRShEU0lfRFNJX1RJTUlOR19GTFVTSCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0RTSV9USU1JTkdf REJfTU9ERSkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RQR19ETUFfRklGT19SRVNFVCkpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZF UlNJT04pKTsKLQotCXByX2VycigiTExFTkdUSCA9ICVkXG4iLCBsZW4pOwotCXJldHVybiBsZW47 Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJs X2h3XzJfMi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od18y XzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMxOTEzZi4uMDAwMDAwMAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMi5jCisrKyAv ZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4 LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot ICoKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpICJkc2ktaHc6IiBmbXQKLQotI2luY2x1ZGUg ImRzaV9jdHJsX2h3LmgiCi0jaW5jbHVkZSAiZHNpX2N0cmxfcmVnLmgiCi0jaW5jbHVkZSAiZHNp X2h3LmgiCi0KLS8qIEVxdWl2YWxlbnQgdG8gcmVnaXN0ZXIgRElTUF9DQ19NSVNDX0NNRCAqLwot I2RlZmluZSBESVNQX0NDX0NMQU1QX1JFR19PRkYgMHgwMAotCi0vKioKLSAqIGRzaV9jdHJsX2h3 XzIyX3BoeV9yZXNldF9jb25maWcoKSAtIHRvIGNvbmZpZ3VyZSBjbGFtcCBjb250cm9sIGR1cmlu ZyB1bHBzCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0 IGhhcmR3YXJlLgotICogQGVuYWJsZTogICAgICBib29sZWFuIHRvIHNwZWNpZnkgZW5hYmxlL2Rp c2FibGUuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfMjJfcGh5X3Jlc2V0X2NvbmZpZyhzdHJ1Y3Qg ZHNpX2N0cmxfaHcgKmN0cmwsCi0JCWJvb2wgZW5hYmxlKQotewotCXUzMiByZWcgPSAwOwotCi0J cmVnID0gRFNJX0RJU1BfQ0NfUjMyKGN0cmwsIERJU1BfQ0NfQ0xBTVBfUkVHX09GRik7Ci0KLQkv KiBNYXNrL3VubWFzayBkaXNhYmxlIFBIWSByZXNldCBiaXQgKi8KLQlpZiAoZW5hYmxlKQotCQly ZWcgJj0gfkJJVChjdHJsLT5pbmRleCk7Ci0JZWxzZQotCQlyZWcgfD0gQklUKGN0cmwtPmluZGV4 KTsKLQlEU0lfRElTUF9DQ19XMzIoY3RybCwgRElTUF9DQ19DTEFNUF9SRUdfT0ZGLCByZWcpOwot fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9o d19jbW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfY21u LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNzg0MmYuLjAwMDAwMDAKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od19jbW4uYworKysgL2Rl di9udWxsCkBAIC0xLDEzMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4 LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot ICoKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpICJkc2ktaHc6IiBmbXQKLSNpbmNsdWRlIDxs aW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgotCi0jaW5jbHVkZSAiZHNp X2N0cmxfaHcuaCIKLSNpbmNsdWRlICJkc2lfY3RybF9yZWcuaCIKLSNpbmNsdWRlICJkc2lfaHcu aCIKLSNpbmNsdWRlICJkc2lfcGFuZWwuaCIKLSNpbmNsdWRlICJkc2lfY2F0YWxvZy5oIgotI2lu Y2x1ZGUgImRwdV9kYmcuaCIKLQotI2RlZmluZSBNTVNTX01JU0NfQ0xBTVBfUkVHX09GRiAgICAg ICAgICAgMHgwMDE0Ci0jZGVmaW5lIERTSV9DVFJMX0RZTkFNSUNfRk9SQ0VfT04gICAgICAgICAo MHgyM0Z8QklUKDgpfEJJVCg5KXxCSVQoMTEpfEJJVCgyMSkpCi0jZGVmaW5lIERTSV9DVFJMX0NN RF9NSVNSX0VOQUJMRSAgICAgICAgICBCSVQoMjgpCi0jZGVmaW5lIERTSV9DVFJMX1ZJREVPX01J U1JfRU5BQkxFICAgICAgICBCSVQoMTYpCi0KLS8qIFVuc3VwcG9ydGVkIGZvcm1hdHMgZGVmYXVs dCB0byBSR0I4ODggKi8KLXN0YXRpYyBjb25zdCB1OCBjbWRfbW9kZV9mb3JtYXRfbWFwW0RTSV9Q SVhFTF9GT1JNQVRfTUFYXSA9IHsKLQkweDYsIDB4NywgMHg4LCAweDgsIDB4MCwgMHgzLCAweDQg fTsKLXN0YXRpYyBjb25zdCB1OCB2aWRlb19tb2RlX2Zvcm1hdF9tYXBbRFNJX1BJWEVMX0ZPUk1B VF9NQVhdID0gewotCTB4MCwgMHgxLCAweDIsIDB4MywgMHgzLCAweDMsIDB4MyB9OwotCi0vKioK LSAqIGRzaV9zZXR1cF90cmlnZ2VyX2NvbnRyb2xzKCkgLSBzZXR1cCBkc2kgdHJpZ2dlciBjb25m aWd1cmF0aW9ucwotICogQGN0cmw6ICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xs ZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBjZmc6ICAgICAgICAgICAgICBEU0kgaG9zdCBjb25maWd1 cmF0aW9uIHRoYXQgaXMgY29tbW9uIHRvIGJvdGggdmlkZW8gYW5kCi0gKiAgICAgICAgICAgICAg ICAgICAgY29tbWFuZCBtb2Rlcy4KLSAqLwotc3RhdGljIHZvaWQgZHNpX3NldHVwX3RyaWdnZXJf Y29udHJvbHMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgICBzdHJ1Y3QgZHNp X2hvc3RfY29tbW9uX2NmZyAqY2ZnKQotewotCXUzMiByZWcgPSAwOwotCWNvbnN0IHU4IHRyaWdn ZXJfbWFwW0RTSV9UUklHR0VSX01BWF0gPSB7Ci0JCTB4MCwgMHgyLCAweDEsIDB4NCwgMHg1LCAw eDYgfTsKLQotCXJlZyB8PSAoY2ZnLT50ZV9tb2RlID09IERTSV9URV9PTl9FWFRfUElOKSA/IEJJ VCgzMSkgOiAwOwotCXJlZyB8PSAodHJpZ2dlcl9tYXBbY2ZnLT5kbWFfY21kX3RyaWdnZXJdICYg MHg3KTsKLQlyZWcgfD0gKHRyaWdnZXJfbWFwW2NmZy0+bWRwX2NtZF90cmlnZ2VyXSAmIDB4Nykg PDwgNDsKLQlEU0lfVzMyKGN0cmwsIERTSV9UUklHX0NUUkwsIHJlZyk7Ci19Ci0KLS8qKgotICog ZHNpX2N0cmxfaHdfY21uX2hvc3Rfc2V0dXAoKSAtIHNldHVwIGRzaSBob3N0IGNvbmZpZ3VyYXRp b24KLSAqIEBjdHJsOiAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0gKiBAY2ZnOiAgICAgICAgICAgICAgRFNJIGhvc3QgY29uZmlndXJhdGlvbiB0 aGF0IGlzIGNvbW1vbiB0byBib3RoIHZpZGVvIGFuZAotICogICAgICAgICAgICAgICAgICAgIGNv bW1hbmQgbW9kZXMuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX2hvc3Rfc2V0dXAoc3RydWN0 IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJICAgICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2Zn ICpjZmcpCi17Ci0JdTMyIHJlZ192YWx1ZSA9IDA7Ci0KLQlkc2lfc2V0dXBfdHJpZ2dlcl9jb250 cm9scyhjdHJsLCBjZmcpOwotCi0JLyogU2V0dXAgY2xvY2tpbmcgdGltaW5nIGNvbnRyb2xzICov Ci0JcmVnX3ZhbHVlID0gKChjZmctPnRfY2xrX3Bvc3QgJiAweDNGKSA8PCA4KTsKLQlyZWdfdmFs dWUgfD0gKGNmZy0+dF9jbGtfcHJlICYgMHgzRik7Ci0JRFNJX1czMihjdHJsLCBEU0lfQ0xLT1VU X1RJTUlOR19DVFJMLCByZWdfdmFsdWUpOwotCi0JLyogRU9UIHBhY2tldCBjb250cm9sICovCi0J cmVnX3ZhbHVlID0gY2ZnLT5hcHBlbmRfdHhfZW90ID8gMSA6IDA7Ci0JcmVnX3ZhbHVlIHw9IChj ZmctPmlnbm9yZV9yeF9lb3QgPyAoMSA8PCA0KSA6IDApOwotCURTSV9XMzIoY3RybCwgRFNJX0VP VF9QQUNLRVRfQ1RSTCwgcmVnX3ZhbHVlKTsKLQotCS8qIFR1cm4gb24gZHNpIGNsb2NrcyAqLwot CURTSV9XMzIoY3RybCwgRFNJX0NMS19DVFJMLCAweDIzRik7Ci0KLQkvKiBTZXR1cCBEU0kgY29u dHJvbCByZWdpc3RlciAqLwotCXJlZ192YWx1ZSA9IERTSV9SMzIoY3RybCwgRFNJX0NUUkwpOwot CXJlZ192YWx1ZSB8PSAoY2ZnLT5lbl9jcmNfY2hlY2sgPyBCSVQoMjQpIDogMCk7Ci0JcmVnX3Zh bHVlIHw9IChjZmctPmVuX2VjY19jaGVjayA/IEJJVCgyMCkgOiAwKTsKLQlyZWdfdmFsdWUgfD0g QklUKDgpOyAvKiBDbG9jayBsYW5lICovCi0JcmVnX3ZhbHVlIHw9ICgoY2ZnLT5kYXRhX2xhbmVz ICYgRFNJX0RBVEFfTEFORV8zKSA/IEJJVCg3KSA6IDApOwotCXJlZ192YWx1ZSB8PSAoKGNmZy0+ ZGF0YV9sYW5lcyAmIERTSV9EQVRBX0xBTkVfMikgPyBCSVQoNikgOiAwKTsKLQlyZWdfdmFsdWUg fD0gKChjZmctPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5FXzEpID8gQklUKDUpIDogMCk7Ci0J cmVnX3ZhbHVlIHw9ICgoY2ZnLT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFORV8wKSA/IEJJVCg0 KSA6IDApOwotCi0JRFNJX1czMihjdHJsLCBEU0lfQ1RSTCwgcmVnX3ZhbHVlKTsKLQotCWlmIChj dHJsLT5waHlfaXNvbGF0aW9uX2VuYWJsZWQpCi0JCURTSV9XMzIoY3RybCwgRFNJX0RFQlVHX0NU UkwsIEJJVCgyOCkpOwotCXByX2RlYnVnKCJbRFNJXyVkXUhvc3QgY29uZmlndXJhdGlvbiBjb21w bGV0ZVxuIiwgY3RybC0+aW5kZXgpOwotfQotCi0vKioKLSAqIHBoeV9zd19yZXNldCgpIC0gcGVy Zm9ybSBhIHNvZnQgcmVzZXQgb24gdGhlIFBIWS4KLSAqIEBjdHJsOiAgICAgICAgUG9pbnRlciB0 byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Nt bl9waHlfc3dfcmVzZXQoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKQotewotCURTSV9XMzIoY3Ry bCwgRFNJX1BIWV9TV19SRVNFVCwgQklUKDI0KXxCSVQoMCkpOwotCXdtYigpOyAvKiBtYWtlIHN1 cmUgcmVzZXQgaXMgYXNzZXJ0ZWQgKi8KLQl1ZGVsYXkoMTAwMCk7Ci0JRFNJX1czMihjdHJsLCBE U0lfUEhZX1NXX1JFU0VULCAweDApOwotCXdtYigpOyAvKiBlbnN1cmUgcmVzZXQgaXMgY2xlYXJl ZCBiZWZvcmUgd2FpdGluZyAqLwotCXVkZWxheSgxMDApOwotCi0JcHJfZGVidWcoIltEU0lfJWRd IHBoeSBzdyByZXNldCBkb25lXG4iLCBjdHJsLT5pbmRleCk7Ci19Ci0KLS8qKgotICogc29mdF9y ZXNldCgpIC0gcGVyZm9ybSBhIHNvZnQgcmVzZXQgb24gRFNJIGNvbnRyb2xsZXIKLSAqIEBjdHJs OiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKgot ICogVGhlIHZpZGVvLCBjb21tYW5kIGFuZCBjb250cm9sbGVyIGVuZ2luZXMgd2lsbCBiZSBkaXNh YmxlZCBiZWZvcmUgdGhlCi0gKiByZXNldCBpcyB0cmlnZ2VyZWQgYW5kIHJlLWVuYWJsZWQgYWZ0 ZXIgdGhlIHJlc2V0IGlzIGNvbXBsZXRlLgotICoKLSAqIElmIHRoZSByZXNldCBpcyBkb25lIHdo aWxlIE1EUCB0aW1pbmcgZW5naW5lIGlzIHR1cm5lZCBvbiwgdGhlIHZpZGVvCi0gKiBlbmlnbmUg c2hvdWxkIGJlIHJlLWVuYWJsZWQgb25seSBkdXJpbmcgdGhlIHZlcnRpY2FsIGJsYW5raW5nIHRp bWUuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3NvZnRfcmVzZXQoc3RydWN0IGRzaV9jdHJs X2h3ICpjdHJsKQotewotCXUzMiByZWcgPSAwOwotCXUzMiByZWdfY3RybCA9IDA7Ci0KLQkvKiBD bGVhciBEU0lfRU4sIFZJREVPX01PREVfRU4sIENNRF9NT0RFX0VOICovCi0JcmVnX2N0cmwgPSBE U0lfUjMyKGN0cmwsIERTSV9DVFJMKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9DVFJMLCByZWdfY3Ry bCAmIH4weDcpOwotCXdtYigpOyAvKiB3YWl0IGNvbnRyb2xsZXIgdG8gYmUgZGlzYWJsZWQgYmVm b3JlIHJlc2V0ICovCi0KLQkvKiBGb3JjZSBlbmFibGUgUENMSywgQllURUNMSywgQUhCTV9IQ0xL ICovCi0JcmVnID0gRFNJX1IzMihjdHJsLCBEU0lfQ0xLX0NUUkwpOwotCURTSV9XMzIoY3RybCwg RFNJX0NMS19DVFJMLCByZWcgfCBEU0lfQ1RSTF9EWU5BTUlDX0ZPUkNFX09OKTsKLQl3bWIoKTsg Lyogd2FpdCBmb3IgY2xvY2tzIHRvIGJlIGVuYWJsZWQgKi8KLQotCS8qIFRyaWdnZXIgc29mdCBy ZXNldCAqLwotCURTSV9XMzIoY3RybCwgRFNJX1NPRlRfUkVTRVQsIDB4MSk7Ci0Jd21iKCk7IC8q IHdhaXQgZm9yIHJlc2V0IHRvIGFzc2VydCBiZWZvcmUgd2FpdGluZyAqLwotCXVkZWxheSgxKTsK LQlEU0lfVzMyKGN0cmwsIERTSV9TT0ZUX1JFU0VULCAweDApOwotCXdtYigpOyAvKiBlbnN1cmUg cmVzZXQgaXMgY2xlYXJlZCAqLwotCi0JLyogRGlzYWJsZSBmb3JjZSBjbG9jayBvbiAqLwotCURT SV9XMzIoY3RybCwgRFNJX0NMS19DVFJMLCByZWcpOwotCXdtYigpOyAvKiBtYWtlIHN1cmUgY2xv Y2tzIGFyZSByZXN0b3JlZCAqLwotCi0JLyogUmUtZW5hYmxlIERTSSBjb250cm9sbGVyICovCi0J RFNJX1czMihjdHJsLCBEU0lfQ1RSTCwgcmVnX2N0cmwpOwotCXdtYigpOyAvKiBtYWtlIHN1cmUg RFNJIGNvbnRyb2xsZXIgaXMgZW5hYmxlZCBhZ2FpbiAqLwotCXByX2RlYnVnKCJbRFNJXyVkXSBj dHJsIHNvZnQgcmVzZXQgZG9uZVxuIiwgY3RybC0+aW5kZXgpOwotfQotCi0vKioKLSAqIHNldHVw X21pc3IoKSAtIFNldHVwIGZyYW1lIE1JU1IKLSAqIEBjdHJsOgkgIFBvaW50ZXIgdG8gdGhlIGNv bnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBwYW5lbF9tb2RlOiAgIENNRCBvciBWSURFTyBt b2RlIGluZGljYXRvcgotICogQGVuYWJsZToJICBFbmFibGUvZGlzYWJsZSBNSVNSLgotICogQGZy YW1lX2NvdW50OiAgTnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIE1JU1IuCi0gKi8KLXZv aWQgZHNpX2N0cmxfaHdfY21uX3NldHVwX21pc3Ioc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAot CQkJZW51bSBkc2lfb3BfbW9kZSBwYW5lbF9tb2RlLAotCQkJYm9vbCBlbmFibGUsCi0JCQl1MzIg ZnJhbWVfY291bnQpCi17Ci0JdTMyIGFkZHI7Ci0JdTMyIGNvbmZpZyA9IDA7Ci0KLQlpZiAocGFu ZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpIHsKLQkJYWRkciA9IERTSV9NSVNSX0NNRF9DVFJM OwotCQlpZiAoZW5hYmxlKQotCQkJY29uZmlnID0gRFNJX0NUUkxfQ01EX01JU1JfRU5BQkxFOwot CX0gZWxzZSB7Ci0JCWFkZHIgPSBEU0lfTUlTUl9WSURFT19DVFJMOwotCQlpZiAoZW5hYmxlKQot CQkJY29uZmlnID0gRFNJX0NUUkxfVklERU9fTUlTUl9FTkFCTEU7Ci0JCWlmIChmcmFtZV9jb3Vu dCA+IDI1NSkKLQkJCWZyYW1lX2NvdW50ID0gMjU1OwotCQljb25maWcgfD0gZnJhbWVfY291bnQg PDwgODsKLQl9Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gTUlTUiBjdHJsOiAweCV4XG4iLCBjdHJs LT5pbmRleCwKLQkJCWNvbmZpZyk7Ci0JRFNJX1czMihjdHJsLCBhZGRyLCBjb25maWcpOwotCXdt YigpOyAvKiBtYWtlIHN1cmUgTUlTUiBpcyBjb25maWd1cmVkICovCi19Ci0KLS8qKgotICogY29s bGVjdF9taXNyKCkgLSBSZWFkIGZyYW1lIE1JU1IKLSAqIEBjdHJsOgkgIFBvaW50ZXIgdG8gdGhl IGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBwYW5lbF9tb2RlOiAgIENNRCBvciBWSURF TyBtb2RlIGluZGljYXRvcgotICovCi11MzIgZHNpX2N0cmxfaHdfY21uX2NvbGxlY3RfbWlzcihz dHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQllbnVtIGRzaV9vcF9tb2RlIHBhbmVsX21vZGUp Ci17Ci0JdTMyIGFkZHI7Ci0JdTMyIGVuYWJsZWQ7Ci0JdTMyIG1pc3IgPSAwOwotCi0JaWYgKHBh bmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RFKSB7Ci0JCWFkZHIgPSBEU0lfTUlTUl9DTURfTURQ MF8zMkJJVDsKLQkJZW5hYmxlZCA9IERTSV9SMzIoY3RybCwgRFNJX01JU1JfQ01EX0NUUkwpICYK LQkJCQlEU0lfQ1RSTF9DTURfTUlTUl9FTkFCTEU7Ci0JfSBlbHNlIHsKLQkJYWRkciA9IERTSV9N SVNSX1ZJREVPXzMyQklUOwotCQllbmFibGVkID0gRFNJX1IzMihjdHJsLCBEU0lfTUlTUl9WSURF T19DVFJMKSAmCi0JCQkJRFNJX0NUUkxfVklERU9fTUlTUl9FTkFCTEU7Ci0JfQotCi0JaWYgKGVu YWJsZWQpCi0JCW1pc3IgPSBEU0lfUjMyKGN0cmwsIGFkZHIpOwotCi0JcHJfZGVidWcoIltEU0lf JWRdIE1JU1IgZW5hYmxlZCAleCB2YWx1ZTogMHgleFxuIiwgY3RybC0+aW5kZXgsCi0JCQllbmFi bGVkLCBtaXNyKTsKLQlyZXR1cm4gbWlzcjsKLX0KLQotLyoqCi0gKiBzZXRfdGltaW5nX2RiKCkg LSBlbmFibGUvZGlzYWJsZSBUaW1pbmcgREIgcmVnaXN0ZXIKLSAqIEBjdHJsOiAgICAgICAgICBQ b2ludGVyIHRvIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBlbmFibGU6ICAgICAgICBF bmFibGUvRGlzYWJsZSBmbGFnLgotICoKLSAqIEVuYWJsZSBvciBEaXNhYmUgdGhlIFRpbWluZyBE QiByZWdpc3Rlci4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fc2V0X3RpbWluZ19kYihzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJICAgICBib29sIGVuYWJsZSkKLXsKLQlpZiAoZW5h YmxlKQotCQlEU0lfVzMyKGN0cmwsIERTSV9EU0lfVElNSU5HX0RCX01PREUsIDB4MSk7Ci0JZWxz ZQotCQlEU0lfVzMyKGN0cmwsIERTSV9EU0lfVElNSU5HX0RCX01PREUsIDB4MCk7Ci0KLQl3bWIo KTsgLyogbWFrZSBzdXJlIHRpbWluZyBkYiByZWdpc3RlcnMgYXJlIHNldCAqLwotCXByX2RlYnVn KCJbRFNJXyVkXSBjdHJsIHRpbWluZyBEQiBzZXQ6JWRcbiIsIGN0cmwtPmluZGV4LAotCQkJCWVu YWJsZSk7Ci0JRFBVX0VWVDMyKGN0cmwtPmluZGV4LCBlbmFibGUpOwotfQotCi0vKioKLSAqIHNl dF92aWRlb190aW1pbmcoKSAtIHNldCB1cCB0aGUgdGltaW5nIGZvciB2aWRlbyBmcmFtZQotICog QGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICog QG1vZGU6ICAgICAgICAgIFZpZGVvIG1vZGUgaW5mb3JtYXRpb24uCi0gKgotICogU2V0IHVwIHRo ZSB2aWRlbyB0aW1pbmcgcGFyYW1ldGVycyBmb3IgdGhlIERTSSB2aWRlbyBtb2RlIG9wZXJhdGlv bi4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fc2V0X3ZpZGVvX3RpbWluZyhzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwsCi0JCQkJICAgICBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqbW9kZSkKLXsK LQl1MzIgcmVnID0gMDsKLQl1MzIgaHNfc3RhcnQgPSAwOwotCXUzMiBoc19lbmQsIGFjdGl2ZV9o X3N0YXJ0LCBhY3RpdmVfaF9lbmQsIGhfdG90YWwsIHdpZHRoID0gMDsKLQl1MzIgdnNfc3RhcnQg PSAwLCB2c19lbmQgPSAwOwotCXUzMiB2cG9zX3N0YXJ0ID0gMCwgdnBvc19lbmQsIGFjdGl2ZV92 X3N0YXJ0LCBhY3RpdmVfdl9lbmQsIHZfdG90YWw7Ci0KLQlpZiAobW9kZS0+ZHNjX2VuYWJsZWQg JiYgbW9kZS0+ZHNjKSB7Ci0JCXdpZHRoID0gbW9kZS0+ZHNjLT5wY2xrX3Blcl9saW5lOwotCQly ZWcgPSBtb2RlLT5kc2MtPmJ5dGVzX3Blcl9wa3QgPDwgMTY7Ci0JCXJlZyB8PSAoMHgwYiA8PCA4 KTsgICAgLyogZHR5cGUgb2YgY29tcHJlc3NlZCBpbWFnZSAqLwotCQkvKgotCQkgKiBwa3RfcGVy X2xpbmU6Ci0JCSAqIDAgPT0gMSBwa3QKLQkJICogMSA9PSAyIHBrdAotCQkgKiAyID09IDQgcGt0 Ci0JCSAqIDMgcGt0IGlzIG5vdCBzdXBwb3J0Ci0JCSAqLwotCQlpZiAobW9kZS0+ZHNjLT5wa3Rf cGVyX2xpbmUgPT0gNCkKLQkJCXJlZyB8PSAobW9kZS0+ZHNjLT5wa3RfcGVyX2xpbmUgLSAyKSA8 PCA2OwotCQllbHNlCi0JCQlyZWcgfD0gKG1vZGUtPmRzYy0+cGt0X3Blcl9saW5lIC0gMSkgPDwg NjsKLQkJcmVnIHw9IG1vZGUtPmRzYy0+ZW9sX2J5dGVfbnVtIDw8IDQ7Ci0JCXJlZyB8PSAxOwot CQlEU0lfVzMyKGN0cmwsIERTSV9WSURFT19DT01QUkVTU0lPTl9NT0RFX0NUUkwsIHJlZyk7Ci0J fSBlbHNlIHsKLQkJd2lkdGggPSBtb2RlLT5oX2FjdGl2ZTsKLQl9Ci0KLQloc19lbmQgPSBtb2Rl LT5oX3N5bmNfd2lkdGg7Ci0JYWN0aXZlX2hfc3RhcnQgPSBtb2RlLT5oX3N5bmNfd2lkdGggKyBt b2RlLT5oX2JhY2tfcG9yY2g7Ci0JYWN0aXZlX2hfZW5kID0gYWN0aXZlX2hfc3RhcnQgKyB3aWR0 aDsKLQloX3RvdGFsID0gKG1vZGUtPmhfc3luY193aWR0aCArIG1vZGUtPmhfYmFja19wb3JjaCAr IHdpZHRoICsKLQkJICAgbW9kZS0+aF9mcm9udF9wb3JjaCkgLSAxOwotCi0JdnBvc19lbmQgPSBt b2RlLT52X3N5bmNfd2lkdGg7Ci0JYWN0aXZlX3Zfc3RhcnQgPSBtb2RlLT52X3N5bmNfd2lkdGgg KyBtb2RlLT52X2JhY2tfcG9yY2g7Ci0JYWN0aXZlX3ZfZW5kID0gYWN0aXZlX3Zfc3RhcnQgKyBt b2RlLT52X2FjdGl2ZTsKLQl2X3RvdGFsID0gKG1vZGUtPnZfc3luY193aWR0aCArIG1vZGUtPnZf YmFja19wb3JjaCArIG1vZGUtPnZfYWN0aXZlICsKLQkJICAgbW9kZS0+dl9mcm9udF9wb3JjaCkg LSAxOwotCi0JcmVnID0gKChhY3RpdmVfaF9lbmQgJiAweEZGRkYpIDw8IDE2KSB8IChhY3RpdmVf aF9zdGFydCAmIDB4RkZGRik7Ci0JRFNJX1czMihjdHJsLCBEU0lfVklERU9fTU9ERV9BQ1RJVkVf SCwgcmVnKTsKLQotCXJlZyA9ICgoYWN0aXZlX3ZfZW5kICYgMHhGRkZGKSA8PCAxNikgfCAoYWN0 aXZlX3Zfc3RhcnQgJiAweEZGRkYpOwotCURTSV9XMzIoY3RybCwgRFNJX1ZJREVPX01PREVfQUNU SVZFX1YsIHJlZyk7Ci0KLQlyZWcgPSAoKHZfdG90YWwgJiAweEZGRkYpIDw8IDE2KSB8IChoX3Rv dGFsICYgMHhGRkZGKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9WSURFT19NT0RFX1RPVEFMLCByZWcp OwotCi0JcmVnID0gKChoc19lbmQgJiAweEZGRkYpIDw8IDE2KSB8IChoc19zdGFydCAmIDB4RkZG Rik7Ci0JRFNJX1czMihjdHJsLCBEU0lfVklERU9fTU9ERV9IU1lOQywgcmVnKTsKLQotCXJlZyA9 ICgodnNfZW5kICYgMHhGRkZGKSA8PCAxNikgfCAodnNfc3RhcnQgJiAweEZGRkYpOwotCURTSV9X MzIoY3RybCwgRFNJX1ZJREVPX01PREVfVlNZTkMsIHJlZyk7Ci0KLQlyZWcgPSAoKHZwb3NfZW5k ICYgMHhGRkZGKSA8PCAxNikgfCAodnBvc19zdGFydCAmIDB4RkZGRik7Ci0JRFNJX1czMihjdHJs LCBEU0lfVklERU9fTU9ERV9WU1lOQ19WUE9TLCByZWcpOwotCi0JLyogVE9ETzogSFMgVElNRVIg dmFsdWU/ICovCi0JRFNJX1czMihjdHJsLCBEU0lfSFNfVElNRVJfQ1RSTCwgMHgzRkQwOCk7Ci0J RFNJX1czMihjdHJsLCBEU0lfTUlTUl9WSURFT19DVFJMLCAweDEwMTAwKTsKLQlEU0lfVzMyKGN0 cmwsIERTSV9EU0lfVElNSU5HX0ZMVVNILCAweDEpOwotCXByX2RlYnVnKCJbRFNJXyVkXSBjdHJs IHZpZGVvIHBhcmFtZXRlcnMgdXBkYXRlZFxuIiwgY3RybC0+aW5kZXgpOwotCURQVV9FVlQzMih2 X3RvdGFsLCBoX3RvdGFsKTsKLX0KLQotLyoqCi0gKiBzZXR1cF9jbWRfc3RyZWFtKCkgLSBzZXQg dXAgcGFyYW1ldGVycyBmb3IgY29tbWFuZCBwaXhlbCBzdHJlYW1zCi0gKiBAY3RybDogICAgICAg ICAgICAgIFBvaW50ZXIgdG8gY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQG1vZGU6ICAg ICAgICAgICAgICBQb2ludGVyIHRvIG1vZGUgaW5mb3JtYXRpb24uCi0gKiBAaF9zdHJpZGU6ICAg ICAgICAgIEhvcml6b250YWwgc3RyaWRlIGluIGJ5dGVzLgotICogQHZjX2lkOiAgICAgICAgICAg ICBzdHJlYW1faWQKLSAqCi0gKiBTZXR1cCBwYXJhbWV0ZXJzIGZvciBjb21tYW5kIG1vZGUgcGl4 ZWwgc3RyZWFtIHNpemUuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3NldHVwX2NtZF9zdHJl YW0oc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgc3RydWN0IGRzaV9tb2RlX2lu Zm8gKm1vZGUsCi0JCQkJICAgICB1MzIgaF9zdHJpZGUsCi0JCQkJICAgICB1MzIgdmNfaWQsCi0J CQkJICAgICBzdHJ1Y3QgZHNpX3JlY3QgKnJvaSkKLXsKLQl1MzIgd2lkdGhfZmluYWwsIHN0cmlk ZV9maW5hbDsKLQl1MzIgaGVpZ2h0X2ZpbmFsOwotCXUzMiBzdHJlYW1fdG90YWwgPSAwLCBzdHJl YW1fY3RybCA9IDA7Ci0JdTMyIHJlZ19jdHJsID0gMCwgcmVnX2N0cmwyID0gMDsKLQotCWlmIChy b2kgJiYgKCFyb2ktPncgfHwgIXJvaS0+aCkpCi0JCXJldHVybjsKLQotCWlmIChtb2RlLT5kc2Nf ZW5hYmxlZCAmJiBtb2RlLT5kc2MpIHsKLQkJdTMyIHJlZyA9IDA7Ci0JCXUzMiBvZmZzZXQgPSAw OwotCQlpbnQgcGljX3dpZHRoLCB0aGlzX2ZyYW1lX3NsaWNlcywgaW50Zl9pcF93OwotCQlzdHJ1 Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8gZHNjOwotCi0JCW1lbWNweSgmZHNjLCBtb2RlLT5kc2Ms IHNpemVvZihkc2MpKTsKLQkJcGljX3dpZHRoID0gcm9pID8gcm9pLT53IDogbW9kZS0+aF9hY3Rp dmU7Ci0JCXRoaXNfZnJhbWVfc2xpY2VzID0gcGljX3dpZHRoIC8gZHNjLnNsaWNlX3dpZHRoOwot CQlpbnRmX2lwX3cgPSB0aGlzX2ZyYW1lX3NsaWNlcyAqIGRzYy5zbGljZV93aWR0aDsKLQkJZHNp X2RzY19wY2xrX3BhcmFtX2NhbGMoJmRzYywgaW50Zl9pcF93KTsKLQotCQlpZiAodmNfaWQgIT0g MCkKLQkJCW9mZnNldCA9IDE2OwotCQlyZWdfY3RybCA9IERTSV9SMzIoY3RybCwgRFNJX0NPTU1B TkRfQ09NUFJFU1NJT05fTU9ERV9DVFJMKTsKLQkJcmVnX2N0cmwyID0gRFNJX1IzMihjdHJsLCBE U0lfQ09NTUFORF9DT01QUkVTU0lPTl9NT0RFX0NUUkwyKTsKLQkJd2lkdGhfZmluYWwgPSBkc2Mu cGNsa19wZXJfbGluZTsKLQkJc3RyaWRlX2ZpbmFsID0gZHNjLmJ5dGVzX3Blcl9wa3Q7Ci0JCWhl aWdodF9maW5hbCA9IHJvaSA/IHJvaS0+aCA6IG1vZGUtPnZfYWN0aXZlOwotCi0JCXJlZyA9IDB4 MzkgPDwgODsKLQkJLyoKLQkJICogcGt0X3Blcl9saW5lOgotCQkgKiAwID09IDEgcGt0Ci0JCSAq IDEgPT0gMiBwa3QKLQkJICogMiA9PSA0IHBrdAotCQkgKiAzIHBrdCBpcyBub3Qgc3VwcG9ydAot CQkgKi8KLQkJaWYgKGRzYy5wa3RfcGVyX2xpbmUgPT0gNCkKLQkJCXJlZyB8PSAoZHNjLnBrdF9w ZXJfbGluZSAtIDIpIDw8IDY7Ci0JCWVsc2UKLQkJCXJlZyB8PSAoZHNjLnBrdF9wZXJfbGluZSAt IDEpIDw8IDY7Ci0JCXJlZyB8PSBkc2MuZW9sX2J5dGVfbnVtIDw8IDQ7Ci0JCXJlZyB8PSAxOwot Ci0JCXJlZ19jdHJsICY9IH4oMHhGRkZGIDw8IG9mZnNldCk7Ci0JCXJlZ19jdHJsIHw9IChyZWcg PDwgb2Zmc2V0KTsKLQkJcmVnX2N0cmwyICY9IH4oMHhGRkZGIDw8IG9mZnNldCk7Ci0JCXJlZ19j dHJsMiB8PSAoZHNjLmJ5dGVzX2luX3NsaWNlIDw8IG9mZnNldCk7Ci0KLQkJcHJfZGVidWcoImN0 cmwgJWQgcmVnX2N0cmwgMHgleCByZWdfY3RybDIgMHgleFxuIiwgY3RybC0+aW5kZXgsCi0JCQkJ cmVnX2N0cmwsIHJlZ19jdHJsMik7Ci0JfSBlbHNlIGlmIChyb2kpIHsKLQkJd2lkdGhfZmluYWwg PSByb2ktPnc7Ci0JCXN0cmlkZV9maW5hbCA9IHJvaS0+dyAqIDM7Ci0JCWhlaWdodF9maW5hbCA9 IHJvaS0+aDsKLQl9IGVsc2UgewotCQl3aWR0aF9maW5hbCA9IG1vZGUtPmhfYWN0aXZlOwotCQlz dHJpZGVfZmluYWwgPSBoX3N0cmlkZTsKLQkJaGVpZ2h0X2ZpbmFsID0gbW9kZS0+dl9hY3RpdmU7 Ci0JfQotCi0Jc3RyZWFtX2N0cmwgPSAoc3RyaWRlX2ZpbmFsICsgMSkgPDwgMTY7Ci0Jc3RyZWFt X2N0cmwgfD0gKHZjX2lkICYgMHgzKSA8PCA4OwotCXN0cmVhbV9jdHJsIHw9IDB4Mzk7IC8qIHBh Y2tldCBkYXRhIHR5cGUgKi8KLQotCURTSV9XMzIoY3RybCwgRFNJX0NPTU1BTkRfQ09NUFJFU1NJ T05fTU9ERV9DVFJMLCByZWdfY3RybCk7Ci0JRFNJX1czMihjdHJsLCBEU0lfQ09NTUFORF9DT01Q UkVTU0lPTl9NT0RFX0NUUkwyLCByZWdfY3RybDIpOwotCi0JRFNJX1czMihjdHJsLCBEU0lfQ09N TUFORF9NT0RFX01EUF9TVFJFQU0wX0NUUkwsIHN0cmVhbV9jdHJsKTsKLQlEU0lfVzMyKGN0cmws IERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTFfQ1RSTCwgc3RyZWFtX2N0cmwpOwotCi0Jc3Ry ZWFtX3RvdGFsID0gKGhlaWdodF9maW5hbCA8PCAxNikgfCB3aWR0aF9maW5hbDsKLQlEU0lfVzMy KGN0cmwsIERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTBfVE9UQUwsIHN0cmVhbV90b3RhbCk7 Ci0JRFNJX1czMihjdHJsLCBEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJFQU0xX1RPVEFMLCBzdHJl YW1fdG90YWwpOwotCi0JcHJfZGVidWcoImN0cmwgJWQgc3RyZWFtX2N0cmwgMHgleCBzdHJlYW1f dG90YWwgMHgleFxuIiwgY3RybC0+aW5kZXgsCi0JCQlzdHJlYW1fY3RybCwgc3RyZWFtX3RvdGFs KTsKLX0KLQotLyoqCi0gKiB2aWRlb19lbmdpbmVfc2V0dXAoKSAtIFNldHVwIGRzaSBob3N0IGNv bnRyb2xsZXIgZm9yIHZpZGVvIG1vZGUKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIGNv bnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBjb21tb25fY2ZnOiAgICBDb21tb24gY29uZmln dXJhdGlvbiBwYXJhbWV0ZXJzLgotICogQGNmZzogICAgICAgICAgIFZpZGVvIG1vZGUgY29uZmln dXJhdGlvbi4KLSAqCi0gKiBTZXQgdXAgRFNJIHZpZGVvIGVuZ2luZSB3aXRoIGEgc3BlY2lmaWMg Y29uZmlndXJhdGlvbi4gQ29udHJvbGxlciBhbmQKLSAqIHZpZGVvIGVuZ2luZSBhcmUgbm90IGVu YWJsZWQgYXMgcGFydCBvZiB0aGlzIGZ1bmN0aW9uLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Nt bl92aWRlb19lbmdpbmVfc2V0dXAoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAg ICBzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAqY29tbW9uX2NmZywKLQkJCQkgICAgICAgc3Ry dWN0IGRzaV92aWRlb19lbmdpbmVfY2ZnICpjZmcpCi17Ci0JdTMyIHJlZyA9IDA7Ci0KLQlyZWcg fD0gKGNmZy0+bGFzdF9saW5lX2ludGVybGVhdmVfZW4gPyBCSVQoMzEpIDogMCk7Ci0JcmVnIHw9 IChjZmctPnB1bHNlX21vZGVfaHNhX2hlID8gQklUKDI4KSA6IDApOwotCXJlZyB8PSAoY2ZnLT5o ZnBfbHAxMV9lbiA/IEJJVCgyNCkgOiAwKTsKLQlyZWcgfD0gKGNmZy0+aGJwX2xwMTFfZW4gPyBC SVQoMjApIDogMCk7Ci0JcmVnIHw9IChjZmctPmhzYV9scDExX2VuID8gQklUKDE2KSA6IDApOwot CXJlZyB8PSAoY2ZnLT5lb2ZfYmxscF9scDExX2VuID8gQklUKDE1KSA6IDApOwotCXJlZyB8PSAo Y2ZnLT5ibGxwX2xwMTFfZW4gPyBCSVQoMTIpIDogMCk7Ci0JcmVnIHw9IChjZmctPnRyYWZmaWNf bW9kZSAmIDB4MykgPDwgODsKLQlyZWcgfD0gKGNmZy0+dmNfaWQgJiAweDMpOwotCXJlZyB8PSAo dmlkZW9fbW9kZV9mb3JtYXRfbWFwW2NvbW1vbl9jZmctPmRzdF9mb3JtYXRdICYgMHgzKSA8PCA0 OwotCURTSV9XMzIoY3RybCwgRFNJX1ZJREVPX01PREVfQ1RSTCwgcmVnKTsKLQotCXJlZyA9IChj b21tb25fY2ZnLT5zd2FwX21vZGUgJiAweDcpIDw8IDEyOwotCXJlZyB8PSAoY29tbW9uX2NmZy0+ Yml0X3N3YXBfcmVkID8gQklUKDApIDogMCk7Ci0JcmVnIHw9IChjb21tb25fY2ZnLT5iaXRfc3dh cF9ncmVlbiA/IEJJVCg0KSA6IDApOwotCXJlZyB8PSAoY29tbW9uX2NmZy0+Yml0X3N3YXBfYmx1 ZSA/IEJJVCg4KSA6IDApOwotCURTSV9XMzIoY3RybCwgRFNJX1ZJREVPX01PREVfREFUQV9DVFJM LCByZWcpOwotCS8qIERpc2FibGUgVGltaW5nIGRvdWJsZSBidWZmZXJpbmcgKi8KLQlEU0lfVzMy KGN0cmwsIERTSV9EU0lfVElNSU5HX0RCX01PREUsIDB4MCk7Ci0KLQotCXByX2RlYnVnKCJbRFNJ XyVkXSBWaWRlbyBlbmdpbmUgc2V0dXAgZG9uZVxuIiwgY3RybC0+aW5kZXgpOwotfQotCi12b2lk IGRzaV9jdHJsX2h3X2Ntbl9kZWJ1Z19idXMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKQotewot CXUzMiByZWcgPSAwOwotCi0JRFNJX1czMihjdHJsLCBEU0lfREVCVUdfQlVTX0NUTCwgMHgxODEp OwotCi0JLyogbWFrZSBzdXJlIHRoYXQgZGVidWcgdGVzdCBwb2ludCBpcyBlbmFibGVkICovCi0J d21iKCk7Ci0JcmVnID0gRFNJX1IzMihjdHJsLCBEU0lfREVCVUdfQlVTX1NUQVRVUyk7Ci0KLQlw cl9lcnIoIltEU0lfJWRdIGRlYnVnIGJ1cyBzdGF0dXM6MHgleFxuIiwgY3RybC0+aW5kZXgsIHJl Zyk7Ci19Ci0vKioKLSAqIGNtZF9lbmdpbmVfc2V0dXAoKSAtIHNldHVwIGRzaSBob3N0IGNvbnRy b2xsZXIgZm9yIGNvbW1hbmQgbW9kZQotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhl IGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBjb21tb25fY2ZnOiAgICBDb21tb24gY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgotICogQGNmZzogICAgICAgICAgIENvbW1hbmQgbW9kZSBj b25maWd1cmF0aW9uLgotICoKLSAqIFNldHVwIERTSSBDTUQgZW5naW5lIHdpdGggYSBzcGVjaWZp YyBjb25maWd1cmF0aW9uLiBDb250cm9sbGVyIGFuZAotICogY29tbWFuZCBlbmdpbmUgYXJlIG5v dCBlbmFibGVkIGFzIHBhcnQgb2YgdGhpcyBmdW5jdGlvbi4KLSAqLwotdm9pZCBkc2lfY3RybF9o d19jbW5fY21kX2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJICAg ICBzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAqY29tbW9uX2NmZywKLQkJCQkgICAgIHN0cnVj dCBkc2lfY21kX2VuZ2luZV9jZmcgKmNmZykKLXsKLQl1MzIgcmVnID0gMDsKLQotCXJlZyA9IChj ZmctPm1heF9jbWRfcGFja2V0c19pbnRlcmxlYXZlICYgMHhGKSA8PCAyMDsKLQlyZWcgfD0gKGNv bW1vbl9jZmctPmJpdF9zd2FwX3JlZCA/IEJJVCg0KSA6IDApOwotCXJlZyB8PSAoY29tbW9uX2Nm Zy0+Yml0X3N3YXBfZ3JlZW4gPyBCSVQoOCkgOiAwKTsKLQlyZWcgfD0gKGNvbW1vbl9jZmctPmJp dF9zd2FwX2JsdWUgPyBCSVQoMTIpIDogMCk7Ci0JcmVnIHw9IGNtZF9tb2RlX2Zvcm1hdF9tYXBb Y29tbW9uX2NmZy0+ZHN0X2Zvcm1hdF07Ci0JRFNJX1czMihjdHJsLCBEU0lfQ09NTUFORF9NT0RF X01EUF9DVFJMLCByZWcpOwotCi0JcmVnID0gRFNJX1IzMihjdHJsLCBEU0lfQ09NTUFORF9NT0RF X01EUF9DVFJMMik7Ci0JcmVnIHw9IEJJVCgxNik7Ci0JRFNJX1czMihjdHJsLCBEU0lfQ09NTUFO RF9NT0RFX01EUF9DVFJMMiwgcmVnKTsKLQotCXJlZyA9IGNmZy0+d3JfbWVtX3N0YXJ0ICYgMHhG RjsKLQlyZWcgfD0gKGNmZy0+d3JfbWVtX2NvbnRpbnVlICYgMHhGRikgPDwgODsKLQlyZWcgfD0g KGNmZy0+aW5zZXJ0X2Rjc19jb21tYW5kID8gQklUKDE2KSA6IDApOwotCURTSV9XMzIoY3RybCwg RFNJX0NPTU1BTkRfTU9ERV9NRFBfRENTX0NNRF9DVFJMLCByZWcpOwotCi0JcHJfZGVidWcoIltE U0lfJWRdIENtZCBlbmdpbmUgc2V0dXAgZG9uZVxuIiwgY3RybC0+aW5kZXgpOwotfQotCi0vKioK LSAqIHZpZGVvX2VuZ2luZV9lbigpIC0gZW5hYmxlIERTSSB2aWRlbyBlbmdpbmUKLSAqIEBjdHJs OiAgICAgICAgICBQb2ludGVyIHRvIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBvbjog ICAgICAgICAgICBFbmFibGUvZGlzYWJlbCB2aWRlbyBlbmdpbmUuCi0gKi8KLXZvaWQgZHNpX2N0 cmxfaHdfY21uX3ZpZGVvX2VuZ2luZV9lbihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIGJvb2wg b24pCi17Ci0JdTMyIHJlZyA9IDA7Ci0KLQkvKiBTZXQvQ2xlYXIgVklERU9fTU9ERV9FTiBiaXQg Ki8KLQlyZWcgPSBEU0lfUjMyKGN0cmwsIERTSV9DVFJMKTsKLQlpZiAob24pCi0JCXJlZyB8PSBC SVQoMSk7Ci0JZWxzZQotCQlyZWcgJj0gfkJJVCgxKTsKLQotCURTSV9XMzIoY3RybCwgRFNJX0NU UkwsIHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gVmlkZW8gZW5naW5lID0gJWRcbiIsIGN0 cmwtPmluZGV4LCBvbik7Ci19Ci0KLS8qKgotICogY3RybF9lbigpIC0gZW5hYmxlIERTSSBjb250 cm9sbGVyIGVuZ2luZQotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xs ZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBvbjogICAgICAgICAgICB0dXJuIG9uL29mZiB0aGUgRFNJ IGNvbnRyb2xsZXIgZW5naW5lLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jdHJsX2VuKHN0 cnVjdCBkc2lfY3RybF9odyAqY3RybCwgYm9vbCBvbikKLXsKLQl1MzIgcmVnID0gMDsKLQl1MzIg Y2xrX2N0cmw7Ci0KLQljbGtfY3RybCA9IERTSV9SMzIoY3RybCwgRFNJX0NMS19DVFJMKTsKLQlE U0lfVzMyKGN0cmwsIERTSV9DTEtfQ1RSTCwgY2xrX2N0cmwgfCBEU0lfQ1RSTF9EWU5BTUlDX0ZP UkNFX09OKTsKLQl3bWIoKTsgLyogd2FpdCBmb3IgY2xvY2tzIHRvIGVuYWJsZSAqLwotCi0JLyog U2V0L0NsZWFyIERTSV9FTiBiaXQgKi8KLQlyZWcgPSBEU0lfUjMyKGN0cmwsIERTSV9DVFJMKTsK LQlpZiAob24pCi0JCXJlZyB8PSBCSVQoMCk7Ci0JZWxzZQotCQlyZWcgJj0gfkJJVCgwKTsKLQot CURTSV9XMzIoY3RybCwgRFNJX0NUUkwsIHJlZyk7Ci0Jd21iKCk7IC8qIHdhaXQgZm9yIERTSV9F TiB1cGRhdGUgYmVmb3JlIGRpc2FibGluZyBjbG9ja3MgKi8KLQotCURTSV9XMzIoY3RybCwgRFNJ X0NMS19DVFJMLCBjbGtfY3RybCk7Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSBjbG9ja3MgYXJlIHJl c3RvcmVkICovCi0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gQ29udHJvbGxlciBlbmdpbmUgPSAlZFxu IiwgY3RybC0+aW5kZXgsIG9uKTsKLX0KLQotLyoqCi0gKiBjbWRfZW5naW5lX2VuKCkgLSBlbmFi bGUgRFNJIGNvbnRyb2xsZXIgY29tbWFuZCBlbmdpbmUKLSAqIEBjdHJsOiAgICAgICAgICBQb2lu dGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAb246ICAgICAgICAgICAg VHVybiBvbi9vZmYgdGhlIERTSSBjb21tYW5kIGVuZ2luZS4KLSAqLwotdm9pZCBkc2lfY3RybF9o d19jbW5fY21kX2VuZ2luZV9lbihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIGJvb2wgb24pCi17 Ci0JdTMyIHJlZyA9IDA7Ci0KLQkvKiBTZXQvQ2xlYXIgQ01EX01PREVfRU4gYml0ICovCi0JcmVn ID0gRFNJX1IzMihjdHJsLCBEU0lfQ1RSTCk7Ci0JaWYgKG9uKQotCQlyZWcgfD0gQklUKDIpOwot CWVsc2UKLQkJcmVnICY9IH5CSVQoMik7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9DVFJMLCByZWcp OwotCi0JcHJfZGVidWcoIltEU0lfJWRdIGNvbW1hbmQgZW5naW5lID0gJWRcbiIsIGN0cmwtPmlu ZGV4LCBvbik7Ci19Ci0KLS8qKgotICoga2lja29mZl9jb21tYW5kKCkgLSB0cmFuc21pdHMgY29t bWFuZHMgc3RvcmVkIGluIG1lbW9yeQotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhl IGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBjbWQ6ICAgICAgICAgICBDb21tYW5kIGlu Zm9ybWF0aW9uLgotICogQGZsYWdzOiAgICAgICAgIE1vZGlmaWVycyBmb3IgY29tbWFuZCB0cmFu c21pc3Npb24uCi0gKgotICogVGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUgaXMgcHJvZ3JhbW1lZCB3 aXRoIGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlCi0gKiBjb21tYW5kIGJ1ZmZlci4gVGhlIHRyYW5z bWlzc2lvbiBpcyBraWNrZWQgb2ZmIGlmCi0gKiBEU0lfQ1RSTF9IV19DTURfV0FJVF9GT1JfVFJJ R0dFUiBmbGFnIGlzIG5vdCBzZXQuIElmIHRoaXMgZmxhZyBpcwotICogc2V0LCBjYWxsZXIgc2hv dWxkIG1ha2UgYSBzZXBhcmF0ZSBjYWxsIHRvIHRyaWdnZXJfY29tbWFuZF9kbWEoKSB0bwotICog dHJhbnNtaXQgdGhlIGNvbW1hbmQuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX2tpY2tvZmZf Y29tbWFuZChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJICAgIHN0cnVjdCBkc2lfY3Ry bF9jbWRfZG1hX2luZm8gKmNtZCwKLQkJCQkgICAgdTMyIGZsYWdzKQotewotCXUzMiByZWcgPSAw OwotCi0JLypTZXQgQlJPQURDQVNUX0VOIGFuZCBFTUJFRERFRF9NT0RFICovCi0JcmVnID0gRFNJ X1IzMihjdHJsLCBEU0lfQ09NTUFORF9NT0RFX0RNQV9DVFJMKTsKLQlpZiAoY21kLT5lbl9icm9h ZGNhc3QpCi0JCXJlZyB8PSBCSVQoMzEpOwotCWVsc2UKLQkJcmVnICY9IH5CSVQoMzEpOwotCi0J aWYgKGNtZC0+aXNfbWFzdGVyKQotCQlyZWcgfD0gQklUKDMwKTsKLQllbHNlCi0JCXJlZyAmPSB+ QklUKDMwKTsKLQotCWlmIChjbWQtPnVzZV9scG0pCi0JCXJlZyB8PSBCSVQoMjYpOwotCWVsc2UK LQkJcmVnICY9IH5CSVQoMjYpOwotCi0JcmVnIHw9IEJJVCgyOCk7Ci0JRFNJX1czMihjdHJsLCBE U0lfQ09NTUFORF9NT0RFX0RNQV9DVFJMLCByZWcpOwotCi0JRFNJX1czMihjdHJsLCBEU0lfRE1B X0NNRF9PRkZTRVQsIGNtZC0+b2Zmc2V0KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9ETUFfQ01EX0xF TkdUSCwgKGNtZC0+bGVuZ3RoICYgMHhGRkZGRkYpKTsKLQotCS8qIHdhaXQgZm9yIHdyaXRlcyB0 byBjb21wbGV0ZSBiZWZvcmUga2ljayBvZmYgKi8KLQl3bWIoKTsKLQotCWlmICghKGZsYWdzICYg RFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdHRVIpKQotCQlEU0lfVzMyKGN0cmwsIERTSV9D TURfTU9ERV9ETUFfU1dfVFJJR0dFUiwgMHgxKTsKLX0KLQotLyoqCi0gKiBraWNrb2ZmX2ZpZm9f Y29tbWFuZCgpIC0gdHJhbnNtaXRzIGEgY29tbWFuZCB1c2luZyBGSUZPIGluIGRzaQotICogICAg ICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLgotICogQGN0cmw6ICAgICAgICAgIFBvaW50 ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBjbWQ6ICAgICAgICAgICBD b21tYW5kIGluZm9ybWF0aW9uLgotICogQGZsYWdzOiAgICAgICAgIE1vZGlmaWVycyBmb3IgY29t bWFuZCB0cmFuc21pc3Npb24uCi0gKgotICogVGhlIGNvbnRyb2xsZXIgaGFyZHdhcmUgRklGTyBp cyBwcm9ncmFtbWVkIHdpdGggY29tbWFuZCBoZWFkZXIgYW5kCi0gKiBwYXlsb2FkLiBUaGUgdHJh bnNtaXNzaW9uIGlzIGtpY2tlZCBvZmYgaWYKLSAqIERTSV9DVFJMX0hXX0NNRF9XQUlUX0ZPUl9U UklHR0VSIGZsYWcgaXMgbm90IHNldC4gSWYgdGhpcyBmbGFnIGlzCi0gKiBzZXQsIGNhbGxlciBz aG91bGQgbWFrZSBhIHNlcGFyYXRlIGNhbGwgdG8gdHJpZ2dlcl9jb21tYW5kX2RtYSgpIHRvCi0g KiB0cmFuc21pdCB0aGUgY29tbWFuZC4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fa2lja29m Zl9maWZvX2NvbW1hbmQoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgc3RydWN0IGRz aV9jdHJsX2NtZF9kbWFfZmlmb19pbmZvICpjbWQsCi0JCQkJCSB1MzIgZmxhZ3MpCi17Ci0JdTMy IHJlZyA9IDAsIGkgPSAwOwotCXUzMiAqcHRyID0gY21kLT5jb21tYW5kOwotCS8qCi0JICogU2V0 IENNRF9ETUFfVFBHX0VOLCBUUEdfRE1BX0ZJRk9fTU9ERSBhbmQKLQkgKiBDTURfRE1BX1BBVFRF Uk5fU0VMID0gY3VzdG9tIHBhdHRlcm4gc3RvcmVkIGluIFRQRyBETUEgRklGTwotCSAqLwotCXJl ZyA9IChCSVQoMSkgfCBCSVQoMikgfCAoMHgzIDw8IDE2KSk7Ci0JRFNJX1czMihjdHJsLCBEU0lf VEVTVF9QQVRURVJOX0dFTl9DVFJMLCByZWcpOwotCi0JLyoKLQkgKiBQcm9ncmFtIHRoZSBGSUZP IHdpdGggY29tbWFuZCBidWZmZXIuIEhhcmR3YXJlIHJlcXVpcmVzIGFuIGV4dHJhCi0JICogRFdP UkQgKHNldCB0byB6ZXJvKSBpZiB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgYnVmZmVyIGlzIG9kZCBE V09SRFMuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGNtZC0+c2l6ZTsgaSArPSA0KSB7Ci0JCURT SV9XMzIoY3RybCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX0RNQV9JTklUX1ZBTCwgKnB0cik7 Ci0JCXB0cisrOwotCX0KLQotCWlmICgoY21kLT5zaXplIC8gNCkgJiAweDEpCi0JCURTSV9XMzIo Y3RybCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX0RNQV9JTklUX1ZBTCwgMCk7Ci0KLQkvKlNl dCBCUk9BRENBU1RfRU4gYW5kIEVNQkVEREVEX01PREUgKi8KLQlyZWcgPSBEU0lfUjMyKGN0cmws IERTSV9DT01NQU5EX01PREVfRE1BX0NUUkwpOwotCWlmIChjbWQtPmVuX2Jyb2FkY2FzdCkKLQkJ cmVnIHw9IEJJVCgzMSk7Ci0JZWxzZQotCQlyZWcgJj0gfkJJVCgzMSk7Ci0KLQlpZiAoY21kLT5p c19tYXN0ZXIpCi0JCXJlZyB8PSBCSVQoMzApOwotCWVsc2UKLQkJcmVnICY9IH5CSVQoMzApOwot Ci0JaWYgKGNtZC0+dXNlX2xwbSkKLQkJcmVnIHw9IEJJVCgyNik7Ci0JZWxzZQotCQlyZWcgJj0g fkJJVCgyNik7Ci0KLQlyZWcgfD0gQklUKDI4KTsKLQotCURTSV9XMzIoY3RybCwgRFNJX0NPTU1B TkRfTU9ERV9ETUFfQ1RSTCwgcmVnKTsKLQotCURTSV9XMzIoY3RybCwgRFNJX0RNQV9DTURfTEVO R1RILCAoY21kLT5zaXplICYgMHhGRkZGRkZGRikpOwotCS8qIEZpbmlzaCB3cml0ZXMgYmVmb3Jl IGNvbW1hbmQgdHJpZ2dlciAqLwotCXdtYigpOwotCi0JaWYgKCEoZmxhZ3MgJiBEU0lfQ1RSTF9I V19DTURfV0FJVF9GT1JfVFJJR0dFUikpCi0JCURTSV9XMzIoY3RybCwgRFNJX0NNRF9NT0RFX0RN QV9TV19UUklHR0VSLCAweDEpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdc2l6ZT0lZCwgdHJpZ2dl ciA9ICVkXG4iLAotCQkgY3RybC0+aW5kZXgsIGNtZC0+c2l6ZSwKLQkJIChmbGFncyAmIERTSV9D VFJMX0hXX0NNRF9XQUlUX0ZPUl9UUklHR0VSKSA/IGZhbHNlIDogdHJ1ZSk7Ci19Ci0KLXZvaWQg ZHNpX2N0cmxfaHdfY21uX3Jlc2V0X2NtZF9maWZvKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCkK LXsKLQkvKiBkaXNhYmxlIGNtZCBkbWEgdHBnICovCi0JRFNJX1czMihjdHJsLCBEU0lfVEVTVF9Q QVRURVJOX0dFTl9DVFJMLCAweDApOwotCi0JRFNJX1czMihjdHJsLCBEU0lfVFBHX0RNQV9GSUZP X1JFU0VULCAweDEpOwotCXVkZWxheSgxKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9UUEdfRE1BX0ZJ Rk9fUkVTRVQsIDB4MCk7Ci19Ci0KLS8qKgotICogdHJpZ2dlcl9jb21tYW5kX2RtYSgpIC0gdHJp Z2dlciB0cmFuc21pc3Npb24gb2YgY29tbWFuZCBidWZmZXIuCi0gKiBAY3RybDogICAgICAgICAg UG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICoKLSAqIFRoaXMgdHJp Z2dlciBjYW4gYmUgb25seSB1c2VkIGlmIHRoZXJlIHdhcyBhIHByaW9yIGNhbGwgdG8KLSAqIGtp Y2tvZmZfY29tbWFuZCgpIG9mIGtpY2tvZmZfZmlmb19jb21tYW5kKCkgd2l0aAotICogRFNJX0NU UkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdHRVIgZmxhZy4KLSAqLwotdm9pZCBkc2lfY3RybF9od19j bW5fdHJpZ2dlcl9jb21tYW5kX2RtYShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpCi17Ci0JRFNJ X1czMihjdHJsLCBEU0lfQ01EX01PREVfRE1BX1NXX1RSSUdHRVIsIDB4MSk7Ci0JcHJfZGVidWco IltEU0lfJWRdIENNRCBETUEgdHJpZ2dlcmVkXG4iLCBjdHJsLT5pbmRleCk7Ci19Ci0KLS8qKgot ICogZ2V0X2NtZF9yZWFkX2RhdGEoKSAtIGdldCBkYXRhIHJlYWQgZnJvbSB0aGUgcGVyaXBoZXJh bAotICogQGN0cmw6ICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFy ZHdhcmUuCi0gKiBAcmRfYnVmOiAgICAgICAgIEJ1ZmZlciB3aGVyZSBkYXRhIHdpbGwgYmUgcmVh ZCBpbnRvLgotICogQHRvdGFsX3JlYWRfbGVuOiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KLSAq Ci0gKiByZXR1cm46IG51bWJlciBvZiBieXRlcyByZWFkLgotICovCi11MzIgZHNpX2N0cmxfaHdf Y21uX2dldF9jbWRfcmVhZF9kYXRhKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAg IHU4ICpyZF9idWYsCi0JCQkJICAgICB1MzIgcmVhZF9vZmZzZXQsCi0JCQkJICAgICB1MzIgdG90 YWxfcmVhZF9sZW4pCi17Ci0JdTMyICpscCwgKnRlbXAsIGRhdGE7Ci0JaW50IGksIGogPSAwLCBj bnQ7Ci0JdTMyIHJlYWRfY250OwotCXUzMiByeF9ieXRlID0gMDsKLQl1MzIgcmVwZWF0ZWRfYnl0 ZXMgPSAwOwotCXU4IHJlZ1sxNl0gPSB7MH07Ci0JdTMyIHBrdF9zaXplID0gMDsKLQlpbnQgYnVm X29mZnNldCA9IHJlYWRfb2Zmc2V0OwotCi0JbHAgPSAodTMyICopcmRfYnVmOwotCXRlbXAgPSAo dTMyICopcmVnOwotCWNudCA9IChyeF9ieXRlICsgMykgPj4gMjsKLQotCWlmIChjbnQgPiA0KQot CQljbnQgPSA0OwotCi0JaWYgKHJ4X2J5dGUgPT0gNCkKLQkJcmVhZF9jbnQgPSA0OwotCWVsc2UK LQkJcmVhZF9jbnQgPSBwa3Rfc2l6ZSArIDY7Ci0KLQlpZiAocmVhZF9jbnQgPiAxNikgewotCQlp bnQgYnl0ZXNfc2hpZnRlZDsKLQotCQlieXRlc19zaGlmdGVkID0gcmVhZF9jbnQgLSAxNjsKLQkJ cmVwZWF0ZWRfYnl0ZXMgPSBidWZfb2Zmc2V0IC0gYnl0ZXNfc2hpZnRlZDsKLQl9Ci0KLQlmb3Ig KGkgPSBjbnQgLSAxOyBpID49IDA7IGktLSkgewotCQlkYXRhID0gRFNJX1IzMihjdHJsLCBEU0lf UkRCS19EQVRBMCArIGkqNCk7Ci0JCSp0ZW1wKysgPSBudG9obChkYXRhKTsKLQl9Ci0KLQlmb3Ig KGkgPSByZXBlYXRlZF9ieXRlczsgaSA8IDE2OyBpKyspCi0JCXJkX2J1ZltqKytdID0gcmVnW2ld OwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFJlYWQgJWQgYnl0ZXNcbiIsIGN0cmwtPmluZGV4LCBq KTsKLQlyZXR1cm4gajsKLX0KLQotLyoqCi0gKiBnZXRfaW50ZXJydXB0X3N0YXR1cygpIC0gcmV0 dXJucyB0aGUgaW50ZXJydXB0IHN0YXR1cwotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqCi0gKiBSZXR1cm5zIHRoZSBPUmVkIGxp c3Qgb2YgaW50ZXJydXB0cyhlbnVtIGRzaV9zdGF0dXNfaW50X3R5cGUpIHRoYXQKLSAqIGFyZSBh Y3RpdmUuIFRoaXMgbGlzdCBkb2VzIG5vdCBpbmNsdWRlIGFueSBlcnJvciBpbnRlcnJ1cHRzLiBD YWxsZXIKLSAqIHNob3VsZCBjYWxsIGdldF9lcnJvcl9zdGF0dXMgZm9yIGVycm9yIGludGVycnVw dHMuCi0gKgotICogUmV0dXJuOiBMaXN0IG9mIGFjdGl2ZSBpbnRlcnJ1cHRzLgotICovCi11MzIg ZHNpX2N0cmxfaHdfY21uX2dldF9pbnRlcnJ1cHRfc3RhdHVzKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCkKLXsKLQl1MzIgcmVnID0gMDsKLQl1MzIgaW50cyA9IDA7Ci0KLQlyZWcgPSBEU0lfUjMy KGN0cmwsIERTSV9JTlRfQ1RSTCk7Ci0KLQlpZiAocmVnICYgQklUKDApKQotCQlpbnRzIHw9IERT SV9DTURfTU9ERV9ETUFfRE9ORTsKLQlpZiAocmVnICYgQklUKDgpKQotCQlpbnRzIHw9IERTSV9D TURfRlJBTUVfRE9ORTsKLQlpZiAocmVnICYgQklUKDEwKSkKLQkJaW50cyB8PSBEU0lfQ01EX1NU UkVBTTBfRlJBTUVfRE9ORTsKLQlpZiAocmVnICYgQklUKDEyKSkKLQkJaW50cyB8PSBEU0lfQ01E X1NUUkVBTTFfRlJBTUVfRE9ORTsKLQlpZiAocmVnICYgQklUKDE0KSkKLQkJaW50cyB8PSBEU0lf Q01EX1NUUkVBTTJfRlJBTUVfRE9ORTsKLQlpZiAocmVnICYgQklUKDE2KSkKLQkJaW50cyB8PSBE U0lfVklERU9fTU9ERV9GUkFNRV9ET05FOwotCWlmIChyZWcgJiBCSVQoMjApKQotCQlpbnRzIHw9 IERTSV9CVEFfRE9ORTsKLQlpZiAocmVnICYgQklUKDI4KSkKLQkJaW50cyB8PSBEU0lfRFlOX1JF RlJFU0hfRE9ORTsKLQlpZiAocmVnICYgQklUKDMwKSkKLQkJaW50cyB8PSBEU0lfREVTS0VXX0RP TkU7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gSW50ZXJydXB0IHN0YXR1cyA9IDB4JXgsIElOVF9D VFJMPTB4JXhcbiIsCi0JCSBjdHJsLT5pbmRleCwgaW50cywgcmVnKTsKLQlyZXR1cm4gaW50czsK LX0KLQotLyoqCi0gKiBjbGVhcl9pbnRlcnJ1cHRfc3RhdHVzKCkgLSBjbGVhcnMgdGhlIHNwZWNp ZmllZCBpbnRlcnJ1cHRzCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJv bGxlciBob3N0IGhhcmR3YXJlLgotICogQGludHM6ICAgICAgICAgIExpc3Qgb2YgaW50ZXJydXB0 cyB0byBiZSBjbGVhcmVkLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jbGVhcl9pbnRlcnJ1 cHRfc3RhdHVzKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgdTMyIGludHMpCi17Ci0JdTMyIHJl ZyA9IDA7Ci0KLQlyZWcgPSBEU0lfUjMyKGN0cmwsIERTSV9JTlRfQ1RSTCk7Ci0KLQlpZiAoaW50 cyAmIERTSV9DTURfTU9ERV9ETUFfRE9ORSkKLQkJcmVnIHw9IEJJVCgwKTsKLQlpZiAoaW50cyAm IERTSV9DTURfRlJBTUVfRE9ORSkKLQkJcmVnIHw9IEJJVCg4KTsKLQlpZiAoaW50cyAmIERTSV9D TURfU1RSRUFNMF9GUkFNRV9ET05FKQotCQlyZWcgfD0gQklUKDEwKTsKLQlpZiAoaW50cyAmIERT SV9DTURfU1RSRUFNMV9GUkFNRV9ET05FKQotCQlyZWcgfD0gQklUKDEyKTsKLQlpZiAoaW50cyAm IERTSV9DTURfU1RSRUFNMl9GUkFNRV9ET05FKQotCQlyZWcgfD0gQklUKDE0KTsKLQlpZiAoaW50 cyAmIERTSV9WSURFT19NT0RFX0ZSQU1FX0RPTkUpCi0JCXJlZyB8PSBCSVQoMTYpOwotCWlmIChp bnRzICYgRFNJX0JUQV9ET05FKQotCQlyZWcgfD0gQklUKDIwKTsKLQlpZiAoaW50cyAmIERTSV9E WU5fUkVGUkVTSF9ET05FKQotCQlyZWcgfD0gQklUKDI4KTsKLQlpZiAoaW50cyAmIERTSV9ERVNL RVdfRE9ORSkKLQkJcmVnIHw9IEJJVCgzMCk7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9JTlRfQ1RS TCwgcmVnKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBDbGVhciBpbnRlcnJ1cHRzLCBpbnRzID0g MHgleCwgSU5UX0NUUkw9MHgleFxuIiwKLQkJIGN0cmwtPmluZGV4LCBpbnRzLCByZWcpOwotfQot Ci0vKioKLSAqIGVuYWJsZV9zdGF0dXNfaW50ZXJydXB0cygpIC0gZW5hYmxlIHRoZSBzcGVjaWZp ZWQgaW50ZXJydXB0cwotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xs ZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBpbnRzOiAgICAgICAgICBMaXN0IG9mIGludGVycnVwdHMg dG8gYmUgZW5hYmxlZC4KLSAqCi0gKiBFbmFibGVzIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4g VGhpcyBsaXN0IHdpbGwgb3ZlcnJpZGUgdGhlCi0gKiBwcmV2aW91cyBpbnRlcnJ1cHRzIGVuYWJs ZWQgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLiBDYWxsZXIgaGFzIHRvCi0gKiBtYWludGFpbiB0aGUg c3RhdGUgb2YgdGhlIGludGVycnVwdHMgZW5hYmxlZC4gVG8gZGlzYWJsZSBhbGwKLSAqIGludGVy cnVwdHMsIHNldCBpbnRzIHRvIDAuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX2VuYWJsZV9z dGF0dXNfaW50ZXJydXB0cygKLQkJc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgaW50cykK LXsKLQl1MzIgcmVnID0gMDsKLQotCS8qIERvIG5vdCBjaGFuZ2UgdmFsdWUgb2YgRFNJX0VSUk9S X01BU0sgYml0ICovCi0JcmVnIHw9IChEU0lfUjMyKGN0cmwsIERTSV9JTlRfQ1RSTCkgJiBCSVQo MjUpKTsKLQlpZiAoaW50cyAmIERTSV9DTURfTU9ERV9ETUFfRE9ORSkKLQkJcmVnIHw9IEJJVCgx KTsKLQlpZiAoaW50cyAmIERTSV9DTURfRlJBTUVfRE9ORSkKLQkJcmVnIHw9IEJJVCg5KTsKLQlp ZiAoaW50cyAmIERTSV9DTURfU1RSRUFNMF9GUkFNRV9ET05FKQotCQlyZWcgfD0gQklUKDExKTsK LQlpZiAoaW50cyAmIERTSV9DTURfU1RSRUFNMV9GUkFNRV9ET05FKQotCQlyZWcgfD0gQklUKDEz KTsKLQlpZiAoaW50cyAmIERTSV9DTURfU1RSRUFNMl9GUkFNRV9ET05FKQotCQlyZWcgfD0gQklU KDE1KTsKLQlpZiAoaW50cyAmIERTSV9WSURFT19NT0RFX0ZSQU1FX0RPTkUpCi0JCXJlZyB8PSBC SVQoMTcpOwotCWlmIChpbnRzICYgRFNJX0JUQV9ET05FKQotCQlyZWcgfD0gQklUKDIxKTsKLQlp ZiAoaW50cyAmIERTSV9EWU5fUkVGUkVTSF9ET05FKQotCQlyZWcgfD0gQklUKDI5KTsKLQlpZiAo aW50cyAmIERTSV9ERVNLRVdfRE9ORSkKLQkJcmVnIHw9IEJJVCgzMSk7Ci0KLQlEU0lfVzMyKGN0 cmwsIERTSV9JTlRfQ1RSTCwgcmVnKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBFbmFibGUgaW50 ZXJydXB0cyAweCV4LCBJTlRfQ1RSTD0weCV4XG4iLAotCQkgY3RybC0+aW5kZXgsIGludHMsIHJl Zyk7Ci19Ci0KLS8qKgotICogZ2V0X2Vycm9yX3N0YXR1cygpIC0gcmV0dXJucyB0aGUgZXJyb3Ig c3RhdHVzCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0 IGhhcmR3YXJlLgotICoKLSAqIFJldHVybnMgdGhlIE9SZWQgbGlzdCBvZiBlcnJvcnMoZW51bSBk c2lfZXJyb3JfaW50X3R5cGUpIHRoYXQgYXJlCi0gKiBhY3RpdmUuIFRoaXMgbGlzdCBkb2VzIG5v dCBpbmNsdWRlIGFueSBzdGF0dXMgaW50ZXJydXB0cy4gQ2FsbGVyCi0gKiBzaG91bGQgY2FsbCBn ZXRfaW50ZXJydXB0X3N0YXR1cyBmb3Igc3RhdHVzIGludGVycnVwdHMuCi0gKgotICogUmV0dXJu OiBMaXN0IG9mIGFjdGl2ZSBlcnJvciBpbnRlcnJ1cHRzLgotICovCi11NjQgZHNpX2N0cmxfaHdf Y21uX2dldF9lcnJvcl9zdGF0dXMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKQotewotCXUzMiBk bG4wX3BoeV9lcnI7Ci0JdTMyIGZpZm9fc3RhdHVzOwotCXUzMiBhY2tfZXJyb3I7Ci0JdTMyIHRp bWVvdXRfZXJyb3JzOwotCXUzMiBjbGtfZXJyb3I7Ci0JdTMyIGRzaV9zdGF0dXM7Ci0JdTY0IGVy cm9ycyA9IDA7Ci0KLQlkbG4wX3BoeV9lcnIgPSBEU0lfUjMyKGN0cmwsIERTSV9ETE4wX1BIWV9F UlIpOwotCWlmIChkbG4wX3BoeV9lcnIgJiBCSVQoMCkpCi0JCWVycm9ycyB8PSBEU0lfRExOMF9F U0NfRU5UUllfRVJSOwotCWlmIChkbG4wX3BoeV9lcnIgJiBCSVQoNCkpCi0JCWVycm9ycyB8PSBE U0lfRExOMF9FU0NfU1lOQ19FUlI7Ci0JaWYgKGRsbjBfcGh5X2VyciAmIEJJVCg4KSkKLQkJZXJy b3JzIHw9IERTSV9ETE4wX0xQX0NPTlRST0xfRVJSOwotCWlmIChkbG4wX3BoeV9lcnIgJiBCSVQo MTIpKQotCQllcnJvcnMgfD0gRFNJX0RMTjBfTFAwX0NPTlRFTlRJT047Ci0JaWYgKGRsbjBfcGh5 X2VyciAmIEJJVCgxNikpCi0JCWVycm9ycyB8PSBEU0lfRExOMF9MUDFfQ09OVEVOVElPTjsKLQot CWZpZm9fc3RhdHVzID0gRFNJX1IzMihjdHJsLCBEU0lfRklGT19TVEFUVVMpOwotCWlmIChmaWZv X3N0YXR1cyAmIEJJVCg3KSkKLQkJZXJyb3JzIHw9IERTSV9DTURfTURQX0ZJRk9fVU5ERVJGTE9X OwotCWlmIChmaWZvX3N0YXR1cyAmIEJJVCgxMCkpCi0JCWVycm9ycyB8PSBEU0lfQ01EX0RNQV9G SUZPX1VOREVSRkxPVzsKLQlpZiAoZmlmb19zdGF0dXMgJiBCSVQoMTgpKQotCQllcnJvcnMgfD0g RFNJX0RMTjBfSFNfRklGT19PVkVSRkxPVzsKLQlpZiAoZmlmb19zdGF0dXMgJiBCSVQoMTkpKQot CQllcnJvcnMgfD0gRFNJX0RMTjBfSFNfRklGT19VTkRFUkZMT1c7Ci0JaWYgKGZpZm9fc3RhdHVz ICYgQklUKDIyKSkKLQkJZXJyb3JzIHw9IERTSV9ETE4xX0hTX0ZJRk9fT1ZFUkZMT1c7Ci0JaWYg KGZpZm9fc3RhdHVzICYgQklUKDIzKSkKLQkJZXJyb3JzIHw9IERTSV9ETE4xX0hTX0ZJRk9fVU5E RVJGTE9XOwotCWlmIChmaWZvX3N0YXR1cyAmIEJJVCgyNikpCi0JCWVycm9ycyB8PSBEU0lfRExO Ml9IU19GSUZPX09WRVJGTE9XOwotCWlmIChmaWZvX3N0YXR1cyAmIEJJVCgyNykpCi0JCWVycm9y cyB8PSBEU0lfRExOMl9IU19GSUZPX1VOREVSRkxPVzsKLQlpZiAoZmlmb19zdGF0dXMgJiBCSVQo MzApKQotCQllcnJvcnMgfD0gRFNJX0RMTjNfSFNfRklGT19PVkVSRkxPVzsKLQlpZiAoZmlmb19z dGF0dXMgJiBCSVQoMzEpKQotCQllcnJvcnMgfD0gRFNJX0RMTjNfSFNfRklGT19VTkRFUkZMT1c7 Ci0KLQlhY2tfZXJyb3IgPSBEU0lfUjMyKGN0cmwsIERTSV9BQ0tfRVJSX1NUQVRVUyk7Ci0JaWYg KGFja19lcnJvciAmIEJJVCgxNikpCi0JCWVycm9ycyB8PSBEU0lfUkRCS19TSU5HTEVfRUNDX0VS UjsKLQlpZiAoYWNrX2Vycm9yICYgQklUKDE3KSkKLQkJZXJyb3JzIHw9IERTSV9SREJLX01VTFRJ X0VDQ19FUlI7Ci0JaWYgKGFja19lcnJvciAmIEJJVCgyMCkpCi0JCWVycm9ycyB8PSBEU0lfUkRC S19DUkNfRVJSOwotCWlmIChhY2tfZXJyb3IgJiBCSVQoMjMpKQotCQllcnJvcnMgfD0gRFNJX1JE QktfSU5DT01QTEVURV9QS1Q7Ci0JaWYgKGFja19lcnJvciAmIEJJVCgyNCkpCi0JCWVycm9ycyB8 PSBEU0lfUEVSSVBIX0VSUk9SX1BLVDsKLQotCXRpbWVvdXRfZXJyb3JzID0gRFNJX1IzMihjdHJs LCBEU0lfVElNRU9VVF9TVEFUVVMpOwotCWlmICh0aW1lb3V0X2Vycm9ycyAmIEJJVCgwKSkKLQkJ ZXJyb3JzIHw9IERTSV9IU19UWF9USU1FT1VUOwotCWlmICh0aW1lb3V0X2Vycm9ycyAmIEJJVCg0 KSkKLQkJZXJyb3JzIHw9IERTSV9MUF9SWF9USU1FT1VUOwotCWlmICh0aW1lb3V0X2Vycm9ycyAm IEJJVCg4KSkKLQkJZXJyb3JzIHw9IERTSV9CVEFfVElNRU9VVDsKLQotCWNsa19lcnJvciA9IERT SV9SMzIoY3RybCwgRFNJX0NMS19TVEFUVVMpOwotCWlmIChjbGtfZXJyb3IgJiBCSVQoMTYpKQot CQllcnJvcnMgfD0gRFNJX1BMTF9VTkxPQ0s7Ci0KLQlkc2lfc3RhdHVzID0gRFNJX1IzMihjdHJs LCBEU0lfU1RBVFVTKTsKLQlpZiAoZHNpX3N0YXR1cyAmIEJJVCgzMSkpCi0JCWVycm9ycyB8PSBE U0lfSU5URVJMRUFWRV9PUF9DT05URU5USU9OOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIEVycm9y IHN0YXR1cyA9IDB4JWxseCwgcGh5PTB4JXgsIGZpZm89MHgleCIsCi0JCSBjdHJsLT5pbmRleCwg ZXJyb3JzLCBkbG4wX3BoeV9lcnIsIGZpZm9fc3RhdHVzKTsKLQlwcl9kZWJ1ZygiW0RTSV8lZF0g YWNrPTB4JXgsIHRpbWVvdXQ9MHgleCwgY2xrPTB4JXgsIGRzaT0weCV4XG4iLAotCQkgY3RybC0+ aW5kZXgsIGFja19lcnJvciwgdGltZW91dF9lcnJvcnMsIGNsa19lcnJvciwgZHNpX3N0YXR1cyk7 Ci0JcmV0dXJuIGVycm9yczsKLX0KLQotLyoqCi0gKiBjbGVhcl9lcnJvcl9zdGF0dXMoKSAtIGNs ZWFycyB0aGUgc3BlY2lmaWVkIGVycm9ycwotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBlcnJvcnM6ICAgICAgICAgIExpc3Qg b2YgZXJyb3JzIHRvIGJlIGNsZWFyZWQuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX2NsZWFy X2Vycm9yX3N0YXR1cyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHU2NCBlcnJvcnMpCi17Ci0J dTMyIGRsbjBfcGh5X2VyciA9IDA7Ci0JdTMyIGZpZm9fc3RhdHVzID0gMDsKLQl1MzIgYWNrX2Vy cm9yID0gMDsKLQl1MzIgdGltZW91dF9lcnJvciA9IDA7Ci0JdTMyIGNsa19lcnJvciA9IDA7Ci0J dTMyIGRzaV9zdGF0dXMgPSAwOwotCXUzMiBpbnRfY3RybCA9IDA7Ci0KLQlpZiAoZXJyb3JzICYg RFNJX1JEQktfU0lOR0xFX0VDQ19FUlIpCi0JCWFja19lcnJvciB8PSBCSVQoMTYpOwotCWlmIChl cnJvcnMgJiBEU0lfUkRCS19NVUxUSV9FQ0NfRVJSKQotCQlhY2tfZXJyb3IgfD0gQklUKDE3KTsK LQlpZiAoZXJyb3JzICYgRFNJX1JEQktfQ1JDX0VSUikKLQkJYWNrX2Vycm9yIHw9IEJJVCgyMCk7 Ci0JaWYgKGVycm9ycyAmIERTSV9SREJLX0lOQ09NUExFVEVfUEtUKQotCQlhY2tfZXJyb3IgfD0g QklUKDIzKTsKLQlpZiAoZXJyb3JzICYgRFNJX1BFUklQSF9FUlJPUl9QS1QpCi0JCWFja19lcnJv ciB8PSBCSVQoMjQpOwotCi0JaWYgKGVycm9ycyAmIERTSV9MUF9SWF9USU1FT1VUKQotCQl0aW1l b3V0X2Vycm9yIHw9IEJJVCg0KTsKLQlpZiAoZXJyb3JzICYgRFNJX0hTX1RYX1RJTUVPVVQpCi0J CXRpbWVvdXRfZXJyb3IgfD0gQklUKDApOwotCWlmIChlcnJvcnMgJiBEU0lfQlRBX1RJTUVPVVQp Ci0JCXRpbWVvdXRfZXJyb3IgfD0gQklUKDgpOwotCi0JaWYgKGVycm9ycyAmIERTSV9QTExfVU5M T0NLKQotCQljbGtfZXJyb3IgfD0gQklUKDE2KTsKLQotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9M UDBfQ09OVEVOVElPTikKLQkJZGxuMF9waHlfZXJyIHw9IEJJVCgxMik7Ci0JaWYgKGVycm9ycyAm IERTSV9ETE4wX0xQMV9DT05URU5USU9OKQotCQlkbG4wX3BoeV9lcnIgfD0gQklUKDE2KTsKLQlp ZiAoZXJyb3JzICYgRFNJX0RMTjBfRVNDX0VOVFJZX0VSUikKLQkJZGxuMF9waHlfZXJyIHw9IEJJ VCgwKTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjBfRVNDX1NZTkNfRVJSKQotCQlkbG4wX3BoeV9l cnIgfD0gQklUKDQpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9MUF9DT05UUk9MX0VSUikKLQkJ ZGxuMF9waHlfZXJyIHw9IEJJVCg4KTsKLQotCWlmIChlcnJvcnMgJiBEU0lfQ01EX0RNQV9GSUZP X1VOREVSRkxPVykKLQkJZmlmb19zdGF0dXMgfD0gQklUKDEwKTsKLQlpZiAoZXJyb3JzICYgRFNJ X0NNRF9NRFBfRklGT19VTkRFUkZMT1cpCi0JCWZpZm9fc3RhdHVzIHw9IEJJVCg3KTsKLQlpZiAo ZXJyb3JzICYgRFNJX0RMTjBfSFNfRklGT19PVkVSRkxPVykKLQkJZmlmb19zdGF0dXMgfD0gQklU KDE4KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjFfSFNfRklGT19PVkVSRkxPVykKLQkJZmlmb19z dGF0dXMgfD0gQklUKDIyKTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjJfSFNfRklGT19PVkVSRkxP VykKLQkJZmlmb19zdGF0dXMgfD0gQklUKDI2KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjNfSFNf RklGT19PVkVSRkxPVykKLQkJZmlmb19zdGF0dXMgfD0gQklUKDMwKTsKLQlpZiAoZXJyb3JzICYg RFNJX0RMTjBfSFNfRklGT19VTkRFUkZMT1cpCi0JCWZpZm9fc3RhdHVzIHw9IEJJVCgxOSk7Ci0J aWYgKGVycm9ycyAmIERTSV9ETE4xX0hTX0ZJRk9fVU5ERVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8 PSBCSVQoMjMpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMl9IU19GSUZPX1VOREVSRkxPVykKLQkJ Zmlmb19zdGF0dXMgfD0gQklUKDI3KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjNfSFNfRklGT19V TkRFUkZMT1cpCi0JCWZpZm9fc3RhdHVzIHw9IEJJVCgzMSk7Ci0KLQlpZiAoZXJyb3JzICYgRFNJ X0lOVEVSTEVBVkVfT1BfQ09OVEVOVElPTikKLQkJZHNpX3N0YXR1cyB8PSBCSVQoMzEpOwotCi0J RFNJX1czMihjdHJsLCBEU0lfRExOMF9QSFlfRVJSLCBkbG4wX3BoeV9lcnIpOwotCURTSV9XMzIo Y3RybCwgRFNJX0ZJRk9fU1RBVFVTLCBmaWZvX3N0YXR1cyk7Ci0JRFNJX1czMihjdHJsLCBEU0lf QUNLX0VSUl9TVEFUVVMsIGFja19lcnJvcik7Ci0JRFNJX1czMihjdHJsLCBEU0lfVElNRU9VVF9T VEFUVVMsIHRpbWVvdXRfZXJyb3IpOwotCURTSV9XMzIoY3RybCwgRFNJX0NMS19TVEFUVVMsIGNs a19lcnJvcik7Ci0JRFNJX1czMihjdHJsLCBEU0lfU1RBVFVTLCBkc2lfc3RhdHVzKTsKLQotCWlu dF9jdHJsID0gRFNJX1IzMihjdHJsLCBEU0lfSU5UX0NUUkwpOwotCWludF9jdHJsIHw9IEJJVCgy NCk7Ci0JRFNJX1czMihjdHJsLCBEU0lfSU5UX0NUUkwsIGludF9jdHJsKTsKLQlwcl9kZWJ1Zygi W0RTSV8lZF0gY2xlYXIgZXJyb3JzID0gMHglbGx4LCBwaHk9MHgleCwgZmlmbz0weCV4IiwKLQkJ IGN0cmwtPmluZGV4LCBlcnJvcnMsIGRsbjBfcGh5X2VyciwgZmlmb19zdGF0dXMpOwotCXByX2Rl YnVnKCJbRFNJXyVkXSBhY2s9MHgleCwgdGltZW91dD0weCV4LCBjbGs9MHgleCwgZHNpPTB4JXhc biIsCi0JCSBjdHJsLT5pbmRleCwgYWNrX2Vycm9yLCB0aW1lb3V0X2Vycm9yLCBjbGtfZXJyb3Is IGRzaV9zdGF0dXMpOwotfQotCi0vKioKLSAqIGVuYWJsZV9lcnJvcl9pbnRlcnJ1cHRzKCkgLSBl bmFibGUgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRl ciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGVycm9yczogICAgICAgIExp c3Qgb2YgZXJyb3JzIHRvIGJlIGVuYWJsZWQuCi0gKgotICogRW5hYmxlcyB0aGUgc3BlY2lmaWVk IGludGVycnVwdHMuIFRoaXMgbGlzdCB3aWxsIG92ZXJyaWRlIHRoZQotICogcHJldmlvdXMgaW50 ZXJydXB0cyBlbmFibGVkIHRocm91Z2ggdGhpcyBmdW5jdGlvbi4gQ2FsbGVyIGhhcyB0bwotICog bWFpbnRhaW4gdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnJ1cHRzIGVuYWJsZWQuIFRvIGRpc2FibGUg YWxsCi0gKiBpbnRlcnJ1cHRzLCBzZXQgZXJyb3JzIHRvIDAuCi0gKi8KLXZvaWQgZHNpX2N0cmxf aHdfY21uX2VuYWJsZV9lcnJvcl9pbnRlcnJ1cHRzKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwK LQkJCQkJICAgIHU2NCBlcnJvcnMpCi17Ci0JdTMyIGludF9jdHJsID0gMDsKLQl1MzIgaW50X21h c2swID0gMHg3RkZGM0JGRjsKLQotCWludF9jdHJsID0gRFNJX1IzMihjdHJsLCBEU0lfSU5UX0NU UkwpOwotCWlmIChlcnJvcnMpCi0JCWludF9jdHJsIHw9IEJJVCgyNSk7Ci0JZWxzZQotCQlpbnRf Y3RybCAmPSB+QklUKDI1KTsKLQotCWlmIChlcnJvcnMgJiBEU0lfUkRCS19TSU5HTEVfRUNDX0VS UikKLQkJaW50X21hc2swICY9IH5CSVQoMCk7Ci0JaWYgKGVycm9ycyAmIERTSV9SREJLX01VTFRJ X0VDQ19FUlIpCi0JCWludF9tYXNrMCAmPSB+QklUKDEpOwotCWlmIChlcnJvcnMgJiBEU0lfUkRC S19DUkNfRVJSKQotCQlpbnRfbWFzazAgJj0gfkJJVCgyKTsKLQlpZiAoZXJyb3JzICYgRFNJX1JE QktfSU5DT01QTEVURV9QS1QpCi0JCWludF9tYXNrMCAmPSB+QklUKDMpOwotCWlmIChlcnJvcnMg JiBEU0lfUEVSSVBIX0VSUk9SX1BLVCkKLQkJaW50X21hc2swICY9IH5CSVQoNCk7Ci0KLQlpZiAo ZXJyb3JzICYgRFNJX0xQX1JYX1RJTUVPVVQpCi0JCWludF9tYXNrMCAmPSB+QklUKDUpOwotCWlm IChlcnJvcnMgJiBEU0lfSFNfVFhfVElNRU9VVCkKLQkJaW50X21hc2swICY9IH5CSVQoNik7Ci0J aWYgKGVycm9ycyAmIERTSV9CVEFfVElNRU9VVCkKLQkJaW50X21hc2swICY9IH5CSVQoNyk7Ci0K LQlpZiAoZXJyb3JzICYgRFNJX1BMTF9VTkxPQ0spCi0JCWludF9tYXNrMCAmPSB+QklUKDI4KTsK LQotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9MUDBfQ09OVEVOVElPTikKLQkJaW50X21hc2swICY9 IH5CSVQoMjQpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9MUDFfQ09OVEVOVElPTikKLQkJaW50 X21hc2swICY9IH5CSVQoMjUpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9FU0NfRU5UUllfRVJS KQotCQlpbnRfbWFzazAgJj0gfkJJVCgyMSk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0VTQ19T WU5DX0VSUikKLQkJaW50X21hc2swICY9IH5CSVQoMjIpOwotCWlmIChlcnJvcnMgJiBEU0lfRExO MF9MUF9DT05UUk9MX0VSUikKLQkJaW50X21hc2swICY9IH5CSVQoMjMpOwotCi0JaWYgKGVycm9y cyAmIERTSV9DTURfRE1BX0ZJRk9fVU5ERVJGTE9XKQotCQlpbnRfbWFzazAgJj0gfkJJVCg5KTsK LQlpZiAoZXJyb3JzICYgRFNJX0NNRF9NRFBfRklGT19VTkRFUkZMT1cpCi0JCWludF9tYXNrMCAm PSB+QklUKDExKTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjBfSFNfRklGT19PVkVSRkxPVykKLQkJ aW50X21hc2swICY9IH5CSVQoMTYpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMV9IU19GSUZPX09W RVJGTE9XKQotCQlpbnRfbWFzazAgJj0gfkJJVCgxNyk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4y X0hTX0ZJRk9fT1ZFUkZMT1cpCi0JCWludF9tYXNrMCAmPSB+QklUKDE4KTsKLQlpZiAoZXJyb3Jz ICYgRFNJX0RMTjNfSFNfRklGT19PVkVSRkxPVykKLQkJaW50X21hc2swICY9IH5CSVQoMTkpOwot CWlmIChlcnJvcnMgJiBEU0lfRExOMF9IU19GSUZPX1VOREVSRkxPVykKLQkJaW50X21hc2swICY9 IH5CSVQoMjYpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMV9IU19GSUZPX1VOREVSRkxPVykKLQkJ aW50X21hc2swICY9IH5CSVQoMjcpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMl9IU19GSUZPX1VO REVSRkxPVykKLQkJaW50X21hc2swICY9IH5CSVQoMjkpOwotCWlmIChlcnJvcnMgJiBEU0lfRExO M19IU19GSUZPX1VOREVSRkxPVykKLQkJaW50X21hc2swICY9IH5CSVQoMzApOwotCi0JaWYgKGVy cm9ycyAmIERTSV9JTlRFUkxFQVZFX09QX0NPTlRFTlRJT04pCi0JCWludF9tYXNrMCAmPSB+QklU KDgpOwotCi0JRFNJX1czMihjdHJsLCBEU0lfSU5UX0NUUkwsIGludF9jdHJsKTsKLQlEU0lfVzMy KGN0cmwsIERTSV9FUlJfSU5UX01BU0swLCBpbnRfbWFzazApOwotCi0JcHJfZGVidWcoIltEU0lf JWRdIGVuYWJsZSBlcnJvcnMgPSAweCVsbHgsIGludF9tYXNrMD0weCV4XG4iLAotCQkgY3RybC0+ aW5kZXgsIGVycm9ycywgaW50X21hc2swKTsKLX0KLQotLyoqCi0gKiB2aWRlb190ZXN0X3BhdHRl cm5fc2V0dXAoKSAtIHNldHVwIHRlc3QgcGF0dGVybiBlbmdpbmUgZm9yIHZpZGVvIG1vZGUKLSAq IEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUu Ci0gKiBAdHlwZTogICAgICAgICAgVHlwZSBvZiB0ZXN0IHBhdHRlcm4uCi0gKiBAaW5pdF92YWw6 ICAgICAgSW5pdGlhbCB2YWx1ZSB0byB1c2UgZm9yIGdlbmVyYXRpbmcgdGVzdCBwYXR0ZXJuLgot ICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl92aWRlb190ZXN0X3BhdHRlcm5fc2V0dXAoc3RydWN0 IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgICAgIGVudW0gZHNpX3Rlc3RfcGF0dGVybiB0eXBl LAotCQkJCQkgICAgIHUzMiBpbml0X3ZhbCkKLXsKLQl1MzIgcmVnID0gMDsKLQotCURTSV9XMzIo Y3RybCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fVklERU9fSU5JVF9WQUwsIGluaXRfdmFsKTsKLQot CXN3aXRjaCAodHlwZSkgewotCWNhc2UgRFNJX1RFU1RfUEFUVEVSTl9GSVhFRDoKLQkJcmVnIHw9 ICgweDIgPDwgNCk7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX1RFU1RfUEFUVEVSTl9JTkM6Ci0JCXJl ZyB8PSAoMHgxIDw8IDQpOwotCQlicmVhazsKLQljYXNlIERTSV9URVNUX1BBVFRFUk5fUE9MWToK LQkJRFNJX1czMihjdHJsLCBEU0lfVEVTVF9QQVRURVJOX0dFTl9WSURFT19QT0xZLCAweEYwRjBG KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JRFNJX1czMihjdHJsLCBE U0lfVFBHX01BSU5fQ09OVFJPTCwgMHgxMDApOwotCURTSV9XMzIoY3RybCwgRFNJX1RQR19WSURF T19DT05GSUcsIDB4NSk7Ci0JRFNJX1czMihjdHJsLCBEU0lfVEVTVF9QQVRURVJOX0dFTl9DVFJM LCByZWcpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFZpZGVvIHRlc3QgcGF0dGVybiBzZXR1cCBk b25lXG4iLCBjdHJsLT5pbmRleCk7Ci19Ci0KLS8qKgotICogY21kX3Rlc3RfcGF0dGVybl9zZXR1 cCgpIC0gc2V0dXAgdGVzdCBwYXR0dGVybiBlbmdpbmUgZm9yIGNtZCBtb2RlCi0gKiBAY3RybDog ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQHR5 cGU6ICAgICAgICAgIFR5cGUgb2YgdGVzdCBwYXR0ZXJuLgotICogQGluaXRfdmFsOiAgICAgIElu aXRpYWwgdmFsdWUgdG8gdXNlIGZvciBnZW5lcmF0aW5nIHRlc3QgcGF0dGVybi4KLSAqIEBzdHJl YW1faWQ6ICAgICBTdHJlYW0gSWQgb24gd2hpY2ggcGFja2V0cyBhcmUgZ2VuZXJhdGVkLgotICov Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jbWRfdGVzdF9wYXR0ZXJuX3NldHVwKHN0cnVjdCBkc2lf Y3RybF9odyAqY3RybCwKLQkJCQkJICAgZW51bSBkc2lfdGVzdF9wYXR0ZXJuIHR5cGUsCi0JCQkJ CSAgIHUzMiBpbml0X3ZhbCwKLQkJCQkJICAgdTMyIHN0cmVhbV9pZCkKLXsKLQl1MzIgcmVnID0g MDsKLQl1MzIgaW5pdF9vZmZzZXQ7Ci0JdTMyIHBvbHlfb2Zmc2V0OwotCXUzMiBwYXR0ZXJuX3Nl bF9zaGlmdDsKLQotCXN3aXRjaCAoc3RyZWFtX2lkKSB7Ci0JY2FzZSAwOgotCQlpbml0X29mZnNl dCA9IERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBfSU5JVF9WQUwwOwotCQlwb2x5X29mZnNl dCA9IERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBfU1RSRUFNMF9QT0xZOwotCQlwYXR0ZXJu X3NlbF9zaGlmdCA9IDg7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJaW5pdF9vZmZzZXQgPSBEU0lf VEVTVF9QQVRURVJOX0dFTl9DTURfTURQX0lOSVRfVkFMMTsKLQkJcG9seV9vZmZzZXQgPSBEU0lf VEVTVF9QQVRURVJOX0dFTl9DTURfTURQX1NUUkVBTTFfUE9MWTsKLQkJcGF0dGVybl9zZWxfc2hp ZnQgPSAxMjsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlpbml0X29mZnNldCA9IERTSV9URVNUX1BB VFRFUk5fR0VOX0NNRF9NRFBfSU5JVF9WQUwyOwotCQlwb2x5X29mZnNldCA9IERTSV9URVNUX1BB VFRFUk5fR0VOX0NNRF9NRFBfU1RSRUFNMl9QT0xZOwotCQlwYXR0ZXJuX3NlbF9zaGlmdCA9IDIw OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JRFNJX1czMihjdHJsLCBp bml0X29mZnNldCwgaW5pdF92YWwpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBEU0lfVEVT VF9QQVRURVJOX0ZJWEVEOgotCQlyZWcgfD0gKDB4MiA8PCBwYXR0ZXJuX3NlbF9zaGlmdCk7Ci0J CWJyZWFrOwotCWNhc2UgRFNJX1RFU1RfUEFUVEVSTl9JTkM6Ci0JCXJlZyB8PSAoMHgxIDw8IHBh dHRlcm5fc2VsX3NoaWZ0KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfVEVTVF9QQVRURVJOX1BPTFk6 Ci0JCURTSV9XMzIoY3RybCwgcG9seV9vZmZzZXQsIDB4RjBGMEYpOwotCQlicmVhazsKLQlkZWZh dWx0OgotCQlicmVhazsKLQl9Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VO X0NUUkwsIHJlZyk7Ci0JcHJfZGVidWcoIltEU0lfJWRdIENtZCB0ZXN0IHBhdHRlcm4gc2V0dXAg ZG9uZVxuIiwgY3RybC0+aW5kZXgpOwotfQotCi0vKioKLSAqIHRlc3RfcGF0dGVybl9lbmFibGUo KSAtIGVuYWJsZSB0ZXN0IHBhdHRlcm4gZW5naW5lCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRl ciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGVuYWJsZTogICAgICAgIEVu YWJsZS9EaXNhYmxlIHRlc3QgcGF0dGVybiBlbmdpbmUuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdf Y21uX3Rlc3RfcGF0dGVybl9lbmFibGUoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQli b29sIGVuYWJsZSkKLXsKLQl1MzIgcmVnID0gRFNJX1IzMihjdHJsLCBEU0lfVEVTVF9QQVRURVJO X0dFTl9DVFJMKTsKLQotCWlmIChlbmFibGUpCi0JCXJlZyB8PSBCSVQoMCk7Ci0JZWxzZQotCQly ZWcgJj0gfkJJVCgwKTsKLQotCURTSV9XMzIoY3RybCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ1RS TCwgcmVnKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBUZXN0IHBhdHRlcm4gZW5hYmxlPSVkXG4i LCBjdHJsLT5pbmRleCwgZW5hYmxlKTsKLX0KLQotLyoqCi0gKiB0cmlnZ2VyX2NtZF90ZXN0X3Bh dHRlcm4oKSAtIHRyaWdnZXIgYSBjb21tYW5kIG1vZGUgZnJhbWUgdXBkYXRlIHdpdGgKLSAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCBwYXR0ZXJuCi0gKiBAY3RybDogICAgICAg ICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQHN0cmVhbV9p ZDogICAgIFN0cmVhbSBvbiB3aGljaCBmcmFtZSB1cGRhdGUgaXMgc2VudC4KLSAqLwotdm9pZCBk c2lfY3RybF9od19jbW5fdHJpZ2dlcl9jbWRfdGVzdF9wYXR0ZXJuKHN0cnVjdCBkc2lfY3RybF9o dyAqY3RybCwKLQkJCQkJICAgICB1MzIgc3RyZWFtX2lkKQotewotCXN3aXRjaCAoc3RyZWFtX2lk KSB7Ci0JY2FzZSAwOgotCQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9T VFJFQU0wX1RSSUdHRVIsIDB4MSk7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJRFNJX1czMihjdHJs LCBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfU1RSRUFNMV9UUklHR0VSLCAweDEpOwotCQlicmVh azsKLQljYXNlIDI6Ci0JCURTSV9XMzIoY3RybCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX1NU UkVBTTJfVFJJR0dFUiwgMHgxKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQot Ci0JcHJfZGVidWcoIltEU0lfJWRdIENtZCBUZXN0IHBhdHRlcm4gdHJpZ2dlclxuIiwgY3RybC0+ aW5kZXgpOwotfQotCi12b2lkIGRzaV9jdHJsX2h3X2RsbjBfcGh5X2VycihzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwpCi17Ci0JdTMyIHN0YXR1cyA9IDA7Ci0JLyoKLQkgKiBDbGVhciBvdXQgYW55 IHBoeSBlcnJvcnMgcHJpb3IgdG8gZXhpdGluZyBVTFBTCi0JICogVGhpcyBmaXhlcyBjZXJ0YWlu IGluc3RhbmNlcyB3aGVyZSBwaHkgZG9lcyBub3QgZXhpdAotCSAqIFVMUFMgY2xlYW5seS4gQWxz bywgZG8gbm90IHByaW50IGVycm9yIGR1cmluZyBzdWNoIGNhc2VzLgotCSAqLwotCXN0YXR1cyA9 IERTSV9SMzIoY3RybCwgRFNJX0RMTjBfUEhZX0VSUik7Ci0JaWYgKHN0YXR1cyAmIDB4MDExMTEx KSB7Ci0JCURTSV9XMzIoY3RybCwgRFNJX0RMTjBfUEhZX0VSUiwgc3RhdHVzKTsKLQkJcHJfZXJy KCIlczogcGh5X2Vycl9zdGF0dXMgPSAleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7Ci0JfQotfQot Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9waHlfcmVzZXRfY29uZmlnKHN0cnVjdCBkc2lfY3RybF9o dyAqY3RybCwKLQkJYm9vbCBlbmFibGUpCi17Ci0JdTMyIHJlZyA9IDA7Ci0KLQlyZWcgPSBEU0lf TU1TU19NSVNDX1IzMihjdHJsLCBNTVNTX01JU0NfQ0xBTVBfUkVHX09GRik7Ci0KLQkvKiBNYXNr L3VubWFzayBkaXNhYmxlIFBIWSByZXNldCBiaXQgKi8KLQlpZiAoZW5hYmxlKQotCQlyZWcgfD0g QklUKDMwKTsKLQllbHNlCi0JCXJlZyAmPSB+QklUKDMwKTsKLQotCURTSV9NTVNTX01JU0NfVzMy KGN0cmwsIE1NU1NfTUlTQ19DTEFNUF9SRUdfT0ZGLCByZWcpOwotfQotCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX3JlZy5oIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggYWE0ZDU3NTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfY3RybF9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBA Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAq IG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RTSV9D VFJMX1JFR19IXwotI2RlZmluZSBfRFNJX0NUUkxfUkVHX0hfCi0KLSNkZWZpbmUgRFNJX0hXX1ZF UlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDApCi0jZGVmaW5lIERTSV9D VFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDA0KQotI2RlZmluZSBE U0lfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwOCkKLSNkZWZp bmUgRFNJX0ZJRk9fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMEMpCi0j ZGVmaW5lIERTSV9WSURFT19NT0RFX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDEw KQotI2RlZmluZSBEU0lfVklERU9fTU9ERV9TWU5DX0RBVEFUWVBFICAgICAgICAgICAgICAgKDB4 MDAxNCkKLSNkZWZpbmUgRFNJX1ZJREVPX01PREVfUElYRUxfREFUQVRZUEUgICAgICAgICAgICAg ICgweDAwMTgpCi0jZGVmaW5lIERTSV9WSURFT19NT0RFX0JMQU5LSU5HX0RBVEFUWVBFICAgICAg ICAgICAoMHgwMDFDKQotI2RlZmluZSBEU0lfVklERU9fTU9ERV9EQVRBX0NUUkwgICAgICAgICAg ICAgICAgICAgKDB4MDAyMCkKLSNkZWZpbmUgRFNJX1ZJREVPX01PREVfQUNUSVZFX0ggICAgICAg ICAgICAgICAgICAgICgweDAwMjQpCi0jZGVmaW5lIERTSV9WSURFT19NT0RFX0FDVElWRV9WICAg ICAgICAgICAgICAgICAgICAoMHgwMDI4KQotI2RlZmluZSBEU0lfVklERU9fTU9ERV9UT1RBTCAg ICAgICAgICAgICAgICAgICAgICAgKDB4MDAyQykKLSNkZWZpbmUgRFNJX1ZJREVPX01PREVfSFNZ TkMgICAgICAgICAgICAgICAgICAgICAgICgweDAwMzApCi0jZGVmaW5lIERTSV9WSURFT19NT0RF X1ZTWU5DICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDM0KQotI2RlZmluZSBEU0lfVklERU9f TU9ERV9WU1lOQ19WUE9TICAgICAgICAgICAgICAgICAgKDB4MDAzOCkKLSNkZWZpbmUgRFNJX0NP TU1BTkRfTU9ERV9ETUFfQ1RSTCAgICAgICAgICAgICAgICAgICgweDAwM0MpCi0jZGVmaW5lIERT SV9DT01NQU5EX01PREVfTURQX0NUUkwgICAgICAgICAgICAgICAgICAoMHgwMDQwKQotI2RlZmlu ZSBEU0lfQ09NTUFORF9NT0RFX01EUF9EQ1NfQ01EX0NUUkwgICAgICAgICAgKDB4MDA0NCkKLSNk ZWZpbmUgRFNJX0RNQV9DTURfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNDgp Ci0jZGVmaW5lIERTSV9ETUFfQ01EX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgw MDRDKQotI2RlZmluZSBEU0lfRE1BX0ZJRk9fQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAg KDB4MDA1MCkKLSNkZWZpbmUgRFNJX0RNQV9OVUxMX1BBQ0tFVF9EQVRBICAgICAgICAgICAgICAg ICAgICgweDAwNTQpCi0jZGVmaW5lIERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTBfQ1RSTCAg ICAgICAgICAoMHgwMDU4KQotI2RlZmluZSBEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJFQU0wX1RP VEFMICAgICAgICAgKDB4MDA1QykKLSNkZWZpbmUgRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFN MV9DVFJMICAgICAgICAgICgweDAwNjApCi0jZGVmaW5lIERTSV9DT01NQU5EX01PREVfTURQX1NU UkVBTTFfVE9UQUwgICAgICAgICAoMHgwMDY0KQotI2RlZmluZSBEU0lfQUNLX0VSUl9TVEFUVVMg ICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA2OCkKLSNkZWZpbmUgRFNJX1JEQktfREFUQTAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNkMpCi0jZGVmaW5lIERTSV9SREJLX0RB VEExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDcwKQotI2RlZmluZSBEU0lfUkRC S19EQVRBMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA3NCkKLSNkZWZpbmUgRFNJ X1JEQktfREFUQTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNzgpCi0jZGVmaW5l IERTSV9SREJLX0RBVEFUWVBFMCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDdDKQotI2Rl ZmluZSBEU0lfUkRCS19EQVRBVFlQRTEgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA4MCkK LSNkZWZpbmUgRFNJX1RSSUdfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAw ODQpCi0jZGVmaW5lIERTSV9FWFRfTVVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo MHgwMDg4KQotI2RlZmluZSBEU0lfRVhUX01VWF9URV9QVUxTRV9ERVRFQ1RfQ1RSTCAgICAgICAg ICAgKDB4MDA4QykKLSNkZWZpbmUgRFNJX0NNRF9NT0RFX0RNQV9TV19UUklHR0VSICAgICAgICAg ICAgICAgICgweDAwOTApCi0jZGVmaW5lIERTSV9DTURfTU9ERV9NRFBfU1dfVFJJR0dFUiAgICAg ICAgICAgICAgICAoMHgwMDk0KQotI2RlZmluZSBEU0lfQ01EX01PREVfQlRBX1NXX1RSSUdHRVIg ICAgICAgICAgICAgICAgKDB4MDA5OCkKLSNkZWZpbmUgRFNJX1JFU0VUX1NXX1RSSUdHRVIgICAg ICAgICAgICAgICAgICAgICAgICgweDAwOUMpCi0jZGVmaW5lIERTSV9NSVNSX0NNRF9DVFJMICAg ICAgICAgICAgICAgICAgICAgICAgICAoMHgwMEEwKQotI2RlZmluZSBEU0lfTUlTUl9WSURFT19D VFJMICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDBBNCkKLSNkZWZpbmUgRFNJX0xBTkVfU1RB VFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwQTgpCi0jZGVmaW5lIERTSV9MQU5F X0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMEFDKQotI2RlZmluZSBEU0lf TEFORV9TV0FQX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDBCMCkKLSNkZWZpbmUg RFNJX0RMTjBfUEhZX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwQjQpCi0jZGVm aW5lIERTSV9MUF9USU1FUl9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMEI4KQot I2RlZmluZSBEU0lfSFNfVElNRVJfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDBC QykKLSNkZWZpbmUgRFNJX1RJTUVPVVRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICgw eDAwQzApCi0jZGVmaW5lIERTSV9DTEtPVVRfVElNSU5HX0NUUkwgICAgICAgICAgICAgICAgICAg ICAoMHgwMEM0KQotI2RlZmluZSBEU0lfRU9UX1BBQ0tFVCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKDB4MDBDOCkKLSNkZWZpbmUgRFNJX0VPVF9QQUNLRVRfQ1RSTCAgICAgICAgICAgICAg ICAgICAgICAgICgweDAwQ0MpCi0jZGVmaW5lIERTSV9HRU5FUklDX0VTQ19UWF9UUklHR0VSICAg ICAgICAgICAgICAgICAoMHgwMEQwKQotI2RlZmluZSBEU0lfQ0FNX0JJU1RfQ1RSTCAgICAgICAg ICAgICAgICAgICAgICAgICAgKDB4MDBENCkKLSNkZWZpbmUgRFNJX0NBTV9CSVNUX0ZSQU1FX1NJ WkUgICAgICAgICAgICAgICAgICAgICgweDAwRDgpCi0jZGVmaW5lIERTSV9DQU1fQklTVF9CTE9D S19TSVpFICAgICAgICAgICAgICAgICAgICAoMHgwMERDKQotI2RlZmluZSBEU0lfQ0FNX0JJU1Rf RlJBTUVfQ09ORklHICAgICAgICAgICAgICAgICAgKDB4MDBFMCkKLSNkZWZpbmUgRFNJX0NBTV9C SVNUX0xTRlJfQ1RSTCAgICAgICAgICAgICAgICAgICAgICgweDAwRTQpCi0jZGVmaW5lIERTSV9D QU1fQklTVF9MU0ZSX0lOSVQgICAgICAgICAgICAgICAgICAgICAoMHgwMEU4KQotI2RlZmluZSBE U0lfQ0FNX0JJU1RfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDBFQykKLSNkZWZp bmUgRFNJX0NBTV9CSVNUX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICgweDAwRjApCi0j ZGVmaW5lIERTSV9FUlJfSU5UX01BU0swICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTBD KQotI2RlZmluZSBEU0lfSU5UX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4 MDExMCkKLSNkZWZpbmUgRFNJX0lPQklTVF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgweDAxMTQpCi0jZGVmaW5lIERTSV9TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoMHgwMTE4KQotI2RlZmluZSBEU0lfQ0xLX0NUUkwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKDB4MDExQykKLSNkZWZpbmUgRFNJX0NMS19TVEFUVVMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgweDAxMjApCi0jZGVmaW5lIERTSV9ERUJVR19CVVNfQ1RMICAgICAgICAg ICAgICAgICAgICAgICAgICAoMHgwMTI0KQotI2RlZmluZSBEU0lfREVCVUdfQlVTX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgICAgKDB4MDEyOCkKLSNkZWZpbmUgRFNJX1BIWV9TV19SRVNFVCAg ICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxMkMpCi0jZGVmaW5lIERTSV9BWEkyQUhCX0NU UkwgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTMwKQotI2RlZmluZSBEU0lfTUlTUl9D TURfTURQMF8zMkJJVCAgICAgICAgICAgICAgICAgICAgKDB4MDEzNCkKLSNkZWZpbmUgRFNJX01J U1JfQ01EX01EUDFfMzJCSVQgICAgICAgICAgICAgICAgICAgICgweDAxMzgpCi0jZGVmaW5lIERT SV9NSVNSX0NNRF9ETUFfMzJCSVQgICAgICAgICAgICAgICAgICAgICAoMHgwMTNDKQotI2RlZmlu ZSBEU0lfTUlTUl9WSURFT18zMkJJVCAgICAgICAgICAgICAgICAgICAgICAgKDB4MDE0MCkKLSNk ZWZpbmUgRFNJX0xBTkVfTUlTUl9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxNDQp Ci0jZGVmaW5lIERTSV9MQU5FMF9NSVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgw MTQ4KQotI2RlZmluZSBEU0lfTEFORTFfTUlTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KDB4MDE0QykKLSNkZWZpbmUgRFNJX0xBTkUyX01JU1IgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgweDAxNTApCi0jZGVmaW5lIERTSV9MQU5FM19NSVNSICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoMHgwMTU0KQotI2RlZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DVFJMICAgICAg ICAgICAgICAgICAgKDB4MDE1QykKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fVklERU9f UE9MWSAgICAgICAgICAgICgweDAxNjApCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5fR0VOX1ZJ REVPX0lOSVRfVkFMICAgICAgICAoMHgwMTY0KQotI2RlZmluZSBEU0lfVEVTVF9QQVRURVJOX0dF Tl9DTURfTURQX1NUUkVBTTBfUE9MWSAgKDB4MDE2OCkKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVS Tl9HRU5fQ01EX01EUF9JTklUX1ZBTDAgICAgICgweDAxNkMpCi0jZGVmaW5lIERTSV9URVNUX1BB VFRFUk5fR0VOX0NNRF9NRFBfU1RSRUFNMV9QT0xZICAoMHgwMTcwKQotI2RlZmluZSBEU0lfVEVT VF9QQVRURVJOX0dFTl9DTURfTURQX0lOSVRfVkFMMSAgICAgKDB4MDE3NCkKLSNkZWZpbmUgRFNJ X1RFU1RfUEFUVEVSTl9HRU5fQ01EX0RNQV9QT0xZICAgICAgICAgICgweDAxNzgpCi0jZGVmaW5l IERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9ETUFfSU5JVF9WQUwgICAgICAoMHgwMTdDKQotI2Rl ZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9WSURFT19FTkFCTEUgICAgICAgICAgKDB4MDE4MCkK LSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX1NUUkVBTTBfVFJJR0dFUiAgICgweDAx ODQpCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9TVFJFQU0xX1RSSUdHRVIgICAo MHgwMTg4KQotI2RlZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfTURQX0lOSVRfVkFMMiAg ICAgKDB4MDE4QykKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9TVFJFQU0y X1BPTFkgICgweDAxOTApCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBfU1RS RUFNMl9QT0xZICAoMHgwMTkwKQotI2RlZmluZSBEU0lfQ09NTUFORF9NT0RFX01EUF9JRExFX0NU UkwgICAgICAgICAgICAgKDB4MDE5NCkKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01E X1NUUkVBTTJfVFJJR0dFUiAgICgweDAxOTgpCi0jZGVmaW5lIERTSV9UUEdfTUFJTl9DT05UUk9M ICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTlDKQotI2RlZmluZSBEU0lfVFBHX01BSU5fQ09O VFJPTDIgICAgICAgICAgICAgICAgICAgICAgKDB4MDFBMCkKLSNkZWZpbmUgRFNJX1RQR19WSURF T19DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICgweDAxQTQpCi0jZGVmaW5lIERTSV9UUEdf Q09NUE9ORU5UX0xJTUlUUyAgICAgICAgICAgICAgICAgICAoMHgwMUE4KQotI2RlZmluZSBEU0lf VFBHX1JFQ1RBTkdMRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDFBQykKLSNkZWZpbmUg RFNJX1RQR19CTEFDS19XSElURV9QQVRURVJOX0ZSQU1FUyAgICAgICAgICgweDAxQjApCi0jZGVm aW5lIERTSV9UUEdfUkdCX01BUFBJTkcgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMUI0KQot I2RlZmluZSBEU0lfQ09NTUFORF9NT0RFX01EUF9DVFJMMiAgICAgICAgICAgICAgICAgKDB4MDFC OCkKLSNkZWZpbmUgRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMl9DVFJMICAgICAgICAgICgw eDAxQkMpCi0jZGVmaW5lIERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTJfVE9UQUwgICAgICAg ICAoMHgwMUMwKQotI2RlZmluZSBEU0lfTUlTUl9DTURfTURQMl84QklUICAgICAgICAgICAgICAg ICAgICAgKDB4MDFDNCkKLSNkZWZpbmUgRFNJX01JU1JfQ01EX01EUDJfMzJCSVQgICAgICAgICAg ICAgICAgICAgICgweDAxQzgpCi0jZGVmaW5lIERTSV9WQklGX0NUUkwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoMHgwMUNDKQotI2RlZmluZSBEU0lfQUVTX0NUUkwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKDB4MDFEMCkKLSNkZWZpbmUgRFNJX1JEQktfREFUQV9DVFJMICAg ICAgICAgICAgICAgICAgICAgICAgICgweDAxRDQpCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5f R0VOX0NNRF9ETUFfSU5JVF9WQUwyICAgICAoMHgwMUQ4KQotI2RlZmluZSBEU0lfVFBHX0RNQV9G SUZPX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgKDB4MDFEQykKLSNkZWZpbmUgRFNJX1RQR19E TUFfRklGT19XUklURV9UUklHR0VSICAgICAgICAgICAgICgweDAxRTApCi0jZGVmaW5lIERTSV9E U0lfVElNSU5HX0ZMVVNIICAgICAgICAgICAgICAgICAgICAgICAoMHgwMUU0KQotI2RlZmluZSBE U0lfRFNJX1RJTUlOR19EQl9NT0RFICAgICAgICAgICAgICAgICAgICAgKDB4MDFFOCkKLSNkZWZp bmUgRFNJX1RQR19ETUFfRklGT19SRVNFVCAgICAgICAgICAgICAgICAgICAgICgweDAxRUMpCi0j ZGVmaW5lIERTSV9TQ1JBVENIX1JFR0lTVEVSXzAgICAgICAgICAgICAgICAgICAgICAoMHgwMUYw KQotI2RlZmluZSBEU0lfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4 MDFGNCkKLSNkZWZpbmUgRFNJX1NDUkFUQ0hfUkVHSVNURVJfMSAgICAgICAgICAgICAgICAgICAg ICgweDAxRjgpCi0jZGVmaW5lIERTSV9TQ1JBVENIX1JFR0lTVEVSXzIgICAgICAgICAgICAgICAg ICAgICAoMHgwMUZDKQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX0NUUkwgICAgICAgICAg ICAgICAgICAgKDB4MDIwMCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QSVBFX0RFTEFZ ICAgICAgICAgICAgICgweDAyMDQpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUElQRV9E RUxBWTIgICAgICAgICAgICAoMHgwMjA4KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BM TF9ERUxBWSAgICAgICAgICAgICAgKDB4MDIwQykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVT SF9TVEFUVVMgICAgICAgICAgICAgICAgICgweDAyMTApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JF RlJFU0hfUExMX0NUUkwwICAgICAgICAgICAgICAoMHgwMjE0KQotI2RlZmluZSBEU0lfRFlOQU1J Q19SRUZSRVNIX1BMTF9DVFJMMSAgICAgICAgICAgICAgKDB4MDIxOCkKLSNkZWZpbmUgRFNJX0RZ TkFNSUNfUkVGUkVTSF9QTExfQ1RSTDIgICAgICAgICAgICAgICgweDAyMUMpCi0jZGVmaW5lIERT SV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwzICAgICAgICAgICAgICAoMHgwMjIwKQotI2RlZmlu ZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMNCAgICAgICAgICAgICAgKDB4MDIyNCkKLSNk ZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDUgICAgICAgICAgICAgICgweDAyMjgp Ci0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkw2ICAgICAgICAgICAgICAoMHgw MjJDKQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMNyAgICAgICAgICAgICAg KDB4MDIzMCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDggICAgICAgICAg ICAgICgweDAyMzQpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkw5ICAgICAg ICAgICAgICAoMHgwMjM4KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMTAg ICAgICAgICAgICAgKDB4MDIzQykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RS TDExICAgICAgICAgICAgICgweDAyNDApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExM X0NUUkwxMiAgICAgICAgICAgICAoMHgwMjQ0KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNI X1BMTF9DVFJMMTMgICAgICAgICAgICAgKDB4MDI0OCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVG UkVTSF9QTExfQ1RSTDE0ICAgICAgICAgICAgICgweDAyNEMpCi0jZGVmaW5lIERTSV9EWU5BTUlD X1JFRlJFU0hfUExMX0NUUkwxNSAgICAgICAgICAgICAoMHgwMjUwKQotI2RlZmluZSBEU0lfRFlO QU1JQ19SRUZSRVNIX1BMTF9DVFJMMTYgICAgICAgICAgICAgKDB4MDI1NCkKLSNkZWZpbmUgRFNJ X0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDE3ICAgICAgICAgICAgICgweDAyNTgpCi0jZGVmaW5l IERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwxOCAgICAgICAgICAgICAoMHgwMjVDKQotI2Rl ZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMTkgICAgICAgICAgICAgKDB4MDI2MCkK LSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDIwICAgICAgICAgICAgICgweDAy NjQpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwyMSAgICAgICAgICAgICAo MHgwMjY4KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMjIgICAgICAgICAg ICAgKDB4MDI2QykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDIzICAgICAg ICAgICAgICgweDAyNzApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwyNCAg ICAgICAgICAgICAoMHgwMjc0KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJM MjUgICAgICAgICAgICAgKDB4MDI3OCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExf Q1RSTDI2ICAgICAgICAgICAgICgweDAyN0MpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hf UExMX0NUUkwyNyAgICAgICAgICAgICAoMHgwMjgwKQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZS RVNIX1BMTF9DVFJMMjggICAgICAgICAgICAgKDB4MDI4NCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNf UkVGUkVTSF9QTExfQ1RSTDI5ICAgICAgICAgICAgICgweDAyODgpCi0jZGVmaW5lIERTSV9EWU5B TUlDX1JFRlJFU0hfUExMX0NUUkwzMCAgICAgICAgICAgICAoMHgwMjhDKQotI2RlZmluZSBEU0lf RFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMzEgICAgICAgICAgICAgKDB4MDI5MCkKLSNkZWZpbmUg RFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfVVBQRVJfQUREUiAgICAgICAgICgweDAyOTQpCi0jZGVm aW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX1VQUEVSX0FERFIyICAgICAgICAoMHgwMjk4KQot I2RlZmluZSBEU0lfVklERU9fQ09NUFJFU1NJT05fTU9ERV9DVFJMICAgICAgICAgICAgKDB4MDJB MCkKLSNkZWZpbmUgRFNJX1ZJREVPX0NPTVBSRVNTSU9OX01PREVfQ1RSTDIgICAgICAgICAgICgw eDAyQTQpCi0jZGVmaW5lIERTSV9DT01NQU5EX0NPTVBSRVNTSU9OX01PREVfQ1RSTCAgICAgICAg ICAoMHgwMkE4KQotI2RlZmluZSBEU0lfQ09NTUFORF9DT01QUkVTU0lPTl9NT0RFX0NUUkwyICAg ICAgICAgKDB4MDJBQykKLSNkZWZpbmUgRFNJX0NPTU1BTkRfQ09NUFJFU1NJT05fTU9ERV9DVFJM MyAgICAgICAgICgweDAyQjApCi0jZGVmaW5lIERTSV9DT01NQU5EX01PREVfTlVMTF9JTlNFUlRJ T05fQ1RSTCAgICAgICAoMHgwMkI0KQotI2RlZmluZSBEU0lfUkVBRF9CQUNLX0RJU0FCTEVfU1RB VFVTICAgICAgICAgICAgICAgKDB4MDJCOCkKLSNkZWZpbmUgRFNJX0RFU0tFV19DVFJMICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgweDAyQkMpCi0jZGVmaW5lIERTSV9ERVNLRVdfREVMQVlf Q1RSTCAgICAgICAgICAgICAgICAgICAgICAoMHgwMkMwKQotI2RlZmluZSBEU0lfREVTS0VXX1NX X1RSSUdHRVIgICAgICAgICAgICAgICAgICAgICAgKDB4MDJDNCkKLSNkZWZpbmUgRFNJX0RFQlVH X0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAyQzgpCi0jZGVmaW5lIERTSV9T RUNVUkVfRElTUExBWV9TVEFUVVMgICAgICAgICAgICAgICAgICAoMHgwMkNDKQotI2RlZmluZSBE U0lfU0VDVVJFX0RJU1BMQVlfQkxPQ0tfQ09NTUFORF9DT0xPUiAgICAgKDB4MDJEMCkKLSNkZWZp bmUgRFNJX1NFQ1VSRV9ESVNQTEFZX0JMT0NLX1ZJREVPX0NPTE9SICAgICAgICgweDAyRDQpCi0j ZGVmaW5lIERTSV9MT0dJQ0FMX0xBTkVfU1dBUF9DVFJMICAgICAgICAgICAgICAgICAoMHgwMzEw KQotCi0KLSNlbmRpZiAvKiBfRFNJX0NUUkxfUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kZWZzLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9kZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAy YzhkNzYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf ZGVmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9EU0lfREVGU19IXwotI2RlZmluZSBfRFNJX0RF RlNfSF8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9taXBp X2RzaS5oPgotI2luY2x1ZGUgIm1zbV9kcnYuaCIKLQotI2RlZmluZSBEU0lfSF9UT1RBTCh0KSAo KCh0KS0+aF9hY3RpdmUpICsgKCh0KS0+aF9iYWNrX3BvcmNoKSArIFwKLQkJCSgodCktPmhfc3lu Y193aWR0aCkgKyAoKHQpLT5oX2Zyb250X3BvcmNoKSkKLQotI2RlZmluZSBEU0lfVl9UT1RBTCh0 KSAoKCh0KS0+dl9hY3RpdmUpICsgKCh0KS0+dl9iYWNrX3BvcmNoKSArIFwKLQkJCSgodCktPnZf c3luY193aWR0aCkgKyAoKHQpLT52X2Zyb250X3BvcmNoKSkKLQotI2RlZmluZSBEU0lfSF9UT1RB TF9EU0ModCkgXAotCSh7XAotCQl1NjQgdmFsdWU7XAotCQlpZiAoKHQpLT5kc2NfZW5hYmxlZCAm JiAodCktPmRzYylcCi0JCQl2YWx1ZSA9ICh0KS0+ZHNjLT5wY2xrX3Blcl9saW5lO1wKLQkJZWxz ZVwKLQkJCXZhbHVlID0gKHQpLT5oX2FjdGl2ZTtcCi0JCXZhbHVlID0gdmFsdWUgKyAodCktPmhf YmFja19wb3JjaCArICh0KS0+aF9zeW5jX3dpZHRoICtcCi0JCQkodCktPmhfZnJvbnRfcG9yY2g7 XAotCQl2YWx1ZTtcCi0JfSkKLQotI2RlZmluZSBEU0lfREVCVUdfTkFNRV9MRU4JCTMyCi0vKioK LSAqIGVudW0gZHNpX3BpeGVsX2Zvcm1hdCAtIERTSSBwaXhlbCBmb3JtYXRzCi0gKiBARFNJX1BJ WEVMX0ZPUk1BVF9SR0I1NjU6Ci0gKiBARFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjY6Ci0gKiBARFNJ X1BJWEVMX0ZPUk1BVF9SR0I2NjZfTE9PU0U6Ci0gKiBARFNJX1BJWEVMX0ZPUk1BVF9SR0I4ODg6 Ci0gKiBARFNJX1BJWEVMX0ZPUk1BVF9SR0IxMTE6Ci0gKiBARFNJX1BJWEVMX0ZPUk1BVF9SR0Iz MzI6Ci0gKiBARFNJX1BJWEVMX0ZPUk1BVF9SR0I0NDQ6Ci0gKiBARFNJX1BJWEVMX0ZPUk1BVF9N QVg6Ci0gKi8KLWVudW0gZHNpX3BpeGVsX2Zvcm1hdCB7Ci0JRFNJX1BJWEVMX0ZPUk1BVF9SR0I1 NjUgPSAwLAotCURTSV9QSVhFTF9GT1JNQVRfUkdCNjY2LAotCURTSV9QSVhFTF9GT1JNQVRfUkdC NjY2X0xPT1NFLAotCURTSV9QSVhFTF9GT1JNQVRfUkdCODg4LAotCURTSV9QSVhFTF9GT1JNQVRf UkdCMTExLAotCURTSV9QSVhFTF9GT1JNQVRfUkdCMzMyLAotCURTSV9QSVhFTF9GT1JNQVRfUkdC NDQ0LAotCURTSV9QSVhFTF9GT1JNQVRfTUFYCi19OwotCi0vKioKLSAqIGVudW0gZHNpX29wX21v ZGUgLSBkc2kgb3BlcmF0aW9uIG1vZGUKLSAqIEBEU0lfT1BfVklERU9fTU9ERTogRFNJIHZpZGVv IG1vZGUgb3BlcmF0aW9uCi0gKiBARFNJX09QX0NNRF9NT0RFOiAgIERTSSBDb21tYW5kIG1vZGUg b3BlcmF0aW9uCi0gKiBARFNJX09QX01PREVfTUFYOgotICovCi1lbnVtIGRzaV9vcF9tb2RlIHsK LQlEU0lfT1BfVklERU9fTU9ERSA9IDAsCi0JRFNJX09QX0NNRF9NT0RFLAotCURTSV9PUF9NT0RF X01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9tb2RlX2ZsYWdzIC0gZmxhZ3MgdG8gc2lnbmFs IG90aGVyIGRybSBjb21wb25lbnRzIHZpYSBwcml2YXRlIGZsYWdzCi0gKiBARFNJX01PREVfRkxB R19TRUFNTEVTUzoJU2VhbWxlc3MgdHJhbnNpdGlvbiByZXF1ZXN0ZWQgYnkgdXNlcgotICogQERT SV9NT0RFX0ZMQUdfREZQUzoJCVNlYW1sZXNzIHRyYW5zaXRpb24gaXMgRHluYW1pY0ZQUwotICog QERTSV9NT0RFX0ZMQUdfVkJMQU5LX1BSRV9NT0RFU0VUOglUcmFuc2l0aW9uIG5lZWRzIFZCTEFO SyBiZWZvcmUgTW9kZXNldAotICogQERTSV9NT0RFX0ZMQUdfRE1TOiBTZWFtbGVzcyB0cmFuc2l0 aW9uIGlzIGR5bmFtaWMgbW9kZSBzd2l0Y2gKLSAqIEBEU0lfTU9ERV9GTEFHX1ZSUjogU2VhbWxl c3MgdHJhbnNpdGlvbiBpcyBEeW5hbWljRlBTLgotICogICAgICAgICAgICAgICAgICAgICBOZXcg dGltaW5nIHZhbHVlcyBhcmUgc2VudCBmcm9tIERBTC4KLSAqLwotZW51bSBkc2lfbW9kZV9mbGFn cyB7Ci0JRFNJX01PREVfRkxBR19TRUFNTEVTUwkJCT0gQklUKDApLAotCURTSV9NT0RFX0ZMQUdf REZQUwkJCT0gQklUKDEpLAotCURTSV9NT0RFX0ZMQUdfVkJMQU5LX1BSRV9NT0RFU0VUCT0gQklU KDIpLAotCURTSV9NT0RFX0ZMQUdfRE1TCQkJPSBCSVQoMyksCi0JRFNJX01PREVfRkxBR19WUlIJ CQk9IEJJVCg0KSwKLX07Ci0KLS8qKgotICogZW51bSBkc2lfbG9naWNhbF9sYW5lIC0gZHNpIGxv Z2ljYWwgbGFuZXMKLSAqIEBEU0lfTE9HSUNBTF9MQU5FXzA6ICAgICBMb2dpY2FsIGxhbmUgMAot ICogQERTSV9MT0dJQ0FMX0xBTkVfMTogICAgIExvZ2ljYWwgbGFuZSAxCi0gKiBARFNJX0xPR0lD QUxfTEFORV8yOiAgICAgTG9naWNhbCBsYW5lIDIKLSAqIEBEU0lfTE9HSUNBTF9MQU5FXzM6ICAg ICBMb2dpY2FsIGxhbmUgMwotICogQERTSV9MT0dJQ0FMX0NMT0NLX0xBTkU6IENsb2NrIGxhbmUK LSAqIEBEU0lfTEFORV9NQVg6ICAgICAgICAgICBNYXhpbXVtIGxhbmVzIHN1cHBvcnRlZAotICov Ci1lbnVtIGRzaV9sb2dpY2FsX2xhbmUgewotCURTSV9MT0dJQ0FMX0xBTkVfMCA9IDAsCi0JRFNJ X0xPR0lDQUxfTEFORV8xLAotCURTSV9MT0dJQ0FMX0xBTkVfMiwKLQlEU0lfTE9HSUNBTF9MQU5F XzMsCi0JRFNJX0xPR0lDQUxfQ0xPQ0tfTEFORSwKLQlEU0lfTEFORV9NQVgKLX07Ci0KLS8qKgot ICogZW51bSBkc2lfZGF0YV9sYW5lcyAtIEJJVCBtYXAgZm9yIERTSSBkYXRhIGxhbmVzCi0gKiBU aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGFjdGl2ZSBEU0kgZGF0YSBsYW5lcyBmb3IKLSAq IHZhcmlvdXMgb3BlcmF0aW9ucyBsaWtlIERTSSBkYXRhIGxhbmUgZW5hYmxlL1VMUFMvY2xhbXAK LSAqIGNvbmZpZ3VyYXRpb25zLgotICogQERTSV9EQVRBX0xBTkVfMDogQklUKERTSV9MT0dJQ0FM X0xBTkVfMCkKLSAqIEBEU0lfREFUQV9MQU5FXzE6IEJJVChEU0lfTE9HSUNBTF9MQU5FXzEpCi0g KiBARFNJX0RBVEFfTEFORV8yOiBCSVQoRFNJX0xPR0lDQUxfTEFORV8yKQotICogQERTSV9EQVRB X0xBTkVfMzogQklUKERTSV9MT0dJQ0FMX0xBTkVfMykKLSAqIEBEU0lfQ0xPQ0tfTEFORTogIEJJ VChEU0lfTE9HSUNBTF9DTE9DS19MQU5FKQotICovCi1lbnVtIGRzaV9kYXRhX2xhbmVzIHsKLQlE U0lfREFUQV9MQU5FXzAgPSBCSVQoRFNJX0xPR0lDQUxfTEFORV8wKSwKLQlEU0lfREFUQV9MQU5F XzEgPSBCSVQoRFNJX0xPR0lDQUxfTEFORV8xKSwKLQlEU0lfREFUQV9MQU5FXzIgPSBCSVQoRFNJ X0xPR0lDQUxfTEFORV8yKSwKLQlEU0lfREFUQV9MQU5FXzMgPSBCSVQoRFNJX0xPR0lDQUxfTEFO RV8zKSwKLQlEU0lfQ0xPQ0tfTEFORSAgPSBCSVQoRFNJX0xPR0lDQUxfQ0xPQ0tfTEFORSkKLX07 Ci0KLS8qKgotICogZW51bSBkc2lfcGh5X2RhdGFfbGFuZXMgLSBkc2kgcGh5c2ljYWwgbGFuZXMK LSAqIHVzZWQgZm9yIERTSSBsb2dpY2FsIHRvIHBoeXNpY2FsIGxhbmUgbWFwcGluZwotICogQERT SV9QSFlTSUNBTF9MQU5FX0lOVkFMSUQ6IFBoeXNpY2FsIGxhbmUgdmFsaWQvaW52YWxpZAotICog QERTSV9QSFlTSUNBTF9MQU5FXzA6IFBoeXNpY2FsIGxhbmUgMAotICogQERTSV9QSFlTSUNBTF9M QU5FXzE6IFBoeXNpY2FsIGxhbmUgMQotICogQERTSV9QSFlTSUNBTF9MQU5FXzI6IFBoeXNpY2Fs IGxhbmUgMgotICogQERTSV9QSFlTSUNBTF9MQU5FXzM6IFBoeXNpY2FsIGxhbmUgMwotICovCi1l bnVtIGRzaV9waHlfZGF0YV9sYW5lcyB7Ci0JRFNJX1BIWVNJQ0FMX0xBTkVfSU5WQUxJRCA9IDAs Ci0JRFNJX1BIWVNJQ0FMX0xBTkVfMCA9IEJJVCgwKSwKLQlEU0lfUEhZU0lDQUxfTEFORV8xID0g QklUKDEpLAotCURTSV9QSFlTSUNBTF9MQU5FXzIgPSBCSVQoMiksCi0JRFNJX1BIWVNJQ0FMX0xB TkVfMyAgPSBCSVQoMykKLX07Ci0KLWVudW0gZHNpX2xhbmVfbWFwX3R5cGVfdjEgewotCURTSV9M QU5FX01BUF8wMTIzLAotCURTSV9MQU5FX01BUF8zMDEyLAotCURTSV9MQU5FX01BUF8yMzAxLAot CURTSV9MQU5FX01BUF8xMjMwLAotCURTSV9MQU5FX01BUF8wMzIxLAotCURTSV9MQU5FX01BUF8x MDMyLAotCURTSV9MQU5FX01BUF8yMTAzLAotCURTSV9MQU5FX01BUF8zMjEwLAotfTsKLQotLyoq Ci0gKiBsYW5lX21hcDogRFNJIGxvZ2ljYWwgPC0+IHBoeXNpY2FsIGxhbmUgbWFwcGluZwotICog bGFuZV9tYXBfdjE6IExhbmUgbWFwcGluZyBmb3IgRFNJIGNvbnRyb2xsZXJzIDwgdjIuMAotICog bGFuZV9tYXBfdjI6IExhbmUgbWFwcGluZyBmb3IgRFNJIGNvbnRyb2xsZXJzID49IDIuMAotICov Ci1zdHJ1Y3QgZHNpX2xhbmVfbWFwIHsKLQllbnVtIGRzaV9sYW5lX21hcF90eXBlX3YxIGxhbmVf bWFwX3YxOwotCXU4IGxhbmVfbWFwX3YyW0RTSV9MQU5FX01BWCAtIDFdOwotfTsKLQotLyoqCi0g KiBlbnVtIGRzaV90cmlnZ2VyX3R5cGUgLSBkc2kgdHJpZ2dlciB0eXBlCi0gKiBARFNJX1RSSUdH RVJfTk9ORTogICAgIE5vIHRyaWdnZXIuCi0gKiBARFNJX1RSSUdHRVJfVEU6ICAgICAgIFRFIHRy aWdnZXIuCi0gKiBARFNJX1RSSUdHRVJfU0VPRjogICAgIFN0YXJ0IG9yIEVuZCBvZiBmcmFtZS4K LSAqIEBEU0lfVFJJR0dFUl9TVzogICAgICAgU29mdHdhcmUgdHJpZ2dlci4KLSAqIEBEU0lfVFJJ R0dFUl9TV19TRU9GOiAgU29mdHdhcmUgdHJpZ2dlciBhbmQgc3RhcnQvZW5kIG9mIGZyYW1lLgot ICogQERTSV9UUklHR0VSX1NXX1RFOiAgICBTb2Z0d2FyZSBhbmQgVEUgdHJpZ2dlcnMuCi0gKiBA RFNJX1RSSUdHRVJfTUFYOiAgICAgIE1heCB0cmlnZ2VyIHZhbHVlcy4KLSAqLwotZW51bSBkc2lf dHJpZ2dlcl90eXBlIHsKLQlEU0lfVFJJR0dFUl9OT05FID0gMCwKLQlEU0lfVFJJR0dFUl9URSwK LQlEU0lfVFJJR0dFUl9TRU9GLAotCURTSV9UUklHR0VSX1NXLAotCURTSV9UUklHR0VSX1NXX1NF T0YsCi0JRFNJX1RSSUdHRVJfU1dfVEUsCi0JRFNJX1RSSUdHRVJfTUFYCi19OwotCi0vKioKLSAq IGVudW0gZHNpX2NvbG9yX3N3YXBfbW9kZSAtIGNvbG9yIHN3YXAgbW9kZQotICogQERTSV9DT0xP Ul9TV0FQX1JHQjoKLSAqIEBEU0lfQ09MT1JfU1dBUF9SQkc6Ci0gKiBARFNJX0NPTE9SX1NXQVBf QkdSOgotICogQERTSV9DT0xPUl9TV0FQX0JSRzoKLSAqIEBEU0lfQ09MT1JfU1dBUF9HUkI6Ci0g KiBARFNJX0NPTE9SX1NXQVBfR0JSOgotICovCi1lbnVtIGRzaV9jb2xvcl9zd2FwX21vZGUgewot CURTSV9DT0xPUl9TV0FQX1JHQiA9IDAsCi0JRFNJX0NPTE9SX1NXQVBfUkJHLAotCURTSV9DT0xP Ul9TV0FQX0JHUiwKLQlEU0lfQ09MT1JfU1dBUF9CUkcsCi0JRFNJX0NPTE9SX1NXQVBfR1JCLAot CURTSV9DT0xPUl9TV0FQX0dCUgotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9kZnBzX3R5cGUgLSBE eW5hbWljIEZQUyBzdXBwb3J0IHR5cGUKLSAqIEBEU0lfREZQU19OT05FOiAgICAgICAgICAgRHlu YW1pYyBGUFMgaXMgbm90IHN1cHBvcnRlZC4KLSAqIEBEU0lfREZQU19TVVNQRU5EX1JFU1VNRToK LSAqIEBEU0lfREZQU19JTU1FRElBVEVfQ0xLOgotICogQERTSV9ERlBTX0lNTUVESUFURV9IRlA6 Ci0gKiBARFNJX0RGUFNfSU1NRURJQVRFX1ZGUDoKLSAqIEBEU0lfRFBGU19NQVg6Ci0gKi8KLWVu dW0gZHNpX2RmcHNfdHlwZSB7Ci0JRFNJX0RGUFNfTk9ORSA9IDAsCi0JRFNJX0RGUFNfU1VTUEVO RF9SRVNVTUUsCi0JRFNJX0RGUFNfSU1NRURJQVRFX0NMSywKLQlEU0lfREZQU19JTU1FRElBVEVf SEZQLAotCURTSV9ERlBTX0lNTUVESUFURV9WRlAsCi0JRFNJX0RGUFNfTUFYCi19OwotCi0vKioK LSAqIGVudW0gZHNpX2NtZF9zZXRfdHlwZSAgLSBEU0kgY29tbWFuZCBzZXQgdHlwZQotICogQERT SV9DTURfU0VUX1BSRV9PTjoJICAgICAgICAgICAgICAgICAgIFBhbmVsIHByZSBvbgotICogQERT SV9DTURfU0VUX09OOiAgICAgICAgICAgICAgICAgICAgICAgIFBhbmVsIG9uCi0gKiBARFNJX0NN RF9TRVRfUE9TVF9PTjogICAgICAgICAgICAgICAgICAgUGFuZWwgcG9zdCBvbgotICogQERTSV9D TURfU0VUX1BSRV9PRkY6ICAgICAgICAgICAgICAgICAgIFBhbmVsIHByZSBvZmYKLSAqIEBEU0lf Q01EX1NFVF9PRkY6ICAgICAgICAgICAgICAgICAgICAgICBQYW5lbCBvZmYKLSAqIEBEU0lfQ01E X1NFVF9QT1NUX09GRjogICAgICAgICAgICAgICAgICBQYW5lbCBwb3N0IG9mZgotICogQERTSV9D TURfU0VUX1BSRV9SRVNfU1dJVENIOiAgICAgICAgICAgIFByZSByZXNvbHV0aW9uIHN3aXRjaAot ICogQERTSV9DTURfU0VUX1JFU19TV0lUQ0g6ICAgICAgICAgICAgICAgIFJlc29sdXRpb24gc3dp dGNoCi0gKiBARFNJX0NNRF9TRVRfUE9TVF9SRVNfU1dJVENIOiAgICAgICAgICAgUG9zdCByZXNv bHV0aW9uIHN3aXRjaAotICogQERTSV9DTURfU0VUX0NNRF9UT19WSURfU1dJVENIOiAgICAgICAg IENtZCB0byB2aWRlbyBtb2RlIHN3aXRjaAotICogQERTSV9DTURfU0VUX1BPU1RfQ01EX1RPX1ZJ RF9TV0lUQ0g6ICAgIFBvc3QgY21kIHRvIHZpZCBzd2l0Y2gKLSAqIEBEU0lfQ01EX1NFVF9WSURf VE9fQ01EX1NXSVRDSDogICAgICAgICBWaWRlbyB0byBjbWQgbW9kZSBzd2l0Y2gKLSAqIEBEU0lf Q01EX1NFVF9QT1NUX1ZJRF9UT19DTURfU1dJVENIOiAgICBQb3N0IHZpZCB0byBjbWQgc3dpdGNo Ci0gKiBARFNJX0NNRF9TRVRfUEFORUxfU1RBVFVTOiAgICAgICAgICAgICAgUGFuZWwgc3RhdHVz Ci0gKiBARFNJX0NNRF9TRVRfTFAxOiAgICAgICAgICAgICAgICAgICAgICAgTG93IHBvd2VyIG1v ZGUgMQotICogQERTSV9DTURfU0VUX0xQMjogICAgICAgICAgICAgICAgICAgICAgIExvdyBwb3dl ciBtb2RlIDIKLSAqIEBEU0lfQ01EX1NFVF9OT0xQOiAgICAgICAgICAgICAgICAgICAgICBMb3cg cG93ZXIgbW9kZSBkaXNhYmxlCi0gKiBARFNJX0NNRF9TRVRfUFBTOiAgICAgICAgICAgICAgICAg ICAgICAgRFNDIFBQUyBjb21tYW5kCi0gKiBARFNJX0NNRF9TRVRfVElNSU5HX1NXSVRDSDogICAg ICAgICAgICAgVGltaW5nIHN3aXRjaAotICogQERTSV9DTURfU0VUX1BPU1RfVElNSU5HX1NXSVRD SDogICAgICAgIFBvc3QgdGltaW5nIHN3aXRjaAotICogQERTSV9DTURfU0VUX01BWAotICovCi1l bnVtIGRzaV9jbWRfc2V0X3R5cGUgewotCURTSV9DTURfU0VUX1BSRV9PTiA9IDAsCi0JRFNJX0NN RF9TRVRfT04sCi0JRFNJX0NNRF9TRVRfUE9TVF9PTiwKLQlEU0lfQ01EX1NFVF9QUkVfT0ZGLAot CURTSV9DTURfU0VUX09GRiwKLQlEU0lfQ01EX1NFVF9QT1NUX09GRiwKLQlEU0lfQ01EX1NFVF9Q UkVfUkVTX1NXSVRDSCwKLQlEU0lfQ01EX1NFVF9SRVNfU1dJVENILAotCURTSV9DTURfU0VUX1BP U1RfUkVTX1NXSVRDSCwKLQlEU0lfQ01EX1NFVF9DTURfVE9fVklEX1NXSVRDSCwKLQlEU0lfQ01E X1NFVF9QT1NUX0NNRF9UT19WSURfU1dJVENILAotCURTSV9DTURfU0VUX1ZJRF9UT19DTURfU1dJ VENILAotCURTSV9DTURfU0VUX1BPU1RfVklEX1RPX0NNRF9TV0lUQ0gsCi0JRFNJX0NNRF9TRVRf UEFORUxfU1RBVFVTLAotCURTSV9DTURfU0VUX0xQMSwKLQlEU0lfQ01EX1NFVF9MUDIsCi0JRFNJ X0NNRF9TRVRfTk9MUCwKLQlEU0lfQ01EX1NFVF9QUFMsCi0JRFNJX0NNRF9TRVRfVElNSU5HX1NX SVRDSCwKLQlEU0lfQ01EX1NFVF9QT1NUX1RJTUlOR19TV0lUQ0gsCi0JRFNJX0NNRF9TRVRfTUFY Ci19OwotCi0vKioKLSAqIGVudW0gZHNpX2NtZF9zZXRfc3RhdGUgLSBjb21tYW5kIHNldCBzdGF0 ZQotICogQERTSV9DTURfU0VUX1NUQVRFX0xQOiAgIGRzaSBsb3cgcG93ZXIgbW9kZQotICogQERT SV9DTURfU0VUX1NUQVRFX0hTOiAgIGRzaSBoaWdoIHNwZWVkIG1vZGUKLSAqIEBEU0lfQ01EX1NF VF9TVEFURV9NQVgKLSAqLwotZW51bSBkc2lfY21kX3NldF9zdGF0ZSB7Ci0JRFNJX0NNRF9TRVRf U1RBVEVfTFAgPSAwLAotCURTSV9DTURfU0VUX1NUQVRFX0hTLAotCURTSV9DTURfU0VUX1NUQVRF X01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9waHlfdHlwZSAtIERTSSBwaHkgdHlwZXMKLSAq IEBEU0lfUEhZX1RZUEVfRFBIWToKLSAqIEBEU0lfUEhZX1RZUEVfQ1BIWToKLSAqLwotZW51bSBk c2lfcGh5X3R5cGUgewotCURTSV9QSFlfVFlQRV9EUEhZLAotCURTSV9QSFlfVFlQRV9DUEhZCi19 OwotCi0vKioKLSAqIGVudW0gZHNpX3RlX21vZGUgLSBkc2kgdGUgc291cmNlCi0gKiBARFNJX1RF X09OX0RBVEFfTElOSzogICAgVEUgcmVhZCBmcm9tIERTSSBsaW5rCi0gKiBARFNJX1RFX09OX0VY VF9QSU46ICAgICAgVEUgc2lnbmFsIG9uIGFuIGV4dGVybmFsIEdQSU8KLSAqLwotZW51bSBkc2lf dGVfbW9kZSB7Ci0JRFNJX1RFX09OX0RBVEFfTElOSyA9IDAsCi0JRFNJX1RFX09OX0VYVF9QSU4s Ci19OwotCi0vKioKLSAqIGVudW0gZHNpX3ZpZGVvX3RyYWZmaWNfbW9kZSAtIHZpZGVvIG1vZGUg cGl4ZWwgdHJhbnNtaXNzaW9uIHR5cGUKLSAqIEBEU0lfVklERU9fVFJBRkZJQ19TWU5DX1BVTFNF UzogICAgICAgTm9uLWJ1cnN0IG1vZGUgd2l0aCBzeW5jIHB1bHNlcy4KLSAqIEBEU0lfVklERU9f VFJBRkZJQ19TWU5DX1NUQVJUX0VWRU5UUzogTm9uLWJ1cnN0IG1vZGUgd2l0aCBzeW5jIHN0YXJ0 IGV2ZW50cy4KLSAqIEBEU0lfVklERU9fVFJBRkZJQ19CVVJTVF9NT0RFOiAgICAgICAgQnVyc3Qg bW9kZSB1c2luZyBzeW5jIHN0YXJ0IGV2ZW50cy4KLSAqLwotZW51bSBkc2lfdmlkZW9fdHJhZmZp Y19tb2RlIHsKLQlEU0lfVklERU9fVFJBRkZJQ19TWU5DX1BVTFNFUyA9IDAsCi0JRFNJX1ZJREVP X1RSQUZGSUNfU1lOQ19TVEFSVF9FVkVOVFMsCi0JRFNJX1ZJREVPX1RSQUZGSUNfQlVSU1RfTU9E RSwKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9jbWRfZGVzYyAtIGRlc2NyaXB0aW9uIG9mIGEg ZHNpIGNvbW1hbmQKLSAqIEBtc2c6CQlkc2kgbWlwaSBtc2cgcGFja2V0Ci0gKiBAbGFzdF9jb21t YW5kOiAgIGluZGljYXRlcyB3aGV0aGVyIHRoZSBjbWQgaXMgdGhlIGxhc3Qgb25lIHRvIHNlbmQK LSAqIEBwb3N0X3dhaXRfbXM6ICAgcG9zdCB3YWl0IGR1cmF0aW9uCi0gKi8KLXN0cnVjdCBkc2lf Y21kX2Rlc2MgewotCXN0cnVjdCBtaXBpX2RzaV9tc2cgbXNnOwotCWJvb2wgbGFzdF9jb21tYW5k OwotCXUzMiAgcG9zdF93YWl0X21zOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX3BhbmVsX2Nt ZF9zZXQgLSBjb21tYW5kIHNldCBvZiB0aGUgcGFuZWwKLSAqIEB0eXBlOiAgICAgIHR5cGUgb2Yg dGhlIGNvbW1hbmQKLSAqIEBzdGF0ZTogICAgIHN0YXRlIG9mIHRoZSBjb21tYW5kCi0gKiBAY291 bnQ6ICAgICBudW1iZXIgb2YgY21kcwotICogQGN0cmxfaWR4OiAgaW5kZXggb2YgdGhlIGRzaSBj b250cm9sCi0gKiBAY21kczogICAgICBhcnJ5IG9mIGNtZHMKLSAqLwotc3RydWN0IGRzaV9wYW5l bF9jbWRfc2V0IHsKLQllbnVtIGRzaV9jbWRfc2V0X3R5cGUgdHlwZTsKLQllbnVtIGRzaV9jbWRf c2V0X3N0YXRlIHN0YXRlOwotCXUzMiBjb3VudDsKLQl1MzIgY3RybF9pZHg7Ci0Jc3RydWN0IGRz aV9jbWRfZGVzYyAqY21kczsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9tb2RlX2luZm8gLSB2 aWRlbyBtb2RlIGluZm9ybWF0aW9uIGRzaSBmcmFtZQotICogQGhfYWN0aXZlOiAgICAgICAgIEFj dGl2ZSB3aWR0aCBvZiBvbmUgZnJhbWUgaW4gcGl4ZWxzLgotICogQGhfYmFja19wb3JjaDogICAg IEhvcml6b250YWwgYmFjayBwb3JjaCBpbiBwaXhlbHMuCi0gKiBAaF9zeW5jX3dpZHRoOiAgICAg SFNZTkMgd2lkdGggaW4gcGl4ZWxzLgotICogQGhfZnJvbnRfcG9yY2g6ICAgIEhvcml6b250YWwg ZnJvbiBwb3JjaCBpbiBwaXhlbHMuCi0gKiBAaF9za2V3OgotICogQGhfc3luY19wb2xhcml0eTog IFBvbGFyaXR5IG9mIEhTWU5DIChmYWxzZSBpcyBhY3RpdmUgbG93KS4KLSAqIEB2X2FjdGl2ZTog ICAgICAgICBBY3RpdmUgaGVpZ2h0IG9mIG9uZSBmcmFtZSBpbiBsaW5lcy4KLSAqIEB2X2JhY2tf cG9yY2g6ICAgICBWZXJ0aWNhbCBiYWNrIHBvcmNoIGluIGxpbmVzLgotICogQHZfc3luY193aWR0 aDogICAgIFZTWU5DIHdpZHRoIGluIGxpbmVzLgotICogQHZfZnJvbnRfcG9yY2g6ICAgIFZlcnRp Y2FsIGZyb250IHBvcmNoIGluIGxpbmVzLgotICogQHZfc3luY19wb2xhcml0eTogIFBvbGFyaXR5 IG9mIFZTWU5DIChmYWxzZSBpcyBhY3RpdmUgbG93KS4KLSAqIEByZWZyZXNoX3JhdGU6ICAgICBS ZWZyZXNoIHJhdGUgaW4gSHouCi0gKiBAZHNjX2VuYWJsZWQ6ICAgICAgRFNDIGNvbXByZXNzaW9u IGVuYWJsZWQuCi0gKiBAZHNjOiAgICAgICAgICAgICAgRFNDIGNvbXByZXNzaW9uIGNvbmZpZ3Vy YXRpb24uCi0gKi8KLXN0cnVjdCBkc2lfbW9kZV9pbmZvIHsKLQl1MzIgaF9hY3RpdmU7Ci0JdTMy IGhfYmFja19wb3JjaDsKLQl1MzIgaF9zeW5jX3dpZHRoOwotCXUzMiBoX2Zyb250X3BvcmNoOwot CXUzMiBoX3NrZXc7Ci0JYm9vbCBoX3N5bmNfcG9sYXJpdHk7Ci0KLQl1MzIgdl9hY3RpdmU7Ci0J dTMyIHZfYmFja19wb3JjaDsKLQl1MzIgdl9zeW5jX3dpZHRoOwotCXUzMiB2X2Zyb250X3BvcmNo OwotCWJvb2wgdl9zeW5jX3BvbGFyaXR5OwotCi0JdTMyIHJlZnJlc2hfcmF0ZTsKLQotCWJvb2wg ZHNjX2VuYWJsZWQ7Ci0Jc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2M7Ci19OwotCi0v KioKLSAqIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnIC0gSG9zdCBjb25maWd1cmF0aW9uIGNv bW1vbiB0byB2aWRlbyBhbmQgY21kIG1vZGUKLSAqIEBkc3RfZm9ybWF0OiAgICAgICAgICBEZXN0 aW5hdGlvbiBwaXhlbCBmb3JtYXQuCi0gKiBAZGF0YV9sYW5lczogICAgICAgICAgUGh5c2ljYWwg ZGF0YSBsYW5lcyB0byBiZSBlbmFibGVkLgotICogQGVuX2NyY19jaGVjazogICAgICAgIEVuYWJs ZSBDUkMgY2hlY2tzLgotICogQGVuX2VjY19jaGVjazogICAgICAgIEVuYWJsZSBFQ0MgY2hlY2tz LgotICogQHRlX21vZGU6ICAgICAgICAgICAgIFNvdXJjZSBmb3IgVEUgc2lnbmFsbGluZy4KLSAq IEBtZHBfY21kX3RyaWdnZXI6ICAgICBNRFAgZnJhbWUgdXBkYXRlIHRyaWdnZXIgZm9yIGNvbW1h bmQgbW9kZS4KLSAqIEBkbWFfY21kX3RyaWdnZXI6ICAgICBDb21tYW5kIERNQSB0cmlnZ2VyLgot ICogQGNtZF90cmlnZ2VyX3N0cmVhbTogIENvbW1hbmQgbW9kZSBzdHJlYW0gdG8gdHJpZ2dlci4K LSAqIEBzd2FwX21vZGU6ICAgICAgICAgICBEU0kgY29sb3Igc3dhcCBtb2RlLgotICogQGJpdF9z d2FwX3JlYWQ6ICAgICAgIElzIHJlZCBjb2xvciBiaXQgc3dhcHBlZC4KLSAqIEBiaXRfc3dhcF9n cmVlbjogICAgICBJcyBncmVlbiBjb2xvciBiaXQgc3dhcHBlZC4KLSAqIEBiaXRfc3dhcF9ibHVl OiAgICAgICBJcyBibHVlIGNvbG9yIGJpdCBzd2FwcGVkLgotICogQHRfY2xrX3Bvc3Q6ICAgICAg ICAgIE51bWJlciBvZiBieXRlIGNsb2NrIGN5Y2xlcyB0aGF0IHRoZSB0cmFuc21pdHRlciBzaGFs bAotICogICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHNlbmRpbmcgYWZ0ZXIgbGFzdCBk YXRhIGxhbmUgaGFzIHRyYW5zaXRpb25lZAotICogICAgICAgICAgICAgICAgICAgICAgIHRvIExQ IG1vZGUuCi0gKiBAdF9jbGtfcHJlOiAgICAgICAgICAgTnVtYmVyIG9mIGJ5dGUgY2xvY2sgY3lj bGVzIHRoYXQgdGhlIGhpZ2ggc3BwZWQgY2xvY2sKLSAqICAgICAgICAgICAgICAgICAgICAgICBz aGFsbCBiZSBkcml2ZW4gcHJpb3IgdG8gZGF0YSBsYW5lIHRyYW5zaXRpb25zIGZyb20gTFAKLSAq ICAgICAgICAgICAgICAgICAgICAgICB0byBIUyBtb2RlLgotICogQGlnbm9yZV9yeF9lb3Q6ICAg ICAgIElnbm9yZSBSeCBFT1QgcGFja2V0cyBpZiBzZXQgdG8gdHJ1ZS4KLSAqIEBhcHBlbmRfdHhf ZW90OiAgICAgICBBcHBlbmQgRU9UIHBhY2tldHMgZm9yIGZvcndhcmQgdHJhbnNtaXNzaW9ucyBp ZiBzZXQgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICB0cnVlLgotICovCi1zdHJ1Y3QgZHNp X2hvc3RfY29tbW9uX2NmZyB7Ci0JZW51bSBkc2lfcGl4ZWxfZm9ybWF0IGRzdF9mb3JtYXQ7Ci0J ZW51bSBkc2lfZGF0YV9sYW5lcyBkYXRhX2xhbmVzOwotCWJvb2wgZW5fY3JjX2NoZWNrOwotCWJv b2wgZW5fZWNjX2NoZWNrOwotCWVudW0gZHNpX3RlX21vZGUgdGVfbW9kZTsKLQllbnVtIGRzaV90 cmlnZ2VyX3R5cGUgbWRwX2NtZF90cmlnZ2VyOwotCWVudW0gZHNpX3RyaWdnZXJfdHlwZSBkbWFf Y21kX3RyaWdnZXI7Ci0JdTMyIGNtZF90cmlnZ2VyX3N0cmVhbTsKLQllbnVtIGRzaV9jb2xvcl9z d2FwX21vZGUgc3dhcF9tb2RlOwotCWJvb2wgYml0X3N3YXBfcmVkOwotCWJvb2wgYml0X3N3YXBf Z3JlZW47Ci0JYm9vbCBiaXRfc3dhcF9ibHVlOwotCXUzMiB0X2Nsa19wb3N0OwotCXUzMiB0X2Ns a19wcmU7Ci0JYm9vbCBpZ25vcmVfcnhfZW90OwotCWJvb2wgYXBwZW5kX3R4X2VvdDsKLX07Ci0K LS8qKgotICogc3RydWN0IGRzaV92aWRlb19lbmdpbmVfY2ZnIC0gRFNJIHZpZGVvIGVuZ2luZSBj b25maWd1cmF0aW9uCi0gKiBAbGFzdF9saW5lX2ludGVybGVhdmVfZW46ICAgQWxsb3cgY29tbWFu ZCBtb2RlIG9wIGludGVybGVhdmVkIG9uIGxhc3QgbGluZSBvZgotICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZpZGVvIHN0cmVhbS4KLSAqIEBwdWxzZV9tb2RlX2hzYV9oZTogICAgICAg ICBTZW5kIEhTQSBhbmQgSEUgZm9sbG93aW5nIFZTL1ZFIHBhY2tldCBpZiBzZXQgdG8KLSAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLgotICogQGhmcF9scDExX2VuOiAgICAgICAg ICAgICAgIEVudGVyIGxvdyBwb3dlciBzdG9wIG1vZGUgKExQLTExKSBkdXJpbmcgSEZQLgotICog QGhicF9scDExX2VuOiAgICAgICAgICAgICAgIEVudGVyIGxvdyBwb3dlciBzdG9wIG1vZGUgKExQ LTExKSBkdXJpbmcgSEJQLgotICogQGhzYV9scDExX2VuOiAgICAgICAgICAgICAgIEVudGVyIGxv dyBwb3dlciBzdG9wIG1vZGUgKExQLTExKSBkdXJpbmcgSFNBLgotICogQGVvZl9ibGxwX2xwMTFf ZW46ICAgICAgICAgIEVudGVyIGxvdyBwb3dlciBzdG9wIG1vZGUgKExQLTExKSBkdXJpbmcgQkxM UCBvZgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgbGluZSBvZiBhIGZyYW1l LgotICogQGJsbHBfbHAxMV9lbjogICAgICAgICAgICAgIEVudGVyIGxvdyBwb3dlciBzdG9wIG1v ZGUgKExQLTExKSBkdXJpbmcgQkxMUC4KLSAqIEB0cmFmZmljX21vZGU6ICAgICAgICAgICAgICBU cmFmZmljIG1vZGUgZm9yIHZpZGVvIHN0cmVhbS4KLSAqIEB2Y19pZDogICAgICAgICAgICAgICAg ICAgICBWaXJ0dWFsIGNoYW5uZWwgaWRlbnRpZmllci4KLSAqLwotc3RydWN0IGRzaV92aWRlb19l bmdpbmVfY2ZnIHsKLQlib29sIGxhc3RfbGluZV9pbnRlcmxlYXZlX2VuOwotCWJvb2wgcHVsc2Vf bW9kZV9oc2FfaGU7Ci0JYm9vbCBoZnBfbHAxMV9lbjsKLQlib29sIGhicF9scDExX2VuOwotCWJv b2wgaHNhX2xwMTFfZW47Ci0JYm9vbCBlb2ZfYmxscF9scDExX2VuOwotCWJvb2wgYmxscF9scDEx X2VuOwotCWVudW0gZHNpX3ZpZGVvX3RyYWZmaWNfbW9kZSB0cmFmZmljX21vZGU7Ci0JdTMyIHZj X2lkOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2NtZF9lbmdpbmVfY2ZnIC0gRFNJIGNvbW1h bmQgZW5naW5lIGNvbmZpZ3VyYXRpb24KLSAqIEBtYXhfY21kX3BhY2tldHNfaW50ZXJsZWF2ZSAg ICAgTWF4aW11bSBudW1iZXIgb2YgY29tbWFuZCBtb2RlIFJHQiBwYWNrZXRzIHRvCi0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQgd2l0aCBpbiBvbmUgaG9yaXpvbnRhbCBi bGFua2luZyBwZXJpb2QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhl IHZpZGVvIG1vZGUgZnJhbWUuCi0gKiBAd3JfbWVtX3N0YXJ0OiAgICAgICAgICAgICAgICAgIERD UyBjb21tYW5kIGZvciB3cml0ZV9tZW1vcnlfc3RhcnQuCi0gKiBAd3JfbWVtX2NvbnRpbnVlOiAg ICAgICAgICAgICAgIERDUyBjb21tYW5kIGZvciB3cml0ZV9tZW1vcnlfY29udGludWUuCi0gKiBA aW5zZXJ0X2Rjc19jb21tYW5kOiAgICAgICAgICAgIEluc2VydCBEQ1MgY29tbWFuZCBhcyBmaXJz dCBieXRlIG9mIHBheWxvYWQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Yg dGhlIHBpeGVsIGRhdGEuCi0gKiBAbWRwX3RyYW5zZmVyX3RpbWVfdXMgICBTcGVjaWZpZXMgdGhl IG1kcCB0cmFuc2ZlciB0aW1lIGZvciBjb21tYW5kIG1vZGUKLSAqICAgICAgICAgICAgICAgICAg ICAgICAgIHBhbmVscyBpbiBtaWNyb3NlY29uZHMKLSAqLwotc3RydWN0IGRzaV9jbWRfZW5naW5l X2NmZyB7Ci0JdTMyIG1heF9jbWRfcGFja2V0c19pbnRlcmxlYXZlOwotCXUzMiB3cl9tZW1fc3Rh cnQ7Ci0JdTMyIHdyX21lbV9jb250aW51ZTsKLQlib29sIGluc2VydF9kY3NfY29tbWFuZDsKLQl1 MzIgbWRwX3RyYW5zZmVyX3RpbWVfdXM7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfaG9zdF9j b25maWcgLSBEU0kgaG9zdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCi0gKiBAcGFuZWxfbW9k ZTogICAgICAgICAgICBPcGVyYXRpb24gbW9kZSBmb3IgcGFuZWwgKHZpZGVvIG9yIGNtZCBtb2Rl KS4KLSAqIEBjb21tb25fY29uZmlnOiAgICAgICAgIEhvc3QgY29uZmlndXJhdGlvbiBjb21tb24g dG8gYm90aCBWaWRlbyBhbmQgQ21kIG1vZGUuCi0gKiBAdmlkZW9fZW5naW5lOiAgICAgICAgICBW aWRlbyBlbmdpbmUgY29uZmlndXJhdGlvbiBpZiBwYW5lbCBpcyBpbiB2aWRlbyBtb2RlLgotICog QGNtZF9lbmdpbmU6ICAgICAgICAgICAgQ21kIGVuZ2luZSBjb25maWd1cmF0aW9uIGlmIHBhbmVs IGlzIGluIGNtZCBtb2RlLgotICogQGVzY19jbGtfcmF0ZV9raHo6ICAgICAgRXNjIGNsb2NrIGZy ZXF1ZW5jeSBpbiBIei4KLSAqIEBiaXRfY2xrX3JhdGVfaHo6ICAgICAgIEJpdCBjbG9jayBmcmVx dWVuY3kgaW4gSHouCi0gKiBAdmlkZW9fdGltaW5nOiAgICAgICAgICBWaWRlbyB0aW1pbmcgaW5m b3JtYXRpb24gb2YgYSBmcmFtZS4KLSAqIEBsYW5lX21hcDogICAgICAgICAgICAgIE1hcHBpbmcg YmV0d2VlbiBsb2dpY2FsIGFuZCBwaHlzaWNhbCBsYW5lcy4KLSAqLwotc3RydWN0IGRzaV9ob3N0 X2NvbmZpZyB7Ci0JZW51bSBkc2lfb3BfbW9kZSBwYW5lbF9tb2RlOwotCXN0cnVjdCBkc2lfaG9z dF9jb21tb25fY2ZnIGNvbW1vbl9jb25maWc7Ci0JdW5pb24gewotCQlzdHJ1Y3QgZHNpX3ZpZGVv X2VuZ2luZV9jZmcgdmlkZW9fZW5naW5lOwotCQlzdHJ1Y3QgZHNpX2NtZF9lbmdpbmVfY2ZnIGNt ZF9lbmdpbmU7Ci0JfSB1OwotCXU2NCBlc2NfY2xrX3JhdGVfaHo7Ci0JdTY0IGJpdF9jbGtfcmF0 ZV9oejsKLQlzdHJ1Y3QgZHNpX21vZGVfaW5mbyB2aWRlb190aW1pbmc7Ci0Jc3RydWN0IGRzaV9s YW5lX21hcCBsYW5lX21hcDsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9kaXNwbGF5X21vZGVf cHJpdl9pbmZvIC0gcHJpdmF0ZSBtb2RlIGluZm8gdGhhdCB3aWxsIGJlIGF0dGFjaGVkCi0gKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBlYWNoIGRybSBtb2RlCi0gKiBAY21kX3Nl dHM6CQkgIENvbW1hbmQgc2V0cyBvZiB0aGUgbW9kZQotICogQHBoeV90aW1pbmdfdmFsOiAgICAg ICBQaHkgdGltaW5nIHZhbHVlcwotICogQHBoeV90aW1pbmdfbGVuOiAgICAgICBQaHkgdGltaW5n IGFycmF5IGxlbmd0aAotICogQHBhbmVsX2ppdHRlcjogICAgICAgICBQYW5lbCBqaXR0ZXIgZm9y IFJTQyBiYWNrb2ZmCi0gKiBAcGFuZWxfcHJlZmlsbF9saW5lczogIFBhbmVsIHByZWZpbGwgbGlu ZXMgZm9yIFJTQwotICogQHRvcG9sb2d5OiAgICAgICAgICAgICBUb3BvbG9neSBzZWxlY3RlZCBm b3IgdGhlIHBhbmVsCi0gKiBAZHNjOiAgICAgICAgICAgICAgICAgIERTQyBjb21wcmVzc2lvbiBp bmZvCi0gKiBAZHNjX2VuYWJsZWQ6ICAgICAgICAgIERTQyBjb21wcmVzc2lvbiBlbmFibGVkCi0g Ki8KLXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlX3ByaXZfaW5mbyB7Ci0Jc3RydWN0IGRzaV9wYW5l bF9jbWRfc2V0IGNtZF9zZXRzW0RTSV9DTURfU0VUX01BWF07Ci0KLQl1MzIgKnBoeV90aW1pbmdf dmFsOwotCXUzMiBwaHlfdGltaW5nX2xlbjsKLQotCXUzMiBwYW5lbF9qaXR0ZXJfbnVtZXI7Ci0J dTMyIHBhbmVsX2ppdHRlcl9kZW5vbTsKLQl1MzIgcGFuZWxfcHJlZmlsbF9saW5lczsKLQotCXN0 cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neTsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlf ZHNjX2luZm8gZHNjOwotCWJvb2wgZHNjX2VuYWJsZWQ7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBk c2lfZGlzcGxheV9tb2RlIC0gc3BlY2lmaWVzIG1vZGUgZm9yIGRzaSBkaXNwbGF5Ci0gKiBAdGlt aW5nOiAgICAgICAgIFRpbWluZyBwYXJhbWV0ZXJzIGZvciB0aGUgcGFuZWwuCi0gKiBAcGl4ZWxf Y2xrX2toejogIFBpeGVsIGNsb2NrIGluIEtoei4KLSAqIEBkc2lfbW9kZV9mbGFnczogRmxhZ3Mg dG8gc2lnbmFsIG90aGVyIGRybSBjb21wb25lbnRzIHZpYSBwcml2YXRlIGZsYWdzCi0gKiBAcHJp dl9pbmZvOiAgICAgIE1vZGUgcHJpdmF0ZSBpbmZvCi0gKi8KLXN0cnVjdCBkc2lfZGlzcGxheV9t b2RlIHsKLQlzdHJ1Y3QgZHNpX21vZGVfaW5mbyB0aW1pbmc7Ci0JdTMyIHBpeGVsX2Nsa19raHo7 Ci0JdTMyIGRzaV9tb2RlX2ZsYWdzOwotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlX3ByaXZfaW5m byAqcHJpdl9pbmZvOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX3JlY3QgLSBkc2kgcmVjdGFu Z2xlIHJlcHJlc2VudGF0aW9uCi0gKiBOb3RlOiBkcHVfcmVjdCBpcyBhbHNvIHVzaW5nIHUxNiwg dGhpcyBtdXN0IGJlIG1haW50YWluZWQgZm9yIG1lbWNweQotICovCi1zdHJ1Y3QgZHNpX3JlY3Qg ewotCXUxNiB4OwotCXUxNiB5OwotCXUxNiB3OwotCXUxNiBoOwotfTsKLQotLyoqCi0gKiBkc2lf cmVjdF9pbnRlcnNlY3QgLSBpbnRlcnNlY3QgdHdvIHJlY3RhbmdsZXMKLSAqIEByMTogZmlyc3Qg cmVjdGFuZ2xlCi0gKiBAcjI6IHNjaXNzb3IgcmVjdGFuZ2xlCi0gKiBAcmVzdWx0OiByZXN1bHQg cmVjdGFuZ2xlLCBhbGwgMCdzIG9uIG5vIGludGVyc2VjdGlvbiBmb3VuZAotICovCi12b2lkIGRz aV9yZWN0X2ludGVyc2VjdChjb25zdCBzdHJ1Y3QgZHNpX3JlY3QgKnIxLAotCQljb25zdCBzdHJ1 Y3QgZHNpX3JlY3QgKnIyLAotCQlzdHJ1Y3QgZHNpX3JlY3QgKnJlc3VsdCk7Ci0KLS8qKgotICog ZHNpX3JlY3RfaXNfZXF1YWwgLSBjb21wYXJlcyB0d28gcmVjdHMKLSAqIEByMTogcmVjdCB2YWx1 ZSB0byBjb21wYXJlCi0gKiBAcjI6IHJlY3QgdmFsdWUgdG8gY29tcGFyZQotICoKLSAqIFJldHVy bnMgdHJ1ZSBpZiB0aGUgcmVjdHMgYXJlIHNhbWUKLSAqLwotc3RhdGljIGlubGluZSBib29sIGRz aV9yZWN0X2lzX2VxdWFsKHN0cnVjdCBkc2lfcmVjdCAqcjEsCi0JCXN0cnVjdCBkc2lfcmVjdCAq cjIpCi17Ci0JcmV0dXJuIHIxLT54ID09IHIyLT54ICYmIHIxLT55ID09IHIyLT55ICYmIHIxLT53 ID09IHIyLT53ICYmCi0JCQlyMS0+aCA9PSByMi0+aDsKLX0KLQotc3RydWN0IGRzaV9ldmVudF9j Yl9pbmZvIHsKLQl1aW50MzJfdCBldmVudF9pZHg7Ci0Jdm9pZCAqZXZlbnRfdXNyX3B0cjsKLQot CWludCAoKmV2ZW50X2NiKSh2b2lkICpldmVudF91c3JfcHRyLAotCQl1aW50MzJfdCBldmVudF9p ZHgsIHVpbnQzMl90IGluc3RhbmNlX2lkeCwKLQkJdWludDMyX3QgZGF0YTAsIHVpbnQzMl90IGRh dGExLAotCQl1aW50MzJfdCBkYXRhMiwgdWludDMyX3QgZGF0YTMpOwotfTsKLQotI2VuZGlmIC8q IF9EU0lfREVGU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf ZGlzcGxheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWI3ZDdlLi4wMDAwMDAw Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXkuYworKysg L2Rldi9udWxsCkBAIC0xLDQyMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0y MDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgotICoKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpCSJtc20tZHNpLWRpc3BsYXk6WyVzXSAi IGZtdCwgX19mdW5jX18KLQotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51 eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotCi0jaW5jbHVkZSAibXNtX2Rydi5oIgot I2luY2x1ZGUgImRwdV9jb25uZWN0b3IuaCIKLSNpbmNsdWRlICJtc21fbW11LmgiCi0jaW5jbHVk ZSAiZHNpX2Rpc3BsYXkuaCIKLSNpbmNsdWRlICJkc2lfcGFuZWwuaCIKLSNpbmNsdWRlICJkc2lf Y3RybC5oIgotI2luY2x1ZGUgImRzaV9jdHJsX2h3LmgiCi0jaW5jbHVkZSAiZHNpX2RybS5oIgot I2luY2x1ZGUgImRzaV9jbGsuaCIKLSNpbmNsdWRlICJkc2lfcHdyLmgiCi0jaW5jbHVkZSAiZHB1 X2RiZy5oIgotCi0jZGVmaW5lIHRvX2RzaV9kaXNwbGF5KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1 Y3QgZHNpX2Rpc3BsYXksIGhvc3QpCi0jZGVmaW5lIElOVF9CQVNFXzEwIDEwCi0jZGVmaW5lIE5P X09WRVJSSURFIC0xCi0KLSNkZWZpbmUgTUlTUl9CVUZGX1NJWkUJMjU2Ci0KLXN0YXRpYyBERUZJ TkVfTVVURVgoZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsKLXN0YXRpYyBMSVNUX0hFQUQoZHNpX2Rp c3BsYXlfbGlzdCk7Ci1zdGF0aWMgY2hhciBkc2lfZGlzcGxheV9wcmltYXJ5W01BWF9DTURMSU5F X1BBUkFNX0xFTl07Ci1zdGF0aWMgY2hhciBkc2lfZGlzcGxheV9zZWNvbmRhcnlbTUFYX0NNRExJ TkVfUEFSQU1fTEVOXTsKLXN0YXRpYyBzdHJ1Y3QgZHNpX2Rpc3BsYXlfYm9vdF9wYXJhbSBib290 X2Rpc3BsYXlzW01BWF9EU0lfQUNUSVZFX0RJU1BMQVldOwotc3RhdGljIHN0cnVjdCBkZXZpY2Vf bm9kZSAqZGVmYXVsdF9hY3RpdmVfbm9kZTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIGRzaV9kaXNwbGF5X2R0X21hdGNoW10gPSB7Ci0Jey5jb21wYXRpYmxlID0gInFjb20sZHNp LWRpc3BsYXkifSwKLQl7fQotfTsKLQotc3RhdGljIHN0cnVjdCBkc2lfZGlzcGxheSAqbWFpbl9k aXNwbGF5OwotCi12b2lkIGRzaV9yZWN0X2ludGVyc2VjdChjb25zdCBzdHJ1Y3QgZHNpX3JlY3Qg KnIxLAotCQljb25zdCBzdHJ1Y3QgZHNpX3JlY3QgKnIyLAotCQlzdHJ1Y3QgZHNpX3JlY3QgKnJl c3VsdCkKLXsKLQlpbnQgbCwgdCwgciwgYjsKLQotCWlmICghcjEgfHwgIXIyIHx8ICFyZXN1bHQp Ci0JCXJldHVybjsKLQotCWwgPSBtYXgocjEtPngsIHIyLT54KTsKLQl0ID0gbWF4KHIxLT55LCBy Mi0+eSk7Ci0JciA9IG1pbigocjEtPnggKyByMS0+dyksIChyMi0+eCArIHIyLT53KSk7Ci0JYiA9 IG1pbigocjEtPnkgKyByMS0+aCksIChyMi0+eSArIHIyLT5oKSk7Ci0KLQlpZiAociA8PSBsIHx8 IGIgPD0gdCkgewotCQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwotCX0gZWxz ZSB7Ci0JCXJlc3VsdC0+eCA9IGw7Ci0JCXJlc3VsdC0+eSA9IHQ7Ci0JCXJlc3VsdC0+dyA9IHIg LSBsOwotCQlyZXN1bHQtPmggPSBiIC0gdDsKLQl9Ci19Ci0KLWludCBkc2lfZGlzcGxheV9zZXRf YmFja2xpZ2h0KHZvaWQgKmRpc3BsYXksIHUzMiBibF9sdmwpCi17Ci0Jc3RydWN0IGRzaV9kaXNw bGF5ICpkc2lfZGlzcGxheSA9IGRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9wYW5lbCAqcGFuZWw7Ci0J dTMyIGJsX3NjYWxlLCBibF9zY2FsZV9hZDsKLQl1NjQgYmxfdGVtcDsKLQlpbnQgcmMgPSAwOwot Ci0JaWYgKGRzaV9kaXNwbGF5ID09IE5VTEwgfHwgZHNpX2Rpc3BsYXktPnBhbmVsID09IE5VTEwp Ci0JCXJldHVybiAtRUlOVkFMOwotCi0JcGFuZWwgPSBkc2lfZGlzcGxheS0+cGFuZWw7Ci0KLQlp ZiAoIWRzaV9wYW5lbF9pbml0aWFsaXplZChwYW5lbCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0J cGFuZWwtPmJsX2NvbmZpZy5ibF9sZXZlbCA9IGJsX2x2bDsKLQotCS8qIHNjYWxlIGJhY2tsaWdo dCAqLwotCWJsX3NjYWxlID0gcGFuZWwtPmJsX2NvbmZpZy5ibF9zY2FsZTsKLQlibF90ZW1wID0g YmxfbHZsICogYmxfc2NhbGUgLyBNQVhfQkxfU0NBTEVfTEVWRUw7Ci0KLQlibF9zY2FsZV9hZCA9 IHBhbmVsLT5ibF9jb25maWcuYmxfc2NhbGVfYWQ7Ci0JYmxfdGVtcCA9ICh1MzIpYmxfdGVtcCAq IGJsX3NjYWxlX2FkIC8gTUFYX0FEX0JMX1NDQUxFX0xFVkVMOwotCi0JcHJfZGVidWcoImJsX3Nj YWxlID0gJXUsIGJsX3NjYWxlX2FkID0gJXUsIGJsX2x2bCA9ICV1XG4iLAotCQlibF9zY2FsZSwg Ymxfc2NhbGVfYWQsICh1MzIpYmxfdGVtcCk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJs KGRzaV9kaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9DT1JFX0NMSywgRFNJX0NMS19P Tik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIERTSSBjb3Jl IGNsb2NrcywgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfZGlzcGxheS0+bmFtZSwgcmMpOwotCQln b3RvIGVycm9yOwotCX0KLQotCXJjID0gZHNpX3BhbmVsX3NldF9iYWNrbGlnaHQocGFuZWwsICh1 MzIpYmxfdGVtcCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoInVuYWJsZSB0byBzZXQgYmFja2xpZ2h0 XG4iKTsKLQotCXJjID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZHNpX2Rpc3BsYXktPmRzaV9jbGtf aGFuZGxlLAotCQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09GRik7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBEU0kgY29yZSBjbG9ja3MsIHJjPSVkXG4iLAot CQkgICAgICAgZHNpX2Rpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVy cm9yOgotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X3NvZnRfcmVzZXQodm9pZCAq ZGlzcGxheSkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRzaV9kaXNwbGF5OwotCXN0cnVjdCBk c2lfZGlzcGxheV9jdHJsICpjdHJsOwotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0KLQlpZiAoIWRp c3BsYXkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZHNpX2Rpc3BsYXkgPSBkaXNwbGF5OwotCi0J Zm9yIChpID0gMCA7IGkgPCBkc2lfZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwg PSAmZHNpX2Rpc3BsYXktPmN0cmxbaV07Ci0JCXJjID0gZHNpX2N0cmxfc29mdF9yZXNldChjdHJs LT5jdHJsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNvZnQgcmVz ZXQgaG9zdF8lZCwgcmM9JWRcbiIsCi0JCQkJCWRzaV9kaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0J CQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiByYzsKLX0KLQotZW51bSBkc2lfcGl4ZWxfZm9y bWF0IGRzaV9kaXNwbGF5X2dldF9kc3RfZm9ybWF0KHZvaWQgKmRpc3BsYXkpCi17Ci0JZW51bSBk c2lfcGl4ZWxfZm9ybWF0IGZvcm1hdCA9IERTSV9QSVhFTF9GT1JNQVRfTUFYOwotCXN0cnVjdCBk c2lfZGlzcGxheSAqZHNpX2Rpc3BsYXkgPSAoc3RydWN0IGRzaV9kaXNwbGF5ICopZGlzcGxheTsK LQotCWlmICghZHNpX2Rpc3BsYXkgfHwgIWRzaV9kaXNwbGF5LT5wYW5lbCkgewotCQlwcl9lcnIo IkludmFsaWQgcGFyYW1zKHMpIGRzaV9kaXNwbGF5ICVwSywgcGFuZWwgJXBLXG4iLAotCQkJZHNp X2Rpc3BsYXksCi0JCQkoKGRzaV9kaXNwbGF5KSA/IGRzaV9kaXNwbGF5LT5wYW5lbCA6IE5VTEwp KTsKLQkJcmV0dXJuIGZvcm1hdDsKLQl9Ci0KLQlmb3JtYXQgPSBkc2lfZGlzcGxheS0+cGFuZWwt Pmhvc3RfY29uZmlnLmRzdF9mb3JtYXQ7Ci0JcmV0dXJuIGZvcm1hdDsKLX0KLQotc3RhdGljIHZv aWQgX2RzaV9kaXNwbGF5X3NldHVwX21pc3Ioc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQot ewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykg ewotCQlkc2lfY3RybF9zZXR1cF9taXNyKGRpc3BsYXktPmN0cmxbaV0uY3RybCwKLQkJCQlkaXNw bGF5LT5taXNyX2VuYWJsZSwKLQkJCQlkaXNwbGF5LT5taXNyX2ZyYW1lX2NvdW50KTsKLQl9Ci19 Ci0KLWludCBkc2lfZGlzcGxheV9zZXRfcG93ZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKLQkJaW50IHBvd2VyX21vZGUsIHZvaWQgKmRpc3ApCi17Ci0Jc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5ID0gZGlzcDsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFk aXNwbGF5LT5wYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgZGlzcGxheS9wYW5lbFxuIik7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAocG93ZXJfbW9kZSkgewotCWNhc2UgRFBV X01PREVfRFBNU19MUDE6Ci0JCXJjID0gZHNpX3BhbmVsX3NldF9scDEoZGlzcGxheS0+cGFuZWwp OwotCQlicmVhazsKLQljYXNlIERQVV9NT0RFX0RQTVNfTFAyOgotCQlyYyA9IGRzaV9wYW5lbF9z ZXRfbHAyKGRpc3BsYXktPnBhbmVsKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmMgPSBkc2lf cGFuZWxfc2V0X25vbHAoZGlzcGxheS0+cGFuZWwpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJj OwotfQotCi1zdGF0aWMgc3NpemVfdCBkZWJ1Z2ZzX2R1bXBfaW5mb19yZWFkKHN0cnVjdCBmaWxl ICpmaWxlLAotCQkJCSAgICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICAgICBzaXpl X3QgdXNlcl9sZW4sCi0JCQkJICAgICAgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBkc2lfZGlz cGxheSAqZGlzcGxheSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyICpidWY7Ci0JdTMyIGxl biA9IDA7Ci0JaW50IGk7Ci0KLQlpZiAoIWRpc3BsYXkpCi0JCXJldHVybiAtRU5PREVWOwotCi0J aWYgKCpwcG9zKQotCQlyZXR1cm4gMDsKLQotCWJ1ZiA9IGt6YWxsb2MoU1pfNEssIEdGUF9LRVJO RUwpOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxlbiArPSBzbnByaW50Zihi dWYgKyBsZW4sIChTWl80SyAtIGxlbiksICJuYW1lID0gJXNcbiIsIGRpc3BsYXktPm5hbWUpOwot CWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIChTWl80SyAtIGxlbiksCi0JCQkiXHRSZXNvbHV0 aW9uID0gJWR4JWRcbiIsCi0JCQlkaXNwbGF5LT5jb25maWcudmlkZW9fdGltaW5nLmhfYWN0aXZl LAotCQkJZGlzcGxheS0+Y29uZmlnLnZpZGVvX3RpbWluZy52X2FjdGl2ZSk7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWxlbiArPSBzbnByaW50Zihi dWYgKyBsZW4sIChTWl80SyAtIGxlbiksCi0JCQkJIlx0Q1RSTF8lZDpcblx0XHRjdHJsID0gJXNc blx0XHRwaHkgPSAlc1xuIiwKLQkJCQlpLCBkaXNwbGF5LT5jdHJsW2ldLmN0cmwtPm5hbWUsCi0J CQkJZGlzcGxheS0+Y3RybFtpXS5waHktPm5hbWUpOwotCX0KLQotCWxlbiArPSBzbnByaW50Zihi dWYgKyBsZW4sIChTWl80SyAtIGxlbiksCi0JCQkiXHRQYW5lbCA9ICVzXG4iLCBkaXNwbGF5LT5w YW5lbC0+bmFtZSk7Ci0KLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCAoU1pfNEsgLSBsZW4p LAotCQkJIlx0Q2xvY2sgbWFzdGVyID0gJXNcbiIsCi0JCQlkaXNwbGF5LT5jdHJsW2Rpc3BsYXkt PmNsa19tYXN0ZXJfaWR4XS5jdHJsLT5uYW1lKTsKLQotCWlmIChjb3B5X3RvX3VzZXIodXNlcl9i dWYsIGJ1ZiwgbGVuKSkgewotCQlrZnJlZShidWYpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0K LQkqcHBvcyArPSBsZW47Ci0KLQlrZnJlZShidWYpOwotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRp YyBzc2l6ZV90IGRlYnVnZnNfbWlzcl9zZXR1cChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgIGNv bnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgIHNpemVfdCB1c2VyX2xlbiwKLQkJCQkg IGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkgPSBmaWxlLT5w cml2YXRlX2RhdGE7Ci0JY2hhciAqYnVmOwotCWludCByYyA9IDA7Ci0Jc2l6ZV90IGxlbjsKLQl1 MzIgZW5hYmxlLCBmcmFtZV9jb3VudDsKLQotCWlmICghZGlzcGxheSkKLQkJcmV0dXJuIC1FTk9E RVY7Ci0KLQlpZiAoKnBwb3MpCi0JCXJldHVybiAwOwotCi0JYnVmID0ga3phbGxvYyhNSVNSX0JV RkZfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0J LyogbGVhdmUgcm9vbSBmb3IgdGVybWluYXRpb24gY2hhciAqLwotCWxlbiA9IG1pbl90KHNpemVf dCwgdXNlcl9sZW4sIE1JU1JfQlVGRl9TSVpFIC0gMSk7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1 ZiwgdXNlcl9idWYsIGxlbikpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0K LQotCWJ1ZltsZW5dID0gJ1wwJzsgLyogdGVybWluYXRlIHRoZSBzdHJpbmcgKi8KLQotCWlmIChz c2NhbmYoYnVmLCAiJXUgJXUiLCAmZW5hYmxlLCAmZnJhbWVfY291bnQpICE9IDIpIHsKLQkJcmMg PSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWRpc3BsYXktPm1pc3JfZW5hYmxlID0g ZW5hYmxlOwotCWRpc3BsYXktPm1pc3JfZnJhbWVfY291bnQgPSBmcmFtZV9jb3VudDsKLQotCW11 dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmMgPSBkc2lfZGlzcGxheV9jbGtf Y3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9DT1JFX0NMSywgRFNJX0NMS19P Tik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIERTSSBjb3Jl IGNsb2NrcywgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8g dW5sb2NrOwotCX0KLQotCV9kc2lfZGlzcGxheV9zZXR1cF9taXNyKGRpc3BsYXkpOwotCi0JcmMg PSBkc2lfZGlzcGxheV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9D T1JFX0NMSywgRFNJX0NMS19PRkYpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVk IHRvIGRpc2FibGUgRFNJIGNvcmUgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXkt Pm5hbWUsIHJjKTsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JcmMgPSB1c2VyX2xlbjsKLXVubG9j azoKLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci1lcnJvcjoKLQlrZnJl ZShidWYpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHNzaXplX3QgZGVidWdmc19taXNyX3Jl YWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkg c2l6ZV90IHVzZXJfbGVuLAotCQkJCSBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmJ1ZjsKLQl1MzIgbGVu ID0gMDsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmw7Ci0JaW50IGk7 Ci0JdTMyIG1pc3I7Ci0Jc2l6ZV90IG1heF9sZW4gPSBtaW5fdChzaXplX3QsIHVzZXJfbGVuLCBN SVNSX0JVRkZfU0laRSk7Ci0KLQlpZiAoIWRpc3BsYXkpCi0JCXJldHVybiAtRU5PREVWOwotCi0J aWYgKCpwcG9zKQotCQlyZXR1cm4gMDsKLQotCWJ1ZiA9IGt6YWxsb2MobWF4X2xlbiwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbXV0ZXhfbG9jaygmZGlz cGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXkt PmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09OKTsKLQlpZiAocmMp IHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFibGUgRFNJIGNvcmUgY2xvY2tzLCByYz0l ZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0K LQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWRzaV9jdHJs ID0gZGlzcGxheS0+Y3RybFtpXS5jdHJsOwotCQltaXNyID0gZHNpX2N0cmxfY29sbGVjdF9taXNy KGRpc3BsYXktPmN0cmxbaV0uY3RybCk7Ci0KLQkJbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCBtYXhfbGVuIC0gbGVuLAotCQkJIkRTSV8lZCBNSVNSOiAweCV4XG4iLCBkc2lfY3RybC0+Y2Vs bF9pbmRleCwgbWlzcik7Ci0KLQkJaWYgKGxlbiA+PSBtYXhfbGVuKQotCQkJYnJlYWs7Ci0JfQot Ci0JcmMgPSBkc2lfZGlzcGxheV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJ CURTSV9DT1JFX0NMSywgRFNJX0NMS19PRkYpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10g ZmFpbGVkIHRvIGRpc2FibGUgRFNJIGNvcmUgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRp c3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoY29weV90b191c2Vy KHVzZXJfYnVmLCBidWYsIGxlbikpIHsKLQkJcmMgPSAtRUZBVUxUOwotCQlnb3RvIGVycm9yOwot CX0KLQotCSpwcG9zICs9IGxlbjsKLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5k aXNwbGF5X2xvY2spOwotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGNv bnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHVtcF9pbmZvX2ZvcHMgPSB7Ci0JLm9wZW4gPSBz aW1wbGVfb3BlbiwKLQkucmVhZCA9IGRlYnVnZnNfZHVtcF9pbmZvX3JlYWQsCi19OwotCi1zdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaXNyX2RhdGFfZm9wcyA9IHsKLQkub3Bl biA9IHNpbXBsZV9vcGVuLAotCS5yZWFkID0gZGVidWdmc19taXNyX3JlYWQsCi0JLndyaXRlID0g ZGVidWdmc19taXNyX3NldHVwLAotfTsKLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9kZWJ1Z2Zz X2luaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0Jc3Ry dWN0IGRlbnRyeSAqZGlyLCAqZHVtcF9maWxlLCAqbWlzcl9kYXRhOwotCi0JZGlyID0gZGVidWdm c19jcmVhdGVfZGlyKGRpc3BsYXktPm5hbWUsIE5VTEwpOwotCWlmIChJU19FUlJfT1JfTlVMTChk aXIpKSB7Ci0JCXJjID0gUFRSX0VSUihkaXIpOwotCQlwcl9lcnIoIlslc10gZGVidWdmcyBjcmVh dGUgZGlyIGZhaWxlZCwgcmMgPSAlZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsK LQkJZ290byBlcnJvcjsKLQl9Ci0KLQlkdW1wX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJk dW1wX2luZm8iLAotCQkJCQkwNDAwLAotCQkJCQlkaXIsCi0JCQkJCWRpc3BsYXksCi0JCQkJCSZk dW1wX2luZm9fZm9wcyk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGR1bXBfZmlsZSkpIHsKLQkJcmMg PSBQVFJfRVJSKGR1bXBfZmlsZSk7Ci0JCXByX2VycigiWyVzXSBkZWJ1Z2ZzIGNyZWF0ZSBkdW1w IGluZm8gZmlsZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yX3JlbW92ZV9kaXI7Ci0JfQotCi0JbWlzcl9kYXRhID0gZGVidWdmc19j cmVhdGVfZmlsZSgibWlzcl9kYXRhIiwKLQkJCQkJMDYwMCwKLQkJCQkJZGlyLAotCQkJCQlkaXNw bGF5LAotCQkJCQkmbWlzcl9kYXRhX2ZvcHMpOwotCWlmIChJU19FUlJfT1JfTlVMTChtaXNyX2Rh dGEpKSB7Ci0JCXJjID0gUFRSX0VSUihtaXNyX2RhdGEpOwotCQlwcl9lcnIoIlslc10gZGVidWdm cyBjcmVhdGUgbWlzciBkYXRhZmlsZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxh eS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX3JlbW92ZV9kaXI7Ci0JfQotCi0JZGlzcGxheS0+ cm9vdCA9IGRpcjsKLQlyZXR1cm4gcmM7Ci1lcnJvcl9yZW1vdmVfZGlyOgotCWRlYnVnZnNfcmVt b3ZlKGRpcik7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3Bs YXlfZGVidWdmc19kZWluaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWRlYnVn ZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkaXNwbGF5LT5yb290KTsKLQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgdm9pZCBhZGp1c3RfdGltaW5nX2J5X2N0cmxfY291bnQoY29uc3Qgc3RydWN0IGRzaV9k aXNwbGF5ICpkaXNwbGF5LAotCQkJCQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsK LQlpZiAoZGlzcGxheS0+Y3RybF9jb3VudCA+IDEpIHsKLQkJbW9kZS0+dGltaW5nLmhfYWN0aXZl IC89IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCW1vZGUtPnRpbWluZy5oX2Zyb250X3BvcmNoIC89 IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCW1vZGUtPnRpbWluZy5oX3N5bmNfd2lkdGggLz0gZGlz cGxheS0+Y3RybF9jb3VudDsKLQkJbW9kZS0+dGltaW5nLmhfYmFja19wb3JjaCAvPSBkaXNwbGF5 LT5jdHJsX2NvdW50OwotCQltb2RlLT50aW1pbmcuaF9za2V3IC89IGRpc3BsYXktPmN0cmxfY291 bnQ7Ci0JCW1vZGUtPnBpeGVsX2Nsa19raHogLz0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQl9Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfaXNfdWxwc19yZXFfdmFsaWQoc3RydWN0IGRzaV9k aXNwbGF5ICpkaXNwbGF5LAotCQlib29sIGVuYWJsZSkKLXsKLQkvKiBUT0RPOiBtYWtlIGNoZWNr cyBiYXNlZCBvbiBjb250LiBzcGxhc2ggKi8KLQlpbnQgc3BsYXNoX2VuYWJsZWQgPSBmYWxzZTsK LQotCXByX2RlYnVnKCJjaGVja2luZyB1bHBzIHJlcSB2YWxpZGl0eVxuIik7Ci0KLQlpZiAoIWRz aV9wYW5lbF91bHBzX2ZlYXR1cmVfZW5hYmxlZChkaXNwbGF5LT5wYW5lbCkpCi0JCXJldHVybiBm YWxzZTsKLQotCS8qIFRPRE86IFVMUFMgZHVyaW5nIHN1c3BlbmQgKi8KLQlpZiAoIWRzaV9wYW5l bF9pbml0aWFsaXplZChkaXNwbGF5LT5wYW5lbCkpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChl bmFibGUgJiYgZGlzcGxheS0+dWxwc19lbmFibGVkKSB7Ci0JCXByX2RlYnVnKCJVTFBTIGFscmVh ZHkgZW5hYmxlZFxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgaWYgKCFlbmFibGUgJiYg IWRpc3BsYXktPnVscHNfZW5hYmxlZCkgewotCQlwcl9kZWJ1ZygiVUxQUyBhbHJlYWR5IGRpc2Fi bGVkXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qCi0JICogTm8gbmVlZCB0byBlbnRl ciBVTFBTIHdoZW4gdHJhbnNpdGlvbmluZyBmcm9tIHNwbGFzaCBzY3JlZW4gdG8KLQkgKiBib290 IGFuaW1hdGlvbiBzaW5jZSBpdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBjbG9ja3Mgd291bGQgYmUg dHVybmVkCi0JICogcmlnaHQgYmFjayBvbi4KLQkgKi8KLQlpZiAoZW5hYmxlICYmIHNwbGFzaF9l bmFibGVkKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotCi0vKioKLSAq IGRzaV9kaXNwbGF5X3NldF91bHBzKCkgLSBzZXQgVUxQUyBzdGF0ZSBmb3IgRFNJIGxhbmVzLgot ICogQGRzaV9kaXNwbGF5OiAgICAgICAgIERTSSBkaXNwbGF5IGhhbmRsZS4KLSAqIEBlbmFibGU6 ICAgICAgICAgICBlbmFibGUvZGlzYWJsZSBVTFBTLgotICoKLSAqIFVMUFMgY2FuIGJlIGVuYWJs ZWQvZGlzYWJsZWQgYWZ0ZXIgRFNJIGhvc3QgZW5naW5lIGlzIHR1cm5lZCBvbi4KLSAqCi0gKiBS ZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfc2V0X3VscHMo c3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LCBib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAw OwotCWludCBpID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3RybDsK LQotCi0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWRzaV9kaXNwbGF5X2lzX3VscHNfcmVxX3ZhbGlk KGRpc3BsYXksIGVuYWJsZSkpIHsKLQkJcHJfZGVidWcoIiVzOiBza2lwcGluZyBVTFBTIGNvbmZp ZywgZW5hYmxlPSVkXG4iLAotCQkJX19mdW5jX18sIGVuYWJsZSk7Ci0JCXJldHVybiAwOwotCX0K LQotCW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsKLQot CXJjID0gZHNpX2N0cmxfc2V0X3VscHMobV9jdHJsLT5jdHJsLCBlbmFibGUpOwotCWlmIChyYykg ewotCQlwcl9lcnIoIlVscHMgY29udHJvbGxlciBzdGF0ZSBjaGFuZ2UoJWQpIGZhaWxlZFxuIiwg ZW5hYmxlKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCXJjID0gZHNpX3BoeV9zZXRfdWxwcyhtX2N0 cmwtPnBoeSwgJmRpc3BsYXktPmNvbmZpZywgZW5hYmxlLAotCQkJCWRpc3BsYXktPmNsYW1wX2Vu YWJsZWQpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlVscHMgUEhZIHN0YXRlIGNoYW5nZSglZCkg ZmFpbGVkXG4iLCBlbmFibGUpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8 IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07 Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJY29udGludWU7Ci0K LQkJcmMgPSBkc2lfY3RybF9zZXRfdWxwcyhjdHJsLT5jdHJsLCBlbmFibGUpOwotCQlpZiAocmMp IHsKLQkJCXByX2VycigiVWxwcyBjb250cm9sbGVyIHN0YXRlIGNoYW5nZSglZCkgZmFpbGVkXG4i LAotCQkJCWVuYWJsZSk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQlyYyA9IGRzaV9waHlfc2V0 X3VscHMoY3RybC0+cGh5LCAmZGlzcGxheS0+Y29uZmlnLCBlbmFibGUsCi0JCQkJCWRpc3BsYXkt PmNsYW1wX2VuYWJsZWQpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiVWxwcyBQSFkgc3RhdGUg Y2hhbmdlKCVkKSBmYWlsZWRcbiIsIGVuYWJsZSk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCX0K LQlkaXNwbGF5LT51bHBzX2VuYWJsZWQgPSBlbmFibGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgot ICogZHNpX2Rpc3BsYXlfc2V0X2NsYW1wKCkgLSBzZXQgY2xhbXAgc3RhdGUgZm9yIERTSSBJTy4K LSAqIEBkc2lfZGlzcGxheTogICAgICAgICBEU0kgZGlzcGxheSBoYW5kbGUuCi0gKiBAZW5hYmxl OiAgICAgICAgICAgZW5hYmxlL2Rpc2FibGUgY2xhbXBpbmcuCi0gKgotICogUmV0dXJuOiBlcnJv ciBjb2RlLgotICovCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3NldF9jbGFtcChzdHJ1Y3QgZHNp X2Rpc3BsYXkgKmRpc3BsYXksIGJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0JaW50IGkg PSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJsOwotCWJvb2wgdWxw c19lbmFibGVkID0gZmFsc2U7Ci0KLQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoIkludmFs aWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbV9jdHJsID0gJmRpc3Bs YXktPmN0cmxbZGlzcGxheS0+Y21kX21hc3Rlcl9pZHhdOwotCXVscHNfZW5hYmxlZCA9IGRpc3Bs YXktPnVscHNfZW5hYmxlZDsKLQotCXJjID0gZHNpX2N0cmxfc2V0X2NsYW1wX3N0YXRlKG1fY3Ry bC0+Y3RybCwgZW5hYmxlLCB1bHBzX2VuYWJsZWQpOwotCWlmIChyYykgewotCQlwcl9lcnIoIkRT SSBDbGFtcCBzdGF0ZSBjaGFuZ2UoJWQpIGZhaWxlZFxuIiwgZW5hYmxlKTsKLQkJcmV0dXJuIHJj OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJ Y3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0g bV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfc2V0X2NsYW1wX3N0YXRl KGN0cmwtPmN0cmwsIGVuYWJsZSwgdWxwc19lbmFibGVkKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9l cnIoIkRTSSBDbGFtcCBzdGF0ZSBjaGFuZ2UoJWQpIGZhaWxlZFxuIiwgZW5hYmxlKTsKLQkJCXJl dHVybiByYzsKLQkJfQotCX0KLQlkaXNwbGF5LT5jbGFtcF9lbmFibGVkID0gZW5hYmxlOwotCXJl dHVybiAwOwotfQotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3NldHVwX2N0cmwoKSAtIHNldHVwIERT SSBjb250cm9sbGVyLgotICogQGRzaV9kaXNwbGF5OiAgICAgICAgIERTSSBkaXNwbGF5IGhhbmRs ZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLXN0YXRpYyBpbnQgZHNpX2Rpc3Bs YXlfY3RybF9zZXR1cChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0g MDsKLQlpbnQgaSA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmwsICptX2N0cmw7 Ci0KLQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxheS0+ Y21kX21hc3Rlcl9pZHhdOwotCXJjID0gZHNpX2N0cmxfc2V0dXAobV9jdHJsLT5jdHJsKTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJEU0kgY29udHJvbGxlciBzZXR1cCBmYWlsZWRcbiIpOwotCQly ZXR1cm4gcmM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkr KykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAo Y3RybCA9PSBtX2N0cmwpKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9zZXR1cChj dHJsLT5jdHJsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIkRTSSBjb250cm9sbGVyIHNldHVw IGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcGh5X2VuYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3Bs YXkpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3BoeV9pZGxlX29uKCkgLSBlbmFibGUgRFNJIFBI WSB3aGlsZSBjb21pbmcgb3V0IG9mIGlkbGUgc2NyZWVuLgotICogQGRzaV9kaXNwbGF5OiAgICAg ICAgIERTSSBkaXNwbGF5IGhhbmRsZS4KLSAqIEBlbmFibGU6ICAgICAgICAgICBlbmFibGUvZGlz YWJsZSBEU0kgUEhZLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotc3RhdGljIGlu dCBkc2lfZGlzcGxheV9waHlfaWRsZV9vbihzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0J CWJvb2wgbW1zc19jbGFtcCkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpID0gMDsKLQlzdHJ1Y3Qg ZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQotCi0JaWYgKCFkaXNwbGF5KSB7Ci0J CXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlp ZiAobW1zc19jbGFtcCAmJiAhZGlzcGxheS0+cGh5X2lkbGVfcG93ZXJfb2ZmKSB7Ci0JCWRzaV9k aXNwbGF5X3BoeV9lbmFibGUoZGlzcGxheSk7Ci0JCXJldHVybiAwOwotCX0KLQotCW1fY3RybCA9 ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsKLQlyYyA9IGRzaV9waHlf aWRsZV9jdHJsKG1fY3RybC0+cGh5LCB0cnVlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJEU0kg Y29udHJvbGxlciBzZXR1cCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JZm9yIChp ID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXkt PmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJY29u dGludWU7Ci0KLQkJcmMgPSBkc2lfcGh5X2lkbGVfY3RybChjdHJsLT5waHksIHRydWUpOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiRFNJIGNvbnRyb2xsZXIgc2V0dXAgZmFpbGVkXG4iKTsKLQkJ CXJldHVybiByYzsKLQkJfQotCX0KLQlkaXNwbGF5LT5waHlfaWRsZV9wb3dlcl9vZmYgPSBmYWxz ZTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lfZGlzcGxheV9waHlfaWRsZV9vZmYoKSAt IGRpc2FibGUgRFNJIFBIWSB3aGlsZSBnb2luZyB0byBpZGxlIHNjcmVlbi4KLSAqIEBkc2lfZGlz cGxheTogICAgICAgICBEU0kgZGlzcGxheSBoYW5kbGUuCi0gKiBAZW5hYmxlOiAgICAgICAgICAg ZW5hYmxlL2Rpc2FibGUgRFNJIFBIWS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8K LXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcGh5X2lkbGVfb2ZmKHN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3Bs YXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoIklu dmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFkaXNwbGF5 LT5wYW5lbC0+YWxsb3dfcGh5X3Bvd2VyX29mZikgewotCQlwcl9kZWJ1ZygicGFuZWwgZG9lc24n dCBzdXBwb3J0IHRoaXMgZmVhdHVyZVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCW1fY3RybCA9 ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsKLQotCXJjID0gZHNpX3Bo eV9pZGxlX2N0cmwobV9jdHJsLT5waHksIGZhbHNlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJb JXNdIGZhaWxlZCB0byBlbmFibGUgY21kIGVuZ2luZSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNw bGF5LT5uYW1lLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlz cGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJ aWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQly YyA9IGRzaV9waHlfaWRsZV9jdHJsKGN0cmwtPnBoeSwgZmFsc2UpOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiRFNJIGNvbnRyb2xsZXIgc2V0dXAgZmFpbGVkXG4iKTsKLQkJCXJldHVybiByYzsK LQkJfQotCX0KLQlkaXNwbGF5LT5waHlfaWRsZV9wb3dlcl9vZmYgPSB0cnVlOwotCXJldHVybiAw OwotfQotCi12b2lkIGRzaV9kaXNwbGF5X2VuYWJsZV9ldmVudChzdHJ1Y3QgZHNpX2Rpc3BsYXkg KmRpc3BsYXksCi0JCXVpbnQzMl90IGV2ZW50X2lkeCwgc3RydWN0IGRzaV9ldmVudF9jYl9pbmZv ICpldmVudF9pbmZvLAotCQlib29sIGVuYWJsZSkKLXsKLQl1aW50MzJfdCBpcnFfc3RhdHVzX2lk eCA9IERTSV9TVEFUVVNfSU5URVJSVVBUX0NPVU5UOwotCWludCBpOwotCi0JaWYgKCFkaXNwbGF5 KSB7Ci0JCXByX2VycigiaW52YWxpZCBkaXNwbGF5XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlm IChldmVudF9pbmZvKQotCQlldmVudF9pbmZvLT5ldmVudF9pZHggPSBldmVudF9pZHg7Ci0KLQlz d2l0Y2ggKGV2ZW50X2lkeCkgewotCWNhc2UgRFBVX0NPTk5fRVZFTlRfVklEX0RPTkU6Ci0JCWly cV9zdGF0dXNfaWR4ID0gRFNJX1NJTlRfVklERU9fTU9ERV9GUkFNRV9ET05FOwotCQlicmVhazsK LQljYXNlIERQVV9DT05OX0VWRU5UX0NNRF9ET05FOgotCQlpcnFfc3RhdHVzX2lkeCA9IERTSV9T SU5UX0NNRF9GUkFNRV9ET05FOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBub3RoaW5nIHRv IGRvICovCi0JCXByX2RlYnVnKCJbJXNdIHVuaGFuZGxlZCBldmVudCAlZFxuIiwgZGlzcGxheS0+ bmFtZSwgZXZlbnRfaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChlbmFibGUpIHsKLQkJZm9y IChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykKLQkJCWRzaV9jdHJsX2VuYWJs ZV9zdGF0dXNfaW50ZXJydXB0KAotCQkJCQlkaXNwbGF5LT5jdHJsW2ldLmN0cmwsIGlycV9zdGF0 dXNfaWR4LAotCQkJCQlldmVudF9pbmZvKTsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwg ZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKQotCQkJZHNpX2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50 ZXJydXB0KAotCQkJCQlkaXNwbGF5LT5jdHJsW2ldLmN0cmwsIGlycV9zdGF0dXNfaWR4KTsKLQl9 Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY3RybF9wb3dlcl9vbihzdHJ1Y3QgZHNpX2Rp c3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rp c3BsYXlfY3RybCAqY3RybDsKLQotCS8qIFNlcXVlbmNlIGRvZXMgbm90IG1hdHRlciBmb3Igc3Bs aXQgZHNpIHVzZWNhc2VzICovCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7 IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCkK LQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfc2V0X3Bvd2VyX3N0YXRlKGN0cmwtPmN0 cmwsCi0JCQkJCSAgICAgIERTSV9DVFJMX1BPV0VSX1ZSRUdfT04pOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiWyVzXSBGYWlsZWQgdG8gc2V0IHBvd2VyIHN0YXRlLCByYz0lZFxuIiwKLQkJCSAg ICAgICBjdHJsLT5jdHJsLT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0J cmV0dXJuIHJjOwotZXJyb3I6Ci0JZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWN0 cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsKQotCQkJY29udGludWU7 Ci0JCSh2b2lkKWRzaV9jdHJsX3NldF9wb3dlcl9zdGF0ZShjdHJsLT5jdHJsLAotCQkJRFNJX0NU UkxfUE9XRVJfVlJFR19PRkYpOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNp X2Rpc3BsYXlfY3RybF9wb3dlcl9vZmYoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewot CWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0K LQkvKiBTZXF1ZW5jZSBkb2VzIG5vdCBtYXR0ZXIgZm9yIHNwbGl0IGRzaSB1c2VjYXNlcyAqLwot CWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZk aXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwpCi0JCQljb250aW51ZTsKLQotCQly YyA9IGRzaV9jdHJsX3NldF9wb3dlcl9zdGF0ZShjdHJsLT5jdHJsLAotCQkJRFNJX0NUUkxfUE9X RVJfVlJFR19PRkYpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBGYWlsZWQgdG8gcG93 ZXIgb2ZmLCByYz0lZFxuIiwKLQkJCSAgICAgICBjdHJsLT5jdHJsLT5uYW1lLCByYyk7Ci0JCQln b3RvIGVycm9yOwotCQl9Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9p ZCBkc2lfZGlzcGxheV9wYXJzZV9jbWRsaW5lX3RvcG9sb2d5KHN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheSwKLQkJCQkJdW5zaWduZWQgaW50IGRpc3BsYXlfdHlwZSkKLXsKLQljaGFyICpib290 X3N0ciA9IE5VTEw7Ci0JY2hhciAqc3RyID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOwot Ci0JaWYgKGRpc3BsYXlfdHlwZSA+PSBNQVhfRFNJX0FDVElWRV9ESVNQTEFZKSB7Ci0JCXByX2Vy cigiZGlzcGxheV90eXBlPSVkIG5vdCBzdXBwb3J0ZWRcbiIsIGRpc3BsYXlfdHlwZSk7Ci0JCXJl dHVybjsKLQl9Ci0KLQlpZiAoZGlzcGxheV90eXBlID09IERTSV9QUklNQVJZKQotCQlib290X3N0 ciA9IGRzaV9kaXNwbGF5X3ByaW1hcnk7Ci0JZWxzZQotCQlib290X3N0ciA9IGRzaV9kaXNwbGF5 X3NlY29uZGFyeTsKLQotCXN0ciA9IHN0cm5zdHIoYm9vdF9zdHIsICI6Y29uZmlnIiwgc3RybGVu KGJvb3Rfc3RyKSk7Ci0JaWYgKCFzdHIpCi0JCXJldHVybjsKLQotCWlmIChrc3RydG9sKHN0ciAr IHN0cmxlbigiOmNvbmZpZyIpLCBJTlRfQkFTRV8xMCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZ2 YWx1ZSkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGNvbmZpZyBpbmRleCBvdmVycmlkZTogJXNcbiIs IGJvb3Rfc3RyKTsKLQkJcmV0dXJuOwotCX0KLQlkaXNwbGF5LT5jbWRsaW5lX3RvcG9sb2d5ID0g dmFsdWU7Ci0KLQlzdHIgPSBzdHJuc3RyKGJvb3Rfc3RyLCAiOnRpbWluZyIsIHN0cmxlbihib290 X3N0cikpOwotCWlmICghc3RyKQotCQlyZXR1cm47Ci0KLQlpZiAoa3N0cnRvbChzdHIgKyBzdHJs ZW4oIjp0aW1pbmciKSwgSU5UX0JBU0VfMTAsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmdmFsdWUp KSB7Ci0JCXByX2VycigiaW52YWxpZCB0aW1pbmcgaW5kZXggb3ZlcnJpZGU6ICVzLiByZXNldHRp bmcgYm90aCB0aW1pbmcgYW5kIGNvbmZpZ1xuIiwKLQkJCWJvb3Rfc3RyKTsKLQkJZGlzcGxheS0+ Y21kbGluZV90b3BvbG9neSA9IE5PX09WRVJSSURFOwotCQlyZXR1cm47Ci0JfQotCWRpc3BsYXkt PmNtZGxpbmVfdGltaW5nID0gdmFsdWU7Ci19Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfbmFtZV9j b21wYXJlKCktIGNvbXBhcmUgd2hldGhlciBEU0kgZGlzcGxheSBuYW1lIG1hdGNoZXMuCi0gKiBA bm9kZToJUG9pbnRlciB0byBkZXZpY2Ugbm9kZSBzdHJ1Y3R1cmUKLSAqIEBkaXNwbGF5X25hbWU6 IE5hbWUgb2YgZGlzcGxheSB0byB2YWxpZGF0ZQotICoKLSAqIFJldHVybjoJcmV0dXJucyBhIGJv b2wgc3BlY2lmeWluZyB3aGV0aGVyIGdpdmVuIGRpc3BsYXkgaXMgYWN0aXZlCi0gKi8KLXN0YXRp YyBib29sIGRzaV9kaXNwbGF5X25hbWVfY29tcGFyZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUs Ci0JCQljb25zdCBjaGFyICpkaXNwbGF5X25hbWUsIGludCBpbmRleCkKLXsKLQlpZiAoaW5kZXgg Pj0gTUFYX0RTSV9BQ1RJVkVfRElTUExBWSkgewotCQlwcl9lcnIoIkludmFsaWQgSW5kZXhcbiIp OwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGJvb3RfZGlzcGxheXNbaW5kZXhdLmJvb3Rf ZGlzcF9lbikgewotCQlpZiAoIShzdHJjbXAoJmJvb3RfZGlzcGxheXNbaW5kZXhdLm5hbWVbMF0s IGRpc3BsYXlfbmFtZSkpKSB7Ci0JCQlib290X2Rpc3BsYXlzW2luZGV4XS5ub2RlID0gbm9kZTsK LQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoqCi0gKiBk c2lfZGlzcGxheV9wYXJzZV9ib290X2Rpc3BsYXlfc2VsZWN0aW9uKCktIFBhcnNlIERTSSBib290 IGRpc3BsYXkgbmFtZQotICoKLSAqIFJldHVybjoJcmV0dXJucyBlcnJvciBzdGF0dXMKLSAqLwot c3RhdGljIGludCBkc2lfZGlzcGxheV9wYXJzZV9ib290X2Rpc3BsYXlfc2VsZWN0aW9uKHZvaWQp Ci17Ci0JY2hhciAqcG9zID0gTlVMTDsKLQljaGFyIGRpc3BfYnVmW01BWF9DTURMSU5FX1BBUkFN X0xFTl0gPSB7J1wwJ307Ci0JaW50IGksIGosIG51bV9kaXNwbGF5czsKLQotCWlmIChzdHJsZW4o ZHNpX2Rpc3BsYXlfcHJpbWFyeSkgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKHN0 cmxlbihkc2lfZGlzcGxheV9zZWNvbmRhcnkpID4gMCkpCi0JCW51bV9kaXNwbGF5cyA9IE1BWF9E U0lfQUNUSVZFX0RJU1BMQVk7Ci0JZWxzZSB7Ci0JCS8qCi0JCSAqIEluaXRpYWxpemUgc2Vjb25k YXJ5IGRzaSB2YXJpYWJsZXMKLQkJICogZm9yIHRoZSBzZW5hcmlvIHdoZXJlIGRzaV9kaXNwbGF5 MQotCQkgKiBpcyBudWxsIGJ1dCBkc2lfZGlzcGxheTAgaXMgdmFsaWQKLQkJICovCi0KLQkJLyog TWF4IG51bWJlciBvZiBkaXNwbGF5cyB3aWxsIGJlIG9uZS0+b25seSBQcmltYXJ5ICovCi0JCW51 bV9kaXNwbGF5cyA9IDE7Ci0JCWJvb3RfZGlzcGxheXNbRFNJX1NFQ09OREFSWV0uaXNfcHJpbWFy eSA9IGZhbHNlOwotCQlib290X2Rpc3BsYXlzW0RTSV9TRUNPTkRBUlldLm5hbWVbMF0gPSAnXDAn OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBudW1fZGlzcGxheXM7IGkrKykgewotCQlib290X2Rp c3BsYXlzW2ldLmlzX3ByaW1hcnkgPSBmYWxzZTsKLQkJaWYgKGkgPT0gRFNJX1BSSU1BUlkpIHsK LQkJCXN0cmxjcHkoZGlzcF9idWYsICZkc2lfZGlzcGxheV9wcmltYXJ5WzBdLAotCQkJCXNpemVv Zihkc2lfZGlzcGxheV9wcmltYXJ5KSk7Ci0JCQlwb3MgPSBzdHJuc3RyKGRpc3BfYnVmLCAiOiIs Ci0JCQkJc2l6ZW9mKGRzaV9kaXNwbGF5X3ByaW1hcnkpKTsKLQkJfSBlbHNlIHsKLQkJCXN0cmxj cHkoZGlzcF9idWYsICZkc2lfZGlzcGxheV9zZWNvbmRhcnlbMF0sCi0JCQkJc2l6ZW9mKGRzaV9k aXNwbGF5X3NlY29uZGFyeSkpOwotCQkJcG9zID0gc3RybnN0cihkaXNwX2J1ZiwgIjoiLAotCQkJ CXNpemVvZihkc2lfZGlzcGxheV9zZWNvbmRhcnkpKTsKLQkJfQotCQkvKiBVc2UgJzonIGFzIGEg ZGVsaW1pdGVyIHRvIHJldHJpZXZlIHRoZSBkaXNwbGF5IG5hbWUgKi8KLQkJaWYgKCFwb3MpIHsK LQkJCXByX2RlYnVnKCJkaXNwbGF5IG5hbWVbJXNdaXMgbm90IHZhbGlkXG4iLCBkaXNwX2J1Zik7 Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWZvciAoaiA9IDA7IChkaXNwX2J1ZiArIGopIDwgcG9z OyBqKyspCi0JCQlib290X2Rpc3BsYXlzW2ldLm5hbWVbal0gPSAqKGRpc3BfYnVmICsgaik7Ci0J CWJvb3RfZGlzcGxheXNbaV0ubmFtZVtqXSA9ICdcMCc7Ci0KLQkJaWYgKGkgPT0gRFNJX1BSSU1B UlkpIHsKLQkJCWJvb3RfZGlzcGxheXNbaV0uaXNfcHJpbWFyeSA9IHRydWU7Ci0JCQkvKiBDdXJy ZW50bHksIHNlY29uZGFyeSBEU0kgZGlzcGxheSBpcyBub3Qgc3VwcG9ydGVkICovCi0JCQlib290 X2Rpc3BsYXlzW2ldLmJvb3RfZGlzcF9lbiA9IHRydWU7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19 Ci0KLS8qKgotICogdmFsaWRhdGVfZHNpX2Rpc3BsYXlfc2VsZWN0aW9uKCktIHZhbGlkYXRlIGJv b3QgRFNJIGRpc3BsYXkgc2VsZWN0aW9uCi0gKgotICogUmV0dXJuOglyZXR1cm5zIHRydWUgd2hl biBib3RoIGRpc3BsYXlzIGhhdmUgdW5pcXVlIGNvbmZpZ3VyYXRpb25zCi0gKi8KLXN0YXRpYyBi b29sIHZhbGlkYXRlX2RzaV9kaXNwbGF5X3NlbGVjdGlvbih2b2lkKQotewotCWludCBpLCBqOwot CWludCByYyA9IDA7Ci0JaW50IHBoeV9jb3VudCA9IDA7Ci0JaW50IGN0cmxfY291bnQgPSAwOwot CWludCBpbmRleCA9IDA7Ci0JYm9vbCBjdHJsX2ZsYWdzW01BWF9EU0lfQUNUSVZFX0RJU1BMQVld ID0ge2ZhbHNlLCBmYWxzZX07Ci0JYm9vbCBwaHlfZmxhZ3NbTUFYX0RTSV9BQ1RJVkVfRElTUExB WV0gPSB7ZmFsc2UsIGZhbHNlfTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsICpjdHJsX25v ZGUsICpwaHlfbm9kZTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfRFNJX0FDVElWRV9ESVNQTEFZ OyBpKyspIHsKLQkJbm9kZSA9IGJvb3RfZGlzcGxheXNbaV0ubm9kZTsKLQkJY3RybF9jb3VudCA9 IG9mX2NvdW50X3BoYW5kbGVfd2l0aF9hcmdzKG5vZGUsICJxY29tLGRzaS1jdHJsIiwKLQkJCQkJ CQkJTlVMTCk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IGN0cmxfY291bnQ7IGorKykgewotCQkJY3Ry bF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShub2RlLCAicWNvbSxkc2ktY3RybCIsIGopOwotCQkJ cmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihjdHJsX25vZGUsICJjZWxsLWluZGV4IiwKLQkJCQkJ JmluZGV4KTsKLQkJCW9mX25vZGVfcHV0KGN0cmxfbm9kZSk7Ci0JCQlpZiAocmMpIHsKLQkJCQlw cl9lcnIoImNlbGwgaW5kZXggbm90IHNldCBmb3IgY3RybF9ub2Rlc1xuIik7Ci0JCQkJcmV0dXJu IGZhbHNlOwotCQkJfQotCQkJaWYgKGN0cmxfZmxhZ3NbaW5kZXhdKQotCQkJCXJldHVybiBmYWxz ZTsKLQkJCWN0cmxfZmxhZ3NbaW5kZXhdID0gdHJ1ZTsKLQkJfQotCi0JCXBoeV9jb3VudCA9IG9m X2NvdW50X3BoYW5kbGVfd2l0aF9hcmdzKG5vZGUsICJxY29tLGRzaS1waHkiLAotCQkJCQkJCQlO VUxMKTsKLQkJZm9yIChqID0gMDsgaiA8IHBoeV9jb3VudDsgaisrKSB7Ci0JCQlwaHlfbm9kZSA9 IG9mX3BhcnNlX3BoYW5kbGUobm9kZSwgInFjb20sZHNpLXBoeSIsIGopOwotCQkJcmMgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMihwaHlfbm9kZSwgImNlbGwtaW5kZXgiLAotCQkJCQkmaW5kZXgpOwot CQkJb2Zfbm9kZV9wdXQocGh5X25vZGUpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJjZWxs IGluZGV4IG5vdCBzZXQgcGh5X25vZGVzXG4iKTsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0J CQlpZiAocGh5X2ZsYWdzW2luZGV4XSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQlwaHlfZmxhZ3Nb aW5kZXhdID0gdHJ1ZTsKLQkJfQotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RydWN0IGRldmlj ZV9ub2RlICpkc2lfZGlzcGxheV9nZXRfYm9vdF9kaXNwbGF5KGludCBpbmRleCkKLXsKLQotCXBy X2VycigiaW5kZXggPSAlZFxuIiwgaW5kZXgpOwotCi0JaWYgKGJvb3RfZGlzcGxheXNbaW5kZXhd Lm5vZGUpCi0JCXJldHVybiBib290X2Rpc3BsYXlzW2luZGV4XS5ub2RlOwotCWVsc2UgaWYgKChp bmRleCA9PSAoTUFYX0RTSV9BQ1RJVkVfRElTUExBWSAtIDEpKQotCQkJJiYgKGRlZmF1bHRfYWN0 aXZlX25vZGUpKQotCQlyZXR1cm4gZGVmYXVsdF9hY3RpdmVfbm9kZTsKLQllbHNlCi0JCXJldHVy biBOVUxMOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BoeV9wb3dlcl9vbihzdHJ1Y3Qg ZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3Qg ZHNpX2Rpc3BsYXlfY3RybCAqY3RybDsKLQotCS8qIFNlcXVlbmNlIGRvZXMgbm90IG1hdHRlciBm b3Igc3BsaXQgZHNpIHVzZWNhc2VzICovCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxf Y291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+ Y3RybCkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX3BoeV9zZXRfcG93ZXJfc3RhdGUoY3Ry bC0+cGh5LCB0cnVlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gRmFpbGVkIHRvIHNl dCBwb3dlciBzdGF0ZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgY3RybC0+cGh5LT5uYW1lLCByYyk7 Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotZXJyb3I6Ci0JZm9yIChp ID0gaSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJ aWYgKCFjdHJsLT5waHkpCi0JCQljb250aW51ZTsKLQkJKHZvaWQpZHNpX3BoeV9zZXRfcG93ZXJf c3RhdGUoY3RybC0+cGh5LCBmYWxzZSk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCBkc2lfZGlzcGxheV9waHlfcG93ZXJfb2ZmKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkK LXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJs OwotCi0JLyogU2VxdWVuY2UgZG9lcyBub3QgbWF0dGVyIGZvciBzcGxpdCBkc2kgdXNlY2FzZXMg Ki8KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwg PSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5waHkpCi0JCQljb250aW51ZTsKLQot CQlyYyA9IGRzaV9waHlfc2V0X3Bvd2VyX3N0YXRlKGN0cmwtPnBoeSwgZmFsc2UpOwotCQlpZiAo cmMpIHsKLQkJCXByX2VycigiWyVzXSBGYWlsZWQgdG8gcG93ZXIgb2ZmLCByYz0lZFxuIiwKLQkJ CSAgICAgICBjdHJsLT5jdHJsLT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQot ZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3NldF9jbGtf c3JjKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBp OwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJsOwotCi0JLyoKLQkgKiBJ biBjYXNlIG9mIHNwbGl0IERTSSB1c2VjYXNlcywgdGhlIGNsb2NrIGZvciBtYXN0ZXIgY29udHJv bGxlciBzaG91bGQKLQkgKiBiZSBlbmFibGVkIGJlZm9yZSB0aGUgb3RoZXIgY29udHJvbGxlci4g TWFzdGVyIGNvbnRyb2xsZXIgaW4gdGhlCi0JICogY2xvY2sgY29udGV4dCByZWZlcnMgdG8gdGhl IGNvbnRyb2xsZXIgdGhhdCBzb3VyY2VzIHRoZSBjbG9jay4KLQkgKi8KLQltX2N0cmwgPSAmZGlz cGxheS0+Y3RybFtkaXNwbGF5LT5jbGtfbWFzdGVyX2lkeF07Ci0KLQlyYyA9IGRzaV9jdHJsX3Nl dF9jbG9ja19zb3VyY2UobV9jdHJsLT5jdHJsLAotCQkgICAmZGlzcGxheS0+Y2xvY2tfaW5mby5z cmNfY2xrcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2V0IHNvdXJj ZSBjbG9ja3MgZm9yIG1hc3RlciwgcmM9JWRcbiIsCi0JCQkgICBkaXNwbGF5LT5uYW1lLCByYyk7 Ci0JCXJldHVybiByYzsKLQl9Ci0KLQkvKiBUdXJuIG9uIHJlc3Qgb2YgdGhlIGNvbnRyb2xsZXJz ICovCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJs ID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0 cmwpKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9zZXRfY2xvY2tfc291cmNlKGN0 cmwtPmN0cmwsCi0JCQkgICAmZGlzcGxheS0+Y2xvY2tfaW5mby5zcmNfY2xrcyk7Ci0JCWlmIChy YykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQgc291cmNlIGNsb2NrcywgcmM9JWRc biIsCi0JCQkJICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQot CXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BoeV9yZXNldF9jb25maWco c3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQlib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMg PSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCi0JZm9yIChp ID0gMCA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5 LT5jdHJsW2ldOwotCQlyYyA9IGRzaV9jdHJsX3BoeV9yZXNldF9jb25maWcoY3RybC0+Y3RybCwg ZW5hYmxlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvICVzIHBoeSBy ZXNldCwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgZW5hYmxlID8gIm1hc2si IDogInVubWFzayIsIHJjKTsKLQkJCXJldHVybiByYzsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCBkc2lfZGlzcGxheV9jdHJsX3VwZGF0ZShzdHJ1Y3QgZHNpX2Rpc3BsYXkg KmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlf Y3RybCAqY3RybDsKLQotCWZvciAoaSA9IDAgOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsr KSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJcmMgPSBkc2lfY3RybF9ob3N0X3Rp bWluZ191cGRhdGUoY3RybC0+Y3RybCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byB1cGRhdGUgaG9zdF8lZCwgcmM9JWRcbiIsCi0JCQkJICAgZGlzcGxheS0+bmFtZSwg aSwgcmMpOwotCQkJZ290byBlcnJvcl9ob3N0X2RlaW5pdDsKLQkJfQotCX0KLQotCXJldHVybiAw OwotZXJyb3JfaG9zdF9kZWluaXQ6Ci0JZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0J CWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJKHZvaWQpZHNpX2N0cmxfaG9zdF9kZWluaXQo Y3RybC0+Y3RybCk7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNw bGF5X2N0cmxfaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0g MDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqY3RybDsKLQotCWZvciAoaSA9 IDAgOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+ Y3RybFtpXTsKLQkJcmMgPSBkc2lfY3RybF9ob3N0X2luaXQoY3RybC0+Y3RybCk7Ci0JCWlmIChy YykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBpbml0IGhvc3RfJWQsIHJjPSVkXG4iLAot CQkJICAgICAgIGRpc3BsYXktPm5hbWUsIGksIHJjKTsKLQkJCWdvdG8gZXJyb3JfaG9zdF9kZWlu aXQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLWVycm9yX2hvc3RfZGVpbml0OgotCWZvciAoaSA9 IGkgLSAxOyBpID49IDA7IGktLSkgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCSh2 b2lkKWRzaV9jdHJsX2hvc3RfZGVpbml0KGN0cmwtPmN0cmwpOwotCX0KLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY3RybF9kZWluaXQoc3RydWN0IGRzaV9kaXNwbGF5 ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5 X2N0cmwgKmN0cmw7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkr KykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCXJjID0gZHNpX2N0cmxfaG9zdF9k ZWluaXQoY3RybC0+Y3RybCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBkZWluaXQgaG9zdF8lZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgaSwg cmMpOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5 X2NtZF9lbmdpbmVfZW5hYmxlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQg cmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJs OwotCi0JaWYgKGRpc3BsYXktPmNtZF9lbmdpbmVfcmVmY291bnQgPiAwKSB7Ci0JCWRpc3BsYXkt PmNtZF9lbmdpbmVfcmVmY291bnQrKzsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbV9jdHJsID0gJmRp c3BsYXktPmN0cmxbZGlzcGxheS0+Y21kX21hc3Rlcl9pZHhdOwotCi0JcmMgPSBkc2lfY3RybF9z ZXRfY21kX2VuZ2luZV9zdGF0ZShtX2N0cmwtPmN0cmwsIERTSV9DVFJMX0VOR0lORV9PTik7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIGNtZCBlbmdpbmUsIHJj PSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0K LQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9 ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJs KSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfc2V0X2NtZF9lbmdpbmVfc3RhdGUo Y3RybC0+Y3RybCwKLQkJCQkJCSAgIERTSV9DVFJMX0VOR0lORV9PTik7Ci0JCWlmIChyYykgewot CQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFibGUgY21kIGVuZ2luZSwgcmM9JWRcbiIsCi0J CQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX21hc3Rl cjsKLQkJfQotCX0KLQotCWRpc3BsYXktPmNtZF9lbmdpbmVfcmVmY291bnQrKzsKLQlyZXR1cm4g cmM7Ci1lcnJvcl9kaXNhYmxlX21hc3RlcjoKLQkodm9pZClkc2lfY3RybF9zZXRfY21kX2VuZ2lu ZV9zdGF0ZShtX2N0cmwtPmN0cmwsIERTSV9DVFJMX0VOR0lORV9PRkYpOwotZXJyb3I6Ci0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2NtZF9lbmdpbmVfZGlzYWJsZShz dHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlz dHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQotCWlmIChkaXNwbGF5LT5j bWRfZW5naW5lX3JlZmNvdW50ID09IDApIHsKLQkJcHJfZXJyKCJbJXNdIEludmFsaWQgcmVmY291 bnRcbiIsIGRpc3BsYXktPm5hbWUpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKGRpc3BsYXkt PmNtZF9lbmdpbmVfcmVmY291bnQgPiAxKSB7Ci0JCWRpc3BsYXktPmNtZF9lbmdpbmVfcmVmY291 bnQtLTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxh eS0+Y21kX21hc3Rlcl9pZHhdOwotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50 OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwg fHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfc2V0 X2NtZF9lbmdpbmVfc3RhdGUoY3RybC0+Y3RybCwKLQkJCQkJCSAgIERTSV9DVFJMX0VOR0lORV9P RkYpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBjbWQgZW5n aW5lLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JfQotCi0JcmMg PSBkc2lfY3RybF9zZXRfY21kX2VuZ2luZV9zdGF0ZShtX2N0cmwtPmN0cmwsIERTSV9DVFJMX0VO R0lORV9PRkYpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBj bWQgZW5naW5lLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCWRpc3BsYXktPmNtZF9lbmdpbmVfcmVmY291bnQgPSAw OwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9jdHJsX2hvc3RfZW5h YmxlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBp OwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJsOwotCi0JbV9jdHJsID0g JmRpc3BsYXktPmN0cmxbZGlzcGxheS0+Y21kX21hc3Rlcl9pZHhdOwotCi0JcmMgPSBkc2lfY3Ry bF9zZXRfaG9zdF9lbmdpbmVfc3RhdGUobV9jdHJsLT5jdHJsLCBEU0lfQ1RSTF9FTkdJTkVfT04p OwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBob3N0IGVuZ2lu ZSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7 Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQlj dHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBt X2N0cmwpKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9zZXRfaG9zdF9lbmdpbmVf c3RhdGUoY3RybC0+Y3RybCwKLQkJCQkJCSAgICBEU0lfQ1RSTF9FTkdJTkVfT04pOwotCQlpZiAo cmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIHNsIGhvc3QgZW5naW5lLCBy Yz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rp c2FibGVfbWFzdGVyOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotZXJyb3JfZGlzYWJsZV9tYXN0 ZXI6Ci0JKHZvaWQpZHNpX2N0cmxfc2V0X2hvc3RfZW5naW5lX3N0YXRlKG1fY3RybC0+Y3RybCwg RFNJX0NUUkxfRU5HSU5FX09GRik7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX2Rpc3BsYXlfY3RybF9ob3N0X2Rpc2FibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNw bGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwg Km1fY3RybCwgKmN0cmw7Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRf bWFzdGVyX2lkeF07Ci0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykg ewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3Ry bCA9PSBtX2N0cmwpKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9zZXRfaG9zdF9l bmdpbmVfc3RhdGUoY3RybC0+Y3RybCwKLQkJCQkJCSAgICBEU0lfQ1RSTF9FTkdJTkVfT0ZGKTsK LQkJaWYgKHJjKQotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIGhvc3QgZW5naW5l LCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JfQotCi0JcmMgPSBk c2lfY3RybF9zZXRfaG9zdF9lbmdpbmVfc3RhdGUobV9jdHJsLT5jdHJsLCBEU0lfQ1RSTF9FTkdJ TkVfT0ZGKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIGhv c3QgZW5naW5lLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lf ZGlzcGxheV92aWRfZW5naW5lX2VuYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17 Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJs LCAqY3RybDsKLQotCW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPnZpZGVvX21hc3Rl cl9pZHhdOwotCi0JcmMgPSBkc2lfY3RybF9zZXRfdmlkX2VuZ2luZV9zdGF0ZShtX2N0cmwtPmN0 cmwsIERTSV9DVFJMX0VOR0lORV9PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWls ZWQgdG8gZW5hYmxlIHZpZCBlbmdpbmUsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFt ZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5j dHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0 cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNp X2N0cmxfc2V0X3ZpZF9lbmdpbmVfc3RhdGUoY3RybC0+Y3RybCwKLQkJCQkJCSAgIERTSV9DVFJM X0VOR0lORV9PTik7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFi bGUgdmlkIGVuZ2luZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwot CQkJZ290byBlcnJvcl9kaXNhYmxlX21hc3RlcjsKLQkJfQotCX0KLQotCXJldHVybiByYzsKLWVy cm9yX2Rpc2FibGVfbWFzdGVyOgotCSh2b2lkKWRzaV9jdHJsX3NldF92aWRfZW5naW5lX3N0YXRl KG1fY3RybC0+Y3RybCwgRFNJX0NUUkxfRU5HSU5FX09GRik7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfdmlkX2VuZ2luZV9kaXNhYmxlKHN0cnVjdCBk c2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBk c2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJsOwotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0 cmxbZGlzcGxheS0+dmlkZW9fbWFzdGVyX2lkeF07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxh eS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYg KCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQlyYyA9 IGRzaV9jdHJsX3NldF92aWRfZW5naW5lX3N0YXRlKGN0cmwtPmN0cmwsCi0JCQkJCQkgICBEU0lf Q1RSTF9FTkdJTkVfT0ZGKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBk aXNhYmxlIHZpZCBlbmdpbmUsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJj KTsKLQl9Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF92aWRfZW5naW5lX3N0YXRlKG1fY3RybC0+Y3Ry bCwgRFNJX0NUUkxfRU5HSU5FX09GRik7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVk IHRvIGRpc2FibGUgbXZpZCBlbmdpbmUsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFt ZSwgcmMpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BoeV9l bmFibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50 IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3RybCwgKmN0cmw7Ci0JZW51bSBkc2lf cGh5X3BsbF9zb3VyY2UgbV9zcmMgPSBEU0lfUExMX1NPVVJDRV9TVEFOREFMT05FOwotCi0JbV9j dHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxheS0+Y2xrX21hc3Rlcl9pZHhdOwotCWlmIChkaXNw bGF5LT5jdHJsX2NvdW50ID4gMSkKLQkJbV9zcmMgPSBEU0lfUExMX1NPVVJDRV9OQVRJVkU7Ci0K LQlyYyA9IGRzaV9waHlfZW5hYmxlKG1fY3RybC0+cGh5LAotCQkJICAgICZkaXNwbGF5LT5jb25m aWcsCi0JCQkgICAgbV9zcmMsCi0JCQkgICAgdHJ1ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gZW5hYmxlIERTSSBQSFksIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxh eS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNw bGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlp ZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJj ID0gZHNpX3BoeV9lbmFibGUoY3RybC0+cGh5LAotCQkJCSAgICAmZGlzcGxheS0+Y29uZmlnLAot CQkJCSAgICBEU0lfUExMX1NPVVJDRV9OT05fTkFUSVZFLAotCQkJCSAgICB0cnVlKTsKLQkJaWYg KHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBEU0kgUEhZLCByYz0lZFxu IiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVf bWFzdGVyOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotCi1lcnJvcl9kaXNhYmxlX21hc3RlcjoK LQkodm9pZClkc2lfcGh5X2Rpc2FibGUobV9jdHJsLT5waHkpOwotZXJyb3I6Ci0JcmV0dXJuIHJj OwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BoeV9kaXNhYmxlKHN0cnVjdCBkc2lfZGlz cGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlz cGxheV9jdHJsICptX2N0cmwsICpjdHJsOwotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlz cGxheS0+Y2xrX21hc3Rlcl9pZHhdOwotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxf Y291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+ Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfcGh5 X2Rpc2FibGUoY3RybC0+cGh5KTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBkaXNhYmxlIERTSSBQSFksIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJj KTsKLQl9Ci0KLQlyYyA9IGRzaV9waHlfZGlzYWJsZShtX2N0cmwtPnBoeSk7Ci0JaWYgKHJjKQot CQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgRFNJIFBIWSwgcmM9JWRcbiIsCi0JCSAg ICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQg ZHNpX2Rpc3BsYXlfd2FrZV91cChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfYnJvYWRjYXN0X2NtZChzdHJ1Y3Qg ZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNn ICptc2cpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgZmxhZ3MsIG1fZmxhZ3M7Ci0Jc3RydWN0IGRz aV9kaXNwbGF5X2N0cmwgKmN0cmwsICptX2N0cmw7Ci0JaW50IGk7Ci0KLQltX2ZsYWdzID0gKERT SV9DVFJMX0NNRF9CUk9BRENBU1QgfCBEU0lfQ1RSTF9DTURfQlJPQURDQVNUX01BU1RFUiB8Ci0J CSAgIERTSV9DVFJMX0NNRF9ERUZFUl9UUklHR0VSIHwgRFNJX0NUUkxfQ01EX0ZFVENIX01FTU9S WSk7Ci0JZmxhZ3MgPSAoRFNJX0NUUkxfQ01EX0JST0FEQ0FTVCB8IERTSV9DVFJMX0NNRF9ERUZF Ul9UUklHR0VSIHwKLQkJIERTSV9DVFJMX0NNRF9GRVRDSF9NRU1PUlkpOwotCi0JLyoKLQkgKiAx LiBTZXR1cCBjb21tYW5kcyBpbiBGSUZPCi0JICogMi4gVHJpZ2dlciBjb21tYW5kcwotCSAqLwot CW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsKLQlyYyA9 IGRzaV9jdHJsX2NtZF90cmFuc2ZlcihtX2N0cmwtPmN0cmwsIG1zZywgbV9mbGFncyk7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiWyVzXSBjbWQgdHJhbnNmZXIgZmFpbGVkIG9uIG1hc3RlcixyYz0l ZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0K LQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAm ZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKGN0cmwgPT0gbV9jdHJsKQotCQkJY29udGludWU7Ci0K LQkJcmMgPSBkc2lfY3RybF9jbWRfdHJhbnNmZXIoY3RybC0+Y3RybCwgbXNnLCBmbGFncyk7Ci0J CWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGNtZCB0cmFuc2ZlciBmYWlsZWQsIHJjPSVkXG4i LAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQot CQlyYyA9IGRzaV9jdHJsX2NtZF90eF90cmlnZ2VyKGN0cmwtPmN0cmwsIGZsYWdzKTsKLQkJaWYg KHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gY21kIHRyaWdnZXIgZmFpbGVkLCByYz0lZFxuIiwKLQkJ CSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0J cmMgPSBkc2lfY3RybF9jbWRfdHhfdHJpZ2dlcihtX2N0cmwtPmN0cmwsIG1fZmxhZ3MpOwotCWlm IChyYykgewotCQlwcl9lcnIoIlslc10gY21kIHRyaWdnZXIgZmFpbGVkIGZvciBtYXN0ZXIsIHJj PSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0K LQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BoeV9z d19yZXNldChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlp bnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQotCW1fY3Ry bCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsKLQotCXJjID0gZHNp X2N0cmxfcGh5X3N3X3Jlc2V0KG1fY3RybC0+Y3RybCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gcmVzZXQgcGh5LCByYz0lZFxuIiwgZGlzcGxheS0+bmFtZSwgcmMpOwot CQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50 OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwg fHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfcGh5 X3N3X3Jlc2V0KGN0cmwtPmN0cmwpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWls ZWQgdG8gcmVzZXQgcGh5LCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7 Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0 YXRpYyBpbnQgZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAotCQkJ ICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQotewotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgaW50IGRzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKLQkJCSAg IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IHNzaXplX3QgZHNpX2hvc3RfdHJhbnNmZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCi0J CQkJIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3Bs YXkgKmRpc3BsYXkgPSB0b19kc2lfZGlzcGxheShob3N0KTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlf Y3RybCAqZGlzcGxheV9jdHJsOwotCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFj ZSA9IE5VTEw7Ci0JaW50IHJjID0gMCwgY250ID0gMDsKLQotCWlmICghaG9zdCB8fCAhbXNnKSB7 Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyYyA9 IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0FM TF9DTEtTLCBEU0lfQ0xLX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBlbmFibGUgYWxsIERTSSBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFt ZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfd2FrZV91cChk aXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byB3YWtlIHVwIGRp c3BsYXksIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVy cm9yX2Rpc2FibGVfY2xrczsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2NtZF9lbmdpbmVfZW5h YmxlKGRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJs ZSBjbWQgZW5naW5lLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJ Z290byBlcnJvcl9kaXNhYmxlX2Nsa3M7Ci0JfQotCi0JaWYgKGRpc3BsYXktPnR4X2NtZF9idWYg PT0gTlVMTCkgewotCQlkaXNwbGF5LT50eF9jbWRfYnVmID0gbXNtX2dlbV9uZXcoZGlzcGxheS0+ ZHJtX2RldiwKLQkJCQlTWl80SywKLQkJCQlNU01fQk9fVU5DQUNIRUQpOwotCi0JCWRpc3BsYXkt PmNtZF9idWZmZXJfc2l6ZSA9IFNaXzRLOwotCi0JCWlmICgoZGlzcGxheS0+dHhfY21kX2J1Zikg PT0gTlVMTCkgewotCQkJcHJfZXJyKCJ2YWx1ZSBvZiBkaXNwbGF5LT50eF9jbWRfYnVmIGlzIE5V TEwiKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9jbWRfZW5naW5lOwotCQl9Ci0KLQkJYXNwYWNl ID0gbXNtX2dlbV9zbW11X2FkZHJlc3Nfc3BhY2VfZ2V0KGRpc3BsYXktPmRybV9kZXYsCi0JCQkJ TVNNX1NNTVVfRE9NQUlOX1VOU0VDVVJFKTsKLQkJaWYgKCFhc3BhY2UpIHsKLQkJCXByX2Vycigi ZmFpbGVkIHRvIGdldCBhc3BhY2VcbiIpOwotCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBmcmVl X2dlbTsKLQkJfQotCi0JCXJjID0gbXNtX2dlbV9nZXRfaW92YShkaXNwbGF5LT50eF9jbWRfYnVm LCBhc3BhY2UsCi0JCQkJCSYoZGlzcGxheS0+Y21kX2J1ZmZlcl9pb3ZhKSk7Ci0JCWlmIChyYykg ewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHRoZSBpb3ZhIHJjICVkXG4iLCByYyk7Ci0JCQln b3RvIGZyZWVfZ2VtOwotCQl9Ci0KLQkJZGlzcGxheS0+dmFkZHIgPQotCQkJKHZvaWQgKikgbXNt X2dlbV9nZXRfdmFkZHIoZGlzcGxheS0+dHhfY21kX2J1Zik7Ci0KLQkJaWYgKElTX0VSUl9PUl9O VUxMKGRpc3BsYXktPnZhZGRyKSkgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHZhIHJjICVk XG4iLCByYyk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHB1dF9pb3ZhOwotCQl9Ci0KLQkJ Zm9yIChjbnQgPSAwOyBjbnQgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBjbnQrKykgewotCQkJZGlz cGxheV9jdHJsID0gJmRpc3BsYXktPmN0cmxbY250XTsKLQkJCWRpc3BsYXlfY3RybC0+Y3RybC0+ Y21kX2J1ZmZlcl9zaXplID0gU1pfNEs7Ci0JCQlkaXNwbGF5X2N0cmwtPmN0cmwtPmNtZF9idWZm ZXJfaW92YSA9Ci0JCQkJCQlkaXNwbGF5LT5jbWRfYnVmZmVyX2lvdmE7Ci0JCQlkaXNwbGF5X2N0 cmwtPmN0cmwtPnZhZGRyID0gZGlzcGxheS0+dmFkZHI7Ci0JCX0KLQl9Ci0KLQlpZiAoZGlzcGxh eS0+Y3RybF9jb3VudCA+IDEgJiYgIShtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1VOSUNBU1Qp KSB7Ci0JCXJjID0gZHNpX2Rpc3BsYXlfYnJvYWRjYXN0X2NtZChkaXNwbGF5LCBtc2cpOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBjbWQgYnJvYWRjYXN0IGZhaWxlZCwgcmM9JWRcbiIs Ci0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX2Nt ZF9lbmdpbmU7Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgY3RybF9pZHggPSAobXNnLT5mbGFncyAm IE1JUElfRFNJX01TR19VTklDQVNUKSA/Ci0JCQkJbXNnLT5jdHJsIDogMDsKLQotCQlyYyA9IGRz aV9jdHJsX2NtZF90cmFuc2ZlcihkaXNwbGF5LT5jdHJsW2N0cmxfaWR4XS5jdHJsLCBtc2csCi0J CQkJCSAgRFNJX0NUUkxfQ01EX0ZFVENIX01FTU9SWSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJy KCJbJXNdIGNtZCB0cmFuc2ZlciBmYWlsZWQsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXkt Pm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9jbWRfZW5naW5lOwotCQl9Ci0JfQot Ci1lcnJvcl9kaXNhYmxlX2NtZF9lbmdpbmU6Ci0JKHZvaWQpZHNpX2Rpc3BsYXlfY21kX2VuZ2lu ZV9kaXNhYmxlKGRpc3BsYXkpOwotZXJyb3JfZGlzYWJsZV9jbGtzOgotCXJjID0gZHNpX2Rpc3Bs YXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQUxMX0NMS1MsIERT SV9DTEtfT0ZGKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxl IGFsbCBEU0kgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsK LQl9Ci0JcmV0dXJuIHJjOwotcHV0X2lvdmE6Ci0JbXNtX2dlbV9wdXRfaW92YShkaXNwbGF5LT50 eF9jbWRfYnVmLCBhc3BhY2UpOwotZnJlZV9nZW06Ci0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZHJt X2Rldi0+c3RydWN0X211dGV4KTsKLQltc21fZ2VtX2ZyZWVfb2JqZWN0KGRpc3BsYXktPnR4X2Nt ZF9idWYpOwotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ZHJtX2Rldi0+c3RydWN0X211dGV4KTsK LWVycm9yOgotCXJldHVybiByYzsKLX0KLQotCi1zdGF0aWMgc3RydWN0IG1pcGlfZHNpX2hvc3Rf b3BzIGRzaV9ob3N0X29wcyA9IHsKLQkuYXR0YWNoID0gZHNpX2hvc3RfYXR0YWNoLAotCS5kZXRh Y2ggPSBkc2lfaG9zdF9kZXRhY2gsCi0JLnRyYW5zZmVyID0gZHNpX2hvc3RfdHJhbnNmZXIsCi19 OwotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X21pcGlfaG9zdF9pbml0KHN0cnVjdCBkc2lfZGlz cGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBtaXBpX2RzaV9ob3N0ICpo b3N0ID0gJmRpc3BsYXktPmhvc3Q7Ci0KLQlob3N0LT5kZXYgPSAmZGlzcGxheS0+cGRldi0+ZGV2 OwotCWhvc3QtPm9wcyA9ICZkc2lfaG9zdF9vcHM7Ci0KLQlyYyA9IG1pcGlfZHNpX2hvc3RfcmVn aXN0ZXIoaG9zdCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcmVnaXN0 ZXIgbWlwaSBkc2kgaG9zdCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci1zdGF0aWMgaW50 IGRzaV9kaXNwbGF5X21pcGlfaG9zdF9kZWluaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5 KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QgPSAmZGlzcGxh eS0+aG9zdDsKLQotCW1pcGlfZHNpX2hvc3RfdW5yZWdpc3Rlcihob3N0KTsKLQotCWhvc3QtPmRl diA9IE5VTEw7Ci0JaG9zdC0+b3BzID0gTlVMTDsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGlj IGludCBkc2lfZGlzcGxheV9jbG9ja3NfZGVpbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxh eSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0ICpzcmMgPSAmZGlz cGxheS0+Y2xvY2tfaW5mby5zcmNfY2xrczsKLQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqbXV4 ID0gJmRpc3BsYXktPmNsb2NrX2luZm8ubXV4X2Nsa3M7Ci0Jc3RydWN0IGRzaV9jbGtfbGlua19z ZXQgKnNoYWRvdyA9ICZkaXNwbGF5LT5jbG9ja19pbmZvLnNoYWRvd19jbGtzOwotCi0JaWYgKHNy Yy0+Ynl0ZV9jbGspIHsKLQkJZGV2bV9jbGtfcHV0KCZkaXNwbGF5LT5wZGV2LT5kZXYsIHNyYy0+ Ynl0ZV9jbGspOwotCQlzcmMtPmJ5dGVfY2xrID0gTlVMTDsKLQl9Ci0KLQlpZiAoc3JjLT5waXhl bF9jbGspIHsKLQkJZGV2bV9jbGtfcHV0KCZkaXNwbGF5LT5wZGV2LT5kZXYsIHNyYy0+cGl4ZWxf Y2xrKTsKLQkJc3JjLT5waXhlbF9jbGsgPSBOVUxMOwotCX0KLQotCWlmIChtdXgtPmJ5dGVfY2xr KSB7Ci0JCWRldm1fY2xrX3B1dCgmZGlzcGxheS0+cGRldi0+ZGV2LCBtdXgtPmJ5dGVfY2xrKTsK LQkJbXV4LT5ieXRlX2NsayA9IE5VTEw7Ci0JfQotCi0JaWYgKG11eC0+cGl4ZWxfY2xrKSB7Ci0J CWRldm1fY2xrX3B1dCgmZGlzcGxheS0+cGRldi0+ZGV2LCBtdXgtPnBpeGVsX2Nsayk7Ci0JCW11 eC0+cGl4ZWxfY2xrID0gTlVMTDsKLQl9Ci0KLQlpZiAoc2hhZG93LT5ieXRlX2NsaykgewotCQlk ZXZtX2Nsa19wdXQoJmRpc3BsYXktPnBkZXYtPmRldiwgc2hhZG93LT5ieXRlX2Nsayk7Ci0JCXNo YWRvdy0+Ynl0ZV9jbGsgPSBOVUxMOwotCX0KLQotCWlmIChzaGFkb3ctPnBpeGVsX2Nsaykgewot CQlkZXZtX2Nsa19wdXQoJmRpc3BsYXktPnBkZXYtPmRldiwgc2hhZG93LT5waXhlbF9jbGspOwot CQlzaGFkb3ctPnBpeGVsX2NsayA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0 aWMgaW50IGRzaV9kaXNwbGF5X2Nsb2Nrc19pbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxh eSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0ICpzcmMgPSAmZGlz cGxheS0+Y2xvY2tfaW5mby5zcmNfY2xrczsKLQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqbXV4 ID0gJmRpc3BsYXktPmNsb2NrX2luZm8ubXV4X2Nsa3M7Ci0Jc3RydWN0IGRzaV9jbGtfbGlua19z ZXQgKnNoYWRvdyA9ICZkaXNwbGF5LT5jbG9ja19pbmZvLnNoYWRvd19jbGtzOwotCi0Jc3JjLT5i eXRlX2NsayA9IGRldm1fY2xrX2dldCgmZGlzcGxheS0+cGRldi0+ZGV2LCAic3JjX2J5dGVfY2xr Iik7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHNyYy0+Ynl0ZV9jbGspKSB7Ci0JCXJjID0gUFRSX0VS UihzcmMtPmJ5dGVfY2xrKTsKLQkJc3JjLT5ieXRlX2NsayA9IE5VTEw7Ci0JCXByX2VycigiZmFp bGVkIHRvIGdldCBzcmNfYnl0ZV9jbGssIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0Jc3JjLT5waXhlbF9jbGsgPSBkZXZtX2Nsa19nZXQoJmRpc3BsYXktPnBkZXYtPmRldiwg InNyY19waXhlbF9jbGsiKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoc3JjLT5waXhlbF9jbGspKSB7 Ci0JCXJjID0gUFRSX0VSUihzcmMtPnBpeGVsX2Nsayk7Ci0JCXNyYy0+cGl4ZWxfY2xrID0gTlVM TDsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHNyY19waXhlbF9jbGssIHJjPSVkXG4iLCByYyk7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JbXV4LT5ieXRlX2NsayA9IGRldm1fY2xrX2dldCgmZGlz cGxheS0+cGRldi0+ZGV2LCAibXV4X2J5dGVfY2xrIik7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKG11 eC0+Ynl0ZV9jbGspKSB7Ci0JCXJjID0gUFRSX0VSUihtdXgtPmJ5dGVfY2xrKTsKLQkJcHJfZGVi dWcoImZhaWxlZCB0byBnZXQgbXV4X2J5dGVfY2xrLCByYz0lZFxuIiwgcmMpOwotCQltdXgtPmJ5 dGVfY2xrID0gTlVMTDsKLQkJLyoKLQkJICogU2tpcCBnZXR0aW5nIHJlc3Qgb2YgY2xvY2tzIHNp bmNlIG9uZSBmYWlsZWQuIFRoaXMgaXMgYQotCQkgKiBub24tY3JpdGljYWwgZmFpbHVyZSBzaW5j ZSB0aGVzZSBjbG9ja3MgYXJlIHJlcXVpZWQgb25seSBmb3IKLQkJICogZHluYW1pYyByZWZyZXNo IHVzZSBjYXNlcy4KLQkJICovCi0JCXJjID0gMDsKLQkJZ290byBkb25lOwotCX07Ci0KLQltdXgt PnBpeGVsX2NsayA9IGRldm1fY2xrX2dldCgmZGlzcGxheS0+cGRldi0+ZGV2LCAibXV4X3BpeGVs X2NsayIpOwotCWlmIChJU19FUlJfT1JfTlVMTChtdXgtPnBpeGVsX2NsaykpIHsKLQkJcmMgPSBQ VFJfRVJSKG11eC0+cGl4ZWxfY2xrKTsKLQkJbXV4LT5waXhlbF9jbGsgPSBOVUxMOwotCQlwcl9k ZWJ1ZygiZmFpbGVkIHRvIGdldCBtdXhfcGl4ZWxfY2xrLCByYz0lZFxuIiwgcmMpOwotCQkvKgot CQkgKiBTa2lwIGdldHRpbmcgcmVzdCBvZiBjbG9ja3Mgc2luY2Ugb25lIGZhaWxlZC4gVGhpcyBp cyBhCi0JCSAqIG5vbi1jcml0aWNhbCBmYWlsdXJlIHNpbmNlIHRoZXNlIGNsb2NrcyBhcmUgcmVx dWllZCBvbmx5IGZvcgotCQkgKiBkeW5hbWljIHJlZnJlc2ggdXNlIGNhc2VzLgotCQkgKi8KLQkJ cmMgPSAwOwotCQlnb3RvIGRvbmU7Ci0JfTsKLQotCXNoYWRvdy0+Ynl0ZV9jbGsgPSBkZXZtX2Ns a19nZXQoJmRpc3BsYXktPnBkZXYtPmRldiwgInNoYWRvd19ieXRlX2NsayIpOwotCWlmIChJU19F UlJfT1JfTlVMTChzaGFkb3ctPmJ5dGVfY2xrKSkgewotCQlyYyA9IFBUUl9FUlIoc2hhZG93LT5i eXRlX2Nsayk7Ci0JCXNoYWRvdy0+Ynl0ZV9jbGsgPSBOVUxMOwotCQlwcl9lcnIoImZhaWxlZCB0 byBnZXQgc2hhZG93X2J5dGVfY2xrLCByYz0lZFxuIiwgcmMpOwotCQkvKgotCQkgKiBTa2lwIGdl dHRpbmcgcmVzdCBvZiBjbG9ja3Mgc2luY2Ugb25lIGZhaWxlZC4gVGhpcyBpcyBhCi0JCSAqIG5v bi1jcml0aWNhbCBmYWlsdXJlIHNpbmNlIHRoZXNlIGNsb2NrcyBhcmUgcmVxdWllZCBvbmx5IGZv cgotCQkgKiBkeW5hbWljIHJlZnJlc2ggdXNlIGNhc2VzLgotCQkgKi8KLQkJcmMgPSAwOwotCQln b3RvIGRvbmU7Ci0JfTsKLQotCXNoYWRvdy0+cGl4ZWxfY2xrID0gZGV2bV9jbGtfZ2V0KCZkaXNw bGF5LT5wZGV2LT5kZXYsCi0JCQkJCSAic2hhZG93X3BpeGVsX2NsayIpOwotCWlmIChJU19FUlJf T1JfTlVMTChzaGFkb3ctPnBpeGVsX2NsaykpIHsKLQkJcmMgPSBQVFJfRVJSKHNoYWRvdy0+cGl4 ZWxfY2xrKTsKLQkJc2hhZG93LT5waXhlbF9jbGsgPSBOVUxMOwotCQlwcl9lcnIoImZhaWxlZCB0 byBnZXQgc2hhZG93X3BpeGVsX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJLyoKLQkJICogU2tpcCBn ZXR0aW5nIHJlc3Qgb2YgY2xvY2tzIHNpbmNlIG9uZSBmYWlsZWQuIFRoaXMgaXMgYQotCQkgKiBu b24tY3JpdGljYWwgZmFpbHVyZSBzaW5jZSB0aGVzZSBjbG9ja3MgYXJlIHJlcXVpZWQgb25seSBm b3IKLQkJICogZHluYW1pYyByZWZyZXNoIHVzZSBjYXNlcy4KLQkJICovCi0JCXJjID0gMDsKLQkJ Z290byBkb25lOwotCX07Ci0KLWRvbmU6Ci0JcmV0dXJuIDA7Ci1lcnJvcjoKLQkodm9pZClkc2lf ZGlzcGxheV9jbG9ja3NfZGVpbml0KGRpc3BsYXkpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGlj IGludCBkc2lfZGlzcGxheV9jbGtfY3RybF9jYih2b2lkICpwcml2LAotCXN0cnVjdCBkc2lfY2xr X2N0cmxfaW5mbyBjbGtfc3RhdGVfaW5mbykKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSA9IE5VTEw7Ci0Jdm9pZCAqY2xrX2hhbmRsZSA9IE5VTEw7Ci0KLQlp ZiAoIXByaXYpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCWRpc3BsYXkgPSBwcml2OwotCi0JaWYgKGNsa19zdGF0ZV9pbmZvLmNsaWVu dCA9PSBEU0lfQ0xLX1JFUV9NRFBfQ0xJRU5UKSB7Ci0JCWNsa19oYW5kbGUgPSBkaXNwbGF5LT5t ZHBfY2xrX2hhbmRsZTsKLQl9IGVsc2UgaWYgKGNsa19zdGF0ZV9pbmZvLmNsaWVudCA9PSBEU0lf Q0xLX1JFUV9EU0lfQ0xJRU5UKSB7Ci0JCWNsa19oYW5kbGUgPSBkaXNwbGF5LT5kc2lfY2xrX2hh bmRsZTsKLQl9IGVsc2UgewotCQlwcl9lcnIoImludmFsaWQgY2xrIGhhbmRsZSwgcmV0dXJuIGVy cm9yXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkgKiBUT0RPOiBXYWl0IGZv ciBDTURfTURQX0RPTkUgaW50ZXJydXB0IGlmIE1EUCBjbGllbnQgdHJpZXMKLQkgKiB0byB0dXJu IG9mZiBEU0kgY2xvY2tzLgotCSAqLwotCXJjID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwoY2xrX2hh bmRsZSwKLQkJY2xrX3N0YXRlX2luZm8uY2xrX3R5cGUsIGNsa19zdGF0ZV9pbmZvLmNsa19zdGF0 ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gJWQgRFNJICVkIGNsb2Nr cywgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCBjbGtfc3RhdGVfaW5mby5jbGtf c3RhdGUsCi0JCSAgICAgICBjbGtfc3RhdGVfaW5mby5jbGtfdHlwZSwgcmMpOwotCQlyZXR1cm4g cmM7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgZHNpX3ByZV9jbGtvZmZfY2Iodm9pZCAqcHJp diwKLQkJCSAgIGVudW0gZHNpX2Nsa190eXBlIGNsaywKLQkJCSAgIGVudW0gZHNpX2Nsa19zdGF0 ZSBuZXdfc3RhdGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3Bs YXkgPSBwcml2OwotCi0JaWYgKChjbGsgJiBEU0lfTElOS19DTEspICYmIChuZXdfc3RhdGUgPT0g RFNJX0NMS19PRkYpKSB7Ci0JCS8qCi0JCSAqIElmIFVMUFMgZmVhdHVyZSBpcyBlbmFibGVkLCBl bnRlciBVTFBTIGZpcnN0LgotCQkgKi8KLQkJaWYgKGRzaV9wYW5lbF9pbml0aWFsaXplZChkaXNw bGF5LT5wYW5lbCkgJiYKLQkJCWRzaV9wYW5lbF91bHBzX2ZlYXR1cmVfZW5hYmxlZChkaXNwbGF5 LT5wYW5lbCkpIHsKLQkJCXJjID0gZHNpX2Rpc3BsYXlfc2V0X3VscHMoZGlzcGxheSwgdHJ1ZSk7 Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoIiVzOiBmYWlsZWQgZW5hYmxlIHVscHMsIHJjID0g JWRcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHJjKTsKLQkJCX0KLQkJfQotCX0KLQotCWlmICgo Y2xrICYgRFNJX0NPUkVfQ0xLKSAmJiAobmV3X3N0YXRlID09IERTSV9DTEtfT0ZGKSkgewotCQkv KgotCQkgKiBFbmFibGUgRFNJIGNsYW1wcyBvbmx5IGlmIGVudGVyaW5nIGlkbGUgcG93ZXIgY29s bGFwc2UuCi0JCSAqLwotCQlpZiAoZHNpX3BhbmVsX2luaXRpYWxpemVkKGRpc3BsYXktPnBhbmVs KSkgewotCQkJZHNpX2Rpc3BsYXlfcGh5X2lkbGVfb2ZmKGRpc3BsYXkpOwotCQkJcmMgPSBkc2lf ZGlzcGxheV9zZXRfY2xhbXAoZGlzcGxheSwgdHJ1ZSk7Ci0JCQlpZiAocmMpCi0JCQkJcHJfZXJy KCIlczogRmFpbGVkIHRvIGVuYWJsZSBkc2kgY2xhbXBzLiByYz0lZFxuIiwKLQkJCQkJX19mdW5j X18sIHJjKTsKLQotCQkJcmMgPSBkc2lfZGlzcGxheV9waHlfcmVzZXRfY29uZmlnKGRpc3BsYXks IGZhbHNlKTsKLQkJCWlmIChyYykKLQkJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gcmVzZXQgcGh5 LCByYz0lZFxuIiwKLQkJCQkJCV9fZnVuY19fLCByYyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBNYWtl IHN1cmUgdGhhdCBjb250cm9sbGVyIGlzIG5vdCBpbiBVTFBTIHN0YXRlIHdoZW4KLQkJCSAqIHRo ZSBEU0kgbGluayBpcyBub3QgYWN0aXZlLgotCQkJICovCi0JCQlyYyA9IGRzaV9kaXNwbGF5X3Nl dF91bHBzKGRpc3BsYXksIGZhbHNlKTsKLQkJCWlmIChyYykKLQkJCQlwcl9lcnIoIiVzOiBmYWls ZWQgdG8gZGlzYWJsZSB1bHBzLiByYz0lZFxuIiwKLQkJCQkJX19mdW5jX18sIHJjKTsKLQkJfQot CX0KLQotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wb3N0X2Nsa29uX2NiKHZvaWQgKnByaXYs Ci0JCQkgICBlbnVtIGRzaV9jbGtfdHlwZSBjbGssCi0JCQkgICBlbnVtIGRzaV9jbGtfc3RhdGUg Y3Vycl9zdGF0ZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxh eSA9IHByaXY7Ci0JYm9vbCBtbXNzX2NsYW1wID0gZmFsc2U7Ci0KLQlpZiAoY2xrICYgRFNJX0NP UkVfQ0xLKSB7Ci0JCW1tc3NfY2xhbXAgPSBkaXNwbGF5LT5jbGFtcF9lbmFibGVkOwotCQkvKgot CQkgKiBjb250cm9sbGVyIHNldHVwIGlzIG5lZWRlZCBpZiBjb21pbmcgb3V0IG9mIGlkbGUKLQkJ ICogcG93ZXIgY29sbGFwc2Ugd2l0aCBjbGFtcHMgZW5hYmxlZC4KLQkJICovCi0JCWlmIChtbXNz X2NsYW1wKQotCQkJZHNpX2Rpc3BsYXlfY3RybF9zZXR1cChkaXNwbGF5KTsKLQotCQlpZiAoZGlz cGxheS0+dWxwc19lbmFibGVkICYmIG1tc3NfY2xhbXApIHsKLQkJCS8qCi0JCQkgKiBVTFBTIEVu dHJ5IFJlcXVlc3QuIFRoaXMgaXMgbmVlZGVkIGlmIHRoZSBsYW5lcyB3ZXJlCi0JCQkgKiBpbiBV TFBTIHByaW9yIHRvIHBvd2VyIGNvbGxhcHNlLCBzaW5jZSBhZnRlcgotCQkJICogcG93ZXIgY29s bGFwc2UgYW5kIHJlc2V0LCB0aGUgRFNJIGNvbnRyb2xsZXIgcmVzZXRzCi0JCQkgKiBiYWNrIHRv IGlkbGUgc3RhdGUgYW5kIG5vdCBVTFBTLiBUaGlzIHVscHMgZW50cnkKLQkJCSAqIHJlcXVlc3Qg d2lsbCB0cmFuc2l0aW9uIHRoZSBzdGF0ZSBvZiB0aGUgRFNJCi0JCQkgKiBjb250cm9sbGVyIHRv IFVMUFMgd2hpY2ggd2lsbCBtYXRjaCB0aGUgc3RhdGUgb2YgdGhlCi0JCQkgKiBEU0kgcGh5LiBU aGlzIG5lZWRzIHRvIGJlIGRvbmUgcHJpb3IgdG8gZGlzYWJsaW5nCi0JCQkgKiB0aGUgRFNJIGNs YW1wcy4KLQkJCSAqCi0JCQkgKiBBbHNvLCByZXNldCB0aGUgdWxwcyBmbGFnIHNvIHRoYXQgdWxw c19jb25maWcKLQkJCSAqIGZ1bmN0aW9uIHdvdWxkIHJlY29uZmlndXJlIHRoZSBjb250cm9sbGVy IHN0YXRlIHRvCi0JCQkgKiBVTFBTLgotCQkJICovCi0JCQlkaXNwbGF5LT51bHBzX2VuYWJsZWQg PSBmYWxzZTsKLQkJCXJjID0gZHNpX2Rpc3BsYXlfc2V0X3VscHMoZGlzcGxheSwgdHJ1ZSk7Ci0J CQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZW50ZXIgVUxQUy4gcmM9JWRc biIsCi0JCQkJCV9fZnVuY19fLCByYyk7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQotCi0J CXJjID0gZHNpX2Rpc3BsYXlfcGh5X3Jlc2V0X2NvbmZpZyhkaXNwbGF5LCB0cnVlKTsKLQkJaWYg KHJjKSB7Ci0JCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gcmVzZXQgcGh5LCByYz0lZFxuIiwKLQkJ CQkJCV9fZnVuY19fLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJcmMgPSBkc2lfZGlz cGxheV9zZXRfY2xhbXAoZGlzcGxheSwgZmFsc2UpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vycigi JXM6IEZhaWxlZCB0byBkaXNhYmxlIGRzaSBjbGFtcHMuIHJjPSVkXG4iLAotCQkJCV9fZnVuY19f LCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJLyoKLQkJICogUGh5IHNldHVwIGlzIG5l ZWRlZCBpZiBjb21pbmcgb3V0IG9mIGlkbGUKLQkJICogcG93ZXIgY29sbGFwc2Ugd2l0aCBjbGFt cHMgZW5hYmxlZC4KLQkJICovCi0JCWlmIChkaXNwbGF5LT5waHlfaWRsZV9wb3dlcl9vZmYgfHwg bW1zc19jbGFtcCkKLQkJCWRzaV9kaXNwbGF5X3BoeV9pZGxlX29uKGRpc3BsYXksIG1tc3NfY2xh bXApOwotCX0KLQlpZiAoY2xrICYgRFNJX0xJTktfQ0xLKSB7Ci0JCWlmIChkaXNwbGF5LT51bHBz X2VuYWJsZWQpIHsKLQkJCXJjID0gZHNpX2Rpc3BsYXlfc2V0X3VscHMoZGlzcGxheSwgZmFsc2Up OwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGRpc2FibGUgdWxwcywg cmM9ICVkXG4iLAotCQkJCSAgICAgICBfX2Z1bmNfXywgcmMpOwotCQkJCWdvdG8gZXJyb3I7Ci0J CQl9Ci0JCX0KLQl9Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcG9zdF9jbGtv ZmZfY2Iodm9pZCAqcHJpdiwKLQkJCSAgICBlbnVtIGRzaV9jbGtfdHlwZSBjbGtfdHlwZSwKLQkJ CSAgICBlbnVtIGRzaV9jbGtfc3RhdGUgY3Vycl9zdGF0ZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0 cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSA9IHByaXY7Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJ cHJfZXJyKCIlczogSW52YWxpZCBhcmdcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JaWYgKChjbGtfdHlwZSAmIERTSV9DT1JFX0NMSykgJiYKLQkgICAgKGN1cnJfc3Rh dGUgPT0gRFNJX0NMS19PRkYpKSB7Ci0KLQkJcmMgPSBkc2lfZGlzcGxheV9waHlfcG93ZXJfb2Zm KGRpc3BsYXkpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHBvd2VyIG9m ZiBQSFksIHJjPSVkXG4iLAotCQkJCSAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCQlyYyA9IGRz aV9kaXNwbGF5X2N0cmxfcG93ZXJfb2ZmKGRpc3BsYXkpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIo Ilslc10gZmFpbGVkIHRvIHBvd2VyIERTSSB2cmVncywgcmM9JWRcbiIsCi0JCQkJICAgZGlzcGxh eS0+bmFtZSwgcmMpOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcHJlX2Nsa29uX2Ni KHZvaWQgKnByaXYsCi0JCQkgIGVudW0gZHNpX2Nsa190eXBlIGNsa190eXBlLAotCQkJICBlbnVt IGRzaV9jbGtfc3RhdGUgbmV3X3N0YXRlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9k aXNwbGF5ICpkaXNwbGF5ID0gcHJpdjsKLQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoIiVz OiBpbnZhbGlkIGlucHV0XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CWlmICgoY2xrX3R5cGUgJiBEU0lfQ09SRV9DTEspICYmIChuZXdfc3RhdGUgPT0gRFNJX0NMS19P TikpIHsKLQkJLyoKLQkJICogRW5hYmxlIERTSSBjb3JlIHBvd2VyCi0JCSAqIDEuPiBQQU5FTF9Q TSBhcmUgY29udHJvbGxlZCBhcyBwYXJ0IG9mCi0JCSAqICAgICBwYW5lbF9wb3dlcl9jdHJsLiBO ZWVkZWQgbm90IGJlIGhhbmRsZWQgaGVyZS4KLQkJICogMi4+IENPUkVfUE0gYXJlIGNvbnRyb2xs ZWQgYnkgZHNpIGNsayBtYW5hZ2VyLgotCQkgKiAzLj4gQ1RSTF9QTSBuZWVkIHRvIGJlIGVuYWJs ZWQvZGlzYWJsZWQKLQkJICogICAgIG9ubHkgZHVyaW5nIHVuYmxhbmsvYmxhbmsuIFRoZWlyIHN0 YXRlIHNob3VsZAotCQkgKiAgICAgbm90IGJlIGNoYW5nZWQgZHVyaW5nIHN0YXRpYyBzY3JlZW4u Ci0JCSAqLwotCi0JCXJjID0gZHNpX2Rpc3BsYXlfY3RybF9wb3dlcl9vbihkaXNwbGF5KTsKLQkJ aWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHBvd2VyIG9uIGRzaSBjb250cm9s bGVycywgcmM9JWRcbiIsCi0JCQkJICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJcmV0dXJuIHJj OwotCQl9Ci0KLQkJcmMgPSBkc2lfZGlzcGxheV9waHlfcG93ZXJfb24oZGlzcGxheSk7Ci0JCWlm IChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBwb3dlciBvbiBkc2kgcGh5LCByYyA9 ICVkXG4iLAotCQkJCSAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCXJldHVybiByYzsKLQkJfQot Ci0JCXByX2RlYnVnKCIlczogRW5hYmxlIERTSSBjb3JlIHBvd2VyXG4iLCBfX2Z1bmNfXyk7Ci0J fQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBfX3NldF9sYW5lX21hcF92Mih1OCAq bGFuZV9tYXBfdjIsCi0JZW51bSBkc2lfcGh5X2RhdGFfbGFuZXMgbGFuZTAsCi0JZW51bSBkc2lf cGh5X2RhdGFfbGFuZXMgbGFuZTEsCi0JZW51bSBkc2lfcGh5X2RhdGFfbGFuZXMgbGFuZTIsCi0J ZW51bSBkc2lfcGh5X2RhdGFfbGFuZXMgbGFuZTMpCi17Ci0JbGFuZV9tYXBfdjJbRFNJX0xPR0lD QUxfTEFORV8wXSA9IGxhbmUwOwotCWxhbmVfbWFwX3YyW0RTSV9MT0dJQ0FMX0xBTkVfMV0gPSBs YW5lMTsKLQlsYW5lX21hcF92MltEU0lfTE9HSUNBTF9MQU5FXzJdID0gbGFuZTI7Ci0JbGFuZV9t YXBfdjJbRFNJX0xPR0lDQUxfTEFORV8zXSA9IGxhbmUzOwotfQotCi1zdGF0aWMgaW50IGRzaV9k aXNwbGF5X3BhcnNlX2xhbmVfbWFwKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlp bnQgcmMgPSAwLCBpID0gMDsKLQljb25zdCBjaGFyICpkYXRhOwotCXU4IHRlbXBbRFNJX0xBTkVf TUFYIC0gMV07Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xu Iik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGxhbmUtbWFwLXYyIHN1cGVyc2VkZXMg bGFuZS1tYXAtdjEgc2V0dGluZyAqLwotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91OF9hcnJheShk aXNwbGF5LT5wZGV2LT5kZXYub2Zfbm9kZSwKLQkJInFjb20sbGFuZS1tYXAtdjIiLCB0ZW1wLCAo RFNJX0xBTkVfTUFYIC0gMSkpOwotCWlmICghcmMpIHsKLQkJZm9yIChpID0gRFNJX0xPR0lDQUxf TEFORV8wOyBpIDwgKERTSV9MQU5FX01BWCAtIDEpOyBpKyspCi0JCQlkaXNwbGF5LT5sYW5lX21h cC5sYW5lX21hcF92MltpXSA9IEJJVCh0ZW1wW2ldKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlm IChyYyAhPSBFSU5WQUwpIHsKLQkJcHJfZGVidWcoIkluY29ycmVjdCBtYXBwaW5nLCBjb25maWd1 cmUgZGVmYXVsdFxuIik7Ci0JCWdvdG8gc2V0X2RlZmF1bHQ7Ci0JfQotCi0JLyogbGFuZS1tYXAg b2xkZXIgdmVyc2lvbiwgZm9yIERTSSBjb250cm9sbGVyIHZlcnNpb24gPCAyLjAgKi8KLQlkYXRh ID0gb2ZfZ2V0X3Byb3BlcnR5KGRpc3BsYXktPnBkZXYtPmRldi5vZl9ub2RlLAotCQkicWNvbSxs YW5lLW1hcCIsIE5VTEwpOwotCWlmICghZGF0YSkKLQkJZ290byBzZXRfZGVmYXVsdDsKLQotCWlm ICghc3RyY21wKGRhdGEsICJsYW5lX21hcF8zMDEyIikpIHsKLQkJZGlzcGxheS0+bGFuZV9tYXAu bGFuZV9tYXBfdjEgPSBEU0lfTEFORV9NQVBfMzAxMjsKLQkJX19zZXRfbGFuZV9tYXBfdjIoZGlz cGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjIsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8xLAotCQkJ RFNJX1BIWVNJQ0FMX0xBTkVfMiwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzMsCi0JCQlEU0lfUEhZ U0lDQUxfTEFORV8wKTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoZGF0YSwgImxhbmVfbWFwXzIzMDEi KSkgewotCQlkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MSA9IERTSV9MQU5FX01BUF8yMzAx OwotCQlfX3NldF9sYW5lX21hcF92MihkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MiwKLQkJ CURTSV9QSFlTSUNBTF9MQU5FXzIsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8zLAotCQkJRFNJX1BI WVNJQ0FMX0xBTkVfMCwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzEpOwotCX0gZWxzZSBpZiAoIXN0 cmNtcChkYXRhLCAibGFuZV9tYXBfMTIzMCIpKSB7Ci0JCWRpc3BsYXktPmxhbmVfbWFwLmxhbmVf bWFwX3YxID0gRFNJX0xBTkVfTUFQXzEyMzA7Ci0JCV9fc2V0X2xhbmVfbWFwX3YyKGRpc3BsYXkt PmxhbmVfbWFwLmxhbmVfbWFwX3YyLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMywKLQkJCURTSV9Q SFlTSUNBTF9MQU5FXzAsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8xLAotCQkJRFNJX1BIWVNJQ0FM X0xBTkVfMik7Ci0JfSBlbHNlIGlmICghc3RyY21wKGRhdGEsICJsYW5lX21hcF8wMzIxIikpIHsK LQkJZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjEgPSBEU0lfTEFORV9NQVBfMDMyMTsKLQkJ X19zZXRfbGFuZV9tYXBfdjIoZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjIsCi0JCQlEU0lf UEhZU0lDQUxfTEFORV8wLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMywKLQkJCURTSV9QSFlTSUNB TF9MQU5FXzIsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8xKTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAo ZGF0YSwgImxhbmVfbWFwXzEwMzIiKSkgewotCQlkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92 MSA9IERTSV9MQU5FX01BUF8xMDMyOwotCQlfX3NldF9sYW5lX21hcF92MihkaXNwbGF5LT5sYW5l X21hcC5sYW5lX21hcF92MiwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzEsCi0JCQlEU0lfUEhZU0lD QUxfTEFORV8wLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMywKLQkJCURTSV9QSFlTSUNBTF9MQU5F XzIpOwotCX0gZWxzZSBpZiAoIXN0cmNtcChkYXRhLCAibGFuZV9tYXBfMjEwMyIpKSB7Ci0JCWRp c3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YxID0gRFNJX0xBTkVfTUFQXzIxMDM7Ci0JCV9fc2V0 X2xhbmVfbWFwX3YyKGRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YyLAotCQkJRFNJX1BIWVNJ Q0FMX0xBTkVfMiwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzEsCi0JCQlEU0lfUEhZU0lDQUxfTEFO RV8wLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMyk7Ci0JfSBlbHNlIGlmICghc3RyY21wKGRhdGEs ICJsYW5lX21hcF8zMjEwIikpIHsKLQkJZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjEgPSBE U0lfTEFORV9NQVBfMzIxMDsKLQkJX19zZXRfbGFuZV9tYXBfdjIoZGlzcGxheS0+bGFuZV9tYXAu bGFuZV9tYXBfdjIsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8zLAotCQkJRFNJX1BIWVNJQ0FMX0xB TkVfMiwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzEsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8wKTsK LQl9IGVsc2UgewotCQlwcl93YXJuKCIlczogaW52YWxpZCBsYW5lIG1hcCAlcyBzcGVjaWZpZWQu IGRlZmF1bHRpbmcgdG8gbGFuZV9tYXAwMTIzXG4iLAotCQkJX19mdW5jX18sIGRhdGEpOwotCQln b3RvIHNldF9kZWZhdWx0OwotCX0KLQlyZXR1cm4gMDsKLQotc2V0X2RlZmF1bHQ6Ci0JLyogZGVm YXVsdCBsYW5lIG1hcHBpbmcgKi8KLQlfX3NldF9sYW5lX21hcF92MihkaXNwbGF5LT5sYW5lX21h cC5sYW5lX21hcF92MiwgRFNJX1BIWVNJQ0FMX0xBTkVfMCwKLQkJRFNJX1BIWVNJQ0FMX0xBTkVf MSwgRFNJX1BIWVNJQ0FMX0xBTkVfMiwgRFNJX1BIWVNJQ0FMX0xBTkVfMyk7Ci0JZGlzcGxheS0+ bGFuZV9tYXAubGFuZV9tYXBfdjEgPSBEU0lfTEFORV9NQVBfMDEyMzsKLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCBkc2lfZGlzcGxheV9wYXJzZV9kdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRp c3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQl1MzIgcGh5X2NvdW50ID0gMDsKLQlz dHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGU7Ci0KLQkvKiBQYXJzZSBjb250cm9sbGVycyAqLwot CWZvciAoaSA9IDA7IGkgPCBNQVhfRFNJX0NUUkxTX1BFUl9ESVNQTEFZOyBpKyspIHsKLQkJb2Zf bm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUoZGlzcGxheS0+cGRldi0+ZGV2Lm9mX25vZGUsCi0JCQkJ CSAgICJxY29tLGRzaS1jdHJsIiwgaSk7Ci0JCWlmICghb2Zfbm9kZSkgewotCQkJaWYgKCFpKSB7 Ci0JCQkJcHJfZXJyKCJObyBjb250cm9sbGVycyBwcmVzZW50XG4iKTsKLQkJCQlyZXR1cm4gLUVO T0RFVjsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0KLQkJZGlzcGxheS0+Y3RybFtpXS5jdHJsX29m X25vZGUgPSBvZl9ub2RlOwotCQlkaXNwbGF5LT5jdHJsX2NvdW50Kys7Ci0JfQotCi0JLyogUGFy c2UgUGh5cyAqLwotCWZvciAoaSA9IDA7IGkgPCBNQVhfRFNJX0NUUkxTX1BFUl9ESVNQTEFZOyBp KyspIHsKLQkJb2Zfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUoZGlzcGxheS0+cGRldi0+ZGV2Lm9m X25vZGUsCi0JCQkJCSAgICJxY29tLGRzaS1waHkiLCBpKTsKLQkJaWYgKCFvZl9ub2RlKSB7Ci0J CQlpZiAoIWkpIHsKLQkJCQlwcl9lcnIoIk5vIFBIWSBkZXZpY2VzIHByZXNlbnRcbiIpOwotCQkJ CXJjID0gLUVOT0RFVjsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQot CQlkaXNwbGF5LT5jdHJsW2ldLnBoeV9vZl9ub2RlID0gb2Zfbm9kZTsKLQkJcGh5X2NvdW50Kys7 Ci0JfQotCi0JaWYgKHBoeV9jb3VudCAhPSBkaXNwbGF5LT5jdHJsX2NvdW50KSB7Ci0JCXByX2Vy cigiTnVtYmVyIG9mIGNvbnRyb2xsZXJzIGRvZXMgbm90IG1hdGNoIFBIWXNcbiIpOwotCQlyYyA9 IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0Jb2Zfbm9kZSA9IG9mX3BhcnNlX3BoYW5k bGUoZGlzcGxheS0+cGRldi0+ZGV2Lm9mX25vZGUsCi0JCQkJICAgInFjb20sZHNpLXBhbmVsIiwg MCk7Ci0JaWYgKCFvZl9ub2RlKSB7Ci0JCXByX2VycigiTm8gUGFuZWwgZGV2aWNlIHByZXNlbnRc biIpOwotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyb3I7Ci0JfSBlbHNlIHsKLQkJZGlzcGxh eS0+cGFuZWxfb2YgPSBvZl9ub2RlOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1z dGF0aWMgaW50IGRzaV9kaXNwbGF5X3Jlc19pbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxh eSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpj dHJsOwotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQlj dHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWN0cmwtPmN0cmwgPSBkc2lfY3RybF9nZXQoY3Ry bC0+Y3RybF9vZl9ub2RlKTsKLQkJaWYgKElTX0VSUl9PUl9OVUxMKGN0cmwtPmN0cmwpKSB7Ci0J CQlyYyA9IFBUUl9FUlIoY3RybC0+Y3RybCk7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgZHNp IGNvbnRyb2xsZXIsIHJjPSVkXG4iLCByYyk7Ci0JCQljdHJsLT5jdHJsID0gTlVMTDsKLQkJCWdv dG8gZXJyb3JfY3RybF9wdXQ7Ci0JCX0KLQotCQljdHJsLT5waHkgPSBkc2lfcGh5X2dldChjdHJs LT5waHlfb2Zfbm9kZSk7Ci0JCWlmIChJU19FUlJfT1JfTlVMTChjdHJsLT5waHkpKSB7Ci0JCQly YyA9IFBUUl9FUlIoY3RybC0+cGh5KTsKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCBwaHkgY29u dHJvbGxlciwgcmM9JWRcbiIsIHJjKTsKLQkJCWRzaV9jdHJsX3B1dChjdHJsLT5jdHJsKTsKLQkJ CWN0cmwtPnBoeSA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yX2N0cmxfcHV0OwotCQl9Ci0JfQotCi0J ZGlzcGxheS0+cGFuZWwgPSBkc2lfcGFuZWxfZ2V0KCZkaXNwbGF5LT5wZGV2LT5kZXYsIGRpc3Bs YXktPnBhbmVsX29mLAotCQkJCQkJZGlzcGxheS0+Y21kbGluZV90b3BvbG9neSk7Ci0JaWYgKElT X0VSUl9PUl9OVUxMKGRpc3BsYXktPnBhbmVsKSkgewotCQlyYyA9IFBUUl9FUlIoZGlzcGxheS0+ cGFuZWwpOwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgcGFuZWwsIHJjPSVkXG4iLCByYyk7Ci0J CWRpc3BsYXktPnBhbmVsID0gTlVMTDsKLQkJZ290byBlcnJvcl9jdHJsX3B1dDsKLQl9Ci0KLQly YyA9IGRzaV9kaXNwbGF5X3BhcnNlX2xhbmVfbWFwKGRpc3BsYXkpOwotCWlmIChyYykgewotCQlw cl9lcnIoIkxhbmUgbWFwIG5vdCBmb3VuZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcl9j dHJsX3B1dDsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsb2Nrc19pbml0KGRpc3BsYXkpOwot CWlmIChyYykgewotCQlwcl9lcnIoIkZhaWxlZCB0byBwYXJzZSBjbG9jayBkYXRhLCByYz0lZFxu IiwgcmMpOwotCQlnb3RvIGVycm9yX2N0cmxfcHV0OwotCX0KLQotCXJldHVybiAwOwotZXJyb3Jf Y3RybF9wdXQ6Ci0JZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWN0cmwgPSAmZGlz cGxheS0+Y3RybFtpXTsKLQkJZHNpX2N0cmxfcHV0KGN0cmwtPmN0cmwpOwotCQlkc2lfcGh5X3B1 dChjdHJsLT5waHkpOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3Bs YXlfcmVzX2RlaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0g MDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqY3RybDsKLQotCXJjID0gZHNp X2Rpc3BsYXlfY2xvY2tzX2RlaW5pdChkaXNwbGF5KTsKLQlpZiAocmMpCi0JCXByX2VycigiY2xv Y2tzIGRlaW5pdCBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlz cGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJ ZHNpX3BoeV9wdXQoY3RybC0+cGh5KTsKLQkJZHNpX2N0cmxfcHV0KGN0cmwtPmN0cmwpOwotCX0K LQotCWlmIChkaXNwbGF5LT5wYW5lbCkKLQkJZHNpX3BhbmVsX3B1dChkaXNwbGF5LT5wYW5lbCk7 Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9k ZV9zZXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJCQkgc3RydWN0IGRzaV9kaXNw bGF5X21vZGUgKm1vZGUsCi0JCQkJCSB1MzIgZmxhZ3MpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQg aTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqY3RybDsKLQotCS8qCi0JICogVG8gc2V0IGEg bW9kZToKLQkgKiAxLiBDb250cm9sbGVycyBzaG91bGQgYmUgdHVybmVkIG9mZi4KLQkgKiAyLiBM aW5rIGNsb2NrcyBzaG91bGQgYmUgb2ZmLgotCSAqIDMuIFBoeSBzaG91bGQgYmUgZGlzYWJsZWQu Ci0JICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0J CWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKChjdHJsLT5wb3dlcl9zdGF0ZSA+IERT SV9DVFJMX1BPV0VSX1ZSRUdfT04pIHx8Ci0JCSAgICAoY3RybC0+cGh5X2VuYWJsZWQpKSB7Ci0J CQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi1lcnJvcjoKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBib29sIGRzaV9kaXNwbGF5X2lzX3NlYW1sZXNzX2RmcHNfcG9z c2libGUoCi0JCWNvbnN0IHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJY29uc3Qgc3Ry dWN0IGRzaV9kaXNwbGF5X21vZGUgKnRndCwKLQkJY29uc3QgZW51bSBkc2lfZGZwc190eXBlIGRm cHNfdHlwZSkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqY3VyOwotCi0JaWYgKCFkaXNw bGF5IHx8ICF0Z3QgfHwgIWRpc3BsYXktPnBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJh bXNcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JY3VyID0gZGlzcGxheS0+cGFuZWwtPmN1 cl9tb2RlOwotCi0JaWYgKGN1ci0+dGltaW5nLmhfYWN0aXZlICE9IHRndC0+dGltaW5nLmhfYWN0 aXZlKSB7Ci0JCXByX2RlYnVnKCJ0aW1pbmcuaF9hY3RpdmUgZGlmZmVycyAlZCAlZFxuIiwKLQkJ CQljdXItPnRpbWluZy5oX2FjdGl2ZSwgdGd0LT50aW1pbmcuaF9hY3RpdmUpOwotCQlyZXR1cm4g ZmFsc2U7Ci0JfQotCi0JaWYgKGN1ci0+dGltaW5nLmhfYmFja19wb3JjaCAhPSB0Z3QtPnRpbWlu Zy5oX2JhY2tfcG9yY2gpIHsKLQkJcHJfZGVidWcoInRpbWluZy5oX2JhY2tfcG9yY2ggZGlmZmVy cyAlZCAlZFxuIiwKLQkJCQljdXItPnRpbWluZy5oX2JhY2tfcG9yY2gsCi0JCQkJdGd0LT50aW1p bmcuaF9iYWNrX3BvcmNoKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChjdXItPnRpbWlu Zy5oX3N5bmNfd2lkdGggIT0gdGd0LT50aW1pbmcuaF9zeW5jX3dpZHRoKSB7Ci0JCXByX2RlYnVn KCJ0aW1pbmcuaF9zeW5jX3dpZHRoIGRpZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcu aF9zeW5jX3dpZHRoLAotCQkJCXRndC0+dGltaW5nLmhfc3luY193aWR0aCk7Ci0JCXJldHVybiBm YWxzZTsKLQl9Ci0KLQlpZiAoY3VyLT50aW1pbmcuaF9mcm9udF9wb3JjaCAhPSB0Z3QtPnRpbWlu Zy5oX2Zyb250X3BvcmNoKSB7Ci0JCXByX2RlYnVnKCJ0aW1pbmcuaF9mcm9udF9wb3JjaCBkaWZm ZXJzICVkICVkXG4iLAotCQkJCWN1ci0+dGltaW5nLmhfZnJvbnRfcG9yY2gsCi0JCQkJdGd0LT50 aW1pbmcuaF9mcm9udF9wb3JjaCk7Ci0JCWlmIChkZnBzX3R5cGUgIT0gRFNJX0RGUFNfSU1NRURJ QVRFX0hGUCkKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoY3VyLT50aW1pbmcuaF9za2V3 ICE9IHRndC0+dGltaW5nLmhfc2tldykgewotCQlwcl9kZWJ1ZygidGltaW5nLmhfc2tldyBkaWZm ZXJzICVkICVkXG4iLAotCQkJCWN1ci0+dGltaW5nLmhfc2tldywKLQkJCQl0Z3QtPnRpbWluZy5o X3NrZXcpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyogc2tpcCBwb2xhcml0eSBjb21wYXJp c29uICovCi0KLQlpZiAoY3VyLT50aW1pbmcudl9hY3RpdmUgIT0gdGd0LT50aW1pbmcudl9hY3Rp dmUpIHsKLQkJcHJfZGVidWcoInRpbWluZy52X2FjdGl2ZSBkaWZmZXJzICVkICVkXG4iLAotCQkJ CWN1ci0+dGltaW5nLnZfYWN0aXZlLAotCQkJCXRndC0+dGltaW5nLnZfYWN0aXZlKTsKLQkJcmV0 dXJuIGZhbHNlOwotCX0KLQotCWlmIChjdXItPnRpbWluZy52X2JhY2tfcG9yY2ggIT0gdGd0LT50 aW1pbmcudl9iYWNrX3BvcmNoKSB7Ci0JCXByX2RlYnVnKCJ0aW1pbmcudl9iYWNrX3BvcmNoIGRp ZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcudl9iYWNrX3BvcmNoLAotCQkJCXRndC0+ dGltaW5nLnZfYmFja19wb3JjaCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoY3VyLT50 aW1pbmcudl9zeW5jX3dpZHRoICE9IHRndC0+dGltaW5nLnZfc3luY193aWR0aCkgewotCQlwcl9k ZWJ1ZygidGltaW5nLnZfc3luY193aWR0aCBkaWZmZXJzICVkICVkXG4iLAotCQkJCWN1ci0+dGlt aW5nLnZfc3luY193aWR0aCwKLQkJCQl0Z3QtPnRpbWluZy52X3N5bmNfd2lkdGgpOwotCQlyZXR1 cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGN1ci0+dGltaW5nLnZfZnJvbnRfcG9yY2ggIT0gdGd0LT50 aW1pbmcudl9mcm9udF9wb3JjaCkgewotCQlwcl9kZWJ1ZygidGltaW5nLnZfZnJvbnRfcG9yY2gg ZGlmZmVycyAlZCAlZFxuIiwKLQkJCQljdXItPnRpbWluZy52X2Zyb250X3BvcmNoLAotCQkJCXRn dC0+dGltaW5nLnZfZnJvbnRfcG9yY2gpOwotCQlpZiAoZGZwc190eXBlICE9IERTSV9ERlBTX0lN TUVESUFURV9WRlApCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyogc2tpcCBwb2xhcml0eSBj b21wYXJpc29uICovCi0KLQlpZiAoY3VyLT50aW1pbmcucmVmcmVzaF9yYXRlID09IHRndC0+dGlt aW5nLnJlZnJlc2hfcmF0ZSkKLQkJcHJfZGVidWcoInRpbWluZy5yZWZyZXNoX3JhdGUgaWRlbnRp Y2FsICVkICVkXG4iLAotCQkJCWN1ci0+dGltaW5nLnJlZnJlc2hfcmF0ZSwKLQkJCQl0Z3QtPnRp bWluZy5yZWZyZXNoX3JhdGUpOwotCi0JaWYgKGN1ci0+cGl4ZWxfY2xrX2toeiAhPSB0Z3QtPnBp eGVsX2Nsa19raHopCi0JCXByX2RlYnVnKCJwaXhlbF9jbGtfa2h6IGRpZmZlcnMgJWQgJWRcbiIs Ci0JCQkJY3VyLT5waXhlbF9jbGtfa2h6LCB0Z3QtPnBpeGVsX2Nsa19raHopOwotCi0JaWYgKGN1 ci0+ZHNpX21vZGVfZmxhZ3MgIT0gdGd0LT5kc2lfbW9kZV9mbGFncykKLQkJcHJfZGVidWcoImZs YWdzIGRpZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT5kc2lfbW9kZV9mbGFncywgdGd0LT5kc2lf bW9kZV9mbGFncyk7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxh eV9kZnBzX3VwZGF0ZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkJICAgc3RydWN0 IGRzaV9kaXNwbGF5X21vZGUgKmRzaV9tb2RlKQotewotCXN0cnVjdCBkc2lfbW9kZV9pbmZvICp0 aW1pbmc7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3RybCwgKmN0cmw7Ci0Jc3RydWN0 IGRzaV9kaXNwbGF5X21vZGUgKnBhbmVsX21vZGU7Ci0Jc3RydWN0IGRzaV9kZnBzX2NhcGFiaWxp dGllcyBkZnBzX2NhcHM7Ci0JaW50IHJjID0gMDsKLQlpbnQgaSA9IDA7Ci0KLQlpZiAoIWRpc3Bs YXkgfHwgIWRzaV9tb2RlIHx8ICFkaXNwbGF5LT5wYW5lbCkgewotCQlwcl9lcnIoIkludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXRpbWluZyA9ICZkc2lfbW9kZS0+ dGltaW5nOwotCi0JZHNpX3BhbmVsX2dldF9kZnBzX2NhcHMoZGlzcGxheS0+cGFuZWwsICZkZnBz X2NhcHMpOwotCWlmICghZGZwc19jYXBzLmRmcHNfc3VwcG9ydCkgewotCQlwcl9lcnIoImRmcHMg bm90IHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQotCi0JaWYgKGRmcHNf Y2Fwcy50eXBlID09IERTSV9ERlBTX0lNTUVESUFURV9DTEspIHsKLQkJcHJfZXJyKCJkZnBzIGNs b2NrIG1ldGhvZCBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0K LQkvKiBGb3Igc3BsaXQgRFNJLCB1cGRhdGUgdGhlIGNsb2NrIG1hc3RlciBmaXJzdCAqLwotCi0J cHJfZGVidWcoImNvbmZpZ3VyaW5nIHNlYW1sZXNzIGR5bmFtaWMgZnBzXG5cbiIpOwotCi0JbV9j dHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxheS0+Y2xrX21hc3Rlcl9pZHhdOwotCXJjID0gZHNp X2N0cmxfYXN5bmNfdGltaW5nX3VwZGF0ZShtX2N0cmwtPmN0cmwsIHRpbWluZyk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGZwcyB1cGRhdGUgaG9zdF8lZCwgcmM9JWRc biIsCi0JCQkJZGlzcGxheS0+bmFtZSwgaSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8q IFVwZGF0ZSB0aGUgcmVzdCBvZiB0aGUgY29udHJvbGxlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwg ZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsK LQkJaWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQot CQlyYyA9IGRzaV9jdHJsX2FzeW5jX3RpbWluZ191cGRhdGUoY3RybC0+Y3RybCwgdGltaW5nKTsK LQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRmcHMgdXBkYXRlIGhvc3Rf JWQsIHJjPSVkXG4iLAotCQkJCQlkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0JCQlnb3RvIGVycm9y OwotCQl9Ci0JfQotCi0JcGFuZWxfbW9kZSA9IGRpc3BsYXktPnBhbmVsLT5jdXJfbW9kZTsKLQlt ZW1jcHkocGFuZWxfbW9kZSwgZHNpX21vZGUsIHNpemVvZigqcGFuZWxfbW9kZSkpOwotCS8qCi0J ICogZHNpX21vZGVfZmxhZ3MgZmxhZ3MgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBvdGhl ciBkcm0gZHJpdmVyCi0JICogY29tcG9uZW50cywgYW5kIGFyZSB0cmFuc2llbnQuIFRoZXkgYXJl bid0IGluaGVyZW50bHkgcGFydCBvZiB0aGUKLQkgKiBkaXNwbGF5IHBhbmVsJ3MgbW9kZSBhbmQg c2hvdWxkbid0IGJlIHNhdmVkIGludG8gdGhlIGNhY2hlZCBjdXJyZW50bHkKLQkgKiBhY3RpdmUg bW9kZS4KLQkgKi8KLQlwYW5lbF9tb2RlLT5kc2lfbW9kZV9mbGFncyA9IDA7Ci0KLWVycm9yOgot CXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9kZnBzX2NhbGNfZnJvbnRf cG9yY2goCi0JCXUzMiBvbGRfZnBzLAotCQl1MzIgbmV3X2ZwcywKLQkJdTMyIGFfdG90YWwsCi0J CXUzMiBiX3RvdGFsLAotCQl1MzIgYl9mcCwKLQkJdTMyICpiX2ZwX291dCkKLXsKLQlzMzIgYl9m cF9uZXc7Ci0JaW50IGFkZF9wb3JjaGVzLCBkaWZmOwotCi0JaWYgKCFiX2ZwX291dCkgewotCQlw cl9lcnIoIkludmFsaWQgcGFyYW1zIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgh YV90b3RhbCB8fCAhbmV3X2ZwcykgewotCQlwcl9lcnIoIkludmFsaWQgcGl4ZWwgdG90YWwgb3Ig bmV3IGZwcyBpbiBtb2RlIHJlcXVlc3RcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkv KgotCSAqIEtlZXAgY2xvY2ssIG90aGVyIHBvcmNoZXMgY29uc3RhbnQsIHVzZSBuZXcgZnBzLCBj YWxjIGZyb250IHBvcmNoCi0JICogbmV3X3Z0b3RhbCA9IG9sZF92dG90YWwgKiAob2xkX2ZwcyAv IG5ld19mcHMgKQotCSAqIG5ld192ZnAgLSBvbGRfdmZwID0gbmV3X3Z0b3RhbCAtIG9sZF92dG90 YWwKLQkgKiBuZXdfdmZwID0gb2xkX3ZmcCArIG9sZF92dG90YWwgKiAoKG9sZF9mcHMgLSBuZXdf ZnBzKS8gbmV3X2ZwcykKLQkgKi8KLQlkaWZmID0gYWJzKG9sZF9mcHMgLSBuZXdfZnBzKTsKLQlh ZGRfcG9yY2hlcyA9IG11bHRfZnJhYyhiX3RvdGFsLCBkaWZmLCBuZXdfZnBzKTsKLQotCWlmIChv bGRfZnBzID4gbmV3X2ZwcykKLQkJYl9mcF9uZXcgPSBiX2ZwICsgYWRkX3BvcmNoZXM7Ci0JZWxz ZQotCQliX2ZwX25ldyA9IGJfZnAgLSBhZGRfcG9yY2hlczsKLQotCXByX2RlYnVnKCJmcHMgJXUg YSAldSBiICV1IGJfZnAgJXUgbmV3X2ZwICVkXG4iLAotCQkJbmV3X2ZwcywgYV90b3RhbCwgYl90 b3RhbCwgYl9mcCwgYl9mcF9uZXcpOwotCi0JaWYgKGJfZnBfbmV3IDwgMCkgewotCQlwcl9lcnIo IkludmFsaWQgbmV3X2hmcCBjYWxjbHVhdGVkJWRcbiIsIGJfZnBfbmV3KTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JLyoqCi0JICogVE9ETzogVG8gZGlmZmVyZW50aWF0ZSBmcm9tIGNsb2Nr IG1ldGhvZCB3aGVuIGNvbW11bmljYXRpbmcgdG8gdGhlCi0JICogb3RoZXIgY29tcG9uZW50cywg cGVyaGFwcyB3ZSBzaG91bGQgc2V0IGNsayBoZXJlIHRvIG9yaWdpbmFsIHZhbHVlCi0JICovCi0J KmJfZnBfb3V0ID0gYl9mcF9uZXc7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lfZGlz cGxheV9nZXRfZGZwc190aW1pbmcoKSAtIEdldCB0aGUgbmV3IGRmcHMgdmFsdWVzLgotICogQGRp c3BsYXk6ICAgICAgICAgRFNJIGRpc3BsYXkgaGFuZGxlLgotICogQGFkal9tb2RlOiAgICAgICAg TW9kZSB2YWx1ZSBzdHJ1Y3R1cmUgdG8gYmUgY2hhbmdlZC4KLSAqICAgICAgICAgICAgICAgICAg IEl0IGNvbnRhaW5zIG9sZCB0aW1pbmcgdmFsdWVzIGFuZCBsYXRlc3QgZnBzIHZhbHVlLgotICog ICAgICAgICAgICAgICAgICAgTmV3IHRpbWluZyB2YWx1ZXMgYXJlIHVwZGF0ZWQgYmFzZWQgb24g bmV3IGZwcy4KLSAqIEBjdXJyX3JlZnJlc2hfcmF0ZTogIEN1cnJlbnQgZnBzIHJhdGUuCi0gKiAg ICAgICAgICAgICAgICAgICAgICBJZiB6ZXJvICwgY3VycmVudCBmcHMgcmF0ZSBpcyB0YWtlbiBm cm9tCi0gKiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGUuCi0g KiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfZ2V0X2Rm cHNfdGltaW5nKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJCXN0cnVjdCBkc2lfZGlz cGxheV9tb2RlICphZGpfbW9kZSwKLQkJCQl1MzIgY3Vycl9yZWZyZXNoX3JhdGUpCi17Ci0Jc3Ry dWN0IGRzaV9kZnBzX2NhcGFiaWxpdGllcyBkZnBzX2NhcHM7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5 X21vZGUgcGVyX2N0cmxfbW9kZTsKLQlzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqdGltaW5nOwotCXN0 cnVjdCBkc2lfY3RybCAqbV9jdHJsOwotCi0JaW50IHJjID0gMDsKLQotCWlmICghZGlzcGxheSB8 fCAhYWRqX21vZGUpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQltX2N0cmwgPSBkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNsa19tYXN0ZXJf aWR4XS5jdHJsOwotCi0JZHNpX3BhbmVsX2dldF9kZnBzX2NhcHMoZGlzcGxheS0+cGFuZWwsICZk ZnBzX2NhcHMpOwotCWlmICghZGZwc19jYXBzLmRmcHNfc3VwcG9ydCkgewotCQlwcl9lcnIoImRm cHMgbm90IHN1cHBvcnRlZCBieSBwYW5lbFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CXBlcl9jdHJsX21vZGUgPSAqYWRqX21vZGU7Ci0JYWRqdXN0X3RpbWluZ19ieV9jdHJsX2NvdW50 KGRpc3BsYXksICZwZXJfY3RybF9tb2RlKTsKLQotCWlmICghY3Vycl9yZWZyZXNoX3JhdGUpIHsK LQkJaWYgKCFkc2lfZGlzcGxheV9pc19zZWFtbGVzc19kZnBzX3Bvc3NpYmxlKGRpc3BsYXksCi0J CQkJJnBlcl9jdHJsX21vZGUsIGRmcHNfY2Fwcy50eXBlKSkgewotCQkJcHJfZXJyKCJzZWFtbGVz cyBkeW5hbWljIGZwcyBub3Qgc3VwcG9ydGVkIGZvciBtb2RlXG4iKTsKLQkJCXJldHVybiAtRUlO VkFMOwotCQl9Ci0JCWlmIChkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGUpIHsKLQkJCWN1cnJfcmVm cmVzaF9yYXRlID0KLQkJCQlkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGUtPnRpbWluZy5yZWZyZXNo X3JhdGU7Ci0JCX0gZWxzZSB7Ci0JCQlwcl9lcnIoImN1cl9tb2RlIGlzIG5vdCBpbml0aWFsaXpl ZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQkvKiBUT0RPOiBSZW1vdmUgdGhp cyBkaXJlY3QgcmVmZXJlbmNlIHRvIHRoZSBkc2lfY3RybCAqLwotCXRpbWluZyA9ICZwZXJfY3Ry bF9tb2RlLnRpbWluZzsKLQotCXN3aXRjaCAoZGZwc19jYXBzLnR5cGUpIHsKLQljYXNlIERTSV9E RlBTX0lNTUVESUFURV9WRlA6Ci0JCXJjID0gZHNpX2Rpc3BsYXlfZGZwc19jYWxjX2Zyb250X3Bv cmNoKAotCQkJCWN1cnJfcmVmcmVzaF9yYXRlLAotCQkJCXRpbWluZy0+cmVmcmVzaF9yYXRlLAot CQkJCURTSV9IX1RPVEFMKHRpbWluZyksCi0JCQkJRFNJX1ZfVE9UQUwodGltaW5nKSwKLQkJCQl0 aW1pbmctPnZfZnJvbnRfcG9yY2gsCi0JCQkJJmFkal9tb2RlLT50aW1pbmcudl9mcm9udF9wb3Jj aCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBEU0lfREZQU19JTU1FRElBVEVfSEZQOgotCQlyYyA9IGRz aV9kaXNwbGF5X2RmcHNfY2FsY19mcm9udF9wb3JjaCgKLQkJCQljdXJyX3JlZnJlc2hfcmF0ZSwK LQkJCQl0aW1pbmctPnJlZnJlc2hfcmF0ZSwKLQkJCQlEU0lfVl9UT1RBTCh0aW1pbmcpLAotCQkJ CURTSV9IX1RPVEFMKHRpbWluZyksCi0JCQkJdGltaW5nLT5oX2Zyb250X3BvcmNoLAotCQkJCSZh ZGpfbW9kZS0+dGltaW5nLmhfZnJvbnRfcG9yY2gpOwotCQlpZiAoIXJjKQotCQkJYWRqX21vZGUt PnRpbWluZy5oX2Zyb250X3BvcmNoICo9IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCWJyZWFrOwot Ci0JZGVmYXVsdDoKLQkJcHJfZXJyKCJVbnN1cHBvcnRlZCBERlBTIG1vZGUgJWRcbiIsIGRmcHNf Y2Fwcy50eXBlKTsKLQkJcmMgPSAtRU5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1z dGF0aWMgYm9vbCBkc2lfZGlzcGxheV92YWxpZGF0ZV9tb2RlX3NlYW1sZXNzKHN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSwKLQkJc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQot ewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRpc3BsYXkgfHwgIWFkal9tb2RlKSB7Ci0JCXByX2Vy cigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyogQ3VycmVu dGx5IHRoZSBvbmx5IHNlYW1sZXNzIHRyYW5zaXRpb24gaXMgZHluYW1pYyBmcHMgKi8KLQlyYyA9 IGRzaV9kaXNwbGF5X2dldF9kZnBzX3RpbWluZyhkaXNwbGF5LCBhZGpfbW9kZSwgMCk7Ci0JaWYg KHJjKSB7Ci0JCXByX2RlYnVnKCJEeW5hbWljIEZQUyBub3Qgc3VwcG9ydGVkIGZvciBzZWFtbGVz c1xuIik7Ci0JfSBlbHNlIHsKLQkJcHJfZGVidWcoIk1vZGUgc3dpdGNoIGlzIHNlYW1sZXNzIER5 bmFtaWMgRlBTXG4iKTsKLQkJYWRqX21vZGUtPmRzaV9tb2RlX2ZsYWdzIHw9IERTSV9NT0RFX0ZM QUdfREZQUyB8Ci0JCQkJRFNJX01PREVfRkxBR19WQkxBTktfUFJFX01PREVTRVQ7Ci0JfQotCi0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3NldF9tb2RlX3N1YihzdHJ1 Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkJICAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2Rl ICptb2RlLAotCQkJCSAgICB1MzIgZmxhZ3MpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlz dHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqY3RybDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZV9w cml2X2luZm8gKnByaXZfaW5mbzsKLQotCXByaXZfaW5mbyA9IG1vZGUtPnByaXZfaW5mbzsKLQlp ZiAoIXByaXZfaW5mbykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGdldCBwcml2YXRlIGlu Zm8gb2YgdGhlIGRpc3BsYXkgbW9kZSIsCi0JCQlkaXNwbGF5LT5uYW1lKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfZ2V0X2hvc3RfY2ZnX2Zvcl9tb2RlKGRpc3Bs YXktPnBhbmVsLAotCQkJCQkgICAgIG1vZGUsCi0JCQkJCSAgICAgJmRpc3BsYXktPmNvbmZpZyk7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZ2V0IGhvc3QgY29uZmlnIGZv ciBtb2RlLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBl cnJvcjsKLQl9Ci0KLQltZW1jcHkoJmRpc3BsYXktPmNvbmZpZy5sYW5lX21hcCwgJmRpc3BsYXkt PmxhbmVfbWFwLAotCSAgICAgICBzaXplb2YoZGlzcGxheS0+bGFuZV9tYXApKTsKLQotCWlmICht b2RlLT5kc2lfbW9kZV9mbGFncyAmCi0JCQkoRFNJX01PREVfRkxBR19ERlBTIHwgRFNJX01PREVf RkxBR19WUlIpKSB7Ci0JCXJjID0gZHNpX2Rpc3BsYXlfZGZwc191cGRhdGUoZGlzcGxheSwgbW9k ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdRFNJIGRmcHMgdXBkYXRlIGZhaWxlZCwg cmM9JWRcbiIsCi0JCQkJCWRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0K LQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0 cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJcmMgPSBkc2lfY3RybF91cGRhdGVfaG9zdF9jb25m aWcoY3RybC0+Y3RybCwgJmRpc3BsYXktPmNvbmZpZywKLQkJCQltb2RlLT5kc2lfbW9kZV9mbGFn cywgZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVz XSBmYWlsZWQgdG8gdXBkYXRlIGN0cmwgY29uZmlnLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNw bGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JaWYgKHByaXZfaW5m by0+cGh5X3RpbWluZ19sZW4pIHsKLQkJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291 bnQ7IGkrKykgewotCQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQkJIHJjID0gZHNpX3Bo eV9zZXRfdGltaW5nX3BhcmFtcyhjdHJsLT5waHksCi0JCQkJcHJpdl9pbmZvLT5waHlfdGltaW5n X3ZhbCwKLQkJCQlwcml2X2luZm8tPnBoeV90aW1pbmdfbGVuKTsKLQkJCWlmIChyYykKLQkJCQlw cl9lcnIoImZhaWxlZCB0byBhZGQgRFNJIFBIWSB0aW1pbmcgcGFyYW1zIik7Ci0JCX0KLQl9Ci1l cnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogX2RzaV9kaXNwbGF5X2Rldl9pbml0IC0g aW5pdGlhbGl6ZXMgdGhlIGRpc3BsYXkgZGV2aWNlCi0gKiBJbml0aWFsaXphdGlvbiB3aWxsIGFj cXVpcmUgcmVmZXJlbmNlcyB0byB0aGUgcmVzb3VyY2VzIHJlcXVpcmVkIGZvciB0aGUKLSAqIGRp c3BsYXkgaGFyZHdhcmUgdG8gZnVuY3Rpb24uCi0gKiBAZGlzcGxheTogICAgICAgICBIYW5kbGUg dG8gdGhlIGRpc3BsYXkKLSAqIFJldHVybnM6ICAgICAgICAgIFplcm8gb24gc3VjY2VzcwotICov Ci1zdGF0aWMgaW50IF9kc2lfZGlzcGxheV9kZXZfaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRp c3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoImlu dmFsaWQgZGlzcGxheVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2so JmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3BhcnNlX2R0KGRp c3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHBhcnNlIGR0LCBy Yz0lZFxuIiwgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0g ZHNpX2Rpc3BsYXlfcmVzX2luaXQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVz XSBmYWlsZWQgdG8gaW5pdGlhbGl6ZSByZXNvdXJjZXMsIHJjPSVkXG4iLAotCQkgICAgICAgZGlz cGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLWVycm9yOgotCW11dGV4X3VubG9j aygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogX2Rz aV9kaXNwbGF5X2Rldl9kZWluaXQgLSBkZWluaXRpYWxpemVzIHRoZSBkaXNwbGF5IGRldmljZQot ICogQWxsIHRoZSByZXNvdXJjZXMgYWNxdWlyZWQgZHVyaW5nIGRldmljZSBpbml0IHdpbGwgYmUg cmVsZWFzZWQuCi0gKiBAZGlzcGxheTogICAgICAgIEhhbmRsZSB0byB0aGUgZGlzcGxheQotICog UmV0dXJuczogICAgICAgICBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotc3RhdGljIGludCBfZHNpX2Rp c3BsYXlfZGV2X2RlaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJj ID0gMDsKLQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoImludmFsaWQgZGlzcGxheVxuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlf bG9jayk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3Jlc19kZWluaXQoZGlzcGxheSk7Ci0JaWYgKHJj KQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRlaW5pdGlhbGl6ZSByZXNvdXJjZSwgcmM9JWRc biIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQltdXRleF91bmxvY2soJmRpc3Bs YXktPmRpc3BsYXlfbG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2Rpc3Bs YXlfYmluZCAtIGJpbmQgZHNpIGRldmljZSB3aXRoIGNvbnRyb2xsaW5nIGRldmljZQotICogQGRl djogICAgICAgIFBvaW50ZXIgdG8gYmFzZSBvZiBwbGF0Zm9ybSBkZXZpY2UKLSAqIEBtYXN0ZXI6 ICAgICBQb2ludGVyIHRvIGNvbnRhaW5lciBvZiBkcm0gZGV2aWNlCi0gKiBAZGF0YTogICAgICAg UG9pbnRlciB0byBwcml2YXRlIGRhdGEKLSAqIFJldHVybnM6ICAgICBaZXJvIG9uIHN1Y2Nlc3MK LSAqLwotc3RhdGljIGludCBkc2lfZGlzcGxheV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJ c3RydWN0IGRldmljZSAqbWFzdGVyLAotCQl2b2lkICpkYXRhKQotewotCXN0cnVjdCBkc2lfZGlz cGxheV9jdHJsICpkaXNwbGF5X2N0cmw7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRybTsKLQlzdHJ1 Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9jbGtfaW5mbyBpbmZvOwotCXN0 cnVjdCBjbGtfY3RybF9jYiBjbGtfY2I7Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsK LQl2b2lkICpoYW5kbGUgPSBOVUxMOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0 b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQljaGFyICpjbGllbnQxID0gImRzaV9jbGtfY2xpZW50 IjsKLQljaGFyICpjbGllbnQyID0gIm1kcF9ldmVudF9jbGllbnQiOwotCWNoYXIgZHNpX2NsaWVu dF9uYW1lW0RTSV9DTElFTlRfTkFNRV9TSVpFXTsKLQlpbnQgaSwgcmMgPSAwOwotCi0JaWYgKCFk ZXYgfHwgIXBkZXYgfHwgIW1hc3RlcikgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW0ocyksIGRl diAlcEssIHBkZXYgJXBLLCBtYXN0ZXIgJXBLXG4iLAotCQkJCWRldiwgcGRldiwgbWFzdGVyKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7 Ci0JZGlzcGxheSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWlmICghZHJtIHx8ICFk aXNwbGF5KSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbShzKSwgZHJtICVwSywgZGlzcGxheSAl cEtcbiIsCi0JCQkJZHJtLCBkaXNwbGF5KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXByaXYg PSBkcm0tPmRldl9wcml2YXRlOwotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2Nr KTsKLQotCXJjID0gZHNpX2Rpc3BsYXlfZGVidWdmc19pbml0KGRpc3BsYXkpOwotCWlmIChyYykg ewotCQlwcl9lcnIoIlslc10gZGVidWdmcyBpbml0IGZhaWxlZCwgcmM9JWRcbiIsIGRpc3BsYXkt Pm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQltZW1zZXQoJmluZm8sIDB4MCwgc2l6 ZW9mKGluZm8pKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKysp IHsKLQkJZGlzcGxheV9jdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCXJjID0gZHNpX2N0cmxf ZHJ2X2luaXQoZGlzcGxheV9jdHJsLT5jdHJsLCBkaXNwbGF5LT5yb290KTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGluaXRpYWxpemUgY3RybFslZF0sIHJjPSVkXG4i LAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIGksIHJjKTsKLQkJCWdvdG8gZXJyb3JfY3RybF9k ZWluaXQ7Ci0JCX0KLQkJZGlzcGxheV9jdHJsLT5jdHJsLT5ob3Jpel9pbmRleCA9IGk7Ci0KLQkJ cmMgPSBkc2lfcGh5X2Rydl9pbml0KGRpc3BsYXlfY3RybC0+cGh5KTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoIlslc10gRmFpbGVkIHRvIGluaXRpYWxpemUgcGh5WyVkXSwgcmM9JWRcbiIsCi0J CQkJZGlzcGxheS0+bmFtZSwgaSwgcmMpOwotCQkJKHZvaWQpZHNpX2N0cmxfZHJ2X2RlaW5pdChk aXNwbGF5X2N0cmwtPmN0cmwpOwotCQkJZ290byBlcnJvcl9jdHJsX2RlaW5pdDsKLQkJfQotCi0J CW1lbWNweSgmaW5mby5jX2Nsa3NbaV0sICZkaXNwbGF5X2N0cmwtPmN0cmwtPmNsa19pbmZvLmNv cmVfY2xrcywKLQkJCXNpemVvZihzdHJ1Y3QgZHNpX2NvcmVfY2xrX2luZm8pKTsKLQkJbWVtY3B5 KCZpbmZvLmxfY2xrc1tpXSwgJmRpc3BsYXlfY3RybC0+Y3RybC0+Y2xrX2luZm8ubGlua19jbGtz LAotCQkJc2l6ZW9mKHN0cnVjdCBkc2lfbGlua19jbGtfaW5mbykpOwotCQlpbmZvLmNfY2xrc1tp XS5waGFuZGxlID0gJnByaXYtPnBoYW5kbGU7Ci0JCWluZm8uYnVzX2hhbmRsZVtpXSA9Ci0JCQlk aXNwbGF5X2N0cmwtPmN0cmwtPmF4aV9idXNfaW5mby5idXNfaGFuZGxlOwotCQlpbmZvLmN0cmxf aW5kZXhbaV0gPSBkaXNwbGF5X2N0cmwtPmN0cmwtPmNlbGxfaW5kZXg7Ci0JCXNucHJpbnRmKGRz aV9jbGllbnRfbmFtZSwgRFNJX0NMSUVOVF9OQU1FX1NJWkUsCi0JCQkJCQkiZHNpX2NvcmVfY2xp ZW50JXUiLCBpKTsKLQkJaW5mby5jX2Nsa3NbaV0uZHNpX2NvcmVfY2xpZW50ID0gZHB1X3Bvd2Vy X2NsaWVudF9jcmVhdGUoCi0JCQkJaW5mby5jX2Nsa3NbaV0ucGhhbmRsZSwgZHNpX2NsaWVudF9u YW1lKTsKLQkJaWYgKElTX0VSUl9PUl9OVUxMKGluZm8uY19jbGtzW2ldLmRzaV9jb3JlX2NsaWVu dCkpIHsKLQkJCXByX2VycigiWyVzXSBjbGllbnQgY3JlYXRpb24gZmFpbGVkIGZvciBjdHJsWyVk XSIsCi0JCQkJCWRzaV9jbGllbnRfbmFtZSwgaSk7Ci0JCQlnb3RvIGVycm9yX2N0cmxfZGVpbml0 OwotCQl9Ci0JfQotCi0JaW5mby5wcmVfY2xrb2ZmX2NiID0gZHNpX3ByZV9jbGtvZmZfY2I7Ci0J aW5mby5wcmVfY2xrb25fY2IgPSBkc2lfcHJlX2Nsa29uX2NiOwotCWluZm8ucG9zdF9jbGtvZmZf Y2IgPSBkc2lfcG9zdF9jbGtvZmZfY2I7Ci0JaW5mby5wb3N0X2Nsa29uX2NiID0gZHNpX3Bvc3Rf Y2xrb25fY2I7Ci0JaW5mby5wcml2X2RhdGEgPSBkaXNwbGF5OwotCWluZm8ubWFzdGVyX25keCA9 IGRpc3BsYXktPmNsa19tYXN0ZXJfaWR4OwotCWluZm8uZHNpX2N0cmxfY291bnQgPSBkaXNwbGF5 LT5jdHJsX2NvdW50OwotCXNucHJpbnRmKGluZm8ubmFtZSwgTUFYX1NUUklOR19MRU4sCi0JCQki RFNJX01OR1ItJXMiLCBkaXNwbGF5LT5uYW1lKTsKLQotCWRpc3BsYXktPmNsa19tbmdyID0gZHNp X2Rpc3BsYXlfY2xrX21uZ3JfcmVnaXN0ZXIoJmluZm8pOwotCWlmIChJU19FUlJfT1JfTlVMTChk aXNwbGF5LT5jbGtfbW5ncikpIHsKLQkJcmMgPSBQVFJfRVJSKGRpc3BsYXktPmNsa19tbmdyKTsK LQkJZGlzcGxheS0+Y2xrX21uZ3IgPSBOVUxMOwotCQlwcl9lcnIoImRzaSBjbG9jayByZWdpc3Ry YXRpb24gZmFpbGVkLCByYyA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9kZWluaXQ7 Ci0JfQotCi0JaGFuZGxlID0gZHNpX3JlZ2lzdGVyX2Nsa19oYW5kbGUoZGlzcGxheS0+Y2xrX21u Z3IsIGNsaWVudDEpOwotCWlmIChJU19FUlJfT1JfTlVMTChoYW5kbGUpKSB7Ci0JCXJjID0gUFRS X0VSUihoYW5kbGUpOwotCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciAlcyBjbGllbnQsIHJj ID0gJWRcbiIsCi0JCSAgICAgICBjbGllbnQxLCByYyk7Ci0JCWdvdG8gZXJyb3JfY2xrX2RlaW5p dDsKLQl9IGVsc2UgewotCQlkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSA9IGhhbmRsZTsKLQl9Ci0K LQloYW5kbGUgPSBkc2lfcmVnaXN0ZXJfY2xrX2hhbmRsZShkaXNwbGF5LT5jbGtfbW5nciwgY2xp ZW50Mik7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGhhbmRsZSkpIHsKLQkJcmMgPSBQVFJfRVJSKGhh bmRsZSk7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlZ2lzdGVyICVzIGNsaWVudCwgcmMgPSAlZFxu IiwKLQkJICAgICAgIGNsaWVudDIsIHJjKTsKLQkJZ290byBlcnJvcl9jbGtfY2xpZW50X2RlaW5p dDsKLQl9IGVsc2UgewotCQlkaXNwbGF5LT5tZHBfY2xrX2hhbmRsZSA9IGhhbmRsZTsKLQl9Ci0K LQljbGtfY2IucHJpdiA9IGRpc3BsYXk7Ci0JY2xrX2NiLmRzaV9jbGtfY2IgPSBkc2lfZGlzcGxh eV9jbGtfY3RybF9jYjsKLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBp KyspIHsKLQkJZGlzcGxheV9jdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0KLQkJcmMgPSBkc2lf Y3RybF9jbGtfY2JfcmVnaXN0ZXIoZGlzcGxheV9jdHJsLT5jdHJsLCAmY2xrX2NiKTsKLQkJaWYg KHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHJlZ2lzdGVyIGN0cmwgY2xrX2NiWyVk XSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgaSwgcmMpOwotCQkJZ290byBl cnJvcl9jdHJsX2RlaW5pdDsKLQkJfQotCi0JCXJjID0gZHNpX3BoeV9jbGtfY2JfcmVnaXN0ZXIo ZGlzcGxheV9jdHJsLT5waHksICZjbGtfY2IpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVz XSBmYWlsZWQgdG8gcmVnaXN0ZXIgcGh5IGNsa19jYlslZF0sIHJjPSVkXG4iLAotCQkJICAgICAg IGRpc3BsYXktPm5hbWUsIGksIHJjKTsKLQkJCWdvdG8gZXJyb3JfY3RybF9kZWluaXQ7Ci0JCX0K LQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X21pcGlfaG9zdF9pbml0KGRpc3BsYXkpOwotCWlmIChy YykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGluaXRpYWxpemUgbWlwaSBob3N0LCByYz0l ZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9jdHJsX2Rl aW5pdDsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9kcnZfaW5pdChkaXNwbGF5LT5wYW5lbCwgJmRp c3BsYXktPmhvc3QpOwotCWlmIChyYykgewotCQlpZiAocmMgIT0gLUVQUk9CRV9ERUZFUikKLQkJ CXByX2VycigiWyVzXSBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYW5lbCBkcml2ZXIsIHJjPSVkXG4i LAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9ob3N0X2RlaW5p dDsKLQl9Ci0KLQlwcl9pbmZvKCJTdWNjZXNzZnVsbHkgYmluZCBkaXNwbGF5IHBhbmVsICclcydc biIsIGRpc3BsYXktPm5hbWUpOwotCWRpc3BsYXktPmRybV9kZXYgPSBkcm07Ci0JZ290byBlcnJv cjsKLQotZXJyb3JfaG9zdF9kZWluaXQ6Ci0JKHZvaWQpZHNpX2Rpc3BsYXlfbWlwaV9ob3N0X2Rl aW5pdChkaXNwbGF5KTsKLWVycm9yX2Nsa19jbGllbnRfZGVpbml0OgotCSh2b2lkKWRzaV9kZXJl Z2lzdGVyX2Nsa19oYW5kbGUoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUpOwotZXJyb3JfY2xrX2Rl aW5pdDoKLQkodm9pZClkc2lfZGlzcGxheV9jbGtfbW5ncl9kZXJlZ2lzdGVyKGRpc3BsYXktPmNs a19tbmdyKTsKLWVycm9yX2N0cmxfZGVpbml0OgotCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGkt LSkgewotCQlkaXNwbGF5X2N0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJKHZvaWQpZHNpX3Bo eV9kcnZfZGVpbml0KGRpc3BsYXlfY3RybC0+cGh5KTsKLQkJKHZvaWQpZHNpX2N0cmxfZHJ2X2Rl aW5pdChkaXNwbGF5X2N0cmwtPmN0cmwpOwotCX0KLQkodm9pZClkc2lfZGlzcGxheV9kZWJ1Z2Zz X2RlaW5pdChkaXNwbGF5KTsKLWVycm9yOgotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxh eV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfdW5iaW5kIC0g dW5iaW5kIGRzaSBmcm9tIGNvbnRyb2xsaW5nIGRldmljZQotICogQGRldjogICAgICAgIFBvaW50 ZXIgdG8gYmFzZSBvZiBwbGF0Zm9ybSBkZXZpY2UKLSAqIEBtYXN0ZXI6ICAgICBQb2ludGVyIHRv IGNvbnRhaW5lciBvZiBkcm0gZGV2aWNlCi0gKiBAZGF0YTogICAgICAgUG9pbnRlciB0byBwcml2 YXRlIGRhdGEKLSAqLwotc3RhdGljIHZvaWQgZHNpX2Rpc3BsYXlfdW5iaW5kKHN0cnVjdCBkZXZp Y2UgKmRldiwKLQkJc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQotewotCXN0cnVj dCBkc2lfZGlzcGxheV9jdHJsICpkaXNwbGF5X2N0cmw7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpk aXNwbGF5OwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZp Y2UoZGV2KTsKLQlpbnQgaSwgcmMgPSAwOwotCi0JaWYgKCFkZXYgfHwgIXBkZXYpIHsKLQkJcHJf ZXJyKCJpbnZhbGlkIHBhcmFtKHMpXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRpc3BsYXkgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJp bnZhbGlkIGRpc3BsYXlcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGlzcGxh eS0+ZGlzcGxheV9sb2NrKTsKLQotCXJjID0gZHNpX3BhbmVsX2Rydl9kZWluaXQoZGlzcGxheS0+ cGFuZWwpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkZWluaXQgcGFuZWwg ZHJpdmVyLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCXJjID0g ZHNpX2Rpc3BsYXlfbWlwaV9ob3N0X2RlaW5pdChkaXNwbGF5KTsKLQlpZiAocmMpCi0JCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gZGVpbml0IG1pcGkgaG9zdHMsIHJjPSVkXG4iLAotCQkgICAgICAg ZGlzcGxheS0+bmFtZSwKLQkJICAgICAgIHJjKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5 LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJZGlzcGxheV9jdHJsID0gJmRpc3BsYXktPmN0cmxbaV07 Ci0KLQkJcmMgPSBkc2lfcGh5X2Rydl9kZWluaXQoZGlzcGxheV9jdHJsLT5waHkpOwotCQlpZiAo cmMpCi0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRlaW5pdCBwaHklZCBkcml2ZXIsIHJjPSVk XG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIGksIHJjKTsKLQotCQlyYyA9IGRzaV9jdHJs X2Rydl9kZWluaXQoZGlzcGxheV9jdHJsLT5jdHJsKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJb JXNdIGZhaWxlZCB0byBkZWluaXQgY3RybCVkIGRyaXZlciwgcmM9JWRcbiIsCi0JCQkgICAgICAg ZGlzcGxheS0+bmFtZSwgaSwgcmMpOwotCX0KLQkodm9pZClkc2lfZGlzcGxheV9kZWJ1Z2ZzX2Rl aW5pdChkaXNwbGF5KTsKLQotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsK LX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIGRzaV9kaXNwbGF5X2NvbXBf b3BzID0gewotCS5iaW5kID0gZHNpX2Rpc3BsYXlfYmluZCwKLQkudW5iaW5kID0gZHNpX2Rpc3Bs YXlfdW5iaW5kLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHNpX2Rpc3Bs YXlfZHJpdmVyID0gewotCS5wcm9iZSA9IGRzaV9kaXNwbGF5X2Rldl9wcm9iZSwKLQkucmVtb3Zl ID0gZHNpX2Rpc3BsYXlfZGV2X3JlbW92ZSwKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJtc20t ZHNpLWRpc3BsYXkiLAotCQkub2ZfbWF0Y2hfdGFibGUgPSBkc2lfZGlzcGxheV9kdF9tYXRjaCwK LQl9LAotfTsKLQotaW50IGRzaV9kaXNwbGF5X2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5 OwotCXN0YXRpYyBib29sIGRpc3BsYXlfZnJvbV9jbWRsaW5lLCBib290X2Rpc3BsYXlzX3BhcnNl ZDsKLQlzdGF0aWMgYm9vbCBjb21wX2FkZF9zdWNjZXNzOwotCXN0YXRpYyBzdHJ1Y3QgZGV2aWNl X25vZGUgKnByaW1hcnlfbnAsICpzZWNvbmRhcnlfbnA7Ci0KLQlpZiAoIXBkZXYgfHwgIXBkZXYt PmRldi5vZl9ub2RlKSB7Ci0JCXByX2VycigicGRldiBub3QgZm91bmRcbiIpOwotCQlyZXR1cm4g LUVOT0RFVjsKLQl9Ci0KLQlkaXNwbGF5ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVv ZigqZGlzcGxheSksIEdGUF9LRVJORUwpOwotCWlmICghZGlzcGxheSkKLQkJcmV0dXJuIC1FTk9N RU07Ci0KLQlkaXNwbGF5LT5uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KHBkZXYtPmRldi5vZl9ub2Rl LCAibGFiZWwiLCBOVUxMKTsKLQotCWlmICghYm9vdF9kaXNwbGF5c19wYXJzZWQpIHsKLQkJYm9v dF9kaXNwbGF5c1tEU0lfUFJJTUFSWV0uYm9vdF9kaXNwX2VuID0gZmFsc2U7Ci0JCWJvb3RfZGlz cGxheXNbRFNJX1NFQ09OREFSWV0uYm9vdF9kaXNwX2VuID0gZmFsc2U7Ci0JCWlmIChkc2lfZGlz cGxheV9wYXJzZV9ib290X2Rpc3BsYXlfc2VsZWN0aW9uKCkpCi0JCQlwcl9kZWJ1ZygiRGlzcGxh eSBCb290IHBhcmFtIG5vdCB2YWxpZC9hdmFpbGFibGVcbiIpOwotCi0JCWJvb3RfZGlzcGxheXNf cGFyc2VkID0gdHJ1ZTsKLQl9Ci0KLQkvKiB1c2UgZGVmYXVsdCB0b3BvbG9neSBvZiBldmVyeSBt b2RlIGlmIG5vdCBvdmVycmlkZGVuICovCi0JZGlzcGxheS0+Y21kbGluZV90b3BvbG9neSA9IE5P X09WRVJSSURFOwotCWRpc3BsYXktPmNtZGxpbmVfdGltaW5nID0gMDsKLQotCWlmICgoIWRpc3Bs YXlfZnJvbV9jbWRsaW5lKSAmJgotCQkJKGJvb3RfZGlzcGxheXNbRFNJX1BSSU1BUlldLmJvb3Rf ZGlzcF9lbikpIHsKLQkJZGlzcGxheS0+aXNfYWN0aXZlID0gZHNpX2Rpc3BsYXlfbmFtZV9jb21w YXJlKHBkZXYtPmRldi5vZl9ub2RlLAotCQkJCQkJZGlzcGxheS0+bmFtZSwgRFNJX1BSSU1BUlkp OwotCQlpZiAoZGlzcGxheS0+aXNfYWN0aXZlKSB7Ci0JCQlpZiAoY29tcF9hZGRfc3VjY2Vzcykg ewotCQkJCSh2b2lkKV9kc2lfZGlzcGxheV9kZXZfZGVpbml0KG1haW5fZGlzcGxheSk7Ci0JCQkJ Y29tcG9uZW50X2RlbCgmbWFpbl9kaXNwbGF5LT5wZGV2LT5kZXYsCi0JCQkJCSAgICAgICZkc2lf ZGlzcGxheV9jb21wX29wcyk7Ci0JCQkJbXV0ZXhfbG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9sb2Nr KTsKLQkJCQlsaXN0X2RlbCgmbWFpbl9kaXNwbGF5LT5saXN0KTsKLQkJCQltdXRleF91bmxvY2so JmRzaV9kaXNwbGF5X2xpc3RfbG9jayk7Ci0JCQkJY29tcF9hZGRfc3VjY2VzcyA9IGZhbHNlOwot CQkJCWRlZmF1bHRfYWN0aXZlX25vZGUgPSBOVUxMOwotCQkJCXByX2RlYnVnKCJyZW1vdmVkIHRo ZSBleGlzdGluZyBjb21wIG9wc1xuIik7Ci0JCQl9Ci0JCQkvKgotCQkJICogTmVlZCB0byBhZGQg Y29tcG9uZW50IGZvcgotCQkJICogdGhlIHNlY29uZGFyeSBEU0kgZGlzcGxheQotCQkJICogd2hl biBtb3JlIHRoYW4gb25lIERTSSBkaXNwbGF5Ci0JCQkgKiBpcyBzdXBwb3J0ZWQuCi0JCQkgKi8K LQkJCXByX2RlYnVnKCJjbWRsaW5lIHByaW1hcnkgZHNpOiAlc1xuIiwKLQkJCQkJCWRpc3BsYXkt Pm5hbWUpOwotCQkJZGlzcGxheV9mcm9tX2NtZGxpbmUgPSB0cnVlOwotCQkJZHNpX2Rpc3BsYXlf cGFyc2VfY21kbGluZV90b3BvbG9neShkaXNwbGF5LAotCQkJCQlEU0lfUFJJTUFSWSk7Ci0JCQlw cmltYXJ5X25wID0gcGRldi0+ZGV2Lm9mX25vZGU7Ci0JCX0KLQl9Ci0KLQlpZiAoYm9vdF9kaXNw bGF5c1tEU0lfU0VDT05EQVJZXS5ib290X2Rpc3BfZW4KLQkJCSYmICFzZWNvbmRhcnlfbnAKLQkJ CSYmIGRzaV9kaXNwbGF5X25hbWVfY29tcGFyZShwZGV2LT5kZXYub2Zfbm9kZSwKLQkJCQkJCWRp c3BsYXktPm5hbWUsIERTSV9TRUNPTkRBUlkpKSB7Ci0JCXByX2RlYnVnKCJjbWRsaW5lIHNlY29u ZGFyeSBkc2k6ICVzXG4iLAotCQkJCQlkaXNwbGF5LT5uYW1lKTsKLQkJc2Vjb25kYXJ5X25wID0g cGRldi0+ZGV2Lm9mX25vZGU7Ci0JCWlmIChwcmltYXJ5X25wKSB7Ci0JCQlpZiAodmFsaWRhdGVf ZHNpX2Rpc3BsYXlfc2VsZWN0aW9uKCkpIHsKLQkJCQlkaXNwbGF5LT5pc19hY3RpdmUgPSB0cnVl OwotCQkJCWRzaV9kaXNwbGF5X3BhcnNlX2NtZGxpbmVfdG9wb2xvZ3koCi0JCQkJCQlkaXNwbGF5 LCBEU0lfU0VDT05EQVJZKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYm9vdF9kaXNwbGF5c1tEU0lfU0VD T05EQVJZXQotCQkJCQkuYm9vdF9kaXNwX2VuID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQl9Ci0JZGlz cGxheS0+ZGlzcGxheV90eXBlID0gb2ZfZ2V0X3Byb3BlcnR5KHBkZXYtPmRldi5vZl9ub2RlLAot CQkJCQkJInFjb20sZGlzcGxheS10eXBlIiwgTlVMTCk7Ci0JaWYgKCFkaXNwbGF5LT5kaXNwbGF5 X3R5cGUpCi0JCWRpc3BsYXktPmRpc3BsYXlfdHlwZSA9ICJ1bmtub3duIjsKLQotCW11dGV4X2lu aXQoJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JZGlzcGxheS0+cGRldiA9IHBkZXY7Ci0JcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGlzcGxheSk7Ci0JbXV0ZXhfbG9jaygmZHNpX2Rpc3Bs YXlfbGlzdF9sb2NrKTsKLQlsaXN0X2FkZCgmZGlzcGxheS0+bGlzdCwgJmRzaV9kaXNwbGF5X2xp c3QpOwotCW11dGV4X3VubG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsKLQotCWlmICghZGlz cGxheV9mcm9tX2NtZGxpbmUpCi0JCWRpc3BsYXktPmlzX2FjdGl2ZSA9IG9mX3Byb3BlcnR5X3Jl YWRfYm9vbChwZGV2LT5kZXYub2Zfbm9kZSwKLQkJCQkJCSJxY29tLGRzaS1kaXNwbGF5LWFjdGl2 ZSIpOwotCi0JaWYgKGRpc3BsYXktPmlzX2FjdGl2ZSkgewotCQltYWluX2Rpc3BsYXkgPSBkaXNw bGF5OwotCQlyYyA9IF9kc2lfZGlzcGxheV9kZXZfaW5pdChkaXNwbGF5KTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoImRldmljZSBpbml0IGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJCXJldHVy biByYzsKLQkJfQotCi0JCXJjID0gY29tcG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmZHNpX2Rpc3Bs YXlfY29tcF9vcHMpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoImNvbXBvbmVudCBhZGQgZmFpbGVk LCByYz0lZFxuIiwgcmMpOwotCi0JCWNvbXBfYWRkX3N1Y2Nlc3MgPSB0cnVlOwotCQlwcl9kZWJ1 ZygiQ29tcG9uZW50X2FkZCBzdWNjZXNzOiAlc1xuIiwgZGlzcGxheS0+bmFtZSk7Ci0JCWlmICgh ZGlzcGxheV9mcm9tX2NtZGxpbmUpCi0JCQlkZWZhdWx0X2FjdGl2ZV9ub2RlID0gcGRldi0+ZGV2 Lm9mX25vZGU7Ci0JfQotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X2Rldl9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVj dCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKnBvcywgKnRtcDsK LQotCWlmICghcGRldikgewotCQlwcl9lcnIoIkludmFsaWQgZGV2aWNlXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JZGlzcGxheSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwot Ci0JKHZvaWQpX2RzaV9kaXNwbGF5X2Rldl9kZWluaXQoZGlzcGxheSk7Ci0KLQltdXRleF9sb2Nr KCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3Ms IHRtcCwgJmRzaV9kaXNwbGF5X2xpc3QsIGxpc3QpIHsKLQkJaWYgKHBvcyA9PSBkaXNwbGF5KSB7 Ci0JCQlsaXN0X2RlbCgmZGlzcGxheS0+bGlzdCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQltdXRl eF91bmxvY2soJmRzaV9kaXNwbGF5X2xpc3RfbG9jayk7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0 YShwZGV2LCBOVUxMKTsKLQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGRpc3BsYXkpOwotCXJldHVy biByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X2dldF9udW1fb2ZfZGlzcGxheXModm9pZCkKLXsK LQlpbnQgY291bnQgPSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQotCW11dGV4 X2xvY2soJmRzaV9kaXNwbGF5X2xpc3RfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRp c3BsYXksICZkc2lfZGlzcGxheV9saXN0LCBsaXN0KSB7Ci0JCWNvdW50Kys7Ci0JfQotCi0JbXV0 ZXhfdW5sb2NrKCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwotCXJldHVybiBjb3VudDsKLX0KLQot aW50IGRzaV9kaXNwbGF5X2dldF9hY3RpdmVfZGlzcGxheXModm9pZCAqKmRpc3BsYXlfYXJyYXks IHUzMiBtYXhfZGlzcGxheV9jb3VudCkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKnBvczsKLQlp bnQgaSA9IDA7Ci0KLQlpZiAoIWRpc3BsYXlfYXJyYXkgfHwgIW1heF9kaXNwbGF5X2NvdW50KSB7 Ci0JCWlmICghZGlzcGxheV9hcnJheSkKLQkJCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwot CQlyZXR1cm4gMDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwot Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZkc2lfZGlzcGxheV9saXN0LCBsaXN0KSB7Ci0J CWlmIChpID49IG1heF9kaXNwbGF5X2NvdW50KSB7Ci0JCQlwcl9lcnIoImNhcHBpbmcgZGlzcGxh eSBjb3VudCB0byAlZFxuIiwgaSk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocG9zLT5pc19hY3Rp dmUpCi0JCQlkaXNwbGF5X2FycmF5W2krK10gPSBwb3M7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZk c2lfZGlzcGxheV9saXN0X2xvY2spOwotCXJldHVybiBpOwotfQotCi1zdHJ1Y3QgZHNpX2Rpc3Bs YXkgKmRzaV9kaXNwbGF5X2dldF9kaXNwbGF5X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKLXsK LQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkgPSBOVUxMLCAqcG9zOwotCi0JbXV0ZXhfbG9j aygmZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAm ZHNpX2Rpc3BsYXlfbGlzdCwgbGlzdCkgewotCQlpZiAoIXN0cmNtcChuYW1lLCBwb3MtPm5hbWUp KQotCQkJZGlzcGxheSA9IHBvczsKLQl9Ci0KLQltdXRleF91bmxvY2soJmRzaV9kaXNwbGF5X2xp c3RfbG9jayk7Ci0KLQlyZXR1cm4gZGlzcGxheTsKLX0KLQotdm9pZCBkc2lfZGlzcGxheV9zZXRf YWN0aXZlX3N0YXRlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwgYm9vbCBpc19hY3RpdmUp Ci17Ci0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlkaXNwbGF5LT5pc19h Y3RpdmUgPSBpc19hY3RpdmU7Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2sp OwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZHJtX2JyaWRnZV9pbml0KHN0cnVjdCBkc2lfZGlzcGxh eSAqZGlzcGxheSwKLQkJc3RydWN0IGRybV9lbmNvZGVyICplbmMpCi17Ci0JaW50IHJjID0gMDsK LQlzdHJ1Y3QgZHNpX2JyaWRnZSAqYnJpZGdlOwotCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnBy aXYgPSBOVUxMOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5kcm1fZGV2IHx8ICFlbmMp IHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtKHMpXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlwcml2ID0gZGlzcGxh eS0+ZHJtX2Rldi0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAoIXByaXYpIHsKLQkJcHJfZXJyKCJQcml2 YXRlIGRhdGEgaXMgbm90IHByZXNlbnRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0JaWYgKGRpc3BsYXktPmJyaWRnZSkgewotCQlwcl9lcnIoImRpc3BsYXkgaXMg YWxyZWFkeSBpbml0aWFsaXplXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlicmlkZ2UgPSBk c2lfZHJtX2JyaWRnZV9pbml0KGRpc3BsYXksIGRpc3BsYXktPmRybV9kZXYsIGVuYyk7Ci0JaWYg KElTX0VSUl9PUl9OVUxMKGJyaWRnZSkpIHsKLQkJcmMgPSBQVFJfRVJSKGJyaWRnZSk7Ci0JCXBy X2VycigiWyVzXSBicmlnZSBpbml0IGZhaWxlZCwgJWRcbiIsIGRpc3BsYXktPm5hbWUsIHJjKTsK LQkJZ290byBlcnJvcjsKLQl9Ci0KLQlkaXNwbGF5LT5icmlkZ2UgPSBicmlkZ2U7Ci0JcHJpdi0+ YnJpZGdlc1twcml2LT5udW1fYnJpZGdlcysrXSA9ICZicmlkZ2UtPmJhc2U7Ci0KLWVycm9yOgot CW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0K LWludCBkc2lfZGlzcGxheV9kcm1fYnJpZGdlX2RlaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRp c3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoIklu dmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygm ZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCWRzaV9kcm1fYnJpZGdlX2NsZWFudXAoZGlzcGxh eS0+YnJpZGdlKTsKLQlkaXNwbGF5LT5icmlkZ2UgPSBOVUxMOwotCi0JbXV0ZXhfdW5sb2NrKCZk aXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5 X2dldF9pbmZvKHN0cnVjdCBtc21fZGlzcGxheV9pbmZvICppbmZvLCB2b2lkICpkaXNwKQotewot CXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQlzdHJ1Y3QgZHNpX3BhbmVsX3BoeV9wcm9w cyBwaHlfcHJvcHM7Ci0JaW50IGksIHJjOwotCi0JaWYgKCFpbmZvIHx8ICFkaXNwKSB7Ci0JCXBy X2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkaXNw bGF5ID0gZGlzcDsKLQlpZiAoIWRpc3BsYXktPnBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBk aXNwbGF5IHBhbmVsXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygm ZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyYyA9IGRzaV9wYW5lbF9nZXRfcGh5X3Byb3BzKGRp c3BsYXktPnBhbmVsLCAmcGh5X3Byb3BzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byBnZXQgcGFuZWwgcGh5IHByb3BzLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXkt Pm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQltZW1zZXQoaW5mbywgMCwgc2l6ZW9m KHN0cnVjdCBtc21fZGlzcGxheV9pbmZvKSk7Ci0JaW5mby0+aW50Zl90eXBlID0gRFJNX01PREVf Q09OTkVDVE9SX0RTSTsKLQlpbmZvLT5udW1fb2ZfaF90aWxlcyA9IGRpc3BsYXktPmN0cmxfY291 bnQ7Ci0JZm9yIChpID0gMDsgaSA8IGluZm8tPm51bV9vZl9oX3RpbGVzOyBpKyspCi0JCWluZm8t PmhfdGlsZV9pbnN0YW5jZVtpXSA9IGRpc3BsYXktPmN0cmxbaV0uY3RybC0+Y2VsbF9pbmRleDsK LQotCWluZm8tPmlzX2Nvbm5lY3RlZCA9IHRydWU7Ci0JaW5mby0+aXNfcHJpbWFyeSA9IHRydWU7 Ci0JaW5mby0+d2lkdGhfbW0gPSBwaHlfcHJvcHMucGFuZWxfd2lkdGhfbW07Ci0JaW5mby0+aGVp Z2h0X21tID0gcGh5X3Byb3BzLnBhbmVsX2hlaWdodF9tbTsKLQlpbmZvLT5tYXhfd2lkdGggPSAx OTIwOwotCWluZm8tPm1heF9oZWlnaHQgPSAxMDgwOwotCi0Jc3dpdGNoIChkaXNwbGF5LT5wYW5l bC0+cGFuZWxfbW9kZSkgewotCWNhc2UgRFNJX09QX1ZJREVPX01PREU6Ci0JCWluZm8tPmNhcGFi aWxpdGllcyB8PSBNU01fRElTUExBWV9DQVBfVklEX01PREU7Ci0JCWJyZWFrOwotCWNhc2UgRFNJ X09QX0NNRF9NT0RFOgotCQlpbmZvLT5jYXBhYmlsaXRpZXMgfD0gTVNNX0RJU1BMQVlfQ0FQX0NN RF9NT0RFOwotCQlpbmZvLT5pc190ZV91c2luZ193YXRjaGRvZ190aW1lciA9Ci0JCQlkaXNwbGF5 LT5wYW5lbC0+dGVfdXNpbmdfd2F0Y2hkb2dfdGltZXI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J CXByX2VycigidW5rbndvd24gZHNpIHBhbmVsIG1vZGUgJWRcbiIsCi0JCQkJZGlzcGxheS0+cGFu ZWwtPnBhbmVsX21vZGUpOwotCQlicmVhazsKLQl9Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygm ZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfZGlzcGxh eV9nZXRfbW9kZV9jb3VudChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQl1MzIgKmNv dW50KQotewotCXN0cnVjdCBkc2lfZGZwc19jYXBhYmlsaXRpZXMgZGZwc19jYXBzOwotCWludCBu dW1fZGZwc19yYXRlcywgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5wYW5l bCkgewotCQlwcl9lcnIoImludmFsaWQgZGlzcGxheTolZCBwYW5lbDolZFxuIiwgZGlzcGxheSAh PSBOVUxMLAotCQkJCWRpc3BsYXkgPyBkaXNwbGF5LT5wYW5lbCAhPSBOVUxMIDogMCk7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7 Ci0KLQkqY291bnQgPSBkaXNwbGF5LT5wYW5lbC0+bnVtX3RpbWluZ19ub2RlczsKLQotCXJjID0g ZHNpX3BhbmVsX2dldF9kZnBzX2NhcHMoZGlzcGxheS0+cGFuZWwsICZkZnBzX2NhcHMpOwotCWlm IChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGdldCBkZnBzIGNhcHMgZnJvbSBwYW5l bFxuIiwKLQkJCQlkaXNwbGF5LT5uYW1lKTsKLQkJZ290byBkb25lOwotCX0KLQotCW51bV9kZnBz X3JhdGVzID0gIWRmcHNfY2Fwcy5kZnBzX3N1cHBvcnQgPyAxIDoKLQkJCWRmcHNfY2Fwcy5tYXhf cmVmcmVzaF9yYXRlIC0KLQkJCWRmcHNfY2Fwcy5taW5fcmVmcmVzaF9yYXRlICsgMTsKLQotCS8q IEluZmxhdGUgbnVtX29mX21vZGVzIGJ5IGZwcyBpbiBkZnBzICovCi0JKmNvdW50ID0gZGlzcGxh eS0+cGFuZWwtPm51bV90aW1pbmdfbm9kZXMgKiBudW1fZGZwc19yYXRlczsKLQotZG9uZToKLQlt dXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQot dm9pZCBkc2lfZGlzcGxheV9wdXRfbW9kZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0J c3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUpCi17Ci0JZHNpX3BhbmVsX3B1dF9tb2RlKG1v ZGUpOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X21vZGVzKHN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheSwKLQkJCSAgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGVzKQotewotCXN0cnVj dCBkc2lfZGZwc19jYXBhYmlsaXRpZXMgZGZwc19jYXBzOwotCXUzMiBudW1fZGZwc19yYXRlcywg cGFuZWxfbW9kZV9jb3VudDsKLQl1MzIgbW9kZV9pZHgsIGFycmF5X2lkeCA9IDA7Ci0JaW50IGks IHJjID0gMDsKLQotCWlmICghZGlzcGxheSB8fCAhbW9kZXMpIHsKLQkJcHJfZXJyKCJJbnZhbGlk IHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3Bs YXktPmRpc3BsYXlfbG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF9nZXRfZGZwc19jYXBzKGRpc3Bs YXktPnBhbmVsLCAmZGZwc19jYXBzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxl ZCB0byBnZXQgZGZwcyBjYXBzIGZyb20gcGFuZWxcbiIsCi0JCQkJZGlzcGxheS0+bmFtZSk7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCi0JbnVtX2RmcHNfcmF0ZXMgPSAhZGZwc19jYXBzLmRmcHNfc3Vw cG9ydCA/IDEgOgotCQkJZGZwc19jYXBzLm1heF9yZWZyZXNoX3JhdGUgLQotCQkJZGZwc19jYXBz Lm1pbl9yZWZyZXNoX3JhdGUgKyAxOwotCi0JcGFuZWxfbW9kZV9jb3VudCA9IGRpc3BsYXktPnBh bmVsLT5udW1fdGltaW5nX25vZGVzOwotCi0JZm9yIChtb2RlX2lkeCA9IDA7IG1vZGVfaWR4IDwg cGFuZWxfbW9kZV9jb3VudDsgbW9kZV9pZHgrKykgewotCQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9k ZSBwYW5lbF9tb2RlOwotCQlpbnQgdG9wb2xvZ3lfb3ZlcnJpZGUgPSBOT19PVkVSUklERTsKLQot CQlpZiAoZGlzcGxheS0+Y21kbGluZV90aW1pbmcgPT0gbW9kZV9pZHgpCi0JCQl0b3BvbG9neV9v dmVycmlkZSA9IGRpc3BsYXktPmNtZGxpbmVfdG9wb2xvZ3k7Ci0KLQkJbWVtc2V0KCZwYW5lbF9t b2RlLCAwLCBzaXplb2YocGFuZWxfbW9kZSkpOwotCi0JCXJjID0gZHNpX3BhbmVsX2dldF9tb2Rl KGRpc3BsYXktPnBhbmVsLCBtb2RlX2lkeCwKLQkJCQkJCSZwYW5lbF9tb2RlLCB0b3BvbG9neV9v dmVycmlkZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBnZXQgbW9k ZSBpZHggJWQgZnJvbSBwYW5lbFxuIiwKLQkJCQkgICBkaXNwbGF5LT5uYW1lLCBtb2RlX2lkeCk7 Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJaWYgKGRpc3BsYXktPmN0cmxfY291bnQgPiAxKSB7 IC8qIFRPRE86IHJlbW92ZSBpZiAqLwotCQkJcGFuZWxfbW9kZS50aW1pbmcuaF9hY3RpdmUgKj0g ZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJCXBhbmVsX21vZGUudGltaW5nLmhfZnJvbnRfcG9yY2gg Kj0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJCXBhbmVsX21vZGUudGltaW5nLmhfc3luY193aWR0 aCAqPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQkJcGFuZWxfbW9kZS50aW1pbmcuaF9iYWNrX3Bv cmNoICo9IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCQlwYW5lbF9tb2RlLnRpbWluZy5oX3NrZXcg Kj0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJCXBhbmVsX21vZGUucGl4ZWxfY2xrX2toeiAqPSBk aXNwbGF5LT5jdHJsX2NvdW50OwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IG51bV9kZnBzX3Jh dGVzOyBpKyspIHsKLQkJCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpzdWJfbW9kZSA9ICZtb2Rl c1thcnJheV9pZHhdOwotCQkJdTMyIGN1cnJfcmVmcmVzaF9yYXRlOwotCi0JCQlpZiAoIXN1Yl9t b2RlKSB7Ci0JCQkJcHJfZXJyKCJpbnZhbGlkIG1vZGUgZGF0YVxuIik7Ci0JCQkJcmV0dXJuIC1F RkFVTFQ7Ci0JCQl9Ci0KLQkJCW1lbWNweShzdWJfbW9kZSwgJnBhbmVsX21vZGUsIHNpemVvZihw YW5lbF9tb2RlKSk7Ci0KLQkJCWlmIChkZnBzX2NhcHMuZGZwc19zdXBwb3J0KSB7Ci0JCQkJY3Vy cl9yZWZyZXNoX3JhdGUgPQotCQkJCQlzdWJfbW9kZS0+dGltaW5nLnJlZnJlc2hfcmF0ZTsKLQkJ CQlzdWJfbW9kZS0+dGltaW5nLnJlZnJlc2hfcmF0ZSA9Ci0JCQkJCWRmcHNfY2Fwcy5taW5fcmVm cmVzaF9yYXRlICsKLQkJCQkJKGkgJSBudW1fZGZwc19yYXRlcyk7Ci0KLQkJCQlkc2lfZGlzcGxh eV9nZXRfZGZwc190aW1pbmcoZGlzcGxheSwKLQkJCQkJc3ViX21vZGUsIGN1cnJfcmVmcmVzaF9y YXRlKTsKLQotCQkJCXN1Yl9tb2RlLT5waXhlbF9jbGtfa2h6ID0KLQkJCQkJKERTSV9IX1RPVEFM KCZzdWJfbW9kZS0+dGltaW5nKSAqCi0JCQkJCURTSV9WX1RPVEFMKCZzdWJfbW9kZS0+dGltaW5n KSAqCi0JCQkJCXN1Yl9tb2RlLT50aW1pbmcucmVmcmVzaF9yYXRlKSAvIDEwMDA7Ci0JCQl9Ci0J CQlhcnJheV9pZHgrKzsKLQkJfQotCX0KLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5 LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfZGlzcGxheV92 YWxpZGF0ZV9tb2RlX3ZycigpIC0gVmFsaWRhdGUgaWYgdmFyYWlibGUgcmVmcmVzaCBjYXNlLgot ICogQGRpc3BsYXk6ICAgICBEU0kgZGlzcGxheSBoYW5kbGUuCi0gKiBAY3VyX2RzaV9tb2RlOiAg IEN1cnJlbnQgRFNJIG1vZGUuCi0gKiBAbW9kZTogICAgICAgIE1vZGUgdmFsdWUgc3RydWN0dXJl IHRvIGJlIHZhbGlkYXRlZC4KLSAqICAgICAgICAgICAgICAgTVNNX01PREVfRkxBR19TRUFNTEVT U19WUlIgZmxhZyBpcyBzZXQgaWYgdGhlcmUKLSAqICAgICAgICAgICAgICAgaXMgY2hhbmdlIGlu IGZwcyBidXQgdmFjdGl2ZSBhbmQgaGFjdGl2ZSBhcmUgc2FtZS4KLSAqIFJldHVybjogZXJyb3Ig Y29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X3ZhbGlkYXRlX21vZGVfdnJyKHN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSwKLQkJCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpjdXJfZHNpX21v ZGUsCi0JCQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsKLQlpbnQgcmMgPSAwOwot CXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlIGFkal9tb2RlLCBjdXJfbW9kZTsKLQlzdHJ1Y3QgZHNp X2RmcHNfY2FwYWJpbGl0aWVzIGRmcHNfY2FwczsKLQl1MzIgY3Vycl9yZWZyZXNoX3JhdGU7Ci0K LQlpZiAoIWRpc3BsYXkgfHwgIW1vZGUpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghZGlzcGxheS0+cGFuZWwgfHwgIWRpc3Bs YXktPnBhbmVsLT5jdXJfbW9kZSkgewotCQlwcl9kZWJ1ZygiQ3VycmVudCBwYW5lbCBtb2RlIG5v dCBzZXRcbiIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlz cGxheV9sb2NrKTsKLQotCWFkal9tb2RlID0gKm1vZGU7Ci0JY3VyX21vZGUgPSAqY3VyX2RzaV9t b2RlOwotCi0JaWYgKChjdXJfbW9kZS50aW1pbmcucmVmcmVzaF9yYXRlICE9IGFkal9tb2RlLnRp bWluZy5yZWZyZXNoX3JhdGUpICYmCi0JCShjdXJfbW9kZS50aW1pbmcudl9hY3RpdmUgPT0gYWRq X21vZGUudGltaW5nLnZfYWN0aXZlKSAmJgotCQkoY3VyX21vZGUudGltaW5nLmhfYWN0aXZlID09 IGFkal9tb2RlLnRpbWluZy5oX2FjdGl2ZSkpIHsKLQotCQljdXJyX3JlZnJlc2hfcmF0ZSA9IGN1 cl9tb2RlLnRpbWluZy5yZWZyZXNoX3JhdGU7Ci0JCXJjID0gZHNpX3BhbmVsX2dldF9kZnBzX2Nh cHMoZGlzcGxheS0+cGFuZWwsICZkZnBzX2NhcHMpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gZ2V0IGRmcHMgY2FwcyBmcm9tIHBhbmVsXG4iLAotCQkJCQlkaXNwbGF5 LT5uYW1lKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQljdXJfbW9kZS50aW1pbmcucmVmcmVz aF9yYXRlID0KLQkJCWFkal9tb2RlLnRpbWluZy5yZWZyZXNoX3JhdGU7Ci0KLQkJcmMgPSBkc2lf ZGlzcGxheV9nZXRfZGZwc190aW1pbmcoZGlzcGxheSwKLQkJCSZjdXJfbW9kZSwgY3Vycl9yZWZy ZXNoX3JhdGUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBzZWFtbGVzcyB2cnIgbm90 IHBvc3NpYmxlIHJjPSVkXG4iLAotCQkJZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJv cjsKLQkJfQotCQlzd2l0Y2ggKGRmcHNfY2Fwcy50eXBlKSB7Ci0JCS8qCi0JCSAqIElnbm9yZSBh bnkgcm91bmQgb2ZmIGZhY3RvcnMgaW4gcG9yY2ggY2FsY3VsYXRpb24uCi0JCSAqIFdvcnNlIGNh c2UgaXMgc2V0IHRvIDUuCi0JCSAqLwotCQljYXNlIERTSV9ERlBTX0lNTUVESUFURV9WRlA6Ci0J CQlpZiAoYWJzKERTSV9WX1RPVEFMKCZjdXJfbW9kZS50aW1pbmcpIC0KLQkJCQlEU0lfVl9UT1RB TCgmYWRqX21vZGUudGltaW5nKSkgPiA1KQotCQkJCXByX2VycigiTWlzbWF0Y2ggdmZwIGZwczol ZCBuZXc6JWQgZ2l2ZW46JWRcbiIsCi0JCQkJYWRqX21vZGUudGltaW5nLnJlZnJlc2hfcmF0ZSwK LQkJCQljdXJfbW9kZS50aW1pbmcudl9mcm9udF9wb3JjaCwKLQkJCQlhZGpfbW9kZS50aW1pbmcu dl9mcm9udF9wb3JjaCk7Ci0JCQlicmVhazsKLQotCQljYXNlIERTSV9ERlBTX0lNTUVESUFURV9I RlA6Ci0JCQlpZiAoYWJzKERTSV9IX1RPVEFMKCZjdXJfbW9kZS50aW1pbmcpIC0KLQkJCQlEU0lf SF9UT1RBTCgmYWRqX21vZGUudGltaW5nKSkgPiA1KQotCQkJCXByX2VycigiTWlzbWF0Y2ggaGZw IGZwczolZCBuZXc6JWQgZ2l2ZW46JWRcbiIsCi0JCQkJYWRqX21vZGUudGltaW5nLnJlZnJlc2hf cmF0ZSwKLQkJCQljdXJfbW9kZS50aW1pbmcuaF9mcm9udF9wb3JjaCwKLQkJCQlhZGpfbW9kZS50 aW1pbmcuaF9mcm9udF9wb3JjaCk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJfZXJy KCJVbnN1cHBvcnRlZCBERlBTIG1vZGUgJWRcbiIsCi0JCQkJZGZwc19jYXBzLnR5cGUpOwotCQkJ cmMgPSAtRU5PVFNVUFA7Ci0JCX0KLQotCQlwcl9kZWJ1ZygiTW9kZSBzd2l0Y2ggaXMgc2VhbWxl c3MgdmFyaWFibGUgcmVmcmVzaFxuIik7Ci0JCW1vZGUtPmRzaV9tb2RlX2ZsYWdzIHw9IERTSV9N T0RFX0ZMQUdfVlJSOwotCQlEUFVfRVZUMzIoY3Vycl9yZWZyZXNoX3JhdGUsIGFkal9tb2RlLnRp bWluZy5yZWZyZXNoX3JhdGUsCi0JCQkJY3VyX21vZGUudGltaW5nLmhfZnJvbnRfcG9yY2gsCi0J CQkJYWRqX21vZGUudGltaW5nLmhfZnJvbnRfcG9yY2gpOwotCX0KLQotZXJyb3I6Ci0JbXV0ZXhf dW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRz aV9kaXNwbGF5X3ZhbGlkYXRlX21vZGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJ ICAgICAgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkgICAgICB1MzIgZmxhZ3Mp Ci17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqY3Ry bDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSBhZGpfbW9kZTsKLQotCWlmICghZGlzcGxheSB8 fCAhbW9kZSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCWFkal9t b2RlID0gKm1vZGU7Ci0JYWRqdXN0X3RpbWluZ19ieV9jdHJsX2NvdW50KGRpc3BsYXksICZhZGpf bW9kZSk7Ci0KLQlyYyA9IGRzaV9wYW5lbF92YWxpZGF0ZV9tb2RlKGRpc3BsYXktPnBhbmVsLCAm YWRqX21vZGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gcGFuZWwgbW9kZSB2YWxpZGF0 aW9uIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkr KykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCXJjID0gZHNpX2N0cmxfdmFsaWRh dGVfdGltaW5nKGN0cmwtPmN0cmwsICZhZGpfbW9kZS50aW1pbmcpOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiWyVzXSBjdHJsIG1vZGUgdmFsaWRhdGlvbiBmYWlsZWQsIHJjPSVkXG4iLAotCQkJ ICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQlyYyA9 IGRzaV9waHlfdmFsaWRhdGVfbW9kZShjdHJsLT5waHksICZhZGpfbW9kZS50aW1pbmcpOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBwaHkgbW9kZSB2YWxpZGF0aW9uIGZhaWxlZCwgcmM9 JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJ fQotCX0KLQotCWlmICgoZmxhZ3MgJiBEU0lfVkFMSURBVEVfRkxBR19BTExPV19BREpVU1QpICYm Ci0JCQkobW9kZS0+ZHNpX21vZGVfZmxhZ3MgJiBEU0lfTU9ERV9GTEFHX1NFQU1MRVNTKSkgewot CQlyYyA9IGRzaV9kaXNwbGF5X3ZhbGlkYXRlX21vZGVfc2VhbWxlc3MoZGlzcGxheSwgbW9kZSk7 Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIHNlYW1sZXNzIG5vdCBwb3NzaWJsZSByYz0l ZFxuIiwKLQkJCQlkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQot Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJu IHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfc2V0X21vZGUoc3RydWN0IGRzaV9kaXNwbGF5ICpk aXNwbGF5LAotCQkJIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkJIHUzMiBmbGFn cykKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlIGFkal9tb2RlOwot Ci0JaWYgKCFkaXNwbGF5IHx8ICFtb2RlIHx8ICFkaXNwbGF5LT5wYW5lbCkgewotCQlwcl9lcnIo IkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9j aygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCWFkal9tb2RlID0gKm1vZGU7Ci0JYWRqdXN0 X3RpbWluZ19ieV9jdHJsX2NvdW50KGRpc3BsYXksICZhZGpfbW9kZSk7Ci0KLQlyYyA9IGRzaV9k aXNwbGF5X3ZhbGlkYXRlX21vZGVfc2V0KGRpc3BsYXksICZhZGpfbW9kZSwgZmxhZ3MpOwotCWlm IChyYykgewotCQlwcl9lcnIoIlslc10gbW9kZSBjYW5ub3QgYmUgc2V0XG4iLCBkaXNwbGF5LT5u YW1lKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3NldF9tb2RlX3N1 YihkaXNwbGF5LCAmYWRqX21vZGUsIGZsYWdzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNd IGZhaWxlZCB0byBzZXQgbW9kZVxuIiwgZGlzcGxheS0+bmFtZSk7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JaWYgKCFkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGUpIHsKLQkJZGlzcGxheS0+cGFuZWwt PmN1cl9tb2RlID0KLQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlKSwg R0ZQX0tFUk5FTCk7Ci0JCWlmICghZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlKSB7Ci0JCQlyYyA9 IC1FTk9NRU07Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JbWVtY3B5KGRpc3BsYXktPnBh bmVsLT5jdXJfbW9kZSwgJmFkal9tb2RlLCBzaXplb2YoYWRqX21vZGUpKTsKLWVycm9yOgotCW11 dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWlu dCBkc2lfZGlzcGxheV9zZXRfdHBnX3N0YXRlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwg Ym9vbCBlbmFibGUpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3Bs YXlfY3RybCAqY3RybDsKLQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFy YW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3Bs YXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCXJj ID0gZHNpX2N0cmxfc2V0X3RwZ19zdGF0ZShjdHJsLT5jdHJsLCBlbmFibGUpOwotCQlpZiAocmMp IHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2V0IHRwZyBzdGF0ZSBmb3IgaG9zdF8lZFxu IiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCBpKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9 Ci0KLQlkaXNwbGF5LT5pc190cGdfZW5hYmxlZCA9IGVuYWJsZTsKLWVycm9yOgotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9wcmVfc3dpdGNoKHN0cnVjdCBkc2lfZGlz cGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSBkc2lfZGlzcGxheV9jbGtf Y3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9DT1JFX0NMSywgRFNJX0NMS19P Tik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIERTSSBjb3Jl IGNsb2NrcywgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9jdHJsX3VwZGF0ZShkaXNwbGF5KTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byB1cGRhdGUgRFNJIGNvbnRyb2xsZXIs IHJjPSVkXG4iLAotCQkJICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX2N0cmxf Y2xrX29mZjsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3NldF9jbGtfc3JjKGRpc3BsYXkpOwot CWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNldCBEU0kgbGluayBjbG9jayBz b3VyY2UsIHJjPSVkXG4iLAotCQkJZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX2N0 cmxfZGVpbml0OwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNp X2Nsa19oYW5kbGUsCi0JCQlEU0lfTElOS19DTEssIERTSV9DTEtfT04pOwotCWlmIChyYykgewot CQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBEU0kgbGluayBjbG9ja3MsIHJjPSVkXG4i LAotCQkJICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX2N0cmxfZGVpbml0Owot CX0KLQotCWdvdG8gZXJyb3I7Ci0KLWVycm9yX2N0cmxfZGVpbml0OgotCSh2b2lkKWRzaV9kaXNw bGF5X2N0cmxfZGVpbml0KGRpc3BsYXkpOwotZXJyb3JfY3RybF9jbGtfb2ZmOgotCSh2b2lkKWRz aV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0NPUkVf Q0xLLCBEU0lfQ0xLX09GRik7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfZGlz cGxheV9wcmVwYXJlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAw OwotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlOwotCi0JaWYgKCFkaXNwbGF5KSB7Ci0J CXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlp ZiAoIWRpc3BsYXktPnBhbmVsLT5jdXJfbW9kZSkgewotCQlwcl9lcnIoIm5vIHZhbGlkIG1vZGUg c2V0IGZvciB0aGUgZGlzcGxheSIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9s b2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JbW9kZSA9IGRpc3BsYXktPnBhbmVsLT5j dXJfbW9kZTsKLQotCWlmIChtb2RlLT5kc2lfbW9kZV9mbGFncyAmIERTSV9NT0RFX0ZMQUdfRE1T KSB7Ci0JCS8qIHVwZGF0ZSBkc2kgY3RybCBmb3IgbmV3IG1vZGUgKi8KLQkJcmMgPSBkc2lfZGlz cGxheV9wcmVfc3dpdGNoKGRpc3BsYXkpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoIlslc10gcGFu ZWwgcHJlLXByZXBhcmUtcmVzLXN3aXRjaCBmYWlsZWQsIHJjPSVkXG4iLAotCQkJCSAgIGRpc3Bs YXktPm5hbWUsIHJjKTsKLQotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gZHNpX3BhbmVsX3By ZV9wcmVwYXJlKGRpc3BsYXktPnBhbmVsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIHBh bmVsIHByZS1wcmVwYXJlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1l LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9jbGtfY3RybChk aXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9DT1JFX0NMSywgRFNJX0NMS19PTik7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIERTSSBjb3JlIGNsb2Nr cywgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3Jf cGFuZWxfcG9zdF91bnByZXA7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9waHlfc3dfcmVzZXQo ZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcmVzZXQgcGh5 LCByYz0lZFxuIiwgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX2N0cmxfY2xrX29m ZjsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3BoeV9lbmFibGUoZGlzcGxheSk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIERTSSBQSFksIHJjPSVkXG4iLAot CQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX2N0cmxfY2xrX29mZjsK LQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3NldF9jbGtfc3JjKGRpc3BsYXkpOwotCWlmIChyYykg ewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNldCBEU0kgbGluayBjbG9jayBzb3VyY2UsIHJj PSVkXG4iLAotCQkJZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX3BoeV9kaXNhYmxl OwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfY3RybF9pbml0KGRpc3BsYXkpOwotCWlmIChyYykg ewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNldHVwIERTSSBjb250cm9sbGVyLCByYz0lZFxu IiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9waHlfZGlzYWJs ZTsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2N0cmxfaG9zdF9lbmFibGUoZGlzcGxheSk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIERTSSBob3N0LCByYz0l ZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9jdHJsX2Rl aW5pdDsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtf aGFuZGxlLAotCQkJRFNJX0xJTktfQ0xLLCBEU0lfQ0xLX09OKTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFibGUgRFNJIGxpbmsgY2xvY2tzLCByYz0lZFxuIiwKLQkJ ICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9ob3N0X2VuZ2luZV9vZmY7 Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9zb2Z0X3Jlc2V0KGRpc3BsYXkpOwotCWlmIChyYykg ewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHNvZnQgcmVzZXQsIHJjPSVkXG4iLCBkaXNwbGF5LT5u YW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9saW5rX29mZjsKLQl9Ci0KLQlyYyA9IGRzaV9w YW5lbF9wcmVwYXJlKGRpc3BsYXktPnBhbmVsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNd IHBhbmVsIHByZXBhcmUgZmFpbGVkLCByYz0lZFxuIiwgZGlzcGxheS0+bmFtZSwgcmMpOwotCQln b3RvIGVycm9yX2N0cmxfbGlua19vZmY7Ci0JfQotCi0JZ290byBlcnJvcjsKLQotZXJyb3JfY3Ry bF9saW5rX29mZjoKLQkodm9pZClkc2lfZGlzcGxheV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xr X2hhbmRsZSwKLQkJCURTSV9MSU5LX0NMSywgRFNJX0NMS19PRkYpOwotZXJyb3JfaG9zdF9lbmdp bmVfb2ZmOgotCSh2b2lkKWRzaV9kaXNwbGF5X2N0cmxfaG9zdF9kaXNhYmxlKGRpc3BsYXkpOwot ZXJyb3JfY3RybF9kZWluaXQ6Ci0JKHZvaWQpZHNpX2Rpc3BsYXlfY3RybF9kZWluaXQoZGlzcGxh eSk7Ci1lcnJvcl9waHlfZGlzYWJsZToKLQkodm9pZClkc2lfZGlzcGxheV9waHlfZGlzYWJsZShk aXNwbGF5KTsKLWVycm9yX2N0cmxfY2xrX29mZjoKLQkodm9pZClkc2lfZGlzcGxheV9jbGtfY3Ry bChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9DT1JFX0NMSywgRFNJX0NMS19PRkYp OwotZXJyb3JfcGFuZWxfcG9zdF91bnByZXA6Ci0JKHZvaWQpZHNpX3BhbmVsX3Bvc3RfdW5wcmVw YXJlKGRpc3BsYXktPnBhbmVsKTsKLWVycm9yOgotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlz cGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9wcmVfa2lja29m ZihzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQotCS8qIGNo ZWNrIGFuZCBzZXR1cCBNSVNSICovCi0JaWYgKGRpc3BsYXktPm1pc3JfZW5hYmxlKQotCQlfZHNp X2Rpc3BsYXlfc2V0dXBfbWlzcihkaXNwbGF5KTsKLQotCXJldHVybiByYzsKLX0KLQotaW50IGRz aV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJj ID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZTsKLQotCWlmICghZGlzcGxheSB8 fCAhZGlzcGxheS0+cGFuZWwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlKSB7Ci0J CXByX2Vycigibm8gdmFsaWQgbW9kZSBzZXQgZm9yIHRoZSBkaXNwbGF5Iik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQlt b2RlID0gZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlOwotCi0JaWYgKG1vZGUtPmRzaV9tb2RlX2Zs YWdzICYgRFNJX01PREVfRkxBR19ETVMpIHsKLQkJcmMgPSBkc2lfcGFuZWxfcG9zdF9zd2l0Y2go ZGlzcGxheS0+cGFuZWwpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8g c3dpdGNoIERTSSBwYW5lbCBtb2RlLCByYz0lZFxuIiwKLQkJCQkgICBkaXNwbGF5LT5uYW1lLCBy Yyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfSBlbHNlIHsKLQkJcmMgPSBkc2lfcGFuZWxfZW5h YmxlKGRpc3BsYXktPnBhbmVsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVk IHRvIGVuYWJsZSBEU0kgcGFuZWwsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUs IHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlpZiAobW9kZS0+cHJpdl9pbmZvLT5k c2NfZW5hYmxlZCkgewotCQltb2RlLT5wcml2X2luZm8tPmRzYy5waWNfd2lkdGggKj0gZGlzcGxh eS0+Y3RybF9jb3VudDsKLQkJcmMgPSBkc2lfcGFuZWxfdXBkYXRlX3BwcyhkaXNwbGF5LT5wYW5l bCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIHBhbmVsIHBwcyBjbWQgdXBkYXRlIGZh aWxlZCwgcmM9JWRcbiIsCi0JCQkJZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsK LQkJfQotCX0KLQotCWlmIChtb2RlLT5kc2lfbW9kZV9mbGFncyAmIERTSV9NT0RFX0ZMQUdfRE1T KSB7Ci0JCXJjID0gZHNpX3BhbmVsX3N3aXRjaChkaXNwbGF5LT5wYW5lbCk7Ci0JCWlmIChyYykK LQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc3dpdGNoIERTSSBwYW5lbCBtb2RlLCByYz0lZFxu IiwKLQkJCQkgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlp ZiAoZGlzcGxheS0+Y29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09QX1ZJREVPX01PREUpIHsKLQkJ cmMgPSBkc2lfZGlzcGxheV92aWRfZW5naW5lX2VuYWJsZShkaXNwbGF5KTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoIlslc11mYWlsZWQgdG8gZW5hYmxlIERTSSB2aWRlbyBlbmdpbmUsIHJjPSVk XG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJs ZV9wYW5lbDsKLQkJfQotCX0gZWxzZSBpZiAoZGlzcGxheS0+Y29uZmlnLnBhbmVsX21vZGUgPT0g RFNJX09QX0NNRF9NT0RFKSB7Ci0JCXJjID0gZHNpX2Rpc3BsYXlfY21kX2VuZ2luZV9lbmFibGUo ZGlzcGxheSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdZmFpbGVkIHRvIGVuYWJsZSBE U0kgY21kIGVuZ2luZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwot CQkJZ290byBlcnJvcl9kaXNhYmxlX3BhbmVsOwotCQl9Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJb JXNdIEludmFsaWQgY29uZmlndXJhdGlvblxuIiwgZGlzcGxheS0+bmFtZSk7Ci0JCXJjID0gLUVJ TlZBTDsKLQkJZ290byBlcnJvcl9kaXNhYmxlX3BhbmVsOwotCX0KLQotCWdvdG8gZXJyb3I7Ci0K LWVycm9yX2Rpc2FibGVfcGFuZWw6Ci0JKHZvaWQpZHNpX3BhbmVsX2Rpc2FibGUoZGlzcGxheS0+ cGFuZWwpOwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwot CXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X3Bvc3RfZW5hYmxlKHN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5KSB7Ci0J CXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlt dXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JcmMgPSBkc2lfcGFuZWxfcG9z dF9lbmFibGUoZGlzcGxheS0+cGFuZWwpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIHBhbmVs IHBvc3QtZW5hYmxlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCBy Yyk7Ci0KLQkvKiByZW1vdmUgdGhlIGNsayB2b3RlIGZvciBDTUQgbW9kZSBwYW5lbHMgKi8KLQlp ZiAoZGlzcGxheS0+Y29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RFKQotCQlkc2lf ZGlzcGxheV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9BTExfQ0xL UywgRFNJX0NMS19PRkYpOwotCi0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2sp OwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X3ByZV9kaXNhYmxlKHN0cnVjdCBk c2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5KSB7 Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JLyogZW5hYmxlIHRoZSBj bGsgdm90ZSBmb3IgQ01EIG1vZGUgcGFuZWxzICovCi0JaWYgKGRpc3BsYXktPmNvbmZpZy5wYW5l bF9tb2RlID09IERTSV9PUF9DTURfTU9ERSkKLQkJZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxh eS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQUxMX0NMS1MsIERTSV9DTEtfT04pOwotCi0JcmMg PSBkc2lfcGFuZWxfcHJlX2Rpc2FibGUoZGlzcGxheS0+cGFuZWwpOwotCWlmIChyYykKLQkJcHJf ZXJyKCJbJXNdIHBhbmVsIHByZS1kaXNhYmxlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBk aXNwbGF5LT5uYW1lLCByYyk7Ci0KLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9j ayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3QgZHNp X2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZGlzcGxheSkgewot CQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J bXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCXJjID0gZHNpX2Rpc3BsYXlf d2FrZV91cChkaXNwbGF5KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBkaXNwbGF5IHdha2Ug dXAgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCWlm IChkaXNwbGF5LT5jb25maWcucGFuZWxfbW9kZSA9PSBEU0lfT1BfVklERU9fTU9ERSkgewotCQly YyA9IGRzaV9kaXNwbGF5X3ZpZF9lbmdpbmVfZGlzYWJsZShkaXNwbGF5KTsKLQkJaWYgKHJjKQot CQkJcHJfZXJyKCJbJXNdZmFpbGVkIHRvIGRpc2FibGUgRFNJIHZpZCBlbmdpbmUsIHJjPSVkXG4i LAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQl9IGVsc2UgaWYgKGRpc3BsYXktPmNv bmZpZy5wYW5lbF9tb2RlID09IERTSV9PUF9DTURfTU9ERSkgewotCQlyYyA9IGRzaV9kaXNwbGF5 X2NtZF9lbmdpbmVfZGlzYWJsZShkaXNwbGF5KTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJbJXNd ZmFpbGVkIHRvIGRpc2FibGUgRFNJIGNtZCBlbmdpbmUsIHJjPSVkXG4iLAotCQkJICAgICAgIGRp c3BsYXktPm5hbWUsIHJjKTsKLQl9IGVsc2UgewotCQlwcl9lcnIoIlslc10gSW52YWxpZCBjb25m aWd1cmF0aW9uXG4iLCBkaXNwbGF5LT5uYW1lKTsKLQkJcmMgPSAtRUlOVkFMOwotCX0KLQotCXJj ID0gZHNpX3BhbmVsX2Rpc2FibGUoZGlzcGxheS0+cGFuZWwpOwotCWlmIChyYykKLQkJcHJfZXJy KCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIERTSSBwYW5lbCwgcmM9JWRcbiIsCi0JCSAgICAgICBk aXNwbGF5LT5uYW1lLCByYyk7Ci0KLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9j ayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfdXBkYXRlX3BwcyhjaGFyICpw cHNfY21kLCB2b2lkICpkaXNwKQotewotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQot CWlmIChwcHNfY21kID09IE5VTEwgfHwgZGlzcCA9PSBOVUxMKSB7Ci0JCXByX2VycigiSW52YWxp ZCBwYXJhbWV0ZXJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkaXNwbGF5ID0gZGlz cDsKLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCW1lbWNweShkaXNwbGF5 LT5wYW5lbC0+ZHNjX3Bwc19jbWQsIHBwc19jbWQsIERTSV9DTURfUFBTX1NJWkUpOwotCW11dGV4 X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQg ZHNpX2Rpc3BsYXlfdW5wcmVwYXJlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlp bnQgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNw bGF5X2xvY2spOwotCi0JcmMgPSBkc2lfZGlzcGxheV93YWtlX3VwKGRpc3BsYXkpOwotCWlmIChy YykKLQkJcHJfZXJyKCJbJXNdIGRpc3BsYXkgd2FrZSB1cCBmYWlsZWQsIHJjPSVkXG4iLAotCQkg ICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JcmMgPSBkc2lfcGFuZWxfdW5wcmVwYXJlKGRp c3BsYXktPnBhbmVsKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBwYW5lbCB1bnByZXBhcmUg ZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCXJjID0g ZHNpX2Rpc3BsYXlfY3RybF9ob3N0X2Rpc2FibGUoZGlzcGxheSk7Ci0JaWYgKHJjKQotCQlwcl9l cnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgRFNJIGhvc3QsIHJjPSVkXG4iLAotCQkgICAgICAg ZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JcmMgPSBkc2lfZGlzcGxheV9jbGtfY3RybChkaXNwbGF5 LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9MSU5LX0NMSywgRFNJX0NMS19PRkYpOwotCWlmIChy YykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNhYmxlIExpbmsgY2xvY2tzLCByYz0lZFxu IiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCXJjID0gZHNpX2Rpc3BsYXlfY3Ry bF9kZWluaXQoZGlzcGxheSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRl aW5pdCBjb250cm9sbGVyLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsK LQotCXJjID0gZHNpX2Rpc3BsYXlfcGh5X2Rpc2FibGUoZGlzcGxheSk7Ci0JaWYgKHJjKQotCQlw cl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgRFNJIFBIWSwgcmM9JWRcbiIsCi0JCSAgICAg ICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3Bs YXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09GRik7Ci0JaWYg KHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgRFNJIGNsb2NrcywgcmM9JWRc biIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQlyYyA9IGRzaV9wYW5lbF9wb3N0 X3VucHJlcGFyZShkaXNwbGF5LT5wYW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gcGFu ZWwgcG9zdC11bnByZXBhcmUgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5h bWUsIHJjKTsKLQotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRzaV9kaXNwbGF5X3JlZ2lzdGVyKHZvaWQp Ci17Ci0JZHNpX3BoeV9kcnZfcmVnaXN0ZXIoKTsKLQlkc2lfY3RybF9kcnZfcmVnaXN0ZXIoKTsK LQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkc2lfZGlzcGxheV9kcml2ZXIpOwot fQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZHNpX2Rpc3BsYXlfdW5yZWdpc3Rlcih2b2lkKQotewot CXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkc2lfZGlzcGxheV9kcml2ZXIpOwotCWRzaV9j dHJsX2Rydl91bnJlZ2lzdGVyKCk7Ci0JZHNpX3BoeV9kcnZfdW5yZWdpc3RlcigpOwotfQotbW9k dWxlX3BhcmFtX3N0cmluZyhkc2lfZGlzcGxheTAsIGRzaV9kaXNwbGF5X3ByaW1hcnksIE1BWF9D TURMSU5FX1BBUkFNX0xFTiwKLQkJCQkJCQkJMDYwMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRzaV9k aXNwbGF5MCwKLQkibXNtX2RybS5kc2lfZGlzcGxheTA9PGRpc3BsYXkgbm9kZT46PGNvbmZpZ1g+ IHdoZXJlIDxkaXNwbGF5IG5vZGU+IGlzICdwcmltYXJ5IGRzaSBkaXNwbGF5IG5vZGUgbmFtZScg YW5kIDxjb25maWdYPiB3aGVyZSB4IHJlcHJlc2VudHMgaW5kZXggaW4gdGhlIHRvcG9sb2d5IGxp c3QiKTsKLW1vZHVsZV9wYXJhbV9zdHJpbmcoZHNpX2Rpc3BsYXkxLCBkc2lfZGlzcGxheV9zZWNv bmRhcnksIE1BWF9DTURMSU5FX1BBUkFNX0xFTiwKLQkJCQkJCQkJMDYwMCk7Ci1NT0RVTEVfUEFS TV9ERVNDKGRzaV9kaXNwbGF5MSwKLQkibXNtX2RybS5kc2lfZGlzcGxheTE9PGRpc3BsYXkgbm9k ZT46PGNvbmZpZ1g+IHdoZXJlIDxkaXNwbGF5IG5vZGU+IGlzICdzZWNvbmRhcnkgZHNpIGRpc3Bs YXkgbm9kZSBuYW1lJyBhbmQgPGNvbmZpZ1g+IHdoZXJlIHggcmVwcmVzZW50cyBpbmRleCBpbiB0 aGUgdG9wb2xvZ3kgbGlzdCIpOwotbW9kdWxlX2luaXQoZHNpX2Rpc3BsYXlfcmVnaXN0ZXIpOwot bW9kdWxlX2V4aXQoZHNpX2Rpc3BsYXlfdW5yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5LmggYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGEwZjljY2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2lu Zy9kc2lfZGlzcGxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTU2ICswLDAgQEAKLS8qCi0gKiBD b3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJz aW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfRFNJX0RJU1BMQVlfSF8K LSNkZWZpbmUgX0RTSV9ESVNQTEFZX0hfCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2lu Y2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNs dWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLSNpbmNsdWRlIDxkcm0vZHJtUC5oPgotI2luY2x1ZGUg PGRybS9kcm1fY3J0Yy5oPgotCi0jaW5jbHVkZSAibXNtX2Rydi5oIgotI2luY2x1ZGUgImRzaV9k ZWZzLmgiCi0jaW5jbHVkZSAiZHNpX2N0cmwuaCIKLSNpbmNsdWRlICJkc2lfcGh5LmgiCi0jaW5j bHVkZSAiZHNpX3BhbmVsLmgiCi0KLSNkZWZpbmUgTUFYX0RTSV9DVFJMU19QRVJfRElTUExBWSAg ICAgICAgICAgICAyCi0jZGVmaW5lIERTSV9DTElFTlRfTkFNRV9TSVpFCQkyMAotI2RlZmluZSBN QVhfQ01ETElORV9QQVJBTV9MRU4JIDUxMgotLyoKLSAqIERTSSBWYWxpZGF0ZSBNb2RlIG1vZGlm aWVycwotICogQERTSV9WQUxJREFURV9GTEFHX0FMTE9XX0FESlVTVDoJQWxsb3cgbW9kZSB2YWxp ZGF0aW9uIHRvIGFsc28gZG8gZml4dXAKLSAqLwotI2RlZmluZSBEU0lfVkFMSURBVEVfRkxBR19B TExPV19BREpVU1QJMHgxCi0KLS8qKgotICogZW51bSBkc2lfZGlzcGxheV9zZWxlY3Rpb25fdHlw ZSAtIGVudW1lcmF0ZXMgRFNJIGRpc3BsYXkgc2VsZWN0aW9uIHR5cGVzCi0gKiBARFNJX1BSSU1B Ulk6ICAgIHByaW1hcnkgRFNJIGRpc3BsYXkgc2VsZWN0ZWQgZnJvbSBtb2R1bGUgcGFyYW1ldGVy Ci0gKiBARFNJX1NFQ09OREFSWTogIFNlY29uZGFyeSBEU0kgZGlzcGxheSBzZWxlY3RlZCBmcm9t IG1vZHVsZSBwYXJhbWV0ZXIKLSAqIEBNQVhfRFNJX0FDVElWRV9ESVNQTEFZOiBNYXhpbXVtIGFj aXZlIGRpc3BsYXlzIHRoYXQgY2FuIGJlIHNlbGVjdGVkCi0gKi8KLWVudW0gZHNpX2Rpc3BsYXlf c2VsZWN0aW9uX3R5cGUgewotCURTSV9QUklNQVJZID0gMCwKLQlEU0lfU0VDT05EQVJZLAotCU1B WF9EU0lfQUNUSVZFX0RJU1BMQVksCi19OwotCi0vKioKLSAqIGVudW0gZHNpX2Rpc3BsYXlfdHlw ZSAtIGVudW1lcmF0ZXMgRFNJIGRpc3BsYXkgdHlwZXMKLSAqIEBEU0lfRElTUExBWV9TSU5HTEU6 ICAgICAgIEEgcGFuZWwgY29ubmVjdGVkIG9uIGEgc2luZ2xlIERTSSBpbnRlcmZhY2UuCi0gKiBA RFNJX0RJU1BMQVlfRVhUX0JSSURHRTogICBBIGJyaWRnZSBpcyBjb25uZWN0ZWQgYmV0d2VlbiBw YW5lbCBhbmQgRFNJIGhvc3QuCi0gKgkJCSAgICAgIEl0IHV0aWxpemVzIGEgc2luZ2xlIERTSSBp bnRlcmZhY2UuCi0gKiBARFNJX0RJU1BMQVlfU1BMSVQ6ICAgICAgICBBIHBhbmVsIHRoYXQgdXRp bGl6ZXMgbW9yZSB0aGFuIG9uZSBEU0kKLSAqCQkJICAgICAgaW50ZXJmYWNlcy4KLSAqIEBEU0lf RElTUExBWV9TUExJVF9FWFRfQlJJREdFOiBBIGJyaWRnZSBpcyBwcmVzZW50IGJldHdlZW4gcGFu ZWwgYW5kIERTSQotICoJCQkJICBob3N0LiBJdCB1dGlsaXplcyBtb3JlIHRoYW4gb25lIERTSSBp bnRlcmZhY2UuCi0gKi8KLWVudW0gZHNpX2Rpc3BsYXlfdHlwZSB7Ci0JRFNJX0RJU1BMQVlfU0lO R0xFID0gMCwKLQlEU0lfRElTUExBWV9FWFRfQlJJREdFLAotCURTSV9ESVNQTEFZX1NQTElULAot CURTSV9ESVNQTEFZX1NQTElUX0VYVF9CUklER0UsCi0JRFNJX0RJU1BMQVlfTUFYLAotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAtIGRzaSBjdHJsL3BoeSBpbmZvcm1hdGlv biBmb3IgdGhlIGRpc3BsYXkKLSAqIEBjdHJsOiAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBEU0kg Y29udHJvbGxlciBkZXZpY2UuCi0gKiBAY3RybF9vZl9ub2RlOiAgIHBIYW5kbGUgdG8gdGhlIERT SSBjb250cm9sbGVyIGRldmljZS4KLSAqIEBkc2lfY3RybF9pZHg6ICAgRFNJIGNvbnRyb2xsZXIg aW5zdGFuY2UgaWQuCi0gKiBAcG93ZXJfc3RhdGU6ICAgIEN1cnJlbnQgcG93ZXIgc3RhdGUgb2Yg dGhlIERTSSBjb250cm9sbGVyLgotICogQHBoeTogICAgICAgICAgICAgICAgICBIYW5kbGUgdG8g dGhlIERTSSBQSFkgZGV2aWNlLgotICogQHBoeV9vZl9ub2RlOiAgICAgICAgICBwSGFuZGxlIHRv IHRoZSBEU0kgUEhZIGRldmljZS4KLSAqIEBwaHlfZW5hYmxlZDogICAgICAgICAgUEhZIHBvd2Vy IHN0YXR1cy4KLSAqLwotc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgewotCS8qIGNvbnRyb2xsZXIg aW5mbyAqLwotCXN0cnVjdCBkc2lfY3RybCAqY3RybDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0 cmxfb2Zfbm9kZTsKLQl1MzIgZHNpX2N0cmxfaWR4OwotCi0JZW51bSBkc2lfcG93ZXJfc3RhdGUg cG93ZXJfc3RhdGU7Ci0KLQkvKiBwaHkgaW5mbyAqLwotCXN0cnVjdCBtc21fZHNpX3BoeSAqcGh5 OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X29mX25vZGU7Ci0KLQlib29sIHBoeV9lbmFibGVk OwotfTsKLS8qKgotICogc3RydWN0IGRzaV9kaXNwbGF5X2Jvb3RfcGFyYW0gLSBkZWZpbmVzIERT SSBib290IGRpc3BsYXkgc2VsZWN0aW9uCi0gKiBAbmFtZTpOYW1lIG9mIERTSSBkaXNwbGF5IHNl bGVjdGVkIGFzIGEgYm9vdCBwYXJhbS4KLSAqIEBib290X2Rpc3BfZW46Ym9vbCB0byBpbmRpY2F0 ZSBkdHNpIGF2YWlsYWJpbGl0eSBvZiBkaXNwbGF5IG5vZGUKLSAqIEBpc19wcmltYXJ5OmJvb2wg dG8gaW5kaWNhdGUgd2hldGhlciBjdXJyZW50IGRpc3BsYXkgaXMgcHJpbWFyeSBkaXNwbGF5Ci0g KiBAbGVuZ3RoOmxlbmd0aCBvZiBEU0kgZGlzcGxheS4KLSAqIEBjbWRsaW5lX3RvcG9sb2d5OiBE aXNwbGF5IHRvcG9sb2d5IHNoYXJlZCBmcm9tIGtlcm5lbCBjb21tYW5kIGxpbmUuCi0gKi8KLXN0 cnVjdCBkc2lfZGlzcGxheV9ib290X3BhcmFtIHsKLQljaGFyIG5hbWVbTUFYX0NNRExJTkVfUEFS QU1fTEVOXTsKLQlib29sIGJvb3RfZGlzcF9lbjsKLQlib29sIGlzX3ByaW1hcnk7Ci0JaW50IGxl bmd0aDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Ci0JaW50IGNtZGxpbmVfdG9wb2xvZ3k7 Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfZGlzcGxheV9jbGtfaW5mbyAtIGRzaSBkaXNwbGF5 IGNsb2NrIHNvdXJjZSBpbmZvcm1hdGlvbgotICogQHNyY19jbGtzOiAgICAgICAgICBTb3VyY2Ug Y2xvY2tzIGZvciBEU0kgZGlzcGxheS4KLSAqIEBtdXhfY2xrczogICAgICAgICAgTXV4IGNsb2Nr cyB1c2VkIGZvciBERlBTLgotICogQHNoYWRvd19jbGtzOiAgICAgICBVc2VkIGZvciBERlBTLgot ICovCi1zdHJ1Y3QgZHNpX2Rpc3BsYXlfY2xrX2luZm8gewotCXN0cnVjdCBkc2lfY2xrX2xpbmtf c2V0IHNyY19jbGtzOwotCXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0IG11eF9jbGtzOwotCXN0cnVj dCBkc2lfY2xrX2xpbmtfc2V0IHNoYWRvd19jbGtzOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNp X2Rpc3BsYXkgLSBkc2kgZGlzcGxheSBpbmZvcm1hdGlvbgotICogQHBkZXY6ICAgICAgICAgICAg IFBvaW50ZXIgdG8gcGxhdGZvcm0gZGV2aWNlLgotICogQGRybV9kZXY6ICAgICAgICAgIERSTSBk ZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXNwbGF5LgotICogQG5hbWU6ICAgICAgICAgICAg IE5hbWUgb2YgdGhlIGRpc3BsYXkuCi0gKiBAZGlzcGxheV90eXBlOiAgICAgRGlzcGxheSB0eXBl IGFzIGRlZmluZWQgaW4gZGV2aWNlIHRyZWUuCi0gKiBAbGlzdDogICAgICAgICAgICAgTGlzdCBw b2ludGVyLgotICogQGlzX2FjdGl2ZTogICAgICAgIElzIGRpc3BsYXkgYWN0aXZlLgotICogQGRp c3BsYXlfbG9jazogICAgIE11dGV4IGZvciBkc2lfZGlzcGxheSBpbnRlcmZhY2UuCi0gKiBAY3Ry bF9jb3VudDogICAgICAgTnVtYmVyIG9mIERTSSBpbnRlcmZhY2VzIHJlcXVpcmVkIGJ5IHBhbmVs LgotICogQGN0cmw6ICAgICAgICAgICAgIENvbnRyb2xsZXIgaW5mb3JtYXRpb24gZm9yIERTSSBk aXNwbGF5LgotICogQHBhbmVsOiAgICAgICAgICAgIEhhbmRsZSB0byBEU0kgcGFuZWwuCi0gKiBA cGFuZWxfb2Y6ICAgICAgICAgcEhhbmRsZSB0byBEU0kgcGFuZWwuCi0gKiBAdHlwZTogICAgICAg ICAgICAgRFNJIGRpc3BsYXkgdHlwZS4KLSAqIEBjbGtfbWFzdGVyX2lkeDogICBUaGUgbWFzdGVy IGNvbnRyb2xsZXIgZm9yIGNvbnRyb2xsaW5nIGNsb2Nrcy4gVGhpcyBpcyBhbgotICoJCSAgICAg IGluZGV4IGludG8gdGhlIGN0cmxbTUFYX0RTSV9DVFJMU19QRVJfRElTUExBWV0gYXJyYXkuCi0g KiBAY21kX21hc3Rlcl9pZHg6ICAgVGhlIG1hc3RlciBjb250cm9sbGVyIGZvciBzZW5kaW5nIERT SSBjb21tYW5kcyB0byBwYW5lbC4KLSAqIEB2aWRlb19tYXN0ZXJfaWR4OiBUaGUgbWFzdGVyIGNv bnRyb2xsZXIgZm9yIGVuYWJsaW5nIHZpZGVvIGVuZ2luZS4KLSAqIEBjbG9ja19pbmZvOiAgICAg ICBDbG9jayBzb3VyY2luZyBmb3IgRFNJIGRpc3BsYXkuCi0gKiBAY29uZmlnOiAgICAgICAgICAg RFNJIGhvc3QgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAqIEBsYW5lX21hcDogICAgICAg ICBMYW5lIG1hcHBpbmcgYmV0d2VlbiBEU0kgaG9zdCBhbmQgUGFuZWwuCi0gKiBAY21kbGluZV90 b3BvbG9neTogRGlzcGxheSB0b3BvbG9neSBzaGFyZWQgZnJvbSBrZXJuZWwgY29tbWFuZCBsaW5l LgotICogQGNtZGxpbmVfdGltaW5nOiAgIERpc3BsYXkgdGltaW5nIHNoYXJlZCBmcm9tIGtlcm5l bCBjb21tYW5kIGxpbmUuCi0gKiBAaXNfdHBnX2VuYWJsZWQ6ICAgVFBHIHN0YXRlLgotICogQHVs cHNfZW5hYmxlZDogICAgIHVscHMgc3RhdGUuCi0gKiBAY2xhbXBfZW5hYmxlZDogICAgY2xhbXAg c3RhdGUuCi0gKiBAcGh5X2lkbGVfcG93ZXJfb2ZmOiAgIFBIWSBwb3dlciBzdGF0ZS4KLSAqIEBo b3N0OiAgICAgICAgICAgICBEUk0gTUlQSSBEU0kgSG9zdC4KLSAqIEBicmlkZ2U6ICAgICAgICAg ICBQb2ludGVyIHRvIERSTSBicmlkZ2Ugb2JqZWN0LgotICogQGNtZF9lbmdpbmVfcmVmY291bnQ6 ICBSZWZlcmVuY2UgY291bnQgZW5mb3JjaW5nIHNpbmdsZSBpbnN0YW5jZSBvZiBjbWQgZW5nCi0g KiBAY2xrX21uZ3I6ICAgICAgICAgRFNJIGNsb2NrIG1hbmFnZXIuCi0gKiBAZHNpX2Nsa19oYW5k bGU6ICAgRFNJIGNsb2NrIGhhbmRsZS4KLSAqIEBtZHBfY2xrX2hhbmRsZTogICBNRFAgY2xvY2sg aGFuZGxlLgotICogQHJvb3Q6ICAgICAgICAgICAgIERlYnVnZnMgcm9vdCBkaXJlY3RvcnkKLSAq IEBtaXNyX2VuYWJsZSAgICAgICBGcmFtZSBNSVNSIGVuYWJsZS9kaXNhYmxlCi0gKiBAbWlzcl9m cmFtZV9jb3VudCAgTnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIHRoZSBNSVNSIHZhbHVl Ci0gKi8KLXN0cnVjdCBkc2lfZGlzcGxheSB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl djsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKLQotCWNvbnN0IGNoYXIgKm5hbWU7Ci0J Y29uc3QgY2hhciAqZGlzcGxheV90eXBlOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlib29s IGlzX2FjdGl2ZTsKLQlzdHJ1Y3QgbXV0ZXggZGlzcGxheV9sb2NrOwotCi0JdTMyIGN0cmxfY291 bnQ7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgY3RybFtNQVhfRFNJX0NUUkxTX1BFUl9ESVNQ TEFZXTsKLQotCS8qIHBhbmVsIGluZm8gKi8KLQlzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbDsKLQlz dHJ1Y3QgZGV2aWNlX25vZGUgKnBhbmVsX29mOwotCi0JZW51bSBkc2lfZGlzcGxheV90eXBlIHR5 cGU7Ci0JdTMyIGNsa19tYXN0ZXJfaWR4OwotCXUzMiBjbWRfbWFzdGVyX2lkeDsKLQl1MzIgdmlk ZW9fbWFzdGVyX2lkeDsKLQotCXN0cnVjdCBkc2lfZGlzcGxheV9jbGtfaW5mbyBjbG9ja19pbmZv OwotCXN0cnVjdCBkc2lfaG9zdF9jb25maWcgY29uZmlnOwotCXN0cnVjdCBkc2lfbGFuZV9tYXAg bGFuZV9tYXA7Ci0JaW50IGNtZGxpbmVfdG9wb2xvZ3k7Ci0JaW50IGNtZGxpbmVfdGltaW5nOwot CWJvb2wgaXNfdHBnX2VuYWJsZWQ7Ci0JYm9vbCB1bHBzX2VuYWJsZWQ7Ci0JYm9vbCBjbGFtcF9l bmFibGVkOwotCWJvb2wgcGh5X2lkbGVfcG93ZXJfb2ZmOwotCXN0cnVjdCBkcm1fZ2VtX29iamVj dCAqdHhfY21kX2J1ZjsKLQl1MzIgY21kX2J1ZmZlcl9zaXplOwotCXU2NCBjbWRfYnVmZmVyX2lv dmE7Ci0Jdm9pZCAqdmFkZHI7Ci0KLQlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBob3N0OwotCXN0cnVj dCBkc2lfYnJpZGdlICAgICpicmlkZ2U7Ci0JdTMyIGNtZF9lbmdpbmVfcmVmY291bnQ7Ci0KLQl2 b2lkICpjbGtfbW5ncjsKLQl2b2lkICpkc2lfY2xrX2hhbmRsZTsKLQl2b2lkICptZHBfY2xrX2hh bmRsZTsKLQotCS8qIERFQlVHIEZTICovCi0Jc3RydWN0IGRlbnRyeSAqcm9vdDsKLQotCWJvb2wg bWlzcl9lbmFibGU7Ci0JdTMyIG1pc3JfZnJhbWVfY291bnQ7Ci19OwotCi0jaWZkZWYgQ09ORklH X0RSTV9NU01fRFNJX1NUQUdJTkcKLQotaW50IGRzaV9kaXNwbGF5X2Rldl9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKLWludCBkc2lfZGlzcGxheV9kZXZfcmVtb3ZlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2dldF9udW1f b2ZfZGlzcGxheXMoKSAtIHJldHVybnMgbnVtYmVyIG9mIGRpc3BsYXkgZGV2aWNlcwotICoJCQkJ ICAgICAgIHN1cHBvcnRlZC4KLSAqCi0gKiBSZXR1cm46IG51bWJlciBvZiBkaXNwbGF5cy4KLSAq LwotaW50IGRzaV9kaXNwbGF5X2dldF9udW1fb2ZfZGlzcGxheXModm9pZCk7Ci0KLS8qKgotICog ZHNpX2Rpc3BsYXlfZ2V0X2FjdGl2ZV9kaXNwbGF5cyAtIHJldHVybnMgcG9pbnRlcnMgZm9yIGFj dGl2ZSBkaXNwbGF5IGRldmljZXMKLSAqIEBkaXNwbGF5X2FycmF5OiBQb2ludGVyIHRvIGRpc3Bs YXkgYXJyYXkgdG8gYmUgZmlsbGVkCi0gKiBAbWF4X2Rpc3BsYXlfY291bnQ6IFNpemUgb2YgZGlz cGxheV9hcnJheQotICogQFJldHVybnM6IE51bWJlciBvZiBkaXNwbGF5IGVudHJpZXMgZmlsbGVk Ci0gKi8KLWludCBkc2lfZGlzcGxheV9nZXRfYWN0aXZlX2Rpc3BsYXlzKHZvaWQgKipkaXNwbGF5 X2FycmF5LAotCQl1MzIgbWF4X2Rpc3BsYXlfY291bnQpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5 X2dldF9ib290X2Rpc3BsYXkoKS0gZ2V0IERTSSBib290IGRpc3BsYXkgbmFtZQotICogQGluZGV4 OglpbmRleCBvZiBkaXNwbGF5IHNlbGVjdGlvbgotICoKLSAqIFJldHVybjoJcmV0dXJucyB0aGUg ZGlzcGxheSBub2RlIHBvaW50ZXIKLSAqLwotc3RydWN0IGRldmljZV9ub2RlICpkc2lfZGlzcGxh eV9nZXRfYm9vdF9kaXNwbGF5KGludCBpbmRleCk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZ2V0 X2Rpc3BsYXlfYnlfbmFtZSgpLSBmaW5kcyBkaXNwbGF5IGJ5IG5hbWUKLSAqIEBuYW1lOgluYW1l IG9mIHRoZSBkaXNwbGF5LgotICoKLSAqIFJldHVybjogaGFuZGxlIHRvIHRoZSBkaXNwbGF5IG9y IGVycm9yIGNvZGUuCi0gKi8KLXN0cnVjdCBkc2lfZGlzcGxheSAqZHNpX2Rpc3BsYXlfZ2V0X2Rp c3BsYXlfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9z ZXRfYWN0aXZlX3N0YXRlKCkgLSBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgZGlzcGxheQotICogQGRp c3BsYXk6ICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAqIEBpc19hY3RpdmU6ICAgICAgc3Rh dGUKLSAqLwotdm9pZCBkc2lfZGlzcGxheV9zZXRfYWN0aXZlX3N0YXRlKHN0cnVjdCBkc2lfZGlz cGxheSAqZGlzcGxheSwgYm9vbCBpc19hY3RpdmUpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2Ry bV9icmlkZ2VfaW5pdCgpIC0gaW5pdGlhbGl6ZXMgRFJNIGJyaWRnZSBvYmplY3QgZm9yIERTSQot ICogQGRpc3BsYXk6ICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBkaXNwbGF5LgotICogQGVuY29k ZXI6ICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgZW5jb2RlciBvYmplY3Qgd2hpY2ggaXMgY29u bmVjdGVkIHRvIHRoZQotICoJCQlkaXNwbGF5LgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4K LSAqLwotaW50IGRzaV9kaXNwbGF5X2RybV9icmlkZ2VfaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkg KmRpc3BsYXksCi0JCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKTsKLQotLyoqCi0gKiBkc2lfZGlz cGxheV9kcm1fYnJpZGdlX2RlaW5pdCgpIC0gZGVzdHJveXMgRFJNIGJyaWRnZSBmb3IgdGhlIGRp c3BsYXkKLSAqIEBkaXNwbGF5OiAgICAgICAgSGFuZGxlIHRvIHRoZSBkaXNwbGF5LgotICoKLSAq IFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X2RybV9icmlkZ2VfZGVp bml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlf Z2V0X2luZm8oKSAtIHJldHVybnMgdGhlIGRpc3BsYXkgcHJvcGVydGllcwotICogQGluZm86ICAg ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aGVyZSBpbmZvIGlzIHN0b3JlZC4K LSAqIEBkaXNwOiAgICAgICAgICAgICBIYW5kbGUgdG8gdGhlIGRpc3BsYXkuCi0gKgotICogUmV0 dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X2luZm8oc3RydWN0IG1z bV9kaXNwbGF5X2luZm8gKmluZm8sIHZvaWQgKmRpc3ApOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5 X2dldF9tb2RlX2NvdW50KCkgLSBnZXQgbnVtYmVyIG9mIG1vZGVzIHN1cHBvcnRlZCBieSB0aGUg ZGlzcGxheQotICogQGRpc3BsYXk6ICAgICAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXkuCi0gKiBA Y291bnQ6ICAgICAgICAgICAgICBOdW1iZXIgb2YgbW9kZXMgc3VwcG9ydGVkCi0gKgotICogUmV0 dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X21vZGVfY291bnQoc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LCB1MzIgKmNvdW50KTsKLQotLyoqCi0gKiBkc2lfZGlz cGxheV9nZXRfbW9kZXMoKSAtIGdldCBtb2RlcyBzdXBwb3J0ZWQgYnkgZGlzcGxheQotICogQGRp c3BsYXk6ICAgICAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXkuCi0gKiBAbW9kZXM7ICAgICAgICAg ICAgICBQb2ludGVyIHRvIGFycmF5IG9mIG1vZGVzLiBNZW1vcnkgYWxsb2NhdGVkIHNob3VsZCBi ZQotICoJCQliaWcgZW5vdWdoIHRvIHN0b3JlIChjb3VudCAqIHN0cnVjdCBkc2lfZGlzcGxheV9t b2RlKQotICoJCQllbGVtZW50cy4gSWYgbW9kZXMgcG9pbnRlciBpcyBOVUxMLCBudW1iZXIgb2Yg bW9kZXMgd2lsbAotICoJCQliZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGNv dW50LgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X2dl dF9tb2RlcyhzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkgIHN0cnVjdCBkc2lfZGlz cGxheV9tb2RlICptb2Rlcyk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfcHV0X21vZGUoKSAtIGZy ZWUgdXAgbW9kZSBjcmVhdGVkIGZvciB0aGUgZGlzcGxheQotICogQGRpc3BsYXk6ICAgICAgICAg ICAgSGFuZGxlIHRvIGRpc3BsYXkuCi0gKiBAbW9kZTogICAgICAgICAgICAgICBEaXNwbGF5IG1v ZGUgdG8gYmUgZnJlZWQgdXAKLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLXZvaWQg ZHNpX2Rpc3BsYXlfcHV0X21vZGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCXN0cnVj dCBkc2lfZGlzcGxheV9tb2RlICptb2RlKTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV92YWxpZGF0 ZV9tb2RlKCkgLSB2YWxpZGF0ZXMgaWYgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgZGlzcGxheQotICog QGRpc3BsYXk6ICAgICAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5LgotICogQG1vZGU6ICAgICAg ICAgICAgICAgIE1vZGUgdG8gYmUgdmFsaWRhdGVkLgotICogQGZsYWdzOiAgICAgICAgICAgICAg IE1vZGlmaWVyIGZsYWdzLgotICoKLSAqIFJldHVybjogMCBpZiBzdXBwb3J0ZWQgb3IgZXJyb3Ig Y29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X3ZhbGlkYXRlX21vZGUoc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5LAotCQkJICAgICAgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0J CQkgICAgICB1MzIgZmxhZ3MpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3ZhbGlkYXRlX21vZGVf dnJyKCkgLSB2YWxpZGF0ZXMgbW9kZSBpZiB2YXJpYWJsZSByZWZyZXNoIGNhc2UKLSAqIEBkaXNw bGF5OiAgICAgICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAqIEBtb2RlOiAgICAgICAgICAg ICAgICBNb2RlIHRvIGJlIHZhbGlkYXRlZC4uCi0gKgotICogUmV0dXJuOiAwIGlmICBlcnJvciBj b2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZV92cnIoc3RydWN0IGRzaV9k aXNwbGF5ICpkaXNwbGF5LAotCQkJc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKmN1cl9kc2lfbW9k ZSwKLQkJCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlKTsKLQotLyoqCi0gKiBkc2lfZGlz cGxheV9zZXRfbW9kZSgpIC0gU2V0IG1vZGUgb24gdGhlIGRpc3BsYXkuCi0gKiBAZGlzcGxheTog ICAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5LgotICogQG1vZGU6ICAgICAgICAgICAgICBtb2Rl IHRvIGJlIHNldC4KLSAqIEBmbGFnczogICAgICAgICAgICAgTW9kaWZpZXIgZmxhZ3MuCi0gKgot ICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfc2V0X21vZGUoc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpt b2RlLAotCQkJIHUzMiBmbGFncyk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfcHJlcGFyZSgpIC0g cHJlcGFyZSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXku Ci0gKgotICogUHJlcGFyZSB3aWxsIHBlcmZvcm0gcG93ZXIgdXAgc2VxdWVuY2VzIGZvciB0aGUg aG9zdCBhbmQgcGFuZWwgaGFyZHdhcmUuCi0gKiBQb3dlciBhbmQgY2xvY2sgcmVzb3VyY2VzIG1p Z2h0IGJlIHR1cm5lZCBvbiAoZGVwZW5kaW5nIG9uIHRoZSBwYW5lbCBtb2RlKS4KLSAqIFRoZSB2 aWRlbyBlbmdpbmUgaXMgbm90IGVuYWJsZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgot ICovCi1pbnQgZHNpX2Rpc3BsYXlfcHJlcGFyZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkp OwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2VuYWJsZSgpIC0gZW5hYmxlIGRpc3BsYXkKLSAqIEBk aXNwbGF5OiAgICAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5LgotICoKLSAqIEVuYWJsZSB3aWxs IHR1cm4gb24gdGhlIGhvc3QgZW5naW5lIGFuZCB0aGUgcGFuZWwuIEF0IHRoZSBlbmQgb2YgdGhl IGVuYWJsZQotICogZnVuY3Rpb24sIEhvc3QgYW5kIHBhbmVsIGhhcmR3YXJlIGFyZSByZWFkeSB0 byBhY2NlcHQgcGl4ZWwgZGF0YSBmcm9tCi0gKiB1cHN0cmVhbS4KLSAqCi0gKiBSZXR1cm46IGVy cm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxheV9lbmFibGUoc3RydWN0IGRzaV9kaXNwbGF5 ICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9wb3N0X2VuYWJsZSgpIC0gcGVyZm9y bSBwb3N0IGVuYWJsZSBvcGVyYXRpb25zLgotICogQGRpc3BsYXk6ICAgICAgICAgSGFuZGxlIHRv IGRpc3BsYXkuCi0gKgotICogU29tZSBwYW5lbHMgbWlnaHQgcmVxdWlyZSBzb21lIGNvbW1hbmRz IHRvIGJlIHNlbnQgYWZ0ZXIgcGl4ZWwgZGF0YQotICogdHJhbnNtaXNzaW9uIGhhcyBzdGFydGVk LiBTdWNoIGNvbW1hbmRzIGFyZSBzZW50IGFzIHBhcnQgb2YgdGhlIHBvc3RfZW5hYmxlCi0gKiBm dW5jdGlvbi4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxh eV9wb3N0X2VuYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRz aV9kaXNwbGF5X3ByZV9kaXNhYmxlKCkgLSBwZXJmb3JtIHByZSBkaXNhYmxlIG9wZXJhdGlvbnMu Ci0gKiBAZGlzcGxheTogICAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXkuCi0gKgotICogSWYgYSBw YW5lbCByZXF1aXJlcyBjb21tYW5kcyB0byBiZSBzZW50IGJlZm9yZSBwaXhlbCBkYXRhIHRyYW5z bWlzc2lvbiBpcwotICogc3RvcHBlZCwgdGhvc2UgY2FuIGJlIHNlbnQgYXMgcGFydCBvZiBwcmVf ZGlzYWJsZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxh eV9wcmVfZGlzYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRz aV9kaXNwbGF5X2Rpc2FibGUoKSAtIGRpc2FibGUgcGFuZWwgYW5kIGhvc3QgaGFyZHdhcmUuCi0g KiBAZGlzcGxheTogICAgICAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXkuCi0gKgotICogRGlzYWJs ZSBob3N0IGFuZCBwYW5lbCBoYXJkd2FyZSBhbmQgcGl4ZWwgZGF0YSB0cmFuc21pc3Npb24gY2Fu IG5vdCBjb250aW51ZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lf ZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSk7Ci0KLS8qKgotICog ZHNpX3ByZV9jbGtvZmZfY2IoKSAtIENhbGxiYWNrIGJlZm9yZSBjbG9jayBpcyB0dXJuZWQgb2Zm Ci0gKiBAcHJpdjogcHJpdmF0ZSBkYXRhIHBvaW50ZXIuCi0gKiBAY2xrX3R5cGU6IGNsb2NrIHdo aWNoIGlzIGJlaW5nIHR1cm5lZCBvbi4KLSAqIEBuZXdfc3RhdGU6IG5leHQgc3RhdGUgZm9yIHRo ZSBjbG9jay4KLSAqCi0gKiBAcmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3ByZV9j bGtvZmZfY2Iodm9pZCAqcHJpdiwgZW51bSBkc2lfY2xrX3R5cGUgY2xrX3R5cGUsCi0JZW51bSBk c2lfY2xrX3N0YXRlIG5ld19zdGF0ZSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfdXBkYXRlX3Bw cygpIC0gdXBkYXRlIFBQUyBidWZmZXIuCi0gKiBAcHBzX2NtZDogICAgICAgICAgICAgUFBTIGJ1 ZmZlci4KLSAqIEBkaXNwbGF5OiAgICAgICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAqCi0g KiBDb3BpZXMgbmV3IFBQUyBidWZmZXIgaW50byBkaXNwbGF5IHN0cnVjdHVyZS4KLSAqCi0gKiBS ZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxheV91cGRhdGVfcHBzKGNoYXIg KnBwc19jbWQsIHZvaWQgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRzaV9wb3N0X2Nsa29mZl9jYigp IC0gQ2FsbGJhY2sgYWZ0ZXIgY2xvY2sgaXMgdHVybmVkIG9mZgotICogQHByaXY6IHByaXZhdGUg ZGF0YSBwb2ludGVyLgotICogQGNsa190eXBlOiBjbG9jayB3aGljaCBpcyBiZWluZyB0dXJuZWQg b24uCi0gKiBAY3Vycl9zdGF0ZTogY3VycmVudCBzdGF0ZSBmb3IgdGhlIGNsb2NrLgotICoKLSAq IEByZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcG9zdF9jbGtvZmZfY2Iodm9pZCAq cHJpdiwgZW51bSBkc2lfY2xrX3R5cGUgY2xrX3R5cGUsCi0JZW51bSBkc2lfY2xrX3N0YXRlIGN1 cnJfc3RhdGUpOwotCi0vKioKLSAqIGRzaV9wb3N0X2Nsa29uX2NiKCkgLSBDYWxsYmFjayBhZnRl ciBjbG9jayBpcyB0dXJuZWQgb24KLSAqIEBwcml2OiBwcml2YXRlIGRhdGEgcG9pbnRlci4KLSAq IEBjbGtfdHlwZTogY2xvY2sgd2hpY2ggaXMgYmVpbmcgdHVybmVkIG9uLgotICogQGN1cnJfc3Rh dGU6IGN1cnJlbnQgc3RhdGUgZm9yIHRoZSBjbG9jay4KLSAqCi0gKiBAcmV0dXJuOiBlcnJvciBj b2RlLgotICovCi1pbnQgZHNpX3Bvc3RfY2xrb25fY2Iodm9pZCAqcHJpdiwgZW51bSBkc2lfY2xr X3R5cGUgY2xrX3R5cGUsCi0JZW51bSBkc2lfY2xrX3N0YXRlIGN1cnJfc3RhdGUpOwotCi0KLS8q KgotICogZHNpX3ByZV9jbGtvbl9jYigpIC0gQ2FsbGJhY2sgYmVmb3JlIGNsb2NrIGlzIHR1cm5l ZCBvbgotICogQHByaXY6IHByaXZhdGUgZGF0YSBwb2ludGVyLgotICogQGNsa190eXBlOiBjbG9j ayB3aGljaCBpcyBiZWluZyB0dXJuZWQgb24uCi0gKiBAbmV3X3N0YXRlOiBuZXh0IHN0YXRlIGZv ciB0aGUgY2xvY2suCi0gKgotICogQHJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9w cmVfY2xrb25fY2Iodm9pZCAqcHJpdiwgZW51bSBkc2lfY2xrX3R5cGUgY2xrX3R5cGUsCi0JZW51 bSBkc2lfY2xrX3N0YXRlIG5ld19zdGF0ZSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfdW5wcmVw YXJlKCkgLSBwb3dlciBvZmYgZGlzcGxheSBoYXJkd2FyZS4KLSAqIEBkaXNwbGF5OiAgICAgICAg ICAgIEhhbmRsZSB0byBkaXNwbGF5LgotICoKLSAqIEhvc3QgYW5kIHBhbmVsIGhhcmR3YXJlIGlz IHR1cm5lZCBvZmYuIFBhbmVsIHdpbGwgYmUgaW4gcmVzZXQgc3RhdGUgYXQgdGhlCi0gKiBlbmQg b2YgdGhlIGZ1bmN0aW9uLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRz aV9kaXNwbGF5X3VucHJlcGFyZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpOwotCi1pbnQg ZHNpX2Rpc3BsYXlfc2V0X3RwZ19zdGF0ZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksIGJv b2wgZW5hYmxlKTsKLQotaW50IGRzaV9kaXNwbGF5X2Nsb2NrX2dhdGUoc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5LCBib29sIGVuYWJsZSk7Ci1pbnQgZHNpX2Rpc3BhbHlfc3RhdGljX2ZyYW1l KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwgYm9vbCBlbmFibGUpOwotCi0vKioKLSAqIGRz aV9kaXNwbGF5X2VuYWJsZV9ldmVudCgpIC0gZW5hYmxlIGludGVycnVwdCBiYXNlZCBjb25uZWN0 b3IgZXZlbnQKLSAqIEBkaXNwbGF5OiAgICAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5LgotICog QGV2ZW50X2lkeDogICAgICAgICAgRXZlbnQgaW5kZXguCi0gKiBAZXZlbnRfaW5mbzogICAgICAg ICBFdmVudCBjYWxsYmFjayBkZWZpbml0aW9uLgotICogQGVuYWJsZTogICAgICAgICAgICAgV2hl dGhlciB0byBlbmFibGUvZGlzYWJsZSB0aGUgZXZlbnQgaW50ZXJydXB0LgotICovCi12b2lkIGRz aV9kaXNwbGF5X2VuYWJsZV9ldmVudChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCXVp bnQzMl90IGV2ZW50X2lkeCwgc3RydWN0IGRzaV9ldmVudF9jYl9pbmZvICpldmVudF9pbmZvLAot CQlib29sIGVuYWJsZSk7Ci0KLWludCBkc2lfZGlzcGxheV9zZXRfYmFja2xpZ2h0KHZvaWQgKmRp c3BsYXksIHUzMiBibF9sdmwpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3NvZnRfcmVzZXQoKSAt IHBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9uIERTSSBjb250cm9sbGVyCi0gKiBAZGlzcGxheTogICAg ICAgICBIYW5kbGUgdG8gZGlzcGxheQotICoKLSAqIFRoZSB2aWRlbywgY29tbWFuZCBhbmQgY29u dHJvbGxlciBlbmdpbmVzIHdpbGwgYmUgZGlzYWJsZWQgYmVmb3JlIHRoZQotICogcmVzZXQgaXMg dHJpZ2dlcmVkLiBBZnRlciwgdGhlIGVuZ2luZXMgd2lsbCBiZSByZS1lbmFibGVkIHRvIHRoZSBz YW1lIHN0YXRlCi0gKiBhcyBiZWZvcmUgdGhlIHJlc2V0LgotICoKLSAqIElmIHRoZSByZXNldCBp cyBkb25lIHdoaWxlIE1EUCB0aW1pbmcgZW5naW5lIGlzIHR1cm5lZCBvbiwgdGhlIHZpZGVvCi0g KiBlbmdpbmUgc2hvdWxkIGJlIHJlLWVuYWJsZWQgb25seSBkdXJpbmcgdGhlIHZlcnRpY2FsIGJs YW5raW5nIHRpbWUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlCi0gKi8KLWludCBkc2lfZGlz cGxheV9zb2Z0X3Jlc2V0KHZvaWQgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3Nl dF9wb3dlciAtIHVwZGF0ZSBwb3dlci9kcG1zIHNldHRpbmcKLSAqIEBjb25uZWN0b3I6IFBvaW50 ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBwb3dlcl9tb2RlOiBPbmUgb2YgdGhl IGZvbGxvd2luZywKLSAqICAgICAgICAgICAgICBEUFVfTU9ERV9EUE1TX09OCi0gKiAgICAgICAg ICAgICAgRFBVX01PREVfRFBNU19MUDEKLSAqICAgICAgICAgICAgICBEUFVfTU9ERV9EUE1TX0xQ MgotICogICAgICAgICAgICAgIERQVV9NT0RFX0RQTVNfU1RBTkRCWQotICogICAgICAgICAgICAg IERQVV9NT0RFX0RQTVNfU1VTUEVORAotICogICAgICAgICAgICAgIERQVV9NT0RFX0RQTVNfT0ZG Ci0gKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0gKiBS ZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRzaV9kaXNwbGF5X3NldF9wb3dlcihz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlpbnQgcG93ZXJfbW9kZSwgdm9pZCAq ZGlzcGxheSk7Ci0KLS8qCi0gKiBkc2lfZGlzcGxheV9wcmVfa2lja29mZiAtIHByb2dyYW0ga2lj a29mZi10aW1lIGZlYXR1cmVzCi0gKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRpc3Bs YXkgc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRzaV9k aXNwbGF5X3ByZV9raWNrb2ZmKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSk7Ci0KLS8qKgot ICogZHNpX2Rpc3BsYXlfZ2V0X2RzdF9mb3JtYXQoKSAtIGdldCBkc3RfZm9ybWF0IGZyb20gRFNJ IGRpc3BsYXkKLSAqIEBkaXNwbGF5OiAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5Ci0gKgotICog UmV0dXJuOiBlbnVtIGRzaV9waXhlbF9mb3JtYXQgdHlwZQotICovCi1lbnVtIGRzaV9waXhlbF9m b3JtYXQgZHNpX2Rpc3BsYXlfZ2V0X2RzdF9mb3JtYXQodm9pZCAqZGlzcGxheSk7Ci0KLSNlbHNl Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRzaV9kaXNwbGF5X2dldF9udW1fb2ZfZGlzcGxheXModm9p ZCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSBpbnQgZHNpX2Rpc3BsYXlfZ2V0X2FjdGl2 ZV9kaXNwbGF5cyh2b2lkICoqZGlzcGxheV9hcnJheSwgdTMyIG1heF9kaXNwbGF5X2NvdW50KSB7 IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIGludCBkc2lfZGlzcGxheV9kcm1fYnJpZGdlX2lu aXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu YykKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IGRzaV9kaXNwbGF5 X2RybV9icmlkZ2VfZGVpbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkgeyByZXR1cm4g MDsgfQotc3RhdGljIGlubGluZSBpbnQgZHNpX2Rpc3BsYXlfZ2V0X2luZm8oc3RydWN0IG1zbV9k aXNwbGF5X2luZm8gKmluZm8sIHZvaWQgKmRpc3ApCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0K LSNlbmRpZgotCi0jZW5kaWYgLyogX0RTSV9ESVNQTEFZX0hfICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3QuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXlfdGVzdC5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA0YmUyNTcwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXlfdGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE0 ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2luY2x1 ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSAi ZHNpX2Rpc3BsYXlfdGVzdC5oIgotCi1zdGF0aWMgdm9pZCBkc2lfZGlzcGxheV90ZXN0X2R1bXBf bW9kZXMoc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsIHUzMgotCQkJCQljb3VudCkKLXsK LX0KLQotc3RhdGljIHZvaWQgZHNpX2Rpc3BsYXlfdGVzdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfdGVzdCAqdGVzdDsKLQlzdHJ1Y3QgZHNp X2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGVzOwotCXUz MiBjb3VudCA9IDA7Ci0JdTMyIHNpemUgPSAwOwotCWludCByYyA9IDA7Ci0KLQl0ZXN0ID0gY29u dGFpbmVyX29mKHdvcmssIHN0cnVjdCBkc2lfZGlzcGxheV90ZXN0LCB0ZXN0X3dvcmspOwotCi0J ZGlzcGxheSA9IHRlc3QtPmRpc3BsYXk7Ci0JcmMgPSBkc2lfZGlzcGxheV9nZXRfbW9kZV9jb3Vu dChkaXNwbGF5LCAmY291bnQpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQg bW9kZXMgY291bnQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gdGVzdF9mYWlsOwotCX0KLQotCXNp emUgPSBjb3VudCAqIHNpemVvZigqbW9kZXMpOwotCW1vZGVzID0ga3phbGxvYyhzaXplLCBHRlBf S0VSTkVMKTsKLQlpZiAoIW1vZGVzKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byB0ZXN0X2Zh aWw7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9nZXRfbW9kZXMoZGlzcGxheSwgbW9kZXMpOwot CWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgbW9kZXMsIHJjPSVkXG4iLCByYyk7 Ci0JCWdvdG8gdGVzdF9mYWlsX2ZyZWVfbW9kZXM7Ci0JfQotCi0JZHNpX2Rpc3BsYXlfdGVzdF9k dW1wX21vZGVzKG1vZGVzLCBjb3VudCk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3NldF9tb2RlKGRp c3BsYXksICZtb2Rlc1swXSwgMHgwKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8g c2V0IG1vZGUsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gdGVzdF9mYWlsX2ZyZWVfbW9kZXM7Ci0J fQotCi0JcmMgPSBkc2lfZGlzcGxheV9wcmVwYXJlKGRpc3BsYXkpOwotCWlmIChyYykgewotCQlw cl9lcnIoImZhaWxlZCB0byBwcmVwYXJlIGRpc3BsYXksIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8g dGVzdF9mYWlsX2ZyZWVfbW9kZXM7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9lbmFibGUoZGlz cGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBkaXNwbGF5LCBy Yz0lZFxuIiwgcmMpOwotCQlnb3RvIHRlc3RfZmFpbF91bnByZXBfZGlzcDsKLQl9Ci0JcmV0dXJu OwotCi10ZXN0X2ZhaWxfdW5wcmVwX2Rpc3A6Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVk IHRvIHVucHJlcCBkaXNwbGF5LCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIHRlc3RfZmFpbF9mcmVl X21vZGVzOwotCX0KLQotdGVzdF9mYWlsX2ZyZWVfbW9kZXM6Ci0Ja2ZyZWUobW9kZXMpOwotdGVz dF9mYWlsOgotCXJldHVybjsKLX0KLQotaW50IGRzaV9kaXNwbGF5X3Rlc3RfaW5pdChzdHJ1Y3Qg ZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0Jc3RhdGljIGludCBkb25lOwotCWludCByYyA9IDA7 Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X3Rlc3QgKnRlc3Q7Ci0KLQlpZiAoZG9uZSkKLQkJcmV0dXJu IHJjOwotCi0JZG9uZSA9IDE7Ci0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBw YXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl0ZXN0ID0ga3phbGxvYyhzaXpl b2YoKnRlc3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRlc3QpCi0JCXJldHVybiAtRU5PTUVNOwot Ci0JdGVzdC0+ZGlzcGxheSA9IGRpc3BsYXk7Ci0JSU5JVF9XT1JLKCZ0ZXN0LT50ZXN0X3dvcmss IGRzaV9kaXNwbGF5X3Rlc3Rfd29yayk7Ci0KLQlkc2lfZGlzcGxheV90ZXN0X3dvcmsoJnRlc3Qt PnRlc3Rfd29yayk7Ci0JcmV0dXJuIHJjOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXlfdGVzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBhMmYwODYxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0 YWdpbmcvZHNpX2Rpc3BsYXlfdGVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAot LyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBv bmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVmIF9EU0lfRElT UExBWV9URVNUX0hfCi0jZGVmaW5lIF9EU0lfRElTUExBWV9URVNUX0hfCi0KLSNpbmNsdWRlICJk c2lfZGlzcGxheS5oIgotI2luY2x1ZGUgImRzaV9jdHJsX2h3LmgiCi0jaW5jbHVkZSAiZHNpX2N0 cmwuaCIKLQotc3RydWN0IGRzaV9kaXNwbGF5X3Rlc3QgewotCXN0cnVjdCBkc2lfZGlzcGxheSAq ZGlzcGxheTsKLQotCXN0cnVjdCB3b3JrX3N0cnVjdCB0ZXN0X3dvcms7Ci19OwotCi1pbnQgZHNp X2Rpc3BsYXlfdGVzdF9pbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSk7Ci0KLQotI2Vu ZGlmIC8qIF9EU0lfRElTUExBWV9URVNUX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0 YWdpbmcvZHNpX2RybS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTc0MmEzLi4w MDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2RybS5jCisr KyAvZGV2L251bGwKQEAgLTEsNjgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KLSAqCi0gKi8KLQotCi0jZGVmaW5lIHByX2ZtdChmbXQpCSJkc2ktZHJtOlslc10gIiBmbXQs IF9fZnVuY19fCi0jaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Ci0jaW5jbHVkZSA8 ZHJtL2RybV9hdG9taWMuaD4KLQotI2luY2x1ZGUgIm1zbV9rbXMuaCIKLSNpbmNsdWRlICJkcHVf Y29ubmVjdG9yLmgiCi0jaW5jbHVkZSAiZHNpX2RybS5oIgotI2luY2x1ZGUgImRwdV90cmFjZS5o IgotCi0jZGVmaW5lIHRvX2RzaV9icmlkZ2UoeCkgICAgIGNvbnRhaW5lcl9vZigoeCksIHN0cnVj dCBkc2lfYnJpZGdlLCBiYXNlKQotI2RlZmluZSB0b19kc2lfc3RhdGUoeCkgICAgICBjb250YWlu ZXJfb2YoKHgpLCBzdHJ1Y3QgZHNpX2Nvbm5lY3Rvcl9zdGF0ZSwgYmFzZSkKLQotc3RhdGljIHZv aWQgY29udmVydF90b19kc2lfbW9kZShjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJt X21vZGUsCi0JCQkJc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKmRzaV9tb2RlKQotewotCW1lbXNl dChkc2lfbW9kZSwgMCwgc2l6ZW9mKCpkc2lfbW9kZSkpOwotCi0JZHNpX21vZGUtPnRpbWluZy5o X2FjdGl2ZSA9IGRybV9tb2RlLT5oZGlzcGxheTsKLQlkc2lfbW9kZS0+dGltaW5nLmhfYmFja19w b3JjaCA9IGRybV9tb2RlLT5odG90YWwgLSBkcm1fbW9kZS0+aHN5bmNfZW5kOwotCWRzaV9tb2Rl LT50aW1pbmcuaF9zeW5jX3dpZHRoID0gZHJtX21vZGUtPmh0b3RhbCAtCi0JCQkoZHJtX21vZGUt PmhzeW5jX3N0YXJ0ICsgZHNpX21vZGUtPnRpbWluZy5oX2JhY2tfcG9yY2gpOwotCWRzaV9tb2Rl LT50aW1pbmcuaF9mcm9udF9wb3JjaCA9IGRybV9tb2RlLT5oc3luY19zdGFydCAtCi0JCQkJCSBk cm1fbW9kZS0+aGRpc3BsYXk7Ci0JZHNpX21vZGUtPnRpbWluZy5oX3NrZXcgPSBkcm1fbW9kZS0+ aHNrZXc7Ci0KLQlkc2lfbW9kZS0+dGltaW5nLnZfYWN0aXZlID0gZHJtX21vZGUtPnZkaXNwbGF5 OwotCWRzaV9tb2RlLT50aW1pbmcudl9iYWNrX3BvcmNoID0gZHJtX21vZGUtPnZ0b3RhbCAtIGRy bV9tb2RlLT52c3luY19lbmQ7Ci0JZHNpX21vZGUtPnRpbWluZy52X3N5bmNfd2lkdGggPSBkcm1f bW9kZS0+dnRvdGFsIC0KLQkJKGRybV9tb2RlLT52c3luY19zdGFydCArIGRzaV9tb2RlLT50aW1p bmcudl9iYWNrX3BvcmNoKTsKLQotCWRzaV9tb2RlLT50aW1pbmcudl9mcm9udF9wb3JjaCA9IGRy bV9tb2RlLT52c3luY19zdGFydCAtCi0JCQkJCSBkcm1fbW9kZS0+dmRpc3BsYXk7Ci0KLQlkc2lf bW9kZS0+dGltaW5nLnJlZnJlc2hfcmF0ZSA9IGRybV9tb2RlLT52cmVmcmVzaDsKLQotCWRzaV9t b2RlLT5waXhlbF9jbGtfa2h6ID0gZHJtX21vZGUtPmNsb2NrOwotCi0JZHNpX21vZGUtPnByaXZf aW5mbyA9Ci0JCShzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZV9wcml2X2luZm8gKilkcm1fbW9kZS0+ cHJpdmF0ZTsKLQotCWlmIChtc21faXNfbW9kZV9zZWFtbGVzcyhkcm1fbW9kZSkpCi0JCWRzaV9t b2RlLT5kc2lfbW9kZV9mbGFncyB8PSBEU0lfTU9ERV9GTEFHX1NFQU1MRVNTOwotCWlmIChtc21f aXNfbW9kZV9keW5hbWljX2Zwcyhkcm1fbW9kZSkpCi0JCWRzaV9tb2RlLT5kc2lfbW9kZV9mbGFn cyB8PSBEU0lfTU9ERV9GTEFHX0RGUFM7Ci0JaWYgKG1zbV9uZWVkc192YmxhbmtfcHJlX21vZGVz ZXQoZHJtX21vZGUpKQotCQlkc2lfbW9kZS0+ZHNpX21vZGVfZmxhZ3MgfD0gRFNJX01PREVfRkxB R19WQkxBTktfUFJFX01PREVTRVQ7Ci0JaWYgKG1zbV9pc19tb2RlX3NlYW1sZXNzX2Rtcyhkcm1f bW9kZSkpCi0JCWRzaV9tb2RlLT5kc2lfbW9kZV9mbGFncyB8PSBEU0lfTU9ERV9GTEFHX0RNUzsK LQlpZiAobXNtX2lzX21vZGVfc2VhbWxlc3NfdnJyKGRybV9tb2RlKSkKLQkJZHNpX21vZGUtPmRz aV9tb2RlX2ZsYWdzIHw9IERTSV9NT0RFX0ZMQUdfVlJSOwotfQotCi1zdGF0aWMgdm9pZCBjb252 ZXJ0X3RvX2RybV9tb2RlKGNvbnN0IHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICpkc2lfbW9kZSwK LQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGUpCi17Ci0JbWVtc2V0KGRybV9t b2RlLCAwLCBzaXplb2YoKmRybV9tb2RlKSk7Ci0KLQlkcm1fbW9kZS0+aGRpc3BsYXkgPSBkc2lf bW9kZS0+dGltaW5nLmhfYWN0aXZlOwotCWRybV9tb2RlLT5oc3luY19zdGFydCA9IGRybV9tb2Rl LT5oZGlzcGxheSArCi0JCQkJZHNpX21vZGUtPnRpbWluZy5oX2Zyb250X3BvcmNoOwotCWRybV9t b2RlLT5oc3luY19lbmQgPSBkcm1fbW9kZS0+aHN5bmNfc3RhcnQgKwotCQkJICAgICAgZHNpX21v ZGUtPnRpbWluZy5oX3N5bmNfd2lkdGg7Ci0JZHJtX21vZGUtPmh0b3RhbCA9IGRybV9tb2RlLT5o c3luY19lbmQgKyBkc2lfbW9kZS0+dGltaW5nLmhfYmFja19wb3JjaDsKLQlkcm1fbW9kZS0+aHNr ZXcgPSBkc2lfbW9kZS0+dGltaW5nLmhfc2tldzsKLQotCWRybV9tb2RlLT52ZGlzcGxheSA9IGRz aV9tb2RlLT50aW1pbmcudl9hY3RpdmU7Ci0JZHJtX21vZGUtPnZzeW5jX3N0YXJ0ID0gZHJtX21v ZGUtPnZkaXNwbGF5ICsKLQkJCQlkc2lfbW9kZS0+dGltaW5nLnZfZnJvbnRfcG9yY2g7Ci0JZHJt X21vZGUtPnZzeW5jX2VuZCA9IGRybV9tb2RlLT52c3luY19zdGFydCArCi0JCQkgICAgICBkc2lf bW9kZS0+dGltaW5nLnZfc3luY193aWR0aDsKLQlkcm1fbW9kZS0+dnRvdGFsID0gZHJtX21vZGUt PnZzeW5jX2VuZCArIGRzaV9tb2RlLT50aW1pbmcudl9iYWNrX3BvcmNoOwotCi0JZHJtX21vZGUt PnZyZWZyZXNoID0gZHNpX21vZGUtPnRpbWluZy5yZWZyZXNoX3JhdGU7Ci0JZHJtX21vZGUtPmNs b2NrID0gZHNpX21vZGUtPnBpeGVsX2Nsa19raHo7Ci0KLQlkcm1fbW9kZS0+cHJpdmF0ZSA9IChp bnQgKilkc2lfbW9kZS0+cHJpdl9pbmZvOwotCi0JaWYgKGRzaV9tb2RlLT5kc2lfbW9kZV9mbGFn cyAmIERTSV9NT0RFX0ZMQUdfU0VBTUxFU1MpCi0JCWRybV9tb2RlLT5mbGFncyB8PSBEUk1fTU9E RV9GTEFHX1NFQU1MRVNTOwotCWlmIChkc2lfbW9kZS0+ZHNpX21vZGVfZmxhZ3MgJiBEU0lfTU9E RV9GTEFHX0RGUFMpCi0JCWRybV9tb2RlLT5wcml2YXRlX2ZsYWdzIHw9IE1TTV9NT0RFX0ZMQUdf U0VBTUxFU1NfRFlOQU1JQ19GUFM7Ci0JaWYgKGRzaV9tb2RlLT5kc2lfbW9kZV9mbGFncyAmIERT SV9NT0RFX0ZMQUdfVkJMQU5LX1BSRV9NT0RFU0VUKQotCQlkcm1fbW9kZS0+cHJpdmF0ZV9mbGFn cyB8PSBNU01fTU9ERV9GTEFHX1ZCTEFOS19QUkVfTU9ERVNFVDsKLQlpZiAoZHNpX21vZGUtPmRz aV9tb2RlX2ZsYWdzICYgRFNJX01PREVfRkxBR19ETVMpCi0JCWRybV9tb2RlLT5wcml2YXRlX2Zs YWdzIHw9IE1TTV9NT0RFX0ZMQUdfU0VBTUxFU1NfRE1TOwotCWlmIChkc2lfbW9kZS0+ZHNpX21v ZGVfZmxhZ3MgJiBEU0lfTU9ERV9GTEFHX1ZSUikKLQkJZHJtX21vZGUtPnByaXZhdGVfZmxhZ3Mg fD0gTVNNX01PREVfRkxBR19TRUFNTEVTU19WUlI7Ci0KLQlkcm1fbW9kZV9zZXRfbmFtZShkcm1f bW9kZSk7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSkKLXsKLQlzdHJ1Y3QgZHNpX2JyaWRnZSAqY19icmlkZ2UgPSB0b19kc2lfYnJp ZGdlKGJyaWRnZSk7Ci0KLQlpZiAoIWJyaWRnZSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1z XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcHJfZGVidWcoIlslZF0gYXR0YWNoZWRc biIsIGNfYnJpZGdlLT5pZCk7Ci0KLQlyZXR1cm4gMDsKLQotfQotCi1zdGF0aWMgdm9pZCBkc2lf YnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKLXsKLQlpbnQgcmMg PSAwOwotCXN0cnVjdCBkc2lfYnJpZGdlICpjX2JyaWRnZSA9IHRvX2RzaV9icmlkZ2UoYnJpZGdl KTsKLQotCWlmICghYnJpZGdlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQly ZXR1cm47Ci0JfQotCi0JLyogQnkgdGhpcyBwb2ludCBtb2RlIHNob3VsZCBoYXZlIGJlZW4gdmFs aWRhdGVkIHRocm91Z2ggbW9kZV9maXh1cCAqLwotCXJjID0gZHNpX2Rpc3BsYXlfc2V0X21vZGUo Y19icmlkZ2UtPmRpc3BsYXksCi0JCQkmKGNfYnJpZGdlLT5kc2lfbW9kZSksIDB4MCk7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiWyVkXSBmYWlsZWQgdG8gcGVyZm9ybSBhIG1vZGUgc2V0LCByYz0l ZFxuIiwKLQkJICAgICAgIGNfYnJpZGdlLT5pZCwgcmMpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYg KGNfYnJpZGdlLT5kc2lfbW9kZS5kc2lfbW9kZV9mbGFncyAmCi0JCShEU0lfTU9ERV9GTEFHX1NF QU1MRVNTIHwgRFNJX01PREVfRkxBR19WUlIpKSB7Ci0JCXByX2RlYnVnKCJbJWRdIHNlYW1sZXNz IHByZS1lbmFibGVcbiIsIGNfYnJpZGdlLT5pZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlEUFVfQVRS QUNFX0JFR0lOKCJkc2lfYnJpZGdlX3ByZV9lbmFibGUiKTsKLQlyYyA9IGRzaV9kaXNwbGF5X3By ZXBhcmUoY19icmlkZ2UtPmRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslZF0gRFNJ IGRpc3BsYXkgcHJlcGFyZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgY19icmlkZ2UtPmlk LCByYyk7Ci0JCURQVV9BVFJBQ0VfRU5EKCJkc2lfYnJpZGdlX3ByZV9lbmFibGUiKTsKLQkJcmV0 dXJuOwotCX0KLQotCURQVV9BVFJBQ0VfQkVHSU4oImRzaV9kaXNwbGF5X2VuYWJsZSIpOwotCXJj ID0gZHNpX2Rpc3BsYXlfZW5hYmxlKGNfYnJpZGdlLT5kaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJ cHJfZXJyKCJbJWRdIERTSSBkaXNwbGF5IGVuYWJsZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAg ICAgY19icmlkZ2UtPmlkLCByYyk7Ci0JCSh2b2lkKWRzaV9kaXNwbGF5X3VucHJlcGFyZShjX2Jy aWRnZS0+ZGlzcGxheSk7Ci0JfQotCURQVV9BVFJBQ0VfRU5EKCJkc2lfZGlzcGxheV9lbmFibGUi KTsKLQlEUFVfQVRSQUNFX0VORCgiZHNpX2JyaWRnZV9wcmVfZW5hYmxlIik7Ci19Ci0KLXN0YXRp YyB2b2lkIGRzaV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCi17Ci0J aW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2JyaWRnZSAqY19icmlkZ2UgPSB0b19kc2lfYnJpZGdl KGJyaWRnZSk7Ci0KLQlpZiAoIWJyaWRnZSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4i KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChjX2JyaWRnZS0+ZHNpX21vZGUuZHNpX21vZGVfZmxh Z3MgJgotCQkJKERTSV9NT0RFX0ZMQUdfU0VBTUxFU1MgfCBEU0lfTU9ERV9GTEFHX1ZSUikpIHsK LQkJcHJfZGVidWcoIlslZF0gc2VhbWxlc3MgZW5hYmxlXG4iLCBjX2JyaWRnZS0+aWQpOwotCQly ZXR1cm47Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9wb3N0X2VuYWJsZShjX2JyaWRnZS0+ZGlz cGxheSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslZF0gRFNJIGRpc3BsYXkgcG9zdCBlbmFibGVk IGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBjX2JyaWRnZS0+aWQsIHJjKTsKLX0KLQotc3Rh dGljIHZvaWQgZHNpX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCi17 Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2JyaWRnZSAqY19icmlkZ2UgPSB0b19kc2lfYnJp ZGdlKGJyaWRnZSk7Ci0KLQlpZiAoIWJyaWRnZSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1z XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfcHJlX2Rpc2FibGUoY19i cmlkZ2UtPmRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslZF0gRFNJIGRpc3BsYXkg cHJlIGRpc2FibGUgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGNfYnJpZGdlLT5pZCwgcmMp OwotCX0KLX0KLQotc3RhdGljIHZvaWQgZHNpX2JyaWRnZV9wb3N0X2Rpc2FibGUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfYnJpZGdlICpj X2JyaWRnZSA9IHRvX2RzaV9icmlkZ2UoYnJpZGdlKTsKLQotCWlmICghYnJpZGdlKSB7Ci0JCXBy X2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JRFBVX0FUUkFDRV9C RUdJTigiZHNpX2JyaWRnZV9wb3N0X2Rpc2FibGUiKTsKLQlEUFVfQVRSQUNFX0JFR0lOKCJkc2lf ZGlzcGxheV9kaXNhYmxlIik7Ci0JcmMgPSBkc2lfZGlzcGxheV9kaXNhYmxlKGNfYnJpZGdlLT5k aXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJWRdIERTSSBkaXNwbGF5IGRpc2FibGUg ZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGNfYnJpZGdlLT5pZCwgcmMpOwotCQlEUFVfQVRS QUNFX0VORCgiZHNpX2Rpc3BsYXlfZGlzYWJsZSIpOwotCQlyZXR1cm47Ci0JfQotCURQVV9BVFJB Q0VfRU5EKCJkc2lfZGlzcGxheV9kaXNhYmxlIik7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3VucHJl cGFyZShjX2JyaWRnZS0+ZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVkXSBEU0kg ZGlzcGxheSB1bnByZXBhcmUgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGNfYnJpZGdlLT5p ZCwgcmMpOwotCQlEUFVfQVRSQUNFX0VORCgiZHNpX2JyaWRnZV9wb3N0X2Rpc2FibGUiKTsKLQkJ cmV0dXJuOwotCX0KLQlEUFVfQVRSQUNFX0VORCgiZHNpX2JyaWRnZV9wb3N0X2Rpc2FibGUiKTsK LX0KLQotc3RhdGljIHZvaWQgZHNpX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlLAotCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQkJCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQotewotCXN0cnVjdCBkc2lfYnJpZGdlICpj X2JyaWRnZSA9IHRvX2RzaV9icmlkZ2UoYnJpZGdlKTsKLQotCWlmICghYnJpZGdlIHx8ICFtb2Rl IHx8ICFhZGp1c3RlZF9tb2RlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQly ZXR1cm47Ci0JfQotCi0JbWVtc2V0KCYoY19icmlkZ2UtPmRzaV9tb2RlKSwgMHgwLCBzaXplb2Yo c3RydWN0IGRzaV9kaXNwbGF5X21vZGUpKTsKLQljb252ZXJ0X3RvX2RzaV9tb2RlKGFkanVzdGVk X21vZGUsICYoY19icmlkZ2UtPmRzaV9tb2RlKSk7Ci19Ci0KLXN0YXRpYyBib29sIGRzaV9icmlk Z2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAotCQkJCSAgY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqYWRqdXN0ZWRfbW9kZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfYnJpZGdlICpj X2JyaWRnZSA9IHRvX2RzaV9icmlkZ2UoYnJpZGdlKTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9k ZSBkc2lfbW9kZSwgY3VyX2RzaV9tb2RlOwotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGN1cl9t b2RlOwotCi0JaWYgKCFicmlkZ2UgfHwgIW1vZGUgfHwgIWFkanVzdGVkX21vZGUpIHsKLQkJcHJf ZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQljb252ZXJ0 X3RvX2RzaV9tb2RlKG1vZGUsICZkc2lfbW9kZSk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3ZhbGlk YXRlX21vZGUoY19icmlkZ2UtPmRpc3BsYXksICZkc2lfbW9kZSwKLQkJCURTSV9WQUxJREFURV9G TEFHX0FMTE9XX0FESlVTVCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVkXSBtb2RlIGlzIG5v dCB2YWxpZCwgcmM9JWRcbiIsIGNfYnJpZGdlLT5pZCwgcmMpOwotCQlyZXR1cm4gZmFsc2U7Ci0J fQotCi0JaWYgKGJyaWRnZS0+ZW5jb2RlciAmJiBicmlkZ2UtPmVuY29kZXItPmNydGMpIHsKLQot CQljb252ZXJ0X3RvX2RzaV9tb2RlKCZicmlkZ2UtPmVuY29kZXItPmNydGMtPm1vZGUsCi0JCQkJ CQkJJmN1cl9kc2lfbW9kZSk7Ci0JCXJjID0gZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZV92cnIo Y19icmlkZ2UtPmRpc3BsYXksCi0JCQkJCSZjdXJfZHNpX21vZGUsICZkc2lfbW9kZSk7Ci0JCWlm IChyYykKLQkJCXByX2RlYnVnKCJbJXNdIHZyciBtb2RlIG1pc21hdGNoIGZhaWx1cmUgcmM9JWRc biIsCi0JCQkJY19icmlkZ2UtPmRpc3BsYXktPm5hbWUsIHJjKTsKLQotCQljdXJfbW9kZSA9IGJy aWRnZS0+ZW5jb2Rlci0+Y3J0Yy0+bW9kZTsKLQotCQlpZiAoIWRybV9tb2RlX2VxdWFsKCZjdXJf bW9kZSwgYWRqdXN0ZWRfbW9kZSkgJiYKLQkJCSghKGRzaV9tb2RlLmRzaV9tb2RlX2ZsYWdzICYK LQkJCQlEU0lfTU9ERV9GTEFHX1ZSUikpKQotCQkJZHNpX21vZGUuZHNpX21vZGVfZmxhZ3MgfD0g RFNJX01PREVfRkxBR19ETVM7Ci0JfQotCi0JY29udmVydF90b19kcm1fbW9kZSgmZHNpX21vZGUs IGFkanVzdGVkX21vZGUpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLWludCBkc2lfY29ubl9nZXRf bW9kZV9pbmZvKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZSwKLQlzdHJ1 Y3QgbXNtX21vZGVfaW5mbyAqbW9kZV9pbmZvLAotCXUzMiBtYXhfbWl4ZXJfd2lkdGgpCi17Ci0J c3RydWN0IGRzaV9kaXNwbGF5X21vZGUgZHNpX21vZGU7Ci0Jc3RydWN0IGRzaV9tb2RlX2luZm8g KnRpbWluZzsKLQotCWlmICghZHJtX21vZGUgfHwgIW1vZGVfaW5mbykKLQkJcmV0dXJuIC1FSU5W QUw7Ci0KLQljb252ZXJ0X3RvX2RzaV9tb2RlKGRybV9tb2RlLCAmZHNpX21vZGUpOwotCi0JaWYg KCFkc2lfbW9kZS5wcml2X2luZm8pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtc2V0KG1vZGVf aW5mbywgMCwgc2l6ZW9mKCptb2RlX2luZm8pKTsKLQotCXRpbWluZyA9ICZkc2lfbW9kZS50aW1p bmc7Ci0JbW9kZV9pbmZvLT5mcmFtZV9yYXRlID0gZHNpX21vZGUudGltaW5nLnJlZnJlc2hfcmF0 ZTsKLQltb2RlX2luZm8tPnZ0b3RhbCA9IERTSV9WX1RPVEFMKHRpbWluZyk7Ci0JbW9kZV9pbmZv LT5wcmVmaWxsX2xpbmVzID0gZHNpX21vZGUucHJpdl9pbmZvLT5wYW5lbF9wcmVmaWxsX2xpbmVz OwotCW1vZGVfaW5mby0+aml0dGVyX251bWVyID0gZHNpX21vZGUucHJpdl9pbmZvLT5wYW5lbF9q aXR0ZXJfbnVtZXI7Ci0JbW9kZV9pbmZvLT5qaXR0ZXJfZGVub20gPSBkc2lfbW9kZS5wcml2X2lu Zm8tPnBhbmVsX2ppdHRlcl9kZW5vbTsKLQotCW1lbWNweSgmbW9kZV9pbmZvLT50b3BvbG9neSwg JmRzaV9tb2RlLnByaXZfaW5mby0+dG9wb2xvZ3ksCi0JCQlzaXplb2Yoc3RydWN0IG1zbV9kaXNw bGF5X3RvcG9sb2d5KSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fYnJpZGdlX2Z1bmNzIGRzaV9icmlkZ2Vfb3BzID0gewotCS5hdHRhY2ggICAgICAgPSBkc2lf YnJpZGdlX2F0dGFjaCwKLQkubW9kZV9maXh1cCAgID0gZHNpX2JyaWRnZV9tb2RlX2ZpeHVwLAot CS5wcmVfZW5hYmxlICAgPSBkc2lfYnJpZGdlX3ByZV9lbmFibGUsCi0JLmVuYWJsZSAgICAgICA9 IGRzaV9icmlkZ2VfZW5hYmxlLAotCS5kaXNhYmxlICAgICAgPSBkc2lfYnJpZGdlX2Rpc2FibGUs Ci0JLnBvc3RfZGlzYWJsZSA9IGRzaV9icmlkZ2VfcG9zdF9kaXNhYmxlLAotCS5tb2RlX3NldCAg ICAgPSBkc2lfYnJpZGdlX21vZGVfc2V0LAotfTsKLQotaW50IGRzaV9jb25uX3Bvc3RfaW5pdChz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQl2b2lkICppbmZvLAotCQl2b2lkICpk aXNwbGF5KQotewotCXN0cnVjdCBkc2lfZGlzcGxheSAqZHNpX2Rpc3BsYXkgPSBkaXNwbGF5Owot CXN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsOwotCi0JaWYgKCFpbmZvIHx8ICFkc2lfZGlzcGxheSkK LQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLAotCQki ZGlzcGxheSB0eXBlIiwgZHNpX2Rpc3BsYXktPmRpc3BsYXlfdHlwZSk7Ci0KLQlzd2l0Y2ggKGRz aV9kaXNwbGF5LT50eXBlKSB7Ci0JY2FzZSBEU0lfRElTUExBWV9TSU5HTEU6Ci0JCWRwdV9rbXNf aW5mb19hZGRfa2V5c3RyKGluZm8sICJkaXNwbGF5IGNvbmZpZyIsCi0JCQkJCSJzaW5nbGUgZGlz cGxheSIpOwotCQlicmVhazsKLQljYXNlIERTSV9ESVNQTEFZX0VYVF9CUklER0U6Ci0JCWRwdV9r bXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJkaXNwbGF5IGNvbmZpZyIsICJleHQgYnJpZGdlIik7 Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0RJU1BMQVlfU1BMSVQ6Ci0JCWRwdV9rbXNfaW5mb19hZGRf a2V5c3RyKGluZm8sICJkaXNwbGF5IGNvbmZpZyIsCi0JCQkJCSJzcGxpdCBkaXNwbGF5Iik7Ci0J CWJyZWFrOwotCWNhc2UgRFNJX0RJU1BMQVlfU1BMSVRfRVhUX0JSSURHRToKLQkJZHB1X2ttc19p bmZvX2FkZF9rZXlzdHIoaW5mbywgImRpc3BsYXkgY29uZmlnIiwKLQkJCQkJInNwbGl0IGV4dCBi cmlkZ2UiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfZGVidWcoImludmFsaWQgZGlzcGxh eSB0eXBlOiVkXG4iLCBkc2lfZGlzcGxheS0+dHlwZSk7Ci0JCWJyZWFrOwotCX0KLQotCWlmICgh ZHNpX2Rpc3BsYXktPnBhbmVsKSB7Ci0JCXByX2RlYnVnKCJpbnZhbGlkIHBhbmVsIGRhdGFcbiIp OwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlwYW5lbCA9IGRzaV9kaXNwbGF5LT5wYW5lbDsKLQlkcHVf a21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicGFuZWwgbmFtZSIsIHBhbmVsLT5uYW1lKTsKLQot CXN3aXRjaCAocGFuZWwtPnBhbmVsX21vZGUpIHsKLQljYXNlIERTSV9PUF9WSURFT19NT0RFOgot CQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicGFuZWwgbW9kZSIsICJ2aWRlbyIpOwot CQlicmVhazsKLQljYXNlIERTSV9PUF9DTURfTU9ERToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlz dHIoaW5mbywgInBhbmVsIG1vZGUiLCAiY29tbWFuZCIpOwotCQlkcHVfa21zX2luZm9fYWRkX2tl eWludChpbmZvLCAibWRwX3RyYW5zZmVyX3RpbWVfdXMiLAotCQkJCXBhbmVsLT5jbWRfY29uZmln Lm1kcF90cmFuc2Zlcl90aW1lX3VzKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfZGVidWco ImludmFsaWQgcGFuZWwgdHlwZTolZFxuIiwgcGFuZWwtPnBhbmVsX21vZGUpOwotCQlicmVhazsK LQl9Ci0JZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImRmcHMgc3VwcG9ydCIsCi0JCQlw YW5lbC0+ZGZwc19jYXBzLmRmcHNfc3VwcG9ydCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotCi0JaWYg KHBhbmVsLT5kZnBzX2NhcHMuZGZwc19zdXBwb3J0KSB7Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5 aW50KGluZm8sICJtaW5fZnBzIiwKLQkJCXBhbmVsLT5kZnBzX2NhcHMubWluX3JlZnJlc2hfcmF0 ZSk7Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfZnBzIiwKLQkJCXBhbmVs LT5kZnBzX2NhcHMubWF4X3JlZnJlc2hfcmF0ZSk7Ci0JfQotCi0Jc3dpdGNoIChwYW5lbC0+cGh5 X3Byb3BzLnJvdGF0aW9uKSB7Ci0JY2FzZSBEU0lfUEFORUxfUk9UQVRFX05PTkU6Ci0JCWRwdV9r bXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJwYW5lbCBvcmllbnRhdGlvbiIsICJub25lIik7Ci0J CWJyZWFrOwotCWNhc2UgRFNJX1BBTkVMX1JPVEFURV9IX0ZMSVA6Ci0JCWRwdV9rbXNfaW5mb19h ZGRfa2V5c3RyKGluZm8sICJwYW5lbCBvcmllbnRhdGlvbiIsICJob3J6IGZsaXAiKTsKLQkJYnJl YWs7Ci0JY2FzZSBEU0lfUEFORUxfUk9UQVRFX1ZfRkxJUDoKLQkJZHB1X2ttc19pbmZvX2FkZF9r ZXlzdHIoaW5mbywgInBhbmVsIG9yaWVudGF0aW9uIiwgInZlcnQgZmxpcCIpOwotCQlicmVhazsK LQljYXNlIERTSV9QQU5FTF9ST1RBVEVfSFZfRkxJUDoKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlz dHIoaW5mbywgInBhbmVsIG9yaWVudGF0aW9uIiwKLQkJCQkJCQkiaG9yeiAmIHZlcnQgZmxpcCIp OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9kZWJ1ZygiaW52YWxpZCBwYW5lbCByb3RhdGlv bjolZFxuIiwKLQkJCQkJCXBhbmVsLT5waHlfcHJvcHMucm90YXRpb24pOwotCQlicmVhazsKLQl9 Ci0KLQlzd2l0Y2ggKHBhbmVsLT5ibF9jb25maWcudHlwZSkgewotCWNhc2UgRFNJX0JBQ0tMSUdI VF9QV006Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJiYWNrbGlnaHQgdHlwZSIs ICJwd20iKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX1dMRUQ6Ci0JCWRwdV9rbXNf aW5mb19hZGRfa2V5c3RyKGluZm8sICJiYWNrbGlnaHQgdHlwZSIsICJ3bGVkIik7Ci0JCWJyZWFr OwotCWNhc2UgRFNJX0JBQ0tMSUdIVF9EQ1M6Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGlu Zm8sICJiYWNrbGlnaHQgdHlwZSIsICJkY3MiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJf ZGVidWcoImludmFsaWQgcGFuZWwgYmFja2xpZ2h0IHR5cGU6JWRcbiIsCi0JCQkJCQlwYW5lbC0+ YmxfY29uZmlnLnR5cGUpOwotCQlicmVhazsKLQl9Ci0KLWVuZDoKLQlyZXR1cm4gMDsKLX0KLQot ZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBkc2lfY29ubl9kZXRlY3Qoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm4sCi0JCWJvb2wgZm9yY2UsCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0JZW51bSBk cm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247Ci0J c3RydWN0IG1zbV9kaXNwbGF5X2luZm8gaW5mbzsKLQlpbnQgcmM7Ci0KLQlpZiAoIWNvbm4gfHwg IWRpc3BsYXkpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQkvKiBnZXQgZGlzcGxheSBkc2lfaW5mbyAq LwotCW1lbXNldCgmaW5mbywgMHgwLCBzaXplb2YoaW5mbykpOwotCXJjID0gZHNpX2Rpc3BsYXlf Z2V0X2luZm8oJmluZm8sIGRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0 byBnZXQgZGlzcGxheSBpbmZvLCByYz0lZFxuIiwgcmMpOwotCQlyZXR1cm4gY29ubmVjdG9yX3N0 YXR1c19kaXNjb25uZWN0ZWQ7Ci0JfQotCi0JaWYgKGluZm8uY2FwYWJpbGl0aWVzICYgTVNNX0RJ U1BMQVlfQ0FQX0hPVF9QTFVHKQotCQlzdGF0dXMgPSAoaW5mby5pc19jb25uZWN0ZWQgPyBjb25u ZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6Ci0JCQkJCSAgICAgIGNvbm5lY3Rvcl9zdGF0dXNfZGlz Y29ubmVjdGVkKTsKLQllbHNlCi0JCXN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVk OwotCi0JY29ubi0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gaW5mby53aWR0aF9tbTsKLQljb25u LT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gaW5mby5oZWlnaHRfbW07Ci0KLQlyZXR1cm4gc3Rh dHVzOwotfQotCi12b2lkIGRzaV9jb25uZWN0b3JfcHV0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsCi0Jdm9pZCAqZGlzcGxheSkKLXsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqZHJtX21vZGU7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgZHNpX21vZGU7Ci0KLQlp ZiAoIWNvbm5lY3RvciB8fCAhZGlzcGxheSkKLQkJcmV0dXJuOwotCi0JIGxpc3RfZm9yX2VhY2hf ZW50cnkoZHJtX21vZGUsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7Ci0JCWNvbnZlcnRfdG9f ZHNpX21vZGUoZHJtX21vZGUsICZkc2lfbW9kZSk7Ci0JCWRzaV9kaXNwbGF5X3B1dF9tb2RlKGRp c3BsYXksICZkc2lfbW9kZSk7Ci0JfQotfQotCi1pbnQgZHNpX2Nvbm5lY3Rvcl9nZXRfbW9kZXMo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJdm9pZCAqZGlzcGxheSkKLXsKLQl1 MzIgY291bnQgPSAwOwotCXUzMiBzaXplID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAq bW9kZXMgPSBOVUxMOwotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGRybV9tb2RlOwotCWludCBy YywgaTsKLQotCWlmIChkcHVfY29ubmVjdG9yX2dldF9wYW5lbChjb25uZWN0b3IpKSB7Ci0JCS8q Ci0JCSAqIFRPRE86IElmIGRybV9wYW5lbCBpcyBhdHRhY2hlZCwgcXVlcnkgbW9kZXMgZnJvbSB0 aGUgcGFuZWwuCi0JCSAqIFRoaXMgaXMgY29tcGxpY2F0ZWQgaW4gc3BsaXQgZHNpIGNhc2VzIGJl Y2F1c2UgcGFuZWwgaXMgbm90Ci0JCSAqIGF0dGFjaGVkIHRvIGJvdGggY29ubmVjdG9ycy4KLQkJ ICovCi0JCWdvdG8gZW5kOwotCX0KLQlyYyA9IGRzaV9kaXNwbGF5X2dldF9tb2RlX2NvdW50KGRp c3BsYXksICZjb3VudCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBudW0g b2YgbW9kZXMsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0Jc2l6ZSA9IGNv dW50ICogc2l6ZW9mKCptb2Rlcyk7Ci0JbW9kZXMgPSBremFsbG9jKHNpemUsICBHRlBfS0VSTkVM KTsKLQlpZiAoIW1vZGVzKSB7Ci0JCWNvdW50ID0gMDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmMg PSBkc2lfZGlzcGxheV9nZXRfbW9kZXMoZGlzcGxheSwgbW9kZXMpOwotCWlmIChyYykgewotCQlw cl9lcnIoImZhaWxlZCB0byBnZXQgbW9kZXMsIHJjPSVkXG4iLCByYyk7Ci0JCWNvdW50ID0gMDsK LQkJZ290byBlcnJvcjsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbTsKLQotCQltZW1zZXQoJmRybV9tb2RlLCAweDAsIHNp emVvZihkcm1fbW9kZSkpOwotCQljb252ZXJ0X3RvX2RybV9tb2RlKCZtb2Rlc1tpXSwgJmRybV9t b2RlKTsKLQkJbSA9IGRybV9tb2RlX2R1cGxpY2F0ZShjb25uZWN0b3ItPmRldiwgJmRybV9tb2Rl KTsKLQkJaWYgKCFtKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBhZGQgbW9kZSAldXgldVxuIiwK LQkJCSAgICAgICBkcm1fbW9kZS5oZGlzcGxheSwKLQkJCSAgICAgICBkcm1fbW9kZS52ZGlzcGxh eSk7Ci0JCQljb3VudCA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCW0tPndpZHRo X21tID0gY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW07Ci0JCW0tPmhlaWdodF9tbSA9 IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbTsKLQkJZHJtX21vZGVfcHJvYmVkX2Fk ZChjb25uZWN0b3IsIG0pOwotCX0KLWVycm9yOgotCWtmcmVlKG1vZGVzKTsKLWVuZDoKLQlwcl9k ZWJ1ZygiTU9ERSBDT1VOVCA9JWRcblxuIiwgY291bnQpOwotCXJldHVybiBjb3VudDsKLX0KLQot ZW51bSBkcm1fbW9kZV9zdGF0dXMgZHNpX2Nvbm5fbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLAotCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJdm9p ZCAqZGlzcGxheSkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSBkc2lfbW9kZTsKLQlpbnQg cmM7Ci0KLQlpZiAoIWNvbm5lY3RvciB8fCAhbW9kZSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFy YW1zXG4iKTsKLQkJcmV0dXJuIE1PREVfRVJST1I7Ci0JfQotCi0JY29udmVydF90b19kc2lfbW9k ZShtb2RlLCAmZHNpX21vZGUpOwotCi0JcmMgPSBkc2lfZGlzcGxheV92YWxpZGF0ZV9tb2RlKGRp c3BsYXksICZkc2lfbW9kZSwKLQkJCURTSV9WQUxJREFURV9GTEFHX0FMTE9XX0FESlVTVCk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigibW9kZSBub3Qgc3VwcG9ydGVkLCByYz0lZFxuIiwgcmMpOwot CQlyZXR1cm4gTU9ERV9CQUQ7Ci0JfQotCi0JcmV0dXJuIE1PREVfT0s7Ci19Ci0KLWludCBkc2lf Y29ubl9wcmVfa2lja29mZihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQl2b2lk ICpkaXNwbGF5KQotewotCWlmICghY29ubmVjdG9yIHx8ICFkaXNwbGF5KSB7Ci0JCXByX2Vycigi SW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gZHNp X2Rpc3BsYXlfcHJlX2tpY2tvZmYoZGlzcGxheSk7Ci19Ci0KLXZvaWQgZHNpX2Nvbm5fZW5hYmxl X2V2ZW50KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXVpbnQzMl90IGV2ZW50 X2lkeCwgYm9vbCBlbmFibGUsIHZvaWQgKmRpc3BsYXkpCi17Ci0Jc3RydWN0IGRzaV9ldmVudF9j Yl9pbmZvIGV2ZW50X2luZm87Ci0KLQltZW1zZXQoJmV2ZW50X2luZm8sIDAsIHNpemVvZihldmVu dF9pbmZvKSk7Ci0KLQlldmVudF9pbmZvLmV2ZW50X2NiID0gZHB1X2Nvbm5lY3Rvcl90cmlnZ2Vy X2V2ZW50OwotCWV2ZW50X2luZm8uZXZlbnRfdXNyX3B0ciA9IGNvbm5lY3RvcjsKLQotCWRzaV9k aXNwbGF5X2VuYWJsZV9ldmVudChkaXNwbGF5LCBldmVudF9pZHgsICZldmVudF9pbmZvLCBlbmFi bGUpOwotfQotCi1pbnQgZHNpX2Nvbm5fcG9zdF9raWNrb2ZmKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCXN0cnVjdCBk c2lfYnJpZGdlICpjX2JyaWRnZTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSBhZGpfbW9kZTsK LQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwg Km1fY3RybCwgKmN0cmw7Ci0JaW50IGksIHJjID0gMDsKLQotCWlmICghY29ubmVjdG9yIHx8ICFj b25uZWN0b3ItPnN0YXRlLT5iZXN0X2VuY29kZXIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZW5j b2RlciA9IGNvbm5lY3Rvci0+c3RhdGUtPmJlc3RfZW5jb2RlcjsKLQljX2JyaWRnZSA9IHRvX2Rz aV9icmlkZ2UoZW5jb2Rlci0+YnJpZGdlKTsKLQlhZGpfbW9kZSA9IGNfYnJpZGdlLT5kc2lfbW9k ZTsKLQlkaXNwbGF5ID0gY19icmlkZ2UtPmRpc3BsYXk7Ci0KLQlpZiAoYWRqX21vZGUuZHNpX21v ZGVfZmxhZ3MgJiBEU0lfTU9ERV9GTEFHX1ZSUikgewotCQltX2N0cmwgPSAmZGlzcGxheS0+Y3Ry bFtkaXNwbGF5LT5jbGtfbWFzdGVyX2lkeF07Ci0JCXJjID0gZHNpX2N0cmxfdGltaW5nX2RiX3Vw ZGF0ZShtX2N0cmwtPmN0cmwsIGZhbHNlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10g ZmFpbGVkIHRvIGRmcHMgdXBkYXRlICByYz0lZFxuIiwKLQkJCQlkaXNwbGF5LT5uYW1lLCByYyk7 Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qIFVwZGF0ZSB0aGUgcmVzdCBvZiB0aGUg Y29udHJvbGxlcnMgKi8KLQkJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkr KykgewotCQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQkJaWYgKCFjdHJsLT5jdHJsIHx8 IChjdHJsID09IG1fY3RybCkpCi0JCQkJY29udGludWU7Ci0KLQkJCXJjID0gZHNpX2N0cmxfdGlt aW5nX2RiX3VwZGF0ZShjdHJsLT5jdHJsLCBmYWxzZSk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9l cnIoIlslc10gZmFpbGVkIHRvIGRmcHMgdXBkYXRlIHJjPSVkXG4iLAotCQkJCQlkaXNwbGF5LT5u YW1lLCAgcmMpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0KLQkJY19icmlkZ2Ut PmRzaV9tb2RlLmRzaV9tb2RlX2ZsYWdzICY9IH5EU0lfTU9ERV9GTEFHX1ZSUjsKLQl9Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RydWN0IGRzaV9icmlkZ2UgKmRzaV9kcm1fYnJpZGdlX2luaXQoc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCi17Ci0JaW50IHJj ID0gMDsKLQlzdHJ1Y3QgZHNpX2JyaWRnZSAqYnJpZGdlOwotCi0JYnJpZGdlID0ga3phbGxvYyhz aXplb2YoKmJyaWRnZSksIEdGUF9LRVJORUwpOwotCWlmICghYnJpZGdlKSB7Ci0JCXJjID0gLUVO T01FTTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlicmlkZ2UtPmRpc3BsYXkgPSBkaXNwbGF5Owot CWJyaWRnZS0+YmFzZS5mdW5jcyA9ICZkc2lfYnJpZGdlX29wczsKLQlicmlkZ2UtPmJhc2UuZW5j b2RlciA9IGVuY29kZXI7Ci0KLQlyYyA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXIsICZicmlk Z2UtPmJhc2UsIE5VTEwpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBhdHRhY2gg YnJpZGdlLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yX2ZyZWVfYnJpZGdlOwotCX0KLQot CWVuY29kZXItPmJyaWRnZSA9ICZicmlkZ2UtPmJhc2U7Ci0JcmV0dXJuIGJyaWRnZTsKLWVycm9y X2ZyZWVfYnJpZGdlOgotCWtmcmVlKGJyaWRnZSk7Ci1lcnJvcjoKLQlyZXR1cm4gRVJSX1BUUihy Yyk7Ci19Ci0KLXZvaWQgZHNpX2RybV9icmlkZ2VfY2xlYW51cChzdHJ1Y3QgZHNpX2JyaWRnZSAq YnJpZGdlKQotewotCWlmIChicmlkZ2UgJiYgYnJpZGdlLT5iYXNlLmVuY29kZXIpCi0JCWJyaWRn ZS0+YmFzZS5lbmNvZGVyLT5icmlkZ2UgPSBOVUxMOwotCi0Ja2ZyZWUoYnJpZGdlKTsKLX0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2RybS5oIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZHJtLmgKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDM4ZGUzM2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfZHJtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoK LSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5 IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K LSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVmIF9EU0lfRFJNX0hf Ci0jZGVmaW5lIF9EU0lfRFJNX0hfCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1 ZGUgPGRybS9kcm1QLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Ci0jaW5jbHVkZSA8ZHJt L2RybV9jcnRjX2hlbHBlci5oPgotCi0jaW5jbHVkZSAibXNtX2Rydi5oIgotCi0jaW5jbHVkZSAi ZHNpX2Rpc3BsYXkuaCIKLQotc3RydWN0IGRzaV9icmlkZ2UgewotCXN0cnVjdCBkcm1fYnJpZGdl IGJhc2U7Ci0JdTMyIGlkOwotCi0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCXN0cnVj dCBkc2lfZGlzcGxheV9tb2RlIGRzaV9tb2RlOwotfTsKLQotLyoqCi0gKiBkc2lfY29ubl9wb3N0 X2luaXQgLSBjYWxsYmFjayB0byBwZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gc3Rl cHMKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAq IEBpbmZvOiBQb2ludGVyIHRvIGRwdSBjb25uZWN0b3IgaW5mbyBzdHJ1Y3R1cmUKLSAqIEBkaXNw bGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBoYW5kbGUKLSAqIFJldHVybnM6IFplcm8g b24gc3VjY2VzcwotICovCi1pbnQgZHNpX2Nvbm5fcG9zdF9pbml0KHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsCi0JCXZvaWQgKmluZm8sCi0JCXZvaWQgKmRpc3BsYXkpOwotCi0vKioK LSAqIGRzaV9jb25uX2RldGVjdCAtIGNhbGxiYWNrIHRvIGRldGVybWluZSBpZiBjb25uZWN0b3Ig aXMgY29ubmVjdGVkCi0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3Ry dWN0dXJlCi0gKiBAZm9yY2U6IEZvcmNlIGRldGVjdCBzZXR0aW5nIGZyb20gZHJtIGZyYW1ld29y awotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotICogUmV0 dXJuczogQ29ubmVjdG9yICdpcyBjb25uZWN0ZWQnIHN0YXR1cwotICovCi1lbnVtIGRybV9jb25u ZWN0b3Jfc3RhdHVzIGRzaV9jb25uX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiwK LQkJYm9vbCBmb3JjZSwKLQkJdm9pZCAqZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Nvbm5lY3Rv cl9nZXRfbW9kZXMgLSBjYWxsYmFjayB0byBhZGQgZHJtIG1vZGVzIHZpYSBkcm1fbW9kZV9wcm9i ZWRfYWRkKCkKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1 cmUKLSAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBoYW5kbGUKLSAqIFJl dHVybnM6IE51bWJlciBvZiBtb2RlcyBhZGRlZAotICovCi1pbnQgZHNpX2Nvbm5lY3Rvcl9nZXRf bW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJdm9pZCAqZGlzcGxheSk7 Ci0KLS8qKgotICogZHNpX2Nvbm5lY3Rvcl9wdXRfbW9kZXMgLSBjYWxsYmFjayB0byBmcmVlIHVw IGRybSBtb2RlcyBvZiB0aGUgY29ubmVjdG9yCi0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRy bSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRp c3BsYXkgaGFuZGxlCi0gKi8KLXZvaWQgZHNpX2Nvbm5lY3Rvcl9wdXRfbW9kZXMoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQl2b2lkICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lf Y29ubl9nZXRfbW9kZV9pbmZvIC0gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIG1vZGUgc2Vs ZWN0ZWQKLSAqIEBkcm1fbW9kZTogRGlzcGxheSBtb2RlIHNldCBmb3IgdGhlIGRpc3BsYXkKLSAq IEBtb2RlX2luZm86IE91dCBwYXJhbWV0ZXIuIGluZm9ybWF0aW9uIG9mIHRoZSBtb2RlLgotICog QG1heF9taXhlcl93aWR0aDogbWF4IHdpZHRoIHN1cHBvcnRlZCBieSBIVyBsYXllciBtaXhlcgot ICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkc2lfY29ubl9nZXRfbW9kZV9p bmZvKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZSwKLQlzdHJ1Y3QgbXNt X21vZGVfaW5mbyAqbW9kZV9pbmZvLCB1MzIgbWF4X21peGVyX3dpZHRoKTsKLQotLyoqCi0gKiBk c2lfY29ubl9tb2RlX3ZhbGlkIC0gY2FsbGJhY2sgdG8gZGV0ZXJtaW5lIGlmIHNwZWNpZmllZCBt b2RlIGlzIHZhbGlkCi0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3Ry dWN0dXJlCi0gKiBAbW9kZTogUG9pbnRlciB0byBkcm0gbW9kZSBzdHJ1Y3R1cmUKLSAqIEBkaXNw bGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBoYW5kbGUKLSAqIFJldHVybnM6IFZhbGlk aXR5IHN0YXR1cyBmb3Igc3BlY2lmaWVkIG1vZGUKLSAqLwotZW51bSBkcm1fbW9kZV9zdGF0dXMg ZHNpX2Nvbm5fbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJdm9pZCAqZGlzcGxheSk7Ci0KLS8qKgot ICogZHNpX2Nvbm5fZW5hYmxlX2V2ZW50IC0gY2FsbGJhY2sgdG8gbm90aWZ5IERTSSBkcml2ZXIg b2YgZXZlbnQgcmVnaXN0ZXJhdGlvbgotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29u bmVjdG9yIHN0cnVjdHVyZQotICogQGV2ZW50X2lkeDogQ29ubmVjdG9yIGV2ZW50IGluZGV4Ci0g KiBAZW5hYmxlOiBXaGV0aGVyIG9yIG5vdCB0aGUgZXZlbnQgaXMgZW5hYmxlZAotICogQGRpc3Bs YXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotICovCi12b2lkIGRzaV9jb25u X2VuYWJsZV9ldmVudChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQl1aW50MzJf dCBldmVudF9pZHgsIGJvb2wgZW5hYmxlLCB2b2lkICpkaXNwbGF5KTsKLQotc3RydWN0IGRzaV9i cmlkZ2UgKmRzaV9kcm1fYnJpZGdlX2luaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAot CQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIp OwotCi12b2lkIGRzaV9kcm1fYnJpZGdlX2NsZWFudXAoc3RydWN0IGRzaV9icmlkZ2UgKmJyaWRn ZSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfcHJlX2tpY2tvZmYgLSBwcm9ncmFtIGtpY2tvZmYt dGltZSBmZWF0dXJlcwotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0 cnVjdHVyZQotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVy ZQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkc2lfY29ubl9wcmVfa2lj a29mZihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQl2b2lkICpkaXNwbGF5KTsK LQotLyoqCi0gKiBkc2lfZGlzcGxheV9wb3N0X2tpY2tvZmYgLSBwcm9ncmFtIHBvc3Qga2lja29m Zi10aW1lIGZlYXR1cmVzCi0gKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Ig c3RydWN0dXJlCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGRzaV9jb25u X3Bvc3Rfa2lja29mZihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKLQotI2VuZGlm IC8qIF9EU0lfRFJNX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9ody5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfaHcu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUwYTAwMS4uMDAwMDAwMAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9ody5oCisrKyAvZGV2L251bGwKQEAg LTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0j aWZuZGVmIF9EU0lfSFdfSF8KLSNkZWZpbmUgX0RTSV9IV19IXwotI2luY2x1ZGUgPGxpbnV4L2lv Lmg+Ci0KLSNkZWZpbmUgRFNJX1IzMihkc2lfaHcsIG9mZikgcmVhZGxfcmVsYXhlZCgoZHNpX2h3 KS0+YmFzZSArIChvZmYpKQotI2RlZmluZSBEU0lfVzMyKGRzaV9odywgb2ZmLCB2YWwpIFwKLQlk byB7XAotCQlwcl9kZWJ1ZygiW0RTSV8lZF1bJXNdIC0gWzB4JTA4eF1cbiIsIFwKLQkJCShkc2lf aHcpLT5pbmRleCwgI29mZiwgKHVpbnQzMl90KSh2YWwpKTsgXAotCQl3cml0ZWxfcmVsYXhlZCgo dmFsKSwgKGRzaV9odyktPmJhc2UgKyAob2ZmKSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5l IERTSV9NTVNTX01JU0NfUjMyKGRzaV9odywgb2ZmKSBcCi0JcmVhZGxfcmVsYXhlZCgoZHNpX2h3 KS0+bW1zc19taXNjX2Jhc2UgKyAob2ZmKSkKLSNkZWZpbmUgRFNJX01NU1NfTUlTQ19XMzIoZHNp X2h3LCBvZmYsIHZhbCkgXAotCWRvIHtcCi0JCXByX2RlYnVnKCJbRFNJXyVkXVslc10gLSBbMHgl MDh4XVxuIiwgXAotCQkJKGRzaV9odyktPmluZGV4LCAjb2ZmLCB2YWwpOyBcCi0JCXdyaXRlbF9y ZWxheGVkKCh2YWwpLCAoZHNpX2h3KS0+bW1zc19taXNjX2Jhc2UgKyAob2ZmKSk7IFwKLQl9IHdo aWxlICgwKQotCi0jZGVmaW5lIERTSV9ESVNQX0NDX1IzMihkc2lfaHcsIG9mZikgXAotCXJlYWRs X3JlbGF4ZWQoKGRzaV9odyktPmRpc3BfY2NfYmFzZSArIChvZmYpKQotI2RlZmluZSBEU0lfRElT UF9DQ19XMzIoZHNpX2h3LCBvZmYsIHZhbCkgXAotCWRvIHtcCi0JCXByX2RlYnVnKCJbRFNJXyVk XVslc10gLSBbMHglMDh4XVxuIiwgXAotCQkJKGRzaV9odyktPmluZGV4LCAjb2ZmLCB2YWwpOyBc Ci0JCXdyaXRlbF9yZWxheGVkKCh2YWwpLCAoZHNpX2h3KS0+ZGlzcF9jY19iYXNlICsgKG9mZikp OyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBEU0lfUjY0KGRzaV9odywgb2ZmKSByZWFkcV9y ZWxheGVkKChkc2lfaHcpLT5iYXNlICsgKG9mZikpCi0jZGVmaW5lIERTSV9XNjQoZHNpX2h3LCBv ZmYsIHZhbCkgd3JpdGVxX3JlbGF4ZWQoKHZhbCksIChkc2lfaHcpLT5iYXNlICsgKG9mZikpCi0K LSNlbmRpZiAvKiBfRFNJX0hXX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9wYW5lbC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2lu Zy9kc2lfcGFuZWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU3NzdmOC4uMDAw MDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wYW5lbC5jCisr KyAvZGV2L251bGwKQEAgLTEsMzMyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJIm1zbS1kc2ktcGFuZWw6WyVzOiVk XSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNp bmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUg PGxpbnV4L29mX2dwaW8uaD4KLSNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KLQotI2lu Y2x1ZGUgImRzaV9wYW5lbC5oIgotI2luY2x1ZGUgImRzaV9jdHJsX2h3LmgiCi0KLS8qKgotICog dG9wb2xvZ3kgaXMgY3VycmVudGx5IGRlZmluZWQgYnkgYSBzZXQgb2YgZm9sbG93aW5nIDMgdmFs dWVzOgotICogMS4gbnVtIG9mIGxheWVyIG1peGVycwotICogMi4gbnVtIG9mIGNvbXByZXNzaW9u IGVuY29kZXJzCi0gKiAzLiBudW0gb2YgaW50ZXJmYWNlcwotICovCi0jZGVmaW5lIFRPUE9MT0dZ X1NFVF9MRU4gMwotI2RlZmluZSBNQVhfVE9QT0xPR1kgNQotCi0jZGVmaW5lIERTSV9QQU5FTF9E RUZBVUxUX0xBQkVMICAiRGVmYXVsdCBkc2kgcGFuZWwiCi0KLSNkZWZpbmUgREVGQVVMVF9NRFBf VFJBTlNGRVJfVElNRSAxNDAwMAotCi0jZGVmaW5lIERFRkFVTFRfUEFORUxfSklUVEVSX05VTUVS QVRPUgkJMgotI2RlZmluZSBERUZBVUxUX1BBTkVMX0pJVFRFUl9ERU5PTUlOQVRPUgkxCi0jZGVm aW5lIERFRkFVTFRfUEFORUxfSklUVEVSX0FSUkFZX1NJWkUJCTIKLSNkZWZpbmUgTUFYX1BBTkVM X0pJVFRFUgkJMTAKLSNkZWZpbmUgREVGQVVMVF9QQU5FTF9QUkVGSUxMX0xJTkVTCTI1Ci0KLWVu dW0gZHNpX2RzY19yYXRpb190eXBlIHsKLQlEU0NfOEJQQ184QlBQLAotCURTQ18xMEJQQ184QlBQ LAotCURTQ18xMkJQQ184QlBQLAotCURTQ19SQVRJT19UWVBFX01BWAotfTsKLQotc3RhdGljIHUz MiBkc2lfZHNjX3JjX2J1Zl90aHJlc2hbXSA9IHsweDBlLCAweDFjLCAweDJhLCAweDM4LCAweDQ2 LCAweDU0LAotCQkweDYyLCAweDY5LCAweDcwLCAweDc3LCAweDc5LCAweDdiLCAweDdkLCAweDdl fTsKLQotLyoKLSAqIERTQyAxLjEKLSAqIFJhdGUgY29udHJvbCAtIE1pbiBRUCB2YWx1ZXMgZm9y IGVhY2ggcmF0aW8gdHlwZSBpbiBkc2lfZHNjX3JhdGlvX3R5cGUKLSAqLwotc3RhdGljIGNoYXIg ZHNpX2RzY19yY19yYW5nZV9taW5fcXBfMV8xW11bMTVdID0gewotCXswLCAwLCAxLCAxLCAzLCAz LCAzLCAzLCAzLCAzLCA1LCA1LCA1LCA3LCAxM30sCi0JezAsIDQsIDUsIDUsIDcsIDcsIDcsIDcs IDcsIDcsIDksIDksIDksIDExLCAxN30sCi0JezAsIDQsIDksIDksIDExLCAxMSwgMTEsIDExLCAx MSwgMTEsIDEzLCAxMywgMTMsIDE1LCAyMX0sCi0JfTsKLQotLyoKLSAqIERTQyAxLjEgU0NSCi0g KiBSYXRlIGNvbnRyb2wgLSBNaW4gUVAgdmFsdWVzIGZvciBlYWNoIHJhdGlvIHR5cGUgaW4gZHNp X2RzY19yYXRpb190eXBlCi0gKi8KLXN0YXRpYyBjaGFyIGRzaV9kc2NfcmNfcmFuZ2VfbWluX3Fw XzFfMV9zY3IxW11bMTVdID0gewotCXswLCAwLCAxLCAxLCAzLCAzLCAzLCAzLCAzLCAzLCA1LCA1 LCA1LCA5LCAxMn0sCi0JezAsIDQsIDUsIDUsIDcsIDcsIDcsIDcsIDcsIDcsIDksIDksIDksIDEz LCAxNn0sCi0JezAsIDQsIDksIDksIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDEzLCAxMywgMTMs IDE3LCAyMH0sCi0JfTsKLQotLyoKLSAqIERTQyAxLjEKLSAqIFJhdGUgY29udHJvbCAtIE1heCBR UCB2YWx1ZXMgZm9yIGVhY2ggcmF0aW8gdHlwZSBpbiBkc2lfZHNjX3JhdGlvX3R5cGUKLSAqLwot c3RhdGljIGNoYXIgZHNpX2RzY19yY19yYW5nZV9tYXhfcXBfMV8xW11bMTVdID0gewotCXs0LCA0 LCA1LCA2LCA3LCA3LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTMsIDE1fSwKLQl7OCwgOCwg OSwgMTAsIDExLCAxMSwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE3LCAxOX0sCi0JezEy LCAxMiwgMTMsIDE0LCAxNSwgMTUsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMSwgMjN9 LAotCX07Ci0KLS8qCi0gKiBEU0MgMS4xIFNDUgotICogUmF0ZSBjb250cm9sIC0gTWF4IFFQIHZh bHVlcyBmb3IgZWFjaCByYXRpbyB0eXBlIGluIGRzaV9kc2NfcmF0aW9fdHlwZQotICovCi1zdGF0 aWMgY2hhciBkc2lfZHNjX3JjX3JhbmdlX21heF9xcF8xXzFfc2NyMVtdWzE1XSA9IHsKLQl7NCwg NCwgNSwgNiwgNywgNywgNywgOCwgOSwgMTAsIDEwLCAxMSwgMTEsIDEyLCAxM30sCi0JezgsIDgs IDksIDEwLCAxMSwgMTEsIDExLCAxMiwgMTMsIDE0LCAxNCwgMTUsIDE1LCAxNiwgMTd9LAotCXsx MiwgMTIsIDEzLCAxNCwgMTUsIDE1LCAxNSwgMTYsIDE3LCAxOCwgMTgsIDE5LCAxOSwgMjAsIDIx fSwKLQl9OwotCi0vKgotICogRFNDIDEuMSBhbmQgRFNDIDEuMSBTQ1IKLSAqIFJhdGUgY29udHJv bCAtIGJwZyBvZmZzZXQgdmFsdWVzCi0gKi8KLXN0YXRpYyBjaGFyIGRzaV9kc2NfcmNfcmFuZ2Vf YnBnX29mZnNldFtdID0gezIsIDAsIDAsIC0yLCAtNCwgLTYsIC04LCAtOCwKLQkJLTgsIC0xMCwg LTEwLCAtMTIsIC0xMiwgLTEyLCAtMTJ9OwotCi1pbnQgZHNpX2RzY19jcmVhdGVfcHBzX2J1Zl9j bWQoc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MsIGNoYXIgKmJ1ZiwKLQkJCQlpbnQg cHBzX2lkKQotewotCWNoYXIgKmJwOwotCWNoYXIgZGF0YTsKLQlpbnQgaSwgYnBwOwotCWNoYXIg KmRiZ2JwOwotCi0JZGJnYnAgPSBidWY7Ci0JYnAgPSBidWY7Ci0JLyogRmlyc3QgNyBieXRlcyBh cmUgY21kIGhlYWRlciAqLwotCSpicCsrID0gMHgwQTsKLQkqYnArKyA9IDE7Ci0JKmJwKysgPSAw OwotCSpicCsrID0gMDsKLQkqYnArKyA9IDEwOwotCSpicCsrID0gMDsKLQkqYnArKyA9IDEyODsK LQotCSpicCsrID0gKGRzYy0+dmVyc2lvbiAmIDB4ZmYpOwkJLyogcHBzMCAqLwotCSpicCsrID0g KHBwc19pZCAmIDB4ZmYpOwkJLyogcHBzMSAqLwotCWJwKys7CQkJCQkvKiBwcHMyLCByZXNlcnZl ZCAqLwotCi0JZGF0YSA9IGRzYy0+bGluZV9idWZfZGVwdGggJiAweDBmOwotCWRhdGEgfD0gKChk c2MtPmJwYyAmIDB4ZikgPDwgNCk7Ci0JKmJwKysgPSBkYXRhOwkJCQkvKiBwcHMzICovCi0KLQli cHAgPSBkc2MtPmJwcDsKLQlicHAgPDw9IDQ7CQkJCS8qIDQgZnJhY3Rpb24gYml0cyAqLwotCWRh dGEgPSAoYnBwID4+IDgpOwotCWRhdGEgJj0gMHgwMzsJCQkJLyogdXBwZXIgdHdvIGJpdHMgKi8K LQlkYXRhIHw9ICgoZHNjLT5ibG9ja19wcmVkX2VuYWJsZSAmIDB4MSkgPDwgNSk7Ci0JZGF0YSB8 PSAoKGRzYy0+Y29udmVydF9yZ2IgJiAweDEpIDw8IDQpOwotCWRhdGEgfD0gKChkc2MtPmVuYWJs ZV80MjIgJiAweDEpIDw8IDMpOwotCWRhdGEgfD0gKChkc2MtPnZicl9lbmFibGUgJiAweDEpIDw8 IDIpOwotCSpicCsrID0gZGF0YTsJCQkJLyogcHBzNCAqLwotCSpicCsrID0gKGJwcCAmIDB4ZmYp OwkJCS8qIHBwczUgKi8KLQotCSpicCsrID0gKChkc2MtPnBpY19oZWlnaHQgPj4gOCkgJiAweGZm KTsgLyogcHBzNiAqLwotCSpicCsrID0gKGRzYy0+cGljX2hlaWdodCAmIDB4MGZmKTsJLyogcHBz NyAqLwotCSpicCsrID0gKChkc2MtPnBpY193aWR0aCA+PiA4KSAmIDB4ZmYpOwkvKiBwcHM4ICov Ci0JKmJwKysgPSAoZHNjLT5waWNfd2lkdGggJiAweDBmZik7CS8qIHBwczkgKi8KLQotCSpicCsr ID0gKChkc2MtPnNsaWNlX2hlaWdodCA+PiA4KSAmIDB4ZmYpOy8qIHBwczEwICovCi0JKmJwKysg PSAoZHNjLT5zbGljZV9oZWlnaHQgJiAweDBmZik7CS8qIHBwczExICovCi0JKmJwKysgPSAoKGRz Yy0+c2xpY2Vfd2lkdGggPj4gOCkgJiAweGZmKTsgLyogcHBzMTIgKi8KLQkqYnArKyA9IChkc2Mt PnNsaWNlX3dpZHRoICYgMHgwZmYpOwkvKiBwcHMxMyAqLwotCi0JKmJwKysgPSAoKGRzYy0+Y2h1 bmtfc2l6ZSA+PiA4KSAmIDB4ZmYpOy8qIHBwczE0ICovCi0JKmJwKysgPSAoZHNjLT5jaHVua19z aXplICYgMHgwZmYpOwkvKiBwcHMxNSAqLwotCi0JKmJwKysgPSAoZHNjLT5pbml0aWFsX3htaXRf ZGVsYXkgPj4gOCkgJiAweDM7IC8qIHBwczE2LCBiaXQgMCwgMSAqLwotCSpicCsrID0gKGRzYy0+ aW5pdGlhbF94bWl0X2RlbGF5ICYgMHhmZik7LyogcHBzMTcgKi8KLQotCSpicCsrID0gKChkc2Mt PmluaXRpYWxfZGVjX2RlbGF5ID4+IDgpICYgMHhmZik7IC8qIHBwczE4ICovCi0JKmJwKysgPSAo ZHNjLT5pbml0aWFsX2RlY19kZWxheSAmIDB4ZmYpOy8qIHBwczE5ICovCi0KLQlicCsrOwkJCQkJ LyogcHBzMjAsIHJlc2VydmVkICovCi0KLQkqYnArKyA9IChkc2MtPmluaXRpYWxfc2NhbGVfdmFs dWUgJiAweDNmKTsgLyogcHBzMjEgKi8KLQotCSpicCsrID0gKChkc2MtPnNjYWxlX2luY3JlbWVu dF9pbnRlcnZhbCA+PiA4KSAmIDB4ZmYpOyAvKiBwcHMyMiAqLwotCSpicCsrID0gKGRzYy0+c2Nh bGVfaW5jcmVtZW50X2ludGVydmFsICYgMHhmZik7IC8qIHBwczIzICovCi0KLQkqYnArKyA9ICgo ZHNjLT5zY2FsZV9kZWNyZW1lbnRfaW50ZXJ2YWwgPj4gOCkgJiAweGYpOyAvKiBwcHMyNCAqLwot CSpicCsrID0gKGRzYy0+c2NhbGVfZGVjcmVtZW50X2ludGVydmFsICYgMHgwZmYpOy8qIHBwczI1 ICovCi0KLQlicCsrOwkJCQkJLyogcHBzMjYsIHJlc2VydmVkICovCi0KLQkqYnArKyA9IChkc2Mt PmZpcnN0X2xpbmVfYnBnX29mZnNldCAmIDB4MWYpOy8qIHBwczI3ICovCi0KLQkqYnArKyA9ICgo ZHNjLT5uZmxfYnBnX29mZnNldCA+PiA4KSAmIDB4ZmYpOy8qIHBwczI4ICovCi0JKmJwKysgPSAo ZHNjLT5uZmxfYnBnX29mZnNldCAmIDB4MGZmKTsJLyogcHBzMjkgKi8KLQkqYnArKyA9ICgoZHNj LT5zbGljZV9icGdfb2Zmc2V0ID4+IDgpICYgMHhmZik7LyogcHBzMzAgKi8KLQkqYnArKyA9IChk c2MtPnNsaWNlX2JwZ19vZmZzZXQgJiAweDBmZik7LyogcHBzMzEgKi8KLQotCSpicCsrID0gKChk c2MtPmluaXRpYWxfb2Zmc2V0ID4+IDgpICYgMHhmZik7LyogcHBzMzIgKi8KLQkqYnArKyA9IChk c2MtPmluaXRpYWxfb2Zmc2V0ICYgMHgwZmYpOwkvKiBwcHMzMyAqLwotCi0JKmJwKysgPSAoKGRz Yy0+ZmluYWxfb2Zmc2V0ID4+IDgpICYgMHhmZik7LyogcHBzMzQgKi8KLQkqYnArKyA9IChkc2Mt PmZpbmFsX29mZnNldCAmIDB4MGZmKTsJLyogcHBzMzUgKi8KLQotCSpicCsrID0gKGRzYy0+bWlu X3FwX2ZsYXRuZXNzICYgMHgxZik7CS8qIHBwczM2ICovCi0JKmJwKysgPSAoZHNjLT5tYXhfcXBf ZmxhdG5lc3MgJiAweDFmKTsJLyogcHBzMzcgKi8KLQotCSpicCsrID0gKChkc2MtPnJjX21vZGVs X3NpemUgPj4gOCkgJiAweGZmKTsvKiBwcHMzOCAqLwotCSpicCsrID0gKGRzYy0+cmNfbW9kZWxf c2l6ZSAmIDB4MGZmKTsJLyogcHBzMzkgKi8KLQotCSpicCsrID0gKGRzYy0+ZWRnZV9mYWN0b3Ig JiAweDBmKTsJLyogcHBzNDAgKi8KLQotCSpicCsrID0gKGRzYy0+cXVhbnRfaW5jcl9saW1pdDAg JiAweDFmKTsJLyogcHBzNDEgKi8KLQkqYnArKyA9IChkc2MtPnF1YW50X2luY3JfbGltaXQxICYg MHgxZik7CS8qIHBwczQyICovCi0KLQlkYXRhID0gKChkc2MtPnRndF9vZmZzZXRfaGkgJiAweGYp IDw8IDQpOwotCWRhdGEgfD0gKGRzYy0+dGd0X29mZnNldF9sbyAmIDB4MGYpOwotCSpicCsrID0g ZGF0YTsJCQkJLyogcHBzNDMgKi8KLQotCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKQotCQkqYnAr KyA9IChkc2MtPmJ1Zl90aHJlc2hbaV0gJiAweGZmKTsgLyogcHBzNDQgLSBwcHM1NyAqLwotCi0J Zm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsJCS8qIHBwczU4IC0gcHBzODcgKi8KLQkJZGF0YSA9 IChkc2MtPnJhbmdlX21pbl9xcFtpXSAmIDB4MWYpOwotCQlkYXRhIDw8PSAzOwotCQlkYXRhIHw9 ICgoZHNjLT5yYW5nZV9tYXhfcXBbaV0gPj4gMikgJiAweDA3KTsKLQkJKmJwKysgPSBkYXRhOwot CQlkYXRhID0gKGRzYy0+cmFuZ2VfbWF4X3FwW2ldICYgMHgwMyk7Ci0JCWRhdGEgPDw9IDY7Ci0J CWRhdGEgfD0gKGRzYy0+cmFuZ2VfYnBnX29mZnNldFtpXSAmIDB4M2YpOwotCQkqYnArKyA9IGRh dGE7Ci0JfQotCi0JcmV0dXJuIDEyODsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfdnJlZ19n ZXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlz dHJ1Y3QgcmVndWxhdG9yICp2cmVnID0gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPCBwYW5lbC0+ cG93ZXJfaW5mby5jb3VudDsgaSsrKSB7Ci0JCXZyZWcgPSBkZXZtX3JlZ3VsYXRvcl9nZXQocGFu ZWwtPnBhcmVudCwKLQkJCQkJICBwYW5lbC0+cG93ZXJfaW5mby52cmVnc1tpXS52cmVnX25hbWUp OwotCQlyYyA9IFBUUl9SRVQodnJlZyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQg dG8gZ2V0ICVzIHJlZ3VsYXRvclxuIiwKLQkJCSAgICAgICBwYW5lbC0+cG93ZXJfaW5mby52cmVn c1tpXS52cmVnX25hbWUpOwotCQkJZ290byBlcnJvcl9wdXQ7Ci0JCX0KLQkJcGFuZWwtPnBvd2Vy X2luZm8udnJlZ3NbaV0udnJlZyA9IHZyZWc7Ci0JfQotCi0JcmV0dXJuIHJjOwotZXJyb3JfcHV0 OgotCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkgewotCQlkZXZtX3JlZ3VsYXRvcl9wdXQo cGFuZWwtPnBvd2VyX2luZm8udnJlZ3NbaV0udnJlZyk7Ci0JCXBhbmVsLT5wb3dlcl9pbmZvLnZy ZWdzW2ldLnZyZWcgPSBOVUxMOwotCX0KLQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKLX0KLQotc3Rh dGljIGludCBkc2lfcGFuZWxfdnJlZ19wdXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0J aW50IHJjID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IHBhbmVsLT5wb3dlcl9pbmZvLmNvdW50 IC0gMTsgaSA+PSAwOyBpLS0pCi0JCWRldm1fcmVndWxhdG9yX3B1dChwYW5lbC0+cG93ZXJfaW5m by52cmVnc1tpXS52cmVnKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFu ZWxfZ3Bpb19yZXF1ZXN0KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7 Ci0Jc3RydWN0IGRzaV9wYW5lbF9yZXNldF9jb25maWcgKnJfY29uZmlnID0gJnBhbmVsLT5yZXNl dF9jb25maWc7Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChyX2NvbmZpZy0+cmVzZXRfZ3BpbykpIHsK LQkJcmMgPSBncGlvX3JlcXVlc3Qocl9jb25maWctPnJlc2V0X2dwaW8sICJyZXNldF9ncGlvIik7 Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJyZXF1ZXN0IGZvciByZXNldF9ncGlvIGZhaWxlZCwg cmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlpZiAoZ3Bpb19pc192 YWxpZChyX2NvbmZpZy0+ZGlzcF9lbl9ncGlvKSkgewotCQlyYyA9IGdwaW9fcmVxdWVzdChyX2Nv bmZpZy0+ZGlzcF9lbl9ncGlvLCAiZGlzcF9lbl9ncGlvIik7Ci0JCWlmIChyYykgewotCQkJcHJf ZXJyKCJyZXF1ZXN0IGZvciBkaXNwX2VuX2dwaW8gZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQkJ Z290byBlcnJvcl9yZWxlYXNlX3Jlc2V0OwotCQl9Ci0JfQotCi0JaWYgKGdwaW9faXNfdmFsaWQo cGFuZWwtPmJsX2NvbmZpZy5lbl9ncGlvKSkgewotCQlyYyA9IGdwaW9fcmVxdWVzdChwYW5lbC0+ YmxfY29uZmlnLmVuX2dwaW8sICJia2x0X2VuX2dwaW8iKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9l cnIoInJlcXVlc3QgZm9yIGJrbHRfZW5fZ3BpbyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCQln b3RvIGVycm9yX3JlbGVhc2VfZGlzcF9lbjsKLQkJfQotCX0KLQotCWlmIChncGlvX2lzX3ZhbGlk KHJfY29uZmlnLT5sY2RfbW9kZV9zZWxfZ3BpbykpIHsKLQkJcmMgPSBncGlvX3JlcXVlc3Qocl9j b25maWctPmxjZF9tb2RlX3NlbF9ncGlvLCAibW9kZV9ncGlvIik7Ci0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJyZXF1ZXN0IGZvciBtb2RlX2dwaW8gZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQkJ Z290byBlcnJvcl9yZWxlYXNlX21vZGVfc2VsOwotCQl9Ci0JfQotCi0JZ290byBlcnJvcjsKLWVy cm9yX3JlbGVhc2VfbW9kZV9zZWw6Ci0JaWYgKGdwaW9faXNfdmFsaWQocGFuZWwtPmJsX2NvbmZp Zy5lbl9ncGlvKSkKLQkJZ3Bpb19mcmVlKHBhbmVsLT5ibF9jb25maWcuZW5fZ3Bpbyk7Ci1lcnJv cl9yZWxlYXNlX2Rpc3BfZW46Ci0JaWYgKGdwaW9faXNfdmFsaWQocl9jb25maWctPmRpc3BfZW5f Z3BpbykpCi0JCWdwaW9fZnJlZShyX2NvbmZpZy0+ZGlzcF9lbl9ncGlvKTsKLWVycm9yX3JlbGVh c2VfcmVzZXQ6Ci0JaWYgKGdwaW9faXNfdmFsaWQocl9jb25maWctPnJlc2V0X2dwaW8pKQotCQln cGlvX2ZyZWUocl9jb25maWctPnJlc2V0X2dwaW8pOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQot Ci1zdGF0aWMgaW50IGRzaV9wYW5lbF9ncGlvX3JlbGVhc2Uoc3RydWN0IGRzaV9wYW5lbCAqcGFu ZWwpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX3BhbmVsX3Jlc2V0X2NvbmZpZyAqcl9j b25maWcgPSAmcGFuZWwtPnJlc2V0X2NvbmZpZzsKLQotCWlmIChncGlvX2lzX3ZhbGlkKHJfY29u ZmlnLT5yZXNldF9ncGlvKSkKLQkJZ3Bpb19mcmVlKHJfY29uZmlnLT5yZXNldF9ncGlvKTsKLQot CWlmIChncGlvX2lzX3ZhbGlkKHJfY29uZmlnLT5kaXNwX2VuX2dwaW8pKQotCQlncGlvX2ZyZWUo cl9jb25maWctPmRpc3BfZW5fZ3Bpbyk7Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChwYW5lbC0+Ymxf Y29uZmlnLmVuX2dwaW8pKQotCQlncGlvX2ZyZWUocGFuZWwtPmJsX2NvbmZpZy5lbl9ncGlvKTsK LQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcubGNkX21vZGVfc2VsX2dw aW8pKQotCQlncGlvX2ZyZWUocGFuZWwtPnJlc2V0X2NvbmZpZy5sY2RfbW9kZV9zZWxfZ3Bpbyk7 Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3Jlc2V0KHN0cnVjdCBk c2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9wYW5lbF9yZXNl dF9jb25maWcgKnJfY29uZmlnID0gJnBhbmVsLT5yZXNldF9jb25maWc7Ci0JaW50IGk7Ci0KLQlp ZiAoZ3Bpb19pc192YWxpZChwYW5lbC0+cmVzZXRfY29uZmlnLmRpc3BfZW5fZ3BpbykpIHsKLQkJ cmMgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQocGFuZWwtPnJlc2V0X2NvbmZpZy5kaXNwX2VuX2dw aW8sIDEpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigidW5hYmxlIHRvIHNldCBkaXIgZm9yIGRp c3AgZ3BpbyByYz0lZFxuIiwgcmMpOwotCQkJZ290byBleGl0OwotCQl9Ci0JfQotCi0JaWYgKHJf Y29uZmlnLT5jb3VudCkgewotCQlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChyX2NvbmZpZy0+ cmVzZXRfZ3BpbywKLQkJCXJfY29uZmlnLT5zZXF1ZW5jZVswXS5sZXZlbCk7Ci0JCWlmIChyYykg ewotCQkJcHJfZXJyKCJ1bmFibGUgdG8gc2V0IGRpciBmb3IgcnN0IGdwaW8gcmM9JWRcbiIsIHJj KTsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCByX2NvbmZpZy0+ Y291bnQ7IGkrKykgewotCQlncGlvX3NldF92YWx1ZShyX2NvbmZpZy0+cmVzZXRfZ3BpbywKLQkJ CSAgICAgICByX2NvbmZpZy0+c2VxdWVuY2VbaV0ubGV2ZWwpOwotCi0KLQkJaWYgKHJfY29uZmln LT5zZXF1ZW5jZVtpXS5zbGVlcF9tcykKLQkJCXVzbGVlcF9yYW5nZShyX2NvbmZpZy0+c2VxdWVu Y2VbaV0uc2xlZXBfbXMgKiAxMDAwLAotCQkJCSAgICAgcl9jb25maWctPnNlcXVlbmNlW2ldLnNs ZWVwX21zICogMTAwMCk7Ci0JfQotCi0JaWYgKGdwaW9faXNfdmFsaWQocGFuZWwtPmJsX2NvbmZp Zy5lbl9ncGlvKSkgewotCQlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwYW5lbC0+YmxfY29u ZmlnLmVuX2dwaW8sIDEpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoInVuYWJsZSB0byBzZXQgZGly IGZvciBia2x0IGdwaW8gcmM9JWRcbiIsIHJjKTsKLQl9Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChw YW5lbC0+cmVzZXRfY29uZmlnLmxjZF9tb2RlX3NlbF9ncGlvKSkgewotCQlib29sIG91dCA9IHRy dWU7Ci0KLQkJaWYgKChwYW5lbC0+cmVzZXRfY29uZmlnLm1vZGVfc2VsX3N0YXRlID09IE1PREVf U0VMX0RVQUxfUE9SVCkKLQkJCQl8fCAocGFuZWwtPnJlc2V0X2NvbmZpZy5tb2RlX3NlbF9zdGF0 ZQotCQkJCQk9PSBNT0RFX0dQSU9fTE9XKSkKLQkJCW91dCA9IGZhbHNlOwotCQllbHNlIGlmICgo cGFuZWwtPnJlc2V0X2NvbmZpZy5tb2RlX3NlbF9zdGF0ZQotCQkJCT09IE1PREVfU0VMX1NJTkdM RV9QT1JUKSB8fAotCQkJCShwYW5lbC0+cmVzZXRfY29uZmlnLm1vZGVfc2VsX3N0YXRlCi0JCQkJ ID09IE1PREVfR1BJT19ISUdIKSkKLQkJCW91dCA9IHRydWU7Ci0KLQkJcmMgPSBncGlvX2RpcmVj dGlvbl9vdXRwdXQoCi0JCQlwYW5lbC0+cmVzZXRfY29uZmlnLmxjZF9tb2RlX3NlbF9ncGlvLCBv dXQpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoInVuYWJsZSB0byBzZXQgZGlyIGZvciBtb2RlIGdw aW8gcmM9JWRcbiIsIHJjKTsKLQl9Ci1leGl0OgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCBkc2lfcGFuZWxfc2V0X3BpbmN0cmxfc3RhdGUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsIGJv b2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IHBpbmN0cmxfc3RhdGUgKnN0YXRl OwotCi0JaWYgKGVuYWJsZSkKLQkJc3RhdGUgPSBwYW5lbC0+cGluY3RybC5hY3RpdmU7Ci0JZWxz ZQotCQlzdGF0ZSA9IHBhbmVsLT5waW5jdHJsLnN1c3BlbmQ7Ci0KLQlyYyA9IHBpbmN0cmxfc2Vs ZWN0X3N0YXRlKHBhbmVsLT5waW5jdHJsLnBpbmN0cmwsIHN0YXRlKTsKLQlpZiAocmMpCi0JCXBy X2VycigiWyVzXSBmYWlsZWQgdG8gc2V0IHBpbiBzdGF0ZSwgcmM9JWRcbiIsIHBhbmVsLT5uYW1l LAotCQkgICAgICAgcmMpOwotCi0JcmV0dXJuIHJjOwotfQotCi0KLXN0YXRpYyBpbnQgZHNpX3Bh bmVsX3Bvd2VyX29uKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0K LQlyYyA9IGRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRvcigmcGFuZWwtPnBvd2VyX2luZm8sIHRydWUp OwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSB2cmVncywgcmM9 JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlyYyA9IGRzaV9w YW5lbF9zZXRfcGluY3RybF9zdGF0ZShwYW5lbCwgdHJ1ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gc2V0IHBpbmN0cmwsIHJjPSVkXG4iLCBwYW5lbC0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yX2Rpc2FibGVfdnJlZ3M7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfcmVz ZXQocGFuZWwpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHJlc2V0IHBh bmVsLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9kaXNhYmxlX2dw aW87Ci0JfQotCi0JZ290byBleGl0OwotCi1lcnJvcl9kaXNhYmxlX2dwaW86Ci0JaWYgKGdwaW9f aXNfdmFsaWQocGFuZWwtPnJlc2V0X2NvbmZpZy5kaXNwX2VuX2dwaW8pKQotCQlncGlvX3NldF92 YWx1ZShwYW5lbC0+cmVzZXRfY29uZmlnLmRpc3BfZW5fZ3BpbywgMCk7Ci0KLQlpZiAoZ3Bpb19p c192YWxpZChwYW5lbC0+YmxfY29uZmlnLmVuX2dwaW8pKQotCQlncGlvX3NldF92YWx1ZShwYW5l bC0+YmxfY29uZmlnLmVuX2dwaW8sIDApOwotCi0JKHZvaWQpZHNpX3BhbmVsX3NldF9waW5jdHJs X3N0YXRlKHBhbmVsLCBmYWxzZSk7Ci0KLWVycm9yX2Rpc2FibGVfdnJlZ3M6Ci0JKHZvaWQpZHNp X3B3cl9lbmFibGVfcmVndWxhdG9yKCZwYW5lbC0+cG93ZXJfaW5mbywgZmFsc2UpOwotCi1leGl0 OgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcG93ZXJfb2ZmKHN0cnVj dCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoZ3Bpb19pc192YWxp ZChwYW5lbC0+cmVzZXRfY29uZmlnLmRpc3BfZW5fZ3BpbykpCi0JCWdwaW9fc2V0X3ZhbHVlKHBh bmVsLT5yZXNldF9jb25maWcuZGlzcF9lbl9ncGlvLCAwKTsKLQotCWlmIChncGlvX2lzX3ZhbGlk KHBhbmVsLT5yZXNldF9jb25maWcucmVzZXRfZ3BpbykpCi0JCWdwaW9fc2V0X3ZhbHVlKHBhbmVs LT5yZXNldF9jb25maWcucmVzZXRfZ3BpbywgMCk7Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChwYW5l bC0+cmVzZXRfY29uZmlnLmxjZF9tb2RlX3NlbF9ncGlvKSkKLQkJZ3Bpb19zZXRfdmFsdWUocGFu ZWwtPnJlc2V0X2NvbmZpZy5sY2RfbW9kZV9zZWxfZ3BpbywgMCk7Ci0KLQlyYyA9IGRzaV9wYW5l bF9zZXRfcGluY3RybF9zdGF0ZShwYW5lbCwgZmFsc2UpOwotCWlmIChyYykgewotCQlwcl9lcnIo Ilslc10gZmFpbGVkIHNldCBwaW5jdHJsIHN0YXRlLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsCi0J CSAgICAgICByYyk7Ci0JfQotCi0JcmMgPSBkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoJnBhbmVs LT5wb3dlcl9pbmZvLCBmYWxzZSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv IGVuYWJsZSB2cmVncywgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7Ci0KLQlyZXR1cm4gcmM7 Ci19Ci1zdGF0aWMgaW50IGRzaV9wYW5lbF90eF9jbWRfc2V0KHN0cnVjdCBkc2lfcGFuZWwgKnBh bmVsLAotCQkJCWVudW0gZHNpX2NtZF9zZXRfdHlwZSB0eXBlKQotewotCWludCByYyA9IDAsIGkg PSAwOwotCXNzaXplX3QgbGVuOwotCXN0cnVjdCBkc2lfY21kX2Rlc2MgKmNtZHM7Ci0JdTMyIGNv dW50OwotCWVudW0gZHNpX2NtZF9zZXRfc3RhdGUgc3RhdGU7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5 X21vZGUgKm1vZGU7Ci0JY29uc3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzICpvcHMgPSBwYW5l bC0+aG9zdC0+b3BzOwotCi0JaWYgKCFwYW5lbCB8fCAhcGFuZWwtPmN1cl9tb2RlKQotCQlyZXR1 cm4gLUVJTlZBTDsKLQotCW1vZGUgPSBwYW5lbC0+Y3VyX21vZGU7Ci0KLQljbWRzID0gbW9kZS0+ cHJpdl9pbmZvLT5jbWRfc2V0c1t0eXBlXS5jbWRzOwotCWNvdW50ID0gbW9kZS0+cHJpdl9pbmZv LT5jbWRfc2V0c1t0eXBlXS5jb3VudDsKLQlzdGF0ZSA9IG1vZGUtPnByaXZfaW5mby0+Y21kX3Nl dHNbdHlwZV0uc3RhdGU7Ci0KLQlpZiAoY291bnQgPT0gMCkgewotCQlwcl9kZWJ1ZygiWyVzXSBO byBjb21tYW5kcyB0byBiZSBzZW50IGZvciBzdGF0ZSglZClcbiIsCi0JCQkgcGFuZWwtPm5hbWUs IHR5cGUpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr KSB7Ci0JCS8qIFRPRE86ICBoYW5kbGUgbGFzdCBjb21tYW5kICovCi0JCWlmIChzdGF0ZSA9PSBE U0lfQ01EX1NFVF9TVEFURV9MUCkKLQkJCWNtZHMtPm1zZy5mbGFncyB8PSBNSVBJX0RTSV9NU0df VVNFX0xQTTsKLQotCQlsZW4gPSBvcHMtPnRyYW5zZmVyKHBhbmVsLT5ob3N0LCAmY21kcy0+bXNn KTsKLQkJaWYgKGxlbiA8IDApIHsKLQkJCXJjID0gbGVuOwotCQkJcHJfZXJyKCJmYWlsZWQgdG8g c2V0IGNtZHMoJWQpLCByYz0lZFxuIiwgdHlwZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQot CQlpZiAoY21kcy0+cG9zdF93YWl0X21zKQotCQkJbXNsZWVwKGNtZHMtPnBvc3Rfd2FpdF9tcyk7 Ci0JCWNtZHMrKzsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNp X3BhbmVsX3BpbmN0cmxfZGVpbml0KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCBy YyA9IDA7Ci0KLQlkZXZtX3BpbmN0cmxfcHV0KHBhbmVsLT5waW5jdHJsLnBpbmN0cmwpOwotCi0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9waW5jdHJsX2luaXQoc3RydWN0 IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCS8qIFRPRE86ICBwaW5jdHJs IGlzIGRlZmluZWQgaW4gZHNpIGR0IG5vZGUgKi8KLQlwYW5lbC0+cGluY3RybC5waW5jdHJsID0g ZGV2bV9waW5jdHJsX2dldChwYW5lbC0+cGFyZW50KTsKLQlpZiAoSVNfRVJSX09SX05VTEwocGFu ZWwtPnBpbmN0cmwucGluY3RybCkpIHsKLQkJcmMgPSBQVFJfRVJSKHBhbmVsLT5waW5jdHJsLnBp bmN0cmwpOwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgcGluY3RybCwgcmM9JWRcbiIsIHJjKTsK LQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwYW5lbC0+cGluY3RybC5hY3RpdmUgPSBwaW5jdHJsX2xv b2t1cF9zdGF0ZShwYW5lbC0+cGluY3RybC5waW5jdHJsLAotCQkJCQkJICAgICAgICJwYW5lbF9h Y3RpdmUiKTsKLQlpZiAoSVNfRVJSX09SX05VTEwocGFuZWwtPnBpbmN0cmwuYWN0aXZlKSkgewot CQlyYyA9IFBUUl9FUlIocGFuZWwtPnBpbmN0cmwuYWN0aXZlKTsKLQkJcHJfZXJyKCJmYWlsZWQg dG8gZ2V0IHBpbmN0cmwgYWN0aXZlIHN0YXRlLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9y OwotCX0KLQotCXBhbmVsLT5waW5jdHJsLnN1c3BlbmQgPQotCQlwaW5jdHJsX2xvb2t1cF9zdGF0 ZShwYW5lbC0+cGluY3RybC5waW5jdHJsLCAicGFuZWxfc3VzcGVuZCIpOwotCi0JaWYgKElTX0VS Ul9PUl9OVUxMKHBhbmVsLT5waW5jdHJsLnN1c3BlbmQpKSB7Ci0JCXJjID0gUFRSX0VSUihwYW5l bC0+cGluY3RybC5zdXNwZW5kKTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHBpbmN0cmwgc3Vz cGVuZCBzdGF0ZSwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgot CXJldHVybiByYzsKLX0KLQotI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCi1zdGF0aWMgaW50 IGRzaV9wYW5lbF9sZWRfYmxfcmVnaXN0ZXIoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkJ c3RydWN0IGRzaV9iYWNrbGlnaHRfY29uZmlnICpibCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JbGVk X3RyaWdnZXJfcmVnaXN0ZXJfc2ltcGxlKCJia2wtdHJpZ2dlciIsICZibC0+d2xlZCk7Ci0KLQkv KiBMRUQgQVBJcyBkb24ndCB0ZWxsIHVzIGRpcmVjdGx5IHdoZXRoZXIgYSBjbGFzZHB1diBoYXMg eWV0Ci0JICogYmVlbiByZWdpc3RlcmVkIHRvIHNlcnZpY2UgdGhpcyB0cmlnZ2VyLiBVbnRpbCBj bGFzZHB1diBpcwotCSAqIHJlZ2lzdGVyZWQsIGNhbGxpbmcgbGVkX3RyaWdnZXIgaGFzIG5vIGVm ZmVjdCwgYW5kIGRvZXNuJ3QKLQkgKiBmYWlsLiBDbGFzZHB1dnMgYXJlIGFzc29jaWF0ZWQgd2l0 aCBhbnkgcmVnaXN0ZXJlZCB0cmlnZ2VycwotCSAqIHdoZW4gdGhleSBkbyByZWdpc3RlciwgYnV0 IHRoYXQgaXMgdG9vIGxhdGUgZm9yIEZCQ29uLgotCSAqIENoZWNrIHRoZSBjZGV2IGxpc3QgZGly ZWN0bHkgYW5kIGRlZmVyIGlmIGFwcHJvcHJpYXRlLgotCSAqLwotCWlmICghYmwtPndsZWQpIHsK LQkJcHJfZXJyKCJbJXNdIGJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkXG4iLCBwYW5lbC0+ bmFtZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQl9IGVsc2UgewotCQlyZWFkX2xvY2soJmJsLT53bGVk LT5sZWRkZXZfbGlzdF9sb2NrKTsKLQkJaWYgKGxpc3RfZW1wdHkoJmJsLT53bGVkLT5sZWRfY2Rl dnMpKQotCQkJcmMgPSAtRVBST0JFX0RFRkVSOwotCQlyZWFkX3VubG9jaygmYmwtPndsZWQtPmxl ZGRldl9saXN0X2xvY2spOwotCi0JCWlmIChyYykgewotCQkJcHJfaW5mbygiWyVzXSBiYWNrbGln aHQgJXMgbm90IHJlYWR5LCBkZWZlciBwcm9iZVxuIiwKLQkJCQlwYW5lbC0+bmFtZSwgYmwtPnds ZWQtPm5hbWUpOwotCQkJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUoYmwtPndsZWQpOwot CQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2xl ZF9ibF9yZWdpc3RlcihzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCQlzdHJ1Y3QgZHNpX2Jh Y2tsaWdodF9jb25maWcgKmJsKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBp bnQgZHNpX3BhbmVsX3VwZGF0ZV9iYWNrbGlnaHQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0J dTMyIGJsX2x2bCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRz aTsKLQotCWlmICghcGFuZWwgfHwgKGJsX2x2bCA+IDB4ZmZmZikpIHsKLQkJcHJfZXJyKCJpbnZh bGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRzaSA9ICZwYW5lbC0+ bWlwaV9kZXZpY2U7Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlyYyA9 IG1pcGlfZHNpX2Rjc19zZXRfZGlzcGxheV9icmlnaHRuZXNzKGRzaSwgYmxfbHZsKTsKLQlpZiAo cmMgPCAwKQotCQlwcl9lcnIoImZhaWxlZCB0byB1cGRhdGUgZGNzIGJhY2tsaWdodDolZFxuIiwg YmxfbHZsKTsKLQotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiBy YzsKLX0KLQotaW50IGRzaV9wYW5lbF9zZXRfYmFja2xpZ2h0KHN0cnVjdCBkc2lfcGFuZWwgKnBh bmVsLCB1MzIgYmxfbHZsKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9iYWNrbGlnaHRf Y29uZmlnICpibCA9ICZwYW5lbC0+YmxfY29uZmlnOwotCi0JcHJfZGVidWcoImJhY2tsaWdodCB0 eXBlOiVkIGx2bDolZFxuIiwgYmwtPnR5cGUsIGJsX2x2bCk7Ci0Jc3dpdGNoIChibC0+dHlwZSkg ewotCWNhc2UgRFNJX0JBQ0tMSUdIVF9XTEVEOgotCQlsZWRfdHJpZ2dlcl9ldmVudChibC0+d2xl ZCwgYmxfbHZsKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX0RDUzoKLQkJZHNpX3Bh bmVsX3VwZGF0ZV9iYWNrbGlnaHQocGFuZWwsIGJsX2x2bCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6 Ci0JCXByX2VycigiQmFja2xpZ2h0IHR5cGUoJWQpIG5vdCBzdXBwb3J0ZWRcbiIsIGJsLT50eXBl KTsKLQkJcmMgPSAtRU5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50 IGRzaV9wYW5lbF9ibF9yZWdpc3RlcihzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQg cmMgPSAwOwotCXN0cnVjdCBkc2lfYmFja2xpZ2h0X2NvbmZpZyAqYmwgPSAmcGFuZWwtPmJsX2Nv bmZpZzsKLQotCXN3aXRjaCAoYmwtPnR5cGUpIHsKLQljYXNlIERTSV9CQUNLTElHSFRfV0xFRDoK LQkJcmMgPSBkc2lfcGFuZWxfbGVkX2JsX3JlZ2lzdGVyKHBhbmVsLCBibCk7Ci0JCWJyZWFrOwot CWNhc2UgRFNJX0JBQ0tMSUdIVF9EQ1M6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByX2Vycigi QmFja2xpZ2h0IHR5cGUoJWQpIG5vdCBzdXBwb3J0ZWRcbiIsIGJsLT50eXBlKTsKLQkJcmMgPSAt RU5PVFNVUFA7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0K LXN0YXRpYyBpbnQgZHNpX3BhbmVsX2JsX3VucmVnaXN0ZXIoc3RydWN0IGRzaV9wYW5lbCAqcGFu ZWwpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25maWcgKmJsID0g JnBhbmVsLT5ibF9jb25maWc7Ci0KLQlzd2l0Y2ggKGJsLT50eXBlKSB7Ci0JY2FzZSBEU0lfQkFD S0xJR0hUX1dMRUQ6Ci0JCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKGJsLT53bGVkKTsK LQkJYnJlYWs7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX0RDUzoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoK LQkJcHJfZXJyKCJCYWNrbGlnaHQgdHlwZSglZCkgbm90IHN1cHBvcnRlZFxuIiwgYmwtPnR5cGUp OwotCQlyYyA9IC1FTk9UU1VQUDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCXJldHVy biByYzsKLX0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX3RpbWluZyhzdHJ1Y3QgZHNpX21v ZGVfaW5mbyAqbW9kZSwKLQkJCQkgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlp bnQgcmMgPSAwOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxt ZHNzLWRzaS1wYW5lbC1mcmFtZXJhdGUiLAotCQkJCSAgJm1vZGUtPnJlZnJlc2hfcmF0ZSk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS1wYW5lbC1m cmFtZXJhdGUsIHJjPSVkXG4iLAotCQkgICAgICAgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQot CXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktcGFuZWwt d2lkdGgiLAotCQkJCSAgJm1vZGUtPmhfYWN0aXZlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJm YWlsZWQgdG8gcmVhZCBxY29tLG1kc3MtZHNpLXBhbmVsLXdpZHRoLCByYz0lZFxuIiwgcmMpOwot CQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwg InFjb20sbWRzcy1kc2ktaC1mcm9udC1wb3JjaCIsCi0JCQkJICAmbW9kZS0+aF9mcm9udF9wb3Jj aCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS1o LWZyb250LXBvcmNoLCByYz0lZFxuIiwKLQkJICAgICAgIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLWgt YmFjay1wb3JjaCIsCi0JCQkJICAmbW9kZS0+aF9iYWNrX3BvcmNoKTsKLQlpZiAocmMpIHsKLQkJ cHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBxY29tLG1kc3MtZHNpLWgtYmFjay1wb3JjaCwgcmM9JWRc biIsCi0JCSAgICAgICByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1oLXB1bHNlLXdpZHRoIiwKLQkJCQkg ICZtb2RlLT5oX3N5bmNfd2lkdGgpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBy ZWFkIHFjb20sbWRzcy1kc2ktaC1wdWxzZS13aWR0aCwgcmM9JWRcbiIsCi0JCSAgICAgICByYyk7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2Rl LCAicWNvbSxtZHNzLWRzaS1oLXN5bmMtc2tldyIsCi0JCQkJICAmbW9kZS0+aF9za2V3KTsKLQlp ZiAocmMpCi0JCXByX2VycigicWNvbSxtZHNzLWRzaS1oLXN5bmMtc2tldyBpcyBub3QgZGVmaW5l ZCwgcmM9JWRcbiIsIHJjKTsKLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwg InFjb20sbWRzcy1kc2ktcGFuZWwtaGVpZ2h0IiwKLQkJCQkgICZtb2RlLT52X2FjdGl2ZSk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS1wYW5lbC1o ZWlnaHQsIHJjPSVkXG4iLAotCQkgICAgICAgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJj ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktdi1iYWNrLXBv cmNoIiwKLQkJCQkgICZtb2RlLT52X2JhY2tfcG9yY2gpOwotCWlmIChyYykgewotCQlwcl9lcnIo ImZhaWxlZCB0byByZWFkIHFjb20sbWRzcy1kc2ktdi1iYWNrLXBvcmNoLCByYz0lZFxuIiwKLQkJ ICAgICAgIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRf dTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXYtZnJvbnQtcG9yY2giLAotCQkJCSAgJm1vZGUt PnZfZnJvbnRfcG9yY2gpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIHFj b20sbWRzcy1kc2ktdi1iYWNrLXBvcmNoLCByYz0lZFxuIiwKLQkJICAgICAgIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29t LG1kc3MtZHNpLXYtcHVsc2Utd2lkdGgiLAotCQkJCSAgJm1vZGUtPnZfc3luY193aWR0aCk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS12LXB1bHNl LXdpZHRoLCByYz0lZFxuIiwKLQkJICAgICAgIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVy cm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfcGl4ZWxf Zm9ybWF0KHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpob3N0LAotCQkJCQlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm9mX25vZGUsCi0JCQkJCWNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0g MDsKLQl1MzIgYnBwID0gMDsKLQllbnVtIGRzaV9waXhlbF9mb3JtYXQgZm10OwotCWNvbnN0IGNo YXIgKnBhY2tpbmc7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29t LG1kc3MtZHNpLWJwcCIsICZicHApOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVk IHRvIHJlYWQgcWNvbSxtZHNzLWRzaS1icHAsIHJjPSVkXG4iLAotCQkgICAgICAgbmFtZSwgcmMp OwotCQlyZXR1cm4gcmM7Ci0JfQotCi0Jc3dpdGNoIChicHApIHsKLQljYXNlIDM6Ci0JCWZtdCA9 IERTSV9QSVhFTF9GT1JNQVRfUkdCMTExOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCWZtdCA9IERT SV9QSVhFTF9GT1JNQVRfUkdCMzMyOwotCQlicmVhazsKLQljYXNlIDEyOgotCQlmbXQgPSBEU0lf UElYRUxfRk9STUFUX1JHQjQ0NDsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJZm10ID0gRFNJX1BJ WEVMX0ZPUk1BVF9SR0I1NjU7Ci0JCWJyZWFrOwotCWNhc2UgMTg6Ci0JCWZtdCA9IERTSV9QSVhF TF9GT1JNQVRfUkdCNjY2OwotCQlicmVhazsKLQljYXNlIDI0OgotCWRlZmF1bHQ6Ci0JCWZtdCA9 IERTSV9QSVhFTF9GT1JNQVRfUkdCODg4OwotCQlicmVhazsKLQl9Ci0KLQlpZiAoZm10ID09IERT SV9QSVhFTF9GT1JNQVRfUkdCNjY2KSB7Ci0JCXBhY2tpbmcgPSBvZl9nZXRfcHJvcGVydHkob2Zf bm9kZSwKLQkJCQkJICAicWNvbSxtZHNzLWRzaS1waXhlbC1wYWNraW5nIiwKLQkJCQkJICBOVUxM KTsKLQkJaWYgKHBhY2tpbmcgJiYgIXN0cmNtcChwYWNraW5nLCAibG9vc2UiKSkKLQkJCWZtdCA9 IERTSV9QSVhFTF9GT1JNQVRfUkdCNjY2X0xPT1NFOwotCX0KLQotCWhvc3QtPmRzdF9mb3JtYXQg PSBmbXQ7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9sYW5l X3N0YXRlcyhzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAqaG9zdCwKLQkJCQkgICAgICAgc3Ry dWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lKQot ewotCWludCByYyA9IDA7Ci0JYm9vbCBsYW5lX2VuYWJsZWQ7Ci0KLQlsYW5lX2VuYWJsZWQgPSBv Zl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJICAgICJxY29tLG1kc3MtZHNpLWxh bmUtMC1zdGF0ZSIpOwotCWhvc3QtPmRhdGFfbGFuZXMgfD0gKGxhbmVfZW5hYmxlZCA/IERTSV9E QVRBX0xBTkVfMCA6IDApOwotCi0JbGFuZV9lbmFibGVkID0gb2ZfcHJvcGVydHlfcmVhZF9ib29s KG9mX25vZGUsCi0JCQkJCSAgICAgInFjb20sbWRzcy1kc2ktbGFuZS0xLXN0YXRlIik7Ci0JaG9z dC0+ZGF0YV9sYW5lcyB8PSAobGFuZV9lbmFibGVkID8gRFNJX0RBVEFfTEFORV8xIDogMCk7Ci0K LQlsYW5lX2VuYWJsZWQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJICAg ICJxY29tLG1kc3MtZHNpLWxhbmUtMi1zdGF0ZSIpOwotCWhvc3QtPmRhdGFfbGFuZXMgfD0gKGxh bmVfZW5hYmxlZCA/IERTSV9EQVRBX0xBTkVfMiA6IDApOwotCi0JbGFuZV9lbmFibGVkID0gb2Zf cHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0JCQkJCSAgICAgInFjb20sbWRzcy1kc2ktbGFu ZS0zLXN0YXRlIik7Ci0JaG9zdC0+ZGF0YV9sYW5lcyB8PSAobGFuZV9lbmFibGVkID8gRFNJX0RB VEFfTEFORV8zIDogMCk7Ci0KLQlpZiAoaG9zdC0+ZGF0YV9sYW5lcyA9PSAwKSB7Ci0JCXByX2Vy cigiWyVzXSBObyBkYXRhIGxhbmVzIGFyZSBlbmFibGVkLCByYz0lZFxuIiwgbmFtZSwgcmMpOwot CQlyYyA9IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9w YW5lbF9wYXJzZV9jb2xvcl9zd2FwKHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpob3N0LAot CQkJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQkgICAgICBjb25zdCBj aGFyICpuYW1lKQotewotCWludCByYyA9IDA7Ci0JY29uc3QgY2hhciAqc3dhcF9tb2RlOwotCi0J c3dhcF9tb2RlID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUsICJxY29tLG1kc3MtZHNpLWNvbG9y LW9yZGVyIiwgTlVMTCk7Ci0JaWYgKHN3YXBfbW9kZSkgewotCQlpZiAoIXN0cmNtcChzd2FwX21v ZGUsICJyZ2Jfc3dhcF9yZ2IiKSkgewotCQkJaG9zdC0+c3dhcF9tb2RlID0gRFNJX0NPTE9SX1NX QVBfUkdCOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3dhcF9tb2RlLCAicmdiX3N3YXBfcmJnIikp IHsKLQkJCWhvc3QtPnN3YXBfbW9kZSA9IERTSV9DT0xPUl9TV0FQX1JCRzsKLQkJfSBlbHNlIGlm ICghc3RyY21wKHN3YXBfbW9kZSwgInJnYl9zd2FwX2JyZyIpKSB7Ci0JCQlob3N0LT5zd2FwX21v ZGUgPSBEU0lfQ09MT1JfU1dBUF9CUkc7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChzd2FwX21vZGUs ICJyZ2Jfc3dhcF9ncmIiKSkgewotCQkJaG9zdC0+c3dhcF9tb2RlID0gRFNJX0NPTE9SX1NXQVBf R1JCOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3dhcF9tb2RlLCAicmdiX3N3YXBfZ2JyIikpIHsK LQkJCWhvc3QtPnN3YXBfbW9kZSA9IERTSV9DT0xPUl9TV0FQX0dCUjsKLQkJfSBlbHNlIHsKLQkJ CXByX2VycigiWyVzXSBVbnJlY29nbml6ZWQgY29sb3Igb3JkZXItJXNcbiIsCi0JCQkgICAgICAg bmFtZSwgc3dhcF9tb2RlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCX0gZWxzZSB7Ci0JCXBy X2RlYnVnKCJbJXNdIEZhbGxpbmcgYmFjayB0byBkZWZhdWx0IGNvbG9yIG9yZGVyXG4iLCBuYW1l KTsKLQkJaG9zdC0+c3dhcF9tb2RlID0gRFNJX0NPTE9SX1NXQVBfUkdCOwotCX0KLQotCS8qIGJp dCBzd2FwIG9uIGNvbG9yIGNoYW5uZWwgaXMgbm90IGRlZmluZWQgaW4gZHQgKi8KLQlob3N0LT5i aXRfc3dhcF9yZWQgPSBmYWxzZTsKLQlob3N0LT5iaXRfc3dhcF9ncmVlbiA9IGZhbHNlOwotCWhv c3QtPmJpdF9zd2FwX2JsdWUgPSBmYWxzZTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQg ZHNpX3BhbmVsX3BhcnNlX3RyaWdnZXJzKHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpob3N0 LAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsCi0JCQkJICAgIGNvbnN0IGNo YXIgKm5hbWUpCi17Ci0JY29uc3QgY2hhciAqdHJpZzsKLQlpbnQgcmMgPSAwOwotCi0JdHJpZyA9 IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1tZHAtdHJpZ2dlciIsIE5V TEwpOwotCWlmICh0cmlnKSB7Ci0JCWlmICghc3RyY21wKHRyaWcsICJub25lIikpIHsKLQkJCWhv c3QtPm1kcF9jbWRfdHJpZ2dlciA9IERTSV9UUklHR0VSX05PTkU7Ci0JCX0gZWxzZSBpZiAoIXN0 cmNtcCh0cmlnLCAidHJpZ2dlcl90ZSIpKSB7Ci0JCQlob3N0LT5tZHBfY21kX3RyaWdnZXIgPSBE U0lfVFJJR0dFUl9URTsKLQkJfSBlbHNlIGlmICghc3RyY21wKHRyaWcsICJ0cmlnZ2VyX3N3Iikp IHsKLQkJCWhvc3QtPm1kcF9jbWRfdHJpZ2dlciA9IERTSV9UUklHR0VSX1NXOwotCQl9IGVsc2Ug aWYgKCFzdHJjbXAodHJpZywgInRyaWdnZXJfc3dfdGUiKSkgewotCQkJaG9zdC0+bWRwX2NtZF90 cmlnZ2VyID0gRFNJX1RSSUdHRVJfU1dfVEU7Ci0JCX0gZWxzZSB7Ci0JCQlwcl9lcnIoIlslc10g VW5yZWNvZ25pemVkIG1kcCB0cmlnZ2VyIHR5cGUgKCVzKVxuIiwKLQkJCSAgICAgICBuYW1lLCB0 cmlnKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCi0JfSBlbHNlIHsKLQkJcHJfZGVidWcoIlsl c10gRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgTURQIHRyaWdnZXJcbiIsCi0JCQkgbmFtZSk7Ci0J CWhvc3QtPm1kcF9jbWRfdHJpZ2dlciA9IERTSV9UUklHR0VSX1NXOwotCX0KLQotCXRyaWcgPSBv Zl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktZG1hLXRyaWdnZXIiLCBOVUxM KTsKLQlpZiAodHJpZykgewotCQlpZiAoIXN0cmNtcCh0cmlnLCAibm9uZSIpKSB7Ci0JCQlob3N0 LT5kbWFfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9OT05FOwotCQl9IGVsc2UgaWYgKCFzdHJj bXAodHJpZywgInRyaWdnZXJfdGUiKSkgewotCQkJaG9zdC0+ZG1hX2NtZF90cmlnZ2VyID0gRFNJ X1RSSUdHRVJfVEU7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0cmlnLCAidHJpZ2dlcl9zdyIpKSB7 Ci0JCQlob3N0LT5kbWFfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9TVzsKLQkJfSBlbHNlIGlm ICghc3RyY21wKHRyaWcsICJ0cmlnZ2VyX3N3X3Nlb2YiKSkgewotCQkJaG9zdC0+ZG1hX2NtZF90 cmlnZ2VyID0gRFNJX1RSSUdHRVJfU1dfU0VPRjsKLQkJfSBlbHNlIGlmICghc3RyY21wKHRyaWcs ICJ0cmlnZ2VyX3N3X3RlIikpIHsKLQkJCWhvc3QtPmRtYV9jbWRfdHJpZ2dlciA9IERTSV9UUklH R0VSX1NXX1RFOwotCQl9IGVsc2UgewotCQkJcHJfZXJyKCJbJXNdIFVucmVjb2duaXplZCBtZHAg dHJpZ2dlciB0eXBlICglcylcbiIsCi0JCQkgICAgICAgbmFtZSwgdHJpZyk7Ci0JCQlyYyA9IC1F SU5WQUw7Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCJbJXNdIEZhbGxpbmcgYmFjayB0 byBkZWZhdWx0IE1EUCB0cmlnZ2VyXG4iLCBuYW1lKTsKLQkJaG9zdC0+ZG1hX2NtZF90cmlnZ2Vy ID0gRFNJX1RSSUdHRVJfU1c7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9u b2RlLCAicWNvbSxtZHNzLWRzaS10ZS1waW4tc2VsZWN0IiwKLQkJCSZob3N0LT50ZV9tb2RlKTsK LQlpZiAocmMpIHsKLQkJcHJfd2FybigiWyVzXSBmYWxsYmFjayB0byBkZWZhdWx0IHRlLXBpbi1z ZWxlY3RcbiIsIG5hbWUpOwotCQlob3N0LT50ZV9tb2RlID0gMTsKLQkJcmMgPSAwOwotCX0KLQot CXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfbWlzY19ob3N0X2Nv bmZpZyhzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAqaG9zdCwKLQkJCQkJICAgIHN0cnVjdCBk ZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JdTMy IHZhbCA9IDA7Ci0JaW50IHJjID0gMDsKLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zf bm9kZSwgInFjb20sbWRzcy1kc2ktdC1jbGstcG9zdCIsICZ2YWwpOwotCWlmIChyYykgewotCQlw cl9kZWJ1ZygiWyVzXSBGYWxsYmFjayB0byBkZWZhdWx0IHRfY2xrX3Bvc3QgdmFsdWVcbiIsIG5h bWUpOwotCQlob3N0LT50X2Nsa19wb3N0ID0gMHgwMzsKLQl9IGVsc2UgewotCQlob3N0LT50X2Ns a19wb3N0ID0gdmFsOwotCQlwcl9kZWJ1ZygiWyVzXSB0X2Nsa19wb3N0ID0gJWRcbiIsIG5hbWUs IHZhbCk7Ci0JfQotCi0JdmFsID0gMDsKLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25v ZGUsICJxY29tLG1kc3MtZHNpLXQtY2xrLXByZSIsICZ2YWwpOwotCWlmIChyYykgewotCQlwcl9k ZWJ1ZygiWyVzXSBGYWxsYmFjayB0byBkZWZhdWx0IHRfY2xrX3ByZSB2YWx1ZVxuIiwgbmFtZSk7 Ci0JCWhvc3QtPnRfY2xrX3ByZSA9IDB4MjQ7Ci0JfSBlbHNlIHsKLQkJaG9zdC0+dF9jbGtfcHJl ID0gdmFsOwotCQlwcl9kZWJ1ZygiWyVzXSB0X2Nsa19wcmUgPSAlZFxuIiwgbmFtZSwgdmFsKTsK LQl9Ci0KLQlob3N0LT5pZ25vcmVfcnhfZW90ID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25v ZGUsCi0JCQkJCQkicWNvbSxtZHNzLWRzaS1yeC1lb3QtaWdub3JlIik7Ci0KLQlob3N0LT5hcHBl bmRfdHhfZW90ID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0JCQkJCQkicWNvbSxt ZHNzLWRzaS10eC1lb3QtYXBwZW5kIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBk c2lfcGFuZWxfcGFyc2VfaG9zdF9jb25maWcoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkJ ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0J cmMgPSBkc2lfcGFuZWxfcGFyc2VfcGl4ZWxfZm9ybWF0KCZwYW5lbC0+aG9zdF9jb25maWcsIG9m X25vZGUsCi0JCQkJCSAgcGFuZWwtPm5hbWUpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10g ZmFpbGVkIHRvIGdldCBwaXhlbCBmb3JtYXQsIHJjPSVkXG4iLAotCQlwYW5lbC0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX2xhbmVfc3RhdGVz KCZwYW5lbC0+aG9zdF9jb25maWcsIG9mX25vZGUsCi0JCQkJCSBwYW5lbC0+bmFtZSk7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcGFyc2UgbGFuZSBzdGF0ZXMsIHJjPSVk XG4iLAotCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQly YyA9IGRzaV9wYW5lbF9wYXJzZV9jb2xvcl9zd2FwKCZwYW5lbC0+aG9zdF9jb25maWcsIG9mX25v ZGUsCi0JCQkJCXBhbmVsLT5uYW1lKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxl ZCB0byBwYXJzZSBjb2xvciBzd2FwIGNvbmZpZywgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+ bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX3Ry aWdnZXJzKCZwYW5lbC0+aG9zdF9jb25maWcsIG9mX25vZGUsCi0JCQkJICAgICAgcGFuZWwtPm5h bWUpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHBhcnNlIHRyaWdnZXJz LCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfbWlzY19ob3N0X2NvbmZpZygmcGFuZWwtPmhvc3Rf Y29uZmlnLCBvZl9ub2RlLAotCQkJCQkgICAgICBwYW5lbC0+bmFtZSk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiWyVzXSBmYWlsZWQgdG8gcGFyc2UgbWlzYyBob3N0IGNvbmZpZywgcmM9JWRcbiIs Ci0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6 Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9kZnBzX2NhcHMo c3RydWN0IGRzaV9kZnBzX2NhcGFiaWxpdGllcyAqZGZwc19jYXBzLAotCQkJCSAgICAgc3RydWN0 IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlp bnQgcmMgPSAwOwotCWJvb2wgc3VwcG9ydGVkID0gZmFsc2U7Ci0JY29uc3QgY2hhciAqdHlwZTsK LQl1MzIgdmFsID0gMDsKLQotCXN1cHBvcnRlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9u b2RlLAotCQkJCQkicWNvbSxtZHNzLWRzaS1wYW4tZW5hYmxlLWR5bmFtaWMtZnBzIik7Ci0KLQlp ZiAoIXN1cHBvcnRlZCkgewotCQlwcl9kZWJ1ZygiWyVzXSBERlBTIGlzIG5vdCBzdXBwb3J0ZWRc biIsIG5hbWUpOwotCQlkZnBzX2NhcHMtPmRmcHNfc3VwcG9ydCA9IGZhbHNlOwotCX0gZWxzZSB7 Ci0KLQkJdHlwZSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLAotCQkJCSAgICAgICAicWNvbSxt ZHNzLWRzaS1wYW4tZnBzLXVwZGF0ZSIsCi0JCQkJICAgICAgIE5VTEwpOwotCQlpZiAoIXR5cGUp IHsKLQkJCXByX2VycigiWyVzXSBkZnBzIHR5cGUgbm90IGRlZmluZWRcbiIsIG5hbWUpOwotCQkJ cmMgPSAtRUlOVkFMOwotCQkJZ290byBlcnJvcjsKLQkJfSBlbHNlIGlmICghc3RyY21wKHR5cGUs ICJkZnBzX3N1c3BlbmRfcmVzdW1lX21vZGUiKSkgewotCQkJZGZwc19jYXBzLT50eXBlID0gRFNJ X0RGUFNfU1VTUEVORF9SRVNVTUU7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCAiZGZwc19p bW1lZGlhdGVfY2xrX21vZGUiKSkgewotCQkJZGZwc19jYXBzLT50eXBlID0gRFNJX0RGUFNfSU1N RURJQVRFX0NMSzsKLQkJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsICJkZnBzX2ltbWVkaWF0ZV9w b3JjaF9tb2RlX2hmcCIpKSB7Ci0JCQlkZnBzX2NhcHMtPnR5cGUgPSBEU0lfREZQU19JTU1FRElB VEVfSEZQOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgImRmcHNfaW1tZWRpYXRlX3BvcmNo X21vZGVfdmZwIikpIHsKLQkJCWRmcHNfY2Fwcy0+dHlwZSA9IERTSV9ERlBTX0lNTUVESUFURV9W RlA7Ci0JCX0gZWxzZSB7Ci0JCQlwcl9lcnIoIlslc10gZGZwcyB0eXBlIGlzIG5vdCByZWNvZ25p emVkXG4iLCBuYW1lKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQot CQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsCi0JCQkJCSAgInFjb20sbWRzcy1k c2ktbWluLXJlZnJlc2gtcmF0ZSIsCi0JCQkJCSAgJnZhbCk7Ci0JCWlmIChyYykgewotCQkJcHJf ZXJyKCJbJXNdIE1pbiByZWZyZXNoIHJhdGUgaXMgbm90IGRlZmluZWRcbiIsIG5hbWUpOwotCQkJ cmMgPSAtRUlOVkFMOwotCQkJZ290byBlcnJvcjsKLQkJfQotCQlkZnBzX2NhcHMtPm1pbl9yZWZy ZXNoX3JhdGUgPSB2YWw7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLAot CQkJCQkgICJxY29tLG1kc3MtZHNpLW1heC1yZWZyZXNoLXJhdGUiLAotCQkJCQkgICZ2YWwpOwot CQlpZiAocmMpIHsKLQkJCXByX2RlYnVnKCJbJXNdIFVzaW5nIGRlZmF1bHQgcmVmcmVzaCByYXRl XG4iLCBuYW1lKTsKLQkJCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwKLQkJCQkJ CSJxY29tLG1kc3MtZHNpLXBhbmVsLWZyYW1lcmF0ZSIsCi0JCQkJCQkmdmFsKTsKLQkJCWlmIChy YykgewotCQkJCXByX2VycigiWyVzXSBtYXggcmVmcmVzaCByYXRlIGlzIG5vdCBkZWZpbmVkXG4i LAotCQkJCSAgICAgICBuYW1lKTsKLQkJCQlyYyA9IC1FSU5WQUw7Ci0JCQkJZ290byBlcnJvcjsK LQkJCX0KLQkJfQotCQlkZnBzX2NhcHMtPm1heF9yZWZyZXNoX3JhdGUgPSB2YWw7Ci0KLQkJaWYg KGRmcHNfY2Fwcy0+bWluX3JlZnJlc2hfcmF0ZSA+IGRmcHNfY2Fwcy0+bWF4X3JlZnJlc2hfcmF0 ZSkgewotCQkJcHJfZXJyKCJbJXNdIG1pbiByYXRlID4gbWF4IHJhdGVcbiIsIG5hbWUpOwotCQkJ cmMgPSAtRUlOVkFMOwotCQl9Ci0KLQkJcHJfZGVidWcoIlslc10gREZQUyBpcyBzdXBwb3J0ZWQg JWQtJWQsIG1vZGUgJWRcbiIsIG5hbWUsCi0JCQkJZGZwc19jYXBzLT5taW5fcmVmcmVzaF9yYXRl LAotCQkJCWRmcHNfY2Fwcy0+bWF4X3JlZnJlc2hfcmF0ZSwKLQkJCQlkZnBzX2NhcHMtPnR5cGUp OwotCQlkZnBzX2NhcHMtPmRmcHNfc3VwcG9ydCA9IHRydWU7Ci0JfQotCi1lcnJvcjoKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX3ZpZGVvX2hvc3RfY29uZmln KHN0cnVjdCBkc2lfdmlkZW9fZW5naW5lX2NmZyAqY2ZnLAotCQkJCQkgICAgIHN0cnVjdCBkZXZp Y2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQkJICAgICBjb25zdCBjaGFyICpuYW1lKQotewotCWludCBy YyA9IDA7Ci0JY29uc3QgY2hhciAqdHJhZmZpY19tb2RlOwotCXUzMiB2Y19pZCA9IDA7Ci0JdTMy IHZhbCA9IDA7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1k c3MtZHNpLWgtc3luYy1wdWxzZSIsICZ2YWwpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygiWyVz XSBmYWxsYmFjayB0byBkZWZhdWx0IGgtc3luYy1wdWxzZVxuIiwgbmFtZSk7Ci0JCWNmZy0+cHVs c2VfbW9kZV9oc2FfaGUgPSBmYWxzZTsKLQl9IGVsc2UgaWYgKHZhbCA9PSAxKSB7Ci0JCWNmZy0+ cHVsc2VfbW9kZV9oc2FfaGUgPSB0cnVlOwotCX0gZWxzZSBpZiAodmFsID09IDApIHsKLQkJY2Zn LT5wdWxzZV9tb2RlX2hzYV9oZSA9IGZhbHNlOwotCX0gZWxzZSB7Ci0JCXByX2VycigiWyVzXSBV bnJlY29nbml6ZWQgdmFsdWUgZm9yIG1kc3MtZHNpLWgtc3luYy1wdWxzZVxuIiwKLQkJICAgICAg IG5hbWUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JY2ZnLT5oZnBf bHAxMV9lbiA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkJCQkJInFjb20sbWRz cy1kc2ktaGZwLXBvd2VyLW1vZGUiKTsKLQotCWNmZy0+aGJwX2xwMTFfZW4gPSBvZl9wcm9wZXJ0 eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNpLWhicC1wb3dlci1tb2Rl Iik7Ci0KLQljZmctPmhzYV9scDExX2VuID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUs Ci0JCQkJCQkicWNvbSxtZHNzLWRzaS1oc2EtcG93ZXItbW9kZSIpOwotCi0JY2ZnLT5sYXN0X2xp bmVfaW50ZXJsZWF2ZV9lbiA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkJCQki cWNvbSxtZHNzLWRzaS1sYXN0LWxpbmUtaW50ZXJsZWF2ZSIpOwotCi0JY2ZnLT5lb2ZfYmxscF9s cDExX2VuID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0JCQkJCSJxY29tLG1kc3Mt ZHNpLWJsbHAtZW9mLXBvd2VyLW1vZGUiKTsKLQotCWNmZy0+YmxscF9scDExX2VuID0gb2ZfcHJv cGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0JCQkJCSJxY29tLG1kc3MtZHNpLWJsbHAtcG93ZXIt bW9kZSIpOwotCi0JdHJhZmZpY19tb2RlID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUsCi0JCQkJ ICAgICAgICJxY29tLG1kc3MtZHNpLXRyYWZmaWMtbW9kZSIsCi0JCQkJICAgICAgIE5VTEwpOwot CWlmICghdHJhZmZpY19tb2RlKSB7Ci0JCXByX2RlYnVnKCJbJXNdIEZhbGxpbmcgYmFjayB0byBk ZWZhdWx0IHRyYWZmaWMgbW9kZVxuIiwgbmFtZSk7Ci0JCWNmZy0+dHJhZmZpY19tb2RlID0gRFNJ X1ZJREVPX1RSQUZGSUNfU1lOQ19QVUxTRVM7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRyYWZmaWNf bW9kZSwgIm5vbl9idXJzdF9zeW5jX3B1bHNlIikpIHsKLQkJY2ZnLT50cmFmZmljX21vZGUgPSBE U0lfVklERU9fVFJBRkZJQ19TWU5DX1BVTFNFUzsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodHJhZmZp Y19tb2RlLCAibm9uX2J1cnN0X3N5bmNfZXZlbnQiKSkgewotCQljZmctPnRyYWZmaWNfbW9kZSA9 IERTSV9WSURFT19UUkFGRklDX1NZTkNfU1RBUlRfRVZFTlRTOwotCX0gZWxzZSBpZiAoIXN0cmNt cCh0cmFmZmljX21vZGUsICJidXJzdF9tb2RlIikpIHsKLQkJY2ZnLT50cmFmZmljX21vZGUgPSBE U0lfVklERU9fVFJBRkZJQ19CVVJTVF9NT0RFOwotCX0gZWxzZSB7Ci0JCXByX2VycigiWyVzXSBV bnJlY29nbml6ZWQgdHJhZmZpYyBtb2RlLSVzXG4iLCBuYW1lLAotCQkgICAgICAgdHJhZmZpY19t b2RlKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gb2ZfcHJv cGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktdmlydHVhbC1jaGFubmVsLWlk IiwKLQkJCQkgICZ2Y19pZCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIEZhbGxiYWNr IHRvIGRlZmF1bHQgdmMgaWRcbiIsIG5hbWUpOwotCQljZmctPnZjX2lkID0gMDsKLQl9IGVsc2Ug ewotCQljZmctPnZjX2lkID0gdmNfaWQ7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0K LXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2NtZF9ob3N0X2NvbmZpZyhzdHJ1Y3QgZHNpX2Nt ZF9lbmdpbmVfY2ZnICpjZmcsCi0JCQkJCSAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwK LQkJCQkJICAgY29uc3QgY2hhciAqbmFtZSkKLXsKLQl1MzIgdmFsID0gMDsKLQlpbnQgcmMgPSAw OwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS13 ci1tZW0tc3RhcnQiLCAmdmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVidWcoIlslc10gRmFsbGJh Y2sgdG8gZGVmYXVsdCB3ci1tZW0tc3RhcnRcbiIsIG5hbWUpOwotCQljZmctPndyX21lbV9zdGFy dCA9IDB4MkM7Ci0JfSBlbHNlIHsKLQkJY2ZnLT53cl9tZW1fc3RhcnQgPSB2YWw7Ci0JfQotCi0J dmFsID0gMDsKLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3Mt ZHNpLXdyLW1lbS1jb250aW51ZSIsCi0JCQkJICAmdmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVi dWcoIlslc10gRmFsbGJhY2sgdG8gZGVmYXVsdCB3ci1tZW0tY29udGludWVcbiIsIG5hbWUpOwot CQljZmctPndyX21lbV9jb250aW51ZSA9IDB4M0M7Ci0JfSBlbHNlIHsKLQkJY2ZnLT53cl9tZW1f Y29udGludWUgPSB2YWw7Ci0JfQotCi0JLyogVE9ETzogIGZpeCBmb2xsb3dpbmcgKi8KLQljZmct Pm1heF9jbWRfcGFja2V0c19pbnRlcmxlYXZlID0gMDsKLQotCXZhbCA9IDA7Ci0JcmMgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS10ZS1kY3MtY29tbWFuZCIs Ci0JCQkJICAmdmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVidWcoIlslc10gZmFsbGJhY2sgdG8g ZGVmYXVsdCB0ZS1kY3MtY21kXG4iLCBuYW1lKTsKLQkJY2ZnLT5pbnNlcnRfZGNzX2NvbW1hbmQg PSB0cnVlOwotCX0gZWxzZSBpZiAodmFsID09IDEpIHsKLQkJY2ZnLT5pbnNlcnRfZGNzX2NvbW1h bmQgPSB0cnVlOwotCX0gZWxzZSBpZiAodmFsID09IDApIHsKLQkJY2ZnLT5pbnNlcnRfZGNzX2Nv bW1hbmQgPSBmYWxzZTsKLQl9IGVsc2UgewotCQlwcl9lcnIoIlslc10gVW5yZWNvZ25pemVkIHZh bHVlIGZvciBtZHNzLWRzaS10ZS1kY3MtY29tbWFuZFxuIiwKLQkJICAgICAgIG5hbWUpOwotCQly YyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRf dTMyKG9mX25vZGUsICJxY29tLG1kc3MtbWRwLXRyYW5zZmVyLXRpbWUtdXMiLAotCQkJCSZ2YWwp KSB7Ci0JCXByX2RlYnVnKCJbJXNdIEZhbGxiYWNrIHRvIGRlZmF1bHQgdHJhbnNmZXItdGltZS11 c1xuIiwgbmFtZSk7Ci0JCWNmZy0+bWRwX3RyYW5zZmVyX3RpbWVfdXMgPSBERUZBVUxUX01EUF9U UkFOU0ZFUl9USU1FOwotCX0gZWxzZSB7Ci0JCWNmZy0+bWRwX3RyYW5zZmVyX3RpbWVfdXMgPSB2 YWw7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVs X3BhcnNlX3BhbmVsX21vZGUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkJICAgICAgc3Ry dWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWludCByYyA9IDA7Ci0JZW51bSBkc2lfb3Bf bW9kZSBwYW5lbF9tb2RlOwotCWNvbnN0IGNoYXIgKm1vZGU7Ci0KLQltb2RlID0gb2ZfZ2V0X3By b3BlcnR5KG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXBhbmVsLXR5cGUiLCBOVUxMKTsKLQlpZiAo IW1vZGUpIHsKLQkJcHJfZGVidWcoIlslc10gRmFsbGJhY2sgdG8gZGVmYXVsdCBwYW5lbCBtb2Rl XG4iLCBwYW5lbC0+bmFtZSk7Ci0JCXBhbmVsX21vZGUgPSBEU0lfT1BfVklERU9fTU9ERTsKLQl9 IGVsc2UgaWYgKCFzdHJjbXAobW9kZSwgImRzaV92aWRlb19tb2RlIikpIHsKLQkJcGFuZWxfbW9k ZSA9IERTSV9PUF9WSURFT19NT0RFOwotCX0gZWxzZSBpZiAoIXN0cmNtcChtb2RlLCAiZHNpX2Nt ZF9tb2RlIikpIHsKLQkJcGFuZWxfbW9kZSA9IERTSV9PUF9DTURfTU9ERTsKLQl9IGVsc2Ugewot CQlwcl9lcnIoIlslc10gVW5yZWNvZ25pemVkIHBhbmVsIHR5cGUtJXNcbiIsIHBhbmVsLT5uYW1l LCBtb2RlKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChwYW5l bF9tb2RlID09IERTSV9PUF9WSURFT19NT0RFKSB7Ci0JCXJjID0gZHNpX3BhbmVsX3BhcnNlX3Zp ZGVvX2hvc3RfY29uZmlnKCZwYW5lbC0+dmlkZW9fY29uZmlnLAotCQkJCQkJICAgICAgIG9mX25v ZGUsCi0JCQkJCQkgICAgICAgcGFuZWwtPm5hbWUpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vycigi WyVzXSBGYWlsZWQgdG8gcGFyc2UgdmlkZW8gaG9zdCBjZmcsIHJjPSVkXG4iLAotCQkJICAgICAg IHBhbmVsLT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JaWYgKHBhbmVs X21vZGUgPT0gRFNJX09QX0NNRF9NT0RFKSB7Ci0JCXJjID0gZHNpX3BhbmVsX3BhcnNlX2NtZF9o b3N0X2NvbmZpZygmcGFuZWwtPmNtZF9jb25maWcsCi0JCQkJCQkgICAgIG9mX25vZGUsCi0JCQkJ CQkgICAgIHBhbmVsLT5uYW1lKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gRmFpbGVk IHRvIHBhcnNlIGNtZCBob3N0IGNvbmZpZywgcmM9JWRcbiIsCi0JCQkgICAgICAgcGFuZWwtPm5h bWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlwYW5lbC0+cGFuZWxfbW9kZSA9 IHBhbmVsX21vZGU7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3Bh bmVsX3BhcnNlX3BoeV9wcm9wcyhzdHJ1Y3QgZHNpX3BhbmVsX3BoeV9wcm9wcyAqcHJvcHMsCi0J CQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsCi0JCQkJICAgICBjb25zdCBjaGFy ICpuYW1lKQotewotCWludCByYyA9IDA7Ci0JdTMyIHZhbCA9IDA7Ci0JY29uc3QgY2hhciAqc3Ry OwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLAotCQkJCSAgInFjb20sbWRz cy1wYW4tcGh5c2ljYWwtd2lkdGgtZGltZW5zaW9uIiwKLQkJCQkgICZ2YWwpOwotCWlmIChyYykg ewotCQlwcl9kZWJ1ZygiWyVzXSBQaHlzaWNhbCBwYW5lbCB3aWR0aCBpcyBub3QgZGVmaW5lZFxu IiwgbmFtZSk7Ci0JCXByb3BzLT5wYW5lbF93aWR0aF9tbSA9IDA7Ci0JCXJjID0gMDsKLQl9IGVs c2UgewotCQlwcm9wcy0+cGFuZWxfd2lkdGhfbW0gPSB2YWw7Ci0JfQotCi0JcmMgPSBvZl9wcm9w ZXJ0eV9yZWFkX3UzMihvZl9ub2RlLAotCQkJCSAgInFjb20sbWRzcy1wYW4tcGh5c2ljYWwtaGVp Z2h0LWRpbWVuc2lvbiIsCi0JCQkJICAmdmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVidWcoIlsl c10gUGh5c2ljYWwgcGFuZWwgaGVpZ2h0IGlzIG5vdCBkZWZpbmVkXG4iLCBuYW1lKTsKLQkJcHJv cHMtPnBhbmVsX2hlaWdodF9tbSA9IDA7Ci0JCXJjID0gMDsKLQl9IGVsc2UgewotCQlwcm9wcy0+ cGFuZWxfaGVpZ2h0X21tID0gdmFsOwotCX0KLQotCXN0ciA9IG9mX2dldF9wcm9wZXJ0eShvZl9u b2RlLCAicWNvbSxtZHNzLWRzaS1wYW5lbC1vcmllbnRhdGlvbiIsIE5VTEwpOwotCWlmICghc3Ry KSB7Ci0JCXByb3BzLT5yb3RhdGlvbiA9IERTSV9QQU5FTF9ST1RBVEVfTk9ORTsKLQl9IGVsc2Ug aWYgKCFzdHJjbXAoc3RyLCAiMTgwIikpIHsKLQkJcHJvcHMtPnJvdGF0aW9uID0gRFNJX1BBTkVM X1JPVEFURV9IVl9GTElQOwotCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICJoZmxpcCIpKSB7Ci0J CXByb3BzLT5yb3RhdGlvbiA9IERTSV9QQU5FTF9ST1RBVEVfSF9GTElQOwotCX0gZWxzZSBpZiAo IXN0cmNtcChzdHIsICJ2ZmxpcCIpKSB7Ci0JCXByb3BzLT5yb3RhdGlvbiA9IERTSV9QQU5FTF9S T1RBVEVfVl9GTElQOwotCX0gZWxzZSB7Ci0JCXByX2VycigiWyVzXSBVbnJlY29nbml6ZWQgcGFu ZWwgcm90YXRpb24tJXNcbiIsIG5hbWUsIHN0cik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBl cnJvcjsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci1jb25zdCBjaGFyICpjbWRfc2V0X3By b3BfbWFwW0RTSV9DTURfU0VUX01BWF0gPSB7Ci0JInFjb20sbWRzcy1kc2ktcHJlLW9uLWNvbW1h bmQiLAotCSJxY29tLG1kc3MtZHNpLW9uLWNvbW1hbmQiLAotCSJxY29tLG1kc3MtZHNpLXBvc3Qt cGFuZWwtb24tY29tbWFuZCIsCi0JInFjb20sbWRzcy1kc2ktcHJlLW9mZi1jb21tYW5kIiwKLQki cWNvbSxtZHNzLWRzaS1vZmYtY29tbWFuZCIsCi0JInFjb20sbWRzcy1kc2ktcG9zdC1vZmYtY29t bWFuZCIsCi0JInFjb20sbWRzcy1kc2ktcHJlLXJlcy1zd2l0Y2giLAotCSJxY29tLG1kc3MtZHNp LXJlcy1zd2l0Y2giLAotCSJxY29tLG1kc3MtZHNpLXBvc3QtcmVzLXN3aXRjaCIsCi0JInFjb20s Y21kLXRvLXZpZGVvLW1vZGUtc3dpdGNoLWNvbW1hbmRzIiwKLQkicWNvbSxjbWQtdG8tdmlkZW8t bW9kZS1wb3N0LXN3aXRjaC1jb21tYW5kcyIsCi0JInFjb20sdmlkZW8tdG8tY21kLW1vZGUtc3dp dGNoLWNvbW1hbmRzIiwKLQkicWNvbSx2aWRlby10by1jbWQtbW9kZS1wb3N0LXN3aXRjaC1jb21t YW5kcyIsCi0JInFjb20sbWRzcy1kc2ktcGFuZWwtc3RhdHVzLWNvbW1hbmQiLAotCSJxY29tLG1k c3MtZHNpLWxwMS1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRzaS1scDItY29tbWFuZCIsCi0JInFj b20sbWRzcy1kc2ktbm9scC1jb21tYW5kIiwKLQkiUFBTIG5vdCBwYXJzZWQgZnJvbSBEVFNJLCBn ZW5lcmF0ZWQgZHluYW1pY2FsbHkiLAotCSJxY29tLG1kc3MtZHNpLXRpbWluZy1zd2l0Y2gtY29t bWFuZCIsCi0JInFjb20sbWRzcy1kc2ktcG9zdC1tb2RlLXN3aXRjaC1vbi1jb21tYW5kIiwKLX07 Ci0KLWNvbnN0IGNoYXIgKmNtZF9zZXRfc3RhdGVfbWFwW0RTSV9DTURfU0VUX01BWF0gPSB7Ci0J InFjb20sbWRzcy1kc2ktcHJlLW9uLWNvbW1hbmQtc3RhdGUiLAotCSJxY29tLG1kc3MtZHNpLW9u LWNvbW1hbmQtc3RhdGUiLAotCSJxY29tLG1kc3MtZHNpLXBvc3Qtb24tY29tbWFuZC1zdGF0ZSIs Ci0JInFjb20sbWRzcy1kc2ktcHJlLW9mZi1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRz aS1vZmYtY29tbWFuZC1zdGF0ZSIsCi0JInFjb20sbWRzcy1kc2ktcG9zdC1vZmYtY29tbWFuZC1z dGF0ZSIsCi0JInFjb20sbWRzcy1kc2ktcHJlLXJlcy1zd2l0Y2gtc3RhdGUiLAotCSJxY29tLG1k c3MtZHNpLXJlcy1zd2l0Y2gtc3RhdGUiLAotCSJxY29tLG1kc3MtZHNpLXBvc3QtcmVzLXN3aXRj aC1zdGF0ZSIsCi0JInFjb20sY21kLXRvLXZpZGVvLW1vZGUtc3dpdGNoLWNvbW1hbmRzLXN0YXRl IiwKLQkicWNvbSxjbWQtdG8tdmlkZW8tbW9kZS1wb3N0LXN3aXRjaC1jb21tYW5kcy1zdGF0ZSIs Ci0JInFjb20sdmlkZW8tdG8tY21kLW1vZGUtc3dpdGNoLWNvbW1hbmRzLXN0YXRlIiwKLQkicWNv bSx2aWRlby10by1jbWQtbW9kZS1wb3N0LXN3aXRjaC1jb21tYW5kcy1zdGF0ZSIsCi0JInFjb20s bWRzcy1kc2ktcGFuZWwtc3RhdHVzLWNvbW1hbmQtc3RhdGUiLAotCSJxY29tLG1kc3MtZHNpLWxw MS1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1scDItY29tbWFuZC1zdGF0ZSIsCi0J InFjb20sbWRzcy1kc2ktbm9scC1jb21tYW5kLXN0YXRlIiwKLQkiUFBTIG5vdCBwYXJzZWQgZnJv bSBEVFNJLCBnZW5lcmF0ZWQgZHluYW1pY2FsbHkiLAotCSJxY29tLG1kc3MtZHNpLXRpbWluZy1z d2l0Y2gtY29tbWFuZC1zdGF0ZSIsCi0JInFjb20sbWRzcy1kc2ktcG9zdC1tb2RlLXN3aXRjaC1v bi1jb21tYW5kLXN0YXRlIiwKLX07Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2dldF9jbWRfcGt0 X2NvdW50KGNvbnN0IGNoYXIgKmRhdGEsIHUzMiBsZW5ndGgsIHUzMiAqY250KQotewotCWNvbnN0 IHUzMiBjbWRfc2V0X21pbl9zaXplID0gNzsKLQl1MzIgY291bnQgPSAwOwotCXUzMiBwYWNrZXRf bGVuZ3RoOwotCXUzMiB0bXA7Ci0KLQl3aGlsZSAobGVuZ3RoID49IGNtZF9zZXRfbWluX3NpemUp IHsKLQkJcGFja2V0X2xlbmd0aCA9IGNtZF9zZXRfbWluX3NpemU7Ci0JCXRtcCA9ICgoZGF0YVs1 XSA8PCA4KSB8IChkYXRhWzZdKSk7Ci0JCXBhY2tldF9sZW5ndGggKz0gdG1wOwotCQlpZiAocGFj a2V0X2xlbmd0aCA+IGxlbmd0aCkgewotCQkJcHJfZXJyKCJmb3JtYXQgZXJyb3JcbiIpOwotCQkJ cmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJbGVuZ3RoIC09IHBhY2tldF9sZW5ndGg7Ci0JCWRhdGEg Kz0gcGFja2V0X2xlbmd0aDsKLQkJY291bnQrKzsKLQl9OwotCi0JKmNudCA9IGNvdW50OwotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9jcmVhdGVfY21kX3BhY2tldHMoY29u c3QgY2hhciAqZGF0YSwKLQkJCQkJdTMyIGxlbmd0aCwKLQkJCQkJdTMyIGNvdW50LAotCQkJCQlz dHJ1Y3QgZHNpX2NtZF9kZXNjICpjbWQpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaSwgajsKLQl1 OCAqcGF5bG9hZDsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXUzMiBzaXpl OwotCi0JCWNtZFtpXS5tc2cudHlwZSA9IGRhdGFbMF07Ci0JCWNtZFtpXS5sYXN0X2NvbW1hbmQg PSAoZGF0YVsxXSA9PSAxID8gdHJ1ZSA6IGZhbHNlKTsKLQkJY21kW2ldLm1zZy5jaGFubmVsID0g ZGF0YVsyXTsKLQkJY21kW2ldLm1zZy5mbGFncyB8PSAoZGF0YVszXSA9PSAxID8gTUlQSV9EU0lf TVNHX1JFUV9BQ0sgOiAwKTsKLQkJY21kW2ldLm1zZy5jdHJsID0gMDsKLQkJY21kW2ldLnBvc3Rf d2FpdF9tcyA9IGRhdGFbNF07Ci0JCWNtZFtpXS5tc2cudHhfbGVuID0gKChkYXRhWzVdIDw8IDgp IHwgKGRhdGFbNl0pKTsKLQotCQlzaXplID0gY21kW2ldLm1zZy50eF9sZW4gKiBzaXplb2YodTgp OwotCi0JCXBheWxvYWQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIXBheWxv YWQpIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyb3JfZnJlZV9wYXlsb2FkczsKLQkJ fQotCi0JCWZvciAoaiA9IDA7IGogPCBjbWRbaV0ubXNnLnR4X2xlbjsgaisrKQotCQkJcGF5bG9h ZFtqXSA9IGRhdGFbNyArIGpdOwotCi0JCWNtZFtpXS5tc2cudHhfYnVmID0gcGF5bG9hZDsKLQkJ ZGF0YSArPSAoNyArIGNtZFtpXS5tc2cudHhfbGVuKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci1lcnJv cl9mcmVlX3BheWxvYWRzOgotCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkgewotCQljbWQt LTsKLQkJa2ZyZWUoY21kLT5tc2cudHhfYnVmKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXZv aWQgZHNpX3BhbmVsX2Rlc3Ryb3lfY21kX3BhY2tldHMoc3RydWN0IGRzaV9wYW5lbF9jbWRfc2V0 ICpzZXQpCi17Ci0JdTMyIGkgPSAwOwotCXN0cnVjdCBkc2lfY21kX2Rlc2MgKmNtZDsKLQotCWZv ciAoaSA9IDA7IGkgPCBzZXQtPmNvdW50OyBpKyspIHsKLQkJY21kID0gJnNldC0+Y21kc1tpXTsK LQkJa2ZyZWUoY21kLT5tc2cudHhfYnVmKTsKLQl9Ci0KLQlrZnJlZShzZXQtPmNtZHMpOwotfQot Ci1zdGF0aWMgaW50IGRzaV9wYW5lbF9hbGxvY19jbWRfcGFja2V0cyhzdHJ1Y3QgZHNpX3BhbmVs X2NtZF9zZXQgKmNtZCwKLQkJCQkJdTMyIHBhY2tldF9jb3VudCkKLXsKLQl1MzIgc2l6ZTsKLQot CXNpemUgPSBwYWNrZXRfY291bnQgKiBzaXplb2YoKmNtZC0+Y21kcyk7Ci0JY21kLT5jbWRzID0g a3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNtZC0+Y21kcykKLQkJcmV0dXJuIC1F Tk9NRU07Ci0KLQljbWQtPmNvdW50ID0gcGFja2V0X2NvdW50OwotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9jbWRfc2V0c19zdWIoc3RydWN0IGRzaV9wYW5lbF9j bWRfc2V0ICpjbWQsCi0JCQkJCWVudW0gZHNpX2NtZF9zZXRfdHlwZSB0eXBlLAotCQkJCQlzdHJ1 Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgbGVuZ3RoID0g MDsKLQljb25zdCBjaGFyICpkYXRhOwotCWNvbnN0IGNoYXIgKnN0YXRlOwotCXUzMiBwYWNrZXRf Y291bnQgPSAwOwotCi0JZGF0YSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCBjbWRfc2V0X3By b3BfbWFwW3R5cGVdLCAmbGVuZ3RoKTsKLQlpZiAoIWRhdGEpIHsKLQkJcHJfZGVidWcoIiVzIGNv bW1hbmRzIG5vdCBkZWZpbmVkXG4iLCBjbWRfc2V0X3Byb3BfbWFwW3R5cGVdKTsKLQkJcmMgPSAt RU5PVFNVUFA7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfZ2V0X2NtZF9w a3RfY291bnQoZGF0YSwgbGVuZ3RoLCAmcGFja2V0X2NvdW50KTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJjb21tYW5kcyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot CXByX2RlYnVnKCJbJXNdIHBhY2tldC1jb3VudD0lZCwgJWRcbiIsIGNtZF9zZXRfcHJvcF9tYXBb dHlwZV0sCi0JCXBhY2tldF9jb3VudCwgbGVuZ3RoKTsKLQotCXJjID0gZHNpX3BhbmVsX2FsbG9j X2NtZF9wYWNrZXRzKGNtZCwgcGFja2V0X2NvdW50KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJm YWlsZWQgdG8gYWxsb2NhdGUgY21kIHBhY2tldHMsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfY3JlYXRlX2NtZF9wYWNrZXRzKGRhdGEsIGxlbmd0 aCwgcGFja2V0X2NvdW50LAotCQkJCQkgIGNtZC0+Y21kcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiZmFpbGVkIHRvIGNyZWF0ZSBjbWQgcGFja2V0cywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBl cnJvcl9mcmVlX21lbTsKLQl9Ci0KLQlzdGF0ZSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCBj bWRfc2V0X3N0YXRlX21hcFt0eXBlXSwgTlVMTCk7Ci0JaWYgKCFzdGF0ZSB8fCAhc3RyY21wKHN0 YXRlLCAiZHNpX2xwX21vZGUiKSkgewotCQljbWQtPnN0YXRlID0gRFNJX0NNRF9TRVRfU1RBVEVf TFA7Ci0JfSBlbHNlIGlmICghc3RyY21wKHN0YXRlLCAiZHNpX2hzX21vZGUiKSkgewotCQljbWQt PnN0YXRlID0gRFNJX0NNRF9TRVRfU1RBVEVfSFM7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJbJXNd IGNvbW1hbmQgc3RhdGUgdW5yZWNvZ25pemVkLSVzXG4iLAotCQkgICAgICAgY21kX3NldF9zdGF0 ZV9tYXBbdHlwZV0sIHN0YXRlKTsKLQkJZ290byBlcnJvcl9mcmVlX21lbTsKLQl9Ci0KLQlyZXR1 cm4gcmM7Ci1lcnJvcl9mcmVlX21lbToKLQlrZnJlZShjbWQtPmNtZHMpOwotCWNtZC0+Y21kcyA9 IE5VTEw7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci0KLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxf cGFyc2VfY21kX3NldHMoCi0JCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlX3ByaXZfaW5mbyAqcHJp dl9pbmZvLAotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50IHJjID0gMDsK LQlzdHJ1Y3QgZHNpX3BhbmVsX2NtZF9zZXQgKnNldDsKLQl1MzIgaTsKLQotCWlmICghcHJpdl9p bmZvKSB7Ci0JCXByX2VycigiaW52YWxpZCBtb2RlIHByaXYgaW5mb1xuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCWZvciAoaSA9IERTSV9DTURfU0VUX1BSRV9PTjsgaSA8IERTSV9DTURf U0VUX01BWDsgaSsrKSB7Ci0JCXNldCA9ICZwcml2X2luZm8tPmNtZF9zZXRzW2ldOwotCQlzZXQt PnR5cGUgPSBpOwotCQlzZXQtPmNvdW50ID0gMDsKLQotCQlpZiAoaSA9PSBEU0lfQ01EX1NFVF9Q UFMpIHsKLQkJCXJjID0gZHNpX3BhbmVsX2FsbG9jX2NtZF9wYWNrZXRzKHNldCwgMSk7Ci0JCQlp ZiAocmMpCi0JCQkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgY21kIHNldCAlZCwgcmMgPSAl ZFxuIiwKLQkJCQkJaSwgcmMpOwotCQkJc2V0LT5zdGF0ZSA9IERTSV9DTURfU0VUX1NUQVRFX0xQ OwotCQl9IGVsc2UgewotCQkJcmMgPSBkc2lfcGFuZWxfcGFyc2VfY21kX3NldHNfc3ViKHNldCwg aSwgb2Zfbm9kZSk7Ci0JCQlpZiAocmMpCi0JCQkJcHJfZGVidWcoImZhaWxlZCB0byBwYXJzZSBz ZXQgJWRcbiIsIGkpOwotCQl9Ci0JfQotCi0JcmMgPSAwOwotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkc2lfcGFuZWxfcGFyc2VfcmVzZXRfc2VxdWVuY2Uoc3RydWN0IGRzaV9wYW5lbCAq cGFuZWwsCi0JCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWludCBy YyA9IDA7Ci0JaW50IGk7Ci0JdTMyIGxlbmd0aCA9IDA7Ci0JdTMyIGNvdW50ID0gMDsKLQl1MzIg c2l6ZSA9IDA7Ci0JdTMyICphcnJfMzIgPSBOVUxMOwotCWNvbnN0IHUzMiAqYXJyOwotCXN0cnVj dCBkc2lfcmVzZXRfc2VxICpzZXE7Ci0KLQlhcnIgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwg InFjb20sbWRzcy1kc2ktcmVzZXQtc2VxdWVuY2UiLCAmbGVuZ3RoKTsKLQlpZiAoIWFycikgewot CQlwcl9lcnIoIlslc10gZHNpLXJlc2V0LXNlcXVlbmNlIG5vdCBmb3VuZFxuIiwgcGFuZWwtPm5h bWUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCWlmIChsZW5ndGggJiAw eDEpIHsKLQkJcHJfZXJyKCJbJXNdIHN5bnRheCBlcnJvciBmb3IgZHNpLXJlc2V0LXNlcXVlbmNl XG4iLAotCQkgICAgICAgcGFuZWwtPm5hbWUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0JcHJfZXJyKCJSRVNFVCBTRVEgTEVOR1RIID0gJWRcbiIsIGxlbmd0aCk7Ci0J bGVuZ3RoID0gbGVuZ3RoIC8gc2l6ZW9mKHUzMik7Ci0KLQlzaXplID0gbGVuZ3RoICogc2l6ZW9m KHUzMik7Ci0KLQlhcnJfMzIgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghYXJy XzMyKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IG9mX3By b3BlcnR5X3JlYWRfdTMyX2FycmF5KG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXJlc2V0LXNlcXVl bmNlIiwKLQkJCQkJYXJyXzMyLCBsZW5ndGgpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10g Y2Fubm90IHJlYWQgZHNvLXJlc2V0LXNlcWllbmNlXG4iLCBwYW5lbC0+bmFtZSk7Ci0JCWdvdG8g ZXJyb3JfZnJlZV9hcnJfMzI7Ci0JfQotCi0JY291bnQgPSBsZW5ndGggLyAyOwotCXNpemUgPSBj b3VudCAqIHNpemVvZigqc2VxKTsKLQlzZXEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwot CWlmICghc2VxKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9mcmVlX2Fycl8zMjsK LQl9Ci0KLQlwYW5lbC0+cmVzZXRfY29uZmlnLnNlcXVlbmNlID0gc2VxOwotCXBhbmVsLT5yZXNl dF9jb25maWcuY291bnQgPSBjb3VudDsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0g MikgewotCQlzZXEtPmxldmVsID0gYXJyXzMyW2ldOwotCQlzZXEtPnNsZWVwX21zID0gYXJyXzMy W2kgKyAxXTsKLQkJc2VxKys7Ci0JfQotCi0KLWVycm9yX2ZyZWVfYXJyXzMyOgotCWtmcmVlKGFy cl8zMik7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3Bh cnNlX21pc2NfZmVhdHVyZXMoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkJICAgICBzdHJ1 Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JcGFuZWwtPnVscHNfZW5hYmxlZCA9Ci0JCW9m X3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLCAicWNvbSx1bHBzLWVuYWJsZWQiKTsKLQotCWlm IChwYW5lbC0+dWxwc19lbmFibGVkKQotCQlwcl9kZWJ1ZygidWxwc19lbmFibGVkOiVkXG4iLCBw YW5lbC0+dWxwc19lbmFibGVkKTsKLQotCXBhbmVsLT50ZV91c2luZ193YXRjaGRvZ190aW1lciA9 IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkJCQkicWNvbSxtZHNzLWRzaS10ZS11 c2luZy13ZCIpOwotCi0JcGFuZWwtPnN5bmNfYnJvYWRjYXN0X2VuID0gb2ZfcHJvcGVydHlfcmVh ZF9ib29sKG9mX25vZGUsCi0JCQkicWNvbSxjbWQtc3luYy13YWl0LWJyb2FkY2FzdCIpOwotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9qaXR0ZXJfY29uZmlnKAot CQkJCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkJCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqb2Zfbm9kZSkKLXsKLQlpbnQgcmM7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGVfcHJpdl9p bmZvICpwcml2X2luZm87Ci0JdTMyIGppdHRlcltERUZBVUxUX1BBTkVMX0pJVFRFUl9BUlJBWV9T SVpFXSA9IHswLCAwfTsKLQl1NjQgaml0dGVyX3ZhbCA9IDA7Ci0KLQlwcml2X2luZm8gPSBtb2Rl LT5wcml2X2luZm87Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG9mX25vZGUs ICJxY29tLG1kc3MtZHNpLXBhbmVsLWppdHRlciIsCi0JCQkJaml0dGVyLCBERUZBVUxUX1BBTkVM X0pJVFRFUl9BUlJBWV9TSVpFKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVidWcoInBhbmVsIGppdHRl ciBub3QgZGVmaW5lZCByYz0lZFxuIiwgcmMpOwotCX0gZWxzZSB7Ci0JCWppdHRlcl92YWwgPSBq aXR0ZXJbMF07Ci0JCWppdHRlcl92YWwgPSBkaXZfdTY0KGppdHRlcl92YWwsIGppdHRlclsxXSk7 Ci0JfQotCi0JaWYgKHJjIHx8ICFqaXR0ZXJfdmFsIHx8IChqaXR0ZXJfdmFsID4gTUFYX1BBTkVM X0pJVFRFUikpIHsKLQkJcHJpdl9pbmZvLT5wYW5lbF9qaXR0ZXJfbnVtZXIgPSBERUZBVUxUX1BB TkVMX0pJVFRFUl9OVU1FUkFUT1I7Ci0JCXByaXZfaW5mby0+cGFuZWxfaml0dGVyX2Rlbm9tID0K LQkJCQkJREVGQVVMVF9QQU5FTF9KSVRURVJfREVOT01JTkFUT1I7Ci0JfSBlbHNlIHsKLQkJcHJp dl9pbmZvLT5wYW5lbF9qaXR0ZXJfbnVtZXIgPSBqaXR0ZXJbMF07Ci0JCXByaXZfaW5mby0+cGFu ZWxfaml0dGVyX2Rlbm9tID0gaml0dGVyWzFdOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVh ZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktcGFuZWwtcHJlZmlsbC1saW5lcyIsCi0JCQkJ ICAmcHJpdl9pbmZvLT5wYW5lbF9wcmVmaWxsX2xpbmVzKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVi dWcoInBhbmVsIHByZWZpbGwgbGluZXMgYXJlIG5vdCBkZWZpbmVkIHJjPSVkXG4iLCByYyk7Ci0J CXByaXZfaW5mby0+cGFuZWxfcHJlZmlsbF9saW5lcyA9IERFRkFVTFRfUEFORUxfUFJFRklMTF9M SU5FUzsKLQl9IGVsc2UgaWYgKHByaXZfaW5mby0+cGFuZWxfcHJlZmlsbF9saW5lcyA+PQotCQkJ CQlEU0lfVl9UT1RBTCgmbW9kZS0+dGltaW5nKSkgewotCQlwcl9kZWJ1ZygiaW52YWxpZCBwcmVm aWxsIGxpbmVzIGNvbmZpZz0lZCBzZXR0aW5nIHRvOiVkXG4iLAotCQlwcml2X2luZm8tPnBhbmVs X3ByZWZpbGxfbGluZXMsIERFRkFVTFRfUEFORUxfUFJFRklMTF9MSU5FUyk7Ci0KLQkJcHJpdl9p bmZvLT5wYW5lbF9wcmVmaWxsX2xpbmVzID0gREVGQVVMVF9QQU5FTF9QUkVGSUxMX0xJTkVTOwot CX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9wb3dlcl9j Zmcoc3RydWN0IGRldmljZSAqcGFyZW50LAotCQkJCSAgICAgc3RydWN0IGRzaV9wYW5lbCAqcGFu ZWwsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50IHJjID0g MDsKLQotCXJjID0gZHNpX3B3cl9vZl9nZXRfdnJlZ19kYXRhKG9mX25vZGUsCi0JCQkJCSAgJnBh bmVsLT5wb3dlcl9pbmZvLAotCQkJCQkgICJxY29tLHBhbmVsLXN1cHBseS1lbnRyaWVzIik7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcGFyc2UgdnJlZ3NcbiIsIHBhbmVs LT5uYW1lKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQot c3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfZ3Bpb3Moc3RydWN0IGRzaV9wYW5lbCAqcGFuZWws Ci0JCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlpbnQgcmMgPSAwOwotCWNv bnN0IGNoYXIgKmRhdGE7Ci0KLQlwYW5lbC0+cmVzZXRfY29uZmlnLnJlc2V0X2dwaW8gPSBvZl9n ZXRfbmFtZWRfZ3BpbyhvZl9ub2RlLAotCQkJCQkgICAgICAicWNvbSxwbGF0Zm9ybS1yZXNldC1n cGlvIiwKLQkJCQkJICAgICAgMCk7Ci0JaWYgKCFncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9j b25maWcucmVzZXRfZ3BpbykpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCBnZXQgcmVzZXQgZ3Bp bywgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBl cnJvcjsKLQl9Ci0KLQlwYW5lbC0+cmVzZXRfY29uZmlnLmRpc3BfZW5fZ3BpbyA9IG9mX2dldF9u YW1lZF9ncGlvKG9mX25vZGUsCi0JCQkJCQkicWNvbSw1di1ib29zdC1ncGlvIiwKLQkJCQkJCTAp OwotCWlmICghZ3Bpb19pc192YWxpZChwYW5lbC0+cmVzZXRfY29uZmlnLmRpc3BfZW5fZ3Bpbykp IHsKLQkJcHJfZGVidWcoIlslc10gNXYtYm9vdC1ncGlvIGlzIG5vdCBzZXQsIHJjPSVkXG4iLAot CQkJIHBhbmVsLT5uYW1lLCByYyk7Ci0JCXBhbmVsLT5yZXNldF9jb25maWcuZGlzcF9lbl9ncGlv ID0gb2ZfZ2V0X25hbWVkX2dwaW8ob2Zfbm9kZSwKLQkJCQkJCQkicWNvbSxwbGF0Zm9ybS1lbi1n cGlvIiwKLQkJCQkJCQkwKTsKLQkJaWYgKCFncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25m aWcuZGlzcF9lbl9ncGlvKSkgewotCQkJcHJfZGVidWcoIlslc10gcGxhdGZvcm0tZW4tZ3BpbyBp cyBub3Qgc2V0LCByYz0lZFxuIiwKLQkJCQkgcGFuZWwtPm5hbWUsIHJjKTsKLQkJfQotCX0KLQot CXBhbmVsLT5yZXNldF9jb25maWcubGNkX21vZGVfc2VsX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3Bp byhvZl9ub2RlLAotCQkicWNvbSxwYW5lbC1tb2RlLWdwaW8iLCAwKTsKLQlpZiAoIWdwaW9faXNf dmFsaWQocGFuZWwtPnJlc2V0X2NvbmZpZy5sY2RfbW9kZV9zZWxfZ3BpbykpCi0JCXByX2RlYnVn KCIlczolZCBtb2RlIGdwaW8gbm90IHNwZWNpZmllZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsK LQotCWRhdGEgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwKLQkJInFjb20sbWRzcy1kc2ktbW9k ZS1zZWwtZ3Bpby1zdGF0ZSIsIE5VTEwpOwotCWlmIChkYXRhKSB7Ci0JCWlmICghc3RyY21wKGRh dGEsICJzaW5nbGVfcG9ydCIpKQotCQkJcGFuZWwtPnJlc2V0X2NvbmZpZy5tb2RlX3NlbF9zdGF0 ZSA9Ci0JCQkJTU9ERV9TRUxfU0lOR0xFX1BPUlQ7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoZGF0YSwg ImR1YWxfcG9ydCIpKQotCQkJcGFuZWwtPnJlc2V0X2NvbmZpZy5tb2RlX3NlbF9zdGF0ZSA9Ci0J CQkJTU9ERV9TRUxfRFVBTF9QT1JUOwotCQllbHNlIGlmICghc3RyY21wKGRhdGEsICJoaWdoIikp Ci0JCQlwYW5lbC0+cmVzZXRfY29uZmlnLm1vZGVfc2VsX3N0YXRlID0KLQkJCQlNT0RFX0dQSU9f SElHSDsKLQkJZWxzZSBpZiAoIXN0cmNtcChkYXRhLCAibG93IikpCi0JCQlwYW5lbC0+cmVzZXRf Y29uZmlnLm1vZGVfc2VsX3N0YXRlID0KLQkJCQlNT0RFX0dQSU9fTE9XOwotCX0gZWxzZSB7Ci0J CS8qIFNldCBkZWZhdWx0IG1vZGUgYXMgU1BMSVQgbW9kZSAqLwotCQlwYW5lbC0+cmVzZXRfY29u ZmlnLm1vZGVfc2VsX3N0YXRlID0gTU9ERV9TRUxfRFVBTF9QT1JUOwotCX0KLQotCS8qIFRPRE86 ICByZWxlYXNlIG1lbW9yeSAqLwotCXJjID0gZHNpX3BhbmVsX3BhcnNlX3Jlc2V0X3NlcXVlbmNl KHBhbmVsLCBvZl9ub2RlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBw YXJzZSByZXNldCBzZXF1ZW5jZSwgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IGRzaV9wYW5lbF9wYXJzZV9ibF9wd21fY29uZmlnKHN0cnVjdCBkc2lfYmFja2xpZ2h0X2Nv bmZpZyAqY29uZmlnLAotCQkJCQkgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWlu dCByYyA9IDA7Ci0JdTMyIHZhbDsKLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9k ZSwgInFjb20sZHNpLWJsLXBtaWMtYmFuay1zZWxlY3QiLAotCQkJCSAgJnZhbCk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiYmwtcG1pYy1iYW5rLXNlbGVjdCBpcyBub3QgZGVmaW5lZCwgcmM9JWRc biIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JY29uZmlnLT5wd21fcG1pY19iYW5rID0gdmFs OwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxkc2ktYmwtcG1p Yy1wd20tZnJlcXVlbmN5IiwKLQkJCQkgICZ2YWwpOwotCWlmIChyYykgewotCQlwcl9lcnIoImJs LXBtaWMtYmFuay1zZWxlY3QgaXMgbm90IGRlZmluZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCWNvbmZpZy0+cHdtX3BlcmlvZF91c2VjcyA9IHZhbDsKLQotCWNvbmZpZy0+ cHdtX3BtaV9jb250cm9sID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0JCQkJCQki cWNvbSxtZHNzLWRzaS1ibC1wd20tcG1pIik7Ci0KLQljb25maWctPnB3bV9ncGlvID0gb2ZfZ2V0 X25hbWVkX2dwaW8ob2Zfbm9kZSwKLQkJCQkJICAgICAicWNvbSxtZHNzLWRzaS1wd20tZ3BpbyIs Ci0JCQkJCSAgICAgMCk7Ci0JaWYgKCFncGlvX2lzX3ZhbGlkKGNvbmZpZy0+cHdtX2dwaW8pKSB7 Ci0JCXByX2VycigicHdtIGdwaW8gaXMgaW52YWxpZFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJ Z290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfcGFuZWxfcGFyc2VfYmxfY29uZmlnKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJCSAg ICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWludCByYyA9IDA7Ci0JY29uc3Qg Y2hhciAqYmxfdHlwZTsKLQl1MzIgdmFsID0gMDsKLQotCWJsX3R5cGUgPSBvZl9nZXRfcHJvcGVy dHkob2Zfbm9kZSwKLQkJCQkgICJxY29tLG1kc3MtZHNpLWJsLXBtaWMtY29udHJvbC10eXBlIiwK LQkJCQkgIE5VTEwpOwotCWlmICghYmxfdHlwZSkgewotCQlwYW5lbC0+YmxfY29uZmlnLnR5cGUg PSBEU0lfQkFDS0xJR0hUX1VOS05PV047Ci0JfSBlbHNlIGlmICghc3RyY21wKGJsX3R5cGUsICJi bF9jdHJsX3B3bSIpKSB7Ci0JCXBhbmVsLT5ibF9jb25maWcudHlwZSA9IERTSV9CQUNLTElHSFRf UFdNOwotCX0gZWxzZSBpZiAoIXN0cmNtcChibF90eXBlLCAiYmxfY3RybF93bGVkIikpIHsKLQkJ cGFuZWwtPmJsX2NvbmZpZy50eXBlID0gRFNJX0JBQ0tMSUdIVF9XTEVEOwotCX0gZWxzZSBpZiAo IXN0cmNtcChibF90eXBlLCAiYmxfY3RybF9kY3MiKSkgewotCQlwYW5lbC0+YmxfY29uZmlnLnR5 cGUgPSBEU0lfQkFDS0xJR0hUX0RDUzsKLQl9IGVsc2UgewotCQlwcl9kZWJ1ZygiWyVzXSBibC1w bWljLWNvbnRyb2wtdHlwZSB1bmtub3duLSVzXG4iLAotCQkJIHBhbmVsLT5uYW1lLCBibF90eXBl KTsKLQkJcGFuZWwtPmJsX2NvbmZpZy50eXBlID0gRFNJX0JBQ0tMSUdIVF9VTktOT1dOOwotCX0K LQotCXBhbmVsLT5ibF9jb25maWcuYmxfc2NhbGUgPSBNQVhfQkxfU0NBTEVfTEVWRUw7Ci0JcGFu ZWwtPmJsX2NvbmZpZy5ibF9zY2FsZV9hZCA9IE1BWF9BRF9CTF9TQ0FMRV9MRVZFTDsKLQotCXJj ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktYmwtbWluLWxl dmVsIiwgJnZhbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIGJsLW1pbi1sZXZlbCB1 bnNwZWNpZmllZCwgZGVmYXVsdGluZyB0byB6ZXJvXG4iLAotCQkJIHBhbmVsLT5uYW1lKTsKLQkJ cGFuZWwtPmJsX2NvbmZpZy5ibF9taW5fbGV2ZWwgPSAwOwotCX0gZWxzZSB7Ci0JCXBhbmVsLT5i bF9jb25maWcuYmxfbWluX2xldmVsID0gdmFsOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVh ZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktYmwtbWF4LWxldmVsIiwgJnZhbCk7Ci0JaWYg KHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIGJsLW1heC1sZXZlbCB1bnNwZWNpZmllZCwgZGVmYXVs dGluZyB0byBtYXggbGV2ZWxcbiIsCi0JCQkgcGFuZWwtPm5hbWUpOwotCQlwYW5lbC0+YmxfY29u ZmlnLmJsX21heF9sZXZlbCA9IE1BWF9CTF9MRVZFTDsKLQl9IGVsc2UgewotCQlwYW5lbC0+Ymxf Y29uZmlnLmJsX21heF9sZXZlbCA9IHZhbDsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRf dTMyKG9mX25vZGUsICJxY29tLG1kc3MtYnJpZ2h0bmVzcy1tYXgtbGV2ZWwiLAotCQkmdmFsKTsK LQlpZiAocmMpIHsKLQkJcHJfZGVidWcoIlslc10gYnJpZ2hlbmVzcy1tYXgtbGV2ZWwgdW5zcGVj aWZpZWQsIGRlZmF1bHRpbmcgdG8gMjU1XG4iLAotCQkJIHBhbmVsLT5uYW1lKTsKLQkJcGFuZWwt PmJsX2NvbmZpZy5icmlnaHRuZXNzX21heF9sZXZlbCA9IDI1NTsKLQl9IGVsc2UgewotCQlwYW5l bC0+YmxfY29uZmlnLmJyaWdodG5lc3NfbWF4X2xldmVsID0gdmFsOwotCX0KLQotCWlmIChwYW5l bC0+YmxfY29uZmlnLnR5cGUgPT0gRFNJX0JBQ0tMSUdIVF9QV00pIHsKLQkJcmMgPSBkc2lfcGFu ZWxfcGFyc2VfYmxfcHdtX2NvbmZpZygmcGFuZWwtPmJsX2NvbmZpZywgb2Zfbm9kZSk7Ci0JCWlm IChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBwYXJzZSBwd20gY29uZmlnLCByYz0l ZFxuIiwKLQkJCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQot CX0KLQotCXBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG9mX25v ZGUsCi0JCQkJCSAgICAgICJxY29tLHBsYXRmb3JtLWJrbGlnaHQtZW4tZ3BpbyIsCi0JCQkJCSAg ICAgIDApOwotCWlmICghZ3Bpb19pc192YWxpZChwYW5lbC0+YmxfY29uZmlnLmVuX2dwaW8pKSB7 Ci0JCXByX2RlYnVnKCJbJXNdIGZhaWxlZCBnZXQgYmtsdCBncGlvLCByYz0lZFxuIiwgcGFuZWwt Pm5hbWUsIHJjKTsKLQkJcmMgPSAwOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0 dXJuIHJjOwotfQotCi12b2lkIGRzaV9kc2NfcGNsa19wYXJhbV9jYWxjKHN0cnVjdCBtc21fZGlz cGxheV9kc2NfaW5mbyAqZHNjLCBpbnQgaW50Zl93aWR0aCkKLXsKLQlpbnQgc2xpY2VfcGVyX3Br dCwgc2xpY2VfcGVyX2ludGY7Ci0JaW50IGJ5dGVzX2luX3NsaWNlLCB0b3RhbF9ieXRlc19wZXJf aW50ZjsKLQotCWlmICghZHNjIHx8ICFkc2MtPnNsaWNlX3dpZHRoIHx8ICFkc2MtPnNsaWNlX3Bl cl9wa3QgfHwKLQkgICAgKGludGZfd2lkdGggPCBkc2MtPnNsaWNlX3dpZHRoKSkgewotCQlwcl9l cnIoImludmFsaWQgaW5wdXQsIGludGZfd2lkdGg9JWQgc2xpY2Vfd2lkdGg9JWRcbiIsCi0JCQlp bnRmX3dpZHRoLCBkc2MgPyBkc2MtPnNsaWNlX3dpZHRoIDogLTEpOwotCQlyZXR1cm47Ci0JfQot Ci0Jc2xpY2VfcGVyX3BrdCA9IGRzYy0+c2xpY2VfcGVyX3BrdDsKLQlzbGljZV9wZXJfaW50ZiA9 IERJVl9ST1VORF9VUChpbnRmX3dpZHRoLCBkc2MtPnNsaWNlX3dpZHRoKTsKLQotCS8qCi0JICog SWYgc2xpY2VfcGVyX3BrdCBpcyBncmVhdGVyIHRoYW4gc2xpY2VfcGVyX2ludGYgdGhlbiBkZWZh dWx0IHRvIDEuCi0JICogVGhpcyBjYW4gaGFwcGVuIGR1cmluZyBwYXJ0aWFsIHVwZGF0ZS4KLQkg Ki8KLQlpZiAoc2xpY2VfcGVyX3BrdCA+IHNsaWNlX3Blcl9pbnRmKQotCQlzbGljZV9wZXJfcGt0 ID0gMTsKLQotCWJ5dGVzX2luX3NsaWNlID0gRElWX1JPVU5EX1VQKGRzYy0+c2xpY2Vfd2lkdGgg KiBkc2MtPmJwcCwgOCk7Ci0JdG90YWxfYnl0ZXNfcGVyX2ludGYgPSBieXRlc19pbl9zbGljZSAq IHNsaWNlX3Blcl9pbnRmOwotCi0JZHNjLT5lb2xfYnl0ZV9udW0gPSB0b3RhbF9ieXRlc19wZXJf aW50ZiAlIDM7Ci0JZHNjLT5wY2xrX3Blcl9saW5lID0gIERJVl9ST1VORF9VUCh0b3RhbF9ieXRl c19wZXJfaW50ZiwgMyk7Ci0JZHNjLT5ieXRlc19pbl9zbGljZSA9IGJ5dGVzX2luX3NsaWNlOwot CWRzYy0+Ynl0ZXNfcGVyX3BrdCA9IGJ5dGVzX2luX3NsaWNlICogc2xpY2VfcGVyX3BrdDsKLQlk c2MtPnBrdF9wZXJfbGluZSA9IHNsaWNlX3Blcl9pbnRmIC8gc2xpY2VfcGVyX3BrdDsKLX0KLQot Ci1pbnQgZHNpX2RzY19wb3B1bGF0ZV9zdGF0aWNfcGFyYW0oc3RydWN0IG1zbV9kaXNwbGF5X2Rz Y19pbmZvICpkc2MpCi17Ci0JaW50IGJwcCwgYnBjOwotCWludCBtdXhfd29yZHNfc2l6ZTsKLQlp bnQgZ3JvdXBzX3Blcl9saW5lLCBncm91cHNfdG90YWw7Ci0JaW50IG1pbl9yYXRlX2J1ZmZlcl9z aXplOwotCWludCBocmRfZGVsYXk7Ci0JaW50IHByZV9udW1fZXh0cmFfbXV4X2JpdHMsIG51bV9l eHRyYV9tdXhfYml0czsKLQlpbnQgc2xpY2VfYml0czsKLQlpbnQgdGFyZ2V0X2JwcF94MTY7Ci0J aW50IGRhdGE7Ci0JaW50IGZpbmFsX3ZhbHVlLCBmaW5hbF9zY2FsZTsKLQlpbnQgcmF0aW9faW5k ZXg7Ci0KLQlkc2MtPnZlcnNpb24gPSAweDExOwotCWRzYy0+c2NyX3JldiA9IDA7Ci0JZHNjLT5y Y19tb2RlbF9zaXplID0gODE5MjsKLQlpZiAoZHNjLT52ZXJzaW9uID09IDB4MTEgJiYgZHNjLT5z Y3JfcmV2ID09IDB4MSkKLQkJZHNjLT5maXJzdF9saW5lX2JwZ19vZmZzZXQgPSAxNTsKLQllbHNl Ci0JCWRzYy0+Zmlyc3RfbGluZV9icGdfb2Zmc2V0ID0gMTI7Ci0KLQlkc2MtPmVkZ2VfZmFjdG9y ID0gNjsKLQlkc2MtPnRndF9vZmZzZXRfaGkgPSAzOwotCWRzYy0+dGd0X29mZnNldF9sbyA9IDM7 Ci0JZHNjLT5lbmFibGVfNDIyID0gMDsKLQlkc2MtPmNvbnZlcnRfcmdiID0gMTsKLQlkc2MtPnZi cl9lbmFibGUgPSAwOwotCi0JZHNjLT5idWZfdGhyZXNoID0gZHNpX2RzY19yY19idWZfdGhyZXNo OwotCi0JYnBwID0gZHNjLT5icHA7Ci0JYnBjID0gZHNjLT5icGM7Ci0KLQlpZiAoYnBjID09IDEy KQotCQlyYXRpb19pbmRleCA9IERTQ18xMkJQQ184QlBQOwotCWVsc2UgaWYgKGJwYyA9PSAxMCkK LQkJcmF0aW9faW5kZXggPSBEU0NfMTBCUENfOEJQUDsKLQllbHNlCi0JCXJhdGlvX2luZGV4ID0g RFNDXzhCUENfOEJQUDsKLQotCWlmIChkc2MtPnZlcnNpb24gPT0gMHgxMSAmJiBkc2MtPnNjcl9y ZXYgPT0gMHgxKSB7Ci0JCWRzYy0+cmFuZ2VfbWluX3FwID0KLQkJCWRzaV9kc2NfcmNfcmFuZ2Vf bWluX3FwXzFfMV9zY3IxW3JhdGlvX2luZGV4XTsKLQkJZHNjLT5yYW5nZV9tYXhfcXAgPQotCQkJ ZHNpX2RzY19yY19yYW5nZV9tYXhfcXBfMV8xX3NjcjFbcmF0aW9faW5kZXhdOwotCX0gZWxzZSB7 Ci0JCWRzYy0+cmFuZ2VfbWluX3FwID0gZHNpX2RzY19yY19yYW5nZV9taW5fcXBfMV8xW3JhdGlv X2luZGV4XTsKLQkJZHNjLT5yYW5nZV9tYXhfcXAgPSBkc2lfZHNjX3JjX3JhbmdlX21heF9xcF8x XzFbcmF0aW9faW5kZXhdOwotCX0KLQlkc2MtPnJhbmdlX2JwZ19vZmZzZXQgPSBkc2lfZHNjX3Jj X3JhbmdlX2JwZ19vZmZzZXQ7Ci0KLQlpZiAoYnBwID09IDgpCi0JCWRzYy0+aW5pdGlhbF9vZmZz ZXQgPSA2MTQ0OwotCWVsc2UKLQkJZHNjLT5pbml0aWFsX29mZnNldCA9IDIwNDg7CS8qIGJwcCA9 IDEyICovCi0KLQlpZiAoYnBjID09IDEyKQotCQltdXhfd29yZHNfc2l6ZSA9IDY0OwotCWVsc2UK LQkJbXV4X3dvcmRzX3NpemUgPSA0ODsJCS8qIGJwYyA9PSA4LzEwICovCi0KLQlpZiAoYnBjID09 IDgpIHsKLQkJZHNjLT5saW5lX2J1Zl9kZXB0aCA9IDk7Ci0JCWRzYy0+aW5wdXRfMTBfYml0cyA9 IDA7Ci0JCWRzYy0+bWluX3FwX2ZsYXRuZXNzID0gMzsKLQkJZHNjLT5tYXhfcXBfZmxhdG5lc3Mg PSAxMjsKLQkJZHNjLT5xdWFudF9pbmNyX2xpbWl0MCA9IDExOwotCQlkc2MtPnF1YW50X2luY3Jf bGltaXQxID0gMTE7Ci0JfSBlbHNlIGlmIChicGMgPT0gMTApIHsgLyogMTBicGMgKi8KLQkJZHNj LT5saW5lX2J1Zl9kZXB0aCA9IDExOwotCQlkc2MtPmlucHV0XzEwX2JpdHMgPSAxOwotCQlkc2Mt Pm1pbl9xcF9mbGF0bmVzcyA9IDc7Ci0JCWRzYy0+bWF4X3FwX2ZsYXRuZXNzID0gMTY7Ci0JCWRz Yy0+cXVhbnRfaW5jcl9saW1pdDAgPSAxNTsKLQkJZHNjLT5xdWFudF9pbmNyX2xpbWl0MSA9IDE1 OwotCX0gZWxzZSB7IC8qIDEyIGJwYyAqLwotCQlkc2MtPmxpbmVfYnVmX2RlcHRoID0gOTsKLQkJ ZHNjLT5pbnB1dF8xMF9iaXRzID0gMDsKLQkJZHNjLT5taW5fcXBfZmxhdG5lc3MgPSAxMTsKLQkJ ZHNjLT5tYXhfcXBfZmxhdG5lc3MgPSAyMDsKLQkJZHNjLT5xdWFudF9pbmNyX2xpbWl0MCA9IDE5 OwotCQlkc2MtPnF1YW50X2luY3JfbGltaXQxID0gMTk7Ci0JfQotCi0JZHNjLT5zbGljZV9sYXN0 X2dyb3VwX3NpemUgPSAzIC0gKGRzYy0+c2xpY2Vfd2lkdGggJSAzKTsKLQotCWRzYy0+ZGV0X3Ro cmVzaF9mbGF0bmVzcyA9IDcgKyAyKihicGMgLSA4KTsKLQotCWRzYy0+aW5pdGlhbF94bWl0X2Rl bGF5ID0gZHNjLT5yY19tb2RlbF9zaXplIC8gKDIgKiBicHApOwotCi0JZ3JvdXBzX3Blcl9saW5l ID0gRElWX1JPVU5EX1VQKGRzYy0+c2xpY2Vfd2lkdGgsIDMpOwotCi0JZHNjLT5jaHVua19zaXpl ID0gZHNjLT5zbGljZV93aWR0aCAqIGJwcCAvIDg7Ci0JaWYgKChkc2MtPnNsaWNlX3dpZHRoICog YnBwKSAlIDgpCi0JCWRzYy0+Y2h1bmtfc2l6ZSsrOwotCi0JLyogcmJzLW1pbiAqLwotCW1pbl9y YXRlX2J1ZmZlcl9zaXplID0gIGRzYy0+cmNfbW9kZWxfc2l6ZSAtIGRzYy0+aW5pdGlhbF9vZmZz ZXQgKwotCQkJZHNjLT5pbml0aWFsX3htaXRfZGVsYXkgKiBicHAgKwotCQkJZ3JvdXBzX3Blcl9s aW5lICogZHNjLT5maXJzdF9saW5lX2JwZ19vZmZzZXQ7Ci0KLQlocmRfZGVsYXkgPSBESVZfUk9V TkRfVVAobWluX3JhdGVfYnVmZmVyX3NpemUsIGJwcCk7Ci0KLQlkc2MtPmluaXRpYWxfZGVjX2Rl bGF5ID0gaHJkX2RlbGF5IC0gZHNjLT5pbml0aWFsX3htaXRfZGVsYXk7Ci0KLQlkc2MtPmluaXRp YWxfc2NhbGVfdmFsdWUgPSA4ICogZHNjLT5yY19tb2RlbF9zaXplIC8KLQkJCShkc2MtPnJjX21v ZGVsX3NpemUgLSBkc2MtPmluaXRpYWxfb2Zmc2V0KTsKLQotCXNsaWNlX2JpdHMgPSA4ICogZHNj LT5jaHVua19zaXplICogZHNjLT5zbGljZV9oZWlnaHQ7Ci0KLQlncm91cHNfdG90YWwgPSBncm91 cHNfcGVyX2xpbmUgKiBkc2MtPnNsaWNlX2hlaWdodDsKLQotCWRhdGEgPSBkc2MtPmZpcnN0X2xp bmVfYnBnX29mZnNldCAqIDIwNDg7Ci0KLQlkc2MtPm5mbF9icGdfb2Zmc2V0ID0gRElWX1JPVU5E X1VQKGRhdGEsIChkc2MtPnNsaWNlX2hlaWdodCAtIDEpKTsKLQotCXByZV9udW1fZXh0cmFfbXV4 X2JpdHMgPSAzICogKG11eF93b3Jkc19zaXplICsgKDQgKiBicGMgKyA0KSAtIDIpOwotCi0JbnVt X2V4dHJhX211eF9iaXRzID0gcHJlX251bV9leHRyYV9tdXhfYml0cyAtIChtdXhfd29yZHNfc2l6 ZSAtCi0JCSgoc2xpY2VfYml0cyAtIHByZV9udW1fZXh0cmFfbXV4X2JpdHMpICUgbXV4X3dvcmRz X3NpemUpKTsKLQotCWRhdGEgPSAyMDQ4ICogKGRzYy0+cmNfbW9kZWxfc2l6ZSAtIGRzYy0+aW5p dGlhbF9vZmZzZXQKLQkJKyBudW1fZXh0cmFfbXV4X2JpdHMpOwotCWRzYy0+c2xpY2VfYnBnX29m ZnNldCA9IERJVl9ST1VORF9VUChkYXRhLCBncm91cHNfdG90YWwpOwotCi0JLyogYnBwICogMTYg KyAwLjUgKi8KLQlkYXRhID0gYnBwICogMTY7Ci0JZGF0YSAqPSAyOwotCWRhdGErKzsKLQlkYXRh IC89IDI7Ci0JdGFyZ2V0X2JwcF94MTYgPSBkYXRhOwotCi0JZGF0YSA9IChkc2MtPmluaXRpYWxf eG1pdF9kZWxheSAqIHRhcmdldF9icHBfeDE2KSAvIDE2OwotCWZpbmFsX3ZhbHVlID0gIGRzYy0+ cmNfbW9kZWxfc2l6ZSAtIGRhdGEgKyBudW1fZXh0cmFfbXV4X2JpdHM7Ci0KLQlmaW5hbF9zY2Fs ZSA9IDggKiBkc2MtPnJjX21vZGVsX3NpemUgLwotCQkoZHNjLT5yY19tb2RlbF9zaXplIC0gZmlu YWxfdmFsdWUpOwotCi0JZHNjLT5maW5hbF9vZmZzZXQgPSBmaW5hbF92YWx1ZTsKLQotCWRhdGEg PSAoZmluYWxfc2NhbGUgLSA5KSAqIChkc2MtPm5mbF9icGdfb2Zmc2V0ICsKLQkJZHNjLT5zbGlj ZV9icGdfb2Zmc2V0KTsKLQlkc2MtPnNjYWxlX2luY3JlbWVudF9pbnRlcnZhbCA9ICgyMDQ4ICog ZHNjLT5maW5hbF9vZmZzZXQpIC8gZGF0YTsKLQotCWRzYy0+c2NhbGVfZGVjcmVtZW50X2ludGVy dmFsID0gZ3JvdXBzX3Blcl9saW5lIC8KLQkJKGRzYy0+aW5pdGlhbF9zY2FsZV92YWx1ZSAtIDgp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfcGh5X3Rp bWluZyhzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCQlzdHJ1Y3QgZGV2aWNlX25v ZGUgKm9mX25vZGUpCi17Ci0JY29uc3QgY2hhciAqZGF0YTsKLQl1MzIgbGVuLCBpOwotCWludCBy YyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGVfcHJpdl9pbmZvICpwcml2X2luZm87Ci0K LQlwcml2X2luZm8gPSBtb2RlLT5wcml2X2luZm87Ci0KLQlkYXRhID0gb2ZfZ2V0X3Byb3BlcnR5 KG9mX25vZGUsCi0JCQkicWNvbSxtZHNzLWRzaS1wYW5lbC1waHktdGltaW5ncyIsICZsZW4pOwot CWlmICghZGF0YSkgewotCQlwcl9kZWJ1ZygiVW5hYmxlIHRvIHJlYWQgUGh5IHRpbWluZyBzZXR0 aW5ncyIpOwotCX0gZWxzZSB7Ci0JCXByaXZfaW5mby0+cGh5X3RpbWluZ192YWwgPQotCQkJa3ph bGxvYygoc2l6ZW9mKHUzMikgKiBsZW4pLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwcml2X2luZm8t PnBoeV90aW1pbmdfdmFsKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJZm9yIChpID0gMDsgaSA8 IGxlbjsgaSsrKQotCQkJcHJpdl9pbmZvLT5waHlfdGltaW5nX3ZhbFtpXSA9IGRhdGFbaV07Ci0K LQkJcHJpdl9pbmZvLT5waHlfdGltaW5nX2xlbiA9IGxlbjsKLQl9OwotCi0JbW9kZS0+cGl4ZWxf Y2xrX2toeiA9IChEU0lfSF9UT1RBTCgmbW9kZS0+dGltaW5nKSAqCi0JCQlEU0lfVl9UT1RBTCgm bW9kZS0+dGltaW5nKSAqCi0JCQltb2RlLT50aW1pbmcucmVmcmVzaF9yYXRlKSAvIDEwMDA7Ci0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9kc2NfcGFyYW1zKHN0 cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zf bm9kZSkKLXsKLQl1MzIgZGF0YTsKLQlpbnQgcmMgPSAtRUlOVkFMOwotCWludCBpbnRmX3dpZHRo OwotCWNvbnN0IGNoYXIgKmNvbXByZXNzaW9uOwotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlX3By aXZfaW5mbyAqcHJpdl9pbmZvOwotCi0JaWYgKCFtb2RlIHx8ICFtb2RlLT5wcml2X2luZm8pCi0J CXJldHVybiAtRUlOVkFMOwotCi0JcHJpdl9pbmZvID0gbW9kZS0+cHJpdl9pbmZvOwotCi0JcHJp dl9pbmZvLT5kc2NfZW5hYmxlZCA9IGZhbHNlOwotCWNvbXByZXNzaW9uID0gb2ZfZ2V0X3Byb3Bl cnR5KG9mX25vZGUsICJxY29tLGNvbXByZXNzaW9uLW1vZGUiLCBOVUxMKTsKLQlpZiAoY29tcHJl c3Npb24gJiYgIXN0cmNtcChjb21wcmVzc2lvbiwgImRzYyIpKQotCQlwcml2X2luZm8tPmRzY19l bmFibGVkID0gdHJ1ZTsKLQotCWlmICghcHJpdl9pbmZvLT5kc2NfZW5hYmxlZCkgewotCQlwcl9k ZWJ1ZygiZHNjIGNvbXByZXNzaW9uIGlzIG5vdCBlbmFibGVkIGZvciB0aGUgbW9kZSIpOwotCQly ZXR1cm4gMDsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29t LG1kc3MtZHNjLXNsaWNlLWhlaWdodCIsICZkYXRhKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJm YWlsZWQgdG8gcGFyc2UgcWNvbSxtZHNzLWRzYy1zbGljZS1oZWlnaHRcbiIpOwotCQlnb3RvIGVy cm9yOwotCX0KLQlwcml2X2luZm8tPmRzYy5zbGljZV9oZWlnaHQgPSBkYXRhOwotCi0JcmMgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzYy1zbGljZS13aWR0aCIs ICZkYXRhKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgcWNvbSxtZHNz LWRzYy1zbGljZS13aWR0aFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXByaXZfaW5mby0+ZHNj LnNsaWNlX3dpZHRoID0gZGF0YTsKLQotCWludGZfd2lkdGggPSBtb2RlLT50aW1pbmcuaF9hY3Rp dmU7Ci0JaWYgKGludGZfd2lkdGggJSBwcml2X2luZm8tPmRzYy5zbGljZV93aWR0aCkgewotCQlw cl9lcnIoImludmFsaWQgc2xpY2Ugd2lkdGggZm9yIHRoZSBwYW5lbFxuIik7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0JcHJpdl9pbmZvLT5kc2MucGljX3dpZHRoID0gbW9kZS0+dGltaW5nLmhfYWN0 aXZlOwotCXByaXZfaW5mby0+ZHNjLnBpY19oZWlnaHQgPSBtb2RlLT50aW1pbmcudl9hY3RpdmU7 Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNjLXNs aWNlLXBlci1wa3QiLAotCQkJJmRhdGEpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0 byBwYXJzZSBxY29tLG1kc3MtZHNjLXNsaWNlLXBlci1wa3RcbiIpOwotCQlnb3RvIGVycm9yOwot CX0KLQlwcml2X2luZm8tPmRzYy5zbGljZV9wZXJfcGt0ID0gZGF0YTsKLQotCXJjID0gb2ZfcHJv cGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2MtYml0LXBlci1jb21wb25lbnQi LAotCQkmZGF0YSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHFjb20s bWRzcy1kc2MtYml0LXBlci1jb21wb25lbnRcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQlwcml2 X2luZm8tPmRzYy5icGMgPSBkYXRhOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9u b2RlLCAicWNvbSxtZHNzLWRzYy1iaXQtcGVyLXBpeGVsIiwKLQkJCSZkYXRhKTsKLQlpZiAocmMp IHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgcWNvbSxtZHNzLWRzYy1iaXQtcGVyLXBpeGVs XG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JcHJpdl9pbmZvLT5kc2MuYnBwID0gZGF0YTsKLQot CXByaXZfaW5mby0+ZHNjLmJsb2NrX3ByZWRfZW5hYmxlID0gb2ZfcHJvcGVydHlfcmVhZF9ib29s KG9mX25vZGUsCi0JCSJxY29tLG1kc3MtZHNjLWJsb2NrLXByZWRpY3Rpb24tZW5hYmxlIik7Ci0K LQlwcml2X2luZm8tPmRzYy5mdWxsX2ZyYW1lX3NsaWNlcyA9IERJVl9ST1VORF9VUChpbnRmX3dp ZHRoLAotCQlwcml2X2luZm8tPmRzYy5zbGljZV93aWR0aCk7Ci0KLQlkc2lfZHNjX3BvcHVsYXRl X3N0YXRpY19wYXJhbSgmcHJpdl9pbmZvLT5kc2MpOwotCWRzaV9kc2NfcGNsa19wYXJhbV9jYWxj KCZwcml2X2luZm8tPmRzYywgaW50Zl93aWR0aCk7Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0K LQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfaGRyX2NvbmZpZyhzdHJ1Y3QgZHNpX3BhbmVs ICpwYW5lbCwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQotCWlu dCByYyA9IDA7Ci0Jc3RydWN0IGRybV9wYW5lbF9oZHJfcHJvcGVydGllcyAqaGRyX3Byb3A7Ci0K LQloZHJfcHJvcCA9ICZwYW5lbC0+aGRyX3Byb3BzOwotCWhkcl9wcm9wLT5oZHJfZW5hYmxlZCA9 IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkicWNvbSxtZHNzLWRzaS1wYW5lbC1o ZHItZW5hYmxlZCIpOwotCi0JaWYgKGhkcl9wcm9wLT5oZHJfZW5hYmxlZCkgewotCQlyYyA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG9mX25vZGUsCi0JCQkJInFjb20sbWRzcy1kc2ktcGFu ZWwtaGRyLWNvbG9yLXByaW1hcmllcyIsCi0JCQkJaGRyX3Byb3AtPmRpc3BsYXlfcHJpbWFyaWVz LAotCQkJCURJU1BMQVlfUFJJTUFSSUVTX01BWCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCIl czolZCwgVW5hYmxlIHRvIHJlYWQgY29sb3IgcHJpbWFyaWVzLHJjOiV1IiwKLQkJCQkJX19mdW5j X18sIF9fTElORV9fLCByYyk7Ci0JCQloZHJfcHJvcC0+aGRyX2VuYWJsZWQgPSBmYWxzZTsKLQkJ CXJldHVybiByYzsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwK LQkJCSJxY29tLG1kc3MtZHNpLXBhbmVsLXBlYWstYnJpZ2h0bmVzcyIsCi0JCQkmKGhkcl9wcm9w LT5wZWFrX2JyaWdodG5lc3MpKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIiVzOiVkLCBVbmFi bGUgdG8gcmVhZCBoZHIgYnJpZ2h0bmVzcywgcmM6JXUiLAotCQkJCV9fZnVuY19fLCBfX0xJTkVf XywgcmMpOwotCQkJaGRyX3Byb3AtPmhkcl9lbmFibGVkID0gZmFsc2U7Ci0JCQlyZXR1cm4gcmM7 Ci0JCX0KLQotCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsCi0JCQkicWNvbSxt ZHNzLWRzaS1wYW5lbC1ibGFja25lc3MtbGV2ZWwiLAotCQkJJihoZHJfcHJvcC0+YmxhY2tuZXNz X2xldmVsKSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCIlczolZCwgVW5hYmxlIHRvIHJlYWQg aGRyIGJyaWdodG5lc3MsIHJjOiV1IiwKLQkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJjKTsKLQkJ CWhkcl9wcm9wLT5oZHJfZW5hYmxlZCA9IGZhbHNlOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQot CXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV90b3BvbG9neSgKLQkJ c3RydWN0IGRzaV9kaXNwbGF5X21vZGVfcHJpdl9pbmZvICpwcml2X2luZm8sCi0JCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqb2Zfbm9kZSwgaW50IHRvcG9sb2d5X292ZXJyaWRlKQotewotCXN0cnVjdCBt c21fZGlzcGxheV90b3BvbG9neSAqdG9wb2xvZ3k7Ci0JdTMyIHRvcF9jb3VudCwgdG9wX3NlbCwg KmFycmF5ID0gTlVMTDsKLQlpbnQgaSwgbGVuID0gMDsKLQlpbnQgcmMgPSAtRUlOVkFMOwotCi0J bGVuID0gb2ZfcHJvcGVydHlfY291bnRfdTMyX2VsZW1zKG9mX25vZGUsICJxY29tLGRpc3BsYXkt dG9wb2xvZ3kiKTsKLQlpZiAobGVuIDw9IDAgfHwgbGVuICUgVE9QT0xPR1lfU0VUX0xFTiB8fAot CQkJbGVuID4gKFRPUE9MT0dZX1NFVF9MRU4gKiBNQVhfVE9QT0xPR1kpKSB7Ci0JCXByX2Vycigi aW52YWxpZCB0b3BvbG9neSBsaXN0IGZvciB0aGUgcGFuZWwsIHJjID0gJWRcbiIsIHJjKTsKLQkJ cmV0dXJuIHJjOwotCX0KLQotCXRvcF9jb3VudCA9IGxlbiAvIFRPUE9MT0dZX1NFVF9MRU47Ci0K LQlhcnJheSA9IGtjYWxsb2MobGVuLCBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFh cnJheSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2Fy cmF5KG9mX25vZGUsCi0JCQkicWNvbSxkaXNwbGF5LXRvcG9sb2d5IiwgYXJyYXksIGxlbik7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigidW5hYmxlIHRvIHJlYWQgdGhlIGRpc3BsYXkgdG9wb2xvZ2ll cywgcmMgPSAlZFxuIiwgcmMpOwotCQlnb3RvIHJlYWRfZmFpbDsKLQl9Ci0KLQl0b3BvbG9neSA9 IGtjYWxsb2ModG9wX2NvdW50LCBzaXplb2YoKnRvcG9sb2d5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCF0b3BvbG9neSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gcmVhZF9mYWlsOwotCX0KLQot CWZvciAoaSA9IDA7IGkgPCB0b3BfY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgbXNtX2Rpc3BsYXlf dG9wb2xvZ3kgKnRvcCA9ICZ0b3BvbG9neVtpXTsKLQotCQl0b3AtPm51bV9sbSA9IGFycmF5W2kg KiBUT1BPTE9HWV9TRVRfTEVOXTsKLQkJdG9wLT5udW1fZW5jID0gYXJyYXlbaSAqIFRPUE9MT0dZ X1NFVF9MRU4gKyAxXTsKLQkJdG9wLT5udW1faW50ZiA9IGFycmF5W2kgKiBUT1BPTE9HWV9TRVRf TEVOICsgMl07Ci0JfTsKLQotCWlmICh0b3BvbG9neV9vdmVycmlkZSA+PSAwICYmIHRvcG9sb2d5 X292ZXJyaWRlIDwgdG9wX2NvdW50KSB7Ci0JCXByX2RlYnVnKCJvdmVycmlkZSB0b3BvbG9neTog Y2ZnOiVkIGxtOiVkIGNvbXBfZW5jOiVkIGludGY6JWRcbiIsCi0JCQl0b3BvbG9neV9vdmVycmlk ZSwKLQkJCXRvcG9sb2d5W3RvcG9sb2d5X292ZXJyaWRlXS5udW1fbG0sCi0JCQl0b3BvbG9neVt0 b3BvbG9neV9vdmVycmlkZV0ubnVtX2VuYywKLQkJCXRvcG9sb2d5W3RvcG9sb2d5X292ZXJyaWRl XS5udW1faW50Zik7Ci0JCXRvcF9zZWwgPSB0b3BvbG9neV9vdmVycmlkZTsKLQkJZ290byBwYXJz ZV9kb25lOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwKLQkJCSJx Y29tLGRlZmF1bHQtdG9wb2xvZ3ktaW5kZXgiLCAmdG9wX3NlbCk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2Vycigibm8gZGVmYXVsdCB0b3BvbG9neSBzZWxlY3RlZCwgcmMgPSAlZFxuIiwgcmMpOwotCQln b3RvIHBhcnNlX2ZhaWw7Ci0JfQotCi0JaWYgKHRvcF9zZWwgPj0gdG9wX2NvdW50KSB7Ci0JCXJj ID0gLUVJTlZBTDsKLQkJcHJfZXJyKCJkZWZhdWx0IHRvcG9sb2d5IGlzIHNwZWNpZmllZCBpcyBu b3QgdmFsaWQsIHJjID0gJWRcbiIsCi0JCQlyYyk7Ci0JCWdvdG8gcGFyc2VfZmFpbDsKLQl9Ci0K LQlwcl9kZWJ1ZygiZGVmYXVsdCB0b3BvbG9neTogbG06ICVkIGNvbXBfZW5jOiVkIGludGY6ICVk XG4iLAotCQl0b3BvbG9neVt0b3Bfc2VsXS5udW1fbG0sCi0JCXRvcG9sb2d5W3RvcF9zZWxdLm51 bV9lbmMsCi0JCXRvcG9sb2d5W3RvcF9zZWxdLm51bV9pbnRmKTsKLQotcGFyc2VfZG9uZToKLQlt ZW1jcHkoJnByaXZfaW5mby0+dG9wb2xvZ3ksICZ0b3BvbG9neVt0b3Bfc2VsXSwKLQkJc2l6ZW9m KHN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSkpOwotcGFyc2VfZmFpbDoKLQlrZnJlZSh0b3Bv bG9neSk7Ci1yZWFkX2ZhaWw6Ci0Ja2ZyZWUoYXJyYXkpOwotCi0JcmV0dXJuIHJjOwotfQotCi1z dGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9kbXNfaW5mbyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5l bCwKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50IGRtc19lbmFibGVkOwot CWNvbnN0IGNoYXIgKmRhdGE7Ci0KLQlpZiAoIW9mX25vZGUgfHwgIXBhbmVsKSB7Ci0JCXByX2Vy cigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwYW5lbC0+ ZG1zX21vZGUgPSBEU0lfRE1TX01PREVfRElTQUJMRUQ7Ci0JZG1zX2VuYWJsZWQgPSBvZl9wcm9w ZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJInFjb20sZHluYW1pYy1tb2RlLXN3aXRjaC1lbmFi bGVkIik7Ci0JaWYgKCFkbXNfZW5hYmxlZCkKLQkJcmV0dXJuIDA7Ci0KLQlkYXRhID0gb2ZfZ2V0 X3Byb3BlcnR5KG9mX25vZGUsICJxY29tLGR5bmFtaWMtbW9kZS1zd2l0Y2gtdHlwZSIsIE5VTEwp OwotCWlmIChkYXRhICYmICFzdHJjbXAoZGF0YSwgImR5bmFtaWMtcmVzb2x1dGlvbi1zd2l0Y2gt aW1tZWRpYXRlIikpIHsKLQkJcGFuZWwtPmRtc19tb2RlID0gRFNJX0RNU19NT0RFX1JFU19TV0lU Q0hfSU1NRURJQVRFOwotCX0gZWxzZSB7Ci0JCXByX2VycigiWyVzXSB1bnN1cHBvcnRlZCBkeW5h bWljIHN3aXRjaCBtb2RlOiAlc1xuIiwKLQkJCQkJCQlwYW5lbC0+bmFtZSwgZGF0YSk7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfTsKLQotLyoKLSAqIFRoZSBsZW5ndGgg b2YgYWxsIHRoZSB2YWxpZCB2YWx1ZXMgdG8gYmUgY2hlY2tlZCBzaG91bGQgbm90IGJlIGdyZWF0 ZXIKLSAqIHRoYW4gdGhlIGxlbmd0aCBvZiByZXR1cm5lZCBkYXRhIGZyb20gcmVhZCBjb21tYW5k LgotICovCi1zdGF0aWMgYm9vbAotZHNpX3BhbmVsX3BhcnNlX2VzZF9jaGVja192YWxpZF9wYXJh bXMoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsIHUzMiBjb3VudCkKLXsKLQlpbnQgaTsKLQlzdHJ1 Y3QgZHJtX3BhbmVsX2VzZF9jb25maWcgKmNvbmZpZyA9ICZwYW5lbC0+ZXNkX2NvbmZpZzsKLQot CWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0JCWlmIChjb25maWctPnN0YXR1c192YWxp ZF9wYXJhbXNbaV0gPgotCQkJCWNvbmZpZy0+c3RhdHVzX2NtZHNfcmxlbltpXSkgewotCQkJcHJf ZGVidWcoImlnbm9yZSB2YWxpZCBwYXJhbXNcbiIpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0J fQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGRzaV9wYW5lbF9wYXJzZV9lc2Rf c3RhdHVzX2xlbihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCWNoYXIgKnByb3Bfa2V5LCB1MzIg Kip0YXJnZXQsIHUzMiBjbWRfY250KQotewotCWludCB0bXA7Ci0KLQlpZiAoIW9mX2ZpbmRfcHJv cGVydHkobnAsIHByb3Bfa2V5LCAmdG1wKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JdG1wIC89IHNp emVvZih1MzIpOwotCWlmICh0bXAgIT0gY21kX2NudCkgewotCQlwcl9lcnIoInJlcXVlc3QgcHJv cGVydHkoJWQpIGRvIG5vdCBtYXRjaCBjbWQgY291bnQoJWQpXG4iLAotCQkJCXRtcCwgY21kX2Nu dCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkqdGFyZ2V0ID0ga2NhbGxvYyh0bXAsIHNpemVv Zih1MzIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoKnRhcmdldCkpIHsKLQkJ cHJfZXJyKCJFcnJvciBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgcHJvcGVydHlcbiIpOwotCQlyZXR1 cm4gZmFsc2U7Ci0JfQotCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG5wLCBwcm9w X2tleSwgKnRhcmdldCwgdG1wKSkgewotCQlwcl9lcnIoImNhbm5vdCBnZXQgdmFsdWVzIGZyb20g ZHRzXG4iKTsKLQkJa2ZyZWUoKnRhcmdldCk7Ci0JCSp0YXJnZXQgPSBOVUxMOwotCQlyZXR1cm4g ZmFsc2U7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9wYW5lbF9l c2RfY29uZmlnX2RlaW5pdChzdHJ1Y3QgZHJtX3BhbmVsX2VzZF9jb25maWcgKmVzZF9jb25maWcp Ci17Ci0Ja2ZyZWUoZXNkX2NvbmZpZy0+cmV0dXJuX2J1Zik7Ci0Ja2ZyZWUoZXNkX2NvbmZpZy0+ c3RhdHVzX3ZhbHVlKTsKLQlrZnJlZShlc2RfY29uZmlnLT5zdGF0dXNfdmFsaWRfcGFyYW1zKTsK LQlrZnJlZShlc2RfY29uZmlnLT5zdGF0dXNfY21kc19ybGVuKTsKLQlrZnJlZShlc2RfY29uZmln LT5zdGF0dXNfY21kLmNtZHMpOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9lc2Rf Y29uZmlnKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJCSAgICAgc3RydWN0IGRldmljZV9u b2RlICpvZl9ub2RlKQotewotCWludCByYyA9IDA7Ci0JdTMyIHRtcDsKLQl1MzIgaSwgc3RhdHVz X2xlbiwgKmxlbnA7Ci0Jc3RydWN0IHByb3BlcnR5ICpkYXRhOwotCWNvbnN0IGNoYXIgKnN0cmlu ZzsKLQlzdHJ1Y3QgZHJtX3BhbmVsX2VzZF9jb25maWcgKmVzZF9jb25maWc7Ci0KLQllc2RfY29u ZmlnID0gJnBhbmVsLT5lc2RfY29uZmlnOwotCWVzZF9jb25maWctPmVzZF9lbmFibGVkID0gb2Zf cHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0JCSJxY29tLGVzZC1jaGVjay1lbmFibGVkIik7 Ci0KLQlpZiAoIWVzZF9jb25maWctPmVzZF9lbmFibGVkKQotCQlyZXR1cm4gMDsKLQotCXJjID0g b2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3MtZHNpLXBhbmVs LXN0YXR1cy1jaGVjay1tb2RlIiwgJnN0cmluZyk7Ci0JaWYgKCFyYykgewotCQlpZiAoIXN0cmNt cChzdHJpbmcsICJidGFfY2hlY2siKSkgewotCQkJZXNkX2NvbmZpZy0+c3RhdHVzX21vZGUgPSBF U0RfTU9ERV9TV19CVEE7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChzdHJpbmcsICJyZWdfcmVhZCIp KSB7Ci0JCQllc2RfY29uZmlnLT5zdGF0dXNfbW9kZSA9IEVTRF9NT0RFX1JFR19SRUFEOwotCQl9 IGVsc2UgaWYgKCFzdHJjbXAoc3RyaW5nLCAidGVfc2lnbmFsX2NoZWNrIikpIHsKLQkJCWlmIChw YW5lbC0+cGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpIHsKLQkJCQllc2RfY29uZmlnLT5z dGF0dXNfbW9kZSA9IEVTRF9NT0RFX1BBTkVMX1RFOwotCQkJfSBlbHNlIHsKLQkJCQlwcl9lcnIo IlRFLUVTRCBub3QgdmFsaWQgZm9yIHZpZGVvIG1vZGVcbiIpOwotCQkJCXJjID0gLUVJTlZBTDsK LQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9IGVsc2UgewotCQkJcHJfZXJyKCJObyB2YWxpZCBw YW5lbC1zdGF0dXMtY2hlY2stbW9kZSBzdHJpbmdcbiIpOwotCQkJcmMgPSAtRUlOVkFMOwotCQkJ Z290byBlcnJvcjsKLQkJfQotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCJzdGF0dXMgY2hlY2sgbWV0 aG9kIG5vdCBkZWZpbmVkIVxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQlpZiAoKGVzZF9jb25maWctPnN0YXR1c19tb2RlID09IEVTRF9NT0RFX1NXX0JUQSkgfHwK LQkJKGVzZF9jb25maWctPnN0YXR1c19tb2RlID09IEVTRF9NT0RFX1BBTkVMX1RFKSkKLQkJcmV0 dXJuIDA7Ci0KLQlkc2lfcGFuZWxfcGFyc2VfY21kX3NldHNfc3ViKCZlc2RfY29uZmlnLT5zdGF0 dXNfY21kLAotCQkJCURTSV9DTURfU0VUX1BBTkVMX1NUQVRVUywgb2Zfbm9kZSk7Ci0JaWYgKCFl c2RfY29uZmlnLT5zdGF0dXNfY21kLmNvdW50KSB7Ci0JCXByX2VycigicGFuZWwgc3RhdHVzIGNv bW1hbmQgcGFyc2luZyBmYWlsZWRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7 Ci0JfQotCi0JaWYgKCFkc2lfcGFuZWxfcGFyc2VfZXNkX3N0YXR1c19sZW4ob2Zfbm9kZSwKLQkJ InFjb20sbWRzcy1kc2ktcGFuZWwtc3RhdHVzLXJlYWQtbGVuZ3RoIiwKLQkJCSZwYW5lbC0+ZXNk X2NvbmZpZy5zdGF0dXNfY21kc19ybGVuLAotCQkJCWVzZF9jb25maWctPnN0YXR1c19jbWQuY291 bnQpKSB7Ci0JCXByX2VycigiSW52YWxpZCBzdGF0dXMgcmVhZCBsZW5ndGhcbiIpOwotCQlyYyA9 IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3IxOwotCX0KLQotCWlmIChkc2lfcGFuZWxfcGFyc2VfZXNk X3N0YXR1c19sZW4ob2Zfbm9kZSwKLQkJInFjb20sbWRzcy1kc2ktcGFuZWwtc3RhdHVzLXZhbGlk LXBhcmFtcyIsCi0JCQkmcGFuZWwtPmVzZF9jb25maWcuc3RhdHVzX3ZhbGlkX3BhcmFtcywKLQkJ CQllc2RfY29uZmlnLT5zdGF0dXNfY21kLmNvdW50KSkgewotCQlpZiAoIWRzaV9wYW5lbF9wYXJz ZV9lc2RfY2hlY2tfdmFsaWRfcGFyYW1zKHBhbmVsLAotCQkJCQllc2RfY29uZmlnLT5zdGF0dXNf Y21kLmNvdW50KSkgewotCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBlcnJvcjI7Ci0JCX0KLQl9 Ci0KLQlzdGF0dXNfbGVuID0gMDsKLQlsZW5wID0gZXNkX2NvbmZpZy0+c3RhdHVzX3ZhbGlkX3Bh cmFtcyA/OiBlc2RfY29uZmlnLT5zdGF0dXNfY21kc19ybGVuOwotCWZvciAoaSA9IDA7IGkgPCBl c2RfY29uZmlnLT5zdGF0dXNfY21kLmNvdW50OyArK2kpCi0JCXN0YXR1c19sZW4gKz0gbGVucFtp XTsKLQotCWlmICghc3RhdHVzX2xlbikgewotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3Iy OwotCX0KLQotCS8qCi0JICogU29tZSBwYW5lbCBtYXkgbmVlZCBtdWx0aXBsZSByZWFkIGNvbW1h bmRzIHRvIHByb3Blcmx5Ci0JICogY2hlY2sgcGFuZWwgc3RhdHVzLiBEbyBhIHNhbml0eSBjaGVj ayBmb3IgcHJvcGVyIHN0YXR1cwotCSAqIHZhbHVlIHdoaWNoIHdpbGwgYmUgY29tcGFyZWQgd2l0 aCB0aGUgdmFsdWUgcmVhZCBieSBkc2kKLQkgKiBjb250cm9sbGVyIGR1cmluZyBFU0QgY2hlY2su IEFsc28gY2hlY2sgaWYgbXVsdGlwbGUgcmVhZAotCSAqIGNvbW1hbmRzIGFyZSB0aGVyZSB0aGVu LCB0aGVyZSBzaG91bGQgYmUgY29ycmVzcG9uZGluZwotCSAqIHN0YXR1cyBjaGVjayB2YWx1ZXMg Zm9yIGVhY2ggcmVhZCBjb21tYW5kLgotCSAqLwotCWRhdGEgPSBvZl9maW5kX3Byb3BlcnR5KG9m X25vZGUsCi0JCQkicWNvbSxtZHNzLWRzaS1wYW5lbC1zdGF0dXMtdmFsdWUiLCAmdG1wKTsKLQl0 bXAgLz0gc2l6ZW9mKHUzMik7Ci0JaWYgKCFJU19FUlJfT1JfTlVMTChkYXRhKSAmJiB0bXAgIT0g MCAmJiAodG1wICUgc3RhdHVzX2xlbikgPT0gMCkgewotCQllc2RfY29uZmlnLT5ncm91cHMgPSB0 bXAgLyBzdGF0dXNfbGVuOwotCX0gZWxzZSB7Ci0JCXByX2VycigiZXJyb3IgcGFyc2UgcGFuZWwt c3RhdHVzLXZhbHVlXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yMjsKLQl9Ci0K LQllc2RfY29uZmlnLT5zdGF0dXNfdmFsdWUgPQotCQlremFsbG9jKHNpemVvZih1MzIpICogc3Rh dHVzX2xlbiAqIGVzZF9jb25maWctPmdyb3VwcywKLQkJCUdGUF9LRVJORUwpOwotCWlmICghZXNk X2NvbmZpZy0+c3RhdHVzX3ZhbHVlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJvcjI7 Ci0JfQotCi0JZXNkX2NvbmZpZy0+cmV0dXJuX2J1ZiA9IGtjYWxsb2Moc3RhdHVzX2xlbiAqIGVz ZF9jb25maWctPmdyb3VwcywKLQkJCXNpemVvZih1bnNpZ25lZCBjaGFyKSwgR0ZQX0tFUk5FTCk7 Ci0JaWYgKCFlc2RfY29uZmlnLT5yZXR1cm5fYnVmKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290 byBlcnJvcjM7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShvZl9ub2Rl LAotCQkicWNvbSxtZHNzLWRzaS1wYW5lbC1zdGF0dXMtdmFsdWUiLAotCQllc2RfY29uZmlnLT5z dGF0dXNfdmFsdWUsIGVzZF9jb25maWctPmdyb3VwcyAqIHN0YXR1c19sZW4pOwotCWlmIChyYykg ewotCQlwcl9kZWJ1ZygiZXJyb3IgcmVhZGluZyBwYW5lbCBzdGF0dXMgdmFsdWVzXG4iKTsKLQkJ bWVtc2V0KGVzZF9jb25maWctPnN0YXR1c192YWx1ZSwgMCwKLQkJCQllc2RfY29uZmlnLT5ncm91 cHMgKiBzdGF0dXNfbGVuKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyb3IzOgotCWtmcmVlKGVz ZF9jb25maWctPnN0YXR1c192YWx1ZSk7Ci1lcnJvcjI6Ci0Ja2ZyZWUoZXNkX2NvbmZpZy0+c3Rh dHVzX3ZhbGlkX3BhcmFtcyk7Ci0Ja2ZyZWUoZXNkX2NvbmZpZy0+c3RhdHVzX2NtZHNfcmxlbik7 Ci1lcnJvcjE6Ci0Ja2ZyZWUoZXNkX2NvbmZpZy0+c3RhdHVzX2NtZC5jbWRzKTsKLWVycm9yOgot CXBhbmVsLT5lc2RfY29uZmlnLmVzZF9lbmFibGVkID0gZmFsc2U7Ci0JcmV0dXJuIHJjOwotfQot Ci1zdHJ1Y3QgZHNpX3BhbmVsICpkc2lfcGFuZWxfZ2V0KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwK LQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsCi0JCQkJaW50IHRvcG9sb2d5X292ZXJy aWRlKQotewotCXN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsOwotCWludCByYyA9IDA7Ci0KLQlwYW5l bCA9IGt6YWxsb2Moc2l6ZW9mKCpwYW5lbCksIEdGUF9LRVJORUwpOwotCWlmICghcGFuZWwpCi0J CXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JcGFuZWwtPm5hbWUgPSBvZl9nZXRfcHJvcGVy dHkob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktcGFuZWwtbmFtZSIsCi0JCQkJICAgICAgTlVMTCk7 Ci0JaWYgKCFwYW5lbC0+bmFtZSkKLQkJcGFuZWwtPm5hbWUgPSBEU0lfUEFORUxfREVGQVVMVF9M QUJFTDsKLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX2hvc3RfY29uZmlnKHBhbmVsLCBvZl9ub2Rl KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgaG9zdCBjb25maWd1cmF0 aW9uLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gZHNpX3BhbmVs X3BhcnNlX3BhbmVsX21vZGUocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykgewotCQlwcl9lcnIo ImZhaWxlZCB0byBwYXJzZSBwYW5lbCBtb2RlIGNvbmZpZ3VyYXRpb24sIHJjPSVkXG4iLCByYyk7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfZGZwc19jYXBzKCZw YW5lbC0+ZGZwc19jYXBzLCBvZl9ub2RlLCBwYW5lbC0+bmFtZSk7Ci0JaWYgKHJjKQotCQlwcl9l cnIoImZhaWxlZCB0byBwYXJzZSBkZnBzIGNvbmZpZ3VyYXRpb24sIHJjPSVkXG4iLCByYyk7Ci0K LQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9waHlfcHJvcHMoJnBhbmVsLT5waHlfcHJvcHMsIG9mX25v ZGUsIHBhbmVsLT5uYW1lKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ug cGFuZWwgcGh5c2ljYWwgZGltZW5zaW9uLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwot CX0KLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX3Bvd2VyX2NmZyhwYXJlbnQsIHBhbmVsLCBvZl9u b2RlKTsKLQlpZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHBvd2VyIGNvbmZpZywg cmM9JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX2dwaW9zKHBhbmVsLCBvZl9u b2RlKTsKLQlpZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHBhbmVsIGdwaW9zLCBy Yz0lZFxuIiwgcmMpOwotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfYmxfY29uZmlnKHBhbmVsLCBv Zl9ub2RlKTsKLQlpZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGJhY2tsaWdodCBj b25maWcsIHJjPSVkXG4iLCByYyk7Ci0KLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX21pc2NfZmVh dHVyZXMocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFy c2UgbWlzYyBmZWF0dXJlcywgcmM9JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX3BhbmVsX3BhcnNl X2hkcl9jb25maWcocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQg dG8gcGFyc2UgaGRyIGNvbmZpZywgcmM9JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX3BhbmVsX2dl dF9tb2RlX2NvdW50KHBhbmVsLCBvZl9ub2RlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWls ZWQgdG8gZ2V0IG1vZGUgY291bnQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfZG1zX2luZm8ocGFuZWwsIG9mX25vZGUpOwotCWlmIChy YykKLQkJcHJfZGVidWcoImZhaWxlZCB0byBnZXQgZG1zIGluZm8sIHJjPSVkXG4iLCByYyk7Ci0K LQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9lc2RfY29uZmlnKHBhbmVsLCBvZl9ub2RlKTsKLQlpZiAo cmMpIHsKLQkJcHJfZGVidWcoImZhaWxlZCB0byBwYXJzZSBlc2QgY29uZmlnLCByYz0lZFxuIiwg cmMpOwotCX0gZWxzZSB7Ci0JCXU4ICplc2RfbW9kZSA9IE5VTEw7Ci0KLQkJaWYgKHBhbmVsLT5l c2RfY29uZmlnLnN0YXR1c19tb2RlID09IEVTRF9NT0RFX1JFR19SRUFEKQotCQkJZXNkX21vZGUg PSAicmVnaXN0ZXJfcmVhZCI7Ci0JCWVsc2UgaWYgKHBhbmVsLT5lc2RfY29uZmlnLnN0YXR1c19t b2RlID09IEVTRF9NT0RFX1NXX0JUQSkKLQkJCWVzZF9tb2RlID0gImJ0YV90cmlnZ2VyIjsKLQkJ ZWxzZSBpZiAocGFuZWwtPmVzZF9jb25maWcuc3RhdHVzX21vZGUgPT0gIEVTRF9NT0RFX1BBTkVM X1RFKQotCQkJZXNkX21vZGUgPSAidGVfY2hlY2siOwotCi0JCXByX2luZm8oIkVTRCBlbmFibGVk IHdpdGggbW9kZTogJXNcbiIsIGVzZF9tb2RlKTsKLQl9Ci0KLQlwYW5lbC0+cGFuZWxfb2Zfbm9k ZSA9IG9mX25vZGU7Ci0JZHJtX3BhbmVsX2luaXQoJnBhbmVsLT5kcm1fcGFuZWwpOwotCW11dGV4 X2luaXQoJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlwYW5lbC0+cGFyZW50ID0gcGFyZW50OwotCXJl dHVybiBwYW5lbDsKLWVycm9yOgotCWtmcmVlKHBhbmVsKTsKLQlyZXR1cm4gRVJSX1BUUihyYyk7 Ci19Ci0KLXZvaWQgZHNpX3BhbmVsX3B1dChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQkv KiBmcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIEVTRCBjaGVjayAqLwotCWRzaV9wYW5lbF9l c2RfY29uZmlnX2RlaW5pdCgmcGFuZWwtPmVzZF9jb25maWcpOwotCi0Ja2ZyZWUocGFuZWwpOwot fQotCi1pbnQgZHNpX3BhbmVsX2Rydl9pbml0KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkg ICAgICAgc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXY7Ci0KLQlpZiAoIXBhbmVsIHx8ICFob3N0KSB7Ci0JCXBy X2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRl eF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlkZXYgPSAmcGFuZWwtPm1pcGlfZGV2aWNl OwotCi0JZGV2LT5ob3N0ID0gaG9zdDsKLQkvKgotCSAqIFdlIGRvbnQgaGF2ZSBkZXZpY2Ugc3Ry dWN0dXJlIHNpbmNlIHBhbmVsIGlzIG5vdCBhIGRldmljZSBub2RlLgotCSAqIFdoZW4gdXNpbmcg ZHJtIHBhbmVsIGZyYW1ld29yaywgdGhlIGRldmljZSBpcyBwcm9iZWQgd2hlbiB0aGUgaG9zdCBp cwotCSAqIGNyZWF0ZS4KLQkgKi8KLQlkZXYtPmNoYW5uZWwgPSAwOwotCWRldi0+bGFuZXMgPSA0 OwotCi0JcGFuZWwtPmhvc3QgPSBob3N0OwotCXJjID0gZHNpX3BhbmVsX3ZyZWdfZ2V0KHBhbmVs KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBnZXQgcGFuZWwgcmVndWxh dG9ycywgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQlnb3RvIGV4aXQ7 Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfcGluY3RybF9pbml0KHBhbmVsKTsKLQlpZiAocmMpIHsK LQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBpbml0IHBpbmN0cmwsIHJjPSVkXG4iLCBwYW5lbC0+ bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX3ZyZWdfcHV0OwotCX0KLQotCXJjID0gZHNpX3BhbmVs X2dwaW9fcmVxdWVzdChwYW5lbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQg dG8gcmVxdWVzdCBncGlvcywgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLAotCQkgICAgICAgcmMpOwot CQlnb3RvIGVycm9yX3BpbmN0cmxfZGVpbml0OwotCX0KLQotCXJjID0gZHNpX3BhbmVsX2JsX3Jl Z2lzdGVyKHBhbmVsKTsKLQlpZiAocmMpIHsKLQkJaWYgKHJjICE9IC1FUFJPQkVfREVGRVIpCi0J CQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodCwgcmM9JWRcbiIsCi0J CQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9ncGlvX3JlbGVhc2U7Ci0J fQotCi0JZ290byBleGl0OwotCi1lcnJvcl9ncGlvX3JlbGVhc2U6Ci0JKHZvaWQpZHNpX3BhbmVs X2dwaW9fcmVsZWFzZShwYW5lbCk7Ci1lcnJvcl9waW5jdHJsX2RlaW5pdDoKLQkodm9pZClkc2lf cGFuZWxfcGluY3RybF9kZWluaXQocGFuZWwpOwotZXJyb3JfdnJlZ19wdXQ6Ci0JKHZvaWQpZHNp X3BhbmVsX3ZyZWdfcHV0KHBhbmVsKTsKLWV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFu ZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX2Rydl9kZWluaXQoc3Ry dWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGFuZWwpIHsK LQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCXJjID0gZHNpX3BhbmVsX2JsX3Vu cmVnaXN0ZXIocGFuZWwpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byB1bnJl Z2lzdGVyIGJhY2tsaWdodCwgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwot Ci0JcmMgPSBkc2lfcGFuZWxfZ3Bpb19yZWxlYXNlKHBhbmVsKTsKLQlpZiAocmMpCi0JCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gcmVsZWFzZSBncGlvcywgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLAot CQkgICAgICAgcmMpOwotCi0JcmMgPSBkc2lfcGFuZWxfcGluY3RybF9kZWluaXQocGFuZWwpOwot CWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkZWluaXQgZ3Bpb3MsIHJjPSVkXG4i LCBwYW5lbC0+bmFtZSwKLQkJICAgICAgIHJjKTsKLQotCXJjID0gZHNpX3BhbmVsX3ZyZWdfcHV0 KHBhbmVsKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcHV0IHJlZ3MsIHJj PSVkXG4iLCBwYW5lbC0+bmFtZSwgcmMpOwotCi0JcGFuZWwtPmhvc3QgPSBOVUxMOwotCW1lbXNl dCgmcGFuZWwtPm1pcGlfZGV2aWNlLCAweDAsIHNpemVvZihwYW5lbC0+bWlwaV9kZXZpY2UpKTsK LQotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQot aW50IGRzaV9wYW5lbF92YWxpZGF0ZV9tb2RlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJ ICAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlKQotewotCXJldHVybiAwOwotfQotCi1p bnQgZHNpX3BhbmVsX2dldF9tb2RlX2NvdW50KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQljb25zdCB1MzIgU0lOR0xFX01PREVfU1VQ UE9SVCA9IDE7Ci0Jc3RydWN0IGRldmljZV9ub2RlICp0aW1pbmdzX25wOwotCWludCBjb3VudCwg cmMgPSAwOwotCi0JaWYgKCFvZl9ub2RlIHx8ICFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcGFuZWwtPm51bV90aW1pbmdf bm9kZXMgPSAwOwotCi0JdGltaW5nc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG9mX25vZGUs Ci0JCQkicWNvbSxtZHNzLWRzaS1kaXNwbGF5LXRpbWluZ3MiKTsKLQlpZiAoIXRpbWluZ3NfbnAp IHsKLQkJcHJfZXJyKCJubyBkaXNwbGF5IHRpbWluZyBub2RlcyBkZWZpbmVkXG4iKTsKLQkJcmMg PSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWNvdW50ID0gb2ZfZ2V0X2NoaWxkX2Nv dW50KHRpbWluZ3NfbnApOwotCWlmICghY291bnQgfHwgY291bnQgPiBEU0lfTU9ERV9NQVgpIHsK LQkJcHJfZXJyKCJpbnZhbGlkIGNvdW50IG9mIHRpbWluZyBub2RlczogJWRcbiIsIGNvdW50KTsK LQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qIE5vIG11bHRpcmVzb2x1 dGlvbiBzdXBwb3J0IGlzIGF2YWlsYWJsZSBmb3IgdmlkZW8gbW9kZSBwYW5lbHMgKi8KLQlpZiAo cGFuZWwtPnBhbmVsX21vZGUgIT0gRFNJX09QX0NNRF9NT0RFKQotCQljb3VudCA9IFNJTkdMRV9N T0RFX1NVUFBPUlQ7Ci0KLQlwYW5lbC0+bnVtX3RpbWluZ19ub2RlcyA9IGNvdW50OwotCi1lcnJv cjoKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxfZ2V0X3BoeV9wcm9wcyhzdHJ1Y3Qg ZHNpX3BhbmVsICpwYW5lbCwKLQkJCSAgICBzdHJ1Y3QgZHNpX3BhbmVsX3BoeV9wcm9wcyAqcGh5 X3Byb3BzKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsIHx8ICFwaHlfcHJvcHMpIHsK LQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCW1lbWNweShwaHlfcHJvcHMsICZw YW5lbC0+cGh5X3Byb3BzLCBzaXplb2YoKnBoeV9wcm9wcykpOwotCi0JbXV0ZXhfdW5sb2NrKCZw YW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX2dldF9k ZnBzX2NhcHMoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkgICAgc3RydWN0IGRzaV9kZnBz X2NhcGFiaWxpdGllcyAqZGZwc19jYXBzKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVs IHx8ICFkZnBzX2NhcHMpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCW1l bWNweShkZnBzX2NhcHMsICZwYW5lbC0+ZGZwc19jYXBzLCBzaXplb2YoKmRmcHNfY2FwcykpOwot Ci0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi12 b2lkIGRzaV9wYW5lbF9wdXRfbW9kZShzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSkKLXsK LQlpbnQgaTsKLQotCWlmICghbW9kZS0+cHJpdl9pbmZvKQotCQlyZXR1cm47Ci0KLQlmb3IgKGkg PSAwOyBpIDwgRFNJX0NNRF9TRVRfTUFYOyBpKyspCi0JCWRzaV9wYW5lbF9kZXN0cm95X2NtZF9w YWNrZXRzKCZtb2RlLT5wcml2X2luZm8tPmNtZF9zZXRzW2ldKTsKLQotCWtmcmVlKG1vZGUtPnBy aXZfaW5mbyk7Ci19Ci0KLWludCBkc2lfcGFuZWxfZ2V0X21vZGUoc3RydWN0IGRzaV9wYW5lbCAq cGFuZWwsCi0JCQl1MzIgaW5kZXgsIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkJ aW50IHRvcG9sb2d5X292ZXJyaWRlKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdGltaW5nc19u cCwgKmNoaWxkX25wOwotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlX3ByaXZfaW5mbyAqcHJ2X2lu Zm87Ci0JdTMyIGNoaWxkX2lkeCA9IDA7Ci0JaW50IHJjID0gMCwgbnVtX3RpbWluZ3M7Ci0KLQlp ZiAoIXBhbmVsIHx8ICFtb2RlKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0K LQltb2RlLT5wcml2X2luZm8gPSBremFsbG9jKHNpemVvZigqbW9kZS0+cHJpdl9pbmZvKSwgR0ZQ X0tFUk5FTCk7Ci0JaWYgKCFtb2RlLT5wcml2X2luZm8pIHsKLQkJcmMgPSAtRU5PTUVNOwotCQln b3RvIGRvbmU7Ci0JfQotCi0JcHJ2X2luZm8gPSBtb2RlLT5wcml2X2luZm87Ci0KLQl0aW1pbmdz X25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUocGFuZWwtPnBhbmVsX29mX25vZGUsCi0JCSJxY29t LG1kc3MtZHNpLWRpc3BsYXktdGltaW5ncyIpOwotCWlmICghdGltaW5nc19ucCkgewotCQlwcl9l cnIoIm5vIGRpc3BsYXkgdGltaW5nIG5vZGVzIGRlZmluZWRcbiIpOwotCQlyYyA9IC1FSU5WQUw7 Ci0JCWdvdG8gcGFyc2VfZmFpbDsKLQl9Ci0KLQludW1fdGltaW5ncyA9IG9mX2dldF9jaGlsZF9j b3VudCh0aW1pbmdzX25wKTsKLQlpZiAoIW51bV90aW1pbmdzIHx8IG51bV90aW1pbmdzID4gRFNJ X01PREVfTUFYKSB7Ci0JCXByX2VycigiaW52YWxpZCBjb3VudCBvZiB0aW1pbmcgbm9kZXM6ICVk XG4iLCBudW1fdGltaW5ncyk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBwYXJzZV9mYWlsOwot CX0KLQotCWZvcl9lYWNoX2NoaWxkX29mX25vZGUodGltaW5nc19ucCwgY2hpbGRfbnApIHsKLQkJ aWYgKGluZGV4ICE9IGNoaWxkX2lkeCsrKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfcGFu ZWxfcGFyc2VfdGltaW5nKCZtb2RlLT50aW1pbmcsIGNoaWxkX25wKTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBwYW5lbCB0aW1pbmcsIHJjPSVkXG4iLCByYyk7Ci0J CQlnb3RvIHBhcnNlX2ZhaWw7Ci0JCX0KLQotCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9kc2NfcGFy YW1zKG1vZGUsIGNoaWxkX25wKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBw YXJzZSBkc2MgcGFyYW1zLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBwYXJzZV9mYWlsOwotCQl9 Ci0KLQkJcmMgPSBkc2lfcGFuZWxfcGFyc2VfdG9wb2xvZ3kocHJ2X2luZm8sIGNoaWxkX25wLAot CQkJCXRvcG9sb2d5X292ZXJyaWRlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0 byBwYXJzZSBwYW5lbCB0b3BvbG9neSwgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gcGFyc2VfZmFp bDsKLQkJfQotCi0JCXJjID0gZHNpX3BhbmVsX3BhcnNlX2NtZF9zZXRzKHBydl9pbmZvLCBjaGls ZF9ucCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgY29tbWFuZCBz ZXRzLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBwYXJzZV9mYWlsOwotCQl9Ci0KLQkJcmMgPSBk c2lfcGFuZWxfcGFyc2Vfaml0dGVyX2NvbmZpZyhtb2RlLCBjaGlsZF9ucCk7Ci0JCWlmIChyYykK LQkJCXByX2VycigKLQkJCSJmYWlsZWQgdG8gcGFyc2UgcGFuZWwgaml0dGVyIGNvbmZpZywgcmM9 JWRcbiIsIHJjKTsKLQotCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9waHlfdGltaW5nKG1vZGUsIGNo aWxkX25wKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoCi0JCQkiZmFpbGVkIHRvIHBhcnNlIHBh bmVsIHBoeSB0aW1pbmdzLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBwYXJzZV9mYWlsOwotCQl9 Ci0JfQotCWdvdG8gZG9uZTsKLQotcGFyc2VfZmFpbDoKLQlrZnJlZShtb2RlLT5wcml2X2luZm8p OwotCW1vZGUtPnByaXZfaW5mbyA9IE5VTEw7Ci1kb25lOgotCW11dGV4X3VubG9jaygmcGFuZWwt PnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9nZXRfaG9zdF9j ZmdfZm9yX21vZGUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkJICAgIHN0cnVjdCBkc2lf ZGlzcGxheV9tb2RlICptb2RlLAotCQkJCSAgICBzdHJ1Y3QgZHNpX2hvc3RfY29uZmlnICpjb25m aWcpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGFuZWwgfHwgIW1vZGUgfHwgIWNvbmZpZykg ewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCi0JY29uZmlnLT5wYW5lbF9tb2Rl ID0gcGFuZWwtPnBhbmVsX21vZGU7Ci0JbWVtY3B5KCZjb25maWctPmNvbW1vbl9jb25maWcsICZw YW5lbC0+aG9zdF9jb25maWcsCi0JICAgICAgIHNpemVvZihjb25maWctPmNvbW1vbl9jb25maWcp KTsKLQotCWlmIChwYW5lbC0+cGFuZWxfbW9kZSA9PSBEU0lfT1BfVklERU9fTU9ERSkgewotCQlt ZW1jcHkoJmNvbmZpZy0+dS52aWRlb19lbmdpbmUsICZwYW5lbC0+dmlkZW9fY29uZmlnLAotCQkg ICAgICAgc2l6ZW9mKGNvbmZpZy0+dS52aWRlb19lbmdpbmUpKTsKLQl9IGVsc2UgewotCQltZW1j cHkoJmNvbmZpZy0+dS5jbWRfZW5naW5lLCAmcGFuZWwtPmNtZF9jb25maWcsCi0JCSAgICAgICBz aXplb2YoY29uZmlnLT51LmNtZF9lbmdpbmUpKTsKLQl9Ci0KLQltZW1jcHkoJmNvbmZpZy0+dmlk ZW9fdGltaW5nLCAmbW9kZS0+dGltaW5nLAotCSAgICAgICBzaXplb2YoY29uZmlnLT52aWRlb190 aW1pbmcpKTsKLQljb25maWctPnZpZGVvX3RpbWluZy5kc2NfZW5hYmxlZCA9IG1vZGUtPnByaXZf aW5mby0+ZHNjX2VuYWJsZWQ7Ci0JY29uZmlnLT52aWRlb190aW1pbmcuZHNjID0gJm1vZGUtPnBy aXZfaW5mby0+ZHNjOwotCi0JY29uZmlnLT5lc2NfY2xrX3JhdGVfaHogPSAxOTIwMDAwMDsKLQlt dXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBk c2lfcGFuZWxfcHJlX3ByZXBhcmUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJj ID0gMDsKLQotCWlmICghcGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsK LQotCS8qIElmIExQMTFfSU5JVCBpcyBzZXQsIHBhbmVsIHdpbGwgYmUgcG93ZXJlZCB1cCBkdXJp bmcgcHJlcGFyZSgpICovCi0JaWYgKHBhbmVsLT5scDExX2luaXQpCi0JCWdvdG8gZXJyb3I7Ci0K LQlyYyA9IGRzaV9wYW5lbF9wb3dlcl9vbihwYW5lbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi WyVzXSBwYW5lbCBwb3dlciBvbiBmYWlsZWQsIHJjPSVkXG4iLCBwYW5lbC0+bmFtZSwgcmMpOwot CQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxf bG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX3VwZGF0ZV9wcHMoc3RydWN0 IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX3BhbmVsX2Nt ZF9zZXQgKnNldCA9IE5VTEw7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGVfcHJpdl9pbmZvICpw cml2X2luZm8gPSBOVUxMOwotCi0JaWYgKCFwYW5lbCB8fCAhcGFuZWwtPmN1cl9tb2RlKSB7Ci0J CXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlt dXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlwcml2X2luZm8gPSBwYW5lbC0+Y3Vy X21vZGUtPnByaXZfaW5mbzsKLQotCXNldCA9ICZwcml2X2luZm8tPmNtZF9zZXRzW0RTSV9DTURf U0VUX1BQU107Ci0KLQlkc2lfZHNjX2NyZWF0ZV9wcHNfYnVmX2NtZCgmcHJpdl9pbmZvLT5kc2Ms IHBhbmVsLT5kc2NfcHBzX2NtZCwgMCk7Ci0JcmMgPSBkc2lfcGFuZWxfY3JlYXRlX2NtZF9wYWNr ZXRzKHBhbmVsLT5kc2NfcHBzX2NtZCwKLQkJCQkJICBEU0lfQ01EX1BQU19TSVpFLCAxLCBzZXQt PmNtZHMpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBjcmVhdGUgY21kIHBhY2tl dHMsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxf dHhfY21kX3NldChwYW5lbCwgRFNJX0NNRF9TRVRfUFBTKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX1BQUyBjbWRzLCByYz0lZFxuIiwKLQkJ CXBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQltdXRleF91 bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFu ZWxfc2V0X2xwMShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCi0J aWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJjID0gZHNp X3BhbmVsX3R4X2NtZF9zZXQocGFuZWwsIERTSV9DTURfU0VUX0xQMSk7Ci0JaWYgKHJjKQotCQlw cl9lcnIoIlslc10gZmFpbGVkIHRvIHNlbmQgRFNJX0NNRF9TRVRfTFAxIGNtZCwgcmM9JWRcbiIs Ci0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVs X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9zZXRfbHAyKHN0cnVjdCBk c2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXBy X2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRl eF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmMgPSBkc2lfcGFuZWxfdHhfY21kX3NldChw YW5lbCwgRFNJX0NNRF9TRVRfTFAyKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQg dG8gc2VuZCBEU0lfQ01EX1NFVF9MUDIgY21kLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5u YW1lLCByYyk7Ci0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJj OwotfQotCi1pbnQgZHNpX3BhbmVsX3NldF9ub2xwKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQot ewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJh bXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFu ZWxfbG9jayk7Ci0JcmMgPSBkc2lfcGFuZWxfdHhfY21kX3NldChwYW5lbCwgRFNJX0NNRF9TRVRf Tk9MUCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNlbmQgRFNJX0NNRF9T RVRfTk9MUCBjbWQsIHJjPSVkXG4iLAotCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQltdXRl eF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lf cGFuZWxfcHJlcGFyZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwot Ci0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCi0JaWYg KHBhbmVsLT5scDExX2luaXQpIHsKLQkJcmMgPSBkc2lfcGFuZWxfcG93ZXJfb24ocGFuZWwpOwot CQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBwYW5lbCBwb3dlciBvbiBmYWlsZWQsIHJjPSVk XG4iLAotCQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0J fQotCi0JcmMgPSBkc2lfcGFuZWxfdHhfY21kX3NldChwYW5lbCwgRFNJX0NNRF9TRVRfUFJFX09O KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VU X1BSRV9PTiBjbWRzLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2Nr KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxfc3dpdGNoKHN0cnVjdCBkc2lfcGFu ZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2Vycigi SW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2Nr KCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVs LCBEU0lfQ01EX1NFVF9USU1JTkdfU1dJVENIKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBm YWlsZWQgdG8gc2VuZCBEU0lfQ01EX1NFVF9USU1JTkdfU1dJVENIIGNtZHMsIHJjPSVkXG4iLAot CQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVs X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9wb3N0X3N3aXRjaChzdHJ1 Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewot CQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J bXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCi0JcmMgPSBkc2lfcGFuZWxfdHhfY21k X3NldChwYW5lbCwgRFNJX0NNRF9TRVRfUE9TVF9USU1JTkdfU1dJVENIKTsKLQlpZiAocmMpCi0J CXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2VuZCBEU0lfQ01EX1NFVF9QT1NUX1RJTUlOR19TV0lU Q0ggY21kcywgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCi0JbXV0ZXhf dW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3Bh bmVsX2VuYWJsZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCi0J aWYgKCFwYW5lbCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCi0JcmMgPSBk c2lfcGFuZWxfdHhfY21kX3NldChwYW5lbCwgRFNJX0NNRF9TRVRfT04pOwotCWlmIChyYykgewot CQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNlbmQgRFNJX0NNRF9TRVRfT04gY21kcywgcmM9JWRc biIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCX0KLQlwYW5lbC0+cGFuZWxfaW5pdGlh bGl6ZWQgPSB0cnVlOwotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVy biByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9wb3N0X2VuYWJsZShzdHJ1Y3QgZHNpX3BhbmVsICpw YW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFs aWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFu ZWwtPnBhbmVsX2xvY2spOwotCi0JcmMgPSBkc2lfcGFuZWxfdHhfY21kX3NldChwYW5lbCwgRFNJ X0NNRF9TRVRfUE9TVF9PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8g c2VuZCBEU0lfQ01EX1NFVF9QT1NUX09OIGNtZHMsIHJjPSVkXG4iLAotCQkgICAgICAgcGFuZWwt Pm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJnBh bmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxfcHJlX2Rp c2FibGUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICgh cGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCXJjID0gZHNpX3Bh bmVsX3R4X2NtZF9zZXQocGFuZWwsIERTSV9DTURfU0VUX1BSRV9PRkYpOwotCWlmIChyYykgewot CQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNlbmQgRFNJX0NNRF9TRVRfUFJFX09GRiBjbWRzLCBy Yz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7 Ci19Ci0KLWludCBkc2lfcGFuZWxfZGlzYWJsZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsK LQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1z XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVs X2xvY2spOwotCi0JcmMgPSBkc2lfcGFuZWxfdHhfY21kX3NldChwYW5lbCwgRFNJX0NNRF9TRVRf T0ZGKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURf U0VUX09GRiBjbWRzLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCXBhbmVsLT5wYW5lbF9pbml0aWFsaXplZCA9IGZhbHNlOwotCi1lcnJv cjoKLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0K LWludCBkc2lfcGFuZWxfdW5wcmVwYXJlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWlu dCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9j ayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9QT1NU X09GRik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2VuZCBEU0lfQ01E X1NFVF9QT1NUX09GRiBjbWRzLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKHBhbmVsLT5scDExX2luaXQpIHsKLQkJcmMgPSBk c2lfcGFuZWxfcG93ZXJfb2ZmKHBhbmVsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10g cGFuZWwgcG93ZXJfT2ZmIGZhaWxlZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgcGFuZWwtPm5hbWUs IHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJnBh bmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxfcG9zdF91 bnByZXBhcmUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlm ICghcGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCWlmICghcGFu ZWwtPmxwMTFfaW5pdCkgewotCQlyYyA9IGRzaV9wYW5lbF9wb3dlcl9vZmYocGFuZWwpOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBwYW5lbCBwb3dlcl9PZmYgZmFpbGVkLCByYz0lZFxu IiwKLQkJCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0K LWVycm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsK LX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVs LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wYW5lbC5oCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWYzMjIwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTcg KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVm IF9EU0lfUEFORUxfSF8KLSNkZWZpbmUgX0RTSV9QQU5FTF9IXwotCi0jaW5jbHVkZSA8bGludXgv b2ZfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9i aXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMu aD4KLSNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+Ci0jaW5jbHVkZSA8ZHJtL21zbV9kcm0uaD4K LQotI2luY2x1ZGUgImRzaV9kZWZzLmgiCi0jaW5jbHVkZSAiZHNpX2N0cmxfaHcuaCIKLSNpbmNs dWRlICJkc2lfY2xrLmgiCi0jaW5jbHVkZSAiZHNpX3B3ci5oIgotI2luY2x1ZGUgIm1zbV9kcnYu aCIKLQotI2RlZmluZSBNQVhfQkxfTEVWRUwgNDA5NgotI2RlZmluZSBNQVhfQkxfU0NBTEVfTEVW RUwgMTAyNAotI2RlZmluZSBNQVhfQURfQkxfU0NBTEVfTEVWRUwgNjU1MzUKLSNkZWZpbmUgRFNJ X0NNRF9QUFNfU0laRSAxMzUKLQotI2RlZmluZSBEU0lfTU9ERV9NQVggNQotCi1lbnVtIGRzaV9w YW5lbF9yb3RhdGlvbiB7Ci0JRFNJX1BBTkVMX1JPVEFURV9OT05FID0gMCwKLQlEU0lfUEFORUxf Uk9UQVRFX0hWX0ZMSVAsCi0JRFNJX1BBTkVMX1JPVEFURV9IX0ZMSVAsCi0JRFNJX1BBTkVMX1JP VEFURV9WX0ZMSVAKLX07Ci0KLWVudW0gZHNpX2JhY2tsaWdodF90eXBlIHsKLQlEU0lfQkFDS0xJ R0hUX1BXTSA9IDAsCi0JRFNJX0JBQ0tMSUdIVF9XTEVELAotCURTSV9CQUNLTElHSFRfRENTLAot CURTSV9CQUNLTElHSFRfVU5LTk9XTiwKLQlEU0lfQkFDS0xJR0hUX01BWCwKLX07Ci0KLWVudW0g ewotCU1PREVfR1BJT19OT1RfVkFMSUQgPSAwLAotCU1PREVfU0VMX0RVQUxfUE9SVCwKLQlNT0RF X1NFTF9TSU5HTEVfUE9SVCwKLQlNT0RFX0dQSU9fSElHSCwKLQlNT0RFX0dQSU9fTE9XLAotfTsK LQotZW51bSBkc2lfZG1zX21vZGUgewotCURTSV9ETVNfTU9ERV9ESVNBQkxFRCA9IDAsCi0JRFNJ X0RNU19NT0RFX1JFU19TV0lUQ0hfSU1NRURJQVRFLAotfTsKLQotc3RydWN0IGRzaV9kZnBzX2Nh cGFiaWxpdGllcyB7Ci0JYm9vbCBkZnBzX3N1cHBvcnQ7Ci0JZW51bSBkc2lfZGZwc190eXBlIHR5 cGU7Ci0JdTMyIG1pbl9yZWZyZXNoX3JhdGU7Ci0JdTMyIG1heF9yZWZyZXNoX3JhdGU7Ci19Owot Ci1zdHJ1Y3QgZHNpX3BpbmN0cmxfaW5mbyB7Ci0Jc3RydWN0IHBpbmN0cmwgKnBpbmN0cmw7Ci0J c3RydWN0IHBpbmN0cmxfc3RhdGUgKmFjdGl2ZTsKLQlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqc3Vz cGVuZDsKLX07Ci0KLXN0cnVjdCBkc2lfcGFuZWxfcGh5X3Byb3BzIHsKLQl1MzIgcGFuZWxfd2lk dGhfbW07Ci0JdTMyIHBhbmVsX2hlaWdodF9tbTsKLQllbnVtIGRzaV9wYW5lbF9yb3RhdGlvbiBy b3RhdGlvbjsKLX07Ci0KLXN0cnVjdCBkc2lfYmFja2xpZ2h0X2NvbmZpZyB7Ci0JZW51bSBkc2lf YmFja2xpZ2h0X3R5cGUgdHlwZTsKLQotCXUzMiBibF9taW5fbGV2ZWw7Ci0JdTMyIGJsX21heF9s ZXZlbDsKLQl1MzIgYnJpZ2h0bmVzc19tYXhfbGV2ZWw7Ci0JdTMyIGJsX2xldmVsOwotCXUzMiBi bF9zY2FsZTsKLQl1MzIgYmxfc2NhbGVfYWQ7Ci0KLQlpbnQgZW5fZ3BpbzsKLQkvKiBQV00gcGFy YW1zICovCi0JYm9vbCBwd21fcG1pX2NvbnRyb2w7Ci0JdTMyIHB3bV9wbWljX2Jhbms7Ci0JdTMy IHB3bV9wZXJpb2RfdXNlY3M7Ci0JaW50IHB3bV9ncGlvOwotCi0JLyogV0xFRCBwYXJhbXMgKi8K LQlzdHJ1Y3QgbGVkX3RyaWdnZXIgKndsZWQ7Ci0Jc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJk OwotfTsKLQotc3RydWN0IGRzaV9yZXNldF9zZXEgewotCXUzMiBsZXZlbDsKLQl1MzIgc2xlZXBf bXM7Ci19OwotCi1zdHJ1Y3QgZHNpX3BhbmVsX3Jlc2V0X2NvbmZpZyB7Ci0Jc3RydWN0IGRzaV9y ZXNldF9zZXEgKnNlcXVlbmNlOwotCXUzMiBjb3VudDsKLQotCWludCByZXNldF9ncGlvOwotCWlu dCBkaXNwX2VuX2dwaW87Ci0JaW50IGxjZF9tb2RlX3NlbF9ncGlvOwotCXUzMiBtb2RlX3NlbF9z dGF0ZTsKLX07Ci0KLWVudW0gZXNkX2NoZWNrX3N0YXR1c19tb2RlIHsKLQlFU0RfTU9ERV9SRUdf UkVBRCwKLQlFU0RfTU9ERV9TV19CVEEsCi0JRVNEX01PREVfUEFORUxfVEUsCi0JRVNEX01PREVf TUFYCi19OwotCi1zdHJ1Y3QgZHJtX3BhbmVsX2VzZF9jb25maWcgewotCWJvb2wgZXNkX2VuYWJs ZWQ7Ci0KLQllbnVtIGVzZF9jaGVja19zdGF0dXNfbW9kZSBzdGF0dXNfbW9kZTsKLQlzdHJ1Y3Qg ZHNpX3BhbmVsX2NtZF9zZXQgc3RhdHVzX2NtZDsKLQl1MzIgKnN0YXR1c19jbWRzX3JsZW47Ci0J dTMyICpzdGF0dXNfdmFsaWRfcGFyYW1zOwotCXUzMiAqc3RhdHVzX3ZhbHVlOwotCXVuc2lnbmVk IGNoYXIgKnJldHVybl9idWY7Ci0JdTMyIGdyb3VwczsKLX07Ci0KLXN0cnVjdCBkc2lfcGFuZWwg ewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwYW5lbF9vZl9ub2Rl OwotCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgbWlwaV9kZXZpY2U7Ci0KLQlzdHJ1Y3QgbXV0ZXgg cGFuZWxfbG9jazsKLQlzdHJ1Y3QgZHJtX3BhbmVsIGRybV9wYW5lbDsKLQlzdHJ1Y3QgbWlwaV9k c2lfaG9zdCAqaG9zdDsKLQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7Ci0KLQlzdHJ1Y3QgZHNpX2hv c3RfY29tbW9uX2NmZyBob3N0X2NvbmZpZzsKLQlzdHJ1Y3QgZHNpX3ZpZGVvX2VuZ2luZV9jZmcg dmlkZW9fY29uZmlnOwotCXN0cnVjdCBkc2lfY21kX2VuZ2luZV9jZmcgY21kX2NvbmZpZzsKLQll bnVtIGRzaV9vcF9tb2RlIHBhbmVsX21vZGU7Ci0KLQlzdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0 aWVzIGRmcHNfY2FwczsKLQlzdHJ1Y3QgZHNpX3BhbmVsX3BoeV9wcm9wcyBwaHlfcHJvcHM7Ci0K LQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqY3VyX21vZGU7Ci0JdTMyIG51bV90aW1pbmdfbm9k ZXM7Ci0KLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvIHBvd2VyX2luZm87Ci0Jc3RydWN0IGRz aV9iYWNrbGlnaHRfY29uZmlnIGJsX2NvbmZpZzsKLQlzdHJ1Y3QgZHNpX3BhbmVsX3Jlc2V0X2Nv bmZpZyByZXNldF9jb25maWc7Ci0Jc3RydWN0IGRzaV9waW5jdHJsX2luZm8gcGluY3RybDsKLQlz dHJ1Y3QgZHJtX3BhbmVsX2hkcl9wcm9wZXJ0aWVzIGhkcl9wcm9wczsKLQlzdHJ1Y3QgZHJtX3Bh bmVsX2VzZF9jb25maWcgZXNkX2NvbmZpZzsKLQotCWJvb2wgbHAxMV9pbml0OwotCWJvb2wgdWxw c19lbmFibGVkOwotCWJvb2wgYWxsb3dfcGh5X3Bvd2VyX29mZjsKLQotCWJvb2wgcGFuZWxfaW5p dGlhbGl6ZWQ7Ci0JYm9vbCB0ZV91c2luZ193YXRjaGRvZ190aW1lcjsKLQotCWNoYXIgZHNjX3Bw c19jbWRbRFNJX0NNRF9QUFNfU0laRV07Ci0JZW51bSBkc2lfZG1zX21vZGUgZG1zX21vZGU7Ci0K LQlib29sIHN5bmNfYnJvYWRjYXN0X2VuOwotfTsKLQotc3RhdGljIGlubGluZSBib29sIGRzaV9w YW5lbF91bHBzX2ZlYXR1cmVfZW5hYmxlZChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQly ZXR1cm4gcGFuZWwtPnVscHNfZW5hYmxlZDsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGRzaV9w YW5lbF9pbml0aWFsaXplZChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlyZXR1cm4gcGFu ZWwtPnBhbmVsX2luaXRpYWxpemVkOwotfQotCi1zdHJ1Y3QgZHNpX3BhbmVsICpkc2lfcGFuZWxf Z2V0KHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKLQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25v ZGUsCi0JCQkJaW50IHRvcG9sb2d5X292ZXJyaWRlKTsKLQotdm9pZCBkc2lfcGFuZWxfcHV0KHN0 cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF9kcnZfaW5pdChzdHJ1Y3Qg ZHNpX3BhbmVsICpwYW5lbCwgc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QpOwotCi1pbnQgZHNp X3BhbmVsX2Rydl9kZWluaXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3Bh bmVsX2dldF9tb2RlX2NvdW50KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm9mX25vZGUpOwotCi12b2lkIGRzaV9wYW5lbF9wdXRfbW9kZShzdHJ1Y3QgZHNp X2Rpc3BsYXlfbW9kZSAqbW9kZSk7Ci0KLWludCBkc2lfcGFuZWxfZ2V0X21vZGUoc3RydWN0IGRz aV9wYW5lbCAqcGFuZWwsCi0JCSAgICAgICB1MzIgaW5kZXgsCi0JCSAgICAgICBzdHJ1Y3QgZHNp X2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJICAgICAgIGludCB0b3BvbG9neV9vdmVycmlkZSk7Ci0K LWludCBkc2lfcGFuZWxfdmFsaWRhdGVfbW9kZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJ CSAgICBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Ci0KLWludCBkc2lfcGFuZWxfZ2V0 X2hvc3RfY2ZnX2Zvcl9tb2RlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJCSAgICBzdHJ1 Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCQkgICAgc3RydWN0IGRzaV9ob3N0X2NvbmZp ZyAqY29uZmlnKTsKLQotaW50IGRzaV9wYW5lbF9nZXRfcGh5X3Byb3BzKHN0cnVjdCBkc2lfcGFu ZWwgKnBhbmVsLAotCQkJICAgIHN0cnVjdCBkc2lfcGFuZWxfcGh5X3Byb3BzICpwaHlfcHJvcHMp OwotaW50IGRzaV9wYW5lbF9nZXRfZGZwc19jYXBzKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAot CQkJICAgIHN0cnVjdCBkc2lfZGZwc19jYXBhYmlsaXRpZXMgKmRmcHNfY2Fwcyk7Ci0KLWludCBk c2lfcGFuZWxfcHJlX3ByZXBhcmUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNp X3BhbmVsX3NldF9scDEoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVs X3NldF9scDIoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX3NldF9u b2xwKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF9wcmVwYXJlKHN0 cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF9lbmFibGUoc3RydWN0IGRz aV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX3Bvc3RfZW5hYmxlKHN0cnVjdCBkc2lf cGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF9wcmVfZGlzYWJsZShzdHJ1Y3QgZHNpX3Bh bmVsICpwYW5lbCk7Ci0KLWludCBkc2lfcGFuZWxfZGlzYWJsZShzdHJ1Y3QgZHNpX3BhbmVsICpw YW5lbCk7Ci0KLWludCBkc2lfcGFuZWxfdW5wcmVwYXJlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVs KTsKLQotaW50IGRzaV9wYW5lbF9wb3N0X3VucHJlcGFyZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5l bCk7Ci0KLWludCBkc2lfcGFuZWxfc2V0X2JhY2tsaWdodChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5l bCwgdTMyIGJsX2x2bCk7Ci0KLWludCBkc2lfcGFuZWxfdXBkYXRlX3BwcyhzdHJ1Y3QgZHNpX3Bh bmVsICpwYW5lbCk7Ci0KLWludCBkc2lfcGFuZWxfc3dpdGNoKHN0cnVjdCBkc2lfcGFuZWwgKnBh bmVsKTsKLQotaW50IGRzaV9wYW5lbF9wb3N0X3N3aXRjaChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5l bCk7Ci0KLXZvaWQgZHNpX2RzY19wY2xrX3BhcmFtX2NhbGMoc3RydWN0IG1zbV9kaXNwbGF5X2Rz Y19pbmZvICpkc2MsIGludCBpbnRmX3dpZHRoKTsKLQotI2VuZGlmIC8qIF9EU0lfUEFORUxfSF8g Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeS5j IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5LmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGVkNmQ3NzYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MzcgKzAsMCBA QAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0g KiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZt dCkJIm1zbS1kc2ktcGh5Olslc10gIiBmbXQsIF9fZnVuY19fCi0KLSNpbmNsdWRlIDxsaW51eC9v Zl9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1 bGF0b3IvY29uc3VtZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpZmRlZiBDT05GSUdf Q0hST01FX0JVU19TQ0FMRQotI2luY2x1ZGUgPGxpbnV4L21zbS1idXMuaD4KLSNlbmRpZgotI2lu Y2x1ZGUgPGxpbnV4L2xpc3QuaD4KLQotI2luY2x1ZGUgIm1zbV9kcnYuaCIKLSNpbmNsdWRlICJt c21fa21zLmgiCi0jaW5jbHVkZSAibXNtX2dwdS5oIgotI2luY2x1ZGUgImRzaV9waHkuaCIKLSNp bmNsdWRlICJkc2lfcGh5X2h3LmgiCi0jaW5jbHVkZSAiZHNpX2Nsay5oIgotI2luY2x1ZGUgImRz aV9wd3IuaCIKLSNpbmNsdWRlICJkc2lfY2F0YWxvZy5oIgotCi0jaW5jbHVkZSAiZHB1X2RiZy5o IgotCi0jZGVmaW5lIERTSV9QSFlfREVGQVVMVF9MQUJFTCAiTURTUyBQSFkgQ1RSTCIKLQotc3Ry dWN0IGRzaV9waHlfbGlzdF9pdGVtIHsKLQlzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeTsKLQlzdHJ1 Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi1zdGF0aWMgTElTVF9IRUFEKGRzaV9waHlfbGlzdCk7 Ci1zdGF0aWMgREVGSU5FX01VVEVYKGRzaV9waHlfbGlzdF9sb2NrKTsKLQotc3RhdGljIGNvbnN0 IHN0cnVjdCBkc2lfdmVyX3NwZWNfaW5mbyBkc2lfcGh5X3YwXzBfaHBtID0gewotCS52ZXJzaW9u ID0gRFNJX1BIWV9WRVJTSU9OXzBfMF9IUE0sCi0JLmxhbmVfY2ZnX2NvdW50ID0gNCwKLQkuc3Ry ZW5ndGhfY2ZnX2NvdW50ID0gMiwKLQkucmVndWxhdG9yX2NmZ19jb3VudCA9IDEsCi0JLnRpbWlu Z19jZmdfY291bnQgPSA4LAotfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNpX3Zlcl9zcGVjX2lu Zm8gZHNpX3BoeV92MF8wX2xwbSA9IHsKLQkudmVyc2lvbiA9IERTSV9QSFlfVkVSU0lPTl8wXzBf TFBNLAotCS5sYW5lX2NmZ19jb3VudCA9IDQsCi0JLnN0cmVuZ3RoX2NmZ19jb3VudCA9IDIsCi0J LnJlZ3VsYXRvcl9jZmdfY291bnQgPSAxLAotCS50aW1pbmdfY2ZnX2NvdW50ID0gOCwKLX07Ci1z dGF0aWMgY29uc3Qgc3RydWN0IGRzaV92ZXJfc3BlY19pbmZvIGRzaV9waHlfdjFfMCA9IHsKLQku dmVyc2lvbiA9IERTSV9QSFlfVkVSU0lPTl8xXzAsCi0JLmxhbmVfY2ZnX2NvdW50ID0gNCwKLQku c3RyZW5ndGhfY2ZnX2NvdW50ID0gMiwKLQkucmVndWxhdG9yX2NmZ19jb3VudCA9IDEsCi0JLnRp bWluZ19jZmdfY291bnQgPSA4LAotfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNpX3Zlcl9zcGVj X2luZm8gZHNpX3BoeV92Ml8wID0gewotCS52ZXJzaW9uID0gRFNJX1BIWV9WRVJTSU9OXzJfMCwK LQkubGFuZV9jZmdfY291bnQgPSA0LAotCS5zdHJlbmd0aF9jZmdfY291bnQgPSAyLAotCS5yZWd1 bGF0b3JfY2ZnX2NvdW50ID0gMSwKLQkudGltaW5nX2NmZ19jb3VudCA9IDgsCi19Owotc3RhdGlj IGNvbnN0IHN0cnVjdCBkc2lfdmVyX3NwZWNfaW5mbyBkc2lfcGh5X3YzXzAgPSB7Ci0JLnZlcnNp b24gPSBEU0lfUEhZX1ZFUlNJT05fM18wLAotCS5sYW5lX2NmZ19jb3VudCA9IDQsCi0JLnN0cmVu Z3RoX2NmZ19jb3VudCA9IDIsCi0JLnJlZ3VsYXRvcl9jZmdfY291bnQgPSAwLAotCS50aW1pbmdf Y2ZnX2NvdW50ID0gMTIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBt c21fZHNpX3BoeV9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAicWNvbSxkc2ktcGh5 LXYwLjAtaHBtIiwKLQkgIC5kYXRhID0gJmRzaV9waHlfdjBfMF9ocG0sfSwKLQl7IC5jb21wYXRp YmxlID0gInFjb20sZHNpLXBoeS12MC4wLWxwbSIsCi0JICAuZGF0YSA9ICZkc2lfcGh5X3YwXzBf bHBtLH0sCi0JeyAuY29tcGF0aWJsZSA9ICJxY29tLGRzaS1waHktdjEuMCIsCi0JICAuZGF0YSA9 ICZkc2lfcGh5X3YxXzAsfSwKLQl7IC5jb21wYXRpYmxlID0gInFjb20sZHNpLXBoeS12Mi4wIiwK LQkgIC5kYXRhID0gJmRzaV9waHlfdjJfMCx9LAotCXsgLmNvbXBhdGlibGUgPSAicWNvbSxkc2kt cGh5LXYzLjAiLAotCSAgLmRhdGEgPSAmZHNpX3BoeV92M18wLH0sCi0Je30KLX07Ci0KLXN0YXRp YyBpbnQgZHNpX3BoeV9yZWdtYXBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAot CQkJICAgICAgIHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KQotewotCWludCByYyA9IDA7Ci0Jdm9p ZCBfX2lvbWVtICpwdHI7Ci0KLQlwdHIgPSBtc21faW9yZW1hcChwZGV2LCAiZHNpX3BoeSIsIHBo eS0+bmFtZSk7Ci0JaWYgKElTX0VSUihwdHIpKSB7Ci0JCXJjID0gUFRSX0VSUihwdHIpOwotCQly ZXR1cm4gcmM7Ci0JfQotCi0JcGh5LT5ody5iYXNlID0gcHRyOwotCi0JcHJfZGVidWcoIlslc10g bWFwIGRzaV9waHkgcmVnaXN0ZXJzIHRvICVwXG4iLCBwaHktPm5hbWUsIHBoeS0+aHcuYmFzZSk7 Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BoeV9yZWdtYXBfZGVpbml0KHN0 cnVjdCBtc21fZHNpX3BoeSAqcGh5KQotewotCXByX2RlYnVnKCJbJXNdIHVubWFwIHJlZ2lzdGVy c1xuIiwgcGh5LT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc2lfcGh5X3N1 cHBsaWVzX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgc3RydWN0IG1z bV9kc2lfcGh5ICpwaHkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaSA9IDA7Ci0Jc3RydWN0IGRz aV9yZWd1bGF0b3JfaW5mbyAqcmVnczsKLQlzdHJ1Y3QgcmVndWxhdG9yICp2cmVnID0gTlVMTDsK LQotCXJlZ3MgPSAmcGh5LT5wd3JfaW5mby5kaWdpdGFsOwotCXJlZ3MtPnZyZWdzID0gZGV2bV9r emFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZHNpX3ZyZWcpLAotCQkJCSAgIEdGUF9L RVJORUwpOwotCWlmICghcmVncy0+dnJlZ3MpCi0JCWdvdG8gZXJyb3I7Ci0KLQlyZWdzLT5jb3Vu dCA9IDE7Ci0Jc25wcmludGYocmVncy0+dnJlZ3MtPnZyZWdfbmFtZSwKLQkJIEFSUkFZX1NJWkUo cmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lKSwKLQkJICIlcyIsICJnZHNjIik7Ci0KLQlyYyA9IGRz aV9wd3JfZ2V0X2R0X3ZyZWdfZGF0YSgmcGRldi0+ZGV2LAotCQkJCQkgICZwaHktPnB3cl9pbmZv LnBoeV9wd3IsCi0JCQkJCSAgInFjb20scGh5LXN1cHBseS1lbnRyaWVzIik7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBob3N0IHBvd2VyIHN1cHBsaWVzLCByYyA9ICVkXG4i LCByYyk7Ci0JCWdvdG8gZXJyb3JfZGlnaXRhbDsKLQl9Ci0KLQlyZWdzID0gJnBoeS0+cHdyX2lu Zm8uZGlnaXRhbDsKLQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykgewotCQl2cmVn ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KCZwZGV2LT5kZXYsIHJlZ3MtPnZyZWdzW2ldLnZyZWdfbmFt ZSk7Ci0JCXJjID0gUFRSX1JFVCh2cmVnKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxl ZCB0byBnZXQgJXMgcmVndWxhdG9yXG4iLAotCQkJICAgICAgIHJlZ3MtPnZyZWdzW2ldLnZyZWdf bmFtZSk7Ci0JCQlnb3RvIGVycm9yX2hvc3RfcHdyOwotCQl9Ci0JCXJlZ3MtPnZyZWdzW2ldLnZy ZWcgPSB2cmVnOwotCX0KLQotCXJlZ3MgPSAmcGh5LT5wd3JfaW5mby5waHlfcHdyOwotCWZvciAo aSA9IDA7IGkgPCByZWdzLT5jb3VudDsgaSsrKSB7Ci0JCXZyZWcgPSBkZXZtX3JlZ3VsYXRvcl9n ZXQoJnBkZXYtPmRldiwgcmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lKTsKLQkJcmMgPSBQVFJfUkVU KHZyZWcpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCAlcyByZWd1bGF0 b3JcbiIsCi0JCQkgICAgICAgcmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lKTsKLQkJCWZvciAoLS1p OyBpID49IDA7IGktLSkKLQkJCQlkZXZtX3JlZ3VsYXRvcl9wdXQocmVncy0+dnJlZ3NbaV0udnJl Zyk7Ci0JCQlnb3RvIGVycm9yX2RpZ2l0YWxfcHV0OwotCQl9Ci0JCXJlZ3MtPnZyZWdzW2ldLnZy ZWcgPSB2cmVnOwotCX0KLQotCXJldHVybiByYzsKLQotZXJyb3JfZGlnaXRhbF9wdXQ6Ci0JcmVn cyA9ICZwaHktPnB3cl9pbmZvLmRpZ2l0YWw7Ci0JZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50 OyBpKyspCi0JCWRldm1fcmVndWxhdG9yX3B1dChyZWdzLT52cmVnc1tpXS52cmVnKTsKLWVycm9y X2hvc3RfcHdyOgotCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgcGh5LT5wd3JfaW5mby5waHlfcHdy LnZyZWdzKTsKLQlwaHktPnB3cl9pbmZvLnBoeV9wd3IudnJlZ3MgPSBOVUxMOwotCXBoeS0+cHdy X2luZm8ucGh5X3B3ci5jb3VudCA9IDA7Ci1lcnJvcl9kaWdpdGFsOgotCWRldm1fa2ZyZWUoJnBk ZXYtPmRldiwgcGh5LT5wd3JfaW5mby5kaWdpdGFsLnZyZWdzKTsKLQlwaHktPnB3cl9pbmZvLmRp Z2l0YWwudnJlZ3MgPSBOVUxMOwotCXBoeS0+cHdyX2luZm8uZGlnaXRhbC5jb3VudCA9IDA7Ci1l cnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BoeV9zdXBwbGllc19kZWlu aXQoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0JaW50IGkgPSAwOwotCWludCByYyA9IDA7 Ci0Jc3RydWN0IGRzaV9yZWd1bGF0b3JfaW5mbyAqcmVnczsKLQotCXJlZ3MgPSAmcGh5LT5wd3Jf aW5mby5kaWdpdGFsOwotCWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsgaSsrKSB7Ci0JCWlm ICghcmVncy0+dnJlZ3NbaV0udnJlZykKLQkJCXByX2VycigidnJlZyBpcyBOVUxMLCBzaG91bGQg bm90IHJlYWNoIGhlcmVcbiIpOwotCQllbHNlCi0JCQlkZXZtX3JlZ3VsYXRvcl9wdXQocmVncy0+ dnJlZ3NbaV0udnJlZyk7Ci0JfQotCi0JcmVncyA9ICZwaHktPnB3cl9pbmZvLnBoeV9wd3I7Ci0J Zm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpKyspIHsKLQkJaWYgKCFyZWdzLT52cmVnc1tp XS52cmVnKQotCQkJcHJfZXJyKCJ2cmVnIGlzIE5VTEwsIHNob3VsZCBub3QgcmVhY2ggaGVyZVxu Iik7Ci0JCWVsc2UKLQkJCWRldm1fcmVndWxhdG9yX3B1dChyZWdzLT52cmVnc1tpXS52cmVnKTsK LQl9Ci0KLQlpZiAocGh5LT5wd3JfaW5mby5waHlfcHdyLnZyZWdzKSB7Ci0JCWRldm1fa2ZyZWUo JnBoeS0+cGRldi0+ZGV2LCBwaHktPnB3cl9pbmZvLnBoeV9wd3IudnJlZ3MpOwotCQlwaHktPnB3 cl9pbmZvLnBoeV9wd3IudnJlZ3MgPSBOVUxMOwotCQlwaHktPnB3cl9pbmZvLnBoeV9wd3IuY291 bnQgPSAwOwotCX0KLQlpZiAocGh5LT5wd3JfaW5mby5kaWdpdGFsLnZyZWdzKSB7Ci0JCWRldm1f a2ZyZWUoJnBoeS0+cGRldi0+ZGV2LCBwaHktPnB3cl9pbmZvLmRpZ2l0YWwudnJlZ3MpOwotCQlw aHktPnB3cl9pbmZvLmRpZ2l0YWwudnJlZ3MgPSBOVUxMOwotCQlwaHktPnB3cl9pbmZvLmRpZ2l0 YWwuY291bnQgPSAwOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGh5 X3BhcnNlX2R0X3Blcl9sYW5lX2NmZ3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJ CQkJICBzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICpjZmcsCi0JCQkJCSAgY2hhciAqcHJv cGVydHkpCi17Ci0JaW50IHJjID0gMCwgaSA9IDAsIGogPSAwOwotCWNvbnN0IHU4ICpkYXRhOwot CXUzMiBsZW4gPSAwOwotCi0JZGF0YSA9IG9mX2dldF9wcm9wZXJ0eShwZGV2LT5kZXYub2Zfbm9k ZSwgcHJvcGVydHksICZsZW4pOwotCWlmICghZGF0YSkgewotCQlwcl9lcnIoIlVuYWJsZSB0byBy ZWFkIFBoeSAlcyBzZXR0aW5nc1xuIiwgcHJvcGVydHkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQlpZiAobGVuICE9IERTSV9MQU5FX01BWCAqIGNmZy0+Y291bnRfcGVyX2xhbmUpIHsKLQkJ cHJfZXJyKCJpbmNvcnJlY3QgcGh5ICVzIHNldHRpbmdzLCBleHA9JWQsIGFjdD0lZFxuIiwKLQkJ ICAgICAgIHByb3BlcnR5LCAoRFNJX0xBTkVfTUFYICogY2ZnLT5jb3VudF9wZXJfbGFuZSksIGxl bik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAoaSA9IERTSV9MT0dJQ0FMX0xBTkVf MDsgaSA8IERTSV9MQU5FX01BWDsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBjZmctPmNvdW50 X3Blcl9sYW5lOyBqKyspIHsKLQkJCWNmZy0+bGFuZVtpXVtqXSA9ICpkYXRhOwotCQkJZGF0YSsr OwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9waHlfc2V0dGlu Z3NfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCSBzdHJ1Y3QgbXNtX2Rz aV9waHkgKnBoeSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2Nm Z3MgKmxhbmUgPSAmcGh5LT5jZmcubGFuZWNmZzsKLQlzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9j ZmdzICpzdHJlbmd0aCA9ICZwaHktPmNmZy5zdHJlbmd0aDsKLQlzdHJ1Y3QgZHNpX3BoeV9wZXJf bGFuZV9jZmdzICp0aW1pbmcgPSAmcGh5LT5jZmcudGltaW5nOwotCXN0cnVjdCBkc2lfcGh5X3Bl cl9sYW5lX2NmZ3MgKnJlZ3MgPSAmcGh5LT5jZmcucmVndWxhdG9yczsKLQotCWxhbmUtPmNvdW50 X3Blcl9sYW5lID0gcGh5LT52ZXJfaW5mby0+bGFuZV9jZmdfY291bnQ7Ci0JcmMgPSBkc2lfcGh5 X3BhcnNlX2R0X3Blcl9sYW5lX2NmZ3MocGRldiwgbGFuZSwKLQkJCQkJICAgICJxY29tLHBsYXRm b3JtLWxhbmUtY29uZmlnIik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNl IGxhbmUgY2ZncywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnI7Ci0JfQotCi0Jc3RyZW5ndGgt PmNvdW50X3Blcl9sYW5lID0gcGh5LT52ZXJfaW5mby0+c3RyZW5ndGhfY2ZnX2NvdW50OwotCXJj ID0gZHNpX3BoeV9wYXJzZV9kdF9wZXJfbGFuZV9jZmdzKHBkZXYsIHN0cmVuZ3RoLAotCQkJCQkg ICAgInFjb20scGxhdGZvcm0tc3RyZW5ndGgtY3RybCIpOwotCWlmIChyYykgewotCQlwcl9lcnIo ImZhaWxlZCB0byBwYXJzZSBsYW5lIGNmZ3MsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyOwot CX0KLQotCXJlZ3MtPmNvdW50X3Blcl9sYW5lID0gcGh5LT52ZXJfaW5mby0+cmVndWxhdG9yX2Nm Z19jb3VudDsKLQlpZiAocmVncy0+Y291bnRfcGVyX2xhbmUgPiAwKSB7Ci0JCXJjID0gZHNpX3Bo eV9wYXJzZV9kdF9wZXJfbGFuZV9jZmdzKHBkZXYsIHJlZ3MsCi0JCQkJCSAgICAicWNvbSxwbGF0 Zm9ybS1yZWd1bGF0b3Itc2V0dGluZ3MiKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxl ZCB0byBwYXJzZSBsYW5lIGNmZ3MsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycjsKLQkJfQot CX0KLQotCS8qIEFjdHVhbCB0aW1pbmcgdmFsdWVzIGFyZSBkZXBlbmRlbnQgb24gcGFuZWwgKi8K LQl0aW1pbmctPmNvdW50X3Blcl9sYW5lID0gcGh5LT52ZXJfaW5mby0+dGltaW5nX2NmZ19jb3Vu dDsKLQlyZXR1cm4gMDsKLWVycjoKLQlsYW5lLT5jb3VudF9wZXJfbGFuZSA9IDA7Ci0Jc3RyZW5n dGgtPmNvdW50X3Blcl9sYW5lID0gMDsKLQlyZWdzLT5jb3VudF9wZXJfbGFuZSA9IDA7Ci0JdGlt aW5nLT5jb3VudF9wZXJfbGFuZSA9IDA7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRz aV9waHlfc2V0dGluZ3NfZGVpbml0KHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KQotewotCW1lbXNl dCgmcGh5LT5jZmcubGFuZWNmZywgMHgwLCBzaXplb2YocGh5LT5jZmcubGFuZWNmZykpOwotCW1l bXNldCgmcGh5LT5jZmcuc3RyZW5ndGgsIDB4MCwgc2l6ZW9mKHBoeS0+Y2ZnLnN0cmVuZ3RoKSk7 Ci0JbWVtc2V0KCZwaHktPmNmZy50aW1pbmcsIDB4MCwgc2l6ZW9mKHBoeS0+Y2ZnLnRpbWluZykp OwotCW1lbXNldCgmcGh5LT5jZmcucmVndWxhdG9ycywgMHgwLCBzaXplb2YocGh5LT5jZmcucmVn dWxhdG9ycykpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9waHlfZHJpdmVyX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IG1zbV9kc2lfcGh5 ICpkc2lfcGh5OwotCXN0cnVjdCBkc2lfcGh5X2xpc3RfaXRlbSAqaXRlbTsKLQljb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkICppZDsKLQljb25zdCBzdHJ1Y3QgZHNpX3Zlcl9zcGVjX2luZm8gKnZl cl9pbmZvOwotCWludCByYyA9IDA7Ci0JdTMyIGluZGV4ID0gMDsKLQotCWlmICghcGRldiB8fCAh cGRldi0+ZGV2Lm9mX25vZGUpIHsKLQkJcHJfZXJyKCJwZGV2IG5vdCBmb3VuZFxuIik7Ci0JCXJl dHVybiAtRU5PREVWOwotCX0KLQotCWlkID0gb2ZfbWF0Y2hfbm9kZShtc21fZHNpX3BoeV9vZl9t YXRjaCwgcGRldi0+ZGV2Lm9mX25vZGUpOwotCWlmICghaWQpCi0JCXJldHVybiAtRU5PREVWOwot Ci0JdmVyX2luZm8gPSBpZC0+ZGF0YTsKLQotCWl0ZW0gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRl diwgc2l6ZW9mKCppdGVtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpdGVtKQotCQlyZXR1cm4gLUVO T01FTTsKLQotCi0JZHNpX3BoeSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRz aV9waHkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRzaV9waHkpIHsKLQkJZGV2bV9rZnJlZSgmcGRl di0+ZGV2LCBpdGVtKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwgImNlbGwtaW5kZXgiLCAmaW5kZXgpOwotCWlm IChyYykgewotCQlwcl9kZWJ1ZygiY2VsbCBpbmRleCBub3Qgc2V0LCBkZWZhdWx0IHRvIDBcbiIp OwotCQlpbmRleCA9IDA7Ci0JfQotCi0JZHNpX3BoeS0+aW5kZXggPSBpbmRleDsKLQotCWRzaV9w aHktPm5hbWUgPSBvZl9nZXRfcHJvcGVydHkocGRldi0+ZGV2Lm9mX25vZGUsICJsYWJlbCIsIE5V TEwpOwotCWlmICghZHNpX3BoeS0+bmFtZSkKLQkJZHNpX3BoeS0+bmFtZSA9IERTSV9QSFlfREVG QVVMVF9MQUJFTDsKLQotCXByX2RlYnVnKCJQcm9iaW5nICVzIGRldmljZVxuIiwgZHNpX3BoeS0+ bmFtZSk7Ci0KLQlyYyA9IGRzaV9waHlfcmVnbWFwX2luaXQocGRldiwgZHNpX3BoeSk7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHBhcnNlIHJlZ2lzdGVyIGluZm9ybWF0aW9uLCBy Yz0lZFxuIiwgcmMpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JcmMgPSBkc2lfcGh5X3N1cHBsaWVz X2luaXQocGRldiwgZHNpX3BoeSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBh cnNlIHZvbHRhZ2Ugc3VwcGxpZXMsIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBmYWlsX3JlZ21h cDsKLQl9Ci0KLQlyYyA9IGRzaV9jYXRhbG9nX3BoeV9zZXR1cCgmZHNpX3BoeS0+aHcsIHZlcl9p bmZvLT52ZXJzaW9uLAotCQkJCSAgIGRzaV9waHktPmluZGV4KTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJDYXRhbG9nIGRvZXMgbm90IHN1cHBvcnQgdmVyc2lvbiAoJWQpXG4iLAotCQkgICAgICAg dmVyX2luZm8tPnZlcnNpb24pOwotCQlnb3RvIGZhaWxfc3VwcGxpZXM7Ci0JfQotCi0JZHNpX3Bo eS0+dmVyX2luZm8gPSB2ZXJfaW5mbzsKLQlyYyA9IGRzaV9waHlfc2V0dGluZ3NfaW5pdChwZGV2 LCBkc2lfcGh5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcGFyc2UgcGh5IHNl dHRpbmcsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZmFpbF9zdXBwbGllczsKLQl9Ci0KLQlpdGVt LT5waHkgPSBkc2lfcGh5OwotCi0JbXV0ZXhfbG9jaygmZHNpX3BoeV9saXN0X2xvY2spOwotCWxp c3RfYWRkKCZpdGVtLT5saXN0LCAmZHNpX3BoeV9saXN0KTsKLQltdXRleF91bmxvY2soJmRzaV9w aHlfbGlzdF9sb2NrKTsKLQotCW11dGV4X2luaXQoJmRzaV9waHktPnBoeV9sb2NrKTsKLQkvKiog VE9ETzogaW5pdGlhbGl6ZSBkZWJ1Z2ZzICovCi0JZHNpX3BoeS0+cGRldiA9IHBkZXY7Ci0JcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpX3BoeSk7Ci0JcHJfaW5mbygiUHJvYmUgc3VjY2Vz c2Z1bCBmb3IgJXNcbiIsIGRzaV9waHktPm5hbWUpOwotCXJldHVybiAwOwotCi1mYWlsX3N1cHBs aWVzOgotCSh2b2lkKWRzaV9waHlfc3VwcGxpZXNfZGVpbml0KGRzaV9waHkpOwotZmFpbF9yZWdt YXA6Ci0JKHZvaWQpZHNpX3BoeV9yZWdtYXBfZGVpbml0KGRzaV9waHkpOwotZmFpbDoKLQlkZXZt X2tmcmVlKCZwZGV2LT5kZXYsIGRzaV9waHkpOwotCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgaXRl bSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9waHlfZHJpdmVyX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IG1z bV9kc2lfcGh5ICpwaHkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgbGlz dF9oZWFkICpwb3MsICp0bXA7Ci0KLQlpZiAoIXBkZXYgfHwgIXBoeSkgewotCQlwcl9lcnIoIklu dmFsaWQgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygm ZHNpX3BoeV9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmRzaV9w aHlfbGlzdCkgewotCQlzdHJ1Y3QgZHNpX3BoeV9saXN0X2l0ZW0gKm47Ci0KLQkJbiA9IGxpc3Rf ZW50cnkocG9zLCBzdHJ1Y3QgZHNpX3BoeV9saXN0X2l0ZW0sIGxpc3QpOwotCQlpZiAobi0+cGh5 ID09IHBoeSkgewotCQkJbGlzdF9kZWwoJm4tPmxpc3QpOwotCQkJZGV2bV9rZnJlZSgmcGRldi0+ ZGV2LCBuKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmZHNpX3BoeV9saXN0 X2xvY2spOwotCi0JbXV0ZXhfbG9jaygmcGh5LT5waHlfbG9jayk7Ci0JcmMgPSBkc2lfcGh5X3Nl dHRpbmdzX2RlaW5pdChwaHkpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZGVpbml0 aWFsaXplIHBoeSBzZXR0aW5ncywgcmM9JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX3BoeV9zdXBw bGllc19kZWluaXQocGh5KTsKLQlpZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRvIGRlaW5pdGlh bGl6ZSB2b2x0YWdlIHN1cHBsaWVzLCByYz0lZFxuIiwgcmMpOwotCi0JcmMgPSBkc2lfcGh5X3Jl Z21hcF9kZWluaXQocGh5KTsKLQlpZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRvIGRlaW5pdGlh bGl6ZSByZWdtYXAsIHJjPSVkXG4iLCByYyk7Ci0JbXV0ZXhfdW5sb2NrKCZwaHktPnBoeV9sb2Nr KTsKLQotCW11dGV4X2Rlc3Ryb3koJnBoeS0+cGh5X2xvY2spOwotCWRldm1fa2ZyZWUoJnBkZXYt PmRldiwgcGh5KTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCi0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRzaV9waHlfcGxhdGZv cm1fZHJpdmVyID0gewotCS5wcm9iZSAgICAgID0gZHNpX3BoeV9kcml2ZXJfcHJvYmUsCi0JLnJl bW92ZSAgICAgPSBkc2lfcGh5X2RyaXZlcl9yZW1vdmUsCi0JLmRyaXZlciAgICAgPSB7Ci0JCS5u YW1lICAgPSAiZHNpX3BoeSIsCi0JCS5vZl9tYXRjaF90YWJsZSA9IG1zbV9kc2lfcGh5X29mX21h dGNoLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBkc2lfcGh5X2VuYWJsZV9odyhzdHJ1Y3QgbXNt X2RzaV9waHkgKnBoeSkKLXsKLQlpZiAocGh5LT5ody5vcHMucmVndWxhdG9yX2VuYWJsZSkKLQkJ cGh5LT5ody5vcHMucmVndWxhdG9yX2VuYWJsZSgmcGh5LT5odywgJnBoeS0+Y2ZnLnJlZ3VsYXRv cnMpOwotCi0JaWYgKHBoeS0+aHcub3BzLmVuYWJsZSkKLQkJcGh5LT5ody5vcHMuZW5hYmxlKCZw aHktPmh3LCAmcGh5LT5jZmcpOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfcGh5X2Rpc2FibGVfaHco c3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0JaWYgKHBoeS0+aHcub3BzLmRpc2FibGUpCi0J CXBoeS0+aHcub3BzLmRpc2FibGUoJnBoeS0+aHcsICZwaHktPmNmZyk7Ci0KLQlpZiAocGh5LT5o dy5vcHMucmVndWxhdG9yX2Rpc2FibGUpCi0JCXBoeS0+aHcub3BzLnJlZ3VsYXRvcl9kaXNhYmxl KCZwaHktPmh3KTsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X2dldCgpIC0gZ2V0IGEgZHNpIHBoeSBo YW5kbGUgZnJvbSBkZXZpY2Ugbm9kZQotICogQG9mX25vZGU6ICAgICAgICAgICBkZXZpY2Ugbm9k ZSBmb3IgZHNpIHBoeSBjb250cm9sbGVyCi0gKgotICogR2V0cyB0aGUgRFNJIFBIWSBoYW5kbGUg Zm9yIHRoZSBjb3JyZXNwb25kaW5nIG9mX25vZGUuIFRoZSByZWYgY291bnQgaXMKLSAqIGluY3Jl bWVudGVkIHRvIG9uZSBhbGwgc3Vic2VxdWVudHMgZ2V0IHdpbGwgZmFpbCB1bnRpbCB0aGUgb3Jp Z2luYWwgY2xpZW50Ci0gKiBjYWxscyBhIHB1dC4KLSAqCi0gKiBSZXR1cm46IERTSSBQSFkgaGFu ZGxlIG9yIGFuIGVycm9yIGNvZGUuCi0gKi8KLXN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeV9n ZXQoc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBv cywgKnRtcDsKLQlzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSA9IE5VTEw7Ci0KLQltdXRleF9sb2Nr KCZkc2lfcGh5X2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCAmZHNp X3BoeV9saXN0KSB7Ci0JCXN0cnVjdCBkc2lfcGh5X2xpc3RfaXRlbSAqbjsKLQotCQluID0gbGlz dF9lbnRyeShwb3MsIHN0cnVjdCBkc2lfcGh5X2xpc3RfaXRlbSwgbGlzdCk7Ci0JCWlmIChuLT5w aHktPnBkZXYtPmRldi5vZl9ub2RlID09IG9mX25vZGUpIHsKLQkJCXBoeSA9IG4tPnBoeTsKLQkJ CWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmZHNpX3BoeV9saXN0X2xvY2spOwotCi0J aWYgKCFwaHkpIHsKLQkJcHJfZXJyKCJEZXZpY2Ugd2l0aCBvZiBub2RlIG5vdCBmb3VuZFxuIik7 Ci0JCXBoeSA9IEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7Ci0JCXJldHVybiBwaHk7Ci0JfQotCi0J bXV0ZXhfbG9jaygmcGh5LT5waHlfbG9jayk7Ci0JaWYgKHBoeS0+cmVmY291bnQgPiAwKSB7Ci0J CXByX2VycigiW1BIWV8lZF0gRGV2aWNlIHVuZGVyIHVzZVxuIiwgcGh5LT5pbmRleCk7Ci0JCXBo eSA9IEVSUl9QVFIoLUVJTlZBTCk7Ci0JfSBlbHNlIHsKLQkJcGh5LT5yZWZjb3VudCsrOwotCX0K LQltdXRleF91bmxvY2soJnBoeS0+cGh5X2xvY2spOwotCXJldHVybiBwaHk7Ci19Ci0KLS8qKgot ICogZHNpX3BoeV9wdXQoKSAtIHJlbGVhc2UgZHNpIHBoeSBoYW5kbGUKLSAqIEBkc2lfcGh5OiAg ICAgICAgICAgICAgRFNJIFBIWSBoYW5kbGUuCi0gKgotICogUmVsZWFzZSB0aGUgRFNJIFBIWSBo YXJkd2FyZS4gRHJpdmVyIHdpbGwgY2xlYW4gdXAgYWxsIHJlc291cmNlcyBhbmQgcHV0cwotICog YmFjayB0aGUgRFNJIFBIWSBpbnRvIHJlc2V0IHN0YXRlLgotICovCi12b2lkIGRzaV9waHlfcHV0 KHN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeSkKLXsKLQltdXRleF9sb2NrKCZkc2lfcGh5LT5w aHlfbG9jayk7Ci0KLQlpZiAoZHNpX3BoeS0+cmVmY291bnQgPT0gMCkKLQkJcHJfZXJyKCJVbmJh bGFuY2VkICVzIGNhbGxcbiIsIF9fZnVuY19fKTsKLQllbHNlCi0JCWRzaV9waHktPnJlZmNvdW50 LS07Ci0KLQltdXRleF91bmxvY2soJmRzaV9waHktPnBoeV9sb2NrKTsKLX0KLQotLyoqCi0gKiBk c2lfcGh5X2Rydl9pbml0KCkgLSBpbml0aWFsaXplIGRzaSBwaHkgZHJpdmVyCi0gKiBAZHNpX3Bo eTogICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAqCi0gKiBJbml0aWFsaXplcyBEU0kgUEhZIGRy aXZlci4gU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBkc2lfcGh5X2dldCgpLgotICoKLSAqIFJldHVy bjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlfZHJ2X2luaXQoc3RydWN0IG1zbV9kc2lf cGh5ICpkc2lfcGh5KQotewotCWNoYXIgZGJnX25hbWVbRFNJX0RFQlVHX05BTUVfTEVOXTsKLQot CXNucHJpbnRmKGRiZ19uYW1lLCBEU0lfREVCVUdfTkFNRV9MRU4sICJkc2klZF9waHkiLCBkc2lf cGh5LT5pbmRleCk7Ci0JZHB1X2RiZ19yZWdfcmVnaXN0ZXJfYmFzZShkYmdfbmFtZSwgZHNpX3Bo eS0+aHcuYmFzZSwKLQkJCQltc21faW9tYXBfc2l6ZShkc2lfcGh5LT5wZGV2LCAiZHNpX3BoeSIp KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X2Rydl9kZWluaXQoKSAtIGRlLWlu aXRpYWxpemUgZHNpIHBoeSBkcml2ZXIKLSAqIEBkc2lfcGh5OiAgICAgICAgICBEU0kgUEhZIGhh bmRsZS4KLSAqCi0gKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMgYWNxdWlyZWQgYnkgZHNpX3BoeV9k cnZfaW5pdCgpLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlf ZHJ2X2RlaW5pdChzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHkpCi17Ci0JcmV0dXJuIDA7Ci19 Ci0KLWludCBkc2lfcGh5X2Nsa19jYl9yZWdpc3RlcihzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9w aHksCi0Jc3RydWN0IGNsa19jdHJsX2NiICpjbGtfY2IpCi17Ci0JaWYgKCFkc2lfcGh5IHx8ICFj bGtfY2IpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCWRzaV9waHktPmNsa19jYi5wcml2ID0gY2xrX2NiLT5wcml2OwotCWRzaV9waHkt PmNsa19jYi5kc2lfY2xrX2NiID0gY2xrX2NiLT5kc2lfY2xrX2NiOwotCXJldHVybiAwOwotfQot Ci0vKioKLSAqIGRzaV9waHlfdmFsaWRhdGVfbW9kZSgpIC0gdmFsaWRhdGUgYSBkaXNwbGF5IG1v ZGUKLSAqIEBkc2lfcGh5OiAgICAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICogQG1vZGU6ICAg ICAgICAgICAgICAgTW9kZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBWYWxpZGF0aW9uIHdpbGwgZmFp bCBpZiB0aGUgbW9kZSBjYW5ub3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgZHJpdmVyIG9yCi0g KiBoYXJkd2FyZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5 X3ZhbGlkYXRlX21vZGUoc3RydWN0IG1zbV9kc2lfcGh5ICpkc2lfcGh5LAotCQkJICBzdHJ1Y3Qg ZHNpX21vZGVfaW5mbyAqbW9kZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfcGh5IHx8 ICFtb2RlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfcGh5LT5waHlfbG9jayk7Ci0KLQlwcl9kZWJ1Zygi W1BIWV8lZF0gU2tpcHBpbmcgdmFsaWRhdGlvblxuIiwgZHNpX3BoeS0+aW5kZXgpOwotCi0JbXV0 ZXhfdW5sb2NrKCZkc2lfcGh5LT5waHlfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAq IGRzaV9waHlfc2V0X3Bvd2VyX3N0YXRlKCkgLSBlbmFibGUvZGlzYWJsZSBkc2kgcGh5IHBvd2Vy IHN1cHBsaWVzCi0gKiBAZHNpX3BoeTogICAgICAgICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAq IEBlbmFibGU6ICAgICAgICAgICAgICAgIEJvb2xlYW4gZmxhZyB0byBlbmFibGUvZGlzYWJsZS4K LSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X3NldF9wb3dlcl9z dGF0ZShzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHksIGJvb2wgZW5hYmxlKQotewotCWludCBy YyA9IDA7Ci0KLQlpZiAoIWRzaV9waHkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9waHktPnBoeV9sb2Nr KTsKLQotCWlmIChlbmFibGUgPT0gZHNpX3BoeS0+cG93ZXJfc3RhdGUpIHsKLQkJcHJfZXJyKCJb UEhZXyVkXSBObyBzdGF0ZSBjaGFuZ2VcbiIsIGRzaV9waHktPmluZGV4KTsKLQkJZ290byBlcnJv cjsKLQl9Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCXJjID0gZHNpX3B3cl9lbmFibGVfcmVndWxhdG9y KCZkc2lfcGh5LT5wd3JfaW5mby5kaWdpdGFsLCB0cnVlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9l cnIoImZhaWxlZCB0byBlbmFibGUgZGlnaXRhbCByZWd1bGF0b3JcbiIpOwotCQkJZ290byBlcnJv cjsKLQkJfQotCi0JCWlmIChkc2lfcGh5LT5kc2lfcGh5X3N0YXRlID09IERTSV9QSFlfRU5HSU5F X09GRikgewotCQkJcmMgPSBkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoCi0JCQkJJmRzaV9waHkt PnB3cl9pbmZvLnBoeV9wd3IsIHRydWUpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJmYWls ZWQgdG8gZW5hYmxlIHBoeSBwb3dlclxuIik7Ci0JCQkJKHZvaWQpZHNpX3B3cl9lbmFibGVfcmVn dWxhdG9yKAotCQkJCQkmZHNpX3BoeS0+cHdyX2luZm8uZGlnaXRhbCwgZmFsc2UpOwotCQkJCWdv dG8gZXJyb3I7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoZHNpX3BoeS0+ZHNpX3BoeV9z dGF0ZSA9PSBEU0lfUEhZX0VOR0lORV9PRkYpIHsKLQkJCXJjID0gZHNpX3B3cl9lbmFibGVfcmVn dWxhdG9yKAotCQkJCSZkc2lfcGh5LT5wd3JfaW5mby5waHlfcHdyLCBmYWxzZSk7Ci0JCQlpZiAo cmMpIHsKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgZGlnaXRhbCByZWd1bGF0b3JcbiIp OwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCX0KLQotCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3Jl Z3VsYXRvcigmZHNpX3BoeS0+cHdyX2luZm8uZGlnaXRhbCwKLQkJCQkJICAgICAgZmFsc2UpOwot CQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBwaHkgcG93ZXJcbiIpOwot CQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCWRzaV9waHktPnBvd2VyX3N0YXRlID0gZW5hYmxl OwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfcGh5LT5waHlfbG9jayk7Ci0JcmV0dXJuIHJj OwotfQotCi1zdGF0aWMgaW50IGRzaV9waHlfZW5hYmxlX3VscHMoc3RydWN0IG1zbV9kc2lfcGh5 ICpwaHksCi0JCXN0cnVjdCBkc2lfaG9zdF9jb25maWcgKmNvbmZpZywgYm9vbCBjbGFtcF9lbmFi bGVkKQotewotCWludCByYyA9IDA7Ci0JdTMyIGxhbmVzID0gMDsKLQl1MzIgdWxwc19sYW5lczsK LQotCWlmIChjb25maWctPnBhbmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RFKQotCQlsYW5lcyA9 IGNvbmZpZy0+Y29tbW9uX2NvbmZpZy5kYXRhX2xhbmVzOwotCWxhbmVzIHw9IERTSV9DTE9DS19M QU5FOwotCi0JLyoKLQkgKiBJZiBEU0kgY2xhbXBzIGFyZSBlbmFibGVkLCBpdCBtZWFucyB0aGF0 IHRoZSBEU0kgbGFuZXMgYXJlCi0JICogYWxyZWFkeSBpbiBpZGxlIHN0YXRlLiBDaGVja2luZyBm b3IgbGFuZXMgdG8gYmUgaW4gaWRsZSBzdGF0ZQotCSAqIHNob3VsZCBiZSBza2lwcGVkIGR1cmlu ZyBVTFBTIGVudHJ5IHByb2dyYW1taW5nIHdoaWxlIGNvbWluZwotCSAqIG91dCBvZiBpZGxlIHNj cmVlbi4KLQkgKi8KLQlpZiAoIWNsYW1wX2VuYWJsZWQpIHsKLQkJcmMgPSBwaHktPmh3Lm9wcy51 bHBzX29wcy53YWl0X2Zvcl9sYW5lX2lkbGUoJnBoeS0+aHcsIGxhbmVzKTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoImxhbmVzIG5vdCBlbnRlcmluZyBpZGxlLCBza2lwIFVMUFNcbiIpOwotCQkJ cmV0dXJuIHJjOwotCQl9Ci0JfQotCi0JcGh5LT5ody5vcHMudWxwc19vcHMudWxwc19yZXF1ZXN0 KCZwaHktPmh3LCAmcGh5LT5jZmcsIGxhbmVzKTsKLQotCXVscHNfbGFuZXMgPSBwaHktPmh3Lm9w cy51bHBzX29wcy5nZXRfbGFuZXNfaW5fdWxwcygmcGh5LT5odyk7Ci0KLQlpZiAoIXBoeS0+aHcu b3BzLnVscHNfb3BzLmlzX2xhbmVzX2luX3VscHMobGFuZXMsIHVscHNfbGFuZXMpKSB7Ci0JCXBy X2VycigiRmFpbGVkIHRvIGVudGVyIFVMUFMsIHJlcXVlc3Q9MHgleCwgYWN0dWFsPTB4JXhcbiIs Ci0JCSAgICAgICBsYW5lcywgdWxwc19sYW5lcyk7Ci0JCXJjID0gLUVJTzsKLQl9Ci0KLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BoeV9kaXNhYmxlX3VscHMoc3RydWN0IG1zbV9k c2lfcGh5ICpwaHksCi0JCSBzdHJ1Y3QgZHNpX2hvc3RfY29uZmlnICpjb25maWcpCi17Ci0JdTMy IHVscHNfbGFuZXMsIGxhbmVzID0gMDsKLQotCWlmIChjb25maWctPnBhbmVsX21vZGUgPT0gRFNJ X09QX0NNRF9NT0RFKQotCQlsYW5lcyA9IGNvbmZpZy0+Y29tbW9uX2NvbmZpZy5kYXRhX2xhbmVz OwotCWxhbmVzIHw9IERTSV9DTE9DS19MQU5FOwotCi0JdWxwc19sYW5lcyA9IHBoeS0+aHcub3Bz LnVscHNfb3BzLmdldF9sYW5lc19pbl91bHBzKCZwaHktPmh3KTsKLQotCWlmICghcGh5LT5ody5v cHMudWxwc19vcHMuaXNfbGFuZXNfaW5fdWxwcyhsYW5lcywgdWxwc19sYW5lcykpIHsKLQkJcHJf ZXJyKCJNaXNtYXRjaCBpbiBVTFBTOiBsYW5lczolZCwgdWxwc19sYW5lczolZFxuIiwKLQkJCQls YW5lcywgdWxwc19sYW5lcyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXBoeS0+aHcub3BzLnVs cHNfb3BzLnVscHNfZXhpdCgmcGh5LT5odywgJnBoeS0+Y2ZnLCBsYW5lcyk7Ci0KLQl1bHBzX2xh bmVzID0gcGh5LT5ody5vcHMudWxwc19vcHMuZ2V0X2xhbmVzX2luX3VscHMoJnBoeS0+aHcpOwot Ci0JaWYgKHBoeS0+aHcub3BzLnVscHNfb3BzLmlzX2xhbmVzX2luX3VscHMobGFuZXMsIHVscHNf bGFuZXMpKSB7Ci0JCXByX2VycigiTGFuZXMgKDB4JXgpIHN0dWNrIGluIFVMUFNcbiIsIHVscHNf bGFuZXMpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgZHNp X3BoeV9zZXRfdWxwcyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwgc3RydWN0IGRzaV9ob3N0X2Nv bmZpZyAqY29uZmlnLAotCQlib29sIGVuYWJsZSwgYm9vbCBjbGFtcF9lbmFibGVkKQotewotCWlu dCByYyA9IDA7Ci0KLQlpZiAoIXBoeSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFwaHktPmh3Lm9wcy51bHBzX29wcy51bHBz X3JlcXVlc3QgfHwKLQkJCSFwaHktPmh3Lm9wcy51bHBzX29wcy51bHBzX2V4aXQgfHwKLQkJCSFw aHktPmh3Lm9wcy51bHBzX29wcy5nZXRfbGFuZXNfaW5fdWxwcyB8fAotCQkJIXBoeS0+aHcub3Bz LnVscHNfb3BzLmlzX2xhbmVzX2luX3VscHMgfHwKLQkJCSFwaHktPmh3Lm9wcy51bHBzX29wcy53 YWl0X2Zvcl9sYW5lX2lkbGUpIHsKLQkJcHJfZGVidWcoIkRTSSBQSFkgVUxQUyBvcHMgbm90IHBy ZXNlbnRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2Nr KTsKLQotCWlmIChlbmFibGUpCi0JCXJjID0gZHNpX3BoeV9lbmFibGVfdWxwcyhwaHksIGNvbmZp ZywgY2xhbXBfZW5hYmxlZCk7Ci0JZWxzZQotCQlyYyA9IGRzaV9waHlfZGlzYWJsZV91bHBzKHBo eSwgY29uZmlnKTsKLQotCWlmIChyYykgewotCQlwcl9lcnIoIltEU0lfUEhZJWRdIFVscHMgc3Rh dGUgY2hhbmdlKCVkKSBmYWlsZWQsIHJjPSVkXG4iLAotCQkJcGh5LT5pbmRleCwgZW5hYmxlLCBy Yyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXByX2RlYnVnKCJbRFNJX1BIWSVkXSBVTFBTIHN0YXRl ID0gJWRcbiIsIHBoeS0+aW5kZXgsIGVuYWJsZSk7Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygm cGh5LT5waHlfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9waHlfZW5hYmxl KCkgLSBlbmFibGUgRFNJIFBIWSBoYXJkd2FyZQotICogQGRzaV9waHk6ICAgICAgICAgICAgRFNJ IFBIWSBoYW5kbGUuCi0gKiBAY29uZmlnOiAgICAgICAgICAgICBEU0kgaG9zdCBjb25maWd1cmF0 aW9uLgotICogQHBsbF9zb3VyY2U6ICAgICAgICAgU291cmNlIFBMTCBmb3IgUEhZIGNsb2NrLgot ICogQHNraXBfdmFsaWRhdGlvbjogICAgVmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBwZXJmb3JtZWQg b24gcGFyYW1ldGVycy4KLSAqCi0gKiBWYWxpZGF0ZXMgYW5kIGVuYWJsZXMgRFNJIFBIWS4KLSAq Ci0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X2VuYWJsZShzdHJ1Y3Qg bXNtX2RzaV9waHkgKnBoeSwKLQkJICAgc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAqY29uZmlnLAot CQkgICBlbnVtIGRzaV9waHlfcGxsX3NvdXJjZSBwbGxfc291cmNlLAotCQkgICBib29sIHNraXBf dmFsaWRhdGlvbikKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwaHkgfHwgIWNvbmZpZykgewot CQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J bXV0ZXhfbG9jaygmcGh5LT5waHlfbG9jayk7Ci0KLQlpZiAoIXNraXBfdmFsaWRhdGlvbikKLQkJ cHJfZGVidWcoIltQSFlfJWRdIFRPRE86IHBlcmZvcm0gdmFsaWRhdGlvblxuIiwgcGh5LT5pbmRl eCk7Ci0KLQltZW1jcHkoJnBoeS0+bW9kZSwgJmNvbmZpZy0+dmlkZW9fdGltaW5nLCBzaXplb2Yo cGh5LT5tb2RlKSk7Ci0JbWVtY3B5KCZwaHktPmNmZy5sYW5lX21hcCwgJmNvbmZpZy0+bGFuZV9t YXAsIHNpemVvZihjb25maWctPmxhbmVfbWFwKSk7Ci0JcGh5LT5kYXRhX2xhbmVzID0gY29uZmln LT5jb21tb25fY29uZmlnLmRhdGFfbGFuZXM7Ci0JcGh5LT5kc3RfZm9ybWF0ID0gY29uZmlnLT5j b21tb25fY29uZmlnLmRzdF9mb3JtYXQ7Ci0JcGh5LT5jZmcucGxsX3NvdXJjZSA9IHBsbF9zb3Vy Y2U7Ci0KLQkvKioKLQkgKiBJZiBQSFkgdGltaW5nIHBhcmFtZXRlcnMgYXJlIG5vdCBwcmVzZW50 IGluIHBhbmVsIGR0c2kgZmlsZSwKLQkgKiB0aGVuIGNhbGN1bGF0ZSB0aGVtIGluIHRoZSBkcml2 ZXIKLQkgKi8KLQlpZiAoIXBoeS0+Y2ZnLmlzX3BoeV90aW1pbmdfcHJlc2VudCkKLQkJcmMgPSBw aHktPmh3Lm9wcy5jYWxjdWxhdGVfdGltaW5nX3BhcmFtcygmcGh5LT5odywKLQkJCQkJCSAmcGh5 LT5tb2RlLAotCQkJCQkJICZjb25maWctPmNvbW1vbl9jb25maWcsCi0JCQkJCQkgJnBoeS0+Y2Zn LnRpbWluZyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2V0IHRpbWlu ZywgcmM9JWRcbiIsIHBoeS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWRzaV9w aHlfZW5hYmxlX2h3KHBoeSk7Ci0JcGh5LT5kc2lfcGh5X3N0YXRlID0gRFNJX1BIWV9FTkdJTkVf T047Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmcGh5LT5waHlfbG9jayk7Ci0KLQlyZXR1cm4g cmM7Ci19Ci0KLS8qKgotICogZHNpX3BoeV9kaXNhYmxlKCkgLSBkaXNhYmxlIERTSSBQSFkgaGFy ZHdhcmUuCi0gKiBAcGh5OiAgICAgICAgRFNJIFBIWSBoYW5kbGUuCi0gKgotICogUmV0dXJuOiBl cnJvciBjb2RlLgotICovCi1pbnQgZHNpX3BoeV9kaXNhYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAq cGh5KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBoeSkgewotCQlwcl9lcnIoIkludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGh5LT5w aHlfbG9jayk7Ci0JZHNpX3BoeV9kaXNhYmxlX2h3KHBoeSk7Ci0JcGh5LT5kc2lfcGh5X3N0YXRl ID0gRFNJX1BIWV9FTkdJTkVfT0ZGOwotCW11dGV4X3VubG9jaygmcGh5LT5waHlfbG9jayk7Ci0K LQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX3BoeV9pZGxlX2N0cmwoKSAtIGVuYWJsZS9k aXNhYmxlIERTSSBQSFkgZHVyaW5nIGlkbGUgc2NyZWVuCi0gKiBAcGh5OiAgICAgICAgICBEU0kg UEhZIGhhbmRsZQotICogQGVuYWJsZTogICAgICAgYm9vbGVhbiB0byBzcGVjaWZ5IFBIWSBlbmFi bGUvZGlzYWJsZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLQotaW50IGRzaV9w aHlfaWRsZV9jdHJsKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LCBib29sIGVuYWJsZSkKLXsKLQlp ZiAoIXBoeSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGh5LT5waHlfbG9jayk7Ci0JaWYgKGVuYWJsZSkgewot CQlpZiAocGh5LT5ody5vcHMucGh5X2lkbGVfb24pCi0JCQlwaHktPmh3Lm9wcy5waHlfaWRsZV9v bigmcGh5LT5odywgJnBoeS0+Y2ZnKTsKLQotCQlpZiAocGh5LT5ody5vcHMucmVndWxhdG9yX2Vu YWJsZSkKLQkJCXBoeS0+aHcub3BzLnJlZ3VsYXRvcl9lbmFibGUoJnBoeS0+aHcsCi0JCQkJJnBo eS0+Y2ZnLnJlZ3VsYXRvcnMpOwotCX0gZWxzZSB7Ci0JCWlmIChwaHktPmh3Lm9wcy5waHlfaWRs ZV9vZmYpCi0JCQlwaHktPmh3Lm9wcy5waHlfaWRsZV9vZmYoJnBoeS0+aHcpOwotCX0KLQltdXRl eF91bmxvY2soJnBoeS0+cGh5X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHNp X3BoeV9zZXRfdGltaW5nX3BhcmFtcygpIC0gdGltaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBwYW5l bAotICogQHBoeTogICAgICAgICAgRFNJIFBIWSBoYW5kbGUKLSAqIEB0aW1pbmc6ICAgICAgIGFy cmF5IGhvbGRpbmcgdGltaW5nIHBhcmFtcy4KLSAqIEBzaXplOiAgICAgICAgIHNpemUgb2YgdGhl IGFycmF5LgotICoKLSAqIFdoZW4gUEhZIHRpbWluZyBjYWxjdWxhdG9yIGlzIG5vdCBpbXBsZW1l bnRlZCwgdGhpcyBhcnJheSB3aWxsIGJlIHVzZWQgdG8KLSAqIHBhc3MgUEhZIHRpbWluZyBpbmZv cm1hdGlvbi4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X3Nl dF90aW1pbmdfcGFyYW1zKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LAotCQkJICAgICAgdTMyICp0 aW1pbmcsIHUzMiBzaXplKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBoeSB8fCAhdGltaW5n IHx8ICFzaXplKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQotCWlmIChwaHktPmh3 Lm9wcy5waHlfdGltaW5nX3ZhbCkKLQkJcmMgPSBwaHktPmh3Lm9wcy5waHlfdGltaW5nX3ZhbCgm cGh5LT5jZmcudGltaW5nLCB0aW1pbmcsIHNpemUpOwotCWlmICghcmMpCi0JCXBoeS0+Y2ZnLmlz X3BoeV90aW1pbmdfcHJlc2VudCA9IHRydWU7Ci0JbXV0ZXhfdW5sb2NrKCZwaHktPnBoeV9sb2Nr KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgZHNpX3BoeV9kcnZfcmVnaXN0ZXIodm9pZCkKLXsK LQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRzaV9waHlfcGxhdGZvcm1fZHJpdmVyKTsKLX0K LQotdm9pZCBkc2lfcGh5X2Rydl91bnJlZ2lzdGVyKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVy X3VucmVnaXN0ZXIoJmRzaV9waHlfcGxhdGZvcm1fZHJpdmVyKTsKLX0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeS5oIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDkyMzA3ZTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9k c2lfcGh5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo dCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYgX0RTSV9QSFlfSF8KLSNkZWZpbmUgX0RTSV9Q SFlfSF8KLQotI2luY2x1ZGUgImRzaV9kZWZzLmgiCi0jaW5jbHVkZSAiZHNpX2Nsay5oIgotI2lu Y2x1ZGUgImRzaV9wd3IuaCIKLSNpbmNsdWRlICJkc2lfcGh5X2h3LmgiCi0KLXN0cnVjdCBkc2lf dmVyX3NwZWNfaW5mbyB7Ci0JZW51bSBkc2lfcGh5X3ZlcnNpb24gdmVyc2lvbjsKLQl1MzIgbGFu ZV9jZmdfY291bnQ7Ci0JdTMyIHN0cmVuZ3RoX2NmZ19jb3VudDsKLQl1MzIgcmVndWxhdG9yX2Nm Z19jb3VudDsKLQl1MzIgdGltaW5nX2NmZ19jb3VudDsKLX07Ci0KLS8qKgotICogc3RydWN0IGRz aV9waHlfcG93ZXJfaW5mbyAtIGRpZ2l0YWwgYW5kIGFuYWxvZyBwb3dlciBzdXBwbGllcyBmb3Ig RFNJIFBIWQotICogQGRpZ2l0YWw6ICAgICAgIERpZ2l0YWwgcG93ZXIgc3VwcGx5IGZvciBEU0kg UEhZLgotICogQHBoeV9wd3I6ICAgICAgIEFuYWxvZyBwb3dlciBzdXBwbGllcyBmb3IgRFNJIFBI WSB0byB3b3JrLgotICovCi1zdHJ1Y3QgZHNpX3BoeV9wb3dlcl9pbmZvIHsKLQlzdHJ1Y3QgZHNp X3JlZ3VsYXRvcl9pbmZvIGRpZ2l0YWw7Ci0Jc3RydWN0IGRzaV9yZWd1bGF0b3JfaW5mbyBwaHlf cHdyOwotfTsKLQotLyoqCi0gKiBlbnVtIHBoeV9lbmdpbmVfc3RhdGUgLSBkZWZpbmUgZW5naW5l IHN0YXR1cyBmb3IgZHNpIHBoeS4KLSAqIEBEU0lfUEhZX0VOR0lORV9PRkY6ICBFbmdpbmUgaXMg dHVybmVkIG9mZi4KLSAqIEBEU0lfUEhZX0VOR0lORV9PTjogICBFbmdpbmUgaXMgdHVybmVkIG9u LgotICogQERTSV9QSFlfRU5HSU5FX01BWDogIE1heGltdW0gdmFsdWUuCi0gKi8KLWVudW0gcGh5 X2VuZ2luZV9zdGF0ZSB7Ci0JRFNJX1BIWV9FTkdJTkVfT0ZGID0gMCwKLQlEU0lfUEhZX0VOR0lO RV9PTiwKLQlEU0lfUEhZX0VOR0lORV9NQVgsCi19OwotCi0KLS8qKgotICogc3RydWN0IG1zbV9k c2lfcGh5IC0gRFNJIFBIWSBvYmplY3QKLSAqIEBwZGV2OiAgICAgICAgICAgICAgUG9pbnRlciB0 byBwbGF0Zm9ybSBkZXZpY2UuCi0gKiBAaW5kZXg6ICAgICAgICAgICAgIEluc3RhbmNlIGlkLgot ICogQG5hbWU6ICAgICAgICAgICAgICBOYW1lIG9mIHRoZSBQSFkgaW5zdGFuY2UuCi0gKiBAcmVm Y291bnQ6ICAgICAgICAgIFJlZmVyZW5jZSBjb3VudC4KLSAqIEBwaHlfbG9jazogICAgICAgICAg TXV0ZXggZm9yIGhhcmR3YXJlIGFuZCBvYmplY3QgYWNjZXNzLgotICogQHZlcl9pbmZvOiAgICAg ICAgICBWZXJzaW9uIHNwZWNpZmljIHBoeSBwYXJhbWV0ZXJzLgotICogQGh3OiAgICAgICAgICAg ICAgICBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqIEBwd3JfaW5mbzogICAgICAgICAgUG93 ZXIgaW5mb3JtYXRpb24uCi0gKiBAY2ZnOiAgICAgICAgICAgICAgIERTSSBwaHkgY29uZmlndXJh dGlvbi4KLSAqIEBjbGtfY2I6CSAgICAgICBzdHJ1Y3R1cmUgY29udGFpbmluZyBjYWxsIGJhY2tz IGZvciBjbG9jayBjb250cm9sCi0gKiBAcG93ZXJfc3RhdGU6ICAgICAgIFRydWUgaWYgUEhZIGlz IHBvd2VyZWQgb24uCi0gKiBAZHNpX3BoeV9zdGF0ZTogICAgIFBIWSBzdGF0ZSBpbmZvcm1hdGlv bi4KLSAqIEBtb2RlOiAgICAgICAgICAgICAgQ3VycmVudCBtb2RlLgotICogQGRhdGFfbGFuZXM6 ICAgICAgICBOdW1iZXIgb2YgZGF0YSBsYW5lcyB1c2VkLgotICogQGRzdF9mb3JtYXQ6ICAgICAg ICBEZXN0aW5hdGlvbiBmb3JtYXQuCi0gKi8KLXN0cnVjdCBtc21fZHNpX3BoeSB7Ci0Jc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlpbnQgaW5kZXg7Ci0JY29uc3QgY2hhciAqbmFtZTsK LQl1MzIgcmVmY291bnQ7Ci0Jc3RydWN0IG11dGV4IHBoeV9sb2NrOwotCi0JY29uc3Qgc3RydWN0 IGRzaV92ZXJfc3BlY19pbmZvICp2ZXJfaW5mbzsKLQlzdHJ1Y3QgZHNpX3BoeV9odyBodzsKLQot CXN0cnVjdCBkc2lfcGh5X3Bvd2VyX2luZm8gcHdyX2luZm87Ci0KLQlzdHJ1Y3QgZHNpX3BoeV9j ZmcgY2ZnOwotCXN0cnVjdCBjbGtfY3RybF9jYiBjbGtfY2I7Ci0KLQllbnVtIHBoeV9lbmdpbmVf c3RhdGUgZHNpX3BoeV9zdGF0ZTsKLQlib29sIHBvd2VyX3N0YXRlOwotCXN0cnVjdCBkc2lfbW9k ZV9pbmZvIG1vZGU7Ci0JZW51bSBkc2lfZGF0YV9sYW5lcyBkYXRhX2xhbmVzOwotCWVudW0gZHNp X3BpeGVsX2Zvcm1hdCBkc3RfZm9ybWF0OwotfTsKLQotLyoqCi0gKiBkc2lfcGh5X2dldCgpIC0g Z2V0IGEgZHNpIHBoeSBoYW5kbGUgZnJvbSBkZXZpY2Ugbm9kZQotICogQG9mX25vZGU6ICAgICAg ICAgICBkZXZpY2Ugbm9kZSBmb3IgZHNpIHBoeSBjb250cm9sbGVyCi0gKgotICogR2V0cyB0aGUg RFNJIFBIWSBoYW5kbGUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIG9mX25vZGUuIFRoZSByZWYgY291 bnQgaXMKLSAqIGluY3JlbWVudGVkIHRvIG9uZSBhbGwgc3Vic2VxdWVudHMgZ2V0IHdpbGwgZmFp bCB1bnRpbCB0aGUgb3JpZ2luYWwgY2xpZW50Ci0gKiBjYWxscyBhIHB1dC4KLSAqCi0gKiBSZXR1 cm46IERTSSBQSFkgaGFuZGxlIG9yIGFuIGVycm9yIGNvZGUuCi0gKi8KLXN0cnVjdCBtc21fZHNp X3BoeSAqZHNpX3BoeV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKTsKLQotLyoqCi0g KiBkc2lfcGh5X3B1dCgpIC0gcmVsZWFzZSBkc2kgcGh5IGhhbmRsZQotICogQGRzaV9waHk6ICAg ICAgICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAqCi0gKiBSZWxlYXNlIHRoZSBEU0kgUEhZIGhh cmR3YXJlLiBEcml2ZXIgd2lsbCBjbGVhbiB1cCBhbGwgcmVzb3VyY2VzIGFuZCBwdXRzCi0gKiBi YWNrIHRoZSBEU0kgUEhZIGludG8gcmVzZXQgc3RhdGUuCi0gKi8KLXZvaWQgZHNpX3BoeV9wdXQo c3RydWN0IG1zbV9kc2lfcGh5ICpkc2lfcGh5KTsKLQotLyoqCi0gKiBkc2lfcGh5X2Rydl9pbml0 KCkgLSBpbml0aWFsaXplIGRzaSBwaHkgZHJpdmVyCi0gKiBAZHNpX3BoeTogICAgICAgICBEU0kg UEhZIGhhbmRsZS4KLSAqCi0gKiBJbml0aWFsaXplcyBEU0kgUEhZIGRyaXZlci4gU2hvdWxkIGJl IGNhbGxlZCBhZnRlciBkc2lfcGh5X2dldCgpLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4K LSAqLwotaW50IGRzaV9waHlfZHJ2X2luaXQoc3RydWN0IG1zbV9kc2lfcGh5ICpkc2lfcGh5KTsK LQotLyoqCi0gKiBkc2lfcGh5X2Rydl9kZWluaXQoKSAtIGRlLWluaXRpYWxpemUgZHNpIHBoeSBk cml2ZXIKLSAqIEBkc2lfcGh5OiAgICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAqCi0gKiBSZWxl YXNlIGFsbCByZXNvdXJjZXMgYWNxdWlyZWQgYnkgZHNpX3BoeV9kcnZfaW5pdCgpLgotICoKLSAq IFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlfZHJ2X2RlaW5pdChzdHJ1Y3Qg bXNtX2RzaV9waHkgKmRzaV9waHkpOwotCi0vKioKLSAqIGRzaV9waHlfdmFsaWRhdGVfbW9kZSgp IC0gdmFsaWRhdGUgYSBkaXNwbGF5IG1vZGUKLSAqIEBkc2lfcGh5OiAgICAgICAgICAgIERTSSBQ SFkgaGFuZGxlLgotICogQG1vZGU6ICAgICAgICAgICAgICAgTW9kZSBpbmZvcm1hdGlvbi4KLSAq Ci0gKiBWYWxpZGF0aW9uIHdpbGwgZmFpbCBpZiB0aGUgbW9kZSBjYW5ub3QgYmUgc3VwcG9ydGVk IGJ5IHRoZSBQSFkgZHJpdmVyIG9yCi0gKiBoYXJkd2FyZS4KLSAqCi0gKiBSZXR1cm46IGVycm9y IGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X3ZhbGlkYXRlX21vZGUoc3RydWN0IG1zbV9kc2lfcGh5 ICpkc2lfcGh5LAotCQkJICBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqbW9kZSk7Ci0KLS8qKgotICog ZHNpX3BoeV9zZXRfcG93ZXJfc3RhdGUoKSAtIGVuYWJsZS9kaXNhYmxlIGRzaSBwaHkgcG93ZXIg c3VwcGxpZXMKLSAqIEBkc2lfcGh5OiAgICAgICAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICog QGVuYWJsZTogICAgICAgICAgICAgICAgQm9vbGVhbiBmbGFnIHRvIGVuYWJsZS9kaXNhYmxlLgot ICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlfc2V0X3Bvd2VyX3N0 YXRlKHN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeSwgYm9vbCBlbmFibGUpOwotCi0vKioKLSAq IGRzaV9waHlfZW5hYmxlKCkgLSBlbmFibGUgRFNJIFBIWSBoYXJkd2FyZQotICogQGRzaV9waHk6 ICAgICAgICAgICAgRFNJIFBIWSBoYW5kbGUuCi0gKiBAY29uZmlnOiAgICAgICAgICAgICBEU0kg aG9zdCBjb25maWd1cmF0aW9uLgotICogQHBsbF9zb3VyY2U6ICAgICAgICAgU291cmNlIFBMTCBm b3IgUEhZIGNsb2NrLgotICogQHNraXBfdmFsaWRhdGlvbjogICAgVmFsaWRhdGlvbiB3aWxsIG5v dCBiZSBwZXJmb3JtZWQgb24gcGFyYW1ldGVycy4KLSAqCi0gKiBWYWxpZGF0ZXMgYW5kIGVuYWJs ZXMgRFNJIFBIWS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5 X2VuYWJsZShzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHksCi0JCSAgIHN0cnVjdCBkc2lfaG9z dF9jb25maWcgKmNvbmZpZywKLQkJICAgZW51bSBkc2lfcGh5X3BsbF9zb3VyY2UgcGxsX3NvdXJj ZSwKLQkJICAgYm9vbCBza2lwX3ZhbGlkYXRpb24pOwotCi0vKioKLSAqIGRzaV9waHlfZGlzYWJs ZSgpIC0gZGlzYWJsZSBEU0kgUEhZIGhhcmR3YXJlLgotICogQHBoeTogICAgICAgIERTSSBQSFkg aGFuZGxlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlfZGlz YWJsZShzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSk7Ci0KLS8qKgotICogZHNpX3BoeV9zZXRfdWxw cygpIC0gc2V0IHVscHMgc3RhdGUgZm9yIERTSSBwSFkKLSAqIEBwaHk6ICAgICAgICAgIERTSSBQ SFkgaGFuZGxlCi0gKiBAY29uZmlnOgkgIERTaSBob3N0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRp b24uCi0gKiBAZW5hYmxlOgkgIEVuYWJsZS9EaXNhYmxlCi0gKiBAY2xhbXBfZW5hYmxlZDogbW1z c19jbGFtcCBlbmFibGVkL2Rpc2FibGVkCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICov Ci1pbnQgZHNpX3BoeV9zZXRfdWxwcyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwgIHN0cnVjdCBk c2lfaG9zdF9jb25maWcgKmNvbmZpZywKLQkJYm9vbCBlbmFibGUsIGJvb2wgY2xhbXBfZW5hYmxl ZCk7Ci0KLS8qKgotICogZHNpX3BoeV9jbGtfY2JfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIFBIWSBj bG9jayBjb250cm9sIGNhbGxiYWNrCi0gKiBAcGh5OiAgICAgICAgICBEU0kgUEhZIGhhbmRsZQot ICogQGNsa19jYjoJICBTdHJ1Y3R1cmUgY29udGFpbmluZyBjYWxsIGJhY2sgZm9yIGNsb2NrIGNv bnRyb2wKLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X2Nsa19j Yl9yZWdpc3RlcihzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwKLQlzdHJ1Y3QgY2xrX2N0cmxfY2Ig KmNsa19jYik7Ci0KLS8qKgotICogZHNpX3BoeV9pZGxlX2N0cmwoKSAtIGVuYWJsZS9kaXNhYmxl IERTSSBQSFkgZHVyaW5nIGlkbGUgc2NyZWVuCi0gKiBAcGh5OiAgICAgICAgICBEU0kgUEhZIGhh bmRsZQotICogQGVuYWJsZTogICAgICAgYm9vbGVhbiB0byBzcGVjaWZ5IFBIWSBlbmFibGUvZGlz YWJsZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X2lkbGVf Y3RybChzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwgYm9vbCBlbmFibGUpOwotCi0vKioKLSAqIGRz aV9waHlfc2V0X3RpbWluZ19wYXJhbXMoKSAtIHRpbWluZyBwYXJhbWV0ZXJzIGZvciB0aGUgcGFu ZWwKLSAqIEBwaHk6ICAgICAgICAgIERTSSBQSFkgaGFuZGxlCi0gKiBAdGltaW5nOiAgICAgICBh cnJheSBob2xkaW5nIHRpbWluZyBwYXJhbXMuCi0gKiBAc2l6ZTogICAgICAgICBzaXplIG9mIHRo ZSBhcnJheS4KLSAqCi0gKiBXaGVuIFBIWSB0aW1pbmcgY2FsY3VsYXRvciBpcyBub3QgaW1wbGVt ZW50ZWQsIHRoaXMgYXJyYXkgd2lsbCBiZSB1c2VkIHRvCi0gKiBwYXNzIFBIWSB0aW1pbmcgaW5m b3JtYXRpb24uCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3BoeV9z ZXRfdGltaW5nX3BhcmFtcyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwKLQkJCSAgICAgIHUzMiAq dGltaW5nLCB1MzIgc2l6ZSk7Ci0KLS8qKgotICogZHNpX3BoeV9kcnZfcmVnaXN0ZXIoKSAtIHJl Z2lzdGVyIHBsYXRmb3JtIGRyaXZlciBmb3IgZHNpIHBoeQotICovCi12b2lkIGRzaV9waHlfZHJ2 X3JlZ2lzdGVyKHZvaWQpOwotCi0vKioKLSAqIGRzaV9waHlfZHJ2X3VucmVnaXN0ZXIoKSAtIHVu cmVnaXN0ZXIgcGxhdGZvcm0gZHJpdmVyCi0gKi8KLXZvaWQgZHNpX3BoeV9kcnZfdW5yZWdpc3Rl cih2b2lkKTsKLQotI2VuZGlmIC8qIF9EU0lfUEhZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfaHcuaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHNpLXN0YWdpbmcvZHNpX3BoeV9ody5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBiNzFhNDU4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX3BoeV9ody5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8qCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9EU0lfUEhZX0hXX0hfCi0jZGVmaW5l IF9EU0lfUEhZX0hXX0hfCi0KLSNpbmNsdWRlICJkc2lfZGVmcy5oIgotCi0jZGVmaW5lIERTSV9N QVhfU0VUVElOR1MgOAotI2RlZmluZSBEU0lfUEhZX1RJTUlOR19WM19TSVpFIDEyCi0KLS8qKgot ICogZW51bSBkc2lfcGh5X3ZlcnNpb24gLSBEU0kgUEhZIHZlcnNpb24gZW51bWVyYXRpb24KLSAq IEBEU0lfUEhZX1ZFUlNJT05fVU5LTk9XTjogICAgVW5rbm93biB2ZXJzaW9uLgotICogQERTSV9Q SFlfVkVSU0lPTl8wXzBfSFBNOiAgICAyOG5tLUhQTS4KLSAqIEBEU0lfUEhZX1ZFUlNJT05fMF8w X0xQTTogICAgMjhubS1IUE0uCi0gKiBARFNJX1BIWV9WRVJTSU9OXzFfMDogICAgICAgIDIwbm0K LSAqIEBEU0lfUEhZX1ZFUlNJT05fMl8wOiAgICAgICAgMTRubQotICogQERTSV9QSFlfVkVSU0lP Tl8zXzA6ICAgICAgICAxMG5tCi0gKiBARFNJX1BIWV9WRVJTSU9OX01BWDoKLSAqLwotZW51bSBk c2lfcGh5X3ZlcnNpb24gewotCURTSV9QSFlfVkVSU0lPTl9VTktOT1dOLAotCURTSV9QSFlfVkVS U0lPTl8wXzBfSFBNLCAvKiAyOG5tLUhQTSAqLwotCURTSV9QSFlfVkVSU0lPTl8wXzBfTFBNLCAv KiAyOG5tLUxQTSAqLwotCURTSV9QSFlfVkVSU0lPTl8xXzAsIC8qIDIwbm0gKi8KLQlEU0lfUEhZ X1ZFUlNJT05fMl8wLCAvKiAxNG5tICovCi0JRFNJX1BIWV9WRVJTSU9OXzNfMCwgLyogMTBubSAq LwotCURTSV9QSFlfVkVSU0lPTl9NQVgKLX07Ci0KLS8qKgotICogZW51bSBkc2lfcGh5X2h3X2Zl YXR1cmVzIC0gZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IERTSSBQSFkgaGFyZHdhcmUKLSAqIEBEU0lf UEhZX0RQSFk6ICAgICAgICBTdXBwb3J0cyBEUEhZCi0gKiBARFNJX1BIWV9DUEhZOiAgICAgICAg U3VwcG9ydHMgQ1BIWQotICogQERTSV9QSFlfTUFYX0ZFQVRVUkVTOgotICovCi1lbnVtIGRzaV9w aHlfaHdfZmVhdHVyZXMgewotCURTSV9QSFlfRFBIWSwKLQlEU0lfUEhZX0NQSFksCi0JRFNJX1BI WV9NQVhfRkVBVFVSRVMKLX07Ci0KLS8qKgotICogZW51bSBkc2lfcGh5X3BsbF9zb3VyY2UgLSBw bGwgY2xvY2sgc291cmNlIGZvciBQSFkuCi0gKiBARFNJX1BMTF9TT1VSQ0VfU1RBTkRBTE9ORTog ICAgQ2xvY2sgaXMgc291cmNlZCBmcm9tIG5hdGl2ZSBQTEwgYW5kIGlzIG5vdAotICoJCQkJICBz aGFyZWQgYnkgb3RoZXIgUEhZcy4KLSAqIEBEU0lfUExMX1NPVVJDRV9OQVRJVkU6ICAgICAgICBD bG9jayBpcyBzb3VyY2VkIGZyb20gbmF0aXZlIFBMTCBhbmQgaXMKLSAqCQkJCSAgc2hhcmVkIGJ5 IG90aGVyIFBIWXMuCi0gKiBARFNJX1BMTF9TT1VSQ0VfTk9OX05BVElWRTogICAgQ2xvY2sgaXMg c291cmNlZCBmcm9tIG90aGVyIFBIWXMuCi0gKiBARFNJX1BMTF9TT1VSQ0VfTUFYOgotICovCi1l bnVtIGRzaV9waHlfcGxsX3NvdXJjZSB7Ci0JRFNJX1BMTF9TT1VSQ0VfU1RBTkRBTE9ORSA9IDAs Ci0JRFNJX1BMTF9TT1VSQ0VfTkFUSVZFLAotCURTSV9QTExfU09VUkNFX05PTl9OQVRJVkUsCi0J RFNJX1BMTF9TT1VSQ0VfTUFYCi19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5l X2NmZ3MgLSBIb2xkcyByZWdpc3RlciB2YWx1ZXMgZm9yIFBIWSBwYXJhbWV0ZXJzCi0gKiBAbGFu ZTogICAgICAgICAgIEEgc2V0IG9mIG1heGltdW0gOCB2YWx1ZXMgZm9yIGVhY2ggbGFuZS4KLSAq IEBsYW5lX3YzOiAgICAgICAgQSBzZXQgb2YgbWF4aW11bSAxMiB2YWx1ZXMgZm9yIGVhY2ggbGFu ZS4KLSAqIEBjb3VudF9wZXJfbGFuZTogTnVtYmVyIG9mIHZhbHVlcyBwZXIgZWFjaCBsYW5lLgot ICovCi1zdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzIHsKLQl1OCBsYW5lW0RTSV9MQU5FX01B WF1bRFNJX01BWF9TRVRUSU5HU107Ci0JdTggbGFuZV92M1tEU0lfUEhZX1RJTUlOR19WM19TSVpF XTsKLQl1MzIgY291bnRfcGVyX2xhbmU7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfcGh5X2Nm ZyAtIERTSSBQSFkgY29uZmlndXJhdGlvbgotICogQGxhbmVjZmc6ICAgICAgICAgIExhbmUgY29u ZmlndXJhdGlvbiBzZXR0aW5ncy4KLSAqIEBzdHJlbmd0aDogICAgICAgICBTdHJlbmd0aCBzZXR0 aW5ncyBmb3IgbGFuZXMuCi0gKiBAdGltaW5nOiAgICAgICAgICAgVGltaW5nIHBhcmFtZXRlcnMg Zm9yIGxhbmVzLgotICogQGlzX3BoeV90aW1pbmdfcHJlc2VudDoJQm9vbGVhbiB3aGV0aGVyIHBo eSB0aW1pbmdzIGFyZSBkZWZpbmVkLgotICogQHJlZ3VsYXRvcnM6ICAgICAgIFJlZ3VsYXRvciBz ZXR0aW5ncyBmb3IgbGFuZXMuCi0gKiBAcGxsX3NvdXJjZTogICAgICAgUExMIHNvdXJjZS4KLSAq IEBsYW5lX21hcDogICAgICAgICBEU0kgbG9naWNhbCB0byBQSFkgbGFuZSBtYXBwaW5nLgotICov Ci1zdHJ1Y3QgZHNpX3BoeV9jZmcgewotCXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgbGFu ZWNmZzsKLQlzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzIHN0cmVuZ3RoOwotCXN0cnVjdCBk c2lfcGh5X3Blcl9sYW5lX2NmZ3MgdGltaW5nOwotCWJvb2wgaXNfcGh5X3RpbWluZ19wcmVzZW50 OwotCXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgcmVndWxhdG9yczsKLQllbnVtIGRzaV9w aHlfcGxsX3NvdXJjZSBwbGxfc291cmNlOwotCXN0cnVjdCBkc2lfbGFuZV9tYXAgbGFuZV9tYXA7 Ci19OwotCi1zdHJ1Y3QgZHNpX3BoeV9odzsKLQotc3RydWN0IHBoeV91bHBzX2NvbmZpZ19vcHMg ewotCS8qKgotCSAqIHdhaXRfZm9yX2xhbmVfaWRsZSgpIC0gd2FpdCBmb3IgRFNJIGxhbmVzIHRv IGdvIHRvIGlkbGUgc3RhdGUKLQkgKiBAcGh5OiAgICAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZ IGhhcmR3YXJlIGluc3RhbmNlLgotCSAqIEBsYW5lczogICAgICAgICBPUmVkIGxpc3Qgb2YgbGFu ZXMgKGVudW0gZHNpX2RhdGFfbGFuZXMpIHdoaWNoIG5lZWQKLQkgKiAgICAgICAgICAgICAgICAg dG8gYmUgY2hlY2tlZCB0byBiZSBpbiBpZGxlIHN0YXRlLgotCSAqLwotCWludCAoKndhaXRfZm9y X2xhbmVfaWRsZSkoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwgdTMyIGxhbmVzKTsKLQotCS8qKgot CSAqIHVscHNfcmVxdWVzdCgpIC0gcmVxdWVzdCB1bHBzIGVudHJ5IGZvciBzcGVjaWZpZWQgbGFu ZXMKLQkgKiBAcGh5OiAgICAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIGluc3Rh bmNlLgotCSAqIEBjZmc6ICAgICAgICAgICBQZXIgbGFuZSBjb25maWd1cmF0aW9ucyBmb3IgdGlt aW5nLCBzdHJlbmd0aCBhbmQgbGFuZQotCSAqCSAgICAgICAgICAgY29uZmlndXJhdGlvbnMuCi0J ICogQGxhbmVzOiAgICAgICAgIE9SZWQgbGlzdCBvZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5l cykgd2hpY2ggbmVlZAotCSAqICAgICAgICAgICAgICAgICB0byBlbnRlciBVTFBTLgotCSAqCi0J ICogQ2FsbGVyIHNob3VsZCBjaGVjayBpZiBsYW5lcyBhcmUgaW4gVUxQUyBtb2RlIGJ5IGNhbGxp bmcKLQkgKiBnZXRfbGFuZXNfaW5fdWxwcygpIG9wZXJhdGlvbi4KLQkgKi8KLQl2b2lkICgqdWxw c19yZXF1ZXN0KShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJc3RydWN0IGRzaV9waHlfY2Zn ICpjZmcsIHUzMiBsYW5lcyk7Ci0KLQkvKioKLQkgKiB1bHBzX2V4aXQoKSAtIGV4aXQgVUxQUyBv biBzcGVjaWZpZWQgbGFuZXMKLQkgKiBAcGh5OiAgICAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZ IGhhcmR3YXJlIGluc3RhbmNlLgotCSAqIEBjZmc6ICAgICAgICAgICBQZXIgbGFuZSBjb25maWd1 cmF0aW9ucyBmb3IgdGltaW5nLCBzdHJlbmd0aCBhbmQgbGFuZQotCSAqICAgICAgICAgICAgICAg ICBjb25maWd1cmF0aW9ucy4KLQkgKiBAbGFuZXM6ICAgICAgICAgT1JlZCBsaXN0IG9mIGxhbmVz IChlbnVtIGRzaV9kYXRhX2xhbmVzKSB3aGljaCBuZWVkCi0JICogICAgICAgICAgICAgICAgIHRv IGV4aXQgVUxQUy4KLQkgKgotCSAqIENhbGxlciBzaG91bGQgY2hlY2sgaWYgbGFuZXMgYXJlIGlu IGFjdGl2ZSBtb2RlIGJ5IGNhbGxpbmcKLQkgKiBnZXRfbGFuZXNfaW5fdWxwcygpIG9wZXJhdGlv bi4KLQkgKi8KLQl2b2lkICgqdWxwc19leGl0KShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJ c3RydWN0IGRzaV9waHlfY2ZnICpjZmcsIHUzMiBsYW5lcyk7Ci0KLQkvKioKLQkgKiBnZXRfbGFu ZXNfaW5fdWxwcygpIC0gcmV0dXJucyB0aGUgbGlzdCBvZiBsYW5lcyBpbiBVTFBTIG1vZGUKLQkg KiBAcGh5OiAgICAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIGluc3RhbmNlLgot CSAqCi0JICogUmV0dXJucyBhbiBPUmVkIGxpc3Qgb2YgbGFuZXMgKGVudW0gZHNpX2RhdGFfbGFu ZXMpIHRoYXQgYXJlIGluIFVMUFMKLQkgKiBzdGF0ZS4KLQkgKgotCSAqIFJldHVybjogTGlzdCBv ZiBsYW5lcyBpbiBVTFBTIHN0YXRlLgotCSAqLwotCXUzMiAoKmdldF9sYW5lc19pbl91bHBzKShz dHJ1Y3QgZHNpX3BoeV9odyAqcGh5KTsKLQotCS8qKgotCSAqIGlzX2xhbmVzX2luX3VscHMoKSAt IGNoZWNrcyBpZiB0aGUgZ2l2ZW4gbGFuZXMgYXJlIGluIHVscHMKLQkgKiBAbGFuZXM6ICAgICAg ICAgICBsYW5lcyB0byBiZSBjaGVja2VkLgotCSAqIEB1bHBzX2xhbmVzOgkgICBsYW5lcyBpbiB1 bHBzIGN1cnJlbmx5LgotCSAqCi0JICogUmV0dXJuOiB0cnVlIGlmIGFsbCB0aGUgZ2l2ZW4gbGFu ZXMgYXJlIGluIHVscHM7IGZhbHNlIG90aGVyd2lzZS4KLQkgKi8KLQlib29sICgqaXNfbGFuZXNf aW5fdWxwcykodTMyIHVscHMsIHUzMiB1bHBzX2xhbmVzKTsKLX07Ci0KLS8qKgotICogc3RydWN0 IGRzaV9waHlfaHdfb3BzIC0gT3BlcmF0aW9ucyBmb3IgRFNJIFBIWSBoYXJkd2FyZS4KLSAqIEBy ZWd1bGF0b3JfZW5hYmxlOiAgICAgICAgICBFbmFibGUgUEhZIHJlZ3VsYXRvcnMuCi0gKiBAcmVn dWxhdG9yX2Rpc2FibGU6ICAgICAgICAgRGlzYWJsZSBQSFkgcmVndWxhdG9ycy4KLSAqIEBlbmFi bGU6ICAgICAgICAgICAgICAgICAgICBFbmFibGUgUEhZLgotICogQGRpc2FibGU6ICAgICAgICAg ICAgICAgICAgIERpc2FibGUgUEhZLgotICogQGNhbGN1bGF0ZV90aW1pbmdfcGFyYW1zOiAgIENh bGN1bGF0ZSBQSFkgdGltaW5nIHBhcmFtcyBmcm9tIG1vZGUgaW5mb3JtYXRpb24KLSAqLwotc3Ry dWN0IGRzaV9waHlfaHdfb3BzIHsKLQkvKioKLQkgKiByZWd1bGF0b3JfZW5hYmxlKCkgLSBlbmFi bGUgcmVndWxhdG9ycyBmb3IgRFNJIFBIWQotCSAqIEBwaHk6ICAgICAgUG9pbnRlciB0byBEU0kg UEhZIGhhcmR3YXJlIG9iamVjdC4KLQkgKiBAcmVnX2NmZzogIFJlZ3VsYXRvciBjb25maWd1cmF0 aW9uIGZvciBhbGwgRFNJIGxhbmVzLgotCSAqLwotCXZvaWQgKCpyZWd1bGF0b3JfZW5hYmxlKShz dHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJCSBzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdz ICpyZWdfY2ZnKTsKLQotCS8qKgotCSAqIHJlZ3VsYXRvcl9kaXNhYmxlKCkgLSBkaXNhYmxlIHJl Z3VsYXRvcnMKLQkgKiBAcGh5OiAgICAgIFBvaW50ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBvYmpl Y3QuCi0JICovCi0Jdm9pZCAoKnJlZ3VsYXRvcl9kaXNhYmxlKShzdHJ1Y3QgZHNpX3BoeV9odyAq cGh5KTsKLQotCS8qKgotCSAqIGVuYWJsZSgpIC0gRW5hYmxlIFBIWSBoYXJkd2FyZQotCSAqIEBw aHk6ICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLQkgKiBAY2ZnOiAg ICAgIFBlciBsYW5lIGNvbmZpZ3VyYXRpb25zIGZvciB0aW1pbmcsIHN0cmVuZ3RoIGFuZCBsYW5l Ci0JICoJICAgICAgY29uZmlndXJhdGlvbnMuCi0JICovCi0Jdm9pZCAoKmVuYWJsZSkoc3RydWN0 IGRzaV9waHlfaHcgKnBoeSwgc3RydWN0IGRzaV9waHlfY2ZnICpjZmcpOwotCi0JLyoqCi0JICog ZGlzYWJsZSgpIC0gRGlzYWJsZSBQSFkgaGFyZHdhcmUKLQkgKiBAcGh5OiAgICAgIFBvaW50ZXIg dG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0JICogQGNmZzogICAgICBQZXIgbGFuZSBjb25m aWd1cmF0aW9ucyBmb3IgdGltaW5nLCBzdHJlbmd0aCBhbmQgbGFuZQotCSAqCSAgICAgIGNvbmZp Z3VyYXRpb25zLgotCSAqLwotCXZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5 LCBzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZyk7Ci0KLQkvKioKLQkgKiBwaHlfaWRsZV9vbigpIC0g RW5hYmxlIFBIWSBoYXJkd2FyZSB3aGVuIGVudGVyaW5nIGlkbGUgc2NyZWVuCi0JICogQHBoeTog ICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotCSAqIEBjZmc6ICAgICAg UGVyIGxhbmUgY29uZmlndXJhdGlvbnMgZm9yIHRpbWluZywgc3RyZW5ndGggYW5kIGxhbmUKLQkg KgkgICAgICBjb25maWd1cmF0aW9ucy4KLQkgKi8KLQl2b2lkICgqcGh5X2lkbGVfb24pKHN0cnVj dCBkc2lfcGh5X2h3ICpwaHksIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKTsKLQotCS8qKgotCSAq IHBoeV9pZGxlX29mZigpIC0gRGlzYWJsZSBQSFkgaGFyZHdhcmUgd2hlbiBleGl0aW5nIGlkbGUg c2NyZWVuCi0JICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0 LgotCSAqLwotCXZvaWQgKCpwaHlfaWRsZV9vZmYpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpOwot Ci0JLyoqCi0JICogY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMoKSAtIGNhbGN1bGF0ZXMgdGltaW5n IHBhcmFtZXRlcnMuCi0JICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUg b2JqZWN0LgotCSAqIEBtb2RlOiAgICAgTW9kZSBpbmZvcm1hdGlvbiBmb3Igd2hpY2ggdGltaW5n IGhhcyB0byBiZSBjYWxjdWxhdGVkLgotCSAqIEBjb25maWc6ICAgRFNJIGhvc3QgY29uZmlndXJh dGlvbiBmb3IgdGhpcyBtb2RlLgotCSAqIEB0aW1pbmc6ICAgVGltaW5nIHBhcmFtZXRlcnMgZm9y IGVhY2ggbGFuZSB3aGljaCB3aWxsIGJlIHJldHVybmVkLgotCSAqLwotCWludCAoKmNhbGN1bGF0 ZV90aW1pbmdfcGFyYW1zKShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJCSAgICAgICBzdHJ1 Y3QgZHNpX21vZGVfaW5mbyAqbW9kZSwKLQkJCQkgICAgICAgc3RydWN0IGRzaV9ob3N0X2NvbW1v bl9jZmcgKmNvbmZpZywKLQkJCQkgICAgICAgc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAq dGltaW5nKTsKLQotCS8qKgotCSAqIHBoeV90aW1pbmdfdmFsKCkgLSBHZXRzIFBIWSB0aW1pbmcg dmFsdWVzLgotCSAqIEB0aW1pbmdfdmFsOiBUaW1pbmcgcGFyYW1ldGVycyBmb3IgZWFjaCBsYW5l IHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQuCi0JICogQHRpbWluZzogQXJyYXkgY29udGFpbmluZyBQ SFkgdGltaW5nIHZhbHVlcwotCSAqIEBzaXplOiBTaXplIG9mIHRoZSBhcnJheQotCSAqLwotCWlu dCAoKnBoeV90aW1pbmdfdmFsKShzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmdf dmFsLAotCQkJCXUzMiAqdGltaW5nLCB1MzIgc2l6ZSk7Ci0KLQl2b2lkICp0aW1pbmdfb3BzOwot CXN0cnVjdCBwaHlfdWxwc19jb25maWdfb3BzIHVscHNfb3BzOwotfTsKLQotLyoqCi0gKiBzdHJ1 Y3QgZHNpX3BoeV9odyAtIERTSSBwaHkgaGFyZHdhcmUgb2JqZWN0IHNwZWNpZmljIHRvIGFuIGlu c3RhbmNlCi0gKiBAYmFzZTogICAgICAgICAgICAgICAgICBWQSBmb3IgdGhlIERTSSBQSFkgYmFz ZSBhZGRyZXNzLgotICogQGxlbmd0aDogICAgICAgICAgICAgICAgTGVuZ3RoIG9mIHRoZSBEU0kg UEhZIHJlZ2lzdGVyIGJhc2UgbWFwLgotICogQGluZGV4OiAgICAgICAgICAgICAgICAgSW5zdGFu Y2UgSUQgb2YgdGhlIGNvbnRyb2xsZXIuCi0gKiBAdmVyc2lvbjogICAgICAgICAgICAgICBEU0kg UEhZIHZlcnNpb24uCi0gKiBAZmVhdHVyZV9tYXA6ICAgICAgICAgICBGZWF0dXJlcyBzdXBwb3J0 ZWQgYnkgRFNJIFBIWS4KLSAqIEBvcHM6ICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIHBvaW50 ZXIgdG8gUEhZIG9wZXJhdGlvbnMuCi0gKi8KLXN0cnVjdCBkc2lfcGh5X2h3IHsKLQl2b2lkIF9f aW9tZW0gKmJhc2U7Ci0JdTMyIGxlbmd0aDsKLQl1MzIgaW5kZXg7Ci0KLQllbnVtIGRzaV9waHlf dmVyc2lvbiB2ZXJzaW9uOwotCi0JREVDTEFSRV9CSVRNQVAoZmVhdHVyZV9tYXAsIERTSV9QSFlf TUFYX0ZFQVRVUkVTKTsKLQlzdHJ1Y3QgZHNpX3BoeV9od19vcHMgb3BzOwotfTsKLQotI2VuZGlm IC8qIF9EU0lfUEhZX0hXX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rz aS1zdGFnaW5nL2RzaV9waHlfaHdfdjJfMC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfcGh5X2h3X3YyXzAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q1 NDU4MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9w aHlfaHdfdjJfMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpICJkc2ktcGh5LWh3 OiIgZm10Ci0jaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXku aD4KLSNpbmNsdWRlICJkc2lfaHcuaCIKLSNpbmNsdWRlICJkc2lfcGh5X2h3LmgiCi0KLSNkZWZp bmUgRFNJUEhZX0NNTl9SRVZJU0lPTl9JRDAgICAgICAgICAgICAgICAgICAgMHgwMDAwCi0jZGVm aW5lIERTSVBIWV9DTU5fUkVWSVNJT05fSUQxICAgICAgICAgICAgICAgICAgIDB4MDAwNAotI2Rl ZmluZSBEU0lQSFlfQ01OX1JFVklTSU9OX0lEMiAgICAgICAgICAgICAgICAgICAweDAwMDgKLSNk ZWZpbmUgRFNJUEhZX0NNTl9SRVZJU0lPTl9JRDMgICAgICAgICAgICAgICAgICAgMHgwMDBDCi0j ZGVmaW5lIERTSVBIWV9DTU5fQ0xLX0NGRzAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAot I2RlZmluZSBEU0lQSFlfQ01OX0NMS19DRkcxICAgICAgICAgICAgICAgICAgICAgICAweDAwMTQK LSNkZWZpbmUgRFNJUEhZX0NNTl9HTEJMX1RFU1RfQ1RSTCAgICAgICAgICAgICAgICAgMHgwMDE4 Ci0jZGVmaW5lIERTSVBIWV9DTU5fQ1RSTF8wICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAx QwotI2RlZmluZSBEU0lQSFlfQ01OX0NUUkxfMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAw MjAKLSNkZWZpbmUgRFNJUEhZX0NNTl9DQUxfSFdfVFJJR0dFUiAgICAgICAgICAgICAgICAgMHgw MDI0Ci0jZGVmaW5lIERTSVBIWV9DTU5fQ0FMX1NXX0NGRzAgICAgICAgICAgICAgICAgICAgIDB4 MDAyOAotI2RlZmluZSBEU0lQSFlfQ01OX0NBTF9TV19DRkcxICAgICAgICAgICAgICAgICAgICAw eDAwMkMKLSNkZWZpbmUgRFNJUEhZX0NNTl9DQUxfU1dfQ0ZHMiAgICAgICAgICAgICAgICAgICAg MHgwMDMwCi0jZGVmaW5lIERTSVBIWV9DTU5fQ0FMX0hXX0NGRzAgICAgICAgICAgICAgICAgICAg IDB4MDAzNAotI2RlZmluZSBEU0lQSFlfQ01OX0NBTF9IV19DRkcxICAgICAgICAgICAgICAgICAg ICAweDAwMzgKLSNkZWZpbmUgRFNJUEhZX0NNTl9DQUxfSFdfQ0ZHMiAgICAgICAgICAgICAgICAg ICAgMHgwMDNDCi0jZGVmaW5lIERTSVBIWV9DTU5fQ0FMX0hXX0NGRzMgICAgICAgICAgICAgICAg ICAgIDB4MDA0MAotI2RlZmluZSBEU0lQSFlfQ01OX0NBTF9IV19DRkc0ICAgICAgICAgICAgICAg ICAgICAweDAwNDQKLSNkZWZpbmUgRFNJUEhZX0NNTl9QTExfQ05UUkwgICAgICAgICAgICAgICAg ICAgICAgMHgwMDQ4Ci0jZGVmaW5lIERTSVBIWV9DTU5fTERPX0NOVFJMICAgICAgICAgICAgICAg ICAgICAgIDB4MDA0QwotCi0jZGVmaW5lIERTSVBIWV9DTU5fUkVHVUxBVE9SX0NBTF9TVEFUVVMw ICAgICAgICAgIDB4MDA2NAotI2RlZmluZSBEU0lQSFlfQ01OX1JFR1VMQVRPUl9DQUxfU1RBVFVT MSAgICAgICAgICAweDAwNjgKLQotLyogbiA9IDAuLjMgZm9yIGRhdGEgbGFuZXMgYW5kIG4gPSA0 IGZvciBjbG9jayBsYW5lICovCi0jZGVmaW5lIERTSVBIWV9ETE5YX0NGRzAobikgICAgICAgICAg ICAgICAgICAgICAoMHgxMDAgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX0NG RzEobikgICAgICAgICAgICAgICAgICAgICAoMHgxMDQgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5l IERTSVBIWV9ETE5YX0NGRzIobikgICAgICAgICAgICAgICAgICAgICAoMHgxMDggKyAoKG4pICog MHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX0NGRzMobikgICAgICAgICAgICAgICAgICAgICAo MHgxMEMgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX1RFU1RfREFUQVBBVEgo bikgICAgICAgICAgICAoMHgxMTAgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5Y X1RFU1RfU1RSKG4pICAgICAgICAgICAgICAgICAoMHgxMTQgKyAoKG4pICogMHg4MCkpCi0jZGVm aW5lIERTSVBIWV9ETE5YX1RJTUlOR19DVFJMXzQobikgICAgICAgICAgICAoMHgxMTggKyAoKG4p ICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX1RJTUlOR19DVFJMXzUobikgICAgICAgICAg ICAoMHgxMUMgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX1RJTUlOR19DVFJM XzYobikgICAgICAgICAgICAoMHgxMjAgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9E TE5YX1RJTUlOR19DVFJMXzcobikgICAgICAgICAgICAoMHgxMjQgKyAoKG4pICogMHg4MCkpCi0j ZGVmaW5lIERTSVBIWV9ETE5YX1RJTUlOR19DVFJMXzgobikgICAgICAgICAgICAoMHgxMjggKyAo KG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX1RJTUlOR19DVFJMXzkobikgICAgICAg ICAgICAoMHgxMkMgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX1RJTUlOR19D VFJMXzEwKG4pICAgICAgICAgICAoMHgxMzAgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBI WV9ETE5YX1RJTUlOR19DVFJMXzExKG4pICAgICAgICAgICAoMHgxMzQgKyAoKG4pICogMHg4MCkp Ci0jZGVmaW5lIERTSVBIWV9ETE5YX1NUUkVOR1RIX0NUUkxfMChuKSAgICAgICAgICAoMHgxMzgg KyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX1NUUkVOR1RIX0NUUkxfMShuKSAg ICAgICAgICAoMHgxM0MgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX0JJU1Rf UE9MWShuKSAgICAgICAgICAgICAgICAoMHgxNDAgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERT SVBIWV9ETE5YX0JJU1RfU0VFRDAobikgICAgICAgICAgICAgICAoMHgxNDQgKyAoKG4pICogMHg4 MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX0JJU1RfU0VFRDEobikgICAgICAgICAgICAgICAoMHgx NDggKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX0JJU1RfSEVBRChuKSAgICAg ICAgICAgICAgICAoMHgxNEMgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX0JJ U1RfU09UKG4pICAgICAgICAgICAgICAgICAoMHgxNTAgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5l IERTSVBIWV9ETE5YX0JJU1RfQ1RSTDAobikgICAgICAgICAgICAgICAoMHgxNTQgKyAoKG4pICog MHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX0JJU1RfQ1RSTDEobikgICAgICAgICAgICAgICAo MHgxNTggKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX0JJU1RfQ1RSTDIobikg ICAgICAgICAgICAgICAoMHgxNUMgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5Y X0JJU1RfQ1RSTDMobikgICAgICAgICAgICAgICAoMHgxNjAgKyAoKG4pICogMHg4MCkpCi0jZGVm aW5lIERTSVBIWV9ETE5YX1ZSRUdfQ05UUkwobikgICAgICAgICAgICAgICAoMHgxNjQgKyAoKG4p ICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX0hTVFhfU1RSX1NUQVRVUyhuKSAgICAgICAg ICAoMHgxNjggKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX0JJU1RfU1RBVFVT MChuKSAgICAgICAgICAgICAoMHgxNkMgKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9E TE5YX0JJU1RfU1RBVFVTMShuKSAgICAgICAgICAgICAoMHgxNzAgKyAoKG4pICogMHg4MCkpCi0j ZGVmaW5lIERTSVBIWV9ETE5YX0JJU1RfU1RBVFVTMihuKSAgICAgICAgICAgICAoMHgxNzQgKyAo KG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX0JJU1RfU1RBVFVTMyhuKSAgICAgICAg ICAgICAoMHgxNzggKyAoKG4pICogMHg4MCkpCi0jZGVmaW5lIERTSVBIWV9ETE5YX01JU1JfU1RB VFVTKG4pICAgICAgICAgICAgICAoMHgxN0MgKyAoKG4pICogMHg4MCkpCi0KLSNkZWZpbmUgRFNJ UEhZX1BMTF9DTEtCVUZMUl9FTiAgICAgICAgICAgICAgICAgIDB4MDQxQwotI2RlZmluZSBEU0lQ SFlfUExMX1BMTF9CQU5ER0FQICAgICAgICAgICAgICAgICAgMHgwNTA4Ci0KLS8qKgotICogcmVn dWxhdG9yX2VuYWJsZSgpIC0gZW5hYmxlIHJlZ3VsYXRvcnMgZm9yIERTSSBQSFkKLSAqIEBwaHk6 ICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqIEByZWdfY2ZnOiAg UmVndWxhdG9yIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBEU0kgbGFuZXMuCi0gKi8KLXZvaWQgZHNp X3BoeV9od192Ml8wX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJ CQkgICAgICBzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICpyZWdfY2ZnKQotewotCWludCBp OwotCi0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKysp Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9WUkVHX0NOVFJMKGkpLCByZWdfY2ZnLT5sYW5l W2ldWzBdKTsKLQotCS8qIG1ha2Ugc3VyZSBhbGwgdmFsdWVzIGFyZSB3cml0dGVuIHRvIGhhcmR3 YXJlICovCi0Jd21iKCk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gUGh5IHJlZ3VsYXRvcnMgZW5h YmxlZFxuIiwgcGh5LT5pbmRleCk7Ci19Ci0KLS8qKgotICogcmVndWxhdG9yX2Rpc2FibGUoKSAt IGRpc2FibGUgcmVndWxhdG9ycwotICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFy ZHdhcmUgb2JqZWN0LgotICovCi12b2lkIGRzaV9waHlfaHdfdjJfMF9yZWd1bGF0b3JfZGlzYWJs ZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5KQotewotCXByX2RlYnVnKCJbRFNJXyVkXSBQaHkgcmVn dWxhdG9ycyBkaXNhYmxlZFxuIiwgcGh5LT5pbmRleCk7Ci19Ci0KLS8qKgotICogZW5hYmxlKCkg LSBFbmFibGUgUEhZIGhhcmR3YXJlCi0gKiBAcGh5OiAgICAgIFBvaW50ZXIgdG8gRFNJIFBIWSBo YXJkd2FyZSBvYmplY3QuCi0gKiBAY2ZnOiAgICAgIFBlciBsYW5lIGNvbmZpZ3VyYXRpb25zIGZv ciB0aW1pbmcsIHN0cmVuZ3RoIGFuZCBsYW5lCi0gKgkgICAgICBjb25maWd1cmF0aW9ucy4KLSAq Lwotdm9pZCBkc2lfcGh5X2h3X3YyXzBfZW5hYmxlKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0J CQkgICAgc3RydWN0IGRzaV9waHlfY2ZnICpjZmcpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9w aHlfcGVyX2xhbmVfY2ZncyAqdGltaW5nID0gJmNmZy0+dGltaW5nOwotCXUzMiBkYXRhOwotCi0J RFNJX1czMihwaHksIERTSVBIWV9DTU5fTERPX0NOVFJMLCAweDFDKTsKLQotCURTSV9XMzIocGh5 LCBEU0lQSFlfQ01OX0dMQkxfVEVTVF9DVFJMLCAweDEpOwotCWZvciAoaSA9IERTSV9MT0dJQ0FM X0xBTkVfMDsgaSA8IERTSV9MQU5FX01BWDsgaSsrKSB7Ci0KLQkJRFNJX1czMihwaHksIERTSVBI WV9ETE5YX0NGRzAoaSksIGNmZy0+bGFuZWNmZy5sYW5lW2ldWzBdKTsKLQkJRFNJX1czMihwaHks IERTSVBIWV9ETE5YX0NGRzEoaSksIGNmZy0+bGFuZWNmZy5sYW5lW2ldWzFdKTsKLQkJRFNJX1cz MihwaHksIERTSVBIWV9ETE5YX0NGRzIoaSksIGNmZy0+bGFuZWNmZy5sYW5lW2ldWzJdKTsKLQkJ RFNJX1czMihwaHksIERTSVBIWV9ETE5YX0NGRzMoaSksIGNmZy0+bGFuZWNmZy5sYW5lW2ldWzNd KTsKLQotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfVEVTVF9TVFIoaSksIDB4ODgpOwotCi0J CURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9USU1JTkdfQ1RSTF80KGkpLCB0aW1pbmctPmxhbmVb aV1bMF0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfNShpKSwgdGlt aW5nLT5sYW5lW2ldWzFdKTsKLQkJRFNJX1czMihwaHksIERTSVBIWV9ETE5YX1RJTUlOR19DVFJM XzYoaSksIHRpbWluZy0+bGFuZVtpXVsyXSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9U SU1JTkdfQ1RSTF83KGkpLCB0aW1pbmctPmxhbmVbaV1bM10pOwotCQlEU0lfVzMyKHBoeSwgRFNJ UEhZX0RMTlhfVElNSU5HX0NUUkxfOChpKSwgdGltaW5nLT5sYW5lW2ldWzRdKTsKLQkJRFNJX1cz MihwaHksIERTSVBIWV9ETE5YX1RJTUlOR19DVFJMXzkoaSksIHRpbWluZy0+bGFuZVtpXVs1XSk7 Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9USU1JTkdfQ1RSTF8xMChpKSwgdGltaW5nLT5s YW5lW2ldWzZdKTsKLQkJRFNJX1czMihwaHksIERTSVBIWV9ETE5YX1RJTUlOR19DVFJMXzExKGkp LCB0aW1pbmctPmxhbmVbaV1bN10pOwotCi0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9TVFJF TkdUSF9DVFJMXzAoaSksCi0JCQljZmctPnN0cmVuZ3RoLmxhbmVbaV1bMF0pOwotCQlEU0lfVzMy KHBoeSwgRFNJUEhZX0RMTlhfU1RSRU5HVEhfQ1RSTF8xKGkpLAotCQkJY2ZnLT5zdHJlbmd0aC5s YW5lW2ldWzFdKTsKLQl9Ci0KLQkvKiBtYWtlIHN1cmUgYWxsIHZhbHVlcyBhcmUgd3JpdHRlbiB0 byBoYXJkd2FyZSBiZWZvcmUgZW5hYmxpbmcgcGh5ICovCi0Jd21iKCk7Ci0KLQlEU0lfVzMyKHBo eSwgRFNJUEhZX0NNTl9DVFJMXzEsIDB4ODApOwotCXVkZWxheSgxMDApOwotCURTSV9XMzIocGh5 LCBEU0lQSFlfQ01OX0NUUkxfMSwgMHgwMCk7Ci0KLQlkYXRhID0gRFNJX1IzMihwaHksIERTSVBI WV9DTU5fR0xCTF9URVNUX0NUUkwpOwotCi0Jc3dpdGNoIChjZmctPnBsbF9zb3VyY2UpIHsKLQlj YXNlIERTSV9QTExfU09VUkNFX1NUQU5EQUxPTkU6Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfUExM X0NMS0JVRkxSX0VOLCAweDAxKTsKLQkJZGF0YSAmPSB+QklUKDIpOwotCQlicmVhazsKLQljYXNl IERTSV9QTExfU09VUkNFX05BVElWRToKLQkJRFNJX1czMihwaHksIERTSVBIWV9QTExfQ0xLQlVG TFJfRU4sIDB4MDMpOwotCQlkYXRhICY9IH5CSVQoMik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX1BM TF9TT1VSQ0VfTk9OX05BVElWRToKLQkJRFNJX1czMihwaHksIERTSVBIWV9QTExfQ0xLQlVGTFJf RU4sIDB4MDApOwotCQlkYXRhIHw9IEJJVCgyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJl YWs7Ci0JfQotCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fR0xCTF9URVNUX0NUUkwsIGRhdGEp OwotCi0JLyogRW5hYmxlIGJpYXMgY3VycmVudCBmb3IgcGxsMSBkdXJpbmcgc3BsaXQgZGlzcGxh eSBjYXNlICovCi0JaWYgKGNmZy0+cGxsX3NvdXJjZSA9PSBEU0lfUExMX1NPVVJDRV9OT05fTkFU SVZFKQotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX1BMTF9QTExfQkFOREdBUCwgMHgzKTsKLQotCXBy X2RlYnVnKCJbRFNJXyVkXVBoeSBlbmFibGVkICIsIHBoeS0+aW5kZXgpOwotfQotCi0vKioKLSAq IGRpc2FibGUoKSAtIERpc2FibGUgUEhZIGhhcmR3YXJlCi0gKiBAcGh5OiAgICAgIFBvaW50ZXIg dG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0gKi8KLXZvaWQgZHNpX3BoeV9od192Ml8wX2Rp c2FibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAgICBzdHJ1Y3QgZHNpX3BoeV9jZmcg KmNmZykKLXsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX1BMTF9DTEtCVUZMUl9FTiwgMCk7Ci0JRFNJ X1czMihwaHksIERTSVBIWV9DTU5fR0xCTF9URVNUX0NUUkwsIDApOwotCURTSV9XMzIocGh5LCBE U0lQSFlfQ01OX0NUUkxfMCwgMCk7Ci0JcHJfZGVidWcoIltEU0lfJWRdUGh5IGRpc2FibGVkICIs IHBoeS0+aW5kZXgpOwotfQotCi0vKioKLSAqIGRzaV9waHlfaHdfdjJfMF9pZGxlX29uKCkgLSBF bmFibGUgRFNJIFBIWSBoYXJkd2FyZSBkdXJpbmcgaWRsZSBzY3JlZW4KLSAqIEBwaHk6ICAgICAg UG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqLwotdm9pZCBkc2lfcGh5X2h3 X3YyXzBfaWRsZV9vbihzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCBzdHJ1Y3QgZHNpX3BoeV9jZmcg KmNmZykKLXsKLQlpbnQgaSA9IDA7Ci0KLQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9MQU5FXzA7IGkg PCBEU0lfTEFORV9NQVg7IGkrKykgewotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfU1RSRU5H VEhfQ1RSTF8wKGkpLAotCQkJY2ZnLT5zdHJlbmd0aC5sYW5lW2ldWzBdKTsKLQkJRFNJX1czMihw aHksIERTSVBIWV9ETE5YX1NUUkVOR1RIX0NUUkxfMShpKSwKLQkJCWNmZy0+c3RyZW5ndGgubGFu ZVtpXVsxXSk7Ci0JfQotCXdtYigpOyAvKiBtYWtlIHN1cmUgd3JpdGUgaGFwcGVucyAqLwotCXBy X2RlYnVnKCJbRFNJXyVkXVBoeSBlbmFibGVkIG91dCBvZiBpZGxlIHNjcmVlblxuIiwgcGh5LT5p bmRleCk7Ci19Ci0KLQotLyoqCi0gKiBkc2lfcGh5X2h3X3YyXzBfaWRsZV9vZmYoKSAtIERpc2Fi bGUgRFNJIFBIWSBoYXJkd2FyZSBkdXJpbmcgaWRsZSBzY3JlZW4KLSAqIEBwaHk6ICAgICAgUG9p bnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqLwotdm9pZCBkc2lfcGh5X2h3X3Yy XzBfaWRsZV9vZmYoc3RydWN0IGRzaV9waHlfaHcgKnBoeSkKLXsKLQlpbnQgaSA9IDA7Ci0KLQlE U0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9DVFJMXzAsIDB4N2YpOwotCWZvciAoaSA9IERTSV9MT0dJ Q0FMX0xBTkVfMDsgaSA8IERTSV9MQU5FX01BWDsgaSsrKQotCQlEU0lfVzMyKHBoeSwgRFNJUEhZ X0RMTlhfVlJFR19DTlRSTChpKSwgMHgxYyk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fTERP X0NOVFJMLCAweDFDKTsKLQotCWZvciAoaSA9IERTSV9MT0dJQ0FMX0xBTkVfMDsgaSA8IERTSV9M QU5FX01BWDsgaSsrKQotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfU1RSRU5HVEhfQ1RSTF8x KGkpLCAweDApOwotCXdtYigpOyAvKiBtYWtlIHN1cmUgd3JpdGUgaGFwcGVucyAqLwotCXByX2Rl YnVnKCJbRFNJXyVkXVBoeSBkaXNhYmxlZCBkdXJpbmcgaWRsZSBzY3JlZW5cbiIsIHBoeS0+aW5k ZXgpOwotfQotCi1pbnQgZHNpX3BoeV9od190aW1pbmdfdmFsX3YyXzAoc3RydWN0IGRzaV9waHlf cGVyX2xhbmVfY2ZncyAqdGltaW5nX2NmZywKLQkJdTMyICp0aW1pbmdfdmFsLCB1MzIgc2l6ZSkK LXsKLQlpbnQgaSA9IDAsIGogPSAwOwotCi0JaWYgKHNpemUgIT0gKERTSV9MQU5FX01BWCAqIERT SV9NQVhfU0VUVElOR1MpKSB7Ci0JCXByX2VycigiVW5leHBlY3RlZCB0aW1pbmcgYXJyYXkgc2l6 ZSAlZFxuIiwgc2l6ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAoaSA9IERTSV9M T0dJQ0FMX0xBTkVfMDsgaSA8IERTSV9MQU5FX01BWDsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGog PCBEU0lfTUFYX1NFVFRJTkdTOyBqKyspIHsKLQkJCXRpbWluZ19jZmctPmxhbmVbaV1bal0gPSAq dGltaW5nX3ZhbDsKLQkJCXRpbWluZ192YWwrKzsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9od192M18w LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfaHdfdjNfMC5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWVhZTY4Li4wMDAwMDAwCi0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9od192M18wLmMKKysrIC9kZXYvbnVs bApAQCAtMSw0NDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUg TGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl Ci0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0K LSNkZWZpbmUgcHJfZm10KGZtdCkgImRzaS1waHktaHc6IiBmbXQKLSNpbmNsdWRlIDxsaW51eC9t YXRoNjQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9s bC5oPgotI2luY2x1ZGUgImRzaV9ody5oIgotI2luY2x1ZGUgImRzaV9waHlfaHcuaCIKLQotI2Rl ZmluZSBEU0lQSFlfQ01OX0NMS19DRkcwCQkJCQkJMHgwMTAKLSNkZWZpbmUgRFNJUEhZX0NNTl9D TEtfQ0ZHMQkJCQkJCTB4MDE0Ci0jZGVmaW5lIERTSVBIWV9DTU5fR0xCTF9DVFJMCQkJCQkJMHgw MTgKLSNkZWZpbmUgRFNJUEhZX0NNTl9SQlVGX0NUUkwJCQkJCQkweDAxQwotI2RlZmluZSBEU0lQ SFlfQ01OX1ZSRUdfQ1RSTAkJCQkJCTB4MDIwCi0jZGVmaW5lIERTSVBIWV9DTU5fQ1RSTF8wCQkJ CQkJMHgwMjQKLSNkZWZpbmUgRFNJUEhZX0NNTl9DVFJMXzEJCQkJCQkweDAyOAotI2RlZmluZSBE U0lQSFlfQ01OX0NUUkxfMgkJCQkJCTB4MDJDCi0jZGVmaW5lIERTSVBIWV9DTU5fTEFORV9DRkcw CQkJCQkJMHgwMzAKLSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NGRzEJCQkJCQkweDAzNAotI2Rl ZmluZSBEU0lQSFlfQ01OX1BMTF9DTlRSTAkJCQkJCTB4MDM4Ci0jZGVmaW5lIERTSVBIWV9DTU5f TEFORV9DVFJMMAkJCQkJCTB4MDk4Ci0jZGVmaW5lIERTSVBIWV9DTU5fTEFORV9DVFJMMQkJCQkJ CTB4MDlDCi0jZGVmaW5lIERTSVBIWV9DTU5fTEFORV9DVFJMMgkJCQkJCTB4MEEwCi0jZGVmaW5l IERTSVBIWV9DTU5fTEFORV9DVFJMMwkJCQkJCTB4MEE0Ci0jZGVmaW5lIERTSVBIWV9DTU5fTEFO RV9DVFJMNAkJCQkJCTB4MEE4Ci0jZGVmaW5lIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfMAkJCQkJ MHgwQUMKLSNkZWZpbmUgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8xCQkJCQkweDBCMAotI2RlZmlu ZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzIJCQkJCTB4MEI0Ci0jZGVmaW5lIERTSVBIWV9DTU5f VElNSU5HX0NUUkxfMwkJCQkJMHgwQjgKLSNkZWZpbmUgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF80 CQkJCQkweDBCQwotI2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzUJCQkJCTB4MEMwCi0j ZGVmaW5lIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfNgkJCQkJMHgwQzQKLSNkZWZpbmUgRFNJUEhZ X0NNTl9USU1JTkdfQ1RSTF83CQkJCQkweDBDOAotI2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19D VFJMXzgJCQkJCTB4MENDCi0jZGVmaW5lIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfOQkJCQkJMHgw RDAKLSNkZWZpbmUgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8xMAkJCQkJMHgwRDQKLSNkZWZpbmUg RFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8xMQkJCQkJMHgwRDgKLSNkZWZpbmUgRFNJUEhZX0NNTl9Q SFlfU1RBVFVTCQkJCQkJMHgwRUMKLSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX1NUQVRVUzAJCQkJ CQkweDBGNAotI2RlZmluZSBEU0lQSFlfQ01OX0xBTkVfU1RBVFVTMQkJCQkJCTB4MEY4Ci0KLQot LyogbiA9IDAuLjMgZm9yIGRhdGEgbGFuZXMgYW5kIG4gPSA0IGZvciBjbG9jayBsYW5lICovCi0j ZGVmaW5lIERTSVBIWV9MTlhfQ0ZHMChuKSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDAg KyAoMHg4MCAqIChuKSkpCi0jZGVmaW5lIERTSVBIWV9MTlhfQ0ZHMShuKSAgICAgICAgICAgICAg ICAgICAgICAgICAoMHgyMDQgKyAoMHg4MCAqIChuKSkpCi0jZGVmaW5lIERTSVBIWV9MTlhfQ0ZH MihuKSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMDggKyAoMHg4MCAqIChuKSkpCi0jZGVm aW5lIERTSVBIWV9MTlhfQ0ZHMyhuKSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyMEMgKyAo MHg4MCAqIChuKSkpCi0jZGVmaW5lIERTSVBIWV9MTlhfVEVTVF9EQVRBUEFUSChuKSAgICAgICAg ICAgICAgICAoMHgyMTAgKyAoMHg4MCAqIChuKSkpCi0jZGVmaW5lIERTSVBIWV9MTlhfUElOX1NX QVAobikgICAgICAgICAgICAgICAgICAgICAoMHgyMTQgKyAoMHg4MCAqIChuKSkpCi0jZGVmaW5l IERTSVBIWV9MTlhfSFNUWF9TVFJfQ1RSTChuKSAgICAgICAgICAgICAgICAoMHgyMTggKyAoMHg4 MCAqIChuKSkpCi0jZGVmaW5lIERTSVBIWV9MTlhfT0ZGU0VUX1RPUF9DVFJMKG4pICAgICAgICAg ICAgICAoMHgyMUMgKyAoMHg4MCAqIChuKSkpCi0jZGVmaW5lIERTSVBIWV9MTlhfT0ZGU0VUX0JP VF9DVFJMKG4pICAgICAgICAgICAgICAoMHgyMjAgKyAoMHg4MCAqIChuKSkpCi0jZGVmaW5lIERT SVBIWV9MTlhfTFBUWF9TVFJfQ1RSTChuKSAgICAgICAgICAgICAgICAoMHgyMjQgKyAoMHg4MCAq IChuKSkpCi0jZGVmaW5lIERTSVBIWV9MTlhfTFBSWF9DVFJMKG4pICAgICAgICAgICAgICAgICAg ICAoMHgyMjggKyAoMHg4MCAqIChuKSkpCi0jZGVmaW5lIERTSVBIWV9MTlhfVFhfRENUUkwobikg ICAgICAgICAgICAgICAgICAgICAoMHgyMkMgKyAoMHg4MCAqIChuKSkpCi0KLXN0YXRpYyBpbmxp bmUgaW50IGRzaV9jb252X3BoeV90b19sb2dpY2FsX2xhbmUoCi0Jc3RydWN0IGRzaV9sYW5lX21h cCAqbGFuZV9tYXAsIGVudW0gZHNpX3BoeV9kYXRhX2xhbmVzIHBoeV9sYW5lKQotewotCWludCBp ID0gMDsKLQotCWlmIChwaHlfbGFuZSA+IERTSV9QSFlTSUNBTF9MQU5FXzMpCi0JCXJldHVybiAt RUlOVkFMOwotCi0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgKERTSV9MQU5FX01B WCAtIDEpOyBpKyspIHsKLQkJaWYgKGxhbmVfbWFwLT5sYW5lX21hcF92MltpXSA9PSBwaHlfbGFu ZSkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZHNp X2NvbnZfbG9naWNhbF90b19waHlfbGFuZSgKLQlzdHJ1Y3QgZHNpX2xhbmVfbWFwICpsYW5lX21h cCwgZW51bSBkc2lfbG9naWNhbF9sYW5lIGxhbmUpCi17Ci0JaW50IGkgPSAwOwotCi0JaWYgKGxh bmUgPiAoRFNJX0xBTkVfTUFYIC0gMSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChpID0g RFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgKERTSV9MQU5FX01BWCAtIDEpOyBpKyspIHsKLQkJaWYg KEJJVChpKSA9PSBsYW5lX21hcC0+bGFuZV9tYXBfdjJbbGFuZV0pCi0JCQlicmVhazsKLQl9Ci0J cmV0dXJuIGk7Ci19Ci0KLS8qKgotICogcmVndWxhdG9yX2VuYWJsZSgpIC0gZW5hYmxlIHJlZ3Vs YXRvcnMgZm9yIERTSSBQSFkKLSAqIEBwaHk6ICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3 YXJlIG9iamVjdC4KLSAqIEByZWdfY2ZnOiAgUmVndWxhdG9yIGNvbmZpZ3VyYXRpb24gZm9yIGFs bCBEU0kgbGFuZXMuCi0gKi8KLXZvaWQgZHNpX3BoeV9od192M18wX3JlZ3VsYXRvcl9lbmFibGUo c3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCQkgICAgICBzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFu ZV9jZmdzICpyZWdfY2ZnKQotewotCXByX2RlYnVnKCJbRFNJXyVkXSBQaHkgcmVndWxhdG9ycyBl bmFibGVkXG4iLCBwaHktPmluZGV4KTsKLQkvKiBOb3RoaW5nIHRvIGJlIGRvbmUgZm9yIERTSSBQ SFkgcmVndWxhdG9yIGVuYWJsZSAqLwotfQotCi0vKioKLSAqIHJlZ3VsYXRvcl9kaXNhYmxlKCkg LSBkaXNhYmxlIHJlZ3VsYXRvcnMKLSAqIEBwaHk6ICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhh cmR3YXJlIG9iamVjdC4KLSAqLwotdm9pZCBkc2lfcGh5X2h3X3YzXzBfcmVndWxhdG9yX2Rpc2Fi bGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSkKLXsKLQlwcl9kZWJ1ZygiW0RTSV8lZF0gUGh5IHJl Z3VsYXRvcnMgZGlzYWJsZWRcbiIsIHBoeS0+aW5kZXgpOwotCS8qIE5vdGhpbmcgdG8gYmUgZG9u ZSBmb3IgRFNJIFBIWSByZWd1bGF0b3IgZGlzYWJsZSAqLwotfQotCi0KLXN0YXRpYyBpbnQgZHNp X3BoeV9od192M18wX2lzX3BsbF9vbihzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5KQotewotCXUzMiBk YXRhID0gMDsKLQotCWRhdGEgPSBEU0lfUjMyKHBoeSwgRFNJUEhZX0NNTl9QTExfQ05UUkwpOwot CW1iKCk7IC8qbWFrZSBzdXJlIHJlYWQgaGFwcGVuZWQgKi8KLQlyZXR1cm4gKGRhdGEgJiBCSVQo MCkpOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfcGh5X2h3X3YzXzBfY29uZmlnX2xwY2RyeChzdHJ1 Y3QgZHNpX3BoeV9odyAqcGh5LAotCXN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnLCBib29sIGVuYWJs ZSkKLXsKLQlpbnQgcGh5X2xhbmVfMCA9IGRzaV9jb252X2xvZ2ljYWxfdG9fcGh5X2xhbmUoJmNm Zy0+bGFuZV9tYXAsCi0JCQlEU0lfTE9HSUNBTF9MQU5FXzApOwotCS8qCi0JICogTFBSWCBhbmQg Q0RSWCBuZWVkIHRvIGVuYWJsZWQgb25seSBmb3IgcGh5c2ljYWwgZGF0YSBsYW5lCi0JICogY29y cmVzcG9uZGluZyB0byB0aGUgbG9naWNhbCBkYXRhIGxhbmUgMAotCSAqLwotCi0JaWYgKGVuYWJs ZSkKLQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhfTFBSWF9DVFJMKHBoeV9sYW5lXzApLAotCQkJ Y2ZnLT5zdHJlbmd0aC5sYW5lW3BoeV9sYW5lXzBdWzFdKTsKLQllbHNlCi0JCURTSV9XMzIocGh5 LCBEU0lQSFlfTE5YX0xQUlhfQ1RSTChwaHlfbGFuZV8wKSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lk IGRzaV9waHlfaHdfdjNfMF9sYW5lX3N3YXBfY29uZmlnKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHks Ci0JCXN0cnVjdCBkc2lfbGFuZV9tYXAgKmxhbmVfbWFwKQotewotCURTSV9XMzIocGh5LCBEU0lQ SFlfQ01OX0xBTkVfQ0ZHMCwKLQkJKGxhbmVfbWFwLT5sYW5lX21hcF92MltEU0lfTE9HSUNBTF9M QU5FXzBdIHwKLQkJKGxhbmVfbWFwLT5sYW5lX21hcF92MltEU0lfTE9HSUNBTF9MQU5FXzFdIDw8 IDQpKSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DRkcxLAotCQkobGFuZV9tYXAt PmxhbmVfbWFwX3YyW0RTSV9MT0dJQ0FMX0xBTkVfMl0gfAotCQkobGFuZV9tYXAtPmxhbmVfbWFw X3YyW0RTSV9MT0dJQ0FMX0xBTkVfM10gPDwgNCkpKTsKLX0KLQotc3RhdGljIHZvaWQgZHNpX3Bo eV9od192M18wX2xhbmVfc2V0dGluZ3Moc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAgICBz dHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZykKLXsKLQlpbnQgaTsKLQl1OCB0eF9kY3RybFtdID0gezB4 MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDF9OwotCi0JLyogU3RyZW5ndGggY3RybCBzZXR0aW5n cyAqLwotCWZvciAoaSA9IERTSV9MT0dJQ0FMX0xBTkVfMDsgaSA8IERTSV9MQU5FX01BWDsgaSsr KSB7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfTE5YX0xQVFhfU1RSX0NUUkwoaSksCi0JCQljZmct PnN0cmVuZ3RoLmxhbmVbaV1bMF0pOwotCQkvKgotCQkgKiBEaXNhYmxlIExQUlggYW5kIENEUlgg Zm9yIGFsbCBsYW5lcy4gQW5kIGxhdGVyIG9uLCBpdCB3aWxsCi0JCSAqIGJlIG9ubHkgZW5hYmxl ZCBmb3IgdGhlIHBoeXNpY2FsIGRhdGEgbGFuZSBjb3JyZXNwb25kaW5nCi0JCSAqIHRvIHRoZSBs b2dpY2FsIGRhdGEgbGFuZSAwCi0JCSAqLwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xOWF9MUFJY X0NUUkwoaSksIDApOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xOWF9QSU5fU1dBUChpKSwgMHgw KTsKLQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhfSFNUWF9TVFJfQ1RSTChpKSwgMHg4OCk7Ci0J fQotCWRzaV9waHlfaHdfdjNfMF9jb25maWdfbHBjZHJ4KHBoeSwgY2ZnLCB0cnVlKTsKLQotCS8q IG90aGVyIHNldHRpbmdzICovCi0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJ X0xBTkVfTUFYOyBpKyspIHsKLQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhfQ0ZHMChpKSwgY2Zn LT5sYW5lY2ZnLmxhbmVbaV1bMF0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xOWF9DRkcxKGkp LCBjZmctPmxhbmVjZmcubGFuZVtpXVsxXSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfTE5YX0NG RzIoaSksIGNmZy0+bGFuZWNmZy5sYW5lW2ldWzJdKTsKLQkJRFNJX1czMihwaHksIERTSVBIWV9M TlhfQ0ZHMyhpKSwgY2ZnLT5sYW5lY2ZnLmxhbmVbaV1bM10pOwotCQlEU0lfVzMyKHBoeSwgRFNJ UEhZX0xOWF9PRkZTRVRfVE9QX0NUUkwoaSksIDB4MCk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlf TE5YX09GRlNFVF9CT1RfQ1RSTChpKSwgMHgwKTsKLQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhf VFhfRENUUkwoaSksIHR4X2RjdHJsW2ldKTsKLQl9Ci0KLQkvKiBUb2dnbGUgQklUIDAgdG8gcmVs ZWFzZSBmcmVlemUgSS8wICovCi0JRFNJX1czMihwaHksIERTSVBIWV9MTlhfVFhfRENUUkwoMyks IDB4MDUpOwotCURTSV9XMzIocGh5LCBEU0lQSFlfTE5YX1RYX0RDVFJMKDMpLCAweDA0KTsKLX0K LQotLyoqCi0gKiBlbmFibGUoKSAtIEVuYWJsZSBQSFkgaGFyZHdhcmUKLSAqIEBwaHk6ICAgICAg UG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqIEBjZmc6ICAgICAgUGVyIGxh bmUgY29uZmlndXJhdGlvbnMgZm9yIHRpbWluZywgc3RyZW5ndGggYW5kIGxhbmUKLSAqCSAgICAg IGNvbmZpZ3VyYXRpb25zLgotICovCi12b2lkIGRzaV9waHlfaHdfdjNfMF9lbmFibGUoc3RydWN0 IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAgICBzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZykKLXsKLQlp bnQgcmMgPSAwOwotCXUzMiBzdGF0dXM7Ci0JdTMyIGNvbnN0IGRlbGF5X3VzID0gNTsKLQl1MzIg Y29uc3QgdGltZW91dF91cyA9IDEwMDA7Ci0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAq dGltaW5nID0gJmNmZy0+dGltaW5nOwotCXUzMiBkYXRhOwotCi0JaWYgKGRzaV9waHlfaHdfdjNf MF9pc19wbGxfb24ocGh5KSkKLQkJcHJfd2FybigiUExMIHR1cm5lZCBvbiBiZWZvcmUgY29uZmln dXJpbmcgUEhZXG4iKTsKLQotCS8qIHdhaXQgZm9yIFJFRkdFTiBSRUFEWSAqLwotCXJjID0gcmVh ZGxfcG9sbF90aW1lb3V0X2F0b21pYyhwaHktPmJhc2UgKyBEU0lQSFlfQ01OX1BIWV9TVEFUVVMs Ci0JCXN0YXR1cywgKHN0YXR1cyAmIEJJVCgwKSksIGRlbGF5X3VzLCB0aW1lb3V0X3VzKTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJSZWYgZ2VuIG5vdCByZWFkeS4gQWJvcnRpbmdcbiIpOwotCQly ZXR1cm47Ci0JfQotCi0JLyogZGUtYXNzZXJ0IGRpZ2l0YWwgYW5kIHBsbCBwb3dlciBkb3duICov Ci0JZGF0YSA9IEJJVCg2KSB8IEJJVCg1KTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9DVFJM XzAsIGRhdGEpOwotCi0JLyogQXNzZXJ0IFBMTCBjb3JlIHJlc2V0ICovCi0JRFNJX1czMihwaHks IERTSVBIWV9DTU5fUExMX0NOVFJMLCAweDAwKTsKLQotCS8qIHR1cm4gb2ZmIHJlc3luYyBGSUZP ICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fUkJVRl9DVFJMLCAweDAwKTsKLQotCS8qIFNl bGVjdCBNUzEgYnl0ZS1jbGsgKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9HTEJMX0NUUkws IDB4MTApOwotCi0JLyogRW5hYmxlIExETyAqLwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX1ZS RUdfQ1RSTCwgMHg1OSk7Ci0KLQkvKiBDb25maWd1cmUgUEhZIGxhbmUgc3dhcCAqLwotCWRzaV9w aHlfaHdfdjNfMF9sYW5lX3N3YXBfY29uZmlnKHBoeSwgJmNmZy0+bGFuZV9tYXApOwotCi0JLyog RFNJIFBIWSB0aW1pbmdzICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVElNSU5HX0NUUkxf MCwgdGltaW5nLT5sYW5lX3YzWzBdKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9USU1JTkdf Q1RSTF8xLCB0aW1pbmctPmxhbmVfdjNbMV0pOwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX1RJ TUlOR19DVFJMXzIsIHRpbWluZy0+bGFuZV92M1syXSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9D TU5fVElNSU5HX0NUUkxfMywgdGltaW5nLT5sYW5lX3YzWzNdKTsKLQlEU0lfVzMyKHBoeSwgRFNJ UEhZX0NNTl9USU1JTkdfQ1RSTF80LCB0aW1pbmctPmxhbmVfdjNbNF0pOwotCURTSV9XMzIocGh5 LCBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzUsIHRpbWluZy0+bGFuZV92M1s1XSk7Ci0JRFNJX1cz MihwaHksIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfNiwgdGltaW5nLT5sYW5lX3YzWzZdKTsKLQlE U0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF83LCB0aW1pbmctPmxhbmVfdjNbN10p OwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzgsIHRpbWluZy0+bGFuZV92 M1s4XSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfOSwgdGltaW5nLT5s YW5lX3YzWzldKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8xMCwgdGlt aW5nLT5sYW5lX3YzWzEwXSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVElNSU5HX0NUUkxf MTEsIHRpbWluZy0+bGFuZV92M1sxMV0pOwotCi0JLyogUmVtb3ZlIHBvd2VyIGRvd24gZnJvbSBh bGwgYmxvY2tzICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fQ1RSTF8wLCAweDdmKTsKLQot CS8qcG93ZXIgdXAgbGFuZXMgKi8KLQlkYXRhID0gRFNJX1IzMihwaHksIERTSVBIWV9DTU5fQ1RS TF8wKTsKLQkvKiBUT0RPOiBvbmx5IHBvd2VyIHVwIGxhbmVzIHRoYXQgYXJlIHVzZWQgKi8KLQlk YXRhIHw9IDB4MUY7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fQ1RSTF8wLCBkYXRhKTsKLQlE U0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MQU5FX0NUUkwwLCAweDFGKTsKLQotCS8qIFNlbGVjdCBm dWxsLXJhdGUgbW9kZSAqLwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0NUUkxfMiwgMHg0MCk7 Ci0KLQlzd2l0Y2ggKGNmZy0+cGxsX3NvdXJjZSkgewotCWNhc2UgRFNJX1BMTF9TT1VSQ0VfU1RB TkRBTE9ORToKLQljYXNlIERTSV9QTExfU09VUkNFX05BVElWRToKLQkJZGF0YSA9IDB4MDsgLyog aW50ZXJuYWwgUExMICovCi0JCWJyZWFrOwotCWNhc2UgRFNJX1BMTF9TT1VSQ0VfTk9OX05BVElW RToKLQkJZGF0YSA9IDB4MTsgLyogZXh0ZXJuYWwgUExMICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6 Ci0JCWJyZWFrOwotCX0KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9DTEtfQ0ZHMSwgKGRhdGEg PDwgMikpOyAvKiBzZXQgUExMIHNyYyAqLwotCi0JLyogRFNJIGxhbmUgc2V0dGluZ3MgKi8KLQlk c2lfcGh5X2h3X3YzXzBfbGFuZV9zZXR0aW5ncyhwaHksIGNmZyk7Ci0KLQlwcl9kZWJ1ZygiW0RT SV8lZF1QaHkgZW5hYmxlZCAiLCBwaHktPmluZGV4KTsKLX0KLQotLyoqCi0gKiBkaXNhYmxlKCkg LSBEaXNhYmxlIFBIWSBoYXJkd2FyZQotICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkg aGFyZHdhcmUgb2JqZWN0LgotICovCi12b2lkIGRzaV9waHlfaHdfdjNfMF9kaXNhYmxlKHN0cnVj dCBkc2lfcGh5X2h3ICpwaHksCi0JCQkgICAgc3RydWN0IGRzaV9waHlfY2ZnICpjZmcpCi17Ci0J dTMyIGRhdGEgPSAwOwotCi0JaWYgKGRzaV9waHlfaHdfdjNfMF9pc19wbGxfb24ocGh5KSkKLQkJ cHJfd2FybigiVHVybmluZyBPRkYgUEhZIHdoaWxlIFBMTCBpcyBvblxuIik7Ci0KLQlkc2lfcGh5 X2h3X3YzXzBfY29uZmlnX2xwY2RyeChwaHksIGNmZywgZmFsc2UpOwotCi0JZGF0YSA9IERTSV9S MzIocGh5LCBEU0lQSFlfQ01OX0NUUkxfMCk7Ci0JLyogZGlzYWJsZSBhbGwgbGFuZXMgKi8KLQlk YXRhICY9IH4weDFGOwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0NUUkxfMCwgZGF0YSk7Ci0J RFNJX1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DVFJMMCwgMCk7Ci0KLQkvKiBUdXJuIG9mZiBh bGwgUEhZIGJsb2NrcyAqLwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0NUUkxfMCwgMHgwMCk7 Ci0JLyogbWFrZSBzdXJlIHBoeSBpcyB0dXJuZWQgb2ZmICovCi0Jd21iKCk7Ci0JcHJfZGVidWco IltEU0lfJWRdUGh5IGRpc2FibGVkICIsIHBoeS0+aW5kZXgpOwotfQotCi1pbnQgZHNpX3BoeV9o d192M18wX3dhaXRfZm9yX2xhbmVfaWRsZSgKLQkJc3RydWN0IGRzaV9waHlfaHcgKnBoeSwgdTMy IGxhbmVzKQotewotCWludCByYyA9IDAsIHZhbCA9IDA7Ci0JdTMyIHN0b3Bfc3RhdGVfbWFzayA9 IDA7Ci0JdTMyIGNvbnN0IHNsZWVwX3VzID0gMTA7Ci0JdTMyIGNvbnN0IHRpbWVvdXRfdXMgPSAx MDA7Ci0KLQlzdG9wX3N0YXRlX21hc2sgPSBCSVQoNCk7IC8qIGNsb2NrIGxhbmUgKi8KLQlpZiAo bGFuZXMgJiBEU0lfREFUQV9MQU5FXzApCi0JCXN0b3Bfc3RhdGVfbWFzayB8PSBCSVQoMCk7Ci0J aWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8xKQotCQlzdG9wX3N0YXRlX21hc2sgfD0gQklUKDEp OwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMikKLQkJc3RvcF9zdGF0ZV9tYXNrIHw9IEJJ VCgyKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpCi0JCXN0b3Bfc3RhdGVfbWFzayB8 PSBCSVQoMyk7Ci0KLQlwcl9kZWJ1ZygiJXM6IHBvbGxpbmcgZm9yIGxhbmVzIHRvIGJlIGluIHN0 b3Agc3RhdGUsIG1hc2s9MHglMDh4XG4iLAotCQlfX2Z1bmNfXywgc3RvcF9zdGF0ZV9tYXNrKTsK LQlyYyA9IHJlYWRsX3BvbGxfdGltZW91dChwaHktPmJhc2UgKyBEU0lQSFlfQ01OX0xBTkVfU1RB VFVTMSwgdmFsLAotCQkJKHZhbCA9PSBzdG9wX3N0YXRlX21hc2spLCBzbGVlcF91cywgdGltZW91 dF91cyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiJXM6IGxhbmVzIG5vdCBpbiBzdG9wIHN0YXRl LCBMQU5FX1NUQVRVUz0weCUwOHhcbiIsCi0JCQlfX2Z1bmNfXywgdmFsKTsKLQkJcmV0dXJuIHJj OwotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIGRzaV9waHlfaHdfdjNfMF91bHBzX3JlcXVl c3Qoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJc3RydWN0IGRzaV9waHlfY2ZnICpjZmcsIHUz MiBsYW5lcykKLXsKLQl1MzIgcmVnID0gMDsKLQotCWlmIChsYW5lcyAmIERTSV9DTE9DS19MQU5F KQotCQlyZWcgPSBCSVQoNCk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8wKQotCQlyZWcg fD0gQklUKDApOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMSkKLQkJcmVnIHw9IEJJVCgx KTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpCi0JCXJlZyB8PSBCSVQoMik7Ci0JaWYg KGxhbmVzICYgRFNJX0RBVEFfTEFORV8zKQotCQlyZWcgfD0gQklUKDMpOwotCi0JLyoKLQkgKiBV TFBTIGVudHJ5IHJlcXVlc3QuIFdhaXQgZm9yIHNob3J0IHRpbWUgdG8gbWFrZSBzdXJlCi0JICog dGhhdCB0aGUgbGFuZXMgZW50ZXIgVUxQUy4gUmVjb21tZW5kZWQgYXMgcGVyIEhQRy4KLQkgKi8K LQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MQU5FX0NUUkwxLCByZWcpOwotCXVzbGVlcF9yYW5n ZSgxMDAsIDExMCk7Ci0KLQkvKiBkaXNhYmxlIExQUlggYW5kIENEUlggKi8KLQlkc2lfcGh5X2h3 X3YzXzBfY29uZmlnX2xwY2RyeChwaHksIGNmZywgZmFsc2UpOwotCS8qIGRpc2FibGUgbGFuZSBM RE9zICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVlJFR19DVFJMLCAweDE5KTsKLQlwcl9k ZWJ1ZygiW0RTSV9QSFklZF0gVUxQUyByZXF1ZXN0ZWQgZm9yIGxhbmVzIDB4JXhcbiIsIHBoeS0+ aW5kZXgsCi0JCSBsYW5lcyk7Ci19Ci0KLXZvaWQgZHNpX3BoeV9od192M18wX3VscHNfZXhpdChz dHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJc3RydWN0IGRzaV9waHlfY2ZnICpjZmcsIHUzMiBs YW5lcykKLXsKLQl1MzIgcmVnID0gMDsKLQotCWlmIChsYW5lcyAmIERTSV9DTE9DS19MQU5FKQot CQlyZWcgPSBCSVQoNCk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8wKQotCQlyZWcgfD0g QklUKDApOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMSkKLQkJcmVnIHw9IEJJVCgxKTsK LQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpCi0JCXJlZyB8PSBCSVQoMik7Ci0JaWYgKGxh bmVzICYgRFNJX0RBVEFfTEFORV8zKQotCQlyZWcgfD0gQklUKDMpOwotCi0JLyogZW5hYmxlIGxh bmUgTERPcyAqLwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX1ZSRUdfQ1RSTCwgMHg1OSk7Ci0J LyogZW5hYmxlIExQUlggYW5kIENEUlggKi8KLQlkc2lfcGh5X2h3X3YzXzBfY29uZmlnX2xwY2Ry eChwaHksIGNmZywgdHJ1ZSk7Ci0KLQkvKiBVTFBTIGV4aXQgcmVxdWVzdCAqLwotCURTSV9XMzIo cGh5LCBEU0lQSFlfQ01OX0xBTkVfQ1RSTDIsIHJlZyk7Ci0JdXNsZWVwX3JhbmdlKDEwMDAsIDEw MTApOwotCi0JLyogQ2xlYXIgVUxQUyByZXF1ZXN0IGZsYWdzIG9uIGFsbCBsYW5lcyAqLwotCURT SV9XMzIocGh5LCBEU0lQSFlfQ01OX0xBTkVfQ1RSTDEsIDApOwotCS8qIENsZWFyIFVMUFMgZXhp dCBmbGFncyBvbiBhbGwgbGFuZXMgKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MQU5FX0NU UkwyLCAwKTsKLQotCS8qCi0JICogU29tZXRpbWVzIHdoZW4gZXhpdGluZyBVTFBTLCBpdCBpcyBw b3NzaWJsZSB0aGF0IHNvbWUgRFNJCi0JICogbGFuZXMgYXJlIG5vdCBpbiB0aGUgc3RvcCBzdGF0 ZSB3aGljaCBjb3VsZCBsZWFkIHRvIERTSQotCSAqIGNvbW1hbmRzIG5vdCBnb2luZyB0aHJvdWdo LiBUbyBhdm9pZCB0aGlzLCBmb3JjZSB0aGUgbGFuZXMKLQkgKiB0byBiZSBpbiBzdG9wIHN0YXRl LgotCSAqLwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0xBTkVfQ1RSTDMsIHJlZyk7Ci0JRFNJ X1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DVFJMMywgMCk7Ci0JdXNsZWVwX3JhbmdlKDEwMCwg MTEwKTsKLX0KLQotdTMyIGRzaV9waHlfaHdfdjNfMF9nZXRfbGFuZXNfaW5fdWxwcyhzdHJ1Y3Qg ZHNpX3BoeV9odyAqcGh5KQotewotCXUzMiBsYW5lcyA9IDA7Ci0KLQlsYW5lcyA9IERTSV9SMzIo cGh5LCBEU0lQSFlfQ01OX0xBTkVfU1RBVFVTMCk7Ci0JcHJfZGVidWcoIltEU0lfUEhZJWRdIGxh bmVzIGluIHVscHMgPSAweCV4XG4iLCBwaHktPmluZGV4LCBsYW5lcyk7Ci0JcmV0dXJuIGxhbmVz OwotfQotCi1ib29sIGRzaV9waHlfaHdfdjNfMF9pc19sYW5lc19pbl91bHBzKHUzMiBsYW5lcywg dTMyIHVscHNfbGFuZXMpCi17Ci0JaWYgKGxhbmVzICYgdWxwc19sYW5lcykKLQkJcmV0dXJuIGZh bHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLWludCBkc2lfcGh5X2h3X3RpbWluZ192YWxfdjNf MChzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmdfY2ZnLAotCQl1MzIgKnRpbWlu Z192YWwsIHUzMiBzaXplKQotewotCWludCBpID0gMDsKLQotCWlmIChzaXplICE9IERTSV9QSFlf VElNSU5HX1YzX1NJWkUpIHsKLQkJcHJfZXJyKCJVbmV4cGVjdGVkIHRpbWluZyBhcnJheSBzaXpl ICVkXG4iLCBzaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8 IHNpemU7IGkrKykKLQkJdGltaW5nX2NmZy0+bGFuZV92M1tpXSA9IHRpbWluZ192YWxbaV07Ci0J cmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9waHlfdGltaW5nX2NhbGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX3BoeV90aW1pbmdfY2FsYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2Zl NmVjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3Bo eV90aW1pbmdfY2FsYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjc2ICswLDAgQEAKLS8qCi0gKiBD b3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJz aW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpICJkc2ktcGh5 LXRpbWluZzoiIGZtdAotCi0jaW5jbHVkZSAiZHNpX3BoeV90aW1pbmdfY2FsYy5oIgotCi1zdGF0 aWMgY29uc3QgdTMyIGJpdHNfcGVyX3BpeGVsW0RTSV9QSVhFTF9GT1JNQVRfTUFYXSA9IHsKLQkx NiwgMTgsIDE4LCAyNCwgMywgOCwgMTIgfTsKLQotc3RhdGljIGludCBkc2lfcGh5X2Ntbl92YWxp ZGF0ZV9hbmRfc2V0KHN0cnVjdCB0aW1pbmdfZW50cnkgKnQsCi0JY2hhciBjb25zdCAqdF9uYW1l KQotewotCWlmICh0LT5yZWMgJiAweGZmZmZmZjAwKSB7Ci0JCS8qIE91dHB1dCB2YWx1ZSBjYW4g b25seSBiZSA4IGJpdHMgKi8KLQkJcHJfZXJyKCJJbmNvcnJlY3QgJXMgcmVjIHZhbHVlIC0gJWRc biIsIHRfbmFtZSwgdC0+cmVjKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXQtPnJlZ192YWx1 ZSA9IHQtPnJlYzsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBjYWxjX2Nsa19wcmVwYXJlIC0g Y2FsY3VsYXRlcyBwcmVwYXJlIHRpbWluZyBwYXJhbXMgZm9yIGNsayBsYW5lLgotICovCi1zdGF0 aWMgaW50IGNhbGNfY2xrX3ByZXBhcmUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCQlzdHJ1 Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJhbXMsCi0JCQkgICAgc3RydWN0IHBoeV90aW1pbmdf ZGVzYyAqZGVzYywKLQkJCSAgICBzMzIgKmFjdHVhbF9mcmFjLAotCQkJICAgIHM2NCAqYWN0dWFs X2ludGVybWVkaWF0ZSkKLXsKLQl1NjQgbXVsdGlwbGllciA9IEJJVCgyMCk7Ci0Jc3RydWN0IHRp bWluZ19lbnRyeSAqdCA9ICZkZXNjLT5jbGtfcHJlcGFyZTsKLQlpbnQgcmMgPSAwOwotCXU2NCBk aXZpZGVuZCwgdGVtcCwgdGVtcF9tdWx0aXBsZTsKLQlzMzIgZnJhYyA9IDA7Ci0JczY0IGludGVy bWVkaWF0ZTsKLQlzNjQgY2xrX3ByZXBfYWN0dWFsOwotCi0JZGl2aWRlbmQgPSAoKHQtPnJlY19t YXggLSB0LT5yZWNfbWluKSAqCi0JCWNsa19wYXJhbXMtPmNsa19wcmVwX2J1ZiAqIG11bHRpcGxp ZXIpOwotCXRlbXAgID0gcm91bmR1cChkaXZfczY0KGRpdmlkZW5kLCAxMDApLCBtdWx0aXBsaWVy KTsKLQl0ZW1wICs9ICh0LT5yZWNfbWluICogbXVsdGlwbGllcik7Ci0JdC0+cmVjID0gZGl2X3M2 NCh0ZW1wLCBtdWx0aXBsaWVyKTsKLQotCXJjID0gZHNpX3BoeV9jbW5fdmFsaWRhdGVfYW5kX3Nl dCh0LCAiY2xrX3ByZXBhcmUiKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyb3I7Ci0KLQkvKiBjYWxj dWxhdGUgdGhlb3JldGljYWwgdmFsdWUgKi8KLQl0ZW1wX211bHRpcGxlID0gOCAqIHQtPnJlZ192 YWx1ZSAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMKLQkJCSAqIG11bHRpcGxpZXI7Ci0JaW50 ZXJtZWRpYXRlID0gZGl2X3M2NCh0ZW1wX211bHRpcGxlLCBjbGtfcGFyYW1zLT5iaXRjbGtfbWJw cyk7Ci0JZGl2X3M2NF9yZW0odGVtcF9tdWx0aXBsZSwgY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMs ICZmcmFjKTsKLQljbGtfcHJlcF9hY3R1YWwgPSBkaXZfczY0KChpbnRlcm1lZGlhdGUgKyBmcmFj KSwgbXVsdGlwbGllcik7Ci0KLQlwcl9kZWJ1ZygiQ0xLX1BSRVBBUkU6bWlwaV9taW49JWQsIG1p cGlfbWF4PSVkLCByZWNfbWluPSVkLCByZWNfbWF4PSVkIiwKLQkJIHQtPm1pcGlfbWluLCB0LT5t aXBpX21heCwgdC0+cmVjX21pbiwgdC0+cmVjX21heCk7Ci0JcHJfZGVidWcoIiByZWdfdmFsdWU9 JWQsIGFjdHVhbD0lbGxkXG4iLCB0LT5yZWdfdmFsdWUsIGNsa19wcmVwX2FjdHVhbCk7Ci0KLQkq YWN0dWFsX2ZyYWMgPSBmcmFjOwotCSphY3R1YWxfaW50ZXJtZWRpYXRlID0gaW50ZXJtZWRpYXRl OwotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogY2FsY19jbGtfemVybyAtIGNh bGN1bGF0ZXMgemVybyB0aW1pbmcgcGFyYW1zIGZvciBjbGsgbGFuZS4KLSAqLwotc3RhdGljIGlu dCBjYWxjX2Nsa196ZXJvKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgcGh5X2Ns a19wYXJhbXMgKmNsa19wYXJhbXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjLAot CQkJczMyIGFjdHVhbF9mcmFjLCBzNjQgYWN0dWFsX2ludGVybWVkaWF0ZSkKLXsKLQl1NjQgY29u c3QgbXVsdGlwbGllciA9IEJJVCgyMCk7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgdGltaW5nX2Vu dHJ5ICp0ID0gJmRlc2MtPmNsa196ZXJvOwotCXM2NCBtaXBpX21pbiwgcmVjX3RlbXAxOwotCXN0 cnVjdCBwaHlfdGltaW5nX29wcyAqb3BzID0gcGh5LT5vcHMudGltaW5nX29wczsKLQotCW1pcGlf bWluID0gKCgzMDAgKiBtdWx0aXBsaWVyKSAtIChhY3R1YWxfaW50ZXJtZWRpYXRlICsgYWN0dWFs X2ZyYWMpKTsKLQl0LT5taXBpX21pbiA9IGRpdl9zNjQobWlwaV9taW4sIG11bHRpcGxpZXIpOwot Ci0JcmVjX3RlbXAxID0gZGl2X3M2NCgobWlwaV9taW4gKiBjbGtfcGFyYW1zLT5iaXRjbGtfbWJw cyksCi0JCQkgICAgY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucyk7Ci0KLQlpZiAob3BzLT5jYWxj X2Nsa196ZXJvKSB7Ci0JCXQtPnJlY19taW4gPSBvcHMtPmNhbGNfY2xrX3plcm8ocmVjX3RlbXAx LCBtdWx0aXBsaWVyKTsKLQl9IGVsc2UgewotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7 Ci0JfQotCXQtPnJlY19tYXggPSAoKHQtPnJlY19taW4gPiAyNTUpID8gNTExIDogMjU1KTsKLQot CXQtPnJlYyA9IERJVl9ST1VORF9VUCgoKCh0LT5yZWNfbWF4IC0gdC0+cmVjX21pbikgKgotCQlj bGtfcGFyYW1zLT5jbGtfemVyb19idWYpICsgKHQtPnJlY19taW4gKiAxMDApKSwgMTAwKTsKLQot CXJjID0gZHNpX3BoeV9jbW5fdmFsaWRhdGVfYW5kX3NldCh0LCAiY2xrX3plcm8iKTsKLQlpZiAo cmMpCi0JCWdvdG8gZXJyb3I7Ci0KLQotCXByX2RlYnVnKCJDTEtfWkVSTzptaXBpX21pbj0lZCwg bWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19tYXg9JWQsIHJlZ192YWw9JWRcbiIsCi0JCSB0 LT5taXBpX21pbiwgdC0+bWlwaV9tYXgsIHQtPnJlY19taW4sIHQtPnJlY19tYXgsCi0JCSB0LT5y ZWdfdmFsdWUpOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGNhbGNfY2xrX3Ry YWlsIC0gY2FsY3VsYXRlcyBwcmVwYXJlIHRyYWlsIHBhcmFtcyBmb3IgY2xrIGxhbmUuCi0gKi8K LXN0YXRpYyBpbnQgY2FsY19jbGtfdHJhaWwoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCXN0 cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBwaHlfdGltaW5nX2Rl c2MgKmRlc2MsCi0JCQlzNjQgKnRlb3RfY2xrX2xhbmUpCi17Ci0JdTY0IGNvbnN0IG11bHRpcGxp ZXIgPSBCSVQoMjApOwotCWludCByYyA9IDA7Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSAqdCA9ICZk ZXNjLT5jbGtfdHJhaWw7Ci0JdTY0IHRlbXBfbXVsdGlwbGU7Ci0JczMyIGZyYWM7Ci0JczY0IG1p cGlfbWF4X3RyLCByZWNfdGVtcDEsIG1pcGlfbWF4OwotCXM2NCB0ZW90X2Nsa19sYW5lMTsKLQlz dHJ1Y3QgcGh5X3RpbWluZ19vcHMgKm9wcyA9IHBoeS0+b3BzLnRpbWluZ19vcHM7Ci0KLQl0ZW1w X211bHRpcGxlID0gZGl2X3M2NCgKLQkJCSgxMiAqIG11bHRpcGxpZXIgKiBjbGtfcGFyYW1zLT50 bHB4X251bWVyX25zKSwKLQkJCWNsa19wYXJhbXMtPmJpdGNsa19tYnBzKTsKLQlkaXZfczY0X3Jl bSh0ZW1wX211bHRpcGxlLCBtdWx0aXBsaWVyLCAmZnJhYyk7Ci0KLQltaXBpX21heF90ciA9ICgo MTA1ICogbXVsdGlwbGllcikgKwotCQkgICAgICAgKHRlbXBfbXVsdGlwbGUgKyBmcmFjKSk7Ci0J dGVvdF9jbGtfbGFuZTEgPSBkaXZfczY0KG1pcGlfbWF4X3RyLCBtdWx0aXBsaWVyKTsKLQotCW1p cGlfbWF4ID0gKG1pcGlfbWF4X3RyIC0gKGNsa19wYXJhbXMtPnRyZW90X25zICogbXVsdGlwbGll cikpOwotCXQtPm1pcGlfbWF4ID0gZGl2X3M2NChtaXBpX21heCwgbXVsdGlwbGllcik7Ci0KLQl0 ZW1wX211bHRpcGxlID0gZGl2X3M2NCgKLQkJCSh0LT5taXBpX21pbiAqIG11bHRpcGxpZXIgKiBj bGtfcGFyYW1zLT5iaXRjbGtfbWJwcyksCi0JCQljbGtfcGFyYW1zLT50bHB4X251bWVyX25zKTsK LQotCWRpdl9zNjRfcmVtKHRlbXBfbXVsdGlwbGUsIG11bHRpcGxpZXIsICZmcmFjKTsKLQlpZiAo b3BzLT5jYWxjX2Nsa190cmFpbF9yZWNfbWluKSB7Ci0JCXQtPnJlY19taW4gPSBvcHMtPmNhbGNf Y2xrX3RyYWlsX3JlY19taW4odGVtcF9tdWx0aXBsZSwKLQkJCWZyYWMsIG11bHRpcGxpZXIpOwot CX0gZWxzZSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiByZWNv bW1lbmRlZCBtYXggKi8KLQlyZWNfdGVtcDEgPSBkaXZfczY0KChtaXBpX21heCAqIGNsa19wYXJh bXMtPmJpdGNsa19tYnBzKSwKLQkJCSAgICBjbGtfcGFyYW1zLT50bHB4X251bWVyX25zKTsKLQlp ZiAob3BzLT5jYWxjX2Nsa190cmFpbF9yZWNfbWF4KSB7Ci0JCXQtPnJlY19tYXggPSBvcHMtPmNh bGNfY2xrX3RyYWlsX3JlY19tYXgocmVjX3RlbXAxLCBtdWx0aXBsaWVyKTsKLQl9IGVsc2Ugewot CQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JdC0+cmVjID0gRElWX1JPVU5E X1VQKAotCQkoKCh0LT5yZWNfbWF4IC0gdC0+cmVjX21pbikgKiBjbGtfcGFyYW1zLT5jbGtfdHJh aWxfYnVmKSArCi0JCSAodC0+cmVjX21pbiAqIDEwMCkpLCAxMDApOwotCi0JcmMgPSBkc2lfcGh5 X2Ntbl92YWxpZGF0ZV9hbmRfc2V0KHQsICJjbGtfdHJhaWwiKTsKLQlpZiAocmMpCi0JCWdvdG8g ZXJyb3I7Ci0KLQkqdGVvdF9jbGtfbGFuZSA9IHRlb3RfY2xrX2xhbmUxOwotCXByX2RlYnVnKCJD TEtfVFJBSUw6bWlwaV9taW49JWQsIG1pcGlfbWF4PSVkLCByZWNfbWluPSVkLCByZWNfbWF4PSVk LCByZWdfdmFsPSVkXG4iLAotCQkgdC0+bWlwaV9taW4sIHQtPm1pcGlfbWF4LCB0LT5yZWNfbWlu LCB0LT5yZWNfbWF4LAotCQkgdC0+cmVnX3ZhbHVlKTsKLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwot Ci19Ci0KLS8qKgotICogY2FsY19oc19wcmVwYXJlIC0gY2FsY3VsYXRlcyBwcmVwYXJlIHRpbWlu ZyBwYXJhbXMgZm9yIGRhdGEgbGFuZXMgaW4gSFMuCi0gKi8KLXN0YXRpYyBpbnQgY2FsY19oc19w cmVwYXJlKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMg KmNsa19wYXJhbXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjLAotCQkJdTY0ICp0 ZW1wX211bCkKLXsKLQl1NjQgbXVsdGlwbGllciA9IEJJVCgyMCk7Ci0JaW50IHJjID0gMDsKLQlz dHJ1Y3QgdGltaW5nX2VudHJ5ICp0ID0gJmRlc2MtPmhzX3ByZXBhcmU7Ci0JdTY0IHRlbXBfbXVs dGlwbGUsIGRpdmlkZW5kLCB0ZW1wOwotCXMzMiBmcmFjOwotCXM2NCByZWNfdGVtcDEsIHJlY190 ZW1wMiwgbWlwaV9tYXgsIG1pcGlfbWluOwotCXUzMiBsb3dfY2xrX211bHRpcGxpZXIgPSAwOwot Ci0JaWYgKGNsa19wYXJhbXMtPmJpdGNsa19tYnBzIDw9IDEyMCkKLQkJbG93X2Nsa19tdWx0aXBs aWVyID0gMjsKLQkvKiBtaXBpIG1pbiAqLwotCXRlbXBfbXVsdGlwbGUgPSBkaXZfczY0KCg0ICog bXVsdGlwbGllciAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpLAotCQkJCWNsa19wYXJhbXMt PmJpdGNsa19tYnBzKTsKLQlkaXZfczY0X3JlbSh0ZW1wX211bHRpcGxlLCBtdWx0aXBsaWVyLCAm ZnJhYyk7Ci0JbWlwaV9taW4gPSAoNDAgKiBtdWx0aXBsaWVyKSArICh0ZW1wX211bHRpcGxlICsg ZnJhYyk7Ci0JdC0+bWlwaV9taW4gPSBkaXZfczY0KG1pcGlfbWluLCBtdWx0aXBsaWVyKTsKLQot CS8qIG1pcGlfbWF4ICovCi0JdGVtcF9tdWx0aXBsZSA9IGRpdl9zNjQoCi0JCQkoNiAqIG11bHRp cGxpZXIgKiBjbGtfcGFyYW1zLT50bHB4X251bWVyX25zKSwKLQkJCWNsa19wYXJhbXMtPmJpdGNs a19tYnBzKTsKLQlkaXZfczY0X3JlbSh0ZW1wX211bHRpcGxlLCBtdWx0aXBsaWVyLCAmZnJhYyk7 Ci0JbWlwaV9tYXggPSAoODUgKiBtdWx0aXBsaWVyKSArIHRlbXBfbXVsdGlwbGU7Ci0JdC0+bWlw aV9tYXggPSBkaXZfczY0KG1pcGlfbWF4LCBtdWx0aXBsaWVyKTsKLQotCS8qIHJlY29tbWVuZGVk IG1pbiAqLwotCXRlbXBfbXVsdGlwbGUgPSBkaXZfczY0KChtaXBpX21pbiAqIGNsa19wYXJhbXMt PmJpdGNsa19tYnBzKSwKLQkJCQljbGtfcGFyYW1zLT50bHB4X251bWVyX25zKTsKLQl0ZW1wX211 bHRpcGxlIC09IChsb3dfY2xrX211bHRpcGxpZXIgKiBtdWx0aXBsaWVyKTsKLQlkaXZfczY0X3Jl bSh0ZW1wX211bHRpcGxlLCBtdWx0aXBsaWVyLCAmZnJhYyk7Ci0JcmVjX3RlbXAxID0gcm91bmR1 cCgoKHRlbXBfbXVsdGlwbGUgKyBmcmFjKSAvIDgpLCBtdWx0aXBsaWVyKTsKLQl0LT5yZWNfbWlu ID0gZGl2X3M2NChyZWNfdGVtcDEsIG11bHRpcGxpZXIpOwotCi0JLyogcmVjb21tZW5kZWQgbWF4 ICovCi0JdGVtcF9tdWx0aXBsZSA9IGRpdl9zNjQoKG1pcGlfbWF4ICogY2xrX3BhcmFtcy0+Yml0 Y2xrX21icHMpLAotCQkJCWNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpOwotCXRlbXBfbXVsdGlw bGUgLT0gKGxvd19jbGtfbXVsdGlwbGllciAqIG11bHRpcGxpZXIpOwotCWRpdl9zNjRfcmVtKHRl bXBfbXVsdGlwbGUsIG11bHRpcGxpZXIsICZmcmFjKTsKLQlyZWNfdGVtcDIgPSByb3VuZGRvd24o KHRlbXBfbXVsdGlwbGUgLyA4KSwgbXVsdGlwbGllcik7Ci0JdC0+cmVjX21heCA9IGRpdl9zNjQo cmVjX3RlbXAyLCBtdWx0aXBsaWVyKTsKLQotCS8qIHJlZ2lzdGVyIHZhbHVlICovCi0JZGl2aWRl bmQgPSAoKHJlY190ZW1wMiAtIHJlY190ZW1wMSkgKiBjbGtfcGFyYW1zLT5oc19wcmVwX2J1Zik7 Ci0JdGVtcCA9IHJvdW5kdXAoZGl2X3U2NChkaXZpZGVuZCwgMTAwKSwgbXVsdGlwbGllcik7Ci0J dC0+cmVjID0gZGl2X3M2NCgodGVtcCArIHJlY190ZW1wMSksIG11bHRpcGxpZXIpOwotCi0JcmMg PSBkc2lfcGh5X2Ntbl92YWxpZGF0ZV9hbmRfc2V0KHQsICJoc19wcmVwYXJlIik7Ci0JaWYgKHJj KQotCQlnb3RvIGVycm9yOwotCi0JdGVtcF9tdWx0aXBsZSA9IGRpdl9zNjQoCi0JCQkoOCAqICh0 ZW1wICsgcmVjX3RlbXAxKSAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpLAotCQkJY2xrX3Bh cmFtcy0+Yml0Y2xrX21icHMpOwotCi0JKnRlbXBfbXVsID0gdGVtcF9tdWx0aXBsZTsKLQlwcl9k ZWJ1ZygiSFNfUFJFUDptaXBpX21pbj0lZCwgbWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19t YXg9JWQsIHJlZ192YWw9JWRcbiIsCi0JCSB0LT5taXBpX21pbiwgdC0+bWlwaV9tYXgsIHQtPnJl Y19taW4sIHQtPnJlY19tYXgsCi0JCSB0LT5yZWdfdmFsdWUpOwotZXJyb3I6Ci0JcmV0dXJuIHJj OwotfQotCi0vKioKLSAqIGNhbGNfaHNfemVybyAtIGNhbGN1bGF0ZXMgemVybyB0aW1pbmcgcGFy YW1zIGZvciBkYXRhIGxhbmVzIGluIEhTLgotICovCi1zdGF0aWMgaW50IGNhbGNfaHNfemVybyhz dHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJc3RydWN0IHBoeV9jbGtfcGFyYW1zICpjbGtfcGFy YW1zLAotCQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYywKLQkJCXU2NCB0ZW1wX211bHRp cGxlKQotewotCXU2NCBjb25zdCBtdWx0aXBsaWVyID0gQklUKDIwKTsKLQlpbnQgcmMgPSAwOwot CXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+aHNfemVybzsKLQlzNjQgcmVjX3RlbXAx LCBtaXBpX21pbjsKLQlzdHJ1Y3QgcGh5X3RpbWluZ19vcHMgKm9wcyA9IHBoeS0+b3BzLnRpbWlu Z19vcHM7Ci0KLQltaXBpX21pbiA9IGRpdl9zNjQoKDEwICogY2xrX3BhcmFtcy0+dGxweF9udW1l cl9ucyAqIG11bHRpcGxpZXIpLAotCQkJICAgY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpOwotCXJl Y190ZW1wMSA9ICgxNDUgKiBtdWx0aXBsaWVyKSArIG1pcGlfbWluIC0gdGVtcF9tdWx0aXBsZTsK LQl0LT5taXBpX21pbiA9IGRpdl9zNjQocmVjX3RlbXAxLCBtdWx0aXBsaWVyKTsKLQotCS8qIHJl Y29tbWVuZGVkIG1pbiAqLwotCXJlY190ZW1wMSA9IGRpdl9zNjQoKHJlY190ZW1wMSAqIGNsa19w YXJhbXMtPmJpdGNsa19tYnBzKSwKLQkJCSAgICBjbGtfcGFyYW1zLT50bHB4X251bWVyX25zKTsK LQotCWlmIChvcHMtPmNhbGNfaHNfemVybykgewotCQl0LT5yZWNfbWluID0gb3BzLT5jYWxjX2hz X3plcm8ocmVjX3RlbXAxLCBtdWx0aXBsaWVyKTsKLQl9IGVsc2UgewotCQlyYyA9IC1FSU5WQUw7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JdC0+cmVjX21heCA9ICgodC0+cmVjX21pbiA+IDI1NSkg PyA1MTEgOiAyNTUpOwotCXQtPnJlYyA9IERJVl9ST1VORF9VUCgKLQkJCSgoKHQtPnJlY19tYXgg LSB0LT5yZWNfbWluKSAqIGNsa19wYXJhbXMtPmhzX3plcm9fYnVmKSArCi0JCQkgKHQtPnJlY19t aW4gKiAxMDApKSwKLQkJCTEwMCk7Ci0KLQlyYyA9IGRzaV9waHlfY21uX3ZhbGlkYXRlX2FuZF9z ZXQodCwgImhzX3plcm8iKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwcl9kZWJ1Zygi SFNfWkVSTzptaXBpX21pbj0lZCwgbWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19tYXg9JWQs IHJlZ192YWw9JWRcbiIsCi0JCSB0LT5taXBpX21pbiwgdC0+bWlwaV9tYXgsIHQtPnJlY19taW4s IHQtPnJlY19tYXgsCi0JCSB0LT5yZWdfdmFsdWUpOwotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19 Ci0KLS8qKgotICogY2FsY19oc190cmFpbCAtIGNhbGN1bGF0ZXMgdHJhaWwgdGltaW5nIHBhcmFt cyBmb3IgZGF0YSBsYW5lcyBpbiBIUy4KLSAqLwotc3RhdGljIGludCBjYWxjX2hzX3RyYWlsKHN0 cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJh bXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjLAotCQkJdTY0IHRlb3RfY2xrX2xh bmUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5ICp0ID0gJmRlc2MtPmhz X3RyYWlsOwotCXM2NCByZWNfdGVtcDE7Ci0Jc3RydWN0IHBoeV90aW1pbmdfb3BzICpvcHMgPSBw aHktPm9wcy50aW1pbmdfb3BzOwotCi0JdC0+bWlwaV9taW4gPSA2MCArCi0JCQltdWx0X2ZyYWMo Y2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucywgNCwKLQkJCQkgIGNsa19wYXJhbXMtPmJpdGNsa19t YnBzKTsKLQotCXQtPm1pcGlfbWF4ID0gdGVvdF9jbGtfbGFuZSAtIGNsa19wYXJhbXMtPnRyZW90 X25zOwotCi0JaWYgKG9wcy0+Y2FsY19oc190cmFpbCkgewotCQlvcHMtPmNhbGNfaHNfdHJhaWwo Y2xrX3BhcmFtcywgZGVzYyk7Ci0JfSBlbHNlIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVy cm9yOwotCX0KLQotCXJlY190ZW1wMSA9IERJVl9ST1VORF9VUCgKLQkJCSgodC0+cmVjX21heCAt IHQtPnJlY19taW4pICogY2xrX3BhcmFtcy0+aHNfdHJhaWxfYnVmKSwKLQkJCTEwMCk7Ci0JdC0+ cmVjID0gcmVjX3RlbXAxICsgdC0+cmVjX21pbjsKLQotCXJjID0gZHNpX3BoeV9jbW5fdmFsaWRh dGVfYW5kX3NldCh0LCAiaHNfdHJhaWwiKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyb3I7Ci0KLQlw cl9kZWJ1ZygiSFNfVFJBSUw6bWlwaV9taW49JWQsIG1pcGlfbWF4PSVkLCByZWNfbWluPSVkLCBy ZWNfbWF4PSVkLCByZWdfdmFsPSVkXG4iLAotCQkgdC0+bWlwaV9taW4sIHQtPm1pcGlfbWF4LCB0 LT5yZWNfbWluLCB0LT5yZWNfbWF4LAotCQkgdC0+cmVnX3ZhbHVlKTsKLQotZXJyb3I6Ci0JcmV0 dXJuIHJjOwotfQotCi0vKioKLSAqIGNhbGNfaHNfcnFzdCAtIGNhbGN1bGF0ZXMgcnFzdCB0aW1p bmcgcGFyYW1zIGZvciBkYXRhIGxhbmVzIGluIEhTLgotICovCi1zdGF0aWMgaW50IGNhbGNfaHNf cnFzdChzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJc3RydWN0IHBoeV9jbGtfcGFyYW1zICpj bGtfcGFyYW1zLAotCQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYykKLXsKLQlpbnQgcmMg PSAwOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+aHNfcnFzdDsKLQotCXQtPnJl YyA9IERJVl9ST1VORF9VUCgKLQkJKCh0LT5taXBpX21pbiAqIGNsa19wYXJhbXMtPmJpdGNsa19t YnBzKSAtCi0JCSAoOCAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKSwKLQkJKDggKiBjbGtf cGFyYW1zLT50bHB4X251bWVyX25zKSk7Ci0KLQlyYyA9IGRzaV9waHlfY21uX3ZhbGlkYXRlX2Fu ZF9zZXQodCwgImhzX3Jxc3QiKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwcl9kZWJ1 ZygiSFNfUlFTVDptaXBpX21pbj0lZCwgbWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19tYXg9 JWQsIHJlZ192YWw9JWRcbiIsCi0JCSB0LT5taXBpX21pbiwgdC0+bWlwaV9tYXgsIHQtPnJlY19t aW4sIHQtPnJlY19tYXgsCi0JCSB0LT5yZWdfdmFsdWUpOwotCi1lcnJvcjoKLQlyZXR1cm4gcmM7 Ci19Ci0KLS8qKgotICogY2FsY19oc19leGl0IC0gY2FsY3VsYXRlcyBleGl0IHRpbWluZyBwYXJh bXMgZm9yIGRhdGEgbGFuZXMgaW4gSFMuCi0gKi8KLXN0YXRpYyBpbnQgY2FsY19oc19leGl0KHN0 cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJh bXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKQotewotCWludCByYyA9IDA7Ci0J c3RydWN0IHRpbWluZ19lbnRyeSAqdCA9ICZkZXNjLT5oc19leGl0OwotCi0JdC0+cmVjX21pbiA9 IChESVZfUk9VTkRfVVAoCi0JCQkodC0+bWlwaV9taW4gKiBjbGtfcGFyYW1zLT5iaXRjbGtfbWJw cyksCi0JCQkoOCAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKSAtIDEpOwotCi0JdC0+cmVj ID0gRElWX1JPVU5EX1VQKAotCQkoKCh0LT5yZWNfbWF4IC0gdC0+cmVjX21pbikgKiBjbGtfcGFy YW1zLT5oc19leGl0X2J1ZikgKwotCQkgKHQtPnJlY19taW4gKiAxMDApKSwgMTAwKTsKLQotCXJj ID0gZHNpX3BoeV9jbW5fdmFsaWRhdGVfYW5kX3NldCh0LCAiaHNfZXhpdCIpOwotCWlmIChyYykK LQkJZ290byBlcnJvcjsKLQotCi0JcHJfZGVidWcoIkhTX0VYSVQ6bWlwaV9taW49JWQsIG1pcGlf bWF4PSVkLCByZWNfbWluPSVkLCByZWNfbWF4PSVkLCByZWdfdmFsPSVkXG4iLAotCQkgdC0+bWlw aV9taW4sIHQtPm1pcGlfbWF4LCB0LT5yZWNfbWluLCB0LT5yZWNfbWF4LAotCQkgdC0+cmVnX3Zh bHVlKTsKLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGNhbGNfaHNfcnFzdF9j bGsgLSBjYWxjdWxhdGVzIHJxc3QgdGltaW5nIHBhcmFtcyBmb3IgY2xvY2sgbGFuZS4uCi0gKi8K LXN0YXRpYyBpbnQgY2FsY19oc19ycXN0X2NsayhzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJ c3RydWN0IHBoeV9jbGtfcGFyYW1zICpjbGtfcGFyYW1zLAotCQkJc3RydWN0IHBoeV90aW1pbmdf ZGVzYyAqZGVzYykKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAm ZGVzYy0+aHNfcnFzdF9jbGs7Ci0KLQl0LT5yZWMgPSBESVZfUk9VTkRfVVAoCi0JCSgodC0+bWlw aV9taW4gKiBjbGtfcGFyYW1zLT5iaXRjbGtfbWJwcykgLQotCQkgKDggKiBjbGtfcGFyYW1zLT50 bHB4X251bWVyX25zKSksCi0JCSg4ICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucykpOwotCi0J cmMgPSBkc2lfcGh5X2Ntbl92YWxpZGF0ZV9hbmRfc2V0KHQsICJoc19ycXN0X2NsayIpOwotCWlm IChyYykKLQkJZ290byBlcnJvcjsKLQotCXByX2RlYnVnKCJIU19SUVNUX0NMSzptaXBpX21pbj0l ZCwgbWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19tYXg9JWQsIHJlZ192YWw9JWRcbiIsCi0J CSB0LT5taXBpX21pbiwgdC0+bWlwaV9tYXgsIHQtPnJlY19taW4sIHQtPnJlY19tYXgsCi0JCSB0 LT5yZWdfdmFsdWUpOwotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX3Bo eV9jYWxjX3RpbWluZ19wYXJhbXMgLSBjYWxjdWxhdGVzIHRpbWluZyBwYXJhbWV0cyBmb3IgYSBn aXZlbiBiaXQgY2xvY2sKLSAqLwotc3RhdGljIGludCBkc2lfcGh5X2Ntbl9jYWxjX3RpbWluZ19w YXJhbXMoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQlzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNs a19wYXJhbXMsIHN0cnVjdCBwaHlfdGltaW5nX2Rlc2MgKmRlc2MpCi17Ci0JaW50IHJjID0gMDsK LQlzMzIgYWN0dWFsX2ZyYWMgPSAwOwotCXM2NCBhY3R1YWxfaW50ZXJtZWRpYXRlID0gMDsKLQl1 NjQgdGVtcF9tdWx0aXBsZTsKLQlzNjQgdGVvdF9jbGtfbGFuZTsKLQotCXJjID0gY2FsY19jbGtf cHJlcGFyZShwaHksIGNsa19wYXJhbXMsIGRlc2MsICZhY3R1YWxfZnJhYywKLQkJCSAgICAgICZh Y3R1YWxfaW50ZXJtZWRpYXRlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJjbGtfcHJlcGFyZSBj YWxjdWxhdGlvbnMgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQot CXJjID0gY2FsY19jbGtfemVybyhwaHksIGNsa19wYXJhbXMsIGRlc2MsCi0JCWFjdHVhbF9mcmFj LCBhY3R1YWxfaW50ZXJtZWRpYXRlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJjbGtfemVybyBj YWxjdWxhdGlvbnMgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQot CXJjID0gY2FsY19jbGtfdHJhaWwocGh5LCBjbGtfcGFyYW1zLCBkZXNjLCAmdGVvdF9jbGtfbGFu ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiY2xrX3RyYWlsIGNhbGN1bGF0aW9ucyBmYWlsZWQs IHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2hzX3ByZXBh cmUocGh5LCBjbGtfcGFyYW1zLCBkZXNjLCAmdGVtcF9tdWx0aXBsZSk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiaHNfcHJlcGFyZSBjYWxjdWxhdGlvbnMgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwot CQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gY2FsY19oc196ZXJvKHBoeSwgY2xrX3BhcmFtcywg ZGVzYywgdGVtcF9tdWx0aXBsZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiaHNfemVybyBjYWxj dWxhdGlvbnMgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJj ID0gY2FsY19oc190cmFpbChwaHksIGNsa19wYXJhbXMsIGRlc2MsIHRlb3RfY2xrX2xhbmUpOwot CWlmIChyYykgewotCQlwcl9lcnIoImhzX3RyYWlsIGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJjPSVk XG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2hzX3Jxc3QocGh5LCBj bGtfcGFyYW1zLCBkZXNjKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJoc19ycXN0IGNhbGN1bGF0 aW9ucyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBj YWxjX2hzX2V4aXQocGh5LCBjbGtfcGFyYW1zLCBkZXNjKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJoc19leGl0IGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0JcmMgPSBjYWxjX2hzX3Jxc3RfY2xrKHBoeSwgY2xrX3BhcmFtcywgZGVzYyk7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiaHNfcnFzdF9jbGsgY2FsY3VsYXRpb25zIGZhaWxlZCwg cmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19 Ci0KLS8qKgotICogY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMoKSAtIGNhbGN1bGF0ZXMgdGltaW5n IHBhcmFtZXRlcnMuCi0gKiBAcGh5OiAgICAgIFBvaW50ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBv YmplY3QuCi0gKiBAbW9kZTogICAgIE1vZGUgaW5mb3JtYXRpb24gZm9yIHdoaWNoIHRpbWluZyBo YXMgdG8gYmUgY2FsY3VsYXRlZC4KLSAqIEBjb25maWc6ICAgRFNJIGhvc3QgY29uZmlndXJhdGlv biBmb3IgdGhpcyBtb2RlLgotICogQHRpbWluZzogICBUaW1pbmcgcGFyYW1ldGVycyBmb3IgZWFj aCBsYW5lIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQuCi0gKi8KLWludCBkc2lfcGh5X2h3X2NhbGN1 bGF0ZV90aW1pbmdfcGFyYW1zKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQkJCSAgICBzdHJ1 Y3QgZHNpX21vZGVfaW5mbyAqbW9kZSwKLQkJCQkJICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25f Y2ZnICpob3N0LAotCQkJCQkgICBzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcp Ci17Ci0JLyogY29uc3RhbnRzICovCi0JdTMyIGNvbnN0IGVzY19jbGtfbWh6ID0gMTkyOyAvKiBU T0RPOiBlc2MgY2xvY2sgaXMgaGFyZGNvZGVkICovCi0JdTMyIGNvbnN0IGVzY19jbGtfbW1zc19j Y19wcmVkaXYgPSAxMDsKLQl1MzIgY29uc3QgdGxweF9udW1lciA9IDEwMDA7Ci0JdTMyIGNvbnN0 IHRyX2VvdCA9IDIwOwotCXUzMiBjb25zdCBjbGtfcHJlcGFyZV9zcGVjX21pbiA9IDM4OwotCXUz MiBjb25zdCBjbGtfcHJlcGFyZV9zcGVjX21heCA9IDk1OwotCXUzMiBjb25zdCBjbGtfdHJhaWxf c3BlY19taW4gPSA2MDsKLQl1MzIgY29uc3QgaHNfZXhpdF9zcGVjX21pbiA9IDEwMDsKLQl1MzIg Y29uc3QgaHNfZXhpdF9yZWNvX21heCA9IDI1NTsKLQl1MzIgY29uc3QgaHNfcnFzdF9zcGVjX21p biA9IDUwOwotCi0JLyogbG9jYWwgdmFycyAqLwotCWludCByYyA9IDA7Ci0JdTMyIGhfdG90YWws IHZfdG90YWw7Ci0JdTY0IGludGVyX251bTsKLQl1MzIgbnVtX29mX2xhbmVzID0gMDsKLQl1MzIg YnBwOwotCXU2NCB4LCB5OwotCXN0cnVjdCBwaHlfdGltaW5nX2Rlc2MgZGVzYzsKLQlzdHJ1Y3Qg cGh5X2Nsa19wYXJhbXMgY2xrX3BhcmFtcyA9IHswfTsKLQlzdHJ1Y3QgcGh5X3RpbWluZ19vcHMg Km9wcyA9IHBoeS0+b3BzLnRpbWluZ19vcHM7Ci0KLQltZW1zZXQoJmRlc2MsIDB4MCwgc2l6ZW9m KGRlc2MpKTsKLQloX3RvdGFsID0gRFNJX0hfVE9UQUwobW9kZSk7Ci0Jdl90b3RhbCA9IERTSV9W X1RPVEFMKG1vZGUpOwotCi0JYnBwID0gYml0c19wZXJfcGl4ZWxbaG9zdC0+ZHN0X2Zvcm1hdF07 Ci0KLQlpbnRlcl9udW0gPSBicHAgKiBtb2RlLT5yZWZyZXNoX3JhdGU7Ci0KLQlpZiAoaG9zdC0+ ZGF0YV9sYW5lcyAmIERTSV9EQVRBX0xBTkVfMCkKLQkJbnVtX29mX2xhbmVzKys7Ci0JaWYgKGhv c3QtPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5FXzEpCi0JCW51bV9vZl9sYW5lcysrOwotCWlm IChob3N0LT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFORV8yKQotCQludW1fb2ZfbGFuZXMrKzsK LQlpZiAoaG9zdC0+ZGF0YV9sYW5lcyAmIERTSV9EQVRBX0xBTkVfMykKLQkJbnVtX29mX2xhbmVz Kys7Ci0KLQotCXggPSBtdWx0X2ZyYWModl90b3RhbCAqIGhfdG90YWwsIGludGVyX251bSwgbnVt X29mX2xhbmVzKTsKLQl5ID0gcm91bmRkb3duKHgsIDEpOwotCi0JY2xrX3BhcmFtcy5iaXRjbGtf bWJwcyA9IHJvdW5kZG93bihtdWx0X2ZyYWMoeSwgMSwgMTAwMDAwMCksIDEpOwotCWNsa19wYXJh bXMuZXNjY2xrX251bWVyID0gZXNjX2Nsa19taHo7Ci0JY2xrX3BhcmFtcy5lc2NjbGtfZGVub20g PSBlc2NfY2xrX21tc3NfY2NfcHJlZGl2OwotCWNsa19wYXJhbXMudGxweF9udW1lcl9ucyA9IHRs cHhfbnVtZXI7Ci0JY2xrX3BhcmFtcy50cmVvdF9ucyA9IHRyX2VvdDsKLQotCi0JLyogU2V0dXAg ZGVmYXVsdCBwYXJhbWV0ZXJzICovCi0JZGVzYy5jbGtfcHJlcGFyZS5taXBpX21pbiA9IGNsa19w cmVwYXJlX3NwZWNfbWluOwotCWRlc2MuY2xrX3ByZXBhcmUubWlwaV9tYXggPSBjbGtfcHJlcGFy ZV9zcGVjX21heDsKLQlkZXNjLmNsa190cmFpbC5taXBpX21pbiA9IGNsa190cmFpbF9zcGVjX21p bjsKLQlkZXNjLmhzX2V4aXQubWlwaV9taW4gPSBoc19leGl0X3NwZWNfbWluOwotCWRlc2MuaHNf ZXhpdC5yZWNfbWF4ID0gaHNfZXhpdF9yZWNvX21heDsKLQlkZXNjLmhzX3Jxc3QubWlwaV9taW4g PSBoc19ycXN0X3NwZWNfbWluOwotCWRlc2MuaHNfcnFzdF9jbGsubWlwaV9taW4gPSBoc19ycXN0 X3NwZWNfbWluOwotCi0JaWYgKG9wcy0+Z2V0X2RlZmF1bHRfcGh5X3BhcmFtcykgewotCQlvcHMt PmdldF9kZWZhdWx0X3BoeV9wYXJhbXMoJmNsa19wYXJhbXMpOwotCX0gZWxzZSB7Ci0JCXJjID0g LUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlkZXNjLmNsa19wcmVwYXJlLnJlY19taW4g PSBESVZfUk9VTkRfVVAoCi0JCQkoZGVzYy5jbGtfcHJlcGFyZS5taXBpX21pbiAqIGNsa19wYXJh bXMuYml0Y2xrX21icHMpLAotCQkJKDggKiBjbGtfcGFyYW1zLnRscHhfbnVtZXJfbnMpCi0JCQkp OwotCi0JZGVzYy5jbGtfcHJlcGFyZS5yZWNfbWF4ID0gcm91bmRkb3duKAotCQltdWx0X2ZyYWMo KGRlc2MuY2xrX3ByZXBhcmUubWlwaV9tYXggKiBjbGtfcGFyYW1zLmJpdGNsa19tYnBzKSwKLQkJ CSAgMSwgKDggKiBjbGtfcGFyYW1zLnRscHhfbnVtZXJfbnMpKSwKLQkJMSk7Ci0KLQlwcl9kZWJ1 ZygiQklUIENMT0NLID0gJWQsIHRscHhfbnVtZXJfbnM9JWQsIHRyZW90X25zPSVkXG4iLAotCSAg ICAgICBjbGtfcGFyYW1zLmJpdGNsa19tYnBzLCBjbGtfcGFyYW1zLnRscHhfbnVtZXJfbnMsCi0J ICAgICAgIGNsa19wYXJhbXMudHJlb3RfbnMpOwotCXJjID0gZHNpX3BoeV9jbW5fY2FsY190aW1p bmdfcGFyYW1zKHBoeSwgJmNsa19wYXJhbXMsICZkZXNjKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJUaW1pbmcgY2FsYyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQot Ci0JaWYgKG9wcy0+dXBkYXRlX3RpbWluZ19wYXJhbXMpIHsKLQkJb3BzLT51cGRhdGVfdGltaW5n X3BhcmFtcyh0aW1pbmcsICZkZXNjKTsKLQl9IGVsc2UgewotCQlyYyA9IC1FSU5WQUw7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGh5X3Rp bWluZ19jYWxjX2luaXQoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCWVudW0gZHNpX3BoeV92 ZXJzaW9uIHZlcnNpb24pCi17Ci0Jc3RydWN0IHBoeV90aW1pbmdfb3BzICpvcHMgPSBOVUxMOwot Ci0JaWYgKHZlcnNpb24gPT0gRFNJX1BIWV9WRVJTSU9OX1VOS05PV04gfHwKLQkgICAgdmVyc2lv biA+PSBEU0lfUEhZX1ZFUlNJT05fTUFYIHx8ICFwaHkpIHsKLQkJcHJfZXJyKCJVbnN1cHBvcnRl ZCB2ZXJzaW9uOiAlZFxuIiwgdmVyc2lvbik7Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQotCi0J b3BzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBoeV90aW1pbmdfb3BzKSwgR0ZQX0tFUk5FTCk7 Ci0JaWYgKCFvcHMpCi0JCXJldHVybiAtRUlOVkFMOwotCXBoeS0+b3BzLnRpbWluZ19vcHMgPSBv cHM7Ci0KLQlzd2l0Y2ggKHZlcnNpb24pIHsKLQljYXNlIERTSV9QSFlfVkVSU0lPTl8yXzA6Ci0J CW9wcy0+Z2V0X2RlZmF1bHRfcGh5X3BhcmFtcyA9Ci0JCQlkc2lfcGh5X2h3X3YyXzBfZ2V0X2Rl ZmF1bHRfcGh5X3BhcmFtczsKLQkJb3BzLT5jYWxjX2Nsa196ZXJvID0KLQkJCWRzaV9waHlfaHdf djJfMF9jYWxjX2Nsa196ZXJvOwotCQlvcHMtPmNhbGNfY2xrX3RyYWlsX3JlY19taW4gPQotCQkJ ZHNpX3BoeV9od192Ml8wX2NhbGNfY2xrX3RyYWlsX3JlY19taW47Ci0JCW9wcy0+Y2FsY19jbGtf dHJhaWxfcmVjX21heCA9Ci0JCQlkc2lfcGh5X2h3X3YyXzBfY2FsY19jbGtfdHJhaWxfcmVjX21h eDsKLQkJb3BzLT5jYWxjX2hzX3plcm8gPQotCQkJZHNpX3BoeV9od192Ml8wX2NhbGNfaHNfemVy bzsKLQkJb3BzLT5jYWxjX2hzX3RyYWlsID0KLQkJCWRzaV9waHlfaHdfdjJfMF9jYWxjX2hzX3Ry YWlsOwotCQlvcHMtPnVwZGF0ZV90aW1pbmdfcGFyYW1zID0KLQkJCWRzaV9waHlfaHdfdjJfMF91 cGRhdGVfdGltaW5nX3BhcmFtczsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfUEhZX1ZFUlNJT05fM18w OgotCQlvcHMtPmdldF9kZWZhdWx0X3BoeV9wYXJhbXMgPQotCQkJZHNpX3BoeV9od192M18wX2dl dF9kZWZhdWx0X3BoeV9wYXJhbXM7Ci0JCW9wcy0+Y2FsY19jbGtfemVybyA9Ci0JCQlkc2lfcGh5 X2h3X3YzXzBfY2FsY19jbGtfemVybzsKLQkJb3BzLT5jYWxjX2Nsa190cmFpbF9yZWNfbWluID0K LQkJCWRzaV9waHlfaHdfdjNfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWluOwotCQlvcHMtPmNhbGNf Y2xrX3RyYWlsX3JlY19tYXggPQotCQkJZHNpX3BoeV9od192M18wX2NhbGNfY2xrX3RyYWlsX3Jl Y19tYXg7Ci0JCW9wcy0+Y2FsY19oc196ZXJvID0KLQkJCWRzaV9waHlfaHdfdjNfMF9jYWxjX2hz X3plcm87Ci0JCW9wcy0+Y2FsY19oc190cmFpbCA9Ci0JCQlkc2lfcGh5X2h3X3YzXzBfY2FsY19o c190cmFpbDsKLQkJb3BzLT51cGRhdGVfdGltaW5nX3BhcmFtcyA9Ci0JCQlkc2lfcGh5X2h3X3Yz XzBfdXBkYXRlX3RpbWluZ19wYXJhbXM7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX1BIWV9WRVJTSU9O XzBfMF9IUE06Ci0JY2FzZSBEU0lfUEhZX1ZFUlNJT05fMF8wX0xQTToKLQljYXNlIERTSV9QSFlf VkVSU0lPTl8xXzA6Ci0JZGVmYXVsdDoKLQkJa2ZyZWUob3BzKTsKLQkJcmV0dXJuIC1FTk9UU1VQ UDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ19jYWxjLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX2NhbGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggOTkyMjRmYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9waHlfdGltaW5nX2NhbGMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCww IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQK LSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFNJX1BI WV9USU1JTkdfQ0FMQ19IXwotI2RlZmluZSBfRFNJX1BIWV9USU1JTkdfQ0FMQ19IXwotCi0jaW5j bHVkZSA8bGludXgvbWF0aDY0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVk ZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGlu dXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0bWFwLmg+Ci0jaW5jbHVkZSA8bGludXgv ZXJybm8uaD4KLQotI2luY2x1ZGUgImRzaV9kZWZzLmgiCi0jaW5jbHVkZSAiZHNpX3BoeV9ody5o IgotI2luY2x1ZGUgImRzaV9jYXRhbG9nLmgiCi0KLS8qKgotICogc3RydWN0IHRpbWluZ19lbnRy eSAtIENhbGN1bGF0ZWQgdmFsdWVzIGZvciBlYWNoIHRpbWluZyBwYXJhbWV0ZXIuCi0gKiBAbWlw aV9taW46Ci0gKiBAbWlwaV9tYXg6Ci0gKiBAcmVjX21pbjoKLSAqIEByZWNfbWF4OgotICogQHJl YzoKLSAqIEByZWdfdmFsdWU6ICAgICAgIFZhbHVlIHRvIGJlIHByb2dyYW1tZWQgaW4gcmVnaXN0 ZXIuCi0gKi8KLXN0cnVjdCB0aW1pbmdfZW50cnkgewotCXMzMiBtaXBpX21pbjsKLQlzMzIgbWlw aV9tYXg7Ci0JczMyIHJlY19taW47Ci0JczMyIHJlY19tYXg7Ci0JczMyIHJlYzsKLQl1OCByZWdf dmFsdWU7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBwaHlfdGltaW5nX2Rlc2MgLSBUaW1pbmcgcGFy YW1ldGVycyBmb3IgRFNJIFBIWS4KLSAqLwotc3RydWN0IHBoeV90aW1pbmdfZGVzYyB7Ci0Jc3Ry dWN0IHRpbWluZ19lbnRyeSBjbGtfcHJlcGFyZTsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGNsa196 ZXJvOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgY2xrX3RyYWlsOwotCXN0cnVjdCB0aW1pbmdfZW50 cnkgaHNfcHJlcGFyZTsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGhzX3plcm87Ci0Jc3RydWN0IHRp bWluZ19lbnRyeSBoc190cmFpbDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGhzX3Jxc3Q7Ci0Jc3Ry dWN0IHRpbWluZ19lbnRyeSBoc19ycXN0X2NsazsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGhzX2V4 aXQ7Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSB0YV9nbzsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IHRh X3N1cmU7Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSB0YV9zZXQ7Ci0Jc3RydWN0IHRpbWluZ19lbnRy eSBjbGtfcG9zdDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGNsa19wcmU7Ci19OwotCi0vKioKLSAq IHN0cnVjdCBwaHlfY2xrX3BhcmFtcyAtIENsb2NrIHBhcmFtZXRlcnMgZm9yIFBIWSB0aW1pbmcg Y2FsY3VsYXRpb25zLgotICovCi1zdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgewotCXUzMiBiaXRjbGtf bWJwczsKLQl1MzIgZXNjY2xrX251bWVyOwotCXUzMiBlc2NjbGtfZGVub207Ci0JdTMyIHRscHhf bnVtZXJfbnM7Ci0JdTMyIHRyZW90X25zOwotCXUzMiBjbGtfcHJlcF9idWY7Ci0JdTMyIGNsa196 ZXJvX2J1ZjsKLQl1MzIgY2xrX3RyYWlsX2J1ZjsKLQl1MzIgaHNfcHJlcF9idWY7Ci0JdTMyIGhz X3plcm9fYnVmOwotCXUzMiBoc190cmFpbF9idWY7Ci0JdTMyIGhzX3Jxc3RfYnVmOwotCXUzMiBo c19leGl0X2J1ZjsKLX07Ci0KLS8qKgotICogVmFyaW91cyBPcHMgbmVlZGVkIGZvciBhdXRvLWNh bGN1bGF0aW9uIG9mIERTSSBQSFkgdGltaW5nIHBhcmFtZXRlcnMuCi0gKi8KLXN0cnVjdCBwaHlf dGltaW5nX29wcyB7Ci0Jdm9pZCAoKmdldF9kZWZhdWx0X3BoeV9wYXJhbXMpKHN0cnVjdCBwaHlf Y2xrX3BhcmFtcyAqcGFyYW1zKTsKLQotCWludDMyX3QgKCpjYWxjX2Nsa196ZXJvKShzNjQgcmVj X3RlbXAxLCBzNjQgbXVsdCk7Ci0KLQlpbnQzMl90ICgqY2FsY19jbGtfdHJhaWxfcmVjX21pbiko czY0IHRlbXBfbXVsLAotCQlzNjQgZnJhYywgczY0IG11bHQpOwotCi0JaW50MzJfdCAoKmNhbGNf Y2xrX3RyYWlsX3JlY19tYXgpKHM2NCB0ZW1wMSwgczY0IG11bHQpOwotCi0JaW50MzJfdCAoKmNh bGNfaHNfemVybykoczY0IHRlbXAxLCBzNjQgbXVsdCk7Ci0KLQl2b2lkICgqY2FsY19oc190cmFp bCkoc3RydWN0IHBoeV9jbGtfcGFyYW1zICpjbGtfcGFyYW1zLAotCQkJc3RydWN0IHBoeV90aW1p bmdfZGVzYyAqZGVzYyk7Ci0KLQl2b2lkICgqdXBkYXRlX3RpbWluZ19wYXJhbXMpKHN0cnVjdCBk c2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZywKLQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAq ZGVzYyk7Ci19OwotCi0vKiBEU0kgUEhZIHRpbWluZyBmdW5jdGlvbnMgZm9yIDE0bm0gKi8KLXZv aWQgZHNpX3BoeV9od192Ml8wX2dldF9kZWZhdWx0X3BoeV9wYXJhbXMoc3RydWN0IHBoeV9jbGtf cGFyYW1zICpwYXJhbXMpOwotCi1pbnQzMl90IGRzaV9waHlfaHdfdjJfMF9jYWxjX2Nsa196ZXJv KHM2NCByZWNfdGVtcDEsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBkc2lfcGh5X2h3X3YyXzBfY2Fs Y19jbGtfdHJhaWxfcmVjX21pbihzNjQgdGVtcF9tdWwsCi0JCXM2NCBmcmFjLCBzNjQgbXVsdCk7 Ci0KLWludDMyX3QgZHNpX3BoeV9od192Ml8wX2NhbGNfY2xrX3RyYWlsX3JlY19tYXgoczY0IHRl bXAxLCBzNjQgbXVsdCk7Ci0KLWludDMyX3QgZHNpX3BoeV9od192Ml8wX2NhbGNfaHNfemVybyhz NjQgdGVtcDEsIHM2NCBtdWx0KTsKLQotdm9pZCBkc2lfcGh5X2h3X3YyXzBfY2FsY19oc190cmFp bChzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJhbXMsCi0JCXN0cnVjdCBwaHlfdGltaW5n X2Rlc2MgKmRlc2MpOwotCi12b2lkIGRzaV9waHlfaHdfdjJfMF91cGRhdGVfdGltaW5nX3BhcmFt cyhzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcsCi0JCXN0cnVjdCBwaHlfdGlt aW5nX2Rlc2MgKmRlc2MpOwotCi0vKiBEU0kgUEhZIHRpbWluZyBmdW5jdGlvbnMgZm9yIDEwbm0g Ki8KLXZvaWQgZHNpX3BoeV9od192M18wX2dldF9kZWZhdWx0X3BoeV9wYXJhbXMoc3RydWN0IHBo eV9jbGtfcGFyYW1zICpwYXJhbXMpOwotCi1pbnQzMl90IGRzaV9waHlfaHdfdjNfMF9jYWxjX2Ns a196ZXJvKHM2NCByZWNfdGVtcDEsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBkc2lfcGh5X2h3X3Yz XzBfY2FsY19jbGtfdHJhaWxfcmVjX21pbihzNjQgdGVtcF9tdWwsCi0JCXM2NCBmcmFjLCBzNjQg bXVsdCk7Ci0KLWludDMyX3QgZHNpX3BoeV9od192M18wX2NhbGNfY2xrX3RyYWlsX3JlY19tYXgo czY0IHRlbXAxLCBzNjQgbXVsdCk7Ci0KLWludDMyX3QgZHNpX3BoeV9od192M18wX2NhbGNfaHNf emVybyhzNjQgdGVtcDEsIHM2NCBtdWx0KTsKLQotdm9pZCBkc2lfcGh5X2h3X3YzXzBfY2FsY19o c190cmFpbChzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJhbXMsCi0JCXN0cnVjdCBwaHlf dGltaW5nX2Rlc2MgKmRlc2MpOwotCi12b2lkIGRzaV9waHlfaHdfdjNfMF91cGRhdGVfdGltaW5n X3BhcmFtcyhzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcsCi0JCXN0cnVjdCBw aHlfdGltaW5nX2Rlc2MgKmRlc2MpOwotCi0jZW5kaWYgLyogX0RTSV9QSFlfVElNSU5HX0NBTENf SF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3Bo eV90aW1pbmdfdjJfMC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5 X3RpbWluZ192Ml8wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MTM5ZTMuLjAw MDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWlu Z192Ml8wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo dCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkgImRzaS1waHktdGltaW5n OiIgZm10Ci0jaW5jbHVkZSAiZHNpX3BoeV90aW1pbmdfY2FsYy5oIgotCi12b2lkIGRzaV9waHlf aHdfdjJfMF9nZXRfZGVmYXVsdF9waHlfcGFyYW1zKHN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqcGFy YW1zKQotewotCXBhcmFtcy0+Y2xrX3ByZXBfYnVmID0gNTA7Ci0JcGFyYW1zLT5jbGtfemVyb19i dWYgPSAyOwotCXBhcmFtcy0+Y2xrX3RyYWlsX2J1ZiA9IDMwOwotCXBhcmFtcy0+aHNfcHJlcF9i dWYgPSA1MDsKLQlwYXJhbXMtPmhzX3plcm9fYnVmID0gMTA7Ci0JcGFyYW1zLT5oc190cmFpbF9i dWYgPSAzMDsKLQlwYXJhbXMtPmhzX3Jxc3RfYnVmID0gMDsKLQlwYXJhbXMtPmhzX2V4aXRfYnVm ID0gMTA7Ci19Ci0KLWludDMyX3QgZHNpX3BoeV9od192Ml8wX2NhbGNfY2xrX3plcm8oczY0IHJl Y190ZW1wMSwgczY0IG11bHQpCi17Ci0JczY0IHJlY190ZW1wMiwgcmVjX3RlbXAzOwotCi0JcmVj X3RlbXAyID0gKHJlY190ZW1wMSAtICgxMSAqIG11bHQpKTsKLQlyZWNfdGVtcDMgPSByb3VuZHVw KGRpdl9zNjQocmVjX3RlbXAyLCA4KSwgbXVsdCk7Ci0JcmV0dXJuIChkaXZfczY0KHJlY190ZW1w MywgbXVsdCkgLSAzKTsKLX0KLQotaW50MzJfdCBkc2lfcGh5X2h3X3YyXzBfY2FsY19jbGtfdHJh aWxfcmVjX21pbihzNjQgdGVtcF9tdWwsCi0JCXM2NCBmcmFjLCBzNjQgbXVsdCkKLXsKLQlzNjQg cmVjX3RlbXAxLCByZWNfdGVtcDIsIHJlY190ZW1wMzsKLQotCXJlY190ZW1wMSA9IHRlbXBfbXVs ICsgZnJhYyArICgzICogbXVsdCk7Ci0JcmVjX3RlbXAyID0gZGl2X3M2NChyZWNfdGVtcDEsIDgp OwotCXJlY190ZW1wMyA9IHJvdW5kdXAocmVjX3RlbXAyLCBtdWx0KTsKLQotCXJldHVybiBkaXZf czY0KHJlY190ZW1wMywgbXVsdCk7Ci19Ci0KLWludDMyX3QgZHNpX3BoeV9od192Ml8wX2NhbGNf Y2xrX3RyYWlsX3JlY19tYXgoczY0IHRlbXAxLCBzNjQgbXVsdCkKLXsKLQlzNjQgcmVjX3RlbXAy LCByZWNfdGVtcDM7Ci0KLQlyZWNfdGVtcDIgPSB0ZW1wMSArICgzICogbXVsdCk7Ci0JcmVjX3Rl bXAzID0gcmVjX3RlbXAyIC8gODsKLQlyZXR1cm4gZGl2X3M2NChyZWNfdGVtcDMsIG11bHQpOwot Ci19Ci0KLWludDMyX3QgZHNpX3BoeV9od192Ml8wX2NhbGNfaHNfemVybyhzNjQgdGVtcDEsIHM2 NCBtdWx0KQotewotCXM2NCByZWNfdGVtcDIsIHJlY190ZW1wMywgcmVjX21pbjsKLQotCXJlY190 ZW1wMiA9IHRlbXAxIC0gKDExICogbXVsdCk7Ci0JcmVjX3RlbXAzID0gcm91bmR1cCgocmVjX3Rl bXAyIC8gOCksIG11bHQpOwotCXJlY19taW4gPSByZWNfdGVtcDMgLSAoMyAqIG11bHQpOwotCXJl dHVybiBkaXZfczY0KHJlY19taW4sIG11bHQpOwotfQotCi12b2lkIGRzaV9waHlfaHdfdjJfMF9j YWxjX2hzX3RyYWlsKHN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVj dCBwaHlfdGltaW5nX2Rlc2MgKmRlc2MpCi17Ci0JczY0IHJlY190ZW1wMTsKLQlzdHJ1Y3QgdGlt aW5nX2VudHJ5ICp0ID0gJmRlc2MtPmhzX3RyYWlsOwotCi0JdC0+cmVjX21pbiA9IERJVl9ST1VO RF9VUCgKLQkJKCh0LT5taXBpX21pbiAqIGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKSArCi0JCSAo MyAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKSwKLQkJKDggKiBjbGtfcGFyYW1zLT50bHB4 X251bWVyX25zKSk7Ci0KLQlyZWNfdGVtcDEgPSAoKHQtPm1pcGlfbWF4ICogY2xrX3BhcmFtcy0+ Yml0Y2xrX21icHMpICsKLQkJICAgICAoMyAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKTsK LQl0LT5yZWNfbWF4ID0gKHJlY190ZW1wMSAvICg4ICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9u cykpOwotfQotCi12b2lkIGRzaV9waHlfaHdfdjJfMF91cGRhdGVfdGltaW5nX3BhcmFtcygKLQlz dHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcsCi0Jc3RydWN0IHBoeV90aW1pbmdf ZGVzYyAqZGVzYykKLXsKLQlpbnQgaSA9IDA7Ci0KLQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9MQU5F XzA7IGkgPCBEU0lfTEFORV9NQVg7IGkrKykgewotCQl0aW1pbmctPmxhbmVbaV1bMF0gPSBkZXNj LT5oc19leGl0LnJlZ192YWx1ZTsKLQotCQlpZiAoaSA9PSBEU0lfTE9HSUNBTF9DTE9DS19MQU5F KQotCQkJdGltaW5nLT5sYW5lW2ldWzFdID0gZGVzYy0+Y2xrX3plcm8ucmVnX3ZhbHVlOwotCQll bHNlCi0JCQl0aW1pbmctPmxhbmVbaV1bMV0gPSBkZXNjLT5oc196ZXJvLnJlZ192YWx1ZTsKLQot CQlpZiAoaSA9PSBEU0lfTE9HSUNBTF9DTE9DS19MQU5FKQotCQkJdGltaW5nLT5sYW5lW2ldWzJd ID0gZGVzYy0+Y2xrX3ByZXBhcmUucmVnX3ZhbHVlOwotCQllbHNlCi0JCQl0aW1pbmctPmxhbmVb aV1bMl0gPSBkZXNjLT5oc19wcmVwYXJlLnJlZ192YWx1ZTsKLQotCQlpZiAoaSA9PSBEU0lfTE9H SUNBTF9DTE9DS19MQU5FKQotCQkJdGltaW5nLT5sYW5lW2ldWzNdID0gZGVzYy0+Y2xrX3RyYWls LnJlZ192YWx1ZTsKLQkJZWxzZQotCQkJdGltaW5nLT5sYW5lW2ldWzNdID0gZGVzYy0+aHNfdHJh aWwucmVnX3ZhbHVlOwotCi0JCWlmIChpID09IERTSV9MT0dJQ0FMX0NMT0NLX0xBTkUpCi0JCQl0 aW1pbmctPmxhbmVbaV1bNF0gPSBkZXNjLT5oc19ycXN0X2Nsay5yZWdfdmFsdWU7Ci0JCWVsc2UK LQkJCXRpbWluZy0+bGFuZVtpXVs0XSA9IGRlc2MtPmhzX3Jxc3QucmVnX3ZhbHVlOwotCi0JCXRp bWluZy0+bGFuZVtpXVs1XSA9IDB4MzsKLQkJdGltaW5nLT5sYW5lW2ldWzZdID0gMHg0OwotCQl0 aW1pbmctPmxhbmVbaV1bN10gPSAweEEwOwotCQlwcl9kZWJ1ZygiWyVkXVslZCAlZCAlZCAlZCAl ZF1cbiIsIGksIHRpbWluZy0+bGFuZVtpXVswXSwKLQkJCQkJCSAgICB0aW1pbmctPmxhbmVbaV1b MV0sCi0JCQkJCQkgICAgdGltaW5nLT5sYW5lW2ldWzJdLAotCQkJCQkJICAgIHRpbWluZy0+bGFu ZVtpXVszXSwKLQkJCQkJCSAgICB0aW1pbmctPmxhbmVbaV1bNF0pOwotCX0KLQl0aW1pbmctPmNv dW50X3Blcl9sYW5lID0gODsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ192M18wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rz aS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX3YzXzAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMWQ2YjNjZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFn aW5nL2RzaV9waHlfdGltaW5nX3YzXzAuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBA Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAq IG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10 KSAiZHNpLXBoeS10aW1pbmc6IiBmbXQKLSNpbmNsdWRlICJkc2lfcGh5X3RpbWluZ19jYWxjLmgi Ci0KLXZvaWQgZHNpX3BoeV9od192M18wX2dldF9kZWZhdWx0X3BoeV9wYXJhbXMoCi0JCXN0cnVj dCBwaHlfY2xrX3BhcmFtcyAqcGFyYW1zKQotewotCXBhcmFtcy0+Y2xrX3ByZXBfYnVmID0gMDsK LQlwYXJhbXMtPmNsa196ZXJvX2J1ZiA9IDA7Ci0JcGFyYW1zLT5jbGtfdHJhaWxfYnVmID0gMDsK LQlwYXJhbXMtPmhzX3ByZXBfYnVmID0gMDsKLQlwYXJhbXMtPmhzX3plcm9fYnVmID0gMDsKLQlw YXJhbXMtPmhzX3RyYWlsX2J1ZiA9IDA7Ci0JcGFyYW1zLT5oc19ycXN0X2J1ZiA9IDA7Ci0JcGFy YW1zLT5oc19leGl0X2J1ZiA9IDA7Ci19Ci0KLWludDMyX3QgZHNpX3BoeV9od192M18wX2NhbGNf Y2xrX3plcm8oczY0IHJlY190ZW1wMSwgczY0IG11bHQpCi17Ci0JczY0IHJlY190ZW1wMiwgcmVj X3RlbXAzOwotCi0JcmVjX3RlbXAyID0gKHJlY190ZW1wMSAtIG11bHQpOwotCXJlY190ZW1wMyA9 IHJvdW5kdXAoZGl2X3M2NChyZWNfdGVtcDIsIDgpLCBtdWx0KTsKLQlyZXR1cm4gKGRpdl9zNjQo cmVjX3RlbXAzLCBtdWx0KSAtIDEpOwotfQotCi1pbnQzMl90IGRzaV9waHlfaHdfdjNfMF9jYWxj X2Nsa190cmFpbF9yZWNfbWluKHM2NCB0ZW1wX211bCwKLQkJczY0IGZyYWMsIHM2NCBtdWx0KQot ewotCXM2NCByZWNfdGVtcDEsIHJlY190ZW1wMiwgcmVjX3RlbXAzOwotCi0JcmVjX3RlbXAxID0g dGVtcF9tdWwgKyBmcmFjOwotCXJlY190ZW1wMiA9IGRpdl9zNjQocmVjX3RlbXAxLCA4KTsKLQly ZWNfdGVtcDMgPSByb3VuZHVwKHJlY190ZW1wMiwgbXVsdCk7Ci0JcmV0dXJuIChkaXZfczY0KHJl Y190ZW1wMywgbXVsdCkgLSAxKTsKLX0KLQotaW50MzJfdCBkc2lfcGh5X2h3X3YzXzBfY2FsY19j bGtfdHJhaWxfcmVjX21heChzNjQgdGVtcDEsIHM2NCBtdWx0KQotewotCXM2NCByZWNfdGVtcDI7 Ci0KLQlyZWNfdGVtcDIgPSB0ZW1wMSAvIDg7Ci0JcmV0dXJuIChkaXZfczY0KHJlY190ZW1wMiwg bXVsdCkgLSAxKTsKLX0KLQotaW50MzJfdCBkc2lfcGh5X2h3X3YzXzBfY2FsY19oc196ZXJvKHM2 NCB0ZW1wMSwgczY0IG11bHQpCi17Ci0JczY0IHJlY190ZW1wMiwgcmVjX21pbjsKLQotCXJlY190 ZW1wMiA9IHJvdW5kdXAoKHRlbXAxIC8gOCksIG11bHQpOwotCXJlY19taW4gPSByZWNfdGVtcDIg LSAoMSAqIG11bHQpOwotCXJldHVybiBkaXZfczY0KHJlY19taW4sIG11bHQpOwotfQotCi12b2lk IGRzaV9waHlfaHdfdjNfMF9jYWxjX2hzX3RyYWlsKHN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xr X3BhcmFtcywKLQkJCXN0cnVjdCBwaHlfdGltaW5nX2Rlc2MgKmRlc2MpCi17Ci0JczY0IHJlY190 ZW1wMTsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5ICp0ID0gJmRlc2MtPmhzX3RyYWlsOwotCi0JdC0+ cmVjX21pbiA9IERJVl9ST1VORF9VUCgKLQkJCSh0LT5taXBpX21pbiAqIGNsa19wYXJhbXMtPmJp dGNsa19tYnBzKSwKLQkJCSg4ICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucykpIC0gMTsKLQot CXJlY190ZW1wMSA9ICh0LT5taXBpX21heCAqIGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKTsKLQl0 LT5yZWNfbWF4ID0KLQkJIChkaXZfczY0KHJlY190ZW1wMSwgKDggKiBjbGtfcGFyYW1zLT50bHB4 X251bWVyX25zKSkpIC0gMTsKLX0KLQotdm9pZCBkc2lfcGh5X2h3X3YzXzBfdXBkYXRlX3RpbWlu Z19wYXJhbXMoCi0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqdGltaW5nLAotCXN0cnVj dCBwaHlfdGltaW5nX2Rlc2MgKmRlc2MpCi17Ci0JdGltaW5nLT5sYW5lX3YzWzBdID0gMHgwMDsK LQl0aW1pbmctPmxhbmVfdjNbMV0gPSBkZXNjLT5jbGtfemVyby5yZWdfdmFsdWU7Ci0JdGltaW5n LT5sYW5lX3YzWzJdID0gZGVzYy0+Y2xrX3ByZXBhcmUucmVnX3ZhbHVlOwotCXRpbWluZy0+bGFu ZV92M1szXSA9IGRlc2MtPmNsa190cmFpbC5yZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzRd ID0gZGVzYy0+aHNfZXhpdC5yZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzVdID0gZGVzYy0+ aHNfemVyby5yZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzZdID0gZGVzYy0+aHNfcHJlcGFy ZS5yZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzddID0gZGVzYy0+aHNfdHJhaWwucmVnX3Zh bHVlOwotCXRpbWluZy0+bGFuZV92M1s4XSA9IGRlc2MtPmhzX3Jxc3QucmVnX3ZhbHVlOwotCXRp bWluZy0+bGFuZV92M1s5XSA9IDB4MDM7Ci0JdGltaW5nLT5sYW5lX3YzWzEwXSA9IDB4MDQ7Ci0J dGltaW5nLT5sYW5lX3YzWzExXSA9IDB4MDA7Ci0KLQlwcl9kZWJ1ZygiWyVkICVkICVkICVkXVxu IiwgdGltaW5nLT5sYW5lX3YzWzBdLAotCQl0aW1pbmctPmxhbmVfdjNbMV0sIHRpbWluZy0+bGFu ZV92M1syXSwgdGltaW5nLT5sYW5lX3YzWzNdKTsKLQlwcl9kZWJ1ZygiWyVkICVkICVkICVkXVxu IiwgdGltaW5nLT5sYW5lX3YzWzRdLAotCQl0aW1pbmctPmxhbmVfdjNbNV0sIHRpbWluZy0+bGFu ZV92M1s2XSwgdGltaW5nLT5sYW5lX3YzWzddKTsKLQlwcl9kZWJ1ZygiWyVkICVkICVkICVkXVxu IiwgdGltaW5nLT5sYW5lX3YzWzhdLAotCQl0aW1pbmctPmxhbmVfdjNbOV0sIHRpbWluZy0+bGFu ZV92M1sxMF0sIHRpbWluZy0+bGFuZV92M1sxMV0pOwotCXRpbWluZy0+Y291bnRfcGVyX2xhbmUg PSAxMjsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9k c2lfcHdyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3IuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EyZWIzZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3IuYworKysgL2Rldi9udWxsCkBAIC0xLDM2 NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpbmNs dWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgotCi0jaW5jbHVkZSAiZHNpX3B3ci5oIgotCi0vKgotICogZHNpX3B3cl9wYXJz ZV9zdXBwbHlfbm9kZSgpIC0gcGFyc2UgcG93ZXIgc3VwcGx5IG5vZGUgZnJvbSByb290IGRldmlj ZSBub2RlCi0gKi8KLXN0YXRpYyBpbnQgZHNpX3B3cl9wYXJzZV9zdXBwbHlfbm9kZShzdHJ1Y3Qg ZGV2aWNlX25vZGUgKnJvb3QsCi0JCQkJICAgICBzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpy ZWdzKQotewotCWludCByYyA9IDA7Ci0JaW50IGkgPSAwOwotCXUzMiB0bXAgPSAwOwotCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbm9kZSA9IE5VTEw7Ci0KLQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHJv b3QsIG5vZGUpIHsKLQkJY29uc3QgY2hhciAqc3QgPSBOVUxMOwotCi0JCXJjID0gb2ZfcHJvcGVy dHlfcmVhZF9zdHJpbmcobm9kZSwgInFjb20sc3VwcGx5LW5hbWUiLCAmc3QpOwotCQlpZiAocmMp IHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgbmFtZSwgcmMgPSAlZFxuIiwgcmMpOwotCQkJ Z290byBlcnJvcjsKLQkJfQotCi0JCXNucHJpbnRmKHJlZ3MtPnZyZWdzW2ldLnZyZWdfbmFtZSwK LQkJCSBBUlJBWV9TSVpFKHJlZ3MtPnZyZWdzW2ldLnZyZWdfbmFtZSksCi0JCQkgIiVzIiwgc3Qp OwotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFjb20sc3VwcGx5LW1pbi12 b2x0YWdlIiwKLQkJCQkJICAmdG1wKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0 byByZWFkIG1pbiB2b2x0YWdlLCByYyA9ICVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9 Ci0JCXJlZ3MtPnZyZWdzW2ldLm1pbl92b2x0YWdlID0gdG1wOwotCi0JCXJjID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIobm9kZSwgInFjb20sc3VwcGx5LW1heC12b2x0YWdlIiwKLQkJCQkJICAmdG1w KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIG1heCB2b2x0YWdlLCBy YyA9ICVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCXJlZ3MtPnZyZWdzW2ldLm1h eF92b2x0YWdlID0gdG1wOwotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFj b20sc3VwcGx5LWVuYWJsZS1sb2FkIiwKLQkJCQkJICAmdG1wKTsKLQkJaWYgKHJjKSB7Ci0JCQlw cl9lcnIoImZhaWxlZCB0byByZWFkIGVuYWJsZSBsb2FkLCByYyA9ICVkXG4iLCByYyk7Ci0JCQln b3RvIGVycm9yOwotCQl9Ci0JCXJlZ3MtPnZyZWdzW2ldLmVuYWJsZV9sb2FkID0gdG1wOwotCi0J CXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFjb20sc3VwcGx5LWRpc2FibGUtbG9h ZCIsCi0JCQkJCSAgJnRtcCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVh ZCBkaXNhYmxlIGxvYWQsIHJjID0gJWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJ cmVncy0+dnJlZ3NbaV0uZGlzYWJsZV9sb2FkID0gdG1wOwotCi0JCS8qIE9wdGlvbmFsIHZhbHVl cyAqLwotCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJxY29tLHN1cHBseS1wcmUt b24tc2xlZXAiLAotCQkJCQkgICZ0bXApOwotCQlpZiAocmMpIHsKLQkJCXByX2RlYnVnKCJwcmUt b24tc2xlZXAgbm90IHNwZWNpZmllZFxuIik7Ci0JCQlyYyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQly ZWdzLT52cmVnc1tpXS5wcmVfb25fc2xlZXAgPSB0bXA7Ci0JCX0KLQotCQlyYyA9IG9mX3Byb3Bl cnR5X3JlYWRfdTMyKG5vZGUsICJxY29tLHN1cHBseS1wcmUtb2ZmLXNsZWVwIiwKLQkJCQkJICAm dG1wKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9kZWJ1ZygicHJlLW9mZi1zbGVlcCBub3Qgc3BlY2lm aWVkXG4iKTsKLQkJCXJjID0gMDsKLQkJfSBlbHNlIHsKLQkJCXJlZ3MtPnZyZWdzW2ldLnByZV9v ZmZfc2xlZXAgPSB0bXA7Ci0JCX0KLQotCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUs ICJxY29tLHN1cHBseS1wb3N0LW9uLXNsZWVwIiwKLQkJCQkJICAmdG1wKTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9kZWJ1ZygicG9zdC1vbi1zbGVlcCBub3Qgc3BlY2lmaWVkXG4iKTsKLQkJCXJjID0g MDsKLQkJfSBlbHNlIHsKLQkJCXJlZ3MtPnZyZWdzW2ldLnBvc3Rfb25fc2xlZXAgPSB0bXA7Ci0J CX0KLQotCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJxY29tLHN1cHBseS1wb3N0 LW9mZi1zbGVlcCIsCi0JCQkJCSAgJnRtcCk7Ci0JCWlmIChyYykgewotCQkJcHJfZGVidWcoInBv c3Qtb2ZmLXNsZWVwIG5vdCBzcGVjaWZpZWRcbiIpOwotCQkJcmMgPSAwOwotCQl9IGVsc2Ugewot CQkJcmVncy0+dnJlZ3NbaV0ucG9zdF9vZmZfc2xlZXAgPSB0bXA7Ci0JCX0KLQotCQkrK2k7Ci0J CXByX2RlYnVnKCJbJXNdIG1pbnY9JWQgbWF4dj0lZCwgZW5fbG9hZD0lZCwgZGlzX2xvYWQ9JWRc biIsCi0JCQkgcmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lLAotCQkJIHJlZ3MtPnZyZWdzW2ldLm1p bl92b2x0YWdlLAotCQkJIHJlZ3MtPnZyZWdzW2ldLm1heF92b2x0YWdlLAotCQkJIHJlZ3MtPnZy ZWdzW2ldLmVuYWJsZV9sb2FkLAotCQkJIHJlZ3MtPnZyZWdzW2ldLmRpc2FibGVfbG9hZCk7Ci0J fQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX3B3cl9lbmFibGVfdnJl Z3MoKSAtIGVuYWJsZS9kaXNhYmxlIHJlZ3VsYXRvcnMKLSAqLwotc3RhdGljIGludCBkc2lfcHdy X2VuYWJsZV92cmVncyhzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzLCBib29sIGVuYWJs ZSkKLXsKLQlpbnQgcmMgPSAwLCBpID0gMDsKLQlzdHJ1Y3QgZHNpX3ZyZWcgKnZyZWc7Ci0JaW50 IG51bV9vZl92ID0gMDsKLQotCWlmIChlbmFibGUpIHsKLQkJZm9yIChpID0gMDsgaSA8IHJlZ3Mt PmNvdW50OyBpKyspIHsKLQkJCXZyZWcgPSAmcmVncy0+dnJlZ3NbaV07Ci0JCQlpZiAodnJlZy0+ cHJlX29uX3NsZWVwKQotCQkJCW1zbGVlcCh2cmVnLT5wcmVfb25fc2xlZXApOwotCi0JCQlyYyA9 IHJlZ3VsYXRvcl9zZXRfbG9hZCh2cmVnLT52cmVnLAotCQkJCQkJdnJlZy0+ZW5hYmxlX2xvYWQp OwotCQkJaWYgKHJjIDwgMCkgewotCQkJCXByX2VycigiU2V0dGluZyBvcHRpbXVtIG1vZGUgZmFp bGVkIGZvciAlc1xuIiwKLQkJCQkgICAgICAgdnJlZy0+dnJlZ19uYW1lKTsKLQkJCQlnb3RvIGVy cm9yOwotCQkJfQotCQkJbnVtX29mX3YgPSByZWd1bGF0b3JfY291bnRfdm9sdGFnZXModnJlZy0+ dnJlZyk7Ci0JCQlpZiAobnVtX29mX3YgPiAwKSB7Ci0JCQkJcmMgPSByZWd1bGF0b3Jfc2V0X3Zv bHRhZ2UodnJlZy0+dnJlZywKLQkJCQkJCQkgICB2cmVnLT5taW5fdm9sdGFnZSwKLQkJCQkJCQkg ICB2cmVnLT5tYXhfdm9sdGFnZSk7Ci0JCQkJaWYgKHJjKSB7Ci0JCQkJCXByX2VycigiU2V0IHZv bHRhZ2UoJXMpIGZhaWwsIHJjPSVkXG4iLAotCQkJCQkJIHZyZWctPnZyZWdfbmFtZSwgcmMpOwot CQkJCQlnb3RvIGVycm9yX2Rpc2FibGVfb3B0X21vZGU7Ci0JCQkJfQotCQkJfQotCi0JCQlyYyA9 IHJlZ3VsYXRvcl9lbmFibGUodnJlZy0+dnJlZyk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIo ImVuYWJsZSBmYWlsZWQgZm9yICVzLCByYz0lZFxuIiwKLQkJCQkgICAgICAgdnJlZy0+dnJlZ19u YW1lLCByYyk7Ci0JCQkJZ290byBlcnJvcl9kaXNhYmxlX3ZvbHRhZ2U7Ci0JCQl9Ci0KLQkJCWlm ICh2cmVnLT5wb3N0X29uX3NsZWVwKQotCQkJCW1zbGVlcCh2cmVnLT5wb3N0X29uX3NsZWVwKTsK LQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IChyZWdzLT5jb3VudCAtIDEpOyBpID49IDA7IGkt LSkgewotCQkJaWYgKHJlZ3MtPnZyZWdzW2ldLnByZV9vZmZfc2xlZXApCi0JCQkJbXNsZWVwKHJl Z3MtPnZyZWdzW2ldLnByZV9vZmZfc2xlZXApOwotCi0JCQkodm9pZClyZWd1bGF0b3Jfc2V0X2xv YWQocmVncy0+dnJlZ3NbaV0udnJlZywKLQkJCQkJCXJlZ3MtPnZyZWdzW2ldLmRpc2FibGVfbG9h ZCk7Ci0JCQkodm9pZClyZWd1bGF0b3JfZGlzYWJsZShyZWdzLT52cmVnc1tpXS52cmVnKTsKLQot CQkJaWYgKHJlZ3MtPnZyZWdzW2ldLnBvc3Rfb2ZmX3NsZWVwKQotCQkJCW1zbGVlcChyZWdzLT52 cmVnc1tpXS5wb3N0X29mZl9zbGVlcCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLWVycm9yX2Rp c2FibGVfb3B0X21vZGU6Ci0JKHZvaWQpcmVndWxhdG9yX3NldF9sb2FkKHJlZ3MtPnZyZWdzW2ld LnZyZWcsCi0JCQkJIHJlZ3MtPnZyZWdzW2ldLmRpc2FibGVfbG9hZCk7Ci0KLWVycm9yX2Rpc2Fi bGVfdm9sdGFnZToKLQlpZiAobnVtX29mX3YgPiAwKQotCQkodm9pZClyZWd1bGF0b3Jfc2V0X3Zv bHRhZ2UocmVncy0+dnJlZ3NbaV0udnJlZywKLQkJCQkJICAgIDAsIHJlZ3MtPnZyZWdzW2ldLm1h eF92b2x0YWdlKTsKLWVycm9yOgotCWZvciAoaS0tOyBpID49IDA7IGktLSkgewotCQlpZiAocmVn cy0+dnJlZ3NbaV0ucHJlX29mZl9zbGVlcCkKLQkJCW1zbGVlcChyZWdzLT52cmVnc1tpXS5wcmVf b2ZmX3NsZWVwKTsKLQotCQkodm9pZClyZWd1bGF0b3Jfc2V0X2xvYWQocmVncy0+dnJlZ3NbaV0u dnJlZywKLQkJCQkJIHJlZ3MtPnZyZWdzW2ldLmRpc2FibGVfbG9hZCk7Ci0KLQkJbnVtX29mX3Yg PSByZWd1bGF0b3JfY291bnRfdm9sdGFnZXMocmVncy0+dnJlZ3NbaV0udnJlZyk7Ci0JCWlmIChu dW1fb2ZfdiA+IDApCi0JCQkodm9pZClyZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UocmVncy0+dnJlZ3Nb aV0udnJlZywKLQkJCQkJICAgIDAsIHJlZ3MtPnZyZWdzW2ldLm1heF92b2x0YWdlKTsKLQotCQko dm9pZClyZWd1bGF0b3JfZGlzYWJsZShyZWdzLT52cmVnc1tpXS52cmVnKTsKLQotCQlpZiAocmVn cy0+dnJlZ3NbaV0ucG9zdF9vZmZfc2xlZXApCi0JCQltc2xlZXAocmVncy0+dnJlZ3NbaV0ucG9z dF9vZmZfc2xlZXApOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfcHdyX29m X2dldF92cmVnX2RhdGEgLSBQYXJzZSByZWd1bGF0b3Igc3VwcGx5IGluZm9ybWF0aW9uCi0gKiBA b2Zfbm9kZTogICAgICAgIERldmljZSBvZiBub2RlIHRvIHBhcnNlIGZvciBzdXBwbHkgaW5mb3Jt YXRpb24uCi0gKiBAcmVnczogICAgICAgICAgIFBvaW50ZXIgd2hlcmUgcmVndWxhdG9yIGluZm9y bWF0aW9uIHdpbGwgYmUgY29waWVkIHRvLgotICogQHN1cHBseV9uYW1lOiAgICBOYW1lIG9mIHRo ZSBzdXBwbHkgbm9kZS4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWls dXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfcHdyX29mX2dldF92cmVnX2RhdGEo c3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJCSBzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9p bmZvICpyZWdzLAotCQkJCSBjaGFyICpzdXBwbHlfbmFtZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqc3VwcGx5X3Jvb3Rfbm9kZSA9IE5VTEw7Ci0KLQlpZiAoIW9mX25v ZGUgfHwgIXJlZ3MpIHsKLQkJcHJfZXJyKCJCYWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JcmVncy0+Y291bnQgPSAwOwotCXN1cHBseV9yb290X25vZGUgPSBvZl9nZXRf Y2hpbGRfYnlfbmFtZShvZl9ub2RlLCBzdXBwbHlfbmFtZSk7Ci0JaWYgKCFzdXBwbHlfcm9vdF9u b2RlKSB7Ci0JCXN1cHBseV9yb290X25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG9mX25vZGUsIHN1 cHBseV9uYW1lLCAwKTsKLQkJaWYgKCFzdXBwbHlfcm9vdF9ub2RlKSB7Ci0JCQlwcl9kZWJ1Zygi Tm8gc3VwcGx5IGVudHJ5IHByZXNlbnQgZm9yICVzXG4iLAotCQkJCQlzdXBwbHlfbmFtZSk7Ci0J CQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCXJlZ3MtPmNvdW50ID0gb2ZfZ2V0X2F2YWls YWJsZV9jaGlsZF9jb3VudChzdXBwbHlfcm9vdF9ub2RlKTsKLQlpZiAocmVncy0+Y291bnQgPT0g MCkgewotCQlwcl9lcnIoIk5vIHZyZWdzIGRlZmluZWQgZm9yICVzXG4iLCBzdXBwbHlfbmFtZSk7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJlZ3MtPnZyZWdzID0ga2NhbGxvYyhyZWdzLT5j b3VudCwgc2l6ZW9mKCpyZWdzLT52cmVncyksIEdGUF9LRVJORUwpOwotCWlmICghcmVncy0+dnJl Z3MpIHsKLQkJcmVncy0+Y291bnQgPSAwOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyYyA9 IGRzaV9wd3JfcGFyc2Vfc3VwcGx5X25vZGUoc3VwcGx5X3Jvb3Rfbm9kZSwgcmVncyk7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHN1cHBseSBub2RlIGZvciAlcywgcmMg PSAlZFxuIiwKLQkJCXN1cHBseV9uYW1lLCByYyk7Ci0KLQkJa2ZyZWUocmVncy0+dnJlZ3MpOwot CQlyZWdzLT52cmVncyA9IE5VTEw7Ci0JCXJlZ3MtPmNvdW50ID0gMDsKLQl9Ci0KLQlyZXR1cm4g cmM7Ci19Ci0KLS8qKgotICogZHNpX3B3cl9nZXRfZHRfdnJlZ19kYXRhIC0gcGFyc2UgcmVndWxh dG9yIHN1cHBseSBpbmZvcm1hdGlvbgotICogQGRldjogICAgICAgICAgICBEZXZpY2Ugd2hvc2Ug b2Zfbm9kZSBuZWVkcyB0byBiZSBwYXJzZWQuCi0gKiBAcmVnczogICAgICAgICAgIFBvaW50ZXIg d2hlcmUgcmVndWxhdG9yIGluZm9ybWF0aW9uIHdpbGwgYmUgY29waWVkIHRvLgotICogQHN1cHBs eV9uYW1lOiAgICBOYW1lIG9mIHRoZSBzdXBwbHkgbm9kZS4KLSAqCi0gKiByZXR1cm46IGVycm9y IGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lf cHdyX2dldF9kdF92cmVnX2RhdGEoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZHNp X3JlZ3VsYXRvcl9pbmZvICpyZWdzLAotCQkJCSBjaGFyICpzdXBwbHlfbmFtZSkKLXsKLQlpbnQg cmMgPSAwOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IGRl dmljZV9ub2RlICpzdXBwbHlfbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpzdXBw bHlfcm9vdF9ub2RlID0gTlVMTDsKLQotCWlmICghZGV2IHx8ICFyZWdzKSB7Ci0JCXByX2Vycigi QmFkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW9mX25vZGUgPSBkZXYt Pm9mX25vZGU7Ci0JcmVncy0+Y291bnQgPSAwOwotCXN1cHBseV9yb290X25vZGUgPSBvZl9nZXRf Y2hpbGRfYnlfbmFtZShvZl9ub2RlLCBzdXBwbHlfbmFtZSk7Ci0JaWYgKCFzdXBwbHlfcm9vdF9u b2RlKSB7Ci0JCXN1cHBseV9yb290X25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG9mX25vZGUsIHN1 cHBseV9uYW1lLCAwKTsKLQkJaWYgKCFzdXBwbHlfcm9vdF9ub2RlKSB7Ci0JCQlwcl9kZWJ1Zygi Tm8gc3VwcGx5IGVudHJ5IHByZXNlbnQgZm9yICVzXG4iLAotCQkJCQlzdXBwbHlfbmFtZSk7Ci0J CQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoc3Vw cGx5X3Jvb3Rfbm9kZSwgc3VwcGx5X25vZGUpCi0JCXJlZ3MtPmNvdW50Kys7Ci0KLQlpZiAocmVn cy0+Y291bnQgPT0gMCkgewotCQlwcl9lcnIoIk5vIHZyZWdzIGRlZmluZWQgZm9yICVzXG4iLCBz dXBwbHlfbmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJlZ3MtPnZyZWdzID0gZGV2 bV9rY2FsbG9jKGRldiwgcmVncy0+Y291bnQsIHNpemVvZigqcmVncy0+dnJlZ3MpLAotCQkJCSAg IEdGUF9LRVJORUwpOwotCWlmICghcmVncy0+dnJlZ3MpIHsKLQkJcmVncy0+Y291bnQgPSAwOwot CQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyYyA9IGRzaV9wd3JfcGFyc2Vfc3VwcGx5X25vZGUo c3VwcGx5X3Jvb3Rfbm9kZSwgcmVncyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRv IHBhcnNlIHN1cHBseSBub2RlIGZvciAlcywgcmMgPSAlZFxuIiwKLQkJICAgICAgIHN1cHBseV9u YW1lLCByYyk7Ci0JCWRldm1fa2ZyZWUoZGV2LCByZWdzLT52cmVncyk7Ci0JCXJlZ3MtPnZyZWdz ID0gTlVMTDsKLQkJcmVncy0+Y291bnQgPSAwOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoq Ci0gKiBkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoKSAtIGVuYWJsZSBhIHNldCBvZiByZWd1bGF0 b3JzCi0gKiBAcmVnczogICAgICAgUG9pbnRlciB0byBzZXQgb2YgcmVndWxhdG9ycyB0byBlbmFi bGUgb3IgZGlzYWJsZS4KLSAqIEBlbmFibGU6ICAgICBFbmFibGUvRGlzYWJsZSByZWd1bGF0b3Jz LgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUgb3IgMCBmb3Ig c3VjY2Vzcy4KLSAqLwotaW50IGRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRvcihzdHJ1Y3QgZHNpX3Jl Z3VsYXRvcl9pbmZvICpyZWdzLCBib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYg KGVuYWJsZSkgewotCQlpZiAocmVncy0+cmVmY291bnQgPT0gMCkgewotCQkJcmMgPSBkc2lfcHdy X2VuYWJsZV92cmVncyhyZWdzLCB0cnVlKTsKLQkJCWlmIChyYykKLQkJCQlwcl9lcnIoImZhaWxl ZCB0byBlbmFibGUgcmVndWxhdG9yc1xuIik7Ci0JCX0KLQkJcmVncy0+cmVmY291bnQrKzsKLQl9 IGVsc2UgewotCQlpZiAocmVncy0+cmVmY291bnQgPT0gMCkgewotCQkJcHJfZXJyKCJVbmJhbGFu Y2VkIHJlZ3VsYXRvciBvZmZcbiIpOwotCQl9IGVsc2UgewotCQkJcmVncy0+cmVmY291bnQtLTsK LQkJCWlmIChyZWdzLT5yZWZjb3VudCA9PSAwKSB7Ci0JCQkJcmMgPSBkc2lfcHdyX2VuYWJsZV92 cmVncyhyZWdzLCBmYWxzZSk7Ci0JCQkJaWYgKHJjKQotCQkJCQlwcl9lcnIoImZhaWxlZCB0byBk aXNhYmxlIHZyZWdzXG4iKTsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiByYzsKLX0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3B3ci5oIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcHdyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDBlZTVjNjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kt c3RhZ2luZy9kc2lfcHdyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICog Q29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RTSV9QV1JfSF8KLSNk ZWZpbmUgX0RTSV9QV1JfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUg PGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5j bHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Ci0KLS8qKgotICogc3RydWN0IGRzaV92 cmVnIC0gcmVndWxhdG9yIGluZm9ybWF0aW9uIGZvciBEU0kgcmVndWxhdG9ycwotICogQHZyZWc6 ICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSByZWd1bGF0b3IuCi0gKiBAdnJlZ19uYW1lOiAgICAg ICBSZWd1bGF0b3IgbmFtZS4KLSAqIEBtaW5fdm9sdGFnZTogICAgIE1pbmltdW0gdm9sdGFnZSBp biB1Vi4KLSAqIEBtYXhfdm9sdGFnZTogICAgIE1heGltdW0gdm9sdGFnZSBpbiB1Vi4KLSAqIEBl bmFibGVfbG9hZDogICAgIExvYWQsIGluIHVBLCB3aGVuIGVuYWJsZWQuCi0gKiBAZGlzYWJsZV9s b2FkOiAgICBMb2FkLCBpbiB1QSwgd2hlbiBkaXNhYmxlZC4KLSAqIEBwcmVfb25fc2xlZXA6ICAg IFNsZWVwLCBpbiBtcywgYmVmb3JlIGVuYWJsaW5nIHRoZSByZWd1bGF0b3IuCi0gKiBAcG9zdF9v bl9zbGVlcDogICBTbGVlcCwgaW4gbXMsIGFmdGVyIGVuYWJsaW5nIHRoZSByZWd1bGF0b3IuCi0g KiBAcHJlX29mZl9zbGVlcDogICBTbGVlcCwgaW4gbXMsIGJlZm9yZSBkaXNhYmxpbmcgdGhlIHJl Z3VsYXRvci4KLSAqIEBwb3N0X29mZl9zbGVlcDogIFNsZWVwLCBpbiBtcywgYWZ0ZXIgZGlzYWJs aW5nIHRoZSByZWd1bGF0b3IuCi0gKi8KLXN0cnVjdCBkc2lfdnJlZyB7Ci0Jc3RydWN0IHJlZ3Vs YXRvciAqdnJlZzsKLQljaGFyIHZyZWdfbmFtZVszMl07Ci0JdTMyIG1pbl92b2x0YWdlOwotCXUz MiBtYXhfdm9sdGFnZTsKLQl1MzIgZW5hYmxlX2xvYWQ7Ci0JdTMyIGRpc2FibGVfbG9hZDsKLQl1 MzIgcHJlX29uX3NsZWVwOwotCXUzMiBwb3N0X29uX3NsZWVwOwotCXUzMiBwcmVfb2ZmX3NsZWVw OwotCXUzMiBwb3N0X29mZl9zbGVlcDsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9yZWd1bGF0 b3JfaW5mbyAtIHNldCBvZiB2cmVncyB0aGF0IGFyZSB0dXJuZWQgb24vb2ZmIHRvZ2V0aGVyLgot ICogQHZyZWdzOiAgICAgICBBcnJheSBvZiBkc2lfdnJlZyBzdHJ1Y3R1cmVzLgotICogQGNvdW50 OiAgICAgICBOdW1iZXIgb2YgdnJlZ3MuCi0gKiBAcmVmY291bnQ6ICAgIFJlZmVyZW5jZSBjb3Vu dGluZyBmb3IgZW5hYmxpbmcuCi0gKi8KLXN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gewotCXN0 cnVjdCBkc2lfdnJlZyAqdnJlZ3M7Ci0JdTMyIGNvdW50OwotCXUzMiByZWZjb3VudDsKLX07Ci0K LS8qKgotICogZHNpX3B3cl9vZl9nZXRfdnJlZ19kYXRhIC0gcGFyc2UgcmVndWxhdG9yIHN1cHBs eSBpbmZvcm1hdGlvbgotICogQG9mX25vZGU6ICAgICAgICBEZXZpY2Ugb2Ygbm9kZSB0byBwYXJz ZSBmb3Igc3VwcGx5IGluZm9ybWF0aW9uLgotICogQHJlZ3M6ICAgICAgICAgICBQb2ludGVyIHdo ZXJlIHJlZ3VsYXRvciBpbmZvcm1hdGlvbiB3aWxsIGJlIGNvcGllZCB0by4KLSAqIEBzdXBwbHlf bmFtZTogICAgTmFtZSBvZiB0aGUgc3VwcGx5IG5vZGUuCi0gKgotICogcmV0dXJuOiBlcnJvciBj b2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX3B3 cl9vZl9nZXRfdnJlZ19kYXRhKHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQkgc3Ry dWN0IGRzaV9yZWd1bGF0b3JfaW5mbyAqcmVncywKLQkJCQkgY2hhciAqc3VwcGx5X25hbWUpOwot Ci0vKioKLSAqIGRzaV9wd3JfZ2V0X2R0X3ZyZWdfZGF0YSAtIHBhcnNlIHJlZ3VsYXRvciBzdXBw bHkgaW5mb3JtYXRpb24KLSAqIEBkZXY6ICAgICAgICAgICAgRGV2aWNlIHdob3NlIG9mX25vZGUg bmVlZHMgdG8gYmUgcGFyc2VkLgotICogQHJlZ3M6ICAgICAgICAgICBQb2ludGVyIHdoZXJlIHJl Z3VsYXRvciBpbmZvcm1hdGlvbiB3aWxsIGJlIGNvcGllZCB0by4KLSAqIEBzdXBwbHlfbmFtZTog ICAgTmFtZSBvZiB0aGUgc3VwcGx5IG5vZGUuCi0gKgotICogcmV0dXJuOiBlcnJvciBjb2RlIGlu IGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX3B3cl9nZXRf ZHRfdnJlZ19kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGRzaV9yZWd1bGF0 b3JfaW5mbyAqcmVncywKLQkJCQkgY2hhciAqc3VwcGx5X25hbWUpOwotCi0vKioKLSAqIGRzaV9w d3JfZW5hYmxlX3JlZ3VsYXRvcigpIC0gZW5hYmxlIGEgc2V0IG9mIHJlZ3VsYXRvcnMKLSAqIEBy ZWdzOiAgICAgICBQb2ludGVyIHRvIHNldCBvZiByZWd1bGF0b3JzIHRvIGVuYWJsZSBvciBkaXNh YmxlLgotICogQGVuYWJsZTogICAgIEVuYWJsZS9EaXNhYmxlIHJlZ3VsYXRvcnMuCi0gKgotICog cmV0dXJuOiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNjZXNzLgot ICovCi1pbnQgZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKHN0cnVjdCBkc2lfcmVndWxhdG9yX2lu Zm8gKnJlZ3MsIGJvb2wgZW5hYmxlKTsKLSNlbmRpZiAvKiBfRFNJX1BXUl9IXyAqLwotLSAKVGhl IFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2Rl IEF1cm9yYSBGb3J1bSwKYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5v IG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==