From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Jnmlx-0003Wj-AF for qemu-devel@nongnu.org; Sun, 20 Apr 2008 23:32:53 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Jnmlw-0003Um-9q for qemu-devel@nongnu.org; Sun, 20 Apr 2008 23:32:52 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Jnmlw-0003Uj-6p for qemu-devel@nongnu.org; Sun, 20 Apr 2008 23:32:52 -0400 Received: from hs-out-0708.google.com ([64.233.178.243]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Jnmlu-0005EO-Mb for qemu-devel@nongnu.org; Sun, 20 Apr 2008 23:32:51 -0400 Received: by hs-out-0708.google.com with SMTP id k27so765351hsc.2 for ; Sun, 20 Apr 2008 20:32:48 -0700 (PDT) Message-ID: <9cde8bff0804202032k6bd44ac6td913c05410e6284@mail.gmail.com> Date: Mon, 21 Apr 2008 12:32:48 +0900 From: "Nguyen Anh Quynh" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_798_26039151.1208748768717" Subject: [Qemu-devel] [RFC] linuxboot Option ROM for Linux kernel booting Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: kvm-devel@lists.sourceforge.net, qemu-devel@nongnu.org Cc: Anthony Liguori , "H. Peter Anvin" ------=_Part_798_26039151.1208748768717 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, This should be submitted to upstream (but not to kvm-devel list), but this is only the test code that I want to quickly send out for comments. In case it looks OK, I will send it to upstream later. Inspired by extboot and conversations with Anthony and HPA, this linuxboot option ROM is a simple option ROM that intercepts int19 in order to execute linux setup code. This approach eliminates the need to manipulate the boot sector for this purpose. To test it, just load linux kernel with your KVM/QEMU image using -kernel option in normal way. I succesfully compiled and tested it with kvm-66 on Ubuntu 7.10, guest Ubuntu 8.04. Thanks, Quynh # diffstat linuxboot1.diff Makefile | 13 ++++- linuxboot/Makefile | 40 +++++++++++++++ linuxboot/boot.S | 54 +++++++++++++++++++++ linuxboot/farvar.h | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++ linuxboot/rom.c | 104 ++++++++++++++++++++++++++++++++++++++++ linuxboot/signrom |binary linuxboot/signrom.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++ linuxboot/util.h | 69 +++++++++++++++++++++++++++ qemu/Makefile | 3 - qemu/Makefile.target | 2 qemu/hw/linuxboot.c | 39 +++++++++++++++ qemu/hw/pc.c | 22 +++++++- qemu/hw/pc.h | 5 + 13 files changed, 600 insertions(+), 9 deletions(-) ------=_Part_798_26039151.1208748768717 Content-Type: text/x-diff; name=linuxboot1.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_ffahpthn0 Content-Disposition: attachment; filename=linuxboot1.diff Y29tbWl0IGY0ZjExNzg4OThjOGE0YmJiYzBhNDMyMzU0ZGJjYzU2MzUzMDk5YzMKQXV0aG9yOiBO Z3V5ZW4gQW5oIFF1eW5oIDxhcXV5bmhAZ21haWwuY29tPgpEYXRlOiAgIE1vbiBBcHIgMjEgMTI6 Mjc6NDcgMjAwOCArMDkwMAoKICAgIExpbnV4Ym9vdCBPcHRpb24gUk9NIHN1cHBvcnQuCiAgICAK ICAgIFNpZ25lZC1vZmYtYnk6IE5ndXllbiBBbmggUXV5bmggPGFxdXluaEBnbWFpbC5jb20+Cgpk aWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA3NmMxNDlhLi5mZGQ5Mzg4IDEw MDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAgREVTVERJ Uj0KIAogcnBtcmVsZWFzZSA9IGRldmVsCiAKLS5QSE9OWToga2VybmVsIHVzZXIgbGlia3ZtIHFl bXUgYmlvcyB2Z2FiaW9zIGV4dGJvb3QgY2xlYW4gbGliZmR0CisuUEhPTlk6IGtlcm5lbCB1c2Vy IGxpYmt2bSBxZW11IGJpb3MgdmdhYmlvcyBleHRib290IGxpbnV4Ym9vdCBjbGVhbiBsaWJmZHQK IAogYWxsOiBsaWJrdm0gcWVtdQogaWZuZXEgJyQoZmlsdGVyICQoQVJDSCksIHg4Nl82NCBpMzg2 IGlhNjQpJyAnJwpAQCAtMTksNyArMTksNyBAQCBxZW11IGtlcm5lbCB1c2VyIGxpYmt2bToKIAog cWVtdTogbGlia3ZtCiBpZm5lcSAnJChmaWx0ZXIgJChBUkNIKSwgaTM4NiB4ODZfNjQpJyAnJwot ICAgIHFlbXU6IGV4dGJvb3QKKyAgICBxZW11OiBleHRib290IGxpbnV4Ym9vdAogZW5kaWYKIGlm bmVxICckKGZpbHRlciAkKEFSQ0gpLCBwb3dlcnBjKScgJycKICAgICBxZW11OiBsaWJmZHQKQEAg LTQxLDYgKzQxLDE0IEBAIGV4dGJvb3Q6CiAgICAgICAgICAgIHx8ICEgY21wIC1zIHFlbXUvcGMt Ymlvcy9leHRib290LmJpbiBleHRib290L2V4dGJvb3QuYmluOyB0aGVuIFwKIAkJY3AgZXh0Ym9v dC9leHRib290LmJpbiBxZW11L3BjLWJpb3MvZXh0Ym9vdC5iaW47IFwKIAlmaQorCitsaW51eGJv b3Q6CisJJChNQUtFKSAtQyAkQAorCWlmICEgWyAtZiBxZW11L3BjLWJpb3MvbGludXhib290LmJp biBdIFwKKyAgICAgICAgICAgfHwgISBjbXAgLXMgcWVtdS9wYy1iaW9zL2xpbnV4Ym9vdC5iaW4g bGludXhib290L2xpbnV4Ym9vdC5iaW47IHRoZW4gXAorCQljcCBsaW51eGJvb3QvbGludXhib290 LmJpbiBxZW11L3BjLWJpb3MvbGludXhib290LmJpbjsgXAorCWZpCisKIGxpYmZkdDoKIAkkKE1B S0UpIC1DICRACiAKQEAgLTg4LDYgKzk2LDcgQEAgc3JwbToKIAl0YXIgY3pmICQoUlBNVE9QRElS KS9TT1VSQ0VTL2tlcm5lbC50YXIuZ3oga2VybmVsCiAJdGFyIGN6ZiAkKFJQTVRPUERJUikvU09V UkNFUy9zY3JpcHRzLnRhci5neiBzY3JpcHRzCiAJdGFyIGN6ZiAkKFJQTVRPUERJUikvU09VUkNF Uy9leHRib290LnRhci5neiBleHRib290CisJdGFyIGN6ZiAkKFJQTVRPUERJUikvU09VUkNFUy9s aW51eGJvb3QudGFyLmd6IGxpbnV4Ym9vdAogCWNwIE1ha2VmaWxlIGNvbmZpZ3VyZSBrdm1fc3Rh dCAkKFJQTVRPUERJUikvU09VUkNFUwogCXJwbWJ1aWxkICAtLWRlZmluZT0iX3RvcGRpciAkKFJQ TVRPUERJUikiIC1icyAkKHRtcHNwZWMpCiAJJChSTSkgJCh0bXBzcGVjKQpkaWZmIC0tZ2l0IGEv bGludXhib290L01ha2VmaWxlIGIvbGludXhib290L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjNiYzg4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9saW51eGJvb3Qv TWFrZWZpbGUKQEAgLTAsMCArMSw0MCBAQAorIyBNYWtlZmlsZSBmb3IgbGludXhib290IE9wdGlv biBST00KKyMgTmd1eWVuIEFuaCBRdXluaCA8YXF1eW5oQGdtYWlsLmNvbT4KKworQ0MgPSBnY2MK K0NDRkxBR1MgPSAtZyAtV2FsbCAtV2Vycm9yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZvbWl0 LWZyYW1lLXBvaW50ZXIgLU9zCisKK2NjLW9wdGlvbiA9ICQoc2hlbGwgaWYgdGVzdCAteiAiYCQo MSkgJCgyKSAtUyAtbyAvZGV2L251bGwgLXhjIFwKKyAgICAgICAgICAgICAgL2Rldi9udWxsIDI+ JjFgIjsgdGhlbiBlY2hvICIkKDIpIjsgZWxzZSBlY2hvICIkKDMpIjsgZmkgOykKK0NDRkxBR1Mg Kz0gJChjYWxsIGNjLW9wdGlvbiwkKENDKSwtbm9waWUsKQorQ0NGTEFHUyArPSAkKGNhbGwgY2Mt b3B0aW9uLCQoQ0MpLC1mbm8tc3RhY2stcHJvdGVjdG9yLCkKK0NDRkxBR1MgKz0gJChjYWxsIGNj LW9wdGlvbiwkKENDKSwtZm5vLXN0YWNrLXByb3RlY3Rvci1hbGwsKQorCitJTlNUQUxMRElSID0g L3Vzci9zaGFyZS9xZW11CisKKy5QSE9OWTogYWxsCithbGw6IGNsZWFuIGxpbnV4Ym9vdC5iaW4K KworLlBIT05ZOiBpbnN0YWxsCitpbnN0YWxsOiBsaW51eGJvb3QuYmluCisJY3AgbGludXhib290 LmJpbiAkKElOU1RBTExESVIpCisKKy5QSE9OWTogY2xlYW4KK2NsZWFuOgorCSQoUk0pICoubyAq LmltZyAqLmJpbiBzaWducm9tICp+CisKK2xpbnV4Ym9vdC5pbWc6IGJvb3QubyByb20ubworCSQo TEQpIC0tb2Zvcm1hdCBiaW5hcnkgLVR0ZXh0IDAgJF4gLW8gJEAgCisKK2xpbnV4Ym9vdC5iaW46 IGxpbnV4Ym9vdC5pbWcgc2lnbnJvbQorCS4vc2lnbnJvbSBsaW51eGJvb3QuaW1nIGxpbnV4Ym9v dC5iaW4KKworc2lnbnJvbTogc2lnbnJvbS5jCisJJChDQykgLW8gJEAgLWcgLVdhbGwgJF4KKwor JS5vOiAlLmMKKwkkKENDKSAkKENDRkxBR1MpIC1jICQ8CisKKyUubzogJS5TCisJJChDQykgJChD Q0ZMQUdTKSAtYyAkPAorCmRpZmYgLS1naXQgYS9saW51eGJvb3QvYm9vdC5TIGIvbGludXhib290 L2Jvb3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTQ2MWQ2Ci0tLSAv ZGV2L251bGwKKysrIGIvbGludXhib290L2Jvb3QuUwpAQCAtMCwwICsxLDU0IEBACisvKgorICog Ym9vdC5TCisgKiBMaW51eCBCb290IE9wdGlvbiBST00gZm9yIFFFTVUuCisKKyAqIENvcHlyaWdo dCAoQykgYnkgTmd1eWVuIEFuaCBRdXluaCA8YXF1eW5oQGdtYWlsLmNvbT4sIDIwMDguIAorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworCS50ZXh0CisJ LmNvZGUxNmdjYworCS5nbG9ibCBfc3RhcnQKKwkuZXh0ZXJuIHNldHVwCitfc3RhcnQ6CisJLnNo b3J0IDB4QUE1NQkJLyogUk9NIHNpZ25hdHVyZSAqLworCS5ieXRlIDAJCQkJLyogUk9NIHNpemUg LSB0byBiZSBwYXRjaGVkIGF0IGJ1aWx0LXRpbWUgKi8KKwkvKiBST00gZW50cnk6IGluaXRpYWxp emluZyAqLworCXB1c2hhbAorCS8qICVlcyBpcyBjbG9iYmVyZWQsIHNvIHNhdmUgaXQgKi8KKwlw dXNodyAlZXMKKyAgICAvKiBqdXN0IGluIGNhc2UgKi8KKwlwdXNodyAlZHMKKwljbGQKKwljYWxs IHNldHVwCQkvKiBjYWxsIEMgY29kZSAqLworCXBvcHcgICVkcworCXBvcHcgICVlcworCXBvcGFs CisJbHJldHcKKworCS8qIGludGVycnVwdCAxOSBoYW5kbGVyICovCisJLmdsb2JsIGludDE5X2hh bmRsZXIKKwkuZXh0ZXJuIGludDE5X2hhbmRsZXJfQworCS5leHRlcm4gbGludXhfYm9vdAorCWlu dDE5X2hhbmRsZXI6CisJLyogd2UgbmV2ZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgaW50MTksIHNv IG5vIG5lZWQgdG8gY2FyZQorCSAqIGFib3V0IGNsb2JiZXJlZCByZWdpc3RlcnMgOi0pICovCisJ LyogU2V0ICVkcyA9ICVzcyAqLworCW1vdncgJXNzLCAlYXgKKwltb3Z3ICVheCwgJWRzCisJY2xk CisJY2FsbCBpbnQxOV9oYW5kbGVyX0MJLyogY2FsbCBDIGNvZGUgKi8KKwkvKiB3ZSBhY3R1YWxs eSBqdW1wIHRvIGxpbnV4IGtlcm5lbCBzZXR1cCwgc28gbmV2ZXIgcmVhY2ggaGVyZSAqLwpkaWZm IC0tZ2l0IGEvbGludXhib290L2ZhcnZhci5oIGIvbGludXhib290L2ZhcnZhci5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NzYxODYKLS0tIC9kZXYvbnVsbAorKysgYi9s aW51eGJvb3QvZmFydmFyLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBmYXJ2YXIuaAorICog Q29kZSB0byBhY2Nlc3MgbXVsdGlwbGUgc2VnbWVudHMgd2l0aGluIGdjYy4KKyAqCisgKiBDb3B5 cmlnaHQgKEMpIDIwMDggIEtldmluIE8nQ29ubm9yIDxrZXZpbkBrb2Nvbm5vci5uZXQ+CisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0 aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIF9f RkFSVkFSX0gKKyNkZWZpbmUgX19GQVJWQVJfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8v IER1bW15IGRlZmluaXRpb25zIHVzZWQgdG8gbWFrZSBzdXJlIGdjYyB1bmRlcnN0YW5kcyBkZXBl bmRlbmNpZXMKKy8vIGJldHdlZW4gU0VUX1NFRyBhbmQgR0VUL1JFQUQvV1JJVEVfU0VHIG1hY3Jv cy4KK2V4dGVybiB1aW50MTZfdCBfX3NlZ21lbnRfQ1MsIF9fc2VnbWVudF9EUywgX19zZWdtZW50 X0VTLCBfX3NlZ21lbnRfU1M7CitleHRlcm4gdWludDE2X3QgX19zZWdtZW50X0dTLCBfX3NlZ21l bnRfRlM7CisKKy8vIExvdyBsZXZlbCBtYWNyb3MgZm9yIHJlYWRpbmcvd3JpdGluZyBtZW1vcnkg dmlhIGEgc2VnbWVudCBzZWxlY3Rvci4KKyNkZWZpbmUgX19SRUFEOF9TRUcoU0VHLCB2YXIpICh7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJdHlwZW9mKHZhcikgX192YWx1ZTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX19hc21fXygibW92YiAlJSIgI1NFRyAi OiUxLCAlYjAiIDogIj1RaSIoX192YWx1ZSkgIFwKKwkJCTogIm0iKHZhciksICJtIihfX3NlZ21l bnRfICMjIFNFRykpOyAgICAgICAgICAgIFwKKwkJX192YWx1ZTsgfSkKKyNkZWZpbmUgX19SRUFE MTZfU0VHKFNFRywgdmFyKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJdHlwZW9m KHZhcikgX192YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX19hc21f XygibW92dyAlJSIgI1NFRyAiOiUxLCAldzAiIDogIj1yaSIoX192YWx1ZSkgIFwKKwkJCTogIm0i KHZhciksICJtIihfX3NlZ21lbnRfICMjIFNFRykpOyAgICAgICAgICAgIFwKKwkJX192YWx1ZTsg fSkKKyNkZWZpbmUgX19SRUFEMzJfU0VHKFNFRywgdmFyKSAoeyAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKwkJdHlwZW9mKHZhcikgX192YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKwkJX19hc21fXygibW92bCAlJSIgI1NFRyAiOiUxLCAlMCIgOiAiPXJpIihfX3Zh bHVlKSAgIFwKKwkJCTogIm0iKHZhciksICJtIihfX3NlZ21lbnRfICMjIFNFRykpOyAgICAgICAg ICAgIFwKKwkJX192YWx1ZTsgfSkKKworI2RlZmluZSBfX1dSSVRFOF9TRUcoU0VHLCB2YXIsIHZh bHVlKSAgICAgICAgICAgICAgICAgICAgICAgXAorCV9fYXNtX18oIm1vdmIgJWIxLCAlJSIgI1NF RyAiOiUwIiA6ICI9bSIodmFyKSAgICAgICAgICAgXAorCQkJOiAiUSIodmFsdWUpLCAibSIoX19z ZWdtZW50XyAjIyBTRUcpKQorI2RlZmluZSBfX1dSSVRFMTZfU0VHKFNFRywgdmFyLCB2YWx1ZSkg ICAgICAgICAgICAgICAgICAgICAgXAorCV9fYXNtX18oIm1vdncgJXcxLCAlJSIgI1NFRyAiOiUw IiA6ICI9bSIodmFyKSAgICAgICAgICAgXAorCQkJOiAiciIodmFsdWUpLCAibSIoX19zZWdtZW50 XyAjIyBTRUcpKQorI2RlZmluZSBfX1dSSVRFMzJfU0VHKFNFRywgdmFyLCB2YWx1ZSkgICAgICAg ICAgICAgICAgICAgICAgXAorCV9fYXNtX18oIm1vdmwgJTEsICUlIiAjU0VHICI6JTAiIDogIj1t Iih2YXIpICAgICAgICAgICAgXAorCQkJOiAiciIodmFsdWUpLCAibSIoX19zZWdtZW50XyAjIyBT RUcpKQorCisvLyBMb3cgbGV2ZWwgbWFjcm9zIGZvciBnZXR0aW5nL3NldHRpbmcgYSBzZWdtZW50 IHJlZ2lzdGVyLgorI2RlZmluZSBfX1NFVF9TRUcoU0VHLCB2YWx1ZSkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKwlfX2FzbV9fKCJtb3Z3ICV3MSwgJSUiICNTRUcgOiAiPW0i KF9fc2VnbWVudF8gIyMgU0VHKSAgICAgICBcCisJCQk6ICJyIih2YWx1ZSkpCisjZGVmaW5lIF9f R0VUX1NFRyhTRUcpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor CQl1aW50MTZfdCBfX3NlZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKwkJX19hc21fXygibW92dyAlJSIgI1NFRyAiLCAldzAiIDogIj1yIihfX3NlZykgICAgICAg ICAgICBcCisJCQk6ICJtIihfX3NlZ21lbnRfICMjIFNFRykpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorCQlfX3NlZzt9KQorCisvLyBNYWNyb3MgZm9yIGF1dG9tYXRpY2FsbHkgY2hvb3Np bmcgdGhlIGFwcHJvcHJpYXRlIG1lbW9yeSBzaXplCisvLyBhY2Nlc3MgbWV0aG9kLgorZXh0ZXJu IHZvaWQgX19mb3JjZV9saW5rX2Vycm9yX191bmtub3duX3R5cGUoKTsKKworI2RlZmluZSBfX0dF VF9WQVIoc2VnLCB2YXIpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorCQl0eXBlb2YodmFyKSBfX3ZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorCQlpZiAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBl b2YoX192YWwpLCB1aW50OF90KSAgICAgICAgXAorCQkJfHwgX19idWlsdGluX3R5cGVzX2NvbXBh dGlibGVfcCh0eXBlb2YoX192YWwpLCBpbnQ4X3QpKSAgICAgXAorCQlfX3ZhbCA9IF9fUkVBRDhf U0VHKHNlZywgdmFyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQllbHNl IGlmIChfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZihfX3ZhbCksIHVpbnQxNl90 KSAgXAorCQkJfHwgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoX192YWwpLCBp bnQxNl90KSkgICAgXAorCQlfX3ZhbCA9IF9fUkVBRDE2X1NFRyhzZWcsIHZhcik7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorCQllbHNlIGlmIChfX2J1aWx0aW5fdHlwZXNfY29t cGF0aWJsZV9wKHR5cGVvZihfX3ZhbCksIHVpbnQzMl90KSAgXAorCQkJfHwgX19idWlsdGluX3R5 cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoX192YWwpLCBpbnQzMl90KSkgICAgXAorCQlfX3ZhbCA9 IF9fUkVBRDMyX1NFRyhzZWcsIHZhcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorCQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorCQlfX2ZvcmNlX2xpbmtfZXJyb3JfX3Vua25vd25fdHlwZSgpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlfX3ZhbDsgfSkKKworI2RlZmluZSBfX1NFVF9W QVIoc2VnLCB2YXIsIHZhbCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorCWlmIChfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZih2YXIpLCB1aW50OF90 KSAgICAgICAgICAgICAgXAorCQkJfHwgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBl b2YodmFyKSwgaW50OF90KSkgICAgICAgXAorCV9fV1JJVEU4X1NFRyhzZWcsIHZhciwgKHZhbCkp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWVsc2UgaWYgKF9fYnVp bHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKHZhciksIHVpbnQxNl90KSAgICAgICAgXAor CQkJfHwgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YodmFyKSwgaW50MTZfdCkp ICAgICAgXAorCV9fV1JJVEUxNl9TRUcoc2VnLCB2YXIsICh2YWwpKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorCWVsc2UgaWYgKF9fYnVpbHRpbl90eXBlc19jb21wYXRp YmxlX3AodHlwZW9mKHZhciksIHVpbnQzMl90KSAgICAgICAgXAorCQkJfHwgX19idWlsdGluX3R5 cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YodmFyKSwgaW50MzJfdCkpICAgICAgXAorCV9fV1JJVEUz Ml9TRUcoc2VnLCB2YXIsICh2YWwpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorCV9fZm9yY2VfbGlua19lcnJvcl9fdW5rbm93bl90eXBlKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworLy8gTWFj cm9zIGZvciBjb252ZXJ0aW5nIHRvL2Zyb20gMzJiaXQgc3R5bGUgcG9pbnRlcnMgdG8gdGhlaXIK Ky8vIGVxdWl2YWxlbnQgMTZiaXQgc2VnbWVudC9vZmZzZXQgdmFsdWVzLgorI2RlZmluZSBGQVJQ VFJfVE9fU0VHKHApICgoKHUzMikocCkpID4+IDQpCisjZGVmaW5lIEZBUlBUUl9UT19PRkZTRVQo cCkgKCgodTMyKShwKSkgJiAweGYpCisjZGVmaW5lIE1BS0VfRkFSUFRSKHNlZyxvZmYpICgodm9p ZCopKCgoc2VnKTw8NCkrKG9mZikpKQorCisvLyBNYWNyb3MgZm9yIGFjY2Vzc2luZyBhIHZhcmlh YmxlIGluIGFub3RoZXIgc2VnbWVudC4gIChUaGV5CisvLyBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0 aGUgJWVzIHNlZ21lbnQgYW5kIHRoZW4gbWFrZSB0aGUgYXBwcm9wcmlhdGUKKy8vIGFjY2Vzcy4p CisjZGVmaW5lIF9fR0VUX0ZBUlZBUihzZWcsIHZhcikgKHsgICAgICAgICAgICAgICBcCisJCVNF VF9TRUcoRVMsIChzZWcpKTsgICAgICAgICAgICAgICAgICAgICBcCisJCUdFVF9WQVIoRVMsICh2 YXIpKTsgfSkKKworI2RlZmluZSBfX1NFVF9GQVJWQVIoc2VnLCB2YXIsIHZhbCkgZG8geyAgICAg ICAgXAorCXR5cGVvZih2YXIpIF9fc2Z2X3ZhbCA9ICh2YWwpOyAgICAgICAgICAgICAgXAorCVNF VF9TRUcoRVMsIChzZWcpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCVNFVF9WQVIoRVMs ICh2YXIpLCBfX3Nmdl92YWwpOyAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmlu ZSBHRVRfRkFSVkFSKHNlZywgdmFyKSBfX0dFVF9GQVJWQVIoKHNlZyksICh2YXIpKQorI2RlZmlu ZSBTRVRfRkFSVkFSKHNlZywgdmFyLCB2YWwpIF9fU0VUX0ZBUlZBUigoc2VnKSwgKHZhciksICh2 YWwpKQorCisjZGVmaW5lIEdFVF9WQVIoc2VnLCB2YXIpIF9fR0VUX1ZBUihzZWcsICh2YXIpKQor I2RlZmluZSBTRVRfVkFSKHNlZywgdmFyLCB2YWwpIF9fU0VUX1ZBUihzZWcsICh2YXIpLCAodmFs KSkKKworI2RlZmluZSBTRVRfU0VHKFNFRywgdmFsdWUpIF9fU0VUX1NFRyhTRUcsICh2YWx1ZSkp CisjZGVmaW5lIEdFVF9TRUcoU0VHKSBfX0dFVF9TRUcoU0VHKQorCisjZW5kaWYKZGlmZiAtLWdp dCBhL2xpbnV4Ym9vdC9yb20uYyBiL2xpbnV4Ym9vdC9yb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi40Y2Q2MDBkCi0tLSAvZGV2L251bGwKKysrIGIvbGludXhib290L3Jv bS5jCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogcm9tLmMKKyAqIExpbnV4IEJvb3QgT3B0aW9u IFJPTSBmb3IgUUVNVS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIGJ5IE5ndXllbiBBbmggUXV5bmgg PGFxdXluaEBnbWFpbC5jb20+LCAyMDA4LiAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg b2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv dW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZmFydmFy LmgiCisKK2FzbSAoIi5jb2RlMTZnY2MiKTsKKworc3RydWN0IGxpbnV4Ym9vdF9pbmZvIHsKKwl1 aW50MTZfdCBjczsJCS8qIENTIHNlZ21lbnQgKi8KKwl1aW50MTZfdCBkczsJCS8qIERTIHNlZ21l bnQgKi8KKwl1aW50MTZfdCBzcDsJCS8qIFNQIHJlZyAqLworfTsKKworI2RlZmluZSBMSU5VWEJP T1RfUE9SVCAweDQwNworCitzdHJ1Y3QgaXZlY3RvciB7CisJdWludDE2X3Qgb2Zmc2V0OworCXVp bnQxNl90IHNlZ21lbnQ7Cit9OworLyogbWFuaXB1bGF0ZSBpbnRlcnJ1cHQgdmVjdG9yIGVudHJ5 ICovCisjZGVmaW5lIEdFVF9JVlRfRU5UUlkoaW5kZXgsdmFyKSBcCisgICAgR0VUX0ZBUlZBUigw LCAoKHN0cnVjdCBpdmVjdG9yICopKGluZGV4KnNpemVvZihzdHJ1Y3QgaXZlY3RvcikpKS0+dmFy KQorI2RlZmluZSBTRVRfSVZUX0VOVFJZKGluZGV4LHZhcix2YWx1ZSkgXAorICAgIFNFVF9GQVJW QVIoMCwgKChzdHJ1Y3QgaXZlY3RvciAqKShpbmRleCpzaXplb2Yoc3RydWN0IGl2ZWN0b3IpKSkt PnZhciwgdmFsdWUpCisKKy8qIGNhbGxlZCBmcm9tIEFTTSBjb2RlIGluIGJvb3QuUyAqLwordm9p ZCBzZXR1cCgpCit7CisJLyogaW5zdGFsbCBvdXIgSU5UIDE5IGhhbmRsZXIgKi8KKwlleHRlcm4g dm9pZCBpbnQxOV9oYW5kbGVyOworCVNFVF9JVlRfRU5UUlkoMHgxOSwgc2VnbWVudCwgR0VUX1NF RyhDUykpOworCVNFVF9JVlRfRU5UUlkoMHgxOSwgb2Zmc2V0LCAodWludDE2X3QpJmludDE5X2hh bmRsZXIpOworfQorCisvKiBzZW5kIGNvbW1hbmQgdG8gUUVNVSB2aWEgYSBkZWRpY2F0ZWQgSU8g cG9ydCAqLworc3RhdGljIHZvaWQgZ2V0X2xpbnV4Ym9vdF9pbmZvKHN0cnVjdCBsaW51eGJvb3Rf aW5mbyAqaW5mbykKK3sKKwl1aW50MTZfdCBzZWc7CisJY2hhciB0bXBbMTYgKyBzaXplb2YoKmlu Zm8pXSwgKnA7CisKKwkvKiBhbGlnbiB0byAxNiAqLworCXAgPSAoY2hhciAqKSgoKHVpbnQzMl90 KXRtcCArIDB4RikgJiB+MHhGKTsKKwltZW1jcHkocCwgaW5mbywgc2l6ZW9mKCppbmZvKSk7CisK KwkvKiBzZW5kIHNlZ21lbnQgY29udGFpbmVkIGluZm8gdG8gUUVNVSAqLworCXNlZyA9ICgodWlu dDMyX3QpcCA+PiA0KSArIEdFVF9TRUcoU1MpOworCW91dHcoc2VnLCBMSU5VWEJPT1RfUE9SVCk7 CisKKwkvKiBub3cgY29weSBiYWNrIHRoZSByZXN1bHQgdG8gaW5mbyAqLworCW1lbWNweShpbmZv LCBwLCBzaXplb2YoKmluZm8pKTsKK30KKworLyogYm9vdCBsaW51eCBieSBqbXAgdG8gaXRzIGtl cm5lbCBzZXR1cCBjb2RlICovCitzdGF0aWMgdm9pZCBib290X2xpbnV4KHVpbnQxNl90IGNzLCB1 aW50MTZfdCBkcywgdWludDE2X3Qgc3ApCit7CisJYXNtIHZvbGF0aWxlICgKKwkJCSJjbGkgICAg ICAgICAgICAgXG4iCisJCQkiY2xkICAgICAgICAgICAgIFxuIgorCQkJLyogc2V0dXAgcmVnaXN0 ZXJzIGZvciBrZXJuZWwgc2V0dXAgKi8KKwkJCSJtb3Z3ICUwLCAlJWRzICAgXG4iCisJCQkibW92 dyAlMCwgJSVlcyAgIFxuIgorCQkJIm1vdncgJTAsICUlZnMgICBcbiIKKwkJCSJtb3Z3ICUwLCAl JWdzICAgXG4iCisJCQkibW92dyAlMCwgJSVzcyAgIFxuIgorCQkJIm1vdncgJTIsICUlc3AgICBc biIKKwkJCS8qIHB1c2ggQ1M6SVAgKi8KKwkJCSJwdXNodyAlMSAgICAgICAgXG4iCisJCQkicHVz aHcgJDAgICAgICAgIFxuIgorCQkJLyogbm93IChpbXBsaWNpdGx5KSBqdW1wIHRvIENTOklQICov CisJCQkibHJldHcgICAgICAgICAgIFxuIgorCQkJOgorCQkJOiAicm0iIChkcyksICJybSIgKGNz KSwgInJtIiAoc3ApCisJKTsKK30KKworLyogaG9vayBJTlQgMTMgKi8KKy8qIGNhbGxlZCBmcm9t IEFTTSBjb2RlIGluIGJvb3QuUyAqLwordm9pZCBpbnQxOV9oYW5kbGVyX0MoKQoreworCXN0cnVj dCBsaW51eGJvb3RfaW5mbyBpbmZvOworCisJZ2V0X2xpbnV4Ym9vdF9pbmZvKCZpbmZvKTsKKwor CWJvb3RfbGludXgoaW5mby5jcywgaW5mby5kcywgaW5mby5zcCk7Cit9CmRpZmYgLS1naXQgYS9s aW51eGJvb3Qvc2lnbnJvbSBiL2xpbnV4Ym9vdC9zaWducm9tCm5ldyBmaWxlIG1vZGUgMTAwNzU1 CmluZGV4IDAwMDAwMDAuLmNkYzM5YTkKQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBhbmQgYi9saW51 eGJvb3Qvc2lnbnJvbSBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpbnV4Ym9vdC9zaWducm9tLmMgYi9s aW51eGJvb3Qvc2lnbnJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJm MmE3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9saW51eGJvb3Qvc2lnbnJvbS5jCkBAIC0wLDAgKzEs MTI4IEBACisvKgorICogRXh0ZW5kZWQgQm9vdCBPcHRpb24gUk9NCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0 aW9uLCAyMDA3CisgKiAgIEF1dGhvcnM6IEFudGhvbnkgTGlndW9yaSA8YWxpZ3VvcmlAdXMuaWJt LmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgYnkgTmd1eWVuIEFuaCBRdXluaCA8YXF1eW5oQGdtYWls LmNvbT4sIDIwMDguCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50 Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVk ZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBCTE9DSyA1MTIK Kworc3RhdGljIGxvbmcgZ2V0X2ZpbGVfc2l6ZShGSUxFICpmKQoreworCWxvbmcgd2hlcmUsIHNp emU7CisKKwl3aGVyZSA9IGZ0ZWxsKGYpOworCWZzZWVrKGYsIDAsIFNFRUtfRU5EKTsKKwlzaXpl ID0gZnRlbGwoZik7CisJZnNlZWsoZiwgd2hlcmUsIFNFRUtfU0VUKTsKKworCXJldHVybiBzaXpl OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJRklMRSAqZmluLCAq Zm91dDsKKwljaGFyIGJ1ZmZlcltCTE9DS107CisJaW50IGksIGosIHNpemU7CisJbG9uZyByb21f c2l6ZTsKKworCXVpbnQ4X3Qgc3VtID0gMDsKKworCWlmIChhcmdjICE9IDMpIHsKKwkJcHJpbnRm KCJVc2FnZTogJXMgPFJPTT4gPE9VVFBVVD5cbiIsIGFyZ3ZbMF0pOworCQlyZXR1cm4gMTsKKwl9 CisKKwlmaW4gPSBmb3Blbihhcmd2WzFdLCAicmIiKTsKKwlmb3V0ID0gZm9wZW4oYXJndlsyXSwg IndiIik7CisKKwlpZiAoZmluID09IE5VTEwgfHwgZm91dCA9PSBOVUxMKSB7CisJCWZwcmludGYo c3RkZXJyLCAiQ291bGQgbm90IG9wZW4gaW5wdXQvb3V0cHV0IGZpbGVzXG4iKTsKKwkJcmV0dXJu IDE7CisJfQorCisJcm9tX3NpemUgPSBnZXRfZmlsZV9zaXplKGZpbik7CisJaWYgKHJvbV9zaXpl ID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogUk9NIHNpemUgPSAwP1xuIik7CisJ CXJldHVybiAxOworCX0KKworCS8qIHNldCByb21fc2l6ZSB0byBibG9ja3Mgb2YgNTEyIGJ5dGVz ICovCisJcm9tX3NpemUgPSAocm9tX3NpemUvNTEyKSArIDE7CisKKwkvKiByZWFkIGFsbCBkYXRh IGluIFJPTSBpbWFnZSwgZXhjZXB0IHRoZSBsYXN0IGJsb2NrICovCisJZm9yIChpID0gMDsgaSA8 IHJvbV9zaXplIC0gMTsgaSArKykgeworCQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVy KSk7CisKKwkJc2l6ZSA9IGZyZWFkKGJ1ZmZlciwgQkxPQ0ssIDEsIGZpbik7CisJCWlmIChzaXpl ID09IDEpIHsKKwkJCWlmIChpID09IDApIHsKKwkJCQkvKiBmaXJzdCBibG9jaywgbGV0cyBzZXQg Uk9NIHNpemUgKi8KKwkJCQlidWZmZXJbMl0gPSAodWludDhfdClyb21fc2l6ZTsKKwkJCX0KKwor CQkJZm9yIChqID0gMDsgaiA8IEJMT0NLOyBqKyspCisJCQkJc3VtICs9IGJ1ZmZlcltqXTsKKwor CQkJaWYgKGZ3cml0ZShidWZmZXIsIEJMT0NLLCAxLCBmb3V0KSAhPSAxKSB7CisJCQkJZnByaW50 ZihzdGRlcnIsICJXcml0ZSBmYWlsZWRcbiIpOworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJ CWVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVhZCBmcm9tIGlucHV0IGZp bGVcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwkvKiBub3cgcmVhZCBsYXN0IGJsb2Nr IG9mIFJPTSBpbWFnZSAqLworCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKKwlz aXplID0gZnJlYWQoYnVmZmVyLCAxLCBCTE9DSywgZmluKTsKKwlpZiAoZmVycm9yKGZpbikpIHsK KwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVhZCBmcm9tIGlucHV0IGZpbGVcbiIpOwor CQlyZXR1cm4gMTsKKwl9CisKKwlpZiAocm9tX3NpemUgPT0gMSkKKwkJLyogc2V0IFJPTSBzaXpl ICovCisJCWJ1ZmZlclsyXSA9ICh1aW50OF90KXJvbV9zaXplOworCisJZm9yIChpID0gMDsgaSA8 IHNpemU7IGkrKykKKwkJc3VtICs9IGJ1ZmZlcltpXTsKKworCS8qIHNldCBjaGVja3N1bSBpbiBm aW5hbCBieXRlICovCisJYnVmZmVyW0JMT0NLIC0gMV0gPSAtc3VtOworCisJaWYgKGZ3cml0ZShi dWZmZXIsIEJMT0NLLCAxLCBmb3V0KSAhPSAxKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVk IHRvIHdyaXRlIHRvIG91dHB1dCBmaWxlXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZmNsb3Nl KGZpbik7CisJZmNsb3NlKGZvdXQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saW51 eGJvb3QvdXRpbC5oIGIvbGludXhib290L3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi43Zjg1OWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGludXhib290L3V0aWwuaApA QCAtMCwwICsxLDY5IEBACisvKgorICogdXRpbC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4 LCBOZ3V5ZW4gQW5oIFF1eW5oIDxhcXV5bmhAZ21haWwuY29tPgorICoKKyAqIFNvbWUgY29kZSBp cyBsaWZ0ZWQgZnJvbSB0aGUgbGVnYWN5YmlvcyBwcm9qZWN0IGJ5IEtldmluIE8nQ29ubm9yICho dHRwOi8vd3d3LmxpbnV4dG9nby5vcmcvfmtldmluLykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK KyAqIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19VVElMX0hfXworI2RlZmluZSBf X1VUSUxfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworc3RhdGljIGlubGluZSB2b2lkIG91 dHcodWludDE2X3QgdmFsdWUsIHVpbnQxNl90IHBvcnQpCit7CisJYXNtIHZvbGF0aWxlKCJvdXR3 ICV3MCwgJXcxIiA6IDogImEiKHZhbHVlKSwgIk5kIihwb3J0KSk7Cit9CisKKyNkZWZpbmUgVVJF RyhFUiwgUiwgUkgsIFJMKSB1bmlvbiB7IHVpbnQzMl90IEVSOyAJXAorCXN0cnVjdCB7IHVpbnQx Nl90IFI7IHVpbnQxNl90IFIgIyMgX2hpOyB9OwlcCisJc3RydWN0IHsJXAorCQl1aW50OF90IFJM OwlcCisJCXVpbnQ4X3QgUkg7CVwKKwkJdWludDhfdCBSICMjIF9oaWxvOwlcCisJCXVpbnQ4X3Qg UiAjIyBfaGloaTsJXAorCX07CVwKK30KKworLyogU2V0IG9mIHJlZ2lzdGVycyBwYXNzZWQgdG8g SU5UIDEzIGhhbmRsZXIuCisgKiBUaGVzZSByZWdpc3RlcnMgY2FuIGJlIG1vZGlmaWVkIG9uIHJl dHVybi4gKi8KK3N0cnVjdCBpcmVncyB7CisJdWludDE2X3QgZHM7CisJdWludDE2X3QgZXM7CisJ VVJFRyhlZGksIGRpLCBkaV9oaSwgZGlfbG8pOworCVVSRUcoZXNpLCBzaSwgc2lfaGksIHNpX2xv KTsKKwlVUkVHKGVieCwgYngsIGJoLCBibCk7CisJVVJFRyhlZHgsIGR4LCBkaCwgZGwpOworCVVS RUcoZWN4LCBjeCwgY2gsIGNsKTsKKwlVUkVHKGVheCwgYXgsIGFoLCBhbCk7CisJdWludDE2X3Qg aXA7CisJdWludDE2X3QgY3M7CisJdWludDE2X3QgZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKm1lbWNweSh2b2lkICogZGVzdCwgdm9pZCAq c3JjLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJY2hhciAqdG1wID0gKGNoYXIgKilkZXN0LCAq cyA9IChjaGFyICopc3JjOworCisJd2hpbGUgKGNvdW50LS0pCisJCSp0bXArKyA9ICpzKys7CisK KwlyZXR1cm4gZGVzdDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9xZW11L01ha2VmaWxlIGIv cWVtdS9NYWtlZmlsZQppbmRleCBhMzA1NGI0Li4zNzIyYjVlIDEwMDY0NAotLS0gYS9xZW11L01h a2VmaWxlCisrKyBiL3FlbXUvTWFrZWZpbGUKQEAgLTE5NSw3ICsxOTUsNyBAQCBlbmRpZgogCW1r ZGlyIC1wICIkKERFU1RESVIpJChkYXRhZGlyKSIKIAlzZXQgLWU7IGZvciB4IGluIGJpb3MuYmlu IHZnYWJpb3MuYmluIHZnYWJpb3MtY2lycnVzLmJpbiBwcGNfcm9tLmJpbiBcCiAJCXZpZGVvLngg b3BlbmJpb3Mtc3BhcmMzMiBweGUtbmUya19wY2kuYmluIFwKLQkJcHhlLXJ0bDgxMzkuYmluIHB4 ZS1wY25ldC5iaW4gcHhlLWUxMDAwLmJpbiBleHRib290LmJpbiBcCisJCXB4ZS1ydGw4MTM5LmJp biBweGUtcGNuZXQuYmluIHB4ZS1lMTAwMC5iaW4gZXh0Ym9vdC5iaW4gbGludXhib290LmJpbiBc CiAJCWJhbWJvby5kdGI7IFwKICAgICAgICAgZG8gXAogCQkkKElOU1RBTEwpIC1tIDY0NCAkKFNS Q19QQVRIKS9wYy1iaW9zLyQkeCAiJChERVNURElSKSQoZGF0YWRpcikiOyBcCkBAIC0zMDIsNiAr MzAyLDcgQEAgdGFyYmluOgogCSQoZGF0YWRpcikvcHhlLXJ0bDgxMzkuYmluIFwKICAgICAgICAg JChkYXRhZGlyKS9weGUtcGNuZXQuYmluIFwKIAkkKGRhdGFkaXIpL2V4dGJvb3QuYmluIFwKKwkk KGRhdGFkaXIpL2xpbnV4Ym9vdC5iaW4gXAogCSQoZG9jZGlyKS9xZW11LWRvYy5odG1sIFwKIAkk KGRvY2RpcikvcWVtdS10ZWNoLmh0bWwgXAogCSQobWFuZGlyKS9tYW4xL3FlbXUuMSAkKG1hbmRp cikvbWFuMS9xZW11LWltZy4xCmRpZmYgLS1naXQgYS9xZW11L01ha2VmaWxlLnRhcmdldCBiL3Fl bXUvTWFrZWZpbGUudGFyZ2V0CmluZGV4IDJmYzI5ODguLjZhNmQyMWIgMTAwNjQ0Ci0tLSBhL3Fl bXUvTWFrZWZpbGUudGFyZ2V0CisrKyBiL3FlbXUvTWFrZWZpbGUudGFyZ2V0CkBAIC01OTEsNyAr NTkxLDcgQEAgaWZlcSAoJChUQVJHRVRfQkFTRV9BUkNIKSwgaTM4NikKIE9CSlMrPSBpZGUubyBw Y2tiZC5vIHBzMi5vIHZnYS5vICQoU09VTkRfSFcpIGRtYS5vCiBPQkpTKz0gZmRjLm8gbWMxNDY4 MThydGMubyBzZXJpYWwubyBpODI1OS5vIGk4MjU0Lm8gcGNzcGsubyBwYy5vCiBPQkpTKz0gY2ly cnVzX3ZnYS5vIGFwaWMubyBwYXJhbGxlbC5vIGFjcGkubyBwaWl4X3BjaS5vCi1PQkpTKz0gdXNi LXVoY2kubyB2bW1vdXNlLm8gdm1wb3J0Lm8gdm13YXJlX3ZnYS5vIGV4dGJvb3QubworT0JKUys9 IHVzYi11aGNpLm8gdm1tb3VzZS5vIHZtcG9ydC5vIHZtd2FyZV92Z2EubyBleHRib290Lm8gbGlu dXhib290Lm8KIGlmZXEgKCQoVVNFX0tWTV9QSVQpLCAxKQogT0JKUys9IGk4MjU0LWt2bS5vCiBl bmRpZgpkaWZmIC0tZ2l0IGEvcWVtdS9ody9saW51eGJvb3QuYyBiL3FlbXUvaHcvbGludXhib290 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiN2U0ZgotLS0gL2Rldi9u dWxsCisrKyBiL3FlbXUvaHcvbGludXhib290LmMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIGxp bnV4Ym9vdC5jCisgKiBMaW51eCBCb290IE9wdGlvbiBST00uCisgKgorICogQ29weXJpZ2h0IChD KSBOZ3V5ZW4gQW5oIFF1eW5oIDxhcXV5bmhAZ21haWwuY29tPiwgMjAwOC4KKyAqCisgKiBUaGlz IGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHUEwgbGljZW5zZSB2ZXJzaW9uIDIuIAor ICogU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKi8K KworI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAicGMuaCIKKworLyogRXh0ZW5kZWQgQm9vdCBS T00gc3Vwb3J0ICovCisKK3N0cnVjdCBsaW51eGJvb3RfaW5mbyB7CisJLyogdWludDE2X3QgcmVx dWVzdDsgKi8KKwl1aW50MTZfdCBjczsgICAgICAgIC8qIENTIHNlZ21lbnQgKi8KKwl1aW50MTZf dCBkczsgICAgICAgIC8qIERTIHNlZ21lbnQgKi8KKwl1aW50MTZfdCBzcDsgICAgICAgIC8qIFNQ IHJlZyAqLworfTsKKworI2RlZmluZSBMSU5VWEJPT1RfUE9SVCAweDQwNworCitzdGF0aWMgdm9p ZCBsaW51eGJvb3Rfd3JpdGUodm9pZCAqb3BhcXVlLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCB2 YWx1ZSkKK3sKKyAgICBzdHJ1Y3QgbGludXhib290X2luZm8gKmluZm8gPSAodm9pZCAqKShwaHlz X3JhbV9iYXNlICsgKCh2YWx1ZSAmIDB4RkZGRikgPDwgNCkpOworCisJaW5mby0+Y3MgPSBrZXJu ZWxfc2V0dXBfY3M7CisJaW5mby0+ZHMgPSBrZXJuZWxfc2V0dXBfZHM7CisJaW5mby0+c3AgPSBr ZXJuZWxfc2V0dXBfc3A7CisKKwljcHVfcGh5c2ljYWxfbWVtb3J5X3NldF9kaXJ0eSgodmFsdWUg JiAweEZGRkYpIDw8IDQpOworfQorCit2b2lkIGxpbnV4Ym9vdF9pbml0KCkKK3sKKyAgICByZWdp c3Rlcl9pb3BvcnRfd3JpdGUoTElOVVhCT09UX1BPUlQsIDEsIDIsIGxpbnV4Ym9vdF93cml0ZSwg TlVMTCk7Cit9CmRpZmYgLS1naXQgYS9xZW11L2h3L3BjLmMgYi9xZW11L2h3L3BjLmMKaW5kZXgg YWU4N2FiOS4uZmRkZTRjZCAxMDA2NDQKLS0tIGEvcWVtdS9ody9wYy5jCisrKyBiL3FlbXUvaHcv cGMuYwpAQCAtNDEsNiArNDEsNyBAQAogI2RlZmluZSBWR0FCSU9TX0ZJTEVOQU1FICJ2Z2FiaW9z LmJpbiIKICNkZWZpbmUgVkdBQklPU19DSVJSVVNfRklMRU5BTUUgInZnYWJpb3MtY2lycnVzLmJp biIKICNkZWZpbmUgRVhUQk9PVF9GSUxFTkFNRSAiZXh0Ym9vdC5iaW4iCisjZGVmaW5lIExJTlVY Qk9PVF9GSUxFTkFNRSAibGludXhib290LmJpbiIKIAogLyogTGVhdmUgYSBjaHVuayBvZiBtZW1v cnkgYXQgdGhlIHRvcCBvZiBSQU0gZm9yIHRoZSBCSU9TIEFDUEkgdGFibGVzLiAgKi8KICNkZWZp bmUgQUNQSV9EQVRBX1NJWkUgICAgICAgMHgxMDAwMApAQCAtNDkyLDYgKzQ5Myw4IEBAIHN0YXRp YyBsb25nIGdldF9maWxlX3NpemUoRklMRSAqZikKICAgICByZXR1cm4gc2l6ZTsKIH0KIAordWlu dDE2X3Qga2VybmVsX3NldHVwX2NzLCBrZXJuZWxfc2V0dXBfZHMsIGtlcm5lbF9zZXR1cF9zcDsK Kwogc3RhdGljIHZvaWQgbG9hZF9saW51eChjb25zdCBjaGFyICprZXJuZWxfZmlsZW5hbWUsCiAJ CSAgICAgICBjb25zdCBjaGFyICppbml0cmRfZmlsZW5hbWUsCiAJCSAgICAgICBjb25zdCBjaGFy ICprZXJuZWxfY21kbGluZSkKQEAgLTYzOCwxMSArNjQxLDEyIEBAIHN0YXRpYyB2b2lkIGxvYWRf bGludXgoY29uc3QgY2hhciAqa2VybmVsX2ZpbGVuYW1lLAogICAgIC8qIGdlbmVyYXRlIGJvb3Rz ZWN0b3IgdG8gc2V0IHVwIHRoZSBpbml0aWFsIHJlZ2lzdGVyIHN0YXRlICovCiAgICAgcmVhbF9z ZWcgPSAocmVhbF9hZGRyLXBoeXNfcmFtX2Jhc2UpID4+IDQ7CiAgICAgc2VnWzBdID0gc2VnWzJd ID0gc2VnWzNdID0gc2VnWzRdID0gc2VnWzRdID0gcmVhbF9zZWc7Ci0gICAgc2VnWzFdID0gcmVh bF9zZWcrMHgyMDsJLyogQ1MgKi8KKwlrZXJuZWxfc2V0dXBfZHMgPSByZWFsX3NlZzsKKyAgICBr ZXJuZWxfc2V0dXBfY3MgPSBzZWdbMV0gPSByZWFsX3NlZysweDIwOwkvKiBDUyAqLwogICAgIG1l bXNldChncHIsIDAsIHNpemVvZiBncHIpOwotICAgIGdwcls0XSA9IGNtZGxpbmVfYWRkci1yZWFs X2FkZHItMTY7CS8qIFNQICgtMTYgaXMgcGFyYW5vaWEpICovCisgICAga2VybmVsX3NldHVwX3Nw ID0gZ3ByWzRdID0gY21kbGluZV9hZGRyLXJlYWxfYWRkci0xNjsJLyogU1AgKC0xNiBpcyBwYXJh bm9pYSkgKi8KIAotICAgIGdlbmVyYXRlX2Jvb3RzZWN0KGdwciwgc2VnLCAwKTsKKyAgICAvL2dl bmVyYXRlX2Jvb3RzZWN0KGdwciwgc2VnLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgbWFpbl9jcHVf cmVzZXQodm9pZCAqb3BhcXVlKQpAQCAtOTAzLDYgKzkwNywxNCBAQCBzdGF0aWMgdm9pZCBwY19p bml0MShyYW1fYWRkcl90IHJhbV9zaXplLCBpbnQgdmdhX3JhbV9zaXplLAogICAgIGZvciAoaSA9 IDA7IGkgPCBuYl9vcHRpb25fcm9tczsgaSsrKQogCW9wdF9yb21fb2Zmc2V0ICs9IGxvYWRfb3B0 aW9uX3JvbShvcHRpb25fcm9tW2ldLCBvcHRfcm9tX29mZnNldCk7CiAKKwkvKiBsaW51eGJvb3Qg b3B0aW9uIFJPTSBhbHNvIGludGVyY2VwdHMgaW50MTksIGJ1dCBuZXZlciBjYWxsIG9yaWdpbmFs IGludDE5LAorCSAqIHNvIGl0IG11c3QgYmUgbG9hZGVkIGJlZm9yZSBleHRib290ISAqLworICAg IGlmIChsaW51eF9ib290KSB7CisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzLyVzIiwg Ymlvc19kaXIsIExJTlVYQk9PVF9GSUxFTkFNRSk7CisJb3B0X3JvbV9vZmZzZXQgKz0gbG9hZF9v cHRpb25fcm9tKGJ1Ziwgb3B0X3JvbV9vZmZzZXQpOworCWZwcmludGYoc3RkZXJyLCAibGludXhi b290IFJPTSBsb2FkZWQgYXQgMHgleFxuIiwgb3B0X3JvbV9vZmZzZXQpOworCX0KKwogICAgIGlm IChleHRib290X2RyaXZlICE9IC0xKSB7CiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVz LyVzIiwgYmlvc19kaXIsIEVYVEJPT1RfRklMRU5BTUUpOwogCW9wdF9yb21fb2Zmc2V0ICs9IGxv YWRfb3B0aW9uX3JvbShidWYsIG9wdF9yb21fb2Zmc2V0KTsKQEAgLTkzMSw4ICs5NDMsMTAgQEAg c3RhdGljIHZvaWQgcGNfaW5pdDEocmFtX2FkZHJfdCByYW1fc2l6ZSwgaW50IHZnYV9yYW1fc2l6 ZSwKIAogICAgIGJvY2hzX2Jpb3NfaW5pdCgpOwogCi0gICAgaWYgKGxpbnV4X2Jvb3QpCisgICAg aWYgKGxpbnV4X2Jvb3QpIHsKIAlsb2FkX2xpbnV4KGtlcm5lbF9maWxlbmFtZSwgaW5pdHJkX2Zp bGVuYW1lLCBrZXJuZWxfY21kbGluZSk7CisJbGludXhib290X2luaXQoKTsKKwl9CiAKICAgICBj cHVfaXJxID0gcWVtdV9hbGxvY2F0ZV9pcnFzKHBpY19pcnFfcmVxdWVzdCwgZmlyc3RfY3B1LCAx KTsKICAgICBpODI1OSA9IGk4MjU5X2luaXQoY3B1X2lycVswXSk7CmRpZmYgLS1naXQgYS9xZW11 L2h3L3BjLmggYi9xZW11L2h3L3BjLmgKaW5kZXggZjI2ZmNiNi4uZDg2ZWNmZCAxMDA2NDQKLS0t IGEvcWVtdS9ody9wYy5oCisrKyBiL3FlbXUvaHcvcGMuaApAQCAtMTU4LDcgKzE1OCwxMCBAQCB2 b2lkICp2aXJ0aW9fYmxrX2luaXQoUENJQnVzICpidXMsIHVpbnQxNl90IHZlbmRvciwgdWludDE2 X3QgZGV2aWNlLAogCQkgICAgICBCbG9ja0RyaXZlclN0YXRlICpicyk7CiAKIC8qIGV4dGJvb3Qu YyAqLwotCiB2b2lkIGV4dGJvb3RfaW5pdChCbG9ja0RyaXZlclN0YXRlICpicywgaW50IGNtZCk7 CiAKKy8qIGxpbnV4X2Jvb3QgKi8KK3VpbnQxNl90IGtlcm5lbF9zZXR1cF9jcywga2VybmVsX3Nl dHVwX2RzLCBrZXJuZWxfc2V0dXBfc3A7Cit2b2lkIGxpbnV4Ym9vdF9pbml0KHZvaWQpOworCiAj ZW5kaWYK ------=_Part_798_26039151.1208748768717--