From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10053 invoked by alias); 12 Feb 2015 17:58:45 -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 10024 invoked by uid 89); 12 Feb 2015 17:58:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail-ob0-f172.google.com Received: from mail-ob0-f172.google.com (HELO mail-ob0-f172.google.com) (209.85.214.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 12 Feb 2015 17:58:38 +0000 Received: by mail-ob0-f172.google.com with SMTP id nt9so11599605obb.3 for ; Thu, 12 Feb 2015 09:58:36 -0800 (PST) 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=E14tjYGHJQDk6Ux6CDgKMfyNPmM8Ov99pYz8GLdWEp4=; b=O4GupFNXIs6PaNjBTjqtfmpMSfrczm2DbHfJyUbpNudFWR36OfQmCIhZamhO5136Dd b7i3FAQCONPJYWC2lLf7Hn6T3jIRHOCLUHbh+9JeHoDXM5eDeR/ky2xrEpn7of5RYNE+ t9hCIJ51bU6O7TNFE1YkwJWxWNHtBn54dxa7dEkOFpDopd/Gj7xpCfA/vc+Lnr8HJaks nY1/1LuusiKcz502WkvuYm7OF26tuqn+7GBGHk902fytwKXCoofMBjFBlQdgE5yJn8x2 /ie0441cC+yLe+VO3gheyez2jwUtk43l58fQSC7IiYr1K7L3dtyaiir3gYjgXQ7g/f7N MZ1A== X-Gm-Message-State: ALoCoQlIwdZlDz78wfhDkMymRlMAhaKOoahlNH2QpT6uEcF3wAAxMbOTQoVlupSudHDXuv5bVkKK MIME-Version: 1.0 X-Received: by 10.202.226.198 with SMTP id z189mr3468840oig.64.1423763915804; Thu, 12 Feb 2015 09:58:35 -0800 (PST) Received: by 10.182.225.195 with HTTP; Thu, 12 Feb 2015 09:58:34 -0800 (PST) In-Reply-To: <21714.40641.510825.30998@ruffy2.mtv.corp.google.com> References: <21714.40641.510825.30998@ruffy2.mtv.corp.google.com> Date: Thu, 12 Feb 2015 17:58: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: gdb-patches Content-Type: multipart/mixed; boundary=001a1140918072c24e050ee7def1 X-SW-Source: 2015-02/txt/msg00329.txt.bz2 --001a1140918072c24e050ee7def1 Content-Type: text/plain; charset=UTF-8 Content-length: 5429 On Wed, Feb 4, 2015 at 2:35 PM, Doug Evans wrote: > High level comments: > > Is it possible to see the code, and example usage, of a real-life use-case > of this? That will help folks not familiar with this project to understand > the problem we are trying to solve. The case in question is Java Virtual Machine. It is a JIT compiler for Java, and it is part of the OpenJDK (Java Development Kit). It compiles Java methods on the fly, and the emitted code omits frame pointers (e.g., on x86_64 platform RBP is used as a general purpose register rather than as frame pointer). And, the emitted code does not have unwind info expected by GDB, so standard sniffers fail and the traceback stops when it encounters a frame for the JIT-compiled code. If we know how JVM works, we know where to find the descriptors of the currently compiled code, and once we locate the descriptor for a given PC, we can extract the frame size, and unwind the frame. It's easier to have a custom sniffer than to make JVM maintain DWARF unwind info. Besides, most of the code for the sniffer is reused by the corresponding frame decorator. The full implementation of the combined sniffer/frame filter for OpenJDK is about 2500 lines and will eventually become part of it. I am waiting for this GDB patch to be reviewed before I can present it to be reviewed by the JDK community :-) > I'm still not sure what kind of performance cost we're looking at here as > it scales up, I can imagine most times there'll be no Python sniffers, > or at most one or two. But it would be good to collect some perf data > (e.g., install 1,10,100 no-op sniffers and see if there's any measurable > difference in backtrace performance). I ran a test that walks a 100-frame stack calling 100 Python sniffers per frame, and it executes (throught the dejagnu checker) in 500ms on Xeon E5-1650 0 @ 3.20GHz. Please let me know if you would like it to be added to gdb/testsuite. > Exposing frame id implementation details (sp,pc,special), and the > form of how to do that, is something the community needs to decide on. > I think we can come up with something suitable, though perhaps not > the current form. The revised patch is attached. The important differences are as follows: * A sniffer is now an object, using the pattern similar to xmethods and pretty printers. * Register values are properly types (that is, based on a register type) I am still not certain whether it's worth changing SnifferInfo.read_register to have registers retrieved by name rather than by its number. Perhaps adding gdb.Architecture.register_name_to_number method will be a reasonable tradeoff? The documentation is obviously unfinished (to be done once the design issues are resolved), and what exists needs to be put into proper English. Here's take two: gdb/ChangeLog: 2015-02-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 sniffers.py. * doc/python.texi (Writing a Frame Unwinder in Python): Add section. * python/lib/gdb/__init__.py (packages): Add frame_sniffers list. * python/lib/gdb/command/sniffers.py: New file, implements GDB commands to list/enable/disable Python sniffers. * python/lib/gdb/function/sniffers.py: New file, implements execute_sniffers function. * python/lib/gdb/sniffer.py: New file, contains Sniffer class and register_sniffer function. * python/py-objfile.c (objfile_object): Add frame_sniffers field. (objfpy_dealloc): Decrement frame_sniffers reference count. (objfpy_initialize): Create frame_sniffers list. (objfpy_get_frame_sniffers): Implement Objfile.frame_sniffers getter. (objfpy_set_frame_sniffers): Implement Objfile.frame_sniffers setter. (objfile_getset): Add frame_sniffers attribute to Objfile. * python/py-progspace.c (pspace_object): Add frame_sniffers field. (pspy_dealloc): Decrement frame_sniffers reference count. (pspy_initialize): Create frame_sniffers list. (pspy_get_frame_sniffers): Implement gdb.Progspace.frame_sniffers getter. (pspy_set_frame_sniffers): Implement gdb.Progspace.frame_sniffers setter. (pspy_getset): Add frame_sniffers attribute to gdb.Progspace. * python/py-unwind.c: New file, implements Python frame sniffers interface. * python/python-internal.h (pspy_get_name_sniffers): New prototype. (objpy_get_frame_sniffers): New prototype. (gdbpy_initialize_unwind): New prototype. * python/python.c (gdbpy_apply_type_printers): Call gdbpy_initialize_unwind. gdb/testsuite/ChangeLog: 2014-02-30 Sasha Smundak * gdb.python/py-unwind-maint.c: Test program for py-unwind-maint. * gdb.python/py-unwind-maint.exp: Tests sniffer-related GDB commands. * gdb.python/py-unwind-maint.py: Pythons sniffers for the test. * gdb.python/py-unwind.c: Test program for the py-unwind test. * gdb.python/py-unwind.exp: Python frame sniffers test. * gdb.python/py-unwind.py: Frame sniffer in Python tested by py-unwind test. --001a1140918072c24e050ee7def1 Content-Type: text/plain; charset=US-ASCII; name="patch3.diff" Content-Disposition: attachment; filename="patch3.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i62g98dq0 Content-length: 79793 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCA4YWRkZWY0Li4zNzczZTJjIDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0zOTQsNiArMzk0 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktc3ltdGFiLm8gXAog CXB5LXRocmVhZGV2ZW50Lm8gXAogCXB5LXR5cGUubyBcCisJcHktdW53aW5k Lm8gXAogCXB5LXV0aWxzLm8gXAogCXB5LXZhbHVlLm8gXAogCXB5LXZhcm9i ai5vCkBAIC00MzMsNiArNDM0LDcgQEAgU1VCRElSX1BZVEhPTl9TUkNTID0g XAogCXB5dGhvbi9weS1zeW10YWIuYyBcCiAJcHl0aG9uL3B5LXRocmVhZGV2 ZW50LmMgXAogCXB5dGhvbi9weS10eXBlLmMgXAorCXB5dGhvbi9weS11bndp bmQuYyBcCiAJcHl0aG9uL3B5LXV0aWxzLmMgXAogCXB5dGhvbi9weS12YWx1 ZS5jIFwKIAlweXRob24vcHktdmFyb2JqLmMKQEAgLTI2MDgsNiArMjYxMCwx MCBAQCBweS10eXBlLm86ICQoc3JjZGlyKS9weXRob24vcHktdHlwZS5jCiAJ JChDT01QSUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24v cHktdHlwZS5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktdW53aW5kLm86ICQo c3JjZGlyKS9weXRob24vcHktdW53aW5kLmMKKwkkKENPTVBJTEUpICQoUFlU SE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS11bndpbmQuYworCSQo UE9TVENPTVBJTEUpCisKIHB5LXV0aWxzLm86ICQoc3JjZGlyKS9weXRob24v cHktdXRpbHMuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNy Y2RpcikvcHl0aG9uL3B5LXV0aWxzLmMKIAkkKFBPU1RDT01QSUxFKQpkaWZm IC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwppbmRleCBmMTk1NzdhLi44 OTE1N2E0IDEwMDY0NAotLS0gYS9nZGIvTkVXUworKysgYi9nZGIvTkVXUwpA QCAtMTIsNiArMTIsNyBAQAogICAqKiBnZGIuT2JqZmlsZSBvYmplY3RzIGhh dmUgYSBuZXcgYXR0cmlidXRlICJ1c2VybmFtZSIsCiAgICAgIHdoaWNoIGlz IHRoZSBuYW1lIG9mIHRoZSBvYmpmaWxlIGFzIHNwZWNpZmllZCBieSB0aGUg dXNlciwKICAgICAgd2l0aG91dCwgZm9yIGV4YW1wbGUsIHJlc29sdmluZyBz eW1saW5rcy4KKyAgKiogWW91IGNhbiBub3cgd3JpdGUgZnJhbWUgdW53aW5k ZXJzIGluIFB5dGhvbi4KIAogKiBOZXcgY29tbWFuZHMKIApkaWZmIC0tZ2l0 IGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluIGIvZ2RiL2RhdGEt ZGlyZWN0b3J5L01ha2VmaWxlLmluCmluZGV4IGMwMWI4NmQuLjQ3YjQ5NTcg MTAwNjQ0Ci0tLSBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgor KysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KQEAgLTYyLDE3 ICs2MiwyMCBAQCBQWVRIT05fRklMRV9MSVNUID0gXAogCWdkYi9GcmFtZURl Y29yYXRvci5weSBcCiAJZ2RiL3R5cGVzLnB5IFwKIAlnZGIvcHJpbnRpbmcu cHkgXAorCWdkYi9zbmlmZmVyLnB5IFwKIAlnZGIvcHJvbXB0LnB5IFwKIAln ZGIveG1ldGhvZC5weSBcCiAJZ2RiL2NvbW1hbmQvX19pbml0X18ucHkgXAog CWdkYi9jb21tYW5kL3htZXRob2RzLnB5IFwKIAlnZGIvY29tbWFuZC9mcmFt ZV9maWx0ZXJzLnB5IFwKKwlnZGIvY29tbWFuZC9zbmlmZmVycy5weSBcCiAJ Z2RiL2NvbW1hbmQvdHlwZV9wcmludGVycy5weSBcCiAJZ2RiL2NvbW1hbmQv cHJldHR5X3ByaW50ZXJzLnB5IFwKIAlnZGIvY29tbWFuZC9wcm9tcHQucHkg XAogCWdkYi9jb21tYW5kL2V4cGxvcmUucHkgXAogCWdkYi9mdW5jdGlvbi9f X2luaXRfXy5weSBcCiAJZ2RiL2Z1bmN0aW9uL2NhbGxlcl9pcy5weSBcCisg ICAgICAgIGdkYi9mdW5jdGlvbi9zbmlmZmVycy5weSBcCiAJZ2RiL2Z1bmN0 aW9uL3N0cmZucy5weSBcCiAJZ2RiL3ByaW50ZXIvX19pbml0X18ucHkgXAog CWdkYi9wcmludGVyL2JvdW5kX3JlZ2lzdGVycy5weQpkaWZmIC0tZ2l0IGEv Z2RiL2RvYy9weXRob24udGV4aSBiL2dkYi9kb2MvcHl0aG9uLnRleGkKaW5k ZXggZDcyNWViMC4uNjI1MzdkMiAxMDA2NDQKLS0tIGEvZ2RiL2RvYy9weXRo b24udGV4aQorKysgYi9nZGIvZG9jL3B5dGhvbi50ZXhpCkBAIC0xNDQsNiAr MTQ0LDcgQEAgb3B0aW9uYWwgYXJndW1lbnRzIHdoaWxlIHNraXBwaW5nIG90 aGVycy4gIEV4YW1wbGU6CiAqIEZyYW1lIEZpbHRlciBBUEk6OiAgICAgICAg ICAgIEZpbHRlcmluZyBGcmFtZXMuCiAqIEZyYW1lIERlY29yYXRvciBBUEk6 OiAgICAgICAgIERlY29yYXRpbmcgRnJhbWVzLgogKiBXcml0aW5nIGEgRnJh bWUgRmlsdGVyOjogICAgICBXcml0aW5nIGEgRnJhbWUgRmlsdGVyLgorKiBV bndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbjo6ICBXcml0aW5nIGEgZnJhbWUg dW53aW5kZXIgaW4gUHl0aG9uLgogKiBYbWV0aG9kcyBJbiBQeXRob246OiAg ICAgICAgICBBZGRpbmcgYW5kIHJlcGxhY2luZyBtZXRob2RzIG9mIEMrKyBj bGFzc2VzLgogKiBYbWV0aG9kIEFQSTo6ICAgICAgICAgICAgICAgICBYbWV0 aG9kIHR5cGVzLgogKiBXcml0aW5nIGFuIFhtZXRob2Q6OiAgICAgICAgICBX cml0aW5nIGFuIHhtZXRob2QuCkBAIC0yMTc4LDYgKzIxNzksMTAxIEBAIHBy aW50ZWQgaGllcmFyY2hpY2FsbHkuICBBbm90aGVyIGFwcHJvYWNoIHdvdWxk IGJlIHRvIGNvbWJpbmUgdGhlCiBtYXJrZXIgaW4gdGhlIGlubGluZWQgZnJh bWUsIGFuZCBhbHNvIHNob3cgdGhlIGhpZXJhcmNoaWNhbAogcmVsYXRpb25z aGlwLgogCitAbm9kZSBVbndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbgorQHN1 YnN1YnNlY3Rpb24gVW53aW5kaW5nIEZyYW1lcyBpbiBQeXRob24KK0BjaW5k ZXggVW53aW5kaW5nIGZyYW1lcyBpbiBQeXRob24uCisKK0luIEdEQiB0ZXJt aW5vbG9neSBgYHVud2luZGluZycnIGlzIHRoZSBwcm9jZXNzIG9mIGZpbmRp bmcgdGhlCitwcmV2aW91cyBmcmFtZSAodGhhdCBpcywgY2FsbGVyJ3MpIGZy b20gdGhlIGN1cnJlbnQgb25lLiBBIHJ1bm5pbmcgR0RCCittYW50YWlucyBh IGxpc3Qgb2YgdGhlIHVud2luZGVycyBhbmQgY2FsbHMgZWFjaCB1bndpbmRl cidzIHNuaWZmZXIgaW4KK3R1cm4gdW50aWwgaXQgZmluZHMgdGhlIG9uZSB0 aGF0IHJlY29nbml6ZXMgdGhlIGN1cnJlbnQgZnJhbWUuIFRoZXJlCitpcyBh biBBUEkgdG8gcmVnaXN0ZXIgYW4gdW53aW5kZXIuCisKK1RoZSB1bndpbmRl cnMgdGhhdCBjb21lIHdpdGggR0RCIGhhbmRsZSBzdGFuZGFyZCBmcmFtZXMg Zm9yIGVhY2gKK3BsYXRmb3JtIHdoZXJlIEdEQiBpcyBydW5uaW5nLiBIb3dl dmVyLCBtaXhlZCBsYW5ndWFnZSBhcHBsaWNhdGlvbnMKKyhmb3IgZXhhbXBs ZSwgYW5kIGFwcGxpY2F0aW9uIHJ1bm5pbmcgSmF2YSBWaXJ0dWFsIE1hY2hp bmUpIHNvbWV0aW1lcwordXNlIGZyYW1lIGxheW91dHMgdGhhdCBjYW5ub3Qg YmUgaGFuZGxlZCBieSB0aGUgR0RCIHVud2luZGVycy4gWW91CitjYW4gd3Jp dGUgUHl0aG9uIGNvZGUgdGhhdCBjYW4gaGFuZGxlIHN1Y2ggY3VzdG9tIGZy YW1lcy4KKworWW91IGltcGxlbWVudCBhIHNuaWZmZXIgYXMgYSBjbGFzcyB3 aXRoIHdoaWNoIGhhcyB0d28gYXR0cmlidXRlcywKK0Bjb2Rle25hbWV9IGFu ZCBAY29kZXtlbmFibGVkfSwgd2l0aCBvYnZpb3VzIG1lYW5pbmdzLCBhbmQg YSBzaW5nbGUKK21ldGhvZCBAY29kZXtfX2NhbGxfX30sIHdoaWNoIGV4YW1p bmVzIGEgZ2l2ZW4gZnJhbWUgYW5kIHJldHVybnMgdGhlIGRhdGEKK2Rlc2Ny aWJpbmcgaXQgKHRoYXQgaXMsIHdoZW4gaXQgcmVjb2duaXplcyBpdCkuIEdE QiBjb21lcyB3aXRoIHRoZSBtb2R1bGUKK2NvbnRhaW5pbmcgdGhlIGJhc2Ug QGNvZGV7U25pZmZlcn0gY2xhc3MgZm9yIHRoYXQuIFRoZSBzbmlmZmVyIGxv b2tzIGFzCitmb2xsb3dzOgorQHNtYWxsZXhhbXBsZQorZnJvbSBnZGIuc25p ZmZlcnMgaW1wb3J0IFNuaWZmZXIKKworY2xhc3MgTXlTbmlmZmVyKFNuaWZm ZXIpOgorICAgIGRlZiBfX2luaXRfXyguLi4uKToKKyAgICAgICAgc3VwZXIo TXlTbmlmZmVyLCBzZWxmKS5fX2luaXRfX18oPGV4cGVjdHMgc25pZmZlciBu YW1lIGFyZ3VtZW50PikKKyAgICBkZWYgX19jYWxsX18oc25pZmZlcl9pbmZv KToKKyAgICAgICAgaWYgbm90IDx3ZSByZWNvZ25pemUgZnJhbWU+OgorICAg ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgPGZpbmQgcHJldmlvdXMg ZnJhbWUgcmVnaXN0ZXJzPgorICAgICAgICByZXR1cm4gKDxyZWdpc3RlcnM+ LCA8ZnJhbWUgSUQgcmVnaXN0ZXJzPikKK0BlbmQgc21hbGxleGFtcGxlCisK K0BzdWJoZWFkaW5nIEV4YW1pbmluZyBUaGUgQ3VycmVudCBGcmFtZQorCitA dmFsdWV7R0RCTn0gcGFzc2VzIGEgQGNvZGV7Z2RiLlNuaWZmZXJJbmZvfSBp bnN0YW5jZSB3aGVuIGl0IGNhbGxzCitzbmlmZmVyJ3MgQGNvZGV7X19jYWxs X199IG1ldGhvZC4gVGhpcyBjbGFzcyBoYXMgYSBzaW5nbGUgbWV0aG9kOgor CitAZGVmdW4gU25pZmZlckluZm8ucmVhZF9yZWdpc3RlciAoc2VsZiwgcmVn bnVtKQorVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhl IHJlZ2lzdGVyIEB2YXJ7cmVnbnVtfSBpbiB0aGUKK2ZyYW1lIGFzIGEgQGNv ZGV7Z2RiLlZhbHVlfSBvYmplY3QuIEB2YXJ7cmVnbnVtfSB2YWx1ZXMgYXJl CitwbGF0Zm9ybS1zcGVjaWZpYy4gVGhleSBhcmUgdXN1YWxseSBkZWZpbmVk IGluIHRoZSBjb3JyZXNwb25kaW5nCit4eHgtQGNvZGV7dGRlcC5ofSBmaWxl IGluIHRoZSBnZGIgc291cmNlIHRyZWUuCitAZW5kIGRlZnVuCisKK0BzdWJo ZWFkaW5nIFJldHVybmluZyBQcmV2aW91cyBGcmFtZQorCitJZiBzbmlmZmVy J3MgQGNvZGV7X19jYWxsX199IG1ldGhvZCByZWNvZ25pemVzIHRoZSBmcmFt ZSwgaXQgc2hvdWxkCityZXR1cm4gYSAoQHZhcntyZWdpc3RlcnN9LCBAdmFy e2ZyYW1lX2lkX3JlZ2lzdGVyX251bWJlcnN9KSB0dXBsZS4KKworQHZhcnty ZWdpc3RlcnN9IGRlc2NyaWJlIHRoZSByZWdpc3RlcnMgdGhhdCBjYW4gYmUg dW53b3VuZCAoaS5lLiwgdGhlCityZWdpc3RlcnMgZnJvbSB0aGUgcHJldmlv dXMgZnJhbWUgdGhhdCBoYXZlIGJlZW4gc2F2ZWQgaW4gdGhlIGN1cnJlbnQK K2ZyYW1lIGRlc2NyaWJlZCBieSBAdmFye3NuaWZmZXJfaW5mb30pLiBJdCBp cyBhIHR1cGxlIHdoZXJlIGVhY2gKK2VsZW1lbnQgaXMgYSAoQHZhcntyZWdu dW19LCBAdmFye3JlZ2RhdGF9KSAyLXR1cGxlLiAgQHZhcntyZWdudW19IGlz CithIHJlZ2lzdGVyIG51bWJlciwgYW5kIEB2YXJ7cmVnZGF0YX0gaXMgcmVn aXN0ZXIgY29udGVudHMgKGEKK0Bjb2Rle2dkYi5WYWx1ZX0gb2JqZWN0KS4K KworQHZhcntmcmFtZV9pZF9yZWdpc3Rlcl9udW1iZXJzfSBpcyBhIHR1cGxl IHNwZWNpZnlpbmcgdGhlIHJlZ2lzdGVycwordXNlZCB0byBjb25zdHJ1Y3Qg ZnJhbWUgSUQgb2YgdGhlIHJldHVybmVkIGZyYW1lLiAgSXQgaXMgYSAoQHZh cntzcH0pLAorKEB2YXJ7c3B9LCBAdmFye3BjfSkgb3IgKEB2YXJ7c3B9LCBA dmFye3BjfSwgQHZhcntzcGVjaWFsfSkgdHVwbGUsCit3aGVyZSBAdmFye3Nw fSwgQHZhcntwY30sIEB2YXJ7c3BlY2lhbH0gYXJlIHJlZ2lzdGVyIG51bWJl cnMuIFRoZQorcmVmZXJlbmNlZCByZWdpc3RlcnMgc2hvdWxkIGJlIHByZXNl bnQgaW4gQHZhcntyZWdpc3RlcnN9IHR1cGxlLiBUaGUKK2ZyYW1lIElEIGlz IGNvbnN0cnVjdGVkIGJ5IGNhbGxpbmcKK0Bjb2Rle2ZyYW1lX2lkX2J1aWxk X3dpbGR9KEB2YXJ7dmFsdWV9KEB2YXJ7c3B9KSksCitAY29kZXtmcmFtZV9p ZF9idWlsZH0oQHZhcnt2YWx1ZX0oQHZhcntzcH0pLCBAdmFye3ZhbHVlfShA dmFye3BjfSkpLAorb3IgQGNvZGV7ZnJhbWVfaWRfYnVpbGR9KEB2YXJ7dmFs dWV9KEB2YXJ7c3B9KSwgQHZhcnt2YWx1ZX0oQHZhcntwY30pLAorQHZhcnt2 YWx1ZX0oQHZhcntzcGVjaWFsfSkpIHJlc3BlY3RpdmVseS4KKworQHN1Ymhl YWRpbmcgUmVnaXN0ZXJpbmcgYSBTbmlmZmVyCisKK0FuIG9iamVjdCBmaWxl LCBhIHByb2dyYW0gc3BhY2UsIGFuZCB0aGUgQHZhbHVle0dEQk59IHByb3Bl ciBjYW4gaGF2ZQorc25pZmZlcnMgcmVnaXN0ZXJlZCB3aXRoIGl0LgorCitU aGUgQGNvZGV7Z2RiLnNuaWZmZXJzfSBtb2R1bGUgcHJvdmlkZXMgdGhlIGZ1 bmN0aW9uIHRvIHJlZ2lzdGVyIGEKK3NuaWZmZXI6CisKK0BkZWZ1biBnZGIu c25pZmZlci5yZWdpc3Rlcl9zbmlmZmVyIChsb2N1cywgc25pZmZlciwgcmVw bGFjZT1GYWxzZSkKK0B2YXJ7bG9jdXN9IGlzIHNwZWNpZmllcyBhbiBvYmpl Y3QgZmlsZSBvciBhIHByb2dyYW0gc3BhY2UgdG8gd2hpY2gKK0B2YXJ7c25p ZmZlcn0gaXMgYWRkZWQuIFBhc3NpbmcgQGNvZGV7Tm9uZX0gb3IgQGNvZGV7 Z2RifSBhZGRzCitAdmFye3NuaWZmZXJ9IHRvIHRoZSBAdmFsdWV7R0RCTn0n cyBnbG9iYWwgc25pZmZlciBsaXN0LiAgVGhlIG5ld2x5CithZGRlZCBAdmFy e3NuaWZmZXJ9IHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgc25p ZmZlciBmcm9tIHRoZQorc2FtZSBsb2N1cy4gIFR3byBzbmlmZmVycyBpbiB0 aGUgc2FtZSBsb2N1cyBjYW5ub3QgaGF2ZSB0aGUgc2FtZQorbmFtZS4gQW4g YXR0ZW1wdCB0byBhZGQgYSBzbmlmZmVyIHdpdGggYWxyZWFkeSBleGlzdGlu ZyBuYW1lIHJhaXNlcyBhbgorZXhjZXB0aW9uIHVubGVzcyBAdmFye3JlcGxh Y2V9IGlzIEBjb2Rle1RydWV9LCBpbiB3aGljaCBjYXNlIHRoZSBvbGQKK3Nu aWZmZXIgaXMgZGVsZXRlZC4KK0BlbmQgZGVmdW4KKworQHN1YmhlYWRpbmcg U25pZmZlciBQcmVjZWRlbmNlCisKK0B2YWx1ZXtHREJOfSBmaXJzdCBjYWxs cyB0aGUgc25pZmZlcnMgZnJvbSBhbGwgdGhlIG9iamVjdCBmaWxlcyBpbiBu bworcGFydGljdWxhciBvcmRlciwgdGhlbiB0aGUgc25pZmZlcnMgZnJvbSB0 aGUgY3VycmVudCBwcm9ncmFtIHNwYWNlLAorYW5kIGZpbmFsbHkgdGhlIHNu aWZmZXJzIGZyb20gQHZhbHVle0dEQk59LgorCiBAbm9kZSBYbWV0aG9kcyBJ biBQeXRob24KIEBzdWJzdWJzZWN0aW9uIFhtZXRob2RzIEluIFB5dGhvbgog QGNpbmRleCB4bWV0aG9kcyBpbiBQeXRob24KZGlmZiAtLWdpdCBhL2dkYi9w eXRob24vbGliL2dkYi9fX2luaXRfXy5weSBiL2dkYi9weXRob24vbGliL2dk Yi9fX2luaXRfXy5weQppbmRleCA5MmIwNmYyLi44ZDdmNjUxIDEwMDY0NAot LS0gYS9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKKysrIGIvZ2Ri L3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5CkBAIC03MSw2ICs3MSw4IEBA IHR5cGVfcHJpbnRlcnMgPSBbXQogeG1ldGhvZHMgPSBbXQogIyBJbml0aWFs IGZyYW1lIGZpbHRlcnMuCiBmcmFtZV9maWx0ZXJzID0ge30KKyMgSW5pdGlh bCBmcmFtZSBzbmlmZmVycy4KK2ZyYW1lX3NuaWZmZXJzID0gW10KIAogIyBD b252ZW5pZW5jZSB2YXJpYWJsZSB0byBHREIncyBweXRob24gZGlyZWN0b3J5 CiBQWVRIT05ESVIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1l KF9fZmlsZV9fKSkKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGliL2dkYi9j b21tYW5kL3NuaWZmZXJzLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1h bmQvc25pZmZlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uYjM0MDQzNAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9weXRob24v bGliL2dkYi9jb21tYW5kL3NuaWZmZXJzLnB5CkBAIC0wLDAgKzEsMTk4IEBA CisjIFNuaWZmZXIgY29tbWFuZHMuCisjIENvcHlyaWdodCAyMDEzLTIwMTUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisKK2ltcG9ydCBnZGIKK2ltcG9ydCByZQorCisKK2RlZiB2YWxpZGF0 ZV9yZWdleHAoZXhwLCBpZHN0cmluZyk6CisgICAgdHJ5OgorICAgICAgICBy ZXR1cm4gcmUuY29tcGlsZShleHApCisgICAgZXhjZXB0IFN5bnRheEVycm9y OgorICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiaW52YWxpZCAlcyByZWdl eHA6ICVzIiAlIChpZHN0cmluZywgZXhwKSkKKworCitkZWYgcGFyc2Vfc25p ZmZlcl9jb21tYW5kX2FyZ3MoYXJnKToKKyAgICAiIiJJbnRlcm5hbCB1dGls aXR5IHRvIHBhcnNlIHNuaWZmZXIgY29tbWFuZCBhcmd2LgorCisgICAgQXJn dW1lbnRzOgorICAgICAgICBhcmc6IFRoZSBhcmd1bWVudHMgdG8gdGhlIGNv bW1hbmQuIFRoZSBmb3JtYXQgaXM6CisgICAgICAgICAgICAgW2xvY3VzLXJl Z2V4cCBbbmFtZS1yZWdleHBdXQorCisgICAgUmV0dXJuczoKKyAgICAgICAg QSAyLXR1cGxlIG9mIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisK KyAgICBSYWlzZXM6CisgICAgICAgIFN5bnRheEVycm9yOiBhbiBlcnJvciBw cm9jZXNzaW5nIEFSRworICAgICIiIgorCisgICAgYXJndiA9IGdkYi5zdHJp bmdfdG9fYXJndihhcmcpCisgICAgYXJnYyA9IGxlbihhcmd2KQorICAgIGlm IGFyZ2MgPiAyOgorICAgICAgICByYWlzZSBTeW50YXhFcnJvcigidG9vIG1h bnkgYXJndW1lbnRzIikKKyAgICBsb2N1c19yZWdleHAgPSAiIgorICAgIG5h bWVfcmVnZXhwID0gIiIKKyAgICBpZiBhcmdjID49IDE6CisgICAgICAgIGxv Y3VzX3JlZ2V4cCA9IGFyZ3ZbMF0KKyAgICAgICAgaWYgYXJnYyA+PSAyOgor ICAgICAgICAgICAgbmFtZV9yZWdleHAgPSBhcmd2WzFdCisgICAgcmV0dXJu ICh2YWxpZGF0ZV9yZWdleHAobG9jdXNfcmVnZXhwLCAibG9jdXMiKSwKKyAg ICAgICAgICAgIHZhbGlkYXRlX3JlZ2V4cChuYW1lX3JlZ2V4cCwgInNuaWZm ZXIiKSkKKworCitjbGFzcyBJbmZvU25pZmZlcihnZGIuQ29tbWFuZCk6Cisg ICAgIiIiR0RCIGNvbW1hbmQgdG8gbGlzdCBzbmlmZmVycy4KKworICAgIFVz YWdlOiBpbmZvIHNuaWZmZXIgW2xvY3VzLXJlZ2V4cCBbbmFtZS1yZWdleHBd XQorCisgICAgTE9DVVMtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9u IG1hdGNoaW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUKKyAgICBzbmlmZmVyLiAg SWYgaXQgaXMgb21pdHRlZCwgYWxsIHJlZ2lzdGVyZWQgc25pZmZlcnMgZnJv bSBhbGwgbG9jaQorICAgIGFyZSBsaXN0ZWQuICBBIGxvY3VzIGNvdWxkIGJl ICdnbG9iYWwnLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgIG1hdGNoaW5n IHRoZSBjdXJyZW50IHByb2dyYW0gc3BhY2UncyBmaWxlbmFtZSwgb3IgYSBy ZWd1bGFyCisgICAgZXhwcmVzc2lvbiBtYXRjaGluZyBmaWxlbmFtZXMgb2Yg b2JqZmlsZXMuICBMb2N1cyBjb3VsZCBiZQorICAgICdwcm9nc3BhY2UnIHRv IHNwZWNpZnkgdGhhdCBvbmx5IHNuaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQK KyAgICBwcm9nc3BhY2Ugc2hvdWxkIGJlIGxpc3RlZC4KKworICAgIE5BTUUt UkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBzbmlm ZmVyIG5hbWVzLgorICAgIElmIHRoaXMgb21pdHRlZCBmb3IgYSBzcGVjaWZp ZWQgbG9jdXMsIHRoZW4gYWxsIHJlZ2lzdGVyZWQKKyAgICBzbmlmZmVycyBp biB0aGUgbG9jdXMgYXJlIGxpc3RlZC4KKyAgICAiIiIKKworICAgIGRlZiBf X2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoSW5mb1NuaWZmZXIsIHNl bGYpLl9faW5pdF9fKCJpbmZvIHNuaWZmZXIiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSkK KworICAgIGRlZiBsaXN0X3NuaWZmZXJzKHNlbGYsIHRpdGxlLCBzbmlmZmVy cywgbmFtZV9yZSk6CisgICAgICAgICIiIkxpc3RzIHRoZSBzbmlmZmVycyB3 aG9zZSBuYW1lIG1hdGNoZXMgcmVnZXhwLgorCisgICAgICAgIEFyZ3VtZW50 czoKKyAgICAgICAgICAgIHRpdGxlOiBUaGUgbGluZSB0byBwcmludCBiZWZv cmUgdGhlIGxpc3QuCisgICAgICAgICAgICBzbmlmZmVyczogVGhlIGxpc3Qg b2YgdGhlIHNuaWZmZXJzLgorICAgICAgICAgICAgbmFtZV9yZTogc25pZmZl ciBuYW1lIGZpbHRlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBz bmlmZmVyczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwcmludCB0 aXRsZQorICAgICAgICBmb3Igc25pZmZlciBpbiBzbmlmZmVyczoKKyAgICAg ICAgICAgIGlmIG5hbWVfcmUubWF0Y2goc25pZmZlci5uYW1lKToKKyAgICAg ICAgICAgICAgICBwcmludCgiICAlcyVzIiAlIChzbmlmZmVyLm5hbWUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgaWYgc25pZmZl ci5lbmFibGVkIGVsc2UgIltkaXNhYmxlZF0iKSkKKworICAgIGRlZiBpbnZv a2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6CisgICAgICAgIGxvY3VzX3JlLCBu YW1lX3JlID0gcGFyc2Vfc25pZmZlcl9jb21tYW5kX2FyZ3MoYXJnKQorICAg ICAgICBpZiBsb2N1c19yZS5tYXRjaCgiZ2xvYmFsIik6CisgICAgICAgICAg ICBzZWxmLmxpc3Rfc25pZmZlcnMoImdsb2JhbCBzbmlmZmVyczoiLCBnZGIu ZnJhbWVfc25pZmZlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmFtZV9yZSkKKyAgICAgICAgaWYgbG9jdXNfcmUubWF0Y2goInByb2dz cGFjZSIpOgorICAgICAgICAgICAgY3AgPSBnZGIuY3VycmVudF9wcm9nc3Bh Y2UoKQorICAgICAgICAgICAgc2VsZi5saXN0X3NuaWZmZXJzKCJwcm9nc3Bh Y2UgJXMgc25pZmZlcnM6IiAlIGNwLmZpbGVuYW1lLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNwLmZyYW1lX3NuaWZmZXJzLCBuYW1lX3Jl KQorICAgICAgICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmlsZXMoKToKKyAg ICAgICAgICAgIGlmIGxvY3VzX3JlLm1hdGNoKG9iamZpbGUuZmlsZW5hbWUp OgorICAgICAgICAgICAgICAgIHNlbGYubGlzdF9zbmlmZmVycygib2JqZmls ZSAlcyBzbmlmZmVyczoiICUgb2JqZmlsZS5maWxlbmFtZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZmlsZS5mcmFtZV9zbmlm ZmVycywgbmFtZV9yZSkKKworCitkZWYgZG9fZW5hYmxlX3NuaWZmZXIxKHNu aWZmZXJzLCBuYW1lX3JlLCBmbGFnKToKKyAgICAiIiJFbmFibGUvZGlzYWJs ZSBzbmlmZmVycyB3aG9zZSBuYW1lcyBtYXRjaCBnaXZlbiByZWdleC4KKwor ICAgIEFyZ3VtZW50czoKKyAgICAgICAgc25pZmZlcnM6IFRoZSBsaXN0IG9m IHNuaWZmZXJzLgorICAgICAgICBuYW1lX3JlOiBTbmlmZmVyIG5hbWUgZmls dGVyLgorICAgICAgICBmbGFnOiBFbmFibGUvZGlzYWJsZS4KKworICAgIFJl dHVybnM6CisgICAgICAgIFRoZSBudW1iZXIgb2Ygc25pZmZlcnMgYWZmZWN0 ZWQuCisgICAgIiIiCisgICAgdG90YWwgPSAwCisgICAgZm9yIHNuaWZmZXIg aW4gc25pZmZlcnM6CisgICAgICAgIGlmIG5hbWVfcmUubWF0Y2goc25pZmZl ci5uYW1lKToKKyAgICAgICAgICAgIHNuaWZmZXIuZW5hYmxlZCA9IGZsYWcK KyAgICAgICAgICAgIHRvdGFsICs9IDEKKyAgICByZXR1cm4gdG90YWwKKwor CitkZWYgZG9fZW5hYmxlX3NuaWZmZXIoYXJnLCBmbGFnKToKKyAgICAiIiJF bmFibGUvZGlzYWJsZSBzbmlmZmVyKHMpLiIiIgorICAgIChsb2N1c19yZSwg bmFtZV9yZSkgPSBwYXJzZV9zbmlmZmVyX2NvbW1hbmRfYXJncyhhcmcpCisg ICAgdG90YWwgPSAwCisgICAgaWYgbG9jdXNfcmUubWF0Y2goImdsb2JhbCIp OgorICAgICAgICB0b3RhbCArPSBkb19lbmFibGVfc25pZmZlcjEoZ2RiLmZy YW1lX3NuaWZmZXJzLCBuYW1lX3JlLCBmbGFnKQorICAgIGlmIGxvY3VzX3Jl Lm1hdGNoKCJwcm9nc3BhY2UiKToKKyAgICAgICAgdG90YWwgKz0gZG9fZW5h YmxlX3NuaWZmZXIxKGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpLmZyYW1lX3Nu aWZmZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmFtZV9yZSwgZmxhZykKKyAgICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmls ZXMoKToKKyAgICAgICAgaWYgbG9jdXNfcmUubWF0Y2gob2JqZmlsZS5maWxl bmFtZSk6CisgICAgICAgICAgICB0b3RhbCArPSBkb19lbmFibGVfc25pZmZl cjEob2JqZmlsZS5mcmFtZV9zbmlmZmVycywgbmFtZV9yZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnKQorICAgIHBy aW50KCIlZCBzbmlmZmVyJXMgJXMiICUgKHRvdGFsLCAiIiBpZiB0b3RhbCA9 PSAxIGVsc2UgInMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJlbmFibGVkIiBpZiBmbGFnIGVsc2UgImRpc2FibGVkIikpCisKKworY2xh c3MgRW5hYmxlU25pZmZlcihnZGIuQ29tbWFuZCk6CisgICAgIiIiR0RCIGNv bW1hbmQgdG8gZW5hYmxlIHNuaWZmZXJzLgorCisgICAgVXNhZ2U6IGVuYWJs ZSBzbmlmZmVyIFtsb2N1cy1yZWdleHAgW25hbWUtcmVnZXhwXV0KKworICAg IExPQ1VTLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGlu ZyB0aGUgb2JqZWN0cyB0byBleGFtaW5lLgorICAgIExvY2kgYXJlICJnbG9i YWwiLCB0aGUgcHJvZ3JhbSBzcGFjZSdzIGZpbGUsIGFuZCB0aGUgb2JqZmls ZXMgd2l0aGluCisgICAgdGhhdCBwcm9ncmFtIHNwYWNlLgorCisgICAgTkFN RV9SRUdFWFAgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIHNu aWZmZXIgbmFtZXMuCisgICAgSWYgdGhpcyBvbWl0dGVkIGZvciBhIHNwZWNp ZmllZCBsb2N1cywgdGhlbiBhbGwgcmVnaXN0ZXJlZAorICAgIHNuaWZmZXJz IGluIHRoZSBsb2N1cyBhcmUgYWZmZWN0ZWQuCisgICAgIiIiCisKKyAgICBk ZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKEVuYWJsZVNuaWZm ZXIsIHNlbGYpLl9faW5pdF9fKCJlbmFibGUgc25pZmZlciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01N QU5EX0RBVEEpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90 dHkpOgorICAgICAgICAiIiJHREIgY2FsbHMgdGhpcyB0byBwZXJmb3JtIHRo ZSBjb21tYW5kLiIiIgorICAgICAgICBkb19lbmFibGVfc25pZmZlcihhcmcs IFRydWUpCisKKworY2xhc3MgRGlzYWJsZVNuaWZmZXIoZ2RiLkNvbW1hbmQp OgorICAgICIiIkdEQiBjb21tYW5kIHRvIGRpc2FibGUgdGhlIHNwZWNpZmll ZCBzbmlmZmVyLgorCisgICAgVXNhZ2U6IGRpc2FibGUgc25pZmZlciBbbG9j dXMtcmVnZXhwIFtuYW1lLXJlZ2V4cF1dCisKKyAgICBMT0NVUy1SRUdFWFAg aXMgYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgdGhlIG9iamVjdHMg dG8gZXhhbWluZS4KKyAgICBMb2NpIGFyZSAiZ2xvYmFsIiwgdGhlIHByb2dy YW0gc3BhY2UncyBmaWxlLCBhbmQgdGhlIG9iamZpbGVzIHdpdGhpbgorICAg IHRoYXQgcHJvZ3JhbSBzcGFjZS4KKworICAgIE5BTUVfUkVHRVhQIGlzIGEg cmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBzbmlmZmVyIG5hbWVzLgor ICAgIElmIHRoaXMgb21pdHRlZCBmb3IgYSBzcGVjaWZpZWQgbG9jdXMsIHRo ZW4gYWxsIHJlZ2lzdGVyZWQKKyAgICBzbmlmZmVycyBpbiB0aGUgbG9jdXMg YXJlIGFmZmVjdGVkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl bGYpOgorICAgICAgICBzdXBlcihEaXNhYmxlU25pZmZlciwgc2VsZikuX19p bml0X18oImRpc2FibGUgc25pZmZlciIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9EQVRBKQor CisgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKyAgICAg ICAgIiIiR0RCIGNhbGxzIHRoaXMgdG8gcGVyZm9ybSB0aGUgY29tbWFuZC4i IiIKKyAgICAgICAgZG9fZW5hYmxlX3NuaWZmZXIoYXJnLCBGYWxzZSkKKwor CitkZWYgcmVnaXN0ZXJfc25pZmZlcl9jb21tYW5kcygpOgorICAgICIiIklu c3RhbGxzIHRoZSBzbmlmZmVyIGNvbW1hbmRzLiIiIgorICAgIEluZm9Tbmlm ZmVyKCkKKyAgICBFbmFibGVTbmlmZmVyKCkKKyAgICBEaXNhYmxlU25pZmZl cigpCisKKworcmVnaXN0ZXJfc25pZmZlcl9jb21tYW5kcygpCmRpZmYgLS1n aXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvZnVuY3Rpb24vc25pZmZlcnMucHkg Yi9nZGIvcHl0aG9uL2xpYi9nZGIvZnVuY3Rpb24vc25pZmZlcnMucHkKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhNjYwNAotLS0g L2Rldi9udWxsCisrKyBiL2dkYi9weXRob24vbGliL2dkYi9mdW5jdGlvbi9z bmlmZmVycy5weQpAQCAtMCwwICsxLDUzIEBACisjIENvcHlyaWdodCAoQykg MjAxMy0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisj IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorCisiIiJJbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHdv cmtpbmcgd2l0aCBmcmFtZSBzbmlmZmVycy4iIiIKKworaW1wb3J0IGdkYgor CisKK2RlZiBleGVjdXRlX3NuaWZmZXJzKHNuaWZmZXJfaW5mbyk6CisgICAg IiIiSW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCIHRvIGV4ZWN1 dGUgYWxsIHNuaWZmZXJzLgorCisgICAgUnVucyBlYWNoIGN1cnJlbnRseSBl bmFibGVkIHNuaWZmZXIgdW50aWwgaXQgZmluZHMgdGhlIG9uZSB0aGF0IGNh bgorICAgIHVud2luZCBnaXZlbiBmcmFtZS4KKworICAgIEFyZ3VtZW50czoK KyAgICAgICAgc25pZmZlcl9pbmZvOiBhbiBpbnN0YW5jZSBvZiBnZGIuU25p ZmZlckluZm8uCisgICAgUmV0dXJuczoKKyAgICAgICAgVW53aW5kIGluZm8g b3IgTm9uZS4gU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFsdWUgcmV0 dXJuZWQKKyAgICAgICAgYnkgU25pZmZlci5fX2NhbGxfXyBiZWxvdy4KKyAg ICAiIiIKKyAgICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmlsZXMoKToKKyAg ICAgICAgZm9yIHNuaWZmZXIgaW4gb2JqZmlsZS5mcmFtZV9zbmlmZmVyczoK KyAgICAgICAgICAgIGlmIHNuaWZmZXIuZW5hYmxlZDoKKyAgICAgICAgICAg ICAgICB1bndpbmRfaW5mbyA9IHNuaWZmZXIuX19jYWxsX18oc25pZmZlcl9p bmZvKQorICAgICAgICAgICAgICAgIGlmIHVud2luZF9pbmZvIGlzIG5vdCBO b25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW53aW5kX2luZm8K KworICAgIGN1cnJlbnRfcHJvZ3NwYWNlID0gZ2RiLmN1cnJlbnRfcHJvZ3Nw YWNlKCkKKyAgICBmb3Igc25pZmZlciBpbiBjdXJyZW50X3Byb2dzcGFjZS5m cmFtZV9zbmlmZmVyczoKKyAgICAgICAgaWYgc25pZmZlci5lbmFibGVkOgor ICAgICAgICAgICAgdW53aW5kX2luZm8gPSBzbmlmZmVyLl9fY2FsbF9fKHNu aWZmZXJfaW5mbykKKyAgICAgICAgICAgIGlmIHVud2luZF9pbmZvIGlzIG5v dCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiB1bndpbmRfaW5mbwor CisgICAgZm9yIHNuaWZmZXIgaW4gZ2RiLmZyYW1lX3NuaWZmZXJzOgorICAg ICAgICBpZiBzbmlmZmVyLmVuYWJsZWQ6CisgICAgICAgICAgICB1bndpbmRf aW5mbyA9IHNuaWZmZXIuX19jYWxsX18oc25pZmZlcl9pbmZvKQorICAgICAg ICAgICAgaWYgdW53aW5kX2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAg ICAgICAgcmV0dXJuIHVud2luZF9pbmZvCisKKyAgICByZXR1cm4gTm9uZQpk aWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL3NuaWZmZXIucHkgYi9n ZGIvcHl0aG9uL2xpYi9nZGIvc25pZmZlci5weQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi42YzlmMzI3Ci0tLSAvZGV2L251bGwKKysr IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL3NuaWZmZXIucHkKQEAgLTAsMCArMSwx MTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyIiIlNu aWZmZXIgY2xhc3MgYW5kIHJlZ2lzdGVyX3NuaWZmZXIgZnVuY3Rpb24uIiIi CisKK2ltcG9ydCBnZGIKKworCitjbGFzcyBTbmlmZmVyKG9iamVjdCk6Cisg ICAgIiIiQmFzZSBjbGFzcyAob3IgYSB0ZW1wbGF0ZSkgZm9yIGZyYW1lIHNu aWZmZXJzIHdyaXR0ZW4gaW4gUHl0aG9uLgorCisgICAgQSBzbmlmZmVyIGhh cyBhIHNpbmdsZSBtZXRob2QgX19jYWxsX18gYW5kIHRoZSBhdHRyaWJ1dGVz IGRlc2NyaWJlZCBiZWxvdy4KKworICAgIEF0dHJpYnV0ZXM6CisgICAgICAg IG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBzbmlmZmVyLgorICAgICAgICBlbmFi bGVkOiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzbmlmZmVy IGlzIGVuYWJsZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs ZiwgbmFtZSk6CisgICAgICAgICIiIkNvbnN0cnVjdG9yLgorCisgICAgICAg IEFyZ3M6CisgICAgICAgICAgICBuYW1lOiBBbiBpZGVudGlmeWluZyBuYW1l IGZvciB0aGUgc25pZmZlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYu bmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5lbmFibGVkID0gVHJ1ZQorCisg ICAgZGVmIF9fY2FsbF9fKHNlbGYsIHNuaWZmZXJfaW5mbyk6CisgICAgICAg ICIiIkdEQiBjYWxscyB0aGlzIG1ldGhvZCB0byB1bndpbmQgYSBmcmFtZS4K KworICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAgICBzbmlmZmVyX2lu Zm86IEFuIGluc3RhbmNlIG9mIGdkYi5TbmlmZmVySW5mbyBkZXNjcmliaW5n IHRoZSBmcmFtZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAg KFJFR19EQVRBLCBGUkFNRV9JRF9SRUdOVU1TKSB0dXBsZSwgb3IgTm9uZSBp ZiB0aGlzIHNuaWZmZXIgY2Fubm90CisgICAgICAgICAgICB1bndpbmQgdGhl IGZyYW1lLgorICAgICAgICAgICAgUkVHX0RBVEEgaXMgYSB0dXBsZSBjb250 YWluaW5nIHRoZSByZWdpc3RlcnMgaW4gdGhlIHVud291bmQgZnJhbWUuCisg ICAgICAgICAgICBFYWNoIGVsZW1lbnQgaW4gdGhyIFJFR19EQVRBIGlzIGEg KFJFR19OVU0sIFJFR19WQUxVRSkgdHVwbGUsCisgICAgICAgICAgICB3aGVy ZSBSRUdfTlVNIGlzIHBsYXRmb3JtLXNwZWNpZmljIHJlZ2lzdGVyIG51bWJl ciwgYW5kIFJFR19WQUxVRQorICAgICAgICAgICAgaXMgcmVnaXN0ZXIgdmFs dWUgKGEgZ2RiLlZhbHVlIGluc3RhbmNlKS4KKyAgICAgICAgICAgIEZSQU1F X0lEX1JFR05VTVMgaXMgYSB0dXBsZSBzcGVjaWZ5aW5nIHRoZSByZWdpc3Rl cnMgdXNlZAorICAgICAgICAgICAgdG8gY29uc3RydWN0IHRoZSBmcmFtZSBJ RC4gRm9yIGluc3RhbmNlLCBvbiB4ODZfNjQsCisgICAgICAgICAgICBGUkFN RV9JRF9SRUdOVU1TIGlzICg3LCAxNiksIGFzIDcgaXMgdGhlIHN0YWNrIHBv aW50ZXIKKyAgICAgICAgICAgIHJlZ2lzdGVyIChSU1ApLCBhbmQgMTYgaXMg dGhlIGluc3RydWN0aW9uIHBvaW50ZXIgKFJJUCkuCisgICAgICAgICAgICBG UkFNRV9JRF9SRUdOVU1TIGlzIGEgKFNQKSwgKFNQLCBQQyksIG9yIChTUCwg UEMsIFNQRUNJQUwpCisgICAgICAgICAgICB0dXBsZSwgd2hlcmUgU1AsIFBD LCBhbmQgU1BFQ0lBTCBhcmUgcmVnaXN0ZXIgbnVtYmVycy4gRGVwZW5kaW5n CisgICAgICAgICAgICBvbiB0aGUgdHVwbGUsIFB5dGhvbiBzbmlmZmVyIHN1 cHBvcnQgY29kZSB1c2VzIGludGVybmFsIEdEQgorICAgICAgICAgICAgZnVu Y3Rpb25zIHRvIGNvbnN0cnVjdCBmcmFtZSBJRCBhcyBmb2xsb3dzOgorICAg ICAgICAgICAgKFNQKSAgICAgICAgICAgICAgICAgIGZyYW1lX2lkX2J1aWxk X3dpbGQgKFZhbHVlKFNQKSkKKyAgICAgICAgICAgIChTUCwgUEMpICAgICAg ICAgICAgICBmcmFtZV9pZF9idWlsZCAoVmFsdWUoU1ApLCBWYWx1ZShQQykp CisgICAgICAgICAgICAoU1AsIFBDLCBTUEVDSUFMKSAgICAgZnJhbWVfaWRf YnVpbGRfc3BlY2lhbCAoVmFsdWUoU1ApLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWYWx1ZShQQyksIFZhbHVlKFNQRUNJQUwpCisg ICAgICAgICAgICBUaGUgcmVnaXN0ZXJzIGluIHRoZSBGUkFNRV9JRF9SRUdO VU1TIHR1cGxlIHNob3VsZCBiZSBhbW9uZyB0aG9zZQorICAgICAgICAgICAg cmV0dXJuZWQgYnkgUkVHX0RBVEEuCisgICAgICAgICAgICBUaGUgY2hhcHRl ciAiU3RhY2sgRnJhbWVzIiBpbiB0aGUgR0RCIEludGVybmFscyBHdWlkZSBk ZXNjcmliZXMKKyAgICAgICAgICAgIGZyYW1lIElELgorICAgICAgICAiIiIK KyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiU25pZmZlciBf X2NhbGxfXyIpCisKKworZGVmIHJlZ2lzdGVyX3NuaWZmZXIobG9jdXMsIHNu aWZmZXIsIHJlcGxhY2U9RmFsc2UpOgorICAgICIiIlJlZ2lzdGVyIHNuaWZm ZXIgaW4gZ2l2ZW4gbG9jdXMuCisKKyAgICBUaGUgc25pZmZlciBpcyBwcmVw ZW5kZWQgdG8gdGhlIGxvY3VzJ3Mgc25pZmZlcnMgbGlzdC4gU25pZmZlcgor ICAgIG5hbWUgc2hvdWxkIGJlIHVuaXF1ZS4KKworICAgIEFyZ3VtZW50czoK KyAgICAgICAgbG9jdXM6IEVpdGhlciBhbiBvYmpmaWxlLCBwcm9nc3BhY2Us IG9yIE5vbmUgKGluIHdoaWNoIGNhc2UKKyAgICAgICAgICAgICAgIHRoZSBz bmlmZmVyIGlzIHJlZ2lzdGVyZWQgZ2xvYmFsbHkpLgorICAgICAgICBzbmlm ZmVyOiBBbiBvYmplY3Qgb2YgYSBnZGIuU25pZmZlciBzdWJjbGFzcworICAg ICAgICByZXBsYWNlOiBJZiBUcnVlLCByZXBsYWNlcyBleGlzdGluZyBzbmlm ZmVyIHdpdGggdGhlIHNhbWUgbmFtZS4KKyAgICAgICAgICAgICAgICAgT3Ro ZXJ3aXNlLCByYWlzZXMgZXhjZXB0aW9uIGlmIHNuaWZmZXIgd2l0aCB0aGUg c2FtZQorICAgICAgICAgICAgICAgICBhbWUgYWxyZWFkeSBleGlzdHMuCisK KyAgICBSZXR1cm5zOgorICAgICAgICBOb3RoaW5nLgorCisgICAgUmFpc2Vz OgorICAgICAgICBWYWx1ZUVycm9yOiBzbmlmZmVyIG5hbWUgY29udGFpbnMg JzsnLgorICAgICAgICBSdW50aW1lRXJyb3I6IFNuaWZmZXIgbmFtZSBpcyBu b3QgdW5pcXVlLgorCisgICAgIiIiCisgICAgaWYgc25pZmZlci5uYW1lLmZp bmQoIjsiKSA+PSAwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzZW1p Y29sb24gJzsnIGluIHByaW50ZXIgbmFtZSIpCisgICAgaWYgbG9jdXMgaXMg Tm9uZToKKyAgICAgICAgaWYgZ2RiLnBhcmFtZXRlcigidmVyYm9zZSIpOgor ICAgICAgICAgICAgZ2RiLndyaXRlKCJSZWdpc3RlcmluZyBnbG9iYWwgJXMg c25pZmZlciAuLi5cbiIgJSBzbmlmZmVyLm5hbWUpCisgICAgICAgIGxvY3Vz ID0gZ2RiCisgICAgZWxzZToKKyAgICAgICAgaWYgZ2RiLnBhcmFtZXRlcigi dmVyYm9zZSIpOgorICAgICAgICAgICAgZ2RiLndyaXRlKCJSZWdpc3Rlcmlu ZyAlcyBzbmlmZmVyIGZvciAlcyAuLi5cbiIgJQorICAgICAgICAgICAgICAg ICAgICAgIChzbmlmZmVyLm5hbWUsIGxvY3VzLmZpbGVuYW1lKSkKKyAgICBp ID0gMAorICAgIGZvciBuZWVkbGUgaW4gbG9jdXMuZnJhbWVfc25pZmZlcnM6 CisgICAgICAgIGlmIG5lZWRsZS5uYW1lID09IHNuaWZmZXIubmFtZToKKyAg ICAgICAgICAgIGlmIHJlcGxhY2U6CisgICAgICAgICAgICAgICAgZGVsIGxv Y3VzLmZyYW1lX3NuaWZmZXJzW2ldCisgICAgICAgICAgICBlbHNlOgorICAg ICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigic25pZmZlciAlcyBh bHJlYWR5IGV4aXN0cyIgJSBzbmlmZmVyLm5hbWUpCisgICAgICAgIGkgKz0g MQorICAgIGxvY3VzLmZyYW1lX3NuaWZmZXJzLmluc2VydCgwLCBzbmlmZmVy KQpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMgYi9nZGIv cHl0aG9uL3B5LW9iamZpbGUuYwppbmRleCAwYWVjYWY2Li5hN2JiN2NkIDEw MDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5LW9iamZpbGUuYworKysgYi9nZGIv cHl0aG9uL3B5LW9iamZpbGUuYwpAQCAtNDIsNiArNDIsMTAgQEAgdHlwZWRl ZiBzdHJ1Y3QKIAogICAvKiBUaGUgZnJhbWUgZmlsdGVyIGxpc3Qgb2YgZnVu Y3Rpb25zLiAgKi8KICAgUHlPYmplY3QgKmZyYW1lX2ZpbHRlcnM7CisKKyAg LyogVGhlIGZyYW1lIHNuaWZmZXJzIGxpc3Qgb2YgZnVuY3Rpb25zLiAgKi8K KyAgUHlPYmplY3QgKmZyYW1lX3NuaWZmZXJzOworCiAgIC8qIFRoZSB0eXBl LXByaW50ZXIgbGlzdC4gICovCiAgIFB5T2JqZWN0ICp0eXBlX3ByaW50ZXJz OwogCkBAIC0xODEsNiArMTg1LDcgQEAgb2JqZnB5X2RlYWxsb2MgKFB5T2Jq ZWN0ICpvKQogICBQeV9YREVDUkVGIChzZWxmLT5kaWN0KTsKICAgUHlfWERF Q1JFRiAoc2VsZi0+cHJpbnRlcnMpOwogICBQeV9YREVDUkVGIChzZWxmLT5m cmFtZV9maWx0ZXJzKTsKKyAgUHlfWERFQ1JFRiAoc2VsZi0+ZnJhbWVfc25p ZmZlcnMpOwogICBQeV9YREVDUkVGIChzZWxmLT50eXBlX3ByaW50ZXJzKTsK ICAgUHlfWERFQ1JFRiAoc2VsZi0+eG1ldGhvZHMpOwogICBQeV9UWVBFIChz ZWxmKS0+dHBfZnJlZSAoc2VsZik7CkBAIC0yMDMsNiArMjA4LDEwIEBAIG9i amZweV9pbml0aWFsaXplIChvYmpmaWxlX29iamVjdCAqc2VsZikKICAgaWYg KHNlbGYtPmZyYW1lX2ZpbHRlcnMgPT0gTlVMTCkKICAgICByZXR1cm4gMDsK IAorICBzZWxmLT5mcmFtZV9zbmlmZmVycyA9IFB5TGlzdF9OZXcgKDApOwor ICBpZiAoc2VsZi0+ZnJhbWVfc25pZmZlcnMgPT0gTlVMTCkKKyAgICByZXR1 cm4gMDsKKwogICBzZWxmLT50eXBlX3ByaW50ZXJzID0gUHlMaXN0X05ldyAo MCk7CiAgIGlmIChzZWxmLT50eXBlX3ByaW50ZXJzID09IE5VTEwpCiAgICAg cmV0dXJuIDA7CkBAIC0zMTAsNiArMzE5LDQ4IEBAIG9iamZweV9zZXRfZnJh bWVfZmlsdGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpmaWx0ZXJzLCB2 b2lkICppZ25vcmUpCiAgIHJldHVybiAwOwogfQogCisvKiBSZXR1cm4gdGhl IGZyYW1lIHNuaWZmZXJzIGF0dHJpYnV0ZSBmb3IgdGhpcyBvYmplY3QgZmls ZS4gICovCisKK1B5T2JqZWN0ICoKK29iamZweV9nZXRfZnJhbWVfc25pZmZl cnMgKFB5T2JqZWN0ICpvLCB2b2lkICppZ25vcmUpCit7CisgIG9iamZpbGVf b2JqZWN0ICpzZWxmID0gKG9iamZpbGVfb2JqZWN0ICopIG87CisKKyAgUHlf SU5DUkVGIChzZWxmLT5mcmFtZV9zbmlmZmVycyk7CisgIHJldHVybiBzZWxm LT5mcmFtZV9zbmlmZmVyczsKK30KKworLyogU2V0IHRoaXMgb2JqZWN0IGZp bGUncyBmcmFtZSBzbmlmZmVycyBsaXN0IHRvIFNOSUZGRVJTLiAgKi8KKwor c3RhdGljIGludAorb2JqZnB5X3NldF9mcmFtZV9zbmlmZmVycyAoUHlPYmpl Y3QgKm8sIFB5T2JqZWN0ICpzbmlmZmVycywgdm9pZCAqaWdub3JlKQorewor ICBQeU9iamVjdCAqdG1wOworICBvYmpmaWxlX29iamVjdCAqc2VsZiA9IChv YmpmaWxlX29iamVjdCAqKSBvOworCisgIGlmICghc25pZmZlcnMpCisgICAg eworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisJ CSAgICAgICBfKCJDYW5ub3QgZGVsZXRlIHRoZSBmcmFtZSBzbmlmZmVycyBh dHRyaWJ1dGUuIikpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBp ZiAoIVB5TGlzdF9DaGVjayAoc25pZmZlcnMpKQorICAgIHsKKyAgICAgIFB5 RXJyX1NldFN0cmluZyAoUHlFeGNfVHlwZUVycm9yLAorCQkgICAgICAgXygi VGhlIGZyYW1lX3NuaWZmZXJzIGF0dHJpYnV0ZSBtdXN0IGJlIGEgbGlzdC4i KSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIC8qIFRha2UgY2Fy ZSBpbiBjYXNlIHRoZSBMSFMgYW5kIFJIUyBhcmUgcmVsYXRlZCBzb21laG93 LiAgKi8KKyAgdG1wID0gc2VsZi0+ZnJhbWVfc25pZmZlcnM7CisgIFB5X0lO Q1JFRiAoc25pZmZlcnMpOworICBzZWxmLT5mcmFtZV9zbmlmZmVycyA9IHNu aWZmZXJzOworICBQeV9YREVDUkVGICh0bXApOworCisgIHJldHVybiAwOwor fQorCiAvKiBHZXQgdGhlICd0eXBlX3ByaW50ZXJzJyBhdHRyaWJ1dGUuICAq LwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNjQ1LDYgKzY5Niw4IEBAIHN0 YXRpYyBQeUdldFNldERlZiBvYmpmaWxlX2dldHNldFtdID0KICAgICAiUHJl dHR5IHByaW50ZXJzLiIsIE5VTEwgfSwKICAgeyAiZnJhbWVfZmlsdGVycyIs IG9iamZweV9nZXRfZnJhbWVfZmlsdGVycywKICAgICBvYmpmcHlfc2V0X2Zy YW1lX2ZpbHRlcnMsICJGcmFtZSBGaWx0ZXJzLiIsIE5VTEwgfSwKKyAgeyAi ZnJhbWVfc25pZmZlcnMiLCBvYmpmcHlfZ2V0X2ZyYW1lX3NuaWZmZXJzLAor ICAgIG9iamZweV9zZXRfZnJhbWVfc25pZmZlcnMsICJGcmFtZSBTbmlmZmVy cyIsIE5VTEwgfSwKICAgeyAidHlwZV9wcmludGVycyIsIG9iamZweV9nZXRf dHlwZV9wcmludGVycywgb2JqZnB5X3NldF90eXBlX3ByaW50ZXJzLAogICAg ICJUeXBlIHByaW50ZXJzLiIsIE5VTEwgfSwKICAgeyAieG1ldGhvZHMiLCBv YmpmcHlfZ2V0X3htZXRob2RzLCBOVUxMLApkaWZmIC0tZ2l0IGEvZ2RiL3B5 dGhvbi9weS1wcm9nc3BhY2UuYyBiL2dkYi9weXRob24vcHktcHJvZ3NwYWNl LmMKaW5kZXggMjliOWY5Ni4uY2U4NWIxYSAxMDA2NDQKLS0tIGEvZ2RiL3B5 dGhvbi9weS1wcm9nc3BhY2UuYworKysgYi9nZGIvcHl0aG9uL3B5LXByb2dz cGFjZS5jCkBAIC00MSw2ICs0MSwxMCBAQCB0eXBlZGVmIHN0cnVjdAogCiAg IC8qIFRoZSBmcmFtZSBmaWx0ZXIgbGlzdCBvZiBmdW5jdGlvbnMuICAqLwog ICBQeU9iamVjdCAqZnJhbWVfZmlsdGVyczsKKworICAvKiBUaGUgZnJhbWUg c25pZmZlciBsaXN0LiAgKi8KKyAgUHlPYmplY3QgKmZyYW1lX3NuaWZmZXJz OworCiAgIC8qIFRoZSB0eXBlLXByaW50ZXIgbGlzdC4gICovCiAgIFB5T2Jq ZWN0ICp0eXBlX3ByaW50ZXJzOwogCkBAIC04Miw2ICs4Niw3IEBAIHBzcHlf ZGVhbGxvYyAoUHlPYmplY3QgKnNlbGYpCiAgIFB5X1hERUNSRUYgKHBzX3Nl bGYtPmRpY3QpOwogICBQeV9YREVDUkVGIChwc19zZWxmLT5wcmludGVycyk7 CiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPmZyYW1lX2ZpbHRlcnMpOworICBQ eV9YREVDUkVGIChwc19zZWxmLT5mcmFtZV9zbmlmZmVycyk7CiAgIFB5X1hE RUNSRUYgKHBzX3NlbGYtPnR5cGVfcHJpbnRlcnMpOwogICBQeV9YREVDUkVG IChwc19zZWxmLT54bWV0aG9kcyk7CiAgIFB5X1RZUEUgKHNlbGYpLT50cF9m cmVlIChzZWxmKTsKQEAgLTEwNCw2ICsxMDksMTAgQEAgcHNweV9pbml0aWFs aXplIChwc3BhY2Vfb2JqZWN0ICpzZWxmKQogICBpZiAoc2VsZi0+ZnJhbWVf ZmlsdGVycyA9PSBOVUxMKQogICAgIHJldHVybiAwOwogCisgIHNlbGYtPmZy YW1lX3NuaWZmZXJzID0gUHlMaXN0X05ldyAoMCk7CisgIGlmIChzZWxmLT5m cmFtZV9zbmlmZmVycyA9PSBOVUxMKQorICAgIHJldHVybiAwOworCiAgIHNl bGYtPnR5cGVfcHJpbnRlcnMgPSBQeUxpc3RfTmV3ICgwKTsKICAgaWYgKHNl bGYtPnR5cGVfcHJpbnRlcnMgPT0gTlVMTCkKICAgICByZXR1cm4gMDsKQEAg LTIxMSw2ICsyMjAsNDggQEAgcHNweV9zZXRfZnJhbWVfZmlsdGVycyAoUHlP YmplY3QgKm8sIFB5T2JqZWN0ICpmcmFtZSwgdm9pZCAqaWdub3JlKQogICBy ZXR1cm4gMDsKIH0KIAorLyogUmV0dXJuIHRoZSBsaXN0IG9mIHRoZSBmcmFt ZSBzbmlmZmVycyBmb3IgdGhpcyBwcm9ncmFtIHNwYWNlLiAgKi8KKworUHlP YmplY3QgKgorcHNweV9nZXRfZnJhbWVfc25pZmZlcnMgKFB5T2JqZWN0ICpv LCB2b2lkICppZ25vcmUpCit7CisgIHBzcGFjZV9vYmplY3QgKnNlbGYgPSAo cHNwYWNlX29iamVjdCAqKSBvOworCisgIFB5X0lOQ1JFRiAoc2VsZi0+ZnJh bWVfc25pZmZlcnMpOworICByZXR1cm4gc2VsZi0+ZnJhbWVfc25pZmZlcnM7 Cit9CisKKy8qIFNldCB0aGlzIHByb2dyYW0gc3BhY2UncyBsaXN0IG9mIHRo ZSBzbmlmZmVycyB0byBTTklGRkVSUy4gICovCisKK3N0YXRpYyBpbnQKK3Bz cHlfc2V0X2ZyYW1lX3NuaWZmZXJzIChQeU9iamVjdCAqbywgUHlPYmplY3Qg KnNuaWZmZXJzLCB2b2lkICppZ25vcmUpCit7CisgIFB5T2JqZWN0ICp0bXA7 CisgIHBzcGFjZV9vYmplY3QgKnNlbGYgPSAocHNwYWNlX29iamVjdCAqKSBv OworCisgIGlmICghc25pZmZlcnMpCisgICAgeworICAgICAgUHlFcnJfU2V0 U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisJCSAgICAgICAiY2Fubm90IGRl bGV0ZSB0aGUgZnJhbWUgc25pZmZlcnMgbGlzdCIpOworICAgICAgcmV0dXJu IC0xOworICAgIH0KKworICBpZiAoIVB5TGlzdF9DaGVjayAoc25pZmZlcnMp KQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVHlwZUVy cm9yLAorCQkgICAgICAgInRoZSBmcmFtZSBzbmlmZmVycyBhdHRyaWJ1dGUg bXVzdCBiZSBhIGxpc3QiKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisK KyAgLyogVGFrZSBjYXJlIGluIGNhc2UgdGhlIExIUyBhbmQgUkhTIGFyZSBy ZWxhdGVkIHNvbWVob3cuICAqLworICB0bXAgPSBzZWxmLT5mcmFtZV9zbmlm ZmVyczsKKyAgUHlfSU5DUkVGIChzbmlmZmVycyk7CisgIHNlbGYtPmZyYW1l X3NuaWZmZXJzID0gc25pZmZlcnM7CisgIFB5X1hERUNSRUYgKHRtcCk7CisK KyAgcmV0dXJuIDA7Cit9CisKIC8qIEdldCB0aGUgJ3R5cGVfcHJpbnRlcnMn IGF0dHJpYnV0ZS4gICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zNDUs NiArMzk2LDggQEAgc3RhdGljIFB5R2V0U2V0RGVmIHBzcGFjZV9nZXRzZXRb XSA9CiAgICAgIlByZXR0eSBwcmludGVycy4iLCBOVUxMIH0sCiAgIHsgImZy YW1lX2ZpbHRlcnMiLCBwc3B5X2dldF9mcmFtZV9maWx0ZXJzLCBwc3B5X3Nl dF9mcmFtZV9maWx0ZXJzLAogICAgICJGcmFtZSBmaWx0ZXJzLiIsIE5VTEwg fSwKKyAgeyAiZnJhbWVfc25pZmZlcnMiLCBwc3B5X2dldF9mcmFtZV9zbmlm ZmVycywgcHNweV9zZXRfZnJhbWVfc25pZmZlcnMsCisgICAgIkZyYW1lIHNu aWZmZXJzLiIsIE5VTEwgfSwKICAgeyAidHlwZV9wcmludGVycyIsIHBzcHlf Z2V0X3R5cGVfcHJpbnRlcnMsIHBzcHlfc2V0X3R5cGVfcHJpbnRlcnMsCiAg ICAgIlR5cGUgcHJpbnRlcnMuIiwgTlVMTCB9LAogICB7ICJ4bWV0aG9kcyIs IHBzcHlfZ2V0X3htZXRob2RzLCBOVUxMLApkaWZmIC0tZ2l0IGEvZ2RiL3B5 dGhvbi9weS11bndpbmQuYyBiL2dkYi9weXRob24vcHktdW53aW5kLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5MzVhYQotLS0g L2Rldi9udWxsCisrKyBiL2dkYi9weXRob24vcHktdW53aW5kLmMKQEAgLTAs MCArMSw1MzkgQEAKKy8qIFB5dGhvbiBmcmFtZSB1bndpbmRlciBpbnRlcmZh Y2UKKworICAgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1 ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCisjaW5jbHVk ZSAiZnJhbWUtdW53aW5kLmgiCisjaW5jbHVkZSAiZ2RiX29ic3RhY2suaCIK KyNpbmNsdWRlICJnZGJjbWQuaCIKKyNpbmNsdWRlICJsYW5ndWFnZS5oIgor I2luY2x1ZGUgIm9ic2VydmVyLmgiCisjaW5jbHVkZSAicHl0aG9uLWludGVy bmFsLmgiCisjaW5jbHVkZSAicmVnY2FjaGUuaCIKKyNpbmNsdWRlICJ1c2Vy LXJlZ3MuaCIKKworI2RlZmluZSBUUkFDRV9QWV9VTldJTkQobGV2ZWwsIGFy Z3MuLi4pIGlmIChweXV3X2RlYnVnID49IGxldmVsKSAgXAorICB7IGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgYXJncyk7IH0KKwordHlwZWRl ZiBzdHJ1Y3QKK3sKKyAgUHlPYmplY3RfSEVBRAorICBzdHJ1Y3QgZnJhbWVf aW5mbyAqZnJhbWVfaW5mbzsKK30gc25pZmZlcl9pbmZvX29iamVjdDsKKwor LyogVGhlIGRhdGEgd2Uga2VlcCBmb3IgYSBmcmFtZSB3ZSBjYW4gdW53aW5k OiBmcmFtZV9pZCBhbmQgYW4gYXJyYXkgb2YKKyAgIChyZWdpc3Rlcl9udW1i ZXIsIHJlZ2lzdGVyX3ZhbHVlKSBwYWlycy4gICovCisKK3R5cGVkZWYgc3Ry dWN0Cit7CisgIHN0cnVjdCBmcmFtZV9pZCBmcmFtZV9pZDsKKyAgc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2g7CisgIGludCByZWdfY291bnQ7CisgIHN0cnVj dCByZWdfaW5mbworICB7CisgICAgaW50IG51bWJlcjsKKyAgICBnZGJfYnl0 ZSAqZGF0YTsKKyAgfSByZWdbXTsKK30gY2FjaGVkX2ZyYW1lX2luZm87CisK K3N0YXRpYyBQeVR5cGVPYmplY3Qgc25pZmZlcl9pbmZvX29iamVjdF90eXBl CisgICAgQ1BZQ0hFQ0tFUl9UWVBFX09CSkVDVF9GT1JfVFlQRURFRiAoInNu aWZmZXJfaW5mb19vYmplY3QiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBw eXV3X2RlYnVnID0gMDsKKworc3RhdGljIHN0cnVjdCBnZGJhcmNoX2RhdGEg KnB5dXdfZ2RiYXJjaF9kYXRhOworCisvKiBDYWxsZWQgYnkgdGhlIFB5dGhv biBpbnRlcnByZXRlciB0byBvYnRhaW4gc3RyaW5nIHJlcHJlc2VudGF0aW9u CisgICBvZiB0aGUgU25pZmZlckluZm8gb2JqZWN0LiAgKi8KKworc3RhdGlj IFB5T2JqZWN0ICoKK3NuaWZmZXJfaW5mb3B5X3N0ciAoUHlPYmplY3QgKnNl bGYpCit7CisgIGNoYXIgKnM7CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN0 cnVjdCBmcmFtZV9pbmZvICpmcmFtZSA9ICgoc25pZmZlcl9pbmZvX29iamVj dCAqKXNlbGYpLT5mcmFtZV9pbmZvOworCisgIHMgPSB4c3RycHJpbnRmICgi U1A9JXMsUEM9JXMiLCBjb3JlX2FkZHJfdG9fc3RyaW5nX256IChnZXRfZnJh bWVfc3AgKGZyYW1lKSksCisgICAgICAgIGNvcmVfYWRkcl90b19zdHJpbmdf bnogKGdldF9mcmFtZV9wYyAoZnJhbWUpKSk7CisgIHJlc3VsdCA9IFB5U3Ry aW5nX0Zyb21TdHJpbmcgKHMpOworICB4ZnJlZSAocyk7CisKKyAgcmV0dXJu IHJlc3VsdDsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YgZ2RiLlNuaWZm ZXJJbmZvLnJlYWRfcmVnaXN0ZXIgKHNlbGYsIHJlZ251bSkgLT4gZ2RiLlZh bHVlLgorICAgUmV0dXJucyB0aGUgdmFsdWUgb2YgcmVnaXN0ZXIgUkVHTlVN IGFzIHBvaW50ZXIuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorc25pZmZl cl9pbmZvcHlfcmVhZF9yZWdpc3RlciAoUHlPYmplY3QgKnNlbGYsIFB5T2Jq ZWN0ICphcmdzKQoreworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlv biBleGNlcHQ7CisgIGludCByZWdudW07CisgIHN0cnVjdCB2YWx1ZSAqdmFs ID0gTlVMTDsKKworICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUgKGFyZ3MsICJp IiwgJnJlZ251bSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgVFJZX0NBVENI IChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAgICAvKiBD YWxsaW5nIGB2YWx1ZV9vZl9yZWdpc3Rlcicgd2lsbCByZXN1bHQgaW4gaW5m aW5pdGUgcmVjdXJzaW9uLgorICAgICAgICAgQ2FsbCBgZGVwcmVjYXRlZF9m cmFtZV9yZWdpc3Rlcl9yZWFkJyBpbnN0ZWFkLiAgKi8KKyAgICAgIHN0cnVj dCBmcmFtZV9pbmZvICpmcmFtZSA9ICgoc25pZmZlcl9pbmZvX29iamVjdCAq KSBzZWxmKS0+ZnJhbWVfaW5mbzsKKyAgICAgIHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKGZyYW1lKTsKKyAgICAgIGdkYl9i eXRlIGJ1ZmZlcltNQVhfUkVHSVNURVJfU0laRV07CisKKyAgICAgIGlmIChk ZXByZWNhdGVkX2ZyYW1lX3JlZ2lzdGVyX3JlYWQgKGZyYW1lLCByZWdudW0s IGJ1ZmZlcikpCisgICAgICAgIHZhbCA9IHZhbHVlX2Zyb21fY29udGVudHMg KHJlZ2lzdGVyX3R5cGUgKGdkYmFyY2gsIHJlZ251bSksIGJ1ZmZlcik7Cisg ICAgICBpZiAodmFsID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBj aGFyICplcnJvcl90ZXh0CisgICAgICAgICAgICAgID0geHN0cnByaW50ZiAo XygiQ2Fubm90IHJlYWQgcmVnaXN0ZXIgJWQgZnJvbSBmcmFtZSIpLCByZWdu dW0pOworICAgICAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVF cnJvciwgZXJyb3JfdGV4dCk7CisgICAgICAgICAgeGZyZWUgKGVycm9yX3Rl eHQpOworICAgICAgICB9CisgICAgfQorICBHREJfUFlfSEFORExFX0VYQ0VQ VElPTiAoZXhjZXB0KTsKKworICByZXR1cm4gdmFsID09IE5VTEwgPyBOVUxM IDogdmFsdWVfdG9fdmFsdWVfb2JqZWN0ICh2YWwpOworfQorCisvKiBDcmVh dGUgUHl0aG9uIFNuaWZmZXJJbmZvIG9iamVjdC4gICovCisKK3N0YXRpYyBQ eU9iamVjdCAqCitmcmFtZV9pbmZvX3RvX3NuaWZmZXJfaW5mb19vYmplY3Qg KHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSkKK3sKKyAgc25pZmZlcl9pbmZv X29iamVjdCAqc25pZmZlcl9pbmZvCisgICAgICA9IFB5T2JqZWN0X05ldyAo c25pZmZlcl9pbmZvX29iamVjdCwgJnNuaWZmZXJfaW5mb19vYmplY3RfdHlw ZSk7CisKKyAgaWYgKHNuaWZmZXJfaW5mbyAhPSBOVUxMKQorICAgIHNuaWZm ZXJfaW5mby0+ZnJhbWVfaW5mbyA9IGZyYW1lOworCisgIHJldHVybiAoUHlP YmplY3QgKikgc25pZmZlcl9pbmZvOworfQorCisvKiBQYXJzZSBQeXRob24g SW50LCBzYXZpbmcgaXQgYXQgdGhlIGdpdmVuIGFkZHJlc3MuIFJldHVybnMg MSBvbiBzdWNjZXNzLAorICAgMCBvdGhlcndpc2UuICAqLworCitzdGF0aWMg aW50CitweXV3X3BhcnNlX2ludCAoUHlPYmplY3QgKnB5b19pbnQsIGludCAq dmFsdWVwKQoreworICBsb25nIGxvbmdfdmFsdWU7CisgIGlmIChweW9faW50 ID09IE5VTEwgfHwgIVB5SW50X0NoZWNrIChweW9faW50KSkKKyAgICByZXR1 cm4gMDsKKyAgbG9uZ192YWx1ZSA9IFB5SW50X0FzTG9uZyAocHlvX2ludCk7 CisgIGlmIChsb25nX3ZhbHVlICE9IChpbnQpIGxvbmdfdmFsdWUpCisgICAg cmV0dXJuIDA7CisgICp2YWx1ZXAgPSAoaW50KSBsb25nX3ZhbHVlOworICBy ZXR1cm4gMTsKK30KKworLyogUGFyc2UgZ2l2ZW4gdHVwbGUgb2YgUHl0aG9u IEludHMgaW50byBhbiBhcnJheS4gUmV0dXJucyB0aGUgbnVtYmVyCisgICBv ZiBpdGVtcyBpbiB0aGUgdHVwbGUsIG9yIC0xIG9uIGVycm9yIChiYWQgdHVw bGUgZWxlbWVudCB0eXBlLAorICAgYXJyYXkgdG9vIHNtYWxsKS4gICovCisK K3N0YXRpYyBQeV9zc2l6ZV90CitweXV3X3BhcnNlX2ludHMgKFB5T2JqZWN0 ICpweW9fc2VxdWVuY2UsIGludCAqdmFsdWVzLCBQeV9zc2l6ZV90IG1heF92 YWx1ZXMpCit7CisgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgUHlfc3NpemVfdCBp OworCisgIGlmICghIFB5VHVwbGVfQ2hlY2sgKHB5b19zZXF1ZW5jZSkpCisg ICAgcmV0dXJuIC0xOworICBzaXplID0gUHlUdXBsZV9TaXplIChweW9fc2Vx dWVuY2UpOworICBpZiAoc2l6ZSA8IDAgfHwgc2l6ZSA+IG1heF92YWx1ZXMp CisgICAgcmV0dXJuIC0xOworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytp KQorICAgIHsKKyAgICAgIGlmICghcHl1d19wYXJzZV9pbnQgKFB5VHVwbGVf R2V0SXRlbSAocHlvX3NlcXVlbmNlLCBpKSwgJnZhbHVlc1tpXSkpCisgICAg ICAgIHJldHVybiAtMTsKKyAgICB9CisgIHJldHVybiBpOworfQorCisvKiBS ZXRyaWV2ZSByZWdpc3RlciB2YWx1ZSBmb3IgdGhlIGNhY2hlZCB1bndpbmQg aW5mbyBhcyB0YXJnZXQgcG9pbnRlci4KKyAgIFJldHVybiAxIG9uIHN1Y2Nl c3MsIDAgb24gZmFpbHVyZS4gICovCisKK3N0YXRpYyBpbnQKK3B5dXdfcmVn X3ZhbHVlIChjYWNoZWRfZnJhbWVfaW5mbyAqY2FjaGVkX2ZyYW1lLCBpbnQg cmVnbnVtLCBDT1JFX0FERFIgKnZhbHVlKQoreworICBzdHJ1Y3QgcmVnX2lu Zm8gKnJlZ19pbmZvID0gY2FjaGVkX2ZyYW1lLT5yZWc7CisgIHN0cnVjdCBy ZWdfaW5mbyAqcmVnX2luZm9fZW5kID0gcmVnX2luZm8gKyBjYWNoZWRfZnJh bWUtPnJlZ19jb3VudDsKKworICBmb3IgKDsgcmVnX2luZm8gPCByZWdfaW5m b19lbmQ7ICsrcmVnX2luZm8pCisgICAgeworICAgICAgaWYgKHJlZ19pbmZv LT5udW1iZXIgPT0gcmVnbnVtKQorICAgICAgICB7CisgICAgICAgICAgKnZh bHVlID0gdW5wYWNrX3BvaW50ZXIKKyAgICAgICAgICAgICAgKHJlZ2lzdGVy X3R5cGUgKGNhY2hlZF9mcmFtZS0+Z2RiYXJjaCwgcmVnbnVtKSwgcmVnX2lu Zm8tPmRhdGEpOworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9Cisg ICAgfQorCisgIGVycm9yIChfKCJQeXRob24gc25pZmZlciB1c2VzIHJlZ2lz dGVyICMlZCBmb3IgdGhpc19pZCwgIgorICAgICAgICAgICAiYnV0IHRoaXMg cmVnaXN0ZXIgaXMgbm90IGF2YWlsYWJsZSIpLCByZWdudW0pOworfQorCisv KiBmcmFtZV91bndpbmQudGhpc19pZCBtZXRob2QuICAqLworCitzdGF0aWMg dm9pZAorcHl1d190aGlzX2lkIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19m cmFtZSwgdm9pZCAqKmNhY2hlX3B0ciwKKyAgICAgICAgICAgICAgc3RydWN0 IGZyYW1lX2lkICp0aGlzX2lkKQoreworICAqdGhpc19pZCA9ICgoY2FjaGVk X2ZyYW1lX2luZm8gKikgKmNhY2hlX3B0ciktPmZyYW1lX2lkOworICBpZiAo cHl1d19kZWJ1ZyA+PSAxKQorICAgIHsKKyAgICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywgIiVzOiBmcmFtZV9pZDogIiwgX19GVU5DVElP Tl9fKTsKKyAgICAgIGZwcmludF9mcmFtZV9pZCAoZ2RiX3N0ZGxvZywgKnRo aXNfaWQpOworICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LCAiXG4iKTsKKyAgICB9Cit9CisKKy8qIGZyYW1lX3Vud2luZC5wcmV2X3Jl Z2lzdGVyLiAgKi8KKworc3RhdGljIHN0cnVjdCB2YWx1ZSAqCitweXV3X3By ZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2 b2lkICoqY2FjaGVfcHRyLAorICAgICAgICAgICAgICAgICAgICBpbnQgcmVn bnVtKQoreworICBjYWNoZWRfZnJhbWVfaW5mbyAqY2FjaGVkX2ZyYW1lID0g KmNhY2hlX3B0cjsKKyAgc3RydWN0IHJlZ19pbmZvICpyZWdfaW5mbyA9IGNh Y2hlZF9mcmFtZS0+cmVnOworICBzdHJ1Y3QgcmVnX2luZm8gKnJlZ19pbmZv X2VuZCA9IHJlZ19pbmZvICsgY2FjaGVkX2ZyYW1lLT5yZWdfY291bnQ7CisK KyAgVFJBQ0VfUFlfVU5XSU5EICgxLCAiJXMoZnJhbWU9JXAsLi4uLHJlZz0l ZClcbiIsIF9fRlVOQ1RJT05fXywgdGhpc19mcmFtZSwKKyAgICAgICAgICAg ICAgICAgICByZWdudW0pOworICBmb3IgKDsgcmVnX2luZm8gPCByZWdfaW5m b19lbmQ7ICsrcmVnX2luZm8pCisgICAgeworICAgICAgaWYgKHJlZ251bSA9 PSByZWdfaW5mby0+bnVtYmVyKQorICAgICAgICByZXR1cm4gZnJhbWVfdW53 aW5kX2dvdF9ieXRlcyAodGhpc19mcmFtZSwgcmVnbnVtLCByZWdfaW5mby0+ ZGF0YSk7CisgICAgfQorCisgIHJldHVybiBmcmFtZV91bndpbmRfZ290X29w dGltaXplZCAodGhpc19mcmFtZSwgcmVnbnVtKTsKK30KKworLyogUGFyc2Ug ZnJhbWUgSUQgdHVwbGUgcmV0dXJuZWQgYnkgdGhlIHNuaWZmZXIgaW5mbyBH REIncyBmcmFtZV9pZCBhbmQKKyAgIHNhdmUgaXQgaW4gdGhlIGNhY2hlZCBm cmFtZS4gICovCisKK3N0YXRpYyB2b2lkCitweXV3X3BhcnNlX2ZyYW1lX2lk IChjYWNoZWRfZnJhbWVfaW5mbyAqY2FjaGVkX2ZyYW1lLAorICAgICAgICAg ICAgICAgICAgICAgUHlPYmplY3QgKnB5b19mcmFtZV9pZF9yZWdzKQorewor ICBpbnQgcmVnbm9bM107CisgIENPUkVfQUREUiBzcCwgcGMsIHNwZWNpYWw7 CisKKyAgaWYgKCFQeVR1cGxlX0NoZWNrIChweW9fZnJhbWVfaWRfcmVncykp CisgICAgZXJyb3IgKF8oIlRoZSBzZWNvbmQgZWxlbWVudCBvZiB0aGUgcGFp ciByZXR1cm5lZCBieSBhIFB5dGhvbiAiCisgICAgICAgICAgICAgInNuaWZm ZXIgc2hvdWxkIGJlIGEgdHVwbGUiKSk7CisKKyAgc3dpdGNoIChweXV3X3Bh cnNlX2ludHMgKHB5b19mcmFtZV9pZF9yZWdzLCByZWdubywgQVJSQVlfU0la RSAocmVnbm8pKSkKKyAgICB7CisgICAgY2FzZSAxOgorICAgICAgaWYgKHB5 dXdfcmVnX3ZhbHVlIChjYWNoZWRfZnJhbWUsIHJlZ25vWzBdLCAmc3ApKQor ICAgICAgeworICAgICAgICBjYWNoZWRfZnJhbWUtPmZyYW1lX2lkID0gZnJh bWVfaWRfYnVpbGRfd2lsZCAoc3ApOworICAgICAgICByZXR1cm47CisgICAg ICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHl1 d19yZWdfdmFsdWUgKGNhY2hlZF9mcmFtZSwgcmVnbm9bMF0sICZzcCkKKyAg ICAgICAgICB8fCBweXV3X3JlZ192YWx1ZSAoY2FjaGVkX2ZyYW1lLCByZWdu b1sxXSwgJnBjKSkKKyAgICAgIHsKKyAgICAgICAgY2FjaGVkX2ZyYW1lLT5m cmFtZV9pZCA9IGZyYW1lX2lkX2J1aWxkIChzcCwgcGMpOworICAgICAgICBy ZXR1cm47CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDM6Cisg ICAgICBpZiAocHl1d19yZWdfdmFsdWUgKGNhY2hlZF9mcmFtZSwgcmVnbm9b MF0sICZzcCkKKyAgICAgICAgICB8fCBweXV3X3JlZ192YWx1ZSAoY2FjaGVk X2ZyYW1lLCByZWdub1sxXSwgJnBjKQorICAgICAgICB8fCBweXV3X3JlZ192 YWx1ZSAoY2FjaGVkX2ZyYW1lLCByZWdub1syXSwgJnNwZWNpYWwpKQorICAg ICAgeworICAgICAgICBjYWNoZWRfZnJhbWUtPmZyYW1lX2lkID0gZnJhbWVf aWRfYnVpbGRfc3BlY2lhbCAoc3AsIHBjLCBzcGVjaWFsKTsKKyAgICAgICAg cmV0dXJuOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICBlcnJv ciAoXygiVW53aW5kZXIgc2hvdWxkIHJldHVybiBhIHR1cGxlIG9mIDEgdG8g MyBpbnRzIGluIHRoZSBzZWNvbmQgaXRlbSIpKTsKK30KKworLyogRnJhbWUg c25pZmZlciBkaXNwYXRjaC4gICovCisKK3N0YXRpYyBpbnQKK3B5dXdfc25p ZmZlciAoY29uc3Qgc3RydWN0IGZyYW1lX3Vud2luZCAqc2VsZiwgc3RydWN0 IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisgICAgICAgICAgICAgIHZvaWQg KipjYWNoZV9wdHIpCit7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOwor ICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cHM7CisgIHN0cnVjdCBjbGVhbnVw ICpjYWNoZWRfZnJhbWVfY2xlYW51cHM7CisgIFB5T2JqZWN0ICpweW9fbW9k dWxlOworICBQeU9iamVjdCAqcHlvX2V4ZWN1dGU7CisgIFB5T2JqZWN0ICpw eW9fc25pZmZlcl9pbmZvOworICBQeU9iamVjdCAqcHlvX3Vud2luZF9pbmZv OworICBjYWNoZWRfZnJhbWVfaW5mbyAqY2FjaGVkX2ZyYW1lID0gTlVMTDsK KworICBnZGJfYXNzZXJ0ICgqY2FjaGVfcHRyID09IE5VTEwpOworICBnZGJh cmNoID0gKHZvaWQgKikoc2VsZi0+dW53aW5kX2RhdGEpOworICBjbGVhbnVw cyA9IGVuc3VyZV9weXRob25fZW52IChnZGJhcmNoLCBjdXJyZW50X2xhbmd1 YWdlKTsKKyAgVFJBQ0VfUFlfVU5XSU5EICgzLCAiJXMoU1A9JXMsIFBDPSVz KVxuIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgICAgICAgICAgIHBhZGRy ZXNzIChnZGJhcmNoLCBnZXRfZnJhbWVfc3AgKHRoaXNfZnJhbWUpKSwKKyAg ICAgICAgICAgICAgICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgZ2V0X2ZyYW1l X3BjICh0aGlzX2ZyYW1lKSkpOworICBweW9fc25pZmZlcl9pbmZvID0gZnJh bWVfaW5mb190b19zbmlmZmVyX2luZm9fb2JqZWN0ICh0aGlzX2ZyYW1lKTsK KyAgaWYgKHB5b19zbmlmZmVyX2luZm8gPT0gTlVMTCkKKyAgICBnb3RvIGVy cm9yOworICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweW9fc25pZmZlcl9p bmZvKTsKKworICBpZiAoKHB5b19tb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRN b2R1bGUgKCJnZGIuZnVuY3Rpb24uc25pZmZlcnMiKSkgPT0gTlVMTCkKKyAg ICBnb3RvIGVycm9yOworICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweW9f bW9kdWxlKTsKKworICBweW9fZXhlY3V0ZSA9IFB5T2JqZWN0X0dldEF0dHJT dHJpbmcgKHB5b19tb2R1bGUsICJleGVjdXRlX3NuaWZmZXJzIik7CisgIGlm IChweW9fZXhlY3V0ZSA9PSBOVUxMKQorICAgIGdvdG8gZXJyb3I7CisgIG1h a2VfY2xlYW51cF9weV9kZWNyZWYgKHB5b19leGVjdXRlKTsKKworICBweW9f dW53aW5kX2luZm8KKyAgICAgID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2Jq QXJncyAocHlvX2V4ZWN1dGUsIHB5b19zbmlmZmVyX2luZm8sIE5VTEwpOwor ICBpZiAocHlvX3Vud2luZF9pbmZvID09IE5VTEwpCisgICAgZ290byBlcnJv cjsKKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAocHlvX3Vud2luZF9pbmZv KTsKKyAgaWYgKHB5b191bndpbmRfaW5mbyA9PSBQeV9Ob25lKQorICAgIGdv dG8gZXJyb3I7CisKKyAgLyogVW53aW5kX2luZm8gaXMgYSAoUkVHSVNURVJT LCBGUkFNRV9JRF9SRUdOVU1TKSB0dXBsZS4gIFJFR0lTVEVSUworICAgKiBp cyBhIHR1cGxlIG9mIHRoZSAoUkVHX05SLCBSRUdfVkFMVUUpIHR1cGxlcy4g RlJBTUVfSURfUkVHTlVNUyBpcworICAgKiB0aGUgdHVwbGUgb2YgUkVHTk8g dmFsdWVzLiAgKi8KKyAgaWYgKCFQeVR1cGxlX0NoZWNrIChweW9fdW53aW5k X2luZm8pCisgICAgICB8fCBQeVR1cGxlX1NpemUgKHB5b191bndpbmRfaW5m bykgIT0gMikKKyAgICBlcnJvciAoXygiU25pZmZlciBzaG91bGQgcmV0dXJu IGEgcGFpciAoUkVHSVNURVJTLCBGUkFNRV9JRF9SRUdOVU1TKSIpKTsKKwor ICB7CisgICAgUHlPYmplY3QgKnB5b19yZWdpc3RlcnMgPSBQeVR1cGxlX0dl dEl0ZW0gKHB5b191bndpbmRfaW5mbywgMCk7CisgICAgaW50IGk7CisgICAg aW50IHJlZ19jb3VudDsKKyAgICBzaXplX3QgY2FjaGVkX2ZyYW1lX3NpemU7 CisgICAgc2l6ZV90IGdkYl9ieXRlc19jb3VudDsKKyAgICBnZGJfYnl0ZSAq Z2RiX2RhdGFfZnJlZSwgKmdkYl9kYXRhX2VuZDsKKworICAgIGlmIChweW9f cmVnaXN0ZXJzID09IE5VTEwpCisgICAgICBnb3RvIGVycm9yOworICAgIGlm ICghUHlUdXBsZV9DaGVjayAocHlvX3JlZ2lzdGVycykpCisgICAgICBlcnJv ciAoXygiVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHJldHVybmVkIHBhaXIg c2hvdWxkIGJlIGEgdHVwbGUiKSk7CisKKyAgICAvKiBGaWd1cmUgb3V0IGhv dyBtdWNoIHNwYWNlIHdlIG5lZWQgdG8gYWxsb2NhdGUuICAqLworICAgIHJl Z19jb3VudCA9IFB5VHVwbGVfU2l6ZSAocHlvX3JlZ2lzdGVycyk7CisgICAg aWYgKHJlZ19jb3VudCA8PSAwKQorICAgICAgZXJyb3IgKF8oIlJlZ2lzdGVy IGxpc3Qgc2hvdWxkIG5vdCBiZSBlbXB0eSIpKTsKKyAgICAvKiBXZSBtaWdo dCBvdmVyZXN0aW1hdGUgYGdkYl9ieXRlc19jb3VudCcsIGJ1dCBpdCdzIG5v dCB3b3J0aAorICAgICAgIHBhcnNpbmcgcmVnaXN0ZXIgbnVtYmVycyB0d2lj ZSB0byBjYWxjdWxhdGUgdGhlIGV4YWN0IG51bWJlciBvZgorICAgICAgIGJ5 dGVzIG5lZWRlZC4gICovCisgICAgZ2RiX2J5dGVzX2NvdW50ID0gcmVnX2Nv dW50ICogTUFYX1JFR0lTVEVSX1NJWkU7CisgICAgY2FjaGVkX2ZyYW1lX3Np emUgPSBzaXplb2YgKCpjYWNoZWRfZnJhbWUpICsKKyAgICAgICAgcmVnX2Nv dW50ICogc2l6ZW9mIChjYWNoZWRfZnJhbWUtPnJlZ1swXSkgKworICAgICAg ICBnZGJfYnl0ZXNfY291bnQgKiBzaXplb2YgKGdkYl9ieXRlKTsKKworICAg IGNhY2hlZF9mcmFtZSA9IHhtYWxsb2MgKGNhY2hlZF9mcmFtZV9zaXplKTsK KyAgICBjYWNoZWRfZnJhbWVfY2xlYW51cHMgPSBtYWtlX2NsZWFudXAgKHhm cmVlLCBjYWNoZWRfZnJhbWUpOworICAgIC8qIEFsbG9jYXRpb25zIGFmdGVy IHRoaXMgcG9pbnQgd2lsbCBiZSBkaXNjYXJkZWQhICAqLworCisgICAgZ2Ri X2RhdGFfZW5kID0gKGdkYl9ieXRlICopKChjaGFyICopIGNhY2hlZF9mcmFt ZSArIGNhY2hlZF9mcmFtZV9zaXplKTsKKyAgICBnZGJfZGF0YV9mcmVlID0g Z2RiX2RhdGFfZW5kIC0gZ2RiX2J5dGVzX2NvdW50OworCisgICAgY2FjaGVk X2ZyYW1lLT5nZGJhcmNoID0gZ2RiYXJjaDsKKyAgICBjYWNoZWRfZnJhbWUt PnJlZ19jb3VudCA9IHJlZ19jb3VudDsKKworICAgIC8qIFBvcHVsYXRlIHJl Z2lzdGVycyBhcnJheS4gICovCisgICAgZm9yIChpID0gMDsgaSA8IHJlZ19j b3VudDsgaSsrKQorICAgICAgeworICAgICAgICBQeU9iamVjdCAqcHlvX3Jl ZyA9IFB5VHVwbGVfR2V0SXRlbSAocHlvX3JlZ2lzdGVycywgaSk7CisgICAg ICAgIHN0cnVjdCByZWdfaW5mbyAqcmVnID0gJihjYWNoZWRfZnJhbWUtPnJl Z1tpXSk7CisKKyAgICAgICAgaWYgKHB5b19yZWcgPT0gTlVMTCkKKyAgICAg ICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmICghUHlUdXBsZV9DaGVj ayAocHlvX3JlZykgfHwgUHlUdXBsZV9TaXplIChweW9fcmVnKSAhPSAyCisg ICAgICAgICAgICB8fCAhcHl1d19wYXJzZV9pbnQgKFB5VHVwbGVfR2V0SXRl bSAocHlvX3JlZywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZyZWctPm51bWJlcikpCisgICAgICAgICAgeworICAgICAgICAgICAg ZXJyb3IgKF8oIlB5dGhvbiBzbmlmZmVyIHJldHVybmVkIGJhZCByZWdpc3Rl ciB0dXBsZTogIgorICAgICAgICAgICAgICAgICAgICAgIml0ZW0gIyVkIGlz IG5vdCBhIChyZWdfbm8sIHJlZ19kYXRhKSB0dXBsZSAiCisgICAgICAgICAg ICAgICAgICAgICAid2l0aCBpbnRlZ2VyIHJlZ19ubyBhbmQgcmVnX2RhdGEi KSwgaSk7CisgICAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICBQ eU9iamVjdCAqcHlvX3JlZ192YWx1ZSA9IFB5VHVwbGVfR2V0SXRlbSAocHlv X3JlZywgMSk7CisgICAgICAgICAgc3RydWN0IHZhbHVlICp2YWx1ZTsKKyAg ICAgICAgICBzaXplX3QgZGF0YV9zaXplOworCisgICAgICAgICAgaWYgKHB5 b19yZWdfdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7 CisKKyAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVfb2JqZWN0X3RvX3Zh bHVlIChweW9fcmVnX3ZhbHVlKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIGVy cm9yIChfKCJQeXRob24gc25pZmZlciByZXR1cm5lZCBiYWQgcmVnaXN0ZXIg dHVwbGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICJpdGVtICMlZCwgcmVn aXN0ZXIgdmFsdWUgc2hvdWxkIGhhdmUgdHlwZSAiCisgICAgICAgICAgICAg ICAgICAgICAiZ2RiLlZhbHVlIHR5cGUiKSwgaSk7CisgICAgICAgICAgZGF0 YV9zaXplID0gcmVnaXN0ZXJfc2l6ZSAoZ2RiYXJjaCwgcmVnLT5udW1iZXIp OworICAgICAgICAgIGlmIChkYXRhX3NpemUgIT0gVFlQRV9MRU5HVEggKHZh bHVlX2VuY2xvc2luZ190eXBlICh2YWx1ZSkpKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBlcnJvciAoXygiVGhlIHZhbHVlIG9mIHRoZSByZWdp c3RlciAjJWQgcmV0dXJuZWQgYnkgdGhlICIKKyAgICAgICAgICAgICAgICAg ICAgICAgIlB5dGhvbiBzbmlmZmVyIGhhcyB1bmV4cGVjdGVkIHNpemU6ICV1 IGluc3RlYWQgIgorICAgICAgICAgICAgICAgICAgICAgICAib2YgJXUiKSwg cmVnLT5udW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQp KFRZUEVfTEVOR1RIICh2YWx1ZV9lbmNsb3NpbmdfdHlwZSAodmFsdWUpKSks CisgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpZGF0YV9zaXplKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICBnZGJfYXNzZXJ0ICgoZ2RiX2Rh dGFfZnJlZSArIGRhdGFfc2l6ZSkgPD0gZ2RiX2RhdGFfZW5kKTsKKyAgICAg ICAgICBtZW1jcHkgKGdkYl9kYXRhX2ZyZWUsIHZhbHVlX2NvbnRlbnRzICh2 YWx1ZSksIGRhdGFfc2l6ZSk7CisgICAgICAgICAgcmVnLT5kYXRhID0gZ2Ri X2RhdGFfZnJlZTsKKyAgICAgICAgICBnZGJfZGF0YV9mcmVlICs9IGRhdGFf c2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICB9CisKKyAgeworICAgIFB5 T2JqZWN0ICpweW9fZnJhbWVfaWRfcmVncyA9IFB5VHVwbGVfR2V0SXRlbSAo cHlvX3Vud2luZF9pbmZvLCAxKTsKKyAgICBpZiAocHlvX2ZyYW1lX2lkX3Jl Z3MgPT0gTlVMTCkKKyAgICAgIGdvdG8gZXJyb3I7CisgICAgcHl1d19wYXJz ZV9mcmFtZV9pZCAoY2FjaGVkX2ZyYW1lLCBweW9fZnJhbWVfaWRfcmVncyk7 CisgIH0KKworICAqY2FjaGVfcHRyID0gY2FjaGVkX2ZyYW1lOworICBkaXNj YXJkX2NsZWFudXBzIChjYWNoZWRfZnJhbWVfY2xlYW51cHMpOworICBkb19j bGVhbnVwcyAoY2xlYW51cHMpOworICByZXR1cm4gMTsKKworZXJyb3I6Cisg IGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisgIHJldHVybiAwOworfQorCisv KiBGcmFtZSBjYWNoZSByZWxlYXNlIHNoaW0uICAqLworCitzdGF0aWMgdm9p ZAorcHl1d19kZWFsbG9jX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhp c19mcmFtZSwgdm9pZCAqY2FjaGUpCit7CisgIFRSQUNFX1BZX1VOV0lORCAo MywgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisgIHhmcmVlIChjYWNo ZSk7Cit9CisKK3N0cnVjdCBweXV3X2dkYmFyY2hfZGF0YV90eXBlCit7Cisg IC8qIEhhcyB0aGUgdW53aW5kZXIgc2hpbSBiZWVuIHByZXBlbmRlZD8gKi8K KyAgaW50IHVud2luZGVyX3JlZ2lzdGVyZWQ7Cit9OworCitzdGF0aWMgdm9p ZCAqCitweXV3X2dkYmFyY2hfZGF0YV9pbml0IChzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaCkKK3sKKyAgcmV0dXJuIEdEQkFSQ0hfT0JTVEFDS19aQUxMT0Mg KGdkYmFyY2gsIHN0cnVjdCBweXV3X2dkYmFyY2hfZGF0YV90eXBlKTsKK30K KworLyogTmV3IGluZmVyaW9yIGFyY2hpdGVjdHVyZSBjYWxsYmFjazogcmVn aXN0ZXIgdGhlIFB5dGhvbiBzbmlmZmVycworICAgaW50ZXJtZWRpYXJ5LiAg Ki8KKworc3RhdGljIHZvaWQKK3B5dXdfb25fbmV3X2dkYmFyY2ggKHN0cnVj dCBnZGJhcmNoICpuZXdhcmNoKQoreworICBzdHJ1Y3QgcHl1d19nZGJhcmNo X2RhdGFfdHlwZSAqZGF0YSA9CisgICAgICBnZGJhcmNoX2RhdGEgKG5ld2Fy Y2gsIHB5dXdfZ2RiYXJjaF9kYXRhKTsKKworICBpZiAoIWRhdGEtPnVud2lu ZGVyX3JlZ2lzdGVyZWQpCisgICAgeworICAgICAgc3RydWN0IGZyYW1lX3Vu d2luZCAqdW53aW5kZXIKKyAgICAgICAgICA9IEdEQkFSQ0hfT0JTVEFDS19a QUxMT0MgKG5ld2FyY2gsIHN0cnVjdCBmcmFtZV91bndpbmQpOworCisgICAg ICB1bndpbmRlci0+dHlwZSA9IE5PUk1BTF9GUkFNRTsKKyAgICAgIHVud2lu ZGVyLT5zdG9wX3JlYXNvbiA9IGRlZmF1bHRfZnJhbWVfdW53aW5kX3N0b3Bf cmVhc29uOworICAgICAgdW53aW5kZXItPnRoaXNfaWQgPSBweXV3X3RoaXNf aWQ7CisgICAgICB1bndpbmRlci0+cHJldl9yZWdpc3RlciA9IHB5dXdfcHJl dl9yZWdpc3RlcjsKKyAgICAgIHVud2luZGVyLT51bndpbmRfZGF0YSA9ICh2 b2lkICopIG5ld2FyY2g7CisgICAgICB1bndpbmRlci0+c25pZmZlciA9IHB5 dXdfc25pZmZlcjsKKyAgICAgIHVud2luZGVyLT5kZWFsbG9jX2NhY2hlID0g cHl1d19kZWFsbG9jX2NhY2hlOworICAgICAgZnJhbWVfdW53aW5kX3ByZXBl bmRfdW53aW5kZXIgKG5ld2FyY2gsIHVud2luZGVyKTsKKyAgICAgIFRSQUNF X1BZX1VOV0lORCAoMSwgIiVzOiByZWdpc3RlcmVkIHVud2luZGVyIGZvciAl c1xuIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgICAgICAgICAgICAgICBn ZGJhcmNoX2JmZF9hcmNoX2luZm8gKG5ld2FyY2gpLT5wcmludGFibGVfbmFt ZSk7CisgICAgICBkYXRhLT51bndpbmRlcl9yZWdpc3RlcmVkID0gMTsKKyAg ICB9Cit9CisKKy8qIEluaXRpYWxpemUgdW53aW5kIG1hY2hpbmVyeS4gICov CisKK2ludAorZ2RicHlfaW5pdGlhbGl6ZV91bndpbmQgKHZvaWQpCit7Cisg IGFkZF9zZXRzaG93X3p1aW50ZWdlcl9jbWQKKyAgICAgICgicHktdW53aW5k IiwgY2xhc3NfbWFpbnRlbmFuY2UsICZweXV3X2RlYnVnLAorICAgICAgICBf KCJTZXQgUHl0aG9uIHVud2luZGVyIGRlYnVnZ2luZy4iKSwKKyAgICAgICAg XygiU2hvdyBQeXRob24gdW53aW5kZXIgZGVidWdnaW5nLiIpLAorICAgICAg ICBfKCJXaGVuIG5vbi16ZXJvLCBQeXRoaW4gdW53aW5kZXIgZGVidWdnaW5n IGlzIGVuYWJsZWQuIiksCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEws CisgICAgICAgICZzZXRkZWJ1Z2xpc3QsICZzaG93ZGVidWdsaXN0KTsKKyAg cHl1d19nZGJhcmNoX2RhdGEKKyAgICAgID0gZ2RiYXJjaF9kYXRhX3JlZ2lz dGVyX3Bvc3RfaW5pdCAocHl1d19nZGJhcmNoX2RhdGFfaW5pdCk7CisgIG9i c2VydmVyX2F0dGFjaF9hcmNoaXRlY3R1cmVfY2hhbmdlZCAocHl1d19vbl9u ZXdfZ2RiYXJjaCk7CisgIGlmIChQeVR5cGVfUmVhZHkgKCZzbmlmZmVyX2lu Zm9fb2JqZWN0X3R5cGUpIDwgMCkKKyAgICByZXR1cm4gLTE7CisgIHJldHVy biBnZGJfcHltb2R1bGVfYWRkb2JqZWN0IChnZGJfbW9kdWxlLCAiU25pZmZl ckluZm8iLAorICAgICAgKFB5T2JqZWN0ICopICZzbmlmZmVyX2luZm9fb2Jq ZWN0X3R5cGUpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgc25pZmZlcl9p bmZvX29iamVjdF9tZXRob2RzW10gPQoreworICB7ICJyZWFkX3JlZ2lzdGVy Iiwgc25pZmZlcl9pbmZvcHlfcmVhZF9yZWdpc3RlciwgTUVUSF9WQVJBUkdT LAorICAgICJyZWFkX3JlZ2lzdGVyIChyZWdpc3Rlcl9uYW1lKSAtPiBnZGIu VmFsdWVcblwKK1JldHVybiB0aGUgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIGlu IHRoZSBmcmFtZS4iIH0sCisgIHtOVUxMfSAgLyogU2VudGluZWwgKi8KK307 CisKK3N0YXRpYyBQeVR5cGVPYmplY3Qgc25pZmZlcl9pbmZvX29iamVjdF90 eXBlID0KK3sKKyAgUHlWYXJPYmplY3RfSEVBRF9JTklUIChOVUxMLCAwKQor ICAiZ2RiLlNuaWZmZXJJbmZvIiwgICAgICAgICAgICAgIC8qIHRwX25hbWUg Ki8KKyAgc2l6ZW9mIChzbmlmZmVyX2luZm9fb2JqZWN0KSwgICAvKiB0cF9i YXNpY3NpemUgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9pdGVtc2l6ZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY29t cGFyZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHRwX3JlcHIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9hc19udW1iZXIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICAq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Nh bGwgKi8KKyAgc25pZmZlcl9pbmZvcHlfc3RyLCAgICAgICAgICAgICAvKiB0 cF9zdHIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9nZXRhdHRybyAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgIFB5X1RQRkxB R1NfREVGQVVMVCwgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgIkdE QiBzbmlmZmVySW5mbyBvYmplY3QiLCAgICAgICAvKiB0cF9kb2MgKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJz ZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X2NsZWFyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfcmljaGNvbXBhcmUgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAq LworICBzbmlmZmVyX2luZm9fb2JqZWN0X21ldGhvZHMsICAgIC8qIHRwX21l dGhvZHMgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9tZW1iZXJzICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfZ2V0c2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9k aWN0b2Zmc2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfaW5pdCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRwX2FsbG9jICovCit9OwpkaWZmIC0tZ2l0IGEvZ2RiL3B5 dGhvbi9weXRob24taW50ZXJuYWwuaCBiL2dkYi9weXRob24vcHl0aG9uLWlu dGVybmFsLmgKaW5kZXggYTc3ZjVhNi4uMzQxNzlkZSAxMDA2NDQKLS0tIGEv Z2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaAorKysgYi9nZGIvcHl0aG9u L3B5dGhvbi1pbnRlcm5hbC5oCkBAIC0zOTAsMTIgKzM5MCwxNCBAQCBQeU9i amVjdCAqcHNwYWNlX3RvX3BzcGFjZV9vYmplY3QgKHN0cnVjdCBwcm9ncmFt X3NwYWNlICopCiAgICAgQ1BZQ0hFQ0tFUl9SRVRVUk5TX0JPUlJPV0VEX1JF RjsKIFB5T2JqZWN0ICpwc3B5X2dldF9wcmludGVycyAoUHlPYmplY3QgKiwg dm9pZCAqKTsKIFB5T2JqZWN0ICpwc3B5X2dldF9mcmFtZV9maWx0ZXJzIChQ eU9iamVjdCAqLCB2b2lkICopOworUHlPYmplY3QgKnBzcHlfZ2V0X2ZyYW1l X3NuaWZmZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwogUHlPYmplY3QgKnBz cHlfZ2V0X3htZXRob2RzIChQeU9iamVjdCAqLCB2b2lkICopOwogCiBQeU9i amVjdCAqb2JqZmlsZV90b19vYmpmaWxlX29iamVjdCAoc3RydWN0IG9iamZp bGUgKikKICAgICBDUFlDSEVDS0VSX1JFVFVSTlNfQk9SUk9XRURfUkVGOwog UHlPYmplY3QgKm9iamZweV9nZXRfcHJpbnRlcnMgKFB5T2JqZWN0ICosIHZv aWQgKik7CiBQeU9iamVjdCAqb2JqZnB5X2dldF9mcmFtZV9maWx0ZXJzIChQ eU9iamVjdCAqLCB2b2lkICopOworUHlPYmplY3QgKm9iamZweV9nZXRfZnJh bWVfc25pZmZlcnMgKFB5T2JqZWN0ICosIHZvaWQgKik7CiBQeU9iamVjdCAq b2JqZnB5X2dldF94bWV0aG9kcyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKIFB5 T2JqZWN0ICpnZGJweV9sb29rdXBfb2JqZmlsZSAoUHlPYmplY3QgKnNlbGYs IFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpOwogCkBAIC00OTAsNiAr NDkyLDggQEAgaW50IGdkYnB5X2luaXRpYWxpemVfYXJjaCAodm9pZCkKICAg Q1BZQ0hFQ0tFUl9ORUdBVElWRV9SRVNVTFRfU0VUU19FWENFUFRJT047CiBp bnQgZ2RicHlfaW5pdGlhbGl6ZV94bWV0aG9kcyAodm9pZCkKICAgQ1BZQ0hF Q0tFUl9ORUdBVElWRV9SRVNVTFRfU0VUU19FWENFUFRJT047CitpbnQgZ2Ri cHlfaW5pdGlhbGl6ZV91bndpbmQgKHZvaWQpCisgIENQWUNIRUNLRVJfTkVH QVRJVkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOwogCiBzdHJ1Y3QgY2xlYW51 cCAqbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAoUHlPYmplY3QgKnB5KTsKIHN0 cnVjdCBjbGVhbnVwICptYWtlX2NsZWFudXBfcHlfeGRlY3JlZiAoUHlPYmpl Y3QgKnB5KTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLmMgYi9n ZGIvcHl0aG9uL3B5dGhvbi5jCmluZGV4IDM0NGQ4ZDIuLjNlMDc5YjUgMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLmMKKysrIGIvZ2RiL3B5dGhv bi9weXRob24uYwpAQCAtMTc5MCw3ICsxNzkwLDggQEAgbWVzc2FnZSA9PSBh biBlcnJvciBtZXNzYWdlIHdpdGhvdXQgYSBzdGFjayB3aWxsIGJlIHByaW50 ZWQuIiksCiAgICAgICB8fCBnZGJweV9pbml0aWFsaXplX25ld19vYmpmaWxl X2V2ZW50ICgpICA8IDAKICAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfY2xl YXJfb2JqZmlsZXNfZXZlbnQgKCkgIDwgMAogICAgICAgfHwgZ2RicHlfaW5p dGlhbGl6ZV9hcmNoICgpIDwgMAotICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6 ZV94bWV0aG9kcyAoKSA8IDApCisgICAgICB8fCBnZGJweV9pbml0aWFsaXpl X3htZXRob2RzICgpIDwgMAorICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV91 bndpbmQgKCkgPCAwKQogICAgIGdvdG8gZmFpbDsKIAogICBnZGJweV90b19z dHJpbmdfY3N0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyAoInRvX3N0cmluZyIp OwpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVu d2luZC1tYWludC5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVu d2luZC1tYWludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjhjMWQ5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktdW53aW5kLW1haW50LmMKQEAgLTAsMCArMSwyNCBA QAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBk ZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgaW50IGkgPSAwOworCisgIHJl dHVybiBpOyAvKiBuZXh0LWxpbmUgKi8KK30KZGlmZiAtLWdpdCBhL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQuZXhwIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC1tYWludC5leHAKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkYjRkYwotLS0g L2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11 bndpbmQtbWFpbnQuZXhwCkBAIC0wLDAgKzEsNjQgQEAKKyMgQ29weXJpZ2h0 IChDKSAyMDEwLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg dGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBQeXRob24tYmFzZWQKKyMg cHJldHR5LXByaW50aW5nIGZvciB0aGUgQ0xJLgorCitsb2FkX2xpYiBnZGIt cHl0aG9uLmV4cAorCitzdGFuZGFyZF90ZXN0ZmlsZQorCitpZiB7W3ByZXBh cmVfZm9yX3Rlc3RpbmcgJHt0ZXN0ZmlsZX0uZXhwICR7dGVzdGZpbGV9ICR7 c3JjZmlsZX1dIH0geworICAgIHJldHVybiAtMQorfQorCisjIFNraXAgYWxs IHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVuYWJsZWQuCitp ZiB7IFtza2lwX3B5dGhvbl90ZXN0c10gfSB7IGNvbnRpbnVlIH0KKworc2V0 IHB5ZmlsZSBbZ2RiX3JlbW90ZV9kb3dubG9hZCBob3N0ICR7c3JjZGlyfS8k e3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHldCisKK2lmICFbcnVudG9fbWFpbiBd IHRoZW4geworICAgIGZhaWwgIkNhbid0IHJ1biB0byBtYWluIgorICAgIHJl dHVybiAtMQorfQorCitnZGJfdGVzdCAic291cmNlICR7cHlmaWxlfSIgIlB5 dGhvbiBzY3JpcHQgaW1wb3J0ZWQiICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMi CisKK2dkYl90ZXN0X3NlcXVlbmNlICJpbmZvIHNuaWZmZXIiICJTaG93IGFs bCBzbmlmZmVycyIgeworICAgICJnbG9iYWwgc25pZmZlcnM6IgorICAgICIg IGdsb2JhbF9zbmlmZmVyIgorICAgICJwcm9nc3BhY2UuKnNuaWZmZXJzOiIK KyAgICAicHlfdW53aW5kX21haW50X3BzX3NuaWZmZXIiCit9CisKK2dkYl9i cmVha3BvaW50ICR7c3JjZmlsZX06W2dkYl9nZXRfbGluZV9udW1iZXIgIm5l eHQtbGluZSJdCisKK2dkYl90ZXN0X3NlcXVlbmNlICJjb250aW51ZSIgIlNu aWZmZXJzIGNhbGxlZCIgeworICAgICJweV91bndpbmRfbWFpbnRfcHNfc25p ZmZlciBjYWxsZWQiCisgICAgImdsb2JhbF9zbmlmZmVyIGNhbGxlZCIKK30K KworZ2RiX3Rlc3QgImRpc2FibGUgc25pZmZlciBnbG9iYWwgLioiICIxIHNu aWZmZXIgZGlzYWJsZWQiICJTbmlmZmVyIGRpc2FibGVkIgorCitnZGJfdGVz dF9zZXF1ZW5jZSAiaW5mbyBzbmlmZmVyIiAiU2hvdyB3aXRoIGdsb2JhbCBz bmlmZmVyIGRpc2FibGVkIiB7CisgICAgImdsb2JhbCBzbmlmZmVyczoiCisg ICAgIiAgZ2xvYmFsX3NuaWZmZXJcXFtkaXNhYmxlZFxcXSIKKyAgICAicHJv Z3NwYWNlLipzbmlmZmVyczoiCisgICAgIiAgcHlfdW53aW5kX21haW50X3Bz X3NuaWZmZXIiCit9CisKK2dkYl90ZXN0X3NlcXVlbmNlICJ3aGVyZSIgIkds b2JhbCBzbmlmZmVyIGRpc2FibGVkIiB7CisgICAgInB5X3Vud2luZF9tYWlu dF9wc19zbmlmZmVyIGNhbGxlZFxyXG4jMCAgbWFpbiIKK30KZGlmZiAtLWdp dCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQu cHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLW1haW50 LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5Nzhk ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktdW53aW5kLW1haW50LnB5CkBAIC0wLDAgKzEsNTkgQEAKKyMgQ29w eXJpZ2h0IChDKSAyMDEwLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBweXRob24gc25p ZmZlcnMuCisKK2ltcG9ydCByZQoraW1wb3J0IGdkYi50eXBlcworZnJvbSBn ZGIuc25pZmZlciBpbXBvcnQgU25pZmZlciwgcmVnaXN0ZXJfc25pZmZlcgor CitjbGFzcyBUZXN0R2xvYmFsU25pZmZlcihTbmlmZmVyKToKKyAgICBkZWYg X19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RHbG9iYWxTbmlm ZmVyLCBzZWxmKS5fX2luaXRfXygiZ2xvYmFsX3NuaWZmZXIiKQorCisgICAg ZGVmIF9fY2FsbF9fKHNlbGYsIHNuaWZmZXJfaW5mbyk6CisgICAgICAgIHBy aW50ICIlcyBjYWxsZWQiICUgc2VsZi5uYW1lCisgICAgICAgIHJldHVybiBO b25lCisKK2NsYXNzIFRlc3RQcm9nc3BhY2VTbmlmZmVyKFNuaWZmZXIpOgor ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc3VwZXIo VGVzdFByb2dzcGFjZVNuaWZmZXIsIHNlbGYpLl9faW5pdF9fKCIlc19wc19z bmlmZmVyIiAlIG5hbWUpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgc25p ZmZlcl9pbmZvKToKKyAgICAgICAgcHJpbnQgIiVzIGNhbGxlZCIgJSBzZWxm Lm5hbWUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworY2xhc3MgVGVzdE9iamZp bGVTbmlmZmVyKFNuaWZmZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu YW1lKToKKyAgICAgICAgc3VwZXIoVGVzdE9iamZpbGVTbmlmZmVyLCBzZWxm KS5fX2luaXRfXygiJXNfb2JqX3NuaWZmZXIiICUgbmFtZSkKKworICAgIGRl ZiBfX2NhbGxfXyhzZWxmLCBzbmlmZmVyX2luZm8pOgorICAgICAgICBwcmlu dCAiJXMgY2FsbGVkIiAlIHNlbGYubmFtZQorICAgICAgICByZXR1cm4gTm9u ZQorCisKKworZ2RiLnNuaWZmZXIucmVnaXN0ZXJfc25pZmZlcihnZGIsIFRl c3RHbG9iYWxTbmlmZmVyKCkpCitzYXdfcnVudGltZV9lcnJvciA9IEZhbHNl Cit0cnk6CisgICAgZ2RiLnNuaWZmZXIucmVnaXN0ZXJfc25pZmZlcihnZGIs IFRlc3RHbG9iYWxTbmlmZmVyKCksIHJlcGxhY2U9RmFsc2UpCitleGNlcHQg UnVudGltZUVycm9yOgorICAgIHNhd19ydW50aW1lX2Vycm9yID0gVHJ1ZQor aWYgbm90IHNhd19ydW50aW1lX2Vycm9yOgorICAgIHJhaXNlIFJ1bnRpbWVF cnJvcigiTWlzc2luZyBydW50aW1lIGVycm9yIGZyb20gcmVnaXN0ZXJfc25p ZmZlciIpCitnZGIuc25pZmZlci5yZWdpc3Rlcl9zbmlmZmVyKGdkYiwgVGVz dEdsb2JhbFNuaWZmZXIoKSwgcmVwbGFjZT1UcnVlKQorZ2RiLnNuaWZmZXIu cmVnaXN0ZXJfc25pZmZlcihnZGIuY3VycmVudF9wcm9nc3BhY2UoKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RQcm9nc3BhY2VTbmlm ZmVyKCJweV91bndpbmRfbWFpbnQiKSkKK3ByaW50ICJQeXRob24gc2NyaXB0 IGltcG9ydGVkIgpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LXVud2luZC5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LXVud2luZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu Ljg0MzQ5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktdW53aW5kLmMKQEAgLTAsMCArMSw3MCBAQAorLyogVGhp cyB0ZXN0IHByb2dyYW0gaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdn ZXIuCisKKyAgIENvcHlyaWdodCAyMDExLTIwMTQgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKKy8qIFRoaXMgaXMgdGhlIHRlc3QgcHJvZ3JhbSBsb2FkZWQgaW50byBH REIgYnkgdGhlIHB5LXVud2luZCB0ZXN0LiAgKi8KKworI2luY2x1ZGUgPHN0 ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli Lmg+CisKK3N0YXRpYyB2b2lkICoKK3N3YXBfdmFsdWUgKHZvaWQgKipsb2Nh dGlvbiwgdm9pZCAqbmV3X3ZhbHVlKQoreworICB2b2lkICpvbGRfdmFsdWUg PSAqbG9jYXRpb247CisgICpsb2NhdGlvbiA9IG5ld192YWx1ZTsKKyAgcmV0 dXJuIG9sZF92YWx1ZTsKK30KKworI2RlZmluZSBNWV9GUkFNRSAoX19idWls dGluX2ZyYW1lX2FkZHJlc3MgKDApKQorCitzdGF0aWMgdm9pZAorYnJlYWtf YmFja3RyYWNlICh2b2lkKQoreworICAvKiBTYXZlIG91dGVyIGZyYW1lIGFk ZHJlc3MsIHRoZW4gY29ycnVwdCB0aGUgdW53aW5kIGNoYWluIGJ5CisgICAg IHNldHRpbmcgdGhlIG91dGVyIGZyYW1lIGFkZHJlc3MgaW4gaXQgdG8gc2Vs Zi4gIFRoaXMgaXMKKyAgICAgQUJJLXNwZWNpZmljOiB0aGUgZmlyc3Qgd29y ZCBvZiB0aGUgZnJhbWUgY29udGFpbnMgcHJldmlvdXMgZnJhbWUKKyAgICAg YWRkcmVzcyBpbiBhbWQ2NC4gICovCisgIHZvaWQgKm91dGVyX2ZwID0gc3dh cF92YWx1ZSAoKHZvaWQgKiopIE1ZX0ZSQU1FLCBNWV9GUkFNRSk7CisKKyAg LyogVmVyaWZ5IHRoZSBjb21waWxlciBhbGxvY2F0ZXMgdGhlIGZpcnN0IGxv Y2FsIHZhcmlhYmxlIG9uZSB3b3JkCisgICAgIGJlbG93IGZyYW1lLiAgVGhp cyBpcyB3aGVyZSB0ZXN0IEpJVCByZWFkZXIgZXhwZWN0cyB0byBmaW5kIHRo ZQorICAgICBjb3JyZWN0IG91dGVyIGZyYW1lIGFkZHJlc3MuICAqLworICBp ZiAoJm91dGVyX2ZwICsgMSAhPSAodm9pZCAqKikgTVlfRlJBTUUpCisgICAg eworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiRmlyc3QgdmFyaWFibGUgc2hv dWxkIGJlIGFsbG9jYXRlZCBvbmUgd29yZCBiZWxvdyAiCisgICAgICAgICAg ICAgICAidGhlIGZyYW1lLCBnb3QgdmFyaWFibGUncyBhZGRyZXNzICVwLCBm cmFtZSBhdCAlcCBpbnN0ZWFkXG4iLAorICAgICAgICAgICAgICAgJm91dGVy X2ZwLCBNWV9GUkFNRSk7CisgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAg LyogTm93IHJlc3RvcmUgaXQgc28gdGhhdCB3ZSBjYW4gcmV0dXJuLiAgVGhl IHRlc3Qgc2V0cyB0aGUKKyAgICAgYnJlYWtwb2ludCBqdXN0IGJlZm9yZSB0 aGlzIGhhcHBlbnMsIGFuZCBHREIgd2lsbCBub3QgYmUgYWJsZSB0bworICAg ICBzaG93IHRoZSBiYWNrdHJhY2Ugd2l0aG91dCBKSVQgcmVhZGVyLiAgKi8K KyAgc3dhcF92YWx1ZSAoKHZvaWQgKiopIE1ZX0ZSQU1FLCBvdXRlcl9mcCk7 IC8qIGJyZWFrIGJhY2t0cmFjZS1icm9rZW4gKi8KK30KKworc3RhdGljIHZv aWQKK2JyZWFrX2JhY2t0cmFjZV9jYWxsZXIgKHZvaWQpCit7CisgIGJyZWFr X2JhY2t0cmFjZSAoKTsKK30KKworaW50CittYWluICgpCit7CisgIGJyZWFr X2JhY2t0cmFjZV9jYWxsZXIgKCk7Cit9CmRpZmYgLS1naXQgYS9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLmV4cCBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS11bndpbmQuZXhwCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmE1MmQwNmYKLS0tIC9kZXYvbnVsbAorKysg Yi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLmV4cApAQCAt MCwwICsxLDU0IEBACisjIENvcHlyaWdodCAoQykgMjAwOS0yMDE0IEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor CisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAg SXQgdmVyaWZpZXMgdGhhdCBmcmFtZQorIyBzbmlmZmVycyBjYW4gYmUgaW1w bGVtZW50ZWQgaW4gUHl0aG9uLgorCitsb2FkX2xpYiBnZGItcHl0aG9uLmV4 cAorCitzdGFuZGFyZF90ZXN0ZmlsZQorCitpZiB7IFtwcmVwYXJlX2Zvcl90 ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke3Rlc3RmaWxlfSAke3NyY2ZpbGV9 XSB9IHsKKyAgICByZXR1cm4gLTEKK30KKworIyBTa2lwIGFsbCB0ZXN0cyBp ZiBQeXRob24gc2NyaXB0aW5nIGlzIG5vdCBlbmFibGVkLgoraWYgeyBbc2tp cF9weXRob25fdGVzdHNdIH0geyBjb250aW51ZSB9CisKKyMgVGhpcyB0ZXN0 IHJ1bnMgb24gYSBzcGVjaWZpYyBwbGF0Zm9ybS4KK2lmIHsgISBbaXN0YXJn ZXQgeDg2XzY0LSpdfSB7IGNvbnRpbnVlIH0KKworIyBUaGUgZm9sbG93aW5n IHRlc3RzIHJlcXVpcmUgZXhlY3V0aW9uLgorCitpZiAhW3J1bnRvX21haW5d IHRoZW4geworICAgIGZhaWwgIkNhbid0IHJ1biB0byBtYWluIgorICAgIHJl dHVybiAwCit9CisKK3NldCBweWZpbGUgW2dkYl9yZW1vdGVfZG93bmxvYWQg aG9zdCAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5XQorCitn ZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiYnJlYWsgYmFj a3RyYWNlLWJyb2tlbiJdCisKK2dkYl90ZXN0ICJzb3VyY2UgJHtweWZpbGV9 IiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZCIgXAorICAgICAgICAgImltcG9y dCBweXRob24gc2NyaXB0cyIKKworZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9p bnQgImJyZWFrIGJhY2t0cmFjZS1icm9rZW4iCitnZGJfdGVzdF9zZXF1ZW5j ZSAid2hlcmUiICAiQmFja3RyYWNlIHJlc3RvcmVkIGJ5IHNuaWZmZXIiIHsK KyAgICAiXFxyXFxuIzAgLiogYnJlYWtfYmFja3RyYWNlIFxcKFxcKSBhdCAi CisgICAgIlxcclxcbiMxIC4qIGJyZWFrX2JhY2t0cmFjZV9jYWxsZXIgXFwo XFwpIGF0ICIKKyAgICAiXFxyXFxuIzIgLiogbWFpbiBcXCguKlxcKSBhdCIK K30KKworCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktdW53aW5kLnB5IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVu d2luZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44 ZmE3ZmRjCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LXVud2luZC5weQpAQCAtMCwwICsxLDUxIEBACisjIENvcHly aWdodCAoQykgMjAxMy0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQgZ2RiCitmcm9tIGdk Yi5zbmlmZmVyIGltcG9ydCBTbmlmZmVyCisKK2NsYXNzIFRlc3RTbmlmZmVy KFNuaWZmZXIpOgorICAgIEFNRDY0X1JCUCA9IDYKKyAgICBBTUQ2NF9SU1Ag PSA3CisgICAgQU1ENjRfUklQID0gMTYKKworICAgIGRlZiBfX2luaXRfXyhz ZWxmKToKKyAgICAgICAgU25pZmZlci5fX2luaXRfXyhzZWxmLCAidGVzdCBz bmlmZmVyIikKKyAgICAgICAgc2VsZi5jaGFyX3B0cl90ID0gZ2RiLmxvb2t1 cF90eXBlKCJ1bnNpZ25lZCBjaGFyIikucG9pbnRlcigpCisgICAgICAgIHNl bGYuY2hhcl9wdHJfcHRyX3QgPSBzZWxmLmNoYXJfcHRyX3QucG9pbnRlcigp CisKKyAgICBkZWYgX3JlYWRfd29yZChzZWxmLCBhZGRyZXNzKToKKyAgICAg ICAgcmV0dXJuIGFkZHJlc3MuY2FzdChzZWxmLmNoYXJfcHRyX3B0cl90KS5k ZXJlZmVyZW5jZSgpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgc25pZmZl cl9pbmZvKToKKyAgICAgICAgIlNuaWZmZXIgd3JpdHRlbiBpbiBQeXRob24u IgorICAgICAgICBicCA9IHNuaWZmZXJfaW5mby5yZWFkX3JlZ2lzdGVyKAor ICAgICAgICAgICAgVGVzdFNuaWZmZXIuQU1ENjRfUkJQKS5jYXN0KHNlbGYu Y2hhcl9wdHJfdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2Vs Zi5fcmVhZF93b3JkKGJwKSAhPSBicDoKKyAgICAgICAgICAgICAgICByZXR1 cm4gTm9uZQorICAgICAgICAgICAgIyBGb3VuZCB0aGUgZnJhbWUgdGhhdCB0 aGUgdGVzdCBwcm9ncmFtIGZ1ZGdlZCBmb3IgdXMuCisgICAgICAgICAgICAj IFRoZSBjb3JyZWN0IEJQIGZvciB0aGUgb3V0ZXIgZnJhbWUgaGFzIGJlZW4g c2F2ZWQgb25lIHdvcmQKKyAgICAgICAgICAgICMgYWJvdmUsIHByZXZpb3Vz IElQIGFuZCBTUCBhcmUgYXQgdGhlIGV4cGVjdGVkIHBsYWNlcworICAgICAg ICAgICAgcHJldmlvdXNfc3AgPSBicCArIDE2CisgICAgICAgICAgICByZXR1 cm4gKCgoVGVzdFNuaWZmZXIuQU1ENjRfUkJQLCBzZWxmLl9yZWFkX3dvcmQo YnAgLSA4KSksCisgICAgICAgICAgICAgICAgICAgICAoVGVzdFNuaWZmZXIu QU1ENjRfUklQLCBzZWxmLl9yZWFkX3dvcmQoYnAgKyA4KSksCisgICAgICAg ICAgICAgICAgICAgICAoVGVzdFNuaWZmZXIuQU1ENjRfUlNQLCBicCArIDE2 KSksCisgICAgICAgICAgICAgICAgICAgIChUZXN0U25pZmZlci5BTUQ2NF9S U1AsIFRlc3RTbmlmZmVyLkFNRDY0X1JJUCkpCisgICAgICAgIGV4Y2VwdCAo Z2RiLmVycm9yLCBSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgcmV0dXJu IE5vbmUKKworZ2RiLnNuaWZmZXIucmVnaXN0ZXJfc25pZmZlcihOb25lLCBU ZXN0U25pZmZlcigpKQorcHJpbnQoIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQi KQo= --001a1140918072c24e050ee7def1--