From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5047 invoked by alias); 25 Mar 2009 07:17:39 -0000 Received: (qmail 4635 invoked by uid 22791); 25 Mar 2009 07:17:34 -0000 X-SWARE-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from ti-out-0910.google.com (HELO ti-out-0910.google.com) (209.85.142.190) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 25 Mar 2009 07:17:26 +0000 Received: by ti-out-0910.google.com with SMTP id a1so1934209tib.12 for ; Wed, 25 Mar 2009 00:17:22 -0700 (PDT) MIME-Version: 1.0 Received: by 10.110.7.5 with SMTP id 5mr11872889tig.9.1237965442327; Wed, 25 Mar 2009 00:17:22 -0700 (PDT) In-Reply-To: References: Date: Wed, 25 Mar 2009 07:19:00 -0000 Message-ID: Subject: Re: [RFA] Submit process record and replay fourth time, 3/8 From: Hui Zhu To: "gdb-patches@sourceware.org" Cc: Pedro Alves , Marc Khouzam , Michael Snyder , Thiago Jung Bauermann , Eli Zaretskii , paawan1982@yahoo.com Content-Type: multipart/mixed; boundary=001485f870566f26260465ec4a90 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-03/txt/msg00542.txt.bz2 --001485f870566f26260465ec4a90 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 3633 New patch change "record_gdb_operation_disable_set" to: struct cleanup * record_gdb_operation_disable_set (void) { struct cleanup *old_cleanups =3D NULL; if (!record_gdb_operation_disable) { old_cleanups =3D make_cleanup_restore_integer (&record_gdb_operation_disable); record_gdb_operation_disable =3D 1; } return old_cleanups; } Because the old one work not very well if call record_gdb_operation_disable_set a lot of time before clean it. Thanks, Hui On Sun, Mar 22, 2009 at 00:01, Hui Zhu wrote: > > This patch add the process record and replay target. =A0This is the core > part of process record and replay. > > This time, this patch was updated a lot of part according to the ideas of= Pedro. > > 2009-03-21 =A0Hui Zhu =A0 > > =A0 =A0 =A0 =A0Process record and replay target. > > =A0 =A0 =A0 =A0* Makefile.in (record.c): New file. > =A0 =A0 =A0 =A0* record.c, record.h: New file. > > =A0 =A0 =A0 =A02008-12-28 =A0Michael Snyder =A0 > =A0 =A0 =A0 =A0* Comments, spelling, white space clean-ups. > > =A0 =A0 =A0 =A02008-12-26 =A0Michael Snyder =A0 > =A0 =A0 =A0 =A0* record.h: Don't export record_not_record. > =A0 =A0 =A0 =A0* record.c (record_not_record): Rename to in_record_wait. > =A0 =A0 =A0 =A0(record_not_record_set): Rename to in_record_wait_set. > =A0 =A0 =A0 =A0(record_not_record_cleanup): Rename to in_record_wait_clea= nup. > =A0 =A0 =A0 =A0(record_store_registers): Check in_record_wait flag. > =A0 =A0 =A0 =A0(record_xfer_partial): Ditto. > > =A0 =A0 =A0 =A02008-10-07 =A0Michael Snyder =A0 > =A0 =A0 =A0 =A0* record.h (record_exec_direction): Delete. > =A0 =A0 =A0 =A0(RECORD_IS_REPLAY): Consult infrun global direction variab= le. > =A0 =A0 =A0 =A0* record.c: (record_wait_cleanups): Use infrun state varia= ble. > =A0 =A0 =A0 =A0(record_wait): Ditto. > =A0 =A0 =A0 =A0(record_get_exec_direction, record_set_exec_direction): Re= move. > =A0 =A0 =A0 =A0(record_can_execute_reverse): New target method. > > =A0 =A0 =A0 =A02008-10-06 =A0Michael Snyder =A0 > =A0 =A0 =A0 =A0* record.c (displaced_step_fixup): Remove. > =A0 =A0 =A0 =A0(record_message_cleanups): Remove displaced step handling. > =A0 =A0 =A0 =A0(record_message): Remove displaced step handling. > > =A0 =A0 =A0 =A02008-10-06 =A0Michael Snyder =A0 > =A0 =A0 =A0 =A0* record.c (record_regcache_raw_write_regnum): Remove. > > =A0 =A0 =A0 =A02008-10-05 =A0Michael Snyder =A0 > =A0 =A0 =A0 =A0* record.c, record.h: Rename execdir to exec_direction. > > =A0 =A0 =A0 =A02008-10-02 =A0Michael Snyder =A0 > =A0 =A0 =A0 =A0* record.c (record_open): Call target_can_async_p() instead > =A0 =A0 =A0 =A0of relying on a global variable. > =A0 =A0 =A0 =A0* record.h (record_linux_async_permitted): Delete. > > =A0 =A0 =A0 =A02008-09-19 =A0Michael Snyder =A0 > =A0 =A0 =A0 =A0* record.c (trivial): Fix two commas in a comment. > =A0 =A0 =A0 =A0* record.c (record_wait): On end of record log, return > =A0 =A0 =A0 =A0TARGET_WAITKIND_NO_HISTORY and let infrun decide what to d= o. > > =A0 =A0 =A0 =A02008-09-06 =A0Michael Snyder =A0 > =A0 =A0 =A0 =A0* record.c: Comment and message string cleanup. > =A0 =A0 =A0 =A0Add some function header comments. > > =A0 =A0 =A0 =A02008-08-01 =A0Michael Snyder =A0 > =A0 =A0 =A0 =A0* record.c (_initialize_record): Clarify language in help > =A0 =A0 =A0 =A0strings. > =A0 =A0 =A0 =A0Fix up comment format (period must be followed by two spac= es). --001485f870566f26260465ec4a90 Content-Type: text/plain; charset=US-ASCII; name="3-record_target.txt" Content-Disposition: attachment; filename="3-record_target.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fspp1spf1 Content-length: 51277 LS0tCiBNYWtlZmlsZS5pbiB8ICAgIDUgCiByZWNvcmQuYyAgICB8IDEyMTkg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiByZWNvcmQuaCAgICB8ICAgNzQgKysrCiAzIGZp bGVzIGNoYW5nZWQsIDEyOTYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo LSkKCi0tLSBhL01ha2VmaWxlLmluCisrKyBiL01ha2VmaWxlLmluCkBAIC02 NjAsNyArNjYwLDggQEAgU0ZJTEVTID0gYWRhLWV4cC55IGFkYS1sYW5nLmMg YWRhLXR5cGVwcgogCXZhbGFyaXRoLmMgdmFsb3BzLmMgdmFscHJpbnQuYyB2 YWx1ZS5jIHZhcm9iai5jIHZlYy5jIFwKIAl3cmFwcGVyLmMgXAogCXhtbC10 ZGVzYy5jIHhtbC1zdXBwb3J0LmMgXAotCWluZmVyaW9yLmMgZ2RiX3VzbGVl cC5jCisJaW5mZXJpb3IuYyBnZGJfdXNsZWVwLmMgXAorCXJlY29yZC5jCiAK IExJTlRGSUxFUyA9ICQoU0ZJTEVTKSAkKFlZRklMRVMpICQoQ09ORklHX1NS Q1MpIGluaXQuYwogCkBAIC04MTIsNyArODEzLDcgQEAgQ09NTU9OX09CUyA9 ICQoREVQRklMRVMpICQoQ09ORklHX09CUykgJAogCXNvbGliLm8gc29saWIt bnVsbC5vIFwKIAlwcm9sb2d1ZS12YWx1ZS5vIG1lbW9yeS1tYXAubyB4bWwt c3VwcG9ydC5vIFwKIAl0YXJnZXQtZGVzY3JpcHRpb25zLm8gdGFyZ2V0LW1l bW9yeS5vIHhtbC10ZGVzYy5vIHhtbC1idWlsdGluLm8gXAotCWluZmVyaW9y Lm8gb3NkYXRhLm8gZ2RiX3VzbGVlcC5vCisJaW5mZXJpb3IubyBvc2RhdGEu byBnZGJfdXNsZWVwLm8gcmVjb3JkLm8KIAogVFNPQlMgPSBpbmZsb3cubwog Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjb3JkLmMKQEAgLTAsMCArMSwxMjE5 IEBACisvKiBQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBmb3Ig R0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgKEMpIDIw MDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAg IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJn ZGJjbWQuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgImdk YnRocmVhZC5oIgorI2luY2x1ZGUgImV2ZW50LXRvcC5oIgorI2luY2x1ZGUg ImV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJyZWNvcmQuaCIKKworI2luY2x1 ZGUgPHNpZ25hbC5oPgorCisjZGVmaW5lIERFRkFVTFRfUkVDT1JEX0lOU05f TUFYX05VTQkyMDAwMDAKKworI2RlZmluZSBSRUNPUkRfSVNfUkVQTEFZIFwK KyAgICAgKHJlY29yZF9saXN0LT5uZXh0IHx8IGV4ZWN1dGlvbl9kaXJlY3Rp b24gPT0gRVhFQ19SRVZFUlNFKQorCisvKiBUaGlzIGlzIHRoZSBkZWJ1ZyBz d2l0Y2ggZm9yIHByb2Nlc3MgcmVjb3JkLiAgKi8KK2ludCByZWNvcmRfZGVi dWcgPSAwOworCisvKiBUaGlzIGlzIHJlZ2NhY2hlIGlzIHVzZWQgYnkgcmVj b3JkX21lc3NhZ2UsIHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZworICAgYW5k IGdkYmFyY2hfcHJvY2Vzc19yZWNvcmQgdG8gaW5jcmVhc2UgdGhlIHNwZWVk IHRoYXQgYWNjZXNzIHRvIHRoZQorICAgdmFsdWUgb2YgdGhlIHJlZ2lzdGVy cy4gICovCitzdHJ1Y3QgcmVnY2FjaGUgKnJlY29yZF9yZWdjYWNoZSA9IE5V TEw7CisKKy8qIFRoZXNlIGxpc3QgaXMgZm9yIGV4ZWN1dGlvbiBsb2cuICAq Lworc3RhdGljIHJlY29yZF90IHJlY29yZF9maXJzdDsKK3N0YXRpYyByZWNv cmRfdCAqcmVjb3JkX2xpc3QgPSAmcmVjb3JkX2ZpcnN0Oworc3RhdGljIHJl Y29yZF90ICpyZWNvcmRfYXJjaF9saXN0X2hlYWQgPSBOVUxMOworc3RhdGlj IHJlY29yZF90ICpyZWNvcmRfYXJjaF9saXN0X3RhaWwgPSBOVUxMOworCisv KiAxIGFzayB1c2VyLiAwIGF1dG8gZGVsZXRlIHRoZSBsYXN0IHJlY29yZF90 LiAgKi8KK3N0YXRpYyBpbnQgcmVjb3JkX3N0b3BfYXRfbGltaXQgPSAxOwor c3RhdGljIGludCByZWNvcmRfaW5zbl9tYXhfbnVtID0gREVGQVVMVF9SRUNP UkRfSU5TTl9NQVhfTlVNOworc3RhdGljIGludCByZWNvcmRfaW5zbl9udW0g PSAwOworCisvKiBUaGUgdGFyZ2V0X29wcyBvZiBwcm9jZXNzIHJlY29yZC4g ICovCitzdGF0aWMgc3RydWN0IHRhcmdldF9vcHMgcmVjb3JkX29wczsKKwor LyogVGhlIGJlbmVhdGggZnVuY3Rpb24gcG9pbnRlcnMuICAqLworc3RhdGlj IHN0cnVjdCB0YXJnZXRfb3BzICpyZWNvcmRfYmVuZWF0aF90b19yZXN1bWVf b3BzOworc3RhdGljIHZvaWQgKCpyZWNvcmRfYmVuZWF0aF90b19yZXN1bWUp IChzdHJ1Y3QgdGFyZ2V0X29wcyAqLCBwdGlkX3QsIGludCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB0YXJnZXRf c2lnbmFsKTsKK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyAqcmVjb3JkX2Jl bmVhdGhfdG9fd2FpdF9vcHM7CitzdGF0aWMgcHRpZF90ICgqcmVjb3JkX2Jl bmVhdGhfdG9fd2FpdCkgKHN0cnVjdCB0YXJnZXRfb3BzICosIHB0aWRfdCwK KwkJCQkJIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyAqKTsKK3N0YXRpYyBz dHJ1Y3QgdGFyZ2V0X29wcyAqcmVjb3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVn aXN0ZXJzX29wczsKK3N0YXRpYyB2b2lkICgqcmVjb3JkX2JlbmVhdGhfdG9f c3RvcmVfcmVnaXN0ZXJzKSAoc3RydWN0IHRhcmdldF9vcHMgKiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHJlZ2NhY2hlICosCisJCQkJCQkgIGludCByZWdubyk7CitzdGF0 aWMgc3RydWN0IHRhcmdldF9vcHMgKnJlY29yZF9iZW5lYXRoX3RvX3hmZXJf cGFydGlhbF9vcHM7CitzdGF0aWMgTE9OR0VTVCAoKnJlY29yZF9iZW5lYXRo X3RvX3hmZXJfcGFydGlhbCkgKHN0cnVjdCB0YXJnZXRfb3BzICogb3BzLAor CQkJCQkJICBlbnVtIHRhcmdldF9vYmplY3Qgb2JqZWN0LAorCQkJCQkJICBj b25zdCBjaGFyICphbm5leCwKKwkJCQkJCSAgZ2RiX2J5dGUgKiByZWFkYnVm LAorCQkJCQkJICBjb25zdCBnZGJfYnl0ZSAqIHdyaXRlYnVmLAorCQkJCQkJ ICBVTE9OR0VTVCBvZmZzZXQsCisJCQkJCQkgIExPTkdFU1QgbGVuKTsKK3N0 YXRpYyBpbnQgKCpyZWNvcmRfYmVuZWF0aF90b19pbnNlcnRfYnJlYWtwb2lu dCkgKHN0cnVjdCBicF90YXJnZXRfaW5mbyAqKTsKK3N0YXRpYyBpbnQgKCpy ZWNvcmRfYmVuZWF0aF90b19yZW1vdmVfYnJlYWtwb2ludCkgKHN0cnVjdCBi cF90YXJnZXRfaW5mbyAqKTsKKworc3RhdGljIHZvaWQKK3JlY29yZF9saXN0 X3JlbGVhc2UgKHJlY29yZF90ICogcmVjKQoreworICByZWNvcmRfdCAqdG1w OworCisgIGlmICghcmVjKQorICAgIHJldHVybjsKKworICB3aGlsZSAocmVj LT5uZXh0KQorICAgIHsKKyAgICAgIHJlYyA9IHJlYy0+bmV4dDsKKyAgICB9 CisKKyAgd2hpbGUgKHJlYy0+cHJldikKKyAgICB7CisgICAgICB0bXAgPSBy ZWM7CisgICAgICByZWMgPSByZWMtPnByZXY7CisgICAgICBpZiAodG1wLT50 eXBlID09IHJlY29yZF9yZWcpCisJeGZyZWUgKHRtcC0+dS5yZWcudmFsKTsK KyAgICAgIGVsc2UgaWYgKHRtcC0+dHlwZSA9PSByZWNvcmRfbWVtKQorCXhm cmVlICh0bXAtPnUubWVtLnZhbCk7CisgICAgICB4ZnJlZSAodG1wKTsKKyAg ICB9CisKKyAgaWYgKHJlYyAhPSAmcmVjb3JkX2ZpcnN0KQorICAgIHhmcmVl IChyZWMpOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX2xpc3RfcmVsZWFz ZV9uZXh0ICh2b2lkKQoreworICByZWNvcmRfdCAqcmVjID0gcmVjb3JkX2xp c3Q7CisgIHJlY29yZF90ICp0bXAgPSByZWMtPm5leHQ7CisgIHJlYy0+bmV4 dCA9IE5VTEw7CisgIHdoaWxlICh0bXApCisgICAgeworICAgICAgcmVjID0g dG1wLT5uZXh0OworICAgICAgaWYgKHRtcC0+dHlwZSA9PSByZWNvcmRfcmVn KQorCXJlY29yZF9pbnNuX251bS0tOworICAgICAgZWxzZSBpZiAodG1wLT50 eXBlID09IHJlY29yZF9yZWcpCisJeGZyZWUgKHRtcC0+dS5yZWcudmFsKTsK KyAgICAgIGVsc2UgaWYgKHRtcC0+dHlwZSA9PSByZWNvcmRfbWVtKQorCXhm cmVlICh0bXAtPnUubWVtLnZhbCk7CisgICAgICB4ZnJlZSAodG1wKTsKKyAg ICAgIHRtcCA9IHJlYzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCityZWNv cmRfbGlzdF9yZWxlYXNlX2ZpcnN0ICh2b2lkKQoreworICByZWNvcmRfdCAq dG1wID0gTlVMTDsKKyAgZW51bSByZWNvcmRfdHlwZSB0eXBlOworCisgIGlm ICghcmVjb3JkX2ZpcnN0Lm5leHQpCisgICAgcmV0dXJuOworCisgIHdoaWxl ICgxKQorICAgIHsKKyAgICAgIHR5cGUgPSByZWNvcmRfZmlyc3QubmV4dC0+ dHlwZTsKKworICAgICAgaWYgKHR5cGUgPT0gcmVjb3JkX3JlZykKKwl4ZnJl ZSAocmVjb3JkX2ZpcnN0Lm5leHQtPnUucmVnLnZhbCk7CisgICAgICBlbHNl IGlmICh0eXBlID09IHJlY29yZF9tZW0pCisJeGZyZWUgKHJlY29yZF9maXJz dC5uZXh0LT51Lm1lbS52YWwpOworICAgICAgdG1wID0gcmVjb3JkX2ZpcnN0 Lm5leHQ7CisgICAgICByZWNvcmRfZmlyc3QubmV4dCA9IHRtcC0+bmV4dDsK KyAgICAgIHhmcmVlICh0bXApOworCisgICAgICBpZiAoIXJlY29yZF9maXJz dC5uZXh0KQorCXsKKwkgIGdkYl9hc3NlcnQgKHJlY29yZF9pbnNuX251bSA9 PSAxKTsKKwkgIGJyZWFrOworCX0KKworICAgICAgcmVjb3JkX2ZpcnN0Lm5l eHQtPnByZXYgPSAmcmVjb3JkX2ZpcnN0OworCisgICAgICBpZiAodHlwZSA9 PSByZWNvcmRfZW5kKQorCWJyZWFrOworICAgIH0KKworICByZWNvcmRfaW5z bl9udW0tLTsKK30KKworLyogQWRkIGEgcmVjb3JkX3QgdG8gcmVjb3JkX2Fy Y2hfbGlzdC4gICovCitzdGF0aWMgdm9pZAorcmVjb3JkX2FyY2hfbGlzdF9h ZGQgKHJlY29yZF90ICogcmVjKQoreworICBpZiAocmVjb3JkX2RlYnVnID4g MSkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQki UHJvY2VzcyByZWNvcmQ6IHJlY29yZF9hcmNoX2xpc3RfYWRkICVzLlxuIiwK KwkJCWhvc3RfYWRkcmVzc190b19zdHJpbmcgKHJlYykpOworCisgIGlmIChy ZWNvcmRfYXJjaF9saXN0X3RhaWwpCisgICAgeworICAgICAgcmVjb3JkX2Fy Y2hfbGlzdF90YWlsLT5uZXh0ID0gcmVjOworICAgICAgcmVjLT5wcmV2ID0g cmVjb3JkX2FyY2hfbGlzdF90YWlsOworICAgICAgcmVjb3JkX2FyY2hfbGlz dF90YWlsID0gcmVjOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJl Y29yZF9hcmNoX2xpc3RfaGVhZCA9IHJlYzsKKyAgICAgIHJlY29yZF9hcmNo X2xpc3RfdGFpbCA9IHJlYzsKKyAgICB9Cit9CisKKy8qIFJlY29yZCB0aGUg dmFsdWUgb2YgYSByZWdpc3RlciBOVU0gdG8gcmVjb3JkX2FyY2hfbGlzdC4g ICovCitpbnQKK3JlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoaW50IG51bSkK K3sKKyAgcmVjb3JkX3QgKnJlYzsKKworICBpZiAocmVjb3JkX2RlYnVnID4g MSkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQki UHJvY2VzcyByZWNvcmQ6IGFkZCByZWdpc3RlciBudW0gPSAlZCB0byAiCisJ CQkicmVjb3JkIGxpc3QuXG4iLAorCQkJbnVtKTsKKworICByZWMgPSAocmVj b3JkX3QgKikgeG1hbGxvYyAoc2l6ZW9mIChyZWNvcmRfdCkpOworICByZWMt PnUucmVnLnZhbCA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChNQVhfUkVHSVNU RVJfU0laRSk7CisgIHJlYy0+cHJldiA9IE5VTEw7CisgIHJlYy0+bmV4dCA9 IE5VTEw7CisgIHJlYy0+dHlwZSA9IHJlY29yZF9yZWc7CisgIHJlYy0+dS5y ZWcubnVtID0gbnVtOworCisgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIG51bSwgcmVjLT51LnJlZy52YWwpOworCisgIHJlY29yZF9h cmNoX2xpc3RfYWRkIChyZWMpOworCisgIHJldHVybiAwOworfQorCisvKiBS ZWNvcmQgdGhlIHZhbHVlIG9mIGEgcmVnaW9uIG9mIG1lbW9yeSB3aG9zZSBh ZGRyZXNzIGlzIEFERFIgYW5kCisgICBsZW5ndGggaXMgTEVOIHRvIHJlY29y ZF9hcmNoX2xpc3QuICAqLworCitpbnQKK3JlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAoQ09SRV9BRERSIGFkZHIsIGludCBsZW4pCit7CisgIHJlY29yZF90 ICpyZWM7CisKKyAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisgICAgZnByaW50 Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJIlByb2Nlc3MgcmVjb3Jk OiBhZGQgbWVtIGFkZHIgPSAweCVzIGxlbiA9ICVkIHRvICIKKwkJCSJyZWNv cmQgbGlzdC5cbiIsCisJCQlwYWRkcl9ueiAoYWRkciksIGxlbik7CisKKyAg aWYgKCFhZGRyKQorICAgIHJldHVybiAwOworCisgIHJlYyA9IChyZWNvcmRf dCAqKSB4bWFsbG9jIChzaXplb2YgKHJlY29yZF90KSk7CisgIHJlYy0+dS5t ZW0udmFsID0gKGdkYl9ieXRlICopIHhtYWxsb2MgKGxlbik7CisgIHJlYy0+ cHJldiA9IE5VTEw7CisgIHJlYy0+bmV4dCA9IE5VTEw7CisgIHJlYy0+dHlw ZSA9IHJlY29yZF9tZW07CisgIHJlYy0+dS5tZW0uYWRkciA9IGFkZHI7Cisg IHJlYy0+dS5tZW0ubGVuID0gbGVuOworCisgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkgKGFkZHIsIHJlYy0+dS5tZW0udmFsLCBsZW4pKQorICAgIHsKKyAg ICAgIGlmIChyZWNvcmRfZGVidWcpCisJZnByaW50Zl91bmZpbHRlcmVkIChn ZGJfc3RkbG9nLAorCQkJICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVh ZGluZyBtZW1vcnkgYXQgIgorCQkJICAgICJhZGRyID0gMHglcyBsZW4gPSAl ZC5cbiIsCisJCQkgICAgcGFkZHJfbnogKGFkZHIpLCBsZW4pOworICAgICAg eGZyZWUgKHJlYy0+dS5tZW0udmFsKTsKKyAgICAgIHhmcmVlIChyZWMpOwor ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICByZWNvcmRfYXJjaF9saXN0 X2FkZCAocmVjKTsKKworICByZXR1cm4gMDsKK30KKworLyogQWRkIGEgcmVj b3JkX2VuZCB0eXBlIHJlY29yZF90IHRvIHJlY29yZF9hcmNoX2xpc3QuICAq LworaW50CityZWNvcmRfYXJjaF9saXN0X2FkZF9lbmQgKHZvaWQpCit7Cisg IHJlY29yZF90ICpyZWM7CisKKyAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisg ICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJIlByb2Nl c3MgcmVjb3JkOiBhZGQgZW5kIHRvIGFyY2ggbGlzdC5cbiIpOworCisgIHJl YyA9IChyZWNvcmRfdCAqKSB4bWFsbG9jIChzaXplb2YgKHJlY29yZF90KSk7 CisgIHJlYy0+cHJldiA9IE5VTEw7CisgIHJlYy0+bmV4dCA9IE5VTEw7Cisg IHJlYy0+dHlwZSA9IHJlY29yZF9lbmQ7CisKKyAgcmVjb3JkX2FyY2hfbGlz dF9hZGQgKHJlYyk7CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk CityZWNvcmRfY2hlY2tfaW5zbl9udW0gKGludCBzZXRfdGVybWluYWwpCit7 CisgIGlmIChyZWNvcmRfaW5zbl9tYXhfbnVtKQorICAgIHsKKyAgICAgIGdk Yl9hc3NlcnQgKHJlY29yZF9pbnNuX251bSA8PSByZWNvcmRfaW5zbl9tYXhf bnVtKTsKKyAgICAgIGlmIChyZWNvcmRfaW5zbl9udW0gPT0gcmVjb3JkX2lu c25fbWF4X251bSkKKwl7CisJICAvKiBBc2sgdXNlciB3aGF0IHRvIGRvLiAg Ki8KKwkgIGlmIChyZWNvcmRfc3RvcF9hdF9saW1pdCkKKwkgICAgeworCSAg ICAgIGludCBxOworCSAgICAgIGlmIChzZXRfdGVybWluYWwpCisJCXRhcmdl dF90ZXJtaW5hbF9vdXJzICgpOworCSAgICAgIHEgPSB5cXVlcnkgKF8oIkRv IHlvdSB3YW50IHRvIGF1dG8gZGVsZXRlIHByZXZpb3VzIGV4ZWN1dGlvbiAi CisJCQkgICAgImxvZyBlbnRyaWVzIHdoZW4gcmVjb3JkL3JlcGxheSBidWZm ZXIgYmVjb21lcyAiCisJCQkgICAgImZ1bGwgKHJlY29yZC1zdG9wLWF0LWxp bWl0KT8iKSk7CisJICAgICAgaWYgKHNldF90ZXJtaW5hbCkKKwkJdGFyZ2V0 X3Rlcm1pbmFsX2luZmVyaW9yICgpOworCSAgICAgIGlmIChxKQorCQlyZWNv cmRfc3RvcF9hdF9saW1pdCA9IDA7CisJICAgICAgZWxzZQorCQllcnJvciAo XygiUHJvY2VzcyByZWNvcmQ6IGluZmVyaW9yIHByb2dyYW0gc3RvcHBlZC4i KSk7CisJICAgIH0KKwl9CisgICAgfQorfQorCisvKiBCZWZvcmUgaW5mZXJp b3Igc3RlcCAod2hlbiBHREIgcmVjb3JkIHRoZSBydW5uaW5nIG1lc3NhZ2Us IGluZmVyaW9yCisgICBvbmx5IGNhbiBzdGVwKSwgR0RCIHdpbGwgY2FsbCB0 aGlzIGZ1bmN0aW9uIHRvIHJlY29yZCB0aGUgdmFsdWVzIHRvCisgICByZWNv cmRfbGlzdC4gIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIGdkYmFyY2hfcHJv Y2Vzc19yZWNvcmQgdG8KKyAgIHJlY29yZCB0aGUgcnVubmluZyBtZXNzYWdl IG9mIGluZmVyaW9yIGFuZCBzZXQgdGhlbSB0bworICAgcmVjb3JkX2FyY2hf bGlzdCwgYW5kIGFkZCBpdCB0byByZWNvcmRfbGlzdC4gICovCisKK3N0YXRp YyB2b2lkCityZWNvcmRfbWVzc2FnZV9jbGVhbnVwcyAodm9pZCAqaWdub3Jl KQoreworICByZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0 X3RhaWwpOworfQorCitzdGF0aWMgaW50CityZWNvcmRfbWVzc2FnZSAodm9p ZCAqYXJncykKK3sKKyAgaW50IHJldDsKKyAgc3RydWN0IGdkYmFyY2ggKmdk YmFyY2ggPSBhcmdzOworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBz ID0gbWFrZV9jbGVhbnVwIChyZWNvcmRfbWVzc2FnZV9jbGVhbnVwcywgMCk7 CisKKyAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkID0gTlVMTDsKKyAgcmVjb3Jk X2FyY2hfbGlzdF90YWlsID0gTlVMTDsKKworICAvKiBDaGVjayByZWNvcmRf aW5zbl9udW0uICAqLworICByZWNvcmRfY2hlY2tfaW5zbl9udW0gKDEpOwor CisgIHJlY29yZF9yZWdjYWNoZSA9IGdldF9jdXJyZW50X3JlZ2NhY2hlICgp OworCisgIHJldCA9IGdkYmFyY2hfcHJvY2Vzc19yZWNvcmQgKGdkYmFyY2gs CisJCQkJcmVnY2FjaGVfcmVhZF9wYyAocmVjb3JkX3JlZ2NhY2hlKSk7Cisg IGlmIChyZXQgPiAwKQorICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29yZDog aW5mZXJpb3IgcHJvZ3JhbSBzdG9wcGVkLiIpKTsKKyAgaWYgKHJldCA8IDAp CisgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVj b3JkIGV4ZWN1dGlvbiBsb2cuIikpOworCisgIGRpc2NhcmRfY2xlYW51cHMg KG9sZF9jbGVhbnVwcyk7CisKKyAgcmVjb3JkX2xpc3QtPm5leHQgPSByZWNv cmRfYXJjaF9saXN0X2hlYWQ7CisgIHJlY29yZF9hcmNoX2xpc3RfaGVhZC0+ cHJldiA9IHJlY29yZF9saXN0OworICByZWNvcmRfbGlzdCA9IHJlY29yZF9h cmNoX2xpc3RfdGFpbDsKKworICBpZiAocmVjb3JkX2luc25fbnVtID09IHJl Y29yZF9pbnNuX21heF9udW0gJiYgcmVjb3JkX2luc25fbWF4X251bSkKKyAg ICByZWNvcmRfbGlzdF9yZWxlYXNlX2ZpcnN0ICgpOworICBlbHNlCisgICAg cmVjb3JkX2luc25fbnVtKys7CisKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRp YyBpbnQKK2RvX3JlY29yZF9tZXNzYWdlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCkKK3sKKyAgcmV0dXJuIGNhdGNoX2Vycm9ycyAocmVjb3JkX21lc3Nh Z2UsIGdkYmFyY2gsIE5VTEwsIFJFVFVSTl9NQVNLX0FMTCk7Cit9CisKKy8q IFNldCB0byAxIGlmIHJlY29yZF9zdG9yZV9yZWdpc3RlcnMgYW5kIHJlY29y ZF94ZmVyX3BhcnRpYWwKKyAgIGRvZXNuJ3QgbmVlZCByZWNvcmQuICAqLwor CitzdGF0aWMgaW50IHJlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGUgPSAw OworCitzdHJ1Y3QgY2xlYW51cCAqCityZWNvcmRfZ2RiX29wZXJhdGlvbl9k aXNhYmxlX3NldCAodm9pZCkKK3sKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9j bGVhbnVwcyA9IE5VTEw7CisKKyAgaWYgKCFyZWNvcmRfZ2RiX29wZXJhdGlv bl9kaXNhYmxlKQorICAgIHsKKyAgICAgIG9sZF9jbGVhbnVwcyA9CisgICAg ICAgIG1ha2VfY2xlYW51cF9yZXN0b3JlX2ludGVnZXIgKCZyZWNvcmRfZ2Ri X29wZXJhdGlvbl9kaXNhYmxlKTsKKyAgICAgIHJlY29yZF9nZGJfb3BlcmF0 aW9uX2Rpc2FibGUgPSAxOworICAgIH0KKworICByZXR1cm4gb2xkX2NsZWFu dXBzOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX29wZW4gKGNoYXIgKm5h bWUsIGludCBmcm9tX3R0eSkKK3sKKyAgc3RydWN0IHRhcmdldF9vcHMgKnQ7 CisKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX29wZW5c biIpOworCisgIC8qIGNoZWNrIGV4ZWMgKi8KKyAgaWYgKCF0YXJnZXRfaGFz X2V4ZWN1dGlvbikKKyAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IHRo ZSBwcm9ncmFtIGlzIG5vdCBiZWluZyBydW4uIikpOworICBpZiAobm9uX3N0 b3ApCisgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIHRhcmdldCBjYW4n dCBkZWJ1ZyBpbmZlcmlvciBpbiBub24tc3RvcCBtb2RlICIKKwkgICAgICIo bm9uLXN0b3ApLiIpKTsKKyAgaWYgKHRhcmdldF9hc3luY19wZXJtaXR0ZWQp CisgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIHRhcmdldCBjYW4ndCBk ZWJ1ZyBpbmZlcmlvciBpbiBhc3luY2hyb25vdXMgIgorCSAgICAgIm1vZGUg KHRhcmdldC1hc3luYykuIikpOworCisgIGlmICghZ2RiYXJjaF9wcm9jZXNz X3JlY29yZF9wIChjdXJyZW50X2dkYmFyY2gpKQorICAgIGVycm9yIChfKCJQ cm9jZXNzIHJlY29yZDogdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIGRvZXNu J3Qgc3VwcG9ydCAiCisJICAgICAicmVjb3JkIGZ1bmN0aW9uLiIpKTsKKwor ICAvKiBDaGVjayBpZiByZWNvcmQgdGFyZ2V0IGlzIGFscmVhZHkgcnVubmlu Zy4gICovCisgIGlmIChjdXJyZW50X3RhcmdldC50b19zdHJhdHVtID09IHJl Y29yZF9zdHJhdHVtKQorICAgIHsKKyAgICAgIGlmICghbnF1ZXJ5CisJICAo XygiUHJvY2VzcyByZWNvcmQgdGFyZ2V0IGFscmVhZHkgcnVubmluZywgZG8g eW91IHdhbnQgdG8gZGVsZXRlICIKKwkgICAgICJ0aGUgb2xkIHJlY29yZCBs b2c/IikpKQorCXJldHVybjsKKyAgICB9CisKKyAgLypSZXNldCB0aGUgYmVu ZWF0aCBmdW5jdGlvbiBwb2ludGVycy4gICovCisgIHJlY29yZF9iZW5lYXRo X3RvX3Jlc3VtZSA9IE5VTEw7CisgIHJlY29yZF9iZW5lYXRoX3RvX3dhaXQg PSBOVUxMOworICByZWNvcmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMg PSBOVUxMOworICByZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWwgPSBO VUxMOworICByZWNvcmRfYmVuZWF0aF90b19pbnNlcnRfYnJlYWtwb2ludCA9 IE5VTEw7CisgIHJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3BvaW50 ID0gTlVMTDsKKworICAvKiBTZXQgdGhlIGJlbmVhdGggZnVuY3Rpb24gcG9p bnRlcnMuICAqLworICBmb3IgKHQgPSBjdXJyZW50X3RhcmdldC5iZW5lYXRo OyB0ICE9IE5VTEw7IHQgPSB0LT5iZW5lYXRoKQorICAgIHsKKyAgICAgIGlm ICghcmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lKQorICAgICAgICB7CisJICBy ZWNvcmRfYmVuZWF0aF90b19yZXN1bWUgPSB0LT50b19yZXN1bWU7CisJICBy ZWNvcmRfYmVuZWF0aF90b19yZXN1bWVfb3BzID0gdDsKKyAgICAgICAgfQor ICAgICAgaWYgKCFyZWNvcmRfYmVuZWF0aF90b193YWl0KQorICAgICAgICB7 CisJICByZWNvcmRfYmVuZWF0aF90b193YWl0ID0gdC0+dG9fd2FpdDsKKwkg IHJlY29yZF9iZW5lYXRoX3RvX3dhaXRfb3BzID0gdDsKKyAgICAgICAgfQor ICAgICAgaWYgKCFyZWNvcmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMp CisgICAgICAgIHsKKwkgIHJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lz dGVycyA9IHQtPnRvX3N0b3JlX3JlZ2lzdGVyczsKKwkgIHJlY29yZF9iZW5l YXRoX3RvX3N0b3JlX3JlZ2lzdGVyc19vcHMgPSB0OworICAgICAgICB9Cisg ICAgICBpZiAoIXJlY29yZF9iZW5lYXRoX3RvX3hmZXJfcGFydGlhbCkKKyAg ICAgICAgeworCSAgcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsID0g dC0+dG9feGZlcl9wYXJ0aWFsOworCSAgcmVjb3JkX2JlbmVhdGhfdG9feGZl cl9wYXJ0aWFsX29wcyA9IHQ7CisgICAgICAgIH0KKyAgICAgIGlmICghcmVj b3JkX2JlbmVhdGhfdG9faW5zZXJ0X2JyZWFrcG9pbnQpCisJcmVjb3JkX2Jl bmVhdGhfdG9faW5zZXJ0X2JyZWFrcG9pbnQgPSB0LT50b19pbnNlcnRfYnJl YWtwb2ludDsKKyAgICAgIGlmICghcmVjb3JkX2JlbmVhdGhfdG9fcmVtb3Zl X2JyZWFrcG9pbnQpCisJcmVjb3JkX2JlbmVhdGhfdG9fcmVtb3ZlX2JyZWFr cG9pbnQgPSB0LT50b19yZW1vdmVfYnJlYWtwb2ludDsKKyAgICB9CisgIGlm ICghcmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lKQorICAgIGVycm9yIChfKCJQ cm9jZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9fcmVzdW1lLiIpKTsKKyAgaWYg KCFyZWNvcmRfYmVuZWF0aF90b193YWl0KQorICAgIGVycm9yIChfKCJQcm9j ZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9fd2FpdC4iKSk7CisgIGlmICghcmVj b3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVnaXN0ZXJzKQorICAgIGVycm9yIChf KCJQcm9jZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9fc3RvcmVfcmVnaXN0ZXJz LiIpKTsKKyAgaWYgKCFyZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWwp CisgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIGNhbid0IGdldCB0b194 ZmVyX3BhcnRpYWwuIikpOworICBpZiAoIXJlY29yZF9iZW5lYXRoX3RvX2lu c2VydF9icmVha3BvaW50KQorICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29y ZCBjYW4ndCBnZXQgdG9faW5zZXJ0X2JyZWFrcG9pbnQuIikpOworICBpZiAo IXJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3BvaW50KQorICAgIGVy cm9yIChfKCJQcm9jZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9fcmVtb3ZlX2Jy ZWFrcG9pbnQuIikpOworCisgIHB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7 CisKKyAgLyogUmVzZXQgKi8KKyAgcmVjb3JkX2luc25fbnVtID0gMDsKKyAg cmVjb3JkX2xpc3QgPSAmcmVjb3JkX2ZpcnN0OworICByZWNvcmRfbGlzdC0+ bmV4dCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfY2xvc2Ug KGludCBxdWl0dGluZykKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29y ZDogcmVjb3JkX2Nsb3NlXG4iKTsKKworICByZWNvcmRfbGlzdF9yZWxlYXNl IChyZWNvcmRfbGlzdCk7Cit9CisKK3N0YXRpYyBpbnQgcmVjb3JkX3Jlc3Vt ZV9zdGVwID0gMDsKK3N0YXRpYyBlbnVtIHRhcmdldF9zaWduYWwgcmVjb3Jk X3Jlc3VtZV9zaWdnbmFsOworc3RhdGljIGludCByZWNvcmRfcmVzdW1lX2Vy cm9yOworCitzdGF0aWMgdm9pZAorcmVjb3JkX3Jlc3VtZSAoc3RydWN0IHRh cmdldF9vcHMgKm9wcywgcHRpZF90IHB0aWQsIGludCBzdGVwLAorICAgICAg ICAgICAgICAgZW51bSB0YXJnZXRfc2lnbmFsIHNpZ2duYWwpCit7CisgIHJl Y29yZF9yZXN1bWVfc3RlcCA9IHN0ZXA7CisgIHJlY29yZF9yZXN1bWVfc2ln Z25hbCA9IHNpZ2duYWw7CisKKyAgaWYgKCFSRUNPUkRfSVNfUkVQTEFZKQor ICAgIHsKKyAgICAgIGlmIChkb19yZWNvcmRfbWVzc2FnZSAoY3VycmVudF9n ZGJhcmNoKSkKKyAgICAgICAgeworICAgICAgICAgIHJlY29yZF9yZXN1bWVf ZXJyb3IgPSAwOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsK KyAgICAgICAgICByZWNvcmRfcmVzdW1lX2Vycm9yID0gMTsKKyAgICAgICAg ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIHJlY29yZF9iZW5lYXRoX3Rv X3Jlc3VtZSAocmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lX29wcywgcHRpZCwg MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnZ25hbCk7 CisgICAgfQorfQorCitzdGF0aWMgaW50IHJlY29yZF9nZXRfc2lnID0gMDsK Kworc3RhdGljIHZvaWQKK3JlY29yZF9zaWdfaGFuZGxlciAoaW50IHNpZ25v KQoreworICBpZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiBnZXQgYSBzaWdu YWxcbiIpOworCisgIC8qIEl0IHdpbGwgYnJlYWsgdGhlIHJ1bm5pbmcgaW5m ZXJpb3IgaW4gcmVwbGF5IG1vZGUuICAqLworICByZWNvcmRfcmVzdW1lX3N0 ZXAgPSAxOworCisgIC8qIEl0IHdpbGwgbGV0IHJlY29yZF93YWl0IHNldCBp bmZlcmlvciBzdGF0dXMgdG8gZ2V0IHRoZSBzaWduYWwKKyAgICAgU0lHSU5U LiAgKi8KKyAgcmVjb3JkX2dldF9zaWcgPSAxOworfQorCitzdGF0aWMgdm9p ZAorcmVjb3JkX3dhaXRfY2xlYW51cHMgKHZvaWQgKmlnbm9yZSkKK3sKKyAg aWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQorICAg IHsKKyAgICAgIGlmIChyZWNvcmRfbGlzdC0+bmV4dCkKKwlyZWNvcmRfbGlz dCA9IHJlY29yZF9saXN0LT5uZXh0OworICAgIH0KKyAgZWxzZQorICAgIHJl Y29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPnByZXY7Cit9CisKKy8qIEluIHJl cGxheSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGV4YW1pbmVzIHRoZSByZWNvcmRl ZCBsb2cgYW5kCisgICBkZXRlcm1pbmVzIHdoZXJlIHRvIHN0b3AuICAqLwor CitzdGF0aWMgcHRpZF90CityZWNvcmRfd2FpdCAoc3RydWN0IHRhcmdldF9v cHMgKm9wcywKKyAgICAgICAgICAgICAgcHRpZF90IHB0aWQsIHN0cnVjdCB0 YXJnZXRfd2FpdHN0YXR1cyAqc3RhdHVzKQoreworICBzdHJ1Y3QgY2xlYW51 cCAqc2V0X2NsZWFudXBzID0gcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJs ZV9zZXQgKCk7CisKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkiUHJvY2VzcyByZWNvcmQ6 IHJlY29yZF93YWl0ICIKKwkJCSJyZWNvcmRfcmVzdW1lX3N0ZXAgPSAlZFxu IiwKKwkJCXJlY29yZF9yZXN1bWVfc3RlcCk7CisKKyAgaWYgKCFSRUNPUkRf SVNfUkVQTEFZKQorICAgIHsKKyAgICAgIGlmIChyZWNvcmRfcmVzdW1lX2Vy cm9yKQorCXsKKwkgIC8qIElmIHJlY29yZF9yZXN1bWUgZ2V0IGVycm9yLCBy ZXR1cm4gZGlyZWN0bHkuICAqLworCSAgc3RhdHVzLT5raW5kID0gVEFSR0VU X1dBSVRLSU5EX1NUT1BQRUQ7CisJICBzdGF0dXMtPnZhbHVlLnNpZyA9IFRB UkdFVF9TSUdOQUxfVFJBUDsKKwkgIHJldHVybiBpbmZlcmlvcl9wdGlkOwor CX0KKworICAgICAgaWYgKHJlY29yZF9yZXN1bWVfc3RlcCkKKwl7CisJICAv KiBUaGlzIGlzIGEgc2luZ2xlIHN0ZXAuICAqLworCSAgcmV0dXJuIHJlY29y ZF9iZW5lYXRoX3RvX3dhaXQgKHJlY29yZF9iZW5lYXRoX3RvX3dhaXRfb3Bz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHRpZCwgc3RhdHVzKTsKKwl9CisgICAgICBlbHNlCisJ eworCSAgLyogVGhpcyBpcyBub3QgYSBzaW5nbGUgc3RlcC4gICovCisJICBw dGlkX3QgcmV0OworCSAgQ09SRV9BRERSIHRtcF9wYzsKKworCSAgd2hpbGUg KDEpCisJICAgIHsKKwkgICAgICByZXQgPQorCQlyZWNvcmRfYmVuZWF0aF90 b193YWl0IChyZWNvcmRfYmVuZWF0aF90b193YWl0X29wcywgcHRpZCwKKwkJ CQkJc3RhdHVzKTsKKworCSAgICAgIGlmIChzdGF0dXMtPmtpbmQgPT0gVEFS R0VUX1dBSVRLSU5EX1NUT1BQRUQKKwkJICAmJiBzdGF0dXMtPnZhbHVlLnNp ZyA9PSBUQVJHRVRfU0lHTkFMX1RSQVApCisJCXsKKwkJICAvKiBDaGVjayBp ZiB0aGVyZSBpcyBhIGJyZWFrcG9pbnQuICAqLworCQkgIHJlZ2lzdGVyc19j aGFuZ2VkICgpOworCQkgIHRtcF9wYyA9IHJlYWRfcGMgKCk7CisJCSAgaWYg KGJyZWFrcG9pbnRfaW5zZXJ0ZWRfaGVyZV9wICh0bXBfcGMpKQorCQkgICAg eworCQkgICAgICAvKiBUaGVyZSBpcyBhIGJyZWFrcG9pbnQuICAqLworCQkg ICAgICBDT1JFX0FERFIgZGVjcl9wY19hZnRlcl9icmVhayA9CisJCQlnZGJh cmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsgKGN1cnJlbnRfZ2RiYXJjaCk7CisJ CSAgICAgIGlmIChkZWNyX3BjX2FmdGVyX2JyZWFrKQorCQkJeworCQkJICBy ZWdjYWNoZV93cml0ZV9wYyAoZ2V0X3RocmVhZF9yZWdjYWNoZSAocmV0KSwK KwkJCQkJICAgICB0bXBfcGMgKyBkZWNyX3BjX2FmdGVyX2JyZWFrKTsKKwkJ CX0KKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIC8qIFRo ZXJlIGlzIG5vdCBhIGJyZWFrcG9pbnQuICAqLworCQkgICAgICBpZiAoIWRv X3JlY29yZF9tZXNzYWdlIChjdXJyZW50X2dkYmFyY2gpKQorCQkJeworICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJCX0KKwkJICAgICAg cmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lIChyZWNvcmRfYmVuZWF0aF90b19y ZXN1bWVfb3BzLAorCQkJCQkJcHRpZCwgMSwKKwkJCQkJCXJlY29yZF9yZXN1 bWVfc2lnZ25hbCk7CisJCSAgICAgIGNvbnRpbnVlOworCQkgICAgfQorCQl9 CisKKwkgICAgICAvKiBUaGUgaW5mZXJpb3IgaXMgYnJva2VuIGJ5IGEgYnJl YWtwb2ludCBvciBhIHNpZ25hbC4gICovCisJICAgICAgYnJlYWs7CisJICAg IH0KKworCSAgcmV0dXJuIHJldDsKKwl9CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSA9IGdldF9jdXJy ZW50X3JlZ2NhY2hlICgpOworICAgICAgaW50IGNvbnRpbnVlX2ZsYWcgPSAx OworICAgICAgaW50IGZpcnN0X3JlY29yZF9lbmQgPSAxOworICAgICAgc3Ry dWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAocmVj b3JkX3dhaXRfY2xlYW51cHMsIDApOworICAgICAgQ09SRV9BRERSIHRtcF9w YzsKKworICAgICAgc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX1NU T1BQRUQ7CisKKyAgICAgIC8qIENoZWNrIGJyZWFrcG9pbnQgd2hlbiBmb3J3 YXJkIGV4ZWN1dGUuICAqLworICAgICAgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rp b24gPT0gRVhFQ19GT1JXQVJEKQorCXsKKwkgIHRtcF9wYyA9IHJlZ2NhY2hl X3JlYWRfcGMgKHJlZ2NhY2hlKTsKKwkgIGlmIChicmVha3BvaW50X2luc2Vy dGVkX2hlcmVfcCAodG1wX3BjKSkKKwkgICAgeworCSAgICAgIGlmIChyZWNv cmRfZGVidWcpCisJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK KwkJCQkgICAgIlByb2Nlc3MgcmVjb3JkOiBicmVhayBhdCAweCVzLlxuIiwK KwkJCQkgICAgcGFkZHJfbnogKHRtcF9wYykpOworCSAgICAgIGlmIChnZGJh cmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsgKGdldF9yZWdjYWNoZV9hcmNoIChy ZWdjYWNoZSkpCisJCSAgJiYgIXJlY29yZF9yZXN1bWVfc3RlcCkKKwkJcmVn Y2FjaGVfd3JpdGVfcGMgKHJlZ2NhY2hlLAorCQkJCSAgIHRtcF9wYyArCisJ CQkJICAgZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrCisJCQkJICAgKGdl dF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpKTsKKwkgICAgICBnb3RvIHJl cGxheV9vdXQ7CisJICAgIH0KKwl9CisKKyAgICAgIHJlY29yZF9nZXRfc2ln ID0gMDsKKyAgICAgIHNpZ25hbCAoU0lHSU5ULCByZWNvcmRfc2lnX2hhbmRs ZXIpOworICAgICAgLyogSWYgR0RCIGlzIGluIHRlcm1pbmFsX2luZmVyaW9y IG1vZGUsIGl0IHdpbGwgbm90IGdldCB0aGUgc2lnbmFsLgorICAgICAgICAg QW5kIGluIEdEQiByZXBsYXkgbW9kZSwgR0RCIGRvZXNuJ3QgbmVlZCB0byBi ZSBpbiB0ZXJtaW5hbF9pbmZlcmlvcgorICAgICAgICAgbW9kZSwgYmVjYXVz ZSBpbmZlcmlvciB3aWxsIG5vdCBleGVjdXRlZC4KKyAgICAgICAgIFRoZW4g c2V0IGl0IHRvIHRlcm1pbmFsX291cnMgdG8gbWFrZSBHREIgZ2V0IHRoZSBz aWduYWwuICAqLworICAgICAgdGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7CisK KyAgICAgIC8qIEluIEVYRUNfRk9SV0FSRCBtb2RlLCByZWNvcmRfbGlzdCBw b2ludHMgdG8gdGhlIHRhaWwgb2YgcHJldgorICAgICAgICAgaW5zdHJ1Y3Rp b24uICAqLworICAgICAgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhF Q19GT1JXQVJEICYmIHJlY29yZF9saXN0LT5uZXh0KQorCXJlY29yZF9saXN0 ID0gcmVjb3JkX2xpc3QtPm5leHQ7CisKKyAgICAgIC8qIExvb3Agb3ZlciB0 aGUgcmVjb3JkX2xpc3QsIGxvb2tpbmcgZm9yIHRoZSBuZXh0IHBsYWNlIHRv CisJIHN0b3AuICAqLworICAgICAgZG8KKwl7CisJICAvKiBDaGVjayBmb3Ig YmVnaW5uaW5nIGFuZCBlbmQgb2YgbG9nLiAgKi8KKwkgIGlmIChleGVjdXRp b25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRQorCSAgICAgICYmIHJlY29y ZF9saXN0ID09ICZyZWNvcmRfZmlyc3QpCisJICAgIHsKKwkgICAgICAvKiBI aXQgYmVnaW5uaW5nIG9mIHJlY29yZCBsb2cgaW4gcmV2ZXJzZS4gICovCisJ ICAgICAgc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX05PX0hJU1RP Ulk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIGlmIChleGVjdXRpb25f ZGlyZWN0aW9uICE9IEVYRUNfUkVWRVJTRSAmJiAhcmVjb3JkX2xpc3QtPm5l eHQpCisJICAgIHsKKwkgICAgICAvKiBIaXQgZW5kIG9mIHJlY29yZCBsb2cg Z29pbmcgZm9yd2FyZC4gICovCisJICAgICAgc3RhdHVzLT5raW5kID0gVEFS R0VUX1dBSVRLSU5EX05PX0hJU1RPUlk7CisJICAgICAgYnJlYWs7CisJICAg IH0KKworCSAgLyogU2V0IHB0aWQsIHJlZ2lzdGVyIGFuZCBtZW1vcnkgYWNj b3JkaW5nIHRvIHJlY29yZF9saXN0LiAgKi8KKwkgIGlmIChyZWNvcmRfbGlz dC0+dHlwZSA9PSByZWNvcmRfcmVnKQorCSAgICB7CisJICAgICAgLyogcmVn ICovCisJICAgICAgZ2RiX2J5dGUgcmVnW01BWF9SRUdJU1RFUl9TSVpFXTsK KwkgICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkKKwkJZnByaW50Zl91bmZp bHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSAgICAiUHJvY2VzcyByZWNvcmQ6 IHJlY29yZF9yZWcgJXMgdG8gIgorCQkJCSAgICAiaW5mZXJpb3IgbnVtID0g JWQuXG4iLAorCQkJCSAgICBob3N0X2FkZHJlc3NfdG9fc3RyaW5nIChyZWNv cmRfbGlzdCksCisJCQkJICAgIHJlY29yZF9saXN0LT51LnJlZy5udW0pOwor CSAgICAgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgcmVjb3Jk X2xpc3QtPnUucmVnLm51bSwgcmVnKTsKKwkgICAgICByZWdjYWNoZV9jb29r ZWRfd3JpdGUgKHJlZ2NhY2hlLCByZWNvcmRfbGlzdC0+dS5yZWcubnVtLAor CQkJCSAgICAgcmVjb3JkX2xpc3QtPnUucmVnLnZhbCk7CisJICAgICAgbWVt Y3B5IChyZWNvcmRfbGlzdC0+dS5yZWcudmFsLCByZWcsIE1BWF9SRUdJU1RF Ul9TSVpFKTsKKwkgICAgfQorCSAgZWxzZSBpZiAocmVjb3JkX2xpc3QtPnR5 cGUgPT0gcmVjb3JkX21lbSkKKwkgICAgeworCSAgICAgIC8qIG1lbSAqLwor CSAgICAgIGdkYl9ieXRlICptZW0gPSBhbGxvY2EgKHJlY29yZF9saXN0LT51 Lm1lbS5sZW4pOworCSAgICAgIGlmIChyZWNvcmRfZGVidWcgPiAxKQorCQlm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJQcm9j ZXNzIHJlY29yZDogcmVjb3JkX21lbSAlcyB0byAiCisJCQkJICAgICJpbmZl cmlvciBhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIsCisJCQkJICAgIGhvc3Rf YWRkcmVzc190b19zdHJpbmcgKHJlY29yZF9saXN0KSwKKwkJCQkgICAgcGFk ZHJfbnogKHJlY29yZF9saXN0LT51Lm1lbS5hZGRyKSwKKwkJCQkgICAgcmVj b3JkX2xpc3QtPnUubWVtLmxlbik7CisKKwkgICAgICBpZiAodGFyZ2V0X3Jl YWRfbWVtb3J5CisJCSAgKHJlY29yZF9saXN0LT51Lm1lbS5hZGRyLCBtZW0s IHJlY29yZF9saXN0LT51Lm1lbS5sZW4pKQorCQllcnJvciAoXygiUHJvY2Vz cyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5IGF0ICIKKwkJCSAiYWRk ciA9IDB4JXMgbGVuID0gJWQuIiksCisJCSAgICAgICBwYWRkcl9ueiAocmVj b3JkX2xpc3QtPnUubWVtLmFkZHIpLAorCQkgICAgICAgcmVjb3JkX2xpc3Qt PnUubWVtLmxlbik7CisKKwkgICAgICBpZiAodGFyZ2V0X3dyaXRlX21lbW9y eQorCQkgIChyZWNvcmRfbGlzdC0+dS5tZW0uYWRkciwgcmVjb3JkX2xpc3Qt PnUubWVtLnZhbCwKKwkJICAgcmVjb3JkX2xpc3QtPnUubWVtLmxlbikpCisJ CWVycm9yIChfCisJCSAgICAgICAoIlByb2Nlc3MgcmVjb3JkOiBlcnJvciB3 cml0aW5nIG1lbW9yeSBhdCAiCisJCQkiYWRkciA9IDB4JXMgbGVuID0gJWQu IiksCisJCSAgICAgICBwYWRkcl9ueiAocmVjb3JkX2xpc3QtPnUubWVtLmFk ZHIpLAorCQkgICAgICAgcmVjb3JkX2xpc3QtPnUubWVtLmxlbik7CisKKwkg ICAgICBtZW1jcHkgKHJlY29yZF9saXN0LT51Lm1lbS52YWwsIG1lbSwgcmVj b3JkX2xpc3QtPnUubWVtLmxlbik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg eworCSAgICAgIGlmIChyZWNvcmRfZGVidWcgPiAxKQorCQlmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJQcm9jZXNzIHJlY29y ZDogcmVjb3JkX2VuZCAlcyB0byAiCisJCQkJICAgICJpbmZlcmlvci5cbiIs CisJCQkJICAgIGhvc3RfYWRkcmVzc190b19zdHJpbmcgKHJlY29yZF9saXN0 KSk7CisKKwkgICAgICBpZiAoZmlyc3RfcmVjb3JkX2VuZCAmJiBleGVjdXRp b25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKKwkJeworCQkgIC8qIFdo ZW4gcmV2ZXJzZSBleGN1dGUsIHRoZSBmaXJzdCByZWNvcmRfZW5kIGlzIHRo ZSBwYXJ0IG9mCisJCSAgICAgY3VycmVudCBpbnN0cnVjdGlvbi4gICovCisJ CSAgZmlyc3RfcmVjb3JkX2VuZCA9IDA7CisJCX0KKwkgICAgICBlbHNlCisJ CXsKKwkJICAvKiBJbiBFWEVDX1JFVkVSU0UgbW9kZSwgdGhpcyBpcyB0aGUg cmVjb3JkX2VuZCBvZiBwcmV2CisJCSAgICAgaW5zdHJ1Y3Rpb24uCisJCSAg ICAgSW4gRVhFQ19GT1JXQVJEIG1vZGUsIHRoaXMgaXMgdGhlIHJlY29yZF9l bmQgb2YgY3VycmVudAorCQkgICAgIGluc3RydWN0aW9uLiAgKi8KKwkJICAv KiBzdGVwICovCisJCSAgaWYgKHJlY29yZF9yZXN1bWVfc3RlcCkKKwkJICAg IHsKKwkJICAgICAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisJCQlmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiUHJvY2VzcyBy ZWNvcmQ6IHN0ZXAuXG4iKTsKKwkJICAgICAgY29udGludWVfZmxhZyA9IDA7 CisJCSAgICB9CisKKwkJICAvKiBjaGVjayBicmVha3BvaW50ICovCisJCSAg dG1wX3BjID0gcmVnY2FjaGVfcmVhZF9wYyAocmVnY2FjaGUpOworCQkgIGlm IChicmVha3BvaW50X2luc2VydGVkX2hlcmVfcCAodG1wX3BjKSkKKwkJICAg IHsKKwkJICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKwkJCWZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJICAgICJQcm9jZXNzIHJlY29y ZDogYnJlYWsgIgorCQkJCQkgICAgImF0IDB4JXMuXG4iLAorCQkJCQkgICAg cGFkZHJfbnogKHRtcF9wYykpOworCQkgICAgICBpZiAoZ2RiYXJjaF9kZWNy X3BjX2FmdGVyX2JyZWFrIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUp KQorCQkJICAmJiBleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9SV0FS RAorCQkJICAmJiAhcmVjb3JkX3Jlc3VtZV9zdGVwKQorCQkJcmVnY2FjaGVf d3JpdGVfcGMgKHJlZ2NhY2hlLAorCQkJCQkgICB0bXBfcGMgKworCQkJCQkg ICBnZGJhcmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsKKwkJCQkJICAgKGdldF9y ZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpKTsKKwkJICAgICAgY29udGludWVf ZmxhZyA9IDA7CisJCSAgICB9CisJCX0KKwkgICAgfQorCituZXh0OgorCSAg aWYgKGNvbnRpbnVlX2ZsYWcpCisJICAgIHsKKwkgICAgICBpZiAoZXhlY3V0 aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpCisJCXsKKwkJICBpZiAo cmVjb3JkX2xpc3QtPnByZXYpCisJCSAgICByZWNvcmRfbGlzdCA9IHJlY29y ZF9saXN0LT5wcmV2OworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgaWYg KHJlY29yZF9saXN0LT5uZXh0KQorCQkgICAgcmVjb3JkX2xpc3QgPSByZWNv cmRfbGlzdC0+bmV4dDsKKwkJfQorCSAgICB9CisJfQorICAgICAgd2hpbGUg KGNvbnRpbnVlX2ZsYWcpOworCisgICAgICBzaWduYWwgKFNJR0lOVCwgaGFu ZGxlX3NpZ2ludCk7CisKK3JlcGxheV9vdXQ6CisgICAgICBpZiAocmVjb3Jk X2dldF9zaWcpCisJc3RhdHVzLT52YWx1ZS5zaWcgPSBUQVJHRVRfU0lHTkFM X0lOVDsKKyAgICAgIGVsc2UKKwlzdGF0dXMtPnZhbHVlLnNpZyA9IFRBUkdF VF9TSUdOQUxfVFJBUDsKKworICAgICAgZGlzY2FyZF9jbGVhbnVwcyAob2xk X2NsZWFudXBzKTsKKyAgICB9CisKKyAgaWYgKHNldF9jbGVhbnVwcykKKyAg ICBkb19jbGVhbnVwcyAoc2V0X2NsZWFudXBzKTsKKyAgcmV0dXJuIGluZmVy aW9yX3B0aWQ7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfZGlzY29ubmVj dCAoc3RydWN0IHRhcmdldF9vcHMgKnRhcmdldCwgY2hhciAqYXJncywgaW50 IGZyb21fdHR5KQoreworICBpZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiBy ZWNvcmRfZGlzY29ubmVjdFxuIik7CisKKyAgdW5wdXNoX3RhcmdldCAoJnJl Y29yZF9vcHMpOworICB0YXJnZXRfZGlzY29ubmVjdCAoYXJncywgZnJvbV90 dHkpOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX2RldGFjaCAoc3RydWN0 IHRhcmdldF9vcHMgKm9wcywgY2hhciAqYXJncywgaW50IGZyb21fdHR5KQor eworICBpZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfZGV0YWNo XG4iKTsKKworICB1bnB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7CisgIHRh cmdldF9kZXRhY2ggKGFyZ3MsIGZyb21fdHR5KTsKK30KKworc3RhdGljIHZv aWQKK3JlY29yZF9tb3Vybl9pbmZlcmlvciAoc3RydWN0IHRhcmdldF9vcHMg Km9wcykKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogIgorCQkJ ICAgICAgICAgICAgInJlY29yZF9tb3Vybl9pbmZlcmlvclxuIik7CisKKyAg dW5wdXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOworICB0YXJnZXRfbW91cm5f aW5mZXJpb3IgKCk7Cit9CisKKy8qIENsb3NlIHByb2Nlc3MgcmVjb3JkIHRh cmdldCBiZWZvcmUga2lsbGluZyB0aGUgaW5mZXJpb3IgcHJvY2Vzcy4gICov CitzdGF0aWMgdm9pZAorcmVjb3JkX2tpbGwgKHN0cnVjdCB0YXJnZXRfb3Bz ICpvcHMpCit7CisgIGlmIChyZWNvcmRfZGVidWcpCisgICAgZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6IHJlY29y ZF9raWxsXG4iKTsKKworICB1bnB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7 CisgIHRhcmdldF9raWxsICgpOworfQorCisvKiBSZWNvcmQgcmVnaXN0ZXJz IGNoYW5nZSAoYnkgdXNlciBvciBieSBHREIpIHRvIGxpc3QgYXMgYW4gaW5z dHJ1Y3Rpb24uICAqLworc3RhdGljIHZvaWQKK3JlY29yZF9yZWdpc3RlcnNf Y2hhbmdlIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbnVt KQoreworICAvKiBDaGVjayByZWNvcmRfaW5zbl9udW0uICAqLworICByZWNv cmRfY2hlY2tfaW5zbl9udW0gKDApOworCisgIHJlY29yZF9hcmNoX2xpc3Rf aGVhZCA9IE5VTEw7CisgIHJlY29yZF9hcmNoX2xpc3RfdGFpbCA9IE5VTEw7 CisKKyAgcmVjb3JkX3JlZ2NhY2hlID0gZ2V0X2N1cnJlbnRfcmVnY2FjaGUg KCk7CisKKyAgaWYgKHJlZ251bSA8IDApCisgICAgeworICAgICAgaW50IGk7 CisgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2RiYXJjaF9udW1fcmVncyAoZ2V0 X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKSk7IGkrKykKKwl7CisJICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChpKSkKKwkgICAgeworCSAgICAg IHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7 CisJICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8g cmVjb3JkIGV4ZWN1dGlvbiBsb2cuIikpOworCSAgICB9CisJfQorICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9yZWcgKHJlZ251bSkpCisJeworCSAgcmVjb3JkX2xpc3RfcmVsZWFzZSAo cmVjb3JkX2FyY2hfbGlzdF90YWlsKTsKKwkgIGVycm9yIChfKCJQcm9jZXNz IHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCBleGVjdXRpb24gbG9nLiIpKTsK Kwl9CisgICAgfQorICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfZW5kICgp KQorICAgIHsKKyAgICAgIHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9h cmNoX2xpc3RfdGFpbCk7CisgICAgICBlcnJvciAoXygiUHJvY2VzcyByZWNv cmQ6IGZhaWxlZCB0byByZWNvcmQgZXhlY3V0aW9uIGxvZy4iKSk7CisgICAg fQorICByZWNvcmRfbGlzdC0+bmV4dCA9IHJlY29yZF9hcmNoX2xpc3RfaGVh ZDsKKyAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkLT5wcmV2ID0gcmVjb3JkX2xp c3Q7CisgIHJlY29yZF9saXN0ID0gcmVjb3JkX2FyY2hfbGlzdF90YWlsOwor CisgIGlmIChyZWNvcmRfaW5zbl9udW0gPT0gcmVjb3JkX2luc25fbWF4X251 bSAmJiByZWNvcmRfaW5zbl9tYXhfbnVtKQorICAgIHJlY29yZF9saXN0X3Jl bGVhc2VfZmlyc3QgKCk7CisgIGVsc2UKKyAgICByZWNvcmRfaW5zbl9udW0r KzsKK30KKworc3RhdGljIHZvaWQKK3JlY29yZF9zdG9yZV9yZWdpc3RlcnMg KHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsIHN0cnVjdCByZWdjYWNoZSAqcmVn Y2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVnbm8pCit7 CisgIGlmICghcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZSkKKyAgICB7 CisgICAgICBpZiAoUkVDT1JEX0lTX1JFUExBWSkKKwl7CisJICBpbnQgbjsK KwkgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHM7CisKKwkgIC8qIExl dCB1c2VyIGNob29zZSBpZiBoZSB3YW50cyB0byB3cml0ZSByZWdpc3RlciBv ciBub3QuICAqLworCSAgaWYgKHJlZ25vIDwgMCkKKwkgICAgbiA9CisJICAg ICAgbnF1ZXJ5IChfKCJCZWNhdXNlIEdEQiBpcyBpbiByZXBsYXkgbW9kZSwg Y2hhbmdpbmcgdGhlICIKKwkJCSJ2YWx1ZSBvZiBhIHJlZ2lzdGVyIHdpbGwg bWFrZSB0aGUgZXhlY3V0aW9uICIKKwkJCSJsb2cgdW51c2FibGUgZnJvbSB0 aGlzIHBvaW50IG9ud2FyZC4gICIKKwkJCSJDaGFuZ2UgYWxsIHJlZ2lzdGVy cz8iKSk7CisJICBlbHNlCisJICAgIG4gPQorCSAgICAgIG5xdWVyeSAoXygi QmVjYXVzZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIGNoYW5naW5nIHRoZSB2 YWx1ZSAiCisJCQkib2YgYSByZWdpc3RlciB3aWxsIG1ha2UgdGhlIGV4ZWN1 dGlvbiBsb2cgdW51c2FibGUgIgorCQkJImZyb20gdGhpcyBwb2ludCBvbndh cmQuICBDaGFuZ2UgcmVnaXN0ZXIgJXM/IiksCisJCSAgICAgIGdkYmFyY2hf cmVnaXN0ZXJfbmFtZSAoZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKSwK KwkJCQkJICAgICAgIHJlZ25vKSk7CisKKwkgIGlmICghbikKKwkgICAgewor CSAgICAgIC8qIEludmFsaWRhdGUgdGhlIHZhbHVlIG9mIHJlZ2NhY2hlIHRo YXQgd2FzIHNldCBpbiBmdW5jdGlvbgorCSAgICAgICAgICJyZWdjYWNoZV9y YXdfd3JpdGUiLiAgKi8KKwkgICAgICBpZiAocmVnbm8gPCAwKQorCQl7CisJ CSAgaW50IGk7CisJCSAgZm9yIChpID0gMDsKKwkJICAgICAgIGkgPCBnZGJh cmNoX251bV9yZWdzIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpKTsK KwkJICAgICAgIGkrKykKKwkJICAgIHJlZ2NhY2hlX2ludmFsaWRhdGUgKHJl Z2NhY2hlLCBpKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJcmVnY2FjaGVfaW52 YWxpZGF0ZSAocmVnY2FjaGUsIHJlZ25vKTsKKworCSAgICAgIGVycm9yIChf KCJQcm9jZXNzIHJlY29yZCBjYW5jZWxlZCB0aGUgb3BlcmF0aW9uLiIpKTsK KwkgICAgfQorCisJICAvKiBEZXN0cm95IHRoZSByZWNvcmQgZnJvbSBoZXJl IGZvcndhcmQuICAqLworCSAgcmVjb3JkX2xpc3RfcmVsZWFzZV9uZXh0ICgp OworCX0KKworICAgICAgcmVjb3JkX3JlZ2lzdGVyc19jaGFuZ2UgKHJlZ2Nh Y2hlLCByZWdubyk7CisgICAgfQorICByZWNvcmRfYmVuZWF0aF90b19zdG9y ZV9yZWdpc3RlcnMgKHJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVy c19vcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVnY2FjaGUsIHJlZ25vKTsKK30KKworLyogQmVoYXZpb3IgaXMgY29uZGl0 aW9uYWwgb24gUkVDT1JEX0lTX1JFUExBWS4KKyAgIEluIHJlcGxheSBtb2Rl LCB3ZSBjYW5ub3Qgd3JpdGUgbWVtb3J5IHVubGVzIHdlIGFyZSB3aWxsaW5n IHRvCisgICBpbnZhbGlkYXRlIHRoZSByZWNvcmQvcmVwbGF5IGxvZyBmcm9t IHRoaXMgcG9pbnQgZm9yd2FyZC4gICovCisKK3N0YXRpYyBMT05HRVNUCity ZWNvcmRfeGZlcl9wYXJ0aWFsIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCBl bnVtIHRhcmdldF9vYmplY3Qgb2JqZWN0LAorCQkgICAgIGNvbnN0IGNoYXIg KmFubmV4LCBnZGJfYnl0ZSAqIHJlYWRidWYsCisJCSAgICAgY29uc3QgZ2Ri X2J5dGUgKiB3cml0ZWJ1ZiwgVUxPTkdFU1Qgb2Zmc2V0LCBMT05HRVNUIGxl bikKK3sKKyAgaWYgKCFyZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxlCisg ICAgICAmJiAob2JqZWN0ID09IFRBUkdFVF9PQkpFQ1RfTUVNT1JZCisJICB8 fCBvYmplY3QgPT0gVEFSR0VUX09CSkVDVF9SQVdfTUVNT1JZKSAmJiB3cml0 ZWJ1ZikKKyAgICB7CisgICAgICBpZiAoUkVDT1JEX0lTX1JFUExBWSkKKwl7 CisJICAvKiBMZXQgdXNlciBjaG9vc2UgaWYgaGUgd2FudHMgdG8gd3JpdGUg bWVtb3J5IG9yIG5vdC4gICovCisJICBpZiAoIW5xdWVyeSAoXygiQmVjYXVz ZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIHdyaXRpbmcgdG8gbWVtb3J5ICIK KwkJICAgICAgICAgIndpbGwgbWFrZSB0aGUgZXhlY3V0aW9uIGxvZyB1bnVz YWJsZSBmcm9tIHRoaXMgIgorCQkgICAgICAgICAicG9pbnQgb253YXJkLiAg V3JpdGUgbWVtb3J5IGF0IGFkZHJlc3MgMHglcz8iKSwKKwkJICAgICAgIHBh ZGRyX256IChvZmZzZXQpKSkKKwkgICAgcmV0dXJuIC0xOworCisJICAvKiBE ZXN0cm95IHRoZSByZWNvcmQgZnJvbSBoZXJlIGZvcndhcmQuICAqLworCSAg cmVjb3JkX2xpc3RfcmVsZWFzZV9uZXh0ICgpOworCX0KKworICAgICAgLyog Q2hlY2sgcmVjb3JkX2luc25fbnVtICovCisgICAgICByZWNvcmRfY2hlY2tf aW5zbl9udW0gKDApOworCisgICAgICAvKiBSZWNvcmQgcmVnaXN0ZXJzIGNo YW5nZSB0byBsaXN0IGFzIGFuIGluc3RydWN0aW9uLiAgKi8KKyAgICAgIHJl Y29yZF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7CisgICAgICByZWNvcmRfYXJj aF9saXN0X3RhaWwgPSBOVUxMOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAob2Zmc2V0LCBsZW4pKQorCXsKKwkgIHJlY29yZF9saXN0 X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7CisJICBpZiAocmVj b3JkX2RlYnVnKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRs b2csCisJCQkJXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQg IgorCQkJCSAgImV4ZWN1dGlvbiBsb2cuIikpOworCSAgcmV0dXJuIC0xOwor CX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9lbmQgKCkpCisJ eworCSAgcmVjb3JkX2xpc3RfcmVsZWFzZSAocmVjb3JkX2FyY2hfbGlzdF90 YWlsKTsKKwkgIGlmIChyZWNvcmRfZGVidWcpCisJICAgIGZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQlfKCJQcm9jZXNzIHJlY29yZDog ZmFpbGVkIHRvIHJlY29yZCAiCisJCQkJICAiZXhlY3V0aW9uIGxvZy4iKSk7 CisJICByZXR1cm4gLTE7CisJfQorICAgICAgcmVjb3JkX2xpc3QtPm5leHQg PSByZWNvcmRfYXJjaF9saXN0X2hlYWQ7CisgICAgICByZWNvcmRfYXJjaF9s aXN0X2hlYWQtPnByZXYgPSByZWNvcmRfbGlzdDsKKyAgICAgIHJlY29yZF9s aXN0ID0gcmVjb3JkX2FyY2hfbGlzdF90YWlsOworCisgICAgICBpZiAocmVj b3JkX2luc25fbnVtID09IHJlY29yZF9pbnNuX21heF9udW0gJiYgcmVjb3Jk X2luc25fbWF4X251bSkKKwlyZWNvcmRfbGlzdF9yZWxlYXNlX2ZpcnN0ICgp OworICAgICAgZWxzZQorCXJlY29yZF9pbnNuX251bSsrOworICAgIH0KKwor ICByZXR1cm4gcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsIChyZWNv cmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWxfb3BzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsIGFubmV4LCBy ZWFkYnVmLCB3cml0ZWJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb2Zmc2V0LCBsZW4pOworfQorCisvKiBCZWhhdmlv ciBpcyBjb25kaXRpb25hbCBvbiBSRUNPUkRfSVNfUkVQTEFZLgorICAgV2Ug d2lsbCBub3QgYWN0dWFsbHkgaW5zZXJ0IG9yIHJlbW92ZSBicmVha3BvaW50 cyB3aGVuIHJlcGxheWluZywKKyAgIG5vciB3aGVuIHJlY29yZGluZy4gICov CisKK3N0YXRpYyBpbnQKK3JlY29yZF9pbnNlcnRfYnJlYWtwb2ludCAoc3Ry dWN0IGJwX3RhcmdldF9pbmZvICpicF90Z3QpCit7CisgIGlmICghUkVDT1JE X0lTX1JFUExBWSkKKyAgICB7CisgICAgICBzdHJ1Y3QgY2xlYW51cCAqb2xk X2NsZWFudXBzID0gcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9zZXQg KCk7CisgICAgICBpbnQgcmV0ID0gcmVjb3JkX2JlbmVhdGhfdG9faW5zZXJ0 X2JyZWFrcG9pbnQgKGJwX3RndCk7CisKKyAgICAgIGlmIChvbGRfY2xlYW51 cHMpCisgICAgICAgIGRvX2NsZWFudXBzIChvbGRfY2xlYW51cHMpOworCisg ICAgICByZXR1cm4gcmV0OworICAgIH0KKworICByZXR1cm4gMDsKK30KKwor c3RhdGljIGludAorcmVjb3JkX3JlbW92ZV9icmVha3BvaW50IChzdHJ1Y3Qg YnBfdGFyZ2V0X2luZm8gKmJwX3RndCkKK3sKKyAgaWYgKCFSRUNPUkRfSVNf UkVQTEFZKQorICAgIHsKKyAgICAgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xl YW51cHMgPSByZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxlX3NldCAoKTsK KyAgICAgIGludCByZXQgPSByZWNvcmRfYmVuZWF0aF90b19yZW1vdmVfYnJl YWtwb2ludCAoYnBfdGd0KTsKKworICAgICAgaWYgKG9sZF9jbGVhbnVwcykK KyAgICAgICAgZG9fY2xlYW51cHMgKG9sZF9jbGVhbnVwcyk7CisKKyAgICAg IHJldHVybiByZXQ7CisgICAgfQorCisgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50CityZWNvcmRfY2FuX2V4ZWN1dGVfcmV2ZXJzZSAodm9pZCkKK3sK KyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X3JlY29yZF9v cHMgKHZvaWQpCit7CisgIHJlY29yZF9vcHMudG9fc2hvcnRuYW1lID0gInJl Y29yZCI7CisgIHJlY29yZF9vcHMudG9fbG9uZ25hbWUgPSAiUHJvY2VzcyBy ZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQiOworICByZWNvcmRfb3BzLnRvX2Rv YyA9CisgICAgIkxvZyBwcm9ncmFtIHdoaWxlIGV4ZWN1dGluZyBhbmQgcmVw bGF5IGV4ZWN1dGlvbiBmcm9tIGxvZy4iOworICByZWNvcmRfb3BzLnRvX29w ZW4gPSByZWNvcmRfb3BlbjsKKyAgcmVjb3JkX29wcy50b19jbG9zZSA9IHJl Y29yZF9jbG9zZTsKKyAgcmVjb3JkX29wcy50b19yZXN1bWUgPSByZWNvcmRf cmVzdW1lOworICByZWNvcmRfb3BzLnRvX3dhaXQgPSByZWNvcmRfd2FpdDsK KyAgcmVjb3JkX29wcy50b19kaXNjb25uZWN0ID0gcmVjb3JkX2Rpc2Nvbm5l Y3Q7CisgIHJlY29yZF9vcHMudG9fZGV0YWNoID0gcmVjb3JkX2RldGFjaDsK KyAgcmVjb3JkX29wcy50b19tb3Vybl9pbmZlcmlvciA9IHJlY29yZF9tb3Vy bl9pbmZlcmlvcjsKKyAgcmVjb3JkX29wcy50b19raWxsID0gcmVjb3JkX2tp bGw7CisgIHJlY29yZF9vcHMudG9fY3JlYXRlX2luZmVyaW9yID0gZmluZF9k ZWZhdWx0X2NyZWF0ZV9pbmZlcmlvcjsKKyAgcmVjb3JkX29wcy50b19zdG9y ZV9yZWdpc3RlcnMgPSByZWNvcmRfc3RvcmVfcmVnaXN0ZXJzOworICByZWNv cmRfb3BzLnRvX3hmZXJfcGFydGlhbCA9IHJlY29yZF94ZmVyX3BhcnRpYWw7 CisgIHJlY29yZF9vcHMudG9faW5zZXJ0X2JyZWFrcG9pbnQgPSByZWNvcmRf aW5zZXJ0X2JyZWFrcG9pbnQ7CisgIHJlY29yZF9vcHMudG9fcmVtb3ZlX2Jy ZWFrcG9pbnQgPSByZWNvcmRfcmVtb3ZlX2JyZWFrcG9pbnQ7CisgIHJlY29y ZF9vcHMudG9fY2FuX2V4ZWN1dGVfcmV2ZXJzZSA9IHJlY29yZF9jYW5fZXhl Y3V0ZV9yZXZlcnNlOworICByZWNvcmRfb3BzLnRvX3N0cmF0dW0gPSByZWNv cmRfc3RyYXR1bTsKKyAgcmVjb3JkX29wcy50b19tYWdpYyA9IE9QU19NQUdJ QzsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfcmVjb3JkX2RlYnVnIChzdHJ1 Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAorCQkgICBzdHJ1Y3Qg Y21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUpCit7Cisg IGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIkRlYnVnZ2luZyBvZiBwcm9j ZXNzIHJlY29yZCB0YXJnZXQgaXMgJXMuXG4iKSwKKwkJICAgIHZhbHVlKTsK K30KKworLyogQWxpYXMgZm9yICJ0YXJnZXQgcmVjb3JkIi4gICovCisKK3N0 YXRpYyB2b2lkCitjbWRfcmVjb3JkX3N0YXJ0IChjaGFyICphcmdzLCBpbnQg ZnJvbV90dHkpCit7CisgIGV4ZWN1dGVfY29tbWFuZCAoInRhcmdldCByZWNv cmQiLCBmcm9tX3R0eSk7Cit9CisKKy8qIFRydW5jYXRlIHRoZSByZWNvcmQg bG9nIGZyb20gdGhlIHByZXNlbnQgcG9pbnQKKyAgIG9mIHJlcGxheSB1bnRp bCB0aGUgZW5kLiAgKi8KKworc3RhdGljIHZvaWQKK2NtZF9yZWNvcmRfZGVs ZXRlIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCit7CisgIGlmIChjdXJy ZW50X3RhcmdldC50b19zdHJhdHVtID09IHJlY29yZF9zdHJhdHVtKQorICAg IHsKKyAgICAgIGlmIChSRUNPUkRfSVNfUkVQTEFZKQorCXsKKwkgIGlmICgh ZnJvbV90dHkgfHwgcXVlcnkgKF8oIkRlbGV0ZSB0aGUgbG9nIGZyb20gdGhp cyBwb2ludCBmb3J3YXJkICIKKwkJICAgICAgICAgICAgICAgICAgICAiYW5k IGJlZ2luIHRvIHJlY29yZCB0aGUgcnVubmluZyBtZXNzYWdlICIKKwkJICAg ICAgICAgICAgICAgICAgICAiYXQgY3VycmVudCBQQz8iKSkpCisJICAgIHJl Y29yZF9saXN0X3JlbGVhc2VfbmV4dCAoKTsKKwl9CisgICAgICBlbHNlCisJ ICBwcmludGZfdW5maWx0ZXJlZCAoXygiQWxyZWFkeSBhdCBlbmQgb2YgcmVj b3JkIGxpc3QuXG4iKSk7CisKKyAgICB9CisgIGVsc2UKKyAgICBwcmludGZf dW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNvcmQgaXMgbm90IHN0YXJ0ZWQu XG4iKSk7Cit9CisKKy8qIEltcGxlbWVudCB0aGUgInN0b3ByZWNvcmQiIGNv bW1hbmQuICAqLworCitzdGF0aWMgdm9pZAorY21kX3JlY29yZF9zdG9wIChj aGFyICphcmdzLCBpbnQgZnJvbV90dHkpCit7CisgIGlmIChjdXJyZW50X3Rh cmdldC50b19zdHJhdHVtID09IHJlY29yZF9zdHJhdHVtKQorICAgIHsKKyAg ICAgIGlmICghcmVjb3JkX2xpc3QgfHwgIWZyb21fdHR5IHx8IHF1ZXJ5IChf KCJEZWxldGUgcmVjb3JkZWQgbG9nIGFuZCAiCisJICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJzdG9wIHJlY29yZGluZz8iKSkp CisJdW5wdXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOworICAgIH0KKyAgZWxz ZQorICAgIHByaW50Zl91bmZpbHRlcmVkIChfKCJQcm9jZXNzIHJlY29yZCBp cyBub3Qgc3RhcnRlZC5cbiIpKTsKK30KKworLyogU2V0IHVwcGVyIGxpbWl0 IG9mIHJlY29yZCBsb2cgc2l6ZS4gICovCisKK3N0YXRpYyB2b2lkCitzZXRf cmVjb3JkX2luc25fbWF4X251bSAoY2hhciAqYXJncywgaW50IGZyb21fdHR5 LCBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYykKK3sKKyAgaWYgKHJlY29y ZF9pbnNuX251bSA+IHJlY29yZF9pbnNuX21heF9udW0gJiYgcmVjb3JkX2lu c25fbWF4X251bSkKKyAgICB7CisgICAgICBwcmludGZfdW5maWx0ZXJlZCAo XygiUmVjb3JkIGluc3RydWN0aW9ucyBudW1iZXIgaXMgYmlnZ2VyIHRoYW4g IgorCQkgICAgICAgICAgICJyZWNvcmQgaW5zdHJ1Y3Rpb25zIG1heCBudW1i ZXIuICBBdXRvIGRlbGV0ZSAiCisJCSAgICAgICAgICAgInRoZSBmaXJzdCBv bmVzP1xuIikpOworCisgICAgICB3aGlsZSAocmVjb3JkX2luc25fbnVtID4g cmVjb3JkX2luc25fbWF4X251bSkKKwlyZWNvcmRfbGlzdF9yZWxlYXNlX2Zp cnN0ICgpOworICAgIH0KK30KKworLyogUHJpbnQgdGhlIGN1cnJlbnQgaW5k ZXggaW50byB0aGUgcmVjb3JkIGxvZyAobnVtYmVyIG9mIGluc25zIHJlY29y ZGVkCisgICBzbyBmYXIpLiAgKi8KKworc3RhdGljIHZvaWQKK3Nob3dfcmVj b3JkX2luc25fbnVtYmVyIChjaGFyICppZ25vcmUsIGludCBmcm9tX3R0eSkK K3sKKyAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlJlY29yZCBpbnN0cnVjdGlv biBudW1iZXIgaXMgJWQuXG4iKSwKKwkJICAgICByZWNvcmRfaW5zbl9udW0p OworfQorCit2b2lkCitfaW5pdGlhbGl6ZV9yZWNvcmQgKHZvaWQpCit7Cisg IC8qIEluaXQgcmVjb3JkX2ZpcnN0LiAgKi8KKyAgcmVjb3JkX2ZpcnN0LnBy ZXYgPSBOVUxMOworICByZWNvcmRfZmlyc3QubmV4dCA9IE5VTEw7CisgIHJl Y29yZF9maXJzdC50eXBlID0gcmVjb3JkX2VuZDsKKworICBpbml0X3JlY29y ZF9vcHMgKCk7CisgIGFkZF90YXJnZXQgKCZyZWNvcmRfb3BzKTsKKworICBh ZGRfc2V0c2hvd196aW50ZWdlcl9jbWQgKCJyZWNvcmQiLCBub19jbGFzcywg JnJlY29yZF9kZWJ1ZywKKwkJCSAgICBfKCJTZXQgZGVidWdnaW5nIG9mIHJl Y29yZC9yZXBsYXkgZmVhdHVyZS4iKSwKKwkJCSAgICBfKCJTaG93IGRlYnVn Z2luZyBvZiByZWNvcmQvcmVwbGF5IGZlYXR1cmUuIiksCisJCQkgICAgXygi V2hlbiBlbmFibGVkLCBkZWJ1Z2dpbmcgb3V0cHV0IGZvciAiCisJCQkgICAg ICAicmVjb3JkL3JlcGxheSBmZWF0dXJlIGlzIGRpc3BsYXllZC4iKSwKKwkJ CSAgICBOVUxMLCBzaG93X3JlY29yZF9kZWJ1ZywgJnNldGRlYnVnbGlzdCwK KwkJCSAgICAmc2hvd2RlYnVnbGlzdCk7CisKKyAgYWRkX2NvbSAoInJlY29y ZCIsIGNsYXNzX29ic2N1cmUsIGNtZF9yZWNvcmRfc3RhcnQsCisJICAgXygi QWJicmV2aWF0ZWQgZm9ybSBvZiBcInRhcmdldCByZWNvcmRcIiBjb21tYW5k LiIpKTsKKworICBhZGRfY29tX2FsaWFzICgicmVjIiwgInJlY29yZCIsIGNs YXNzX29ic2N1cmUsIDEpOworCisgIC8qIFhYWDogSSB0cnkgdG8gdXNlIHNv bWUgc2ltcGxlIGNvbW1hbmRzIHN1Y2ggYXMgImRpc2Nvbm5lY3QiIGFuZAor ICAgICAiZGV0YWNoIiB0byBzdXBwb3J0IHRoaXMgZnVuY3Rpb25zLiAgQnV0 IHRoZXNlIGNvbW1hbmRzIGFsbCBoYXZlCisgICAgIG90aGVyIGFmZmVjdCB0 byBHREIgc3VjaCBhcyBjYWxsIGZ1bmN0aW9uICJub19zaGFyZWRfbGlicmFy aWVzIi4KKyAgICAgU28gSSBhZGQgc3BlY2lhbCBjb21tYW5kcyB0byBHREIu ICAqLworICBhZGRfY29tICgiZGVscmVjb3JkIiwgY2xhc3Nfb2JzY3VyZSwg Y21kX3JlY29yZF9kZWxldGUsCisJICAgXygiRGVsZXRlIHRoZSByZXN0IG9m IGV4ZWN1dGlvbiBsb2cgYW5kIHN0YXJ0IHJlY29yZGluZyBpdCBhbmV3LiIp KTsKKyAgYWRkX2NvbV9hbGlhcyAoImRyIiwgImRlbHJlY29yZCIsIGNsYXNz X29ic2N1cmUsIDEpOworICBhZGRfY29tICgic3RvcHJlY29yZCIsIGNsYXNz X29ic2N1cmUsIGNtZF9yZWNvcmRfc3RvcCwKKwkgICBfKCJTdG9wIHRoZSBy ZWNvcmQvcmVwbGF5IHRhcmdldC4iKSk7CisgIGFkZF9jb21fYWxpYXMgKCJz ciIsICJzdG9wcmVjb3JkIiwgY2xhc3Nfb2JzY3VyZSwgMSk7CisKKyAgLyog UmVjb3JkIGluc3RydWN0aW9ucyBudW1iZXIgbGltaXQgY29tbWFuZC4gICov CisgIGFkZF9zZXRzaG93X2Jvb2xlYW5fY21kICgicmVjb3JkLXN0b3AtYXQt bGltaXQiLCBub19jbGFzcywKKwkJCSAgICAmcmVjb3JkX3N0b3BfYXRfbGlt aXQsCisJCQkgICAgXygiU2V0IHdoZXRoZXIgcmVjb3JkL3JlcGxheSBzdG9w IHdoZW4gIgorCQkJICAgICAgInJlY29yZC9yZXBsYXkgYnVmZmVyIGJlY29t ZXMgZnVsbC4iKSwKKwkJCSAgICBfKCJTaG93IHdoZXRoZXIgcmVjb3JkL3Jl cGxheSBzdG9wIHdoZW4gIgorCQkJICAgICAgInJlY29yZC9yZXBsYXkgYnVm ZmVyIGJlY29tZXMgZnVsbC4iKSwKKwkgICAgICAgICAgICAgICAgICAgIF8o IkVuYWJsZSBpcyBkZWZhdWx0IHZhbHVlLlxuIgorCSAgICAgICAgICAgICAg ICAgICAgICAiV2hlbiBlbmFibGVkLCBpZiB0aGUgcmVjb3JkL3JlcGxheSBi dWZmZXIgIgorCQkJICAgICAgImJlY29tZXMgZnVsbCxcbiIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJhc2sgdXNlciB3aGF0IHRvIGRvLlxu IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldoZW4gZGlzYWJs ZWQsIGlmIHRoZSByZWNvcmQvcmVwbGF5IGJ1ZmZlciAiCisJCQkgICAgICAi YmVjb21lcyBmdWxsLFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImRlbGV0ZSBpdCBhbmQgc3RhcnQgbmV3IHJlY29yZGluZy4iKSwKKwkJ CSAgICBOVUxMLCBOVUxMLCAmc2V0bGlzdCwgJnNob3dsaXN0KTsKKyAgYWRk X3NldHNob3dfemludGVnZXJfY21kICgicmVjb3JkLWluc24tbnVtYmVyLW1h eCIsIG5vX2NsYXNzLAorCQkJICAgICZyZWNvcmRfaW5zbl9tYXhfbnVtLAor CQkJICAgIF8oIlNldCByZWNvcmQvcmVwbGF5IGJ1ZmZlciBsaW1pdC4iKSwK KwkJCSAgICBfKCJTaG93IHJlY29yZC9yZXBsYXkgYnVmZmVyIGxpbWl0LiIp LAorCQkJICAgIF8oIlNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1 Y3Rpb25zIHRvIGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJzdG9yZWQgaW4gdGhlXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAicmVjb3JkL3JlcGxheSBidWZmZXIuICAiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiWmVybyBtZWFucyB1bmxpbWl0ZWQgKGRlZmF1 bHQgMjAwMDAwKS4iKSwKKwkJCSAgICBzZXRfcmVjb3JkX2luc25fbWF4X251 bSwKKwkJCSAgICBOVUxMLCAmc2V0bGlzdCwgJnNob3dsaXN0KTsKKyAgYWRk X2luZm8gKCJyZWNvcmQtaW5zbi1udW1iZXIiLCBzaG93X3JlY29yZF9pbnNu X251bWJlciwKKwkgICAgXygiU2hvdyB0aGUgY3VycmVudCBudW1iZXIgb2Yg aW5zdHJ1Y3Rpb25zIGluIHRoZSAiCisJICAgICAgInJlY29yZC9yZXBsYXkg YnVmZmVyLiIpKTsKK30KLS0tIC9kZXYvbnVsbAorKysgYi9yZWNvcmQuaApA QCAtMCwwICsxLDc0IEBACisvKiBQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5 IHRhcmdldCBmb3IgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5 cmlnaHQgKEMpIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfUkVDT1JEX0hf CisjZGVmaW5lIF9SRUNPUkRfSF8KKwordHlwZWRlZiBzdHJ1Y3QgcmVjb3Jk X3JlZ19zCit7CisgIGludCBudW07CisgIGdkYl9ieXRlICp2YWw7Cit9IHJl Y29yZF9yZWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcmVjb3JkX21lbV9zCit7 CisgIENPUkVfQUREUiBhZGRyOworICBpbnQgbGVuOworICBnZGJfYnl0ZSAq dmFsOworfSByZWNvcmRfbWVtX3Q7CisKK2VudW0gcmVjb3JkX3R5cGUKK3sK KyAgcmVjb3JkX2VuZCA9IDAsCisgIHJlY29yZF9yZWcsCisgIHJlY29yZF9t ZW0KK307CisKKy8qIFRoaXMgaXMgdGhlIGNvcmUgc3RydWN0IG9mIHJlY29y ZCBmdW5jdGlvbi4KKworICAgQW4gZW50aXR5IG9mIHJlY29yZF90IGlzIGEg cmVjb3JkIG9mIHRoZSB2YWx1ZSBjaGFuZ2Ugb2YgYSByZWdpc3RlcgorICAg KCJyZWNvcmRfcmVnIikgb3IgYSBwYXJ0IG9mIG1lbW9yeSAoInJlY29yZF9t ZW0iKS4gIEFuZCBlYWNoCisgICBpbnN0cnVjdGlvbiBtdXN0IGhhcyBhIHJl Y29yZF90ICgicmVjb3JkX2VuZCIpIHRoYXQgcG9pbnRzIG91dCB0aGlzCisg ICBpcyB0aGUgbGFzdCByZWNvcmRfdCBvZiB0aGlzIGluc3RydWN0aW9uLgor CisgICBFYWNoIHJlY29yZF90IGlzIGxpbmtlZCB0byAicmVjb3JkX2xpc3Qi IGJ5ICJwcmV2IiBhbmQgIm5leHQiLgorICovCit0eXBlZGVmIHN0cnVjdCBy ZWNvcmRfcworeworICBzdHJ1Y3QgcmVjb3JkX3MgKnByZXY7CisgIHN0cnVj dCByZWNvcmRfcyAqbmV4dDsKKyAgZW51bSByZWNvcmRfdHlwZSB0eXBlOwor ICB1bmlvbgorICB7CisgICAgLyogcmVnICovCisgICAgcmVjb3JkX3JlZ190 IHJlZzsKKyAgICAvKiBtZW0gKi8KKyAgICByZWNvcmRfbWVtX3QgbWVtOwor ICB9IHU7Cit9IHJlY29yZF90OworCitleHRlcm4gaW50IHJlY29yZF9kZWJ1 ZzsKK2V4dGVybiBzdHJ1Y3QgcmVnY2FjaGUgKnJlY29yZF9yZWdjYWNoZTsK KworZXh0ZXJuIGludCByZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKGludCBu dW0pOworZXh0ZXJuIGludCByZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKENP UkVfQUREUiBhZGRyLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgcmVjb3JkX2Fy Y2hfbGlzdF9hZGRfZW5kICh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgY2xlYW51 cCAqIHJlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGVfc2V0ICh2b2lkKTsK KworI2VuZGlmIC8qIF9SRUNPUkRfSF8gKi8K --001485f870566f26260465ec4a90--