From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4062 invoked by alias); 6 Oct 2016 04:55:21 -0000 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 Received: (qmail 4053 invoked by uid 89); 6 Oct 2016 04:55:20 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=no version=3.3.2 spammy=1723,7, sk:print_a, 17237, ts X-HELO: mail-io0-f180.google.com Received: from mail-io0-f180.google.com (HELO mail-io0-f180.google.com) (209.85.223.180) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 06 Oct 2016 04:55:09 +0000 Received: by mail-io0-f180.google.com with SMTP id q192so4561745iod.0 for ; Wed, 05 Oct 2016 21:55:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=Pp8/qniJHLEXEz7oPXB4XpjUa22a1gJYzES8usV2HS4=; b=KHdXdKA8OJvo3Lj/wqlV+QCPDszJRJ5IYwevCMKlPA2D/MRq3VjB7g3qKpvw4BCpTd XRgvKCVOjcQt4lJdstN/WUdDiL8S30ZTQ67xatL/VzIM+2KJ2GPsIE5+4QZuNHJ32uc+ wlaEqZAy/4sX5Hklm+XXmFkxgkVLxCe39lyJx575H33Lqrl1KIyOj9HNNBCeO8rR5Eio ozfVvL0TopfzXGqw7ua1vq7nohAJpWo5+/vXBnCcOroRfJdp3ImeuYlhw7vpKVSMM8rG 77r06gF8PkW3Cb5rc1TBL+d0QXyk8E2jSogsZOJMqaTJczJ/kD3in6N3vQAi9ylW1NOZ D8bQ== X-Gm-Message-State: AA6/9RlXfGio3yhRDZ7FhUB+43onPD9c+JcaVMOibgfza0KHkY124oPq8c6ixTsSpIhcWeMrAt71t1jih8QQ94Gz X-Received: by 10.107.50.67 with SMTP id y64mr13173052ioy.187.1475729707963; Wed, 05 Oct 2016 21:55:07 -0700 (PDT) MIME-Version: 1.0 Received: by 10.36.81.85 with HTTP; Wed, 5 Oct 2016 21:55:07 -0700 (PDT) In-Reply-To: <20161005141557.3ud7rkdysre2uyqy@alvy.suse.cz> References: <20160922115635.GB86459@kam.mff.cuni.cz> <20161005141557.3ud7rkdysre2uyqy@alvy.suse.cz> From: Prathamesh Kulkarni Date: Thu, 06 Oct 2016 04:55:00 -0000 Message-ID: Subject: Re: [RFC] Extend ipa-bitwise-cp with pointer alignment propagation To: Prathamesh Kulkarni , Jan Hubicka , gcc Patches , Richard Biener Content-Type: multipart/mixed; boundary=001a114457b007b744053e2b1965 X-IsSubscribed: yes X-SW-Source: 2016-10/txt/msg00350.txt.bz2 --001a114457b007b744053e2b1965 Content-Type: text/plain; charset=UTF-8 Content-length: 3451 On 5 October 2016 at 19:45, Martin Jambor wrote: > Hi, > > sorry, my main desktop disk has died (a slow but certain) death so I > am not particularly responsive either. > > On Tue, Oct 04, 2016 at 12:37:38AM +0530, Prathamesh Kulkarni wrote: >> On 22 September 2016 at 17:26, Jan Hubicka wrote: >> > Yes, can you please verify that alignments it computes are monotonously >> > worse than those your new code computes and include the removal in the >> > next iteration of the patch? >> >> >> > Otherwise the patch seems fine to me (modulo Richard's comments) > > >> I tried to verify the alignments are monotonously worse with the >> attached patch (verify.diff), >> which asserts that alignment lattice is not better than bits lattice >> during each propagation >> step in propagate_constants_accross_call(). >> Does that look OK ? > > After propagation, here should be no TOP lattices anywhere. That > would mean we have not delteted an unreachable node. Apart from that, > yes. > >> >> ipa-cp-alignment has better alignments than ipa-bit-cp in following cases: >> >> a) ipa_get_type() returns NULL: ipa-bits-cp sets lattice to bottom if >> ipa_get_type (param) returns NULL, >> for instance in case of K&R function, while ipa-cp-alignment doesn't > > What do you mean by "for instance?" What are the other cases when it > happens? Well ipa_get_type() returned NULL for 481.wrf, and I assumed it was a fortran-only code-base but apparently it's a mix of C and fortran. ipa_get_type() returned NULL for param 'n' in get_initial_data_value_() which is defined as K&R style function in wrf_num_bytes_between.c, so it seems K&R is the only case where ipa_get_type() returns NULL. I have a question though on how to reduce fortran test-cases or a mix of fortran/C like 481.wrf ? For C/C++ only tests-cases, I use creduce. > >> look at param types, >> and can propagate alignments. >> The following assert: >> if (bits_lattice.bottom_p ()) >> gcc_assert (align_lattice.bottom_p()) >> >> triggered for 400.perlbench, 403.gcc, 456.hmmer and 481.wrf due to > > that is quite many more examples than I have anticipated, so they all > used K&R? (But thanks for trying benchmarks diligently). > > Have also tried this with LTO? Yes, the benchmarks were built with -O2 -flto. > >> ipa_get_type() >> returning NULL. I am not really sure how to handle this case, since we >> need to know parameter's >> type during bits propagation for obtaining precision. >> >> b) This happens for attached test-case (test.i), >> which is a reduced (and slightly modified) test-case from 458.sjeng. >> Bits propagation sets lattice to bottom, while alignment propagation >> propagates . > > yes, I agree we do not need to worry about the case when alignment is 1. > > I am only slightly concerned how often ipa_get_type is NULL, so it > would be nice if you looked into those cases once more to make sure > that we do not miss some bug or something that we could handle easily. > But if it is only K&R, I think it is fine. Yes, I think it is only for K&R case. The attached patch marks option -fipa-cp-alignment as obsolete instead of removing it. I just added a note to invoke.texi for @item -fipa-cp-alignment. Not sure if that's entirely correct. Bootstrapped+tested on x86_64-unknown-linux-gnu, ppc64le-linux-gnu Cross tested on arm*-*-*, aarch64*-*-*. OK for trunk ? Thanks, Prathamesh > > Thanks, > > Martin --001a114457b007b744053e2b1965 Content-Type: text/plain; charset=US-ASCII; name="alignprop-6.txt" Content-Disposition: attachment; filename="alignprop-6.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_itxu5k170 Content-length: 42029 MjAxNi0xMC0wNiAgUHJhdGhhbWVzaCBLdWxrYXJuaSAgPHByYXRoYW1lc2gu a3Vsa2FybmlAbGluYXJvLm9yZz4KCgkqIGlwYS1jcC5jIChpcGNwX2FsaWdu bWVudF9sYXR0aWNlKTogUmVtb3ZlLgoJKGlwY3BfcGFyYW1fbGF0dGljZXMp OiBSZW1vdmUgZmllbGQgYWxpZ25tZW50LgoJKHByaW50X2FsbF9sYXR0aWNl cyk6IFJlbW92ZSBjYWxsIHRvIGlwY3BfYWxpZ25tZW50X2xhdHRpY2U6OnBy aW50LgoJKHNldF9hbGxfY29udGFpbnNfdmFyaWFibGUpOiBSZW1vdmUgY2Fs bCB0bwoJaXBjcF9hbGlnbm1lbnRfbGF0dGljZTo6c2V0X3RvX2JvdHRvbS4K CShpbml0aWFsaXplX25vZGVfbGF0dGljZXMpOiBMaWtld2lzZS4KCShwcm9w YWdhdGVfYWxpZ25tZW50X2FjY3Jvc3NfanVtcF9mdW5jdGlvbik6IFJlbW92 ZS4KCShwcm9wYWdhdGVfY29uc3RhbnRzX2FjY3Jvc3NfY2FsbCk6IFJlbW92 ZSBjYWxsIHRvCglwcm9wYWdhdGVfYWxpZ25tZW50X2FjY3Jvc3NfanVtcF9m dW5jdGlvbi4KCShpcGNwX3N0b3JlX2FsaWdubWVudF9yZXN1bHRzKTogUmVt b3ZlLgoJKGlwY3BfZHJpdmVyKTogUmVtb3ZlIGNhbGwgdG8gaXBjcF9zdG9y ZV9hbGlnbm1lbnRfcmVzdWx0cy4KCShwcm9wYWdhdGVfYml0c19hY2Nyb3Nz X2p1bXBfZnVuY3Rpb24pOiBIYW5kbGUgYW5jZXN0b3IganVtcCBmdW5jdGlv bi4KCSogaXBhLXByb3AuYyAoaXBhX3ByaW50X25vZGVfanVtcF9mdW5jdGlv bnNfZm9yX2VkZ2UpOiBSZW1vdmUKCXByZXR0eS1wcmludGluZyBvZiBhbGln bm1lbnQganVtcCBmdW5jdGlvbi4KCShpcGFfc2V0X2pmX3Vua25vd24pOiBS ZW1vdmUgYXNzaWdubWVudCB0byBqZnVuYy0+YWxpZ25tZW50Lmtub3duLgoJ KGlwYV9jb21wdXRlX2p1bXBfZnVuY3Rpb25zX2Zvcl9lZGdlKTogQWRqdXN0 IGlwYV9iaXRzIGp1bXAgZnVuY3Rpb24gZm9yCglhbGlnbm1lbnRzIGFuZCBy ZW1vdmUgY29tcHV0aW5nIGlwYV9hbGlnbm1lbnQganVtcCBmdW5jdGlvbi4K CShpcGFfbm9kZV9wYXJhbXNfdDo6ZHVwbGljYXRlKTogUmVtb3ZlIGNvcHlp bmcgb2Ygc3JjX3RyYW5zLT5hbGlnbm1lbnRzLgoJKGlwYV93cml0ZV9qdW1w X2Z1bmN0aW9ucyk6IFJlbW92ZSBzdHJlYW1pbmcgZm9yIGlwYV9hbGlnbm1l bnQuCgkoaXBhX3JlYWRfanVtcF9mdW5jdGlvbik6IFJlbW92ZSByZWFkaW5n IG9mIGlwYV9hbGlnbm1lbnQuCgkod3JpdGVfaXBjcF90cmFuc2Zvcm1hdGlv bl9pbmZvKTogUmVtb3ZlIHN0cmVhbWluZyBmb3IgYWxpZ25tZW50Cglwcm9w YWdhdGlvbiBzdW1tYXJ5LgoJKHJlYWRfaXBjcF90cmFuc2Zvcm1hdGlvbl9p bmZvKTogUmVtb3ZlIHJlYWRpbmcgb2YgYWxpZ25tZW50Cglwcm9wYWdhdGlv biBzdW1tYXJ5LiAKCShpcGNwX3VwZGF0ZV9hbGlnbm1lbnRzKTogUmVtb3Zl LgoJKGlwY3BfdXBkYXRlX2JpdHMpOiBBZGp1c3QgdG8gc2V0IGFsaWdubWVu dCBmb3IgcGFyYW1ldGVycyBvZiBwb2ludGVyCgl0eXBlLgoJKGlwY3BfdHJh bnNmb3JtX2Z1bmN0aW9uKTogUmVtb3ZlIGNhbGwgdG8gaXBjcF91cGRhdGVf YWxpZ25tZW50cygpCglhbmQgcmVtb3ZlIGFzc2lnbm1lbnQgdG8gKCppcGNw X3RyYW5zZm9ybWF0aW9ucylbbm9kZS0+dWlkXS5hbGlnbm1lbnRzLgoJKiBp cGEtcHJvcC5oIChpcGFfYWxpZ25tZW50KTogUmVtb3ZlLgoJKGlwYV9qdW1w X2Z1bmMpOiBSZW1vdmUgZmllbGQgYWxpZ25tZW50LgoJKGlwY3BfdHJhbnNm b3JtYXRpb25fc3VtbWFyeSk6IFJlbW92ZSBmaWVsZCBhbGlnbm1lbnRzLiAK CSogZG9jL2ludm9rZS50ZXhpOiBNYXJrIGZpcGEtY3AtYWxpZ25tZW50IGFz IG9ic29sZXRlLgoJKiBvcHRzLmMgKGRlZmF1bHRfb3B0aW9uc190YWJsZSk6 IFJlbW92ZSBlbnRyeSBmb3IgZmlwYS1jcC1hbGlnbm1lbnQuCgkoZW5hYmxl X2Zkb19vcHRpbWl6YXRpb25zKTogUmVtb3ZlIGNoZWNraW5nIGZvciBmaXBh LWNwLWFsaWdubWVudC4KCnRlc3RzdWl0ZS8KCSogZ2NjLmRnL2lwYS9wcm9w YWxpZ24tMS5jOiBBZGp1c3Qgc2Nhbi1pcGEtZHVtcC4KCSogZ2NjLmRnL2lw YS9wcm9wYWxpZ24tMi5jOiBMaWtld2lzZQoJKiBnY2MuZGcvaXBhL3Byb3Bh bGlnbi0zLmM6IExpa2V3aXNlLgoJKiBnY2MuZGcvaXBhL3Byb3BhbGlnbi00 LmM6IExpa2V3aXNlLgoJKiBnY2MuZGcvaXBhL3Byb3BhbGlnbi01LmM6IExp a2V3aXNlLgoKZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9n Y2MvZG9jL2ludm9rZS50ZXhpCmluZGV4IGQ5NjY3ZTcuLmI3Y2EyYjYgMTAw NjQ0Ci0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrIGIvZ2NjL2RvYy9p bnZva2UudGV4aQpAQCAtNzY1Nyw2ICs3NjU3LDcgQEAgcGFyYW1ldGVycyB0 byBzdXBwb3J0IGJldHRlciB2ZWN0b3JpemF0aW9uIGFuZCBzdHJpbmcgb3Bl cmF0aW9ucy4KIAogVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBh dCBAb3B0aW9uey1PMn0gYW5kIEBvcHRpb257LU9zfS4gIEl0CiByZXF1aXJl cyB0aGF0IEBvcHRpb257LWZpcGEtY3B9IGlzIGVuYWJsZWQuCitAb3B0aW9u ey1maXBhLWNwLWFsaWdubWVudH0gaXMgb2Jzb2xldGUsIHVzZSBAb3B0aW9u ey1maXBhLWJpdC1jcH0gaW5zdGVhZC4KIAogQGl0ZW0gLWZpcGEtYml0LWNw CiBAb3BpbmRleCAtZmlwYS1iaXQtY3AKZGlmZiAtLWdpdCBhL2djYy9pcGEt Y3AuYyBiL2djYy9pcGEtY3AuYwppbmRleCA3MzgwYjJhLi4xZGM1Y2I2IDEw MDY0NAotLS0gYS9nY2MvaXBhLWNwLmMKKysrIGIvZ2NjL2lwYS1jcC5jCkBA IC0yMzgsMzYgKzIzOCw2IEBAIHB1YmxpYzoKICAgc3RydWN0IGlwY3BfYWdn X2xhdHRpY2UgKm5leHQ7CiB9OwogCi0vKiBMYXR0aWNlIG9mIHBvaW50ZXIg YWxpZ25tZW50LiAgVW5saWtlIHRoZSBwcmV2aW91cyB0eXBlcyBvZiBsYXR0 aWNlcywgdGhpcwotICAgb25lIGlzIG9ubHkgY2FwYWJsZSBvZiBob2xkaW5n IG9uZSB2YWx1ZS4gICovCi0KLWNsYXNzIGlwY3BfYWxpZ25tZW50X2xhdHRp Y2UKLXsKLXB1YmxpYzoKLSAgLyogSWYgYm90dG9tIGFuZCB0b3AgYXJlIGJv dGggZmFsc2UsIHRoZXNlIHR3byBmaWVsZHMgaG9sZCB2YWx1ZXMgYXMgZ2l2 ZW4gYnkKLSAgICAgcHRyX2luZm9fZGVmIGFuZCBnZXRfcG9pbnRlcl9hbGln bm1lbnRfMS4gICovCi0gIHVuc2lnbmVkIGFsaWduOwotICB1bnNpZ25lZCBt aXNhbGlnbjsKLQotICBpbmxpbmUgYm9vbCBib3R0b21fcCAoKSBjb25zdDsK LSAgaW5saW5lIGJvb2wgdG9wX3AgKCkgY29uc3Q7Ci0gIGlubGluZSBib29s IHNldF90b19ib3R0b20gKCk7Ci0gIGJvb2wgbWVldF93aXRoICh1bnNpZ25l ZCBuZXdfYWxpZ24sIHVuc2lnbmVkIG5ld19taXNhbGlnbik7Ci0gIGJvb2wg bWVldF93aXRoIChjb25zdCBpcGNwX2FsaWdubWVudF9sYXR0aWNlICZvdGhl ciwgSE9TVF9XSURFX0lOVCBvZmZzZXQpOwotICB2b2lkIHByaW50IChGSUxF ICogZik7Ci1wcml2YXRlOgotICAvKiBJZiBzZXQsIHRoaXMgbGF0dGljZSBp cyBib3R0b20gYW5kIGFsbCBvdGhlciBmaWVsZHMgc2hvdWxkIGJlCi0gICAg IGRpc3JlZ2FyZGVkLiAgKi8KLSAgYm9vbCBib3R0b207Ci0gIC8qIElmIGJv dHRvbSBhbmQgbm90X3RvcCBhcmUgZmFsc2UsIHRoZSBsYXR0aWNlIGlzIFRP UC4gIElmIG5vdF90b3AgaXMgdHJ1ZSwKLSAgICAgdGhlIGtub3duIGFsaWdu bWVudCBpcyBzdG9yZWQgaW4gdGhlIGZpZWxkcyBhbGlnbiBhbmQgbWlzYWxp Z24uICBUaGUgZmllbGQKLSAgICAgaXMgbmVnYXRlZCBzbyB0aGF0IG1lbXNl dCB0byB6ZXJvIGluaXRpYWxpemVzIHRoZSBsYXR0aWNlIHRvIFRPUAotICAg ICBzdGF0ZS4gICovCi0gIGJvb2wgbm90X3RvcDsKLQotICBib29sIG1lZXRf d2l0aF8xICh1bnNpZ25lZCBuZXdfYWxpZ24sIHVuc2lnbmVkIG5ld19taXNh bGlnbik7Ci19OwotCiAvKiBMYXR0aWNlIG9mIGtub3duIGJpdHMsIG9ubHkg Y2FwYWJsZSBvZiBob2xkaW5nIG9uZSB2YWx1ZS4KICAgIEJpdHdpc2UgY29u c3RhbnQgcHJvcGFnYXRpb24gcHJvcGFnYXRlcyB3aGljaCBiaXRzIG9mIGEK ICAgIHZhbHVlIGFyZSBjb25zdGFudC4KQEAgLTM1NCw4ICszMjQsNiBAQCBw dWJsaWM6CiAgIGlwY3BfbGF0dGljZTxpcGFfcG9seW1vcnBoaWNfY2FsbF9j b250ZXh0PiBjdHhsYXQ7CiAgIC8qIExhdHRpY2VzIGRlc2NyaWJpbmcgYWdn cmVnYXRlIHBhcnRzLiAgKi8KICAgaXBjcF9hZ2dfbGF0dGljZSAqYWdnczsK LSAgLyogTGF0dGljZSBkZXNjcmliaW5nIGtub3duIGFsaWdubWVudC4gICov Ci0gIGlwY3BfYWxpZ25tZW50X2xhdHRpY2UgYWxpZ25tZW50OwogICAvKiBM YXR0aWNlIGRlc2NyaWJpbmcga25vd24gYml0cy4gICovCiAgIGlwY3BfYml0 c19sYXR0aWNlIGJpdHNfbGF0dGljZTsKICAgLyogTGF0dGljZSBkZXNjcmli aW5nIHZhbHVlIHJhbmdlLiAgKi8KQEAgLTUzNCwxOSArNTAyLDYgQEAgaXBj cF9sYXR0aWNlPHZhbHR5cGU+OjpwcmludCAoRklMRSAqIGYsIGJvb2wgZHVt cF9zb3VyY2VzLCBib29sIGR1bXBfYmVuZWZpdHMpCiAgICAgZnByaW50ZiAo ZiwgIlxuIik7CiB9CiAKLS8qIFByaW50IGFsaWdubWVudCBsYXR0aWNlIHRv IEYuICAqLwotCi12b2lkCi1pcGNwX2FsaWdubWVudF9sYXR0aWNlOjpwcmlu dCAoRklMRSAqIGYpCi17Ci0gIGlmICh0b3BfcCAoKSkKLSAgICBmcHJpbnRm IChmLCAiICAgICAgICAgQWxpZ25tZW50IHVua25vd24gKFRPUClcbiIpOwot ICBlbHNlIGlmIChib3R0b21fcCAoKSkKLSAgICBmcHJpbnRmIChmLCAiICAg ICAgICAgQWxpZ25tZW50IHVudXNhYmxlIChCT1RUT00pXG4iKTsKLSAgZWxz ZQotICAgIGZwcmludGYgKGYsICIgICAgICAgICBBbGlnbm1lbnQgJXUsIG1p c2FsaWdubWVudCAldVxuIiwgYWxpZ24sIG1pc2FsaWduKTsKLX0KLQogdm9p ZAogaXBjcF9iaXRzX2xhdHRpY2U6OnByaW50IChGSUxFICpmKQogewpAQCAt NTk1LDcgKzU1MCw2IEBAIHByaW50X2FsbF9sYXR0aWNlcyAoRklMRSAqIGYs IGJvb2wgZHVtcF9zb3VyY2VzLCBib29sIGR1bXBfYmVuZWZpdHMpCiAJICBw bGF0cy0+aXRzZWxmLnByaW50IChmLCBkdW1wX3NvdXJjZXMsIGR1bXBfYmVu ZWZpdHMpOwogCSAgZnByaW50ZiAoZiwgIiAgICAgICAgIGN0eHM6ICIpOwog CSAgcGxhdHMtPmN0eGxhdC5wcmludCAoZiwgZHVtcF9zb3VyY2VzLCBkdW1w X2JlbmVmaXRzKTsKLQkgIHBsYXRzLT5hbGlnbm1lbnQucHJpbnQgKGYpOwog CSAgcGxhdHMtPmJpdHNfbGF0dGljZS5wcmludCAoZik7CiAJICBmcHJpbnRm IChmLCAiICAgICAgICAgIik7CiAJICBwbGF0cy0+bV92YWx1ZV9yYW5nZS5w cmludCAoZik7CkBAIC05MjIsMzggKzg3Niw2IEBAIHNldF9hZ2dfbGF0c19j b250YWluX3ZhcmlhYmxlIChzdHJ1Y3QgaXBjcF9wYXJhbV9sYXR0aWNlcyAq cGxhdHMpCiAgIHJldHVybiByZXQ7CiB9CiAKLS8qIFJldHVybiB0cnVlIGlm IGFsaWdubWVudCBpbmZvcm1hdGlvbiBpbiB0aGUgbGF0dGljZSBpcyB5ZXQg dW5rbm93bi4gICovCi0KLWJvb2wKLWlwY3BfYWxpZ25tZW50X2xhdHRpY2U6 OnRvcF9wICgpIGNvbnN0Ci17Ci0gIHJldHVybiAhYm90dG9tICYmICFub3Rf dG9wOwotfQotCi0vKiBSZXR1cm4gdHJ1ZSBpZiBhbGlnbm1lbnQgaW5mb3Jt YXRpb24gaW4gdGhlIGxhdHRpY2UgaXMga25vd24gdG8gYmUKLSAgIHVudXNh YmxlLiAgKi8KLQotYm9vbAotaXBjcF9hbGlnbm1lbnRfbGF0dGljZTo6Ym90 dG9tX3AgKCkgY29uc3QKLXsKLSAgcmV0dXJuIGJvdHRvbTsKLX0KLQotLyog U2V0IGFsaWdubWVudCBpbmZvcm1hdGlvbiBpbiB0aGUgbGF0dGljZSB0byBi b3R0b20uICBSZXR1cm4gdHJ1ZSBpZiBpdAotICAgcHJldmlvdXNseSB3YXMg aW4gYSBkaWZmZXJlbnQgc3RhdGUuICAqLwotCi1ib29sCi1pcGNwX2FsaWdu bWVudF9sYXR0aWNlOjpzZXRfdG9fYm90dG9tICgpCi17Ci0gIGlmIChib3R0 b21fcCAoKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGJvdHRvbSA9IHRydWU7 Ci0gIHJldHVybiB0cnVlOwotfQotCi0vKiBNZWV0IHRoZSBjdXJyZW50IHZh bHVlIG9mIHRoZSBsYXR0aWNlIHdpdGggZGVzY3JpYmVkIGJ5IE9USEVSCi0g ICBsYXR0aWNlLiAgKi8KLQogYm9vbAogaXBjcF92cl9sYXR0aWNlOjptZWV0 X3dpdGggKGNvbnN0IGlwY3BfdnJfbGF0dGljZSAmb3RoZXIpCiB7CkBAIC0x MDIyLDgyICs5NDQsNiBAQCBpcGNwX3ZyX2xhdHRpY2U6OnNldF90b19ib3R0 b20gKCkKICAgcmV0dXJuIHRydWU7CiB9CiAKLS8qIE1lZXQgdGhlIGN1cnJl bnQgdmFsdWUgb2YgdGhlIGxhdHRpY2Ugd2l0aCBhbGlnbm1lbnQgZGVzY3Jp YmVkIGJ5IE5FV19BTElHTgotICAgYW5kIE5FV19NSVNBTElHTiwgYXNzdW1p bmcgdGhhdCB3ZSBrbm93IHRoZSBjdXJyZW50IHZhbHVlIGlzIG5laXRoZXIg VE9QIG5vcgotICAgQk9UVE9NLiAgUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVl IG9mIGxhdHRpY2UgaGFzIGNoYW5nZWQuICAqLwotCi1ib29sCi1pcGNwX2Fs aWdubWVudF9sYXR0aWNlOjptZWV0X3dpdGhfMSAodW5zaWduZWQgbmV3X2Fs aWduLCB1bnNpZ25lZCBuZXdfbWlzYWxpZ24pCi17Ci0gIGdjY19jaGVja2lu Z19hc3NlcnQgKG5ld19hbGlnbiAhPSAwKTsKLSAgaWYgKGFsaWduID09IG5l d19hbGlnbiAmJiBtaXNhbGlnbiA9PSBuZXdfbWlzYWxpZ24pCi0gICAgcmV0 dXJuIGZhbHNlOwotCi0gIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwotICBpZiAo YWxpZ24gPiBuZXdfYWxpZ24pCi0gICAgewotICAgICAgYWxpZ24gPSBuZXdf YWxpZ247Ci0gICAgICBtaXNhbGlnbiA9IG1pc2FsaWduICUgbmV3X2FsaWdu OwotICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgfQotICBpZiAobWlzYWxp Z24gIT0gKG5ld19taXNhbGlnbiAlIGFsaWduKSkKLSAgICB7Ci0gICAgICBp bnQgZGlmZiA9IGFicyAoKGludCkgbWlzYWxpZ24gLSAoaW50KSAobmV3X21p c2FsaWduICUgYWxpZ24pKTsKLSAgICAgIGFsaWduID0gbGVhc3RfYml0X2h3 aSAoZGlmZik7Ci0gICAgICBpZiAoYWxpZ24pCi0JbWlzYWxpZ24gPSBtaXNh bGlnbiAlIGFsaWduOwotICAgICAgZWxzZQotCXNldF90b19ib3R0b20gKCk7 Ci0gICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICB9Ci0gIGdjY19jaGVja2lu Z19hc3NlcnQgKGJvdHRvbV9wICgpIHx8IGFsaWduICE9IDApOwotICByZXR1 cm4gY2hhbmdlZDsKLX0KLQotLyogTWVldCB0aGUgY3VycmVudCB2YWx1ZSBv ZiB0aGUgbGF0dGljZSB3aXRoIGFsaWdubWVudCBkZXNjcmliZWQgYnkgTkVX X0FMSUdOCi0gICBhbmQgTkVXX01JU0FMSUdOLiAgUmV0dXJuIHRydWUgaWYg dGhlIHZhbHVlIG9mIGxhdHRpY2UgaGFzIGNoYW5nZWQuICAqLwotCi1ib29s Ci1pcGNwX2FsaWdubWVudF9sYXR0aWNlOjptZWV0X3dpdGggKHVuc2lnbmVk IG5ld19hbGlnbiwgdW5zaWduZWQgbmV3X21pc2FsaWduKQotewotICBnY2Nf YXNzZXJ0IChuZXdfYWxpZ24gIT0gMCk7Ci0gIGlmIChib3R0b21fcCAoKSkK LSAgICByZXR1cm4gZmFsc2U7Ci0gIGlmICh0b3BfcCAoKSkKLSAgICB7Ci0g ICAgICBub3RfdG9wID0gdHJ1ZTsKLSAgICAgIGFsaWduID0gbmV3X2FsaWdu OwotICAgICAgbWlzYWxpZ24gPSBuZXdfbWlzYWxpZ247Ci0gICAgICByZXR1 cm4gdHJ1ZTsKLSAgICB9Ci0gIHJldHVybiBtZWV0X3dpdGhfMSAobmV3X2Fs aWduLCBuZXdfbWlzYWxpZ24pOwotfQotCi0vKiBNZWV0IHRoZSBjdXJyZW50 IHZhbHVlIG9mIHRoZSBsYXR0aWNlIHdpdGggT1RIRVIsIHRha2luZyBpbnRv IGFjY291bnQgdGhhdAotICAgT0ZGU0VUIGhhcyBiZWVuIGFkZGVkIHRvIHRo ZSBwb2ludGVyIHZhbHVlLiAgUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9m Ci0gICBsYXR0aWNlIGhhcyBjaGFuZ2VkLiAgKi8KLQotYm9vbAotaXBjcF9h bGlnbm1lbnRfbGF0dGljZTo6bWVldF93aXRoIChjb25zdCBpcGNwX2FsaWdu bWVudF9sYXR0aWNlICZvdGhlciwKLQkJCQkgICBIT1NUX1dJREVfSU5UIG9m ZnNldCkKLXsKLSAgaWYgKG90aGVyLmJvdHRvbV9wICgpKQotICAgIHJldHVy biBzZXRfdG9fYm90dG9tICgpOwotICBpZiAoYm90dG9tX3AgKCkgfHwgb3Ro ZXIudG9wX3AgKCkpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIHVuc2lnbmVk IGFkanVzdGVkX21pc2FsaWduID0gKG90aGVyLm1pc2FsaWduICsgb2Zmc2V0 KSAlIG90aGVyLmFsaWduOwotICBpZiAodG9wX3AgKCkpCi0gICAgewotICAg ICAgbm90X3RvcCA9IHRydWU7Ci0gICAgICBhbGlnbiA9IG90aGVyLmFsaWdu OwotICAgICAgbWlzYWxpZ24gPSBhZGp1c3RlZF9taXNhbGlnbjsKLSAgICAg IHJldHVybiB0cnVlOwotICAgIH0KLQotICByZXR1cm4gbWVldF93aXRoXzEg KG90aGVyLmFsaWduLCBhZGp1c3RlZF9taXNhbGlnbik7Ci19Ci0KIC8qIFNl dCBsYXR0aWNlIHZhbHVlIHRvIGJvdHRvbSwgaWYgaXQgYWxyZWFkeSBpc24n dCB0aGUgY2FzZS4gICovCiAKIGJvb2wKQEAgLTEyNTMsNyArMTA5OSw2IEBA IHNldF9hbGxfY29udGFpbnNfdmFyaWFibGUgKHN0cnVjdCBpcGNwX3BhcmFt X2xhdHRpY2VzICpwbGF0cykKICAgcmV0ID0gcGxhdHMtPml0c2VsZi5zZXRf Y29udGFpbnNfdmFyaWFibGUgKCk7CiAgIHJldCB8PSBwbGF0cy0+Y3R4bGF0 LnNldF9jb250YWluc192YXJpYWJsZSAoKTsKICAgcmV0IHw9IHNldF9hZ2df bGF0c19jb250YWluX3ZhcmlhYmxlIChwbGF0cyk7Ci0gIHJldCB8PSBwbGF0 cy0+YWxpZ25tZW50LnNldF90b19ib3R0b20gKCk7CiAgIHJldCB8PSBwbGF0 cy0+Yml0c19sYXR0aWNlLnNldF90b19ib3R0b20gKCk7CiAgIHJldCB8PSBw bGF0cy0+bV92YWx1ZV9yYW5nZS5zZXRfdG9fYm90dG9tICgpOwogICByZXR1 cm4gcmV0OwpAQCAtMTM0Miw3ICsxMTg3LDYgQEAgaW5pdGlhbGl6ZV9ub2Rl X2xhdHRpY2VzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCiAJICAgICAg cGxhdHMtPml0c2VsZi5zZXRfdG9fYm90dG9tICgpOwogCSAgICAgIHBsYXRz LT5jdHhsYXQuc2V0X3RvX2JvdHRvbSAoKTsKIAkgICAgICBzZXRfYWdnX2xh dHNfdG9fYm90dG9tIChwbGF0cyk7Ci0JICAgICAgcGxhdHMtPmFsaWdubWVu dC5zZXRfdG9fYm90dG9tICgpOwogCSAgICAgIHBsYXRzLT5iaXRzX2xhdHRp Y2Uuc2V0X3RvX2JvdHRvbSAoKTsKIAkgICAgICBwbGF0cy0+bV92YWx1ZV9y YW5nZS5zZXRfdG9fYm90dG9tICgpOwogCSAgICB9CkBAIC0xOTEwLDU5ICsx NzU0LDYgQEAgcHJvcGFnYXRlX2NvbnRleHRfYWNjcm9zc19qdW1wX2Z1bmN0 aW9uIChjZ3JhcGhfZWRnZSAqY3MsCiAgIHJldHVybiByZXQ7CiB9CiAKLS8q IFByb3BhZ2F0ZSBhbGlnbm1lbnRzIGFjcm9zcyBqdW1wIGZ1bmN0aW9uIEpG VU5DIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoCi0gICBlZGdlIENTIGFuZCB1 cGRhdGUgREVTVF9MQVQgYWNjb3JkaW5nbHkuICAqLwotCi1zdGF0aWMgYm9v bAotcHJvcGFnYXRlX2FsaWdubWVudF9hY2Nyb3NzX2p1bXBfZnVuY3Rpb24g KGNncmFwaF9lZGdlICpjcywKLQkJCQkJICAgaXBhX2p1bXBfZnVuYyAqamZ1 bmMsCi0JCQkJCSAgIGlwY3BfYWxpZ25tZW50X2xhdHRpY2UgKmRlc3RfbGF0 KQotewotICBpZiAoZGVzdF9sYXQtPmJvdHRvbV9wICgpKQotICAgIHJldHVy biBmYWxzZTsKLQotICBpZiAoamZ1bmMtPnR5cGUgPT0gSVBBX0pGX1BBU1Nf VEhST1VHSAotCSAgIHx8IGpmdW5jLT50eXBlID09IElQQV9KRl9BTkNFU1RP UikKLSAgICB7Ci0gICAgICBzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zICpjYWxs ZXJfaW5mbyA9IElQQV9OT0RFX1JFRiAoY3MtPmNhbGxlcik7Ci0gICAgICBI T1NUX1dJREVfSU5UIG9mZnNldCA9IDA7Ci0gICAgICBpbnQgc3JjX2lkeDsK LQotICAgICAgaWYgKGpmdW5jLT50eXBlID09IElQQV9KRl9QQVNTX1RIUk9V R0gpCi0JewotCSAgZW51bSB0cmVlX2NvZGUgb3AgPSBpcGFfZ2V0X2pmX3Bh c3NfdGhyb3VnaF9vcGVyYXRpb24gKGpmdW5jKTsKLQkgIGlmIChvcCAhPSBO T1BfRVhQUikKLQkgICAgewotCSAgICAgIGlmIChvcCAhPSBQT0lOVEVSX1BM VVNfRVhQUgotCQkgICYmIG9wICE9IFBMVVNfRVhQUikKLQkJcmV0dXJuIGRl c3RfbGF0LT5zZXRfdG9fYm90dG9tICgpOwotCSAgICAgIHRyZWUgb3BlcmFu ZCA9IGlwYV9nZXRfamZfcGFzc190aHJvdWdoX29wZXJhbmQgKGpmdW5jKTsK LQkgICAgICBpZiAoIXRyZWVfZml0c19zaHdpX3AgKG9wZXJhbmQpKQotCQly ZXR1cm4gZGVzdF9sYXQtPnNldF90b19ib3R0b20gKCk7Ci0JICAgICAgb2Zm c2V0ID0gdHJlZV90b19zaHdpIChvcGVyYW5kKTsKLQkgICAgfQotCSAgc3Jj X2lkeCA9IGlwYV9nZXRfamZfcGFzc190aHJvdWdoX2Zvcm1hbF9pZCAoamZ1 bmMpOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICBzcmNfaWR4ID0gaXBhX2dl dF9qZl9hbmNlc3Rvcl9mb3JtYWxfaWQgKGpmdW5jKTsKLQkgIG9mZnNldCA9 IGlwYV9nZXRfamZfYW5jZXN0b3Jfb2Zmc2V0IChqZnVuYykgLyBCSVRTX1BF Ul9VTklUOwotCX0KLQotICAgICAgc3RydWN0IGlwY3BfcGFyYW1fbGF0dGlj ZXMgKnNyY19sYXRzOwotICAgICAgc3JjX2xhdHMgPSBpcGFfZ2V0X3Bhcm1f bGF0dGljZXMgKGNhbGxlcl9pbmZvLCBzcmNfaWR4KTsKLSAgICAgIHJldHVy biBkZXN0X2xhdC0+bWVldF93aXRoIChzcmNfbGF0cy0+YWxpZ25tZW50LCBv ZmZzZXQpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIGlmIChqZnVu Yy0+YWxpZ25tZW50Lmtub3duKQotCXJldHVybiBkZXN0X2xhdC0+bWVldF93 aXRoIChqZnVuYy0+YWxpZ25tZW50LmFsaWduLAotCQkJCSAgICBqZnVuYy0+ YWxpZ25tZW50Lm1pc2FsaWduKTsKLSAgICAgIGVsc2UKLQlyZXR1cm4gZGVz dF9sYXQtPnNldF90b19ib3R0b20gKCk7Ci0gICAgfQotfQotCiAvKiBQcm9w YWdhdGUgYml0cyBhY3Jvc3MgamZ1bmMgdGhhdCBpcyBhc3NvY2lhdGVkIHdp dGgKICAgIGVkZ2UgY3MgYW5kIHVwZGF0ZSBkZXN0X2xhdHRpY2UgYWNjb3Jk aW5nbHkuICAqLwogCkBAIC0xOTkzLDE2ICsxNzg0LDI5IEBAIHByb3BhZ2F0 ZV9iaXRzX2FjY3Jvc3NfanVtcF9mdW5jdGlvbiAoY2dyYXBoX2VkZ2UgKmNz LCBpbnQgaWR4LCBpcGFfanVtcF9mdW5jICpqCiAgIHVuc2lnbmVkIHByZWNp c2lvbiA9IFRZUEVfUFJFQ0lTSU9OIChwYXJtX3R5cGUpOwogICBzaWdub3Ag c2duID0gVFlQRV9TSUdOIChwYXJtX3R5cGUpOwogCi0gIGlmIChqZnVuYy0+ dHlwZSA9PSBJUEFfSkZfUEFTU19USFJPVUdIKQorICBpZiAoamZ1bmMtPnR5 cGUgPT0gSVBBX0pGX1BBU1NfVEhST1VHSAorICAgICAgfHwgamZ1bmMtPnR5 cGUgPT0gSVBBX0pGX0FOQ0VTVE9SKQogICAgIHsKICAgICAgIHN0cnVjdCBp cGFfbm9kZV9wYXJhbXMgKmNhbGxlcl9pbmZvID0gSVBBX05PREVfUkVGIChj cy0+Y2FsbGVyKTsKLSAgICAgIGVudW0gdHJlZV9jb2RlIGNvZGUgPSBpcGFf Z2V0X2pmX3Bhc3NfdGhyb3VnaF9vcGVyYXRpb24gKGpmdW5jKTsKICAgICAg IHRyZWUgb3BlcmFuZCA9IE5VTExfVFJFRTsKKyAgICAgIGVudW0gdHJlZV9j b2RlIGNvZGU7CisgICAgICB1bnNpZ25lZCBzcmNfaWR4OwogCi0gICAgICBp ZiAoY29kZSAhPSBOT1BfRVhQUikKLQlvcGVyYW5kID0gaXBhX2dldF9qZl9w YXNzX3Rocm91Z2hfb3BlcmFuZCAoamZ1bmMpOworICAgICAgaWYgKGpmdW5j LT50eXBlID09IElQQV9KRl9QQVNTX1RIUk9VR0gpCisJeworCSAgY29kZSA9 IGlwYV9nZXRfamZfcGFzc190aHJvdWdoX29wZXJhdGlvbiAoamZ1bmMpOwor CSAgc3JjX2lkeCA9IGlwYV9nZXRfamZfcGFzc190aHJvdWdoX2Zvcm1hbF9p ZCAoamZ1bmMpOworCSAgaWYgKGNvZGUgIT0gTk9QX0VYUFIpCisJICAgIG9w ZXJhbmQgPSBpcGFfZ2V0X2pmX3Bhc3NfdGhyb3VnaF9vcGVyYW5kIChqZnVu Yyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvZGUgPSBQT0lOVEVSX1BM VVNfRVhQUjsgCisJICBzcmNfaWR4ID0gaXBhX2dldF9qZl9hbmNlc3Rvcl9m b3JtYWxfaWQgKGpmdW5jKTsKKwkgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQg b2Zmc2V0ID0gaXBhX2dldF9qZl9hbmNlc3Rvcl9vZmZzZXQgKGpmdW5jKSAv IEJJVFNfUEVSX1VOSVQ7CisJICBvcGVyYW5kID0gYnVpbGRfaW50X2NzdHUg KHNpemVfdHlwZV9ub2RlLCBvZmZzZXQpOworCX0KIAotICAgICAgaW50IHNy Y19pZHggPSBpcGFfZ2V0X2pmX3Bhc3NfdGhyb3VnaF9mb3JtYWxfaWQgKGpm dW5jKTsKICAgICAgIHN0cnVjdCBpcGNwX3BhcmFtX2xhdHRpY2VzICpzcmNf bGF0cwogCT0gaXBhX2dldF9wYXJtX2xhdHRpY2VzIChjYWxsZXJfaW5mbywg c3JjX2lkeCk7CiAKQEAgLTI0MjYsOCArMjIzMCw2IEBAIHByb3BhZ2F0ZV9j b25zdGFudHNfYWNjcm9zc19jYWxsIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmNz KQogCQkJCQkJCSAmZGVzdF9wbGF0cy0+aXRzZWxmKTsKIAkgIHJldCB8PSBw cm9wYWdhdGVfY29udGV4dF9hY2Nyb3NzX2p1bXBfZnVuY3Rpb24gKGNzLCBq dW1wX2Z1bmMsIGksCiAJCQkJCQkJICAmZGVzdF9wbGF0cy0+Y3R4bGF0KTsK LQkgIHJldCB8PSBwcm9wYWdhdGVfYWxpZ25tZW50X2FjY3Jvc3NfanVtcF9m dW5jdGlvbiAoY3MsIGp1bXBfZnVuYywKLQkJCQkJCQkgJmRlc3RfcGxhdHMt PmFsaWdubWVudCk7CiAJICByZXQgfD0gcHJvcGFnYXRlX2JpdHNfYWNjcm9z c19qdW1wX2Z1bmN0aW9uIChjcywgaSwganVtcF9mdW5jLAogCQkJCQkJICAg ICAgICZkZXN0X3BsYXRzLT5iaXRzX2xhdHRpY2UpOwogCSAgcmV0IHw9IHBy b3BhZ2F0ZV9hZ2dzX2FjY3Jvc3NfanVtcF9mdW5jdGlvbiAoY3MsIGp1bXBf ZnVuYywKQEAgLTQ5OTcsODEgKzQ3OTksNiBAQCBpcGNwX2RlY2lzaW9uX3N0 YWdlIChzdHJ1Y3QgaXBhX3RvcG9faW5mbyAqdG9wbykKICAgICB9CiB9CiAK LS8qIExvb2sgdXAgYWxsIGFsaWdubWVudCBpbmZvcm1hdGlvbiB0aGF0IHdl IGhhdmUgZGlzY292ZXJlZCBhbmQgY29weSBpdCBvdmVyCi0gICB0byB0aGUg dHJhbnNmb3JtYXRpb24gc3VtbWFyeS4gICovCi0KLXN0YXRpYyB2b2lkCi1p cGNwX3N0b3JlX2FsaWdubWVudF9yZXN1bHRzICh2b2lkKQotewotICBjZ3Jh cGhfbm9kZSAqbm9kZTsKLQotICBGT1JfRUFDSF9GVU5DVElPTl9XSVRIX0dJ TVBMRV9CT0RZIChub2RlKQotICB7Ci0gICAgaXBhX25vZGVfcGFyYW1zICpp bmZvID0gSVBBX05PREVfUkVGIChub2RlKTsKLSAgICBib29sIGR1bXBlZF9z dGggPSBmYWxzZTsKLSAgICBib29sIGZvdW5kX3VzZWZ1bF9yZXN1bHQgPSBm YWxzZTsKLQotICAgIGlmICghb3B0X2Zvcl9mbiAobm9kZS0+ZGVjbCwgZmxh Z19pcGFfY3BfYWxpZ25tZW50KSkKLSAgICAgIHsKLQlpZiAoZHVtcF9maWxl KQotCSAgZnByaW50ZiAoZHVtcF9maWxlLCAiTm90IGNvbnNpZGVyaW5nICVz IGZvciBhbGlnbm1lbnQgZGlzY292ZXJ5ICIKLQkJICAgImFuZCBwcm9wYWdh dGU7IC1maXBhLWNwLWFsaWdubWVudDogZGlzYWJsZWQuXG4iLAotCQkgICBu b2RlLT5uYW1lICgpKTsKLQljb250aW51ZTsKLSAgICAgIH0KLQotICAgaWYg KGluZm8tPmlwY3Bfb3JpZ19ub2RlKQotICAgICAgaW5mbyA9IElQQV9OT0RF X1JFRiAoaW5mby0+aXBjcF9vcmlnX25vZGUpOwotCi0gICB1bnNpZ25lZCBj b3VudCA9IGlwYV9nZXRfcGFyYW1fY291bnQgKGluZm8pOwotICAgZm9yICh1 bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50IDsgaSsrKQotICAgICB7Ci0gICAg ICAgaXBjcF9wYXJhbV9sYXR0aWNlcyAqcGxhdHMgPSBpcGFfZ2V0X3Bhcm1f bGF0dGljZXMgKGluZm8sIGkpOwotICAgICAgIGlmICghcGxhdHMtPmFsaWdu bWVudC5ib3R0b21fcCAoKQotCSAgICYmICFwbGF0cy0+YWxpZ25tZW50LnRv cF9wICgpKQotCSB7Ci0JICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAocGxhdHMt PmFsaWdubWVudC5hbGlnbiA+IDApOwotCSAgIGZvdW5kX3VzZWZ1bF9yZXN1 bHQgPSB0cnVlOwotCSAgIGJyZWFrOwotCSB9Ci0gICAgIH0KLSAgIGlmICgh Zm91bmRfdXNlZnVsX3Jlc3VsdCkKLSAgICAgY29udGludWU7Ci0KLSAgIGlw Y3BfZ3Jvd190cmFuc2Zvcm1hdGlvbnNfaWZfbmVjZXNzYXJ5ICgpOwotICAg aXBjcF90cmFuc2Zvcm1hdGlvbl9zdW1tYXJ5ICp0cyA9IGlwY3BfZ2V0X3Ry YW5zZm9ybWF0aW9uX3N1bW1hcnkgKG5vZGUpOwotICAgdmVjX3NhZmVfcmVz ZXJ2ZV9leGFjdCAodHMtPmFsaWdubWVudHMsIGNvdW50KTsKLQotICAgZm9y ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50IDsgaSsrKQotICAgICB7Ci0g ICAgICAgaXBjcF9wYXJhbV9sYXR0aWNlcyAqcGxhdHMgPSBpcGFfZ2V0X3Bh cm1fbGF0dGljZXMgKGluZm8sIGkpOwotICAgICAgIGlwYV9hbGlnbm1lbnQg YWw7Ci0KLSAgICAgICBpZiAoIXBsYXRzLT5hbGlnbm1lbnQuYm90dG9tX3Ag KCkKLQkgICAmJiAhcGxhdHMtPmFsaWdubWVudC50b3BfcCAoKSkKLQkgewot CSAgIGFsLmtub3duID0gdHJ1ZTsKLQkgICBhbC5hbGlnbiA9IHBsYXRzLT5h bGlnbm1lbnQuYWxpZ247Ci0JICAgYWwubWlzYWxpZ24gPSBwbGF0cy0+YWxp Z25tZW50Lm1pc2FsaWduOwotCSB9Ci0gICAgICAgZWxzZQotCSBhbC5rbm93 biA9IGZhbHNlOwotCi0gICAgICAgdHMtPmFsaWdubWVudHMtPnF1aWNrX3B1 c2ggKGFsKTsKLSAgICAgICBpZiAoIWR1bXBfZmlsZSB8fCAhYWwua25vd24p Ci0JIGNvbnRpbnVlOwotICAgICAgIGlmICghZHVtcGVkX3N0aCkKLQkgewot CSAgIGZwcmludGYgKGR1bXBfZmlsZSwgIlByb3BhZ2F0ZWQgYWxpZ25tZW50 IGluZm8gZm9yIGZ1bmN0aW9uICVzLyVpOlxuIiwKLQkJICAgIG5vZGUtPm5h bWUgKCksIG5vZGUtPm9yZGVyKTsKLQkgICBkdW1wZWRfc3RoID0gdHJ1ZTsK LQkgfQotICAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIiAgcGFyYW0gJWk6 IGFsaWduOiAldSwgbWlzYWxpZ246ICV1XG4iLAotCQlpLCBhbC5hbGlnbiwg YWwubWlzYWxpZ24pOwotICAgICB9Ci0gIH0KLX0KLQogLyogTG9vayB1cCBh bGwgdGhlIGJpdHMgaW5mb3JtYXRpb24gdGhhdCB3ZSBoYXZlIGRpc2NvdmVy ZWQgYW5kIGNvcHkgaXQgb3ZlcgogICAgdG8gdGhlIHRyYW5zZm9ybWF0aW9u IHN1bW1hcnkuICAqLwogCkBAIC01MjQ2LDggKzQ5NzMsNiBAQCBpcGNwX2Ry aXZlciAodm9pZCkKICAgaXBjcF9wcm9wYWdhdGVfc3RhZ2UgKCZ0b3BvKTsK ICAgLyogRGVjaWRlIHdoYXQgY29uc3RhbnQgcHJvcGFnYXRpb24gYW5kIGNs b25pbmcgc2hvdWxkIGJlIHBlcmZvcm1lZC4gICovCiAgIGlwY3BfZGVjaXNp b25fc3RhZ2UgKCZ0b3BvKTsKLSAgLyogU3RvcmUgcmVzdWx0cyBvZiBhbGln bm1lbnQgcHJvcGFnYXRpb24uICovCi0gIGlwY3Bfc3RvcmVfYWxpZ25tZW50 X3Jlc3VsdHMgKCk7CiAgIC8qIFN0b3JlIHJlc3VsdHMgb2YgYml0cyBwcm9w YWdhdGlvbi4gICovCiAgIGlwY3Bfc3RvcmVfYml0c19yZXN1bHRzICgpOwog ICAvKiBTdG9yZSByZXN1bHRzIG9mIHZhbHVlIHJhbmdlIHByb3BhZ2F0aW9u LiAgKi8KZGlmZiAtLWdpdCBhL2djYy9pcGEtcHJvcC5jIGIvZ2NjL2lwYS1w cm9wLmMKaW5kZXggMzAyYTQ3OS4uYTk4MWVmZCAxMDA2NDQKLS0tIGEvZ2Nj L2lwYS1wcm9wLmMKKysrIGIvZ2NjL2lwYS1wcm9wLmMKQEAgLTI5NCwxNSAr Mjk0LDYgQEAgaXBhX3ByaW50X25vZGVfanVtcF9mdW5jdGlvbnNfZm9yX2Vk Z2UgKEZJTEUgKmYsIHN0cnVjdCBjZ3JhcGhfZWRnZSAqY3MpCiAJICBjdHgt PmR1bXAgKGR1bXBfZmlsZSk7CiAJfQogCi0gICAgICBpZiAoanVtcF9mdW5j LT5hbGlnbm1lbnQua25vd24pCi0JewotCSAgZnByaW50ZiAoZiwgIiAgICAg ICAgIEFsaWdubWVudDogJXUsIG1pc2FsaWdubWVudDogJXVcbiIsCi0JCSAg IGp1bXBfZnVuYy0+YWxpZ25tZW50LmFsaWduLAotCQkgICBqdW1wX2Z1bmMt PmFsaWdubWVudC5taXNhbGlnbik7Ci0JfQotICAgICAgZWxzZQotCWZwcmlu dGYgKGYsICIgICAgICAgICBVbmtub3duIGFsaWdubWVudFxuIik7Ci0KICAg ICAgIGlmIChqdW1wX2Z1bmMtPmJpdHMua25vd24pCiAJewogCSAgZnByaW50 ZiAoZiwgIiAgICAgICAgIHZhbHVlOiAiKTsgcHJpbnRfaGV4IChqdW1wX2Z1 bmMtPmJpdHMudmFsdWUsIGYpOwpAQCAtNDAyLDcgKzM5Myw2IEBAIHN0YXRp YyB2b2lkCiBpcGFfc2V0X2pmX3Vua25vd24gKHN0cnVjdCBpcGFfanVtcF9m dW5jICpqZnVuYykKIHsKICAgamZ1bmMtPnR5cGUgPSBJUEFfSkZfVU5LTk9X TjsKLSAgamZ1bmMtPmFsaWdubWVudC5rbm93biA9IGZhbHNlOwogICBqZnVu Yy0+Yml0cy5rbm93biA9IGZhbHNlOwogICBqZnVuYy0+dnJfa25vd24gPSBm YWxzZTsKIH0KQEAgLTE2NzgsMjUgKzE2NjgsNyBAQCBpcGFfY29tcHV0ZV9q dW1wX2Z1bmN0aW9uc19mb3JfZWRnZSAoc3RydWN0IGlwYV9mdW5jX2JvZHlf aW5mbyAqZmJpLAogCSAgICB1c2VmdWxfY29udGV4dCA9IHRydWU7CiAJfQog Ci0gICAgICBpZiAoUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRShhcmcpKSkK LQl7Ci0JICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGh3aV9iaXRwb3M7Ci0J ICB1bnNpZ25lZCBhbGlnbjsKLQotCSAgZ2V0X3BvaW50ZXJfYWxpZ25tZW50 XzEgKGFyZywgJmFsaWduLCAmaHdpX2JpdHBvcyk7Ci0JICBpZiAoYWxpZ24g PiBCSVRTX1BFUl9VTklUCi0JICAgICAgJiYgYWxpZ24gJSBCSVRTX1BFUl9V TklUID09IDAKLQkgICAgICAmJiBod2lfYml0cG9zICUgQklUU19QRVJfVU5J VCA9PSAwKQotCSAgICB7Ci0JICAgICAgamZ1bmMtPmFsaWdubWVudC5rbm93 biA9IHRydWU7Ci0JICAgICAgamZ1bmMtPmFsaWdubWVudC5hbGlnbiA9IGFs aWduIC8gQklUU19QRVJfVU5JVDsKLQkgICAgICBqZnVuYy0+YWxpZ25tZW50 Lm1pc2FsaWduID0gaHdpX2JpdHBvcyAvIEJJVFNfUEVSX1VOSVQ7Ci0JICAg IH0KLQkgIGVsc2UKLQkgICAgZ2NjX2Fzc2VydCAoIWpmdW5jLT5hbGlnbm1l bnQua25vd24pOwotCSAgZ2NjX2Fzc2VydCAoIWpmdW5jLT52cl9rbm93bik7 Ci0JfQotICAgICAgZWxzZQorICAgICAgaWYgKCFQT0lOVEVSX1RZUEVfUCAo VFJFRV9UWVBFIChhcmcpKSkKIAl7CiAJICB3aWRlX2ludCBtaW4sIG1heDsK IAkgIHZhbHVlX3JhbmdlX3R5cGUgdHlwZTsKQEAgLTE3MjMsNyArMTY5NSw2 IEBAIGlwYV9jb21wdXRlX2p1bXBfZnVuY3Rpb25zX2Zvcl9lZGdlIChzdHJ1 Y3QgaXBhX2Z1bmNfYm9keV9pbmZvICpmYmksCiAJICAgIH0KIAkgIGVsc2UK IAkgICAgZ2NjX2Fzc2VydCAoIWpmdW5jLT52cl9rbm93bik7Ci0JICBnY2Nf YXNzZXJ0ICghamZ1bmMtPmFsaWdubWVudC5rbm93bik7CiAJfQogCiAgICAg ICBpZiAoSU5URUdSQUxfVFlQRV9QIChUUkVFX1RZUEUgKGFyZykpCkBAIC0x NzQzLDYgKzE3MTQsMTcgQEAgaXBhX2NvbXB1dGVfanVtcF9mdW5jdGlvbnNf Zm9yX2VkZ2UgKHN0cnVjdCBpcGFfZnVuY19ib2R5X2luZm8gKmZiaSwKIAkg ICAgICBqZnVuYy0+Yml0cy5tYXNrID0gMDsKIAkgICAgfQogCX0KKyAgICAg IGVsc2UgaWYgKFBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKGFyZykpKQor CXsKKwkgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgYml0cG9zOworCSAgdW5z aWduZWQgYWxpZ247CisKKwkgIGpmdW5jLT5iaXRzLmtub3duID0gdHJ1ZTsK KwkgIGdldF9wb2ludGVyX2FsaWdubWVudF8xIChhcmcsICZhbGlnbiwgJmJp dHBvcyk7CisJICBqZnVuYy0+Yml0cy5tYXNrID0gd2k6Om1hc2s8d2lkZXN0 X2ludD4oVFlQRV9QUkVDSVNJT04gKFRSRUVfVFlQRSAoYXJnKSksIGZhbHNl KQorCQkJICAgICAuYW5kX25vdCAoYWxpZ24gLyBCSVRTX1BFUl9VTklUIC0g MSk7CisJICBqZnVuYy0+Yml0cy52YWx1ZSA9IGJpdHBvcyAvIEJJVFNfUEVS X1VOSVQ7CisJfQogICAgICAgZWxzZQogCWdjY19hc3NlcnQgKCFqZnVuYy0+ Yml0cy5rbm93bik7CiAKQEAgLTM3NTUsMTggKzM3MzcsOSBAQCBpcGFfbm9k ZV9wYXJhbXNfdDo6ZHVwbGljYXRlKGNncmFwaF9ub2RlICpzcmMsIGNncmFw aF9ub2RlICpkc3QsCiAgICAgewogICAgICAgaXBjcF9ncm93X3RyYW5zZm9y bWF0aW9uc19pZl9uZWNlc3NhcnkgKCk7CiAgICAgICBzcmNfdHJhbnMgPSBp cGNwX2dldF90cmFuc2Zvcm1hdGlvbl9zdW1tYXJ5IChzcmMpOwotICAgICAg Y29uc3QgdmVjPGlwYV9hbGlnbm1lbnQsIHZhX2djPiAqc3JjX2FsaWdubWVu dHMgPSBzcmNfdHJhbnMtPmFsaWdubWVudHM7CiAgICAgICBjb25zdCB2ZWM8 aXBhX3ZyLCB2YV9nYz4gKnNyY192ciA9IHNyY190cmFucy0+bV92cjsKLSAg ICAgIHZlYzxpcGFfYWxpZ25tZW50LCB2YV9nYz4gKiZkc3RfYWxpZ25tZW50 cwotCT0gaXBjcF9nZXRfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAoZHN0KS0+ YWxpZ25tZW50czsKICAgICAgIHZlYzxpcGFfdnIsIHZhX2djPiAqJmRzdF92 cgogCT0gaXBjcF9nZXRfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAoZHN0KS0+ bV92cjsKLSAgICAgIGlmICh2ZWNfc2FmZV9sZW5ndGggKHNyY190cmFucy0+ YWxpZ25tZW50cykgPiAwKQotCXsKLQkgIHZlY19zYWZlX3Jlc2VydmVfZXhh Y3QgKGRzdF9hbGlnbm1lbnRzLCBzcmNfYWxpZ25tZW50cy0+bGVuZ3RoICgp KTsKLQkgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNfYWxpZ25tZW50 cy0+bGVuZ3RoICgpOyArK2kpCi0JICAgIGRzdF9hbGlnbm1lbnRzLT5xdWlj a19wdXNoICgoKnNyY19hbGlnbm1lbnRzKVtpXSk7Ci0JfQogICAgICAgaWYg KHZlY19zYWZlX2xlbmd0aCAoc3JjX3RyYW5zLT5tX3ZyKSA+IDApCiAJewog CSAgdmVjX3NhZmVfcmVzZXJ2ZV9leGFjdCAoZHN0X3ZyLCBzcmNfdnItPmxl bmd0aCAoKSk7CkBAIC00Njk4LDE1ICs0NjcxLDYgQEAgaXBhX3dyaXRlX2p1 bXBfZnVuY3Rpb24gKHN0cnVjdCBvdXRwdXRfYmxvY2sgKm9iLAogICAgIH0K IAogICBicCA9IGJpdHBhY2tfY3JlYXRlIChvYi0+bWFpbl9zdHJlYW0pOwot ICBicF9wYWNrX3ZhbHVlICgmYnAsIGp1bXBfZnVuYy0+YWxpZ25tZW50Lmtu b3duLCAxKTsKLSAgc3RyZWFtZXJfd3JpdGVfYml0cGFjayAoJmJwKTsKLSAg aWYgKGp1bXBfZnVuYy0+YWxpZ25tZW50Lmtub3duKQotICAgIHsKLSAgICAg IHN0cmVhbWVyX3dyaXRlX3Vod2kgKG9iLCBqdW1wX2Z1bmMtPmFsaWdubWVu dC5hbGlnbik7Ci0gICAgICBzdHJlYW1lcl93cml0ZV91aHdpIChvYiwganVt cF9mdW5jLT5hbGlnbm1lbnQubWlzYWxpZ24pOwotICAgIH0KLQotICBicCA9 IGJpdHBhY2tfY3JlYXRlIChvYi0+bWFpbl9zdHJlYW0pOwogICBicF9wYWNr X3ZhbHVlICgmYnAsIGp1bXBfZnVuYy0+Yml0cy5rbm93biwgMSk7CiAgIHN0 cmVhbWVyX3dyaXRlX2JpdHBhY2sgKCZicCk7CiAgIGlmIChqdW1wX2Z1bmMt PmJpdHMua25vd24pCkBAIC00NzkwLDE3ICs0NzU0LDYgQEAgaXBhX3JlYWRf anVtcF9mdW5jdGlvbiAoc3RydWN0IGx0b19pbnB1dF9ibG9jayAqaWIsCiAg ICAgfQogCiAgIHN0cnVjdCBiaXRwYWNrX2QgYnAgPSBzdHJlYW1lcl9yZWFk X2JpdHBhY2sgKGliKTsKLSAgYm9vbCBhbGlnbm1lbnRfa25vd24gPSBicF91 bnBhY2tfdmFsdWUgKCZicCwgMSk7Ci0gIGlmIChhbGlnbm1lbnRfa25vd24p Ci0gICAgewotICAgICAganVtcF9mdW5jLT5hbGlnbm1lbnQua25vd24gPSB0 cnVlOwotICAgICAganVtcF9mdW5jLT5hbGlnbm1lbnQuYWxpZ24gPSBzdHJl YW1lcl9yZWFkX3Vod2kgKGliKTsKLSAgICAgIGp1bXBfZnVuYy0+YWxpZ25t ZW50Lm1pc2FsaWduID0gc3RyZWFtZXJfcmVhZF91aHdpIChpYik7Ci0gICAg fQotICBlbHNlCi0gICAganVtcF9mdW5jLT5hbGlnbm1lbnQua25vd24gPSBm YWxzZTsKLQotICBicCA9IHN0cmVhbWVyX3JlYWRfYml0cGFjayAoaWIpOwog ICBib29sIGJpdHNfa25vd24gPSBicF91bnBhY2tfdmFsdWUgKCZicCwgMSk7 CiAgIGlmIChiaXRzX2tub3duKQogICAgIHsKQEAgLTUxNjYsMzAgKzUxMTks NiBAQCB3cml0ZV9pcGNwX3RyYW5zZm9ybWF0aW9uX2luZm8gKG91dHB1dF9i bG9jayAqb2IsIGNncmFwaF9ub2RlICpub2RlKQogICAgIH0KIAogICBpcGNw X3RyYW5zZm9ybWF0aW9uX3N1bW1hcnkgKnRzID0gaXBjcF9nZXRfdHJhbnNm b3JtYXRpb25fc3VtbWFyeSAobm9kZSk7Ci0gIGlmICh0cyAmJiB2ZWNfc2Fm ZV9sZW5ndGggKHRzLT5hbGlnbm1lbnRzKSA+IDApCi0gICAgewotICAgICAg Y291bnQgPSB0cy0+YWxpZ25tZW50cy0+bGVuZ3RoICgpOwotCi0gICAgICBz dHJlYW1lcl93cml0ZV91aHdpIChvYiwgY291bnQpOwotICAgICAgZm9yICh1 bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0JewotCSAgaXBhX2Fs aWdubWVudCAqcGFybV9hbCA9ICYoKnRzLT5hbGlnbm1lbnRzKVtpXTsKLQot CSAgc3RydWN0IGJpdHBhY2tfZCBicDsKLQkgIGJwID0gYml0cGFja19jcmVh dGUgKG9iLT5tYWluX3N0cmVhbSk7Ci0JICBicF9wYWNrX3ZhbHVlICgmYnAs IHBhcm1fYWwtPmtub3duLCAxKTsKLQkgIHN0cmVhbWVyX3dyaXRlX2JpdHBh Y2sgKCZicCk7Ci0JICBpZiAocGFybV9hbC0+a25vd24pCi0JICAgIHsKLQkg ICAgICBzdHJlYW1lcl93cml0ZV91aHdpIChvYiwgcGFybV9hbC0+YWxpZ24p OwotCSAgICAgIHN0cmVhbWVyX3dyaXRlX2h3aV9pbl9yYW5nZSAob2ItPm1h aW5fc3RyZWFtLCAwLCBwYXJtX2FsLT5hbGlnbiwKLQkJCQkJICAgcGFybV9h bC0+bWlzYWxpZ24pOwotCSAgICB9Ci0JfQotICAgIH0KLSAgZWxzZQotICAg IHN0cmVhbWVyX3dyaXRlX3Vod2kgKG9iLCAwKTsKLQogICBpZiAodHMgJiYg dmVjX3NhZmVfbGVuZ3RoICh0cy0+bV92cikgPiAwKQogICAgIHsKICAgICAg IGNvdW50ID0gdHMtPm1fdnItPmxlbmd0aCAoKTsKQEAgLTUyNjAsMzIgKzUx ODksNyBAQCByZWFkX2lwY3BfdHJhbnNmb3JtYXRpb25faW5mbyAobHRvX2lu cHV0X2Jsb2NrICppYiwgY2dyYXBoX25vZGUgKm5vZGUsCiAgICAgICBhZ2d2 YWxzID0gYXY7CiAgICAgfQogICBpcGFfc2V0X25vZGVfYWdnX3ZhbHVlX2No YWluIChub2RlLCBhZ2d2YWxzKTsKLQotICBjb3VudCA9IHN0cmVhbWVyX3Jl YWRfdWh3aSAoaWIpOwotICBpZiAoY291bnQgPiAwKQotICAgIHsKLSAgICAg IGlwY3BfZ3Jvd190cmFuc2Zvcm1hdGlvbnNfaWZfbmVjZXNzYXJ5ICgpOwot Ci0gICAgICBpcGNwX3RyYW5zZm9ybWF0aW9uX3N1bW1hcnkgKnRzID0gaXBj cF9nZXRfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAobm9kZSk7Ci0gICAgICB2 ZWNfc2FmZV9ncm93X2NsZWFyZWQgKHRzLT5hbGlnbm1lbnRzLCBjb3VudCk7 Ci0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCXsKLQkg IGlwYV9hbGlnbm1lbnQgKnBhcm1fYWw7Ci0JICBwYXJtX2FsID0gJigqdHMt PmFsaWdubWVudHMpW2ldOwotCSAgc3RydWN0IGJpdHBhY2tfZCBicDsKLQkg IGJwID0gc3RyZWFtZXJfcmVhZF9iaXRwYWNrIChpYik7Ci0JICBwYXJtX2Fs LT5rbm93biA9IGJwX3VucGFja192YWx1ZSAoJmJwLCAxKTsKLQkgIGlmIChw YXJtX2FsLT5rbm93bikKLQkgICAgewotCSAgICAgIHBhcm1fYWwtPmFsaWdu ID0gc3RyZWFtZXJfcmVhZF91aHdpIChpYik7Ci0JICAgICAgcGFybV9hbC0+ bWlzYWxpZ24KLQkJPSBzdHJlYW1lcl9yZWFkX2h3aV9pbl9yYW5nZSAoaWIs ICJpcGEtcHJvcCBtaXNhbGlnbiIsCi0JCQkJCSAgICAgIDAsIHBhcm1fYWwt PmFsaWduKTsKLQkgICAgfQotCX0KLSAgICB9Ci0KKyAgCiAgIGNvdW50ID0g c3RyZWFtZXJfcmVhZF91aHdpIChpYik7CiAgIGlmIChjb3VudCA+IDApCiAg ICAgewpAQCAtNTU3OSw1OCArNTQ4Myw2IEBAIGlwY3BfbW9kaWZfZG9tX3dh bGtlcjo6YmVmb3JlX2RvbV9jaGlsZHJlbiAoYmFzaWNfYmxvY2sgYmIpCiAg IHJldHVybiBOVUxMOwogfQogCi0vKiBVcGRhdGUgYWxpZ25tZW50IG9mIGZv cm1hbCBwYXJhbWV0ZXJzIGFzIGRlc2NyaWJlZCBpbgotICAgaXBjcF90cmFu c2Zvcm1hdGlvbl9zdW1tYXJ5LiAgKi8KLQotc3RhdGljIHZvaWQKLWlwY3Bf dXBkYXRlX2FsaWdubWVudHMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkK LXsKLSAgdHJlZSBmbmRlY2wgPSBub2RlLT5kZWNsOwotICB0cmVlIHBhcm0g PSBERUNMX0FSR1VNRU5UUyAoZm5kZWNsKTsKLSAgdHJlZSBuZXh0X3Bhcm0g PSBwYXJtOwotICBpcGNwX3RyYW5zZm9ybWF0aW9uX3N1bW1hcnkgKnRzID0g aXBjcF9nZXRfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAobm9kZSk7Ci0gIGlm ICghdHMgfHwgdmVjX3NhZmVfbGVuZ3RoICh0cy0+YWxpZ25tZW50cykgPT0g MCkKLSAgICByZXR1cm47Ci0gIGNvbnN0IHZlYzxpcGFfYWxpZ25tZW50LCB2 YV9nYz4gJmFsaWdubWVudHMgPSAqdHMtPmFsaWdubWVudHM7Ci0gIHVuc2ln bmVkIGNvdW50ID0gYWxpZ25tZW50cy5sZW5ndGggKCk7Ci0KLSAgZm9yICh1 bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ksIHBhcm0gPSBuZXh0X3Bh cm0pCi0gICAgewotICAgICAgaWYgKG5vZGUtPmNsb25lLmNvbWJpbmVkX2Fy Z3NfdG9fc2tpcAotCSAgJiYgYml0bWFwX2JpdF9wIChub2RlLT5jbG9uZS5j b21iaW5lZF9hcmdzX3RvX3NraXAsIGkpKQotCWNvbnRpbnVlOwotICAgICAg Z2NjX2NoZWNraW5nX2Fzc2VydCAocGFybSk7Ci0gICAgICBuZXh0X3Bhcm0g PSBERUNMX0NIQUlOIChwYXJtKTsKLQotICAgICAgaWYgKCFhbGlnbm1lbnRz W2ldLmtub3duIHx8ICFpc19naW1wbGVfcmVnIChwYXJtKSkKLQljb250aW51 ZTsKLSAgICAgIHRyZWUgZGRlZiA9IHNzYV9kZWZhdWx0X2RlZiAoREVDTF9T VFJVQ1RfRlVOQ1RJT04gKG5vZGUtPmRlY2wpLCBwYXJtKTsKLSAgICAgIGlm ICghZGRlZikKLQljb250aW51ZTsKLQotICAgICAgaWYgKGR1bXBfZmlsZSkK LQlmcHJpbnRmIChkdW1wX2ZpbGUsICIgIEFkanVzdGluZyBhbGlnbm1lbnQg b2YgcGFyYW0gJXUgdG8gJXUsICIKLQkJICJtaXNhbGlnbm1lbnQgdG8gJXVc biIsIGksIGFsaWdubWVudHNbaV0uYWxpZ24sCi0JCSBhbGlnbm1lbnRzW2ld Lm1pc2FsaWduKTsKLQotICAgICAgc3RydWN0IHB0cl9pbmZvX2RlZiAqcGkg PSBnZXRfcHRyX2luZm8gKGRkZWYpOwotICAgICAgZ2NjX2NoZWNraW5nX2Fz c2VydCAocGkpOwotICAgICAgdW5zaWduZWQgb2xkX2FsaWduOwotICAgICAg dW5zaWduZWQgb2xkX21pc2FsaWduOwotICAgICAgYm9vbCBvbGRfa25vd24g PSBnZXRfcHRyX2luZm9fYWxpZ25tZW50IChwaSwgJm9sZF9hbGlnbiwgJm9s ZF9taXNhbGlnbik7Ci0KLSAgICAgIGlmIChvbGRfa25vd24KLQkgICYmIG9s ZF9hbGlnbiA+PSBhbGlnbm1lbnRzW2ldLmFsaWduKQotCXsKLQkgIGlmIChk dW1wX2ZpbGUpCi0JICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIiAgICBCdXQg dGhlIGFsaWdubWVudCB3YXMgYWxyZWFkeSAldS5cbiIsCi0JCSAgICAgb2xk X2FsaWduKTsKLQkgIGNvbnRpbnVlOwotCX0KLSAgICAgIHNldF9wdHJfaW5m b19hbGlnbm1lbnQgKHBpLCBhbGlnbm1lbnRzW2ldLmFsaWduLCBhbGlnbm1l bnRzW2ldLm1pc2FsaWduKTsKLSAgICB9Ci19Ci0KIC8qIFVwZGF0ZSBiaXRz IGluZm8gb2YgZm9ybWFsIHBhcmFtZXRlcnMgYXMgZGVzY3JpYmVkIGluCiAg ICBpcGNwX3RyYW5zZm9ybWF0aW9uX3N1bW1hcnkuICAqLwogCkBAIC01NjU3 LDcgKzU1MDksNyBAQCBpcGNwX3VwZGF0ZV9iaXRzIChzdHJ1Y3QgY2dyYXBo X25vZGUgKm5vZGUpCiAgICAgICBuZXh0X3Bhcm0gPSBERUNMX0NIQUlOIChw YXJtKTsKIAogICAgICAgaWYgKCFiaXRzW2ldLmtub3duCi0JICB8fCAhSU5U RUdSQUxfVFlQRV9QIChUUkVFX1RZUEUgKHBhcm0pKQorCSAgfHwgIShJTlRF R1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAocGFybSkpIHx8IFBPSU5URVJfVFlQ RV9QIChUUkVFX1RZUEUgKHBhcm0pKSkKIAkgIHx8ICFpc19naW1wbGVfcmVn IChwYXJtKSkKIAljb250aW51ZTsgICAgICAgCiAKQEAgLTU2NzIsMTIgKzU1 MjQsNTMgQEAgaXBjcF91cGRhdGVfYml0cyAoc3RydWN0IGNncmFwaF9ub2Rl ICpub2RlKQogCSAgZnByaW50ZiAoZHVtcF9maWxlLCAiXG4iKTsKIAl9CiAK LSAgICAgIHVuc2lnbmVkIHByZWMgPSBUWVBFX1BSRUNJU0lPTiAoVFJFRV9U WVBFIChkZGVmKSk7Ci0gICAgICBzaWdub3Agc2duID0gVFlQRV9TSUdOIChU UkVFX1RZUEUgKGRkZWYpKTsKKyAgICAgIGlmIChJTlRFR1JBTF9UWVBFX1Ag KFRSRUVfVFlQRSAoZGRlZikpKQorCXsKKwkgIHVuc2lnbmVkIHByZWMgPSBU WVBFX1BSRUNJU0lPTiAoVFJFRV9UWVBFIChkZGVmKSk7CisJICBzaWdub3Ag c2duID0gVFlQRV9TSUdOIChUUkVFX1RZUEUgKGRkZWYpKTsKKworCSAgd2lk ZV9pbnQgbm9uemVyb19iaXRzID0gd2lkZV9pbnQ6OmZyb20gKGJpdHNbaV0u bWFzaywgcHJlYywgVU5TSUdORUQpCisJCQkJICB8IHdpZGVfaW50Ojpmcm9t IChiaXRzW2ldLnZhbHVlLCBwcmVjLCBzZ24pOworCSAgc2V0X25vbnplcm9f Yml0cyAoZGRlZiwgbm9uemVyb19iaXRzKTsKKwl9CisgICAgICBlbHNlCisJ eworCSAgdW5zaWduZWQgdGVtID0gYml0c1tpXS5tYXNrLnRvX3Vod2kgKCk7 CisJICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGJpdHBvcyA9IGJpdHNbaV0u dmFsdWUudG9fdWh3aSAoKTsgCisJICB1bnNpZ25lZCBhbGlnbiA9IHRlbSAm IC10ZW07CisJICB1bnNpZ25lZCBtaXNhbGlnbiA9IGJpdHBvcyAmIChhbGln biAtIDEpOwogCi0gICAgICB3aWRlX2ludCBub256ZXJvX2JpdHMgPSB3aWRl X2ludDo6ZnJvbSAoYml0c1tpXS5tYXNrLCBwcmVjLCBVTlNJR05FRCkKLQkJ CSAgICAgIHwgd2lkZV9pbnQ6OmZyb20gKGJpdHNbaV0udmFsdWUsIHByZWMs IHNnbik7Ci0gICAgICBzZXRfbm9uemVyb19iaXRzIChkZGVmLCBub256ZXJv X2JpdHMpOworCSAgaWYgKGFsaWduID4gMSkKKwkgICAgeworCSAgICAgIGlm IChkdW1wX2ZpbGUpCisJCWZwcmludGYgKGR1bXBfZmlsZSwgIkFkanVzdGlu ZyBhbGlnbjogJXUsIG1pc2FsaWduOiAldVxuIiwgYWxpZ24sIG1pc2FsaWdu KTsgCisKKwkgICAgICB1bnNpZ25lZCBvbGRfYWxpZ24sIG9sZF9taXNhbGln bjsKKwkgICAgICBzdHJ1Y3QgcHRyX2luZm9fZGVmICpwaSA9IGdldF9wdHJf aW5mbyAoZGRlZik7CisJICAgICAgYm9vbCBvbGRfa25vd24gPSBnZXRfcHRy X2luZm9fYWxpZ25tZW50IChwaSwgJm9sZF9hbGlnbiwgJm9sZF9taXNhbGln bik7CisKKwkgICAgICBpZiAob2xkX2tub3duCisJCSAgJiYgb2xkX2FsaWdu ID4gYWxpZ24pCisJCXsKKwkJICBpZiAoZHVtcF9maWxlKQorCQkgICAgewor CQkgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJCdXQgYWxpZ25tZW50IHdh cyBhbHJlYWR5ICV1LlxuIiwgb2xkX2FsaWduKTsKKwkJICAgICAgaWYgKChv bGRfbWlzYWxpZ24gJiAoYWxpZ24gLSAxKSkgIT0gbWlzYWxpZ24pCisJCQlm cHJpbnRmIChkdW1wX2ZpbGUsICJvbGRfbWlzYWxpZ24gKCV1KSBhbmQgbWlz YWxpZ24gKCV1KSBtaXNtYXRjaFxuIiwKKwkJCQkgb2xkX21pc2FsaWduLCBt aXNhbGlnbik7CisJCSAgICB9CisJCSAgY29udGludWU7CisJCX0KKworCSAg ICAgIGlmIChvbGRfa25vd24KKwkJICAmJiAoKG1pc2FsaWduICYgKG9sZF9h bGlnbiAtIDEpKSAhPSBvbGRfbWlzYWxpZ24pCisJCSAgJiYgZHVtcF9maWxl KQorCQlmcHJpbnRmIChkdW1wX2ZpbGUsICJvbGRfbWlzYWxpZ24gKCV1KSBh bmQgbWlzYWxpZ24gKCV1KSBtaXNtYXRjaFxuIiwKKwkJCSBvbGRfbWlzYWxp Z24sIG1pc2FsaWduKTsKKworCSAgICAgIHNldF9wdHJfaW5mb19hbGlnbm1l bnQgKHBpLCBhbGlnbiwgbWlzYWxpZ24pOyAKKwkgICAgfQorCX0KICAgICB9 CiB9CiAKQEAgLTU3NTIsNyArNTY0NSw2IEBAIGlwY3BfdHJhbnNmb3JtX2Z1 bmN0aW9uIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCiAgICAgZnByaW50 ZiAoZHVtcF9maWxlLCAiTW9kaWZpY2F0aW9uIHBoYXNlIG9mIG5vZGUgJXMv JWlcbiIsCiAJICAgICBub2RlLT5uYW1lICgpLCBub2RlLT5vcmRlcik7CiAK LSAgaXBjcF91cGRhdGVfYWxpZ25tZW50cyAobm9kZSk7CiAgIGlwY3BfdXBk YXRlX2JpdHMgKG5vZGUpOwogICBpcGNwX3VwZGF0ZV92ciAobm9kZSk7CiAg IGFnZ3ZhbCA9IGlwYV9nZXRfYWdnX3JlcGxhY2VtZW50c19mb3Jfbm9kZSAo bm9kZSk7CkBAIC01Nzg1LDcgKzU2NzcsNiBAQCBpcGNwX3RyYW5zZm9ybV9m dW5jdGlvbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQogICBmYmkuYmJf aW5mb3MucmVsZWFzZSAoKTsKICAgZnJlZV9kb21pbmFuY2VfaW5mbyAoQ0RJ X0RPTUlOQVRPUlMpOwogICAoKmlwY3BfdHJhbnNmb3JtYXRpb25zKVtub2Rl LT51aWRdLmFnZ192YWx1ZXMgPSBOVUxMOwotICAoKmlwY3BfdHJhbnNmb3Jt YXRpb25zKVtub2RlLT51aWRdLmFsaWdubWVudHMgPSBOVUxMOwogICBkZXNj cmlwdG9ycy5yZWxlYXNlICgpOwogCiAgIGlmICghc29tZXRoaW5nX2NoYW5n ZWQpCmRpZmYgLS1naXQgYS9nY2MvaXBhLXByb3AuaCBiL2djYy9pcGEtcHJv cC5oCmluZGV4IGExMjM5NzguLjRlZWFlODggMTAwNjQ0Ci0tLSBhL2djYy9p cGEtcHJvcC5oCisrKyBiL2djYy9pcGEtcHJvcC5oCkBAIC0xNDMsMTcgKzE0 Myw2IEBAIHN0cnVjdCBHVFkoKCkpIGlwYV9hZ2dfanVtcF9mdW5jdGlvbgog CiB0eXBlZGVmIHN0cnVjdCBpcGFfYWdnX2p1bXBfZnVuY3Rpb24gKmlwYV9h Z2dfanVtcF9mdW5jdGlvbl9wOwogCi0vKiBJbmZvIGFib3V0IHBvaW50ZXIg YWxpZ25tZW50cy4gKi8KLXN0cnVjdCBHVFkoKCkpIGlwYV9hbGlnbm1lbnQK LXsKLSAgLyogVGhlIGRhdGEgZmllbGRzIGJlbG93IGFyZSB2YWxpZCBvbmx5 IGlmIGtub3duIGlzIHRydWUuICAqLwotICBib29sIGtub3duOwotICAvKiBT ZWUgcHRyX2luZm9fZGVmIGFuZCBnZXRfcG9pbnRlcl9hbGlnbm1lbnRfMSBm b3IgZGVzY3JpcHRpb24gb2YgdGhlc2UKLSAgICAgdHdvLiAgKi8KLSAgdW5z aWduZWQgYWxpZ247Ci0gIHVuc2lnbmVkIG1pc2FsaWduOwotfTsKLQogLyog SW5mb3JtYXRpb24gYWJvdXQgemVyby9ub24temVybyBiaXRzLiAgKi8KIHN0 cnVjdCBHVFkoKCkpIGlwYV9iaXRzCiB7CkBAIC0xODYsOSArMTc1LDYgQEAg c3RydWN0IEdUWSAoKCkpIGlwYV9qdW1wX2Z1bmMKICAgICAgZGVzY3JpcHRp b24uICAqLwogICBzdHJ1Y3QgaXBhX2FnZ19qdW1wX2Z1bmN0aW9uIGFnZzsK IAotICAvKiBJbmZvcm1hdGlvbiBhYm91dCBhbGlnbm1lbnQgb2YgcG9pbnRl cnMuICovCi0gIHN0cnVjdCBpcGFfYWxpZ25tZW50IGFsaWdubWVudDsKLQog ICAvKiBJbmZvcm1hdGlvbiBhYm91dCB6ZXJvL25vbi16ZXJvIGJpdHMuICAq LwogICBzdHJ1Y3QgaXBhX2JpdHMgYml0czsKIApAQCAtNTMxLDggKzUxNyw2 IEBAIHN0cnVjdCBHVFkoKCkpIGlwY3BfdHJhbnNmb3JtYXRpb25fc3VtbWFy eQogewogICAvKiBMaW5rZWQgbGlzdCBvZiBrbm93biBhZ2dyZWdhdGUgdmFs dWVzLiAgKi8KICAgaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZSAqYWdnX3Zh bHVlczsKLSAgLyogQWxpZ25tZW50IGluZm9ybWF0aW9uIGZvciBwb2ludGVy cy4gICovCi0gIHZlYzxpcGFfYWxpZ25tZW50LCB2YV9nYz4gKmFsaWdubWVu dHM7CiAgIC8qIEtub3duIGJpdHMgaW5mb3JtYXRpb24uICAqLwogICB2ZWM8 aXBhX2JpdHMsIHZhX2djPiAqYml0czsKICAgLyogVmFsdWUgcmFuZ2UgaW5m b3JtYXRpb24uICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL29wdHMuYyBiL2djYy9v cHRzLmMKaW5kZXggNDVmMWY4OWMuLjkwZTYxODYgMTAwNjQ0Ci0tLSBhL2dj Yy9vcHRzLmMKKysrIGIvZ2NjL29wdHMuYwpAQCAtNTA0LDcgKzUwNCw2IEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9vcHRpb25zIGRlZmF1bHRf b3B0aW9uc190YWJsZVtdID0KICAgICB7IE9QVF9MRVZFTFNfMl9QTFVTLCBP UFRfZnRyZWVfcHJlLCBOVUxMLCAxIH0sCiAgICAgeyBPUFRfTEVWRUxTXzJf UExVUywgT1BUX2Z0cmVlX3N3aXRjaF9jb252ZXJzaW9uLCBOVUxMLCAxIH0s CiAgICAgeyBPUFRfTEVWRUxTXzJfUExVUywgT1BUX2ZpcGFfY3AsIE5VTEws IDEgfSwKLSAgICB7IE9QVF9MRVZFTFNfMl9QTFVTLCBPUFRfZmlwYV9jcF9h bGlnbm1lbnQsIE5VTEwsIDEgfSwKICAgICB7IE9QVF9MRVZFTFNfMl9QTFVT LCBPUFRfZmlwYV9iaXRfY3AsIE5VTEwsIDEgfSwKICAgICB7IE9QVF9MRVZF TFNfMl9QTFVTLCBPUFRfZmlwYV92cnAsIE5VTEwsIDEgfSwKICAgICB7IE9Q VF9MRVZFTFNfMl9QTFVTLCBPUFRfZmRldmlydHVhbGl6ZSwgTlVMTCwgMSB9 LApAQCAtMTQyMyw5ICsxNDIyLDYgQEAgZW5hYmxlX2Zkb19vcHRpbWl6YXRp b25zIChzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHMsCiAgIGlmICghb3B0c19z ZXQtPnhfZmxhZ19pcGFfY3BfY2xvbmUKICAgICAgICYmIHZhbHVlICYmIG9w dHMtPnhfZmxhZ19pcGFfY3ApCiAgICAgb3B0cy0+eF9mbGFnX2lwYV9jcF9j bG9uZSA9IHZhbHVlOwotICBpZiAoIW9wdHNfc2V0LT54X2ZsYWdfaXBhX2Nw X2FsaWdubWVudAotICAgICAgJiYgdmFsdWUgJiYgb3B0cy0+eF9mbGFnX2lw YV9jcCkKLSAgICBvcHRzLT54X2ZsYWdfaXBhX2NwX2FsaWdubWVudCA9IHZh bHVlOwogICBpZiAoIW9wdHNfc2V0LT54X2ZsYWdfaXBhX2JpdF9jcAogICAg ICAgJiYgdmFsdWUgJiYgb3B0cy0+eF9mbGFnX2lwYV9jcCkKICAgICBvcHRz LT54X2ZsYWdfaXBhX2JpdF9jcCA9IHZhbHVlOwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3Byb3BhbGlnbi0xLmMgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy9pcGEvcHJvcGFsaWduLTEuYwppbmRleCBmMzQ1NTJj Li4xNDkxZGU4IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9p cGEvcHJvcGFsaWduLTEuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9p cGEvcHJvcGFsaWduLTEuYwpAQCAtMjcsNSArMjcsNSBAQCBiYXIgKHZvaWQp CiB9CiAKIAotLyogeyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAgIkFkanVz dGluZyBhbGlnbm1lbnQgb2YgcGFyYW0iICJjcCIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAiQWRqdXN0aW5nIGFsaWduIiAiY3Ai IH0gfSAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAi ZmFpbF90aGVfdGVzdCIgIm9wdGltaXplZCIgfSB9ICovCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvcHJvcGFsaWduLTIuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wYWxpZ24tMi5jCmluZGV4IDY3 YjE0OWEuLjUxNzk5YzcgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2lwYS9wcm9wYWxpZ24tMi5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2lwYS9wcm9wYWxpZ24tMi5jCkBAIC01Myw1ICs1Myw1IEBAIGJhcjIg KHZvaWQpCiAgIHRocm91Z2ggKGMuYnVmKTsKIH0KIAotLyogeyBkZy1maW5h bCB7IHNjYW4taXBhLWR1bXAgIkFkanVzdGluZyBhbGlnbm1lbnQgb2YgcGFy YW0iICJjcCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVt cCAiQWRqdXN0aW5nIGFsaWduIiAiY3AiIH0gfSAqLwogLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLW5vdCAiZmFpbF90aGVfdGVzdCIgIm9wdGlt aXplZCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5k Zy9pcGEvcHJvcGFsaWduLTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lw YS9wcm9wYWxpZ24tMy5jCmluZGV4IGQzYmMyYzQuLjRmNWRmNGEgMTAwNjQ0 Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wYWxpZ24tMy5j CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wYWxpZ24tMy5j CkBAIC0xLDUgKzEsNSBAQAogLyogeyBkZy1kbyBjb21waWxlIH0gKi8KLS8q IHsgZGctb3B0aW9ucyAiLU8yIC1mbm8taXBhLWNwLWFsaWdubWVudCAtZm5v LWVhcmx5LWlubGluaW5nIC1mZHVtcC1pcGEtY3AgLWZkdW1wLXRyZWUtb3B0 aW1pemVkIiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLWlwYS1i aXQtY3AgLWZuby1lYXJseS1pbmxpbmluZyAtZmR1bXAtaXBhLWNwIC1mZHVt cC10cmVlLW9wdGltaXplZCIgfSAqLwogLyogeyBkZy1za2lwLWlmICJObyBh bGlnbm1lbnQgcmVzdHJpY3Rpb25zIiB7IHsgISBuYXR1cmFsX2FsaWdubWVu dF8zMiB9ICYmIHsgISBuYXR1cmFsX2FsaWdubWVudF82NCB9IH0gfSAqLwog CiAjaW5jbHVkZSA8c3RkaW50Lmg+CkBAIC01Myw1ICs1Myw1IEBAIGJhcjIg KHZvaWQpCiAgIHRocm91Z2ggKGMuYnVmKTsKIH0KIAotLyogeyBkZy1maW5h bCB7IHNjYW4taXBhLWR1bXAtbm90ICJBZGp1c3RpbmcgYWxpZ25tZW50IG9m IHBhcmFtIiAiY3AiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4taXBh LWR1bXAtbm90ICJhbGlnbjoiICJjcCIgfSB9ICovCiAvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAgImZhaWxfdGhlX3Rlc3QiICJvcHRpbWl6ZWQi IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBh L3Byb3BhbGlnbi00LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvcHJv cGFsaWduLTQuYwppbmRleCBiNjgwODEzLi5iZDMyYmYwIDEwMDY0NAotLS0g YS9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvcHJvcGFsaWduLTQuYworKysg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvcHJvcGFsaWduLTQuYwpAQCAt MjAsNCArMjAsNCBAQCBtYWluKCkKICAgdGVzdCAoJmFhWzNdKTsKICAgcmV0 dXJuIDA7CiB9Ci0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAiQWxp Z25tZW50IDgsIG1pc2FsaWdubWVudCA0IiAgImNwIiAgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAiYWxpZ246IDgsIG1pc2FsaWdu OiA0IiAgImNwIiAgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy5kZy9pcGEvcHJvcGFsaWduLTUuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2lwYS9wcm9wYWxpZ24tNS5jCmluZGV4IGYyY2Y2MDAuLjY4ZTU3ZGEg MTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wYWxp Z24tNS5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS9wcm9wYWxp Z24tNS5jCkBAIC0yMCw0ICsyMCw0IEBAIG1haW4oKQogICB0ZXN0ICgmYmIp OwogICByZXR1cm4gMDsKIH0KLS8qIHsgZGctZmluYWwgeyBzY2FuLWlwYS1k dW1wICJBbGlnbm1lbnQgMiIgICJjcCIgIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4taXBhLWR1bXAgImFsaWduOiAyIiAgImNwIiAgfSB9ICovCg== --001a114457b007b744053e2b1965--