From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 121393 invoked by alias); 19 Sep 2018 16:52:06 -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 121382 invoked by uid 89); 19 Sep 2018 16:52:05 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=D*freebsd.org X-HELO: mail-wr1-f68.google.com Received: from mail-wr1-f68.google.com (HELO mail-wr1-f68.google.com) (209.85.221.68) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 19 Sep 2018 16:52:04 +0000 Received: by mail-wr1-f68.google.com with SMTP id a108-v6so6512218wrc.13 for ; Wed, 19 Sep 2018 09:52:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=TqJcWllTjOUXn++gRIiTV258/ANsaQSUC/JwFMN6Gas=; b=SMUns7O87oKpnQzXQJcrn76tsR1HziD+lRyDob+0AmAQxMgYGnSlORLlzlsTAOGD+4 nxgZ67DIL4wmjtzrDfTkzk6XZzupacbbg22l0HEpQ2XljNj0jSxUX0W6ath3nUi/eJyj QxD869iHLa8Sr7lvfk2j9c0V+R7OlZyIQftMy80+LEecubDJsH5IjAx1famDH7oJHBos Q/T/Zq9bNFVMqTGC3S+sg9TK5u4+3VRLBSFDKfQlrw24t/MY/PCajRbt2zL+tQVbG2Mi 2bnnfr9n+HomkjEi5Iirrw1/75JIRcCQbeg0qowMCXwSmYLqgsIW9iUskTl8roAHL9di 06dA== MIME-Version: 1.0 Received: by 2002:adf:8463:0:0:0:0:0 with HTTP; Wed, 19 Sep 2018 09:52:00 -0700 (PDT) In-Reply-To: <8b47dccf-0b34-9803-8417-42841dd924a7@FreeBSD.org> References: <8b47dccf-0b34-9803-8417-42841dd924a7@FreeBSD.org> From: Rajendra SY Date: Wed, 19 Sep 2018 16:52:00 -0000 Message-ID: Subject: Re: [PATCH] [PR 23660] On FreeBSD platform missing implementation of thread-db support To: John Baldwin Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary="000000000000ad390b05763c396c" X-SW-Source: 2018-09/txt/msg00700.txt.bz2 --000000000000ad390b05763c396c Content-Type: text/plain; charset="UTF-8" Content-length: 2031 John, Thanks for reviewing the patch. > We could instead use libthread_db for now, I tried to clean up the thread_db implementation (attached a diff file for reference) as you suggested. Please see if this needs further cleanup? All TLS test cases pass except below. The test case "gdb.threads/tls-core.exp" fails with this new implementation, I am yet to debug this. I need some help in fixing "gdb.threads/staticthreads.exp" test case where executable is "statically" linked. For statically linked executable linkmap is NULL. How do we get link map address? Thanks Rajendra On Mon, Sep 17, 2018 at 10:41 PM, John Baldwin wrote: > On 9/15/18 6:21 AM, Rajendra SY wrote: >> Problem: >> Missing libthread_db integration with GDB >> >> Cause: >> GDB missing libthread_db integration on FreeBSD target because of this >> GDB failed to access TLS variable values. >> >> Tests failed: >> - gdb.threads/tls-shared.exp >> - gdb.threads/tls-nodebug-pie.exp >> - gdb.threads/tls-so_extern.exp >> - gdb.threads/tls-var.exp >> - gdb.threads/tls.exp >> - gdb.threads/tls-core.exp > > I'll have to take some time to review this. I had hoped to avoid using > libthread_db at all on FreeBSD (it doesn't support AVX or 32-bit processes > on 64-bit kernels, etc.). For TLS I was planning on teaching fbsd-tdep.c > about the various special variables libthread_db knows from rtld and libthr > and using that along with having each FreeBSD architecture provide the > thread pointer register to implement TLS. > > We could instead use libthread_db for now, but if so I'd prefer to only use > libthread_db for TLS and not for anything else. This means that in theory > much of the proc-service API can be stubs that should never be called. > I would also be tempted to not have a separate thread-stratum target at all, > but just have the native target in fbsd-nat.c call into fbsd-thread-db as if > it was just a library for things like extra thread info (the pthread_t > pointer value) and TLS. > > -- > John Baldwin > > --000000000000ad390b05763c396c Content-Type: application/octet-stream; name="0001-New-TLS-implementation-for-FreeBSD.patch" Content-Disposition: attachment; filename="0001-New-TLS-implementation-for-FreeBSD.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jm9dh3ie0 Content-length: 36218 RnJvbSA3ZjZkNDMxZTQ4MjVkNTQ1YmRhOTVhYzkxNDlmZDRlOTUyZTk4ZjM4 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBSYWplbmRyYSBTIFkg PHN5cmFqZW5kcmFAc3lyYWplbmRyYS1tYnAuam5wci5uZXQ+CkRhdGU6IFdl ZCwgMTkgU2VwIDIwMTggMjI6MDE6MzkgKzA1MzAKU3ViamVjdDogW1BBVENI XSBOZXcgVExTIGltcGxlbWVudGF0aW9uIGZvciBGcmVlQlNECgpTaWduZWQt b2ZmLWJ5OiBSYWplbmRyYSBTIFkgPHN5cmFqZW5kcmFAc3lyYWplbmRyYS1t YnAuam5wci5uZXQ+Ci0tLQogZ2RiL2FtZDY0LWZic2QtbmF0LmMgfCAgNDMg KysrCiBnZGIvY29uZmlndXJlLm5hdCAgICB8ICAgMyArLQogZ2RiL2Zic2Qt bmF0LmMgICAgICAgfCAgIDggKwogZ2RiL2Zic2QtbmF0LmggICAgICAgfCAg IDggKwogZ2RiL2Zic2QtdGhyZWFkLWRiLmMgfCA3MzcgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBnZGIv aTM4Ni1ic2QtbmF0LmMgICB8ICAzMiArKysKIDYgZmlsZXMgY2hhbmdlZCwg ODMwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBnZGIvZmJzZC10aHJlYWQtZGIuYwoKZGlmZiAtLWdpdCBhL2dk Yi9hbWQ2NC1mYnNkLW5hdC5jIGIvZ2RiL2FtZDY0LWZic2QtbmF0LmMKaW5k ZXggN2M3Yzk2MzQ4NS4uYWUyYTAyZDc2MiAxMDA2NDQKLS0tIGEvZ2RiL2Ft ZDY0LWZic2QtbmF0LmMKKysrIGIvZ2RiL2FtZDY0LWZic2QtbmF0LmMKQEAg LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJhbWQ2NC1ic2QtbmF0LmgiCiAj aW5jbHVkZSAieDg2LW5hdC5oIgogI2luY2x1ZGUgIng4Ni14c3RhdGUuaCIK KyNpbmNsdWRlICJncmVnc2V0LmgiCiAMCiAKIGNsYXNzIGFtZDY0X2Zic2Rf bmF0X3RhcmdldCBmaW5hbApAQCAtMzA2LDMgKzMwNyw0NSBAQCBQbGVhc2Ug cmVwb3J0IHRoaXMgdG8gPGJ1Zy1nZGJAZ251Lm9yZz4uIiksCiAgIH0KICNl bmRpZgogfQorCisvKiBUcmFuc2ZlcmluZyB0aGUgcmVnaXN0ZXJzIGJldHdl ZW4gR0RCLCBpbmZlcmlvcnMgYW5kIGNvcmUgZmlsZXMuICAqLworCisvKiBG aWxsIEdEQidzIHJlZ2lzdGVyIGFycmF5IHdpdGggdGhlIGdlbmVyYWwtcHVy cG9zZSByZWdpc3RlciB2YWx1ZXMKKyAgIGluICpHUkVHU0VUUC4gICovCisK K3ZvaWQKK3N1cHBseV9ncmVnc2V0IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2Nh Y2hlLCBjb25zdCBnZGJfZ3JlZ3NldF90ICpncmVncykKK3sKKyAgYW1kNjRf c3VwcGx5X25hdGl2ZV9ncmVnc2V0IChyZWdjYWNoZSwgZ3JlZ3MsIC0xKTsK K30KKworLyogRmlsbCByZWdpc3RlciBSRUdOVU0gKGlmIGl0IGlzIGEgZ2Vu ZXJhbC1wdXJwb3NlIHJlZ2lzdGVyKSBpbgorICAgKkdSRUdTRVRQUyB3aXRo IHRoZSB2YWx1ZSBpbiBHREIncyByZWdpc3RlciBhcnJheS4gIElmIFJFR05V TSBpcyAtMSwKKyAgIGRvIHRoaXMgZm9yIGFsbCByZWdpc3RlcnMuICAqLwor Cit2b2lkCitmaWxsX2dyZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGUsIGdkYl9ncmVnc2V0X3QgKmdyZWdzLCBpbnQgcmVnbm8pCit7 CisgIGFtZDY0X2NvbGxlY3RfbmF0aXZlX2dyZWdzZXQgKHJlZ2NhY2hlLCBn cmVncywgcmVnbm8pOworfQorCisvKiBGaWxsIEdEQidzIHJlZ2lzdGVyIGFy cmF5IHdpdGggdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHZhbHVlcwor ICAgaW4gKkZQUkVHU0VUUC4gICovCisKK3ZvaWQKK3N1cHBseV9mcHJlZ3Nl dCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgY29uc3QgZ2RiX2ZwcmVn c2V0X3QgKmZwcmVncykKK3sKKyAgYW1kNjRfc3VwcGx5X2Z4c2F2ZSAocmVn Y2FjaGUsIC0xLCBmcHJlZ3MpOworfQorCisvKiBGaWxsIHJlZ2lzdGVyIFJF R05VTSAoaWYgaXQgaXMgYSBmbG9hdGluZy1wb2ludCByZWdpc3RlcikgaW4K KyAgICpGUFJFR1NFVFAgd2l0aCB0aGUgdmFsdWUgaW4gR0RCJ3MgcmVnaXN0 ZXIgYXJyYXkuICBJZiBSRUdOVU0gaXMgLTEsCisgICBkbyB0aGlzIGZvciBh bGwgcmVnaXN0ZXJzLiAgKi8KKwordm9pZAorZmlsbF9mcHJlZ3NldCAoY29u c3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgZ2RiX2ZwcmVnc2V0X3Qg KmZwcmVncywKKyAgICAgICAgICAgaW50IHJlZ25vKQoreworICBhbWQ2NF9j b2xsZWN0X2Z4c2F2ZSAocmVnY2FjaGUsIHJlZ25vLCBmcHJlZ3MpOworfQor CmRpZmYgLS1naXQgYS9nZGIvY29uZmlndXJlLm5hdCBiL2dkYi9jb25maWd1 cmUubmF0CmluZGV4IDc2MTEyNjZkODYuLjdiNTNhZTMxOWEgMTAwNjQ0Ci0t LSBhL2dkYi9jb25maWd1cmUubmF0CisrKyBiL2dkYi9jb25maWd1cmUubmF0 CkBAIC02Miw3ICs2Miw4IEBAIGNhc2UgJHtnZGJfaG9zdH0gaW4KIAlMT0FE TElCRVM9Jy1sZGwgJChSRFlOQU1JQyknCiAJOzsKICAgICBmYnNkKikKLQlO QVRERVBGSUxFUz0nZm9yay1jaGlsZC5vIGZvcmstaW5mZXJpb3IubyBpbmYt cHRyYWNlLm8gZmJzZC1uYXQubycKKwlOQVRERVBGSUxFUz0naW5mLXB0cmFj ZS5vIGZvcmstY2hpbGQubyBmb3JrLWluZmVyaW9yLm8gZmJzZC1uYXQubyBc CisJCQkJZmJzZC10aHJlYWQtZGIubycKIAlIQVZFX05BVElWRV9HQ09SRV9I T1NUPTEKIAlMT0FETElCRVM9Jy1sa3ZtJwogCTs7CmRpZmYgLS1naXQgYS9n ZGIvZmJzZC1uYXQuYyBiL2dkYi9mYnNkLW5hdC5jCmluZGV4IGEyNTUzMThk MTQuLjNlMjE1N2Y4MWQgMTAwNjQ0Ci0tLSBhL2dkYi9mYnNkLW5hdC5jCisr KyBiL2dkYi9mYnNkLW5hdC5jCkBAIC0xNjI1LDYgKzE2MjUsMTQgQEAgZmJz ZF9uYXRfdGFyZ2V0Ojpwb3N0X2F0dGFjaCAoaW50IHBpZCkKICAgZmJzZF9h ZGRfdGhyZWFkcyAocGlkKTsKIH0KIAorQ09SRV9BRERSCitmYnNkX25hdF90 YXJnZXQ6OmdldF90aHJlYWRfbG9jYWxfYWRkcmVzcyAocHRpZF90IHB0aWQs CisgICAgICAgICAgICAgICAgICBDT1JFX0FERFIgbGlua21hcCwKKyAgICAg ICAgICAgICAgICAgIENPUkVfQUREUiBvZmZzZXQpCit7CisgIHJldHVybiBm YnNkX3Rocl9kYl9nZXRfdGxzX2FkZHJlc3MocHRpZCwgbGlua21hcCwgb2Zm c2V0KTsKK30KKwogI2lmZGVmIFBMX0ZMQUdfRVhFQwogLyogSWYgdGhlIEZy ZWVCU0Qga2VybmVsIHN1cHBvcnRzIFBMX0ZMQUdfRVhFQywgdGhlbiB0cmFj ZWQgcHJvY2Vzc2VzCiAgICB3aWxsIGFsd2F5cyBzdG9wIGFmdGVyIGV4ZWMu ICAqLwpkaWZmIC0tZ2l0IGEvZ2RiL2Zic2QtbmF0LmggYi9nZGIvZmJzZC1u YXQuaAppbmRleCAzZTM0NjAwZTE1Li4xMjBlODliOGNlIDEwMDY0NAotLS0g YS9nZGIvZmJzZC1uYXQuaAorKysgYi9nZGIvZmJzZC1uYXQuaApAQCAtMzAs NiArMzAsMTAgQEAKICMgZW5kaWYKICNlbmRpZgogCisvKiBCZWxvdyBUTFMg ZnVuY3Rpb24gaXMgaW1wbG1lbnRlZCBpbiBmYnNkLXRocmVhZC1kYi5jICov CitleHRlcm4gQ09SRV9BRERSIGZic2RfdGhyX2RiX2dldF90bHNfYWRkcmVz cyAocHRpZF90IHB0aWQsIENPUkVfQUREUiBsaW5rbWFwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JFX0FE RFIgb2Zmc2V0KTsKKwogLyogQSBwcm90b3R5cGUgRnJlZUJTRCB0YXJnZXQu ICAqLwogCiBjbGFzcyBmYnNkX25hdF90YXJnZXQgOiBwdWJsaWMgaW5mX3B0 cmFjZV90YXJnZXQKQEAgLTYwLDYgKzY0LDEwIEBAIHB1YmxpYzoKIAogICB2 b2lkIHVwZGF0ZV90aHJlYWRfbGlzdCAoKSBvdmVycmlkZTsKIAorICBDT1JF X0FERFIgZ2V0X3RocmVhZF9sb2NhbF9hZGRyZXNzIChwdGlkX3QgcHRpZCwK KyAgICAgICAgICAgICAgICAgIENPUkVfQUREUiBsb2FkX21vZHVsZV9hZGRy LAorICAgICAgICAgICAgICAgICAgQ09SRV9BRERSIG9mZnNldCkgb3ZlcnJp ZGU7CisKICAgdGhyZWFkX2NvbnRyb2xfY2FwYWJpbGl0aWVzIGdldF90aHJl YWRfY29udHJvbF9jYXBhYmlsaXRpZXMgKCkgb3ZlcnJpZGUKICAgeyByZXR1 cm4gdGNfc2NoZWRsb2NrOyB9CiAKZGlmZiAtLWdpdCBhL2dkYi9mYnNkLXRo cmVhZC1kYi5jIGIvZ2RiL2Zic2QtdGhyZWFkLWRiLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZGNjOTQyZDM1MQotLS0gL2Rl di9udWxsCisrKyBiL2dkYi9mYnNkLXRocmVhZC1kYi5jCkBAIC0wLDAgKzEs NzM3IEBACisvKiBsaWJ0aHJlYWRfZGIgYXNzaXN0ZWQgZGVidWdnaW5nIHN1 cHBvcnQuCisKKyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDE4IEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFy dCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK KyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNp bmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRl ICJnZGJfcHJvY19zZXJ2aWNlLmgiCisjaW5jbHVkZSAibmF0L2dkYl90aHJl YWRfZGIuaCIKKyNpbmNsdWRlICJnZGJfdmVjcy5oIgorI2luY2x1ZGUgImJm ZC5oIgorI2luY2x1ZGUgImNvbW1hbmQuaCIKKyNpbmNsdWRlICJnZGJjbWQu aCIKKyNpbmNsdWRlICJnZGJ0aHJlYWQuaCIKKyNpbmNsdWRlICJpbmZlcmlv ci5oIgorI2luY2x1ZGUgImluZnJ1bi5oIgorI2luY2x1ZGUgInN5bWZpbGUu aCIKKyNpbmNsdWRlICJvYmpmaWxlcy5oIgorI2luY2x1ZGUgInRhcmdldC5o IgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisjaW5jbHVkZSAiZ3JlZ3NldC5o IgorI2luY2x1ZGUgInNvbGliLmgiCisjaW5jbHVkZSAic29saWItc3ZyNC5o IgorI2luY2x1ZGUgImdkYmNvcmUuaCIKKyNpbmNsdWRlICJvYnNlcnZhYmxl LmgiCisjaW5jbHVkZSAiZmJzZC1uYXQuaCIKKworI2luY2x1ZGUgPHN5cy90 eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKyNpbmNsdWRlIDxz aWduYWwuaD4KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKQorI2luY2x1ZGUgImkz ODctdGRlcC5oIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2kzODZfXykg JiYgZGVmaW5lZCAoUFRfR0VUWE1NUkVHUykKKyNkZWZpbmUgSTM4Nl9HRVRY TU1SRUdTCisjZW5kaWYKKworCitzdGF0aWMgY29uc3QgY2hhciAqbGlidGhy ZWFkX2RiX25hbWUgPSAibGlidGhyZWFkX2RiLnNvIjsKK3N0YXRpYyBjb25z dCBjaGFyICpsaWJ0aHJlYWRfZGJfcGF0aCA9ICIvdXNyL2xpYiI7CisKKy8q IElmIG5vbi16ZXJvLCBwcmludCBkZXRhaWxzIG9mIGxpYnRocmVhZF9kYiBw cm9jZXNzaW5nLiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGlidGhyZWFk X2RiX2RlYnVnOworCitzdHJ1Y3QgdGhyZWFkX2RiX2luZm8KK3sKKyAgc3Ry dWN0IHRocmVhZF9kYl9pbmZvICpuZXh0OworCisgIC8qIFByb2Nlc3MgaWQg dGhpcyBvYmplY3QgcmVmZXJzIHRvLiAgKi8KKyAgaW50IHBpZDsKKworICAv KiBIYW5kbGUgZnJvbSBkbG9wZW4gZm9yIGxpYnRocmVhZF9kYi5zby4gICov CisgIHZvaWQgKmhhbmRsZTsKKworICAvKiBBYnNvbHV0ZSBwYXRobmFtZSBm cm9tIGdkYl9yZWFscGF0aCB0byBkaXNrIGZpbGUgdXNlZCBmb3IgZGxvcGVu LWluZworICAgICBIQU5ETEUuICBJdCBtYXkgYmUgTlVMTCBmb3Igc3lzdGVt IGxpYnJhcnkuICAqLworICBjaGFyICpmaWxlbmFtZTsKKworICAvKiBTdHJ1 Y3R1cmUgdGhhdCBpZGVudGlmaWVzIHRoZSBjaGlsZCBwcm9jZXNzIGZvciB0 aGUKKyAgICAgPHByb2Nfc2VydmljZS5oPiBpbnRlcmZhY2UuICAqLworICBz dHJ1Y3QgcHNfcHJvY2hhbmRsZSBwcm9jX2hhbmRsZTsKKworICAvKiBDb25u ZWN0aW9uIHRvIHRoZSBsaWJ0aHJlYWRfZGIgbGlicmFyeS4gICovCisgIHRk X3RocmFnZW50X3QgKnRocmVhZF9hZ2VudDsKKworICAvKiBUcnVlIGlmIHdl IG5lZWQgdG8gYXBwbHkgdGhlIHdvcmthcm91bmQgZm9yIGdsaWJjL0JaNTk4 My4gIFdoZW4KKyAgICAgd2UgY2F0Y2ggYSBQVFJBQ0VfT19UUkFDRUZPUkss IGFuZCBnbyBxdWVyeSB0aGUgY2hpbGQncyB0aHJlYWQKKyAgICAgbGlzdCwg bnB0bF9kYiByZXR1cm5zIHRoZSBwYXJlbnQncyB0aHJlYWRzIGluIGFkZGl0 aW9uIHRvIHRoZSBuZXcKKyAgICAgKHNpbmdsZSkgY2hpbGQgdGhyZWFkLiAg SWYgdGhpcyBmbGFnIGlzIHNldCwgd2UgZG8gZXh0cmEgd29yayB0bworICAg ICBiZSBhYmxlIHRvIGlnbm9yZSBzdWNoIHN0YWxlIGVudHJpZXMuICAqLwor ICBpbnQgbmVlZF9zdGFsZV9wYXJlbnRfdGhyZWFkc19jaGVjazsKKworICAv KiBQb2ludGVycyB0byB0aGUgbGlidGhyZWFkX2RiIGZ1bmN0aW9ucy4gICov CisKKyAgdGRfaW5pdF9mdHlwZSAqdGRfaW5pdF9wOworICB0ZF90YV9uZXdf ZnR5cGUgKnRkX3RhX25ld19wOworICB0ZF90YV9tYXBfbHdwMnRocl9mdHlw ZSAqdGRfdGFfbWFwX2x3cDJ0aHJfcDsKKyAgdGRfdGFfdGhyX2l0ZXJfZnR5 cGUgKnRkX3RhX3Rocl9pdGVyX3A7CisgIHRkX3Rocl9nZXRfaW5mb19mdHlw ZSAqdGRfdGhyX2dldF9pbmZvX3A7CisgIHRkX3Rocl90bHNfZ2V0X2FkZHJf ZnR5cGUgKnRkX3Rocl90bHNfZ2V0X2FkZHJfcDsKK307CisKKy8qIExpc3Qg b2Yga25vd24gcHJvY2Vzc2VzIHVzaW5nIHRocmVhZF9kYiwgYW5kIHRoZSBy ZXF1aXJlZAorICAgYm9va2tlZXBpbmcuICAqLworc3RydWN0IHRocmVhZF9k Yl9pbmZvICp0aHJlYWRfZGJfbGlzdDsKKworLyogQWRkIHRoZSBjdXJyZW50 IGluZmVyaW9yIHRvIHRoZSBsaXN0IG9mIHByb2Nlc3NlcyB1c2luZyBsaWJw dGhyZWFkLgorICAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxs b2NhdGVkIG9iamVjdCB0aGF0IHdhcyBhZGRlZCB0bworICAgVEhSRUFEX0RC X0xJU1QuICBIQU5ETEUgaXMgdGhlIGhhbmRsZSByZXR1cm5lZCBieSBkbG9w ZW4naW5nCisgICBMSUJUSFJFQURfREJfU08uICAqLworCitzdGF0aWMgc3Ry dWN0IHRocmVhZF9kYl9pbmZvICoKK2FkZF90aHJlYWRfZGJfaW5mbyAodm9p ZCAqaGFuZGxlKQoreworICBzdHJ1Y3QgdGhyZWFkX2RiX2luZm8gKmluZm8g PSBYQ05FVyAoc3RydWN0IHRocmVhZF9kYl9pbmZvKTsKKworICBpbmZvLT5w aWQgPSBpbmZlcmlvcl9wdGlkLnBpZCAoKTsKKyAgaW5mby0+aGFuZGxlID0g aGFuZGxlOworCisgIC8qIFRoZSB3b3JrYXJvdW5kIHdvcmtzIGJ5IHJlYWRp bmcgZnJvbSAvcHJvYy9waWQvc3RhdHVzLCBzbyBpdCBpcworICAgICBkaXNh YmxlZCBmb3IgY29yZSBmaWxlcy4gICovCisgIGlmICh0YXJnZXRfaGFzX2V4 ZWN1dGlvbikKKyAgICBpbmZvLT5uZWVkX3N0YWxlX3BhcmVudF90aHJlYWRz X2NoZWNrID0gMTsKKworICBpbmZvLT5uZXh0ID0gdGhyZWFkX2RiX2xpc3Q7 CisgIHRocmVhZF9kYl9saXN0ID0gaW5mbzsKKworICByZXR1cm4gaW5mbzsK K30KKworLyogUmV0dXJuIHRoZSB0aHJlYWRfZGJfaW5mbyBvYmplY3QgcmVw cmVzZW50aW5nIHRoZSBib29ra2VlcGluZworICAgcmVsYXRlZCB0byBwcm9j ZXNzIFBJRCwgaWYgYW55OyBOVUxMIG90aGVyd2lzZS4gICovCisKK3N0YXRp YyBzdHJ1Y3QgdGhyZWFkX2RiX2luZm8gKgorZ2V0X3RocmVhZF9kYl9pbmZv IChpbnQgcGlkKQoreworICBzdHJ1Y3QgdGhyZWFkX2RiX2luZm8gKmluZm87 CisKKyAgZm9yIChpbmZvID0gdGhyZWFkX2RiX2xpc3Q7IGluZm87IGluZm8g PSBpbmZvLT5uZXh0KQorICAgIGlmIChwaWQgPT0gaW5mby0+cGlkKQorICAg ICAgcmV0dXJuIGluZm87CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFdo ZW4gUElEIGhhcyBleGl0ZWQgb3IgaGFzIGJlZW4gZGV0YWNoZWQsIHdlIG5v IGxvbmdlciB3YW50IHRvIGtlZXAKKyAgIHRyYWNrIG9mIGl0IGFzIHVzaW5n IGxpYnB0aHJlYWQuICBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gZGlzY2FyZAor ICAgdGhyZWFkX2RiIHJlbGF0ZWQgaW5mbyByZWxhdGVkIHRvIFBJRC4gIE5v dGUgdGhhdCB0aGlzIGNsb3NlcworICAgTElCVEhSRUFEX0RCX1NPJ3MgZGxv cGVuJ2VkIGhhbmRsZS4gICovCisKK3N0YXRpYyB2b2lkCitkZWxldGVfdGhy ZWFkX2RiX2luZm8gKGludCBwaWQpCit7CisgIHN0cnVjdCB0aHJlYWRfZGJf aW5mbyAqaW5mbywgKmluZm9fcHJldjsKKworICBpbmZvX3ByZXYgPSBOVUxM OworCisgIGZvciAoaW5mbyA9IHRocmVhZF9kYl9saXN0OyBpbmZvOyBpbmZv X3ByZXYgPSBpbmZvLCBpbmZvID0gaW5mby0+bmV4dCkKKyAgICBpZiAocGlk ID09IGluZm8tPnBpZCkKKyAgICAgIGJyZWFrOworCisgIGlmIChpbmZvID09 IE5VTEwpCisgICAgcmV0dXJuOworCisgIGlmIChpbmZvLT5oYW5kbGUgIT0g TlVMTCkKKyAgICBkbGNsb3NlIChpbmZvLT5oYW5kbGUpOworCisgIGlmIChp bmZvX3ByZXYpCisgICAgaW5mb19wcmV2LT5uZXh0ID0gaW5mby0+bmV4dDsK KyAgZWxzZQorICAgIHRocmVhZF9kYl9saXN0ID0gaW5mby0+bmV4dDsKKwor ICB4ZnJlZSAoaW5mbyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3Ro cmVhZF9kYl9lcnJfc3RyICh0ZF9lcnJfZSBlcnIpCit7CisgIHN0YXRpYyBj aGFyIGJ1Zls2NF07CisKKyAgc3dpdGNoIChlcnIpCisgICAgeworICAgIGNh c2UgVERfT0s6CisgICAgICByZXR1cm4gImdlbmVyaWMgJ2NhbGwgc3VjY2Vl ZGVkJyI7CisgICAgY2FzZSBURF9FUlI6CisgICAgICByZXR1cm4gImdlbmVy aWMgZXJyb3IiOworICAgIGNhc2UgVERfTk9USFI6CisgICAgICByZXR1cm4g Im5vIHRocmVhZCB0byBzYXRpc2Z5IHF1ZXJ5IjsKKyAgICBjYXNlIFREX05P U1Y6CisgICAgICByZXR1cm4gIm5vIHN5bmMgaGFuZGxlIHRvIHNhdGlzZnkg cXVlcnkiOworICAgIGNhc2UgVERfTk9MV1A6CisgICAgICByZXR1cm4gIm5v IExXUCB0byBzYXRpc2Z5IHF1ZXJ5IjsKKyAgICBjYXNlIFREX0JBRFBIOgor ICAgICAgcmV0dXJuICJpbnZhbGlkIHByb2Nlc3MgaGFuZGxlIjsKKyAgICBj YXNlIFREX0JBRFRIOgorICAgICAgcmV0dXJuICJpbnZhbGlkIHRocmVhZCBo YW5kbGUiOworICAgIGNhc2UgVERfQkFEU0g6CisgICAgICByZXR1cm4gImlu dmFsaWQgc3luY2hyb25pemF0aW9uIGhhbmRsZSI7CisgICAgY2FzZSBURF9C QURUQToKKyAgICAgIHJldHVybiAiaW52YWxpZCB0aHJlYWQgYWdlbnQiOwor ICAgIGNhc2UgVERfQkFES0VZOgorICAgICAgcmV0dXJuICJpbnZhbGlkIGtl eSI7CisgICAgY2FzZSBURF9OT01TRzoKKyAgICAgIHJldHVybiAibm8gZXZl bnQgbWVzc2FnZSBmb3IgZ2V0bXNnIjsKKyAgICBjYXNlIFREX05PRlBSRUdT OgorICAgICAgcmV0dXJuICJGUFUgcmVnaXN0ZXIgc2V0IG5vdCBhdmFpbGFi bGUiOworICAgIGNhc2UgVERfTk9MSUJUSFJFQUQ6CisgICAgICByZXR1cm4g ImFwcGxpY2F0aW9uIG5vdCBsaW5rZWQgd2l0aCBsaWJ0aHJlYWQiOworICAg IGNhc2UgVERfTk9FVkVOVDoKKyAgICAgIHJldHVybiAicmVxdWVzdGVkIGV2 ZW50IGlzIG5vdCBzdXBwb3J0ZWQiOworICAgIGNhc2UgVERfTk9DQVBBQjoK KyAgICAgIHJldHVybiAiY2FwYWJpbGl0eSBub3QgYXZhaWxhYmxlIjsKKyAg ICBjYXNlIFREX0RCRVJSOgorICAgICAgcmV0dXJuICJkZWJ1Z2dlciBzZXJ2 aWNlIGZhaWxlZCI7CisgICAgY2FzZSBURF9OT0FQTElDOgorICAgICAgcmV0 dXJuICJvcGVyYXRpb24gbm90IGFwcGxpY2FibGUgdG8iOworICAgIGNhc2Ug VERfTk9UU0Q6CisgICAgICByZXR1cm4gIm5vIHRocmVhZC1zcGVjaWZpYyBk YXRhIGZvciB0aGlzIHRocmVhZCI7CisgICAgY2FzZSBURF9NQUxMT0M6Cisg ICAgICByZXR1cm4gIm1hbGxvYyBmYWlsZWQiOworICAgIGNhc2UgVERfUEFS VElBTFJFRzoKKyAgICAgIHJldHVybiAib25seSBwYXJ0IG9mIHJlZ2lzdGVy IHNldCB3YXMgd3JpdHRlbi9yZWFkIjsKKyAgICBjYXNlIFREX05PWFJFR1M6 CisgICAgICByZXR1cm4gIlggcmVnaXN0ZXIgc2V0IG5vdCBhdmFpbGFibGUg Zm9yIHRoaXMgdGhyZWFkIjsKKyNpZmRlZiBUSFJFQURfREJfSEFTX1REX05P VEFMTE9DCisgICAgY2FzZSBURF9OT1RBTExPQzoKKyAgICAgIHJldHVybiAi dGhyZWFkIGhhcyBub3QgeWV0IGFsbG9jYXRlZCBUTFMgZm9yIGdpdmVuIG1v ZHVsZSI7CisjZW5kaWYKKyNpZmRlZiBUSFJFQURfREJfSEFTX1REX1ZFUlNJ T04KKyAgICBjYXNlIFREX1ZFUlNJT046CisgICAgICByZXR1cm4gInZlcnNp b25zIG9mIGxpYnB0aHJlYWQgYW5kIGxpYnRocmVhZF9kYiBkbyBub3QgbWF0 Y2giOworI2VuZGlmCisjaWZkZWYgVEhSRUFEX0RCX0hBU19URF9OT1RMUwor ICAgIGNhc2UgVERfTk9UTFM6CisgICAgICByZXR1cm4gInRoZXJlIGlzIG5v IFRMUyBzZWdtZW50IGluIHRoZSBnaXZlbiBtb2R1bGUiOworI2VuZGlmCisg ICAgZGVmYXVsdDoKKyAgICAgIHNucHJpbnRmIChidWYsIHNpemVvZiAoYnVm KSwgInVua25vd24gdGhyZWFkX2RiIGVycm9yICclZCciLCBlcnIpOworICAg ICAgcmV0dXJuIGJ1ZjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjb3Jl X2dldF9maXJzdF9sd3BfY2FsbGJhY2sgKGJmZCAqYWJmZCwgYXNlY3Rpb24g KmFzZWN0LCB2b2lkICpvYmopCit7CisgIGlmIChzdHJuY21wIChiZmRfc2Vj dGlvbl9uYW1lIChhYmZkLCBhc2VjdCksICIucmVnLyIsIDUpICE9IDApCisg ICAgcmV0dXJuOworCisgIGlmICgqKGx3cGlkX3QgKikgb2JqICE9IDApCisg ICAgcmV0dXJuOworCisgICoobHdwaWRfdCAqKSBvYmogPSBhdG9pIChiZmRf c2VjdGlvbl9uYW1lIChhYmZkLCBhc2VjdCkgKyA1KTsKK30KKworQ09SRV9B RERSCitmYnNkX3Rocl9kYl9nZXRfdGxzX2FkZHJlc3MgKHB0aWRfdCBwdGlk LCBDT1JFX0FERFIgbGlua21hcCwgQ09SRV9BRERSIG9mZnNldCkKK3sKKwl0 ZF90aHJoYW5kbGVfdCB0aDsKKyAgc3RydWN0IHRocmVhZF9pbmZvICp0aHJl YWRfaW5mbzsKKyAgbHdwaWRfdCBsd3BpZCA9IDA7CisKKyAgaWYgKCF0YXJn ZXRfaGFzX2V4ZWN1dGlvbikKKyAgeworICAgIGJmZF9tYXBfb3Zlcl9zZWN0 aW9ucyAoY29yZV9iZmQsIGNvcmVfZ2V0X2ZpcnN0X2x3cF9jYWxsYmFjaywg Jmx3cGlkKTsKKyAgICBwdGlkID0gcHRpZF90IChwdGlkLnBpZCgpLCBsd3Bp ZCwgMCk7CisgIH0KKworICAvKiBGaW5kIHRoZSBtYXRjaGluZyB0aHJlYWQu ICAqLworICB0aHJlYWRfaW5mbyA9IGZpbmRfdGhyZWFkX3B0aWQgKHB0aWQp OworICBpZiAodGhyZWFkX2luZm8gIT0gTlVMTCkKKyAgeworICAgICAgdGRf ZXJyX2UgZXJyOworICAgICAgcHNhZGRyX3QgYWRkcmVzczsKKyAgICAgIHRo cmVhZF9kYl9pbmZvICppbmZvID0gZ2V0X3RocmVhZF9kYl9pbmZvIChwdGlk LnBpZCAoKSk7CisKKyAgICAgIGlmIChsaW5rbWFwID09IDB4MCkKKyAgICAg IHsKKyAgICAgICAgLyogVGhpcyBjb2RlIHBhdGggaGFuZGxlcyB0aGUgY2Fz ZSBvZiAtc3RhdGljIC1scHRocmVhZCBleGVjdXRhYmxlczogKi8KKyAgICAg ICAgdGhyb3dfZXJyb3IgKFRMU19HRU5FUklDX0VSUk9SLAorICAgICAgICAg ICAgICAgICAgICAoKCJGYWlsZWQgdG8gaGFuZGxlIC1zdGF0aWMgLWxwdGhy ZWFkIGV4ZWN1dGFibGUiKSkpOworICAgICAgfQorCisgICAgICBlcnIgPSBp bmZvLT50ZF90YV9tYXBfbHdwMnRocl9wIChpbmZvLT50aHJlYWRfYWdlbnQs IHB0aWQubHdwICgpLCAmdGgpOworICAgICAgaWYgKGVyciAhPSBURF9PSykg eworICAgICAgICAvKiBDYW5ub3QgZmluZCB1c2VyLWxldmVsIHRocmVhZC4g ICovCisgICAgICAgIGVycm9yIChfKCJDYW5ub3QgZmluZCB1c2VyLWxldmVs IHRocmVhZCBmb3IgTFdQICVsZDogJXMiKSwKKyAgICAgICAgIHB0aWQubHdw ICgpLCB0aHJlYWRfZGJfZXJyX3N0ciAoZXJyKSk7CisgICAgICAgIHJldHVy biAweDA7CisgICAgICB9CisKKyAgICAgIC8qIGdsaWJjIGRvZXNuJ3QgcHJv dmlkZSB0aGUgbmVlZGVkIGludGVyZmFjZS4gICovCisgICAgICBpZiAoIWlu Zm8tPnRkX3Rocl90bHNfZ2V0X2FkZHJfcCkKKyAgICAgICAgdGhyb3dfZXJy b3IgKFRMU19OT19MSUJSQVJZX1NVUFBPUlRfRVJST1IsCisgICAgICAgIF8o Ik5vIFRMUyBsaWJyYXJ5IHN1cHBvcnQiKSk7CisKKyAgICAgIC8qIE5vdGUg dGhlIGNhc3QgdGhyb3VnaCB1aW50cHRyX3Q6IHRoaXMgaW50ZXJmYWNlIG9u bHkgd29ya3MgaWYKKyAgICAgICBhIHRhcmdldCBhZGRyZXNzIGZpdHMgaW4g YSBwc2FkZHJfdCwgd2hpY2ggaXMgYSBob3N0IHBvaW50ZXIuCisgICAgICAg U28gYSAzMi1iaXQgZGVidWdnZXIgY2FuIG5vdCBhY2Nlc3MgNjQtYml0IFRM UyB0aHJvdWdoIHRoaXMuICAqLworICAgICAgZXJyID0gaW5mby0+dGRfdGhy X3Rsc19nZXRfYWRkcl9wICgmdGgsCisgICAgICAgICAgICAgICAocHNhZGRy X3QpKHVpbnRwdHJfdCkgbGlua21hcCwKKyAgICAgICAgICAgICAgIG9mZnNl dCwgJmFkZHJlc3MpOworCisjaWZkZWYgVEhSRUFEX0RCX0hBU19URF9OT1RB TExPQworICAgICAgLyogVGhlIG1lbW9yeSBoYXNuJ3QgYmVlbiBhbGxvY2F0 ZWQsIHlldC4gICovCisgICAgICBpZiAoZXJyID09IFREX05PVEFMTE9DKQor ICAgICAgLyogTm93LCBpZiBsaWJ0aHJlYWRfZGIgcHJvdmlkZWQgdGhlIGlu aXRpYWxpemF0aW9uIGltYWdlJ3MKKyAgICAgICAgIGFkZHJlc3MsIHdlICpj b3VsZCogdHJ5IHRvIGJ1aWxkIGEgbm9uLWx2YWx1ZSB2YWx1ZSBmcm9tCisg ICAgICAgICB0aGUgaW5pdGlhbGl6YXRpb24gaW1hZ2UuICAqLworICAgICAg ICB0aHJvd19lcnJvciAoVExTX05PVF9BTExPQ0FURURfWUVUX0VSUk9SLAor ICAgICAgICAgICAgICAgICAgICAgXygiVExTIG5vdCBhbGxvY2F0ZWQgeWV0 IikpOworI2VuZGlmCisgICAgICAvKiBTb21ldGhpbmcgZWxzZSB3ZW50IHdy b25nLiAgKi8KKyAgICAgIGlmIChlcnIgIT0gVERfT0spCisgICAgICAgIHRo cm93X2Vycm9yIChUTFNfR0VORVJJQ19FUlJPUiwKKyAgICAgICAgICAgICAg ICAgICAoKCIlcyIpKSwgdGhyZWFkX2RiX2Vycl9zdHIgKGVycikpOworCisg ICAgICAvKiBEbyBwcm9wZXIgc2lnbiBleHRlbnNpb24gZm9yIHRoZSB0YXJn ZXQuICAqLworICAgICAgZ2RiX2Fzc2VydCAoZXhlY19iZmQpOworICAgICAg cmV0dXJuIChiZmRfZ2V0X3NpZ25fZXh0ZW5kX3ZtYSAoZXhlY19iZmQpID4g MAorICAgICAgICA/IChDT1JFX0FERFIpIChpbnRwdHJfdCkgYWRkcmVzcwor ICAgICAgICA6IChDT1JFX0FERFIpICh1aW50cHRyX3QpIGFkZHJlc3MpOwor ICB9IGVsc2UgeworICAJICB0aHJvd19lcnJvciAoVExTX0dFTkVSSUNfRVJS T1IsCisgICAgICAgICgoIkZhaWxlZCB0byBnZXQgdmFsaWQgdGhyZWFkX2lu Zm8gcG9pbnRlciIpKSk7CisgIH0KKyAgcmV0dXJuIDB4MDsKK30KKworc3Rh dGljIHZvaWQKK3Nob3dfbGlidGhyZWFkX2RiX2RlYnVnIChzdHJ1Y3QgdWlf ZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAorICAgICAgICAgc3RydWN0IGNt ZF9saXN0X2VsZW1lbnQgKmMsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBm cHJpbnRmX2ZpbHRlcmVkIChmaWxlLCBfKCJGcmVlQlNEIGxpYnRocmVhZC1k YiBkZWJ1ZyBpcyAlc1xuIiksIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQg KgordmVyYm9zZV9kbHN5bSAodm9pZCAqaGFuZGxlLCBjb25zdCBjaGFyICpu YW1lKQoreworICB2b2lkICpzeW0gPSBkbHN5bSAoaGFuZGxlLCBuYW1lKTsK KyAgaWYgKHN5bSA9PSBOVUxMKQorICAgIHdhcm5pbmcgKF8oIlRIUi1EQjog U3ltYm9sIFwiJXNcIiBub3QgZm91bmQgaW4gbGlidGhyZWFkX2RiOiAlcyIp LAorICAgICAgIG5hbWUsIGRsZXJyb3IgKCkpOworICByZXR1cm4gc3ltOwor fQorCisvKiBBdHRlbXB0IHRvIGluaXRpYWxpemUgZGxvcGVuKCllZCBsaWJ0 aHJlYWRfZGIsIGRlc2NyaWJlZCBieSBJTkZPLgorICAgUmV0dXJuIDEgb24g c3VjY2Vzcy4KKyAgIEZhaWx1cmUgY291bGQgaGFwcGVuIGlmIGxpYnRocmVh ZF9kYiBkb2VzIG5vdCBoYXZlIHN5bWJvbHMgd2UgZXhwZWN0LAorICAgb3Ig d2hlbiBpdCByZWZ1c2VzIHRvIHdvcmsgd2l0aCB0aGUgY3VycmVudCBpbmZl cmlvciAoZS5nLiBkdWUgdG8KKyAgIHZlcnNpb24gbWlzbWF0Y2ggYmV0d2Vl biBsaWJ0aHJlYWRfZGIgYW5kIGxpYnB0aHJlYWQpLiAgKi8KKworc3RhdGlj IGludAordHJ5X3RocmVhZF9kYl9sb2FkXzEgKHN0cnVjdCB0aHJlYWRfZGJf aW5mbyAqaW5mbykKK3sKKyAgdGRfZXJyX2UgZXJyOworCisjZGVmaW5lIFRE Ql9WRVJCT1NFX0RMU1lNKGluZm8sIGZ1bmMpICAgICBcCisgIGluZm8tPmZ1 bmMgIyMgX3AgPSAoZnVuYyAjIyBfZnR5cGUgKikgdmVyYm9zZV9kbHN5bSAo aW5mby0+aGFuZGxlLCAjZnVuYykKKworI2RlZmluZSBDSEsoYSkgICAgICAg XAorICBkbyAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAg ICAgXAorICAgIGlmICgoYSkgPT0gTlVMTCkgXAorICAgICAgcmV0dXJuIDA7 ICAgICAgXAorICB9IHdoaWxlICgwKQorCisgIC8qIEluaXRpYWxpemUgcG9p bnRlcnMgdG8gdGhlIGR5bmFtaWMgbGlicmFyeSBmdW5jdGlvbnMgd2Ugd2ls bCB1c2UuCisgICAgIEVzc2VudGlhbCBmdW5jdGlvbnMgZmlyc3QuICAqLwor ICBDSEsgKFREQl9WRVJCT1NFX0RMU1lNIChpbmZvLCB0ZF9pbml0KSk7CisK KyAgZXJyID0gaW5mby0+dGRfaW5pdF9wICgpOworICBpZiAoZXJyICE9IFRE X09LKQorICB7CisgICAgd2FybmluZyAoXygiQ2Fubm90IGluaXRpYWxpemUg bGlidGhyZWFkX2RiOiAlcyIpLAorICAgICAgdGhyZWFkX2RiX2Vycl9zdHIg KGVycikpOworICAgIHJldHVybiAwOworICB9CisKKyAgQ0hLIChUREJfVkVS Qk9TRV9ETFNZTSAoaW5mbywgdGRfdGFfbmV3KSk7CisKKyAgLyogSW5pdGlh bGl6ZSB0aGUgc3RydWN0dXJlIHRoYXQgaWRlbnRpZmllcyB0aGUgY2hpbGQg cHJvY2Vzcy4gICovCisgIGluZm8tPnByb2NfaGFuZGxlLnRocmVhZCA9IGZp bmRfdGhyZWFkX3B0aWQgKGluZmVyaW9yX3B0aWQpOworCisgIC8qIE5vdyBh dHRlbXB0IHRvIG9wZW4gYSBjb25uZWN0aW9uIHRvIHRoZSB0aHJlYWQgbGli cmFyeS4gICovCisgIGVyciA9IGluZm8tPnRkX3RhX25ld19wICgmaW5mby0+ cHJvY19oYW5kbGUsICZpbmZvLT50aHJlYWRfYWdlbnQpOworICBpZiAoZXJy ICE9IFREX09LKQorICB7CisgICAgaWYgKGxpYnRocmVhZF9kYl9kZWJ1ZykK KyAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgXygidGRf dGFfbmV3IGZhaWxlZDogJXNcbiIpLAorICAgICAgICB0aHJlYWRfZGJfZXJy X3N0ciAoZXJyKSk7CisgICAgZWxzZQorICAgICAgc3dpdGNoIChlcnIpCisg ICAgICB7CisgICAgICAgIGNhc2UgVERfTk9MSUJUSFJFQUQ6CisjaWZkZWYg VEhSRUFEX0RCX0hBU19URF9WRVJTSU9OCisgICAgICAgIGNhc2UgVERfVkVS U0lPTjoKKyNlbmRpZgorICAgICAgICAvKiBUaGUgZXJyb3JzIGFib3ZlIGFy ZSBub3QgdW5leHBlY3RlZCBhbmQgc2lsZW50bHkgaWdub3JlZDoKKyAgICAg ICAgICAgdGhleSBqdXN0IG1lYW4gd2UgaGF2ZW4ndCBmb3VuZCBjb3JyZWN0 IHZlcnNpb24gb2YKKyAgICAgICAgICAgbGlidGhyZWFkX2RiIHlldC4gICov CisgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg IHdhcm5pbmcgKF8oInRkX3RhX25ldyBmYWlsZWQ6ICVzIiksIHRocmVhZF9k Yl9lcnJfc3RyIChlcnIpKTsKKyAgICAgIH0KKyAgICByZXR1cm4gMDsKKyAg fQorCisgIC8qIFRoZXNlIGFyZSBlc3NlbnRpYWwuICAqLworICBDSEsgKFRE Ql9WRVJCT1NFX0RMU1lNIChpbmZvLCB0ZF90YV9tYXBfbHdwMnRocikpOwor ICBDSEsgKFREQl9WRVJCT1NFX0RMU1lNIChpbmZvLCB0ZF90YV90aHJfaXRl cikpOworICBDSEsgKFREQl9WRVJCT1NFX0RMU1lNIChpbmZvLCB0ZF90aHJf Z2V0X2luZm8pKTsKKyAgQ0hLIChUREJfVkVSQk9TRV9ETFNZTSAoaW5mbywg dGRfdGhyX3Rsc19nZXRfYWRkcikpOworCisgIHByaW50Zl91bmZpbHRlcmVk IChfKCJbVGhyZWFkIGRlYnVnZ2luZyB1c2luZyBsaWJ0aHJlYWRfZGIgZW5h YmxlZF1cbiIpKTsKKworICByZXR1cm4gMTsKK30KKworLyogQXR0ZW1wdCB0 byB1c2UgTElCUkFSWSBhcyBsaWJ0aHJlYWRfZGIuICBMSUJSQVJZIGNvdWxk IGJlIGFic29sdXRlLAorICAgcmVsYXRpdmUsIG9yIGp1c3QgTElCVEhSRUFE X0RCLiAgKi8KKworc3RhdGljIGludAordHJ5X3RocmVhZF9kYl9sb2FkIChj aGFyICpsaWJyYXJ5KQoreworICB2b2lkICpoYW5kbGU7CisgIHN0cnVjdCB0 aHJlYWRfZGJfaW5mbyAqaW5mbzsKKworICBpZiAobGlidGhyZWFkX2RiX2Rl YnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKyAg ICAgIF8oIlRyeWluZyBob3N0IGxpYnRocmVhZF9kYiBsaWJyYXJ5OiAlc1xu IiksCisgICAgICBsaWJyYXJ5KTsKKworICBpZiAoYWNjZXNzIChsaWJyYXJ5 LCBSX09LKSAhPSAwKQorICB7CisgICAgLyogRG8gbm90IHByaW50IHdhcm5p bmdzIGJ5IGZpbGVfaXNfYXV0b19sb2FkX3NhZmUgaWYgdGhlIGxpYnJhcnkg ZG9lcworICAgICBub3QgZXhpc3QgYXQgdGhpcyBwbGFjZS4gICovCisgIGlm IChsaWJ0aHJlYWRfZGJfZGVidWcpCisgICAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLCBfKCJvcGVuIGZhaWxlZDogJXMuXG4iKSwKKyAgICBz YWZlX3N0cmVycm9yIChlcnJubykpOworICByZXR1cm4gMDsKKyAgfQorICBo YW5kbGUgPSBkbG9wZW4gKGxpYnJhcnksIFJUTERfTk9XKTsKKyAgaWYgKGhh bmRsZSA9PSBOVUxMKQorICB7CisgICAgaWYgKGxpYnRocmVhZF9kYl9kZWJ1 ZykKKyAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgXygi ZGxvcGVuIGZhaWxlZDogJXMuXG4iKSwgZGxlcnJvciAoKSk7CisgICAgICAg IHJldHVybiAwOworICB9CisgIGluZm8gPSBhZGRfdGhyZWFkX2RiX2luZm8g KGhhbmRsZSk7CisgIGluZm8tPmZpbGVuYW1lID0gbGlicmFyeTsKKworICBp ZiAodHJ5X3RocmVhZF9kYl9sb2FkXzEgKGluZm8pKQorICAgIHJldHVybiAx OworCisgIC8qIFRoaXMgbGlicmFyeSAicmVmdXNlZCIgdG8gd29yayBvbiBj dXJyZW50IGluZmVyaW9yLiAgKi8KKyAgZGVsZXRlX3RocmVhZF9kYl9pbmZv IChpbmZlcmlvcl9wdGlkLnBpZCAoKSk7CisgIHJldHVybiAwOworfQorCisv KiBTZWFyY2ggbGlidGhyZWFkX2RiX3NlYXJjaF9wYXRoIGZvciBsaWJ0aHJl YWRfZGIgd2hpY2ggImFncmVlcyIKKyAgIHRvIHdvcmsgb24gY3VycmVudCBp bmZlcmlvci4KKyAgIFRoZSByZXN1bHQgaXMgdHJ1ZSBmb3Igc3VjY2Vzcy4g ICovCisKK3N0YXRpYyBpbnQKK3RocmVhZF9kYl9sb2FkX3NlYXJjaCAodm9p ZCkKK3sKKyAgaW50IHJjID0gMDsKKyAgc3RhdGljIGNoYXIgbGlicGF0aFtQ QVRIX01BWF07CisKKyAgc3ByaW50ZihsaWJwYXRoLCAiJXMvJXMiLCBsaWJ0 aHJlYWRfZGJfcGF0aCwgbGlidGhyZWFkX2RiX25hbWUpOworICBpZiAodHJ5 X3RocmVhZF9kYl9sb2FkIChsaWJwYXRoKSkKKyAgeworICAgIHJjID0gMTsK KyAgfQorICBpZiAobGlidGhyZWFkX2RiX2RlYnVnKQorICAgIGZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKyAgICAgIF8oIlRIUi1EQiAlczog cmV0dXJuaW5nICVkXG4iKSwgX19mdW5jX18sIHJjKTsKKyAgcmV0dXJuIHJj OworfQorCisvKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGluZmVyaW9yIGhh cyBhIGxpYnB0aHJlYWQuICAqLworCitzdGF0aWMgaW50CitoYXNfbGlicHRo cmVhZCAodm9pZCkKK3sKKyAgc3RydWN0IG9iamZpbGUgKm9iajsKKworICBB TExfT0JKRklMRVMgKG9iaikKKyAgICBpZiAobGlicHRocmVhZF9uYW1lX3Ag KG9iamZpbGVfbmFtZSAob2JqKSkpCisgICAgICByZXR1cm4gMTsKKworICBy ZXR1cm4gMDsKK30KKworLyogQXR0ZW1wdCB0byBsb2FkIGFuZCBpbml0aWFs aXplIGxpYnRocmVhZF9kYi4KKyAgIFJldHVybiAxIG9uIHN1Y2Nlc3MuICAq LworCitzdGF0aWMgaW50Cit0aHJlYWRfZGJfbG9hZCAodm9pZCkKK3sKKyAg c3RydWN0IHRocmVhZF9kYl9pbmZvICppbmZvOworCisgIGluZm8gPSBnZXRf dGhyZWFkX2RiX2luZm8gKGluZmVyaW9yX3B0aWQucGlkICgpKTsKKworICBp ZiAoaW5mbyAhPSBOVUxMKQorICAgIHJldHVybiAxOworCisgIC8qIERvbid0 IGF0dGVtcHQgdG8gdXNlIHRocmVhZF9kYiBvbiBleGVjdXRhYmxlcyBub3Qg cnVubmluZworICAgICB5ZXQuICAqLworICBpZiAoIXRhcmdldF9oYXNfcmVn aXN0ZXJzKQorICAgIHJldHVybiAwOworCisgIC8qIERvbid0IGF0dGVtcHQg dG8gdXNlIHRocmVhZF9kYiBmb3IgcmVtb3RlIHRhcmdldHMuICAqLworICBp ZiAoISh0YXJnZXRfY2FuX3J1biAoKSB8fCBjb3JlX2JmZCkpCisgICAgcmV0 dXJuIDA7CisKKyAgIGlmICh0aHJlYWRfZGJfbG9hZF9zZWFyY2ggKCkpCisg ICAgcmV0dXJuIDE7CisKKyAgLyogV2UgY291bGRuJ3QgZmluZCBhIGxpYnRo cmVhZF9kYi4KKyAgICAgSWYgdGhlIGluZmVyaW9yIGhhcyBhIGxpYnB0aHJl YWQgd2FybiB0aGUgdXNlci4gICovCisgIGlmIChoYXNfbGlicHRocmVhZCAo KSkKKyAgeworICAgIHdhcm5pbmcgKF8oIlRIUi1EQjogVW5hYmxlIHRvIGZp bmQgbGlidGhyZWFkX2RiIG1hdGNoaW5nIGluZmVyaW9yJ3MgdGhyZWFkIgor ICAgICAiIGxpYnJhcnksIHRocmVhZCBkZWJ1Z2dpbmcgd2lsbCBub3QgYmUg YXZhaWxhYmxlLiIpKTsKKyAgICAgIHJldHVybiAwOworICB9CisKKyAgLyog RWl0aGVyIHRoaXMgZXhlY3V0YWJsZSBpc24ndCB1c2luZyBsaWJwdGhyZWFk IGF0IGFsbCwgb3IgaXQgaXMKKyAgICAgc3RhdGljYWxseSBsaW5rZWQuICBT aW5jZSB3ZSBjYW4ndCBlYXNpbHkgZGlzdGluZ3Vpc2ggdGhlc2UgdHdvIGNh c2VzLAorICAgICBubyB3YXJuaW5nIGlzIGlzc3VlZC4gICovCisgIHJldHVy biAwOworfQorCisvKiBDaGVjayB3aGV0aGVyIHRocmVhZF9kYiBpcyB1c2Fi bGUuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuCisgICBhbiBpbmZl cmlvciBpcyBjcmVhdGVkIChvciBvdGhlcndpc2UgYWNxdWlyZWQsIGUuZy4g YXR0YWNoZWQgdG8pCisgICBhbmQgd2hlbiBuZXcgc2hhcmVkIGxpYnJhcmll cyBhcmUgbG9hZGVkIGludG8gYSBydW5uaW5nIHByb2Nlc3MuICAqLworCit2 b2lkCitjaGVja19mb3JfdGhyZWFkX2RiICh2b2lkKQoreworICAvKiBEbyBu b3RoaW5nIGlmIHdlIGNvdWxkbid0IGxvYWQgbGlidGhyZWFkX2RiLnNvICAq LworICBpZiAoIXRocmVhZF9kYl9sb2FkICgpKQorICAgIHJldHVybjsKK30K KworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIHRoZSBuZXdfb2Jq ZmlsZSBvYnNlcnZlci4gICovCisKK3N0YXRpYyB2b2lkCit0aHJlYWRfZGJf bmV3X29iamZpbGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQoreworICAv KiBUaGlzIG9ic2VydmVyIG11c3QgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIGlu ZmVyaW9yX3B0aWQgc2V0CisgICAgIGNvcnJlY3RseS4gICovCisKKyAgaWYg KG9iamZpbGUgIT0gTlVMTCkKKyAgICBjaGVja19mb3JfdGhyZWFkX2RiICgp OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB2aWEgdGhlIGlu ZmVyaW9yX2NyZWF0ZWQgb2JzZXJ2ZXIuCisgICBUaGlzIGhhbmRsZXMgdGhl IGNhc2Ugb2YgZGVidWdnaW5nIHN0YXRpY2FsbHkgbGlua2VkIGV4ZWN1dGFi bGVzLiAgKi8KKworc3RhdGljIHZvaWQKK3RocmVhZF9kYl9pbmZlcmlvcl9j cmVhdGVkIChzdHJ1Y3QgdGFyZ2V0X29wcyAqdGFyZ2V0LCBpbnQgZnJvbV90 dHkpCit7CisgIGNoZWNrX2Zvcl90aHJlYWRfZGIgKCk7Cit9CisKKy8qIFBy b3ZpZGUgYSBwcm90b3R5cGUgdG8gc2lsZW5jZSAtV21pc3NpbmctcHJvdG90 eXBlcy4gICovCitleHRlcm4gaW5pdGlhbGl6ZV9maWxlX2Z0eXBlIF9pbml0 aWFsaXplX3RocmVhZF9kYjsKKwordm9pZAorX2luaXRpYWxpemVfdGhyZWFk X2RiICh2b2lkKQoreworICBhZGRfc2V0c2hvd196dWludGVnZXJfY21kICgi bGlidGhyZWFkLWRiIiwgY2xhc3NfbWFpbnRlbmFuY2UsCisgICAgICAgICAg ICZsaWJ0aHJlYWRfZGJfZGVidWcsIF8oIlwKKyAgICAgICAgICAgU2V0IGxp YnRocmVhZC1kYiBkZWJ1Z2dpbmcuIiksIF8oIlwKKyAgICAgICAgICAgU2hv dyBsaWJ0aHJlYWQtZGIgZGVidWdnaW5nLiIpLCBfKCJcCisgICAgICAgICAg IFdoZW4gbm9uLXplcm8sIGxpYnRocmVhZC1kYiBkZWJ1Z2dpbmcgaXMgZW5h YmxlZC4iKSwKKyAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgc2hvd19s aWJ0aHJlYWRfZGJfZGVidWcsCisgICAgICAgICAgICZzZXRkZWJ1Z2xpc3Qs ICZzaG93ZGVidWdsaXN0KTsKKworICAvKiBBZGQgb3Vyc2VsdmVzIHRvIG9i amZpbGUgZXZlbnQgY2hhaW4uICAqLworICBnZGI6Om9ic2VydmVyczo6bmV3 X29iamZpbGUuYXR0YWNoICh0aHJlYWRfZGJfbmV3X29iamZpbGUpOworCisg IC8qIEFkZCBvdXJzZWx2ZXMgdG8gaW5mZXJpb3JfY3JlYXRlZCBldmVudCBj aGFpbi4KKyAgICAgVGhpcyBpcyBuZWVkZWQgdG8gaGFuZGxlIGRlYnVnZ2lu ZyBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyB3aGVyZQorICAgICB0aGUg bmV3X29iamZpbGUgb2JzZXJ2ZXIgd29uJ3QgZ2V0IGNhbGxlZCBmb3IgbGli cHRocmVhZC4gICovCisgIGdkYjo6b2JzZXJ2ZXJzOjppbmZlcmlvcl9jcmVh dGVkLmF0dGFjaCAodGhyZWFkX2RiX2luZmVyaW9yX2NyZWF0ZWQpOworfQor CisvKiBwcm9jIHNlcnZpY2UgZnVuY3Rpb25zICovCit2b2lkCitwc19wbG9n IChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOwor CisgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworICB2ZnByaW50Zl9maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywgZm10LCBhcmdzKTsKKyAgdmFfZW5kIChhcmdzKTsK K30KKworcHNfZXJyX2UKK3BzX3BnbG9iYWxfbG9va3VwIChzdHJ1Y3QgcHNf cHJvY2hhbmRsZSAqcGgsIGNvbnN0IGNoYXIgKm9iaiwKKyAgICAgICBjb25z dCBjaGFyICpuYW1lLCBwc2FkZHJfdCAqc3ltX2FkZHIpCit7CisgIHN0cnVj dCBib3VuZF9taW5pbWFsX3N5bWJvbCBtczsKKyAgQ09SRV9BRERSIGFkZHI7 CisKKyAgbXMgPSBsb29rdXBfYm91bmRfbWluaW1hbF9zeW1ib2wgKG5hbWUp OworICBpZiAobXMubWluc3ltID09IE5VTEwpIHsKKyAgICBpZiAobGlidGhy ZWFkX2RiX2RlYnVnKSB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdk Yl9zdGRsb2csIF8oIlRIUi1EQiAlczogU3ltIDogJXMgbm90IGZvdW5kXG4i KSwKKyAgICAgICAgICBfX2Z1bmNfXywgbmFtZSk7CisgICAgfQorICAgIHJl dHVybiBQU19OT1NZTTsKKyAgfQorCisgIGFkZHIgPSBCTVNZTUJPTF9WQUxV RV9BRERSRVNTIChtcyk7CisgIHN0b3JlX3R5cGVkX2FkZHJlc3MgKChnZGJf Ynl0ZSAqKSBzeW1fYWRkciwKKyAgICAgICAgICAgYnVpbHRpbl90eXBlICh0 YXJnZXRfZ2RiYXJjaCAoKSktPmJ1aWx0aW5fZGF0YV9wdHIsIGFkZHIpOwor ICByZXR1cm4gUFNfT0s7Cit9CisKK3BzX2Vycl9lCitwc19wcmVhZCAoc3Ry dWN0IHBzX3Byb2NoYW5kbGUgKnBoLCBwc2FkZHJfdCBhZGRyLCB2b2lkICpi dWYsIHNpemVfdCBsZW4pCit7CisgIGludCBlcnIgPSB0YXJnZXRfcmVhZF9t ZW1vcnkgKAorICAgIGV4dHJhY3RfdHlwZWRfYWRkcmVzcyAoKGNvbnN0IGdk Yl9ieXRlICopICZhZGRyLAorICAgICAgICAgYnVpbHRpbl90eXBlICh0YXJn ZXRfZ2RiYXJjaCAoKSktPmJ1aWx0aW5fZGF0YV9wdHIpLCAoZ2RiX2J5dGUg KilidWYsIGxlbik7CisgIHJldHVybiAoZXJyID09IDAgPyBQU19PSyA6IFBT X0VSUik7Cit9CisKK3BzX2Vycl9lCitwc19wd3JpdGUgKHN0cnVjdCBwc19w cm9jaGFuZGxlICpwaCwgcHNhZGRyX3QgYWRkciwgY29uc3Qgdm9pZCAqYnVm LAorICAgICBzaXplX3QgbGVuKQoreworICBpbnQgZXJyID0gdGFyZ2V0X3dy aXRlX21lbW9yeSAoCisgICAgZXh0cmFjdF90eXBlZF9hZGRyZXNzICgoY29u c3QgZ2RiX2J5dGUgKikgJmFkZHIsCisgICAgICBidWlsdGluX3R5cGUgKHRh cmdldF9nZGJhcmNoICgpKS0+YnVpbHRpbl9kYXRhX3B0ciksIChjb25zdCBn ZGJfYnl0ZSAqKSBidWYsIGxlbik7CisgIHJldHVybiAoZXJyID09IDAgPyBQ U19PSyA6IFBTX0VSUik7Cit9CisKK3BzX2Vycl9lCitwc19sZ2V0cmVncyAo c3RydWN0IHBzX3Byb2NoYW5kbGUgKnBoLCBsd3BpZF90IGx3cGlkLCBwcmdy ZWdzZXRfdCBncmVnc2V0KQoreworICBzY29wZWRfcmVzdG9yZSBzYXZlX2lu ZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9yZXN0b3JlICgmaW5mZXJpb3Jf cHRpZCk7CisKKyAgLyogVGFyZ2V0IG9wZXJhdGlvbiBpc24ndCBsd3AgYXdh cmU6IHJlcGxhY2UgcGlkIHdpdGggbHdwICovCisgIGluZmVyaW9yX3B0aWQg PSBwdGlkX3QgKGx3cGlkLCAwLCAwKTsKKyAgdGFyZ2V0X2ZldGNoX3JlZ2lz dGVycyAoZ2V0X2N1cnJlbnRfcmVnY2FjaGUoKSwgLTEpOworICBmaWxsX2dy ZWdzZXQgKGdldF9jdXJyZW50X3JlZ2NhY2hlKCksIGdyZWdzZXQsIC0xKTsK KyAgcmV0dXJuIFBTX09LOworfQorCitwc19lcnJfZQorcHNfbHNldHJlZ3Mg KHN0cnVjdCBwc19wcm9jaGFuZGxlICpwaCwgbHdwaWRfdCBsd3BpZCwKKyAg ICAgICBjb25zdCBwcmdyZWdzZXRfdCBncmVnc2V0KQoreworICBzY29wZWRf cmVzdG9yZSBzYXZlX2luZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9yZXN0 b3JlICgmaW5mZXJpb3JfcHRpZCk7CisgIGluZmVyaW9yX3B0aWQgPSBwdGlk X3QgKGluZmVyaW9yX3B0aWQucGlkICgpLCBsd3BpZCwgMCk7CisgIHN1cHBs eV9ncmVnc2V0IChnZXRfY3VycmVudF9yZWdjYWNoZSgpLCAoY29uc3QgZ2Ri X2dyZWdzZXRfdCAqKSBncmVnc2V0KTsKKyAgdGFyZ2V0X3N0b3JlX3JlZ2lz dGVycyAoZ2V0X2N1cnJlbnRfcmVnY2FjaGUoKSwgLTEpOworICByZXR1cm4g UFNfT0s7Cit9CisKK3BzX2Vycl9lCitwc19sZ2V0ZnByZWdzIChzdHJ1Y3Qg cHNfcHJvY2hhbmRsZSAqcGgsIGx3cGlkX3QgbHdwaWQsIHByZnByZWdzZXRf dCAqZnByZWdzZXQpCit7CisgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5mZXJp b3JfcHRpZCA9IG1ha2Vfc2NvcGVkX3Jlc3RvcmUgKCZpbmZlcmlvcl9wdGlk KTsKKyAgaW5mZXJpb3JfcHRpZCA9IHB0aWRfdCAoaW5mZXJpb3JfcHRpZC5w aWQgKCksIGx3cGlkLCAwKTsKKyAgdGFyZ2V0X2ZldGNoX3JlZ2lzdGVycyAo Z2V0X2N1cnJlbnRfcmVnY2FjaGUoKSwgLTEpOworICBmaWxsX2ZwcmVnc2V0 IChnZXRfY3VycmVudF9yZWdjYWNoZSgpLCBmcHJlZ3NldCwgLTEpOworICBy ZXR1cm4gUFNfT0s7Cit9CisKK3BzX2Vycl9lCitwc19sc2V0ZnByZWdzIChz dHJ1Y3QgcHNfcHJvY2hhbmRsZSAqcGgsIGx3cGlkX3QgbHdwaWQsCisgICAg ICAgICAgICAgICBjb25zdCBwcmZwcmVnc2V0X3QgKmZwcmVnc2V0KQorewor ICBzY29wZWRfcmVzdG9yZSBzYXZlX2luZmVyaW9yX3B0aWQgPSBtYWtlX3Nj b3BlZF9yZXN0b3JlICgmaW5mZXJpb3JfcHRpZCk7CisgIGluZmVyaW9yX3B0 aWQgPSBwdGlkX3QgKGluZmVyaW9yX3B0aWQucGlkICgpLCBsd3BpZCwgMCk7 CisgIHN1cHBseV9mcHJlZ3NldCAoZ2V0X2N1cnJlbnRfcmVnY2FjaGUoKSwg KGdkYl9mcHJlZ3NldF90ICopIGZwcmVnc2V0KTsKKyAgdGFyZ2V0X3N0b3Jl X3JlZ2lzdGVycyAoZ2V0X2N1cnJlbnRfcmVnY2FjaGUoKSwgLTEpOworICBy ZXR1cm4gUFNfT0s7Cit9CisKKyNpZmRlZiBJMzg2X0dFVFhNTVJFR1MKK3Bz X2Vycl9lCitwc19sZ2V0eG1tcmVncyAoc3RydWN0IHBzX3Byb2NoYW5kbGUg KnBoLCBsd3BpZF90IGx3cGlkLCBjaGFyICp4bW1yZWdzKQoreworICBzY29w ZWRfcmVzdG9yZSBzYXZlX2luZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9y ZXN0b3JlICgmaW5mZXJpb3JfcHRpZCk7CisgIGluZmVyaW9yX3B0aWQgPSBw dGlkX3QgKGluZmVyaW9yX3B0aWQucGlkICgpLCBsd3BpZCwgMCk7CisgIHRh cmdldF9mZXRjaF9yZWdpc3RlcnMgKGdldF9jdXJyZW50X3JlZ2NhY2hlICgp LCAtMSk7CisgIGkzODdfY29sbGVjdF9meHNhdmUgKGdldF9jdXJyZW50X3Jl Z2NhY2hlICgpLCAtMSwgeG1tcmVncyk7CisgIHJldHVybiBQU19PSzsKK30K KworcHNfZXJyX2UKK3BzX2xzZXR4bW1yZWdzIChzdHJ1Y3QgcHNfcHJvY2hh bmRsZSAqcGgsIGx3cGlkX3QgbHdwaWQsCisgICAgY29uc3QgY2hhciAqeG1t cmVncykKK3sKKyAgc2NvcGVkX3Jlc3RvcmUgc2F2ZV9pbmZlcmlvcl9wdGlk ID0gbWFrZV9zY29wZWRfcmVzdG9yZSAoJmluZmVyaW9yX3B0aWQpOworICBp bmZlcmlvcl9wdGlkID0gcHRpZF90IChpbmZlcmlvcl9wdGlkLnBpZCAoKSwg bHdwaWQsIDApOworICBpMzg3X3N1cHBseV9meHNhdmUgKGdldF9jdXJyZW50 X3JlZ2NhY2hlICgpLCAtMSwgeG1tcmVncyk7CisgIHRhcmdldF9zdG9yZV9y ZWdpc3RlcnMgKGdldF9jdXJyZW50X3JlZ2NhY2hlICgpLCAtMSk7CisgIHJl dHVybiBQU19PSzsKK30KKyNlbmRpZgorCitwc19lcnJfZQorcHNfbHN0b3Ag KHN0cnVjdCBwc19wcm9jaGFuZGxlICpwaCwgbHdwaWRfdCBsd3BpZCkKK3sK KyAgaWYgKHB0cmFjZSAoUFRfU1VTUEVORCwgbHdwaWQsIDAsIDApID09IC0x KQorICAgIHJldHVybiBQU19FUlI7CisgIHJldHVybiBQU19PSzsKK30KKwor cHNfZXJyX2UKK3BzX2xjb250aW51ZSAoc3RydWN0IHBzX3Byb2NoYW5kbGUg KnBoLCBsd3BpZF90IGx3cGlkKQoreworICBpZiAocHRyYWNlIChQVF9SRVNV TUUsIGx3cGlkLCAwLCAwKSA9PSAtMSkKKyAgICByZXR1cm4gUFNfRVJSOwor ICByZXR1cm4gUFNfT0s7Cit9CisKK3BzX2Vycl9lCitwc19saW5mbyAoc3Ry dWN0IHBzX3Byb2NoYW5kbGUgKnBoLCBsd3BpZF90IGx3cGlkLCB2b2lkICpp bmZvKQoreworICBpZiAodGFyZ2V0X2hhc19leGVjdXRpb24pCisgIHsKKyAg ICBpZiAocHRyYWNlIChQVF9MV1BJTkZPLCBsd3BpZCwgKGNhZGRyX3QpaW5m bywKKyAgICAgICAgICBzaXplb2YgKHN0cnVjdCBwdHJhY2VfbHdwaW5mbykp ID09IC0xKQorICAgICAgcmV0dXJuIFBTX0VSUjsKKyAgICByZXR1cm4gUFNf T0s7CisgIH0KKyAgZWxzZQorICB7CisgICAgbWVtc2V0IChpbmZvLCAwLCBz aXplb2YgKHN0cnVjdCBwdHJhY2VfbHdwaW5mbykpOworICAgIHJldHVybiBQ U19PSzsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ2RiL2kzODYtYnNkLW5hdC5j IGIvZ2RiL2kzODYtYnNkLW5hdC5jCmluZGV4IDA5ZWE5OWZkMTkuLmI5ZThl ZTNhNTMgMTAwNjQ0Ci0tLSBhL2dkYi9pMzg2LWJzZC1uYXQuYworKysgYi9n ZGIvaTM4Ni1ic2QtbmF0LmMKQEAgLTM0MCwzICszNDAsMzUgQEAgUGxlYXNl IHJlcG9ydCB0aGlzIHRvIDxidWctZ2RiQGdudS5vcmc+LiIpLAogCiAjZW5k aWYgLyogU0NfUkVHX09GRlNFVCAqLwogfQorCit2b2lkCitzdXBwbHlfZ3Jl Z3NldCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgY29uc3QgZ2RiX2dy ZWdzZXRfdCAqZ3JlZ3NldHApCit7CisgIGkzODZic2Rfc3VwcGx5X2dyZWdz ZXQgKHJlZ2NhY2hlLCAoY29uc3Qgdm9pZCAqKSBncmVnc2V0cCk7Cit9CisK Ky8qIEZpbGwgR0RCJ3MgcmVnaXN0ZXIgYXJyYXkgd2l0aCB0aGUgZmxvYXRp bmctcG9pbnQgcmVnaXN0ZXIgdmFsdWVzIGluCisgICAqRlBSRUdTRVRQLiAg Ki8KKwordm9pZAorc3VwcGx5X2ZwcmVnc2V0IChzdHJ1Y3QgcmVnY2FjaGUg KnJlZ2NhY2hlLCBjb25zdCBnZGJfZnByZWdzZXRfdCAqZnByZWdzZXRwKQor eworICBpMzg3X3N1cHBseV9mc2F2ZSAocmVnY2FjaGUsIC0xLCBmcHJlZ3Nl dHApOworfQorCit2b2lkCitmaWxsX2dyZWdzZXQgKGNvbnN0IHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGUsIGdkYl9ncmVnc2V0X3QgKmdyZWdzZXRwLCBp bnQgcmVnbm8pCit7CisgIGkzODZic2RfY29sbGVjdF9ncmVnc2V0IChyZWdj YWNoZSwgKHZvaWQgKikgZ3JlZ3NldHAsIHJlZ25vKTsKK30KKworLyogRmls bCByZWdpc3RlciBSRUdOTyAoaWYgaXQgaXMgYSBmbG9hdGluZy1wb2ludCBy ZWdpc3RlcikgaW4KKyAgICpGUFJFR1NFVFAgd2l0aCB0aGUgdmFsdWUgaW4g R0RCJ3MgcmVnaXN0ZXIgYXJyYXkuICBJZiBSRUdOTyBpcyAtMSwKKyAgIGRv IHRoaXMgZm9yIGFsbCByZWdpc3RlcnMuICAqLworCit2b2lkCitmaWxsX2Zw cmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBnZGJf ZnByZWdzZXRfdCAqZnByZWdzZXRwLCBpbnQgcmVnbm8pCit7CisgIGkzODdf Y29sbGVjdF9mc2F2ZSAocmVnY2FjaGUsIHJlZ25vLCBmcHJlZ3NldHApOwor fQorCi0tIAoyLjE0LjMgKEFwcGxlIEdpdC05OCkKCg== --000000000000ad390b05763c396c--