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 1kucYC-00050c-P1 for pgsql-hackers@arkaria.postgresql.org; Wed, 30 Dec 2020 14:34:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kucYB-0004Ll-Lb for pgsql-hackers@arkaria.postgresql.org; Wed, 30 Dec 2020 14:34:07 +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 1kucYA-0004Jt-Ey for pgsql-hackers@lists.postgresql.org; Wed, 30 Dec 2020 14:34:07 +0000 Received: from forward3-smtp.messagingengine.com ([66.111.4.237]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kucY5-0006H8-6T for pgsql-hackers@postgresql.org; Wed, 30 Dec 2020 14:34:05 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailforward.nyi.internal (Postfix) with ESMTP id CC2FE1943411; Wed, 30 Dec 2020 09:33:59 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Wed, 30 Dec 2020 09:33:59 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=3lcfSW CcsfU178mg2RwjOi4/x/wFZXeIxH56+wTVgWM=; b=fRxOsgei/DxXh7HUV4gdha hhEg9yy1DfMQZXVRoMIlgP1I0kX3G8IQhxoG2d/zCdslEe8HkG5fvgZs9YYfzdKV YLDcc7TadCOplitvPK3U1735lq8BTm/TWBJ1cT8cyr21A5+sjHHLMU9vL8Pp8q/X k3Gij7wuGYZSZt5HHqmEUr4nQvB3tt+MSN9j85P2+TAGNDblmXDaLRQsEF3efA+x F14Fie2V6jAMb0LLa6sDrbeKWcSyKHDAOqs4SnAc6KEgLhxPhzkid1bTerpHAHXw csa2xpxEDzO3ODLXSPRxWizl1pl8YV2OY921iulSeeWcMPKXvXKqjwLMX1UFPUGQ == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrvddvfedgieeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepuffvfhfhohfkffgfgggjtgesmhdtreertdefjeenucfhrhhomheprfgvthgv rhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdrvghishgvnhhtrhgruhhtsedvnhguqh hurggurhgrnhhtrdgtohhmqeenucggtffrrghtthgvrhhnpeetteekgefhfedtgeetjedv udegieduteelvdelveeuueeuhfdvtedtudehueehtdenucffohhmrghinhepphhoshhtgh hrvghsqhhlrdhorhhgpddvnhguqhhurggurhgrnhhtrdgtohhmnecukfhppeekjedrudej jedrjedvrddugedvnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilh hfrhhomhepphgvthgvrhdrvghishgvnhhtrhgruhhtsedvnhguqhhurggurhgrnhhtrdgt ohhm X-ME-Proxy: Received: from april.pezone.net (p57b1488e.dip0.t-ipconnect.de [87.177.72.142]) by mail.messagingengine.com (Postfix) with ESMTPA id 71423240066; Wed, 30 Dec 2020 09:33:58 -0500 (EST) Subject: Re: dynamic result sets support in extended query protocol To: pgsql-hackers References: <6e747f98-835f-2e05-cde5-86ee444a7140@2ndquadrant.com> <20201009184625.4hfgpcxzd6jfredb@alap3.anarazel.de> Cc: Andres Freund From: Peter Eisentraut Organization: 2ndQuadrant Message-ID: Date: Wed, 30 Dec 2020 15:33:56 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20201009184625.4hfgpcxzd6jfredb@alap3.anarazel.de> Content-Type: multipart/mixed; boundary="------------A0D7E55498357BAB8268C9EA" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------A0D7E55498357BAB8268C9EA Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 2020-10-09 20:46, Andres Freund wrote: > Is there really a good reason for forcing the client to issue > NextResult, Describe, Execute for each of the dynamic result sets? It's > not like there's really a case for allowing the clients to skip them, > right? Why aren't we sending something more like > > S: CommandPartiallyComplete > S: RowDescription > S: DataRow... > S: CommandPartiallyComplete > S: RowDescription > S: DataRow... > ... > S: CommandComplete > C: Sync I want to post my current patch, to keep this discussion moving. There are still a number of pieces to pull together, but what I have is a self-contained functioning prototype. The interesting thing about the above message sequence is that the "CommandPartiallyComplete" isn't actually necessary. Since an Execute message normally does not issue a RowDescription response, the appearance of one is already enough to mark the beginning of a new result set. Moreover, libpq already handles this correctly, so we wouldn't need to change it at all. We might still want to add a new protocol message, for clarity perhaps, and that would probably only be a few lines of code on either side, but that would only serve for additional error checking and wouldn't actually be needed to identify what's going on. What else we need: - Think about what should happen if the Execute message specifies a row count, and what should happen during subsequent Execute messages on the same portal. I suspect that there isn't a particularly elegant answer, but we need to pick some behavior. - Some way for psql to display multiple result sets. Proposals have been made in [0] and [1]. (You need either patch or one like it for the regression tests in this patch to pass.) - Session-level default result formats setting, proposed in [2]. Not strictly necessary, but would be most sensible to coordinate these two. - We don't have a way to test the extended query protocol. I have attached my test program, but we might want to think about something more permanent. Proposals for this have already been made in [3]. - Right now, this only supports returning dynamic result sets from a top-level CALL. Specifications for passing dynamic result sets from one procedure to a calling procedure exist in the SQL standard and could be added later. (All the SQL additions in this patch are per SQL standard. DB2 appears to be the closest existing implementation.) [0]: https://www.postgresql.org/message-id/flat/4580ff7b-d610-eaeb-e06f-4d686896b93b%402ndquadrant.com [1]: https://commitfest.postgresql.org/29/2096/ [2]: https://commitfest.postgresql.org/31/2812/ [3]: https://www.postgresql.org/message-id/4f733cca-5e07-e167-8b38-05b5c9066d04%402ndQuadrant.com -- Peter Eisentraut 2ndQuadrant, an EDB company https://www.2ndquadrant.com/ --------------A0D7E55498357BAB8268C9EA Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v1-0001-Dynamic-result-sets-from-procedures.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v1-0001-Dynamic-result-sets-from-procedures.patch" RnJvbSAwM2U3YjAwOWNhNTRmNjg2ZjA3OThjNzY0ZmZjODAyZTcwZjY0MDc2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCAzMCBEZWMgMjAyMCAxNDozMDozMyArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjFdIER5bmFtaWMgcmVzdWx0IHNldHMgZnJvbSBwcm9jZWR1cmVzCgpEZWNs YXJpbmcgYSBjdXJzb3IgV0lUSCBSRVRVUk4gaW4gYSBwcm9jZWR1cmUgbWFrZXMgdGhlIGN1 cnNvcidzIGRhdGEgYmUKcmV0dXJuZWQgYXMgYSByZXN1bHQgb2YgdGhlIENBTEwgaW52b2Nh dGlvbi4gIFRoZSBwcm9jZWR1cmUgbmVlZHMgdG8KYmUgZGVjbGFyZWQgd2l0aCB0aGUgRFlO QU1JQyBSRVNVTFQgU0VUUyBhdHRyaWJ1dGUuCi0tLQogZG9jL3NyYy9zZ21sL2NhdGFsb2dz LnNnbWwgICAgICAgICAgICAgICAgICAgIHwgMTAgKysrCiBkb2Mvc3JjL3NnbWwvaW5mb3Jt YXRpb25fc2NoZW1hLnNnbWwgICAgICAgICAgfCAgMyArLQogZG9jL3NyYy9zZ21sL3Byb3Rv Y29sLnNnbWwgICAgICAgICAgICAgICAgICAgIHwgMTkgKysrKysKIGRvYy9zcmMvc2dtbC9y ZWYvYWx0ZXJfcHJvY2VkdXJlLnNnbWwgICAgICAgICB8IDEyICsrKwogZG9jL3NyYy9zZ21s L3JlZi9jcmVhdGVfcHJvY2VkdXJlLnNnbWwgICAgICAgIHwgMTQgKysrKwogZG9jL3NyYy9z Z21sL3JlZi9kZWNsYXJlLnNnbWwgICAgICAgICAgICAgICAgIHwgMzQgKysrKysrKystCiBz cmMvYmFja2VuZC9jYXRhbG9nL2luZm9ybWF0aW9uX3NjaGVtYS5zcWwgICAgfCAgMiArLQog c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19hZ2dyZWdhdGUuYyAgICAgICAgICAgIHwgIDMgKy0K IHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHJvYy5jICAgICAgICAgICAgICAgICB8ICA0ICst CiBzcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQgICAgICAgICAgfCAgMiAr LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZnVuY3Rpb25jbWRzLmMgICAgICAgICAgIHwgNzUg KysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5j ICAgICAgICAgICAgIHwgMjMgKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy90eXBlY21k cy5jICAgICAgICAgICAgICAgfCAxMiArKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkg ICAgICAgICAgICAgICAgICAgICB8IDIwICsrKystCiBzcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMgICAgICAgICAgICAgICAgICAgfCA2MiArKysrKysrKysrKysrKy0KIHNyYy9iYWNr ZW5kL3Rjb3AvcHF1ZXJ5LmMgICAgICAgICAgICAgICAgICAgICB8ICA2ICsrCiBzcmMvYmFj a2VuZC91dGlscy9lcnJjb2Rlcy50eHQgICAgICAgICAgICAgICAgfCAgMSArCiBzcmMvYmFj a2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jICAgICAgICAgICAgfCA0OCArKysrKysrKysr KysKIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICB8IDE2 ICsrKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oICAgICAgICAgICAgICAgICB8 ICA2ICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9kZWZyZW0uaCAgICAgICAgICAgICAgICAg fCAgMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgICAg fCAgOSArKy0KIHNyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCAgICAgICAgICAgICAgICAg ICB8ICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oICAgICAgICAgICAgICAgICAg ICB8IDE0ICsrKysKIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXByb3RvY29sMy5jICAgICAg ICAgICB8ICA2ICstCiAuLi4vcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfcHJvY2VkdXJlLm91 dCAgICAgfCA0MSArKysrKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfcHJv Y2VkdXJlLnNxbCAgICAgfCAzMCArKysrKysrLQogMjcgZmlsZXMgY2hhbmdlZCwgNDQzIGlu c2VydGlvbnMoKyksIDM0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKaW5kZXggM2Ey MjY2NTI2Yy4uY2RlODhiNTRlMiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dz LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKQEAgLTU4NDAsNiArNTg0 MCwxNiBAQCA8dGl0bGU+PHN0cnVjdG5hbWU+cGdfcHJvYzwvc3RydWN0bmFtZT4gQ29sdW1u czwvdGl0bGU+CiAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKKyAgICAg PHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSBy b2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPnByb2R5bnJl czwvc3RydWN0ZmllbGQ+IDx0eXBlPmludDQ8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAg ICA8cGFyYT4KKyAgICAgICBGb3IgcHJvY2VkdXJlcywgdGhpcyByZWNvcmRzIHRoZSBtYXhp bXVtIG51bWJlciBvZiBkeW5hbWljIHJlc3VsdCBzZXRzCisgICAgICAgdGhlIHByb2NlZHVy ZSBtYXkgY3JlYXRlLiAgT3RoZXJ3aXNlIHplcm8uCisgICAgICA8L3BhcmE+PC9lbnRyeT4K KyAgICAgPC9yb3c+CisKICAgICAgPHJvdz4KICAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9n X3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CiAgICAgICAg PHN0cnVjdGZpZWxkPnByb25hcmdzPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50MjwvdHlwZT4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmZvcm1hdGlvbl9zY2hlbWEuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9pbmZvcm1hdGlvbl9zY2hlbWEuc2dtbAppbmRleCAzNmVjMTdhNGM2Li4w ZWVhZTQ1ZGE0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5mb3JtYXRpb25fc2NoZW1h LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZm9ybWF0aW9uX3NjaGVtYS5zZ21sCkBAIC01 NDQxLDcgKzU0NDEsOCBAQCA8dGl0bGU+PHN0cnVjdG5hbWU+cm91dGluZXM8L3N0cnVjdG5h bWU+IENvbHVtbnM8L3RpdGxlPgogICAgICAgIDxzdHJ1Y3RmaWVsZD5tYXhfZHluYW1pY19y ZXN1bHRfc2V0czwvc3RydWN0ZmllbGQ+IDx0eXBlPmNhcmRpbmFsX251bWJlcjwvdHlwZT4K ICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAgICAgIEFwcGxpZXMgdG8gYSBmZWF0 dXJlIG5vdCBhdmFpbGFibGUgaW4gPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3Ru YW1lPgorICAgICAgIEZvciBhIHByb2NlZHVyZSwgdGhlIG1heGltdW0gbnVtYmVyIG9mIGR5 bmFtaWMgcmVzdWx0IHNldHMuICBPdGhlcndpc2UKKyAgICAgICB6ZXJvLgogICAgICAgPC9w YXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv cHJvdG9jb2wuc2dtbCBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCmluZGV4IDQ4OTli YWNkYTcuLjYyZjE3ZDRmYjAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCkBAIC05NTksNiArOTU5LDI1 IEBAIDx0aXRsZT5FeHRlbmRlZCBRdWVyeTwvdGl0bGU+CiAgICAgYW4gZW1wdHkgcXVlcnkg c3RyaW5nKSwgRXJyb3JSZXNwb25zZSwgb3IgUG9ydGFsU3VzcGVuZGVkLgogICAgPC9wYXJh PgogCisgICA8cGFyYT4KKyAgICBFeGVjdXRpbmcgYSBwb3J0YWwgbWF5IGdpdmUgcmlzZSB0 byBhIDxmaXJzdHRlcm0+ZHluYW1pYyByZXN1bHQgc2V0CisgICAgc2VxdWVuY2U8L2ZpcnN0 dGVybT4uICBUaGF0IG1lYW5zIHRoZSBjb21tYW5kIGNvbnRhaW5lZCBpbiB0aGUgcG9ydGFs CisgICAgY3JlYXRlZCBhZGRpdGlvbmFsIHJlc3VsdCBzZXRzIGJleW9uZCB3aGF0IGl0IG5v cm1hbGx5IHJldHVybnMuICAoVGhlCisgICAgdHlwaWNhbCBleGFtcGxlIGlzIGNhbGxpbmcg YSBzdG9yZWQgcHJvY2VkdXJlIHRoYXQgY3JlYXRlcyBkeW5hbWljIHJlc3VsdAorICAgIHNl dHMuKSAgRHluYW1pYyByZXN1bHQgc2V0cyBhcmUgaXNzdWVzIGFmdGVyIHdoYXRldmVyIHJl c3BvbnNlIHRoZSBtYWluCisgICAgY29tbWFuZCBpc3N1ZWQuICBFYWNoIGR5bmFtaWMgcmVz dWx0IHNldCBiZWdpbnMgd2l0aCBhIFJvd0Rlc2NyaXB0aW9uCisgICAgbWVzc2FnZSBmb2xs b3dlZCBieSB6ZXJvIG9yIG1vcmUgRGF0YVJvdyBtZXNzYWdlcy4gIChTaW5jZSBhcyBleHBs YWluZWQKKyAgICBhYm92ZSBhbiBFeGVjdXRlIG1lc3NhZ2Ugbm9ybWFsbHkgZG9lcyBub3Qg cmVzcG9uZCB3aXRoIGEgUm93RGVzY3JpcHRpb24sCisgICAgdGhlIGFwcGVhcmFuY2Ugb2Yg dGhlIGZpcnN0IFJvd0Rlc2NyaXB0aW9uIG1hcmtzIHRoZSBlbmQgb2YgdGhlIHByaW1hcnkK KyAgICByZXN1bHQgc2V0IG9mIHRoZSBwb3J0YWwgYW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhl IGZpcnN0IGR5bmFtaWMgcmVzdWx0CisgICAgc2V0LikgIFRoZSBDb21tYW5kQ29tcGxldGUg bWVzc2FnZSB0aGF0IGNvbmNsdWRlcyB0aGUgRXhlY3V0ZSBtZXNzYWdlCisgICAgcmVzcG9u c2UgZm9sbG93cyA8ZW1waGFzaXM+YWZ0ZXI8L2VtcGhhc2lzPiBhbGwgZHluYW1pYyByZXN1 bHQgc2V0cy4gIE5vdGUKKyAgICB0aGF0IGR5bmFtaWMgcmVzdWx0IHNldHMgY2Fubm90LCBi eSB0aGVpciBuYXR1cmUsIGJlIGRlY3JpYmVkIHByaW9yIHRvIHRoZQorICAgIGV4ZWN1dGlv biBvZiB0aGUgcG9ydGFsLiAgTXVsdGlwbGUgZXhlY3V0aW9ucyBvZiB0aGUgc2FtZSBwcmVw YXJlZAorICAgIHN0YXRlbWVudCBjb3VsZCByZXN1bHQgaW4gZHluYW1pYyByZXN1bHQgc2V0 cyB3aXRoIGRpZmZlcmVudCByb3cKKyAgICBkZXNjcmlwdGlvbnMgYmVpbmcgcmV0dXJuZWQu CisgICA8L3BhcmE+CisKICAgIDxwYXJhPgogICAgIEF0IGNvbXBsZXRpb24gb2YgZWFjaCBz ZXJpZXMgb2YgZXh0ZW5kZWQtcXVlcnkgbWVzc2FnZXMsIHRoZSBmcm9udGVuZAogICAgIHNo b3VsZCBpc3N1ZSBhIFN5bmMgbWVzc2FnZS4gIFRoaXMgcGFyYW1ldGVybGVzcyBtZXNzYWdl IGNhdXNlcyB0aGUKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfcHJvY2Vk dXJlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3Byb2NlZHVyZS5zZ21sCmluZGV4 IDVjMTc2ZmI1ZDguLjQ0MTU4NWU2NjUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYv YWx0ZXJfcHJvY2VkdXJlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wcm9j ZWR1cmUuc2dtbApAQCAtMzQsNiArMzQsNyBAQAogCiA8cGhyYXNlPndoZXJlIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5hY3Rpb248L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6 PC9waHJhc2U+CiAKKyAgICBEWU5BTUlDIFJFU1VMVCBTRVRTIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5keW5hbWljX3Jlc3VsdF9zZXRzPC9yZXBsYWNlYWJsZT4KICAgICBb IEVYVEVSTkFMIF0gU0VDVVJJVFkgSU5WT0tFUiB8IFsgRVhURVJOQUwgXSBTRUNVUklUWSBE RUZJTkVSCiAgICAgU0VUIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb25maWd1 cmF0aW9uX3BhcmFtZXRlcjwvcmVwbGFjZWFibGU+IHsgVE8gfCA9IH0geyA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dmFsdWU8L3JlcGxhY2VhYmxlPiB8IERFRkFVTFQgfQog ICAgIFNFVCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29uZmlndXJhdGlvbl9w YXJhbWV0ZXI8L3JlcGxhY2VhYmxlPiBGUk9NIENVUlJFTlQKQEAgLTE1MCw2ICsxNTEsMTcg QEAgPHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zh cmxpc3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48bGl0ZXJhbD5E WU5BTUlDIFJFU1VMVCBTRVRTIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5keW5h bWljX3Jlc3VsdF9zZXRzPC9yZXBsYWNlYWJsZT48L2xpdGVyYWw+PC90ZXJtPgorCisgICAg PGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIENoYW5nZXMgdGhlIGR5bmFtaWMgcmVz dWx0IHNldHMgc2V0dGluZyBvZiB0aGUgcHJvY2VkdXJlLiAgU2VlIDx4cmVmCisgICAgICBs aW5rZW5kPSJzcWwtY3JlYXRlcHJvY2VkdXJlIi8+IGZvciBtb3JlIGluZm9ybWF0aW9uLgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAg ICA8dmFybGlzdGVudHJ5PgogICAgIDx0ZXJtPjxsaXRlcmFsPjxvcHRpb25hbD4gRVhURVJO QUwgPC9vcHRpb25hbD4gU0VDVVJJVFkgSU5WT0tFUjwvbGl0ZXJhbD48L3Rlcm0+CiAgICAg PHRlcm0+PGxpdGVyYWw+PG9wdGlvbmFsPiBFWFRFUk5BTCA8L29wdGlvbmFsPiBTRUNVUklU WSBERUZJTkVSPC9saXRlcmFsPjwvdGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9y ZWYvY3JlYXRlX3Byb2NlZHVyZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHJv Y2VkdXJlLnNnbWwKaW5kZXggZTI1OGVjYTVjZS4uOWI1MDkwZjIyOSAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHJvY2VkdXJlLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfcHJvY2VkdXJlLnNnbWwKQEAgLTI0LDYgKzI0LDcgQEAKIENSRUFU RSBbIE9SIFJFUExBQ0UgXSBQUk9DRURVUkUKICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+ICggWyBbIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5hcmdtb2RlPC9yZXBsYWNlYWJsZT4gXSBbIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5hcmduYW1lPC9yZXBsYWNlYWJsZT4gXSA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+YXJndHlwZTwvcmVwbGFjZWFibGU+IFsgeyBERUZBVUxUIHwgPSB9 IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5kZWZhdWx0X2V4cHI8L3JlcGxhY2Vh YmxlPiBdIFssIC4uLl0gXSApCiAgIHsgTEFOR1VBR0UgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmxhbmdfbmFtZTwvcmVwbGFjZWFibGU+CisgICAgfCBEWU5BTUlDIFJFU1VM VCBTRVRTIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5keW5hbWljX3Jlc3VsdF9z ZXRzPC9yZXBsYWNlYWJsZT4KICAgICB8IFRSQU5TRk9STSB7IEZPUiBUWVBFIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj50eXBlX25hbWU8L3JlcGxhY2VhYmxlPiB9IFssIC4u LiBdCiAgICAgfCBbIEVYVEVSTkFMIF0gU0VDVVJJVFkgSU5WT0tFUiB8IFsgRVhURVJOQUwg XSBTRUNVUklUWSBERUZJTkVSCiAgICAgfCBTRVQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmNvbmZpZ3VyYXRpb25fcGFyYW1ldGVyPC9yZXBsYWNlYWJsZT4geyBUTyA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dmFsdWU8L3JlcGxhY2VhYmxlPiB8ID0gPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnZhbHVlPC9yZXBsYWNlYWJsZT4gfCBGUk9N IENVUlJFTlQgfQpAQCAtMTY4LDYgKzE2OSwxOSBAQCA8dGl0bGU+UGFyYW1ldGVyczwvdGl0 bGU+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICA8dmFy bGlzdGVudHJ5PgorICAgICA8dGVybT48bGl0ZXJhbD5EWU5BTUlDIFJFU1VMVCBTRVRTIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5keW5hbWljX3Jlc3VsdF9zZXRzPC9yZXBs YWNlYWJsZT48L2xpdGVyYWw+PC90ZXJtPgorCisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxw YXJhPgorICAgICAgIFNwZWNpZmllcyBob3cgbWFueSBkeW5hbWljIHJlc3VsdCBzZXRzIHRo ZSBwcm9jZWR1cmUgcmV0dXJucyAoc2VlCisgICAgICAgPGxpdGVyYWw+PGxpbmsgbGlua2Vu ZD0ic3FsLWRlY2xhcmUiPkRFQ0xBUkU8L2xpbms+IFdJVEgKKyAgICAgICBSRVRVUk48L2xp dGVyYWw+KS4gIFRoZSBkZWZhdWx0IGlzIDAuICBJZiBhIHByb2NlZHVyZSByZXR1cm5zIG1v cmUKKyAgICAgICByZXN1bHQgc2V0cyB0aGFuIGRlY2xhcmVkLCBhIHdhcm5pbmcgaXMgcmFp c2VkLgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVu dHJ5PgorCiAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+PGxpdGVyYWw+VFJBTlNG T1JNIHsgRk9SIFRZUEUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnR5cGVfbmFt ZTwvcmVwbGFjZWFibGU+IH0gWywgLi4uIF0gfTwvbGl0ZXJhbD48L3Rlcm0+CiAKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvZGVjbGFyZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3Jl Zi9kZWNsYXJlLnNnbWwKaW5kZXggMjE1MjEzNDYzNS4uZGRlZDE1OWQxOCAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL3JlZi9kZWNsYXJlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9kZWNsYXJlLnNnbWwKQEAgLTI3LDcgKzI3LDggQEAKICA8cmVmc3lub3BzaXNkaXY+CiA8 c3lub3BzaXM+CiBERUNMQVJFIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1l PC9yZXBsYWNlYWJsZT4gWyBCSU5BUlkgXSBbIElOU0VOU0lUSVZFIF0gWyBbIE5PIF0gU0NS T0xMIF0KLSAgICBDVVJTT1IgWyB7IFdJVEggfCBXSVRIT1VUIH0gSE9MRCBdIEZPUiA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cXVlcnk8L3JlcGxhY2VhYmxlPgorICAgIENV UlNPUiBbIHsgV0lUSCB8IFdJVEhPVVQgfSBIT0xEIF0gWyB7IFdJVEggfCBXSVRIT1VUIH0g UkVUVVJOIF0KKyAgICBGT1IgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnF1ZXJ5 PC9yZXBsYWNlYWJsZT4KIDwvc3lub3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4KIApAQCAt MTIwLDYgKzEyMSwyMiBAQCA8dGl0bGU+UGFyYW1ldGVyczwvdGl0bGU+CiAgICAgPC9saXN0 aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0 ZXJtPjxsaXRlcmFsPldJVEggUkVUVVJOPC9saXRlcmFsPjwvdGVybT4KKyAgICA8dGVybT48 bGl0ZXJhbD5XSVRIT1VUIFJFVFVSTjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgPGxpc3RpdGVt PgorICAgICA8cGFyYT4KKyAgICAgIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGN1 cnNvcnMgZGVmaW5lZCBpbnNpZGUgYSBwcm9jZWR1cmUuCisgICAgICA8bGl0ZXJhbD5XSVRI IFJFVFVSTjwvbGl0ZXJhbD4gc3BlY2lmaWVzIHRoYXQgdGhlIGN1cnNvcidzIHJlc3VsdCBy b3dzCisgICAgICB3aWxsIGJlIHByb3ZpZGVkIGFzIGEgcmVzdWx0IHNldCBvZiB0aGUgcHJv Y2VkdXJlIGludm9jYXRpb24uICBUbworICAgICAgYWNjb21wbGlzaCB0aGF0LCB0aGUgY3Vy c29yIG11c3QgYmUgbGVmdCBvcGVuIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICBwcm9jZWR1 cmUuICBJZiBtdWx0aXBsZSA8bGl0ZXJhbD5XSVRIIFJFVFVSTjwvbGl0ZXJhbD4gY3Vyc29y cyBhcmUKKyAgICAgIGRlY2xhcmVkLCB0aGVuIHRoZWlyIHJlc3VsdHMgd2lsbCBiZSByZXR1 cm5lZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlCisgICAgICBjcmVhdGVkLiAgPGxpdGVyYWw+ V0lUSE9VVCBSRVRVUk48L2xpdGVyYWw+IGlzIHRoZSBkZWZhdWx0LgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAgICA8dmFybGlzdGVu dHJ5PgogICAgIDx0ZXJtPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5xdWVyeTwv cmVwbGFjZWFibGU+PC90ZXJtPgogICAgIDxsaXN0aXRlbT4KQEAgLTMxMyw2ICszMzAsMjEg QEAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJzcWwt ZmV0Y2giLz4gZm9yIG1vcmUKICAgIGV4YW1wbGVzIG9mIGN1cnNvciB1c2FnZS4KICAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byByZXR1cm4g bXVsdGlwbGUgcmVzdWx0IHNldHMgZnJvbSBhIHByb2NlZHVyZToKKzxwcm9ncmFtbGlzdGlu Zz4KK0NSRUFURSBQUk9DRURVUkUgdGVzdCgpCitMQU5HVUFHRSBTUUwKK0FTICQkCitERUNM QVJFIGEgQ1VSU09SIFdJVEggUkVUVVJOIEZPUiBTRUxFQ1QgKiBGUk9NIHRibDE7CitERUNM QVJFIGIgQ1VSU09SIFdJVEggUkVUVVJOIEZPUiBTRUxFQ1QgKiBGUk9NIHRibDI7CiskJDsK KworQ0FMTCB0ZXN0KCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgVGhlIHJlc3VsdHMgb2Yg dGhlIHR3byBjdXJzb3JzIHdpbGwgYmUgcmV0dXJuZWQgaW4gb3JkZXIgZnJvbSB0aGlzIGNh bGwuCisgIDwvcGFyYT4KICA8L3JlZnNlY3QxPgogCiAgPHJlZnNlY3QxPgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmZvcm1hdGlvbl9zY2hlbWEuc3FsIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmZvcm1hdGlvbl9zY2hlbWEuc3FsCmluZGV4IDVhYjQ3ZTc3NDMu LjIxNmMxZjNiMWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5mb3JtYXRp b25fc2NoZW1hLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZm9ybWF0aW9uX3Nj aGVtYS5zcWwKQEAgLTE0OTQsNyArMTQ5NCw3IEBAIENSRUFURSBWSUVXIHJvdXRpbmVzIEFT CiAgICAgICAgICAgICAgQ0FTRSBXSEVOIHAucHJvaXNzdHJpY3QgVEhFTiAnWUVTJyBFTFNF ICdOTycgRU5EIEVORCBBUyB5ZXNfb3Jfbm8pIEFTIGlzX251bGxfY2FsbCwKICAgICAgICAg ICAgQ0FTVChudWxsIEFTIGNoYXJhY3Rlcl9kYXRhKSBBUyBzcWxfcGF0aCwKICAgICAgICAg ICAgQ0FTVCgnWUVTJyBBUyB5ZXNfb3Jfbm8pIEFTIHNjaGVtYV9sZXZlbF9yb3V0aW5lLAot ICAgICAgICAgICBDQVNUKDAgQVMgY2FyZGluYWxfbnVtYmVyKSBBUyBtYXhfZHluYW1pY19y ZXN1bHRfc2V0cywKKyAgICAgICAgICAgQ0FTVChwLnByb2R5bnJlcyBBUyBjYXJkaW5hbF9u dW1iZXIpIEFTIG1heF9keW5hbWljX3Jlc3VsdF9zZXRzLAogICAgICAgICAgICBDQVNUKG51 bGwgQVMgeWVzX29yX25vKSBBUyBpc191c2VyX2RlZmluZWRfY2FzdCwKICAgICAgICAgICAg Q0FTVChudWxsIEFTIHllc19vcl9ubykgQVMgaXNfaW1wbGljaXRseV9pbnZvY2FibGUsCiAg ICAgICAgICAgIENBU1QoQ0FTRSBXSEVOIHAucHJvc2VjZGVmIFRIRU4gJ0RFRklORVInIEVM U0UgJ0lOVk9LRVInIEVORCBBUyBjaGFyYWN0ZXJfZGF0YSkgQVMgc2VjdXJpdHlfdHlwZSwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfYWdncmVnYXRlLmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3BnX2FnZ3JlZ2F0ZS5jCmluZGV4IDc2NjRiYjYyODUuLjExZWQ1 ZWJiMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfYWdncmVnYXRlLmMK KysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19hZ2dyZWdhdGUuYwpAQCAtNjM5LDcgKzYz OSw4IEBAIEFnZ3JlZ2F0ZUNyZWF0ZShjb25zdCBjaGFyICphZ2dOYW1lLAogCQkJCQkJCSBQ b2ludGVyR2V0RGF0dW0oTlVMTCksIC8qIHByb2NvbmZpZyAqLwogCQkJCQkJCSBJbnZhbGlk T2lkLAkvKiBubyBwcm9zdXBwb3J0ICovCiAJCQkJCQkJIDEsIC8qIHByb2Nvc3QgKi8KLQkJ CQkJCQkgMCk7CS8qIHByb3Jvd3MgKi8KKwkJCQkJCQkgMCwJLyogcHJvcm93cyAqLworCQkJ CQkJCSAwKTsJLyogcHJvZHlucmVzICovCiAJcHJvY09pZCA9IG15c2VsZi5vYmplY3RJZDsK IAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3Byb2MuYyBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvcGdfcHJvYy5jCmluZGV4IDFkZDllY2MwNjMuLjAxN2E2YWNj YTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHJvYy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvcGdfcHJvYy5jCkBAIC05MSw3ICs5MSw4IEBAIFByb2NlZHVy ZUNyZWF0ZShjb25zdCBjaGFyICpwcm9jZWR1cmVOYW1lLAogCQkJCURhdHVtIHByb2NvbmZp ZywKIAkJCQlPaWQgcHJvc3VwcG9ydCwKIAkJCQlmbG9hdDQgcHJvY29zdCwKLQkJCQlmbG9h dDQgcHJvcm93cykKKwkJCQlmbG9hdDQgcHJvcm93cywKKwkJCQlpbnQgZHlucmVzKQogewog CU9pZAkJCXJldHZhbDsKIAlpbnQJCQlwYXJhbWV0ZXJDb3VudDsKQEAgLTMxMCw2ICszMTEs NyBAQCBQcm9jZWR1cmVDcmVhdGUoY29uc3QgY2hhciAqcHJvY2VkdXJlTmFtZSwKIAl2YWx1 ZXNbQW51bV9wZ19wcm9jX3Byb3JldHNldCAtIDFdID0gQm9vbEdldERhdHVtKHJldHVybnNT ZXQpOwogCXZhbHVlc1tBbnVtX3BnX3Byb2NfcHJvdm9sYXRpbGUgLSAxXSA9IENoYXJHZXRE YXR1bSh2b2xhdGlsaXR5KTsKIAl2YWx1ZXNbQW51bV9wZ19wcm9jX3Byb3BhcmFsbGVsIC0g MV0gPSBDaGFyR2V0RGF0dW0ocGFyYWxsZWwpOworCXZhbHVlc1tBbnVtX3BnX3Byb2NfcHJv ZHlucmVzIC0gMV0gPSBJbnQzMkdldERhdHVtKGR5bnJlcyk7CiAJdmFsdWVzW0FudW1fcGdf cHJvY19wcm9uYXJncyAtIDFdID0gVUludDE2R2V0RGF0dW0ocGFyYW1ldGVyQ291bnQpOwog CXZhbHVlc1tBbnVtX3BnX3Byb2NfcHJvbmFyZ2RlZmF1bHRzIC0gMV0gPSBVSW50MTZHZXRE YXR1bShsaXN0X2xlbmd0aChwYXJhbWV0ZXJEZWZhdWx0cykpOwogCXZhbHVlc1tBbnVtX3Bn X3Byb2NfcHJvcmV0dHlwZSAtIDFdID0gT2JqZWN0SWRHZXREYXR1bShyZXR1cm5UeXBlKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dCBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dAppbmRleCBjYWE5NzFjNDM1Li4z YmNlMDMxZmE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJl cy50eHQKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMudHh0CkBAIC00 ODQsNyArNDg0LDcgQEAgVDQzMwlNdWx0aWFyZ3VtZW50IEdST1VQSU5HIGZ1bmN0aW9uCQkJ WUVTCiBUNDM0CUdST1VQIEJZIERJU1RJTkNUCQkJTk8JCiBUNDQxCUFCUyBhbmQgTU9EIGZ1 bmN0aW9ucwkJCVlFUwkKIFQ0NjEJU3ltbWV0cmljIEJFVFdFRU4gcHJlZGljYXRlCQkJWUVT CQotVDQ3MQlSZXN1bHQgc2V0cyByZXR1cm4gdmFsdWUJCQlOTwkKK1Q0NzEJUmVzdWx0IHNl dHMgcmV0dXJuIHZhbHVlCQkJTk8JcGFydGlhbGx5IHN1cHBvcnRlZAogVDQ3MglERVNDUklC RSBDVVJTT1IJCQlOTwkKIFQ0OTEJTEFURVJBTCBkZXJpdmVkIHRhYmxlCQkJWUVTCQogVDQ5 NQlDb21iaW5lZCBkYXRhIGNoYW5nZSBhbmQgcmV0cmlldmFsCQkJTk8JZGlmZmVyZW50IHN5 bnRheApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZnVuY3Rpb25jbWRzLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9mdW5jdGlvbmNtZHMuYwppbmRleCBjM2NlNDgwYzhm Li4zZWE0YzVjMDRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9mdW5jdGlv bmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9mdW5jdGlvbmNtZHMuYwpAQCAt NjgsNiArNjgsNyBAQAogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgogI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAi dXRpbHMvcG9ydGFsLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRp bHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgpAQCAtNDc4LDcg KzQ3OSw4IEBAIGNvbXB1dGVfY29tbW9uX2F0dHJpYnV0ZShQYXJzZVN0YXRlICpwc3RhdGUs CiAJCQkJCQkgRGVmRWxlbSAqKmNvc3RfaXRlbSwKIAkJCQkJCSBEZWZFbGVtICoqcm93c19p dGVtLAogCQkJCQkJIERlZkVsZW0gKipzdXBwb3J0X2l0ZW0sCi0JCQkJCQkgRGVmRWxlbSAq KnBhcmFsbGVsX2l0ZW0pCisJCQkJCQkgRGVmRWxlbSAqKnBhcmFsbGVsX2l0ZW0sCisJCQkJ CQkgRGVmRWxlbSAqKmR5bnJlc19pdGVtKQogewogCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5h bWUsICJ2b2xhdGlsaXR5IikgPT0gMCkKIAl7CkBAIC01NTQsNiArNTU2LDE1IEBAIGNvbXB1 dGVfY29tbW9uX2F0dHJpYnV0ZShQYXJzZVN0YXRlICpwc3RhdGUsCiAKIAkJKnBhcmFsbGVs X2l0ZW0gPSBkZWZlbDsKIAl9CisJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAi ZHluYW1pY19yZXN1bHRfc2V0cyIpID09IDApCisJeworCQlpZiAoIWlzX3Byb2NlZHVyZSkK KwkJCWdvdG8gZnVuY3Rpb25fZXJyb3I7CisJCWlmICgqZHlucmVzX2l0ZW0pCisJCQlnb3Rv IGR1cGxpY2F0ZV9lcnJvcjsKKworCQkqZHlucmVzX2l0ZW0gPSBkZWZlbDsKKwl9CiAJZWxz ZQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTU2Nyw2ICs1NzgsMTMgQEAgY29tcHV0ZV9jb21t b25fYXR0cmlidXRlKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCSBwYXJzZXJfZXJycG9zaXRp b24ocHN0YXRlLCBkZWZlbC0+bG9jYXRpb24pKSk7CiAJcmV0dXJuIGZhbHNlOwkJCQkvKiBr ZWVwIGNvbXBpbGVyIHF1aWV0ICovCiAKK2Z1bmN0aW9uX2Vycm9yOgorCWVyZXBvcnQoRVJS T1IsCisJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfRlVOQ1RJT05fREVGSU5JVElPTiks CisJCQkgZXJybXNnKCJpbnZhbGlkIGF0dHJpYnV0ZSBpbiBmdW5jdGlvbiBkZWZpbml0aW9u IiksCisJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZGVmZWwtPmxvY2F0aW9uKSkp OworCXJldHVybiBmYWxzZTsKKwogcHJvY2VkdXJlX2Vycm9yOgogCWVyZXBvcnQoRVJST1Is CiAJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfRlVOQ1RJT05fREVGSU5JVElPTiksCkBA IC03MDMsNyArNzIxLDggQEAgY29tcHV0ZV9mdW5jdGlvbl9hdHRyaWJ1dGVzKFBhcnNlU3Rh dGUgKnBzdGF0ZSwKIAkJCQkJCQlmbG9hdDQgKnByb2Nvc3QsCiAJCQkJCQkJZmxvYXQ0ICpw cm9yb3dzLAogCQkJCQkJCU9pZCAqcHJvc3VwcG9ydCwKLQkJCQkJCQljaGFyICpwYXJhbGxl bF9wKQorCQkJCQkJCWNoYXIgKnBhcmFsbGVsX3AsCisJCQkJCQkJaW50ICpkeW5yZXNfcCkK IHsKIAlMaXN0Q2VsbCAgICpvcHRpb247CiAJRGVmRWxlbSAgICAqYXNfaXRlbSA9IE5VTEw7 CkBAIC03MTksNiArNzM4LDcgQEAgY29tcHV0ZV9mdW5jdGlvbl9hdHRyaWJ1dGVzKFBhcnNl U3RhdGUgKnBzdGF0ZSwKIAlEZWZFbGVtICAgICpyb3dzX2l0ZW0gPSBOVUxMOwogCURlZkVs ZW0gICAgKnN1cHBvcnRfaXRlbSA9IE5VTEw7CiAJRGVmRWxlbSAgICAqcGFyYWxsZWxfaXRl bSA9IE5VTEw7CisJRGVmRWxlbSAgICAqZHlucmVzX2l0ZW0gPSBOVUxMOwogCiAJZm9yZWFj aChvcHRpb24sIG9wdGlvbnMpCiAJewpAQCAtNzc2LDcgKzc5Niw4IEBAIGNvbXB1dGVfZnVu Y3Rpb25fYXR0cmlidXRlcyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkJICAmY29z dF9pdGVtLAogCQkJCQkJCQkJCSAgJnJvd3NfaXRlbSwKIAkJCQkJCQkJCQkgICZzdXBwb3J0 X2l0ZW0sCi0JCQkJCQkJCQkJICAmcGFyYWxsZWxfaXRlbSkpCisJCQkJCQkJCQkJICAmcGFy YWxsZWxfaXRlbSwKKwkJCQkJCQkJCQkgICZkeW5yZXNfaXRlbSkpCiAJCXsKIAkJCS8qIHJl Y29nbml6ZWQgY29tbW9uIG9wdGlvbiAqLwogCQkJY29udGludWU7CkBAIC04NDIsNiArODYz LDExIEBAIGNvbXB1dGVfZnVuY3Rpb25fYXR0cmlidXRlcyhQYXJzZVN0YXRlICpwc3RhdGUs CiAJCSpwcm9zdXBwb3J0ID0gaW50ZXJwcmV0X2Z1bmNfc3VwcG9ydChzdXBwb3J0X2l0ZW0p OwogCWlmIChwYXJhbGxlbF9pdGVtKQogCQkqcGFyYWxsZWxfcCA9IGludGVycHJldF9mdW5j X3BhcmFsbGVsKHBhcmFsbGVsX2l0ZW0pOworCWlmIChkeW5yZXNfaXRlbSkKKwl7CisJCSpk eW5yZXNfcCA9IGludFZhbChkeW5yZXNfaXRlbS0+YXJnKTsKKwkJQXNzZXJ0KCpkeW5yZXNf cCA+PSAwKTsJLyogZW5mb3JjZWQgYnkgcGFyc2VyICovCisJfQogfQogCiAKQEAgLTk1MCw2 ICs5NzYsNyBAQCBDcmVhdGVGdW5jdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZUZ1 bmN0aW9uU3RtdCAqc3RtdCkKIAlGb3JtX3BnX2xhbmd1YWdlIGxhbmd1YWdlU3RydWN0Owog CUxpc3QJICAgKmFzX2NsYXVzZTsKIAljaGFyCQlwYXJhbGxlbDsKKwlpbnQJCQlkeW5yZXM7 CiAKIAkvKiBDb252ZXJ0IGxpc3Qgb2YgbmFtZXMgdG8gYSBuYW1lIGFuZCBuYW1lc3BhY2Ug Ki8KIAluYW1lc3BhY2VJZCA9IFF1YWxpZmllZE5hbWVHZXRDcmVhdGlvbk5hbWVzcGFjZShz dG10LT5mdW5jbmFtZSwKQEAgLTk3Miw2ICs5OTksNyBAQCBDcmVhdGVGdW5jdGlvbihQYXJz ZVN0YXRlICpwc3RhdGUsIENyZWF0ZUZ1bmN0aW9uU3RtdCAqc3RtdCkKIAlwcm9yb3dzID0g LTE7CQkJCS8qIGluZGljYXRlcyBub3Qgc2V0ICovCiAJcHJvc3VwcG9ydCA9IEludmFsaWRP aWQ7CiAJcGFyYWxsZWwgPSBQUk9QQVJBTExFTF9VTlNBRkU7CisJZHlucmVzID0gMDsKIAog CS8qIEV4dHJhY3Qgbm9uLWRlZmF1bHQgYXR0cmlidXRlcyBmcm9tIHN0bXQtPm9wdGlvbnMg bGlzdCAqLwogCWNvbXB1dGVfZnVuY3Rpb25fYXR0cmlidXRlcyhwc3RhdGUsCkBAIC05ODEs NyArMTAwOSw3IEBAIENyZWF0ZUZ1bmN0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRl RnVuY3Rpb25TdG10ICpzdG10KQogCQkJCQkJCQkmaXNXaW5kb3dGdW5jLCAmdm9sYXRpbGl0 eSwKIAkJCQkJCQkJJmlzU3RyaWN0LCAmc2VjdXJpdHksICZpc0xlYWtQcm9vZiwKIAkJCQkJ CQkJJnByb2NvbmZpZywgJnByb2Nvc3QsICZwcm9yb3dzLAotCQkJCQkJCQkmcHJvc3VwcG9y dCwgJnBhcmFsbGVsKTsKKwkJCQkJCQkJJnByb3N1cHBvcnQsICZwYXJhbGxlbCwgJmR5bnJl cyk7CiAKIAkvKiBMb29rIHVwIHRoZSBsYW5ndWFnZSBhbmQgdmFsaWRhdGUgcGVybWlzc2lv bnMgKi8KIAlsYW5ndWFnZVR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdOQU1FLCBQb2lu dGVyR2V0RGF0dW0obGFuZ3VhZ2UpKTsKQEAgLTExNzAsNyArMTE5OCw4IEBAIENyZWF0ZUZ1 bmN0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlRnVuY3Rpb25TdG10ICpzdG10KQog CQkJCQkJICAgUG9pbnRlckdldERhdHVtKHByb2NvbmZpZyksCiAJCQkJCQkgICBwcm9zdXBw b3J0LAogCQkJCQkJICAgcHJvY29zdCwKLQkJCQkJCSAgIHByb3Jvd3MpOworCQkJCQkJICAg cHJvcm93cywKKwkJCQkJCSAgIGR5bnJlcyk7CiB9CiAKIC8qCkBAIC0xMjQ1LDYgKzEyNzQs NyBAQCBBbHRlckZ1bmN0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJGdW5jdGlvblN0 bXQgKnN0bXQpCiAJRGVmRWxlbSAgICAqcm93c19pdGVtID0gTlVMTDsKIAlEZWZFbGVtICAg ICpzdXBwb3J0X2l0ZW0gPSBOVUxMOwogCURlZkVsZW0gICAgKnBhcmFsbGVsX2l0ZW0gPSBO VUxMOworCURlZkVsZW0gICAgKmR5bnJlc19pdGVtID0gTlVMTDsKIAlPYmplY3RBZGRyZXNz IGFkZHJlc3M7CiAKIAlyZWwgPSB0YWJsZV9vcGVuKFByb2NlZHVyZVJlbGF0aW9uSWQsIFJv d0V4Y2x1c2l2ZUxvY2spOwpAQCAtMTI4OCw3ICsxMzE4LDggQEAgQWx0ZXJGdW5jdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyRnVuY3Rpb25TdG10ICpzdG10KQogCQkJCQkJCQkJ ICZjb3N0X2l0ZW0sCiAJCQkJCQkJCQkgJnJvd3NfaXRlbSwKIAkJCQkJCQkJCSAmc3VwcG9y dF9pdGVtLAotCQkJCQkJCQkJICZwYXJhbGxlbF9pdGVtKSA9PSBmYWxzZSkKKwkJCQkJCQkJ CSAmcGFyYWxsZWxfaXRlbSwKKwkJCQkJCQkJCSAmZHlucmVzX2l0ZW0pID09IGZhbHNlKQog CQkJZWxvZyhFUlJPUiwgIm9wdGlvbiBcIiVzXCIgbm90IHJlY29nbml6ZWQiLCBkZWZlbC0+ ZGVmbmFtZSk7CiAJfQogCkBAIC0xMzg0LDYgKzE0MTUsOCBAQCBBbHRlckZ1bmN0aW9uKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJGdW5jdGlvblN0bXQgKnN0bXQpCiAJfQogCWlmIChw YXJhbGxlbF9pdGVtKQogCQlwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPSBpbnRlcnByZXRfZnVu Y19wYXJhbGxlbChwYXJhbGxlbF9pdGVtKTsKKwlpZiAoZHlucmVzX2l0ZW0pCisJCXByb2NG b3JtLT5wcm9keW5yZXMgPSBpbnRWYWwoZHlucmVzX2l0ZW0tPmFyZyk7CiAKIAkvKiBEbyB0 aGUgdXBkYXRlICovCiAJQ2F0YWxvZ1R1cGxlVXBkYXRlKHJlbCwgJnR1cC0+dF9zZWxmLCB0 dXApOwpAQCAtMjAyNiw2ICsyMDU5LDI0IEBAIEV4ZWN1dGVEb1N0bXQoRG9TdG10ICpzdG10 LCBib29sIGF0b21pYykKIAlPaWRGdW5jdGlvbkNhbGwxKGxhbmlubGluZSwgUG9pbnRlckdl dERhdHVtKGNvZGVibG9jaykpOwogfQogCitzdGF0aWMgTGlzdCAqcHJvY2VkdXJlX3N0YWNr OworCitPaWQKK0N1cnJlbnRQcm9jZWR1cmUodm9pZCkKK3sKKwlpZiAoIXByb2NlZHVyZV9z dGFjaykKKwkJcmV0dXJuIEludmFsaWRPaWQ7CisJZWxzZQorCQlyZXR1cm4gbGxhc3Rfb2lk KHByb2NlZHVyZV9zdGFjayk7Cit9CisKK3ZvaWQKK1Byb2NlZHVyZUNhbGxzQ2xlYW51cCh2 b2lkKQoreworCWxpc3RfZnJlZShwcm9jZWR1cmVfc3RhY2spOworCXByb2NlZHVyZV9zdGFj ayA9IE5JTDsKK30KKwogLyoKICAqIEV4ZWN1dGUgQ0FMTCBzdGF0ZW1lbnQKICAqCkBAIC0y MDY4LDYgKzIxMTksNyBAQCBFeGVjdXRlQ2FsbFN0bXQoQ2FsbFN0bXQgKnN0bXQsIFBhcmFt TGlzdEluZm8gcGFyYW1zLCBib29sIGF0b21pYywgRGVzdFJlY2VpdmVyCiAJY2hhcgkgICAq YXJnbW9kZXM7CiAJRm1nckluZm8JZmxpbmZvOwogCUNhbGxDb250ZXh0ICpjYWxsY29udGV4 dDsKKwlpbnQJCQlwcm9keW5yZXM7CiAJRVN0YXRlCSAgICplc3RhdGU7CiAJRXhwckNvbnRl eHQgKmVjb250ZXh0OwogCUhlYXBUdXBsZQl0cDsKQEAgLTIxMDgsNiArMjE2MCw4IEBAIEV4 ZWN1dGVDYWxsU3RtdChDYWxsU3RtdCAqc3RtdCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsIGJv b2wgYXRvbWljLCBEZXN0UmVjZWl2ZXIKIAlpZiAoKChGb3JtX3BnX3Byb2MpIEdFVFNUUlVD VCh0cCkpLT5wcm9zZWNkZWYpCiAJCWNhbGxjb250ZXh0LT5hdG9taWMgPSB0cnVlOwogCisJ cHJvZHlucmVzID0gKChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVCh0cCkpLT5wcm9keW5yZXM7 CisKIAkvKgogCSAqIEV4cGFuZCBuYW1lZCBhcmd1bWVudHMsIGRlZmF1bHRzLCBldGMuICBX ZSBkbyBub3Qgd2FudCB0byBzY3JpYmJsZSBvbgogCSAqIHRoZSBwYXNzZWQtaW4gQ2FsbFN0 bXQgcGFyc2UgdHJlZSwgc28gZmlyc3QgZmxhdC1jb3B5IGZleHByLCBhbGxvd2luZwpAQCAt MjE3OSw5ICsyMjMzLDExIEBAIEV4ZWN1dGVDYWxsU3RtdChDYWxsU3RtdCAqc3RtdCwgUGFy YW1MaXN0SW5mbyBwYXJhbXMsIGJvb2wgYXRvbWljLCBEZXN0UmVjZWl2ZXIKIAkJaSsrOwog CX0KIAorCXByb2NlZHVyZV9zdGFjayA9IGxhcHBlbmRfb2lkKHByb2NlZHVyZV9zdGFjaywg ZmV4cHItPmZ1bmNpZCk7CiAJcGdzdGF0X2luaXRfZnVuY3Rpb25fdXNhZ2UoZmNpbmZvLCAm ZmN1c2FnZSk7CiAJcmV0dmFsID0gRnVuY3Rpb25DYWxsSW52b2tlKGZjaW5mbyk7CiAJcGdz dGF0X2VuZF9mdW5jdGlvbl91c2FnZSgmZmN1c2FnZSwgdHJ1ZSk7CisJcHJvY2VkdXJlX3N0 YWNrID0gbGlzdF9kZWxldGVfbGFzdChwcm9jZWR1cmVfc3RhY2spOwogCiAJaWYgKGZleHBy LT5mdW5jcmVzdWx0dHlwZSA9PSBWT0lET0lEKQogCXsKQEAgLTIyMjksNiArMjI4NSwxMyBA QCBFeGVjdXRlQ2FsbFN0bXQoQ2FsbFN0bXQgKnN0bXQsIFBhcmFtTGlzdEluZm8gcGFyYW1z LCBib29sIGF0b21pYywgRGVzdFJlY2VpdmVyCiAJCQkgZmV4cHItPmZ1bmNyZXN1bHR0eXBl KTsKIAogCUZyZWVFeGVjdXRvclN0YXRlKGVzdGF0ZSk7CisKKwlDbG9zZU90aGVyUmV0dXJu YWJsZUN1cnNvcnMoZmV4cHItPmZ1bmNpZCk7CisKKwlpZiAobGlzdF9sZW5ndGgoR2V0UmV0 dXJuYWJsZUN1cnNvcnMoKSkgPiBwcm9keW5yZXMpCisJCWVyZXBvcnQoV0FSTklORywKKwkJ CQllcnJjb2RlKEVSUkNPREVfV0FSTklOR19BVFRFTVBUX1RPX1JFVFVSTl9UT09fTUFOWV9S RVNVTFRfU0VUUyksCisJCQkJZXJybXNnKCJhdHRlbXB0IHRvIHJldHVybiB0b28gbWFueSBy ZXN1bHQgc2V0cyIpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3BvcnRhbGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYwpp bmRleCAwYjY0MjA0OTc1Li5iNTU2MmY1YTI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9wb3J0YWxjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFs Y21kcy5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKICNpbmNs dWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgogI2lu Y2x1ZGUgImNvbW1hbmRzL3BvcnRhbGNtZHMuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVj dXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL3RzdG9yZVJlY2VpdmVyLmgiCkBAIC0xNDYs NiArMTQ3LDI4IEBAIFBlcmZvcm1DdXJzb3JPcGVuKFBhcnNlU3RhdGUgKnBzdGF0ZSwgRGVj bGFyZUN1cnNvclN0bXQgKmNzdG10LCBQYXJhbUxpc3RJbmZvIHBhCiAJCQlwb3J0YWwtPmN1 cnNvck9wdGlvbnMgfD0gQ1VSU09SX09QVF9OT19TQ1JPTEw7CiAJfQogCisJLyoKKwkgKiBG b3IgcmV0dXJuYWJsZSBjdXJzb3JzLCByZW1lbWJlciB0aGUgY3VycmVudGx5IGFjdGl2ZSBw cm9jZWR1cmUsIGFzCisJICogd2VsbCBhcyB0aGUgY29tbWFuZCBJRCwgc28gd2UgY2FuIHNv cnQgYnkgY3JlYXRpb24gb3JkZXIgbGF0ZXIuICBJZgorCSAqIHRoZXJlIGlzIG5vIHByb2Nl ZHVyZSBhY3RpdmUsIHRoZSBjdXJzb3IgaXMgbWFya2VkIGFzIFdJVEhPVVQgUkVUVVJOLgor CSAqIChUaGlzIGlzIG5vdCBhbiBlcnJvciwgcGVyIFNRTCBzdGFuZGFyZCwgc3ViY2xhdXNl ICJFZmZlY3Qgb2Ygb3BlbmluZyBhCisJICogY3Vyc29yIi4pCisJICovCisJaWYgKHBvcnRh bC0+Y3Vyc29yT3B0aW9ucyAmIENVUlNPUl9PUFRfUkVUVVJOKQorCXsKKwkJT2lkCQkJcHJv Y0lkID0gQ3VycmVudFByb2NlZHVyZSgpOworCisJCWlmIChwcm9jSWQpCisJCXsKKwkJCXBv cnRhbC0+cHJvY0lkID0gcHJvY0lkOworCQkJcG9ydGFsLT5jcmVhdGVDaWQgPSBHZXRDdXJy ZW50Q29tbWFuZElkKHRydWUpOworCQl9CisJCWVsc2UKKwkJeworCQkJcG9ydGFsLT5jdXJz b3JPcHRpb25zICY9IH5DVVJTT1JfT1BUX1JFVFVSTjsKKwkJfQorCX0KKwogCS8qCiAJICog U3RhcnQgZXhlY3V0aW9uLCBpbnNlcnRpbmcgcGFyYW1ldGVycyBpZiBhbnkuCiAJICovCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90eXBlY21kcy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdHlwZWNtZHMuYwppbmRleCBhMGE4Njk1YjFiLi5iMWM5MDQyOWUyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90eXBlY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3R5cGVjbWRzLmMKQEAgLTE3OTAsNyArMTc5MCw4IEBAIG1ha2VS YW5nZUNvbnN0cnVjdG9ycyhjb25zdCBjaGFyICpuYW1lLCBPaWQgbmFtZXNwYWNlLAogCQkJ CQkJCQkgUG9pbnRlckdldERhdHVtKE5VTEwpLCAvKiBwcm9jb25maWcgKi8KIAkJCQkJCQkJ IEludmFsaWRPaWQsCS8qIHByb3N1cHBvcnQgKi8KIAkJCQkJCQkJIDEuMCwJLyogcHJvY29z dCAqLwotCQkJCQkJCQkgMC4wKTsJLyogcHJvcm93cyAqLworCQkJCQkJCQkgMC4wLAkvKiBw cm9yb3dzICovCisJCQkJCQkJCSAwKTsJLyogcHJvZHlucmVzICovCiAKIAkJLyoKIAkJICog TWFrZSB0aGUgY29uc3RydWN0b3JzIGludGVybmFsbHktZGVwZW5kZW50IG9uIHRoZSByYW5n ZSB0eXBlIHNvCkBAIC0xODU0LDcgKzE4NTUsOCBAQCBtYWtlTXVsdGlyYW5nZUNvbnN0cnVj dG9ycyhjb25zdCBjaGFyICpuYW1lLCBPaWQgbmFtZXNwYWNlLAogCQkJCQkJCSBQb2ludGVy R2V0RGF0dW0oTlVMTCksIC8qIHByb2NvbmZpZyAqLwogCQkJCQkJCSBJbnZhbGlkT2lkLAkv KiBwcm9zdXBwb3J0ICovCiAJCQkJCQkJIDEuMCwJLyogcHJvY29zdCAqLwotCQkJCQkJCSAw LjApOwkvKiBwcm9yb3dzICovCisJCQkJCQkJIDAuMCwJLyogcHJvcm93cyAqLworCQkJCQkJ CSAwKTsJLyogcHJvZHlucmVzICovCiAKIAkvKgogCSAqIE1ha2UgdGhlIGNvbnN0cnVjdG9y IGludGVybmFsbHktZGVwZW5kZW50IG9uIHRoZSBtdWx0aXJhbmdlIHR5cGUgc28KQEAgLTE4 OTcsNyArMTg5OSw4IEBAIG1ha2VNdWx0aXJhbmdlQ29uc3RydWN0b3JzKGNvbnN0IGNoYXIg Km5hbWUsIE9pZCBuYW1lc3BhY2UsCiAJCQkJCQkJIFBvaW50ZXJHZXREYXR1bShOVUxMKSwg LyogcHJvY29uZmlnICovCiAJCQkJCQkJIEludmFsaWRPaWQsCS8qIHByb3N1cHBvcnQgKi8K IAkJCQkJCQkgMS4wLAkvKiBwcm9jb3N0ICovCi0JCQkJCQkJIDAuMCk7CS8qIHByb3Jvd3Mg Ki8KKwkJCQkJCQkgMC4wLAkvKiBwcm9yb3dzICovCisJCQkJCQkJIDApOwkvKiBwcm9keW5y ZXMgKi8KIAkvKiBkaXR0byAqLwogCXJlY29yZERlcGVuZGVuY3lPbigmbXlzZWxmLCAmcmVm ZXJlbmNlZCwgREVQRU5ERU5DWV9JTlRFUk5BTCk7CiAJcGZyZWUoYXJndHlwZXMpOwpAQCAt MTkzNyw3ICsxOTQwLDggQEAgbWFrZU11bHRpcmFuZ2VDb25zdHJ1Y3RvcnMoY29uc3QgY2hh ciAqbmFtZSwgT2lkIG5hbWVzcGFjZSwKIAkJCQkJCQkgUG9pbnRlckdldERhdHVtKE5VTEwp LCAvKiBwcm9jb25maWcgKi8KIAkJCQkJCQkgSW52YWxpZE9pZCwJLyogcHJvc3VwcG9ydCAq LwogCQkJCQkJCSAxLjAsCS8qIHByb2Nvc3QgKi8KLQkJCQkJCQkgMC4wKTsJLyogcHJvcm93 cyAqLworCQkJCQkJCSAwLjAsCS8qIHByb3Jvd3MgKi8KKwkJCQkJCQkgMCk7CS8qIHByb2R5 bnJlcyAqLwogCS8qIGRpdHRvICovCiAJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNlbGYsICZy ZWZlcmVuY2VkLCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKIAlwZnJlZShhcmd0eXBlcyk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFy c2VyL2dyYW0ueQppbmRleCA4ZjM0MWFjMDA2Li4zYzlkZWIzOTdkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkKQEAgLTYzNyw3ICs2MzcsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdT ZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCURB VEFfUCBEQVRBQkFTRSBEQVlfUCBERUFMTE9DQVRFIERFQyBERUNJTUFMX1AgREVDTEFSRSBE RUZBVUxUIERFRkFVTFRTCiAJREVGRVJSQUJMRSBERUZFUlJFRCBERUZJTkVSIERFTEVURV9Q IERFTElNSVRFUiBERUxJTUlURVJTIERFUEVORFMgREVTQwogCURFVEFDSCBESUNUSU9OQVJZ IERJU0FCTEVfUCBESVNDQVJEIERJU1RJTkNUIERPIERPQ1VNRU5UX1AgRE9NQUlOX1AKLQlE T1VCTEVfUCBEUk9QCisJRE9VQkxFX1AgRFJPUCBEWU5BTUlDCiAKIAlFQUNIIEVMU0UgRU5B QkxFX1AgRU5DT0RJTkcgRU5DUllQVEVEIEVORF9QIEVOVU1fUCBFU0NBUEUgRVZFTlQgRVhD RVBUCiAJRVhDTFVERSBFWENMVURJTkcgRVhDTFVTSVZFIEVYRUNVVEUgRVhJU1RTIEVYUExB SU4gRVhQUkVTU0lPTgpAQCAtNjgyLDcgKzY4Miw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpx dWVyeSk7CiAKIAlSQU5HRSBSRUFEIFJFQUwgUkVBU1NJR04gUkVDSEVDSyBSRUNVUlNJVkUg UkVGIFJFRkVSRU5DRVMgUkVGRVJFTkNJTkcKIAlSRUZSRVNIIFJFSU5ERVggUkVMQVRJVkVf UCBSRUxFQVNFIFJFTkFNRSBSRVBFQVRBQkxFIFJFUExBQ0UgUkVQTElDQQotCVJFU0VUIFJF U1RBUlQgUkVTVFJJQ1QgUkVUVVJOSU5HIFJFVFVSTlMgUkVWT0tFIFJJR0hUIFJPTEUgUk9M TEJBQ0sgUk9MTFVQCisJUkVTRVQgUkVTVEFSVCBSRVNUUklDVCBSRVNVTFQgUkVUVVJOIFJF VFVSTklORyBSRVRVUk5TIFJFVk9LRSBSSUdIVCBST0xFIFJPTExCQUNLIFJPTExVUAogCVJP VVRJTkUgUk9VVElORVMgUk9XIFJPV1MgUlVMRQogCiAJU0FWRVBPSU5UIFNDSEVNQSBTQ0hF TUFTIFNDUk9MTCBTRUFSQ0ggU0VDT05EX1AgU0VDVVJJVFkgU0VMRUNUIFNFUVVFTkNFIFNF UVVFTkNFUwpAQCAtNzc4MCw2ICs3NzgwLDEwIEBAIGNvbW1vbl9mdW5jX29wdF9pdGVtOgog CQkJCXsKIAkJCQkJJCQgPSBtYWtlRGVmRWxlbSgicGFyYWxsZWwiLCAoTm9kZSAqKW1ha2VT dHJpbmcoJDIpLCBAMSk7CiAJCQkJfQorCQkJfCBEWU5BTUlDIFJFU1VMVCBTRVRTIEljb25z dAorCQkJCXsKKwkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiZHluYW1pY19yZXN1bHRfc2V0cyIs IChOb2RlICopbWFrZUludGVnZXIoJDQpLCBAMSk7CisJCQkJfQogCQk7CiAKIGNyZWF0ZWZ1 bmNfb3B0X2l0ZW06CkBAIC0xMTA3MSw2ICsxMTA3NSwxMiBAQCBjdXJzb3Jfb3B0aW9uczog LypFTVBUWSovCQkJCQl7ICQkID0gMDsgfQogb3B0X2hvbGQ6IC8qIEVNUFRZICovCQkJCQkJ eyAkJCA9IDA7IH0KIAkJCXwgV0lUSCBIT0xECQkJCQkJeyAkJCA9IENVUlNPUl9PUFRfSE9M RDsgfQogCQkJfCBXSVRIT1VUIEhPTEQJCQkJCXsgJCQgPSAwOyB9CisJCQl8IFdJVEggSE9M RCBXSVRIIFJFVFVSTgkJCXsgJCQgPSBDVVJTT1JfT1BUX0hPTEQgfCBDVVJTT1JfT1BUX1JF VFVSTjsgfQorCQkJfCBXSVRIT1VUIEhPTEQgV0lUSCBSRVRVUk4JCXsgJCQgPSBDVVJTT1Jf T1BUX1JFVFVSTjsgfQorCQkJfCBXSVRIIEhPTEQgV0lUSE9VVCBSRVRVUk4JCXsgJCQgPSBD VVJTT1JfT1BUX0hPTEQ7IH0KKwkJCXwgV0lUSE9VVCBIT0xEIFdJVEhPVVQgUkVUVVJOCXsg JCQgPSAwOyB9CisJCQl8IFdJVEggUkVUVVJOCQkJCQl7ICQkID0gQ1VSU09SX09QVF9SRVRV Uk47IH0KKwkJCXwgV0lUSE9VVCBSRVRVUk4JCQkJeyAkJCA9IDA7IH0KIAkJOwogCiAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKQEAgLTE1MTQ0LDYgKzE1MTU0LDcgQEAgdW5yZXNlcnZl ZF9rZXl3b3JkOgogCQkJfCBET01BSU5fUAogCQkJfCBET1VCTEVfUAogCQkJfCBEUk9QCisJ CQl8IERZTkFNSUMKIAkJCXwgRUFDSAogCQkJfCBFTkFCTEVfUAogCQkJfCBFTkNPRElORwpA QCAtMTUyODUsNiArMTUyOTYsOCBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFJFU0VU CiAJCQl8IFJFU1RBUlQKIAkJCXwgUkVTVFJJQ1QKKwkJCXwgUkVTVUxUCisJCQl8IFJFVFVS TgogCQkJfCBSRVRVUk5TCiAJCQl8IFJFVk9LRQogCQkJfCBST0xFCkBAIC0xNTY3OCw2ICsx NTY5MSw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgRE9NQUlOX1AKIAkJCXwgRE9V QkxFX1AKIAkJCXwgRFJPUAorCQkJfCBEWU5BTUlDCiAJCQl8IEVBQ0gKIAkJCXwgRUxTRQog CQkJfCBFTkFCTEVfUApAQCAtMTU4NjEsNiArMTU4NzUsOCBAQCBiYXJlX2xhYmVsX2tleXdv cmQ6CiAJCQl8IFJFU0VUCiAJCQl8IFJFU1RBUlQKIAkJCXwgUkVTVFJJQ1QKKwkJCXwgUkVT VUxUCisJCQl8IFJFVFVSTgogCQkJfCBSRVRVUk5TCiAJCQl8IFJFVk9LRQogCQkJfCBSSUdI VApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tl bmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IGQzNWM1MDIwZWEuLjk2MWEyODk4OTcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGFj dC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRz L2FzeW5jLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvcHJlcGFyZS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL3NwaS5oIgogI2luY2x1ZGUg ImppdC9qaXQuaCIKQEAgLTEwNzYsNiArMTA3Nyw3IEBAIGV4ZWNfc2ltcGxlX3F1ZXJ5KGNv bnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkJUG9ydGFsCQlwb3J0YWw7CiAJCURlc3RSZWNl aXZlciAqcmVjZWl2ZXI7CiAJCWludDE2CQlmb3JtYXQ7CisJCUxpc3RDZWxsICAgKmxjOwog CiAJCS8qCiAJCSAqIEdldCB0aGUgY29tbWFuZCBuYW1lIGZvciB1c2UgaW4gc3RhdHVzIGRp c3BsYXkgKGl0IGFsc28gYmVjb21lcyB0aGUKQEAgLTEyMzUsNyArMTIzNyw3IEBAIGV4ZWNf c2ltcGxlX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCiAJCS8qCi0JCSAqIFJ1biB0aGUgcG9ydGFsIHRv IGNvbXBsZXRpb24sIGFuZCB0aGVuIGRyb3AgaXQgKGFuZCB0aGUgcmVjZWl2ZXIpLgorCQkg KiBSdW4gdGhlIHBvcnRhbCB0byBjb21wbGV0aW9uLCBhbmQgdGhlbiBkcm9wIGl0LgogCQkg Ki8KIAkJKHZvaWQpIFBvcnRhbFJ1bihwb3J0YWwsCiAJCQkJCQkgRkVUQ0hfQUxMLApAQCAt MTI0NSwxMCArMTI0NywzNCBAQCBleGVjX3NpbXBsZV9xdWVyeShjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcpCiAJCQkJCQkgcmVjZWl2ZXIsCiAJCQkJCQkgJnFjKTsKIAotCQlyZWNlaXZl ci0+ckRlc3Ryb3kocmVjZWl2ZXIpOwotCiAJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7 CiAKKwkJLyoKKwkJICogUnVuIHBvcnRhbHMgZm9yIGR5bmFtaWMgcmVzdWx0IHNldHMuCisJ CSAqLworCQlmb3JlYWNoIChsYywgR2V0UmV0dXJuYWJsZUN1cnNvcnMoKSkKKwkJeworCQkJ UG9ydGFsIHBvcnRhbCA9IGxmaXJzdChsYyk7CisKKwkJCWlmIChkZXN0ID09IERlc3RSZW1v dGUpCisJCQkJU2V0UmVtb3RlRGVzdFJlY2VpdmVyUGFyYW1zKHJlY2VpdmVyLCBwb3J0YWwp OworCisJCQlQb3J0YWxSdW4ocG9ydGFsLAorCQkJCQkgIEZFVENIX0FMTCwKKwkJCQkJICB0 cnVlLAorCQkJCQkgIHRydWUsCisJCQkJCSAgcmVjZWl2ZXIsCisJCQkJCSAgcmVjZWl2ZXIs CisJCQkJCSAgTlVMTCk7CisKKwkJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CisJCX0K KworCQkvKgorCQkgKiBEcm9wIHRoZSByZWNlaXZlci4KKwkJICovCisJCXJlY2VpdmVyLT5y RGVzdHJveShyZWNlaXZlcik7CisKIAkJaWYgKGxuZXh0KHBhcnNldHJlZV9saXN0LCBwYXJz ZXRyZWVfaXRlbSkgPT0gTlVMTCkKIAkJewogCQkJLyoKQEAgLTIwNDksNiArMjA3NSw3IEBA IGV4ZWNfZXhlY3V0ZV9tZXNzYWdlKGNvbnN0IGNoYXIgKnBvcnRhbF9uYW1lLCBsb25nIG1h eF9yb3dzKQogCWNvbnN0IGNoYXIgKnNvdXJjZVRleHQ7CiAJY29uc3QgY2hhciAqcHJlcFN0 bXROYW1lOwogCVBhcmFtTGlzdEluZm8gcG9ydGFsUGFyYW1zOworCUxpc3RDZWxsICAgKmxj OwogCWJvb2wJCXNhdmVfbG9nX3N0YXRlbWVudF9zdGF0cyA9IGxvZ19zdGF0ZW1lbnRfc3Rh dHM7CiAJYm9vbAkJaXNfeGFjdF9jb21tYW5kOwogCWJvb2wJCWV4ZWN1dGVfaXNfZmV0Y2g7 CkBAIC0yMjAxLDYgKzIyMjgsMzQgQEAgZXhlY19leGVjdXRlX21lc3NhZ2UoY29uc3QgY2hh ciAqcG9ydGFsX25hbWUsIGxvbmcgbWF4X3Jvd3MpCiAJCQkJCQkgIHJlY2VpdmVyLAogCQkJ CQkJICAmcWMpOwogCisJLyoKKwkgKiBSdW4gcG9ydGFscyBmb3IgZHluYW1pYyByZXN1bHQg c2V0cy4KKwkgKi8KKwlmb3JlYWNoIChsYywgR2V0UmV0dXJuYWJsZUN1cnNvcnMoKSkKKwl7 CisJCVBvcnRhbCBkeW5fcG9ydGFsID0gbGZpcnN0KGxjKTsKKworCQlpZiAoZGVzdCA9PSBE ZXN0UmVtb3RlKQorCQkJU2V0UmVtb3RlRGVzdFJlY2VpdmVyUGFyYW1zKHJlY2VpdmVyLCBk eW5fcG9ydGFsKTsKKworCQlQb3J0YWxTZXRSZXN1bHRGb3JtYXQoZHluX3BvcnRhbCwgMSwg JnBvcnRhbC0+ZHluYW1pY19mb3JtYXQpOworCisJCVNlbmRSb3dEZXNjcmlwdGlvbk1lc3Nh Z2UoJnJvd19kZXNjcmlwdGlvbl9idWYsCisJCQkJCQkJCSAgZHluX3BvcnRhbC0+dHVwRGVz YywKKwkJCQkJCQkJICBGZXRjaFBvcnRhbFRhcmdldExpc3QoZHluX3BvcnRhbCksCisJCQkJ CQkJCSAgZHluX3BvcnRhbC0+Zm9ybWF0cyk7CisKKwkJUG9ydGFsUnVuKGR5bl9wb3J0YWws CisJCQkJICBGRVRDSF9BTEwsCisJCQkJICB0cnVlLAorCQkJCSAgdHJ1ZSwKKwkJCQkgIHJl Y2VpdmVyLAorCQkJCSAgcmVjZWl2ZXIsCisJCQkJICBOVUxMKTsKKworCQlQb3J0YWxEcm9w KGR5bl9wb3J0YWwsIGZhbHNlKTsKKwl9CisKIAlyZWNlaXZlci0+ckRlc3Ryb3kocmVjZWl2 ZXIpOwogCiAJLyogRG9uZSBleGVjdXRpbmc7IHJlbW92ZSB0aGUgcGFyYW1zIGVycm9yIGNh bGxiYWNrICovCkBAIC00MTA4LDYgKzQxNjMsNyBAQCBQb3N0Z3Jlc01haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSwKIAogCQlQb3J0YWxFcnJvckNsZWFudXAoKTsKIAkJU1BJQ2xlYW51 cCgpOworCQlQcm9jZWR1cmVDYWxsc0NsZWFudXAoKTsKIAogCQkvKgogCQkgKiBXZSBjYW4n dCByZWxlYXNlIHJlcGxpY2F0aW9uIHNsb3RzIGluc2lkZSBBYm9ydFRyYW5zYWN0aW9uKCkg YXMgd2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMgYi9zcmMvYmFj a2VuZC90Y29wL3BxdWVyeS5jCmluZGV4IDk2ZWE3NGYxMTguLjZmYjE2MGY2MDQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNv cC9wcXVlcnkuYwpAQCAtNjI5LDYgKzYyOSw4IEBAIFBvcnRhbFNldFJlc3VsdEZvcm1hdChQ b3J0YWwgcG9ydGFsLCBpbnQgbkZvcm1hdHMsIGludDE2ICpmb3JtYXRzKQogCQkJCQkgZXJy bXNnKCJiaW5kIG1lc3NhZ2UgaGFzICVkIHJlc3VsdCBmb3JtYXRzIGJ1dCBxdWVyeSBoYXMg JWQgY29sdW1ucyIsCiAJCQkJCQkJbkZvcm1hdHMsIG5hdHRzKSkpOwogCQltZW1jcHkocG9y dGFsLT5mb3JtYXRzLCBmb3JtYXRzLCBuYXR0cyAqIHNpemVvZihpbnQxNikpOworCisJCXBv cnRhbC0+ZHluYW1pY19mb3JtYXQgPSAwOwogCX0KIAllbHNlIGlmIChuRm9ybWF0cyA+IDAp CiAJewpAQCAtNjM3LDEyICs2MzksMTYgQEAgUG9ydGFsU2V0UmVzdWx0Rm9ybWF0KFBvcnRh bCBwb3J0YWwsIGludCBuRm9ybWF0cywgaW50MTYgKmZvcm1hdHMpCiAKIAkJZm9yIChpID0g MDsgaSA8IG5hdHRzOyBpKyspCiAJCQlwb3J0YWwtPmZvcm1hdHNbaV0gPSBmb3JtYXQxOwor CisJCXBvcnRhbC0+ZHluYW1pY19mb3JtYXQgPSBmb3JtYXQxOwogCX0KIAllbHNlCiAJewog CQkvKiB1c2UgZGVmYXVsdCBmb3JtYXQgZm9yIGFsbCBjb2x1bW5zICovCiAJCWZvciAoaSA9 IDA7IGkgPCBuYXR0czsgaSsrKQogCQkJcG9ydGFsLT5mb3JtYXRzW2ldID0gMDsKKworCQlw b3J0YWwtPmR5bmFtaWNfZm9ybWF0ID0gMDsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2VycmNvZGVzLnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2VycmNvZGVz LnR4dAppbmRleCBjNzkzMTJlZDAzLi5jYzFkOTBmNTZiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9lcnJjb2Rlcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvZXJyY29k ZXMudHh0CkBAIC04Myw2ICs4Myw3IEBAIFNlY3Rpb246IENsYXNzIDAxIC0gV2FybmluZwog IyBkbyBub3QgdXNlIHRoaXMgY2xhc3MgZm9yIGZhaWx1cmUgY29uZGl0aW9ucwogMDEwMDAg ICAgVyAgICBFUlJDT0RFX1dBUk5JTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3YXJuaW5nCiAwMTAwQyAgICBXICAgIEVSUkNPREVfV0FSTklO R19EWU5BTUlDX1JFU1VMVF9TRVRTX1JFVFVSTkVEICAgICAgICAgICAgICAgICAgIGR5bmFt aWNfcmVzdWx0X3NldHNfcmV0dXJuZWQKKzAxMDBFICAgIFcgICAgRVJSQ09ERV9XQVJOSU5H X0FUVEVNUFRfVE9fUkVUVVJOX1RPT19NQU5ZX1JFU1VMVF9TRVRTICAgICAgICAgYXR0ZW1w dF90b19yZXR1cm5fdG9vX21hbnlfcmVzdWx0X3NldHMKIDAxMDA4ICAgIFcgICAgRVJSQ09E RV9XQVJOSU5HX0lNUExJQ0lUX1pFUk9fQklUX1BBRERJTkcgICAgICAgICAgICAgICAgICAg ICAgaW1wbGljaXRfemVyb19iaXRfcGFkZGluZwogMDEwMDMgICAgVyAgICBFUlJDT0RFX1dB Uk5JTkdfTlVMTF9WQUxVRV9FTElNSU5BVEVEX0lOX1NFVF9GVU5DVElPTiAgICAgICAgICBu dWxsX3ZhbHVlX2VsaW1pbmF0ZWRfaW5fc2V0X2Z1bmN0aW9uCiAwMTAwNyAgICBXICAgIEVS UkNPREVfV0FSTklOR19QUklWSUxFR0VfTk9UX0dSQU5URUQgICAgICAgICAgICAgICAgICAg ICAgICAgIHByaXZpbGVnZV9ub3RfZ3JhbnRlZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbW1nci9wb3J0YWxtZW0uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFs bWVtLmMKaW5kZXggMjgzZGZlMmQ5ZS4uOWEzZjQyNTE0NiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9t bWdyL3BvcnRhbG1lbS5jCkBAIC0xMjc4LDMgKzEyNzgsNTEgQEAgSG9sZFBpbm5lZFBvcnRh bHModm9pZCkKIAkJfQogCX0KIH0KKworc3RhdGljIGludAorY21wX3BvcnRhbHNfYnlfY3Jl YXRpb24oY29uc3QgTGlzdENlbGwgKmEsIGNvbnN0IExpc3RDZWxsICpiKQoreworCVBvcnRh bAkJcGEgPSBsZmlyc3QoYSk7CisJUG9ydGFsCQlwYiA9IGxmaXJzdChiKTsKKworCXJldHVy biBwYS0+Y3JlYXRlQ2lkIC0gcGItPmNyZWF0ZUNpZDsKK30KKworTGlzdCAqCitHZXRSZXR1 cm5hYmxlQ3Vyc29ycyh2b2lkKQoreworCUxpc3QJICAgKnJldCA9IE5JTDsKKwlIQVNIX1NF UV9TVEFUVVMgc3RhdHVzOworCVBvcnRhbEhhc2hFbnQgKmhlbnRyeTsKKworCWhhc2hfc2Vx X2luaXQoJnN0YXR1cywgUG9ydGFsSGFzaFRhYmxlKTsKKworCXdoaWxlICgoaGVudHJ5ID0g KFBvcnRhbEhhc2hFbnQgKikgaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQor CXsKKwkJUG9ydGFsCQlwb3J0YWwgPSBoZW50cnktPnBvcnRhbDsKKworCQlpZiAocG9ydGFs LT5jdXJzb3JPcHRpb25zICYgQ1VSU09SX09QVF9SRVRVUk4pCisJCQlyZXQgPSBsYXBwZW5k KHJldCwgcG9ydGFsKTsKKwl9CisKKwlsaXN0X3NvcnQocmV0LCBjbXBfcG9ydGFsc19ieV9j cmVhdGlvbik7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkCitDbG9zZU90aGVyUmV0dXJu YWJsZUN1cnNvcnMoT2lkIHByb2NpZCkKK3sKKwlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOwor CVBvcnRhbEhhc2hFbnQgKmhlbnRyeTsKKworCWhhc2hfc2VxX2luaXQoJnN0YXR1cywgUG9y dGFsSGFzaFRhYmxlKTsKKworCXdoaWxlICgoaGVudHJ5ID0gKFBvcnRhbEhhc2hFbnQgKikg aGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCXsKKwkJUG9ydGFsCQlwb3J0 YWwgPSBoZW50cnktPnBvcnRhbDsKKworCQlpZiAocG9ydGFsLT5jdXJzb3JPcHRpb25zICYg Q1VSU09SX09QVF9SRVRVUk4gJiYgcG9ydGFsLT5wcm9jSWQgIT0gcHJvY2lkKQorCQkJUG9y dGFsRHJvcChwb3J0YWwsIGZhbHNlKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCAxYWI5 OGEyMjg2Li5lYWE1NjljODE5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTExOTYwLDYgKzExOTYw LDcgQEAgZHVtcEZ1bmMoQXJjaGl2ZSAqZm91dCwgRnVuY0luZm8gKmZpbmZvKQogCWNoYXIJ ICAgKnByb3Jvd3M7CiAJY2hhcgkgICAqcHJvc3VwcG9ydDsKIAljaGFyCSAgICpwcm9wYXJh bGxlbDsKKwlpbnQJCQlwcm9keW5yZXM7CiAJY2hhcgkgICAqbGFubmFtZTsKIAljaGFyCSAg ICpyZXR0eXBlbmFtZTsKIAlpbnQJCQluYWxsYXJnczsKQEAgLTEyMDU0LDEwICsxMjA1NSwx NyBAQCBkdW1wRnVuYyhBcmNoaXZlICpmb3V0LCBGdW5jSW5mbyAqZmluZm8pCiAKIAlpZiAo Zm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMjAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHF1ZXJ5LAotCQkJCQkJCSAicHJvc3VwcG9ydFxuIik7CisJCQkJCQkJICJwcm9zdXBwb3J0 LFxuIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKLQkJCQkJCQkg IictJyBBUyBwcm9zdXBwb3J0XG4iKTsKKwkJCQkJCQkgIictJyBBUyBwcm9zdXBwb3J0LFxu Iik7CisKKwlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNDAwMDApCisJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKHF1ZXJ5LAorCQkJCQkJCSAicHJvZHlucmVzXG4iKTsKKwllbHNlCisJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAorCQkJCQkJCSAiMCBBUyBwcm9keW5yZXNc biIpOwogCiAJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksCiAJCQkJCSAgIkZST00gcGdfY2F0 YWxvZy5wZ19wcm9jICIKQEAgLTEyMDk3LDYgKzEyMTA1LDcgQEAgZHVtcEZ1bmMoQXJjaGl2 ZSAqZm91dCwgRnVuY0luZm8gKmZpbmZvKQogCXByb3Jvd3MgPSBQUWdldHZhbHVlKHJlcywg MCwgUFFmbnVtYmVyKHJlcywgInByb3Jvd3MiKSk7CiAJcHJvc3VwcG9ydCA9IFBRZ2V0dmFs dWUocmVzLCAwLCBQUWZudW1iZXIocmVzLCAicHJvc3VwcG9ydCIpKTsKIAlwcm9wYXJhbGxl bCA9IFBRZ2V0dmFsdWUocmVzLCAwLCBQUWZudW1iZXIocmVzLCAicHJvcGFyYWxsZWwiKSk7 CisJcHJvZHlucmVzID0gYXRvaShQUWdldHZhbHVlKHJlcywgMCwgUFFmbnVtYmVyKHJlcywg InByb2R5bnJlcyIpKSk7CiAJbGFubmFtZSA9IFBRZ2V0dmFsdWUocmVzLCAwLCBQUWZudW1i ZXIocmVzLCAibGFubmFtZSIpKTsKIAogCS8qCkBAIC0xMjI3Myw2ICsxMjI4Miw5IEBAIGR1 bXBGdW5jKEFyY2hpdmUgKmZvdXQsIEZ1bmNJbmZvICpmaW5mbykKIAlpZiAocHJvaXNzdHJp Y3RbMF0gPT0gJ3QnKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxLCAiIFNUUklDVCIpOwog CisJaWYgKHByb2R5bnJlcyA+IDApCisJCWFwcGVuZFBRRXhwQnVmZmVyKHEsICIgRFlOQU1J QyBSRVNVTFQgU0VUUyAlZCIsIHByb2R5bnJlcyk7CisKIAlpZiAocHJvc2VjZGVmWzBdID09 ICd0JykKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocSwgIiBTRUNVUklUWSBERUZJTkVSIik7 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgKaW5kZXggZjhlNmRlYTIyZC4uYTI1YTUxMDFiZSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgKQEAgLTc2LDYgKzc2LDkgQEAgQ0FUQUxPRyhwZ19w cm9jLDEyNTUsUHJvY2VkdXJlUmVsYXRpb25JZCkgQktJX0JPT1RTVFJBUCBCS0lfUk9XVFlQ RV9PSUQoODEsUHJvY2UKIAkvKiBzZWUgUFJPUEFSQUxMRUxfIGNhdGVnb3JpZXMgYmVsb3cg Ki8KIAljaGFyCQlwcm9wYXJhbGxlbCBCS0lfREVGQVVMVChzKTsKIAorCS8qIG1heGltdW0g bnVtYmVyIG9mIGR5bmFtaWMgcmVzdWx0IHNldHMgKi8KKwlpbnQzMgkJcHJvZHlucmVzIEJL SV9ERUZBVUxUKDApOworCiAJLyogbnVtYmVyIG9mIGFyZ3VtZW50cyAqLwogCS8qIE5vdGU6 IG5lZWQgbm90IGJlIGdpdmVuIGluIHBnX3Byb2MuZGF0OyBnZW5ia2kucGwgd2lsbCBjb21w dXRlIGl0ICovCiAJaW50MTYJCXByb25hcmdzOwpAQCAtMjA5LDcgKzIxMiw4IEBAIGV4dGVy biBPYmplY3RBZGRyZXNzIFByb2NlZHVyZUNyZWF0ZShjb25zdCBjaGFyICpwcm9jZWR1cmVO YW1lLAogCQkJCQkJCQkJIERhdHVtIHByb2NvbmZpZywKIAkJCQkJCQkJCSBPaWQgcHJvc3Vw cG9ydCwKIAkJCQkJCQkJCSBmbG9hdDQgcHJvY29zdCwKLQkJCQkJCQkJCSBmbG9hdDQgcHJv cm93cyk7CisJCQkJCQkJCQkgZmxvYXQ0IHByb3Jvd3MsCisJCQkJCQkJCQkgaW50IGR5bnJl cyk7CiAKIGV4dGVybiBib29sIGZ1bmN0aW9uX3BhcnNlX2Vycm9yX3RyYW5zcG9zZShjb25z dCBjaGFyICpwcm9zcmMpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9k ZWZyZW0uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oCmluZGV4IDExMzNhZTEx NDMuLmUzZjlmYTAwMGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJl bS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oCkBAIC02MSw2ICs2MSw4 IEBAIGV4dGVybiBPYmplY3RBZGRyZXNzIENyZWF0ZVRyYW5zZm9ybShDcmVhdGVUcmFuc2Zv cm1TdG10ICpzdG10KTsKIGV4dGVybiB2b2lkIElzVGhlcmVGdW5jdGlvbkluTmFtZXNwYWNl KGNvbnN0IGNoYXIgKnByb25hbWUsIGludCBwcm9uYXJncywKIAkJCQkJCQkJCSAgIG9pZHZl Y3RvciAqcHJvYXJndHlwZXMsIE9pZCBuc3BPaWQpOwogZXh0ZXJuIHZvaWQgRXhlY3V0ZURv U3RtdChEb1N0bXQgKnN0bXQsIGJvb2wgYXRvbWljKTsKK2V4dGVybiBPaWQJQ3VycmVudFBy b2NlZHVyZSh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2NlZHVyZUNhbGxzQ2xlYW51cCh2b2lk KTsKIGV4dGVybiB2b2lkIEV4ZWN1dGVDYWxsU3RtdChDYWxsU3RtdCAqc3RtdCwgUGFyYW1M aXN0SW5mbyBwYXJhbXMsIGJvb2wgYXRvbWljLCBEZXN0UmVjZWl2ZXIgKmRlc3QpOwogZXh0 ZXJuIFR1cGxlRGVzYyBDYWxsU3RtdFJlc3VsdERlc2MoQ2FsbFN0bXQgKnN0bXQpOwogZXh0 ZXJuIE9pZAlnZXRfdHJhbnNmb3JtX29pZChPaWQgdHlwZV9pZCwgT2lkIGxhbmdfaWQsIGJv b2wgbWlzc2luZ19vayk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggNDhhNzlhNzY1 Ny4uZTg4MGEwYzA1MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rl cy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMjcwNiwxMSAr MjcwNiwxMiBAQCB0eXBlZGVmIHN0cnVjdCBTZWNMYWJlbFN0bXQKICNkZWZpbmUgQ1VSU09S X09QVF9OT19TQ1JPTEwJMHgwMDA0CS8qIE5PIFNDUk9MTCBleHBsaWNpdGx5IGdpdmVuICov CiAjZGVmaW5lIENVUlNPUl9PUFRfSU5TRU5TSVRJVkUJMHgwMDA4CS8qIElOU0VOU0lUSVZF ICovCiAjZGVmaW5lIENVUlNPUl9PUFRfSE9MRAkJCTB4MDAxMAkvKiBXSVRIIEhPTEQgKi8K KyNkZWZpbmUgQ1VSU09SX09QVF9SRVRVUk4JCTB4MDAyMAkvKiBXSVRIIFJFVFVSTiAqLwog LyogdGhlc2UgcGxhbm5lci1jb250cm9sIGZsYWdzIGRvIG5vdCBjb3JyZXNwb25kIHRvIGFu eSBTUUwgZ3JhbW1hcjogKi8KLSNkZWZpbmUgQ1VSU09SX09QVF9GQVNUX1BMQU4JMHgwMDIw CS8qIHByZWZlciBmYXN0LXN0YXJ0IHBsYW4gKi8KLSNkZWZpbmUgQ1VSU09SX09QVF9HRU5F UklDX1BMQU4gMHgwMDQwCS8qIGZvcmNlIHVzZSBvZiBnZW5lcmljIHBsYW4gKi8KLSNkZWZp bmUgQ1VSU09SX09QVF9DVVNUT01fUExBTgkweDAwODAJLyogZm9yY2UgdXNlIG9mIGN1c3Rv bSBwbGFuICovCi0jZGVmaW5lIENVUlNPUl9PUFRfUEFSQUxMRUxfT0sJMHgwMTAwCS8qIHBh cmFsbGVsIG1vZGUgT0sgKi8KKyNkZWZpbmUgQ1VSU09SX09QVF9GQVNUX1BMQU4JMHgwMTAw CS8qIHByZWZlciBmYXN0LXN0YXJ0IHBsYW4gKi8KKyNkZWZpbmUgQ1VSU09SX09QVF9HRU5F UklDX1BMQU4gMHgwMjAwCS8qIGZvcmNlIHVzZSBvZiBnZW5lcmljIHBsYW4gKi8KKyNkZWZp bmUgQ1VSU09SX09QVF9DVVNUT01fUExBTgkweDA0MDAJLyogZm9yY2UgdXNlIG9mIGN1c3Rv bSBwbGFuICovCisjZGVmaW5lIENVUlNPUl9PUFRfUEFSQUxMRUxfT0sJMHgwODAwCS8qIHBh cmFsbGVsIG1vZGUgT0sgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgRGVjbGFyZUN1cnNvclN0bXQK IHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNs dWRlL3BhcnNlci9rd2xpc3QuaAppbmRleCA3MWRjZGYyODg5Li5hMjU3N2NlNjlkIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUv cGFyc2VyL2t3bGlzdC5oCkBAIC0xMzksNiArMTM5LDcgQEAgUEdfS0VZV09SRCgiZG9jdW1l bnQiLCBET0NVTUVOVF9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19L RVlXT1JEKCJkb21haW4iLCBET01BSU5fUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQogUEdfS0VZV09SRCgiZG91YmxlIiwgRE9VQkxFX1AsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImRyb3AiLCBEUk9QLCBVTlJFU0VSVkVEX0tF WVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJkeW5hbWljIiwgRFlOQU1JQywgVU5S RVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZWFjaCIsIEVBQ0gs IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImVsc2UiLCBF TFNFLCBSRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiZW5hYmxl IiwgRU5BQkxFX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTM0NCw2 ICszNDUsOCBAQCBQR19LRVlXT1JEKCJyZXBsaWNhIiwgUkVQTElDQSwgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicmVzZXQiLCBSRVNFVCwgVU5SRVNF UlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicmVzdGFydCIsIFJFU1RB UlQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJlc3Ry aWN0IiwgUkVTVFJJQ1QsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tF WVdPUkQoInJlc3VsdCIsIFJFU1VMVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVM KQorUEdfS0VZV09SRCgicmV0dXJuIiwgUkVUVVJOLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJyZXR1cm5pbmciLCBSRVRVUk5JTkcsIFJFU0VSVkVE X0tFWVdPUkQsIEFTX0xBQkVMKQogUEdfS0VZV09SRCgicmV0dXJucyIsIFJFVFVSTlMsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJldm9rZSIsIFJF Vk9LRSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvcG9ydGFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaApp bmRleCBkNDFmZjJlZmRhLi5mYjM1NjRkODczIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9wb3J0YWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaApAQCAtMTMx LDYgKzEzMSwxNiBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0YWxEYXRhCiAJU3ViVHJhbnNhY3Rp b25JZCBjcmVhdGVTdWJpZDsJLyogdGhlIGNyZWF0aW5nIHN1YnhhY3QgKi8KIAlTdWJUcmFu c2FjdGlvbklkIGFjdGl2ZVN1YmlkOwkvKiB0aGUgbGFzdCBzdWJ4YWN0IHdpdGggYWN0aXZp dHkgKi8KIAorCS8qCisJICogUHJvY2VkdXJlIHRoYXQgY3JlYXRlZCB0aGlzIHBvcnRhbC4g IFVzZWQgZm9yIHJldHVybmFibGUgY3Vyc29ycy4KKwkgKi8KKwlPaWQJCQkJcHJvY0lkOwor CS8qCisJICogQ29tbWFuZCBJRCB3aGVyZSB0aGUgcG9ydGFsIHdhcyBjcmVhdGVkLiAgVXNl ZCBmb3Igc29ydGluZyByZXR1cm5hYmxlCisJICogY3Vyc29ycyBpbnRvIGNyZWF0aW9uIG9y ZGVyLgorCSAqLworCUNvbW1hbmRJZAkJY3JlYXRlQ2lkOworCiAJLyogVGhlIHF1ZXJ5IG9y IHF1ZXJpZXMgdGhlIHBvcnRhbCB3aWxsIGV4ZWN1dGUgKi8KIAljb25zdCBjaGFyICpzb3Vy Y2VUZXh0OwkJLyogdGV4dCBvZiBxdWVyeSAoYXMgb2YgOC40LCBuZXZlciBOVUxMKSAqLwog CUNvbW1hbmRUYWcJY29tbWFuZFRhZzsJCS8qIGNvbW1hbmQgdGFnIGZvciBvcmlnaW5hbCBx dWVyeSAqLwpAQCAtMTU5LDYgKzE2OSw4IEBAIHR5cGVkZWYgc3RydWN0IFBvcnRhbERhdGEK IAlUdXBsZURlc2MJdHVwRGVzYzsJCS8qIGRlc2NyaXB0b3IgZm9yIHJlc3VsdCB0dXBsZXMg Ki8KIAkvKiBhbmQgdGhlc2UgYXJlIHRoZSBmb3JtYXQgY29kZXMgdG8gdXNlIGZvciB0aGUg Y29sdW1uczogKi8KIAlpbnQxNgkgICAqZm9ybWF0czsJCS8qIGEgZm9ybWF0IGNvZGUgZm9y IGVhY2ggY29sdW1uICovCisJLyogRm9ybWF0IGNvZGUgZm9yIGR5bmFtaWMgcmVzdWx0IHNl dHMgKi8KKwlpbnQxNgkJZHluYW1pY19mb3JtYXQ7CiAKIAkvKgogCSAqIFdoZXJlIHdlIHN0 b3JlIHR1cGxlcyBmb3IgYSBoZWxkIGN1cnNvciBvciBhIFBPUlRBTF9PTkVfUkVUVVJOSU5H IG9yCkBAIC0yMzcsNSArMjQ5LDcgQEAgZXh0ZXJuIHZvaWQgUG9ydGFsQ3JlYXRlSG9sZFN0 b3JlKFBvcnRhbCBwb3J0YWwpOwogZXh0ZXJuIHZvaWQgUG9ydGFsSGFzaFRhYmxlRGVsZXRl QWxsKHZvaWQpOwogZXh0ZXJuIGJvb2wgVGhlcmVBcmVOb1JlYWR5UG9ydGFscyh2b2lkKTsK IGV4dGVybiB2b2lkIEhvbGRQaW5uZWRQb3J0YWxzKHZvaWQpOworZXh0ZXJuIExpc3QgKkdl dFJldHVybmFibGVDdXJzb3JzKHZvaWQpOworZXh0ZXJuIHZvaWQgQ2xvc2VPdGhlclJldHVy bmFibGVDdXJzb3JzKE9pZCBwcm9jaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogUE9SVEFMX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXByb3RvY29sMy5jIGIv c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtcHJvdG9jb2wzLmMKaW5kZXggMTY5NjUyNTQ3NS4u NTYyOTBmOTNjMSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtcHJvdG9j b2wzLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtcHJvdG9jb2wzLmMKQEAgLTI5 NywxMCArMjk3LDggQEAgcHFQYXJzZUlucHV0MyhQR2Nvbm4gKmNvbm4pCiAJCQkJCXsKIAkJ CQkJCS8qCiAJCQkJCQkgKiBBIG5ldyAnVCcgbWVzc2FnZSBpcyB0cmVhdGVkIGFzIHRoZSBz dGFydCBvZgotCQkJCQkJICogYW5vdGhlciBQR3Jlc3VsdC4gIChJdCBpcyBub3QgY2xlYXIg dGhhdCB0aGlzIGlzCi0JCQkJCQkgKiByZWFsbHkgcG9zc2libGUgd2l0aCB0aGUgY3VycmVu dCBiYWNrZW5kLikgV2Ugc3RvcAotCQkJCQkJICogcGFyc2luZyB1bnRpbCB0aGUgYXBwbGlj YXRpb24gYWNjZXB0cyB0aGUgY3VycmVudAotCQkJCQkJICogcmVzdWx0LgorCQkJCQkJICog YW5vdGhlciBQR3Jlc3VsdC4gIFdlIHN0b3AgcGFyc2luZyB1bnRpbCB0aGUKKwkJCQkJCSAq IGFwcGxpY2F0aW9uIGFjY2VwdHMgdGhlIGN1cnJlbnQgcmVzdWx0LgogCQkJCQkJICovCiAJ CQkJCQljb25uLT5hc3luY1N0YXR1cyA9IFBHQVNZTkNfUkVBRFk7CiAJCQkJCQlyZXR1cm47 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9wcm9jZWR1 cmUub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfcHJvY2VkdXJlLm91 dAppbmRleCAzODM4ZmEyMzI0Li5jYzg2ZWVhNzMxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9wcm9jZWR1cmUub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3Byb2NlZHVyZS5vdXQKQEAgLTIxMiw4ICsyMTIsNDcg QEAgQUxURVIgUk9VVElORSBjcF90ZXN0ZnVuYzFhIFJFTkFNRSBUTyBjcF90ZXN0ZnVuYzE7 CiBBTFRFUiBST1VUSU5FIHB0ZXN0MSh0ZXh0KSBSRU5BTUUgVE8gcHRlc3QxYTsKIEFMVEVS IFJPVVRJTkUgcHRlc3QxYSBSRU5BTUUgVE8gcHRlc3QxOwogRFJPUCBST1VUSU5FIGNwX3Rl c3RmdW5jMShpbnQpOworLS0gZHluYW1pYyByZXN1bHQgc2V0cworQ1JFQVRFIFRBQkxFIGNw X3Rlc3QyIChhIGludCk7CitJTlNFUlQgSU5UTyBjcF90ZXN0MiBWQUxVRVMgKDEpLCAoMiks ICgzKTsKK0NSRUFURSBUQUJMRSBjcF90ZXN0MyAoeCB0ZXh0LCB5IHRleHQpOworSU5TRVJU IElOVE8gY3BfdGVzdDMgVkFMVUVTICgnYWJjJywgJ2RlZicpLCAoJ2ZvbycsICdiYXInKTsK K0NSRUFURSBQUk9DRURVUkUgcGRyc3Rlc3QxKCkKK0xBTkdVQUdFIFNRTAorRFlOQU1JQyBS RVNVTFQgU0VUUyAyCitBUyAkJAorREVDTEFSRSBjMSBDVVJTT1IgV0lUSCBSRVRVUk4gRk9S IFNFTEVDVCAqIEZST00gY3BfdGVzdDI7CitERUNMQVJFIGMyIENVUlNPUiBXSVRIIFJFVFVS TiBGT1IgU0VMRUNUICogRlJPTSBjcF90ZXN0MzsKKyQkOworQ0FMTCBwZHJzdGVzdDEoKTsK KyBhIAorLS0tCisgMQorIDIKKyAzCisoMyByb3dzKQorCisgIHggIHwgIHkgIAorLS0tLS0r LS0tLS0KKyBhYmMgfCBkZWYKKyBmb28gfCBiYXIKKygyIHJvd3MpCisKK0NSRUFURSBQUk9D RURVUkUgcGRyc3Rlc3QyKCkKK0xBTkdVQUdFIFNRTAorRFlOQU1JQyBSRVNVTFQgU0VUUyAx CitBUyAkJAorQ0FMTCBwZHJzdGVzdDEoKTsKK0RFQ0xBUkUgYzMgQ1VSU09SIFdJVEggUkVU VVJOIEZPUiBTRUxFQ1QgKiBGUk9NIGNwX3Rlc3QyIFdIRVJFIGEgPCAyOworJCQ7CitDQUxM IHBkcnN0ZXN0MigpOworIGEgCistLS0KKyAxCisoMSByb3cpCisKIC0tIGNsZWFudXAKIERS T1AgUFJPQ0VEVVJFIHB0ZXN0MTsKIERST1AgUFJPQ0VEVVJFIHB0ZXN0MjsKLURST1AgVEFC TEUgY3BfdGVzdDsKK0RST1AgVEFCTEUgY3BfdGVzdCwgY3BfdGVzdDIsIGNwX3Rlc3QzOwog RFJPUCBVU0VSIHJlZ3Jlc3NfY3BfdXNlcjE7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9jcmVhdGVfcHJvY2VkdXJlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Ny ZWF0ZV9wcm9jZWR1cmUuc3FsCmluZGV4IDJlZjFjODJjZWEuLjM2YmM3ZTMyNDAgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9wcm9jZWR1cmUuc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9wcm9jZWR1cmUuc3FsCkBAIC0xNjcsMTEg KzE2NywzOSBAQCBDUkVBVEUgVVNFUiByZWdyZXNzX2NwX3VzZXIxOwogRFJPUCBST1VUSU5F IGNwX3Rlc3RmdW5jMShpbnQpOwogCiAKKy0tIGR5bmFtaWMgcmVzdWx0IHNldHMKKworQ1JF QVRFIFRBQkxFIGNwX3Rlc3QyIChhIGludCk7CitJTlNFUlQgSU5UTyBjcF90ZXN0MiBWQUxV RVMgKDEpLCAoMiksICgzKTsKK0NSRUFURSBUQUJMRSBjcF90ZXN0MyAoeCB0ZXh0LCB5IHRl eHQpOworSU5TRVJUIElOVE8gY3BfdGVzdDMgVkFMVUVTICgnYWJjJywgJ2RlZicpLCAoJ2Zv bycsICdiYXInKTsKKworQ1JFQVRFIFBST0NFRFVSRSBwZHJzdGVzdDEoKQorTEFOR1VBR0Ug U1FMCitEWU5BTUlDIFJFU1VMVCBTRVRTIDIKK0FTICQkCitERUNMQVJFIGMxIENVUlNPUiBX SVRIIFJFVFVSTiBGT1IgU0VMRUNUICogRlJPTSBjcF90ZXN0MjsKK0RFQ0xBUkUgYzIgQ1VS U09SIFdJVEggUkVUVVJOIEZPUiBTRUxFQ1QgKiBGUk9NIGNwX3Rlc3QzOworJCQ7CisKK0NB TEwgcGRyc3Rlc3QxKCk7CisKK0NSRUFURSBQUk9DRURVUkUgcGRyc3Rlc3QyKCkKK0xBTkdV QUdFIFNRTAorRFlOQU1JQyBSRVNVTFQgU0VUUyAxCitBUyAkJAorQ0FMTCBwZHJzdGVzdDEo KTsKK0RFQ0xBUkUgYzMgQ1VSU09SIFdJVEggUkVUVVJOIEZPUiBTRUxFQ1QgKiBGUk9NIGNw X3Rlc3QyIFdIRVJFIGEgPCAyOworJCQ7CisKK0NBTEwgcGRyc3Rlc3QyKCk7CisKKwogLS0g Y2xlYW51cAogCiBEUk9QIFBST0NFRFVSRSBwdGVzdDE7CiBEUk9QIFBST0NFRFVSRSBwdGVz dDI7CiAKLURST1AgVEFCTEUgY3BfdGVzdDsKK0RST1AgVEFCTEUgY3BfdGVzdCwgY3BfdGVz dDIsIGNwX3Rlc3QzOwogCiBEUk9QIFVTRVIgcmVncmVzc19jcF91c2VyMTsKLS0gCjIuMjku MgoK --------------A0D7E55498357BAB8268C9EA Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="test-extended-dynres.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test-extended-dynres.c" I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgImxpYnBx LWZlLmgiCgpzdGF0aWMgdm9pZApwcmludF9yZXN1bHQoUEdyZXN1bHQgKnJlcykKewoJcHJp bnRmKCI9PT0gcmVzdWx0IHNldDpcbiIpOwoJZm9yIChpbnQgcm93ID0gMDsgcm93IDwgUFFu dHVwbGVzKHJlcyk7IHJvdysrKQoJewoJCXByaW50Zigicm93ICVkOiAiLCByb3cpOwoJCWZv ciAoaW50IGNvbCA9IDA7IGNvbCA8IFBRbmZpZWxkcyhyZXMpOyBjb2wrKykKCQl7CgkJCXBy aW50ZigiJWQvJXM9JXM7ICIsIGNvbCwgUFFmbmFtZShyZXMsIGNvbCksIFBRZ2V0dmFsdWUo cmVzLCByb3csIGNvbCkpOwoJCX0KCQlwcmludGYoIlxuIik7Cgl9Cn0KCmludAptYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCnsKCVBHY29ubiAqY29ubjsKCgljb25uID0gUFFjb25u ZWN0ZGIoIiIpOwoKCWlmIChQUXN0YXR1cyhjb25uKSAhPSBDT05ORUNUSU9OX09LKQoJewoJ CWZwcmludGYoc3RkZXJyLCAiQ29ubmVjdGlvbiB0byBkYXRhYmFzZSBmYWlsZWQ6ICVzIiwK CQkJCVBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKCQlleGl0KDEpOwoJfQoKCVBHcmVzdWx0ICpy ZXM7CglpbnQgcmM7CgoJcmMgPSBQUXNlbmRRdWVyeVBhcmFtcyhjb25uLCAiQ0FMTCBwZHJz dGVzdDEoKTsiLAoJCQkgICAgICAgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKCQkJICAg ICAgIC0xKTsKCglpZiAocmMgPT0gMCkKCXsKCQlmcHJpbnRmKHN0ZGVyciwgInF1ZXJ5IGZh aWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CgkJZXhpdCgxKTsKCX0KCgl3aGls ZSAoKHJlcyA9IFBRZ2V0UmVzdWx0KGNvbm4pKSkKCXsKCQlwcmludF9yZXN1bHQocmVzKTsK CX0KCglQUWZpbmlzaChjb25uKTsKCXJldHVybiAwOwp9Cg== --------------A0D7E55498357BAB8268C9EA--