From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21109 invoked by alias); 15 Dec 2014 18:14:07 -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 21089 invoked by uid 89); 15 Dec 2014 18:14:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail-ob0-f180.google.com Received: from mail-ob0-f180.google.com (HELO mail-ob0-f180.google.com) (209.85.214.180) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Mon, 15 Dec 2014 18:14:02 +0000 Received: by mail-ob0-f180.google.com with SMTP id wp4so18954331obc.11 for ; Mon, 15 Dec 2014 10:13:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=rAsQioHYwuPEGQBAo3+UDP5MbiMvTJSwDmVsMvE4EE4=; b=P7ezW5Wr1nZFpaV9sxsFITBnmDR8UKW05aPdQZ8jigBlcO242o2L/+sDQGsuSVmRDw uuVQXLYV3b+XNCSbeHvp+NK4jf1EAElrSRJBMryYdAh0NRZ5L1/0dpj03CL/sKDCMFJw GCdp7TnGM5x/y2TTPtJhc5XGV1T8wWI43u9DAujnOEpYo28iDSSzJET0z/Xk4KvL/sCA eEBAIm/Rk24zTGrr0uLoNYPTl+kE1ZOBiInLlFAwhd5RTlASC0hoSwO12LdaKoJdyLZr jQMj+uuuYY2GqvscoehPLRuydOX9S7HgSQOD2Fm8Z9zyiimyclEGEo808WdmRTWLq1pg A0gA== X-Gm-Message-State: ALoCoQmvb1auS6mAvopKrwhK9oqSZMfYLAoG8rv6EegiHOw9XEaD9prAnhhAxNwP9iFyjRH7Nfdz MIME-Version: 1.0 X-Received: by 10.202.46.196 with SMTP id u187mr18635821oiu.19.1418667239022; Mon, 15 Dec 2014 10:13:59 -0800 (PST) Received: by 10.182.142.70 with HTTP; Mon, 15 Dec 2014 10:13:58 -0800 (PST) Date: Mon, 15 Dec 2014 18:14:00 -0000 Message-ID: Subject: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python From: Alexander Smundak To: gdb-patches Content-Type: multipart/mixed; boundary=001a1138e43ad72650050a4534db X-SW-Source: 2014-12/txt/msg00408.txt.bz2 --001a1138e43ad72650050a4534db Content-Type: text/plain; charset=UTF-8 Content-length: 2368 Python frame filters provide the ability to display non-native frames in a mixed-language application (say, a backtrace of an application written in C and embedding Java Virtual Machine can be displayed as a mix of native frames and Java frames). However, GDB cannot always unwind non-native frames. The proposed patch adds the ability to write frame unwinders in Python. 2014-12-12 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/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. * python/lib/gdb/__init__.py (packages): add frame_sniffers. 2014-12-12 Sasha Smundak * gdb.python/py-unwind.c: Test program for the py-unwind test. * gdb.python/py-unwind.exp: Python frame sniffers test. * gdb.python/py-unwind.py: Frame sniffer in Python tested by py-unwind test. --001a1138e43ad72650050a4534db Content-Type: application/octet-stream; name=patch2 Content-Disposition: attachment; filename=patch2 Content-Transfer-Encoding: base64 X-Attachment-Id: f_i3man7220 Content-length: 52517 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCAyZjY5ZWIyLi5iYTM5NmVhIDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0zOTQsNiArMzk0 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktc3ltdGFiLm8gXAog CXB5LXRocmVhZGV2ZW50Lm8gXAogCXB5LXR5cGUubyBcCisJcHktdW53aW5k Lm8gXAogCXB5LXV0aWxzLm8gXAogCXB5LXZhbHVlLm8gXAogCXB5LXZhcm9i ai5vCkBAIC00MzMsNiArNDM0LDcgQEAgU1VCRElSX1BZVEhPTl9TUkNTID0g XAogCXB5dGhvbi9weS1zeW10YWIuYyBcCiAJcHl0aG9uL3B5LXRocmVhZGV2 ZW50LmMgXAogCXB5dGhvbi9weS10eXBlLmMgXAorCXB5dGhvbi9weS11bndp bmQuYyBcCiAJcHl0aG9uL3B5LXV0aWxzLmMgXAogCXB5dGhvbi9weS12YWx1 ZS5jIFwKIAlweXRob24vcHktdmFyb2JqLmMKQEAgLTI1OTMsNiArMjU5NSwx MCBAQCBweS10eXBlLm86ICQoc3JjZGlyKS9weXRob24vcHktdHlwZS5jCiAJ JChDT01QSUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24v cHktdHlwZS5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktdW53aW5kLm86ICQo c3JjZGlyKS9weXRob24vcHktdW53aW5kLmMKKwkkKENPTVBJTEUpICQoUFlU SE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS11bndpbmQuYworCSQo UE9TVENPTVBJTEUpCisKIHB5LXV0aWxzLm86ICQoc3JjZGlyKS9weXRob24v cHktdXRpbHMuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNy Y2RpcikvcHl0aG9uL3B5LXV0aWxzLmMKIAkkKFBPU1RDT01QSUxFKQpkaWZm IC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwppbmRleCBhNjc4OWJkLi5j ZmNlZDczIDEwMDY0NAotLS0gYS9nZGIvTkVXUworKysgYi9nZGIvTkVXUwpA QCAtMjksNiArMjksNyBAQAogICAgICBzZWxlY3RpbmcgYSBuZXcgZmlsZSB0 byBkZWJ1Zy4KICAgKiogWW91IGNhbiBub3cgYWRkIGF0dHJpYnV0ZXMgdG8g Z2RiLk9iamZpbGUgYW5kIGdkYi5Qcm9nc3BhY2Ugb2JqZWN0cy4KICAgKiog TmV3IGZ1bmN0aW9uIGdkYi5sb29rdXBfb2JqZmlsZS4KKyAgKiogWW91IGNh biBub3cgd3JpdGUgZnJhbWUgdW53aW5kZXJzIGluIFB5dGhvbi4KIAogKiBO ZXcgUHl0aG9uLWJhc2VkIGNvbnZlbmllbmNlIGZ1bmN0aW9uczoKIApkaWZm IC0tZ2l0IGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluIGIvZ2Ri L2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluCmluZGV4IDAwYzcwYmIuLmZm NmU4ZDIgMTAwNjQ0Ci0tLSBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmls ZS5pbgorKysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KQEAg LTYyLDYgKzYyLDcgQEAgUFlUSE9OX0ZJTEVfTElTVCA9IFwKIAlnZGIvRnJh bWVEZWNvcmF0b3IucHkgXAogCWdkYi90eXBlcy5weSBcCiAJZ2RiL3ByaW50 aW5nLnB5IFwKKwlnZGIvc25pZmZlcnMucHkgXAogCWdkYi9wcm9tcHQucHkg XAogCWdkYi94bWV0aG9kLnB5IFwKIAlnZGIvY29tbWFuZC9fX2luaXRfXy5w eSBcCmRpZmYgLS1naXQgYS9nZGIvZG9jL3B5dGhvbi50ZXhpIGIvZ2RiL2Rv Yy9weXRob24udGV4aQppbmRleCAyMzRjZTVjLi40NWIzOGQ5IDEwMDY0NAot LS0gYS9nZGIvZG9jL3B5dGhvbi50ZXhpCisrKyBiL2dkYi9kb2MvcHl0aG9u LnRleGkKQEAgLTE0NCw2ICsxNDQsNyBAQCBvcHRpb25hbCBhcmd1bWVudHMg d2hpbGUgc2tpcHBpbmcgb3RoZXJzLiAgRXhhbXBsZToKICogRnJhbWUgRmls dGVyIEFQSTo6ICAgICAgICAgICAgRmlsdGVyaW5nIEZyYW1lcy4KICogRnJh bWUgRGVjb3JhdG9yIEFQSTo6ICAgICAgICAgRGVjb3JhdGluZyBGcmFtZXMu CiAqIFdyaXRpbmcgYSBGcmFtZSBGaWx0ZXI6OiAgICAgIFdyaXRpbmcgYSBG cmFtZSBGaWx0ZXIuCisqIFdyaXRpbmcgYSBGcmFtZSBVbndpbmRlcjo6ICAg IFdyaXRpbmcgYSBmcmFtZSB1bndpbmRlciBpbiBQeXRob24uCiAqIFhtZXRo b2RzIEluIFB5dGhvbjo6ICAgICAgICAgIEFkZGluZyBhbmQgcmVwbGFjaW5n IG1ldGhvZHMgb2YgQysrIGNsYXNzZXMuCiAqIFhtZXRob2QgQVBJOjogICAg ICAgICAgICAgICAgIFhtZXRob2QgdHlwZXMuCiAqIFdyaXRpbmcgYW4gWG1l dGhvZDo6ICAgICAgICAgIFdyaXRpbmcgYW4geG1ldGhvZC4KQEAgLTIxNzgs NiArMjE3OSw1NyBAQCBwcmludGVkIGhpZXJhcmNoaWNhbGx5LiAgQW5vdGhl ciBhcHByb2FjaCB3b3VsZCBiZSB0byBjb21iaW5lIHRoZQogbWFya2VyIGlu IHRoZSBpbmxpbmVkIGZyYW1lLCBhbmQgYWxzbyBzaG93IHRoZSBoaWVyYXJj aGljYWwKIHJlbGF0aW9uc2hpcC4KIAorQG5vZGUgV3JpdGluZyBhIEZyYW1l IFVud2luZGVyCitAc3Vic3Vic2VjdGlvbiBXcml0aW5nIGEgRnJhbWUgVW53 aW5kZXIgaW4gUHl0aG9uCitAY2luZGV4IFdyaXRpbmcgYSBmcmFtZSB1bndp bmRlciBpbiBQeXRob24uCisKK1lvdSBjYW4gdGVsbCBHREIgaG93IHRvIHVu d2luZCBjZXJ0YWluIHR5cGVzIG9mIGZyYW1lcyBieSB3cml0aW5nIGEKK3Nu aWZmZXIgZnVuY3Rpb24gYW5kIGFkZGluZyBpdCB0byB0aGUgbGlzdCBvZiB0 aGUgc25pZmZlcnMuIAorCitAc3ViaGVhZGluZyBGcmFtZSBTbmlmZmVyIEFQ SQorCitBIHNuaWZmZXIgZnVuY3Rpb24gcmVjZWl2ZXMgYSBzaW5nbGUgYXJn dW1lbnQgZGVzY3JpYmluZyB0aGUgZnJhbWUgdG8KK2JlIGV4YW1pbmVkIChh IEBjb2Rle2dkYi5TbmlmZmVySW5mb30gb2JqZWN0KS4gSXQgcmV0dXJucyBm cmFtZSB1bndpbmQKK2luZm9ybWF0aW9uIGRlc2NyaWJlZCBiZWxvdyBpZiBp dCBrbm93cyBob3cgdG8gdW53aW5kIHRoZSBmcmFtZSwgb3IKK0Bjb2Rle05v bmV9IG90aGVyd2lzZS4KKworCitUaGUgQGNvZGV7Z2RiLlNuaWZmZXJJbmZv fSBjbGFzcyBoYXMgYSBzaW5nbGUgbWV0aG9kOgorCitAZGVmdW4gU25pZmZl ckluZm8ucmVhZF9yZWdpc3RlciAoc2VsZiwgcmVnbnVtKQorCitUaGlzIG1l dGhvZCByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIgQHZh cntyZWdudW19IGluIHRoZQorZnJhbWUgYXMgYSBAY29kZXtnZGIuVmFsdWV9 IG9iamVjdC4gQHZhcntyZWdudW19IHZhbHVlcyBhcmUKK3BsYXRmb3JtLXNw ZWNpZmljLgorQGVuZCBkZWZ1bgorCitUaGUgZnJhbWUgdW53aW5kIGluZm9y bWF0aW9uIHJldHVybmVkIGJ5IHlvdXIgc25pZmZlciBzaG91bGQgYmUgYSBw YWlyCisoQHZhcntyZWdpc3RlcnN9LCBAdmFye2lkX3JlZ2lzdGVyX251bWJl cnN9KSwgd2hlcmUKK0B2YXJ7cmVnaXN0ZXJzfSBkZXNjcmliZSB0aGUgcmVn aXN0ZXJzIHRoYXQgY2FuIGJlIHVud291bmQgKGkuZS4sCit0aGUgcmVnaXN0 ZXJzIGZyb20gdGhlIHByZXZpb3VzIGZyYW1lIHRoYXQgaGF2ZSBiZWVuIHNh dmVkIGluIHRoaXMKK2ZyYW1lKSwgYW5kIEB2YXJ7aWRfcmVnaXN0ZXJfbnVt YmVyc30gcHJvdmlkZXMgdGhlIGRhdGEgZm9yIHRoZQorY29uc3RydWN0aW9u IG9mIHRoZSBmcmFtZSBJRCBvZiB0aGUgcHJldmlvdXMgZnJhbWUuCisKK1Ro ZSBAdmFye3JlZ2lzdGVyc30gaXMgYSBsaXN0IG9mIChAdmFye3JlZ251bX0s IEB2YXJ7cmVnZGF0YX0pCitwYWlycywgd2hlcmUgQHZhcntyZWdudW19IGlz IGEgKHBsYXRmb3JtLXNwZWNpZmljKSByZWdpc3RlciBudW1iZXIsCithbmQg QHZhcntyZWdkYXRhfSBpcyByZWdpc3RlciBjb250ZW50cyAoYSBAY29kZXtn ZGIuVmFsdWV9IG9iamVjdCkuCisKK1RoZSBAdmFye2lkX3JlZ2lzdGVyX251 bWJlcnN9IGlzIGVpdGhlciAoQHZhcntzcH0pLCAoQHZhcntzcH0sIEB2YXJ7 cGN9KSwKK29yIChAdmFye3NwfSwgQHZhcntwY30sIEB2YXJ7c3BlY2lhbH0p IHR1cGxlLCB3aGVyZSBAdmFye3NwfSwKK0B2YXJ7cGN9LCBAdmFye3NwZWNp YWx9IGFyZSByZWdpc3RlciBudW1iZXJzLCBhbmQgdGhlIHJlZmVyZW5jZWQK K3JlZ2lzdGVycyBzaG91bGQgYmUgcHJlc2VudCBpbiBAdmFye3JlZ2lzdGVy c30uIFRoZSBmcmFtZSBJRCBpcworY29uc3RydWN0ZWQgYnkgY2FsbGluZwor QGNvZGV7bWFrZV9pZF9idWlsZF93aWxkfShAdmFye1ZhbHVlT2Z9KEB2YXJ7 c3B9KSwKK0Bjb2Rle21ha2VfaWRfYnVpbGR9KEB2YXJ7VmFsdWVPZn0oQHZh cntzcH0pLCBAdmFye1ZhbHVlT2Z9KEB2YXJ7cGN9KSwKK29yIEBjb2Rle21h a2VfaWRfYnVpbGR9KEB2YXJ7VmFsdWVPZn0oQHZhcntzcH0pLAorQHZhcntW YWx1ZU9mfShAdmFye3BjfSwgQHZhcntWYWx1ZU9mfShAdmFye3NwZWNpYWx9 KSByZXNwZWN0aXZlbHkuCisKK0BzdWJoZWFkaW5nIFJlZ2lzdGVyaW5nIGEg U25pZmZlcgorCitAY29kZXtnZGIuT2JqZmlsZX0sIEBjb2Rle2dkYi5Qcm9n c3BhY2V9LCBhbmQgQGNvZGV7Z2RifSBpdHNlbGYgaGF2ZQorQGNvZGV7ZnJh bWVfc25pZmZlcnN9IGF0dHJpYnV0ZSBjb250YWluaW5nIGEgbGlzdCBvZiB0 aGUKK3NuaWZmZXJzLiBSZWdpc3RlciB5b3VyIHNuaWZmZXIgYnkgYWRkaW5n IGl0IHRvIG9uZSBvZiB0aGVtLgorCiBAbm9kZSBYbWV0aG9kcyBJbiBQeXRo b24KIEBzdWJzdWJzZWN0aW9uIFhtZXRob2RzIEluIFB5dGhvbgogQGNpbmRl eCB4bWV0aG9kcyBpbiBQeXRob24KZGlmZiAtLWdpdCBhL2dkYi9weXRob24v bGliL2dkYi9fX2luaXRfXy5weSBiL2dkYi9weXRob24vbGliL2dkYi9fX2lu aXRfXy5weQppbmRleCA4YzZlZWUyLi5mZmMwZDFkIDEwMDY0NAotLS0gYS9n ZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKKysrIGIvZ2RiL3B5dGhv bi9saWIvZ2RiL19faW5pdF9fLnB5CkBAIC0yOCw3ICsyOCw3IEBAIGNsYXNz IF9HZGJGaWxlIChvYmplY3QpOgogICAgICMgVGhlc2UgdHdvIGFyZSBuZWVk ZWQgaW4gUHl0aG9uIDMKICAgICBlbmNvZGluZyA9ICJVVEYtOCIKICAgICBl cnJvcnMgPSAic3RyaWN0IgotICAgIAorCiAgICAgZGVmIGNsb3NlKHNlbGYp OgogICAgICAgICAjIERvIG5vdGhpbmcuCiAgICAgICAgIHJldHVybiBOb25l CkBAIC03MSw2ICs3MSw4IEBAIHR5cGVfcHJpbnRlcnMgPSBbXQogeG1ldGhv ZHMgPSBbXQogIyBJbml0aWFsIGZyYW1lIGZpbHRlcnMuCiBmcmFtZV9maWx0 ZXJzID0ge30KKyMgSW5pdGlhbCBmcmFtZSBzbmlmZmVycy4KK2ZyYW1lX3Nu aWZmZXJzID0gW10KIAogIyBDb252ZW5pZW5jZSB2YXJpYWJsZSB0byBHREIn cyBweXRob24gZGlyZWN0b3J5CiBQWVRIT05ESVIgPSBvcy5wYXRoLmRpcm5h bWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKZGlmZiAtLWdpdCBhL2dk Yi9weXRob24vbGliL2dkYi9zbmlmZmVycy5weSBiL2dkYi9weXRob24vbGli L2dkYi9zbmlmZmVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4wNTMzNjQyCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhv bi9saWIvZ2RiL3NuaWZmZXJzLnB5CkBAIC0wLDAgKzEsNjQgQEAKKyMgRnJh bWUgdW53aW5kaW5nIHN1cHBvcnQuCisjIENvcHlyaWdodCAoQykgMjAxMy0y MDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor IyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisj CisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorCisiIiJJbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHdvcmtpbmcg d2l0aCBmcmFtZSBzbmlmZmVycy4iIiIKKworaW1wb3J0IGdkYgoraW1wb3J0 IGNvbGxlY3Rpb25zCisKKworZGVmIGV4ZWN1dGVfc25pZmZlcnMoc25pZmZl cl9pbmZvKToKKyAgICAiIiJJbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQgZnJv bSBHREIgdGhhdCBleGVjdXRlcyBzbmlmZmVycworICAgIGltcGxlbWVudGVk IGluIFB5dGhvbi4gQSBzbmlmZmVyIGFibGUgdG8gdW53aW5kIHRoZSBmcmFt ZSByZXR1cm5zCisgICAgYSB0dXBsZSBjb250YWluaW5nIHVud2luZCBpbmZv cm1hdGlvbi4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgc25pZmZlcl9p bmZvOiBhbiBpbnN0YW5jZSBvZiBnZGIuU25pZmZlckluZm8uCisKKyAgICBS ZXR1cm5zOgorICAgICAgICB1bndpbmRfaW5mbzogYSBwYWlyIChSRUdfREFU QSwgRlJBTUVfSURfUkVHTlVNUykuIFJFR19EQVRBIGlzCisgICAgICAgIHR1 cGxlIG9mIChSRUdfTlVNLCBSRUdfVkFMVUUpIHBhaXJzLCB3aGVyZSBSRUdf TlVNIGlzCisgICAgICAgIChwbGF0Zm9ybS1zcGVjaWZpYykgcmVnaXN0ZXIg bnVtYmVyLCBhbmQgUkVHX1ZBTFVFIGlzIFZhbHVlCisgICAgICAgIG9iamVj dCB3aXRoIHJlZ2lzdGVyIHZhbHVlLiBGUkFNRV9JRF9SRUdOVU0gY2FuIGJl IGEgKFNQLCksCisgICAgICAgIChTUCwgUEMpLCBvciAoU1AsIFBDLCBTUEVD SUFMKSB0dXBsZSwgd2hlcmUgU1AsIFBDLCBhbmQKKyAgICAgICAgU1BFQ0lB TCBhcmUgKHBsYXRmb3JtIHNwZWNpZmljKSByZWdpc3RlciBudW1iZXJzLgor ICAgICAgICBUaGUgZnJhbWUgSUQgaXMgYnVpbHQgaW4gZWFjaCBjYXNlIGFz IGZvbGxvd3M6CisgICAgICAgICAgKFNQLCkgICAgICAgICAgICAgICAgIG1h a2VfaWRfYnVpbGRfd2lsZCAoVmFsdWUoU1ApKQorICAgICAgICAgIChTUCwg UEMpICAgICAgICAgICAgICBtYWtlX2lkX2J1aWxkIChWYWx1ZShTUCksIFZh bHVlKFBDKSkKKyAgICAgICAgICAoU1AsIFBDLCBTUEVDSUFMKSAgICAgbWFr ZV9pZF9idWlsZF9zcGVjaWFsIChWYWx1ZShTUCksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKFBDKSwgVmFsdWUoU1BFQ0lB TCkKKyAgICAgICAgVGhlIHJlZ2lzdGVycyBwcmVzZW50IGluIEZSQU1FX0lE X1JFR05VTSBzaG91bGQgYmUgYW1vbmcgdGhvc2UKKyAgICAgICAgcmV0dXJu ZWQgYnkgUkVHX0RBVEEuCisgICAgIiIiCisKKyAgICBjdXJyZW50X3Byb2dz cGFjZSA9IGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpCisgICAgZm9yIG9iamZp bGUgaW4gZ2RiLm9iamZpbGVzKCk6CisgICAgICAgIGZvciBzbmlmZmVyIGlu IG9iamZpbGUuZnJhbWVfc25pZmZlcnM6CisgICAgICAgICAgICB1bndpbmRf aW5mbyA9IHNuaWZmZXIoc25pZmZlcl9pbmZvKQorICAgICAgICAgICAgaWYg dW53aW5kX2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0 dXJuIHVud2luZF9pbmZvCisKKyAgICBmb3Igc25pZmZlciBpbiBjdXJyZW50 X3Byb2dzcGFjZS5mcmFtZV9zbmlmZmVyczoKKyAgICAgICAgdW53aW5kX2lu Zm8gPSBzbmlmZmVyKHNuaWZmZXJfaW5mbykKKyAgICAgICAgaWYgdW53aW5k X2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gdW53aW5k X2luZm8KKworICAgIGZvciBzbmlmZmVyIGluIGdkYi5mcmFtZV9zbmlmZmVy czoKKyAgICAgICAgdW53aW5kX2luZm8gPSBzbmlmZmVyKHNuaWZmZXJfaW5m bykKKyAgICAgICAgaWYgdW53aW5kX2luZm8gaXMgbm90IE5vbmU6CisgICAg ICAgICAgICByZXR1cm4gdW53aW5kX2luZm8KKworICAgIHJldHVybiBOb25l CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5LW9iamZpbGUuYyBiL2dkYi9w eXRob24vcHktb2JqZmlsZS5jCmluZGV4IGU3OGNlYmEuLmJiZTY4ZjggMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vcHktb2JqZmlsZS5jCisrKyBiL2dkYi9w eXRob24vcHktb2JqZmlsZS5jCkBAIC00Miw2ICs0MiwxMCBAQCB0eXBlZGVm IHN0cnVjdAogCiAgIC8qIFRoZSBmcmFtZSBmaWx0ZXIgbGlzdCBvZiBmdW5j dGlvbnMuICAqLwogICBQeU9iamVjdCAqZnJhbWVfZmlsdGVyczsKKworICAv KiBUaGUgZnJhbWUgc25pZmZlcnMgbGlzdCBvZiBmdW5jdGlvbnMuICAqLwor ICBQeU9iamVjdCAqZnJhbWVfc25pZmZlcnM7CisKICAgLyogVGhlIHR5cGUt cHJpbnRlciBsaXN0LiAgKi8KICAgUHlPYmplY3QgKnR5cGVfcHJpbnRlcnM7 CiAKQEAgLTE2Miw2ICsxNjYsNyBAQCBvYmpmcHlfZGVhbGxvYyAoUHlPYmpl Y3QgKm8pCiAgIFB5X1hERUNSRUYgKHNlbGYtPmRpY3QpOwogICBQeV9YREVD UkVGIChzZWxmLT5wcmludGVycyk7CiAgIFB5X1hERUNSRUYgKHNlbGYtPmZy YW1lX2ZpbHRlcnMpOworICBQeV9YREVDUkVGIChzZWxmLT5mcmFtZV9zbmlm ZmVycyk7CiAgIFB5X1hERUNSRUYgKHNlbGYtPnR5cGVfcHJpbnRlcnMpOwog ICBQeV9YREVDUkVGIChzZWxmLT54bWV0aG9kcyk7CiAgIFB5X1RZUEUgKHNl bGYpLT50cF9mcmVlIChzZWxmKTsKQEAgLTE4NCw2ICsxODksMTAgQEAgb2Jq ZnB5X2luaXRpYWxpemUgKG9iamZpbGVfb2JqZWN0ICpzZWxmKQogICBpZiAo c2VsZi0+ZnJhbWVfZmlsdGVycyA9PSBOVUxMKQogICAgIHJldHVybiAwOwog CisgIHNlbGYtPmZyYW1lX3NuaWZmZXJzID0gUHlMaXN0X05ldyAoMCk7Cisg IGlmIChzZWxmLT5mcmFtZV9zbmlmZmVycyA9PSBOVUxMKQorICAgIHJldHVy biAwOworCiAgIHNlbGYtPnR5cGVfcHJpbnRlcnMgPSBQeUxpc3RfTmV3ICgw KTsKICAgaWYgKHNlbGYtPnR5cGVfcHJpbnRlcnMgPT0gTlVMTCkKICAgICBy ZXR1cm4gMDsKQEAgLTI5MSw2ICszMDAsNDggQEAgb2JqZnB5X3NldF9mcmFt ZV9maWx0ZXJzIChQeU9iamVjdCAqbywgUHlPYmplY3QgKmZpbHRlcnMsIHZv aWQgKmlnbm9yZSkKICAgcmV0dXJuIDA7CiB9CiAKKy8qIFJldHVybiB0aGUg ZnJhbWUgc25pZmZlcnMgYXR0cmlidXRlIGZvciB0aGlzIG9iamVjdCBmaWxl LiAgKi8KKworUHlPYmplY3QgKgorb2JqZnB5X2dldF9mcmFtZV9zbmlmZmVy cyAoUHlPYmplY3QgKm8sIHZvaWQgKmlnbm9yZSkKK3sKKyAgb2JqZmlsZV9v YmplY3QgKnNlbGYgPSAob2JqZmlsZV9vYmplY3QgKikgbzsKKworICBQeV9J TkNSRUYgKHNlbGYtPmZyYW1lX3NuaWZmZXJzKTsKKyAgcmV0dXJuIHNlbGYt PmZyYW1lX3NuaWZmZXJzOworfQorCisvKiBTZXQgdGhpcyBvYmplY3QgZmls ZSdzIGZyYW1lIHNuaWZmZXJzIGxpc3QgdG8gU05JRkZFUlMuICAqLworCitz dGF0aWMgaW50CitvYmpmcHlfc2V0X2ZyYW1lX3NuaWZmZXJzIChQeU9iamVj dCAqbywgUHlPYmplY3QgKnNuaWZmZXJzLCB2b2lkICppZ25vcmUpCit7Cisg IFB5T2JqZWN0ICp0bXA7CisgIG9iamZpbGVfb2JqZWN0ICpzZWxmID0gKG9i amZpbGVfb2JqZWN0ICopIG87CisKKyAgaWYgKCFzbmlmZmVycykKKyAgICB7 CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1R5cGVFcnJvciwKKwkJ ICAgICAgIF8oIkNhbm5vdCBkZWxldGUgdGhlIGZyYW1lIHNuaWZmZXJzIGF0 dHJpYnV0ZS4iKSk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlm ICghUHlMaXN0X0NoZWNrIChzbmlmZmVycykpCisgICAgeworICAgICAgUHlF cnJfU2V0U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisJCSAgICAgICBfKCJU aGUgZnJhbWVfc25pZmZlcnMgYXR0cmlidXRlIG11c3QgYmUgYSBsaXN0LiIp KTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgLyogVGFrZSBjYXJl IGluIGNhc2UgdGhlIExIUyBhbmQgUkhTIGFyZSByZWxhdGVkIHNvbWVob3cu ICAqLworICB0bXAgPSBzZWxmLT5mcmFtZV9zbmlmZmVyczsKKyAgUHlfSU5D UkVGIChzbmlmZmVycyk7CisgIHNlbGYtPmZyYW1lX3NuaWZmZXJzID0gc25p ZmZlcnM7CisgIFB5X1hERUNSRUYgKHRtcCk7CisKKyAgcmV0dXJuIDA7Cit9 CisKIC8qIEdldCB0aGUgJ3R5cGVfcHJpbnRlcnMnIGF0dHJpYnV0ZS4gICov CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC02MTgsNiArNjY5LDggQEAgc3Rh dGljIFB5R2V0U2V0RGVmIG9iamZpbGVfZ2V0c2V0W10gPQogICAgICJQcmV0 dHkgcHJpbnRlcnMuIiwgTlVMTCB9LAogICB7ICJmcmFtZV9maWx0ZXJzIiwg b2JqZnB5X2dldF9mcmFtZV9maWx0ZXJzLAogICAgIG9iamZweV9zZXRfZnJh bWVfZmlsdGVycywgIkZyYW1lIEZpbHRlcnMuIiwgTlVMTCB9LAorICB7ICJm cmFtZV9zbmlmZmVycyIsIG9iamZweV9nZXRfZnJhbWVfc25pZmZlcnMsCisg ICAgb2JqZnB5X3NldF9mcmFtZV9zbmlmZmVycywgIkZyYW1lIFNuaWZmZXJz IiwgTlVMTCB9LAogICB7ICJ0eXBlX3ByaW50ZXJzIiwgb2JqZnB5X2dldF90 eXBlX3ByaW50ZXJzLCBvYmpmcHlfc2V0X3R5cGVfcHJpbnRlcnMsCiAgICAg IlR5cGUgcHJpbnRlcnMuIiwgTlVMTCB9LAogICB7ICJ4bWV0aG9kcyIsIG9i amZweV9nZXRfeG1ldGhvZHMsIE5VTEwsCmRpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL3B5LXByb2dzcGFjZS5jIGIvZ2RiL3B5dGhvbi9weS1wcm9nc3BhY2Uu YwppbmRleCA5NjMzOWIxLi4wOTcyNDk4IDEwMDY0NAotLS0gYS9nZGIvcHl0 aG9uL3B5LXByb2dzcGFjZS5jCisrKyBiL2dkYi9weXRob24vcHktcHJvZ3Nw YWNlLmMKQEAgLTQxLDYgKzQxLDEwIEBAIHR5cGVkZWYgc3RydWN0CiAKICAg LyogVGhlIGZyYW1lIGZpbHRlciBsaXN0IG9mIGZ1bmN0aW9ucy4gICovCiAg IFB5T2JqZWN0ICpmcmFtZV9maWx0ZXJzOworCisgIC8qIFRoZSBmcmFtZSBz bmlmZmVyIGxpc3QuICAqLworICBQeU9iamVjdCAqZnJhbWVfc25pZmZlcnM7 CisKICAgLyogVGhlIHR5cGUtcHJpbnRlciBsaXN0LiAgKi8KICAgUHlPYmpl Y3QgKnR5cGVfcHJpbnRlcnM7CiAKQEAgLTgyLDYgKzg2LDcgQEAgcHNweV9k ZWFsbG9jIChQeU9iamVjdCAqc2VsZikKICAgUHlfWERFQ1JFRiAocHNfc2Vs Zi0+ZGljdCk7CiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPnByaW50ZXJzKTsK ICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+ZnJhbWVfZmlsdGVycyk7CisgIFB5 X1hERUNSRUYgKHBzX3NlbGYtPmZyYW1lX3NuaWZmZXJzKTsKICAgUHlfWERF Q1JFRiAocHNfc2VsZi0+dHlwZV9wcmludGVycyk7CiAgIFB5X1hERUNSRUYg KHBzX3NlbGYtPnhtZXRob2RzKTsKICAgUHlfVFlQRSAoc2VsZiktPnRwX2Zy ZWUgKHNlbGYpOwpAQCAtMTA0LDYgKzEwOSwxMCBAQCBwc3B5X2luaXRpYWxp emUgKHBzcGFjZV9vYmplY3QgKnNlbGYpCiAgIGlmIChzZWxmLT5mcmFtZV9m aWx0ZXJzID09IE5VTEwpCiAgICAgcmV0dXJuIDA7CiAKKyAgc2VsZi0+ZnJh bWVfc25pZmZlcnMgPSBQeUxpc3RfTmV3ICgwKTsKKyAgaWYgKHNlbGYtPmZy YW1lX3NuaWZmZXJzID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisKICAgc2Vs Zi0+dHlwZV9wcmludGVycyA9IFB5TGlzdF9OZXcgKDApOwogICBpZiAoc2Vs Zi0+dHlwZV9wcmludGVycyA9PSBOVUxMKQogICAgIHJldHVybiAwOwpAQCAt MjExLDYgKzIyMCw0OCBAQCBwc3B5X3NldF9mcmFtZV9maWx0ZXJzIChQeU9i amVjdCAqbywgUHlPYmplY3QgKmZyYW1lLCB2b2lkICppZ25vcmUpCiAgIHJl dHVybiAwOwogfQogCisvKiBSZXR1cm4gdGhlIGxpc3Qgb2YgdGhlIGZyYW1l IHNuaWZmZXJzIGZvciB0aGlzIHByb2dyYW0gc3BhY2UuICAqLworCitQeU9i amVjdCAqCitwc3B5X2dldF9mcmFtZV9zbmlmZmVycyAoUHlPYmplY3QgKm8s IHZvaWQgKmlnbm9yZSkKK3sKKyAgcHNwYWNlX29iamVjdCAqc2VsZiA9IChw c3BhY2Vfb2JqZWN0ICopIG87CisKKyAgUHlfSU5DUkVGIChzZWxmLT5mcmFt ZV9zbmlmZmVycyk7CisgIHJldHVybiBzZWxmLT5mcmFtZV9zbmlmZmVyczsK K30KKworLyogU2V0IHRoaXMgcHJvZ3JhbSBzcGFjZSdzIGxpc3Qgb2YgdGhl IHNuaWZmZXJzIHRvIFNOSUZGRVJTLiAgKi8KKworc3RhdGljIGludAorcHNw eV9zZXRfZnJhbWVfc25pZmZlcnMgKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAq c25pZmZlcnMsIHZvaWQgKmlnbm9yZSkKK3sKKyAgUHlPYmplY3QgKnRtcDsK KyAgcHNwYWNlX29iamVjdCAqc2VsZiA9IChwc3BhY2Vfb2JqZWN0ICopIG87 CisKKyAgaWYgKCFzbmlmZmVycykKKyAgICB7CisgICAgICBQeUVycl9TZXRT dHJpbmcgKFB5RXhjX1R5cGVFcnJvciwKKwkJICAgICAgICJjYW5ub3QgZGVs ZXRlIHRoZSBmcmFtZSBzbmlmZmVycyBsaXN0Iik7CisgICAgICByZXR1cm4g LTE7CisgICAgfQorCisgIGlmICghUHlMaXN0X0NoZWNrIChzbmlmZmVycykp CisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19UeXBlRXJy b3IsCisJCSAgICAgICAidGhlIGZyYW1lIHNuaWZmZXJzIGF0dHJpYnV0ZSBt dXN0IGJlIGEgbGlzdCIpOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKwor ICAvKiBUYWtlIGNhcmUgaW4gY2FzZSB0aGUgTEhTIGFuZCBSSFMgYXJlIHJl bGF0ZWQgc29tZWhvdy4gICovCisgIHRtcCA9IHNlbGYtPmZyYW1lX3NuaWZm ZXJzOworICBQeV9JTkNSRUYgKHNuaWZmZXJzKTsKKyAgc2VsZi0+ZnJhbWVf c25pZmZlcnMgPSBzbmlmZmVyczsKKyAgUHlfWERFQ1JFRiAodG1wKTsKKwor ICByZXR1cm4gMDsKK30KKwogLyogR2V0IHRoZSAndHlwZV9wcmludGVycycg YXR0cmlidXRlLiAgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTM0NSw2 ICszOTYsOCBAQCBzdGF0aWMgUHlHZXRTZXREZWYgcHNwYWNlX2dldHNldFtd ID0KICAgICAiUHJldHR5IHByaW50ZXJzLiIsIE5VTEwgfSwKICAgeyAiZnJh bWVfZmlsdGVycyIsIHBzcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMsIHBzcHlfc2V0 X2ZyYW1lX2ZpbHRlcnMsCiAgICAgIkZyYW1lIGZpbHRlcnMuIiwgTlVMTCB9 LAorICB7ICJmcmFtZV9zbmlmZmVycyIsIHBzcHlfZ2V0X2ZyYW1lX3NuaWZm ZXJzLCBwc3B5X3NldF9mcmFtZV9zbmlmZmVycywKKyAgICAiRnJhbWUgc25p ZmZlcnMuIiwgTlVMTCB9LAogICB7ICJ0eXBlX3ByaW50ZXJzIiwgcHNweV9n ZXRfdHlwZV9wcmludGVycywgcHNweV9zZXRfdHlwZV9wcmludGVycywKICAg ICAiVHlwZSBwcmludGVycy4iLCBOVUxMIH0sCiAgIHsgInhtZXRob2RzIiwg cHNweV9nZXRfeG1ldGhvZHMsIE5VTEwsCmRpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL3B5LXVud2luZC5jIGIvZ2RiL3B5dGhvbi9weS11bndpbmQuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E5OWY3Ci0tLSAv ZGV2L251bGwKKysrIGIvZ2RiL3B5dGhvbi9weS11bndpbmQuYwpAQCAtMCww ICsxLDUxNCBAQAorLyogUHl0aG9uIGZyYW1lIHVud2luZGVyIGludGVyZmFj ZQorCisgICBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVk ZSAiZGVmcy5oIgorI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKyNpbmNsdWRl ICJmcmFtZS11bndpbmQuaCIKKyNpbmNsdWRlICJnZGJfb2JzdGFjay5oIgor I2luY2x1ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgImxhbmd1YWdlLmgiCisj aW5jbHVkZSAib2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJweXRob24taW50ZXJu YWwuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgInVzZXIt cmVncy5oIgorCisjZGVmaW5lIFRSQUNFX1BZX1VOV0lORChsZXZlbCwgYXJn cy4uLikgaWYgKHB5dXdfZGVidWcgPj0gbGV2ZWwpICBcCisgIHsgZnByaW50 Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCBhcmdzKTsgfQorCit0eXBlZGVm IHN0cnVjdAoreworICBQeU9iamVjdF9IRUFECisgIHN0cnVjdCBmcmFtZV9p bmZvICpmcmFtZV9pbmZvOworfSBzbmlmZmVyX2luZm9fb2JqZWN0OworCisv KiBUaGUgZGF0YSB3ZSBrZWVwIGZvciBhIGZyYW1lIHdlIGNhbiB1bndpbmQ6 IGZyYW1lX2lkIGFuZCBhbiBhcnJheSBvZgorICAgKHJlZ2lzdGVyX251bWJl ciwgcmVnaXN0ZXJfdmFsdWUpIHBhaXJzLiAgKi8KKwordHlwZWRlZiBzdHJ1 Y3QKK3sKKyAgc3RydWN0IGZyYW1lX2lkIGZyYW1lX2lkOworICBzdHJ1Y3Qg Z2RiYXJjaCAqZ2RiYXJjaDsKKyAgaW50IHJlZ19jb3VudDsKKyAgc3RydWN0 IHJlZ19pbmZvCisgIHsKKyAgICBpbnQgbnVtYmVyOworICAgIGdkYl9ieXRl ICpkYXRhOworICB9IHJlZ1tdOworfSBjYWNoZWRfZnJhbWVfaW5mbzsKKwor c3RhdGljIFB5VHlwZU9iamVjdCBzbmlmZmVyX2luZm9fb2JqZWN0X3R5cGUK KyAgICBDUFlDSEVDS0VSX1RZUEVfT0JKRUNUX0ZPUl9UWVBFREVGICgic25p ZmZlcl9pbmZvX29iamVjdCIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHB5 dXdfZGVidWcgPSAwOworCitzdGF0aWMgc3RydWN0IGdkYmFyY2hfZGF0YSAq cHl1d19nZGJhcmNoX2RhdGE7CisKKy8qIENhbGxlZCBieSB0aGUgUHl0aG9u IGludGVycHJldGVyIHRvIG9idGFpbiBzdHJpbmcgcmVwcmVzZW50YXRpb24K KyAgIG9mIHRoZSBTbmlmZmVySW5mbyBvYmplY3QuICAqLworCitzdGF0aWMg UHlPYmplY3QgKgorc25pZmZlcl9pbmZvcHlfc3RyIChQeU9iamVjdCAqc2Vs ZikKK3sKKyAgY2hhciAqczsKKyAgUHlPYmplY3QgKnJlc3VsdDsKKyAgc3Ry dWN0IGZyYW1lX2luZm8gKmZyYW1lID0gKChzbmlmZmVyX2luZm9fb2JqZWN0 ICopc2VsZiktPmZyYW1lX2luZm87CisKKyAgcyA9IHhzdHJwcmludGYgKCJT UD0lcyxQQz0lcyIsIGNvcmVfYWRkcl90b19zdHJpbmdfbnogKGdldF9mcmFt ZV9zcCAoZnJhbWUpKSwKKyAgICAgICAgY29yZV9hZGRyX3RvX3N0cmluZ19u eiAoZ2V0X2ZyYW1lX3BjIChmcmFtZSkpKTsKKyAgcmVzdWx0ID0gUHlTdHJp bmdfRnJvbVN0cmluZyAocyk7CisgIHhmcmVlIChzKTsKKworICByZXR1cm4g cmVzdWx0OworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBnZGIuU25pZmZl ckluZm8ucmVhZF9yZWdpc3RlciAoc2VsZiwgcmVnbnVtKSAtPiBnZGIuVmFs dWUuCisgICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHJlZ2lzdGVyIGFzIHBv aW50ZXIuICAqLworCitzdGF0aWMgUHlPYmplY3QgKgorc25pZmZlcl9pbmZv cHlfcmVhZF9yZWdpc3RlciAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICph cmdzKQoreworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNl cHQ7CisgIGludCByZWdudW07CisgIHN0cnVjdCB2YWx1ZSAqdmFsID0gTlVM TDsKKworICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUgKGFyZ3MsICJpIiwgJnJl Z251bSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgVFJZX0NBVENIIChleGNl cHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAgICAvKiBDYW5ub3Qg Y2FsbCBgdmFsdWVfb2ZfcmVnaXN0ZXInIGFzIGZyYW1lX2luZm8gaXMgbm90 IHJlYWR5IHlldCwgc28KKyAgICAgICAgIHVzZSBkZXByZWNhdGVkIGNhbGwg aW5zdGVhZC4gICovCisgICAgICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUg PSAoKHNuaWZmZXJfaW5mb19vYmplY3QgKilzZWxmKS0+ZnJhbWVfaW5mbzsK KyAgICAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2Fy Y2ggKGZyYW1lKTsKKyAgICAgIGdkYl9ieXRlIGJ1ZmZlcltzaXplb2YgKENP UkVfQUREUildOworCisgICAgICBnZGJfYXNzZXJ0IChyZWdpc3Rlcl9zaXpl IChnZGJhcmNoLCByZWdudW0pIDw9IEFSUkFZX1NJWkUgKGJ1ZmZlcikpOwor ICAgICAgaWYgKGRlcHJlY2F0ZWRfZnJhbWVfcmVnaXN0ZXJfcmVhZCAoZnJh bWUsIHJlZ251bSwgYnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgIHN0 cnVjdCB0eXBlICpwdHJfdHlwZSA9IGJ1aWx0aW5fdHlwZSAoZ2RiYXJjaCkt PmJ1aWx0aW5fZGF0YV9wdHI7CisKKyAgICAgICAgICB2YWwgPSB2YWx1ZV9m cm9tX3BvaW50ZXIgKHB0cl90eXBlLCB1bnBhY2tfcG9pbnRlciAocHRyX3R5 cGUsIGJ1ZmZlcikpOworICAgICAgICB9CisKKyAgICAgIGlmICh2YWwgPT0g TlVMTCkKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVy cm9yLCBfKCJVbmtub3duIHJlZ2lzdGVyLiIpKTsKKyAgICB9CisgIEdEQl9Q WV9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQpOworCisgIHJldHVybiB2YWwg PT0gTlVMTCA/IE5VTEwgOiB2YWx1ZV90b192YWx1ZV9vYmplY3QgKHZhbCk7 Cit9CisKKy8qIENyZWF0ZSBQeXRob24gU25pZmZlckluZm8gb2JqZWN0LiAg Ki8KKworc3RhdGljIFB5T2JqZWN0ICoKK2ZyYW1lX2luZm9fdG9fc25pZmZl cl9pbmZvX29iamVjdCAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lKQorewor ICBzbmlmZmVyX2luZm9fb2JqZWN0ICpzbmlmZmVyX2luZm8KKyAgICAgID0g UHlPYmplY3RfTmV3IChzbmlmZmVyX2luZm9fb2JqZWN0LCAmc25pZmZlcl9p bmZvX29iamVjdF90eXBlKTsKKworICBpZiAoc25pZmZlcl9pbmZvICE9IE5V TEwpCisgICAgc25pZmZlcl9pbmZvLT5mcmFtZV9pbmZvID0gZnJhbWU7CisK KyAgcmV0dXJuIChQeU9iamVjdCAqKSBzbmlmZmVyX2luZm87Cit9CisKKy8q IFBhcnNlIGdpdmVuIHR1cGxlIG9mIFB5dGhvbiBJbnRzIGludG8gYW4gYXJy YXkuIFJldHVybnMgdGhlIG51bWJlciBvZgorICAgaXRlbXMgaW4gdGhlIHR1 cGxlLCBvciAtMSBpZiBpdCBpcyBub3QgYSB0dXBsZS4gSWYgdHVwbGUgaGFz CisgICBtb3JlIGVsZW1lbnRzIHRoYW4gYXJyYXkgc2l6ZSwgdGhlc2UgZWxl bWVudHMgYXJlIGlnbm9yZWQuICAqLworCitzdGF0aWMgUHlfc3NpemVfdAor cHl1d19wYXJzZV9pbnRzIChQeU9iamVjdCAqcHlvX3NlcXVlbmNlLCBpbnQg KnZhbHVlcywgUHlfc3NpemVfdCBtYXhfdmFsdWVzKQoreworICBQeV9zc2l6 ZV90IHNpemU7CisgIFB5X3NzaXplX3QgaTsKKworICBpZiAoISBQeVR1cGxl X0NoZWNrIChweW9fc2VxdWVuY2UpKQorICAgIHJldHVybiAtMTsKKyAgc2l6 ZSA9IFB5VHVwbGVfU2l6ZSAocHlvX3NlcXVlbmNlKTsKKyAgaWYgKHNpemUg PCAwKQorICAgIHJldHVybiAtMTsKKyAgaWYgKHNpemUgPCBtYXhfdmFsdWVz KQorICAgIG1heF92YWx1ZXMgPSBzaXplOworICBmb3IgKGkgPSAwOyBpIDwg bWF4X3ZhbHVlczsgKytpKQorICAgIHsKKyAgICAgIFB5T2JqZWN0ICpweW9f aXRlbSA9IFB5VHVwbGVfR2V0SXRlbSAocHlvX3NlcXVlbmNlLCBpKTsKKwor ICAgICAgaWYgKHB5b19pdGVtID09IE5VTEwgfHwgIVB5SW50X0NoZWNrIChw eW9faXRlbSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHZhbHVlc1tp XSA9IChpbnQpUHlJbnRfQXNMb25nIChweW9faXRlbSk7CisgICAgfQorICBy ZXR1cm4gaTsKK30KKworLyogUmV0cmlldmUgcmVnaXN0ZXIgdmFsdWUgZm9y IHRoZSBjYWNoZWQgdW53aW5kIGluZm8gYXMgdGFyZ2V0IHBvaW50ZXIuCisg ICBSZXR1cm4gMSBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUuICAqLworCitz dGF0aWMgaW50CitweXV3X3JlZ192YWx1ZSAoY2FjaGVkX2ZyYW1lX2luZm8g KmNhY2hlZF9mcmFtZSwgaW50IHJlZ251bSwgQ09SRV9BRERSICp2YWx1ZSkK K3sKKyAgc3RydWN0IHJlZ19pbmZvICpyZWdfaW5mbyA9IGNhY2hlZF9mcmFt ZS0+cmVnOworICBzdHJ1Y3QgcmVnX2luZm8gKnJlZ19pbmZvX2VuZCA9IHJl Z19pbmZvICsgY2FjaGVkX2ZyYW1lLT5yZWdfY291bnQ7CisKKyAgZm9yICg7 IHJlZ19pbmZvIDwgcmVnX2luZm9fZW5kOyArK3JlZ19pbmZvKQorICAgIHsK KyAgICAgIGlmIChyZWdfaW5mby0+bnVtYmVyID09IHJlZ251bSkKKyAgICAg ICAgeworICAgICAgICAgICp2YWx1ZSA9IHVucGFja19wb2ludGVyCisgICAg ICAgICAgICAgIChyZWdpc3Rlcl90eXBlIChjYWNoZWRfZnJhbWUtPmdkYmFy Y2gsIHJlZ251bSksIHJlZ19pbmZvLT5kYXRhKTsKKyAgICAgICAgICByZXR1 cm4gMTsKKyAgICAgICAgfQorICAgIH0KKworICBlcnJvciAoXygiUHl0aG9u IHNuaWZmZXIgdXNlcyByZWdpc3RlciAjJWQgZm9yIHRoaXNfaWQsICIKKyAg ICAgICAgICAgImJ1dCB0aGlzIHJlZ2lzdGVyIGlzIG5vdCBhdmFpbGFibGUi KSwgcmVnbnVtKTsKK30KKworLyogZnJhbWVfdW53aW5kLnRoaXNfaWQgbWV0 aG9kLiAgKi8KKworc3RhdGljIHZvaWQKK3B5dXdfdGhpc19pZCAoc3RydWN0 IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKipjYWNoZV9wdHIsCisg ICAgICAgICAgICAgIHN0cnVjdCBmcmFtZV9pZCAqdGhpc19pZCkKK3sKKyAg KnRoaXNfaWQgPSAoKGNhY2hlZF9mcmFtZV9pbmZvICopKmNhY2hlX3B0cikt PmZyYW1lX2lkOworICBpZiAocHl1d19kZWJ1ZyA+PSAxKQorICAgIHsKKyAg ICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIiVzOiBmcmFt ZV9pZDogIiwgX19GVU5DVElPTl9fKTsKKyAgICAgIGZwcmludF9mcmFtZV9p ZCAoZ2RiX3N0ZGxvZywgKnRoaXNfaWQpOworICAgICAgZnByaW50Zl91bmZp bHRlcmVkIChnZGJfc3RkbG9nLCAiXG4iKTsKKyAgICB9Cit9CisKKy8qIFJl Z2lzdGVyIHVud2luZCBzaGltLiAgKi8KKworc3RhdGljIHN0cnVjdCB2YWx1 ZSAqCitweXV3X3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0 aGlzX2ZyYW1lLCB2b2lkICoqY2FjaGVfcHRyLCBpbnQgcmVnbnVtKQorewor ICBjYWNoZWRfZnJhbWVfaW5mbyAqY2FjaGVkX2ZyYW1lID0gKmNhY2hlX3B0 cjsKKyAgc3RydWN0IHJlZ19pbmZvICpyZWdfaW5mbyA9IGNhY2hlZF9mcmFt ZS0+cmVnOworICBzdHJ1Y3QgcmVnX2luZm8gKnJlZ19pbmZvX2VuZCA9IHJl Z19pbmZvICsgY2FjaGVkX2ZyYW1lLT5yZWdfY291bnQ7CisKKyAgVFJBQ0Vf UFlfVU5XSU5EICgxLCAiJXMoZnJhbWU9JXAsLi4uLHJlZz0lZClcbiIsIF9f RlVOQ1RJT05fXywgdGhpc19mcmFtZSwKKyAgICAgICAgICAgICAgICAgICBy ZWdudW0pOworICBmb3IgKDsgcmVnX2luZm8gPCByZWdfaW5mb19lbmQ7ICsr cmVnX2luZm8pCisgICAgaWYgKHJlZ251bSA9PSByZWdfaW5mby0+bnVtYmVy KQorICAgICAgcmV0dXJuIGZyYW1lX3Vud2luZF9nb3RfYnl0ZXMgKHRoaXNf ZnJhbWUsIHJlZ251bSwgcmVnX2luZm8tPmRhdGEpOworCisgIHJldHVybiBm cmFtZV91bndpbmRfZ290X29wdGltaXplZCAodGhpc19mcmFtZSwgcmVnbnVt KTsKK30KKworLyogUGFyc2UgZnJhbWUgSUQgdHVwbGUgcmV0dXJuZWQgYnkg dGhlIHNuaWZmZXIgaW5mbyBHREIncyBmcmFtZV9pZCBhbmQKKyAgIHNhdmVk IGl0IGluIHRoZSBjYWNoZWQgZnJhbWUuICAqLworCitzdGF0aWMgdm9pZAor cHl1d19wYXJzZV9mcmFtZV9pZCAoY2FjaGVkX2ZyYW1lX2luZm8gKmNhY2hl ZF9mcmFtZSwgCisgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHlv X2ZyYW1lX2lkX3JlZ3MpCit7CisgIGludCByZWdub1szXTsKKyAgQ09SRV9B RERSIHNwLCBwYywgc3BlY2lhbDsKKworICBpZiAoIVB5VHVwbGVfQ2hlY2sg KHB5b19mcmFtZV9pZF9yZWdzKSkKKyAgICBlcnJvciAoXygiVGhlIHNlY29u ZCBlbGVtZW50IG9mIHRoZSBwYWlyIHJldHVybmVkIGJ5IGEgUHl0aG9uICIK KyAgICAgICAgICAgICAic25pZmZlciBzaG91bGQgYmUgYSB0dXBsZSIpKTsK KworICBzd2l0Y2ggKHB5dXdfcGFyc2VfaW50cyAocHlvX2ZyYW1lX2lkX3Jl Z3MsIHJlZ25vLCBBUlJBWV9TSVpFIChyZWdubykpKSB7CisgIGNhc2UgMToK KyAgICBpZiAocHl1d19yZWdfdmFsdWUgKGNhY2hlZF9mcmFtZSwgcmVnbm9b MF0sICZzcCkpCisgICAgICB7CisgICAgICAgIGNhY2hlZF9mcmFtZS0+ZnJh bWVfaWQgPSBmcmFtZV9pZF9idWlsZF93aWxkIChzcCk7CisgICAgICAgIHJl dHVybjsKKyAgICAgIH0KKyAgY2FzZSAyOgorICAgIGlmIChweXV3X3JlZ192 YWx1ZSAoY2FjaGVkX2ZyYW1lLCByZWdub1swXSwgJnNwKQorICAgICAgICB8 fCBweXV3X3JlZ192YWx1ZSAoY2FjaGVkX2ZyYW1lLCByZWdub1sxXSwgJnBj KSkKKyAgICAgIHsKKyAgICAgICAgY2FjaGVkX2ZyYW1lLT5mcmFtZV9pZCA9 IGZyYW1lX2lkX2J1aWxkIChzcCwgcGMpOyAKKyAgICAgICAgcmV0dXJuOwor ICAgICAgfQorICBjYXNlIDM6CisgICAgaWYgKHB5dXdfcmVnX3ZhbHVlIChj YWNoZWRfZnJhbWUsIHJlZ25vWzBdLCAmc3ApCisgICAgICAgIHx8IHB5dXdf cmVnX3ZhbHVlIChjYWNoZWRfZnJhbWUsIHJlZ25vWzFdLCAmcGMpCisgICAg ICAgIHx8IHB5dXdfcmVnX3ZhbHVlIChjYWNoZWRfZnJhbWUsIHJlZ25vWzJd LCAmc3BlY2lhbCkpCisgICAgICB7CisgICAgICAgIGNhY2hlZF9mcmFtZS0+ ZnJhbWVfaWQgPSBmcmFtZV9pZF9idWlsZF9zcGVjaWFsIChzcCwgcGMsIHNw ZWNpYWwpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgIH0KKyAgZXJy b3IgKF8oIlVud2luZGVyIHNob3VsZCByZXR1cm4gYSB0dXBsZSBvZiBpbnRz IGluIHRoZSBzZWNvbmQgaXRlbSIpKTsKK30KKworLyogRnJhbWUgc25pZmZl ciBkaXNwYXRjaC4gICovCisKK3N0YXRpYyBpbnQKK3B5dXdfc25pZmZlciAo Y29uc3Qgc3RydWN0IGZyYW1lX3Vud2luZCAqc2VsZiwgc3RydWN0IGZyYW1l X2luZm8gKnRoaXNfZnJhbWUsCisgICAgICAgICAgICAgIHZvaWQgKipjYWNo ZV9wdHIpCit7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworICBzdHJ1 Y3QgY2xlYW51cCAqY2xlYW51cHM7CisgIHN0cnVjdCBjbGVhbnVwICpjYWNo ZWRfZnJhbWVfY2xlYW51cHM7CisgIFB5T2JqZWN0ICpweW9fbW9kdWxlOwor ICBQeU9iamVjdCAqcHlvX2V4ZWN1dGU7CisgIFB5T2JqZWN0ICpweW9fc25p ZmZlcl9pbmZvOworICBQeU9iamVjdCAqcHlvX3Vud2luZF9pbmZvOworICBj YWNoZWRfZnJhbWVfaW5mbyAqY2FjaGVkX2ZyYW1lID0gTlVMTDsKKworICBn ZGJfYXNzZXJ0ICgqY2FjaGVfcHRyID09IE5VTEwpOworICBnZGJhcmNoID0g KHZvaWQgKikoc2VsZi0+dW53aW5kX2RhdGEpOworICBjbGVhbnVwcyA9IGVu c3VyZV9weXRob25fZW52IChnZGJhcmNoLCBjdXJyZW50X2xhbmd1YWdlKTsK KyAgVFJBQ0VfUFlfVU5XSU5EICgzLCAiJXMoU1A9JWx4LCBQQz0lbHgpXG4i LCBfX0ZVTkNUSU9OX18sCisgICAgICBnZXRfZnJhbWVfc3AgKHRoaXNfZnJh bWUpLCBnZXRfZnJhbWVfcGMgKHRoaXNfZnJhbWUpKTsKKyAgcHlvX3NuaWZm ZXJfaW5mbyA9IGZyYW1lX2luZm9fdG9fc25pZmZlcl9pbmZvX29iamVjdCAo dGhpc19mcmFtZSk7CisgIGlmIChweW9fc25pZmZlcl9pbmZvID09IE5VTEwp CisgICAgZ290byBlcnJvcjsKKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAo cHlvX3NuaWZmZXJfaW5mbyk7CisKKyAgaWYgKChweW9fbW9kdWxlID0gUHlJ bXBvcnRfSW1wb3J0TW9kdWxlICgiZ2RiLnNuaWZmZXJzIikpID09IE5VTEwp CisgICAgZ290byBlcnJvcjsKKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAo cHlvX21vZHVsZSk7CisKKyAgcHlvX2V4ZWN1dGUgPSBQeU9iamVjdF9HZXRB dHRyU3RyaW5nIChweW9fbW9kdWxlLCAiZXhlY3V0ZV9zbmlmZmVycyIpOwor ICBpZiAocHlvX2V4ZWN1dGUgPT0gTlVMTCkKKyAgICBnb3RvIGVycm9yOwor ICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweW9fZXhlY3V0ZSk7CisKKyAg cHlvX3Vud2luZF9pbmZvCisgICAgICA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv bk9iakFyZ3MgKHB5b19leGVjdXRlLCBweW9fc25pZmZlcl9pbmZvLCBOVUxM KTsKKyAgaWYgKHB5b191bndpbmRfaW5mbyA9PSBOVUxMKQorICAgIGdvdG8g ZXJyb3I7CisgIGlmIChweW9fdW53aW5kX2luZm8gPT0gUHlfTm9uZSkKKyAg ICBnb3RvIGVycm9yOworICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweW9f dW53aW5kX2luZm8pOworCisgIC8qIFVud2luZF9pbmZvIGlzIGEgcGFpciAo UkVHSVNURVJTLCBGUkFNRV9JRF9SRUdOVU1TKS4gIFJFR0lTVEVSUworICAg KiBpcyBhIGxpc3Qgb2YgdGhlIChSRUdfTlIsIFJFR19WQUxVRSkgcGFpcnMu IEZSQU1FX0lEX1JFR05VTVMgaXMKKyAgICogdGhlIGxpc3Qgb2YgUkVHTk8g dmFsdWVzLiAgKi8KKyAgaWYgKCEoUHlUdXBsZV9DaGVjayAocHlvX3Vud2lu ZF9pbmZvKSAmJiBQeVR1cGxlX1NpemUgKHB5b191bndpbmRfaW5mbykgPT0g MikpCisgICAgZXJyb3IgKF8oIlNuaWZmZXIgc2hvdWxkIHJldHVybiBhIHBh aXIgKFJFR0lTVEVSUywgRlJBTUVfSURfUkVHTlVNUykiKSk7CisKKyAgewor ICAgIFB5T2JqZWN0ICpweW9fcmVnaXN0ZXJzID0gUHlUdXBsZV9HZXRJdGVt IChweW9fdW53aW5kX2luZm8sIDApOworICAgIGludCBpOworICAgIGludCBy ZWdfY291bnQ7CisgICAgc2l6ZV90IGNhY2hlZF9mcmFtZV9zaXplOworICAg IHNpemVfdCBnZGJfYnl0ZXNfY291bnQ7CisgICAgZ2RiX2J5dGUgKmdkYl9k YXRhX2ZyZWUsICpnZGJfZGF0YV9lbmQ7CisKKyAgICBpZiAocHlvX3JlZ2lz dGVycyA9PSBOVUxMKQorICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5 VHVwbGVfQ2hlY2sgKHB5b19yZWdpc3RlcnMpKQorICAgICAgZXJyb3IgKF8o IlRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSByZXR1cm5lZCBwYWlyIHNob3Vs ZCBiZSBhIHR1cGxlIikpOworCisgICAgLyogRmlndXJlIG91dCBob3cgbXVj aCBzcGFjZSB3ZSBuZWVkIHRvIGFsbG9jYXRlLiAgKi8KKyAgICByZWdfY291 bnQgPSBQeVR1cGxlX1NpemUgKHB5b19yZWdpc3RlcnMpOworICAgIGlmIChy ZWdfY291bnQgPD0gMCkKKyAgICAgIGVycm9yIChfKCJSZWdpc3RlciBsaXN0 IHNob3VsZCBub3QgYmUgZW1wdHkiKSk7CisgICAgZ2RiX2J5dGVzX2NvdW50 ID0gcmVnX2NvdW50ICogc2l6ZW9mIChDT1JFX0FERFIpOworICAgIGNhY2hl ZF9mcmFtZV9zaXplID0gc2l6ZW9mICgqY2FjaGVkX2ZyYW1lKSArCisgICAg ICAgIHJlZ19jb3VudCAqIHNpemVvZiAoY2FjaGVkX2ZyYW1lLT5yZWdbMF0p ICsKKyAgICAgICAgZ2RiX2J5dGVzX2NvdW50ICogc2l6ZW9mIChnZGJfYnl0 ZSk7CisKKyAgICBjYWNoZWRfZnJhbWUgPSB4bWFsbG9jIChjYWNoZWRfZnJh bWVfc2l6ZSk7CisgICAgY2FjaGVkX2ZyYW1lX2NsZWFudXBzID0gbWFrZV9j bGVhbnVwICh4ZnJlZSwgY2FjaGVkX2ZyYW1lKTsKKyAgICBnZGJfZGF0YV9l bmQgPSAoZ2RiX2J5dGUgKikoKGNoYXIgKiljYWNoZWRfZnJhbWUgKyBjYWNo ZWRfZnJhbWVfc2l6ZSk7CisgICAgZ2RiX2RhdGFfZnJlZSA9IGdkYl9kYXRh X2VuZCAtIGdkYl9ieXRlc19jb3VudDsKKworICAgIGNhY2hlZF9mcmFtZS0+ Z2RiYXJjaCA9IGdkYmFyY2g7CisgICAgY2FjaGVkX2ZyYW1lLT5yZWdfY291 bnQgPSByZWdfY291bnQ7CisKKyAgICAvKiBQb3B1bGF0ZSByZWdpc3RlcnMg YXJyYXkuICAqLworICAgIGZvciAoaSA9IDA7IGkgPCByZWdfY291bnQ7IGkr KykKKyAgICB7CisgICAgICBQeU9iamVjdCAqcHlvX3JlZyA9IFB5VHVwbGVf R2V0SXRlbSAocHlvX3JlZ2lzdGVycywgaSk7CisgICAgICBzdHJ1Y3QgcmVn X2luZm8gKnJlZyA9ICYoY2FjaGVkX2ZyYW1lLT5yZWdbaV0pOworCisgICAg ICBpZiAocHlvX3JlZyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwor CisgICAgICBpZiAoIShQeVR1cGxlX0NoZWNrIChweW9fcmVnKSAmJiBQeVR1 cGxlX1NpemUgKHB5b19yZWcpID09IDIpKQorICAgICAgICBlcnJvciAoXygi UHl0aG9uIHNuaWZmZXIgcmV0dXJuZWQgYmFkIHJlZ2lzdGVyIGxpc3Q6ICIK KyAgICAgICAgICAgICAgICAgIml0ZW0gIyVkIGlzIG5vdCBhIChyZWdfbm8s IHJlZ19kYXRhKSBwYWlyIiksIGkpOworCisgICAgICB7CisgICAgICAgIFB5 T2JqZWN0ICpweW9fcmVnX251bWJlciA9ICBQeVR1cGxlX0dldEl0ZW0gKHB5 b19yZWcsIDApOworCisgICAgICAgIGlmIChweW9fcmVnX251bWJlciA9PSBO VUxMKQorICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmICghUHlJ bnRfQ2hlY2sgKHB5b19yZWdfbnVtYmVyKSkKKyAgICAgICAgICBlcnJvciAo XygiUHl0aG9uIHNuaWZmZXIgcmV0dXJuZWQgYmFkIHJlZ2lzdGVyIGxpc3Q6 ICIKKyAgICAgICAgICAgICAgICAgICAiaXRlbSAjJWQgY29udGFpbnMgbm9u LWludGVnZXIgcmVnaXN0ZXIgbnVtYmVyIiksIGkpOworICAgICAgICByZWct Pm51bWJlciA9IChpbnQpUHlJbnRfQXNMb25nIChweW9fcmVnX251bWJlcik7 CisgICAgICB9CisKKyAgICAgIHsKKyAgICAgICAgUHlPYmplY3QgKnB5b19y ZWdfdmFsdWUgPSBQeVR1cGxlX0dldEl0ZW0gKHB5b19yZWcsIDEpOworICAg ICAgICBzdHJ1Y3QgdmFsdWUgKnZhbHVlOworICAgICAgICBzaXplX3QgZGF0 YV9zaXplOworCisgICAgICAgIGlmIChweW9fcmVnX3ZhbHVlID09IE5VTEwp CisgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoKHZhbHVl ID0gdmFsdWVfb2JqZWN0X3RvX3ZhbHVlIChweW9fcmVnX3ZhbHVlKSkgPT0g TlVMTCkKKyAgICAgICAgICBlcnJvciAoXygiUHl0aG9uIHNuaWZmZXIgcmV0 dXJuZWQgYmFkIHJlZ2lzdGVyIGxpc3Q6IGl0ZW0gIyVkLCAiCisgICAgICAg ICAgICAgICAgICAgInJlZ2lzdGVyIHZhbHVlIHNob3VsZCBoYXZlIHR5cGUg Z2RiLlZhbHVlIHR5cGUiKSwgaSk7CisgICAgICAgIGRhdGFfc2l6ZSA9IHJl Z2lzdGVyX3NpemUgKGdkYmFyY2gsIHJlZy0+bnVtYmVyKTsKKyAgICAgICAg Z2RiX2Fzc2VydCAoKGdkYl9kYXRhX2ZyZWUgKyBkYXRhX3NpemUpIDw9IGdk Yl9kYXRhX2VuZCk7CisgICAgICAgIG1lbWNweSAoZ2RiX2RhdGFfZnJlZSwg dmFsdWVfY29udGVudHMgKHZhbHVlKSwgZGF0YV9zaXplKTsKKyAgICAgICAg Y2FjaGVkX2ZyYW1lLT5yZWdbaV0uZGF0YSA9IGdkYl9kYXRhX2ZyZWU7Cisg ICAgICAgIGdkYl9kYXRhX2ZyZWUgKz0gZGF0YV9zaXplOworICAgICAgfQor ICAgIH0KKyAgfQorCisgIHsKKyAgICBQeU9iamVjdCAqcHlvX2ZyYW1lX2lk X3JlZ3MgPSBQeVR1cGxlX0dldEl0ZW0gKHB5b191bndpbmRfaW5mbywgMSk7 CisgICAgaWYgKHB5b19mcmFtZV9pZF9yZWdzID09IE5VTEwpCisgICAgICBn b3RvIGVycm9yOworICAgIHB5dXdfcGFyc2VfZnJhbWVfaWQgKGNhY2hlZF9m cmFtZSwgcHlvX2ZyYW1lX2lkX3JlZ3MpOworICB9CisKKyAgKmNhY2hlX3B0 ciA9IGNhY2hlZF9mcmFtZTsKKyAgZGlzY2FyZF9jbGVhbnVwcyAoY2FjaGVk X2ZyYW1lX2NsZWFudXBzKTsKKyAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsK KyAgcmV0dXJuIDE7CisKK2Vycm9yOgorICBkb19jbGVhbnVwcyAoY2xlYW51 cHMpOworICB4ZnJlZSAoY2FjaGVkX2ZyYW1lKTsKKyAgcmV0dXJuIDA7Cit9 CisKKy8qIEZyYW1lIGNhY2hlIHJlbGVhc2Ugc2hpbS4gICovCisKK3N0YXRp YyB2b2lkCitweXV3X2RlYWxsb2NfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZv ICp0aGlzX2ZyYW1lLCB2b2lkICpjYWNoZSkKK3sKKyAgVFJBQ0VfUFlfVU5X SU5EICgzLCAiJXM6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKKyAgeGZyZWUg KGNhY2hlKTsKK30KKworc3RydWN0IHB5dXdfZ2RiYXJjaF9kYXRhX3R5cGUK K3sKKyAgLyogSGFzIHRoZSB1bndpbmRlciBzaGltIGJlZW4gcHJlcGVuZGVk PyAqLworICBpbnQgdW53aW5kZXJfcmVnaXN0ZXJlZDsKK307CisKK3N0YXRp YyB2b2lkICoKK3B5dXdfZ2RiYXJjaF9kYXRhX2luaXQgKHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoKQoreworICByZXR1cm4gR0RCQVJDSF9PQlNUQUNLX1pB TExPQyAoZ2RiYXJjaCwgc3RydWN0IHB5dXdfZ2RiYXJjaF9kYXRhX3R5cGUp OworfQorCisvKiBOZXcgaW5mZXJpb3IgYXJjaGl0ZWN0dXJlIGNhbGxiYWNr OiByZWdpc3RlciB0aGUgUHl0aG9uIHNuaWZmZXJzCisgICBpbnRlcm1lZGlh cnkuICAqLworCitzdGF0aWMgdm9pZAorcHl1d19vbl9uZXdfZ2RiYXJjaCAo c3RydWN0IGdkYmFyY2ggKm5ld2FyY2gpCit7CisgIHN0cnVjdCBweXV3X2dk YmFyY2hfZGF0YV90eXBlICpkYXRhID0KKyAgICAgIGdkYmFyY2hfZGF0YSAo bmV3YXJjaCwgcHl1d19nZGJhcmNoX2RhdGEpOworCisgIGlmICghZGF0YS0+ dW53aW5kZXJfcmVnaXN0ZXJlZCkKKyAgICB7CisgICAgICBzdHJ1Y3QgZnJh bWVfdW53aW5kICp1bndpbmRlcgorICAgICAgICAgID0gR0RCQVJDSF9PQlNU QUNLX1pBTExPQyAobmV3YXJjaCwgc3RydWN0IGZyYW1lX3Vud2luZCk7CisK KyAgICAgIHVud2luZGVyLT50eXBlID0gIE5PUk1BTF9GUkFNRTsKKyAgICAg IHVud2luZGVyLT5zdG9wX3JlYXNvbiA9IGRlZmF1bHRfZnJhbWVfdW53aW5k X3N0b3BfcmVhc29uOworICAgICAgdW53aW5kZXItPnRoaXNfaWQgPSBweXV3 X3RoaXNfaWQ7CisgICAgICB1bndpbmRlci0+cHJldl9yZWdpc3RlciA9IHB5 dXdfcHJldl9yZWdpc3RlcjsKKyAgICAgIHVud2luZGVyLT51bndpbmRfZGF0 YSA9ICh2b2lkICopbmV3YXJjaDsKKyAgICAgIHVud2luZGVyLT5zbmlmZmVy ID0gcHl1d19zbmlmZmVyOworICAgICAgdW53aW5kZXItPmRlYWxsb2NfY2Fj aGUgPSBweXV3X2RlYWxsb2NfY2FjaGU7CisgICAgICBmcmFtZV91bndpbmRf cHJlcGVuZF91bndpbmRlciAobmV3YXJjaCwgdW53aW5kZXIpOworICAgICAg VFJBQ0VfUFlfVU5XSU5EICgxLCAiJXM6IHJlZ2lzdGVyZWQgdW53aW5kZXIg Zm9yICVzXG4iLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgICAgICAg ICAgIGdkYmFyY2hfYmZkX2FyY2hfaW5mbyAobmV3YXJjaCktPnByaW50YWJs ZV9uYW1lKTsKKyAgICAgIGRhdGEtPnVud2luZGVyX3JlZ2lzdGVyZWQgPSAx OworICAgIH0KK30KKworLyogSW5pdGlhbGl6ZSB1bndpbmQgbWFjaGluZXJ5 LiAgKi8KKworaW50CitnZGJweV9pbml0aWFsaXplX3Vud2luZCAodm9pZCkK K3sKKyAgYWRkX3NldHNob3dfenVpbnRlZ2VyX2NtZAorICAgICAgKCJweS11 bndpbmQiLCBjbGFzc19tYWludGVuYW5jZSwgJnB5dXdfZGVidWcsCisgICAg ICAgIF8oIlNldCBQeXRob24gdW53aW5kZXIgZGVidWdnaW5nLiIpLAorICAg ICAgICBfKCJTaG93IFB5dGhvbiB1bndpbmRlciBkZWJ1Z2dpbmcuIiksCisg ICAgICAgIF8oIldoZW4gbm9uLXplcm8sIFB5dGhpbiB1bndpbmRlciBkZWJ1 Z2dpbmcgaXMgZW5hYmxlZC4iKSwKKyAgICAgICAgTlVMTCwKKyAgICAgICAg TlVMTCwKKyAgICAgICAgJnNldGRlYnVnbGlzdCwgJnNob3dkZWJ1Z2xpc3Qp OworICBweXV3X2dkYmFyY2hfZGF0YQorICAgICAgPSBnZGJhcmNoX2RhdGFf cmVnaXN0ZXJfcG9zdF9pbml0IChweXV3X2dkYmFyY2hfZGF0YV9pbml0KTsK KyAgb2JzZXJ2ZXJfYXR0YWNoX2FyY2hpdGVjdHVyZV9jaGFuZ2VkIChweXV3 X29uX25ld19nZGJhcmNoKTsKKyAgc25pZmZlcl9pbmZvX29iamVjdF90eXBl LnRwX25ldyA9IFB5VHlwZV9HZW5lcmljTmV3OworICBpZiAoUHlUeXBlX1Jl YWR5ICgmc25pZmZlcl9pbmZvX29iamVjdF90eXBlKSA8IDApCisgICAgcmV0 dXJuIC0xOworICByZXR1cm4gZ2RiX3B5bW9kdWxlX2FkZG9iamVjdCAoZ2Ri X21vZHVsZSwgIlNuaWZmZXJJbmZvIiwKKyAgICAgIChQeU9iamVjdCAqKSAm c25pZmZlcl9pbmZvX29iamVjdF90eXBlKTsKK30KKworc3RhdGljIFB5TWV0 aG9kRGVmIHNuaWZmZXJfaW5mb19vYmplY3RfbWV0aG9kc1tdID0KK3sKKyAg eyAicmVhZF9yZWdpc3RlciIsIHNuaWZmZXJfaW5mb3B5X3JlYWRfcmVnaXN0 ZXIsIE1FVEhfVkFSQVJHUywKKyAgICAicmVhZF9yZWdpc3RlciAocmVnaXN0 ZXJfbmFtZSkgLT4gZ2RiLlZhbHVlXG5cCitSZXR1cm4gdGhlIHZhbHVlIG9m IHRoZSByZWdpc3RlciBpbiB0aGUgZnJhbWUuIiB9LAorICB7TlVMTH0gIC8q IFNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IHNuaWZm ZXJfaW5mb19vYmplY3RfdHlwZSA9Cit7CisgIFB5VmFyT2JqZWN0X0hFQURf SU5JVCAoTlVMTCwgMCkKKyAgImdkYi5TbmlmZmVySW5mbyIsICAgICAgICAg ICAgICAvKiB0cF9uYW1lICovCisgIHNpemVvZiAoc25pZmZlcl9pbmZvX29i amVjdCksICAgLyogdHBfYmFzaWNzaXplICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9n ZXRhdHRyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfc2V0YXR0ciAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2Ug Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9h c19tYXBwaW5nICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfaGFzaCAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9jYWxsICovCisgIHNuaWZmZXJfaW5mb3B5X3N0ciwg ICAgICAgICAgICAgLyogdHBfc3RyICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZl ciAqLworICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgIC8qIHRw X2ZsYWdzICovCisgICJHREIgc25pZmZlckluZm8gb2JqZWN0IiwgICAgICAg LyogdHBfZG9jICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZz ZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9pdGVyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfaXRlcm5leHQgKi8KKyAgc25pZmZlcl9pbmZvX29iamVjdF9tZXRo b2RzLCAgICAvKiB0cF9tZXRob2RzICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVz Y3JfZ2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfZGVzY3Jfc2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworfTsKZGlm ZiAtLWdpdCBhL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmggYi9nZGIv cHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oCmluZGV4IDU0NGZlOTMuLmM4Mzgz MGYgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgK KysrIGIvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaApAQCAtMzg2LDEy ICszODYsMTQgQEAgUHlPYmplY3QgKnBzcGFjZV90b19wc3BhY2Vfb2JqZWN0 IChzdHJ1Y3QgcHJvZ3JhbV9zcGFjZSAqKQogICAgIENQWUNIRUNLRVJfUkVU VVJOU19CT1JST1dFRF9SRUY7CiBQeU9iamVjdCAqcHNweV9nZXRfcHJpbnRl cnMgKFB5T2JqZWN0ICosIHZvaWQgKik7CiBQeU9iamVjdCAqcHNweV9nZXRf ZnJhbWVfZmlsdGVycyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKK1B5T2JqZWN0 ICpwc3B5X2dldF9mcmFtZV9zbmlmZmVycyAoUHlPYmplY3QgKiwgdm9pZCAq KTsKIFB5T2JqZWN0ICpwc3B5X2dldF94bWV0aG9kcyAoUHlPYmplY3QgKiwg dm9pZCAqKTsKIAogUHlPYmplY3QgKm9iamZpbGVfdG9fb2JqZmlsZV9vYmpl Y3QgKHN0cnVjdCBvYmpmaWxlICopCiAgICAgQ1BZQ0hFQ0tFUl9SRVRVUk5T X0JPUlJPV0VEX1JFRjsKIFB5T2JqZWN0ICpvYmpmcHlfZ2V0X3ByaW50ZXJz IChQeU9iamVjdCAqLCB2b2lkICopOwogUHlPYmplY3QgKm9iamZweV9nZXRf ZnJhbWVfZmlsdGVycyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKK1B5T2JqZWN0 ICpvYmpmcHlfZ2V0X2ZyYW1lX3NuaWZmZXJzIChQeU9iamVjdCAqLCB2b2lk ICopOwogUHlPYmplY3QgKm9iamZweV9nZXRfeG1ldGhvZHMgKFB5T2JqZWN0 ICosIHZvaWQgKik7CiBQeU9iamVjdCAqZ2RicHlfbG9va3VwX29iamZpbGUg KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3 KTsKIApAQCAtNDg2LDYgKzQ4OCw4IEBAIGludCBnZGJweV9pbml0aWFsaXpl X2FyY2ggKHZvaWQpCiAgIENQWUNIRUNLRVJfTkVHQVRJVkVfUkVTVUxUX1NF VFNfRVhDRVBUSU9OOwogaW50IGdkYnB5X2luaXRpYWxpemVfeG1ldGhvZHMg KHZvaWQpCiAgIENQWUNIRUNLRVJfTkVHQVRJVkVfUkVTVUxUX1NFVFNfRVhD RVBUSU9OOworaW50IGdkYnB5X2luaXRpYWxpemVfdW53aW5kICh2b2lkKQor ICBDUFlDSEVDS0VSX05FR0FUSVZFX1JFU1VMVF9TRVRTX0VYQ0VQVElPTjsK IAogc3RydWN0IGNsZWFudXAgKm1ha2VfY2xlYW51cF9weV9kZWNyZWYgKFB5 T2JqZWN0ICpweSk7CiBzdHJ1Y3QgY2xlYW51cCAqbWFrZV9jbGVhbnVwX3B5 X3hkZWNyZWYgKFB5T2JqZWN0ICpweSk7CmRpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL3B5dGhvbi5jIGIvZ2RiL3B5dGhvbi9weXRob24uYwppbmRleCBiMWQ4 MjgzLi4xMmU0ZDU2IDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5j CisrKyBiL2dkYi9weXRob24vcHl0aG9uLmMKQEAgLTE3NjIsNyArMTc2Miw4 IEBAIG1lc3NhZ2UgPT0gYW4gZXJyb3IgbWVzc2FnZSB3aXRob3V0IGEgc3Rh Y2sgd2lsbCBiZSBwcmludGVkLiIpLAogICAgICAgfHwgZ2RicHlfaW5pdGlh bGl6ZV9uZXdfb2JqZmlsZV9ldmVudCAoKSAgPCAwCiAgICAgICB8fCBnZGJw eV9pbml0aWFsaXplX2NsZWFyX29iamZpbGVzX2V2ZW50ICgpICA8IDAKICAg ICAgIHx8IGdkYnB5X2luaXRpYWxpemVfYXJjaCAoKSA8IDAKLSAgICAgIHx8 IGdkYnB5X2luaXRpYWxpemVfeG1ldGhvZHMgKCkgPCAwKQorICAgICAgfHwg Z2RicHlfaW5pdGlhbGl6ZV94bWV0aG9kcyAoKSA8IDAKKyAgICAgIHx8IGdk YnB5X2luaXRpYWxpemVfdW53aW5kICgpIDwgMCkKICAgICBnb3RvIGZhaWw7 CiAKICAgZ2RicHlfdG9fc3RyaW5nX2NzdCA9IFB5U3RyaW5nX0Zyb21TdHJp bmcgKCJ0b19zdHJpbmciKTsKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS11bndpbmQuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS11bndpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5iYjI2N2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC5jCkBAIC0wLDAgKzEsNzAgQEAK Ky8qIFRoaXMgdGVzdCBwcm9ncmFtIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05V IGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAxMS0yMDE0IEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAqLworCisvKiBUaGlzIGlzIHRoZSB0ZXN0IHByb2dyYW0gbG9hZGVk IGludG8gR0RCIGJ5IHRoZSBweS11bndpbmQgdGVzdC4gICovCisKKyNpbmNs dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg PHN0ZGxpYi5oPgorCitzdGF0aWMgdm9pZCAqCitzd2FwX3ZhbHVlICh2b2lk ICoqbG9jYXRpb24sIHZvaWQgKm5ld192YWx1ZSkKK3sKKyAgdm9pZCAqb2xk X3ZhbHVlID0gKmxvY2F0aW9uOworICAqbG9jYXRpb24gPSBuZXdfdmFsdWU7 CisgIHJldHVybiBvbGRfdmFsdWU7Cit9CisKKyNkZWZpbmUgTVlfRlJBTUUg KF9fYnVpbHRpbl9mcmFtZV9hZGRyZXNzICgwKSkKKworc3RhdGljIHZvaWQK K2JyZWFrX2JhY2t0cmFjZSAoKQoreworICAvKiBTYXZlIG91dGVyIGZyYW1l IGFkZHJlc3MsIHRoZW4gY29ycnVwdCB0aGUgdW53aW5kIGNoYWluIGJ5Cisg ICAgIHNldHRpbmcgdGhlIG91dGVyIGZyYW1lIGFkZHJlc3MgaW4gaXQgdG8g c2VsZi4gIFRoaXMgaXMKKyAgICAgQUJJLXNwZWNpZmljOiB0aGUgZmlyc3Qg d29yZCBvZiB0aGUgZnJhbWUgY29udGFpbnMgcHJldmlvdXMgZnJhbWUKKyAg ICAgYWRkcmVzcyBpbiBhbWQ2NC4gICovCisgIHZvaWQgKm91dGVyX2ZwID0g c3dhcF92YWx1ZSAoKHZvaWQgKiopTVlfRlJBTUUsIE1ZX0ZSQU1FKTsKKwor ICAvKiBWZXJpZnkgdGhlIGNvbXBpbGVyIGFsbG9jYXRlcyB0aGUgZmlyc3Qg bG9jYWwgdmFyaWFibGUgb25lIHdvcmQKKyAgICAgYmVsb3cgZnJhbWUuICBU aGlzIGlzIHdoZXJlIHRlc3QgSklUIHJlYWRlciBleHBlY3RzIHRvIGZpbmQg dGhlCisgICAgIGNvcnJlY3Qgb3V0ZXIgZnJhbWUgYWRkcmVzcy4gICovCisg IGlmICgmb3V0ZXJfZnAgKyAxICE9ICh2b2lkICoqKU1ZX0ZSQU1FKQorICAg IHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkZpcnN0IHZhcmlhYmxlIHNo b3VsZCBiZSBhbGxvY2F0ZWQgb25lIHdvcmQgYmVsb3cgIgorICAgICAgICAg ICAgICAgInRoZSBmcmFtZSwgZ290IHZhcmlhYmxlJ3MgYWRkcmVzcyAlcCwg ZnJhbWUgYXQgJXAgaW5zdGVhZFxuIiwKKyAgICAgICAgICAgICAgICZvdXRl cl9mcCwgTVlfRlJBTUUpOworICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAg LyogTm93IHJlc3RvcmUgaXQgc28gdGhhdCB3ZSBjYW4gcmV0dXJuLiAgVGhl IHRlc3Qgc2V0cyB0aGUKKyAgICAgYnJlYWtwb2ludCBqdXN0IGJlZm9yZSB0 aGlzIGhhcHBlbnMsIGFuZCBHREIgd2lsbCBub3QgYmUgYWJsZSB0bworICAg ICBzaG93IHRoZSBiYWNrdHJhY2Ugd2l0aG91dCBKSVQgcmVhZGVyLiAgKi8K KyAgc3dhcF92YWx1ZSAoTVlfRlJBTUUsIG91dGVyX2ZwKTsgLyogYnJlYWsg YmFja3RyYWNlLWJyb2tlbiAqLworfQorCitzdGF0aWMgdm9pZAorYnJlYWtf YmFja3RyYWNlX2NhbGxlciAoKQoreworICBicmVha19iYWNrdHJhY2UgKCk7 Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sK KyAgYnJlYWtfYmFja3RyYWNlX2NhbGxlciAoKTsKK30KZGlmZiAtLWdpdCBh L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQuZXhwIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC5leHAKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjNTI4NAotLS0gL2Rldi9u dWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQu ZXhwCkBAIC0wLDAgKzEsNTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5LTIw MTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisj IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMK KyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0 c3VpdGUuICBJdCB2ZXJpZmllcyB0aGF0IGZyYW1lCisjIHNuaWZmZXJzIGNh biBiZSBpbXBsZW1lbnRlZCBpbiBQeXRob24uCisKK2xvYWRfbGliIGdkYi1w eXRob24uZXhwCisKK3N0YW5kYXJkX3Rlc3RmaWxlCisKK2lmIHsgW3ByZXBh cmVfZm9yX3Rlc3RpbmcgJHt0ZXN0ZmlsZX0uZXhwICR7dGVzdGZpbGV9ICR7 c3JjZmlsZX1dIH0geworICAgIHJldHVybiAtMQorfQorCisjIFNraXAgYWxs IHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVuYWJsZWQuCitp ZiB7IFtza2lwX3B5dGhvbl90ZXN0c10gfSB7IGNvbnRpbnVlIH0KKworIyBU aGlzIHRlc3QgcnVucyBvbiBhIHNwZWNpZmljIHBsYXRmb3JtLgoraWYgeyAh IFtpc3RhcmdldCB4ODZfNjQtKl19IHsgY29udGludWUgfQorCisjIFRoZSBm b2xsb3dpbmcgdGVzdHMgcmVxdWlyZSBleGVjdXRpb24uCisKK2lmICFbcnVu dG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2FuJ3QgcnVuIHRvIG1haW4i CisgICAgcmV0dXJuIDAKK30KKworc2V0IHB5ZmlsZSBbZ2RiX3JlbW90ZV9k b3dubG9hZCBob3N0IFwKKwkJJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3Rm aWxlfS5weV0KKworZ2RiX2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1i ZXIgImJyZWFrIGJhY2t0cmFjZS1icm9rZW4iXQorCitnZGJfdGVzdCAic291 cmNlICR7cHlmaWxlfSIgIi4qUHl0aG9uIHNjcmlwdCBpbXBvcnRlZC4qIiBc CisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3JpcHRzIgorCitnZGJfY29u dGludWVfdG9fYnJlYWtwb2ludCAiYnJlYWsgYmFja3RyYWNlLWJyb2tlbiIK K2dkYl90ZXN0X3NlcXVlbmNlICJ3aGVyZSIgICJCYWQgYmFja3RyYWNlIiB7 CisgICAgIlxbXHJcblxdKyMwIC4qIGJyZWFrX2JhY2t0cmFjZSBcXChcXCkg YXQgIgorICAgICJcW1xyXG5cXSsjMSAuKiBicmVha19iYWNrdHJhY2VfY2Fs bGVyIFxcKFxcKSBhdCAiCisgICAgIlxbXHJcblxdKyMyIC4qIG1haW4gXFwo LipcXCkgYXQiCit9CisKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS11bndpbmQucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktdW53aW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjg5NzZlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktdW53aW5kLnB5CkBAIC0wLDAgKzEsNDkgQEAK KyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMK KyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisj IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2ltcG9ydCBnZGIK KworZGVmIF9yZWFkX3dvcmQoYWRkcmVzcyk6CisgICAgcmV0dXJuIGFkZHJl c3MuY2FzdChfY2hhcl9wdHJfcHRyX3QpLmRlcmVmZXJlbmNlKCkKKworCitk ZWYgc25pZmYgKHNuaWZmZXJfaW5mbyk6CisgICAgIlNuaWZmZXIgd3JpdHRl biBpbiBQeXRob24uIgorICAgIGJwID0gc25pZmZlcl9pbmZvLnJlYWRfcmVn aXN0ZXIoX2FtZDY0X3JicCkuY2FzdChfY2hhcl9wdHJfdCkKKyAgICB0cnk6 CisgICAgICAgIGlmIChfcmVhZF93b3JkKGJwKSA9PSBicCk6CisgICAgICAg ICAgICAjIEZvdW5kIHRoZSBmcmFtZSB0aGF0IHRoZSB0ZXN0IHByb2dyYW0g ZnVkZ2VkIGZvciB1cy4KKyAgICAgICAgICAgICMgVGhlIGNvcnJlY3QgQlAg Zm9yIHRoZSBvdXRlciBmcmFtZSBoYXMgYmVlbiBzYXZlZCBvbmUgd29yZAor ICAgICAgICAgICAgIyBhYm92ZSwgcHJldmlvdXMgSVAgYW5kIFNQIGFyZSBh dCB0aGUgZXhwZWN0ZWQgcGxhY2VzCisgICAgICAgICAgICBwcmV2aW91c19i cCA9IF9yZWFkX3dvcmQoYnAgLSA4KQorICAgICAgICAgICAgcHJldmlvdXNf aXAgPSBfcmVhZF93b3JkKGJwICsgOCkKKyAgICAgICAgICAgIHByZXZpb3Vz X3NwID0gYnAgKyAxNgorICAgICAgICAgICAgcmV0dXJuICgoKF9hbWQ2NF9y YnAsIHByZXZpb3VzX2JwKSwKKyAgICAgICAgICAgICAgICAgICAgIChfYW1k NjRfcmlwLCBwcmV2aW91c19pcCksCisgICAgICAgICAgICAgICAgICAgICAo X2FtZDY0X3JzcCwgcHJldmlvdXNfc3ApKSwKKyAgICAgICAgICAgICAgICAg ICAgKF9hbWQ2NF9yc3AsIF9hbWQ2NF9yaXApKQorCisgICAgZXhjZXB0IChn ZGIuZXJyb3IsIFJ1bnRpbWVFcnJvcik6CisgICAgICAgIHJldHVybiBOb25l CisKKworX2NoYXJfcHRyX3QgPSBnZGIubG9va3VwX3R5cGUoInVuc2lnbmVk IGNoYXIiKS5wb2ludGVyKCkKK19jaGFyX3B0cl9wdHJfdCA9IF9jaGFyX3B0 cl90LnBvaW50ZXIoKQorX3VpbnRfcHRyX3QgPSBnZGIubG9va3VwX3R5cGUo InVuc2lnbmVkIGxvbmcgbG9uZyIpCitfYW1kNjRfcmJwID0gNgorX2FtZDY0 X3JzcCA9IDcKK19hbWQ2NF9yaXAgPSAxNgorZ2RiLmZyYW1lX3NuaWZmZXJz PVtzbmlmZl0KK3ByaW50KCJQeXRob24gc2NyaXB0IGltcG9ydGVkIikK --001a1138e43ad72650050a4534db--