From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18965 invoked by alias); 6 Jul 2008 19:31:12 -0000 Received: (qmail 18947 invoked by uid 22791); 6 Jul 2008 19:31:07 -0000 X-Spam-Check-By: sourceware.org Received: from wr-out-0506.google.com (HELO wr-out-0506.google.com) (64.233.184.235) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sun, 06 Jul 2008 19:30:36 +0000 Received: by wr-out-0506.google.com with SMTP id c53so1248097wra.20 for ; Sun, 06 Jul 2008 12:30:33 -0700 (PDT) Received: by 10.90.74.7 with SMTP id w7mr4134208aga.45.1215372633479; Sun, 06 Jul 2008 12:30:33 -0700 (PDT) Received: by 10.90.49.12 with HTTP; Sun, 6 Jul 2008 12:30:33 -0700 (PDT) Message-ID: <4aca3dc20807061230kcfaaff6m7f69c8eb6da116b0@mail.gmail.com> Date: Sun, 06 Jul 2008 22:12:00 -0000 From: "Daniel Berlin" To: "Richard Guenther" Subject: Re: [PATCH]: Rewrite tree level PRE Cc: gcc-patches In-Reply-To: <4aca3dc20807061046i562d5b9cr2b51d13b106858e7@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_19974_20278897.1215372633452" References: <4aca3dc20807052133q286defccna2a9b4ede5b821f6@mail.gmail.com> <84fc9c000807060732v6dbb7d21o5d02fe2875070741@mail.gmail.com> <4aca3dc20807061046i562d5b9cr2b51d13b106858e7@mail.gmail.com> X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2008-07/txt/msg00476.txt.bz2 ------=_Part_19974_20278897.1215372633452 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 2662 I got it going on my home machine. The attached fixes the problem. On Sun, Jul 6, 2008 at 1:46 PM, Daniel Berlin wrote: > On Sun, Jul 6, 2008 at 10:32 AM, Richard Guenther > wrote: >> On Sun, Jul 6, 2008 at 6:33 AM, Daniel Berlin wrote: >>> This patch effectively rewrites tree PRE to share datastructures with >>> tree-vn, instead of copying statements and modifying trees (which >>> don't work so well in a tuples world :P). >>> >>> As part of the rewrite, it also fixes a bunch of missed optimizations >>> because PRE will now move globals. >>> It also uses roughly half as much memory as before (since PRE no >>> longer copies statements but instead shares the vn structures with the >>> vn). >>> The fundamentals are the same as they were before, it simply no longer >>> does it's own value numbering. >>> Since PRE was the only user of VALUE_HANDLES, i have removed them as >>> part of this patch. >>> Since PRE was the only user of most of tree-vn.c, i removed it and >>> moved the 3 still-used functions to tree-ssa-sccvn.c >>> PRE is also now type correct, in that the insertions it creates should >>> have matched types, whereas before they were generally a mismash (it >>> would happily create phi nodes whose arguments had mixed types, etc). >>> >>> This patch will cause some FRE failures due to a small bit of code i >>> disabled in tree-ssa-sccvn.c. I have discussed this with richard >>> guenther and he has said he will fix it up, so the ssa-fre-* failures >>> are temporary. >>> >>> Other than than PRE of globals, it should PRE all of the expressions >>> we used to, plus a few more in the way of loads. I have verified this >>> by hand comparing the eliminations performed during a bootstrap of >>> gcc. >>> I have not performed more benchmarking than that, as the main goal was >>> a feature equivalent rewrite that would enable tuple conversion to >>> procede. The fact that it will PRE globals is simply a side effect of >>> sharing a representation with the VN. >>> >>> The patch is large but 99% of it is the rewritten tree-ssa-pre.c. >>> >>> Bootstrapped and regtested on i686-darwin (With the safe-ctype change >>> reverted) and i686-linux. >>> I will wait a few days for comments before committing it (All the code >>> outside of PRE that I am removing was added as part of PRE, but if >>> someone wants to object to it's removal, please let me know). >> >> This triggers a latent issue in SCCVN (it breaks bootstrap on x86_64 with Ada). >> > > I don't have an ada compiler on my x86_64. If i send you an updated > patch, can you test it for me with ada? > ------=_Part_19974_20278897.1215372633452 Content-Type: text/x-diff; name=newpre.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fic1h81l0 Content-Disposition: attachment; filename=newpre.diff Content-length: 243606 ZGlmZiAtciAyMzI1MzMwY2U5ZWQgZ2NjL0NoYW5nZUxvZwotLS0gYS9nY2Mv Q2hhbmdlTG9nCVN1biBKdWwgMDYgMDA6MTY6MzAgMjAwOCArMDAwMAorKysg Yi9nY2MvQ2hhbmdlTG9nCVN1biBKdWwgMDYgMTU6Mjg6MTkgMjAwOCAtMDQw MApAQCAtMSwzICsxLDgxIEBACisyMDA4LTA3LTA1ICBEYW5pZWwgQmVybGlu ICA8ZGJlcmxpbkBkYmVybGluLm9yZz4KKwkKKwlGaXggUFIgdHJlZS1vcHRp bWl6YXRpb24vMjM0NTUKKwlGaXggUFIgdHJlZS1vcHRpbWl6YXRpb24vMzUy ODYKKwlGaXggUFIgdHJlZS1vcHRpbWl6YXRpb24vMzUyODcKKwkqIE1ha2Vm aWxlLmluIChPQkpTLWNvbW1vbik6IFJlbW92ZSB0cmVlLXZuLm8uCisJdHJl ZS12bi5vOiBSZW1vdmUuCisJKiBkYmdjbnQuZGVmOiBBZGQgdHJlZXByZV9p bnNlcnQgZGVidWcgY291bnRlci4KKwkqIGdjYy90cmVlLWZsb3cuaCAoYWRk X3RvX3ZhbHVlKTogVXBkYXRlZCBmb3Igb3RoZXIgY2hhbmdlcy4KKwkoZGVi dWdfdmFsdWVfZXhwcmVzc2lvbnMpOiBEaXR0by4KKwkocHJpbnRfdmFsdWVf ZXhwcmVzc2lvbnMpOiBEaXR0by4KKwkqIHRyZWUtcHJldHR5LXByaW50LmMg KGR1bXBfZ2VuZXJpY19ub2RlKTogVXBkYXRlZCBmb3IKKwlWQUxVRV9IQU5E TEUgcmVtb3ZhbC4KKwkqIHRyZWUtc3NhLWRvbS5jIChyZWNvcmRfZXF1YWxp dHkpOiBEaXR0by4KKwkoY3Byb3Bfb3BlcmFuZCk6IERpdHRvLgorCShsb29r dXBfYXZhaWxfZXhwcik6IERpdHRvLgorCSogdHJlZS1zc2EtdGhyZWFkZWRn ZS5jCisJKHJlY29yZF90ZW1wb3JhcnlfZXF1aXZhbGVuY2VzX2Zyb21fc3Rt dHNfYXRfZGVzdCk6IERpdHRvLgorCShzaW1wbGlmeV9jb250cm9sX3N0bXRf Y29uZGl0aW9uKTogRGl0dG8uCisJKiB0cmVlLmMgKHRyZWVfY29kZV9zaXpl KTogRGl0dG8uCisJKHRyZWVfbm9kZV9zdHJ1Y3R1cmUpOiBEaXR0by4KKwko aXRlcmF0aXZlX2hhc2hfZXhwcik6IERpdHRvLgorCSogdHJlZS5kZWY6IERp dHRvLgorCSogdHJlZS5oIChWQUxVRV9IQU5ETEVfSUQpOiBEaXR0by4KKwko VkFMVUVfSEFORExFX0VYUFJfU0VUKTogRGl0dG8uCisJKHN0cnVjdCB0cmVl X3ZhbHVlX2hhbmRsZSk6IERpdHRvLgorCSh1bmlvbiB0cmVlX25vZGUpOiBE aXR0by4KKwkqIHRyZWVzdHJ1Y3QuZGVmOiBEaXR0by4KKwkqIHRyZWUtdm4u YzogUmVtb3ZlZC4KKwkqIHRyZWUtc3NhLXByZS5jOiBSZXdyaXR0ZW4gZW50 aXJlbHkuCisJKiB0cmVlLXNzYS1zY2N2bi5jIChjb25zdGFudF90b192YWx1 ZV9pZCk6IE5ldyBoYXNodGFibGUuCisJKGNvbnN0YW50X3ZhbHVlX2lkcyk6 IERpdHRvLgorCSh2bl9uYXJ5X29wX3QpOiBNb3ZlZCB0byBoZWFkZXIuCisJ KHZuX3BoaV90KTogRGl0dG8uCisJKHZuX3JlZmVyZW5jZV9vcF90KTogRGl0 dG8KKwkodm5fcmVmZXJlbmNlX3QpOiBEaXR0by4KKwkobmV4dF92YWx1ZV9p ZCk6IE5ldyB2YXJpYWJsZS4KKwkoVk5fSU5GTyk6IEFkZCBhbiBhc3NlcnQu CisJKHZuX2NvbnN0YW50X2VxKTogTmV3IGZ1bmN0aW9uLgorCSh2bl9jb25z dGFudF9oYXNoKTogRGl0dG8uCisJKGdldF9vcl9hbGxvY19jb25zdGFudF92 YWx1ZV9pZCk6IERpdHRvLgorCSh2YWx1ZV9pZF9jb25zdGFudF9wKTogRGl0 dG8uCisJKHZuX3JlZmVyZW5jZV9jb21wdXRlX2hhc2gpOiBEZS1zdGF0aWNp ZnkuCisJKGNvcHlfcmVmZXJlbmNlX29wc19mcm9tX3JlZik6IERvbid0IHVz ZSBnZXRfY2FsbGVlX2ZuZGVjbC4KKwlEaXNhYmxlIHNvbWUgY29kZSB3aXRo IGEgRklYTUUuCisJUmVtb3ZlIFZBTFVFX0hBTkRMRSB1c2UuCisJKHZhbHVl aXplX3JlZnMpOiBVcGRhdGUgb3Bjb2RlIGlmIGl0IGNoYW5nZXMgZnJvbSBz c2EgbmFtZSB0bworCWNvbnN0YW50LgorCSh2bl9yZWZlcmVuY2VfbG9va3Vw XzEpOiBBZGQgbmV3IGFyZ3VtZW50LgorCSh2bl9yZWZlcmVuY2VfbG9va3Vw KTogIERpdHRvLgorCSh2bl9yZWZlcmVuY2VfbG9va3VwX3BpZWNlcyk6IE5l dyBmdW5jdGlvbi4KKwkodm5fcmVmZXJlbmNlX2luc2VydCk6IEFkZCByZXR1 cm4gdHlwZS4gTW9kaWZ5IHRvIGRlYWwgd2l0aCB2YWx1ZQorCWlkcy4KKwko dm5fcmVmZXJlbmNlX2luc2VydF9waWVjZXMpOiAgTmV3IGZ1bmN0aW9uLgor CSh2bl9uYXJ5X29wX2NvbXB1dGVfaGFzaCk6IERlLXN0YXRpY2lmeS4KKwko dm5fbmFyeV9vcF9lcSk6IERpdHRvLgorCSh2bl9uYXJ5X29wX2xvb2t1cF9w aWVjZXMpOiBOZXcgZnVuY3Rpb24uCisJKHZuX25hcnlfb3BfbG9va3VwKTog QWRkIG5ldyBhcmd1bWVudC4gIAorCSh2bl9uYXJ5X29wX2luc2VydF9waWVj ZXMpOiBOZXcgZnVuY3Rpb24uCisJKHZuX25hcnlfb3BfaW5zZXJ0KTogQWRk IHJldHVybiB0eXBlLiBNb2RpZnkgdG8gZGVhbCB3aXRoIHZhbHVlCisJaWRz LgorCSh2bl9waGlfaW5zZXJ0KTogRGl0dG8uCisJKHZpc2l0X3VuYXJ5X29w KTogVXBkYXRlIGZvciBjYWxsZWUgY2hhbmdlcy4KKwkodmlzaXRfYmluYXJ5 X29wKTogRGl0dG8uCisJKHZpc2l0X3JlZmVyZW5jZV9vcF9sb2FkKTogRGl0 dG8uCisJKHZpc2l0X3JlZmVyZW5jZV9vcF9zdG9yZSk6IERpdHRvLgorCShp bml0X3NjY192bik6IEluaXQgbmV4dF92YWx1ZV9pZCwgY29uc3RhbnRfdG9f dmFsdWVfaWQgYW5kIGNvbnN0YW50X3ZhbHVlX2lkcy4KKwkoZnJlZV9zY2Nf dm4pOiBGcmVlIHRoZW0uCisJKHNldF9oYXNodGFibGVfdmFsdWVfaWRzKTog TmV3IGZ1bmN0aW9uLgorCShydW5fc2NjX3ZuKTogVXNlIGl0LgorCShnZXRf bWF4X3ZhbHVlX2lkKTogTmV3IGZ1bmN0aW9uLgorCShnZXRfbmV4dF92YWx1 ZV9pZCk6IERpdHRvLgorCShleHByZXNzaW9uc19lcXVhbF9wKTogTW92ZWQg ZnJvbSB0cmVlLXZuLmMKKwkoc29ydF92dXNlcyk6IERpdHRvLgorCShzb3J0 X3Z1c2VzX2hlYXApOiBEaXR0by4KKwkqIHRyZWUtc3NhLXNjY3ZuLmg6IFN0 cnVjdHVyZXMgbW92ZWQgZnJvbSB0cmVlLXNzYS1zY2N2bi5jIChub3RlZAor CWFib3ZlKS4KKwkKIDIwMDgtMDctMDUgIEFuZHJldyBQaW5za2kgIDxhbmRy ZXdfcGluc2tpQHBsYXlzdGF0aW9uLnNvbnkuY29tPgogCiAJKiBmb2xkLWNv bnN0LmMgKGZvbGRfY29udmVydF9jb25zdCk6IFRyZWF0IE9GRlNFVF9UWVBF IHRoZSBzYW1lIGFzCmRpZmYgLXIgMjMyNTMzMGNlOWVkIGdjYy9NYWtlZmls ZS5pbgotLS0gYS9nY2MvTWFrZWZpbGUuaW4JU3VuIEp1bCAwNiAwMDoxNjoz MCAyMDA4ICswMDAwCisrKyBiL2djYy9NYWtlZmlsZS5pbglTdW4gSnVsIDA2 IDE1OjI4OjE5IDIwMDggLTA0MDAKQEAgLTEyMjIsNyArMTIyMiw2IEBACiAJ dHJlZS12ZWN0LXBhdHRlcm5zLm8gXAogCXRyZWUtdmVjdC10cmFuc2Zvcm0u byBcCiAJdHJlZS12ZWN0b3JpemVyLm8gXAotCXRyZWUtdm4ubyBcCiAJdHJl ZS12cnAubyBcCiAJdHJlZS5vIFwKIAl2YWx1ZS1wcm9mLm8gXApAQCAtMjEw OCwxNiArMjEwNywxNCBAQAogICAgJChTWVNURU1fSCkgJChUUkVFX0gpICQo R0dDX0gpICQoRElBR05PU1RJQ19IKSAkKFRJTUVWQVJfSCkgXAogICAgJChU TV9IKSBjb3JldHlwZXMuaCAkKFRSRUVfRFVNUF9IKSB0cmVlLXBhc3MuaCAk KEZMQUdTX0gpICQoQ0ZHTE9PUF9IKSBcCiAgICBhbGxvYy1wb29sLmggJChC QVNJQ19CTE9DS19IKSBiaXRtYXAuaCAkKEhBU0hUQUJfSCkgJChUUkVFX0dJ TVBMRV9IKSBcCi0gICAkKFRSRUVfSU5MSU5FX0gpIHRyZWUtaXRlcmF0b3Iu aCB0cmVlLXNzYS1zY2N2bi5oICQoUEFSQU1TX0gpCisgICAkKFRSRUVfSU5M SU5FX0gpIHRyZWUtaXRlcmF0b3IuaCB0cmVlLXNzYS1zY2N2bi5oICQoUEFS QU1TX0gpIFwKKyAgICQoREJHQ05UX0gpCiB0cmVlLXNzYS1zY2N2bi5vIDog dHJlZS1zc2Etc2Njdm4uYyAkKFRSRUVfRkxPV19IKSAkKENPTkZJR19IKSBc CiAgICAkKFNZU1RFTV9IKSAkKFRSRUVfSCkgJChHR0NfSCkgJChESUFHTk9T VElDX0gpICQoVElNRVZBUl9IKSBcCiAgICAkKFRNX0gpIGNvcmV0eXBlcy5o ICQoVFJFRV9EVU1QX0gpIHRyZWUtcGFzcy5oICQoRkxBR1NfSCkgJChDRkdM T09QX0gpIFwKICAgIGFsbG9jLXBvb2wuaCAkKEJBU0lDX0JMT0NLX0gpIGJp dG1hcC5oICQoSEFTSFRBQl9IKSAkKFRSRUVfR0lNUExFX0gpIFwKICAgICQo VFJFRV9JTkxJTkVfSCkgdHJlZS1pdGVyYXRvci5oIHRyZWUtc3NhLXByb3Bh Z2F0ZS5oIHRyZWUtc3NhLXNjY3ZuLmggXAogICAgJChQQVJBTVNfSCkKLXRy ZWUtdm4ubyA6IHRyZWUtdm4uYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBj b3JldHlwZXMuaCAkKFRNX0gpICQoR0dDX0gpIFwKLSAgICQoVFJFRV9IKSAk KFRSRUVfRkxPV19IKSAkKEhBU0hUQUJfSCkgbGFuZ2hvb2tzLmggdHJlZS1w YXNzLmggXAotICAgJChUUkVFX0RVTVBfSCkgJChESUFHTk9TVElDX0gpIHRy ZWUtc3NhLXNjY3ZuLmgKIHRyZWUtdnJwLm8gOiB0cmVlLXZycC5jICQoQ09O RklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oICQoVE1fSCkgJChUUkVF X0gpIFwKICAgICQoVFJFRV9GTE9XX0gpIHRyZWUtcGFzcy5oICQoVFJFRV9E VU1QX0gpICQoRElBR05PU1RJQ19IKSAkKEdHQ19IKSBcCiAgICAkKEJBU0lD X0JMT0NLX0gpIHRyZWUtc3NhLXByb3BhZ2F0ZS5oICQoRkxBR1NfSCkgJChU UkVFX0RVTVBfSCkgXApkaWZmIC1yIDIzMjUzMzBjZTllZCBnY2MvZGJnY250 LmRlZgotLS0gYS9nY2MvZGJnY250LmRlZglTdW4gSnVsIDA2IDAwOjE2OjMw IDIwMDggKzAwMDAKKysrIGIvZ2NjL2RiZ2NudC5kZWYJU3VuIEp1bCAwNiAx NToyODoxOSAyMDA4IC0wNDAwCkBAIC0xNjYsNiArMTY2LDcgQEAKIERFQlVH X0NPVU5URVIgKGxvY2FsX2FsbG9jX2Zvcl9zY2hlZCkKIERFQlVHX0NPVU5U RVIgKHBvc3RyZWxvYWRfY3NlKQogREVCVUdfQ09VTlRFUiAocHJlX2luc24p CitERUJVR19DT1VOVEVSICh0cmVlcHJlX2luc2VydCkKIERFQlVHX0NPVU5U RVIgKHNjaGVkMl9mdW5jKQogREVCVUdfQ09VTlRFUiAoc2NoZWRfYmxvY2sp CiBERUJVR19DT1VOVEVSIChzY2hlZF9mdW5jKQpAQCAtMTc0LDQgKzE3NSwz IEBACiBERUJVR19DT1VOVEVSIChzbXNfc2NoZWRfbG9vcCkKIERFQlVHX0NP VU5URVIgKHNwbGl0X2Zvcl9zY2hlZDIpCiBERUJVR19DT1VOVEVSICh0YWls X2NhbGwpCi0KZGlmZiAtciAyMzI1MzMwY2U5ZWQgZ2NjL3Rlc3RzdWl0ZS9n Y2MuYy10b3J0dXJlL2NvbXBpbGUvMjAwODA3MDQtMS5jCi0tLSAvZGV2L251 bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmMtdG9ydHVyZS9jb21waWxlLzIwMDgwNzA0LTEuYwlT dW4gSnVsIDA2IDE1OjI4OjE5IDIwMDggLTA0MDAKQEAgLTAsMCArMSw0MyBA QAorLyogVGhpcyBjb2RlIHVzZWQgdG8gY3Jhc2ggZm9sZF9jb252ZXJ0IGR1 ZSB0byBQUkUKKyAgIHdhbnRpbmcgdG8gZm9sZF9jb252ZXJ0IGZyb20gYSBS RUFfVFlQRSB0byBhbiBJTlRFR0VSX1RZUEUuICAqLwordHlwZWRlZiB1bnNp Z25lZCBpbnQgdWludDMyX3Q7Cit1bmlvbiBkb3VibGVfdW5pb24KK3sKKyAg ZG91YmxlIGQ7CisgIHVpbnQzMl90IGlbMl07Cit9Oworc3RydWN0IF9Kdl9y ZWVudAoreworICBpbnQgX2Vycm5vOworfTsKK19Kdl9zdHJ0b2RfciAoc3Ry dWN0IF9Kdl9yZWVudCAqcHRyLCBjaGFyICoqc2UpCit7CisgIGludCBiYjIs IHNpZ247CisgIGRvdWJsZSBhYWRqLCBhYWRqMSwgYWRqOworICB1bnNpZ25l ZCBsb25nIHksIHo7CisgIHVuaW9uIGRvdWJsZV91bmlvbiBydiwgKmJzID0g KCh2b2lkICopIDApLCAqZGVsdGEgPSAoKHZvaWQgKikgMCk7CisgIHsKKyAg b3ZmbDpwdHItPl9lcnJubyA9IDM0OworICAgIHsKKyAgICAgICgoKHVpbnQz Ml90KSAweGZmZmZmTCkgfCAoKHVpbnQzMl90KSAweDEwMDAwMEwpICogKDEw MjQgKyAxMDIzIC0gMSkpOworICAgIH0KKyAgICBpZiAoKGFhZGogPSBfSnZf cmF0aW8gKGRlbHRhLCBicykpIDw9IDIuKQorICAgICAgeworCXsKKwkgIGlm IChhYWRqIDwgMi4gLyAyKQorCSAgICBhYWRqID0gMS4gLyAyOworCSAgYWFk ajEgPSAtYWFkajsKKwl9CisgICAgICB9CisgICAgeworICAgICAgKHJ2Lmlb MV0pIC09IDUzICogKCh1aW50MzJfdCkgMHgxMDAwMDBMKTsKKyAgICAgIGFk aiA9IGFhZGoxICogX0p2X3VscCAocnYuZCk7CisgICAgICBydi5kICs9IGFk ajsKKyAgICAgIGlmICgoKHJ2LmlbMV0pICYgKCh1aW50MzJfdCkgMHg3ZmYw MDAwMEwpKSA+PQorCSAgKCh1aW50MzJfdCkgMHgxMDAwMDBMKSAqICgxMDI0 ICsgMTAyMyAtIDUzKSkKKwl7CisJICBnb3RvIG92Zmw7CisJfQorICAgIH0K KyAgfQorfQpkaWZmIC1yIDIzMjUzMzBjZTllZCBnY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9sb2FkcHJlMjQuYwotLS0gYS9nY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS9sb2FkcHJlMjQuYwlTdW4gSnVsIDA2IDAwOjE2 OjMwIDIwMDggKzAwMDAKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJl ZS1zc2EvbG9hZHByZTI0LmMJU3VuIEp1bCAwNiAxNToyODoxOSAyMDA4IC0w NDAwCkBAIC0xOCw3ICsxOCw3IEBACiAgIHJldHVybiBkICsgZTsKIH0KIAot LyogUFJFIG9mIGdsb2JhbHMgZG9lc24ndCB3b3JrLiAgKi8KKy8qIFdlIHdp bGwgbW92ZSB0aGUgbG9hZCBvZiBhIG91dCBvZiB0aGUgbG9vcC4gICovCiAK LS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiRWxpbWlu YXRlZDogMSIgMSAicHJlIiB7IHhmYWlsICotKi0qIH0gfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIkVsaW1pbmF0ZWQ6 IDEiIDEgInByZSIgfSB9ICovCiAvKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10 cmVlLWR1bXAgInByZSIgfSB9ICovCmRpZmYgLXIgMjMyNTMzMGNlOWVkIGdj Yy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ByMjM0NTUuYwotLS0gL2Rl di9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjIzNDU1LmMJU3VuIEp1 bCAwNiAxNToyODoxOSAyMDA4IC0wNDAwCkBAIC0wLDAgKzEsMjMgQEAKKy8q IHsgZGctZG8gY29tcGlsZSB9ICovIAorLyogeyBkZy1vcHRpb25zICItTzIg LWZkdW1wLXRyZWUtcHJlLXN0YXRzIiB9ICovCit1bnNpZ25lZCBsb25nIG91 dGNudDsKK2V4dGVybiB2b2lkIGZsdXNoX291dGJ1Zih2b2lkKTsKKwordm9p ZAorYmlfd2luZHVwKHVuc2lnbmVkIGludCAqb3V0YnVmLCB1bnNpZ25lZCBp bnQgYmlfYnVmKQoreworICAgIHVuc2lnbmVkIGxvbmcgdDEgPSBvdXRjbnQ7 CisgICAgb3V0YnVmW3QxXSA9IGJpX2J1ZjsKKworICAgIHVuc2lnbmVkIGxv bmcgdDIgPSBvdXRjbnQ7CisgICAgaWYgKHQyID09IDE2Mzg0KQorICAgICAg Zmx1c2hfb3V0YnVmKCk7CisKKyAgICB1bnNpZ25lZCBsb25nIHQzID0gb3V0 Y250OworICAgIG91dGJ1Zlt0M10gPSBiaV9idWY7Cit9CisvKiBXZSBzaG91 bGQgZWxpbWluYXRlIG9uZSBsb2FkIG9mIG91dGNudCwgd2hpY2ggd2lsbCBp biB0dXJuIGxldCB1cyBlbGltaW5hdGUKKyAgIG9uZSBtdWx0aXBseSBvZiBv dXRjbnQgd2hpY2ggd2lsbCBpbiB0dXJuIGxldCB1cyBlbGltaW5hdGUKKyAg IG9uZSBhZGQgaW52b2x2aW5nIG91dGNudCBhbmQgb3V0YnVmLiAgKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiRWxpbWluYXRl ZDogMyIgMSAicHJlIn0gfSAqLworLyogeyBkZy1maW5hbCB7IGNsZWFudXAt dHJlZS1kdW1wICJwcmUiIH0gfSAqLwpkaWZmIC1yIDIzMjUzMzBjZTllZCBn Y2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9wcjM1Mjg2LmMKLS0tIC9k ZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvcHIzNTI4Ni5jCVN1biBK dWwgMDYgMTU6Mjg6MTkgMjAwOCAtMDQwMApAQCAtMCwwICsxLDIzIEBACisv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLyAKKy8qIHsgZGctb3B0aW9ucyAiLU8y IC1mZHVtcC10cmVlLXByZS1zdGF0cyIgfSAqLworaW50IGcyOworc3RydWN0 IEEgeworICAgIGludCBhOyBpbnQgYjsKK31nMTsKK2ludCBmb28oaW50IGEs IGludCBiKQoreworICBpZiAoYSA+IDApCisgICAgeworICAgICAgZzEuYSA9 IGErIGI7CisgICAgfQorICBlbHNlCisgICAgZzEuYSA9IGI7CisKKyAgZzIg PSBhK2I7CisKKyAgcmV0dXJuIGcxLmE7Cit9CisvKiBXZSB3aWxsIGVsaW1p bmF0ZSB0aGUgZzEuYSBmcm9tIHRoZSByZXR1cm4gc3RhdGVtZW50IGFzIGZ1 bGx5IHJlZHVuZGFudCwKKyAgIGFuZCByZW1vdmUgb25lIGNhbGN1bGF0aW9u IG9mIGEgKyBiLiAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJFbGltaW5hdGVkOiAyIiAxICJwcmUifSB9ICovCisvKiB7IGRn LWZpbmFsIHsgY2xlYW51cC10cmVlLWR1bXAgInByZSIgfSB9ICovCmRpZmYg LXIgMjMyNTMzMGNlOWVkIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3Nh L3ByMzUyODcuYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAg MTk3MCArMDAwMAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNz YS9wcjM1Mjg3LmMJU3VuIEp1bCAwNiAxNToyODoxOSAyMDA4IC0wNDAwCkBA IC0wLDAgKzEsMTUgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovIAorLyog eyBkZy1vcHRpb25zICItTzIgLWZkdW1wLXRyZWUtcHJlLXN0YXRzIiB9ICov CitpbnQgKmdwOworaW50IGZvbyhpbnQgcCkKK3sKKyAgaW50IHQgPSAwOwor ICBpZiAocCkKKyAgICB0ID0gKmdwICsgMTsKKworICByZXR1cm4gKCpncCAr IHQpOworfQorCisvKiBXZSB3aWxsIGVsaW1pbmF0ZSBvbmUgbG9hZCBvZiBn cCBhbmQgb25lIGluZGlyZWN0IGxvYWQgb2YgKmdwLiAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJFbGltaW5hdGVkOiAyIiAx ICJwcmUifSB9ICovCisvKiB7IGRnLWZpbmFsIHsgY2xlYW51cC10cmVlLWR1 bXAgInByZSIgfSB9ICovCmRpZmYgLXIgMjMyNTMzMGNlOWVkIGdjYy90cmVl LWZsb3cuaAotLS0gYS9nY2MvdHJlZS1mbG93LmgJU3VuIEp1bCAwNiAwMDox NjozMCAyMDA4ICswMDAwCisrKyBiL2djYy90cmVlLWZsb3cuaAlTdW4gSnVs IDA2IDE1OjI4OjE5IDIwMDggLTA0MDAKQEAgLTExMjQsOSArMTEyNCwxMCBA QAogZXh0ZXJuIGJvb2wgbWF5YmVfY2xlYW5fb3JfcmVwbGFjZV9laF9zdG10 ICh0cmVlLCB0cmVlKTsKIAogLyogSW4gdHJlZS1zc2EtcHJlLmMgICovCi12 b2lkIGFkZF90b192YWx1ZSAodHJlZSwgdHJlZSk7Ci12b2lkIGRlYnVnX3Zh bHVlX2V4cHJlc3Npb25zICh0cmVlKTsKLXZvaWQgcHJpbnRfdmFsdWVfZXhw cmVzc2lvbnMgKEZJTEUgKiwgdHJlZSk7CitzdHJ1Y3QgcHJlX2V4cHJfZDsK K3ZvaWQgYWRkX3RvX3ZhbHVlICh1bnNpZ25lZCBpbnQsIHN0cnVjdCBwcmVf ZXhwcl9kICopOwordm9pZCBkZWJ1Z192YWx1ZV9leHByZXNzaW9ucyAodW5z aWduZWQgaW50KTsKK3ZvaWQgcHJpbnRfdmFsdWVfZXhwcmVzc2lvbnMgKEZJ TEUgKiwgdW5zaWduZWQgaW50KTsKIAogCiAvKiBJbiB0cmVlLXZuLmMgICov CmRpZmYgLXIgMjMyNTMzMGNlOWVkIGdjYy90cmVlLXByZXR0eS1wcmludC5j Ci0tLSBhL2djYy90cmVlLXByZXR0eS1wcmludC5jCVN1biBKdWwgMDYgMDA6 MTY6MzAgMjAwOCArMDAwMAorKysgYi9nY2MvdHJlZS1wcmV0dHktcHJpbnQu YwlTdW4gSnVsIDA2IDE1OjI4OjE5IDIwMDggLTA0MDAKQEAgLTk1MiwxNiAr OTUyLDEyIEBACiAJcHBfY2hhcmFjdGVyIChidWZmZXIsICcpJyk7CiAgICAg ICBwcF9zdHJpbmcgKGJ1ZmZlciwgc3RyKTsKICAgICAgIGR1bXBfZ2VuZXJp Y19ub2RlIChidWZmZXIsIFRSRUVfT1BFUkFORCAobm9kZSwgMSksIHNwYywg ZmxhZ3MsIGZhbHNlKTsKLQotICAgICAgaWYgKFRSRUVfQ09ERSAob3AwKSAh PSBWQUxVRV9IQU5ETEUpCisgICAgICBvcDAgPSBjb21wb25lbnRfcmVmX2Zp ZWxkX29mZnNldCAobm9kZSk7CisgICAgICBpZiAob3AwICYmIFRSRUVfQ09E RSAob3AwKSAhPSBJTlRFR0VSX0NTVCkKIAl7Ci0JICBvcDAgPSBjb21wb25l bnRfcmVmX2ZpZWxkX29mZnNldCAobm9kZSk7Ci0JICBpZiAob3AwICYmIFRS RUVfQ09ERSAob3AwKSAhPSBJTlRFR0VSX0NTVCkKLQkgICAgewotCSAgICAg IHBwX3N0cmluZyAoYnVmZmVyLCAie29mZjogIik7CisJICBwcF9zdHJpbmcg KGJ1ZmZlciwgIntvZmY6ICIpOwogCSAgICAgIGR1bXBfZ2VuZXJpY19ub2Rl IChidWZmZXIsIG9wMCwgc3BjLCBmbGFncywgZmFsc2UpOwogCSAgICAgIHBw X2NoYXJhY3RlciAoYnVmZmVyLCAnfScpOwotCSAgICB9CiAJfQogICAgICAg YnJlYWs7CiAKQEAgLTE3ODksMTAgKzE3ODUsNiBAQAogICAgICAgcHBfc3Ry aW5nIChidWZmZXIsICI+Iik7CiAgICAgICBicmVhazsKIAotICAgIGNhc2Ug VkFMVUVfSEFORExFOgotICAgICAgcHBfcHJpbnRmIChidWZmZXIsICJWSC4l ZCIsIFZBTFVFX0hBTkRMRV9JRCAobm9kZSkpOwotICAgICAgYnJlYWs7Ci0K ICAgICBjYXNlIEFTU0VSVF9FWFBSOgogICAgICAgcHBfc3RyaW5nIChidWZm ZXIsICJBU1NFUlRfRVhQUiA8Iik7CiAgICAgICBkdW1wX2dlbmVyaWNfbm9k ZSAoYnVmZmVyLCBBU1NFUlRfRVhQUl9WQVIgKG5vZGUpLCBzcGMsIGZsYWdz LCBmYWxzZSk7CmRpZmYgLXIgMjMyNTMzMGNlOWVkIGdjYy90cmVlLXNzYS1k b20uYwotLS0gYS9nY2MvdHJlZS1zc2EtZG9tLmMJU3VuIEp1bCAwNiAwMDox NjozMCAyMDA4ICswMDAwCisrKyBiL2djYy90cmVlLXNzYS1kb20uYwlTdW4g SnVsIDA2IDE1OjI4OjE5IDIwMDggLTA0MDAKQEAgLTExNjMsNyArMTE2Myw3 IEBACiAgICAgcHJldl94ID0geCwgeCA9IHksIHkgPSBwcmV2X3gsIHByZXZf eCA9IHByZXZfeTsKICAgZWxzZSBpZiAocHJldl94ICYmIGlzX2dpbXBsZV9t aW5faW52YXJpYW50IChwcmV2X3gpKQogICAgIHggPSB5LCB5ID0gcHJldl94 LCBwcmV2X3ggPSBwcmV2X3k7Ci0gIGVsc2UgaWYgKHByZXZfeSAmJiBUUkVF X0NPREUgKHByZXZfeSkgIT0gVkFMVUVfSEFORExFKQorICBlbHNlIGlmIChw cmV2X3kpCiAgICAgeSA9IHByZXZfeTsKIAogICAvKiBBZnRlciB0aGUgc3dh cHBpbmcsIHdlIG11c3QgaGF2ZSBvbmUgU1NBX05BTUUuICAqLwpAQCAtMTYy OSw3ICsxNjI5LDcgQEAKICAgICAgY29weSBvZiBzb21lIG90aGVyIHZhcmlh YmxlLCB1c2UgdGhlIHZhbHVlIG9yIGNvcHkgc3RvcmVkIGluCiAgICAgIENP TlNUX0FORF9DT1BJRVMuICAqLwogICB2YWwgPSBTU0FfTkFNRV9WQUxVRSAo b3ApOwotICBpZiAodmFsICYmIHZhbCAhPSBvcCAmJiBUUkVFX0NPREUgKHZh bCkgIT0gVkFMVUVfSEFORExFKQorICBpZiAodmFsICYmIHZhbCAhPSBvcCkK ICAgICB7CiAgICAgICB0cmVlIG9wX3R5cGUsIHZhbF90eXBlOwogCkBAIC0x OTY5LDcgKzE5NjksNyBAQAogICBpZiAoVFJFRV9DT0RFIChsaHMpID09IFNT QV9OQU1FKQogICAgIHsKICAgICAgIHRlbXAgPSBTU0FfTkFNRV9WQUxVRSAo bGhzKTsKLSAgICAgIGlmICh0ZW1wICYmIFRSRUVfQ09ERSAodGVtcCkgIT0g VkFMVUVfSEFORExFKQorICAgICAgaWYgKHRlbXApCiAJbGhzID0gdGVtcDsK ICAgICB9CiAKZGlmZiAtciAyMzI1MzMwY2U5ZWQgZ2NjL3RyZWUtc3NhLXBy ZS5jCi0tLSBhL2djYy90cmVlLXNzYS1wcmUuYwlTdW4gSnVsIDA2IDAwOjE2 OjMwIDIwMDggKzAwMDAKKysrIGIvZ2NjL3RyZWUtc3NhLXByZS5jCVN1biBK dWwgMDYgMTU6Mjg6MTkgMjAwOCAtMDQwMApAQCAtNDYsNiArNDYsNyBAQAog I2luY2x1ZGUgImNmZ2xvb3AuaCIKICNpbmNsdWRlICJ0cmVlLXNzYS1zY2N2 bi5oIgogI2luY2x1ZGUgInBhcmFtcy5oIgorI2luY2x1ZGUgImRiZ2NudC5o IgogCiAvKiBUT0RPOgogCkBAIC0xMTYsMTU1ICsxMTcsMTc4IEBACiAKIC8q IFJlcHJlc2VudGF0aW9ucyBvZiB2YWx1ZSBudW1iZXJzOgogCi0gICBWYWx1 ZSBudW1iZXJzIGFyZSByZXByZXNlbnRlZCB1c2luZyB0aGUgInZhbHVlIGhh bmRsZSIgYXBwcm9hY2guCi0gICBUaGlzIG1lYW5zIHRoYXQgZWFjaCBTU0Ff TkFNRSAoYW5kIGZvciBvdGhlciByZWFzb25zIHRvIGJlCi0gICBkaXNjbG9z ZWQgaW4gYSBtb21lbnQsIGV4cHJlc3Npb24gbm9kZXMpIGhhcyBhIHZhbHVl IGhhbmRsZSB0aGF0Ci0gICBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggZ2V0 X3ZhbHVlX2hhbmRsZS4gIFRoaXMgdmFsdWUgaGFuZGxlICppcyoKLSAgIHRo ZSB2YWx1ZSBudW1iZXIgb2YgdGhlIFNTQV9OQU1FLiAgWW91IGNhbiBwb2lu dGVyIGNvbXBhcmUgdGhlCi0gICB2YWx1ZSBoYW5kbGVzIGZvciBlcXVpdmFs ZW5jZSBwdXJwb3Nlcy4KLQotICAgRm9yIGRlYnVnZ2luZyByZWFzb25zLCB0 aGUgdmFsdWUgaGFuZGxlIGlzIGludGVybmFsbHkgbW9yZSB0aGFuCi0gICBq dXN0IGEgbnVtYmVyLCBpdCBpcyBhIFZBTFVFX0hBTkRMRSBuYW1lZCAiVkgu eCIsIHdoZXJlIHggaXMgYQotICAgdW5pcXVlIG51bWJlciBmb3IgZWFjaCB2 YWx1ZSBudW1iZXIgaW4gdXNlLiAgVGhpcyBhbGxvd3MKLSAgIGV4cHJlc3Np b25zIHdpdGggU1NBX05BTUVTIHJlcGxhY2VkIGJ5IHZhbHVlIGhhbmRsZXMg dG8gc3RpbGwgYmUKLSAgIHByZXR0eSBwcmludGVkIGluIGEgc2FuZSB3YXku ICBUaGV5IHNpbXBseSBwcmludCBhcyAiVkguMyAqCi0gICBWSC41IiwgZXRj LgotCi0gICBFeHByZXNzaW9uIG5vZGVzIGhhdmUgdmFsdWUgaGFuZGxlcyBh c3NvY2lhdGVkIHdpdGggdGhlbSBhcyBhCi0gICBjYWNoZS4gIE90aGVyd2lz ZSwgd2UnZCBoYXZlIHRvIGxvb2sgdGhlbSB1cCBhZ2FpbiBpbiB0aGUgaGFz aAotICAgdGFibGUuICBUaGlzIG1ha2VzIHNpZ25pZmljYW50IGRpZmZlcmVu Y2UgKGZhY3RvciBvZiB0d28gb3IgbW9yZSkgb24KLSAgIHNvbWUgdGVzdCBj YXNlcy4gIFRoZXkgY2FuIGJlIHRocm93biBhd2F5IGFmdGVyIHRoZSBwYXNz IGlzCi0gICBmaW5pc2hlZC4gICovCisgICBWYWx1ZSBudW1iZXJzIGFyZSBy ZXByZXNlbnRlZCBieSBhIHJlcHJlc2VudGF0aXZlIFNTQV9OQU1FLiAgV2UK KyAgIHdpbGwgY3JlYXRlIGZha2UgU1NBX05BTUUncyBpbiBzaXR1YXRpb25z IHdoZXJlIHdlIG5lZWQgYQorICAgcmVwcmVzZW50YXRpdmUgYnV0IGRvIG5v dCBoYXZlIG9uZSAoYmVjYXVzZSBpdCBpcyBhIGNvbXBsZXgKKyAgIGV4cHJl c3Npb24pLiAgSW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSBzdG9yaW5nIHRoZSB2 YWx1ZSBudW1iZXJzIGluCisgICBiaXRtYXBzLCBhbmQga2VlcCB0aGUgbnVt YmVyIG9mIHdhc3RlZCBTU0FfTkFNRSdzIGRvd24sIHdlIGFsc28KKyAgIGFz c29jaWF0ZSBhIHZhbHVlX2lkIHdpdGggZWFjaCB2YWx1ZSBudW1iZXIsIGFu ZCBjcmVhdGUgZnVsbCBibG93bgorICAgc3NhX25hbWUncyBvbmx5IHdoZXJl IHdlIGFjdHVhbGx5IG5lZWQgdGhlbSAoSUUgaW4gb3BlcmFuZHMgb2YKKyAg IGV4aXN0aW5nIGV4cHJlc3Npb25zKS4gIAorCisgICBUaGVvcmV0aWNhbGx5 IHlvdSBjb3VsZCByZXBsYWNlIGFsbCB0aGUgdmFsdWVfaWQncyB3aXRoCisg ICBTU0FfTkFNRV9WRVJTSU9OLCBidXQgdGhpcyB3b3VsZCBhbGxvY2F0ZSBh IGxhcmdlIG51bWJlciBvZgorICAgU1NBX05BTUUncyAod2hpY2ggYXJlIGVh Y2ggPiAzMCBieXRlcykganVzdCB0byBnZXQgYSA0IGJ5dGUgbnVtYmVyLgor ICAgSXQgd291bGQgYWxzbyByZXF1aXJlIGFuIGFkZGl0aW9uYWwgaW5kaXJl Y3Rpb24gYXQgZWFjaCBwb2ludCB3ZQorICAgdXNlIHRoZSB2YWx1ZSBpZC4g ICovCiAKIC8qIFJlcHJlc2VudGF0aW9uIG9mIGV4cHJlc3Npb25zIG9uIHZh bHVlIG51bWJlcnM6CiAKLSAgIEluIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBj b2RlLCB5b3Ugd2lsbCBub3RpY2Ugd2UgYWxsb2NhdGUgImZha2UiCi0gICBh bmFsb2d1ZXMgdG8gdGhlIGV4cHJlc3Npb24gd2UgYXJlIHZhbHVlIG51bWJl cmluZywgYW5kIHJlcGxhY2UgdGhlCi0gICBvcGVyYW5kcyB3aXRoIHRoZSB2 YWx1ZXMgb2YgdGhlIGV4cHJlc3Npb24uICBTaW5jZSB3ZSB3b3JrIG9uCi0g ICB2YWx1ZXMsIGFuZCBub3QganVzdCBuYW1lcywgd2UgY2Fub25pY2FsaXpl IGV4cHJlc3Npb25zIHRvIHZhbHVlCi0gICBleHByZXNzaW9ucyBmb3IgdXNl IGluIHRoZSBBTlRJQyBzZXRzLCB0aGUgRVhQX0dFTiBzZXQsIGV0Yy4KLQot ICAgVGhpcyBpcyB0aGVvcmV0aWNhbGx5IHVubmVjZXNzYXJ5LCBpdCBqdXN0 IHNhdmVzIGEgYnVuY2ggb2YKLSAgIHJlcGVhdGVkIGdldF92YWx1ZV9oYW5k bGUgYW5kIGZpbmRfbGVhZGVyIGNhbGxzIGluIHRoZSByZW1haW5kZXIgb2YK LSAgIHRoZSBjb2RlLCB0cmFkaW5nIG9mZiB0ZW1wb3JhcnkgbWVtb3J5IHVz YWdlIGZvciBzcGVlZC4gIFRoZSB0cmVlCi0gICBub2RlcyBhcmVuJ3QgYWN0 dWFsbHkgY3JlYXRpbmcgbW9yZSBnYXJiYWdlLCBzaW5jZSB0aGV5IGFyZQot ICAgYWxsb2NhdGVkIGluIGEgc3BlY2lhbCBwb29scyB3aGljaCBhcmUgdGhy b3duIGF3YXkgYXQgdGhlIGVuZCBvZgotICAgdGhpcyBwYXNzLgotCi0gICBB bGwgb2YgdGhpcyBhbHNvIG1lYW5zIHRoYXQgaWYgeW91IHByaW50IHRoZSBF WFBfR0VOIG9yIEFOVElDIHNldHMsCi0gICB5b3Ugd2lsbCBzZWUgIlZILjUg KyBWSC43IiBpbiB0aGUgc2V0LCBpbnN0ZWFkIG9mICJhXzU1ICsKLSAgIGJf NjYiIG9yIHNvbWV0aGluZy4gIFRoZSBvbmx5IHRoaW5nIHRoYXQgYWN0dWFs bHkgY2FyZXMgYWJvdXQKLSAgIHNlZWluZyB0aGUgdmFsdWUgbGVhZGVycyBp cyBwaGkgdHJhbnNsYXRpb24sIGFuZCBpdCBuZWVkcyB0byBiZQotICAgYWJs ZSB0byBmaW5kIHRoZSBsZWFkZXIgZm9yIGEgdmFsdWUgaW4gYW4gYXJiaXRy YXJ5IGJsb2NrLCBzbyB0aGlzCi0gICAidmFsdWUgZXhwcmVzc2lvbiIgZm9y bSBpcyBwZXJmZWN0IGZvciBpdCAob3RoZXJ3aXNlIHlvdSdkIGRvCi0gICBn ZXRfdmFsdWVfaGFuZGxlLT5maW5kX2xlYWRlci0+dHJhbnNsYXRlLT5nZXRf dmFsdWVfaGFuZGxlLT5maW5kX2xlYWRlcikuKi8KLQorICAgRXhwcmVzc2lv bnMgY29uc2lzdGluZyBvZiAgdmFsdWUgbnVtYmVycyBhcmUgcmVwcmVzZW50 ZWQgdGhlIHNhbWUKKyAgIHdheSBhcyBvdXIgVk4gaW50ZXJuYWxseSByZXBy ZXNlbnRzIHRoZW0sIHdpdGggYW4gYWRkaXRpb25hbAorICAgInByZV9leHBy IiB3cmFwcGluZyBhcm91bmQgdGhlbSBpbiBvcmRlciB0byBmYWNpbGl0YXRl IHN0b3JpbmcgYWxsCisgICBvZiB0aGUgZXhwcmVzc2lvbnMgaW4gdGhlIHNh bWUgc2V0cy4gICovCiAKIC8qIFJlcHJlc2VudGF0aW9uIG9mIHNldHM6CiAK LSAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIHR5cGVzIG9mIHNldHMgdXNl ZCwgaG9wZWZ1bGx5IHRvIGJlIHVuaWZpZWQgc29vbi4KLSAgIFRoZSBBVkFJ TCBzZXRzIGRvIG5vdCBuZWVkIHRvIGJlIHNvcnRlZCBpbiBhbnkgcGFydGlj dWxhciBvcmRlciwKLSAgIGFuZCB0aHVzLCBhcmUgc2ltcGx5IHJlcHJlc2Vu dGVkIGFzIHR3byBiaXRtYXBzLCBvbmUgdGhhdCBrZWVwcwotICAgdHJhY2sg b2YgdmFsdWVzIHByZXNlbnQgaW4gdGhlIHNldCwgYW5kIG9uZSB0aGF0IGtl ZXBzIHRyYWNrIG9mCi0gICBleHByZXNzaW9ucyBwcmVzZW50IGluIHRoZSBz ZXQuCi0KLSAgIFRoZSBvdGhlciBzZXRzIGFyZSByZXByZXNlbnRlZCBhcyBk b3VibHkgbGlua2VkIGxpc3RzIGtlcHQgaW4gdG9wb2xvZ2ljYWwKLSAgIG9y ZGVyLCB3aXRoIGFuIG9wdGlvbmFsIHN1cHBvcnRpbmcgYml0bWFwIG9mIHZh bHVlcyBwcmVzZW50IGluIHRoZQotICAgc2V0LiAgVGhlIHNldHMgcmVwcmVz ZW50IHZhbHVlcywgYW5kIHRoZSBlbGVtZW50cyBjYW4gYmUgdmFsdWVzIG9y Ci0gICBleHByZXNzaW9ucy4gIFRoZSBlbGVtZW50cyBjYW4gYXBwZWFyIGlu IGRpZmZlcmVudCBzZXRzLCBidXQgZWFjaAotICAgZWxlbWVudCBjYW4gb25s eSBhcHBlYXIgb25jZSBpbiBlYWNoIHNldC4KLQotICAgU2luY2UgZWFjaCBu b2RlIGluIHRoZSBzZXQgcmVwcmVzZW50cyBhIHZhbHVlLCB3ZSBhbHNvIHdh bnQgdG8gYmUKLSAgIGFibGUgdG8gbWFwIGV4cHJlc3Npb24sIHNldCBwYWly cyB0byBzb21ldGhpbmcgdGhhdCB0ZWxscyB1cwotICAgd2hldGhlciB0aGUg dmFsdWUgaXMgcHJlc2VudCBpcyBhIHNldC4gIFdlIHVzZSBhIHBlci1zZXQg Yml0bWFwIGZvcgotICAgdGhhdC4gIFRoZSB2YWx1ZSBoYW5kbGVzIGFsc28g cG9pbnQgdG8gYSBsaW5rZWQgbGlzdCBvZiB0aGUKLSAgIGV4cHJlc3Npb25z IHRoZXkgcmVwcmVzZW50IHZpYSBhIHRyZWUgYW5ub3RhdGlvbi4gIFRoaXMg aXMgbWFpbmx5Ci0gICB1c2VmdWwgb25seSBmb3IgZGVidWdnaW5nLCBzaW5j ZSB3ZSBkb24ndCBkbyBpZGVudGl0eSBsb29rdXBzLiAgKi8KKyAgIFRoZSBk YXRhZmxvdyBzZXRzIGRvIG5vdCBuZWVkIHRvIGJlIHNvcnRlZCBpbiBhbnkg cGFydGljdWxhciBvcmRlcgorICAgZm9yIHRoZSBtYWpvcml0eSBvZiB0aGVp ciBsaWZldGltZSwgYXJlIHNpbXBseSByZXByZXNlbnRlZCBhcyB0d28KKyAg IGJpdG1hcHMsIG9uZSB0aGF0IGtlZXBzIHRyYWNrIG9mIHZhbHVlcyBwcmVz ZW50IGluIHRoZSBzZXQsIGFuZCBvbmUKKyAgIHRoYXQga2VlcHMgdHJhY2sg b2YgZXhwcmVzc2lvbnMgcHJlc2VudCBpbiB0aGUgc2V0LgorCisgICBXaGVu IHdlIG5lZWQgdGhlbSBpbiB0b3BvbG9naWNhbCBvcmRlciwgd2UgcHJvZHVj ZSBpdCBvbiBkZW1hbmQgYnkKKyAgIHRyYW5zZm9ybWluZyB0aGUgYml0bWFw IGludG8gYW4gYXJyYXkgYW5kIHNvcnRpbmcgaXQgaW50byB0b3BvCisgICBv cmRlci4gICovCisKKy8qIFR5cGUgb2YgZXhwcmVzc2lvbiwgdXNlZCB0byBr bm93IHdoaWNoIG1lbWJlciBvZiB0aGUgUFJFX0VYUFIgdW5pb24KKyAgIGlz IHZhbGlkLiAgKi8KKworZW51bSBwcmVfZXhwcl9raW5kCit7CisgICAgTkFN RSwKKyAgICBOQVJZLAorICAgIFJFRkVSRU5DRSwKKyAgICBDT05TVEFOVAor fTsKKwordHlwZWRlZiB1bmlvbiBwcmVfZXhwcl91bmlvbl9kCit7CisgIHRy ZWUgbmFtZTsKKyAgdHJlZSBjb25zdGFudDsKKyAgdm5fbmFyeV9vcF90IG5h cnk7CisgIHZuX3JlZmVyZW5jZV90IHJlZmVyZW5jZTsKK30gcHJlX2V4cHJf dW5pb247CisKK3R5cGVkZWYgc3RydWN0IHByZV9leHByX2QKK3sKKyAgZW51 bSBwcmVfZXhwcl9raW5kIGtpbmQ7CisgIHVuc2lnbmVkIGludCBpZDsKKyAg cHJlX2V4cHJfdW5pb24gdTsKK30gKnByZV9leHByOworCisjZGVmaW5lIFBS RV9FWFBSX05BTUUoZSkgKGUpLT51Lm5hbWUKKyNkZWZpbmUgUFJFX0VYUFJf TkFSWShlKSAoZSktPnUubmFyeQorI2RlZmluZSBQUkVfRVhQUl9SRUZFUkVO Q0UoZSkgKGUpLT51LnJlZmVyZW5jZQorI2RlZmluZSBQUkVfRVhQUl9DT05T VEFOVChlKSAoZSktPnUuY29uc3RhbnQKKworc3RhdGljIGludAorcHJlX2V4 cHJfZXEgKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikgCit7Cisg IGNvbnN0IHN0cnVjdCBwcmVfZXhwcl9kICplMSA9IChjb25zdCBzdHJ1Y3Qg cHJlX2V4cHJfZCAqKSBwMTsKKyAgY29uc3Qgc3RydWN0IHByZV9leHByX2Qg KmUyID0gKGNvbnN0IHN0cnVjdCBwcmVfZXhwcl9kICopIHAyOworICAKKyAg aWYgKGUxLT5raW5kICE9IGUyLT5raW5kKQorICAgIHJldHVybiBmYWxzZTsK KyAgCisgIHN3aXRjaCAoZTEtPmtpbmQpIAorICAgIHsKKyAgICBjYXNlIENP TlNUQU5UOgorICAgICAgcmV0dXJuIG9wZXJhbmRfZXF1YWxfcCAoUFJFX0VY UFJfQ09OU1RBTlQgKGUxKSwgUFJFX0VYUFJfQ09OU1RBTlQgKGUyKSwKKwkJ CSAgICAgIE9FUF9QVVJFX1NBTUUpOworICAgIGNhc2UgTkFNRToKKyAgICAg IHJldHVybiBQUkVfRVhQUl9OQU1FIChlMSkgPT0gUFJFX0VYUFJfTkFNRSAo ZTIpOworICAgIGNhc2UgTkFSWToKKyAgICAgIHJldHVybiB2bl9uYXJ5X29w X2VxIChQUkVfRVhQUl9OQVJZIChlMSksIFBSRV9FWFBSX05BUlkgKGUyKSk7 CisgICAgY2FzZSBSRUZFUkVOQ0U6CisgICAgICByZXR1cm4gdm5fcmVmZXJl bmNlX2VxIChQUkVfRVhQUl9SRUZFUkVOQ0UgKGUxKSwgUFJFX0VYUFJfUkVG RVJFTkNFIChlMikpOworICAgIGRlZmF1bHQ6CisgICAgICBhYm9ydCgpOwor ICAgIH0KK30KKworc3RhdGljIGhhc2h2YWxfdAorcHJlX2V4cHJfaGFzaCAo Y29uc3Qgdm9pZCAqcDEpCit7CisgIGNvbnN0IHN0cnVjdCBwcmVfZXhwcl9k ICplID0gKGNvbnN0IHN0cnVjdCBwcmVfZXhwcl9kICopIHAxOworICBzd2l0 Y2ggKGUtPmtpbmQpIAorICAgIHsKKyAgICBjYXNlIENPTlNUQU5UOgorICAg ICAgcmV0dXJuIGl0ZXJhdGl2ZV9oYXNoX2V4cHIgKFBSRV9FWFBSX0NPTlNU QU5UIChlKSwgMCk7CisgICAgY2FzZSBOQU1FOgorICAgICAgcmV0dXJuIGl0 ZXJhdGl2ZV9oYXNoX2V4cHIgKFBSRV9FWFBSX05BTUUgKGUpLCAwKTsKKyAg ICBjYXNlIE5BUlk6CisgICAgICByZXR1cm4gdm5fbmFyeV9vcF9jb21wdXRl X2hhc2ggKFBSRV9FWFBSX05BUlkgKGUpKTsKKyAgICBjYXNlIFJFRkVSRU5D RToKKyAgICAgIHJldHVybiB2bl9yZWZlcmVuY2VfY29tcHV0ZV9oYXNoIChQ UkVfRVhQUl9SRUZFUkVOQ0UgKGUpKTsKKyAgICBkZWZhdWx0OgorICAgICAg YWJvcnQgKCk7CisgICAgfQorfQogCiAKIC8qIE5leHQgZ2xvYmFsIGV4cHJl c3Npb24gaWQgbnVtYmVyLiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmV4 dF9leHByZXNzaW9uX2lkOwogCi10eXBlZGVmIFZFQyh0cmVlLCBnYykgKnZ1 c2VfdmVjOwotREVGX1ZFQ19QICh2dXNlX3ZlYyk7Ci1ERUZfVkVDX0FMTE9D X1AgKHZ1c2VfdmVjLCBoZWFwKTsKLQotc3RhdGljIFZFQyh2dXNlX3ZlYywg aGVhcCkgKmV4cHJlc3Npb25fdnVzZXM7Ci0KIC8qIE1hcHBpbmcgZnJvbSBl eHByZXNzaW9uIHRvIGlkIG51bWJlciB3ZSBjYW4gdXNlIGluIGJpdG1hcCBz ZXRzLiAgKi8KLXN0YXRpYyBWRUModHJlZSwgaGVhcCkgKmV4cHJlc3Npb25z OwotCitERUZfVkVDX1AgKHByZV9leHByKTsKK0RFRl9WRUNfQUxMT0NfUCAo cHJlX2V4cHIsIGhlYXApOworc3RhdGljIFZFQyhwcmVfZXhwciwgaGVhcCkg KmV4cHJlc3Npb25zOworc3RhdGljIGh0YWJfdCBleHByZXNzaW9uX3RvX2lk OworCQkJICAgCiAvKiBBbGxvY2F0ZSBhbiBleHByZXNzaW9uIGlkIGZvciBF WFBSLiAgKi8KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWFsbG9j X2V4cHJlc3Npb25faWQgKHRyZWUgZXhwcikKLXsKLSAgdHJlZV9hbm5fY29t bW9uX3QgYW5uOwotCi0gIGFubiA9IGdldF90cmVlX2NvbW1vbl9hbm4gKGV4 cHIpOwotCithbGxvY19leHByZXNzaW9uX2lkIChwcmVfZXhwciBleHByKQor eworICB2b2lkICoqc2xvdDsKICAgLyogTWFrZSBzdXJlIHdlIHdvbid0IG92 ZXJmbG93LiAqLwogICBnY2NfYXNzZXJ0IChuZXh0X2V4cHJlc3Npb25faWQg KyAxID4gbmV4dF9leHByZXNzaW9uX2lkKTsKLQotICBhbm4tPmF1eCA9IFhO RVcgKHVuc2lnbmVkIGludCk7Ci0gICogKCh1bnNpZ25lZCBpbnQgKilhbm4t PmF1eCkgPSBuZXh0X2V4cHJlc3Npb25faWQrKzsKLSAgVkVDX3NhZmVfcHVz aCAodHJlZSwgaGVhcCwgZXhwcmVzc2lvbnMsIGV4cHIpOwotICBWRUNfc2Fm ZV9wdXNoICh2dXNlX3ZlYywgaGVhcCwgZXhwcmVzc2lvbl92dXNlcywgTlVM TCk7CisgIGV4cHItPmlkID0gbmV4dF9leHByZXNzaW9uX2lkKys7CisgIFZF Q19zYWZlX3B1c2ggKHByZV9leHByLCBoZWFwLCBleHByZXNzaW9ucywgZXhw cik7CisgIHNsb3QgPSBodGFiX2ZpbmRfc2xvdCAoZXhwcmVzc2lvbl90b19p ZCwgZXhwciwgSU5TRVJUKTsKKyAgZ2NjX2Fzc2VydCAoISpzbG90KTsKKyAg KnNsb3QgPSBleHByOwogICByZXR1cm4gbmV4dF9leHByZXNzaW9uX2lkIC0g MTsKIH0KIAogLyogUmV0dXJuIHRoZSBleHByZXNzaW9uIGlkIGZvciB0cmVl IEVYUFIuICAqLwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotZ2V0 X2V4cHJlc3Npb25faWQgKHRyZWUgZXhwcikKLXsKLSAgdHJlZV9hbm5fY29t bW9uX3QgYW5uID0gdHJlZV9jb21tb25fYW5uIChleHByKTsKLSAgZ2NjX2Fz c2VydCAoYW5uKTsKLSAgZ2NjX2Fzc2VydCAoYW5uLT5hdXgpOwotCi0gIHJl dHVybiAgKigodW5zaWduZWQgaW50ICopYW5uLT5hdXgpOworZ2V0X2V4cHJl c3Npb25faWQgKGNvbnN0IHByZV9leHByIGV4cHIpCit7CisgIHJldHVybiBl eHByLT5pZDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2xv b2t1cF9leHByZXNzaW9uX2lkIChjb25zdCBwcmVfZXhwciBleHByKSAKK3sK KyAgdm9pZCAqKnNsb3Q7CisKKyAgc2xvdCA9IGh0YWJfZmluZF9zbG90IChl eHByZXNzaW9uX3RvX2lkLCBleHByLCBOT19JTlNFUlQpOworICBpZiAoIXNs b3QpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiAoKHByZV9leHByKSpzbG90 KS0+aWQ7CiB9CiAKIC8qIFJldHVybiB0aGUgZXhpc3RpbmcgZXhwcmVzc2lv biBpZCBmb3IgRVhQUiwgb3IgY3JlYXRlIG9uZSBpZiBvbmUKICAgIGRvZXMg bm90IGV4aXN0IHlldC4gICovCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQg aW50Ci1nZXRfb3JfYWxsb2NfZXhwcmVzc2lvbl9pZCAodHJlZSBleHByKQot ewotICB0cmVlX2Fubl9jb21tb25fdCBhbm4gPSB0cmVlX2NvbW1vbl9hbm4g KGV4cHIpOwotCi0gIGlmIChhbm4gPT0gTlVMTCB8fCAhYW5uLT5hdXgpCitn ZXRfb3JfYWxsb2NfZXhwcmVzc2lvbl9pZCAocHJlX2V4cHIgZXhwcikKK3sK KyAgdW5zaWduZWQgaW50IGlkID0gbG9va3VwX2V4cHJlc3Npb25faWQgKGV4 cHIpOworICBpZiAoaWQgPT0gMCkKICAgICByZXR1cm4gYWxsb2NfZXhwcmVz c2lvbl9pZCAoZXhwcik7Ci0KLSAgcmV0dXJuIGdldF9leHByZXNzaW9uX2lk IChleHByKTsKKyAgcmV0dXJuIGV4cHItPmlkID0gaWQ7CiB9CiAKIC8qIFJl dHVybiB0aGUgZXhwcmVzc2lvbiB0aGF0IGhhcyBleHByZXNzaW9uIGlkIElE ICovCiAKLXN0YXRpYyBpbmxpbmUgdHJlZQorc3RhdGljIGlubGluZSBwcmVf ZXhwcgogZXhwcmVzc2lvbl9mb3JfaWQgKHVuc2lnbmVkIGludCBpZCkKIHsK LSAgcmV0dXJuIFZFQ19pbmRleCAodHJlZSwgZXhwcmVzc2lvbnMsIGlkKTsK LX0KLQotLyogUmV0dXJuIHRoZSBleHByZXNzaW9uIHZ1c2VzIGZvciBFWFBS LCBpZiB0aGVyZSBhcmUgYW55LiAgKi8KLQotc3RhdGljIGlubGluZSB2dXNl X3ZlYwotZ2V0X2V4cHJlc3Npb25fdnVzZXMgKHRyZWUgZXhwcikKLXsKLSAg dW5zaWduZWQgaW50IGV4cHJfaWQgPSBnZXRfb3JfYWxsb2NfZXhwcmVzc2lv bl9pZCAoZXhwcik7Ci0gIHJldHVybiBWRUNfaW5kZXggKHZ1c2VfdmVjLCBl eHByZXNzaW9uX3Z1c2VzLCBleHByX2lkKTsKLX0KLQotLyogU2V0IHRoZSBl eHByZXNzaW9uIHZ1c2VzIGZvciBFWFBSIHRvIFZVU0VTLiAgKi8KLQotc3Rh dGljIGlubGluZSB2b2lkCi1zZXRfZXhwcmVzc2lvbl92dXNlcyAodHJlZSBl eHByLCB2dXNlX3ZlYyB2dXNlcykKLXsKLSAgdW5zaWduZWQgaW50IGV4cHJf aWQgPSBnZXRfb3JfYWxsb2NfZXhwcmVzc2lvbl9pZCAoZXhwcik7Ci0gIFZF Q19yZXBsYWNlICh2dXNlX3ZlYywgZXhwcmVzc2lvbl92dXNlcywgZXhwcl9p ZCwgdnVzZXMpOwotfQotCisgIHJldHVybiBWRUNfaW5kZXggKHByZV9leHBy LCBleHByZXNzaW9ucywgaWQpOworfQogCiAvKiBGcmVlIHRoZSBleHByZXNz aW9uIGlkIGZpZWxkIGluIGFsbCBvZiBvdXIgZXhwcmVzc2lvbnMsCiAgICBh bmQgdGhlbiBkZXN0cm95IHRoZSBleHByZXNzaW9ucyBhcnJheS4gICovCkBA IC0yNzIsMTYgKzI5NiwzMSBAQAogc3RhdGljIHZvaWQKIGNsZWFyX2V4cHJl c3Npb25faWRzICh2b2lkKQogewotICBpbnQgaTsKLSAgdHJlZSBleHByOwot Ci0gIGZvciAoaSA9IDA7IFZFQ19pdGVyYXRlICh0cmVlLCBleHByZXNzaW9u cywgaSwgZXhwcik7IGkrKykKLSAgICB7Ci0gICAgICBmcmVlICh0cmVlX2Nv bW1vbl9hbm4gKGV4cHIpLT5hdXgpOwotICAgICAgdHJlZV9jb21tb25fYW5u IChleHByKS0+YXV4ID0gTlVMTDsKLSAgICB9Ci0gIFZFQ19mcmVlICh0cmVl LCBoZWFwLCBleHByZXNzaW9ucyk7Ci0gIFZFQ19mcmVlICh2dXNlX3ZlYywg aGVhcCwgZXhwcmVzc2lvbl92dXNlcyk7CisgIFZFQ19mcmVlIChwcmVfZXhw ciwgaGVhcCwgZXhwcmVzc2lvbnMpOworfQorCitzdGF0aWMgYWxsb2NfcG9v bCBwcmVfZXhwcl9wb29sOworCisvKiBHaXZlbiBhbiBTU0FfTkFNRSBOQU1F LCBnZXQgb3IgY3JlYXRlIGEgcHJlX2V4cHIgdG8gcmVwcmVzZW50IGl0LiAg Ki8KKworc3RhdGljIHByZV9leHByCitnZXRfb3JfYWxsb2NfZXhwcl9mb3Jf bmFtZSAodHJlZSBuYW1lKQoreworICBwcmVfZXhwciByZXN1bHQgPSAocHJl X2V4cHIpIHBvb2xfYWxsb2MgKHByZV9leHByX3Bvb2wpOworICB1bnNpZ25l ZCBpbnQgcmVzdWx0X2lkOworCisgIHJlc3VsdC0+a2luZCA9IE5BTUU7Cisg IHJlc3VsdC0+aWQgPSAwOworICBQUkVfRVhQUl9OQU1FIChyZXN1bHQpID0g bmFtZTsKKyAgcmVzdWx0X2lkID0gbG9va3VwX2V4cHJlc3Npb25faWQgKHJl c3VsdCk7CisgIGlmIChyZXN1bHRfaWQgIT0gMCkKKyAgICB7CisgICAgICBw b29sX2ZyZWUgKHByZV9leHByX3Bvb2wsIHJlc3VsdCk7CisgICAgICByZXN1 bHQgPSBleHByZXNzaW9uX2Zvcl9pZCAocmVzdWx0X2lkKTsKKyAgICAgIHJl dHVybiByZXN1bHQ7CisgICAgfQorICBnZXRfb3JfYWxsb2NfZXhwcmVzc2lv bl9pZCAocmVzdWx0KTsKKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGlj IGJvb2wgaW5fZnJlID0gZmFsc2U7CkBAIC0yOTUsNyArMzM0LDEyIEBACiB9 ICpiaXRtYXBfc2V0X3Q7CiAKICNkZWZpbmUgRk9SX0VBQ0hfRVhQUl9JRF9J Tl9TRVQoc2V0LCBpZCwgYmkpCQlcCi0gIEVYRUNVVEVfSUZfU0VUX0lOX0JJ VE1BUChzZXQtPmV4cHJlc3Npb25zLCAwLCBpZCwgYmkpCisgIEVYRUNVVEVf SUZfU0VUX0lOX0JJVE1BUCgoc2V0KS0+ZXhwcmVzc2lvbnMsIDAsIChpZCks IChiaSkpCisKKy8qIE1hcHBpbmcgZnJvbSB2YWx1ZSBpZCB0byBleHByZXNz aW9ucyB3aXRoIHRoYXQgdmFsdWVfaWQuICAqLworREVGX1ZFQ19QIChiaXRt YXBfc2V0X3QpOworREVGX1ZFQ19BTExPQ19QIChiaXRtYXBfc2V0X3QsIGhl YXApOworc3RhdGljIFZFQyhiaXRtYXBfc2V0X3QsIGhlYXApICp2YWx1ZV9l eHByZXNzaW9uczsKIAogLyogU2V0cyB0aGF0IHdlIG5lZWQgdG8ga2VlcCB0 cmFjayBvZi4gICovCiB0eXBlZGVmIHN0cnVjdCBiYl9iaXRtYXBfc2V0cwpA QCAtMzQ3LDYgKzM5MSw3IEBACiAjZGVmaW5lIEJCX1ZJU0lURUQoQkIpICgo YmJfdmFsdWVfc2V0c190KSAoKEJCKS0+YXV4KSktPnZpc2l0ZWQKICNkZWZp bmUgQkJfREVGRVJSRUQoQkIpICgoYmJfdmFsdWVfc2V0c190KSAoKEJCKS0+ YXV4KSktPmRlZmVycmVkCiAKKyAgICAgIAogLyogTWF4aW1hbCBzZXQgb2Yg dmFsdWVzLCB1c2VkIHRvIGluaXRpYWxpemUgdGhlIEFOVElDIHByb2JsZW0s IHdoaWNoCiAgICBpcyBhbiBpbnRlcnNlY3Rpb24gcHJvYmxlbS4gICovCiBz dGF0aWMgYml0bWFwX3NldF90IG1heGltYWxfc2V0OwpAQCAtMzc2LDMxICs0 MjEsMjMgQEAKIH0gcHJlX3N0YXRzOwogCiBzdGF0aWMgYm9vbCBkb19wYXJ0 aWFsX3BhcnRpYWw7Ci1zdGF0aWMgdHJlZSBiaXRtYXBfZmluZF9sZWFkZXIg KGJpdG1hcF9zZXRfdCwgdHJlZSwgdHJlZSk7Ci1zdGF0aWMgdm9pZCBiaXRt YXBfdmFsdWVfaW5zZXJ0X2ludG9fc2V0IChiaXRtYXBfc2V0X3QsIHRyZWUp Owotc3RhdGljIHZvaWQgYml0bWFwX3ZhbHVlX3JlcGxhY2VfaW5fc2V0IChi aXRtYXBfc2V0X3QsIHRyZWUpOworc3RhdGljIHByZV9leHByIGJpdG1hcF9m aW5kX2xlYWRlciAoYml0bWFwX3NldF90LCB1bnNpZ25lZCBpbnQgLCB0cmVl KTsKK3N0YXRpYyB2b2lkIGJpdG1hcF92YWx1ZV9pbnNlcnRfaW50b19zZXQg KGJpdG1hcF9zZXRfdCwgcHJlX2V4cHIpOworc3RhdGljIHZvaWQgYml0bWFw X3ZhbHVlX3JlcGxhY2VfaW5fc2V0IChiaXRtYXBfc2V0X3QsIHByZV9leHBy KTsKIHN0YXRpYyB2b2lkIGJpdG1hcF9zZXRfY29weSAoYml0bWFwX3NldF90 LCBiaXRtYXBfc2V0X3QpOwotc3RhdGljIGJvb2wgYml0bWFwX3NldF9jb250 YWluc192YWx1ZSAoYml0bWFwX3NldF90LCB0cmVlKTsKLXN0YXRpYyB2b2lk IGJpdG1hcF9pbnNlcnRfaW50b19zZXQgKGJpdG1hcF9zZXRfdCwgdHJlZSk7 CitzdGF0aWMgYm9vbCBiaXRtYXBfc2V0X2NvbnRhaW5zX3ZhbHVlIChiaXRt YXBfc2V0X3QsIHVuc2lnbmVkIGludCk7CitzdGF0aWMgdm9pZCBiaXRtYXBf aW5zZXJ0X2ludG9fc2V0IChiaXRtYXBfc2V0X3QsIHByZV9leHByKTsKK3N0 YXRpYyB2b2lkIGJpdG1hcF9pbnNlcnRfaW50b19zZXRfMSAoYml0bWFwX3Nl dF90LCBwcmVfZXhwciwgYm9vbCk7CiBzdGF0aWMgYml0bWFwX3NldF90IGJp dG1hcF9zZXRfbmV3ICh2b2lkKTsKLXN0YXRpYyB0cmVlIGNyZWF0ZV9leHBy ZXNzaW9uX2J5X3BpZWNlcyAoYmFzaWNfYmxvY2ssIHRyZWUsIHRyZWUsIHRy ZWUpOwotc3RhdGljIHRyZWUgZmluZF9vcl9nZW5lcmF0ZV9leHByZXNzaW9u IChiYXNpY19ibG9jaywgdHJlZSwgdHJlZSwgdHJlZSk7CitzdGF0aWMgdHJl ZSBjcmVhdGVfZXhwcmVzc2lvbl9ieV9waWVjZXMgKGJhc2ljX2Jsb2NrLCBw cmVfZXhwciwgdHJlZSwgdHJlZSwKKwkJCQkJIHRyZWUpOworc3RhdGljIHRy ZWUgZmluZF9vcl9nZW5lcmF0ZV9leHByZXNzaW9uIChiYXNpY19ibG9jaywg cHJlX2V4cHIsIHRyZWUsIHRyZWUpOwogCiAvKiBXZSBjYW4gYWRkIGFuZCBy ZW1vdmUgZWxlbWVudHMgYW5kIGVudHJpZXMgdG8gYW5kIGZyb20gc2V0cwog ICAgYW5kIGhhc2ggdGFibGVzLCBzbyB3ZSB1c2UgYWxsb2MgcG9vbHMgZm9y IHRoZW0uICAqLwogCiBzdGF0aWMgYWxsb2NfcG9vbCBiaXRtYXBfc2V0X3Bv b2w7Ci1zdGF0aWMgYWxsb2NfcG9vbCBiaW5hcnlfbm9kZV9wb29sOwotc3Rh dGljIGFsbG9jX3Bvb2wgdW5hcnlfbm9kZV9wb29sOwotc3RhdGljIGFsbG9j X3Bvb2wgcmVmZXJlbmNlX25vZGVfcG9vbDsKLXN0YXRpYyBhbGxvY19wb29s IGNvbXBhcmlzb25fbm9kZV9wb29sOwogc3RhdGljIGJpdG1hcF9vYnN0YWNr IGdyYW5kX2JpdG1hcF9vYnN0YWNrOwotCi0vKiBXZSBjYW4ndCB1c2UgYWxs b2NhdGlvbiBwb29scyB0byBob2xkIHRlbXBvcmFyeSBDQUxMX0VYUFIgb2Jq ZWN0cywgc2luY2UKLSAgIHRoZXkgYXJlIG5vdCBvZiBmaXhlZCBzaXplLiAg SW5zdGVhZCwgdXNlIGFuIG9ic3RhY2suICAqLwotCi1zdGF0aWMgc3RydWN0 IG9ic3RhY2sgdGVtcF9jYWxsX2V4cHJfb2JzdGFjazsKLQogCiAvKiBUbyBh dm9pZCBhZGRpbmcgMzAwIHRlbXBvcmFyeSB2YXJpYWJsZXMgd2hlbiB3ZSBv bmx5IG5lZWQgb25lLCB3ZQogICAgb25seSBjcmVhdGUgb25lIHRlbXBvcmFy eSB2YXJpYWJsZSwgb24gZGVtYW5kLCBhbmQgYnVpbGQgc3NhIG5hbWVzCkBA IC00MjgsMTYgKzQ2NSwxMyBAQAogdHlwZWRlZiBzdHJ1Y3QgZXhwcl9wcmVk X3RyYW5zX2QKIHsKICAgLyogVGhlIGV4cHJlc3Npb24uICAqLwotICB0cmVl IGU7CisgIHByZV9leHByIGU7CiAKICAgLyogVGhlIHByZWRlY2Vzc29yIGJs b2NrIGFsb25nIHdoaWNoIHdlIHRyYW5zbGF0ZWQgdGhlIGV4cHJlc3Npb24u ICAqLwogICBiYXNpY19ibG9jayBwcmVkOwogCi0gIC8qIHZ1c2VzIGFzc29j aWF0ZWQgd2l0aCB0aGUgZXhwcmVzc2lvbi4gICovCi0gIFZFQyAodHJlZSwg Z2MpICp2dXNlczsKLQogICAvKiBUaGUgdmFsdWUgdGhhdCByZXN1bHRlZCBm cm9tIHRoZSB0cmFuc2xhdGlvbi4gICovCi0gIHRyZWUgdjsKKyAgcHJlX2V4 cHIgdjsKIAogICAvKiBUaGUgaGFzaGNvZGUgZm9yIHRoZSBleHByZXNzaW9u LCBwcmVkIHBhaXIuIFRoaXMgaXMgY2FjaGVkIGZvcgogICAgICBzcGVlZCBy ZWFzb25zLiAgKi8KQEAgLTQ2NCw1MCArNDk4LDI3IEBACiAgIGNvbnN0X2V4 cHJfcHJlZF90cmFuc190IGNvbnN0IHZlMiA9IChjb25zdF9leHByX3ByZWRf dHJhbnNfdCkgcDI7CiAgIGJhc2ljX2Jsb2NrIGIxID0gdmUxLT5wcmVkOwog ICBiYXNpY19ibG9jayBiMiA9IHZlMi0+cHJlZDsKLSAgaW50IGk7Ci0gIHRy ZWUgdnVzZTE7CiAKICAgLyogSWYgdGhleSBhcmUgbm90IHRyYW5zbGF0aW9u cyBmb3IgdGhlIHNhbWUgYmFzaWMgYmxvY2ssIHRoZXkgY2FuJ3QKICAgICAg YmUgZXF1YWwuICAqLwogICBpZiAoYjEgIT0gYjIpCiAgICAgcmV0dXJuIGZh bHNlOwotCi0KLSAgLyogSWYgdGhleSBhcmUgZm9yIHRoZSBzYW1lIGJhc2lj IGJsb2NrLCBkZXRlcm1pbmUgaWYgdGhlCi0gICAgIGV4cHJlc3Npb25zIGFy ZSBlcXVhbC4gICovCi0gIGlmICghZXhwcmVzc2lvbnNfZXF1YWxfcCAodmUx LT5lLCB2ZTItPmUpKQotICAgIHJldHVybiBmYWxzZTsKLQotICAvKiBNYWtl IHN1cmUgdGhlIHZ1c2VzIGFyZSBlcXVpdmFsZW50LiAgKi8KLSAgaWYgKHZl MS0+dnVzZXMgPT0gdmUyLT52dXNlcykKLSAgICByZXR1cm4gdHJ1ZTsKLQot ICBpZiAoVkVDX2xlbmd0aCAodHJlZSwgdmUxLT52dXNlcykgIT0gVkVDX2xl bmd0aCAodHJlZSwgdmUyLT52dXNlcykpCi0gICAgcmV0dXJuIGZhbHNlOwot Ci0gIGZvciAoaSA9IDA7IFZFQ19pdGVyYXRlICh0cmVlLCB2ZTEtPnZ1c2Vz LCBpLCB2dXNlMSk7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoVkVDX2luZGV4 ICh0cmVlLCB2ZTItPnZ1c2VzLCBpKSAhPSB2dXNlMSkKLQlyZXR1cm4gZmFs c2U7Ci0gICAgfQotCi0gIHJldHVybiB0cnVlOworICByZXR1cm4gcHJlX2V4 cHJfZXEgKHZlMS0+ZSwgdmUyLT5lKTsKIH0KIAogLyogU2VhcmNoIGluIHRo ZSBwaGkgdHJhbnNsYXRpb24gdGFibGUgZm9yIHRoZSB0cmFuc2xhdGlvbiBv ZgotICAgZXhwcmVzc2lvbiBFIGluIGJhc2ljIGJsb2NrIFBSRUQgd2l0aCB2 dXNlcyBWVVNFUy4KKyAgIGV4cHJlc3Npb24gRSBpbiBiYXNpYyBibG9jayBQ UkVELiAKICAgIFJldHVybiB0aGUgdHJhbnNsYXRlZCB2YWx1ZSwgaWYgZm91 bmQsIE5VTEwgb3RoZXJ3aXNlLiAgKi8KIAotc3RhdGljIGlubGluZSB0cmVl Ci1waGlfdHJhbnNfbG9va3VwICh0cmVlIGUsIGJhc2ljX2Jsb2NrIHByZWQs IFZFQyAodHJlZSwgZ2MpICp2dXNlcykKK3N0YXRpYyBpbmxpbmUgcHJlX2V4 cHIKK3BoaV90cmFuc19sb29rdXAgKHByZV9leHByIGUsIGJhc2ljX2Jsb2Nr IHByZWQpCiB7CiAgIHZvaWQgKipzbG90OwogICBzdHJ1Y3QgZXhwcl9wcmVk X3RyYW5zX2QgZXB0OwogCiAgIGVwdC5lID0gZTsKICAgZXB0LnByZWQgPSBw cmVkOwotICBlcHQudnVzZXMgPSB2dXNlczsKLSAgZXB0Lmhhc2hjb2RlID0g aXRlcmF0aXZlX2hhc2hfZXhwciAoZSwgKHVuc2lnbmVkIGxvbmcpIHByZWQp OworICBlcHQuaGFzaGNvZGUgPSBwcmVfZXhwcl9oYXNoIChlKTsKICAgc2xv dCA9IGh0YWJfZmluZF9zbG90X3dpdGhfaGFzaCAocGhpX3RyYW5zbGF0ZV90 YWJsZSwgJmVwdCwgZXB0Lmhhc2hjb2RlLAogCQkJCSAgIE5PX0lOU0VSVCk7 CiAgIGlmICghc2xvdCkKQEAgLTUxNywxOSArNTI4LDE5IEBACiB9CiAKIAot LyogQWRkIHRoZSB0dXBsZSBtYXBwaW5nIGZyb20ge2V4cHJlc3Npb24gRSwg YmFzaWMgYmxvY2sgUFJFRCwgdnVzZXMgVlVTRVN9IHRvCisvKiBBZGQgdGhl IHR1cGxlIG1hcHBpbmcgZnJvbSB7ZXhwcmVzc2lvbiBFLCBiYXNpYyBibG9j ayBQUkVEfSB0bwogICAgdmFsdWUgViwgdG8gdGhlIHBoaSB0cmFuc2xhdGlv biB0YWJsZS4gICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotcGhpX3RyYW5z X2FkZCAodHJlZSBlLCB0cmVlIHYsIGJhc2ljX2Jsb2NrIHByZWQsIFZFQyAo dHJlZSwgZ2MpICp2dXNlcykKK3BoaV90cmFuc19hZGQgKHByZV9leHByIGUs IHByZV9leHByIHYsIGJhc2ljX2Jsb2NrIHByZWQpCiB7CiAgIHZvaWQgKipz bG90OwogICBleHByX3ByZWRfdHJhbnNfdCBuZXdfcGFpciA9IFhORVcgKHN0 cnVjdCBleHByX3ByZWRfdHJhbnNfZCk7CiAgIG5ld19wYWlyLT5lID0gZTsK ICAgbmV3X3BhaXItPnByZWQgPSBwcmVkOwotICBuZXdfcGFpci0+dnVzZXMg PSB2dXNlczsKICAgbmV3X3BhaXItPnYgPSB2OwotICBuZXdfcGFpci0+aGFz aGNvZGUgPSBpdGVyYXRpdmVfaGFzaF9leHByIChlLCAodW5zaWduZWQgbG9u ZykgcHJlZCk7CisgIG5ld19wYWlyLT5oYXNoY29kZSA9IHByZV9leHByX2hh c2ggKGUpOworICAKICAgc2xvdCA9IGh0YWJfZmluZF9zbG90X3dpdGhfaGFz aCAocGhpX3RyYW5zbGF0ZV90YWJsZSwgbmV3X3BhaXIsCiAJCQkJICAgbmV3 X3BhaXItPmhhc2hjb2RlLCBJTlNFUlQpOwogICBpZiAoKnNsb3QpCkBAIC01 MzgsMjkgKzU0OSwyNyBAQAogfQogCiAKLS8qIFJldHVybiB0cnVlIGlmIFYg aXMgYSB2YWx1ZSBleHByZXNzaW9uIHRoYXQgcmVwcmVzZW50cyBpdHNlbGYu Ci0gICBJbiBvdXIgd29ybGQsIHRoaXMgaXMgKm9ubHkqIG5vbi12YWx1ZSBo YW5kbGVzLiAgKi8KLQotc3RhdGljIGlubGluZSBib29sCi1jb25zdGFudF9l eHByX3AgKHRyZWUgdikKLXsKLSAgcmV0dXJuIFRSRUVfQ09ERSAodikgIT0g VkFMVUVfSEFORExFICYmCi0gICAgKFRSRUVfQ09ERSAodikgPT0gRklFTERf REVDTCB8fCBpc19naW1wbGVfbWluX2ludmFyaWFudCAodikpOwotfQotCi0v KiBBZGQgZXhwcmVzc2lvbiBFIHRvIHRoZSBleHByZXNzaW9uIHNldCBvZiB2 YWx1ZSBWLiAgKi8KLQotdm9pZAotYWRkX3RvX3ZhbHVlICh0cmVlIHYsIHRy ZWUgZSkKLXsKLSAgLyogQ29uc3RhbnRzIGhhdmUgbm8gZXhwcmVzc2lvbiBz ZXRzLiAgKi8KLSAgaWYgKGNvbnN0YW50X2V4cHJfcCAodikpCi0gICAgcmV0 dXJuOwotCi0gIGlmIChWQUxVRV9IQU5ETEVfRVhQUl9TRVQgKHYpID09IE5V TEwpCi0gICAgVkFMVUVfSEFORExFX0VYUFJfU0VUICh2KSA9IGJpdG1hcF9z ZXRfbmV3ICgpOwotCi0gIGJpdG1hcF9pbnNlcnRfaW50b19zZXQgKFZBTFVF X0hBTkRMRV9FWFBSX1NFVCAodiksIGUpOworLyogQWRkIGV4cHJlc3Npb24g RSB0byB0aGUgZXhwcmVzc2lvbiBzZXQgb2YgdmFsdWUgaWQgVi4gICovCisK K3ZvaWQKK2FkZF90b192YWx1ZSAodW5zaWduZWQgaW50IHYsIHByZV9leHBy IGUpCit7CisgIGJpdG1hcF9zZXRfdCBzZXQ7CisKKyAgaWYgKHYgPj0gVkVD X2xlbmd0aCAoYml0bWFwX3NldF90LCB2YWx1ZV9leHByZXNzaW9ucykpCisg ICAgeworICAgICAgVkVDX3NhZmVfZ3Jvd19jbGVhcmVkIChiaXRtYXBfc2V0 X3QsIGhlYXAsIHZhbHVlX2V4cHJlc3Npb25zLAorCQkJICAgICB2ICsgMSk7 CisgICAgfQorICAgIAorICBzZXQgPSBWRUNfaW5kZXggKGJpdG1hcF9zZXRf dCwgdmFsdWVfZXhwcmVzc2lvbnMsIHYpOworICBpZiAoIXNldCkKKyAgICB7 CisgICAgICBzZXQgPSBiaXRtYXBfc2V0X25ldyAoKTsKKyAgICAgIFZFQ19y ZXBsYWNlIChiaXRtYXBfc2V0X3QsIHZhbHVlX2V4cHJlc3Npb25zLCB2LCBz ZXQpOworICAgIH0KKyAgCisgIGJpdG1hcF9pbnNlcnRfaW50b19zZXRfMSAo c2V0LCBlLCB0cnVlKTsKIH0KIAogLyogQ3JlYXRlIGEgbmV3IGJpdG1hcCBz ZXQgYW5kIHJldHVybiBpdC4gICovCkBAIC01NzQsMzQgKzU4Myw1OSBAQAog ICByZXR1cm4gcmV0OwogfQogCisvKiBSZXR1cm4gdGhlIHZhbHVlIGlkIGZv ciBhIFBSRSBleHByZXNzaW9uIEVYUFIuICAqLworCitzdGF0aWMgdW5zaWdu ZWQgaW50CitnZXRfZXhwcl92YWx1ZV9pZCAocHJlX2V4cHIgZXhwcikKK3sK KyAgc3dpdGNoIChleHByLT5raW5kKQorICAgIHsKKyAgICBjYXNlIENPTlNU QU5UOgorICAgICAgcmV0dXJuIGdldF9vcl9hbGxvY19jb25zdGFudF92YWx1 ZV9pZCAoUFJFX0VYUFJfQ09OU1RBTlQgKGV4cHIpKTsKKyAgICBjYXNlIE5B TUU6CisgICAgICByZXR1cm4gVk5fSU5GTyAoUFJFX0VYUFJfTkFNRSAoZXhw cikpLT52YWx1ZV9pZDsKKyAgICBjYXNlIE5BUlk6CisgICAgICByZXR1cm4g UFJFX0VYUFJfTkFSWSAoZXhwciktPnZhbHVlX2lkOworICAgIGNhc2UgUkVG RVJFTkNFOgorICAgICAgcmV0dXJuIFBSRV9FWFBSX1JFRkVSRU5DRSAoZXhw ciktPnZhbHVlX2lkOworICAgIGRlZmF1bHQ6CisgICAgICBnY2NfdW5yZWFj aGFibGUgKCk7CisgICAgfQorfQorCiAvKiBSZW1vdmUgYW4gZXhwcmVzc2lv biBFWFBSIGZyb20gYSBiaXRtYXBwZWQgc2V0LiAgKi8KIAogc3RhdGljIHZv aWQKLWJpdG1hcF9yZW1vdmVfZnJvbV9zZXQgKGJpdG1hcF9zZXRfdCBzZXQs IHRyZWUgZXhwcikKLXsKLSAgdHJlZSB2YWwgPSBnZXRfdmFsdWVfaGFuZGxl IChleHByKTsKLQotICBnY2NfYXNzZXJ0ICh2YWwpOwotICBpZiAoIWNvbnN0 YW50X2V4cHJfcCAodmFsKSkKLSAgICB7Ci0gICAgICBiaXRtYXBfY2xlYXJf Yml0IChzZXQtPnZhbHVlcywgVkFMVUVfSEFORExFX0lEICh2YWwpKTsKK2Jp dG1hcF9yZW1vdmVfZnJvbV9zZXQgKGJpdG1hcF9zZXRfdCBzZXQsIHByZV9l eHByIGV4cHIpCit7CisgIHVuc2lnbmVkIGludCB2YWwgID0gZ2V0X2V4cHJf dmFsdWVfaWQgKGV4cHIpOworICBpZiAoIXZhbHVlX2lkX2NvbnN0YW50X3Ag KHZhbCkpIAorICAgIHsKKyAgICAgIGJpdG1hcF9jbGVhcl9iaXQgKHNldC0+ dmFsdWVzLCB2YWwpOwogICAgICAgYml0bWFwX2NsZWFyX2JpdCAoc2V0LT5l eHByZXNzaW9ucywgZ2V0X2V4cHJlc3Npb25faWQgKGV4cHIpKTsKICAgICB9 CiB9CiAKK3N0YXRpYyB2b2lkCitiaXRtYXBfaW5zZXJ0X2ludG9fc2V0XzEg KGJpdG1hcF9zZXRfdCBzZXQsIHByZV9leHByIGV4cHIsCisJCQkgIGJvb2wg YWxsb3dfY29uc3RhbnRzKQoreworICB1bnNpZ25lZCBpbnQgdmFsICA9IGdl dF9leHByX3ZhbHVlX2lkIChleHByKTsKKyAgaWYgKGFsbG93X2NvbnN0YW50 cyB8fCAhdmFsdWVfaWRfY29uc3RhbnRfcCAodmFsKSkKKyAgICB7CisgICAg ICAvKiBXZSBzcGVjaWZpY2FsbHkgZXhwZWN0IHRoaXMgYW5kIG9ubHkgdGhp cyBmdW5jdGlvbiB0byBiZSBhYmxlIHRvCisJIGluc2VydCBjb25zdGFudHMg aW50byBhIHNldC4gICovCisgICAgICBiaXRtYXBfc2V0X2JpdCAoc2V0LT52 YWx1ZXMsIHZhbCk7CisgICAgICBiaXRtYXBfc2V0X2JpdCAoc2V0LT5leHBy ZXNzaW9ucywgZ2V0X29yX2FsbG9jX2V4cHJlc3Npb25faWQgKGV4cHIpKTsK KyAgICB9Cit9CisKIC8qIEluc2VydCBhbiBleHByZXNzaW9uIEVYUFIgaW50 byBhIGJpdG1hcHBlZCBzZXQuICAqLwogCiBzdGF0aWMgdm9pZAotYml0bWFw X2luc2VydF9pbnRvX3NldCAoYml0bWFwX3NldF90IHNldCwgdHJlZSBleHBy KQotewotICB0cmVlIHZhbCA9IGdldF92YWx1ZV9oYW5kbGUgKGV4cHIpOwot Ci0gIGdjY19hc3NlcnQgKHZhbCk7Ci0gIGlmICghY29uc3RhbnRfZXhwcl9w ICh2YWwpKQotICAgIHsKLSAgICAgIGJpdG1hcF9zZXRfYml0IChzZXQtPnZh bHVlcywgVkFMVUVfSEFORExFX0lEICh2YWwpKTsKLSAgICAgIGJpdG1hcF9z ZXRfYml0IChzZXQtPmV4cHJlc3Npb25zLCBnZXRfb3JfYWxsb2NfZXhwcmVz c2lvbl9pZCAoZXhwcikpOwotICAgIH0KK2JpdG1hcF9pbnNlcnRfaW50b19z ZXQgKGJpdG1hcF9zZXRfdCBzZXQsIHByZV9leHByIGV4cHIpCit7CisgIGJp dG1hcF9pbnNlcnRfaW50b19zZXRfMSAoc2V0LCBleHByLCBmYWxzZSk7CiB9 CiAKIC8qIENvcHkgYSBiaXRtYXBwZWQgc2V0IE9SSUcsIGludG8gYml0bWFw cGVkIHNldCBERVNULiAgKi8KQEAgLTYyNCw0MCArNjU4LDMyIEBACiAKIAog LyogQSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciB1c2UgaW4gcXNvcnQgdG8g dG9wIHNvcnQgYSBiaXRtYXAgc2V0LiAgU2ltcGx5Ci0gICBzdWJ0cmFjdHMg dmFsdWUgaGFuZGxlIGlkcywgc2luY2UgdGhleSBhcmUgY3JlYXRlZCBpbiB0 b3BvLW9yZGVyLiAgKi8KKyAgIHN1YnRyYWN0cyB2YWx1ZSBpZHMsIHNpbmNl IHRoZXkgYXJlIGNyZWF0ZWQgd2l0aCBsZWF2ZXMgYmVmb3JlCisgICB0aGVp ciBwYXJlbnQgdXNlcnMgKElFIHRvcG9sb2dpY2FsIG9yZGVyKS4gICovCiAK IHN0YXRpYyBpbnQKLXZoX2NvbXBhcmUgKGNvbnN0IHZvaWQgKnBhLCBjb25z dCB2b2lkICpwYikKLXsKLSAgY29uc3QgdHJlZSB2aGEgPSBnZXRfdmFsdWVf aGFuZGxlICgqKChjb25zdCB0cmVlICopcGEpKTsKLSAgY29uc3QgdHJlZSB2 aGIgPSBnZXRfdmFsdWVfaGFuZGxlICgqKChjb25zdCB0cmVlICopcGIpKTsK LQotICAvKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBjb25zdGlmeSB0aGlu Z3MuICAqLwotICBpZiAoY29uc3RhbnRfZXhwcl9wICh2aGEpKQotICAgIHsK LSAgICAgIGlmIChjb25zdGFudF9leHByX3AgKHZoYikpCi0JcmV0dXJuIC0x OwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgZWxzZSBpZiAoY29uc3Rh bnRfZXhwcl9wICh2aGIpKQotICAgIHJldHVybiAxOwotICByZXR1cm4gVkFM VUVfSEFORExFX0lEICh2aGEpIC0gVkFMVUVfSEFORExFX0lEICh2aGIpOwor dmFsdWVfaWRfY29tcGFyZSAoY29uc3Qgdm9pZCAqcGEsIGNvbnN0IHZvaWQg KnBiKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgdmhhID0gZ2V0X2V4cHJf dmFsdWVfaWQgKCooKGNvbnN0IHByZV9leHByICopcGEpKTsKKyAgY29uc3Qg dW5zaWduZWQgaW50IHZoYiA9IGdldF9leHByX3ZhbHVlX2lkICgqKChjb25z dCBwcmVfZXhwciAqKXBiKSk7CisKKyAgcmV0dXJuIHZoYSAtIHZoYjsKIH0K IAogLyogR2VuZXJhdGUgYW4gdG9wb2xvZ2ljYWwtb3JkZXJlZCBhcnJheSBv ZiBiaXRtYXAgc2V0IFNFVC4gICovCiAKLXN0YXRpYyBWRUModHJlZSwgaGVh cCkgKgorc3RhdGljIFZFQyhwcmVfZXhwciwgaGVhcCkgKgogc29ydGVkX2Fy cmF5X2Zyb21fYml0bWFwX3NldCAoYml0bWFwX3NldF90IHNldCkKIHsKICAg dW5zaWduZWQgaW50IGk7CiAgIGJpdG1hcF9pdGVyYXRvciBiaTsKLSAgVkVD KHRyZWUsIGhlYXApICpyZXN1bHQgPSBOVUxMOworICBWRUMocHJlX2V4cHIs IGhlYXApICpyZXN1bHQgPSBOVUxMOwogCiAgIEZPUl9FQUNIX0VYUFJfSURf SU5fU0VUIChzZXQsIGksIGJpKQotICAgIFZFQ19zYWZlX3B1c2ggKHRyZWUs IGhlYXAsIHJlc3VsdCwgZXhwcmVzc2lvbl9mb3JfaWQgKGkpKTsKLQotICBx c29ydCAoVkVDX2FkZHJlc3MgKHRyZWUsIHJlc3VsdCksIFZFQ19sZW5ndGgg KHRyZWUsIHJlc3VsdCksCi0JIHNpemVvZiAodHJlZSksIHZoX2NvbXBhcmUp OworICAgIFZFQ19zYWZlX3B1c2ggKHByZV9leHByLCBoZWFwLCByZXN1bHQs IGV4cHJlc3Npb25fZm9yX2lkIChpKSk7CisKKyAgcXNvcnQgKFZFQ19hZGRy ZXNzIChwcmVfZXhwciwgcmVzdWx0KSwgVkVDX2xlbmd0aCAocHJlX2V4cHIs IHJlc3VsdCksCisJIHNpemVvZiAocHJlX2V4cHIpLCB2YWx1ZV9pZF9jb21w YXJlKTsKIAogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjc4LDkgKzcwNCw5 IEBACiAgICAgICBiaXRtYXBfY29weSAodGVtcCwgZGVzdC0+ZXhwcmVzc2lv bnMpOwogICAgICAgRVhFQ1VURV9JRl9TRVRfSU5fQklUTUFQICh0ZW1wLCAw LCBpLCBiaSkKIAl7Ci0JICB0cmVlIGV4cHIgPSBleHByZXNzaW9uX2Zvcl9p ZCAoaSk7Ci0JICB0cmVlIHZhbCA9IGdldF92YWx1ZV9oYW5kbGUgKGV4cHIp OwotCSAgaWYgKCFiaXRtYXBfYml0X3AgKGRlc3QtPnZhbHVlcywgVkFMVUVf SEFORExFX0lEICh2YWwpKSkKKwkgIHByZV9leHByIGV4cHIgPSBleHByZXNz aW9uX2Zvcl9pZCAoaSk7CisJICB1bnNpZ25lZCBpbnQgdmFsdWVfaWQgPSBn ZXRfZXhwcl92YWx1ZV9pZCAoZXhwcik7CisJICBpZiAoIWJpdG1hcF9iaXRf cCAoZGVzdC0+dmFsdWVzLCB2YWx1ZV9pZCkpCiAJICAgIGJpdG1hcF9jbGVh cl9iaXQgKGRlc3QtPmV4cHJlc3Npb25zLCBpKTsKIAl9CiAgICAgICBCSVRN QVBfRlJFRSAodGVtcCk7CkBAIC03MDEsOSArNzI3LDkgQEAKIAogICBGT1Jf RUFDSF9FWFBSX0lEX0lOX1NFVCAocmVzdWx0LCBpLCBiaSkKICAgICB7Ci0g ICAgICB0cmVlIGV4cHIgPSBleHByZXNzaW9uX2Zvcl9pZCAoaSk7Ci0gICAg ICB0cmVlIHZhbCA9IGdldF92YWx1ZV9oYW5kbGUgKGV4cHIpOwotICAgICAg Yml0bWFwX3NldF9iaXQgKHJlc3VsdC0+dmFsdWVzLCBWQUxVRV9IQU5ETEVf SUQgKHZhbCkpOworICAgICAgcHJlX2V4cHIgZXhwciA9IGV4cHJlc3Npb25f Zm9yX2lkIChpKTsKKyAgICAgIHVuc2lnbmVkIGludCB2YWx1ZV9pZCA9IGdl dF9leHByX3ZhbHVlX2lkIChleHByKTsKKyAgICAgIGJpdG1hcF9zZXRfYml0 IChyZXN1bHQtPnZhbHVlcywgdmFsdWVfaWQpOwogICAgIH0KIAogICByZXR1 cm4gcmVzdWx0OwpAQCAtNzIxLDMwICs3NDcsMzAgQEAKICAgYml0bWFwX2Nv cHkgKHRlbXAsIGEtPmV4cHJlc3Npb25zKTsKICAgRVhFQ1VURV9JRl9TRVRf SU5fQklUTUFQICh0ZW1wLCAwLCBpLCBiaSkKICAgICB7Ci0gICAgICB0cmVl IGV4cHIgPSBleHByZXNzaW9uX2Zvcl9pZCAoaSk7Ci0gICAgICBpZiAoYml0 bWFwX3NldF9jb250YWluc192YWx1ZSAoYiwgZ2V0X3ZhbHVlX2hhbmRsZSAo ZXhwcikpKQorICAgICAgcHJlX2V4cHIgZXhwciA9IGV4cHJlc3Npb25fZm9y X2lkIChpKTsKKyAgICAgIGlmIChiaXRtYXBfc2V0X2NvbnRhaW5zX3ZhbHVl IChiLCBnZXRfZXhwcl92YWx1ZV9pZCAoZXhwcikpKQogCWJpdG1hcF9yZW1v dmVfZnJvbV9zZXQgKGEsIGV4cHIpOwogICAgIH0KICAgQklUTUFQX0ZSRUUg KHRlbXApOwogfQogCiAKLS8qIFJldHVybiB0cnVlIGlmIGJpdG1hcHBlZCBz ZXQgU0VUIGNvbnRhaW5zIHRoZSB2YWx1ZSBWQUwuICAqLwotCi1zdGF0aWMg Ym9vbAotYml0bWFwX3NldF9jb250YWluc192YWx1ZSAoYml0bWFwX3NldF90 IHNldCwgdHJlZSB2YWwpCi17Ci0gIGlmIChjb25zdGFudF9leHByX3AgKHZh bCkpCisvKiBSZXR1cm4gdHJ1ZSBpZiBiaXRtYXBwZWQgc2V0IFNFVCBjb250 YWlucyB0aGUgdmFsdWUgVkFMVUVfSUQuICAqLworCitzdGF0aWMgYm9vbAor Yml0bWFwX3NldF9jb250YWluc192YWx1ZSAoYml0bWFwX3NldF90IHNldCwg dW5zaWduZWQgaW50IHZhbHVlX2lkKQoreworICBpZiAodmFsdWVfaWRfY29u c3RhbnRfcCAodmFsdWVfaWQpKQogICAgIHJldHVybiB0cnVlOwogCiAgIGlm ICghc2V0IHx8IGJpdG1hcF9lbXB0eV9wIChzZXQtPmV4cHJlc3Npb25zKSkK ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgcmV0dXJuIGJpdG1hcF9iaXRfcCAo c2V0LT52YWx1ZXMsIFZBTFVFX0hBTkRMRV9JRCAodmFsKSk7CisgIHJldHVy biBiaXRtYXBfYml0X3AgKHNldC0+dmFsdWVzLCB2YWx1ZV9pZCk7CiB9CiAK IHN0YXRpYyBpbmxpbmUgYm9vbAotYml0bWFwX3NldF9jb250YWluc19leHBy IChiaXRtYXBfc2V0X3Qgc2V0LCB0cmVlIGV4cHIpCitiaXRtYXBfc2V0X2Nv bnRhaW5zX2V4cHIgKGJpdG1hcF9zZXRfdCBzZXQsIGNvbnN0IHByZV9leHBy IGV4cHIpCiB7CiAgIHJldHVybiBiaXRtYXBfYml0X3AgKHNldC0+ZXhwcmVz c2lvbnMsIGdldF9leHByZXNzaW9uX2lkIChleHByKSk7CiB9CkBAIC03NTIs MTMgKzc3OCwxNCBAQAogLyogUmVwbGFjZSBhbiBpbnN0YW5jZSBvZiB2YWx1 ZSBMT09LRk9SIHdpdGggZXhwcmVzc2lvbiBFWFBSIGluIFNFVC4gICovCiAK IHN0YXRpYyB2b2lkCi1iaXRtYXBfc2V0X3JlcGxhY2VfdmFsdWUgKGJpdG1h cF9zZXRfdCBzZXQsIHRyZWUgbG9va2ZvciwgdHJlZSBleHByKQorYml0bWFw X3NldF9yZXBsYWNlX3ZhbHVlIChiaXRtYXBfc2V0X3Qgc2V0LCB1bnNpZ25l ZCBpbnQgbG9va2ZvciwKKwkJCSAgY29uc3QgcHJlX2V4cHIgZXhwcikKIHsK ICAgYml0bWFwX3NldF90IGV4cHJzZXQ7CiAgIHVuc2lnbmVkIGludCBpOwog ICBiaXRtYXBfaXRlcmF0b3IgYmk7CiAKLSAgaWYgKGNvbnN0YW50X2V4cHJf cCAobG9va2ZvcikpCisgIGlmICh2YWx1ZV9pZF9jb25zdGFudF9wIChsb29r Zm9yKSkKICAgICByZXR1cm47CiAKICAgaWYgKCFiaXRtYXBfc2V0X2NvbnRh aW5zX3ZhbHVlIChzZXQsIGxvb2tmb3IpKQpAQCAtNzczLDcgKzgwMCw3IEBA CiAgICAgIDUtMTB4IGZhc3RlciB0aGFuIHdhbGtpbmcgdGhlIGJpdG1hcC4g IElmIHRoaXMgaXMgc29tZWhvdyBhCiAgICAgIHNpZ25pZmljYW50IGxvc2Ug Zm9yIHNvbWUgY2FzZXMsIHdlIGNhbiBjaG9vc2Ugd2hpY2ggc2V0IHRvIHdh bGsKICAgICAgYmFzZWQgb24gdGhlIHNldCBzaXplLiAgKi8KLSAgZXhwcnNl dCA9IFZBTFVFX0hBTkRMRV9FWFBSX1NFVCAobG9va2Zvcik7CisgIGV4cHJz ZXQgPSBWRUNfaW5kZXggKGJpdG1hcF9zZXRfdCwgdmFsdWVfZXhwcmVzc2lv bnMsIGxvb2tmb3IpOwogICBGT1JfRUFDSF9FWFBSX0lEX0lOX1NFVCAoZXhw cnNldCwgaSwgYmkpCiAgICAgewogICAgICAgaWYgKGJpdG1hcF9iaXRfcCAo c2V0LT5leHByZXNzaW9ucywgaSkpCkBAIC03OTcsOSArODI0LDkgQEAKICAg IGFuZCBhZGQgaXQgb3RoZXJ3aXNlLiAgKi8KIAogc3RhdGljIHZvaWQKLWJp dG1hcF92YWx1ZV9yZXBsYWNlX2luX3NldCAoYml0bWFwX3NldF90IHNldCwg dHJlZSBleHByKQotewotICB0cmVlIHZhbCA9IGdldF92YWx1ZV9oYW5kbGUg KGV4cHIpOworYml0bWFwX3ZhbHVlX3JlcGxhY2VfaW5fc2V0IChiaXRtYXBf c2V0X3Qgc2V0LCBwcmVfZXhwciBleHByKQoreworICB1bnNpZ25lZCBpbnQg dmFsID0gZ2V0X2V4cHJfdmFsdWVfaWQgKGV4cHIpOwogCiAgIGlmIChiaXRt YXBfc2V0X2NvbnRhaW5zX3ZhbHVlIChzZXQsIHZhbCkpCiAgICAgYml0bWFw X3NldF9yZXBsYWNlX3ZhbHVlIChzZXQsIHZhbCwgZXhwcik7CkBAIC04MTEs MTcgKzgzOCw4OSBAQAogICAgU0VULiAgKi8KIAogc3RhdGljIHZvaWQKLWJp dG1hcF92YWx1ZV9pbnNlcnRfaW50b19zZXQgKGJpdG1hcF9zZXRfdCBzZXQs IHRyZWUgZXhwcikKLXsKLSAgdHJlZSB2YWwgPSBnZXRfdmFsdWVfaGFuZGxl IChleHByKTsKLQotICBpZiAoY29uc3RhbnRfZXhwcl9wICh2YWwpKQorYml0 bWFwX3ZhbHVlX2luc2VydF9pbnRvX3NldCAoYml0bWFwX3NldF90IHNldCwg cHJlX2V4cHIgZXhwcikKK3sKKyAgdW5zaWduZWQgaW50IHZhbCA9IGdldF9l eHByX3ZhbHVlX2lkIChleHByKTsKKworICBpZiAodmFsdWVfaWRfY29uc3Rh bnRfcCAodmFsKSkKICAgICByZXR1cm47CiAKICAgaWYgKCFiaXRtYXBfc2V0 X2NvbnRhaW5zX3ZhbHVlIChzZXQsIHZhbCkpCiAgICAgYml0bWFwX2luc2Vy dF9pbnRvX3NldCAoc2V0LCBleHByKTsKIH0KIAorLyogUHJpbnQgb3V0IEVY UFIgdG8gb3V0ZmlsZS4gICovCisKK3N0YXRpYyB2b2lkCitwcmludF9wcmVf ZXhwciAoRklMRSAqb3V0ZmlsZSwgY29uc3QgcHJlX2V4cHIgZXhwcikgCit7 CisgIHN3aXRjaCAoZXhwci0+a2luZCkKKyAgICB7CisgICAgY2FzZSBDT05T VEFOVDoKKyAgICAgIHByaW50X2dlbmVyaWNfZXhwciAob3V0ZmlsZSwgUFJF X0VYUFJfQ09OU1RBTlQgKGV4cHIpLCAwKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgTkFNRToKKyAgICAgIHByaW50X2dlbmVyaWNfZXhwciAob3V0Zmls ZSwgUFJFX0VYUFJfTkFNRSAoZXhwciksIDApOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSBOQVJZOgorICAgICAgeworCXVuc2lnbmVkIGludCBpOworCXZu X25hcnlfb3BfdCBuYXJ5ID0gUFJFX0VYUFJfTkFSWSAoZXhwcik7CisJZnBy aW50ZiAob3V0ZmlsZSwgInslcywiLCB0cmVlX2NvZGVfbmFtZSBbbmFyeS0+ b3Bjb2RlXSk7CisJZm9yIChpID0gMDsgaSA8IG5hcnktPmxlbmd0aDsgaSsr KQorCSAgeworCSAgICBwcmludF9nZW5lcmljX2V4cHIgKG91dGZpbGUsIG5h cnktPm9wW2ldLCAwKTsKKwkgICAgaWYgKGkgIT0gKHVuc2lnbmVkKSBuYXJ5 LT5sZW5ndGggLSAxKQorCSAgICAgIGZwcmludGYgKG91dGZpbGUsICIsIik7 CisJICB9CisJZnByaW50ZiAob3V0ZmlsZSwgIn0iKTsKKyAgICAgIH0KKyAg ICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBSRUZFUkVOQ0U6CisgICAg ICB7CisJdm5fcmVmZXJlbmNlX29wX3QgdnJvOworCXVuc2lnbmVkIGludCBp OworCXZuX3JlZmVyZW5jZV90IHJlZiA9IFBSRV9FWFBSX1JFRkVSRU5DRSAo ZXhwcik7CisJZnByaW50ZiAob3V0ZmlsZSwgInsiKTsKKwlmb3IgKGkgPSAw OworCSAgICAgVkVDX2l0ZXJhdGUgKHZuX3JlZmVyZW5jZV9vcF9zLCByZWYt Pm9wZXJhbmRzLCBpLCB2cm8pOyAKKwkgICAgIGkrKykKKwkgIHsKKwkgICAg aWYgKHZyby0+b3Bjb2RlICE9IFNTQV9OQU1FCisJCSYmIFRSRUVfQ09ERV9D TEFTUyAodnJvLT5vcGNvZGUpICE9IHRjY19kZWNsYXJhdGlvbikKKwkgICAg ICBmcHJpbnRmIChvdXRmaWxlLCAiJXMgIiwgdHJlZV9jb2RlX25hbWUgW3Zy by0+b3Bjb2RlXSk7CisJICAgIGlmICh2cm8tPm9wMCkKKwkgICAgICB7CisJ CWlmICh2cm8tPm9wMSkKKwkJICBmcHJpbnRmIChvdXRmaWxlLCAiPCIpOwor CQlwcmludF9nZW5lcmljX2V4cHIgKG91dGZpbGUsIHZyby0+b3AwLCAwKTsK KwkJaWYgKHZyby0+b3AxKQorCQkgIHsKKwkJICAgIGZwcmludGYgKG91dGZp bGUsICIsIik7CisJCSAgICBwcmludF9nZW5lcmljX2V4cHIgKG91dGZpbGUs IHZyby0+b3AxLCAwKTsKKwkJICB9CisJCWlmICh2cm8tPm9wMSkKKwkJICBm cHJpbnRmIChvdXRmaWxlLCAiPiIpOworCSAgICAgIH0KKwkgICAgaWYgKGkg IT0gVkVDX2xlbmd0aCAodm5fcmVmZXJlbmNlX29wX3MsIHJlZi0+b3BlcmFu ZHMpIC0gMSkKKwkgICAgICBmcHJpbnRmIChvdXRmaWxlLCAiLCIpOworCSAg fQorCWZwcmludGYgKG91dGZpbGUsICJ9Iik7CisgICAgICB9CisgICAgICBi cmVhazsKKyAgICB9Cit9Cit2b2lkIGRlYnVnX3ByZV9leHByIChwcmVfZXhw cik7CisKKy8qIExpa2UgcHJpbnRfcHJlX2V4cHIgYnV0IGFsd2F5cyBwcmlu dHMgdG8gc3RkZXJyLiAgKi8KK3ZvaWQKK2RlYnVnX3ByZV9leHByIChwcmVf ZXhwciBlKQoreworICBwcmludF9wcmVfZXhwciAoc3RkZXJyLCBlKTsKKyAg ZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKK30KKwogLyogUHJpbnQgb3V0IFNF VCB0byBPVVRGSUxFLiAgKi8KIAogc3RhdGljIHZvaWQKQEAgLTgzNywxNiAr OTM2LDE0IEBACiAKICAgICAgIEZPUl9FQUNIX0VYUFJfSURfSU5fU0VUIChz ZXQsIGksIGJpKQogCXsKLQkgIHRyZWUgZXhwciA9IGV4cHJlc3Npb25fZm9y X2lkIChpKTsKKwkgIGNvbnN0IHByZV9leHByIGV4cHIgPSBleHByZXNzaW9u X2Zvcl9pZCAoaSk7CiAKIAkgIGlmICghZmlyc3QpCiAJICAgIGZwcmludGYg KG91dGZpbGUsICIsICIpOwogCSAgZmlyc3QgPSBmYWxzZTsKLQkgIHByaW50 X2dlbmVyaWNfZXhwciAob3V0ZmlsZSwgZXhwciwgMCk7Ci0KLQkgIGZwcmlu dGYgKG91dGZpbGUsICIgKCIpOwotCSAgcHJpbnRfZ2VuZXJpY19leHByIChv dXRmaWxlLCBnZXRfdmFsdWVfaGFuZGxlIChleHByKSwgMCk7Ci0JICBmcHJp bnRmIChvdXRmaWxlLCAiKSAiKTsKKwkgIHByaW50X3ByZV9leHByIChvdXRm aWxlLCBleHByKTsKKworCSAgZnByaW50ZiAob3V0ZmlsZSwgIiAoJTA0ZCki LCBnZXRfZXhwcl92YWx1ZV9pZCAoZXhwcikpOwogCX0KICAgICB9CiAgIGZw cmludGYgKG91dGZpbGUsICIgfVxuIik7CkBAIC04NjMsNDIgKzk2MCwxNDEg QEAKIC8qIFByaW50IG91dCB0aGUgZXhwcmVzc2lvbnMgdGhhdCBoYXZlIFZB TCB0byBPVVRGSUxFLiAgKi8KIAogdm9pZAotcHJpbnRfdmFsdWVfZXhwcmVz c2lvbnMgKEZJTEUgKm91dGZpbGUsIHRyZWUgdmFsKQotewotICBpZiAoVkFM VUVfSEFORExFX0VYUFJfU0VUICh2YWwpKQorcHJpbnRfdmFsdWVfZXhwcmVz c2lvbnMgKEZJTEUgKm91dGZpbGUsIHVuc2lnbmVkIGludCB2YWwpCit7Cisg IGJpdG1hcF9zZXRfdCBzZXQgPSBWRUNfaW5kZXggKGJpdG1hcF9zZXRfdCwg dmFsdWVfZXhwcmVzc2lvbnMsIHZhbCk7CisgIGlmIChzZXQpCiAgICAgewog ICAgICAgY2hhciBzWzEwXTsKLSAgICAgIHNwcmludGYgKHMsICJWSC4lMDRk IiwgVkFMVUVfSEFORExFX0lEICh2YWwpKTsKLSAgICAgIHByaW50X2JpdG1h cF9zZXQgKG91dGZpbGUsIFZBTFVFX0hBTkRMRV9FWFBSX1NFVCAodmFsKSwg cywgMCk7Ci0gICAgfQotfQotCi0KLXZvaWQKLWRlYnVnX3ZhbHVlX2V4cHJl c3Npb25zICh0cmVlIHZhbCkKKyAgICAgIHNwcmludGYgKHMsICIlMDRkIiwg dmFsKTsKKyAgICAgIHByaW50X2JpdG1hcF9zZXQgKG91dGZpbGUsIHNldCwg cywgMCk7CisgICAgfQorfQorCisKK3ZvaWQKK2RlYnVnX3ZhbHVlX2V4cHJl c3Npb25zICh1bnNpZ25lZCBpbnQgdmFsKQogewogICBwcmludF92YWx1ZV9l eHByZXNzaW9ucyAoc3RkZXJyLCB2YWwpOworfQorCisvKiBHaXZlbiBhIENP TlNUQU5ULCBhbGxvY2F0ZSBhIG5ldyBDT05TVEFOVCB0eXBlIFBSRV9FWFBS IHRvCisgICByZXByZXNlbnQgaXQuICAqLworCitzdGF0aWMgcHJlX2V4cHIK K2dldF9vcl9hbGxvY19leHByX2Zvcl9jb25zdGFudCAodHJlZSBjb25zdGFu dCkKK3sKKyAgdW5zaWduZWQgaW50IHJlc3VsdF9pZDsKKyAgdW5zaWduZWQg aW50IHZhbHVlX2lkOworICBwcmVfZXhwciBuZXdleHByID0gKHByZV9leHBy KSBwb29sX2FsbG9jIChwcmVfZXhwcl9wb29sKTsKKyAgbmV3ZXhwci0+a2lu ZCA9IENPTlNUQU5UOworICBQUkVfRVhQUl9DT05TVEFOVCAobmV3ZXhwcikg PSBjb25zdGFudDsKKyAgcmVzdWx0X2lkID0gbG9va3VwX2V4cHJlc3Npb25f aWQgKG5ld2V4cHIpOworICBpZiAocmVzdWx0X2lkICE9IDApCisgICAgewor ICAgICAgcG9vbF9mcmVlIChwcmVfZXhwcl9wb29sLCBuZXdleHByKTsKKyAg ICAgIG5ld2V4cHIgPSBleHByZXNzaW9uX2Zvcl9pZCAocmVzdWx0X2lkKTsK KyAgICAgIHJldHVybiBuZXdleHByOworICAgIH0KKyAgdmFsdWVfaWQgPSBn ZXRfb3JfYWxsb2NfY29uc3RhbnRfdmFsdWVfaWQgKGNvbnN0YW50KTsKKyAg Z2V0X29yX2FsbG9jX2V4cHJlc3Npb25faWQgKG5ld2V4cHIpOworICBhZGRf dG9fdmFsdWUgKHZhbHVlX2lkLCBuZXdleHByKTsKKyAgcmV0dXJuIG5ld2V4 cHI7Cit9CisKKy8qIEdpdmVuIGEgdmFsdWUgaWQgViwgZmluZCB0aGUgYWN0 dWFsIHRyZWUgcmVwcmVzZW50aW5nIHRoZSBjb25zdGFudAorICAgdmFsdWUg aWYgdGhlcmUgaXMgb25lLCBhbmQgcmV0dXJuIGl0LiBSZXR1cm4gTlVMTCBp ZiB3ZSBjYW4ndCBmaW5kCisgICBhIGNvbnN0YW50LiAgKi8KKworc3RhdGlj IHRyZWUgCitnZXRfY29uc3RhbnRfZm9yX3ZhbHVlX2lkICh1bnNpZ25lZCBp bnQgdikKK3sKKyAgaWYgKHZhbHVlX2lkX2NvbnN0YW50X3AgKHYpKQorICAg IHsKKyAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgYml0bWFwX2l0ZXJh dG9yIGJpOworICAgICAgYml0bWFwX3NldF90IGV4cHJzZXQgPSBWRUNfaW5k ZXggKGJpdG1hcF9zZXRfdCwgdmFsdWVfZXhwcmVzc2lvbnMsIHYpOworICAg ICAgCisgICAgICBGT1JfRUFDSF9FWFBSX0lEX0lOX1NFVCAoZXhwcnNldCwg aSwgYmkpCisJeworCSAgcHJlX2V4cHIgZXhwciA9IGV4cHJlc3Npb25fZm9y X2lkIChpKTsKKwkgIGlmIChleHByLT5raW5kID09IENPTlNUQU5UKQorCSAg ICByZXR1cm4gUFJFX0VYUFJfQ09OU1RBTlQgKGV4cHIpOworCX0KKyAgICB9 CisgIHJldHVybiBOVUxMOworfQorCisvKiBHZXQgb3IgYWxsb2NhdGUgYSBw cmVfZXhwciBmb3IgYSBwaWVjZSBvZiBHSU1QTEUsIGFuZCByZXR1cm4gaXQu CisgICBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBjb25zdGFudHMgYW5kIFNT QV9OQU1FUy4gICovCitzdGF0aWMgcHJlX2V4cHIKK2dldF9vcl9hbGxvY19l eHByX2ZvciAodHJlZSB0KQoreworICBpZiAoVFJFRV9DT0RFICh0KSA9PSBT U0FfTkFNRSkKKyAgICByZXR1cm4gZ2V0X29yX2FsbG9jX2V4cHJfZm9yX25h bWUgKHQpOworICBlbHNlIGlmIChpc19naW1wbGVfbWluX2ludmFyaWFudCAo dCkpCisgICAgcmV0dXJuIGdldF9vcl9hbGxvY19leHByX2Zvcl9jb25zdGFu dCAodCk7CisgIHJldHVybiBOVUxMOwogfQogCiAvKiBSZXR1cm4gdGhlIGZv bGRlZCB2ZXJzaW9uIG9mIFQgaWYgVCwgd2hlbiBmb2xkZWQsIGlzIGEgZ2lt cGxlCiAgICBtaW5faW52YXJpYW50LiAgT3RoZXJ3aXNlLCByZXR1cm4gVC4g ICovCiAKLXN0YXRpYyB0cmVlCi1mdWxseV9jb25zdGFudF9leHByZXNzaW9u ICh0cmVlIHQpCi17Ci0gIHRyZWUgZm9sZGVkOwotICBmb2xkZWQgPSBmb2xk ICh0KTsKLSAgaWYgKGZvbGRlZCAmJiBpc19naW1wbGVfbWluX2ludmFyaWFu dCAoZm9sZGVkKSkKLSAgICByZXR1cm4gZm9sZGVkOwotICByZXR1cm4gdDsK LX0KLQotLyogTWFrZSBhIHRlbXBvcmFyeSBjb3B5IG9mIGEgQ0FMTF9FWFBS IG9iamVjdCBOT0RFLiAgKi8KLQotc3RhdGljIHRyZWUKLXRlbXBfY29weV9j YWxsX2V4cHIgKHRyZWUgbm9kZSkKLXsKLSAgcmV0dXJuICh0cmVlKSBvYnN0 YWNrX2NvcHkgKCZ0ZW1wX2NhbGxfZXhwcl9vYnN0YWNrLCBub2RlLCB0cmVl X3NpemUgKG5vZGUpKTsKK3N0YXRpYyBwcmVfZXhwcgorZnVsbHlfY29uc3Rh bnRfZXhwcmVzc2lvbiAocHJlX2V4cHIgZSkKK3sKKyAgc3dpdGNoIChlLT5r aW5kKSAKKyAgICB7CisgICAgY2FzZSBDT05TVEFOVDoKKyAgICAgIHJldHVy biBlOworICAgIGNhc2UgTkFSWToKKyAgICAgIHsKKwl2bl9uYXJ5X29wX3Qg bmFyeSA9IFBSRV9FWFBSX05BUlkgKGUpOworCXN3aXRjaCAoVFJFRV9DT0RF X0NMQVNTIChuYXJ5LT5vcGNvZGUpKQorCSAgeworCSAgY2FzZSB0Y2NfYmlu YXJ5OgorCSAgICB7CisJICAgICAgLyogV2UgaGF2ZSB0byBnbyBmcm9tIHRy ZWVzIHRvIHByZSBleHBycyB0byB2YWx1ZSBpZHMgdG8KKwkJIGNvbnN0YW50 cy4gICovCisJICAgICAgdHJlZSBuYXJ5b3AwID0gbmFyeS0+b3BbMF07CisJ ICAgICAgdHJlZSBuYXJ5b3AxID0gbmFyeS0+b3BbMV07CisJICAgICAgcHJl X2V4cHIgcmVwMCA9IGdldF9vcl9hbGxvY19leHByX2ZvciAobmFyeW9wMCk7 CisJICAgICAgcHJlX2V4cHIgcmVwMSA9IGdldF9vcl9hbGxvY19leHByX2Zv ciAobmFyeW9wMSk7CisJICAgICAgdW5zaWduZWQgaW50IHZyZXAwID0gZ2V0 X2V4cHJfdmFsdWVfaWQgKHJlcDApOworCSAgICAgIHVuc2lnbmVkIGludCB2 cmVwMSA9IGdldF9leHByX3ZhbHVlX2lkIChyZXAxKTsJICAgICAgCisJICAg ICAgdHJlZSBjb25zdDAgPSBnZXRfY29uc3RhbnRfZm9yX3ZhbHVlX2lkICh2 cmVwMCk7CisJICAgICAgdHJlZSBjb25zdDEgPSBnZXRfY29uc3RhbnRfZm9y X3ZhbHVlX2lkICh2cmVwMSk7CisJICAgICAgdHJlZSByZXN1bHQgPSBOVUxM OworCSAgICAgIGlmIChjb25zdDAgJiYgY29uc3QxKQorCQlyZXN1bHQgPSBm b2xkX2JpbmFyeSAobmFyeS0+b3Bjb2RlLCBuYXJ5LT50eXBlLCBjb25zdDAs CisJCQkJICAgICAgY29uc3QxKTsKKwkgICAgICBpZiAocmVzdWx0ICYmIGlz X2dpbXBsZV9taW5faW52YXJpYW50IChyZXN1bHQpKQorCQlyZXR1cm4gZ2V0 X29yX2FsbG9jX2V4cHJfZm9yX2NvbnN0YW50IChyZXN1bHQpOworCSAgICAg IHJldHVybiBlOworCSAgICB9CisJICBjYXNlIHRjY191bmFyeToKKwkgICAg eworCSAgICAvKiBXZSBoYXZlIHRvIGdvIGZyb20gdHJlZXMgdG8gcHJlIGV4 cHJzIHRvIHZhbHVlIGlkcyB0bworCSAgICAgICBjb25zdGFudHMuICAqLwor CSAgICAgIHRyZWUgbmFyeW9wMCA9IG5hcnktPm9wWzBdOworCSAgICAgIHBy ZV9leHByIHJlcDAgPSBnZXRfb3JfYWxsb2NfZXhwcl9mb3IgKG5hcnlvcDAp OworCSAgICAgIHVuc2lnbmVkIGludCB2cmVwMCA9IGdldF9leHByX3ZhbHVl X2lkIChyZXAwKTsKKwkgICAgICB0cmVlIGNvbnN0MCA9IGdldF9jb25zdGFu dF9mb3JfdmFsdWVfaWQgKHZyZXAwKTsKKwkgICAgICB0cmVlIHJlc3VsdCA9 IE5VTEw7CisJICAgICAgaWYgKGNvbnN0MCkKKwkJcmVzdWx0ID0gZm9sZF91 bmFyeSAobmFyeS0+b3Bjb2RlLCBuYXJ5LT50eXBlLCBjb25zdDApOworCSAg ICAgIGlmIChyZXN1bHQgJiYgaXNfZ2ltcGxlX21pbl9pbnZhcmlhbnQgKHJl c3VsdCkpCisJCXJldHVybiBnZXRfb3JfYWxsb2NfZXhwcl9mb3JfY29uc3Rh bnQgKHJlc3VsdCk7CisJICAgICAgcmV0dXJuIGU7CisJICAgIH0KKwkgIGRl ZmF1bHQ6CisJICAgIHJldHVybiBlOworCSAgfQorICAgICAgfQorICAgIGRl ZmF1bHQ6CisgICAgICByZXR1cm4gZTsKKyAgICB9CisgIHJldHVybiBlOwog fQogCiAvKiBUcmFuc2xhdGUgdGhlIHZ1c2VzIGluIHRoZSBWVVNFUyB2ZWN0 b3IgYmFja3dhcmRzIHRocm91Z2ggcGhpIG5vZGVzCkBAIC05NDksNDQgKzEx NDUsMTU1IEBACiAgICBTRVQyLiAgVGhpcyBpcyB1c2VkIHRvIGF2b2lkIG1h a2luZyBhIHNldCBjb25zaXN0aW5nIG9mIHRoZSB1bmlvbgogICAgb2YgUEFf SU4gYW5kIEFOVElDX0lOIGR1cmluZyBpbnNlcnQuICAqLwogCi1zdGF0aWMg aW5saW5lIHRyZWUKLWZpbmRfbGVhZGVyX2luX3NldHMgKHRyZWUgZXhwciwg Yml0bWFwX3NldF90IHNldDEsIGJpdG1hcF9zZXRfdCBzZXQyKQotewotICB0 cmVlIHJlc3VsdDsKLQotICByZXN1bHQgPSBiaXRtYXBfZmluZF9sZWFkZXIg KHNldDEsIGV4cHIsIE5VTExfVFJFRSk7CitzdGF0aWMgaW5saW5lIHByZV9l eHByCitmaW5kX2xlYWRlcl9pbl9zZXRzICh1bnNpZ25lZCBpbnQgdmFsLCBi aXRtYXBfc2V0X3Qgc2V0MSwgYml0bWFwX3NldF90IHNldDIpCit7CisgIHBy ZV9leHByIHJlc3VsdDsKKworICByZXN1bHQgPSBiaXRtYXBfZmluZF9sZWFk ZXIgKHNldDEsIHZhbCwgTlVMTF9UUkVFKTsKICAgaWYgKCFyZXN1bHQgJiYg c2V0MikKLSAgICByZXN1bHQgPSBiaXRtYXBfZmluZF9sZWFkZXIgKHNldDIs IGV4cHIsIE5VTExfVFJFRSk7CisgICAgcmVzdWx0ID0gYml0bWFwX2ZpbmRf bGVhZGVyIChzZXQyLCB2YWwsIE5VTExfVFJFRSk7CiAgIHJldHVybiByZXN1 bHQ7CiB9CiAKKy8qIEdldCB0aGUgdHJlZSB0eXBlIGZvciBvdXIgUFJFIGV4 cHJlc3Npb24gZS4gICovCisKK3N0YXRpYyB0cmVlCitnZXRfZXhwcl90eXBl IChjb25zdCBwcmVfZXhwciBlKSAKK3sKKyAgc3dpdGNoIChlLT5raW5kKSAK KyAgICB7CisgICAgY2FzZSBOQU1FOgorICAgICAgcmV0dXJuIFRSRUVfVFlQ RSAoUFJFX0VYUFJfTkFNRSAoZSkpOworICAgIGNhc2UgQ09OU1RBTlQ6Cisg ICAgICByZXR1cm4gVFJFRV9UWVBFIChQUkVfRVhQUl9DT05TVEFOVCAoZSkp OworICAgIGNhc2UgUkVGRVJFTkNFOgorICAgICAgeworCXZuX3JlZmVyZW5j ZV9vcF90IHZybzsKKworCWdjY19hc3NlcnQgKFBSRV9FWFBSX1JFRkVSRU5D RSAoZSktPm9wZXJhbmRzKTsKKwl2cm8gPSBWRUNfaW5kZXggKHZuX3JlZmVy ZW5jZV9vcF9zLAorCQkJIFBSRV9FWFBSX1JFRkVSRU5DRSAoZSktPm9wZXJh bmRzLAorCQkJIDApOworCS8qIFdlIGRvbid0IHN0b3JlIHR5cGUgYWxvbmcg d2l0aCBDT01QT05FTlRfUkVGIGJlY2F1c2UgaXQgaXMKKwkgICBhbHdheXMg dGhlIHNhbWUgYXMgRklFTERfREVDTCdzIHR5cGUuICAqLworCWlmICghdnJv LT50eXBlKQorCSAgeworCSAgICBnY2NfYXNzZXJ0ICh2cm8tPm9wY29kZSA9 PSBDT01QT05FTlRfUkVGKTsKKwkgICAgcmV0dXJuIFRSRUVfVFlQRSAodnJv LT5vcDApOworCSAgfQorCXJldHVybiB2cm8tPnR5cGU7CisgICAgICB9CisK KyAgICBjYXNlIE5BUlk6CisgICAgICByZXR1cm4gUFJFX0VYUFJfTkFSWSAo ZSktPnR5cGU7CisgICAgfQorICBnY2NfdW5yZWFjaGFibGUoKTsKK30KKwor LyogR2V0IGEgcmVwcmVzZW50YXRpdmUgU1NBX05BTUUgZm9yIGEgZ2l2ZW4g ZXhwcmVzc2lvbi4KKyAgIFNpbmNlIGFsbCBvZiBvdXIgc3ViLWV4cHJlc3Np b25zIGFyZSB0cmVhdGVkIGFzIHZhbHVlcywgd2UgcmVxdWlyZQorICAgdGhl bSB0byBiZSBTU0FfTkFNRSdzIGZvciBzaW1wbGljaXR5LgorICAgUHJpb3Ig dmVyc2lvbnMgb2YgR1ZOUFJFIHVzZWQgdG8gdXNlICJ2YWx1ZSBoYW5kbGVz IiBoZXJlLCBzbyB0aGF0CisgICBhbiBleHByZXNzaW9uIHdvdWxkIGJlIFZI LjExICsgVkguMTAgaW5zdGVhZCBvZiBkXzMgKyBlXzYuICBJbgorICAgZWl0 aGVyIGNhc2UsIHRoZSBvcGVyYW5kcyBhcmUgcmVhbGx5IHZhbHVlcyAoSUUg d2UgZG8gbm90IGV4cGVjdAorICAgdGhlbSB0byBiZSB1c2FibGUgd2l0aG91 dCBmaW5kaW5nIGxlYWRlcnMpLiAgKi8KKworc3RhdGljIHRyZWUKK2dldF9y ZXByZXNlbnRhdGl2ZV9mb3IgKGNvbnN0IHByZV9leHByIGUpIAoreworICB0 cmVlIGV4cHJ0eXBlOworICB0cmVlIG5hbWU7CisgIHVuc2lnbmVkIGludCB2 YWx1ZV9pZCA9IGdldF9leHByX3ZhbHVlX2lkIChlKTsKKworICBzd2l0Y2gg KGUtPmtpbmQpCisgICAgeworICAgIGNhc2UgTkFNRToKKyAgICAgIHJldHVy biBQUkVfRVhQUl9OQU1FIChlKTsKKyAgICBjYXNlIENPTlNUQU5UOgorICAg IGNhc2UgTkFSWTogICAgICAKKyAgICBjYXNlIFJFRkVSRU5DRToKKyAgICAg IHsKKwkvKiBHbyB0aHJvdWdoIGFsbCBvZiB0aGUgZXhwcmVzc2lvbnMgcmVw cmVzZW50aW5nIHRoaXMgdmFsdWUKKwkgICBhbmQgcGljayBvdXQgYW4gU1NB X05BTUUuICAqLworCXVuc2lnbmVkIGludCBpOworCWJpdG1hcF9pdGVyYXRv ciBiaTsKKwliaXRtYXBfc2V0X3QgZXhwcnMgPSBWRUNfaW5kZXggKGJpdG1h cF9zZXRfdCwgdmFsdWVfZXhwcmVzc2lvbnMsCisJCQkJCXZhbHVlX2lkKTsK KwlGT1JfRUFDSF9FWFBSX0lEX0lOX1NFVCAoZXhwcnMsIGksIGJpKQorCSAg eworCSAgICBwcmVfZXhwciByZXAgPSBleHByZXNzaW9uX2Zvcl9pZCAoaSk7 CisJICAgIGlmIChyZXAtPmtpbmQgPT0gTkFNRSkKKwkgICAgICByZXR1cm4g UFJFX0VYUFJfTkFNRSAocmVwKTsKKwkgIH0KKyAgICAgIH0KKyAgICAgIGJy ZWFrOworICAgIH0KKyAgLyogSWYgd2UgcmVhY2hlZCBoZXJlIHdlIGNvdWxk bid0IGZpbmQgYW4gU1NBX05BTUUuICBUaGlzIGNhbgorICAgICBoYXBwZW4g d2hlbiB3ZSd2ZSBkaXNjb3ZlcmVkIGEgdmFsdWUgdGhhdCBoYXMgbmV2ZXIg YXBwZWFyZWQgaW4KKyAgICAgdGhlIHByb2dyYW0gYXMgc2V0IHRvIGFuIFNT QV9OQU1FLCBtb3N0IGxpa2VseSBhcyB0aGUgcmVzdWx0IG9mCisgICAgIHBo aSB0cmFuc2xhdGlvbi4gICovCisgIGlmIChkdW1wX2ZpbGUpCisgICAgewor ICAgICAgZnByaW50ZiAoZHVtcF9maWxlLAorCSAgICAgICAiQ291bGQgbm90 IGZpbmQgU1NBX05BTUUgcmVwcmVzZW50YXRpdmUgZm9yIGV4cHJlc3Npb246 Iik7CisgICAgICBwcmludF9wcmVfZXhwciAoZHVtcF9maWxlLCBlKTsKKyAg ICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxuIik7CisgICAgfQorICAKKyAg ZXhwcnR5cGUgPSBnZXRfZXhwcl90eXBlIChlKTsKKyAgCisgIC8qIEJ1aWxk IGFuZCBpbnNlcnQgdGhlIGFzc2lnbm1lbnQgb2YgdGhlIGVuZCByZXN1bHQg dG8gdGhlIHRlbXBvcmFyeQorICAgICB0aGF0IHdlIHdpbGwgcmV0dXJuLiAg Ki8KKyAgaWYgKCFwcmV0ZW1wIHx8IGV4cHJ0eXBlICE9IFRSRUVfVFlQRSAo cHJldGVtcCkpCisgICAgeworICAgICAgcHJldGVtcCA9IGNyZWF0ZV90bXBf dmFyIChleHBydHlwZSwgInByZXRtcCIpOworICAgICAgZ2V0X3Zhcl9hbm4g KHByZXRlbXApOworICAgIH0KKworICBuYW1lID0gbWFrZV9zc2FfbmFtZSAo cHJldGVtcCwgYnVpbGRfZW1wdHlfc3RtdCAoKSk7CisgIFZOX0lORk9fR0VU IChuYW1lKS0+dmFsdWVfaWQgPSB2YWx1ZV9pZDsKKyAgaWYgKGUtPmtpbmQg PT0gQ09OU1RBTlQpCisgICAgVk5fSU5GTyAobmFtZSktPnZhbG51bSA9IFBS RV9FWFBSX0NPTlNUQU5UIChlKTsKKyAgZWxzZQorICAgIFZOX0lORk8gKG5h bWUpLT52YWxudW0gPSBuYW1lOworCisgIGFkZF90b192YWx1ZSAodmFsdWVf aWQsIGdldF9vcl9hbGxvY19leHByX2Zvcl9uYW1lIChuYW1lKSk7CisgIGlm IChkdW1wX2ZpbGUpCisgICAgeworICAgICAgZnByaW50ZiAoZHVtcF9maWxl LCAiQ3JlYXRlZCBTU0FfTkFNRSByZXByZXNlbnRhdGl2ZSAiKTsKKyAgICAg IHByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCBuYW1lLCAwKTsKKyAg ICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIiBmb3IgZXhwcmVzc2lvbjoiKTsK KyAgICAgIHByaW50X3ByZV9leHByIChkdW1wX2ZpbGUsIGUpOworICAgICAg ZnByaW50ZiAoZHVtcF9maWxlLCAiXG4iKTsKKyAgICB9CisKKyAgcmV0dXJu IG5hbWU7ICAKK30KKworCSAgICAKKworICAgICAgCiAvKiBUcmFuc2xhdGUg RVhQUiB1c2luZyBwaGlzIGluIFBISUJMT0NLLCBzbyB0aGF0IGl0IGhhcyB0 aGUgdmFsdWVzIG9mCiAgICB0aGUgcGhpcyBpbiBQUkVELiAgU0VFTiBpcyBh IGJpdG1hcCBzYXlpbmcgd2hpY2ggZXhwcmVzc2lvbiB3ZSBoYXZlCiAgICB0 cmFuc2xhdGVkIHNpbmNlIHdlIHN0YXJ0ZWQgdHJhbnNsYXRpb24gb2YgdGhl IHRvcGxldmVsIGV4cHJlc3Npb24uCiAgICBSZXR1cm4gTlVMTCBpZiB3ZSBj YW4ndCBmaW5kIGEgbGVhZGVyIGZvciBlYWNoIHBhcnQgb2YgdGhlCiAgICB0 cmFuc2xhdGVkIGV4cHJlc3Npb24uICAqLwogCi1zdGF0aWMgdHJlZQotcGhp X3RyYW5zbGF0ZV8xICh0cmVlIGV4cHIsIGJpdG1hcF9zZXRfdCBzZXQxLCBi aXRtYXBfc2V0X3Qgc2V0MiwKK3N0YXRpYyBwcmVfZXhwcgorcGhpX3RyYW5z bGF0ZV8xIChwcmVfZXhwciBleHByLCBiaXRtYXBfc2V0X3Qgc2V0MSwgYml0 bWFwX3NldF90IHNldDIsCiAJCSBiYXNpY19ibG9jayBwcmVkLCBiYXNpY19i bG9jayBwaGlibG9jaywgYml0bWFwIHNlZW4pCiB7Ci0gIHRyZWUgcGhpdHJh bnMgPSBOVUxMOwotICB0cmVlIG9sZGV4cHIgPSBleHByOwotCi0gIGlmIChl eHByID09IE5VTEwpCisgIHByZV9leHByIG9sZGV4cHIgPSBleHByOworICBw cmVfZXhwciBwaGl0cmFuczsKKyAgCisgIGlmICghZXhwcikKICAgICByZXR1 cm4gTlVMTDsKLQotICBpZiAoY29uc3RhbnRfZXhwcl9wIChleHByKSkKKyAg CisgIGlmICh2YWx1ZV9pZF9jb25zdGFudF9wIChnZXRfZXhwcl92YWx1ZV9p ZCAoZXhwcikpKQogICAgIHJldHVybiBleHByOwotCi0gIC8qIFBoaSB0cmFu c2xhdGlvbnMgb2YgYSBnaXZlbiBleHByZXNzaW9uIGRvbid0IGNoYW5nZS4g ICovCi0gIGlmIChFWFBSX1AgKGV4cHIpIHx8IEdJTVBMRV9TVE1UX1AgKGV4 cHIpKQotICAgIHsKLSAgICAgIHBoaXRyYW5zID0gcGhpX3RyYW5zX2xvb2t1 cCAoZXhwciwgcHJlZCwgZ2V0X2V4cHJlc3Npb25fdnVzZXMgKGV4cHIpKTsK LSAgICB9Ci0gIGVsc2UKLSAgICBwaGl0cmFucyA9IHBoaV90cmFuc19sb29r dXAgKGV4cHIsIHByZWQsIE5VTEwpOwotCisgIAorICBwaGl0cmFucyA9IHBo aV90cmFuc19sb29rdXAgKGV4cHIsIHByZWQpOwogICBpZiAocGhpdHJhbnMp CiAgICAgcmV0dXJuIHBoaXRyYW5zOwogCkBAIC0xMDAwLDMxNyArMTMwNywy MjMgQEAKICAgICAgIGJpdG1hcF9zZXRfYml0IChzZWVuLCBleHByX2lkKTsK ICAgICB9CiAKLSAgc3dpdGNoIChUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09E RSAoZXhwcikpKQotICAgIHsKLSAgICBjYXNlIHRjY19leHByZXNzaW9uOgot ICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBjYXNlIHRjY192bF9leHA6Ci0g ICAgICB7Ci0JaWYgKFRSRUVfQ09ERSAoZXhwcikgIT0gQ0FMTF9FWFBSKQot CSAgcmV0dXJuIE5VTEw7Ci0JZWxzZQotCSAgewotCSAgICB0cmVlIG9sZGZu ID0gQ0FMTF9FWFBSX0ZOIChleHByKTsKLQkgICAgdHJlZSBvbGRzYyA9IENB TExfRVhQUl9TVEFUSUNfQ0hBSU4gKGV4cHIpOwotCSAgICB0cmVlIG5ld2Zu LCBuZXdzYyA9IE5VTEw7Ci0JICAgIHRyZWUgbmV3ZXhwciA9IE5VTExfVFJF RTsKLQkgICAgYm9vbCBpbnZhcmlhbnRhcmcgPSBmYWxzZTsKLQkgICAgaW50 IGksIG5hcmdzOwotCSAgICBWRUMgKHRyZWUsIGdjKSAqdnVzZXMgPSBnZXRf ZXhwcmVzc2lvbl92dXNlcyAoZXhwcik7Ci0JICAgIFZFQyAodHJlZSwgZ2Mp ICp0dnVzZXM7Ci0KLQkgICAgbmV3Zm4gPSBwaGlfdHJhbnNsYXRlXzEgKGZp bmRfbGVhZGVyX2luX3NldHMgKG9sZGZuLCBzZXQxLCBzZXQyKSwKLQkJCQkg ICAgIHNldDEsIHNldDIsIHByZWQsIHBoaWJsb2NrLCBzZWVuKTsKLQkgICAg aWYgKG5ld2ZuID09IE5VTEwpCi0JICAgICAgcmV0dXJuIE5VTEw7Ci0JICAg IGlmIChuZXdmbiAhPSBvbGRmbikKLQkgICAgICB7Ci0JCW5ld2V4cHIgPSB0 ZW1wX2NvcHlfY2FsbF9leHByIChleHByKTsKLQkJQ0FMTF9FWFBSX0ZOIChu ZXdleHByKSA9IGdldF92YWx1ZV9oYW5kbGUgKG5ld2ZuKTsKLQkgICAgICB9 Ci0JICAgIGlmIChvbGRzYykKLQkgICAgICB7Ci0JCW5ld3NjID0gcGhpX3Ry YW5zbGF0ZV8xIChmaW5kX2xlYWRlcl9pbl9zZXRzIChvbGRzYywgc2V0MSwg c2V0MiksCi0JCQkJCSBzZXQxLCBzZXQyLCBwcmVkLCBwaGlibG9jaywgc2Vl bik7Ci0JCWlmIChuZXdzYyA9PSBOVUxMKQorICBzd2l0Y2ggKGV4cHItPmtp bmQpCisgICAgeworICAgICAgLyogQ29uc3RhbnRzIGNvbnRhaW4gbm8gdmFs dWVzIHRoYXQgbmVlZCB0cmFuc2xhdGlvbi4gICovCisgICAgY2FzZSBDT05T VEFOVDoKKyAgICAgIHJldHVybiBleHByOworICAgICAgCisgICAgY2FzZSBO QVJZOgorICAgICAgeworCXVuc2lnbmVkIGludCBpOworCWJvb2wgY2hhbmdl ZCA9IGZhbHNlOwkKKwl2bl9uYXJ5X29wX3QgbmFyeSA9IFBSRV9FWFBSX05B UlkgKGV4cHIpOworCXN0cnVjdCB2bl9uYXJ5X29wX3MgbmV3bmFyeTsKKwkv KiBUaGUgTkFSWSBzdHJ1Y3R1cmUgaXMgb25seSBndWFyYW50ZWVkIHRvIGhh dmUgYmVlbgorCSAgIGFsbG9jYXRlZCB0byB0aGUgbmFyeS0+bGVuZ3RoIG9w ZXJhbmRzLiAgKi8KKwltZW1jcHkgKCZuZXduYXJ5LCBuYXJ5LCAoc2l6ZW9m IChzdHJ1Y3Qgdm5fbmFyeV9vcF9zKQorCQkJCSAtIHNpemVvZiAodHJlZSkg KiAoNCAtIG5hcnktPmxlbmd0aCkpKTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwg bmV3bmFyeS5sZW5ndGg7IGkrKykKKwkgIHsKKwkgICAgaWYgKFRSRUVfQ09E RSAobmV3bmFyeS5vcFtpXSkgIT0gU1NBX05BTUUpCisJICAgICAgY29udGlu dWU7CisJICAgIGVsc2UKKwkgICAgICB7CisJCXVuc2lnbmVkIGludCBvcF92 YWxfaWQgPSBWTl9JTkZPIChuZXduYXJ5Lm9wW2ldKS0+dmFsdWVfaWQ7CisJ CXByZV9leHByIGxlYWRlciA9IGZpbmRfbGVhZGVyX2luX3NldHMgKG9wX3Zh bF9pZCwgc2V0MSwgc2V0Mik7CisJCXByZV9leHByIHJlc3VsdCA9IHBoaV90 cmFuc2xhdGVfMSAobGVhZGVyLCBzZXQxLCBzZXQyLAorCQkJCQkJICAgcHJl ZCwgcGhpYmxvY2ssIHNlZW4pOworCQlpZiAocmVzdWx0ICYmIHJlc3VsdCAh PSBsZWFkZXIpCisJCSAgeworCQkgICAgdHJlZSBuYW1lID0gZ2V0X3JlcHJl c2VudGF0aXZlX2ZvciAocmVzdWx0KTsKKwkJICAgIGlmICghbmFtZSkKKwkJ ICAgICAgcmV0dXJuIE5VTEw7CisJCSAgICBuZXduYXJ5Lm9wW2ldID0gbmFt ZTsKKwkJICB9CisJCWVsc2UgaWYgKCFyZXN1bHQpCiAJCSAgcmV0dXJuIE5V TEw7Ci0JCWlmIChuZXdzYyAhPSBvbGRzYykKLQkJICB7Ci0JCSAgICBpZiAo IW5ld2V4cHIpCi0JCSAgICAgIG5ld2V4cHIgPSB0ZW1wX2NvcHlfY2FsbF9l eHByIChleHByKTsKLQkJICAgIENBTExfRVhQUl9TVEFUSUNfQ0hBSU4gKG5l d2V4cHIpID0gZ2V0X3ZhbHVlX2hhbmRsZSAobmV3c2MpOwotCQkgIH0KLQkg ICAgICB9Ci0KLQkgICAgLyogcGhpIHRyYW5zbGF0ZSB0aGUgYXJndW1lbnQg bGlzdCBwaWVjZSBieSBwaWVjZS4gICovCi0JICAgIG5hcmdzID0gY2FsbF9l eHByX25hcmdzIChleHByKTsKLQkgICAgZm9yIChpID0gMDsgaSA8IG5hcmdz OyBpKyspCi0JICAgICAgewotCQl0cmVlIG9sZHZhbCA9IENBTExfRVhQUl9B UkcgKGV4cHIsIGkpOwotCQl0cmVlIG5ld3ZhbDsKLQkJaWYgKG9sZHZhbCkK LQkJICB7Ci0JCSAgICAvKiBUaGlzIG1heSBzZWVtIGxpa2UgYSB3ZWlyZCBw bGFjZSBmb3IgdGhpcwotCQkgICAgICAgY2hlY2ssIGJ1dCBpdCdzIGFjdHVh bGx5IHRoZSBlYXNpZXN0IHBsYWNlIHRvCi0JCSAgICAgICBkbyBpdC4gIFdl IGNhbid0IGRvIGl0IGxvd2VyIG9uIGluIHRoZQotCQkgICAgICAgcmVjdXJz aW9uIGJlY2F1c2UgaXQncyB2YWxpZCBmb3IgcGllY2VzIG9mIGEKLQkJICAg ICAgIGNvbXBvbmVudCByZWYgdG8gYmUgb2YgQUdHUkVHQVRFX1RZUEUsIGFz IGxvbmcKLQkJICAgICAgIGFzIHRoZSBvdXRlcm1vc3Qgb25lIGlzIG5vdC4K LQkJICAgICAgIFRvIGF2b2lkICp0aGF0KiBjYXNlLCB3ZSBoYXZlIGEgY2hl Y2sgZm9yCi0JCSAgICAgICBBR0dSRUdBVEVfVFlQRV9QIGluIGluc2VydF9h dXguICBIb3dldmVyLCB0aGF0Ci0JCSAgICAgICBjaGVjayB3aWxsICpub3Qq IGNhdGNoIHRoaXMgY2FzZSBiZWNhdXNlIGhlcmUKLQkJICAgICAgIGl0IG9j Y3VycyBpbiB0aGUgYXJndW1lbnQgbGlzdC4gICovCi0JCSAgICBpZiAoQUdH UkVHQVRFX1RZUEVfUCAoVFJFRV9UWVBFIChvbGR2YWwpKSkKLQkJICAgICAg cmV0dXJuIE5VTEw7Ci0JCSAgICBvbGR2YWwgPSBmaW5kX2xlYWRlcl9pbl9z ZXRzIChvbGR2YWwsIHNldDEsIHNldDIpOwotCQkgICAgbmV3dmFsID0gcGhp X3RyYW5zbGF0ZV8xIChvbGR2YWwsIHNldDEsIHNldDIsIHByZWQsCi0JCQkJ CSAgICBwaGlibG9jaywgc2Vlbik7Ci0JCSAgICBpZiAobmV3dmFsID09IE5V TEwpCi0JCSAgICAgIHJldHVybiBOVUxMOwotCQkgICAgaWYgKG5ld3ZhbCAh PSBvbGR2YWwpCi0JCSAgICAgIHsKLQkJCWludmFyaWFudGFyZyB8PSBpc19n aW1wbGVfbWluX2ludmFyaWFudCAobmV3dmFsKTsKLQkJCWlmICghbmV3ZXhw cikKLQkJCSAgbmV3ZXhwciA9IHRlbXBfY29weV9jYWxsX2V4cHIgKGV4cHIp OwotCQkJQ0FMTF9FWFBSX0FSRyAobmV3ZXhwciwgaSkgPSBnZXRfdmFsdWVf aGFuZGxlIChuZXd2YWwpOwotCQkgICAgICB9Ci0JCSAgfQotCSAgICAgIH0K LQotCSAgICAvKiBJbiBjYXNlIG9mIG5ldyBpbnZhcmlhbnQgYXJncyB3ZSBt aWdodCB0cnkgdG8gZm9sZCB0aGUgY2FsbAotCSAgICAgICBhZ2Fpbi4gICov Ci0JICAgIGlmIChpbnZhcmlhbnRhcmcgJiYgIW5ld3NjKQotCSAgICAgIHsK LQkJdHJlZSB0bXAxID0gYnVpbGRfY2FsbF9hcnJheSAoVFJFRV9UWVBFIChl eHByKSwKLQkJCQkJICAgICAgbmV3Zm4sIGNhbGxfZXhwcl9uYXJncyAobmV3 ZXhwciksCi0JCQkJCSAgICAgIENBTExfRVhQUl9BUkdQIChuZXdleHByKSk7 Ci0JCXRyZWUgdG1wMiA9IGZvbGQgKHRtcDEpOwotCQlpZiAodG1wMiAhPSB0 bXAxKQotCQkgIHsKLQkJICAgIFNUUklQX1RZUEVfTk9QUyAodG1wMik7Ci0J CSAgICBpZiAoaXNfZ2ltcGxlX21pbl9pbnZhcmlhbnQgKHRtcDIpKQotCQkg ICAgICByZXR1cm4gdG1wMjsKLQkJICB9Ci0JICAgICAgfQotCi0JICAgIHR2 dXNlcyA9IHRyYW5zbGF0ZV92dXNlc190aHJvdWdoX2Jsb2NrICh2dXNlcywg cGhpYmxvY2ssIHByZWQpOwotCSAgICBpZiAodnVzZXMgIT0gdHZ1c2VzICYm ICEgbmV3ZXhwcikKLQkgICAgICBuZXdleHByID0gdGVtcF9jb3B5X2NhbGxf ZXhwciAoZXhwcik7Ci0KLQkgICAgaWYgKG5ld2V4cHIpCi0JICAgICAgewot CQluZXdleHByLT5iYXNlLmFubiA9IE5VTEw7Ci0JCXZuX2xvb2t1cF9vcl9h ZGRfd2l0aF92dXNlcyAobmV3ZXhwciwgdHZ1c2VzKTsKLQkJZXhwciA9IG5l d2V4cHI7Ci0JCXNldF9leHByZXNzaW9uX3Z1c2VzIChuZXdleHByLCB0dnVz ZXMpOwotCSAgICAgIH0KLQkgICAgcGhpX3RyYW5zX2FkZCAob2xkZXhwciwg ZXhwciwgcHJlZCwgdHZ1c2VzKTsKLQkgIH0KLSAgICAgIH0KLSAgICAgIHJl dHVybiBleHByOwotCi0gICAgY2FzZSB0Y2NfZGVjbGFyYXRpb246Ci0gICAg ICB7Ci0JVkVDICh0cmVlLCBnYykgKiBvbGR2dXNlcyA9IE5VTEw7Ci0JVkVD ICh0cmVlLCBnYykgKiBuZXd2dXNlcyA9IE5VTEw7Ci0KLQlvbGR2dXNlcyA9 IGdldF9leHByZXNzaW9uX3Z1c2VzIChleHByKTsKLQlpZiAob2xkdnVzZXMp Ci0JICBuZXd2dXNlcyA9IHRyYW5zbGF0ZV92dXNlc190aHJvdWdoX2Jsb2Nr IChvbGR2dXNlcywgcGhpYmxvY2ssCi0JCQkJCQkgICAgcHJlZCk7Ci0KLQlp ZiAob2xkdnVzZXMgIT0gbmV3dnVzZXMpCi0JICB7Ci0JICAgIHZuX2xvb2t1 cF9vcl9hZGRfd2l0aF92dXNlcyAoZXhwciwgbmV3dnVzZXMpOwotCSAgICBz ZXRfZXhwcmVzc2lvbl92dXNlcyAoZXhwciwgbmV3dnVzZXMpOwotCSAgfQot CXBoaV90cmFuc19hZGQgKG9sZGV4cHIsIGV4cHIsIHByZWQsIG5ld3Z1c2Vz KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBleHByOwotCi0gICAgY2FzZSB0 Y2NfcmVmZXJlbmNlOgotICAgICAgewotCXRyZWUgb2xkb3AwID0gVFJFRV9P UEVSQU5EIChleHByLCAwKTsKLQl0cmVlIG9sZG9wMSA9IE5VTEw7Ci0JdHJl ZSBuZXdvcDA7Ci0JdHJlZSBuZXdvcDEgPSBOVUxMOwotCXRyZWUgb2xkb3Ay ID0gTlVMTDsKLQl0cmVlIG5ld29wMiA9IE5VTEw7Ci0JdHJlZSBvbGRvcDMg PSBOVUxMOwotCXRyZWUgbmV3b3AzID0gTlVMTDsKLQl0cmVlIG5ld2V4cHI7 Ci0JVkVDICh0cmVlLCBnYykgKiBvbGR2dXNlcyA9IE5VTEw7Ci0JVkVDICh0 cmVlLCBnYykgKiBuZXd2dXNlcyA9IE5VTEw7Ci0KLQlpZiAoVFJFRV9DT0RF IChleHByKSAhPSBJTkRJUkVDVF9SRUYKLQkgICAgJiYgVFJFRV9DT0RFIChl eHByKSAhPSBDT01QT05FTlRfUkVGCi0JICAgICYmIFRSRUVfQ09ERSAoZXhw cikgIT0gQVJSQVlfUkVGKQotCSAgcmV0dXJuIE5VTEw7Ci0KLQlvbGRvcDAg PSBmaW5kX2xlYWRlcl9pbl9zZXRzIChvbGRvcDAsIHNldDEsIHNldDIpOwot CW5ld29wMCA9IHBoaV90cmFuc2xhdGVfMSAob2xkb3AwLCBzZXQxLCBzZXQy LCBwcmVkLCBwaGlibG9jaywgc2Vlbik7Ci0JaWYgKG5ld29wMCA9PSBOVUxM KQotCSAgcmV0dXJuIE5VTEw7Ci0KLQlpZiAoVFJFRV9DT0RFIChleHByKSA9 PSBBUlJBWV9SRUYpCi0JICB7Ci0JICAgIG9sZG9wMSA9IFRSRUVfT1BFUkFO RCAoZXhwciwgMSk7Ci0JICAgIG9sZG9wMSA9IGZpbmRfbGVhZGVyX2luX3Nl dHMgKG9sZG9wMSwgc2V0MSwgc2V0Mik7Ci0JICAgIG5ld29wMSA9IHBoaV90 cmFuc2xhdGVfMSAob2xkb3AxLCBzZXQxLCBzZXQyLCBwcmVkLCBwaGlibG9j aywgc2Vlbik7Ci0KLQkgICAgaWYgKG5ld29wMSA9PSBOVUxMKQotCSAgICAg IHJldHVybiBOVUxMOwotCi0JICAgIG9sZG9wMiA9IFRSRUVfT1BFUkFORCAo ZXhwciwgMik7Ci0JICAgIGlmIChvbGRvcDIpCi0JICAgICAgewotCQlvbGRv cDIgPSBmaW5kX2xlYWRlcl9pbl9zZXRzIChvbGRvcDIsIHNldDEsIHNldDIp OwotCQluZXdvcDIgPSBwaGlfdHJhbnNsYXRlXzEgKG9sZG9wMiwgc2V0MSwg c2V0MiwgcHJlZCwgcGhpYmxvY2ssIHNlZW4pOwotCi0JCWlmIChuZXdvcDIg PT0gTlVMTCkKKwkJCisJCWNoYW5nZWQgfD0gbmV3bmFyeS5vcFtpXSAhPSBu YXJ5LT5vcFtpXTsKKwkgICAgICB9CisJICB9CisJaWYgKGNoYW5nZWQpCisJ ICB7CisJICAgIHByZV9leHByIGNvbnN0YW50OworCSAgICAKKwkgICAgdHJl ZSByZXN1bHQgPSB2bl9uYXJ5X29wX2xvb2t1cF9waWVjZXMgKG5ld25hcnku bGVuZ3RoLAorCQkJCQkJICAgIG5ld25hcnkub3Bjb2RlLAorCQkJCQkJICAg IG5ld25hcnkudHlwZSwKKwkJCQkJCSAgICBuZXduYXJ5Lm9wWzBdLAorCQkJ CQkJICAgIG5ld25hcnkub3BbMV0sCisJCQkJCQkgICAgbmV3bmFyeS5vcFsy XSwKKwkJCQkJCSAgICBuZXduYXJ5Lm9wWzNdLAorCQkJCQkJICAgICZuYXJ5 KTsKKwkgICAgdW5zaWduZWQgaW50IG5ld192YWxfaWQ7CisJICAgIAorCSAg ICBleHByID0gKHByZV9leHByKSBwb29sX2FsbG9jIChwcmVfZXhwcl9wb29s KTsKKwkgICAgZXhwci0+a2luZCA9IE5BUlk7CisJICAgIGV4cHItPmlkID0g MDsKKwkgICAgaWYgKHJlc3VsdCAmJiBpc19naW1wbGVfbWluX2ludmFyaWFu dCAocmVzdWx0KSkKKwkgICAgICByZXR1cm4gZ2V0X29yX2FsbG9jX2V4cHJf Zm9yX2NvbnN0YW50IChyZXN1bHQpOworCisKKwkgICAgaWYgKG5hcnkpCisJ ICAgICAgeworCQlQUkVfRVhQUl9OQVJZIChleHByKSA9IG5hcnk7CisJCWNv bnN0YW50ID0gZnVsbHlfY29uc3RhbnRfZXhwcmVzc2lvbiAoZXhwcik7CisJ CWlmIChjb25zdGFudCAhPSBleHByKQorCQkgIHJldHVybiBjb25zdGFudDsK KworCQluZXdfdmFsX2lkID0gbmFyeS0+dmFsdWVfaWQ7CisJCWdldF9vcl9h bGxvY19leHByZXNzaW9uX2lkIChleHByKTsKKwkgICAgICB9CisJICAgIGVs c2UKKwkgICAgICB7CisJCW5ld192YWxfaWQgPSBnZXRfbmV4dF92YWx1ZV9p ZCAoKTsKKwkJVkVDX3NhZmVfZ3Jvd19jbGVhcmVkIChiaXRtYXBfc2V0X3Qs IGhlYXAsCisJCQkJICAgICAgIHZhbHVlX2V4cHJlc3Npb25zLAorCQkJCSAg ICAgICBnZXRfbWF4X3ZhbHVlX2lkKCkgKyAxKTsKKwkJbmFyeSA9IHZuX25h cnlfb3BfaW5zZXJ0X3BpZWNlcyAobmV3bmFyeS5sZW5ndGgsCisJCQkJCQkg bmV3bmFyeS5vcGNvZGUsCisJCQkJCQkgbmV3bmFyeS50eXBlLAorCQkJCQkJ IG5ld25hcnkub3BbMF0sCisJCQkJCQkgbmV3bmFyeS5vcFsxXSwKKwkJCQkJ CSBuZXduYXJ5Lm9wWzJdLAorCQkJCQkJIG5ld25hcnkub3BbM10sCisJCQkJ CQkgcmVzdWx0LCBuZXdfdmFsX2lkKTsKKwkJUFJFX0VYUFJfTkFSWSAoZXhw cikgPSBuYXJ5OworCQljb25zdGFudCA9IGZ1bGx5X2NvbnN0YW50X2V4cHJl c3Npb24gKGV4cHIpOworCQlpZiAoY29uc3RhbnQgIT0gZXhwcikKKwkJICBy ZXR1cm4gY29uc3RhbnQ7CisJCWdldF9vcl9hbGxvY19leHByZXNzaW9uX2lk IChleHByKTsKKwkJYWRkX3RvX3ZhbHVlIChuZXdfdmFsX2lkLCBleHByKTsK KwkgICAgICB9CisJICB9CisJcGhpX3RyYW5zX2FkZCAob2xkZXhwciwgZXhw ciwgcHJlZCk7CisJcmV0dXJuIGV4cHI7CisgICAgICB9CisgICAgICBicmVh azsKKyAgICBjYXNlIFJFRkVSRU5DRToKKyAgICAgIHsKKwl2bl9yZWZlcmVu Y2VfdCByZWYgPSBQUkVfRVhQUl9SRUZFUkVOQ0UgKGV4cHIpOworCVZFQyAo dm5fcmVmZXJlbmNlX29wX3MsIGhlYXApICpvcGVyYW5kcyA9IHJlZi0+b3Bl cmFuZHM7CisJVkVDICh0cmVlLCBnYykgKnZ1c2VzID0gcmVmLT52dXNlczsK KwlWRUMgKHRyZWUsIGdjKSAqbmV3dnVzZXMgPSB2dXNlczsJCisJVkVDICh2 bl9yZWZlcmVuY2Vfb3BfcywgaGVhcCkgKm5ld29wZXJhbmRzID0gTlVMTDsK Kwlib29sIGNoYW5nZWQgPSBmYWxzZTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl2 bl9yZWZlcmVuY2Vfb3BfdCBvcGVyYW5kOworCXZuX3JlZmVyZW5jZV90IG5l d3JlZjsKKworCWZvciAoaSA9IDA7IFZFQ19pdGVyYXRlICh2bl9yZWZlcmVu Y2Vfb3Bfcywgb3BlcmFuZHMsIGksIG9wZXJhbmQpOyBpKyspCisJICB7CisJ ICAgIHByZV9leHByIG9wcmVzdWx0OworCSAgICBwcmVfZXhwciBsZWFkZXI7 CisJICAgIHRyZWUgb2xkb3AwID0gb3BlcmFuZC0+b3AwOworCSAgICB0cmVl IG9sZG9wMSA9IG9wZXJhbmQtPm9wMTsKKwkgICAgdHJlZSBvcDAgPSBvbGRv cDA7CisJICAgIHRyZWUgb3AxID0gb2xkb3AxOworCSAgICB0cmVlIHR5cGUg PSBvcGVyYW5kLT50eXBlOworCSAgICB2bl9yZWZlcmVuY2Vfb3BfcyBuZXdv cCA9ICpvcGVyYW5kOworCisJICAgIGlmIChvcDAgJiYgVFJFRV9DT0RFIChv cDApID09IFNTQV9OQU1FKQorCSAgICAgIHsKKwkJdW5zaWduZWQgaW50IG9w X3ZhbF9pZCA9IFZOX0lORk8gKG9wMCktPnZhbHVlX2lkOworCQlsZWFkZXIg PSBmaW5kX2xlYWRlcl9pbl9zZXRzIChvcF92YWxfaWQsIHNldDEsIHNldDIp OworCQlvcHJlc3VsdCA9IHBoaV90cmFuc2xhdGVfMSAobGVhZGVyLCBzZXQx LCBzZXQyLAorCQkJCQkgICAgcHJlZCwgcGhpYmxvY2ssIHNlZW4pOworCQlp ZiAob3ByZXN1bHQgJiYgb3ByZXN1bHQgIT0gbGVhZGVyKQorCQkgIHsKKwkJ ICAgIHRyZWUgbmFtZSA9IGdldF9yZXByZXNlbnRhdGl2ZV9mb3IgKG9wcmVz dWx0KTsKKwkJICAgIGlmICghbmFtZSkKKwkJICAgICAgcmV0dXJuIE5VTEw7 CQkgICAgCisJCSAgICBvcDAgPSBuYW1lOworCQkgIH0KKwkJZWxzZSBpZiAo IW9wcmVzdWx0KQogCQkgIHJldHVybiBOVUxMOwogCSAgICAgIH0KLQkgICAg b2xkb3AzID0gVFJFRV9PUEVSQU5EIChleHByLCAzKTsKLQkgICAgaWYgKG9s ZG9wMykKLQkgICAgICB7Ci0JCW9sZG9wMyA9IGZpbmRfbGVhZGVyX2luX3Nl dHMgKG9sZG9wMywgc2V0MSwgc2V0Mik7Ci0JCW5ld29wMyA9IHBoaV90cmFu c2xhdGVfMSAob2xkb3AzLCBzZXQxLCBzZXQyLCBwcmVkLCBwaGlibG9jaywg c2Vlbik7Ci0KLQkJaWYgKG5ld29wMyA9PSBOVUxMKQorCSAgICBjaGFuZ2Vk IHw9IG9wMCAhPSBvbGRvcDA7CisJICAgIAorCSAgICBpZiAob3AxICYmIFRS RUVfQ09ERSAob3AxKSA9PSBTU0FfTkFNRSkKKwkgICAgICB7CisJCXVuc2ln bmVkIGludCBvcF92YWxfaWQgPSBWTl9JTkZPIChvcDEpLT52YWx1ZV9pZDsK KwkJbGVhZGVyID0gZmluZF9sZWFkZXJfaW5fc2V0cyAob3BfdmFsX2lkLCBz ZXQxLCBzZXQyKTsKKwkJb3ByZXN1bHQgPSBwaGlfdHJhbnNsYXRlXzEgKGxl YWRlciwgc2V0MSwgc2V0MiwKKwkJCQkJICAgIHByZWQsIHBoaWJsb2NrLCBz ZWVuKTsKKwkJaWYgKG9wcmVzdWx0ICYmIG9wcmVzdWx0ICE9IGxlYWRlcikK KwkJICB7CisJCSAgICB0cmVlIG5hbWUgPSBnZXRfcmVwcmVzZW50YXRpdmVf Zm9yIChvcHJlc3VsdCk7CisJCSAgICBpZiAoIW5hbWUpCisJCSAgICAgIHJl dHVybiBOVUxMOwkJICAgIAorCQkgICAgb3AxID0gbmFtZTsKKwkJICB9CisJ CWVsc2UgaWYgKCFvcHJlc3VsdCkKIAkJICByZXR1cm4gTlVMTDsKIAkgICAg ICB9Ci0JICB9Ci0KLQlvbGR2dXNlcyA9IGdldF9leHByZXNzaW9uX3Z1c2Vz IChleHByKTsKLQlpZiAob2xkdnVzZXMpCi0JICBuZXd2dXNlcyA9IHRyYW5z bGF0ZV92dXNlc190aHJvdWdoX2Jsb2NrIChvbGR2dXNlcywgcGhpYmxvY2ss Ci0JCQkJCQkgICAgcHJlZCk7Ci0KLQlpZiAobmV3b3AwICE9IG9sZG9wMCB8 fCBuZXd2dXNlcyAhPSBvbGR2dXNlcwotCSAgICB8fCBuZXdvcDEgIT0gb2xk b3AxCi0JICAgIHx8IG5ld29wMiAhPSBvbGRvcDIKLQkgICAgfHwgbmV3b3Az ICE9IG9sZG9wMykKLQkgIHsKLQkgICAgdHJlZSB0OwotCi0JICAgIG5ld2V4 cHIgPSAodHJlZSkgcG9vbF9hbGxvYyAocmVmZXJlbmNlX25vZGVfcG9vbCk7 Ci0JICAgIG1lbWNweSAobmV3ZXhwciwgZXhwciwgdHJlZV9zaXplIChleHBy KSk7Ci0JICAgIFRSRUVfT1BFUkFORCAobmV3ZXhwciwgMCkgPSBnZXRfdmFs dWVfaGFuZGxlIChuZXdvcDApOwotCSAgICBpZiAoVFJFRV9DT0RFIChleHBy KSA9PSBBUlJBWV9SRUYpCi0JICAgICAgewotCQlUUkVFX09QRVJBTkQgKG5l d2V4cHIsIDEpID0gZ2V0X3ZhbHVlX2hhbmRsZSAobmV3b3AxKTsKLQkJaWYg KG5ld29wMikKLQkJICBUUkVFX09QRVJBTkQgKG5ld2V4cHIsIDIpID0gZ2V0 X3ZhbHVlX2hhbmRsZSAobmV3b3AyKTsKLQkJaWYgKG5ld29wMykKLQkJICBU UkVFX09QRVJBTkQgKG5ld2V4cHIsIDMpID0gZ2V0X3ZhbHVlX2hhbmRsZSAo bmV3b3AzKTsKLQkgICAgICB9Ci0KLQkgICAgdCA9IGZ1bGx5X2NvbnN0YW50 X2V4cHJlc3Npb24gKG5ld2V4cHIpOwotCi0JICAgIGlmICh0ICE9IG5ld2V4 cHIpCi0JICAgICAgewotCQlwb29sX2ZyZWUgKHJlZmVyZW5jZV9ub2RlX3Bv b2wsIG5ld2V4cHIpOwotCQluZXdleHByID0gdDsKKwkgICAgY2hhbmdlZCB8 PSBvcDEgIT0gb2xkb3AxOworCSAgICBpZiAoIW5ld29wZXJhbmRzKQorCSAg ICAgIG5ld29wZXJhbmRzID0gVkVDX2NvcHkgKHZuX3JlZmVyZW5jZV9vcF9z LCBoZWFwLCBvcGVyYW5kcyk7CisJICAgIC8qIFdlIG1heSBoYXZlIGNoYW5n ZWQgZnJvbSBhbiBTU0FfTkFNRSB0byBhIGNvbnN0YW50ICovCisJICAgIGlm IChuZXdvcC5vcGNvZGUgPT0gU1NBX05BTUUgJiYgVFJFRV9DT0RFIChvcDAp ICE9IFNTQV9OQU1FKQorCSAgICAgIG5ld29wLm9wY29kZSA9IFRSRUVfQ09E RSAob3AwKTsKKwkgICAgbmV3b3AudHlwZSA9IHR5cGU7CisJICAgIG5ld29w Lm9wMCA9IG9wMDsKKwkgICAgbmV3b3Aub3AxID0gb3AxOworCSAgICBWRUNf cmVwbGFjZSAodm5fcmVmZXJlbmNlX29wX3MsIG5ld29wZXJhbmRzLCBpLCAm bmV3b3ApOworCSAgfQorCQorCW5ld3Z1c2VzID0gdHJhbnNsYXRlX3Z1c2Vz X3Rocm91Z2hfYmxvY2sgKHZ1c2VzLCBwaGlibG9jaywgcHJlZCk7CisJY2hh bmdlZCB8PSBuZXd2dXNlcyAhPSB2dXNlczsKKworCWlmIChjaGFuZ2VkKQor CSAgeworCSAgICB0cmVlIHJlc3VsdCA9IHZuX3JlZmVyZW5jZV9sb29rdXBf cGllY2VzIChuZXd2dXNlcywKKwkJCQkJCSAgICAgIG5ld29wZXJhbmRzLAor CQkJCQkJICAgICAgJm5ld3JlZik7CisJICAgIHVuc2lnbmVkIGludCBuZXdf dmFsX2lkOworCisJICAgIGlmIChuZXdyZWYpCisJICAgICAgVkVDX2ZyZWUg KHZuX3JlZmVyZW5jZV9vcF9zLCBoZWFwLCBuZXdvcGVyYW5kcyk7CisJICAg IAorCSAgICBpZiAocmVzdWx0ICYmIGlzX2dpbXBsZV9taW5faW52YXJpYW50 IChyZXN1bHQpKQorCSAgICAgIHJldHVybiBnZXRfb3JfYWxsb2NfZXhwcl9m b3JfY29uc3RhbnQgKHJlc3VsdCk7CisKKwkgICAgZXhwciA9IChwcmVfZXhw cikgcG9vbF9hbGxvYyAocHJlX2V4cHJfcG9vbCk7CisJICAgIGV4cHItPmtp bmQgPSBSRUZFUkVOQ0U7CisJICAgIGV4cHItPmlkID0gMDsKKworCSAgICBp ZiAobmV3cmVmKQorCSAgICAgIHsKKwkJUFJFX0VYUFJfUkVGRVJFTkNFIChl eHByKSA9IG5ld3JlZjsKKwkJbmV3X3ZhbF9pZCA9IG5ld3JlZi0+dmFsdWVf aWQ7CisJCWdldF9vcl9hbGxvY19leHByZXNzaW9uX2lkIChleHByKTsKIAkg ICAgICB9CiAJICAgIGVsc2UKIAkgICAgICB7Ci0JCW5ld2V4cHItPmJhc2Uu YW5uID0gTlVMTDsKLQkJdm5fbG9va3VwX29yX2FkZF93aXRoX3Z1c2VzIChu ZXdleHByLCBuZXd2dXNlcyk7Ci0JCXNldF9leHByZXNzaW9uX3Z1c2VzIChu ZXdleHByLCBuZXd2dXNlcyk7Ci0JICAgICAgfQotCSAgICBleHByID0gbmV3 ZXhwcjsKLQkgIH0KLQlwaGlfdHJhbnNfYWRkIChvbGRleHByLCBleHByLCBw cmVkLCBuZXd2dXNlcyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZXhwcjsK LSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSB0Y2NfYmluYXJ5OgotICAgIGNh c2UgdGNjX2NvbXBhcmlzb246Ci0gICAgICB7Ci0JdHJlZSBvbGRvcDEgPSBU UkVFX09QRVJBTkQgKGV4cHIsIDApOwotCXRyZWUgb2xkdmFsMSA9IG9sZG9w MTsKLQl0cmVlIG9sZG9wMiA9IFRSRUVfT1BFUkFORCAoZXhwciwgMSk7Ci0J dHJlZSBvbGR2YWwyID0gb2xkb3AyOwotCXRyZWUgbmV3b3AxOwotCXRyZWUg bmV3b3AyOwotCXRyZWUgbmV3ZXhwcjsKLQotCW9sZG9wMSA9IGZpbmRfbGVh ZGVyX2luX3NldHMgKG9sZG9wMSwgc2V0MSwgc2V0Mik7Ci0JbmV3b3AxID0g cGhpX3RyYW5zbGF0ZV8xIChvbGRvcDEsIHNldDEsIHNldDIsIHByZWQsIHBo aWJsb2NrLCBzZWVuKTsKLQlpZiAobmV3b3AxID09IE5VTEwpCi0JICByZXR1 cm4gTlVMTDsKLQotCW9sZG9wMiA9IGZpbmRfbGVhZGVyX2luX3NldHMgKG9s ZG9wMiwgc2V0MSwgc2V0Mik7Ci0JbmV3b3AyID0gcGhpX3RyYW5zbGF0ZV8x IChvbGRvcDIsIHNldDEsIHNldDIsIHByZWQsIHBoaWJsb2NrLCBzZWVuKTsK LQlpZiAobmV3b3AyID09IE5VTEwpCi0JICByZXR1cm4gTlVMTDsKLQlpZiAo bmV3b3AxICE9IG9sZG9wMSB8fCBuZXdvcDIgIT0gb2xkb3AyKQotCSAgewot CSAgICB0cmVlIHQ7Ci0JICAgIG5ld2V4cHIgPSAodHJlZSkgcG9vbF9hbGxv YyAoYmluYXJ5X25vZGVfcG9vbCk7Ci0JICAgIG1lbWNweSAobmV3ZXhwciwg ZXhwciwgdHJlZV9zaXplIChleHByKSk7Ci0JICAgIFRSRUVfT1BFUkFORCAo bmV3ZXhwciwgMCkgPSBuZXdvcDEgPT0gb2xkb3AxID8gb2xkdmFsMSA6IGdl dF92YWx1ZV9oYW5kbGUgKG5ld29wMSk7Ci0JICAgIFRSRUVfT1BFUkFORCAo bmV3ZXhwciwgMSkgPSBuZXdvcDIgPT0gb2xkb3AyID8gb2xkdmFsMiA6IGdl dF92YWx1ZV9oYW5kbGUgKG5ld29wMik7Ci0JICAgIHQgPSBmdWxseV9jb25z dGFudF9leHByZXNzaW9uIChuZXdleHByKTsKLQkgICAgaWYgKHQgIT0gbmV3 ZXhwcikKLQkgICAgICB7Ci0JCXBvb2xfZnJlZSAoYmluYXJ5X25vZGVfcG9v bCwgbmV3ZXhwcik7Ci0JCW5ld2V4cHIgPSB0OwotCSAgICAgIH0KLQkgICAg ZWxzZQotCSAgICAgIHsKLQkJbmV3ZXhwci0+YmFzZS5hbm4gPSBOVUxMOwot CQl2bl9sb29rdXBfb3JfYWRkIChuZXdleHByKTsKLQkgICAgICB9Ci0JICAg IGV4cHIgPSBuZXdleHByOwotCSAgfQotCXBoaV90cmFuc19hZGQgKG9sZGV4 cHIsIGV4cHIsIHByZWQsIE5VTEwpOwotICAgICAgfQotICAgICAgcmV0dXJu IGV4cHI7Ci0KLSAgICBjYXNlIHRjY191bmFyeToKLSAgICAgIHsKLQl0cmVl IG9sZG9wMSA9IFRSRUVfT1BFUkFORCAoZXhwciwgMCk7Ci0JdHJlZSBuZXdv cDE7Ci0JdHJlZSBuZXdleHByOwotCi0Jb2xkb3AxID0gZmluZF9sZWFkZXJf aW5fc2V0cyAob2xkb3AxLCBzZXQxLCBzZXQyKTsKLQluZXdvcDEgPSBwaGlf dHJhbnNsYXRlXzEgKG9sZG9wMSwgc2V0MSwgc2V0MiwgcHJlZCwgcGhpYmxv Y2ssIHNlZW4pOwotCWlmIChuZXdvcDEgPT0gTlVMTCkKLQkgIHJldHVybiBO VUxMOwotCWlmIChuZXdvcDEgIT0gb2xkb3AxKQotCSAgewotCSAgICB0cmVl IHQ7Ci0JICAgIG5ld2V4cHIgPSAodHJlZSkgcG9vbF9hbGxvYyAodW5hcnlf bm9kZV9wb29sKTsKLQkgICAgbWVtY3B5IChuZXdleHByLCBleHByLCB0cmVl X3NpemUgKGV4cHIpKTsKLQkgICAgVFJFRV9PUEVSQU5EIChuZXdleHByLCAw KSA9IGdldF92YWx1ZV9oYW5kbGUgKG5ld29wMSk7Ci0JICAgIHQgPSBmdWxs eV9jb25zdGFudF9leHByZXNzaW9uIChuZXdleHByKTsKLQkgICAgaWYgKHQg IT0gbmV3ZXhwcikKLQkgICAgICB7Ci0JCXBvb2xfZnJlZSAodW5hcnlfbm9k ZV9wb29sLCBuZXdleHByKTsKLQkJbmV3ZXhwciA9IHQ7Ci0JICAgICAgfQot CSAgICBlbHNlCi0JICAgICAgewotCQluZXdleHByLT5iYXNlLmFubiA9IE5V TEw7Ci0JCXZuX2xvb2t1cF9vcl9hZGQgKG5ld2V4cHIpOwotCSAgICAgIH0K LQkgICAgZXhwciA9IG5ld2V4cHI7Ci0JICB9Ci0JcGhpX3RyYW5zX2FkZCAo b2xkZXhwciwgZXhwciwgcHJlZCwgTlVMTCk7Ci0gICAgICB9Ci0gICAgICBy ZXR1cm4gZXhwcjsKLQotICAgIGNhc2UgdGNjX2V4Y2VwdGlvbmFsOgorCQlu ZXdfdmFsX2lkID0gZ2V0X25leHRfdmFsdWVfaWQgKCk7CisJCVZFQ19zYWZl X2dyb3dfY2xlYXJlZCAoYml0bWFwX3NldF90LCBoZWFwLCB2YWx1ZV9leHBy ZXNzaW9ucywKKwkJCQkgICAgICAgZ2V0X21heF92YWx1ZV9pZCgpICsgMSk7 CisJCW5ld3JlZiA9IHZuX3JlZmVyZW5jZV9pbnNlcnRfcGllY2VzIChuZXd2 dXNlcywKKwkJCQkJCSAgICAgbmV3b3BlcmFuZHMsIAorCQkJCQkJICAgICBy ZXN1bHQsIG5ld192YWxfaWQpOworCQlQUkVfRVhQUl9SRUZFUkVOQ0UgKGV4 cHIpID0gbmV3cmVmOworCQlnZXRfb3JfYWxsb2NfZXhwcmVzc2lvbl9pZCAo ZXhwcik7CisJCWFkZF90b192YWx1ZSAobmV3X3ZhbF9pZCwgZXhwcik7CisJ ICAgICAgfSAgICAKKwkgIH0KKwlwaGlfdHJhbnNfYWRkIChvbGRleHByLCBl eHByLCBwcmVkKTsKKwlyZXR1cm4gZXhwcjsKKyAgICAgIH0KKyAgICAgIGJy ZWFrOworICAgIGNhc2UgTkFNRToKICAgICAgIHsKIAl0cmVlIHBoaSA9IE5V TEw7CiAJZWRnZSBlOwogCXRyZWUgZGVmX3N0bXQ7Ci0JZ2NjX2Fzc2VydCAo VFJFRV9DT0RFIChleHByKSA9PSBTU0FfTkFNRSk7Ci0KLQlkZWZfc3RtdCA9 IFNTQV9OQU1FX0RFRl9TVE1UIChleHByKTsKKwl0cmVlIG5hbWUgPSBQUkVf RVhQUl9OQU1FIChleHByKTsKKworCWRlZl9zdG10ID0gU1NBX05BTUVfREVG X1NUTVQgKG5hbWUpOwogCWlmIChUUkVFX0NPREUgKGRlZl9zdG10KSA9PSBQ SElfTk9ERQogCSAgICAmJiBiYl9mb3Jfc3RtdCAoZGVmX3N0bXQpID09IHBo aWJsb2NrKQogCSAgcGhpID0gZGVmX3N0bXQ7CkBAIC0xMzIwLDE4ICsxNTMz LDE4IEBACiAJZSA9IGZpbmRfZWRnZSAocHJlZCwgYmJfZm9yX3N0bXQgKHBo aSkpOwogCWlmIChlKQogCSAgewotCSAgICB0cmVlIHZhbDsKIAkgICAgdHJl ZSBkZWYgPSBQSElfQVJHX0RFRiAocGhpLCBlLT5kZXN0X2lkeCk7Ci0KKwkg ICAgcHJlX2V4cHIgbmV3ZXhwcjsKKworCSAgICAvKiBIYW5kbGUgY29uc3Rh bnQuICovCiAJICAgIGlmIChpc19naW1wbGVfbWluX2ludmFyaWFudCAoZGVm KSkKLQkgICAgICByZXR1cm4gZGVmOworCSAgICAgIHJldHVybiBnZXRfb3Jf YWxsb2NfZXhwcl9mb3JfY29uc3RhbnQgKGRlZik7CiAKIAkgICAgaWYgKFRS RUVfQ09ERSAoZGVmKSA9PSBTU0FfTkFNRSAmJiBzc2FfdW5kZWZpbmVkX3Zh bHVlX3AgKGRlZikpCiAJICAgICAgcmV0dXJuIE5VTEw7CiAKLQkgICAgdmFs ID0gZ2V0X3ZhbHVlX2hhbmRsZSAoZGVmKTsKLQkgICAgZ2NjX2Fzc2VydCAo dmFsKTsKLQkgICAgcmV0dXJuIGRlZjsKKwkgICAgbmV3ZXhwciA9IGdldF9v cl9hbGxvY19leHByX2Zvcl9uYW1lIChkZWYpOworCSAgICByZXR1cm4gbmV3 ZXhwcjsKIAkgIH0KICAgICAgIH0KICAgICAgIHJldHVybiBleHByOwpAQCAt MTM0Niw4ICsxNTU5LDggQEAKICAgIFJldHVybiBOVUxMIGlmIHdlIGNhbid0 IGZpbmQgYSBsZWFkZXIgZm9yIGVhY2ggcGFydCBvZiB0aGUKICAgIHRyYW5z bGF0ZWQgZXhwcmVzc2lvbi4gICovCiAKLXN0YXRpYyB0cmVlCi1waGlfdHJh bnNsYXRlICh0cmVlIGV4cHIsIGJpdG1hcF9zZXRfdCBzZXQxLCBiaXRtYXBf c2V0X3Qgc2V0MiwKK3N0YXRpYyBwcmVfZXhwcgorcGhpX3RyYW5zbGF0ZSAo cHJlX2V4cHIgZXhwciwgYml0bWFwX3NldF90IHNldDEsIGJpdG1hcF9zZXRf dCBzZXQyLAogCSAgICAgICBiYXNpY19ibG9jayBwcmVkLCBiYXNpY19ibG9j ayBwaGlibG9jaykKIHsKICAgYml0bWFwX2NsZWFyIChzZWVuX2R1cmluZ190 cmFuc2xhdGUpOwpAQCAtMTM1NSw3ICsxNTY4LDcgQEAKIAkJCSAgc2Vlbl9k dXJpbmdfdHJhbnNsYXRlKTsKIH0KIAotLyogRm9yIGVhY2ggZXhwcmVzc2lv biBpbiBTRVQsIHRyYW5zbGF0ZSB0aGUgdmFsdWUgaGFuZGxlcyB0aHJvdWdo IHBoaSBub2RlcworLyogRm9yIGVhY2ggZXhwcmVzc2lvbiBpbiBTRVQsIHRy YW5zbGF0ZSB0aGUgdmFsdWVzIHRocm91Z2ggcGhpIG5vZGVzCiAgICBpbiBQ SElCTE9DSyB1c2luZyBlZGdlIFBISUJMT0NLLT5QUkVELCBhbmQgc3RvcmUg dGhlIHJlc3VsdGluZwogICAgZXhwcmVzc2lvbnMgaW4gREVTVC4gICovCiAK QEAgLTEzNjMsOCArMTU3Niw4IEBACiBwaGlfdHJhbnNsYXRlX3NldCAoYml0 bWFwX3NldF90IGRlc3QsIGJpdG1hcF9zZXRfdCBzZXQsIGJhc2ljX2Jsb2Nr IHByZWQsCiAJCSAgIGJhc2ljX2Jsb2NrIHBoaWJsb2NrKQogewotICBWRUMg KHRyZWUsIGhlYXApICpleHByczsKLSAgdHJlZSBleHByOworICBWRUMgKHBy ZV9leHByLCBoZWFwKSAqZXhwcnM7CisgIHByZV9leHByIGV4cHI7CiAgIGlu dCBpOwogCiAgIGlmICghcGhpX25vZGVzIChwaGlibG9jaykpCkBAIC0xMzc0 LDIzICsxNTg3LDIyIEBACiAgICAgfQogCiAgIGV4cHJzID0gc29ydGVkX2Fy cmF5X2Zyb21fYml0bWFwX3NldCAoc2V0KTsKLSAgZm9yIChpID0gMDsgVkVD X2l0ZXJhdGUgKHRyZWUsIGV4cHJzLCBpLCBleHByKTsgaSsrKQotICAgIHsK LSAgICAgIHRyZWUgdHJhbnNsYXRlZDsKKyAgZm9yIChpID0gMDsgVkVDX2l0 ZXJhdGUgKHByZV9leHByLCBleHBycywgaSwgZXhwcik7IGkrKykKKyAgICB7 CisgICAgICBwcmVfZXhwciB0cmFuc2xhdGVkOwogICAgICAgdHJhbnNsYXRl ZCA9IHBoaV90cmFuc2xhdGUgKGV4cHIsIHNldCwgTlVMTCwgcHJlZCwgcGhp YmxvY2spOwogCiAgICAgICAvKiBEb24ndCBhZGQgY29uc3RhbnRzIG9yIGVt cHR5IHRyYW5zbGF0aW9ucyB0byB0aGUgY2FjaGUsIHNpbmNlCiAJIHdlIHdv bid0IGxvb2sgdGhlbSB1cCB0aGF0IHdheSwgb3IgdXNlIHRoZSByZXN1bHQs IGFueXdheS4gICovCi0gICAgICBpZiAodHJhbnNsYXRlZCAmJiAhaXNfZ2lt cGxlX21pbl9pbnZhcmlhbnQgKHRyYW5zbGF0ZWQpKQotCXsKLQkgIHBoaV90 cmFuc19hZGQgKGV4cHIsIHRyYW5zbGF0ZWQsIHByZWQsCi0JCQkgZ2V0X2V4 cHJlc3Npb25fdnVzZXMgKHRyYW5zbGF0ZWQpKTsKKyAgICAgIGlmICh0cmFu c2xhdGVkICYmICF2YWx1ZV9pZF9jb25zdGFudF9wIChnZXRfZXhwcl92YWx1 ZV9pZCAodHJhbnNsYXRlZCkpKQorCXsKKwkgIHBoaV90cmFuc19hZGQgKGV4 cHIsIHRyYW5zbGF0ZWQsIHByZWQpOwogCX0KIAogICAgICAgaWYgKHRyYW5z bGF0ZWQgIT0gTlVMTCkKIAliaXRtYXBfdmFsdWVfaW5zZXJ0X2ludG9fc2V0 IChkZXN0LCB0cmFuc2xhdGVkKTsKICAgICB9Ci0gIFZFQ19mcmVlICh0cmVl LCBoZWFwLCBleHBycyk7CisgIFZFQ19mcmVlIChwcmVfZXhwciwgaGVhcCwg ZXhwcnMpOwogfQogCiAvKiBGaW5kIHRoZSBsZWFkZXIgZm9yIGEgdmFsdWUg KGkuZS4sIHRoZSBuYW1lIHJlcHJlc2VudGluZyB0aGF0CkBAIC0xMzk4LDE1 ICsxNjEwLDIyIEBACiAgICBtYWtlcyBzdXJlIHRoZSBkZWZpbmluZyBzdGF0 ZW1lbnQgZm9yIHRoZSBsZWFkZXIgZG9taW5hdGVzIGl0LgogICAgUmV0dXJu IE5VTEwgaWYgbm8gbGVhZGVyIGlzIGZvdW5kLiAgKi8KIAotc3RhdGljIHRy ZWUKLWJpdG1hcF9maW5kX2xlYWRlciAoYml0bWFwX3NldF90IHNldCwgdHJl ZSB2YWwsIHRyZWUgc3RtdCkKLXsKLSAgaWYgKHZhbCA9PSBOVUxMKQotICAg IHJldHVybiBOVUxMOwotCi0gIGlmIChjb25zdGFudF9leHByX3AgKHZhbCkp Ci0gICAgcmV0dXJuIHZhbDsKLQorc3RhdGljIHByZV9leHByCitiaXRtYXBf ZmluZF9sZWFkZXIgKGJpdG1hcF9zZXRfdCBzZXQsIHVuc2lnbmVkIGludCB2 YWwsIHRyZWUgc3RtdCkKK3sKKyAgaWYgKHZhbHVlX2lkX2NvbnN0YW50X3Ag KHZhbCkpCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICBi aXRtYXBfaXRlcmF0b3IgYmk7CisgICAgICBiaXRtYXBfc2V0X3QgZXhwcnNl dCA9IFZFQ19pbmRleCAoYml0bWFwX3NldF90LCB2YWx1ZV9leHByZXNzaW9u cywgdmFsKTsKKworICAgICAgRk9SX0VBQ0hfRVhQUl9JRF9JTl9TRVQgKGV4 cHJzZXQsIGksIGJpKQorCXsKKwkgIHByZV9leHByIGV4cHIgPSBleHByZXNz aW9uX2Zvcl9pZCAoaSk7CisJICBpZiAoZXhwci0+a2luZCA9PSBDT05TVEFO VCkKKwkgICAgcmV0dXJuIGV4cHI7CisJfQorICAgIH0KICAgaWYgKGJpdG1h cF9zZXRfY29udGFpbnNfdmFsdWUgKHNldCwgdmFsKSkKICAgICB7CiAgICAg ICAvKiBSYXRoZXIgdGhhbiB3YWxrIHRoZSBlbnRpcmUgYml0bWFwIG9mIGV4 cHJlc3Npb25zLCBhbmQgc2VlCkBAIC0xNDIyLDE1ICsxNjQxLDE3IEBACiAJ IGNob29zZSB3aGljaCBzZXQgdG8gd2FsayBiYXNlZCBvbiB3aGljaCBzZXQg aXMgc21hbGxlci4gICovCiAgICAgICB1bnNpZ25lZCBpbnQgaTsKICAgICAg IGJpdG1hcF9pdGVyYXRvciBiaTsKLSAgICAgIGJpdG1hcF9zZXRfdCBleHBy c2V0ID0gVkFMVUVfSEFORExFX0VYUFJfU0VUICh2YWwpOworICAgICAgYml0 bWFwX3NldF90IGV4cHJzZXQgPSBWRUNfaW5kZXggKGJpdG1hcF9zZXRfdCwg dmFsdWVfZXhwcmVzc2lvbnMsIHZhbCk7CiAKICAgICAgIEVYRUNVVEVfSUZf QU5EX0lOX0JJVE1BUCAoZXhwcnNldC0+ZXhwcmVzc2lvbnMsCiAJCQkJc2V0 LT5leHByZXNzaW9ucywgMCwgaSwgYmkpCiAJewotCSAgdHJlZSB2YWwgPSBl eHByZXNzaW9uX2Zvcl9pZCAoaSk7CisJICBwcmVfZXhwciB2YWwgPSBleHBy ZXNzaW9uX2Zvcl9pZCAoaSk7CisJICAvKiBBdCB0aGUgcG9pbnQgd2hlcmUg c3RtdCBpcyBub3QgbnVsbCwgdGhlcmUgc2hvdWxkIGFsd2F5cworCSAgICAg YmUgYW4gU1NBX05BTUUgZmlyc3QgaW4gdGhlIGxpc3Qgb2YgZXhwcmVzc2lv bnMuICAqLwogCSAgaWYgKHN0bXQpCiAJICAgIHsKLQkgICAgICB0cmVlIGRl Zl9zdG10ID0gU1NBX05BTUVfREVGX1NUTVQgKHZhbCk7CisJICAgICAgdHJl ZSBkZWZfc3RtdCA9IFNTQV9OQU1FX0RFRl9TVE1UIChQUkVfRVhQUl9OQU1F ICh2YWwpKTsKIAkgICAgICBpZiAoVFJFRV9DT0RFIChkZWZfc3RtdCkgIT0g UEhJX05PREUKIAkJICAmJiBiYl9mb3Jfc3RtdCAoZGVmX3N0bXQpID09IGJi X2Zvcl9zdG10IChzdG10KQogCQkgICYmIHN0bXRfYW5uIChkZWZfc3RtdCkt PnVpZCA+PSBzdG10X2FubiAoc3RtdCktPnVpZCkKQEAgLTE0NTAsMTEgKzE2 NzEsMTEgQEAKICAgIEFOVElDX0lOIHNldCBhbHJlYWR5LiAgKi8KIAogc3Rh dGljIGJvb2wKLXZhbHVlX2RpZXNfaW5fYmxvY2tfeCAodHJlZSBleHByLCBi YXNpY19ibG9jayBibG9jaykKK3ZhbHVlX2RpZXNfaW5fYmxvY2tfeCAocHJl X2V4cHIgZXhwciwgYmFzaWNfYmxvY2sgYmxvY2spCiB7CiAgIGludCBpOwog ICB0cmVlIHZ1c2U7Ci0gIFZFQyAodHJlZSwgZ2MpICp2dXNlcyA9IGdldF9l eHByZXNzaW9uX3Z1c2VzIChleHByKTsKKyAgVkVDICh0cmVlLCBnYykgKnZ1 c2VzID0gUFJFX0VYUFJfUkVGRVJFTkNFIChleHByKS0+dnVzZXM7CiAKICAg LyogQ29uc2VydmF0aXZlbHksIGEgdmFsdWUgZGllcyBpZiBpdCdzIHZ1c2Vz IGFyZSBkZWZpbmVkIGluIHRoaXMKICAgICAgYmxvY2ssIHVubGVzcyB0aGV5 IGNvbWUgZnJvbSBwaGkgbm9kZXMgKHdoaWNoIGFyZSBtZXJnZSBvcGVyYXRp b25zLApAQCAtMTQ3MiwxMjAgKzE2OTMsMTAwIEBACiAgIHJldHVybiBmYWxz ZTsKIH0KIAorCisjZGVmaW5lIHVuaW9uX2NvbnRhaW5zX3ZhbHVlKFNFVDEs IFNFVDIsIFZBTCkJCQlcCisgIChiaXRtYXBfc2V0X2NvbnRhaW5zX3ZhbHVl ICgoU0VUMSksIChWQUwpKQkJCVwKKyAgIHx8ICgoU0VUMikgJiYgYml0bWFw X3NldF9jb250YWluc192YWx1ZSAoKFNFVDIpLCAoVkFMKSkpKQorCisvKiBE ZXRlcm1pbmUgaWYgdm5fcmVmZXJlbmNlX29wX3QgVlJPIGlzIGxlZ2FsIGlu IFNFVDEgVSBTRVQyLgorICovCitzdGF0aWMgYm9vbAordnJvX3ZhbGlkX2lu X3NldHMgKGJpdG1hcF9zZXRfdCBzZXQxLCBiaXRtYXBfc2V0X3Qgc2V0MiwK KwkJICAgdm5fcmVmZXJlbmNlX29wX3QgdnJvKSAKK3sKKyAgaWYgKHZyby0+ b3AwICYmIFRSRUVfQ09ERSAodnJvLT5vcDApID09IFNTQV9OQU1FKQorICAg IHsKKyAgICAgIHN0cnVjdCBwcmVfZXhwcl9kIHRlbXA7CisgICAgICB0ZW1w LmtpbmQgPSBOQU1FOworICAgICAgdGVtcC5pZCA9IDA7CisgICAgICBQUkVf RVhQUl9OQU1FICgmdGVtcCkgPSB2cm8tPm9wMDsKKyAgICAgIHRlbXAuaWQg PSBsb29rdXBfZXhwcmVzc2lvbl9pZCAoJnRlbXApOworICAgICAgaWYgKHRl bXAuaWQgPT0gMCkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBpZiAoIXVuaW9u X2NvbnRhaW5zX3ZhbHVlIChzZXQxLCBzZXQyLAorCQkJCSBnZXRfZXhwcl92 YWx1ZV9pZCAoJnRlbXApKSkKKwlyZXR1cm4gZmFsc2U7CisgICAgfQorICBp ZiAodnJvLT5vcDEgJiYgVFJFRV9DT0RFICh2cm8tPm9wMSkgPT0gU1NBX05B TUUpCisgICAgeworICAgICAgc3RydWN0IHByZV9leHByX2QgdGVtcDsKKyAg ICAgIHRlbXAua2luZCA9IE5BTUU7CisgICAgICB0ZW1wLmlkID0gMDsKKyAg ICAgIFBSRV9FWFBSX05BTUUgKCZ0ZW1wKSA9IHZyby0+b3AxOworICAgICAg dGVtcC5pZCA9IGxvb2t1cF9leHByZXNzaW9uX2lkICgmdGVtcCk7CisgICAg ICBpZiAodGVtcC5pZCA9PSAwKQorCXJldHVybiBmYWxzZTsKKyAgICAgIGlm ICghdW5pb25fY29udGFpbnNfdmFsdWUgKHNldDEsIHNldDIsCisJCQkJIGdl dF9leHByX3ZhbHVlX2lkICgmdGVtcCkpKQorCXJldHVybiBmYWxzZTsKKyAg ICB9CisgIHJldHVybiB0cnVlOworfQorCiAvKiBEZXRlcm1pbmUgaWYgdGhl IGV4cHJlc3Npb24gRVhQUiBpcyB2YWxpZCBpbiBTRVQxIFUgU0VUMi4KICAg IE9OTFkgU0VUMiBDQU4gQkUgTlVMTC4KICAgIFRoaXMgbWVhbnMgdGhhdCB3 ZSBoYXZlIGEgbGVhZGVyIGZvciBlYWNoIHBhcnQgb2YgdGhlIGV4cHJlc3Np b24KICAgIChpZiBpdCBjb25zaXN0cyBvZiB2YWx1ZXMpLCBvciB0aGUgZXhw cmVzc2lvbiBpcyBhbiBTU0FfTkFNRS4KICAgIEZvciBsb2Fkcy9jYWxscywg d2UgYWxzbyBzZWUgaWYgdGhlIHZ1c2VzIGFyZSBraWxsZWQgaW4gdGhpcyBi bG9jay4KLQotICAgTkI6IFdlIG5ldmVyIHNob3VsZCBydW4gaW50byBhIGNh c2Ugd2hlcmUgd2UgaGF2ZSBTU0FfTkFNRSArCi0gICBTU0FfTkFNRSBvciBT U0FfTkFNRSArIHZhbHVlLiAgVGhlIHNldHMgdmFsaWRfaW5fc2V0cyBpcyBj YWxsZWQgb24sCi0gICB0aGUgQU5USUMgc2V0cywgd2lsbCBvbmx5IGV2ZXIg aGF2ZSBTU0FfTkFNRSdzIG9yIHZhbHVlIGV4cHJlc3Npb25zCi0gICAoSUUg VkFMVUUxICsgVkFMVUUyLCAqVkFMVUUxLCBWQUxVRTEgPCBWQUxVRTIpICAq LwotCi0jZGVmaW5lIHVuaW9uX2NvbnRhaW5zX3ZhbHVlKFNFVDEsIFNFVDIs IFZBTCkJCQlcCi0gIChiaXRtYXBfc2V0X2NvbnRhaW5zX3ZhbHVlICgoU0VU MSksIChWQUwpKQkJCVwKLSAgIHx8ICgoU0VUMikgJiYgYml0bWFwX3NldF9j b250YWluc192YWx1ZSAoKFNFVDIpLCAoVkFMKSkpKQotCi1zdGF0aWMgYm9v bAotdmFsaWRfaW5fc2V0cyAoYml0bWFwX3NldF90IHNldDEsIGJpdG1hcF9z ZXRfdCBzZXQyLCB0cmVlIGV4cHIsCisqLworCitzdGF0aWMgYm9vbAordmFs aWRfaW5fc2V0cyAoYml0bWFwX3NldF90IHNldDEsIGJpdG1hcF9zZXRfdCBz ZXQyLCBwcmVfZXhwciBleHByLAogCSAgICAgICBiYXNpY19ibG9jayBibG9j aykKIHsKLSBzd2l0Y2ggKFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChl eHByKSkpCi0gICAgewotICAgIGNhc2UgdGNjX2JpbmFyeToKLSAgICBjYXNl IHRjY19jb21wYXJpc29uOgotICAgICAgewotCXRyZWUgb3AxID0gVFJFRV9P UEVSQU5EIChleHByLCAwKTsKLQl0cmVlIG9wMiA9IFRSRUVfT1BFUkFORCAo ZXhwciwgMSk7Ci0KLQlyZXR1cm4gdW5pb25fY29udGFpbnNfdmFsdWUgKHNl dDEsIHNldDIsIG9wMSkKLQkgICYmIHVuaW9uX2NvbnRhaW5zX3ZhbHVlIChz ZXQxLCBzZXQyLCBvcDIpOwotICAgICAgfQotCi0gICAgY2FzZSB0Y2NfdW5h cnk6Ci0gICAgICB7Ci0JdHJlZSBvcDEgPSBUUkVFX09QRVJBTkQgKGV4cHIs IDApOwotCXJldHVybiB1bmlvbl9jb250YWluc192YWx1ZSAoc2V0MSwgc2V0 Miwgb3AxKTsKLSAgICAgIH0KLQotICAgIGNhc2UgdGNjX2V4cHJlc3Npb246 Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjYXNlIHRjY192bF9leHA6 Ci0gICAgICB7Ci0JaWYgKFRSRUVfQ09ERSAoZXhwcikgPT0gQ0FMTF9FWFBS KQotCSAgewotCSAgICB0cmVlIGZuID0gQ0FMTF9FWFBSX0ZOIChleHByKTsK LQkgICAgdHJlZSBzYyA9IENBTExfRVhQUl9TVEFUSUNfQ0hBSU4gKGV4cHIp OwotCSAgICB0cmVlIGFyZzsKLQkgICAgY2FsbF9leHByX2FyZ19pdGVyYXRv ciBpdGVyOwotCi0JICAgIC8qIENoZWNrIHRoZSBub24tYXJndW1lbnQgb3Bl cmFuZHMgZmlyc3QuICAqLwotCSAgICBpZiAoIXVuaW9uX2NvbnRhaW5zX3Zh bHVlIChzZXQxLCBzZXQyLCBmbikKLQkJfHwgKHNjICYmICF1bmlvbl9jb250 YWluc192YWx1ZSAoc2V0MSwgc2V0Miwgc2MpKSkKKyAgc3dpdGNoIChleHBy LT5raW5kKQorICAgIHsKKyAgICBjYXNlIE5BTUU6CisgICAgICByZXR1cm4g Yml0bWFwX3NldF9jb250YWluc19leHByIChBVkFJTF9PVVQgKGJsb2NrKSwg ZXhwcik7CisgICAgY2FzZSBOQVJZOgorICAgICAgeworCXVuc2lnbmVkIGlu dCBpOworCXZuX25hcnlfb3BfdCBuYXJ5ID0gUFJFX0VYUFJfTkFSWSAoZXhw cik7CisJZm9yIChpID0gMDsgaSA8IG5hcnktPmxlbmd0aDsgaSsrKQorCSAg eworCSAgICBpZiAoVFJFRV9DT0RFIChuYXJ5LT5vcFtpXSkgPT0gU1NBX05B TUUpCisJICAgICAgeworCQlzdHJ1Y3QgcHJlX2V4cHJfZCB0ZW1wOworCQl0 ZW1wLmtpbmQgPSBOQU1FOworCQl0ZW1wLmlkID0gMDsKKwkJUFJFX0VYUFJf TkFNRSAoJnRlbXApID0gbmFyeS0+b3BbaV07CisJCXRlbXAuaWQgPSBsb29r dXBfZXhwcmVzc2lvbl9pZCAoJnRlbXApOworCQlpZiAodGVtcC5pZCA9PSAw KQorCQkgIHJldHVybiBmYWxzZTsKKwkJaWYgKCF1bmlvbl9jb250YWluc192 YWx1ZSAoc2V0MSwgc2V0MiwKKwkJCQkJICAgZ2V0X2V4cHJfdmFsdWVfaWQg KCZ0ZW1wKSkpCisJCSAgcmV0dXJuIGZhbHNlOworCSAgICAgIH0KKwkgIH0K KwlyZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNh c2UgUkVGRVJFTkNFOiAKKyAgICAgIHsKKwl2bl9yZWZlcmVuY2VfdCByZWYg PSBQUkVfRVhQUl9SRUZFUkVOQ0UgKGV4cHIpOworCXZuX3JlZmVyZW5jZV9v cF90IHZybzsKKwl1bnNpZ25lZCBpbnQgaTsKKwkKKwlmb3IgKGkgPSAwOyBW RUNfaXRlcmF0ZSAodm5fcmVmZXJlbmNlX29wX3MsIHJlZi0+b3BlcmFuZHMs IGksIHZybyk7IGkrKykKKwkgIHsKKwkgICAgaWYgKCF2cm9fdmFsaWRfaW5f c2V0cyAoc2V0MSwgc2V0MiwgdnJvKSkKIAkgICAgICByZXR1cm4gZmFsc2U7 Ci0KLQkgICAgLyogTm93IGNoZWNrIHRoZSBvcGVyYW5kcy4gICovCi0JICAg IEZPUl9FQUNIX0NBTExfRVhQUl9BUkcgKGFyZywgaXRlciwgZXhwcikKLQkg ICAgICB7Ci0JCWlmICghdW5pb25fY29udGFpbnNfdmFsdWUgKHNldDEsIHNl dDIsIGFyZykpCi0JCSAgcmV0dXJuIGZhbHNlOwotCSAgICAgIH0KLQkgICAg cmV0dXJuICF2YWx1ZV9kaWVzX2luX2Jsb2NrX3ggKGV4cHIsIGJsb2NrKTsK LQkgIH0KLQlyZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICBjYXNlIHRj Y19yZWZlcmVuY2U6Ci0gICAgICB7Ci0JaWYgKFRSRUVfQ09ERSAoZXhwcikg PT0gSU5ESVJFQ1RfUkVGCi0JICAgIHx8IFRSRUVfQ09ERSAoZXhwcikgPT0g Q09NUE9ORU5UX1JFRgotCSAgICB8fCBUUkVFX0NPREUgKGV4cHIpID09IEFS UkFZX1JFRikKLQkgIHsKLQkgICAgdHJlZSBvcDAgPSBUUkVFX09QRVJBTkQg KGV4cHIsIDApOwotCSAgICBnY2NfYXNzZXJ0IChpc19naW1wbGVfbWluX2lu dmFyaWFudCAob3AwKQotCQkJfHwgVFJFRV9DT0RFIChvcDApID09IFZBTFVF X0hBTkRMRSk7Ci0JICAgIGlmICghdW5pb25fY29udGFpbnNfdmFsdWUgKHNl dDEsIHNldDIsIG9wMCkpCi0JICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICBp ZiAoVFJFRV9DT0RFIChleHByKSA9PSBBUlJBWV9SRUYpCi0JICAgICAgewot CQl0cmVlIG9wMSA9IFRSRUVfT1BFUkFORCAoZXhwciwgMSk7Ci0JCXRyZWUg b3AyID0gVFJFRV9PUEVSQU5EIChleHByLCAyKTsKLQkJdHJlZSBvcDMgPSBU UkVFX09QRVJBTkQgKGV4cHIsIDMpOwotCQlnY2NfYXNzZXJ0IChpc19naW1w bGVfbWluX2ludmFyaWFudCAob3AxKQotCQkJICAgIHx8IFRSRUVfQ09ERSAo b3AxKSA9PSBWQUxVRV9IQU5ETEUpOwotCQlpZiAoIXVuaW9uX2NvbnRhaW5z X3ZhbHVlIChzZXQxLCBzZXQyLCBvcDEpKQotCQkgIHJldHVybiBmYWxzZTsK LQkJZ2NjX2Fzc2VydCAoIW9wMiB8fCBpc19naW1wbGVfbWluX2ludmFyaWFu dCAob3AyKQotCQkJICAgIHx8IFRSRUVfQ09ERSAob3AyKSA9PSBWQUxVRV9I QU5ETEUpOwotCQlpZiAob3AyCi0JCSAgICAmJiAhdW5pb25fY29udGFpbnNf dmFsdWUgKHNldDEsIHNldDIsIG9wMikpCi0JCSAgcmV0dXJuIGZhbHNlOwot CQlnY2NfYXNzZXJ0ICghb3AzIHx8IGlzX2dpbXBsZV9taW5faW52YXJpYW50 IChvcDMpCi0JCQkgICAgfHwgVFJFRV9DT0RFIChvcDMpID09IFZBTFVFX0hB TkRMRSk7Ci0JCWlmIChvcDMKLQkJICAgICYmICF1bmlvbl9jb250YWluc192 YWx1ZSAoc2V0MSwgc2V0Miwgb3AzKSkKLQkJICByZXR1cm4gZmFsc2U7Ci0J ICAgIH0KLQkgICAgcmV0dXJuICF2YWx1ZV9kaWVzX2luX2Jsb2NrX3ggKGV4 cHIsIGJsb2NrKTsKLQkgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxz ZTsKLQotICAgIGNhc2UgdGNjX2V4Y2VwdGlvbmFsOgotICAgICAgewotCWdj Y19hc3NlcnQgKFRSRUVfQ09ERSAoZXhwcikgPT0gU1NBX05BTUUpOwotCXJl dHVybiBiaXRtYXBfc2V0X2NvbnRhaW5zX2V4cHIgKEFWQUlMX09VVCAoYmxv Y2spLCBleHByKTsKLSAgICAgIH0KLQotICAgIGNhc2UgdGNjX2RlY2xhcmF0 aW9uOgotICAgICAgcmV0dXJuICF2YWx1ZV9kaWVzX2luX2Jsb2NrX3ggKGV4 cHIsIGJsb2NrKTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBObyBvdGhl ciBjYXNlcyBzaG91bGQgYmUgZW5jb3VudGVyZWQuICAqLworCSAgfQorCXJl dHVybiAhdmFsdWVfZGllc19pbl9ibG9ja194IChleHByLCBibG9jayk7Cisg ICAgICB9CisgICAgZGVmYXVsdDoKICAgICAgIGdjY191bnJlYWNoYWJsZSAo KTsKLSAgIH0KKyAgICB9CiB9CiAKIC8qIENsZWFuIHRoZSBzZXQgb2YgZXhw cmVzc2lvbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkIGluIFNFVDEgb3IK QEAgLTE1OTcsMTYgKzE3OTgsMTYgQEAKIHN0YXRpYyB2b2lkCiBkZXBlbmRl bnRfY2xlYW4gKGJpdG1hcF9zZXRfdCBzZXQxLCBiaXRtYXBfc2V0X3Qgc2V0 MiwgYmFzaWNfYmxvY2sgYmxvY2spCiB7Ci0gIFZFQyAodHJlZSwgaGVhcCkg KmV4cHJzID0gc29ydGVkX2FycmF5X2Zyb21fYml0bWFwX3NldCAoc2V0MSk7 Ci0gIHRyZWUgZXhwcjsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgVkVD X2l0ZXJhdGUgKHRyZWUsIGV4cHJzLCBpLCBleHByKTsgaSsrKQorICBWRUMg KHByZV9leHByLCBoZWFwKSAqZXhwcnMgPSBzb3J0ZWRfYXJyYXlfZnJvbV9i aXRtYXBfc2V0IChzZXQxKTsKKyAgcHJlX2V4cHIgZXhwcjsKKyAgaW50IGk7 CisKKyAgZm9yIChpID0gMDsgVkVDX2l0ZXJhdGUgKHByZV9leHByLCBleHBy cywgaSwgZXhwcik7IGkrKykKICAgICB7CiAgICAgICBpZiAoIXZhbGlkX2lu X3NldHMgKHNldDEsIHNldDIsIGV4cHIsIGJsb2NrKSkKIAliaXRtYXBfcmVt b3ZlX2Zyb21fc2V0IChzZXQxLCBleHByKTsKICAgICB9Ci0gIFZFQ19mcmVl ICh0cmVlLCBoZWFwLCBleHBycyk7CisgIFZFQ19mcmVlIChwcmVfZXhwciwg aGVhcCwgZXhwcnMpOwogfQogCiAvKiBDbGVhbiB0aGUgc2V0IG9mIGV4cHJl c3Npb25zIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZCBpbiBTRVQuICBUaGlz CkBAIC0xNjE2LDE2ICsxODE3LDE2IEBACiBzdGF0aWMgdm9pZAogY2xlYW4g KGJpdG1hcF9zZXRfdCBzZXQsIGJhc2ljX2Jsb2NrIGJsb2NrKQogewotICBW RUMgKHRyZWUsIGhlYXApICpleHBycyA9IHNvcnRlZF9hcnJheV9mcm9tX2Jp dG1hcF9zZXQgKHNldCk7Ci0gIHRyZWUgZXhwcjsKLSAgaW50IGk7Ci0KLSAg Zm9yIChpID0gMDsgVkVDX2l0ZXJhdGUgKHRyZWUsIGV4cHJzLCBpLCBleHBy KTsgaSsrKQorICBWRUMgKHByZV9leHByLCBoZWFwKSAqZXhwcnMgPSBzb3J0 ZWRfYXJyYXlfZnJvbV9iaXRtYXBfc2V0IChzZXQpOworICBwcmVfZXhwciBl eHByOworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBWRUNfaXRlcmF0ZSAo cHJlX2V4cHIsIGV4cHJzLCBpLCBleHByKTsgaSsrKQogICAgIHsKICAgICAg IGlmICghdmFsaWRfaW5fc2V0cyAoc2V0LCBOVUxMLCBleHByLCBibG9jaykp CiAJYml0bWFwX3JlbW92ZV9mcm9tX3NldCAoc2V0LCBleHByKTsKICAgICB9 Ci0gIFZFQ19mcmVlICh0cmVlLCBoZWFwLCBleHBycyk7CisgIFZFQ19mcmVl IChwcmVfZXhwciwgaGVhcCwgZXhwcnMpOwogfQogCiBzdGF0aWMgc2JpdG1h cCBoYXNfYWJub3JtYWxfcHJlZHM7CkBAIC0xOTY3LDczICsyMTY4LDYgQEAK ICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLS8qIEluaXRpYWxpemUgZGF0YSBz dHJ1Y3R1cmVzIHVzZWQgZm9yIEFOVElDIGFuZCBBVkFJTC4gICovCi0KLXN0 YXRpYyB2b2lkCi1pbml0X2FudGljICh2b2lkKQotewotICBiYXNpY19ibG9j ayBiYjsKLQotICBuZXh0X2V4cHJlc3Npb25faWQgPSAwOwotICBleHByZXNz aW9ucyA9IE5VTEw7Ci0gIGV4cHJlc3Npb25fdnVzZXMgPSBOVUxMOwotCi0g IHBvc3RvcmRlciA9IFhORVdWRUMgKGludCwgbl9iYXNpY19ibG9ja3MgLSBO VU1fRklYRURfQkxPQ0tTKTsKLSAgcG9zdF9vcmRlcl9jb21wdXRlIChwb3N0 b3JkZXIsIGZhbHNlLCBmYWxzZSk7Ci0KLSAgYml0bWFwX29ic3RhY2tfaW5p dGlhbGl6ZSAoJmdyYW5kX2JpdG1hcF9vYnN0YWNrKTsKLSAgb2JzdGFja19p bml0ICgmdGVtcF9jYWxsX2V4cHJfb2JzdGFjayk7Ci0gIHNlZW5fZHVyaW5n X3RyYW5zbGF0ZSA9IEJJVE1BUF9BTExPQyAoJmdyYW5kX2JpdG1hcF9vYnN0 YWNrKTsKLQotICBiaXRtYXBfc2V0X3Bvb2wgPSBjcmVhdGVfYWxsb2NfcG9v bCAoIkJpdG1hcCBzZXRzIiwKLQkJCQkJc2l6ZW9mIChzdHJ1Y3QgYml0bWFw X3NldCksIDMwKTsKLSAgYmluYXJ5X25vZGVfcG9vbCA9IGNyZWF0ZV9hbGxv Y19wb29sICgiQmluYXJ5IHRyZWUgbm9kZXMiLAotCQkJCQl0cmVlX2NvZGVf c2l6ZSAoUExVU19FWFBSKSwgMzApOwotICB1bmFyeV9ub2RlX3Bvb2wgPSBj cmVhdGVfYWxsb2NfcG9vbCAoIlVuYXJ5IHRyZWUgbm9kZXMiLAotCQkJCSAg ICAgICB0cmVlX2NvZGVfc2l6ZSAoTkVHQVRFX0VYUFIpLCAzMCk7Ci0gIHJl ZmVyZW5jZV9ub2RlX3Bvb2wgPSBjcmVhdGVfYWxsb2NfcG9vbCAoIlJlZmVy ZW5jZSB0cmVlIG5vZGVzIiwKLQkJCQkJICAgdHJlZV9jb2RlX3NpemUgKEFS UkFZX1JFRiksIDMwKTsKLSAgY29tcGFyaXNvbl9ub2RlX3Bvb2wgPSBjcmVh dGVfYWxsb2NfcG9vbCAoIkNvbXBhcmlzb24gdHJlZSBub2RlcyIsCi0JCQkJ CSAgICB0cmVlX2NvZGVfc2l6ZSAoRVFfRVhQUiksIDMwKTsKLQotICBwaGlf dHJhbnNsYXRlX3RhYmxlID0gaHRhYl9jcmVhdGUgKDUxMTAsIGV4cHJfcHJl ZF90cmFuc19oYXNoLAotCQkJCSAgICAgZXhwcl9wcmVkX3RyYW5zX2VxLCBm cmVlKTsKLSAgbWF4aW1hbF9zZXQgPSBpbl9mcmUgPyBOVUxMIDogYml0bWFw X3NldF9uZXcgKCk7Ci0KLSAgRk9SX0FMTF9CQiAoYmIpCi0gICAgewotICAg ICAgYmItPmF1eCA9IHhjYWxsb2MgKDEsIHNpemVvZiAoc3RydWN0IGJiX2Jp dG1hcF9zZXRzKSk7Ci0gICAgICBFWFBfR0VOIChiYikgPSBiaXRtYXBfc2V0 X25ldyAoKTsKLSAgICAgIFBISV9HRU4gKGJiKSA9IGJpdG1hcF9zZXRfbmV3 ICgpOwotICAgICAgVE1QX0dFTiAoYmIpID0gYml0bWFwX3NldF9uZXcgKCk7 Ci0gICAgICBBVkFJTF9PVVQgKGJiKSA9IGJpdG1hcF9zZXRfbmV3ICgpOwot ICAgIH0KLX0KLQotLyogRGVpbml0aWFsaXplIGRhdGEgc3RydWN0dXJlcyB1 c2VkIGZvciBBTlRJQyBhbmQgQVZBSUwuICAqLwotCi1zdGF0aWMgdm9pZAot ZmluaV9hbnRpYyAodm9pZCkKLXsKLSAgYmFzaWNfYmxvY2sgYmI7Ci0KLSAg aWYgKG1heGltYWxfc2V0KQotICAgIGJpdG1hcF9zZXRfZnJlZSAobWF4aW1h bF9zZXQpOwotICBmcmVlIChwb3N0b3JkZXIpOwotICBiaXRtYXBfb2JzdGFj a19yZWxlYXNlICgmZ3JhbmRfYml0bWFwX29ic3RhY2spOwotICBmcmVlX2Fs bG9jX3Bvb2wgKGJpdG1hcF9zZXRfcG9vbCk7Ci0gIGZyZWVfYWxsb2NfcG9v bCAoYmluYXJ5X25vZGVfcG9vbCk7Ci0gIGZyZWVfYWxsb2NfcG9vbCAocmVm ZXJlbmNlX25vZGVfcG9vbCk7Ci0gIGZyZWVfYWxsb2NfcG9vbCAodW5hcnlf bm9kZV9wb29sKTsKLSAgZnJlZV9hbGxvY19wb29sIChjb21wYXJpc29uX25v ZGVfcG9vbCk7Ci0KLSAgRk9SX0FMTF9CQiAoYmIpCi0gICAgewotICAgICAg ZnJlZSAoYmItPmF1eCk7Ci0gICAgICBiYi0+YXV4ID0gTlVMTDsKLSAgICB9 Ci19Ci0KIC8qIENvbXB1dGUgQU5USUMgYW5kIHBhcnRpYWwgQU5USUMgc2V0 cy4gICovCiAKIHN0YXRpYyB2b2lkCkBAIC0yMTU5LDIyICsyMjkzLDYgQEAK IHsKICAgcmV0dXJuIFRSRUVfQ09ERSAob3ApID09IEZJTFRFUl9FWFBSIHx8 IFRSRUVfQ09ERSAob3ApID09IEVYQ19QVFJfRVhQUjsKIH0KLQotLyogUmV0 dXJuIHRydWUgaWYgT1AgaXMgYSB0cmVlIHdoaWNoIHdlIGNhbiBwZXJmb3Jt IHZhbHVlIG51bWJlcmluZwotICAgb24uICAqLwotCi1zdGF0aWMgYm9vbAot Y2FuX3ZhbHVlX251bWJlcl9vcGVyYXRpb24gKHRyZWUgb3ApCi17Ci0gIHJl dHVybiAoVU5BUllfQ0xBU1NfUCAob3ApCi0JICAmJiAhaXNfZXhjZXB0aW9u X3JlbGF0ZWQgKFRSRUVfT1BFUkFORCAob3AsIDApKSkKLSAgICB8fCBCSU5B UllfQ0xBU1NfUCAob3ApCi0gICAgfHwgQ09NUEFSSVNPTl9DTEFTU19QIChv cCkKLSAgICB8fCBSRUZFUkVOQ0VfQ0xBU1NfUCAob3ApCi0gICAgfHwgKFRS RUVfQ09ERSAob3ApID09IENBTExfRVhQUgotCSYmIGNhbl92YWx1ZV9udW1i ZXJfY2FsbCAob3ApKTsKLX0KLQogCiAvKiBSZXR1cm4gdHJ1ZSBpZiBPUCBp cyBhIHRyZWUgd2hpY2ggd2UgY2FuIHBlcmZvcm0gUFJFIG9uCiAgICBvbi4g IFRoaXMgbWF5IG5vdCBtYXRjaCB0aGUgb3BlcmF0aW9ucyB3ZSBjYW4gdmFs dWUgbnVtYmVyLCBidXQgaW4KQEAgLTIyMTgsOTAgKzIzMzYsMjAzIEBACiAg ICBhcmUgZG9pbmcuCiAqLwogc3RhdGljIHRyZWUKLWNyZWF0ZV9jb21wb25l bnRfcmVmX2J5X3BpZWNlcyAoYmFzaWNfYmxvY2sgYmxvY2ssIHRyZWUgZXhw ciwgdHJlZSBzdG10cywKLQkJCQl0cmVlIGRvbXN0bXQpCi17Ci0gIHRyZWUg Z2Vub3AgPSBleHByOwotICB0cmVlIGZvbGRlZDsKLQotICBpZiAoVFJFRV9D T0RFIChnZW5vcCkgPT0gVkFMVUVfSEFORExFKQotICAgIHsKLSAgICAgIHRy ZWUgZm91bmQgPSBiaXRtYXBfZmluZF9sZWFkZXIgKEFWQUlMX09VVCAoYmxv Y2spLCBleHByLCBkb21zdG10KTsKLSAgICAgIGlmIChmb3VuZCkKLQlyZXR1 cm4gZm91bmQ7Ci0gICAgfQotCi0gIGlmIChUUkVFX0NPREUgKGdlbm9wKSA9 PSBWQUxVRV9IQU5ETEUpCi0gICAgewotICAgICAgYml0bWFwX3NldF90IGV4 cHJzZXQgPSBWQUxVRV9IQU5ETEVfRVhQUl9TRVQgKGV4cHIpOwotICAgICAg dW5zaWduZWQgaW50IGZpcnN0Yml0ID0gYml0bWFwX2ZpcnN0X3NldF9iaXQg KGV4cHJzZXQtPmV4cHJlc3Npb25zKTsKLSAgICAgIGdlbm9wID0gZXhwcmVz c2lvbl9mb3JfaWQgKGZpcnN0Yml0KTsKLSAgICB9Ci0KLSAgc3dpdGNoIFRS RUVfQ09ERSAoZ2Vub3ApCi0gICAgeworY3JlYXRlX2NvbXBvbmVudF9yZWZf YnlfcGllY2VzIChiYXNpY19ibG9jayBibG9jaywgdm5fcmVmZXJlbmNlX3Qg cmVmLAorCQkJCXVuc2lnbmVkIGludCBvcGVyYW5kLAorCQkJCXRyZWUgc3Rt dHMsCisJCQkJdHJlZSBkb21zdG10LAorCQkJCWJvb2wgaW5fY2FsbCkKK3sK KyAgdm5fcmVmZXJlbmNlX29wX3QgY3Vycm9wID0gVkVDX2luZGV4ICh2bl9y ZWZlcmVuY2Vfb3BfcywgcmVmLT5vcGVyYW5kcywKKwkJCQkJb3BlcmFuZCk7 CisgIHRyZWUgZ2Vub3A7CisgIHN3aXRjaCAoY3Vycm9wLT5vcGNvZGUpIAor ICAgIHsKKyAgICBjYXNlIENBTExfRVhQUjoKKyAgICAgIHsKKwl0cmVlIGZv bGRlZDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl2bl9yZWZlcmVuY2Vfb3BfdCBk ZWNsb3AgPSBWRUNfaW5kZXggKHZuX3JlZmVyZW5jZV9vcF9zLAorCQkJCQkg ICAgICByZWYtPm9wZXJhbmRzLCAxKTsKKwl1bnNpZ25lZCBpbnQgbmFyZ3Mg PSBWRUNfbGVuZ3RoICh2bl9yZWZlcmVuY2Vfb3BfcywgcmVmLT5vcGVyYW5k cykgLSAyOworCXRyZWUgKmFyZ3MgPSBYTkVXVkVDICh0cmVlLCBuYXJncyk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkgIHsKKwkgICAg YXJnc1tpXSA9IGNyZWF0ZV9jb21wb25lbnRfcmVmX2J5X3BpZWNlcyAoYmxv Y2ssIHJlZiwKKwkJCQkJCSAgICAgIG9wZXJhbmQgKyAyICsgaSwgc3RtdHMs CisJCQkJCQkgICAgICBkb21zdG10LCB0cnVlKTsKKwkgIH0KKwlmb2xkZWQg PSBidWlsZF9jYWxsX2FycmF5IChjdXJyb3AtPnR5cGUsIGRlY2xvcC0+b3Aw LCBuYXJncywgYXJncyk7CisJZnJlZSAoYXJncyk7CisJcmV0dXJuIGZvbGRl ZDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgUkVBTFBBUlRf RVhQUjoKKyAgICBjYXNlIElNQUdQQVJUX0VYUFI6CisgICAgY2FzZSBWSUVX X0NPTlZFUlRfRVhQUjoKKyAgICAgIHsKKwl0cmVlIGZvbGRlZDsKKwl0cmVl IGdlbm9wMCA9IGNyZWF0ZV9jb21wb25lbnRfcmVmX2J5X3BpZWNlcyAoYmxv Y2ssIHJlZiwKKwkJCQkJCSAgICAgIG9wZXJhbmQgKyAxLAorCQkJCQkJICAg ICAgc3RtdHMsIGRvbXN0bXQsCisJCQkJCQkgICAgICBpbl9jYWxsKTsKKwlp ZiAoIWdlbm9wMCkKKwkgIHJldHVybiBOVUxMX1RSRUU7CisJZm9sZGVkID0g Zm9sZF9idWlsZDEgKGN1cnJvcC0+b3Bjb2RlLCBjdXJyb3AtPnR5cGUsCisJ CQkgICAgICBnZW5vcDApOworCXJldHVybiBmb2xkZWQ7CisgICAgICB9Cisg ICAgICBicmVhazsKKyAgICBjYXNlIEFMSUdOX0lORElSRUNUX1JFRjoKKyAg ICBjYXNlIE1JU0FMSUdORURfSU5ESVJFQ1RfUkVGOgorICAgIGNhc2UgSU5E SVJFQ1RfUkVGOgorICAgICAgeworCS8qIEluc2lkZSBhIENBTExfRVhQUiBv cDAgaXMgdGhlIGFjdHVhbCBpbmRpcmVjdF9yZWYuICAqLworCWlmIChpbl9j YWxsKQorCSAgeworCSAgICB0cmVlIGZvbGRlZDsKKwkgICAgdHJlZSBvcDAg PSBUUkVFX09QRVJBTkQgKGN1cnJvcC0+b3AwLCAwKTsKKwkgICAgcHJlX2V4 cHIgb3AwZXhwciA9IGdldF9vcl9hbGxvY19leHByX2ZvciAob3AwKTsKKwkg ICAgdHJlZSBnZW5vcDAgPSBmaW5kX29yX2dlbmVyYXRlX2V4cHJlc3Npb24g KGJsb2NrLCBvcDBleHByLCBzdG10cywKKwkJCQkJCSAgICAgICBkb21zdG10 KTsKKwkgICAgaWYgKCFnZW5vcDApCisJICAgICAgcmV0dXJuIE5VTExfVFJF RTsKKwkgICAgZm9sZGVkID0gZm9sZF9idWlsZDEgKGN1cnJvcC0+b3Bjb2Rl LCBjdXJyb3AtPnR5cGUsCisJCQkJICBnZW5vcDApOworCSAgICByZXR1cm4g Zm9sZGVkOworCSAgfQorCWVsc2UKKwkgIHsKKworCSAgICB0cmVlIGZvbGRl ZDsKKwkgICAgdHJlZSBnZW5vcDEgPSBjcmVhdGVfY29tcG9uZW50X3JlZl9i eV9waWVjZXMgKGJsb2NrLCByZWYsCisJCQkJCQkJICBvcGVyYW5kICsgMSwK KwkJCQkJCQkgIHN0bXRzLCBkb21zdG10LAorCQkJCQkJCSAgaW5fY2FsbCk7 CisJICAgIGlmICghZ2Vub3AxKQorCSAgICAgIHJldHVybiBOVUxMX1RSRUU7 CisJICAgIGdlbm9wMSA9IGZvbGRfY29udmVydCAoYnVpbGRfcG9pbnRlcl90 eXBlIChjdXJyb3AtPnR5cGUpLAorCQlnZW5vcDEpOworCisJICAgIGZvbGRl ZCA9IGZvbGRfYnVpbGQxIChjdXJyb3AtPm9wY29kZSwgY3Vycm9wLT50eXBl LAorCQlnZW5vcDEpOworCSAgICByZXR1cm4gZm9sZGVkOworCSAgfQorICAg ICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBCSVRfRklFTERfUkVGOgor ICAgICAgeworCXRyZWUgZm9sZGVkOworCXRyZWUgZ2Vub3AwID0gY3JlYXRl X2NvbXBvbmVudF9yZWZfYnlfcGllY2VzIChibG9jaywgcmVmLCBvcGVyYW5k ICsgMSwKKwkJCQkJCSAgICAgIHN0bXRzLCBkb21zdG10LAorCQkJCQkJICAg ICAgaW5fY2FsbCk7CisJcHJlX2V4cHIgb3AxZXhwciA9IGdldF9vcl9hbGxv Y19leHByX2ZvciAoY3Vycm9wLT5vcDApOworCXByZV9leHByIG9wMmV4cHIg PSBnZXRfb3JfYWxsb2NfZXhwcl9mb3IgKGN1cnJvcC0+b3AxKTsKKwl0cmVl IGdlbm9wMTsKKwl0cmVlIGdlbm9wMjsKKwkKKwlpZiAoIWdlbm9wMCkKKwkg IHJldHVybiBOVUxMX1RSRUU7CisJZ2Vub3AxID0gZmluZF9vcl9nZW5lcmF0 ZV9leHByZXNzaW9uIChibG9jaywgb3AxZXhwciwgc3RtdHMsIGRvbXN0bXQp OworCWlmICghZ2Vub3AxKQorCSAgcmV0dXJuIE5VTExfVFJFRTsKKwlnZW5v cDIgPSBmaW5kX29yX2dlbmVyYXRlX2V4cHJlc3Npb24gKGJsb2NrLCBvcDJl eHByLCBzdG10cywgZG9tc3RtdCk7CisJaWYgKCFnZW5vcDIpCisJICByZXR1 cm4gTlVMTF9UUkVFOworCWZvbGRlZCA9IGZvbGRfYnVpbGQzIChCSVRfRklF TERfUkVGLCBjdXJyb3AtPnR5cGUsIGdlbm9wMCwgZ2Vub3AxLAorCQkJICAg ICAgZ2Vub3AyKTsKKwlyZXR1cm4gZm9sZGVkOworICAgICAgfQorICAgICAg CisgICAgICAvKiBGb3IgYXJyYXkgcmVmIHZuX3JlZmVyZW5jZV9vcCdzLCBv cGVyYW5kIDEgb2YgdGhlIGFycmF5IHJlZgorCSBpcyBvcDAgb2YgdGhlIHJl ZmVyZW5jZSBvcCBhbmQgb3BlcmFuZCAzIG9mIHRoZSBhcnJheSByZWYgaXMK Kwkgb3AxLiAgKi8KKyAgICBjYXNlIEFSUkFZX1JBTkdFX1JFRjoKICAgICBj YXNlIEFSUkFZX1JFRjoKICAgICAgIHsKLQl0cmVlIG9wMDsKLQl0cmVlIG9w MSwgb3AyLCBvcDM7Ci0Jb3AwID0gY3JlYXRlX2NvbXBvbmVudF9yZWZfYnlf cGllY2VzIChibG9jaywKLQkJCQkJICAgICAgVFJFRV9PUEVSQU5EIChnZW5v cCwgMCksCi0JCQkJCSAgICAgIHN0bXRzLCBkb21zdG10KTsKLQlvcDEgPSBU UkVFX09QRVJBTkQgKGdlbm9wLCAxKTsKLQlpZiAoVFJFRV9DT0RFIChvcDEp ID09IFZBTFVFX0hBTkRMRSkKLQkgIG9wMSA9IGZpbmRfb3JfZ2VuZXJhdGVf ZXhwcmVzc2lvbiAoYmxvY2ssIG9wMSwgc3RtdHMsIGRvbXN0bXQpOwotCW9w MiA9IFRSRUVfT1BFUkFORCAoZ2Vub3AsIDIpOwotCWlmIChvcDIgJiYgVFJF RV9DT0RFIChvcDIpID09IFZBTFVFX0hBTkRMRSkKLQkgIG9wMiA9IGZpbmRf b3JfZ2VuZXJhdGVfZXhwcmVzc2lvbiAoYmxvY2ssIG9wMiwgc3RtdHMsIGRv bXN0bXQpOwotCW9wMyA9IFRSRUVfT1BFUkFORCAoZ2Vub3AsIDMpOwotCWlm IChvcDMgJiYgVFJFRV9DT0RFIChvcDMpID09IFZBTFVFX0hBTkRMRSkKLQkg IG9wMyA9IGZpbmRfb3JfZ2VuZXJhdGVfZXhwcmVzc2lvbiAoYmxvY2ssIG9w Mywgc3RtdHMsIGRvbXN0bXQpOwotCWlmICghb3AwIHx8ICFvcDEpCi0JICBy ZXR1cm4gTlVMTF9UUkVFOwotCWZvbGRlZCA9IGJ1aWxkNCAoQVJSQVlfUkVG LCBUUkVFX1RZUEUgKGdlbm9wKSwgb3AwLCBvcDEsCi0JCQkgICAgICBvcDIs IG9wMyk7Ci0JcmV0dXJuIGZvbGRlZDsKLSAgICAgIH0KKwl2bl9yZWZlcmVu Y2Vfb3BfdCBvcDBleHByOworCXRyZWUgZ2Vub3AwOworCXRyZWUgZ2Vub3Ax ID0gY3Vycm9wLT5vcDA7CisJcHJlX2V4cHIgb3AxZXhwcjsKKwl0cmVlIGdl bm9wMiA9IGN1cnJvcC0+b3AxOworCXByZV9leHByIG9wMmV4cHI7CisJdHJl ZSBnZW5vcDM7CisJb3AwZXhwciA9IFZFQ19pbmRleCAodm5fcmVmZXJlbmNl X29wX3MsIHJlZi0+b3BlcmFuZHMsIG9wZXJhbmQgKyAxKTsKKwlnZW5vcDAg PSBjcmVhdGVfY29tcG9uZW50X3JlZl9ieV9waWVjZXMgKGJsb2NrLCByZWYs IG9wZXJhbmQgKyAxLAorCQkJCQkJIHN0bXRzLCBkb21zdG10LAorCQkJCQkJ IGluX2NhbGwpOworCWlmICghZ2Vub3AwKQorCSAgcmV0dXJuIE5VTExfVFJF RTsKKwlvcDFleHByID0gZ2V0X29yX2FsbG9jX2V4cHJfZm9yIChnZW5vcDEp OworCWdlbm9wMSA9IGZpbmRfb3JfZ2VuZXJhdGVfZXhwcmVzc2lvbiAoYmxv Y2ssIG9wMWV4cHIsIHN0bXRzLCBkb21zdG10KTsKKwlpZiAoIWdlbm9wMSkK KwkgIHJldHVybiBOVUxMX1RSRUU7CisJaWYgKGdlbm9wMikgCisJICB7CisJ ICAgIG9wMmV4cHIgPSBnZXRfb3JfYWxsb2NfZXhwcl9mb3IgKGdlbm9wMik7 CisJICAgIGdlbm9wMiA9IGZpbmRfb3JfZ2VuZXJhdGVfZXhwcmVzc2lvbiAo YmxvY2ssIG9wMmV4cHIsIHN0bXRzLAorCQkJCQkJICBkb21zdG10KTsKKwkg ICAgaWYgKCFnZW5vcDIpCisJICAgICAgcmV0dXJuIE5VTExfVFJFRTsKKwkg IH0KKworCWdlbm9wMyA9IGN1cnJvcC0+b3AyOworCXJldHVybiBidWlsZDQg KGN1cnJvcC0+b3Bjb2RlLCBjdXJyb3AtPnR5cGUsIGdlbm9wMCwgZ2Vub3Ax LAorCQkgICAgICAgZ2Vub3AyLCBnZW5vcDMpOworICAgICAgfQkJICAgICAg CiAgICAgY2FzZSBDT01QT05FTlRfUkVGOgogICAgICAgewogCXRyZWUgb3Aw OwogCXRyZWUgb3AxOwotCW9wMCA9IGNyZWF0ZV9jb21wb25lbnRfcmVmX2J5 X3BpZWNlcyAoYmxvY2ssCi0JCQkJCSAgICAgIFRSRUVfT1BFUkFORCAoZ2Vu b3AsIDApLAotCQkJCQkgICAgICBzdG10cywgZG9tc3RtdCk7CisJdHJlZSBn ZW5vcDIgPSBjdXJyb3AtPm9wMTsKKwlwcmVfZXhwciBvcDJleHByOworCW9w MCA9IGNyZWF0ZV9jb21wb25lbnRfcmVmX2J5X3BpZWNlcyAoYmxvY2ssIHJl Ziwgb3BlcmFuZCArIDEsCisJCQkJCSAgICAgIHN0bXRzLCBkb21zdG10LCBp bl9jYWxsKTsKIAlpZiAoIW9wMCkKIAkgIHJldHVybiBOVUxMX1RSRUU7CiAJ Lyogb3AxIHNob3VsZCBiZSBhIEZJRUxEX0RFQ0wsIHdoaWNoIGFyZSByZXBy ZXNlbnRlZCBieQogCSAgIHRoZW1zZWx2ZXMuICAqLwotCW9wMSA9IFRSRUVf T1BFUkFORCAoZ2Vub3AsIDEpOwotCWZvbGRlZCA9IGZvbGRfYnVpbGQzIChD T01QT05FTlRfUkVGLCBUUkVFX1RZUEUgKGdlbm9wKSwgb3AwLCBvcDEsCi0J CQkgICAgICBOVUxMX1RSRUUpOwotCXJldHVybiBmb2xkZWQ7Ci0gICAgICB9 Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElORElSRUNUX1JFRjoKLSAgICAg IHsKLQl0cmVlIG9wMSA9IFRSRUVfT1BFUkFORCAoZ2Vub3AsIDApOwotCXRy ZWUgZ2Vub3AxID0gZmluZF9vcl9nZW5lcmF0ZV9leHByZXNzaW9uIChibG9j aywgb3AxLCBzdG10cywgZG9tc3RtdCk7Ci0JaWYgKCFnZW5vcDEpCi0JICBy ZXR1cm4gTlVMTF9UUkVFOwotCi0JZm9sZGVkID0gZm9sZF9idWlsZDEgKFRS RUVfQ09ERSAoZ2Vub3ApLCBUUkVFX1RZUEUgKGdlbm9wKSwKLQkJCSAgICAg IGdlbm9wMSk7Ci0JcmV0dXJuIGZvbGRlZDsKLSAgICAgIH0KLSAgICAgIGJy ZWFrOworCW9wMSA9IGN1cnJvcC0+b3AwOworCWlmIChnZW5vcDIpIAorCSAg eworCSAgICBvcDJleHByID0gZ2V0X29yX2FsbG9jX2V4cHJfZm9yIChnZW5v cDIpOworCSAgICBnZW5vcDIgPSBmaW5kX29yX2dlbmVyYXRlX2V4cHJlc3Np b24gKGJsb2NrLCBvcDJleHByLCBzdG10cywKKwkJCQkJCSAgZG9tc3RtdCk7 CisJICAgIGlmICghZ2Vub3AyKQorCSAgICAgIHJldHVybiBOVUxMX1RSRUU7 CisJICB9CisJCisJcmV0dXJuIGZvbGRfYnVpbGQzIChDT01QT05FTlRfUkVG LCBUUkVFX1RZUEUgKG9wMSksIG9wMCwgb3AxLAorCQkJICAgIGdlbm9wMik7 CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFNTQV9OQU1FOgor ICAgICAgeworCXByZV9leHByIG9wMGV4cHIgPSBnZXRfb3JfYWxsb2NfZXhw cl9mb3IgKGN1cnJvcC0+b3AwKTsKKwlnZW5vcCA9IGZpbmRfb3JfZ2VuZXJh dGVfZXhwcmVzc2lvbiAoYmxvY2ssIG9wMGV4cHIsIHN0bXRzLCBkb21zdG10 KTsKKwlyZXR1cm4gZ2Vub3A7CisgICAgICB9CisgICAgY2FzZSBTVFJJTkdf Q1NUOgorICAgIGNhc2UgSU5URUdFUl9DU1Q6CisgICAgY2FzZSBDT01QTEVY X0NTVDoKKyAgICBjYXNlIFZFQ1RPUl9DU1Q6CisgICAgY2FzZSBSRUFMX0NT VDoKKyAgICBjYXNlIENPTlNUUlVDVE9SOgogICAgIGNhc2UgVkFSX0RFQ0w6 CiAgICAgY2FzZSBQQVJNX0RFQ0w6CisgICAgY2FzZSBDT05TVF9ERUNMOgog ICAgIGNhc2UgUkVTVUxUX0RFQ0w6Ci0gICAgY2FzZSBTU0FfTkFNRToKLSAg ICBjYXNlIFNUUklOR19DU1Q6Ci0gICAgICByZXR1cm4gZ2Vub3A7CisgICAg Y2FzZSBGVU5DVElPTl9ERUNMOgorICAgICAgLyogRm9yIEFERFJfRVhQUiBp biBhIENBTExfRVhQUiwgb3AwIGlzIGFjdHVhbGx5IHRoZSBlbnRpcmUKKwkg QUREUl9FWFBSLCBub3QganVzdCBpdCdzIG9wZXJhbmQuICAqLworICAgIGNh c2UgQUREUl9FWFBSOgorICAgICAgaWYgKGN1cnJvcC0+b3Bjb2RlID09IEFE RFJfRVhQUikKKwlnY2NfYXNzZXJ0IChjdXJyb3AtPm9wMCAhPSBOVUxMKTsK KyAgICAgIHJldHVybiBjdXJyb3AtPm9wMDsKKyAgICAgIAogICAgIGRlZmF1 bHQ6CiAgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7Ci0gICAgfQotCi0gIHJl dHVybiBOVUxMX1RSRUU7CisgICAgfSAKIH0KIAogLyogRmluZCBhIGxlYWRl ciBmb3IgYW4gZXhwcmVzc2lvbiwgb3IgZ2VuZXJhdGUgb25lIHVzaW5nCkBA IC0yMzE4LDMxICsyNTQ5LDQwIEBACiAgICBvbiBmYWlsdXJlLiAgKi8KIAog c3RhdGljIHRyZWUKLWZpbmRfb3JfZ2VuZXJhdGVfZXhwcmVzc2lvbiAoYmFz aWNfYmxvY2sgYmxvY2ssIHRyZWUgZXhwciwgdHJlZSBzdG10cywKK2ZpbmRf b3JfZ2VuZXJhdGVfZXhwcmVzc2lvbiAoYmFzaWNfYmxvY2sgYmxvY2ssIHBy ZV9leHByIGV4cHIsIHRyZWUgc3RtdHMsCiAJCQkgICAgIHRyZWUgZG9tc3Rt dCkKIHsKLSAgdHJlZSBnZW5vcCA9IGJpdG1hcF9maW5kX2xlYWRlciAoQVZB SUxfT1VUIChibG9jayksIGV4cHIsIGRvbXN0bXQpOwotCisgIHByZV9leHBy IGxlYWRlciA9IGJpdG1hcF9maW5kX2xlYWRlciAoQVZBSUxfT1VUIChibG9j ayksCisJCQkJCWdldF9leHByX3ZhbHVlX2lkIChleHByKSwgZG9tc3RtdCk7 CisgIHRyZWUgZ2Vub3AgPSBOVUxMOworICBpZiAobGVhZGVyKQorICAgIHsK KyAgICAgIGlmIChsZWFkZXItPmtpbmQgPT0gTkFNRSkKKwlnZW5vcCA9IFBS RV9FWFBSX05BTUUgKGxlYWRlcik7CisgICAgICBlbHNlIGlmIChsZWFkZXIt PmtpbmQgPT0gQ09OU1RBTlQpCisJZ2Vub3AgPSBQUkVfRVhQUl9DT05TVEFO VCAobGVhZGVyKTsKKyAgICB9CisgIAogICAvKiBJZiBpdCdzIHN0aWxsIE5V TEwsIGl0IG11c3QgYmUgYSBjb21wbGV4IGV4cHJlc3Npb24sIHNvIGdlbmVy YXRlCiAgICAgIGl0IHJlY3Vyc2l2ZWx5LiAgKi8KICAgaWYgKGdlbm9wID09 IE5VTEwpCiAgICAgewotICAgICAgYml0bWFwX3NldF90IGV4cHJzZXQgPSBW QUxVRV9IQU5ETEVfRVhQUl9TRVQgKGV4cHIpOworICAgICAgYml0bWFwX3Nl dF90IGV4cHJzZXQ7CisgICAgICB1bnNpZ25lZCBpbnQgbG9va2ZvciA9IGdl dF9leHByX3ZhbHVlX2lkIChleHByKTsKICAgICAgIGJvb2wgaGFuZGxlZCA9 IGZhbHNlOwogICAgICAgYml0bWFwX2l0ZXJhdG9yIGJpOwogICAgICAgdW5z aWduZWQgaW50IGk7CiAKLSAgICAgIC8qIFdlIHdpbGwgaGl0IGNhc2VzIHdo ZXJlIHdlIGhhdmUgU1NBX05BTUUncyBpbiBleHByc2V0IGJlZm9yZQotCSBv dGhlciBvcGVyYXRpb25zLCBiZWNhdXNlIHdlIG1heSBoYXZlIGNvbWUgdXAg d2l0aCB0aGUgU0NDVk4KLQkgdmFsdWUgYmVmb3JlIGdldHRpbmcgdG8gdGhl IFJIUyBvZiB0aGUgZXhwcmVzc2lvbi4gICovCisgICAgICBleHByc2V0ID0g VkVDX2luZGV4IChiaXRtYXBfc2V0X3QsIHZhbHVlX2V4cHJlc3Npb25zLCBs b29rZm9yKTsKICAgICAgIEZPUl9FQUNIX0VYUFJfSURfSU5fU0VUIChleHBy c2V0LCBpLCBiaSkKIAl7Ci0JICBnZW5vcCA9IGV4cHJlc3Npb25fZm9yX2lk IChpKTsKLQkgIGlmIChjYW5fUFJFX29wZXJhdGlvbiAoZ2Vub3ApKQorCSAg cHJlX2V4cHIgdGVtcCA9IGV4cHJlc3Npb25fZm9yX2lkIChpKTsKKwkgIGlm ICh0ZW1wLT5raW5kICE9IE5BTUUpCiAJICAgIHsKIAkgICAgICBoYW5kbGVk ID0gdHJ1ZTsKLQkgICAgICBnZW5vcCA9IGNyZWF0ZV9leHByZXNzaW9uX2J5 X3BpZWNlcyAoYmxvY2ssIGdlbm9wLCBzdG10cywKLQkJCQkJCSAgIGRvbXN0 bXQpOworCSAgICAgIGdlbm9wID0gY3JlYXRlX2V4cHJlc3Npb25fYnlfcGll Y2VzIChibG9jaywgdGVtcCwgc3RtdHMsCisJCQkJCQkgICBkb21zdG10LAor CQkJCQkJICAgZ2V0X2V4cHJfdHlwZSAoZXhwcikpOwogCSAgICAgIGJyZWFr OwogCSAgICB9CiAJfQpAQCAtMjM1NSw2ICsyNTk1LDcgQEAKIH0KIAogI2Rl ZmluZSBORUNFU1NBUlkoc3RtdCkJCXN0bXQtPmJhc2UuYXNtX3dyaXR0ZW5f ZmxhZworCiAvKiBDcmVhdGUgYW4gZXhwcmVzc2lvbiBpbiBwaWVjZXMsIHNv IHRoYXQgd2UgY2FuIGhhbmRsZSB2ZXJ5IGNvbXBsZXgKICAgIGV4cHJlc3Np b25zIHRoYXQgbWF5IGJlIEFOVElDLCBidXQgbm90IG5lY2Vzc2FyeSBHSU1Q TEUuCiAgICBCTE9DSyBpcyB0aGUgYmFzaWMgYmxvY2sgdGhlIGV4cHJlc3Np b24gd2lsbCBiZSBpbnNlcnRlZCBpbnRvLApAQCAtMjM3NCwxMDkgKzI2MTUs NzcgQEAKICAgIGNhbiByZXR1cm4gTlVMTF9UUkVFIHRvIHNpZ25hbCBmYWls dXJlLiAgKi8KIAogc3RhdGljIHRyZWUKLWNyZWF0ZV9leHByZXNzaW9uX2J5 X3BpZWNlcyAoYmFzaWNfYmxvY2sgYmxvY2ssIHRyZWUgZXhwciwgdHJlZSBz dG10cywKLQkJCSAgICAgdHJlZSBkb21zdG10KQorY3JlYXRlX2V4cHJlc3Np b25fYnlfcGllY2VzIChiYXNpY19ibG9jayBibG9jaywgcHJlX2V4cHIgZXhw ciwgdHJlZSBzdG10cywKKwkJCSAgICAgdHJlZSBkb21zdG10LAorCQkJICAg ICB0cmVlIHR5cGUpCiB7CiAgIHRyZWUgdGVtcCwgbmFtZTsKICAgdHJlZSBm b2xkZWQsIGZvcmNlZF9zdG10cywgbmV3ZXhwcjsKLSAgdHJlZSB2OworICB1 bnNpZ25lZCBpbnQgdmFsdWVfaWQ7CiAgIHRyZWVfc3RtdF9pdGVyYXRvciB0 c2k7Ci0KLSAgc3dpdGNoIChUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAo ZXhwcikpKQotICAgIHsKLSAgICBjYXNlIHRjY192bF9leHA6Ci0gICAgICB7 Ci0JdHJlZSBmbiwgc2M7Ci0JdHJlZSBnZW5mbjsKLQlpbnQgaSwgbmFyZ3M7 Ci0JdHJlZSAqYnVmZmVyOwotCi0JZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChl eHByKSA9PSBDQUxMX0VYUFIpOwotCi0JZm4gPSBDQUxMX0VYUFJfRk4gKGV4 cHIpOwotCXNjID0gQ0FMTF9FWFBSX1NUQVRJQ19DSEFJTiAoZXhwcik7Ci0K LQlnZW5mbiA9IGZpbmRfb3JfZ2VuZXJhdGVfZXhwcmVzc2lvbiAoYmxvY2ss IGZuLCBzdG10cywgZG9tc3RtdCk7Ci0JaWYgKCFnZW5mbikKLQkgIHJldHVy biBOVUxMX1RSRUU7Ci0KLQluYXJncyA9IGNhbGxfZXhwcl9uYXJncyAoZXhw cik7Ci0JYnVmZmVyID0gKHRyZWUqKSBhbGxvY2EgKG5hcmdzICogc2l6ZW9m ICh0cmVlKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKLQkg IHsKLQkgICAgdHJlZSBhcmcgPSBDQUxMX0VYUFJfQVJHIChleHByLCBpKTsK LQkgICAgYnVmZmVyW2ldID0gZmluZF9vcl9nZW5lcmF0ZV9leHByZXNzaW9u IChibG9jaywgYXJnLCBzdG10cywKLQkJCQkJCSAgICAgZG9tc3RtdCk7Ci0J ICAgIGlmICghYnVmZmVyW2ldKQotCSAgICAgIHJldHVybiBOVUxMX1RSRUU7 Ci0JICB9Ci0KLQlmb2xkZWQgPSBidWlsZF9jYWxsX2FycmF5IChUUkVFX1RZ UEUgKGV4cHIpLCBnZW5mbiwgbmFyZ3MsIGJ1ZmZlcik7Ci0JaWYgKHNjKQot CSAgewotCSAgICBDQUxMX0VYUFJfU1RBVElDX0NIQUlOIChmb2xkZWQpID0K LQkgICAgICBmaW5kX29yX2dlbmVyYXRlX2V4cHJlc3Npb24gKGJsb2NrLCBz Yywgc3RtdHMsIGRvbXN0bXQpOwotCSAgICBpZiAoIUNBTExfRVhQUl9TVEFU SUNfQ0hBSU4gKGZvbGRlZCkpCi0JICAgICAgcmV0dXJuIE5VTExfVFJFRTsK LQkgIH0KLQlmb2xkZWQgPSBmb2xkIChmb2xkZWQpOwotCWJyZWFrOwotICAg ICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSB0Y2NfcmVmZXJlbmNlOgot ICAgICAgewotCWlmIChUUkVFX0NPREUgKGV4cHIpID09IENPTVBPTkVOVF9S RUYKLQkgICAgfHwgVFJFRV9DT0RFIChleHByKSA9PSBBUlJBWV9SRUYpCi0J ICB7Ci0JICAgIGZvbGRlZCA9IGNyZWF0ZV9jb21wb25lbnRfcmVmX2J5X3Bp ZWNlcyAoYmxvY2ssIGV4cHIsIHN0bXRzLAotCQkJCQkJICAgICBkb21zdG10 KTsKLQkgICAgaWYgKCFmb2xkZWQpCi0JICAgICAgcmV0dXJuIE5VTExfVFJF RTsKLQkgIH0KLQllbHNlCi0JICB7Ci0JICAgIHRyZWUgb3AxID0gVFJFRV9P UEVSQU5EIChleHByLCAwKTsKLQkgICAgdHJlZSBnZW5vcDEgPSBmaW5kX29y X2dlbmVyYXRlX2V4cHJlc3Npb24gKGJsb2NrLCBvcDEsIHN0bXRzLAotCQkJ CQkJICAgICAgIGRvbXN0bXQpOwotCSAgICBpZiAoIWdlbm9wMSkKLQkgICAg ICByZXR1cm4gTlVMTF9UUkVFOwotCi0JICAgIGZvbGRlZCA9IGZvbGRfYnVp bGQxIChUUkVFX0NPREUgKGV4cHIpLCBUUkVFX1RZUEUgKGV4cHIpLAotCQkJ CSAgZ2Vub3AxKTsKLQkgIH0KLQlicmVhazsKLSAgICAgIH0KLQotICAgIGNh c2UgdGNjX2JpbmFyeToKLSAgICBjYXNlIHRjY19jb21wYXJpc29uOgotICAg ICAgewotCXRyZWUgb3AxID0gVFJFRV9PUEVSQU5EIChleHByLCAwKTsKLQl0 cmVlIG9wMiA9IFRSRUVfT1BFUkFORCAoZXhwciwgMSk7Ci0JdHJlZSBnZW5v cDEgPSBmaW5kX29yX2dlbmVyYXRlX2V4cHJlc3Npb24gKGJsb2NrLCBvcDEs IHN0bXRzLCBkb21zdG10KTsKLQl0cmVlIGdlbm9wMiA9IGZpbmRfb3JfZ2Vu ZXJhdGVfZXhwcmVzc2lvbiAoYmxvY2ssIG9wMiwgc3RtdHMsIGRvbXN0bXQp OwotCWlmICghZ2Vub3AxIHx8ICFnZW5vcDIpCi0JICByZXR1cm4gTlVMTF9U UkVFOwotCWZvbGRlZCA9IGZvbGRfYnVpbGQyIChUUkVFX0NPREUgKGV4cHIp LCBUUkVFX1RZUEUgKGV4cHIpLAotCQkJICAgICAgZ2Vub3AxLCBnZW5vcDIp OwotCWJyZWFrOwotICAgICAgfQotCi0gICAgY2FzZSB0Y2NfdW5hcnk6Ci0g ICAgICB7Ci0JdHJlZSBvcDEgPSBUUkVFX09QRVJBTkQgKGV4cHIsIDApOwot CXRyZWUgZ2Vub3AxID0gZmluZF9vcl9nZW5lcmF0ZV9leHByZXNzaW9uIChi bG9jaywgb3AxLCBzdG10cywgZG9tc3RtdCk7Ci0JaWYgKCFnZW5vcDEpCi0J ICByZXR1cm4gTlVMTF9UUkVFOwotCWZvbGRlZCA9IGZvbGRfYnVpbGQxIChU UkVFX0NPREUgKGV4cHIpLCBUUkVFX1RZUEUgKGV4cHIpLAotCQkJICAgICAg Z2Vub3AxKTsKLQlicmVhazsKLSAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0g ICAgICBnY2NfdW5yZWFjaGFibGUgKCk7Ci0gICAgfQotCisgIHRyZWUgZXhw cnR5cGUgPSB0eXBlID8gdHlwZSA6IGdldF9leHByX3R5cGUgKGV4cHIpOwor ICBwcmVfZXhwciBuYW1lZXhwcjsKKyAgCisgIHN3aXRjaCAoZXhwci0+a2lu ZCkKKyAgICB7CisgICAgICAvKiBXZSBtYXkgaGl0IHRoZSBOQU1FL0NPTlNU QU5UIGNhc2UgaWYgd2UgaGF2ZSB0byBjb252ZXJ0IHR5cGVzCisJIHRoYXQg dmFsdWUgbnVtYmVyaW5nIHNhdyB0aHJvdWdoLiAgKi8KKyAgICBjYXNlIE5B TUU6CisgICAgICBmb2xkZWQgPSBQUkVfRVhQUl9OQU1FIChleHByKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgQ09OU1RBTlQ6CisgICAgICBmb2xkZWQg PSBQUkVfRVhQUl9DT05TVEFOVCAoZXhwcik7CisgICAgICBicmVhazsKKyAg ICBjYXNlIFJFRkVSRU5DRToKKyAgICAgIHsKKwl2bl9yZWZlcmVuY2VfdCBy ZWYgPSBQUkVfRVhQUl9SRUZFUkVOQ0UgKGV4cHIpOworCWZvbGRlZCA9IGNy ZWF0ZV9jb21wb25lbnRfcmVmX2J5X3BpZWNlcyAoYmxvY2ssIHJlZiwgMCwg c3RtdHMsCisJCQkJCQkgZG9tc3RtdCwgZmFsc2UpOworICAgICAgfQorICAg ICAgYnJlYWs7CisgICAgY2FzZSBOQVJZOgorICAgICAgeworCXZuX25hcnlf b3BfdCBuYXJ5ID0gUFJFX0VYUFJfTkFSWSAoZXhwcik7CisJc3dpdGNoIChu YXJ5LT5sZW5ndGgpIAorCSAgeworCSAgY2FzZSAyOgorCSAgICB7CisJICAg ICAgcHJlX2V4cHIgb3AxID0gZ2V0X29yX2FsbG9jX2V4cHJfZm9yIChuYXJ5 LT5vcFswXSk7CisJICAgICAgcHJlX2V4cHIgb3AyID0gZ2V0X29yX2FsbG9j X2V4cHJfZm9yIChuYXJ5LT5vcFsxXSk7CisJICAgICAgdHJlZSBnZW5vcDEg PSBmaW5kX29yX2dlbmVyYXRlX2V4cHJlc3Npb24gKGJsb2NrLCBvcDEsCisJ CQkJCQkJIHN0bXRzLCBkb21zdG10KTsKKwkgICAgICB0cmVlIGdlbm9wMiA9 IGZpbmRfb3JfZ2VuZXJhdGVfZXhwcmVzc2lvbiAoYmxvY2ssIG9wMiwKKwkJ CQkJCQkgc3RtdHMsIGRvbXN0bXQpOworCSAgICAgIGlmICghZ2Vub3AxIHx8 ICFnZW5vcDIpCisJCXJldHVybiBOVUxMX1RSRUU7CisJICAgICAgLyogRW5z dXJlIG9wMiBpcyBhIHNpemV0eXBlIGZvciBQT0lOVEVSX1BMVVNfRVhQUi4g IEl0CisJCSBtYXkgYmUgYSBjb25zdGFudCB3aXRoIHRoZSB3cm9uZyB0eXBl LiAgKi8KKwkgICAgICBpZiAobmFyeS0+b3Bjb2RlID09IFBPSU5URVJfUExV U19FWFBSKQorCQlnZW5vcDIgPSBmb2xkX2NvbnZlcnQgKHNpemV0eXBlLCBn ZW5vcDIpOworCSAgICAgIGZvbGRlZCA9IGZvbGRfYnVpbGQyIChuYXJ5LT5v cGNvZGUsIG5hcnktPnR5cGUsCisJCQkJICAgIGdlbm9wMSwgZ2Vub3AyKTsK KwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgMToKKwkgICAgeworCSAg ICAgIHByZV9leHByIG9wMSA9IGdldF9vcl9hbGxvY19leHByX2ZvciAobmFy eS0+b3BbMF0pOworCSAgICAgIHRyZWUgZ2Vub3AxID0gZmluZF9vcl9nZW5l cmF0ZV9leHByZXNzaW9uIChibG9jaywgb3AxLAorCQkJCQkJCSBzdG10cywg ZG9tc3RtdCk7CisJICAgICAgaWYgKCFnZW5vcDEpCisJCXJldHVybiBOVUxM X1RSRUU7CisJICAgICAgZm9sZGVkID0gZm9sZF9idWlsZDEgKG5hcnktPm9w Y29kZSwgbmFyeS0+dHlwZSwKKwkJCQkgICAgZ2Vub3AxKTsKKwkgICAgfQor CSAgICBicmVhazsKKwkgIGRlZmF1bHQ6CisJICAgIHJldHVybiBOVUxMX1RS RUU7CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0 OgorICAgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgICB9CisgIGZvbGRlZCA9 IGZvbGRfY29udmVydCAoZXhwcnR5cGUsIGZvbGRlZCk7CiAgIC8qIEZvcmNl IHRoZSBnZW5lcmF0ZWQgZXhwcmVzc2lvbiB0byBiZSBhIHNlcXVlbmNlIG9m IEdJTVBMRQogICAgICBzdGF0ZW1lbnRzLgogICAgICBXZSBoYXZlIHRvIGNh bGwgdW5zaGFyZV9leHByIGJlY2F1c2UgZm9yY2VfZ2ltcGxlX29wZXJhbmQg bWF5CkBAIC0yNDkzLDE0ICsyNzAyLDE4IEBACiAJewogCSAgdHJlZSBzdG10 ID0gdHNpX3N0bXQgKHRzaSk7CiAJICB0cmVlIGZvcmNlZG5hbWUgPSBHSU1Q TEVfU1RNVF9PUEVSQU5EIChzdG10LCAwKTsKLQkgIHRyZWUgZm9yY2VkZXhw ciA9IEdJTVBMRV9TVE1UX09QRVJBTkQgKHN0bXQsIDEpOwotCSAgdHJlZSB2 YWwgPSB2bl9sb29rdXBfb3JfYWRkIChmb3JjZWRleHByKTsKLQorCSAgcHJl X2V4cHIgbmFtZWV4cHI7CisJICAKIAkgIFZFQ19zYWZlX3B1c2ggKHRyZWUs IGhlYXAsIGluc2VydGVkX2V4cHJzLCBzdG10KTsKLQkgIFZOX0lORk9fR0VU IChmb3JjZWRuYW1lKS0+dmFsbnVtID0gZm9yY2VkbmFtZTsKLQkgIHZuX2Fk ZCAoZm9yY2VkbmFtZSwgdmFsKTsKLQkgIGJpdG1hcF92YWx1ZV9yZXBsYWNl X2luX3NldCAoTkVXX1NFVFMgKGJsb2NrKSwgZm9yY2VkbmFtZSk7Ci0JICBi aXRtYXBfdmFsdWVfcmVwbGFjZV9pbl9zZXQgKEFWQUlMX09VVCAoYmxvY2sp LCBmb3JjZWRuYW1lKTsKKwkgIGlmIChUUkVFX0NPREUgKGZvcmNlZG5hbWUp ID09IFNTQV9OQU1FKQorCSAgICB7CisJICAgICAgVk5fSU5GT19HRVQgKGZv cmNlZG5hbWUpLT52YWxudW0gPSBmb3JjZWRuYW1lOworCSAgICAgIFZOX0lO Rk8gKGZvcmNlZG5hbWUpLT52YWx1ZV9pZCA9IGdldF9uZXh0X3ZhbHVlX2lk ICgpOworCSAgICAgIG5hbWVleHByID0gZ2V0X29yX2FsbG9jX2V4cHJfZm9y X25hbWUgKGZvcmNlZG5hbWUpOworCSAgICAgIGFkZF90b192YWx1ZSAoVk5f SU5GTyAoZm9yY2VkbmFtZSktPnZhbHVlX2lkLCBuYW1lZXhwcik7CisJICAg ICAgYml0bWFwX3ZhbHVlX3JlcGxhY2VfaW5fc2V0IChORVdfU0VUUyAoYmxv Y2spLCBuYW1lZXhwcik7CisJICAgICAgYml0bWFwX3ZhbHVlX3JlcGxhY2Vf aW5fc2V0IChBVkFJTF9PVVQgKGJsb2NrKSwgbmFtZWV4cHIpOworCSAgICB9 CiAJICBtYXJrX3N5bWJvbHNfZm9yX3JlbmFtaW5nIChzdG10KTsKIAl9CiAg ICAgICB0c2kgPSB0c2lfbGFzdCAoc3RtdHMpOwpAQCAtMjUwOSwxNyArMjcy MiwxNyBAQAogCiAgIC8qIEJ1aWxkIGFuZCBpbnNlcnQgdGhlIGFzc2lnbm1l bnQgb2YgdGhlIGVuZCByZXN1bHQgdG8gdGhlIHRlbXBvcmFyeQogICAgICB0 aGF0IHdlIHdpbGwgcmV0dXJuLiAgKi8KLSAgaWYgKCFwcmV0ZW1wIHx8IFRS RUVfVFlQRSAoZXhwcikgIT0gVFJFRV9UWVBFIChwcmV0ZW1wKSkKLSAgICB7 Ci0gICAgICBwcmV0ZW1wID0gY3JlYXRlX3RtcF92YXIgKFRSRUVfVFlQRSAo ZXhwciksICJwcmV0bXAiKTsKKyAgaWYgKCFwcmV0ZW1wIHx8IGV4cHJ0eXBl ICE9IFRSRUVfVFlQRSAocHJldGVtcCkpCisgICAgeworICAgICAgcHJldGVt cCA9IGNyZWF0ZV90bXBfdmFyIChleHBydHlwZSwgInByZXRtcCIpOwogICAg ICAgZ2V0X3Zhcl9hbm4gKHByZXRlbXApOwogICAgIH0KIAogICB0ZW1wID0g cHJldGVtcDsKICAgYWRkX3JlZmVyZW5jZWRfdmFyICh0ZW1wKTsKIAotICBp ZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKGV4cHIpKSA9PSBDT01QTEVYX1RZ UEUKLSAgICAgIHx8IFRSRUVfQ09ERSAoVFJFRV9UWVBFIChleHByKSkgPT0g VkVDVE9SX1RZUEUpCisgIGlmIChUUkVFX0NPREUgKGV4cHJ0eXBlKSA9PSBD T01QTEVYX1RZUEUKKyAgICAgIHx8IFRSRUVfQ09ERSAoZXhwcnR5cGUpID09 IFZFQ1RPUl9UWVBFKQogICAgIERFQ0xfR0lNUExFX1JFR19QICh0ZW1wKSA9 IDE7CiAKICAgbmV3ZXhwciA9IGJ1aWxkX2dpbXBsZV9tb2RpZnlfc3RtdCAo dGVtcCwgbmV3ZXhwcik7CkBAIC0yNTM0LDE4ICsyNzQ3LDE5IEBACiAgIC8q IEFsbCB0aGUgc3ltYm9scyBpbiBORVdFWFBSIHNob3VsZCBiZSBwdXQgaW50 byBTU0EgZm9ybS4gICovCiAgIG1hcmtfc3ltYm9sc19mb3JfcmVuYW1pbmcg KG5ld2V4cHIpOwogCi0gIC8qIEFkZCBhIHZhbHVlIGhhbmRsZSB0byB0aGUg dGVtcG9yYXJ5LgorICAvKiBBZGQgYSB2YWx1ZSBudW1iZXIgdG8gdGhlIHRl bXBvcmFyeS4KICAgICAgVGhlIHZhbHVlIG1heSBhbHJlYWR5IGV4aXN0IGlu IGVpdGhlciBORVdfU0VUUywgb3IgQVZBSUxfT1VULCBiZWNhdXNlCiAgICAg IHdlIGFyZSBjcmVhdGluZyB0aGUgZXhwcmVzc2lvbiBieSBwaWVjZXMsIGFu ZCB0aGlzIHBhcnRpY3VsYXIgcGllY2Ugb2YKICAgICAgdGhlIGV4cHJlc3Np b24gbWF5IGhhdmUgYmVlbiByZXByZXNlbnRlZC4gIFRoZXJlIGlzIG5vIGhh cm0gaW4gcmVwbGFjaW5nCiAgICAgIGhlcmUuICAqLwotICB2ID0gZ2V0X3Zh bHVlX2hhbmRsZSAoZXhwcik7Ci0gIHZuX2FkZCAobmFtZSwgdik7CiAgIFZO X0lORk9fR0VUIChuYW1lKS0+dmFsbnVtID0gbmFtZTsKLSAgZ2V0X29yX2Fs bG9jX2V4cHJlc3Npb25faWQgKG5hbWUpOworICB2YWx1ZV9pZCA9IGdldF9l eHByX3ZhbHVlX2lkIChleHByKTsKKyAgVk5fSU5GTyAobmFtZSktPnZhbHVl X2lkID0gdmFsdWVfaWQ7CisgIG5hbWVleHByID0gZ2V0X29yX2FsbG9jX2V4 cHJfZm9yX25hbWUgKG5hbWUpOworICBhZGRfdG9fdmFsdWUgKHZhbHVlX2lk LCBuYW1lZXhwcik7CiAgIGlmICghaW5fZnJlKQotICAgIGJpdG1hcF92YWx1 ZV9yZXBsYWNlX2luX3NldCAoTkVXX1NFVFMgKGJsb2NrKSwgbmFtZSk7Ci0g IGJpdG1hcF92YWx1ZV9yZXBsYWNlX2luX3NldCAoQVZBSUxfT1VUIChibG9j ayksIG5hbWUpOworICAgIGJpdG1hcF92YWx1ZV9yZXBsYWNlX2luX3NldCAo TkVXX1NFVFMgKGJsb2NrKSwgbmFtZWV4cHIpOworICBiaXRtYXBfdmFsdWVf cmVwbGFjZV9pbl9zZXQgKEFWQUlMX09VVCAoYmxvY2spLCBuYW1lZXhwcik7 CiAKICAgcHJlX3N0YXRzLmluc2VydGlvbnMrKzsKICAgaWYgKGR1bXBfZmls ZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKQEAgLTI1NTgsMzkg KzI3NzIsMzggQEAKICAgcmV0dXJuIG5hbWU7CiB9CiAKKwogLyogSW5zZXJ0 IHRoZSB0by1iZS1tYWRlLWF2YWlsYWJsZSB2YWx1ZXMgb2YgZXhwcmVzc2lv biBFWFBSTlVNIGZvciBlYWNoCiAgICBwcmVkZWNlc3Nvciwgc3RvcmVkIGlu IEFWQUlMLCBpbnRvIHRoZSBwcmVkZWNlc3NvcnMgb2YgQkxPQ0ssIGFuZAot ICAgbWVyZ2UgdGhlIHJlc3VsdCB3aXRoIGEgcGhpIG5vZGUsIGdpdmVuIHRo ZSBzYW1lIHZhbHVlIGhhbmRsZSBhcworICAgbWVyZ2UgdGhlIHJlc3VsdCB3 aXRoIGEgcGhpIG5vZGUsIGdpdmVuIHRoZSBzYW1lIHZhbHVlIG51bWJlciBh cwogICAgTk9ERS4gIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgaW5zZXJ0ZWQg bmV3IHN0dWZmLiAgKi8KIAogc3RhdGljIGJvb2wKIGluc2VydF9pbnRvX3By ZWRzX29mX2Jsb2NrIChiYXNpY19ibG9jayBibG9jaywgdW5zaWduZWQgaW50 IGV4cHJudW0sCi0JCQkgICAgdHJlZSAqYXZhaWwpCi17Ci0gIHRyZWUgZXhw ciA9IGV4cHJlc3Npb25fZm9yX2lkIChleHBybnVtKTsKLSAgdHJlZSB2YWwg PSBnZXRfdmFsdWVfaGFuZGxlIChleHByKTsKKwkJCSAgICBwcmVfZXhwciAq YXZhaWwpCit7CisgIHByZV9leHByIGV4cHIgPSBleHByZXNzaW9uX2Zvcl9p ZCAoZXhwcm51bSk7CisgIHByZV9leHByIG5ld3BoaTsKKyAgdW5zaWduZWQg aW50IHZhbCA9IGdldF9leHByX3ZhbHVlX2lkIChleHByKTsKICAgZWRnZSBw cmVkOwogICBib29sIGluc2VydGlvbnMgPSBmYWxzZTsKICAgYm9vbCBub3Bo aSA9IGZhbHNlOwogICBiYXNpY19ibG9jayBicHJpbWU7Ci0gIHRyZWUgZXBy aW1lOworICBwcmVfZXhwciBlcHJpbWU7CiAgIGVkZ2VfaXRlcmF0b3IgZWk7 Ci0gIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoYXZhaWxbRURHRV9QUkVEIChi bG9jaywgMCktPnNyYy0+aW5kZXhdKTsKKyAgdHJlZSB0eXBlID0gZ2V0X2V4 cHJfdHlwZSAoZXhwcik7CiAgIHRyZWUgdGVtcDsKIAogICBpZiAoZHVtcF9m aWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQogICAgIHsKICAg ICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIkZvdW5kIHBhcnRpYWwgcmVkdW5k YW5jeSBmb3IgZXhwcmVzc2lvbiAiKTsKLSAgICAgIHByaW50X2dlbmVyaWNf ZXhwciAoZHVtcF9maWxlLCBleHByLCAwKTsKLSAgICAgIGZwcmludGYgKGR1 bXBfZmlsZSwgIiAoIik7Ci0gICAgICBwcmludF9nZW5lcmljX2V4cHIgKGR1 bXBfZmlsZSwgdmFsLCAwKTsKLSAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwg IikiKTsKLSAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxuIik7CisgICAg ICBwcmludF9wcmVfZXhwciAoZHVtcF9maWxlLCBleHByKTsKKyAgICAgIGZw cmludGYgKGR1bXBfZmlsZSwgIiAoJTA0ZClcbiIsIHZhbCk7CiAgICAgfQog CiAgIC8qIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgY3JlYXRpbmcgYW4gaW5kdWN0 aW9uIHZhcmlhYmxlLiAgKi8KICAgaWYgKGJsb2NrLT5sb29wX2RlcHRoID4g MCAmJiBFREdFX0NPVU5UIChibG9jay0+cHJlZHMpID09IDIKLSAgICAgICYm IFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChleHByKSkgIT0gdGNjX3Jl ZmVyZW5jZSApCisgICAgICAmJiBleHByLT5raW5kICE9IFJFRkVSRU5DRSkK ICAgICB7CiAgICAgICBib29sIGZpcnN0aW5zaWRlbG9vcCA9IGZhbHNlOwog ICAgICAgYm9vbCBzZWNvbmRpbnNpZGVsb29wID0gZmFsc2U7CkBAIC0yNjE2 LDE1ICsyODI5LDExMCBAQAogICAgICAgYnByaW1lID0gcHJlZC0+c3JjOwog ICAgICAgZXByaW1lID0gYXZhaWxbYnByaW1lLT5pbmRleF07CiAKLSAgICAg IGlmIChjYW5fUFJFX29wZXJhdGlvbiAoZXByaW1lKSkKKyAgICAgIGlmIChl cHJpbWUtPmtpbmQgIT0gTkFNRSAmJiBlcHJpbWUtPmtpbmQgIT0gQ09OU1RB TlQpCiAJewogCSAgYnVpbHRleHByID0gY3JlYXRlX2V4cHJlc3Npb25fYnlf cGllY2VzIChicHJpbWUsCiAJCQkJCQkgICBlcHJpbWUsCi0JCQkJCQkgICBz dG10cywgTlVMTF9UUkVFKTsKKwkJCQkJCSAgIHN0bXRzLCBOVUxMX1RSRUUs CisJCQkJCQkgICB0eXBlKTsKIAkgIGdjY19hc3NlcnQgKCEocHJlZC0+Zmxh Z3MgJiBFREdFX0FCTk9STUFMKSk7CiAJICBic2lfaW5zZXJ0X29uX2VkZ2Ug KHByZWQsIHN0bXRzKTsKLQkgIGF2YWlsW2JwcmltZS0+aW5kZXhdID0gYnVp bHRleHByOworCSAgYXZhaWxbYnByaW1lLT5pbmRleF0gPSBnZXRfb3JfYWxs b2NfZXhwcl9mb3JfbmFtZSAoYnVpbHRleHByKTsKIAkgIGluc2VydGlvbnMg PSB0cnVlOworCX0KKyAgICAgIGVsc2UgaWYgKGVwcmltZS0+a2luZCA9PSBD T05TVEFOVCkgCisJeworCSAgLyogQ29uc3RhbnRzIG1heSBub3QgaGF2ZSB0 aGUgcmlnaHQgdHlwZSwgZm9sZF9jb252ZXJ0CisJICAgICBzaG91bGQgZ2l2 ZSB1cyBiYWNrIGEgY29uc3RhbnQgd2l0aCB0aGUgcmlnaHQgdHlwZS4KKwkg ICovCisJICB0cmVlIGNvbnN0YW50ID0gUFJFX0VYUFJfQ09OU1RBTlQgKGVw cmltZSk7CisJICBpZiAoVFJFRV9UWVBFIChjb25zdGFudCkgIT0gdHlwZSkK KwkgICAgeworCSAgICAgIHRyZWUgYnVpbHRleHByID0gZm9sZF9jb252ZXJ0 ICh0eXBlLCBjb25zdGFudCk7CisJICAgICAgaWYgKGlzX2dpbXBsZV9taW5f aW52YXJpYW50IChidWlsdGV4cHIpKQorCQl7CisJCSAgUFJFX0VYUFJfQ09O U1RBTlQgKGVwcmltZSkgPSBidWlsdGV4cHI7CisJCX0KKwkgICAgICBlbHNl CisJCXsKKwkJICB0cmVlIGZvcmNlZGV4cHIgPSBmb3JjZV9naW1wbGVfb3Bl cmFuZCAoYnVpbHRleHByLAorCQkJCQkJCSAgJnN0bXRzLCB0cnVlLAorCQkJ CQkJCSAgTlVMTCk7CisJCSAgaWYgKGlzX2dpbXBsZV9taW5faW52YXJpYW50 IChmb3JjZWRleHByKSkKKwkJICAgIHsKKwkJICAgICAgUFJFX0VYUFJfQ09O U1RBTlQgKGVwcmltZSkgPSBmb3JjZWRleHByOworCQkgICAgfQorCQkgIGVs c2UKKwkJICAgIHsKKwkJICAgICAgaWYgKGZvcmNlZGV4cHIgIT0gYnVpbHRl eHByKQorCQkJeworCQkJICBWTl9JTkZPX0dFVCAoZm9yY2VkZXhwciktPnZh bG51bSA9IFBSRV9FWFBSX0NPTlNUQU5UIChlcHJpbWUpOworCQkJICBWTl9J TkZPIChmb3JjZWRleHByKS0+dmFsdWVfaWQgPSBnZXRfZXhwcl92YWx1ZV9p ZCAoZXByaW1lKTsKKwkJCX0KKwkJICAgICAgaWYgKHN0bXRzKQorCQkJewor CQkJICB0cmVlX3N0bXRfaXRlcmF0b3IgdHNpOworCQkJICB0c2kgPSB0c2lf c3RhcnQgKHN0bXRzKTsKKwkJCSAgZm9yICg7ICF0c2lfZW5kX3AgKHRzaSk7 IHRzaV9uZXh0ICgmdHNpKSkKKwkJCSAgICB7CisJCQkgICAgICB0cmVlIHN0 bXQgPSB0c2lfc3RtdCAodHNpKTsKKwkJCSAgICAgIHRyZWUgbGhzID0gR0lN UExFX1NUTVRfT1BFUkFORCAoc3RtdCwgMCk7CisJCQkgICAgICBWRUNfc2Fm ZV9wdXNoICh0cmVlLCBoZWFwLCBpbnNlcnRlZF9leHBycywgc3RtdCk7CisJ CQkgICAgICBORUNFU1NBUlkgKGxocykgPSAwOworCQkJICAgIH0KKwkJCSAg YnNpX2luc2VydF9vbl9lZGdlIChwcmVkLCBzdG10cyk7CisJCQl9CisJCSAg ICAgIE5FQ0VTU0FSWSAoZm9yY2VkZXhwcikgPSAwOworCQkgICAgICBhdmFp bFticHJpbWUtPmluZGV4XSA9IGdldF9vcl9hbGxvY19leHByX2Zvcl9uYW1l IChmb3JjZWRleHByKTsKKwkJICAgIH0KKwkJfQorCSAgICB9ICAKKwl9Cisg ICAgICBlbHNlIGlmIChlcHJpbWUtPmtpbmQgPT0gTkFNRSkKKwl7CisJICAv KiBXZSBtYXkgaGF2ZSB0byBkbyBhIGNvbnZlcnNpb24gYmVjYXVzZSBvdXIg dmFsdWUKKwkgICAgIG51bWJlcmluZyBjYW4gbG9vayB0aHJvdWdoIHR5cGVz IGluIGNlcnRhaW4gY2FzZXMsIGJ1dAorCSAgICAgb3VyIElMIHJlcXVpcmVz IGFsbCBvcGVyYW5kcyBvZiBhIHBoaSBub2RlIGhhdmUgdGhlIHNhbWUKKwkg ICAgIHR5cGUuICAqLworCSAgdHJlZSBuYW1lID0gUFJFX0VYUFJfTkFNRSAo ZXByaW1lKTsKKwkgIGlmIChUUkVFX1RZUEUgKG5hbWUpICE9IHR5cGUpCisJ ICAgIHsKKwkgICAgICB0cmVlIGJ1aWx0ZXhwcjsKKwkgICAgICB0cmVlIGZv cmNlZGV4cHI7CisJICAgICAgLyogV2hlbiBlbGltaW5hdGluZyBjYXN0cyB0 aHJvdWdoIHVuaW9ucywgCisJCSB3ZSBzb21ldGltZXMgd2FudCB0byBjb252 ZXJ0IGEgcmVhbCB0byBhbiBpbnRlZ2VyLAorCQkgd2hpY2ggZm9sZF9jb252 ZXJ0IHdpbGwgSUNFIG9uICAqLworCSAgICAgIGlmIChmb2xkX2NvbnZlcnRp YmxlX3AgKHR5cGUsIG5hbWUpKQorCQlidWlsdGV4cHIgPSBmb2xkX2NvbnZl cnQgKHR5cGUsIG5hbWUpOworCSAgICAgIGVsc2UKKwkJYnVpbHRleHByID0g Y29udmVydCAodHlwZSwgbmFtZSk7CisJICAgICAgCisJICAgICAgZm9yY2Vk ZXhwciA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kIChidWlsdGV4cHIsCisJCQkJ CQkgJnN0bXRzLCB0cnVlLAorCQkJCQkJIE5VTEwpOworCisJICAgICAgaWYg KGZvcmNlZGV4cHIgIT0gbmFtZSkKKwkJeworCQkgIFZOX0lORk9fR0VUIChm b3JjZWRleHByKS0+dmFsbnVtID0gVk5fSU5GTyAobmFtZSktPnZhbG51bTsK KwkJICBWTl9JTkZPIChmb3JjZWRleHByKS0+dmFsdWVfaWQgPSBWTl9JTkZP IChuYW1lKS0+dmFsdWVfaWQ7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAo c3RtdHMpCisJCXsKKwkJICB0cmVlX3N0bXRfaXRlcmF0b3IgdHNpOworCQkg IHRzaSA9IHRzaV9zdGFydCAoc3RtdHMpOworCQkgIGZvciAoOyAhdHNpX2Vu ZF9wICh0c2kpOyB0c2lfbmV4dCAoJnRzaSkpCisJCSAgICB7CisJCSAgICAg IHRyZWUgc3RtdCA9IHRzaV9zdG10ICh0c2kpOworCQkgICAgICB0cmVlIGxo cyA9IEdJTVBMRV9TVE1UX09QRVJBTkQgKHN0bXQsIDApOworCQkgICAgICBW RUNfc2FmZV9wdXNoICh0cmVlLCBoZWFwLCBpbnNlcnRlZF9leHBycywgc3Rt dCk7CisJCSAgICAgIE5FQ0VTU0FSWSAobGhzKSA9IDA7CisJCSAgICB9CisJ CSAgYnNpX2luc2VydF9vbl9lZGdlIChwcmVkLCBzdG10cyk7CisJCX0KKwkg ICAgICBORUNFU1NBUlkgKGZvcmNlZGV4cHIpID0gMDsKKwkgICAgICBhdmFp bFticHJpbWUtPmluZGV4XSA9IGdldF9vcl9hbGxvY19leHByX2Zvcl9uYW1l IChmb3JjZWRleHByKTsKKwkgICAgfQogCX0KICAgICB9CiAgIC8qIElmIHdl IGRpZG4ndCB3YW50IGEgcGhpIG5vZGUsIGFuZCB3ZSBtYWRlIGluc2VydGlv bnMsIHdlIHN0aWxsIGhhdmUKQEAgLTI2NDYsNyArMjk1NCw2IEBACiAgIHRl bXAgPSBwcmVwaGl0ZW1wOwogICBhZGRfcmVmZXJlbmNlZF92YXIgKHRlbXAp OwogCi0KICAgaWYgKFRSRUVfQ09ERSAodHlwZSkgPT0gQ09NUExFWF9UWVBF CiAgICAgICB8fCBUUkVFX0NPREUgKHR5cGUpID09IFZFQ1RPUl9UWVBFKQog ICAgIERFQ0xfR0lNUExFX1JFR19QICh0ZW1wKSA9IDE7CkBAIC0yNjU0LDEy ICsyOTYxLDIxIEBACiAKICAgTkVDRVNTQVJZICh0ZW1wKSA9IDA7CiAgIFZO X0lORk9fR0VUIChQSElfUkVTVUxUICh0ZW1wKSktPnZhbG51bSA9IFBISV9S RVNVTFQgKHRlbXApOwotCisgIFZOX0lORk8gKFBISV9SRVNVTFQgKHRlbXAp KS0+dmFsdWVfaWQgPSB2YWw7CiAgIFZFQ19zYWZlX3B1c2ggKHRyZWUsIGhl YXAsIGluc2VydGVkX2V4cHJzLCB0ZW1wKTsKICAgRk9SX0VBQ0hfRURHRSAo cHJlZCwgZWksIGJsb2NrLT5wcmVkcykKLSAgICBhZGRfcGhpX2FyZyAodGVt cCwgYXZhaWxbcHJlZC0+c3JjLT5pbmRleF0sIHByZWQpOwotCi0gIHZuX2Fk ZCAoUEhJX1JFU1VMVCAodGVtcCksIHZhbCk7CisgICAgeworICAgICAgcHJl X2V4cHIgYWUgPSBhdmFpbFtwcmVkLT5zcmMtPmluZGV4XTsKKyAgICAgIGdj Y19hc3NlcnQgKGdldF9leHByX3R5cGUgKGFlKSA9PSB0eXBlCisJCSAgfHwg dXNlbGVzc190eXBlX2NvbnZlcnNpb25fcCAodHlwZSwgZ2V0X2V4cHJfdHlw ZSAoYWUpKSk7CisgICAgICBpZiAoYWUtPmtpbmQgPT0gQ09OU1RBTlQpCisJ YWRkX3BoaV9hcmcgKHRlbXAsIFBSRV9FWFBSX0NPTlNUQU5UIChhZSksIHBy ZWQpOworICAgICAgZWxzZQorCWFkZF9waGlfYXJnICh0ZW1wLCBQUkVfRVhQ Ul9OQU1FIChhdmFpbFtwcmVkLT5zcmMtPmluZGV4XSksIHByZWQpOworICAg IH0KKyAgCisgIG5ld3BoaSA9IGdldF9vcl9hbGxvY19leHByX2Zvcl9uYW1l IChQSElfUkVTVUxUICh0ZW1wKSk7CisgIGFkZF90b192YWx1ZSAodmFsLCBu ZXdwaGkpOwogCiAgIC8qIFRoZSB2YWx1ZSBzaG91bGQgKm5vdCogZXhpc3Qg aW4gUEhJX0dFTiwgb3IgZWxzZSB3ZSB3b3VsZG4ndCBiZSBkb2luZwogICAg ICB0aGlzIGluc2VydGlvbiwgc2luY2Ugd2UgdGVzdCBmb3IgdGhlIGV4aXN0 ZW5jZSBvZiB0aGlzIHZhbHVlIGluIFBISV9HRU4KQEAgLTI2NzUsMTIgKzI5 OTEsMTEgQEAKICAgICAgQVZBSUxfT1VULCBhbmQgd291bGQgaGF2ZSBiZWVu IHNraXBwZWQgZHVlIHRvIHRoZSBmdWxsIHJlZHVuZGFuY3kgY2hlY2suCiAg ICovCiAKLSAgYml0bWFwX2luc2VydF9pbnRvX3NldCAoUEhJX0dFTiAoYmxv Y2spLAotCQkJICBQSElfUkVTVUxUICh0ZW1wKSk7CisgIGJpdG1hcF9pbnNl cnRfaW50b19zZXQgKFBISV9HRU4gKGJsb2NrKSwgbmV3cGhpKTsKICAgYml0 bWFwX3ZhbHVlX3JlcGxhY2VfaW5fc2V0IChBVkFJTF9PVVQgKGJsb2NrKSwK LQkJCSAgICAgICBQSElfUkVTVUxUICh0ZW1wKSk7CisJCQkgICAgICAgbmV3 cGhpKTsKICAgYml0bWFwX2luc2VydF9pbnRvX3NldCAoTkVXX1NFVFMgKGJs b2NrKSwKLQkJCSAgUEhJX1JFU1VMVCAodGVtcCkpOworCQkJICBuZXdwaGkp OwogCiAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVU QUlMUykpCiAgICAgewpAQCAtMjcxNiwyNiArMzAzMSwyNiBAQAogZG9fcmVn dWxhcl9pbnNlcnRpb24gKGJhc2ljX2Jsb2NrIGJsb2NrLCBiYXNpY19ibG9j ayBkb20pCiB7CiAgIGJvb2wgbmV3X3N0dWZmID0gZmFsc2U7Ci0gIFZFQyAo dHJlZSwgaGVhcCkgKmV4cHJzID0gc29ydGVkX2FycmF5X2Zyb21fYml0bWFw X3NldCAoQU5USUNfSU4gKGJsb2NrKSk7Ci0gIHRyZWUgZXhwcjsKLSAgaW50 IGk7Ci0KLSAgZm9yIChpID0gMDsgVkVDX2l0ZXJhdGUgKHRyZWUsIGV4cHJz LCBpLCBleHByKTsgaSsrKQotICAgIHsKLSAgICAgIGlmIChjYW5fUFJFX29w ZXJhdGlvbiAoZXhwcikgJiYgIUFHR1JFR0FURV9UWVBFX1AgKFRSRUVfVFlQ RSAoZXhwcikpKQotCXsKLQkgIHRyZWUgKmF2YWlsOwotCSAgdHJlZSB2YWw7 CisgIFZFQyAocHJlX2V4cHIsIGhlYXApICpleHBycyA9IHNvcnRlZF9hcnJh eV9mcm9tX2JpdG1hcF9zZXQgKEFOVElDX0lOIChibG9jaykpOworICBwcmVf ZXhwciBleHByOworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBWRUNfaXRl cmF0ZSAocHJlX2V4cHIsIGV4cHJzLCBpLCBleHByKTsgaSsrKQorICAgIHsK KyAgICAgIGlmIChleHByLT5raW5kICE9IE5BTUUpCisJeworCSAgcHJlX2V4 cHIgKmF2YWlsOworCSAgdW5zaWduZWQgaW50IHZhbDsKIAkgIGJvb2wgYnlf c29tZSA9IGZhbHNlOwogCSAgYm9vbCBjYW50X2luc2VydCA9IGZhbHNlOwog CSAgYm9vbCBhbGxfc2FtZSA9IHRydWU7Ci0JICB0cmVlIGZpcnN0X3MgPSBO VUxMOworCSAgcHJlX2V4cHIgZmlyc3RfcyA9IE5VTEw7CiAJICBlZGdlIHBy ZWQ7CiAJICBiYXNpY19ibG9jayBicHJpbWU7Ci0JICB0cmVlIGVwcmltZSA9 IE5VTExfVFJFRTsKKwkgIHByZV9leHByIGVwcmltZSA9IE5VTEw7CiAJICBl ZGdlX2l0ZXJhdG9yIGVpOwogCi0JICB2YWwgPSBnZXRfdmFsdWVfaGFuZGxl IChleHByKTsKKwkgIHZhbCA9IGdldF9leHByX3ZhbHVlX2lkIChleHByKTsK IAkgIGlmIChiaXRtYXBfc2V0X2NvbnRhaW5zX3ZhbHVlIChQSElfR0VOIChi bG9jayksIHZhbCkpCiAJICAgIGNvbnRpbnVlOwogCSAgaWYgKGJpdG1hcF9z ZXRfY29udGFpbnNfdmFsdWUgKEFWQUlMX09VVCAoZG9tKSwgdmFsKSkKQEAg LTI3NDUsMTEgKzMwNjAsMTEgQEAKIAkgICAgICBjb250aW51ZTsKIAkgICAg fQogCi0JICBhdmFpbCA9IFhDTkVXVkVDICh0cmVlLCBsYXN0X2Jhc2ljX2Js b2NrKTsKKwkgIGF2YWlsID0gWENORVdWRUMgKHByZV9leHByLCBsYXN0X2Jh c2ljX2Jsb2NrKTsKIAkgIEZPUl9FQUNIX0VER0UgKHByZWQsIGVpLCBibG9j ay0+cHJlZHMpCiAJICAgIHsKLQkgICAgICB0cmVlIHZwcmltZTsKLQkgICAg ICB0cmVlIGVkb3VibGVwcmltZTsKKwkgICAgICB1bnNpZ25lZCBpbnQgdnBy aW1lOworCSAgICAgIHByZV9leHByIGVkb3VibGVwcmltZTsKIAogCSAgICAg IC8qIFRoaXMgY2FuIGhhcHBlbiBpbiB0aGUgdmVyeSB3ZWlyZCBjYXNlCiAJ CSB0aGF0IG91ciBmYWtlIGluZmluaXRlIGxvb3AgZWRnZXMgaGF2ZSBjYXVz ZWQgYQpAQCAtMjc3OSw4ICszMDk0LDcgQEAKIAkJfQogCiAJICAgICAgZXBy aW1lID0gZnVsbHlfY29uc3RhbnRfZXhwcmVzc2lvbiAoZXByaW1lKTsKLQkg ICAgICB2cHJpbWUgPSBnZXRfdmFsdWVfaGFuZGxlIChlcHJpbWUpOwotCSAg ICAgIGdjY19hc3NlcnQgKHZwcmltZSk7CisJICAgICAgdnByaW1lID0gZ2V0 X2V4cHJfdmFsdWVfaWQgKGVwcmltZSk7CiAJICAgICAgZWRvdWJsZXByaW1l ID0gYml0bWFwX2ZpbmRfbGVhZGVyIChBVkFJTF9PVVQgKGJwcmltZSksCiAJ CQkJCQkgdnByaW1lLCBOVUxMX1RSRUUpOwogCSAgICAgIGlmIChlZG91Ymxl cHJpbWUgPT0gTlVMTCkKQEAgLTI3OTQsOCArMzEwOCw3IEBACiAJCSAgYnlf c29tZSA9IHRydWU7CiAJCSAgaWYgKGZpcnN0X3MgPT0gTlVMTCkKIAkJICAg IGZpcnN0X3MgPSBlZG91YmxlcHJpbWU7Ci0JCSAgZWxzZSBpZiAoIW9wZXJh bmRfZXF1YWxfcCAoZmlyc3RfcywgZWRvdWJsZXByaW1lLAotCQkJCQkgICAg IDApKQorCQkgIGVsc2UgaWYgKCFwcmVfZXhwcl9lcSAoZmlyc3RfcywgZWRv dWJsZXByaW1lKSkKIAkJICAgIGFsbF9zYW1lID0gZmFsc2U7CiAJCX0KIAkg ICAgfQpAQCAtMjgxMywxOSArMzEyNiwyNiBAQAogCSAgICAgYW4gaW52YXJp YW50LCB0aGVuIHRoZSBQSEkgaGFzIHRoZSBzYW1lIHZhbHVlIG9uIGFsbAog CSAgICAgZWRnZXMuICBOb3RlIHRoaXMuICAqLwogCSAgZWxzZSBpZiAoIWNh bnRfaW5zZXJ0ICYmIGFsbF9zYW1lICYmIGVwcmltZQotCQkgICAmJiBpc19n aW1wbGVfbWluX2ludmFyaWFudCAoZXByaW1lKQotCQkgICAmJiAhaXNfZ2lt cGxlX21pbl9pbnZhcmlhbnQgKHZhbCkpCisJCSAgICYmIGVwcmltZS0+a2lu ZCA9PSBDT05TVEFOVAorCQkgICAmJiAhdmFsdWVfaWRfY29uc3RhbnRfcCAo dmFsKSkKIAkgICAgewogCSAgICAgIHVuc2lnbmVkIGludCBqOwogCSAgICAg IGJpdG1hcF9pdGVyYXRvciBiaTsKLQotCSAgICAgIGJpdG1hcF9zZXRfdCBl eHByc2V0ID0gVkFMVUVfSEFORExFX0VYUFJfU0VUICh2YWwpOworCSAgICAg IGJpdG1hcF9zZXRfdCBleHByc2V0ID0gVkVDX2luZGV4IChiaXRtYXBfc2V0 X3QsCisJCQkJCQl2YWx1ZV9leHByZXNzaW9ucywgdmFsKTsKKworCSAgICAg IHVuc2lnbmVkIGludCBuZXdfdmFsID0gZ2V0X2V4cHJfdmFsdWVfaWQgKGVw cmltZSk7CiAJICAgICAgRk9SX0VBQ0hfRVhQUl9JRF9JTl9TRVQgKGV4cHJz ZXQsIGosIGJpKQogCQl7Ci0JCSAgdHJlZSBleHByID0gZXhwcmVzc2lvbl9m b3JfaWQgKGopOwotCQkgIGlmIChUUkVFX0NPREUgKGV4cHIpID09IFNTQV9O QU1FKQotCQkgICAgewotCQkgICAgICB2bl9hZGQgKGV4cHIsIGVwcmltZSk7 CisJCSAgcHJlX2V4cHIgZXhwciA9IGV4cHJlc3Npb25fZm9yX2lkIChqKTsK KworCQkgIGlmIChleHByLT5raW5kID09IE5BTUUpCisJCSAgICB7CisJCSAg ICAgIHZuX3NzYV9hdXhfdCBpbmZvID0gVk5fSU5GTyAoUFJFX0VYUFJfTkFN RSAoZXhwcikpOworCQkgICAgICAvKiBKdXN0IHJlc2V0IHRoZSB2YWx1ZSBp ZCBhbmQgdmFsbnVtIHNvIGl0IGlzCisJCQkgdGhlIHNhbWUgYXMgdGhlIGNv bnN0YW50IHdlIGhhdmUgZGlzY292ZXJlZC4gICovCisJCSAgICAgIGluZm8t PnZhbG51bSA9IFBSRV9FWFBSX0NPTlNUQU5UIChlcHJpbWUpOworCQkgICAg ICBpbmZvLT52YWx1ZV9pZCA9IG5ld192YWw7CiAJCSAgICAgIHByZV9zdGF0 cy5jb25zdGlmaWVkKys7CiAJCSAgICB9CiAJCX0KQEAgLTI4MzQsNyArMzE1 NCw3IEBACiAJfQogICAgIH0KIAotICBWRUNfZnJlZSAodHJlZSwgaGVhcCwg ZXhwcnMpOworICBWRUNfZnJlZSAocHJlX2V4cHIsIGhlYXAsIGV4cHJzKTsK ICAgcmV0dXJuIG5ld19zdHVmZjsKIH0KIApAQCAtMjg1MCwzNCArMzE3MCwz NCBAQAogZG9fcGFydGlhbF9wYXJ0aWFsX2luc2VydGlvbiAoYmFzaWNfYmxv Y2sgYmxvY2ssIGJhc2ljX2Jsb2NrIGRvbSkKIHsKICAgYm9vbCBuZXdfc3R1 ZmYgPSBmYWxzZTsKLSAgVkVDICh0cmVlLCBoZWFwKSAqZXhwcnMgPSBzb3J0 ZWRfYXJyYXlfZnJvbV9iaXRtYXBfc2V0IChQQV9JTiAoYmxvY2spKTsKLSAg dHJlZSBleHByOwotICBpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBWRUNfaXRl cmF0ZSAodHJlZSwgZXhwcnMsIGksIGV4cHIpOyBpKyspCi0gICAgewotICAg ICAgaWYgKGNhbl9QUkVfb3BlcmF0aW9uIChleHByKSAmJiAhQUdHUkVHQVRF X1RZUEVfUCAoVFJFRV9UWVBFIChleHByKSkpCi0JewotCSAgdHJlZSAqYXZh aWw7Ci0JICB0cmVlIHZhbDsKKyAgVkVDIChwcmVfZXhwciwgaGVhcCkgKmV4 cHJzID0gc29ydGVkX2FycmF5X2Zyb21fYml0bWFwX3NldCAoUEFfSU4gKGJs b2NrKSk7CisgIHByZV9leHByIGV4cHI7CisgIGludCBpOworCisgIGZvciAo aSA9IDA7IFZFQ19pdGVyYXRlIChwcmVfZXhwciwgZXhwcnMsIGksIGV4cHIp OyBpKyspCisgICAgeworICAgICAgaWYgKGV4cHItPmtpbmQgIT0gTkFNRSkK Kwl7CisJICBwcmVfZXhwciAqYXZhaWw7CisJICB1bnNpZ25lZCBpbnQgdmFs OwogCSAgYm9vbCBieV9hbGwgPSB0cnVlOwogCSAgYm9vbCBjYW50X2luc2Vy dCA9IGZhbHNlOwogCSAgZWRnZSBwcmVkOwogCSAgYmFzaWNfYmxvY2sgYnBy aW1lOwotCSAgdHJlZSBlcHJpbWUgPSBOVUxMX1RSRUU7CisJICBwcmVfZXhw ciBlcHJpbWUgPSBOVUxMOwogCSAgZWRnZV9pdGVyYXRvciBlaTsKIAotCSAg dmFsID0gZ2V0X3ZhbHVlX2hhbmRsZSAoZXhwcik7CisJICB2YWwgPSBnZXRf ZXhwcl92YWx1ZV9pZCAoZXhwcik7CiAJICBpZiAoYml0bWFwX3NldF9jb250 YWluc192YWx1ZSAoUEhJX0dFTiAoYmxvY2spLCB2YWwpKQogCSAgICBjb250 aW51ZTsKIAkgIGlmIChiaXRtYXBfc2V0X2NvbnRhaW5zX3ZhbHVlIChBVkFJ TF9PVVQgKGRvbSksIHZhbCkpCiAJICAgIGNvbnRpbnVlOwogCi0JICBhdmFp bCA9IFhDTkVXVkVDICh0cmVlLCBsYXN0X2Jhc2ljX2Jsb2NrKTsKKwkgIGF2 YWlsID0gWENORVdWRUMgKHByZV9leHByLCBsYXN0X2Jhc2ljX2Jsb2NrKTsK IAkgIEZPUl9FQUNIX0VER0UgKHByZWQsIGVpLCBibG9jay0+cHJlZHMpCiAJ ICAgIHsKLQkgICAgICB0cmVlIHZwcmltZTsKLQkgICAgICB0cmVlIGVkb3Vi bGVwcmltZTsKKwkgICAgICB1bnNpZ25lZCBpbnQgdnByaW1lOworCSAgICAg IHByZV9leHByIGVkb3VibGVwcmltZTsKIAogCSAgICAgIC8qIFRoaXMgY2Fu IGhhcHBlbiBpbiB0aGUgdmVyeSB3ZWlyZCBjYXNlCiAJCSB0aGF0IG91ciBm YWtlIGluZmluaXRlIGxvb3AgZWRnZXMgaGF2ZSBjYXVzZWQgYQpAQCAtMjkw OCw4ICszMjI4LDcgQEAKIAkJfQogCiAJICAgICAgZXByaW1lID0gZnVsbHlf Y29uc3RhbnRfZXhwcmVzc2lvbiAoZXByaW1lKTsKLQkgICAgICB2cHJpbWUg PSBnZXRfdmFsdWVfaGFuZGxlIChlcHJpbWUpOwotCSAgICAgIGdjY19hc3Nl cnQgKHZwcmltZSk7CisJICAgICAgdnByaW1lID0gZ2V0X2V4cHJfdmFsdWVf aWQgKGVwcmltZSk7CiAJICAgICAgZWRvdWJsZXByaW1lID0gYml0bWFwX2Zp bmRfbGVhZGVyIChBVkFJTF9PVVQgKGJwcmltZSksCiAJCQkJCQkgdnByaW1l LCBOVUxMX1RSRUUpOwogCSAgICAgIGlmIChlZG91YmxlcHJpbWUgPT0gTlVM TCkKQEAgLTI5MjYsNyArMzI0NSw3IEBACiAJICAgICBhbHJlYWR5IGV4aXN0 aW5nIGFsb25nIGV2ZXJ5IHByZWRlY2Vzc29yLCBhbmQKIAkgICAgIGl0J3Mg ZGVmaW5lZCBieSBzb21lIHByZWRlY2Vzc29yLCBpdCBpcwogCSAgICAgcGFy dGlhbGx5IHJlZHVuZGFudC4gICovCi0JICBpZiAoIWNhbnRfaW5zZXJ0ICYm IGJ5X2FsbCkKKwkgIGlmICghY2FudF9pbnNlcnQgJiYgYnlfYWxsICYmIGRi Z19jbnQgKHRyZWVwcmVfaW5zZXJ0KSkKIAkgICAgewogCSAgICAgIHByZV9z dGF0cy5wYV9pbnNlcnQrKzsKIAkgICAgICBpZiAoaW5zZXJ0X2ludG9fcHJl ZHNfb2ZfYmxvY2sgKGJsb2NrLCBnZXRfZXhwcmVzc2lvbl9pZCAoZXhwciks CkBAIC0yOTM3LDcgKzMyNTYsNyBAQAogCX0KICAgICB9CiAKLSAgVkVDX2Zy ZWUgKHRyZWUsIGhlYXAsIGV4cHJzKTsKKyAgVkVDX2ZyZWUgKHByZV9leHBy LCBoZWFwLCBleHBycyk7CiAgIHJldHVybiBuZXdfc3R1ZmY7CiB9CiAKQEAg LTI5NjQsNyArMzI4Myw3IEBACiAJCSB0byByZXBsYWNlIGl0IHdpdGguICAq LwogCSAgICAgIEZPUl9FQUNIX0VYUFJfSURfSU5fU0VUIChuZXdzZXQsIGks IGJpKQogCQl7Ci0JCSAgdHJlZSBleHByID0gZXhwcmVzc2lvbl9mb3JfaWQg KGkpOworCQkgIHByZV9leHByIGV4cHIgPSBleHByZXNzaW9uX2Zvcl9pZCAo aSk7CiAJCSAgYml0bWFwX3ZhbHVlX3JlcGxhY2VfaW5fc2V0IChORVdfU0VU UyAoYmxvY2spLCBleHByKTsKIAkJICBiaXRtYXBfdmFsdWVfcmVwbGFjZV9p bl9zZXQgKEFWQUlMX09VVCAoYmxvY2spLCBleHByKTsKIAkJfQpAQCAtMzAx OSwxNjIgKzMzMzgsMTYgQEAKIHsKICAgaWYgKCFpbl9mcmUpCiAgICAgewor ICAgICAgcHJlX2V4cHIgcmVzdWx0OwogICAgICAgaWYgKFRSRUVfQ09ERSAo b3ApID09IFNTQV9OQU1FICYmIHNzYV91bmRlZmluZWRfdmFsdWVfcCAob3Ap KQogCXJldHVybjsKLSAgICAgIGJpdG1hcF92YWx1ZV9pbnNlcnRfaW50b19z ZXQgKEVYUF9HRU4gKGJsb2NrKSwgb3ApOworICAgICAgcmVzdWx0ID0gZ2V0 X29yX2FsbG9jX2V4cHJfZm9yX25hbWUgKG9wKTsKKyAgICAgIGJpdG1hcF92 YWx1ZV9pbnNlcnRfaW50b19zZXQgKEVYUF9HRU4gKGJsb2NrKSwgcmVzdWx0 KTsKICAgICAgIGlmIChUUkVFX0NPREUgKG9wKSAhPSBTU0FfTkFNRQogCSAg fHwgVFJFRV9DT0RFIChTU0FfTkFNRV9ERUZfU1RNVCAob3ApKSAhPSBQSElf Tk9ERSkKLQliaXRtYXBfdmFsdWVfaW5zZXJ0X2ludG9fc2V0IChtYXhpbWFs X3NldCwgb3ApOwotICAgIH0KLX0KLQotCi0vKiBHaXZlbiBhbiBTU0EgdmFy aWFibGUgVkFSIGFuZCBhbiBleHByZXNzaW9uIEVYUFIsIGNvbXB1dGUgdGhl IHZhbHVlCi0gICBudW1iZXIgZm9yIEVYUFIgYW5kIGNyZWF0ZSBhIHZhbHVl IGhhbmRsZSAoVkFMKSBmb3IgaXQuICBJZiBWQVIgYW5kCi0gICBFWFBSIGFy ZSBub3QgdGhlIHNhbWUsIGFzc29jaWF0ZSBWQUwgd2l0aCBWQVIuICBGaW5h bGx5LCBhZGQgVkFSIHRvCi0gICBTMSBhbmQgaXRzIHZhbHVlIGhhbmRsZSB0 byBTMiwgYW5kIHRvIHRoZSBtYXhpbWFsIHNldCBpZgotICAgQUREX1RPX01B WElNQUwgaXMgdHJ1ZS4KLQotICAgVlVTRVMgcmVwcmVzZW50IHRoZSB2aXJ0 dWFsIHVzZSBvcGVyYW5kcyBhc3NvY2lhdGVkIHdpdGggRVhQUiAoaWYKLSAg IGFueSkuICAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFkZF90b19zZXRz ICh0cmVlIHZhciwgdHJlZSBleHByLCBWRUModHJlZSwgZ2MpICp2dXNlcywg Yml0bWFwX3NldF90IHMxLAotCSAgICAgYml0bWFwX3NldF90IHMyKQotewot ICB0cmVlIHZhbDsKLSAgdmFsID0gdm5fbG9va3VwX29yX2FkZF93aXRoX3Z1 c2VzIChleHByLCB2dXNlcyk7Ci0KLSAgLyogVkFSIGFuZCBFWFBSIG1heSBi ZSB0aGUgc2FtZSB3aGVuIHByb2Nlc3Npbmcgc3RhdGVtZW50cyBmb3Igd2hp Y2gKLSAgICAgd2UgYXJlIG5vdCBjb21wdXRpbmcgdmFsdWUgbnVtYmVycyAo ZS5nLiwgbm9uLWFzc2lnbm1lbnRzLCBvcgotICAgICBzdGF0ZW1lbnRzIHRo YXQgbWFrZSBhbGlhc2VkIHN0b3JlcykuICBJbiB0aG9zZSBjYXNlcywgd2Ug YXJlCi0gICAgIG9ubHkgaW50ZXJlc3RlZCBpbiBtYWtpbmcgVkFSIGF2YWls YWJsZSBhcyBpdHMgb3duIHZhbHVlLiAgKi8KLSAgaWYgKHZhciAhPSBleHBy KQotICAgIHZuX2FkZCAodmFyLCB2YWwpOwotCi0gIGlmIChzMSkKLSAgICBi aXRtYXBfaW5zZXJ0X2ludG9fc2V0IChzMSwgdmFyKTsKLQotICBiaXRtYXBf dmFsdWVfaW5zZXJ0X2ludG9fc2V0IChzMiwgdmFyKTsKLX0KLQotLyogRmlu ZCBleGlzdGluZyB2YWx1ZSBleHByZXNzaW9uIHRoYXQgaXMgdGhlIHNhbWUg YXMgVCwKLSAgIGFuZCByZXR1cm4gaXQgaWYgaXQgZXhpc3RzLiAgKi8KLQot c3RhdGljIGlubGluZSB0cmVlCi1maW5kX2V4aXN0aW5nX3ZhbHVlX2V4cHIg KHRyZWUgdCwgVkVDICh0cmVlLCBnYykgKnZ1c2VzKQotewotICBiaXRtYXBf aXRlcmF0b3IgYmk7Ci0gIHVuc2lnbmVkIGludCBiaWk7Ci0gIHRyZWUgdmg7 Ci0gIGJpdG1hcF9zZXRfdCBleHByc2V0OwotCi0gIGlmIChSRUZFUkVOQ0Vf Q0xBU1NfUCAodCkgfHwgVFJFRV9DT0RFICh0KSA9PSBDQUxMX0VYUFIgfHwg REVDTF9QICh0KSkKLSAgICB2aCA9IHZuX2xvb2t1cF93aXRoX3Z1c2VzICh0 LCB2dXNlcyk7Ci0gIGVsc2UKLSAgICB2aCA9IHZuX2xvb2t1cCAodCk7Ci0K LSAgaWYgKCF2aCkKLSAgICByZXR1cm4gTlVMTDsKLSAgZXhwcnNldCA9IFZB TFVFX0hBTkRMRV9FWFBSX1NFVCAodmgpOwotICBGT1JfRUFDSF9FWFBSX0lE X0lOX1NFVCAoZXhwcnNldCwgYmlpLCBiaSkKLSAgICB7Ci0gICAgICB0cmVl IGVmaSA9IGV4cHJlc3Npb25fZm9yX2lkIChiaWkpOwotICAgICAgaWYgKGV4 cHJlc3Npb25zX2VxdWFsX3AgKHQsIGVmaSkpCi0JcmV0dXJuIGVmaTsKLSAg ICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi0vKiBHaXZlbiBhIHVuYXJ5IG9y IGJpbmFyeSBleHByZXNzaW9uIEVYUFIsIGNyZWF0ZSBhbmQgcmV0dXJuIGEg bmV3Ci0gICBleHByZXNzaW9uIHdpdGggdGhlIHNhbWUgc3RydWN0dXJlIGFz IEVYUFIgYnV0IHdpdGggaXRzIG9wZXJhbmRzCi0gICByZXBsYWNlZCB3aXRo IHRoZSB2YWx1ZSBoYW5kbGVzIG9mIGVhY2ggb2YgdGhlIG9wZXJhbmRzIG9m IEVYUFIuCi0KLSAgIFZVU0VTIHJlcHJlc2VudCB0aGUgdmlydHVhbCB1c2Ug b3BlcmFuZHMgYXNzb2NpYXRlZCB3aXRoIEVYUFIgKGlmCi0gICBhbnkpLiAg SW5zZXJ0IEVYUFIncyBvcGVyYW5kcyBpbnRvIHRoZSBFWFBfR0VOIHNldCBm b3IgQkxPQ0suCi0KLSAgIElmIENIRUNLX0FWQUlMIGlzIHRydWUsIGNoZWNr cyBhdmFpbGFiaWxpdHkgb2YgZWFjaCBvcGVyYW5kIGluCi0gICBCTE9DS3Mg QVZBSUxfT1VUIHNldC4gICovCi0KLXN0YXRpYyBpbmxpbmUgdHJlZQotY3Jl YXRlX3ZhbHVlX2V4cHJfZnJvbSAodHJlZSBleHByLCBiYXNpY19ibG9jayBi bG9jaywgVkVDICh0cmVlLCBnYykgKnZ1c2VzLAotCQkJYm9vbCBjaGVja19h dmFpbCkKLXsKLSAgaW50IGk7Ci0gIGVudW0gdHJlZV9jb2RlIGNvZGUgPSBU UkVFX0NPREUgKGV4cHIpOwotICB0cmVlIHZleHByOwotICBhbGxvY19wb29s IHBvb2wgPSBOVUxMOwotICB0cmVlIGVmaTsKLQotICBnY2NfYXNzZXJ0IChU UkVFX0NPREVfQ0xBU1MgKGNvZGUpID09IHRjY191bmFyeQotCSAgICAgIHx8 IFRSRUVfQ09ERV9DTEFTUyAoY29kZSkgPT0gdGNjX2JpbmFyeQotCSAgICAg IHx8IFRSRUVfQ09ERV9DTEFTUyAoY29kZSkgPT0gdGNjX2NvbXBhcmlzb24K LQkgICAgICB8fCBUUkVFX0NPREVfQ0xBU1MgKGNvZGUpID09IHRjY19yZWZl cmVuY2UKLQkgICAgICB8fCBUUkVFX0NPREVfQ0xBU1MgKGNvZGUpID09IHRj Y19leHByZXNzaW9uCi0JICAgICAgfHwgVFJFRV9DT0RFX0NMQVNTIChjb2Rl KSA9PSB0Y2NfdmxfZXhwCi0JICAgICAgfHwgVFJFRV9DT0RFX0NMQVNTIChj b2RlKSA9PSB0Y2NfZXhjZXB0aW9uYWwKLQkgICAgICB8fCBUUkVFX0NPREVf Q0xBU1MgKGNvZGUpID09IHRjY19kZWNsYXJhdGlvbik7Ci0KLSAgaWYgKFRS RUVfQ09ERV9DTEFTUyAoY29kZSkgPT0gdGNjX3VuYXJ5KQotICAgIHBvb2wg PSB1bmFyeV9ub2RlX3Bvb2w7Ci0gIGVsc2UgaWYgKFRSRUVfQ09ERV9DTEFT UyAoY29kZSkgPT0gdGNjX3JlZmVyZW5jZSkKLSAgICBwb29sID0gcmVmZXJl bmNlX25vZGVfcG9vbDsKLSAgZWxzZSBpZiAoVFJFRV9DT0RFX0NMQVNTIChj b2RlKSA9PSB0Y2NfYmluYXJ5KQotICAgIHBvb2wgPSBiaW5hcnlfbm9kZV9w b29sOwotICBlbHNlIGlmIChUUkVFX0NPREVfQ0xBU1MgKGNvZGUpID09IHRj Y19jb21wYXJpc29uKQotICAgIHBvb2wgPSBjb21wYXJpc29uX25vZGVfcG9v bDsKLSAgZWxzZQotICAgIGdjY19hc3NlcnQgKGNvZGUgPT0gQ0FMTF9FWFBS KTsKLQotICBpZiAoY29kZSA9PSBDQUxMX0VYUFIpCi0gICAgdmV4cHIgPSB0 ZW1wX2NvcHlfY2FsbF9leHByIChleHByKTsKLSAgZWxzZQotICAgIHsKLSAg ICAgIHZleHByID0gKHRyZWUpIHBvb2xfYWxsb2MgKHBvb2wpOwotICAgICAg bWVtY3B5ICh2ZXhwciwgZXhwciwgdHJlZV9zaXplIChleHByKSk7Ci0gICAg fQotCi0gIGZvciAoaSA9IDA7IGkgPCBUUkVFX09QRVJBTkRfTEVOR1RIIChl eHByKTsgaSsrKQotICAgIHsKLSAgICAgIHRyZWUgdmFsID0gTlVMTF9UUkVF OwotICAgICAgdHJlZSBvcDsKLQotICAgICAgb3AgPSBUUkVFX09QRVJBTkQg KGV4cHIsIGkpOwotICAgICAgaWYgKG9wID09IE5VTExfVFJFRSkKLQljb250 aW51ZTsKLQotICAgICAgLyogUmVjdXJzaXZlbHkgdmFsdWUtbnVtYmVyaXpl IHJlZmVyZW5jZSBvcHMgYW5kIHRyZWUgbGlzdHMuICAqLwotICAgICAgaWYg KFJFRkVSRU5DRV9DTEFTU19QIChvcCkpCi0JewotCSAgdHJlZSB0ZW1wb3Ag PSBjcmVhdGVfdmFsdWVfZXhwcl9mcm9tIChvcCwgYmxvY2ssIHZ1c2VzLCBj aGVja19hdmFpbCk7Ci0JICBvcCA9IHRlbXBvcCA/IHRlbXBvcCA6IG9wOwot CSAgdmFsID0gdm5fbG9va3VwX29yX2FkZF93aXRoX3Z1c2VzIChvcCwgdnVz ZXMpOwotCSAgc2V0X2V4cHJlc3Npb25fdnVzZXMgKG9wLCB2dXNlcyk7Ci0J fQotICAgICAgZWxzZQotCXsKLQkgIHZhbCA9IHZuX2xvb2t1cF9vcl9hZGQg KG9wKTsKLQl9Ci0gICAgICBpZiAoVFJFRV9DT0RFIChvcCkgIT0gVFJFRV9M SVNUKQotCWFkZF90b19leHBfZ2VuIChibG9jaywgb3ApOwotCi0gICAgICBp ZiAoVFJFRV9DT0RFICh2YWwpID09IFZBTFVFX0hBTkRMRSkKLQlUUkVFX1RZ UEUgKHZhbCkgPSBUUkVFX1RZUEUgKFRSRUVfT1BFUkFORCAodmV4cHIsIGkp KTsKLQotICAgICAgVFJFRV9PUEVSQU5EICh2ZXhwciwgaSkgPSB2YWw7Ci0K LSAgICAgIGlmIChjaGVja19hdmFpbAotCSAgJiYgVFJFRV9DT0RFICh2YWwp ID09IFZBTFVFX0hBTkRMRQotCSAgJiYgIWJpdG1hcF9zZXRfY29udGFpbnNf dmFsdWUgKEFWQUlMX09VVCAoYmxvY2spLCB2YWwpKQotCXJldHVybiBOVUxM X1RSRUU7Ci0gICAgfQotICBlZmkgPSBmaW5kX2V4aXN0aW5nX3ZhbHVlX2V4 cHIgKHZleHByLCB2dXNlcyk7Ci0gIGlmIChlZmkpCi0gICAgcmV0dXJuIGVm aTsKLSAgZ2V0X29yX2FsbG9jX2V4cHJlc3Npb25faWQgKHZleHByKTsKLSAg cmV0dXJuIHZleHByOwotfQotCisJYml0bWFwX3ZhbHVlX2luc2VydF9pbnRv X3NldCAobWF4aW1hbF9zZXQsIHJlc3VsdCk7CisgICAgfQorfQogCiAvKiBG b3IgZWFjaCByZWFsIHN0b3JlIG9wZXJhdGlvbiBvZiB0aGUgZm9ybQogICAg KmEgPSA8dmFsdWU+IHRoYXQgd2Ugc2VlLCBjcmVhdGUgYSBjb3JyZXNwb25k aW5nIGZha2Ugc3RvcmUgb2YgdGhlCkBAIC0zMjg3LDU3ICszNDYwLDcgQEAK ICAgICB9CiB9CiAKLS8qIEdpdmVuIGFuIFNTQV9OQU1FLCBzZWUgaWYgU0ND Vk4gaGFzIGEgdmFsdWUgbnVtYmVyIGZvciBpdCwgYW5kIGlmCi0gICBzbywg cmV0dXJuIHRoZSB2YWx1ZSBoYW5kbGUgZm9yIHRoaXMgdmFsdWUgbnVtYmVy LCBjcmVhdGluZyBpdCBpZgotICAgbmVjZXNzYXJ5LgotICAgUmV0dXJuIE5V TEwgaWYgU0NDVk4gaGFzIG5vIGluZm8gZm9yIHVzLiAgKi8KLQotc3RhdGlj IHRyZWUKLWdldF9zY2N2bl92YWx1ZSAodHJlZSBuYW1lKQotewotICBpZiAo VFJFRV9DT0RFIChuYW1lKSA9PSBTU0FfTkFNRQotICAgICAgJiYgVk5fSU5G TyAobmFtZSktPnZhbG51bSAhPSBuYW1lCi0gICAgICAmJiBWTl9JTkZPIChu YW1lKS0+dmFsbnVtICE9IFZOX1RPUCkKLSAgICB7Ci0gICAgICB0cmVlIHZh bCA9IFZOX0lORk8gKG5hbWUpLT52YWxudW07Ci0gICAgICBib29sIGlzX2lu dmFyaWFudCA9IGlzX2dpbXBsZV9taW5faW52YXJpYW50ICh2YWwpOwotICAg ICAgdHJlZSB2YWx2aCA9ICFpc19pbnZhcmlhbnQgPyBnZXRfdmFsdWVfaGFu ZGxlICh2YWwpIDogTlVMTF9UUkVFOwotCi0gICAgICAvKiBXZSBtYXkgZW5k IHVwIHdpdGggc2l0dWF0aW9ucyB3aGVyZSBTQ0NWTiBoYXMgY2hvc2VuIGEK LQkgcmVwcmVzZW50YXRpdmUgZm9yIHRoZSBlcXVpdmFsZW5jZSBzZXQgdGhh dCB3ZSBoYXZlIG5vdAotCSB2aXNpdGVkIHlldC4gIEluIHRoaXMgY2FzZSwg anVzdCBjcmVhdGUgdGhlIHZhbHVlIGhhbmRsZSBmb3IKLQkgaXQuICAqLwot ICAgICAgaWYgKCF2YWx2aCAmJiAhaXNfaW52YXJpYW50KQotCXsKLQkgIC8q IFdlIGxvb2t1cCB3aXRoIHRoZSBMSFMsIHNvIGRvIG5vdCB1c2Ugdm5fbG9v a3VwX29yX2FkZF93aXRoX3N0bXQKLQkgICAgIGhlcmUsIGFzIHRoYXQgd2ls bCByZXN1bHQgaW4gdXNlbGVzcyByZWZlcmVuY2UgbG9va3Vwcy4gICovCi0J ICB2YWx2aCA9IHZuX2xvb2t1cF9vcl9hZGQgKHZhbCk7Ci0JfQotCi0gICAg ICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMp KQotCXsKLQkgIGZwcmludGYgKGR1bXBfZmlsZSwgIlNDQ1ZOIHNheXMgIik7 Ci0JICBwcmludF9nZW5lcmljX2V4cHIgKGR1bXBfZmlsZSwgbmFtZSwgMCk7 Ci0JICBmcHJpbnRmIChkdW1wX2ZpbGUsICIgdmFsdWUgbnVtYmVycyB0byAi KTsKLQkgIGlmICh2YWx2aCAmJiAhaXNfaW52YXJpYW50KQotCSAgICB7Ci0J ICAgICAgcHJpbnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUsIHZhbCwgMCk7 Ci0JICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiICgiKTsKLQkgICAgICBw cmludF9nZW5lcmljX2V4cHIgKGR1bXBfZmlsZSwgdmFsdmgsIDApOwotCSAg ICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIilcbiIpOwotCSAgICB9Ci0JICBl bHNlCi0JICAgIHByaW50X2dlbmVyaWNfc3RtdCAoZHVtcF9maWxlLCB2YWws IDApOwotCX0KLSAgICAgIGlmICh2YWx2aCkKLQlyZXR1cm4gdmFsdmg7Ci0g ICAgICBlbHNlCi0JcmV0dXJuIHZhbDsKLSAgICB9Ci0gIHJldHVybiBOVUxM X1RSRUU7Ci19Ci0KLS8qIENyZWF0ZSB2YWx1ZSBoYW5kbGVzIGZvciBQSEkg aW4gQkxPQ0suICAqLworLyogQ3JlYXRlIHZhbHVlIGlkcyBmb3IgUEhJIGlu IEJMT0NLLiAgKi8KIAogc3RhdGljIHZvaWQKIG1ha2VfdmFsdWVzX2Zvcl9w aGkgKHRyZWUgcGhpLCBiYXNpY19ibG9jayBibG9jaykKQEAgLTMzNDcsMTIy ICszNDcwLDExIEBACiAgICAgIGFjdHVhbCBjb21wdXRhdGlvbnMuICAqLwog ICBpZiAoaXNfZ2ltcGxlX3JlZyAocmVzdWx0KSkKICAgICB7Ci0gICAgICB0 cmVlIHNjY3ZudmFsID0gZ2V0X3NjY3ZuX3ZhbHVlIChyZXN1bHQpOwotICAg ICAgaWYgKHNjY3ZudmFsKQotCXsKLQkgIHZuX2FkZCAocmVzdWx0LCBzY2N2 bnZhbCk7Ci0JICBiaXRtYXBfaW5zZXJ0X2ludG9fc2V0IChQSElfR0VOIChi bG9jayksIHJlc3VsdCk7Ci0JICBiaXRtYXBfdmFsdWVfaW5zZXJ0X2ludG9f c2V0IChBVkFJTF9PVVQgKGJsb2NrKSwgcmVzdWx0KTsKLQl9Ci0gICAgICBl bHNlCi0JYWRkX3RvX3NldHMgKHJlc3VsdCwgcmVzdWx0LCBOVUxMLAotCQkg ICAgIFBISV9HRU4gKGJsb2NrKSwgQVZBSUxfT1VUIChibG9jaykpOwotICAg IH0KLX0KLQotLyogQ3JlYXRlIHZhbHVlIGhhbmRsZXMgZm9yIFNUTVQgaW4g QkxPQ0suICBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYW5kbGVkCi0gICB0aGUgc3Rh dGVtZW50LiAgKi8KLQotc3RhdGljIGJvb2wKLW1ha2VfdmFsdWVzX2Zvcl9z dG10ICh0cmVlIHN0bXQsIGJhc2ljX2Jsb2NrIGJsb2NrKQotewotCi0gIHRy ZWUgbGhzID0gR0lNUExFX1NUTVRfT1BFUkFORCAoc3RtdCwgMCk7Ci0gIHRy ZWUgcmhzID0gR0lNUExFX1NUTVRfT1BFUkFORCAoc3RtdCwgMSk7Ci0gIHRy ZWUgdmFsdmggPSBOVUxMX1RSRUU7Ci0gIHRyZWUgbGhzdmFsOwotICBWRUMg KHRyZWUsIGdjKSAqdnVzZXMgPSBOVUxMOwotCi0gIHZhbHZoID0gZ2V0X3Nj Y3ZuX3ZhbHVlIChsaHMpOwotCi0gIGlmICh2YWx2aCkKLSAgICB7Ci0gICAg ICB2bl9hZGQgKGxocywgdmFsdmgpOwotICAgICAgYml0bWFwX3ZhbHVlX2lu c2VydF9pbnRvX3NldCAoQVZBSUxfT1VUIChibG9jayksIGxocyk7Ci0gICAg ICAvKiBTaG9ydGN1dCBmb3IgRlJFLiBXZSBoYXZlIG5vIG5lZWQgdG8gY3Jl YXRlIHZhbHVlIGV4cHJlc3Npb25zLAotCSBqdXN0IHdhbnQgdG8ga25vdyB3 aGF0IHZhbHVlcyBhcmUgYXZhaWxhYmxlIHdoZXJlLiAgKi8KLSAgICAgIGlm IChpbl9mcmUpCi0JcmV0dXJuIHRydWU7Ci0KLSAgICB9Ci0gIGVsc2UgaWYg KGluX2ZyZSkKLSAgICB7Ci0gICAgICAvKiBGb3IgRlJFLCBpZiBTQ0NWTiBk aWRuJ3QgZmluZCBhbnl0aGluZywgd2UgYXJlbid0IGdvaW5nIHRvCi0JIGVp dGhlciwgc28ganVzdCBtYWtlIHVwIGEgbmV3IHZhbHVlIG51bWJlciBpZiBu ZWNlc3NhcnkgYW5kCi0JIGNhbGwgaXQgYSBkYXkgKi8KLSAgICAgIGlmIChn ZXRfdmFsdWVfaGFuZGxlIChsaHMpID09IE5VTEwpCi0Jdm5fbG9va3VwX29y X2FkZCAobGhzKTsKLSAgICAgIGJpdG1hcF92YWx1ZV9pbnNlcnRfaW50b19z ZXQgKEFWQUlMX09VVCAoYmxvY2spLCBsaHMpOwotICAgICAgcmV0dXJuIHRy dWU7Ci0gICAgfQotCi0gIGxoc3ZhbCA9IHZhbHZoID8gdmFsdmggOiBnZXRf dmFsdWVfaGFuZGxlIChsaHMpOwotICB2dXNlcyA9IGNvcHlfdnVzZXNfZnJv bV9zdG10IChzdG10KTsKLSAgU1RSSVBfVVNFTEVTU19UWVBFX0NPTlZFUlNJ T04gKHJocyk7Ci0gIGlmIChjYW5fdmFsdWVfbnVtYmVyX29wZXJhdGlvbiAo cmhzKQotICAgICAgJiYgKCFsaHN2YWwgfHwgIWlzX2dpbXBsZV9taW5faW52 YXJpYW50IChsaHN2YWwpKQotICAgICAgJiYgIVNTQV9OQU1FX09DQ1VSU19J Tl9BQk5PUk1BTF9QSEkgKGxocykpCi0gICAgewotICAgICAgLyogRm9yIHZh bHVlIG51bWJlcmFibGUgb3BlcmF0aW9uLCBjcmVhdGUgYQotCSBkdXBsaWNh dGUgZXhwcmVzc2lvbiB3aXRoIHRoZSBvcGVyYW5kcyByZXBsYWNlZAotCSB3 aXRoIHRoZSB2YWx1ZSBoYW5kbGVzIG9mIHRoZSBvcmlnaW5hbCBSSFMuICAq LwotICAgICAgdHJlZSBuZXd0ID0gY3JlYXRlX3ZhbHVlX2V4cHJfZnJvbSAo cmhzLCBibG9jaywgdnVzZXMsIGZhbHNlKTsKLSAgICAgIGlmIChuZXd0KQot CXsKLQkgIHNldF9leHByZXNzaW9uX3Z1c2VzIChuZXd0LCB2dXNlcyk7Ci0J ICAvKiBJZiB3ZSBhbHJlYWR5IGhhdmUgYSB2YWx1ZSBudW1iZXIgZm9yIHRo ZSBMSFMsIHJldXNlCi0JICAgICBpdCByYXRoZXIgdGhhbiBjcmVhdGluZyBh IG5ldyBvbmUuICAqLwotCSAgaWYgKGxoc3ZhbCkKLQkgICAgewotCSAgICAg IHNldF92YWx1ZV9oYW5kbGUgKG5ld3QsIGxoc3ZhbCk7Ci0JICAgICAgaWYg KCFpc19naW1wbGVfbWluX2ludmFyaWFudCAobGhzdmFsKSkKLQkJYWRkX3Rv X3ZhbHVlIChsaHN2YWwsIG5ld3QpOwotCSAgICB9Ci0JICBlbHNlCi0JICAg IHsKLQkgICAgICB0cmVlIHZhbCA9IHZuX2xvb2t1cF9vcl9hZGRfd2l0aF92 dXNlcyAobmV3dCwgdnVzZXMpOwotCSAgICAgIHZuX2FkZCAobGhzLCB2YWwp OwotCSAgICB9Ci0KLQkgIGFkZF90b19leHBfZ2VuIChibG9jaywgbmV3dCk7 Ci0JfQotCi0gICAgICBiaXRtYXBfaW5zZXJ0X2ludG9fc2V0IChUTVBfR0VO IChibG9jayksIGxocyk7Ci0gICAgICBiaXRtYXBfdmFsdWVfaW5zZXJ0X2lu dG9fc2V0IChBVkFJTF9PVVQgKGJsb2NrKSwgbGhzKTsKLSAgICAgIHJldHVy biB0cnVlOwotICAgIH0KLSAgZWxzZSBpZiAoKFRSRUVfQ09ERSAocmhzKSA9 PSBTU0FfTkFNRQotCSAgICAmJiAhU1NBX05BTUVfT0NDVVJTX0lOX0FCTk9S TUFMX1BISSAocmhzKSkKLQkgICB8fCBpc19naW1wbGVfbWluX2ludmFyaWFu dCAocmhzKQotCSAgIHx8IFRSRUVfQ09ERSAocmhzKSA9PSBBRERSX0VYUFIK LQkgICB8fCBERUNMX1AgKHJocykpCi0gICAgewotCi0gICAgICBpZiAobGhz dmFsKQotCXsKLQkgIHNldF9leHByZXNzaW9uX3Z1c2VzIChyaHMsIHZ1c2Vz KTsKLQkgIHNldF92YWx1ZV9oYW5kbGUgKHJocywgbGhzdmFsKTsKLQkgIGlm ICghaXNfZ2ltcGxlX21pbl9pbnZhcmlhbnQgKGxoc3ZhbCkpCi0JICAgIGFk ZF90b192YWx1ZSAobGhzdmFsLCByaHMpOwotCSAgYml0bWFwX2luc2VydF9p bnRvX3NldCAoVE1QX0dFTiAoYmxvY2spLCBsaHMpOwotCSAgYml0bWFwX3Zh bHVlX2luc2VydF9pbnRvX3NldCAoQVZBSUxfT1VUIChibG9jayksIGxocyk7 Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIC8qIENvbXB1dGUgYSB2YWx1ZSBu dW1iZXIgZm9yIHRoZSBSSFMgb2YgdGhlIHN0YXRlbWVudAotCSAgICAgYW5k IGFkZCBpdHMgdmFsdWUgdG8gdGhlIEFWQUlMX09VVCBzZXQgZm9yIHRoZSBi bG9jay4KLQkgICAgIEFkZCB0aGUgTEhTIHRvIFRNUF9HRU4uICAqLwotCSAg c2V0X2V4cHJlc3Npb25fdnVzZXMgKHJocywgdnVzZXMpOwotCSAgYWRkX3Rv X3NldHMgKGxocywgcmhzLCB2dXNlcywgVE1QX0dFTiAoYmxvY2spLAotCQkg ICAgICAgQVZBSUxfT1VUIChibG9jaykpOwotCX0KLSAgICAgIC8qIE5vbmUg b2YgdGhlIHJlc3Qgb2YgdGhlc2UgY2FuIGJlIFBSRSdkLiAgKi8KLSAgICAg IGlmIChUUkVFX0NPREUgKHJocykgPT0gU1NBX05BTUUgJiYgIXNzYV91bmRl ZmluZWRfdmFsdWVfcCAocmhzKSkKLQlhZGRfdG9fZXhwX2dlbiAoYmxvY2ss IHJocyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIHJldHVybiBm YWxzZTsKLQorICAgICAgcHJlX2V4cHIgZSA9IGdldF9vcl9hbGxvY19leHBy X2Zvcl9uYW1lIChyZXN1bHQpOworICAgICAgYWRkX3RvX3ZhbHVlIChnZXRf ZXhwcl92YWx1ZV9pZCAoZSksIGUpOworICAgICAgYml0bWFwX2luc2VydF9p bnRvX3NldCAoUEhJX0dFTiAoYmxvY2spLCBlKTsKKyAgICAgIGJpdG1hcF92 YWx1ZV9pbnNlcnRfaW50b19zZXQgKEFWQUlMX09VVCAoYmxvY2spLCBlKTsK KyAgICB9CiB9CiAKIC8qIENvbXB1dGUgdGhlIEFWQUlMIHNldCBmb3IgYWxs IGJhc2ljIGJsb2Nrcy4KQEAgLTM0NzgsMTEgKzM0OTAsMTIgQEAKIHN0YXRp YyB2b2lkCiBjb21wdXRlX2F2YWlsICh2b2lkKQogeworCiAgIGJhc2ljX2Js b2NrIGJsb2NrLCBzb247CiAgIGJhc2ljX2Jsb2NrICp3b3JrbGlzdDsKICAg c2l6ZV90IHNwID0gMDsKICAgdHJlZSBwYXJhbTsKLQorICAKICAgLyogRm9y IGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgZGVmaW5pdGlvbnMsIHdlIHByZXRl bmQgdGhleSBhcmUKICAgICAgZGVmaW5lZCBpbiB0aGUgZW50cnkgYmxvY2su ICAqLwogICBmb3IgKHBhcmFtID0gREVDTF9BUkdVTUVOVFMgKGN1cnJlbnRf ZnVuY3Rpb25fZGVjbCk7CkBAIC0zNDkyLDE0ICszNTA1LDE1IEBACiAgICAg ICBpZiAoZ2ltcGxlX2RlZmF1bHRfZGVmIChjZnVuLCBwYXJhbSkgIT0gTlVM TCkKIAl7CiAJICB0cmVlIGRlZiA9IGdpbXBsZV9kZWZhdWx0X2RlZiAoY2Z1 biwgcGFyYW0pOwotCi0JICB2bl9sb29rdXBfb3JfYWRkIChkZWYpOworCSAg cHJlX2V4cHIgZSA9IGdldF9vcl9hbGxvY19leHByX2Zvcl9uYW1lIChkZWYp OworCisJICBhZGRfdG9fdmFsdWUgKGdldF9leHByX3ZhbHVlX2lkIChlKSwg ZSk7CSAgCiAJICBpZiAoIWluX2ZyZSkKIAkgICAgewotCSAgICAgIGJpdG1h cF9pbnNlcnRfaW50b19zZXQgKFRNUF9HRU4gKEVOVFJZX0JMT0NLX1BUUiks IGRlZik7Ci0JICAgICAgYml0bWFwX3ZhbHVlX2luc2VydF9pbnRvX3NldCAo bWF4aW1hbF9zZXQsIGRlZik7Ci0JICAgIH0KLQkgIGJpdG1hcF92YWx1ZV9p bnNlcnRfaW50b19zZXQgKEFWQUlMX09VVCAoRU5UUllfQkxPQ0tfUFRSKSwg ZGVmKTsKKwkgICAgICBiaXRtYXBfaW5zZXJ0X2ludG9fc2V0IChUTVBfR0VO IChFTlRSWV9CTE9DS19QVFIpLCBlKTsKKwkgICAgICBiaXRtYXBfdmFsdWVf aW5zZXJ0X2ludG9fc2V0IChtYXhpbWFsX3NldCwgZSk7CisJICAgIH0KKwkg IGJpdG1hcF92YWx1ZV9pbnNlcnRfaW50b19zZXQgKEFWQUlMX09VVCAoRU5U UllfQkxPQ0tfUFRSKSwgZSk7CiAJfQogICAgIH0KIApAQCAtMzUxMCwxNCAr MzUyNCwxNSBAQAogICAgICAgaWYgKGdpbXBsZV9kZWZhdWx0X2RlZiAoY2Z1 biwgcGFyYW0pICE9IE5VTEwpCiAJewogCSAgdHJlZSBkZWYgPSBnaW1wbGVf ZGVmYXVsdF9kZWYgKGNmdW4sIHBhcmFtKTsKLQotCSAgdm5fbG9va3VwX29y X2FkZCAoZGVmKTsKKwkgIHByZV9leHByIGUgPSBnZXRfb3JfYWxsb2NfZXhw cl9mb3JfbmFtZSAoZGVmKTsKKworCSAgYWRkX3RvX3ZhbHVlIChnZXRfZXhw cl92YWx1ZV9pZCAoZSksIGUpOwogCSAgaWYgKCFpbl9mcmUpCiAJICAgIHsK LQkgICAgICBiaXRtYXBfaW5zZXJ0X2ludG9fc2V0IChUTVBfR0VOIChFTlRS WV9CTE9DS19QVFIpLCBkZWYpOwotCSAgICAgIGJpdG1hcF92YWx1ZV9pbnNl cnRfaW50b19zZXQgKG1heGltYWxfc2V0LCBkZWYpOwotCSAgICB9Ci0JICBi aXRtYXBfdmFsdWVfaW5zZXJ0X2ludG9fc2V0IChBVkFJTF9PVVQgKEVOVFJZ X0JMT0NLX1BUUiksIGRlZik7CisJICAgICAgYml0bWFwX2luc2VydF9pbnRv X3NldCAoVE1QX0dFTiAoRU5UUllfQkxPQ0tfUFRSKSwgZSk7CisJICAgICAg Yml0bWFwX3ZhbHVlX2luc2VydF9pbnRvX3NldCAobWF4aW1hbF9zZXQsIGUp OworCSAgICB9CisJICBiaXRtYXBfdmFsdWVfaW5zZXJ0X2ludG9fc2V0IChB VkFJTF9PVVQgKEVOVFJZX0JMT0NLX1BUUiksIGUpOwogCX0KICAgICB9CiAK QEAgLTM1NjUsNjcgKzM1ODAsMTE5IEBACiAKIAkgIHNldF9naW1wbGVfc3Rt dF91aWQgKHN0bXQsIHN0bXRfdWlkKyspOwogCi0JICAvKiBGb3IgcmVndWxh ciB2YWx1ZSBudW1iZXJpbmcsIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4K LQkgICAgIGFzc2lnbm1lbnRzIG9mIHRoZSBmb3JtIFhfaSA9IEVYUFIsIHdo ZXJlIEVYUFIgcmVwcmVzZW50cwotCSAgICAgYW4gImludGVyZXN0aW5nIiBj b21wdXRhdGlvbiwgaXQgaGFzIG5vIHZvbGF0aWxlIG9wZXJhbmRzCi0JICAg ICBhbmQgWF9pIGRvZXNuJ3QgZmxvdyB0aHJvdWdoIGFuIGFibm9ybWFsIGVk Z2UuICAqLwotCSAgaWYgKFRSRUVfQ09ERSAoc3RtdCkgPT0gUkVUVVJOX0VY UFIKLQkgICAgICAmJiAhYW5uLT5oYXNfdm9sYXRpbGVfb3BzKQotCSAgICB7 Ci0JICAgICAgdHJlZSByZWFsc3RtdCA9IHN0bXQ7Ci0JICAgICAgdHJlZSBs aHM7Ci0JICAgICAgdHJlZSByaHM7Ci0KLQkgICAgICBzdG10ID0gVFJFRV9P UEVSQU5EIChzdG10LCAwKTsKLQkgICAgICBpZiAoc3RtdCAmJiBUUkVFX0NP REUgKHN0bXQpID09IEdJTVBMRV9NT0RJRllfU1RNVCkKLQkJewotCQkgIGxo cyA9IEdJTVBMRV9TVE1UX09QRVJBTkQgKHN0bXQsIDApOwotCQkgIHJocyA9 IEdJTVBMRV9TVE1UX09QRVJBTkQgKHN0bXQsIDEpOwotCQkgIGlmIChUUkVF X0NPREUgKGxocykgPT0gU1NBX05BTUUKLQkJICAgICAgJiYgaXNfZ2ltcGxl X21pbl9pbnZhcmlhbnQgKFZOX0lORk8gKGxocyktPnZhbG51bSkpCi0JCSAg ICB7Ci0JCSAgICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBU REZfREVUQUlMUykpCi0JCQl7Ci0JCQkgIGZwcmludGYgKGR1bXBfZmlsZSwg IlNDQ1ZOIHNheXMgIik7Ci0JCQkgIHByaW50X2dlbmVyaWNfZXhwciAoZHVt cF9maWxlLCBsaHMsIDApOwotCQkJICBmcHJpbnRmIChkdW1wX2ZpbGUsICIg dmFsdWUgbnVtYmVycyB0byAiKTsKLQkJCSAgcHJpbnRfZ2VuZXJpY19zdG10 IChkdW1wX2ZpbGUsIFZOX0lORk8gKGxocyktPnZhbG51bSwKLQkJCQkJICAg ICAgMCk7Ci0JCQl9Ci0JCSAgICAgIHZuX2FkZCAobGhzLCBWTl9JTkZPIChs aHMpLT52YWxudW0pOwotCQkgICAgICBjb250aW51ZTsKLQkJICAgIH0KLQot CQkgIGlmIChUUkVFX0NPREUgKHJocykgPT0gU1NBX05BTUUpCi0JCSAgICBh ZGRfdG9fZXhwX2dlbiAoYmxvY2ssIHJocyk7Ci0KLQkJICBGT1JfRUFDSF9T U0FfVFJFRV9PUEVSQU5EIChvcCwgcmVhbHN0bXQsIGl0ZXIsIFNTQV9PUF9E RUYpCi0JCSAgICBhZGRfdG9fc2V0cyAob3AsIG9wLCBOVUxMLCBUTVBfR0VO IChibG9jayksCi0JCQkJIEFWQUlMX09VVCAoYmxvY2spKTsKLQkJfQorCSAg Rk9SX0VBQ0hfU1NBX1RSRUVfT1BFUkFORCAob3AsIHN0bXQsIGl0ZXIsIFNT QV9PUF9ERUYpCisJICAgIHsKKwkgICAgICBwcmVfZXhwciBlID0gZ2V0X29y X2FsbG9jX2V4cHJfZm9yX25hbWUgKG9wKTsKKworCSAgICAgIGFkZF90b192 YWx1ZSAoZ2V0X2V4cHJfdmFsdWVfaWQgKGUpLCBlKTsKKwkgICAgICBpZiAo IWluX2ZyZSkKKwkJeworCQkgIGJpdG1hcF9pbnNlcnRfaW50b19zZXQgKFRN UF9HRU4gKGJsb2NrKSwgZSk7CisJCSAgYml0bWFwX3ZhbHVlX2luc2VydF9p bnRvX3NldCAobWF4aW1hbF9zZXQsIGUpOworCQl9CisJICAgICAgYml0bWFw X3ZhbHVlX2luc2VydF9pbnRvX3NldCAoQVZBSUxfT1VUIChibG9jayksIGUp OworCSAgICB9CisKKwkgIHN3aXRjaCAoVFJFRV9DT0RFIChzdG10KSkgCisJ ICAgIHsKKwkgICAgY2FzZSBSRVRVUk5fRVhQUjoKKwkgICAgICBpZiAoIWFu bi0+aGFzX3ZvbGF0aWxlX29wcykKKwkJRk9SX0VBQ0hfU1NBX1RSRUVfT1BF UkFORCAob3AsIHN0bXQsIGl0ZXIsIFNTQV9PUF9VU0UpCisJCSAgYWRkX3Rv X2V4cF9nZW4gKGJsb2NrLCBvcCk7CiAJICAgICAgY29udGludWU7Ci0JICAg IH0KLQotCSAgZWxzZSBpZiAoVFJFRV9DT0RFIChzdG10KSA9PSBHSU1QTEVf TU9ESUZZX1NUTVQKLQkJICAgJiYgIWFubi0+aGFzX3ZvbGF0aWxlX29wcwot CQkgICAmJiBUUkVFX0NPREUgKEdJTVBMRV9TVE1UX09QRVJBTkQgKHN0bXQs IDApKSA9PSBTU0FfTkFNRQotCQkgICAmJiAhdHJlZV9jb3VsZF90aHJvd19w IChzdG10KSkKLQkgICAgewotCSAgICAgIGlmIChtYWtlX3ZhbHVlc19mb3Jf c3RtdCAoc3RtdCwgYmxvY2spKQorCSAgICBjYXNlIEdJTVBMRV9NT0RJRllf U1RNVDoKKwkgICAgICB7CisJCXRyZWUgcmhzID0gR0lNUExFX1NUTVRfT1BF UkFORCAoc3RtdCwgMSk7CisJCWlmICghYW5uLT5oYXNfdm9sYXRpbGVfb3Bz CisJCSAgICAmJiAhdHJlZV9jb3VsZF90aHJvd19wIChzdG10KSkKKwkJICB7 CisJCSAgICBwcmVfZXhwciByZXN1bHQgPSBOVUxMOworCQkgICAgc3dpdGNo IChUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAocmhzKSkpCisJCSAgICAg IHsKKwkJICAgICAgY2FzZSB0Y2NfdW5hcnk6CisJCQlpZiAoaXNfZXhjZXB0 aW9uX3JlbGF0ZWQgKHJocykpCisJCQkgIGNvbnRpbnVlOworCQkgICAgICBj YXNlIHRjY19iaW5hcnk6CisJCQl7CisJCQkgIHZuX25hcnlfb3BfdCBuYXJ5 OworCQkJICB1bnNpZ25lZCBpbnQgaTsKKwkJCSAgCisJCQkgIHZuX25hcnlf b3BfbG9va3VwIChyaHMsICZuYXJ5KTsKKworCQkJICBpZiAoIW5hcnkpCisJ CQkgICAgY29udGludWU7CisKKwkJCSAgZm9yIChpID0gMDsgaSA8IG5hcnkt Pmxlbmd0aDsgaSsrKQorCQkJICAgIGlmIChUUkVFX0NPREUgKG5hcnktPm9w W2ldKSA9PSBTU0FfTkFNRSkKKwkJCSAgICAgIGFkZF90b19leHBfZ2VuIChi bG9jaywgbmFyeS0+b3BbaV0pOworCQkJICAKKwkJCSAgcmVzdWx0ID0gKHBy ZV9leHByKSBwb29sX2FsbG9jIChwcmVfZXhwcl9wb29sKTsKKwkJCSAgcmVz dWx0LT5raW5kID0gTkFSWTsKKwkJCSAgcmVzdWx0LT5pZCA9IDA7CisJCQkg IFBSRV9FWFBSX05BUlkgKHJlc3VsdCkgPSBuYXJ5OworCQkJfQorCQkJYnJl YWs7CisJCSAgICAgIGNhc2UgdGNjX3ZsX2V4cDoKKwkJCWlmICghY2FuX3Zh bHVlX251bWJlcl9jYWxsIChyaHMpKQorCQkJICBjb250aW51ZTsKKworCQkg ICAgICBjYXNlIHRjY19kZWNsYXJhdGlvbjoKKwkJICAgICAgY2FzZSB0Y2Nf cmVmZXJlbmNlOgorCQkJeworCQkJICB2bl9yZWZlcmVuY2VfdCByZWY7CisJ CQkgIHVuc2lnbmVkIGludCBpOworCQkJICB2bl9yZWZlcmVuY2Vfb3BfdCB2 cm87CisKKwkJCSAgdm5fcmVmZXJlbmNlX2xvb2t1cCAocmhzLAorCQkJCQkg ICAgICAgc2hhcmVkX3Z1c2VzX2Zyb21fc3RtdCAoc3RtdCksCisJCQkJCSAg ICAgICB0cnVlLCAmcmVmKTsKKwkJCSAgaWYgKCFyZWYpCisJCQkgICAgY29u dGludWU7CisKKwkJCSAgZm9yIChpID0gMDsgVkVDX2l0ZXJhdGUgKHZuX3Jl ZmVyZW5jZV9vcF9zLAorCQkJCQkJICAgcmVmLT5vcGVyYW5kcywgaSwKKwkJ CQkJCSAgIHZybyk7IGkrKykKKwkJCSAgICB7CisJCQkgICAgICBpZiAodnJv LT5vcDAgJiYgVFJFRV9DT0RFICh2cm8tPm9wMCkgPT0gU1NBX05BTUUpCisJ CQkJYWRkX3RvX2V4cF9nZW4gKGJsb2NrLCB2cm8tPm9wMCk7CisJCQkgICAg ICBpZiAodnJvLT5vcDEgJiYgVFJFRV9DT0RFICh2cm8tPm9wMSkgPT0gU1NB X05BTUUpCisJCQkJYWRkX3RvX2V4cF9nZW4gKGJsb2NrLCB2cm8tPm9wMSk7 CisJCQkgICAgfQorCQkJICByZXN1bHQgPSAocHJlX2V4cHIpIHBvb2xfYWxs b2MgKHByZV9leHByX3Bvb2wpOworCQkJICByZXN1bHQtPmtpbmQgPSBSRUZF UkVOQ0U7CisJCQkgIHJlc3VsdC0+aWQgPSAwOworCQkJICBQUkVfRVhQUl9S RUZFUkVOQ0UgKHJlc3VsdCkgPSByZWY7CisJCQl9CisJCQlicmVhazsKKwkJ ICAgICAgZGVmYXVsdDoKKwkJCXsKKwkJCSAgLyogRm9yIGFueSBvdGhlciBz dGF0ZW1lbnQgdGhhdCB3ZSBkb24ndAorCQkJICAgICByZWNvZ25pemUsIHNp bXBseSBhZGQgYWxsIHJlZmVyZW5jZWQKKwkJCSAgICAgU1NBX05BTUVzIHRv IEVYUF9HRU4uICAqLworCQkJICBGT1JfRUFDSF9TU0FfVFJFRV9PUEVSQU5E IChvcCwgc3RtdCwgaXRlciwgU1NBX09QX1VTRSkKKwkJCSAgICBhZGRfdG9f ZXhwX2dlbiAoYmxvY2ssIG9wKTsKKwkJCSAgY29udGludWU7CisJCQl9CisJ CSAgICAgIH0KKwkJICAgIGdldF9vcl9hbGxvY19leHByZXNzaW9uX2lkIChy ZXN1bHQpOworCQkgICAgYWRkX3RvX3ZhbHVlIChnZXRfZXhwcl92YWx1ZV9p ZCAocmVzdWx0KSwgcmVzdWx0KTsKKwkJICAgIGlmICghaW5fZnJlKQorCQkg ICAgICB7CisJCQliaXRtYXBfdmFsdWVfaW5zZXJ0X2ludG9fc2V0IChFWFBf R0VOIChibG9jayksCisJCQkJCQkgICAgICByZXN1bHQpOworCQkJYml0bWFw X3ZhbHVlX2luc2VydF9pbnRvX3NldCAobWF4aW1hbF9zZXQsIHJlc3VsdCk7 CisJCSAgICAgIH0gIAorCisJCSAgfQogCQljb250aW51ZTsKLQkgICAgfQot Ci0JICAvKiBGb3IgYW55IG90aGVyIHN0YXRlbWVudCB0aGF0IHdlIGRvbid0 IHJlY29nbml6ZSwgc2ltcGx5Ci0JICAgICBtYWtlIHRoZSBuYW1lcyBnZW5l cmF0ZWQgYnkgdGhlIHN0YXRlbWVudCBhdmFpbGFibGUgaW4KLQkgICAgIEFW QUlMX09VVCBhbmQgVE1QX0dFTi4gICovCi0JICBGT1JfRUFDSF9TU0FfVFJF RV9PUEVSQU5EIChvcCwgc3RtdCwgaXRlciwgU1NBX09QX0RFRikKLQkgICAg YWRkX3RvX3NldHMgKG9wLCBvcCwgTlVMTCwgVE1QX0dFTiAoYmxvY2spLCBB VkFJTF9PVVQgKGJsb2NrKSk7Ci0KLQkgIC8qIEFsc28gYWRkIGFsbCByZWZl cmVuY2VkIFNTQV9OQU1FcyB0byBFWFBfR0VOLiAgKi8KLQkgIEZPUl9FQUNI X1NTQV9UUkVFX09QRVJBTkQgKG9wLCBzdG10LCBpdGVyLCBTU0FfT1BfVVNF KQotCSAgICBhZGRfdG9fZXhwX2dlbiAoYmxvY2ssIG9wKTsKLQl9Ci0KKwkg ICAgICB9CisJICAgIGRlZmF1bHQ6CisJICAgICAgYnJlYWs7CisJICAgICAg CisJICAgIH0KKwkgIAorCisJfQogICAgICAgLyogUHV0IHRoZSBkb21pbmF0 b3IgY2hpbGRyZW4gb2YgQkxPQ0sgb24gdGhlIHdvcmtsaXN0IG9mIGJsb2Nr cwogCSB0byBjb21wdXRlIGF2YWlsYWJsZSBzZXRzIGZvci4gICovCiAgICAg ICBmb3IgKHNvbiA9IGZpcnN0X2RvbV9zb24gKENESV9ET01JTkFUT1JTLCBi bG9jayk7CkBAIC0zNjQ4LDE4ICszNzE1LDIxIEBACiAgIGJhc2ljX2Jsb2Nr IGJiID0gYmJfZm9yX3N0bXQgKHN0bXQpOwogICBibG9ja19zdG10X2l0ZXJh dG9yIGJzaTsKICAgdHJlZSBleHByLCBzdG10czsKKyAgcHJlX2V4cHIgZTsK IAogICAvKiBGaXJzdCBjcmVhdGUgYSB2YWx1ZSBleHByZXNzaW9uIGZyb20g dGhlIGV4cHJlc3Npb24gd2Ugd2FudAogICAgICB0byBpbnNlcnQgYW5kIGFz c29jaWF0ZSBpdCB3aXRoIHRoZSB2YWx1ZSBoYW5kbGUgZm9yIFNTQV9WTi4g ICovCi0gIGV4cHIgPSBjcmVhdGVfdmFsdWVfZXhwcl9mcm9tIChWTl9JTkZP IChzc2Ffdm4pLT5leHByLCBiYiwgTlVMTCwgdHJ1ZSk7Ci0gIGlmIChleHBy ID09IE5VTExfVFJFRSkKKyAgCisgIC8qIFRPRE86IEhhbmRsZSBjb21wbGV4 IGV4cHJlc3Npb25zLiAgKi8KKyAgZSA9IGdldF9vcl9hbGxvY19leHByX2Zv ciAoVk5fSU5GTyAoc3NhX3ZuKS0+ZXhwcik7CisgIGlmIChlID09IE5VTEwp CiAgICAgcmV0dXJuIE5VTExfVFJFRTsKLSAgc2V0X3ZhbHVlX2hhbmRsZSAo ZXhwciwgZ2V0X3ZhbHVlX2hhbmRsZSAoc3NhX3ZuKSk7Ci0KLSAgLyogVGhl biB1c2UgY3JlYXRlX2V4cHJlc3Npb25fYnlfcGllY2VzIHRvIGdlbmVyYXRl IGEgdmFsaWQKKworLyogVGhlbiB1c2UgY3JlYXRlX2V4cHJlc3Npb25fYnlf cGllY2VzIHRvIGdlbmVyYXRlIGEgdmFsaWQKICAgICAgZXhwcmVzc2lvbiB0 byBpbnNlcnQgYXQgdGhpcyBwb2ludCBvZiB0aGUgSUwgc3RyZWFtLiAgKi8K ICAgc3RtdHMgPSBhbGxvY19zdG10X2xpc3QgKCk7Ci0gIGV4cHIgPSBjcmVh dGVfZXhwcmVzc2lvbl9ieV9waWVjZXMgKGJiLCBleHByLCBzdG10cywgc3Rt dCk7CisgIGV4cHIgPSBjcmVhdGVfZXhwcmVzc2lvbl9ieV9waWVjZXMgKGJi LCBlLCBzdG10cywgc3RtdCwKKwkJCQkgICAgICBOVUxMKTsKICAgaWYgKGV4 cHIgPT0gTlVMTF9UUkVFKQogICAgIHJldHVybiBOVUxMX1RSRUU7CiAgIGJz aSA9IGJzaV9mb3Jfc3RtdCAoc3RtdCk7CkBAIC0zNjk1LDI0ICszNzY1LDU2 IEBACiAJICAgIHsKIAkgICAgICB0cmVlIGxocyA9IEdJTVBMRV9TVE1UX09Q RVJBTkQgKHN0bXQsIDApOwogCSAgICAgIHRyZWUgKnJoc19wID0gJkdJTVBM RV9TVE1UX09QRVJBTkQgKHN0bXQsIDEpOwotCSAgICAgIHRyZWUgc3ByaW1l OwotCi0JICAgICAgc3ByaW1lID0gYml0bWFwX2ZpbmRfbGVhZGVyIChBVkFJ TF9PVVQgKGIpLAotCQkJCQkgICBnZXRfdmFsdWVfaGFuZGxlIChsaHMpLCBO VUxMX1RSRUUpOwotCisJICAgICAgdHJlZSBzcHJpbWUgPSBOVUxMOworCSAg ICAgIHByZV9leHByIGxoc2V4cHIgPSBnZXRfb3JfYWxsb2NfZXhwcl9mb3Jf bmFtZSAobGhzKTsKKwkgICAgICBwcmVfZXhwciBzcHJpbWVleHByOworCisJ ICAgICAgc3ByaW1lZXhwciA9IGJpdG1hcF9maW5kX2xlYWRlciAoQVZBSUxf T1VUIChiKSwKKwkJCQkJICAgICAgIGdldF9leHByX3ZhbHVlX2lkIChsaHNl eHByKSwKKwkJCQkJICAgICAgIE5VTExfVFJFRSk7CisKKwkgICAgICBpZiAo c3ByaW1lZXhwcikKKwkJeworCQkgIGlmIChzcHJpbWVleHByLT5raW5kID09 IENPTlNUQU5UKQorCQkgICAgc3ByaW1lID0gUFJFX0VYUFJfQ09OU1RBTlQg KHNwcmltZWV4cHIpOworCQkgIGVsc2UgaWYgKHNwcmltZWV4cHItPmtpbmQg PT0gTkFNRSkKKwkJICAgIHNwcmltZSA9IFBSRV9FWFBSX05BTUUgKHNwcmlt ZWV4cHIpOworCQkgIGVsc2UKKwkJICAgIGdjY191bnJlYWNoYWJsZSAoKTsK KwkJfQorCSAgICAgIC8qIElmIHRoZXJlIGlzIG5vIGV4aXN0aW5nIGxlYWRl ciBidXQgU0NDVk4ga25vd3MgdGhpcworCQkgdmFsdWUgaXMgY29uc3RhbnQs IHVzZSB0aGF0IGNvbnN0YW50LiAgKi8KKwkgICAgICBpZiAoIXNwcmltZSAm JiBpc19naW1wbGVfbWluX2ludmFyaWFudCAoVk5fSU5GTyAobGhzKS0+dmFs bnVtKSkKKwkJeworCQkgIHNwcmltZSA9IFZOX0lORk8gKGxocyktPnZhbG51 bTsKKworCQkgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZf REVUQUlMUykpCisJCSAgICB7CisJCSAgICAgIGZwcmludGYgKGR1bXBfZmls ZSwgIlJlcGxhY2VkICIpOworCQkgICAgICBwcmludF9nZW5lcmljX2V4cHIg KGR1bXBfZmlsZSwgKnJoc19wLCAwKTsKKwkJICAgICAgZnByaW50ZiAoZHVt cF9maWxlLCAiIHdpdGggIik7CisJCSAgICAgIHByaW50X2dlbmVyaWNfZXhw ciAoZHVtcF9maWxlLCBzcHJpbWUsIDApOworCQkgICAgICBmcHJpbnRmIChk dW1wX2ZpbGUsICIgaW4gIik7CisJCSAgICAgIHByaW50X2dlbmVyaWNfc3Rt dCAoZHVtcF9maWxlLCBzdG10LCAwKTsKKwkJICAgIH0KKwkJICBwcmVfc3Rh dHMuZWxpbWluYXRpb25zKys7CisJCSAgcHJvcGFnYXRlX3RyZWVfdmFsdWUg KHJoc19wLCBzcHJpbWUpOworCQkgIHVwZGF0ZV9zdG10IChzdG10KTsKKwkJ ICBjb250aW51ZTsKKwkJfQorCSAgICAgIAogCSAgICAgIC8qIElmIHRoZXJl IGlzIG5vIGV4aXN0aW5nIHVzYWJsZSBsZWFkZXIgYnV0IFNDQ1ZOIHRoaW5r cwogCQkgaXQgaGFzIGFuIGV4cHJlc3Npb24gaXQgd2FudHMgdG8gdXNlIGFz IHJlcGxhY2VtZW50LAogCQkgaW5zZXJ0IHRoYXQuICAqLwotCSAgICAgIGlm ICghc3ByaW1lCi0JCSAgfHwgc3ByaW1lID09IGxocykKKwkgICAgICBpZiAo IXNwcmltZSB8fCBzcHJpbWUgPT0gbGhzKQogCQl7CiAJCSAgdHJlZSB2YWwg PSBWTl9JTkZPIChsaHMpLT52YWxudW07CiAJCSAgaWYgKHZhbCAhPSBWTl9U T1AKKwkJICAgICAgJiYgVFJFRV9DT0RFICh2YWwpID09IFNTQV9OQU1FCiAJ CSAgICAgICYmIFZOX0lORk8gKHZhbCktPm5lZWRzX2luc2VydGlvbgogCQkg ICAgICAmJiBjYW5fUFJFX29wZXJhdGlvbiAoVk5fSU5GTyAodmFsKS0+ZXhw cikpCiAJCSAgICBzcHJpbWUgPSBkb19TQ0NWTl9pbnNlcnRpb24gKHN0bXQs IHZhbCk7CiAJCX0KLQogCSAgICAgIGlmIChzcHJpbWUKIAkJICAmJiBzcHJp bWUgIT0gbGhzCiAJCSAgJiYgKFRSRUVfQ09ERSAoKnJoc19wKSAhPSBTU0Ff TkFNRQpAQCAtMzkyMSw2ICs0MDIzLDE1IEBACiBzdGF0aWMgdm9pZAogaW5p dF9wcmUgKGJvb2wgZG9fZnJlKQogeworICBiYXNpY19ibG9jayBiYjsKKwor ICBuZXh0X2V4cHJlc3Npb25faWQgPSAxOworICBleHByZXNzaW9ucyA9IE5V TEw7CisgIFZFQ19zYWZlX3B1c2ggKHByZV9leHByLCBoZWFwLCBleHByZXNz aW9ucywgTlVMTCk7CisgIHZhbHVlX2V4cHJlc3Npb25zID0gVkVDX2FsbG9j IChiaXRtYXBfc2V0X3QsIGhlYXAsIGdldF9tYXhfdmFsdWVfaWQgKCkgKyAx KTsKKyAgVkVDX3NhZmVfZ3Jvd19jbGVhcmVkIChiaXRtYXBfc2V0X3QsIGhl YXAsIHZhbHVlX2V4cHJlc3Npb25zLAorCQkJIGdldF9tYXhfdmFsdWVfaWQo KSArIDEpOworICAKICAgaW5fZnJlID0gZG9fZnJlOwogCiAgIGluc2VydGVk X2V4cHJzID0gTlVMTDsKQEAgLTM5MjksODUgKzQwNDAsMTA4IEBACiAgIHN0 b3JldGVtcCA9IE5VTExfVFJFRTsKICAgcHJlcGhpdGVtcCA9IE5VTExfVFJF RTsKIAorICBjb25uZWN0X2luZmluaXRlX2xvb3BzX3RvX2V4aXQgKCk7Cisg IG1lbXNldCAoJnByZV9zdGF0cywgMCwgc2l6ZW9mIChwcmVfc3RhdHMpKTsK KworCisgIHBvc3RvcmRlciA9IFhORVdWRUMgKGludCwgbl9iYXNpY19ibG9j a3MgLSBOVU1fRklYRURfQkxPQ0tTKTsKKyAgcG9zdF9vcmRlcl9jb21wdXRl IChwb3N0b3JkZXIsIGZhbHNlLCBmYWxzZSk7CisKKyAgRk9SX0FMTF9CQiAo YmIpCisgICAgYmItPmF1eCA9IFhDTkVXVkVDIChzdHJ1Y3QgYmJfYml0bWFw X3NldHMsIDEpOworCisgIGNhbGN1bGF0ZV9kb21pbmFuY2VfaW5mbyAoQ0RJ X1BPU1RfRE9NSU5BVE9SUyk7CisgIGNhbGN1bGF0ZV9kb21pbmFuY2VfaW5m byAoQ0RJX0RPTUlOQVRPUlMpOworCisgIGJpdG1hcF9vYnN0YWNrX2luaXRp YWxpemUgKCZncmFuZF9iaXRtYXBfb2JzdGFjayk7CisgIHBoaV90cmFuc2xh dGVfdGFibGUgPSBodGFiX2NyZWF0ZSAoNTExMCwgZXhwcl9wcmVkX3RyYW5z X2hhc2gsCisJCQkJICAgICBleHByX3ByZWRfdHJhbnNfZXEsIGZyZWUpOwor ICBleHByZXNzaW9uX3RvX2lkID0gaHRhYl9jcmVhdGUgKG51bV9zc2FfbmFt ZXMgKiAzLAorCQkJCSAgcHJlX2V4cHJfaGFzaCwKKwkJCQkgIHByZV9leHBy X2VxLCBOVUxMKTsKKyAgc2Vlbl9kdXJpbmdfdHJhbnNsYXRlID0gQklUTUFQ X0FMTE9DICgmZ3JhbmRfYml0bWFwX29ic3RhY2spOworICBiaXRtYXBfc2V0 X3Bvb2wgPSBjcmVhdGVfYWxsb2NfcG9vbCAoIkJpdG1hcCBzZXRzIiwKKwkJ CQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgYml0bWFwX3NldCksIDMwKTsKKyAg cHJlX2V4cHJfcG9vbCA9IGNyZWF0ZV9hbGxvY19wb29sICgicHJlX2V4cHIg bm9kZXMiLAorCQkJCSAgICAgc2l6ZW9mIChzdHJ1Y3QgcHJlX2V4cHJfZCks IDMwKTsKKyAgRk9SX0FMTF9CQiAoYmIpCisgICAgeworICAgICAgRVhQX0dF TiAoYmIpID0gYml0bWFwX3NldF9uZXcgKCk7CisgICAgICBQSElfR0VOIChi YikgPSBiaXRtYXBfc2V0X25ldyAoKTsKKyAgICAgIFRNUF9HRU4gKGJiKSA9 IGJpdG1hcF9zZXRfbmV3ICgpOworICAgICAgQVZBSUxfT1VUIChiYikgPSBi aXRtYXBfc2V0X25ldyAoKTsKKyAgICB9CisgIG1heGltYWxfc2V0ID0gaW5f ZnJlID8gTlVMTCA6IGJpdG1hcF9zZXRfbmV3ICgpOworCisgIG5lZWRfZWhf Y2xlYW51cCA9IEJJVE1BUF9BTExPQyAoTlVMTCk7Cit9CisKKworLyogRGVh bGxvY2F0ZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBieSBQUkUuICAqLworCitz dGF0aWMgdm9pZAorZmluaV9wcmUgKHZvaWQpCit7CisgIGJhc2ljX2Jsb2Nr IGJiOworCisgIGZyZWUgKHBvc3RvcmRlcik7CisgIFZFQ19mcmVlIChiaXRt YXBfc2V0X3QsIGhlYXAsIHZhbHVlX2V4cHJlc3Npb25zKTsKKyAgVkVDX2Zy ZWUgKHRyZWUsIGhlYXAsIGluc2VydGVkX2V4cHJzKTsKKyAgVkVDX2ZyZWUg KHRyZWUsIGhlYXAsIG5lZWRfY3JlYXRpb24pOworICBiaXRtYXBfb2JzdGFj a19yZWxlYXNlICgmZ3JhbmRfYml0bWFwX29ic3RhY2spOworICBmcmVlX2Fs bG9jX3Bvb2wgKGJpdG1hcF9zZXRfcG9vbCk7CisgIGZyZWVfYWxsb2NfcG9v bCAocHJlX2V4cHJfcG9vbCk7CisgIGh0YWJfZGVsZXRlIChwaGlfdHJhbnNs YXRlX3RhYmxlKTsKKyAgaHRhYl9kZWxldGUgKGV4cHJlc3Npb25fdG9faWQp OworICByZW1vdmVfZmFrZV9leGl0X2VkZ2VzICgpOworICAKKyAgRk9SX0FM TF9CQiAoYmIpCisgICAgeworICAgICAgZnJlZSAoYmItPmF1eCk7CisgICAg ICBiYi0+YXV4ID0gTlVMTDsKKyAgICB9CisKKyAgZnJlZV9kb21pbmFuY2Vf aW5mbyAoQ0RJX1BPU1RfRE9NSU5BVE9SUyk7CisKKyAgaWYgKCFiaXRtYXBf ZW1wdHlfcCAobmVlZF9laF9jbGVhbnVwKSkKKyAgICB7CisgICAgICB0cmVl X3B1cmdlX2FsbF9kZWFkX2VoX2VkZ2VzIChuZWVkX2VoX2NsZWFudXApOwor ICAgICAgY2xlYW51cF90cmVlX2NmZyAoKTsKKyAgICB9CisKKyAgQklUTUFQ X0ZSRUUgKG5lZWRfZWhfY2xlYW51cCk7CisKKyAgaWYgKGN1cnJlbnRfbG9v cHMgIT0gTlVMTCkKKyAgICBsb29wX29wdGltaXplcl9maW5hbGl6ZSAoKTsK K30KKworLyogTWFpbiBlbnRyeSBwb2ludCB0byB0aGUgU1NBLVBSRSBwYXNz LiAgRE9fRlJFIGlzIHRydWUgaWYgdGhlIGNhbGxlcgorICAgb25seSB3YW50 cyB0byBkbyBmdWxsIHJlZHVuZGFuY3kgZWxpbWluYXRpb24uICAqLworCitz dGF0aWMgdW5zaWduZWQgaW50CitleGVjdXRlX3ByZSAoYm9vbCBkb19mcmUp Cit7CisgIHVuc2lnbmVkIGludCB0b2RvID0gMDsKKworICBkb19wYXJ0aWFs X3BhcnRpYWwgPSBvcHRpbWl6ZSA+IDI7CisKKyAgLyogVGhpcyBoYXMgdG8g aGFwcGVuIGJlZm9yZSBTQ0NWTiBydW5zIGJlY2F1c2UKKyAgICAgbG9vcF9v cHRpbWl6ZXJfaW5pdCBtYXkgY3JlYXRlIG5ldyBwaGlzLCBldGMuICAqLwog ICBpZiAoIWRvX2ZyZSkKICAgICBsb29wX29wdGltaXplcl9pbml0IChMT09Q U19OT1JNQUwpOwotCi0gIGNvbm5lY3RfaW5maW5pdGVfbG9vcHNfdG9fZXhp dCAoKTsKLSAgbWVtc2V0ICgmcHJlX3N0YXRzLCAwLCBzaXplb2YgKHByZV9z dGF0cykpOwotCi0gIGNhbGN1bGF0ZV9kb21pbmFuY2VfaW5mbyAoQ0RJX1BP U1RfRE9NSU5BVE9SUyk7Ci0gIGNhbGN1bGF0ZV9kb21pbmFuY2VfaW5mbyAo Q0RJX0RPTUlOQVRPUlMpOwotCi0gIGluaXRfYW50aWMgKCk7Ci0KLSAgbmVl ZF9laF9jbGVhbnVwID0gQklUTUFQX0FMTE9DIChOVUxMKTsKLX0KLQotCi0v KiBEZWFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IFBSRS4gICov Ci0KLXN0YXRpYyB2b2lkCi1maW5pX3ByZSAodm9pZCkKLXsKLSAgdW5zaWdu ZWQgaW50IGk7Ci0KLSAgVkVDX2ZyZWUgKHRyZWUsIGhlYXAsIGluc2VydGVk X2V4cHJzKTsKLSAgVkVDX2ZyZWUgKHRyZWUsIGhlYXAsIG5lZWRfY3JlYXRp b24pOwotICBodGFiX2RlbGV0ZSAocGhpX3RyYW5zbGF0ZV90YWJsZSk7Ci0g IHJlbW92ZV9mYWtlX2V4aXRfZWRnZXMgKCk7Ci0KLSAgZmluaV9hbnRpYyAo KTsKLQotICBmcmVlX2RvbWluYW5jZV9pbmZvIChDRElfUE9TVF9ET01JTkFU T1JTKTsKLQotICBpZiAoIWJpdG1hcF9lbXB0eV9wIChuZWVkX2VoX2NsZWFu dXApKQotICAgIHsKLSAgICAgIHRyZWVfcHVyZ2VfYWxsX2RlYWRfZWhfZWRn ZXMgKG5lZWRfZWhfY2xlYW51cCk7Ci0gICAgICBjbGVhbnVwX3RyZWVfY2Zn ICgpOwotICAgIH0KLQotICBCSVRNQVBfRlJFRSAobmVlZF9laF9jbGVhbnVw KTsKLQotICAvKiBXaXBlIG91dCBwb2ludGVycyB0byBWQUxVRV9IQU5ETEVz LiAgSW4gdGhlIG5vdCB0ZXJyaWJseSBkaXN0YW50Ci0gICAgIGZ1dHVyZSB3 ZSB3aWxsIHdhbnQgdGhlbSB0byBiZSBwZXJzaXN0ZW50IHRob3VnaC4gICov Ci0gIGZvciAoaSA9IDA7IGkgPCBudW1fc3NhX25hbWVzOyBpKyspCi0gICAg ewotICAgICAgdHJlZSBuYW1lID0gc3NhX25hbWUgKGkpOwotCi0gICAgICBp ZiAoIW5hbWUpCi0JY29udGludWU7Ci0KLSAgICAgIGlmIChTU0FfTkFNRV9W QUxVRSAobmFtZSkKLQkgICYmIFRSRUVfQ09ERSAoU1NBX05BTUVfVkFMVUUg KG5hbWUpKSA9PSBWQUxVRV9IQU5ETEUpCi0JU1NBX05BTUVfVkFMVUUgKG5h bWUpID0gTlVMTDsKLSAgICB9Ci0gIGlmIChjdXJyZW50X2xvb3BzICE9IE5V TEwpCi0gICAgbG9vcF9vcHRpbWl6ZXJfZmluYWxpemUgKCk7Ci19Ci0KLS8q IE1haW4gZW50cnkgcG9pbnQgdG8gdGhlIFNTQS1QUkUgcGFzcy4gIERPX0ZS RSBpcyB0cnVlIGlmIHRoZSBjYWxsZXIKLSAgIG9ubHkgd2FudHMgdG8gZG8g ZnVsbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uLiAgKi8KLQotc3RhdGljIHVu c2lnbmVkIGludAotZXhlY3V0ZV9wcmUgKGJvb2wgZG9fZnJlKQotewotICB1 bnNpZ25lZCBpbnQgdG9kbyA9IDA7Ci0KLSAgZG9fcGFydGlhbF9wYXJ0aWFs ID0gb3B0aW1pemUgPiAyOwotICBpbml0X3ByZSAoZG9fZnJlKTsKLQotICBp ZiAoIWRvX2ZyZSkKKyAgaWYgKDAgJiYgIWRvX2ZyZSkKICAgICBpbnNlcnRf ZmFrZV9zdG9yZXMgKCk7CiAKLSAgLyogQ29sbGVjdCBhbmQgdmFsdWUgbnVt YmVyIGV4cHJlc3Npb25zIGNvbXB1dGVkIGluIGVhY2ggYmFzaWMgYmxvY2su ICAqLwogICBpZiAoIXJ1bl9zY2Nfdm4gKGRvX2ZyZSkpCiAgICAgewogICAg ICAgaWYgKCFkb19mcmUpCiAJcmVtb3ZlX2RlYWRfaW5zZXJ0ZWRfY29kZSAo KTsKLSAgICAgIGZpbmlfcHJlICgpOwogICAgICAgcmV0dXJuIDA7CiAgICAg fQotICBzd2l0Y2hfdG9fUFJFX3RhYmxlICgpOworICBpbml0X3ByZSAoZG9f ZnJlKTsKKworCisgIC8qIENvbGxlY3QgYW5kIHZhbHVlIG51bWJlciBleHBy ZXNzaW9ucyBjb21wdXRlZCBpbiBlYWNoIGJhc2ljIGJsb2NrLiAgKi8KICAg Y29tcHV0ZV9hdmFpbCAoKTsKIAogICBpZiAoZHVtcF9maWxlICYmIChkdW1w X2ZsYWdzICYgVERGX0RFVEFJTFMpKQpAQCAtNDAzMiwxNiArNDE2Niw2IEBA CiAgIGlmICghZG9fZnJlICYmIG5fYmFzaWNfYmxvY2tzIDwgNDAwMCkKICAg ICB7CiAgICAgICBjb21wdXRlX2FudGljICgpOwotICBpZiAoZHVtcF9maWxl ICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQotICAgIHsKLSAgICAg IGJhc2ljX2Jsb2NrIGJiOwotCi0gICAgICBGT1JfQUxMX0JCIChiYikKLQl7 Ci0JICBwcmludF9iaXRtYXBfc2V0IChkdW1wX2ZpbGUsIEFOVElDX0lOIChi YiksICJhbnRpY19pbiIsIGJiLT5pbmRleCk7Ci0JfQotICAgIH0KLQogICAg ICAgaW5zZXJ0ICgpOwogICAgIH0KIApAQCAtNDA2MCw3ICs0MTg0LDggQEAK ICAgaWYgKCFkb19mcmUpCiAgICAgewogICAgICAgcmVtb3ZlX2RlYWRfaW5z ZXJ0ZWRfY29kZSAoKTsKLSAgICAgIHJlYWxpZnlfZmFrZV9zdG9yZXMgKCk7 CisgICAgICBpZiAoMCkKKwlyZWFsaWZ5X2Zha2Vfc3RvcmVzICgpOwogICAg IH0KIAogICBmaW5pX3ByZSAoKTsKZGlmZiAtciAyMzI1MzMwY2U5ZWQgZ2Nj L3RyZWUtc3NhLXNjY3ZuLmMKLS0tIGEvZ2NjL3RyZWUtc3NhLXNjY3ZuLmMJ U3VuIEp1bCAwNiAwMDoxNjozMCAyMDA4ICswMDAwCisrKyBiL2djYy90cmVl LXNzYS1zY2N2bi5jCVN1biBKdWwgMDYgMTU6Mjg6MTkgMjAwOCAtMDQwMApA QCAtMTE1LDcyICsxMTUsOSBAQAogICBhbGxvY19wb29sIHJlZmVyZW5jZXNf cG9vbDsKIH0gKnZuX3RhYmxlc190OwogCi0vKiBOYXJ5IG9wZXJhdGlvbnMg aW4gdGhlIGhhc2h0YWJsZSBjb25zaXN0IG9mIGxlbmd0aCBvcGVyYW5kcywg YW4KLSAgIG9wY29kZSwgYW5kIGEgdHlwZS4gIFJlc3VsdCBpcyB0aGUgdmFs dWUgbnVtYmVyIG9mIHRoZSBvcGVyYXRpb24sCi0gICBhbmQgaGFzaGNvZGUg aXMgc3RvcmVkIHRvIGF2b2lkIGhhdmluZyB0byBjYWxjdWxhdGUgaXQKLSAg IHJlcGVhdGVkbHkuICAqLworc3RhdGljIGh0YWJfdCBjb25zdGFudF90b192 YWx1ZV9pZDsKK3N0YXRpYyBiaXRtYXAgY29uc3RhbnRfdmFsdWVfaWRzOwog Ci10eXBlZGVmIHN0cnVjdCB2bl9uYXJ5X29wX3MKLXsKLSAgRU5VTV9CSVRG SUVMRCh0cmVlX2NvZGUpIG9wY29kZSA6IDE2OwotICB1bnNpZ25lZCBsZW5n dGggOiAxNjsKLSAgaGFzaHZhbF90IGhhc2hjb2RlOwotICB0cmVlIHJlc3Vs dDsKLSAgdHJlZSB0eXBlOwotICB0cmVlIG9wWzRdOwotfSAqdm5fbmFyeV9v cF90OwotdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgdm5fbmFyeV9vcF9zICpjb25z dF92bl9uYXJ5X29wX3Q7Ci0KLS8qIFBoaSBub2RlcyBpbiB0aGUgaGFzaHRh YmxlIGNvbnNpc3Qgb2YgdGhlaXIgbm9uLVZOX1RPUCBwaGkKLSAgIGFyZ3Vt ZW50cywgYW5kIHRoZSBiYXNpYyBibG9jayB0aGUgcGhpIGlzIGluLiBSZXN1 bHQgaXMgdGhlIHZhbHVlCi0gICBudW1iZXIgb2YgdGhlIG9wZXJhdGlvbiwg YW5kIGhhc2hjb2RlIGlzIHN0b3JlZCB0byBhdm9pZCBoYXZpbmcgdG8KLSAg IGNhbGN1bGF0ZSBpdCByZXBlYXRlZGx5LiAgUGhpIG5vZGVzIG5vdCBpbiB0 aGUgc2FtZSBibG9jayBhcmUgbmV2ZXIKLSAgIGNvbnNpZGVyZWQgZXF1aXZh bGVudC4gICovCi0KLXR5cGVkZWYgc3RydWN0IHZuX3BoaV9zCi17Ci0gIFZF QyAodHJlZSwgaGVhcCkgKnBoaWFyZ3M7Ci0gIGJhc2ljX2Jsb2NrIGJsb2Nr OwotICBoYXNodmFsX3QgaGFzaGNvZGU7Ci0gIHRyZWUgcmVzdWx0OwotfSAq dm5fcGhpX3Q7Ci10eXBlZGVmIGNvbnN0IHN0cnVjdCB2bl9waGlfcyAqY29u c3Rfdm5fcGhpX3Q7Ci0KLS8qIFJlZmVyZW5jZSBvcGVyYW5kcyBvbmx5IGV4 aXN0IGluIHJlZmVyZW5jZSBvcGVyYXRpb25zIHN0cnVjdHVyZXMuCi0gICBU aGV5IGNvbnNpc3Qgb2YgYW4gb3Bjb2RlLCB0eXBlLCBhbmQgc29tZSBudW1i ZXIgb2Ygb3BlcmFuZHMuICBGb3IKLSAgIGEgZ2l2ZW4gb3Bjb2RlLCBzb21l LCBhbGwsIG9yIG5vbmUgb2YgdGhlIG9wZXJhbmRzIG1heSBiZSB1c2VkLgot ICAgVGhlIG9wZXJhbmRzIGFyZSB0aGVyZSB0byBzdG9yZSB0aGUgaW5mb3Jt YXRpb24gdGhhdCBtYWtlcyB1cCB0aGUKLSAgIHBvcnRpb24gb2YgdGhlIGFk ZHJlc3NpbmcgY2FsY3VsYXRpb24gdGhhdCBvcGNvZGUgcGVyZm9ybXMuICAq LwotCi10eXBlZGVmIHN0cnVjdCB2bl9yZWZlcmVuY2Vfb3Bfc3RydWN0Ci17 Ci0gIGVudW0gdHJlZV9jb2RlIG9wY29kZTsKLSAgdHJlZSB0eXBlOwotICB0 cmVlIG9wMDsKLSAgdHJlZSBvcDE7Ci19IHZuX3JlZmVyZW5jZV9vcF9zOwot dHlwZWRlZiB2bl9yZWZlcmVuY2Vfb3BfcyAqdm5fcmVmZXJlbmNlX29wX3Q7 Ci10eXBlZGVmIGNvbnN0IHZuX3JlZmVyZW5jZV9vcF9zICpjb25zdF92bl9y ZWZlcmVuY2Vfb3BfdDsKLQotREVGX1ZFQ19PKHZuX3JlZmVyZW5jZV9vcF9z KTsKLURFRl9WRUNfQUxMT0NfTyh2bl9yZWZlcmVuY2Vfb3BfcywgaGVhcCk7 Ci0KLS8qIEEgcmVmZXJlbmNlIG9wZXJhdGlvbiBpbiB0aGUgaGFzaHRhYmxl IGlzIHJlcHJlc2VudGF0aW9uIGFzIGEKLSAgIGNvbGxlY3Rpb24gb2YgdnVz ZXMsIHJlcHJlc2VudGluZyB0aGUgbWVtb3J5IHN0YXRlIGF0IHRoZSB0aW1l IG9mCi0gICB0aGUgb3BlcmF0aW9uLCBhbmQgYSBjb2xsZWN0aW9uIG9mIG9w ZXJhbmRzIHRoYXQgbWFrZSB1cCB0aGUKLSAgIGFkZHJlc3NpbmcgY2FsY3Vs YXRpb24uICBJZiB0d28gdm5fcmVmZXJlbmNlX3QncyBoYXZlIHRoZSBzYW1l IHNldAotICAgb2Ygb3BlcmFuZHMsIHRoZXkgYWNjZXNzIHRoZSBzYW1lIG1l bW9yeSBsb2NhdGlvbi4gV2UgYWxzbyBzdG9yZQotICAgdGhlIHJlc3VsdGlu ZyB2YWx1ZSBudW1iZXIsIGFuZCB0aGUgaGFzaGNvZGUuICBUaGUgdnVzZXMg YXJlCi0gICBhbHdheXMgc3RvcmVkIGluIG9yZGVyIHNvcnRlZCBieSBzc2Eg bmFtZSB2ZXJzaW9uLiAgKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgdm5fcmVmZXJl bmNlX3MKLXsKLSAgVkVDICh0cmVlLCBnYykgKnZ1c2VzOwotICBWRUMgKHZu X3JlZmVyZW5jZV9vcF9zLCBoZWFwKSAqb3BlcmFuZHM7Ci0gIGhhc2h2YWxf dCBoYXNoY29kZTsKLSAgdHJlZSByZXN1bHQ7Ci19ICp2bl9yZWZlcmVuY2Vf dDsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IHZuX3JlZmVyZW5jZV9zICpjb25z dF92bl9yZWZlcmVuY2VfdDsKIAogLyogVmFsaWQgaGFzaHRhYmxlcyBzdG9y aW5nIGluZm9ybWF0aW9uIHdlIGhhdmUgcHJvdmVuIHRvIGJlCiAgICBjb3Jy ZWN0LiAgKi8KQEAgLTIxNSw2ICsxNTIsMTAgQEAKIAogdHJlZSBWTl9UT1A7 CiAKKy8qIFVuaXF1ZSBjb3VudGVyIGZvciBvdXIgdmFsdWUgaWRzLiAgKi8K Kworc3RhdGljIHVuc2lnbmVkIGludCBuZXh0X3ZhbHVlX2lkOworCiAvKiBO ZXh0IERGUyBudW1iZXIgYW5kIHRoZSBzdGFjayBmb3Igc3Ryb25nbHkgY29u bmVjdGVkIGNvbXBvbmVudAogICAgZGV0ZWN0aW9uLiAqLwogCkBAIC0yMzks OCArMTgwLDEwIEBACiB2bl9zc2FfYXV4X3QKIFZOX0lORk8gKHRyZWUgbmFt ZSkKIHsKLSAgcmV0dXJuIFZFQ19pbmRleCAodm5fc3NhX2F1eF90LCB2bl9z c2FfYXV4X3RhYmxlLAotCQkgICAgU1NBX05BTUVfVkVSU0lPTiAobmFtZSkp OworICB2bl9zc2FfYXV4X3QgcmVzID0gVkVDX2luZGV4ICh2bl9zc2FfYXV4 X3QsIHZuX3NzYV9hdXhfdGFibGUsCisJCQkJU1NBX05BTUVfVkVSU0lPTiAo bmFtZSkpOworICBnY2NfYXNzZXJ0IChyZXMpOworICByZXR1cm4gcmVzOwog fQogCiAvKiBTZXQgdGhlIHZhbHVlIG51bWJlcmluZyBpbmZvIGZvciBhIGdp dmVuIFNTQSBuYW1lIHRvIGEgZ2l2ZW4KQEAgLTI4OCw2ICsyMzEsNTggQEAK IHsKICAgdm5fcmVmZXJlbmNlX3QgdnIgPSAodm5fcmVmZXJlbmNlX3QpIHZw OwogICBWRUNfZnJlZSAodm5fcmVmZXJlbmNlX29wX3MsIGhlYXAsIHZyLT5v cGVyYW5kcyk7Cit9CisKKy8qIEhhc2ggdGFibGUgZXF1YWxpdHkgZnVuY3Rp b24gZm9yIHZuX2NvbnN0YW50X3QuICAqLworCitzdGF0aWMgaW50Cit2bl9j b25zdGFudF9lcSAoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQor eworICBjb25zdCBzdHJ1Y3Qgdm5fY29uc3RhbnRfcyAqdmMxID0gKGNvbnN0 IHN0cnVjdCB2bl9jb25zdGFudF9zICopIHAxOworICBjb25zdCBzdHJ1Y3Qg dm5fY29uc3RhbnRfcyAqdmMyID0gKGNvbnN0IHN0cnVjdCB2bl9jb25zdGFu dF9zICopIHAyOworCisgIHJldHVybiBleHByZXNzaW9uc19lcXVhbF9wICh2 YzEtPmNvbnN0YW50LCB2YzItPmNvbnN0YW50KTsKK30KKworLyogSGFzaCB0 YWJsZSBoYXNoIGZ1bmN0aW9uIGZvciB2bl9jb25zdGFudF90LiAgKi8KKyAg IAorc3RhdGljIGhhc2h2YWxfdAordm5fY29uc3RhbnRfaGFzaCAoY29uc3Qg dm9pZCAqcDEpCit7CisgIGNvbnN0IHN0cnVjdCB2bl9jb25zdGFudF9zICp2 YzEgPSAoY29uc3Qgc3RydWN0IHZuX2NvbnN0YW50X3MgKikgcDE7CisgIHJl dHVybiB2YzEtPmhhc2hjb2RlOworfQorCisvKiBMb29rdXAgYSB2YWx1ZSBp ZCBmb3IgQ09OU1RBTlQsIGFuZCBpZiBpdCBkb2VzIG5vdCBleGlzdCwgY3Jl YXRlIGEKKyAgIG5ldyBvbmUgYW5kIHJldHVybiBpdC4gIElmIGl0IGRvZXMg ZXhpc3QsIHJldHVybiBpdC4gICovCisKK3Vuc2lnbmVkIGludAorZ2V0X29y X2FsbG9jX2NvbnN0YW50X3ZhbHVlX2lkICh0cmVlIGNvbnN0YW50KQorewor ICB2b2lkICoqc2xvdDsKKyAgdm5fY29uc3RhbnRfdCB2YyA9IFhORVcgKHN0 cnVjdCB2bl9jb25zdGFudF9zKTsKKyAgCisgIHZjLT5oYXNoY29kZSA9IGl0 ZXJhdGl2ZV9oYXNoX2V4cHIgKGNvbnN0YW50LCAwKTsKKyAgdmMtPmNvbnN0 YW50ID0gY29uc3RhbnQ7CisgIHNsb3QgPSBodGFiX2ZpbmRfc2xvdF93aXRo X2hhc2ggKGNvbnN0YW50X3RvX3ZhbHVlX2lkLCB2YywKKwkJCQkgICB2Yy0+ aGFzaGNvZGUsIElOU0VSVCk7ICAKKyAgaWYgKCpzbG90KQorICAgIHsKKyAg ICAgIGZyZWUgKHZjKTsKKyAgICAgIHJldHVybiAoKHZuX2NvbnN0YW50X3Qp KnNsb3QpLT52YWx1ZV9pZDsKKyAgICB9CisgIHZjLT52YWx1ZV9pZCA9IGdl dF9uZXh0X3ZhbHVlX2lkICgpOworICAqc2xvdCA9IHZjOworICBiaXRtYXBf c2V0X2JpdCAoY29uc3RhbnRfdmFsdWVfaWRzLCB2Yy0+dmFsdWVfaWQpOwor ICByZXR1cm4gdmMtPnZhbHVlX2lkOworfQorCisvKiBSZXR1cm4gdHJ1ZSBp ZiBWIGlzIGEgdmFsdWUgaWQgZm9yIGEgY29uc3RhbnQuICAqLworCitib29s Cit2YWx1ZV9pZF9jb25zdGFudF9wICh1bnNpZ25lZCBpbnQgdikKK3sKKyAg cmV0dXJuIGJpdG1hcF9iaXRfcCAoY29uc3RhbnRfdmFsdWVfaWRzLCB2KTsg IAogfQogCiAvKiBDb21wYXJlIHR3byByZWZlcmVuY2Ugb3BlcmFuZHMgUDEg YW5kIFAyIGZvciBlcXVhbGl0eS4gIFJldHVybiB0cnVlIGlmCkBAIC0zMjQs NyArMzE5LDcgQEAKIAogLyogQ29tcHV0ZSBhIGhhc2ggZm9yIHRoZSByZWZl cmVuY2Ugb3BlcmF0aW9uIFZSMSBhbmQgcmV0dXJuIGl0LiAgKi8KIAotc3Rh dGljIGlubGluZSBoYXNodmFsX3QKK2hhc2h2YWxfdAogdm5fcmVmZXJlbmNl X2NvbXB1dGVfaGFzaCAoY29uc3Qgdm5fcmVmZXJlbmNlX3QgdnIxKQogewog ICBoYXNodmFsX3QgcmVzdWx0ID0gMDsKQEAgLTM0Myw3ICszMzgsNyBAQAog LyogUmV0dXJuIHRydWUgaWYgcmVmZXJlbmNlIG9wZXJhdGlvbnMgUDEgYW5k IFAyIGFyZSBlcXVpdmFsZW50LiAgVGhpcwogICAgbWVhbnMgdGhleSBoYXZl IHRoZSBzYW1lIHNldCBvZiBvcGVyYW5kcyBhbmQgdnVzZXMuICAqLwogCi1z dGF0aWMgaW50CitpbnQKIHZuX3JlZmVyZW5jZV9lcSAoY29uc3Qgdm9pZCAq cDEsIGNvbnN0IHZvaWQgKnAyKQogewogICB0cmVlIHY7CkBAIC00ODQsMTAg KzQ3OSwxOCBAQAogICAgICAgdGVtcC50eXBlID0gVFJFRV9UWVBFIChyZWYp OwogICAgICAgdGVtcC5vcGNvZGUgPSBDQUxMX0VYUFI7CiAgICAgICBWRUNf c2FmZV9wdXNoICh2bl9yZWZlcmVuY2Vfb3BfcywgaGVhcCwgKnJlc3VsdCwg JnRlbXApOworICAgICAgCisgICAgICAvKiBXZSBtYWtlIG5vIGF0dGVtcHQg dG8gc2ltcGxpZnkgdGhlIGNhbGxlZCBmdW5jdGlvbiBiZWNhdXNlCisgICAg ICB0aGUgdHlwaWNhbCAmRlVOQ1RJT05fREVDTCBmb3JtIGlzIGFsc28gdXNl ZCBpbiBmdW5jdGlvbiBwb2ludGVyCisgICAgICBjYXNlcyB0aGF0IGJlY29t ZSBjb25zdGFudC4gIElmIHdlIHNpbXBsaWZ5IHRoZSBvcmlnaW5hbCB0bwor ICAgICAgRlVOQ1RJT05fREVDTCBidXQgbm90IHRoZSBmdW5jdGlvbiBwb2lu dGVyIGNhc2UgKHdoaWNoIGNhbgorICAgICAgaGFwcGVuIGJlY2F1c2Ugd2Ug aGF2ZSBubyBmb2xkIGZ1bmN0aW9ucyB0aGF0IG9wZXJhdGUgb24KKyAgICAg IHZuX3JlZmVyZW5jZV90KSwgd2Ugd2lsbCBjbGFpbSB0aGV5IGFyZSBub3Qg ZXF1aXZhbGVudC4KIAotICAgICAgY2FsbGZuID0gZ2V0X2NhbGxlZV9mbmRl Y2wgKHJlZik7Ci0gICAgICBpZiAoIWNhbGxmbikKLQljYWxsZm4gPSBDQUxM X0VYUFJfRk4gKHJlZik7CisgICAgICBBbiBleGFtcGxlIG9mIHRoaXMgYmVo YXZpb3IgY2FuIGJlIHNlZSBpZiBDQUxMX0VYUFJfRk4gYmVsb3cgaXMKKyAg ICAgIHJlcGxhY2VkIHdpdGggZ2V0X2NhbGxlZV9mbmRlY2wgYW5kIGdjYy5k Zy90cmVlLXNzYS9zc2EtcHJlLTEzLmMKKyAgICAgIGlzIGNvbXBpbGVkLiAg Ki8KKyAgICAgIGNhbGxmbiA9IENBTExfRVhQUl9GTiAocmVmKTsKICAgICAg IHRlbXAudHlwZSA9IFRSRUVfVFlQRSAoY2FsbGZuKTsKICAgICAgIHRlbXAu b3Bjb2RlID0gVFJFRV9DT0RFIChjYWxsZm4pOwogICAgICAgdGVtcC5vcDAg PSBjYWxsZm47CkBAIC01NTQsNiArNTU3LDcgQEAKIAkgICAgIGEgbWF0Y2hp bmcgdHlwZSBpcyBub3QgbmVjZXNzYXJ5IGFuZCBhIG1pc21hdGNoaW5nIHR5 cGUKIAkgICAgIGlzIGFsd2F5cyBhIHNwdXJpb3VzIGRpZmZlcmVuY2UuICAq LwogCSAgdGVtcC50eXBlID0gTlVMTF9UUkVFOworI2lmIEZJWE1FCiAJICAv KiBJZiB0aGlzIGlzIGEgcmVmZXJlbmNlIHRvIGEgdW5pb24gbWVtYmVyLCBy ZWNvcmQgdGhlIHVuaW9uCiAJICAgICBtZW1iZXIgc2l6ZSBhcyBvcGVyYW5k LiAgRG8gc28gb25seSBpZiB3ZSBhcmUgZG9pbmcKIAkgICAgIGV4cHJlc3Np b24gaW5zZXJ0aW9uIChkdXJpbmcgRlJFKSwgYXMgUFJFIGN1cnJlbnRseSBn ZXRzCkBAIC01NjQsMTQgKzU2OCwxNyBAQAogCSAgICAgICYmIGludGVnZXJf emVyb3AgKERFQ0xfRklFTERfQklUX09GRlNFVCAoVFJFRV9PUEVSQU5EIChy ZWYsIDEpKSkpCiAJICAgIHRlbXAub3AwID0gVFlQRV9TSVpFIChUUkVFX1RZ UEUgKFRSRUVfT1BFUkFORCAocmVmLCAxKSkpOwogCSAgZWxzZQorI2VuZGlm CiAJICAgIC8qIFJlY29yZCBmaWVsZCBhcyBvcGVyYW5kLiAgKi8KIAkgICAg dGVtcC5vcDAgPSBUUkVFX09QRVJBTkQgKHJlZiwgMSk7CisJICAgIHRlbXAu b3AxID0gVFJFRV9PUEVSQU5EIChyZWYsIDIpOwkgIAogCSAgYnJlYWs7CiAJ Y2FzZSBBUlJBWV9SQU5HRV9SRUY6CiAJY2FzZSBBUlJBWV9SRUY6CiAJICAv KiBSZWNvcmQgaW5kZXggYXMgb3BlcmFuZC4gICovCiAJICB0ZW1wLm9wMCA9 IFRSRUVfT1BFUkFORCAocmVmLCAxKTsKLQkgIHRlbXAub3AxID0gVFJFRV9P UEVSQU5EIChyZWYsIDMpOworCSAgdGVtcC5vcDEgPSBUUkVFX09QRVJBTkQg KHJlZiwgMik7CisJICB0ZW1wLm9wMiA9IFRSRUVfT1BFUkFORCAocmVmLCAz KTsKIAkgIGJyZWFrOwogCWNhc2UgU1RSSU5HX0NTVDoKIAljYXNlIElOVEVH RVJfQ1NUOgpAQCAtNTc5LDcgKzU4Niw2IEBACiAJY2FzZSBWRUNUT1JfQ1NU OgogCWNhc2UgUkVBTF9DU1Q6CiAJY2FzZSBDT05TVFJVQ1RPUjoKLQljYXNl IFZBTFVFX0hBTkRMRToKIAljYXNlIFZBUl9ERUNMOgogCWNhc2UgUEFSTV9E RUNMOgogCWNhc2UgQ09OU1RfREVDTDoKQEAgLTY1Myw3ICs2NTksMTQgQEAK ICAgICB7CiAgICAgICBpZiAodnJvLT5vcGNvZGUgPT0gU1NBX05BTUUKIAkg IHx8ICh2cm8tPm9wMCAmJiBUUkVFX0NPREUgKHZyby0+b3AwKSA9PSBTU0Ff TkFNRSkpCi0JdnJvLT5vcDAgPSBTU0FfVkFMICh2cm8tPm9wMCk7CisJewor CSAgdnJvLT5vcDAgPSBTU0FfVkFMICh2cm8tPm9wMCk7CisJICAvKiBJZiBp dCB0cmFuc2Zvcm1zIGZyb20gYW4gU1NBX05BTUUgdG8gYSBjb25zdGFudCwg dXBkYXRlCisJICAgICB0aGUgb3Bjb2RlLiAgKi8KKwkgIGlmIChUUkVFX0NP REUgKHZyby0+b3AwKSAhPSBTU0FfTkFNRSAmJiB2cm8tPm9wY29kZSA9PSBT U0FfTkFNRSkKKwkgICAgdnJvLT5vcGNvZGUgPSBUUkVFX0NPREUgKHZyby0+ b3AwKTsKKwl9CisgICAgICAKICAgICB9CiAKICAgcmV0dXJuIG9yaWc7CkBA IC03MzMsMTAgKzc0NiwxMSBAQAogCiAvKiBMb29rdXAgYSBTQ0NWTiByZWZl cmVuY2Ugb3BlcmF0aW9uIFZSIGluIHRoZSBjdXJyZW50IGhhc2ggdGFibGUu CiAgICBSZXR1cm5zIHRoZSByZXN1bHRpbmcgdmFsdWUgbnVtYmVyIGlmIGl0 IGV4aXN0cyBpbiB0aGUgaGFzaCB0YWJsZSwKLSAgIE5VTExfVFJFRSBvdGhl cndpc2UuICAqLworICAgTlVMTF9UUkVFIG90aGVyd2lzZS4gIFZOUkVTVUxU IHdpbGwgYmUgZmlsbGVkIGluIHdpdGggdGhlIGFjdHVhbAorICAgdm5fcmVm ZXJlbmNlX3Qgc3RvcmVkIGluIHRoZSBoYXNodGFibGUgaWYgc29tZXRoaW5n IGlzIGZvdW5kLiAgKi8KIAogc3RhdGljIHRyZWUKLXZuX3JlZmVyZW5jZV9s b29rdXBfMSAodm5fcmVmZXJlbmNlX3QgdnIpCit2bl9yZWZlcmVuY2VfbG9v a3VwXzEgKHZuX3JlZmVyZW5jZV90IHZyLCB2bl9yZWZlcmVuY2VfdCAqdm5y ZXN1bHQpCiB7CiAgIHZvaWQgKipzbG90OwogICBoYXNodmFsX3QgaGFzaDsK QEAgLTc0OCwyNSArNzYyLDU4IEBACiAgICAgc2xvdCA9IGh0YWJfZmluZF9z bG90X3dpdGhfaGFzaCAodmFsaWRfaW5mby0+cmVmZXJlbmNlcywgdnIsCiAJ CQkJICAgICBoYXNoLCBOT19JTlNFUlQpOwogICBpZiAoc2xvdCkKLSAgICBy ZXR1cm4gKCh2bl9yZWZlcmVuY2VfdCkqc2xvdCktPnJlc3VsdDsKLQorICAg IHsKKyAgICAgIGlmICh2bnJlc3VsdCkKKwkqdm5yZXN1bHQgPSAodm5fcmVm ZXJlbmNlX3QpKnNsb3Q7CisgICAgICByZXR1cm4gKCh2bl9yZWZlcmVuY2Vf dCkqc2xvdCktPnJlc3VsdDsKKyAgICB9CisgIAogICByZXR1cm4gTlVMTF9U UkVFOwogfQogCi0vKiBMb29rdXAgT1AgaW4gdGhlIGN1cnJlbnQgaGFzaCB0 YWJsZSwgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nCi0gICB2YWx1ZSBudW1i ZXIgaWYgaXQgZXhpc3RzIGluIHRoZSBoYXNoIHRhYmxlLiAgUmV0dXJuIE5V TExfVFJFRSBpZgotICAgaXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGhhc2gg dGFibGUuICovCisKKy8qIExvb2t1cCBhIHJlZmVyZW5jZSBvcGVyYXRpb24g YnkgaXQncyBwYXJ0cywgaW4gdGhlIGN1cnJlbnQgaGFzaCB0YWJsZS4KKyAg IFJldHVybnMgdGhlIHJlc3VsdGluZyB2YWx1ZSBudW1iZXIgaWYgaXQgZXhp c3RzIGluIHRoZSBoYXNoIHRhYmxlLAorICAgTlVMTF9UUkVFIG90aGVyd2lz ZS4gIFZOUkVTVUxUIHdpbGwgYmUgZmlsbGVkIGluIHdpdGggdGhlIGFjdHVh bAorICAgdm5fcmVmZXJlbmNlX3Qgc3RvcmVkIGluIHRoZSBoYXNodGFibGUg aWYgc29tZXRoaW5nIGlzIGZvdW5kLiAgKi8KIAogdHJlZQotdm5fcmVmZXJl bmNlX2xvb2t1cCAodHJlZSBvcCwgVkVDICh0cmVlLCBnYykgKnZ1c2VzLCBi b29sIG1heXdhbGspCit2bl9yZWZlcmVuY2VfbG9va3VwX3BpZWNlcyAoVkVD ICh0cmVlLCBnYykgKnZ1c2VzLAorCQkJICAgIFZFQyAodm5fcmVmZXJlbmNl X29wX3MsIGhlYXApICpvcGVyYW5kcywKKwkJCSAgICB2bl9yZWZlcmVuY2Vf dCAqdm5yZXN1bHQpIAoreworICBzdHJ1Y3Qgdm5fcmVmZXJlbmNlX3MgdnIx OworICB0cmVlIHJlc3VsdDsKKyAgaWYgKHZucmVzdWx0KQorICAgICp2bnJl c3VsdCA9IE5VTEw7CisgIAorICB2cjEudnVzZXMgPSB2YWx1ZWl6ZV92dXNl cyAodnVzZXMpOworICB2cjEub3BlcmFuZHMgPSB2YWx1ZWl6ZV9yZWZzIChv cGVyYW5kcyk7CisgIHZyMS5oYXNoY29kZSA9IHZuX3JlZmVyZW5jZV9jb21w dXRlX2hhc2ggKCZ2cjEpOworICByZXN1bHQgPSB2bl9yZWZlcmVuY2VfbG9v a3VwXzEgKCZ2cjEsIHZucmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0Owor fQorCisvKiBMb29rdXAgT1AgaW4gdGhlIGN1cnJlbnQgaGFzaCB0YWJsZSwg YW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIHZhbHVlCisgICBudW1iZXIgaWYg aXQgZXhpc3RzIGluIHRoZSBoYXNoIHRhYmxlLiAgUmV0dXJuIE5VTExfVFJF RSBpZiBpdCBkb2VzCisgICBub3QgZXhpc3QgaW4gdGhlIGhhc2ggdGFibGUg b3IgaWYgdGhlIHJlc3VsdCBmaWVsZCBvZiB0aGUgc3RydWN0dXJlCisgICB3 YXMgTlVMTC4uICBWTlJFU1VMVCB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIHRo ZSB2bl9yZWZlcmVuY2VfdAorICAgc3RvcmVkIGluIHRoZSBoYXNodGFibGUg aWYgb25lIGV4aXN0cy4gICovCisKK3RyZWUKK3ZuX3JlZmVyZW5jZV9sb29r dXAgKHRyZWUgb3AsIFZFQyAodHJlZSwgZ2MpICp2dXNlcywgYm9vbCBtYXl3 YWxrLAorCQkgICAgIHZuX3JlZmVyZW5jZV90ICp2bnJlc3VsdCkKIHsKICAg c3RydWN0IHZuX3JlZmVyZW5jZV9zIHZyMTsKICAgdHJlZSByZXN1bHQsIGRl Zl9zdG10OworICBpZiAodm5yZXN1bHQpCisgICAgKnZucmVzdWx0ID0gTlVM TDsKIAogICB2cjEudnVzZXMgPSB2YWx1ZWl6ZV92dXNlcyAodnVzZXMpOwog ICB2cjEub3BlcmFuZHMgPSB2YWx1ZWl6ZV9yZWZzIChzaGFyZWRfcmVmZXJl bmNlX29wc19mcm9tX3JlZiAob3ApKTsKICAgdnIxLmhhc2hjb2RlID0gdm5f cmVmZXJlbmNlX2NvbXB1dGVfaGFzaCAoJnZyMSk7Ci0gIHJlc3VsdCA9IHZu X3JlZmVyZW5jZV9sb29rdXBfMSAoJnZyMSk7CisgIHJlc3VsdCA9IHZuX3Jl ZmVyZW5jZV9sb29rdXBfMSAoJnZyMSwgdm5yZXN1bHQpOwogCiAgIC8qIElm IHRoZXJlIGlzIGEgc2luZ2xlIGRlZmluaW5nIHN0YXRlbWVudCBmb3IgYWxs IHZpcnR1YWwgdXNlcywgd2UgY2FuCiAgICAgIHVzZSB0aGF0LCBmb2xsb3dp bmcgdmlydHVhbCB1c2UtZGVmIGNoYWlucy4gICovCkBAIC03ODYsMjMgKzgz MywyNyBAQAogICAgICAgdmRlZnNfdG9fdmVjIChkZWZfc3RtdCwgJnZ1c2Vz KTsKICAgICAgIHZyMS52dXNlcyA9IHZhbHVlaXplX3Z1c2VzICh2dXNlcyk7 CiAgICAgICB2cjEuaGFzaGNvZGUgPSB2bl9yZWZlcmVuY2VfY29tcHV0ZV9o YXNoICgmdnIxKTsKLSAgICAgIHJlc3VsdCA9IHZuX3JlZmVyZW5jZV9sb29r dXBfMSAoJnZyMSk7CisgICAgICByZXN1bHQgPSB2bl9yZWZlcmVuY2VfbG9v a3VwXzEgKCZ2cjEsIHZucmVzdWx0KTsKICAgICB9CiAKICAgcmV0dXJuIHJl c3VsdDsKIH0KIAorCiAvKiBJbnNlcnQgT1AgaW50byB0aGUgY3VycmVudCBo YXNoIHRhYmxlIHdpdGggYSB2YWx1ZSBudW1iZXIgb2YKLSAgIFJFU1VMVC4g ICovCisgICBSRVNVTFQsIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyByZWZl cmVuY2Ugc3RydWN0dXJlIHdlIGNyZWF0ZWQuICAqLwogCi12b2lkCit2bl9y ZWZlcmVuY2VfdAogdm5fcmVmZXJlbmNlX2luc2VydCAodHJlZSBvcCwgdHJl ZSByZXN1bHQsIFZFQyAodHJlZSwgZ2MpICp2dXNlcykKIHsKICAgdm9pZCAq KnNsb3Q7CiAgIHZuX3JlZmVyZW5jZV90IHZyMTsKIAogICB2cjEgPSAodm5f cmVmZXJlbmNlX3QpIHBvb2xfYWxsb2MgKGN1cnJlbnRfaW5mby0+cmVmZXJl bmNlc19wb29sKTsKLQorICBpZiAoVFJFRV9DT0RFIChyZXN1bHQpID09IFNT QV9OQU1FKQorICAgIHZyMS0+dmFsdWVfaWQgPSBWTl9JTkZPIChyZXN1bHQp LT52YWx1ZV9pZDsKKyAgZWxzZQorICAgIHZyMS0+dmFsdWVfaWQgPSBnZXRf b3JfYWxsb2NfY29uc3RhbnRfdmFsdWVfaWQgKHJlc3VsdCk7CiAgIHZyMS0+ dnVzZXMgPSB2YWx1ZWl6ZV92dXNlcyAodnVzZXMpOwogICB2cjEtPm9wZXJh bmRzID0gdmFsdWVpemVfcmVmcyAoY3JlYXRlX3JlZmVyZW5jZV9vcHNfZnJv bV9yZWYgKG9wKSk7CiAgIHZyMS0+aGFzaGNvZGUgPSB2bl9yZWZlcmVuY2Vf Y29tcHV0ZV9oYXNoICh2cjEpOwpAQCAtODI0LDExICs4NzUsNDggQEAKICAg ICBmcmVlX3JlZmVyZW5jZSAoKnNsb3QpOwogCiAgICpzbG90ID0gdnIxOwor ICByZXR1cm4gdnIxOworfQorCisvKiBJbnNlcnQgYSByZWZlcmVuY2UgYnkg aXQncyBwaWVjZXMgaW50byB0aGUgY3VycmVudCBoYXNoIHRhYmxlIHdpdGgK KyAgIGEgdmFsdWUgbnVtYmVyIG9mIFJFU1VMVC4gIFJldHVybiB0aGUgcmVz dWx0aW5nIHJlZmVyZW5jZQorICAgc3RydWN0dXJlIHdlIGNyZWF0ZWQuICAq LworCit2bl9yZWZlcmVuY2VfdAordm5fcmVmZXJlbmNlX2luc2VydF9waWVj ZXMgKFZFQyAodHJlZSwgZ2MpICp2dXNlcywKKwkJCSAgICBWRUMgKHZuX3Jl ZmVyZW5jZV9vcF9zLCBoZWFwKSAqb3BlcmFuZHMsCisJCQkgICAgdHJlZSBy ZXN1bHQsIHVuc2lnbmVkIGludCB2YWx1ZV9pZCkKKworeworICB2b2lkICoq c2xvdDsKKyAgdm5fcmVmZXJlbmNlX3QgdnIxOworCisgIHZyMSA9ICh2bl9y ZWZlcmVuY2VfdCkgcG9vbF9hbGxvYyAoY3VycmVudF9pbmZvLT5yZWZlcmVu Y2VzX3Bvb2wpOworICB2cjEtPnZhbHVlX2lkID0gIHZhbHVlX2lkOworICB2 cjEtPnZ1c2VzID0gdmFsdWVpemVfdnVzZXMgKHZ1c2VzKTsKKyAgdnIxLT5v cGVyYW5kcyA9IHZhbHVlaXplX3JlZnMgKG9wZXJhbmRzKTsKKyAgdnIxLT5o YXNoY29kZSA9IHZuX3JlZmVyZW5jZV9jb21wdXRlX2hhc2ggKHZyMSk7Cisg IGlmIChyZXN1bHQgJiYgVFJFRV9DT0RFIChyZXN1bHQpID09IFNTQV9OQU1F KQorICAgIHJlc3VsdCA9IFNTQV9WQUwgKHJlc3VsdCk7CisgIHZyMS0+cmVz dWx0ID0gcmVzdWx0OworCisgIHNsb3QgPSBodGFiX2ZpbmRfc2xvdF93aXRo X2hhc2ggKGN1cnJlbnRfaW5mby0+cmVmZXJlbmNlcywgdnIxLCB2cjEtPmhh c2hjb2RlLAorCQkJCSAgIElOU0VSVCk7CisgIAorICAvKiBBdCB0aGlzIHBv aW50IHdlIHNob3VsZCBoYXZlIGFsbCB0aGUgdGhpbmdzIGluc2VydGVkIHRo YXQgd2UgaGF2ZQorICBzZWVuIGJlZm9yZSwgYW5kIHdlIHNob3VsZCBuZXZl ciB0cnkgaW5zZXJ0aW5nIHNvbWV0aGluZyB0aGF0CisgIGFscmVhZHkgZXhp c3RzLiAgKi8KKyAgZ2NjX2Fzc2VydCAoISpzbG90KTsKKyAgaWYgKCpzbG90 KQorICAgIGZyZWVfcmVmZXJlbmNlICgqc2xvdCk7CisKKyAgKnNsb3QgPSB2 cjE7CisgIHJldHVybiB2cjE7CiB9CiAKIC8qIENvbXB1dGUgYW5kIHJldHVy biB0aGUgaGFzaCB2YWx1ZSBmb3IgbmFyeSBvcGVyYXRpb24gVkJPMS4gICov CiAKLXN0YXRpYyBpbmxpbmUgaGFzaHZhbF90CitpbmxpbmUgaGFzaHZhbF90 CiB2bl9uYXJ5X29wX2NvbXB1dGVfaGFzaCAoY29uc3Qgdm5fbmFyeV9vcF90 IHZubzEpCiB7CiAgIGhhc2h2YWxfdCBoYXNoID0gMDsKQEAgLTg2NSw3ICs5 NTMsNyBAQAogLyogQ29tcGFyZSBuYXJ5IG9wZXJhdGlvbnMgUDEgYW5kIFAy IGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGV5IGFyZQogICAgZXF1aXZhbGVudC4g ICovCiAKLXN0YXRpYyBpbnQKK2ludAogdm5fbmFyeV9vcF9lcSAoY29uc3Qg dm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQogewogICBjb25zdF92bl9uYXJ5 X29wX3QgY29uc3Qgdm5vMSA9IChjb25zdF92bl9uYXJ5X29wX3QpIHAxOwpA QCAtODgzLDE3ICs5NzEsNTYgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKLS8q IExvb2t1cCBPUCBpbiB0aGUgY3VycmVudCBoYXNoIHRhYmxlLCBhbmQgcmV0 dXJuIHRoZSByZXN1bHRpbmcKLSAgIHZhbHVlIG51bWJlciBpZiBpdCBleGlz dHMgaW4gdGhlIGhhc2ggdGFibGUuICBSZXR1cm4gTlVMTF9UUkVFIGlmCi0g ICBpdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaGFzaCB0YWJsZS4gKi8KKy8q IExvb2t1cCBhIG4tYXJ5IG9wZXJhdGlvbiBieSBpdHMgcGllY2VzIGFuZCBy ZXR1cm4gdGhlIHJlc3VsdGluZyB2YWx1ZQorICAgbnVtYmVyIGlmIGl0IGV4 aXN0cyBpbiB0aGUgaGFzaCB0YWJsZS4gIFJldHVybiBOVUxMX1RSRUUgaWYg aXQgZG9lcworICAgbm90IGV4aXN0IGluIHRoZSBoYXNoIHRhYmxlIG9yIGlm IHRoZSByZXN1bHQgZmllbGQgb2YgdGhlIG9wZXJhdGlvbgorICAgaXMgTlVM TC4gVk5SRVNVTFQgd2lsbCBjb250YWluIHRoZSB2bl9uYXJ5X29wX3QgZnJv bSB0aGUgaGFzaHRhYmxlCisgICBpZiBpdCBleGlzdHMuICAqLwogCiB0cmVl Ci12bl9uYXJ5X29wX2xvb2t1cCAodHJlZSBvcCkKK3ZuX25hcnlfb3BfbG9v a3VwX3BpZWNlcyAodW5zaWduZWQgaW50IGxlbmd0aCwgZW51bSB0cmVlX2Nv ZGUgY29kZSwKKwkJCSAgdHJlZSB0eXBlLCB0cmVlIG9wMCwgdHJlZSBvcDEs IHRyZWUgb3AyLAorCQkJICB0cmVlIG9wMywgdm5fbmFyeV9vcF90ICp2bnJl c3VsdCkgCit7CisgIHZvaWQgKipzbG90OworICBzdHJ1Y3Qgdm5fbmFyeV9v cF9zIHZubzE7CisgIGlmICh2bnJlc3VsdCkKKyAgICAqdm5yZXN1bHQgPSBO VUxMOworICB2bm8xLm9wY29kZSA9IGNvZGU7CisgIHZubzEubGVuZ3RoID0g bGVuZ3RoOworICB2bm8xLnR5cGUgPSB0eXBlOworICB2bm8xLm9wWzBdID0g b3AwOworICB2bm8xLm9wWzFdID0gb3AxOworICB2bm8xLm9wWzJdID0gb3Ay OworICB2bm8xLm9wWzNdID0gb3AzOworICB2bm8xLmhhc2hjb2RlID0gdm5f bmFyeV9vcF9jb21wdXRlX2hhc2ggKCZ2bm8xKTsKKyAgc2xvdCA9IGh0YWJf ZmluZF9zbG90X3dpdGhfaGFzaCAoY3VycmVudF9pbmZvLT5uYXJ5LCAmdm5v MSwgdm5vMS5oYXNoY29kZSwKKwkJCQkgICBOT19JTlNFUlQpOworICBpZiAo IXNsb3QgJiYgY3VycmVudF9pbmZvID09IG9wdGltaXN0aWNfaW5mbykKKyAg ICBzbG90ID0gaHRhYl9maW5kX3Nsb3Rfd2l0aF9oYXNoICh2YWxpZF9pbmZv LT5uYXJ5LCAmdm5vMSwgdm5vMS5oYXNoY29kZSwKKwkJCQkgICAgIE5PX0lO U0VSVCk7CisgIGlmICghc2xvdCkKKyAgICByZXR1cm4gTlVMTF9UUkVFOwor ICBpZiAodm5yZXN1bHQpCisgICAgKnZucmVzdWx0ID0gKHZuX25hcnlfb3Bf dCkqc2xvdDsKKyAgcmV0dXJuICgodm5fbmFyeV9vcF90KSpzbG90KS0+cmVz dWx0OworfQorCisvKiBMb29rdXAgT1AgaW4gdGhlIGN1cnJlbnQgaGFzaCB0 YWJsZSwgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIHZhbHVlCisgICBudW1i ZXIgaWYgaXQgZXhpc3RzIGluIHRoZSBoYXNoIHRhYmxlLiAgUmV0dXJuIE5V TExfVFJFRSBpZiBpdCBkb2VzCisgICBub3QgZXhpc3QgaW4gdGhlIGhhc2gg dGFibGUgb3IgaWYgdGhlIHJlc3VsdCBmaWVsZCBvZiB0aGUgb3BlcmF0aW9u CisgICBpcyBOVUxMLiBWTlJFU1VMVCB3aWxsIGNvbnRhaW4gdGhlIHZuX25h cnlfb3BfdCBmcm9tIHRoZSBoYXNodGFibGUKKyAgIGlmIGl0IGV4aXN0cy4g ICovCisKK3RyZWUKK3ZuX25hcnlfb3BfbG9va3VwICh0cmVlIG9wLCB2bl9u YXJ5X29wX3QgKnZucmVzdWx0KQogewogICB2b2lkICoqc2xvdDsKICAgc3Ry dWN0IHZuX25hcnlfb3BfcyB2bm8xOwogICB1bnNpZ25lZCBpOwogCisgIGlm ICh2bnJlc3VsdCkKKyAgICAqdm5yZXN1bHQgPSBOVUxMOwogICB2bm8xLm9w Y29kZSA9IFRSRUVfQ09ERSAob3ApOwogICB2bm8xLmxlbmd0aCA9IFRSRUVf Q09ERV9MRU5HVEggKFRSRUVfQ09ERSAob3ApKTsKICAgdm5vMS50eXBlID0g VFJFRV9UWVBFIChvcCk7CkBAIC05MDcsMTMgKzEwMzQsNTYgQEAKIAkJCQkg ICAgIE5PX0lOU0VSVCk7CiAgIGlmICghc2xvdCkKICAgICByZXR1cm4gTlVM TF9UUkVFOworICBpZiAodm5yZXN1bHQpCisgICAgKnZucmVzdWx0ID0gKHZu X25hcnlfb3BfdCkqc2xvdDsKICAgcmV0dXJuICgodm5fbmFyeV9vcF90KSpz bG90KS0+cmVzdWx0OwogfQogCisvKiBJbnNlcnQgYSBuLWFyeSBvcGVyYXRp b24gaW50byB0aGUgY3VycmVudCBoYXNoIHRhYmxlIHVzaW5nIGl0J3MKKyAg IHBpZWNlcy4gIFJldHVybiB0aGUgdm5fbmFyeV9vcF90IHN0cnVjdHVyZSB3 ZSBjcmVhdGVkIGFuZCBwdXQgaW4KKyAgIHRoZSBoYXNodGFibGUuICAqLwor Cit2bl9uYXJ5X29wX3QKK3ZuX25hcnlfb3BfaW5zZXJ0X3BpZWNlcyAodW5z aWduZWQgaW50IGxlbmd0aCwgZW51bSB0cmVlX2NvZGUgY29kZSwKKwkJCSAg dHJlZSB0eXBlLCB0cmVlIG9wMCwKKwkJCSAgdHJlZSBvcDEsIHRyZWUgb3Ay LCB0cmVlIG9wMywKKwkJCSAgdHJlZSByZXN1bHQsCisJCQkgIHVuc2lnbmVk IGludCB2YWx1ZV9pZCkgCit7CisgIHZvaWQgKipzbG90OworICB2bl9uYXJ5 X29wX3Qgdm5vMTsKKworICB2bm8xID0gKHZuX25hcnlfb3BfdCkgb2JzdGFj a19hbGxvYyAoJmN1cnJlbnRfaW5mby0+bmFyeV9vYnN0YWNrLAorCQkJCSAg ICAgICAoc2l6ZW9mIChzdHJ1Y3Qgdm5fbmFyeV9vcF9zKQorCQkJCQktIHNp emVvZiAodHJlZSkgKiAoNCAtIGxlbmd0aCkpKTsKKyAgdm5vMS0+dmFsdWVf aWQgPSB2YWx1ZV9pZDsKKyAgdm5vMS0+b3Bjb2RlID0gY29kZTsKKyAgdm5v MS0+bGVuZ3RoID0gbGVuZ3RoOworICB2bm8xLT50eXBlID0gdHlwZTsKKyAg aWYgKGxlbmd0aCA+PSAxKQorICAgIHZubzEtPm9wWzBdID0gb3AwOworICBp ZiAobGVuZ3RoID49IDIpCisgICAgdm5vMS0+b3BbMV0gPSBvcDE7CisgIGlm IChsZW5ndGggPj0gMykKKyAgICB2bm8xLT5vcFsyXSA9IG9wMjsKKyAgaWYg KGxlbmd0aCA+PSA0KQorICAgIHZubzEtPm9wWzNdID0gb3AzOworICB2bm8x LT5yZXN1bHQgPSByZXN1bHQ7CisgIHZubzEtPmhhc2hjb2RlID0gdm5fbmFy eV9vcF9jb21wdXRlX2hhc2ggKHZubzEpOworICBzbG90ID0gaHRhYl9maW5k X3Nsb3Rfd2l0aF9oYXNoIChjdXJyZW50X2luZm8tPm5hcnksIHZubzEsIHZu bzEtPmhhc2hjb2RlLAorCQkJCSAgIElOU0VSVCk7CisgIGdjY19hc3NlcnQg KCEqc2xvdCk7CisKKyAgKnNsb3QgPSB2bm8xOworICByZXR1cm4gdm5vMTsK KyAgCit9CisKIC8qIEluc2VydCBPUCBpbnRvIHRoZSBjdXJyZW50IGhhc2gg dGFibGUgd2l0aCBhIHZhbHVlIG51bWJlciBvZgotICAgUkVTVUxULiAgKi8K KyAgIFJFU1VMVC4gIFJldHVybiB0aGUgdm5fbmFyeV9vcF90IHN0cnVjdHVy ZSB3ZSBjcmVhdGVkIGFuZCBwdXQgaW4KKyAgIHRoZSBoYXNodGFibGUuICAq LwogCi12b2lkCit2bl9uYXJ5X29wX3QKIHZuX25hcnlfb3BfaW5zZXJ0ICh0 cmVlIG9wLCB0cmVlIHJlc3VsdCkKIHsKICAgdW5zaWduZWQgbGVuZ3RoID0g VFJFRV9DT0RFX0xFTkdUSCAoVFJFRV9DT0RFIChvcCkpOwpAQCAtOTI0LDYg KzEwOTQsNyBAQAogICB2bm8xID0gKHZuX25hcnlfb3BfdCkgb2JzdGFja19h bGxvYyAoJmN1cnJlbnRfaW5mby0+bmFyeV9vYnN0YWNrLAogCQkJKHNpemVv ZiAoc3RydWN0IHZuX25hcnlfb3BfcykKIAkJCSAtIHNpemVvZiAodHJlZSkg KiAoNCAtIGxlbmd0aCkpKTsKKyAgdm5vMS0+dmFsdWVfaWQgPSBWTl9JTkZP IChyZXN1bHQpLT52YWx1ZV9pZDsKICAgdm5vMS0+b3Bjb2RlID0gVFJFRV9D T0RFIChvcCk7CiAgIHZubzEtPmxlbmd0aCA9IGxlbmd0aDsKICAgdm5vMS0+ dHlwZSA9IFRSRUVfVFlQRSAob3ApOwpAQCAtOTM2LDYgKzExMDcsNyBAQAog ICBnY2NfYXNzZXJ0ICghKnNsb3QpOwogCiAgICpzbG90ID0gdm5vMTsKKyAg cmV0dXJuIHZubzE7CiB9CiAKIC8qIENvbXB1dGUgYSBoYXNoY29kZSBmb3Ig UEhJIG9wZXJhdGlvbiBWUDEgYW5kIHJldHVybiBpdC4gICovCkBAIC0xMDM0 LDcgKzEyMDYsNyBAQAogLyogSW5zZXJ0IFBISSBpbnRvIHRoZSBjdXJyZW50 IGhhc2ggdGFibGUgd2l0aCBhIHZhbHVlIG51bWJlciBvZgogICAgUkVTVUxU LiAgKi8KIAotc3RhdGljIHZvaWQKK3N0YXRpYyB2bl9waGlfdAogdm5fcGhp X2luc2VydCAodHJlZSBwaGksIHRyZWUgcmVzdWx0KQogewogICB2b2lkICoq c2xvdDsKQEAgLTEwNDksNiArMTIyMSw3IEBACiAgICAgICBkZWYgPSBUUkVF X0NPREUgKGRlZikgPT0gU1NBX05BTUUgPyBTU0FfVkFMIChkZWYpIDogZGVm OwogICAgICAgVkVDX3NhZmVfcHVzaCAodHJlZSwgaGVhcCwgYXJncywgZGVm KTsKICAgICB9CisgIHZwMS0+dmFsdWVfaWQgPSBWTl9JTkZPIChyZXN1bHQp LT52YWx1ZV9pZDsKICAgdnAxLT5waGlhcmdzID0gYXJnczsKICAgdnAxLT5i bG9jayA9IGJiX2Zvcl9zdG10IChwaGkpOwogICB2cDEtPnJlc3VsdCA9IHJl c3VsdDsKQEAgLTEwNjAsNiArMTIzMyw3IEBACiAgIC8qIEJlY2F1c2Ugd2Ug aXRlcmF0ZSBvdmVyIHBoaSBvcGVyYXRpb25zIG1vcmUgdGhhbiBvbmNlLCBp dCdzCiAgICAgIHBvc3NpYmxlIHRoZSBzbG90IG1pZ2h0IGFscmVhZHkgZXhp c3QgaGVyZSwgaGVuY2Ugbm8gYXNzZXJ0LiovCiAgICpzbG90ID0gdnAxOwor ICByZXR1cm4gdnAxOwogfQogCiAKQEAgLTExNjgsNyArMTM0Miw3IEBACiB2 aXNpdF91bmFyeV9vcCAodHJlZSBsaHMsIHRyZWUgb3ApCiB7CiAgIGJvb2wg Y2hhbmdlZCA9IGZhbHNlOwotICB0cmVlIHJlc3VsdCA9IHZuX25hcnlfb3Bf bG9va3VwIChvcCk7CisgIHRyZWUgcmVzdWx0ID0gdm5fbmFyeV9vcF9sb29r dXAgKG9wLCBOVUxMKTsKIAogICBpZiAocmVzdWx0KQogICAgIHsKQEAgLTEx OTAsNyArMTM2NCw3IEBACiB2aXNpdF9iaW5hcnlfb3AgKHRyZWUgbGhzLCB0 cmVlIG9wKQogewogICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgdHJlZSBy ZXN1bHQgPSB2bl9uYXJ5X29wX2xvb2t1cCAob3ApOworICB0cmVlIHJlc3Vs dCA9IHZuX25hcnlfb3BfbG9va3VwIChvcCwgTlVMTCk7CiAKICAgaWYgKHJl c3VsdCkKICAgICB7CkBAIC0xMjEyLDcgKzEzODYsOCBAQAogdmlzaXRfcmVm ZXJlbmNlX29wX2xvYWQgKHRyZWUgbGhzLCB0cmVlIG9wLCB0cmVlIHN0bXQp CiB7CiAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwotICB0cmVlIHJlc3VsdCA9 IHZuX3JlZmVyZW5jZV9sb29rdXAgKG9wLCBzaGFyZWRfdnVzZXNfZnJvbV9z dG10IChzdG10KSwgdHJ1ZSk7CisgIHRyZWUgcmVzdWx0ID0gdm5fcmVmZXJl bmNlX2xvb2t1cCAob3AsIHNoYXJlZF92dXNlc19mcm9tX3N0bXQgKHN0bXQp LCB0cnVlLAorCQkJCSAgICAgTlVMTCk7CiAKICAgLyogV2UgaGFuZGxlIHR5 cGUtcHVubmluZyB0aHJvdWdoIHVuaW9ucyBieSB2YWx1ZS1udW1iZXJpbmcg YmFzZWQKICAgICAgb24gb2Zmc2V0IGFuZCBzaXplIG9mIHRoZSBhY2Nlc3Mu ICBCZSBwcmVwYXJlZCB0byBoYW5kbGUgYQpAQCAtMTIzNiw3ICsxNDExLDcg QEAKICAgICAgIHJlc3VsdCA9IHZhbDsKICAgICAgIGlmICghaXNfZ2ltcGxl X21pbl9pbnZhcmlhbnQgKHZhbCkKIAkgICYmIFRSRUVfQ09ERSAodmFsKSAh PSBTU0FfTkFNRSkKLQlyZXN1bHQgPSB2bl9uYXJ5X29wX2xvb2t1cCAodmFs KTsKKwlyZXN1bHQgPSB2bl9uYXJ5X29wX2xvb2t1cCAodmFsLCBOVUxMKTsK ICAgICAgIC8qIElmIHRoZSBleHByZXNzaW9uIGlzIG5vdCB5ZXQgYXZhaWxh YmxlLCB2YWx1ZS1udW1iZXIgbGhzIHRvCiAJIGEgbmV3IFNTQV9OQU1FIHdl IGNyZWF0ZS4gICovCiAgICAgICBpZiAoIXJlc3VsdCAmJiBtYXlfaW5zZXJ0 KQpAQCAtMTMxOSw3ICsxNDk0LDggQEAKICAgICAgT3RoZXJ3aXNlLCB0aGUg dmRlZnMgZm9yIHRoZSBzdG9yZSBhcmUgdXNlZCB3aGVuIGluc2VydGluZyBp bnRvCiAgICAgIHRoZSB0YWJsZSwgc2luY2UgdGhlIHN0b3JlIGdlbmVyYXRl cyBhIG5ldyBtZW1vcnkgc3RhdGUuICAqLwogCi0gIHJlc3VsdCA9IHZuX3Jl ZmVyZW5jZV9sb29rdXAgKGxocywgc2hhcmVkX3Z1c2VzX2Zyb21fc3RtdCAo c3RtdCksIGZhbHNlKTsKKyAgcmVzdWx0ID0gdm5fcmVmZXJlbmNlX2xvb2t1 cCAobGhzLCBzaGFyZWRfdnVzZXNfZnJvbV9zdG10IChzdG10KSwgZmFsc2Us CisJCQkJTlVMTCk7CiAKICAgaWYgKHJlc3VsdCkKICAgICB7CkBAIC0yMTQ2 LDEyICsyMzIyLDE4IEBACiAKICAgY2FsY3VsYXRlX2RvbWluYW5jZV9pbmZv IChDRElfRE9NSU5BVE9SUyk7CiAgIHNjY3N0YWNrID0gTlVMTDsKKyAgY29u c3RhbnRfdG9fdmFsdWVfaWQgPSBodGFiX2NyZWF0ZSAoMjMsIHZuX2NvbnN0 YW50X2hhc2gsIHZuX2NvbnN0YW50X2VxLAorCQkJCSAgZnJlZSk7CisgIAor ICBjb25zdGFudF92YWx1ZV9pZHMgPSBCSVRNQVBfQUxMT0MgKE5VTEwpOwor ICAKICAgbmV4dF9kZnNfbnVtID0gMTsKLQorICBuZXh0X3ZhbHVlX2lkID0g MTsKKyAgCiAgIHZuX3NzYV9hdXhfdGFibGUgPSBWRUNfYWxsb2MgKHZuX3Nz YV9hdXhfdCwgaGVhcCwgbnVtX3NzYV9uYW1lcyArIDEpOwogICAvKiBWRUNf YWxsb2MgZG9lc24ndCBhY3R1YWxseSBncm93IGl0IHRvIHRoZSByaWdodCBz aXplLCBpdCBqdXN0CiAgICAgIHByZWFsbG9jYXRlcyB0aGUgc3BhY2UgdG8g ZG8gc28uICAqLwotICBWRUNfc2FmZV9ncm93ICh2bl9zc2FfYXV4X3QsIGhl YXAsIHZuX3NzYV9hdXhfdGFibGUsIG51bV9zc2FfbmFtZXMgKyAxKTsKKyAg VkVDX3NhZmVfZ3Jvd19jbGVhcmVkICh2bl9zc2FfYXV4X3QsIGhlYXAsIHZu X3NzYV9hdXhfdGFibGUsIG51bV9zc2FfbmFtZXMgKyAxKTsKICAgZ2NjX29i c3RhY2tfaW5pdCAoJnZuX3NzYV9hdXhfb2JzdGFjayk7CiAKICAgc2hhcmVk X2xvb2t1cF9waGlhcmdzID0gTlVMTDsKQEAgLTIxODAsNiArMjM2Miw3IEBA CiAJewogCSAgVk5fSU5GT19HRVQgKG5hbWUpLT52YWxudW0gPSBWTl9UT1A7 CiAJICBWTl9JTkZPIChuYW1lKS0+ZXhwciA9IG5hbWU7CisJICBWTl9JTkZP IChuYW1lKS0+dmFsdWVfaWQgPSAwOwogCX0KICAgICB9CiAKQEAgLTIyMDYs NiArMjM4OSw4IEBACiB7CiAgIHNpemVfdCBpOwogCisgIGh0YWJfZGVsZXRl IChjb25zdGFudF90b192YWx1ZV9pZCk7CisgIEJJVE1BUF9GUkVFIChjb25z dGFudF92YWx1ZV9pZHMpOwogICBWRUNfZnJlZSAodHJlZSwgaGVhcCwgc2hh cmVkX2xvb2t1cF9waGlhcmdzKTsKICAgVkVDX2ZyZWUgKHRyZWUsIGdjLCBz aGFyZWRfbG9va3VwX3ZvcHMpOwogICBWRUNfZnJlZSAodm5fcmVmZXJlbmNl X29wX3MsIGhlYXAsIHNoYXJlZF9sb29rdXBfcmVmZXJlbmNlcyk7CkBAIC0y MjE1LDggKzI0MDAsNyBAQAogICAgIHsKICAgICAgIHRyZWUgbmFtZSA9IHNz YV9uYW1lIChpKTsKICAgICAgIGlmIChuYW1lCi0JICAmJiBTU0FfTkFNRV9W QUxVRSAobmFtZSkKLQkgICYmIFRSRUVfQ09ERSAoU1NBX05BTUVfVkFMVUUg KG5hbWUpKSA9PSBWQUxVRV9IQU5ETEUpCisJICAmJiBTU0FfTkFNRV9WQUxV RSAobmFtZSkpCiAJU1NBX05BTUVfVkFMVUUgKG5hbWUpID0gTlVMTDsKICAg ICAgIGlmIChuYW1lCiAJICAmJiBWTl9JTkZPIChuYW1lKS0+bmVlZHNfaW5z ZXJ0aW9uKQpAQCAtMjIzNyw2ICsyNDIxLDkxIEBACiAgICAgfQogfQogCisv KiBTZXQgdGhlIHZhbHVlIGlkcyBpbiB0aGUgdmFsaWQvb3B0aW1pc3RpYyBo YXNoIHRhYmxlcy4gICovCisKK3N0YXRpYyB2b2lkCitzZXRfaGFzaHRhYmxl X3ZhbHVlX2lkcyAodm9pZCkKK3sKKyAgaHRhYl9pdGVyYXRvciBoaTsKKyAg dm5fbmFyeV9vcF90IHZubzsKKyAgdm5fcmVmZXJlbmNlX3QgdnI7CisgIHZu X3BoaV90IHZwOworICAKKyAgLyogTm93IHNldCB0aGUgdmFsdWUgaWRzIG9m IHRoZSB0aGluZ3Mgd2UgaGFkIHB1dCBpbiB0aGUgaGFzaAorICAgICB0YWJs ZS4gICovCisKKyAgRk9SX0VBQ0hfSFRBQl9FTEVNRU5UICh2YWxpZF9pbmZv LT5uYXJ5LAorCQkJIHZubywgdm5fbmFyeV9vcF90LCBoaSkgCisgICAgewor ICAgICAgaWYgKHZuby0+cmVzdWx0KQorCXsKKwkgIGlmIChUUkVFX0NPREUg KHZuby0+cmVzdWx0KSA9PSBTU0FfTkFNRSkKKwkgICAgdm5vLT52YWx1ZV9p ZCA9IFZOX0lORk8gKHZuby0+cmVzdWx0KS0+dmFsdWVfaWQ7CisJICBlbHNl IGlmIChpc19naW1wbGVfbWluX2ludmFyaWFudCAodm5vLT5yZXN1bHQpKQor CSAgICB2bm8tPnZhbHVlX2lkID0gZ2V0X29yX2FsbG9jX2NvbnN0YW50X3Zh bHVlX2lkICh2bm8tPnJlc3VsdCk7CisJfQorICAgIH0KKworICBGT1JfRUFD SF9IVEFCX0VMRU1FTlQgKG9wdGltaXN0aWNfaW5mby0+bmFyeSwKKwkJCSB2 bm8sIHZuX25hcnlfb3BfdCwgaGkpIAorICAgIHsKKyAgICAgIGlmICh2bm8t PnJlc3VsdCkKKwl7CisJICBpZiAoVFJFRV9DT0RFICh2bm8tPnJlc3VsdCkg PT0gU1NBX05BTUUpCisJICAgIHZuby0+dmFsdWVfaWQgPSBWTl9JTkZPICh2 bm8tPnJlc3VsdCktPnZhbHVlX2lkOworCSAgZWxzZSBpZiAoaXNfZ2ltcGxl X21pbl9pbnZhcmlhbnQgKHZuby0+cmVzdWx0KSkKKwkgICAgdm5vLT52YWx1 ZV9pZCA9IGdldF9vcl9hbGxvY19jb25zdGFudF92YWx1ZV9pZCAodm5vLT5y ZXN1bHQpOworCX0KKyAgICB9CisKKyAgRk9SX0VBQ0hfSFRBQl9FTEVNRU5U ICh2YWxpZF9pbmZvLT5waGlzLAorCQkJIHZwLCB2bl9waGlfdCwgaGkpIAor ICAgIHsKKyAgICAgIGlmICh2cC0+cmVzdWx0KQorCXsKKwkgIGlmIChUUkVF X0NPREUgKHZwLT5yZXN1bHQpID09IFNTQV9OQU1FKQorCSAgICB2cC0+dmFs dWVfaWQgPSBWTl9JTkZPICh2cC0+cmVzdWx0KS0+dmFsdWVfaWQ7CisJICBl bHNlIGlmIChpc19naW1wbGVfbWluX2ludmFyaWFudCAodnAtPnJlc3VsdCkp CisJICAgIHZwLT52YWx1ZV9pZCA9IGdldF9vcl9hbGxvY19jb25zdGFudF92 YWx1ZV9pZCAodnAtPnJlc3VsdCk7CisJfQorICAgIH0KKyAgRk9SX0VBQ0hf SFRBQl9FTEVNRU5UIChvcHRpbWlzdGljX2luZm8tPnBoaXMsCisJCQkgdnAs IHZuX3BoaV90LCBoaSkgCisgICAgeworICAgICAgaWYgKHZwLT5yZXN1bHQp CisJeworCSAgaWYgKFRSRUVfQ09ERSAodnAtPnJlc3VsdCkgPT0gU1NBX05B TUUpCisJICAgIHZwLT52YWx1ZV9pZCA9IFZOX0lORk8gKHZwLT5yZXN1bHQp LT52YWx1ZV9pZDsKKwkgIGVsc2UgaWYgKGlzX2dpbXBsZV9taW5faW52YXJp YW50ICh2cC0+cmVzdWx0KSkKKwkgICAgdnAtPnZhbHVlX2lkID0gZ2V0X29y X2FsbG9jX2NvbnN0YW50X3ZhbHVlX2lkICh2cC0+cmVzdWx0KTsKKwl9Cisg ICAgfQorCisKKyAgRk9SX0VBQ0hfSFRBQl9FTEVNRU5UICh2YWxpZF9pbmZv LT5yZWZlcmVuY2VzLAorCQkJIHZyLCB2bl9yZWZlcmVuY2VfdCwgaGkpIAor ICAgIHsKKyAgICAgIGlmICh2ci0+cmVzdWx0KQorCXsKKwkgIGlmIChUUkVF X0NPREUgKHZyLT5yZXN1bHQpID09IFNTQV9OQU1FKQorCSAgICB2ci0+dmFs dWVfaWQgPSBWTl9JTkZPICh2ci0+cmVzdWx0KS0+dmFsdWVfaWQ7CisJICBl bHNlIGlmIChpc19naW1wbGVfbWluX2ludmFyaWFudCAodnItPnJlc3VsdCkp CisJICAgIHZyLT52YWx1ZV9pZCA9IGdldF9vcl9hbGxvY19jb25zdGFudF92 YWx1ZV9pZCAodnItPnJlc3VsdCk7CisJfQorICAgIH0KKyAgRk9SX0VBQ0hf SFRBQl9FTEVNRU5UIChvcHRpbWlzdGljX2luZm8tPnJlZmVyZW5jZXMsCisJ CQkgdnIsIHZuX3JlZmVyZW5jZV90LCBoaSkgCisgICAgeworICAgICAgaWYg KHZyLT5yZXN1bHQpCisJeworCSAgaWYgKFRSRUVfQ09ERSAodnItPnJlc3Vs dCkgPT0gU1NBX05BTUUpCisJICAgIHZyLT52YWx1ZV9pZCA9IFZOX0lORk8g KHZyLT5yZXN1bHQpLT52YWx1ZV9pZDsKKwkgIGVsc2UgaWYgKGlzX2dpbXBs ZV9taW5faW52YXJpYW50ICh2ci0+cmVzdWx0KSkKKwkgICAgdnItPnZhbHVl X2lkID0gZ2V0X29yX2FsbG9jX2NvbnN0YW50X3ZhbHVlX2lkICh2ci0+cmVz dWx0KTsKKwl9CisgICAgfQorfQorCiAvKiBEbyBTQ0NWTi4gIFJldHVybnMg dHJ1ZSBpZiBpdCBmaW5pc2hlZCwgZmFsc2UgaWYgd2UgYmFpbGVkIG91dAog ICAgZHVlIHRvIHJlc291cmNlIGNvbnN0cmFpbnRzLiAgKi8KIApAQCAtMjI0 NSw3ICsyNTE0LDggQEAKIHsKICAgc2l6ZV90IGk7CiAgIHRyZWUgcGFyYW07 Ci0KKyAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKyAgCiAgIG1heV9pbnNlcnQg PSBtYXlfaW5zZXJ0X2FyZzsKIAogICBpbml0X3NjY192biAoKTsKQEAgLTIy NzYsNiArMjU0Niw0NSBAQAogCSAgfQogICAgIH0KIAorICAvKiBJbml0aWFs aXplIHRoZSB2YWx1ZSBpZHMuICAqLworICAgICAgCisgIGZvciAoaSA9IDE7 IGkgPCBudW1fc3NhX25hbWVzOyArK2kpCisgICAgeworICAgICAgdHJlZSBu YW1lID0gc3NhX25hbWUgKGkpOworICAgICAgdm5fc3NhX2F1eF90IGluZm87 CisgICAgICBpZiAoIW5hbWUpCisJY29udGludWU7CisgICAgICBpbmZvID0g Vk5fSU5GTyAobmFtZSk7CisgICAgICBpZiAoaW5mby0+dmFsbnVtID09IG5h bWUpCisJaW5mby0+dmFsdWVfaWQgPSBnZXRfbmV4dF92YWx1ZV9pZCAoKTsK KyAgICAgIGVsc2UgaWYgKGlzX2dpbXBsZV9taW5faW52YXJpYW50IChpbmZv LT52YWxudW0pKQorCWluZm8tPnZhbHVlX2lkID0gZ2V0X29yX2FsbG9jX2Nv bnN0YW50X3ZhbHVlX2lkIChpbmZvLT52YWxudW0pOworICAgIH0KKyAgCisg IC8qIFByb3BhZ2F0ZSB1bnRpbCB0aGV5IHN0b3AgY2hhbmdpbmcuICAqLwor ICB3aGlsZSAoY2hhbmdlZCkKKyAgICB7CisgICAgICBjaGFuZ2VkID0gZmFs c2U7CisgICAgICBmb3IgKGkgPSAxOyBpIDwgbnVtX3NzYV9uYW1lczsgKytp KQorCXsKKwkgIHRyZWUgbmFtZSA9IHNzYV9uYW1lIChpKTsKKwkgIHZuX3Nz YV9hdXhfdCBpbmZvOworCSAgaWYgKCFuYW1lKQorCSAgICBjb250aW51ZTsK KwkgIGluZm8gPSBWTl9JTkZPIChuYW1lKTsKKwkgIGlmIChUUkVFX0NPREUg KGluZm8tPnZhbG51bSkgPT0gU1NBX05BTUUKKwkgICAgICAmJiBpbmZvLT52 YWxudW0gIT0gbmFtZQorCSAgICAgICYmIFRSRUVfQ09ERSAoaW5mby0+dmFs bnVtKSA9PSBTU0FfTkFNRQorCSAgICAgICYmIGluZm8tPnZhbHVlX2lkICE9 IFZOX0lORk8gKGluZm8tPnZhbG51bSktPnZhbHVlX2lkKQorCSAgICB7CisJ ICAgICAgY2hhbmdlZCA9IHRydWU7CisJICAgICAgaW5mby0+dmFsdWVfaWQg PSBWTl9JTkZPIChpbmZvLT52YWxudW0pLT52YWx1ZV9pZDsKKwkgICAgfQor CX0KKyAgICB9CisgIAorICBzZXRfaGFzaHRhYmxlX3ZhbHVlX2lkcyAoKTsK KyAgCiAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVU QUlMUykpCiAgICAgewogICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiVmFs dWUgbnVtYmVyczpcbiIpOwpAQCAtMjMwMCwzICsyNjA5LDgzIEBACiAgIG1h eV9pbnNlcnQgPSBmYWxzZTsKICAgcmV0dXJuIHRydWU7CiB9CisKKy8qIFJl dHVybiB0aGUgbWF4aW11bSB2YWx1ZSBpZCB3ZSBoYXZlIGV2ZXIgc2Vlbi4g ICovCisKK3Vuc2lnbmVkIGludAorZ2V0X21heF92YWx1ZV9pZCAodm9pZCkg Cit7CisgIHJldHVybiBuZXh0X3ZhbHVlX2lkOworfQorCisvKiBSZXR1cm4g dGhlIG5leHQgdW5pcXVlIHZhbHVlIGlkLiAgKi8KKwordW5zaWduZWQgaW50 CitnZXRfbmV4dF92YWx1ZV9pZCAodm9pZCkKK3sKKyAgcmV0dXJuIG5leHRf dmFsdWVfaWQrKzsKK30KKworCisvKiBDb21wYXJlIHR3byBleHByZXNzaW9u cyBFMSBhbmQgRTIgYW5kIHJldHVybiB0cnVlIGlmIHRoZXkgYXJlCisgICBl cXVhbC4gICovCisKK2Jvb2wKK2V4cHJlc3Npb25zX2VxdWFsX3AgKHRyZWUg ZTEsIHRyZWUgZTIpCit7CisgIHRyZWUgdGUxLCB0ZTI7CisKKyAgaWYgKGUx ID09IGUyKQorICAgIHJldHVybiB0cnVlOworCisgIHRlMSA9IFRSRUVfVFlQ RSAoZTEpOworICB0ZTIgPSBUUkVFX1RZUEUgKGUyKTsKKworICBpZiAoVFJF RV9DT0RFIChlMSkgPT0gVFJFRV9MSVNUICYmIFRSRUVfQ09ERSAoZTIpID09 IFRSRUVfTElTVCkKKyAgICB7CisgICAgICB0cmVlIGxvcDEgPSBlMTsKKyAg ICAgIHRyZWUgbG9wMiA9IGUyOworICAgICAgZm9yIChsb3AxID0gZTEsIGxv cDIgPSBlMjsKKwkgICBsb3AxIHx8IGxvcDI7CisJICAgbG9wMSA9IFRSRUVf Q0hBSU4gKGxvcDEpLCBsb3AyID0gVFJFRV9DSEFJTiAobG9wMikpCisJewor CSAgaWYgKCFsb3AxIHx8ICFsb3AyKQorCSAgICByZXR1cm4gZmFsc2U7CisJ ICBpZiAoIWV4cHJlc3Npb25zX2VxdWFsX3AgKFRSRUVfVkFMVUUgKGxvcDEp LCBUUkVFX1ZBTFVFIChsb3AyKSkpCisJICAgIHJldHVybiBmYWxzZTsKKwl9 CisgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIH0KKyAgZWxzZSBpZiAoVFJF RV9DT0RFIChlMSkgPT0gVFJFRV9DT0RFIChlMikKKwkgICAmJiBvcGVyYW5k X2VxdWFsX3AgKGUxLCBlMiwgT0VQX1BVUkVfU0FNRSkpCisgICAgcmV0dXJu IHRydWU7CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBTb3J0IHRoZSBW VVNFIGFycmF5IHNvIHRoYXQgd2UgY2FuIGRvIGVxdWFsaXR5IGNvbXBhcmlz b25zCisgICBxdWlja2VyIG9uIHR3byB2dXNlIHZlY3MuICAqLworCit2b2lk Citzb3J0X3Z1c2VzIChWRUMgKHRyZWUsZ2MpICp2dXNlcykKK3sKKyAgaWYg KFZFQ19sZW5ndGggKHRyZWUsIHZ1c2VzKSA+IDEpCisgICAgcXNvcnQgKFZF Q19hZGRyZXNzICh0cmVlLCB2dXNlcyksCisJICAgVkVDX2xlbmd0aCAodHJl ZSwgdnVzZXMpLAorCSAgIHNpemVvZiAodHJlZSksCisJICAgb3BlcmFuZF9i dWlsZF9jbXApOworfQorCisvKiBTb3J0IHRoZSBWVVNFIGFycmF5IHNvIHRo YXQgd2UgY2FuIGRvIGVxdWFsaXR5IGNvbXBhcmlzb25zCisgICBxdWlja2Vy IG9uIHR3byB2dXNlIHZlY3MuICAqLworCit2b2lkCitzb3J0X3Z1c2VzX2hl YXAgKFZFQyAodHJlZSxoZWFwKSAqdnVzZXMpCit7CisgIGlmIChWRUNfbGVu Z3RoICh0cmVlLCB2dXNlcykgPiAxKQorICAgIHFzb3J0IChWRUNfYWRkcmVz cyAodHJlZSwgdnVzZXMpLAorCSAgIFZFQ19sZW5ndGggKHRyZWUsIHZ1c2Vz KSwKKwkgICBzaXplb2YgKHRyZWUpLAorCSAgIG9wZXJhbmRfYnVpbGRfY21w KTsKK30KZGlmZiAtciAyMzI1MzMwY2U5ZWQgZ2NjL3RyZWUtc3NhLXNjY3Zu LmgKLS0tIGEvZ2NjL3RyZWUtc3NhLXNjY3ZuLmgJU3VuIEp1bCAwNiAwMDox NjozMCAyMDA4ICswMDAwCisrKyBiL2djYy90cmVlLXNzYS1zY2N2bi5oCVN1 biBKdWwgMDYgMTU6Mjg6MTkgMjAwOCAtMDQwMApAQCAtMjQsMTIgKzI0LDk2 IEBACiAvKiBUT1Agb2YgdGhlIFZOIGxhdHRpY2UuICAqLwogZXh0ZXJuIHRy ZWUgVk5fVE9QOwogCisvKiBOLWFyeSBvcGVyYXRpb25zIGluIHRoZSBoYXNo dGFibGUgY29uc2lzdCBvZiBsZW5ndGggb3BlcmFuZHMsIGFuCisgICBvcGNv ZGUsIGFuZCBhIHR5cGUuICBSZXN1bHQgaXMgdGhlIHZhbHVlIG51bWJlciBv ZiB0aGUgb3BlcmF0aW9uLAorICAgYW5kIGhhc2hjb2RlIGlzIHN0b3JlZCB0 byBhdm9pZCBoYXZpbmcgdG8gY2FsY3VsYXRlIGl0CisgICByZXBlYXRlZGx5 LiAgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgdm5fbmFyeV9vcF9zCit7CisgIC8q IFVuaXF1ZSBpZGVudGlmeSB0aGF0IGFsbCBleHByZXNzaW9ucyB3aXRoIHRo ZSBzYW1lIHZhbHVlIGhhdmUuICovCisgIHVuc2lnbmVkIGludCB2YWx1ZV9p ZDsKKyAgRU5VTV9CSVRGSUVMRCh0cmVlX2NvZGUpIG9wY29kZSA6IDE2Owor ICB1bnNpZ25lZCBsZW5ndGggOiAxNjsKKyAgaGFzaHZhbF90IGhhc2hjb2Rl OworICB0cmVlIHJlc3VsdDsKKyAgdHJlZSB0eXBlOworICB0cmVlIG9wWzRd OworfSAqdm5fbmFyeV9vcF90OwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgdm5f bmFyeV9vcF9zICpjb25zdF92bl9uYXJ5X29wX3Q7CisKKy8qIFBoaSBub2Rl cyBpbiB0aGUgaGFzaHRhYmxlIGNvbnNpc3Qgb2YgdGhlaXIgbm9uLVZOX1RP UCBwaGkKKyAgIGFyZ3VtZW50cywgYW5kIHRoZSBiYXNpYyBibG9jayB0aGUg cGhpIGlzIGluLiBSZXN1bHQgaXMgdGhlIHZhbHVlCisgICBudW1iZXIgb2Yg dGhlIG9wZXJhdGlvbiwgYW5kIGhhc2hjb2RlIGlzIHN0b3JlZCB0byBhdm9p ZCBoYXZpbmcgdG8KKyAgIGNhbGN1bGF0ZSBpdCByZXBlYXRlZGx5LiAgUGhp IG5vZGVzIG5vdCBpbiB0aGUgc2FtZSBibG9jayBhcmUgbmV2ZXIKKyAgIGNv bnNpZGVyZWQgZXF1aXZhbGVudC4gICovCisKK3R5cGVkZWYgc3RydWN0IHZu X3BoaV9zCit7CisgIC8qIFVuaXF1ZSBpZGVudGlmaWVyIHRoYXQgYWxsIGV4 cHJlc3Npb25zIHdpdGggdGhlIHNhbWUgdmFsdWUgaGF2ZS4gKi8KKyAgdW5z aWduZWQgaW50IHZhbHVlX2lkOworICBoYXNodmFsX3QgaGFzaGNvZGU7Cisg IFZFQyAodHJlZSwgaGVhcCkgKnBoaWFyZ3M7CisgIGJhc2ljX2Jsb2NrIGJs b2NrOworICB0cmVlIHJlc3VsdDsKK30gKnZuX3BoaV90OwordHlwZWRlZiBj b25zdCBzdHJ1Y3Qgdm5fcGhpX3MgKmNvbnN0X3ZuX3BoaV90OworCisvKiBS ZWZlcmVuY2Ugb3BlcmFuZHMgb25seSBleGlzdCBpbiByZWZlcmVuY2Ugb3Bl cmF0aW9ucyBzdHJ1Y3R1cmVzLgorICAgVGhleSBjb25zaXN0IG9mIGFuIG9w Y29kZSwgdHlwZSwgYW5kIHNvbWUgbnVtYmVyIG9mIG9wZXJhbmRzLiAgRm9y CisgICBhIGdpdmVuIG9wY29kZSwgc29tZSwgYWxsLCBvciBub25lIG9mIHRo ZSBvcGVyYW5kcyBtYXkgYmUgdXNlZC4KKyAgIFRoZSBvcGVyYW5kcyBhcmUg dGhlcmUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIHRoYXQgbWFrZXMgdXAg dGhlCisgICBwb3J0aW9uIG9mIHRoZSBhZGRyZXNzaW5nIGNhbGN1bGF0aW9u IHRoYXQgb3Bjb2RlIHBlcmZvcm1zLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3Qg dm5fcmVmZXJlbmNlX29wX3N0cnVjdAoreworICBlbnVtIHRyZWVfY29kZSBv cGNvZGU7CisgIHRyZWUgdHlwZTsKKyAgdHJlZSBvcDA7CisgIHRyZWUgb3Ax OworICB0cmVlIG9wMjsKK30gdm5fcmVmZXJlbmNlX29wX3M7Cit0eXBlZGVm IHZuX3JlZmVyZW5jZV9vcF9zICp2bl9yZWZlcmVuY2Vfb3BfdDsKK3R5cGVk ZWYgY29uc3Qgdm5fcmVmZXJlbmNlX29wX3MgKmNvbnN0X3ZuX3JlZmVyZW5j ZV9vcF90OworCitERUZfVkVDX08odm5fcmVmZXJlbmNlX29wX3MpOworREVG X1ZFQ19BTExPQ19PKHZuX3JlZmVyZW5jZV9vcF9zLCBoZWFwKTsKKworLyog QSByZWZlcmVuY2Ugb3BlcmF0aW9uIGluIHRoZSBoYXNodGFibGUgaXMgcmVw cmVzZW50YXRpb24gYXMgYQorICAgY29sbGVjdGlvbiBvZiB2dXNlcywgcmVw cmVzZW50aW5nIHRoZSBtZW1vcnkgc3RhdGUgYXQgdGhlIHRpbWUgb2YKKyAg IHRoZSBvcGVyYXRpb24sIGFuZCBhIGNvbGxlY3Rpb24gb2Ygb3BlcmFuZHMg dGhhdCBtYWtlIHVwIHRoZQorICAgYWRkcmVzc2luZyBjYWxjdWxhdGlvbi4g IElmIHR3byB2bl9yZWZlcmVuY2VfdCdzIGhhdmUgdGhlIHNhbWUgc2V0Cisg ICBvZiBvcGVyYW5kcywgdGhleSBhY2Nlc3MgdGhlIHNhbWUgbWVtb3J5IGxv Y2F0aW9uLiBXZSBhbHNvIHN0b3JlCisgICB0aGUgcmVzdWx0aW5nIHZhbHVl IG51bWJlciwgYW5kIHRoZSBoYXNoY29kZS4gIFRoZSB2dXNlcyBhcmUKKyAg IGFsd2F5cyBzdG9yZWQgaW4gb3JkZXIgc29ydGVkIGJ5IHNzYSBuYW1lIHZl cnNpb24uICAqLworCit0eXBlZGVmIHN0cnVjdCB2bl9yZWZlcmVuY2Vfcwor eworICAvKiBVbmlxdWUgaWRlbnRpZmllciB0aGF0IGFsbCBleHByZXNzaW9u cyB3aXRoIHRoZSBzYW1lIHZhbHVlIGhhdmUuICovCisgIHVuc2lnbmVkIGlu dCB2YWx1ZV9pZDsKKyAgaGFzaHZhbF90IGhhc2hjb2RlOworICBWRUMgKHRy ZWUsIGdjKSAqdnVzZXM7CisgIFZFQyAodm5fcmVmZXJlbmNlX29wX3MsIGhl YXApICpvcGVyYW5kczsKKyAgdHJlZSByZXN1bHQ7Cit9ICp2bl9yZWZlcmVu Y2VfdDsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IHZuX3JlZmVyZW5jZV9zICpj b25zdF92bl9yZWZlcmVuY2VfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgdm5fY29u c3RhbnRfcworeworICB1bnNpZ25lZCBpbnQgdmFsdWVfaWQ7CisgIGhhc2h2 YWxfdCBoYXNoY29kZTsKKyAgdHJlZSBjb25zdGFudDsKK30gKnZuX2NvbnN0 YW50X3Q7CisgIAogdHlwZWRlZiBzdHJ1Y3Qgdm5fc3NhX2F1eAogewogICAv KiBWYWx1ZSBudW1iZXIuIFRoaXMgbWF5IGJlIGFuIFNTQSBuYW1lIG9yIGEg Y29uc3RhbnQuICAqLwogICB0cmVlIHZhbG51bTsKICAgLyogUmVwcmVzZW50 YXRpdmUgZXhwcmVzc2lvbiwgaWYgbm90IGEgZGlyZWN0IGNvbnN0YW50LiAq LwogICB0cmVlIGV4cHI7CisKKyAgLyogVW5pcXVlIGlkZW50aWZpZXIgdGhh dCBhbGwgZXhwcmVzc2lvbnMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBoYXZlLiAq LworICB1bnNpZ25lZCBpbnQgdmFsdWVfaWQ7CiAKICAgLyogU0NDIGluZm9y bWF0aW9uLiAgKi8KICAgdW5zaWduZWQgaW50IGRmc251bTsKQEAgLTU3LDEy ICsxNDEsMzEgQEAKIGJvb2wgcnVuX3NjY192biAoYm9vbCk7CiB2b2lkIGZy ZWVfc2NjX3ZuICh2b2lkKTsKIHZvaWQgc3dpdGNoX3RvX1BSRV90YWJsZSAo dm9pZCk7Ci10cmVlIHZuX25hcnlfb3BfbG9va3VwICh0cmVlKTsKLXZvaWQg dm5fbmFyeV9vcF9pbnNlcnQgKHRyZWUsIHRyZWUpOwotdHJlZSB2bl9yZWZl cmVuY2VfbG9va3VwICh0cmVlLCBWRUMgKHRyZWUsIGdjKSAqLCBib29sKTsK LXZvaWQgdm5fcmVmZXJlbmNlX2luc2VydCAodHJlZSwgdHJlZSwgVkVDICh0 cmVlLCBnYykgKik7Cit0cmVlIHZuX25hcnlfb3BfbG9va3VwICh0cmVlLCB2 bl9uYXJ5X29wX3QgKik7Cit0cmVlIHZuX25hcnlfb3BfbG9va3VwX3BpZWNl cyAodW5zaWduZWQgaW50LCBlbnVtIHRyZWVfY29kZSwKKwkJCSAgICAgICB0 cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJICAgICAgIHZuX25h cnlfb3BfdCAqKTsKK3ZuX25hcnlfb3BfdCB2bl9uYXJ5X29wX2luc2VydCAo dHJlZSwgdHJlZSk7Cit2bl9uYXJ5X29wX3Qgdm5fbmFyeV9vcF9pbnNlcnRf cGllY2VzICh1bnNpZ25lZCBpbnQsIGVudW0gdHJlZV9jb2RlLAorCQkJCSAg ICAgICB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJCSAgICAgICB0cmVl LCB0cmVlLCB1bnNpZ25lZCBpbnQpOwordHJlZSB2bl9yZWZlcmVuY2VfbG9v a3VwX3BpZWNlcyAoVkVDICh0cmVlLCBnYykgKiwKKwkJCQkgVkVDICh2bl9y ZWZlcmVuY2Vfb3BfcywgaGVhcCkgKiwKKwkJCQkgdm5fcmVmZXJlbmNlX3Qg Kik7Cit0cmVlIHZuX3JlZmVyZW5jZV9sb29rdXAgKHRyZWUsIFZFQyAodHJl ZSwgZ2MpICosIGJvb2wsIHZuX3JlZmVyZW5jZV90ICopOwordm5fcmVmZXJl bmNlX3Qgdm5fcmVmZXJlbmNlX2luc2VydCAodHJlZSwgdHJlZSwgVkVDICh0 cmVlLCBnYykgKik7Cit2bl9yZWZlcmVuY2VfdCB2bl9yZWZlcmVuY2VfaW5z ZXJ0X3BpZWNlcyAoVkVDICh0cmVlLCBnYykgKiwKKwkJCQkJICAgVkVDICh2 bl9yZWZlcmVuY2Vfb3BfcywgaGVhcCkgKiwKKwkJCQkJICAgdHJlZSwgdW5z aWduZWQgaW50KTsKKworaGFzaHZhbF90IHZuX25hcnlfb3BfY29tcHV0ZV9o YXNoIChjb25zdCB2bl9uYXJ5X29wX3QpOworaW50IHZuX25hcnlfb3BfZXEg KGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKK2hhc2h2YWxfdCB2bl9y ZWZlcmVuY2VfY29tcHV0ZV9oYXNoIChjb25zdCB2bl9yZWZlcmVuY2VfdCk7 CitpbnQgdm5fcmVmZXJlbmNlX2VxIChjb25zdCB2b2lkICosIGNvbnN0IHZv aWQgKik7Cit1bnNpZ25lZCBpbnQgZ2V0X21heF92YWx1ZV9pZCAodm9pZCk7 Cit1bnNpZ25lZCBpbnQgZ2V0X25leHRfdmFsdWVfaWQgKHZvaWQpOwordW5z aWduZWQgaW50IGdldF9vcl9hbGxvY19jb25zdGFudF92YWx1ZV9pZCAodHJl ZSk7Citib29sIHZhbHVlX2lkX2NvbnN0YW50X3AgKHVuc2lnbmVkIGludCk7 CiBWRUMgKHRyZWUsIGdjKSAqc2hhcmVkX3Z1c2VzX2Zyb21fc3RtdCAodHJl ZSk7CiBWRUMgKHRyZWUsIGdjKSAqY29weV92dXNlc19mcm9tX3N0bXQgKHRy ZWUpOwotCi0KICNlbmRpZiAvKiBUUkVFX1NTQV9TQ0NWTl9IICAqLwpkaWZm IC1yIDIzMjUzMzBjZTllZCBnY2MvdHJlZS1zc2EtdGhyZWFkZWRnZS5jCi0t LSBhL2djYy90cmVlLXNzYS10aHJlYWRlZGdlLmMJU3VuIEp1bCAwNiAwMDox NjozMCAyMDA4ICswMDAwCisrKyBiL2djYy90cmVlLXNzYS10aHJlYWRlZGdl LmMJU3VuIEp1bCAwNiAxNToyODoxOSAyMDA4IC0wNDAwCkBAIC0zMTMsNyAr MzEzLDcgQEAKIAkgICAgICBjb3B5W2krK10gPSB1c2U7CiAJICAgICAgaWYg KFRSRUVfQ09ERSAodXNlKSA9PSBTU0FfTkFNRSkKIAkJdG1wID0gU1NBX05B TUVfVkFMVUUgKHVzZSk7Ci0JICAgICAgaWYgKHRtcCAmJiBUUkVFX0NPREUg KHRtcCkgIT0gVkFMVUVfSEFORExFKQorCSAgICAgIGlmICh0bXApCiAJCVNF VF9VU0UgKHVzZV9wLCB0bXApOwogCSAgICB9CiAKQEAgLTQwNywxNCArNDA3 LDE0IEBACiAgICAgICBpZiAoVFJFRV9DT0RFIChvcDApID09IFNTQV9OQU1F KQogCXsKICAgICAgICAgICB0cmVlIHRtcCA9IFNTQV9OQU1FX1ZBTFVFIChv cDApOwotCSAgaWYgKHRtcCAmJiBUUkVFX0NPREUgKHRtcCkgIT0gVkFMVUVf SEFORExFKQorCSAgaWYgKHRtcCkKIAkgICAgb3AwID0gdG1wOwogCX0KIAog ICAgICAgaWYgKFRSRUVfQ09ERSAob3AxKSA9PSBTU0FfTkFNRSkKIAl7CiAJ ICB0cmVlIHRtcCA9IFNTQV9OQU1FX1ZBTFVFIChvcDEpOwotCSAgaWYgKHRt cCAmJiBUUkVFX0NPREUgKHRtcCkgIT0gVkFMVUVfSEFORExFKQorCSAgaWYg KHRtcCkKIAkgICAgb3AxID0gdG1wOwogCX0KIApkaWZmIC1yIDIzMjUzMzBj ZTllZCBnY2MvdHJlZS12bi5jCi0tLSBhL2djYy90cmVlLXZuLmMJU3VuIEp1 bCAwNiAwMDoxNjozMCAyMDA4ICswMDAwCisrKyAvZGV2L251bGwJVGh1IEph biAwMSAwMDowMDowMCAxOTcwICswMDAwCkBAIC0xLDQwNiArMCwwIEBACi0v KiBWYWx1ZSBOdW1iZXJpbmcgcm91dGluZXMgZm9yIHRyZWUgZXhwcmVzc2lv bnMuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQs IDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlv biwgSW5jLgotICAgQ29udHJpYnV0ZWQgYnkgRGFuaWVsIEJlcmxpbiA8ZGFu QGRiZXJsaW4ub3JnPiwgU3RldmVuIEJvc3NjaGVyCi0gICA8c3RldmVuYkBz dXNlLmRlPiBhbmQgRGllZ28gTm92aWxsbyA8ZG5vdmlsbG9AcmVkaGF0LmNv bT4KLQotVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgotCi1HQ0MgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQotaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLXRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3Vy IG9wdGlvbikKLWFueSBsYXRlciB2ZXJzaW9uLgotCi1HQ0MgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLWJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCi1NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi1HTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi1Zb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBD T1BZSU5HMy4gIElmIG5vdCBzZWUKLTxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl ICJzeXN0ZW0uaCIKLSNpbmNsdWRlICJjb3JldHlwZXMuaCIKLSNpbmNsdWRl ICJ0bS5oIgotI2luY2x1ZGUgImdnYy5oIgotI2luY2x1ZGUgInRyZWUuaCIK LSNpbmNsdWRlICJ0cmVlLWZsb3cuaCIKLSNpbmNsdWRlICJoYXNodGFiLmgi Ci0jaW5jbHVkZSAibGFuZ2hvb2tzLmgiCi0jaW5jbHVkZSAidHJlZS1wYXNz LmgiCi0jaW5jbHVkZSAidHJlZS1kdW1wLmgiCi0jaW5jbHVkZSAiZGlhZ25v c3RpYy5oIgotI2luY2x1ZGUgInRyZWUtc3NhLXNjY3ZuLmgiCi0KLS8qIE1v c3Qgb2YgdGhpcyBpcyBQUkUgc3BlY2lmaWMuICBUaGUgcmVhbCBncnVudCB3 b3JrIGlzIGRvbmUgaW4KLSAgIHRyZWUtc3NhLXNjY3ZuLmMuICBUaGlzIGlz IHdoZXJlIHRoZSBsb29rdXAgYW5kIGluc2VydGlvbgotICAgZnVuY3Rpb25z LCBldGMsIGNhbiBiZSBmb3VuZC4gICovCi0KLS8qIENyZWF0ZSBhbmQgcmV0 dXJuIGEgbmV3IHZhbHVlIGhhbmRsZSBub2RlIG9mIHR5cGUgVFlQRS4gICov Ci0KLXRyZWUKLW1ha2VfdmFsdWVfaGFuZGxlICh0cmVlIHR5cGUpCi17Ci0g IHN0YXRpYyB1bnNpZ25lZCBpbnQgaWQgPSAwOwotICB0cmVlIHZoOwotCi0g IHZoID0gYnVpbGQwIChWQUxVRV9IQU5ETEUsIHR5cGUpOwotICBWQUxVRV9I QU5ETEVfSUQgKHZoKSA9IGlkKys7Ci0gIHJldHVybiB2aDsKLX0KLQotLyog Q29tcGFyZSB0d28gZXhwcmVzc2lvbnMgRTEgYW5kIEUyIGFuZCByZXR1cm4g dHJ1ZSBpZiB0aGV5IGFyZQotICAgZXF1YWwuICAqLwotCi1ib29sCi1leHBy ZXNzaW9uc19lcXVhbF9wICh0cmVlIGUxLCB0cmVlIGUyKQotewotICB0cmVl IHRlMSwgdGUyOwotCi0gIGlmIChlMSA9PSBlMikKLSAgICByZXR1cm4gdHJ1 ZTsKLQotICB0ZTEgPSBUUkVFX1RZUEUgKGUxKTsKLSAgdGUyID0gVFJFRV9U WVBFIChlMik7Ci0KLSAgaWYgKFRSRUVfQ09ERSAoZTEpID09IFRSRUVfTElT VCAmJiBUUkVFX0NPREUgKGUyKSA9PSBUUkVFX0xJU1QpCi0gICAgewotICAg ICAgdHJlZSBsb3AxID0gZTE7Ci0gICAgICB0cmVlIGxvcDIgPSBlMjsKLSAg ICAgIGZvciAobG9wMSA9IGUxLCBsb3AyID0gZTI7Ci0JICAgbG9wMSB8fCBs b3AyOwotCSAgIGxvcDEgPSBUUkVFX0NIQUlOIChsb3AxKSwgbG9wMiA9IFRS RUVfQ0hBSU4gKGxvcDIpKQotCXsKLQkgIGlmICghbG9wMSB8fCAhbG9wMikK LQkgICAgcmV0dXJuIGZhbHNlOwotCSAgaWYgKCFleHByZXNzaW9uc19lcXVh bF9wIChUUkVFX1ZBTFVFIChsb3AxKSwgVFJFRV9WQUxVRSAobG9wMikpKQot CSAgICByZXR1cm4gZmFsc2U7Ci0JfQotICAgICAgcmV0dXJuIHRydWU7Ci0K LSAgICB9Ci0gIGVsc2UgaWYgKFRSRUVfQ09ERSAoZTEpID09IFRSRUVfQ09E RSAoZTIpCi0JICAgJiYgb3BlcmFuZF9lcXVhbF9wIChlMSwgZTIsIE9FUF9Q VVJFX1NBTUUpKQotICAgIHJldHVybiB0cnVlOwotCi0gIHJldHVybiBmYWxz ZTsKLX0KLQotLyogU2V0IHRoZSB2YWx1ZSBoYW5kbGUgZm9yIGV4cHJlc3Np b24gRSB0byB2YWx1ZSBWLiAgKi8KLQotdm9pZAotc2V0X3ZhbHVlX2hhbmRs ZSAodHJlZSBlLCB0cmVlIHYpCi17Ci0gIGlmIChUUkVFX0NPREUgKGUpID09 IFNTQV9OQU1FKQotICAgIFNTQV9OQU1FX1ZBTFVFIChlKSA9IHY7Ci0gIGVs c2UgaWYgKEVYUFJfUCAoZSkgfHwgREVDTF9QIChlKSB8fCBUUkVFX0NPREUg KGUpID09IFRSRUVfTElTVAotCSAgIHx8IEdJTVBMRV9TVE1UX1AgKGUpCi0J ICAgfHwgVFJFRV9DT0RFIChlKSA9PSBDT05TVFJVQ1RPUikKLSAgICBnZXRf dHJlZV9jb21tb25fYW5uIChlKS0+dmFsdWVfaGFuZGxlID0gdjsKLSAgZWxz ZQotICAgIC8qIERvIG5vdGhpbmcuICBDb25zdGFudHMgYXJlIHRoZWlyIG93 biB2YWx1ZSBoYW5kbGVzLiAgKi8KLSAgICBnY2NfYXNzZXJ0IChpc19naW1w bGVfbWluX2ludmFyaWFudCAoZSkpOwotfQotCi0vKiBQcmludCBvdXQgdGhl ICJDcmVhdGVkIHZhbHVlIDx4PiBmb3IgPFk+IiBzdGF0ZW1lbnQgdG8gdGhl Ci0gICBkdW1wX2ZpbGUuCi0gICBUaGlzIGlzIGZhY3RvcmVkIGJlY2F1c2Ug Ym90aCB2ZXJzaW9ucyBvZiBsb29rdXAgdXNlIGl0LCBhbmQgaXQKLSAgIG9i c2N1cmVzIHRoZSByZWFsIHdvcmsgZ29pbmcgb24gaW4gdGhvc2UgZnVuY3Rp b25zLiAgKi8KLQotc3RhdGljIHZvaWQKLXByaW50X2NyZWF0aW9uX3RvX2Zp bGUgKHRyZWUgdiwgdHJlZSBleHByLCBWRUMgKHRyZWUsIGdjKSAqdnVzZXMp Ci17Ci0gIGZwcmludGYgKGR1bXBfZmlsZSwgIkNyZWF0ZWQgdmFsdWUgIik7 Ci0gIHByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9maWxlLCB2LCBkdW1wX2Zs YWdzKTsKLSAgZnByaW50ZiAoZHVtcF9maWxlLCAiIGZvciAiKTsKLSAgcHJp bnRfZ2VuZXJpY19leHByIChkdW1wX2ZpbGUsIGV4cHIsIGR1bXBfZmxhZ3Mp OwotCi0gIGlmICh2dXNlcyAmJiBWRUNfbGVuZ3RoICh0cmVlLCB2dXNlcykg IT0gMCkKLSAgICB7Ci0gICAgICBzaXplX3QgaTsKLSAgICAgIHRyZWUgdnVz ZTsKLQotICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiIHZ1c2VzOiAoIik7 Ci0gICAgICBmb3IgKGkgPSAwOyBWRUNfaXRlcmF0ZSAodHJlZSwgdnVzZXMs IGksIHZ1c2UpOyBpKyspCi0JewotCSAgcHJpbnRfZ2VuZXJpY19leHByIChk dW1wX2ZpbGUsIHZ1c2UsIGR1bXBfZmxhZ3MpOwotCSAgaWYgKFZFQ19sZW5n dGggKHRyZWUsIHZ1c2VzKSAtIDEgIT0gaSkKLQkgICAgZnByaW50ZiAoZHVt cF9maWxlLCAiLCIpOwotCX0KLSAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwg IikiKTsKLSAgICB9Ci0gIGZwcmludGYgKGR1bXBfZmlsZSwgIlxuIik7Ci19 Ci0KLS8qIFNvcnQgdGhlIFZVU0UgYXJyYXkgc28gdGhhdCB3ZSBjYW4gZG8g ZXF1YWxpdHkgY29tcGFyaXNvbnMKLSAgIHF1aWNrZXIgb24gdHdvIHZ1c2Ug dmVjcy4gICovCi0KLXZvaWQKLXNvcnRfdnVzZXMgKFZFQyAodHJlZSxnYykg KnZ1c2VzKQotewotICBpZiAoVkVDX2xlbmd0aCAodHJlZSwgdnVzZXMpID4g MSkKLSAgICBxc29ydCAoVkVDX2FkZHJlc3MgKHRyZWUsIHZ1c2VzKSwKLQkg ICBWRUNfbGVuZ3RoICh0cmVlLCB2dXNlcyksCi0JICAgc2l6ZW9mICh0cmVl KSwKLQkgICBvcGVyYW5kX2J1aWxkX2NtcCk7Ci19Ci0KLS8qIFNvcnQgdGhl IFZVU0UgYXJyYXkgc28gdGhhdCB3ZSBjYW4gZG8gZXF1YWxpdHkgY29tcGFy aXNvbnMKLSAgIHF1aWNrZXIgb24gdHdvIHZ1c2UgdmVjcy4gICovCi0KLXZv aWQKLXNvcnRfdnVzZXNfaGVhcCAoVkVDICh0cmVlLGhlYXApICp2dXNlcykK LXsKLSAgaWYgKFZFQ19sZW5ndGggKHRyZWUsIHZ1c2VzKSA+IDEpCi0gICAg cXNvcnQgKFZFQ19hZGRyZXNzICh0cmVlLCB2dXNlcyksCi0JICAgVkVDX2xl bmd0aCAodHJlZSwgdnVzZXMpLAotCSAgIHNpemVvZiAodHJlZSksCi0JICAg b3BlcmFuZF9idWlsZF9jbXApOwotfQotCi0vKiBJbnNlcnQgRVhQUiBpbnRv IFZBTFVFX1RBQkxFIHdpdGggdmFsdWUgVkFMLCBhbmQgYWRkIGV4cHJlc3Np b24KLSAgIEVYUFIgdG8gdGhlIHZhbHVlIHNldCBmb3IgdmFsdWUgVkFMLiAg Ki8KLQotdm9pZAotdm5fYWRkICh0cmVlIGV4cHIsIHRyZWUgdmFsKQotewot ICBzd2l0Y2ggKFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChleHByKSkp Ci0gICAgewotICAgIGNhc2UgdGNjX2NvbXBhcmlzb246Ci0gICAgY2FzZSB0 Y2NfYmluYXJ5OgotICAgICAgdm5fbmFyeV9vcF9pbnNlcnQgKGV4cHIsIHZh bCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIHRjY191bmFyeToKLSAgICAg IHZuX25hcnlfb3BfaW5zZXJ0IChleHByLCB2YWwpOwotICAgICAgYnJlYWs7 Ci0gICAgICAvKiBJbiB0aGUgY2FzZSBvZiBhcnJheS1yZWZzIG9mIGNvbnN0 YW50cywgZm9yIGV4YW1wbGUsIHdlIGNhbgotCSBlbmQgdXAgd2l0aCBubyB2 dXNlcy4gICovCi0gICAgY2FzZSB0Y2NfcmVmZXJlbmNlOgotICAgICAgdm5f cmVmZXJlbmNlX2luc2VydCAoZXhwciwgdmFsLCBOVUxMKTsKLSAgICAgIGJy ZWFrOwotICAgICAgLyogVGhlICpvbmx5KiB0aW1lIENBTExfRVhQUiBzaG91 bGQgYXBwZWFyIGhlcmUgaXMKLQkgd2hlbiBpdCBoYXMgbm8gdnVzZXMuICAq LwotICAgIGNhc2UgdGNjX3ZsX2V4cDoKLSAgICBjYXNlIHRjY19leGNlcHRp b25hbDoKLSAgICBjYXNlIHRjY19leHByZXNzaW9uOgotICAgIGNhc2UgdGNj X2RlY2xhcmF0aW9uOgotICAgICAgaWYgKFRSRUVfQ09ERSAoZXhwcikgPT0g Q0FMTF9FWFBSIHx8IERFQ0xfUCAoZXhwcikpCi0JewotCSAgdm5fcmVmZXJl bmNlX2luc2VydCAoZXhwciwgdmFsLCBOVUxMKTsKLQkgIGJyZWFrOwotCX0K LSAgICAgIGVsc2UgaWYgKFRSRUVfQ09ERSAoZXhwcikgPT0gU1NBX05BTUUp Ci0JewotCSAgU1NBX05BTUVfVkFMVUUgKGV4cHIpID0gdmFsOwotCSAgYnJl YWs7Ci0JfQotICAgICAgc3dpdGNoIChUUkVFX0NPREUgKGV4cHIpKQotCXsK LQljYXNlIEFERFJfRVhQUjoKLQljYXNlIFRSVVRIX0FORF9FWFBSOgotCWNh c2UgVFJVVEhfT1JfRVhQUjoKLQljYXNlIFRSVVRIX1hPUl9FWFBSOgotCWNh c2UgVFJVVEhfTk9UX0VYUFI6Ci0JICB2bl9uYXJ5X29wX2luc2VydCAoZXhw ciwgdmFsKTsKLQkgICAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgIGdjY191bnJl YWNoYWJsZSAoKTsKLQl9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot ICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOwotICAgIH0KLSAgc2V0X3ZhbHVl X2hhbmRsZSAoZXhwciwgdmFsKTsKLSAgaWYgKFRSRUVfQ09ERSAodmFsKSA9 PSBWQUxVRV9IQU5ETEUpCi0gICAgYWRkX3RvX3ZhbHVlICh2YWwsIGV4cHIp OwotfQotCi0vKiBJbnNlcnQgRVhQUiBpbnRvIHRoZSB2YWx1ZSBudW1iZXJp bmcgdGFibGVzIHdpdGggdmFsdWUgVkFMLCBhbmQKLSAgIGFkZCBleHByZXNz aW9uIEVYUFIgdG8gdGhlIHZhbHVlIHNldCBmb3IgdmFsdWUgVkFMLiAgVlVT RVMKLSAgIHJlcHJlc2VudHMgdGhlIHZpcnR1YWwgdXNlIG9wZXJhbmRzIGFz c29jaWF0ZWQgd2l0aCBFWFBSLiAgSXQgaXMKLSAgIHVzZWQgd2hlbiBjb21w dXRpbmcgYSBoYXNoIHZhbHVlIGZvciBFWFBSLiAgKi8KLQotdm9pZAotdm5f YWRkX3dpdGhfdnVzZXMgKHRyZWUgZXhwciwgdHJlZSB2YWwsIFZFQyAodHJl ZSwgZ2MpICp2dXNlcykKLXsKLSAgaWYgKCF2dXNlcykKLSAgICB7Ci0gICAg ICB2bl9hZGQgKGV4cHIsIHZhbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQot ICB2bl9yZWZlcmVuY2VfaW5zZXJ0IChleHByLCB2YWwsIHZ1c2VzKTsKLQot ICBzZXRfdmFsdWVfaGFuZGxlIChleHByLCB2YWwpOwotICBpZiAoVFJFRV9D T0RFICh2YWwpID09IFZBTFVFX0hBTkRMRSkKLSAgICBhZGRfdG9fdmFsdWUg KHZhbCwgZXhwcik7Ci19Ci0KLS8qIExvb2t1cCBFWFBSIGluIHRoZSB2YWx1 ZSBudW1iZXJpbmcgdGFibGVzIGFuZCByZXR1cm4gdGhlIHJlc3VsdCwgaWYK LSAgIHdlIGhhdmUgb25lLiAgKi8KLQotdHJlZQotdm5fbG9va3VwICh0cmVl IGV4cHIpCi17Ci0gIC8qIENvbnN0YW50cyBhcmUgdGhlaXIgb3duIHZhbHVl LiAgKi8KLSAgaWYgKGlzX2dpbXBsZV9taW5faW52YXJpYW50IChleHByKSB8 fCBUUkVFX0NPREUgKGV4cHIpID09IEZJRUxEX0RFQ0wpCi0gICAgcmV0dXJu IGV4cHI7Ci0KLSAgc3dpdGNoIChUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09E RSAoZXhwcikpKQotICAgIHsKLSAgICBjYXNlIHRjY19jb21wYXJpc29uOgot ICAgIGNhc2UgdGNjX2JpbmFyeToKLSAgICAgIHJldHVybiB2bl9uYXJ5X29w X2xvb2t1cCAoZXhwcik7Ci0gICAgY2FzZSB0Y2NfdW5hcnk6Ci0gICAgICBy ZXR1cm4gdm5fbmFyeV9vcF9sb29rdXAgKGV4cHIpOwotICAgICAgYnJlYWs7 Ci0gICAgICAvKiBJbiB0aGUgY2FzZSBvZiBhcnJheS1yZWZzIG9mIGNvbnN0 YW50cywgZm9yIGV4YW1wbGUsIHdlIGNhbgotCSBlbmQgdXAgd2l0aCBubyB2 dXNlcy4gICovCi0gICAgY2FzZSB0Y2NfcmVmZXJlbmNlOgotICAgICAgcmV0 dXJuIHZuX3JlZmVyZW5jZV9sb29rdXAgKGV4cHIsIE5VTEwsIGZhbHNlKTsK LSAgICAgIGJyZWFrOwotICAgICAgLyogSXQgaXMgcG9zc2libGUgdG8gaGF2 ZSBDQUxMX0VYUFIgd2l0aCBubyB2dXNlcyBmb3IgdGhpbmdzCi0JIGxpa2Ug ImNvcyIsIGFuZCB0aGVzZSB3aWxsIGZhbGwgaW50byB2bl9sb29rdXAuICAg Ki8KLSAgICBjYXNlIHRjY192bF9leHA6Ci0gICAgY2FzZSB0Y2NfZXhjZXB0 aW9uYWw6Ci0gICAgY2FzZSB0Y2NfZXhwcmVzc2lvbjoKLSAgICBjYXNlIHRj Y19kZWNsYXJhdGlvbjoKLSAgICAgIGlmIChUUkVFX0NPREUgKGV4cHIpID09 IENBTExfRVhQUiB8fCBERUNMX1AgKGV4cHIpKQotCXJldHVybiB2bl9yZWZl cmVuY2VfbG9va3VwIChleHByLCBOVUxMLCBmYWxzZSk7Ci0gICAgICBlbHNl IGlmIChUUkVFX0NPREUgKGV4cHIpID09IFNTQV9OQU1FKQotCXJldHVybiBT U0FfTkFNRV9WQUxVRSAoZXhwcik7Ci0gICAgICBzd2l0Y2ggKFRSRUVfQ09E RSAoZXhwcikpCi0JewotCWNhc2UgQUREUl9FWFBSOgotCWNhc2UgVFJVVEhf QU5EX0VYUFI6Ci0JY2FzZSBUUlVUSF9PUl9FWFBSOgotCWNhc2UgVFJVVEhf WE9SX0VYUFI6Ci0JY2FzZSBUUlVUSF9OT1RfRVhQUjoKLQkgIHJldHVybiB2 bl9uYXJ5X29wX2xvb2t1cCAoZXhwcik7Ci0JZGVmYXVsdDoKLQkgIGdjY191 bnJlYWNoYWJsZSAoKTsKLQl9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0 OgotICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOwotICAgIH0KLSAgcmV0dXJu IE5VTEw7Ci19Ci0KLS8qIFNlYXJjaCBpbiB0aGUgdmFsdWUgbnVtYmVyaW5n IHRhYmxlcyBmb3IgYW4gZXhpc3RpbmcgaW5zdGFuY2Ugb2YKLSAgIGV4cHJl c3Npb24gRVhQUiwgIGFuZCByZXR1cm4gaXRzIHZhbHVlLCBvciBOVUxMIGlm IG5vbmUgaGFzIGJlZW4gc2V0LiAgU1RNVAotICAgcmVwcmVzZW50cyB0aGUg c3RtdCBhc3NvY2lhdGVkIHdpdGggRVhQUi4gIEl0IGlzIHVzZWQgd2hlbiBj b21wdXRpbmcgdGhlCi0gICBoYXNoIHZhbHVlIGZvciBFWFBSIGZvciByZWZl cmVuY2Ugb3BlcmF0aW9ucy4gICovCi0KLXRyZWUKLXZuX2xvb2t1cF93aXRo X3N0bXQgKHRyZWUgZXhwciwgdHJlZSBzdG10KQotewotICBpZiAoc3RtdCA9 PSBOVUxMKQotICAgIHJldHVybiB2bl9sb29rdXAgKGV4cHIpOwotCi0gIC8q IENvbnN0YW50cyBhcmUgdGhlaXIgb3duIHZhbHVlLiAgKi8KLSAgaWYgKGlz X2dpbXBsZV9taW5faW52YXJpYW50IChleHByKSB8fCBUUkVFX0NPREUgKGV4 cHIpID09IEZJRUxEX0RFQ0wpCi0gICAgcmV0dXJuIGV4cHI7Ci0KLSAgcmV0 dXJuIHZuX2xvb2t1cF93aXRoX3Z1c2VzIChleHByLCBzaGFyZWRfdnVzZXNf ZnJvbV9zdG10IChzdG10KSk7Ci19Ci0KLS8qIFNlYXJjaCBpbiBWQUxVRV9U QUJMRSBmb3IgYW4gZXhpc3RpbmcgaW5zdGFuY2Ugb2YgZXhwcmVzc2lvbiBF WFBSLAotICAgYW5kIHJldHVybiBpdHMgdmFsdWUsIG9yIE5VTEwgaWYgbm9u ZSBoYXMgYmVlbiBzZXQuICBWVVNFUyBpcyB0aGUKLSAgIGxpc3Qgb2Ygdmly dHVhbCB1c2Ugb3BlcmFuZHMgYXNzb2NpYXRlZCB3aXRoIEVYUFIuICBJdCBp cyB1c2VkIHdoZW4KLSAgIGNvbXB1dGluZyB0aGUgaGFzaCB2YWx1ZSBmb3Ig RVhQUi4gICovCi0KLXRyZWUKLXZuX2xvb2t1cF93aXRoX3Z1c2VzICh0cmVl IGV4cHIsIFZFQyAodHJlZSwgZ2MpICp2dXNlcykKLXsKLSAgaWYgKCF2dXNl cyB8fCAhVkVDX2xlbmd0aCAodHJlZSwgdnVzZXMpKQotICAgIHJldHVybiB2 bl9sb29rdXAgKGV4cHIpOwotCi0gIGlmIChpc19naW1wbGVfbWluX2ludmFy aWFudCAoZXhwcikgfHwgVFJFRV9DT0RFIChleHByKSA9PSBGSUVMRF9ERUNM KQotICAgIHJldHVybiBleHByOwotCi0gIC8qIFdlIG1heSBub3Qgd2FsayB0 aGUgdXNlLWRlZiBjaGFpbnMgaGVyZSBhcyB0aGUgYWxpYXMgb3JhY2xlIGNh bm5vdAotICAgICBwcm9wZXJseSBkZWFsIHdpdGggVkFMVUVfSEFORExFIHRy ZWUgbm9kZXMgd2UgZmVlZCBpdCBoZXJlLiAgKi8KLSAgcmV0dXJuIHZuX3Jl ZmVyZW5jZV9sb29rdXAgKGV4cHIsIHZ1c2VzLCBmYWxzZSk7Ci19Ci0KLXN0 YXRpYyB0cmVlCi1jcmVhdGVfdmFsdWVfaGFuZGxlX2Zvcl9leHByICh0cmVl IGV4cHIsIFZFQyh0cmVlLCBnYykgKnZ1c2VzKQotewotICB0cmVlIHY7Ci0K LSAgdiA9IG1ha2VfdmFsdWVfaGFuZGxlIChUUkVFX1RZUEUgKGV4cHIpKTsK LQotICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJ TFMpKQotICAgIHByaW50X2NyZWF0aW9uX3RvX2ZpbGUgKHYsIGV4cHIsIHZ1 c2VzKTsKLSAgcmV0dXJuIHY7Ci19Ci0KLS8qIExpa2Ugdm5fbG9va3VwLCBi dXQgY3JlYXRlcyBhIG5ldyB2YWx1ZSBmb3IgdGhlIG9wZXJhdGlvbiBpZiBv bmUKLSAgIGRvZXMgbm90IGV4aXN0LiAgKi8KLQotdHJlZQotdm5fbG9va3Vw X29yX2FkZCAodHJlZSBleHByKQotewotICB0cmVlIHYgPSB2bl9sb29rdXAg KGV4cHIpOwotCi0gIGlmICh2ID09IE5VTExfVFJFRSkKLSAgICB7Ci0gICAg ICB2ID0gY3JlYXRlX3ZhbHVlX2hhbmRsZV9mb3JfZXhwciAoZXhwciwgTlVM TCk7Ci0gICAgICB2bl9hZGQgKGV4cHIsIHYpOwotICAgIH0KLSAgZWxzZQot ICAgIHNldF92YWx1ZV9oYW5kbGUgKGV4cHIsIHYpOwotCi0gIHJldHVybiB2 OwotfQotCi0vKiBMaWtlIHZuX2xvb2t1cCwgYnV0IGhhbmRsZXMgcmVmZXJl bmNlIG9wZXJhdGlvbnMgYXMgd2VsbCBieSB1c2luZwotICAgU1RNVCB0byBn ZXQgdGhlIHNldCBvZiB2dXNlcy4gICovCi0KLXRyZWUKLXZuX2xvb2t1cF9v cl9hZGRfd2l0aF9zdG10ICh0cmVlIGV4cHIsIHRyZWUgc3RtdCkKLXsKLSAg dHJlZSB2OwotICBpZiAoIXN0bXQpCi0gICAgcmV0dXJuIHZuX2xvb2t1cF9v cl9hZGQgKGV4cHIpOwotCi0gIHYgPSB2bl9sb29rdXBfd2l0aF9zdG10IChl eHByLCBzdG10KTsKLSAgaWYgKHYgPT0gTlVMTF9UUkVFKQotICAgIHsKLSAg ICAgIFZFQyAodHJlZSwgZ2MpICp2dXNlcyA9IGNvcHlfdnVzZXNfZnJvbV9z dG10IChzdG10KTsKLSAgICAgIHYgPSBjcmVhdGVfdmFsdWVfaGFuZGxlX2Zv cl9leHByIChleHByLCB2dXNlcyk7Ci0gICAgICB2bl9hZGRfd2l0aF92dXNl cyAoZXhwciwgdiwgdnVzZXMpOwotICAgIH0KLSAgZWxzZQotICAgIHNldF92 YWx1ZV9oYW5kbGUgKGV4cHIsIHYpOwotCi0gIHJldHVybiB2OwotfQotCi0v KiBMaWtlIHZuX2xvb2t1cCwgYnV0IGNyZWF0ZXMgYSBuZXcgdmFsdWUgZm9y IGV4cHJlc3Npb24gRVhQUiwgaWYKLSAgIEVYUFIgZG9lc24ndCBhbHJlYWR5 IGhhdmUgYSB2YWx1ZS4gIFJldHVybiB0aGUgZXhpc3RpbmcvY3JlYXRlZAot ICAgdmFsdWUgZm9yIEVYUFIuICBTVE1UIHJlcHJlc2VudHMgdGhlIHN0bXQg YXNzb2NpYXRlZCB3aXRoIEVYUFIuICBJdCBpcyB1c2VkCi0gICB3aGVuIGNv bXB1dGluZyB0aGUgaGFzaCB2YWx1ZSBmb3IgRVhQUi4gICovCi0KLXRyZWUK LXZuX2xvb2t1cF9vcl9hZGRfd2l0aF92dXNlcyAodHJlZSBleHByLCBWRUMg KHRyZWUsIGdjKSAqdnVzZXMpCi17Ci0gIHRyZWUgdjsKLQotICBpZiAoIXZ1 c2VzIHx8IFZFQ19sZW5ndGggKHRyZWUsIHZ1c2VzKSA9PSAwKQotICAgIHJl dHVybiB2bl9sb29rdXBfb3JfYWRkIChleHByKTsKLQotICB2ID0gdm5fbG9v a3VwX3dpdGhfdnVzZXMgKGV4cHIsIHZ1c2VzKTsKLSAgaWYgKHYgPT0gTlVM TF9UUkVFKQotICAgIHsKLSAgICAgIHYgPSBjcmVhdGVfdmFsdWVfaGFuZGxl X2Zvcl9leHByIChleHByLCB2dXNlcyk7Ci0gICAgICB2bl9hZGRfd2l0aF92 dXNlcyAoZXhwciwgdiwgdnVzZXMpOwotICAgIH0KLSAgZWxzZQotICAgIHNl dF92YWx1ZV9oYW5kbGUgKGV4cHIsIHYpOwotCi0gIHJldHVybiB2OwotfQot CmRpZmYgLXIgMjMyNTMzMGNlOWVkIGdjYy90cmVlLmMKLS0tIGEvZ2NjL3Ry ZWUuYwlTdW4gSnVsIDA2IDAwOjE2OjMwIDIwMDggKzAwMDAKKysrIGIvZ2Nj L3RyZWUuYwlTdW4gSnVsIDA2IDE1OjI4OjE5IDIwMDggLTA0MDAKQEAgLTQ2 Miw3ICs0NjIsNiBAQAogCiAJY2FzZSBTVEFURU1FTlRfTElTVDoJcmV0dXJu IHNpemVvZiAoc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3QpOwogCWNhc2Ug QkxPQ0s6CQlyZXR1cm4gc2l6ZW9mIChzdHJ1Y3QgdHJlZV9ibG9jayk7Ci0J Y2FzZSBWQUxVRV9IQU5ETEU6CXJldHVybiBzaXplb2YgKHN0cnVjdCB0cmVl X3ZhbHVlX2hhbmRsZSk7CiAJY2FzZSBDT05TVFJVQ1RPUjoJcmV0dXJuIHNp emVvZiAoc3RydWN0IHRyZWVfY29uc3RydWN0b3IpOwogCiAJZGVmYXVsdDoK QEAgLTIzODcsNyArMjM4Niw2IEBACiAgICAgY2FzZSBCTE9DSzoJCQlyZXR1 cm4gVFNfQkxPQ0s7CiAgICAgY2FzZSBDT05TVFJVQ1RPUjoJCXJldHVybiBU U19DT05TVFJVQ1RPUjsKICAgICBjYXNlIFRSRUVfQklORk86CQlyZXR1cm4g VFNfQklORk87Ci0gICAgY2FzZSBWQUxVRV9IQU5ETEU6CQlyZXR1cm4gVFNf VkFMVUVfSEFORExFOwogICAgIGNhc2UgT01QX0NMQVVTRToJCXJldHVybiBU U19PTVBfQ0xBVVNFOwogCiAgICAgZGVmYXVsdDoKQEAgLTUzNTgsNyArNTM1 Niw2IEBACiAgICAgICByZXR1cm4gaXRlcmF0aXZlX2hhc2hfZXhwciAoVFJF RV9WRUNUT1JfQ1NUX0VMVFMgKHQpLCB2YWwpOwogCiAgICAgY2FzZSBTU0Ff TkFNRToKLSAgICBjYXNlIFZBTFVFX0hBTkRMRToKICAgICAgIC8qIHdlIGNh biBqdXN0IGNvbXBhcmUgYnkgcG9pbnRlci4gICovCiAgICAgICByZXR1cm4g aXRlcmF0aXZlX2hhc2hfcG9pbnRlciAodCwgdmFsKTsKIApkaWZmIC1yIDIz MjUzMzBjZTllZCBnY2MvdHJlZS5kZWYKLS0tIGEvZ2NjL3RyZWUuZGVmCVN1 biBKdWwgMDYgMDA6MTY6MzAgMjAwOCArMDAwMAorKysgYi9nY2MvdHJlZS5k ZWYJU3VuIEp1bCAwNiAxNToyODoxOSAyMDA4IC0wNDAwCkBAIC05MjUsMTIg KzkyNSw2IEBACiAgICBVc2UgdGhlIGludGVyZmFjZSBpbiB0cmVlLWl0ZXJh dG9yLmggdG8gYWNjZXNzIHRoaXMgbm9kZS4gICovCiBERUZUUkVFQ09ERSAo U1RBVEVNRU5UX0xJU1QsICJzdGF0ZW1lbnRfbGlzdCIsIHRjY19leGNlcHRp b25hbCwgMCkKIAotLyogVmFsdWUgaGFuZGxlcy4gIEFydGlmaWNpYWwgbm9k ZXMgdG8gcmVwcmVzZW50IGV4cHJlc3Npb25zIGluCi0gICBwYXJ0aWFsIHJl ZHVuZGFuY3kgZWxpbWluYXRpb24gKHRyZWUtc3NhLXByZS5jKS4gIFRoZXNl IG5vZGVzIGFyZQotICAgdXNlZCBmb3IgZXhwcmVzc2lvbiBjYW5vbmljYWxp emF0aW9uLiAgSWYgdHdvIGV4cHJlc3Npb25zIGNvbXB1dGUKLSAgIHRoZSBz YW1lIHZhbHVlLCB0aGV5IHdpbGwgYmUgYXNzaWduZWQgdGhlIHNhbWUgdmFs dWUgaGFuZGxlLiAgKi8KLURFRlRSRUVDT0RFIChWQUxVRV9IQU5ETEUsICJ2 YWx1ZV9oYW5kbGUiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCi0KIC8qIFByZWRp Y2F0ZSBhc3NlcnRpb24uICBBcnRpZmljaWFsIGV4cHJlc3Npb24gZ2VuZXJh dGVkIGJ5IHRoZSBvcHRpbWl6ZXJzCiAgICB0byBrZWVwIHRyYWNrIG9mIHBy ZWRpY2F0ZSB2YWx1ZXMuICBUaGlzIGV4cHJlc3Npb24gbWF5IG9ubHkgYXBw ZWFyIG9uCiAgICB0aGUgUkhTIG9mIGFzc2lnbm1lbnRzLgpkaWZmIC1yIDIz MjUzMzBjZTllZCBnY2MvdHJlZS5oCi0tLSBhL2djYy90cmVlLmgJU3VuIEp1 bCAwNiAwMDoxNjozMCAyMDA4ICswMDAwCisrKyBiL2djYy90cmVlLmgJU3Vu IEp1bCAwNiAxNToyODoxOSAyMDA4IC0wNDAwCkBAIC0zNDkyLDI2ICszNDky LDYgQEAKICAgc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAqdGFp bDsKIH07CiAKLSNkZWZpbmUgVkFMVUVfSEFORExFX0lEKE5PREUpCQlcCi0g IChWQUxVRV9IQU5ETEVfQ0hFQ0sgKE5PREUpLT52YWx1ZV9oYW5kbGUuaWQp Ci0KLSNkZWZpbmUgVkFMVUVfSEFORExFX0VYUFJfU0VUKE5PREUpCVwKLSAg KFZBTFVFX0hBTkRMRV9DSEVDSyAoTk9ERSktPnZhbHVlX2hhbmRsZS5leHBy X3NldCkKLQotLyogRGVmaW5lZCBhbmQgdXNlZCBpbiB0cmVlLXNzYS1wcmUu Yy4gICovCi0KLXN0cnVjdCB0cmVlX3ZhbHVlX2hhbmRsZSBHVFkoKCkpCi17 Ci0gIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247Ci0KLSAgLyogVGhlIHNl dCBvZiBleHByZXNzaW9ucyByZXByZXNlbnRlZCBieSB0aGlzIGhhbmRsZS4g ICovCi0gIHN0cnVjdCBiaXRtYXBfc2V0ICogR1RZICgoc2tpcCkpIGV4cHJf c2V0OwotCi0gIC8qIFVuaXF1ZSBJRCBmb3IgdGhpcyB2YWx1ZSBoYW5kbGUu ICBJRHMgYXJlIGhhbmRlZCBvdXQgaW4gYQotICAgICBjb252ZW5pZW50bHkg ZGVuc2UgZm9ybSBzdGFydGluZyBhdCAwLCBzbyB0aGF0IHdlIGNhbiBtYWtl Ci0gICAgIGJpdG1hcHMgb2YgdmFsdWUgaGFuZGxlcy4gICovCi0gIHVuc2ln bmVkIGludCBpZDsKLX07CiAMCiAvKiBEZWZpbmUgdGhlIG92ZXJhbGwgY29u dGVudHMgb2YgYSB0cmVlIG5vZGUuCiAgICBJdCBtYXkgYmUgYW55IG9mIHRo ZSBzdHJ1Y3R1cmVzIGRlY2xhcmVkIGFib3ZlCkBAIC0zNTUyLDcgKzM1MzIs NiBAQAogICBzdHJ1Y3QgdHJlZV9iaW5mbyBHVFkgKCh0YWcgKCJUU19CSU5G TyIpKSkgYmluZm87CiAgIHN0cnVjdCB0cmVlX3N0YXRlbWVudF9saXN0IEdU WSAoKHRhZyAoIlRTX1NUQVRFTUVOVF9MSVNUIikpKSBzdG10X2xpc3Q7CiAg IHN0cnVjdCBnaW1wbGVfc3RtdCBHVFkgKCh0YWcgKCJUU19HSU1QTEVfU1RB VEVNRU5UIikpKSBnc3RtdDsKLSAgc3RydWN0IHRyZWVfdmFsdWVfaGFuZGxl IEdUWSAoKHRhZyAoIlRTX1ZBTFVFX0hBTkRMRSIpKSkgdmFsdWVfaGFuZGxl OwogICBzdHJ1Y3QgdHJlZV9jb25zdHJ1Y3RvciBHVFkgKCh0YWcgKCJUU19D T05TVFJVQ1RPUiIpKSkgY29uc3RydWN0b3I7CiAgIHN0cnVjdCB0cmVlX21l bW9yeV90YWcgR1RZICgodGFnICgiVFNfTUVNT1JZX1RBRyIpKSkgbXRhZzsK ICAgc3RydWN0IHRyZWVfb21wX2NsYXVzZSBHVFkgKCh0YWcgKCJUU19PTVBf Q0xBVVNFIikpKSBvbXBfY2xhdXNlOwpkaWZmIC1yIDIzMjUzMzBjZTllZCBn Y2MvdHJlZXN0cnVjdC5kZWYKLS0tIGEvZ2NjL3RyZWVzdHJ1Y3QuZGVmCVN1 biBKdWwgMDYgMDA6MTY6MzAgMjAwOCArMDAwMAorKysgYi9nY2MvdHJlZXN0 cnVjdC5kZWYJU3VuIEp1bCAwNiAxNToyODoxOSAyMDA4IC0wNDAwCkBAIC01 OSw3ICs1OSw2IEBACiBERUZUUkVFU1RSVUNUKFRTX0JJTkZPLCAiYmluZm8i KQogREVGVFJFRVNUUlVDVChUU19TVEFURU1FTlRfTElTVCwgInN0YXRlbWVu dCBsaXN0IikKIERFRlRSRUVTVFJVQ1QoVFNfR0lNUExFX1NUQVRFTUVOVCwg ImdpbXBsZSBzdGF0ZW1lbnQiKQotREVGVFJFRVNUUlVDVChUU19WQUxVRV9I QU5ETEUsICJ2YWx1ZSBoYW5kbGUiKQogREVGVFJFRVNUUlVDVChUU19DT05T VFJVQ1RPUiwgImNvbnN0cnVjdG9yIikKIERFRlRSRUVTVFJVQ1QoVFNfTUVN T1JZX1RBRywgIm1lbW9yeSB0YWciKQogREVGVFJFRVNUUlVDVChUU19PTVBf Q0xBVVNFLCAib21wIGNsYXVzZSIpCg== ------=_Part_19974_20278897.1215372633452--