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 1nC15A-0006IA-V7 for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Jan 2022 15:16:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nC14d-00030H-LC for pgsql-hackers@arkaria.postgresql.org; Mon, 24 Jan 2022 15:16:03 +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 1nC14b-000308-WC for pgsql-hackers@lists.postgresql.org; Mon, 24 Jan 2022 15:16:03 +0000 Received: from wout5-smtp.messagingengine.com ([64.147.123.21]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nC14V-0000l4-Dc for pgsql-hackers@postgresql.org; Mon, 24 Jan 2022 15:16:00 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.west.internal (Postfix) with ESMTP id C528E3200754 for ; Mon, 24 Jan 2022 10:15:52 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Mon, 24 Jan 2022 10:15:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :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=qan4+6geSBMo+b1M/ un5MWYd4j0ITd+4789D6/t4IMw=; b=oMgpWf7nNL+4ny1CMLRuGF7/18pf3j0+F vyIthZ2c5Aww5F5ARgEIsvMi0QMUnzz/0ww17/zkBxR4UEPmergLTWHseY+X9ihP yFpuZsimYO4r5L2nzgS8569kZzeyuUtOomNLyAoQP2N9dzup2RB77L24FKlGSZ7S t5o7N3D7KS6U9UrYH3zqd+T6MVO+BnuHpEp6JIJCwKARRqtmWySMH5aQ5I1beLy7 pOfhk+TG90/NzPZx/zII9SRGXKpIXMX+A6X+XLMG3ehijdFTmX12S2QHB4v91Oeo dFmIeX9wPl8EBgjxNbbzZyh4/GiaP7GVAoNldnJnRy0uhQsYd9jsQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvvddrvdeigdejiecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecunecujfgurheptgfkffggfgfuhffvfhgjsehmtderre dtfeejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgv ihhsvghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhmqeenucggtffrrghtth gvrhhnpedttdfgtddtgfdvvdduuddtkeefffehueelhfffhfekudekkeehffeggfeggfek leenucffohhmrghinhepphhoshhtghhrvghsqhhlrdhorhhgnecuvehluhhsthgvrhfuih iivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphgvthgvrhdrvghishgvnhhtrhgr uhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Mon, 24 Jan 2022 10:15:50 -0500 (EST) Content-Type: multipart/mixed; boundary="------------dowxR00YBYP1c4T3AdTDhiQM" Message-ID: <40a2e977-98ba-0c01-af6c-9dfb39e864ba@enterprisedb.com> Date: Mon, 24 Jan 2022 16:15:48 +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 Subject: Re: automatically generating node support functions Content-Language: en-US From: Peter Eisentraut To: pgsql-hackers References: <2f876203-7142-fa71-6d22-6ce00eb26869@enterprisedb.com> <50fedc80-4104-bdc8-d777-04f030fc550f@dunslane.net> <7848b872-7a10-67b2-b55f-7c9c475ae863@enterprisedb.com> In-Reply-To: <7848b872-7a10-67b2-b55f-7c9c475ae863@enterprisedb.com> 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. --------------dowxR00YBYP1c4T3AdTDhiQM Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Rebased patch to resolve some merge conflicts On 29.12.21 12:08, Peter Eisentraut wrote: > On 12.10.21 15:52, Andrew Dunstan wrote: >> I haven't been through the whole thing, but I did notice this: the >> comment stripping code looks rather fragile. I think it would blow up if >> there were a continuation line not starting with  qr/\s*\*/. It's a lot >> simpler and more robust to do this if you slurp the file in whole. >> Here's what we do in the buildfarm code: >> >>      my $src = file_contents($_); >>      # strip C comments >>      # We used to use the recipe in perlfaq6 but there is actually no >> point. >>      # We don't need to keep the quoted string values anyway, and >>      # on some platforms the complex regex causes perl to barf and crash. >>      $src =~ s{/\*.*?\*/}{}gs; >> >> After you've done that splitting it into lines is pretty simple. > > Here is an updated patch, with some general rebasing, and the above > improvement.  It now also generates #include lines necessary in > copyfuncs etc. to pull in all the node types it operates on. > > Further, I have looked more into the "metadata" approach discussed in > [0].  It's pretty easy to generate that kind of output from the data > structures my script produces.  You just loop over all the node types > and print stuff and keep a few counters.  I don't plan to work on that > at this time, but I just wanted to point out that if people wanted to > move into that direction, my patch wouldn't be in the way. > > > [0]: > https://www.postgresql.org/message-id/flat/20190828234136.fk2ndqtld3onfrrp%40alap3.anarazel.de --------------dowxR00YBYP1c4T3AdTDhiQM Content-Type: text/plain; charset=UTF-8; name="v4-0001-Automatically-generate-node-support-functions.patch" Content-Disposition: attachment; filename*0="v4-0001-Automatically-generate-node-support-functions.patch" Content-Transfer-Encoding: base64 RnJvbSBkOTljODE4NDQ3ZWU0YTY4Yjc2MmZiOGE4YzY0NWVlNmVmMDUxZmY5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAyNCBKYW4gMjAyMiAxNjoxMzoyMSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjRdIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgbm9kZSBzdXBwb3J0IGZ1bmN0 aW9ucwoKQWRkIGEgc2NyaXB0IHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhlIG5vZGUg c3VwcG9ydCBmdW5jdGlvbnMKKGNvcHksIGVxdWFsLCBvdXQsIGFuZCByZWFkLCBhcyB3ZWxs IGFzIHRoZSBub2RlIHRhZ3MgZW51bSkgZnJvbSB0aGUKc3RydWN0IGRlZmluaXRpb25zLgoK Rm9yIGVhY2ggb2YgdGhlIGZvdXIgbm9kZSBzdXBwb3J0IGZpbGVzLCBpdCBjcmVhdGVzIHR3 byBpbmNsdWRlIGZpbGVzLAplLmcuLCBjb3B5ZnVuY3MuaW5jMS5jIGFuZCBjb3B5ZnVuY3Mu aW5jMi5jLCB0byBpbmNsdWRlIGluIHRoZSBtYWluCmZpbGUuICBBbGwgdGhlIHNjYWZmb2xk aW5nIG9mIHRoZSBtYWluIGZpbGUgc3RheXMgaW4gcGxhY2UuCgpUT0RPOiBJbiB0aGlzIHBh dGNoLCBJIGhhdmUgb25seSBpZmRlZidlZCBvdXQgdGhlIGNvZGUgdG8gY291bGQgYmUKcmVt b3ZlZCwgbWFpbmx5IHNvIHRoYXQgaXQgd29uJ3QgY29uc3RhbnRseSBoYXZlIG1lcmdlIGNv bmZsaWN0cy4KRXZlbnR1YWxseSwgdGhhdCBzaG91bGQgYWxsIGJlIGNoYW5nZWQgdG8gZGVs ZXRlIHRoZSBjb2RlLiAgV2hlbiB3ZSBkbwp0aGF0LCBzb21lIGNvZGUgY29tbWVudHMgc2hv dWxkIHByb2JhYmx5IGJlIHByZXNlcnZlZCBlbHNld2hlcmUsIHNvCnRoYXQgd2lsbCBuZWVk IGFub3RoZXIgcGFzcyBvZiBjb25zaWRlcmF0aW9uLgoKSSBoYXZlIHRyaWVkIHRvIG1vc3Rs eSBtYWtlIHRoZSBjb3ZlcmFnZSBvZiB0aGUgb3V0cHV0IG1hdGNoIHdoYXQgaXMKY3VycmVu dGx5IHRoZXJlLiAgRm9yIGV4YW1wbGUsIG9uZSBjb3VsZCBub3cgZG8gb3V0L3JlYWQgY292 ZXJhZ2Ugb2YKdXRpbGl0eSBzdGF0ZW1lbnQgbm9kZXMsIGJ1dCBJIGhhdmUgbWFudWFsbHkg ZXhjbHVkZWQgdGhvc2UgZm9yIG5vdy4KVGhlIHJlYXNvbiBpcyBtYWlubHkgdGhhdCBpdCdz IGVhc2llciB0byBkaWZmIHRoZSBiZWZvcmUgYW5kIGFmdGVyLAphbmQgYWRkaW5nIGEgYnVu Y2ggb2Ygc3R1ZmYgbGlrZSB0aGlzIG1pZ2h0IHJlcXVpcmUgYSBzZXBhcmF0ZQphbmFseXNp cyBhbmQgcmV2aWV3LgoKU3VidHlwaW5nIChUaWRTY2FuIC0+IFNjYW4pIGlzIHN1cHBvcnRl ZC4KCkZvciB0aGUgaGFyZCBjYXNlcywgeW91IGNhbiBqdXN0IHdyaXRlIGEgbWFudWFsIGZ1 bmN0aW9uIGFuZCBleGNsdWRlCmdlbmVyYXRpbmcgb25lLiAgRm9yIHRoZSBub3Qgc28gaGFy ZCBjYXNlcywgdGhlcmUgaXMgYSB3YXkgb2YKYW5ub3RhdGluZyBzdHJ1Y3QgZmllbGRzIHRv IGdldCBzcGVjaWFsIGJlaGF2aW9ycy4gIEZvciBleGFtcGxlLApwZ19ub2RlX2F0dHIoZXF1 YWxfaWdub3JlKSBoYXMgdGhlIGZpZWxkIGlnbm9yZWQgaW4gZXF1YWwgZnVuY3Rpb25zLgoK RGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0 L2MxMDk3NTkwLWE2YTQtNDg2YS02NGIxLWUxZjljYzA1MzNjZSU0MGVudGVycHJpc2VkYi5j b20KLS0tCiBzcmMvYmFja2VuZC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgICA4ICst CiBzcmMvYmFja2VuZC9ub2Rlcy8uZ2l0aWdub3JlICAgICAgICAgIHwgICAzICsKIHNyYy9i YWNrZW5kL25vZGVzL01ha2VmaWxlICAgICAgICAgICAgfCAgNDYgKysKIHNyYy9iYWNrZW5k L25vZGVzL2NvcHlmdW5jcy5jICAgICAgICAgfCAgMTkgKy0KIHNyYy9iYWNrZW5kL25vZGVz L2VxdWFsZnVuY3MuYyAgICAgICAgfCAgMjIgKy0KIHNyYy9iYWNrZW5kL25vZGVzL2dlbl9u b2RlX3N1cHBvcnQucGwgfCA2NjAgKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9i YWNrZW5kL25vZGVzL291dGZ1bmNzLmMgICAgICAgICAgfCAgMzAgKy0KIHNyYy9iYWNrZW5k L25vZGVzL3JlYWRmdW5jcy5jICAgICAgICAgfCAgMjMgKy0KIHNyYy9pbmNsdWRlL25vZGVz Ly5naXRpZ25vcmUgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMu aCAgICAgICAgICAgICB8ICAgOCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg ICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAg IHwgMTM2ICsrKy0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICB8 ICA5MCArKy0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgIHwgIDIw ICstCiBzcmMvaW5jbHVkZS9wZ19jb25maWdfbWFudWFsLmggICAgICAgIHwgICA0ICstCiBz cmMvaW5jbHVkZS91dGlscy9yZWwuaCAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvdG9v bHMvbXN2Yy9Tb2x1dGlvbi5wbSAgICAgICAgICAgIHwgIDQ2ICsrCiAxNyBmaWxlcyBjaGFu Z2VkLCA5NzcgaW5zZXJ0aW9ucygrKSwgMTQ4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2luY2x1ZGUvbm9kZXMvLmdpdGlnbm9yZQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvTWFrZWZpbGUKaW5kZXggYWRkOTU2MGJl NC4uZjljZTdjZWZjYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvTWFrZWZpbGUKKysrIGIv c3JjL2JhY2tlbmQvTWFrZWZpbGUKQEAgLTE0MywxMSArMTQzLDE1IEBAIHN0b3JhZ2UvbG1n ci9sd2xvY2tuYW1lcy5oOiBzdG9yYWdlL2xtZ3IvZ2VuZXJhdGUtbHdsb2NrbmFtZXMucGwg c3RvcmFnZS9sbWdyL2x3CiBzdWJtYWtlLWNhdGFsb2ctaGVhZGVyczoKIAkkKE1BS0UpIC1D IGNhdGFsb2cgZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rcwogCisjIHJ1biB0 aGlzIHVuY29uZGl0aW9uYWxseSB0byBhdm9pZCBuZWVkaW5nIHRvIGtub3cgaXRzIGRlcGVu ZGVuY2llcyBoZXJlOgorc3VibWFrZS1ub2Rlcy1oZWFkZXJzOgorCSQoTUFLRSkgLUMgbm9k ZXMgZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rcworCiAjIHJ1biB0aGlzIHVu Y29uZGl0aW9uYWxseSB0byBhdm9pZCBuZWVkaW5nIHRvIGtub3cgaXRzIGRlcGVuZGVuY2ll cyBoZXJlOgogc3VibWFrZS11dGlscy1oZWFkZXJzOgogCSQoTUFLRSkgLUMgdXRpbHMgZGlz dHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rcwogCi0uUEhPTlk6IHN1Ym1ha2UtY2F0 YWxvZy1oZWFkZXJzIHN1Ym1ha2UtdXRpbHMtaGVhZGVycworLlBIT05ZOiBzdWJtYWtlLWNh dGFsb2ctaGVhZGVycyBzdWJtYWtlLW5vZGVzLWhlYWRlcnMgc3VibWFrZS11dGlscy1oZWFk ZXJzCiAKICMgTWFrZSBzeW1saW5rcyBmb3IgdGhlc2UgaGVhZGVycyBpbiB0aGUgaW5jbHVk ZSBkaXJlY3RvcnkuIFRoYXQgd2F5CiAjIHdlIGNhbiBjdXQgZG93biBvbiB0aGUgLUkgb3B0 aW9ucy4gQWxzbywgYSBzeW1saW5rIGlzIGF1dG9tYXRpY2FsbHkKQEAgLTE2Miw3ICsxNjYs NyBAQCBzdWJtYWtlLXV0aWxzLWhlYWRlcnM6CiAKIC5QSE9OWTogZ2VuZXJhdGVkLWhlYWRl cnMKIAotZ2VuZXJhdGVkLWhlYWRlcnM6ICQodG9wX2J1aWxkZGlyKS9zcmMvaW5jbHVkZS9w YXJzZXIvZ3JhbS5oICQodG9wX2J1aWxkZGlyKS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9j a25hbWVzLmggc3VibWFrZS1jYXRhbG9nLWhlYWRlcnMgc3VibWFrZS11dGlscy1oZWFkZXJz CitnZW5lcmF0ZWQtaGVhZGVyczogJCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRlL3BhcnNl ci9ncmFtLmggJCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbmFt ZXMuaCBzdWJtYWtlLWNhdGFsb2ctaGVhZGVycyBzdWJtYWtlLW5vZGVzLWhlYWRlcnMgc3Vi bWFrZS11dGlscy1oZWFkZXJzCiAKICQodG9wX2J1aWxkZGlyKS9zcmMvaW5jbHVkZS9wYXJz ZXIvZ3JhbS5oOiBwYXJzZXIvZ3JhbS5oCiAJcHJlcmVxZGlyPWBjZCAnJChkaXIgJDwpJyA+ L2Rldi9udWxsICYmIHB3ZGAgJiYgXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMv LmdpdGlnbm9yZSBiL3NyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMmE3OWVlNmVkOAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACisvbm9k ZS1zdXBwb3J0LXN0YW1wCisvbm9kZXRhZ3MuaAorLypmdW5jcy5pbmM/LmMKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL25vZGVzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvbm9kZXMvTWFr ZWZpbGUKaW5kZXggNWQyYjEyYTk5My4uNTZjZGRjMDZkYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvbm9kZXMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUK QEAgLTMwLDMgKzMwLDQ5IEBAIE9CSlMgPSBcCiAJdmFsdWUubwogCiBpbmNsdWRlICQodG9w X3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCisKK25vZGVfaGVhZGVycyA9IFwKKwlu b2Rlcy9ub2Rlcy5oIFwKKwlub2Rlcy9leGVjbm9kZXMuaCBcCisJbm9kZXMvcGxhbm5vZGVz LmggXAorCW5vZGVzL3ByaW1ub2Rlcy5oIFwKKwlub2Rlcy9wYXRobm9kZXMuaCBcCisJbm9k ZXMvZXh0ZW5zaWJsZS5oIFwKKwlub2Rlcy9wYXJzZW5vZGVzLmggXAorCW5vZGVzL3JlcGxu b2Rlcy5oIFwKKwlub2Rlcy92YWx1ZS5oIFwKKwljb21tYW5kcy90cmlnZ2VyLmggXAorCWNv bW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBcCisJZm9yZWlnbi9mZHdhcGkuaCBcCisJYWNjZXNz L2FtYXBpLmggXAorCWFjY2Vzcy90YWJsZWFtLmggXAorCWFjY2Vzcy90c21hcGkuaCBcCisJ dXRpbHMvcmVsLmggXAorCW5vZGVzL3N1cHBvcnRub2Rlcy5oIFwKKwlleGVjdXRvci90dXB0 YWJsZS5oIFwKKwlub2Rlcy9sb2Nrb3B0aW9ucy5oIFwKKwlhY2Nlc3Mvc2Rpci5oCisKKyMg c2VlIGFsc28gY2F0YWxvZy9NYWtlZmlsZSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlc2Ug bWFrZSBydWxlcworCithbGw6IGRpc3RwcmVwIGdlbmVyYXRlZC1oZWFkZXItc3ltbGlua3MK KworZGlzdHByZXA6IG5vZGUtc3VwcG9ydC1zdGFtcAorCisuUEhPTlk6IGdlbmVyYXRlZC1o ZWFkZXItc3ltbGlua3MKKworZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rczogJCh0b3BfYnVp bGRkaXIpL3NyYy9pbmNsdWRlL25vZGVzL2hlYWRlci1zdGFtcAorCitub2RlLXN1cHBvcnQt c3RhbXA6IGdlbl9ub2RlX3N1cHBvcnQucGwgJChhZGRwcmVmaXggJCh0b3Bfc3JjZGlyKS9z cmMvaW5jbHVkZS8sJChub2RlX2hlYWRlcnMpKQorCSQoUEVSTCkgJF4KKwl0b3VjaCAkQAor CiskKHRvcF9idWlsZGRpcikvc3JjL2luY2x1ZGUvbm9kZXMvaGVhZGVyLXN0YW1wOiBub2Rl LXN1cHBvcnQtc3RhbXAKKwlwcmVyZXFkaXI9YGNkICckKGRpciAkPCknID4vZGV2L251bGwg JiYgcHdkYCAmJiBcCisJY2QgJyQoZGlyICRAKScgJiYgZm9yIGZpbGUgaW4gbm9kZXRhZ3Mu aDsgZG8gXAorCSAgcm0gLWYgJCRmaWxlICYmICQoTE5fUykgIiQkcHJlcmVxZGlyLyQkZmls ZSIgLiA7IFwKKwlkb25lCisJdG91Y2ggJEAKKworbWFpbnRhaW5lci1jbGVhbjogY2xlYW4K KwlybSAtZiBub2RlLXN1cHBvcnQtc3RhbXAgKmZ1bmNzLmluYz8uYyBub2RldGFncy5oCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9iYWNrZW5k L25vZGVzL2NvcHlmdW5jcy5jCmluZGV4IDkwYjVkYTUxYzkuLmM0N2MwYWNhOWYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L25vZGVzL2NvcHlmdW5jcy5jCkBAIC0yMywxMSArMjMsNyBAQAogI2luY2x1ZGUgInBvc3Rn cmVzLmgiCiAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKLSNpbmNsdWRlICJub2Rlcy9leHRl bnNpYmxlLmgiCi0jaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCi0jaW5jbHVkZSAibm9k ZXMvcGxhbm5vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKLSNpbmNsdWRlICJ1 dGlscy9yZWwuaCIKIAogCiAvKgpAQCAtNzMsNiArNjksOSBAQAogCShuZXdub2RlLT5mbGRu YW1lID0gZnJvbS0+ZmxkbmFtZSkKIAogCisjaW5jbHVkZSAiY29weWZ1bmNzLmluYzEuYyIK KworI2lmZGVmIE9CU09MRVRFCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJIHBsYW5ub2Rlcy5o IGNvcHkgZnVuY3Rpb25zCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDU3LDYgKzE0NTYsNyBAQCBf Y29weVZhcihjb25zdCBWYXIgKmZyb20pCiAKIAlyZXR1cm4gbmV3bm9kZTsKIH0KKyNlbmRp ZiAvKk9CU09MRVRFKi8KIAogLyoKICAqIF9jb3B5Q29uc3QKQEAgLTE0OTYsNiArMTQ5Niw3 IEBAIF9jb3B5Q29uc3QoY29uc3QgQ29uc3QgKmZyb20pCiAJcmV0dXJuIG5ld25vZGU7CiB9 CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqIF9jb3B5UGFyYW0KICAqLwpAQCAtMjczMSw2 ICsyNzMyLDcgQEAgX2NvcHlQYXJhbVJlZihjb25zdCBQYXJhbVJlZiAqZnJvbSkKIAogCXJl dHVybiBuZXdub2RlOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgQV9Db25z dCAqCiBfY29weUFfQ29uc3QoY29uc3QgQV9Db25zdCAqZnJvbSkKQEAgLTI3NzEsNiArMjc3 Myw3IEBAIF9jb3B5QV9Db25zdChjb25zdCBBX0NvbnN0ICpmcm9tKQogCXJldHVybiBuZXdu b2RlOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyBGdW5jQ2FsbCAqCiBfY29weUZ1 bmNDYWxsKGNvbnN0IEZ1bmNDYWxsICpmcm9tKQogewpAQCAtNDkwNiw2ICs0OTA5LDcgQEAg X2NvcHlEcm9wU3Vic2NyaXB0aW9uU3RtdChjb25zdCBEcm9wU3Vic2NyaXB0aW9uU3RtdCAq ZnJvbSkKIAogCXJldHVybiBuZXdub2RlOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCiAgKgkJCQkJZXh0ZW5zaWJsZS5oIGNvcHkgZnVuY3Rpb25zCkBAIC00 OTI4LDYgKzQ5MzIsNyBAQCBfY29weUV4dGVuc2libGVOb2RlKGNvbnN0IEV4dGVuc2libGVO b2RlICpmcm9tKQogCXJldHVybiBuZXdub2RlOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIC8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKICAqCQkJCQl2YWx1ZS5oIGNvcHkgZnVuY3Rpb25zCiAgKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCkBAIC00OTk4LDYgKzUwMDMsNyBAQCBfY29weUZvcmVpZ25LZXlDYWNoZUluZm8oY29u c3QgRm9yZWlnbktleUNhY2hlSW5mbyAqZnJvbSkKIAogCXJldHVybiBuZXdub2RlOwogfQor I2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogY29weU9iamVjdEltcGwgLS0gaW1wbGVt ZW50YXRpb24gb2YgY29weU9iamVjdCgpOyBzZWUgbm9kZXMvbm9kZXMuaApAQCAtNTAxOCw2 ICs1MDI0LDggQEAgY29weU9iamVjdEltcGwoY29uc3Qgdm9pZCAqZnJvbSkKIAogCXN3aXRj aCAobm9kZVRhZyhmcm9tKSkKIAl7CisjaW5jbHVkZSAiY29weWZ1bmNzLmluYzIuYyIKKyNp ZmRlZiBPQlNPTEVURQogCQkJLyoKIAkJCSAqIFBMQU4gTk9ERVMKIAkJCSAqLwpAQCAtNTM3 OCw2ICs1Mzg2LDcgQEAgY29weU9iamVjdEltcGwoY29uc3Qgdm9pZCAqZnJvbSkKIAkJY2Fz ZSBUX0JpdFN0cmluZzoKIAkJCXJldHZhbCA9IF9jb3B5Qml0U3RyaW5nKGZyb20pOwogCQkJ YnJlYWs7CisjZW5kaWYgLypPQlNPTEVURSovCiAKIAkJCS8qCiAJCQkgKiBMSVNUIE5PREVT CkBAIC01Mzk1LDYgKzU0MDQsNyBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9t KQogCQkJcmV0dmFsID0gbGlzdF9jb3B5KGZyb20pOwogCQkJYnJlYWs7CiAKKyNpZmRlZiBP QlNPTEVURQogCQkJLyoKIAkJCSAqIEVYVEVOU0lCTEUgTk9ERVMKIAkJCSAqLwpAQCAtNTkz NCw2ICs1OTQ0LDcgQEAgY29weU9iamVjdEltcGwoY29uc3Qgdm9pZCAqZnJvbSkKIAkJY2Fz ZSBUX0ZvcmVpZ25LZXlDYWNoZUluZm86CiAJCQlyZXR2YWwgPSBfY29weUZvcmVpZ25LZXlD YWNoZUluZm8oZnJvbSk7CiAJCQlicmVhazsKKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogCQlk ZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwg KGludCkgbm9kZVRhZyhmcm9tKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9l cXVhbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKaW5kZXggMDYz NDVkYTNiYS4uMTUyMjc0YTM4YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1 YWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwpAQCAtMTAs OSArMTAsNiBAQAogICogYmVjYXVzZSB0aGUgY2lyY3VsYXIgbGlua2FnZXMgYmV0d2VlbiBS ZWxPcHRJbmZvIGFuZCBQYXRoIG5vZGVzIGNhbid0CiAgKiBiZSBoYW5kbGVkIGVhc2lseSBp biBhIHNpbXBsZSBkZXB0aC1maXJzdCB0cmF2ZXJzYWwuCiAgKgotICogQ3VycmVudGx5LCBp biBmYWN0LCBlcXVhbCgpIGRvZXNuJ3Qga25vdyBob3cgdG8gY29tcGFyZSBQbGFuIHRyZWVz Ci0gKiBlaXRoZXIuICBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgZml4ZWQgc29tZWRheS4KLSAq CiAgKiBOT1RFOiBpdCBpcyBpbnRlbnRpb25hbCB0aGF0IHBhcnNlIGxvY2F0aW9uIGZpZWxk cyAoaW4gbm9kZXMgdGhhdCBoYXZlCiAgKiBvbmUpIGFyZSBub3QgY29tcGFyZWQuICBUaGlz IGlzIGJlY2F1c2Ugd2Ugd2FudCwgZm9yIGV4YW1wbGUsIGEgdmFyaWFibGUKICAqICJ4IiB0 byBiZSBjb25zaWRlcmVkIGVxdWFsKCkgdG8gYW5vdGhlciByZWZlcmVuY2UgdG8gIngiIGlu IHRoZSBxdWVyeS4KQEAgLTMwLDggKzI3LDYgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgog CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCi0jaW5jbHVkZSAibm9kZXMvZXh0ZW5zaWJsZS5o IgotI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVt LmgiCiAKIApAQCAtOTcsNiArOTIsOSBAQAogCSgodm9pZCkgMCkKIAogCisjaW5jbHVkZSAi ZXF1YWxmdW5jcy5pbmMxLmMiCisKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqCVN0dWZmIGZy b20gcHJpbW5vZGVzLmgKICAqLwpAQCAtMTg1LDYgKzE4Myw3IEBAIF9lcXVhbFZhcihjb25z dCBWYXIgKmEsIGNvbnN0IFZhciAqYikKIAogCXJldHVybiB0cnVlOwogfQorI2VuZGlmIC8q T0JTT0xFVEUqLwogCiBzdGF0aWMgYm9vbAogX2VxdWFsQ29uc3QoY29uc3QgQ29uc3QgKmEs IGNvbnN0IENvbnN0ICpiKQpAQCAtMjA3LDYgKzIwNiw3IEBAIF9lcXVhbENvbnN0KGNvbnN0 IENvbnN0ICphLCBjb25zdCBDb25zdCAqYikKIAkJCQkJCWEtPmNvbnN0Ynl2YWwsIGEtPmNv bnN0bGVuKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMgYm9vbAogX2VxdWFsUGFy YW0oY29uc3QgUGFyYW0gKmEsIGNvbnN0IFBhcmFtICpiKQogewpAQCAtOTQ2LDYgKzk0Niw3 IEBAIF9lcXVhbFBsYWNlSG9sZGVySW5mbyhjb25zdCBQbGFjZUhvbGRlckluZm8gKmEsIGNv bnN0IFBsYWNlSG9sZGVySW5mbyAqYikKIAogCXJldHVybiB0cnVlOwogfQorI2VuZGlmIC8q T0JTT0xFVEUqLwogCiAvKgogICogU3R1ZmYgZnJvbSBleHRlbnNpYmxlLmgKQEAgLTk2Nyw2 ICs5NjgsNyBAQCBfZXF1YWxFeHRlbnNpYmxlTm9kZShjb25zdCBFeHRlbnNpYmxlTm9kZSAq YSwgY29uc3QgRXh0ZW5zaWJsZU5vZGUgKmIpCiAJcmV0dXJuIHRydWU7CiB9CiAKKyNpZmRl ZiBPQlNPTEVURQogLyoKICAqIFN0dWZmIGZyb20gcGFyc2Vub2Rlcy5oCiAgKi8KQEAgLTI0 MzIsNiArMjQzNCw3IEBAIF9lcXVhbFBhcmFtUmVmKGNvbnN0IFBhcmFtUmVmICphLCBjb25z dCBQYXJhbVJlZiAqYikKIAogCXJldHVybiB0cnVlOwogfQorI2VuZGlmIC8qT0JTT0xFVEUq LwogCiBzdGF0aWMgYm9vbAogX2VxdWFsQV9Db25zdChjb25zdCBBX0NvbnN0ICphLCBjb25z dCBBX0NvbnN0ICpiKQpAQCAtMjQ0OSw2ICsyNDUyLDcgQEAgX2VxdWFsQV9Db25zdChjb25z dCBBX0NvbnN0ICphLCBjb25zdCBBX0NvbnN0ICpiKQogCXJldHVybiB0cnVlOwogfQogCisj aWZkZWYgT0JTT0xFVEUKIHN0YXRpYyBib29sCiBfZXF1YWxGdW5jQ2FsbChjb25zdCBGdW5j Q2FsbCAqYSwgY29uc3QgRnVuY0NhbGwgKmIpCiB7CkBAIC0zMDU4LDYgKzMwNjIsNyBAQCBf ZXF1YWxQYXJ0aXRpb25DbWQoY29uc3QgUGFydGl0aW9uQ21kICphLCBjb25zdCBQYXJ0aXRp b25DbWQgKmIpCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAog LyoKICAqIFN0dWZmIGZyb20gcGdfbGlzdC5oCkBAIC0zMTE4LDYgKzMxMjMsNyBAQCBfZXF1 YWxMaXN0KGNvbnN0IExpc3QgKmEsIGNvbnN0IExpc3QgKmIpCiAJcmV0dXJuIHRydWU7CiB9 CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqIFN0dWZmIGZyb20gdmFsdWUuaAogICovCkBA IC0zMTYxLDYgKzMxNjcsNyBAQCBfZXF1YWxCaXRTdHJpbmcoY29uc3QgQml0U3RyaW5nICph LCBjb25zdCBCaXRTdHJpbmcgKmIpCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZiAvKk9C U09MRVRFKi8KIAogLyoKICAqIGVxdWFsCkBAIC0zMTkxLDYgKzMxOTgsOCBAQCBlcXVhbChj b25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCiAJc3dpdGNoIChub2RlVGFnKGEpKQog CXsKKyNpbmNsdWRlICJlcXVhbGZ1bmNzLmluYzIuYyIKKyNpZmRlZiBPQlNPTEVURQogCQkJ LyoKIAkJCSAqIFBSSU1JVElWRSBOT0RFUwogCQkJICovCkBAIC0zMzY5LDYgKzMzNzgsNyBA QCBlcXVhbChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCQljYXNlIFRfUGxhY2VI b2xkZXJJbmZvOgogCQkJcmV0dmFsID0gX2VxdWFsUGxhY2VIb2xkZXJJbmZvKGEsIGIpOwog CQkJYnJlYWs7CisjZW5kaWYgLypPQlNPTEVURSovCiAKIAkJY2FzZSBUX0xpc3Q6CiAJCWNh c2UgVF9JbnRMaXN0OgpAQCAtMzM3Niw2ICszMzg2LDcgQEAgZXF1YWwoY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYikKIAkJCXJldHZhbCA9IF9lcXVhbExpc3QoYSwgYik7CiAJCQli cmVhazsKIAorI2lmZGVmIE9CU09MRVRFCiAJCWNhc2UgVF9JbnRlZ2VyOgogCQkJcmV0dmFs ID0gX2VxdWFsSW50ZWdlcihhLCBiKTsKIAkJCWJyZWFrOwpAQCAtMzkyNCw2ICszOTM1LDcg QEAgZXF1YWwoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIAkJY2FzZSBUX1B1Ymxp Y2F0aW9uVGFibGU6CiAJCQlyZXR2YWwgPSBfZXF1YWxQdWJsaWNhdGlvblRhYmxlKGEsIGIp OwogCQkJYnJlYWs7CisjZW5kaWYgLypPQlNPTEVURSovCiAKIAkJZGVmYXVsdDoKIAkJCWVs b2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsIGIvc3JjL2JhY2tlbmQvbm9k ZXMvZ2VuX25vZGVfc3VwcG9ydC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi5kZWIxMDIzYjJkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvbm9k ZXMvZ2VuX25vZGVfc3VwcG9ydC5wbApAQCAtMCwwICsxLDY2MCBAQAorIyEvdXNyL2Jpbi9w ZXJsCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBHZW5lcmF0ZSBub2RlIHN1cHBvcnQgZmls ZXM6CisjIC0gbm9kZXRhZ3MuaAorIyAtIGNvcHlmdW5jcworIyAtIGVxdWFsZnVuY3MKKyMg LSByZWFkZnVuY3MKKyMgLSBvdXRmdW5jcworIworIyBzcmMvYmFja2VuZC9ub2Rlcy9nZW5f bm9kZV9zdXBwb3J0LnBsCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit1c2Ugc3RyaWN0Owor dXNlIHdhcm5pbmdzOworCit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3VzZSBGaW5kQmluOwor dXNlIGxpYiAiJEZpbmRCaW46OlJlYWxCaW4vLi4vY2F0YWxvZyI7CisKK3VzZSBDYXRhbG9n OyAgIyBmb3IgUmVuYW1lVGVtcEZpbGUKKworCitzdWIgZWxlbQoreworCW15ICR4ID0gc2hp ZnQ7CisJcmV0dXJuIGdyZXAgeyAkXyBlcSAkeCB9IEBfOworfQorCisKK215IEBub2RlX3R5 cGVzID0gcXcoTm9kZSk7CitteSAlbm9kZV90eXBlX2luZm87CisKK215IEBub19jb3B5Owor bXkgQG5vX3JlYWRfd3JpdGU7CisKK215IEBzY2FsYXJfdHlwZXMgPSBxdygKKwliaXRzMzIg Ym9vbCBjaGFyIGRvdWJsZSBpbnQgaW50OCBpbnQxNiBpbnQzMiBpbnQ2NCBsb25nIHVpbnQ4 IHVpbnQxNiB1aW50MzIgdWludDY0CisJQWNsTW9kZSBBdHRyTnVtYmVyIENhcmRpbmFsaXR5 IENvc3QgSW5kZXggT2lkIFNlbGVjdGl2aXR5IFNpemUgU3RyYXRlZ3lOdW1iZXIgU3ViVHJh bnNhY3Rpb25JZCBUaW1lTGluZUlEIFhMb2dSZWNQdHIKKyk7CisKK215IEBlbnVtX3R5cGVz OworCisjIEZvciBhYnN0cmFjdCB0eXBlcyB3ZSB0cmFjayB0aGVpciBmaWVsZHMsIHNvIHRo YXQgc3VidHlwZXMgY2FuIHVzZQorIyB0aGVtLCBidXQgd2UgZG9uJ3QgZW1pdCBhIG5vZGUg dGFnLCBzbyB5b3UgY2FuJ3QgaW5zdGFudGlhdGUgdGhlbS4KK215IEBhYnN0cmFjdF90eXBl cyA9IHF3KAorCU5vZGUgRXhwcgorCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCBIZWFwVHVw bGVUYWJsZVNsb3QgTWluaW1hbFR1cGxlVGFibGVTbG90IFZpcnR1YWxUdXBsZVRhYmxlU2xv dAorCUpvaW5QYXRoCisJUGFydGl0aW9uUHJ1bmVTdGVwCispOworCisjIFNwZWNpYWwgY2Fz ZXMgdGhhdCBlaXRoZXIgZG9uJ3QgaGF2ZSB0aGVpciBvd24gc3RydWN0IG9yIHRoZSBzdHJ1 Y3QKKyMgaXMgbm90IGluIGEgaGVhZGVyIGZpbGUuICBXZSBqdXN0IGdlbmVyYXRlIG5vZGUg dGFncyBmb3IgdGhlbSwgYnV0CisjIHRoZXkgb3RoZXJ3aXNlIGRvbid0IHBhcnRpY2lwYXRl IGluIG5vZGUgc3VwcG9ydC4KK215IEBleHRyYV90YWdzID0gcXcoCisJSW50TGlzdCBPaWRM aXN0CisJQWxsb2NTZXRDb250ZXh0IEdlbmVyYXRpb25Db250ZXh0IFNsYWJDb250ZXh0CisJ VElEQml0bWFwCisJV2luZG93T2JqZWN0RGF0YQorKTsKKworIyBUaGlzIGlzIGEgcmVndWxh ciBub2RlLCBidXQgd2Ugc2tpcCBwYXJzaW5nIGl0IGZyb20gaXRzIGhlYWRlciBmaWxlCisj IHNpbmNlIHdlIHdvbid0IHVzZSBpdHMgaW50ZXJuYWwgc3RydWN0dXJlIGhlcmUgYW55d2F5 LgorcHVzaCBAbm9kZV90eXBlcywgcXcoTGlzdCk7CisKKyMgcGF0aG5vZGVzLmggZXhjZXB0 aW9ucworcHVzaCBAbm9fY29weSwgcXcoCisJUmVsT3B0SW5mbyBJbmRleE9wdEluZm8gUGF0 aCBQbGFubmVyR2xvYmFsIEVxdWl2YWxlbmNlQ2xhc3MgRXF1aXZhbGVuY2VNZW1iZXIgRm9y ZWlnbktleU9wdEluZm8KKwlHcm91cGluZ1NldERhdGEgSW5jcmVtZW50YWxTb3J0UGF0aCBJ bmRleENsYXVzZSBNaW5NYXhBZ2dJbmZvIFBhdGhUYXJnZXQgUGxhbm5lckluZm8gUGxhbm5l clBhcmFtSXRlbQorCVBhcmFtUGF0aEluZm8gUm9sbHVwRGF0YSBSb3dJZGVudGl0eVZhcklu Zm8gU3RhdGlzdGljRXh0SW5mbworKTsKK3B1c2ggQHNjYWxhcl90eXBlcywgcXcoRXF1aXZh bGVuY2VDbGFzcyogRXF1aXZhbGVuY2VNZW1iZXIqIFF1YWxDb3N0KTsKKworIyBYWFggdmFy aW91cyB0aGluZ3Mgd2UgYXJlIG5vdCBwdWJsaXNoaW5nIHJpZ2h0IG5vdyB0byBzdGF5IGxl dmVsCisjIHdpdGggdGhlIG1hbnVhbCBzeXN0ZW0KK3B1c2ggQG5vX2NvcHksIHF3KENhbGxD b250ZXh0IElubGluZUNvZGVCbG9jayk7CitwdXNoIEBub19yZWFkX3dyaXRlLCBxdyhBY2Nl c3NQcml2IEFsdGVyVGFibGVDbWQgQ2FsbENvbnRleHQgQ3JlYXRlT3BDbGFzc0l0ZW0gRnVu Y3Rpb25QYXJhbWV0ZXIgSW5mZXJDbGF1c2UgSW5saW5lQ29kZUJsb2NrIE9iamVjdFdpdGhB cmdzIE9uQ29uZmxpY3RDbGF1c2UgUGFydGl0aW9uQ21kIFJvbGVTcGVjIFZhY3V1bVJlbGF0 aW9uKTsKKworCisjIyByZWFkIGlucHV0CisKK2ZvcmVhY2ggbXkgJGluZmlsZSAoQEFSR1Yp Cit7CisJbXkgJGluX3N0cnVjdDsKKwlteSAkc3VibGluZTsKKwlteSAkaXNfbm9kZV9zdHJ1 Y3Q7CisJbXkgJHN1cGVydHlwZTsKKwlteSAkc3VwZXJ0eXBlX2ZpZWxkOworCisJbXkgQG15 X2ZpZWxkczsKKwlteSAlbXlfZmllbGRfdHlwZXM7CisJbXkgJW15X2ZpZWxkX2F0dHJzOwor CisJb3BlbiBteSAkaWZoLCAnPCcsICRpbmZpbGUgb3IgZGllICJjb3VsZCBub3Qgb3BlbiBc IiRpbmZpbGVcIjogJCEiOworCisJbXkgJGZpbGVfY29udGVudCA9IGRvIHsgbG9jYWwgJC87 IDwkaWZoPiB9OworCisJIyBzdHJpcCBDIGNvbW1lbnRzCisJJGZpbGVfY29udGVudCA9fiBz ey9cKi4qP1wqL317fWdzOworCisJZm9yZWFjaCBteSAkbGluZSAoc3BsaXQgL1xuLywgJGZp bGVfY29udGVudCkKKwl7CisJCWNob21wICRsaW5lOworCQkkbGluZSA9fiBzL1xzKiQvLzsK KwkJbmV4dCBpZiAkbGluZSBlcSAnJzsKKwkJbmV4dCBpZiAkbGluZSA9fiAvXiMoZGVmaW5l fGlmZGVmfGVuZGlmKS87CisKKwkJaWYgKCRpbl9zdHJ1Y3QpCisJCXsKKwkJCSRzdWJsaW5l Kys7CisKKwkJCSMgZmlyc3QgbGluZSBzaG91bGQgaGF2ZSBvcGVuaW5nIGJyYWNlCisJCQlp ZiAoJHN1YmxpbmUgPT0gMSkKKwkJCXsKKwkJCQkkaXNfbm9kZV9zdHJ1Y3QgPSAwOworCQkJ CSRzdXBlcnR5cGUgPSB1bmRlZjsKKwkJCQluZXh0IGlmICRsaW5lIGVxICd7JzsKKwkJCQlk aWU7CisJCQl9CisJCQkjIHNlY29uZCBsaW5lIHNob3VsZCBoYXZlIG5vZGUgdGFnIG9yIHN1 cGVydHlwZQorCQkJZWxzaWYgKCRzdWJsaW5lID09IDIpCisJCQl7CisJCQkJaWYgKCRsaW5l ID1+IC9eXHMqTm9kZVRhZ1xzK3R5cGU7LykKKwkJCQl7CisJCQkJCSRpc19ub2RlX3N0cnVj dCA9IDE7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCWVsc2lmICgkbGluZSA9fiAvXHMqKFx3 KylccysoXHcrKTsvIGFuZCBlbGVtICQxLCBAbm9kZV90eXBlcykKKwkJCQl7CisJCQkJCSRp c19ub2RlX3N0cnVjdCA9IDE7CisJCQkJCSRzdXBlcnR5cGUgPSAkMTsKKwkJCQkJJHN1cGVy dHlwZV9maWVsZCA9ICQyOworCQkJCQluZXh0OworCQkJCX0KKwkJCX0KKworCQkJIyBlbmQg b2Ygc3RydWN0CisJCQlpZiAoJGxpbmUgPX4gL15cfVxzKiRpbl9zdHJ1Y3Q7JC8gfHwgJGxp bmUgPX4gL15cfTskLykKKwkJCXsKKwkJCQlpZiAoJGlzX25vZGVfc3RydWN0KQorCQkJCXsK KwkJCQkJcHVzaCBAbm9kZV90eXBlcywgJGluX3N0cnVjdDsKKwkJCQkJbXkgQGYgPSBAbXlf ZmllbGRzOworCQkJCQlteSAlZnQgPSAlbXlfZmllbGRfdHlwZXM7CisJCQkJCW15ICVmYSA9 ICVteV9maWVsZF9hdHRyczsKKwkJCQkJaWYgKCRzdXBlcnR5cGUpCisJCQkJCXsKKwkJCQkJ CW15IEBzdXBlcmZpZWxkczsKKwkJCQkJCWZvcmVhY2ggbXkgJHNmIChAeyRub2RlX3R5cGVf aW5mb3skc3VwZXJ0eXBlfS0+e2ZpZWxkc319KQorCQkJCQkJeworCQkJCQkJCW15ICRmbiA9 ICIke3N1cGVydHlwZV9maWVsZH0uJHNmIjsKKwkJCQkJCQlwdXNoIEBzdXBlcmZpZWxkcywg JGZuOworCQkJCQkJCSRmdHskZm59ID0gJG5vZGVfdHlwZV9pbmZveyRzdXBlcnR5cGV9LT57 ZmllbGRfdHlwZXN9eyRzZn07CisJCQkJCQkJJGZheyRmbn0gPSAkbm9kZV90eXBlX2luZm97 JHN1cGVydHlwZX0tPntmaWVsZF9hdHRyc317JHNmfTsKKwkJCQkJCQkkZmF7JGZufSA9fiBz L2FycmF5X3NpemVcKChcdyspXCkvYXJyYXlfc2l6ZSgke3N1cGVydHlwZV9maWVsZH0uJDEp LyBpZiAkZmF7JGZufTsKKwkJCQkJCX0KKwkJCQkJCXVuc2hpZnQgQGYsIEBzdXBlcmZpZWxk czsKKwkJCQkJfQorCQkJCQkkbm9kZV90eXBlX2luZm97JGluX3N0cnVjdH0tPntmaWVsZHN9 ID0gXEBmOworCQkJCQkkbm9kZV90eXBlX2luZm97JGluX3N0cnVjdH0tPntmaWVsZF90eXBl c30gPSBcJWZ0OworCQkJCQkkbm9kZV90eXBlX2luZm97JGluX3N0cnVjdH0tPntmaWVsZF9h dHRyc30gPSBcJWZhOworCisJCQkJCWlmIChlbGVtIGJhc2VuYW1lKCRpbmZpbGUpLAorCQkJ CQkJcXcoZXhlY25vZGVzLmggdHJpZ2dlci5oIGV2ZW50X3RyaWdnZXIuaCBhbWFwaS5oIHRh YmxlYW0uaAorCQkJCQkJCXRzbWFwaS5oIGZkd2FwaS5oIHR1cHRhYmxlLmggcmVwbG5vZGVz Lmggc3VwcG9ydG5vZGVzLmgpKQorCQkJCQl7CisJCQkJCQlwdXNoIEBub19jb3B5LCAkaW5f c3RydWN0OworCQkJCQkJcHVzaCBAbm9fcmVhZF93cml0ZSwgJGluX3N0cnVjdDsKKwkJCQkJ fQorCisJCQkJCWlmICgkc3VwZXJ0eXBlICYmICgkc3VwZXJ0eXBlIGVxICdQYXRoJyB8fCAk c3VwZXJ0eXBlIGVxICdKb2luUGF0aCcpKQorCQkJCQl7CisJCQkJCQlwdXNoIEBub19jb3B5 LCAkaW5fc3RydWN0OworCQkJCQl9CisJCQkJfQorCisJCQkJIyBzdGFydCBuZXcgY3ljbGUK KwkJCQkkaW5fc3RydWN0ID0gdW5kZWY7CisJCQkJQG15X2ZpZWxkcyA9ICgpOworCQkJCSVt eV9maWVsZF90eXBlcyA9ICgpOworCQkJCSVteV9maWVsZF9hdHRycyA9ICgpOworCQkJfQor CQkJIyBub3JtYWwgc3RydWN0IGZpZWxkCisJCQllbHNpZiAoJGxpbmUgPX4gL15ccyooLisp XHMqXGIoXHcrKShcW1x3K1xdKT9ccyooPzpwZ19ub2RlX2F0dHJcKChbXHcoKSBdKilcKSk/ Oy8pCisJCQl7CisJCQkJaWYgKCRpc19ub2RlX3N0cnVjdCkKKwkJCQl7CisJCQkJCW15ICR0 eXBlID0gJDE7CisJCQkJCW15ICRuYW1lID0gJDI7CisJCQkJCW15ICRhcnJheV9zaXplID0g JDM7CisJCQkJCW15ICRhdHRyID0gJDQ7CisKKwkJCQkJJHR5cGUgPX4gcy9eY29uc3Rccyov LzsKKwkJCQkJJHR5cGUgPX4gcy9ccyokLy87CisJCQkJCSR0eXBlID1+IHMvXHMrXCokLyov OworCQkJCQlkaWUgaWYgJHR5cGUgZXEgJyc7CisJCQkJCSR0eXBlID0gJHR5cGUgLiAkYXJy YXlfc2l6ZSBpZiAkYXJyYXlfc2l6ZTsKKwkJCQkJcHVzaCBAbXlfZmllbGRzLCAkbmFtZTsK KwkJCQkJJG15X2ZpZWxkX3R5cGVzeyRuYW1lfSA9ICR0eXBlOworCQkJCQkkbXlfZmllbGRf YXR0cnN7JG5hbWV9ID0gJGF0dHI7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CWlmICgkaXNfbm9kZV9zdHJ1Y3QpCisJCQkJeworCQkJCQkjd2FybiAiJGluZmlsZTokLjog Y291bGQgbm90IHBhcnNlIFwiJGxpbmVcIlxuIjsKKwkJCQl9CisJCQl9CisJCX0KKwkJIyBu b3QgaW4gYSBzdHJ1Y3QKKwkJZWxzZQorCQl7CisJCQkjIHN0YXJ0IG9mIGEgc3RydWN0Pwor CQkJaWYgKCRsaW5lID1+IC9eKD86dHlwZWRlZiApP3N0cnVjdCAoXHcrKShccypcL1wqLiop PyQvICYmICQxIG5lICdOb2RlJykKKwkJCXsKKwkJCQkkaW5fc3RydWN0ID0gJDE7CisJCQkJ JHN1YmxpbmUgPSAwOworCQkJfQorCQkJIyBvbmUgbm9kZSB0eXBlIHR5cGVkZWYnZWQgZGly ZWN0bHkgZnJvbSBhbm90aGVyCisJCQllbHNpZiAoJGxpbmUgPX4gL150eXBlZGVmIChcdysp IChcdyspOyQvIGFuZCBlbGVtICQxLCBAbm9kZV90eXBlcykKKwkJCXsKKwkJCQlteSAkYWxp YXNfb2YgPSAkMTsKKwkJCQlteSAkbiA9ICQyOworCisJCQkJcHVzaCBAbm9kZV90eXBlcywg JG47CisJCQkJbXkgQGYgPSBAeyRub2RlX3R5cGVfaW5mb3skYWxpYXNfb2Z9LT57ZmllbGRz fX07CisJCQkJbXkgJWZ0ID0gJXskbm9kZV90eXBlX2luZm97JGFsaWFzX29mfS0+e2ZpZWxk X3R5cGVzfX07CisJCQkJbXkgJWZhID0gJXskbm9kZV90eXBlX2luZm97JGFsaWFzX29mfS0+ e2ZpZWxkX2F0dHJzfX07CisJCQkJJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkc30gPSBc QGY7CisJCQkJJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX3R5cGVzfSA9IFwlZnQ7CisJ CQkJJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX2F0dHJzfSA9IFwlZmE7CisJCQl9CisJ CQkjIGNvbGxlY3QgZW51bSBuYW1lcworCQkJZWxzaWYgKCRsaW5lID1+IC9edHlwZWRlZiBl bnVtIChcdyspKFxzKlwvXCouKik/JC8pCisJCQl7CisJCQkJcHVzaCBAZW51bV90eXBlcywg JDE7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoJGluX3N0cnVjdCkKKwl7CisJCWRpZSAicnVu YXdheSBcIiRpbl9zdHJ1Y3RcIiBpbiBmaWxlIFwiJGluZmlsZVwiXG4iOworCX0KKworCWNs b3NlICRpZmg7Cit9ICMgZm9yIGVhY2ggZmlsZQorCisKKyMjIHdyaXRlIG91dHB1dAorCitt eSAkdG1wZXh0ICA9ICIudG1wJCQiOworCisjIG5vZGV0YWdzLmgKKworb3BlbiBteSAkbnQs ICc+JywgJ25vZGV0YWdzLmgnIC4gJHRtcGV4dCBvciBkaWUgJCE7CisKK215ICRpID0gMTsK K2ZvcmVhY2ggbXkgJG4gKEBub2RlX3R5cGVzLEBleHRyYV90YWdzKQoreworCW5leHQgaWYg ZWxlbSAkbiwgQGFic3RyYWN0X3R5cGVzOworCXByaW50ICRudCAiXHRUXyR7bn0gPSAkaSxc biI7CisJJGkrKzsKK30KKworY2xvc2UgJG50OworCisKKyMgI2luY2x1ZGUgbGluZXMgbmVj ZXNzYXJ5IHRvIHB1bGwgaW4gYWxsIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbnMKK215ICRub2Rl X2luY2x1ZGVzID0gJyc7Citmb3JlYWNoIG15ICRpbmZpbGUgKHNvcnQgQEFSR1YpCit7CisJ JGluZmlsZSA9fiBzIS4qc3JjL2luY2x1ZGUvISE7CisJJG5vZGVfaW5jbHVkZXMgLj0gcXF7 I2luY2x1ZGUgIiRpbmZpbGUiXG59OworfQorCisKKyMgY29weWZ1bmNzLmMsIGVxdWFsZnVu Y3MuYworCitvcGVuIG15ICRjZiwgJz4nLCAnY29weWZ1bmNzLmluYzEuYycgLiAkdG1wZXh0 IG9yIGRpZSAkITsKK29wZW4gbXkgJGVmLCAnPicsICdlcXVhbGZ1bmNzLmluYzEuYycgLiAk dG1wZXh0IG9yIGRpZSAkITsKK29wZW4gbXkgJGNmMiwgJz4nLCAnY29weWZ1bmNzLmluYzIu YycgLiAkdG1wZXh0IG9yIGRpZSAkITsKK29wZW4gbXkgJGVmMiwgJz4nLCAnZXF1YWxmdW5j cy5pbmMyLmMnIC4gJHRtcGV4dCBvciBkaWUgJCE7CisKK3ByaW50ICRjZiAkbm9kZV9pbmNs dWRlczsKK3ByaW50ICRlZiAkbm9kZV9pbmNsdWRlczsKKworbXkgQGN1c3RvbV9jb3B5ID0g cXcoQV9Db25zdCBDb25zdCBFeHRlbnNpYmxlTm9kZSk7CisKK2ZvcmVhY2ggbXkgJG4gKEBu b2RlX3R5cGVzKQoreworCW5leHQgaWYgZWxlbSAkbiwgQGFic3RyYWN0X3R5cGVzOworCW5l eHQgaWYgZWxlbSAkbiwgQG5vX2NvcHk7CisJbmV4dCBpZiAkbiBlcSAnTGlzdCc7CisKKwlw cmludCAkY2YyICIKK1x0XHRjYXNlIFRfJHtufToKK1x0XHRcdHJldHZhbCA9IF9jb3B5JHtu fShmcm9tKTsKK1x0XHRcdGJyZWFrOyI7CisKKwlwcmludCAkZWYyICIKK1x0XHRjYXNlIFRf JHtufToKK1x0XHRcdHJldHZhbCA9IF9lcXVhbCR7bn0oYSwgYik7CitcdFx0XHRicmVhazsi OworCisJbmV4dCBpZiBlbGVtICRuLCBAY3VzdG9tX2NvcHk7CisKKwlwcmludCAkY2YgIgor c3RhdGljICRuICoKK19jb3B5JHtufShjb25zdCAkbiAqZnJvbSkKK3sKK1x0JHtufSAqbmV3 bm9kZSA9IG1ha2VOb2RlKCRuKTsKKworIjsKKworCXByaW50ICRlZiAiCitzdGF0aWMgYm9v bAorX2VxdWFsJHtufShjb25zdCAkbiAqYSwgY29uc3QgJG4gKmIpCit7CisiOworCisJZm9y ZWFjaCBteSAkZiAoQHskbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRzfX0pCisJeworCQlt eSAkdCA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF90eXBlc317JGZ9OworCQlteSAk YSA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF9hdHRyc317JGZ9IHx8ICcnOworCQlt eSAkY29weV9pZ25vcmUgPSAoJGEgPX4gL1xiY29weV9pZ25vcmVcYi8pOworCQlteSAkZXF1 YWxfaWdub3JlID0gKCRhID1+IC9cYmVxdWFsX2lnbm9yZVxiLyk7CisJCWlmICgkdCBlcSAn Y2hhcionKQorCQl7CisJCQlwcmludCAkY2YgIlx0Q09QWV9TVFJJTkdfRklFTEQoJGYpO1xu IiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmICJcdENPTVBBUkVfU1RSSU5H X0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25vcmU7CisJCX0KKwkJZWxzaWYgKCR0 IGVxICdCaXRtYXBzZXQqJyB8fCAkdCBlcSAnUmVsaWRzJykKKwkJeworCQkJcHJpbnQgJGNm ICJcdENPUFlfQklUTUFQU0VUX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRjb3B5X2lnbm9yZTsK KwkJCXByaW50ICRlZiAiXHRDT01QQVJFX0JJVE1BUFNFVF9GSUVMRCgkZik7XG4iIHVubGVz cyAkZXF1YWxfaWdub3JlOworCQl9CisJCWVsc2lmICgkdCBlcSAnaW50JyAmJiAkZiA9fiAn bG9jYXRpb24kJykKKwkJeworCQkJcHJpbnQgJGNmICJcdENPUFlfTE9DQVRJT05fRklFTEQo JGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmICJcdENPTVBBUkVf TE9DQVRJT05fRklFTEQoJGYpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJfQorCQll bHNpZiAoZWxlbSAkdCwgQHNjYWxhcl90eXBlcyBvciBlbGVtICR0LCBAZW51bV90eXBlcykK KwkJeworCQkJcHJpbnQgJGNmICJcdENPUFlfU0NBTEFSX0ZJRUxEKCRmKTtcbiIgdW5sZXNz ICRjb3B5X2lnbm9yZTsKKwkJCWlmICgkYSA9fiAvXGJlcXVhbF9pZ25vcmVfaWZfemVyb1xi LykKKwkJCXsKKwkJCQlwcmludCAkZWYgIlx0aWYgKGEtPiRmICE9IGItPiRmICYmIGEtPiRm ICE9IDAgJiYgYi0+JGYgIT0gMClcblx0XHRyZXR1cm4gZmFsc2U7XG4iOworCQkJfQorCQkJ ZWxzZQorCQkJeworCQkJCXByaW50ICRlZiAiXHRDT01QQVJFX1NDQUxBUl9GSUVMRCgkZik7 XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlIHx8ICR0IGVxICdDb2VyY2lvbkZvcm0nOworCQkJ fQorCQl9CisJCWVsc2lmICgkdCA9fiAvKFx3KylcKi8gYW5kIGVsZW0gJDEsIEBzY2FsYXJf dHlwZXMpCisJCXsKKwkJCW15ICR0dCA9ICQxOworCQkJbXkgJGFycmF5X3NpemVfZmllbGQ7 CisJCQlpZiAoJGEgPX4gL1xiYXJyYXlfc2l6ZS4oW1x3Ll0rKS8pCisJCQl7CisJCQkJJGFy cmF5X3NpemVfZmllbGQgPSAkMTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlkaWUgIm5v IGFycmF5IHNpemUgZGVmaW5lZCBmb3IgJG4uJGYgb2YgdHlwZSAkdCI7CisJCQl9CisJCQlp ZiAoJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX3R5cGVzfXskYXJyYXlfc2l6ZV9maWVs ZH0gZXEgJ0xpc3QqJykKKwkJCXsKKwkJCQlwcmludCAkY2YgIlx0Q09QWV9QT0lOVEVSX0ZJ RUxEKCRmLCBsaXN0X2xlbmd0aChmcm9tLT4kYXJyYXlfc2l6ZV9maWVsZCkgKiBzaXplb2Yo JHR0KSk7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQkJcHJpbnQgJGVmICJcdENPTVBB UkVfUE9JTlRFUl9GSUVMRCgkZiwgbGlzdF9sZW5ndGgoYS0+JGFycmF5X3NpemVfZmllbGQp ICogc2l6ZW9mKCR0dCkpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQlwcmludCAkY2YgIlx0Q09QWV9QT0lOVEVSX0ZJRUxEKCRmLCBmcm9t LT4kYXJyYXlfc2l6ZV9maWVsZCAqIHNpemVvZigkdHQpKTtcbiIgdW5sZXNzICRjb3B5X2ln bm9yZTsKKwkJCQlwcmludCAkZWYgIlx0Q09NUEFSRV9QT0lOVEVSX0ZJRUxEKCRmLCBhLT4k YXJyYXlfc2l6ZV9maWVsZCAqIHNpemVvZigkdHQpKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25v cmU7CisJCQl9CisJCX0KKwkJZWxzaWYgKCR0ID1+IC8oXHcrKVwqLyBhbmQgZWxlbSAkMSwg QG5vZGVfdHlwZXMpCisJCXsKKwkJCXByaW50ICRjZiAiXHRDT1BZX05PREVfRklFTEQoJGYp O1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmICJcdENPTVBBUkVfTk9E RV9GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlOworCQl9CisJCWVsc2lmICgk dCA9fiAvXHcrXFsvKQorCQl7CisJCQlwcmludCAkY2YgIlx0Q09QWV9BUlJBWV9GSUVMRCgk Zik7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQlwcmludCAkZWYgIlx0Q09NUEFSRV9B UlJBWV9GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlOworCQl9CisJCWVsc2lm ICgkdCBlcSAnc3RydWN0IEN1c3RvbVBhdGhNZXRob2RzKicgfHwJJHQgZXEgJ3N0cnVjdCBD dXN0b21TY2FuTWV0aG9kcyonKQorCQl7CisJCQlwcmludCAkY2YgIlx0Q09QWV9TQ0FMQVJf RklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmICJcdENP TVBBUkVfU0NBTEFSX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25vcmU7CisJCX0K KwkJZWxzZQorCQl7CisJCQlkaWUgImNvdWxkIG5vdCBoYW5kbGUgdHlwZSBcIiR0XCIgaW4g c3RydWN0IFwiJG5cIiBmaWVsZCBcIiRmXCIiOworCQl9CisJfQorCisJcHJpbnQgJGNmICIK K1x0cmV0dXJuIG5ld25vZGU7Cit9CisiOworCXByaW50ICRlZiAiCitcdHJldHVybiB0cnVl OworfQorIjsKK30KKworY2xvc2UgJGNmOworY2xvc2UgJGVmOworY2xvc2UgJGNmMjsKK2Ns b3NlICRlZjI7CisKKworIyBvdXRmdW5jcy5jLCByZWFkZnVuY3MuYworCitvcGVuIG15ICRv ZiwgJz4nLCAnb3V0ZnVuY3MuaW5jMS5jJyAuICR0bXBleHQgb3IgZGllICQhOworb3BlbiBt eSAkcmYsICc+JywgJ3JlYWRmdW5jcy5pbmMxLmMnIC4gJHRtcGV4dCBvciBkaWUgJCE7Citv cGVuIG15ICRvZjIsICc+JywgJ291dGZ1bmNzLmluYzIuYycgLiAkdG1wZXh0IG9yIGRpZSAk ITsKK29wZW4gbXkgJHJmMiwgJz4nLCAncmVhZGZ1bmNzLmluYzIuYycgLiAkdG1wZXh0IG9y IGRpZSAkITsKKworcHJpbnQgJG9mICRub2RlX2luY2x1ZGVzOworcHJpbnQgJHJmICRub2Rl X2luY2x1ZGVzOworCitteSBAY3VzdG9tX3JlYWR3cml0ZSA9IHF3KEFfQ29uc3QgQV9FeHBy IEJvb2xFeHByIENvbnN0IENvbnN0cmFpbnQgRXh0ZW5zaWJsZU5vZGUgUXVlcnkgUmFuZ2VU YmxFbnRyeSk7CisKK2ZvcmVhY2ggbXkgJG4gKEBub2RlX3R5cGVzKQoreworCW5leHQgaWYg ZWxlbSAkbiwgQGFic3RyYWN0X3R5cGVzOworCW5leHQgaWYgZWxlbSAkbiwgQG5vX3JlYWRf d3JpdGU7CisJbmV4dCBpZiAkbiBlcSAnTGlzdCc7CisJbmV4dCBpZiBlbGVtICRuLCBxdyhC aXRTdHJpbmcgQm9vbGVhbiBGbG9hdCBJbnRlZ2VyIFN0cmluZyk7CisKKwkjIFhYWCBGb3Ig bm93LCBza2lwIGFsbCAiU3RtdCJzIGV4Y2VwdCB0aGF0IG9uZXMgdGhhdCB3ZXJlIHRoZXJl IGJlZm9yZS4KKwlpZiAoJG4gPX4gL1N0bXQkLykKKwl7CisJCW15IEBrZWVwID0gcXcoQWx0 ZXJTdGF0c1N0bXQgQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCBDcmVhdGVTdGF0c1N0bXQgQ3Jl YXRlU3RtdCBEZWNsYXJlQ3Vyc29yU3RtdCBJbXBvcnRGb3JlaWduU2NoZW1hU3RtdCBJbmRl eFN0bXQgTm90aWZ5U3RtdCBQbGFubmVkU3RtdCBQTEFzc2lnblN0bXQgUmF3U3RtdCBSZXR1 cm5TdG10IFNlbGVjdFN0bXQgU2V0T3BlcmF0aW9uU3RtdCk7CisJCW5leHQgdW5sZXNzIGVs ZW0gJG4sIEBrZWVwOworCX0KKworCSMgWFhYIEFsc28gc2tpcCByZWFkIHN1cHBvcnQgZm9y IHRob3NlIHRoYXQgZGlkbid0IGhhdmUgaXQgYmVmb3JlLgorCW15ICRub19yZWFkID0gKCRu IGVxICdBX1N0YXInIHx8ICRuIGVxICdBX0NvbnN0JyB8fCAkbiBlcSAnQV9FeHByJyB8fCAk biBlcSAnQ29uc3RyYWludCcgfHwgJG4gPX4gL1BhdGgkLyB8fCAkbiBlcSAnRm9yZWlnbktl eUNhY2hlSW5mbycgfHwgJG4gZXEgJ0ZvcmVpZ25LZXlPcHRJbmZvJyB8fCAkbiBlcSAnUGF0 aFRhcmdldCcpOworCisJbXkgJE4gPSB1YyAkbjsKKwkkTiA9fiBzL18vL2c7CisKKwlwcmlu dCAkb2YyICJcdFx0XHRjYXNlIFRfJHtufTpcbiIuCisJICAiXHRcdFx0XHRfb3V0JHtufShz dHIsIG9iaik7XG4iLgorCSAgIlx0XHRcdFx0YnJlYWs7XG4iOworCisJcHJpbnQgJHJmMiAi XHRlbHNlIGlmIChNQVRDSChcIiROXCIsICIgLiBsZW5ndGgoJE4pIC4gIikpXG4iLgorCSAg Ilx0XHRyZXR1cm5fdmFsdWUgPSBfcmVhZCR7bn0oKTtcbiIgdW5sZXNzICRub19yZWFkOwor CisJbmV4dCBpZiBlbGVtICRuLCBAY3VzdG9tX3JlYWR3cml0ZTsKKworCXByaW50ICRvZiAi CitzdGF0aWMgdm9pZAorX291dCR7bn0oU3RyaW5nSW5mbyBzdHIsIGNvbnN0ICRuICpub2Rl KQoreworXHRXUklURV9OT0RFX1RZUEUoXCIkTlwiKTsKKworIjsKKworCXByaW50ICRyZiAi CitzdGF0aWMgJG4gKgorX3JlYWQke259KHZvaWQpCit7CitcdFJFQURfTE9DQUxTKCRuKTsK KworIiB1bmxlc3MgJG5vX3JlYWQ7CisKKwlmb3JlYWNoIG15ICRmIChAeyRub2RlX3R5cGVf aW5mb3skbn0tPntmaWVsZHN9fSkKKwl7CisJCW15ICR0ID0gJG5vZGVfdHlwZV9pbmZveyRu fS0+e2ZpZWxkX3R5cGVzfXskZn07CisJCW15ICRhID0gJG5vZGVfdHlwZV9pbmZveyRufS0+ e2ZpZWxkX2F0dHJzfXskZn0gfHwgJyc7CisJCW15ICRyZWFkd3JpdGVfaWdub3JlID0gKCRh ID1+IC9cYnJlYWR3cml0ZV9pZ25vcmVcYi8pOworCQluZXh0IGlmICRyZWFkd3JpdGVfaWdu b3JlOworCisJCSMgWFhYIFByZXZpb3VzbHksIGZvciBzdWJ0eXBpbmcsIG9ubHkgdGhlIGxl YWYgZmllbGQgbmFtZSBpcworCQkjIHVzZWQuIFBvbmRlciB3aGV0aGVyIHdlIHdhbnQgdG8g a2VlcCBpdCB0aGF0IHdheS4KKworCQlpZiAoJHQgZXEgJ2Jvb2wnKQorCQl7CisJCQlwcmlu dCAkb2YgIlx0V1JJVEVfQk9PTF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJF QURfQk9PTF9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAo JHQgZXEgJ2ludCcgJiYgJGYgPX4gJ2xvY2F0aW9uJCcpCisJCXsKKwkJCXByaW50ICRvZiAi XHRXUklURV9MT0NBVElPTl9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJFQURf TE9DQVRJT05fRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYg KCR0IGVxICdpbnQnIHx8ICR0IGVxICdpbnQzMicgfHwgJHQgZXEgJ0F0dHJOdW1iZXInIHx8 ICR0IGVxICdTdHJhdGVneU51bWJlcicpCisJCXsKKwkJCXByaW50ICRvZiAiXHRXUklURV9J TlRfRklFTEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZiAiXHRSRUFEX0lOVF9GSUVMRCgkZik7 XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ3VpbnQzMicgfHwg JHQgZXEgJ2JpdHMzMicgfHwgJHQgZXEgJ0FjbE1vZGUnIHx8ICR0IGVxICdCbG9ja051bWJl cicgfHwgJHQgZXEgJ0luZGV4JyB8fCAkdCBlcSAnU3ViVHJhbnNhY3Rpb25JZCcpCisJCXsK KwkJCXByaW50ICRvZiAiXHRXUklURV9VSU5UX0ZJRUxEKCRmKTtcbiI7CisJCQlwcmludCAk cmYgIlx0UkVBRF9VSU5UX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJ CWVsc2lmICgkdCBlcSAndWludDY0JykKKwkJeworCQkJcHJpbnQgJG9mICJcdFdSSVRFX1VJ TlQ2NF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJFQURfVUlOVDY0X0ZJRUxE KCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnT2lkJykK KwkJeworCQkJcHJpbnQgJG9mICJcdFdSSVRFX09JRF9GSUVMRCgkZik7XG4iOworCQkJcHJp bnQgJHJmICJcdFJFQURfT0lEX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9 CisJCWVsc2lmICgkdCBlcSAnbG9uZycpCisJCXsKKwkJCXByaW50ICRvZiAiXHRXUklURV9M T05HX0ZJRUxEKCRmKTtcbiI7CisJCQlwcmludCAkcmYgIlx0UkVBRF9MT05HX0ZJRUxEKCRm KTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnY2hhcicpCisJ CXsKKwkJCXByaW50ICRvZiAiXHRXUklURV9DSEFSX0ZJRUxEKCRmKTtcbiI7CisJCQlwcmlu dCAkcmYgIlx0UkVBRF9DSEFSX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9 CisJCWVsc2lmICgkdCBlcSAnZG91YmxlJykKKwkJeworCQkJcHJpbnQgJG9mICJcdFdSSVRF X0ZMT0FUX0ZJRUxEKCRmLCBcIiUuNmZcIik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJFQURf RkxPQVRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0 IGVxICdDYXJkaW5hbGl0eScpCisJCXsKKwkJCXByaW50ICRvZiAiXHRXUklURV9GTE9BVF9G SUVMRCgkZiwgXCIlLjBmXCIpO1xuIjsKKwkJCXByaW50ICRyZiAiXHRSRUFEX0ZMT0FUX0ZJ RUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnQ29z dCcpCisJCXsKKwkJCXByaW50ICRvZiAiXHRXUklURV9GTE9BVF9GSUVMRCgkZiwgXCIlLjJm XCIpO1xuIjsKKwkJCXByaW50ICRyZiAiXHRSRUFEX0ZMT0FUX0ZJRUxEKCRmKTtcbiIgdW5s ZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnUXVhbENvc3QnKQorCQl7CisJ CQlwcmludCAkb2YgIlx0V1JJVEVfRkxPQVRfRklFTEQoJGYuc3RhcnR1cCwgXCIlLjJmXCIp O1xuIjsKKwkJCXByaW50ICRvZiAiXHRXUklURV9GTE9BVF9GSUVMRCgkZi5wZXJfdHVwbGUs IFwiJS4yZlwiKTtcbiI7CisJCQlwcmludCAkcmYgIlx0UkVBRF9GTE9BVF9GSUVMRCgkZi5z dGFydHVwKTtcbiIgdW5sZXNzICRub19yZWFkOworCQkJcHJpbnQgJHJmICJcdFJFQURfRkxP QVRfRklFTEQoJGYucGVyX3R1cGxlKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVs c2lmICgkdCBlcSAnU2VsZWN0aXZpdHknKQorCQl7CisJCQlwcmludCAkb2YgIlx0V1JJVEVf RkxPQVRfRklFTEQoJGYsIFwiJS40ZlwiKTtcbiI7CisJCQlwcmludCAkcmYgIlx0UkVBRF9G TE9BVF9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQg ZXEgJ2NoYXIqJykKKwkJeworCQkJcHJpbnQgJG9mICJcdFdSSVRFX1NUUklOR19GSUVMRCgk Zik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJFQURfU1RSSU5HX0ZJRUxEKCRmKTtcbiIgdW5s ZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnQml0bWFwc2V0KicgfHwgJHQg ZXEgJ1JlbGlkcycpCisJCXsKKwkJCXByaW50ICRvZiAiXHRXUklURV9CSVRNQVBTRVRfRklF TEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZiAiXHRSRUFEX0JJVE1BUFNFVF9GSUVMRCgkZik7 XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoZWxlbSAkdCwgQGVudW1fdHlw ZXMpCisJCXsKKwkJCXByaW50ICRvZiAiXHRXUklURV9FTlVNX0ZJRUxEKCRmLCAkdCk7XG4i OworCQkJcHJpbnQgJHJmICJcdFJFQURfRU5VTV9GSUVMRCgkZiwgJHQpO1xuIiB1bmxlc3Mg JG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0ID1+IC8oXHcrKShcKnxcWykvIGFuZCBlbGVt ICQxLCBAc2NhbGFyX3R5cGVzKQorCQl7CisJCQlteSAkdHQgPSB1YyAkMTsKKwkJCW15ICRh cnJheV9zaXplX2ZpZWxkOworCQkJaWYgKCRhID1+IC9cYmFycmF5X3NpemUuKFtcdy5dKykv KQorCQkJeworCQkJCSRhcnJheV9zaXplX2ZpZWxkID0gJDE7CisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJZGllICJubyBhcnJheSBzaXplIGRlZmluZWQgZm9yICRuLiRmIG9mIHR5cGUg JHQiOworCQkJfQorCQkJaWYgKCRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF90eXBlc317 JGFycmF5X3NpemVfZmllbGR9IGVxICdMaXN0KicpCisJCQl7CisJCQkJcHJpbnQgJG9mICJc dFdSSVRFXyR7dHR9X0FSUkFZKCRmLCBsaXN0X2xlbmd0aChub2RlLT4kYXJyYXlfc2l6ZV9m aWVsZCkpO1xuIjsKKwkJCQlwcmludCAkcmYgIlx0UkVBRF8ke3R0fV9BUlJBWSgkZiwgbGlz dF9sZW5ndGgobG9jYWxfbm9kZS0+JGFycmF5X3NpemVfZmllbGQpKTtcbiIgdW5sZXNzICRu b19yZWFkOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXByaW50ICRvZiAiXHRXUklURV8k e3R0fV9BUlJBWSgkZiwgbm9kZS0+JGFycmF5X3NpemVfZmllbGQpO1xuIjsKKwkJCQlwcmlu dCAkcmYgIlx0UkVBRF8ke3R0fV9BUlJBWSgkZiwgbG9jYWxfbm9kZS0+JGFycmF5X3NpemVf ZmllbGQpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCQl9CisJCX0KKwkJZWxzaWYgKCR0IGVx ICdSZWxPcHRJbmZvKicgJiYgJGEgZXEgJ3BhdGhfaGFjazEnKQorCQl7CisJCQlwcmludCAk b2YgIlx0YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdHIsIFwiIDpwYXJlbnRfcmVsaWRzIFwi KTtcbiIuCisJCQkgICJcdG91dEJpdG1hcHNldChzdHIsIG5vZGUtPiRmLT5yZWxpZHMpO1xu IjsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ1BhdGhUYXJnZXQqJyAmJiAkYSBlcSAncGF0aF9o YWNrMicpCisJCXsKKwkJCShteSAkZjIgPSAkZikgPX4gcy9wYXRodGFyZ2V0L3BhcmVudC87 CisJCQlwcmludCAkb2YgIlx0aWYgKG5vZGUtPiRmICE9IG5vZGUtPiRmMi0+cmVsdGFyZ2V0 KVxuIi4KKwkJCSAgIlx0XHRXUklURV9OT0RFX0ZJRUxEKCRmKTtcbiI7CisJCX0KKwkJZWxz aWYgKCR0IGVxICdQYXJhbVBhdGhJbmZvKicgJiYgJGEgZXEgJ3BhdGhfaGFjazMnKQorCQl7 CisJCQlwcmludCAkb2YgIlx0aWYgKG5vZGUtPiRmKVxuIi4KKwkJCSAgIlx0XHRvdXRCaXRt YXBzZXQoc3RyLCBub2RlLT4kZi0+cHBpX3JlcV9vdXRlcik7XG4iLgorCQkJICAiXHRlbHNl XG4iLgorCQkJICAiXHRcdG91dEJpdG1hcHNldChzdHIsIE5VTEwpO1xuIjsKKwkJfQorCQll bHNpZiAoJHQgPX4gLyhcdyspXCovIGFuZCBlbGVtICQxLCBAbm9kZV90eXBlcykKKwkJewor CQkJcHJpbnQgJG9mICJcdFdSSVRFX05PREVfRklFTEQoJGYpO1xuIjsKKwkJCXByaW50ICRy ZiAiXHRSRUFEX05PREVfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJ ZWxzaWYgKCR0IGVxICdzdHJ1Y3QgQ3VzdG9tUGF0aE1ldGhvZHMqJyB8fAkkdCBlcSAnc3Ry dWN0IEN1c3RvbVNjYW5NZXRob2RzKicpCisJCXsKKwkJCXByaW50ICRvZiBxeworCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoc3RyLCAiIDptZXRob2RzICIpOworCW91dFRva2VuKHN0ciwg bm9kZS0+bWV0aG9kcy0+Q3VzdG9tTmFtZSk7Cit9OworCQkJcHJpbnQgJHJmIHEhCisJewor CQkvKiBMb29rdXAgQ3VzdG9tU2Nhbk1ldGhvZHMgYnkgQ3VzdG9tTmFtZSAqLworCQljaGFy CSAgICpjdXN0b21fbmFtZTsKKwkJY29uc3QgQ3VzdG9tU2Nhbk1ldGhvZHMgKm1ldGhvZHM7 CisJCXRva2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOyAvKiBza2lwIG1ldGhvZHM6ICovCisJ CXRva2VuID0gcGdfc3RydG9rKCZsZW5ndGgpOyAvKiBDdXN0b21OYW1lICovCisJCWN1c3Rv bV9uYW1lID0gbnVsbGFibGVfc3RyaW5nKHRva2VuLCBsZW5ndGgpOworCQltZXRob2RzID0g R2V0Q3VzdG9tU2Nhbk1ldGhvZHMoY3VzdG9tX25hbWUsIGZhbHNlKTsKKwkJbG9jYWxfbm9k ZS0+bWV0aG9kcyA9IG1ldGhvZHM7CisJfQorISB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJ ZWxzaWYgKCR0IGVxICdQYXJhbUxpc3RJbmZvJyB8fCAkdCA9fiAvUGFydGl0aW9uQm91bmRJ bmZvRGF0YS8gfHwgJHQgZXEgJ1BhcnRpdGlvbkRpcmVjdG9yeScgfHwgJHQgZXEgJ1BhcnRp dGlvblNjaGVtZScgfHwgJHQgZXEgJ3ZvaWQqJyB8fCAkdCA9fiAvXCpcKiQvKQorCQl7CisJ CQkjIGlnbm9yZQorCQl9CisJCWVsc2UKKwkJeworCQkJZGllICJjb3VsZCBub3QgaGFuZGxl IHR5cGUgXCIkdFwiIGluIHN0cnVjdCBcIiRuXCIgZmllbGQgXCIkZlwiIjsKKwkJfQorCX0K KworCXByaW50ICRvZiAifQorIjsKKwlwcmludCAkcmYgIgorXHRSRUFEX0RPTkUoKTsKK30K KyIgdW5sZXNzICRub19yZWFkOworfQorCitjbG9zZSAkb2Y7CitjbG9zZSAkcmY7CitjbG9z ZSAkb2YyOworY2xvc2UgJHJmMjsKKworCitmb3JlYWNoIG15ICRmaWxlIChxdyhub2RldGFn cy5oIGNvcHlmdW5jcy5pbmMxLmMgY29weWZ1bmNzLmluYzIuYyBlcXVhbGZ1bmNzLmluYzEu YyBlcXVhbGZ1bmNzLmluYzIuYyBvdXRmdW5jcy5pbmMxLmMgb3V0ZnVuY3MuaW5jMi5jIHJl YWRmdW5jcy5pbmMxLmMgcmVhZGZ1bmNzLmluYzIuYykpCit7CisJQ2F0YWxvZzo6UmVuYW1l VGVtcEZpbGUoJGZpbGUsICR0bXBleHQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv bm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKaW5kZXgg MmIwMjM2OTM3YS4uNTg2MzE2ZTJlMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMv b3V0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC0zMSwx MSArMzEsMTAgQEAKIAogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCi0jaW5jbHVkZSAibm9kZXMvZXh0ZW5zaWJsZS5oIgotI2luY2x1ZGUg Im5vZGVzL3BhdGhub2Rlcy5oIgotI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorI2lu Y2x1ZGUgIm5vZGVzL2JpdG1hcHNldC5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisj aW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCi0j aW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIHN0YXRpYyB2b2lkIG91dENoYXIoU3RyaW5nSW5m byBzdHIsIGNoYXIgYyk7CiAKQEAgLTI5NSw2ICsyOTQsOSBAQCBvdXREYXR1bShTdHJpbmdJ bmZvIHN0ciwgRGF0dW0gdmFsdWUsIGludCB0eXBsZW4sIGJvb2wgdHlwYnl2YWwpCiB9CiAK IAorI2luY2x1ZGUgIm91dGZ1bmNzLmluYzEuYyIKKworI2lmZGVmIE9CU09MRVRFCiAvKgog ICoJU3R1ZmYgZnJvbSBwbGFubm9kZXMuaAogICovCkBAIC0xMTM2LDYgKzExMzgsNyBAQCBf b3V0VmFyKFN0cmluZ0luZm8gc3RyLCBjb25zdCBWYXIgKm5vZGUpCiAJV1JJVEVfSU5UX0ZJ RUxEKHZhcmF0dG5vc3luKTsKIAlXUklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9 CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyB2b2lkCiBfb3V0Q29uc3QoU3RyaW5n SW5mbyBzdHIsIGNvbnN0IENvbnN0ICpub2RlKQpAQCAtMTE1Nyw2ICsxMTYwLDcgQEAgX291 dENvbnN0KFN0cmluZ0luZm8gc3RyLCBjb25zdCBDb25zdCAqbm9kZSkKIAkJb3V0RGF0dW0o c3RyLCBub2RlLT5jb25zdHZhbHVlLCBub2RlLT5jb25zdGxlbiwgbm9kZS0+Y29uc3RieXZh bCk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIHZvaWQKIF9vdXRQYXJhbShTdHJp bmdJbmZvIHN0ciwgY29uc3QgUGFyYW0gKm5vZGUpCiB7CkBAIC0xMzI3LDYgKzEzMzEsNyBA QCBfb3V0U2NhbGFyQXJyYXlPcEV4cHIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFNjYWxhckFy cmF5T3BFeHByICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoYXJncyk7CiAJV1JJVEVfTE9D QVRJT05fRklFTEQobG9jYXRpb24pOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0 aWMgdm9pZAogX291dEJvb2xFeHByKFN0cmluZ0luZm8gc3RyLCBjb25zdCBCb29sRXhwciAq bm9kZSkKQEAgLTEzNTUsNiArMTM2MCw3IEBAIF9vdXRCb29sRXhwcihTdHJpbmdJbmZvIHN0 ciwgY29uc3QgQm9vbEV4cHIgKm5vZGUpCiAJV1JJVEVfTE9DQVRJT05fRklFTEQobG9jYXRp b24pOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2b2lkCiBfb3V0U3ViTGluayhT dHJpbmdJbmZvIHN0ciwgY29uc3QgU3ViTGluayAqbm9kZSkKIHsKQEAgLTI2NzUsNiArMjY4 MSw3IEBAIF9vdXRQbGFubmVyUGFyYW1JdGVtKFN0cmluZ0luZm8gc3RyLCBjb25zdCBQbGFu bmVyUGFyYW1JdGVtICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoaXRlbSk7CiAJV1JJVEVf SU5UX0ZJRUxEKHBhcmFtSWQpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKICAqCkBAIC0yNjk3LDYgKzI3MDQsNyBAQCBfb3V0RXh0ZW5z aWJsZU5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEV4dGVuc2libGVOb2RlICpub2RlKQog CW1ldGhvZHMtPm5vZGVPdXQoc3RyLCBub2RlKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKglTdHVmZiBmcm9tIHBhcnNlbm9kZXMu aC4KQEAgLTMwMjksNiArMzAzNyw3IEBAIF9vdXRTdGF0c0VsZW0oU3RyaW5nSW5mbyBzdHIs IGNvbnN0IFN0YXRzRWxlbSAqbm9kZSkKIAlXUklURV9TVFJJTkdfRklFTEQobmFtZSk7CiAJ V1JJVEVfTk9ERV9GSUVMRChleHByKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3Rh dGljIHZvaWQKIF9vdXRRdWVyeShTdHJpbmdJbmZvIHN0ciwgY29uc3QgUXVlcnkgKm5vZGUp CkBAIC0zMTAxLDYgKzMxMTAsNyBAQCBfb3V0UXVlcnkoU3RyaW5nSW5mbyBzdHIsIGNvbnN0 IFF1ZXJ5ICpub2RlKQogCVdSSVRFX0lOVF9GSUVMRChzdG10X2xlbik7CiB9CiAKKyNpZmRl ZiBPQlNPTEVURQogc3RhdGljIHZvaWQKIF9vdXRXaXRoQ2hlY2tPcHRpb24oU3RyaW5nSW5m byBzdHIsIGNvbnN0IFdpdGhDaGVja09wdGlvbiAqbm9kZSkKIHsKQEAgLTMyMzksNiArMzI0 OSw3IEBAIF9vdXRTZXRPcGVyYXRpb25TdG10KFN0cmluZ0luZm8gc3RyLCBjb25zdCBTZXRP cGVyYXRpb25TdG10ICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoY29sQ29sbGF0aW9ucyk7 CiAJV1JJVEVfTk9ERV9GSUVMRChncm91cENsYXVzZXMpOwogfQorI2VuZGlmIC8qT0JTT0xF VEUqLwogCiBzdGF0aWMgdm9pZAogX291dFJhbmdlVGJsRW50cnkoU3RyaW5nSW5mbyBzdHIs IGNvbnN0IFJhbmdlVGJsRW50cnkgKm5vZGUpCkBAIC0zMzE5LDYgKzMzMzAsNyBAQCBfb3V0 UmFuZ2VUYmxFbnRyeShTdHJpbmdJbmZvIHN0ciwgY29uc3QgUmFuZ2VUYmxFbnRyeSAqbm9k ZSkKIAlXUklURV9OT0RFX0ZJRUxEKHNlY3VyaXR5UXVhbHMpOwogfQogCisjaWZkZWYgT0JT T0xFVEUKIHN0YXRpYyB2b2lkCiBfb3V0UmFuZ2VUYmxGdW5jdGlvbihTdHJpbmdJbmZvIHN0 ciwgY29uc3QgUmFuZ2VUYmxGdW5jdGlvbiAqbm9kZSkKIHsKQEAgLTMzNDIsNiArMzM1NCw3 IEBAIF9vdXRUYWJsZVNhbXBsZUNsYXVzZShTdHJpbmdJbmZvIHN0ciwgY29uc3QgVGFibGVT YW1wbGVDbGF1c2UgKm5vZGUpCiAJV1JJVEVfTk9ERV9GSUVMRChhcmdzKTsKIAlXUklURV9O T0RFX0ZJRUxEKHJlcGVhdGFibGUpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0 aWMgdm9pZAogX291dEFfRXhwcihTdHJpbmdJbmZvIHN0ciwgY29uc3QgQV9FeHByICpub2Rl KQpAQCAtMzQ2MCw2ICszNDczLDcgQEAgX291dEJpdFN0cmluZyhTdHJpbmdJbmZvIHN0ciwg Y29uc3QgQml0U3RyaW5nICpub2RlKQogCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCBu b2RlLT5ic3ZhbCk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIHZvaWQKIF9vdXRD b2x1bW5SZWYoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IENvbHVtblJlZiAqbm9kZSkKIHsKQEAg LTM0OTEsNiArMzUwNSw3IEBAIF9vdXRSYXdTdG10KFN0cmluZ0luZm8gc3RyLCBjb25zdCBS YXdTdG10ICpub2RlKQogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKHN0bXRfbG9jYXRpb24pOwog CVdSSVRFX0lOVF9GSUVMRChzdG10X2xlbik7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAK IHN0YXRpYyB2b2lkCiBfb3V0QV9Db25zdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQV9Db25z dCAqbm9kZSkKQEAgLTM1MDcsNiArMzUyMiw3IEBAIF9vdXRBX0NvbnN0KFN0cmluZ0luZm8g c3RyLCBjb25zdCBBX0NvbnN0ICpub2RlKQogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0 aW9uKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMgdm9pZAogX291dEFfU3RhcihT dHJpbmdJbmZvIHN0ciwgY29uc3QgQV9TdGFyICpub2RlKQogewpAQCAtMzY1MSw2ICszNjY3 LDcgQEAgX291dFJhbmdlVGFibGVGdW5jQ29sKFN0cmluZ0luZm8gc3RyLCBjb25zdCBSYW5n ZVRhYmxlRnVuY0NvbCAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGNvbGRlZmV4cHIpOwog CVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRF Ki8KIAogc3RhdGljIHZvaWQKIF9vdXRDb25zdHJhaW50KFN0cmluZ0luZm8gc3RyLCBjb25z dCBDb25zdHJhaW50ICpub2RlKQpAQCAtMzc3Miw2ICszNzg5LDcgQEAgX291dENvbnN0cmFp bnQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IENvbnN0cmFpbnQgKm5vZGUpCiAJfQogfQogCisj aWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2b2lkCiBfb3V0Rm9yZWlnbktleUNhY2hlSW5mbyhT dHJpbmdJbmZvIHN0ciwgY29uc3QgRm9yZWlnbktleUNhY2hlSW5mbyAqbm9kZSkKIHsKQEAg LTM4MzIsNiArMzg1MCw3IEBAIF9vdXRQYXJ0aXRpb25SYW5nZURhdHVtKFN0cmluZ0luZm8g c3RyLCBjb25zdCBQYXJ0aXRpb25SYW5nZURhdHVtICpub2RlKQogCVdSSVRFX05PREVfRklF TEQodmFsdWUpOwogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KKyNlbmRp ZiAvKk9CU09MRVRFKi8KIAogLyoKICAqIG91dE5vZGUgLQpAQCAtMzg2Myw2ICszODgyLDgg QEAgb3V0Tm9kZShTdHJpbmdJbmZvIHN0ciwgY29uc3Qgdm9pZCAqb2JqKQogCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihzdHIsICd7Jyk7CiAJCXN3aXRjaCAobm9kZVRhZyhvYmopKQogCQl7 CisjaW5jbHVkZSAib3V0ZnVuY3MuaW5jMi5jIgorI2lmZGVmIE9CU09MRVRFCiAJCQljYXNl IFRfUGxhbm5lZFN0bXQ6CiAJCQkJX291dFBsYW5uZWRTdG10KHN0ciwgb2JqKTsKIAkJCQli cmVhazsKQEAgLTQ1MzUsNiArNDU1Niw3IEBAIG91dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNv bnN0IHZvaWQgKm9iaikKIAkJCWNhc2UgVF9QYXJ0aXRpb25SYW5nZURhdHVtOgogCQkJCV9v dXRQYXJ0aXRpb25SYW5nZURhdHVtKHN0ciwgb2JqKTsKIAkJCQlicmVhazsKKyNlbmRpZiAv Kk9CU09MRVRFKi8KIAogCQkJZGVmYXVsdDoKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv bm9kZXMvcmVhZGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYwppbmRl eCAzZjY4ZjdjMThkLi44YWZjY2QyNTkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rl cy9yZWFkZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYwpAQCAt MzMsOSArMzMsNyBAQAogI2luY2x1ZGUgPG1hdGguaD4KIAogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgotI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIKLSNpbmNsdWRlICJub2Rlcy9w YXJzZW5vZGVzLmgiCi0jaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisjaW5jbHVkZSAi bm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAibm9kZXMvcmVhZGZ1bmNzLmgiCiAKIApA QCAtMjM4LDYgKzIzNiw4IEBAIHJlYWRCaXRtYXBzZXQodm9pZCkKIAlyZXR1cm4gX3JlYWRC aXRtYXBzZXQoKTsKIH0KIAorI2luY2x1ZGUgInJlYWRmdW5jcy5pbmMxLmMiCisKIC8qCiAg KiBfcmVhZFF1ZXJ5CiAgKi8KQEAgLTI4OSw2ICsyODksNyBAQCBfcmVhZFF1ZXJ5KHZvaWQp CiAJUkVBRF9ET05FKCk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqIF9yZWFkTm90 aWZ5U3RtdAogICovCkBAIC01ODcsNiArNTg4LDcgQEAgX3JlYWRWYXIodm9pZCkKIAogCVJF QURfRE9ORSgpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogX3JlYWRDb25z dApAQCAtNjEzLDYgKzYxNSw3IEBAIF9yZWFkQ29uc3Qodm9pZCkKIAlSRUFEX0RPTkUoKTsK IH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgogICogX3JlYWRQYXJhbQogICovCkBAIC04Mzgs NiArODQxLDcgQEAgX3JlYWRTY2FsYXJBcnJheU9wRXhwcih2b2lkKQogCiAJUkVBRF9ET05F KCk7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBfcmVhZEJvb2xFeHByCkBA IC04NjUsNiArODY5LDcgQEAgX3JlYWRCb29sRXhwcih2b2lkKQogCVJFQURfRE9ORSgpOwog fQogCisjaWZkZWYgT0JTT0xFVEUKIC8qCiAgKiBfcmVhZFN1YkxpbmsKICAqLwpAQCAtMTQx OSw2ICsxNDI0LDcgQEAgX3JlYWRBcHBlbmRSZWxJbmZvKHZvaWQpCiAvKgogICoJU3R1ZmYg ZnJvbSBwYXJzZW5vZGVzLmguCiAgKi8KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogLyoKICAq IF9yZWFkUmFuZ2VUYmxFbnRyeQpAQCAtMTUxNCw2ICsxNTIwLDcgQEAgX3JlYWRSYW5nZVRi bEVudHJ5KHZvaWQpCiAJUkVBRF9ET05FKCk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoK ICAqIF9yZWFkUmFuZ2VUYmxGdW5jdGlvbgogICovCkBAIC0yNjM3LDYgKzI2NDQsNyBAQCBf cmVhZEFsdGVybmF0aXZlU3ViUGxhbih2b2lkKQogCiAJUkVBRF9ET05FKCk7CiB9CisjZW5k aWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBfcmVhZEV4dGVuc2libGVOb2RlCkBAIC0yNjY4 LDYgKzI2NzYsNyBAQCBfcmVhZEV4dGVuc2libGVOb2RlKHZvaWQpCiAJUkVBRF9ET05FKCk7 CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqIF9yZWFkUGFydGl0aW9uQm91bmRTcGVj CiAgKi8KQEAgLTI3MDIsNiArMjcxMSw3IEBAIF9yZWFkUGFydGl0aW9uUmFuZ2VEYXR1bSh2 b2lkKQogCiAJUkVBRF9ET05FKCk7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAg KiBwYXJzZU5vZGVTdHJpbmcKQEAgLTI3MjYsNyArMjczNiwxMSBAQCBwYXJzZU5vZGVTdHJp bmcodm9pZCkKICNkZWZpbmUgTUFUQ0godG9rbmFtZSwgbmFtZWxlbikgXAogCShsZW5ndGgg PT0gbmFtZWxlbiAmJiBtZW1jbXAodG9rZW4sIHRva25hbWUsIG5hbWVsZW4pID09IDApCiAK LQlpZiAoTUFUQ0goIlFVRVJZIiwgNSkpCisJaWYgKGZhbHNlKQorCQk7CisjaW5jbHVkZSAi cmVhZGZ1bmNzLmluYzIuYyIKKyNpZmRlZiBPQlNPTEVURQorCWVsc2UgaWYgKE1BVENIKCJR VUVSWSIsIDUpKQogCQlyZXR1cm5fdmFsdWUgPSBfcmVhZFF1ZXJ5KCk7CiAJZWxzZSBpZiAo TUFUQ0goIldJVEhDSEVDS09QVElPTiIsIDE1KSkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRX aXRoQ2hlY2tPcHRpb24oKTsKQEAgLTI5NzQsNiArMjk4OCw3IEBAIHBhcnNlTm9kZVN0cmlu Zyh2b2lkKQogCQlyZXR1cm5fdmFsdWUgPSBfcmVhZFBhcnRpdGlvbkJvdW5kU3BlYygpOwog CWVsc2UgaWYgKE1BVENIKCJQQVJUSVRJT05SQU5HRURBVFVNIiwgMTkpKQogCQlyZXR1cm5f dmFsdWUgPSBfcmVhZFBhcnRpdGlvblJhbmdlRGF0dW0oKTsKKyNlbmRpZiAvKk9CU09MRVRF Ki8KIAllbHNlCiAJewogCQllbG9nKEVSUk9SLCAiYmFkbHkgZm9ybWF0dGVkIG5vZGUgc3Ry aW5nIFwiJS4zMnNcIi4uLiIsIHRva2VuKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzLy5naXRpZ25vcmUgYi9zcmMvaW5jbHVkZS9ub2Rlcy8uZ2l0aWdub3JlCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjk5ZmIxZDM3ODcKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAor L25vZGV0YWdzLmgKKy9oZWFkZXItc3RhbXAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCmluZGV4IGY5ZGRhZmQz NDUuLmNlMGFjYTk3NjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtMjcsNiArMjcsOCBAQCB0eXBl ZGVmIGVudW0gTm9kZVRhZwogewogCVRfSW52YWxpZCA9IDAsCiAKKyNpbmNsdWRlICJub2Rl cy9ub2RldGFncy5oIgorI2lmZGVmIE9CU09MRVRFCiAJLyoKIAkgKiBUQUdTIEZPUiBFWEVD VVRPUiBOT0RFUyAoZXhlY25vZGVzLmgpCiAJICovCkBAIC01MjgsOCArNTMwLDE0IEBAIHR5 cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9TdXBwb3J0UmVxdWVzdENvc3QsCQkvKiBpbiBub2Rl cy9zdXBwb3J0bm9kZXMuaCAqLwogCVRfU3VwcG9ydFJlcXVlc3RSb3dzLAkJLyogaW4gbm9k ZXMvc3VwcG9ydG5vZGVzLmggKi8KIAlUX1N1cHBvcnRSZXF1ZXN0SW5kZXhDb25kaXRpb24J LyogaW4gbm9kZXMvc3VwcG9ydG5vZGVzLmggKi8KKyNlbmRpZiAvKk9CU09MRVRFKi8KIH0g Tm9kZVRhZzsKIAorLyoKKyAqIHVzZWQgaW4gbm9kZSBkZWZpbml0aW9ucyB0byBzZXQgZXh0 cmEgaW5mb3JtYXRpb24gZm9yIGdlbl9ub2RlX3N1cHBvcnQucGwKKyAqLworI2RlZmluZSBw Z19ub2RlX2F0dHIoeCkKKwogLyoKICAqIFRoZSBmaXJzdCBmaWVsZCBvZiBhIG5vZGUgb2Yg YW55IHR5cGUgaXMgZ3VhcmFudGVlZCB0byBiZSB0aGUgTm9kZVRhZy4KICAqIEhlbmNlIHRo ZSB0eXBlIG9mIGFueSBub2RlIGNhbiBiZSBnb3R0ZW4gYnkgY2FzdGluZyBpdCB0byBOb2Rl LiBEZWNsYXJpbmcKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCAzZTliZGM3ODFmLi40 MjQ5ZmZmNDgxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xMjEsNyArMTIxLDcg QEAgdHlwZWRlZiBzdHJ1Y3QgUXVlcnkKIAogCVF1ZXJ5U291cmNlIHF1ZXJ5U291cmNlOwkv KiB3aGVyZSBkaWQgSSBjb21lIGZyb20/ICovCiAKLQl1aW50NjQJCXF1ZXJ5SWQ7CQkvKiBx dWVyeSBpZGVudGlmaWVyIChjYW4gYmUgc2V0IGJ5IHBsdWdpbnMpICovCisJdWludDY0CQlx dWVyeUlkIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJLyogcXVlcnkgaWRlbnRpZmll ciAoY2FuIGJlIHNldCBieSBwbHVnaW5zKSAqLwogCiAJYm9vbAkJY2FuU2V0VGFnOwkJLyog ZG8gSSBzZXQgdGhlIGNvbW1hbmQgcmVzdWx0IHRhZz8gKi8KIApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaAppbmRleCAxZjM4NDViM2ZlLi5lMTZkZDQzMzk0IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaApAQCAtMjI3LDcgKzIyNyw3IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCSAqIEdFUU8u CiAJICovCiAJTGlzdAkgICAqam9pbl9yZWxfbGlzdDsJLyogbGlzdCBvZiBqb2luLXJlbGF0 aW9uIFJlbE9wdEluZm9zICovCi0Jc3RydWN0IEhUQUIgKmpvaW5fcmVsX2hhc2g7IC8qIG9w dGlvbmFsIGhhc2h0YWJsZSBmb3Igam9pbiByZWxhdGlvbnMgKi8KKwlzdHJ1Y3QgSFRBQiAq am9pbl9yZWxfaGFzaCBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7IC8qIG9wdGlv bmFsIGhhc2h0YWJsZSBmb3Igam9pbiByZWxhdGlvbnMgKi8KIAogCS8qCiAJICogV2hlbiBk b2luZyBhIGR5bmFtaWMtcHJvZ3JhbW1pbmctc3R5bGUgam9pbiBzZWFyY2gsIGpvaW5fcmVs X2xldmVsW2tdCkBAIC0zMjksMTAgKzMyOSwxMCBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAlM aXN0CSAgICp1cGRhdGVfY29sbm9zOwogCiAJLyogRmllbGRzIGZpbGxlZCBkdXJpbmcgY3Jl YXRlX3BsYW4oKSBmb3IgdXNlIGluIHNldHJlZnMuYyAqLwotCUF0dHJOdW1iZXIgKmdyb3Vw aW5nX21hcDsJLyogZm9yIEdyb3VwaW5nRnVuYyBmaXh1cCAqLworCUF0dHJOdW1iZXIgKmdy b3VwaW5nX21hcCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZSh1cGRhdGVfY29sbm9zKSk7CS8q IGZvciBHcm91cGluZ0Z1bmMgZml4dXAgKi8KIAlMaXN0CSAgICptaW5tYXhfYWdnczsJLyog TGlzdCBvZiBNaW5NYXhBZ2dJbmZvcyAqLwogCi0JTWVtb3J5Q29udGV4dCBwbGFubmVyX2N4 dDsJLyogY29udGV4dCBob2xkaW5nIFBsYW5uZXJJbmZvICovCisJTWVtb3J5Q29udGV4dCBw bGFubmVyX2N4dCBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8qIGNvbnRleHQg aG9sZGluZyBQbGFubmVySW5mbyAqLwogCiAJQ2FyZGluYWxpdHkJdG90YWxfdGFibGVfcGFn ZXM7CS8qICMgb2YgcGFnZXMgaW4gYWxsIG5vbi1kdW1teSB0YWJsZXMgb2YKIAkJCQkJCQkJ CSAqIHF1ZXJ5ICovCkBAIC0zNjksOCArMzY5LDggQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAJ TGlzdAkgICAqY3VyT3V0ZXJQYXJhbXM7IC8qIG5vdC15ZXQtYXNzaWduZWQgTmVzdExvb3BQ YXJhbXMgKi8KIAogCS8qIFRoZXNlIGZpZWxkcyBhcmUgd29ya3NwYWNlIGZvciBzZXRyZWZz LmMgKi8KLQlib29sCSAgICppc0FsdFN1YnBsYW47CS8qIGFycmF5IGNvcnJlc3BvbmRpbmcg dG8gZ2xvYi0+c3VicGxhbnMgKi8KLQlib29sCSAgICppc1VzZWRTdWJwbGFuOwkvKiBhcnJh eSBjb3JyZXNwb25kaW5nIHRvIGdsb2ItPnN1YnBsYW5zICovCisJYm9vbAkgICAqaXNBbHRT dWJwbGFuIHBnX25vZGVfYXR0cihhcnJheV9zaXplKGN1ck91dGVyUGFyYW1zKSk7CS8qIGFy cmF5IGNvcnJlc3BvbmRpbmcgdG8gZ2xvYi0+c3VicGxhbnMgKi8KKwlib29sCSAgICppc1Vz ZWRTdWJwbGFuIHBnX25vZGVfYXR0cihhcnJheV9zaXplKGN1ck91dGVyUGFyYW1zKSk7CS8q IGFycmF5IGNvcnJlc3BvbmRpbmcgdG8gZ2xvYi0+c3VicGxhbnMgKi8KIAogCS8qIG9wdGlv bmFsIHByaXZhdGUgZGF0YSBmb3Igam9pbl9zZWFyY2hfaG9vaywgZS5nLiwgR0VRTyAqLwog CXZvaWQJICAgKmpvaW5fc2VhcmNoX3ByaXZhdGU7CkBAIC03MTEsOCArNzExLDggQEAgdHlw ZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCVJURUtpbmQJCXJ0ZWtpbmQ7CQkvKiBSRUxBVElP TiwgU1VCUVVFUlksIEZVTkNUSU9OLCBldGMgKi8KIAlBdHRyTnVtYmVyCW1pbl9hdHRyOwkJ Lyogc21hbGxlc3QgYXR0cm5vIG9mIHJlbCAob2Z0ZW4gPDApICovCiAJQXR0ck51bWJlcglt YXhfYXR0cjsJCS8qIGxhcmdlc3QgYXR0cm5vIG9mIHJlbCAqLwotCVJlbGlkcwkgICAqYXR0 cl9uZWVkZWQ7CS8qIGFycmF5IGluZGV4ZWQgW21pbl9hdHRyIC4uIG1heF9hdHRyXSAqLwot CWludDMyCSAgICphdHRyX3dpZHRoczsJLyogYXJyYXkgaW5kZXhlZCBbbWluX2F0dHIgLi4g bWF4X2F0dHJdICovCisJUmVsaWRzCSAgICphdHRyX25lZWRlZCBwZ19ub2RlX2F0dHIocmVh ZHdyaXRlX2lnbm9yZSk7CS8qIGFycmF5IGluZGV4ZWQgW21pbl9hdHRyIC4uIG1heF9hdHRy XSAqLworCWludDMyCSAgICphdHRyX3dpZHRocyBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2ln bm9yZSk7CS8qIGFycmF5IGluZGV4ZWQgW21pbl9hdHRyIC4uIG1heF9hdHRyXSAqLwogCUxp c3QJICAgKmxhdGVyYWxfdmFyczsJLyogTEFURVJBTCBWYXJzIGFuZCBQSFZzIHJlZmVyZW5j ZWQgYnkgcmVsICovCiAJUmVsaWRzCQlsYXRlcmFsX3JlZmVyZW5jZXJzOwkvKiByZWxzIHRo YXQgcmVmZXJlbmNlIG1lIGxhdGVyYWxseSAqLwogCUxpc3QJICAgKmluZGV4bGlzdDsJCS8q IGxpc3Qgb2YgSW5kZXhPcHRJbmZvICovCkBAIC03MzMsMTMgKzczMywxMyBAQCB0eXBlZGVm IHN0cnVjdCBSZWxPcHRJbmZvCiAJT2lkCQkJdXNlcmlkOwkJCS8qIGlkZW50aWZpZXMgdXNl ciB0byBjaGVjayBhY2Nlc3MgYXMgKi8KIAlib29sCQl1c2VyaWRpc2N1cnJlbnQ7CS8qIGpv aW4gaXMgb25seSB2YWxpZCBmb3IgY3VycmVudCB1c2VyICovCiAJLyogdXNlICJzdHJ1Y3Qg RmR3Um91dGluZSIgdG8gYXZvaWQgaW5jbHVkaW5nIGZkd2FwaS5oIGhlcmUgKi8KLQlzdHJ1 Y3QgRmR3Um91dGluZSAqZmR3cm91dGluZTsKKwlzdHJ1Y3QgRmR3Um91dGluZSAqZmR3cm91 dGluZSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CiAJdm9pZAkgICAqZmR3X3By aXZhdGU7CiAKIAkvKiBjYWNoZSBzcGFjZSBmb3IgcmVtZW1iZXJpbmcgaWYgd2UgaGF2ZSBw cm92ZW4gdGhpcyByZWxhdGlvbiB1bmlxdWUgKi8KLQlMaXN0CSAgICp1bmlxdWVfZm9yX3Jl bHM7CS8qIGtub3duIHVuaXF1ZSBmb3IgdGhlc2Ugb3RoZXIgcmVsaWQKKwlMaXN0CSAgICp1 bmlxdWVfZm9yX3JlbHMgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBrbm93 biB1bmlxdWUgZm9yIHRoZXNlIG90aGVyIHJlbGlkCiAJCQkJCQkJCQkgKiBzZXQocykgKi8K LQlMaXN0CSAgICpub25fdW5pcXVlX2Zvcl9yZWxzOwkvKiBrbm93biBub3QgdW5pcXVlIGZv ciB0aGVzZSBzZXQocykgKi8KKwlMaXN0CSAgICpub25fdW5pcXVlX2Zvcl9yZWxzIHBnX25v ZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyoga25vd24gbm90IHVuaXF1ZSBmb3IgdGhl c2Ugc2V0KHMpICovCiAKIAkvKiB1c2VkIGJ5IHZhcmlvdXMgc2NhbnMgYW5kIGpvaW5zOiAq LwogCUxpc3QJICAgKmJhc2VyZXN0cmljdGluZm87CS8qIFJlc3RyaWN0SW5mbyBzdHJ1Y3R1 cmVzIChpZiBiYXNlIHJlbCkgKi8KQEAgLTgzNyw3ICs4MzcsNyBAQCBzdHJ1Y3QgSW5kZXhP cHRJbmZvCiAKIAlPaWQJCQlpbmRleG9pZDsJCS8qIE9JRCBvZiB0aGUgaW5kZXggcmVsYXRp b24gKi8KIAlPaWQJCQlyZWx0YWJsZXNwYWNlOwkvKiB0YWJsZXNwYWNlIG9mIGluZGV4IChu b3QgdGFibGUpICovCi0JUmVsT3B0SW5mbyAqcmVsOwkJCS8qIGJhY2stbGluayB0byBpbmRl eCdzIHRhYmxlICovCisJUmVsT3B0SW5mbyAqcmVsIHBnX25vZGVfYXR0cihyZWFkd3JpdGVf aWdub3JlKTsJCQkvKiBiYWNrLWxpbmsgdG8gaW5kZXgncyB0YWJsZSAqLwogCiAJLyogaW5k ZXgtc2l6ZSBzdGF0aXN0aWNzIChmcm9tIHBnX2NsYXNzIGFuZCBlbHNld2hlcmUpICovCiAJ QmxvY2tOdW1iZXIgcGFnZXM7CQkJLyogbnVtYmVyIG9mIGRpc2sgcGFnZXMgaW4gaW5kZXgg Ki8KQEAgLTg0NywyMCArODQ3LDIwIEBAIHN0cnVjdCBJbmRleE9wdEluZm8KIAkvKiBpbmRl eCBkZXNjcmlwdG9yIGluZm9ybWF0aW9uICovCiAJaW50CQkJbmNvbHVtbnM7CQkvKiBudW1i ZXIgb2YgY29sdW1ucyBpbiBpbmRleCAqLwogCWludAkJCW5rZXljb2x1bW5zOwkvKiBudW1i ZXIgb2Yga2V5IGNvbHVtbnMgaW4gaW5kZXggKi8KLQlpbnQJCSAgICppbmRleGtleXM7CQkv KiBjb2x1bW4gbnVtYmVycyBvZiBpbmRleCdzIGF0dHJpYnV0ZXMgYm90aAorCWludAkJICAg KmluZGV4a2V5cyBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CQkvKiBjb2x1bW4g bnVtYmVycyBvZiBpbmRleCdzIGF0dHJpYnV0ZXMgYm90aAogCQkJCQkJCQkgKiBrZXkgYW5k IGluY2x1ZGVkIGNvbHVtbnMsIG9yIDAgKi8KLQlPaWQJCSAgICppbmRleGNvbGxhdGlvbnM7 CS8qIE9JRHMgb2YgY29sbGF0aW9ucyBvZiBpbmRleCBjb2x1bW5zICovCi0JT2lkCQkgICAq b3BmYW1pbHk7CQkvKiBPSURzIG9mIG9wZXJhdG9yIGZhbWlsaWVzIGZvciBjb2x1bW5zICov Ci0JT2lkCQkgICAqb3BjaW50eXBlOwkJLyogT0lEcyBvZiBvcGNsYXNzIGRlY2xhcmVkIGlu cHV0IGRhdGEgdHlwZXMgKi8KLQlPaWQJCSAgICpzb3J0b3BmYW1pbHk7CS8qIE9JRHMgb2Yg YnRyZWUgb3BmYW1pbGllcywgaWYgb3JkZXJhYmxlICovCi0JYm9vbAkgICAqcmV2ZXJzZV9z b3J0OwkvKiBpcyBzb3J0IG9yZGVyIGRlc2NlbmRpbmc/ICovCi0JYm9vbAkgICAqbnVsbHNf Zmlyc3Q7CS8qIGRvIE5VTExzIGNvbWUgZmlyc3QgaW4gdGhlIHNvcnQgb3JkZXI/ICovCi0J Ynl0ZWEJICAqKm9wY2xhc3NvcHRpb25zOyAvKiBvcGNsYXNzLXNwZWNpZmljIG9wdGlvbnMg Zm9yIGNvbHVtbnMgKi8KLQlib29sCSAgICpjYW5yZXR1cm47CQkvKiB3aGljaCBpbmRleCBj b2xzIGNhbiBiZSByZXR1cm5lZCBpbiBhbgorCU9pZAkJICAgKmluZGV4Y29sbGF0aW9ucyBw Z19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8qIE9JRHMgb2YgY29sbGF0aW9ucyBv ZiBpbmRleCBjb2x1bW5zICovCisJT2lkCQkgICAqb3BmYW1pbHkgcGdfbm9kZV9hdHRyKHJl YWR3cml0ZV9pZ25vcmUpOwkJLyogT0lEcyBvZiBvcGVyYXRvciBmYW1pbGllcyBmb3IgY29s dW1ucyAqLworCU9pZAkJICAgKm9wY2ludHlwZSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2ln bm9yZSk7CQkvKiBPSURzIG9mIG9wY2xhc3MgZGVjbGFyZWQgaW5wdXQgZGF0YSB0eXBlcyAq LworCU9pZAkJICAgKnNvcnRvcGZhbWlseSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9y ZSk7CS8qIE9JRHMgb2YgYnRyZWUgb3BmYW1pbGllcywgaWYgb3JkZXJhYmxlICovCisJYm9v bAkgICAqcmV2ZXJzZV9zb3J0IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyog aXMgc29ydCBvcmRlciBkZXNjZW5kaW5nPyAqLworCWJvb2wJICAgKm51bGxzX2ZpcnN0IHBn X25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyogZG8gTlVMTHMgY29tZSBmaXJzdCBp biB0aGUgc29ydCBvcmRlcj8gKi8KKwlieXRlYQkgICoqb3BjbGFzc29wdGlvbnMgcGdfbm9k ZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOyAvKiBvcGNsYXNzLXNwZWNpZmljIG9wdGlvbnMg Zm9yIGNvbHVtbnMgKi8KKwlib29sCSAgICpjYW5yZXR1cm4gcGdfbm9kZV9hdHRyKHJlYWR3 cml0ZV9pZ25vcmUpOwkJLyogd2hpY2ggaW5kZXggY29scyBjYW4gYmUgcmV0dXJuZWQgaW4g YW4KIAkJCQkJCQkJICogaW5kZXgtb25seSBzY2FuPyAqLwogCU9pZAkJCXJlbGFtOwkJCS8q IE9JRCBvZiB0aGUgYWNjZXNzIG1ldGhvZCAoaW4gcGdfYW0pICovCiAKLQlMaXN0CSAgICpp bmRleHByczsJCS8qIGV4cHJlc3Npb25zIGZvciBub24tc2ltcGxlIGluZGV4IGNvbHVtbnMg Ki8KKwlMaXN0CSAgICppbmRleHBycyBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7 CQkvKiBleHByZXNzaW9ucyBmb3Igbm9uLXNpbXBsZSBpbmRleCBjb2x1bW5zICovCiAJTGlz dAkgICAqaW5kcHJlZDsJCS8qIHByZWRpY2F0ZSBpZiBhIHBhcnRpYWwgaW5kZXgsIGVsc2Ug TklMICovCiAKIAlMaXN0CSAgICppbmRleHRsaXN0OwkJLyogdGFyZ2V0bGlzdCByZXByZXNl bnRpbmcgaW5kZXggY29sdW1ucyAqLwpAQCAtODc3LDE0ICs4NzcsMTQgQEAgc3RydWN0IElu ZGV4T3B0SW5mbwogCWJvb2wJCWh5cG90aGV0aWNhbDsJLyogdHJ1ZSBpZiBpbmRleCBkb2Vz bid0IHJlYWxseSBleGlzdCAqLwogCiAJLyogUmVtYWluaW5nIGZpZWxkcyBhcmUgY29waWVk IGZyb20gdGhlIGluZGV4IEFNJ3MgQVBJIHN0cnVjdDogKi8KLQlib29sCQlhbWNhbm9yZGVy YnlvcDsgLyogZG9lcyBBTSBzdXBwb3J0IG9yZGVyIGJ5IG9wZXJhdG9yIHJlc3VsdD8gKi8K LQlib29sCQlhbW9wdGlvbmFsa2V5OwkvKiBjYW4gcXVlcnkgb21pdCBrZXkgZm9yIHRoZSBm aXJzdCBjb2x1bW4/ICovCi0JYm9vbAkJYW1zZWFyY2hhcnJheTsJLyogY2FuIEFNIGhhbmRs ZSBTY2FsYXJBcnJheU9wRXhwciBxdWFscz8gKi8KLQlib29sCQlhbXNlYXJjaG51bGxzOwkv KiBjYW4gQU0gc2VhcmNoIGZvciBOVUxML05PVCBOVUxMIGVudHJpZXM/ICovCi0JYm9vbAkJ YW1oYXNnZXR0dXBsZTsJLyogZG9lcyBBTSBoYXZlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlPyAq LwotCWJvb2wJCWFtaGFzZ2V0Yml0bWFwOyAvKiBkb2VzIEFNIGhhdmUgYW1nZXRiaXRtYXAg aW50ZXJmYWNlPyAqLwotCWJvb2wJCWFtY2FucGFyYWxsZWw7CS8qIGRvZXMgQU0gc3VwcG9y dCBwYXJhbGxlbCBzY2FuPyAqLwotCWJvb2wJCWFtY2FubWFya3BvczsJLyogZG9lcyBBTSBz dXBwb3J0IG1hcmsvcmVzdG9yZT8gKi8KKwlib29sCQlhbWNhbm9yZGVyYnlvcCBwZ19ub2Rl X2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7IC8qIGRvZXMgQU0gc3VwcG9ydCBvcmRlciBieSBv cGVyYXRvciByZXN1bHQ/ICovCisJYm9vbAkJYW1vcHRpb25hbGtleSBwZ19ub2RlX2F0dHIo cmVhZHdyaXRlX2lnbm9yZSk7CS8qIGNhbiBxdWVyeSBvbWl0IGtleSBmb3IgdGhlIGZpcnN0 IGNvbHVtbj8gKi8KKwlib29sCQlhbXNlYXJjaGFycmF5IHBnX25vZGVfYXR0cihyZWFkd3Jp dGVfaWdub3JlKTsJLyogY2FuIEFNIGhhbmRsZSBTY2FsYXJBcnJheU9wRXhwciBxdWFscz8g Ki8KKwlib29sCQlhbXNlYXJjaG51bGxzIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3Jl KTsJLyogY2FuIEFNIHNlYXJjaCBmb3IgTlVMTC9OT1QgTlVMTCBlbnRyaWVzPyAqLworCWJv b2wJCWFtaGFzZ2V0dHVwbGUgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBk b2VzIEFNIGhhdmUgYW1nZXR0dXBsZSBpbnRlcmZhY2U/ICovCisJYm9vbAkJYW1oYXNnZXRi aXRtYXAgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOyAvKiBkb2VzIEFNIGhhdmUg YW1nZXRiaXRtYXAgaW50ZXJmYWNlPyAqLworCWJvb2wJCWFtY2FucGFyYWxsZWwgcGdfbm9k ZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBkb2VzIEFNIHN1cHBvcnQgcGFyYWxsZWwg c2Nhbj8gKi8KKwlib29sCQlhbWNhbm1hcmtwb3MgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9p Z25vcmUpOwkvKiBkb2VzIEFNIHN1cHBvcnQgbWFyay9yZXN0b3JlPyAqLwogCS8qIFJhdGhl ciB0aGFuIGluY2x1ZGUgYW1hcGkuaCBoZXJlLCB3ZSBkZWNsYXJlIGFtY29zdGVzdGltYXRl IGxpa2UgdGhpcyAqLwogCXZvaWQJCSgqYW1jb3N0ZXN0aW1hdGUpICgpOwkvKiBBTSdzIGNv c3QgZXN0aW1hdG9yICovCiB9OwpAQCAtOTA1LDkgKzkwNSw5IEBAIHR5cGVkZWYgc3RydWN0 IEZvcmVpZ25LZXlPcHRJbmZvCiAJSW5kZXgJCWNvbl9yZWxpZDsJCS8qIFJUIGluZGV4IG9m IHRoZSByZWZlcmVuY2luZyB0YWJsZSAqLwogCUluZGV4CQlyZWZfcmVsaWQ7CQkvKiBSVCBp bmRleCBvZiB0aGUgcmVmZXJlbmNlZCB0YWJsZSAqLwogCWludAkJCW5rZXlzOwkJCS8qIG51 bWJlciBvZiBjb2x1bW5zIGluIHRoZSBmb3JlaWduIGtleSAqLwotCUF0dHJOdW1iZXIJY29u a2V5W0lOREVYX01BWF9LRVlTXTsgLyogY29scyBpbiByZWZlcmVuY2luZyB0YWJsZSAqLwot CUF0dHJOdW1iZXIJY29uZmtleVtJTkRFWF9NQVhfS0VZU107CS8qIGNvbHMgaW4gcmVmZXJl bmNlZCB0YWJsZSAqLwotCU9pZAkJCWNvbnBmZXFvcFtJTkRFWF9NQVhfS0VZU107CS8qIFBL ID0gRksgb3BlcmF0b3IgT0lEcyAqLworCUF0dHJOdW1iZXIJY29ua2V5W0lOREVYX01BWF9L RVlTXSBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShua2V5cykpOyAvKiBjb2xzIGluIHJlZmVy ZW5jaW5nIHRhYmxlICovCisJQXR0ck51bWJlcgljb25ma2V5W0lOREVYX01BWF9LRVlTXSBw Z19ub2RlX2F0dHIoYXJyYXlfc2l6ZShua2V5cykpOwkvKiBjb2xzIGluIHJlZmVyZW5jZWQg dGFibGUgKi8KKwlPaWQJCQljb25wZmVxb3BbSU5ERVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0 cihhcnJheV9zaXplKG5rZXlzKSk7CS8qIFBLID0gRksgb3BlcmF0b3IgT0lEcyAqLwogCiAJ LyogRGVyaXZlZCBpbmZvIGFib3V0IHdoZXRoZXIgRksncyBlcXVhbGl0eSBjb25kaXRpb25z IG1hdGNoIHRoZSBxdWVyeTogKi8KIAlpbnQJCQlubWF0Y2hlZF9lYzsJLyogIyBvZiBGSyBj b2xzIG1hdGNoZWQgYnkgRUNzICovCkBAIC05MzQsOCArOTM0LDggQEAgdHlwZWRlZiBzdHJ1 Y3QgU3RhdGlzdGljRXh0SW5mbwogCU5vZGVUYWcJCXR5cGU7CiAKIAlPaWQJCQlzdGF0T2lk OwkJLyogT0lEIG9mIHRoZSBzdGF0aXN0aWNzIHJvdyAqLwotCWJvb2wJCWluaGVyaXQ7CQkv KiBpbmNsdWRlcyBjaGlsZCByZWxhdGlvbnMgKi8KLQlSZWxPcHRJbmZvICpyZWw7CQkJLyog YmFjay1saW5rIHRvIHN0YXRpc3RpYydzIHRhYmxlICovCisJYm9vbAkJaW5oZXJpdCBwZ19u b2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CQkvKiBpbmNsdWRlcyBjaGlsZCByZWxhdGlv bnMgKi8KKwlSZWxPcHRJbmZvICpyZWwgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUp OwkJCS8qIGJhY2stbGluayB0byBzdGF0aXN0aWMncyB0YWJsZSAqLwogCWNoYXIJCWtpbmQ7 CQkJLyogc3RhdGlzdGljcyBraW5kIG9mIHRoaXMgZW50cnkgKi8KIAlCaXRtYXBzZXQgICpr ZXlzOwkJCS8qIGF0dG51bXMgb2YgdGhlIGNvbHVtbnMgY292ZXJlZCAqLwogCUxpc3QJICAg KmV4cHJzOwkJCS8qIGV4cHJlc3Npb25zICovCkBAIC0xMTA5LDcgKzExMDksNyBAQCB0eXBl ZGVmIHN0cnVjdCBQYXRoVGFyZ2V0CiB7CiAJTm9kZVRhZwkJdHlwZTsKIAlMaXN0CSAgICpl eHByczsJCQkvKiBsaXN0IG9mIGV4cHJlc3Npb25zIHRvIGJlIGNvbXB1dGVkICovCi0JSW5k ZXgJICAgKnNvcnRncm91cHJlZnM7CS8qIGNvcnJlc3BvbmRpbmcgc29ydC9ncm91cCByZWZu b3MsIG9yIDAgKi8KKwlJbmRleAkgICAqc29ydGdyb3VwcmVmcyBwZ19ub2RlX2F0dHIoYXJy YXlfc2l6ZShleHBycykpOwkvKiBjb3JyZXNwb25kaW5nIHNvcnQvZ3JvdXAgcmVmbm9zLCBv ciAwICovCiAJUXVhbENvc3QJY29zdDsJCQkvKiBjb3N0IG9mIGV2YWx1YXRpbmcgdGhlIGV4 cHJlc3Npb25zICovCiAJaW50CQkJd2lkdGg7CQkJLyogZXN0aW1hdGVkIGF2ZyB3aWR0aCBv ZiByZXN1bHQgdHVwbGVzICovCiAJVm9sYXRpbGVGdW5jdGlvblN0YXR1cyBoYXNfdm9sYXRp bGVfZXhwcjsJLyogaW5kaWNhdGVzIGlmIGV4cHJzIGNvbnRhaW4KQEAgLTExODAsMTAgKzEx ODAsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgUGF0aAogCiAJTm9kZVRhZwkJcGF0aHR5cGU7CQkv KiB0YWcgaWRlbnRpZnlpbmcgc2Nhbi9qb2luIG1ldGhvZCAqLwogCi0JUmVsT3B0SW5mbyAq cGFyZW50OwkJCS8qIHRoZSByZWxhdGlvbiB0aGlzIHBhdGggY2FuIGJ1aWxkICovCi0JUGF0 aFRhcmdldCAqcGF0aHRhcmdldDsJCS8qIGxpc3Qgb2YgVmFycy9FeHBycywgY29zdCwgd2lk dGggKi8KKwlSZWxPcHRJbmZvICpwYXJlbnQgcGdfbm9kZV9hdHRyKHBhdGhfaGFjazEpOwkJ CS8qIHRoZSByZWxhdGlvbiB0aGlzIHBhdGggY2FuIGJ1aWxkICovCisJUGF0aFRhcmdldCAq cGF0aHRhcmdldCBwZ19ub2RlX2F0dHIocGF0aF9oYWNrMik7CQkvKiBsaXN0IG9mIFZhcnMv RXhwcnMsIGNvc3QsIHdpZHRoICovCiAKLQlQYXJhbVBhdGhJbmZvICpwYXJhbV9pbmZvOwkv KiBwYXJhbWV0ZXJpemF0aW9uIGluZm8sIG9yIE5VTEwgaWYgbm9uZSAqLworCVBhcmFtUGF0 aEluZm8gKnBhcmFtX2luZm8gcGdfbm9kZV9hdHRyKHBhdGhfaGFjazMpOwkvKiBwYXJhbWV0 ZXJpemF0aW9uIGluZm8sIG9yIE5VTEwgaWYgbm9uZSAqLwogCiAJYm9vbAkJcGFyYWxsZWxf YXdhcmU7IC8qIGVuZ2FnZSBwYXJhbGxlbC1hd2FyZSBsb2dpYz8gKi8KIAlib29sCQlwYXJh bGxlbF9zYWZlOwkvKiBPSyB0byB1c2UgYXMgcGFydCBvZiBwYXJhbGxlbCBwbGFuPyAqLwpA QCAtMjA2MiwxOSArMjA2MiwxOSBAQCB0eXBlZGVmIHN0cnVjdCBSZXN0cmljdEluZm8KIAog CWJvb2wJCW91dGVyam9pbl9kZWxheWVkOwkvKiB0cnVlIGlmIGRlbGF5ZWQgYnkgbG93ZXIg b3V0ZXIgam9pbiAqLwogCi0JYm9vbAkJY2FuX2pvaW47CQkvKiBzZWUgY29tbWVudCBhYm92 ZSAqLworCWJvb2wJCWNhbl9qb2luIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJLyog c2VlIGNvbW1lbnQgYWJvdmUgKi8KIAotCWJvb2wJCXBzZXVkb2NvbnN0YW50OyAvKiBzZWUg Y29tbWVudCBhYm92ZSAqLworCWJvb2wJCXBzZXVkb2NvbnN0YW50IHBnX25vZGVfYXR0cihl cXVhbF9pZ25vcmUpOyAvKiBzZWUgY29tbWVudCBhYm92ZSAqLwogCi0JYm9vbAkJbGVha3By b29mOwkJLyogdHJ1ZSBpZiBrbm93biB0byBjb250YWluIG5vIGxlYWtlZCBWYXJzICovCisJ Ym9vbAkJbGVha3Byb29mIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJLyogdHJ1ZSBp ZiBrbm93biB0byBjb250YWluIG5vIGxlYWtlZCBWYXJzICovCiAKLQlWb2xhdGlsZUZ1bmN0 aW9uU3RhdHVzIGhhc192b2xhdGlsZTsJLyogdG8gaW5kaWNhdGUgaWYgY2xhdXNlIGNvbnRh aW5zCisJVm9sYXRpbGVGdW5jdGlvblN0YXR1cyBoYXNfdm9sYXRpbGUgcGdfbm9kZV9hdHRy KGVxdWFsX2lnbm9yZSk7CS8qIHRvIGluZGljYXRlIGlmIGNsYXVzZSBjb250YWlucwogCQkJ CQkJCQkJCQkgKiBhbnkgdm9sYXRpbGUgZnVuY3Rpb25zLiAqLwogCiAJSW5kZXgJCXNlY3Vy aXR5X2xldmVsOyAvKiBzZWUgY29tbWVudCBhYm92ZSAqLwogCiAJLyogVGhlIHNldCBvZiBy ZWxpZHMgKHZhcm5vcykgYWN0dWFsbHkgcmVmZXJlbmNlZCBpbiB0aGUgY2xhdXNlOiAqLwot CVJlbGlkcwkJY2xhdXNlX3JlbGlkczsKKwlSZWxpZHMJCWNsYXVzZV9yZWxpZHMgcGdfbm9k ZV9hdHRyKGVxdWFsX2lnbm9yZSk7CiAKIAkvKiBUaGUgc2V0IG9mIHJlbGlkcyByZXF1aXJl ZCB0byBldmFsdWF0ZSB0aGUgY2xhdXNlOiAqLwogCVJlbGlkcwkJcmVxdWlyZWRfcmVsaWRz OwpAQCAtMjA4Niw0OCArMjA4Niw0OCBAQCB0eXBlZGVmIHN0cnVjdCBSZXN0cmljdEluZm8K IAlSZWxpZHMJCW51bGxhYmxlX3JlbGlkczsKIAogCS8qIFRoZXNlIGZpZWxkcyBhcmUgc2V0 IGZvciBhbnkgYmluYXJ5IG9wY2xhdXNlOiAqLwotCVJlbGlkcwkJbGVmdF9yZWxpZHM7CS8q IHJlbGlkcyBpbiBsZWZ0IHNpZGUgb2YgY2xhdXNlICovCi0JUmVsaWRzCQlyaWdodF9yZWxp ZHM7CS8qIHJlbGlkcyBpbiByaWdodCBzaWRlIG9mIGNsYXVzZSAqLworCVJlbGlkcwkJbGVm dF9yZWxpZHMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CS8qIHJlbGlkcyBpbiBsZWZ0 IHNpZGUgb2YgY2xhdXNlICovCisJUmVsaWRzCQlyaWdodF9yZWxpZHMgcGdfbm9kZV9hdHRy KGVxdWFsX2lnbm9yZSk7CS8qIHJlbGlkcyBpbiByaWdodCBzaWRlIG9mIGNsYXVzZSAqLwog CiAJLyogVGhpcyBmaWVsZCBpcyBOVUxMIHVubGVzcyBjbGF1c2UgaXMgYW4gT1IgY2xhdXNl OiAqLwotCUV4cHIJICAgKm9yY2xhdXNlOwkJLyogbW9kaWZpZWQgY2xhdXNlIHdpdGggUmVz dHJpY3RJbmZvcyAqLworCUV4cHIJICAgKm9yY2xhdXNlIHBnX25vZGVfYXR0cihlcXVhbF9p Z25vcmUpOwkJLyogbW9kaWZpZWQgY2xhdXNlIHdpdGggUmVzdHJpY3RJbmZvcyAqLwogCiAJ LyogVGhpcyBmaWVsZCBpcyBOVUxMIHVubGVzcyBjbGF1c2UgaXMgcG90ZW50aWFsbHkgcmVk dW5kYW50OiAqLwotCUVxdWl2YWxlbmNlQ2xhc3MgKnBhcmVudF9lYzsJLyogZ2VuZXJhdGlu ZyBFcXVpdmFsZW5jZUNsYXNzICovCisJRXF1aXZhbGVuY2VDbGFzcyAqcGFyZW50X2VjIHBn X25vZGVfYXR0cihlcXVhbF9pZ25vcmUgcmVhZHdyaXRlX2lnbm9yZSk7CS8qIGdlbmVyYXRp bmcgRXF1aXZhbGVuY2VDbGFzcyAqLwogCiAJLyogY2FjaGUgc3BhY2UgZm9yIGNvc3QgYW5k IHNlbGVjdGl2aXR5ICovCi0JUXVhbENvc3QJZXZhbF9jb3N0OwkJLyogZXZhbCBjb3N0IG9m IGNsYXVzZTsgLTEgaWYgbm90IHlldCBzZXQgKi8KLQlTZWxlY3Rpdml0eSBub3JtX3NlbGVj OwkJLyogc2VsZWN0aXZpdHkgZm9yICJub3JtYWwiIChKT0lOX0lOTkVSKQorCVF1YWxDb3N0 CWV2YWxfY29zdCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJCS8qIGV2YWwgY29zdCBv ZiBjbGF1c2U7IC0xIGlmIG5vdCB5ZXQgc2V0ICovCisJU2VsZWN0aXZpdHkgbm9ybV9zZWxl YyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJCS8qIHNlbGVjdGl2aXR5IGZvciAibm9y bWFsIiAoSk9JTl9JTk5FUikKIAkJCQkJCQkJICogc2VtYW50aWNzOyAtMSBpZiBub3QgeWV0 IHNldDsgPjEgbWVhbnMgYQogCQkJCQkJCQkgKiByZWR1bmRhbnQgY2xhdXNlICovCi0JU2Vs ZWN0aXZpdHkgb3V0ZXJfc2VsZWM7CS8qIHNlbGVjdGl2aXR5IGZvciBvdXRlciBqb2luIHNl bWFudGljczsgLTEgaWYKKwlTZWxlY3Rpdml0eSBvdXRlcl9zZWxlYyBwZ19ub2RlX2F0dHIo ZXF1YWxfaWdub3JlKTsJLyogc2VsZWN0aXZpdHkgZm9yIG91dGVyIGpvaW4gc2VtYW50aWNz OyAtMSBpZgogCQkJCQkJCQkgKiBub3QgeWV0IHNldCAqLwogCiAJLyogdmFsaWQgaWYgY2xh dXNlIGlzIG1lcmdlam9pbmFibGUsIGVsc2UgTklMICovCi0JTGlzdAkgICAqbWVyZ2VvcGZh bWlsaWVzOwkvKiBvcGZhbWlsaWVzIGNvbnRhaW5pbmcgY2xhdXNlIG9wZXJhdG9yICovCisJ TGlzdAkgICAqbWVyZ2VvcGZhbWlsaWVzIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkv KiBvcGZhbWlsaWVzIGNvbnRhaW5pbmcgY2xhdXNlIG9wZXJhdG9yICovCiAKIAkvKiBjYWNo ZSBzcGFjZSBmb3IgbWVyZ2VjbGF1c2UgcHJvY2Vzc2luZzsgTlVMTCBpZiBub3QgeWV0IHNl dCAqLwotCUVxdWl2YWxlbmNlQ2xhc3MgKmxlZnRfZWM7CS8qIEVxdWl2YWxlbmNlQ2xhc3Mg Y29udGFpbmluZyBsZWZ0aGFuZCAqLwotCUVxdWl2YWxlbmNlQ2xhc3MgKnJpZ2h0X2VjOyAv KiBFcXVpdmFsZW5jZUNsYXNzIGNvbnRhaW5pbmcgcmlnaHRoYW5kICovCi0JRXF1aXZhbGVu Y2VNZW1iZXIgKmxlZnRfZW07IC8qIEVxdWl2YWxlbmNlTWVtYmVyIGZvciBsZWZ0aGFuZCAq LwotCUVxdWl2YWxlbmNlTWVtYmVyICpyaWdodF9lbTsJLyogRXF1aXZhbGVuY2VNZW1iZXIg Zm9yIHJpZ2h0aGFuZCAqLwotCUxpc3QJICAgKnNjYW5zZWxfY2FjaGU7CS8qIGxpc3Qgb2Yg TWVyZ2VTY2FuU2VsQ2FjaGUgc3RydWN0cyAqLworCUVxdWl2YWxlbmNlQ2xhc3MgKmxlZnRf ZWMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSByZWFkd3JpdGVfaWdub3JlKTsJLyogRXF1 aXZhbGVuY2VDbGFzcyBjb250YWluaW5nIGxlZnRoYW5kICovCisJRXF1aXZhbGVuY2VDbGFz cyAqcmlnaHRfZWMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSByZWFkd3JpdGVfaWdub3Jl KTsgLyogRXF1aXZhbGVuY2VDbGFzcyBjb250YWluaW5nIHJpZ2h0aGFuZCAqLworCUVxdWl2 YWxlbmNlTWVtYmVyICpsZWZ0X2VtIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOyAvKiBF cXVpdmFsZW5jZU1lbWJlciBmb3IgbGVmdGhhbmQgKi8KKwlFcXVpdmFsZW5jZU1lbWJlciAq cmlnaHRfZW0gcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CS8qIEVxdWl2YWxlbmNlTWVt YmVyIGZvciByaWdodGhhbmQgKi8KKwlMaXN0CSAgICpzY2Fuc2VsX2NhY2hlIHBnX25vZGVf YXR0cihjb3B5X2lnbm9yZSBlcXVhbF9pZ25vcmUpOwkvKiBsaXN0IG9mIE1lcmdlU2NhblNl bENhY2hlIHN0cnVjdHMgKi8KIAogCS8qIHRyYW5zaWVudCB3b3Jrc3BhY2UgZm9yIHVzZSB3 aGlsZSBjb25zaWRlcmluZyBhIHNwZWNpZmljIGpvaW4gcGF0aCAqLwotCWJvb2wJCW91dGVy X2lzX2xlZnQ7CS8qIFQgPSBvdXRlciB2YXIgb24gbGVmdCwgRiA9IG9uIHJpZ2h0ICovCisJ Ym9vbAkJb3V0ZXJfaXNfbGVmdCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogVCA9 IG91dGVyIHZhciBvbiBsZWZ0LCBGID0gb24gcmlnaHQgKi8KIAogCS8qIHZhbGlkIGlmIGNs YXVzZSBpcyBoYXNoam9pbmFibGUsIGVsc2UgSW52YWxpZE9pZDogKi8KLQlPaWQJCQloYXNo am9pbm9wZXJhdG9yOwkvKiBjb3B5IG9mIGNsYXVzZSBvcGVyYXRvciAqLworCU9pZAkJCWhh c2hqb2lub3BlcmF0b3IgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CS8qIGNvcHkgb2Yg Y2xhdXNlIG9wZXJhdG9yICovCiAKIAkvKiBjYWNoZSBzcGFjZSBmb3IgaGFzaGNsYXVzZSBw cm9jZXNzaW5nOyAtMSBpZiBub3QgeWV0IHNldCAqLwotCVNlbGVjdGl2aXR5IGxlZnRfYnVj a2V0c2l6ZTsJLyogYXZnIGJ1Y2tldHNpemUgb2YgbGVmdCBzaWRlICovCi0JU2VsZWN0aXZp dHkgcmlnaHRfYnVja2V0c2l6ZTsJLyogYXZnIGJ1Y2tldHNpemUgb2YgcmlnaHQgc2lkZSAq LwotCVNlbGVjdGl2aXR5IGxlZnRfbWN2ZnJlcTsJLyogbGVmdCBzaWRlJ3MgbW9zdCBjb21t b24gdmFsJ3MgZnJlcSAqLwotCVNlbGVjdGl2aXR5IHJpZ2h0X21jdmZyZXE7CS8qIHJpZ2h0 IHNpZGUncyBtb3N0IGNvbW1vbiB2YWwncyBmcmVxICovCisJU2VsZWN0aXZpdHkgbGVmdF9i dWNrZXRzaXplIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkvKiBhdmcgYnVja2V0c2l6 ZSBvZiBsZWZ0IHNpZGUgKi8KKwlTZWxlY3Rpdml0eSByaWdodF9idWNrZXRzaXplIHBnX25v ZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkvKiBhdmcgYnVja2V0c2l6ZSBvZiByaWdodCBzaWRl ICovCisJU2VsZWN0aXZpdHkgbGVmdF9tY3ZmcmVxIHBnX25vZGVfYXR0cihlcXVhbF9pZ25v cmUpOwkvKiBsZWZ0IHNpZGUncyBtb3N0IGNvbW1vbiB2YWwncyBmcmVxICovCisJU2VsZWN0 aXZpdHkgcmlnaHRfbWN2ZnJlcSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogcmln aHQgc2lkZSdzIG1vc3QgY29tbW9uIHZhbCdzIGZyZXEgKi8KIAogCS8qIGhhc2ggZXF1YWxp dHkgb3BlcmF0b3JzIHVzZWQgZm9yIG1lbW9pemUgbm9kZXMsIGVsc2UgSW52YWxpZE9pZCAq LwotCU9pZAkJCWxlZnRfaGFzaGVxb3BlcmF0b3I7Ci0JT2lkCQkJcmlnaHRfaGFzaGVxb3Bl cmF0b3I7CisJT2lkCQkJbGVmdF9oYXNoZXFvcGVyYXRvciBwZ19ub2RlX2F0dHIoZXF1YWxf aWdub3JlKTsKKwlPaWQJCQlyaWdodF9oYXNoZXFvcGVyYXRvciBwZ19ub2RlX2F0dHIoZXF1 YWxfaWdub3JlKTsKIH0gUmVzdHJpY3RJbmZvOwogCiAvKgpAQCAtMjE4Miw4ICsyMTgyLDgg QEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VTY2FuU2VsQ2FjaGUKIHR5cGVkZWYgc3RydWN0IFBs YWNlSG9sZGVyVmFyCiB7CiAJRXhwcgkJeHByOwotCUV4cHIJICAgKnBoZXhwcjsJCQkvKiB0 aGUgcmVwcmVzZW50ZWQgZXhwcmVzc2lvbiAqLwotCVJlbGlkcwkJcGhyZWxzOwkJCS8qIGJh c2UgcmVsaWRzIHN5bnRhY3RpY2FsbHkgd2l0aGluIGV4cHIgc3JjICovCisJRXhwcgkgICAq cGhleHByIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJCS8qIHRoZSByZXByZXNlbnRl ZCBleHByZXNzaW9uICovCisJUmVsaWRzCQlwaHJlbHMgcGdfbm9kZV9hdHRyKGVxdWFsX2ln bm9yZSk7CQkJLyogYmFzZSByZWxpZHMgc3ludGFjdGljYWxseSB3aXRoaW4gZXhwciBzcmMg Ki8KIAlJbmRleAkJcGhpZDsJCQkvKiBJRCBmb3IgUEhWICh1bmlxdWUgd2l0aGluIHBsYW5u ZXIgcnVuKSAqLwogCUluZGV4CQlwaGxldmVsc3VwOwkJLyogPiAwIGlmIFBIViBiZWxvbmdz IHRvIG91dGVyIHF1ZXJ5ICovCiB9IFBsYWNlSG9sZGVyVmFyOwpAQCAtMjM0NCw3ICsyMzQ0 LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kUmVsSW5mbwogCSAqIGNoaWxkIGNvbHVtbiBp cyBkcm9wcGVkIG9yIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHBhcmVudC4KIAkgKi8KIAlpbnQJ CQludW1fY2hpbGRfY29sczsgLyogbGVuZ3RoIG9mIGFycmF5ICovCi0JQXR0ck51bWJlciAq cGFyZW50X2NvbG5vczsJLyogYXJyYXkgb2YgcGFyZW50IGF0dG5vcywgb3IgemVyb2VzICov CisJQXR0ck51bWJlciAqcGFyZW50X2NvbG5vcyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShu dW1fY2hpbGRfY29scykpOwkvKiBhcnJheSBvZiBwYXJlbnQgYXR0bm9zLCBvciB6ZXJvZXMg Ki8KIAogCS8qCiAJICogV2Ugc3RvcmUgdGhlIHBhcmVudCB0YWJsZSdzIE9JRCBoZXJlIGZv ciBpbmhlcml0YW5jZSwgb3IgSW52YWxpZE9pZCBmb3IKQEAgLTI0MzIsNyArMjQzMiw3IEBA IHR5cGVkZWYgc3RydWN0IE1pbk1heEFnZ0luZm8KIAlPaWQJCQlhZ2dmbm9pZDsJCS8qIHBn X3Byb2MgT2lkIG9mIHRoZSBhZ2dyZWdhdGUgKi8KIAlPaWQJCQlhZ2dzb3J0b3A7CQkvKiBP aWQgb2YgaXRzIHNvcnQgb3BlcmF0b3IgKi8KIAlFeHByCSAgICp0YXJnZXQ7CQkJLyogZXhw cmVzc2lvbiB3ZSBhcmUgYWdncmVnYXRpbmcgb24gKi8KLQlQbGFubmVySW5mbyAqc3Vicm9v dDsJCS8qIG1vZGlmaWVkICJyb290IiBmb3IgcGxhbm5pbmcgdGhlIHN1YnF1ZXJ5ICovCisJ UGxhbm5lckluZm8gKnN1YnJvb3QgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkJ LyogbW9kaWZpZWQgInJvb3QiIGZvciBwbGFubmluZyB0aGUgc3VicXVlcnkgKi8KIAlQYXRo CSAgICpwYXRoOwkJCS8qIGFjY2VzcyBwYXRoIGZvciBzdWJxdWVyeSAqLwogCUNvc3QJCXBh dGhjb3N0OwkJLyogZXN0aW1hdGVkIGNvc3QgdG8gZmV0Y2ggZmlyc3Qgcm93ICovCiAJUGFy YW0JICAgKnBhcmFtOwkJCS8qIHBhcmFtIGZvciBzdWJwbGFuJ3Mgb3V0cHV0ICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDBiNTE4Y2U2YjIuLmQyZDM3MmE1ZDAgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL3BsYW5ub2Rlcy5oCkBAIC0yNzUsMTAgKzI3NSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBN ZXJnZUFwcGVuZAogCUxpc3QJICAgKm1lcmdlcGxhbnM7CiAJLyogdGhlc2UgZmllbGRzIGFy ZSBqdXN0IGxpa2UgdGhlIHNvcnQta2V5IGluZm8gaW4gc3RydWN0IFNvcnQ6ICovCiAJaW50 CQkJbnVtQ29sczsJCS8qIG51bWJlciBvZiBzb3J0LWtleSBjb2x1bW5zICovCi0JQXR0ck51 bWJlciAqc29ydENvbElkeDsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0 ICovCi0JT2lkCQkgICAqc29ydE9wZXJhdG9yczsJLyogT0lEcyBvZiBvcGVyYXRvcnMgdG8g c29ydCB0aGVtIGJ5ICovCi0JT2lkCQkgICAqY29sbGF0aW9uczsJCS8qIE9JRHMgb2YgY29s bGF0aW9ucyAqLwotCWJvb2wJICAgKm51bGxzRmlyc3Q7CQkvKiBOVUxMUyBGSVJTVC9MQVNU IGRpcmVjdGlvbnMgKi8KKwlBdHRyTnVtYmVyICpzb3J0Q29sSWR4IHBnX25vZGVfYXR0cihh cnJheV9zaXplKG51bUNvbHMpKTsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBs aXN0ICovCisJT2lkCQkgICAqc29ydE9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6 ZShudW1Db2xzKSk7CS8qIE9JRHMgb2Ygb3BlcmF0b3JzIHRvIHNvcnQgdGhlbSBieSAqLwor CU9pZAkJICAgKmNvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykp OwkJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCisJYm9vbAkgICAqbnVsbHNGaXJzdCBwZ19u b2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiBOVUxMUyBGSVJTVC9MQVNUIGRp cmVjdGlvbnMgKi8KIAkvKiBJbmZvIGZvciBydW4tdGltZSBzdWJwbGFuIHBydW5pbmc7IE5V TEwgaWYgd2UncmUgbm90IGRvaW5nIHRoYXQgKi8KIAlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVJ bmZvICpwYXJ0X3BydW5lX2luZm87CiB9IE1lcmdlQXBwZW5kOwpAQCAtMjk4LDkgKzI5OCw5 IEBAIHR5cGVkZWYgc3RydWN0IFJlY3Vyc2l2ZVVuaW9uCiAJLyogUmVtYWluaW5nIGZpZWxk cyBhcmUgemVyby9udWxsIGluIFVOSU9OIEFMTCBjYXNlICovCiAJaW50CQkJbnVtQ29sczsJ CS8qIG51bWJlciBvZiBjb2x1bW5zIHRvIGNoZWNrIGZvcgogCQkJCQkJCQkgKiBkdXBsaWNh dGUtbmVzcyAqLwotCUF0dHJOdW1iZXIgKmR1cENvbElkeDsJCS8qIHRoZWlyIGluZGV4ZXMg aW4gdGhlIHRhcmdldCBsaXN0ICovCi0JT2lkCQkgICAqZHVwT3BlcmF0b3JzOwkvKiBlcXVh bGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCi0JT2lkCQkgICAqZHVwQ29sbGF0 aW9uczsKKwlBdHRyTnVtYmVyICpkdXBDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUo bnVtQ29scykpOwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlP aWQJCSAgICpkdXBPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykp OwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCisJT2lkCQkgICAq ZHVwQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAJbG9u ZwkJbnVtR3JvdXBzOwkJLyogZXN0aW1hdGVkIG51bWJlciBvZiBncm91cHMgaW4gaW5wdXQg Ki8KIH0gUmVjdXJzaXZlVW5pb247CiAKQEAgLTc2NSwxMCArNzY1LDEwIEBAIHR5cGVkZWYg c3RydWN0IE1lcmdlSm9pbgogCWJvb2wJCXNraXBfbWFya19yZXN0b3JlOwkvKiBDYW4gd2Ug c2tpcCBtYXJrL3Jlc3RvcmUgY2FsbHM/ICovCiAJTGlzdAkgICAqbWVyZ2VjbGF1c2VzOwkv KiBtZXJnZWNsYXVzZXMgYXMgZXhwcmVzc2lvbiB0cmVlcyAqLwogCS8qIHRoZXNlIGFyZSBh cnJheXMsIGJ1dCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgbWVyZ2VjbGF1c2VzIGxp c3Q6ICovCi0JT2lkCQkgICAqbWVyZ2VGYW1pbGllczsJLyogcGVyLWNsYXVzZSBPSURzIG9m IGJ0cmVlIG9wZmFtaWxpZXMgKi8KLQlPaWQJCSAgICptZXJnZUNvbGxhdGlvbnM7CS8qIHBl ci1jbGF1c2UgT0lEcyBvZiBjb2xsYXRpb25zICovCi0JaW50CQkgICAqbWVyZ2VTdHJhdGVn aWVzOwkvKiBwZXItY2xhdXNlIG9yZGVyaW5nIChBU0Mgb3IgREVTQykgKi8KLQlib29sCSAg ICptZXJnZU51bGxzRmlyc3Q7CS8qIHBlci1jbGF1c2UgbnVsbHMgb3JkZXJpbmcgKi8KKwlP aWQJCSAgICptZXJnZUZhbWlsaWVzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG1lcmdlY2xh dXNlcykpOwkvKiBwZXItY2xhdXNlIE9JRHMgb2YgYnRyZWUgb3BmYW1pbGllcyAqLworCU9p ZAkJICAgKm1lcmdlQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShtZXJnZWNs YXVzZXMpKTsJLyogcGVyLWNsYXVzZSBPSURzIG9mIGNvbGxhdGlvbnMgKi8KKwlpbnQJCSAg ICptZXJnZVN0cmF0ZWdpZXMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobWVyZ2VjbGF1c2Vz KSk7CS8qIHBlci1jbGF1c2Ugb3JkZXJpbmcgKEFTQyBvciBERVNDKSAqLworCWJvb2wJICAg Km1lcmdlTnVsbHNGaXJzdCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShtZXJnZWNsYXVzZXMp KTsJLyogcGVyLWNsYXVzZSBudWxscyBvcmRlcmluZyAqLwogfSBNZXJnZUpvaW47CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KQEAgLTgwOCw4ICs4MDgsOCBAQCB0eXBlZGVmIHN0cnVjdCBN ZW1vaXplCiAKIAlpbnQJCQludW1LZXlzOwkJLyogc2l6ZSBvZiB0aGUgdHdvIGFycmF5cyBi ZWxvdyAqLwogCi0JT2lkCQkgICAqaGFzaE9wZXJhdG9yczsJLyogaGFzaCBvcGVyYXRvcnMg Zm9yIGVhY2gga2V5ICovCi0JT2lkCQkgICAqY29sbGF0aW9uczsJCS8qIGNhY2hlIGtleXMg Ki8KKwlPaWQJCSAgICpoYXNoT3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51 bUtleXMpKTsJLyogaGFzaCBvcGVyYXRvcnMgZm9yIGVhY2gga2V5ICovCisJT2lkCQkgICAq Y29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1LZXlzKSk7CQkvKiBjYWNo ZSBrZXlzICovCiAJTGlzdAkgICAqcGFyYW1fZXhwcnM7CS8qIGV4cHJzIGNvbnRhaW5pbmcg cGFyYW1ldGVycyAqLwogCWJvb2wJCXNpbmdsZXJvdzsJCS8qIHRydWUgaWYgdGhlIGNhY2hl IGVudHJ5IHNob3VsZCBiZSBtYXJrZWQgYXMKIAkJCQkJCQkJICogY29tcGxldGUgYWZ0ZXIg d2Ugc3RvcmUgdGhlIGZpcnN0IHR1cGxlIGluCkBAIC04MzAsMTAgKzgzMCwxMCBAQCB0eXBl ZGVmIHN0cnVjdCBTb3J0CiB7CiAJUGxhbgkJcGxhbjsKIAlpbnQJCQludW1Db2xzOwkJLyog bnVtYmVyIG9mIHNvcnQta2V5IGNvbHVtbnMgKi8KLQlBdHRyTnVtYmVyICpzb3J0Q29sSWR4 OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlPaWQJCSAgICpz b3J0T3BlcmF0b3JzOwkvKiBPSURzIG9mIG9wZXJhdG9ycyB0byBzb3J0IHRoZW0gYnkgKi8K LQlPaWQJCSAgICpjb2xsYXRpb25zOwkJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCi0JYm9v bAkgICAqbnVsbHNGaXJzdDsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwor CUF0dHJOdW1iZXIgKnNvcnRDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29s cykpOwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAg ICpzb3J0T3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJLyog T0lEcyBvZiBvcGVyYXRvcnMgdG8gc29ydCB0aGVtIGJ5ICovCisJT2lkCQkgICAqY29sbGF0 aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiBPSURzIG9mIGNv bGxhdGlvbnMgKi8KKwlib29sCSAgICpudWxsc0ZpcnN0IHBnX25vZGVfYXR0cihhcnJheV9z aXplKG51bUNvbHMpKTsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwogfSBT b3J0OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC04NTYsOSArODU2LDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgR3JvdXAKIHsKIAlQbGFuCQlwbGFuOwogCWludAkJCW51bUNvbHM7CQkvKiBu dW1iZXIgb2YgZ3JvdXBpbmcgY29sdW1ucyAqLwotCUF0dHJOdW1iZXIgKmdycENvbElkeDsJ CS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JT2lkCQkgICAqZ3Jw T3BlcmF0b3JzOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCi0J T2lkCQkgICAqZ3JwQ29sbGF0aW9uczsKKwlBdHRyTnVtYmVyICpncnBDb2xJZHggcGdfbm9k ZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUg dGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAgICpncnBPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFy cmF5X3NpemUobnVtQ29scykpOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3 aXRoICovCisJT2lkCQkgICAqZ3JwQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6 ZShudW1Db2xzKSk7CiB9IEdyb3VwOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0KQEAgLTg4MSw5 ICs4ODEsOSBAQCB0eXBlZGVmIHN0cnVjdCBBZ2cKIAlBZ2dTdHJhdGVneSBhZ2dzdHJhdGVn eTsJLyogYmFzaWMgc3RyYXRlZ3ksIHNlZSBub2Rlcy5oICovCiAJQWdnU3BsaXQJYWdnc3Bs aXQ7CQkvKiBhZ2ctc3BsaXR0aW5nIG1vZGUsIHNlZSBub2Rlcy5oICovCiAJaW50CQkJbnVt Q29sczsJCS8qIG51bWJlciBvZiBncm91cGluZyBjb2x1bW5zICovCi0JQXR0ck51bWJlciAq Z3JwQ29sSWR4OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlP aWQJCSAgICpncnBPcGVyYXRvcnM7CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJl IHdpdGggKi8KLQlPaWQJCSAgICpncnBDb2xsYXRpb25zOworCUF0dHJOdW1iZXIgKmdycENv bElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiB0aGVpciBpbmRl eGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLworCU9pZAkJICAgKmdycE9wZXJhdG9ycyBwZ19u b2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0 byBjb21wYXJlIHdpdGggKi8KKwlPaWQJCSAgICpncnBDb2xsYXRpb25zIHBnX25vZGVfYXR0 cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAlsb25nCQludW1Hcm91cHM7CQkvKiBlc3RpbWF0 ZWQgbnVtYmVyIG9mIGdyb3VwcyBpbiBpbnB1dCAqLwogCXVpbnQ2NAkJdHJhbnNpdGlvblNw YWNlOwkvKiBmb3IgcGFzcy1ieS1yZWYgdHJhbnNpdGlvbiBkYXRhICovCiAJQml0bWFwc2V0 ICAqYWdnUGFyYW1zOwkJLyogSURzIG9mIFBhcmFtcyB1c2VkIGluIEFnZ3JlZiBpbnB1dHMg Ki8KQEAgLTkwMSwxMyArOTAxLDEzIEBAIHR5cGVkZWYgc3RydWN0IFdpbmRvd0FnZwogCVBs YW4JCXBsYW47CiAJSW5kZXgJCXdpbnJlZjsJCQkvKiBJRCByZWZlcmVuY2VkIGJ5IHdpbmRv dyBmdW5jdGlvbnMgKi8KIAlpbnQJCQlwYXJ0TnVtQ29sczsJLyogbnVtYmVyIG9mIGNvbHVt bnMgaW4gcGFydGl0aW9uIGNsYXVzZSAqLwotCUF0dHJOdW1iZXIgKnBhcnRDb2xJZHg7CQkv KiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwotCU9pZAkJICAgKnBhcnRP cGVyYXRvcnM7CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyBmb3IgcGFydGl0aW9uIGNvbHVtbnMg Ki8KLQlPaWQJCSAgICpwYXJ0Q29sbGF0aW9uczsgLyogY29sbGF0aW9ucyBmb3IgcGFydGl0 aW9uIGNvbHVtbnMgKi8KKwlBdHRyTnVtYmVyICpwYXJ0Q29sSWR4IHBnX25vZGVfYXR0cihh cnJheV9zaXplKHBhcnROdW1Db2xzKSk7CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJn ZXQgbGlzdCAqLworCU9pZAkJICAgKnBhcnRPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5 X3NpemUocGFydE51bUNvbHMpKTsJLyogZXF1YWxpdHkgb3BlcmF0b3JzIGZvciBwYXJ0aXRp b24gY29sdW1ucyAqLworCU9pZAkJICAgKnBhcnRDb2xsYXRpb25zIHBnX25vZGVfYXR0cihh cnJheV9zaXplKHBhcnROdW1Db2xzKSk7IC8qIGNvbGxhdGlvbnMgZm9yIHBhcnRpdGlvbiBj b2x1bW5zICovCiAJaW50CQkJb3JkTnVtQ29sczsJCS8qIG51bWJlciBvZiBjb2x1bW5zIGlu IG9yZGVyaW5nIGNsYXVzZSAqLwotCUF0dHJOdW1iZXIgKm9yZENvbElkeDsJCS8qIHRoZWly IGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JT2lkCQkgICAqb3JkT3BlcmF0b3Jz OwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgZm9yIG9yZGVyaW5nIGNvbHVtbnMgKi8KLQlPaWQJ CSAgICpvcmRDb2xsYXRpb25zOwkvKiBjb2xsYXRpb25zIGZvciBvcmRlcmluZyBjb2x1bW5z ICovCisJQXR0ck51bWJlciAqb3JkQ29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG9y ZE51bUNvbHMpKTsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCisJ T2lkCQkgICAqb3JkT3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG9yZE51bUNv bHMpKTsJLyogZXF1YWxpdHkgb3BlcmF0b3JzIGZvciBvcmRlcmluZyBjb2x1bW5zICovCisJ T2lkCQkgICAqb3JkQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShvcmROdW1D b2xzKSk7CS8qIGNvbGxhdGlvbnMgZm9yIG9yZGVyaW5nIGNvbHVtbnMgKi8KIAlpbnQJCQlm cmFtZU9wdGlvbnM7CS8qIGZyYW1lX2NsYXVzZSBvcHRpb25zLCBzZWUgV2luZG93RGVmICov CiAJTm9kZQkgICAqc3RhcnRPZmZzZXQ7CS8qIGV4cHJlc3Npb24gZm9yIHN0YXJ0aW5nIGJv dW5kLCBpZiBhbnkgKi8KIAlOb2RlCSAgICplbmRPZmZzZXQ7CQkvKiBleHByZXNzaW9uIGZv ciBlbmRpbmcgYm91bmQsIGlmIGFueSAqLwpAQCAtOTI3LDkgKzkyNyw5IEBAIHR5cGVkZWYg c3RydWN0IFVuaXF1ZQogewogCVBsYW4JCXBsYW47CiAJaW50CQkJbnVtQ29sczsJCS8qIG51 bWJlciBvZiBjb2x1bW5zIHRvIGNoZWNrIGZvciB1bmlxdWVuZXNzICovCi0JQXR0ck51bWJl ciAqdW5pcUNvbElkeDsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICov Ci0JT2lkCQkgICAqdW5pcU9wZXJhdG9yczsJLyogZXF1YWxpdHkgb3BlcmF0b3JzIHRvIGNv bXBhcmUgd2l0aCAqLwotCU9pZAkJICAgKnVuaXFDb2xsYXRpb25zOyAvKiBjb2xsYXRpb25z IGZvciBlcXVhbGl0eSBjb21wYXJpc29ucyAqLworCUF0dHJOdW1iZXIgKnVuaXFDb2xJZHgg cGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkJLyogdGhlaXIgaW5kZXhlcyBp biB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAgICp1bmlxT3BlcmF0b3JzIHBnX25vZGVf YXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJLyogZXF1YWxpdHkgb3BlcmF0b3JzIHRvIGNv bXBhcmUgd2l0aCAqLworCU9pZAkJICAgKnVuaXFDb2xsYXRpb25zIHBnX25vZGVfYXR0cihh cnJheV9zaXplKG51bUNvbHMpKTsgLyogY29sbGF0aW9ucyBmb3IgZXF1YWxpdHkgY29tcGFy aXNvbnMgKi8KIH0gVW5pcXVlOwogCiAvKiAtLS0tLS0tLS0tLS0KQEAgLTk2NSwxMCArOTY1 LDEwIEBAIHR5cGVkZWYgc3RydWN0IEdhdGhlck1lcmdlCiAJaW50CQkJcmVzY2FuX3BhcmFt OwkvKiBJRCBvZiBQYXJhbSB0aGF0IHNpZ25hbHMgYSByZXNjYW4sIG9yIC0xICovCiAJLyog cmVtYWluaW5nIGZpZWxkcyBhcmUganVzdCBsaWtlIHRoZSBzb3J0LWtleSBpbmZvIGluIHN0 cnVjdCBTb3J0ICovCiAJaW50CQkJbnVtQ29sczsJCS8qIG51bWJlciBvZiBzb3J0LWtleSBj b2x1bW5zICovCi0JQXR0ck51bWJlciAqc29ydENvbElkeDsJCS8qIHRoZWlyIGluZGV4ZXMg aW4gdGhlIHRhcmdldCBsaXN0ICovCi0JT2lkCQkgICAqc29ydE9wZXJhdG9yczsJLyogT0lE cyBvZiBvcGVyYXRvcnMgdG8gc29ydCB0aGVtIGJ5ICovCi0JT2lkCQkgICAqY29sbGF0aW9u czsJCS8qIE9JRHMgb2YgY29sbGF0aW9ucyAqLwotCWJvb2wJICAgKm51bGxzRmlyc3Q7CQkv KiBOVUxMUyBGSVJTVC9MQVNUIGRpcmVjdGlvbnMgKi8KKwlBdHRyTnVtYmVyICpzb3J0Q29s SWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJCS8qIHRoZWlyIGluZGV4 ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCisJT2lkCQkgICAqc29ydE9wZXJhdG9ycyBwZ19u b2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CS8qIE9JRHMgb2Ygb3BlcmF0b3JzIHRv IHNvcnQgdGhlbSBieSAqLworCU9pZAkJICAgKmNvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFy cmF5X3NpemUobnVtQ29scykpOwkJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCisJYm9vbAkg ICAqbnVsbHNGaXJzdCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiBO VUxMUyBGSVJTVC9MQVNUIGRpcmVjdGlvbnMgKi8KIAlCaXRtYXBzZXQgICppbml0UGFyYW07 CQkvKiBwYXJhbSBpZCdzIG9mIGluaXRwbGFucyB3aGljaCBhcmUgcmVmZXJyZWQKIAkJCQkJ CQkJICogYXQgZ2F0aGVyIG1lcmdlIG9yIG9uZSBvZiBpdCdzIGNoaWxkIG5vZGUgKi8KIH0g R2F0aGVyTWVyZ2U7CkBAIC0xMDA4LDkgKzEwMDgsOSBAQCB0eXBlZGVmIHN0cnVjdCBTZXRP cAogCVNldE9wU3RyYXRlZ3kgc3RyYXRlZ3k7CQkvKiBob3cgdG8gZG8gaXQsIHNlZSBub2Rl cy5oICovCiAJaW50CQkJbnVtQ29sczsJCS8qIG51bWJlciBvZiBjb2x1bW5zIHRvIGNoZWNr IGZvcgogCQkJCQkJCQkgKiBkdXBsaWNhdGUtbmVzcyAqLwotCUF0dHJOdW1iZXIgKmR1cENv bElkeDsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JT2lkCQkg ICAqZHVwT3BlcmF0b3JzOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRo ICovCi0JT2lkCQkgICAqZHVwQ29sbGF0aW9uczsKKwlBdHRyTnVtYmVyICpkdXBDb2xJZHgg cGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkJLyogdGhlaXIgaW5kZXhlcyBp biB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAgICpkdXBPcGVyYXRvcnMgcGdfbm9kZV9h dHRyKGFycmF5X3NpemUobnVtQ29scykpOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29t cGFyZSB3aXRoICovCisJT2lkCQkgICAqZHVwQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJy YXlfc2l6ZShudW1Db2xzKSk7CiAJQXR0ck51bWJlcglmbGFnQ29sSWR4OwkJLyogd2hlcmUg aXMgdGhlIGZsYWcgY29sdW1uLCBpZiBhbnkgKi8KIAlpbnQJCQlmaXJzdEZsYWc7CQkvKiBm bGFnIHZhbHVlIGZvciBmaXJzdCBpbnB1dCByZWxhdGlvbiAqLwogCWxvbmcJCW51bUdyb3Vw czsJCS8qIGVzdGltYXRlZCBudW1iZXIgb2YgZ3JvdXBzIGluIGlucHV0ICovCkBAIC0xMDQ2 LDkgKzEwNDYsOSBAQCB0eXBlZGVmIHN0cnVjdCBMaW1pdAogCU5vZGUJICAgKmxpbWl0Q291 bnQ7CQkvKiBDT1VOVCBwYXJhbWV0ZXIsIG9yIE5VTEwgaWYgbm9uZSAqLwogCUxpbWl0T3B0 aW9uIGxpbWl0T3B0aW9uOwkvKiBsaW1pdCB0eXBlICovCiAJaW50CQkJdW5pcU51bUNvbHM7 CS8qIG51bWJlciBvZiBjb2x1bW5zIHRvIGNoZWNrIGZvciBzaW1pbGFyaXR5ICAqLwotCUF0 dHJOdW1iZXIgKnVuaXFDb2xJZHg7CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQg bGlzdCAqLwotCU9pZAkJICAgKnVuaXFPcGVyYXRvcnM7CS8qIGVxdWFsaXR5IG9wZXJhdG9y cyB0byBjb21wYXJlIHdpdGggKi8KLQlPaWQJCSAgICp1bmlxQ29sbGF0aW9uczsgLyogY29s bGF0aW9ucyBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMgKi8KKwlBdHRyTnVtYmVyICp1bmlx Q29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKHVuaXFOdW1Db2xzKSk7CQkvKiB0aGVp ciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLworCU9pZAkJICAgKnVuaXFPcGVyYXRv cnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUodW5pcU51bUNvbHMpKTsJLyogZXF1YWxpdHkg b3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLworCU9pZAkJICAgKnVuaXFDb2xsYXRpb25z IHBnX25vZGVfYXR0cihhcnJheV9zaXplKHVuaXFOdW1Db2xzKSk7IC8qIGNvbGxhdGlvbnMg Zm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zICovCiB9IExpbWl0OwogCiAKQEAgLTEyMDcsOSAr MTIwNyw5IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvCiAJQml0 bWFwc2V0ICAqcHJlc2VudF9wYXJ0czsJLyogSW5kZXhlcyBvZiBhbGwgcGFydGl0aW9ucyB3 aGljaCBzdWJwbGFucyBvcgogCQkJCQkJCQkgKiBzdWJwYXJ0cyBhcmUgcHJlc2VudCBmb3Ig Ki8KIAlpbnQJCQlucGFydHM7CQkJLyogTGVuZ3RoIG9mIHRoZSBmb2xsb3dpbmcgYXJyYXlz OiAqLwotCWludAkJICAgKnN1YnBsYW5fbWFwOwkvKiBzdWJwbGFuIGluZGV4IGJ5IHBhcnRp dGlvbiBpbmRleCwgb3IgLTEgKi8KLQlpbnQJCSAgICpzdWJwYXJ0X21hcDsJLyogc3VicGFy dCBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIC0xICovCi0JT2lkCQkgICAqcmVsaWRf bWFwOwkJLyogcmVsYXRpb24gT0lEIGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgMCAqLworCWlu dAkJICAgKnN1YnBsYW5fbWFwIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5wYXJ0cykpOwkv KiBzdWJwbGFuIGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgLTEgKi8KKwlpbnQJCSAg ICpzdWJwYXJ0X21hcCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShucGFydHMpKTsJLyogc3Vi cGFydCBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIC0xICovCisJT2lkCQkgICAqcmVs aWRfbWFwIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5wYXJ0cykpOwkJLyogcmVsYXRpb24g T0lEIGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgMCAqLwogCiAJLyoKIAkgKiBpbml0aWFsX3By dW5pbmdfc3RlcHMgc2hvd3MgaG93IHRvIHBydW5lIGR1cmluZyBleGVjdXRvciBzdGFydHVw IChpLmUuLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRleCBkYWI1YzRmZjVkLi4wZTJjMDZh NDhhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAtNjMsNyArNjMsNyBAQCB0eXBlZGVm IGVudW0gT25Db21taXRBY3Rpb24KIHR5cGVkZWYgc3RydWN0IFJhbmdlVmFyCiB7CiAJTm9k ZVRhZwkJdHlwZTsKLQljaGFyCSAgICpjYXRhbG9nbmFtZTsJLyogdGhlIGNhdGFsb2cgKGRh dGFiYXNlKSBuYW1lLCBvciBOVUxMICovCisJY2hhcgkgICAqY2F0YWxvZ25hbWUgcGdfbm9k ZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiB0aGUgY2F0YWxvZyAoZGF0YWJhc2UpIG5h bWUsIG9yIE5VTEwgKi8KIAljaGFyCSAgICpzY2hlbWFuYW1lOwkJLyogdGhlIHNjaGVtYSBu YW1lLCBvciBOVUxMICovCiAJY2hhcgkgICAqcmVsbmFtZTsJCS8qIHRoZSByZWxhdGlvbi9z ZXF1ZW5jZSBuYW1lICovCiAJYm9vbAkJaW5oOwkJCS8qIGV4cGFuZCByZWwgYnkgaW5oZXJp dGFuY2U/IHJlY3Vyc2l2ZWx5IGFjdApAQCAtMTk2LDggKzE5Niw4IEBAIHR5cGVkZWYgc3Ry dWN0IFZhcgogCUluZGV4CQl2YXJsZXZlbHN1cDsJLyogZm9yIHN1YnF1ZXJ5IHZhcmlhYmxl cyByZWZlcmVuY2luZyBvdXRlcgogCQkJCQkJCQkgKiByZWxhdGlvbnM7IDAgaW4gYSBub3Jt YWwgdmFyLCA+MCBtZWFucyBOCiAJCQkJCQkJCSAqIGxldmVscyB1cCAqLwotCUluZGV4CQl2 YXJub3N5bjsJCS8qIHN5bnRhY3RpYyByZWxhdGlvbiBpbmRleCAoMCBpZiB1bmtub3duKSAq LwotCUF0dHJOdW1iZXIJdmFyYXR0bm9zeW47CS8qIHN5bnRhY3RpYyBhdHRyaWJ1dGUgbnVt YmVyICovCisJSW5kZXgJCXZhcm5vc3luIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJ Lyogc3ludGFjdGljIHJlbGF0aW9uIGluZGV4ICgwIGlmIHVua25vd24pICovCisJQXR0ck51 bWJlcgl2YXJhdHRub3N5biBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogc3ludGFj dGljIGF0dHJpYnV0ZSBudW1iZXIgKi8KIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxv Y2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCiB9IFZhcjsKIApAQCAtMzI0LDcgKzMyNCw3 IEBAIHR5cGVkZWYgc3RydWN0IEFnZ3JlZgogCU9pZAkJCWFnZ3R5cGU7CQkvKiB0eXBlIE9p ZCBvZiByZXN1bHQgb2YgdGhlIGFnZ3JlZ2F0ZSAqLwogCU9pZAkJCWFnZ2NvbGxpZDsJCS8q IE9JRCBvZiBjb2xsYXRpb24gb2YgcmVzdWx0ICovCiAJT2lkCQkJaW5wdXRjb2xsaWQ7CS8q IE9JRCBvZiBjb2xsYXRpb24gdGhhdCBmdW5jdGlvbiBzaG91bGQgdXNlICovCi0JT2lkCQkJ YWdndHJhbnN0eXBlOwkvKiB0eXBlIE9pZCBvZiBhZ2dyZWdhdGUncyB0cmFuc2l0aW9uIHZh bHVlICovCisJT2lkCQkJYWdndHJhbnN0eXBlIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUp OwkvKiB0eXBlIE9pZCBvZiBhZ2dyZWdhdGUncyB0cmFuc2l0aW9uIHZhbHVlICovCiAJTGlz dAkgICAqYWdnYXJndHlwZXM7CS8qIHR5cGUgT2lkcyBvZiBkaXJlY3QgYW5kIGFnZ3JlZ2F0 ZWQgYXJncyAqLwogCUxpc3QJICAgKmFnZ2RpcmVjdGFyZ3M7CS8qIGRpcmVjdCBhcmd1bWVu dHMsIGlmIGFuIG9yZGVyZWQtc2V0IGFnZyAqLwogCUxpc3QJICAgKmFyZ3M7CQkJLyogYWdn cmVnYXRlZCBhcmd1bWVudHMgYW5kIHNvcnQgZXhwcmVzc2lvbnMgKi8KQEAgLTM3MSw4ICsz NzEsOCBAQCB0eXBlZGVmIHN0cnVjdCBHcm91cGluZ0Z1bmMKIAlFeHByCQl4cHI7CiAJTGlz dAkgICAqYXJnczsJCQkvKiBhcmd1bWVudHMsIG5vdCBldmFsdWF0ZWQgYnV0IGtlcHQgZm9y CiAJCQkJCQkJCSAqIGJlbmVmaXQgb2YgRVhQTEFJTiBldGMuICovCi0JTGlzdAkgICAqcmVm czsJCQkvKiByZXNzb3J0Z3JvdXByZWZzIG9mIGFyZ3VtZW50cyAqLwotCUxpc3QJICAgKmNv bHM7CQkJLyogYWN0dWFsIGNvbHVtbiBwb3NpdGlvbnMgc2V0IGJ5IHBsYW5uZXIgKi8KKwlM aXN0CSAgICpyZWZzIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJCS8qIHJlc3NvcnRn cm91cHJlZnMgb2YgYXJndW1lbnRzICovCisJTGlzdAkgICAqY29scyBwZ19ub2RlX2F0dHIo ZXF1YWxfaWdub3JlKTsJCQkvKiBhY3R1YWwgY29sdW1uIHBvc2l0aW9ucyBzZXQgYnkgcGxh bm5lciAqLwogCUluZGV4CQlhZ2dsZXZlbHN1cDsJLyogc2FtZSBhcyBBZ2dyZWYuYWdnbGV2 ZWxzdXAgKi8KIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uICovCiB9IEdy b3VwaW5nRnVuYzsKQEAgLTU0MCw3ICs1NDAsNyBAQCB0eXBlZGVmIHN0cnVjdCBPcEV4cHIK IHsKIAlFeHByCQl4cHI7CiAJT2lkCQkJb3BubzsJCQkvKiBQR19PUEVSQVRPUiBPSUQgb2Yg dGhlIG9wZXJhdG9yICovCi0JT2lkCQkJb3BmdW5jaWQ7CQkvKiBQR19QUk9DIE9JRCBvZiB1 bmRlcmx5aW5nIGZ1bmN0aW9uICovCisJT2lkCQkJb3BmdW5jaWQgcGdfbm9kZV9hdHRyKGVx dWFsX2lnbm9yZV9pZl96ZXJvKTsJCS8qIFBHX1BST0MgT0lEIG9mIHVuZGVybHlpbmcgZnVu Y3Rpb24gKi8KIAlPaWQJCQlvcHJlc3VsdHR5cGU7CS8qIFBHX1RZUEUgT0lEIG9mIHJlc3Vs dCB2YWx1ZSAqLwogCWJvb2wJCW9wcmV0c2V0OwkJLyogdHJ1ZSBpZiBvcGVyYXRvciByZXR1 cm5zIHNldCAqLwogCU9pZAkJCW9wY29sbGlkOwkJLyogT0lEIG9mIGNvbGxhdGlvbiBvZiBy ZXN1bHQgKi8KQEAgLTU5Nyw5ICs1OTcsOSBAQCB0eXBlZGVmIHN0cnVjdCBTY2FsYXJBcnJh eU9wRXhwcgogewogCUV4cHIJCXhwcjsKIAlPaWQJCQlvcG5vOwkJCS8qIFBHX09QRVJBVE9S IE9JRCBvZiB0aGUgb3BlcmF0b3IgKi8KLQlPaWQJCQlvcGZ1bmNpZDsJCS8qIFBHX1BST0Mg T0lEIG9mIGNvbXBhcmlzb24gZnVuY3Rpb24gKi8KLQlPaWQJCQloYXNoZnVuY2lkOwkJLyog UEdfUFJPQyBPSUQgb2YgaGFzaCBmdW5jIG9yIEludmFsaWRPaWQgKi8KLQlPaWQJCQluZWdm dW5jaWQ7CQkvKiBQR19QUk9DIE9JRCBvZiBuZWdhdG9yIG9mIG9wZnVuY2lkIGZ1bmN0aW9u CisJT2lkCQkJb3BmdW5jaWQgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZV9pZl96ZXJvKTsJ CS8qIFBHX1BST0MgT0lEIG9mIGNvbXBhcmlzb24gZnVuY3Rpb24gKi8KKwlPaWQJCQloYXNo ZnVuY2lkIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmVfaWZfemVybyk7CQkvKiBQR19QUk9D IE9JRCBvZiBoYXNoIGZ1bmMgb3IgSW52YWxpZE9pZCAqLworCU9pZAkJCW5lZ2Z1bmNpZCBw Z19ub2RlX2F0dHIoZXF1YWxfaWdub3JlX2lmX3plcm8pOwkJLyogUEdfUFJPQyBPSUQgb2Yg bmVnYXRvciBvZiBvcGZ1bmNpZCBmdW5jdGlvbgogCQkJCQkJCQkgKiBvciBJbnZhbGlkT2lk LiAgU2VlIGFib3ZlICovCiAJYm9vbAkJdXNlT3I7CQkJLyogdHJ1ZSBmb3IgQU5ZLCBmYWxz ZSBmb3IgQUxMICovCiAJT2lkCQkJaW5wdXRjb2xsaWQ7CS8qIE9JRCBvZiBjb2xsYXRpb24g dGhhdCBvcGVyYXRvciBzaG91bGQgdXNlICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9w Z19jb25maWdfbWFudWFsLmggYi9zcmMvaW5jbHVkZS9wZ19jb25maWdfbWFudWFsLmgKaW5k ZXggOGQyZTNlM2E1Ny4uNTRhODVmMzk1ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdf Y29uZmlnX21hbnVhbC5oCisrKyBiL3NyYy9pbmNsdWRlL3BnX2NvbmZpZ19tYW51YWwuaApA QCAtMzcxLDE0ICszNzEsMTQgQEAKICAqIGNvcHlPYmplY3QoKSwgdG8gZmFjaWxpdGF0ZSBj YXRjaGluZyBlcnJvcnMgYW5kIG9taXNzaW9ucyBpbgogICogY29weU9iamVjdCgpLgogICov Ci0vKiAjZGVmaW5lIENPUFlfUEFSU0VfUExBTl9UUkVFUyAqLworI2RlZmluZSBDT1BZX1BB UlNFX1BMQU5fVFJFRVMKIAogLyoKICAqIERlZmluZSB0aGlzIHRvIGZvcmNlIGFsbCBwYXJz ZSBhbmQgcGxhbiB0cmVlcyB0byBiZSBwYXNzZWQgdGhyb3VnaAogICogb3V0ZnVuY3MuYy9y ZWFkZnVuY3MuYywgdG8gZmFjaWxpdGF0ZSBjYXRjaGluZyBlcnJvcnMgYW5kIG9taXNzaW9u cyBpbgogICogdGhvc2UgbW9kdWxlcy4KICAqLwotLyogI2RlZmluZSBXUklURV9SRUFEX1BB UlNFX1BMQU5fVFJFRVMgKi8KKyNkZWZpbmUgV1JJVEVfUkVBRF9QQVJTRV9QTEFOX1RSRUVT CiAKIC8qCiAgKiBEZWZpbmUgdGhpcyB0byBmb3JjZSBhbGwgcmF3IHBhcnNlIHRyZWVzIGZv ciBETUwgc3RhdGVtZW50cyB0byBiZSBzY2FubmVkCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IDZkYTFiMjIw Y2QuLjQ1OWE2NGE5OTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCkBAIC0yNzMsOSArMjczLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgRm9yZWlnbktleUNhY2hlSW5mbwogCU9pZAkJCWNvbmZyZWxpZDsJCS8qIHJl bGF0aW9uIHJlZmVyZW5jZWQgYnkgdGhlIGZvcmVpZ24ga2V5ICovCiAJaW50CQkJbmtleXM7 CQkJLyogbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGZvcmVpZ24ga2V5ICovCiAJLyogdGhl c2UgYXJyYXlzIGVhY2ggaGF2ZSBua2V5cyB2YWxpZCBlbnRyaWVzOiAqLwotCUF0dHJOdW1i ZXIJY29ua2V5W0lOREVYX01BWF9LRVlTXTsgLyogY29scyBpbiByZWZlcmVuY2luZyB0YWJs ZSAqLwotCUF0dHJOdW1iZXIJY29uZmtleVtJTkRFWF9NQVhfS0VZU107CS8qIGNvbHMgaW4g cmVmZXJlbmNlZCB0YWJsZSAqLwotCU9pZAkJCWNvbnBmZXFvcFtJTkRFWF9NQVhfS0VZU107 CS8qIFBLID0gRksgb3BlcmF0b3IgT0lEcyAqLworCUF0dHJOdW1iZXIJY29ua2V5W0lOREVY X01BWF9LRVlTXSBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShua2V5cykpOyAvKiBjb2xzIGlu IHJlZmVyZW5jaW5nIHRhYmxlICovCisJQXR0ck51bWJlcgljb25ma2V5W0lOREVYX01BWF9L RVlTXSBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShua2V5cykpOwkvKiBjb2xzIGluIHJlZmVy ZW5jZWQgdGFibGUgKi8KKwlPaWQJCQljb25wZmVxb3BbSU5ERVhfTUFYX0tFWVNdIHBnX25v ZGVfYXR0cihhcnJheV9zaXplKG5rZXlzKSk7CS8qIFBLID0gRksgb3BlcmF0b3IgT0lEcyAq LwogfSBGb3JlaWduS2V5Q2FjaGVJbmZvOwogCiAKZGlmZiAtLWdpdCBhL3NyYy90b29scy9t c3ZjL1NvbHV0aW9uLnBtIGIvc3JjL3Rvb2xzL21zdmMvU29sdXRpb24ucG0KaW5kZXggZTQ3 YzJkNjQ4Yy4uZmMzZTNjZjAxYyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL21zdmMvU29sdXRp b24ucG0KKysrIGIvc3JjL3Rvb2xzL21zdmMvU29sdXRpb24ucG0KQEAgLTgzMyw2ICs4MzMs NTIgQEAgRU9GCiAJCWNsb3NlKCRjaHMpOwogCX0KIAorCWlmIChJc05ld2VyKCdzcmMvYmFj a2VuZC9ub2Rlcy9ub2RlLXN1cHBvcnQtc3RhbXAnLAorCQknc3JjL2JhY2tlbmQvbm9kZXMv Z2VuX25vZGVfc3VwcG9ydC5wbCcpKQorCXsKKwkJIyBYWFggZHVwbGljYXRlcyBzcmMvYmFj a2VuZC9ub2Rlcy9NYWtlZmlsZQorCisJCW15IEBub2RlX2hlYWRlcnMgPSBxdygKKwkJCW5v ZGVzL25vZGVzLmgKKwkJCW5vZGVzL2V4ZWNub2Rlcy5oCisJCQlub2Rlcy9wbGFubm9kZXMu aAorCQkJbm9kZXMvcHJpbW5vZGVzLmgKKwkJCW5vZGVzL3BhdGhub2Rlcy5oCisJCQlub2Rl cy9leHRlbnNpYmxlLmgKKwkJCW5vZGVzL3BhcnNlbm9kZXMuaAorCQkJbm9kZXMvcmVwbG5v ZGVzLmgKKwkJCW5vZGVzL3ZhbHVlLmgKKwkJCWNvbW1hbmRzL3RyaWdnZXIuaAorCQkJY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5oCisJCQlmb3JlaWduL2Zkd2FwaS5oCisJCQlhY2Nlc3Mv YW1hcGkuaAorCQkJYWNjZXNzL3RhYmxlYW0uaAorCQkJYWNjZXNzL3RzbWFwaS5oCisJCQl1 dGlscy9yZWwuaAorCQkJbm9kZXMvc3VwcG9ydG5vZGVzLmgKKwkJCWV4ZWN1dG9yL3R1cHRh YmxlLmgKKwkJCW5vZGVzL2xvY2tvcHRpb25zLmgKKwkJCWFjY2Vzcy9zZGlyLmgKKwkJKTsK KworCQljaGRpcignc3JjL2JhY2tlbmQvbm9kZXMnKTsKKworCQlteSBAbm9kZV9maWxlcyA9 IG1hcCB7ICIuLi8uLi8uLi9zcmMvaW5jbHVkZS8kXyIgfSBAbm9kZV9oZWFkZXJzOworCisJ CXN5c3RlbSgicGVybCBnZW5fbm9kZV9zdXBwb3J0LnBsIEBub2RlX2ZpbGVzIik7CisJCW9w ZW4obXkgJGYsICc+JywgJ25vZGUtc3VwcG9ydC1zdGFtcCcpIHx8IGNvbmZlc3MgIkNvdWxk IG5vdCB0b3VjaCBub2RlLXN1cHBvcnQtc3RhbXAiOworCQljbG9zZSgkZik7CisJCWNoZGly KCcuLi8uLi8uLicpOworCX0KKworCWlmIChJc05ld2VyKAorCQkJJ3NyYy9pbmNsdWRlL25v ZGVzL25vZGV0YWdzLmgnLAorCQkJJ3NyYy9iYWNrZW5kL25vZGVzL25vZGV0YWdzLmgnKSkK Kwl7CisJCWNvcHlGaWxlKCdzcmMvYmFja2VuZC9ub2Rlcy9ub2RldGFncy5oJywKKwkJCSdz cmMvaW5jbHVkZS9ub2Rlcy9ub2RldGFncy5oJyk7CisJfQorCiAJb3BlbihteSAkbywgJz4n LCAiZG9jL3NyYy9zZ21sL3ZlcnNpb24uc2dtbCIpCiAJICB8fCBjcm9hayAiQ291bGQgbm90 IHdyaXRlIHRvIHZlcnNpb24uc2dtbFxuIjsKIAlwcmludCAkbyA8PEVPRjsKCmJhc2UtY29t bWl0OiBmMDMyZjYzZTcyN2MxYWIwNzYwM2IzZDFjZDg4ZDUwZjg1MGQ1NzM4Ci0tIAoyLjM0 LjEKCg== --------------dowxR00YBYP1c4T3AdTDhiQM--