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 1phPpU-00017f-EM for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Mar 2023 07:02:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1phPpT-0008PX-Cq for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Mar 2023 07:02:43 +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 1phPpS-0008PM-Ma for pgsql-hackers@lists.postgresql.org; Wed, 29 Mar 2023 07:02:43 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1phPpO-0003UB-Rb for pgsql-hackers@postgresql.org; Wed, 29 Mar 2023 07:02:41 +0000 Received: from [192.168.28.53] (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 4655D21CF08F for ; Wed, 29 Mar 2023 10:02:36 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1680073356; bh=1YZigDrxusDJjOZSIdyFB+beOptQsbI3S/67DUpWjBA=; h=Date:To:From:Subject; b=GgJpKUf2R9/0Ts8+5izbwRroZ7i/+Ak52TkCFYKwDtpVqA7kDBx6zf8wBv0PRRQr4 usBFrx3RabPPWcWxAgJdf1jRcbu4+lb8xe/V8aKcPquuJ+FLwyXpbj09At7ZAGetT6 W3mnZVjnMBOoLG1TJaYHA4uOM5tBZ2FRjdOKVwlI= Content-Type: multipart/mixed; boundary="------------VvPbxkrs09Ipw9CBoHX7rpDp" Message-ID: Date: Wed, 29 Mar 2023 12:02:30 +0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 To: PostgreSQL Hackers Content-Language: en-US From: Andrey Lepikhov Subject: [POC] Allow an extension to add data into Query and PlannedStmt nodes Organization: Postgres Professional 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. --------------VvPbxkrs09Ipw9CBoHX7rpDp Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, Previously, we read int this mailing list some controversial opinions on queryid generation and Jumbling technique. Here we don't intend to solve these problems but help an extension at least don't conflict with others on the queryId value. Extensions could need to pass some query-related data through all stages of the query planning and execution. As a trivial example, pg_stat_statements uses queryid at the end of execution to save some statistics. One more reason - extensions now conflict on queryid value and the logic of its changing. With this patch, it can be managed. This patch introduces the structure 'ExtensionData' which allows to manage of a list of entries with a couple of interface functions addExtensionDataToNode() and GetExtensionData(). Keep in mind the possible future hiding of this structure from the public interface. An extension should invent a symbolic key to identify its data. It may invent as many additional keys as it wants but the best option here - is no more than one entry for each extension. Usage of this machinery is demonstrated by the pg_stat_statements example - here we introduced Bigint node just for natively storing of queryId value. Ruthless pgbench benchmark shows that we got some overhead: 1.6% - in default mode 4% - in prepared mode ~0.1% in extended mode. An optimization that avoids copying of queryId by storing it into the node pointer field directly allows to keep this overhead in a range of %0.5 for all these modes but increases complexity. So here we demonstrate not optimized variant. Some questions still cause doubts: - QueryRewrite: should we copy extension fields from the parent parsetree to the rewritten ones? - Are we need to invent a registration procedure to do away with the names of entries and use some compact integer IDs? - Do we need to optimize this structure to avoid a copy for simple data types, for example, inventing something like A_Const? All in all, in our opinion, this issue is tend to grow with an increasing number of extensions that utilize planner and executor hooks for some purposes. So, any thoughts will be useful. -- Regards Andrey Lepikhov Postgres Professional --------------VvPbxkrs09Ipw9CBoHX7rpDp Content-Type: text/x-patch; charset=UTF-8; name="v0-0001-Add-on-more-field-into-Query-and-PlannedStmt.patch" Content-Disposition: attachment; filename*0="v0-0001-Add-on-more-field-into-Query-and-PlannedStmt.patch" Content-Transfer-Encoding: base64 RnJvbSA5NDRjZTYxZDdmZjkzNDcyNzI0MGQ5MGVlNzYyMGJmYjY5YWQzYTVhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXkgTGVwaWtob3YgPGEubGVwaWtob3ZAcG9z dGdyZXNwcm8ucnU+CkRhdGU6IFdlZCwgMjIgTWFyIDIwMjMgMTY6NTk6MzAgKzA1MDAKU3Vi amVjdDogW1BBVENIXSBBZGQgb24gbW9yZSBmaWVsZCBpbnRvIFF1ZXJ5IGFuZCBQbGFubmVk U3RtdCBzdHJ1Y3R1cmVzIHRvCiBhbGxvdyBhbiBleHRlbnNpb24gdG8gcGFzcyBzb21lIGRh dGEgYWNyb3NzIGFsbCB0aGUgZXhlY3V0aW9uIHN0YWdlcyBvZgogc3BlY2lmaWMgaW5zdGFu Y2Ugb2YgdGhlIHF1ZXJ5LgoKLS0tCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRf c3RhdGVtZW50cy5jICAgfCAgNTcgKysrKysrKystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXh0ZW5zaW9uLmMgICAgICAgICAgICAgIHwgMTAzICsrKysrKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgICAgICAgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL25vZGVzL3ZhbHVlLmMgICAgICAgICAgICAgICAgICAgICB8ICAxMiArKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuYyAgICAgICAgICB8ICAgNiAr CiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAgICAgICAgfCAgIDIg Kwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXh0ZW5zaW9uLmggICAgICAgICAgICAgIHwgICA0 ICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgICAgICB8ICAy MyArKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAgICAg fCAgIDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvdmFsdWUuaCAgICAgICAgICAgICAgICAgICAg IHwgIDEwICsrCiAxMSBmaWxlcyBjaGFuZ2VkLCAyMDkgaW5zZXJ0aW9ucygrKSwgMTIgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdf c3RhdF9zdGF0ZW1lbnRzLmMgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0 X3N0YXRlbWVudHMuYwppbmRleCA1Mjg1YzNmN2ZhLi5mYzQ3NjYxYzg2IDEwMDY0NAotLS0g YS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYworKysg Yi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwpAQCAt NDksNiArNDksNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHRlbnNpb24u aCIKICNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5z dHJ1bWVudC5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKQEAgLTEwNyw2ICsxMDgsMTQgQEAg c3RhdGljIGNvbnN0IHVpbnQzMiBQR1NTX1BHX01BSk9SX1ZFUlNJT04gPSBQR19WRVJTSU9O X05VTSAvIDEwMDsKIAkJCQkJCQkJCSFJc0EobiwgUHJlcGFyZVN0bXQpICYmIFwKIAkJCQkJ CQkJCSFJc0EobiwgRGVhbGxvY2F0ZVN0bXQpKQogCisjZGVmaW5lIEdFVF9RVUVSWUlEKG5v ZGUpIFwKKwkoQmlnaW50ICopIEdldEV4dGVuc2lvbkRhdGEobm9kZS0+ZXh0X2ZpZWxkLCAi cGdfc3RhdF9zdGF0ZW1lbnRzIikKKworI2RlZmluZSBJTlNFUlRfUVVFUllJRChub2RlLCBx dWVyeWlkKSBcCisJY2FzdE5vZGUoQmlnaW50LCBBZGRFeHRlbnNpb25EYXRhVG9Ob2RlKChO b2RlICopIG5vZGUsIFwKKwkJCQkJCQkJCQkJInBnX3N0YXRfc3RhdGVtZW50cyIsIFwKKwkJ CQkJCQkJCQkJKE5vZGUgKikgbWFrZUJpZ2ludCgoaW50NjQpIHF1ZXJ5aWQpLCBcCisJCQkJ CQkJCQkJCXRydWUpKQogLyoKICAqIEV4dGVuc2lvbiB2ZXJzaW9uIG51bWJlciwgZm9yIHN1 cHBvcnRpbmcgb2xkZXIgZXh0ZW5zaW9uIHZlcnNpb25zJyBvYmplY3RzCiAgKi8KQEAgLTgy MSw2ICs4MzAsMTMgQEAgZXJyb3I6CiBzdGF0aWMgdm9pZAogcGdzc19wb3N0X3BhcnNlX2Fu YWx5emUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBRdWVyeSAqcXVlcnksIEp1bWJsZVN0YXRlICpq c3RhdGUpCiB7CisJQmlnaW50ICpxdWVyeUlkOworCisJaWYgKChxdWVyeUlkID0gR0VUX1FV RVJZSUQocXVlcnkpKSA9PSBOVUxMKQorCQlxdWVyeUlkID0gSU5TRVJUX1FVRVJZSUQocXVl cnksIHF1ZXJ5LT5xdWVyeUlkKTsKKworCUFzc2VydChxdWVyeUlkKTsKKwogCWlmIChwcmV2 X3Bvc3RfcGFyc2VfYW5hbHl6ZV9ob29rKQogCQlwcmV2X3Bvc3RfcGFyc2VfYW5hbHl6ZV9o b29rKHBzdGF0ZSwgcXVlcnksIGpzdGF0ZSk7CiAKQEAgLTgzNyw3ICs4NTMsNyBAQCBwZ3Nz X3Bvc3RfcGFyc2VfYW5hbHl6ZShQYXJzZVN0YXRlICpwc3RhdGUsIFF1ZXJ5ICpxdWVyeSwg SnVtYmxlU3RhdGUgKmpzdGF0ZSkKIAl7CiAJCWlmIChwZ3NzX3RyYWNrX3V0aWxpdHkgJiYg IVBHU1NfSEFORExFRF9VVElMSVRZKHF1ZXJ5LT51dGlsaXR5U3RtdCkpCiAJCXsKLQkJCXF1 ZXJ5LT5xdWVyeUlkID0gVUlOVDY0Q09OU1QoMCk7CisJCQlxdWVyeUlkLT52YWwgPSBVSU5U NjRDT05TVCgwKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTg1MSw3ICs4NjcsNyBAQCBw Z3NzX3Bvc3RfcGFyc2VfYW5hbHl6ZShQYXJzZVN0YXRlICpwc3RhdGUsIFF1ZXJ5ICpxdWVy eSwgSnVtYmxlU3RhdGUgKmpzdGF0ZSkKIAkgKi8KIAlpZiAoanN0YXRlICYmIGpzdGF0ZS0+ Y2xvY2F0aW9uc19jb3VudCA+IDApCiAJCXBnc3Nfc3RvcmUocHN0YXRlLT5wX3NvdXJjZXRl eHQsCi0JCQkJICAgcXVlcnktPnF1ZXJ5SWQsCisJCQkJICAgcXVlcnlJZC0+dmFsLAogCQkJ CSAgIHF1ZXJ5LT5zdG10X2xvY2F0aW9uLAogCQkJCSAgIHF1ZXJ5LT5zdG10X2xlbiwKIAkJ CQkgICBQR1NTX0lOVkFMSUQsCkBAIC04NzMsNyArODg5LDEwIEBAIHBnc3NfcGxhbm5lcihR dWVyeSAqcGFyc2UsCiAJCQkgaW50IGN1cnNvck9wdGlvbnMsCiAJCQkgUGFyYW1MaXN0SW5m byBib3VuZFBhcmFtcykKIHsKLQlQbGFubmVkU3RtdCAqcmVzdWx0OworCVBsYW5uZWRTdG10 CSAgICpyZXN1bHQ7CisJQmlnaW50CQkgICAqcXVlcnlJZDsKKworCXF1ZXJ5SWQgPSBHRVRf UVVFUllJRChwYXJzZSk7CiAKIAkvKgogCSAqIFdlIGNhbid0IHByb2Nlc3MgdGhlIHF1ZXJ5 IGlmIG5vIHF1ZXJ5X3N0cmluZyBpcyBwcm92aWRlZCwgYXMKQEAgLTg4OSw3ICs5MDgsNyBA QCBwZ3NzX3BsYW5uZXIoUXVlcnkgKnBhcnNlLAogCSAqLwogCWlmIChwZ3NzX2VuYWJsZWQo cGxhbl9uZXN0ZWRfbGV2ZWwgKyBleGVjX25lc3RlZF9sZXZlbCkKIAkJJiYgcGdzc190cmFj a19wbGFubmluZyAmJiBxdWVyeV9zdHJpbmcKLQkJJiYgcGFyc2UtPnF1ZXJ5SWQgIT0gVUlO VDY0Q09OU1QoMCkpCisJCSYmIHF1ZXJ5SWQgJiYgcXVlcnlJZC0+dmFsICE9IFVJTlQ2NENP TlNUKDApKQogCXsKIAkJaW5zdHJfdGltZQlzdGFydDsKIAkJaW5zdHJfdGltZQlkdXJhdGlv bjsKQEAgLTkzNiw3ICs5NTUsNyBAQCBwZ3NzX3BsYW5uZXIoUXVlcnkgKnBhcnNlLAogCQlX YWxVc2FnZUFjY3VtRGlmZigmd2FsdXNhZ2UsICZwZ1dhbFVzYWdlLCAmd2FsdXNhZ2Vfc3Rh cnQpOwogCiAJCXBnc3Nfc3RvcmUocXVlcnlfc3RyaW5nLAotCQkJCSAgIHBhcnNlLT5xdWVy eUlkLAorCQkJCSAgIHF1ZXJ5SWQtPnZhbCwKIAkJCQkgICBwYXJzZS0+c3RtdF9sb2NhdGlv biwKIAkJCQkgICBwYXJzZS0+c3RtdF9sZW4sCiAJCQkJICAgUEdTU19QTEFOLApAQCAtOTY2 LDE3ICs5ODUsMjIgQEAgcGdzc19wbGFubmVyKFF1ZXJ5ICpwYXJzZSwKIHN0YXRpYyB2b2lk CiBwZ3NzX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3Mp CiB7CisJQmlnaW50ICpxdWVyeUlkOworCiAJaWYgKHByZXZfRXhlY3V0b3JTdGFydCkKIAkJ cHJldl9FeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzKTsKIAllbHNlCiAJCXN0YW5k YXJkX0V4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBlZmxhZ3MpOwogCisJcXVlcnlJZCA9IEdF VF9RVUVSWUlEKHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQpOworCiAJLyoKIAkgKiBJZiBxdWVy eSBoYXMgcXVlcnlJZCB6ZXJvLCBkb24ndCB0cmFjayBpdC4gIFRoaXMgcHJldmVudHMgZG91 YmxlCiAJICogY291bnRpbmcgb2Ygb3B0aW1pemFibGUgc3RhdGVtZW50cyB0aGF0IGFyZSBk aXJlY3RseSBjb250YWluZWQgaW4KIAkgKiB1dGlsaXR5IHN0YXRlbWVudHMuCiAJICovCi0J aWYgKHBnc3NfZW5hYmxlZChleGVjX25lc3RlZF9sZXZlbCkgJiYgcXVlcnlEZXNjLT5wbGFu bmVkc3RtdC0+cXVlcnlJZCAhPSBVSU5UNjRDT05TVCgwKSkKKwlpZiAocGdzc19lbmFibGVk KGV4ZWNfbmVzdGVkX2xldmVsKSAmJgorCQlxdWVyeUlkICYmIHF1ZXJ5SWQtPnZhbCAhPSBV SU5UNjRDT05TVCgwKSkKIAl7CiAJCS8qCiAJCSAqIFNldCB1cCB0byB0cmFjayB0b3RhbCBl bGFwc2VkIHRpbWUgaW4gRXhlY3V0b3JSdW4uICBNYWtlIHN1cmUgdGhlCkBAIC0xMDQzLDkg KzEwNjcsMTEgQEAgcGdzc19FeGVjdXRvckZpbmlzaChRdWVyeURlc2MgKnF1ZXJ5RGVzYykK IHN0YXRpYyB2b2lkCiBwZ3NzX0V4ZWN1dG9yRW5kKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKQog ewotCXVpbnQ2NAkJcXVlcnlJZCA9IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnF1ZXJ5SWQ7 CisJQmlnaW50ICpxdWVyeUlkOworCisJcXVlcnlJZCA9IEdFVF9RVUVSWUlEKHF1ZXJ5RGVz Yy0+cGxhbm5lZHN0bXQpOwogCi0JaWYgKHF1ZXJ5SWQgIT0gVUlOVDY0Q09OU1QoMCkgJiYg cXVlcnlEZXNjLT50b3RhbHRpbWUgJiYKKwlpZiAocXVlcnlJZCAmJiBxdWVyeUlkLT52YWwg IT0gVUlOVDY0Q09OU1QoMCkgJiYgcXVlcnlEZXNjLT50b3RhbHRpbWUgJiYKIAkJcGdzc19l bmFibGVkKGV4ZWNfbmVzdGVkX2xldmVsKSkKIAl7CiAJCS8qCkBAIC0xMDU1LDcgKzEwODEs NyBAQCBwZ3NzX0V4ZWN1dG9yRW5kKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKQogCQlJbnN0ckVu ZExvb3AocXVlcnlEZXNjLT50b3RhbHRpbWUpOwogCiAJCXBnc3Nfc3RvcmUocXVlcnlEZXNj LT5zb3VyY2VUZXh0LAotCQkJCSAgIHF1ZXJ5SWQsCisJCQkJICAgcXVlcnlJZC0+dmFsLAog CQkJCSAgIHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnN0bXRfbG9jYXRpb24sCiAJCQkJICAg cXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+c3RtdF9sZW4sCiAJCQkJICAgUEdTU19FWEVDLApA QCAtMTA4NCwxMCArMTExMCwxNyBAQCBwZ3NzX1Byb2Nlc3NVdGlsaXR5KFBsYW5uZWRTdG10 ICpwc3RtdCwgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCQkJCURlc3RSZWNlaXZlciAq ZGVzdCwgUXVlcnlDb21wbGV0aW9uICpxYykKIHsKIAlOb2RlCSAgICpwYXJzZXRyZWUgPSBw c3RtdC0+dXRpbGl0eVN0bXQ7Ci0JdWludDY0CQlzYXZlZF9xdWVyeUlkID0gcHN0bXQtPnF1 ZXJ5SWQ7CisJdWludDY0CQlzYXZlZF9xdWVyeUlkOworCUJpZ2ludAkgICAqcXVlcnlJZDsK IAlpbnQJCQlzYXZlZF9zdG10X2xvY2F0aW9uID0gcHN0bXQtPnN0bXRfbG9jYXRpb247CiAJ aW50CQkJc2F2ZWRfc3RtdF9sZW4gPSBwc3RtdC0+c3RtdF9sZW47CiAKKwlpZiAoKHF1ZXJ5 SWQgPSBHRVRfUVVFUllJRChwc3RtdCkpID09IE5VTEwpCisJCXF1ZXJ5SWQgPSBJTlNFUlRf UVVFUllJRChwc3RtdCwgcHN0bXQtPnF1ZXJ5SWQpOworCisJQXNzZXJ0KHF1ZXJ5SWQpOwor CXNhdmVkX3F1ZXJ5SWQgPSBxdWVyeUlkLT52YWw7CisKIAkvKgogCSAqIEZvcmNlIHV0aWxp dHkgc3RhdGVtZW50cyB0byBnZXQgcXVlcnlJZCB6ZXJvLiAgV2UgZG8gdGhpcyBldmVuIGlu IGNhc2VzCiAJICogd2hlcmUgdGhlIHN0YXRlbWVudCBjb250YWlucyBhbiBvcHRpbWl6YWJs ZSBzdGF0ZW1lbnQgZm9yIHdoaWNoIGEKQEAgLTExMDMsNyArMTEzNiw3IEBAIHBnc3NfUHJv Y2Vzc1V0aWxpdHkoUGxhbm5lZFN0bXQgKnBzdG10LCBjb25zdCBjaGFyICpxdWVyeVN0cmlu ZywKIAkgKiBvbmx5LgogCSAqLwogCWlmIChwZ3NzX2VuYWJsZWQoZXhlY19uZXN0ZWRfbGV2 ZWwpICYmIHBnc3NfdHJhY2tfdXRpbGl0eSkKLQkJcHN0bXQtPnF1ZXJ5SWQgPSBVSU5UNjRD T05TVCgwKTsKKwkJcXVlcnlJZC0+dmFsID0gVUlOVDY0Q09OU1QoMCk7CiAKIAkvKgogCSAq IElmIGl0J3MgYW4gRVhFQ1VURSBzdGF0ZW1lbnQsIHdlIGRvbid0IHRyYWNrIGl0IGFuZCBk b24ndCBpbmNyZW1lbnQgdGhlCkBAIC0xMTU4LDcgKzExOTEsNyBAQCBwZ3NzX1Byb2Nlc3NV dGlsaXR5KFBsYW5uZWRTdG10ICpwc3RtdCwgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJ CSAqIGZyZWVkLiAgV2UgbXVzdCBjb3B5IGV2ZXJ5dGhpbmcgd2Ugc3RpbGwgbmVlZCBpbnRv IGxvY2FsIHZhcmlhYmxlcywKIAkJICogd2hpY2ggd2UgZGlkIGFib3ZlLgogCQkgKgotCQkg KiBGb3IgdGhlIHNhbWUgcmVhc29uLCB3ZSBjYW4ndCByaXNrIHJlc3RvcmluZyBwc3RtdC0+ cXVlcnlJZCB0byBpdHMKKwkJICogRm9yIHRoZSBzYW1lIHJlYXNvbiwgd2UgY2FuJ3Qgcmlz ayByZXN0b3JpbmcgcXVlcnlJZCB0byBpdHMKIAkJICogZm9ybWVyIHZhbHVlLCB3aGljaCdk IG90aGVyd2lzZSBiZSBhIGdvb2QgaWRlYS4KIAkJICovCiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0 ZW5zaW9uLmMKaW5kZXggMDJmZjRhOWE3Zi4uNzRmOGE4MjBjYiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXh0ZW5zaW9uLmMKQEAgLTMzOTUsMyArMzM5NSwxMDYgQEAgcmVhZF93aG9sZV9maWxl KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgKmxlbmd0aCkKIAlidWZbKmxlbmd0aF0gPSAn XDAnOwogCXJldHVybiBidWY7CiB9CisKK3N0YXRpYyBFeHRlbnNpb25EYXRhICoKK19pbml0 aWFsX2FjdGlvbnMoTm9kZSAqbm9kZSwgY29uc3QgY2hhciAqZW50cnluYW1lKQoreworCUV4 dGVuc2lvbkRhdGEgKipleHRfZmllbGQ7CisJRXh0ZW5zaW9uRGF0YSAgKnNjYW5uZXI7CisJ RXh0ZW5zaW9uRGF0YSAgKmVsZW0gPSBOVUxMOworCisJc3dpdGNoIChub2RlVGFnKG5vZGUp KQorCXsKKwkJY2FzZSBUX1F1ZXJ5OgorCQkJZXh0X2ZpZWxkID0gJigoUXVlcnkgKikgbm9k ZSktPmV4dF9maWVsZDsKKwkJCWJyZWFrOworCQljYXNlIFRfUGxhbm5lZFN0bXQ6CisJCQll eHRfZmllbGQgPSAmKChQbGFubmVkU3RtdCAqKSBub2RlKS0+ZXh0X2ZpZWxkOworCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQkvKiBUT0RPOiB1c2UgZXJlcG9ydCAqLworCQkJZWxvZyhF UlJPUiwgIlVuZXhwZWN0ZWQgbm9kZSB0eXBlOiAlZCIsIG5vZGVUYWcobm9kZSkpOworCX0K KworCUFzc2VydChzdHJsZW4oZW50cnluYW1lKSA+IDApOworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKwl7CisJCWNvbnN0IGNoYXIgKmM7CisJCS8qIGNoZWNrIG5hbWUgZG9lc24n dCBjb250YWluIGVzY2FwYWJsZSBzeW1ib2xzICovCisJCWZvciAoYyA9IGVudHJ5bmFtZTsg KmM7IGMrKykKKwkJCUFzc2VydChpc2dyYXBoKCpjKSAmJiBzdHJjaHIoIigpe31cXFwiIiwg KmMpID09IE5VTEwpOworCX0KKyNlbmRpZgorCisJLyogQ2hlY2sgZXhpc3RpbmcgZW50cnkg Ki8KKwlmb3IgKHNjYW5uZXIgPSAqZXh0X2ZpZWxkOyBzY2FubmVyICE9IE5VTEw7IHNjYW5u ZXIgPSBzY2FubmVyLT5uZXh0KQorCXsKKwkJaWYgKHN0cmNtcChzY2FubmVyLT5uYW1lLCBl bnRyeW5hbWUpID09IDApCisJCXsKKwkJCQllbGVtID0gc2Nhbm5lcjsKKwkJCQlicmVhazsK KwkJfQorCX0KKworCWlmIChlbGVtID09IE5VTEwpCisJeworCQllbGVtID0gbWFrZU5vZGUo RXh0ZW5zaW9uRGF0YSk7CisJCWVsZW0tPm5leHQgPSAqZXh0X2ZpZWxkOworCQllbGVtLT5u YW1lID0gcHN0cmR1cChlbnRyeW5hbWUpOworCQkqZXh0X2ZpZWxkID0gZWxlbTsKKwl9CisK KwlyZXR1cm4gZWxlbTsKK30KKworTm9kZSAqCitBZGRFeHRlbnNpb25EYXRhVG9Ob2RlKE5v ZGUgKm5vZGUsIGNvbnN0IGNoYXIgKmVudHJ5bmFtZSwgY29uc3QgTm9kZSAqZGF0YSwKKwkJ CQkJICAgYm9vbCBub0NvcHkpCit7CisJTWVtb3J5Q29udGV4dAlkZXN0Q3R4ID0gR2V0TWVt b3J5Q2h1bmtDb250ZXh0KG5vZGUpOworCU1lbW9yeUNvbnRleHQJb2xkY3R4OworCUV4dGVu c2lvbkRhdGEgICplbGVtOworCisJLyogU2FmZWx5IHN0b3JlIGluIHRoZSBRdWVyeSBtZW1v cnkgY29udGV4dCAqLworCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhkZXN0Q3R4 KTsKKworCWVsZW0gPSBfaW5pdGlhbF9hY3Rpb25zKG5vZGUsIGVudHJ5bmFtZSk7CisJZWxl bS0+bm9kZSA9IChOb2RlICopIChub0NvcHkgPyBkYXRhIDogY29weU9iamVjdChkYXRhKSk7 CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKworI2lmZGVmIFVTRV9BU1NF UlRfQ0hFQ0tJTkcKKwlpZiAobm9Db3B5KQorCXsKKwkJLyogYnJ1dGUgY2hlY2sgdmFsIGlz IGNvcHlhYmxlICovCisJCU1lbW9yeUNvbnRleHQgdG1wY3R4OworCisJCXRtcGN0eCA9IEFs bG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSAg ICJhc3NlcnRfY2hlY2tpbmciLAorCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpF Uyk7CisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBjdHgpOworCQkodm9p ZCkgY29weU9iamVjdChkYXRhKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7 CisJCU1lbW9yeUNvbnRleHREZWxldGUodG1wY3R4KTsKKwl9CisjZW5kaWYKKworCXJldHVy biBlbGVtLT5ub2RlOworfQorCisvKgorICogUmV0dXJuIHRoZSBub2RlLCBzdG9yZWQgaW4g ZXh0ZW5kZWQgYXJlYSBvZiBRdWVyeSBvciBQbGFubmVkU3RtdCBvcgorICogTlVMTCwgaWYg bm90IGZvdW5kLgorICovCitOb2RlICoKK0dldEV4dGVuc2lvbkRhdGEoRXh0ZW5zaW9uRGF0 YSAqZXh0ZGF0YSwgY29uc3QgY2hhciAqZW50cnluYW1lKQoreworCXdoaWxlIChleHRkYXRh ICE9IE5VTEwpCisJeworCQlpZiAoc3RyY21wKGVudHJ5bmFtZSwgZXh0ZGF0YS0+bmFtZSkg PT0gMCkKKwkJCXJldHVybiBleHRkYXRhLT5ub2RlOworCisJCWV4dGRhdGEgPSBleHRkYXRh LT5uZXh0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Bh cmFsbGVsLmMKaW5kZXggYWEzZjI4MzQ1My4uYWUwZDY3YTQxOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1BhcmFsbGVsLmMKQEAgLTE3Niw2ICsxNzYsNyBAQCBFeGVjU2VyaWFsaXpl UGxhbihQbGFuICpwbGFuLCBFU3RhdGUgKmVzdGF0ZSkKIAlwc3RtdCA9IG1ha2VOb2RlKFBs YW5uZWRTdG10KTsKIAlwc3RtdC0+Y29tbWFuZFR5cGUgPSBDTURfU0VMRUNUOwogCXBzdG10 LT5xdWVyeUlkID0gcGdzdGF0X2dldF9teV9xdWVyeV9pZCgpOworCS8qIFdoYXQgYWJvdXQg RXh0ZW5zaW9uIG5vZGVzIGhlcmU/ICovCiAJcHN0bXQtPmhhc1JldHVybmluZyA9IGZhbHNl OwogCXBzdG10LT5oYXNNb2RpZnlpbmdDVEUgPSBmYWxzZTsKIAlwc3RtdC0+Y2FuU2V0VGFn ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL3ZhbHVlLmMgYi9zcmMv YmFja2VuZC9ub2Rlcy92YWx1ZS5jCmluZGV4IGYxMTA3NDk3MGUuLmViMWE5NzVlN2QgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3ZhbHVlLmMKKysrIGIvc3JjL2JhY2tlbmQv bm9kZXMvdmFsdWUuYwpAQCAtMjgsNiArMjgsMTggQEAgbWFrZUludGVnZXIoaW50IGkpCiAJ cmV0dXJuIHY7CiB9CiAKKy8qCisgKgltYWtlSW50ZWdlcgorICovCitCaWdpbnQgKgorbWFr ZUJpZ2ludChpbnQ2NCBpKQoreworCUJpZ2ludCAgICAqdiA9IG1ha2VOb2RlKEJpZ2ludCk7 CisKKwl2LT52YWwgPSBpOworCXJldHVybiB2OworfQorCiAvKgogICoJbWFrZUZsb2F0CiAg KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGExODczY2UyNmQu LmZiNGFjN2ZkMGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTUxNyw2ICs1MTcsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3Qg Y2hhciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAogCXJlc3VsdC0+Y29t bWFuZFR5cGUgPSBwYXJzZS0+Y29tbWFuZFR5cGU7CiAJcmVzdWx0LT5xdWVyeUlkID0gcGFy c2UtPnF1ZXJ5SWQ7CisJcmVzdWx0LT5leHRfZmllbGQgPSBjb3B5T2JqZWN0KHBhcnNlLT5l eHRfZmllbGQpOwogCXJlc3VsdC0+aGFzUmV0dXJuaW5nID0gKHBhcnNlLT5yZXR1cm5pbmdM aXN0ICE9IE5JTCk7CiAJcmVzdWx0LT5oYXNNb2RpZnlpbmdDVEUgPSBwYXJzZS0+aGFzTW9k aWZ5aW5nQ1RFOwogCXJlc3VsdC0+Y2FuU2V0VGFnID0gcGFyc2UtPmNhblNldFRhZzsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuYyBiL3NyYy9i YWNrZW5kL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuYwppbmRleCA5ODBkYzE4MTZmLi4zNDAz YWJmZTQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVIYW5kbGVy LmMKKysrIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jCkBAIC00MjMy LDYgKzQyMzIsMTIgQEAgUXVlcnlSZXdyaXRlKFF1ZXJ5ICpwYXJzZXRyZWUpCiAKIAkJcXVl cnktPnF1ZXJ5SWQgPSBpbnB1dF9xdWVyeV9pZDsKIAorCQkvKgorCQkgKiBTaG91bGQgd2Ug Y29weSBleHRlbnNpb24gZmllbGRzIGhlcmU/IEd1ZXNzIG5vLCBiZWNhdXNlIGl0IGNvdWxk IGJlCisJCSAqIHF1aXRlIGRpZmZlcmVudCBxdWVyeS4gTXVjaCBzaW1wbGVyIHRvIHNraXAg dGhlc2UgZmllbGRzIGFuZCBhbGxvdworCQkgKiBleHRlbnNpb25zIHRvIHJlYWxpemUgdGhh dCBhbmQgcmUtZ2VuZXJhdGUgZGF0YSBpZiBuZWVkZWQuCisJCSAqLworCiAJCXJlc3VsdHMg PSBsYXBwZW5kKHJlc3VsdHMsIHF1ZXJ5KTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRl eCBjYWI3MDliMDdiLi5jNjY3NWIzNDBjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29w L3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC04MjMs NiArODIzLDcgQEAgcGdfcmV3cml0ZV9xdWVyeShRdWVyeSAqcXVlcnkpCiAJCQkgKiBoZXJl IHRvIGF2b2lkIGJyZWFraW5nIHBnX3N0YXRfc3RhdGVtZW50cy4KIAkJCSAqLwogCQkJbmV3 X3F1ZXJ5LT5xdWVyeUlkID0gY3Vycl9xdWVyeS0+cXVlcnlJZDsKKwkJCW5ld19xdWVyeS0+ ZXh0X2ZpZWxkID0gY29weU9iamVjdChjdXJyX3F1ZXJ5LT5leHRfZmllbGQpOwogCiAJCQlu ZXdfbGlzdCA9IGxhcHBlbmQobmV3X2xpc3QsIG5ld19xdWVyeSk7CiAJCQlwZnJlZShzdHIp OwpAQCAtOTU2LDYgKzk1Nyw3IEBAIHBnX3BsYW5fcXVlcmllcyhMaXN0ICpxdWVyeXRyZWVz LCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCQkJc3Rt dC0+c3RtdF9sb2NhdGlvbiA9IHF1ZXJ5LT5zdG10X2xvY2F0aW9uOwogCQkJc3RtdC0+c3Rt dF9sZW4gPSBxdWVyeS0+c3RtdF9sZW47CiAJCQlzdG10LT5xdWVyeUlkID0gcXVlcnktPnF1 ZXJ5SWQ7CisJCQlzdG10LT5leHRfZmllbGQgPSBjb3B5T2JqZWN0KHF1ZXJ5LT5leHRfZmll bGQpOwogCQl9CiAJCWVsc2UKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXh0ZW5zaW9uLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHRlbnNpb24uaAppbmRl eCA3NGFlMzkxMzk1Li5hNjUyZmRiZjFiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21t YW5kcy9leHRlbnNpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHRlbnNpb24u aApAQCAtNTMsNCArNTMsOCBAQCBleHRlcm4gYm9vbCBleHRlbnNpb25fZmlsZV9leGlzdHMo Y29uc3QgY2hhciAqZXh0ZW5zaW9uTmFtZSk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRl ckV4dGVuc2lvbk5hbWVzcGFjZShjb25zdCBjaGFyICpleHRlbnNpb25OYW1lLCBjb25zdCBj aGFyICpuZXdzY2hlbWEsCiAJCQkJCQkJCQkJCSBPaWQgKm9sZHNjaGVtYSk7CiAKK2V4dGVy biBOb2RlICpBZGRFeHRlbnNpb25EYXRhVG9Ob2RlKE5vZGUgKm5vZGUsIGNvbnN0IGNoYXIg KmVudHJ5bmFtZSwKKwkJCQkJCQkJCWNvbnN0IE5vZGUgKmRhdGEsIGJvb2wgbm9Db3B5KTsK K2V4dGVybiBOb2RlICpHZXRFeHRlbnNpb25EYXRhKEV4dGVuc2lvbkRhdGEgKmV4dGRhdGEs IGNvbnN0IGNoYXIgKmVudHJ5bmFtZSk7CisKICNlbmRpZgkJCQkJCQkvKiBFWFRFTlNJT05f SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDAyODU4OGZiMzMuLjU5YTQxZjM5 OGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTEwMSw2ICsxMDEsMjcgQEAgdHlw ZWRlZiB1aW50NjQgQWNsTW9kZTsJCQkvKiBhIGJpdG1hc2sgb2YgcHJpdmlsZWdlIGJpdHMg Ki8KICNkZWZpbmUgQUNMX1NFTEVDVF9GT1JfVVBEQVRFCUFDTF9VUERBVEUKIAogCisvKgor ICogU3RydWN0dXJlIGRlZmluaXRpb24gc2hvdWxkIGJlIGhpZGRlbiBmcm9tIGFuIHVzZXIs IGJ1dCBjdXJyZW50IHNlcmlhbGl6YXRpb24KKyAqIHRlY2huaXF1ZXMgbWFrZSBpdCBpbXBv c3NpYmxlLgorICogWFhYOiBJbnN0ZWFkIG9mIG5hbWUsIG1heWJlIGJldHRlciB0byBpbnZl bnQgc29tZSB1bmlxdWUgaWQgZm9yIGVhY2ggbG9hZGVkCisgKiBsaWJyYXJ5LCBhY2NvcmRp bmcgdG8gdGhlIHBvc2l0aW9uIGluIGZpbGVfbGlzdCwgYXMgYW4gZXhhbXBsZT8KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgRXh0ZW5zaW9uRGF0YQoreworCS8qCisJICogRG9uJ3QgYWxsb3cg cmVhZGluZyB0aGUgZmllbGQgKHJlbWVtYmVyLCBleHRlbnNpb24gbWF5IGJlIGR5bmFtaWNh bGx5CisJICogbG9hZGVkIGludG8gYSBiYWNrZW5kLiBQYXJhbGxlbCB3b3JrZXJzIHN0aWxs IGRvbid0IG5lZWQgaXQuCisJICogQWxsb3cgd3JpdGluZyBpdCBmb3IgZGVidWcgcHVycG9z ZXMuCisJICovCisJcGdfbm9kZV9hdHRyKG5vX2VxdWFsLCBub19yZWFkLCBub19xdWVyeV9q dW1ibGUpCisKKwlOb2RlVGFnCQkJCQl0eXBlOworCWNoYXIJCQkJICAgKm5hbWU7CisJTm9k ZQkJCQkgICAqbm9kZTsKKwlzdHJ1Y3QgRXh0ZW5zaW9uRGF0YSAgICpuZXh0OworfSBFeHRl bnNpb25EYXRhOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCVF1ZXJ5IFRyZWUK ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIzNiw2ICsyNTcsOCBAQCB0eXBlZGVm IHN0cnVjdCBRdWVyeQogCWludAkJCXN0bXRfbG9jYXRpb247CiAJLyogbGVuZ3RoIGluIGJ5 dGVzOyAwIG1lYW5zICJyZXN0IG9mIHN0cmluZyIgKi8KIAlpbnQJCQlzdG10X2xlbiBwZ19u b2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CisKKwlFeHRlbnNpb25EYXRhICpleHRf ZmllbGQgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUsIHJlYWRfd3JpdGVfaWdu b3JlLCBlcXVhbF9pZ25vcmUsIHJlYWRfYXMoTlVMTCkpOwogfSBRdWVyeTsKIAogCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDY1OWJkMDVjMGMuLjAzOGE3N2U1N2UgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMDEsNiArMTAxLDggQEAgdHlwZWRlZiBzdHJ1Y3QgUGxh bm5lZFN0bXQKIAkvKiBzdGF0ZW1lbnQgbG9jYXRpb24gaW4gc291cmNlIHN0cmluZyAoY29w aWVkIGZyb20gUXVlcnkpICovCiAJaW50CQkJc3RtdF9sb2NhdGlvbjsJLyogc3RhcnQgbG9j YXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KIAlpbnQJCQlzdG10X2xlbjsJCS8qIGxlbmd0 aCBpbiBieXRlczsgMCBtZWFucyAicmVzdCBvZiBzdHJpbmciICovCisKKwlFeHRlbnNpb25E YXRhICpleHRfZmllbGQgIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlLCByZWFk X3dyaXRlX2lnbm9yZSwgZXF1YWxfaWdub3JlLCByZWFkX2FzKE5VTEwpKTsKIH0gUGxhbm5l ZFN0bXQ7CiAKIC8qIG1hY3JvIGZvciBmZXRjaGluZyB0aGUgUGxhbiBhc3NvY2lhdGVkIHdp dGggYSBTdWJQbGFuIG5vZGUgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Zh bHVlLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy92YWx1ZS5oCmluZGV4IGIyNGM0YzFhZmUuLjY3 NzRhMGQ5YTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ZhbHVlLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvdmFsdWUuaApAQCAtMzMsNiArMzMsMTQgQEAgdHlwZWRlZiBz dHJ1Y3QgSW50ZWdlcgogCWludAkJCWl2YWw7CiB9IEludGVnZXI7CiAKK3R5cGVkZWYgc3Ry dWN0IEJpZ2ludAoreworCXBnX25vZGVfYXR0cihzcGVjaWFsX3JlYWRfd3JpdGUpCisKKwlO b2RlVGFnCQl0eXBlOworCWludDY0CQl2YWw7Cit9IEJpZ2ludDsKKwogLyoKICAqIEZsb2F0 IGlzIGludGVybmFsbHkgcmVwcmVzZW50ZWQgYXMgc3RyaW5nLiAgVXNpbmcgVF9GbG9hdCBh cyB0aGUgbm9kZSB0eXBlCiAgKiBzaW1wbHkgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbnRlbnRz IG9mIHRoZSBzdHJpbmcgbG9vayBsaWtlIGEgdmFsaWQgbnVtZXJpYwpAQCAtNzcsMTEgKzg1 LDEzIEBAIHR5cGVkZWYgc3RydWN0IEJpdFN0cmluZwogfSBCaXRTdHJpbmc7CiAKICNkZWZp bmUgaW50VmFsKHYpCQkoY2FzdE5vZGUoSW50ZWdlciwgdiktPml2YWwpCisjZGVmaW5lIGJp Z2ludFZhbCh2KQkoY2FzdE5vZGUoQmlnaW50LCB2KS0+dmFsKQogI2RlZmluZSBmbG9hdFZh bCh2KQkJYXRvZihjYXN0Tm9kZShGbG9hdCwgdiktPmZ2YWwpCiAjZGVmaW5lIGJvb2xWYWwo dikJCShjYXN0Tm9kZShCb29sZWFuLCB2KS0+Ym9vbHZhbCkKICNkZWZpbmUgc3RyVmFsKHYp CQkoY2FzdE5vZGUoU3RyaW5nLCB2KS0+c3ZhbCkKIAogZXh0ZXJuIEludGVnZXIgKm1ha2VJ bnRlZ2VyKGludCBpKTsKK2V4dGVybiBCaWdpbnQgKm1ha2VCaWdpbnQoaW50NjQgaSk7CiBl eHRlcm4gRmxvYXQgKm1ha2VGbG9hdChjaGFyICpudW1lcmljU3RyKTsKIGV4dGVybiBCb29s ZWFuICptYWtlQm9vbGVhbihib29sIHZhbCk7CiBleHRlcm4gU3RyaW5nICptYWtlU3RyaW5n KGNoYXIgKnN0cik7Ci0tIAoyLjM0LjEKCg== --------------VvPbxkrs09Ipw9CBoHX7rpDp--