From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28935 invoked by alias); 8 Oct 2009 19:36:15 -0000 Received: (qmail 28893 invoked by uid 22791); 8 Oct 2009 19:35:58 -0000 X-SWARE-Spam-Status: No, hits=-0.3 required=5.0 tests=AWL,BAYES_00,HK_OBFDOM,HK_OBFDOMREQ,SARE_MSGID_LONG40,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 08 Oct 2009 19:35:49 +0000 Received: from spaceape11.eur.corp.google.com (spaceape11.eur.corp.google.com [172.28.16.145]) by smtp-out.google.com with ESMTP id n98JZjbb014690 for ; Thu, 8 Oct 2009 20:35:46 +0100 Received: from ywh28 (ywh28.prod.google.com [10.192.8.28]) by spaceape11.eur.corp.google.com with ESMTP id n98JZD6q024953 for ; Thu, 8 Oct 2009 12:35:43 -0700 Received: by ywh28 with SMTP id 28so8468525ywh.16 for ; Thu, 08 Oct 2009 12:35:42 -0700 (PDT) MIME-Version: 1.0 Received: by 10.101.81.15 with SMTP id i15mr1809062anl.131.1255030542492; Thu, 08 Oct 2009 12:35:42 -0700 (PDT) In-Reply-To: <200910081906.38504.pedro@codesourcery.com> References: <20090902163344.833F476568@localhost> <200910070044.24367.pedro@codesourcery.com> <8ac60eac0910061726n18f8fa9cnea4ddd25d55fe315@mail.gmail.com> <200910081906.38504.pedro@codesourcery.com> Date: Thu, 08 Oct 2009 19:36:00 -0000 Message-ID: <8ac60eac0910081235p6198f94chfdb59b033e47ed4f@mail.gmail.com> Subject: Re: [patch] Allow gdbserver to dynamically lookup libthread_db.so.1 From: Paul Pluzhnikov To: Pedro Alves Cc: gdb-patches@sourceware.org, dje@google.com Content-Type: multipart/mixed; boundary=001636ed6776aae56b0475719186 X-System-Of-Record: true X-IsSubscribed: yes 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 X-SW-Source: 2009-10/txt/msg00182.txt.bz2 --001636ed6776aae56b0475719186 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 2566 On Thu, Oct 8, 2009 at 11:06 AM, Pedro Alves wrote: > '* configure: Regenerate.' or so is missing. Please always > add that to the changelog even if not posting the regenerated > files. Ok. I believe attached patch fixes all your comments. > I notice that this return 0 here meant that > linux-low.c:linux_look_up_symbols still retry thread_db_init, > and that after your patch it won't. I'm inclined to think this > was a buglet and that following thread_db_init retries > wouldn't work anyway. Do you agree, or is this something > that we still need to keep addressing? Thanks for noticing this. Looking closer I discovered a buglet in thread_db_enable_reporting -- it shouldn't return TD_ERR (== 1) here: if (thread_db->td_ta_set_event_p == NULL || thread_db->td_ta_event_addr_p == NULL || thread_db->td_ta_event_getmsg_p == NULL) /* This libthread_db is missing required support. */ return TD_ERR; Fixed. I think it's theoretically possible for thread_db_enable_reporting to fail early in the inferior lifetime, and start working later; so I fixed this part and linux_look_up_symbols will now keep retrying. Re-tested on Linux/x86_64. Thanks, -- Paul Pluzhnikov doc/ 2009-10-08 Paul Pluzhnikov * gdb.texinfo (Server): Document libthread-db-search-path. gdbserver/ 2009-10-08 Paul Pluzhnikov * acinclude.m4: (SRV_CHECK_THREAD_DB, SRV_CHECK_TLS_GET_ADDR): Remove. * configure.ac: Adjust. * linux-low.h (struct process_info_private): Move members to struct thread_db. (thread_db_free, thread_db_handle_monitor_command): New prototype. * linux-low.c (linux_remove_process): Adjust. (linux_wait_for_event_1, linux_look_up_symbols): Likewise. * server.c (handle_query): Move code ... (handle_monitor_command): ... here. New function. * target.h (struct target_ops): New member. * thread-db.c (struct thread_db): New. (libthread_db_search_path): New variable. (thread_db_create_event, thread_db_enable_reporting) (find_one_thread, maybe_attach_thread, find_new_threads_callback) (thread_db_find_new_threads, (thread_db_get_tls_address): Adjust. (try_thread_db_load_1, dladdr_to_soname): New functions. (try_thread_db_load, thread_db_load_search): New functions. (thread_db_init): Search for libthread_db. (thread_db_free): New function. (thread_db_handle_monitor_command): Likewise. * config.in: Regenerate. * configure: Regenerate. --001636ed6776aae56b0475719186 Content-Type: text/plain; charset=US-ASCII; name="gdb-gdbserver-threaddb-search-20091008.txt" Content-Disposition: attachment; filename="gdb-gdbserver-threaddb-search-20091008.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g0jwqdwa0 Content-length: 46116 SW5kZXg6IGRvYy9nZGIudGV4aW5mbwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2RvYy9nZGIudGV4aW5mbyx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MzEKZGlmZiAtdSAtcCAtdSAtcjEu NjMxIGdkYi50ZXhpbmZvCi0tLSBkb2MvZ2RiLnRleGluZm8JNiBPY3QgMjAw OSAxODowMjozNiAtMDAwMAkxLjYzMQorKysgZG9jL2dkYi50ZXhpbmZvCTgg T2N0IDIwMDkgMTk6MTQ6MjUgLTAwMDAKQEAgLTE0OTAzLDYgKzE0OTAzLDEz IEBAIERpc2FibGUgb3IgZW5hYmxlIGdlbmVyYWwgZGVidWdnaW5nIG1lc3MK IERpc2FibGUgb3IgZW5hYmxlIHNwZWNpZmljIGRlYnVnZ2luZyBtZXNzYWdl cyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbW90ZQogcHJvdG9jb2wgKEBweHJl ZntSZW1vdGUgUHJvdG9jb2x9KS4KIAorQGl0ZW0gbW9uaXRvciBzZXQgbGli dGhyZWFkLWRiLXNlYXJjaC1wYXRoIFtQQVRIXQorQGNpbmRleCBnZGJzZXJ2 ZXIsIHNlYXJjaCBwYXRoIGZvciBAY29kZXtsaWJ0aHJlYWRfZGJ9CitXaGVu IHRoaXMgY29tbWFuZCBpcyBpc3N1ZWQsIEB2YXJ7cGF0aH0gaXMgYSBjb2xv bi1zZXBhcmF0ZWQgbGlzdCBvZgorZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZv ciBAY29kZXtsaWJ0aHJlYWRfZGJ9IChAcHhyZWZ7VGhyZWFkcywsc2V0Cits aWJ0aHJlYWQtZGItc2VhcmNoLXBhdGh9KS4gIElmIHlvdSBvbWl0IEB2YXJ7 cGF0aH0sCitAc2FtcHtsaWJ0aHJlYWQtZGItc2VhcmNoLXBhdGh9IHdpbGwg YmUgcmVzZXQgdG8gYW4gZW1wdHkgbGlzdC4KKwogQGl0ZW0gbW9uaXRvciBl eGl0CiBUZWxsIGdkYnNlcnZlciB0byBleGl0IGltbWVkaWF0ZWx5LiAgVGhp cyBjb21tYW5kIHNob3VsZCBiZSBmb2xsb3dlZCBieQogQGNvZGV7ZGlzY29u bmVjdH0gdG8gY2xvc2UgdGhlIGRlYnVnZ2luZyBzZXNzaW9uLiAgQGNvZGV7 Z2Ric2VydmVyfSB3aWxsCkluZGV4OiBnZGJzZXJ2ZXIvYWNpbmNsdWRlLm00 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3Ny Yy9nZGIvZ2Ric2VydmVyL2FjaW5jbHVkZS5tNCx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS43CmRpZmYgLXUgLXAgLXUgLXIxLjcgYWNpbmNsdWRlLm00Ci0t LSBnZGJzZXJ2ZXIvYWNpbmNsdWRlLm00CTUgSnVuIDIwMDggMjI6MzY6NTcg LTAwMDAJMS43CisrKyBnZGJzZXJ2ZXIvYWNpbmNsdWRlLm00CTggT2N0IDIw MDkgMTk6MTQ6MjUgLTAwMDAKQEAgLTcsNjMgKzcsMyBAQCBzaW5jbHVkZSgu Li8uLi9jb25maWcvb3ZlcnJpZGUubTQpCiBkbmwgRm9yIEFDWF9QS0dWRVJT SU9OIGFuZCBBQ1hfQlVHVVJMLgogc2luY2x1ZGUoLi4vLi4vY29uZmlnL2Fj eC5tNCkKIAotQUNfREVGVU4oW1NSVl9DSEVDS19USFJFQURfREJdLAotW0FD X0NBQ0hFX0NIRUNLKFtmb3IgbGlidGhyZWFkX2RiXSxbc3J2X2N2X3RocmVh ZF9kYl0sCi0gW29sZF9MSUJTPSIkTElCUyIKLSAgTElCUz0iJExJQlMgLWx0 aHJlYWRfZGIiCi0gIEFDX1RSWV9MSU5LKAotICBbdm9pZCBwc19wZ2xvYmFs X2xvb2t1cCgpIHt9Ci0gICB2b2lkIHBzX3BkcmVhZCgpIHt9Ci0gICB2b2lk IHBzX3Bkd3JpdGUoKSB7fQotICAgdm9pZCBwc19sZ2V0cmVncygpIHt9Ci0g ICB2b2lkIHBzX2xzZXRyZWdzKCkge30KLSAgIHZvaWQgcHNfbGdldGZwcmVn cygpIHt9Ci0gICB2b2lkIHBzX2xzZXRmcHJlZ3MoKSB7fQotICAgdm9pZCBw c19nZXRfdGhyZWFkX2FyZWEoKSB7fQotICAgdm9pZCBwc19nZXRwaWQoKSB7 fV0sCi0gIFt0ZF90YV9uZXcoKTtdLAotICBbc3J2X2N2X3RocmVhZF9kYj0i LWx0aHJlYWRfZGIiXSwKLSAgW3Nydl9jdl90aHJlYWRfZGI9bm8KLQotIGlm IHRlc3QgIiRwcmVmaXgiID0gIi91c3IiIHx8IHRlc3QgIiRwcmVmaXgiID0g Ik5PTkUiOyB0aGVuCi0gIHRocmVhZF9kYj0iL2xpYi9saWJ0aHJlYWRfZGIu c28uMSIKLSBlbHNlCi0gIHRocmVhZF9kYj0nJHByZWZpeC9saWIvbGlidGhy ZWFkX2RiLnNvLjEnCi0gZmkKLSBMSUJTPSIkb2xkX0xJQlMgYGV2YWwgZWNo byAiJHRocmVhZF9kYiJgIgotIEFDX1RSWV9MSU5LKAotICBbdm9pZCBwc19w Z2xvYmFsX2xvb2t1cCgpIHt9Ci0gICB2b2lkIHBzX3BkcmVhZCgpIHt9Ci0g ICB2b2lkIHBzX3Bkd3JpdGUoKSB7fQotICAgdm9pZCBwc19sZ2V0cmVncygp IHt9Ci0gICB2b2lkIHBzX2xzZXRyZWdzKCkge30KLSAgIHZvaWQgcHNfbGdl dGZwcmVncygpIHt9Ci0gICB2b2lkIHBzX2xzZXRmcHJlZ3MoKSB7fQotICAg dm9pZCBwc19nZXRfdGhyZWFkX2FyZWEoKSB7fQotICAgdm9pZCBwc19nZXRw aWQoKSB7fV0sCi0gIFt0ZF90YV9uZXcoKTtdLAotICBbc3J2X2N2X3RocmVh ZF9kYj0iJHRocmVhZF9kYiJdLAotICBbc3J2X2N2X3RocmVhZF9kYj1ub10p Ci0gIF0pCi0gTElCUz0iJG9sZF9MSUJTIgotXSldKQotCi1BQ19ERUZVTihb U1JWX0NIRUNLX1RMU19HRVRfQUREUl0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2Zv ciB0aHJlYWRfZGJfdGxzX2dldF9hZGRyXSxbc3J2X2N2X3Rsc19nZXRfYWRk cl0sCi0gW29sZF9MSUJTPSIkTElCUyIKLSAgTElCUz0iJExJQlMgJHNydl9j dl90aHJlYWRfZGIiCi0gIEFDX1RSWV9MSU5LKAotICAgW3ZvaWQgcHNfcGds b2JhbF9sb29rdXAoKSB7fQotICAgIHZvaWQgcHNfcGRyZWFkKCkge30KLSAg ICB2b2lkIHBzX3Bkd3JpdGUoKSB7fQotICAgIHZvaWQgcHNfbGdldHJlZ3Mo KSB7fQotICAgIHZvaWQgcHNfbHNldHJlZ3MoKSB7fQotICAgIHZvaWQgcHNf bGdldGZwcmVncygpIHt9Ci0gICAgdm9pZCBwc19sc2V0ZnByZWdzKCkge30K LSAgICB2b2lkIHBzX2dldF90aHJlYWRfYXJlYSgpIHt9Ci0gICAgdm9pZCBw c19nZXRwaWQoKSB7fV0sCi0gICBbdGRfdGhyX3Rsc19nZXRfYWRkcigpO10s Ci0gICBbc3J2X2N2X3Rsc19nZXRfYWRkcj15ZXNdLAotICAgW3Nydl9jdl90 bHNfZ2V0X2FkZHI9bm9dKQotICBMSUJTPSIkb2xkX0xJQlMiCi1dKV0pCklu ZGV4OiBnZGJzZXJ2ZXIvY29uZmlndXJlLmFjCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL2Nv bmZpZ3VyZS5hYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNgpkaWZmIC11 IC1wIC11IC1yMS4yNiBjb25maWd1cmUuYWMKLS0tIGdkYnNlcnZlci9jb25m aWd1cmUuYWMJNiBKdWwgMjAwOSAxODozMToxOSAtMDAwMAkxLjI2CisrKyBn ZGJzZXJ2ZXIvY29uZmlndXJlLmFjCTggT2N0IDIwMDkgMTk6MTQ6MjUgLTAw MDAKQEAgLTE0MCwyMyArMTQwLDEzIEBAIHNydl9saWJzPQogVVNFX1RIUkVB RF9EQj0KIAogaWYgdGVzdCAiJHNydl9saW51eF90aHJlYWRfZGIiID0gInll cyI7IHRoZW4KLSAgU1JWX0NIRUNLX1RIUkVBRF9EQgotICBpZiB0ZXN0ICIk c3J2X2N2X3RocmVhZF9kYiIgPSBubzsgdGhlbgotICAgIEFDX1dBUk4oW0Nv dWxkIG5vdCBmaW5kIGxpYnRocmVhZF9kYi5dKQotICAgIEFDX1dBUk4oW0Rp c2FibGluZyB0aHJlYWQgc3VwcG9ydCBpbiBnZGJzZXJ2ZXIuXSkKLSAgICBz cnZfbGludXhfdGhyZWFkX2RiPW5vCi0gIGVsc2UKLSAgICBzcnZfbGlicz0i JHNydl9jdl90aHJlYWRfZGIiCi0gICAgU1JWX0NIRUNLX1RMU19HRVRfQURE UgotICBmaQorICBzcnZfbGlicz0iLWxkbCIKICAgb2xkX0xERkxBR1M9IiRM REZMQUdTIgogICBMREZMQUdTPSIkTERGTEFHUyAtcmR5bmFtaWMiCiAgIEFD X1RSWV9MSU5LKFtdLCBbXSwgW1JEWU5BTUlDPS1yZHluYW1pY10sIFtSRFlO QU1JQz1dKQogICBBQ19TVUJTVChSRFlOQU1JQykKICAgTERGTEFHUz0iJG9s ZF9MREZMQUdTIgotZmkKIAotaWYgdGVzdCAiJHNydl9saW51eF90aHJlYWRf ZGIiID0gInllcyI7IHRoZW4KICAgc3J2X3RocmVhZF9kZXBmaWxlcz0idGhy ZWFkLWRiLm8gcHJvYy1zZXJ2aWNlLm8iCiAgIFVTRV9USFJFQURfREI9Ii1E VVNFX1RIUkVBRF9EQiIKICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBURF9WRVJT SU9OXSwgZ2Ric3J2X2N2X2hhdmVfdGRfdmVyc2lvbiwKQEAgLTE2NiwxMCAr MTU2LDYgQEAgaWYgdGVzdCAiJHNydl9saW51eF90aHJlYWRfZGIiID0gInll cyI7IAogICBpZiB0ZXN0ICRnZGJzcnZfY3ZfaGF2ZV90ZF92ZXJzaW9uID0g eWVzOyB0aGVuCiAgICAgQUNfREVGSU5FKEhBVkVfVERfVkVSU0lPTiwgMSwg W0RlZmluZSBpZiBURF9WRVJTSU9OIGlzIGF2YWlsYWJsZS5dKQogICBmaQot Ci0gIGlmIHRlc3QgIiRzcnZfY3ZfdGxzX2dldF9hZGRyIiA9IHllczsgdGhl bgotICAgIEFDX0RFRklORShIQVZFX1REX1RIUl9UTFNfR0VUX0FERFIsIDEs IFtEZWZpbmUgaWYgdGRfdGhyX3Rsc19nZXRfYWRkciBpcyBhdmFpbGFibGUu XSkKLSAgZmkKIGZpCiAKIGlmIHRlc3QgIiRzcnZfeG1sZmlsZXMiICE9ICIi OyB0aGVuCkluZGV4OiBnZGJzZXJ2ZXIvbGludXgtbG93LmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJz ZXJ2ZXIvbGludXgtbG93LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEy CmRpZmYgLXUgLXAgLXUgLXIxLjExMiBsaW51eC1sb3cuYwotLS0gZ2Ric2Vy dmVyL2xpbnV4LWxvdy5jCTMxIEp1bCAyMDA5IDE1OjI1OjIyIC0wMDAwCTEu MTEyCisrKyBnZGJzZXJ2ZXIvbGludXgtbG93LmMJOCBPY3QgMjAwOSAxOTox NDoyNSAtMDAwMApAQCAtMjYxLDggKzI2MSwxNCBAQCBsaW51eF9hZGRfcHJv Y2VzcyAoaW50IHBpZCwgaW50IGF0dGFjaGVkCiBzdGF0aWMgdm9pZAogbGlu dXhfcmVtb3ZlX3Byb2Nlc3MgKHN0cnVjdCBwcm9jZXNzX2luZm8gKnByb2Nl c3MpCiB7Ci0gIGZyZWUgKHByb2Nlc3MtPnByaXZhdGUtPmFyY2hfcHJpdmF0 ZSk7Ci0gIGZyZWUgKHByb2Nlc3MtPnByaXZhdGUpOworICBzdHJ1Y3QgcHJv Y2Vzc19pbmZvX3ByaXZhdGUgKnByaXYgPSBwcm9jZXNzLT5wcml2YXRlOwor CisjaWZkZWYgVVNFX1RIUkVBRF9EQgorICB0aHJlYWRfZGJfZnJlZSAocHJv Y2Vzcyk7CisjZW5kaWYKKworICBmcmVlIChwcml2LT5hcmNoX3ByaXZhdGUp OworICBmcmVlIChwcml2KTsKICAgcmVtb3ZlX3Byb2Nlc3MgKHByb2Nlc3Mp OwogfQogCkBAIC0xMTIyLDcgKzExMjgsNyBAQCBsaW51eF93YWl0X2Zvcl9l dmVudF8xIChwdGlkX3QgcHRpZCwgaW50CiAJICAmJiAhZXZlbnRfY2hpbGQt PnN0ZXBwaW5nCiAJICAmJiAoCiAjaWZkZWYgVVNFX1RIUkVBRF9EQgotCSAg ICAgIChjdXJyZW50X3Byb2Nlc3MgKCktPnByaXZhdGUtPnRocmVhZF9kYl9h Y3RpdmUKKwkgICAgICAoY3VycmVudF9wcm9jZXNzICgpLT5wcml2YXRlLT50 aHJlYWRfZGIgIT0gTlVMTAogCSAgICAgICAmJiAoV1NUT1BTSUcgKCp3c3Rh dCkgPT0gX19TSUdSVE1JTgogCQkgICB8fCBXU1RPUFNJRyAoKndzdGF0KSA9 PSBfX1NJR1JUTUlOICsgMSkpCiAJICAgICAgfHwKQEAgLTI2NDIsMTEgKzI2 NDgsMTAgQEAgbGludXhfbG9va191cF9zeW1ib2xzICh2b2lkKQogI2lmZGVm IFVTRV9USFJFQURfREIKICAgc3RydWN0IHByb2Nlc3NfaW5mbyAqcHJvYyA9 IGN1cnJlbnRfcHJvY2VzcyAoKTsKIAotICBpZiAocHJvYy0+cHJpdmF0ZS0+ dGhyZWFkX2RiX2FjdGl2ZSkKKyAgaWYgKHByb2MtPnByaXZhdGUtPnRocmVh ZF9kYiAhPSBOVUxMKQogICAgIHJldHVybjsKIAotICBwcm9jLT5wcml2YXRl LT50aHJlYWRfZGJfYWN0aXZlCi0gICAgPSB0aHJlYWRfZGJfaW5pdCAoIWxp bnV4X3N1cHBvcnRzX3RyYWNlZm9ya19mbGFnKTsKKyAgdGhyZWFkX2RiX2lu aXQgKCFsaW51eF9zdXBwb3J0c190cmFjZWZvcmtfZmxhZyk7CiAjZW5kaWYK IH0KIApAQCAtMzE3MSw3ICszMTc2LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgdGFy Z2V0X29wcyBsaW51eF90YXJnZXRfb3AKICAgbGludXhfc3VwcG9ydHNfbm9u X3N0b3AsCiAgIGxpbnV4X2FzeW5jLAogICBsaW51eF9zdGFydF9ub25fc3Rv cCwKLSAgbGludXhfc3VwcG9ydHNfbXVsdGlfcHJvY2VzcworICBsaW51eF9z dXBwb3J0c19tdWx0aV9wcm9jZXNzLAorI2lmZGVmIFVTRV9USFJFQURfREIK KyAgdGhyZWFkX2RiX2hhbmRsZV9tb25pdG9yX2NvbW1hbmQKKyNlbHNlCisg IE5VTEwKKyNlbmRpZgogfTsKIAogc3RhdGljIHZvaWQKSW5kZXg6IGdkYnNl cnZlci9saW51eC1sb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci9saW51eC1sb3cuaCx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMgpkaWZmIC11IC1wIC11IC1yMS4z MiBsaW51eC1sb3cuaAotLS0gZ2Ric2VydmVyL2xpbnV4LWxvdy5oCTMwIEp1 biAyMDA5IDE2OjM1OjI1IC0wMDAwCTEuMzIKKysrIGdkYnNlcnZlci9saW51 eC1sb3cuaAk4IE9jdCAyMDA5IDE5OjE0OjI1IC0wMDAwCkBAIC00NywxOCAr NDcsMTIgQEAgc3RydWN0IHNpZ2luZm87CiAKIHN0cnVjdCBwcm9jZXNzX2lu Zm9fcHJpdmF0ZQogewotICAvKiBUcnVlIGlmIHRoaXMgcHJvY2VzcyBoYXMg bG9hZGVkIHRocmVhZF9kYiwgYW5kIGl0IGlzIGFjdGl2ZS4gICovCi0gIGlu dCB0aHJlYWRfZGJfYWN0aXZlOwotCi0gIC8qIFN0cnVjdHVyZSB0aGF0IGlk ZW50aWZpZXMgdGhlIGNoaWxkIHByb2Nlc3MgZm9yIHRoZQotICAgICA8cHJv Y19zZXJ2aWNlLmg+IGludGVyZmFjZS4gICovCi0gIHN0cnVjdCBwc19wcm9j aGFuZGxlIHByb2NfaGFuZGxlOwotCi0gIC8qIENvbm5lY3Rpb24gdG8gdGhl IGxpYnRocmVhZF9kYiBsaWJyYXJ5LiAgKi8KLSAgdGRfdGhyYWdlbnRfdCAq dGhyZWFkX2FnZW50OwotCiAgIC8qIEFyY2gtc3BlY2lmaWMgYWRkaXRpb25z LiAgKi8KICAgc3RydWN0IGFyY2hfcHJvY2Vzc19pbmZvICphcmNoX3ByaXZh dGU7CisKKyAgLyogbGlidGhyZWFkX2RiLXNwZWNpZmljIGFkZGl0aW9ucy4g IE5vdCBOVUxMIGlmIHRoaXMgcHJvY2VzcyBoYXMgbG9hZGVkCisgICAgIHRo cmVhZF9kYiwgYW5kIGl0IGlzIGFjdGl2ZS4gICovCisgIHN0cnVjdCB0aHJl YWRfZGIgKnRocmVhZF9kYjsKIH07CiAKIHN0cnVjdCBsd3BfaW5mbzsKQEAg LTIwMyw5ICsxOTcsMTEgQEAgY2hhciAqbGludXhfY2hpbGRfcGlkX3RvX2V4 ZWNfZmlsZSAoaW50IAogaW50IGVsZl82NF9maWxlX3AgKGNvbnN0IGNoYXIg KmZpbGUpOwogCiB2b2lkIGxpbnV4X2F0dGFjaF9sd3AgKHVuc2lnbmVkIGxv bmcgcGlkKTsKK3N0cnVjdCBsd3BfaW5mbyAqZmluZF9sd3BfcGlkIChwdGlk X3QgcHRpZCk7CiAKKy8qIEZyb20gdGhyZWFkLWRiLmMgICovCiBpbnQgdGhy ZWFkX2RiX2luaXQgKGludCB1c2VfZXZlbnRzKTsKK3ZvaWQgdGhyZWFkX2Ri X2ZyZWUgKHN0cnVjdCBwcm9jZXNzX2luZm8gKik7CitpbnQgdGhyZWFkX2Ri X2hhbmRsZV9tb25pdG9yX2NvbW1hbmQgKGNoYXIgKik7CiBpbnQgdGhyZWFk X2RiX2dldF90bHNfYWRkcmVzcyAoc3RydWN0IHRocmVhZF9pbmZvICp0aHJl YWQsIENPUkVfQUREUiBvZmZzZXQsCiAJCQkgICAgICAgQ09SRV9BRERSIGxv YWRfbW9kdWxlLCBDT1JFX0FERFIgKmFkZHJlc3MpOwotCi1zdHJ1Y3QgbHdw X2luZm8gKmZpbmRfbHdwX3BpZCAocHRpZF90IHB0aWQpOwpJbmRleDogZ2Ri c2VydmVyL3NlcnZlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL3NlcnZlci5jLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjEwMgpkaWZmIC11IC1wIC11IC1yMS4xMDIg c2VydmVyLmMKLS0tIGdkYnNlcnZlci9zZXJ2ZXIuYwkzMCBKdW4gMjAwOSAx NjozNToyNSAtMDAwMAkxLjEwMgorKysgZ2Ric2VydmVyL3NlcnZlci5jCTgg T2N0IDIwMDkgMTk6MTQ6MjUgLTAwMDAKQEAgLTY2MCw2ICs2NjAsNTMgQEAg aGFuZGxlX3NlYXJjaF9tZW1vcnkgKGNoYXIgKm93bl9idWYsIGludAogICAg ICAgcmV0dXJuOwkJCQkJXAogICAgIH0KIAorLyogSGFuZGxlIG1vbml0b3Ig Y29tbWFuZHMgbm90IGhhbmRsZWQgYnkgdGFyZ2V0LXNwZWNpZmljIGhhbmRs ZXJzLiAgKi8KKworc3RhdGljIHZvaWQKK2hhbmRsZV9tb25pdG9yX2NvbW1h bmQgKGNoYXIgKm1vbikKK3sKKyAgaWYgKHN0cmNtcCAobW9uLCAic2V0IGRl YnVnIDEiKSA9PSAwKQorICAgIHsKKyAgICAgIGRlYnVnX3RocmVhZHMgPSAx OworICAgICAgbW9uaXRvcl9vdXRwdXQgKCJEZWJ1ZyBvdXRwdXQgZW5hYmxl ZC5cbiIpOworICAgIH0KKyAgZWxzZSBpZiAoc3RyY21wIChtb24sICJzZXQg ZGVidWcgMCIpID09IDApCisgICAgeworICAgICAgZGVidWdfdGhyZWFkcyA9 IDA7CisgICAgICBtb25pdG9yX291dHB1dCAoIkRlYnVnIG91dHB1dCBkaXNh YmxlZC5cbiIpOworICAgIH0KKyAgZWxzZSBpZiAoc3RyY21wIChtb24sICJz ZXQgZGVidWctaHctcG9pbnRzIDEiKSA9PSAwKQorICAgIHsKKyAgICAgIGRl YnVnX2h3X3BvaW50cyA9IDE7CisgICAgICBtb25pdG9yX291dHB1dCAoIkgv VyBwb2ludCBkZWJ1Z2dpbmcgb3V0cHV0IGVuYWJsZWQuXG4iKTsKKyAgICB9 CisgIGVsc2UgaWYgKHN0cmNtcCAobW9uLCAic2V0IGRlYnVnLWh3LXBvaW50 cyAwIikgPT0gMCkKKyAgICB7CisgICAgICBkZWJ1Z19od19wb2ludHMgPSAw OworICAgICAgbW9uaXRvcl9vdXRwdXQgKCJIL1cgcG9pbnQgZGVidWdnaW5n IG91dHB1dCBkaXNhYmxlZC5cbiIpOworICAgIH0KKyAgZWxzZSBpZiAoc3Ry Y21wIChtb24sICJzZXQgcmVtb3RlLWRlYnVnIDEiKSA9PSAwKQorICAgIHsK KyAgICAgIHJlbW90ZV9kZWJ1ZyA9IDE7CisgICAgICBtb25pdG9yX291dHB1 dCAoIlByb3RvY29sIGRlYnVnIG91dHB1dCBlbmFibGVkLlxuIik7CisgICAg fQorICBlbHNlIGlmIChzdHJjbXAgKG1vbiwgInNldCByZW1vdGUtZGVidWcg MCIpID09IDApCisgICAgeworICAgICAgcmVtb3RlX2RlYnVnID0gMDsKKyAg ICAgIG1vbml0b3Jfb3V0cHV0ICgiUHJvdG9jb2wgZGVidWcgb3V0cHV0IGRp c2FibGVkLlxuIik7CisgICAgfQorICBlbHNlIGlmIChzdHJjbXAgKG1vbiwg ImhlbHAiKSA9PSAwKQorICAgIG1vbml0b3Jfc2hvd19oZWxwICgpOworICBl bHNlIGlmIChzdHJjbXAgKG1vbiwgImV4aXQiKSA9PSAwKQorICAgIGV4aXRf cmVxdWVzdGVkID0gMTsKKyAgZWxzZQorICAgIHsKKyAgICAgIG1vbml0b3Jf b3V0cHV0ICgiVW5rbm93biBtb25pdG9yIGNvbW1hbmQuXG5cbiIpOworICAg ICAgbW9uaXRvcl9zaG93X2hlbHAgKCk7CisgICAgICB3cml0ZV9lbm4gKG93 bl9idWYpOworICAgIH0KK30KKwogLyogSGFuZGxlIGFsbCBvZiB0aGUgZXh0 ZW5kZWQgJ3EnIHBhY2tldHMuICAqLwogdm9pZAogaGFuZGxlX3F1ZXJ5IChj aGFyICpvd25fYnVmLCBpbnQgcGFja2V0X2xlbiwgaW50ICpuZXdfcGFja2V0 X2xlbl9wKQpAQCAtMTIxMSw0NiArMTI1OCwxMCBAQCBoYW5kbGVfcXVlcnkg KGNoYXIgKm93bl9idWYsIGludCBwYWNrZXRfCiAKICAgICAgIHdyaXRlX29r IChvd25fYnVmKTsKIAotICAgICAgaWYgKHN0cmNtcCAobW9uLCAic2V0IGRl YnVnIDEiKSA9PSAwKQotCXsKLQkgIGRlYnVnX3RocmVhZHMgPSAxOwotCSAg bW9uaXRvcl9vdXRwdXQgKCJEZWJ1ZyBvdXRwdXQgZW5hYmxlZC5cbiIpOwot CX0KLSAgICAgIGVsc2UgaWYgKHN0cmNtcCAobW9uLCAic2V0IGRlYnVnIDAi KSA9PSAwKQotCXsKLQkgIGRlYnVnX3RocmVhZHMgPSAwOwotCSAgbW9uaXRv cl9vdXRwdXQgKCJEZWJ1ZyBvdXRwdXQgZGlzYWJsZWQuXG4iKTsKLQl9Ci0g ICAgICBlbHNlIGlmIChzdHJjbXAgKG1vbiwgInNldCBkZWJ1Zy1ody1wb2lu dHMgMSIpID09IDApCi0JewotCSAgZGVidWdfaHdfcG9pbnRzID0gMTsKLQkg IG1vbml0b3Jfb3V0cHV0ICgiSC9XIHBvaW50IGRlYnVnZ2luZyBvdXRwdXQg ZW5hYmxlZC5cbiIpOwotCX0KLSAgICAgIGVsc2UgaWYgKHN0cmNtcCAobW9u LCAic2V0IGRlYnVnLWh3LXBvaW50cyAwIikgPT0gMCkKLQl7Ci0JICBkZWJ1 Z19od19wb2ludHMgPSAwOwotCSAgbW9uaXRvcl9vdXRwdXQgKCJIL1cgcG9p bnQgZGVidWdnaW5nIG91dHB1dCBkaXNhYmxlZC5cbiIpOwotCX0KLSAgICAg IGVsc2UgaWYgKHN0cmNtcCAobW9uLCAic2V0IHJlbW90ZS1kZWJ1ZyAxIikg PT0gMCkKLQl7Ci0JICByZW1vdGVfZGVidWcgPSAxOwotCSAgbW9uaXRvcl9v dXRwdXQgKCJQcm90b2NvbCBkZWJ1ZyBvdXRwdXQgZW5hYmxlZC5cbiIpOwot CX0KLSAgICAgIGVsc2UgaWYgKHN0cmNtcCAobW9uLCAic2V0IHJlbW90ZS1k ZWJ1ZyAwIikgPT0gMCkKLQl7Ci0JICByZW1vdGVfZGVidWcgPSAwOwotCSAg bW9uaXRvcl9vdXRwdXQgKCJQcm90b2NvbCBkZWJ1ZyBvdXRwdXQgZGlzYWJs ZWQuXG4iKTsKLQl9Ci0gICAgICBlbHNlIGlmIChzdHJjbXAgKG1vbiwgImhl bHAiKSA9PSAwKQotCW1vbml0b3Jfc2hvd19oZWxwICgpOwotICAgICAgZWxz ZSBpZiAoc3RyY21wIChtb24sICJleGl0IikgPT0gMCkKLQlleGl0X3JlcXVl c3RlZCA9IDE7Ci0gICAgICBlbHNlCi0JewotCSAgbW9uaXRvcl9vdXRwdXQg KCJVbmtub3duIG1vbml0b3IgY29tbWFuZC5cblxuIik7Ci0JICBtb25pdG9y X3Nob3dfaGVscCAoKTsKLQkgIHdyaXRlX2VubiAob3duX2J1Zik7Ci0JfQor ICAgICAgaWYgKHRoZV90YXJnZXQtPmhhbmRsZV9tb25pdG9yX2NvbW1hbmQg PT0gTlVMTAorCSAgfHwgKCp0aGVfdGFyZ2V0LT5oYW5kbGVfbW9uaXRvcl9j b21tYW5kKSAobW9uKSA9PSAwKQorCS8qIERlZmF1bHQgcHJvY2Vzc2luZy4g ICovCisJaGFuZGxlX21vbml0b3JfY29tbWFuZCAobW9uKTsKIAogICAgICAg ZnJlZSAobW9uKTsKICAgICAgIHJldHVybjsKSW5kZXg6IGdkYnNlcnZlci90 YXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz L3NyYy9zcmMvZ2RiL2dkYnNlcnZlci90YXJnZXQuaCx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS4zOQpkaWZmIC11IC1wIC11IC1yMS4zOSB0YXJnZXQuaAot LS0gZ2Ric2VydmVyL3RhcmdldC5oCTI1IEp1biAyMDA5IDIyOjEzOjUzIC0w MDAwCTEuMzkKKysrIGdkYnNlcnZlci90YXJnZXQuaAk4IE9jdCAyMDA5IDE5 OjE0OjI1IC0wMDAwCkBAIC0yNzksNiArMjc5LDEwIEBAIHN0cnVjdCB0YXJn ZXRfb3BzCiAKICAgLyogUmV0dXJucyB0cnVlIGlmIHRoZSB0YXJnZXQgc3Vw cG9ydHMgbXVsdGktcHJvY2VzcyBkZWJ1Z2dpbmcuICAqLwogICBpbnQgKCpz dXBwb3J0c19tdWx0aV9wcm9jZXNzKSAodm9pZCk7CisKKyAgLyogSWYgbm90 IE5VTEwsIHRhcmdldC1zcGVjaWZpYyByb3V0aW5lIHRvIHByb2Nlc3MgbW9u aXRvciBjb21tYW5kLgorICAgICBSZXR1cm5zIDEgaWYgaGFuZGxlZCwgb3Ig MCB0byBwZXJmb3JtIGRlZmF1bHQgcHJvY2Vzc2luZy4gICovCisgIGludCAo KmhhbmRsZV9tb25pdG9yX2NvbW1hbmQpIChjaGFyICopOwogfTsKIAogZXh0 ZXJuIHN0cnVjdCB0YXJnZXRfb3BzICp0aGVfdGFyZ2V0OwpJbmRleDogZ2Ri c2VydmVyL3RocmVhZC1kYi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL3RocmVhZC1kYi5j LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXUgLXAgLXUgLXIx LjIzIHRocmVhZC1kYi5jCi0tLSBnZGJzZXJ2ZXIvdGhyZWFkLWRiLmMJMyBB cHIgMjAwOSAyMDoxNTo1MSAtMDAwMAkxLjIzCisrKyBnZGJzZXJ2ZXIvdGhy ZWFkLWRiLmMJOCBPY3QgMjAwOSAxOToxNDoyNSAtMDAwMApAQCAtMjcsMTMg KzI3LDUxIEBAIGV4dGVybiBpbnQgZGVidWdfdGhyZWFkczsKIAogc3RhdGlj IGludCB0aHJlYWRfZGJfdXNlX2V2ZW50czsKIAotI2lmZGVmIEhBVkVfVEhS RUFEX0RCX0gKLSNpbmNsdWRlIDx0aHJlYWRfZGIuaD4KLSNlbmRpZgotCiAj aW5jbHVkZSAiZ2RiX3Byb2Nfc2VydmljZS5oIgorI2luY2x1ZGUgIi4uL2dk Yl90aHJlYWRfZGIuaCIKIAorI2luY2x1ZGUgPGRsZmNuLmg+CiAjaW5jbHVk ZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8 Y3R5cGUuaD4KKworc3RydWN0IHRocmVhZF9kYgoreworICAvKiBTdHJ1Y3R1 cmUgdGhhdCBpZGVudGlmaWVzIHRoZSBjaGlsZCBwcm9jZXNzIGZvciB0aGUK KyAgICAgPHByb2Nfc2VydmljZS5oPiBpbnRlcmZhY2UuICAqLworICBzdHJ1 Y3QgcHNfcHJvY2hhbmRsZSBwcm9jX2hhbmRsZTsKKworICAvKiBDb25uZWN0 aW9uIHRvIHRoZSBsaWJ0aHJlYWRfZGIgbGlicmFyeS4gICovCisgIHRkX3Ro cmFnZW50X3QgKnRocmVhZF9hZ2VudDsKKworICAvKiBIYW5kbGUgb2YgdGhl IGxpYnRocmVhZF9kYiBmcm9tIGRsb3Blbi4gICovCisgIHZvaWQgKmhhbmRs ZTsKKworICAvKiBBZGRyZXNzZXMgb2YgbGlidGhyZWFkX2RiIGZ1bmN0aW9u cy4gICovCisgIHRkX2Vycl9lICgqdGRfdGFfbmV3X3ApIChzdHJ1Y3QgcHNf cHJvY2hhbmRsZSAqIHBzLCB0ZF90aHJhZ2VudF90ICoqdGEpOworICB0ZF9l cnJfZSAoKnRkX3RhX2V2ZW50X2dldG1zZ19wKSAoY29uc3QgdGRfdGhyYWdl bnRfdCAqdGEsCisJCQkJICAgIHRkX2V2ZW50X21zZ190ICptc2cpOworICB0 ZF9lcnJfZSAoKnRkX3RhX3NldF9ldmVudF9wKSAoY29uc3QgdGRfdGhyYWdl bnRfdCAqdGEsCisJCQkJIHRkX3Rocl9ldmVudHNfdCAqZXZlbnQpOworICB0 ZF9lcnJfZSAoKnRkX3RhX2V2ZW50X2FkZHJfcCkgKGNvbnN0IHRkX3RocmFn ZW50X3QgKnRhLAorCQkJCSAgdGRfZXZlbnRfZSBldmVudCwgdGRfbm90aWZ5 X3QgKnB0cik7CisgIHRkX2Vycl9lICgqdGRfdGFfbWFwX2x3cDJ0aHJfcCkg KGNvbnN0IHRkX3RocmFnZW50X3QgKnRhLCBsd3BpZF90IGx3cGlkLAorCQkJ CSAgIHRkX3RocmhhbmRsZV90ICp0aCk7CisgIHRkX2Vycl9lICgqdGRfdGhy X2dldF9pbmZvX3ApIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqdGgsCisJCQkJ IHRkX3RocmluZm9fdCAqaW5mb3ApOworICB0ZF9lcnJfZSAoKnRkX3Rocl9l dmVudF9lbmFibGVfcCkgKGNvbnN0IHRkX3RocmhhbmRsZV90ICp0aCwgaW50 IGV2ZW50KTsKKyAgdGRfZXJyX2UgKCp0ZF90YV90aHJfaXRlcl9wKSAoY29u c3QgdGRfdGhyYWdlbnRfdCAqdGEsCisJCQkJdGRfdGhyX2l0ZXJfZiAqY2Fs bGJhY2ssIHZvaWQgKmNiZGF0YV9wLAorCQkJCXRkX3Rocl9zdGF0ZV9lIHN0 YXRlLCBpbnQgdGlfcHJpLAorCQkJCXNpZ3NldF90ICp0aV9zaWdtYXNrX3As CisJCQkJdW5zaWduZWQgaW50IHRpX3VzZXJfZmxhZ3MpOworICB0ZF9lcnJf ZSAoKnRkX3Rocl90bHNfZ2V0X2FkZHJfcCkgKGNvbnN0IHRkX3RocmhhbmRs ZV90ICp0aCwKKwkJCQkgICAgIHZvaWQgKm1hcF9hZGRyZXNzLAorCQkJCSAg ICAgc2l6ZV90IG9mZnNldCwgdm9pZCAqKmFkZHJlc3MpOworICBjb25zdCBj aGFyICoqICgqdGRfc3ltYm9sX2xpc3RfcCkgKHZvaWQpOworfTsKKworc3Rh dGljIGNoYXIgKmxpYnRocmVhZF9kYl9zZWFyY2hfcGF0aDsKIAogc3RhdGlj IGludCBmaW5kX29uZV90aHJlYWQgKHB0aWRfdCk7CiBzdGF0aWMgaW50IGZp bmRfbmV3X3RocmVhZHNfY2FsbGJhY2sgKGNvbnN0IHRkX3RocmhhbmRsZV90 ICp0aF9wLCB2b2lkICpkYXRhKTsKQEAgLTEzMCw3ICsxNjgsMTAgQEAgdGhy ZWFkX2RiX2NyZWF0ZV9ldmVudCAoQ09SRV9BRERSIHdoZXJlKQogICB0ZF9l dmVudF9tc2dfdCBtc2c7CiAgIHRkX2Vycl9lIGVycjsKICAgc3RydWN0IGx3 cF9pbmZvICpsd3A7Ci0gIHN0cnVjdCBwcm9jZXNzX2luZm9fcHJpdmF0ZSAq cHJvYyA9IGN1cnJlbnRfcHJvY2VzcygpLT5wcml2YXRlOworICBzdHJ1Y3Qg dGhyZWFkX2RiICp0aHJlYWRfZGIgPSBjdXJyZW50X3Byb2Nlc3MgKCktPnBy aXZhdGUtPnRocmVhZF9kYjsKKworICBpZiAodGhyZWFkX2RiLT50ZF90YV9l dmVudF9nZXRtc2dfcCA9PSBOVUxMKQorICAgIGZhdGFsICgidW5leHBlY3Rl ZCB0aHJlYWRfZGItPnRkX3RhX2V2ZW50X2dldG1zZ19wID09IE5VTEwiKTsK IAogICBpZiAoZGVidWdfdGhyZWFkcykKICAgICBmcHJpbnRmIChzdGRlcnIs ICJUaHJlYWQgY3JlYXRpb24gZXZlbnQuXG4iKTsKQEAgLTEzOSw3ICsxODAs NyBAQCB0aHJlYWRfZGJfY3JlYXRlX2V2ZW50IChDT1JFX0FERFIgd2hlcmUp CiAgICAgIEluIHRoZSBMaW51eFRocmVhZHMgaW1wbGVtZW50YXRpb24sIHRo aXMgaXMgc2FmZSwKICAgICAgYmVjYXVzZSBhbGwgZXZlbnRzIGNvbWUgZnJv bSB0aGUgbWFuYWdlciB0aHJlYWQKICAgICAgKGV4Y2VwdCBmb3IgaXRzIG93 biBjcmVhdGlvbiwgb2YgY291cnNlKS4gICovCi0gIGVyciA9IHRkX3RhX2V2 ZW50X2dldG1zZyAocHJvYy0+dGhyZWFkX2FnZW50LCAmbXNnKTsKKyAgZXJy ID0gdGhyZWFkX2RiLT50ZF90YV9ldmVudF9nZXRtc2dfcCAodGhyZWFkX2Ri LT50aHJlYWRfYWdlbnQsICZtc2cpOwogICBpZiAoZXJyICE9IFREX09LKQog ICAgIGZwcmludGYgKHN0ZGVyciwgInRocmVhZCBnZXRtc2cgZXJyOiAlc1xu IiwKIAkgICAgIHRocmVhZF9kYl9lcnJfc3RyIChlcnIpKTsKQEAgLTE1OCwz NiArMTk5LDI1IEBAIHRocmVhZF9kYl9jcmVhdGVfZXZlbnQgKENPUkVfQURE UiB3aGVyZSkKICAgcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi1zdGF0aWMgaW50 Ci10aHJlYWRfZGJfZGVhdGhfZXZlbnQgKENPUkVfQUREUiB3aGVyZSkKLXsK LSAgaWYgKGRlYnVnX3RocmVhZHMpCi0gICAgZnByaW50ZiAoc3RkZXJyLCAi VGhyZWFkIGRlYXRoIGV2ZW50LlxuIik7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0j ZW5kaWYKLQogc3RhdGljIGludAogdGhyZWFkX2RiX2VuYWJsZV9yZXBvcnRp bmcgKCkKIHsKICAgdGRfdGhyX2V2ZW50c190IGV2ZW50czsKICAgdGRfbm90 aWZ5X3Qgbm90aWZ5OwogICB0ZF9lcnJfZSBlcnI7Ci0gIHN0cnVjdCBwcm9j ZXNzX2luZm9fcHJpdmF0ZSAqcHJvYyA9IGN1cnJlbnRfcHJvY2VzcygpLT5w cml2YXRlOworICBzdHJ1Y3QgdGhyZWFkX2RiICp0aHJlYWRfZGIgPSBjdXJy ZW50X3Byb2Nlc3MgKCktPnByaXZhdGUtPnRocmVhZF9kYjsKKworICBpZiAo dGhyZWFkX2RiLT50ZF90YV9zZXRfZXZlbnRfcCA9PSBOVUxMCisgICAgICB8 fCB0aHJlYWRfZGItPnRkX3RhX2V2ZW50X2FkZHJfcCA9PSBOVUxMCisgICAg ICB8fCB0aHJlYWRfZGItPnRkX3RhX2V2ZW50X2dldG1zZ19wID09IE5VTEwp CisgICAgLyogVGhpcyBsaWJ0aHJlYWRfZGIgaXMgbWlzc2luZyByZXF1aXJl ZCBzdXBwb3J0LiAgKi8KKyAgICByZXR1cm4gMDsKIAogICAvKiBTZXQgdGhl IHByb2Nlc3Mgd2lkZSBtYXNrIHNheWluZyB3aGljaCBldmVudHMgd2UncmUg aW50ZXJlc3RlZCBpbi4gICovCiAgIHRkX2V2ZW50X2VtcHR5c2V0ICgmZXZl bnRzKTsKICAgdGRfZXZlbnRfYWRkc2V0ICgmZXZlbnRzLCBURF9DUkVBVEUp OwogCi0jaWYgMAotICAvKiBUaGlzIGlzIHJlcG9ydGVkIHRvIGJlIGJyb2tl biBpbiBnbGliYyAyLjEuMy4gIEEgZGlmZmVyZW50IGFwcHJvYWNoCi0gICAg IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgdGhhdC4gICovCi0gIHRk X2V2ZW50X2FkZHNldCAoJmV2ZW50cywgVERfREVBVEgpOwotI2VuZGlmCi0K LSAgZXJyID0gdGRfdGFfc2V0X2V2ZW50IChwcm9jLT50aHJlYWRfYWdlbnQs ICZldmVudHMpOworICBlcnIgPSB0aHJlYWRfZGItPnRkX3RhX3NldF9ldmVu dF9wICh0aHJlYWRfZGItPnRocmVhZF9hZ2VudCwgJmV2ZW50cyk7CiAgIGlm IChlcnIgIT0gVERfT0spCiAgICAgewogICAgICAgd2FybmluZyAoIlVuYWJs ZSB0byBzZXQgZ2xvYmFsIHRocmVhZCBldmVudCBtYXNrOiAlcyIsCkBAIC0x OTYsNyArMjI2LDggQEAgdGhyZWFkX2RiX2VuYWJsZV9yZXBvcnRpbmcgKCkK ICAgICB9CiAKICAgLyogR2V0IGFkZHJlc3MgZm9yIHRocmVhZCBjcmVhdGlv biBicmVha3BvaW50LiAgKi8KLSAgZXJyID0gdGRfdGFfZXZlbnRfYWRkciAo cHJvYy0+dGhyZWFkX2FnZW50LCBURF9DUkVBVEUsICZub3RpZnkpOworICBl cnIgPSB0aHJlYWRfZGItPnRkX3RhX2V2ZW50X2FkZHJfcCAodGhyZWFkX2Ri LT50aHJlYWRfYWdlbnQsIFREX0NSRUFURSwKKwkJCQkgICAgICAgJm5vdGlm eSk7CiAgIGlmIChlcnIgIT0gVERfT0spCiAgICAgewogICAgICAgd2Fybmlu ZyAoIlVuYWJsZSB0byBnZXQgbG9jYXRpb24gZm9yIHRocmVhZCBjcmVhdGlv biBicmVha3BvaW50OiAlcyIsCkBAIC0yMDYsMjIgKzIzNyw2IEBAIHRocmVh ZF9kYl9lbmFibGVfcmVwb3J0aW5nICgpCiAgIHNldF9icmVha3BvaW50X2F0 ICgoQ09SRV9BRERSKSAodW5zaWduZWQgbG9uZykgbm90aWZ5LnUuYnB0YWRk ciwKIAkJICAgICB0aHJlYWRfZGJfY3JlYXRlX2V2ZW50KTsKIAotI2lmIDAK LSAgLyogRG9uJ3QgY29uY2VybiBvdXJzZWx2ZXMgd2l0aCByZXBvcnRlZCB0 aHJlYWQgZGVhdGhzLCBvbmx5Ci0gICAgIHdpdGggYWN0dWFsIHRocmVhZCBk ZWF0aHMgKHZpYSB3YWl0KS4gICovCi0KLSAgLyogR2V0IGFkZHJlc3MgZm9y IHRocmVhZCBkZWF0aCBicmVha3BvaW50LiAgKi8KLSAgZXJyID0gdGRfdGFf ZXZlbnRfYWRkciAocHJvYy0+dGhyZWFkX2FnZW50LCBURF9ERUFUSCwgJm5v dGlmeSk7Ci0gIGlmIChlcnIgIT0gVERfT0spCi0gICAgewotICAgICAgd2Fy bmluZyAoIlVuYWJsZSB0byBnZXQgbG9jYXRpb24gZm9yIHRocmVhZCBkZWF0 aCBicmVha3BvaW50OiAlcyIsCi0JICAgICAgIHRocmVhZF9kYl9lcnJfc3Ry IChlcnIpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIHNldF9icmVha3Bv aW50X2F0ICgoQ09SRV9BRERSKSAodW5zaWduZWQgbG9uZykgbm90aWZ5LnUu YnB0YWRkciwKLQkJICAgICB0aHJlYWRfZGJfZGVhdGhfZXZlbnQpOwotI2Vu ZGlmCi0KICAgcmV0dXJuIDE7CiB9CiAKQEAgLTIzMyw3ICsyNDgsNyBAQCBm aW5kX29uZV90aHJlYWQgKHB0aWRfdCBwdGlkKQogICB0ZF9lcnJfZSBlcnI7 CiAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqaW5mZXJpb3I7CiAgIHN0cnVjdCBs d3BfaW5mbyAqbHdwOwotICBzdHJ1Y3QgcHJvY2Vzc19pbmZvX3ByaXZhdGUg KnByb2M7CisgIHN0cnVjdCB0aHJlYWRfZGIgKnRocmVhZF9kYiA9IGN1cnJl bnRfcHJvY2VzcyAoKS0+cHJpdmF0ZS0+dGhyZWFkX2RiOwogICBpbnQgbHdw aWQgPSBwdGlkX2dldF9sd3AgKHB0aWQpOwogCiAgIGluZmVyaW9yID0gKHN0 cnVjdCB0aHJlYWRfaW5mbyAqKSBmaW5kX2luZmVyaW9yX2lkICgmYWxsX3Ro cmVhZHMsIHB0aWQpOwpAQCAtMjQyLDEzICsyNTcsMTIgQEAgZmluZF9vbmVf dGhyZWFkIChwdGlkX3QgcHRpZCkKICAgICByZXR1cm4gMTsKIAogICAvKiBH ZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0aHJlYWQuICAqLwotICBwcm9j ID0gZ2V0X3RocmVhZF9wcm9jZXNzIChpbmZlcmlvciktPnByaXZhdGU7Ci0g IGVyciA9IHRkX3RhX21hcF9sd3AydGhyIChwcm9jLT50aHJlYWRfYWdlbnQs IGx3cGlkLCAmdGgpOworICBlcnIgPSB0aHJlYWRfZGItPnRkX3RhX21hcF9s d3AydGhyX3AgKHRocmVhZF9kYi0+dGhyZWFkX2FnZW50LCBsd3BpZCwgJnRo KTsKICAgaWYgKGVyciAhPSBURF9PSykKICAgICBlcnJvciAoIkNhbm5vdCBn ZXQgdGhyZWFkIGhhbmRsZSBmb3IgTFdQICVkOiAlcyIsCiAJICAgbHdwaWQs IHRocmVhZF9kYl9lcnJfc3RyIChlcnIpKTsKIAotICBlcnIgPSB0ZF90aHJf Z2V0X2luZm8gKCZ0aCwgJnRpKTsKKyAgZXJyID0gdGhyZWFkX2RiLT50ZF90 aHJfZ2V0X2luZm9fcCAoJnRoLCAmdGkpOwogICBpZiAoZXJyICE9IFREX09L KQogICAgIGVycm9yICgiQ2Fubm90IGdldCB0aHJlYWQgaW5mbyBmb3IgTFdQ ICVkOiAlcyIsCiAJICAgbHdwaWQsIHRocmVhZF9kYl9lcnJfc3RyIChlcnIp KTsKQEAgLTI2Niw3ICsyODAsNyBAQCBmaW5kX29uZV90aHJlYWQgKHB0aWRf dCBwdGlkKQogCiAgIGlmICh0aHJlYWRfZGJfdXNlX2V2ZW50cykKICAgICB7 Ci0gICAgICBlcnIgPSB0ZF90aHJfZXZlbnRfZW5hYmxlICgmdGgsIDEpOwor ICAgICAgZXJyID0gdGhyZWFkX2RiLT50ZF90aHJfZXZlbnRfZW5hYmxlX3Ag KCZ0aCwgMSk7CiAgICAgICBpZiAoZXJyICE9IFREX09LKQogCWVycm9yICgi Q2Fubm90IGVuYWJsZSB0aHJlYWQgZXZlbnQgcmVwb3J0aW5nIGZvciAlZDog JXMiLAogCSAgICAgICB0aS50aV9saWQsIHRocmVhZF9kYl9lcnJfc3RyIChl cnIpKTsKQEAgLTMxMCw3ICszMjQsOCBAQCBtYXliZV9hdHRhY2hfdGhyZWFk IChjb25zdCB0ZF90aHJoYW5kbGVfCiAKICAgaWYgKHRocmVhZF9kYl91c2Vf ZXZlbnRzKQogICAgIHsKLSAgICAgIGVyciA9IHRkX3Rocl9ldmVudF9lbmFi bGUgKHRoX3AsIDEpOworICAgICAgc3RydWN0IHRocmVhZF9kYiAqdGhyZWFk X2RiID0gY3VycmVudF9wcm9jZXNzICgpLT5wcml2YXRlLT50aHJlYWRfZGI7 CisgICAgICBlcnIgPSB0aHJlYWRfZGItPnRkX3Rocl9ldmVudF9lbmFibGVf cCAodGhfcCwgMSk7CiAgICAgICBpZiAoZXJyICE9IFREX09LKQogCWVycm9y ICgiQ2Fubm90IGVuYWJsZSB0aHJlYWQgZXZlbnQgcmVwb3J0aW5nIGZvciAl ZDogJXMiLAogCSAgICAgICB0aV9wLT50aV9saWQsIHRocmVhZF9kYl9lcnJf c3RyIChlcnIpKTsKQEAgLTMyMiw4ICszMzcsOSBAQCBmaW5kX25ld190aHJl YWRzX2NhbGxiYWNrIChjb25zdCB0ZF90aHJoCiB7CiAgIHRkX3RocmluZm9f dCB0aTsKICAgdGRfZXJyX2UgZXJyOworICBzdHJ1Y3QgdGhyZWFkX2RiICp0 aHJlYWRfZGIgPSBjdXJyZW50X3Byb2Nlc3MgKCktPnByaXZhdGUtPnRocmVh ZF9kYjsKIAotICBlcnIgPSB0ZF90aHJfZ2V0X2luZm8gKHRoX3AsICZ0aSk7 CisgIGVyciA9IHRocmVhZF9kYi0+dGRfdGhyX2dldF9pbmZvX3AgKHRoX3As ICZ0aSk7CiAgIGlmIChlcnIgIT0gVERfT0spCiAgICAgZXJyb3IgKCJDYW5u b3QgZ2V0IHRocmVhZCBpbmZvOiAlcyIsIHRocmVhZF9kYl9lcnJfc3RyIChl cnIpKTsKIApAQCAtMzQxLDcgKzM1Nyw3IEBAIHRocmVhZF9kYl9maW5kX25l d190aHJlYWRzICh2b2lkKQogewogICB0ZF9lcnJfZSBlcnI7CiAgIHB0aWRf dCBwdGlkID0gKChzdHJ1Y3QgaW5mZXJpb3JfbGlzdF9lbnRyeSAqKSBjdXJy ZW50X2luZmVyaW9yKS0+aWQ7Ci0gIHN0cnVjdCBwcm9jZXNzX2luZm9fcHJp dmF0ZSAqcHJvYyA9IGN1cnJlbnRfcHJvY2VzcygpLT5wcml2YXRlOworICBz dHJ1Y3QgdGhyZWFkX2RiICp0aHJlYWRfZGIgPSBjdXJyZW50X3Byb2Nlc3Mg KCktPnByaXZhdGUtPnRocmVhZF9kYjsKIAogICAvKiBUaGlzIGZ1bmN0aW9u IGlzIG9ubHkgY2FsbGVkIHdoZW4gd2UgZmlyc3QgaW5pdGlhbGl6ZSB0aHJl YWRfZGIuCiAgICAgIEZpcnN0IGxvY2F0ZSB0aGUgaW5pdGlhbCB0aHJlYWQu ICBJZiBpdCBpcyBub3QgcmVhZHkgZm9yCkBAIC0zNTAsMTAgKzM2NiwxMCBA QCB0aHJlYWRfZGJfZmluZF9uZXdfdGhyZWFkcyAodm9pZCkKICAgICByZXR1 cm47CiAKICAgLyogSXRlcmF0ZSBvdmVyIGFsbCB1c2VyLXNwYWNlIHRocmVh ZHMgdG8gZGlzY292ZXIgbmV3IHRocmVhZHMuICAqLwotICBlcnIgPSB0ZF90 YV90aHJfaXRlciAocHJvYy0+dGhyZWFkX2FnZW50LAotCQkJZmluZF9uZXdf dGhyZWFkc19jYWxsYmFjaywgTlVMTCwKLQkJCVREX1RIUl9BTllfU1RBVEUs IFREX1RIUl9MT1dFU1RfUFJJT1JJVFksCi0JCQlURF9TSUdOT19NQVNLLCBU RF9USFJfQU5ZX1VTRVJfRkxBR1MpOworICBlcnIgPSB0aHJlYWRfZGItPnRk X3RhX3Rocl9pdGVyX3AgKHRocmVhZF9kYi0+dGhyZWFkX2FnZW50LAorCQkJ CSAgICAgZmluZF9uZXdfdGhyZWFkc19jYWxsYmFjaywgTlVMTCwKKwkJCQkg ICAgIFREX1RIUl9BTllfU1RBVEUsIFREX1RIUl9MT1dFU1RfUFJJT1JJVFks CisJCQkJICAgICBURF9TSUdOT19NQVNLLCBURF9USFJfQU5ZX1VTRVJfRkxB R1MpOwogICBpZiAoZXJyICE9IFREX09LKQogICAgIGVycm9yICgiQ2Fubm90 IGZpbmQgbmV3IHRocmVhZHM6ICVzIiwgdGhyZWFkX2RiX2Vycl9zdHIgKGVy cikpOwogfQpAQCAtMzY2LDEwICszODIsMTEgQEAgdGhyZWFkX2RiX2ZpbmRf bmV3X3RocmVhZHMgKHZvaWQpCiBzdGF0aWMgdm9pZAogdGhyZWFkX2RiX2xv b2tfdXBfc3ltYm9scyAodm9pZCkKIHsKLSAgY29uc3QgY2hhciAqKnN5bV9s aXN0ID0gdGRfc3ltYm9sX2xpc3QgKCk7CisgIHN0cnVjdCB0aHJlYWRfZGIg KnRocmVhZF9kYiA9IGN1cnJlbnRfcHJvY2VzcyAoKS0+cHJpdmF0ZS0+dGhy ZWFkX2RiOworICBjb25zdCBjaGFyICoqc3ltX2xpc3Q7CiAgIENPUkVfQURE UiB1bnVzZWQ7CiAKLSAgZm9yIChzeW1fbGlzdCA9IHRkX3N5bWJvbF9saXN0 ICgpOyAqc3ltX2xpc3Q7IHN5bV9saXN0KyspCisgIGZvciAoc3ltX2xpc3Qg PSB0aHJlYWRfZGItPnRkX3N5bWJvbF9saXN0X3AgKCk7ICpzeW1fbGlzdDsg c3ltX2xpc3QrKykKICAgICBsb29rX3VwX29uZV9zeW1ib2wgKCpzeW1fbGlz dCwgJnVudXNlZCk7CiB9CiAKQEAgLTM3NywxNiArMzk0LDIzIEBAIGludAog dGhyZWFkX2RiX2dldF90bHNfYWRkcmVzcyAoc3RydWN0IHRocmVhZF9pbmZv ICp0aHJlYWQsIENPUkVfQUREUiBvZmZzZXQsCiAJCQkgICBDT1JFX0FERFIg bG9hZF9tb2R1bGUsIENPUkVfQUREUiAqYWRkcmVzcykKIHsKLSNpZiBIQVZF X1REX1RIUl9UTFNfR0VUX0FERFIKICAgcHNhZGRyX3QgYWRkcjsKICAgdGRf ZXJyX2UgZXJyOwogICBzdHJ1Y3QgbHdwX2luZm8gKmx3cDsKICAgc3RydWN0 IHRocmVhZF9pbmZvICpzYXZlZF9pbmZlcmlvcjsKKyAgc3RydWN0IHByb2Nl c3NfaW5mbyAqcHJvYzsKKyAgc3RydWN0IHRocmVhZF9kYiAqdGhyZWFkX2Ri OworCisgIHByb2MgPSBnZXRfdGhyZWFkX3Byb2Nlc3MgKHRocmVhZCk7Cisg IHRocmVhZF9kYiA9IHByb2MtPnByaXZhdGUtPnRocmVhZF9kYjsKIAogICAv KiBJZiB0aGUgdGhyZWFkIGxheWVyIGlzIG5vdCAoeWV0KSBpbml0aWFsaXpl ZCwgZmFpbC4gICovCi0gIGlmICghZ2V0X3RocmVhZF9wcm9jZXNzICh0aHJl YWQpLT5hbGxfc3ltYm9sc19sb29rZWRfdXApCisgIGlmICghcHJvYy0+YWxs X3N5bWJvbHNfbG9va2VkX3VwKQogICAgIHJldHVybiBURF9FUlI7CiAKKyAg aWYgKHRocmVhZF9kYi0+dGRfdGhyX3Rsc19nZXRfYWRkcl9wID09IE5VTEwp CisgICAgcmV0dXJuIC0xOworCiAgIGx3cCA9IGdldF90aHJlYWRfbHdwICh0 aHJlYWQpOwogICBpZiAoIWx3cC0+dGhyZWFkX2tub3duKQogICAgIGZpbmRf b25lX3RocmVhZCAobHdwLT5oZWFkLmlkKTsKQEAgLTM5OCw4ICs0MjIsOSBA QCB0aHJlYWRfZGJfZ2V0X3Rsc19hZGRyZXNzIChzdHJ1Y3QgdGhyZWFkCiAg IC8qIE5vdGUgdGhlIGNhc3QgdGhyb3VnaCB1aW50cHRyX3Q6IHRoaXMgaW50 ZXJmYWNlIG9ubHkgd29ya3MgaWYKICAgICAgYSB0YXJnZXQgYWRkcmVzcyBm aXRzIGluIGEgcHNhZGRyX3QsIHdoaWNoIGlzIGEgaG9zdCBwb2ludGVyLgog ICAgICBTbyBhIDMyLWJpdCBkZWJ1Z2dlciBjYW4gbm90IGFjY2VzcyA2NC1i aXQgVExTIHRocm91Z2ggdGhpcy4gICovCi0gIGVyciA9IHRkX3Rocl90bHNf Z2V0X2FkZHIgKCZsd3AtPnRoLCAocHNhZGRyX3QpICh1aW50cHRyX3QpIGxv YWRfbW9kdWxlLAotCQkJICAgICBvZmZzZXQsICZhZGRyKTsKKyAgZXJyID0g dGhyZWFkX2RiLT50ZF90aHJfdGxzX2dldF9hZGRyX3AgKCZsd3AtPnRoLAor CQkJCQkgIChwc2FkZHJfdCkgKHVpbnRwdHJfdCkgbG9hZF9tb2R1bGUsCisJ CQkJCSAgb2Zmc2V0LCAmYWRkcik7CiAgIGN1cnJlbnRfaW5mZXJpb3IgPSBz YXZlZF9pbmZlcmlvcjsKICAgaWYgKGVyciA9PSBURF9PSykKICAgICB7CkBA IC00MDgsMTcgKzQzMywxOTAgQEAgdGhyZWFkX2RiX2dldF90bHNfYWRkcmVz cyAoc3RydWN0IHRocmVhZAogICAgIH0KICAgZWxzZQogICAgIHJldHVybiBl cnI7Ci0jZWxzZQotICByZXR1cm4gLTE7Ci0jZW5kaWYKK30KKworc3RhdGlj IGludAordHJ5X3RocmVhZF9kYl9sb2FkXzEgKHZvaWQgKmhhbmRsZSkKK3sK KyAgdGRfZXJyX2UgZXJyOworICBzdHJ1Y3QgdGhyZWFkX2RiIHRkYjsKKyAg c3RydWN0IHByb2Nlc3NfaW5mbyAqcHJvYyA9IGN1cnJlbnRfcHJvY2VzcyAo KTsKKworICBpZiAocHJvYy0+cHJpdmF0ZS0+dGhyZWFkX2RiICE9IE5VTEwp CisgICAgZmF0YWwgKCJ1bmV4cGVjdGVkOiBwcm9jLT5wcml2YXRlLT50aHJl YWRfZGIgIT0gTlVMTCIpOworCisgIHRkYi5oYW5kbGUgPSBoYW5kbGU7CisK KyAgLyogSW5pdGlhbGl6ZSBwb2ludGVycyB0byB0aGUgZHluYW1pYyBsaWJy YXJ5IGZ1bmN0aW9ucyB3ZSB3aWxsIHVzZS4KKyAgICAgRXNzZW50aWFsIGZ1 bmN0aW9ucyBmaXJzdC4gICovCisKKyNkZWZpbmUgQ0hLKHJlcXVpcmVkLCBh KQkJCQkJXAorICBkbwkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAg IGlmICgoYSkgPT0gTlVMTCkJCQkJCQlcCisJewkJCQkJCQlcCisJICBpZiAo ZGVidWdfdGhyZWFkcykJCQkJCVwKKwkgICAgZnByaW50ZiAoc3RkZXJyLCAi ZGxzeW06ICVzXG4iLCBkbGVycm9yICgpKTsJXAorCSAgaWYgKHJlcXVpcmVk KQkJCQkJCVwKKwkgICAgcmV0dXJuIDA7CQkJCQkJXAorCX0JCQkJCQkJXAor ICAgIH0JCQkJCQkJCVwKKyAgd2hpbGUgKDApCisKKyAgQ0hLICgxLCB0ZGIu dGRfdGFfbmV3X3AgPSBkbHN5bSAoaGFuZGxlLCAidGRfdGFfbmV3IikpOwor CisgIC8qIEF0dGVtcHQgdG8gb3BlbiBhIGNvbm5lY3Rpb24gdG8gdGhlIHRo cmVhZCBsaWJyYXJ5LiAgKi8KKyAgZXJyID0gdGRiLnRkX3RhX25ld19wICgm dGRiLnByb2NfaGFuZGxlLCAmdGRiLnRocmVhZF9hZ2VudCk7CisgIGlmIChl cnIgIT0gVERfT0spCisgICAgeworICAgICAgaWYgKGRlYnVnX3RocmVhZHMp CisJZnByaW50ZiAoc3RkZXJyLCAidGRfdGFfbmV3KCk6ICVzXG4iLCB0aHJl YWRfZGJfZXJyX3N0ciAoZXJyKSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9 CisKKyAgQ0hLICgxLCB0ZGIudGRfdGFfbWFwX2x3cDJ0aHJfcCA9IGRsc3lt IChoYW5kbGUsICJ0ZF90YV9tYXBfbHdwMnRociIpKTsKKyAgQ0hLICgxLCB0 ZGIudGRfdGhyX2dldF9pbmZvX3AgPSBkbHN5bSAoaGFuZGxlLCAidGRfdGhy X2dldF9pbmZvIikpOworICBDSEsgKDEsIHRkYi50ZF90YV90aHJfaXRlcl9w ID0gZGxzeW0gKGhhbmRsZSwgInRkX3RhX3Rocl9pdGVyIikpOworICBDSEsg KDEsIHRkYi50ZF9zeW1ib2xfbGlzdF9wID0gZGxzeW0gKGhhbmRsZSwgInRk X3N5bWJvbF9saXN0IikpOworCisgIC8qIFRoaXMgaXMgcmVxdWlyZWQgb25s eSB3aGVuIHRocmVhZF9kYl91c2VfZXZlbnRzIGlzIG9uLiAgKi8KKyAgQ0hL ICh0aHJlYWRfZGJfdXNlX2V2ZW50cywKKyAgICAgICB0ZGIudGRfdGhyX2V2 ZW50X2VuYWJsZV9wID0gZGxzeW0gKGhhbmRsZSwgInRkX3Rocl9ldmVudF9l bmFibGUiKSk7CisKKyAgLyogVGhlc2UgYXJlIG5vdCBlc3NlbnRpYWwuICAq LworICBDSEsgKDAsIHRkYi50ZF90YV9ldmVudF9hZGRyX3AgPSBkbHN5bSAo aGFuZGxlLCAidGRfdGFfZXZlbnRfYWRkciIpKTsKKyAgQ0hLICgwLCB0ZGIu dGRfdGFfc2V0X2V2ZW50X3AgPSBkbHN5bSAoaGFuZGxlLCAidGRfdGFfc2V0 X2V2ZW50IikpOworICBDSEsgKDAsIHRkYi50ZF90YV9ldmVudF9nZXRtc2df cCA9IGRsc3ltIChoYW5kbGUsICJ0ZF90YV9ldmVudF9nZXRtc2ciKSk7Cisg IENISyAoMCwgdGRiLnRkX3Rocl90bHNfZ2V0X2FkZHJfcCA9IGRsc3ltICho YW5kbGUsICJ0ZF90aHJfdGxzX2dldF9hZGRyIikpOworCisjdW5kZWYgQ0hL CisKKyAgcHJvYy0+cHJpdmF0ZS0+dGhyZWFkX2RiID0geG1hbGxvYyAoc2l6 ZW9mICh0ZGIpKTsKKyAgbWVtY3B5IChwcm9jLT5wcml2YXRlLT50aHJlYWRf ZGIsICZ0ZGIsIHNpemVvZiAodGRiKSk7CisKKyAgcmV0dXJuIDE7Cit9CisK Ky8qIExvb2t1cCBhIGxpYnJhcnkgaW4gd2hpY2ggZ2l2ZW4gc3ltYm9sIHJl c2lkZXMuCisgICBOb3RlOiB0aGlzIGlzIGxvb2tpbmcgaW4gdGhlIEdEQlNF UlZFUiBwcm9jZXNzLCBub3QgaW4gdGhlIGluZmVyaW9yLgorICAgUmV0dXJu cyBsaWJyYXJ5IG5hbWUsIG9yIE5VTEwuICAqLworCitzdGF0aWMgY29uc3Qg Y2hhciAqCitkbGFkZHJfdG9fc29uYW1lIChjb25zdCB2b2lkICphZGRyKQor eworICBEbF9pbmZvIGluZm87CisKKyAgaWYgKGRsYWRkciAoYWRkciwgJmlu Zm8pICE9IDApCisgICAgcmV0dXJuIGluZm8uZGxpX2ZuYW1lOworICByZXR1 cm4gTlVMTDsKK30KKworc3RhdGljIGludAordHJ5X3RocmVhZF9kYl9sb2Fk IChjb25zdCBjaGFyICpsaWJyYXJ5KQoreworICB2b2lkICpoYW5kbGU7CisK KyAgaWYgKGRlYnVnX3RocmVhZHMpCisgICAgZnByaW50ZiAoc3RkZXJyLCAi VHJ5aW5nIGhvc3QgbGlidGhyZWFkX2RiIGxpYnJhcnk6ICVzLlxuIiwKKwkg ICAgIGxpYnJhcnkpOworICBoYW5kbGUgPSBkbG9wZW4gKGxpYnJhcnksIFJU TERfTk9XKTsKKyAgaWYgKGhhbmRsZSA9PSBOVUxMKQorICAgIHsKKyAgICAg IGlmIChkZWJ1Z190aHJlYWRzKQorCWZwcmludGYgKHN0ZGVyciwgImRsb3Bl biBmYWlsZWQ6ICVzLlxuIiwgZGxlcnJvciAoKSk7CisgICAgICByZXR1cm4g MDsKKyAgICB9CisKKyAgaWYgKGRlYnVnX3RocmVhZHMgJiYgc3RyY2hyIChs aWJyYXJ5LCAnLycpID09IE5VTEwpCisgICAgeworICAgICAgdm9pZCAqdGRf aW5pdDsKKworICAgICAgdGRfaW5pdCA9IGRsc3ltIChoYW5kbGUsICJ0ZF9p bml0Iik7CisgICAgICBpZiAodGRfaW5pdCAhPSBOVUxMKQorCXsKKwkgIGNv bnN0IGNoYXIgKmNvbnN0IGxpYnBhdGggPSBkbGFkZHJfdG9fc29uYW1lICh0 ZF9pbml0KTsKKworCSAgaWYgKGxpYnBhdGggIT0gTlVMTCkKKwkgICAgZnBy aW50ZiAoc3RkZXJyLCAiSG9zdCAlcyByZXNvbHZlZCB0bzogJXMuXG4iLAor CQkgICAgIGxpYnJhcnksIGxpYnBhdGgpOworCX0KKyAgICB9CisKKyAgaWYg KHRyeV90aHJlYWRfZGJfbG9hZF8xIChoYW5kbGUpKQorICAgIHJldHVybiAx OworCisgIC8qIFRoaXMgbGlicmFyeSAicmVmdXNlZCIgdG8gd29yayBvbiBj dXJyZW50IGluZmVyaW9yLiAgKi8KKyAgZGxjbG9zZSAoaGFuZGxlKTsKKyAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3RocmVhZF9kYl9sb2FkX3Nl YXJjaCAodm9pZCkKK3sKKyAgY2hhciBwYXRoW1BBVEhfTUFYXTsKKyAgY29u c3QgY2hhciAqc2VhcmNoX3BhdGg7CisgIGludCByYyA9IDA7CisKKyAgaWYg KGxpYnRocmVhZF9kYl9zZWFyY2hfcGF0aCA9PSBOVUxMKQorICAgIGxpYnRo cmVhZF9kYl9zZWFyY2hfcGF0aCA9IHhzdHJkdXAgKExJQlRIUkVBRF9EQl9T RUFSQ0hfUEFUSCk7CisKKyAgc2VhcmNoX3BhdGggPSBsaWJ0aHJlYWRfZGJf c2VhcmNoX3BhdGg7CisgIHdoaWxlICgqc2VhcmNoX3BhdGgpCisgICAgewor ICAgICAgY29uc3QgY2hhciAqZW5kID0gc3RyY2hyIChzZWFyY2hfcGF0aCwg JzonKTsKKyAgICAgIGlmIChlbmQpCisJeworCSAgc2l6ZV90IGxlbiA9IGVu ZCAtIHNlYXJjaF9wYXRoOworCSAgaWYgKGxlbiArIDEgKyBzdHJsZW4gKExJ QlRIUkVBRF9EQl9TTykgKyAxID4gc2l6ZW9mIChwYXRoKSkKKwkgICAgewor CSAgICAgIGNoYXIgKmNwID0geG1hbGxvYyAobGVuICsgMSk7CisJICAgICAg bWVtY3B5IChjcCwgc2VhcmNoX3BhdGgsIGxlbik7CisJICAgICAgY3BbbGVu XSA9ICdcMCc7CisJICAgICAgd2FybmluZyAoImxpYnRocmVhZF9kYl9zZWFy Y2hfcGF0aCBjb21wb25lbnQgdG9vIGxvbmcsICIKKwkJICAgICAgICJpZ25v cmVkOiAlcy4iLCBjcCk7CisJICAgICAgZnJlZSAoY3ApOworCSAgICAgIHNl YXJjaF9wYXRoICs9IGxlbiArIDE7CisJICAgICAgY29udGludWU7CisJICAg IH0KKwkgIG1lbWNweSAocGF0aCwgc2VhcmNoX3BhdGgsIGxlbik7CisJICBw YXRoW2xlbl0gPSAnXDAnOworCSAgc2VhcmNoX3BhdGggKz0gbGVuICsgMTsK Kwl9CisgICAgICBlbHNlCisJeworCSAgc2l6ZV90IGxlbiA9IHN0cmxlbiAo c2VhcmNoX3BhdGgpOworCisJICBpZiAobGVuICsgMSArIHN0cmxlbiAoTElC VEhSRUFEX0RCX1NPKSArIDEgPiBzaXplb2YgKHBhdGgpKQorCSAgICB7CisJ ICAgICAgd2FybmluZyAoImxpYnRocmVhZF9kYl9zZWFyY2hfcGF0aCBjb21w b25lbnQgdG9vIGxvbmcsIgorCQkgICAgICAgIiBpZ25vcmVkOiAlcy4iLCBz ZWFyY2hfcGF0aCk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIG1lbWNw eSAocGF0aCwgc2VhcmNoX3BhdGgsIGxlbiArIDEpOworCSAgc2VhcmNoX3Bh dGggKz0gbGVuOworCX0KKyAgICAgIHN0cmNhdCAocGF0aCwgIi8iKTsKKyAg ICAgIHN0cmNhdCAocGF0aCwgTElCVEhSRUFEX0RCX1NPKTsKKyAgICAgIGlm IChkZWJ1Z190aHJlYWRzKQorCWZwcmludGYgKHN0ZGVyciwgInRocmVhZF9k Yl9sb2FkX3NlYXJjaCB0cnlpbmcgJXNcbiIsIHBhdGgpOworICAgICAgaWYg KHRyeV90aHJlYWRfZGJfbG9hZCAocGF0aCkpCisJeworCSAgcmMgPSAxOwor CSAgYnJlYWs7CisJfQorICAgIH0KKyAgaWYgKHJjID09IDApCisgICAgcmMg PSB0cnlfdGhyZWFkX2RiX2xvYWQgKExJQlRIUkVBRF9EQl9TTyk7CisKKyAg aWYgKGRlYnVnX3RocmVhZHMpCisgICAgZnByaW50ZiAoc3RkZXJyLCAidGhy ZWFkX2RiX2xvYWRfc2VhcmNoIHJldHVybmluZyAlZFxuIiwgcmMpOworICBy ZXR1cm4gcmM7CiB9CiAKIGludAogdGhyZWFkX2RiX2luaXQgKGludCB1c2Vf ZXZlbnRzKQogewotICBpbnQgZXJyOwogICBzdHJ1Y3QgcHJvY2Vzc19pbmZv ICpwcm9jID0gY3VycmVudF9wcm9jZXNzICgpOwotICBzdHJ1Y3QgcHJvY2Vz c19pbmZvX3ByaXZhdGUgKnByaXYgPSBwcm9jLT5wcml2YXRlOwogCiAgIC8q IEZJWE1FIGRyb3cvMjAwNC0xMC0xNjogVGhpcyBpcyB0aGUgIm92ZXJhbGwg cHJvY2VzcyBJRCIsIHdoaWNoCiAgICAgIEdOVS9MaW51eCBjYWxscyB0Z2lk LCAidGhyZWFkIGdyb3VwIElEIi4gIFdoZW4gd2Ugc3VwcG9ydApAQCAtNDMz LDI3ICs2MzEsNjggQEAgdGhyZWFkX2RiX2luaXQgKGludCB1c2VfZXZlbnRz KQogCiAgIHRocmVhZF9kYl91c2VfZXZlbnRzID0gdXNlX2V2ZW50czsKIAot ICBlcnIgPSB0ZF90YV9uZXcgKCZwcml2LT5wcm9jX2hhbmRsZSwgJnByaXYt PnRocmVhZF9hZ2VudCk7Ci0gIHN3aXRjaCAoZXJyKQorICBpZiAodGhyZWFk X2RiX2xvYWRfc2VhcmNoICgpKQogICAgIHsKLSAgICBjYXNlIFREX05PTElC VEhSRUFEOgotICAgICAgLyogTm8gdGhyZWFkIGxpYnJhcnkgd2FzIGRldGVj dGVkLiAgKi8KLSAgICAgIHJldHVybiAwOwotCi0gICAgY2FzZSBURF9PSzoK LSAgICAgIC8qIFRoZSB0aHJlYWQgbGlicmFyeSB3YXMgZGV0ZWN0ZWQuICAq LwotCiAgICAgICBpZiAodXNlX2V2ZW50cyAmJiB0aHJlYWRfZGJfZW5hYmxl X3JlcG9ydGluZyAoKSA9PSAwKQotCXJldHVybiAwOworCXsKKwkgIC8qIEtl ZXAgdHJ5aW5nOyBtYXliZSBldmVudCByZXBvcnRpbmcgd2lsbCB3b3JrIGxh dGVyLiAgKi8KKwkgIHRocmVhZF9kYl9mcmVlIChwcm9jKTsKKwkgIHJldHVy biAwOworCX0KICAgICAgIHRocmVhZF9kYl9maW5kX25ld190aHJlYWRzICgp OwogICAgICAgdGhyZWFkX2RiX2xvb2tfdXBfc3ltYm9scyAoKTsKICAgICAg IHByb2MtPmFsbF9zeW1ib2xzX2xvb2tlZF91cCA9IDE7CiAgICAgICByZXR1 cm4gMTsKKyAgICB9CiAKLSAgICBkZWZhdWx0OgotICAgICAgd2FybmluZyAo ImVycm9yIGluaXRpYWxpemluZyB0aHJlYWRfZGIgbGlicmFyeTogJXMiLAot CSAgICAgICB0aHJlYWRfZGJfZXJyX3N0ciAoZXJyKSk7CisgIHJldHVybiAw OworfQorCisvKiBEaXNjb25uZWN0IGZyb20gbGlidGhyZWFkX2RiIGFuZCBm cmVlIHJlc291cmNlcy4gICovCisKK3ZvaWQKK3RocmVhZF9kYl9mcmVlIChz dHJ1Y3QgcHJvY2Vzc19pbmZvICpwcm9jKQoreworICBzdHJ1Y3QgdGhyZWFk X2RiICp0aHJlYWRfZGIgPSBwcm9jLT5wcml2YXRlLT50aHJlYWRfZGI7Cisg IGlmICh0aHJlYWRfZGIpCisgICAgeworICAgICAgdGRfZXJyX2UgKCp0ZF90 YV9kZWxldGVfcCkgKHRkX3RocmFnZW50X3QgKik7CisKKyAgICAgIHRkX3Rh X2RlbGV0ZV9wID0gZGxzeW0gKHRocmVhZF9kYi0+aGFuZGxlLCAidGRfdGFf ZGVsZXRlIik7CisgICAgICBpZiAodGRfdGFfZGVsZXRlX3AgIT0gTlVMTCkK KwkoKnRkX3RhX2RlbGV0ZV9wKSAodGhyZWFkX2RiLT50aHJlYWRfYWdlbnQp OworCisgICAgICBkbGNsb3NlICh0aHJlYWRfZGItPmhhbmRsZSk7CisgICAg ICBmcmVlICh0aHJlYWRfZGIpOworICAgICAgcHJvYy0+cHJpdmF0ZS0+dGhy ZWFkX2RiID0gTlVMTDsKKyAgICB9Cit9CisKKy8qIEhhbmRsZSAic2V0IGxp YnRocmVhZC1kYi1zZWFyY2gtcGF0aCIgbW9uaXRvciBjb21tYW5kIGFuZCBy ZXR1cm4gMS4KKyAgIEZvciBhbnkgb3RoZXIgY29tbWFuZCwgcmV0dXJuIDAu ICAqLworCitpbnQKK3RocmVhZF9kYl9oYW5kbGVfbW9uaXRvcl9jb21tYW5k IChjaGFyICptb24pCit7CisgIGlmIChzdHJuY21wIChtb24sICJzZXQgbGli dGhyZWFkLWRiLXNlYXJjaC1wYXRoICIsIDI5KSA9PSAwKQorICAgIHsKKyAg ICAgIGNvbnN0IGNoYXIgKmNwID0gbW9uICsgMjk7CisKKyAgICAgIGlmIChs aWJ0aHJlYWRfZGJfc2VhcmNoX3BhdGggIT0gTlVMTCkKKwlmcmVlIChsaWJ0 aHJlYWRfZGJfc2VhcmNoX3BhdGgpOworCisgICAgICAvKiBTa2lwIGxlYWRp bmcgc3BhY2UgKGlmIGFueSkuICAqLworICAgICAgd2hpbGUgKGlzc3BhY2Ug KCpjcCkpCisJKytjcDsKKworICAgICAgbGlidGhyZWFkX2RiX3NlYXJjaF9w YXRoID0geHN0cmR1cCAoY3ApOworCisgICAgICBtb25pdG9yX291dHB1dCAo ImxpYnRocmVhZC1kYi1zZWFyY2gtcGF0aCBzZXQgdG8gYCIpOworICAgICAg bW9uaXRvcl9vdXRwdXQgKGxpYnRocmVhZF9kYl9zZWFyY2hfcGF0aCk7Cisg ICAgICBtb25pdG9yX291dHB1dCAoIidcbiIpOworICAgICAgcmV0dXJuIDE7 CiAgICAgfQogCisgIC8qIFRlbGwgc2VydmVyLmMgdG8gcGVyZm9ybSBkZWZh dWx0IHByb2Nlc3NpbmcuICAqLwogICByZXR1cm4gMDsKIH0KSW5kZXg6IGdk YnNlcnZlci9jb25maWcuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvY29uZmlnLmluLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXUgLXAgLXUgLXIxLjIz IGNvbmZpZy5pbgotLS0gZ2Ric2VydmVyL2NvbmZpZy5pbgkyMiBBdWcgMjAw OSAxNjo1Njo0MiAtMDAwMAkxLjIzCisrKyBnZGJzZXJ2ZXIvY29uZmlnLmlu CTggT2N0IDIwMDkgMTk6MTQ6MjUgLTAwMDAKQEAgLTEzMCw5ICsxMzAsNiBA QAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvd2FpdC5o PiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NZU19XQUlUX0gKIAot LyogRGVmaW5lIGlmIHRkX3Rocl90bHNfZ2V0X2FkZHIgaXMgYXZhaWxhYmxl LiAqLwotI3VuZGVmIEhBVkVfVERfVEhSX1RMU19HRVRfQUREUgotCiAvKiBE ZWZpbmUgaWYgVERfVkVSU0lPTiBpcyBhdmFpbGFibGUuICovCiAjdW5kZWYg SEFWRV9URF9WRVJTSU9OCiAKSW5kZXg6IGdkYnNlcnZlci9jb25maWd1cmUK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dkYi9nZGJzZXJ2ZXIvY29uZmlndXJlLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjQwCmRpZmYgLXUgLXAgLXUgLXIxLjQwIGNvbmZpZ3VyZQotLS0gZ2Ri c2VydmVyL2NvbmZpZ3VyZQkyMiBBdWcgMjAwOSAxNjo1Njo0MiAtMDAwMAkx LjQwCisrKyBnZGJzZXJ2ZXIvY29uZmlndXJlCTggT2N0IDIwMDkgMTk6MTQ6 MjUgLTAwMDAKQEAgLTQyMTAsMTI1ICs0MjEwLDcgQEAgc3J2X2xpYnM9CiBV U0VfVEhSRUFEX0RCPQogCiBpZiB0ZXN0ICIkc3J2X2xpbnV4X3RocmVhZF9k YiIgPSAieWVzIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJ0aHJlYWRfZGIiID4m NQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnRocmVhZF9kYi4uLiAi ID4mNjsgfQotaWYgdGVzdCAiJHtzcnZfY3ZfdGhyZWFkX2RiK3NldH0iID0g c2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVs c2UKLSAgb2xkX0xJQlM9IiRMSUJTIgotICBMSUJTPSIkTElCUyAtbHRocmVh ZF9kYiIKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotdm9pZCBwc19wZ2xv YmFsX2xvb2t1cCgpIHt9Ci0gICB2b2lkIHBzX3BkcmVhZCgpIHt9Ci0gICB2 b2lkIHBzX3Bkd3JpdGUoKSB7fQotICAgdm9pZCBwc19sZ2V0cmVncygpIHt9 Ci0gICB2b2lkIHBzX2xzZXRyZWdzKCkge30KLSAgIHZvaWQgcHNfbGdldGZw cmVncygpIHt9Ci0gICB2b2lkIHBzX2xzZXRmcHJlZ3MoKSB7fQotICAgdm9p ZCBwc19nZXRfdGhyZWFkX2FyZWEoKSB7fQotICAgdm9pZCBwc19nZXRwaWQo KSB7fQotaW50Ci1tYWluICgpCi17Ci10ZF90YV9uZXcoKTsKLSAgOwotICBy ZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJ TkVOTyI7IHRoZW4gOgotICBzcnZfY3ZfdGhyZWFkX2RiPSItbHRocmVhZF9k YiIKLWVsc2UKLSAgc3J2X2N2X3RocmVhZF9kYj1ubwotCi0gaWYgdGVzdCAi JHByZWZpeCIgPSAiL3VzciIgfHwgdGVzdCAiJHByZWZpeCIgPSAiTk9ORSI7 IHRoZW4KLSAgdGhyZWFkX2RiPSIvbGliL2xpYnRocmVhZF9kYi5zby4xIgot IGVsc2UKLSAgdGhyZWFkX2RiPSckcHJlZml4L2xpYi9saWJ0aHJlYWRfZGIu c28uMScKLSBmaQotIExJQlM9IiRvbGRfTElCUyBgZXZhbCBlY2hvICIkdGhy ZWFkX2RiImAiCi0gY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotdm9pZCBwc19w Z2xvYmFsX2xvb2t1cCgpIHt9Ci0gICB2b2lkIHBzX3BkcmVhZCgpIHt9Ci0g ICB2b2lkIHBzX3Bkd3JpdGUoKSB7fQotICAgdm9pZCBwc19sZ2V0cmVncygp IHt9Ci0gICB2b2lkIHBzX2xzZXRyZWdzKCkge30KLSAgIHZvaWQgcHNfbGdl dGZwcmVncygpIHt9Ci0gICB2b2lkIHBzX2xzZXRmcHJlZ3MoKSB7fQotICAg dm9pZCBwc19nZXRfdGhyZWFkX2FyZWEoKSB7fQotICAgdm9pZCBwc19nZXRw aWQoKSB7fQotaW50Ci1tYWluICgpCi17Ci10ZF90YV9uZXcoKTsKLSAgOwot ICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAi JExJTkVOTyI7IHRoZW4gOgotICBzcnZfY3ZfdGhyZWFkX2RiPSIkdGhyZWFk X2RiIgotZWxzZQotICBzcnZfY3ZfdGhyZWFkX2RiPW5vCi1maQotcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAg Y29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLXJt IC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAot ICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gTElC Uz0iJG9sZF9MSUJTIgotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRzcnZfY3ZfdGhyZWFkX2RiIiA+ JjUKLSRhc19lY2hvICIkc3J2X2N2X3RocmVhZF9kYiIgPiY2OyB9Ci0gIGlm IHRlc3QgIiRzcnZfY3ZfdGhyZWFkX2RiIiA9IG5vOyB0aGVuCi0gICAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5H OiBDb3VsZCBub3QgZmluZCBsaWJ0aHJlYWRfZGIuIiA+JjUKLSRhc19lY2hv ICIkYXNfbWU6IFdBUk5JTkc6IENvdWxkIG5vdCBmaW5kIGxpYnRocmVhZF9k Yi4iID4mMjt9Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBXQVJOSU5HOiBEaXNhYmxpbmcgdGhyZWFkIHN1cHBvcnQg aW4gZ2Ric2VydmVyLiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5H OiBEaXNhYmxpbmcgdGhyZWFkIHN1cHBvcnQgaW4gZ2Ric2VydmVyLiIgPiYy O30KLSAgICBzcnZfbGludXhfdGhyZWFkX2RiPW5vCi0gIGVsc2UKLSAgICBz cnZfbGlicz0iJHNydl9jdl90aHJlYWRfZGIiCi0gICAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdGhy ZWFkX2RiX3Rsc19nZXRfYWRkciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2lu ZyBmb3IgdGhyZWFkX2RiX3Rsc19nZXRfYWRkci4uLiAiID4mNjsgfQotaWYg dGVzdCAiJHtzcnZfY3ZfdGxzX2dldF9hZGRyK3NldH0iID0gc2V0OyB0aGVu IDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgb2xk X0xJQlM9IiRMSUJTIgotICBMSUJTPSIkTElCUyAkc3J2X2N2X3RocmVhZF9k YiIKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotdm9pZCBwc19wZ2xvYmFs X2xvb2t1cCgpIHt9Ci0gICAgdm9pZCBwc19wZHJlYWQoKSB7fQotICAgIHZv aWQgcHNfcGR3cml0ZSgpIHt9Ci0gICAgdm9pZCBwc19sZ2V0cmVncygpIHt9 Ci0gICAgdm9pZCBwc19sc2V0cmVncygpIHt9Ci0gICAgdm9pZCBwc19sZ2V0 ZnByZWdzKCkge30KLSAgICB2b2lkIHBzX2xzZXRmcHJlZ3MoKSB7fQotICAg IHZvaWQgcHNfZ2V0X3RocmVhZF9hcmVhKCkge30KLSAgICB2b2lkIHBzX2dl dHBpZCgpIHt9Ci1pbnQKLW1haW4gKCkKLXsKLXRkX3Rocl90bHNfZ2V0X2Fk ZHIoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5f Y190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBzcnZfY3ZfdGxzX2dl dF9hZGRyPXllcwotZWxzZQotICBzcnZfY3ZfdGxzX2dldF9hZGRyPW5vCi1m aQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQK LSAgTElCUz0iJG9sZF9MSUJTIgotCi1maQoteyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRzcnZfY3ZfdGxzX2dl dF9hZGRyIiA+JjUKLSRhc19lY2hvICIkc3J2X2N2X3Rsc19nZXRfYWRkciIg PiY2OyB9Ci0gIGZpCisgIHNydl9saWJzPSItbGRsIgogICBvbGRfTERGTEFH Uz0iJExERkxBR1MiCiAgIExERkxBR1M9IiRMREZMQUdTIC1yZHluYW1pYyIK ICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dApAQCAtNDM1MSw5ICs0MjMzLDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5l cnIgY29uZnRlc3QuJGFjX29iagogICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBj b25mdGVzdC4kYWNfZXh0CiAKICAgTERGTEFHUz0iJG9sZF9MREZMQUdTIgot ZmkKIAotaWYgdGVzdCAiJHNydl9saW51eF90aHJlYWRfZGIiID0gInllcyI7 IHRoZW4KICAgc3J2X3RocmVhZF9kZXBmaWxlcz0idGhyZWFkLWRiLm8gcHJv Yy1zZXJ2aWNlLm8iCiAgIFVTRV9USFJFQURfREI9Ii1EVVNFX1RIUkVBRF9E QiIKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBmb3IgVERfVkVSU0lPTiIgPiY1CkBAIC00Mzg2LDEyICs0 MjY2LDYgQEAgJGFzX2VjaG8gIiRnZGJzcnZfY3ZfaGF2ZV90ZF92ZXJzaW9u IiA+JgogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9URF9WRVJTSU9OIDEiID4+ Y29uZmRlZnMuaAogCiAgIGZpCi0KLSAgaWYgdGVzdCAiJHNydl9jdl90bHNf Z2V0X2FkZHIiID0geWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhB VkVfVERfVEhSX1RMU19HRVRfQUREUiAxIiA+PmNvbmZkZWZzLmgKLQotICBm aQogZmkKIAogaWYgdGVzdCAiJHNydl94bWxmaWxlcyIgIT0gIiI7IHRoZW4K --001636ed6776aae56b0475719186--