Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vLFv8-00A1D1-1q for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Nov 2025 07:14:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vLFv7-004ciX-0j for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Nov 2025 07:14:33 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vLFv6-004ciO-1n for pgsql-hackers@lists.postgresql.org; Tue, 18 Nov 2025 07:14:33 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vLFv1-0007lK-04 for pgsql-hackers@postgresql.org; Tue, 18 Nov 2025 07:14:32 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1763450063; bh=a6IPvw1lnA3q9fclTfa/QOmh2HFnNN9EMz0mhVhwjY4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=QNZs7JMHiI2R3oCdkOxu+0wK6w2K1F77Y1tC+Juiqu9vXColcCnoWk+oltKB7Ogel ssKcbne+xHmlPcsUp8BnsJH8A7MhbNB8R7aaerfqD2+LFPasBxRNfKsEA++lqhH0pl lhHa9d2BRb7NEuBFq3ixE2YQuD0cv+xpOkerdcp30oReNPAXxKkQ3p+B2k0tY1LXbT 7mFReY+vIcYf95lPfbLxlTPJakrSnPG1gow3iuidCCOtIDR25+1RCwvjFRTxWvbLCM gt/QckeLQI69X4zaeliSg0nCljOmE+qAC8qtPm2wvE6DoOvPKMU5X2jSz4kMJsKKdx k2MoTvTk+6HTw== Received: from mail.postgrespro.ru (webmail-slave-mstn.l.postgrespro.ru [192.168.2.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.pyhalov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 3A88F60646; Tue, 18 Nov 2025 10:14:23 +0300 (MSK) MIME-Version: 1.0 Date: Tue, 18 Nov 2025 10:14:23 +0300 From: Alexander Pyhalov To: Matheus Alcantara Cc: Alena Rybakina , Pgsql Hackers Subject: Re: Asynchronous MergeAppend In-Reply-To: References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> <159b591411bb2c81332018927acbd509@postgrespro.ru> <2fb1d9923b6995492e7b163e6cb95402@postgrespro.ru> Message-ID: X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_150c14489ca395f67056ea11fea41379" X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2025/11/18 04:50:00 #27938972 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_150c14489ca395f67056ea11fea41379 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Hi. Matheus Alcantara =D0=BF=D0=B8=D1=81=D0=B0=D0=BB(=D0=B0) 2025-11-18 00:09= : > On Sat Nov 15, 2025 at 7:57 AM -03, Alexander Pyhalov wrote: >>> Here are some comments on my first look at the patches. I still don't >>> have too much experience with the executor code but I hope that I can >>> help with something. >>>=20 >>> v5-0001-mark_async_capable-subpath-should-match-subplan.patch >>>=20 >>> I don't have to much comments on this, perhaps we could have a commit >>> message explaining the reason behind the change. >>=20 >> I've expanded commit message. The issue is that mark_async_capable() >> relies >> on the fact that plan node type corresponds to path type. This is not >> true when >> (Merge)Append decides to insert Sort node. >>=20 > Your explanation about why this change is needed that you've include on > your first email sounds more clear IMHO. I would suggest the following > for a commit message: > mark_async_capable() believes that path corresponds to plan. This=20 > is > not true when create_[merge_]append_plan() inserts sort node. In > this case mark_async_capable() can treat Sort plan node as some > other and crash. Fix this by handling the Sort node separately. >=20 > This is needed to make MergeAppend node async-capable that it will > be implemented in a next commit. >=20 > What do you think? >=20 Seems to be OK. > I was reading the patch changes again and I have a minor point: >=20 > SubqueryScan *scan_plan =3D (SubquerySc= an=20 > *) plan; >=20 > /* > - * If the generated plan node includes > a gating Result node, > - * we can't execute it asynchronously. > + * If the generated plan node includes > a gating Result node or > + * a Sort node, we can't execute it > asynchronously. > */ > - if (IsA(plan, Result)) > + if (IsA(plan, Result) || IsA(plan,=20 > Sort)) >=20 > Shouldn't we cast the plan to SubqueryScan* after the IsA(...) check? I > know this code has been before your changes but type casting before a > IsA() check sounds a bit strange to me. Also perhaps we could add an > Assert(IsA(plan, SubqueryScan)) after the IsA(...) check and before the > type casting just for sanity? Yes, checking for node not to be A and then using it as B seems to be=20 strange. But casting to another type and checking if node is of a=20 particular type before using seems to be rather common. It doesn't do=20 any harm if we don't actually refer to SubqueryScan fields. Updated the first patch. --=20 Best regards, Alexander Pyhalov, Postgres Professional --=_150c14489ca395f67056ea11fea41379 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v7-0001-mark_async_capable-subpath-should-match-subplan.patch Content-Disposition: attachment; filename=v7-0001-mark_async_capable-subpath-should-match-subplan.patch; size=2425 RnJvbSAxMGQ4NzJjZTEwYmM4YzdmNmE0MzBmZTcwMzY3NzE0YjUyNmZhYjRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjE2OjI1ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAxLzJdIG1hcmtfYXN5bmNfY2FwYWJsZSgpOiBzdWJwYXRoIHNob3VsZCBtYXRjaCBzdWJw bGFuCgptYXJrX2FzeW5jX2NhcGFibGUoKSBiZWxpZXZlcyB0aGF0IHBhdGggY29ycmVzcG9uZHMg dG8gcGxhbi4gVGhpcyBpcwpub3QgdHJ1ZSB3aGVuIGNyZWF0ZV9bbWVyZ2VfXWFwcGVuZF9wbGFu KCkgaW5zZXJ0cyBzb3J0IG5vZGUuIEluCnRoaXMgY2FzZSBtYXJrX2FzeW5jX2NhcGFibGUoKSBj YW4gdHJlYXQgU29ydCBwbGFuIG5vZGUgYXMgc29tZQpvdGhlciBhbmQgY3Jhc2guIEZpeCB0aGlz IGJ5IGhhbmRsaW5nIHRoZSBTb3J0IG5vZGUgc2VwYXJhdGVseS4KClRoaXMgaXMgbmVlZGVkIHRv IG1ha2UgTWVyZ2VBcHBlbmQgbm9kZSBhc3luYy1jYXBhYmxlIHRoYXQgd2lsbApiZSBpbXBsZW1l bnRlZCBpbiBhIG5leHQgY29tbWl0LgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYyB8IDE4ICsrKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwIGlu c2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jCmluZGV4IDhhZjA5MWJhNjQ3Li41Y2Q3ZmE3Yjg5NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTEzOSwxMCArMTEzOSwxMiBAQCBtYXJrX2Fz eW5jX2NhcGFibGVfcGxhbihQbGFuICpwbGFuLCBQYXRoICpwYXRoKQogCQkJCVN1YnF1ZXJ5U2Nh biAqc2Nhbl9wbGFuID0gKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuOwogCiAJCQkJLyoKLQkJCQkgKiBJ ZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQgbm9kZSwK LQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5LgorCQkJCSAqIENoZWNr IHRoYXQgcGxhbiBpcyByZWFsbHkgYSBTdWJxdWVyeVNjYW4gYmVmb3JlIHVzaW5nIGl0LgorCQkJ CSAqIEl0IGNhbiBiZSBub3QgdHJ1ZSwgaWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVk ZXMgYQorCQkJCSAqIGdhdGluZyBSZXN1bHQgbm9kZSBvciBhIFNvcnQgbm9kZS4gSW4gc3VjaCBj YXNlIHdlIGNhbid0CisJCQkJICogZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4KIAkJCQkgKi8K LQkJCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCQkJaWYgKCFJc0Eoc2Nhbl9wbGFuLCBTdWJx dWVyeVNjYW4pKQogCQkJCQlyZXR1cm4gZmFsc2U7CiAKIAkJCQkvKgpAQCAtMTE2MCwxMCArMTE2 MiwxMCBAQCBtYXJrX2FzeW5jX2NhcGFibGVfcGxhbihQbGFuICpwbGFuLCBQYXRoICpwYXRoKQog CQkJCUZkd1JvdXRpbmUgKmZkd3JvdXRpbmUgPSBwYXRoLT5wYXJlbnQtPmZkd3JvdXRpbmU7CiAK IAkJCQkvKgotCQkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEgZ2F0 aW5nIFJlc3VsdCBub2RlLAotCQkJCSAqIHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNocm9ub3Vz bHkuCisJCQkJICogSWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVkZXMgYSBnYXRpbmcg UmVzdWx0IG5vZGUgb3IKKwkJCQkgKiBhIFNvcnQgbm9kZSwgd2UgY2FuJ3QgZXhlY3V0ZSBpdCBh c3luY2hyb25vdXNseS4KIAkJCQkgKi8KLQkJCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCQkJ aWYgKElzQShwbGFuLCBSZXN1bHQpIHx8IElzQShwbGFuLCBTb3J0KSkKIAkJCQkJcmV0dXJuIGZh bHNlOwogCiAJCQkJQXNzZXJ0KGZkd3JvdXRpbmUgIT0gTlVMTCk7CkBAIC0xMTc2LDkgKzExNzgs OSBAQCBtYXJrX2FzeW5jX2NhcGFibGVfcGxhbihQbGFuICpwbGFuLCBQYXRoICpwYXRoKQogCiAJ CQkvKgogCQkJICogSWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVkZXMgYSBSZXN1bHQg bm9kZSBmb3IgdGhlCi0JCQkgKiBwcm9qZWN0aW9uLCB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5j aHJvbm91c2x5LgorCQkJICogcHJvamVjdGlvbiBvciBhIFNvcnQgbm9kZSwgd2UgY2FuJ3QgZXhl Y3V0ZSBpdCBhc3luY2hyb25vdXNseS4KIAkJCSAqLwotCQkJaWYgKElzQShwbGFuLCBSZXN1bHQp KQorCQkJaWYgKElzQShwbGFuLCBSZXN1bHQpIHx8IElzQShwbGFuLCBTb3J0KSkKIAkJCQlyZXR1 cm4gZmFsc2U7CiAKIAkJCS8qCi0tIAoyLjQzLjAKCg== --=_150c14489ca395f67056ea11fea41379 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v7-0002-MergeAppend-should-support-Async-Foreign-Scan-subpla.patch Content-Disposition: attachment; filename*0*=UTF-8''v7-0002-MergeAppend-should-support-Async-Foreign-Scan-; filename*1*=subpla.patch; size=50968 RnJvbSA3NmEyMTJkMWJhNjZjYjcyN2E5NWE0ZjZjYmEyODc4Njc5NWI2ZDExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjIzOjQ3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAyLzJdIE1lcmdlQXBwZW5kIHNob3VsZCBzdXBwb3J0IEFzeW5jIEZvcmVpZ24gU2NhbiBz dWJwbGFucwoKLS0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQg ICAgfCAyODggKysrKysrKysrKysKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5j ICAgICAgICAgICB8ICAxMCArLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zk dy5zcWwgICAgIHwgIDg3ICsrKysKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAg ICAgICAgICAgICB8ICAxNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYyAgICAg ICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAgICAg ICAgICAgIHwgIDIxICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyAg ICAgICAgfCA0NTggKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jICAgICAgIHwgICA5ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Bh cmFtZXRlcnMuZGF0ICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUgfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBw ZW5kLmggICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAg ICAgICAgICAgICB8ICA1NyArKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dCAgICAgICAgfCAgIDMgKy0KIDE1IGZpbGVzIGNoYW5nZWQsIDkzOCBpbnNlcnRpb25zKCspLCAy NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3Rl ZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdy ZXNfZmR3Lm91dAppbmRleCBjZDI4MTI2MDQ5ZC4uNWFhNTYzYzk1ZWQgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApAQCAtMTE1NTYsNiArMTE1 NTYsNDYgQEAgU0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiAoMiByb3dzKQog CiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOworLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAlIDEw MCA9IDAgT1JERVIgQlkgYiwgYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2Ug QXBwZW5kCisgICBTb3J0IEtleTogYXN5bmNfcHQuYiwgYXN5bmNfcHQuYQorICAgLT4gIEFzeW5j IEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRfMQorICAgICAgICAgT3V0 cHV0OiBhc3luY19wdF8xLmEsIGFzeW5jX3B0XzEuYiwgYXN5bmNfcHRfMS5jCisgICAgICAgICBS ZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDEgV0hFUkUgKCgo YiAlIDEwMCkgPSAwKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFT VAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRf MgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRf Mi5jCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNl X3RibDIgV0hFUkUgKCgoYiAlIDEwMCkgPSAwKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwg YSBBU0MgTlVMTFMgTEFTVAorKDggcm93cykKKworU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVS RSBiICUgMTAwID0gMCBPUkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAgfCAgYyAgIAorLS0tLS0t Ky0tLS0tKy0tLS0tLQorIDEwMDAgfCAgIDAgfCAwMDAwCisgMjAwMCB8ICAgMCB8IDAwMDAKKyAx MTAwIHwgMTAwIHwgMDEwMAorIDIxMDAgfCAxMDAgfCAwMTAwCisgMTIwMCB8IDIwMCB8IDAyMDAK KyAyMjAwIHwgMjAwIHwgMDIwMAorIDEzMDAgfCAzMDAgfCAwMzAwCisgMjMwMCB8IDMwMCB8IDAz MDAKKyAxNDAwIHwgNDAwIHwgMDQwMAorIDI0MDAgfCA0MDAgfCAwNDAwCisgMTUwMCB8IDUwMCB8 IDA1MDAKKyAyNTAwIHwgNTAwIHwgMDUwMAorIDE2MDAgfCA2MDAgfCAwNjAwCisgMjYwMCB8IDYw MCB8IDA2MDAKKyAxNzAwIHwgNzAwIHwgMDcwMAorIDI3MDAgfCA3MDAgfCAwNzAwCisgMTgwMCB8 IDgwMCB8IDA4MDAKKyAyODAwIHwgODAwIHwgMDgwMAorIDE5MDAgfCA5MDAgfCAwOTAwCisgMjkw MCB8IDkwMCB8IDA5MDAKKygyMCByb3dzKQorCiAtLSBUZXN0IGVycm9yIGhhbmRsaW5nLCBpZiBh Y2Nlc3Npbmcgb25lIG9mIHRoZSBmb3JlaWduIHBhcnRpdGlvbnMgZXJyb3JzIG91dAogQ1JFQVRF IEZPUkVJR04gVEFCTEUgYXN5bmNfcF9icm9rZW4gUEFSVElUSU9OIE9GIGFzeW5jX3B0IEZPUiBW QUxVRVMgRlJPTSAoMTAwMDApIFRPICgxMDAwMSkKICAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMg KHRhYmxlX25hbWUgJ25vbl9leGlzdGVudF90YWJsZScpOwpAQCAtMTE2MDQsNiArMTE2NDQsNzYg QEAgQ09QWSBhc3luY19wdCBUTyBzdGRvdXQ7IC0tZXJyb3IKIEVSUk9SOiAgY2Fubm90IGNvcHkg ZnJvbSBmb3JlaWduIHRhYmxlICJhc3luY19wMSIKIERFVEFJTDogIFBhcnRpdGlvbiAiYXN5bmNf cDEiIGlzIGEgZm9yZWlnbiB0YWJsZSBpbiBwYXJ0aXRpb25lZCB0YWJsZSAiYXN5bmNfcHQiCiBI SU5UOiAgVHJ5IHRoZSBDT1BZIChTRUxFQ1QgLi4uKSBUTyB2YXJpYW50LgorLS0gVGVzdCBNZXJn ZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5 bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFwcGVuZAorICAgU29ydCBLZXk6IGFzeW5jX3B0LmIs IGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3Ax IGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMS5hLCBhc3luY19wdF8xLmIs IGFzeW5jX3B0XzEuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRfMS5iID09PSA1MDUpCisg ICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDEg T1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorICAgLT4gIEFzeW5j IEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRfMgorICAgICAgICAgT3V0 cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRfMi5jCisgICAgICAgICBG aWx0ZXI6IChhc3luY19wdF8yLmIgPT09IDUwNSkKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVD VCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMiBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNU LCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5h c3luY19wMyBhc3luY19wdF8zCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzMuYSwgYXN5bmNf cHRfMy5iLCBhc3luY19wdF8zLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzMuYiA9PT0g NTA1KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFz ZV90YmwzIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExTIExBU1QKKygxNCBy b3dzKQorCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBi LCBhOworICBhICAgfCAgYiAgfCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQorIDE1MDUgfCA1 MDUgfCAwNTA1CisgMjUwNSB8IDUwNSB8IDA1MDUKKyAzNTA1IHwgNTA1IHwgMDUwNQorKDMgcm93 cykKKworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQgcmVzY2FuCitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpCitTRUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5pIEZST00gKFNFTEVDVCBiICsg Zy5pIEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBCWSBiKSBmKGkpIE9SREVSIEJZ IGYuaSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9n LmdlbmVyYXRlX3NlcmllcyBnCisgICBPdXRwdXQ6IEFSUkFZKFN1YlBsYW4gYXJyYXlfMSkKKyAg IEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCAzKQorICAgU3ViUGxhbiBhcnJheV8x CisgICAgIC0+ICBMaW1pdAorICAgICAgICAgICBPdXRwdXQ6IGYuaQorICAgICAgICAgICAtPiAg U29ydAorICAgICAgICAgICAgICAgICBPdXRwdXQ6IGYuaQorICAgICAgICAgICAgICAgICBTb3J0 IEtleTogZi5pCisgICAgICAgICAgICAgICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uIGYKKyAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmLmkKKyAgICAgICAgICAgICAgICAgICAgICAgLT4g IE1lcmdlIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogYXN5 bmNfcHQuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBT Y2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogKGFzeW5jX3B0XzEuYiArIGcuaSksIGFzeW5jX3B0XzEuYgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYiBG Uk9NIHB1YmxpYy5iYXNlX3RibDEgV0hFUkUgKChhID4gJDE6OmludGVnZXIpKSBPUkRFUiBCWSBi IEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBBc3luYyBG b3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AyIGFzeW5jX3B0XzIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiAoYXN5bmNfcHRfMi5iICsgZy5pKSwgYXN5bmNf cHRfMi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNF TEVDVCBiIEZST00gcHVibGljLmJhc2VfdGJsMiBXSEVSRSAoKGEgPiAkMTo6aW50ZWdlcikpIE9S REVSIEJZIGIgQVNDIE5VTExTIExBU1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNfcHRfMworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IChhc3luY19wdF8zLmIgKyBnLmkp LCBhc3luY19wdF8zLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3Rl IFNRTDogU0VMRUNUIGIgRlJPTSBwdWJsaWMuYmFzZV90YmwzIFdIRVJFICgoYSA+ICQxOjppbnRl Z2VyKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVAorKDIyIHJvd3MpCisKK1NFTEVDVAorCUFS UkFZKFNFTEVDVCBmLmkgRlJPTSAoU0VMRUNUIGIgKyBnLmkgRlJPTSBhc3luY19wdCBXSEVSRSBh ID4gZy5pIE9SREVSIEJZIGIpIGYoaSkgT1JERVIgQlkgZi5pIExJTUlUIDEwKQorRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgMykgZyhpKTsKKyAgICAgICAgICAgYXJyYXkgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgezEsMSwxLDYsNiw2LDExLDExLDExLDE2fQorIHsy LDIsMiw3LDcsNywxMiwxMiwxMiwxN30KKyB7MywzLDMsOCw4LDgsMTMsMTMsMTMsMTh9CisoMyBy b3dzKQorCiBEUk9QIEZPUkVJR04gVEFCTEUgYXN5bmNfcDM7CiBEUk9QIFRBQkxFIGJhc2VfdGJs MzsKIC0tIENoZWNrIGNhc2Ugd2hlcmUgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGhhcyBsb2NhbC9y ZW1vdGUgcGFydGl0aW9ucwpAQCAtMTE2MzksNiArMTE3NDksMzcgQEAgU0VMRUNUICogRlJPTSBy ZXN1bHRfdGJsIE9SREVSIEJZIGE7CiAoMyByb3dzKQogCiBERUxFVEUgRlJPTSByZXN1bHRfdGJs OworLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFwcGVuZAorICAgU29ydCBL ZXk6IGFzeW5jX3B0LmIsIGFzeW5jX3B0LmEKKyAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24g cHVibGljLmFzeW5jX3AxIGFzeW5jX3B0XzEKKyAgICAgICAgIE91dHB1dDogYXN5bmNfcHRfMS5h LCBhc3luY19wdF8xLmIsIGFzeW5jX3B0XzEuYworICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRf MS5iID09PSA1MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1 YmxpYy5iYXNlX3RibDEgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFT VAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRf MgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRf Mi5jCisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8yLmIgPT09IDUwNSkKKyAgICAgICAgIFJl bW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMiBPUkRFUiBCWSBi IEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgU29ydAorICAgICAgICAg T3V0cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5jCisgICAgICAg ICBTb3J0IEtleTogYXN5bmNfcHRfMy5iLCBhc3luY19wdF8zLmEKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNfcHRfMworICAgICAgICAgICAgICAgT3V0cHV0 OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5jCisgICAgICAgICAgICAg ICBGaWx0ZXI6IChhc3luY19wdF8zLmIgPT09IDUwNSkKKygxNiByb3dzKQorCitTRUxFQ1QgKiBG Uk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAg fCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQorIDE1MDUgfCA1MDUgfCAwNTA1CisgMjUwNSB8 IDUwNSB8IDA1MDUKKyAzNTA1IHwgNTA1IHwgMDUwNQorKDMgcm93cykKKwogLS0gcGFydGl0aW9u d2lzZSBqb2lucwogU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gdHJ1ZTsKIENSRUFU RSBUQUJMRSBqb2luX3RibCAoYTEgaW50LCBiMSBpbnQsIGMxIHRleHQsIGEyIGludCwgYjIgaW50 LCBjMiB0ZXh0KTsKQEAgLTEyNDIxLDYgKzEyNTYyLDE1MyBAQCBTRUxFQ1QgYSBGUk9NIGJhc2Vf dGJsIFdIRVJFIChhLCByYW5kb20oKSA+IDApIElOIChTRUxFQ1QgYSwgcmFuZG9tKCkgPiAwIEZS T00gZgogRFJPUCBGT1JFSUdOIFRBQkxFIGZvcmVpZ25fdGJsIENBU0NBREU7CiBOT1RJQ0U6ICBk cm9wIGNhc2NhZGVzIHRvIGZvcmVpZ24gdGFibGUgZm9yZWlnbl90YmwyCiBEUk9QIFRBQkxFIGJh c2VfdGJsOworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0cjEg KGkgaW50LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFC TEUgYmFzZTEgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAoaSBp bnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AxIFBBUlRJ VElPTiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQor U0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUgRk9S RUlHTiBUQUJMRSBkaXN0cjFfcDIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEgg KE1PRFVMVVMgMiwgUkVNQUlOREVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVf bmFtZSAnYmFzZTInKTsKK0NSRUFURSBUQUJMRSBkaXN0cjIgKGkgaW50LCBqIGludCwgayB0ZXh0 KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFzZTMgKGkgaW50LCBqIGlu dCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlNCAoaSBpbnQsIGogaW50LCBrIHRleHQpOwor Q1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3AxIFBBUlRJVElPTiBPRiBkaXN0cjIgRk9SIFZB TFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNrIE9QVElP TlMgKHRhYmxlX25hbWUgJ2Jhc2UzJyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcDIg UEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVS IDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTQnKTsKK0lOU0VS VCBJTlRPIGRpc3RyMQorU0VMRUNUIGksIGkqMTAsICdkYXRhXycgfHwgaSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMDAwKSBpOworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSwgaSoxMCwg J2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0FOQUxZWkUgZGlz dHIxX3AxOworQU5BTFlaRSBkaXN0cjFfcDI7CitBTkFMWVpFIGRpc3RyMl9wMTsKK0FOQUxZWkUg ZGlzdHIyX3AyOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gVE8gT047CistLSBUZXN0 IGpvaW5zIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5p IEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRp c3RyMi5pIExJTUlUIDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBP dXRwdXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlzdHIxLmssIGRpc3RyMi5pLCBkaXN0cjIuaiwg ZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjEu aQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbgorICAgICAgICAgICAgICAgT3V0cHV0 OiBkaXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJf MS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIx X3AxIGRpc3RyMV8xKSBJTk5FUiBKT0lOIChwdWJsaWMuZGlzdHIyX3AxIGRpc3RyMl8xKQorICAg ICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHIzLmksIHIzLmosIHIzLmssIHI1LmksIHI1 LmosIHI1LmsgRlJPTSAocHVibGljLmJhc2UxIHIzIElOTkVSIEpPSU4gcHVibGljLmJhc2UzIHI1 IE9OICgoKHIzLmkgPSByNS5pKSkgQU5EICgocjUuaiA+IDkwKSkgQU5EICgocjUuayB+fiAnZGF0 YSUnKSkpKSBPUkRFUiBCWSByMy5pIEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAtPiAgQXN5bmMg Rm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8y LmosIGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRpc3RyMl8yLmosIGRpc3RyMl8yLmsKKyAgICAg ICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcDIgZGlzdHIxXzIpIElOTkVSIEpP SU4gKHB1YmxpYy5kaXN0cjJfcDIgZGlzdHIyXzIpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FM OiBTRUxFQ1QgcjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYuayBGUk9NIChwdWJsaWMu YmFzZTIgcjQgSU5ORVIgSk9JTiBwdWJsaWMuYmFzZTQgcjYgT04gKCgocjQuaSA9IHI2LmkpKSBB TkQgKChyNi5qID4gOTApKSBBTkQgKChyNi5rIH5+ICdkYXRhJScpKSkpIE9SREVSIEJZIHI0Lmkg QVNDIE5VTExTIExBU1QKKygxMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIy IFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBs aWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworIGkgIHwgIGogIHwgICAg ayAgICB8IGkgIHwgIGogIHwgICAgayAgICAKKy0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0rLS0t LS0rLS0tLS0tLS0tCisgMTAgfCAxMDAgfCBkYXRhXzEwIHwgMTAgfCAxMDAgfCBkYXRhXzEwCisg MTEgfCAxMTAgfCBkYXRhXzExIHwgMTEgfCAxMTAgfCBkYXRhXzExCisgMTIgfCAxMjAgfCBkYXRh XzEyIHwgMTIgfCAxMjAgfCBkYXRhXzEyCisgMTMgfCAxMzAgfCBkYXRhXzEzIHwgMTMgfCAxMzAg fCBkYXRhXzEzCisgMTQgfCAxNDAgfCBkYXRhXzE0IHwgMTQgfCAxNDAgfCBkYXRhXzE0CisgMTUg fCAxNTAgfCBkYXRhXzE1IHwgMTUgfCAxNTAgfCBkYXRhXzE1CisgMTYgfCAxNjAgfCBkYXRhXzE2 IHwgMTYgfCAxNjAgfCBkYXRhXzE2CisgMTcgfCAxNzAgfCBkYXRhXzE3IHwgMTcgfCAxNzAgfCBk YXRhXzE3CisgMTggfCAxODAgfCBkYXRhXzE4IHwgMTggfCAxODAgfCBkYXRhXzE4CisgMTkgfCAx OTAgfCBkYXRhXzE5IHwgMTkgfCAxOTAgfCBkYXRhXzE5CisoMTAgcm93cykKKworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3Ry MiBPTiBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFICBk aXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlz dHIxLmssIGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQK KyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjEuaQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24g U2NhbgorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0 cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAg ICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIxX3AxIGRpc3RyMV8xKSBMRUZUIEpPSU4gKHB1Ymxp Yy5kaXN0cjJfcDEgZGlzdHIyXzEpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1Qg cjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwgcjYuayBGUk9NIChwdWJsaWMuYmFzZTEgcjQg TEVGVCBKT0lOIHB1YmxpYy5iYXNlMyByNiBPTiAoKChyNC5pID0gcjYuaSkpIEFORCAoKHI2Lmsg fn4gJ2RhdGElJykpKSkgV0hFUkUgKChyNC5pID4gOTApKSBPUkRFUiBCWSByNC5pIEFTQyBOVUxM UyBMQVNUCisgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBP dXRwdXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8yLmosIGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRp c3RyMl8yLmosIGRpc3RyMl8yLmsKKyAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5k aXN0cjFfcDIgZGlzdHIxXzIpIExFRlQgSk9JTiAocHVibGljLmRpc3RyMl9wMiBkaXN0cjJfMikK KyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByNS5pLCByNS5qLCByNS5rLCByNy5p LCByNy5qLCByNy5rIEZST00gKHB1YmxpYy5iYXNlMiByNSBMRUZUIEpPSU4gcHVibGljLmJhc2U0 IHI3IE9OICgoKHI1LmkgPSByNy5pKSkgQU5EICgocjcuayB+fiAnZGF0YSUnKSkpKSBXSEVSRSAo KHI1LmkgPiA5MCkpIE9SREVSIEJZIHI1LmkgQVNDIE5VTExTIExBU1QKKygxMiByb3dzKQorCitT RUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4gZGlzdHIyIE9OICBkaXN0cjEuaT1kaXN0cjIu aSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFIGRpc3RyMS5pID4gOTAKK09SREVSIEJZ IGRpc3RyMS5pIExJTUlUIDIwOworICBpICB8ICBqICAgfCAgICBrICAgICB8ICBpICB8ICBqICAg fCAgICBrICAgICAKKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0t LS0tCisgIDkxIHwgIDkxMCB8IGRhdGFfOTEgIHwgIDkxIHwgIDkxMCB8IGRhdGFfOTEKKyAgOTIg fCAgOTIwIHwgZGF0YV85MiAgfCAgOTIgfCAgOTIwIHwgZGF0YV85MgorICA5MyB8ICA5MzAgfCBk YXRhXzkzICB8ICA5MyB8ICA5MzAgfCBkYXRhXzkzCisgIDk0IHwgIDk0MCB8IGRhdGFfOTQgIHwg IDk0IHwgIDk0MCB8IGRhdGFfOTQKKyAgOTUgfCAgOTUwIHwgZGF0YV85NSAgfCAgOTUgfCAgOTUw IHwgZGF0YV85NQorICA5NiB8ICA5NjAgfCBkYXRhXzk2ICB8ICA5NiB8ICA5NjAgfCBkYXRhXzk2 CisgIDk3IHwgIDk3MCB8IGRhdGFfOTcgIHwgIDk3IHwgIDk3MCB8IGRhdGFfOTcKKyAgOTggfCAg OTgwIHwgZGF0YV85OCAgfCAgOTggfCAgOTgwIHwgZGF0YV85OAorICA5OSB8ICA5OTAgfCBkYXRh Xzk5ICB8ICA5OSB8ICA5OTAgfCBkYXRhXzk5CisgMTAwIHwgMTAwMCB8IGRhdGFfMTAwIHwgMTAw IHwgMTAwMCB8IGRhdGFfMTAwCisgMTAxIHwgMTAxMCB8IGRhdGFfMTAxIHwgICAgIHwgICAgICB8 IAorIDEwMiB8IDEwMjAgfCBkYXRhXzEwMiB8ICAgICB8ICAgICAgfCAKKyAxMDMgfCAxMDMwIHwg ZGF0YV8xMDMgfCAgICAgfCAgICAgIHwgCisgMTA0IHwgMTA0MCB8IGRhdGFfMTA0IHwgICAgIHwg ICAgICB8IAorIDEwNSB8IDEwNTAgfCBkYXRhXzEwNSB8ICAgICB8ICAgICAgfCAKKyAxMDYgfCAx MDYwIHwgZGF0YV8xMDYgfCAgICAgfCAgICAgIHwgCisgMTA3IHwgMTA3MCB8IGRhdGFfMTA3IHwg ICAgIHwgICAgICB8IAorIDEwOCB8IDEwODAgfCBkYXRhXzEwOCB8ICAgICB8ICAgICAgfCAKKyAx MDkgfCAxMDkwIHwgZGF0YV8xMDkgfCAgICAgfCAgICAgIHwgCisgMTEwIHwgMTEwMCB8IGRhdGFf MTEwIHwgICAgIHwgICAgICB8IAorKDIwIHJvd3MpCisKKy0tIFRlc3QgcHJ1bmluZyB3aXRoIGFz eW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00gZGlzdHIyOworSU5TRVJUIElOVE8gZGlzdHIy CitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDApIGk7CitERUFMTE9DQVRFIEFMTDsKK1NFVCBwbGFuX2NhY2hlX21vZGUgVE8gZm9yY2Vf Z2VuZXJpY19wbGFuOworUFJFUEFSRSBhc3luY19wdF9xdWVyeSAoaW50LCBpbnQpIEFTCisgIFNF TEVDVCAqIEZST00gZGlzdHIyIFdIRVJFIGkgPSBBTlkoQVJSQVlbJDEsICQyXSkKKyAgT1JERVIg QlkgaSxqCisgIExJTUlUIDEwOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorCUVYRUNV VEUgYXN5bmNfcHRfcXVlcnkoMSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBN ZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjIuaSwgZGlzdHIyLmoKKyAgICAg ICAgIFN1YnBsYW5zIFJlbW92ZWQ6IDEKKyAgICAgICAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4g b24gcHVibGljLmRpc3RyMl9wMSBkaXN0cjJfMQorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0 cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZW1vdGUgU1FM OiBTRUxFQ1QgaSwgaiwgayBGUk9NIHB1YmxpYy5iYXNlMyBXSEVSRSAoKGkgPSBBTlkgKEFSUkFZ WyQxOjppbnRlZ2VyLCAkMjo6aW50ZWdlcl0pKSkgT1JERVIgQlkgaSBBU0MgTlVMTFMgTEFTVCwg aiBBU0MgTlVMTFMgTEFTVAorKDggcm93cykKKworRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAx KTsKKyBpIHwgIGogIHwgICAgayAgICAKKy0tLSstLS0tLSstLS0tLS0tLS0KKyAxIHwgIDEwIHwg ZGF0YV8xCisgMSB8IDExMCB8IGRhdGFfMTEKKyAxIHwgMjEwIHwgZGF0YV8yMQorIDEgfCAzMTAg fCBkYXRhXzMxCisgMSB8IDQxMCB8IGRhdGFfNDEKKyAxIHwgNTEwIHwgZGF0YV81MQorIDEgfCA2 MTAgfCBkYXRhXzYxCisgMSB8IDcxMCB8IGRhdGFfNzEKKyAxIHwgODEwIHwgZGF0YV84MQorIDEg fCA5MTAgfCBkYXRhXzkxCisoMTAgcm93cykKKworUkVTRVQgcGxhbl9jYWNoZV9tb2RlOworUkVT RVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0cjIs IGJhc2UxLCBiYXNlMiwgYmFzZTMsIGJhc2U0OwogQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElP TlMgKERST1AgYXN5bmNfY2FwYWJsZSk7CiBBTFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMg KERST1AgYXN5bmNfY2FwYWJsZSk7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9jb250cmli L3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3Rn cmVzX2Zkdy5jCmluZGV4IDA2YjUyYzY1MzAwLi4yMTA1YzljOTBiOSAxMDA2NDQKLS0tIGEvY29u dHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19m ZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTcyMTMsMTIgKzcyMTMsMTYgQEAgcG9zdGdyZXNGb3JlaWdu QXN5bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVzdCAqYXJlcSkKIAlGb3JlaWduU2NhblN0YXRl ICpub2RlID0gKEZvcmVpZ25TY2FuU3RhdGUgKikgYXJlcS0+cmVxdWVzdGVlOwogCVBnRmR3U2Nh blN0YXRlICpmc3N0YXRlID0gKFBnRmR3U2NhblN0YXRlICopIG5vZGUtPmZkd19zdGF0ZTsKIAlB c3luY1JlcXVlc3QgKnBlbmRpbmdBcmVxID0gZnNzdGF0ZS0+Y29ubl9zdGF0ZS0+cGVuZGluZ0Fy ZXE7Ci0JQXBwZW5kU3RhdGUgKnJlcXVlc3RvciA9IChBcHBlbmRTdGF0ZSAqKSBhcmVxLT5yZXF1 ZXN0b3I7Ci0JV2FpdEV2ZW50U2V0ICpzZXQgPSByZXF1ZXN0b3ItPmFzX2V2ZW50c2V0OworCVBs YW5TdGF0ZSAgKnJlcXVlc3RvciA9IGFyZXEtPnJlcXVlc3RvcjsKKwlXYWl0RXZlbnRTZXQgKnNl dDsKKwlCaXRtYXBzZXQgICpuZWVkcmVxdWVzdDsKIAogCS8qIFRoaXMgc2hvdWxkIG5vdCBiZSBj YWxsZWQgdW5sZXNzIGNhbGxiYWNrX3BlbmRpbmcgKi8KIAlBc3NlcnQoYXJlcS0+Y2FsbGJhY2tf cGVuZGluZyk7CiAKKwlzZXQgPSBHZXRBcHBlbmRFdmVudFNldChyZXF1ZXN0b3IpOworCW5lZWRy ZXF1ZXN0ID0gR2V0TmVlZFJlcXVlc3QocmVxdWVzdG9yKTsKKwogCS8qCiAJICogSWYgcHJvY2Vz c19wZW5kaW5nX3JlcXVlc3QoKSBoYXMgYmVlbiBpbnZva2VkIG9uIHRoZSBnaXZlbiByZXF1ZXN0 CiAJICogYmVmb3JlIHdlIGdldCBoZXJlLCB3ZSBtaWdodCBoYXZlIHNvbWUgdHVwbGVzIGFscmVh ZHk7IGluIHdoaWNoIGNhc2UKQEAgLTcyNTYsNyArNzI2MCw3IEBAIHBvc3RncmVzRm9yZWlnbkFz eW5jQ29uZmlndXJlV2FpdChBc3luY1JlcXVlc3QgKmFyZXEpCiAJCSAqIGJlbG93LCBiZWNhdXNl IHdlIG1pZ2h0IG90aGVyd2lzZSBlbmQgdXAgd2l0aCBubyBjb25maWd1cmVkIGV2ZW50cwogCQkg KiBvdGhlciB0aGFuIHRoZSBwb3N0bWFzdGVyIGRlYXRoIGV2ZW50LgogCQkgKi8KLQkJaWYgKCFi bXNfaXNfZW1wdHkocmVxdWVzdG9yLT5hc19uZWVkcmVxdWVzdCkpCisJCWlmICghYm1zX2lzX2Vt cHR5KG5lZWRyZXF1ZXN0KSkKIAkJCXJldHVybjsKIAkJaWYgKEdldE51bVJlZ2lzdGVyZWRXYWl0 RXZlbnRzKHNldCkgPiAxKQogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jl c19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9z dGdyZXNfZmR3LnNxbAppbmRleCA5YThmOWUyODEzNS4uYWEzODhjYjAyN2YgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCisrKyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCkBAIC0zOTIxLDYgKzM5MjEsMTEgQEAg SU5TRVJUIElOVE8gcmVzdWx0X3RibCBTRUxFQ1QgYSwgYiwgJ0FBQScgfHwgYyBGUk9NIGFzeW5j X3B0IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAqIEZST00gcmVzdWx0X3RibCBPUkRFUiBCWSBh OwogREVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExB SU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAl IDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAl IDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKKwogLS0gVGVzdCBlcnJvciBoYW5kbGluZywgaWYgYWNj ZXNzaW5nIG9uZSBvZiB0aGUgZm9yZWlnbiBwYXJ0aXRpb25zIGVycm9ycyBvdXQKIENSRUFURSBG T1JFSUdOIFRBQkxFIGFzeW5jX3BfYnJva2VuIFBBUlRJVElPTiBPRiBhc3luY19wdCBGT1IgVkFM VUVTIEZST00gKDEwMDAwKSBUTyAoMTAwMDEpCiAgIFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0 YWJsZV9uYW1lICdub25fZXhpc3RlbnRfdGFibGUnKTsKQEAgLTM5NDQsNiArMzk0OSwyMCBAQCBE RUxFVEUgRlJPTSByZXN1bHRfdGJsOwogLS0gVGVzdCBDT1BZIFRPIHdoZW4gZm9yZWlnbiB0YWJs ZSBpcyBwYXJ0aXRpb24KIENPUFkgYXN5bmNfcHQgVE8gc3Rkb3V0OyAtLWVycm9yCiAKKy0tIFRl c3QgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworU0VMRUNUICogRlJP TSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKworLS0gVGVzdCBhc3lu YyBNZXJnZSBBcHBlbmQgcmVzY2FuCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QKKwlBUlJBWShTRUxFQ1QgZi5pIEZST00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNfcHQg V0hFUkUgYSA+IGcuaSBPUkRFUiBCWSBiKSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkKK0ZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CitTRUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5p IEZST00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBC WSBiKSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDMpIGcoaSk7CisKIERST1AgRk9SRUlHTiBUQUJMRSBhc3luY19wMzsKIERST1AgVEFCTEUgYmFz ZV90YmwzOwogCkBAIC0zOTU5LDYgKzM5NzgsMTEgQEAgSU5TRVJUIElOVE8gcmVzdWx0X3RibCBT RUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAqIEZST00gcmVz dWx0X3RibCBPUkRFUiBCWSBhOwogREVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0gVGVzdCBN ZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00g YXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CitTRUxFQ1QgKiBGUk9NIGFz eW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworCiAtLSBwYXJ0aXRpb253aXNl IGpvaW5zCiBTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOwogCkBAIC00MTk3 LDYgKzQyMjEsNjkgQEAgU0VMRUNUIGEgRlJPTSBiYXNlX3RibCBXSEVSRSAoYSwgcmFuZG9tKCkg PiAwKSBJTiAoU0VMRUNUIGEsIHJhbmRvbSgpID4gMCBGUk9NIGYKIERST1AgRk9SRUlHTiBUQUJM RSBmb3JlaWduX3RibCBDQVNDQURFOwogRFJPUCBUQUJMRSBiYXNlX3RibDsKIAorLS0gVGVzdCBh c3luYyBNZXJnZSBBcHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0cjEgKGkgaW50LCBqIGludCwgayB0 ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFzZTEgKGkgaW50LCBq IGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAoaSBpbnQsIGogaW50LCBrIHRleHQp OworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AxIFBBUlRJVElPTiBPRiBkaXN0cjEgRk9S IFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNrIE9Q VElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjFf cDIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlO REVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTInKTsKKwor Q1JFQVRFIFRBQkxFIGRpc3RyMiAoaSBpbnQsIGogaW50LCBrIHRleHQpIFBBUlRJVElPTiBCWSBI QVNIIChpKTsKK0NSRUFURSBUQUJMRSBiYXNlMyAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JF QVRFIFRBQkxFIGJhc2U0IChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgRk9SRUlHTiBU QUJMRSBkaXN0cjJfcDEgUEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVM VVMgMiwgUkVNQUlOREVSIDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAn YmFzZTMnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9wMiBQQVJUSVRJT04gT0YgZGlz dHIyIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKK1NFUlZFUiBsb29w YmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlNCcpOworCitJTlNFUlQgSU5UTyBkaXN0cjEK K1NFTEVDVCBpLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw MCkgaTsKKworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSwgaSoxMCwgJ2RhdGFfJyB8fCBp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKKworQU5BTFlaRSBkaXN0cjFfcDE7CitB TkFMWVpFIGRpc3RyMV9wMjsKK0FOQUxZWkUgZGlzdHIyX3AxOworQU5BTFlaRSBkaXN0cjJfcDI7 CisKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luIFRPIE9OOworCistLSBUZXN0IGpvaW5z IHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBk aXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5p IExJTUlUIDEwOworU0VMRUNUICogRlJPTSBkaXN0cjEsIGRpc3RyMiBXSEVSRSBkaXN0cjEuaT1k aXN0cjIuaSBBTkQgZGlzdHIyLmogPiA5MCBhbmQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnCitPUkRF UiBCWSBkaXN0cjIuaSBMSU1JVCAxMDsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3RyMiBPTiBkaXN0cjEuaT1kaXN0cjIu aSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFICBkaXN0cjEuaSA+IDkwCitPUkRFUiBC WSBkaXN0cjEuaSBMSU1JVCAyMDsKK1NFTEVDVCAqIEZST00gZGlzdHIxIExFRlQgSk9JTiBkaXN0 cjIgT04gIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hFUkUg ZGlzdHIxLmkgPiA5MAorT1JERVIgQlkgZGlzdHIxLmkgTElNSVQgMjA7CisKKy0tIFRlc3QgcHJ1 bmluZyB3aXRoIGFzeW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00gZGlzdHIyOworSU5TRVJU IElOVE8gZGlzdHIyCitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDApIGk7CisKK0RFQUxMT0NBVEUgQUxMOworU0VUIHBsYW5fY2FjaGVf bW9kZSBUTyBmb3JjZV9nZW5lcmljX3BsYW47CitQUkVQQVJFIGFzeW5jX3B0X3F1ZXJ5IChpbnQs IGludCkgQVMKKyAgU0VMRUNUICogRlJPTSBkaXN0cjIgV0hFUkUgaSA9IEFOWShBUlJBWVskMSwg JDJdKQorICBPUkRFUiBCWSBpLGoKKyAgTElNSVQgMTA7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpCisJRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKK0VYRUNVVEUgYXN5bmNfcHRf cXVlcnkoMSwgMSk7CitSRVNFVCBwbGFuX2NhY2hlX21vZGU7CisKK1JFU0VUIGVuYWJsZV9wYXJ0 aXRpb253aXNlX2pvaW47CisKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0cjIsIGJhc2UxLCBiYXNl MiwgYmFzZTMsIGJhc2U0OworCiBBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoRFJPUCBh c3luY19jYXBhYmxlKTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoRFJPUCBhc3lu Y19jYXBhYmxlKTsKIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGRmMWMzZWFhYTU4Li4xZDQ2ZGUxMzkxOCAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbApAQCAtNTQ1NSw2ICs1NDU1LDIwIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAg ICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVu dHJ5IGlkPSJndWMtZW5hYmxlLWFzeW5jLW1lcmdlLWFwcGVuZCIgeHJlZmxhYmVsPSJlbmFibGVf YXN5bmNfbWVyZ2VfYXBwZW5kIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9hc3luY19t ZXJnZV9hcHBlbmQ8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRl eHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVu ZDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2lu ZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcXVlcnkgcGxhbm5lcidzIHVzZSBvZiBh c3luYy1hd2FyZQorICAgICAgICBtZXJnZSBhcHBlbmQgcGxhbiB0eXBlcy4gVGhlIGRlZmF1bHQg aXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0 ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1l bmFibGUtYml0bWFwc2NhbiIgeHJlZmxhYmVsPSJlbmFibGVfYml0bWFwc2NhbiI+CiAgICAgICA8 dGVybT48dmFybmFtZT5lbmFibGVfYml0bWFwc2NhbjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48 L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNBc3luYy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FzeW5jLmMKaW5kZXgg NWQzY2FiZTczZTMuLjZkYzE5ZWJjMzc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjQXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYwpAQCAt MTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgogI2luY2x1ZGUg ImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFwcGVuZC5oIgor I2luY2x1ZGUgImV4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oIgogI2luY2x1ZGUgImV4ZWN1dG9y L25vZGVGb3JlaWduc2Nhbi5oIgogCiAvKgpAQCAtMTIxLDYgKzEyMiw5IEBAIEV4ZWNBc3luY1Jl c3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIAkJY2FzZSBUX0FwcGVuZFN0YXRlOgogCQkJRXhl Y0FzeW5jQXBwZW5kUmVzcG9uc2UoYXJlcSk7CiAJCQlicmVhazsKKwkJY2FzZSBUX01lcmdlQXBw ZW5kU3RhdGU6CisJCQlFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3BvbnNlKGFyZXEpOworCQkJYnJl YWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBJZiB0aGUgbm9kZSBkb2Vzbid0IHN1cHBvcnQgYXN5bmMs IGNhbGxlciBtZXNzZWQgdXAuICovCiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUg dHlwZTogJWQiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IGExMWIzNmM3MTc2Li5j ODllMmQyNzg3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwpAQCAtMTE4NywxMCArMTE4 Nyw3IEBAIEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIHN0YXRp YyB2b2lkCiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhBcHBlbmRTdGF0ZSAqbm9kZSkKIHsK LQlCaXRtYXBzZXQgICp2YWxpZF9hc3luY3BsYW5zOwotCiAJQXNzZXJ0KG5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQpOwotCUFzc2VydChub2RlLT5hc192YWxpZF9hc3luY3BsYW5z ID09IE5VTEwpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3Vi cGxhbnMuICovCiAJaWYgKGJtc19pc19lbXB0eShub2RlLT5hc192YWxpZF9zdWJwbGFucykpCkBA IC0xMjAwLDIxICsxMTk3LDcgQEAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoQXBwZW5kU3Rh dGUgKm5vZGUpCiAJCXJldHVybjsKIAl9CiAKLQkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFy ZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KLQlpZiAoIWJtc19vdmVybGFwKG5vZGUtPmFz X3ZhbGlkX3N1YnBsYW5zLCBub2RlLT5hc19hc3luY3BsYW5zKSkKLQl7CisJLyogTm8gdmFsaWQg YXN5bmMgc3VicGxhbnMgaWRlbnRpZmllZC4gKi8KKwlpZiAoIWNsYXNzaWZ5X21hdGNoaW5nX3N1 YnBsYW5zX2NvbW1vbigmbm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsIG5vZGUtPmFzX2FzeW5jcGxh bnMsICZub2RlLT5hc192YWxpZF9hc3luY3BsYW5zKSkKIAkJbm9kZS0+YXNfbmFzeW5jcmVtYWlu ID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEdldCB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8K LQl2YWxpZF9hc3luY3BsYW5zID0gYm1zX2ludGVyc2VjdChub2RlLT5hc19hc3luY3BsYW5zLAot CQkJCQkJCQkJIG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zKTsKLQotCS8qIEFkanVzdCB0aGUgdmFs aWQgc3VicGxhbnMgdG8gY29udGFpbiBzeW5jIHN1YnBsYW5zIG9ubHkuICovCi0Jbm9kZS0+YXNf dmFsaWRfc3VicGxhbnMgPSBibXNfZGVsX21lbWJlcnMobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMs Ci0JCQkJCQkJCQkJCSAgdmFsaWRfYXN5bmNwbGFucyk7Ci0KLQkvKiBTYXZlIHZhbGlkIGFzeW5j IHN1YnBsYW5zLiAqLwotCW5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMgPSB2YWxpZF9hc3luY3Bs YW5zOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5k LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCA0MDVlOGY5 NDI4NS4uN2RiNDFmYmY0MGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVN ZXJnZUFwcGVuZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5j CkBAIC0zOSwxMCArMzksMTUgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAi ZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjQXN5bmMuaCIKICNp bmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9k ZU1lcmdlQXBwZW5kLmgiCiAjaW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5jbHVkZSAidXRpbHMv d2FpdF9ldmVudC5oIgorCisjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAg ICAgICAgMTYKIAogLyoKICAqIFdlIGhhdmUgb25lIHNsb3QgZm9yIGVhY2ggaXRlbSBpbiB0aGUg aGVhcCBhcnJheS4gIFdlIHVzZSBTbG90TnVtYmVyCkBAIC01NCw2ICs1OSwxMiBAQCB0eXBlZGVm IGludDMyIFNsb3ROdW1iZXI7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4ZWNNZXJnZUFwcGVu ZChQbGFuU3RhdGUgKnBzdGF0ZSk7CiBzdGF0aWMgaW50CWhlYXBfY29tcGFyZV9zbG90cyhEYXR1 bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpOwogCitzdGF0aWMgdm9pZCBjbGFzc2lmeV9tYXRjaGlu Z19zdWJwbGFucyhNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJn ZUFwcGVuZEFzeW5jQmVnaW4oTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSk7CitzdGF0aWMgdm9pZCBF eGVjTWVyZ2VBcHBlbmRBc3luY0dldE5leHQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSwgaW50IG1w bGFuKTsKK3N0YXRpYyBib29sIEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChNZXJnZUFwcGVu ZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pOworc3RhdGljIHZvaWQgRXhlY01lcmdlQXBwZW5kQXN5 bmNFdmVudFdhaXQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSk7CisKIAogLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJ CUV4ZWNJbml0TWVyZ2VBcHBlbmQKQEAgLTcxLDYgKzgyLDggQEAgRXhlY0luaXRNZXJnZUFwcGVu ZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW50CQkJ bnBsYW5zOwogCWludAkJCWksCiAJCQkJajsKKwlCaXRtYXBzZXQgICphc3luY3BsYW5zOworCWlu dAkJCW5hc3luY3BsYW5zOwogCiAJLyogY2hlY2sgZm9yIHVuc3VwcG9ydGVkIGZsYWdzICovCiAJ QXNzZXJ0KCEoZWZsYWdzICYgKEVYRUNfRkxBR19CQUNLV0FSRCB8IEVYRUNfRkxBR19NQVJLKSkp OwpAQCAtMTA2LDcgKzExOSwxMCBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpu b2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICogbGF0ZXIgY2FsbHMgdG8gRXhl Y0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgogCQkgKi8KIAkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVj X3BydW5lICYmIG5wbGFucyA+IDApCisJCXsKIAkJCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBs YW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKKwkJCW1lcmdlc3RhdGUt Pm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQl9CiAJfQogCWVsc2UKIAl7 CkBAIC0xMTksNiArMTM1LDcgQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCUFzc2VydChucGxhbnMgPiAwKTsKIAkJ bWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSB2YWxpZHN1YnBsYW5zID0KIAkJCWJtc19h ZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7CisJCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1 YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCQltZXJnZXN0YXRlLT5tc19wcnVuZV9zdGF0ZSA9 IE5VTEw7CiAJfQogCkBAIC0xMzUsMTEgKzE1MiwyNSBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1l cmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkgKiB0aGUgcmVz dWx0cyBpbnRvIHRoZSBtZXJnZXBsYW5zdGF0ZXMgYXJyYXkuCiAJICovCiAJaiA9IDA7CisJYXN5 bmNwbGFucyA9IE5VTEw7CisJbmFzeW5jcGxhbnMgPSAwOworCiAJaSA9IC0xOwogCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcih2YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKIAl7CiAJCVBsYW4J ICAgKmluaXROb2RlID0gKFBsYW4gKikgbGlzdF9udGgobm9kZS0+bWVyZ2VwbGFucywgaSk7CiAK KwkJLyoKKwkJICogUmVjb3JkIGFzeW5jIHN1YnBsYW5zLiAgV2hlbiBleGVjdXRpbmcgRXZhbFBs YW5RdWFsLCB3ZSB0cmVhdCB0aGVtCisJCSAqIGFzIHN5bmMgb25lczsgZG9uJ3QgZG8gdGhpcyB3 aGVuIGluaXRpYWxpemluZyBhbiBFdmFsUGxhblF1YWwgcGxhbgorCQkgKiB0cmVlLgorCQkgKi8K KwkJaWYgKGluaXROb2RlLT5hc3luY19jYXBhYmxlICYmIGVzdGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9 PSBOVUxMKQorCQl7CisJCQlhc3luY3BsYW5zID0gYm1zX2FkZF9tZW1iZXIoYXN5bmNwbGFucywg aik7CisJCQluYXN5bmNwbGFucysrOworCQl9CisKIAkJbWVyZ2VwbGFuc3RhdGVzW2orK10gPSBF eGVjSW5pdE5vZGUoaW5pdE5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsKIAl9CiAKQEAgLTE3MCw2ICsy MDEsNDUgQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJICovCiAJbWVyZ2VzdGF0ZS0+cHMucHNfUHJvakluZm8gPSBO VUxMOwogCisJLyogSW5pdGlhbGl6ZSBhc3luYyBzdGF0ZSAqLworCW1lcmdlc3RhdGUtPm1zX2Fz eW5jcGxhbnMgPSBhc3luY3BsYW5zOworCW1lcmdlc3RhdGUtPm1zX25hc3luY3BsYW5zID0gbmFz eW5jcGxhbnM7CisJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXF1ZXN0cyA9IE5VTEw7CisJbWVyZ2Vz dGF0ZS0+bXNfYXN5bmNyZXN1bHRzID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19oYXNfYXN5bmNy ZXN1bHRzID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7CisJbWVy Z2VzdGF0ZS0+bXNfbmVlZHJlcXVlc3QgPSBOVUxMOworCW1lcmdlc3RhdGUtPm1zX2V2ZW50c2V0 ID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc192YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKKworCWlm IChuYXN5bmNwbGFucyA+IDApCisJeworCQltZXJnZXN0YXRlLT5tc19hc3luY3JlcXVlc3RzID0g KEFzeW5jUmVxdWVzdCAqKikKKwkJCXBhbGxvYzAobnBsYW5zICogc2l6ZW9mKEFzeW5jUmVxdWVz dCAqKSk7CisKKwkJaSA9IC0xOworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoYXN5bmNw bGFucywgaSkpID49IDApCisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcTsKKworCQkJYXJlcSA9 IHBhbGxvYyhzaXplb2YoQXN5bmNSZXF1ZXN0KSk7CisJCQlhcmVxLT5yZXF1ZXN0b3IgPSAoUGxh blN0YXRlICopIG1lcmdlc3RhdGU7CisJCQlhcmVxLT5yZXF1ZXN0ZWUgPSBtZXJnZXBsYW5zdGF0 ZXNbaV07CisJCQlhcmVxLT5yZXF1ZXN0X2luZGV4ID0gaTsKKwkJCWFyZXEtPmNhbGxiYWNrX3Bl bmRpbmcgPSBmYWxzZTsKKwkJCWFyZXEtPnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsKKwkJCWFy ZXEtPnJlc3VsdCA9IE5VTEw7CisKKwkJCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVzdHNbaV0g PSBhcmVxOworCQl9CisKKwkJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXN1bHRzID0gKFR1cGxlVGFi bGVTbG90ICoqKQorCQkJcGFsbG9jMChucGxhbnMgKiBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikp OworCisJCWlmIChtZXJnZXN0YXRlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCQkJ Y2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMobWVyZ2VzdGF0ZSk7CisJfQorCiAJLyoKIAkgKiBp bml0aWFsaXplIHNvcnQta2V5IGluZm9ybWF0aW9uCiAJICovCkBAIC0yMzEsOSArMzAxLDE3IEBA IEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICogcnVuLXRpbWUgcHJ1bmlu ZyBpcyBkaXNhYmxlZCB0aGVuIHRoZSB2YWxpZCBzdWJwbGFucyB3aWxsIGFsd2F5cyBiZQogCQkg KiBzZXQgdG8gYWxsIHN1YnBsYW5zLgogCQkgKi8KLQkJaWYgKG5vZGUtPm1zX3ZhbGlkX3N1YnBs YW5zID09IE5VTEwpCisJCWlmICghbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkK KwkJewogCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPQogCQkJCUV4ZWNGaW5kTWF0Y2hpbmdT dWJQbGFucyhub2RlLT5tc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQkJbm9kZS0+bXNf dmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCQljbGFzc2lmeV9tYXRjaGluZ19z dWJwbGFucyhub2RlKTsKKwkJfQorCisJCS8qIElmIHRoZXJlIGFyZSBhbnkgYXN5bmMgc3VicGxh bnMsIGJlZ2luIGV4ZWN1dGluZyB0aGVtLiAqLworCQlpZiAobm9kZS0+bXNfbmFzeW5jcGxhbnMg PiAwKQorCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbihub2RlKTsKIAogCQkvKgogCQkgKiBG aXJzdCB0aW1lIHRocm91Z2g6IHB1bGwgdGhlIGZpcnN0IHR1cGxlIGZyb20gZWFjaCB2YWxpZCBz dWJwbGFuLApAQCAtMjQ2LDYgKzMyNCwxNiBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpw c3RhdGUpCiAJCQlpZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCiAJCQkJYmluYXJ5 aGVhcF9hZGRfdW5vcmRlcmVkKG5vZGUtPm1zX2hlYXAsIEludDMyR2V0RGF0dW0oaSkpOwogCQl9 CisKKwkJLyogTG9vayBhdCB2YWxpZCBhc3luYyBzdWJwbGFucyAqLworCQlpID0gLTE7CisJCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc192YWxpZF9hc3luY3BsYW5zLCBpKSkg Pj0gMCkKKwkJeworCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KG5vZGUsIGkpOworCQkJ aWYgKCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0pKQorCQkJCWJpbmFyeWhlYXBfYWRkX3Vu b3JkZXJlZChub2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKKwkJfQorCiAJCWJpbmFy eWhlYXBfYnVpbGQobm9kZS0+bXNfaGVhcCk7CiAJCW5vZGUtPm1zX2luaXRpYWxpemVkID0gdHJ1 ZTsKIAl9CkBAIC0yNjAsNyArMzQ4LDEzIEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBz dGF0ZSkKIAkJICogdG8gbm90IHB1bGwgdHVwbGVzIHVudGlsIG5lY2Vzc2FyeS4pCiAJCSAqLwog CQlpID0gRGF0dW1HZXRJbnQzMihiaW5hcnloZWFwX2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKLQkJ bm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJ CWlmIChibXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX2FzeW5jcGxhbnMpKQorCQkJRXhlY01lcmdl QXBwZW5kQXN5bmNHZXROZXh0KG5vZGUsIGkpOworCQllbHNlCisJCXsKKwkJCUFzc2VydChibXNf aXNfbWVtYmVyKGksIG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zKSk7CisJCQlub2RlLT5tc19zbG90 c1tpXSA9IEV4ZWNQcm9jTm9kZShub2RlLT5tZXJnZXBsYW5zW2ldKTsKKwkJfQogCQlpZiAoIVR1 cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCiAJCQliaW5hcnloZWFwX3JlcGxhY2VfZmlyc3Qo bm9kZS0+bXNfaGVhcCwgSW50MzJHZXREYXR1bShpKSk7CiAJCWVsc2UKQEAgLTI3Niw2ICszNzAs OCBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJewogCQlpID0gRGF0dW1H ZXRJbnQzMihiaW5hcnloZWFwX2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKIAkJcmVzdWx0ID0gbm9k ZS0+bXNfc2xvdHNbaV07CisJCS8qIEZvciBhc3luYyBwbGFuIHJlY29yZCB0aGF0IHdlIGNhbiBn ZXQgdGhlIG5leHQgdHVwbGUgKi8KKwkJbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19k ZWxfbWVtYmVyKG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMsIGkpOwogCX0KIAogCXJldHVybiBy ZXN1bHQ7CkBAIC0zNTUsNiArNDUxLDcgQEAgdm9pZAogRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1l cmdlQXBwZW5kU3RhdGUgKm5vZGUpCiB7CiAJaW50CQkJaTsKKwlpbnQJCQluYXN5bmNwbGFucyA9 IG5vZGUtPm1zX25hc3luY3BsYW5zOwogCiAJLyoKIAkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJh bXMgdXNlZCBpbiBwcnVuaW5nIGV4cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhlbgpAQCAtMzY1 LDggKzQ2MiwxMSBAQCBFeGVjUmVTY2FuTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9k ZSkKIAkJYm1zX292ZXJsYXAobm9kZS0+cHMuY2hnUGFyYW0sCiAJCQkJCW5vZGUtPm1zX3BydW5l X3N0YXRlLT5leGVjcGFyYW1pZHMpKQogCXsKKwkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCA9IGZhbHNlOwogCQlibXNfZnJlZShub2RlLT5tc192YWxpZF9zdWJwbGFucyk7CiAJ CW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfdmFs aWRfYXN5bmNwbGFucyk7CisJCW5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwogCX0K IAogCWZvciAoaSA9IDA7IGkgPCBub2RlLT5tc19ucGxhbnM7IGkrKykKQEAgLTM4Nyw2ICs0ODcs MzYwIEBAIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogCQlp ZiAoc3Vibm9kZS0+Y2hnUGFyYW0gPT0gTlVMTCkKIAkJCUV4ZWNSZVNjYW4oc3Vibm9kZSk7CiAJ fQorCisJLyogUmVzZXQgYXN5bmMgc3RhdGUgKi8KKwlpZiAobmFzeW5jcGxhbnMgPiAwKQorCXsK KwkJaSA9IC0xOworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfYXN5bmNw bGFucywgaSkpID49IDApCisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2Fz eW5jcmVxdWVzdHNbaV07CisKKwkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKwkJ CWFyZXEtPnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsKKwkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7 CisJCX0KKworCQlibXNfZnJlZShub2RlLT5tc19hc3luY3JlbWFpbik7CisJCW5vZGUtPm1zX2Fz eW5jcmVtYWluID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfbmVlZHJlcXVlc3QpOworCQlu b2RlLT5tc19uZWVkcmVxdWVzdCA9IE5VTEw7CisJCWJtc19mcmVlKG5vZGUtPm1zX2hhc19hc3lu Y3Jlc3VsdHMpOworCQlub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0gTlVMTDsKKwl9CiAJYmlu YXJ5aGVhcF9yZXNldChub2RlLT5tc19oZWFwKTsKIAlub2RlLT5tc19pbml0aWFsaXplZCA9IGZh bHNlOwogfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgY2xhc3NpZnlfbWF0Y2hpbmdf c3VicGxhbnMKKyAqCisgKiAgICAgICAgICAgICAgQ2xhc3NpZnkgdGhlIG5vZGUncyBtc192YWxp ZF9zdWJwbGFucyBpbnRvIHN5bmMgb25lcyBhbmQKKyAqICAgICAgICAgICAgICBhc3luYyBvbmVz LCBhZGp1c3QgaXQgdG8gY29udGFpbiBzeW5jIG9uZXMgb25seSwgYW5kIHNhdmUKKyAqICAgICAg ICAgICAgICBhc3luYyBvbmVzIGluIHRoZSBub2RlJ3MgbXNfdmFsaWRfYXN5bmNwbGFucy4KKyAq IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK2NsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1l cmdlQXBwZW5kU3RhdGUgKm5vZGUpCit7CisJQXNzZXJ0KG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5z X2lkZW50aWZpZWQpOworCisJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQg c3VicGxhbnMuICovCisJaWYgKGJtc19pc19lbXB0eShub2RlLT5tc192YWxpZF9zdWJwbGFucykp CisJeworCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkv KiBObyB2YWxpZCBhc3luYyBzdWJwbGFucyBpZGVudGlmaWVkLiAqLworCWlmICghY2xhc3NpZnlf bWF0Y2hpbmdfc3VicGxhbnNfY29tbW9uKCZub2RlLT5tc192YWxpZF9zdWJwbGFucywgbm9kZS0+ bXNfYXN5bmNwbGFucywgJm5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMpKQorCQlub2RlLT5tc19h c3luY3JlbWFpbiA9IE5VTEw7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVj TWVyZ2VBcHBlbmRBc3luY0JlZ2luCisgKgorICogICAgICAgICAgICAgIEJlZ2luIGV4ZWN1dGlu ZyBkZXNpZ25lZCBhc3luYy1jYXBhYmxlIHN1YnBsYW5zLgorICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0 aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbihNZXJnZUFwcGVuZFN0YXRlICpub2Rl KQoreworCWludAkJCWk7CisKKwkvKiBCYWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkg YXN5bmMtYXdhcmUgTWVyZ2VBcHBlbmRzLiAqLworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKG5vZGUtPnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKTsKKworCS8qIFdlIHNob3VsZCBuZXZl ciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KKwlBc3NlcnQobm9kZS0+ bXNfbnBsYW5zID4gMCk7CisKKwkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhl cmUgYXJlIG5vIGFzeW5jIHN1YnBsYW5zLiAqLworCUFzc2VydChub2RlLT5tc19uYXN5bmNwbGFu cyA+IDApOworCisJLyogRXhlY01lcmdlQXBwZW5kKCkgaWRlbnRpZmllcyB2YWxpZCBzdWJwbGFu cyAqLworCUFzc2VydChub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKworCS8q IEluaXRpYWxpemUgc3RhdGUgdmFyaWFibGVzLiAqLworCW5vZGUtPm1zX2FzeW5jcmVtYWluID0g Ym1zX2NvcHkobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucyk7CisKKwkvKiBOb3RoaW5nIHRvIGRv IGlmIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpZiAoYm1zX2lzX2Vt cHR5KG5vZGUtPm1zX2FzeW5jcmVtYWluKSkKKwkJcmV0dXJuOworCisJLyogTWFrZSBhIHJlcXVl c3QgZm9yIGVhY2ggb2YgdGhlIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCWkgPSAtMTsKKwl3 aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucywgaSkp ID49IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3Rz W2ldOworCisJCUFzc2VydChhcmVxLT5yZXF1ZXN0X2luZGV4ID09IGkpOworCQlBc3NlcnQoIWFy ZXEtPmNhbGxiYWNrX3BlbmRpbmcpOworCisJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJ RXhlY0FzeW5jUmVxdWVzdChhcmVxKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAg ICAgICBFeGVjTWVyZ2VBcHBlbmRBc3luY0dldE5leHQKKyAqCisgKiAgICAgICAgICAgICAgR2V0 IHRoZSBuZXh0IHR1cGxlIGZyb20gc3BlY2lmaWVkIGFzeW5jaHJvbm91cyBzdWJwbGFuLgorICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KE1l cmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKK3sKKwlub2RlLT5tc19zbG90c1ttcGxh bl0gPSBOVUxMOworCisJLyogUmVxdWVzdCBhIHR1cGxlIGFzeW5jaHJvbm91c2x5LiAqLworCWlm IChFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3Qobm9kZSwgbXBsYW4pKQorCQlyZXR1cm47CisK KwkvKgorCSAqIG5vZGUtPm1zX2FzeW5jcmVtYWluIGNhbiBiZSBOVUxMIGlmIHdlIGhhdmUgZmV0 Y2hlZCB0dXBsZXMsIGJ1dCBoYXZlbid0CisJICogcmV0dXJuZWQgdGhlbSB5ZXQuIEluIHRoaXMg Y2FzZSBFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QoKSBhYm92ZQorCSAqIGp1c3QgcmV0dXJu cyB0dXBsZXMgd2l0aG91dCBwZXJmb3JtaW5nIGEgcmVxdWVzdC4KKwkgKi8KKwl3aGlsZSAoYm1z X2lzX21lbWJlcihtcGxhbiwgbm9kZS0+bXNfYXN5bmNyZW1haW4pKQorCXsKKwkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKKworCQkvKiBXYWl0IG9yIHBvbGwgZm9yIGFzeW5jIGV2ZW50cy4gKi8K KwkJRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQobm9kZSk7CisKKwkJLyogUmVxdWVzdCBh IHR1cGxlIGFzeW5jaHJvbm91c2x5LiAqLworCQlpZiAoRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1 ZXN0KG5vZGUsIG1wbGFuKSkKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBXYWl0aW5nIHVudGls IHRoZXJlJ3Mgbm8gYXN5bmMgcmVxdWVzdHMgcGVuZGluZyBvciB3ZSBnb3Qgc29tZQorCQkgKiB0 dXBsZXMgZnJvbSBvdXIgcmVxdWVzdAorCQkgKi8KKwl9CisKKwkvKiBObyB0dXBsZXMgKi8KKwly ZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjTWVyZ2VBcHBlbmRB c3luY1JlcXVlc3QKKyAqCisgKiAgICAgICAgICAgICAgUmVxdWVzdCBhIHR1cGxlIGFzeW5jaHJv bm91c2x5LgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgYm9vbAorRXhlY01lcmdlQXBwZW5kQXN5 bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKK3sKKwlCaXRtYXBz ZXQgICpuZWVkcmVxdWVzdDsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBJZiB3ZSd2ZSBhbHJlYWR5 IGZldGNoZWQgbmVjZXNzYXJ5IGRhdGEsIGp1c3QgcmV0dXJuIGl0CisJICovCisJaWYgKGJtc19p c19tZW1iZXIobXBsYW4sIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCXsKKwkJbm9kZS0+ bXNfc2xvdHNbbXBsYW5dID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsKKwkJcmV0dXJu IHRydWU7CisJfQorCisJLyoKKwkgKiBHZXQgYSBsaXN0IG9mIG1lbWJlcnMgd2hpY2ggY2FuIHBy b2Nlc3MgcmVxdWVzdCBhbmQgZG9uJ3QgaGF2ZSBkYXRhCisJICogcmVhZHkuCisJICovCisJbmVl ZHJlcXVlc3QgPSBOVUxMOworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIo bm9kZS0+bXNfbmVlZHJlcXVlc3QsIGkpKSA+PSAwKQorCXsKKwkJaWYgKCFibXNfaXNfbWVtYmVy KGksIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCQkJbmVlZHJlcXVlc3QgPSBibXNfYWRk X21lbWJlcihuZWVkcmVxdWVzdCwgaSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIG1l bWJlcnMsIHdoaWNoIHN0aWxsIG5lZWQgcmVxdWVzdCwgbm8gbmVlZCB0byBzZW5kIGl0LgorCSAq LworCWlmIChibXNfaXNfZW1wdHkobmVlZHJlcXVlc3QpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkv KiBDbGVhciBtc19uZWVkcmVxdWVzdCBmbGFnLCBhcyB3ZSBhcmUgZ29pbmcgdG8gc2VuZCByZXF1 ZXN0cyBub3cgKi8KKwlub2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19kZWxfbWVtYmVycyhub2Rl LT5tc19uZWVkcmVxdWVzdCwgbmVlZHJlcXVlc3QpOworCisJLyogTWFrZSBhIG5ldyByZXF1ZXN0 IGZvciBlYWNoIG9mIHRoZSBhc3luYyBzdWJwbGFucyB0aGF0IG5lZWQgaXQuICovCisJaSA9IC0x OworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihuZWVkcmVxdWVzdCwgaSkpID49IDApCisJ eworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ldOworCisJ CS8qCisJCSAqIFdlJ3ZlIGp1c3QgY2hlY2tlZCB0aGF0IHN1YnBsYW4gZG9lc24ndCBhbHJlYWR5 IGhhdmUgc29tZSBmZXRjaGVkCisJCSAqIGRhdGEKKwkJICovCisJCUFzc2VydCghYm1zX2lzX21l bWJlcihpLCBub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKSk7CisKKwkJLyogRG8gdGhlIGFjdHVh bCB3b3JrLiAqLworCQlFeGVjQXN5bmNSZXF1ZXN0KGFyZXEpOworCX0KKwlibXNfZnJlZShuZWVk cmVxdWVzdCk7CisKKwkvKiBSZXR1cm4gbmVlZGVkIGFzeW5jaHJvbm91c2x5LWdlbmVyYXRlZCBy ZXN1bHRzIGlmIGFueS4gKi8KKwlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+bXNfaGFz X2FzeW5jcmVzdWx0cykpCisJeworCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2RlLT5tc19h c3luY3Jlc3VsdHNbbXBsYW5dOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjQXN5bmNNZXJnZUFwcGVuZFJl c3BvbnNlCisgKgorICogICAgICAgICAgICAgIFJlY2VpdmUgYSByZXNwb25zZSBmcm9tIGFuIGFz eW5jaHJvbm91cyByZXF1ZXN0IHdlIG1hZGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK0V4ZWNB c3luY01lcmdlQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQoreworCU1lcmdlQXBw ZW5kU3RhdGUgKm5vZGUgPSAoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBhcmVxLT5yZXF1ZXN0b3I7CisJ VHVwbGVUYWJsZVNsb3QgKnNsb3QgPSBhcmVxLT5yZXN1bHQ7CisKKwkvKiBUaGUgcmVzdWx0IHNo b3VsZCBiZSBhIFR1cGxlVGFibGVTbG90IG9yIE5VTEwuICovCisJQXNzZXJ0KHNsb3QgPT0gTlVM TCB8fCBJc0Eoc2xvdCwgVHVwbGVUYWJsZVNsb3QpKTsKKwlBc3NlcnQoIWJtc19pc19tZW1iZXIo YXJlcS0+cmVxdWVzdF9pbmRleCwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykpOworCisJbm9k ZS0+bXNfYXN5bmNyZXN1bHRzW2FyZXEtPnJlcXVlc3RfaW5kZXhdID0gTlVMTDsKKwkvKiBOb3Ro aW5nIHRvIGRvIGlmIHRoZSByZXF1ZXN0IGlzIHBlbmRpbmcuICovCisJaWYgKCFhcmVxLT5yZXF1 ZXN0X2NvbXBsZXRlKQorCXsKKwkJLyogVGhlIHJlcXVlc3Qgd291bGQgaGF2ZSBiZWVuIHBlbmRp bmcgZm9yIGEgY2FsbGJhY2suICovCisJCUFzc2VydChhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsK KwkJcmV0dXJuOworCX0KKworCS8qIElmIHRoZSByZXN1bHQgaXMgTlVMTCBvciBhbiBlbXB0eSBz bG90LCB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkby4gKi8KKwlpZiAoVHVwSXNOdWxsKHNsb3Qp KQorCXsKKwkJLyogVGhlIGVuZGluZyBzdWJwbGFuIHdvdWxkbid0IGhhdmUgYmVlbiBwZW5kaW5n IGZvciBhIGNhbGxiYWNrLiAqLworCQlBc3NlcnQoIWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOwor CQlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19kZWxfbWVtYmVyKG5vZGUtPm1zX2FzeW5jcmVt YWluLCBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkJcmV0dXJuOworCX0KKworCW5vZGUtPm1zX2hh c19hc3luY3Jlc3VsdHMgPSBibXNfYWRkX21lbWJlcihub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRz LCBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkvKiBTYXZlIHJlc3VsdCBzbyB3ZSBjYW4gcmV0dXJu IGl0LiAqLworCW5vZGUtPm1zX2FzeW5jcmVzdWx0c1thcmVxLT5yZXF1ZXN0X2luZGV4XSA9IHNs b3Q7CisKKwkvKgorCSAqIE1hcmsgdGhlIHN1YnBsYW4gdGhhdCByZXR1cm5lZCBhIHJlc3VsdCBh cyByZWFkeSBmb3IgYSBuZXcgcmVxdWVzdC4gIFdlCisJICogZG9uJ3QgbGF1bmNoIGFub3RoZXIg b25lIGhlcmUgaW1tZWRpYXRlbHkgYmVjYXVzZSBpdCBtaWdodCBjb21wbGV0ZS4KKwkgKi8KKwlu b2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPm1zX25lZWRyZXF1ZXN0 LAorCQkJCQkJCQkJCSAgYXJlcS0+cmVxdWVzdF9pbmRleCk7Cit9CisKKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CQlFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2FpdAorICoKKyAqCQlXYWl0IG9yIHBvbGwgZm9y IGZpbGUgZGVzY3JpcHRvciBldmVudHMgYW5kIGZpcmUgY2FsbGJhY2tzLgorICogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCitzdGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQoTWVyZ2VBcHBl bmRTdGF0ZSAqbm9kZSkKK3sKKwlpbnQJCQluZXZlbnRzID0gbm9kZS0+bXNfbmFzeW5jcGxhbnMg KyAyOyAvKiBvbmUgZm9yIFBNIGRlYXRoIGFuZAorCQkJCQkJCQkJCQkJCSAqIG9uZSBmb3IgbGF0 Y2ggKi8KKwlXYWl0RXZlbnQJb2NjdXJyZWRfZXZlbnRbRVZFTlRfQlVGRkVSX1NJWkVdOworCWlu dAkJCW5vY2N1cnJlZDsKKwlpbnQJCQlpOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxl ZCB3aGVuIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlBc3NlcnQoYm1z X251bV9tZW1iZXJzKG5vZGUtPm1zX2FzeW5jcmVtYWluKSA+IDApOworCisJbm9kZS0+bXNfZXZl bnRzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJlc291cmNlT3duZXIsIG5ldmVudHMp OworCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPm1zX2V2ZW50c2V0LCBXTF9FWElUX09OX1BNX0RF QVRILCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE5VTEwsIE5VTEwpOworCisJLyogR2l2ZSBl YWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0byBhZGQgYW4gZXZlbnQuICovCisJaSA9IC0x OworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc19hc3luY3BsYW5zLCBpKSkg Pj0gMCkKKwl7CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5jcmVxdWVzdHNb aV07CisKKwkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCisJCQlFeGVjQXN5bmNDb25maWd1 cmVXYWl0KGFyZXEpOworCX0KKworCS8qCisJICogTm8gbmVlZCBmb3IgZnVydGhlciBwcm9jZXNz aW5nIGlmIG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNvbmZpZ3VyZWQgYW55CisJICogZXZlbnRzLgor CSAqLworCWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhub2RlLT5tc19ldmVudHNldCkg PT0gMSkKKwl7CisJCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+bXNfZXZlbnRzZXQpOworCQlub2Rl LT5tc19ldmVudHNldCA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEFkZCB0aGUg cHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0IHdlIHdha2UgdXAgdG8gcHJvY2VzcyB0 aGUKKwkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGggQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4K KwkgKgorCSAqIE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGl0J3MgaW1wb3J0YW50IHRo YXQgdGhpcyBpcyBhZGRlZCB0byB0aGUKKwkgKiBXYWl0RXZlbnRTZXQgYWZ0ZXIgdGhlIEV4ZWNB c3luY0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwKKwkgKiBwb3N0Z3Jlc19mZHcgY2Fs bHMgIkdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkgPT0gMSIgdG8gY2hlY2sgaWYKKwkg KiBhbnkgb3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0LiAgVGhhdCdzIGEgcG9vciBkZXNpZ24s IGl0J3MKKwkgKiBxdWVzdGlvbmFibGUgZm9yIHBvc3RncmVzX2ZkdyB0byBiZSBkb2luZyB0aGF0 IGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0CisJICogd2UgY2Fubm90IGNoYW5nZSBpdCBub3cuICBU aGUgcGF0dGVybiBoYXMgcG9zc2libHkgYmVlbiBjb3BpZWQgdG8gb3RoZXIKKwkgKiBleHRlbnNp b25zIHRvby4KKwkgKi8KKwlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5tc19ldmVudHNldCwgV0xf TEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE15TGF0Y2gsIE5VTEwpOworCisJ LyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUgZXZlbnRzIGluIG9uZSBjYWxsLiAq LworCWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUpCisJCW5ldmVudHMgPSBFVkVOVF9C VUZGRVJfU0laRTsKKworCS8qCisJICogV2FpdCB1bnRpbCBhdCBsZWFzdCBvbmUgZXZlbnQgb2Nj dXJzLgorCSAqLworCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNldFdhaXQobm9kZS0+bXNfZXZlbnRz ZXQsIC0xIC8qIG5vIHRpbWVvdXQgKi8gLCBvY2N1cnJlZF9ldmVudCwKKwkJCQkJCQkJIG5ldmVu dHMsIFdBSVRfRVZFTlRfQVBQRU5EX1JFQURZKTsKKwlGcmVlV2FpdEV2ZW50U2V0KG5vZGUtPm1z X2V2ZW50c2V0KTsKKwlub2RlLT5tc19ldmVudHNldCA9IE5VTEw7CisJaWYgKG5vY2N1cnJlZCA9 PSAwKQorCQlyZXR1cm47CisKKwkvKiBEZWxpdmVyIG5vdGlmaWNhdGlvbnMuICovCisJZm9yIChp ID0gMDsgaSA8IG5vY2N1cnJlZDsgaSsrKQorCXsKKwkJV2FpdEV2ZW50ICAqdyA9ICZvY2N1cnJl ZF9ldmVudFtpXTsKKworCQkvKgorCQkgKiBFYWNoIHdhaXRpbmcgc3VicGxhbiBzaG91bGQgaGF2 ZSByZWdpc3RlcmVkIGl0cyB3YWl0IGV2ZW50IHdpdGgKKwkJICogdXNlcl9kYXRhIHBvaW50aW5n IGJhY2sgdG8gaXRzIEFzeW5jUmVxdWVzdC4KKwkJICovCisJCWlmICgody0+ZXZlbnRzICYgV0xf U09DS0VUX1JFQURBQkxFKSAhPSAwKQorCQl7CisJCQlBc3luY1JlcXVlc3QgKmFyZXEgPSAoQXN5 bmNSZXF1ZXN0ICopIHctPnVzZXJfZGF0YTsKKworCQkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRp bmcpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBNYXJrIGl0IGFzIG5vIGxvbmdlciBuZWVkaW5nIGEg Y2FsbGJhY2suICBXZSBtdXN0IGRvIHRoaXMKKwkJCQkgKiBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhl IGNhbGxiYWNrIGluIGNhc2UgdGhlIGNhbGxiYWNrIHJlc2V0cworCQkJCSAqIHRoZSBmbGFnLgor CQkJCSAqLworCQkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKworCQkJCS8qIERv IHRoZSBhY3R1YWwgd29yay4gKi8KKwkJCQlFeGVjQXN5bmNOb3RpZnkoYXJlcSk7CisJCQl9CisJ CX0KKworCQkvKiBIYW5kbGUgc3RhbmRhcmQgaW50ZXJydXB0cyAqLworCQlpZiAoKHctPmV2ZW50 cyAmIFdMX0xBVENIX1NFVCkgIT0gMCkKKwkJeworCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJ CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYwppbmRleCA4MzM1Y2Y1YjVjNS4uY2ZiZTUxMmEyNmUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTYzLDYgKzE2Myw3IEBAIGJvb2wJCWVuYWJs ZV9wYXJhbGxlbF9oYXNoID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZyA9 IHRydWU7CiBib29sCQllbmFibGVfcHJlc29ydGVkX2FnZ3JlZ2F0ZSA9IHRydWU7CiBib29sCQll bmFibGVfYXN5bmNfYXBwZW5kID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9hc3luY19tZXJnZV9hcHBl bmQgPSB0cnVlOwogCiB0eXBlZGVmIHN0cnVjdAogewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jCmluZGV4IDVjZDdmYTdiODk3Li44YTAyM2FhYzMzYiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTQ2Niw2ICsxNDY2LDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJl c3RfcGF0aCwKIAlMaXN0CSAgICpzdWJwbGFucyA9IE5JTDsKIAlMaXN0Q2VsbCAgICpzdWJwYXRo czsKIAlSZWxPcHRJbmZvICpyZWwgPSBiZXN0X3BhdGgtPnBhdGgucGFyZW50OworCWJvb2wJCWNv bnNpZGVyX2FzeW5jID0gZmFsc2U7CiAKIAkvKgogCSAqIFdlIGRvbid0IGhhdmUgdGhlIGFjdHVh bCBjcmVhdGlvbiBvZiB0aGUgTWVyZ2VBcHBlbmQgbm9kZSBzcGxpdCBvdXQKQEAgLTE0ODAsNiAr MTQ4MSwxMCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1l cmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4tPnJpZ2h0dHJlZSA9IE5VTEw7CiAJbm9k ZS0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CiAKKwljb25zaWRlcl9hc3luYyA9IChlbmFibGVf YXN5bmNfbWVyZ2VfYXBwZW5kICYmCisJCQkJCSAgIWJlc3RfcGF0aC0+cGF0aC5wYXJhbGxlbF9z YWZlICYmCisJCQkJCSAgbGlzdF9sZW5ndGgoYmVzdF9wYXRoLT5zdWJwYXRocykgPiAxKTsKKwog CS8qCiAJICogQ29tcHV0ZSBzb3J0IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5k J3MgdGxpc3QgYXMgbmVlZGVkLgogCSAqIEJlY2F1c2Ugd2UgcGFzcyBhZGp1c3RfdGxpc3RfaW5f cGxhY2UgPSB0cnVlLCB3ZSBtYXkgaWdub3JlIHRoZQpAQCAtMTU4MCw2ICsxNTg1LDEwIEBAIGNy ZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRo ICpiZXN0X3BhdGgsCiAJCQlzdWJwbGFuID0gc29ydF9wbGFuOwogCQl9CiAKKwkJLyogSWYgbmVl ZGVkLCBjaGVjayB0byBzZWUgaWYgc3VicGxhbiBjYW4gYmUgZXhlY3V0ZWQgYXN5bmNocm9ub3Vz bHkgKi8KKwkJaWYgKGNvbnNpZGVyX2FzeW5jKQorCQkJbWFya19hc3luY19jYXBhYmxlX3BsYW4o c3VicGxhbiwgc3VicGF0aCk7CisKIAkJc3VicGxhbnMgPSBsYXBwZW5kKHN1YnBsYW5zLCBzdWJw bGFuKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5k ZXggMTEyODE2N2MwMjUuLjJhNjcwYmQ4ZGIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19wYXJhbWV0ZXJzLmRhdApAQCAtODA1LDYgKzgwNSwxNCBAQAogICBib290X3ZhbCA9PiAndHJ1 ZScsCiB9LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQnLCB0eXBlID0+ ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5H X01FVEhPRCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9m IGFzeW5jIG1lcmdlIGFwcGVuZCBwbGFucy4nLAorICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLAor ICB2YXJpYWJsZSA9PiAnZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCcsCisgIGJvb3RfdmFsID0+ ICd0cnVlJywKK30sCisKKwogeyBuYW1lID0+ICdlbmFibGVfYml0bWFwc2NhbicsIHR5cGUgPT4g J2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdf TUVUSE9EJywKICAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0aGUgcGxhbm5lclwncyB1c2Ugb2Yg Yml0bWFwLXNjYW4gcGxhbnMuJywKICAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBmNTAzZDM2Yjky ZS4uZWEwMTRlMDA2ZjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdy ZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUKQEAgLTQwNSw2ICs0MDUsNyBAQAogIyAtIFBsYW5uZXIgTWV0aG9kIENvbmZp Z3VyYXRpb24gLQogCiAjZW5hYmxlX2FzeW5jX2FwcGVuZCA9IG9uCisjZW5hYmxlX2FzeW5jX21l cmdlX2FwcGVuZCA9IG9uCiAjZW5hYmxlX2JpdG1hcHNjYW4gPSBvbgogI2VuYWJsZV9nYXRoZXJt ZXJnZSA9IG9uCiAjZW5hYmxlX2hhc2hhZ2cgPSBvbgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv ZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVy Z2VBcHBlbmQuaAppbmRleCA0ZWIwNWRjMzBkNi4uZTNmZGIyNmVjZTYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oCisrKyBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oCkBAIC0xOSw1ICsxOSw2IEBACiBleHRlcm4gTWVyZ2VB cHBlbmRTdGF0ZSAqRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgRXhlY0VuZE1lcmdlQXBwZW5kKE1l cmdlQXBwZW5kU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1JlU2Nhbk1lcmdlQXBwZW5k KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOworZXh0ZXJuIHZvaWQgRXhlY0FzeW5jTWVyZ2VBcHBl bmRSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpOwogCiAjZW5kaWYJCQkJCQkJLyogTk9ERU1F UkdFQVBQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggMThhZThmMGQ0YmIuLjJiZWY1 NDU1MGEzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTU0NSwxMCArMTU0NSw2NyBAQCB0eXBl ZGVmIHN0cnVjdCBNZXJnZUFwcGVuZFN0YXRlCiAJVHVwbGVUYWJsZVNsb3QgKiptc19zbG90czsJ LyogYXJyYXkgb2YgbGVuZ3RoIG1zX25wbGFucyAqLwogCXN0cnVjdCBiaW5hcnloZWFwICptc19o ZWFwOyAvKiBiaW5hcnkgaGVhcCBvZiBzbG90IGluZGljZXMgKi8KIAlib29sCQltc19pbml0aWFs aXplZDsgLyogYXJlIHN1YnBsYW5zIHN0YXJ0ZWQ/ICovCisJQml0bWFwc2V0ICAqbXNfYXN5bmNw bGFuczsJLyogYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KKwlpbnQJCQltc19uYXN5bmNw bGFuczsgLyogIyBvZiBhc3luY2hyb25vdXMgcGxhbnMgKi8KKwlBc3luY1JlcXVlc3QgKiptc19h c3luY3JlcXVlc3RzOwkvKiBhcnJheSBvZiBBc3luY1JlcXVlc3RzICovCisJVHVwbGVUYWJsZVNs b3QgKiptc19hc3luY3Jlc3VsdHM7CS8qIHVucmV0dXJuZWQgcmVzdWx0cyBvZiBhc3luYyBwbGFu cyAqLworCUJpdG1hcHNldCAgKm1zX2hhc19hc3luY3Jlc3VsdHM7CS8qIHBsYW5zIHdoaWNoIGhh dmUgYXN5bmMgcmVzdWx0cyAqLworCUJpdG1hcHNldCAgKm1zX2FzeW5jcmVtYWluOyAvKiByZW1h aW5pbmcgYXN5bmNocm9ub3VzIHBsYW5zICovCisJQml0bWFwc2V0ICAqbXNfbmVlZHJlcXVlc3Q7 IC8qIGFzeW5jaHJvbm91cyBwbGFucyBuZWVkaW5nIGEgbmV3IHJlcXVlc3QgKi8KKwlzdHJ1Y3Qg V2FpdEV2ZW50U2V0ICptc19ldmVudHNldDsJLyogV2FpdEV2ZW50U2V0IHVzZWQgdG8gY29uZmln dXJlIGZpbGUKKwkJCQkJCQkJCQkgKiBkZXNjcmlwdG9yIHdhaXQgZXZlbnRzICovCiAJc3RydWN0 IFBhcnRpdGlvblBydW5lU3RhdGUgKm1zX3BydW5lX3N0YXRlOworCWJvb2wJCW1zX3ZhbGlkX3N1 YnBsYW5zX2lkZW50aWZpZWQ7CS8qIGlzIG1zX3ZhbGlkX3N1YnBsYW5zIHZhbGlkPyAqLwogCUJp dG1hcHNldCAgKm1zX3ZhbGlkX3N1YnBsYW5zOworCUJpdG1hcHNldCAgKm1zX3ZhbGlkX2FzeW5j cGxhbnM7CS8qIHZhbGlkIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVzICovCiB9IE1lcmdlQXBw ZW5kU3RhdGU7CiAKKy8qIEdldHRlcnMgZm9yIEFwcGVuZFN0YXRlIGFuZCBNZXJnZUFwcGVuZFN0 YXRlICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBXYWl0RXZlbnRTZXQgKgorR2V0QXBwZW5kRXZl bnRTZXQoUGxhblN0YXRlICpwcykKK3sKKwlBc3NlcnQoSXNBKHBzLCBBcHBlbmRTdGF0ZSkgfHwg SXNBKHBzLCBNZXJnZUFwcGVuZFN0YXRlKSk7CisKKwlpZiAoSXNBKHBzLCBBcHBlbmRTdGF0ZSkp CisJCXJldHVybiAoKEFwcGVuZFN0YXRlICopIHBzKS0+YXNfZXZlbnRzZXQ7CisJZWxzZQorCQly ZXR1cm4gKChNZXJnZUFwcGVuZFN0YXRlICopIHBzKS0+bXNfZXZlbnRzZXQ7Cit9CisKK3N0YXRp YyBpbmxpbmUgQml0bWFwc2V0ICoKK0dldE5lZWRSZXF1ZXN0KFBsYW5TdGF0ZSAqcHMpCit7CisJ QXNzZXJ0KElzQShwcywgQXBwZW5kU3RhdGUpIHx8IElzQShwcywgTWVyZ2VBcHBlbmRTdGF0ZSkp OworCisJaWYgKElzQShwcywgQXBwZW5kU3RhdGUpKQorCQlyZXR1cm4gKChBcHBlbmRTdGF0ZSAq KSBwcyktPmFzX25lZWRyZXF1ZXN0OworCWVsc2UKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmRTdGF0 ZSAqKSBwcyktPm1zX25lZWRyZXF1ZXN0OworfQorCisvKiBDb21tb24gcGFydCBvZiBjbGFzc2lm eV9tYXRjaGluZ19zdWJwbGFucygpIGZvciBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kICovCitzdGF0 aWMgaW5saW5lIGJvb2wKK2NsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zX2NvbW1vbihCaXRtYXBz ZXQgKip2YWxpZF9zdWJwbGFucywgQml0bWFwc2V0ICphc3luY3BsYW5zLCBCaXRtYXBzZXQgKip2 YWxpZF9hc3luY3BsYW5zKQoreworCUFzc2VydCgqdmFsaWRfYXN5bmNwbGFucyA9PSBOVUxMKTsK KworCS8qIENoZWNrZWQgYnkgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoKSAqLworCUFzc2Vy dCghYm1zX2lzX2VtcHR5KCp2YWxpZF9zdWJwbGFucykpOworCisJLyogTm90aGluZyB0byBkbyBp ZiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCisJaWYgKCFibXNfb3Zlcmxh cCgqdmFsaWRfc3VicGxhbnMsIGFzeW5jcGxhbnMpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBH ZXQgdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCisJKnZhbGlkX2FzeW5jcGxhbnMgPSBibXNfaW50 ZXJzZWN0KGFzeW5jcGxhbnMsCisJCQkJCQkJCQkgICp2YWxpZF9zdWJwbGFucyk7CisKKwkvKiBB ZGp1c3QgdGhlIHZhbGlkIHN1YnBsYW5zIHRvIGNvbnRhaW4gc3luYyBzdWJwbGFucyBvbmx5LiAq LworCSp2YWxpZF9zdWJwbGFucyA9IGJtc19kZWxfbWVtYmVycygqdmFsaWRfc3VicGxhbnMsCisJ CQkJCQkJCQkgICp2YWxpZF9hc3luY3BsYW5zKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyogLS0t LS0tLS0tLS0tLS0tLQogICoJIFJlY3Vyc2l2ZVVuaW9uU3RhdGUgaW5mb3JtYXRpb24KICAqCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL2Nvc3QuaAppbmRleCBiNTIzYmNkYThmMy4uZmVlNDkxYjc3YWQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaApAQCAtNzAsNiArNzAsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf cGFyYWxsZWxfaGFzaDsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9wYXJ0aXRpb25f cHJ1bmluZzsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9wcmVzb3J0ZWRfYWdncmVn YXRlOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2FzeW5jX2FwcGVuZDsKK2V4dGVy biBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQ7CiBleHRlcm4gUEdE TExJTVBPUlQgaW50IGNvbnN0cmFpbnRfZXhjbHVzaW9uOwogCiBleHRlcm4gZG91YmxlIGluZGV4 X3BhZ2VzX2ZldGNoZWQoZG91YmxlIHR1cGxlc19mZXRjaGVkLCBCbG9ja051bWJlciBwYWdlcywK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggM2IzN2ZhZmE2NWIuLmFl NGZhNDJhNDM4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdz Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTQ5 LDYgKzE0OSw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUg bmFtZSBsaWtlICdlbmFibGUlJzsKICAgICAgICAgICAgICAgbmFtZSAgICAgICAgICAgICAgfCBz ZXR0aW5nIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tCiAgZW5h YmxlX2FzeW5jX2FwcGVuZCAgICAgICAgICAgIHwgb24KKyBlbmFibGVfYXN5bmNfbWVyZ2VfYXBw ZW5kICAgICAgfCBvbgogIGVuYWJsZV9iaXRtYXBzY2FuICAgICAgICAgICAgICB8IG9uCiAgZW5h YmxlX2Rpc3RpbmN0X3Jlb3JkZXJpbmcgICAgIHwgb24KICBlbmFibGVfZWFnZXJfYWdncmVnYXRl ICAgICAgICAgfCBvbgpAQCAtMTczLDcgKzE3NCw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZy b20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfc2Vxc2Nh biAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8 IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyNSByb3dzKQorKDI2 IHJvd3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlvbnMgZm9y IHZhcmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJlIHByZXNlbnQgb3IgYWJz ZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3RtYXN0ZXIgc3RhcnQuCi0t IAoyLjQzLjAKCg== --=_150c14489ca395f67056ea11fea41379--