From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24524 invoked by alias); 9 Dec 2011 09:32:38 -0000 Received: (qmail 24503 invoked by uid 22791); 9 Dec 2011 09:32:29 -0000 X-SWARE-Spam-Status: No, hits=0.2 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,TW_BJ,TW_BP,TW_EG,TW_GJ,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; Fri, 09 Dec 2011 09:32:08 +0000 Received: by vbbfn1 with SMTP id fn1so2501016vbb.0 for ; Fri, 09 Dec 2011 01:32:07 -0800 (PST) Received: by 10.52.20.147 with SMTP id n19mr3834323vde.77.1323423127450; Fri, 09 Dec 2011 01:32:07 -0800 (PST) MIME-Version: 1.0 Received: by 10.220.4.210 with HTTP; Fri, 9 Dec 2011 01:31:45 -0800 (PST) In-Reply-To: References: From: Kevin Pouget Date: Fri, 09 Dec 2011 09:53:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf307c9fec6634f204b3a57592 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/msg00282.txt.bz2 --20cf307c9fec6634f204b3a57592 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 6917 On Thu, Dec 8, 2011 at 5:09 PM, Kevin Pouget wrote: > On Thu, Dec 8, 2011 at 4:33 PM, Kevin Pouget wro= te: >> On Thu, Dec 8, 2011 at 3:56 PM, Tom Tromey wrote: >>>>>>>> "Kevin" =3D=3D Kevin Pouget writes: >>> >>> Kevin> and we're .... not ready! >>> Kevin> there are some regressions this morning, certainly due to your >>> Kevin> ambiguous linespec patch! >>> >>> Kevin> first one is quite obvious: >>> >>> Kevin> a/gdb/testsuite/gdb.python/py-finish-breakpoint.exp >>> Kevin> -if ![runto "getpid"] then { >>> Kevin> - =A0 =A0fail "Cannot run to getpid." >>> Kevin> +if ![runto_main] then { >>> Kevin> + =A0 =A0fail "Cannot run to main." =A0 =A0 return 0 } >>> Kevin> +gdb_breakpoint "getpid" {temporary} >>> Kevin> +gdb_test "continue" "Temporary breakpoint .*in getpid.*" "conti= nue to getpid" >>> Kevin> + >>> >>> Kevin> "break getpid" used to work before actually starting the inferio= r, but >>> Kevin> now it's unresolved >>> >>> This test assumes that there is no debuginfo for getpid -- but in my >>> case, I have glibc debuginfo installed. =A0This isn't unheard of for gdb >>> developers :) >>> >>> The test would be more robust if you put a new function in a new file >>> and arranged for that file to be compiled without debuginfo. >>> >>> Sorry I didn't notice this before. >> >> I'll work on that, thanks for noticing it >> >>> Kevin> bpfinishpy_out_of_scope can't be triggered anymore because you s= et >>> Kevin> b-> pspace to NULL. I hesitated about how to fix it, but I think= that >>> Kevin> FinishBP have to be bound to the pspace in which they were set, = so I >>> Kevin> added this line: >>> >>> It seems to me that one of these breakpoints has to be thread-specific >>> as well. =A0Maybe the code to set b->pspace should notice thread-specif= ic >>> breakpoints and allow pspace to be set there. >>> >>> I'd rather this be done in breakpoint.c than have other modules modify >>> struct breakpoint directly. >>> >>> Tom >> >> you're right about thread-specific, but I'm not sure how to enforce >> it. Currently, FinishBreakpoint only accepts a frame as parameter, and >> a frame is only bound to a pspace, not a thread ... >> >> My code >>> self_bpfinish->py_bp.bp->pspace =3D current_program_space; >> was wrong, it should rather be >>> pspace =3D get_frame_program_space (prev_frame); >> and this also implies that we can't really defer this setting to >> another place ... >> >> Maybe we can state in the documentation that FinishBreakpoint will be >> created by default in the selected thread, and add another parameter >> in the constructor to specify another thread? > > so it was not possible to allow the user to specify the thread as I > suggest, for the reason I mentioned two lines above ... :( > I added this line to the doc to express it: > >> Finish breakpoints are thread specific and must be create with the right >> thread selected. > > > cordially, > > Kevin > > (I'll send getpid fix tomorrow) here is a fix for the getpid problem you noticed yesterday, I now compile the existing py-events-shlib.c into py-events-shlib-nodebug.so, ensure that it has no debug info, and continue as before. I also changed -set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}.py] +set python_file ${srcdir}/${subdir}/${testfile}.py as I think it was not really necessary I also added * Makefile.in (EXECUTABLES): Add py-finish-breakpoint and py-finish-breakpoint2 (MISCELLANEOUS): Add py-events-shlib.so and py-events-shlib-nodebug.so to allow cleaning up the testsuite files (cf. below) Finally, I switched +# Start with a fresh gdb. +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} and +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] !=3D "" } { + untested "Couldn't compile ${srcfile}" + return -1 +} in testsuite/gdb.python/py-finish-breakpoint2.exp, because it leaded to an intermittent ERROR (1st run would fail, next ones would be successful) -- my testsuite test harness doesn't consider this situation ... Cordially, Kevin as far as I could test, there is no regression against the current git tree (x86_64/Fedora) -- 2011-12-09 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. --20cf307c9fec6634f204b3a57592 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_gvyzx2au1 Content-length: 80309 RnJvbSBiZGY3MTU3MGU4NzQ0YjliZWEyMWM4YzZjZGQ4YWIwMDVkMThkNjRm IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSAgSW50cm9kdWNlIGdk Yi5GaW5pc2hCcmVha3BvaW50CgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnZGIv TkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDQgKwogZ2RiL2JyZWFrcG9pbnQuYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBnZGIvYnJlYWtwb2ludC5o ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0K IGdkYi9kb2MvZ2RiLnRleGluZm8gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICA1MyArKysKIGdkYi9pbmZjbWQuYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOSArKy0KIGdkYi9pbmZl cmlvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgMyArCiBnZGIvcHl0aG9uL3B5LWJyZWFrcG9pbnQuYyAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgNDggKy0tCiBnZGIvcHl0aG9uL3B5LWZpbmlz aGJyZWFrcG9pbnQuYyAgICAgICAgICAgICAgICAgICB8ICA0NjIgKysrKysr KysrKysrKysrKysrKysKIGdkYi9weXRob24vcHktZnJhbWUuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAzMiArLQogZ2RiL3B5dGhvbi9w eXRob24taW50ZXJuYWwuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUw ICsrLQogZ2RiL3B5dGhvbi9weXRob24uYyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAxICsKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgIHwgICAgNSArLQogZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwICAgICAgICAg fCAgICA3ICstCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNo LWJyZWFrcG9pbnQuYyAgICB8ICAxMDAgKysrKysKIGdkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5leHAgIHwgIDI1NCAr KysrKysrKysrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50LnB5ICAgfCAgIDg5ICsrKysKIGdkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuY2MgIHwgICA1OSAr KysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtw b2ludDIuZXhwIHwgICA2NSArKysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1maW5pc2gtYnJlYWtwb2ludDIucHkgIHwgICAzMyArKwogMjAgZmls ZXMgY2hhbmdlZCwgMTI0NiBpbnNlcnRpb25zKCspLCA2OSBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvcHl0aG9uL3B5LWZpbmlzaGJy ZWFrcG9pbnQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1i cmVha3BvaW50LmV4cAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5weQogY3JlYXRl IG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5p c2gtYnJlYWtwb2ludDIuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLmV4cAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludDIucHkKCmRpZmYgLS1naXQgYS9nZGIvTWFr ZWZpbGUuaW4gYi9nZGIvTWFrZWZpbGUuaW4KaW5kZXggYjcxZGIzMy4uZDhk MWI0MCAxMDA2NDQKLS0tIGEvZ2RiL01ha2VmaWxlLmluCisrKyBiL2dkYi9N YWtlZmlsZS5pbgpAQCAtMjg3LDYgKzI4Nyw3IEBAIFNVQkRJUl9QWVRIT05f T0JTID0gXAogCXB5LWV2dHJlZ2lzdHJ5Lm8gXAogCXB5LWV2dHMubyBcCiAJ cHktZXhpdGVkZXZlbnQubyBcCisJcHktZmluaXNoYnJlYWtwb2ludC5vIFwK IAlweS1mcmFtZS5vIFwKIAlweS1mdW5jdGlvbi5vIFwKIAlweS1pbmZlcmlv ci5vIFwKQEAgLTMxOCw2ICszMTksNyBAQCBTVUJESVJfUFlUSE9OX1NSQ1Mg PSBcCiAJcHl0aG9uL3B5LWV2dHJlZ2lzdHJ5LmMgXAogCXB5dGhvbi9weS1l dnRzLmMgXAogCXB5dGhvbi9weS1leGl0ZWRldmVudC5jIFwKKwlweXRob24v cHktZmluaXNoYnJlYWtwb2ludC5jIFwKIAlweXRob24vcHktZnJhbWUuYyBc CiAJcHl0aG9uL3B5LWZ1bmN0aW9uLmMgXAogCXB5dGhvbi9weS1pbmZlcmlv ci5jIFwKQEAgLTIxMDksNiArMjExMSwxMCBAQCBweS1leGl0ZWRldmVudC5v OiAkKHNyY2RpcikvcHl0aG9uL3B5LWV4aXRlZGV2ZW50LmMKIAkkKENPTVBJ TEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS1leGl0 ZWRldmVudC5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktZmluaXNoYnJlYWtw b2ludC5vOiAkKHNyY2RpcikvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQu YworCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNyY2RpcikvcHl0 aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYworCSQoUE9TVENPTVBJTEUpCisK IHB5LWZyYW1lLm86ICQoc3JjZGlyKS9weXRob24vcHktZnJhbWUuYwogCSQo Q09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNyY2RpcikvcHl0aG9uL3B5 LWZyYW1lLmMKIAkkKFBPU1RDT01QSUxFKQpkaWZmIC0tZ2l0IGEvZ2RiL05F V1MgYi9nZGIvTkVXUwppbmRleCA0Mjc4MmNlLi5iNzU1NjA1IDEwMDY0NAot LS0gYS9nZGIvTkVXUworKysgYi9nZGIvTkVXUwpAQCAtNTcsNiArNTcsMTAg QEAKICAgKiogVGhlICJnZGIuYnJlYWtwb2ludCIgZnVuY3Rpb24gaGFzIGJl ZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZgogICAgICAiZ2RiLmJyZWFrcG9p bnRzIi4KIAorICAqKiBBIG5ldyBjbGFzcyAiZ2RiLkZpbmlzaEJyZWFrcG9p bnQiIGlzIHByb3ZpZGVkIHRvIGNhdGNoIHRoZSByZXR1cm4KKyAgICAgb2Yg YSBmdW5jdGlvbi4gIFRoaXMgY2xhc3MgaXMgYmFzZWQgb24gdGhlICJmaW5p c2giIGNvbW1hbmQKKyAgICAgYXZhaWxhYmxlIGluIHRoZSBDTEkuIAorCiAg ICoqIFR5cGUgb2JqZWN0cyBmb3Igc3RydWN0IGFuZCB1bmlvbiB0eXBlcyBu b3cgYWxsb3cgYWNjZXNzIHRvCiAgICAgIHRoZSBmaWVsZHMgdXNpbmcgc3Rh bmRhcmQgUHl0aG9uIGRpY3Rpb25hcnkgKG1hcHBpbmcpIG1ldGhvZHMuCiAg ICAgIEZvciBleGFtcGxlLCAic29tZV90eXBlWydteWZpZWxkJ10iIG5vdyB3 b3JrcywgYXMgZG9lcwpkaWZmIC0tZ2l0IGEvZ2RiL2JyZWFrcG9pbnQuYyBi L2dkYi9icmVha3BvaW50LmMKaW5kZXggZDlkNWJiZS4uYmZkMGNhNyAxMDA2 NDQKLS0tIGEvZ2RiL2JyZWFrcG9pbnQuYworKysgYi9nZGIvYnJlYWtwb2lu dC5jCkBAIC03OTMzLDcgKzc5MzMsOCBAQCBjcmVhdGVfYnJlYWtwb2ludCAo c3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCiAgICAgICBiLT5kaXNwb3NpdGlv biA9IHRlbXBmbGFnID8gZGlzcF9kZWwgOiBkaXNwX2RvbnR0b3VjaDsKICAg ICAgIGItPmNvbmRpdGlvbl9ub3RfcGFyc2VkID0gMTsKICAgICAgIGItPmVu YWJsZV9zdGF0ZSA9IGVuYWJsZWQgPyBicF9lbmFibGVkIDogYnBfZGlzYWJs ZWQ7Ci0gICAgICBpZiAodHlwZV93YW50ZWQgIT0gYnBfYnJlYWtwb2ludCAm JiB0eXBlX3dhbnRlZCAhPSBicF9oYXJkd2FyZV9icmVha3BvaW50KQorICAg ICAgaWYgKCh0eXBlX3dhbnRlZCAhPSBicF9icmVha3BvaW50CisgICAgICAg ICAgICYmIHR5cGVfd2FudGVkICE9IGJwX2hhcmR3YXJlX2JyZWFrcG9pbnQp IHx8IHRocmVhZCAhPSAtMSkKIAliLT5wc3BhY2UgPSBjdXJyZW50X3Byb2dy YW1fc3BhY2U7CiAKICAgICAgIGluc3RhbGxfYnJlYWtwb2ludCAoaW50ZXJu YWwsIGIsIDApOwpkaWZmIC0tZ2l0IGEvZ2RiL2JyZWFrcG9pbnQuaCBiL2dk Yi9icmVha3BvaW50LmgKaW5kZXggZGRmMTg4MS4uZDIyZTU2NCAxMDA2NDQK LS0tIGEvZ2RiL2JyZWFrcG9pbnQuaAorKysgYi9nZGIvYnJlYWtwb2ludC5o CkBAIC01NjksNyArNTY5LDcgQEAgc3RydWN0IGJyZWFrcG9pbnQKIAogICAg IC8qIFRoZSBwcm9ncmFtIHNwYWNlIHVzZWQgdG8gc2V0IHRoZSBicmVha3Bv aW50LiAgVGhpcyBpcyBvbmx5IHNldAogICAgICAgIGZvciBicmVha3BvaW50 cyB3aGljaCBhcmUgc3BlY2lmaWMgdG8gYSBwcm9ncmFtIHNwYWNlOyBmb3IK LSAgICAgICBvcmRpbmFyeSBicmVha3BvaW50cyB0aGlzIGlzIE5VTEwuICAq LworICAgICAgIG5vbi10aHJlYWQtc3BlY2lmaWMgb3JkaW5hcnkgYnJlYWtw b2ludHMgdGhpcyBpcyBOVUxMLiAgKi8KICAgICBzdHJ1Y3QgcHJvZ3JhbV9z cGFjZSAqcHNwYWNlOwogCiAgICAgLyogU3RyaW5nIHdlIHVzZWQgdG8gc2V0 IHRoZSBicmVha3BvaW50IChtYWxsb2MnZCkuICAqLwpkaWZmIC0tZ2l0IGEv Z2RiL2RvYy9nZGIudGV4aW5mbyBiL2dkYi9kb2MvZ2RiLnRleGluZm8KaW5k ZXggNTBjMjk5ZS4uOTUwMjU3ZiAxMDA2NDQKLS0tIGEvZ2RiL2RvYy9nZGIu dGV4aW5mbworKysgYi9nZGIvZG9jL2dkYi50ZXhpbmZvCkBAIC0yMTUwMSw2 ICsyMTUwMSw4IEBAIHNpdHVhdGlvbiwgYSBQeXRob24gQGNvZGV7S2V5Ym9h cmRJbnRlcnJ1cHR9IGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAqIFN5bWJvbCBU YWJsZXMgSW4gUHl0aG9uOjogICAgIFB5dGhvbiByZXByZXNlbnRhdGlvbiBv ZiBzeW1ib2wgdGFibGVzLgogKiBMYXp5IFN0cmluZ3MgSW4gUHl0aG9uOjog ICAgICBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgbGF6eSBzdHJpbmdzLgog KiBCcmVha3BvaW50cyBJbiBQeXRob246OiAgICAgICBNYW5pcHVsYXRpbmcg YnJlYWtwb2ludHMgdXNpbmcgUHl0aG9uLgorKiBGaW5pc2ggQnJlYWtwb2lu dHMgaW4gUHl0aG9uOjogU2V0dGluZyBCcmVha3BvaW50cyBvbiBmdW5jdGlv biByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNp bmcgUHl0aG9uLgogQGVuZCBtZW51CiAKIEBub2RlIEJhc2ljIFB5dGhvbgpA QCAtMjQzMzUsNiArMjQzMzcsNTcgQEAgY29tbWFuZHMsIHNlcGFyYXRlZCBi eSBuZXdsaW5lcy4gIElmIHRoZXJlIGFyZSBubyBjb21tYW5kcywgdGhpcwog YXR0cmlidXRlIGlzIEBjb2Rle05vbmV9LiAgVGhpcyBhdHRyaWJ1dGUgaXMg bm90IHdyaXRhYmxlLgogQGVuZCBkZWZ2YXIKIAorQG5vZGUgRmluaXNoIEJy ZWFrcG9pbnRzIGluIFB5dGhvbgorQHN1YnN1YnNlY3Rpb24gRmluaXNoIEJy ZWFrcG9pbnRzCisKK0BjaW5kZXggcHl0aG9uIGZpbmlzaCBicmVha3BvaW50 cworQHRpbmRleCBnZGIuRmluaXNoQnJlYWtwb2ludAorCitBIGZpbmlzaCBi cmVha3BvaW50IGlzIGEgdGVtcG9yYXJ5IGJyZWFrcG9pbnQgc2V0IGF0IHRo ZSByZXR1cm4gYWRkcmVzcyBvZgorYSBmcmFtZSwgYmFzZWQgb24gdGhlIEBj b2Rle2ZpbmlzaH0gY29tbWFuZC4gIEBjb2Rle2dkYi5GaW5pc2hCcmVha3Bv aW50fQorZXh0ZW5kcyBAY29kZXtnZGIuQnJlYWtwb2ludH0uICBUaGUgdW5k ZXJseWluZyBicmVha3BvaW50IHdpbGwgYmUgZGlzYWJsZWQgCithbmQgZGVs ZXRlZCB3aGVuIHRoZSBleGVjdXRpb24gd2lsbCBydW4gb3V0IG9mIHRoZSBi cmVha3BvaW50IHNjb3BlIChpLmUuQDogCitAY29kZXtCcmVha3BvaW50LnN0 b3B9IG9yIEBjb2Rle0ZpbmlzaEJyZWFrcG9pbnQub3V0X29mX3Njb3BlfSB0 cmlnZ2VyZWQpLgorRmluaXNoIGJyZWFrcG9pbnRzIGFyZSB0aHJlYWQgc3Bl Y2lmaWMgYW5kIG11c3QgYmUgY3JlYXRlIHdpdGggdGhlIHJpZ2h0IAordGhy ZWFkIHNlbGVjdGVkLiAgCisgCitAZGVmdW4gRmluaXNoQnJlYWtwb2ludC5f X2luaXRfXyAoQHJ7W31mcmFtZUBye119IEBye1t9LCBpbnRlcm5hbEBye119 KQorQ3JlYXRlIGEgZmluaXNoIGJyZWFrcG9pbnQgYXQgdGhlIHJldHVybiBh ZGRyZXNzIG9mIHRoZSBAY29kZXtnZGIuRnJhbWV9CitvYmplY3QgQHZhcntm cmFtZX0uICBJZiBAdmFye2ZyYW1lfSBpcyBub3QgcHJvdmlkZWQsIHRoaXMg ZGVmYXVsdHMgdG8gdGhlCituZXdlc3QgZnJhbWUuICBUaGUgb3B0aW9uYWwg QHZhcntpbnRlcm5hbH0gYXJndW1lbnQgYWxsb3dzIHRoZSBicmVha3BvaW50 IHRvCitiZWNvbWUgaW52aXNpYmxlIHRvIHRoZSB1c2VyLiAgQHhyZWZ7QnJl YWtwb2ludHMgSW4gUHl0aG9ufSwgZm9yIGZ1cnRoZXIgCitkZXRhaWxzIGFi b3V0IHRoaXMgYXJndW1lbnQuCitAZW5kIGRlZnVuCisKK0BkZWZ1biBGaW5p c2hCcmVha3BvaW50Lm91dF9vZl9zY29wZSAoc2VsZikKK0luIHNvbWUgY2ly Y3Vtc3RhbmNlcyAoZS5nLkA6IEBjb2Rle2xvbmdqbXB9LCBDQHR7Kyt9IGV4 Y2VwdGlvbnMsIEB2YWx1ZXtHREJOfSAKK0Bjb2Rle3JldHVybn0gY29tbWFu ZCwgQGRvdHN7fSksIGEgZnVuY3Rpb24gbWF5IG5vdCBwcm9wZXJseSB0ZXJt aW5hdGUsIGFuZAordGh1cyBuZXZlciBoaXQgdGhlIGZpbmlzaCBicmVha3Bv aW50LiAgV2hlbiBAdmFsdWV7R0RCTn0gbm90aWNlcyBzdWNoIGEKK3NpdHVh dGlvbiwgdGhlIEBjb2Rle291dF9vZl9zY29wZX0gY2FsbGJhY2sgd2lsbCBi ZSB0cmlnZ2VyZWQuCisKK1lvdSBtYXkgd2FudCB0byBzdWItY2xhc3MgQGNv ZGV7Z2RiLkZpbmlzaEJyZWFrcG9pbnR9IGFuZCBvdmVycmlkZSB0aGlzCitt ZXRob2Q6CisKK0BzbWFsbGV4YW1wbGUKK2NsYXNzIE15RmluaXNoQnJlYWtw b2ludCAoZ2RiLkZpbmlzaEJyZWFrcG9pbnQpCisgICAgZGVmIHN0b3AgKHNl bGYpOgorICAgICAgICBwcmludCAibm9ybWFsIGZpbmlzaCIKKyAgICAgICAg cmV0dXJuIFRydWUKKyAgICAKKyAgICBkZWYgb3V0X29mX3Njb3BlICgpOgor ICAgICAgICBwcmludCAiYWJub3JtYWwgZmluaXNoIgorQGVuZCBzbWFsbGV4 YW1wbGUgCitAZW5kIGRlZnVuCisKK0BkZWZ2YXIgRmluaXNoQnJlYWtwb2lu dC5yZXR1cm5fdmFsdWUKK1doZW4gQHZhbHVle0dEQk59IGlzIHN0b3BwZWQg YXQgYSBmaW5pc2ggYnJlYWtwb2ludCBhbmQgdGhlIGZyYW1lIAordXNlZCB0 byBidWlsZCB0aGUgQGNvZGV7Z2RiLkZpbmlzaEJyZWFrcG9pbnR9IG9iamVj dCBoYWQgZGVidWcgc3ltYm9scywgdGhpcworYXR0cmlidXRlIHdpbGwgY29u dGFpbiBhIEBjb2Rle2dkYi5WYWx1ZX0gb2JqZWN0IGNvcnJlc3BvbmRpbmcg dG8gdGhlIHJldHVybgordmFsdWUgb2YgdGhlIGZ1bmN0aW9uLiAgVGhlIHZh bHVlIHdpbGwgYmUgQGNvZGV7Tm9uZX0gaWYgdGhlIGZ1bmN0aW9uIHJldHVy biAKK3R5cGUgaXMgQGNvZGV7dm9pZH0gb3IgaWYgdGhlIHJldHVybiB2YWx1 ZSB3YXMgbm90IGNvbXB1dGFibGUuICBUaGlzIGF0dHJpYnV0ZQoraXMgbm90 IHdyaXRhYmxlLgorQGVuZCBkZWZ2YXIKKwogQG5vZGUgTGF6eSBTdHJpbmdz IEluIFB5dGhvbgogQHN1YnN1YnNlY3Rpb24gUHl0aG9uIHJlcHJlc2VudGF0 aW9uIG9mIGxhenkgc3RyaW5ncy4KIApkaWZmIC0tZ2l0IGEvZ2RiL2luZmNt ZC5jIGIvZ2RiL2luZmNtZC5jCmluZGV4IDVkOTRjZDQuLmNmZmExOTQgMTAw NjQ0Ci0tLSBhL2dkYi9pbmZjbWQuYworKysgYi9nZGIvaW5mY21kLmMKQEAg LTE0MTQsMTYgKzE0MTQsMjYgQEAgYWR2YW5jZV9jb21tYW5kIChjaGFyICph cmcsIGludCBmcm9tX3R0eSkKICAgdW50aWxfYnJlYWtfY29tbWFuZCAoYXJn LCBmcm9tX3R0eSwgMSk7CiB9CiAMCi0vKiBQcmludCB0aGUgcmVzdWx0IG9m IGEgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiBhICdmaW5pc2gnIGNvbW1hbmQu ICAqLworLyogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcmVzdWx0IG9mIGEg ZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiBhICdmaW5pc2gnCisgICBjb21tYW5k L0JQLiAgKi8KIAotc3RhdGljIHZvaWQKLXByaW50X3JldHVybl92YWx1ZSAo c3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZhbHVlX3R5 cGUpCitzdHJ1Y3QgdmFsdWUgKgorZ2V0X3JldHVybl92YWx1ZSAoc3RydWN0 IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZhbHVlX3R5cGUpCiB7 Ci0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2NhY2hlX2Fy Y2ggKHN0b3BfcmVnaXN0ZXJzKTsKLSAgc3RydWN0IGNsZWFudXAgKm9sZF9j aGFpbjsKLSAgc3RydWN0IHVpX3N0cmVhbSAqc3RiOworICBzdHJ1Y3QgcmVn Y2FjaGUgKnN0b3BfcmVncyA9IHN0b3BfcmVnaXN0ZXJzOworICBzdHJ1Y3Qg Z2RiYXJjaCAqZ2RiYXJjaDsKICAgc3RydWN0IHZhbHVlICp2YWx1ZTsKICAg c3RydWN0IHVpX291dCAqdWlvdXQgPSBjdXJyZW50X3Vpb3V0OworICBzdHJ1 Y3QgY2xlYW51cCAqY2xlYW51cCA9IG1ha2VfY2xlYW51cCAobnVsbF9jbGVh bnVwLCBOVUxMKTsKKworICAvKiBJZiBzdG9wX3JlZ2lzdGVycyB3ZXJlIG5v dCBzYXZlZCwgdXNlIHRoZSBjdXJyZW50IHJlZ2lzdGVycy4gICovCisgIGlm ICghc3RvcF9yZWdzKQorICAgIHsKKyAgICAgIHN0b3BfcmVncyA9IHJlZ2Nh Y2hlX2R1cCAoZ2V0X2N1cnJlbnRfcmVnY2FjaGUgKCkpOworICAgICAgY2xl YW51cCA9IG1ha2VfY2xlYW51cF9yZWdjYWNoZV94ZnJlZSAoc3RvcF9yZWdz KTsKKyAgICB9CisKKyAgZ2RiYXJjaCA9IGdldF9yZWdjYWNoZV9hcmNoIChz dG9wX3JlZ3MpOwogCiAgIENIRUNLX1RZUEVERUYgKHZhbHVlX3R5cGUpOwog ICBnZGJfYXNzZXJ0IChUWVBFX0NPREUgKHZhbHVlX3R5cGUpICE9IFRZUEVf Q09ERV9WT0lEKTsKQEAgLTE0NDIsNyArMTQ1Miw3IEBAIHByaW50X3JldHVy bl92YWx1ZSAoc3RydWN0IHR5cGUgKmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUg KnZhbHVlX3R5cGUpCiAgICAgY2FzZSBSRVRVUk5fVkFMVUVfQUJJX1JFVFVS TlNfQUREUkVTUzoKICAgICBjYXNlIFJFVFVSTl9WQUxVRV9BQklfUFJFU0VS VkVTX0FERFJFU1M6CiAgICAgICB2YWx1ZSA9IGFsbG9jYXRlX3ZhbHVlICh2 YWx1ZV90eXBlKTsKLSAgICAgIGdkYmFyY2hfcmV0dXJuX3ZhbHVlIChnZGJh cmNoLCBmdW5jX3R5cGUsIHZhbHVlX3R5cGUsIHN0b3BfcmVnaXN0ZXJzLAor ICAgICAgZ2RiYXJjaF9yZXR1cm5fdmFsdWUgKGdkYmFyY2gsIGZ1bmNfdHlw ZSwgdmFsdWVfdHlwZSwgc3RvcF9yZWdzLAogCQkJICAgIHZhbHVlX2NvbnRl bnRzX3JhdyAodmFsdWUpLCBOVUxMKTsKICAgICAgIGJyZWFrOwogICAgIGNh c2UgUkVUVVJOX1ZBTFVFX1NUUlVDVF9DT05WRU5USU9OOgpAQCAtMTQ1Miw2 ICsxNDYyLDIxIEBAIHByaW50X3JldHVybl92YWx1ZSAoc3RydWN0IHR5cGUg KmZ1bmNfdHlwZSwgc3RydWN0IHR5cGUgKnZhbHVlX3R5cGUpCiAgICAgICBp bnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9fTElORV9fLCBfKCJiYWQgc3dp dGNoIikpOwogICAgIH0KIAorICBkb19jbGVhbnVwcyAoY2xlYW51cCk7CisK KyAgcmV0dXJuIHZhbHVlOworfQorCisvKiBQcmludCB0aGUgcmVzdWx0IG9m IGEgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiBhICdmaW5pc2gnIGNvbW1hbmQu ICAqLworCitzdGF0aWMgdm9pZAorcHJpbnRfcmV0dXJuX3ZhbHVlIChzdHJ1 Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkK K3sKKyAgc3RydWN0IHZhbHVlICp2YWx1ZSA9IGdldF9yZXR1cm5fdmFsdWUg KGZ1bmNfdHlwZSwgdmFsdWVfdHlwZSk7CisgIHN0cnVjdCBjbGVhbnVwICpv bGRfY2hhaW47CisgIHN0cnVjdCB1aV9zdHJlYW0gKnN0YjsKKyAgc3RydWN0 IHVpX291dCAqdWlvdXQgPSBjdXJyZW50X3Vpb3V0OworCiAgIGlmICh2YWx1 ZSkKICAgICB7CiAgICAgICBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9ucyBv cHRzOwpkaWZmIC0tZ2l0IGEvZ2RiL2luZmVyaW9yLmggYi9nZGIvaW5mZXJp b3IuaAppbmRleCBjZmFlYTdmLi5mMTk4Njk2IDEwMDY0NAotLS0gYS9nZGIv aW5mZXJpb3IuaAorKysgYi9nZGIvaW5mZXJpb3IuaApAQCAtMjY5LDYgKzI2 OSw5IEBAIGV4dGVybiB2b2lkIGRldGFjaF9jb21tYW5kIChjaGFyICosIGlu dCk7CiAKIGV4dGVybiB2b2lkIG5vdGljZV9uZXdfaW5mZXJpb3IgKHB0aWRf dCwgaW50LCBpbnQpOwogCitleHRlcm4gc3RydWN0IHZhbHVlICpnZXRfcmV0 dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHR5cGUgKnZh bHVlX3R5cGUpOworCiAvKiBBZGRyZXNzIGF0IHdoaWNoIGluZmVyaW9yIHN0 b3BwZWQuICAqLwogCiBleHRlcm4gQ09SRV9BRERSIHN0b3BfcGM7CmRpZmYg LS1naXQgYS9nZGIvcHl0aG9uL3B5LWJyZWFrcG9pbnQuYyBiL2dkYi9weXRo b24vcHktYnJlYWtwb2ludC5jCmluZGV4IDExZDYwZmUuLjY0ZWY0NWYgMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vcHktYnJlYWtwb2ludC5jCisrKyBiL2dk Yi9weXRob24vcHktYnJlYWtwb2ludC5jCkBAIC0zMSw1MiArMzEsMTYgQEAK ICNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCiAjaW5jbHVkZSAibGFuZ3VhZ2Uu aCIKIAotc3RhdGljIFB5VHlwZU9iamVjdCBicmVha3BvaW50X29iamVjdF90 eXBlOwotCiAvKiBOdW1iZXIgb2YgbGl2ZSBicmVha3BvaW50cy4gICovCiBz dGF0aWMgaW50IGJwcHlfbGl2ZTsKIAogLyogVmFyaWFibGVzIHVzZWQgdG8g cGFzcyBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBCcmVha3BvaW50CiAgICBj b25zdHJ1Y3RvciBhbmQgdGhlIGJyZWFrcG9pbnQtY3JlYXRlZCBob29rIGZ1 bmN0aW9uLiAgKi8KLXN0YXRpYyBicmVha3BvaW50X29iamVjdCAqYnBweV9w ZW5kaW5nX29iamVjdDsKK2JyZWFrcG9pbnRfb2JqZWN0ICpicHB5X3BlbmRp bmdfb2JqZWN0OwogCiAvKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVu IGEgUHl0aG9uIGNvbmRpdGlvbiBpcyBldmFsdWF0ZWQuICAqLwogc3RhdGlj IGNoYXIgKiBjb25zdCBzdG9wX2Z1bmMgPSAic3RvcCI7CiAKLXN0cnVjdCBi cmVha3BvaW50X29iamVjdAotewotICBQeU9iamVjdF9IRUFECi0KLSAgLyog VGhlIGJyZWFrcG9pbnQgbnVtYmVyIGFjY29yZGluZyB0byBnZGIuICAqLwot ICBpbnQgbnVtYmVyOwotCi0gIC8qIFRoZSBnZGIgYnJlYWtwb2ludCBvYmpl Y3QsIG9yIE5VTEwgaWYgdGhlIGJyZWFrcG9pbnQgaGFzIGJlZW4KLSAgICAg ZGVsZXRlZC4gICovCi0gIHN0cnVjdCBicmVha3BvaW50ICpicDsKLX07Ci0K LS8qIFJlcXVpcmUgdGhhdCBCUkVBS1BPSU5UIGJlIGEgdmFsaWQgYnJlYWtw b2ludCBJRDsgdGhyb3cgYSBQeXRob24KLSAgIGV4Y2VwdGlvbiBpZiBpdCBp cyBpbnZhbGlkLiAgKi8KLSNkZWZpbmUgQlBQWV9SRVFVSVJFX1ZBTElEKEJy ZWFrcG9pbnQpCQkJCQlcCi0gICAgZG8gewkJCQkJCQkJXAotICAgICAgaWYg KChCcmVha3BvaW50KS0+YnAgPT0gTlVMTCkJCQkJCVwKLQlyZXR1cm4gUHlF cnJfRm9ybWF0IChQeUV4Y19SdW50aW1lRXJyb3IsICAgICAgICAgICAgICAg ICAgICAgICAgXAotCQkJICAgICBfKCJCcmVha3BvaW50ICVkIGlzIGludmFs aWQuIiksCQlcCi0JCQkgICAgIChCcmVha3BvaW50KS0+bnVtYmVyKTsJCQlc Ci0gICAgfSB3aGlsZSAoMCkKLQotLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9J TlQgYmUgYSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgot ICAgZXhjZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICBUaGlzIG1hY3JvIGlz IGZvciB1c2UgaW4gc2V0dGVyIGZ1bmN0aW9ucy4gICovCi0jZGVmaW5lIEJQ UFlfU0VUX1JFUVVJUkVfVkFMSUQoQnJlYWtwb2ludCkJCQkJXAotICAgIGRv IHsJCQkJCQkJCVwKLSAgICAgIGlmICgoQnJlYWtwb2ludCktPmJwID09IE5V TEwpCQkJCQlcCi0gICAgICAgIHsJCQkJCQkJCVwKLQkgIFB5RXJyX0Zvcm1h dCAoUHlFeGNfUnVudGltZUVycm9yLCBfKCJCcmVha3BvaW50ICVkIGlzIGlu dmFsaWQuIiksIFwKLQkJCShCcmVha3BvaW50KS0+bnVtYmVyKTsJCQkJXAot CSAgcmV0dXJuIC0xOwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotICAgIH0gd2hp bGUgKDApCi0KIC8qIFRoaXMgaXMgdXNlZCB0byBpbml0aWFsaXplIHZhcmlv dXMgZ2RiLmJwXyogY29uc3RhbnRzLiAgKi8KIHN0cnVjdCBweWJwX2NvZGUK IHsKQEAgLTc2Miw2ICs3MjYsOSBAQCBnZGJweV9zaG91bGRfc3RvcCAoc3Ry dWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopCiAgIHN0cnVjdCBnZGJh cmNoICpnYXJjaCA9IGItPmdkYmFyY2ggPyBiLT5nZGJhcmNoIDogZ2V0X2N1 cnJlbnRfYXJjaCAoKTsKICAgc3RydWN0IGNsZWFudXAgKmNsZWFudXAgPSBl bnN1cmVfcHl0aG9uX2VudiAoZ2FyY2gsIGN1cnJlbnRfbGFuZ3VhZ2UpOwog CisgIGlmIChicF9vYmotPmlzX2ZpbmlzaF9icCkKKyAgICBicGZpbmlzaHB5 X3ByZV9zdG9wX2hvb2sgKGJwX29iaik7CisKICAgaWYgKFB5T2JqZWN0X0hh c0F0dHJTdHJpbmcgKHB5X2JwLCBzdG9wX2Z1bmMpKQogICAgIHsKICAgICAg IFB5T2JqZWN0ICpyZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kIChweV9i cCwgc3RvcF9mdW5jLCBOVUxMKTsKQEAgLTc4Myw2ICs3NTAsMTAgQEAgZ2Ri cHlfc2hvdWxkX3N0b3AgKHN0cnVjdCBicmVha3BvaW50X29iamVjdCAqYnBf b2JqKQogICAgICAgZWxzZQogCWdkYnB5X3ByaW50X3N0YWNrICgpOwogICAg IH0KKworICBpZiAoYnBfb2JqLT5pc19maW5pc2hfYnApCisgICAgYnBmaW5p c2hweV9wb3N0X3N0b3BfaG9vayAoYnBfb2JqKTsKKwogICBkb19jbGVhbnVw cyAoY2xlYW51cCk7CiAKICAgcmV0dXJuIHN0b3A7CkBAIC04NDUsNiArODE2 LDcgQEAgZ2RicHlfYnJlYWtwb2ludF9jcmVhdGVkIChzdHJ1Y3QgYnJlYWtw b2ludCAqYnApCiAgICAgICBuZXdicC0+bnVtYmVyID0gYnAtPm51bWJlcjsK ICAgICAgIG5ld2JwLT5icCA9IGJwOwogICAgICAgbmV3YnAtPmJwLT5weV9i cF9vYmplY3QgPSBuZXdicDsKKyAgICAgIG5ld2JwLT5pc19maW5pc2hfYnAg PSAwOwogICAgICAgUHlfSU5DUkVGIChuZXdicCk7CiAgICAgICArK2JwcHlf bGl2ZTsKICAgICB9CkBAIC0xMDA2LDcgKzk3OCw3IEBAIHN0YXRpYyBQeU1l dGhvZERlZiBicmVha3BvaW50X29iamVjdF9tZXRob2RzW10gPQogICB7IE5V TEwgfSAvKiBTZW50aW5lbC4gICovCiB9OwogCi1zdGF0aWMgUHlUeXBlT2Jq ZWN0IGJyZWFrcG9pbnRfb2JqZWN0X3R5cGUgPQorUHlUeXBlT2JqZWN0IGJy ZWFrcG9pbnRfb2JqZWN0X3R5cGUgPQogewogICBQeU9iamVjdF9IRUFEX0lO SVQgKE5VTEwpCiAgIDAsCQkJCSAgLypvYl9zaXplKi8KZGlmZiAtLWdpdCBh L2dkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jIGIvZ2RiL3B5dGhv bi9weS1maW5pc2hicmVha3BvaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYTJkODE2NQotLS0gL2Rldi9udWxsCisrKyBiL2dk Yi9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCkBAIC0wLDAgKzEsNDYy IEBACisvKiBQeXRob24gaW50ZXJmYWNlIHRvIGZpbmlzaCBicmVha3BvaW50 cworCisgICBDb3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisKKyNpbmNsdWRl ICJkZWZzLmgiCisjaW5jbHVkZSAiZXhjZXB0aW9ucy5oIgorI2luY2x1ZGUg InB5dGhvbi1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImJyZWFrcG9pbnQuaCIK KyNpbmNsdWRlICJmcmFtZS5oIgorI2luY2x1ZGUgImdkYnRocmVhZC5oIgor I2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyNpbmNsdWRlICJsYW5ndWFnZS5o IgorI2luY2x1ZGUgIm9ic2VydmVyLmgiCisjaW5jbHVkZSAiaW5mZXJpb3Iu aCIKKworc3RhdGljIFB5VHlwZU9iamVjdCBmaW5pc2hfYnJlYWtwb2ludF9v YmplY3RfdHlwZTsKKworLyogRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hl biBhIFB5dGhvbiBmaW5pc2ggYnAgaXMgZm91bmQgb3V0IG9mIHNjb3BlLiAg Ki8KK3N0YXRpYyBjaGFyICogY29uc3Qgb3V0b2ZzY29wZV9mdW5jID0gIm91 dF9vZl9zY29wZSI7CisKKy8qIHN0cnVjdCBpbXBsZW1lbnRpbmcgdGhlIGdk Yi5GaW5pc2hCcmVha3BvaW50IG9iamVjdCBieSBleHRlbmRpbmcKKyAgIHRo ZSBnZGIuQnJlYWtwb2ludCBjbGFzcy4gICovCitzdHJ1Y3QgZmluaXNoX2Jy ZWFrcG9pbnRfb2JqZWN0Cit7CisgIC8qIGdkYi5CcmVha3BvaW50IGJhc2Ug Y2xhc3MuICAqLworICBicmVha3BvaW50X29iamVjdCBweV9icDsKKyAgLyog Z2RiLlR5cGUgb2JqZWN0IG9mIHRoZSB2YWx1ZSByZXR1cm4gYnkgdGhlIGJy ZWFrcG9pbnRlZCBmdW5jdGlvbi4KKyAgICAgTWF5IGJlIE5VTEwgaWYgbm8g ZGVidWcgaW5mb3JtYXRpb24gd2FzIGF2YWlsYWJsZSBvciByZXR1cm4gdHlw ZQorICAgICB3YXMgVk9JRC4gICovCisgIFB5T2JqZWN0ICpyZXR1cm5fdHlw ZTsKKyAgLyogZ2RiLlR5cGUgb2JqZWN0IG9mIHRoZSBmdW5jdGlvbiBmaW5p c2hlZCBieSB0aGlzIGJyZWFrcG9pbnQuICBXaWxsIGJlCisgICAgIE5VTEwg aWYgcmV0dXJuX3R5cGUgaXMgTlVMTC4gICovCisgIFB5T2JqZWN0ICpmdW5j dGlvbl90eXBlOworICAvKiBXaGVuIHN0b3BwZWQgYXQgdGhpcyBGaW5pc2hC cmVha3BvaW50LCBnZGIuVmFsdWUgb2JqZWN0IHJldHVybmVkIGJ5CisgICAg IHRoZSBmdW5jdGlvbjsgUHlfTm9uZSBpZiB0aGUgdmFsdWUgaXMgbm90IGNv bXB1dGFibGU7IE5VTEwgaWYgR0RCIGlzCisgICAgIG5vdCBzdG9wcGVkIGF0 IGEgRmluaXNoQnJlYWtwb2ludC4gICovCisgIFB5T2JqZWN0ICpyZXR1cm5f dmFsdWU7Cit9OworCisvKiBQeXRob24gZnVuY3Rpb24gdG8gZ2V0IHRoZSAn cmV0dXJuX3ZhbHVlJyBhdHRyaWJ1dGUgb2YKKyAgIEZpbmlzaEJyZWFrcG9p bnQuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorYnBmaW5pc2hweV9nZXRf cmV0dXJudmFsdWUgKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQor eworICBzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0ICpzZWxmX2Zp bmlzaGJwID0KKyAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2Jq ZWN0ICopIHNlbGY7CisKKyAgaWYgKCFzZWxmX2ZpbmlzaGJwLT5yZXR1cm5f dmFsdWUpCisgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgUHlfSU5DUkVGIChz ZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWUpOworICByZXR1cm4gc2VsZl9m aW5pc2hicC0+cmV0dXJuX3ZhbHVlOworfQorCisvKiBEZWFsbG9jYXRlIEZp bmlzaEJyZWFrcG9pbnQgb2JqZWN0LiAgKi8KKworc3RhdGljIHZvaWQKK2Jw ZmluaXNocHlfZGVhbGxvYyAoUHlPYmplY3QgKnNlbGYpCit7CisgIHN0cnVj dCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKnNlbGZfYnBmaW5pc2ggPQor ICAgICAgICAoc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqKSBz ZWxmOworCisgIFB5X1hERUNSRUYgKHNlbGZfYnBmaW5pc2gtPmZ1bmN0aW9u X3R5cGUpOworICBQeV9YREVDUkVGIChzZWxmX2JwZmluaXNoLT5yZXR1cm5f dHlwZSk7CisgIFB5X1hERUNSRUYgKHNlbGZfYnBmaW5pc2gtPnJldHVybl92 YWx1ZSk7Cit9CisKKy8qIFRyaWdnZXJlZCB3aGVuIGdkYnB5X3Nob3VsZF9z dG9wIGlzIGFib3V0IHRvIGV4ZWN1dGUgdGhlIGBzdG9wJyBjYWxsYmFjawor ICAgb2YgdGhlIGdkYi5GaW5pc2hCcmVha3BvaW50IG9iamVjdCBCUF9PQkou ICBXaWxsIGNvbXB1dGUgYW5kIGNhY2hlIHRoZQorICAgYHJldHVybl92YWx1 ZScsIGlmIHBvc3NpYmxlLiAgKi8KKwordm9pZAorYnBmaW5pc2hweV9wcmVf c3RvcF9ob29rIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaikK K3sKKyAgc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqc2VsZl9m aW5pc2hicCA9CisgICAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRf b2JqZWN0ICopIGJwX29iajsKKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNl cHRpb24gZXhjZXB0OworCisgIC8qIENhbiBjb21wdXRlIHJldHVybl92YWx1 ZSBvbmx5IG9uY2UuICAqLworICBnZGJfYXNzZXJ0ICghc2VsZl9maW5pc2hi cC0+cmV0dXJuX3ZhbHVlKTsKKworICBpZiAoIXNlbGZfZmluaXNoYnAtPnJl dHVybl90eXBlKQorICAgIHJldHVybjsKKworICBUUllfQ0FUQ0ggKGV4Y2Vw dCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAgICAgIHN0cnVjdCB2YWx1 ZSAqcmV0ID0KKyAgICAgICAgICBnZXRfcmV0dXJuX3ZhbHVlICh0eXBlX29i amVjdF90b190eXBlIChzZWxmX2ZpbmlzaGJwLT5mdW5jdGlvbl90eXBlKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX29iamVjdF90b190 eXBlIChzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdHlwZSkpOworCisgICAgICBp ZiAocmV0KQorICAgICAgICB7CisgICAgICAgICAgc2VsZl9maW5pc2hicC0+ cmV0dXJuX3ZhbHVlID0gdmFsdWVfdG9fdmFsdWVfb2JqZWN0IChyZXQpOwor ICAgICAgICAgIGlmICghc2VsZl9maW5pc2hicC0+cmV0dXJuX3ZhbHVlKQor ICAgICAgICAgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKKyAgICAgICAg fQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgUHlfSU5DUkVG IChQeV9Ob25lKTsKKyAgICAgICAgICBzZWxmX2ZpbmlzaGJwLT5yZXR1cm5f dmFsdWUgPSBQeV9Ob25lOworICAgICAgICB9CisgICAgfQorICBpZiAoZXhj ZXB0LnJlYXNvbiA8IDApCisgICAgeworICAgICAgZ2RicHlfY29udmVydF9l eGNlcHRpb24gKGV4Y2VwdCk7CisgICAgICBnZGJweV9wcmludF9zdGFjayAo KTsKKyAgICB9Cit9CisKKy8qIFRyaWdnZXJlZCB3aGVuIGdkYnB5X3Nob3Vs ZF9zdG9wIGhhcyB0cmlnZ2VyZWQgdGhlIGBzdG9wJyBjYWxsYmFjaworICAg b2YgdGhlIGdkYi5GaW5pc2hCcmVha3BvaW50IG9iamVjdCBCUF9PQkouICAq LworCit2b2lkCiticGZpbmlzaHB5X3Bvc3Rfc3RvcF9ob29rIChzdHJ1Y3Qg YnJlYWtwb2ludF9vYmplY3QgKmJwX29iaikKK3sKKyAgdm9sYXRpbGUgc3Ry dWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworCisgIFRSWV9DQVRDSCAoZXhj ZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAgeworICAgICAgLyogQ2FuJ3Qg ZGVsZXRlIGl0IGhlcmUsIGJ1dCBpdCB3aWxsIGJlIHJlbW92ZWQgYXQgdGhl IG5leHQgc3RvcC4gICovCisgICAgICBkaXNhYmxlX2JyZWFrcG9pbnQgKGJw X29iai0+YnApOworICAgICAgZ2RiX2Fzc2VydCAoYnBfb2JqLT5icC0+ZGlz cG9zaXRpb24gPT0gZGlzcF9kZWwpOworICAgIH0KKyAgaWYgKGV4Y2VwdC5y ZWFzb24gPCAwKQorICAgIHsKKyAgICAgIGdkYnB5X2NvbnZlcnRfZXhjZXB0 aW9uIChleGNlcHQpOworICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7Cisg ICAgfQorfQorCisvKiBQeXRob24gZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3 IGJyZWFrcG9pbnQuICAqLworCitzdGF0aWMgaW50CiticGZpbmlzaHB5X2lu aXQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3Qg Kmt3YXJncykKK3sKKyAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7ICJm cmFtZSIsICJpbnRlcm5hbCIsIE5VTEwgfTsKKyAgc3RydWN0IGZpbmlzaF9i cmVha3BvaW50X29iamVjdCAqc2VsZl9icGZpbmlzaCA9CisgICAgICAoc3Ry dWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqKSBzZWxmOworICBpbnQg dHlwZSA9IGJwX2JyZWFrcG9pbnQ7CisgIFB5T2JqZWN0ICpmcmFtZV9vYmog PSBOVUxMOworICBpbnQgdGhyZWFkOworICBzdHJ1Y3QgZnJhbWVfaW5mbyAq ZnJhbWUsICpwcmV2X2ZyYW1lID0gTlVMTDsKKyAgc3RydWN0IGZyYW1lX2lk IGZyYW1lX2lkOworICBQeU9iamVjdCAqaW50ZXJuYWwgPSBOVUxMOworICBp bnQgaW50ZXJuYWxfYnAgPSAwOworICBDT1JFX0FERFIgZmluaXNoX3BjLCBw YzsKKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0Owor ICBjaGFyICphZGRyX3N0ciwgc21hbGxfYnVmWzEwMF07CisgIHN0cnVjdCBz eW1ib2wgKmZ1bmN0aW9uOworCisgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFu ZEtleXdvcmRzIChhcmdzLCBrd2FyZ3MsICJ8T08iLCBrZXl3b3JkcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZV9vYmos ICZpbnRlcm5hbCkpCisgICAgcmV0dXJuIC0xOworCisgIC8qIERlZmF1bHQg ZnJhbWUgdG8gZ2RiLm5ld2VzdF9mcmFtZSBpZiBuZWNlc3NhcnkuICAqLwor ICBpZiAoIWZyYW1lX29iaikKKyAgICBmcmFtZV9vYmogPSBnZGJweV9uZXdl c3RfZnJhbWUgKE5VTEwsIE5VTEwpOworICBlbHNlCisgICAgUHlfSU5DUkVG IChmcmFtZV9vYmopOworCisgIGZyYW1lID0gZnJhbWVfb2JqZWN0X3RvX2Zy YW1lX2luZm8gKGZyYW1lX29iaik7CisgIFB5X0RFQ1JFRiAoZnJhbWVfb2Jq KTsKKworICBpZiAoZnJhbWUgPT0gTlVMTCkKKyAgICBnb3RvIGludmFsaWRf ZnJhbWU7CisgIAorICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tf QUxMKQorICAgIHsKKyAgICAgIHByZXZfZnJhbWUgPSBnZXRfcHJldl9mcmFt ZSAoZnJhbWUpOworICAgICAgaWYgKHByZXZfZnJhbWUgPT0gMCkKKyAgICAg ICAgeworICAgICAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVF cnJvciwgXygiXCJGaW5pc2hCcmVha3BvaW50XCIgbm90ICIgICBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJt ZWFuaW5nZnVsIGluIHRoZSBvdXRlcm1vc3QgIlwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyYW1lLiIpKTsK KyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoZ2V0X2ZyYW1lX3R5cGUgKHBy ZXZfZnJhbWUpID09IERVTU1ZX0ZSQU1FKQorICAgICAgICB7CisgICAgICAg ICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLCBfKCJcIkZp bmlzaEJyZWFrcG9pbnRcIiBjYW5ub3QgIlwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlIHNldCBvbiBhIGR1 bW15IGZyYW1lLiIpKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAg ICB7CisgICAgICAgICAgZnJhbWVfaWQgPSBnZXRfZnJhbWVfaWQgKHByZXZf ZnJhbWUpOworICAgICAgICAgIGlmIChmcmFtZV9pZF9lcSAoZnJhbWVfaWQs IG51bGxfZnJhbWVfaWQpKQorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5n IChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfKCJJbnZhbGlkIElEIGZvciB0aGUgYGZyYW1lJyBvYmplY3QuIikp OworICAgICAgICB9CisgICAgfQorICBpZiAoZXhjZXB0LnJlYXNvbiA8IDAp CisgICAgeworICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24gKGV4Y2Vw dCk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICBlbHNlIGlmIChQeUVy cl9PY2N1cnJlZCAoKSkKKyAgICByZXR1cm4gLTE7CisKKyAgdGhyZWFkID0g cGlkX3RvX3RocmVhZF9pZCAoaW5mZXJpb3JfcHRpZCk7CisgIGlmICh0aHJl YWQgPT0gMCkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhj X1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgIF8oIk5vIHRo cmVhZCBjdXJyZW50bHkgc2VsZWN0ZWQuIikpOworICAgICAgcmV0dXJuIC0x OworICAgIH0KKworICBpZiAoaW50ZXJuYWwpCisgICAgeworICAgICAgaW50 ZXJuYWxfYnAgPSBQeU9iamVjdF9Jc1RydWUgKGludGVybmFsKTsKKyAgICAg IGlmIChpbnRlcm5hbF9icCA9PSAtMSkgCisgICAgICAgIHsKKyAgICAgICAg ICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsIAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHZhbHVlIG9mIGBpbnRlcm5h bCcgbXVzdCBiZSBhIGJvb2xlYW4uIikpOworICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBGaW5kIHRoZSBmdW5jdGlv biB3ZSB3aWxsIHJldHVybiBmcm9tLiAgKi8KKyAgc2VsZl9icGZpbmlzaC0+ cmV0dXJuX3R5cGUgPSBOVUxMOworICBzZWxmX2JwZmluaXNoLT5mdW5jdGlv bl90eXBlID0gTlVMTDsKKworICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJO X01BU0tfQUxMKQorICAgIHsKKyAgICAgIGlmIChnZXRfZnJhbWVfcGNfaWZf YXZhaWxhYmxlIChmcmFtZSwgJnBjKSkKKyAgICAgICAgeworICAgICAgICAg IGZ1bmN0aW9uID0gZmluZF9wY19mdW5jdGlvbiAocGMpOworICAgICAgICAg IGlmIChmdW5jdGlvbiAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICBzdHJ1Y3QgdHlwZSAqcmV0X3R5cGUgPQorICAgICAgICAgICAg ICAgICAgVFlQRV9UQVJHRVRfVFlQRSAoU1lNQk9MX1RZUEUgKGZ1bmN0aW9u KSk7CisKKyAgICAgICAgICAgICAgLyogUmVtZW1iZXIgb25seSBub24tdm9p ZCByZXR1cm4gdHlwZXMuICAqLworICAgICAgICAgICAgICBpZiAoVFlQRV9D T0RFIChyZXRfdHlwZSkgIT0gVFlQRV9DT0RFX1ZPSUQpCisgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgLyogSWdub3JlIFB5dGhvbiBl cnJvcnMgYXQgdGhpcyBzdGFnZS4gICovCisgICAgICAgICAgICAgICAgICBz ZWxmX2JwZmluaXNoLT5yZXR1cm5fdHlwZSA9IHR5cGVfdG9fdHlwZV9vYmpl Y3QgKHJldF90eXBlKTsKKyAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFy ICgpOworICAgICAgICAgICAgICAgICAgc2VsZl9icGZpbmlzaC0+ZnVuY3Rp b25fdHlwZSA9CisgICAgICAgICAgICAgICAgICAgICAgdHlwZV90b190eXBl X29iamVjdCAoU1lNQk9MX1RZUEUgKGZ1bmN0aW9uKSk7CisgICAgICAgICAg ICAgICAgICBQeUVycl9DbGVhciAoKTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIGlmIChleGNlcHQu cmVhc29uIDwgMAorICAgICAgfHwgIXNlbGZfYnBmaW5pc2gtPnJldHVybl90 eXBlIHx8ICFzZWxmX2JwZmluaXNoLT5mdW5jdGlvbl90eXBlKQorICAgIHsK KyAgICAgIC8qIFdvbid0IGJlIGFibGUgdG8gY29tcHV0ZSByZXR1cm4gdmFs dWUuICAqLworICAgICAgUHlfWERFQ1JFRiAoc2VsZl9icGZpbmlzaC0+cmV0 dXJuX3R5cGUpOworICAgICAgUHlfWERFQ1JFRiAoc2VsZl9icGZpbmlzaC0+ ZnVuY3Rpb25fdHlwZSk7CisKKyAgICAgIHNlbGZfYnBmaW5pc2gtPnJldHVy bl90eXBlID0gTlVMTDsKKyAgICAgIHNlbGZfYnBmaW5pc2gtPmZ1bmN0aW9u X3R5cGUgPSBOVUxMOworICAgIH0KKworICBicHB5X3BlbmRpbmdfb2JqZWN0 ID0gJnNlbGZfYnBmaW5pc2gtPnB5X2JwOworICBicHB5X3BlbmRpbmdfb2Jq ZWN0LT5udW1iZXIgPSAtMTsKKyAgYnBweV9wZW5kaW5nX29iamVjdC0+YnAg PSBOVUxMOworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19B TEwpCisgICAgeworICAgICAgLyogU2V0IGEgYnJlYWtwb2ludCBvbiB0aGUg cmV0dXJuIGFkZHJlc3MuICAqLworICAgICAgZmluaXNoX3BjID0gZ2V0X2Zy YW1lX3BjIChwcmV2X2ZyYW1lKTsKKyAgICAgIHNwcmludGYgKHNtYWxsX2J1 ZiwgIiolcyIsIGhleF9zdHJpbmcgKGZpbmlzaF9wYykpOworICAgICAgYWRk cl9zdHIgPSBzbWFsbF9idWY7CisKKyAgICAgIGNyZWF0ZV9icmVha3BvaW50 IChweXRob25fZ2RiYXJjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBh ZGRyX3N0ciwgTlVMTCwgdGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAg ICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgMSAvKnRlbXBfZmxh ZyovLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJwX2JyZWFrcG9pbnQs CisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBBVVRPX0JPT0xFQU5fVFJVRSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAmYmtwdF9icmVha3BvaW50X29wcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAwLCAxLCBpbnRlcm5hbF9icCk7CisgICAgfQorICBH REJfUFlfU0VUX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7CisgIAorICBz ZWxmX2JwZmluaXNoLT5weV9icC5icC0+ZnJhbWVfaWQgPSBmcmFtZV9pZDsK KyAgc2VsZl9icGZpbmlzaC0+cHlfYnAuaXNfZmluaXNoX2JwID0gMTsKKyAg CisgIC8qIEJpbmQgdGhlIGJyZWFrcG9pbnQgd2l0aCB0aGUgY3VycmVudCBw cm9ncmFtIHNwYWNlLiAgKi8KKyAgc2VsZl9icGZpbmlzaC0+cHlfYnAuYnAt PnBzcGFjZSA9IGN1cnJlbnRfcHJvZ3JhbV9zcGFjZTsKKworICByZXR1cm4g MDsKKyAgCisgaW52YWxpZF9mcmFtZToKKyAgUHlFcnJfU2V0U3RyaW5nIChQ eUV4Y19WYWx1ZUVycm9yLCAKKyAgICAgICAgICAgICAgICAgICBfKCJJbnZh bGlkIElEIGZvciB0aGUgYGZyYW1lJyBvYmplY3QuIikpOworICByZXR1cm4g LTE7Cit9CisKKy8qIENhbGxlZCB3aGVuIEdEQiBub3RpY2VzIHRoYXQgdGhl IGZpbmlzaCBicmVha3BvaW50IEJQX09CSiBpcyBvdXQgb2YKKyAgIHRoZSBj dXJyZW50IGNhbGxzdGFjay4gIFRyaWdnZXJzIHRoZSBtZXRob2QgT1VUX09G X1NDT1BFIGlmIGltcGxlbWVudGVkLAorICAgdGhlbiBkZWxldGUgdGhlIGJy ZWFrcG9pbnQuICAqLworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9vdXRf b2Zfc2NvcGUgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKmJw ZmluaXNoX29iaikKK3sKKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRp b24gZXhjZXB0OworICBicmVha3BvaW50X29iamVjdCAqYnBfb2JqID0gKGJy ZWFrcG9pbnRfb2JqZWN0ICopIGJwZmluaXNoX29iajsKKyAgUHlPYmplY3Qg KnB5X29iaiA9IChQeU9iamVjdCAqKSBicF9vYmo7CisKKyAgaWYgKGJwZmlu aXNoX29iai0+cHlfYnAuYnAtPmVuYWJsZV9zdGF0ZSA9PSBicF9lbmFibGVk CisgICAgICAmJiBQeU9iamVjdF9IYXNBdHRyU3RyaW5nIChweV9vYmosIG91 dG9mc2NvcGVfZnVuYykpCisgICAgeworICAgICAgaWYgKCFQeU9iamVjdF9D YWxsTWV0aG9kIChweV9vYmosIG91dG9mc2NvcGVfZnVuYywgTlVMTCkpCisg ICAgICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisgICAgfQorCisgIGRl bGV0ZV9icmVha3BvaW50IChicGZpbmlzaF9vYmotPnB5X2JwLmJwKTsKK30K KworLyogQ2FsbGJhY2sgZm9yIGBicGZpbmlzaHB5X2RldGVjdF9vdXRfc2Nv cGUnLiAgVHJpZ2dlcnMgUHl0aG9uJ3MKKyAgIGBCLT5vdXRfb2Zfc2NvcGUn IGZ1bmN0aW9uIGlmIEIgaXMgYSBGaW5pc2hCcmVha3BvaW50IG91dCBvZiBp dHMgc2NvcGUuICAqLworCitzdGF0aWMgaW50CiticGZpbmlzaHB5X2RldGVj dF9vdXRfc2NvcGVfY2IgKHN0cnVjdCBicmVha3BvaW50ICpiLCB2b2lkICph cmdzKQoreworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNl cHQ7CisgIHN0cnVjdCBicmVha3BvaW50ICpicF9zdG9wcGVkID0gKHN0cnVj dCBicmVha3BvaW50ICopIGFyZ3M7CisgIFB5T2JqZWN0ICpweV9icCA9IChQ eU9iamVjdCAqKSBiLT5weV9icF9vYmplY3Q7CisgIHN0cnVjdCBnZGJhcmNo ICpnYXJjaCA9IGItPmdkYmFyY2ggPyBiLT5nZGJhcmNoIDogZ2V0X2N1cnJl bnRfYXJjaCAoKTsKKyAgCisgIC8qIFRyaWdnZXIgb3V0X29mX3Njb3BlIGlm IHRoaXMgaXMgYSBGaW5pc2hCcmVha3BvaW50IGFuZCBpdHMgZnJhbWUgaXMK KyAgICAgbm90IGFueW1vcmUgaW4gdGhlIGN1cnJlbnQgY2FsbHN0YWNrLiAg Ki8KKyAgaWYgKHB5X2JwICE9IE5VTEwgJiYgYi0+cHlfYnBfb2JqZWN0LT5p c19maW5pc2hfYnApCisgICAgeworICAgICAgc3RydWN0IGZpbmlzaF9icmVh a3BvaW50X29iamVjdCAqZmluaXNoX2JwID0KKyAgICAgICAgICAoc3RydWN0 IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqKSBweV9icDsKKworICAgICAg LyogQ2hlY2sgc2NvcGUgaWYgbm90IGN1cnJlbnRseSBzdG9wcGVkIGF0IHRo ZSBGaW5pc2hCcmVha3BvaW50LiAgKi8KKyAgICAgIGlmIChiICE9IGJwX3N0 b3BwZWQpCisgICAgICAgIHsKKyAgICAgICAgICBUUllfQ0FUQ0ggKGV4Y2Vw dCwgUkVUVVJOX01BU0tfQUxMKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBpZiAoYi0+cHNwYWNlID09IGN1cnJlbnRfaW5mZXJpb3IgKCktPnBz cGFjZQorICAgICAgICAgICAgICAgICAgJiYgKCF0YXJnZXRfaGFzX3JlZ2lz dGVycworICAgICAgICAgICAgICAgICAgICAgIHx8IGZyYW1lX2ZpbmRfYnlf aWQgKGItPmZyYW1lX2lkKSA9PSBOVUxMKSkKKyAgICAgICAgICAgICAgICBi cGZpbmlzaHB5X291dF9vZl9zY29wZSAoZmluaXNoX2JwKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgIGdkYnB5X2NvbnZlcnRfZXhjZXB0 aW9uIChleGNlcHQpOworICAgICAgICAgICAgICBnZGJweV9wcmludF9zdGFj ayAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICBy ZXR1cm4gMDsKK30KKworLyogQXR0YWNoZWQgdG8gYHN0b3AnIG5vdGlmaWNh dGlvbnMsIGNoZWNrIGlmIHRoZSBleGVjdXRpb24gaGFzIHJ1bgorICAgb3V0 IG9mIHRoZSBzY29wZSBvZiBhbnkgRmluaXNoQnJlYWtwb2ludCBiZWZvcmUg aXQgaGFzIGJlZW4gaGl0LiAgKi8KKworc3RhdGljIHZvaWQKK2JwZmluaXNo cHlfaGFuZGxlX3N0b3AgKHN0cnVjdCBicHN0YXRzICpicywgaW50IHByaW50 X2ZyYW1lKQoreworICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cCA9IGVuc3Vy ZV9weXRob25fZW52IChnZXRfY3VycmVudF9hcmNoICgpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50 X2xhbmd1YWdlKTsKKworICBpdGVyYXRlX292ZXJfYnJlYWtwb2ludHMgKGJw ZmluaXNocHlfZGV0ZWN0X291dF9zY29wZV9jYiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicyA9PSBOVUxMID8gTlVMTCA6IGJzLT5icmVha3Bv aW50X2F0KTsKKworICBkb19jbGVhbnVwcyAoY2xlYW51cCk7Cit9CisKKy8q IEF0dGFjaGVkIHRvIGBleGl0JyBub3RpZmljYXRpb25zLCB0cmlnZ2VycyBh bGwgdGhlIG5lY2Vzc2FyeSBvdXQgb2YKKyAgIHNjb3BlIG5vdGlmaWNhdGlv bnMuICAqLworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9oYW5kbGVfZXhp dCAoc3RydWN0IGluZmVyaW9yICppbmYpCit7CisgIHN0cnVjdCBjbGVhbnVw ICpjbGVhbnVwID0gZW5zdXJlX3B5dGhvbl9lbnYgKHRhcmdldF9nZGJhcmNo LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjdXJyZW50X2xhbmd1YWdlKTsKKworICBpdGVyYXRlX292ZXJfYnJl YWtwb2ludHMgKGJwZmluaXNocHlfZGV0ZWN0X291dF9zY29wZV9jYiwgTlVM TCk7CisKKyAgZG9fY2xlYW51cHMgKGNsZWFudXApOworfQorCisvKiBJbml0 aWFsaXplIHRoZSBQeXRob24gZmluaXNoIGJyZWFrcG9pbnQgY29kZS4gICov CisKK3ZvaWQKK2dkYnB5X2luaXRpYWxpemVfZmluaXNoYnJlYWtwb2ludHMg KHZvaWQpCit7CisgIGlmIChQeVR5cGVfUmVhZHkgKCZmaW5pc2hfYnJlYWtw b2ludF9vYmplY3RfdHlwZSkgPCAwKQorICAgICAgcmV0dXJuOworICAKKyAg UHlfSU5DUkVGICgmZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGUpOwor ICBQeU1vZHVsZV9BZGRPYmplY3QgKGdkYl9tb2R1bGUsICJGaW5pc2hCcmVh a3BvaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikg JmZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBlKTsKKyAgICAKKyAgb2Jz ZXJ2ZXJfYXR0YWNoX25vcm1hbF9zdG9wIChicGZpbmlzaHB5X2hhbmRsZV9z dG9wKTsKKyAgb2JzZXJ2ZXJfYXR0YWNoX2luZmVyaW9yX2V4aXQgKGJwZmlu aXNocHlfaGFuZGxlX2V4aXQpOworfQorCitzdGF0aWMgUHlHZXRTZXREZWYg ZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X2dldHNldFtdID0geworICB7ICJy ZXR1cm5fdmFsdWUiLCBicGZpbmlzaHB5X2dldF9yZXR1cm52YWx1ZSwgTlVM TCwKKyAgImdkYi5WYWx1ZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXR1 cm4gdmFsdWUsIGlmIGFueS4gXAorTm9uZSBvdGhlcndpc2UuIiwgTlVMTCB9 LAorICAgIHsgTlVMTCB9ICAvKiBTZW50aW5lbC4gICovCit9OworCitzdGF0 aWMgUHlUeXBlT2JqZWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdF90eXBl ID0KK3sKKyAgUHlPYmplY3RfSEVBRF9JTklUIChOVUxMKQorICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qb2Jfc2l6ZSovCisgICJnZGIu RmluaXNoQnJlYWtwb2ludCIsICAgICAgICAgLyp0cF9uYW1lKi8KKyAgc2l6 ZW9mIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0KSwgIC8qdHBf YmFzaWNzaXplKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKnRwX2l0ZW1zaXplKi8KKyAgYnBmaW5pc2hweV9kZWFsbG9jLCAgICAg ICAgICAgICAvKnRwX2RlYWxsb2MqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1i ZXIqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBf YXNfc2VxdWVuY2UqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qdHBfYXNfbWFwcGluZyovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyp0cF9oYXNoICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVy Ki8KKyAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQ RSwgIC8qdHBfZmxhZ3MqLworICAiR0RCIGZpbmlzaCBicmVha3BvaW50IG9i amVjdCIsIC8qIHRwX2RvYyAqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWts aXN0b2Zmc2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfaXRlciAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgZmlu aXNoX2JyZWFrcG9pbnRfb2JqZWN0X2dldHNldCwvKiB0cF9nZXRzZXQgKi8K KyAgJmJyZWFrcG9pbnRfb2JqZWN0X3R5cGUsICAgICAgICAvKiB0cF9iYXNl ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf ZGljdCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX2Rlc2NyX2dldCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgYnBmaW5p c2hweV9pbml0LCAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8K KyAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcg Ki8KK307CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LWZyYW1lLmMgYi9n ZGIvcHl0aG9uL3B5LWZyYW1lLmMKaW5kZXggMjAwNjRjYS4uYzMzNGY2MyAx MDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weS1mcmFtZS5jCisrKyBiL2dkYi9w eXRob24vcHktZnJhbWUuYwpAQCAtNjAsOSArNjAsMTAgQEAgc3RhdGljIFB5 VHlwZU9iamVjdCBmcmFtZV9vYmplY3RfdHlwZTsKICAgIG9iamVjdC4gIElm IHRoZSBmcmFtZSBkb2Vzbid0IGV4aXN0IGFueW1vcmUgKHRoZSBmcmFtZSBp ZCBkb2Vzbid0CiAgICBjb3JyZXNwb25kIHRvIGFueSBmcmFtZSBpbiB0aGUg aW5mZXJpb3IpLCByZXR1cm5zIE5VTEwuICAqLwogCi1zdGF0aWMgc3RydWN0 IGZyYW1lX2luZm8gKgotZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKGZy YW1lX29iamVjdCAqZnJhbWVfb2JqKQorc3RydWN0IGZyYW1lX2luZm8gKgor ZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKFB5T2JqZWN0ICpvYmopCiB7 CisgIGZyYW1lX29iamVjdCAqZnJhbWVfb2JqID0gKGZyYW1lX29iamVjdCAq KSBvYmo7ICAKICAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lOwogCiAgIGZy YW1lID0gZnJhbWVfZmluZF9ieV9pZCAoZnJhbWVfb2JqLT5mcmFtZV9pZCk7 CkBAIC0xMDYsNyArMTA3LDcgQEAgZnJhcHlfaXNfdmFsaWQgKFB5T2JqZWN0 ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2Vw dCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIGZyYW1lID0gZnJh bWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKChmcmFtZV9vYmplY3QgKikgc2Vs Zik7CisgICAgICBmcmFtZSA9IGZyYW1lX29iamVjdF90b19mcmFtZV9pbmZv IChzZWxmKTsKICAgICB9CiAgIEdEQl9QWV9IQU5ETEVfRVhDRVBUSU9OIChl eGNlcHQpOwogCkBAIC0xMzAsNyArMTMxLDcgQEAgZnJhcHlfbmFtZSAoUHlP YmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAo ZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlf UkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7 CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAK ICAgICAgIGZpbmRfZnJhbWVfZnVubmFtZSAoZnJhbWUsICZuYW1lLCAmbGFu ZywgTlVMTCk7CiAgICAgfQpAQCAtMTU5LDcgKzE2MCw3IEBAIGZyYXB5X3R5 cGUgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllf Q0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwg ZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJh bWUpOwogCiAgICAgICB0eXBlID0gZ2V0X2ZyYW1lX3R5cGUgKGZyYW1lKTsK ICAgICB9CkBAIC0xODAsNyArMTgxLDcgQEAgZnJhcHlfdW53aW5kX3N0b3Bf cmVhc29uIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAg VFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0g ICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNl bGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYs IGZyYW1lKTsKICAgICB9CiAgIEdEQl9QWV9IQU5ETEVfRVhDRVBUSU9OIChl eGNlcHQpOwogCkBAIC0yMDEsNyArMjAyLDcgQEAgZnJhcHlfcGMgKFB5T2Jq ZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4 Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JF UVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOwor ICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAg ICAgICBwYyA9IGdldF9mcmFtZV9wYyAoZnJhbWUpOwogICAgIH0KQEAgLTIy Miw3ICsyMjMsNyBAQCBmcmFweV9ibG9jayAoUHlPYmplY3QgKnNlbGYsIFB5 T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5f TUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAo KGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9S RVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAgICAgICBibG9jayA9IGdl dF9mcmFtZV9ibG9jayAoZnJhbWUsIE5VTEwpOwogICAgIH0KICAgR0RCX1BZ X0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7CkBAIC0yNjMsNyArMjY0LDcg QEAgZnJhcHlfZnVuY3Rpb24gKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAq YXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxM KQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9v YmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBzeW0gPSBmaW5kX3BjX2Z1 bmN0aW9uIChnZXRfZnJhbWVfYWRkcmVzc19pbl9ibG9jayAoZnJhbWUpKTsK ICAgICB9CkBAIC0zMzAsNyArMzMxLDcgQEAgZnJhcHlfb2xkZXIgKFB5T2Jq ZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4 Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JF UVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOwor ICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAg ICAgICBwcmV2ID0gZ2V0X3ByZXZfZnJhbWUgKGZyYW1lKTsKICAgICAgIGlm IChwcmV2KQpAQCAtMzU5LDcgKzM2MCw3IEBAIGZyYXB5X25ld2VyIChQeU9i amVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChl eGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9S RVFVSVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsK KyAgICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAog ICAgICAgbmV4dCA9IGdldF9uZXh0X2ZyYW1lIChmcmFtZSk7CiAgICAgICBp ZiAobmV4dCkKQEAgLTM4OCw3ICszODksNyBAQCBmcmFweV9maW5kX3NhbCAo UHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRD SCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJB UFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFt ZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7 CiAKICAgICAgIGZpbmRfZnJhbWVfc2FsIChmcmFtZSwgJnNhbCk7CiAgICAg ICBzYWxfb2JqID0gc3ltdGFiX2FuZF9saW5lX3RvX3NhbF9vYmplY3QgKHNh bCk7CkBAIC00NDQsNyArNDQ1LDcgQEAgZnJhcHlfcmVhZF92YXIgKFB5T2Jq ZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICAgICAgVFJZX0NBVENI IChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKIAl7Ci0JICBGUkFQWV9SRVFV SVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKwkg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogCSAgaWYg KCFibG9jaykKIAkgICAgYmxvY2sgPSBnZXRfZnJhbWVfYmxvY2sgKGZyYW1l LCBOVUxMKTsKQEAgLTQ3Miw3ICs0NzMsNyBAQCBmcmFweV9yZWFkX3ZhciAo UHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRD SCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJB UFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFt ZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7 CiAKICAgICAgIHZhbCA9IHJlYWRfdmFyX3ZhbHVlICh2YXIsIGZyYW1lKTsK ICAgICB9CkBAIC00ODcsMTIgKzQ4OCwxMSBAQCBzdGF0aWMgUHlPYmplY3Qg KgogZnJhcHlfc2VsZWN0IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFy Z3MpCiB7CiAgIHN0cnVjdCBmcmFtZV9pbmZvICpmaTsKLSAgZnJhbWVfb2Jq ZWN0ICpmcmFtZSA9IChmcmFtZV9vYmplY3QgKikgc2VsZjsKICAgdm9sYXRp bGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OwogCiAgIFRSWV9DQVRD SCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJB UFlfUkVRVUlSRV9WQUxJRCAoZnJhbWUsIGZpKTsKKyAgICAgIEZSQVBZX1JF UVVJUkVfVkFMSUQgKHNlbGYsIGZpKTsKIAogICAgICAgc2VsZWN0X2ZyYW1l IChmaSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weXRob24t aW50ZXJuYWwuaCBiL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgKaW5k ZXggZWYzOWQ1ZC4uMWJhNzEzMyAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9w eXRob24taW50ZXJuYWwuaAorKysgYi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRl cm5hbC5oCkBAIC0xMjAsOSArMTIwLDUwIEBAIGV4dGVybiBQeVR5cGVPYmpl Y3Qgc3ltYm9sX29iamVjdF90eXBlOwogZXh0ZXJuIFB5VHlwZU9iamVjdCBl dmVudF9vYmplY3RfdHlwZTsKIGV4dGVybiBQeVR5cGVPYmplY3QgZXZlbnRz X29iamVjdF90eXBlOwogZXh0ZXJuIFB5VHlwZU9iamVjdCBzdG9wX2V2ZW50 X29iamVjdF90eXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBicmVha3BvaW50 X29iamVjdF90eXBlOworCit0eXBlZGVmIHN0cnVjdCBicmVha3BvaW50X29i amVjdAoreworICBQeU9iamVjdF9IRUFECisKKyAgLyogVGhlIGJyZWFrcG9p bnQgbnVtYmVyIGFjY29yZGluZyB0byBnZGIuICAqLworICBpbnQgbnVtYmVy OworCisgIC8qIFRoZSBnZGIgYnJlYWtwb2ludCBvYmplY3QsIG9yIE5VTEwg aWYgdGhlIGJyZWFrcG9pbnQgaGFzIGJlZW4KKyAgICAgZGVsZXRlZC4gICov CisgIHN0cnVjdCBicmVha3BvaW50ICpicDsKKworICAvKiAxIGlzIHRoaXMg aXMgYSBGaW5pc2hCcmVha3BvaW50IG9iamVjdCwgMCBvdGhlcndpc2UuICAq LworICBpbnQgaXNfZmluaXNoX2JwOworfSBicmVha3BvaW50X29iamVjdDsK KworLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUgYSB2YWxpZCBicmVh a3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgorICAgZXhjZXB0aW9uIGlmIGl0 IGlzIGludmFsaWQuICAqLworI2RlZmluZSBCUFBZX1JFUVVJUkVfVkFMSUQo QnJlYWtwb2ludCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKChC cmVha3BvaW50KS0+YnAgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gUHlFcnJfRm9ybWF0 IChQeUV4Y19SdW50aW1lRXJyb3IsICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJCcmVha3BvaW50 ICVkIGlzIGludmFsaWQuIiksICAgICAgICAgICAgXAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoQnJlYWtwb2ludCktPm51bWJlcik7ICAgICAg ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKy8qIFJlcXVp cmUgdGhhdCBCUkVBS1BPSU5UIGJlIGEgdmFsaWQgYnJlYWtwb2ludCBJRDsg dGhyb3cgYSBQeXRob24KKyAgIGV4Y2VwdGlvbiBpZiBpdCBpcyBpbnZhbGlk LiAgVGhpcyBtYWNybyBpcyBmb3IgdXNlIGluIHNldHRlciBmdW5jdGlvbnMu ICAqLworI2RlZmluZSBCUFBZX1NFVF9SRVFVSVJFX1ZBTElEKEJyZWFrcG9p bnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKChCcmVha3BvaW50KS0+ YnAgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg IFB5RXJyX0Zvcm1hdCAoUHlFeGNfUnVudGltZUVycm9yLCBfKCJCcmVha3Bv aW50ICVkIGlzIGludmFsaWQuIiksIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgIChCcmVha3BvaW50KS0+bnVtYmVyKTsgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisK Ky8qIFZhcmlhYmxlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0d2Vl biB0aGUgQnJlYWtwb2ludAorICAgY29uc3RydWN0b3IgYW5kIHRoZSBicmVh a3BvaW50LWNyZWF0ZWQgaG9vayBmdW5jdGlvbi4gICovCitleHRlcm4gYnJl YWtwb2ludF9vYmplY3QgKmJwcHlfcGVuZGluZ19vYmplY3Q7CiAKLS8qIERl ZmluZWQgaW4gcHktYnJlYWtwb2ludC5jICovCi10eXBlZGVmIHN0cnVjdCBi cmVha3BvaW50X29iamVjdCBicmVha3BvaW50X29iamVjdDsKIAogdHlwZWRl ZiBzdHJ1Y3QKIHsKQEAgLTE4OCw2ICsyMjksNyBAQCBzdHJ1Y3QgdmFsdWUg KmNvbnZlcnRfdmFsdWVfZnJvbV9weXRob24gKFB5T2JqZWN0ICpvYmopOwog c3RydWN0IHR5cGUgKnR5cGVfb2JqZWN0X3RvX3R5cGUgKFB5T2JqZWN0ICpv YmopOwogc3RydWN0IHN5bXRhYiAqc3ltdGFiX29iamVjdF90b19zeW10YWIg KFB5T2JqZWN0ICpvYmopOwogc3RydWN0IHN5bXRhYl9hbmRfbGluZSAqc2Fs X29iamVjdF90b19zeW10YWJfYW5kX2xpbmUgKFB5T2JqZWN0ICpvYmopOwor c3RydWN0IGZyYW1lX2luZm8gKmZyYW1lX29iamVjdF90b19mcmFtZV9pbmZv IChQeU9iamVjdCAqZnJhbWVfb2JqKTsKIAogdm9pZCBnZGJweV9pbml0aWFs aXplX2F1dG9fbG9hZCAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVf dmFsdWVzICh2b2lkKTsKQEAgLTIwMiw2ICsyNDQsNyBAQCB2b2lkIGdkYnB5 X2luaXRpYWxpemVfZnVuY3Rpb25zICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5p dGlhbGl6ZV9wc3BhY2UgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXpl X29iamZpbGUgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX2JyZWFr cG9pbnRzICh2b2lkKTsKK3ZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9maW5pc2hi cmVha3BvaW50cyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfbGF6 eV9zdHJpbmcgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX3BhcmFt ZXRlcnMgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX3RocmVhZCAo dm9pZCk7CkBAIC0yNzUsNiArMzE4LDkgQEAgUHlPYmplY3QgKmdkYnB5X2dl dF92YXJvYmpfcHJldHR5X3ByaW50ZXIgKHN0cnVjdCB2YWx1ZSAqdmFsdWUp OwogY2hhciAqZ2RicHlfZ2V0X2Rpc3BsYXlfaGludCAoUHlPYmplY3QgKnBy aW50ZXIpOwogUHlPYmplY3QgKmdkYnB5X2RlZmF1bHRfdmlzdWFsaXplciAo UHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKIAordm9pZCBicGZp bmlzaHB5X3ByZV9zdG9wX2hvb2sgKHN0cnVjdCBicmVha3BvaW50X29iamVj dCAqYnBfb2JqKTsKK3ZvaWQgYnBmaW5pc2hweV9wb3N0X3N0b3BfaG9vayAo c3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopOworCiBleHRlcm4g UHlPYmplY3QgKmdkYnB5X2RvY19jc3Q7CiBleHRlcm4gUHlPYmplY3QgKmdk YnB5X2NoaWxkcmVuX2NzdDsKIGV4dGVybiBQeU9iamVjdCAqZ2RicHlfdG9f c3RyaW5nX2NzdDsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLmMg Yi9nZGIvcHl0aG9uL3B5dGhvbi5jCmluZGV4IGIwYjlhOWMuLmYzZmRmOWEg MTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLmMKKysrIGIvZ2RiL3B5 dGhvbi9weXRob24uYwpAQCAtMTI0Nyw2ICsxMjQ3LDcgQEAgRW5hYmxlcyBv ciBkaXNhYmxlcyBwcmludGluZyBvZiBQeXRob24gc3RhY2sgdHJhY2VzLiIp LAogICBnZGJweV9pbml0aWFsaXplX3BzcGFjZSAoKTsKICAgZ2RicHlfaW5p dGlhbGl6ZV9vYmpmaWxlICgpOwogICBnZGJweV9pbml0aWFsaXplX2JyZWFr cG9pbnRzICgpOworICBnZGJweV9pbml0aWFsaXplX2ZpbmlzaGJyZWFrcG9p bnRzICgpOwogICBnZGJweV9pbml0aWFsaXplX2xhenlfc3RyaW5nICgpOwog ICBnZGJweV9pbml0aWFsaXplX3RocmVhZCAoKTsKICAgZ2RicHlfaW5pdGlh bGl6ZV9pbmZlcmlvciAoKTsKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9NYWtlZmlsZS5pbiBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9NYWtlZmlsZS5pbgppbmRleCA5Yzk4ZGI5Li41ODkwMTkxIDEwMDY0 NAotLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vTWFrZWZpbGUuaW4K KysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL01ha2VmaWxlLmluCkBA IC00LDkgKzQsMTAgQEAgc3JjZGlyID0gQHNyY2RpckAKIEVYRUNVVEFCTEVT ID0gcHktdHlwZSBweS12YWx1ZSBweS1wcmV0dHlwcmludCBweS10ZW1wbGF0 ZSBweS1ibG9jayBcCiAJcHktc3ltYm9sIHB5LW1pIHB5LWJyZWFrcG9pbnQg cHktaW5mZXJpb3IgcHktaW5mdGhyZWFkIFwKIAlweS1zaGFyZWQgcHl0aG9u IGxpYi10eXBlcyBweS1ldmVudHMgcHktZXZ0aHJlYWRzIHB5LWZyYW1lIFwK LQlweS1taSBweS1wcC1tYWludCBweS1wcm9nc3BhY2UgcHktc2VjdGlvbi1z Y3JpcHQgcHktb2JqZmlsZQorCXB5LW1pIHB5LXBwLW1haW50IHB5LXByb2dz cGFjZSBweS1zZWN0aW9uLXNjcmlwdCBweS1vYmpmaWxlIFwKKwlweS1maW5p c2gtYnJlYWtwb2ludCBweS1maW5pc2gtYnJlYWtwb2ludDIKIAotTUlTQ0VM TEFORU9VUyA9IHB5LXNoYXJlZC1zbC5zbAorTUlTQ0VMTEFORU9VUyA9IHB5 LXNoYXJlZC1zbC5zbCBweS1ldmVudHMtc2hsaWIuc28gcHktZXZlbnRzLXNo bGliLW5vZGVidWcuc28gCiAKIGFsbCBpbmZvIGluc3RhbGwtaW5mbyBkdmkg aW5zdGFsbCB1bmluc3RhbGwgaW5zdGFsbGNoZWNrIGNoZWNrOgogCUBlY2hv ICJOb3RoaW5nIHRvIGJlIGRvbmUgZm9yICRALi4uIgpkaWZmIC0tZ2l0IGEv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwCmlu ZGV4IGUwZGQwODcuLjBlM2FkYmQgMTAwNjQ0Ci0tLSBhL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS1icmVha3BvaW50LmV4cAorKysgYi9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktYnJlYWtwb2ludC5leHAKQEAgLTQ0LDcg KzQ0LDggQEAgZ2RiX3B5X3Rlc3Rfc2lsZW50X2NtZCAicHl0aG9uIGJsaXN0 ID0gZ2RiLmJyZWFrcG9pbnRzKCkiICJHZXQgQnJlYWtwb2ludCBMaXN0Igog Z2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMFxdIiAiPGdkYi5CcmVh a3BvaW50IG9iamVjdCBhdCAkaGV4PiIgIkNoZWNrIG9iaiBleGlzdHMiCiBn ZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFswXF0ubG9jYXRpb24iICJt YWluLiIgIkNoZWNrIGJyZWFrcG9pbnQgbG9jYXRpb24iCiAKLWdkYl9icmVh a3BvaW50IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJCcmVhayBhdCBtdWx0aXBs eS4iXQorc2V0IG11bHRfbGluZSBbZ2RiX2dldF9saW5lX251bWJlciAiQnJl YWsgYXQgbXVsdGlwbHkuIl0KK2dkYl9icmVha3BvaW50ICR7bXVsdF9saW5l fQogZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQgIkJyZWFrIGF0IG11bHRp cGx5LiIKIAogIyBDaGVjayB0aGF0IHRoZSBQeXRob24gYnJlYWtwb2ludCBj b2RlIG5vdGVkIHRoZSBhZGRpdGlvbiBvZiBhCkBAIC01NCw3ICs1NSw5IEBA IGdkYl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGJsaXN0KSIgIjIiICJDaGVj ayBmb3IgdHdvIGJyZWFrcG9pbnRzIgogZ2RiX3Rlc3QgInB5dGhvbiBwcmlu dCBibGlzdFxbMFxdIiAiPGdkYi5CcmVha3BvaW50IG9iamVjdCBhdCAkaGV4 PiIgIkNoZWNrIG9iaiBleGlzdHMiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50 IGJsaXN0XFswXF0ubG9jYXRpb24iICJtYWluLiIgIkNoZWNrIGJyZWFrcG9p bnQgbG9jYXRpb24iCiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFsx XF0iICI8Z2RiLkJyZWFrcG9pbnQgb2JqZWN0IGF0ICRoZXg+IiAiQ2hlY2sg b2JqIGV4aXN0cyIKLWdkYl90ZXN0ICJweXRob24gcHJpbnQgYmxpc3RcWzFc XS5sb2NhdGlvbiIgInB5LWJyZWFrcG9pbnRcLmM6NDEqIiAiQ2hlY2sgYnJl YWtwb2ludCBsb2NhdGlvbiIKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBi bGlzdFxbMVxdLmxvY2F0aW9uIiAicHktYnJlYWtwb2ludFwuYzoke211bHRf bGluZX0qIiBcCisgICAgICAgICAiQ2hlY2sgYnJlYWtwb2ludCBsb2NhdGlv biIKIAogIyBDaGVjayBoaXQgYW5kIGlnbm9yZSBjb3VudHMuIAogZ2RiX3Rl c3QgInB5dGhvbiBwcmludCBibGlzdFxbMVxdLmhpdF9jb3VudCIgIjEiICJD aGVjayBicmVha3BvaW50IGhpdCBjb3VudCIKZGlmZiAtLWdpdCBhL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5jIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyZTA2 YwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1maW5pc2gtYnJlYWtwb2ludC5jCkBAIC0wLDAgKzEsMTAwIEBACisv KiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVn Z2VyLgorCisgICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisK KyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNp bmNsdWRlIDx1bmlzdGQuaD4KKworLyogRGVmaW5lZCBpbiBweS1ldmVudHMt c2hsaWIuaC4gICovCitleHRlcm4gdm9pZCBkb19ub3RoaW5nICh2b2lkKTsK KworaW50IGluY3JlYXNlXzEgKGludCAqYSkKK3sKKyAgKmEgKz0gMTsKKyAg cmV0dXJuIC01OworfQorCit2b2lkIGluY3JlYXNlIChpbnQgKmEpCit7Cisg IGluY3JlYXNlXzEgKGEpOworfQorCitpbnQKK3Rlc3RfMSAoaW50IGksIGlu dCBqKQoreworICByZXR1cm4gaSA9PSBqOworfQorCitpbnQKK3Rlc3QgKGlu dCBpLCBpbnQgaikKK3sKKyAgcmV0dXJuIHRlc3RfMSAoaSwgaik7Cit9CisK K2ludAorY2FsbF9sb25nam1wXzEgKGptcF9idWYgKmJ1ZikKK3sKKyAgbG9u Z2ptcCAoKmJ1ZiwgMSk7Cit9CisKK2ludAorY2FsbF9sb25nam1wIChqbXBf YnVmICpidWYpCit7CisgIGNhbGxfbG9uZ2ptcF8xIChidWYpOworfQorCit2 b2lkCit0ZXN0X2V4ZWNfZXhpdCAoaW50IGRvX2V4aXQpCit7CisgIGlmIChk b19leGl0KQorICAgIGV4aXQgKDApOworICBlbHNlCisgICAgZXhlY2wgKCIv YmluL2VjaG8iLCAiZWNobyIsICItMSIsIChjaGFyICopMCk7Cit9CisKK2lu dCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBqbXBfYnVm IGVudjsKKyAgaW50IGZvbyA9IDU7CisgIGludCBiYXIgPSA0MjsKKyAgaW50 IGksIGo7CisKKyAgZG9fbm90aGluZyAoKTsKKworICBpID0gMDsKKyAgLyog QnJlYWsgYXQgaW5jcmVhc2UuICAqLworICBpbmNyZWFzZSAoJmkpOworICBp bmNyZWFzZSAoJmkpOworICBpbmNyZWFzZSAoJmkpOworCisgIGZvciAoaSA9 IDA7IGkgPCAxMDsgaSsrKQorICAgIHsKKyAgICAgIGogKz0gMTsgLyogQ29u ZGl0aW9uIEJyZWFrLiAgKi8KKyAgICB9CisKKyAgaWYgKHNldGptcCAoZW52 KSA9PSAwKSAvKiBsb25nam1wIGNhdWdodCAqLworICAgIHsKKyAgICAgIGNh bGxfbG9uZ2ptcCAoJmVudik7CisgICAgfQorICBlbHNlCisgICAgaiArPSAx OyAvKiBhZnRlciBsb25nam1wLiAgKi8KKworICB0ZXN0X2V4ZWNfZXhpdCAo MSk7CisKKyAgcmV0dXJuIGo7IC8qIEJyZWFrIGF0IGVuZC4gICovCit9CmRp ZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNo LWJyZWFrcG9pbnQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWZpbmlzaC1icmVha3BvaW50LmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi40YTAyYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmV4 cApAQCAtMCwwICsxLDI1NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRl LiAgSXQgdGVzdHMgdGhlIG1lY2hhbmlzbQorIyBleHBvc2luZyB2YWx1ZXMg dG8gUHl0aG9uLgorCitpZiAkdHJhY2VsZXZlbCB0aGVuIHsKKyAgICBzdHJh Y2UgJHRyYWNlbGV2ZWwKK30KKworbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAK Kworc2V0IGxpYmZpbGUgInB5LWV2ZW50cy1zaGxpYiIKK3NldCBsaWJzcmMg ICRzcmNkaXIvJHN1YmRpci8kbGliZmlsZS5jCitzZXQgbGliX3NsICAkb2Jq ZGlyLyRzdWJkaXIvJGxpYmZpbGUtbm9kZWJ1Zy5zbworc2V0IGxpYl9vcHRz ICIiCisKK3NldCB0ZXN0ZmlsZSAicHktZmluaXNoLWJyZWFrcG9pbnQiCitz ZXQgc3JjZmlsZSAke3Rlc3RmaWxlfS5jCitzZXQgYmluZmlsZSAke29iamRp cn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9CitzZXQgZXhlY19vcHRzIFtsaXN0 IGRlYnVnIHNobGliPSRsaWJfc2xdCisKK2lmIFtnZXRfY29tcGlsZXJfaW5m byAke2JpbmZpbGV9XSB7CisgICAgcmV0dXJuIC0xCit9CisKK2lmIHsgW2dk Yl9jb21waWxlX3NobGliICRsaWJzcmMgJGxpYl9zbCAkbGliX29wdHNdICE9 ICIiCisgICAgIHx8IFtnZGJfY29tcGlsZSAkc3JjZGlyLyRzdWJkaXIvJHNy Y2ZpbGUgJGJpbmZpbGUgZXhlY3V0YWJsZSAkZXhlY19vcHRzXSAhPSAiIn0g eworICAgIHVudGVzdGVkICJDb3VsZCBub3QgY29tcGlsZSBlaXRoZXIgJGxp YnNyYyBvciAkc3JjZGlyLyRzdWJkaXIvJHNyY2ZpbGUuIgorICAgIHJldHVy biAtMQorfQorCisjIFN0YXJ0IHdpdGggYSBmcmVzaCBnZGIuCitjbGVhbl9y ZXN0YXJ0ICR7dGVzdGZpbGV9CisKK3NldCBweXRob25fZmlsZSAke3NyY2Rp cn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5CisKKworIyBTa2lwIGFsbCB0 ZXN0cyBpZiBQeXRob24gc2NyaXB0aW5nIGlzIG5vdCBlbmFibGVkLgoraWYg eyBbc2tpcF9weXRob25fdGVzdHNdIH0geyBjb250aW51ZSB9CisKKyMKKyMg VGVzdCBGaW5pc2hCcmVha3BvaW50IGluIG5vcm1hbCBjb25kaXRpb25zCisj CisKK2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworaWYgIVtydW50b19t YWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIG1haW4uIgor ICAgIHJldHVybiAwCit9CisKK2dkYl90ZXN0X25vX291dHB1dCAic2V0IGNv bmZpcm0gb2ZmIiAiZGlzYWJsZSBjb25maXJtYXRpb24iCitnZGJfdGVzdCAi c291cmNlICRweXRob25fZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQu KiIgXAorICAgICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKK2dkYl9i cmVha3BvaW50ICJpbmNyZWFzZV8xIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAi QnJlYWtwb2ludCAuKmF0LioiICJjb250aW51ZSB0byB0aGUgZnVuY3Rpb24g dG8gZmluaXNoIgorCisjIHNldCBGaW5pc2hCcmVha3BvaW50CisKK2dkYl90 ZXN0ICJweXRob24gZmluaXNoYnBfZGVmYXVsdCA9IGdkYi5GaW5pc2hCcmVh a3BvaW50ICgpIiBcCisgICAgICAgICAiVGVtcG9yYXJ5IGJyZWFrcG9pbnQu KiIgInNldCBGaW5pc2hCcmVha3BvaW50IHdpdGggZGVmYXVsdCBmcmFtZSB2 YWx1ZSIKK2dkYl90ZXN0ICJweXRob24gZmluaXNoYnAgPSBNeUZpbmlzaEJy ZWFrcG9pbnQgKGdkYi5wYXJzZV9hbmRfZXZhbCAoJ2EnKSwgZ2RiLm5ld2Vz dF9mcmFtZSAoKSkiIFwKKyAgICAgICAgICJUZW1wb3JhcnkgYnJlYWtwb2lu dC4qIiAic2V0IEZpbmlzaEJyZWFrcG9pbnQiCitnZGJfdGVzdCAicHl0aG9u IHByaW50IGZpbmlzaGJwLnJldHVybl92YWx1ZSIgIk5vbmUuKiIgXAorICAg ICAgICAgImNoZWNrIHJldHVybl92YWx1ZSBhdCBpbml0IgorCisjIGNoZWNr IG5vcm1hbCBicCBoaXQKKworZ2RiX3Rlc3QgImNvbnRpbnVlIiAiTXlGaW5p c2hCcmVha3BvaW50IHN0b3Agd2l0aC4qcmV0dXJuX3ZhbHVlIGlzOiAtNS4q IzAuKmluY3JlYXNlLioiIFwKKyAgICAgICAgICJjaGVjayBNeUZpbmlzaEJy ZWFrcG9pbnQgaGl0IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmaW5pc2hi cC5yZXR1cm5fdmFsdWUiICItNS4qIiAiY2hlY2sgcmV0dXJuX3ZhbHVlIgor CitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZpbmlzaGJwX2RlZmF1bHQuaGl0 X2NvdW50IiAiMS4qIiAiY2hlY2sgZmluaXNoQlAgb24gZGVmYXVsdCBmcmFt ZSBoYXMgYmVlbiBoaXQiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZpbmlz aGJwLmlzX3ZhbGlkKCkiICJGYWxzZS4qIlwKKyAgICAgICAgICJlbnN1cmUg dGhhdCBmaW5pc2ggYnAgaXMgaW52YWxpZCBhZmVyIG5vcm1hbCBoaXQiCisK KyMgY2hlY2sgRmluaXNoQnJlYWtwb2ludCBpbiBtYWluIG5vIGFsbG93ZWQK KworZ2RiX3Rlc3QgImZpbmlzaCIgIm1haW4uKiIgInJldHVybiB0byBtYWlu KCkiCitnZGJfdGVzdCAicHl0aG9uIE15RmluaXNoQnJlYWtwb2ludCAoTm9u ZSwgZ2RiLnNlbGVjdGVkX2ZyYW1lICgpKSIgXAorICAgICAgICAgIlZhbHVl RXJyb3I6IFwiRmluaXNoQnJlYWtwb2ludFwiIG5vdCBtZWFuaW5nZnVsIGlu IHRoZSBvdXRlcm1vc3QgZnJhbWUuLioiIFwKKyAgICAgICAgICJjaGVjayBG aW5pc2hCUCBub3QgYWxsb3dlZCBpbiBtYWluIgorCisjCisjIFRlc3QgRmlu aXNoQnJlYWtwb2ludCB3aXRoIG5vIGRlYnVnIHN5bWJvbCAKKyMKKworY2xl YW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAic291cmNlICRw eXRob25fZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAg ICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKK3NldCBjb25kX2xpbmUg W2dkYl9nZXRfbGluZV9udW1iZXIgIkNvbmRpdGlvbiBCcmVhay4iXQorCitp ZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4g dG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KKworZ2RiX3Rlc3QgInByaW50 IGRvX25vdGhpbmciICJubyBkZWJ1ZyBpbmZvLioiICJlbnN1cmUgdGhhdCBz aGFyZWQgbGliIGhhcyBubyBkZWJ1ZyBpbmZvIgorZ2RiX2JyZWFrcG9pbnQg ImRvX25vdGhpbmciIHt0ZW1wb3Jhcnl9CitnZGJfdGVzdCAiY29udGludWUi ICJUZW1wb3JhcnkgYnJlYWtwb2ludCAuKmluIGRvX25vdGhpbmcuKiIgImNv bnRpbnVlIHRvIGRvX25vdGhpbmciCisKK2dkYl90ZXN0ICJweXRob24gZmlu aXNoQlAgPSBTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJh bWUoKSkiIFwKKyAgICAgICAgICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGlu aXQiIFwKKyAgICAgICAgICJzZXQgZmluaXNoIGJyZWFrcG9pbnQiCitnZGJf dGVzdCAiY29udGludWUiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IHN0b3Au KiIgImNoZWNrIEZpbmlzaEJyZWFrcG9pbnQgaGl0IgorZ2RiX3Rlc3QgInB5 dGhvbiBwcmludCBmaW5pc2hCUC5yZXR1cm5fdmFsdWUiICJOb25lIiAiY2hl Y2sgcmV0dXJuIHZhbHVlIHdpdGhvdXQgZGVidWcgc3ltYm9sIgorCisjCisj IFRlc3QgRmluaXNoQnJlYWtwb2ludCBpbiBmdW5jdGlvbiByZXR1cm5lZCBi eSBsb25nam1wIAorIworCitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9CisK K2dkYl90ZXN0ICJzb3VyY2UgJHB5dGhvbl9maWxlIiAiUHl0aG9uIHNjcmlw dCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3Jp cHRzIgorCitpZiAhW3J1bnRvIGNhbGxfbG9uZ2ptcF8xXSB0aGVuIHsKKyAg ICBwZXJyb3IgImNvdWxkbid0IHJ1biB0byBicmVha3BvaW50IGNhbGxfbG9u Z2ptcCIKKyAgICBjb250aW51ZQorfQorCitnZGJfdGVzdCAicHl0aG9uIGZp bmlzaGJwID0gU2ltcGxlRmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2Zy YW1lKCkpIiBcCisgICAgICAgICAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBp bml0IiBcCisgICAgICAgICAic2V0IGZpbmlzaCBicmVha3BvaW50IiAKK2dk Yl90ZXN0ICJicmVhayBbZ2RiX2dldF9saW5lX251bWJlciAiYWZ0ZXIgbG9u Z2ptcC4iXSIgIkJyZWFrcG9pbnQuKiBhdCAuKiIgXAorICAgICAgICAgInNl dCBCUCBhZnRlciB0aGUganVtcCIKK2dkYl90ZXN0ICJjb250aW51ZSIgIlNp bXBsZUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNjb3BlLioiIFwKKyAgICAg ICAgICJjaGVjayBGaW5pc2hCUCBvdXQgb2Ygc2NvcGUgbm90aWZpY2F0aW9u IgorZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBmaW5pc2hicC5pc192YWxpZCgp IiAiRmFsc2UuKiJcCisgICAgICAgICAiZW5zdXJlIHRoYXQgZmluaXNoIGJw IGlzIGludmFsaWQgYWZlciBvdXQgb2Ygc2NvcGUgbm90aWZpY2F0aW9uIgor CisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCBpbiBCUCBjb25kaXRpb24g ZXZhbHVhdGlvbiAKKyMgKGZpbmlzaCBpbiBkdW1teSBmcmFtZSkKKyMKKwor Y2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAic291cmNl ICRweXRob25fZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAor ICAgICAgICAgImltcG9ydCBweXRob24gc2NyaXB0cyIKKworCitpZiAhW3J1 bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8gbWFp bi4iCisgICAgcmV0dXJuIDAKK30KKyAgICAgICAgIAorZ2RiX3Rlc3QgImJy ZWFrICR7Y29uZF9saW5lfSBpZiB0ZXN0XzEoaSw4KSIgIkJyZWFrcG9pbnQg LiogYXQgLioiIFwKKyAgICAgICAgICJzZXQgYSBjb25kaXRpb25hbCBCUCIK K2dkYl90ZXN0ICJweXRob24gVGVzdEJyZWFrcG9pbnQoKSIgIlRlc3RCcmVh a3BvaW50IGluaXQiIFwKKyAgICAgICAgICJzZXQgRmluaXNoQlAgaW4gYSBi cmVha3BvaW50IGNvbmRpdGlvbiIKK2dkYl90ZXN0ICJjb250aW51ZSIgXAor ICAgICAgICAgIlwiRmluaXNoQnJlYWtwb2ludFwiIGNhbm5vdCBiZSBzZXQg b24gYSBkdW1teSBmcmFtZS4qIiBcCisgICAgICAgICAiZG9uJ3QgYWxsb3cg RmluaXNoQnJlYWtwb2ludCBvbiBkdW1teSBmcmFtZXMiCitnZGJfdGVzdCAi cHJpbnQgaSIgIjgiICJjaGVjayBzdG9wcGVkIGxvY2F0aW9uIgorCisjCisj IFRlc3QgRmluaXNoQnJlYWtwb2ludCBpbiBCUCBjb25kaXRpb24gZXZhbHVh dGlvbiAKKyMgKGZpbmlzaCBpbiBub3JtYWwgZnJhbWUpCisjCisKK2NsZWFu X3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworZ2RiX3Rlc3QgInNvdXJjZSAkcHl0 aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAgICAg ICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCisKK2lmICFbcnVudG9fbWFp bl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byBtYWluLiIKKyAg ICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAiYnJlYWsgJHtjb25kX2xpbmV9 IGlmIHRlc3QoaSw4KSIgXAorICAgICAgICAgIkJyZWFrcG9pbnQgLiogYXQg LioiICJzZXQgY29uZGl0aW9uYWwgQlAiCitnZGJfdGVzdCAicHl0aG9uIFRl c3RCcmVha3BvaW50KCkiICJUZXN0QnJlYWtwb2ludCBpbml0IiAic2V0IEJQ IGluIGNvbmRpdGlvbiIKKworZ2RiX3Rlc3QgImNvbnRpbnVlIiBcCisgICAg ICAgICAidGVzdCBkb24ndCBzdG9wOiAxLip0ZXN0IGRvbid0IHN0b3A6IDIu KnRlc3Qgc3RvcC4qRXJyb3IgaW4gdGVzdGluZyBicmVha3BvaW50IGNvbmRp dGlvbi4qVGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgc3RvcHBlZCB3aGls ZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdEQi4qIiBcCisgICAgICAg ICAic3RvcCBpbiBjb25kaXRpb24gZnVuY3Rpb24iCisKK2dkYl90ZXN0ICJj b250aW51ZSIgIkNvbnRpbnVpbmcuKiIgImZpbmlzaCBjb25kaXRpb24gZXZh bHVhdGlvbiIKK2dkYl90ZXN0ICJjb250aW51ZSIgIkJyZWFrcG9pbnQuKiIg InN0b3AgYXQgY29uZGl0aW9uYWwgYnJlYWtwb2ludCIKK2dkYl90ZXN0ICJw cmludCBpIiAiOCIgImNoZWNrIHN0b3BwZWQgbG9jYXRpb24iCisKKyMKKyMg VGVzdCBGaW5pc2hCcmVha3BvaW50IGluIGV4cGxpY2l0IGluZmVyaW9yIGZ1 bmN0aW9uIGNhbGwKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQor CitnZGJfdGVzdCAic291cmNlICRweXRob25fZmlsZSIgIlB5dGhvbiBzY3Jp cHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBweXRob24gc2Ny aXB0cyIKKworaWYgIVtydW50b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJD YW5ub3QgcnVuIHRvIG1haW4uIgorICAgIHJldHVybiAwCit9CisKKyMgcmV0 dXJuIGFkZHJlc3MgaW4gZHVtbXkgZnJhbWUKKworZ2RiX3Rlc3QgInB5dGhv biBUZXN0RXhwbGljaXRCcmVha3BvaW50KCdpbmNyZWFzZV8xJykiICJCcmVh a3BvaW50LiphdC4qIiBcCisgICAgICAgICAicHJlcGFyZSBUZXN0RXhwbGlj aXRCcmVha3BvaW50IgorZ2RiX3Rlc3QgInByaW50IGluY3JlYXNlXzEoJmkp IiBcCisgICAgICAgICAiXCJGaW5pc2hCcmVha3BvaW50XCIgY2Fubm90IGJl IHNldCBvbiBhIGR1bW15IGZyYW1lLioiIFwKKyAgICAgICAgICJkb24ndCBh bGxvdyBGaW5pc2hCcmVha3BvaW50IG9uIGR1bW15IGZyYW1lcyIKKworIyBy ZXR1cm4gYWRkcmVzcyBpbiBub3JtYWwgZnJhbWUKKworZGVsZXRlX2JyZWFr cG9pbnRzCitnZGJfdGVzdCAicHl0aG9uIFRlc3RFeHBsaWNpdEJyZWFrcG9p bnQoXCJpbmNyZWFzZV8xXCIpIiAiQnJlYWtwb2ludC4qYXQuKiIgXAorICAg ICAgICAgInByZXBhcmUgVGVzdEV4cGxpY2l0QnJlYWtwb2ludCIKK2dkYl90 ZXN0ICJwcmludCBpbmNyZWFzZSgmaSkiIFwKKyAgICAgICAgICJTaW1wbGVG aW5pc2hCcmVha3BvaW50IGluaXQuKlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQg c3RvcC4qVGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgc3RvcHBlZCB3aGls ZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdEQi4qIiBcCisgICAgICAg ICAiRmluaXNoQlAgc3RvcCBhdCBkdXJpbmcgZXhwbGljaXQgZnVuY3Rpb24g Y2FsbCIKKworCisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCB3aGVuIGlu ZmVyaW9yIGV4aXRzCisjCisKK2lmICFbcnVudG8gInRlc3RfZXhlY19leGl0 Il0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byB0ZXN0X2V4ZWNf ZXhpdC4iCisgICAgcmV0dXJuIDAKK30KKworZ2RiX3Rlc3QgInB5dGhvbiBT aW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3RfZnJhbWUoKSkiICJT aW1wbGVGaW5pc2hCcmVha3BvaW50IGluaXQiICJzZXQgRmluaXNoQlAgYWZ0 ZXIgdGhlIGV4aXQoKSIKK2dkYl90ZXN0ICJjb250aW51ZSIgIlNpbXBsZUZp bmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNjb3BlLioiICJjYXRjaCBvdXQgb2Yg c2NvcGUgYWZ0ZXIgZXhpdCIKKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9p bnQgd2hlbiBpbmZlcmlvciBleGVjcworIworCitpZiAhW3J1bnRvICJ0ZXN0 X2V4ZWNfZXhpdCJdIHRoZW4geworICAgIGZhaWwgIkNhbm5vdCBydW4gdG8g dGVzdF9leGVjX2V4aXQuIgorICAgIHJldHVybiAwCit9ICAgICAKKworZ2Ri X3Rlc3Rfbm9fb3V0cHV0ICJzZXQgdmFyIGRvX2V4aXQgPSAwIiAic3dpdGNo IHRvIGV4ZWN2ZSgpIHRlc3QiCitnZGJfdGVzdCAicHl0aG9uIFNpbXBsZUZp bmlzaEJyZWFrcG9pbnQoZ2RiLm5ld2VzdF9mcmFtZSgpKSIgIlNpbXBsZUZp bmlzaEJyZWFrcG9pbnQgaW5pdCIgInNldCBGaW5pc2hCUCBhZnRlciB0aGUg ZXhlYyIKK2dkYl90ZXN0ICJjYXRjaCBleGVjIiAiQ2F0Y2hwb2ludC4qXChl eGVjXCkuKiIgImNhdGNoIGV4ZWMiCitnZGJfdGVzdCAiY29udGludWUiICJT aW1wbGVGaW5pc2hCcmVha3BvaW50IG91dCBvZiBzY29wZS4qIiAiY2F0Y2gg b3V0IG9mIHNjb3BlIGFmdGVyIGV4ZWMiClwgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWZpbmlzaC1icmVha3BvaW50LnB5IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTJhNzMKLS0tIC9kZXYvbnVsbAor KysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQucHkKQEAgLTAsMCArMSw4OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIw MTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisj IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMK KyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0 c3VpdGUuICBJdCB0ZXN0cyBweXRob24gRmluaXNoCisjIEJyZWFrcG9pbnRz LgorCQkKK2NsYXNzIE15RmluaXNoQnJlYWtwb2ludCAoZ2RiLkZpbmlzaEJy ZWFrcG9pbnQpOgorCWRlZiBfX2luaXRfXyhzZWxmLCB2YWwsIGZyYW1lKToK KwkJZ2RiLkZpbmlzaEJyZWFrcG9pbnQuX19pbml0X18gKHNlbGYsIGZyYW1l KQorCQlwcmludCAiTXlGaW5pc2hCcmVha3BvaW50IGluaXQiCisJCXNlbGYu dmFsID0gdmFsCisJCQorCWRlZiBzdG9wKHNlbGYpOgorCQlwcmludCAiTXlG aW5pc2hCcmVha3BvaW50IHN0b3Agd2l0aCAlZCIgJSBpbnQgKHNlbGYudmFs LmRlcmVmZXJlbmNlICgpKQorCQlwcmludCAicmV0dXJuX3ZhbHVlIGlzOiAl ZCIgJSBpbnQgKHNlbGYucmV0dXJuX3ZhbHVlKQorCQlnZGIuZXhlY3V0ZSAo IndoZXJlIDEiKQorCQlyZXR1cm4gVHJ1ZQorCQorCWRlZiBvdXRfb2Zfc2Nv cGUoc2VsZik6CisJCXByaW50ICJNeUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9m IHNjb3BlIgorCitjbGFzcyBUZXN0QnJlYWtwb2ludChnZGIuQnJlYWtwb2lu dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBnZGIuQnJl YWtwb2ludC5fX2luaXRfXyAoc2VsZiwgc3BlYz0idGVzdF8xIiwgaW50ZXJu YWw9MSkKKyAgICAgICAgc2VsZi5zaWxlbnQgPSBUcnVlCisgICAgICAgIHNl bGYuY291bnQgPSAwCisgICAgICAgIHByaW50ICJUZXN0QnJlYWtwb2ludCBp bml0IgorICAgICAgICAKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAJc2Vs Zi5jb3VudCArPSAxCisgICAgCXRyeToKKyAgICAgICAgCVRlc3RGaW5pc2hC cmVha3BvaW50IChnZGIubmV3ZXN0X2ZyYW1lICgpLCBzZWxmLmNvdW50KQor ICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAJcHJp bnQgZQorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgVGVzdEZpbmlz aEJyZWFrcG9pbnQgKGdkYi5GaW5pc2hCcmVha3BvaW50KToKKyAgICBkZWYg X19pbml0X18gKHNlbGYsIGZyYW1lLCBjb3VudCk6CisgICAgCXNlbGYuY291 bnQgPSBjb3VudAorICAgICAgICBnZGIuRmluaXNoQnJlYWtwb2ludC5fX2lu aXRfXyAoc2VsZiwgZnJhbWUsIGludGVybmFsPTEpCisgICAgICAgIAorICAg ICAgICAKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgcHJpbnQgIi0t PiIsIHNlbGYubnVtYmVyCisgICAgICAgIGlmIChzZWxmLmNvdW50ID09IDMp OgorICAgICAgICAgICAgcHJpbnQgInRlc3Qgc3RvcDogJWQiICUgc2VsZi5j b3VudAorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToK KyAgICAgICAgICAgIHByaW50ICJ0ZXN0IGRvbid0IHN0b3A6ICVkIiAlIHNl bGYuY291bnQKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSAKKyAgICAgICAg CisgICAgCisgICAgZGVmIG91dF9vZl9zY29wZShzZWxmKToKKyAgICAgICAg cHJpbnQgInRlc3QgZGlkbid0IGZpbmlzaDogJWQiICUgc2VsZi5jb3VudAor CitjbGFzcyBUZXN0RXhwbGljaXRCcmVha3BvaW50KGdkYi5CcmVha3BvaW50 KToKKwlkZWYgc3RvcChzZWxmKToKKwkJdHJ5OgorCQkJU2ltcGxlRmluaXNo QnJlYWtwb2ludCAoZ2RiLm5ld2VzdF9mcmFtZSAoKSkKKwkJZXhjZXB0IFZh bHVlRXJyb3IgYXMgZToKKwkJCXByaW50IGUKKwkJcmV0dXJuIEZhbHNlCisK K2NsYXNzIFNpbXBsZUZpbmlzaEJyZWFrcG9pbnQoZ2RiLkZpbmlzaEJyZWFr cG9pbnQpOgorCWRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZSk6CisJCWdkYi5G aW5pc2hCcmVha3BvaW50Ll9faW5pdF9fIChzZWxmLCBmcmFtZSkKKwkJCisJ CXByaW50ICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IGluaXQiCisJCQorCWRl ZiBzdG9wKHNlbGYpOgorCQlwcmludCAiU2ltcGxlRmluaXNoQnJlYWtwb2lu dCBzdG9wIiAKKwkJcmV0dXJuIFRydWUKKwkKKwlkZWYgb3V0X29mX3Njb3Bl KHNlbGYpOgorCQlwcmludCAiU2ltcGxlRmluaXNoQnJlYWtwb2ludCBvdXQg b2Ygc2NvcGUiCisKK3ByaW50ICJQeXRob24gc2NyaXB0IGltcG9ydGVkZCIK ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5p c2gtYnJlYWtwb2ludDIuY2MgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktZmluaXNoLWJyZWFrcG9pbnQyLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmEwZWVhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQy LmNjCkBAIC0wLDAgKzEsNTkgQEAKKy8qIFRoaXMgdGVzdGNhc2UgaXMgcGFy dCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAgIENvcHlyaWdodCAy MDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSAgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorKi8KKworCisjaW5jbHVkZSA8aW9zdHJlYW0+ CisKK3ZvaWQKK3Rocm93X2V4Y2VwdGlvbl8xIChpbnQgZSkKK3sKKyAgdGhy b3cgbmV3IGludCAoZSk7Cit9CisKK3ZvaWQKK3Rocm93X2V4Y2VwdGlvbiAo aW50IGUpCit7CisgIHRocm93X2V4Y2VwdGlvbl8xIChlKTsKK30KKworaW50 CittYWluICh2b2lkKQoreworICBpbnQgaTsKKyAgdHJ5CisgICAgeworICAg ICAgdGhyb3dfZXhjZXB0aW9uXzEgKDEwKTsKKyAgICB9CisgIGNhdGNoIChj b25zdCBpbnQgKmUpCisgICAgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIkV4 Y2VwdGlvbiAjIiA8PCAqZSA8PCBzdGQ6OmVuZGw7CisgICAgfQorICBpICs9 IDE7IC8qIEJyZWFrIGFmdGVyIGV4Y2VwdGlvbiAxLiAgKi8KKworICB0cnkK KyAgICB7CisgICAgICB0aHJvd19leGNlcHRpb24gKDEwKTsKKyAgICB9Cisg IGNhdGNoIChjb25zdCBpbnQgKmUpCisgICAgeworICAgICAgICBzdGQ6OmNl cnIgPDwgIkV4Y2VwdGlvbiAjIiA8PCAqZSA8PCBzdGQ6OmVuZGw7CisgICAg fQorICBpICs9IDE7IC8qIEJyZWFrIGFmdGVyIGV4Y2VwdGlvbiAyLiAgKi8K KworICByZXR1cm4gaTsKK30KZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuZXhwIGIvZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5leHAK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMzZDFlNgot LS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludDIuZXhwCkBAIC0wLDAgKzEsNjUgQEAKKyMg Q29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFy dCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHRlc3RzIHRoZSBtZWNoYW5p c20KKyMgZXhwb3NpbmcgdmFsdWVzIHRvIFB5dGhvbi4KKworaWYgJHRyYWNl bGV2ZWwgdGhlbiB7CisgICAgc3RyYWNlICR0cmFjZWxldmVsCit9CisKK2xv YWRfbGliIGdkYi1weXRob24uZXhwCisKK3NldCB0ZXN0ZmlsZSAicHktZmlu aXNoLWJyZWFrcG9pbnQyIgorc2V0IHNyY2ZpbGUgJHt0ZXN0ZmlsZX0uY2MK K3NldCBiaW5maWxlICR7b2JqZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0K K3NldCBweWZpbGUgICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0u cHkKKworaWYgeyBbZ2RiX2NvbXBpbGUgIiR7c3JjZGlyfS8ke3N1YmRpcn0v JHtzcmNmaWxlfSIgIiR7YmluZmlsZX0iIGV4ZWN1dGFibGUge2RlYnVnIGMr K31dICE9ICIiIH0geworICAgIHVudGVzdGVkICJDb3VsZG4ndCBjb21waWxl ICR7c3JjZmlsZX0iCisgICAgcmV0dXJuIC0xCit9CisKKyMgU3RhcnQgd2l0 aCBhIGZyZXNoIGdkYi4KK2dkYl9leGl0CitnZGJfc3RhcnQKK2dkYl9yZWlu aXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQgJHtiaW5m aWxlfQorCitpZiAhW3J1bnRvX21haW5dIHRoZW4geworICAgIGZhaWwgIkNh bm5vdCBydW4gdG8gbWFpbi4iCisgICAgcmV0dXJuIDAKK30KKworIworIyBD aGVjayBGaW5pc2hCcmVha3BvaW50cyBhZ2FpbnN0IEMrKyBleGNlcHRpb25z CisjCisKK2dkYl9icmVha3BvaW50IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJC cmVhayBhZnRlciBleGNlcHRpb24gMiJdCisKK2dkYl90ZXN0ICJzb3VyY2Ug JHB5ZmlsZSIgIi4qUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBcCisgICAg ICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorICAgICAgICAgCitnZGJf YnJlYWtwb2ludCAidGhyb3dfZXhjZXB0aW9uXzEiCitnZGJfdGVzdCAiY29u dGludWUiICJCcmVha3BvaW50IC4qdGhyb3dfZXhjZXB0aW9uXzEuKiIgInJ1 biB0byBleGNlcHRpb24gMSIKKworZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBs ZW4oZ2RiLmJyZWFrcG9pbnRzKCkpIiAiMyIgImNoZWNrIEJQIGNvdW50Igor Z2RiX3Rlc3QgInB5dGhvbiBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50KGdk Yi5uZXdlc3RfZnJhbWUoKSkiICJpbml0IEV4Y2VwdGlvbkZpbmlzaEJyZWFr cG9pbnQiICJzZXQgRmluaXNoQlAgYWZ0ZXIgdGhlIGV4Y2VwdGlvbiIKK2dk Yl90ZXN0ICJjb250aW51ZSIgIi4qc3RvcHBlZCBhdCBFeGNlcHRpb25GaW5p c2hCcmVha3BvaW50LioiICJjaGVjayBGaW5pc2hCcmVha3BvaW50IGluIGNh dGNoKCkiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGxlbihnZGIuYnJlYWtw b2ludHMoKSkiICIzIiAiY2hlY2sgZmluaXNoIEJQIHJlbW92YWwiCisKK2dk Yl90ZXN0ICJjb250aW51ZSIgIi4qQnJlYWtwb2ludC4qIHRocm93X2V4Y2Vw dGlvbl8xLioiICJjb250aW51ZSB0byBzZWNvbmQgZXhjZXB0aW9uIgorZ2Ri X3Rlc3QgInB5dGhvbiBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50KGdkYi5u ZXdlc3RfZnJhbWUoKSkiICJpbml0IEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9p bnQiICJzZXQgRmluaXNoQlAgYWZ0ZXIgdGhlIGV4Y2VwdGlvbiIKK2dkYl90 ZXN0ICJjb250aW51ZSIgIi4qZXhjZXB0aW9uIGRpZCBub3QgZmluaXNoLioi ICJGaW5pc2hCcmVha3BvaW50IHdpdGggZXhjZXB0aW9uIHRocm93biBub3Qg Y2F1Z2h0IgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWZpbmlzaC1icmVha3BvaW50Mi5weSBiL2dkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIucHkKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZiNjk1NQotLS0gL2Rldi9udWxs CisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJl YWtwb2ludDIucHkKQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5cmlnaHQgKEMp IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0 ZXN0c3VpdGUuICBJdCB0ZXN0cyBweXRob24gRmluaXNoCisjIEJyZWFrcG9p bnRzLgorCitjbGFzcyBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50KGdkYi5G aW5pc2hCcmVha3BvaW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJh bWUpOgorICAgICAgICBnZGIuRmluaXNoQnJlYWtwb2ludC5fX2luaXRfXyAo c2VsZiwgZnJhbWUsIGludGVybmFsPTEpCisgICAgICAgIHNlbGYuc2lsZW50 ID0gVHJ1ZTsKKyAgICAgICAgcHJpbnQgImluaXQgRXhjZXB0aW9uRmluaXNo QnJlYWtwb2ludCIKKyAgICAgICAgCisgICAgZGVmIHN0b3Aoc2VsZik6Cisg ICAgICAgIHByaW50ICJzdG9wcGVkIGF0IEV4Y2VwdGlvbkZpbmlzaEJyZWFr cG9pbnQiCisgICAgICAgIHJldHVybiBUcnVlIAorICAgIAorICAgIGRlZiBv dXRfb2Zfc2NvcGUoc2VsZik6CisgICAgICAgIHByaW50ICJleGNlcHRpb24g ZGlkIG5vdCBmaW5pc2ggLi4uIgorCisKK3ByaW50ICJQeXRob24gc2NyaXB0 IGltcG9ydGVkIgotLSAKMS43LjYuNAoK --20cf307c9fec6634f204b3a57592--