From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 71177 invoked by alias); 26 Mar 2015 03:31:19 -0000 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 Received: (qmail 71159 invoked by uid 89); 26 Mar 2015 03:31:18 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_LOW,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail-ig0-f174.google.com Received: from mail-ig0-f174.google.com (HELO mail-ig0-f174.google.com) (209.85.213.174) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 26 Mar 2015 03:31:12 +0000 Received: by igbud6 with SMTP id ud6so119600345igb.1 for ; Wed, 25 Mar 2015 20:31:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=kDkHZLGmLui2RCXYq0cLnYqwkIh6+uF4UTpHf4mKV9k=; b=ayl+q8h0Cx2gZ1PSNDxNTHQjQKSBLA8c6mckZi3UKaEWZk8ylMTLLSXzfoYhcoN1GG 3kWiypqHV6Si5i11LN6C0uvWJV11OQy7MYKHMcSZM0CX8oTgL3KyxPuoT42yaJt/ZR61 KCEiz9ifdnp0H5jVOUYmN98mpiffTd1/6kG8OywhiM758mUoQhfwSuolDJCgFOq2/jhb Nq3cdYSXWwNQuPD7Z+aMwDdDmWLXgaOj1l1YB4JLjIYuTiJ6ZFHj0CkL4pSZUXnxvDAp QqFk2iFSZbZu7U79pCAEajM5+/kBkQJxuEmaRXwIlBqPHcGE0+WymfjUtJrzXGEIYQBQ bNqQ== X-Gm-Message-State: ALoCoQksPGjxZsRsaAPN+uTzci4rP39VHSdGqxNeOxMcn8+2TLEsdfae4pNeqK+mLPEjAqBsKEyB MIME-Version: 1.0 X-Received: by 10.50.143.42 with SMTP id sb10mr33656679igb.49.1427340669748; Wed, 25 Mar 2015 20:31:09 -0700 (PDT) Received: by 10.64.98.103 with HTTP; Wed, 25 Mar 2015 20:31:09 -0700 (PDT) In-Reply-To: <21776.28787.615626.171251@ruffy2.mtv.corp.google.com> References: <21714.40641.510825.30998@ruffy2.mtv.corp.google.com> <54E71694.1080304@redhat.com> <87ioei31uj.fsf@igalia.com> <87d24p19tt.fsf@igalia.com> <54FD7DAA.7010603@redhat.com> <87twxrncld.fsf@igalia.com> <87ioe1dvu2.fsf@igalia.com> <87sid4atms.fsf@igalia.com> <87r3smado6.fsf@igalia.com> <21776.28787.615626.171251@ruffy2.mtv.corp.google.com> Date: Thu, 26 Mar 2015 03:31:00 -0000 Message-ID: Subject: Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python From: Alexander Smundak To: Doug Evans Cc: Andy Wingo , gdb-patches Content-Type: multipart/mixed; boundary=001a1134b3ce993669051228a517 X-SW-Source: 2015-03/txt/msg00839.txt.bz2 --001a1134b3ce993669051228a517 Content-Type: text/plain; charset=UTF-8 Content-length: 2706 > > diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c ... > Also, we need another class: gdb.FrameID. > I'm not sure whether to implement it in C or Python. The code now accepts any object having 'sp' and possibly 'pc' and 'special' attributes. IMHO there is no need to have a base class for this. > There's some ambiguity on whether the Python error indicator will > or will not be set on return. Currently, sometimes it will and sometimes > it won't. I think the code is such that it won't matter today, but > it would be good to either clear the error or at least document > that the Python error indicator may or may not be set on return > if the result is zero. I have documented which internal functions are set Python error. New revision: gdb/ChangeLog 2015-03-28 Sasha Smundak * Makefile.in (SUBDIR_PYTHON_OBJS): Add py-unwind.o. (SUBDIR_PYTHON_SRCS): Add py-unwind.c. (py-unwind.o): New recipe. * NEWS: mention Python frame unwinding. * data-directory/Makefile.in (PYTHON_FILE_LIST): Add gdb/unwinder.py and gdb/command/unwinder.py * doc/python.texi (Writing a Frame Unwinder in Python): Add section. * python/lib/gdb/__init__.py (packages): Add frame_unwinders list. (execute_unwinders): New function. * python/lib/gdb/command/unwinders.py: New file. * python/lib/gdb/unwinder.py: New file. * python/py-objfile.c (objfile_object): Add frame_unwinders field. (objfpy_dealloc): Decrement frame_unwinders reference count. (objfpy_initialize): Create frame_unwinders list. (objfpy_get_frame_unwinders): New function. (objfpy_set_frame_unwinders): Ditto. (objfile_getset): Add frame_unwinders attribute to Objfile. * python/py-progspace.c (pspace_object): Add frame_unwinders field. (pspy_dealloc): Decrement frame_unwinders reference count. (pspy_initialize): Create frame_unwinders list. (pspy_get_frame_unwinders): New function. (pspy_set_frame_unwinders): Ditto. (pspy_getset): Add frame_unwinders attribute to gdb.Progspace. * python/py-unwind.c: New file. * python/python-internal.h (pspy_get_name_unwinders): New prototype. (objpy_get_frame_unwinders): New prototype. (gdbpy_initialize_unwind): New prototype. * python/python.c (gdbpy_apply_type_printers): Call gdbpy_initialize_unwind. gdb/testsuite/ChangeLog 2015-03-28 Sasha Smundak * gdb.python/py-unwind-maint.c: New file. * gdb.python/py-unwind-maint.exp: New test. * gdb.python/py-unwind-maint.py: New file. * gdb.python/py-unwind.c: New file. * gdb.python/py-unwind.exp: New test. * gdb.python/py-unwind.py: New test. --001a1134b3ce993669051228a517 Content-Type: text/plain; charset=US-ASCII; name="patch9.diff" Content-Disposition: attachment; filename="patch9.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i7plryfq0 Content-length: 91370 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCBkYmFjZTJkLi4wYmQzNzM4IDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0zOTgsNiArMzk4 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktc3ltdGFiLm8gXAog CXB5LXRocmVhZGV2ZW50Lm8gXAogCXB5LXR5cGUubyBcCisJcHktdW53aW5k Lm8gXAogCXB5LXV0aWxzLm8gXAogCXB5LXZhbHVlLm8gXAogCXB5LXZhcm9i ai5vCkBAIC00MzcsNiArNDM4LDcgQEAgU1VCRElSX1BZVEhPTl9TUkNTID0g XAogCXB5dGhvbi9weS1zeW10YWIuYyBcCiAJcHl0aG9uL3B5LXRocmVhZGV2 ZW50LmMgXAogCXB5dGhvbi9weS10eXBlLmMgXAorCXB5dGhvbi9weS11bndp bmQuYyBcCiAJcHl0aG9uL3B5LXV0aWxzLmMgXAogCXB5dGhvbi9weS12YWx1 ZS5jIFwKIAlweXRob24vcHktdmFyb2JqLmMKQEAgLTI2MjIsNiArMjYyNCwx MCBAQCBweS10eXBlLm86ICQoc3JjZGlyKS9weXRob24vcHktdHlwZS5jCiAJ JChDT01QSUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24v cHktdHlwZS5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktdW53aW5kLm86ICQo c3JjZGlyKS9weXRob24vcHktdW53aW5kLmMKKwkkKENPTVBJTEUpICQoUFlU SE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS11bndpbmQuYworCSQo UE9TVENPTVBJTEUpCisKIHB5LXV0aWxzLm86ICQoc3JjZGlyKS9weXRob24v cHktdXRpbHMuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNy Y2RpcikvcHl0aG9uL3B5LXV0aWxzLmMKIAkkKFBPU1RDT01QSUxFKQpkaWZm IC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwppbmRleCBiZGE0YTM1Li5h Yzk5NGQ5IDEwMDY0NAotLS0gYS9nZGIvTkVXUworKysgYi9nZGIvTkVXUwpA QCAtMTIsNiArMTIsNyBAQAogICAqKiBnZGIuT2JqZmlsZSBvYmplY3RzIGhh dmUgYSBuZXcgYXR0cmlidXRlICJ1c2VybmFtZSIsCiAgICAgIHdoaWNoIGlz IHRoZSBuYW1lIG9mIHRoZSBvYmpmaWxlIGFzIHNwZWNpZmllZCBieSB0aGUg dXNlciwKICAgICAgd2l0aG91dCwgZm9yIGV4YW1wbGUsIHJlc29sdmluZyBz eW1saW5rcy4KKyAgKiogWW91IGNhbiBub3cgd3JpdGUgZnJhbWUgdW53aW5k ZXJzIGluIFB5dGhvbi4KIAogKiBOZXcgY29tbWFuZHMKIApkaWZmIC0tZ2l0 IGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluIGIvZ2RiL2RhdGEt ZGlyZWN0b3J5L01ha2VmaWxlLmluCmluZGV4IGMwMWI4NmQuLjMwY2ZkMTcg MTAwNjQ0Ci0tLSBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgor KysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KQEAgLTYyLDEx ICs2MiwxMyBAQCBQWVRIT05fRklMRV9MSVNUID0gXAogCWdkYi9GcmFtZURl Y29yYXRvci5weSBcCiAJZ2RiL3R5cGVzLnB5IFwKIAlnZGIvcHJpbnRpbmcu cHkgXAorCWdkYi91bndpbmRlci5weSBcCiAJZ2RiL3Byb21wdC5weSBcCiAJ Z2RiL3htZXRob2QucHkgXAogCWdkYi9jb21tYW5kL19faW5pdF9fLnB5IFwK IAlnZGIvY29tbWFuZC94bWV0aG9kcy5weSBcCiAJZ2RiL2NvbW1hbmQvZnJh bWVfZmlsdGVycy5weSBcCisJZ2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5IFwK IAlnZGIvY29tbWFuZC90eXBlX3ByaW50ZXJzLnB5IFwKIAlnZGIvY29tbWFu ZC9wcmV0dHlfcHJpbnRlcnMucHkgXAogCWdkYi9jb21tYW5kL3Byb21wdC5w eSBcCmRpZmYgLS1naXQgYS9nZGIvZG9jL3B5dGhvbi50ZXhpIGIvZ2RiL2Rv Yy9weXRob24udGV4aQppbmRleCBkNzI1ZWIwLi5iODM3MDIyIDEwMDY0NAot LS0gYS9nZGIvZG9jL3B5dGhvbi50ZXhpCisrKyBiL2dkYi9kb2MvcHl0aG9u LnRleGkKQEAgLTE0NCw2ICsxNDQsNyBAQCBvcHRpb25hbCBhcmd1bWVudHMg d2hpbGUgc2tpcHBpbmcgb3RoZXJzLiAgRXhhbXBsZToKICogRnJhbWUgRmls dGVyIEFQSTo6ICAgICAgICAgICAgRmlsdGVyaW5nIEZyYW1lcy4KICogRnJh bWUgRGVjb3JhdG9yIEFQSTo6ICAgICAgICAgRGVjb3JhdGluZyBGcmFtZXMu CiAqIFdyaXRpbmcgYSBGcmFtZSBGaWx0ZXI6OiAgICAgIFdyaXRpbmcgYSBG cmFtZSBGaWx0ZXIuCisqIFVud2luZGluZyBGcmFtZXMgaW4gUHl0aG9uOjog IFdyaXRpbmcgZnJhbWUgdW53aW5kZXIuCiAqIFhtZXRob2RzIEluIFB5dGhv bjo6ICAgICAgICAgIEFkZGluZyBhbmQgcmVwbGFjaW5nIG1ldGhvZHMgb2Yg QysrIGNsYXNzZXMuCiAqIFhtZXRob2QgQVBJOjogICAgICAgICAgICAgICAg IFhtZXRob2QgdHlwZXMuCiAqIFdyaXRpbmcgYW4gWG1ldGhvZDo6ICAgICAg ICAgIFdyaXRpbmcgYW4geG1ldGhvZC4KQEAgLTIxNzgsNiArMjE3OSwxNDEg QEAgcHJpbnRlZCBoaWVyYXJjaGljYWxseS4gIEFub3RoZXIgYXBwcm9hY2gg d291bGQgYmUgdG8gY29tYmluZSB0aGUKIG1hcmtlciBpbiB0aGUgaW5saW5l ZCBmcmFtZSwgYW5kIGFsc28gc2hvdyB0aGUgaGllcmFyY2hpY2FsCiByZWxh dGlvbnNoaXAuCiAKK0Bub2RlIFVud2luZGluZyBGcmFtZXMgaW4gUHl0aG9u CitAc3Vic3Vic2VjdGlvbiBVbndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbgor QGNpbmRleCBVbndpbmRpbmcgZnJhbWVzIGluIFB5dGhvbi4KKworSW4gR0RC IHRlcm1pbm9sb2d5IGBgdW53aW5kaW5nJycgaXMgdGhlIHByb2Nlc3Mgb2Yg ZmluZGluZyB0aGUKK3ByZXZpb3VzIGZyYW1lICh0aGF0IGlzLCBjYWxsZXIn cykgZnJvbSB0aGUgY3VycmVudCBvbmUuIEFuIHVud2luZGVyCitoYXMgdGhy ZWUgbWV0aG9kcy4gVGhlIGZpcnN0IG9uZSBjaGVja3MgaWYgaXQgY2FuIGhh bmRsZSBnaXZlbiBmcmFtZQorKGBgc25pZmYnJyBpdCkuIEZvciB0aGUgZnJh bWVzIGl0IGNhbiBzbmlmZiBhbiB1bndpbmRlciBwcm92aWRlcyB0d28KK2Fk ZGl0aW9uYWwgbWV0aG9kczogaXQgY2FuIHJldHVybiBmcmFtZSdzIElELCBh bmQgaXQgY2FuIGZldGNoCityZWdpc3RlcnMgZnJvbSB0aGUgcHJldmlvdXMg ZnJhbWUuIEEgcnVubmluZyBHREIgbWFudGFpbnMgYSBsaXN0IG9mCit0aGUg dW53aW5kZXJzIGFuZCBjYWxscyBlYWNoIHVud2luZGVyJ3Mgc25pZmZlciBp biB0dXJuIHVudGlsIGl0IGZpbmRzCit0aGUgb25lIHRoYXQgcmVjb2duaXpl cyB0aGUgY3VycmVudCBmcmFtZS4gVGhlcmUgaXMgYW4gQVBJIHRvIHJlZ2lz dGVyCithbiB1bndpbmRlci4KKworVGhlIHVud2luZGVycyB0aGF0IGNvbWUg d2l0aCBHREIgaGFuZGxlIHN0YW5kYXJkIGZyYW1lcyBmb3IgZWFjaAorcGxh dGZvcm0gd2hlcmUgR0RCIGlzIHJ1bm5pbmcuIEhvd2V2ZXIsIG1peGVkIGxh bmd1YWdlIGFwcGxpY2F0aW9ucworKGZvciBleGFtcGxlLCBhbmQgYXBwbGlj YXRpb24gcnVubmluZyBKYXZhIFZpcnR1YWwgTWFjaGluZSkgc29tZXRpbWVz Cit1c2UgZnJhbWUgbGF5b3V0cyB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkIGJ5 IHRoZSBHREIgdW53aW5kZXJzLiBZb3UgY2FuCit3cml0ZSBQeXRob24gY29k ZSB0aGF0IGNhbiBoYW5kbGUgc3VjaCBjdXN0b20gZnJhbWVzLgorCitZb3Ug aW1wbGVtZW50IGEgZnJhbWUgdW53aW5kZXIgaW4gUHl0aG9uIGFzIGEgY2xh c3Mgd2l0aCB3aGljaCBoYXMgdHdvCithdHRyaWJ1dGVzLCBAY29kZXtuYW1l fSBhbmQgQGNvZGV7ZW5hYmxlZH0sIHdpdGggb2J2aW91cyBtZWFuaW5ncywg YW5kCithIHNpbmdsZSBtZXRob2QgQGNvZGV7X19jYWxsX199LCB3aGljaCBl eGFtaW5lcyBhIGdpdmVuIGZyYW1lIGFuZAorcmV0dXJucyBhbiBvYmplY3Qg KGFuIGluc3RhbmNlIG9mIGdkYi5VbndpbmRJbmZvIGNsYXNzKSBkZXNjcmli aW5nCitpdC4gSWYgYW4gdW53aW5kZXIgZG9lcyBub3QgcmVjb2duaXplIGEg ZnJhbWUsIGl0IHNob3VsZCByZXR1cm4KK0Bjb2Rle05vbmV9LiBUaGUgY29k ZSBpbiBHREIgdGhhdCBlbmFibGVzIHdyaXRpbmcgdW53aW5kZXJzIGluIFB5 dGhvbgordXNlcyB0aGlzIG9iamVjdCB0byByZXR1cm4gZnJhbWUncyBJRCBh bmQgcHJldmlvdXMgZnJhbWUgcmVnaXN0ZXJzCit3aGVuIEdEQiBjb3JlIGFz a3MgZm9yIHRoZW0uCisKK0BzdWJoZWFkaW5nIFVud2luZGVyIElucHV0CisK K0FuIG9iamVjdCBwYXNzZWQgdG8gYW4gdW53aW5kZXIgKGEgQGNvZGV7UGVu ZGluZ0ZyYW1lfSBpbnN0YW5jZSkKK3Byb3ZpZGVzIGEgbWV0aG9kIHRvIHJl YWQgZnJhbWUncyByZWdpc3RlcnM6CisKK0BkZWZ1biBQZW5kaW5nRnJhbWUu cmVhZF9yZWdpc3RlciAocmVnKQorVGhpcyBtZXRob2QgcmV0dXJucyB0aGUg Y29udGVudHMgb2YgdGhlIHJlZ2lzdGVyIEB2YXJ7cmVnbn0gaW4gdGhlCitm cmFtZSBhcyBhIEBjb2Rle2dkYi5WYWx1ZX0gb2JqZWN0LiBAdmFye3JlZ30g Y2FuIGJlIGVpdGhlciBhIHJlZ2lzdGVyCitudW1iZXIgb3IgYSByZWdpc3Rl ciBuYW1lOyB0aGUgdmFsdWVzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4gVGhl eSBhcmUKK3VzdWFsbHkgZm91bmQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgeHh4 LUBjb2Rle3RkZXAuaH0gZmlsZSBpbiB0aGUgZ2RiCitzb3VyY2UgdHJlZS4K K0BlbmQgZGVmdW4KKworSXQgYWxzbyBwcm92aWRlcyBhIGZhY3RvcnkgbWV0 aG9kIHRvIGNyZWF0ZSBhIGdkYi5VbndpbmRJbmZvIGluc3RhbmNlCit0byBi ZSByZXR1cm5lZCB0byBAdmFsdWV7R0RCTn06CisKK0BkZWZ1biBQZW5kaW5n RnJhbWUuY3JlYXRlX3Vud2luZF9pbmZvIChmcmFtZV9pZCkKK1JldHVybnMg YSBuZXcgQGNvZGV7Z2RiLlVud2luZEluZm99IGluc3RhbmNlIGlkZW50aWZp ZWQgYnkgZ2l2ZW4KK0B2YXJ7ZnJhbWVfaWR9LiAgVGhlIGFyZ3VtZW50IGlz IHVzZWQgdG8gYnVpbGQgQHZhbHVle0dEQk59J3MgZnJhbWUgSUQKK3VzaW5n IG9uZSBvZiB0aGUgQGNvZGV7ZnJhbWVfaWRfYnVpbGRfeHh4fSBmdW5jdGlv bnMuICBUaGUgZXhhY3QKK2Z1bmN0aW9uIHRvIGJlIHVzZWQgaXMgZGV0ZXJt aW5lZCBieSBAdmFye2ZyYW1lX2lkfSdzIGF0dHJpYnV0ZXMuICBJdAorc2hv dWxkIGFsd2F5cyBoYXZlIEBjb2Rle3NwfSBhdHRyaWJ1dGUuIElmIGl0IGhh cyBAY29kZXtwY30gYW5kCitAY29kZXtzcGVjaWFsfSBhdHRyaWJ1dGVzLCB0 aGUgZnJhbWUgSUQgaXMgYnVpbHQgYnkgaW52b2tpbmcKK0Bjb2Rle2ZyYW1l X2J1aWxkX2lkX3NwZWNpYWwgKGZyYW1lX2lkLnNwLCBmcmFtZV9pZC5wYywK K2ZyYW1lX2lkLnNwZWNpYWwpfS4gSWYgaXQgaGFzIG9ubHkgQGNvZGV7cGN9 IGF0dHJpYnV0ZSwgdGhlIGZyYW1lIElECitpcyBidWlsdCBieSBpbnZva2lu ZyBAY29kZXtmcmFtZV9idWlsZF9pZCAoZnJhbWVfaWQuc3AsIGZyYW1lX2lk LnBjKX0KKyh0aGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBjYXNlKS4gRmluYWxs eSwgaWYgbmVpdGhlciBAY29kZXtwY30gbm9yCitAY29kZXtzcGVjaWFsfSBh cmUgYXZhaWxhYmxlLCB0aGUgZnJhbWUgSUQgaXMgYnVpbHQgYnkgaW52b2tp bmcKK0Bjb2Rle2ZyYW1lX2J1aWxkX2lkX3dpbGQgKGZyYW1lX2lkLnNwKX0u IFRoZSBhdHRyaWJ1dGUgdmFsdWVzIHNob3VsZAorYmUgQGNvZGV7Z2RiLlZh bHVlfSBvYmplY3RzLgorQGVuZCBkZWZ1bgorCitAc3ViaGVhZGluZyBVbndp bmRlciBPdXRwdXQ6IFVud2luZEluZm8KKworQSBAY29kZXtnZGIuVW53aW5k SW5mb30gb2JqZWN0IGNhbiBiZSBjb25zdHJ1Y3RlZCBieSBvbmUgb2YgdGhl CittZXRob2RzIGRlc2NyaWJlZCBhYm92ZS4gVXNlIHRoZSBmb2xsb3dpbmcg bWV0aG9kIHRvIHNldCB0aGUgY2FsbGVyCitmcmFtZSdzIHJlZ2lzdGVyczoK KworQGRlZnVuIGdkYi5VbndpbmRJbmZvLmFkZF9zYXZlZF9yZWdpc3RlciAo cmVnLCB2YWx1ZSkKK0B2YXJ7cmVnfSBpZGVudGlmaWVzIHRoZSByZWdpc3Rl ci4gSXQgY2FuIGJlIGEgbnVtYmVyIG9yIGEgbmFtZSwganVzdAorYXMgZm9y IHRoZSBAY29kZXtQZW5kaW5nRnJhbWUucmVhZF9yZWdpc3Rlcn0gbWV0aG9k IGFib3ZlLiBAdmFye3ZhbHVlfQoraXMgYSByZWdpc3RlciB2YWx1ZSAoYSBA Y29kZXtnZGIuVmFsdWV9IG9iamVjdCkuCitAZW5kIGRlZnVuCisKK0BzdWJo ZWFkaW5nIFVud2luZGVyIFNrZWxldG9uIENvZGUKKworR0RCIGNvbWVzIHdp dGggdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZSBiYXNlIEBjb2Rle1Vud2lu ZGVyfSBjbGFzcy4KK0Rlcml2ZSB5b3VyIHVud2luZGVyIGNsYXNzIGZyb20g aXQgYW5kIHN0cnVjdHVyZSB0aGUgY29kZSBhcyBmb2xsb3dzOgorCitAc21h bGxleGFtcGxlCitmcm9tIGdkYi51bndpbmRlcnMgaW1wb3J0IFVud2luZGVy CisKK2NsYXNzIEZyYW1lSWQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o c2VsZiwgc3AsIHBjKToKKyAgICAgICAgc2VsZi5zcCA9IHNwCisgICAgICAg IHNlbGYucGMgPSBwYworCisKK2NsYXNzIE15VW53aW5kZXIoVW53aW5kZXIp OgorICAgIGRlZiBfX2luaXRfXyguLi4uKToKKyAgICAgICAgc3VwZShNeVVu d2luZGVyLCBzZWxmKS5fX2luaXRfX18oPGV4cGVjdHMgdW53aW5kZXIgbmFt ZSBhcmd1bWVudD4pCisKKyAgICBkZWYgX19jYWxsX18ocGVuZGluZ19mcmFt ZSk6CisgICAgICAgIGlmIG5vdCA8d2UgcmVjb2duaXplIGZyYW1lPjoKKyAg ICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgQ3JlYXRlIFVud2lu ZEluZm8uIFVzdWFsbHkgdGhlIGZyYW1lIGlzIGlkZW50aWZpZWQgYnkgc3Rh Y2sgcG9pbnRlcgorICAgICAgICAjIGFuZCBwcm9ncmFtIGNvdW50ZXIuCisg ICAgICAgIHNwID0gcGVuZGluZ19mcmFtZS5yZWFkX3JlZ2lzdGVyKDxTUCBu dW1iZXI+KQorICAgICAgICBwYyA9IHBlbmRpbmdfZnJhbWUucmVhZF9yZWdp c3Rlcig8UEMgbnVtYmVyPikKKyAgICAgICAgdW53aW5kX2luZm8gPSBwZW5k aW5nX2ZyYW1lLmNyZWF0ZV91bndpbmRfaW5mbyhGcmFtZUlkKHNwLCBwYykp CisKKyAgICAgICAgIyBGaW5kIHRoZSB2YWx1ZXMgb2YgdGhlIHJlZ2lzdGVy cyBpbiB0aGUgY2FsbGVyJ3MgZnJhbWUgYW5kIAorICAgICAgICAjIHNhdmUg dGhlbSBpbiB0aGUgcmVzdWx0OgorICAgICAgICB1bndpbmRfaW5mby5hZGRf c2F2ZWRfcmVnaXN0ZXIoPHJlZ2lzdGVyPiwgPHZhbHVlPikKKyAgICAgICAg Li4uLgorCisgICAgICAgICMgUmV0dXJuIHRoZSByZXN1bHQ6CisgICAgICAg IHJldHVybiB1bndpbmRfaW5zdGFuY2UKKworQGVuZCBzbWFsbGV4YW1wbGUK KworQHN1YmhlYWRpbmcgUmVnaXN0ZXJpbmcgYSBVbndpbmRlcgorCitBbiBv YmplY3QgZmlsZSwgYSBwcm9ncmFtIHNwYWNlLCBhbmQgdGhlIEB2YWx1ZXtH REJOfSBwcm9wZXIgY2FuIGhhdmUKK3Vud2luZGVycyByZWdpc3RlcmVkIHdp dGggaXQuCisKK1RoZSBAY29kZXtnZGIudW53aW5kZXJzfSBtb2R1bGUgcHJv dmlkZXMgdGhlIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGEKK3Vud2luZGVyOgor CitAZGVmdW4gZ2RiLnVud2luZGVyLnJlZ2lzdGVyX3Vud2luZGVyIChsb2N1 cywgdW53aW5kZXIsIHJlcGxhY2U9RmFsc2UpCitAdmFye2xvY3VzfSBpcyBz cGVjaWZpZXMgYW4gb2JqZWN0IGZpbGUgb3IgYSBwcm9ncmFtIHNwYWNlIHRv IHdoaWNoCitAdmFye3Vud2luZGVyfSBpcyBhZGRlZC4gUGFzc2luZyBAY29k ZXtOb25lfSBvciBAY29kZXtnZGJ9IGFkZHMKK0B2YXJ7dW53aW5kZXJ9IHRv IHRoZSBAdmFsdWV7R0RCTn0ncyBnbG9iYWwgdW53aW5kZXIgbGlzdC4gIFRo ZSBuZXdseQorYWRkZWQgQHZhcnt1bndpbmRlcn0gd2lsbCBiZSBjYWxsZWQg YmVmb3JlIGFueSBvdGhlciB1bndpbmRlciBmcm9tIHRoZQorc2FtZSBsb2N1 cy4gIFR3byB1bndpbmRlcnMgaW4gdGhlIHNhbWUgbG9jdXMgY2Fubm90IGhh dmUgdGhlIHNhbWUKK25hbWUuIEFuIGF0dGVtcHQgdG8gYWRkIGEgdW53aW5k ZXIgd2l0aCBhbHJlYWR5IGV4aXN0aW5nIG5hbWUgcmFpc2VzIGFuCitleGNl cHRpb24gdW5sZXNzIEB2YXJ7cmVwbGFjZX0gaXMgQGNvZGV7VHJ1ZX0sIGlu IHdoaWNoIGNhc2UgdGhlIG9sZAordW53aW5kZXIgaXMgZGVsZXRlZC4KK0Bl bmQgZGVmdW4KKworQHN1YmhlYWRpbmcgVW53aW5kZXIgUHJlY2VkZW5jZQor CitAdmFsdWV7R0RCTn0gZmlyc3QgY2FsbHMgdGhlIHVud2luZGVycyBmcm9t IGFsbCB0aGUgb2JqZWN0IGZpbGVzIGluIG5vCitwYXJ0aWN1bGFyIG9yZGVy LCB0aGVuIHRoZSB1bndpbmRlcnMgZnJvbSB0aGUgY3VycmVudCBwcm9ncmFt IHNwYWNlLAorYW5kIGZpbmFsbHkgdGhlIHVud2luZGVycyBmcm9tIEB2YWx1 ZXtHREJOfS4KKwogQG5vZGUgWG1ldGhvZHMgSW4gUHl0aG9uCiBAc3Vic3Vi c2VjdGlvbiBYbWV0aG9kcyBJbiBQeXRob24KIEBjaW5kZXggeG1ldGhvZHMg aW4gUHl0aG9uCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvX19p bml0X18ucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKaW5k ZXggOTJiMDZmMi4uZmQyYTIxNSAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9s aWIvZ2RiL19faW5pdF9fLnB5CisrKyBiL2dkYi9weXRob24vbGliL2dkYi9f X2luaXRfXy5weQpAQCAtNzEsNiArNzEsNDIgQEAgdHlwZV9wcmludGVycyA9 IFtdCiB4bWV0aG9kcyA9IFtdCiAjIEluaXRpYWwgZnJhbWUgZmlsdGVycy4K IGZyYW1lX2ZpbHRlcnMgPSB7fQorIyBJbml0aWFsIGZyYW1lIHVud2luZGVy cy4KK2ZyYW1lX3Vud2luZGVycyA9IFtdCisKK2RlZiBleGVjdXRlX3Vud2lu ZGVycyhwZW5kaW5nX2ZyYW1lKToKKyAgICAiIiJJbnRlcm5hbCBmdW5jdGlv biBjYWxsZWQgZnJvbSBHREIgdG8gZXhlY3V0ZSBhbGwgdW53aW5kZXJzLgor CisgICAgUnVucyBlYWNoIGN1cnJlbnRseSBlbmFibGVkIHVud2luZGVyIHVu dGlsIGl0IGZpbmRzIHRoZSBvbmUgdGhhdAorICAgIGNhbiB1bndpbmQgZ2l2 ZW4gZnJhbWUuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBlbmRpbmdf ZnJhbWU6IGdkYi5QZW5kaW5nRnJhbWUgaW5zdGFuY2UuCisgICAgUmV0dXJu czoKKyAgICAgICAgVW53aW5kSW5mbyBpbnN0YW5jZSBvciBOb25lLgorICAg ICIiIgorICAgIGZvciBvYmpmaWxlIGluIG9iamZpbGVzKCk6CisgICAgICAg IGZvciB1bndpbmRlciBpbiBvYmpmaWxlLmZyYW1lX3Vud2luZGVyczoKKyAg ICAgICAgICAgIGlmIHVud2luZGVyLmVuYWJsZWQ6CisgICAgICAgICAgICAg ICAgdW53aW5kX2luZm8gPSB1bndpbmRlcihwZW5kaW5nX2ZyYW1lKQorICAg ICAgICAgICAgICAgIGlmIHVud2luZF9pbmZvIGlzIG5vdCBOb25lOgorICAg ICAgICAgICAgICAgICAgICByZXR1cm4gdW53aW5kX2luZm8KKworICAgIGN1 cnJlbnRfcHJvZ3NwYWNlID0gX2dkYi5jdXJyZW50X3Byb2dzcGFjZSgpCisg ICAgZm9yIHVud2luZGVyIGluIGN1cnJlbnRfcHJvZ3NwYWNlLmZyYW1lX3Vu d2luZGVyczoKKyAgICAgICAgaWYgdW53aW5kZXIuZW5hYmxlZDoKKyAgICAg ICAgICAgIHVud2luZF9pbmZvID0gdW53aW5kZXIocGVuZGluZ19mcmFtZSkK KyAgICAgICAgICAgIGlmIHVud2luZF9pbmZvIGlzIG5vdCBOb25lOgorICAg ICAgICAgICAgICAgIHJldHVybiB1bndpbmRfaW5mbworCisgICAgZm9yIHVu d2luZGVyIGluIGZyYW1lX3Vud2luZGVyczoKKyAgICAgICAgaWYgdW53aW5k ZXIuZW5hYmxlZDoKKyAgICAgICAgICAgIHVud2luZF9pbmZvID0gdW53aW5k ZXIocGVuZGluZ19mcmFtZSkKKyAgICAgICAgICAgIGlmIHVud2luZF9pbmZv IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiB1bndpbmRf aW5mbworCisgICAgcmV0dXJuIE5vbmUKKwogCiAjIENvbnZlbmllbmNlIHZh cmlhYmxlIHRvIEdEQidzIHB5dGhvbiBkaXJlY3RvcnkKIFBZVEhPTkRJUiA9 IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQpk aWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvdW53aW5k ZXJzLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvdW53aW5kZXJz LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMTg5 ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0aG9uL2xpYi9nZGIvY29t bWFuZC91bndpbmRlcnMucHkKQEAgLTAsMCArMSwxOTggQEAKKyMgVW53aW5k ZXIgY29tbWFuZHMuCisjIENvcHlyaWdodCAyMDE1IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQg Z2RiCitpbXBvcnQgcmUKKworCitkZWYgdmFsaWRhdGVfcmVnZXhwKGV4cCwg aWRzdHJpbmcpOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHJlLmNvbXBp bGUoZXhwKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgcmFp c2UgU3ludGF4RXJyb3IoIkludmFsaWQgJXMgcmVnZXhwOiAlcy4iICUgKGlk c3RyaW5nLCBleHApKQorCisKK2RlZiBwYXJzZV91bndpbmRlcl9jb21tYW5k X2FyZ3MoYXJnKToKKyAgICAiIiJJbnRlcm5hbCB1dGlsaXR5IHRvIHBhcnNl IHVud2luZGVyIGNvbW1hbmQgYXJndi4KKworICAgIEFyZ3VtZW50czoKKyAg ICAgICAgYXJnOiBUaGUgYXJndW1lbnRzIHRvIHRoZSBjb21tYW5kLiBUaGUg Zm9ybWF0IGlzOgorICAgICAgICAgICAgIFtsb2N1cy1yZWdleHAgW25hbWUt cmVnZXhwXV0KKworICAgIFJldHVybnM6CisgICAgICAgIEEgMi10dXBsZSBv ZiBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb25zLgorCisgICAgUmFpc2Vz OgorICAgICAgICBTeW50YXhFcnJvcjogYW4gZXJyb3IgcHJvY2Vzc2luZyBB UkcKKyAgICAiIiIKKworICAgIGFyZ3YgPSBnZGIuc3RyaW5nX3RvX2FyZ3Yo YXJnKQorICAgIGFyZ2MgPSBsZW4oYXJndikKKyAgICBpZiBhcmdjID4gMjoK KyAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIlRvbyBtYW55IGFyZ3VtZW50 cy4iKQorICAgIGxvY3VzX3JlZ2V4cCA9ICIiCisgICAgbmFtZV9yZWdleHAg PSAiIgorICAgIGlmIGFyZ2MgPj0gMToKKyAgICAgICAgbG9jdXNfcmVnZXhw ID0gYXJndlswXQorICAgICAgICBpZiBhcmdjID49IDI6CisgICAgICAgICAg ICBuYW1lX3JlZ2V4cCA9IGFyZ3ZbMV0KKyAgICByZXR1cm4gKHZhbGlkYXRl X3JlZ2V4cChsb2N1c19yZWdleHAsICJsb2N1cyIpLAorICAgICAgICAgICAg dmFsaWRhdGVfcmVnZXhwKG5hbWVfcmVnZXhwLCAidW53aW5kZXIiKSkKKwor CitjbGFzcyBJbmZvVW53aW5kZXIoZ2RiLkNvbW1hbmQpOgorICAgICIiIkdE QiBjb21tYW5kIHRvIGxpc3QgdW53aW5kZXJzLgorCisgICAgVXNhZ2U6IGlu Zm8gdW53aW5kZXIgW2xvY3VzLXJlZ2V4cCBbbmFtZS1yZWdleHBdXQorCisg ICAgTE9DVVMtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNo aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUKKyAgICB1bndpbmRlci4gIElmIGl0 IGlzIG9taXR0ZWQsIGFsbCByZWdpc3RlcmVkIHVud2luZGVycyBmcm9tIGFs bAorICAgIGxvY2kgYXJlIGxpc3RlZC4gIEEgbG9jdXMgY2FuIGJlICdnbG9i YWwnLCAncHJvZ3NwYWNlJyB0byBsaXN0CisgICAgdGhlIHVud2luZGVycyBm cm9tIHRoZSBjdXJyZW50IHByb2dzcGFjZSwgb3IgYSByZWd1bGFyIGV4cHJl c3Npb24KKyAgICBtYXRjaGluZyBmaWxlbmFtZXMgb2Ygb2JqZmlsZXMuCisK KyAgICBOQU1FLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBm aWx0ZXIgdW53aW5kZXIgbmFtZXMuICBJZgorICAgIHRoaXMgb21pdHRlZCBm b3IgYSBzcGVjaWZpZWQgbG9jdXMsIHRoZW4gYWxsIHJlZ2lzdGVyZWQgdW53 aW5kZXJzCisgICAgaW4gdGhlIGxvY3VzIGFyZSBsaXN0ZWQuCisgICAgIiIi CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKElu Zm9VbndpbmRlciwgc2VsZikuX19pbml0X18oImluZm8gdW53aW5kZXIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn ZGIuQ09NTUFORF9EQVRBKQorCisgICAgZGVmIGxpc3RfdW53aW5kZXJzKHNl bGYsIHRpdGxlLCB1bndpbmRlcnMsIG5hbWVfcmUpOgorICAgICAgICAiIiJM aXN0cyB0aGUgdW53aW5kZXJzIHdob3NlIG5hbWUgbWF0Y2hlcyByZWdleHAu CisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICAgdGl0bGU6IFRo ZSBsaW5lIHRvIHByaW50IGJlZm9yZSB0aGUgbGlzdC4KKyAgICAgICAgICAg IHVud2luZGVyczogVGhlIGxpc3Qgb2YgdGhlIHVud2luZGVycy4KKyAgICAg ICAgICAgIG5hbWVfcmU6IHVud2luZGVyIG5hbWUgZmlsdGVyLgorICAgICAg ICAiIiIKKyAgICAgICAgaWYgbm90IHVud2luZGVyczoKKyAgICAgICAgICAg IHJldHVybgorICAgICAgICBwcmludCB0aXRsZQorICAgICAgICBmb3IgdW53 aW5kZXIgaW4gdW53aW5kZXJzOgorICAgICAgICAgICAgaWYgbmFtZV9yZS5t YXRjaCh1bndpbmRlci5uYW1lKToKKyAgICAgICAgICAgICAgICBwcmludCgi ICAlcyVzIiAlICgiIiBpZiB1bndpbmRlci5lbmFibGVkIGVsc2UgIltkaXNh YmxlZF0gIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bndpbmRlci5uYW1lKSkKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBm cm9tX3R0eSk6CisgICAgICAgIGxvY3VzX3JlLCBuYW1lX3JlID0gcGFyc2Vf dW53aW5kZXJfY29tbWFuZF9hcmdzKGFyZykKKyAgICAgICAgaWYgbG9jdXNf cmUubWF0Y2goImdsb2JhbCIpOgorICAgICAgICAgICAgc2VsZi5saXN0X3Vu d2luZGVycygiR2xvYmFsOiIsIGdkYi5mcmFtZV91bndpbmRlcnMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfcmUpCisgICAgICAg IGlmIGxvY3VzX3JlLm1hdGNoKCJwcm9nc3BhY2UiKToKKyAgICAgICAgICAg IGNwID0gZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkKKyAgICAgICAgICAgIHNl bGYubGlzdF91bndpbmRlcnMoIlByb2dzcGFjZSAlczoiICUgY3AuZmlsZW5h bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwLmZyYW1l X3Vud2luZGVycywgbmFtZV9yZSkKKyAgICAgICAgZm9yIG9iamZpbGUgaW4g Z2RiLm9iamZpbGVzKCk6CisgICAgICAgICAgICBpZiBsb2N1c19yZS5tYXRj aChvYmpmaWxlLmZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLmxp c3RfdW53aW5kZXJzKCJPYmpmaWxlICVzOiIgJSBvYmpmaWxlLmZpbGVuYW1l LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZmls ZS5mcmFtZV91bndpbmRlcnMsIG5hbWVfcmUpCisKKworZGVmIGRvX2VuYWJs ZV91bndpbmRlcjEodW53aW5kZXJzLCBuYW1lX3JlLCBmbGFnKToKKyAgICAi IiJFbmFibGUvZGlzYWJsZSB1bndpbmRlcnMgd2hvc2UgbmFtZXMgbWF0Y2gg Z2l2ZW4gcmVnZXguCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHVud2lu ZGVyczogVGhlIGxpc3Qgb2YgdW53aW5kZXJzLgorICAgICAgICBuYW1lX3Jl OiBVbndpbmRlciBuYW1lIGZpbHRlci4KKyAgICAgICAgZmxhZzogRW5hYmxl L2Rpc2FibGUuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBUaGUgbnVtYmVy IG9mIHVud2luZGVycyBhZmZlY3RlZC4KKyAgICAiIiIKKyAgICB0b3RhbCA9 IDAKKyAgICBmb3IgdW53aW5kZXIgaW4gdW53aW5kZXJzOgorICAgICAgICBp ZiBuYW1lX3JlLm1hdGNoKHVud2luZGVyLm5hbWUpOgorICAgICAgICAgICAg dW53aW5kZXIuZW5hYmxlZCA9IGZsYWcKKyAgICAgICAgICAgIHRvdGFsICs9 IDEKKyAgICByZXR1cm4gdG90YWwKKworCitkZWYgZG9fZW5hYmxlX3Vud2lu ZGVyKGFyZywgZmxhZyk6CisgICAgIiIiRW5hYmxlL2Rpc2FibGUgdW53aW5k ZXIocykuIiIiCisgICAgKGxvY3VzX3JlLCBuYW1lX3JlKSA9IHBhcnNlX3Vu d2luZGVyX2NvbW1hbmRfYXJncyhhcmcpCisgICAgdG90YWwgPSAwCisgICAg aWYgbG9jdXNfcmUubWF0Y2goImdsb2JhbCIpOgorICAgICAgICB0b3RhbCAr PSBkb19lbmFibGVfdW53aW5kZXIxKGdkYi5mcmFtZV91bndpbmRlcnMsIG5h bWVfcmUsIGZsYWcpCisgICAgaWYgbG9jdXNfcmUubWF0Y2goInByb2dzcGFj ZSIpOgorICAgICAgICB0b3RhbCArPSBkb19lbmFibGVfdW53aW5kZXIxKGdk Yi5jdXJyZW50X3Byb2dzcGFjZSgpLmZyYW1lX3Vud2luZGVycywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3JlLCBmbGFn KQorICAgIGZvciBvYmpmaWxlIGluIGdkYi5vYmpmaWxlcygpOgorICAgICAg ICBpZiBsb2N1c19yZS5tYXRjaChvYmpmaWxlLmZpbGVuYW1lKToKKyAgICAg ICAgICAgIHRvdGFsICs9IGRvX2VuYWJsZV91bndpbmRlcjEob2JqZmlsZS5m cmFtZV91bndpbmRlcnMsIG5hbWVfcmUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZsYWcpCisgICAgcHJpbnQoIiVkIHVu d2luZGVyJXMgJXMiICUgKHRvdGFsLCAiIiBpZiB0b3RhbCA9PSAxIGVsc2Ug InMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5hYmxl ZCIgaWYgZmxhZyBlbHNlICJkaXNhYmxlZCIpKQorCisKK2NsYXNzIEVuYWJs ZVVud2luZGVyKGdkYi5Db21tYW5kKToKKyAgICAiIiJHREIgY29tbWFuZCB0 byBlbmFibGUgdW53aW5kZXJzLgorCisgICAgVXNhZ2U6IGVuYWJsZSB1bndp bmRlciBbbG9jdXMtcmVnZXhwIFtuYW1lLXJlZ2V4cF1dCisKKyAgICBMT0NV Uy1SRUdFWFAgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gc3BlY2lmeWluZyB0 aGUgdW53aW5kZXJzIHRvCisgICAgZW5hYmxlLiAgSXQgY2FuICdnbG9iYWwn LCAncHJvZ3NwYWNlJywgb3IgdGhlIG5hbWUgb2YgYW4gb2JqZmlsZQorICAg IHdpdGhpbiB0aGF0IHByb2dzcGFjZS4KKworICAgIE5BTUVfUkVHRVhQIGlz IGEgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciB1bndpbmRlciBuYW1l cy4gIElmCisgICAgdGhpcyBvbWl0dGVkIGZvciBhIHNwZWNpZmllZCBsb2N1 cywgdGhlbiBhbGwgcmVnaXN0ZXJlZCB1bndpbmRlcnMKKyAgICBpbiB0aGUg bG9jdXMgYXJlIGFmZmVjdGVkLgorCisgICAgIiIiCisKKyAgICBkZWYgX19p bml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKEVuYWJsZVVud2luZGVyLCBz ZWxmKS5fX2luaXRfXygiZW5hYmxlIHVud2luZGVyIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5E X1NUQUNLKQorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5 KToKKyAgICAgICAgIiIiR0RCIGNhbGxzIHRoaXMgdG8gcGVyZm9ybSB0aGUg Y29tbWFuZC4iIiIKKyAgICAgICAgZG9fZW5hYmxlX3Vud2luZGVyKGFyZywg VHJ1ZSkKKworCitjbGFzcyBEaXNhYmxlVW53aW5kZXIoZ2RiLkNvbW1hbmQp OgorICAgICIiIkdEQiBjb21tYW5kIHRvIGRpc2FibGUgdGhlIHNwZWNpZmll ZCB1bndpbmRlci4KKworICAgIFVzYWdlOiBkaXNhYmxlIHVud2luZGVyIFts b2N1cy1yZWdleHAgW25hbWUtcmVnZXhwXV0KKworICAgIExPQ1VTLVJFR0VY UCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzcGVjaWZ5aW5nIHRoZSB1bndp bmRlcnMgdG8KKyAgICBkaXNhYmxlLiAgSXQgY2FuICdnbG9iYWwnLCAncHJv Z3NwYWNlJywgb3IgdGhlIG5hbWUgb2YgYW4gb2JqZmlsZQorICAgIHdpdGhp biB0aGF0IHByb2dzcGFjZS4KKworICAgIE5BTUVfUkVHRVhQIGlzIGEgcmVn dWxhciBleHByZXNzaW9uIHRvIGZpbHRlciB1bndpbmRlciBuYW1lcy4gIElm CisgICAgdGhpcyBvbWl0dGVkIGZvciBhIHNwZWNpZmllZCBsb2N1cywgdGhl biBhbGwgcmVnaXN0ZXJlZCB1bndpbmRlcnMKKyAgICBpbiB0aGUgbG9jdXMg YXJlIGFmZmVjdGVkLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18o c2VsZik6CisgICAgICAgIHN1cGVyKERpc2FibGVVbndpbmRlciwgc2VsZiku X19pbml0X18oImRpc2FibGUgdW53aW5kZXIiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX1NU QUNLKQorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToK KyAgICAgICAgIiIiR0RCIGNhbGxzIHRoaXMgdG8gcGVyZm9ybSB0aGUgY29t bWFuZC4iIiIKKyAgICAgICAgZG9fZW5hYmxlX3Vud2luZGVyKGFyZywgRmFs c2UpCisKKworZGVmIHJlZ2lzdGVyX3Vud2luZGVyX2NvbW1hbmRzKCk6Cisg ICAgIiIiSW5zdGFsbHMgdGhlIHVud2luZGVyIGNvbW1hbmRzLiIiIgorICAg IEluZm9VbndpbmRlcigpCisgICAgRW5hYmxlVW53aW5kZXIoKQorICAgIERp c2FibGVVbndpbmRlcigpCisKKworcmVnaXN0ZXJfdW53aW5kZXJfY29tbWFu ZHMoKQpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL3Vud2luZGVy LnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL3Vud2luZGVyLnB5Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMTU4OTQKLS0tIC9kZXYv bnVsbAorKysgYi9nZGIvcHl0aG9uL2xpYi9nZGIvdW53aW5kZXIucHkKQEAg LTAsMCArMSw5MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyIi IlVud2luZGVyIGNsYXNzIGFuZCByZWdpc3Rlcl91bndpbmRlciBmdW5jdGlv bi4iIiIKKworaW1wb3J0IGdkYgorCisKK2NsYXNzIFVud2luZGVyKG9iamVj dCk6CisgICAgIiIiQmFzZSBjbGFzcyAob3IgYSB0ZW1wbGF0ZSkgZm9yIGZy YW1lIHVud2luZGVycyB3cml0dGVuIGluIFB5dGhvbi4KKworICAgIEFuIHVu d2luZGVyIGhhcyBhIHNpbmdsZSBtZXRob2QgX19jYWxsX18gYW5kIHRoZSBh dHRyaWJ1dGVzCisgICAgZGVzY3JpYmVkIGJlbG93LgorCisgICAgQXR0cmli dXRlczoKKyAgICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIHVud2luZGVy LgorICAgICAgICBlbmFibGVkOiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0 aGVyIHRoZSB1bndpbmRlciBpcyBlbmFibGVkLgorICAgICIiIgorCisgICAg ZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJDb25zdHJ1 Y3Rvci4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbmFtZTogQW4g aWRlbnRpZnlpbmcgbmFtZSBmb3IgdGhlIHVud2luZGVyLgorICAgICAgICAi IiIKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmVu YWJsZWQgPSBUcnVlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcGVuZGlu Z19mcmFtZSk6CisgICAgICAgICIiIkdEQiBjYWxscyB0aGlzIG1ldGhvZCB0 byB1bndpbmQgYSBmcmFtZS4KKworICAgICAgICBBcmd1bWVudHM6CisgICAg ICAgICAgICBwZW5kaW5nX2ZyYW1lOiBnZGIuUGVuZGluZ0ZyYW1lIGluc3Rh bmNlLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBnZGIuVW53 aW5kSW5mbyBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNl IE5vdEltcGxlbWVudGVkRXJyb3IoIlVud2luZGVyIF9fY2FsbF9fLiIpCisK KworZGVmIHJlZ2lzdGVyX3Vud2luZGVyKGxvY3VzLCB1bndpbmRlciwgcmVw bGFjZT1GYWxzZSk6CisgICAgIiIiUmVnaXN0ZXIgdW53aW5kZXIgaW4gZ2l2 ZW4gbG9jdXMuCisKKyAgICBUaGUgdW53aW5kZXIgaXMgcHJlcGVuZGVkIHRv IHRoZSBsb2N1cydzIHVud2luZGVycyBsaXN0LiBVbndpbmRlcgorICAgIG5h bWUgc2hvdWxkIGJlIHVuaXF1ZS4KKworICAgIEFyZ3VtZW50czoKKyAgICAg ICAgbG9jdXM6IEVpdGhlciBhbiBvYmpmaWxlLCBwcm9nc3BhY2UsIG9yIE5v bmUgKGluIHdoaWNoIGNhc2UKKyAgICAgICAgICAgICAgIHRoZSB1bndpbmRl ciBpcyByZWdpc3RlcmVkIGdsb2JhbGx5KS4KKyAgICAgICAgdW53aW5kZXI6 IEFuIG9iamVjdCBvZiBhIGdkYi5VbndpbmRlciBzdWJjbGFzcworICAgICAg ICByZXBsYWNlOiBJZiBUcnVlLCByZXBsYWNlcyBleGlzdGluZyB1bndpbmRl ciB3aXRoIHRoZSBzYW1lIG5hbWUuCisgICAgICAgICAgICAgICAgIE90aGVy d2lzZSwgcmFpc2VzIGV4Y2VwdGlvbiBpZiB1bndpbmRlciB3aXRoIHRoZSBz YW1lCisgICAgICAgICAgICAgICAgIG5hbWUgYWxyZWFkeSBleGlzdHMuCisK KyAgICBSZXR1cm5zOgorICAgICAgICBOb3RoaW5nLgorCisgICAgUmFpc2Vz OgorICAgICAgICBSdW50aW1lRXJyb3I6IFVud2luZGVyIG5hbWUgaXMgbm90 IHVuaXF1ZS4KKworICAgICIiIgorICAgIGlmIGxvY3VzIGlzIE5vbmU6Cisg ICAgICAgIGlmIGdkYi5wYXJhbWV0ZXIoInZlcmJvc2UiKToKKyAgICAgICAg ICAgIGdkYi53cml0ZSgiUmVnaXN0ZXJpbmcgZ2xvYmFsICVzIHVud2luZGVy IC4uLlxuIiAlIHVud2luZGVyLm5hbWUpCisgICAgICAgIGxvY3VzID0gZ2Ri CisgICAgZWxpZiBpc2luc3RhbmNlKGxvY3VzLCBnZGIuT2JqZmlsZSkgb3Ig aXNpbnN0YW5jZShsb2N1cywgZ2RiLlByb2dzcGFjZSk6CisgICAgICAgIGlm IGdkYi5wYXJhbWV0ZXIoInZlcmJvc2UiKToKKyAgICAgICAgICAgIGdkYi53 cml0ZSgiUmVnaXN0ZXJpbmcgJXMgdW53aW5kZXIgZm9yICVzIC4uLlxuIiAl CisgICAgICAgICAgICAgICAgICAgICAgKHVud2luZGVyLm5hbWUsIGxvY3Vz LmZpbGVuYW1lKSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBUeXBlRXJy b3IoImxvY3VzIHNob3VsZCBiZSBnZGIuT2piZmlsZSBvciBnZGIuUHJvZ3Nw YWNlIikKKworICAgIGkgPSAwCisgICAgZm9yIG5lZWRsZSBpbiBsb2N1cy5m cmFtZV91bndpbmRlcnM6CisgICAgICAgIGlmIG5lZWRsZS5uYW1lID09IHVu d2luZGVyLm5hbWU6CisgICAgICAgICAgICBpZiByZXBsYWNlOgorICAgICAg ICAgICAgICAgIGRlbCBsb2N1cy5mcmFtZV91bndpbmRlcnNbaV0KKyAgICAg ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVy cm9yKCJVbndpbmRlciAlcyBhbHJlYWR5IGV4aXN0cy4iICUgdW53aW5kZXIu bmFtZSkKKyAgICAgICAgaSArPSAxCisgICAgbG9jdXMuZnJhbWVfdW53aW5k ZXJzLmluc2VydCgwLCB1bndpbmRlcikKZGlmZiAtLWdpdCBhL2dkYi9weXRo b24vcHktb2JqZmlsZS5jIGIvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMKaW5k ZXggMTU3ZDIwMC4uYzk1MjhjMyAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9w eS1vYmpmaWxlLmMKKysrIGIvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMKQEAg LTQyLDYgKzQyLDEwIEBAIHR5cGVkZWYgc3RydWN0CiAKICAgLyogVGhlIGZy YW1lIGZpbHRlciBsaXN0IG9mIGZ1bmN0aW9ucy4gICovCiAgIFB5T2JqZWN0 ICpmcmFtZV9maWx0ZXJzOworCisgIC8qIFRoZSBsaXN0IG9mIGZyYW1lIHVu d2luZGVycy4gICovCisgIFB5T2JqZWN0ICpmcmFtZV91bndpbmRlcnM7CisK ICAgLyogVGhlIHR5cGUtcHJpbnRlciBsaXN0LiAgKi8KICAgUHlPYmplY3Qg KnR5cGVfcHJpbnRlcnM7CiAKQEAgLTE4NCw2ICsxODgsNyBAQCBvYmpmcHlf ZGVhbGxvYyAoUHlPYmplY3QgKm8pCiAgIFB5X1hERUNSRUYgKHNlbGYtPmRp Y3QpOwogICBQeV9YREVDUkVGIChzZWxmLT5wcmludGVycyk7CiAgIFB5X1hE RUNSRUYgKHNlbGYtPmZyYW1lX2ZpbHRlcnMpOworICBQeV9YREVDUkVGIChz ZWxmLT5mcmFtZV91bndpbmRlcnMpOwogICBQeV9YREVDUkVGIChzZWxmLT50 eXBlX3ByaW50ZXJzKTsKICAgUHlfWERFQ1JFRiAoc2VsZi0+eG1ldGhvZHMp OwogICBQeV9UWVBFIChzZWxmKS0+dHBfZnJlZSAoc2VsZik7CkBAIC0yMDYs NiArMjExLDEwIEBAIG9iamZweV9pbml0aWFsaXplIChvYmpmaWxlX29iamVj dCAqc2VsZikKICAgaWYgKHNlbGYtPmZyYW1lX2ZpbHRlcnMgPT0gTlVMTCkK ICAgICByZXR1cm4gMDsKIAorICBzZWxmLT5mcmFtZV91bndpbmRlcnMgPSBQ eUxpc3RfTmV3ICgwKTsKKyAgaWYgKHNlbGYtPmZyYW1lX3Vud2luZGVycyA9 PSBOVUxMKQorICAgIHJldHVybiAwOworCiAgIHNlbGYtPnR5cGVfcHJpbnRl cnMgPSBQeUxpc3RfTmV3ICgwKTsKICAgaWYgKHNlbGYtPnR5cGVfcHJpbnRl cnMgPT0gTlVMTCkKICAgICByZXR1cm4gMDsKQEAgLTMxMyw2ICszMjIsNDgg QEAgb2JqZnB5X3NldF9mcmFtZV9maWx0ZXJzIChQeU9iamVjdCAqbywgUHlP YmplY3QgKmZpbHRlcnMsIHZvaWQgKmlnbm9yZSkKICAgcmV0dXJuIDA7CiB9 CiAKKy8qIFJldHVybiB0aGUgZnJhbWUgdW53aW5kZXJzIGF0dHJpYnV0ZSBm b3IgdGhpcyBvYmplY3QgZmlsZS4gICovCisKK1B5T2JqZWN0ICoKK29iamZw eV9nZXRfZnJhbWVfdW53aW5kZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdu b3JlKQoreworICBvYmpmaWxlX29iamVjdCAqc2VsZiA9IChvYmpmaWxlX29i amVjdCAqKSBvOworCisgIFB5X0lOQ1JFRiAoc2VsZi0+ZnJhbWVfdW53aW5k ZXJzKTsKKyAgcmV0dXJuIHNlbGYtPmZyYW1lX3Vud2luZGVyczsKK30KKwor LyogU2V0IHRoaXMgb2JqZWN0IGZpbGUncyBmcmFtZSB1bndpbmRlcnMgbGlz dCB0byBVTldJTkRFUlMuICAqLworCitzdGF0aWMgaW50CitvYmpmcHlfc2V0 X2ZyYW1lX3Vud2luZGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp1bndp bmRlcnMsIHZvaWQgKmlnbm9yZSkKK3sKKyAgUHlPYmplY3QgKnRtcDsKKyAg b2JqZmlsZV9vYmplY3QgKnNlbGYgPSAob2JqZmlsZV9vYmplY3QgKikgbzsK KworICBpZiAoIXVud2luZGVycykKKyAgICB7CisgICAgICBQeUVycl9TZXRT dHJpbmcgKFB5RXhjX1R5cGVFcnJvciwKKwkJICAgICAgIF8oIkNhbm5vdCBk ZWxldGUgdGhlIGZyYW1lIHVud2luZGVycyBhdHRyaWJ1dGUuIikpOworICAg ICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAoIVB5TGlzdF9DaGVjayAo dW53aW5kZXJzKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5 RXhjX1R5cGVFcnJvciwKKwkJICAgICAgIF8oIlRoZSBmcmFtZV91bndpbmRl cnMgYXR0cmlidXRlIG11c3QgYmUgYSBsaXN0LiIpKTsKKyAgICAgIHJldHVy biAtMTsKKyAgICB9CisKKyAgLyogVGFrZSBjYXJlIGluIGNhc2UgdGhlIExI UyBhbmQgUkhTIGFyZSByZWxhdGVkIHNvbWVob3cuICAqLworICB0bXAgPSBz ZWxmLT5mcmFtZV91bndpbmRlcnM7CisgIFB5X0lOQ1JFRiAodW53aW5kZXJz KTsKKyAgc2VsZi0+ZnJhbWVfdW53aW5kZXJzID0gdW53aW5kZXJzOworICBQ eV9YREVDUkVGICh0bXApOworCisgIHJldHVybiAwOworfQorCiAvKiBHZXQg dGhlICd0eXBlX3ByaW50ZXJzJyBhdHRyaWJ1dGUuICAqLwogCiBzdGF0aWMg UHlPYmplY3QgKgpAQCAtNjUxLDYgKzcwMiw4IEBAIHN0YXRpYyBQeUdldFNl dERlZiBvYmpmaWxlX2dldHNldFtdID0KICAgICAiUHJldHR5IHByaW50ZXJz LiIsIE5VTEwgfSwKICAgeyAiZnJhbWVfZmlsdGVycyIsIG9iamZweV9nZXRf ZnJhbWVfZmlsdGVycywKICAgICBvYmpmcHlfc2V0X2ZyYW1lX2ZpbHRlcnMs ICJGcmFtZSBGaWx0ZXJzLiIsIE5VTEwgfSwKKyAgeyAiZnJhbWVfdW53aW5k ZXJzIiwgb2JqZnB5X2dldF9mcmFtZV91bndpbmRlcnMsCisgICAgb2JqZnB5 X3NldF9mcmFtZV91bndpbmRlcnMsICJGcmFtZSBVbndpbmRlcnMiLCBOVUxM IH0sCiAgIHsgInR5cGVfcHJpbnRlcnMiLCBvYmpmcHlfZ2V0X3R5cGVfcHJp bnRlcnMsIG9iamZweV9zZXRfdHlwZV9wcmludGVycywKICAgICAiVHlwZSBw cmludGVycy4iLCBOVUxMIH0sCiAgIHsgInhtZXRob2RzIiwgb2JqZnB5X2dl dF94bWV0aG9kcywgTlVMTCwKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHkt cHJvZ3NwYWNlLmMgYi9nZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5jCmluZGV4 IDkzZmJjMTQuLjE3ZGEzZDEgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHkt cHJvZ3NwYWNlLmMKKysrIGIvZ2RiL3B5dGhvbi9weS1wcm9nc3BhY2UuYwpA QCAtNDEsNiArNDEsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QKIAogICAvKiBUaGUg ZnJhbWUgZmlsdGVyIGxpc3Qgb2YgZnVuY3Rpb25zLiAgKi8KICAgUHlPYmpl Y3QgKmZyYW1lX2ZpbHRlcnM7CisKKyAgLyogVGhlIGZyYW1lIHVud2luZGVy IGxpc3QuICAqLworICBQeU9iamVjdCAqZnJhbWVfdW53aW5kZXJzOworCiAg IC8qIFRoZSB0eXBlLXByaW50ZXIgbGlzdC4gICovCiAgIFB5T2JqZWN0ICp0 eXBlX3ByaW50ZXJzOwogCkBAIC04Miw2ICs4Niw3IEBAIHBzcHlfZGVhbGxv YyAoUHlPYmplY3QgKnNlbGYpCiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPmRp Y3QpOwogICBQeV9YREVDUkVGIChwc19zZWxmLT5wcmludGVycyk7CiAgIFB5 X1hERUNSRUYgKHBzX3NlbGYtPmZyYW1lX2ZpbHRlcnMpOworICBQeV9YREVD UkVGIChwc19zZWxmLT5mcmFtZV91bndpbmRlcnMpOwogICBQeV9YREVDUkVG IChwc19zZWxmLT50eXBlX3ByaW50ZXJzKTsKICAgUHlfWERFQ1JFRiAocHNf c2VsZi0+eG1ldGhvZHMpOwogICBQeV9UWVBFIChzZWxmKS0+dHBfZnJlZSAo c2VsZik7CkBAIC0xMDQsNiArMTA5LDEwIEBAIHBzcHlfaW5pdGlhbGl6ZSAo cHNwYWNlX29iamVjdCAqc2VsZikKICAgaWYgKHNlbGYtPmZyYW1lX2ZpbHRl cnMgPT0gTlVMTCkKICAgICByZXR1cm4gMDsKIAorICBzZWxmLT5mcmFtZV91 bndpbmRlcnMgPSBQeUxpc3RfTmV3ICgwKTsKKyAgaWYgKHNlbGYtPmZyYW1l X3Vud2luZGVycyA9PSBOVUxMKQorICAgIHJldHVybiAwOworCiAgIHNlbGYt PnR5cGVfcHJpbnRlcnMgPSBQeUxpc3RfTmV3ICgwKTsKICAgaWYgKHNlbGYt PnR5cGVfcHJpbnRlcnMgPT0gTlVMTCkKICAgICByZXR1cm4gMDsKQEAgLTIx MSw2ICsyMjAsNDggQEAgcHNweV9zZXRfZnJhbWVfZmlsdGVycyAoUHlPYmpl Y3QgKm8sIFB5T2JqZWN0ICpmcmFtZSwgdm9pZCAqaWdub3JlKQogICByZXR1 cm4gMDsKIH0KIAorLyogUmV0dXJuIHRoZSBsaXN0IG9mIHRoZSBmcmFtZSB1 bndpbmRlcnMgZm9yIHRoaXMgcHJvZ3JhbSBzcGFjZS4gICovCisKK1B5T2Jq ZWN0ICoKK3BzcHlfZ2V0X2ZyYW1lX3Vud2luZGVycyAoUHlPYmplY3QgKm8s IHZvaWQgKmlnbm9yZSkKK3sKKyAgcHNwYWNlX29iamVjdCAqc2VsZiA9IChw c3BhY2Vfb2JqZWN0ICopIG87CisKKyAgUHlfSU5DUkVGIChzZWxmLT5mcmFt ZV91bndpbmRlcnMpOworICByZXR1cm4gc2VsZi0+ZnJhbWVfdW53aW5kZXJz OworfQorCisvKiBTZXQgdGhpcyBwcm9ncmFtIHNwYWNlJ3MgbGlzdCBvZiB0 aGUgdW53aW5kZXJzIHRvIFVOV0lOREVSUy4gICovCisKK3N0YXRpYyBpbnQK K3BzcHlfc2V0X2ZyYW1lX3Vud2luZGVycyAoUHlPYmplY3QgKm8sIFB5T2Jq ZWN0ICp1bndpbmRlcnMsIHZvaWQgKmlnbm9yZSkKK3sKKyAgUHlPYmplY3Qg KnRtcDsKKyAgcHNwYWNlX29iamVjdCAqc2VsZiA9IChwc3BhY2Vfb2JqZWN0 ICopIG87CisKKyAgaWYgKCF1bndpbmRlcnMpCisgICAgeworICAgICAgUHlF cnJfU2V0U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisJCSAgICAgICAiY2Fu bm90IGRlbGV0ZSB0aGUgZnJhbWUgdW53aW5kZXJzIGxpc3QiKTsKKyAgICAg IHJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKCFQeUxpc3RfQ2hlY2sgKHVu d2luZGVycykpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4 Y19UeXBlRXJyb3IsCisJCSAgICAgICAidGhlIGZyYW1lIHVud2luZGVycyBh dHRyaWJ1dGUgbXVzdCBiZSBhIGxpc3QiKTsKKyAgICAgIHJldHVybiAtMTsK KyAgICB9CisKKyAgLyogVGFrZSBjYXJlIGluIGNhc2UgdGhlIExIUyBhbmQg UkhTIGFyZSByZWxhdGVkIHNvbWVob3cuICAqLworICB0bXAgPSBzZWxmLT5m cmFtZV91bndpbmRlcnM7CisgIFB5X0lOQ1JFRiAodW53aW5kZXJzKTsKKyAg c2VsZi0+ZnJhbWVfdW53aW5kZXJzID0gdW53aW5kZXJzOworICBQeV9YREVD UkVGICh0bXApOworCisgIHJldHVybiAwOworfQorCiAvKiBHZXQgdGhlICd0 eXBlX3ByaW50ZXJzJyBhdHRyaWJ1dGUuICAqLwogCiBzdGF0aWMgUHlPYmpl Y3QgKgpAQCAtMzQ1LDYgKzM5Niw4IEBAIHN0YXRpYyBQeUdldFNldERlZiBw c3BhY2VfZ2V0c2V0W10gPQogICAgICJQcmV0dHkgcHJpbnRlcnMuIiwgTlVM TCB9LAogICB7ICJmcmFtZV9maWx0ZXJzIiwgcHNweV9nZXRfZnJhbWVfZmls dGVycywgcHNweV9zZXRfZnJhbWVfZmlsdGVycywKICAgICAiRnJhbWUgZmls dGVycy4iLCBOVUxMIH0sCisgIHsgImZyYW1lX3Vud2luZGVycyIsIHBzcHlf Z2V0X2ZyYW1lX3Vud2luZGVycywgcHNweV9zZXRfZnJhbWVfdW53aW5kZXJz LAorICAgICJGcmFtZSB1bndpbmRlcnMuIiwgTlVMTCB9LAogICB7ICJ0eXBl X3ByaW50ZXJzIiwgcHNweV9nZXRfdHlwZV9wcmludGVycywgcHNweV9zZXRf dHlwZV9wcmludGVycywKICAgICAiVHlwZSBwcmludGVycy4iLCBOVUxMIH0s CiAgIHsgInhtZXRob2RzIiwgcHNweV9nZXRfeG1ldGhvZHMsIE5VTEwsCmRp ZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LXVud2luZC5jIGIvZ2RiL3B5dGhv bi9weS11bndpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4zNjEwODcxCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhvbi9w eS11bndpbmQuYwpAQCAtMCwwICsxLDc4MiBAQAorLyogUHl0aG9uIGZyYW1l IHVud2luZGVyIGludGVyZmFjZS4KKworICAgQ29weXJpZ2h0IChDKSAyMDE1 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZp bGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiYXJjaC11dGls cy5oIgorI2luY2x1ZGUgImZyYW1lLXVud2luZC5oIgorI2luY2x1ZGUgImdk Yl9vYnN0YWNrLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisjaW5jbHVkZSAi bGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJvYnNlcnZlci5oIgorI2luY2x1ZGUg InB5dGhvbi1pbnRlcm5hbC5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisj aW5jbHVkZSAidmFscHJpbnQuaCIKKyNpbmNsdWRlICJ1c2VyLXJlZ3MuaCIK KworI2RlZmluZSBUUkFDRV9QWV9VTldJTkQobGV2ZWwsIGFyZ3MuLi4pIGlm IChweXV3X2RlYnVnID49IGxldmVsKSAgXAorICB7IGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywgYXJncyk7IH0KKwordHlwZWRlZiBzdHJ1Y3QK K3sKKyAgUHlPYmplY3RfSEVBRAorCisgIC8qIEZyYW1lIHdlIGFyZSB1bndp bmRpbmcuICAqLworICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWVfaW5mbzsK KworICAvKiBJdHMgYXJjaGl0ZWN0dXJlLCBwYXNzZWQgYnkgdGhlIHNuaWZm ZXIgY2FsbGVyLiAgKi8KKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7Cit9 IHBlbmRpbmdfZnJhbWVfb2JqZWN0OworCisvKiBTYXZlZCByZWdpc3RlcnMg YXJyYXkgaXRlbS4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQgbnVt YmVyOworICBQeU9iamVjdCAqdmFsdWU7Cit9IHNhdmVkX3JlZzsKK0RFRl9W RUNfTyAoc2F2ZWRfcmVnKTsKKworLyogVGhlIGRhdGEgd2Uga2VlcCBmb3Ig dGhlIFB5VW53aW5kSW5mbzogcGVuZGluZ19mcmFtZSwgc2F2ZWQgcmVnaXN0 ZXJzCisgICBhbmQgZnJhbWUgSUQuICAqLworCit0eXBlZGVmIHN0cnVjdAor eworICBQeU9iamVjdF9IRUFECisKKyAgLyogZ2RiLlBlbmRpbmdGcmFtZSBm b3IgdGhlIGZyYW1lIHdlIGFyZSB1bndpbmRpbmcuICAqLworICBQeU9iamVj dCAqcGVuZGluZ19mcmFtZTsKKworICAvKiBJdHMgSUQuICAqLworICBzdHJ1 Y3QgZnJhbWVfaWQgZnJhbWVfaWQ7CisKKyAgLyogU2F2ZWQgcmVnaXN0ZXJz IGFycmF5LiAgKi8KKyAgVkVDIChzYXZlZF9yZWcpICpzYXZlZF9yZWdzOwor fSB1bndpbmRfaW5mb19vYmplY3Q7CisKKy8qIFRoZSBkYXRhIHdlIGtlZXAg Zm9yIGEgZnJhbWUgd2UgY2FuIHVud2luZDogZnJhbWUgSUQgYW5kIGFuIGFy cmF5IG9mCisgICAocmVnaXN0ZXJfbnVtYmVyLCByZWdpc3Rlcl92YWx1ZSkg cGFpcnMuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBGcmFtZSBJ RC4gICovCisgIHN0cnVjdCBmcmFtZV9pZCBmcmFtZV9pZDsKKworICAvKiBH REIgQXJjaGl0ZWN0dXJlLiAgKi8KKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2g7CisKKyAgLyogTGVuZ3RoIG9mIHRoZSBgcmVnJyBhcnJheSBiZWxvdy4g ICovCisgIGludCByZWdfY291bnQ7CisKKyAgc3RydWN0IHJlZ19pbmZvCisg IHsKKyAgICAvKiBSZWdpc3RlciBudW1iZXIuICAqLworICAgIGludCBudW1i ZXI7CisKKyAgICAvKiBSZWdpc3RlciBkYXRhIGJ5dGVzIHBvaW50ZXIuICAq LworICAgIGdkYl9ieXRlIGRhdGFbTUFYX1JFR0lTVEVSX1NJWkVdOworICB9 IHJlZ1tdOworfSBjYWNoZWRfZnJhbWVfaW5mbzsKKworc3RhdGljIFB5VHlw ZU9iamVjdCBwZW5kaW5nX2ZyYW1lX29iamVjdF90eXBlCisgICAgQ1BZQ0hF Q0tFUl9UWVBFX09CSkVDVF9GT1JfVFlQRURFRiAoInBlbmRpbmdfZnJhbWVf b2JqZWN0Iik7CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgdW53aW5kX2luZm9f b2JqZWN0X3R5cGUKKyAgICBDUFlDSEVDS0VSX1RZUEVfT0JKRUNUX0ZPUl9U WVBFREVGICgidW53aW5kX2luZm9fb2JqZWN0Iik7CisKK3N0YXRpYyB1bnNp Z25lZCBpbnQgcHl1d19kZWJ1ZyA9IDA7CisKK3N0YXRpYyBzdHJ1Y3QgZ2Ri YXJjaF9kYXRhICpweXV3X2dkYmFyY2hfZGF0YTsKKworLyogUGFyc2VzIHJl Z2lzdGVyIGlkLCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgbnVtYmVyIG9yIGEg bmFtZS4KKyAgIFJldHVybnMgMSBvbiBzdWNjZXNzLCAwIG90aGVyd2lzZS4g ICovCisKK3N0YXRpYyBpbnQKK3B5dXdfcGFyc2VfcmVnaXN0ZXJfaWQgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBQeU9iamVjdCAqcHlvX3JlZ19pZCwK KyAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcmVnX251bSkKK3sKKyAg aWYgKHB5b19yZWdfaWQgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKyAgaWYg KFB5U3RyaW5nX0NoZWNrIChweW9fcmVnX2lkKSkKKyAgICB7CisgICAgICBj b25zdCBjaGFyICpyZWdfbmFtZSA9IFB5U3RyaW5nX0FTX1NUUklORyAocHlv X3JlZ19pZCk7CisKKyAgICAgIGlmIChyZWdfbmFtZSA9PSBOVUxMKQorICAg ICAgICByZXR1cm4gMDsKKyAgICAgICpyZWdfbnVtID0gdXNlcl9yZWdfbWFw X25hbWVfdG9fcmVnbnVtIChnZGJhcmNoLCByZWdfbmFtZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4g KHJlZ19uYW1lKSk7CisgICAgICByZXR1cm4gKnJlZ19udW0gPj0gMDsKKyAg ICB9CisgIGVsc2UgaWYgKFB5SW50X0NoZWNrIChweW9fcmVnX2lkKSkKKyAg ICB7CisgICAgICBsb25nIHZhbHVlOworICAgICAgaWYgKGdkYl9weV9pbnRf YXNfbG9uZyAocHlvX3JlZ19pZCwgJnZhbHVlKSAmJiAoaW50KSB2YWx1ZSA9 PSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICpyZWdfbnVtID0gKGlu dCkgdmFsdWU7CisgICAgICAgICAgcmV0dXJuIHVzZXJfcmVnX21hcF9yZWdu dW1fdG9fbmFtZSAoZ2RiYXJjaCwgKnJlZ19udW0pICE9IE5VTEw7CisgICAg ICAgIH0KKyAgICB9CisgIHJldHVybiAwOworfQorCisvKiBDb252ZXJ0IGdk Yi5WYWx1ZSBpbnN0YW5jZSB0byBpbmZlcmlvcidzIHBvaW50ZXIuICBSZXR1 cm4gMSBvbiBzdWNjZXNzLAorICAgMCBvbiBmYWlsdXJlLiAgKi8KKworc3Rh dGljIGludAorcHl1d192YWx1ZV9vYmpfdG9fcG9pbnRlciAoUHlPYmplY3Qg KnB5b192YWx1ZSwgQ09SRV9BRERSICphZGRyKQoreworICBpbnQgcmMgPSAw OworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7Cisg IHN0cnVjdCB2YWx1ZSAqdmFsdWU7CisKKyAgVFJZCisgICAgeworICAgICAg aWYgKCh2YWx1ZSA9IHZhbHVlX29iamVjdF90b192YWx1ZSAocHlvX3ZhbHVl KSkgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICphZGRyID0gdW5w YWNrX3BvaW50ZXIgKHZhbHVlX3R5cGUgKHZhbHVlKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV9jb250ZW50cyAodmFsdWUp KTsKKyAgICAgICAgICByYyA9IDE7CisgICAgICAgIH0KKyAgICB9CisgIENB VENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAgICBp ZiAoZXhjZXB0LnJlYXNvbiA8IDApCisgICAgICAgIGdkYnB5X2NvbnZlcnRf ZXhjZXB0aW9uIChleGNlcHQpOworICAgIH0KKyAgRU5EX0NBVENICisgIHJl dHVybiByYzsKK30KKworLyogR2V0IGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVj dCBhbmQgY29udmVydCBpdCB0byB0aGUgaW5mZXJpb3IncworICAgcG9pbnRl ciB2YWx1ZS4gIFJldHVybiAxIGlmIGF0dHJpYnV0ZSBleGlzdHMgYW5kIGl0 cyB2YWx1ZSBjYW4gYmUKKyAgIGNvbnZlcnRlZC4gIE90aGVyd2lzZSwgaWYg YXR0cmlidXRlIGRvZXMgbm90IGV4aXN0IG9yIGl0cyB2YWx1ZSBpcworICAg Tm9uZSwgcmV0dXJuIDAuICBJbiBhbGwgb3RoZXIgY2FzZXMgc2V0IFB5dGhv biBlcnJvciBhbmQgcmV0dXJuCisgICAwLiAgKi8KKworc3RhdGljIGludAor cHl1d19vYmplY3RfYXR0cmlidXRlX3RvX3BvaW50ZXIgKFB5T2JqZWN0ICpw eW8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDT1JFX0FERFIgKmFkZHIpCit7CisgIGludCBy YyA9IDA7CisKKyAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcgKHB5bywg YXR0cl9uYW1lKSkKKyAgICB7CisgICAgICBQeU9iamVjdCAqcHlvX3ZhbHVl ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyAocHlvLCBhdHRyX25hbWUpOwor ICAgICAgc3RydWN0IHZhbHVlICp2YWx1ZTsKKworICAgICAgaWYgKHB5b192 YWx1ZSAhPSBOVUxMICYmIHB5b192YWx1ZSAhPSBQeV9Ob25lKQorICAgICAg ICB7CisgICAgICAgICAgcmMgPSBweXV3X3ZhbHVlX29ial90b19wb2ludGVy IChweW9fdmFsdWUsIGFkZHIpOworICAgICAgICAgIGlmICghcmMpCisgICAg ICAgICAgICBQeUVycl9Gb3JtYXQgKAorICAgICAgICAgICAgICAgIFB5RXhj X1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgXygiVGhlIHZhbHVlIG9m IHRoZSAnJXMnIGF0dHJpYnV0ZSBpcyBub3QgYSBwb2ludGVyLiIpLAorICAg ICAgICAgICAgICAgIGF0dHJfbmFtZSk7CisgICAgICAgIH0KKyAgICAgIFB5 X1hERUNSRUYgKHB5b192YWx1ZSk7CisgICAgfQorICByZXR1cm4gcmM7Cit9 CisKKy8qIENhbGxlZCBieSB0aGUgUHl0aG9uIGludGVycHJldGVyIHRvIG9i dGFpbiBzdHJpbmcgcmVwcmVzZW50YXRpb24KKyAgIG9mIHRoZSBVbndpbmRJ bmZvIG9iamVjdC4gICovCisKK3N0YXRpYyBQeU9iamVjdCAqCit1bndpbmRf aW5mb3B5X3N0ciAoUHlPYmplY3QgKnNlbGYpCit7CisgIHN0cnVjdCB1aV9m aWxlICpzdHJmaWxlID0gbWVtX2ZpbGVvcGVuICgpOworICB1bndpbmRfaW5m b19vYmplY3QgKnVud2luZF9pbmZvID0gKHVud2luZF9pbmZvX29iamVjdCAq KSBzZWxmOworICBwZW5kaW5nX2ZyYW1lX29iamVjdCAqcGVuZGluZ19mcmFt ZQorICAgICAgPSAocGVuZGluZ19mcmFtZV9vYmplY3QgKikgKHVud2luZF9p bmZvLT5wZW5kaW5nX2ZyYW1lKTsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKwor ICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZpbGUsICJGcmFtZSBJRDogIik7 CisgIGZwcmludF9mcmFtZV9pZCAoc3RyZmlsZSwgdW53aW5kX2luZm8tPmZy YW1lX2lkKTsKKyAgeworICAgIGNoYXIgKnNlcCA9ICIiOworICAgIGludCBp OworICAgIHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zIG9wdHM7CisgICAg c2F2ZWRfcmVnICpyZWc7CisgICAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNl cHRpb24gZXhjZXB0OworCisgICAgZ2V0X3VzZXJfcHJpbnRfb3B0aW9ucyAo Jm9wdHMpOworICAgIGZwcmludGZfdW5maWx0ZXJlZCAoc3RyZmlsZSwgIlxu U2F2ZWQgcmVnaXN0ZXJzOiAoIik7CisgICAgZm9yIChpID0gMDsKKyAgICAg ICAgIGkgPCBWRUNfaXRlcmF0ZSAoc2F2ZWRfcmVnLCB1bndpbmRfaW5mby0+ c2F2ZWRfcmVncywgaSwgcmVnKTsKKyAgICAgICAgIGkrKykKKyAgICAgIHsK KyAgICAgICAgc3RydWN0IHZhbHVlICp2YWx1ZSA9IHZhbHVlX29iamVjdF90 b192YWx1ZSAocmVnLT52YWx1ZSk7CisKKyAgICAgICAgZnByaW50Zl91bmZp bHRlcmVkIChzdHJmaWxlLCAiJXMoJWQsICIsIHNlcCwgcmVnLT5udW1iZXIp OworICAgICAgICBpZiAodmFsdWUgIT0gTlVMTCkKKyAgICAgICAgICB7Cisg ICAgICAgICAgICBUUlkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIHZhbHVlX3ByaW50ICh2YWx1ZSwgc3RyZmlsZSwgJm9wdHMpOworICAg ICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoc3RyZmlsZSwgIiki KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgQ0FUQ0ggKGV4Y2Vw dCwgUkVUVVJOX01BU0tfQUxMKQorICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgR0RCX1BZX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEVORF9DQVRDSAorICAgICAg ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoc3RyZmlsZSwgIjxCQUQ+KSIpOworICAgICAgICBzZXAgPSAiLCAi OworICAgICAgfQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoc3RyZmlsZSwg IikiKTsKKyAgfQorICB7CisgICAgY2hhciAqcyA9IHVpX2ZpbGVfeHN0cmR1 cCAoc3RyZmlsZSwgTlVMTCk7CisKKyAgICByZXN1bHQgPSBQeVN0cmluZ19G cm9tU3RyaW5nIChzKTsKKyAgICB4ZnJlZSAocyk7CisgIH0KKyAgdWlfZmls ZV9kZWxldGUgKHN0cmZpbGUpOworICByZXR1cm4gcmVzdWx0OworfQorCisv KiBDcmVhdGUgVW53aW5kSW5mbyBpbnN0YW5jZSBmb3IgZ2l2ZW4gUGVuZGlu Z0ZyYW1lIGFuZCBmcmFtZSBJRC4KKyAgIFNldHMgUHl0aG9uIGVycm9yIGFu ZCByZXR1cm5zIE5VTEwgb24gZXJyb3IuICAqLworCitzdGF0aWMgUHlPYmpl Y3QgKgorcHl1d19jcmVhdGVfdW53aW5kX2luZm8gKFB5T2JqZWN0ICpweW9f cGVuZGluZ19mcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZnJhbWVfaWQgZnJhbWVfaWQpCit7CisgIHVud2luZF9pbmZvX29iamVj dCAqdW53aW5kX2luZm8KKyAgICAgID0gUHlPYmplY3RfTmV3ICh1bndpbmRf aW5mb19vYmplY3QsICZ1bndpbmRfaW5mb19vYmplY3RfdHlwZSk7CisKKyAg aWYgKCgocGVuZGluZ19mcmFtZV9vYmplY3QgKikgcHlvX3BlbmRpbmdfZnJh bWUpLT5mcmFtZV9pbmZvID09IE5VTEwpCisgICAgeworICAgICAgUHlFcnJf U2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAg ICAgICAgICAiQXR0ZW1wdGluZyB0byB1c2Ugc3RhbGUgUGVuZGluZ0ZyYW1l Iik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIHVud2luZF9pbmZv LT5mcmFtZV9pZCA9IGZyYW1lX2lkOworICBQeV9JTkNSRUYgKHB5b19wZW5k aW5nX2ZyYW1lKTsKKyAgdW53aW5kX2luZm8tPnBlbmRpbmdfZnJhbWUgPSBw eW9fcGVuZGluZ19mcmFtZTsKKyAgdW53aW5kX2luZm8tPnNhdmVkX3JlZ3Mg PSBWRUNfYWxsb2MgKHNhdmVkX3JlZywgNCk7CisgIHJldHVybiAoUHlPYmpl Y3QgKikgdW53aW5kX2luZm87Cit9CisKKy8qIFRoZSBpbXBsZW1lbnRhdGlv biBvZgorICAgZ2RiLlVud2luZEluZm8uYWRkX3NhdmVkX3JlZ2lzdGVyIChS RUcsIFZBTFVFKSAtPiBOb25lLiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoK K3Vud2luZF9pbmZvcHlfYWRkX3NhdmVkX3JlZ2lzdGVyIChQeU9iamVjdCAq c2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgIHVud2luZF9pbmZvX29iamVj dCAqdW53aW5kX2luZm8gPSAodW53aW5kX2luZm9fb2JqZWN0ICopIHNlbGY7 CisgIHBlbmRpbmdfZnJhbWVfb2JqZWN0ICpwZW5kaW5nX2ZyYW1lCisgICAg ICA9IChwZW5kaW5nX2ZyYW1lX29iamVjdCAqKSAodW53aW5kX2luZm8tPnBl bmRpbmdfZnJhbWUpOworICBQeU9iamVjdCAqcHlvX3JlZ19pZDsKKyAgUHlP YmplY3QgKnB5b19yZWdfdmFsdWU7CisgIGludCByZWdudW07CisKKyAgaWYg KHBlbmRpbmdfZnJhbWUtPmZyYW1lX2luZm8gPT0gTlVMTCkKKyAgICB7Cisg ICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAg ICAgICAgICAgICAgICAgICAgICJVbndpbmRJbmZvIGluc3RhbmNlIHJlZmVy cyB0byBhIHN0YWxlIFBlbmRpbmdGcmFtZSIpOworICAgICAgcmV0dXJuIE5V TEw7CisgICAgfQorICBpZiAoIVB5QXJnX1VucGFja1R1cGxlIChhcmdzLCAi cHJldmlvdXNfZnJhbWVfcmVnaXN0ZXIiLCAyLCAyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAmcHlvX3JlZ19pZCwgJnB5b19yZWdfdmFsdWUpKQor ICAgIHJldHVybiBOVUxMOworICBpZiAoIXB5dXdfcGFyc2VfcmVnaXN0ZXJf aWQgKHBlbmRpbmdfZnJhbWUtPmdkYmFyY2gsIHB5b19yZWdfaWQsICZyZWdu dW0pKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFs dWVFcnJvciwgIkJhZCByZWdpc3RlciIpOworICAgICAgcmV0dXJuIE5VTEw7 CisgICAgfQorICB7CisgICAgc3RydWN0IHZhbHVlICp2YWx1ZTsKKyAgICBz aXplX3QgZGF0YV9zaXplOworCisgICAgaWYgKHB5b19yZWdfdmFsdWUgPT0g TlVMTAorICAgICAgfHwgKHZhbHVlID0gdmFsdWVfb2JqZWN0X3RvX3ZhbHVl IChweW9fcmVnX3ZhbHVlKSkgPT0gTlVMTCkKKyAgICAgIHsKKyAgICAgICAg UHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLCAiQmFkIHJlZ2lz dGVyIHZhbHVlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQor ICAgIGRhdGFfc2l6ZSA9IHJlZ2lzdGVyX3NpemUgKHBlbmRpbmdfZnJhbWUt PmdkYmFyY2gsIHJlZ251bSk7CisgICAgaWYgKGRhdGFfc2l6ZSAhPSBUWVBF X0xFTkdUSCAodmFsdWVfdHlwZSAodmFsdWUpKSkKKyAgICAgIHsKKyAgICAg ICAgUHlFcnJfRm9ybWF0ICgKKyAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJy b3IsCisgICAgICAgICAgICAiVGhlIHZhbHVlIG9mIHRoZSByZWdpc3RlciBy ZXR1cm5lZCBieSB0aGUgUHl0aG9uICIKKyAgICAgICAgICAgICJzbmlmZmVy IGhhcyB1bmV4cGVjdGVkIHNpemU6ICV1IGluc3RlYWQgb2YgJXUuIiwKKyAg ICAgICAgICAgICh1bnNpZ25lZCkgKFRZUEVfTEVOR1RIICh2YWx1ZV90eXBl ICh2YWx1ZSkpKSwKKyAgICAgICAgICAgICh1bnNpZ25lZCkgZGF0YV9zaXpl KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgIH0KKyAgewor ICAgIGludCBpOworICAgIHNhdmVkX3JlZyAqcmVnOworCisgICAgZm9yIChp ID0gMDsgVkVDX2l0ZXJhdGUgKHNhdmVkX3JlZywgdW53aW5kX2luZm8tPnNh dmVkX3JlZ3MsIGksIHJlZyk7IGkrKykKKyAgICAgIHsKKyAgICAgICAgaWYg KHJlZ251bSA9PSByZWctPm51bWJlcikKKyAgICAgICAgICB7CisgICAgICAg ICAgICBQeV9ERUNSRUYgKHJlZy0+dmFsdWUpOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgfQorICAgICAgfQorICAgIGlmIChyZWcgPT0gTlVM TCkKKyAgICAgIHsKKyAgICAgICAgcmVnID0gVkVDX3NhZmVfcHVzaCAoc2F2 ZWRfcmVnLCB1bndpbmRfaW5mby0+c2F2ZWRfcmVncywgTlVMTCk7CisgICAg ICAgIHJlZy0+bnVtYmVyID0gcmVnbnVtOworICAgICAgfQorICAgIFB5X0lO Q1JFRiAocHlvX3JlZ192YWx1ZSk7CisgICAgcmVnLT52YWx1ZSA9IHB5b19y ZWdfdmFsdWU7CisgIH0KKyAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qIFVu d2luZEluZm8gY2xlYW51cC4gICovCisKK3N0YXRpYyB2b2lkCit1bndpbmRf aW5mb3B5X2RlYWxsb2MgKFB5T2JqZWN0ICpzZWxmKQoreworICB1bndpbmRf aW5mb19vYmplY3QgKnVud2luZF9pbmZvID0gKHVud2luZF9pbmZvX29iamVj dCAqKSBzZWxmOworICBpbnQgaTsKKyAgc2F2ZWRfcmVnICpyZWc7CisKKyAg UHlfWERFQ1JFRiAodW53aW5kX2luZm8tPnBlbmRpbmdfZnJhbWUpOworICBm b3IgKGkgPSAwOyBWRUNfaXRlcmF0ZSAoc2F2ZWRfcmVnLCB1bndpbmRfaW5m by0+c2F2ZWRfcmVncywgaSwgcmVnKTsgaSsrKQorICAgICAgUHlfREVDUkVG IChyZWctPnZhbHVlKTsKKyAgVkVDX2ZyZWUgKHNhdmVkX3JlZywgdW53aW5k X2luZm8tPnNhdmVkX3JlZ3MpOworICBQeV9UWVBFIChzZWxmKS0+dHBfZnJl ZSAoc2VsZik7Cit9CisKKy8qIENhbGxlZCBieSB0aGUgUHl0aG9uIGludGVy cHJldGVyIHRvIG9idGFpbiBzdHJpbmcgcmVwcmVzZW50YXRpb24KKyAgIG9m IHRoZSBQZW5kaW5nRnJhbWUgb2JqZWN0LiAgKi8KKworc3RhdGljIFB5T2Jq ZWN0ICoKK3BlbmRpbmdfZnJhbWVweV9zdHIgKFB5T2JqZWN0ICpzZWxmKQor eworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7Cisg IHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSA9ICgocGVuZGluZ19mcmFtZV9v YmplY3QgKikgc2VsZiktPmZyYW1lX2luZm87CisgIGNvbnN0IGNoYXIgKnNw X3N0ciA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKnBjX3N0ciA9IE5VTEw7CisK KyAgaWYgKGZyYW1lID09IE5VTEwpCisgICAgcmV0dXJuIFB5U3RyaW5nX0Zy b21TdHJpbmcgKCJTdGFsZSBQZW5kaW5nRnJhbWUgaW5zdGFuY2UiKTsKKyAg VFJZCisgICAgeworICAgICAgc3Bfc3RyID0gY29yZV9hZGRyX3RvX3N0cmlu Z19ueiAoZ2V0X2ZyYW1lX3NwIChmcmFtZSkpOworICAgICAgcGNfc3RyID0g Y29yZV9hZGRyX3RvX3N0cmluZ19ueiAoZ2V0X2ZyYW1lX3BjIChmcmFtZSkp OworICAgIH0KKyAgQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQor ICAgIHsKKyAgICAgIEdEQl9QWV9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQp OworICAgIH0KKyAgRU5EX0NBVENICisKKyAgcmV0dXJuIFB5U3RyaW5nX0Zy b21Gb3JtYXQgKCJTUD0lcyxQQz0lcyIsIHNwX3N0ciwgcGNfc3RyKTsKK30K KworLyogSW1wbGVtZW50YXRpb24gb2YgZ2RiLlBlbmRpbmdGcmFtZS5yZWFk X3JlZ2lzdGVyIChzZWxmLCByZWcpIC0+IGdkYi5WYWx1ZS4KKyAgIFJldHVy bnMgdGhlIHZhbHVlIG9mIHJlZ2lzdGVyIFJFRyBhcyBnZGIuVmFsdWUgaW5z dGFuY2UuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorcGVuZGluZ19mcmFt ZXB5X3JlYWRfcmVnaXN0ZXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAq YXJncykKK3sKKyAgcGVuZGluZ19mcmFtZV9vYmplY3QgKnBlbmRpbmdfZnJh bWUgPSAocGVuZGluZ19mcmFtZV9vYmplY3QgKikgc2VsZjsKKyAgdm9sYXRp bGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworICBzdHJ1Y3QgdmFs dWUgKnZhbCA9IE5VTEw7CisgIGludCByZWdudW07CisgIFB5T2JqZWN0ICpw eW9fcmVnX2lkOworCisgIGlmIChwZW5kaW5nX2ZyYW1lLT5mcmFtZV9pbmZv ID09IE5VTEwpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4 Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAiQXR0ZW1w dGluZyB0byByZWFkIHJlZ2lzdGVyIGZyb20gc3RhbGUgUGVuZGluZ0ZyYW1l Iik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGlmICghUHlBcmdf VW5wYWNrVHVwbGUgKGFyZ3MsICJyZWFkX3JlZ2lzdGVyIiwgMSwgMSwgJnB5 b19yZWdfaWQpKQorICAgIHJldHVybiBOVUxMOworICBpZiAoIXB5dXdfcGFy c2VfcmVnaXN0ZXJfaWQgKHBlbmRpbmdfZnJhbWUtPmdkYmFyY2gsIHB5b19y ZWdfaWQsICZyZWdudW0pKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmlu ZyAoUHlFeGNfVmFsdWVFcnJvciwgIkJhZCByZWdpc3RlciIpOworICAgICAg cmV0dXJuIE5VTEw7CisgICAgfQorCisgIFRSWQorICAgIHsKKyAgICAgIHZh bCA9IGdldF9mcmFtZV9yZWdpc3Rlcl92YWx1ZSAocGVuZGluZ19mcmFtZS0+ ZnJhbWVfaW5mbywgcmVnbnVtKTsKKyAgICAgIGlmICh2YWwgPT0gTlVMTCkK KyAgICAgICAgUHlFcnJfRm9ybWF0IChQeUV4Y19WYWx1ZUVycm9yLAorICAg ICAgICAgICAgICAgICAgICAgICJDYW5ub3QgcmVhZCByZWdpc3RlciAlZCBm cm9tIGZyYW1lLiIsCisgICAgICAgICAgICAgICAgICAgICAgcmVnbnVtKTsK KyAgICB9CisgIENBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAg ICB7CisgICAgICBHREJfUFlfSEFORExFX0VYQ0VQVElPTiAoZXhjZXB0KTsK KyAgICB9CisgIEVORF9DQVRDSAorCisgIHJldHVybiB2YWwgPT0gTlVMTCA/ IE5VTEwgOiB2YWx1ZV90b192YWx1ZV9vYmplY3QgKHZhbCk7Cit9CisKKy8q IEltcGxlbWVudGF0aW9uIG9mCisgICBQZW5kaW5nRnJhbWUuY3JlYXRlX3Vu d2luZF9pbmZvIChzZWxmLCBmcmFtZUlkKSAtPiBVbndpbmRJbmZvLiAgKi8K Kworc3RhdGljIFB5T2JqZWN0ICoKK3BlbmRpbmdfZnJhbWVweV9jcmVhdGVf dW53aW5kX2luZm8gKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykK K3sKKyAgUHlPYmplY3QgKnB5b19mcmFtZV9pZDsKKyAgQ09SRV9BRERSIHNw OworICBDT1JFX0FERFIgcGM7CisgIENPUkVfQUREUiBzcGVjaWFsOworCisg IGlmICghUHlBcmdfUGFyc2VUdXBsZSAoYXJncywgIk86Y3JlYXRlX3Vud2lu ZF9pbmZvIiwgJnB5b19mcmFtZV9pZCkpCisgICAgICByZXR1cm4gTlVMTDsK KyAgaWYgKCFweXV3X29iamVjdF9hdHRyaWJ1dGVfdG9fcG9pbnRlciAocHlv X2ZyYW1lX2lkLCAic3AiLCAmc3ApKQorICAgIHsKKyAgICAgIFB5RXJyX1Nl dFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAg ICAgICAgXygiZnJhbWVfaWQgc2hvdWxkIGhhdmUgJ3NwJyBhdHRyaWJ1dGUu IikpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIC8qIFRoZSBs b2dpYyBvZiBidWlsZGluZyBmcmFtZV9pZCBkZXBlbmRpbmcgb24gdGhlIGF0 dHJpYnV0ZXMgb2YKKyAgICAgdGhlIGZyYW1lX2lkIG9iamVjdDoKKyAgICAg SGFzICAgICBIYXMgICAgSGFzICAgICAgICAgICBGdW5jdGlvbiB0byBjYWxs CisgICAgICdzcCc/ICAgJ3BjJz8gICdzcGVjaWFsJz8KKyAgICAgLS0tLS0t fC0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgICAgIFkgICAgICAgTiAgICAgICogICAgICAgICAgICAgZnJhbWVf aWRfYnVpbGRfd2lsZCAoc3ApCisgICAgIFkgICAgICAgWSAgICAgIE4gICAg ICAgICAgICAgZnJhbWVfaWRfYnVpbGQgKHNwLCBwYykKKyAgICAgWSAgICAg ICBZICAgICAgWSAgICAgICAgICAgICBmcmFtZV9idWlsZF9pZF9zcGVjaWFs IChzcCwgcGMsIHNwZWNpYWwpCisgICovCisgIGlmICghcHl1d19vYmplY3Rf YXR0cmlidXRlX3RvX3BvaW50ZXIgKHB5b19mcmFtZV9pZCwgInBjIiwgJnBj KSkKKyAgICByZXR1cm4gcHl1d19jcmVhdGVfdW53aW5kX2luZm8gKHNlbGYs IGZyYW1lX2lkX2J1aWxkX3dpbGQgKHNwKSk7CisgIGlmICghcHl1d19vYmpl Y3RfYXR0cmlidXRlX3RvX3BvaW50ZXIgKHB5b19mcmFtZV9pZCwgInNwZWNp YWwiLCAmc3BlY2lhbCkpCisgICAgcmV0dXJuIHB5dXdfY3JlYXRlX3Vud2lu ZF9pbmZvIChzZWxmLCBmcmFtZV9pZF9idWlsZCAoc3AsIHBjKSk7CisgIGVs c2UKKyAgICByZXR1cm4gcHl1d19jcmVhdGVfdW53aW5kX2luZm8gKHNlbGYs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZV9p ZF9idWlsZF9zcGVjaWFsIChzcCwgcGMsIHNwZWNpYWwpKTsKK30KKworc3Rh dGljIHZvaWQKK3BlbmRpbmdfZnJhbWVfaW52YWxpZGF0ZSAodm9pZCAqcHlv X3BlbmRpbmdfZnJhbWUpCit7CisgIGlmIChweW9fcGVuZGluZ19mcmFtZSAh PSBOVUxMKQorICAgICgocGVuZGluZ19mcmFtZV9vYmplY3QgKikgcHlvX3Bl bmRpbmdfZnJhbWUpLT5mcmFtZV9pbmZvID0gTlVMTDsKK30KKworLyogZnJh bWVfdW53aW5kLnRoaXNfaWQgbWV0aG9kLiAgKi8KKworc3RhdGljIHZvaWQK K3B5dXdfdGhpc19pZCAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUs IHZvaWQgKipjYWNoZV9wdHIsCisgICAgICAgICAgICAgIHN0cnVjdCBmcmFt ZV9pZCAqdGhpc19pZCkKK3sKKyAgKnRoaXNfaWQgPSAoKGNhY2hlZF9mcmFt ZV9pbmZvICopICpjYWNoZV9wdHIpLT5mcmFtZV9pZDsKKyAgaWYgKHB5dXdf ZGVidWcgPj0gMSkKKyAgICB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQg KGdkYl9zdGRsb2csICIlczogZnJhbWVfaWQ6ICIsIF9fRlVOQ1RJT05fXyk7 CisgICAgICBmcHJpbnRfZnJhbWVfaWQgKGdkYl9zdGRsb2csICp0aGlzX2lk KTsKKyAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlxu Iik7CisgICAgfQorfQorCisvKiBmcmFtZV91bndpbmQucHJldl9yZWdpc3Rl ci4gICovCisKK3N0YXRpYyBzdHJ1Y3QgdmFsdWUgKgorcHl1d19wcmV2X3Jl Z2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAq KmNhY2hlX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlZ251bSkK K3sKKyAgY2FjaGVkX2ZyYW1lX2luZm8gKmNhY2hlZF9mcmFtZSA9ICpjYWNo ZV9wdHI7CisgIHN0cnVjdCByZWdfaW5mbyAqcmVnX2luZm8gPSBjYWNoZWRf ZnJhbWUtPnJlZzsKKyAgc3RydWN0IHJlZ19pbmZvICpyZWdfaW5mb19lbmQg PSByZWdfaW5mbyArIGNhY2hlZF9mcmFtZS0+cmVnX2NvdW50OworCisgIFRS QUNFX1BZX1VOV0lORCAoMSwgIiVzIChmcmFtZT0lcCwuLi4scmVnPSVkKVxu IiwgX19GVU5DVElPTl9fLCB0aGlzX2ZyYW1lLAorICAgICAgICAgICAgICAg ICAgIHJlZ251bSk7CisgIGZvciAoOyByZWdfaW5mbyA8IHJlZ19pbmZvX2Vu ZDsgKytyZWdfaW5mbykKKyAgICB7CisgICAgICBpZiAocmVnbnVtID09IHJl Z19pbmZvLT5udW1iZXIpCisgICAgICAgIHJldHVybiBmcmFtZV91bndpbmRf Z290X2J5dGVzICh0aGlzX2ZyYW1lLCByZWdudW0sIHJlZ19pbmZvLT5kYXRh KTsKKyAgICB9CisKKyAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3Rfb3B0aW1p emVkICh0aGlzX2ZyYW1lLCByZWdudW0pOworfQorCisvKiBGcmFtZSBzbmlm ZmVyIGRpc3BhdGNoLiAgKi8KKworc3RhdGljIGludAorcHl1d19zbmlmZmVy IChjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kICpzZWxmLCBzdHJ1Y3QgZnJh bWVfaW5mbyAqdGhpc19mcmFtZSwKKyAgICAgICAgICAgICAgdm9pZCAqKmNh Y2hlX3B0cikKK3sKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSAoc3Ry dWN0IGdkYmFyY2ggKikgKHNlbGYtPnVud2luZF9kYXRhKTsKKyAgc3RydWN0 IGNsZWFudXAgKmNsZWFudXBzID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdkYmFy Y2gsIGN1cnJlbnRfbGFuZ3VhZ2UpOworICBQeU9iamVjdCAqcHlvX2V4ZWN1 dGU7CisgIFB5T2JqZWN0ICpweW9fcGVuZGluZ19mcmFtZTsKKyAgUHlPYmpl Y3QgKnB5b191bndpbmRfaW5mbzsKKyAgY2FjaGVkX2ZyYW1lX2luZm8gKmNh Y2hlZF9mcmFtZTsKKworICBUUkFDRV9QWV9VTldJTkQgKDMsICIlcyAoU1A9 JXMsIFBDPSVzKVxuIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgICAgICAg ICAgIHBhZGRyZXNzIChnZGJhcmNoLCBnZXRfZnJhbWVfc3AgKHRoaXNfZnJh bWUpKSwKKyAgICAgICAgICAgICAgICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwg Z2V0X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKSkpOworCisgIC8qIENyZWF0ZSBQ ZW5kaW5nRnJhbWUgaW5zdGFuY2UgdG8gcGFzcyB0byBzbmlmZmVycy4gICov CisgIHB5b19wZW5kaW5nX2ZyYW1lICA9IChQeU9iamVjdCAqKSBQeU9iamVj dF9OZXcgKHBlbmRpbmdfZnJhbWVfb2JqZWN0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGVuZGluZ19m cmFtZV9vYmplY3RfdHlwZSk7CisgIGlmIChweW9fcGVuZGluZ19mcmFtZSA9 PSBOVUxMKQorICAgIGdvdG8gZXJyb3I7CisgICgocGVuZGluZ19mcmFtZV9v YmplY3QgKikgcHlvX3BlbmRpbmdfZnJhbWUpLT5nZGJhcmNoID0gZ2RiYXJj aDsKKyAgKChwZW5kaW5nX2ZyYW1lX29iamVjdCAqKSBweW9fcGVuZGluZ19m cmFtZSktPmZyYW1lX2luZm8gPSB0aGlzX2ZyYW1lOworICBtYWtlX2NsZWFu dXAgKHBlbmRpbmdfZnJhbWVfaW52YWxpZGF0ZSwgKHZvaWQgKikgcHlvX3Bl bmRpbmdfZnJhbWUpOworICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweW9f cGVuZGluZ19mcmFtZSk7CisKKyAgLyogUnVuIHVud2luZGVycy4gICovCisg IGlmIChnZGJfcHl0aG9uX21vZHVsZSA9PSBOVUxMCisgICAgICB8fCAhIFB5 T2JqZWN0X0hhc0F0dHJTdHJpbmcgKGdkYl9weXRob25fbW9kdWxlLCAiZXhl Y3V0ZV91bndpbmRlcnMiKSkKKyAgICBnb3RvIGVycm9yOworICBweW9fZXhl Y3V0ZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcgKGdkYl9weXRob25fbW9k dWxlLCAiZXhlY3V0ZV91bndpbmRlcnMiKTsKKyAgaWYgKHB5b19leGVjdXRl ID09IE5VTEwpCisgICAgZ290byBlcnJvcjsKKyAgbWFrZV9jbGVhbnVwX3B5 X2RlY3JlZiAocHlvX2V4ZWN1dGUpOworICBweW9fdW53aW5kX2luZm8KKyAg ICAgID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyAocHlvX2V4ZWN1 dGUsIHB5b19wZW5kaW5nX2ZyYW1lLCBOVUxMKTsKKyAgaWYgKHB5b191bndp bmRfaW5mbyA9PSBOVUxMKQorICAgIGdvdG8gZXJyb3I7CisgIG1ha2VfY2xl YW51cF9weV9kZWNyZWYgKHB5b191bndpbmRfaW5mbyk7CisgIGlmIChweW9f dW53aW5kX2luZm8gPT0gUHlfTm9uZSkKKyAgICBnb3RvIGVycm9yOworCisg IC8qIFJlY2VpdmVkIFVud2luZEluZm8sIGNhY2hlIGRhdGEuICAqLworICBp ZiAoUHlPYmplY3RfSXNJbnN0YW5jZSAocHlvX3Vud2luZF9pbmZvLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopICZ1bndpbmRf aW5mb19vYmplY3RfdHlwZSkgPD0gMCkKKyAgICBlcnJvciAoXygiQSBVbndp bmRlciBzaG91bGQgcmV0dXJuIGdkYi5VbndpbmRJbmZvIGluc3RhbmNlLiIp KTsKKworICB7CisgICAgdW53aW5kX2luZm9fb2JqZWN0ICp1bndpbmRfaW5m byA9ICh1bndpbmRfaW5mb19vYmplY3QgKikgcHlvX3Vud2luZF9pbmZvOwor ICAgIGludCByZWdfY291bnQgPSBWRUNfbGVuZ3RoIChzYXZlZF9yZWcsIHVu d2luZF9pbmZvLT5zYXZlZF9yZWdzKTsKKyAgICBzYXZlZF9yZWcgKnJlZzsK KyAgICBpbnQgaTsKKworICAgIGNhY2hlZF9mcmFtZSA9IHhtYWxsb2MgKHNp emVvZiAoKmNhY2hlZF9mcmFtZSkgKworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlZ19jb3VudCAqIHNpemVvZiAoY2FjaGVkX2ZyYW1lLT5yZWdb MF0pKTsKKyAgICBjYWNoZWRfZnJhbWUtPmdkYmFyY2ggPSBnZGJhcmNoOwor ICAgIGNhY2hlZF9mcmFtZS0+ZnJhbWVfaWQgPSB1bndpbmRfaW5mby0+ZnJh bWVfaWQ7CisgICAgY2FjaGVkX2ZyYW1lLT5yZWdfY291bnQgPSByZWdfY291 bnQ7CisKKyAgICAvKiBQb3B1bGF0ZSByZWdpc3RlcnMgYXJyYXkuICAqLwor ICAgIGZvciAoaSA9IDA7IFZFQ19pdGVyYXRlIChzYXZlZF9yZWcsIHVud2lu ZF9pbmZvLT5zYXZlZF9yZWdzLCBpLCByZWcpOyBpKyspCisgICAgICB7Cisg ICAgICAgIHN0cnVjdCB2YWx1ZSAqdmFsdWUgPSB2YWx1ZV9vYmplY3RfdG9f dmFsdWUgKHJlZy0+dmFsdWUpOworICAgICAgICBzaXplX3QgZGF0YV9zaXpl ID0gcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgcmVnLT5udW1iZXIpOworCisg ICAgICAgIGNhY2hlZF9mcmFtZS0+cmVnW2ldLm51bWJlciA9IHJlZy0+bnVt YmVyOworCisgICAgICAgIC8qIGB2YWx1ZScgdmFsaWRhdGlvbiB3YXMgZG9u ZSBiZWZvcmUsIGp1c3QgYXNzZXJ0LiAgKi8KKyAgICAgICAgZ2RiX2Fzc2Vy dCAodmFsdWUgIT0gTlVMTCk7CisgICAgICAgIGdkYl9hc3NlcnQgKGRhdGFf c2l6ZSA9PSBUWVBFX0xFTkdUSCAodmFsdWVfdHlwZSAodmFsdWUpKSk7Cisg ICAgICAgIGdkYl9hc3NlcnQgKGRhdGFfc2l6ZSA8PSBNQVhfUkVHSVNURVJf U0laRSk7CisKKyAgICAgICAgbWVtY3B5IChjYWNoZWRfZnJhbWUtPnJlZ1tp XS5kYXRhLCB2YWx1ZV9jb250ZW50cyAodmFsdWUpLCBkYXRhX3NpemUpOwor ICAgICAgfQorICB9CisKKyAgKmNhY2hlX3B0ciA9IGNhY2hlZF9mcmFtZTsK KyAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKyAgcmV0dXJuIDE7CisKK2Vy cm9yOgorICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworICByZXR1cm4gMDsK K30KKworLyogRnJhbWUgY2FjaGUgcmVsZWFzZSBzaGltLiAgKi8KKworc3Rh dGljIHZvaWQKK3B5dXdfZGVhbGxvY19jYWNoZSAoc3RydWN0IGZyYW1lX2lu Zm8gKnRoaXNfZnJhbWUsIHZvaWQgKmNhY2hlKQoreworICBUUkFDRV9QWV9V TldJTkQgKDMsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworICB4ZnJl ZSAoY2FjaGUpOworfQorCitzdHJ1Y3QgcHl1d19nZGJhcmNoX2RhdGFfdHlw ZQoreworICAvKiBIYXMgdGhlIHVud2luZGVyIHNoaW0gYmVlbiBwcmVwZW5k ZWQ/ICovCisgIGludCB1bndpbmRlcl9yZWdpc3RlcmVkOworfTsKKworc3Rh dGljIHZvaWQgKgorcHl1d19nZGJhcmNoX2RhdGFfaW5pdCAoc3RydWN0IGdk YmFyY2ggKmdkYmFyY2gpCit7CisgIHJldHVybiBHREJBUkNIX09CU1RBQ0tf WkFMTE9DIChnZGJhcmNoLCBzdHJ1Y3QgcHl1d19nZGJhcmNoX2RhdGFfdHlw ZSk7Cit9CisKKy8qIE5ldyBpbmZlcmlvciBhcmNoaXRlY3R1cmUgY2FsbGJh Y2s6IHJlZ2lzdGVyIHRoZSBQeXRob24gdW53aW5kZXJzCisgICBpbnRlcm1l ZGlhcnkuICAqLworCitzdGF0aWMgdm9pZAorcHl1d19vbl9uZXdfZ2RiYXJj aCAoc3RydWN0IGdkYmFyY2ggKm5ld2FyY2gpCit7CisgIHN0cnVjdCBweXV3 X2dkYmFyY2hfZGF0YV90eXBlICpkYXRhID0KKyAgICAgIGdkYmFyY2hfZGF0 YSAobmV3YXJjaCwgcHl1d19nZGJhcmNoX2RhdGEpOworCisgIGlmICghZGF0 YS0+dW53aW5kZXJfcmVnaXN0ZXJlZCkKKyAgICB7CisgICAgICBzdHJ1Y3Qg ZnJhbWVfdW53aW5kICp1bndpbmRlcgorICAgICAgICAgID0gR0RCQVJDSF9P QlNUQUNLX1pBTExPQyAobmV3YXJjaCwgc3RydWN0IGZyYW1lX3Vud2luZCk7 CisKKyAgICAgIHVud2luZGVyLT50eXBlID0gTk9STUFMX0ZSQU1FOworICAg ICAgdW53aW5kZXItPnN0b3BfcmVhc29uID0gZGVmYXVsdF9mcmFtZV91bndp bmRfc3RvcF9yZWFzb247CisgICAgICB1bndpbmRlci0+dGhpc19pZCA9IHB5 dXdfdGhpc19pZDsKKyAgICAgIHVud2luZGVyLT5wcmV2X3JlZ2lzdGVyID0g cHl1d19wcmV2X3JlZ2lzdGVyOworICAgICAgdW53aW5kZXItPnVud2luZF9k YXRhID0gKHZvaWQgKikgbmV3YXJjaDsKKyAgICAgIHVud2luZGVyLT5zbmlm ZmVyID0gcHl1d19zbmlmZmVyOworICAgICAgdW53aW5kZXItPmRlYWxsb2Nf Y2FjaGUgPSBweXV3X2RlYWxsb2NfY2FjaGU7CisgICAgICBmcmFtZV91bndp bmRfcHJlcGVuZF91bndpbmRlciAobmV3YXJjaCwgdW53aW5kZXIpOworICAg ICAgZGF0YS0+dW53aW5kZXJfcmVnaXN0ZXJlZCA9IDE7CisgICAgfQorfQor CisvKiBJbml0aWFsaXplIHVud2luZCBtYWNoaW5lcnkuICAqLworCitpbnQK K2dkYnB5X2luaXRpYWxpemVfdW53aW5kICh2b2lkKQoreworICBpbnQgcmM7 CisgIGFkZF9zZXRzaG93X3p1aW50ZWdlcl9jbWQKKyAgICAgICgicHktdW53 aW5kIiwgY2xhc3NfbWFpbnRlbmFuY2UsICZweXV3X2RlYnVnLAorICAgICAg ICBfKCJTZXQgUHl0aG9uIHVud2luZGVyIGRlYnVnZ2luZy4iKSwKKyAgICAg ICAgXygiU2hvdyBQeXRob24gdW53aW5kZXIgZGVidWdnaW5nLiIpLAorICAg ICAgICBfKCJXaGVuIG5vbi16ZXJvLCBQeXRob24gdW53aW5kZXIgZGVidWdn aW5nIGlzIGVuYWJsZWQuIiksCisgICAgICAgIE5VTEwsCisgICAgICAgIE5V TEwsCisgICAgICAgICZzZXRkZWJ1Z2xpc3QsICZzaG93ZGVidWdsaXN0KTsK KyAgcHl1d19nZGJhcmNoX2RhdGEKKyAgICAgID0gZ2RiYXJjaF9kYXRhX3Jl Z2lzdGVyX3Bvc3RfaW5pdCAocHl1d19nZGJhcmNoX2RhdGFfaW5pdCk7Cisg IG9ic2VydmVyX2F0dGFjaF9hcmNoaXRlY3R1cmVfY2hhbmdlZCAocHl1d19v bl9uZXdfZ2RiYXJjaCk7CisKKyAgaWYgKFB5VHlwZV9SZWFkeSAoJnBlbmRp bmdfZnJhbWVfb2JqZWN0X3R5cGUpIDwgMCkKKyAgICByZXR1cm4gLTE7Cisg IHJjID0gZ2RiX3B5bW9kdWxlX2FkZG9iamVjdCAoZ2RiX21vZHVsZSwgIlBl bmRpbmdGcmFtZSIsCisgICAgICAoUHlPYmplY3QgKikgJnBlbmRpbmdfZnJh bWVfb2JqZWN0X3R5cGUpOworICBpZiAocmMpCisgICAgcmV0dXJuIHJjOwor CisgIGlmIChQeVR5cGVfUmVhZHkgKCZ1bndpbmRfaW5mb19vYmplY3RfdHlw ZSkgPCAwKQorICAgIHJldHVybiAtMTsKKyAgcmV0dXJuIGdkYl9weW1vZHVs ZV9hZGRvYmplY3QgKGdkYl9tb2R1bGUsICJVbndpbmRJbmZvIiwKKyAgICAg IChQeU9iamVjdCAqKSAmdW53aW5kX2luZm9fb2JqZWN0X3R5cGUpOworfQor CitzdGF0aWMgUHlNZXRob2REZWYgcGVuZGluZ19mcmFtZV9vYmplY3RfbWV0 aG9kc1tdID0KK3sKKyAgeyAicmVhZF9yZWdpc3RlciIsIHBlbmRpbmdfZnJh bWVweV9yZWFkX3JlZ2lzdGVyLCBNRVRIX1ZBUkFSR1MsCisgICAgInJlYWRf cmVnaXN0ZXIgKFJFRykgLT4gZ2RiLlZhbHVlXG4iCisgICAgIlJldHVybiB0 aGUgdmFsdWUgb2YgdGhlIFJFRyBpbiB0aGUgZnJhbWUuIiB9LAorICB7ICJj cmVhdGVfdW53aW5kX2luZm8iLAorICAgIHBlbmRpbmdfZnJhbWVweV9jcmVh dGVfdW53aW5kX2luZm8sIE1FVEhfVkFSQVJHUywKKyAgICAiY3JlYXRlX3Vu d2luZF9pbmZvIChGUkFNRV9JRCkgLT4gZ2RiLlVud2luZEluZm9cbiIKKyAg ICAiQ29uc3RydWN0IFVud2luZEluZm8gZm9yIHRoaXMgUGVuZGluZ0ZyYW1l LCB1c2luZyBGUkFNRV9JRFxuIgorICAgICJ0byBpZGVudGlmeSBpdC4iIH0s CisgIHtOVUxMfSAgLyogU2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQeVR5 cGVPYmplY3QgcGVuZGluZ19mcmFtZV9vYmplY3RfdHlwZSA9Cit7CisgIFB5 VmFyT2JqZWN0X0hFQURfSU5JVCAoTlVMTCwgMCkKKyAgImdkYi5QZW5kaW5n RnJhbWUiLCAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgIHNpemVvZiAo cGVuZGluZ19mcmFtZV9vYmplY3QpLCAgLyogdHBfYmFzaWNzaXplICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNp emUgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9kZWFsbG9jICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfcHJpbnQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVt YmVyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfYXNfc2VxdWVuY2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgIHBlbmRp bmdfZnJhbWVweV9zdHIsICAgICAgICAgICAgLyogdHBfc3RyICovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8g Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9z ZXRhdHRybyAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX2FzX2J1ZmZlciAqLworICBQeV9UUEZMQUdTX0RFRkFVTFQsICAg ICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICJHREIgUGVuZGluZ0ZyYW1l IG9iamVjdCIsICAgICAgLyogdHBfZG9jICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21w YXJlICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9pdGVyICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgcGVuZGluZ19m cmFtZV9vYmplY3RfbWV0aG9kcywgICAvKiB0cF9tZXRob2RzICovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dl dHNldCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX2Jhc2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9kaWN0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9h bGxvYyAqLworfTsKKworc3RhdGljIFB5TWV0aG9kRGVmIHVud2luZF9pbmZv X29iamVjdF9tZXRob2RzW10gPQoreworICB7ICJhZGRfc2F2ZWRfcmVnaXN0 ZXIiLAorICAgIHVud2luZF9pbmZvcHlfYWRkX3NhdmVkX3JlZ2lzdGVyLCBN RVRIX1ZBUkFSR1MsCisgICAgImFkZF9zYXZlZF9yZWdpc3RlciAoUkVHLCBW QUxVRSkgLT4gTm9uZVxuIgorICAgICJTZXQgdGhlIHZhbHVlIG9mIHRoZSBS RUcgaW4gdGhlIHByZXZpb3VzIGZyYW1lIHRvIFZBTFVFLiIgfSwKKyAgeyBO VUxMIH0gIC8qIFNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlUeXBlT2Jq ZWN0IHVud2luZF9pbmZvX29iamVjdF90eXBlID0KK3sKKyAgUHlWYXJPYmpl Y3RfSEVBRF9JTklUIChOVUxMLCAwKQorICAiZ2RiLlVud2luZEluZm8iLCAg ICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgc2l6ZW9mICh1bndpbmRf aW5mb19vYmplY3QpLCAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLwor ICB1bndpbmRfaW5mb3B5X2RlYWxsb2MsICAgICAgICAgIC8qIHRwX2RlYWxs b2MgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9wcmludCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX2dldGF0dHIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19z ZXF1ZW5jZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9oYXNoICAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgdW53aW5kX2luZm9w eV9zdHIsICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJv ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf YXNfYnVmZmVyICovCisgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxB R1NfQkFTRVRZUEUsICAvKiB0cF9mbGFncyAqLworICAiR0RCIFVud2luZElu Zm8gb2JqZWN0IiwgICAgICAgIC8qIHRwX2RvYyAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNo Y29tcGFyZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgIHVud2lu ZF9pbmZvX29iamVjdF9tZXRob2RzLCAgICAgLyogdHBfbWV0aG9kcyAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJl cnMgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9nZXRzZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9iYXNlICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfZGljdCAqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9p bml0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfYWxsb2MgKi8KK307CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhv bi1pbnRlcm5hbC5oIGIvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaApp bmRleCA0YzRkMzJhLi4wNTgxYjMzIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9u L3B5dGhvbi1pbnRlcm5hbC5oCisrKyBiL2dkYi9weXRob24vcHl0aG9uLWlu dGVybmFsLmgKQEAgLTM5MSwxMiArMzkxLDE0IEBAIFB5T2JqZWN0ICpwc3Bh Y2VfdG9fcHNwYWNlX29iamVjdCAoc3RydWN0IHByb2dyYW1fc3BhY2UgKikK ICAgICBDUFlDSEVDS0VSX1JFVFVSTlNfQk9SUk9XRURfUkVGOwogUHlPYmpl Y3QgKnBzcHlfZ2V0X3ByaW50ZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwog UHlPYmplY3QgKnBzcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMgKFB5T2JqZWN0ICos IHZvaWQgKik7CitQeU9iamVjdCAqcHNweV9nZXRfZnJhbWVfdW53aW5kZXJz IChQeU9iamVjdCAqLCB2b2lkICopOwogUHlPYmplY3QgKnBzcHlfZ2V0X3ht ZXRob2RzIChQeU9iamVjdCAqLCB2b2lkICopOwogCiBQeU9iamVjdCAqb2Jq ZmlsZV90b19vYmpmaWxlX29iamVjdCAoc3RydWN0IG9iamZpbGUgKikKICAg ICBDUFlDSEVDS0VSX1JFVFVSTlNfQk9SUk9XRURfUkVGOwogUHlPYmplY3Qg Km9iamZweV9nZXRfcHJpbnRlcnMgKFB5T2JqZWN0ICosIHZvaWQgKik7CiBQ eU9iamVjdCAqb2JqZnB5X2dldF9mcmFtZV9maWx0ZXJzIChQeU9iamVjdCAq LCB2b2lkICopOworUHlPYmplY3QgKm9iamZweV9nZXRfZnJhbWVfdW53aW5k ZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwogUHlPYmplY3QgKm9iamZweV9n ZXRfeG1ldGhvZHMgKFB5T2JqZWN0ICosIHZvaWQgKik7CiBQeU9iamVjdCAq Z2RicHlfbG9va3VwX29iamZpbGUgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVj dCAqYXJncywgUHlPYmplY3QgKmt3KTsKIApAQCAtNDkxLDYgKzQ5Myw4IEBA IGludCBnZGJweV9pbml0aWFsaXplX2FyY2ggKHZvaWQpCiAgIENQWUNIRUNL RVJfTkVHQVRJVkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOwogaW50IGdkYnB5 X2luaXRpYWxpemVfeG1ldGhvZHMgKHZvaWQpCiAgIENQWUNIRUNLRVJfTkVH QVRJVkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOworaW50IGdkYnB5X2luaXRp YWxpemVfdW53aW5kICh2b2lkKQorICBDUFlDSEVDS0VSX05FR0FUSVZFX1JF U1VMVF9TRVRTX0VYQ0VQVElPTjsKIAogc3RydWN0IGNsZWFudXAgKm1ha2Vf Y2xlYW51cF9weV9kZWNyZWYgKFB5T2JqZWN0ICpweSk7CiBzdHJ1Y3QgY2xl YW51cCAqbWFrZV9jbGVhbnVwX3B5X3hkZWNyZWYgKFB5T2JqZWN0ICpweSk7 CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5jIGIvZ2RiL3B5dGhv bi9weXRob24uYwppbmRleCA1OGM3YzkyLi4xZGE2M2ZkIDEwMDY0NAotLS0g YS9nZGIvcHl0aG9uL3B5dGhvbi5jCisrKyBiL2dkYi9weXRob24vcHl0aG9u LmMKQEAgLTE4MjEsNyArMTgyMSw4IEBAIG1lc3NhZ2UgPT0gYW4gZXJyb3Ig bWVzc2FnZSB3aXRob3V0IGEgc3RhY2sgd2lsbCBiZSBwcmludGVkLiIpLAog ICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV9uZXdfb2JqZmlsZV9ldmVudCAo KSAgPCAwCiAgICAgICB8fCBnZGJweV9pbml0aWFsaXplX2NsZWFyX29iamZp bGVzX2V2ZW50ICgpICA8IDAKICAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVf YXJjaCAoKSA8IDAKLSAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfeG1ldGhv ZHMgKCkgPCAwKQorICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV94bWV0aG9k cyAoKSA8IDAKKyAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfdW53aW5kICgp IDwgMCkKICAgICBnb3RvIGZhaWw7CiAKICAgZ2RicHlfdG9fc3RyaW5nX2Nz dCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcgKCJ0b19zdHJpbmciKTsKZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFp bnQuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFp bnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzFk OTM1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LXVud2luZC1tYWludC5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qIFRo aXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIu CisKKyAgIENvcHlyaWdodCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCitpbnQK K21haW4gKHZvaWQpCit7CisgIGludCBpID0gMDsKKworICByZXR1cm4gaTsg LyogbmV4dC1saW5lICovCit9CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktdW53aW5kLW1haW50LmV4cCBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQuZXhwCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODc1MDEKLS0tIC9kZXYvbnVs bAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLW1h aW50LmV4cApAQCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykgMjAx NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor IyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIwor IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3Rz dWl0ZS4gIEl0IHRlc3RzIFB5dGhvbi1iYXNlZAorIyB1bndpbmRpbmcgQ0xJ LgorCitsb2FkX2xpYiBnZGItcHl0aG9uLmV4cAorCitzdGFuZGFyZF90ZXN0 ZmlsZQorCitpZiB7W3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHt0ZXN0ZmlsZX0u ZXhwICR7dGVzdGZpbGV9ICR7c3JjZmlsZX1dIH0geworICAgIHJldHVybiAt MQorfQorCisjIFNraXAgYWxsIHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcg aXMgbm90IGVuYWJsZWQuCitpZiB7IFtza2lwX3B5dGhvbl90ZXN0c10gfSB7 IGNvbnRpbnVlIH0KKworc2V0IHB5ZmlsZSBbZ2RiX3JlbW90ZV9kb3dubG9h ZCBob3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHldCisK K2lmICFbcnVudG9fbWFpbiBdIHRoZW4geworICAgIGZhaWwgIkNhbid0IHJ1 biB0byBtYWluIgorICAgIHJldHVybiAtMQorfQorCitnZGJfdGVzdCAic291 cmNlICR7cHlmaWxlfSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQiICJpbXBv cnQgcHl0aG9uIHNjcmlwdHMiCisKK2dkYl90ZXN0X3NlcXVlbmNlICJpbmZv IHVud2luZGVyIiAiU2hvdyBhbGwgdW53aW5kZXJzIiB7CisgICAgIkdsb2Jh bDoiCisgICAgIiAgZ2xvYmFsX3Vud2luZGVyIgorICAgICJQcm9nc3BhY2Ug LipweS11bndpbmQtbWFpbnQ6IgorICAgICJweV91bndpbmRfbWFpbnRfcHNf dW53aW5kZXIiCit9CisKK2dkYl9icmVha3BvaW50ICR7c3JjZmlsZX06W2dk Yl9nZXRfbGluZV9udW1iZXIgIm5leHQtbGluZSJdCisKK2dkYl90ZXN0X3Nl cXVlbmNlICJjb250aW51ZSIgIlVud2luZGVycyBjYWxsZWQiIHsKKyAgICAi cHlfdW53aW5kX21haW50X3BzX3Vud2luZGVyIGNhbGxlZCIKKyAgICAiZ2xv YmFsX3Vud2luZGVyIGNhbGxlZCIKK30KKworZ2RiX3Rlc3QgImRpc2FibGUg dW53aW5kZXIgZ2xvYmFsIC4qIiAiMSB1bndpbmRlciBkaXNhYmxlZCIgIlVu d2luZGVyIGRpc2FibGVkIgorCitnZGJfdGVzdF9zZXF1ZW5jZSAiaW5mbyB1 bndpbmRlciIgIlNob3cgd2l0aCBnbG9iYWwgdW53aW5kZXIgZGlzYWJsZWQi IHsKKyAgICAiR2xvYmFsOiIKKyAgICAiICBcXFtkaXNhYmxlZFxcXSBnbG9i YWxfdW53aW5kZXIiCisgICAgIlByb2dzcGFjZSAuKnB5LXVud2luZC1tYWlu dDoiCisgICAgIiAgcHlfdW53aW5kX21haW50X3BzX3Vud2luZGVyIgorfQor CitnZGJfdGVzdF9zZXF1ZW5jZSAid2hlcmUiICJHbG9iYWwgdW53aW5kZXIg ZGlzYWJsZWQiIHsKKyAgICAicHlfdW53aW5kX21haW50X3BzX3Vud2luZGVy IGNhbGxlZFxyXG4jMCAgbWFpbiIKK30KZGlmZiAtLWdpdCBhL2dkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQucHkgYi9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLW1haW50LnB5Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YzYyNzcKLS0tIC9kZXYv bnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5k LW1haW50LnB5CkBAIC0wLDAgKzEsNTkgQEAKKyMgQ29weXJpZ2h0IChDKSAy MDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor IyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisj CisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVz dHN1aXRlLiAgSXQgdGVzdHMgcHl0aG9uIHVud2luZGVycy4KKworaW1wb3J0 IHJlCitpbXBvcnQgZ2RiLnR5cGVzCitmcm9tIGdkYi51bndpbmRlciBpbXBv cnQgVW53aW5kZXIsIHJlZ2lzdGVyX3Vud2luZGVyCisKK2NsYXNzIFRlc3RH bG9iYWxVbndpbmRlcihVbndpbmRlcik6CisgICAgZGVmIF9faW5pdF9fKHNl bGYpOgorICAgICAgICBzdXBlcihUZXN0R2xvYmFsVW53aW5kZXIsIHNlbGYp Ll9faW5pdF9fKCJnbG9iYWxfdW53aW5kZXIiKQorCisgICAgZGVmIF9fY2Fs bF9fKHNlbGYsIHVud2luZGVyX2luZm8pOgorICAgICAgICBwcmludCAiJXMg Y2FsbGVkIiAlIHNlbGYubmFtZQorICAgICAgICByZXR1cm4gTm9uZQorCitj bGFzcyBUZXN0UHJvZ3NwYWNlVW53aW5kZXIoVW53aW5kZXIpOgorICAgIGRl ZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc3VwZXIoVGVzdFBy b2dzcGFjZVVud2luZGVyLCBzZWxmKS5fX2luaXRfXygiJXNfcHNfdW53aW5k ZXIiICUgbmFtZSkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCB1bndpbmRl cl9pbmZvKToKKyAgICAgICAgcHJpbnQgIiVzIGNhbGxlZCIgJSBzZWxmLm5h bWUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworY2xhc3MgVGVzdE9iamZpbGVV bndpbmRlcihVbndpbmRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5h bWUpOgorICAgICAgICBzdXBlcihUZXN0T2JqZmlsZVVud2luZGVyLCBzZWxm KS5fX2luaXRfXygiJXNfb2JqX3Vud2luZGVyIiAlIG5hbWUpCisKKyAgICBk ZWYgX19jYWxsX18oc2VsZiwgdW53aW5kZXJfaW5mbyk6CisgICAgICAgIHBy aW50ICIlcyBjYWxsZWQiICUgc2VsZi5uYW1lCisgICAgICAgIHJldHVybiBO b25lCisKKworCitnZGIudW53aW5kZXIucmVnaXN0ZXJfdW53aW5kZXIoTm9u ZSwgVGVzdEdsb2JhbFVud2luZGVyKCkpCitzYXdfcnVudGltZV9lcnJvciA9 IEZhbHNlCit0cnk6CisgICAgZ2RiLnVud2luZGVyLnJlZ2lzdGVyX3Vud2lu ZGVyKE5vbmUsIFRlc3RHbG9iYWxVbndpbmRlcigpLCByZXBsYWNlPUZhbHNl KQorZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICBzYXdfcnVudGltZV9lcnJv ciA9IFRydWUKK2lmIG5vdCBzYXdfcnVudGltZV9lcnJvcjoKKyAgICByYWlz ZSBSdW50aW1lRXJyb3IoIk1pc3NpbmcgcnVudGltZSBlcnJvciBmcm9tIHJl Z2lzdGVyX3Vud2luZGVyLiIpCitnZGIudW53aW5kZXIucmVnaXN0ZXJfdW53 aW5kZXIoTm9uZSwgVGVzdEdsb2JhbFVud2luZGVyKCksIHJlcGxhY2U9VHJ1 ZSkKK2dkYi51bndpbmRlci5yZWdpc3Rlcl91bndpbmRlcihnZGIuY3VycmVu dF9wcm9nc3BhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUZXN0UHJvZ3NwYWNlVW53aW5kZXIoInB5X3Vud2luZF9tYWludCIpKQor cHJpbnQgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQiCmRpZmYgLS1naXQgYS9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLmMgYi9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0MWQ3OAotLS0gL2Rldi9udWxsCisr KyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQuYwpAQCAt MCwwICsxLDgxIEBACisvKiBUaGlzIHRlc3QgcHJvZ3JhbSBpcyBwYXJ0IG9m IEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gICovCisKKy8qIFRoaXMgaXMgdGhlIHRlc3QgcHJvZ3Jh bSBsb2FkZWQgaW50byBHREIgYnkgdGhlIHB5LXVud2luZCB0ZXN0LiAgKi8K KworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj aW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRpYyB2b2lkICoKK3N3YXBfdmFs dWUgKHZvaWQgKipsb2NhdGlvbiwgdm9pZCAqbmV3X3ZhbHVlKQoreworICB2 b2lkICpvbGRfdmFsdWUgPSAqbG9jYXRpb247CisgICpsb2NhdGlvbiA9IG5l d192YWx1ZTsKKyAgcmV0dXJuIG9sZF92YWx1ZTsKK30KKworc3RhdGljIHZv aWQKK2JhZF9sYXlvdXQodm9pZCAqKnZhcmlhYmxlX3B0ciwgdm9pZCAqZnAp Cit7CisgIGZwcmludGYgKHN0ZGVyciwgIkZpcnN0IHZhcmlhYmxlIHNob3Vs ZCBiZSBhbGxvY2F0ZWQgb25lIHdvcmQgYmVsb3cgIgorICAgICAgICAgICAi dGhlIGZyYW1lLiAgR290IHZhcmlhYmxlJ3MgYWRkcmVzcyAlcCwgZnJhbWUg YXQgJXAgaW5zdGVhZC5cbiIsCisgICAgICAgICAgIHZhcmlhYmxlX3B0ciwg ZnApOworICBhYm9ydCgpOworfQorCisjZGVmaW5lIE1ZX0ZSQU1FIChfX2J1 aWx0aW5fZnJhbWVfYWRkcmVzcyAoMCkpCisKK3N0YXRpYyB2b2lkCitjb3Jy dXB0X2ZyYW1lX2lubmVyICh2b2lkKQoreworICAvKiBTYXZlIG91dGVyIGZy YW1lIGFkZHJlc3MsIHRoZW4gY29ycnVwdCB0aGUgdW53aW5kIGNoYWluIGJ5 CisgICAgIHNldHRpbmcgdGhlIG91dGVyIGZyYW1lIGFkZHJlc3MgaW4gaXQg dG8gc2VsZi4gIFRoaXMgaXMKKyAgICAgQUJJLXNwZWNpZmljOiB0aGUgZmly c3Qgd29yZCBvZiB0aGUgZnJhbWUgY29udGFpbnMgcHJldmlvdXMgZnJhbWUK KyAgICAgYWRkcmVzcyBpbiBhbWQ2NC4gICovCisgIHZvaWQgKnByZXZpb3Vz X2ZwID0gc3dhcF92YWx1ZSAoKHZvaWQgKiopIE1ZX0ZSQU1FLCBNWV9GUkFN RSk7CisKKyAgLyogVmVyaWZ5IHRoZSBjb21waWxlciBhbGxvY2F0ZXMgdGhl IGZpcnN0IGxvY2FsIHZhcmlhYmxlIG9uZSB3b3JkCisgICAgIGJlbG93IGZy YW1lLiAgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdCB1bndpbmRlciBleHBlY3Rz IHRvIGZpbmQgdGhlCisgICAgIGNvcnJlY3Qgb3V0ZXIgZnJhbWUgYWRkcmVz cy4gICovCisgIGlmICgmcHJldmlvdXNfZnAgKyAxICE9ICh2b2lkICoqKSBN WV9GUkFNRSkKKyAgICBiYWRfbGF5b3V0ICgmcHJldmlvdXNfZnAgKyAxLCBN WV9GUkFNRSk7CisKKyAgLyogTm93IHJlc3RvcmUgaXQgc28gdGhhdCB3ZSBj YW4gcmV0dXJuLiAgVGhlIHRlc3Qgc2V0cyB0aGUKKyAgICAgYnJlYWtwb2lu dCBqdXN0IGJlZm9yZSB0aGlzIGhhcHBlbnMsIGFuZCBHREIgd2lsbCBub3Qg YmUgYWJsZSB0bworICAgICBzaG93IHRoZSBiYWNrdHJhY2Ugd2l0aG91dCBK SVQgcmVhZGVyLiAgKi8KKyAgc3dhcF92YWx1ZSAoKHZvaWQgKiopIE1ZX0ZS QU1FLCBwcmV2aW91c19mcCk7IC8qIGJyZWFrIGJhY2t0cmFjZS1icm9rZW4g Ki8KK30KKworc3RhdGljIHZvaWQKK2NvcnJ1cHRfZnJhbWVfb3V0ZXIgKHZv aWQpCit7CisgIC8qIFNlZSBhYm92ZSBmb3IgdGhlIGV4cGxhbmF0aW9uIG9m IHRoZSBjb2RlIGhlcmUuICBUaGlzIGZ1bmN0aW9uCisgICAgIGNvcnJ1cHRz IGl0cyBmcmFtZSwgdG9vLCBhbmQgdGhlbiBjYWxscyB0aGUgaW5uZXIgb25l LiAgKi8KKyAgdm9pZCAqcHJldmlvdXNfZnAgPSBzd2FwX3ZhbHVlICgodm9p ZCAqKikgTVlfRlJBTUUsIE1ZX0ZSQU1FKTsKKyAgaWYgKCZwcmV2aW91c19m cCArIDEgIT0gKHZvaWQgKiopIE1ZX0ZSQU1FKQorICAgIGJhZF9sYXlvdXQg KCZwcmV2aW91c19mcCwgTVlfRlJBTUUpOworICBjb3JydXB0X2ZyYW1lX2lu bmVyICgpOworICBzd2FwX3ZhbHVlICgodm9pZCAqKikgTVlfRlJBTUUsIHBy ZXZpb3VzX2ZwKTsKK30KKworaW50CittYWluICgpCit7CisgIGNvcnJ1cHRf ZnJhbWVfb3V0ZXIgKCk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC5leHAgYi9nZGIv dGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLmV4cApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Q2NzQ2Ci0tLSAvZGV2L251 bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC5l eHAKQEAgLTAsMCArMSw1NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUu ICBJdCB2ZXJpZmllcyB0aGF0IGZyYW1lCisjIHVud2luZGVycyBjYW4gYmUg aW1wbGVtZW50ZWQgaW4gUHl0aG9uLgorCitsb2FkX2xpYiBnZGItcHl0aG9u LmV4cAorCitzdGFuZGFyZF90ZXN0ZmlsZQorCitpZiB7IFtwcmVwYXJlX2Zv cl90ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke3Rlc3RmaWxlfSAke3NyY2Zp bGV9XSB9IHsKKyAgICByZXR1cm4gLTEKK30KKworIyBTa2lwIGFsbCB0ZXN0 cyBpZiBQeXRob24gc2NyaXB0aW5nIGlzIG5vdCBlbmFibGVkLgoraWYgeyBb c2tpcF9weXRob25fdGVzdHNdIH0geyBjb250aW51ZSB9CisKKyMgVGhpcyB0 ZXN0IHJ1bnMgb24gYSBzcGVjaWZpYyBwbGF0Zm9ybS4KK2lmIHsgISBbaXN0 YXJnZXQgeDg2XzY0LSpdfSB7IGNvbnRpbnVlIH0KKworIyBUaGUgZm9sbG93 aW5nIHRlc3RzIHJlcXVpcmUgZXhlY3V0aW9uLgorCitpZiAhW3J1bnRvX21h aW5dIHRoZW4geworICAgIGZhaWwgIkNhbid0IHJ1biB0byBtYWluIgorICAg IHJldHVybiAwCit9CisKK3NldCBweWZpbGUgW2dkYl9yZW1vdGVfZG93bmxv YWQgaG9zdCAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5XQor CitnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiYnJlYWsg YmFja3RyYWNlLWJyb2tlbiJdCisKK2dkYl90ZXN0ICJzb3VyY2UgJHtweWZp bGV9IiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZCIgXAorICAgICAgICAgImlt cG9ydCBweXRob24gc2NyaXB0cyIKKworZ2RiX2NvbnRpbnVlX3RvX2JyZWFr cG9pbnQgImJyZWFrIGJhY2t0cmFjZS1icm9rZW4iCitnZGJfdGVzdF9zZXF1 ZW5jZSAid2hlcmUiICAiQmFja3RyYWNlIHJlc3RvcmVkIGJ5IHVud2luZGVy IiB7CisgICAgIlxcclxcbiMwIC4qIGNvcnJ1cHRfZnJhbWVfaW5uZXIgXFwo XFwpIGF0ICIKKyAgICAiXFxyXFxuIzEgLiogY29ycnVwdF9mcmFtZV9vdXRl ciBcXChcXCkgYXQgIgorICAgICJcXHJcXG4jMiAuKiBtYWluIFxcKC4qXFwp IGF0IgorfQorCisKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS11bndpbmQucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktdW53aW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjYyNTdmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktdW53aW5kLnB5CkBAIC0wLDAgKzEsOTkgQEAKKyMg Q29weXJpZ2h0IChDKSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQgZ2RiCitmcm9tIGdk Yi51bndpbmRlciBpbXBvcnQgVW53aW5kZXIKKworY2xhc3MgRnJhbWVJZChv YmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwLCBwYyk6Cisg ICAgICAgIHNlbGYuX3NwID0gc3AKKyAgICAgICAgc2VsZi5fcGMgPSBwYwor CisgICAgQHByb3BlcnR5CisgICAgZGVmIHNwKHNlbGYpOgorICAgICAgICBy ZXR1cm4gc2VsZi5fc3AKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYyhz ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BjCisKKworY2xhc3MgVGVz dFVud2luZGVyKFVud2luZGVyKToKKyAgICBBTUQ2NF9SQlAgPSA2CisgICAg QU1ENjRfUlNQID0gNworICAgIEFNRDY0X1JJUCA9IDE2CisKKyAgICBkZWYg X19pbml0X18oc2VsZik6CisgICAgICAgIFVud2luZGVyLl9faW5pdF9fKHNl bGYsICJ0ZXN0IHVud2luZGVyIikKKyAgICAgICAgc2VsZi5jaGFyX3B0cl90 ID0gZ2RiLmxvb2t1cF90eXBlKCJ1bnNpZ25lZCBjaGFyIikucG9pbnRlcigp CisgICAgICAgIHNlbGYuY2hhcl9wdHJfcHRyX3QgPSBzZWxmLmNoYXJfcHRy X3QucG9pbnRlcigpCisKKyAgICBkZWYgX3JlYWRfd29yZChzZWxmLCBhZGRy ZXNzKToKKyAgICAgICAgcmV0dXJuIGFkZHJlc3MuY2FzdChzZWxmLmNoYXJf cHRyX3B0cl90KS5kZXJlZmVyZW5jZSgpCisKKyAgICBkZWYgX19jYWxsX18o c2VsZiwgcGVuZGluZ19mcmFtZSk6CisgICAgICAgICIiIlRlc3QgdW53aW5k ZXIgd3JpdHRlbiBpbiBQeXRob24uCisKKyAgICAgICAgVGhpcyB1bndpbmRl ciBjYW4gdW53aW5kIHRoZSBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gZGVsaWJl cmF0ZWx5CisgICAgICAgIGNvcnJ1cHRlZCBpbiBhIHNwZWNpZmljIHdheSAo ZnVuY3Rpb25zIGluIHRoZSBhY2NvbXBhbnlpbmcKKyAgICAgICAgcHktdW53 aW5kLmMgZmlsZSBkbyB0aGF0LikKKyAgICAgICAgVGhpcyBjb2RlIGlzIG9u bHkgb24gQU1ENjQuCisgICAgICAgIE9uIEFNRDY0ICRSQlAgcG9pbnRzIHRv IHRoZSBpbm5lcm1vc3QgZnJhbWUgKHVubGVzcyB0aGUgY29kZQorICAgICAg ICB3YXMgY29tcGlsZWQgd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlciksIHdo aWNoIGNvbnRhaW5zIHRoZQorICAgICAgICBhZGRyZXNzIG9mIHRoZSBwcmV2 aW91cyBmcmFtZSBhdCBvZmZzZXQgMC4gVGhlIGZ1bmN0aW9ucworICAgICAg ICBkZWxpYmVyYXRlbHkgY29ycnVwdCB0aGVpciBmcmFtZXMgYXMgZm9sbG93 czoKKyAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSAgICAgICAgICAgICAg ICAgQWZ0ZXIKKyAgICAgICAgICAgICAgICAgICBDb3JydXB0aW9uOiAgICAg ICAgICAgQ29ycnVwdGlvbjoKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0t LS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgUkJQLTgg ICB8ICAgICAgICAgICAgICB8ICAgICAgIHwgUHJldmlvdXMgUkJQIHwKKyAg ICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICstLS0tLS0t LS0tLS0tLSsKKyAgICAgICAgUkJQICAgICArIFByZXZpb3VzIFJCUCB8ICAg ICAgIHwgICAgUkJQICAgICAgIHwKKyAgICAgICAgICAgICAgICArLS0tLS0t LS0tLS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgUkJQ KzggICB8IFJldHVybiBSSVAgICB8ICAgICAgIHwgUmV0dXJuICBSSVAgIHwK KyAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICstLS0t LS0tLS0tLS0tLSsKKyAgICAgICAgT2xkIFNQICB8ICAgICAgICAgICAgICB8 ICAgICAgIHwgICAgICAgICAgICAgIHwKKworICAgICAgICBUaGlzIHVud2lu ZGVyIHJlY29nbml6ZXMgdGhlIGNvcnJ1cHQgZnJhbWVzIGJ5IGNoZWNraW5n IHRoYXQKKyAgICAgICAgKlJCUCA9PSBSQlAsIGFuZCByZXN0b3JlcyBwcmV2 aW91cyBSQlAgZnJvbSB0aGUgd29yZCBhYm92ZSBpdC4KKyAgICAgICAgIiIi CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgTk9URTogdGhlIHJlZ2lz dGVycyBpbiBVbndpbmRlciBBUEkgY2FuIGJlIHJlZmVyZW5jZWQKKyAgICAg ICAgICAgICMgZWl0aGVyIGJ5IG5hbWUgb3IgYnkgbnVtYmVyLiBUaGUgY29k ZSBiZWxvdyB1c2VzIGJvdGgKKyAgICAgICAgICAgICMgdG8gYWNoaWV2ZSBt b3JlIGNvdmVyYWdlLgorICAgICAgICAgICAgYnAgPSBwZW5kaW5nX2ZyYW1l LnJlYWRfcmVnaXN0ZXIoInJicCIpLmNhc3Qoc2VsZi5jaGFyX3B0cl90KQor ICAgICAgICAgICAgaWYgc2VsZi5fcmVhZF93b3JkKGJwKSAhPSBicDoKKyAg ICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgIyBGb3Vu ZCB0aGUgZnJhbWUgdGhhdCB0aGUgdGVzdCBwcm9ncmFtIGhhcyBjb3JydXB0 ZWQgZm9yIHVzLgorICAgICAgICAgICAgIyBUaGUgY29ycmVjdCBCUCBmb3Ig dGhlIG91dGVyIGZyYW1lIGhhcyBiZWVuIHNhdmVkIG9uZSB3b3JkCisgICAg ICAgICAgICAjIGFib3ZlLCBwcmV2aW91cyBJUCBhbmQgU1AgYXJlIGF0IHRo ZSBleHBlY3RlZCBwbGFjZXMuCisgICAgICAgICAgICBwcmV2aW91c19icCA9 IHNlbGYuX3JlYWRfd29yZChicCAtIDgpCisgICAgICAgICAgICBwcmV2aW91 c19pcCA9IHNlbGYuX3JlYWRfd29yZChicCArIDgpCisgICAgICAgICAgICBw cmV2aW91c19zcCA9IGJwICsgMTYKKworICAgICAgICAgICAgZnJhbWVfaWQg PSBGcmFtZUlkKAorICAgICAgICAgICAgICAgIHBlbmRpbmdfZnJhbWUucmVh ZF9yZWdpc3RlcihUZXN0VW53aW5kZXIuQU1ENjRfUlNQKSwKKyAgICAgICAg ICAgICAgICBwZW5kaW5nX2ZyYW1lLnJlYWRfcmVnaXN0ZXIoVGVzdFVud2lu ZGVyLkFNRDY0X1JJUCkpCisgICAgICAgICAgICB1bndpbmRfaW5mbyA9IHBl bmRpbmdfZnJhbWUuY3JlYXRlX3Vud2luZF9pbmZvKGZyYW1lX2lkKQorICAg ICAgICAgICAgdW53aW5kX2luZm8uYWRkX3NhdmVkX3JlZ2lzdGVyKFRlc3RV bndpbmRlci5BTUQ2NF9SQlAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJldmlvdXNfYnApCisgICAgICAgICAgICB1 bndpbmRfaW5mby5hZGRfc2F2ZWRfcmVnaXN0ZXIoInJpcCIsIHByZXZpb3Vz X2lwKQorICAgICAgICAgICAgdW53aW5kX2luZm8uYWRkX3NhdmVkX3JlZ2lz dGVyKCJyc3AiLCBwcmV2aW91c19zcCkKKyAgICAgICAgICAgIHJldHVybiB1 bndpbmRfaW5mbworICAgICAgICBleGNlcHQgKGdkYi5lcnJvciwgUnVudGlt ZUVycm9yKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKK2dkYi51bndp bmRlci5yZWdpc3Rlcl91bndpbmRlcihOb25lLCBUZXN0VW53aW5kZXIoKSwg VHJ1ZSkKK3ByaW50KCJQeXRob24gc2NyaXB0IGltcG9ydGVkIikK --001a1134b3ce993669051228a517--