From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15505 invoked by alias); 7 Dec 2011 10:07:44 -0000 Received: (qmail 15479 invoked by uid 22791); 7 Dec 2011 10:07:37 -0000 X-SWARE-Spam-Status: No, hits=-1.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,TW_BP,TW_EG,TW_GJ,TW_HP,TW_WB,TW_YB X-Spam-Check-By: sourceware.org Received: from mail-vw0-f41.google.com (HELO mail-vw0-f41.google.com) (209.85.212.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 07 Dec 2011 10:07:09 +0000 Received: by vbbfn1 with SMTP id fn1so308296vbb.0 for ; Wed, 07 Dec 2011 02:07:08 -0800 (PST) Received: by 10.52.94.75 with SMTP id da11mr9525699vdb.111.1323252428271; Wed, 07 Dec 2011 02:07:08 -0800 (PST) MIME-Version: 1.0 Received: by 10.220.4.210 with HTTP; Wed, 7 Dec 2011 02:06:47 -0800 (PST) In-Reply-To: References: From: Kevin Pouget Date: Wed, 07 Dec 2011 13:35:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf307f312eef705904b37db6d4 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/msg00226.txt.bz2 --20cf307f312eef705904b37db6d4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 4492 On Tue, Dec 6, 2011 at 9:45 PM, Tom Tromey wrote: >>>>>> "Kevin" =3D=3D Kevin Pouget writes: > > Kevin> you're right, fixed > > Thanks. > > Tom> I think this still needs a NEWS entry. > > Kevin> nop, it was in the patch :) > > Whoops :-) > > Kevin> (no regression against current git source tree) > > This is ok. =A0Thank you very much. > > Tom and we're .... not ready! there are some regressions this morning, certainly due to your ambiguous linespec patch! first one is quite obvious: a/gdb/testsuite/gdb.python/py-finish-breakpoint.exp -if ![runto "getpid"] then { - fail "Cannot run to getpid." +if ![runto_main] then { + fail "Cannot run to main." return 0 } +gdb_breakpoint "getpid" {temporary} +gdb_test "continue" "Temporary breakpoint .*in getpid.*" "continue to getp= id" + "break getpid" used to work before actually starting the inferior, but now it's unresolved for the second one I'll need your opinion: > bpfinishpy_detect_out_scope_cb (struct breakpoint *b, void *args) > ... > if (b->pspace =3D=3D current_inferior ()->pspace > && (!target_has_registers > || frame_find_by_id (b->frame_id) =3D=3D NULL)) > bpfinishpy_out_of_scope (finish_bp); bpfinishpy_out_of_scope can't be triggered anymore because you set b->pspace to NULL. I hesitated about how to fix it, but I think that FinishBP have to be bound to the pspace in which they were set, so I added this line: > bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs) > ... > /* Bind the breakpoint with the current program space. */ > self_bpfinish->py_bp.bp->pspace =3D current_program_space; I'm not sure whether your plans are to eventually get rid of this field, but the pspace comments seem to indicate that this is the right way to do Cordially, Kevin -- 2011-12-07 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. --20cf307f312eef705904b37db6d4 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_gvw6ahod0 Content-length: 76141 RnJvbSBhYzU3ZGI5YjVjOTAwMzRmYjdmOGFjZGI2OWM4ZmM3Mjk0ZDQxYjFj IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSAgSW50cm9kdWNlIGdk Yi5GaW5pc2hCcmVha3BvaW50CgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnZGIv TkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDQgKwogZ2RiL2RvYy9nZGIudGV4aW5mbyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDUxICsrKwogZ2RiL2luZmNtZC5jICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM5ICsr LQogZ2RiL2luZmVyaW9yLmggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAzICsKIGdkYi9weXRob24vcHktYnJlYWtwb2ludC5j ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0OCArLS0KIGdkYi9weXRo b24vcHktZmluaXNoYnJlYWtwb2ludC5jICAgICAgICAgICAgICAgICAgIHwg IDQ1MyArKysrKysrKysrKysrKysrKysrKwogZ2RiL3B5dGhvbi9weS1mcmFt ZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICstCiBn ZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNTAgKystCiBnZGIvcHl0aG9uL3B5dGhvbi5jICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwICAgICAgICAgfCAgICA3 ICstCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQuYyAgICB8ICAgOTcgKysrKysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5leHAgIHwgIDIzNyArKysrKysr KysrCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQucHkgICB8ICAgODkgKysrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5jYyAgfCAgIDU5ICsrKwogZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5l eHAgfCAgIDY1ICsrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZp bmlzaC1icmVha3BvaW50Mi5weSAgfCAgIDMzICsrCiAxNyBmaWxlcyBjaGFu Z2VkLCAxMjA5IGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQogY3Jl 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 Yi9ORVdTCmluZGV4IDQyNzgyY2UuLmI3NTU2MDUgMTAwNjQ0Ci0tLSBhL2dk Yi9ORVdTCisrKyBiL2dkYi9ORVdTCkBAIC01Nyw2ICs1NywxMCBAQAogICAq KiBUaGUgImdkYi5icmVha3BvaW50IiBmdW5jdGlvbiBoYXMgYmVlbiBkZXBy ZWNhdGVkIGluIGZhdm9yIG9mCiAgICAgICJnZGIuYnJlYWtwb2ludHMiLgog CisgICoqIEEgbmV3IGNsYXNzICJnZGIuRmluaXNoQnJlYWtwb2ludCIgaXMg cHJvdmlkZWQgdG8gY2F0Y2ggdGhlIHJldHVybgorICAgICBvZiBhIGZ1bmN0 aW9uLiAgVGhpcyBjbGFzcyBpcyBiYXNlZCBvbiB0aGUgImZpbmlzaCIgY29t bWFuZAorICAgICBhdmFpbGFibGUgaW4gdGhlIENMSS4gCisKICAgKiogVHlw ZSBvYmplY3RzIGZvciBzdHJ1Y3QgYW5kIHVuaW9uIHR5cGVzIG5vdyBhbGxv dyBhY2Nlc3MgdG8KICAgICAgdGhlIGZpZWxkcyB1c2luZyBzdGFuZGFyZCBQ eXRob24gZGljdGlvbmFyeSAobWFwcGluZykgbWV0aG9kcy4KICAgICAgRm9y IGV4YW1wbGUsICJzb21lX3R5cGVbJ215ZmllbGQnXSIgbm93IHdvcmtzLCBh cyBkb2VzCmRpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2Ri L2RvYy9nZGIudGV4aW5mbwppbmRleCA1MGMyOTllLi5lMzFiMDNlIDEwMDY0 NAotLS0gYS9nZGIvZG9jL2dkYi50ZXhpbmZvCisrKyBiL2dkYi9kb2MvZ2Ri LnRleGluZm8KQEAgLTIxNTAxLDYgKzIxNTAxLDggQEAgc2l0dWF0aW9uLCBh IFB5dGhvbiBAY29kZXtLZXlib2FyZEludGVycnVwdH0gZXhjZXB0aW9uIGlz IHRocm93bi4KICogU3ltYm9sIFRhYmxlcyBJbiBQeXRob246OiAgICAgUHl0 aG9uIHJlcHJlc2VudGF0aW9uIG9mIHN5bWJvbCB0YWJsZXMuCiAqIExhenkg U3RyaW5ncyBJbiBQeXRob246OiAgICAgIFB5dGhvbiByZXByZXNlbnRhdGlv biBvZiBsYXp5IHN0cmluZ3MuCiAqIEJyZWFrcG9pbnRzIEluIFB5dGhvbjo6 ICAgICAgIE1hbmlwdWxhdGluZyBicmVha3BvaW50cyB1c2luZyBQeXRob24u CisqIEZpbmlzaCBCcmVha3BvaW50cyBpbiBQeXRob246OiBTZXR0aW5nIEJy ZWFrcG9pbnRzIG9uIGZ1bmN0aW9uIHJldHVybgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1c2luZyBQeXRob24uCiBAZW5kIG1lbnUKIAog QG5vZGUgQmFzaWMgUHl0aG9uCkBAIC0yNDMzNSw2ICsyNDMzNyw1NSBAQCBj 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 aXQgYS9nZGIvaW5mY21kLmMgYi9nZGIvaW5mY21kLmMKaW5kZXggNWQ5NGNk NC4uY2ZmYTE5NCAxMDA2NDQKLS0tIGEvZ2RiL2luZmNtZC5jCisrKyBiL2dk Yi9pbmZjbWQuYwpAQCAtMTQxNCwxNiArMTQxNCwyNiBAQCBhZHZhbmNlX2Nv bW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQogICB1bnRpbF9icmVh a19jb21tYW5kIChhcmcsIGZyb21fdHR5LCAxKTsKIH0KIAwKLS8qIFByaW50 IHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIGEgJ2Zp bmlzaCcgY29tbWFuZC4gICovCisvKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRo ZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIGEgJ2Zpbmlz aCcKKyAgIGNvbW1hbmQvQlAuICAqLwogCi1zdGF0aWMgdm9pZAotcHJpbnRf cmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3Qg dHlwZSAqdmFsdWVfdHlwZSkKK3N0cnVjdCB2YWx1ZSAqCitnZXRfcmV0dXJu X3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAq dmFsdWVfdHlwZSkKIHsKLSAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBn ZXRfcmVnY2FjaGVfYXJjaCAoc3RvcF9yZWdpc3RlcnMpOwotICBzdHJ1Y3Qg Y2xlYW51cCAqb2xkX2NoYWluOwotICBzdHJ1Y3QgdWlfc3RyZWFtICpzdGI7 CisgIHN0cnVjdCByZWdjYWNoZSAqc3RvcF9yZWdzID0gc3RvcF9yZWdpc3Rl cnM7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOwogICBzdHJ1Y3QgdmFs dWUgKnZhbHVlOwogICBzdHJ1Y3QgdWlfb3V0ICp1aW91dCA9IGN1cnJlbnRf dWlvdXQ7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwID0gbWFrZV9jbGVh bnVwIChudWxsX2NsZWFudXAsIE5VTEwpOworCisgIC8qIElmIHN0b3BfcmVn aXN0ZXJzIHdlcmUgbm90IHNhdmVkLCB1c2UgdGhlIGN1cnJlbnQgcmVnaXN0 ZXJzLiAgKi8KKyAgaWYgKCFzdG9wX3JlZ3MpCisgICAgeworICAgICAgc3Rv cF9yZWdzID0gcmVnY2FjaGVfZHVwIChnZXRfY3VycmVudF9yZWdjYWNoZSAo KSk7CisgICAgICBjbGVhbnVwID0gbWFrZV9jbGVhbnVwX3JlZ2NhY2hlX3hm cmVlIChzdG9wX3JlZ3MpOworICAgIH0KKworICBnZGJhcmNoID0gZ2V0X3Jl Z2NhY2hlX2FyY2ggKHN0b3BfcmVncyk7CiAKICAgQ0hFQ0tfVFlQRURFRiAo dmFsdWVfdHlwZSk7CiAgIGdkYl9hc3NlcnQgKFRZUEVfQ09ERSAodmFsdWVf dHlwZSkgIT0gVFlQRV9DT0RFX1ZPSUQpOwpAQCAtMTQ0Miw3ICsxNDUyLDcg QEAgcHJpbnRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBl LCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkKICAgICBjYXNlIFJFVFVSTl9W QUxVRV9BQklfUkVUVVJOU19BRERSRVNTOgogICAgIGNhc2UgUkVUVVJOX1ZB TFVFX0FCSV9QUkVTRVJWRVNfQUREUkVTUzoKICAgICAgIHZhbHVlID0gYWxs b2NhdGVfdmFsdWUgKHZhbHVlX3R5cGUpOwotICAgICAgZ2RiYXJjaF9yZXR1 cm5fdmFsdWUgKGdkYmFyY2gsIGZ1bmNfdHlwZSwgdmFsdWVfdHlwZSwgc3Rv cF9yZWdpc3RlcnMsCisgICAgICBnZGJhcmNoX3JldHVybl92YWx1ZSAoZ2Ri YXJjaCwgZnVuY190eXBlLCB2YWx1ZV90eXBlLCBzdG9wX3JlZ3MsCiAJCQkg ICAgdmFsdWVfY29udGVudHNfcmF3ICh2YWx1ZSksIE5VTEwpOwogICAgICAg YnJlYWs7CiAgICAgY2FzZSBSRVRVUk5fVkFMVUVfU1RSVUNUX0NPTlZFTlRJ T046CkBAIC0xNDUyLDYgKzE0NjIsMjEgQEAgcHJpbnRfcmV0dXJuX3ZhbHVl 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 ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDcyNjc1Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2RiL3B5dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMK QEAgLTAsMCArMSw0NTMgQEAKKy8qIFB5dGhvbiBpbnRlcmZhY2UgdG8gZmlu 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 YnAgPSAxOworICAKKyAgLyogQmluZCB0aGUgYnJlYWtwb2ludCB3aXRoIHRo ZSBjdXJyZW50IHByb2dyYW0gc3BhY2UuICAqLworICBzZWxmX2JwZmluaXNo LT5weV9icC5icC0+cHNwYWNlID0gY3VycmVudF9wcm9ncmFtX3NwYWNlOwor CisgIHJldHVybiAwOworICAKKyBpbnZhbGlkX2ZyYW1lOgorICBQeUVycl9T ZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsIAorICAgICAgICAgICAgICAg ICAgIF8oIkludmFsaWQgSUQgZm9yIHRoZSBgZnJhbWUnIG9iamVjdC4iKSk7 CisgIHJldHVybiAtMTsKK30KKworLyogQ2FsbGVkIHdoZW4gR0RCIG5vdGlj ZXMgdGhhdCB0aGUgZmluaXNoIGJyZWFrcG9pbnQgQlBfT0JKIGlzIG91dCBv ZgorICAgdGhlIGN1cnJlbnQgY2FsbHN0YWNrLiAgVHJpZ2dlcnMgdGhlIG1l dGhvZCBPVVRfT0ZfU0NPUEUgaWYgaW1wbGVtZW50ZWQsCisgICB0aGVuIGRl bGV0ZSB0aGUgYnJlYWtwb2ludC4gICovCisKK3N0YXRpYyB2b2lkCiticGZp bmlzaHB5X291dF9vZl9zY29wZSAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50 X29iamVjdCAqYnBmaW5pc2hfb2JqKQoreworICB2b2xhdGlsZSBzdHJ1Y3Qg Z2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisgIGJyZWFrcG9pbnRfb2JqZWN0ICpi cF9vYmogPSAoYnJlYWtwb2ludF9vYmplY3QgKikgYnBmaW5pc2hfb2JqOwor ICBQeU9iamVjdCAqcHlfb2JqID0gKFB5T2JqZWN0ICopIGJwX29iajsKKwor ICBpZiAoYnBmaW5pc2hfb2JqLT5weV9icC5icC0+ZW5hYmxlX3N0YXRlID09 IGJwX2VuYWJsZWQKKyAgICAgICYmIFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcg KHB5X29iaiwgb3V0b2ZzY29wZV9mdW5jKSkKKyAgICB7CisgICAgICBpZiAo IVB5T2JqZWN0X0NhbGxNZXRob2QgKHB5X29iaiwgb3V0b2ZzY29wZV9mdW5j LCBOVUxMKSkKKyAgICAgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAg ICB9CisKKyAgZGVsZXRlX2JyZWFrcG9pbnQgKGJwZmluaXNoX29iai0+cHlf YnAuYnApOworfQorCisvKiBDYWxsYmFjayBmb3IgYGJwZmluaXNocHlfZGV0 ZWN0X291dF9zY29wZScuICBUcmlnZ2VycyBQeXRob24ncworICAgYEItPm91 dF9vZl9zY29wZScgZnVuY3Rpb24gaWYgQiBpcyBhIEZpbmlzaEJyZWFrcG9p bnQgb3V0IG9mIGl0cyBzY29wZS4gICovCisKK3N0YXRpYyBpbnQKK2JwZmlu aXNocHlfZGV0ZWN0X291dF9zY29wZV9jYiAoc3RydWN0IGJyZWFrcG9pbnQg KmIsIHZvaWQgKmFyZ3MpCit7CisgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhj ZXB0aW9uIGV4Y2VwdDsKKyAgc3RydWN0IGJyZWFrcG9pbnQgKmJwX3N0b3Bw ZWQgPSAoc3RydWN0IGJyZWFrcG9pbnQgKikgYXJnczsKKyAgUHlPYmplY3Qg KnB5X2JwID0gKFB5T2JqZWN0ICopIGItPnB5X2JwX29iamVjdDsKKyAgc3Ry dWN0IGdkYmFyY2ggKmdhcmNoID0gYi0+Z2RiYXJjaCA/IGItPmdkYmFyY2gg OiBnZXRfY3VycmVudF9hcmNoICgpOworICAKKyAgLyogVHJpZ2dlciBvdXRf b2Zfc2NvcGUgaWYgdGhpcyBpcyBhIEZpbmlzaEJyZWFrcG9pbnQgYW5kIGl0 cyBmcmFtZSBpcworICAgICBub3QgYW55bW9yZSBpbiB0aGUgY3VycmVudCBj YWxsc3RhY2suICAqLworICBpZiAocHlfYnAgIT0gTlVMTCAmJiBiLT5weV9i cF9vYmplY3QtPmlzX2ZpbmlzaF9icCkKKyAgICB7CisgICAgICBzdHJ1Y3Qg ZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpmaW5pc2hfYnAgPQorICAgICAg ICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICopIHB5X2Jw OworCisgICAgICAvKiBDaGVjayBzY29wZSBpZiBub3QgY3VycmVudGx5IHN0 b3BwZWQgYXQgdGhlIEZpbmlzaEJyZWFrcG9pbnQuICAqLworICAgICAgaWYg KGIgIT0gYnBfc3RvcHBlZCkKKyAgICAgICAgeworICAgICAgICAgIFRSWV9D QVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGlmIChiLT5wc3BhY2UgPT0gY3VycmVudF9pbmZl cmlvciAoKS0+cHNwYWNlCisgICAgICAgICAgICAgICAgICAmJiAoIXRhcmdl dF9oYXNfcmVnaXN0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgfHwgZnJh bWVfZmluZF9ieV9pZCAoYi0+ZnJhbWVfaWQpID09IE5VTEwpKQorICAgICAg ICAgICAgICAgIGJwZmluaXNocHlfb3V0X29mX3Njb3BlIChmaW5pc2hfYnAp OworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChleGNlcHQucmVhc29u IDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ2RicHlfY29u dmVydF9leGNlcHRpb24gKGV4Y2VwdCk7CisgICAgICAgICAgICAgIGdkYnB5 X3ByaW50X3N0YWNrICgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBBdHRhY2hlZCB0byBgc3Rv cCcgbm90aWZpY2F0aW9ucywgY2hlY2sgaWYgdGhlIGV4ZWN1dGlvbiBoYXMg cnVuCisgICBvdXQgb2YgdGhlIHNjb3BlIG9mIGFueSBGaW5pc2hCcmVha3Bv aW50IGJlZm9yZSBpdCBoYXMgYmVlbiBoaXQuICAqLworCitzdGF0aWMgdm9p ZAorYnBmaW5pc2hweV9oYW5kbGVfc3RvcCAoc3RydWN0IGJwc3RhdHMgKmJz LCBpbnQgcHJpbnRfZnJhbWUpCit7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVh bnVwID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdldF9jdXJyZW50X2FyY2ggKCks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGN1cnJlbnRfbGFuZ3VhZ2UpOworCisgIGl0ZXJhdGVfb3Zlcl9icmVh a3BvaW50cyAoYnBmaW5pc2hweV9kZXRlY3Rfb3V0X3Njb3BlX2NiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJzID09IE5VTEwgPyBOVUxMIDog YnMtPmJyZWFrcG9pbnRfYXQpOworCisgIGRvX2NsZWFudXBzIChjbGVhbnVw KTsKK30KKworLyogQXR0YWNoZWQgdG8gYGV4aXQnIG5vdGlmaWNhdGlvbnMs IHRyaWdnZXJzIGFsbCB0aGUgbmVjZXNzYXJ5IG91dCBvZgorICAgc2NvcGUg bm90aWZpY2F0aW9ucy4gICovCisKK3N0YXRpYyB2b2lkCiticGZpbmlzaHB5 X2hhbmRsZV9leGl0IChzdHJ1Y3QgaW5mZXJpb3IgKmluZikKK3sKKyAgc3Ry dWN0IGNsZWFudXAgKmNsZWFudXAgPSBlbnN1cmVfcHl0aG9uX2VudiAodGFy Z2V0X2dkYmFyY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGN1cnJlbnRfbGFuZ3VhZ2UpOworCisgIGl0ZXJh dGVfb3Zlcl9icmVha3BvaW50cyAoYnBmaW5pc2hweV9kZXRlY3Rfb3V0X3Nj b3BlX2NiLCBOVUxMKTsKKworICBkb19jbGVhbnVwcyAoY2xlYW51cCk7Cit9 CisKKy8qIEluaXRpYWxpemUgdGhlIFB5dGhvbiBmaW5pc2ggYnJlYWtwb2lu dCBjb2RlLiAgKi8KKwordm9pZAorZ2RicHlfaW5pdGlhbGl6ZV9maW5pc2hi cmVha3BvaW50cyAodm9pZCkKK3sKKyAgaWYgKFB5VHlwZV9SZWFkeSAoJmZp bmlzaF9icmVha3BvaW50X29iamVjdF90eXBlKSA8IDApCisgICAgICByZXR1 cm47CisgIAorICBQeV9JTkNSRUYgKCZmaW5pc2hfYnJlYWtwb2ludF9vYmpl Y3RfdHlwZSk7CisgIFB5TW9kdWxlX0FkZE9iamVjdCAoZ2RiX21vZHVsZSwg IkZpbmlzaEJyZWFrcG9pbnQiLAorICAgICAgICAgICAgICAgICAgICAgIChQ eU9iamVjdCAqKSAmZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGUpOwor ICAgIAorICBvYnNlcnZlcl9hdHRhY2hfbm9ybWFsX3N0b3AgKGJwZmluaXNo cHlfaGFuZGxlX3N0b3ApOworICBvYnNlcnZlcl9hdHRhY2hfaW5mZXJpb3Jf ZXhpdCAoYnBmaW5pc2hweV9oYW5kbGVfZXhpdCk7Cit9CisKK3N0YXRpYyBQ eUdldFNldERlZiBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfZ2V0c2V0W10g PSB7CisgIHsgInJldHVybl92YWx1ZSIsIGJwZmluaXNocHlfZ2V0X3JldHVy bnZhbHVlLCBOVUxMLAorICAiZ2RiLlZhbHVlIG9iamVjdCByZXByZXNlbnRp bmcgdGhlIHJldHVybiB2YWx1ZSwgaWYgYW55LiBcCitOb25lIG90aGVyd2lz ZS4iLCBOVUxMIH0sCisgICAgeyBOVUxMIH0gIC8qIFNlbnRpbmVsLiAgKi8K K307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgZmluaXNoX2JyZWFrcG9pbnRf b2JqZWN0X3R5cGUgPQoreworICBQeU9iamVjdF9IRUFEX0lOSVQgKE5VTEwp CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypvYl9zaXpl Ki8KKyAgImdkYi5GaW5pc2hCcmVha3BvaW50IiwgICAgICAgICAvKnRwX25h bWUqLworICBzaXplb2YgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmpl Y3QpLCAgLyp0cF9iYXNpY3NpemUqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICBicGZpbmlzaHB5X2Rl YWxsb2MsICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29t cGFyZSovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0 cF9yZXByKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KnRwX2FzX251bWJlciovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0 dHJvICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0 cF9hc19idWZmZXIqLworICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZM QUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICJHREIgZmluaXNoIGJy ZWFrcG9pbnQgb2JqZWN0IiwgLyogdHBfZG9jICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hj b21wYXJlICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVy cyAqLworICBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfZ2V0c2V0LC8qIHRw X2dldHNldCAqLworICAmYnJlYWtwb2ludF9vYmplY3RfdHlwZSwgICAgICAg IC8qIHRwX2Jhc2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9kaWN0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAq LworICBicGZpbmlzaHB5X2luaXQsICAgICAgICAgICAgICAgIC8qIHRwX2lu aXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9hbGxvYyAqLworICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX25ldyAqLworfTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHkt ZnJhbWUuYyBiL2dkYi9weXRob24vcHktZnJhbWUuYwppbmRleCAyMDA2NGNh Li5jMzM0ZjYzIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5LWZyYW1lLmMK KysrIGIvZ2RiL3B5dGhvbi9weS1mcmFtZS5jCkBAIC02MCw5ICs2MCwxMCBA QCBzdGF0aWMgUHlUeXBlT2JqZWN0IGZyYW1lX29iamVjdF90eXBlOwogICAg b2JqZWN0LiAgSWYgdGhlIGZyYW1lIGRvZXNuJ3QgZXhpc3QgYW55bW9yZSAo dGhlIGZyYW1lIGlkIGRvZXNuJ3QKICAgIGNvcnJlc3BvbmQgdG8gYW55IGZy YW1lIGluIHRoZSBpbmZlcmlvciksIHJldHVybnMgTlVMTC4gICovCiAKLXN0 YXRpYyBzdHJ1Y3QgZnJhbWVfaW5mbyAqCi1mcmFtZV9vYmplY3RfdG9fZnJh bWVfaW5mbyAoZnJhbWVfb2JqZWN0ICpmcmFtZV9vYmopCitzdHJ1Y3QgZnJh bWVfaW5mbyAqCitmcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoUHlPYmpl Y3QgKm9iaikKIHsKKyAgZnJhbWVfb2JqZWN0ICpmcmFtZV9vYmogPSAoZnJh bWVfb2JqZWN0ICopIG9iajsgIAogICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJh bWU7CiAKICAgZnJhbWUgPSBmcmFtZV9maW5kX2J5X2lkIChmcmFtZV9vYmot PmZyYW1lX2lkKTsKQEAgLTEwNiw3ICsxMDcsNyBAQCBmcmFweV9pc192YWxp ZCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9D QVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAg ZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoKGZyYW1lX29i amVjdCAqKSBzZWxmKTsKKyAgICAgIGZyYW1lID0gZnJhbWVfb2JqZWN0X3Rv X2ZyYW1lX2luZm8gKHNlbGYpOwogICAgIH0KICAgR0RCX1BZX0hBTkRMRV9F WENFUFRJT04gKGV4Y2VwdCk7CiAKQEAgLTEzMCw3ICsxMzEsNyBAQCBmcmFw eV9uYW1lIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAg VFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0g ICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNl bGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYs IGZyYW1lKTsKIAogICAgICAgZmluZF9mcmFtZV9mdW5uYW1lIChmcmFtZSwg Jm5hbWUsICZsYW5nLCBOVUxMKTsKICAgICB9CkBAIC0xNTksNyArMTYwLDcg QEAgZnJhcHlfdHlwZSAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdz KQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAg ICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVj dCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElE IChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHR5cGUgPSBnZXRfZnJhbWVfdHlw ZSAoZnJhbWUpOwogICAgIH0KQEAgLTE4MCw3ICsxODEsNyBAQCBmcmFweV91 bndpbmRfc3RvcF9yZWFzb24gKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAq YXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxM KQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9v YmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoc2VsZiwgZnJhbWUpOwogICAgIH0KICAgR0RCX1BZX0hBTkRMRV9F WENFUFRJT04gKGV4Y2VwdCk7CiAKQEAgLTIwMSw3ICsyMDIsNyBAQCBmcmFw eV9wYyAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAg ICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxm LCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBm cmFtZSk7CiAKICAgICAgIHBjID0gZ2V0X2ZyYW1lX3BjIChmcmFtZSk7CiAg ICAgfQpAQCAtMjIyLDcgKzIyMyw3IEBAIGZyYXB5X2Jsb2NrIChQeU9iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNl cHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFV SVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAg ICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKICAgICAg IGJsb2NrID0gZ2V0X2ZyYW1lX2Jsb2NrIChmcmFtZSwgTlVMTCk7CiAgICAg fQogICBHREJfUFlfSEFORExFX0VYQ0VQVElPTiAoZXhjZXB0KTsKQEAgLTI2 Myw3ICsyNjQsNyBAQCBmcmFweV9mdW5jdGlvbiAoUHlPYmplY3QgKnNlbGYs IFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRV Uk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJ RCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQ WV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHN5bSA9 IGZpbmRfcGNfZnVuY3Rpb24gKGdldF9mcmFtZV9hZGRyZXNzX2luX2Jsb2Nr IChmcmFtZSkpOwogICAgIH0KQEAgLTMzMCw3ICszMzEsNyBAQCBmcmFweV9v bGRlciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAg ICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxm LCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBm cmFtZSk7CiAKICAgICAgIHByZXYgPSBnZXRfcHJldl9mcmFtZSAoZnJhbWUp OwogICAgICAgaWYgKHByZXYpCkBAIC0zNTksNyArMzYwLDcgQEAgZnJhcHlf bmV3ZXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBU UllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAg ICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2Vs ZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwg ZnJhbWUpOwogCiAgICAgICBuZXh0ID0gZ2V0X25leHRfZnJhbWUgKGZyYW1l KTsKICAgICAgIGlmIChuZXh0KQpAQCAtMzg4LDcgKzM4OSw3IEBAIGZyYXB5 X2ZpbmRfc2FsIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAK ICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7 Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICop IHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNl bGYsIGZyYW1lKTsKIAogICAgICAgZmluZF9mcmFtZV9zYWwgKGZyYW1lLCAm c2FsKTsKICAgICAgIHNhbF9vYmogPSBzeW10YWJfYW5kX2xpbmVfdG9fc2Fs X29iamVjdCAoc2FsKTsKQEAgLTQ0NCw3ICs0NDUsNyBAQCBmcmFweV9yZWFk X3ZhciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgICAg ICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogCXsKLQkg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwg ZnJhbWUpOworCSAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUp OwogCiAJICBpZiAoIWJsb2NrKQogCSAgICBibG9jayA9IGdldF9mcmFtZV9i bG9jayAoZnJhbWUsIE5VTEwpOwpAQCAtNDcyLDcgKzQ3Myw3IEBAIGZyYXB5 X3JlYWRfdmFyIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAK ICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7 Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICop IHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNl bGYsIGZyYW1lKTsKIAogICAgICAgdmFsID0gcmVhZF92YXJfdmFsdWUgKHZh ciwgZnJhbWUpOwogICAgIH0KQEAgLTQ4NywxMiArNDg4LDExIEBAIHN0YXRp YyBQeU9iamVjdCAqCiBmcmFweV9zZWxlY3QgKFB5T2JqZWN0ICpzZWxmLCBQ eU9iamVjdCAqYXJncykKIHsKICAgc3RydWN0IGZyYW1lX2luZm8gKmZpOwot ICBmcmFtZV9vYmplY3QgKmZyYW1lID0gKGZyYW1lX29iamVjdCAqKSBzZWxm OwogICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CiAK ICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7 Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChmcmFtZSwgZmkpOworICAg ICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZmkpOwogCiAgICAgICBz ZWxlY3RfZnJhbWUgKGZpKTsKICAgICB9CmRpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL3B5dGhvbi1pbnRlcm5hbC5oIGIvZ2RiL3B5dGhvbi9weXRob24taW50 ZXJuYWwuaAppbmRleCBlZjM5ZDVkLi4xYmE3MTMzIDEwMDY0NAotLS0gYS9n ZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCisrKyBiL2dkYi9weXRob24v cHl0aG9uLWludGVybmFsLmgKQEAgLTEyMCw5ICsxMjAsNTAgQEAgZXh0ZXJu IFB5VHlwZU9iamVjdCBzeW1ib2xfb2JqZWN0X3R5cGU7CiBleHRlcm4gUHlU eXBlT2JqZWN0IGV2ZW50X29iamVjdF90eXBlOwogZXh0ZXJuIFB5VHlwZU9i amVjdCBldmVudHNfb2JqZWN0X3R5cGU7CiBleHRlcm4gUHlUeXBlT2JqZWN0 IHN0b3BfZXZlbnRfb2JqZWN0X3R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0 IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IGJy ZWFrcG9pbnRfb2JqZWN0Cit7CisgIFB5T2JqZWN0X0hFQUQKKworICAvKiBU aGUgYnJlYWtwb2ludCBudW1iZXIgYWNjb3JkaW5nIHRvIGdkYi4gICovCisg IGludCBudW1iZXI7CisKKyAgLyogVGhlIGdkYiBicmVha3BvaW50IG9iamVj dCwgb3IgTlVMTCBpZiB0aGUgYnJlYWtwb2ludCBoYXMgYmVlbgorICAgICBk ZWxldGVkLiAgKi8KKyAgc3RydWN0IGJyZWFrcG9pbnQgKmJwOworCisgIC8q IDEgaXMgdGhpcyBpcyBhIEZpbmlzaEJyZWFrcG9pbnQgb2JqZWN0LCAwIG90 aGVyd2lzZS4gICovCisgIGludCBpc19maW5pc2hfYnA7Cit9IGJyZWFrcG9p bnRfb2JqZWN0OworCisvKiBSZXF1aXJlIHRoYXQgQlJFQUtQT0lOVCBiZSBh IHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRocm93IGEgUHl0aG9uCisgICBleGNl cHRpb24gaWYgaXQgaXMgaW52YWxpZC4gICovCisjZGVmaW5lIEJQUFlfUkVR VUlSRV9WQUxJRChCcmVha3BvaW50KSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBOVUxMKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBQ eUVycl9Gb3JtYXQgKFB5RXhjX1J1bnRpbWVFcnJvciwgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o IkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4iKSwgICAgICAgICAgICBcCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCcmVha3BvaW50KS0+bnVt YmVyKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkK KworLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUgYSB2YWxpZCBicmVh a3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgorICAgZXhjZXB0aW9uIGlmIGl0 IGlzIGludmFsaWQuICBUaGlzIG1hY3JvIGlzIGZvciB1c2UgaW4gc2V0dGVy IGZ1bmN0aW9ucy4gICovCisjZGVmaW5lIEJQUFlfU0VUX1JFUVVJUkVfVkFM SUQoQnJlYWtwb2ludCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoKEJy ZWFrcG9pbnQpLT5icCA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICAgUHlFcnJfRm9ybWF0IChQeUV4Y19SdW50aW1lRXJyb3Is IF8oIkJyZWFrcG9pbnQgJWQgaXMgaW52YWxpZC4iKSwgXAorICAgICAgICAg ICAgICAgICAgICAgICAgKEJyZWFrcG9pbnQpLT5udW1iZXIpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJldHVybiAtMTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp bGUgKDApCisKKworLyogVmFyaWFibGVzIHVzZWQgdG8gcGFzcyBpbmZvcm1h dGlvbiBiZXR3ZWVuIHRoZSBCcmVha3BvaW50CisgICBjb25zdHJ1Y3RvciBh bmQgdGhlIGJyZWFrcG9pbnQtY3JlYXRlZCBob29rIGZ1bmN0aW9uLiAgKi8K K2V4dGVybiBicmVha3BvaW50X29iamVjdCAqYnBweV9wZW5kaW5nX29iamVj dDsKIAotLyogRGVmaW5lZCBpbiBweS1icmVha3BvaW50LmMgKi8KLXR5cGVk ZWYgc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0 OwogCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtMTg4LDYgKzIyOSw3IEBAIHN0 cnVjdCB2YWx1ZSAqY29udmVydF92YWx1ZV9mcm9tX3B5dGhvbiAoUHlPYmpl Y3QgKm9iaik7CiBzdHJ1Y3QgdHlwZSAqdHlwZV9vYmplY3RfdG9fdHlwZSAo UHlPYmplY3QgKm9iaik7CiBzdHJ1Y3Qgc3ltdGFiICpzeW10YWJfb2JqZWN0 X3RvX3N5bXRhYiAoUHlPYmplY3QgKm9iaik7CiBzdHJ1Y3Qgc3ltdGFiX2Fu ZF9saW5lICpzYWxfb2JqZWN0X3RvX3N5bXRhYl9hbmRfbGluZSAoUHlPYmpl Y3QgKm9iaik7CitzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWVfb2JqZWN0X3Rv X2ZyYW1lX2luZm8gKFB5T2JqZWN0ICpmcmFtZV9vYmopOwogCiB2b2lkIGdk YnB5X2luaXRpYWxpemVfYXV0b19sb2FkICh2b2lkKTsKIHZvaWQgZ2RicHlf aW5pdGlhbGl6ZV92YWx1ZXMgKHZvaWQpOwpAQCAtMjAyLDYgKzI0NCw3IEBA IHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9mdW5jdGlvbnMgKHZvaWQpOwogdm9p ZCBnZGJweV9pbml0aWFsaXplX3BzcGFjZSAodm9pZCk7CiB2b2lkIGdkYnB5 X2luaXRpYWxpemVfb2JqZmlsZSAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRp YWxpemVfYnJlYWtwb2ludHMgKHZvaWQpOwordm9pZCBnZGJweV9pbml0aWFs aXplX2ZpbmlzaGJyZWFrcG9pbnRzICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5p dGlhbGl6ZV9sYXp5X3N0cmluZyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRp YWxpemVfcGFyYW1ldGVycyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxp emVfdGhyZWFkICh2b2lkKTsKQEAgLTI3NSw2ICszMTgsOSBAQCBQeU9iamVj dCAqZ2RicHlfZ2V0X3Zhcm9ial9wcmV0dHlfcHJpbnRlciAoc3RydWN0IHZh bHVlICp2YWx1ZSk7CiBjaGFyICpnZGJweV9nZXRfZGlzcGxheV9oaW50IChQ eU9iamVjdCAqcHJpbnRlcik7CiBQeU9iamVjdCAqZ2RicHlfZGVmYXVsdF92 aXN1YWxpemVyIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOwog Cit2b2lkIGJwZmluaXNocHlfcHJlX3N0b3BfaG9vayAoc3RydWN0IGJyZWFr cG9pbnRfb2JqZWN0ICpicF9vYmopOwordm9pZCBicGZpbmlzaHB5X3Bvc3Rf c3RvcF9ob29rIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaik7 CisKIGV4dGVybiBQeU9iamVjdCAqZ2RicHlfZG9jX2NzdDsKIGV4dGVybiBQ eU9iamVjdCAqZ2RicHlfY2hpbGRyZW5fY3N0OwogZXh0ZXJuIFB5T2JqZWN0 ICpnZGJweV90b19zdHJpbmdfY3N0OwpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhv bi9weXRob24uYyBiL2dkYi9weXRob24vcHl0aG9uLmMKaW5kZXggYjBiOWE5 Yy4uZjNmZGY5YSAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weXRob24uYwor KysgYi9nZGIvcHl0aG9uL3B5dGhvbi5jCkBAIC0xMjQ3LDYgKzEyNDcsNyBA QCBFbmFibGVzIG9yIGRpc2FibGVzIHByaW50aW5nIG9mIFB5dGhvbiBzdGFj ayB0cmFjZXMuIiksCiAgIGdkYnB5X2luaXRpYWxpemVfcHNwYWNlICgpOwog ICBnZGJweV9pbml0aWFsaXplX29iamZpbGUgKCk7CiAgIGdkYnB5X2luaXRp YWxpemVfYnJlYWtwb2ludHMgKCk7CisgIGdkYnB5X2luaXRpYWxpemVfZmlu aXNoYnJlYWtwb2ludHMgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVfbGF6eV9z dHJpbmcgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVfdGhyZWFkICgpOwogICBn ZGJweV9pbml0aWFsaXplX2luZmVyaW9yICgpOwpkaWZmIC0tZ2l0IGEvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwCmluZGV4 IGUwZGQwODcuLjBlM2FkYmQgMTAwNjQ0Ci0tLSBhL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1icmVha3BvaW50LmV4cAorKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktYnJlYWtwb2ludC5leHAKQEAgLTQ0LDcgKzQ0 LDggQEAgZ2RiX3B5X3Rlc3Rfc2lsZW50X2NtZCAicHl0aG9uIGJsaXN0ID0g Z2RiLmJyZWFrcG9pbnRzKCkiICJHZXQgQnJlYWtwb2ludCBMaXN0IgogZ2Ri X3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMFxdIiAiPGdkYi5CcmVha3Bv aW50IG9iamVjdCBhdCAkaGV4PiIgIkNoZWNrIG9iaiBleGlzdHMiCiBnZGJf dGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFswXF0ubG9jYXRpb24iICJtYWlu LiIgIkNoZWNrIGJyZWFrcG9pbnQgbG9jYXRpb24iCiAKLWdkYl9icmVha3Bv aW50IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJCcmVhayBhdCBtdWx0aXBseS4i XQorc2V0IG11bHRfbGluZSBbZ2RiX2dldF9saW5lX251bWJlciAiQnJlYWsg YXQgbXVsdGlwbHkuIl0KK2dkYl9icmVha3BvaW50ICR7bXVsdF9saW5lfQog Z2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQgIkJyZWFrIGF0IG11bHRpcGx5 LiIKIAogIyBDaGVjayB0aGF0IHRoZSBQeXRob24gYnJlYWtwb2ludCBjb2Rl IG5vdGVkIHRoZSBhZGRpdGlvbiBvZiBhCkBAIC01NCw3ICs1NSw5IEBAIGdk Yl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGJsaXN0KSIgIjIiICJDaGVjayBm b3IgdHdvIGJyZWFrcG9pbnRzIgogZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBi bGlzdFxbMFxdIiAiPGdkYi5CcmVha3BvaW50IG9iamVjdCBhdCAkaGV4PiIg IkNoZWNrIG9iaiBleGlzdHMiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJs aXN0XFswXF0ubG9jYXRpb24iICJtYWluLiIgIkNoZWNrIGJyZWFrcG9pbnQg bG9jYXRpb24iCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFsxXF0i ICI8Z2RiLkJyZWFrcG9pbnQgb2JqZWN0IGF0ICRoZXg+IiAiQ2hlY2sgb2Jq IGV4aXN0cyIKLWdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzFcXS5s b2NhdGlvbiIgInB5LWJyZWFrcG9pbnRcLmM6NDEqIiAiQ2hlY2sgYnJlYWtw b2ludCBsb2NhdGlvbiIKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlz dFxbMVxdLmxvY2F0aW9uIiAicHktYnJlYWtwb2ludFwuYzoke211bHRfbGlu ZX0qIiBcCisgICAgICAgICAiQ2hlY2sgYnJlYWtwb2ludCBsb2NhdGlvbiIK IAogIyBDaGVjayBoaXQgYW5kIGlnbm9yZSBjb3VudHMuIAogZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBibGlzdFxbMVxdLmhpdF9jb3VudCIgIjEiICJDaGVj ayBicmVha3BvaW50IGhpdCBjb3VudCIKZGlmZiAtLWdpdCBhL2dkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5jIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkYmVhZAot LS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludC5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qIFRo aXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIu CisKKyAgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lu Y2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1 ZGUgPHVuaXN0ZC5oPgorCitpbnQgaW5jcmVhc2VfMSAoaW50ICphKQorewor ICAqYSArPSAxOworICByZXR1cm4gLTU7Cit9CisKK3ZvaWQgaW5jcmVhc2Ug KGludCAqYSkKK3sKKyAgaW5jcmVhc2VfMSAoYSk7Cit9CisKK2ludAordGVz dF8xIChpbnQgaSwgaW50IGopCit7CisgIHJldHVybiBpID09IGo7Cit9CisK K2ludAordGVzdCAoaW50IGksIGludCBqKQoreworICByZXR1cm4gdGVzdF8x IChpLCBqKTsKK30KKworaW50CitjYWxsX2xvbmdqbXBfMSAoam1wX2J1ZiAq YnVmKQoreworICBsb25nam1wICgqYnVmLCAxKTsKK30KKworaW50CitjYWxs X2xvbmdqbXAgKGptcF9idWYgKmJ1ZikKK3sKKyAgY2FsbF9sb25nam1wXzEg KGJ1Zik7Cit9CisKK3ZvaWQKK3Rlc3RfZXhlY19leGl0IChpbnQgZG9fZXhp dCkKK3sKKyAgaWYgKGRvX2V4aXQpCisgICAgZXhpdCAoMCk7CisgIGVsc2UK KyAgICBleGVjbCAoIi9iaW4vZWNobyIsICJlY2hvIiwgIi0xIiwgKGNoYXIg KikwKTsKK30KKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10p Cit7CisgIGptcF9idWYgZW52OworICBpbnQgZm9vID0gNTsKKyAgaW50IGJh ciA9IDQyOworICBpbnQgaSwgajsKKworICBnZXRwaWQgKCk7CisKKyAgaSA9 IDA7CisgIC8qIEJyZWFrIGF0IGluY3JlYXNlLiAgKi8KKyAgaW5jcmVhc2Ug KCZpKTsKKyAgaW5jcmVhc2UgKCZpKTsKKyAgaW5jcmVhc2UgKCZpKTsKKwor ICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICB7CisgICAgICBqICs9 IDE7IC8qIENvbmRpdGlvbiBCcmVhay4gICovCisgICAgfQorCisgIGlmIChz ZXRqbXAgKGVudikgPT0gMCkgLyogbG9uZ2ptcCBjYXVnaHQgKi8KKyAgICB7 CisgICAgICBjYWxsX2xvbmdqbXAgKCZlbnYpOworICAgIH0KKyAgZWxzZQor ICAgIGogKz0gMTsgLyogYWZ0ZXIgbG9uZ2ptcC4gICovCisKKyAgdGVzdF9l eGVjX2V4aXQgKDEpOworCisgIHJldHVybiBqOyAvKiBCcmVhayBhdCBlbmQu ICAqLworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWZpbmlzaC1icmVha3BvaW50LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5leHAKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhZWFhYgotLS0gL2Rldi9udWxs CisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJl YWtwb2ludC5leHAKQEAgLTAsMCArMSwyMzcgQEAKKyMgQ29weXJpZ2h0IChD KSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor IyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RC IHRlc3RzdWl0ZS4gIEl0IHRlc3RzIHRoZSBtZWNoYW5pc20KKyMgZXhwb3Np bmcgdmFsdWVzIHRvIFB5dGhvbi4KKworaWYgJHRyYWNlbGV2ZWwgdGhlbiB7 CisgICAgc3RyYWNlICR0cmFjZWxldmVsCit9CisKK2xvYWRfbGliIGdkYi1w eXRob24uZXhwCisKK3NldCB0ZXN0ZmlsZSAicHktZmluaXNoLWJyZWFrcG9p bnQiCitzZXQgc3JjZmlsZSAke3Rlc3RmaWxlfS5jCisKK2lmIHsgW3ByZXBh cmVfZm9yX3Rlc3RpbmcgJHt0ZXN0ZmlsZX0uZXhwICR7dGVzdGZpbGV9ICR7 c3JjZmlsZX1dIH0geworICAgIHJldHVybiAtMQorfQorCitzZXQgcmVtb3Rl X3B5dGhvbl9maWxlIFtyZW1vdGVfZG93bmxvYWQgaG9zdCAke3NyY2Rpcn0v JHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5XQorCisKKyMgU2tpcCBhbGwgdGVz dHMgaWYgUHl0aG9uIHNjcmlwdGluZyBpcyBub3QgZW5hYmxlZC4KK2lmIHsg W3NraXBfcHl0aG9uX3Rlc3RzXSB9IHsgY29udGludWUgfQorCisjCisjIFRl c3QgRmluaXNoQnJlYWtwb2ludCBpbiBub3JtYWwgY29uZGl0aW9ucworIwor CitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisKK2lmICFbcnVudG9fbWFp bl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byBtYWluLiIKKyAg ICByZXR1cm4gMAorfQorCitnZGJfdGVzdF9ub19vdXRwdXQgInNldCBjb25m aXJtIG9mZiIgImRpc2FibGUgY29uZmlybWF0aW9uIgorZ2RiX3Rlc3QgInNv dXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9uIHNjcmlwdCBpbXBv cnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgor Z2RiX2JyZWFrcG9pbnQgImluY3JlYXNlXzEiCitnZGJfdGVzdCAiY29udGlu dWUiICJCcmVha3BvaW50IC4qYXQuKiIgImNvbnRpbnVlIHRvIHRoZSBmdW5j dGlvbiB0byBmaW5pc2giCisKKyMgc2V0IEZpbmlzaEJyZWFrcG9pbnQKKwor Z2RiX3Rlc3QgInB5dGhvbiBmaW5pc2hicF9kZWZhdWx0ID0gZ2RiLkZpbmlz aEJyZWFrcG9pbnQgKCkiIFwKKyAgICAgICAgICJUZW1wb3JhcnkgYnJlYWtw b2ludC4qIiAic2V0IEZpbmlzaEJyZWFrcG9pbnQgd2l0aCBkZWZhdWx0IGZy YW1lIHZhbHVlIgorZ2RiX3Rlc3QgInB5dGhvbiBmaW5pc2hicCA9IE15Rmlu aXNoQnJlYWtwb2ludCAoZ2RiLnBhcnNlX2FuZF9ldmFsICgnYScpLCBnZGIu bmV3ZXN0X2ZyYW1lICgpKSIgXAorICAgICAgICAgIlRlbXBvcmFyeSBicmVh a3BvaW50LioiICJzZXQgRmluaXNoQnJlYWtwb2ludCIKK2dkYl90ZXN0ICJw eXRob24gcHJpbnQgZmluaXNoYnAucmV0dXJuX3ZhbHVlIiAiTm9uZS4qIiBc CisgICAgICAgICAiY2hlY2sgcmV0dXJuX3ZhbHVlIGF0IGluaXQiCisKKyMg Y2hlY2sgbm9ybWFsIGJwIGhpdAorCitnZGJfdGVzdCAiY29udGludWUiICJN eUZpbmlzaEJyZWFrcG9pbnQgc3RvcCB3aXRoLipyZXR1cm5fdmFsdWUgaXM6 IC01LiojMC4qaW5jcmVhc2UuKiIgXAorICAgICAgICAgImNoZWNrIE15Rmlu aXNoQnJlYWtwb2ludCBoaXQiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZp bmlzaGJwLnJldHVybl92YWx1ZSIgIi01LioiICJjaGVjayByZXR1cm5fdmFs dWUiCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoYnBfZGVmYXVs dC5oaXRfY291bnQiICIxLioiICJjaGVjayBmaW5pc2hCUCBvbiBkZWZhdWx0 IGZyYW1lIGhhcyBiZWVuIGhpdCIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQg ZmluaXNoYnAuaXNfdmFsaWQoKSIgIkZhbHNlLioiXAorICAgICAgICAgImVu c3VyZSB0aGF0IGZpbmlzaCBicCBpcyBpbnZhbGlkIGFmZXIgbm9ybWFsIGhp dCIKKworIyBjaGVjayBGaW5pc2hCcmVha3BvaW50IGluIG1haW4gbm8gYWxs b3dlZAorCitnZGJfdGVzdCAiZmluaXNoIiAibWFpbi4qIiAicmV0dXJuIHRv IG1haW4oKSIKK2dkYl90ZXN0ICJweXRob24gTXlGaW5pc2hCcmVha3BvaW50 IChOb25lLCBnZGIuc2VsZWN0ZWRfZnJhbWUgKCkpIiBcCisgICAgICAgICAi VmFsdWVFcnJvcjogXCJGaW5pc2hCcmVha3BvaW50XCIgbm90IG1lYW5pbmdm dWwgaW4gdGhlIG91dGVybW9zdCBmcmFtZS4uKiIgXAorICAgICAgICAgImNo ZWNrIEZpbmlzaEJQIG5vdCBhbGxvd2VkIGluIG1haW4iCisKKyMKKyMgVGVz dCBGaW5pc2hCcmVha3BvaW50IHdpdGggbm8gZGVidWcgc3ltYm9sIAorIwor CitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisKK2dkYl90ZXN0ICJzb3Vy Y2UgJHJlbW90ZV9weXRob25fZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0 ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKK3Nl dCBjb25kX2xpbmUgW2dkYl9nZXRfbGluZV9udW1iZXIgIkNvbmRpdGlvbiBC cmVhay4iXQorCitpZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwg IkNhbm5vdCBydW4gdG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KKworZ2Ri X2JyZWFrcG9pbnQgImdldHBpZCIge3RlbXBvcmFyeX0KK2dkYl90ZXN0ICJj b250aW51ZSIgIlRlbXBvcmFyeSBicmVha3BvaW50IC4qaW4gZ2V0cGlkLioi ICJjb250aW51ZSB0byBnZXRwaWQiCisKK2dkYl90ZXN0ICJweXRob24gZmlu aXNoQlAgPSBTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJh bWUoKSkiIFwKKyAgICAgICAgICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGlu aXQiIFwKKyAgICAgICAgICJzZXQgZmluaXNoIGJyZWFrcG9pbnQiCitnZGJf dGVzdCAiY29udGludWUiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IHN0b3Au KiIgImNoZWNrIEZpbmlzaEJyZWFrcG9pbnQgaGl0IgorZ2RiX3Rlc3QgInB5 dGhvbiBwcmludCBmaW5pc2hCUC5yZXR1cm5fdmFsdWUiICJOb25lIiAiY2hl Y2sgcmV0dXJuIHZhbHVlIHdpdGhvdXQgZGVidWcgc3ltYm9sIgorCisjCisj IFRlc3QgRmluaXNoQnJlYWtwb2ludCBpbiBmdW5jdGlvbiByZXR1cm5lZCBi eSBsb25nam1wIAorIworCitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisK K2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRob25fZmlsZSIgIlB5dGhv biBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBweXRo b24gc2NyaXB0cyIKKworaWYgIVtydW50byBjYWxsX2xvbmdqbXBfMV0gdGhl biB7CisgICAgcGVycm9yICJjb3VsZG4ndCBydW4gdG8gYnJlYWtwb2ludCBj YWxsX2xvbmdqbXAiCisgICAgY29udGludWUKK30KKworZ2RiX3Rlc3QgInB5 dGhvbiBmaW5pc2hicCA9IFNpbXBsZUZpbmlzaEJyZWFrcG9pbnQoZ2RiLm5l d2VzdF9mcmFtZSgpKSIgXAorICAgICAgICAgIlNpbXBsZUZpbmlzaEJyZWFr cG9pbnQgaW5pdCIgXAorICAgICAgICAgInNldCBmaW5pc2ggYnJlYWtwb2lu dCIgCitnZGJfdGVzdCAiYnJlYWsgW2dkYl9nZXRfbGluZV9udW1iZXIgImFm dGVyIGxvbmdqbXAuIl0iICJCcmVha3BvaW50LiogYXQgLioiIFwKKyAgICAg ICAgICJzZXQgQlAgYWZ0ZXIgdGhlIGp1bXAiCitnZGJfdGVzdCAiY29udGlu dWUiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IG91dCBvZiBzY29wZS4qIiBc CisgICAgICAgICAiY2hlY2sgRmluaXNoQlAgb3V0IG9mIHNjb3BlIG5vdGlm aWNhdGlvbiIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoYnAuaXNf dmFsaWQoKSIgIkZhbHNlLioiXAorICAgICAgICAgImVuc3VyZSB0aGF0IGZp bmlzaCBicCBpcyBpbnZhbGlkIGFmZXIgb3V0IG9mIHNjb3BlIG5vdGlmaWNh dGlvbiIKKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgaW4gQlAgY29u ZGl0aW9uIGV2YWx1YXRpb24gCisjIChmaW5pc2ggaW4gZHVtbXkgZnJhbWUp CisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworZ2RiX3Rlc3Qg InNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9uIHNjcmlwdCBp bXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRz IgorCisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fu bm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorICAgICAgICAg CitnZGJfdGVzdCAiYnJlYWsgJHtjb25kX2xpbmV9IGlmIHRlc3RfMShpLDgp IiAiQnJlYWtwb2ludCAuKiBhdCAuKiIgXAorICAgICAgICAgInNldCBhIGNv bmRpdGlvbmFsIEJQIgorZ2RiX3Rlc3QgInB5dGhvbiBUZXN0QnJlYWtwb2lu dCgpIiAiVGVzdEJyZWFrcG9pbnQgaW5pdCIgXAorICAgICAgICAgInNldCBG aW5pc2hCUCBpbiBhIGJyZWFrcG9pbnQgY29uZGl0aW9uIgorZ2RiX3Rlc3Qg ImNvbnRpbnVlIiBcCisgICAgICAgICAiXCJGaW5pc2hCcmVha3BvaW50XCIg Y2Fubm90IGJlIHNldCBvbiBhIGR1bW15IGZyYW1lLioiIFwKKyAgICAgICAg ICJkb24ndCBhbGxvdyBGaW5pc2hCcmVha3BvaW50IG9uIGR1bW15IGZyYW1l cyIKK2dkYl90ZXN0ICJwcmludCBpIiAiOCIgImNoZWNrIHN0b3BwZWQgbG9j YXRpb24iCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGluIEJQIGNv bmRpdGlvbiBldmFsdWF0aW9uIAorIyAoZmluaXNoIGluIG5vcm1hbCBmcmFt ZSkKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVz dCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0 IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlw dHMiCisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fu bm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorCitnZGJfdGVz dCAiYnJlYWsgJHtjb25kX2xpbmV9IGlmIHRlc3QoaSw4KSIgXAorICAgICAg ICAgIkJyZWFrcG9pbnQgLiogYXQgLioiICJzZXQgY29uZGl0aW9uYWwgQlAi CitnZGJfdGVzdCAicHl0aG9uIFRlc3RCcmVha3BvaW50KCkiICJUZXN0QnJl YWtwb2ludCBpbml0IiAic2V0IEJQIGluIGNvbmRpdGlvbiIKKworZ2RiX3Rl c3QgImNvbnRpbnVlIiBcCisgICAgICAgICAidGVzdCBkb24ndCBzdG9wOiAx Lip0ZXN0IGRvbid0IHN0b3A6IDIuKnRlc3Qgc3RvcC4qRXJyb3IgaW4gdGVz dGluZyBicmVha3BvaW50IGNvbmRpdGlvbi4qVGhlIHByb2dyYW0gYmVpbmcg ZGVidWdnZWQgc3RvcHBlZCB3aGlsZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBm cm9tIEdEQi4qIiBcCisgICAgICAgICAic3RvcCBpbiBjb25kaXRpb24gZnVu Y3Rpb24iCisKK2dkYl90ZXN0ICJjb250aW51ZSIgIkNvbnRpbnVpbmcuKiIg ImZpbmlzaCBjb25kaXRpb24gZXZhbHVhdGlvbiIKK2dkYl90ZXN0ICJjb250 aW51ZSIgIkJyZWFrcG9pbnQuKiIgInN0b3AgYXQgY29uZGl0aW9uYWwgYnJl YWtwb2ludCIKK2dkYl90ZXN0ICJwcmludCBpIiAiOCIgImNoZWNrIHN0b3Bw ZWQgbG9jYXRpb24iCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGlu IGV4cGxpY2l0IGluZmVyaW9yIGZ1bmN0aW9uIGNhbGwKKyMKKworY2xlYW5f cmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAic291cmNlICRyZW1v dGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwK KyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCisKK2lmICFbcnVu dG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byBtYWlu LiIKKyAgICByZXR1cm4gMAorfQorCisjIHJldHVybiBhZGRyZXNzIGluIGR1 bW15IGZyYW1lCisKK2dkYl90ZXN0ICJweXRob24gVGVzdEV4cGxpY2l0QnJl YWtwb2ludCgnaW5jcmVhc2VfMScpIiAiQnJlYWtwb2ludC4qYXQuKiIgXAor ICAgICAgICAgInByZXBhcmUgVGVzdEV4cGxpY2l0QnJlYWtwb2ludCIKK2dk Yl90ZXN0ICJwcmludCBpbmNyZWFzZV8xKCZpKSIgXAorICAgICAgICAgIlwi RmluaXNoQnJlYWtwb2ludFwiIGNhbm5vdCBiZSBzZXQgb24gYSBkdW1teSBm cmFtZS4qIiBcCisgICAgICAgICAiZG9uJ3QgYWxsb3cgRmluaXNoQnJlYWtw b2ludCBvbiBkdW1teSBmcmFtZXMiCisKKyMgcmV0dXJuIGFkZHJlc3MgaW4g bm9ybWFsIGZyYW1lCisKK2RlbGV0ZV9icmVha3BvaW50cworZ2RiX3Rlc3Qg InB5dGhvbiBUZXN0RXhwbGljaXRCcmVha3BvaW50KFwiaW5jcmVhc2VfMVwi KSIgIkJyZWFrcG9pbnQuKmF0LioiIFwKKyAgICAgICAgICJwcmVwYXJlIFRl c3RFeHBsaWNpdEJyZWFrcG9pbnQiCitnZGJfdGVzdCAicHJpbnQgaW5jcmVh c2UoJmkpIiBcCisgICAgICAgICAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBp bml0LipTaW1wbGVGaW5pc2hCcmVha3BvaW50IHN0b3AuKlRoZSBwcm9ncmFt IGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUgaW4gYSBmdW5jdGlvbiBj YWxsZWQgZnJvbSBHREIuKiIgXAorICAgICAgICAgIkZpbmlzaEJQIHN0b3Ag YXQgZHVyaW5nIGV4cGxpY2l0IGZ1bmN0aW9uIGNhbGwiCisKKworIworIyBU ZXN0IEZpbmlzaEJyZWFrcG9pbnQgd2hlbiBpbmZlcmlvciBleGl0cworIwor CitpZiAhW3J1bnRvICJ0ZXN0X2V4ZWNfZXhpdCJdIHRoZW4geworICAgIGZh aWwgIkNhbm5vdCBydW4gdG8gdGVzdF9leGVjX2V4aXQuIgorICAgIHJldHVy biAwCit9CisKK2dkYl90ZXN0ICJweXRob24gU2ltcGxlRmluaXNoQnJlYWtw b2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiAiU2ltcGxlRmluaXNoQnJlYWtw b2ludCBpbml0IiAic2V0IEZpbmlzaEJQIGFmdGVyIHRoZSBleGl0KCkiCitn ZGJfdGVzdCAiY29udGludWUiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IG91 dCBvZiBzY29wZS4qIiAiY2F0Y2ggb3V0IG9mIHNjb3BlIGFmdGVyIGV4aXQi CisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IHdoZW4gaW5mZXJpb3Ig ZXhlY3MKKyMKKworaWYgIVtydW50byAidGVzdF9leGVjX2V4aXQiXSB0aGVu IHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIHRlc3RfZXhlY19leGl0LiIK KyAgICByZXR1cm4gMAorfSAgICAgCisKK2dkYl90ZXN0X25vX291dHB1dCAi c2V0IHZhciBkb19leGl0ID0gMCIgInN3aXRjaCB0byBleGVjdmUoKSB0ZXN0 IgorZ2RiX3Rlc3QgInB5dGhvbiBTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdk Yi5uZXdlc3RfZnJhbWUoKSkiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGlu aXQiICJzZXQgRmluaXNoQlAgYWZ0ZXIgdGhlIGV4ZWMiCitnZGJfdGVzdCAi Y2F0Y2ggZXhlYyIgIkNhdGNocG9pbnQuKlwoZXhlY1wpLioiICJjYXRjaCBl eGVjIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiU2ltcGxlRmluaXNoQnJlYWtw b2ludCBvdXQgb2Ygc2NvcGUuKiIgImNhdGNoIG91dCBvZiBzY29wZSBhZnRl ciBleGVjIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp dCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtw b2ludC5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gt YnJlYWtwb2ludC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5kZWEyYTczCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5CkBAIC0wLDAg KzEsODkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMg cHl0aG9uIEZpbmlzaAorIyBCcmVha3BvaW50cy4KKwkJCitjbGFzcyBNeUZp bmlzaEJyZWFrcG9pbnQgKGdkYi5GaW5pc2hCcmVha3BvaW50KToKKwlkZWYg X19pbml0X18oc2VsZiwgdmFsLCBmcmFtZSk6CisJCWdkYi5GaW5pc2hCcmVh a3BvaW50Ll9faW5pdF9fIChzZWxmLCBmcmFtZSkKKwkJcHJpbnQgIk15Rmlu aXNoQnJlYWtwb2ludCBpbml0IgorCQlzZWxmLnZhbCA9IHZhbAorCQkKKwlk ZWYgc3RvcChzZWxmKToKKwkJcHJpbnQgIk15RmluaXNoQnJlYWtwb2ludCBz dG9wIHdpdGggJWQiICUgaW50IChzZWxmLnZhbC5kZXJlZmVyZW5jZSAoKSkK KwkJcHJpbnQgInJldHVybl92YWx1ZSBpczogJWQiICUgaW50IChzZWxmLnJl dHVybl92YWx1ZSkKKwkJZ2RiLmV4ZWN1dGUgKCJ3aGVyZSAxIikKKwkJcmV0 dXJuIFRydWUKKwkKKwlkZWYgb3V0X29mX3Njb3BlKHNlbGYpOgorCQlwcmlu dCAiTXlGaW5pc2hCcmVha3BvaW50IG91dCBvZiBzY29wZSIKKworY2xhc3Mg VGVzdEJyZWFrcG9pbnQoZ2RiLkJyZWFrcG9pbnQpOgorICAgIGRlZiBfX2lu aXRfXyhzZWxmKToKKyAgICAgICAgZ2RiLkJyZWFrcG9pbnQuX19pbml0X18g KHNlbGYsIHNwZWM9InRlc3RfMSIsIGludGVybmFsPTEpCisgICAgICAgIHNl bGYuc2lsZW50ID0gVHJ1ZQorICAgICAgICBzZWxmLmNvdW50ID0gMAorICAg ICAgICBwcmludCAiVGVzdEJyZWFrcG9pbnQgaW5pdCIKKyAgICAgICAgCisg ICAgZGVmIHN0b3Aoc2VsZik6CisgICAgCXNlbGYuY291bnQgKz0gMQorICAg IAl0cnk6CisgICAgICAgIAlUZXN0RmluaXNoQnJlYWtwb2ludCAoZ2RiLm5l d2VzdF9mcmFtZSAoKSwgc2VsZi5jb3VudCkKKyAgICAgICAgZXhjZXB0IFZh bHVlRXJyb3IgYXMgZToKKyAgICAgICAgCXByaW50IGUKKyAgICAgICAgcmV0 dXJuIEZhbHNlCisKK2NsYXNzIFRlc3RGaW5pc2hCcmVha3BvaW50IChnZGIu RmluaXNoQnJlYWtwb2ludCk6CisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBm cmFtZSwgY291bnQpOgorICAgIAlzZWxmLmNvdW50ID0gY291bnQKKyAgICAg ICAgZ2RiLkZpbmlzaEJyZWFrcG9pbnQuX19pbml0X18gKHNlbGYsIGZyYW1l LCBpbnRlcm5hbD0xKQorICAgICAgICAKKyAgICAgICAgCisgICAgZGVmIHN0 b3Aoc2VsZik6CisgICAgICAgIHByaW50ICItLT4iLCBzZWxmLm51bWJlcgor ICAgICAgICBpZiAoc2VsZi5jb3VudCA9PSAzKToKKyAgICAgICAgICAgIHBy aW50ICJ0ZXN0IHN0b3A6ICVkIiAlIHNlbGYuY291bnQKKyAgICAgICAgICAg IHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmlu dCAidGVzdCBkb24ndCBzdG9wOiAlZCIgJSBzZWxmLmNvdW50CisgICAgICAg ICAgICByZXR1cm4gRmFsc2UgCisgICAgICAgIAorICAgIAorICAgIGRlZiBv dXRfb2Zfc2NvcGUoc2VsZik6CisgICAgICAgIHByaW50ICJ0ZXN0IGRpZG4n dCBmaW5pc2g6ICVkIiAlIHNlbGYuY291bnQKKworY2xhc3MgVGVzdEV4cGxp Y2l0QnJlYWtwb2ludChnZGIuQnJlYWtwb2ludCk6CisJZGVmIHN0b3Aoc2Vs Zik6CisJCXRyeToKKwkJCVNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgKGdkYi5u ZXdlc3RfZnJhbWUgKCkpCisJCWV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisJ CQlwcmludCBlCisJCXJldHVybiBGYWxzZQorCitjbGFzcyBTaW1wbGVGaW5p c2hCcmVha3BvaW50KGdkYi5GaW5pc2hCcmVha3BvaW50KToKKwlkZWYgX19p bml0X18oc2VsZiwgZnJhbWUpOgorCQlnZGIuRmluaXNoQnJlYWtwb2ludC5f X2luaXRfXyAoc2VsZiwgZnJhbWUpCisJCQorCQlwcmludCAiU2ltcGxlRmlu aXNoQnJlYWtwb2ludCBpbml0IgorCQkKKwlkZWYgc3RvcChzZWxmKToKKwkJ cHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgc3RvcCIgCisJCXJldHVy biBUcnVlCisJCisJZGVmIG91dF9vZl9zY29wZShzZWxmKToKKwkJcHJpbnQg IlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNjb3BlIgorCitwcmlu dCAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZGQiCmRpZmYgLS1naXQgYS9nZGIv dGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmNj IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3Bv aW50Mi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5h MGVlYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5jYwpAQCAtMCwwICsxLDU5 IEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05V IGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KyovCisKKworI2luY2x1ZGUgPGlvc3RyZWFtPgorCit2b2lkCit0aHJvd19l eGNlcHRpb25fMSAoaW50IGUpCit7CisgIHRocm93IG5ldyBpbnQgKGUpOwor fQorCit2b2lkCit0aHJvd19leGNlcHRpb24gKGludCBlKQoreworICB0aHJv d19leGNlcHRpb25fMSAoZSk7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sK KyAgaW50IGk7CisgIHRyeQorICAgIHsKKyAgICAgIHRocm93X2V4Y2VwdGlv bl8xICgxMCk7CisgICAgfQorICBjYXRjaCAoY29uc3QgaW50ICplKQorICAg IHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJFeGNlcHRpb24gIyIgPDwgKmUg PDwgc3RkOjplbmRsOworICAgIH0KKyAgaSArPSAxOyAvKiBCcmVhayBhZnRl ciBleGNlcHRpb24gMS4gICovCisKKyAgdHJ5CisgICAgeworICAgICAgdGhy b3dfZXhjZXB0aW9uICgxMCk7CisgICAgfQorICBjYXRjaCAoY29uc3QgaW50 ICplKQorICAgIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJFeGNlcHRpb24g IyIgPDwgKmUgPDwgc3RkOjplbmRsOworICAgIH0KKyAgaSArPSAxOyAvKiBC cmVhayBhZnRlciBleGNlcHRpb24gMi4gICovCisKKyAgcmV0dXJuIGk7Cit9 CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmlu aXNoLWJyZWFrcG9pbnQyLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1maW5pc2gtYnJlYWtwb2ludDIuZXhwCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmZhZTc5OGMKLS0tIC9kZXYvbnVsbAorKysg Yi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9p bnQyLmV4cApAQCAtMCwwICsxLDY1IEBACisjIENvcHlyaWdodCAoQykgMjAx MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisj IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMK KyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0 c3VpdGUuICBJdCB0ZXN0cyB0aGUgbWVjaGFuaXNtCisjIGV4cG9zaW5nIHZh bHVlcyB0byBQeXRob24uCisKK2lmICR0cmFjZWxldmVsIHRoZW4geworICAg IHN0cmFjZSAkdHJhY2VsZXZlbAorfQorCitsb2FkX2xpYiBnZGItcHl0aG9u LmV4cAorCitzZXQgdGVzdGZpbGUgInB5LWZpbmlzaC1icmVha3BvaW50MiIK K3NldCBzcmNmaWxlICR7dGVzdGZpbGV9LmNjCitzZXQgYmluZmlsZSAke29i amRpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9CitzZXQgcHlmaWxlICAke3Ny Y2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5CisKKyMgU3RhcnQgd2l0 aCBhIGZyZXNoIGdkYi4KK2dkYl9leGl0CitnZGJfc3RhcnQKK2dkYl9yZWlu aXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQgJHtiaW5m aWxlfQorCitpZiB7IFtnZGJfY29tcGlsZSAiJHtzcmNkaXJ9LyR7c3ViZGly fS8ke3NyY2ZpbGV9IiAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSB7ZGVidWcg YysrfV0gIT0gIiIgfSB7CisgICAgdW50ZXN0ZWQgIkNvdWxkbid0IGNvbXBp bGUgJHtzcmNmaWxlfSIKKyAgICByZXR1cm4gLTEKK30KKworaWYgIVtydW50 b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIG1haW4u IgorICAgIHJldHVybiAwCit9CisKKyMKKyMgQ2hlY2sgRmluaXNoQnJlYWtw b2ludHMgYWdhaW5zdCBDKysgZXhjZXB0aW9ucworIworCitnZGJfYnJlYWtw b2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiQnJlYWsgYWZ0ZXIgZXhjZXB0 aW9uIDIiXQorCitnZGJfdGVzdCAic291cmNlICRweWZpbGUiICIuKlB5dGhv biBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBweXRo b24gc2NyaXB0cyIKKyAgICAgICAgIAorZ2RiX2JyZWFrcG9pbnQgInRocm93 X2V4Y2VwdGlvbl8xIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiQnJlYWtwb2lu dCAuKnRocm93X2V4Y2VwdGlvbl8xLioiICJydW4gdG8gZXhjZXB0aW9uIDEi CisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGdkYi5icmVha3BvaW50 cygpKSIgIjMiICJjaGVjayBCUCBjb3VudCIKK2dkYl90ZXN0ICJweXRob24g RXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkp IiAiaW5pdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50IiAic2V0IEZpbmlz aEJQIGFmdGVyIHRoZSBleGNlcHRpb24iCitnZGJfdGVzdCAiY29udGludWUi ICIuKnN0b3BwZWQgYXQgRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludC4qIiAi Y2hlY2sgRmluaXNoQnJlYWtwb2ludCBpbiBjYXRjaCgpIgorZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBsZW4oZ2RiLmJyZWFrcG9pbnRzKCkpIiAiMyIgImNo ZWNrIGZpbmlzaCBCUCByZW1vdmFsIgorCitnZGJfdGVzdCAiY29udGludWUi ICIuKkJyZWFrcG9pbnQuKiB0aHJvd19leGNlcHRpb25fMS4qIiAiY29udGlu dWUgdG8gc2Vjb25kIGV4Y2VwdGlvbiIKK2dkYl90ZXN0ICJweXRob24gRXhj ZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiAi aW5pdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50IiAic2V0IEZpbmlzaEJQ IGFmdGVyIHRoZSBleGNlcHRpb24iCitnZGJfdGVzdCAiY29udGludWUiICIu KmV4Y2VwdGlvbiBkaWQgbm90IGZpbmlzaC4qIiAiRmluaXNoQnJlYWtwb2lu dCB3aXRoIGV4Y2VwdGlvbiB0aHJvd24gbm90IGNhdWdodCIKZGlmZiAtLWdp dCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtw b2ludDIucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNo LWJyZWFrcG9pbnQyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjBmYjY5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLnB5CkBAIC0w LDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVz dHMgcHl0aG9uIEZpbmlzaAorIyBCcmVha3BvaW50cy4KKworY2xhc3MgRXhj ZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIuRmluaXNoQnJlYWtwb2ludCk6 CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgZ2Ri LkZpbmlzaEJyZWFrcG9pbnQuX19pbml0X18gKHNlbGYsIGZyYW1lLCBpbnRl cm5hbD0xKQorICAgICAgICBzZWxmLnNpbGVudCA9IFRydWU7CisgICAgICAg IHByaW50ICJpbml0IEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQiCisgICAg ICAgIAorICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBwcmludCAic3Rv cHBlZCBhdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50IgorICAgICAgICBy ZXR1cm4gVHJ1ZSAKKyAgICAKKyAgICBkZWYgb3V0X29mX3Njb3BlKHNlbGYp OgorICAgICAgICBwcmludCAiZXhjZXB0aW9uIGRpZCBub3QgZmluaXNoIC4u LiIKKworCitwcmludCAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZCIKLS0gCjEu Ny42LjQKCg== --20cf307f312eef705904b37db6d4--