Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nD32d-0001qW-PF for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Jan 2022 11:34:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nD32c-0000FR-6B for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Jan 2022 11:34:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nD32a-0000FI-O9 for pgsql-hackers@lists.postgresql.org; Thu, 27 Jan 2022 11:34:13 +0000 Received: from out1-smtp.messagingengine.com ([66.111.4.25]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nD32V-0003A3-Iw for pgsql-hackers@postgresql.org; Thu, 27 Jan 2022 11:34:11 +0000 Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.nyi.internal (Postfix) with ESMTP id 98BE55C011A; Thu, 27 Jan 2022 06:34:05 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Thu, 27 Jan 2022 06:34:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:from:from :in-reply-to:message-id:mime-version:reply-to:sender:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm1; bh=F0pwheLk/cTPjwpi4a5RVORGiPlTuz0xtxtM7nGU+ wA=; b=T15fVaVgrmEmARTbRav2MZKgMBQW9jRkR51dByhNh5sCVh4uUPfPwpkvl GPiCqX7LzeMK9ynB6hvUXYGblQZC2rGThz3nLcSs+RABYxsmLuXs1HXjoMHzCAob e+KUt0/NPqYFo/jDPzNWvd6o7kUPG++IVpjToUnkxgDb3bQ0ygmxpiZkoqqGdPOM 3SLIauEGBzsN8d6fyZmpe94CQHX1Lx1rl5U34YjCx+dqwEX6zrPrr8FIAuG4IAOX rjhGdKi1RnJcKsNkbfO1Vp9BVU8S/cExLc1Tx8bt+DVNjQJvnW439W5hNS/ylZgt dcsgMzirsbTz7QiC77jk1SnhfoLNQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvvddrfeefgdeftdcutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpegtkfffgggfhffuvfesmhdtreertdefjeenucfhrhhomheprfgvthgvrhcugfhi shgvnhhtrhgruhhtuceophgvthgvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrih hsvggusgdrtghomheqnecuggftrfgrthhtvghrnhepteevuedvieekieeghfevfffhhfdv jeevleelfeeikeeikedvffegteekuddtfeelnecuvehluhhsthgvrhfuihiivgeptdenuc frrghrrghmpehmrghilhhfrhhomhepphgvthgvrhdrvghishgvnhhtrhgruhhtsegvnhht vghrphhrihhsvggusgdrtghomh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 27 Jan 2022 06:34:04 -0500 (EST) Content-Type: multipart/mixed; boundary="------------NHoKzTiFJi3fL72llcC1x0i8" Message-ID: Date: Thu, 27 Jan 2022 12:34:03 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Content-Language: en-US From: Peter Eisentraut Subject: psql: Rename results to result when only a single one is meant To: pgsql-hackers Cc: Fabien COELHO List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------NHoKzTiFJi3fL72llcC1x0i8 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit While reviewing code related to supporting multiple result sets in psql, it is always confusing that in psql many variables of type PGresult* are named "results" (plural), as if there could be multiple. While it is ok in casual talk to consider a return from a query to be a bunch of stuff, this plural naming is inconsistent with how other code and the libpq API uses these terms. And if we're going to get to multiple result sets support, I think we need to be more precise throughout the code. The attached patch renames these variables and functions to singular where appropriate. --------------NHoKzTiFJi3fL72llcC1x0i8 Content-Type: text/plain; charset=UTF-8; name="0001-psql-Rename-results-to-result-when-only-a-single-one.patch" Content-Disposition: attachment; filename*0="0001-psql-Rename-results-to-result-when-only-a-single-one.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwZGM3YjdmMzljYTgyMjY1NDQ4ZTRlNzY3Njg0MTM0NGQ3ZmM5ZGIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVGh1LCAyNyBKYW4gMjAyMiAxMjoyMToyNCArMDEwMApTdWJqZWN0 OiBbUEFUQ0hdIHBzcWw6IFJlbmFtZSByZXN1bHRzIHRvIHJlc3VsdCB3aGVuIG9ubHkgYSBz aW5nbGUgb25lIGlzCiBtZWFudAoKVGhpcyBtYWtlcyB0aGUgbmFtaW5nIG1vcmUgY29uc2lz dGVudCB3aXRoIHRoZSBsaWJwcSBBUEkgYW5kIHRoZSByZXN0Cm9mIHRoZSBjb2RlLCBhbmQg bWFrZXMgYWN0dWFsbHkgc3VwcG9ydGluZyBtdWx0aXBsZSByZXN1bHQgc2V0cyBpbiB0aGUK ZnV0dXJlIGxlc3MgY29uZnVzaW5nLgotLS0KIHNyYy9iaW4vcHNxbC9jb21tYW5kLmMgICAg ICB8ICAgNiArLQogc3JjL2Jpbi9wc3FsL2NvbW1vbi5jICAgICAgIHwgMjMwICsrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wc3FsL2Nyb3NzdGFidmll dy5jIHwgIDI4ICsrLS0tCiBzcmMvYmluL3BzcWwvY3Jvc3N0YWJ2aWV3LmggfCAgIDIgKy0K IHNyYy9iaW4vcHNxbC9oZWxwLmMgICAgICAgICB8ICAgNiArLQogc3JjL2Jpbi9wc3FsL3Nl dHRpbmdzLmggICAgIHwgICA2ICstCiBzcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMgfCAg IDQgKy0KIHNyYy9iaW4vcHNxbC92YXJpYWJsZXMuYyAgICB8ICAgMiArLQogOCBmaWxlcyBj aGFuZ2VkLCAxNDIgaW5zZXJ0aW9ucygrKSwgMTQyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMgYi9zcmMvYmluL3BzcWwvY29tbWFuZC5jCmlu ZGV4IGY1OTA0NzQ4NTUuLjI5MmNmZjVkZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9j b21tYW5kLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYwpAQCAtMjc5LDcgKzI3OSw3 IEBAIEhhbmRsZVNsYXNoQ21kcyhQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsCiAgKiBTdWJy b3V0aW5lIHRvIGFjdHVhbGx5IHRyeSB0byBleGVjdXRlIGEgYmFja3NsYXNoIGNvbW1hbmQu CiAgKgogICogVGhlIHR5cGljYWwgInN1Y2Nlc3MiIHJlc3VsdCBjb2RlIGlzIFBTUUxfQ01E X1NLSVBfTElORSwgYWx0aG91Z2ggc29tZQotICogY29tbWFuZHMgcmV0dXJuIHNvbWV0aGlu ZyBlbHNlLiAgRmFpbHVyZSByZXN1bHRzIGFyZSBQU1FMX0NNRF9FUlJPUiwKKyAqIGNvbW1h bmRzIHJldHVybiBzb21ldGhpbmcgZWxzZS4gIEZhaWx1cmUgcmVzdWx0IGNvZGUgaXMgUFNR TF9DTURfRVJST1IsCiAgKiB1bmxlc3MgUFNRTF9DTURfVU5LTk9XTiBpcyBtb3JlIGFwcHJv cHJpYXRlLgogICovCiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0CkBAIC02ODMsNyArNjgzLDcg QEAgZXhlY19jb21tYW5kX2NvcHlyaWdodChQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJv b2wgYWN0aXZlX2JyYW5jaCkKIH0KIAogLyoKLSAqIFxjcm9zc3RhYnZpZXcgLS0gZXhlY3V0 ZSBhIHF1ZXJ5IGFuZCBkaXNwbGF5IHJlc3VsdHMgaW4gY3Jvc3N0YWIKKyAqIFxjcm9zc3Rh YnZpZXcgLS0gZXhlY3V0ZSBhIHF1ZXJ5IGFuZCBkaXNwbGF5IHJlc3VsdCBpbiBjcm9zc3Rh YgogICovCiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0CiBleGVjX2NvbW1hbmRfY3Jvc3N0YWJ2 aWV3KFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKQpAQCAt NTA4NCw3ICs1MDg0LDcgQEAgZG9fd2F0Y2goUFFFeHBCdWZmZXIgcXVlcnlfYnVmLCBkb3Vi bGUgc2xlZXApCiAJCQkJCSB0aW1lYnVmLCBzbGVlcCk7CiAJCW15b3B0LnRpdGxlID0gdGl0 bGU7CiAKLQkJLyogUnVuIHRoZSBxdWVyeSBhbmQgcHJpbnQgb3V0IHRoZSByZXN1bHRzICov CisJCS8qIFJ1biB0aGUgcXVlcnkgYW5kIHByaW50IG91dCB0aGUgcmVzdWx0ICovCiAJCXJl cyA9IFBTUUxleGVjV2F0Y2gocXVlcnlfYnVmLT5kYXRhLCAmbXlvcHQsIHBhZ2VycGlwZSk7 CiAKIAkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9jb21tb24uYyBiL3NyYy9iaW4v cHNxbC9jb21tb24uYwppbmRleCAzNTAzNjA1YTdkLi5kNjViOWExMjRmIDEwMDY0NAotLS0g YS9zcmMvYmluL3BzcWwvY29tbW9uLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCkBA IC00MTEsMTEgKzQxMSwxMSBAQCBBY2NlcHRSZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3Vs dCkKICAqIGVudGVyZWQgYnkgdGhlIHVzZXIsIG5vdCBxdWVyaWVzIGdlbmVyYXRlZCBieSBz bGFzaCBjb21tYW5kcy4KICAqLwogc3RhdGljIHZvaWQKLVNldFJlc3VsdFZhcmlhYmxlcyhQ R3Jlc3VsdCAqcmVzdWx0cywgYm9vbCBzdWNjZXNzKQorU2V0UmVzdWx0VmFyaWFibGVzKFBH cmVzdWx0ICpyZXN1bHQsIGJvb2wgc3VjY2VzcykKIHsKIAlpZiAoc3VjY2VzcykKIAl7Ci0J CWNvbnN0IGNoYXIgKm50dXBsZXMgPSBQUWNtZFR1cGxlcyhyZXN1bHRzKTsKKwkJY29uc3Qg Y2hhciAqbnR1cGxlcyA9IFBRY21kVHVwbGVzKHJlc3VsdCk7CiAKIAkJU2V0VmFyaWFibGUo cHNldC52YXJzLCAiRVJST1IiLCAiZmFsc2UiKTsKIAkJU2V0VmFyaWFibGUocHNldC52YXJz LCAiU1FMU1RBVEUiLCAiMDAwMDAiKTsKQEAgLTQyMyw4ICs0MjMsOCBAQCBTZXRSZXN1bHRW YXJpYWJsZXMoUEdyZXN1bHQgKnJlc3VsdHMsIGJvb2wgc3VjY2VzcykKIAl9CiAJZWxzZQog CXsKLQkJY29uc3QgY2hhciAqY29kZSA9IFBRcmVzdWx0RXJyb3JGaWVsZChyZXN1bHRzLCBQ R19ESUFHX1NRTFNUQVRFKTsKLQkJY29uc3QgY2hhciAqbWVzZyA9IFBRcmVzdWx0RXJyb3JG aWVsZChyZXN1bHRzLCBQR19ESUFHX01FU1NBR0VfUFJJTUFSWSk7CisJCWNvbnN0IGNoYXIg KmNvZGUgPSBQUXJlc3VsdEVycm9yRmllbGQocmVzdWx0LCBQR19ESUFHX1NRTFNUQVRFKTsK KwkJY29uc3QgY2hhciAqbWVzZyA9IFBRcmVzdWx0RXJyb3JGaWVsZChyZXN1bHQsIFBHX0RJ QUdfTUVTU0FHRV9QUklNQVJZKTsKIAogCQlTZXRWYXJpYWJsZShwc2V0LnZhcnMsICJFUlJP UiIsICJ0cnVlIik7CiAKQEAgLTU4Nyw3ICs1ODcsNyBAQCBQU1FMZXhlYyhjb25zdCBjaGFy ICpxdWVyeSkKICAqIFBTUUxleGVjV2F0Y2gKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVz ZWQgZm9yIFx3YXRjaCBjb21tYW5kIHRvIHNlbmQgdGhlIHF1ZXJ5IHRvCi0gKiB0aGUgc2Vy dmVyIGFuZCBwcmludCBvdXQgdGhlIHJlc3VsdHMuCisgKiB0aGUgc2VydmVyIGFuZCBwcmlu dCBvdXQgdGhlIHJlc3VsdC4KICAqCiAgKiBSZXR1cm5zIDEgaWYgdGhlIHF1ZXJ5IGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseSwgMCBpZiBpdCBjYW5ub3QgYmUgcmVwZWF0ZWQsCiAgKiBlLmcu LCBiZWNhdXNlIG9mIHRoZSBpbnRlcnJ1cHQsIC0xIG9uIGVycm9yLgpAQCAtNzE0LDkgKzcx NCw5IEBAIFByaW50Tm90aWZpY2F0aW9ucyh2b2lkKQogICogUmV0dXJucyB0cnVlIGlmIHN1 Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGJvb2wKLVByaW50UXVl cnlUdXBsZXMoY29uc3QgUEdyZXN1bHQgKnJlc3VsdHMpCitQcmludFF1ZXJ5VHVwbGVzKGNv bnN0IFBHcmVzdWx0ICpyZXN1bHQpCiB7Ci0JYm9vbAkJcmVzdWx0ID0gdHJ1ZTsKKwlib29s CQlvayA9IHRydWU7CiAKIAkvKiB3cml0ZSBvdXRwdXQgdG8gXGcgYXJndW1lbnQsIGlmIGFu eSAqLwogCWlmIChwc2V0LmdmbmFtZSkKQEAgLTcyOSwxMSArNzI5LDExIEBAIFByaW50UXVl cnlUdXBsZXMoY29uc3QgUEdyZXN1bHQgKnJlc3VsdHMpCiAJCWlmIChpc19waXBlKQogCQkJ ZGlzYWJsZV9zaWdwaXBlX3RyYXAoKTsKIAotCQlwcmludFF1ZXJ5KHJlc3VsdHMsICZwc2V0 LnBvcHQsIGZvdXQsIGZhbHNlLCBwc2V0LmxvZ2ZpbGUpOworCQlwcmludFF1ZXJ5KHJlc3Vs dCwgJnBzZXQucG9wdCwgZm91dCwgZmFsc2UsIHBzZXQubG9nZmlsZSk7CiAJCWlmIChmZXJy b3IoZm91dCkpCiAJCXsKIAkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IHByaW50IHJlc3Vs dCB0YWJsZTogJW0iKTsKLQkJCXJlc3VsdCA9IGZhbHNlOworCQkJb2sgPSBmYWxzZTsKIAkJ fQogCiAJCWlmIChpc19waXBlKQpAQCAtNzQ2LDE1ICs3NDYsMTUgQEAgUHJpbnRRdWVyeVR1 cGxlcyhjb25zdCBQR3Jlc3VsdCAqcmVzdWx0cykKIAl9CiAJZWxzZQogCXsKLQkJcHJpbnRR dWVyeShyZXN1bHRzLCAmcHNldC5wb3B0LCBwc2V0LnF1ZXJ5Rm91dCwgZmFsc2UsIHBzZXQu bG9nZmlsZSk7CisJCXByaW50UXVlcnkocmVzdWx0LCAmcHNldC5wb3B0LCBwc2V0LnF1ZXJ5 Rm91dCwgZmFsc2UsIHBzZXQubG9nZmlsZSk7CiAJCWlmIChmZXJyb3IocHNldC5xdWVyeUZv dXQpKQogCQl7CiAJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBwcmludCByZXN1bHQgdGFi bGU6ICVtIik7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKKwkJCW9rID0gZmFsc2U7CiAJCX0KIAl9 CiAKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiBvazsKIH0KIAogCkBAIC05MTIsNyArOTEy LDcgQEAgRXhlY1F1ZXJ5VHVwbGVzKGNvbnN0IFBHcmVzdWx0ICpyZXN1bHQpCiAgKiBzZXJ2 ZXItc2lkZSBvcGluaW9uLgogICovCiBzdGF0aWMgYm9vbAotUHJvY2Vzc1Jlc3VsdChQR3Jl c3VsdCAqKnJlc3VsdHMpCitQcm9jZXNzUmVzdWx0KFBHcmVzdWx0ICoqcmVzdWx0cCkKIHsK IAlib29sCQlzdWNjZXNzID0gdHJ1ZTsKIAlib29sCQlmaXJzdF9jeWNsZSA9IHRydWU7CkBA IC05MjMsNyArOTIzLDcgQEAgUHJvY2Vzc1Jlc3VsdChQR3Jlc3VsdCAqKnJlc3VsdHMpCiAJ CWJvb2wJCWlzX2NvcHk7CiAJCVBHcmVzdWx0ICAgKm5leHRfcmVzdWx0OwogCi0JCWlmICgh QWNjZXB0UmVzdWx0KCpyZXN1bHRzKSkKKwkJaWYgKCFBY2NlcHRSZXN1bHQoKnJlc3VsdHAp KQogCQl7CiAJCQkvKgogCQkJICogRmFpbHVyZSBhdCB0aGlzIHBvaW50IGlzIGFsd2F5cyBh IHNlcnZlci1zaWRlIGZhaWx1cmUgb3IgYQpAQCAtOTM0LDcgKzkzNCw3IEBAIFByb2Nlc3NS ZXN1bHQoUEdyZXN1bHQgKipyZXN1bHRzKQogCQkJYnJlYWs7CiAJCX0KIAotCQlyZXN1bHRf c3RhdHVzID0gUFFyZXN1bHRTdGF0dXMoKnJlc3VsdHMpOworCQlyZXN1bHRfc3RhdHVzID0g UFFyZXN1bHRTdGF0dXMoKnJlc3VsdHApOwogCQlzd2l0Y2ggKHJlc3VsdF9zdGF0dXMpCiAJ CXsKIAkJCWNhc2UgUEdSRVNfRU1QVFlfUVVFUlk6CkBAIC0xMDM3LDcgKzEwMzcsNyBAQCBQ cm9jZXNzUmVzdWx0KFBHcmVzdWx0ICoqcmVzdWx0cykKIAkJCQljb3B5c3RyZWFtID0gcHNl dC5jb3B5U3RyZWFtID8gcHNldC5jb3B5U3RyZWFtIDogcHNldC5jdXJfY21kX3NvdXJjZTsK IAkJCQlzdWNjZXNzID0gaGFuZGxlQ29weUluKHBzZXQuZGIsCiAJCQkJCQkJCQkgICBjb3B5 c3RyZWFtLAotCQkJCQkJCQkJICAgUFFiaW5hcnlUdXBsZXMoKnJlc3VsdHMpLAorCQkJCQkJ CQkJICAgUFFiaW5hcnlUdXBsZXMoKnJlc3VsdHApLAogCQkJCQkJCQkJICAgJmNvcHlfcmVz dWx0KSAmJiBzdWNjZXNzOwogCQkJfQogCQkJUmVzZXRDYW5jZWxDb25uKCk7CkBAIC0xMDQ2 LDggKzEwNDYsOCBAQCBQcm9jZXNzUmVzdWx0KFBHcmVzdWx0ICoqcmVzdWx0cykKIAkJCSAq IFJlcGxhY2UgdGhlIFBHUkVTX0NPUFlfT1VUL0lOIHJlc3VsdCB3aXRoIENPUFkgY29tbWFu ZCdzIGV4aXQKIAkJCSAqIHN0YXR1cywgb3Igd2l0aCBOVUxMIGlmIHdlIHdhbnQgdG8gc3Vw cHJlc3MgcHJpbnRpbmcgYW55dGhpbmcuCiAJCQkgKi8KLQkJCVBRY2xlYXIoKnJlc3VsdHMp OwotCQkJKnJlc3VsdHMgPSBjb3B5X3Jlc3VsdDsKKwkJCVBRY2xlYXIoKnJlc3VsdHApOwor CQkJKnJlc3VsdHAgPSBjb3B5X3Jlc3VsdDsKIAkJfQogCQllbHNlIGlmIChmaXJzdF9jeWNs ZSkKIAkJewpAQCAtMTA2NCwxMiArMTA2NCwxMiBAQCBQcm9jZXNzUmVzdWx0KFBHcmVzdWx0 ICoqcmVzdWx0cykKIAkJaWYgKCFuZXh0X3Jlc3VsdCkKIAkJCWJyZWFrOwogCi0JCVBRY2xl YXIoKnJlc3VsdHMpOwotCQkqcmVzdWx0cyA9IG5leHRfcmVzdWx0OworCQlQUWNsZWFyKCpy ZXN1bHRwKTsKKwkJKnJlc3VsdHAgPSBuZXh0X3Jlc3VsdDsKIAkJZmlyc3RfY3ljbGUgPSBm YWxzZTsKIAl9CiAKLQlTZXRSZXN1bHRWYXJpYWJsZXMoKnJlc3VsdHMsIHN1Y2Nlc3MpOwor CVNldFJlc3VsdFZhcmlhYmxlcygqcmVzdWx0cCwgc3VjY2Vzcyk7CiAKIAkvKiBtYXkgbmVl ZCB0aGlzIHRvIHJlY292ZXIgZnJvbSBjb25uIGxvc3MgZHVyaW5nIENPUFkgKi8KIAlpZiAo IWZpcnN0X2N5Y2xlICYmICFDaGVja0Nvbm5lY3Rpb24oKSkKQEAgLTEwODIsMTAgKzEwODIs MTAgQEAgUHJvY2Vzc1Jlc3VsdChQR3Jlc3VsdCAqKnJlc3VsdHMpCiAvKgogICogUHJpbnRR dWVyeVN0YXR1czogcmVwb3J0IGNvbW1hbmQgc3RhdHVzIGFzIHJlcXVpcmVkCiAgKgotICog Tm90ZTogVXRpbGl0eSBmdW5jdGlvbiBmb3IgdXNlIGJ5IFByaW50UXVlcnlSZXN1bHRzKCkg b25seS4KKyAqIE5vdGU6IFV0aWxpdHkgZnVuY3Rpb24gZm9yIHVzZSBieSBQcmludFF1ZXJ5 UmVzdWx0KCkgb25seS4KICAqLwogc3RhdGljIHZvaWQKLVByaW50UXVlcnlTdGF0dXMoUEdy ZXN1bHQgKnJlc3VsdHMpCitQcmludFF1ZXJ5U3RhdHVzKFBHcmVzdWx0ICpyZXN1bHQpCiB7 CiAJY2hhcgkJYnVmWzE2XTsKIApAQCAtMTA5NCw1OSArMTA5NCw1OSBAQCBQcmludFF1ZXJ5 U3RhdHVzKFBHcmVzdWx0ICpyZXN1bHRzKQogCQlpZiAocHNldC5wb3B0LnRvcHQuZm9ybWF0 ID09IFBSSU5UX0hUTUwpCiAJCXsKIAkJCWZwdXRzKCI8cD4iLCBwc2V0LnF1ZXJ5Rm91dCk7 Ci0JCQlodG1sX2VzY2FwZWRfcHJpbnQoUFFjbWRTdGF0dXMocmVzdWx0cyksIHBzZXQucXVl cnlGb3V0KTsKKwkJCWh0bWxfZXNjYXBlZF9wcmludChQUWNtZFN0YXR1cyhyZXN1bHQpLCBw c2V0LnF1ZXJ5Rm91dCk7CiAJCQlmcHV0cygiPC9wPlxuIiwgcHNldC5xdWVyeUZvdXQpOwog CQl9CiAJCWVsc2UKLQkJCWZwcmludGYocHNldC5xdWVyeUZvdXQsICIlc1xuIiwgUFFjbWRT dGF0dXMocmVzdWx0cykpOworCQkJZnByaW50Zihwc2V0LnF1ZXJ5Rm91dCwgIiVzXG4iLCBQ UWNtZFN0YXR1cyhyZXN1bHQpKTsKIAl9CiAKIAlpZiAocHNldC5sb2dmaWxlKQotCQlmcHJp bnRmKHBzZXQubG9nZmlsZSwgIiVzXG4iLCBQUWNtZFN0YXR1cyhyZXN1bHRzKSk7CisJCWZw cmludGYocHNldC5sb2dmaWxlLCAiJXNcbiIsIFBRY21kU3RhdHVzKHJlc3VsdCkpOwogCi0J c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1IiwgKHVuc2lnbmVkIGludCkgUFFvaWRW YWx1ZShyZXN1bHRzKSk7CisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1IiwgKHVu c2lnbmVkIGludCkgUFFvaWRWYWx1ZShyZXN1bHQpKTsKIAlTZXRWYXJpYWJsZShwc2V0LnZh cnMsICJMQVNUT0lEIiwgYnVmKTsKIH0KIAogCiAvKgotICogUHJpbnRRdWVyeVJlc3VsdHM6 IHByaW50IG91dCAob3Igc3RvcmUgb3IgZXhlY3V0ZSkgcXVlcnkgcmVzdWx0cyBhcyByZXF1 aXJlZAorICogUHJpbnRRdWVyeVJlc3VsdDogcHJpbnQgb3V0IChvciBzdG9yZSBvciBleGVj dXRlKSBxdWVyeSByZXN1bHQgYXMgcmVxdWlyZWQKICAqCiAgKiBOb3RlOiBVdGlsaXR5IGZ1 bmN0aW9uIGZvciB1c2UgYnkgU2VuZFF1ZXJ5KCkgb25seS4KICAqCiAgKiBSZXR1cm5zIHRy dWUgaWYgdGhlIHF1ZXJ5IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSwgZmFsc2Ugb3RoZXJ3aXNl LgogICovCiBzdGF0aWMgYm9vbAotUHJpbnRRdWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJlc3Vs dHMpCitQcmludFF1ZXJ5UmVzdWx0KFBHcmVzdWx0ICpyZXN1bHQpCiB7CiAJYm9vbAkJc3Vj Y2VzczsKIAljb25zdCBjaGFyICpjbWRzdGF0dXM7CiAKLQlpZiAoIXJlc3VsdHMpCisJaWYg KCFyZXN1bHQpCiAJCXJldHVybiBmYWxzZTsKIAotCXN3aXRjaCAoUFFyZXN1bHRTdGF0dXMo cmVzdWx0cykpCisJc3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXN1bHQpKQogCXsKIAkJY2Fz ZSBQR1JFU19UVVBMRVNfT0s6CiAJCQkvKiBzdG9yZSBvciBleGVjdXRlIG9yIHByaW50IHRo ZSBkYXRhIC4uLiAqLwogCQkJaWYgKHBzZXQuZ3NldF9wcmVmaXgpCi0JCQkJc3VjY2VzcyA9 IFN0b3JlUXVlcnlUdXBsZShyZXN1bHRzKTsKKwkJCQlzdWNjZXNzID0gU3RvcmVRdWVyeVR1 cGxlKHJlc3VsdCk7CiAJCQllbHNlIGlmIChwc2V0LmdleGVjX2ZsYWcpCi0JCQkJc3VjY2Vz cyA9IEV4ZWNRdWVyeVR1cGxlcyhyZXN1bHRzKTsKKwkJCQlzdWNjZXNzID0gRXhlY1F1ZXJ5 VHVwbGVzKHJlc3VsdCk7CiAJCQllbHNlIGlmIChwc2V0LmNyb3NzdGFiX2ZsYWcpCi0JCQkJ c3VjY2VzcyA9IFByaW50UmVzdWx0c0luQ3Jvc3N0YWIocmVzdWx0cyk7CisJCQkJc3VjY2Vz cyA9IFByaW50UmVzdWx0SW5Dcm9zc3RhYihyZXN1bHQpOwogCQkJZWxzZQotCQkJCXN1Y2Nl c3MgPSBQcmludFF1ZXJ5VHVwbGVzKHJlc3VsdHMpOworCQkJCXN1Y2Nlc3MgPSBQcmludFF1 ZXJ5VHVwbGVzKHJlc3VsdCk7CiAJCQkvKiBpZiBpdCdzIElOU0VSVC9VUERBVEUvREVMRVRF IFJFVFVSTklORywgYWxzbyBwcmludCBzdGF0dXMgKi8KLQkJCWNtZHN0YXR1cyA9IFBRY21k U3RhdHVzKHJlc3VsdHMpOworCQkJY21kc3RhdHVzID0gUFFjbWRTdGF0dXMocmVzdWx0KTsK IAkJCWlmIChzdHJuY21wKGNtZHN0YXR1cywgIklOU0VSVCIsIDYpID09IDAgfHwKIAkJCQlz dHJuY21wKGNtZHN0YXR1cywgIlVQREFURSIsIDYpID09IDAgfHwKIAkJCQlzdHJuY21wKGNt ZHN0YXR1cywgIkRFTEVURSIsIDYpID09IDApCi0JCQkJUHJpbnRRdWVyeVN0YXR1cyhyZXN1 bHRzKTsKKwkJCQlQcmludFF1ZXJ5U3RhdHVzKHJlc3VsdCk7CiAJCQlicmVhazsKIAogCQlj YXNlIFBHUkVTX0NPTU1BTkRfT0s6Ci0JCQlQcmludFF1ZXJ5U3RhdHVzKHJlc3VsdHMpOwor CQkJUHJpbnRRdWVyeVN0YXR1cyhyZXN1bHQpOwogCQkJc3VjY2VzcyA9IHRydWU7CiAJCQli cmVhazsKIApAQCAtMTE2OSw3ICsxMTY5LDcgQEAgUHJpbnRRdWVyeVJlc3VsdHMoUEdyZXN1 bHQgKnJlc3VsdHMpCiAJCWRlZmF1bHQ6CiAJCQlzdWNjZXNzID0gZmFsc2U7CiAJCQlwZ19s b2dfZXJyb3IoInVuZXhwZWN0ZWQgUFFyZXN1bHRTdGF0dXM6ICVkIiwKLQkJCQkJCSBQUXJl c3VsdFN0YXR1cyhyZXN1bHRzKSk7CisJCQkJCQkgUFFyZXN1bHRTdGF0dXMocmVzdWx0KSk7 CiAJCQlicmVhazsKIAl9CiAKQEAgLTExODEsNyArMTE4MSw3IEBAIFByaW50UXVlcnlSZXN1 bHRzKFBHcmVzdWx0ICpyZXN1bHRzKQogCiAvKgogICogU2VuZFF1ZXJ5OiBzZW5kIHRoZSBx dWVyeSBzdHJpbmcgdG8gdGhlIGJhY2tlbmQKLSAqIChhbmQgcHJpbnQgb3V0IHJlc3VsdHMp CisgKiAoYW5kIHByaW50IG91dCByZXN1bHQpCiAgKgogICogTm90ZTogVGhpcyBpcyB0aGUg ImZyb250IGRvb3IiIHdheSB0byBzZW5kIGEgcXVlcnkuIFRoYXQgaXMsIHVzZSBpdCB0bwog ICogc2VuZCBxdWVyaWVzIGFjdHVhbGx5IGVudGVyZWQgYnkgdGhlIHVzZXIuIFRoZXNlIHF1 ZXJpZXMgd2lsbCBiZSBzdWJqZWN0IHRvCkBAIC0xMTk1LDcgKzExOTUsNyBAQCBib29sCiBT ZW5kUXVlcnkoY29uc3QgY2hhciAqcXVlcnkpCiB7CiAJYm9vbAkJdGltaW5nID0gcHNldC50 aW1pbmc7Ci0JUEdyZXN1bHQgICAqcmVzdWx0czsKKwlQR3Jlc3VsdCAgICpyZXN1bHQ7CiAJ UEdUcmFuc2FjdGlvblN0YXR1c1R5cGUgdHJhbnNhY3Rpb25fc3RhdHVzOwogCWRvdWJsZQkJ ZWxhcHNlZF9tc2VjID0gMDsKIAlib29sCQlPSyA9IGZhbHNlOwpAQCAtMTI0NywxNSArMTI0 NywxNSBAQCBTZW5kUXVlcnkoY29uc3QgY2hhciAqcXVlcnkpCiAJCSFwc2V0LmF1dG9jb21t aXQgJiYKIAkJIWNvbW1hbmRfbm9fYmVnaW4ocXVlcnkpKQogCXsKLQkJcmVzdWx0cyA9IFBR ZXhlYyhwc2V0LmRiLCAiQkVHSU4iKTsKLQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMp ICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCXJlc3VsdCA9IFBRZXhlYyhwc2V0LmRiLCAiQkVH SU4iKTsKKwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkgIT0gUEdSRVNfQ09NTUFORF9P SykKIAkJewogCQkJcGdfbG9nX2luZm8oIiVzIiwgUFFlcnJvck1lc3NhZ2UocHNldC5kYikp OwotCQkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0cyk7CisJCQlDbGVhck9yU2F2ZVJlc3Vs dChyZXN1bHQpOwogCQkJUmVzZXRDYW5jZWxDb25uKCk7CiAJCQlnb3RvIHNlbmRxdWVyeV9j bGVhbnVwOwogCQl9Ci0JCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOworCQlDbGVhck9y U2F2ZVJlc3VsdChyZXN1bHQpOwogCQl0cmFuc2FjdGlvbl9zdGF0dXMgPSBQUXRyYW5zYWN0 aW9uU3RhdHVzKHBzZXQuZGIpOwogCX0KIApAQCAtMTI2NCwxNSArMTI2NCwxNSBAQCBTZW5k UXVlcnkoY29uc3QgY2hhciAqcXVlcnkpCiAJCShwc2V0LmN1cl9jbWRfaW50ZXJhY3RpdmUg fHwKIAkJIHBzZXQub25fZXJyb3Jfcm9sbGJhY2sgPT0gUFNRTF9FUlJPUl9ST0xMQkFDS19P TikpCiAJewotCQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsICJTQVZFUE9JTlQgcGdfcHNx bF90ZW1wb3Jhcnlfc2F2ZXBvaW50Iik7Ci0JCWlmIChQUXJlc3VsdFN0YXR1cyhyZXN1bHRz KSAhPSBQR1JFU19DT01NQU5EX09LKQorCQlyZXN1bHQgPSBQUWV4ZWMocHNldC5kYiwgIlNB VkVQT0lOVCBwZ19wc3FsX3RlbXBvcmFyeV9zYXZlcG9pbnQiKTsKKwkJaWYgKFBRcmVzdWx0 U3RhdHVzKHJlc3VsdCkgIT0gUEdSRVNfQ09NTUFORF9PSykKIAkJewogCQkJcGdfbG9nX2lu Zm8oIiVzIiwgUFFlcnJvck1lc3NhZ2UocHNldC5kYikpOwotCQkJQ2xlYXJPclNhdmVSZXN1 bHQocmVzdWx0cyk7CisJCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOwogCQkJUmVzZXRD YW5jZWxDb25uKCk7CiAJCQlnb3RvIHNlbmRxdWVyeV9jbGVhbnVwOwogCQl9Ci0JCUNsZWFy T3JTYXZlUmVzdWx0KHJlc3VsdHMpOworCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOwog CQlvbl9lcnJvcl9yb2xsYmFja19zYXZlcG9pbnQgPSB0cnVlOwogCX0KIApAQCAtMTI4MSw3 ICsxMjgxLDcgQEAgU2VuZFF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5KQogCQkvKiBEZXNjcmli ZSBxdWVyeSdzIHJlc3VsdCBjb2x1bW5zLCB3aXRob3V0IGV4ZWN1dGluZyBpdCAqLwogCQlP SyA9IERlc2NyaWJlUXVlcnkocXVlcnksICZlbGFwc2VkX21zZWMpOwogCQlSZXNldENhbmNl bENvbm4oKTsKLQkJcmVzdWx0cyA9IE5VTEw7CQkJLyogUFFjbGVhcihOVUxMKSBkb2VzIG5v dGhpbmcgKi8KKwkJcmVzdWx0ID0gTlVMTDsJCQkvKiBQUWNsZWFyKE5VTEwpIGRvZXMgbm90 aGluZyAqLwogCX0KIAllbHNlIGlmIChwc2V0LmZldGNoX2NvdW50IDw9IDAgfHwgcHNldC5n ZXhlY19mbGFnIHx8CiAJCQkgcHNldC5jcm9zc3RhYl9mbGFnIHx8ICFpc19zZWxlY3RfY29t bWFuZChxdWVyeSkpCkBAIC0xMjkzLDExICsxMjkzLDExIEBAIFNlbmRRdWVyeShjb25zdCBj aGFyICpxdWVyeSkKIAkJaWYgKHRpbWluZykKIAkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQo YmVmb3JlKTsKIAotCQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsIHF1ZXJ5KTsKKwkJcmVz dWx0ID0gUFFleGVjKHBzZXQuZGIsIHF1ZXJ5KTsKIAogCQkvKiB0aGVzZSBvcGVyYXRpb25z IGFyZSBpbmNsdWRlZCBpbiB0aGUgdGltaW5nIHJlc3VsdDogKi8KIAkJUmVzZXRDYW5jZWxD b25uKCk7Ci0JCU9LID0gUHJvY2Vzc1Jlc3VsdCgmcmVzdWx0cyk7CisJCU9LID0gUHJvY2Vz c1Jlc3VsdCgmcmVzdWx0KTsKIAogCQlpZiAodGltaW5nKQogCQl7CkBAIC0xMzA2LDE2ICsx MzA2LDE2IEBAIFNlbmRRdWVyeShjb25zdCBjaGFyICpxdWVyeSkKIAkJCWVsYXBzZWRfbXNl YyA9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGFmdGVyKTsKIAkJfQogCi0JCS8qIGJ1dCBw cmludGluZyByZXN1bHRzIGlzbid0OiAqLwotCQlpZiAoT0sgJiYgcmVzdWx0cykKLQkJCU9L ID0gUHJpbnRRdWVyeVJlc3VsdHMocmVzdWx0cyk7CisJCS8qIGJ1dCBwcmludGluZyByZXN1 bHQgaXNuJ3Q6ICovCisJCWlmIChPSyAmJiByZXN1bHQpCisJCQlPSyA9IFByaW50UXVlcnlS ZXN1bHQocmVzdWx0KTsKIAl9CiAJZWxzZQogCXsKIAkJLyogRmV0Y2gtaW4tc2VnbWVudHMg bW9kZSAqLwogCQlPSyA9IEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKHF1ZXJ5LCAmZWxhcHNlZF9t c2VjKTsKIAkJUmVzZXRDYW5jZWxDb25uKCk7Ci0JCXJlc3VsdHMgPSBOVUxMOwkJCS8qIFBR Y2xlYXIoTlVMTCkgZG9lcyBub3RoaW5nICovCisJCXJlc3VsdCA9IE5VTEw7CQkJLyogUFFj bGVhcihOVUxMKSBkb2VzIG5vdGhpbmcgKi8KIAl9CiAKIAlpZiAoIU9LICYmIHBzZXQuZWNo byA9PSBQU1FMX0VDSE9fRVJST1JTKQpAQCAtMTM0NywxMSArMTM0NywxMSBAQCBTZW5kUXVl cnkoY29uc3QgY2hhciAqcXVlcnkpCiAJCQkJICogc2F2ZXBvaW50IGlzIGdvbmUuIElmIHRo ZXkgaXNzdWVkIGEgU0FWRVBPSU5ULCByZWxlYXNpbmcKIAkJCQkgKiBvdXJzIHdvdWxkIHJl bW92ZSB0aGVpcnMuCiAJCQkJICovCi0JCQkJaWYgKHJlc3VsdHMgJiYKLQkJCQkJKHN0cmNt cChQUWNtZFN0YXR1cyhyZXN1bHRzKSwgIkNPTU1JVCIpID09IDAgfHwKLQkJCQkJIHN0cmNt cChQUWNtZFN0YXR1cyhyZXN1bHRzKSwgIlNBVkVQT0lOVCIpID09IDAgfHwKLQkJCQkJIHN0 cmNtcChQUWNtZFN0YXR1cyhyZXN1bHRzKSwgIlJFTEVBU0UiKSA9PSAwIHx8Ci0JCQkJCSBz dHJjbXAoUFFjbWRTdGF0dXMocmVzdWx0cyksICJST0xMQkFDSyIpID09IDApKQorCQkJCWlm IChyZXN1bHQgJiYKKwkJCQkJKHN0cmNtcChQUWNtZFN0YXR1cyhyZXN1bHQpLCAiQ09NTUlU IikgPT0gMCB8fAorCQkJCQkgc3RyY21wKFBRY21kU3RhdHVzKHJlc3VsdCksICJTQVZFUE9J TlQiKSA9PSAwIHx8CisJCQkJCSBzdHJjbXAoUFFjbWRTdGF0dXMocmVzdWx0KSwgIlJFTEVB U0UiKSA9PSAwIHx8CisJCQkJCSBzdHJjbXAoUFFjbWRTdGF0dXMocmVzdWx0KSwgIlJPTExC QUNLIikgPT0gMCkpCiAJCQkJCXN2cHRjbWQgPSBOVUxMOwogCQkJCWVsc2UKIAkJCQkJc3Zw dGNtZCA9ICJSRUxFQVNFIHBnX3BzcWxfdGVtcG9yYXJ5X3NhdmVwb2ludCI7CkBAIC0xMzc5 LDcgKzEzNzksNyBAQCBTZW5kUXVlcnkoY29uc3QgY2hhciAqcXVlcnkpCiAJCQkJQ2xlYXJP clNhdmVSZXN1bHQoc3ZwdHJlcyk7CiAJCQkJT0sgPSBmYWxzZTsKIAotCQkJCVBRY2xlYXIo cmVzdWx0cyk7CisJCQkJUFFjbGVhcihyZXN1bHQpOwogCQkJCVJlc2V0Q2FuY2VsQ29ubigp OwogCQkJCWdvdG8gc2VuZHF1ZXJ5X2NsZWFudXA7CiAJCQl9CkBAIC0xMzg3LDcgKzEzODcs NyBAQCBTZW5kUXVlcnkoY29uc3QgY2hhciAqcXVlcnkpCiAJCX0KIAl9CiAKLQlDbGVhck9y U2F2ZVJlc3VsdChyZXN1bHRzKTsKKwlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOwogCiAJ LyogUG9zc2libGUgbWljcm90aW1pbmcgb3V0cHV0ICovCiAJaWYgKHRpbWluZykKQEAgLTE0 NjIsNyArMTQ2Miw3IEBAIHN0YXRpYyBib29sCiBEZXNjcmliZVF1ZXJ5KGNvbnN0IGNoYXIg KnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykKIHsKIAlib29sCQl0aW1pbmcgPSBwc2V0 LnRpbWluZzsKLQlQR3Jlc3VsdCAgICpyZXN1bHRzOworCVBHcmVzdWx0ICAgKnJlc3VsdDsK IAlib29sCQlPSzsKIAlpbnN0cl90aW1lCWJlZm9yZSwKIAkJCQlhZnRlcjsKQEAgLTE0ODAs MjIgKzE0ODAsMjIgQEAgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91Ymxl ICplbGFwc2VkX21zZWMpCiAJICogYW55d2F5LiAgKFNvIHRoZXJlJ3Mgbm8gZ3JlYXQgbmVl ZCB0byBjbGVhciBpdCB3aGVuIGRvbmUsIHdoaWNoIGlzIGEKIAkgKiBnb29kIHRoaW5nIGJl Y2F1c2UgbGlicHEgcHJvdmlkZXMgbm8gZWFzeSB3YXkgdG8gZG8gdGhhdC4pCiAJICovCi0J cmVzdWx0cyA9IFBRcHJlcGFyZShwc2V0LmRiLCAiIiwgcXVlcnksIDAsIE5VTEwpOwotCWlm IChQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSAhPSBQR1JFU19DT01NQU5EX09LKQorCXJlc3Vs dCA9IFBRcHJlcGFyZShwc2V0LmRiLCAiIiwgcXVlcnksIDAsIE5VTEwpOworCWlmIChQUXJl c3VsdFN0YXR1cyhyZXN1bHQpICE9IFBHUkVTX0NPTU1BTkRfT0spCiAJewogCQlwZ19sb2df aW5mbygiJXMiLCBQUWVycm9yTWVzc2FnZShwc2V0LmRiKSk7Ci0JCVNldFJlc3VsdFZhcmlh YmxlcyhyZXN1bHRzLCBmYWxzZSk7Ci0JCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOwor CQlTZXRSZXN1bHRWYXJpYWJsZXMocmVzdWx0LCBmYWxzZSk7CisJCUNsZWFyT3JTYXZlUmVz dWx0KHJlc3VsdCk7CiAJCXJldHVybiBmYWxzZTsKIAl9Ci0JUFFjbGVhcihyZXN1bHRzKTsK KwlQUWNsZWFyKHJlc3VsdCk7CiAKLQlyZXN1bHRzID0gUFFkZXNjcmliZVByZXBhcmVkKHBz ZXQuZGIsICIiKTsKLQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzKSAmJgotCQkoUFFyZXN1 bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7Ci0JaWYgKE9LICYmIHJl c3VsdHMpCisJcmVzdWx0ID0gUFFkZXNjcmliZVByZXBhcmVkKHBzZXQuZGIsICIiKTsKKwlP SyA9IEFjY2VwdFJlc3VsdChyZXN1bHQpICYmCisJCShQUXJlc3VsdFN0YXR1cyhyZXN1bHQp ID09IFBHUkVTX0NPTU1BTkRfT0spOworCWlmIChPSyAmJiByZXN1bHQpCiAJewotCQlpZiAo UFFuZmllbGRzKHJlc3VsdHMpID4gMCkKKwkJaWYgKFBRbmZpZWxkcyhyZXN1bHQpID4gMCkK IAkJewogCQkJUFFFeHBCdWZmZXJEYXRhIGJ1ZjsKIAkJCWludAkJCWk7CkBAIC0xNTA4LDcg KzE1MDgsNyBAQCBEZXNjcmliZVF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVs YXBzZWRfbXNlYykKIAkJCQkJCQkgIGdldHRleHRfbm9vcCgiQ29sdW1uIiksCiAJCQkJCQkJ ICBnZXR0ZXh0X25vb3AoIlR5cGUiKSk7CiAKLQkJCWZvciAoaSA9IDA7IGkgPCBQUW5maWVs ZHMocmVzdWx0cyk7IGkrKykKKwkJCWZvciAoaSA9IDA7IGkgPCBQUW5maWVsZHMocmVzdWx0 KTsgaSsrKQogCQkJewogCQkJCWNvbnN0IGNoYXIgKm5hbWU7CiAJCQkJY2hhcgkgICAqZXNj bmFtZTsKQEAgLTE1MTYsMzAgKzE1MTYsMzAgQEAgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFy ICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMpCiAJCQkJaWYgKGkgPiAwKQogCQkJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiLCIpOwogCi0JCQkJbmFtZSA9IFBRZm5hbWUo cmVzdWx0cywgaSk7CisJCQkJbmFtZSA9IFBRZm5hbWUocmVzdWx0LCBpKTsKIAkJCQllc2Nu YW1lID0gUFFlc2NhcGVMaXRlcmFsKHBzZXQuZGIsIG5hbWUsIHN0cmxlbihuYW1lKSk7CiAK IAkJCQlpZiAoZXNjbmFtZSA9PSBOVUxMKQogCQkJCXsKIAkJCQkJcGdfbG9nX2luZm8oIiVz IiwgUFFlcnJvck1lc3NhZ2UocHNldC5kYikpOwotCQkJCQlQUWNsZWFyKHJlc3VsdHMpOwor CQkJCQlQUWNsZWFyKHJlc3VsdCk7CiAJCQkJCXRlcm1QUUV4cEJ1ZmZlcigmYnVmKTsKIAkJ CQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAogCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYs ICIoJXMsICcldSc6OnBnX2NhdGFsb2cub2lkLCAlZCkiLAogCQkJCQkJCQkgIGVzY25hbWUs Ci0JCQkJCQkJCSAgUFFmdHlwZShyZXN1bHRzLCBpKSwKLQkJCQkJCQkJICBQUWZtb2QocmVz dWx0cywgaSkpOworCQkJCQkJCQkgIFBRZnR5cGUocmVzdWx0LCBpKSwKKwkJCQkJCQkJICBQ UWZtb2QocmVzdWx0LCBpKSk7CiAKIAkJCQlQUWZyZWVtZW0oZXNjbmFtZSk7CiAJCQl9CiAK IAkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsICIpIHMobmFtZSwgdHAsIHRwbSkiKTsK LQkJCVBRY2xlYXIocmVzdWx0cyk7CisJCQlQUWNsZWFyKHJlc3VsdCk7CiAKLQkJCXJlc3Vs dHMgPSBQUWV4ZWMocHNldC5kYiwgYnVmLmRhdGEpOwotCQkJT0sgPSBBY2NlcHRSZXN1bHQo cmVzdWx0cyk7CisJCQlyZXN1bHQgPSBQUWV4ZWMocHNldC5kYiwgYnVmLmRhdGEpOworCQkJ T0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0KTsKIAogCQkJaWYgKHRpbWluZykKIAkJCXsKQEAg LTE1NDgsOCArMTU0OCw4IEBAIERlc2NyaWJlUXVlcnkoY29uc3QgY2hhciAqcXVlcnksIGRv dWJsZSAqZWxhcHNlZF9tc2VjKQogCQkJCSplbGFwc2VkX21zZWMgKz0gSU5TVFJfVElNRV9H RVRfTUlMTElTRUMoYWZ0ZXIpOwogCQkJfQogCi0JCQlpZiAoT0sgJiYgcmVzdWx0cykKLQkJ CQlPSyA9IFByaW50UXVlcnlSZXN1bHRzKHJlc3VsdHMpOworCQkJaWYgKE9LICYmIHJlc3Vs dCkKKwkJCQlPSyA9IFByaW50UXVlcnlSZXN1bHQocmVzdWx0KTsKIAogCQkJdGVybVBRRXhw QnVmZmVyKCZidWYpOwogCQl9CkBAIC0xNTU4LDggKzE1NTgsOCBAQCBEZXNjcmliZVF1ZXJ5 KGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykKIAkJCQkJXygiVGhl IGNvbW1hbmQgaGFzIG5vIHJlc3VsdCwgb3IgdGhlIHJlc3VsdCBoYXMgbm8gY29sdW1ucy5c biIpKTsKIAl9CiAKLQlTZXRSZXN1bHRWYXJpYWJsZXMocmVzdWx0cywgT0spOwotCUNsZWFy T3JTYXZlUmVzdWx0KHJlc3VsdHMpOworCVNldFJlc3VsdFZhcmlhYmxlcyhyZXN1bHQsIE9L KTsKKwlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOwogCiAJcmV0dXJuIE9LOwogfQpAQCAt MTU3OSw3ICsxNTc5LDcgQEAgc3RhdGljIGJvb2wKIEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNv bnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykKIHsKIAlib29sCQlPSyA9 IHRydWU7Ci0JUEdyZXN1bHQgICAqcmVzdWx0czsKKwlQR3Jlc3VsdCAgICpyZXN1bHQ7CiAJ UFFFeHBCdWZmZXJEYXRhIGJ1ZjsKIAlwcmludFF1ZXJ5T3B0IG15X3BvcHQgPSBwc2V0LnBv cHQ7CiAJYm9vbAkJdGltaW5nID0gcHNldC50aW1pbmc7CkBAIC0xNjA4LDEwICsxNjA4LDEw IEBAIEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVs YXBzZWRfbXNlYykKIAkvKiBpZiB3ZSdyZSBub3QgaW4gYSB0cmFuc2FjdGlvbiwgc3RhcnQg b25lICovCiAJaWYgKFBRdHJhbnNhY3Rpb25TdGF0dXMocHNldC5kYikgPT0gUFFUUkFOU19J RExFKQogCXsKLQkJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCAiQkVHSU4iKTsKLQkJT0sg PSBBY2NlcHRSZXN1bHQocmVzdWx0cykgJiYKLQkJCShQUXJlc3VsdFN0YXR1cyhyZXN1bHRz KSA9PSBQR1JFU19DT01NQU5EX09LKTsKLQkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0cyk7 CisJCXJlc3VsdCA9IFBRZXhlYyhwc2V0LmRiLCAiQkVHSU4iKTsKKwkJT0sgPSBBY2NlcHRS ZXN1bHQocmVzdWx0KSAmJgorCQkJKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkgPT0gUEdSRVNf Q09NTUFORF9PSyk7CisJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7CiAJCWlmICghT0sp CiAJCQlyZXR1cm4gZmFsc2U7CiAJCXN0YXJ0ZWRfdHhuID0gdHJ1ZTsKQEAgLTE2MjIsMTIg KzE2MjIsMTIgQEAgRXhlY1F1ZXJ5VXNpbmdDdXJzb3IoY29uc3QgY2hhciAqcXVlcnksIGRv dWJsZSAqZWxhcHNlZF9tc2VjKQogCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICJERUNMQVJF IF9wc3FsX2N1cnNvciBOTyBTQ1JPTEwgQ1VSU09SIEZPUlxuJXMiLAogCQkJCQkgIHF1ZXJ5 KTsKIAotCXJlc3VsdHMgPSBQUWV4ZWMocHNldC5kYiwgYnVmLmRhdGEpOwotCU9LID0gQWNj ZXB0UmVzdWx0KHJlc3VsdHMpICYmCi0JCShQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSA9PSBQ R1JFU19DT01NQU5EX09LKTsKKwlyZXN1bHQgPSBQUWV4ZWMocHNldC5kYiwgYnVmLmRhdGEp OworCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdCkgJiYKKwkJKFBRcmVzdWx0U3RhdHVzKHJl c3VsdCkgPT0gUEdSRVNfQ09NTUFORF9PSyk7CiAJaWYgKCFPSykKLQkJU2V0UmVzdWx0VmFy aWFibGVzKHJlc3VsdHMsIE9LKTsKLQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsKKwkJ U2V0UmVzdWx0VmFyaWFibGVzKHJlc3VsdCwgT0spOworCUNsZWFyT3JTYXZlUmVzdWx0KHJl c3VsdCk7CiAJdGVybVBRRXhwQnVmZmVyKCZidWYpOwogCWlmICghT0spCiAJCWdvdG8gY2xl YW51cDsKQEAgLTE2NzgsNyArMTY3OCw3IEBAIEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNvbnN0 IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykKIAkJCUlOU1RSX1RJTUVfU0VU X0NVUlJFTlQoYmVmb3JlKTsKIAogCQkvKiBnZXQgZmV0Y2hfY291bnQgdHVwbGVzIGF0IGEg dGltZSAqLwotCQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsIGZldGNoX2NtZCk7CisJCXJl c3VsdCA9IFBRZXhlYyhwc2V0LmRiLCBmZXRjaF9jbWQpOwogCiAJCWlmICh0aW1pbmcpCiAJ CXsKQEAgLTE2ODcsNyArMTY4Nyw3IEBAIEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNvbnN0IGNo YXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykKIAkJCSplbGFwc2VkX21zZWMgKz0g SU5TVFJfVElNRV9HRVRfTUlMTElTRUMoYWZ0ZXIpOwogCQl9CiAKLQkJaWYgKFBRcmVzdWx0 U3RhdHVzKHJlc3VsdHMpICE9IFBHUkVTX1RVUExFU19PSykKKwkJaWYgKFBRcmVzdWx0U3Rh dHVzKHJlc3VsdCkgIT0gUEdSRVNfVFVQTEVTX09LKQogCQl7CiAJCQkvKiBzaHV0IGRvd24g cGFnZXIgYmVmb3JlIHByaW50aW5nIGVycm9yIG1lc3NhZ2UgKi8KIAkJCWlmIChpc19wYWdl cikKQEAgLTE2OTYsMTggKzE2OTYsMTggQEAgRXhlY1F1ZXJ5VXNpbmdDdXJzb3IoY29uc3Qg Y2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjKQogCQkJCWlzX3BhZ2VyID0gZmFs c2U7CiAJCQl9CiAKLQkJCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpOworCQkJT0sgPSBB Y2NlcHRSZXN1bHQocmVzdWx0KTsKIAkJCUFzc2VydCghT0spOwotCQkJU2V0UmVzdWx0VmFy aWFibGVzKHJlc3VsdHMsIE9LKTsKLQkJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOwor CQkJU2V0UmVzdWx0VmFyaWFibGVzKHJlc3VsdCwgT0spOworCQkJQ2xlYXJPclNhdmVSZXN1 bHQocmVzdWx0KTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKHBzZXQuZ3NldF9wcmVmaXgp CiAJCXsKIAkJCS8qIFN0b3JlUXVlcnlUdXBsZSB3aWxsIGNvbXBsYWluIGlmIG5vdCBleGFj dGx5IG9uZSByb3cgKi8KLQkJCU9LID0gU3RvcmVRdWVyeVR1cGxlKHJlc3VsdHMpOwotCQkJ Q2xlYXJPclNhdmVSZXN1bHQocmVzdWx0cyk7CisJCQlPSyA9IFN0b3JlUXVlcnlUdXBsZShy ZXN1bHQpOworCQkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0KTsKIAkJCWJyZWFrOwogCQl9 CiAKQEAgLTE3MTUsNyArMTcxNSw3IEBAIEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNvbnN0IGNo YXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykKIAkJICogTm90ZSB3ZSBkbyBub3Qg ZGVhbCB3aXRoIFxnZGVzYywgXGdleGVjIG9yIFxjcm9zc3RhYnZpZXcgbW9kZXMgaGVyZQog CQkgKi8KIAotCQludHVwbGVzID0gUFFudHVwbGVzKHJlc3VsdHMpOworCQludHVwbGVzID0g UFFudHVwbGVzKHJlc3VsdCk7CiAJCXRvdGFsX3R1cGxlcyArPSBudHVwbGVzOwogCiAJCWlm IChudHVwbGVzIDwgZmV0Y2hfY291bnQpCkBAIC0xNzMzLDkgKzE3MzMsOSBAQCBFeGVjUXVl cnlVc2luZ0N1cnNvcihjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMp CiAJCQlpc19wYWdlciA9IHRydWU7CiAJCX0KIAotCQlwcmludFF1ZXJ5KHJlc3VsdHMsICZt eV9wb3B0LCBmb3V0LCBpc19wYWdlciwgcHNldC5sb2dmaWxlKTsKKwkJcHJpbnRRdWVyeShy ZXN1bHQsICZteV9wb3B0LCBmb3V0LCBpc19wYWdlciwgcHNldC5sb2dmaWxlKTsKIAotCQlD bGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsKKwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0 KTsKIAogCQkvKiBhZnRlciB0aGUgZmlyc3QgcmVzdWx0IHNldCwgZGlzYWxsb3cgaGVhZGVy IGRlY29yYXRpb24gKi8KIAkJbXlfcG9wdC50b3B0LnN0YXJ0X3RhYmxlID0gZmFsc2U7CkBA IC0xODAyLDIyICsxODAyLDIyIEBAIEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNvbnN0IGNoYXIg KnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykKIAkgKiBpZ25vcmUgdGhlIHJlc3VsdCAo aXQncyBwcm9iYWJseSBqdXN0IGEgYmxlYXQgYWJvdXQgYmVpbmcgaW4gYW4gYWJvcnRlZAog CSAqIHRyYW5zYWN0aW9uKQogCSAqLwotCXJlc3VsdHMgPSBQUWV4ZWMocHNldC5kYiwgIkNM T1NFIF9wc3FsX2N1cnNvciIpOworCXJlc3VsdCA9IFBRZXhlYyhwc2V0LmRiLCAiQ0xPU0Ug X3BzcWxfY3Vyc29yIik7CiAJaWYgKE9LKQogCXsKLQkJT0sgPSBBY2NlcHRSZXN1bHQocmVz dWx0cykgJiYKLQkJCShQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSA9PSBQR1JFU19DT01NQU5E X09LKTsKLQkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0cyk7CisJCU9LID0gQWNjZXB0UmVz dWx0KHJlc3VsdCkgJiYKKwkJCShQUXJlc3VsdFN0YXR1cyhyZXN1bHQpID09IFBHUkVTX0NP TU1BTkRfT0spOworCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOwogCX0KIAllbHNlCi0J CVBRY2xlYXIocmVzdWx0cyk7CisJCVBRY2xlYXIocmVzdWx0KTsKIAogCWlmIChzdGFydGVk X3R4bikKIAl7Ci0JCXJlc3VsdHMgPSBQUWV4ZWMocHNldC5kYiwgT0sgPyAiQ09NTUlUIiA6 ICJST0xMQkFDSyIpOwotCQlPSyAmPSBBY2NlcHRSZXN1bHQocmVzdWx0cykgJiYKLQkJCShQ UXJlc3VsdFN0YXR1cyhyZXN1bHRzKSA9PSBQR1JFU19DT01NQU5EX09LKTsKLQkJQ2xlYXJP clNhdmVSZXN1bHQocmVzdWx0cyk7CisJCXJlc3VsdCA9IFBRZXhlYyhwc2V0LmRiLCBPSyA/ ICJDT01NSVQiIDogIlJPTExCQUNLIik7CisJCU9LICY9IEFjY2VwdFJlc3VsdChyZXN1bHQp ICYmCisJCQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0KSA9PSBQR1JFU19DT01NQU5EX09LKTsK KwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0KTsKIAl9CiAKIAlpZiAodGltaW5nKQpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Nyb3NzdGFidmlldy5jIGIvc3JjL2Jpbi9wc3FsL2Ny b3NzdGFidmlldy5jCmluZGV4IDU2MjhkYjJjZTYuLjJjMjkxMzhkOTggMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcHNxbC9jcm9zc3RhYnZpZXcuYworKysgYi9zcmMvYmluL3BzcWwvY3Jvc3N0 YWJ2aWV3LmMKQEAgLTc3LDcgKzc3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX2F2bF90cmVlCiB9 IGF2bF90cmVlOwogCiAKLXN0YXRpYyBib29sIHByaW50Q3Jvc3N0YWIoY29uc3QgUEdyZXN1 bHQgKnJlc3VsdHMsCitzdGF0aWMgYm9vbCBwcmludENyb3NzdGFiKGNvbnN0IFBHcmVzdWx0 ICpyZXN1bHQsCiAJCQkJCQkgIGludCBudW1fY29sdW1ucywgcGl2b3RfZmllbGQgKnBpdl9j b2x1bW5zLCBpbnQgZmllbGRfZm9yX2NvbHVtbnMsCiAJCQkJCQkgIGludCBudW1fcm93cywg cGl2b3RfZmllbGQgKnBpdl9yb3dzLCBpbnQgZmllbGRfZm9yX3Jvd3MsCiAJCQkJCQkgIGlu dCBmaWVsZF9mb3JfZGF0YSk7CkBAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIGludAlyYW5r Q29tcGFyZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKICAqIHRoZW4gY2FsbCBw cmludENyb3NzdGFiKCkgZm9yIHRoZSBhY3R1YWwgb3V0cHV0LgogICovCiBib29sCi1Qcmlu dFJlc3VsdHNJbkNyb3NzdGFiKGNvbnN0IFBHcmVzdWx0ICpyZXMpCitQcmludFJlc3VsdElu Q3Jvc3N0YWIoY29uc3QgUEdyZXN1bHQgKnJlcykKIHsKIAlib29sCQlyZXR2YWwgPSBmYWxz ZTsKIAlhdmxfdHJlZQlwaXZfY29sdW1uczsKQEAgLTI2MSw3ICsyNjEsNyBAQCBQcmludFJl c3VsdHNJbkNyb3NzdGFiKGNvbnN0IFBHcmVzdWx0ICpyZXMpCiAJCXJhbmtTb3J0KG51bV9j b2x1bW5zLCBhcnJheV9jb2x1bW5zKTsKIAogCS8qCi0JICogRm91cnRoIHBhcnQ6IHByaW50 IHRoZSBjcm9zc3RhYidlZCByZXN1bHRzLgorCSAqIEZvdXJ0aCBwYXJ0OiBwcmludCB0aGUg Y3Jvc3N0YWInZWQgcmVzdWx0LgogCSAqLwogCXJldHZhbCA9IHByaW50Q3Jvc3N0YWIocmVz LAogCQkJCQkJICAgbnVtX2NvbHVtbnMsIGFycmF5X2NvbHVtbnMsIGZpZWxkX2Zvcl9jb2x1 bW5zLApAQCAtMjgyLDcgKzI4Miw3IEBAIFByaW50UmVzdWx0c0luQ3Jvc3N0YWIoY29uc3Qg UEdyZXN1bHQgKnJlcykKICAqIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZS4KICAq Lwogc3RhdGljIGJvb2wKLXByaW50Q3Jvc3N0YWIoY29uc3QgUEdyZXN1bHQgKnJlc3VsdHMs CitwcmludENyb3NzdGFiKGNvbnN0IFBHcmVzdWx0ICpyZXN1bHQsCiAJCQkgIGludCBudW1f Y29sdW1ucywgcGl2b3RfZmllbGQgKnBpdl9jb2x1bW5zLCBpbnQgZmllbGRfZm9yX2NvbHVt bnMsCiAJCQkgIGludCBudW1fcm93cywgcGl2b3RfZmllbGQgKnBpdl9yb3dzLCBpbnQgZmll bGRfZm9yX3Jvd3MsCiAJCQkgIGludCBmaWVsZF9mb3JfZGF0YSkKQEAgLTMwMSw5ICszMDEs OSBAQCBwcmludENyb3NzdGFiKGNvbnN0IFBHcmVzdWx0ICpyZXN1bHRzLAogCiAJLyogVGhl IG5hbWUgb2YgdGhlIGZpcnN0IGNvbHVtbiBpcyBrZXB0IHVuY2hhbmdlZCBieSB0aGUgcGl2 b3RpbmcgKi8KIAlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LAotCQkJCQkJUFFmbmFtZShy ZXN1bHRzLCBmaWVsZF9mb3Jfcm93cyksCisJCQkJCQlQUWZuYW1lKHJlc3VsdCwgZmllbGRf Zm9yX3Jvd3MpLAogCQkJCQkJZmFsc2UsCi0JCQkJCQljb2x1bW5fdHlwZV9hbGlnbm1lbnQo UFFmdHlwZShyZXN1bHRzLAorCQkJCQkJY29sdW1uX3R5cGVfYWxpZ25tZW50KFBRZnR5cGUo cmVzdWx0LAogCQkJCQkJCQkJCQkJCSAgZmllbGRfZm9yX3Jvd3MpKSk7CiAKIAkvKgpAQCAt MzE4LDcgKzMxOCw3IEBAIHByaW50Q3Jvc3N0YWIoY29uc3QgUEdyZXN1bHQgKnJlc3VsdHMs CiAJLyoKIAkgKiBUaGUgZGlzcGxheSBhbGlnbm1lbnQgZGVwZW5kcyBvbiBpdHMgUFFmdHlw ZSgpLgogCSAqLwotCWNvbF9hbGlnbiA9IGNvbHVtbl90eXBlX2FsaWdubWVudChQUWZ0eXBl KHJlc3VsdHMsIGZpZWxkX2Zvcl9kYXRhKSk7CisJY29sX2FsaWduID0gY29sdW1uX3R5cGVf YWxpZ25tZW50KFBRZnR5cGUocmVzdWx0LCBmaWVsZF9mb3JfZGF0YSkpOwogCiAJZm9yIChp ID0gMDsgaSA8IG51bV9jb2x1bW5zOyBpKyspCiAJewpAQCAtMzQ2LDcgKzM0Niw3IEBAIHBy aW50Q3Jvc3N0YWIoY29uc3QgUEdyZXN1bHQgKnJlc3VsdHMsCiAJLyoKIAkgKiBTdGVwIDM6 IGZpbGwgaW4gdGhlIGNvbnRlbnQgY2VsbHMuCiAJICovCi0JZm9yIChybiA9IDA7IHJuIDwg UFFudHVwbGVzKHJlc3VsdHMpOyBybisrKQorCWZvciAocm4gPSAwOyBybiA8IFBRbnR1cGxl cyhyZXN1bHQpOyBybisrKQogCXsKIAkJaW50CQkJcm93X251bWJlcjsKIAkJaW50CQkJY29s X251bWJlcjsKQEAgLTM1NSw4ICszNTUsOCBAQCBwcmludENyb3NzdGFiKGNvbnN0IFBHcmVz dWx0ICpyZXN1bHRzLAogCQlwaXZvdF9maWVsZCBlbHQ7CiAKIAkJLyogRmluZCB0YXJnZXQg cm93ICovCi0JCWlmICghUFFnZXRpc251bGwocmVzdWx0cywgcm4sIGZpZWxkX2Zvcl9yb3dz KSkKLQkJCWVsdC5uYW1lID0gUFFnZXR2YWx1ZShyZXN1bHRzLCBybiwgZmllbGRfZm9yX3Jv d3MpOworCQlpZiAoIVBRZ2V0aXNudWxsKHJlc3VsdCwgcm4sIGZpZWxkX2Zvcl9yb3dzKSkK KwkJCWVsdC5uYW1lID0gUFFnZXR2YWx1ZShyZXN1bHQsIHJuLCBmaWVsZF9mb3Jfcm93cyk7 CiAJCWVsc2UKIAkJCWVsdC5uYW1lID0gTlVMTDsKIAkJcnAgPSAocGl2b3RfZmllbGQgKikg YnNlYXJjaCgmZWx0LApAQCAtMzY4LDggKzM2OCw4IEBAIHByaW50Q3Jvc3N0YWIoY29uc3Qg UEdyZXN1bHQgKnJlc3VsdHMsCiAJCXJvd19udW1iZXIgPSBycC0+cmFuazsKIAogCQkvKiBG aW5kIHRhcmdldCBjb2x1bW4gKi8KLQkJaWYgKCFQUWdldGlzbnVsbChyZXN1bHRzLCBybiwg ZmllbGRfZm9yX2NvbHVtbnMpKQotCQkJZWx0Lm5hbWUgPSBQUWdldHZhbHVlKHJlc3VsdHMs IHJuLCBmaWVsZF9mb3JfY29sdW1ucyk7CisJCWlmICghUFFnZXRpc251bGwocmVzdWx0LCBy biwgZmllbGRfZm9yX2NvbHVtbnMpKQorCQkJZWx0Lm5hbWUgPSBQUWdldHZhbHVlKHJlc3Vs dCwgcm4sIGZpZWxkX2Zvcl9jb2x1bW5zKTsKIAkJZWxzZQogCQkJZWx0Lm5hbWUgPSBOVUxM OwogCkBAIC00MDIsOCArNDAyLDggQEAgcHJpbnRDcm9zc3RhYihjb25zdCBQR3Jlc3VsdCAq cmVzdWx0cywKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCi0JCQljb250LmNlbGxzW2lkeF0g PSAhUFFnZXRpc251bGwocmVzdWx0cywgcm4sIGZpZWxkX2Zvcl9kYXRhKSA/Ci0JCQkJUFFn ZXR2YWx1ZShyZXN1bHRzLCBybiwgZmllbGRfZm9yX2RhdGEpIDoKKwkJCWNvbnQuY2VsbHNb aWR4XSA9ICFQUWdldGlzbnVsbChyZXN1bHQsIHJuLCBmaWVsZF9mb3JfZGF0YSkgPworCQkJ CVBRZ2V0dmFsdWUocmVzdWx0LCBybiwgZmllbGRfZm9yX2RhdGEpIDoKIAkJCQkocG9wdC5u dWxsUHJpbnQgPyBwb3B0Lm51bGxQcmludCA6ICIiKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBh L3NyYy9iaW4vcHNxbC9jcm9zc3RhYnZpZXcuaCBiL3NyYy9iaW4vcHNxbC9jcm9zc3RhYnZp ZXcuaAppbmRleCA4NDIwOGY2ZTU3Li4zYjk2OTA2Yzk0IDEwMDY0NAotLS0gYS9zcmMvYmlu L3BzcWwvY3Jvc3N0YWJ2aWV3LmgKKysrIGIvc3JjL2Jpbi9wc3FsL2Nyb3NzdGFidmlldy5o CkBAIC0yNCw2ICsyNCw2IEBACiAjZGVmaW5lIENST1NTVEFCVklFV19NQVhfQ09MVU1OUyAx NjAwCiAKIC8qIHByb3RvdHlwZXMgKi8KLWV4dGVybiBib29sIFByaW50UmVzdWx0c0luQ3Jv c3N0YWIoY29uc3QgUEdyZXN1bHQgKnJlcyk7CitleHRlcm4gYm9vbCBQcmludFJlc3VsdElu Q3Jvc3N0YWIoY29uc3QgUEdyZXN1bHQgKnJlcyk7CiAKICNlbmRpZgkJCQkJCQkvKiBDUk9T U1RBQlZJRVdfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2hlbHAuYyBiL3NyYy9i aW4vcHNxbC9oZWxwLmMKaW5kZXggOTM3ZDZlOWQ0OS4uNTZhZmE2ODE3ZSAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wc3FsL2hlbHAuYworKysgYi9zcmMvYmluL3BzcWwvaGVscC5jCkBAIC0x NzAsMTMgKzE3MCwxMyBAQCBzbGFzaFVzYWdlKHVuc2lnbmVkIHNob3J0IGludCBwYWdlcikK IAogCWZwcmludGYob3V0cHV0LCBfKCJHZW5lcmFsXG4iKSk7CiAJZnByaW50ZihvdXRwdXQs IF8oIiAgXFxjb3B5cmlnaHQgICAgICAgICAgICAgc2hvdyBQb3N0Z3JlU1FMIHVzYWdlIGFu ZCBkaXN0cmlidXRpb24gdGVybXNcbiIpKTsKLQlmcHJpbnRmKG91dHB1dCwgXygiICBcXGNy b3NzdGFidmlldyBbQ09MVU1OU10gZXhlY3V0ZSBxdWVyeSBhbmQgZGlzcGxheSByZXN1bHRz IGluIGNyb3NzdGFiXG4iKSk7CisJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxjcm9zc3RhYnZp ZXcgW0NPTFVNTlNdIGV4ZWN1dGUgcXVlcnkgYW5kIGRpc3BsYXkgcmVzdWx0IGluIGNyb3Nz dGFiXG4iKSk7CiAJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxlcnJ2ZXJib3NlICAgICAgICAg ICAgc2hvdyBtb3N0IHJlY2VudCBlcnJvciBtZXNzYWdlIGF0IG1heGltdW0gdmVyYm9zaXR5 XG4iKSk7Ci0JZnByaW50ZihvdXRwdXQsIF8oIiAgXFxnIFsoT1BUSU9OUyldIFtGSUxFXSAg ZXhlY3V0ZSBxdWVyeSAoYW5kIHNlbmQgcmVzdWx0cyB0byBmaWxlIG9yIHxwaXBlKTtcbiIK KwlmcHJpbnRmKG91dHB1dCwgXygiICBcXGcgWyhPUFRJT05TKV0gW0ZJTEVdICBleGVjdXRl IHF1ZXJ5IChhbmQgc2VuZCByZXN1bHQgdG8gZmlsZSBvciB8cGlwZSk7XG4iCiAJCQkJCSAg IiAgICAgICAgICAgICAgICAgICAgICAgICBcXGcgd2l0aCBubyBhcmd1bWVudHMgaXMgZXF1 aXZhbGVudCB0byBhIHNlbWljb2xvblxuIikpOwogCWZwcmludGYob3V0cHV0LCBfKCIgIFxc Z2Rlc2MgICAgICAgICAgICAgICAgIGRlc2NyaWJlIHJlc3VsdCBvZiBxdWVyeSwgd2l0aG91 dCBleGVjdXRpbmcgaXRcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwgXygiICBcXGdleGVjICAg ICAgICAgICAgICAgICBleGVjdXRlIHF1ZXJ5LCB0aGVuIGV4ZWN1dGUgZWFjaCB2YWx1ZSBp biBpdHMgcmVzdWx0XG4iKSk7Ci0JZnByaW50ZihvdXRwdXQsIF8oIiAgXFxnc2V0IFtQUkVG SVhdICAgICAgICAgZXhlY3V0ZSBxdWVyeSBhbmQgc3RvcmUgcmVzdWx0cyBpbiBwc3FsIHZh cmlhYmxlc1xuIikpOworCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZ3NldCBbUFJFRklYXSAg ICAgICAgIGV4ZWN1dGUgcXVlcnkgYW5kIHN0b3JlIHJlc3VsdCBpbiBwc3FsIHZhcmlhYmxl c1xuIikpOwogCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZ3ggWyhPUFRJT05TKV0gW0ZJTEVd IGFzIFxcZywgYnV0IGZvcmNlcyBleHBhbmRlZCBvdXRwdXQgbW9kZVxuIikpOwogCWZwcmlu dGYob3V0cHV0LCBfKCIgIFxccSAgICAgICAgICAgICAgICAgICAgIHF1aXQgcHNxbFxuIikp OwogCWZwcmludGYob3V0cHV0LCBfKCIgIFxcd2F0Y2ggW1NFQ10gICAgICAgICAgIGV4ZWN1 dGUgcXVlcnkgZXZlcnkgU0VDIHNlY29uZHNcbiIpKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cHNxbC9zZXR0aW5ncy5oIGIvc3JjL2Jpbi9wc3FsL3NldHRpbmdzLmgKaW5kZXggZjYxNGIy NmUyYy4uODBkYmVhOWVmZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3NldHRpbmdzLmgK KysrIGIvc3JjL2Jpbi9wc3FsL3NldHRpbmdzLmgKQEAgLTk0LDkgKzk0LDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgX3BzcWxTZXR0aW5ncwogCXByaW50UXVlcnlPcHQgKmdzYXZlcG9wdDsJLyog aWYgbm90IG51bGwsIHNhdmVkIHByaW50IGZvcm1hdCBzZXR0aW5ncyAqLwogCiAJY2hhcgkg ICAqZ3NldF9wcmVmaXg7CS8qIG9uZS1zaG90IHByZWZpeCBhcmd1bWVudCBmb3IgXGdzZXQg Ki8KLQlib29sCQlnZGVzY19mbGFnOwkJLyogb25lLXNob3QgcmVxdWVzdCB0byBkZXNjcmli ZSBxdWVyeSByZXN1bHRzICovCi0JYm9vbAkJZ2V4ZWNfZmxhZzsJCS8qIG9uZS1zaG90IHJl cXVlc3QgdG8gZXhlY3V0ZSBxdWVyeSByZXN1bHRzICovCi0JYm9vbAkJY3Jvc3N0YWJfZmxh ZzsJLyogb25lLXNob3QgcmVxdWVzdCB0byBjcm9zc3RhYiByZXN1bHRzICovCisJYm9vbAkJ Z2Rlc2NfZmxhZzsJCS8qIG9uZS1zaG90IHJlcXVlc3QgdG8gZGVzY3JpYmUgcXVlcnkgcmVz dWx0ICovCisJYm9vbAkJZ2V4ZWNfZmxhZzsJCS8qIG9uZS1zaG90IHJlcXVlc3QgdG8gZXhl Y3V0ZSBxdWVyeSByZXN1bHQgKi8KKwlib29sCQljcm9zc3RhYl9mbGFnOwkvKiBvbmUtc2hv dCByZXF1ZXN0IHRvIGNyb3NzdGFiIHJlc3VsdCAqLwogCWNoYXIJICAgKmN0dl9hcmdzWzRd OwkvKiBcY3Jvc3N0YWJ2aWV3IGFyZ3VtZW50cyAqLwogCiAJYm9vbAkJbm90dHk7CQkJLyog c3RkaW4gb3Igc3Rkb3V0IGlzIG5vdCBhIHR0eSAoYXMgZGV0ZXJtaW5lZApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21w bGV0ZS5jCmluZGV4IDUwMmI1YzU3NTEuLmNjNzdlZGE1MWQgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcHNxbC90YWItY29tcGxldGUuYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRl LmMKQEAgLTE4NCw5ICsxODQsOSBAQCBzdGF0aWMgYm9vbCBjb21wbGV0aW9uX2ZvcmNlX3F1 b3RlOyAvKiB0cnVlIHRvIGZvcmNlLXF1b3RlIGZpbGVuYW1lcyAqLwogLyoKICAqIEEgZmV3 IG1hY3JvcyB0byBlYXNlIHR5cGluZy4gWW91IGNhbiB1c2UgdGhlc2UgdG8gY29tcGxldGUg dGhlIGdpdmVuCiAgKiBzdHJpbmcgd2l0aAotICogMSkgVGhlIHJlc3VsdHMgZnJvbSBhIHF1 ZXJ5IHlvdSBwYXNzIGl0LiAoUGVyaGFwcyBvbmUgb2YgdGhvc2UgYmVsb3c/KQorICogMSkg VGhlIHJlc3VsdCBmcm9tIGEgcXVlcnkgeW91IHBhc3MgaXQuIChQZXJoYXBzIG9uZSBvZiB0 aG9zZSBiZWxvdz8pCiAgKgkgIFdlIHN1cHBvcnQgYm90aCBzaW1wbGUgYW5kIHZlcnNpb25l ZCBxdWVyaWVzLgotICogMikgVGhlIHJlc3VsdHMgZnJvbSBhIHNjaGVtYSBxdWVyeSB5b3Ug cGFzcyBpdC4KKyAqIDIpIFRoZSByZXN1bHQgZnJvbSBhIHNjaGVtYSBxdWVyeSB5b3UgcGFz cyBpdC4KICAqCSAgV2Ugc3VwcG9ydCBib3RoIHNpbXBsZSBhbmQgdmVyc2lvbmVkIHNjaGVt YSBxdWVyaWVzLgogICogMykgVGhlIGl0ZW1zIGZyb20gYSBudWxsLXBvaW50ZXItdGVybWlu YXRlZCBsaXN0ICh3aXRoIG9yIHdpdGhvdXQKICAqCSAgY2FzZS1zZW5zaXRpdmUgY29tcGFy aXNvbik7IGlmIHRoZSBsaXN0IGlzIGNvbnN0YW50IHlvdSBjYW4gYnVpbGQgaXQKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcHNxbC92YXJpYWJsZXMuYyBiL3NyYy9iaW4vcHNxbC92YXJpYWJs ZXMuYwppbmRleCBiMTQxYWFjOGViLi40N2M1OGQyYmU5IDEwMDY0NAotLS0gYS9zcmMvYmlu L3BzcWwvdmFyaWFibGVzLmMKKysrIGIvc3JjL2Jpbi9wc3FsL3ZhcmlhYmxlcy5jCkBAIC00 NSw3ICs0NSw3IEBAIHZhbGlkX3ZhcmlhYmxlX25hbWUoY29uc3QgY2hhciAqbmFtZSkKICAq IHRoYXQgc2VydmVzIGFzIGxpc3QgaGVhZGVyLgogICoKICAqIFRoZSBsaXN0IGVudHJpZXMg YXJlIGtlcHQgaW4gbmFtZSBvcmRlciAoYWNjb3JkaW5nIHRvIHN0cmNtcCkuICBUaGlzCi0g KiBpcyBtYWlubHkgdG8gbWFrZSB0aGUgcmVzdWx0cyBvZiBQcmludFZhcmlhYmxlcygpIG1v cmUgcGxlYXNpbmcuCisgKiBpcyBtYWlubHkgdG8gbWFrZSB0aGUgb3V0cHV0IG9mIFByaW50 VmFyaWFibGVzKCkgbW9yZSBwbGVhc2luZy4KICAqLwogVmFyaWFibGVTcGFjZQogQ3JlYXRl VmFyaWFibGVTcGFjZSh2b2lkKQotLSAKMi4zNC4xCgo= --------------NHoKzTiFJi3fL72llcC1x0i8--