From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25408 invoked by alias); 11 Mar 2015 02:22:15 -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 25383 invoked by uid 89); 11 Mar 2015 02:22:11 -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-ie0-f182.google.com Received: from mail-ie0-f182.google.com (HELO mail-ie0-f182.google.com) (209.85.223.182) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 11 Mar 2015 02:22:03 +0000 Received: by iecsl2 with SMTP id sl2so6304545iec.1 for ; Tue, 10 Mar 2015 19:22:00 -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=8HcC/3KXp7GbjH/V6x5Srklr9AUTzdO3pmJYQf34tiU=; b=XhTJSsFlKBgMh5PYFvhHwmhXI0XqTy792pTZ1fB+RAorySYA4R9BiNqG1twXj4AJyI pi4uEkQPb0iaJEYcSDgrw4QaFrTmUom60ginLgOed/j1jklHV/eAxN3NPg3ug17pCzd7 Njiu0erd0GwKaGz9QK/Bep0WcR2mBwYgoExSOz1n3iP1QYfHRFPCF0pV7gk0tnbp5zw3 iKkKSyV+1eGQWyl/Mm79mnHqpt3lheQw6voK+boORnCzkwixflb4Q/uz9Kh1siRkwAEI o11EceSe8oL/5Y3xLz/ReE9RVvv7f3o33roCC9Tj2LX+MjwiWxZZ8OaY+RhN2KVbsicd ZaJA== X-Gm-Message-State: ALoCoQnYdygoavGR87w/samdx1gjyQLgKDwVKrIFdsVZJeDnOQAYX9N05KLayY4YDYzsIGZdkOH+ MIME-Version: 1.0 X-Received: by 10.50.122.68 with SMTP id lq4mr5706302igb.10.1426040520533; Tue, 10 Mar 2015 19:22:00 -0700 (PDT) Received: by 10.64.227.110 with HTTP; Tue, 10 Mar 2015 19:22:00 -0700 (PDT) In-Reply-To: <54FD7DAA.7010603@redhat.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> Date: Wed, 11 Mar 2015 02:22:00 -0000 Message-ID: Subject: Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python From: Alexander Smundak To: Phil Muldoon Cc: Andy Wingo , Doug Evans , gdb-patches Content-Type: multipart/mixed; boundary=089e015383fca9b9710510f9ee3f X-SW-Source: 2015-03/txt/msg00268.txt.bz2 --089e015383fca9b9710510f9ee3f Content-Type: text/plain; charset=UTF-8 Content-length: 3078 This take revises the API by introducing UnwindInfo class. The main difference with the proposed Guile interface is that previous frame registers are passed to the constructor as a tuple and cannot be revised later. gdb/ChangeLog: 2015-02-30 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. On Mon, Mar 9, 2015 at 4:02 AM, Phil Muldoon wrote: > On 04/03/15 07:49, Andy Wingo wrote: >> Howdy :) >> >> Reordering some of the replies. >> >> On Wed 04 Mar 2015 03:36, Alexander Smundak writes: > > Just a note. I am generally satisfied with the patch and your answers > to my questions. Just now need to get the nod off Doug, and coordinate > with Andy and/or other guile people to harmonious the design. > > Cheers > > Phil > --089e015383fca9b9710510f9ee3f Content-Type: text/plain; charset=US-ASCII; name="patch5.diff" Content-Disposition: attachment; filename="patch5.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i743opl60 Content-length: 90175 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 ZXggZDcyNWViMC4uNDQ2ODNiZCAxMDA2NDQKLS0tIGEvZ2RiL2RvYy9weXRo b24udGV4aQorKysgYi9nZGIvZG9jL3B5dGhvbi50ZXhpCkBAIC0xNDQsNiAr MTQ0LDcgQEAgb3B0aW9uYWwgYXJndW1lbnRzIHdoaWxlIHNraXBwaW5nIG90 aGVycy4gIEV4YW1wbGU6CiAqIEZyYW1lIEZpbHRlciBBUEk6OiAgICAgICAg ICAgIEZpbHRlcmluZyBGcmFtZXMuCiAqIEZyYW1lIERlY29yYXRvciBBUEk6 OiAgICAgICAgIERlY29yYXRpbmcgRnJhbWVzLgogKiBXcml0aW5nIGEgRnJh bWUgRmlsdGVyOjogICAgICBXcml0aW5nIGEgRnJhbWUgRmlsdGVyLgorKiBV bndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbjo6ICBXcml0aW5nIGEgZnJhbWUg dW53aW5kZXIgaW4gUHl0aG9uLgogKiBYbWV0aG9kcyBJbiBQeXRob246OiAg ICAgICAgICBBZGRpbmcgYW5kIHJlcGxhY2luZyBtZXRob2RzIG9mIEMrKyBj bGFzc2VzLgogKiBYbWV0aG9kIEFQSTo6ICAgICAgICAgICAgICAgICBYbWV0 aG9kIHR5cGVzLgogKiBXcml0aW5nIGFuIFhtZXRob2Q6OiAgICAgICAgICBX cml0aW5nIGFuIHhtZXRob2QuCkBAIC0yMTc4LDYgKzIxNzksMTExIEBAIHBy 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 ZnJhbWUgcmVnaXN0ZXJzLCBjcmVhdGUgVW53aW5kSW5mbyBpbnN0YW5jZSBm cm9tIGl0PgorICAgICAgICA8c2F2ZSBmcmFtZSdzIElEIGluIFVud2luZElu Zm8gaW5zdGFuY2UgYnkgY2FsbGluZyBvbmUgb2YKKyAgICAgICAgIGZyYW1l X2lkX2J1aWxkX3h4eCBtZXRob2RzPgorICAgICAgICByZXR1cm4gPFVud2lu ZEluZm8gaW5zdGFuY2U+CitAZW5kIHNtYWxsZXhhbXBsZQorCitAc3ViaGVh ZGluZyBFeGFtaW5pbmcgVGhlIEN1cnJlbnQgRnJhbWUKKworQHZhbHVle0dE Qk59IHBhc3NlcyBhIEBjb2Rle2dkYi5TbmlmZmVySW5mb30gaW5zdGFuY2Ug d2hlbiBpdCBjYWxscworc25pZmZlcidzIEBjb2Rle19fY2FsbF9ffSBtZXRo b2QuIFRoaXMgY2xhc3MgaGFzIGEgc2luZ2xlIG1ldGhvZDoKKworQGRlZnVu IFNuaWZmZXJJbmZvLnJlYWRfcmVnaXN0ZXIgKHNlbGYsIHJlZ251bSkKK1Ro aXMgbWV0aG9kIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSByZWdpc3Rl ciBAdmFye3JlZ251bX0gaW4gdGhlCitmcmFtZSBhcyBhIEBjb2Rle2dkYi5W YWx1ZX0gb2JqZWN0LiBAdmFye3JlZ251bX0gdmFsdWVzIGFyZQorcGxhdGZv cm0tc3BlY2lmaWMuIFRoZXkgYXJlIHVzdWFsbHkgZGVmaW5lZCBpbiB0aGUg Y29ycmVzcG9uZGluZworeHh4LUBjb2Rle3RkZXAuaH0gZmlsZSBpbiB0aGUg Z2RiIHNvdXJjZSB0cmVlLgorQGVuZCBkZWZ1bgorCitAc3ViaGVhZGluZyBT bmlmZmVyIHJldHVybjogVW53aW5kSW5mbworCitJZiBzbmlmZmVyJ3MgQGNv ZGV7X19jYWxsX199IG1ldGhvZCByZWNvZ25pemVzIHRoZSBmcmFtZSwgaXQg c2hvdWxkCityZXR1cm4gYW4gaW5zdGFuY2Ugb2YgQGNvZGV7Z2RiLlVud2lu ZEluZm99IGNsYXNzIGRlc2NyaWJpbmcgaXQuIAorCitAY29kZXtVbndpbmRJ bmZvfSBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCitAZGVmdW4gZ2Ri LlVud2luZEluZm8uX19pbml0X18gKHNuaWZmZXJfaW5mbywgcHJldmlvdXNf ZnJhbWVfcmVnaXN0ZXJzKQorQHZhcntzbmlmZmVyX2luZm99IGlzIHRoZSBT bmlmZmVySW5mbyBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIHBhc3NlZCB0bwor YSBzbmlmZmVyIG9uIGludm9jYXRpb24uCitAdmFye3ByZXZpb3VzX2ZyYW1l X3JlZ2lzdGVyc30gZGVzY3JpYmVzIHRoZSByZWdpc3RlcnMgdGhhdCBjYW4g YmUKK3Vud291bmQgKGkuZS4sIHRoZSByZWdpc3RlcnMgZnJvbSB0aGUgcHJl dmlvdXMgZnJhbWUgdGhhdCBoYXZlIGJlZW4KK3NhdmVkIGluIHRoZSBjdXJy ZW50IGZyYW1lIGRlc2NyaWJlZCBieSBAdmFye3NuaWZmZXJfaW5mb30pLiBJ dCBpcyBhCit0dXBsZSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgYSAoQHZhcnty ZWdudW19LCBAdmFye3JlZ2RhdGF9KSAyLXR1cGxlLgorQHZhcntyZWdudW19 IGlzIGEgcmVnaXN0ZXIgbnVtYmVyLCBhbmQgQHZhcntyZWdkYXRhfSBpcyBy ZWdpc3RlcgorY29udGVudHMgKGEgQGNvZGV7Z2RiLlZhbHVlfSBvYmplY3Qp LgorQGVuZCBkZWZ1bgorCitAZGVmdW4gZ2RiLlVud2luZEluZm8uZnJhbWVf aWRfYnVpbGQoc3AsIHBjKQorQnVpbGRzIGZyYW1lIElEIGZyb20gdGhlIGdp dmVuIEB2YXJ7c3B9IGFuZCBAdmFye3BjfSB2YWx1ZXMuCitAZW5kIGRlZnVu CisKK0BkZWZ1biBnZGIuVW53aW5kSW5mby5mcmFtZV9pZF9idWlsZF9zcGVj aWFsKHNwLCBwYywgc3BlY2lhbCkKK0J1aWxkcyBmcmFtZSBJRCBmcm9tIHRo ZSBnaXZlbiBAdmFye3NwfSwgQHZhcntwY30sIGFuZCBAdmFye3NwZWNpYWx9 Cit2YWx1ZXMuCitAZW5kIGRlZnVuCisKK0BkZWZ1biBnZGIuVW53aW5kSW5m by5mcmFtZV9pZF9idWlsZF93aWxkKHNwKQorQnVpbGRzIGZyYW1lIElEIGZy b20gdGhlIGdpdmVuIEB2YXJ7c3B9IHZhbHVlLgorQGVuZCBkZWZ1bgorCitA c3ViaGVhZGluZyBSZWdpc3RlcmluZyBhIFNuaWZmZXIKKworQW4gb2JqZWN0 IGZpbGUsIGEgcHJvZ3JhbSBzcGFjZSwgYW5kIHRoZSBAdmFsdWV7R0RCTn0g cHJvcGVyIGNhbiBoYXZlCitzbmlmZmVycyByZWdpc3RlcmVkIHdpdGggaXQu CisKK1RoZSBAY29kZXtnZGIuc25pZmZlcnN9IG1vZHVsZSBwcm92aWRlcyB0 aGUgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYQorc25pZmZlcjoKKworQGRlZnVu IGdkYi5zbmlmZmVyLnJlZ2lzdGVyX3NuaWZmZXIgKGxvY3VzLCBzbmlmZmVy LCByZXBsYWNlPUZhbHNlKQorQHZhcntsb2N1c30gaXMgc3BlY2lmaWVzIGFu IG9iamVjdCBmaWxlIG9yIGEgcHJvZ3JhbSBzcGFjZSB0byB3aGljaAorQHZh cntzbmlmZmVyfSBpcyBhZGRlZC4gUGFzc2luZyBAY29kZXtOb25lfSBvciBA Y29kZXtnZGJ9IGFkZHMKK0B2YXJ7c25pZmZlcn0gdG8gdGhlIEB2YWx1ZXtH REJOfSdzIGdsb2JhbCBzbmlmZmVyIGxpc3QuICBUaGUgbmV3bHkKK2FkZGVk IEB2YXJ7c25pZmZlcn0gd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhl ciBzbmlmZmVyIGZyb20gdGhlCitzYW1lIGxvY3VzLiAgVHdvIHNuaWZmZXJz IGluIHRoZSBzYW1lIGxvY3VzIGNhbm5vdCBoYXZlIHRoZSBzYW1lCituYW1l LiBBbiBhdHRlbXB0IHRvIGFkZCBhIHNuaWZmZXIgd2l0aCBhbHJlYWR5IGV4 aXN0aW5nIG5hbWUgcmFpc2VzIGFuCitleGNlcHRpb24gdW5sZXNzIEB2YXJ7 cmVwbGFjZX0gaXMgQGNvZGV7VHJ1ZX0sIGluIHdoaWNoIGNhc2UgdGhlIG9s ZAorc25pZmZlciBpcyBkZWxldGVkLgorQGVuZCBkZWZ1bgorCitAc3ViaGVh ZGluZyBTbmlmZmVyIFByZWNlZGVuY2UKKworQHZhbHVle0dEQk59IGZpcnN0 IGNhbGxzIHRoZSBzbmlmZmVycyBmcm9tIGFsbCB0aGUgb2JqZWN0IGZpbGVz IGluIG5vCitwYXJ0aWN1bGFyIG9yZGVyLCB0aGVuIHRoZSBzbmlmZmVycyBm cm9tIHRoZSBjdXJyZW50IHByb2dyYW0gc3BhY2UsCithbmQgZmluYWxseSB0 aGUgc25pZmZlcnMgZnJvbSBAdmFsdWV7R0RCTn0uCisKIEBub2RlIFhtZXRo b2RzIEluIFB5dGhvbgogQHN1YnN1YnNlY3Rpb24gWG1ldGhvZHMgSW4gUHl0 aG9uCiBAY2luZGV4IHhtZXRob2RzIGluIFB5dGhvbgpkaWZmIC0tZ2l0IGEv Z2RiL3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5IGIvZ2RiL3B5dGhvbi9s aWIvZ2RiL19faW5pdF9fLnB5CmluZGV4IDkyYjA2ZjIuLjhkN2Y2NTEgMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vbGliL2dkYi9fX2luaXRfXy5weQorKysg Yi9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKQEAgLTcxLDYgKzcx LDggQEAgdHlwZV9wcmludGVycyA9IFtdCiB4bWV0aG9kcyA9IFtdCiAjIElu aXRpYWwgZnJhbWUgZmlsdGVycy4KIGZyYW1lX2ZpbHRlcnMgPSB7fQorIyBJ bml0aWFsIGZyYW1lIHNuaWZmZXJzLgorZnJhbWVfc25pZmZlcnMgPSBbXQog CiAjIENvbnZlbmllbmNlIHZhcmlhYmxlIHRvIEdEQidzIHB5dGhvbiBkaXJl Y3RvcnkKIFBZVEhPTkRJUiA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRp cm5hbWUoX19maWxlX18pKQpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIv Z2RiL2NvbW1hbmQvc25pZmZlcnMucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIv Y29tbWFuZC9zbmlmZmVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5hZDdmNjkzCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5 dGhvbi9saWIvZ2RiL2NvbW1hbmQvc25pZmZlcnMucHkKQEAgLTAsMCArMSwx OTggQEAKKyMgU25pZmZlciBjb21tYW5kcy4KKyMgQ29weXJpZ2h0IDIwMTUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisKK2ltcG9ydCBnZGIKK2ltcG9ydCByZQorCisKK2RlZiB2YWxpZGF0 ZV9yZWdleHAoZXhwLCBpZHN0cmluZyk6CisgICAgdHJ5OgorICAgICAgICBy ZXR1cm4gcmUuY29tcGlsZShleHApCisgICAgZXhjZXB0IFN5bnRheEVycm9y OgorICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiSW52YWxpZCAlcyByZWdl eHA6ICVzLiIgJSAoaWRzdHJpbmcsIGV4cCkpCisKKworZGVmIHBhcnNlX3Nu aWZmZXJfY29tbWFuZF9hcmdzKGFyZyk6CisgICAgIiIiSW50ZXJuYWwgdXRp bGl0eSB0byBwYXJzZSBzbmlmZmVyIGNvbW1hbmQgYXJndi4KKworICAgIEFy Z3VtZW50czoKKyAgICAgICAgYXJnOiBUaGUgYXJndW1lbnRzIHRvIHRoZSBj b21tYW5kLiBUaGUgZm9ybWF0IGlzOgorICAgICAgICAgICAgIFtsb2N1cy1y ZWdleHAgW25hbWUtcmVnZXhwXV0KKworICAgIFJldHVybnM6CisgICAgICAg IEEgMi10dXBsZSBvZiBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb25zLgor CisgICAgUmFpc2VzOgorICAgICAgICBTeW50YXhFcnJvcjogYW4gZXJyb3Ig cHJvY2Vzc2luZyBBUkcKKyAgICAiIiIKKworICAgIGFyZ3YgPSBnZGIuc3Ry aW5nX3RvX2FyZ3YoYXJnKQorICAgIGFyZ2MgPSBsZW4oYXJndikKKyAgICBp ZiBhcmdjID4gMjoKKyAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIlRvbyBt YW55IGFyZ3VtZW50cy4iKQorICAgIGxvY3VzX3JlZ2V4cCA9ICIiCisgICAg bmFtZV9yZWdleHAgPSAiIgorICAgIGlmIGFyZ2MgPj0gMToKKyAgICAgICAg bG9jdXNfcmVnZXhwID0gYXJndlswXQorICAgICAgICBpZiBhcmdjID49IDI6 CisgICAgICAgICAgICBuYW1lX3JlZ2V4cCA9IGFyZ3ZbMV0KKyAgICByZXR1 cm4gKHZhbGlkYXRlX3JlZ2V4cChsb2N1c19yZWdleHAsICJsb2N1cyIpLAor ICAgICAgICAgICAgdmFsaWRhdGVfcmVnZXhwKG5hbWVfcmVnZXhwLCAic25p ZmZlciIpKQorCisKK2NsYXNzIEluZm9TbmlmZmVyKGdkYi5Db21tYW5kKToK KyAgICAiIiJHREIgY29tbWFuZCB0byBsaXN0IHNuaWZmZXJzLgorCisgICAg VXNhZ2U6IGluZm8gc25pZmZlciBbbG9jdXMtcmVnZXhwIFtuYW1lLXJlZ2V4 cF1dCisKKyAgICBMT0NVUy1SRUdFWFAgaXMgYSByZWd1bGFyIGV4cHJlc3Np b24gbWF0Y2hpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZQorICAgIHNuaWZmZXIu ICBJZiBpdCBpcyBvbWl0dGVkLCBhbGwgcmVnaXN0ZXJlZCBzbmlmZmVycyBm cm9tIGFsbCBsb2NpCisgICAgYXJlIGxpc3RlZC4gIEEgbG9jdXMgY291bGQg YmUgJ2dsb2JhbCcsIGEgcmVndWxhciBleHByZXNzaW9uCisgICAgbWF0Y2hp bmcgdGhlIGN1cnJlbnQgcHJvZ3JhbSBzcGFjZSdzIGZpbGVuYW1lLCBvciBh IHJlZ3VsYXIKKyAgICBleHByZXNzaW9uIG1hdGNoaW5nIGZpbGVuYW1lcyBv ZiBvYmpmaWxlcy4gIExvY3VzIGNvdWxkIGJlCisgICAgJ3Byb2dzcGFjZScg dG8gc3BlY2lmeSB0aGF0IG9ubHkgc25pZmZlcnMgZnJvbSB0aGUgY3VycmVu dAorICAgIHByb2dzcGFjZSBzaG91bGQgYmUgbGlzdGVkLgorCisgICAgTkFN RS1SRUdFWFAgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIHNu aWZmZXIgbmFtZXMuCisgICAgSWYgdGhpcyBvbWl0dGVkIGZvciBhIHNwZWNp ZmllZCBsb2N1cywgdGhlbiBhbGwgcmVnaXN0ZXJlZAorICAgIHNuaWZmZXJz IGluIHRoZSBsb2N1cyBhcmUgbGlzdGVkLgorICAgICIiIgorCisgICAgZGVm IF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihJbmZvU25pZmZlciwg c2VsZikuX19pbml0X18oImluZm8gc25pZmZlciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9EQVRB KQorCisgICAgZGVmIGxpc3Rfc25pZmZlcnMoc2VsZiwgdGl0bGUsIHNuaWZm ZXJzLCBuYW1lX3JlKToKKyAgICAgICAgIiIiTGlzdHMgdGhlIHNuaWZmZXJz IHdob3NlIG5hbWUgbWF0Y2hlcyByZWdleHAuCisKKyAgICAgICAgQXJndW1l bnRzOgorICAgICAgICAgICAgdGl0bGU6IFRoZSBsaW5lIHRvIHByaW50IGJl Zm9yZSB0aGUgbGlzdC4KKyAgICAgICAgICAgIHNuaWZmZXJzOiBUaGUgbGlz dCBvZiB0aGUgc25pZmZlcnMuCisgICAgICAgICAgICBuYW1lX3JlOiBzbmlm ZmVyIG5hbWUgZmlsdGVyLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90 IHNuaWZmZXJzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHByaW50 IHRpdGxlCisgICAgICAgIGZvciBzbmlmZmVyIGluIHNuaWZmZXJzOgorICAg ICAgICAgICAgaWYgbmFtZV9yZS5tYXRjaChzbmlmZmVyLm5hbWUpOgorICAg ICAgICAgICAgICAgIHByaW50KCIgICVzJXMiICUgKHNuaWZmZXIubmFtZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiBpZiBzbmlm ZmVyLmVuYWJsZWQgZWxzZSAiW2Rpc2FibGVkXSIpKQorCisgICAgZGVmIGlu dm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKyAgICAgICAgbG9jdXNfcmUs IG5hbWVfcmUgPSBwYXJzZV9zbmlmZmVyX2NvbW1hbmRfYXJncyhhcmcpCisg ICAgICAgIGlmIGxvY3VzX3JlLm1hdGNoKCJnbG9iYWwiKToKKyAgICAgICAg ICAgIHNlbGYubGlzdF9zbmlmZmVycygiZ2xvYmFsIHNuaWZmZXJzOiIsIGdk Yi5mcmFtZV9zbmlmZmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuYW1lX3JlKQorICAgICAgICBpZiBsb2N1c19yZS5tYXRjaCgicHJv Z3NwYWNlIik6CisgICAgICAgICAgICBjcCA9IGdkYi5jdXJyZW50X3Byb2dz cGFjZSgpCisgICAgICAgICAgICBzZWxmLmxpc3Rfc25pZmZlcnMoInByb2dz cGFjZSAlcyBzbmlmZmVyczoiICUgY3AuZmlsZW5hbWUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY3AuZnJhbWVfc25pZmZlcnMsIG5hbWVf cmUpCisgICAgICAgIGZvciBvYmpmaWxlIGluIGdkYi5vYmpmaWxlcygpOgor ICAgICAgICAgICAgaWYgbG9jdXNfcmUubWF0Y2gob2JqZmlsZS5maWxlbmFt ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5saXN0X3NuaWZmZXJzKCJvYmpm aWxlICVzIHNuaWZmZXJzOiIgJSBvYmpmaWxlLmZpbGVuYW1lLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpmaWxlLmZyYW1lX3Nu aWZmZXJzLCBuYW1lX3JlKQorCisKK2RlZiBkb19lbmFibGVfc25pZmZlcjEo c25pZmZlcnMsIG5hbWVfcmUsIGZsYWcpOgorICAgICIiIkVuYWJsZS9kaXNh YmxlIHNuaWZmZXJzIHdob3NlIG5hbWVzIG1hdGNoIGdpdmVuIHJlZ2V4Lgor CisgICAgQXJndW1lbnRzOgorICAgICAgICBzbmlmZmVyczogVGhlIGxpc3Qg b2Ygc25pZmZlcnMuCisgICAgICAgIG5hbWVfcmU6IFNuaWZmZXIgbmFtZSBm aWx0ZXIuCisgICAgICAgIGZsYWc6IEVuYWJsZS9kaXNhYmxlLgorCisgICAg UmV0dXJuczoKKyAgICAgICAgVGhlIG51bWJlciBvZiBzbmlmZmVycyBhZmZl Y3RlZC4KKyAgICAiIiIKKyAgICB0b3RhbCA9IDAKKyAgICBmb3Igc25pZmZl ciBpbiBzbmlmZmVyczoKKyAgICAgICAgaWYgbmFtZV9yZS5tYXRjaChzbmlm ZmVyLm5hbWUpOgorICAgICAgICAgICAgc25pZmZlci5lbmFibGVkID0gZmxh ZworICAgICAgICAgICAgdG90YWwgKz0gMQorICAgIHJldHVybiB0b3RhbAor CisKK2RlZiBkb19lbmFibGVfc25pZmZlcihhcmcsIGZsYWcpOgorICAgICIi IkVuYWJsZS9kaXNhYmxlIHNuaWZmZXIocykuIiIiCisgICAgKGxvY3VzX3Jl LCBuYW1lX3JlKSA9IHBhcnNlX3NuaWZmZXJfY29tbWFuZF9hcmdzKGFyZykK KyAgICB0b3RhbCA9IDAKKyAgICBpZiBsb2N1c19yZS5tYXRjaCgiZ2xvYmFs Iik6CisgICAgICAgIHRvdGFsICs9IGRvX2VuYWJsZV9zbmlmZmVyMShnZGIu ZnJhbWVfc25pZmZlcnMsIG5hbWVfcmUsIGZsYWcpCisgICAgaWYgbG9jdXNf cmUubWF0Y2goInByb2dzcGFjZSIpOgorICAgICAgICB0b3RhbCArPSBkb19l bmFibGVfc25pZmZlcjEoZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkuZnJhbWVf c25pZmZlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuYW1lX3JlLCBmbGFnKQorICAgIGZvciBvYmpmaWxlIGluIGdkYi5vYmpm aWxlcygpOgorICAgICAgICBpZiBsb2N1c19yZS5tYXRjaChvYmpmaWxlLmZp bGVuYW1lKToKKyAgICAgICAgICAgIHRvdGFsICs9IGRvX2VuYWJsZV9zbmlm ZmVyMShvYmpmaWxlLmZyYW1lX3NuaWZmZXJzLCBuYW1lX3JlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcpCisgICAg cHJpbnQoIiVkIHNuaWZmZXIlcyAlcyIgJSAodG90YWwsICIiIGlmIHRvdGFs ID09IDEgZWxzZSAicyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImVuYWJsZWQiIGlmIGZsYWcgZWxzZSAiZGlzYWJsZWQiKSkKKworCitj bGFzcyBFbmFibGVTbmlmZmVyKGdkYi5Db21tYW5kKToKKyAgICAiIiJHREIg Y29tbWFuZCB0byBlbmFibGUgc25pZmZlcnMuCisKKyAgICBVc2FnZTogZW5h YmxlIHNuaWZmZXIgW2xvY3VzLXJlZ2V4cCBbbmFtZS1yZWdleHBdXQorCisg ICAgTE9DVVMtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNo aW5nIHRoZSBvYmplY3RzIHRvIGV4YW1pbmUuCisgICAgTG9jaSBhcmUgImds b2JhbCIsIHRoZSBwcm9ncmFtIHNwYWNlJ3MgZmlsZSwgYW5kIHRoZSBvYmpm aWxlcyB3aXRoaW4KKyAgICB0aGF0IHByb2dyYW0gc3BhY2UuCisKKyAgICBO QU1FX1JFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIg c25pZmZlciBuYW1lcy4KKyAgICBJZiB0aGlzIG9taXR0ZWQgZm9yIGEgc3Bl Y2lmaWVkIGxvY3VzLCB0aGVuIGFsbCByZWdpc3RlcmVkCisgICAgc25pZmZl cnMgaW4gdGhlIGxvY3VzIGFyZSBhZmZlY3RlZC4KKyAgICAiIiIKKworICAg IGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoRW5hYmxlU25p ZmZlciwgc2VsZikuX19pbml0X18oImVuYWJsZSBzbmlmZmVyIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNP TU1BTkRfREFUQSkKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9t X3R0eSk6CisgICAgICAgICIiIkdEQiBjYWxscyB0aGlzIHRvIHBlcmZvcm0g dGhlIGNvbW1hbmQuIiIiCisgICAgICAgIGRvX2VuYWJsZV9zbmlmZmVyKGFy ZywgVHJ1ZSkKKworCitjbGFzcyBEaXNhYmxlU25pZmZlcihnZGIuQ29tbWFu ZCk6CisgICAgIiIiR0RCIGNvbW1hbmQgdG8gZGlzYWJsZSB0aGUgc3BlY2lm aWVkIHNuaWZmZXIuCisKKyAgICBVc2FnZTogZGlzYWJsZSBzbmlmZmVyIFts b2N1cy1yZWdleHAgW25hbWUtcmVnZXhwXV0KKworICAgIExPQ1VTLVJFR0VY UCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgb2JqZWN0 cyB0byBleGFtaW5lLgorICAgIExvY2kgYXJlICJnbG9iYWwiLCB0aGUgcHJv Z3JhbSBzcGFjZSdzIGZpbGUsIGFuZCB0aGUgb2JqZmlsZXMgd2l0aGluCisg ICAgdGhhdCBwcm9ncmFtIHNwYWNlLgorCisgICAgTkFNRV9SRUdFWFAgaXMg YSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIHNuaWZmZXIgbmFtZXMu CisgICAgSWYgdGhpcyBvbWl0dGVkIGZvciBhIHNwZWNpZmllZCBsb2N1cywg dGhlbiBhbGwgcmVnaXN0ZXJlZAorICAgIHNuaWZmZXJzIGluIHRoZSBsb2N1 cyBhcmUgYWZmZWN0ZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18o c2VsZik6CisgICAgICAgIHN1cGVyKERpc2FibGVTbmlmZmVyLCBzZWxmKS5f X2luaXRfXygiZGlzYWJsZSBzbmlmZmVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEp CisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgorICAg ICAgICAiIiJHREIgY2FsbHMgdGhpcyB0byBwZXJmb3JtIHRoZSBjb21tYW5k LiIiIgorICAgICAgICBkb19lbmFibGVfc25pZmZlcihhcmcsIEZhbHNlKQor CisKK2RlZiByZWdpc3Rlcl9zbmlmZmVyX2NvbW1hbmRzKCk6CisgICAgIiIi SW5zdGFsbHMgdGhlIHNuaWZmZXIgY29tbWFuZHMuIiIiCisgICAgSW5mb1Nu aWZmZXIoKQorICAgIEVuYWJsZVNuaWZmZXIoKQorICAgIERpc2FibGVTbmlm ZmVyKCkKKworCityZWdpc3Rlcl9zbmlmZmVyX2NvbW1hbmRzKCkKZGlmZiAt LWdpdCBhL2dkYi9weXRob24vbGliL2dkYi9mdW5jdGlvbi9zbmlmZmVycy5w eSBiL2dkYi9weXRob24vbGliL2dkYi9mdW5jdGlvbi9zbmlmZmVycy5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmRjYTYyCi0t LSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2Z1bmN0aW9u L3NuaWZmZXJzLnB5CkBAIC0wLDAgKzEsNTMgQEAKKyMgQ29weXJpZ2h0IChD KSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisj IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorCisiIiJJbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHdvcmtp bmcgd2l0aCBmcmFtZSBzbmlmZmVycy4iIiIKKworaW1wb3J0IGdkYgorCisK K2RlZiBleGVjdXRlX3NuaWZmZXJzKHNuaWZmZXJfaW5mbyk6CisgICAgIiIi SW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCIHRvIGV4ZWN1dGUg YWxsIHNuaWZmZXJzLgorCisgICAgUnVucyBlYWNoIGN1cnJlbnRseSBlbmFi bGVkIHNuaWZmZXIgdW50aWwgaXQgZmluZHMgdGhlIG9uZSB0aGF0IGNhbgor ICAgIHVud2luZCBnaXZlbiBmcmFtZS4KKworICAgIEFyZ3VtZW50czoKKyAg ICAgICAgc25pZmZlcl9pbmZvOiBhbiBpbnN0YW5jZSBvZiBnZGIuU25pZmZl ckluZm8uCisgICAgUmV0dXJuczoKKyAgICAgICAgVW53aW5kIGluZm8gb3Ig Tm9uZS4gU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFsdWUgcmV0dXJu ZWQKKyAgICAgICAgYnkgU25pZmZlci5fX2NhbGxfXyBiZWxvdy4KKyAgICAi IiIKKyAgICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmlsZXMoKToKKyAgICAg ICAgZm9yIHNuaWZmZXIgaW4gb2JqZmlsZS5mcmFtZV9zbmlmZmVyczoKKyAg ICAgICAgICAgIGlmIHNuaWZmZXIuZW5hYmxlZDoKKyAgICAgICAgICAgICAg ICB1bndpbmRfaW5mbyA9IHNuaWZmZXIuX19jYWxsX18oc25pZmZlcl9pbmZv KQorICAgICAgICAgICAgICAgIGlmIHVud2luZF9pbmZvIGlzIG5vdCBOb25l OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW53aW5kX2luZm8KKwor ICAgIGN1cnJlbnRfcHJvZ3NwYWNlID0gZ2RiLmN1cnJlbnRfcHJvZ3NwYWNl KCkKKyAgICBmb3Igc25pZmZlciBpbiBjdXJyZW50X3Byb2dzcGFjZS5mcmFt ZV9zbmlmZmVyczoKKyAgICAgICAgaWYgc25pZmZlci5lbmFibGVkOgorICAg ICAgICAgICAgdW53aW5kX2luZm8gPSBzbmlmZmVyLl9fY2FsbF9fKHNuaWZm ZXJfaW5mbykKKyAgICAgICAgICAgIGlmIHVud2luZF9pbmZvIGlzIG5vdCBO b25lOgorICAgICAgICAgICAgICAgIHJldHVybiB1bndpbmRfaW5mbworCisg ICAgZm9yIHNuaWZmZXIgaW4gZ2RiLmZyYW1lX3NuaWZmZXJzOgorICAgICAg ICBpZiBzbmlmZmVyLmVuYWJsZWQ6CisgICAgICAgICAgICB1bndpbmRfaW5m byA9IHNuaWZmZXIuX19jYWxsX18oc25pZmZlcl9pbmZvKQorICAgICAgICAg ICAgaWYgdW53aW5kX2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAg ICAgcmV0dXJuIHVud2luZF9pbmZvCisKKyAgICByZXR1cm4gTm9uZQpkaWZm IC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL3NuaWZmZXIucHkgYi9nZGIv cHl0aG9uL2xpYi9nZGIvc25pZmZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5mYmQ1MTlkCi0tLSAvZGV2L251bGwKKysrIGIv Z2RiL3B5dGhvbi9saWIvZ2RiL3NuaWZmZXIucHkKQEAgLTAsMCArMSw4OSBA QAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyIiIlNuaWZmZXIgY2xh c3MgYW5kIHJlZ2lzdGVyX3NuaWZmZXIgZnVuY3Rpb24uIiIiCisKK2ltcG9y dCBnZGIKKworCitjbGFzcyBTbmlmZmVyKG9iamVjdCk6CisgICAgIiIiQmFz ZSBjbGFzcyAob3IgYSB0ZW1wbGF0ZSkgZm9yIGZyYW1lIHNuaWZmZXJzIHdy aXR0ZW4gaW4gUHl0aG9uLgorCisgICAgQSBzbmlmZmVyIGhhcyBhIHNpbmds ZSBtZXRob2QgX19jYWxsX18gYW5kIHRoZSBhdHRyaWJ1dGVzIGRlc2NyaWJl ZCBiZWxvdy4KKworICAgIEF0dHJpYnV0ZXM6CisgICAgICAgIG5hbWU6IFRo ZSBuYW1lIG9mIHRoZSBzbmlmZmVyLgorICAgICAgICBlbmFibGVkOiBBIGJv b2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzbmlmZmVyIGlzIGVuYWJs ZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6 CisgICAgICAgICIiIkNvbnN0cnVjdG9yLgorCisgICAgICAgIEFyZ3M6Cisg ICAgICAgICAgICBuYW1lOiBBbiBpZGVudGlmeWluZyBuYW1lIGZvciB0aGUg c25pZmZlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubmFtZSA9IG5h bWUKKyAgICAgICAgc2VsZi5lbmFibGVkID0gVHJ1ZQorCisgICAgZGVmIF9f Y2FsbF9fKHNlbGYsIHNuaWZmZXJfaW5mbyk6CisgICAgICAgICIiIkdEQiBj YWxscyB0aGlzIG1ldGhvZCB0byB1bndpbmQgYSBmcmFtZS4KKworICAgICAg ICBBcmd1bWVudHM6CisgICAgICAgICAgICBzbmlmZmVyX2luZm86IEFuIGlu c3RhbmNlIG9mIGdkYi5TbmlmZmVySW5mbyBkZXNjcmliaW5nIHRoZSBmcmFt ZS4KKworICAgICAgICBSZXR1cm5zOgorCSAgICBnZGIuVW53aW5kSW5mbyBp bnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxl bWVudGVkRXJyb3IoIlNuaWZmZXIgX19jYWxsX18uIikKKworCitkZWYgcmVn aXN0ZXJfc25pZmZlcihsb2N1cywgc25pZmZlciwgcmVwbGFjZT1GYWxzZSk6 CisgICAgIiIiUmVnaXN0ZXIgc25pZmZlciBpbiBnaXZlbiBsb2N1cy4KKwor ICAgIFRoZSBzbmlmZmVyIGlzIHByZXBlbmRlZCB0byB0aGUgbG9jdXMncyBz bmlmZmVycyBsaXN0LiBTbmlmZmVyCisgICAgbmFtZSBzaG91bGQgYmUgdW5p cXVlLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBsb2N1czogRWl0aGVy IGFuIG9iamZpbGUsIHByb2dzcGFjZSwgb3IgTm9uZSAoaW4gd2hpY2ggY2Fz ZQorICAgICAgICAgICAgICAgdGhlIHNuaWZmZXIgaXMgcmVnaXN0ZXJlZCBn bG9iYWxseSkuCisgICAgICAgIHNuaWZmZXI6IEFuIG9iamVjdCBvZiBhIGdk Yi5TbmlmZmVyIHN1YmNsYXNzCisgICAgICAgIHJlcGxhY2U6IElmIFRydWUs IHJlcGxhY2VzIGV4aXN0aW5nIHNuaWZmZXIgd2l0aCB0aGUgc2FtZSBuYW1l LgorICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIHJhaXNlcyBleGNlcHRp b24gaWYgc25pZmZlciB3aXRoIHRoZSBzYW1lCisgICAgICAgICAgICAgICAg IG5hbWUgYWxyZWFkeSBleGlzdHMuCisKKyAgICBSZXR1cm5zOgorICAgICAg ICBOb3RoaW5nLgorCisgICAgUmFpc2VzOgorICAgICAgICBSdW50aW1lRXJy b3I6IFNuaWZmZXIgbmFtZSBpcyBub3QgdW5pcXVlLgorCisgICAgIiIiCisg ICAgaWYgbG9jdXMgaXMgTm9uZToKKyAgICAgICAgaWYgZ2RiLnBhcmFtZXRl cigidmVyYm9zZSIpOgorICAgICAgICAgICAgZ2RiLndyaXRlKCJSZWdpc3Rl cmluZyBnbG9iYWwgJXMgc25pZmZlciAuLi5cbiIgJSBzbmlmZmVyLm5hbWUp CisgICAgICAgIGxvY3VzID0gZ2RiCisgICAgZWxzZToKKyAgICAgICAgaWYg Z2RiLnBhcmFtZXRlcigidmVyYm9zZSIpOgorICAgICAgICAgICAgZ2RiLndy aXRlKCJSZWdpc3RlcmluZyAlcyBzbmlmZmVyIGZvciAlcyAuLi5cbiIgJQor ICAgICAgICAgICAgICAgICAgICAgIChzbmlmZmVyLm5hbWUsIGxvY3VzLmZp bGVuYW1lKSkKKyAgICBpID0gMAorICAgIGZvciBuZWVkbGUgaW4gbG9jdXMu ZnJhbWVfc25pZmZlcnM6CisgICAgICAgIGlmIG5lZWRsZS5uYW1lID09IHNu aWZmZXIubmFtZToKKyAgICAgICAgICAgIGlmIHJlcGxhY2U6CisgICAgICAg ICAgICAgICAgZGVsIGxvY3VzLmZyYW1lX3NuaWZmZXJzW2ldCisgICAgICAg ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv cigiU25pZmZlciAlcyBhbHJlYWR5IGV4aXN0cy4iICUgc25pZmZlci5uYW1l KQorICAgICAgICBpICs9IDEKKyAgICBsb2N1cy5mcmFtZV9zbmlmZmVycy5p bnNlcnQoMCwgc25pZmZlcikKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHkt b2JqZmlsZS5jIGIvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMKaW5kZXggMGFl Y2FmNi4uYTdiYjdjZCAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weS1vYmpm aWxlLmMKKysrIGIvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMKQEAgLTQyLDYg KzQyLDEwIEBAIHR5cGVkZWYgc3RydWN0CiAKICAgLyogVGhlIGZyYW1lIGZp bHRlciBsaXN0IG9mIGZ1bmN0aW9ucy4gICovCiAgIFB5T2JqZWN0ICpmcmFt ZV9maWx0ZXJzOworCisgIC8qIFRoZSBmcmFtZSBzbmlmZmVycyBsaXN0IG9m IGZ1bmN0aW9ucy4gICovCisgIFB5T2JqZWN0ICpmcmFtZV9zbmlmZmVyczsK KwogICAvKiBUaGUgdHlwZS1wcmludGVyIGxpc3QuICAqLwogICBQeU9iamVj dCAqdHlwZV9wcmludGVyczsKIApAQCAtMTgxLDYgKzE4NSw3IEBAIG9iamZw eV9kZWFsbG9jIChQeU9iamVjdCAqbykKICAgUHlfWERFQ1JFRiAoc2VsZi0+ ZGljdCk7CiAgIFB5X1hERUNSRUYgKHNlbGYtPnByaW50ZXJzKTsKICAgUHlf WERFQ1JFRiAoc2VsZi0+ZnJhbWVfZmlsdGVycyk7CisgIFB5X1hERUNSRUYg KHNlbGYtPmZyYW1lX3NuaWZmZXJzKTsKICAgUHlfWERFQ1JFRiAoc2VsZi0+ dHlwZV9wcmludGVycyk7CiAgIFB5X1hERUNSRUYgKHNlbGYtPnhtZXRob2Rz KTsKICAgUHlfVFlQRSAoc2VsZiktPnRwX2ZyZWUgKHNlbGYpOwpAQCAtMjAz LDYgKzIwOCwxMCBAQCBvYmpmcHlfaW5pdGlhbGl6ZSAob2JqZmlsZV9vYmpl Y3QgKnNlbGYpCiAgIGlmIChzZWxmLT5mcmFtZV9maWx0ZXJzID09IE5VTEwp CiAgICAgcmV0dXJuIDA7CiAKKyAgc2VsZi0+ZnJhbWVfc25pZmZlcnMgPSBQ eUxpc3RfTmV3ICgwKTsKKyAgaWYgKHNlbGYtPmZyYW1lX3NuaWZmZXJzID09 IE5VTEwpCisgICAgcmV0dXJuIDA7CisKICAgc2VsZi0+dHlwZV9wcmludGVy cyA9IFB5TGlzdF9OZXcgKDApOwogICBpZiAoc2VsZi0+dHlwZV9wcmludGVy cyA9PSBOVUxMKQogICAgIHJldHVybiAwOwpAQCAtMzEwLDYgKzMxOSw0OCBA QCBvYmpmcHlfc2V0X2ZyYW1lX2ZpbHRlcnMgKFB5T2JqZWN0ICpvLCBQeU9i amVjdCAqZmlsdGVycywgdm9pZCAqaWdub3JlKQogICByZXR1cm4gMDsKIH0K IAorLyogUmV0dXJuIHRoZSBmcmFtZSBzbmlmZmVycyBhdHRyaWJ1dGUgZm9y IHRoaXMgb2JqZWN0IGZpbGUuICAqLworCitQeU9iamVjdCAqCitvYmpmcHlf Z2V0X2ZyYW1lX3NuaWZmZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3Jl KQoreworICBvYmpmaWxlX29iamVjdCAqc2VsZiA9IChvYmpmaWxlX29iamVj dCAqKSBvOworCisgIFB5X0lOQ1JFRiAoc2VsZi0+ZnJhbWVfc25pZmZlcnMp OworICByZXR1cm4gc2VsZi0+ZnJhbWVfc25pZmZlcnM7Cit9CisKKy8qIFNl dCB0aGlzIG9iamVjdCBmaWxlJ3MgZnJhbWUgc25pZmZlcnMgbGlzdCB0byBT TklGRkVSUy4gICovCisKK3N0YXRpYyBpbnQKK29iamZweV9zZXRfZnJhbWVf c25pZmZlcnMgKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqc25pZmZlcnMsIHZv aWQgKmlnbm9yZSkKK3sKKyAgUHlPYmplY3QgKnRtcDsKKyAgb2JqZmlsZV9v YmplY3QgKnNlbGYgPSAob2JqZmlsZV9vYmplY3QgKikgbzsKKworICBpZiAo IXNuaWZmZXJzKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlF eGNfVHlwZUVycm9yLAorCQkgICAgICAgXygiQ2Fubm90IGRlbGV0ZSB0aGUg ZnJhbWUgc25pZmZlcnMgYXR0cmlidXRlLiIpKTsKKyAgICAgIHJldHVybiAt MTsKKyAgICB9CisKKyAgaWYgKCFQeUxpc3RfQ2hlY2sgKHNuaWZmZXJzKSkK KyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1R5cGVFcnJv ciwKKwkJICAgICAgIF8oIlRoZSBmcmFtZV9zbmlmZmVycyBhdHRyaWJ1dGUg bXVzdCBiZSBhIGxpc3QuIikpOworICAgICAgcmV0dXJuIC0xOworICAgIH0K KworICAvKiBUYWtlIGNhcmUgaW4gY2FzZSB0aGUgTEhTIGFuZCBSSFMgYXJl IHJlbGF0ZWQgc29tZWhvdy4gICovCisgIHRtcCA9IHNlbGYtPmZyYW1lX3Nu aWZmZXJzOworICBQeV9JTkNSRUYgKHNuaWZmZXJzKTsKKyAgc2VsZi0+ZnJh bWVfc25pZmZlcnMgPSBzbmlmZmVyczsKKyAgUHlfWERFQ1JFRiAodG1wKTsK KworICByZXR1cm4gMDsKK30KKwogLyogR2V0IHRoZSAndHlwZV9wcmludGVy cycgYXR0cmlidXRlLiAgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTY0 NSw2ICs2OTYsOCBAQCBzdGF0aWMgUHlHZXRTZXREZWYgb2JqZmlsZV9nZXRz ZXRbXSA9CiAgICAgIlByZXR0eSBwcmludGVycy4iLCBOVUxMIH0sCiAgIHsg ImZyYW1lX2ZpbHRlcnMiLCBvYmpmcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMsCiAg ICAgb2JqZnB5X3NldF9mcmFtZV9maWx0ZXJzLCAiRnJhbWUgRmlsdGVycy4i LCBOVUxMIH0sCisgIHsgImZyYW1lX3NuaWZmZXJzIiwgb2JqZnB5X2dldF9m cmFtZV9zbmlmZmVycywKKyAgICBvYmpmcHlfc2V0X2ZyYW1lX3NuaWZmZXJz LCAiRnJhbWUgU25pZmZlcnMiLCBOVUxMIH0sCiAgIHsgInR5cGVfcHJpbnRl cnMiLCBvYmpmcHlfZ2V0X3R5cGVfcHJpbnRlcnMsIG9iamZweV9zZXRfdHlw ZV9wcmludGVycywKICAgICAiVHlwZSBwcmludGVycy4iLCBOVUxMIH0sCiAg IHsgInhtZXRob2RzIiwgb2JqZnB5X2dldF94bWV0aG9kcywgTlVMTCwKZGlm ZiAtLWdpdCBhL2dkYi9weXRob24vcHktcHJvZ3NwYWNlLmMgYi9nZGIvcHl0 aG9uL3B5LXByb2dzcGFjZS5jCmluZGV4IDI5YjlmOTYuLmNlODViMWEgMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vcHktcHJvZ3NwYWNlLmMKKysrIGIvZ2Ri L3B5dGhvbi9weS1wcm9nc3BhY2UuYwpAQCAtNDEsNiArNDEsMTAgQEAgdHlw ZWRlZiBzdHJ1Y3QKIAogICAvKiBUaGUgZnJhbWUgZmlsdGVyIGxpc3Qgb2Yg ZnVuY3Rpb25zLiAgKi8KICAgUHlPYmplY3QgKmZyYW1lX2ZpbHRlcnM7CisK KyAgLyogVGhlIGZyYW1lIHNuaWZmZXIgbGlzdC4gICovCisgIFB5T2JqZWN0 ICpmcmFtZV9zbmlmZmVyczsKKwogICAvKiBUaGUgdHlwZS1wcmludGVyIGxp c3QuICAqLwogICBQeU9iamVjdCAqdHlwZV9wcmludGVyczsKIApAQCAtODIs NiArODYsNyBAQCBwc3B5X2RlYWxsb2MgKFB5T2JqZWN0ICpzZWxmKQogICBQ eV9YREVDUkVGIChwc19zZWxmLT5kaWN0KTsKICAgUHlfWERFQ1JFRiAocHNf c2VsZi0+cHJpbnRlcnMpOwogICBQeV9YREVDUkVGIChwc19zZWxmLT5mcmFt ZV9maWx0ZXJzKTsKKyAgUHlfWERFQ1JFRiAocHNfc2VsZi0+ZnJhbWVfc25p ZmZlcnMpOwogICBQeV9YREVDUkVGIChwc19zZWxmLT50eXBlX3ByaW50ZXJz KTsKICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+eG1ldGhvZHMpOwogICBQeV9U WVBFIChzZWxmKS0+dHBfZnJlZSAoc2VsZik7CkBAIC0xMDQsNiArMTA5LDEw IEBAIHBzcHlfaW5pdGlhbGl6ZSAocHNwYWNlX29iamVjdCAqc2VsZikKICAg aWYgKHNlbGYtPmZyYW1lX2ZpbHRlcnMgPT0gTlVMTCkKICAgICByZXR1cm4g MDsKIAorICBzZWxmLT5mcmFtZV9zbmlmZmVycyA9IFB5TGlzdF9OZXcgKDAp OworICBpZiAoc2VsZi0+ZnJhbWVfc25pZmZlcnMgPT0gTlVMTCkKKyAgICBy ZXR1cm4gMDsKKwogICBzZWxmLT50eXBlX3ByaW50ZXJzID0gUHlMaXN0X05l dyAoMCk7CiAgIGlmIChzZWxmLT50eXBlX3ByaW50ZXJzID09IE5VTEwpCiAg ICAgcmV0dXJuIDA7CkBAIC0yMTEsNiArMjIwLDQ4IEBAIHBzcHlfc2V0X2Zy YW1lX2ZpbHRlcnMgKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqZnJhbWUsIHZv aWQgKmlnbm9yZSkKICAgcmV0dXJuIDA7CiB9CiAKKy8qIFJldHVybiB0aGUg bGlzdCBvZiB0aGUgZnJhbWUgc25pZmZlcnMgZm9yIHRoaXMgcHJvZ3JhbSBz cGFjZS4gICovCisKK1B5T2JqZWN0ICoKK3BzcHlfZ2V0X2ZyYW1lX3NuaWZm ZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3JlKQoreworICBwc3BhY2Vf b2JqZWN0ICpzZWxmID0gKHBzcGFjZV9vYmplY3QgKikgbzsKKworICBQeV9J TkNSRUYgKHNlbGYtPmZyYW1lX3NuaWZmZXJzKTsKKyAgcmV0dXJuIHNlbGYt PmZyYW1lX3NuaWZmZXJzOworfQorCisvKiBTZXQgdGhpcyBwcm9ncmFtIHNw YWNlJ3MgbGlzdCBvZiB0aGUgc25pZmZlcnMgdG8gU05JRkZFUlMuICAqLwor CitzdGF0aWMgaW50Citwc3B5X3NldF9mcmFtZV9zbmlmZmVycyAoUHlPYmpl Y3QgKm8sIFB5T2JqZWN0ICpzbmlmZmVycywgdm9pZCAqaWdub3JlKQorewor ICBQeU9iamVjdCAqdG1wOworICBwc3BhY2Vfb2JqZWN0ICpzZWxmID0gKHBz cGFjZV9vYmplY3QgKikgbzsKKworICBpZiAoIXNuaWZmZXJzKQorICAgIHsK KyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVHlwZUVycm9yLAorCQkg ICAgICAgImNhbm5vdCBkZWxldGUgdGhlIGZyYW1lIHNuaWZmZXJzIGxpc3Qi KTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKCFQeUxpc3Rf Q2hlY2sgKHNuaWZmZXJzKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJp bmcgKFB5RXhjX1R5cGVFcnJvciwKKwkJICAgICAgICJ0aGUgZnJhbWUgc25p ZmZlcnMgYXR0cmlidXRlIG11c3QgYmUgYSBsaXN0Iik7CisgICAgICByZXR1 cm4gLTE7CisgICAgfQorCisgIC8qIFRha2UgY2FyZSBpbiBjYXNlIHRoZSBM SFMgYW5kIFJIUyBhcmUgcmVsYXRlZCBzb21laG93LiAgKi8KKyAgdG1wID0g c2VsZi0+ZnJhbWVfc25pZmZlcnM7CisgIFB5X0lOQ1JFRiAoc25pZmZlcnMp OworICBzZWxmLT5mcmFtZV9zbmlmZmVycyA9IHNuaWZmZXJzOworICBQeV9Y REVDUkVGICh0bXApOworCisgIHJldHVybiAwOworfQorCiAvKiBHZXQgdGhl ICd0eXBlX3ByaW50ZXJzJyBhdHRyaWJ1dGUuICAqLwogCiBzdGF0aWMgUHlP YmplY3QgKgpAQCAtMzQ1LDYgKzM5Niw4IEBAIHN0YXRpYyBQeUdldFNldERl ZiBwc3BhY2VfZ2V0c2V0W10gPQogICAgICJQcmV0dHkgcHJpbnRlcnMuIiwg TlVMTCB9LAogICB7ICJmcmFtZV9maWx0ZXJzIiwgcHNweV9nZXRfZnJhbWVf ZmlsdGVycywgcHNweV9zZXRfZnJhbWVfZmlsdGVycywKICAgICAiRnJhbWUg ZmlsdGVycy4iLCBOVUxMIH0sCisgIHsgImZyYW1lX3NuaWZmZXJzIiwgcHNw eV9nZXRfZnJhbWVfc25pZmZlcnMsIHBzcHlfc2V0X2ZyYW1lX3NuaWZmZXJz LAorICAgICJGcmFtZSBzbmlmZmVycy4iLCBOVUxMIH0sCiAgIHsgInR5cGVf cHJpbnRlcnMiLCBwc3B5X2dldF90eXBlX3ByaW50ZXJzLCBwc3B5X3NldF90 eXBlX3ByaW50ZXJzLAogICAgICJUeXBlIHByaW50ZXJzLiIsIE5VTEwgfSwK ICAgeyAieG1ldGhvZHMiLCBwc3B5X2dldF94bWV0aG9kcywgTlVMTCwKZGlm ZiAtLWdpdCBhL2dkYi9weXRob24vcHktdW53aW5kLmMgYi9nZGIvcHl0aG9u L3B5LXVud2luZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjNlNDk3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHl0aG9uL3B5 LXVud2luZC5jCkBAIC0wLDAgKzEsNzQzIEBACisvKiBQeXRob24gZnJhbWUg dW53aW5kZXIgaW50ZXJmYWNlLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJhcmNoLXV0aWxz LmgiCisjaW5jbHVkZSAiZnJhbWUtdW53aW5kLmgiCisjaW5jbHVkZSAiZ2Ri X29ic3RhY2suaCIKKyNpbmNsdWRlICJnZGJjbWQuaCIKKyNpbmNsdWRlICJs YW5ndWFnZS5oIgorI2luY2x1ZGUgIm9ic2VydmVyLmgiCisjaW5jbHVkZSAi cHl0aG9uLWludGVybmFsLmgiCisjaW5jbHVkZSAicmVnY2FjaGUuaCIKKyNp bmNsdWRlICJ2YWxwcmludC5oIgorI2luY2x1ZGUgInVzZXItcmVncy5oIgor CisjZGVmaW5lIFRSQUNFX1BZX1VOV0lORChsZXZlbCwgYXJncy4uLikgaWYg KHB5dXdfZGVidWcgPj0gbGV2ZWwpICBcCisgIHsgZnByaW50Zl91bmZpbHRl cmVkIChnZGJfc3RkbG9nLCBhcmdzKTsgfQorCit0eXBlZGVmIHN0cnVjdAor eworICBQeU9iamVjdF9IRUFECisgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFt ZV9pbmZvOworfSBzbmlmZmVyX2luZm9fb2JqZWN0OworCisvKiBUaGUgZGF0 YSB3ZSBrZWVwIGZvciB0aGUgUHlVbndpbmRJbmZvOiBzbmlmZmVyX2luZm8s IHByZXZpb3VzCisgKiBmcmFtZSdzIHJlZ2lzdGVyIHNldCBhbmQgZnJhbWUg SUQuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICBQeU9iamVjdF9IRUFE CisKKyAgLyogZ2RiLlNuaWZmZXJJbmZvIGZvciB0aGUgZnJhbWUgd2UgYXJl IHVud2luZGluZy4gICovCisgIFB5T2JqZWN0ICpzbmlmZmVyX2luZm87CisK KyAgLyogUHJldmlvdXMgZnJhbWUgcmVnaXN0ZXJzIHR1cGxlICgyLXR1cGxl IHBlciByZWdpc3RlcikuICAqLworICBQeU9iamVjdCAqcHJldmlvdXNfZnJh bWVfcmVnaXN0ZXJzOworCisgIC8qIEl0cyBJRC4gICovCisgIHN0cnVjdCBm cmFtZV9pZCBmcmFtZV9pZDsKK30gdW53aW5kX2luZm9fb2JqZWN0OworCisv KiBUaGUgZGF0YSB3ZSBrZWVwIGZvciBhIGZyYW1lIHdlIGNhbiB1bndpbmQ6 IGZyYW1lIElEIGFuZCBhbiBhcnJheSBvZgorICAgKHJlZ2lzdGVyX251bWJl ciwgcmVnaXN0ZXJfdmFsdWUpIHBhaXJzLiAgKi8KKwordHlwZWRlZiBzdHJ1 Y3QKK3sKKyAgLyogRnJhbWUgSUQuICAqLworICBzdHJ1Y3QgZnJhbWVfaWQg ZnJhbWVfaWQ7CisKKyAgLyogR0RCIEFyY2hpdGVjdHVyZS4gICovCisgIHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoOworCisgIC8qIExlbmd0aCBvZiB0aGUg YHJlZycgYXJyYXkgYmVsb3cuICAqLworICBpbnQgcmVnX2NvdW50OworCisg IHN0cnVjdCByZWdfaW5mbworICB7CisgICAgLyogUmVnaXN0ZXIgbnVtYmVy LiAgKi8KKyAgICBpbnQgbnVtYmVyOworCisgICAgLyogUmVnaXN0ZXIgZGF0 YSBieXRlcyBwb2ludGVyLiAgKi8KKyAgICBnZGJfYnl0ZSAqZGF0YTsKKyAg fSByZWdbXTsKK30gY2FjaGVkX2ZyYW1lX2luZm87CisKK3N0YXRpYyBQeVR5 cGVPYmplY3Qgc25pZmZlcl9pbmZvX29iamVjdF90eXBlCisgICAgQ1BZQ0hF Q0tFUl9UWVBFX09CSkVDVF9GT1JfVFlQRURFRiAoInNuaWZmZXJfaW5mb19v YmplY3QiKTsKKworc3RhdGljIFB5VHlwZU9iamVjdCB1bndpbmRfaW5mb19v YmplY3RfdHlwZQorICAgIENQWUNIRUNLRVJfVFlQRV9PQkpFQ1RfRk9SX1RZ UEVERUYgKCJ1bndpbmRfaW5mb19vYmplY3QiKTsKKworc3RhdGljIHVuc2ln bmVkIGludCBweXV3X2RlYnVnID0gMDsKKworc3RhdGljIHN0cnVjdCBnZGJh cmNoX2RhdGEgKnB5dXdfZ2RiYXJjaF9kYXRhOworCisvKiBQYXJzZSBQeXRo b24gSW50LCBzYXZpbmcgaXQgYXQgdGhlIGdpdmVuIGFkZHJlc3MuIFJldHVy bnMgMSBvbiBzdWNjZXNzLAorICAgMCBvdGhlcndpc2UuICAqLworCitzdGF0 aWMgaW50CitweXV3X3BhcnNlX2ludCAoUHlPYmplY3QgKnB5b19pbnQsIGlu dCAqdmFsdWVwKQoreworICBsb25nIGxvbmdfdmFsdWU7CisKKyAgaWYgKHB5 b19pbnQgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKyAgLyogTWFrZSBhIGxv bmcgbG9naWMgY2hlY2sgZmlyc3QuICBJbiBQeXRob24gMy54LCBpbnRlcm5h bGx5LCBhbGwKKyAgICAgaW50ZWdlcnMgYXJlIHJlcHJlc2VudGVkIGFzIGxv bmdzLiAgSW4gUHl0aG9uIDIueCwgdGhlcmUgaXMgc3RpbGwKKyAgICAgYSBk aWZmZXJlbnRpYXRpb24gaW50ZXJuYWxseSBiZXR3ZWVuIGEgUHlJbnQgYW5k IGEgUHlMb25nLgorICAgICBFeHBsaWNpdGx5IGRvIHRoaXMgbG9uZyBjaGVj ayBjb252ZXJzaW9uIGZpcnN0LiBJbiBHREIsIGZvcgorICAgICBQeXRob24g My54LCB3ZSAjaWZkZWYgUHlJbnQgPSBQeUxvbmcuICBUaGlzIGNoZWNrIGhh cyB0byBiZSBkb25lCisgICAgIGZpcnN0IHRvIGVuc3VyZSB3ZSBkbyBub3Qg bG9zZSBpbmZvcm1hdGlvbiBpbiB0aGUgY29udmVyc2lvbgorICAgICBwcm9j ZXNzLiAgKi8KKyAgZWxzZSBpZiAoUHlMb25nX0NoZWNrIChweW9faW50KSkK KyAgICB7CisgICAgICBMT05HRVNUIGwgPSBQeUxvbmdfQXNMb25nTG9uZyAo cHlvX2ludCk7CisKKyAgICAgIGlmIChQeUVycl9PY2N1cnJlZCAoKSkKKyAg ICAgICAgcmV0dXJuIDA7CisgICAgICBsb25nX3ZhbHVlID0gKGxvbmcpbDsK KyAgICAgIGlmIChsICE9IGxvbmdfdmFsdWUpCisgICAgICAgIHJldHVybiAw OworICAgIH0KKyAgZWxzZSBpZiAoUHlJbnRfQ2hlY2sgKHB5b19pbnQpKQor ICAgIHsKKyAgICAgIGxvbmdfdmFsdWUgPSBQeUludF9Bc0xvbmcgKHB5b19p bnQpOworICAgICAgaWYgKFB5RXJyX09jY3VycmVkICgpKQorICAgICAgICBy ZXR1cm4gMDsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gMDsKKyAgaWYg KGxvbmdfdmFsdWUgIT0gKGludCkgbG9uZ192YWx1ZSkKKyAgICByZXR1cm4g MDsKKyAgKnZhbHVlcCA9IChpbnQpIGxvbmdfdmFsdWU7CisgIHJldHVybiAx OworfQorCisvKiBQYXJzZXMgKFJFR05VTSwgUkVHVkFMVUUpIHR1cGxlLiAg UmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb3RoZXJ3aXNlLiAgKi8KK3N0YXRp YyBpbnQKK3B5dXdfcGFyc2VfcmVnaXN0ZXJfdHVwbGUoUHlPYmplY3QgKnB5 b19yZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJl Z19udW0sIHN0cnVjdCB2YWx1ZSAqKnJlZ192YWx1ZSkKK3sKKworICBpZiAo cHlvX3JlZyAhPSBOVUxMICYmIFB5VHVwbGVfQ2hlY2sgKHB5b19yZWcpCisg ICAgICAmJiBQeVR1cGxlX1NpemUgKHB5b19yZWcpID09IDIKKyAgICAgICYm IHB5dXdfcGFyc2VfaW50IChQeVR1cGxlX0dldEl0ZW0gKHB5b19yZWcsIDAp LCByZWdfbnVtKSkKKyAgICB7CisgICAgICBQeU9iamVjdCAqcHlvX3JlZ192 YWx1ZSA9IFB5VHVwbGVfR2V0SXRlbSAocHlvX3JlZywgMSk7CisgICAgICBp ZiAocHlvX3JlZ192YWx1ZSAhPSBOVUxMCisgICAgICAgICAgJiYgKCpyZWdf dmFsdWUgPSB2YWx1ZV9vYmplY3RfdG9fdmFsdWUgKHB5b19yZWdfdmFsdWUp KSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVy biAwOworfQorCisvKiBDYWxsZWQgYnkgdGhlIFB5dGhvbiBpbnRlcnByZXRl ciB0byBvYnRhaW4gc3RyaW5nIHJlcHJlc2VudGF0aW9uCisgICBvZiB0aGUg U25pZmZlckluZm8gb2JqZWN0LiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoK K3NuaWZmZXJfaW5mb3B5X3N0ciAoUHlPYmplY3QgKnNlbGYpCit7CisgIGNo YXIgKnM7CisgIFB5T2JqZWN0ICpyZXN1bHQ7CisgIHN0cnVjdCBmcmFtZV9p bmZvICpmcmFtZSA9ICgoc25pZmZlcl9pbmZvX29iamVjdCAqKXNlbGYpLT5m cmFtZV9pbmZvOworCisgIGlmIChmcmFtZSA9PSBOVUxMKQorICAgIHJldHVy biBQeVN0cmluZ19Gcm9tU3RyaW5nICgiU3RhbGUgU25pZmZlckluZm8gaW5z dGFuY2UiKTsKKyAgcyA9IHhzdHJwcmludGYgKCJTUD0lcyxQQz0lcyIsIGNv cmVfYWRkcl90b19zdHJpbmdfbnogKGdldF9mcmFtZV9zcCAoZnJhbWUpKSwK KyAgICAgICAgY29yZV9hZGRyX3RvX3N0cmluZ19ueiAoZ2V0X2ZyYW1lX3Bj IChmcmFtZSkpKTsKKyAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyAo cyk7CisgIHhmcmVlIChzKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCisv KiBJbXBsZW1lbnRhdGlvbiBvZiBnZGIuU25pZmZlckluZm8ucmVhZF9yZWdp c3RlciAoc2VsZiwgcmVnbnVtKSAtPiBnZGIuVmFsdWUuCisgICBSZXR1cm5z IHRoZSB2YWx1ZSBvZiByZWdpc3RlciBSRUdOVU0gYXMgZ2RiLlZhbHVlIGlu c3RhbmNlLiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3NuaWZmZXJfaW5m b3B5X3JlYWRfcmVnaXN0ZXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAq YXJncykKK3sKKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhj ZXB0OworICBpbnQgcmVnbnVtOworICBzdHJ1Y3QgdmFsdWUgKnZhbCA9IE5V TEw7CisKKyAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlIChhcmdzLCAiaSIsICZy ZWdudW0pKQorICAgIHJldHVybiBOVUxMOworICBpZiAoKChzbmlmZmVyX2lu Zm9fb2JqZWN0ICopIHNlbGYpLT5mcmFtZV9pbmZvID09IE5VTEwpCisgICAg ZXJyb3IgKF8oIkF0dGVtcHRpbmcgdG8gcmVhZCByZWdpc3RlciBmcm9tIHN0 YWxlIFNuaWZmZXJJbmZvIikpOworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBS RVRVUk5fTUFTS19BTEwpCisgICAgeworICAgICAgc3RydWN0IGZyYW1lX2lu Zm8gKmZyYW1lID0gKChzbmlmZmVyX2luZm9fb2JqZWN0ICopIHNlbGYpLT5m cmFtZV9pbmZvOworICAgICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBn ZXRfZnJhbWVfYXJjaCAoZnJhbWUpOworICAgICAgY2hhciAqZXJyb3JfdGV4 dCA9IE5VTEw7CisKKyAgICAgIC8qIFZhbGlkYXRlIHJlZ251bSB0byBwcmV2 ZW50IGFzc2VydCBpbiBgcmVnY2FjaGVfY29va2VkX3JlYWRfdmFsdWUnLiAg Ki8KKyAgICAgIGlmICh1c2VyX3JlZ19tYXBfcmVnbnVtX3RvX25hbWUgKGdk YmFyY2gsIHJlZ251bSkgPT0gTlVMTCkKKyAgICAgICAgZXJyb3JfdGV4dCA9 IHhzdHJwcmludGYgKF8oIkJhZCByZWdpc3RlciBudW1iZXI6ICVkLiIpLCBy ZWdudW0pOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZ2Ri X2J5dGUgYnVmZmVyW01BWF9SRUdJU1RFUl9TSVpFXTsKKworICAgICAgICAg IC8qIENhbGwgYGRlcHJlY2F0ZWRfZnJhbWVfcmVnaXN0ZXJfcmVhZCcgLS0g Y2FsbGluZworICAgICAgICAgICAgIGB2YWx1ZV9vZl9yZWdpc3Rlcicgd291 bGQgYW4gYXNzZXJ0IGluIGBnZXRfZnJhbWVfaWQnCisgICAgICAgICAgICAg YmVjYXVzZSBvdXIgZnJhbWUgaXMgaW5jb21wbGV0ZS4gICovCisgICAgICAg ICAgaWYgKGRlcHJlY2F0ZWRfZnJhbWVfcmVnaXN0ZXJfcmVhZCAoZnJhbWUs IHJlZ251bSwgYnVmZmVyKSkKKyAgICAgICAgICAgIHZhbCA9IHZhbHVlX2Zy b21fY29udGVudHMgKHJlZ2lzdGVyX3R5cGUgKGdkYmFyY2gsIHJlZ251bSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZm ZXIpOworICAgICAgICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgICAgICAg IGVycm9yX3RleHQgPSB4c3RycHJpbnRmIChfKCJDYW5ub3QgcmVhZCByZWdp c3RlciAlZCBmcm9tIGZyYW1lLiIpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlZ251bSk7CisgICAgICAgIH0KKyAgICAgIGlm IChlcnJvcl90ZXh0ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBQ eUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsIGVycm9yX3RleHQp OworICAgICAgICAgIHhmcmVlIChlcnJvcl90ZXh0KTsKKyAgICAgICAgfQor ICAgIH0KKyAgR0RCX1BZX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7CisK KyAgcmV0dXJuIHZhbCA9PSBOVUxMID8gTlVMTCA6IHZhbHVlX3RvX3ZhbHVl X29iamVjdCAodmFsKTsKK30KKworLyogQ3JlYXRlIFB5dGhvbiBTbmlmZmVy SW5mbyBvYmplY3QuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorZnJhbWVf aW5mb190b19zbmlmZmVyX2luZm9fb2JqZWN0IChzdHJ1Y3QgZnJhbWVfaW5m byAqZnJhbWUpCit7CisgIHNuaWZmZXJfaW5mb19vYmplY3QgKnNuaWZmZXJf aW5mbworICAgICAgPSBQeU9iamVjdF9OZXcgKHNuaWZmZXJfaW5mb19vYmpl Y3QsICZzbmlmZmVyX2luZm9fb2JqZWN0X3R5cGUpOworCisgIHNuaWZmZXJf aW5mby0+ZnJhbWVfaW5mbyA9IGZyYW1lOworICByZXR1cm4gKFB5T2JqZWN0 ICopIHNuaWZmZXJfaW5mbzsKK30KKworLyogSW52YWxpZGF0ZSBTbmlmZmVy SW5mbyBvYmplY3QuICAqLworc3RhdGljIHZvaWQKK3NuaWZmZXJfaW5mb19p bnZhbGlkYXRlIChQeU9iamVjdCAqcHlvX3NuaWZmZXJfaW5mbykKK3sKKyAg aWYgKHB5b19zbmlmZmVyX2luZm8gPT0gTlVMTCkKKyAgICByZXR1cm47Cisg ICgoc25pZmZlcl9pbmZvX29iamVjdCAqKSBweW9fc25pZmZlcl9pbmZvKS0+ ZnJhbWVfaW5mbyA9IE5VTEw7Cit9CisKKy8qIGZyYW1lX3Vud2luZC50aGlz X2lkIG1ldGhvZC4gICovCisKK3N0YXRpYyB2b2lkCitweXV3X3RoaXNfaWQg KHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqY2FjaGVf cHRyLAorICAgICAgICAgICAgICBzdHJ1Y3QgZnJhbWVfaWQgKnRoaXNfaWQp Cit7CisgICp0aGlzX2lkID0gKChjYWNoZWRfZnJhbWVfaW5mbyAqKSAqY2Fj aGVfcHRyKS0+ZnJhbWVfaWQ7CisgIGlmIChweXV3X2RlYnVnID49IDEpCisg ICAgeworICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAi JXM6IGZyYW1lX2lkOiAiLCBfX0ZVTkNUSU9OX18pOworICAgICAgZnByaW50 X2ZyYW1lX2lkIChnZGJfc3RkbG9nLCAqdGhpc19pZCk7CisgICAgICBmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJcbiIpOworICAgIH0KK30K KworLyogZnJhbWVfdW53aW5kLnByZXZfcmVnaXN0ZXIuICAqLworCitzdGF0 aWMgc3RydWN0IHZhbHVlICoKK3B5dXdfcHJldl9yZWdpc3RlciAoc3RydWN0 IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKipjYWNoZV9wdHIsCisg ICAgICAgICAgICAgICAgICAgIGludCByZWdudW0pCit7CisgIGNhY2hlZF9m cmFtZV9pbmZvICpjYWNoZWRfZnJhbWUgPSAqY2FjaGVfcHRyOworICBzdHJ1 Y3QgcmVnX2luZm8gKnJlZ19pbmZvID0gY2FjaGVkX2ZyYW1lLT5yZWc7Cisg IHN0cnVjdCByZWdfaW5mbyAqcmVnX2luZm9fZW5kID0gcmVnX2luZm8gKyBj YWNoZWRfZnJhbWUtPnJlZ19jb3VudDsKKworICBUUkFDRV9QWV9VTldJTkQg KDEsICIlcyhmcmFtZT0lcCwuLi4scmVnPSVkKVxuIiwgX19GVU5DVElPTl9f LCB0aGlzX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgIHJlZ251bSk7Cisg IGZvciAoOyByZWdfaW5mbyA8IHJlZ19pbmZvX2VuZDsgKytyZWdfaW5mbykK KyAgICB7CisgICAgICBpZiAocmVnbnVtID09IHJlZ19pbmZvLT5udW1iZXIp CisgICAgICAgIHJldHVybiBmcmFtZV91bndpbmRfZ290X2J5dGVzICh0aGlz X2ZyYW1lLCByZWdudW0sIHJlZ19pbmZvLT5kYXRhKTsKKyAgICB9CisKKyAg cmV0dXJuIGZyYW1lX3Vud2luZF9nb3Rfb3B0aW1pemVkICh0aGlzX2ZyYW1l LCByZWdudW0pOworfQorCisvKiBDYWxsZWQgYnkgdGhlIFB5dGhvbiBpbnRl cnByZXRlciB0byBvYnRhaW4gc3RyaW5nIHJlcHJlc2VudGF0aW9uCisgICBp ZiB0aGUgVW53aW5kSW5mbyBvYmplY3QuICAqLworc3RhdGljIFB5T2JqZWN0 ICoKK3Vud2luZF9pbmZvcHlfc3RyIChQeU9iamVjdCAqc2VsZikKK3sKKyAg UHlPYmplY3QgKnJlc3VsdDsKKyAgc3RydWN0IHVpX2ZpbGUgKnN0cmZpbGUg PSBtZW1fZmlsZW9wZW4gKCk7CisgIHVud2luZF9pbmZvX29iamVjdCAqcHlv X3Vud2luZF9pbmZvID0gKHVud2luZF9pbmZvX29iamVjdCAqKSBzZWxmOwor CisgIGZwcmludGZfdW5maWx0ZXJlZCAoc3RyZmlsZSwgIkZyYW1lIElEOiAi KTsKKyAgZnByaW50X2ZyYW1lX2lkIChzdHJmaWxlLCBweW9fdW53aW5kX2lu Zm8tPmZyYW1lX2lkKTsKKyAgeworICAgIGludCByZWdfY291bnQgPSBQeVR1 cGxlX1NpemUgKHB5b191bndpbmRfaW5mby0+cHJldmlvdXNfZnJhbWVfcmVn aXN0ZXJzKTsKKyAgICBpbnQgaTsKKyAgICBjaGFyICpzZXAgPSAiIjsKKyAg ICBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9ucyBvcHRzOworCisgICAgZ2V0 X3VzZXJfcHJpbnRfb3B0aW9ucyAoJm9wdHMpOworICAgIGZwcmludGZfdW5m aWx0ZXJlZCAoc3RyZmlsZSwgIlxuUHJldmlvdXMgZnJhbWUgcmVnaXN0ZXJz OiAoIik7CisgICAgZm9yIChpID0gMDsgaSA8IHJlZ19jb3VudDsgaSsrKQor ICAgICAgeworICAgICAgICBpbnQgcmVnX251bTsKKyAgICAgICAgc3RydWN0 IHZhbHVlICpyZWdfdmFsdWU7CisgICAgICAgIFB5T2JqZWN0ICpweW9fcmVn ID0gUHlUdXBsZV9HZXRJdGVtICgKKyAgICAgICAgICAgIHB5b191bndpbmRf aW5mby0+cHJldmlvdXNfZnJhbWVfcmVnaXN0ZXJzLGkpOworCisgICAgICAg IGlmIChweXV3X3BhcnNlX3JlZ2lzdGVyX3R1cGxlIChweW9fcmVnLCAmcmVn X251bSwgJnJlZ192YWx1ZSkpCisgICAgICAgICAgeworICAgICAgICAgICAg ZnByaW50Zl91bmZpbHRlcmVkIChzdHJmaWxlLCAiJXMoJWQsICIsIHNlcCwg cmVnX251bSk7CisgICAgICAgICAgICB2YWx1ZV9wcmludCAocmVnX3ZhbHVl LCBzdHJmaWxlLCAmb3B0cyk7CisgICAgICAgICAgICBmcHJpbnRmX3VuZmls dGVyZWQgKHN0cmZpbGUsICIpIik7CisgICAgICAgICAgfQorICAgICAgICBl bHNlCisgICAgICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChzdHJmaWxlLCAi KEJBRCkiKTsKKyAgICAgICAgc2VwID0gIiwgIjsKKyAgICAgIH0KKyAgICBm cHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZpbGUsICIpIik7CisgIH0KKyAgewor ICAgIGNoYXIgKnMgPSB1aV9maWxlX3hzdHJkdXAgKHN0cmZpbGUsIE5VTEwp OworCisgICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyAocyk7Cisg ICAgeGZyZWUgKHMpOworICB9CisgIHVpX2ZpbGVfZGVsZXRlIChzdHJmaWxl KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogQ29udmVydCBnZGIuVmFs dWUgb2JqZWN0IHRvIENPUkVBRERSLiAgKi8KK3N0YXRpYyBpbnQKK3B5dXdf dmFsdWVfb2JqX3RvX3BvaW50ZXIgKFB5T2JqZWN0ICpweW9fdmFsdWUsIENP UkVfQUREUiAqYWRkcikKK3sKKyAgc3RydWN0IHZhbHVlICp2YWx1ZSA9IHZh bHVlX29iamVjdF90b192YWx1ZSAocHlvX3ZhbHVlKTsKKworICBpZiAodmFs dWUgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKyAgKmFkZHIgPSB1bnBhY2tf cG9pbnRlciAodmFsdWVfdHlwZSAodmFsdWUpLCB2YWx1ZV9jb250ZW50cyAo dmFsdWUpKTsKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEltcGxlbWVudGF0aW9u IG9mIGdkYi5VbndpbmRJbmZvLmZyYW1lX2lkX2J1aWxkIChzZWxmLCBTUCwg UEMpIC0+IE5vbmUuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgordW53aW5k X2luZm9weV9mcmFtZV9pZF9idWlsZCAoUHlPYmplY3QgKnNlbGYsIFB5T2Jq ZWN0ICphcmdzKQoreworICBQeU9iamVjdCAqcHlvX3NwOworICBQeU9iamVj dCAqcHlvX3BjOworICBDT1JFX0FERFIgc3A7CisgIENPUkVfQUREUiBwYzsK KworICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUgKGFyZ3MsICJPTzpmcmFtZV9p ZF9idWlsZCIsICZweW9fc3AsICZweW9fcGMpCisgICAgICAgfHwgIXB5dXdf dmFsdWVfb2JqX3RvX3BvaW50ZXIgKHB5b19zcCwgJnNwKQorICAgICAgIHx8 ICFweXV3X3ZhbHVlX29ial90b19wb2ludGVyIChweW9fcGMsICZwYykpCisg ICAgcmV0dXJuIE5VTEw7CisKKyAgKCh1bndpbmRfaW5mb19vYmplY3QgKikg c2VsZiktPmZyYW1lX2lkID0gZnJhbWVfaWRfYnVpbGQgKHNwLCBwYyk7Cisg IFB5X0lOQ1JFRiAoUHlfTm9uZSk7CisgIHJldHVybiBQeV9Ob25lOworfQor CisvKiBJbXBsZW1lbnRhdGlvbiBvZgorICAgZ2RiLlVud2luZEluZm8uZnJh bWVfaWRfYnVpbGRfc3BlY2lhbCAoc2VsZiwgU1AsIFBDLCBTUEVDSUFMKSAt PiBOb25lLiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3Vud2luZF9pbmZv cHlfZnJhbWVfaWRfYnVpbGRfc3BlY2lhbCAoUHlPYmplY3QgKnNlbGYsIFB5 T2JqZWN0ICphcmdzKQoreworICBQeU9iamVjdCAqcHlvX3NwOworICBQeU9i amVjdCAqcHlvX3BjOworICBQeU9iamVjdCAqcHlvX3NwZWNpYWw7CisgIENP UkVfQUREUiBzcDsKKyAgQ09SRV9BRERSIHBjOworICBDT1JFX0FERFIgc3Bl Y2lhbDsKKworICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUgKGFyZ3MsICJPT086 ZnJhbWVfaWRfYnVpbGRfc3BlY2lhbCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICZweW9fc3AsICZweW9fcGMsICZweW9fc3BlY2lhbCkKKyAgICAg IHx8ICFweXV3X3ZhbHVlX29ial90b19wb2ludGVyIChweW9fc3AsICZzcCkK KyAgICAgIHx8ICFweXV3X3ZhbHVlX29ial90b19wb2ludGVyIChweW9fcGMs ICZwYykKKyAgICAgIHx8ICFweXV3X3ZhbHVlX29ial90b19wb2ludGVyIChw eW9fc3BlY2lhbCwgJnNwZWNpYWwpKQorICAgIHJldHVybiBOVUxMOworCisg ICgodW53aW5kX2luZm9fb2JqZWN0ICopIHNlbGYpLT5mcmFtZV9pZAorICAg ICAgICAgICAgICA9IGZyYW1lX2lkX2J1aWxkX3NwZWNpYWwgKHNwLCBwYywg c3BlY2lhbCk7CisgIFB5X0lOQ1JFRiAoUHlfTm9uZSk7CisgIHJldHVybiBQ eV9Ob25lOworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBnZGIuVW53aW5k SW5mby5mcmFtZV9idWlsZF9pZF93aWxkIChzZWxmLCBTUCkgLT4gTm9uZS4g ICovCisKK3N0YXRpYyBQeU9iamVjdCAqCit1bndpbmRfaW5mb3B5X2ZyYW1l X2lkX2J1aWxkX3dpbGQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJn cykKK3sKKyAgUHlPYmplY3QgKnB5b19zcDsKKyAgQ09SRV9BRERSIHNwOwor CisgIGlmICghUHlBcmdfUGFyc2VUdXBsZSAoYXJncywgIk86ZnJhbWVfaWRf YnVpbGRfd2lsZCIsICZweW9fc3ApCisgICAgICB8fCAhcHl1d192YWx1ZV9v YmpfdG9fcG9pbnRlciAocHlvX3NwLCAmc3ApKQorICAgIHJldHVybiBOVUxM OworCisgICgodW53aW5kX2luZm9fb2JqZWN0ICopIHNlbGYpLT5mcmFtZV9p ZCA9IGZyYW1lX2lkX2J1aWxkX3dpbGQgKHNwKTsKKyAgUHlfSU5DUkVGIChQ eV9Ob25lKTsKKyAgcmV0dXJuIFB5X05vbmU7Cit9CisKKy8qIEluaXRpYWxp emUgbmV3IFVud2luZEluZm8gb2JqZWN0LiAgKi8KK3N0YXRpYyBpbnQKK3Vu d2luZF9pbmZvcHlfaW5pdCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICph cmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICBQeU9iamVjdCAqcHlvX3Nu aWZmZXJfaW5mbzsKKyAgUHlPYmplY3QgKnB5b19yZWdzOworCisgIGlmIChQ eUFyZ19VbnBhY2tUdXBsZSAoYXJncywgIl9faW5pdF9fIiwgMiwgMiwgJnB5 b19zbmlmZmVyX2luZm8sICZweW9fcmVncykKKyAgICAgICYmIChweW9fc25p ZmZlcl9pbmZvICE9IE5VTEwKKyAgICAgICYmIFB5T2JqZWN0X0lzSW5zdGFu Y2UgKHB5b19zbmlmZmVyX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoUHlPYmplY3QgKikgJnNuaWZmZXJfaW5mb19vYmplY3RfdHlw ZSkgPiAwKQorICAgICAgJiYgcHlvX3JlZ3MgIT0gTlVMTAorICAgICAgJiYg UHlUdXBsZV9DaGVjayAocHlvX3JlZ3MpKQorICAgIHsKKyAgICAgIHVud2lu ZF9pbmZvX29iamVjdCAqdW53aW5kX2luZm8gPSAodW53aW5kX2luZm9fb2Jq ZWN0ICopIHNlbGY7CisgICAgICB1bndpbmRfaW5mby0+ZnJhbWVfaWQgPSBu dWxsX2ZyYW1lX2lkOworICAgICAgdW53aW5kX2luZm8tPnNuaWZmZXJfaW5m byA9IHB5b19zbmlmZmVyX2luZm87CisgICAgICBQeV9JTkNSRUYgKHB5b19z bmlmZmVyX2luZm8pOworICAgICAgdW53aW5kX2luZm8tPnByZXZpb3VzX2Zy YW1lX3JlZ2lzdGVycyA9IHB5b19yZWdzOworICAgICAgUHlfSU5DUkVGIChw eW9fcmVncyk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIHJldHVybiAt MTsKK30KKworc3RhdGljIHZvaWQKK3Vud2luZF9pbmZvcHlfZGVhbGxvYyAo UHlPYmplY3QgKnNlbGYpCit7CisgIHVud2luZF9pbmZvX29iamVjdCAqdW53 aW5kX2luZm8gPSAodW53aW5kX2luZm9fb2JqZWN0ICopIHNlbGY7CisgIFB5 X1hERUNSRUYgKHVud2luZF9pbmZvLT5zbmlmZmVyX2luZm8pOworICBQeV9Y REVDUkVGICh1bndpbmRfaW5mby0+cHJldmlvdXNfZnJhbWVfcmVnaXN0ZXJz KTsKKyAgUHlfVFlQRSAoc2VsZiktPnRwX2ZyZWUgKHNlbGYpOworfQorCisv KiBGcmFtZSBzbmlmZmVyIGRpc3BhdGNoLiAgKi8KKworc3RhdGljIGludAor cHl1d19zbmlmZmVyIChjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kICpzZWxm LCBzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKyAgICAgICAgICAg ICAgdm9pZCAqKmNhY2hlX3B0cikKK3sKKyAgc3RydWN0IGdkYmFyY2ggKmdk YmFyY2g7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwczsKKyAgc3RydWN0 IGNsZWFudXAgKmNhY2hlZF9mcmFtZV9jbGVhbnVwczsKKyAgUHlPYmplY3Qg KnB5b19tb2R1bGU7CisgIFB5T2JqZWN0ICpweW9fZXhlY3V0ZTsKKyAgUHlP YmplY3QgKnB5b19zbmlmZmVyX2luZm87CisgIFB5T2JqZWN0ICpweW9fdW53 aW5kX2luZm87CisgIGNhY2hlZF9mcmFtZV9pbmZvICpjYWNoZWRfZnJhbWUg PSBOVUxMOworCisgIGdkYmFyY2ggPSAoc3RydWN0IGdkYmFyY2ggKikgKHNl bGYtPnVud2luZF9kYXRhKTsKKyAgY2xlYW51cHMgPSBlbnN1cmVfcHl0aG9u X2VudiAoZ2RiYXJjaCwgY3VycmVudF9sYW5ndWFnZSk7CisgIFRSQUNFX1BZ X1VOV0lORCAoMywgIiVzKFNQPSVzLCBQQz0lcylcbiIsIF9fRlVOQ1RJT05f XywKKyAgICAgICAgICAgICAgICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgZ2V0 X2ZyYW1lX3NwICh0aGlzX2ZyYW1lKSksCisgICAgICAgICAgICAgICAgICAg cGFkZHJlc3MgKGdkYmFyY2gsIGdldF9mcmFtZV9wYyAodGhpc19mcmFtZSkp KTsKKyAgcHlvX3NuaWZmZXJfaW5mbyA9IGZyYW1lX2luZm9fdG9fc25pZmZl cl9pbmZvX29iamVjdCAodGhpc19mcmFtZSk7CisgIGlmIChweW9fc25pZmZl cl9pbmZvID09IE5VTEwpCisgICAgZ290byBlcnJvcjsKKyAgbWFrZV9jbGVh bnVwX3B5X2RlY3JlZiAocHlvX3NuaWZmZXJfaW5mbyk7CisKKyAgaWYgKChw eW9fbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlICgiZ2RiLmZ1bmN0 aW9uLnNuaWZmZXJzIikpID09IE5VTEwpCisgICAgZ290byBlcnJvcjsKKyAg bWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAocHlvX21vZHVsZSk7CisKKyAgcHlv X2V4ZWN1dGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nIChweW9fbW9kdWxl LCAiZXhlY3V0ZV9zbmlmZmVycyIpOworICBpZiAocHlvX2V4ZWN1dGUgPT0g TlVMTCkKKyAgICBnb3RvIGVycm9yOworICBtYWtlX2NsZWFudXBfcHlfZGVj cmVmIChweW9fZXhlY3V0ZSk7CisKKyAgcHlvX3Vud2luZF9pbmZvCisgICAg ICA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MgKHB5b19leGVjdXRl LCBweW9fc25pZmZlcl9pbmZvLCBOVUxMKTsKKyAgaWYgKHB5b191bndpbmRf aW5mbyA9PSBOVUxMKQorICAgIGdvdG8gZXJyb3I7CisgIG1ha2VfY2xlYW51 cF9weV9kZWNyZWYgKHB5b191bndpbmRfaW5mbyk7CisgIGlmIChweW9fdW53 aW5kX2luZm8gPT0gUHlfTm9uZSkKKyAgICBnb3RvIGVycm9yOworICBpZiAo UHlPYmplY3RfSXNJbnN0YW5jZSAocHlvX3Vud2luZF9pbmZvLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopICZ1bndpbmRfaW5m b19vYmplY3RfdHlwZSkgPD0gMCkKKyAgICBlcnJvciAoXygiQSBTbmlmZmVy IHNob3VsZCByZXR1cm4gZ2RiLlVud2luZEluZm8gaW5zdGFuY2UuIikpOwor CisgIHsKKyAgICB1bndpbmRfaW5mb19vYmplY3QgKnVud2luZF9pbmZvID0g KHVud2luZF9pbmZvX29iamVjdCAqKSBweW9fdW53aW5kX2luZm87CisgICAg UHlPYmplY3QgKnB5b19yZWdpc3RlcnMgPSB1bndpbmRfaW5mby0+cHJldmlv dXNfZnJhbWVfcmVnaXN0ZXJzOworICAgIGludCBpOworICAgIGludCByZWdf Y291bnQ7CisgICAgc2l6ZV90IGNhY2hlZF9mcmFtZV9zaXplOworICAgIHNp emVfdCBnZGJfYnl0ZXNfY291bnQ7CisgICAgZ2RiX2J5dGUgKmdkYl9kYXRh X2ZyZWUsICpnZGJfZGF0YV9lbmQ7CisKKyAgICBpZiAoZnJhbWVfaWRfZXEg KHVud2luZF9pbmZvLT5mcmFtZV9pZCwgbnVsbF9mcmFtZV9pZCkpCisgICAg ICBlcnJvciAoXygiU25pZmZlciBzaG91bGQgY2FsbCBvbmUgb2YgdGhlIGZy YW1lX2lkX2J1aWxkIG1ldGhvZHMgIgorICAgICAgICAgICAgICAgIm9uIFVu d2luZEluZm8gaW5zdGFuY2UgYmVmb3JlIHJldHVybmluZyBpdC4iKSk7Cisg ICAgaWYgKHB5b19yZWdpc3RlcnMgPT0gTlVMTCkKKyAgICAgIGdvdG8gZXJy b3I7CisgICAgaWYgKCFQeVR1cGxlX0NoZWNrIChweW9fcmVnaXN0ZXJzKSkK KyAgICAgIGVycm9yIChfKCJSZWdpc3RlcnMgcGFzc2VkIHRvIFVud2luZElu Zm8gY29uc3RydWN0b3Igc2hvdWxkIGJlIGEgdHVwbGUuIikpOworCisgICAg LyogRmlndXJlIG91dCBob3cgbXVjaCBzcGFjZSB3ZSBuZWVkIHRvIGFsbG9j YXRlLiAgKi8KKyAgICByZWdfY291bnQgPSBQeVR1cGxlX1NpemUgKHB5b19y ZWdpc3RlcnMpOworICAgIGlmIChyZWdfY291bnQgPD0gMCkKKyAgICAgIGVy cm9yIChfKCJSZWdpc3RlciBsaXN0IHNob3VsZCBub3QgYmUgZW1wdHkuIikp OworICAgIC8qIFdlIG1pZ2h0IG92ZXJlc3RpbWF0ZSBgZ2RiX2J5dGVzX2Nv dW50JywgYnV0IGl0J3Mgbm90IHdvcnRoCisgICAgICAgcGFyc2luZyByZWdp c3RlciBudW1iZXJzIHR3aWNlIHRvIGNhbGN1bGF0ZSB0aGUgZXhhY3QgbnVt YmVyIG9mCisgICAgICAgYnl0ZXMgbmVlZGVkLiAgKi8KKyAgICBnZGJfYnl0 ZXNfY291bnQgPSByZWdfY291bnQgKiBNQVhfUkVHSVNURVJfU0laRTsKKyAg ICBjYWNoZWRfZnJhbWVfc2l6ZSA9IHNpemVvZiAoKmNhY2hlZF9mcmFtZSkg KworICAgICAgICByZWdfY291bnQgKiBzaXplb2YgKGNhY2hlZF9mcmFtZS0+ cmVnWzBdKSArCisgICAgICAgIGdkYl9ieXRlc19jb3VudCAqIHNpemVvZiAo Z2RiX2J5dGUpOworCisgICAgY2FjaGVkX2ZyYW1lID0geG1hbGxvYyAoY2Fj aGVkX2ZyYW1lX3NpemUpOworICAgIGNhY2hlZF9mcmFtZV9jbGVhbnVwcyA9 IG1ha2VfY2xlYW51cCAoeGZyZWUsIGNhY2hlZF9mcmFtZSk7CisgICAgLyog QWxsb2NhdGlvbnMgYWZ0ZXIgdGhpcyBwb2ludCB3aWxsIGJlIGRpc2NhcmRl ZCEgICovCisKKyAgICBnZGJfZGF0YV9lbmQgPSAoZ2RiX2J5dGUgKikoKGNo YXIgKikgY2FjaGVkX2ZyYW1lICsgY2FjaGVkX2ZyYW1lX3NpemUpOworICAg IGdkYl9kYXRhX2ZyZWUgPSBnZGJfZGF0YV9lbmQgLSBnZGJfYnl0ZXNfY291 bnQ7CisKKyAgICBjYWNoZWRfZnJhbWUtPmdkYmFyY2ggPSBnZGJhcmNoOwor ICAgIGNhY2hlZF9mcmFtZS0+ZnJhbWVfaWQgPSB1bndpbmRfaW5mby0+ZnJh bWVfaWQ7CisgICAgY2FjaGVkX2ZyYW1lLT5yZWdfY291bnQgPSByZWdfY291 bnQ7CisKKyAgICAvKiBQb3B1bGF0ZSByZWdpc3RlcnMgYXJyYXkuICAqLwor ICAgIGZvciAoaSA9IDA7IGkgPCByZWdfY291bnQ7IGkrKykKKyAgICAgIHsK KyAgICAgICAgc3RydWN0IHJlZ19pbmZvICpyZWcgPSAmKGNhY2hlZF9mcmFt ZS0+cmVnW2ldKTsKKyAgICAgICAgc3RydWN0IHZhbHVlICp2YWx1ZTsKKyAg ICAgICAgc2l6ZV90IGRhdGFfc2l6ZTsKKworICAgICAgICBpZiAoIXB5dXdf cGFyc2VfcmVnaXN0ZXJfdHVwbGUgKFB5VHVwbGVfR2V0SXRlbSAocHlvX3Jl Z2lzdGVycywgaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnJlZy0+bnVtYmVyLCAmdmFsdWUpKQorICAgICAgICAgIGVy cm9yIChfKCJQeXRob24gc25pZmZlciByZXR1cm5lZCBiYWQgcmVnaXN0ZXIg dHVwbGU6ICIKKyAgICAgICAgICAgICAgICAgICAiaXRlbSAjJWQgaXMgbm90 IGEgKHJlZ19ubywgcmVnX2RhdGEpIHR1cGxlICIKKyAgICAgICAgICAgICAg ICAgICAid2l0aCBpbnRlZ2VyIHJlZ19ubyBhbmQgZ2RiLlZhbHVlIHJlZ19k YXRhLiIpLCBpKTsKKworICAgICAgICBkYXRhX3NpemUgPSByZWdpc3Rlcl9z aXplIChnZGJhcmNoLCByZWctPm51bWJlcik7CisgICAgICAgIGlmIChkYXRh X3NpemUgIT0gVFlQRV9MRU5HVEggKHZhbHVlX2VuY2xvc2luZ190eXBlICh2 YWx1ZSkpKQorICAgICAgICAgIGVycm9yIChfKCJUaGUgdmFsdWUgb2YgdGhl IHJlZ2lzdGVyICMlZCByZXR1cm5lZCBieSB0aGUgIgorICAgICAgICAgICAg ICAgICAgICJQeXRob24gc25pZmZlciBoYXMgdW5leHBlY3RlZCBzaXplOiAl dSBpbnN0ZWFkICIKKyAgICAgICAgICAgICAgICAgICAib2YgJXUuIiksIHJl Zy0+bnVtYmVyLAorICAgICAgICAgICAgICAgICAodW5zaWduZWQpKFRZUEVf TEVOR1RIICh2YWx1ZV9lbmNsb3NpbmdfdHlwZSAodmFsdWUpKSksCisgICAg ICAgICAgICAgICAgICh1bnNpZ25lZClkYXRhX3NpemUpOworCisgICAgICAg IC8qIFNob3VsZCBub3Qgb3ZlcmZsb3cgIHRoZSBidWZmZXIuICAqLworICAg ICAgICBnZGJfYXNzZXJ0ICgoZ2RiX2RhdGFfZnJlZSArIGRhdGFfc2l6ZSkg PD0gZ2RiX2RhdGFfZW5kKTsKKyAgICAgICAgbWVtY3B5IChnZGJfZGF0YV9m cmVlLCB2YWx1ZV9jb250ZW50cyAodmFsdWUpLCBkYXRhX3NpemUpOworICAg ICAgICByZWctPmRhdGEgPSBnZGJfZGF0YV9mcmVlOworICAgICAgICBnZGJf ZGF0YV9mcmVlICs9IGRhdGFfc2l6ZTsKKyAgICAgIH0KKyAgfQorCisgICpj YWNoZV9wdHIgPSBjYWNoZWRfZnJhbWU7CisgIGRpc2NhcmRfY2xlYW51cHMg KGNhY2hlZF9mcmFtZV9jbGVhbnVwcyk7CisgIGRvX2NsZWFudXBzIChjbGVh bnVwcyk7CisgIHNuaWZmZXJfaW5mb19pbnZhbGlkYXRlIChweW9fc25pZmZl cl9pbmZvKTsKKyAgcmV0dXJuIDE7CisKK2Vycm9yOgorICBkb19jbGVhbnVw cyAoY2xlYW51cHMpOworICBzbmlmZmVyX2luZm9faW52YWxpZGF0ZSAocHlv X3NuaWZmZXJfaW5mbyk7CisgIHJldHVybiAwOworfQorCisvKiBGcmFtZSBj YWNoZSByZWxlYXNlIHNoaW0uICAqLworCitzdGF0aWMgdm9pZAorcHl1d19k ZWFsbG9jX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwg dm9pZCAqY2FjaGUpCit7CisgIFRSQUNFX1BZX1VOV0lORCAoMywgIiVzOiBl bnRlciIsIF9fRlVOQ1RJT05fXyk7CisgIHhmcmVlIChjYWNoZSk7Cit9CisK K3N0cnVjdCBweXV3X2dkYmFyY2hfZGF0YV90eXBlCit7CisgIC8qIEhhcyB0 aGUgdW53aW5kZXIgc2hpbSBiZWVuIHByZXBlbmRlZD8gKi8KKyAgaW50IHVu d2luZGVyX3JlZ2lzdGVyZWQ7Cit9OworCitzdGF0aWMgdm9pZCAqCitweXV3 X2dkYmFyY2hfZGF0YV9pbml0IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkK K3sKKyAgcmV0dXJuIEdEQkFSQ0hfT0JTVEFDS19aQUxMT0MgKGdkYmFyY2gs IHN0cnVjdCBweXV3X2dkYmFyY2hfZGF0YV90eXBlKTsKK30KKworLyogTmV3 IGluZmVyaW9yIGFyY2hpdGVjdHVyZSBjYWxsYmFjazogcmVnaXN0ZXIgdGhl IFB5dGhvbiBzbmlmZmVycworICAgaW50ZXJtZWRpYXJ5LiAgKi8KKworc3Rh dGljIHZvaWQKK3B5dXdfb25fbmV3X2dkYmFyY2ggKHN0cnVjdCBnZGJhcmNo ICpuZXdhcmNoKQoreworICBzdHJ1Y3QgcHl1d19nZGJhcmNoX2RhdGFfdHlw ZSAqZGF0YSA9CisgICAgICBnZGJhcmNoX2RhdGEgKG5ld2FyY2gsIHB5dXdf Z2RiYXJjaF9kYXRhKTsKKworICBpZiAoIWRhdGEtPnVud2luZGVyX3JlZ2lz dGVyZWQpCisgICAgeworICAgICAgc3RydWN0IGZyYW1lX3Vud2luZCAqdW53 aW5kZXIKKyAgICAgICAgICA9IEdEQkFSQ0hfT0JTVEFDS19aQUxMT0MgKG5l d2FyY2gsIHN0cnVjdCBmcmFtZV91bndpbmQpOworCisgICAgICB1bndpbmRl ci0+dHlwZSA9IE5PUk1BTF9GUkFNRTsKKyAgICAgIHVud2luZGVyLT5zdG9w X3JlYXNvbiA9IGRlZmF1bHRfZnJhbWVfdW53aW5kX3N0b3BfcmVhc29uOwor ICAgICAgdW53aW5kZXItPnRoaXNfaWQgPSBweXV3X3RoaXNfaWQ7CisgICAg ICB1bndpbmRlci0+cHJldl9yZWdpc3RlciA9IHB5dXdfcHJldl9yZWdpc3Rl cjsKKyAgICAgIHVud2luZGVyLT51bndpbmRfZGF0YSA9ICh2b2lkICopIG5l d2FyY2g7CisgICAgICB1bndpbmRlci0+c25pZmZlciA9IHB5dXdfc25pZmZl cjsKKyAgICAgIHVud2luZGVyLT5kZWFsbG9jX2NhY2hlID0gcHl1d19kZWFs bG9jX2NhY2hlOworICAgICAgZnJhbWVfdW53aW5kX3ByZXBlbmRfdW53aW5k ZXIgKG5ld2FyY2gsIHVud2luZGVyKTsKKyAgICAgIFRSQUNFX1BZX1VOV0lO RCAoMSwgIiVzOiByZWdpc3RlcmVkIHVud2luZGVyIGZvciAlc1xuIiwgX19G VU5DVElPTl9fLAorICAgICAgICAgICAgICAgICAgICAgICBnZGJhcmNoX2Jm ZF9hcmNoX2luZm8gKG5ld2FyY2gpLT5wcmludGFibGVfbmFtZSk7CisgICAg ICBkYXRhLT51bndpbmRlcl9yZWdpc3RlcmVkID0gMTsKKyAgICB9Cit9CisK Ky8qIEluaXRpYWxpemUgdW53aW5kIG1hY2hpbmVyeS4gICovCisKK2ludAor Z2RicHlfaW5pdGlhbGl6ZV91bndpbmQgKHZvaWQpCit7CisgIGludCByYzsK KyAgYWRkX3NldHNob3dfenVpbnRlZ2VyX2NtZAorICAgICAgKCJweS11bndp bmQiLCBjbGFzc19tYWludGVuYW5jZSwgJnB5dXdfZGVidWcsCisgICAgICAg IF8oIlNldCBQeXRob24gdW53aW5kZXIgZGVidWdnaW5nLiIpLAorICAgICAg ICBfKCJTaG93IFB5dGhvbiB1bndpbmRlciBkZWJ1Z2dpbmcuIiksCisgICAg ICAgIF8oIldoZW4gbm9uLXplcm8sIFB5dGhpbiB1bndpbmRlciBkZWJ1Z2dp bmcgaXMgZW5hYmxlZC4iKSwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVM TCwKKyAgICAgICAgJnNldGRlYnVnbGlzdCwgJnNob3dkZWJ1Z2xpc3QpOwor ICBweXV3X2dkYmFyY2hfZGF0YQorICAgICAgPSBnZGJhcmNoX2RhdGFfcmVn aXN0ZXJfcG9zdF9pbml0IChweXV3X2dkYmFyY2hfZGF0YV9pbml0KTsKKyAg b2JzZXJ2ZXJfYXR0YWNoX2FyY2hpdGVjdHVyZV9jaGFuZ2VkIChweXV3X29u X25ld19nZGJhcmNoKTsKKyAgaWYgKFB5VHlwZV9SZWFkeSAoJnNuaWZmZXJf aW5mb19vYmplY3RfdHlwZSkgPCAwKQorICAgIHJldHVybiAtMTsKKyAgcmMg PSBnZGJfcHltb2R1bGVfYWRkb2JqZWN0IChnZGJfbW9kdWxlLCAiU25pZmZl ckluZm8iLAorICAgICAgKFB5T2JqZWN0ICopICZzbmlmZmVyX2luZm9fb2Jq ZWN0X3R5cGUpOworICBpZiAocmMpCisgICAgcmV0dXJuIHJjOworCisgIHVu d2luZF9pbmZvX29iamVjdF90eXBlLnRwX25ldyA9IFB5VHlwZV9HZW5lcmlj TmV3OworICBpZiAoUHlUeXBlX1JlYWR5ICgmdW53aW5kX2luZm9fb2JqZWN0 X3R5cGUpIDwgMCkKKyAgICByZXR1cm4gLTE7CisgIHJldHVybiBnZGJfcHlt b2R1bGVfYWRkb2JqZWN0IChnZGJfbW9kdWxlLCAiVW53aW5kSW5mbyIsCisg ICAgICAoUHlPYmplY3QgKikgJnVud2luZF9pbmZvX29iamVjdF90eXBlKTsK K30KKworc3RhdGljIFB5TWV0aG9kRGVmIHNuaWZmZXJfaW5mb19vYmplY3Rf bWV0aG9kc1tdID0KK3sKKyAgeyAicmVhZF9yZWdpc3RlciIsIHNuaWZmZXJf aW5mb3B5X3JlYWRfcmVnaXN0ZXIsIE1FVEhfVkFSQVJHUywKKyAgICAicmVh ZF9yZWdpc3RlciAoUkVHTlVNKSAtPiBnZGIuVmFsdWVcblwKK1JldHVybiB0 aGUgdmFsdWUgb2YgdGhlIFJFR05VTSBpbiB0aGUgZnJhbWUuIiB9LAorICB7 TlVMTH0gIC8qIFNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlUeXBlT2Jq ZWN0IHNuaWZmZXJfaW5mb19vYmplY3RfdHlwZSA9Cit7CisgIFB5VmFyT2Jq ZWN0X0hFQURfSU5JVCAoTlVMTCwgMCkKKyAgImdkYi5TbmlmZmVySW5mbyIs ICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgIHNpemVvZiAoc25pZmZl cl9pbmZvX29iamVjdCksICAgLyogdHBfYmFzaWNzaXplICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFs bG9jICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfcHJpbnQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9nZXRhdHRyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNf c2VxdWVuY2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0cF9hc19tYXBwaW5nICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdHBfaGFzaCAgKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgIHNuaWZmZXJfaW5m b3B5X3N0ciwgICAgICAgICAgICAgLyogdHBfc3RyICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRy byAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X2FzX2J1ZmZlciAqLworICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAg ICAgIC8qIHRwX2ZsYWdzICovCisgICJHREIgc25pZmZlckluZm8gb2JqZWN0 IiwgICAgICAgLyogdHBfZG9jICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vh a2xpc3RvZmZzZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9pdGVyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgc25pZmZlcl9pbmZvX29i amVjdF9tZXRob2RzLCAgICAvKiB0cF9tZXRob2RzICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jh c2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9kaWN0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfZGVzY3JfZ2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAq LworfTsKKworCitzdGF0aWMgUHlNZXRob2REZWYgdW53aW5kX2luZm9fb2Jq ZWN0X21ldGhvZHNbXSA9Cit7CisgIHsgImZyYW1lX2lkX2J1aWxkIiwgdW53 aW5kX2luZm9weV9mcmFtZV9pZF9idWlsZCwgTUVUSF9WQVJBUkdTLAorICAg ICJmcmFtZV9pZF9idWlsZCAoU1AsIFBDKSAtPiBOb25lXG4iCisgICAgIkJ1 aWxkIGZyYW1lIElEIGZyb20gZ2l2ZW4gU1AgYW5kIFBDLiIgfSwKKyAgeyAi ZnJhbWVfaWRfYnVpbGRfc3BlY2lhbCIsIHVud2luZF9pbmZvcHlfZnJhbWVf aWRfYnVpbGRfc3BlY2lhbCwKKyAgICBNRVRIX1ZBUkFSR1MsCisgICAgImZy YW1lX2lkX2J1aWxkX3NwZWNpYWwgKFNQLCBQQywgU1BFQ0lBTCkgLT4gTm9u ZVxuIgorICAgICJCdWlsZCBmcmFtZSBJRCBmcm9tIGdpdmVuIFNQLCBQQyBh bmQgU1BFQ0lBTC4iIH0sCisgIHsgImZyYW1lX2lkX2J1aWxkX3dpbGQiLCB1 bndpbmRfaW5mb3B5X2ZyYW1lX2lkX2J1aWxkX3dpbGQsIE1FVEhfVkFSQVJH UywKKyAgICAiZnJhbWVfaWRfYnVpbGRfd2lsZCAoU1ApIC0+IE5vbmVcbkJ1 aWxkIGZyYW1lIElEIGZyb20gZ2l2ZW4gU1AuIiB9LAorICB7IE5VTEwgfSAg LyogU2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgdW53 aW5kX2luZm9fb2JqZWN0X3R5cGUgPQoreworICBQeVZhck9iamVjdF9IRUFE X0lOSVQgKE5VTEwsIDApCisgICJnZGIuVW53aW5kSW5mbyIsICAgICAgICAg ICAgICAgLyogdHBfbmFtZSAqLworICBzaXplb2YgKHVud2luZF9pbmZvX29i amVjdCksICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgIHVud2lu ZF9pbmZvcHlfZGVhbGxvYywgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50 ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf Z2V0YXR0ciAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX3NldGF0dHIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9jb21wYXJlICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNl ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf YXNfbWFwcGluZyAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX2hhc2ggICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfY2FsbCAqLworICB1bndpbmRfaW5mb3B5X3N0ciwg ICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZm ZXIgKi8KKyAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNF VFlQRSwgIC8qIHRwX2ZsYWdzICovCisgICJHREIgVW53aW5kSW5mbyBvYmpl Y3QiLCAgICAgICAgLyogdHBfZG9jICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJl ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBf d2Vha2xpc3RvZmZzZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9pdGVyICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgdW53aW5kX2luZm9f b2JqZWN0X21ldGhvZHMsICAgICAvKiB0cF9tZXRob2RzICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNl dCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X2Jhc2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9kaWN0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfZGVzY3JfZ2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICB1 bndpbmRfaW5mb3B5X2luaXQsICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8K KyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxv YyAqLworfTsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLWludGVy bmFsLmggYi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCmluZGV4IGE3 N2Y1YTYuLjM0MTc5ZGUgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9u LWludGVybmFsLmgKKysrIGIvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwu aApAQCAtMzkwLDEyICszOTAsMTQgQEAgUHlPYmplY3QgKnBzcGFjZV90b19w c3BhY2Vfb2JqZWN0IChzdHJ1Y3QgcHJvZ3JhbV9zcGFjZSAqKQogICAgIENQ WUNIRUNLRVJfUkVUVVJOU19CT1JST1dFRF9SRUY7CiBQeU9iamVjdCAqcHNw eV9nZXRfcHJpbnRlcnMgKFB5T2JqZWN0ICosIHZvaWQgKik7CiBQeU9iamVj dCAqcHNweV9nZXRfZnJhbWVfZmlsdGVycyAoUHlPYmplY3QgKiwgdm9pZCAq KTsKK1B5T2JqZWN0ICpwc3B5X2dldF9mcmFtZV9zbmlmZmVycyAoUHlPYmpl Y3QgKiwgdm9pZCAqKTsKIFB5T2JqZWN0ICpwc3B5X2dldF94bWV0aG9kcyAo UHlPYmplY3QgKiwgdm9pZCAqKTsKIAogUHlPYmplY3QgKm9iamZpbGVfdG9f b2JqZmlsZV9vYmplY3QgKHN0cnVjdCBvYmpmaWxlICopCiAgICAgQ1BZQ0hF Q0tFUl9SRVRVUk5TX0JPUlJPV0VEX1JFRjsKIFB5T2JqZWN0ICpvYmpmcHlf Z2V0X3ByaW50ZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwogUHlPYmplY3Qg Km9iamZweV9nZXRfZnJhbWVfZmlsdGVycyAoUHlPYmplY3QgKiwgdm9pZCAq KTsKK1B5T2JqZWN0ICpvYmpmcHlfZ2V0X2ZyYW1lX3NuaWZmZXJzIChQeU9i amVjdCAqLCB2b2lkICopOwogUHlPYmplY3QgKm9iamZweV9nZXRfeG1ldGhv ZHMgKFB5T2JqZWN0ICosIHZvaWQgKik7CiBQeU9iamVjdCAqZ2RicHlfbG9v a3VwX29iamZpbGUgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywg UHlPYmplY3QgKmt3KTsKIApAQCAtNDkwLDYgKzQ5Miw4IEBAIGludCBnZGJw eV9pbml0aWFsaXplX2FyY2ggKHZvaWQpCiAgIENQWUNIRUNLRVJfTkVHQVRJ VkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOwogaW50IGdkYnB5X2luaXRpYWxp emVfeG1ldGhvZHMgKHZvaWQpCiAgIENQWUNIRUNLRVJfTkVHQVRJVkVfUkVT VUxUX1NFVFNfRVhDRVBUSU9OOworaW50IGdkYnB5X2luaXRpYWxpemVfdW53 aW5kICh2b2lkKQorICBDUFlDSEVDS0VSX05FR0FUSVZFX1JFU1VMVF9TRVRT X0VYQ0VQVElPTjsKIAogc3RydWN0IGNsZWFudXAgKm1ha2VfY2xlYW51cF9w eV9kZWNyZWYgKFB5T2JqZWN0ICpweSk7CiBzdHJ1Y3QgY2xlYW51cCAqbWFr ZV9jbGVhbnVwX3B5X3hkZWNyZWYgKFB5T2JqZWN0ICpweSk7CmRpZmYgLS1n aXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5jIGIvZ2RiL3B5dGhvbi9weXRob24u YwppbmRleCAzNDRkOGQyLi4zZTA3OWI1IDEwMDY0NAotLS0gYS9nZGIvcHl0 aG9uL3B5dGhvbi5jCisrKyBiL2dkYi9weXRob24vcHl0aG9uLmMKQEAgLTE3 OTAsNyArMTc5MCw4IEBAIG1lc3NhZ2UgPT0gYW4gZXJyb3IgbWVzc2FnZSB3 aXRob3V0IGEgc3RhY2sgd2lsbCBiZSBwcmludGVkLiIpLAogICAgICAgfHwg Z2RicHlfaW5pdGlhbGl6ZV9uZXdfb2JqZmlsZV9ldmVudCAoKSAgPCAwCiAg ICAgICB8fCBnZGJweV9pbml0aWFsaXplX2NsZWFyX29iamZpbGVzX2V2ZW50 ICgpICA8IDAKICAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfYXJjaCAoKSA8 IDAKLSAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfeG1ldGhvZHMgKCkgPCAw KQorICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV94bWV0aG9kcyAoKSA8IDAK KyAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfdW53aW5kICgpIDwgMCkKICAg ICBnb3RvIGZhaWw7CiAKICAgZ2RicHlfdG9fc3RyaW5nX2NzdCA9IFB5U3Ry aW5nX0Zyb21TdHJpbmcgKCJ0b19zdHJpbmciKTsKZGlmZiAtLWdpdCBhL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQuYyBiL2dk Yi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzFkOTM1Ci0tLSAv ZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVu d2luZC1tYWludC5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qIFRoaXMgdGVzdGNh c2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAgIENv cHlyaWdodCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCitpbnQKK21haW4gKHZv aWQpCit7CisgIGludCBpID0gMDsKKworICByZXR1cm4gaTsgLyogbmV4dC1s aW5lICovCit9CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktdW53aW5kLW1haW50LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS11bndpbmQtbWFpbnQuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmExMGUxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLW1haW50LmV4cApA QCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwor IyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0 IHRlc3RzIFB5dGhvbi1iYXNlZAorIyB1bndpbmRpbmcgQ0xJLgorCitsb2Fk X2xpYiBnZGItcHl0aG9uLmV4cAorCitzdGFuZGFyZF90ZXN0ZmlsZQorCitp ZiB7W3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHt0ZXN0ZmlsZX0uZXhwICR7dGVz dGZpbGV9ICR7c3JjZmlsZX1dIH0geworICAgIHJldHVybiAtMQorfQorCisj IFNraXAgYWxsIHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVu YWJsZWQuCitpZiB7IFtza2lwX3B5dGhvbl90ZXN0c10gfSB7IGNvbnRpbnVl IH0KKworc2V0IHB5ZmlsZSBbZ2RiX3JlbW90ZV9kb3dubG9hZCBob3N0ICR7 c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHldCisKK2lmICFbcnVu dG9fbWFpbiBdIHRoZW4geworICAgIGZhaWwgIkNhbid0IHJ1biB0byBtYWlu IgorICAgIHJldHVybiAtMQorfQorCitnZGJfdGVzdCAic291cmNlICR7cHlm aWxlfSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQiICJpbXBvcnQgcHl0aG9u IHNjcmlwdHMiCisKK2dkYl90ZXN0X3NlcXVlbmNlICJpbmZvIHNuaWZmZXIi ICJTaG93IGFsbCBzbmlmZmVycyIgeworICAgICJnbG9iYWwgc25pZmZlcnM6 IgorICAgICIgIGdsb2JhbF9zbmlmZmVyIgorICAgICJwcm9nc3BhY2UuKnNu aWZmZXJzOiIKKyAgICAicHlfdW53aW5kX21haW50X3BzX3NuaWZmZXIiCit9 CisKK2dkYl9icmVha3BvaW50ICR7c3JjZmlsZX06W2dkYl9nZXRfbGluZV9u dW1iZXIgIm5leHQtbGluZSJdCisKK2dkYl90ZXN0X3NlcXVlbmNlICJjb250 aW51ZSIgIlNuaWZmZXJzIGNhbGxlZCIgeworICAgICJweV91bndpbmRfbWFp bnRfcHNfc25pZmZlciBjYWxsZWQiCisgICAgImdsb2JhbF9zbmlmZmVyIGNh bGxlZCIKK30KKworZ2RiX3Rlc3QgImRpc2FibGUgc25pZmZlciBnbG9iYWwg LioiICIxIHNuaWZmZXIgZGlzYWJsZWQiICJTbmlmZmVyIGRpc2FibGVkIgor CitnZGJfdGVzdF9zZXF1ZW5jZSAiaW5mbyBzbmlmZmVyIiAiU2hvdyB3aXRo IGdsb2JhbCBzbmlmZmVyIGRpc2FibGVkIiB7CisgICAgImdsb2JhbCBzbmlm ZmVyczoiCisgICAgIiAgZ2xvYmFsX3NuaWZmZXJcXFtkaXNhYmxlZFxcXSIK KyAgICAicHJvZ3NwYWNlLipzbmlmZmVyczoiCisgICAgIiAgcHlfdW53aW5k X21haW50X3BzX3NuaWZmZXIiCit9CisKK2dkYl90ZXN0X3NlcXVlbmNlICJ3 aGVyZSIgIkdsb2JhbCBzbmlmZmVyIGRpc2FibGVkIiB7CisgICAgInB5X3Vu d2luZF9tYWludF9wc19zbmlmZmVyIGNhbGxlZFxyXG4jMCAgbWFpbiIKK30K ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndp bmQtbWFpbnQucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53 aW5kLW1haW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjc0YjcwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRl L2dkYi5weXRob24vcHktdW53aW5kLW1haW50LnB5CkBAIC0wLDAgKzEsNTkg QEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisj IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVzdHMgcHl0aG9u IHNuaWZmZXJzLgorCitpbXBvcnQgcmUKK2ltcG9ydCBnZGIudHlwZXMKK2Zy b20gZ2RiLnNuaWZmZXIgaW1wb3J0IFNuaWZmZXIsIHJlZ2lzdGVyX3NuaWZm ZXIKKworY2xhc3MgVGVzdEdsb2JhbFNuaWZmZXIoU25pZmZlcik6CisgICAg ZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0R2xvYmFs U25pZmZlciwgc2VsZikuX19pbml0X18oImdsb2JhbF9zbmlmZmVyIikKKwor ICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzbmlmZmVyX2luZm8pOgorICAgICAg ICBwcmludCAiJXMgY2FsbGVkIiAlIHNlbGYubmFtZQorICAgICAgICByZXR1 cm4gTm9uZQorCitjbGFzcyBUZXN0UHJvZ3NwYWNlU25pZmZlcihTbmlmZmVy KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHN1 cGVyKFRlc3RQcm9nc3BhY2VTbmlmZmVyLCBzZWxmKS5fX2luaXRfXygiJXNf cHNfc25pZmZlciIgJSBuYW1lKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYs IHNuaWZmZXJfaW5mbyk6CisgICAgICAgIHByaW50ICIlcyBjYWxsZWQiICUg c2VsZi5uYW1lCisgICAgICAgIHJldHVybiBOb25lCisKK2NsYXNzIFRlc3RP YmpmaWxlU25pZmZlcihTbmlmZmVyKToKKyAgICBkZWYgX19pbml0X18oc2Vs ZiwgbmFtZSk6CisgICAgICAgIHN1cGVyKFRlc3RPYmpmaWxlU25pZmZlciwg c2VsZikuX19pbml0X18oIiVzX29ial9zbmlmZmVyIiAlIG5hbWUpCisKKyAg ICBkZWYgX19jYWxsX18oc2VsZiwgc25pZmZlcl9pbmZvKToKKyAgICAgICAg cHJpbnQgIiVzIGNhbGxlZCIgJSBzZWxmLm5hbWUKKyAgICAgICAgcmV0dXJu IE5vbmUKKworCisKK2dkYi5zbmlmZmVyLnJlZ2lzdGVyX3NuaWZmZXIoZ2Ri LCBUZXN0R2xvYmFsU25pZmZlcigpKQorc2F3X3J1bnRpbWVfZXJyb3IgPSBG YWxzZQordHJ5OgorICAgIGdkYi5zbmlmZmVyLnJlZ2lzdGVyX3NuaWZmZXIo Z2RiLCBUZXN0R2xvYmFsU25pZmZlcigpLCByZXBsYWNlPUZhbHNlKQorZXhj ZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICBzYXdfcnVudGltZV9lcnJvciA9IFRy dWUKK2lmIG5vdCBzYXdfcnVudGltZV9lcnJvcjoKKyAgICByYWlzZSBSdW50 aW1lRXJyb3IoIk1pc3NpbmcgcnVudGltZSBlcnJvciBmcm9tIHJlZ2lzdGVy X3NuaWZmZXIuIikKK2dkYi5zbmlmZmVyLnJlZ2lzdGVyX3NuaWZmZXIoZ2Ri LCBUZXN0R2xvYmFsU25pZmZlcigpLCByZXBsYWNlPVRydWUpCitnZGIuc25p ZmZlci5yZWdpc3Rlcl9zbmlmZmVyKGdkYi5jdXJyZW50X3Byb2dzcGFjZSgp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdFByb2dzcGFj ZVNuaWZmZXIoInB5X3Vud2luZF9tYWludCIpKQorcHJpbnQgIlB5dGhvbiBz Y3JpcHQgaW1wb3J0ZWQiCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dk Yi5weXRob24vcHktdW53aW5kLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktdW53aW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uY2Y0MWQ3OAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS11bndpbmQuYwpAQCAtMCwwICsxLDgxIEBACisv KiBUaGlzIHRlc3QgcHJvZ3JhbSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBk ZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKKy8qIFRoaXMgaXMgdGhlIHRlc3QgcHJvZ3JhbSBsb2FkZWQgaW50byBH REIgYnkgdGhlIHB5LXVud2luZCB0ZXN0LiAgKi8KKworI2luY2x1ZGUgPHN0 ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli Lmg+CisKK3N0YXRpYyB2b2lkICoKK3N3YXBfdmFsdWUgKHZvaWQgKipsb2Nh dGlvbiwgdm9pZCAqbmV3X3ZhbHVlKQoreworICB2b2lkICpvbGRfdmFsdWUg PSAqbG9jYXRpb247CisgICpsb2NhdGlvbiA9IG5ld192YWx1ZTsKKyAgcmV0 dXJuIG9sZF92YWx1ZTsKK30KKworc3RhdGljIHZvaWQKK2JhZF9sYXlvdXQo dm9pZCAqKnZhcmlhYmxlX3B0ciwgdm9pZCAqZnApCit7CisgIGZwcmludGYg KHN0ZGVyciwgIkZpcnN0IHZhcmlhYmxlIHNob3VsZCBiZSBhbGxvY2F0ZWQg b25lIHdvcmQgYmVsb3cgIgorICAgICAgICAgICAidGhlIGZyYW1lLiAgR290 IHZhcmlhYmxlJ3MgYWRkcmVzcyAlcCwgZnJhbWUgYXQgJXAgaW5zdGVhZC5c biIsCisgICAgICAgICAgIHZhcmlhYmxlX3B0ciwgZnApOworICBhYm9ydCgp OworfQorCisjZGVmaW5lIE1ZX0ZSQU1FIChfX2J1aWx0aW5fZnJhbWVfYWRk cmVzcyAoMCkpCisKK3N0YXRpYyB2b2lkCitjb3JydXB0X2ZyYW1lX2lubmVy ICh2b2lkKQoreworICAvKiBTYXZlIG91dGVyIGZyYW1lIGFkZHJlc3MsIHRo ZW4gY29ycnVwdCB0aGUgdW53aW5kIGNoYWluIGJ5CisgICAgIHNldHRpbmcg dGhlIG91dGVyIGZyYW1lIGFkZHJlc3MgaW4gaXQgdG8gc2VsZi4gIFRoaXMg aXMKKyAgICAgQUJJLXNwZWNpZmljOiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUg ZnJhbWUgY29udGFpbnMgcHJldmlvdXMgZnJhbWUKKyAgICAgYWRkcmVzcyBp biBhbWQ2NC4gICovCisgIHZvaWQgKnByZXZpb3VzX2ZwID0gc3dhcF92YWx1 ZSAoKHZvaWQgKiopIE1ZX0ZSQU1FLCBNWV9GUkFNRSk7CisKKyAgLyogVmVy aWZ5IHRoZSBjb21waWxlciBhbGxvY2F0ZXMgdGhlIGZpcnN0IGxvY2FsIHZh cmlhYmxlIG9uZSB3b3JkCisgICAgIGJlbG93IGZyYW1lLiAgVGhpcyBpcyB3 aGVyZSB0aGUgdGVzdCB1bndpbmRlciBleHBlY3RzIHRvIGZpbmQgdGhlCisg ICAgIGNvcnJlY3Qgb3V0ZXIgZnJhbWUgYWRkcmVzcy4gICovCisgIGlmICgm cHJldmlvdXNfZnAgKyAxICE9ICh2b2lkICoqKSBNWV9GUkFNRSkKKyAgICBi YWRfbGF5b3V0ICgmcHJldmlvdXNfZnAgKyAxLCBNWV9GUkFNRSk7CisKKyAg LyogTm93IHJlc3RvcmUgaXQgc28gdGhhdCB3ZSBjYW4gcmV0dXJuLiAgVGhl IHRlc3Qgc2V0cyB0aGUKKyAgICAgYnJlYWtwb2ludCBqdXN0IGJlZm9yZSB0 aGlzIGhhcHBlbnMsIGFuZCBHREIgd2lsbCBub3QgYmUgYWJsZSB0bworICAg ICBzaG93IHRoZSBiYWNrdHJhY2Ugd2l0aG91dCBKSVQgcmVhZGVyLiAgKi8K KyAgc3dhcF92YWx1ZSAoKHZvaWQgKiopIE1ZX0ZSQU1FLCBwcmV2aW91c19m cCk7IC8qIGJyZWFrIGJhY2t0cmFjZS1icm9rZW4gKi8KK30KKworc3RhdGlj IHZvaWQKK2NvcnJ1cHRfZnJhbWVfb3V0ZXIgKHZvaWQpCit7CisgIC8qIFNl ZSBhYm92ZSBmb3IgdGhlIGV4cGxhbmF0aW9uIG9mIHRoZSBjb2RlIGhlcmUu ICBUaGlzIGZ1bmN0aW9uCisgICAgIGNvcnJ1cHRzIGl0cyBmcmFtZSwgdG9v LCBhbmQgdGhlbiBjYWxscyB0aGUgaW5uZXIgb25lLiAgKi8KKyAgdm9pZCAq cHJldmlvdXNfZnAgPSBzd2FwX3ZhbHVlICgodm9pZCAqKikgTVlfRlJBTUUs IE1ZX0ZSQU1FKTsKKyAgaWYgKCZwcmV2aW91c19mcCArIDEgIT0gKHZvaWQg KiopIE1ZX0ZSQU1FKQorICAgIGJhZF9sYXlvdXQgKCZwcmV2aW91c19mcCwg TVlfRlJBTUUpOworICBjb3JydXB0X2ZyYW1lX2lubmVyICgpOworICBzd2Fw X3ZhbHVlICgodm9pZCAqKikgTVlfRlJBTUUsIHByZXZpb3VzX2ZwKTsKK30K KworaW50CittYWluICgpCit7CisgIGNvcnJ1cHRfZnJhbWVfb3V0ZXIgKCk7 CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LXVud2luZC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktdW53aW5kLmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi40YmYwOWIzCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rl c3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC5leHAKQEAgLTAsMCArMSw1 NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMK KyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisj IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxl IGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB2ZXJpZmllcyB0 aGF0IGZyYW1lCisjIHNuaWZmZXJzIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiBQ eXRob24uCisKK2xvYWRfbGliIGdkYi1weXRob24uZXhwCisKK3N0YW5kYXJk X3Rlc3RmaWxlCisKK2lmIHsgW3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHt0ZXN0 ZmlsZX0uZXhwICR7dGVzdGZpbGV9ICR7c3JjZmlsZX1dIH0geworICAgIHJl dHVybiAtMQorfQorCisjIFNraXAgYWxsIHRlc3RzIGlmIFB5dGhvbiBzY3Jp cHRpbmcgaXMgbm90IGVuYWJsZWQuCitpZiB7IFtza2lwX3B5dGhvbl90ZXN0 c10gfSB7IGNvbnRpbnVlIH0KKworIyBUaGlzIHRlc3QgcnVucyBvbiBhIHNw ZWNpZmljIHBsYXRmb3JtLgoraWYgeyAhIFtpc3RhcmdldCB4ODZfNjQtKl19 IHsgY29udGludWUgfQorCisjIFRoZSBmb2xsb3dpbmcgdGVzdHMgcmVxdWly ZSBleGVjdXRpb24uCisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAg ZmFpbCAiQ2FuJ3QgcnVuIHRvIG1haW4iCisgICAgcmV0dXJuIDAKK30KKwor c2V0IHB5ZmlsZSBbZ2RiX3JlbW90ZV9kb3dubG9hZCBob3N0ICR7c3JjZGly fS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHldCisKK2dkYl9icmVha3BvaW50 IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJicmVhayBiYWNrdHJhY2UtYnJva2Vu Il0KKworZ2RiX3Rlc3QgInNvdXJjZSAke3B5ZmlsZX0iICJQeXRob24gc2Ny aXB0IGltcG9ydGVkIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3Jp cHRzIgorCitnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAiYnJlYWsgYmFj a3RyYWNlLWJyb2tlbiIKK2dkYl90ZXN0X3NlcXVlbmNlICJ3aGVyZSIgICJC YWNrdHJhY2UgcmVzdG9yZWQgYnkgc25pZmZlciIgeworICAgICJcXHJcXG4j MCAuKiBjb3JydXB0X2ZyYW1lX2lubmVyIFxcKFxcKSBhdCAiCisgICAgIlxc clxcbiMxIC4qIGNvcnJ1cHRfZnJhbWVfb3V0ZXIgXFwoXFwpIGF0ICIKKyAg ICAiXFxyXFxuIzIgLiogbWFpbiBcXCguKlxcKSBhdCIKK30KKworCmRpZmYg LS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLnB5 IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC5weQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGQ1OTFmCi0tLSAv ZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVu d2luZC5weQpAQCAtMCwwICsxLDgxIEBACisjIENvcHlyaWdodCAoQykgMjAx NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor IyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIwor IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKworaW1wb3J0IGdkYgorZnJvbSBnZGIuc25pZmZlciBpbXBvcnQg U25pZmZlcgorCitjbGFzcyBUZXN0U25pZmZlcihTbmlmZmVyKToKKyAgICBB TUQ2NF9SQlAgPSA2CisgICAgQU1ENjRfUlNQID0gNworICAgIEFNRDY0X1JJ UCA9IDE2CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIFNu aWZmZXIuX19pbml0X18oc2VsZiwgInRlc3Qgc25pZmZlciIpCisgICAgICAg IHNlbGYuY2hhcl9wdHJfdCA9IGdkYi5sb29rdXBfdHlwZSgidW5zaWduZWQg Y2hhciIpLnBvaW50ZXIoKQorICAgICAgICBzZWxmLmNoYXJfcHRyX3B0cl90 ID0gc2VsZi5jaGFyX3B0cl90LnBvaW50ZXIoKQorCisgICAgZGVmIF9yZWFk X3dvcmQoc2VsZiwgYWRkcmVzcyk6CisgICAgICAgIHJldHVybiBhZGRyZXNz LmNhc3Qoc2VsZi5jaGFyX3B0cl9wdHJfdCkuZGVyZWZlcmVuY2UoKQorCisg ICAgZGVmIF9fY2FsbF9fKHNlbGYsIHNuaWZmZXJfaW5mbyk6CisgICAgICAg ICIiIlRlc3Qgc25pZmZlciB3cml0dGVuIGluIFB5dGhvbi4KKworICAgICAg ICBUaGlzIHNuaWZmZXIgY2FuIHVud2luZCB0aGUgZnJhbWVzIHRoYXQgaGF2 ZSBiZWVuIGRlbGliZXJhdGVseQorICAgICAgICBjb3JydXB0ZWQgaW4gYSBz cGVjaWZpYyB3YXkgKGZ1bmN0aW9ucyBpbiB0aGUgYWNjb21wYW55aW5nCisg ICAgICAgIHB5LXVud2luZC5jIGZpbGUgZG8gdGhhdC4pCisgICAgICAgIFRo aXMgY29kZSBpcyBvbmx5IG9uIEFNRDY0LgorICAgICAgICBPbiBBTUQ2NCAk UkJQIHBvaW50cyB0byB0aGUgaW5uZXJtb3N0IGZyYW1lICh1bmxlc3MgdGhl IGNvZGUKKyAgICAgICAgd2FzIGNvbXBpbGVkIHdpdGggLWZvbWl0LWZyYW1l LXBvaW50ZXIpLCB3aGljaCBjb250YWlucyB0aGUKKyAgICAgICAgYWRkcmVz cyBvZiB0aGUgcHJldmlvdXMgZnJhbWUgYXQgb2Zmc2V0IDAuIFRoZSBmdW5j dGlvbnMKKyAgICAgICAgZGVsaWJlcmF0ZWx5IGNvcnJ1cHQgdGhlaXIgZnJh bWVzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICBCZWZvcmUg ICAgICAgICAgICAgICAgIEFmdGVyCisgICAgICAgICAgICAgICAgICAgQ29y cnVwdGlvbjogICAgICAgICAgIENvcnJ1cHRpb246CisgICAgICAgICAgICAg ICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICArLS0tLS0tLS0tLS0tLS0rCisg ICAgICAgIFJCUC04ICAgfCAgICAgICAgICAgICAgfCAgICAgICB8IFByZXZp b3VzIFJCUCB8CisgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAg ICAgICArLS0tLS0tLS0tLS0tLS0rCisgICAgICAgIFJCUCAgICAgKyBQcmV2 aW91cyBSQlAgfCAgICAgICB8ICAgIFJCUCAgICAgICB8CisgICAgICAgICAg ICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICArLS0tLS0tLS0tLS0tLS0r CisgICAgICAgIFJCUCs4ICAgfCBSZXR1cm4gUklQICAgfCAgICAgICB8IFJl dHVybiAgUklQICB8CisgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0t KyAgICAgICArLS0tLS0tLS0tLS0tLS0rCisgICAgICAgIE9sZCBTUCAgfCAg ICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICB8CisKKyAgICAg ICAgVGhpcyBzbmlmZmVyIHJlY29nbml6ZXMgdGhlIGNvcnJ1cHQgZnJhbWVz IGJ5IGNoZWNraW5nIHRoYXQKKyAgICAgICAgKlJCUCA9PSBSQlAsIGFuZCBy ZXN0b3JlcyBwcmV2aW91cyBSQlAgZnJvbSB0aGUgd29yZCBhYm92ZSBpdC4K KyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJwID0g c25pZmZlcl9pbmZvLnJlYWRfcmVnaXN0ZXIoCisgICAgICAgICAgICAgICAg VGVzdFNuaWZmZXIuQU1ENjRfUkJQKS5jYXN0KHNlbGYuY2hhcl9wdHJfdCkK KyAgICAgICAgICAgIGlmIHNlbGYuX3JlYWRfd29yZChicCkgIT0gYnA6Cisg ICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICMgRm91 bmQgdGhlIGZyYW1lIHRoYXQgdGhlIHRlc3QgcHJvZ3JhbSBoYXMgY29ycnVw dGVkIGZvciB1cy4KKyAgICAgICAgICAgICMgVGhlIGNvcnJlY3QgQlAgZm9y IHRoZSBvdXRlciBmcmFtZSBoYXMgYmVlbiBzYXZlZCBvbmUgd29yZAorICAg ICAgICAgICAgIyBhYm92ZSwgcHJldmlvdXMgSVAgYW5kIFNQIGFyZSBhdCB0 aGUgZXhwZWN0ZWQgcGxhY2VzLgorICAgICAgICAgICAgcHJldmlvdXNfYnAg PSBzZWxmLl9yZWFkX3dvcmQoYnAgLSA4KQorICAgICAgICAgICAgcHJldmlv dXNfaXAgPSBzZWxmLl9yZWFkX3dvcmQoYnAgKyA4KQorICAgICAgICAgICAg cHJldmlvdXNfc3AgPSBicCArIDE2CisgICAgICAgICAgICB1bndpbmRfaW5m byA9IGdkYi5VbndpbmRJbmZvKAorICAgICAgICAgICAgICAgIHNuaWZmZXJf aW5mbywKKyAgICAgICAgICAgICAgICAoKFRlc3RTbmlmZmVyLkFNRDY0X1JC UCwgcHJldmlvdXNfYnApLAorICAgICAgICAgICAgICAgICAoVGVzdFNuaWZm ZXIuQU1ENjRfUklQLCBwcmV2aW91c19pcCksCisgICAgICAgICAgICAgICAg IChUZXN0U25pZmZlci5BTUQ2NF9SU1AsIHByZXZpb3VzX3NwKSkpCisgICAg ICAgICAgICBzcCA9IHNuaWZmZXJfaW5mby5yZWFkX3JlZ2lzdGVyKFRlc3RT bmlmZmVyLkFNRDY0X1JTUCkKKyAgICAgICAgICAgIGlwID0gc25pZmZlcl9p bmZvLnJlYWRfcmVnaXN0ZXIoVGVzdFNuaWZmZXIuQU1ENjRfUklQKQorICAg ICAgICAgICAgdW53aW5kX2luZm8uZnJhbWVfaWRfYnVpbGQoc3AsIGlwKQor ICAgICAgICAgICAgcmV0dXJuIHVud2luZF9pbmZvCisgICAgICAgIGV4Y2Vw dCAoZ2RiLmVycm9yLCBSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgcmV0 dXJuIE5vbmUKKworZ2RiLnNuaWZmZXIucmVnaXN0ZXJfc25pZmZlcihOb25l LCBUZXN0U25pZmZlcigpLCBUcnVlKQorcHJpbnQoIlB5dGhvbiBzY3JpcHQg aW1wb3J0ZWQiKQo= --089e015383fca9b9710510f9ee3f--