From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26601 invoked by alias); 28 Dec 2010 08:02:24 -0000 Received: (qmail 26582 invoked by uid 22791); 28 Dec 2010 08:02:19 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RFC_ABUSE_POST,TW_BJ X-Spam-Check-By: sourceware.org Received: from mail-ww0-f43.google.com (HELO mail-ww0-f43.google.com) (74.125.82.43) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 28 Dec 2010 08:02:10 +0000 Received: by wwi17 with SMTP id 17so8871547wwi.12 for ; Tue, 28 Dec 2010 00:02:07 -0800 (PST) Received: by 10.216.172.212 with SMTP id t62mr13748671wel.60.1293523327836; Tue, 28 Dec 2010 00:02:07 -0800 (PST) MIME-Version: 1.0 Received: by 10.216.182.206 with HTTP; Tue, 28 Dec 2010 00:01:47 -0800 (PST) In-Reply-To: <201012271309.59475.pedro@codesourcery.com> References: <201012221126.57873.pedro@codesourcery.com> <201012271309.59475.pedro@codesourcery.com> From: Hui Zhu Date: Tue, 28 Dec 2010 09:52:00 -0000 Message-ID: Subject: Re: [RFA/RFC] mips tracepoint: fix Bug 12013 To: Pedro Alves Cc: gdb-patches@sourceware.org, Kevin Buettner Content-Type: multipart/mixed; boundary=0016367b615876e308049873de5a X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-12/txt/msg00498.txt.bz2 --0016367b615876e308049873de5a Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 7566 Thanks for your help Pedro. On Mon, Dec 27, 2010 at 21:09, Pedro Alves wrote: > On Saturday 25 December 2010 17:09:21, Hui Zhu wrote: >> On Wed, Dec 22, 2010 at 19:26, Pedro Alves wrot= e: > ... >> I make a patch according to your comments. > > Thanks! =A0I'm liking this. =A0Would be super cool to have these > implemented on x86/x86_64 as well. When this patch ok, I will post a separate patch for it. > >> It add to callback in gdbarch. =A0They are gdbarch_ax_pseudo_reg and >> gdbarch_ax_pseudo_reg_mask. >> >> gdbarch_ax_pseudo_reg will be called by ax_reg. =A0It assemble code to >> push the value of pseudo register number REG on the stack. >> gdbarch_ax_pseudo_reg_mask will be called by ax_reg_mask. It add >> pseudo register REG to the register mask for expression AX. > > Well, not to the register mask. =A0It really isn't garanteed > that a pseudo register maps to a raw register. =A0It could > map to some value stored at some memory address, so the new > callback may do other things than flipping a bit > in the raw registers to collect mask (hence the ax_reg_mask function > name). =A0I can see why you named the callbacks like that, and I'll appro= ve > the patch with such names anyway, though I'd prefer naming them > something more descriptive like gdbarch_ax_pseudo_register_collect / > gdbarch_ax_pseudo_register_push_stack. =A0E.g., > > =A0# Assemble agent expression bytecode to collect pseudo-register REG. > =A0# Return -1 if something goes wrong, 0 otherwise. > =A0M:int:ax_pseudo_register_collect:struct agent_expr *ax, int reg:ax, reg > > =A0# Assemble agent expression bytecode to push the value of pseudo-regis= ter > =A0# REG on the interpreter stack. > =A0# Return -1 if something goes wrong, 0 otherwise. > =A0M:int:ax_pseudo_register_push_stack:struct agent_expr *ax, int reg:ax,= reg Agree with you. These names are more better than what I use. I will use t= hem. > >> 2010-12-26 =A0Hui Zhu =A0 >> >> =A0 =A0 =A0 * ax-gdb.c (gen_expr): Remove pseudo-register check code. >> =A0 =A0 =A0 * ax-general.c (user-regs.h): New include. >> =A0 =A0 =A0 (ax_reg): Call gdbarch_ax_pseudo_reg. >> =A0 =A0 =A0 (ax_reg_mask): Call gdbarch_ax_pseudo_reg_mask. >> =A0 =A0 =A0 * gdbarch.sh (ax_pseudo_reg, ax_pseudo_reg_mask): new callba= ck. > > Capitalize, plural: "New callbacks." > >> =A0 =A0 =A0 * mips-tdep.c (ax.h): New include. >> =A0 =A0 =A0 (mips_ax_pseudo_reg, mips_ax_pseudo_reg_mask): New function. > > functions. > >> =A0 =A0 =A0 (mips_gdbarch_init): Set mips_ax_pseudo_reg and >> =A0 =A0 =A0 mips_ax_pseudo_reg_mask. > > You need to mention that gdbarch.c and gdbarch.h were regenerated. > >> =A0/* Given an agent expression AX, fill in requirements and other descr= iptive >> --- a/gdbarch.sh >> +++ b/gdbarch.sh > ... >> @@ -919,6 +928,7 @@ struct target_desc; >> =A0struct displaced_step_closure; >> =A0struct core_regset_section; >> =A0struct syscall; >> +struct agent_expr; > > You forgot to mention this in the changelog. > >> +static int >> +mips_ax_pseudo_reg (struct gdbarch *gdbarch, struct agent_expr *ax, int= reg) >> +{ >> + =A0int rawnum =3D reg % gdbarch_num_regs (gdbarch); >> + =A0gdb_assert (reg >=3D gdbarch_num_regs (gdbarch) >> + =A0 =A0 =A0 =A0 =A0 && reg < 2 * gdbarch_num_regs (gdbarch)); >> + =A0if (register_size (gdbarch, rawnum) >=3D register_size (gdbarch, re= g)) >> + =A0 =A0{ >> + =A0 =A0 =A0ax_reg (ax, rawnum); >> + >> + =A0 =A0 =A0if (register_size (gdbarch, rawnum) > register_size (gdbarc= h, reg)) >> + =A0 =A0 =A0 =A0{ >> + =A0 =A0 =A0 if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p >> + =A0 =A0 =A0 =A0 =A0 && gdbarch_byte_order (gdbarch) =3D=3D BFD_ENDIAN_= BIG) >> + =A0 =A0 =A0 =A0 { >> + =A0 =A0 =A0 =A0 =A0 ax->buf[ax->len] =3D aop_const8; >> + =A0 =A0 =A0 =A0 =A0 ax->buf[ax->len + 1] =3D 32; >> + =A0 =A0 =A0 =A0 =A0 ax->buf[ax->len + 2] =3D aop_rsh_unsigned; >> + =A0 =A0 =A0 =A0 =A0 ax->len +=3D 3; >> + =A0 =A0 =A0 =A0 } >> + =A0 =A0 =A0 else >> + =A0 =A0 =A0 =A0 { >> + =A0 =A0 =A0 =A0 =A0 ax->buf[ax->len] =3D aop_const32; >> + =A0 =A0 =A0 =A0 =A0 ax->buf[ax->len + 1] =3D 0xff; >> + =A0 =A0 =A0 =A0 =A0 ax->buf[ax->len + 2] =3D 0xff; >> + =A0 =A0 =A0 =A0 =A0 ax->buf[ax->len + 3] =3D 0xff; >> + =A0 =A0 =A0 =A0 =A0 ax->buf[ax->len + 4] =3D 0xff; >> + =A0 =A0 =A0 =A0 =A0 ax->buf[ax->len + 5] =3D aop_bit_and; >> + =A0 =A0 =A0 =A0 =A0 ax->len +=3D 6; > > Hmm, I'm not sure, but don't you need to sign extend? > mips-tdep.c:mips_pseudo_register_read treats this as signed. > > Why do you apply the "and 0xffffffff" logic when > mips64_transfers_32bit_regs_p is false? I change this part to: if (register_size (gdbarch, rawnum) > register_size (gdbarch, reg)) { if (!gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p || gdbarch_byte_order (gdbarch) !=3D BFD_ENDIAN_BIG) { ax_const_l (ax, 32); ax_simple (ax, aop_lsh); } ax_const_l (ax, 32); ax_simple (ax, aop_rsh_signed); } If mips64_transfers_32bit_regs_p is false or arch is little endian, use the low 32bit. If not, use the the high 32bit. Do you think it is OK? > >> + =A0 =A0 =A0 =A0 } > > Please use the functions in ax-general.c that generate > the bytecode instead of writing to the bytecode buffer > directly (and forgetting to ensure there's enough room in > the buffer): ax_const_l/ax_simple, etc. > > > The patch you posted got line-wrapped/mangled, and I couldn't > apply it even after trying to manually fix it. =A0Can you please > make the necessary tweaks to your email client to make that > not happen? =A0(Me, to send patches with gmail, I find it simpler > to use an email client / SMTP than using gmail's web interface) > So sorry about that. I have some net issue so I cannot use gmail with SMTP sometimes. So I use the attachment to send the patch. Please help me review the new patch. Thanks, Hui 2010-12-28 Hui Zhu * gdbarch.sh (ax_pseudo_register_collect, ax_pseudo_register_push_stack): new callbacks. (agent_expr): New struct. * gdbarch.c (gdbarch): Add ax_pseudo_register_collect and ax_pseudo_register_push_stack. (startup_gdbarch): Add 0 for ax_pseudo_register_collect and ax_pseudo_register_push_stack. (verify_gdbarch): Add comments for ax_pseudo_register_collect and ax_pseudo_register_push_stack. (gdbarch_dump): Add fprintf_unfiltered for ax_pseudo_register_collect and ax_pseudo_register_push_stack. (gdbarch_ax_pseudo_register_collect_p, gdbarch_ax_pseudo_register_collect, set_gdbarch_ax_pseudo_register_collect, gdbarch_ax_pseudo_register_push_stack_p, gdbarch_ax_pseudo_register_push_stack, set_gdbarch_ax_pseudo_register_push_stack): New functions. * gdbarch.h (agent_expr): New struct. (gdbarch_ax_pseudo_register_collect_p, gdbarch_ax_pseudo_register_collect, set_gdbarch_ax_pseudo_register_collect, gdbarch_ax_pseudo_register_push_stack_p, gdbarch_ax_pseudo_register_push_stack, set_gdbarch_ax_pseudo_register_push_stack): New externs. (gdbarch_ax_pseudo_register_collect_ftype, gdbarch_ax_pseudo_register_push_stack_ftype): New typedeies. * ax-gdb.c (gen_expr): Remove pseudo-register check code. * ax-general.c (user-regs.h): New include. (ax_reg): Call gdbarch_ax_pseudo_register_push_stack. (ax_reg_mask): Call gdbarch_ax_pseudo_register_collect. * mips-tdep.c (ax.h): New include. (mips_ax_pseudo_register_collect, mips_ax_pseudo_register_push_stack): New functions. (mips_gdbarch_init): Set mips_ax_pseudo_register_collect and mips_ax_pseudo_register_push_stack. --0016367b615876e308049873de5a Content-Type: text/plain; charset=US-ASCII; name="trace-pseudo.txt" Content-Disposition: attachment; filename="trace-pseudo.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gi8ibmyd0 Content-length: 18073 LS0tCiBheC1nZGIuYyAgICAgfCAgICA0IC0tLQogYXgtZ2VuZXJhbC5jIHwg ICA3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tLQogZ2RiYXJjaC5jICAgIHwgICA2NiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIGdkYmFyY2guaCAgICB8ICAgMjAgKysrKysrKysrKysrKysrCiBnZGJh cmNoLnNoICAgfCAgIDEwICsrKysrKysKIG1pcHMtdGRlcC5jICB8ICAgNDgg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNiBmaWxl cyBjaGFuZ2VkLCAxOTcgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0p CgotLS0gYS9heC1nZGIuYworKysgYi9heC1nZGIuYwpAQCAtMTk3OCwxMCAr MTk3OCw2IEBAIGdlbl9leHByIChzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwLCB1 bmlvbgogCWlmIChyZWcgPT0gLTEpCiAJICBpbnRlcm5hbF9lcnJvciAoX19G SUxFX18sIF9fTElORV9fLAogCQkJICBfKCJSZWdpc3RlciAkJXMgbm90IGF2 YWlsYWJsZSIpLCBuYW1lKTsKLQlpZiAocmVnID49IGdkYmFyY2hfbnVtX3Jl Z3MgKGV4cC0+Z2RiYXJjaCkpCi0JICBlcnJvciAoXygiJyVzJyBpcyBhIHBz ZXVkby1yZWdpc3RlcjsgIgotCQkgICAiR0RCIGNhbm5vdCB5ZXQgdHJhY2Ug cHNldWRvcmVnaXN0ZXIgY29udGVudHMuIiksCi0JCSBuYW1lKTsKIAl2YWx1 ZS0+a2luZCA9IGF4c19sdmFsdWVfcmVnaXN0ZXI7CiAJdmFsdWUtPnUucmVn ID0gcmVnOwogCXZhbHVlLT50eXBlID0gcmVnaXN0ZXJfdHlwZSAoZXhwLT5n ZGJhcmNoLCByZWcpOwotLS0gYS9heC1nZW5lcmFsLmMKKysrIGIvYXgtZ2Vu ZXJhbC5jCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAidmFsdWUuaCIK ICNpbmNsdWRlICJnZGJfc3RyaW5nLmgiCiAKKyNpbmNsdWRlICJ1c2VyLXJl Z3MuaCIKKwogc3RhdGljIHZvaWQgZ3Jvd19leHByIChzdHJ1Y3QgYWdlbnRf ZXhwciAqeCwgaW50IG4pOwogCiBzdGF0aWMgdm9pZCBhcHBlbmRfY29uc3Qg KHN0cnVjdCBhZ2VudF9leHByICp4LCBMT05HRVNUIHZhbCwgaW50IG4pOwpA QCAtMjcyLDE0ICsyNzQsMjggQEAgYXhfY29uc3RfZCAoc3RydWN0IGFnZW50 X2V4cHIgKngsIExPTkdFUwogdm9pZAogYXhfcmVnIChzdHJ1Y3QgYWdlbnRf ZXhwciAqeCwgaW50IHJlZykKIHsKLSAgLyogTWFrZSBzdXJlIHRoZSByZWdp c3RlciBudW1iZXIgaXMgaW4gcmFuZ2UuICAqLwotICBpZiAocmVnIDwgMCB8 fCByZWcgPiAweGZmZmYpCi0gICAgZXJyb3IgKF8oIkdEQiBidWc6IGF4LWdl bmVyYWwuYyAoYXhfcmVnKTogcmVnaXN0ZXIgbnVtYmVyIG91dCBvZiByYW5n ZSIpKTsKLSAgZ3Jvd19leHByICh4LCAzKTsKLSAgeC0+YnVmW3gtPmxlbl0g PSBhb3BfcmVnOwotICB4LT5idWZbeC0+bGVuICsgMV0gPSAocmVnID4+IDgp ICYgMHhmZjsKLSAgeC0+YnVmW3gtPmxlbiArIDJdID0gKHJlZykgJiAweGZm OwotICB4LT5sZW4gKz0gMzsKKyAgaWYgKHJlZyA+PSBnZGJhcmNoX251bV9y ZWdzICh4LT5nZGJhcmNoKSkKKyAgICB7CisgICAgICAvKiBUaGlzIGlzIGEg cHNldWRvLXJlZ2lzdGVyLiAgKi8KKyAgICAgIGlmICghZ2RiYXJjaF9heF9w c2V1ZG9fcmVnaXN0ZXJfcHVzaF9zdGFja19wICh4LT5nZGJhcmNoKSkKKwll cnJvciAoXygiJyVzJyBpcyBhIHBzZXVkby1yZWdpc3RlcjsgIgorCQkgIkdE QiBjYW5ub3QgeWV0IHRyYWNlIGl0cyBjb250ZW50cy4iKSwKKwkgICAgICAg dXNlcl9yZWdfbWFwX3JlZ251bV90b19uYW1lICh4LT5nZGJhcmNoLCByZWcp KTsKKyAgICAgIGlmIChnZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rlcl9wdXNo X3N0YWNrICh4LT5nZGJhcmNoLCB4LCByZWcpKQorCWVycm9yIChfKCJUcmFj ZSAnJXMnIGZhaWxlZC4iKSwKKwkgICAgICAgdXNlcl9yZWdfbWFwX3JlZ251 bV90b19uYW1lICh4LT5nZGJhcmNoLCByZWcpKTsKKyAgICB9CisgIGVsc2UK KyAgICB7CisgICAgICAvKiBNYWtlIHN1cmUgdGhlIHJlZ2lzdGVyIG51bWJl ciBpcyBpbiByYW5nZS4gICovCisgICAgICBpZiAocmVnIDwgMCB8fCByZWcg PiAweGZmZmYpCisgICAgICAgIGVycm9yIChfKCJHREIgYnVnOiBheC1nZW5l cmFsLmMgKGF4X3JlZyk6IHJlZ2lzdGVyIG51bWJlciBvdXQgb2YgcmFuZ2Ui KSk7CisgICAgICBncm93X2V4cHIgKHgsIDMpOworICAgICAgeC0+YnVmW3gt Pmxlbl0gPSBhb3BfcmVnOworICAgICAgeC0+YnVmW3gtPmxlbiArIDFdID0g KHJlZyA+PiA4KSAmIDB4ZmY7CisgICAgICB4LT5idWZbeC0+bGVuICsgMl0g PSAocmVnKSAmIDB4ZmY7CisgICAgICB4LT5sZW4gKz0gMzsKKyAgICB9CiB9 CiAKIC8qIEFzc2VtYmxlIGNvZGUgdG8gb3BlcmF0ZSBvbiBhIHRyYWNlIHN0 YXRlIHZhcmlhYmxlLiAgKi8KQEAgLTQxMywyMyArNDI5LDM4IEBAIGF4X3By aW50IChzdHJ1Y3QgdWlfZmlsZSAqZiwgc3RydWN0IGFnZW4KIHZvaWQKIGF4 X3JlZ19tYXNrIChzdHJ1Y3QgYWdlbnRfZXhwciAqYXgsIGludCByZWcpCiB7 Ci0gIGludCBieXRlID0gcmVnIC8gODsKLQotICAvKiBHcm93IHRoZSBiaXQg bWFzayBpZiBuZWNlc3NhcnkuICAqLwotICBpZiAoYnl0ZSA+PSBheC0+cmVn X21hc2tfbGVuKQorICBpZiAocmVnID49IGdkYmFyY2hfbnVtX3JlZ3MgKGF4 LT5nZGJhcmNoKSkKICAgICB7Ci0gICAgICAvKiBJdCdzIG5vdCBhcHByb3By aWF0ZSB0byBkb3VibGUgaGVyZS4gIFRoaXMgaXNuJ3QgYQotCSBzdHJpbmcg YnVmZmVyLiAgKi8KLSAgICAgIGludCBuZXdfbGVuID0gYnl0ZSArIDE7Ci0g ICAgICB1bnNpZ25lZCBjaGFyICpuZXdfcmVnX21hc2sgPSB4cmVhbGxvYyAo YXgtPnJlZ19tYXNrLAotCQkJCQkgICAgICBuZXdfbGVuICogc2l6ZW9mIChh eC0+cmVnX21hc2tbMF0pKTsKLSAgICAgIG1lbXNldCAobmV3X3JlZ19tYXNr ICsgYXgtPnJlZ19tYXNrX2xlbiwgMCwKLQkgICAgICAobmV3X2xlbiAtIGF4 LT5yZWdfbWFza19sZW4pICogc2l6ZW9mIChheC0+cmVnX21hc2tbMF0pKTsK LSAgICAgIGF4LT5yZWdfbWFza19sZW4gPSBuZXdfbGVuOwotICAgICAgYXgt PnJlZ19tYXNrID0gbmV3X3JlZ19tYXNrOworICAgICAgLyogVGhpcyBpcyBh IHBzZXVkby1yZWdpc3Rlci4gICovCisgICAgICBpZiAoIWdkYmFyY2hfYXhf cHNldWRvX3JlZ2lzdGVyX2NvbGxlY3RfcCAoYXgtPmdkYmFyY2gpKQorCWVy cm9yIChfKCInJXMnIGlzIGEgcHNldWRvLXJlZ2lzdGVyOyAiCisJCSAiR0RC IGNhbm5vdCB5ZXQgdHJhY2UgaXRzIGNvbnRlbnRzLiIpLAorCSAgICAgICB1 c2VyX3JlZ19tYXBfcmVnbnVtX3RvX25hbWUgKGF4LT5nZGJhcmNoLCByZWcp KTsKKyAgICAgIGlmIChnZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rlcl9jb2xs ZWN0IChheC0+Z2RiYXJjaCwgYXgsIHJlZykpCisJZXJyb3IgKF8oIlRyYWNl ICclcycgZmFpbGVkLiIpLAorCSAgICAgICB1c2VyX3JlZ19tYXBfcmVnbnVt X3RvX25hbWUgKGF4LT5nZGJhcmNoLCByZWcpKTsKICAgICB9CisgIGVsc2UK KyAgICB7CisgICAgICBpbnQgYnl0ZSA9IHJlZyAvIDg7CiAKLSAgYXgtPnJl Z19tYXNrW2J5dGVdIHw9IDEgPDwgKHJlZyAlIDgpOworICAgICAgLyogR3Jv dyB0aGUgYml0IG1hc2sgaWYgbmVjZXNzYXJ5LiAgKi8KKyAgICAgIGlmIChi eXRlID49IGF4LT5yZWdfbWFza19sZW4pCisgICAgICAgIHsKKyAgICAgICAg ICAvKiBJdCdzIG5vdCBhcHByb3ByaWF0ZSB0byBkb3VibGUgaGVyZS4gIFRo aXMgaXNuJ3QgYQorCSAgICAgc3RyaW5nIGJ1ZmZlci4gICovCisgICAgICAg ICAgaW50IG5ld19sZW4gPSBieXRlICsgMTsKKyAgICAgICAgICB1bnNpZ25l ZCBjaGFyICpuZXdfcmVnX21hc2sgPSB4cmVhbGxvYyAoYXgtPnJlZ19tYXNr LAorCQkJCQkgICAgICAgICAgbmV3X2xlbgorCQkJCQkgICAgICAgICAgKiBz aXplb2YgKGF4LT5yZWdfbWFza1swXSkpOworICAgICAgICAgIG1lbXNldCAo bmV3X3JlZ19tYXNrICsgYXgtPnJlZ19tYXNrX2xlbiwgMCwKKwkgICAgICAg ICAgKG5ld19sZW4gLSBheC0+cmVnX21hc2tfbGVuKSAqIHNpemVvZiAoYXgt PnJlZ19tYXNrWzBdKSk7CisgICAgICAgICAgYXgtPnJlZ19tYXNrX2xlbiA9 IG5ld19sZW47CisgICAgICAgICAgYXgtPnJlZ19tYXNrID0gbmV3X3JlZ19t YXNrOworICAgICAgICB9CisKKyAgICAgIGF4LT5yZWdfbWFza1tieXRlXSB8 PSAxIDw8IChyZWcgJSA4KTsKKyAgICB9CiB9CiAKIC8qIEdpdmVuIGFuIGFn ZW50IGV4cHJlc3Npb24gQVgsIGZpbGwgaW4gcmVxdWlyZW1lbnRzIGFuZCBv dGhlciBkZXNjcmlwdGl2ZQotLS0gYS9nZGJhcmNoLmMKKysrIGIvZ2RiYXJj aC5jCkBAIC0xNjQsNiArMTY0LDggQEAgc3RydWN0IGdkYmFyY2gKICAgZ2Ri YXJjaF9wc2V1ZG9fcmVnaXN0ZXJfd3JpdGVfZnR5cGUgKnBzZXVkb19yZWdp c3Rlcl93cml0ZTsKICAgaW50IG51bV9yZWdzOwogICBpbnQgbnVtX3BzZXVk b19yZWdzOworICBnZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rlcl9jb2xsZWN0 X2Z0eXBlICpheF9wc2V1ZG9fcmVnaXN0ZXJfY29sbGVjdDsKKyAgZ2RiYXJj aF9heF9wc2V1ZG9fcmVnaXN0ZXJfcHVzaF9zdGFja19mdHlwZSAqYXhfcHNl dWRvX3JlZ2lzdGVyX3B1c2hfc3RhY2s7CiAgIGludCBzcF9yZWdudW07CiAg IGludCBwY19yZWdudW07CiAgIGludCBwc19yZWdudW07CkBAIC0zMTQsNiAr MzE2LDggQEAgc3RydWN0IGdkYmFyY2ggc3RhcnR1cF9nZGJhcmNoID0KICAg MCwgIC8qIHBzZXVkb19yZWdpc3Rlcl93cml0ZSAqLwogICAwLCAgLyogbnVt X3JlZ3MgKi8KICAgMCwgIC8qIG51bV9wc2V1ZG9fcmVncyAqLworICAwLCAg LyogYXhfcHNldWRvX3JlZ2lzdGVyX2NvbGxlY3QgKi8KKyAgMCwgIC8qIGF4 X3BzZXVkb19yZWdpc3Rlcl9wdXNoX3N0YWNrICovCiAgIC0xLCAgLyogc3Bf cmVnbnVtICovCiAgIC0xLCAgLyogcGNfcmVnbnVtICovCiAgIC0xLCAgLyog cHNfcmVnbnVtICovCkBAIC01OTQsNiArNTk4LDggQEAgdmVyaWZ5X2dkYmFy Y2ggKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKQogICBpZiAoZ2RiYXJjaC0+ bnVtX3JlZ3MgPT0gLTEpCiAgICAgZnByaW50Zl91bmZpbHRlcmVkIChsb2cs ICJcblx0bnVtX3JlZ3MiKTsKICAgLyogU2tpcCB2ZXJpZnkgb2YgbnVtX3Bz ZXVkb19yZWdzLCBpbnZhbGlkX3AgPT0gMCAqLworICAvKiBTa2lwIHZlcmlm eSBvZiBheF9wc2V1ZG9fcmVnaXN0ZXJfY29sbGVjdCwgaGFzIHByZWRpY2F0 ZSAqLworICAvKiBTa2lwIHZlcmlmeSBvZiBheF9wc2V1ZG9fcmVnaXN0ZXJf cHVzaF9zdGFjaywgaGFzIHByZWRpY2F0ZSAqLwogICAvKiBTa2lwIHZlcmlm eSBvZiBzcF9yZWdudW0sIGludmFsaWRfcCA9PSAwICovCiAgIC8qIFNraXAg dmVyaWZ5IG9mIHBjX3JlZ251bSwgaW52YWxpZF9wID09IDAgKi8KICAgLyog U2tpcCB2ZXJpZnkgb2YgcHNfcmVnbnVtLCBpbnZhbGlkX3AgPT0gMCAqLwpA QCAtNzYxLDYgKzc2NywxOCBAQCBnZGJhcmNoX2R1bXAgKHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoLCBzCiAgICAgICAgICAgICAgICAgICAgICAgImdkYmFy Y2hfZHVtcDogYXV0b193aWRlX2NoYXJzZXQgPSA8JXM+XG4iLAogICAgICAg ICAgICAgICAgICAgICAgIGhvc3RfYWRkcmVzc190b19zdHJpbmcgKGdkYmFy Y2gtPmF1dG9fd2lkZV9jaGFyc2V0KSk7CiAgIGZwcmludGZfdW5maWx0ZXJl ZCAoZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAiZ2RiYXJjaF9kdW1w OiBnZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rlcl9jb2xsZWN0X3AoKSA9ICVk XG4iLAorICAgICAgICAgICAgICAgICAgICAgIGdkYmFyY2hfYXhfcHNldWRv X3JlZ2lzdGVyX2NvbGxlY3RfcCAoZ2RiYXJjaCkpOworICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgImdkYmFy Y2hfZHVtcDogYXhfcHNldWRvX3JlZ2lzdGVyX2NvbGxlY3QgPSA8JXM+XG4i LAorICAgICAgICAgICAgICAgICAgICAgIGhvc3RfYWRkcmVzc190b19zdHJp bmcgKGdkYmFyY2gtPmF4X3BzZXVkb19yZWdpc3Rlcl9jb2xsZWN0KSk7Cisg IGZwcmludGZfdW5maWx0ZXJlZCAoZmlsZSwKKyAgICAgICAgICAgICAgICAg ICAgICAiZ2RiYXJjaF9kdW1wOiBnZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rl cl9wdXNoX3N0YWNrX3AoKSA9ICVkXG4iLAorICAgICAgICAgICAgICAgICAg ICAgIGdkYmFyY2hfYXhfcHNldWRvX3JlZ2lzdGVyX3B1c2hfc3RhY2tfcCAo Z2RiYXJjaCkpOworICBmcHJpbnRmX3VuZmlsdGVyZWQgKGZpbGUsCisgICAg ICAgICAgICAgICAgICAgICAgImdkYmFyY2hfZHVtcDogYXhfcHNldWRvX3Jl Z2lzdGVyX3B1c2hfc3RhY2sgPSA8JXM+XG4iLAorICAgICAgICAgICAgICAg ICAgICAgIGhvc3RfYWRkcmVzc190b19zdHJpbmcgKGdkYmFyY2gtPmF4X3Bz ZXVkb19yZWdpc3Rlcl9wdXNoX3N0YWNrKSk7CisgIGZwcmludGZfdW5maWx0 ZXJlZCAoZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAiZ2RiYXJjaF9k dW1wOiBiZWxpZXZlX3BjY19wcm9tb3Rpb24gPSAlc1xuIiwKICAgICAgICAg ICAgICAgICAgICAgICBwbG9uZ2VzdCAoZ2RiYXJjaC0+YmVsaWV2ZV9wY2Nf cHJvbW90aW9uKSk7CiAgIGZwcmludGZfdW5maWx0ZXJlZCAoZmlsZSwKQEAg LTE3NDEsNiArMTc1OSw1NCBAQCBzZXRfZ2RiYXJjaF9udW1fcHNldWRvX3Jl Z3MgKHN0cnVjdCBnZGJhCiB9CiAKIGludAorZ2RiYXJjaF9heF9wc2V1ZG9f cmVnaXN0ZXJfY29sbGVjdF9wIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkK K3sKKyAgZ2RiX2Fzc2VydCAoZ2RiYXJjaCAhPSBOVUxMKTsKKyAgcmV0dXJu IGdkYmFyY2gtPmF4X3BzZXVkb19yZWdpc3Rlcl9jb2xsZWN0ICE9IE5VTEw7 Cit9CisKK2ludAorZ2RiYXJjaF9heF9wc2V1ZG9fcmVnaXN0ZXJfY29sbGVj dCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCBhZ2VudF9leHBy ICpheCwgaW50IHJlZykKK3sKKyAgZ2RiX2Fzc2VydCAoZ2RiYXJjaCAhPSBO VUxMKTsKKyAgZ2RiX2Fzc2VydCAoZ2RiYXJjaC0+YXhfcHNldWRvX3JlZ2lz dGVyX2NvbGxlY3QgIT0gTlVMTCk7CisgIGlmIChnZGJhcmNoX2RlYnVnID49 IDIpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiZ2Ri YXJjaF9heF9wc2V1ZG9fcmVnaXN0ZXJfY29sbGVjdCBjYWxsZWRcbiIpOwor ICByZXR1cm4gZ2RiYXJjaC0+YXhfcHNldWRvX3JlZ2lzdGVyX2NvbGxlY3Qg KGdkYmFyY2gsIGF4LCByZWcpOworfQorCit2b2lkCitzZXRfZ2RiYXJjaF9h eF9wc2V1ZG9fcmVnaXN0ZXJfY29sbGVjdCAoc3RydWN0IGdkYmFyY2ggKmdk YmFyY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2RiYXJjaF9heF9wc2V1ZG9fcmVnaXN0ZXJfY29sbGVjdF9mdHlwZSBh eF9wc2V1ZG9fcmVnaXN0ZXJfY29sbGVjdCkKK3sKKyAgZ2RiYXJjaC0+YXhf cHNldWRvX3JlZ2lzdGVyX2NvbGxlY3QgPSBheF9wc2V1ZG9fcmVnaXN0ZXJf Y29sbGVjdDsKK30KKworaW50CitnZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rl cl9wdXNoX3N0YWNrX3AgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKQorewor ICBnZGJfYXNzZXJ0IChnZGJhcmNoICE9IE5VTEwpOworICByZXR1cm4gZ2Ri YXJjaC0+YXhfcHNldWRvX3JlZ2lzdGVyX3B1c2hfc3RhY2sgIT0gTlVMTDsK K30KKworaW50CitnZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rlcl9wdXNoX3N0 YWNrIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IGFnZW50X2V4 cHIgKmF4LCBpbnQgcmVnKQoreworICBnZGJfYXNzZXJ0IChnZGJhcmNoICE9 IE5VTEwpOworICBnZGJfYXNzZXJ0IChnZGJhcmNoLT5heF9wc2V1ZG9fcmVn aXN0ZXJfcHVzaF9zdGFjayAhPSBOVUxMKTsKKyAgaWYgKGdkYmFyY2hfZGVi dWcgPj0gMikKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2cs ICJnZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rlcl9wdXNoX3N0YWNrIGNhbGxl ZFxuIik7CisgIHJldHVybiBnZGJhcmNoLT5heF9wc2V1ZG9fcmVnaXN0ZXJf cHVzaF9zdGFjayAoZ2RiYXJjaCwgYXgsIHJlZyk7Cit9CisKK3ZvaWQKK3Nl dF9nZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rlcl9wdXNoX3N0YWNrIChzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rl cl9wdXNoX3N0YWNrX2Z0eXBlIGF4X3BzZXVkb19yZWdpc3Rlcl9wdXNoX3N0 YWNrKQoreworICBnZGJhcmNoLT5heF9wc2V1ZG9fcmVnaXN0ZXJfcHVzaF9z dGFjayA9IGF4X3BzZXVkb19yZWdpc3Rlcl9wdXNoX3N0YWNrOworfQorCitp bnQKIGdkYmFyY2hfc3BfcmVnbnVtIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJj aCkKIHsKICAgZ2RiX2Fzc2VydCAoZ2RiYXJjaCAhPSBOVUxMKTsKLS0tIGEv Z2RiYXJjaC5oCisrKyBiL2dkYmFyY2guaApAQCAtNTMsNiArNTMsNyBAQCBz dHJ1Y3QgdGFyZ2V0X2Rlc2M7CiBzdHJ1Y3QgZGlzcGxhY2VkX3N0ZXBfY2xv c3VyZTsKIHN0cnVjdCBjb3JlX3JlZ3NldF9zZWN0aW9uOwogc3RydWN0IHN5 c2NhbGw7CitzdHJ1Y3QgYWdlbnRfZXhwcjsKIAogLyogVGhlIGFyY2hpdGVj dHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHRh cmdldC4KICAKQEAgLTIzMiw2ICsyMzMsMjUgQEAgZXh0ZXJuIHZvaWQgc2V0 X2dkYmFyY2hfbnVtX3JlZ3MgKHN0cnVjdAogZXh0ZXJuIGludCBnZGJhcmNo X251bV9wc2V1ZG9fcmVncyAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gpOwog ZXh0ZXJuIHZvaWQgc2V0X2dkYmFyY2hfbnVtX3BzZXVkb19yZWdzIChzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IG51bV9wc2V1ZG9fcmVncyk7CiAK Ky8qIEFzc2VtYmxlIGFnZW50IGV4cHJlc3Npb24gYnl0ZWNvZGUgdG8gY29s bGVjdCBwc2V1ZG8tcmVnaXN0ZXIgUkVHLgorICAgUmV0dXJuIC0xIGlmIHNv bWV0aGluZyBnb2VzIHdyb25nLCAwIG90aGVyd2lzZS4gKi8KKworZXh0ZXJu IGludCBnZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rlcl9jb2xsZWN0X3AgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoKTsKKwordHlwZWRlZiBpbnQgKGdkYmFy Y2hfYXhfcHNldWRvX3JlZ2lzdGVyX2NvbGxlY3RfZnR5cGUpIChzdHJ1Y3Qg Z2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IGFnZW50X2V4cHIgKmF4LCBpbnQg cmVnKTsKK2V4dGVybiBpbnQgZ2RiYXJjaF9heF9wc2V1ZG9fcmVnaXN0ZXJf Y29sbGVjdCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHN0cnVjdCBhZ2Vu dF9leHByICpheCwgaW50IHJlZyk7CitleHRlcm4gdm9pZCBzZXRfZ2RiYXJj aF9heF9wc2V1ZG9fcmVnaXN0ZXJfY29sbGVjdCAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsIGdkYmFyY2hfYXhfcHNldWRvX3JlZ2lzdGVyX2NvbGxlY3Rf ZnR5cGUgKmF4X3BzZXVkb19yZWdpc3Rlcl9jb2xsZWN0KTsKKworLyogQXNz ZW1ibGUgYWdlbnQgZXhwcmVzc2lvbiBieXRlY29kZSB0byBwdXNoIHRoZSB2 YWx1ZSBvZiBwc2V1ZG8tcmVnaXN0ZXIKKyAgIFJFRyBvbiB0aGUgaW50ZXJw cmV0ZXIgc3RhY2suCisgICBSZXR1cm4gLTEgaWYgc29tZXRoaW5nIGdvZXMg d3JvbmcsIDAgb3RoZXJ3aXNlLiAqLworCitleHRlcm4gaW50IGdkYmFyY2hf YXhfcHNldWRvX3JlZ2lzdGVyX3B1c2hfc3RhY2tfcCAoc3RydWN0IGdkYmFy Y2ggKmdkYmFyY2gpOworCit0eXBlZGVmIGludCAoZ2RiYXJjaF9heF9wc2V1 ZG9fcmVnaXN0ZXJfcHVzaF9zdGFja19mdHlwZSkgKHN0cnVjdCBnZGJhcmNo ICpnZGJhcmNoLCBzdHJ1Y3QgYWdlbnRfZXhwciAqYXgsIGludCByZWcpOwor ZXh0ZXJuIGludCBnZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rlcl9wdXNoX3N0 YWNrIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IGFnZW50X2V4 cHIgKmF4LCBpbnQgcmVnKTsKK2V4dGVybiB2b2lkIHNldF9nZGJhcmNoX2F4 X3BzZXVkb19yZWdpc3Rlcl9wdXNoX3N0YWNrIChzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaCwgZ2RiYXJjaF9heF9wc2V1ZG9fcmVnaXN0ZXJfcHVzaF9zdGFj a19mdHlwZSAqYXhfcHNldWRvX3JlZ2lzdGVyX3B1c2hfc3RhY2spOworCiAv KiBHREIncyBzdGFuZGFyZCAob3Igd2VsbCBrbm93bikgcmVnaXN0ZXIgbnVt YmVycy4gIFRoZXNlIGNhbiBtYXAgb250bwogICAgYSByZWFsIHJlZ2lzdGVy IG9yIGEgcHNldWRvIChjb21wdXRlZCkgcmVnaXN0ZXIgb3Igbm90IGJlIGRl ZmluZWQgYXQKICAgIGFsbCAoLTEpLgotLS0gYS9nZGJhcmNoLnNoCisrKyBi L2dkYmFyY2guc2gKQEAgLTQyNyw2ICs0MjcsMTUgQEAgdjppbnQ6bnVtX3Jl Z3M6OjowOi0xCiAjIGNvbWJpbmF0aW9ucyBvZiBvdGhlciByZWdpc3RlcnMs IG9yIHRoZXkgbWF5IGJlIGNvbXB1dGVkIGJ5IEdEQi4KIHY6aW50Om51bV9w c2V1ZG9fcmVnczo6OjA6MDo6MAogCisjIEFzc2VtYmxlIGFnZW50IGV4cHJl c3Npb24gYnl0ZWNvZGUgdG8gY29sbGVjdCBwc2V1ZG8tcmVnaXN0ZXIgUkVH LgorIyBSZXR1cm4gLTEgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcsIDAgb3Ro ZXJ3aXNlLgorTTppbnQ6YXhfcHNldWRvX3JlZ2lzdGVyX2NvbGxlY3Q6c3Ry dWN0IGFnZW50X2V4cHIgKmF4LCBpbnQgcmVnOmF4LCByZWcKKworIyBBc3Nl bWJsZSBhZ2VudCBleHByZXNzaW9uIGJ5dGVjb2RlIHRvIHB1c2ggdGhlIHZh bHVlIG9mIHBzZXVkby1yZWdpc3RlcgorIyBSRUcgb24gdGhlIGludGVycHJl dGVyIHN0YWNrLgorIyBSZXR1cm4gLTEgaWYgc29tZXRoaW5nIGdvZXMgd3Jv bmcsIDAgb3RoZXJ3aXNlLgorTTppbnQ6YXhfcHNldWRvX3JlZ2lzdGVyX3B1 c2hfc3RhY2s6c3RydWN0IGFnZW50X2V4cHIgKmF4LCBpbnQgcmVnOmF4LCBy ZWcKKwogIyBHREIncyBzdGFuZGFyZCAob3Igd2VsbCBrbm93bikgcmVnaXN0 ZXIgbnVtYmVycy4gIFRoZXNlIGNhbiBtYXAgb250bwogIyBhIHJlYWwgcmVn aXN0ZXIgb3IgYSBwc2V1ZG8gKGNvbXB1dGVkKSByZWdpc3RlciBvciBub3Qg YmUgZGVmaW5lZCBhdAogIyBhbGwgKC0xKS4KQEAgLTkxOSw2ICs5MjgsNyBA QCBzdHJ1Y3QgdGFyZ2V0X2Rlc2M7CiBzdHJ1Y3QgZGlzcGxhY2VkX3N0ZXBf Y2xvc3VyZTsKIHN0cnVjdCBjb3JlX3JlZ3NldF9zZWN0aW9uOwogc3RydWN0 IHN5c2NhbGw7CitzdHJ1Y3QgYWdlbnRfZXhwcjsKIAogLyogVGhlIGFyY2hp dGVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24gdG8gdGhl IHRhcmdldC4KICAKLS0tIGEvbWlwcy10ZGVwLmMKKysrIGIvbWlwcy10ZGVw LmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJkd2FyZjItZnJhbWUu aCIKICNpbmNsdWRlICJ1c2VyLXJlZ3MuaCIKICNpbmNsdWRlICJ2YWxwcmlu dC5oIgorI2luY2x1ZGUgImF4LmgiCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg b2JqZmlsZV9kYXRhICptaXBzX3Bkcl9kYXRhOwogCkBAIC02MTYsNiArNjE3 LDQ4IEBAIG1pcHNfcHNldWRvX3JlZ2lzdGVyX3dyaXRlIChzdHJ1Y3QgZ2Ri YXIKICAgICBpbnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9fTElORV9fLCBf KCJiYWQgcmVnaXN0ZXIgc2l6ZSIpKTsKIH0KIAorc3RhdGljIGludAorbWlw c19heF9wc2V1ZG9fcmVnaXN0ZXJfY29sbGVjdCAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsCisJCQkJIHN0cnVjdCBhZ2VudF9leHByICpheCwgaW50IHJl ZykKK3sKKyAgaW50IHJhd251bSA9IHJlZyAlIGdkYmFyY2hfbnVtX3JlZ3Mg KGdkYmFyY2gpOworICBnZGJfYXNzZXJ0IChyZWcgPj0gZ2RiYXJjaF9udW1f cmVncyAoZ2RiYXJjaCkKKwkgICAgICAmJiByZWcgPCAyICogZ2RiYXJjaF9u dW1fcmVncyAoZ2RiYXJjaCkpOworCisgIGF4X3JlZ19tYXNrIChheCwgcmF3 bnVtKTsKKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbWlwc19h eF9wc2V1ZG9fcmVnaXN0ZXJfcHVzaF9zdGFjayAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsCisJCQkJICAgIHN0cnVjdCBhZ2VudF9leHByICpheCwgaW50 IHJlZykKK3sKKyAgaW50IHJhd251bSA9IHJlZyAlIGdkYmFyY2hfbnVtX3Jl Z3MgKGdkYmFyY2gpOworICBnZGJfYXNzZXJ0IChyZWcgPj0gZ2RiYXJjaF9u dW1fcmVncyAoZ2RiYXJjaCkKKwkgICAgICAmJiByZWcgPCAyICogZ2RiYXJj aF9udW1fcmVncyAoZ2RiYXJjaCkpOworICBpZiAocmVnaXN0ZXJfc2l6ZSAo Z2RiYXJjaCwgcmF3bnVtKSA+PSByZWdpc3Rlcl9zaXplIChnZGJhcmNoLCBy ZWcpKQorICAgIHsKKyAgICAgIGF4X3JlZyAoYXgsIHJhd251bSk7CisKKyAg ICAgIGlmIChyZWdpc3Rlcl9zaXplIChnZGJhcmNoLCByYXdudW0pID4gcmVn aXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgcmVnKSkKKyAgICAgICAgeworCSAgaWYg KCFnZGJhcmNoX3RkZXAgKGdkYmFyY2gpLT5taXBzNjRfdHJhbnNmZXJzXzMy Yml0X3JlZ3NfcAorCSAgICAgIHx8IGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2Ri YXJjaCkgIT0gQkZEX0VORElBTl9CSUcpCisJICAgIHsKKwkgICAgICBheF9j b25zdF9sIChheCwgMzIpOworCSAgICAgIGF4X3NpbXBsZSAoYXgsIGFvcF9s c2gpOworCSAgICB9CisJICBheF9jb25zdF9sIChheCwgMzIpOworCSAgYXhf c2ltcGxlIChheCwgYW9wX3JzaF9zaWduZWQpOworCX0KKyAgICB9CisgIGVs c2UKKyAgICBpbnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9fTElORV9fLCBf KCJiYWQgcmVnaXN0ZXIgc2l6ZSIpKTsKKworICByZXR1cm4gMDsKK30KKwog LyogVGFibGUgdG8gdHJhbnNsYXRlIE1JUFMxNiByZWdpc3RlciBmaWVsZCB0 byBhY3R1YWwgcmVnaXN0ZXIgbnVtYmVyLiAgKi8KIHN0YXRpYyBpbnQgbWlw czE2X3RvXzMyX3JlZ1s4XSA9IHsgMTYsIDE3LCAyLCAzLCA0LCA1LCA2LCA3 IH07CiAKQEAgLTU5MzMsNiArNTk3NiwxMSBAQCBtaXBzX2dkYmFyY2hfaW5p dCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpCiAgIHNldF9nZGJhcmNoX3BzZXVk b19yZWdpc3Rlcl9yZWFkIChnZGJhcmNoLCBtaXBzX3BzZXVkb19yZWdpc3Rl cl9yZWFkKTsKICAgc2V0X2dkYmFyY2hfcHNldWRvX3JlZ2lzdGVyX3dyaXRl IChnZGJhcmNoLCBtaXBzX3BzZXVkb19yZWdpc3Rlcl93cml0ZSk7CiAKKyAg c2V0X2dkYmFyY2hfYXhfcHNldWRvX3JlZ2lzdGVyX2NvbGxlY3QgKGdkYmFy Y2gsCisJCQkJCSAgbWlwc19heF9wc2V1ZG9fcmVnaXN0ZXJfY29sbGVjdCk7 CisgIHNldF9nZGJhcmNoX2F4X3BzZXVkb19yZWdpc3Rlcl9wdXNoX3N0YWNr CisgICAgICAoZ2RiYXJjaCwgbWlwc19heF9wc2V1ZG9fcmVnaXN0ZXJfcHVz aF9zdGFjayk7CisKICAgc2V0X2dkYmFyY2hfZWxmX21ha2VfbXN5bWJvbF9z cGVjaWFsIChnZGJhcmNoLAogCQkJCQltaXBzX2VsZl9tYWtlX21zeW1ib2xf c3BlY2lhbCk7CiAK --0016367b615876e308049873de5a--