From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31651 invoked by alias); 5 Dec 2011 09:29:21 -0000 Received: (qmail 31628 invoked by uid 22791); 5 Dec 2011 09:29:15 -0000 X-SWARE-Spam-Status: No, hits=-0.5 required=5.0 tests=AWL,BAYES_05,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,TW_BP,TW_EG,TW_GJ,TW_WB,TW_YB X-Spam-Check-By: sourceware.org Received: from mail-vx0-f169.google.com (HELO mail-vx0-f169.google.com) (209.85.220.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 05 Dec 2011 09:28:55 +0000 Received: by vcbfk26 with SMTP id fk26so4349468vcb.0 for ; Mon, 05 Dec 2011 01:28:54 -0800 (PST) Received: by 10.52.90.164 with SMTP id bx4mr3304209vdb.128.1323077334211; Mon, 05 Dec 2011 01:28:54 -0800 (PST) MIME-Version: 1.0 Received: by 10.220.4.210 with HTTP; Mon, 5 Dec 2011 01:28:33 -0800 (PST) In-Reply-To: References: From: Kevin Pouget Date: Mon, 05 Dec 2011 09:29:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf307cfc36841c2c04b354f2b8 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: 2011-12/txt/msg00115.txt.bz2 --20cf307cfc36841c2c04b354f2b8 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 4940 On Fri, Dec 2, 2011 at 10:48 PM, Tom Tromey wrote: > > >>>>> "Kevin" =3D=3D Kevin Pouget writes: > > Sorry about the delay on this. > I got kind of distracted this week. > > Kevin> I noticed a bug in the previous version of the patch, which led to > Kevin> `out_of_scope' callback being triggered when it was not supposed t= o be > Kevin> (namely, when the breakpoint was hit, the execution continued, and > Kevin> then the callback was triggered before the temporary breakpoint co= uld > Kevin> be deleted. > > Looking close now. > > Kevin> + =A0 =A0 =A0if (ret) > Kevin> + =A0 =A0 =A0 =A0self_finishbp->return_value =3D value_to_value_ob= ject (ret); > > If this fails then the error is never cleared or handled. > > I think checking =3D=3D NULL and then calling gdbpy_print_stack is approp= riate. you're right, fixed > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Ignore Python errors at th= is stage. =A0*/ > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0self_bpfinish->return_type = =3D type_to_type_object (ret_type); > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0PyErr_Clear (); > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0self_bpfinish->function_type = =3D > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0type_to_type_object (= SYMBOL_TYPE (function)); > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0PyErr_Clear (); > > This looked a little weird, but I verified from the docs that it is ok. > > I think this still needs a NEWS entry. nop, it was in the patch :) diff --git a/gdb/NEWS b/gdb/NEWS index f13caf8..7b3f7f2 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -51,6 +51,10 @@ ** The "gdb.breakpoint" function has been deprecated in favor of "gdb.breakpoints". + ** A new class "gdb.FinishBreakpoint" is provided to catch the return + of a function. This class is based on the "finish" command + available in the CLI. + ** Type objects for struct and union types now allow access to the fields using standard Python dictionary (mapping) methods. For example, "some_type['myfield']" now works, as does it was also reviewed by Eli in : http://sourceware.org/ml/gdb-patches/2011-10/msg00645.html Thanks for your review, cordially, Kevin (no regression against current git source tree) -- 2011-12-05 Kevin Pouget Introduce gdb.FinishBreakpoint in Python * Makefile.in (SUBDIR_PYTHON_OBS): Add py-finishbreakpoint.o. (SUBDIR_PYTHON_SRCS): Add python/py-finishbreakpoint.c. Add build rule for this file. * infcmd.c (print_return_value): Split to create get_return_value. (get_return_value): New function based on print_return_value. Handle case where stop_registers are not set. * inferior.h (get_return_value): New prototype. * python/py-breakpoint.c (bppy_pending_object): Make non-static. (gdbpy_breakpoint_created): Set is_py_finish_bp is necessary. (struct breakpoint_object): Move to python-internal.h (BPPY_REQUIRE_VALID): Likewise. (BPPY_SET_REQUIRE_VALID): Likewise. (gdbpy_breakpoint_created): Initialize is_finish_bp. (gdbpy_should_stop): Add pre/post hooks before/after calling stop method. * python/python-internal.h (breakpoint_object_type): Add as extern. (bppy_pending_object): Likewise. (typedef struct breakpoint_object) Removed. (struct breakpoint_object): Moved from py-breakpoint.c. Add field is_finish_bp. (BPPY_REQUIRE_VALID): Moved from py-breakpoint.c. (BPPY_SET_REQUIRE_VALID): Likewise. (frame_object_to_frame_info): New prototype. (gdbpy_initialize_finishbreakpoints): New prototype. (bpfinishpy_is_finish_bp): Likewise. (bpfinishpy_pre_stop_hook): Likewise. (bpfinishpy_post_stop_hook): Likewise. * python/py-finishbreakpoint.c: New file. * python/py-frame.c(frame_object_to_frame_info): Make non-static and accept PyObject instead of frame_object. (frapy_is_valid): Don't cast to frame_object. (frapy_name): Likewise. (frapy_type): Likewise. (frapy_unwind_stop_reason): Likewise. (frapy_pc): Likewise. (frapy_block): Likewise. (frapy_function): Likewise. (frapy_older): Likewise. (frapy_newer): Likewise. (frapy_find_sal): Likewise. (frapy_read_var): Likewise. (frapy_select): Likewise. * python/python.c (gdbpy_is_stopped_at_finish_bp): New noop function. (_initialize_python): Add gdbpy_initialize_finishbreakpoints. * python/python.h: Include breakpoint.h (gdbpy_is_stopped_at_finish_bp): New prototype. doc/ * gdb.texinfo (Finish Breakpoints in Python): New subsection. (Python API): Add menu entry for Finish Breakpoints. testsuite/ * gdb.python/py-breakpoint.exp (mult_line): Define and use variable instead of line number. * gdb.python/py-finish-breakpoint.c: New file. * gdb.python/py-finish-breakpoint.exp: New file. * gdb.python/py-finish-breakpoint.py: New file. * gdb.python/py-finish-breakpoint2.cc: New file. * gdb.python/py-finish-breakpoint2.exp: New file. * gdb.python/py-finish-breakpoint2.py: New file. --20cf307cfc36841c2c04b354f2b8 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Introduce-gdb.FinishBreakpoint.patch" Content-Disposition: attachment; filename="0001-Introduce-gdb.FinishBreakpoint.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gvt8i2bf0 Content-length: 75860 RnJvbSAyNWZlZGE3N2IyNWU1ZjY2YTI3MmNhMDYwNjY5NDM1MTVlYmRhY2M3 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSAgSW50cm9kdWNlIGdk Yi5GaW5pc2hCcmVha3BvaW50CgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnZGIv TkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDQgKwogZ2RiL2RvYy9nZGIudGV4aW5mbyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDUxICsrKwogZ2RiL2luZmNtZC5jICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM5ICsr LQogZ2RiL2luZmVyaW9yLmggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAzICsKIGdkYi9weXRob24vcHktYnJlYWtwb2ludC5j ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0OCArLS0KIGdkYi9weXRo b24vcHktZmluaXNoYnJlYWtwb2ludC5jICAgICAgICAgICAgICAgICAgIHwg IDQ1MiArKysrKysrKysrKysrKysrKysrKwogZ2RiL3B5dGhvbi9weS1mcmFt ZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICstCiBn ZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNTAgKystCiBnZGIvcHl0aG9uL3B5dGhvbi5jICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwICAgICAgICAgfCAgICA3 ICstCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQuYyAgICB8ICAgOTcgKysrKysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5leHAgIHwgIDIzMyArKysrKysr KysrCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQucHkgICB8ICAgODkgKysrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5jYyAgfCAgIDU5ICsrKwogZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5l eHAgfCAgIDY1ICsrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZp bmlzaC1icmVha3BvaW50Mi5weSAgfCAgIDMzICsrCiAxNyBmaWxlcyBjaGFu Z2VkLCAxMjA0IGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGdkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2lu dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9p bnQuZXhwCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5CiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVh a3BvaW50Mi5jYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuZXhwCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50Mi5weQoKZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5p biBiL2dkYi9NYWtlZmlsZS5pbgppbmRleCBiNzFkYjMzLi5kOGQxYjQwIDEw MDY0NAotLS0gYS9nZGIvTWFrZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxl LmluCkBAIC0yODcsNiArMjg3LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBc CiAJcHktZXZ0cmVnaXN0cnkubyBcCiAJcHktZXZ0cy5vIFwKIAlweS1leGl0 ZWRldmVudC5vIFwKKwlweS1maW5pc2hicmVha3BvaW50Lm8gXAogCXB5LWZy YW1lLm8gXAogCXB5LWZ1bmN0aW9uLm8gXAogCXB5LWluZmVyaW9yLm8gXApA QCAtMzE4LDYgKzMxOSw3IEBAIFNVQkRJUl9QWVRIT05fU1JDUyA9IFwKIAlw eXRob24vcHktZXZ0cmVnaXN0cnkuYyBcCiAJcHl0aG9uL3B5LWV2dHMuYyBc CiAJcHl0aG9uL3B5LWV4aXRlZGV2ZW50LmMgXAorCXB5dGhvbi9weS1maW5p c2hicmVha3BvaW50LmMgXAogCXB5dGhvbi9weS1mcmFtZS5jIFwKIAlweXRo b24vcHktZnVuY3Rpb24uYyBcCiAJcHl0aG9uL3B5LWluZmVyaW9yLmMgXApA QCAtMjEwOSw2ICsyMTExLDEwIEBAIHB5LWV4aXRlZGV2ZW50Lm86ICQoc3Jj ZGlyKS9weXRob24vcHktZXhpdGVkZXZlbnQuYwogCSQoQ09NUElMRSkgJChQ WVRIT05fQ0ZMQUdTKSAkKHNyY2RpcikvcHl0aG9uL3B5LWV4aXRlZGV2ZW50 LmMKIAkkKFBPU1RDT01QSUxFKQogCitweS1maW5pc2hicmVha3BvaW50Lm86 ICQoc3JjZGlyKS9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCisJJChD T01QSUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHkt ZmluaXNoYnJlYWtwb2ludC5jCisJJChQT1NUQ09NUElMRSkKKwogcHktZnJh bWUubzogJChzcmNkaXIpL3B5dGhvbi9weS1mcmFtZS5jCiAJJChDT01QSUxF KSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZnJhbWUu YwogCSQoUE9TVENPTVBJTEUpCmRpZmYgLS1naXQgYS9nZGIvTkVXUyBiL2dk Yi9ORVdTCmluZGV4IGYxM2NhZjguLjdiM2Y3ZjIgMTAwNjQ0Ci0tLSBhL2dk Yi9ORVdTCisrKyBiL2dkYi9ORVdTCkBAIC01MSw2ICs1MSwxMCBAQAogICAq KiBUaGUgImdkYi5icmVha3BvaW50IiBmdW5jdGlvbiBoYXMgYmVlbiBkZXBy ZWNhdGVkIGluIGZhdm9yIG9mCiAgICAgICJnZGIuYnJlYWtwb2ludHMiLgog CisgICoqIEEgbmV3IGNsYXNzICJnZGIuRmluaXNoQnJlYWtwb2ludCIgaXMg cHJvdmlkZWQgdG8gY2F0Y2ggdGhlIHJldHVybgorICAgICBvZiBhIGZ1bmN0 aW9uLiAgVGhpcyBjbGFzcyBpcyBiYXNlZCBvbiB0aGUgImZpbmlzaCIgY29t bWFuZAorICAgICBhdmFpbGFibGUgaW4gdGhlIENMSS4gCisKICAgKiogVHlw ZSBvYmplY3RzIGZvciBzdHJ1Y3QgYW5kIHVuaW9uIHR5cGVzIG5vdyBhbGxv dyBhY2Nlc3MgdG8KICAgICAgdGhlIGZpZWxkcyB1c2luZyBzdGFuZGFyZCBQ eXRob24gZGljdGlvbmFyeSAobWFwcGluZykgbWV0aG9kcy4KICAgICAgRm9y IGV4YW1wbGUsICJzb21lX3R5cGVbJ215ZmllbGQnXSIgbm93IHdvcmtzLCBh cyBkb2VzCmRpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2Ri L2RvYy9nZGIudGV4aW5mbwppbmRleCBjNmQ1OGZiLi43NzgyNTFkIDEwMDY0 NAotLS0gYS9nZGIvZG9jL2dkYi50ZXhpbmZvCisrKyBiL2dkYi9kb2MvZ2Ri LnRleGluZm8KQEAgLTIxNTAyLDYgKzIxNTAyLDggQEAgc2l0dWF0aW9uLCBh IFB5dGhvbiBAY29kZXtLZXlib2FyZEludGVycnVwdH0gZXhjZXB0aW9uIGlz IHRocm93bi4KICogU3ltYm9sIFRhYmxlcyBJbiBQeXRob246OiAgICAgUHl0 aG9uIHJlcHJlc2VudGF0aW9uIG9mIHN5bWJvbCB0YWJsZXMuCiAqIExhenkg U3RyaW5ncyBJbiBQeXRob246OiAgICAgIFB5dGhvbiByZXByZXNlbnRhdGlv biBvZiBsYXp5IHN0cmluZ3MuCiAqIEJyZWFrcG9pbnRzIEluIFB5dGhvbjo6 ICAgICAgIE1hbmlwdWxhdGluZyBicmVha3BvaW50cyB1c2luZyBQeXRob24u CisqIEZpbmlzaCBCcmVha3BvaW50cyBpbiBQeXRob246OiBTZXR0aW5nIEJy ZWFrcG9pbnRzIG9uIGZ1bmN0aW9uIHJldHVybgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1c2luZyBQeXRob24uCiBAZW5kIG1lbnUKIAog QG5vZGUgQmFzaWMgUHl0aG9uCkBAIC0yNDMzNiw2ICsyNDMzOCw1NSBAQCBj b21tYW5kcywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzLiAgSWYgdGhlcmUgYXJl IG5vIGNvbW1hbmRzLCB0aGlzCiBhdHRyaWJ1dGUgaXMgQGNvZGV7Tm9uZX0u ICBUaGlzIGF0dHJpYnV0ZSBpcyBub3Qgd3JpdGFibGUuCiBAZW5kIGRlZnZh cgogCitAbm9kZSBGaW5pc2ggQnJlYWtwb2ludHMgaW4gUHl0aG9uCitAc3Vi c3Vic2VjdGlvbiBGaW5pc2ggQnJlYWtwb2ludHMKKworQGNpbmRleCBweXRo b24gZmluaXNoIGJyZWFrcG9pbnRzCitAdGluZGV4IGdkYi5GaW5pc2hCcmVh a3BvaW50CisKK0EgZmluaXNoIGJyZWFrcG9pbnQgaXMgYSB0ZW1wb3Jhcnkg YnJlYWtwb2ludCBzZXQgYXQgdGhlIHJldHVybiBhZGRyZXNzIG9mCithIGZy YW1lLCBiYXNlZCBvbiB0aGUgQGNvZGV7ZmluaXNofSBjb21tYW5kLiAgQGNv ZGV7Z2RiLkZpbmlzaEJyZWFrcG9pbnR9CitleHRlbmRzIEBjb2Rle2dkYi5C cmVha3BvaW50fS4gIFRoZSB1bmRlcmx5aW5nIGJyZWFrcG9pbnQgd2lsbCBi ZSBkaXNhYmxlZCAKK2FuZCBkZWxldGVkIHdoZW4gdGhlIGV4ZWN1dGlvbiB3 aWxsIHJ1biBvdXQgb2YgdGhlIGJyZWFrcG9pbnQgc2NvcGUgKGkuZS5AOiAK K0Bjb2Rle0JyZWFrcG9pbnQuc3RvcH0gb3IgQGNvZGV7RmluaXNoQnJlYWtw b2ludC5vdXRfb2Zfc2NvcGV9IHRyaWdnZXJlZCkuCisKK0BkZWZ1biBGaW5p c2hCcmVha3BvaW50Ll9faW5pdF9fIChAcntbfWZyYW1lQHJ7XX0gQHJ7W30s IGludGVybmFsQHJ7XX0pCitDcmVhdGUgYSBmaW5pc2ggYnJlYWtwb2ludCBh dCB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIEBjb2Rle2dkYi5GcmFtZX0K K29iamVjdCBAdmFye2ZyYW1lfS4gIElmIEB2YXJ7ZnJhbWV9IGlzIG5vdCBw cm92aWRlZCwgdGhpcyBkZWZhdWx0cyB0byB0aGUKK25ld2VzdCBmcmFtZS4g IFRoZSBvcHRpb25hbCBAdmFye2ludGVybmFsfSBhcmd1bWVudCBhbGxvd3Mg dGhlIGJyZWFrcG9pbnQgdG8KK2JlY29tZSBpbnZpc2libGUgdG8gdGhlIHVz ZXIuICBAeHJlZntCcmVha3BvaW50cyBJbiBQeXRob259LCBmb3IgZnVydGhl ciAKK2RldGFpbHMgYWJvdXQgdGhpcyBhcmd1bWVudC4KK0BlbmQgZGVmdW4K KworQGRlZnVuIEZpbmlzaEJyZWFrcG9pbnQub3V0X29mX3Njb3BlIChzZWxm KQorSW4gc29tZSBjaXJjdW1zdGFuY2VzIChlLmcuQDogQGNvZGV7bG9uZ2pt cH0sIENAdHsrK30gZXhjZXB0aW9ucywgQHZhbHVle0dEQk59IAorQGNvZGV7 cmV0dXJufSBjb21tYW5kLCBAZG90c3t9KSwgYSBmdW5jdGlvbiBtYXkgbm90 IHByb3Blcmx5IHRlcm1pbmF0ZSwgYW5kCit0aHVzIG5ldmVyIGhpdCB0aGUg ZmluaXNoIGJyZWFrcG9pbnQuICBXaGVuIEB2YWx1ZXtHREJOfSBub3RpY2Vz IHN1Y2ggYQorc2l0dWF0aW9uLCB0aGUgQGNvZGV7b3V0X29mX3Njb3BlfSBj YWxsYmFjayB3aWxsIGJlIHRyaWdnZXJlZC4KKworWW91IG1heSB3YW50IHRv IHN1Yi1jbGFzcyBAY29kZXtnZGIuRmluaXNoQnJlYWtwb2ludH0gYW5kIG92 ZXJyaWRlIHRoaXMKK21ldGhvZDoKKworQHNtYWxsZXhhbXBsZQorY2xhc3Mg TXlGaW5pc2hCcmVha3BvaW50IChnZGIuRmluaXNoQnJlYWtwb2ludCkKKyAg ICBkZWYgc3RvcCAoc2VsZik6CisgICAgICAgIHByaW50ICJub3JtYWwgZmlu aXNoIgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIAorICAgIGRlZiBvdXRf b2Zfc2NvcGUgKCk6CisgICAgICAgIHByaW50ICJhYm5vcm1hbCBmaW5pc2gi CitAZW5kIHNtYWxsZXhhbXBsZSAKK0BlbmQgZGVmdW4KKworQGRlZnZhciBG aW5pc2hCcmVha3BvaW50LnJldHVybl92YWx1ZQorV2hlbiBAdmFsdWV7R0RC Tn0gaXMgc3RvcHBlZCBhdCBhIGZpbmlzaCBicmVha3BvaW50IGFuZCB0aGUg ZnJhbWUgCit1c2VkIHRvIGJ1aWxkIHRoZSBAY29kZXtnZGIuRmluaXNoQnJl YWtwb2ludH0gb2JqZWN0IGhhZCBkZWJ1ZyBzeW1ib2xzLCB0aGlzCithdHRy aWJ1dGUgd2lsbCBjb250YWluIGEgQGNvZGV7Z2RiLlZhbHVlfSBvYmplY3Qg Y29ycmVzcG9uZGluZyB0byB0aGUgcmV0dXJuCit2YWx1ZSBvZiB0aGUgZnVu Y3Rpb24uICBUaGUgdmFsdWUgd2lsbCBiZSBAY29kZXtOb25lfSBpZiB0aGUg ZnVuY3Rpb24gcmV0dXJuIAordHlwZSBpcyBAY29kZXt2b2lkfSBvciBpZiB0 aGUgcmV0dXJuIHZhbHVlIHdhcyBub3QgY29tcHV0YWJsZS4gIFRoaXMgYXR0 cmlidXRlCitpcyBub3Qgd3JpdGFibGUuCitAZW5kIGRlZnZhcgorCiBAbm9k ZSBMYXp5IFN0cmluZ3MgSW4gUHl0aG9uCiBAc3Vic3Vic2VjdGlvbiBQeXRo b24gcmVwcmVzZW50YXRpb24gb2YgbGF6eSBzdHJpbmdzLgogCmRpZmYgLS1n aXQgYS9nZGIvaW5mY21kLmMgYi9nZGIvaW5mY21kLmMKaW5kZXggN2I5MzVm ZS4uNzZhZGRmMCAxMDA2NDQKLS0tIGEvZ2RiL2luZmNtZC5jCisrKyBiL2dk Yi9pbmZjbWQuYwpAQCAtMTQxMywxNiArMTQxMywyNiBAQCBhZHZhbmNlX2Nv bW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQogICB1bnRpbF9icmVh a19jb21tYW5kIChhcmcsIGZyb21fdHR5LCAxKTsKIH0KIAwKLS8qIFByaW50 IHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIGEgJ2Zp bmlzaCcgY29tbWFuZC4gICovCisvKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRo ZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIGEgJ2Zpbmlz aCcKKyAgIGNvbW1hbmQvQlAuICAqLwogCi1zdGF0aWMgdm9pZAotcHJpbnRf cmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3Qg dHlwZSAqdmFsdWVfdHlwZSkKK3N0cnVjdCB2YWx1ZSAqCitnZXRfcmV0dXJu X3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAq dmFsdWVfdHlwZSkKIHsKLSAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBn ZXRfcmVnY2FjaGVfYXJjaCAoc3RvcF9yZWdpc3RlcnMpOwotICBzdHJ1Y3Qg Y2xlYW51cCAqb2xkX2NoYWluOwotICBzdHJ1Y3QgdWlfc3RyZWFtICpzdGI7 CisgIHN0cnVjdCByZWdjYWNoZSAqc3RvcF9yZWdzID0gc3RvcF9yZWdpc3Rl cnM7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOwogICBzdHJ1Y3QgdmFs dWUgKnZhbHVlOwogICBzdHJ1Y3QgdWlfb3V0ICp1aW91dCA9IGN1cnJlbnRf dWlvdXQ7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwID0gbWFrZV9jbGVh bnVwIChudWxsX2NsZWFudXAsIE5VTEwpOworCisgIC8qIElmIHN0b3BfcmVn aXN0ZXJzIHdlcmUgbm90IHNhdmVkLCB1c2UgdGhlIGN1cnJlbnQgcmVnaXN0 ZXJzLiAgKi8KKyAgaWYgKCFzdG9wX3JlZ3MpCisgICAgeworICAgICAgc3Rv cF9yZWdzID0gcmVnY2FjaGVfZHVwIChnZXRfY3VycmVudF9yZWdjYWNoZSAo KSk7CisgICAgICBjbGVhbnVwID0gbWFrZV9jbGVhbnVwX3JlZ2NhY2hlX3hm cmVlIChzdG9wX3JlZ3MpOworICAgIH0KKworICBnZGJhcmNoID0gZ2V0X3Jl Z2NhY2hlX2FyY2ggKHN0b3BfcmVncyk7CiAKICAgQ0hFQ0tfVFlQRURFRiAo dmFsdWVfdHlwZSk7CiAgIGdkYl9hc3NlcnQgKFRZUEVfQ09ERSAodmFsdWVf dHlwZSkgIT0gVFlQRV9DT0RFX1ZPSUQpOwpAQCAtMTQ0MSw3ICsxNDUxLDcg QEAgcHJpbnRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBl LCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkKICAgICBjYXNlIFJFVFVSTl9W QUxVRV9BQklfUkVUVVJOU19BRERSRVNTOgogICAgIGNhc2UgUkVUVVJOX1ZB TFVFX0FCSV9QUkVTRVJWRVNfQUREUkVTUzoKICAgICAgIHZhbHVlID0gYWxs b2NhdGVfdmFsdWUgKHZhbHVlX3R5cGUpOwotICAgICAgZ2RiYXJjaF9yZXR1 cm5fdmFsdWUgKGdkYmFyY2gsIGZ1bmNfdHlwZSwgdmFsdWVfdHlwZSwgc3Rv cF9yZWdpc3RlcnMsCisgICAgICBnZGJhcmNoX3JldHVybl92YWx1ZSAoZ2Ri YXJjaCwgZnVuY190eXBlLCB2YWx1ZV90eXBlLCBzdG9wX3JlZ3MsCiAJCQkg ICAgdmFsdWVfY29udGVudHNfcmF3ICh2YWx1ZSksIE5VTEwpOwogICAgICAg YnJlYWs7CiAgICAgY2FzZSBSRVRVUk5fVkFMVUVfU1RSVUNUX0NPTlZFTlRJ T046CkBAIC0xNDUxLDYgKzE0NjEsMjEgQEAgcHJpbnRfcmV0dXJuX3ZhbHVl IChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAqdmFsdWVf dHlwZSkKICAgICAgIGludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5F X18sIF8oImJhZCBzd2l0Y2giKSk7CiAgICAgfQogCisgIGRvX2NsZWFudXBz IChjbGVhbnVwKTsKKworICByZXR1cm4gdmFsdWU7Cit9CisKKy8qIFByaW50 IHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIGEgJ2Zp bmlzaCcgY29tbWFuZC4gICovCisKK3N0YXRpYyB2b2lkCitwcmludF9yZXR1 cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUsIHN0cnVjdCB0eXBl ICp2YWx1ZV90eXBlKQoreworICBzdHJ1Y3QgdmFsdWUgKnZhbHVlID0gZ2V0 X3JldHVybl92YWx1ZSAoZnVuY190eXBlLCB2YWx1ZV90eXBlKTsKKyAgc3Ry dWN0IGNsZWFudXAgKm9sZF9jaGFpbjsKKyAgc3RydWN0IHVpX3N0cmVhbSAq c3RiOworICBzdHJ1Y3QgdWlfb3V0ICp1aW91dCA9IGN1cnJlbnRfdWlvdXQ7 CisKICAgaWYgKHZhbHVlKQogICAgIHsKICAgICAgIHN0cnVjdCB2YWx1ZV9w cmludF9vcHRpb25zIG9wdHM7CmRpZmYgLS1naXQgYS9nZGIvaW5mZXJpb3Iu aCBiL2dkYi9pbmZlcmlvci5oCmluZGV4IGNmYWVhN2YuLmYxOTg2OTYgMTAw NjQ0Ci0tLSBhL2dkYi9pbmZlcmlvci5oCisrKyBiL2dkYi9pbmZlcmlvci5o CkBAIC0yNjksNiArMjY5LDkgQEAgZXh0ZXJuIHZvaWQgZGV0YWNoX2NvbW1h bmQgKGNoYXIgKiwgaW50KTsKIAogZXh0ZXJuIHZvaWQgbm90aWNlX25ld19p bmZlcmlvciAocHRpZF90LCBpbnQsIGludCk7CiAKK2V4dGVybiBzdHJ1Y3Qg dmFsdWUgKmdldF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5 cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSk7CisKIC8qIEFkZHJlc3MgYXQgd2hp Y2ggaW5mZXJpb3Igc3RvcHBlZC4gICovCiAKIGV4dGVybiBDT1JFX0FERFIg c3RvcF9wYzsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktYnJlYWtwb2lu dC5jIGIvZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMKaW5kZXggMTFkNjBm ZS4uNjRlZjQ1ZiAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weS1icmVha3Bv aW50LmMKKysrIGIvZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMKQEAgLTMx LDUyICszMSwxNiBAQAogI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKICNpbmNs dWRlICJsYW5ndWFnZS5oIgogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IGJyZWFr cG9pbnRfb2JqZWN0X3R5cGU7Ci0KIC8qIE51bWJlciBvZiBsaXZlIGJyZWFr cG9pbnRzLiAgKi8KIHN0YXRpYyBpbnQgYnBweV9saXZlOwogCiAvKiBWYXJp YWJsZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIEJy ZWFrcG9pbnQKICAgIGNvbnN0cnVjdG9yIGFuZCB0aGUgYnJlYWtwb2ludC1j cmVhdGVkIGhvb2sgZnVuY3Rpb24uICAqLwotc3RhdGljIGJyZWFrcG9pbnRf b2JqZWN0ICpicHB5X3BlbmRpbmdfb2JqZWN0OworYnJlYWtwb2ludF9vYmpl Y3QgKmJwcHlfcGVuZGluZ19vYmplY3Q7CiAKIC8qIEZ1bmN0aW9uIHRoYXQg aXMgY2FsbGVkIHdoZW4gYSBQeXRob24gY29uZGl0aW9uIGlzIGV2YWx1YXRl ZC4gICovCiBzdGF0aWMgY2hhciAqIGNvbnN0IHN0b3BfZnVuYyA9ICJzdG9w IjsKIAotc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0Ci17Ci0gIFB5T2JqZWN0 X0hFQUQKLQotICAvKiBUaGUgYnJlYWtwb2ludCBudW1iZXIgYWNjb3JkaW5n IHRvIGdkYi4gICovCi0gIGludCBudW1iZXI7Ci0KLSAgLyogVGhlIGdkYiBi cmVha3BvaW50IG9iamVjdCwgb3IgTlVMTCBpZiB0aGUgYnJlYWtwb2ludCBo YXMgYmVlbgotICAgICBkZWxldGVkLiAgKi8KLSAgc3RydWN0IGJyZWFrcG9p bnQgKmJwOwotfTsKLQotLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUg YSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgotICAgZXhj ZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICAqLwotI2RlZmluZSBCUFBZX1JF UVVJUkVfVkFMSUQoQnJlYWtwb2ludCkJCQkJCVwKLSAgICBkbyB7CQkJCQkJ CQlcCi0gICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBOVUxMKQkJCQkJ XAotCXJldHVybiBQeUVycl9Gb3JtYXQgKFB5RXhjX1J1bnRpbWVFcnJvciwg ICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkgICAgIF8oIkJyZWFrcG9p bnQgJWQgaXMgaW52YWxpZC4iKSwJCVwKLQkJCSAgICAgKEJyZWFrcG9pbnQp LT5udW1iZXIpOwkJCVwKLSAgICB9IHdoaWxlICgwKQotCi0vKiBSZXF1aXJl IHRoYXQgQlJFQUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRo cm93IGEgUHl0aG9uCi0gICBleGNlcHRpb24gaWYgaXQgaXMgaW52YWxpZC4g IFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiBzZXR0ZXIgZnVuY3Rpb25zLiAg Ki8KLSNkZWZpbmUgQlBQWV9TRVRfUkVRVUlSRV9WQUxJRChCcmVha3BvaW50 KQkJCQlcCi0gICAgZG8gewkJCQkJCQkJXAotICAgICAgaWYgKChCcmVha3Bv aW50KS0+YnAgPT0gTlVMTCkJCQkJCVwKLSAgICAgICAgewkJCQkJCQkJXAot CSAgUHlFcnJfRm9ybWF0IChQeUV4Y19SdW50aW1lRXJyb3IsIF8oIkJyZWFr cG9pbnQgJWQgaXMgaW52YWxpZC4iKSwgXAotCQkJKEJyZWFrcG9pbnQpLT5u dW1iZXIpOwkJCQlcCi0JICByZXR1cm4gLTE7CQkJCQkJCVwKLQl9CQkJCQkJ CQlcCi0gICAgfSB3aGlsZSAoMCkKLQogLyogVGhpcyBpcyB1c2VkIHRvIGlu aXRpYWxpemUgdmFyaW91cyBnZGIuYnBfKiBjb25zdGFudHMuICAqLwogc3Ry dWN0IHB5YnBfY29kZQogewpAQCAtNzYyLDYgKzcyNiw5IEBAIGdkYnB5X3No b3VsZF9zdG9wIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaikK ICAgc3RydWN0IGdkYmFyY2ggKmdhcmNoID0gYi0+Z2RiYXJjaCA/IGItPmdk YmFyY2ggOiBnZXRfY3VycmVudF9hcmNoICgpOwogICBzdHJ1Y3QgY2xlYW51 cCAqY2xlYW51cCA9IGVuc3VyZV9weXRob25fZW52IChnYXJjaCwgY3VycmVu dF9sYW5ndWFnZSk7CiAKKyAgaWYgKGJwX29iai0+aXNfZmluaXNoX2JwKQor ICAgIGJwZmluaXNocHlfcHJlX3N0b3BfaG9vayAoYnBfb2JqKTsKKwogICBp ZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyAocHlfYnAsIHN0b3BfZnVuYykp CiAgICAgewogICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0Nh bGxNZXRob2QgKHB5X2JwLCBzdG9wX2Z1bmMsIE5VTEwpOwpAQCAtNzgzLDYg Kzc1MCwxMCBAQCBnZGJweV9zaG91bGRfc3RvcCAoc3RydWN0IGJyZWFrcG9p bnRfb2JqZWN0ICpicF9vYmopCiAgICAgICBlbHNlCiAJZ2RicHlfcHJpbnRf c3RhY2sgKCk7CiAgICAgfQorCisgIGlmIChicF9vYmotPmlzX2ZpbmlzaF9i cCkKKyAgICBicGZpbmlzaHB5X3Bvc3Rfc3RvcF9ob29rIChicF9vYmopOwor CiAgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsKIAogICByZXR1cm4gc3RvcDsK QEAgLTg0NSw2ICs4MTYsNyBAQCBnZGJweV9icmVha3BvaW50X2NyZWF0ZWQg KHN0cnVjdCBicmVha3BvaW50ICpicCkKICAgICAgIG5ld2JwLT5udW1iZXIg PSBicC0+bnVtYmVyOwogICAgICAgbmV3YnAtPmJwID0gYnA7CiAgICAgICBu ZXdicC0+YnAtPnB5X2JwX29iamVjdCA9IG5ld2JwOworICAgICAgbmV3YnAt PmlzX2ZpbmlzaF9icCA9IDA7CiAgICAgICBQeV9JTkNSRUYgKG5ld2JwKTsK ICAgICAgICsrYnBweV9saXZlOwogICAgIH0KQEAgLTEwMDYsNyArOTc4LDcg QEAgc3RhdGljIFB5TWV0aG9kRGVmIGJyZWFrcG9pbnRfb2JqZWN0X21ldGhv ZHNbXSA9CiAgIHsgTlVMTCB9IC8qIFNlbnRpbmVsLiAgKi8KIH07CiAKLXN0 YXRpYyBQeVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlwZSA9CitQ eVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlwZSA9CiB7CiAgIFB5 T2JqZWN0X0hFQURfSU5JVCAoTlVMTCkKICAgMCwJCQkJICAvKm9iX3NpemUq LwpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weS1maW5pc2hicmVha3BvaW50 LmMgYi9nZGIvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmJmZTVhCi0tLSAvZGV2 L251bGwKKysrIGIvZ2RiL3B5dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMK QEAgLTAsMCArMSw0NTIgQEAKKy8qIFB5dGhvbiBpbnRlcmZhY2UgdG8gZmlu aXNoIGJyZWFrcG9pbnRzCisKKyAgIENvcHlyaWdodCAoQykgMjAxMSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwor CisKKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJleGNlcHRpb25z LmgiCisjaW5jbHVkZSAicHl0aG9uLWludGVybmFsLmgiCisjaW5jbHVkZSAi YnJlYWtwb2ludC5oIgorI2luY2x1ZGUgImZyYW1lLmgiCisjaW5jbHVkZSAi Z2RidGhyZWFkLmgiCisjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorI2luY2x1 ZGUgImxhbmd1YWdlLmgiCisjaW5jbHVkZSAib2JzZXJ2ZXIuaCIKKyNpbmNs dWRlICJpbmZlcmlvci5oIgorCitzdGF0aWMgUHlUeXBlT2JqZWN0IGZpbmlz aF9icmVha3BvaW50X29iamVjdF90eXBlOworCisvKiBGdW5jdGlvbiB0aGF0 IGlzIGNhbGxlZCB3aGVuIGEgUHl0aG9uIGZpbmlzaCBicCBpcyBmb3VuZCBv dXQgb2Ygc2NvcGUuICAqLworc3RhdGljIGNoYXIgKiBjb25zdCBvdXRvZnNj b3BlX2Z1bmMgPSAib3V0X29mX3Njb3BlIjsKKworLyogc3RydWN0IGltcGxl bWVudGluZyB0aGUgZ2RiLkZpbmlzaEJyZWFrcG9pbnQgb2JqZWN0IGJ5IGV4 dGVuZGluZworICAgdGhlIGdkYi5CcmVha3BvaW50IGNsYXNzLiAgKi8KK3N0 cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QKK3sKKyAgLyogZ2RiLkJy ZWFrcG9pbnQgYmFzZSBjbGFzcy4gICovCisgIGJyZWFrcG9pbnRfb2JqZWN0 IHB5X2JwOworICAvKiBnZGIuVHlwZSBvYmplY3Qgb2YgdGhlIHZhbHVlIHJl dHVybiBieSB0aGUgYnJlYWtwb2ludGVkIGZ1bmN0aW9uLgorICAgICBNYXkg YmUgTlVMTCBpZiBubyBkZWJ1ZyBpbmZvcm1hdGlvbiB3YXMgYXZhaWxhYmxl IG9yIHJldHVybiB0eXBlCisgICAgIHdhcyBWT0lELiAgKi8KKyAgUHlPYmpl Y3QgKnJldHVybl90eXBlOworICAvKiBnZGIuVHlwZSBvYmplY3Qgb2YgdGhl IGZ1bmN0aW9uIGZpbmlzaGVkIGJ5IHRoaXMgYnJlYWtwb2ludC4gIFdpbGwg YmUKKyAgICAgTlVMTCBpZiByZXR1cm5fdHlwZSBpcyBOVUxMLiAgKi8KKyAg UHlPYmplY3QgKmZ1bmN0aW9uX3R5cGU7CisgIC8qIFdoZW4gc3RvcHBlZCBh dCB0aGlzIEZpbmlzaEJyZWFrcG9pbnQsIGdkYi5WYWx1ZSBvYmplY3QgcmV0 dXJuZWQgYnkKKyAgICAgdGhlIGZ1bmN0aW9uOyBQeV9Ob25lIGlmIHRoZSB2 YWx1ZSBpcyBub3QgY29tcHV0YWJsZTsgTlVMTCBpZiBHREIgaXMKKyAgICAg bm90IHN0b3BwZWQgYXQgYSBGaW5pc2hCcmVha3BvaW50LiAgKi8KKyAgUHlP YmplY3QgKnJldHVybl92YWx1ZTsKK307CisKKy8qIFB5dGhvbiBmdW5jdGlv biB0byBnZXQgdGhlICdyZXR1cm5fdmFsdWUnIGF0dHJpYnV0ZSBvZgorICAg RmluaXNoQnJlYWtwb2ludC4gICovCisKK3N0YXRpYyBQeU9iamVjdCAqCiti cGZpbmlzaHB5X2dldF9yZXR1cm52YWx1ZSAoUHlPYmplY3QgKnNlbGYsIHZv aWQgKmNsb3N1cmUpCit7CisgIHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9v YmplY3QgKnNlbGZfZmluaXNoYnAgPQorICAgICAgKHN0cnVjdCBmaW5pc2hf YnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKworICBpZiAoIXNlbGZfZmlu aXNoYnAtPnJldHVybl92YWx1ZSkKKyAgICBQeV9SRVRVUk5fTk9ORTsKKwor ICBQeV9JTkNSRUYgKHNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZSk7Cisg IHJldHVybiBzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWU7Cit9CisKKy8q IERlYWxsb2NhdGUgRmluaXNoQnJlYWtwb2ludCBvYmplY3QuICAqLworCitz dGF0aWMgdm9pZAorYnBmaW5pc2hweV9kZWFsbG9jIChQeU9iamVjdCAqc2Vs ZikKK3sKKyAgc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqc2Vs Zl9icGZpbmlzaCA9CisgICAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9p bnRfb2JqZWN0ICopIHNlbGY7CisKKyAgUHlfWERFQ1JFRiAoc2VsZl9icGZp bmlzaC0+ZnVuY3Rpb25fdHlwZSk7CisgIFB5X1hERUNSRUYgKHNlbGZfYnBm aW5pc2gtPnJldHVybl90eXBlKTsKKyAgUHlfWERFQ1JFRiAoc2VsZl9icGZp bmlzaC0+cmV0dXJuX3ZhbHVlKTsKK30KKworLyogVHJpZ2dlcmVkIHdoZW4g Z2RicHlfc2hvdWxkX3N0b3AgaXMgYWJvdXQgdG8gZXhlY3V0ZSB0aGUgYHN0 b3AnIGNhbGxiYWNrCisgICBvZiB0aGUgZ2RiLkZpbmlzaEJyZWFrcG9pbnQg b2JqZWN0IEJQX09CSi4gIFdpbGwgY29tcHV0ZSBhbmQgY2FjaGUgdGhlCisg ICBgcmV0dXJuX3ZhbHVlJywgaWYgcG9zc2libGUuICAqLworCit2b2lkCiti cGZpbmlzaHB5X3ByZV9zdG9wX2hvb2sgKHN0cnVjdCBicmVha3BvaW50X29i amVjdCAqYnBfb2JqKQoreworICBzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRf b2JqZWN0ICpzZWxmX2ZpbmlzaGJwID0KKyAgICAgICAgKHN0cnVjdCBmaW5p c2hfYnJlYWtwb2ludF9vYmplY3QgKikgYnBfb2JqOworICB2b2xhdGlsZSBz dHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisKKyAgLyogQ2FuIGNvbXB1 dGUgcmV0dXJuX3ZhbHVlIG9ubHkgb25jZS4gICovCisgIGdkYl9hc3NlcnQg KCFzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWUpOworCisgIGlmICghc2Vs Zl9maW5pc2hicC0+cmV0dXJuX3R5cGUpCisgICAgcmV0dXJuOworCisgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAgeworICAg ICAgc3RydWN0IHZhbHVlICpyZXQgPQorICAgICAgICAgIGdldF9yZXR1cm5f dmFsdWUgKHR5cGVfb2JqZWN0X3RvX3R5cGUgKHNlbGZfZmluaXNoYnAtPmZ1 bmN0aW9uX3R5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVfb2JqZWN0X3RvX3R5cGUgKHNlbGZfZmluaXNoYnAtPnJldHVybl90eXBl KSk7CisKKyAgICAgIGlmIChyZXQpCisgICAgICAgIHsKKyAgICAgICAgICBz ZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWUgPSB2YWx1ZV90b192YWx1ZV9v YmplY3QgKHJldCk7CisgICAgICAgICAgaWYgKCFzZWxmX2ZpbmlzaGJwLT5y ZXR1cm5fdmFsdWUpCisgICAgICAgICAgICAgIGdkYnB5X3ByaW50X3N0YWNr ICgpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg ICAgICBQeV9JTkNSRUYgKFB5X05vbmUpOworICAgICAgICAgIHNlbGZfZmlu aXNoYnAtPnJldHVybl92YWx1ZSA9IFB5X05vbmU7CisgICAgICAgIH0KKyAg ICB9CisgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKyAgICB7CisgICAgICBn ZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKyAgICAgIGdkYnB5 X3ByaW50X3N0YWNrICgpOworICAgIH0KK30KKworLyogVHJpZ2dlcmVkIHdo ZW4gZ2RicHlfc2hvdWxkX3N0b3AgaGFzIHRyaWdnZXJlZCB0aGUgYHN0b3An IGNhbGxiYWNrCisgICBvZiB0aGUgZ2RiLkZpbmlzaEJyZWFrcG9pbnQgb2Jq ZWN0IEJQX09CSi4gICovCisKK3ZvaWQKK2JwZmluaXNocHlfcG9zdF9zdG9w X2hvb2sgKHN0cnVjdCBicmVha3BvaW50X29iamVjdCAqYnBfb2JqKQorewor ICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisKKyAg VFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7Cisg ICAgICAvKiBDYW4ndCBkZWxldGUgaXQgaGVyZSwgYnV0IGl0IHdpbGwgYmUg cmVtb3ZlZCBhdCB0aGUgbmV4dCBzdG9wLiAgKi8KKyAgICAgIGRpc2FibGVf YnJlYWtwb2ludCAoYnBfb2JqLT5icCk7CisgICAgICBnZGJfYXNzZXJ0IChi cF9vYmotPmJwLT5kaXNwb3NpdGlvbiA9PSBkaXNwX2RlbCk7CisgICAgfQor ICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisgICAgeworICAgICAgZ2RicHlf Y29udmVydF9leGNlcHRpb24gKGV4Y2VwdCk7CisgICAgICBnZGJweV9wcmlu dF9zdGFjayAoKTsKKyAgICB9Cit9CisKKy8qIFB5dGhvbiBmdW5jdGlvbiB0 byBjcmVhdGUgYSBuZXcgYnJlYWtwb2ludC4gICovCisKK3N0YXRpYyBpbnQK K2JwZmluaXNocHlfaW5pdCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICph cmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICBzdGF0aWMgY2hhciAqa2V5 d29yZHNbXSA9IHsgImZyYW1lIiwgImludGVybmFsIiwgTlVMTCB9OworICBz dHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2JwZmluaXNo ID0KKyAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICop IHNlbGY7CisgIGludCB0eXBlID0gYnBfYnJlYWtwb2ludDsKKyAgUHlPYmpl Y3QgKmZyYW1lX29iaiA9IE5VTEw7CisgIHN0cnVjdCBmcmFtZV9pbmZvICpm cmFtZSwgKnByZXZfZnJhbWUgPSBOVUxMOworICBzdHJ1Y3QgZnJhbWVfaWQg ZnJhbWVfaWQ7CisgIFB5T2JqZWN0ICppbnRlcm5hbCA9IE5VTEw7CisgIGlu dCBpbnRlcm5hbF9icCA9IDA7CisgIENPUkVfQUREUiBmaW5pc2hfcGMsIHBj OworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7Cisg IGNoYXIgKmFkZHJfc3RyLCBzbWFsbF9idWZbMTAwXTsKKyAgc3RydWN0IHN5 bWJvbCAqZnVuY3Rpb247CisKKyAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5k S2V5d29yZHMgKGFyZ3MsIGt3YXJncywgInxPTyIsIGtleXdvcmRzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lX29iaiwg JmludGVybmFsKSkKKyAgICByZXR1cm4gLTE7CisKKyAgLyogRGVmYXVsdCB0 byBnZGIubmV3ZXN0X2ZyYW1lIGlmIG5lY2Vzc2FyeS4gICovCisgIGlmICgh ZnJhbWVfb2JqKQorICAgIGZyYW1lX29iaiA9IGdkYnB5X25ld2VzdF9mcmFt ZSAoTlVMTCwgTlVMTCk7CisgIGVsc2UKKyAgICBQeV9JTkNSRUYgKGZyYW1l X29iaik7CisKKyAgZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5m byAoZnJhbWVfb2JqKTsKKyAgUHlfREVDUkVGIChmcmFtZV9vYmopOworCisg IGlmIChmcmFtZSA9PSBOVUxMKQorICAgIGdvdG8gaW52YWxpZF9mcmFtZTsK KyAgCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisg ICAgeworICAgICAgcHJldl9mcmFtZSA9IGdldF9wcmV2X2ZyYW1lIChmcmFt ZSk7CisgICAgICBpZiAocHJldl9mcmFtZSA9PSAwKQorICAgICAgICB7Cisg ICAgICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLCBf KCJcIkZpbmlzaEJyZWFrcG9pbnRcIiBub3QgIiAgIFwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lYW5pbmdm dWwgaW4gdGhlIG91dGVybW9zdCAiXAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhbWUuIikpOworICAgICAg ICB9CisgICAgICBlbHNlIGlmIChnZXRfZnJhbWVfdHlwZSAocHJldl9mcmFt ZSkgPT0gRFVNTVlfRlJBTUUpCisgICAgICAgIHsKKyAgICAgICAgICBQeUVy cl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsIF8oIlwiRmluaXNoQnJl YWtwb2ludFwiIGNhbm5vdCAiXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiYmUgc2V0IG9uIGEgZHVtbXkgZnJh bWUuIikpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAg ICAgICAgICBmcmFtZV9pZCA9IGdldF9mcmFtZV9pZCAocHJldl9mcmFtZSk7 CisgICAgICAgICAgaWYgKGZyYW1lX2lkX2VxIChmcmFtZV9pZCwgbnVsbF9m cmFtZV9pZCkpCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhj X1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o IkludmFsaWQgSUQgZm9yIHRoZSBgZnJhbWUnIG9iamVjdC4iKSk7CisgICAg ICAgIH0KKyAgICB9CisgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKyAgICB7 CisgICAgICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKyAg ICAgIHJldHVybiAtMTsKKyAgICB9CisgIGVsc2UgaWYgKFB5RXJyX09jY3Vy cmVkICgpKQorICAgIHJldHVybiAtMTsKKworICBpZiAoaW50ZXJuYWwpCisg ICAgeworICAgICAgaW50ZXJuYWxfYnAgPSBQeU9iamVjdF9Jc1RydWUgKGlu dGVybmFsKTsKKyAgICAgIGlmIChpbnRlcm5hbF9icCA9PSAtMSkgCisgICAg ICAgIHsKKyAgICAgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVl RXJyb3IsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHZh bHVlIG9mIGBpbnRlcm5hbCcgbXVzdCBiZSBhIGJvb2xlYW4uIikpOworICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBG aW5kIHRoZSBmdW5jdGlvbiB3ZSB3aWxsIHJldHVybiBmcm9tLiAgKi8KKyAg c2VsZl9icGZpbmlzaC0+cmV0dXJuX3R5cGUgPSBOVUxMOworICBzZWxmX2Jw ZmluaXNoLT5mdW5jdGlvbl90eXBlID0gTlVMTDsKKworICBUUllfQ0FUQ0gg KGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAgICAgIGlmIChn ZXRfZnJhbWVfcGNfaWZfYXZhaWxhYmxlIChmcmFtZSwgJnBjKSkKKyAgICAg ICAgeworICAgICAgICAgIGZ1bmN0aW9uID0gZmluZF9wY19mdW5jdGlvbiAo cGMpOworICAgICAgICAgIGlmIChmdW5jdGlvbiAhPSBOVUxMKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICBzdHJ1Y3QgdHlwZSAqcmV0X3R5cGUg PQorICAgICAgICAgICAgICAgICAgVFlQRV9UQVJHRVRfVFlQRSAoU1lNQk9M X1RZUEUgKGZ1bmN0aW9uKSk7CisKKyAgICAgICAgICAgICAgLyogUmVtZW1i ZXIgb25seSBub24tdm9pZCByZXR1cm4gdHlwZXMuICAqLworICAgICAgICAg ICAgICBpZiAoVFlQRV9DT0RFIChyZXRfdHlwZSkgIT0gVFlQRV9DT0RFX1ZP SUQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyog SWdub3JlIFB5dGhvbiBlcnJvcnMgYXQgdGhpcyBzdGFnZS4gICovCisgICAg ICAgICAgICAgICAgICBzZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IHR5 cGVfdG9fdHlwZV9vYmplY3QgKHJldF90eXBlKTsKKyAgICAgICAgICAgICAg ICAgIFB5RXJyX0NsZWFyICgpOworICAgICAgICAgICAgICAgICAgc2VsZl9i cGZpbmlzaC0+ZnVuY3Rpb25fdHlwZSA9CisgICAgICAgICAgICAgICAgICAg ICAgdHlwZV90b190eXBlX29iamVjdCAoU1lNQk9MX1RZUEUgKGZ1bmN0aW9u KSk7CisgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhciAoKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 CisgIGlmIChleGNlcHQucmVhc29uIDwgMAorICAgICAgfHwgIXNlbGZfYnBm aW5pc2gtPnJldHVybl90eXBlIHx8ICFzZWxmX2JwZmluaXNoLT5mdW5jdGlv bl90eXBlKQorICAgIHsKKyAgICAgIC8qIFdvbid0IGJlIGFibGUgdG8gY29t cHV0ZSByZXR1cm4gdmFsdWUuICAqLworICAgICAgUHlfWERFQ1JFRiAoc2Vs Zl9icGZpbmlzaC0+cmV0dXJuX3R5cGUpOworICAgICAgUHlfWERFQ1JFRiAo c2VsZl9icGZpbmlzaC0+ZnVuY3Rpb25fdHlwZSk7CisKKyAgICAgIHNlbGZf YnBmaW5pc2gtPnJldHVybl90eXBlID0gTlVMTDsKKyAgICAgIHNlbGZfYnBm aW5pc2gtPmZ1bmN0aW9uX3R5cGUgPSBOVUxMOworICAgIH0KKworICBicHB5 X3BlbmRpbmdfb2JqZWN0ID0gJnNlbGZfYnBmaW5pc2gtPnB5X2JwOworICBi cHB5X3BlbmRpbmdfb2JqZWN0LT5udW1iZXIgPSAtMTsKKyAgYnBweV9wZW5k aW5nX29iamVjdC0+YnAgPSBOVUxMOworCisgIFRSWV9DQVRDSCAoZXhjZXB0 LCBSRVRVUk5fTUFTS19BTEwpCisgICAgeworICAgICAgLyogU2V0IGEgYnJl YWtwb2ludCBvbiB0aGUgcmV0dXJuIGFkZHJlc3MuICAqLworICAgICAgZmlu aXNoX3BjID0gZ2V0X2ZyYW1lX3BjIChwcmV2X2ZyYW1lKTsKKyAgICAgIHNw cmludGYgKHNtYWxsX2J1ZiwgIiolcyIsIGhleF9zdHJpbmcgKGZpbmlzaF9w YykpOworICAgICAgYWRkcl9zdHIgPSBzbWFsbF9idWY7CisKKyAgICAgIGNy ZWF0ZV9icmVha3BvaW50IChweXRob25fZ2RiYXJjaCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBhZGRyX3N0ciwgTlVMTCwgLTEsCisgICAgICAgICAg ICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAx IC8qdGVtcF9mbGFnKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgYnBf YnJlYWtwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAg ICAgICAgICAgICAgICAgICAgICAgIEFVVE9fQk9PTEVBTl9UUlVFLAorICAg ICAgICAgICAgICAgICAgICAgICAgICZia3B0X2JyZWFrcG9pbnRfb3BzLAor ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIGludGVybmFsX2JwKTsK KyAgICB9CisgIEdEQl9QWV9TRVRfSEFORExFX0VYQ0VQVElPTiAoZXhjZXB0 KTsKKyAgCisgIHNlbGZfYnBmaW5pc2gtPnB5X2JwLmJwLT5mcmFtZV9pZCA9 IGZyYW1lX2lkOworICBzZWxmX2JwZmluaXNoLT5weV9icC5pc19maW5pc2hf YnAgPSAxOworICAKKyAgcmV0dXJuIDA7CisgIAorIGludmFsaWRfZnJhbWU6 CisgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwgCisgICAg ICAgICAgICAgICAgICAgXygiSW52YWxpZCBJRCBmb3IgdGhlIGBmcmFtZScg b2JqZWN0LiIpKTsKKyAgcmV0dXJuIC0xOworfQorCisvKiBDYWxsZWQgd2hl biBHREIgbm90aWNlcyB0aGF0IHRoZSBmaW5pc2ggYnJlYWtwb2ludCBCUF9P QkogaXMgb3V0IG9mCisgICB0aGUgY3VycmVudCBjYWxsc3RhY2suICBUcmln Z2VycyB0aGUgbWV0aG9kIE9VVF9PRl9TQ09QRSBpZiBpbXBsZW1lbnRlZCwK KyAgIHRoZW4gZGVsZXRlIHRoZSBicmVha3BvaW50LiAgKi8KKworc3RhdGlj IHZvaWQKK2JwZmluaXNocHlfb3V0X29mX3Njb3BlIChzdHJ1Y3QgZmluaXNo X2JyZWFrcG9pbnRfb2JqZWN0ICpicGZpbmlzaF9vYmopCit7CisgIHZvbGF0 aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKKyAgYnJlYWtwb2lu dF9vYmplY3QgKmJwX29iaiA9IChicmVha3BvaW50X29iamVjdCAqKSBicGZp bmlzaF9vYmo7CisgIFB5T2JqZWN0ICpweV9vYmogPSAoUHlPYmplY3QgKikg YnBfb2JqOworCisgIGlmIChicGZpbmlzaF9vYmotPnB5X2JwLmJwLT5lbmFi bGVfc3RhdGUgPT0gYnBfZW5hYmxlZAorICAgICAgJiYgUHlPYmplY3RfSGFz QXR0clN0cmluZyAocHlfb2JqLCBvdXRvZnNjb3BlX2Z1bmMpKQorICAgIHsK KyAgICAgIGlmICghUHlPYmplY3RfQ2FsbE1ldGhvZCAocHlfb2JqLCBvdXRv ZnNjb3BlX2Z1bmMsIE5VTEwpKQorICAgICAgICAgIGdkYnB5X3ByaW50X3N0 YWNrICgpOworICAgIH0KKworICBkZWxldGVfYnJlYWtwb2ludCAoYnBmaW5p c2hfb2JqLT5weV9icC5icCk7Cit9CisKKy8qIENhbGxiYWNrIGZvciBgYnBm aW5pc2hweV9kZXRlY3Rfb3V0X3Njb3BlJy4gIFRyaWdnZXJzIFB5dGhvbidz CisgICBgQi0+b3V0X29mX3Njb3BlJyBmdW5jdGlvbiBpZiBCIGlzIGEgRmlu aXNoQnJlYWtwb2ludCBvdXQgb2YgaXRzIHNjb3BlLiAgKi8KKworc3RhdGlj IGludAorYnBmaW5pc2hweV9kZXRlY3Rfb3V0X3Njb3BlX2NiIChzdHJ1Y3Qg YnJlYWtwb2ludCAqYiwgdm9pZCAqYXJncykKK3sKKyAgdm9sYXRpbGUgc3Ry dWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworICBzdHJ1Y3QgYnJlYWtwb2lu dCAqYnBfc3RvcHBlZCA9IChzdHJ1Y3QgYnJlYWtwb2ludCAqKSBhcmdzOwor ICBQeU9iamVjdCAqcHlfYnAgPSAoUHlPYmplY3QgKikgYi0+cHlfYnBfb2Jq ZWN0OworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2FyY2ggPSBiLT5nZGJhcmNoID8g Yi0+Z2RiYXJjaCA6IGdldF9jdXJyZW50X2FyY2ggKCk7CisgIAorICAvKiBU cmlnZ2VyIG91dF9vZl9zY29wZSBpZiB0aGlzIGlzIGEgRmluaXNoQnJlYWtw b2ludCBhbmQgaXRzIGZyYW1lIGlzCisgICAgIG5vdCBhbnltb3JlIGluIHRo ZSBjdXJyZW50IGNhbGxzdGFjay4gICovCisgIGlmIChweV9icCAhPSBOVUxM ICYmIGItPnB5X2JwX29iamVjdC0+aXNfZmluaXNoX2JwKQorICAgIHsKKyAg ICAgIHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKmZpbmlzaF9i cCA9CisgICAgICAgICAgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmpl Y3QgKikgcHlfYnA7CisKKyAgICAgIC8qIENoZWNrIHNjb3BlIGlmIG5vdCBj dXJyZW50bHkgc3RvcHBlZCBhdCB0aGUgRmluaXNoQnJlYWtwb2ludC4gICov CisgICAgICBpZiAoYiAhPSBicF9zdG9wcGVkKQorICAgICAgICB7CisgICAg ICAgICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGItPnBzcGFjZSA9PSBj dXJyZW50X2luZmVyaW9yICgpLT5wc3BhY2UKKyAgICAgICAgICAgICAgICAg JiYgKCF0YXJnZXRfaGFzX3JlZ2lzdGVycworICAgICAgICAgICAgICAgICAg ICAgfHwgZnJhbWVfZmluZF9ieV9pZCAoYi0+ZnJhbWVfaWQpID09IE5VTEwp KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnBmaW5pc2hw eV9vdXRfb2Zfc2NvcGUgKGZpbmlzaF9icCk7CisgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoZXhjZXB0LnJlYXNvbiA8 IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGdkYnB5X2NvbnZl cnRfZXhjZXB0aW9uIChleGNlcHQpOworICAgICAgICAgICAgICBnZGJweV9w cmludF9zdGFjayAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKworICByZXR1cm4gMDsKK30KKworLyogQXR0YWNoZWQgdG8gYHN0b3An IG5vdGlmaWNhdGlvbnMsIGNoZWNrIGlmIHRoZSBleGVjdXRpb24gaGFzIHJ1 bgorICAgb3V0IG9mIHRoZSBzY29wZSBvZiBhbnkgRmluaXNoQnJlYWtwb2lu dCBiZWZvcmUgaXQgaGFzIGJlZW4gaGl0LiAgKi8KKworc3RhdGljIHZvaWQK K2JwZmluaXNocHlfaGFuZGxlX3N0b3AgKHN0cnVjdCBicHN0YXRzICpicywg aW50IHByaW50X2ZyYW1lKQoreworICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51 cCA9IGVuc3VyZV9weXRob25fZW52IChnZXRfY3VycmVudF9hcmNoICgpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjdXJyZW50X2xhbmd1YWdlKTsKKworICBpdGVyYXRlX292ZXJfYnJlYWtw b2ludHMgKGJwZmluaXNocHlfZGV0ZWN0X291dF9zY29wZV9jYiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicyA9PSBOVUxMID8gTlVMTCA6IGJz LT5icmVha3BvaW50X2F0KTsKKworICBkb19jbGVhbnVwcyAoY2xlYW51cCk7 Cit9CisKKy8qIEF0dGFjaGVkIHRvIGBleGl0JyBub3RpZmljYXRpb25zLCB0 cmlnZ2VycyBhbGwgdGhlIG5lY2Vzc2FyeSBvdXQgb2YKKyAgIHNjb3BlIG5v dGlmaWNhdGlvbnMuICAqLworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9o YW5kbGVfZXhpdCAoc3RydWN0IGluZmVyaW9yICppbmYpCit7CisgIHN0cnVj dCBjbGVhbnVwICpjbGVhbnVwID0gZW5zdXJlX3B5dGhvbl9lbnYgKHRhcmdl dF9nZGJhcmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjdXJyZW50X2xhbmd1YWdlKTsKKworICBpdGVyYXRl X292ZXJfYnJlYWtwb2ludHMgKGJwZmluaXNocHlfZGV0ZWN0X291dF9zY29w ZV9jYiwgTlVMTCk7CisKKyAgZG9fY2xlYW51cHMgKGNsZWFudXApOworfQor CisvKiBJbml0aWFsaXplIHRoZSBQeXRob24gZmluaXNoIGJyZWFrcG9pbnQg Y29kZS4gICovCisKK3ZvaWQKK2dkYnB5X2luaXRpYWxpemVfZmluaXNoYnJl YWtwb2ludHMgKHZvaWQpCit7CisgIGlmIChQeVR5cGVfUmVhZHkgKCZmaW5p c2hfYnJlYWtwb2ludF9vYmplY3RfdHlwZSkgPCAwKQorICAgICAgcmV0dXJu OworICAKKyAgUHlfSU5DUkVGICgmZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0 X3R5cGUpOworICBQeU1vZHVsZV9BZGRPYmplY3QgKGdkYl9tb2R1bGUsICJG aW5pc2hCcmVha3BvaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAoUHlP YmplY3QgKikgJmZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBlKTsKKyAg ICAKKyAgb2JzZXJ2ZXJfYXR0YWNoX25vcm1hbF9zdG9wIChicGZpbmlzaHB5 X2hhbmRsZV9zdG9wKTsKKyAgb2JzZXJ2ZXJfYXR0YWNoX2luZmVyaW9yX2V4 aXQgKGJwZmluaXNocHlfaGFuZGxlX2V4aXQpOworfQorCitzdGF0aWMgUHlH ZXRTZXREZWYgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X2dldHNldFtdID0g eworICB7ICJyZXR1cm5fdmFsdWUiLCBicGZpbmlzaHB5X2dldF9yZXR1cm52 YWx1ZSwgTlVMTCwKKyAgImdkYi5WYWx1ZSBvYmplY3QgcmVwcmVzZW50aW5n IHRoZSByZXR1cm4gdmFsdWUsIGlmIGFueS4gXAorTm9uZSBvdGhlcndpc2Uu IiwgTlVMTCB9LAorICAgIHsgTlVMTCB9ICAvKiBTZW50aW5lbC4gICovCit9 OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IGZpbmlzaF9icmVha3BvaW50X29i amVjdF90eXBlID0KK3sKKyAgUHlPYmplY3RfSEVBRF9JTklUIChOVUxMKQor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qb2Jfc2l6ZSov CisgICJnZGIuRmluaXNoQnJlYWtwb2ludCIsICAgICAgICAgLyp0cF9uYW1l Ki8KKyAgc2l6ZW9mIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0 KSwgIC8qdHBfYmFzaWNzaXplKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgYnBmaW5pc2hweV9kZWFs bG9jLCAgICAgICAgICAgICAvKnRwX2RlYWxsb2MqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBh cmUqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBf cmVwciovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0 cF9hc19udW1iZXIqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRy byAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBf YXNfYnVmZmVyKi8KKyAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFH U19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAiR0RCIGZpbmlzaCBicmVh a3BvaW50IG9iamVjdCIsIC8qIHRwX2RvYyAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29t cGFyZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMg Ki8KKyAgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X2dldHNldCwvKiB0cF9n ZXRzZXQgKi8KKyAgJmJyZWFrcG9pbnRfb2JqZWN0X3R5cGUsICAgICAgICAv KiB0cF9iYXNlICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfZGljdCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8K KyAgYnBmaW5pc2hweV9pbml0LCAgICAgICAgICAgICAgICAvKiB0cF9pbml0 ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf YWxsb2MgKi8KKyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9uZXcgKi8KK307CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LWZy YW1lLmMgYi9nZGIvcHl0aG9uL3B5LWZyYW1lLmMKaW5kZXggMjAwNjRjYS4u YzMzNGY2MyAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weS1mcmFtZS5jCisr KyBiL2dkYi9weXRob24vcHktZnJhbWUuYwpAQCAtNjAsOSArNjAsMTAgQEAg c3RhdGljIFB5VHlwZU9iamVjdCBmcmFtZV9vYmplY3RfdHlwZTsKICAgIG9i amVjdC4gIElmIHRoZSBmcmFtZSBkb2Vzbid0IGV4aXN0IGFueW1vcmUgKHRo ZSBmcmFtZSBpZCBkb2Vzbid0CiAgICBjb3JyZXNwb25kIHRvIGFueSBmcmFt ZSBpbiB0aGUgaW5mZXJpb3IpLCByZXR1cm5zIE5VTEwuICAqLwogCi1zdGF0 aWMgc3RydWN0IGZyYW1lX2luZm8gKgotZnJhbWVfb2JqZWN0X3RvX2ZyYW1l X2luZm8gKGZyYW1lX29iamVjdCAqZnJhbWVfb2JqKQorc3RydWN0IGZyYW1l X2luZm8gKgorZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKFB5T2JqZWN0 ICpvYmopCiB7CisgIGZyYW1lX29iamVjdCAqZnJhbWVfb2JqID0gKGZyYW1l X29iamVjdCAqKSBvYmo7ICAKICAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1l OwogCiAgIGZyYW1lID0gZnJhbWVfZmluZF9ieV9pZCAoZnJhbWVfb2JqLT5m cmFtZV9pZCk7CkBAIC0xMDYsNyArMTA3LDcgQEAgZnJhcHlfaXNfdmFsaWQg KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FU Q0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIGZy YW1lID0gZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKChmcmFtZV9vYmpl Y3QgKikgc2VsZik7CisgICAgICBmcmFtZSA9IGZyYW1lX29iamVjdF90b19m cmFtZV9pbmZvIChzZWxmKTsKICAgICB9CiAgIEdEQl9QWV9IQU5ETEVfRVhD RVBUSU9OIChleGNlcHQpOwogCkBAIC0xMzAsNyArMTMxLDcgQEAgZnJhcHlf bmFtZSAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAg ICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxm LCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBm cmFtZSk7CiAKICAgICAgIGZpbmRfZnJhbWVfZnVubmFtZSAoZnJhbWUsICZu YW1lLCAmbGFuZywgTlVMTCk7CiAgICAgfQpAQCAtMTU5LDcgKzE2MCw3IEBA IGZyYXB5X3R5cGUgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykK IAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAg IHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3Qg Kikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAo c2VsZiwgZnJhbWUpOwogCiAgICAgICB0eXBlID0gZ2V0X2ZyYW1lX3R5cGUg KGZyYW1lKTsKICAgICB9CkBAIC0xODAsNyArMTgxLDcgQEAgZnJhcHlfdW53 aW5kX3N0b3BfcmVhc29uIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFy Z3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkK ICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2Jq ZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFM SUQgKHNlbGYsIGZyYW1lKTsKICAgICB9CiAgIEdEQl9QWV9IQU5ETEVfRVhD RVBUSU9OIChleGNlcHQpOwogCkBAIC0yMDEsNyArMjAyLDcgQEAgZnJhcHlf cGMgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllf Q0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwg ZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJh bWUpOwogCiAgICAgICBwYyA9IGdldF9mcmFtZV9wYyAoZnJhbWUpOwogICAg IH0KQEAgLTIyMiw3ICsyMjMsNyBAQCBmcmFweV9ibG9jayAoUHlPYmplY3Qg KnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0 LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlS RV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAg ICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAgICAgICBi bG9jayA9IGdldF9mcmFtZV9ibG9jayAoZnJhbWUsIE5VTEwpOwogICAgIH0K ICAgR0RCX1BZX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7CkBAIC0yNjMs NyArMjY0LDcgQEAgZnJhcHlfZnVuY3Rpb24gKFB5T2JqZWN0ICpzZWxmLCBQ eU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJO X01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQg KChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlf UkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBzeW0gPSBm aW5kX3BjX2Z1bmN0aW9uIChnZXRfZnJhbWVfYWRkcmVzc19pbl9ibG9jayAo ZnJhbWUpKTsKICAgICB9CkBAIC0zMzAsNyArMzMxLDcgQEAgZnJhcHlfb2xk ZXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllf Q0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwg ZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJh bWUpOwogCiAgICAgICBwcmV2ID0gZ2V0X3ByZXZfZnJhbWUgKGZyYW1lKTsK ICAgICAgIGlmIChwcmV2KQpAQCAtMzU5LDcgKzM2MCw3IEBAIGZyYXB5X25l d2VyIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZ X0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAg ICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYs IGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZy YW1lKTsKIAogICAgICAgbmV4dCA9IGdldF9uZXh0X2ZyYW1lIChmcmFtZSk7 CiAgICAgICBpZiAobmV4dCkKQEAgLTM4OCw3ICszODksNyBAQCBmcmFweV9m aW5kX3NhbCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAg IFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewot ICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBz ZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxm LCBmcmFtZSk7CiAKICAgICAgIGZpbmRfZnJhbWVfc2FsIChmcmFtZSwgJnNh bCk7CiAgICAgICBzYWxfb2JqID0gc3ltdGFiX2FuZF9saW5lX3RvX3NhbF9v YmplY3QgKHNhbCk7CkBAIC00NDQsNyArNDQ1LDcgQEAgZnJhcHlfcmVhZF92 YXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICAgICAg VFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKIAl7Ci0JICBG UkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZy YW1lKTsKKwkgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsK IAogCSAgaWYgKCFibG9jaykKIAkgICAgYmxvY2sgPSBnZXRfZnJhbWVfYmxv Y2sgKGZyYW1lLCBOVUxMKTsKQEAgLTQ3Miw3ICs0NzMsNyBAQCBmcmFweV9y ZWFkX3ZhciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAg IFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewot ICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBz ZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxm LCBmcmFtZSk7CiAKICAgICAgIHZhbCA9IHJlYWRfdmFyX3ZhbHVlICh2YXIs IGZyYW1lKTsKICAgICB9CkBAIC00ODcsMTIgKzQ4OCwxMSBAQCBzdGF0aWMg UHlPYmplY3QgKgogZnJhcHlfc2VsZWN0IChQeU9iamVjdCAqc2VsZiwgUHlP YmplY3QgKmFyZ3MpCiB7CiAgIHN0cnVjdCBmcmFtZV9pbmZvICpmaTsKLSAg ZnJhbWVfb2JqZWN0ICpmcmFtZSA9IChmcmFtZV9vYmplY3QgKikgc2VsZjsK ICAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OwogCiAg IFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewot ICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoZnJhbWUsIGZpKTsKKyAgICAg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZpKTsKIAogICAgICAgc2Vs ZWN0X2ZyYW1lIChmaSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhv bi9weXRob24taW50ZXJuYWwuaCBiL2dkYi9weXRob24vcHl0aG9uLWludGVy bmFsLmgKaW5kZXggZWYzOWQ1ZC4uMWJhNzEzMyAxMDA2NDQKLS0tIGEvZ2Ri L3B5dGhvbi9weXRob24taW50ZXJuYWwuaAorKysgYi9nZGIvcHl0aG9uL3B5 dGhvbi1pbnRlcm5hbC5oCkBAIC0xMjAsOSArMTIwLDUwIEBAIGV4dGVybiBQ eVR5cGVPYmplY3Qgc3ltYm9sX29iamVjdF90eXBlOwogZXh0ZXJuIFB5VHlw ZU9iamVjdCBldmVudF9vYmplY3RfdHlwZTsKIGV4dGVybiBQeVR5cGVPYmpl Y3QgZXZlbnRzX29iamVjdF90eXBlOwogZXh0ZXJuIFB5VHlwZU9iamVjdCBz dG9wX2V2ZW50X29iamVjdF90eXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBi cmVha3BvaW50X29iamVjdF90eXBlOworCit0eXBlZGVmIHN0cnVjdCBicmVh a3BvaW50X29iamVjdAoreworICBQeU9iamVjdF9IRUFECisKKyAgLyogVGhl IGJyZWFrcG9pbnQgbnVtYmVyIGFjY29yZGluZyB0byBnZGIuICAqLworICBp bnQgbnVtYmVyOworCisgIC8qIFRoZSBnZGIgYnJlYWtwb2ludCBvYmplY3Qs IG9yIE5VTEwgaWYgdGhlIGJyZWFrcG9pbnQgaGFzIGJlZW4KKyAgICAgZGVs ZXRlZC4gICovCisgIHN0cnVjdCBicmVha3BvaW50ICpicDsKKworICAvKiAx IGlzIHRoaXMgaXMgYSBGaW5pc2hCcmVha3BvaW50IG9iamVjdCwgMCBvdGhl cndpc2UuICAqLworICBpbnQgaXNfZmluaXNoX2JwOworfSBicmVha3BvaW50 X29iamVjdDsKKworLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUgYSB2 YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgorICAgZXhjZXB0 aW9uIGlmIGl0IGlzIGludmFsaWQuICAqLworI2RlZmluZSBCUFBZX1JFUVVJ UkVfVkFMSUQoQnJlYWtwb2ludCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgaWYgKChCcmVha3BvaW50KS0+YnAgPT0gTlVMTCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gUHlF cnJfRm9ybWF0IChQeUV4Y19SdW50aW1lRXJyb3IsICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJC cmVha3BvaW50ICVkIGlzIGludmFsaWQuIiksICAgICAgICAgICAgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoQnJlYWtwb2ludCktPm51bWJl cik7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisK Ky8qIFJlcXVpcmUgdGhhdCBCUkVBS1BPSU5UIGJlIGEgdmFsaWQgYnJlYWtw b2ludCBJRDsgdGhyb3cgYSBQeXRob24KKyAgIGV4Y2VwdGlvbiBpZiBpdCBp cyBpbnZhbGlkLiAgVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHNldHRlciBm dW5jdGlvbnMuICAqLworI2RlZmluZSBCUFBZX1NFVF9SRVFVSVJFX1ZBTElE KEJyZWFrcG9pbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKChCcmVh a3BvaW50KS0+YnAgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgIFB5RXJyX0Zvcm1hdCAoUHlFeGNfUnVudGltZUVycm9yLCBf KCJCcmVha3BvaW50ICVkIGlzIGludmFsaWQuIiksIFwKKyAgICAgICAgICAg ICAgICAgICAgICAgIChCcmVha3BvaW50KS0+bnVtYmVyKTsgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICByZXR1cm4gLTE7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxl ICgwKQorCisKKy8qIFZhcmlhYmxlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRp b24gYmV0d2VlbiB0aGUgQnJlYWtwb2ludAorICAgY29uc3RydWN0b3IgYW5k IHRoZSBicmVha3BvaW50LWNyZWF0ZWQgaG9vayBmdW5jdGlvbi4gICovCitl eHRlcm4gYnJlYWtwb2ludF9vYmplY3QgKmJwcHlfcGVuZGluZ19vYmplY3Q7 CiAKLS8qIERlZmluZWQgaW4gcHktYnJlYWtwb2ludC5jICovCi10eXBlZGVm IHN0cnVjdCBicmVha3BvaW50X29iamVjdCBicmVha3BvaW50X29iamVjdDsK IAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTE4OCw2ICsyMjksNyBAQCBzdHJ1 Y3QgdmFsdWUgKmNvbnZlcnRfdmFsdWVfZnJvbV9weXRob24gKFB5T2JqZWN0 ICpvYmopOwogc3RydWN0IHR5cGUgKnR5cGVfb2JqZWN0X3RvX3R5cGUgKFB5 T2JqZWN0ICpvYmopOwogc3RydWN0IHN5bXRhYiAqc3ltdGFiX29iamVjdF90 b19zeW10YWIgKFB5T2JqZWN0ICpvYmopOwogc3RydWN0IHN5bXRhYl9hbmRf bGluZSAqc2FsX29iamVjdF90b19zeW10YWJfYW5kX2xpbmUgKFB5T2JqZWN0 ICpvYmopOworc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lX29iamVjdF90b19m cmFtZV9pbmZvIChQeU9iamVjdCAqZnJhbWVfb2JqKTsKIAogdm9pZCBnZGJw eV9pbml0aWFsaXplX2F1dG9fbG9hZCAodm9pZCk7CiB2b2lkIGdkYnB5X2lu aXRpYWxpemVfdmFsdWVzICh2b2lkKTsKQEAgLTIwMiw2ICsyNDQsNyBAQCB2 b2lkIGdkYnB5X2luaXRpYWxpemVfZnVuY3Rpb25zICh2b2lkKTsKIHZvaWQg Z2RicHlfaW5pdGlhbGl6ZV9wc3BhY2UgKHZvaWQpOwogdm9pZCBnZGJweV9p bml0aWFsaXplX29iamZpbGUgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFs aXplX2JyZWFrcG9pbnRzICh2b2lkKTsKK3ZvaWQgZ2RicHlfaW5pdGlhbGl6 ZV9maW5pc2hicmVha3BvaW50cyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRp YWxpemVfbGF6eV9zdHJpbmcgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFs aXplX3BhcmFtZXRlcnMgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXpl X3RocmVhZCAodm9pZCk7CkBAIC0yNzUsNiArMzE4LDkgQEAgUHlPYmplY3Qg KmdkYnB5X2dldF92YXJvYmpfcHJldHR5X3ByaW50ZXIgKHN0cnVjdCB2YWx1 ZSAqdmFsdWUpOwogY2hhciAqZ2RicHlfZ2V0X2Rpc3BsYXlfaGludCAoUHlP YmplY3QgKnByaW50ZXIpOwogUHlPYmplY3QgKmdkYnB5X2RlZmF1bHRfdmlz dWFsaXplciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKIAor dm9pZCBicGZpbmlzaHB5X3ByZV9zdG9wX2hvb2sgKHN0cnVjdCBicmVha3Bv aW50X29iamVjdCAqYnBfb2JqKTsKK3ZvaWQgYnBmaW5pc2hweV9wb3N0X3N0 b3BfaG9vayAoc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopOwor CiBleHRlcm4gUHlPYmplY3QgKmdkYnB5X2RvY19jc3Q7CiBleHRlcm4gUHlP YmplY3QgKmdkYnB5X2NoaWxkcmVuX2NzdDsKIGV4dGVybiBQeU9iamVjdCAq Z2RicHlfdG9fc3RyaW5nX2NzdDsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24v cHl0aG9uLmMgYi9nZGIvcHl0aG9uL3B5dGhvbi5jCmluZGV4IDYwMjI1NzIu LjJmOGY4MjggMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLmMKKysr IGIvZ2RiL3B5dGhvbi9weXRob24uYwpAQCAtMTI0Nyw2ICsxMjQ3LDcgQEAg RW5hYmxlcyBvciBkaXNhYmxlcyBwcmludGluZyBvZiBQeXRob24gc3RhY2sg dHJhY2VzLiIpLAogICBnZGJweV9pbml0aWFsaXplX3BzcGFjZSAoKTsKICAg Z2RicHlfaW5pdGlhbGl6ZV9vYmpmaWxlICgpOwogICBnZGJweV9pbml0aWFs aXplX2JyZWFrcG9pbnRzICgpOworICBnZGJweV9pbml0aWFsaXplX2Zpbmlz aGJyZWFrcG9pbnRzICgpOwogICBnZGJweV9pbml0aWFsaXplX2xhenlfc3Ry aW5nICgpOwogICBnZGJweV9pbml0aWFsaXplX3RocmVhZCAoKTsKICAgZ2Ri cHlfaW5pdGlhbGl6ZV9pbmZlcmlvciAoKTsKZGlmZiAtLWdpdCBhL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1icmVha3BvaW50LmV4cCBiL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1icmVha3BvaW50LmV4cAppbmRleCBl MGRkMDg3Li4wZTNhZGJkIDEwMDY0NAotLS0gYS9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktYnJlYWtwb2ludC5leHAKKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwCkBAIC00NCw3ICs0NCw4 IEBAIGdkYl9weV90ZXN0X3NpbGVudF9jbWQgInB5dGhvbiBibGlzdCA9IGdk Yi5icmVha3BvaW50cygpIiAiR2V0IEJyZWFrcG9pbnQgTGlzdCIKIGdkYl90 ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzBcXSIgIjxnZGIuQnJlYWtwb2lu dCBvYmplY3QgYXQgJGhleD4iICJDaGVjayBvYmogZXhpc3RzIgogZ2RiX3Rl c3QgInB5dGhvbiBwcmludCBibGlzdFxbMFxdLmxvY2F0aW9uIiAibWFpbi4i ICJDaGVjayBicmVha3BvaW50IGxvY2F0aW9uIgogCi1nZGJfYnJlYWtwb2lu dCBbZ2RiX2dldF9saW5lX251bWJlciAiQnJlYWsgYXQgbXVsdGlwbHkuIl0K K3NldCBtdWx0X2xpbmUgW2dkYl9nZXRfbGluZV9udW1iZXIgIkJyZWFrIGF0 IG11bHRpcGx5LiJdCitnZGJfYnJlYWtwb2ludCAke211bHRfbGluZX0KIGdk Yl9jb250aW51ZV90b19icmVha3BvaW50ICJCcmVhayBhdCBtdWx0aXBseS4i CiAKICMgQ2hlY2sgdGhhdCB0aGUgUHl0aG9uIGJyZWFrcG9pbnQgY29kZSBu b3RlZCB0aGUgYWRkaXRpb24gb2YgYQpAQCAtNTQsNyArNTUsOSBAQCBnZGJf dGVzdCAicHl0aG9uIHByaW50IGxlbihibGlzdCkiICIyIiAiQ2hlY2sgZm9y IHR3byBicmVha3BvaW50cyIKIGdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxp c3RcWzBcXSIgIjxnZGIuQnJlYWtwb2ludCBvYmplY3QgYXQgJGhleD4iICJD aGVjayBvYmogZXhpc3RzIgogZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlz dFxbMFxdLmxvY2F0aW9uIiAibWFpbi4iICJDaGVjayBicmVha3BvaW50IGxv Y2F0aW9uIgogZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMVxdIiAi PGdkYi5CcmVha3BvaW50IG9iamVjdCBhdCAkaGV4PiIgIkNoZWNrIG9iaiBl eGlzdHMiCi1nZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFsxXF0ubG9j YXRpb24iICJweS1icmVha3BvaW50XC5jOjQxKiIgIkNoZWNrIGJyZWFrcG9p bnQgbG9jYXRpb24iCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3Rc WzFcXS5sb2NhdGlvbiIgInB5LWJyZWFrcG9pbnRcLmM6JHttdWx0X2xpbmV9 KiIgXAorICAgICAgICAgIkNoZWNrIGJyZWFrcG9pbnQgbG9jYXRpb24iCiAK ICMgQ2hlY2sgaGl0IGFuZCBpZ25vcmUgY291bnRzLiAKIGdkYl90ZXN0ICJw eXRob24gcHJpbnQgYmxpc3RcWzFcXS5oaXRfY291bnQiICIxIiAiQ2hlY2sg YnJlYWtwb2ludCBoaXQgY291bnQiCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuYyBiL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZGJlYWQKLS0t IC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkt ZmluaXNoLWJyZWFrcG9pbnQuYwpAQCAtMCwwICsxLDk3IEBACisvKiBUaGlz IHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgor CisgICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNs dWRlIDxzZXRqbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl IDx1bmlzdGQuaD4KKworaW50IGluY3JlYXNlXzEgKGludCAqYSkKK3sKKyAg KmEgKz0gMTsKKyAgcmV0dXJuIC01OworfQorCit2b2lkIGluY3JlYXNlIChp bnQgKmEpCit7CisgIGluY3JlYXNlXzEgKGEpOworfQorCitpbnQKK3Rlc3Rf MSAoaW50IGksIGludCBqKQoreworICByZXR1cm4gaSA9PSBqOworfQorCitp bnQKK3Rlc3QgKGludCBpLCBpbnQgaikKK3sKKyAgcmV0dXJuIHRlc3RfMSAo aSwgaik7Cit9CisKK2ludAorY2FsbF9sb25nam1wXzEgKGptcF9idWYgKmJ1 ZikKK3sKKyAgbG9uZ2ptcCAoKmJ1ZiwgMSk7Cit9CisKK2ludAorY2FsbF9s b25nam1wIChqbXBfYnVmICpidWYpCit7CisgIGNhbGxfbG9uZ2ptcF8xIChi dWYpOworfQorCit2b2lkCit0ZXN0X2V4ZWNfZXhpdCAoaW50IGRvX2V4aXQp Cit7CisgIGlmIChkb19leGl0KQorICAgIGV4aXQgKDApOworICBlbHNlCisg ICAgZXhlY2wgKCIvYmluL2VjaG8iLCAiZWNobyIsICItMSIsIChjaGFyICop MCk7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQor eworICBqbXBfYnVmIGVudjsKKyAgaW50IGZvbyA9IDU7CisgIGludCBiYXIg PSA0MjsKKyAgaW50IGksIGo7CisKKyAgZ2V0cGlkICgpOworCisgIGkgPSAw OworICAvKiBCcmVhayBhdCBpbmNyZWFzZS4gICovCisgIGluY3JlYXNlICgm aSk7CisgIGluY3JlYXNlICgmaSk7CisgIGluY3JlYXNlICgmaSk7CisKKyAg Zm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisgICAgeworICAgICAgaiArPSAx OyAvKiBDb25kaXRpb24gQnJlYWsuICAqLworICAgIH0KKworICBpZiAoc2V0 am1wIChlbnYpID09IDApIC8qIGxvbmdqbXAgY2F1Z2h0ICovCisgICAgewor ICAgICAgY2FsbF9sb25nam1wICgmZW52KTsKKyAgICB9CisgIGVsc2UKKyAg ICBqICs9IDE7IC8qIGFmdGVyIGxvbmdqbXAuICAqLworCisgIHRlc3RfZXhl Y19leGl0ICgxKTsKKworICByZXR1cm4gajsgLyogQnJlYWsgYXQgZW5kLiAg Ki8KK30KZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQuZXhwCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZGNlMWIKLS0tIC9kZXYvbnVsbAor KysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQuZXhwCkBAIC0wLDAgKzEsMjMzIEBACisjIENvcHlyaWdodCAoQykg MjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0 ZXN0c3VpdGUuICBJdCB0ZXN0cyB0aGUgbWVjaGFuaXNtCisjIGV4cG9zaW5n IHZhbHVlcyB0byBQeXRob24uCisKK2lmICR0cmFjZWxldmVsIHRoZW4gewor ICAgIHN0cmFjZSAkdHJhY2VsZXZlbAorfQorCitsb2FkX2xpYiBnZGItcHl0 aG9uLmV4cAorCitzZXQgdGVzdGZpbGUgInB5LWZpbmlzaC1icmVha3BvaW50 Igorc2V0IHNyY2ZpbGUgJHt0ZXN0ZmlsZX0uYworCitpZiB7IFtwcmVwYXJl X2Zvcl90ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke3Rlc3RmaWxlfSAke3Ny Y2ZpbGV9XSB9IHsKKyAgICByZXR1cm4gLTEKK30KKworc2V0IHJlbW90ZV9w eXRob25fZmlsZSBbcmVtb3RlX2Rvd25sb2FkIGhvc3QgJHtzcmNkaXJ9LyR7 c3ViZGlyfS8ke3Rlc3RmaWxlfS5weV0KKworCisjIFNraXAgYWxsIHRlc3Rz IGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVuYWJsZWQuCitpZiB7IFtz a2lwX3B5dGhvbl90ZXN0c10gfSB7IGNvbnRpbnVlIH0KKworIworIyBUZXN0 IEZpbmlzaEJyZWFrcG9pbnQgaW4gbm9ybWFsIGNvbmRpdGlvbnMKKyMKKwor Y2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitpZiAhW3J1bnRvX21haW5d IHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gbWFpbi4iCisgICAg cmV0dXJuIDAKK30KK2dkYl90ZXN0X25vX291dHB1dCAic2V0IGNvbmZpcm0g b2ZmIiAiZGlzYWJsZSBjb25maXJtYXRpb24iCitnZGJfdGVzdCAic291cmNl ICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0IGltcG9ydGVk LioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCitnZGJf YnJlYWtwb2ludCAiaW5jcmVhc2VfMSIKK2dkYl90ZXN0ICJjb250aW51ZSIg IkJyZWFrcG9pbnQgLiphdC4qIiAiY29udGludWUgdG8gdGhlIGZ1bmN0aW9u IHRvIGZpbmlzaCIKKworIyBzZXQgRmluaXNoQnJlYWtwb2ludAorCitnZGJf dGVzdCAicHl0aG9uIGZpbmlzaGJwX2RlZmF1bHQgPSBnZGIuRmluaXNoQnJl YWtwb2ludCAoKSIgXAorICAgICAgICAgIlRlbXBvcmFyeSBicmVha3BvaW50 LioiICJzZXQgRmluaXNoQnJlYWtwb2ludCB3aXRoIGRlZmF1bHQgZnJhbWUg dmFsdWUiCitnZGJfdGVzdCAicHl0aG9uIGZpbmlzaGJwID0gTXlGaW5pc2hC cmVha3BvaW50IChnZGIucGFyc2VfYW5kX2V2YWwgKCdhJyksIGdkYi5uZXdl c3RfZnJhbWUgKCkpIiBcCisgICAgICAgICAiVGVtcG9yYXJ5IGJyZWFrcG9p bnQuKiIgInNldCBGaW5pc2hCcmVha3BvaW50IgorZ2RiX3Rlc3QgInB5dGhv biBwcmludCBmaW5pc2hicC5yZXR1cm5fdmFsdWUiICJOb25lLioiIFwKKyAg ICAgICAgICJjaGVjayByZXR1cm5fdmFsdWUgYXQgaW5pdCIKKworIyBjaGVj ayBub3JtYWwgYnAgaGl0CisKK2dkYl90ZXN0ICJjb250aW51ZSIgIk15Rmlu aXNoQnJlYWtwb2ludCBzdG9wIHdpdGguKnJldHVybl92YWx1ZSBpczogLTUu KiMwLippbmNyZWFzZS4qIiBcCisgICAgICAgICAiY2hlY2sgTXlGaW5pc2hC cmVha3BvaW50IGhpdCIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNo YnAucmV0dXJuX3ZhbHVlIiAiLTUuKiIgImNoZWNrIHJldHVybl92YWx1ZSIK KworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmaW5pc2hicF9kZWZhdWx0Lmhp dF9jb3VudCIgIjEuKiIgImNoZWNrIGZpbmlzaEJQIG9uIGRlZmF1bHQgZnJh bWUgaGFzIGJlZW4gaGl0IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmaW5p c2hicC5pc192YWxpZCgpIiAiRmFsc2UuKiJcCisgICAgICAgICAiZW5zdXJl IHRoYXQgZmluaXNoIGJwIGlzIGludmFsaWQgYWZlciBub3JtYWwgaGl0Igor CisjIGNoZWNrIEZpbmlzaEJyZWFrcG9pbnQgaW4gbWFpbiBubyBhbGxvd2Vk CisKK2dkYl90ZXN0ICJmaW5pc2giICJtYWluLioiICJyZXR1cm4gdG8gbWFp bigpIgorZ2RiX3Rlc3QgInB5dGhvbiBNeUZpbmlzaEJyZWFrcG9pbnQgKE5v bmUsIGdkYi5zZWxlY3RlZF9mcmFtZSAoKSkiIFwKKyAgICAgICAgICJWYWx1 ZUVycm9yOiBcIkZpbmlzaEJyZWFrcG9pbnRcIiBub3QgbWVhbmluZ2Z1bCBp biB0aGUgb3V0ZXJtb3N0IGZyYW1lLi4qIiBcCisgICAgICAgICAiY2hlY2sg RmluaXNoQlAgbm90IGFsbG93ZWQgaW4gbWFpbiIKKworIworIyBUZXN0IEZp bmlzaEJyZWFrcG9pbnQgd2l0aCBubyBkZWJ1ZyBzeW1ib2wgCisjCisKK2Ns ZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworZ2RiX3Rlc3QgInNvdXJjZSAk cmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4q IiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorc2V0IGNv bmRfbGluZSBbZ2RiX2dldF9saW5lX251bWJlciAiQ29uZGl0aW9uIEJyZWFr LiJdCisKK2lmICFbcnVudG8gImdldHBpZCJdIHRoZW4geworICAgIGZhaWwg IkNhbm5vdCBydW4gdG8gZ2V0cGlkLiIKKyAgICByZXR1cm4gMAorfQorCitn ZGJfdGVzdCAicHl0aG9uIGZpbmlzaEJQID0gU2ltcGxlRmluaXNoQnJlYWtw b2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiBcCisgICAgICAgICAiU2ltcGxl RmluaXNoQnJlYWtwb2ludCBpbml0IiBcCisgICAgICAgICAic2V0IGZpbmlz aCBicmVha3BvaW50IgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiU2ltcGxlRmlu aXNoQnJlYWtwb2ludCBzdG9wLioiICJjaGVjayBGaW5pc2hCcmVha3BvaW50 IGhpdCIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoQlAucmV0dXJu X3ZhbHVlIiAiTm9uZSIgImNoZWNrIHJldHVybiB2YWx1ZSB3aXRob3V0IGRl YnVnIHN5bWJvbCIKKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgaW4g ZnVuY3Rpb24gcmV0dXJuZWQgYnkgbG9uZ2ptcCAKKyMKKworY2xlYW5fcmVz dGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAic291cmNlICRyZW1vdGVf cHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAg ICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCisKK2lmICFbcnVudG8g Y2FsbF9sb25nam1wXzFdIHRoZW4geworICAgIHBlcnJvciAiY291bGRuJ3Qg cnVuIHRvIGJyZWFrcG9pbnQgY2FsbF9sb25nam1wIgorICAgIGNvbnRpbnVl Cit9CisKK2dkYl90ZXN0ICJweXRob24gZmluaXNoYnAgPSBTaW1wbGVGaW5p c2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJhbWUoKSkiIFwKKyAgICAgICAg ICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGluaXQiIFwKKyAgICAgICAgICJz ZXQgZmluaXNoIGJyZWFrcG9pbnQiIAorZ2RiX3Rlc3QgImJyZWFrIFtnZGJf Z2V0X2xpbmVfbnVtYmVyICJhZnRlciBsb25nam1wLiJdIiAiQnJlYWtwb2lu dC4qIGF0IC4qIiBcCisgICAgICAgICAic2V0IEJQIGFmdGVyIHRoZSBqdW1w IgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiU2ltcGxlRmluaXNoQnJlYWtwb2lu dCBvdXQgb2Ygc2NvcGUuKiIgXAorICAgICAgICAgImNoZWNrIEZpbmlzaEJQ IG91dCBvZiBzY29wZSBub3RpZmljYXRpb24iCitnZGJfdGVzdCAicHl0aG9u IHByaW50IGZpbmlzaGJwLmlzX3ZhbGlkKCkiICJGYWxzZS4qIlwKKyAgICAg ICAgICJlbnN1cmUgdGhhdCBmaW5pc2ggYnAgaXMgaW52YWxpZCBhZmVyIG91 dCBvZiBzY29wZSBub3RpZmljYXRpb24iCisKKyMKKyMgVGVzdCBGaW5pc2hC cmVha3BvaW50IGluIEJQIGNvbmRpdGlvbiBldmFsdWF0aW9uIAorIyAoZmlu aXNoIGluIGR1bW15IGZyYW1lKQorIworCitjbGVhbl9yZXN0YXJ0ICR7dGVz dGZpbGV9CisKK2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRob25fZmls ZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImlt cG9ydCBweXRob24gc2NyaXB0cyIKKworCitpZiAhW3J1bnRvX21haW5dIHRo ZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gbWFpbi4iCisgICAgcmV0 dXJuIDAKK30KKyAgICAgICAgIAorZ2RiX3Rlc3QgImJyZWFrICR7Y29uZF9s aW5lfSBpZiB0ZXN0XzEoaSw4KSIgIkJyZWFrcG9pbnQgLiogYXQgLioiIFwK KyAgICAgICAgICJzZXQgYSBjb25kaXRpb25hbCBCUCIKK2dkYl90ZXN0ICJw eXRob24gVGVzdEJyZWFrcG9pbnQoKSIgIlRlc3RCcmVha3BvaW50IGluaXQi IFwKKyAgICAgICAgICJzZXQgRmluaXNoQlAgaW4gYSBicmVha3BvaW50IGNv bmRpdGlvbiIKK2dkYl90ZXN0ICJjb250aW51ZSIgXAorICAgICAgICAgIlwi RmluaXNoQnJlYWtwb2ludFwiIGNhbm5vdCBiZSBzZXQgb24gYSBkdW1teSBm cmFtZS4qIiBcCisgICAgICAgICAiZG9uJ3QgYWxsb3cgRmluaXNoQnJlYWtw b2ludCBvbiBkdW1teSBmcmFtZXMiCitnZGJfdGVzdCAicHJpbnQgaSIgIjgi ICJjaGVjayBzdG9wcGVkIGxvY2F0aW9uIgorCisjCisjIFRlc3QgRmluaXNo QnJlYWtwb2ludCBpbiBCUCBjb25kaXRpb24gZXZhbHVhdGlvbiAKKyMgKGZp bmlzaCBpbiBub3JtYWwgZnJhbWUpCisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0 ZXN0ZmlsZX0KKworZ2RiX3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9m aWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAi aW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorCitpZiAhW3J1bnRvX21haW5dIHRo ZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gbWFpbi4iCisgICAgcmV0 dXJuIDAKK30KKworZ2RiX3Rlc3QgImJyZWFrICR7Y29uZF9saW5lfSBpZiB0 ZXN0KGksOCkiIFwKKyAgICAgICAgICJCcmVha3BvaW50IC4qIGF0IC4qIiAi c2V0IGNvbmRpdGlvbmFsIEJQIgorZ2RiX3Rlc3QgInB5dGhvbiBUZXN0QnJl YWtwb2ludCgpIiAiVGVzdEJyZWFrcG9pbnQgaW5pdCIgInNldCBCUCBpbiBj b25kaXRpb24iCisKK2dkYl90ZXN0ICJjb250aW51ZSIgXAorICAgICAgICAg InRlc3QgZG9uJ3Qgc3RvcDogMS4qdGVzdCBkb24ndCBzdG9wOiAyLip0ZXN0 IHN0b3AuKkVycm9yIGluIHRlc3RpbmcgYnJlYWtwb2ludCBjb25kaXRpb24u KlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUgaW4g YSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBHREIuKiIgXAorICAgICAgICAgInN0 b3AgaW4gY29uZGl0aW9uIGZ1bmN0aW9uIgorCitnZGJfdGVzdCAiY29udGlu dWUiICJDb250aW51aW5nLioiICJmaW5pc2ggY29uZGl0aW9uIGV2YWx1YXRp b24iCitnZGJfdGVzdCAiY29udGludWUiICJCcmVha3BvaW50LioiICJzdG9w IGF0IGNvbmRpdGlvbmFsIGJyZWFrcG9pbnQiCitnZGJfdGVzdCAicHJpbnQg aSIgIjgiICJjaGVjayBzdG9wcGVkIGxvY2F0aW9uIgorCisjCisjIFRlc3Qg RmluaXNoQnJlYWtwb2ludCBpbiBleHBsaWNpdCBpbmZlcmlvciBmdW5jdGlv biBjYWxsCisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworZ2Ri X3Rlc3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9uIHNj cmlwdCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBz Y3JpcHRzIgorCitpZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwg IkNhbm5vdCBydW4gdG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KKworIyBy ZXR1cm4gYWRkcmVzcyBpbiBkdW1teSBmcmFtZQorCitnZGJfdGVzdCAicHl0 aG9uIFRlc3RFeHBsaWNpdEJyZWFrcG9pbnQoJ2luY3JlYXNlXzEnKSIgIkJy ZWFrcG9pbnQuKmF0LioiIFwKKyAgICAgICAgICJwcmVwYXJlIFRlc3RFeHBs aWNpdEJyZWFrcG9pbnQiCitnZGJfdGVzdCAicHJpbnQgaW5jcmVhc2VfMSgm aSkiIFwKKyAgICAgICAgICJcIkZpbmlzaEJyZWFrcG9pbnRcIiBjYW5ub3Qg YmUgc2V0IG9uIGEgZHVtbXkgZnJhbWUuKiIgXAorICAgICAgICAgImRvbid0 IGFsbG93IEZpbmlzaEJyZWFrcG9pbnQgb24gZHVtbXkgZnJhbWVzIgorCisj IHJldHVybiBhZGRyZXNzIGluIG5vcm1hbCBmcmFtZQorCitkZWxldGVfYnJl YWtwb2ludHMKK2dkYl90ZXN0ICJweXRob24gVGVzdEV4cGxpY2l0QnJlYWtw b2ludChcImluY3JlYXNlXzFcIikiICJCcmVha3BvaW50LiphdC4qIiBcCisg ICAgICAgICAicHJlcGFyZSBUZXN0RXhwbGljaXRCcmVha3BvaW50IgorZ2Ri X3Rlc3QgInByaW50IGluY3JlYXNlKCZpKSIgXAorICAgICAgICAgIlNpbXBs ZUZpbmlzaEJyZWFrcG9pbnQgaW5pdC4qU2ltcGxlRmluaXNoQnJlYWtwb2lu dCBzdG9wLipUaGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBzdG9wcGVkIHdo aWxlIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCLioiIFwKKyAgICAg ICAgICJGaW5pc2hCUCBzdG9wIGF0IGR1cmluZyBleHBsaWNpdCBmdW5jdGlv biBjYWxsIgorCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IHdoZW4g aW5mZXJpb3IgZXhpdHMKKyMKKworaWYgIVtydW50byAidGVzdF9leGVjX2V4 aXQiXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIHRlc3RfZXhl Y19leGl0LiIKKyAgICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAicHl0aG9u IFNpbXBsZUZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKSIg IlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIgInNldCBGaW5pc2hCUCBh ZnRlciB0aGUgZXhpdCgpIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiU2ltcGxl RmluaXNoQnJlYWtwb2ludCBvdXQgb2Ygc2NvcGUuKiIgImNhdGNoIG91dCBv ZiBzY29wZSBhZnRlciBleGl0IgorCisjCisjIFRlc3QgRmluaXNoQnJlYWtw b2ludCB3aGVuIGluZmVyaW9yIGV4ZWNzCisjCisKK2lmICFbcnVudG8gInRl c3RfZXhlY19leGl0Il0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0 byB0ZXN0X2V4ZWNfZXhpdC4iCisgICAgcmV0dXJuIDAKK30gICAgIAorCitn ZGJfdGVzdF9ub19vdXRwdXQgInNldCB2YXIgZG9fZXhpdCA9IDAiICJzd2l0 Y2ggdG8gZXhlY3ZlKCkgdGVzdCIKK2dkYl90ZXN0ICJweXRob24gU2ltcGxl RmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiAiU2ltcGxl RmluaXNoQnJlYWtwb2ludCBpbml0IiAic2V0IEZpbmlzaEJQIGFmdGVyIHRo ZSBleGVjIgorZ2RiX3Rlc3QgImNhdGNoIGV4ZWMiICJDYXRjaHBvaW50Lipc KGV4ZWNcKS4qIiAiY2F0Y2ggZXhlYyIKK2dkYl90ZXN0ICJjb250aW51ZSIg IlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNjb3BlLioiICJjYXRj aCBvdXQgb2Ygc2NvcGUgYWZ0ZXIgZXhlYyIKXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktZmluaXNoLWJyZWFrcG9pbnQucHkgYi9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQucHkKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhMmE3MwotLS0gL2Rldi9udWxs CisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJl YWtwb2ludC5weQpAQCAtMCwwICsxLDg5IEBACisjIENvcHlyaWdodCAoQykg MjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor IworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRl c3RzdWl0ZS4gIEl0IHRlc3RzIHB5dGhvbiBGaW5pc2gKKyMgQnJlYWtwb2lu dHMuCisJCQorY2xhc3MgTXlGaW5pc2hCcmVha3BvaW50IChnZGIuRmluaXNo QnJlYWtwb2ludCk6CisJZGVmIF9faW5pdF9fKHNlbGYsIHZhbCwgZnJhbWUp OgorCQlnZGIuRmluaXNoQnJlYWtwb2ludC5fX2luaXRfXyAoc2VsZiwgZnJh bWUpCisJCXByaW50ICJNeUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIKKwkJc2Vs Zi52YWwgPSB2YWwKKwkJCisJZGVmIHN0b3Aoc2VsZik6CisJCXByaW50ICJN eUZpbmlzaEJyZWFrcG9pbnQgc3RvcCB3aXRoICVkIiAlIGludCAoc2VsZi52 YWwuZGVyZWZlcmVuY2UgKCkpCisJCXByaW50ICJyZXR1cm5fdmFsdWUgaXM6 ICVkIiAlIGludCAoc2VsZi5yZXR1cm5fdmFsdWUpCisJCWdkYi5leGVjdXRl ICgid2hlcmUgMSIpCisJCXJldHVybiBUcnVlCisJCisJZGVmIG91dF9vZl9z Y29wZShzZWxmKToKKwkJcHJpbnQgIk15RmluaXNoQnJlYWtwb2ludCBvdXQg b2Ygc2NvcGUiCisKK2NsYXNzIFRlc3RCcmVha3BvaW50KGdkYi5CcmVha3Bv aW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5C cmVha3BvaW50Ll9faW5pdF9fIChzZWxmLCBzcGVjPSJ0ZXN0XzEiLCBpbnRl cm5hbD0xKQorICAgICAgICBzZWxmLnNpbGVudCA9IFRydWUKKyAgICAgICAg c2VsZi5jb3VudCA9IDAKKyAgICAgICAgcHJpbnQgIlRlc3RCcmVha3BvaW50 IGluaXQiCisgICAgICAgIAorICAgIGRlZiBzdG9wKHNlbGYpOgorICAgIAlz ZWxmLmNvdW50ICs9IDEKKyAgICAJdHJ5OgorICAgICAgICAJVGVzdEZpbmlz aEJyZWFrcG9pbnQgKGdkYi5uZXdlc3RfZnJhbWUgKCksIHNlbGYuY291bnQp CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgIAlw cmludCBlCisgICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBUZXN0Rmlu aXNoQnJlYWtwb2ludCAoZ2RiLkZpbmlzaEJyZWFrcG9pbnQpOgorICAgIGRl ZiBfX2luaXRfXyAoc2VsZiwgZnJhbWUsIGNvdW50KToKKyAgICAJc2VsZi5j b3VudCA9IGNvdW50CisgICAgICAgIGdkYi5GaW5pc2hCcmVha3BvaW50Ll9f aW5pdF9fIChzZWxmLCBmcmFtZSwgaW50ZXJuYWw9MSkKKyAgICAgICAgCisg ICAgICAgIAorICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBwcmludCAi LS0+Iiwgc2VsZi5udW1iZXIKKyAgICAgICAgaWYgKHNlbGYuY291bnQgPT0g Myk6CisgICAgICAgICAgICBwcmludCAidGVzdCBzdG9wOiAlZCIgJSBzZWxm LmNvdW50CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNl OgorICAgICAgICAgICAgcHJpbnQgInRlc3QgZG9uJ3Qgc3RvcDogJWQiICUg c2VsZi5jb3VudAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlIAorICAgICAg ICAKKyAgICAKKyAgICBkZWYgb3V0X29mX3Njb3BlKHNlbGYpOgorICAgICAg ICBwcmludCAidGVzdCBkaWRuJ3QgZmluaXNoOiAlZCIgJSBzZWxmLmNvdW50 CisKK2NsYXNzIFRlc3RFeHBsaWNpdEJyZWFrcG9pbnQoZ2RiLkJyZWFrcG9p bnQpOgorCWRlZiBzdG9wKHNlbGYpOgorCQl0cnk6CisJCQlTaW1wbGVGaW5p c2hCcmVha3BvaW50IChnZGIubmV3ZXN0X2ZyYW1lICgpKQorCQlleGNlcHQg VmFsdWVFcnJvciBhcyBlOgorCQkJcHJpbnQgZQorCQlyZXR1cm4gRmFsc2UK KworY2xhc3MgU2ltcGxlRmluaXNoQnJlYWtwb2ludChnZGIuRmluaXNoQnJl YWtwb2ludCk6CisJZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKwkJZ2Ri LkZpbmlzaEJyZWFrcG9pbnQuX19pbml0X18gKHNlbGYsIGZyYW1lKQorCQkK KwkJcHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgaW5pdCIKKwkJCisJ ZGVmIHN0b3Aoc2VsZik6CisJCXByaW50ICJTaW1wbGVGaW5pc2hCcmVha3Bv aW50IHN0b3AiIAorCQlyZXR1cm4gVHJ1ZQorCQorCWRlZiBvdXRfb2Zfc2Nv cGUoc2VsZik6CisJCXByaW50ICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IG91 dCBvZiBzY29wZSIKKworcHJpbnQgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWRk IgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZp bmlzaC1icmVha3BvaW50Mi5jYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1maW5pc2gtYnJlYWtwb2ludDIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYTBlZWEwNgotLS0gL2Rldi9udWxsCisrKyBi L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2lu dDIuY2MKQEAgLTAsMCArMSw1OSBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBw YXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0 IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlICA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisKKyNpbmNsdWRlIDxpb3N0cmVh bT4KKwordm9pZAordGhyb3dfZXhjZXB0aW9uXzEgKGludCBlKQoreworICB0 aHJvdyBuZXcgaW50IChlKTsKK30KKwordm9pZAordGhyb3dfZXhjZXB0aW9u IChpbnQgZSkKK3sKKyAgdGhyb3dfZXhjZXB0aW9uXzEgKGUpOworfQorCitp bnQKK21haW4gKHZvaWQpCit7CisgIGludCBpOworICB0cnkKKyAgICB7Cisg ICAgICB0aHJvd19leGNlcHRpb25fMSAoMTApOworICAgIH0KKyAgY2F0Y2gg KGNvbnN0IGludCAqZSkKKyAgICB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAi RXhjZXB0aW9uICMiIDw8ICplIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisgIGkg Kz0gMTsgLyogQnJlYWsgYWZ0ZXIgZXhjZXB0aW9uIDEuICAqLworCisgIHRy eQorICAgIHsKKyAgICAgIHRocm93X2V4Y2VwdGlvbiAoMTApOworICAgIH0K KyAgY2F0Y2ggKGNvbnN0IGludCAqZSkKKyAgICB7CisgICAgICAgIHN0ZDo6 Y2VyciA8PCAiRXhjZXB0aW9uICMiIDw8ICplIDw8IHN0ZDo6ZW5kbDsKKyAg ICB9CisgIGkgKz0gMTsgLyogQnJlYWsgYWZ0ZXIgZXhjZXB0aW9uIDIuICAq LworCisgIHJldHVybiBpOworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5leHAgYi9nZGIv dGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4 cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWU3OThj Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWZpbmlzaC1icmVha3BvaW50Mi5leHAKQEAgLTAsMCArMSw2NSBAQAor IyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisj IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgdGhlIG1lY2hh bmlzbQorIyBleHBvc2luZyB2YWx1ZXMgdG8gUHl0aG9uLgorCitpZiAkdHJh Y2VsZXZlbCB0aGVuIHsKKyAgICBzdHJhY2UgJHRyYWNlbGV2ZWwKK30KKwor bG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKworc2V0IHRlc3RmaWxlICJweS1m aW5pc2gtYnJlYWtwb2ludDIiCitzZXQgc3JjZmlsZSAke3Rlc3RmaWxlfS5j Yworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxl fQorc2V0IHB5ZmlsZSAgJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxl fS5weQorCisjIFN0YXJ0IHdpdGggYSBmcmVzaCBnZGIuCitnZGJfZXhpdAor Z2RiX3N0YXJ0CitnZGJfcmVpbml0aWFsaXplX2RpciAkc3JjZGlyLyRzdWJk aXIKK2dkYl9sb2FkICR7YmluZmlsZX0KKworaWYgeyBbZ2RiX2NvbXBpbGUg IiR7c3JjZGlyfS8ke3N1YmRpcn0vJHtzcmNmaWxlfSIgIiR7YmluZmlsZX0i IGV4ZWN1dGFibGUge2RlYnVnIGMrK31dICE9ICIiIH0geworICAgIHVudGVz dGVkICJDb3VsZG4ndCBjb21waWxlICR7c3JjZmlsZX0iCisgICAgcmV0dXJu IC0xCit9CisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAi Q2Fubm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorCisjCisj IENoZWNrIEZpbmlzaEJyZWFrcG9pbnRzIGFnYWluc3QgQysrIGV4Y2VwdGlv bnMKKyMKKworZ2RiX2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1iZXIg IkJyZWFrIGFmdGVyIGV4Y2VwdGlvbiAyIl0KKworZ2RiX3Rlc3QgInNvdXJj ZSAkcHlmaWxlIiAiLipQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAg ICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCisgICAgICAgICAKK2dk Yl9icmVha3BvaW50ICJ0aHJvd19leGNlcHRpb25fMSIKK2dkYl90ZXN0ICJj b250aW51ZSIgIkJyZWFrcG9pbnQgLip0aHJvd19leGNlcHRpb25fMS4qIiAi cnVuIHRvIGV4Y2VwdGlvbiAxIgorCitnZGJfdGVzdCAicHl0aG9uIHByaW50 IGxlbihnZGIuYnJlYWtwb2ludHMoKSkiICIzIiAiY2hlY2sgQlAgY291bnQi CitnZGJfdGVzdCAicHl0aG9uIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQo Z2RiLm5ld2VzdF9mcmFtZSgpKSIgImluaXQgRXhjZXB0aW9uRmluaXNoQnJl YWtwb2ludCIgInNldCBGaW5pc2hCUCBhZnRlciB0aGUgZXhjZXB0aW9uIgor Z2RiX3Rlc3QgImNvbnRpbnVlIiAiLipzdG9wcGVkIGF0IEV4Y2VwdGlvbkZp bmlzaEJyZWFrcG9pbnQuKiIgImNoZWNrIEZpbmlzaEJyZWFrcG9pbnQgaW4g Y2F0Y2goKSIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGdkYi5icmVh a3BvaW50cygpKSIgIjMiICJjaGVjayBmaW5pc2ggQlAgcmVtb3ZhbCIKKwor Z2RiX3Rlc3QgImNvbnRpbnVlIiAiLipCcmVha3BvaW50LiogdGhyb3dfZXhj ZXB0aW9uXzEuKiIgImNvbnRpbnVlIHRvIHNlY29uZCBleGNlcHRpb24iCitn ZGJfdGVzdCAicHl0aG9uIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQoZ2Ri Lm5ld2VzdF9mcmFtZSgpKSIgImluaXQgRXhjZXB0aW9uRmluaXNoQnJlYWtw b2ludCIgInNldCBGaW5pc2hCUCBhZnRlciB0aGUgZXhjZXB0aW9uIgorZ2Ri X3Rlc3QgImNvbnRpbnVlIiAiLipleGNlcHRpb24gZGlkIG5vdCBmaW5pc2gu KiIgIkZpbmlzaEJyZWFrcG9pbnQgd2l0aCBleGNlcHRpb24gdGhyb3duIG5v dCBjYXVnaHQiCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktZmluaXNoLWJyZWFrcG9pbnQyLnB5IGIvZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5weQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmI2OTU1Ci0tLSAvZGV2L251 bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1i cmVha3BvaW50Mi5weQpAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAo QykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor IyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RC IHRlc3RzdWl0ZS4gIEl0IHRlc3RzIHB5dGhvbiBGaW5pc2gKKyMgQnJlYWtw b2ludHMuCisKK2NsYXNzIEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQoZ2Ri LkZpbmlzaEJyZWFrcG9pbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBm cmFtZSk6CisgICAgICAgIGdkYi5GaW5pc2hCcmVha3BvaW50Ll9faW5pdF9f IChzZWxmLCBmcmFtZSwgaW50ZXJuYWw9MSkKKyAgICAgICAgc2VsZi5zaWxl bnQgPSBUcnVlOworICAgICAgICBwcmludCAiaW5pdCBFeGNlcHRpb25GaW5p c2hCcmVha3BvaW50IgorICAgICAgICAKKyAgICBkZWYgc3RvcChzZWxmKToK KyAgICAgICAgcHJpbnQgInN0b3BwZWQgYXQgRXhjZXB0aW9uRmluaXNoQnJl YWtwb2ludCIKKyAgICAgICAgcmV0dXJuIFRydWUgCisgICAgCisgICAgZGVm IG91dF9vZl9zY29wZShzZWxmKToKKyAgICAgICAgcHJpbnQgImV4Y2VwdGlv biBkaWQgbm90IGZpbmlzaCAuLi4iCisKKworcHJpbnQgIlB5dGhvbiBzY3Jp cHQgaW1wb3J0ZWQiCi0tIAoxLjcuNi40Cgo= --20cf307cfc36841c2c04b354f2b8--