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 1vM5YZ-000hqX-20 for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Nov 2025 14:22:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vM5YX-0022eN-2j for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Nov 2025 14:22:42 +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 1vM5YX-0022eF-0V for pgsql-hackers@lists.postgresql.org; Thu, 20 Nov 2025 14:22:41 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vM5YQ-000XOZ-30 for pgsql-hackers@postgresql.org; Thu, 20 Nov 2025 14:22:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1763648552; bh=wqB9RpArE3hwirKXS6eMtiiQRcCbpuT8x/ugb3ufhaM=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=F1xyYy5fe9XqMyAwAu8b8KCZ/oZ9ce73XJMlzFg4QstsbM2hp4/JJXJtV8MBLzVUl a+M8m5R5QGsMXooQQHYRBvIEOqGM/ilER91aQqcjszs2qETCC4fIxxFN24eXZFt2/0 UTL8IfsB42+A6p+FKeerc8FfVuf53vSjfnCzqRUvpcV5rpPCJUmU9kCv9mC+Xftois 7RUpAfOYuUFOrvKPYSVR/bNVkK1eJ+7/ub/XsmpoFZ/aj7E2HbkqZtwtZz6EWFVpzR sX1YLaUDiZH8wPsZZWjcW0tVFxjMAe9tAxWkUsvyeN3Twm2pqROJvW7tz9j6tjo13Y KhFrlm61KMvgQ== 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 7686660C72; Thu, 20 Nov 2025 17:22:32 +0300 (MSK) MIME-Version: 1.0 Date: Thu, 20 Nov 2025 17:22:32 +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="=_394198ab026a5018363a24aaa394a16d" 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/20 11:26:00 #27952687 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 --=_394198ab026a5018363a24aaa394a16d Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Matheus Alcantara =D0=BF=D0=B8=D1=81=D0=B0=D0=BB(=D0=B0) 2025-11-20 00:51= : > On Tue Nov 18, 2025 at 4:14 AM -03, Alexander Pyhalov wrote: >> Updated the first patch. >>=20 > Thanks for the new version. Some new comments. >=20 > v7-0002-MergeAppend-should-support-Async-Foreign-Scan-subpla.patch: >=20 > 1. Should be "nasyncplans" instead of "nplans"? ExecInitAppend use > "nasyncplans" to allocate the as_asyncresults array. >=20 > + mergestate->ms_asyncresults =3D (TupleTableSlot **) > + palloc0(nplans * sizeof(TupleTableSlot *)); > + >=20 No. There's a difference between how Append and MergeAppend handle async=20 results. When Append looks for the next result, it can return any of them. So, async results are not ordered in Append. We have maximum nasyncplans of async results and return the first=20 available result when we asked for one . For example, in ExecAppendAsyncRequest(): 1004 /* 1005 * If there are any asynchronously-generated results that=20 have not yet 1006 * been returned, we have nothing to do; just return one of=20 them. 1007 */ 1008 if (node->as_nasyncresults > 0) 1009 { 1010 --node->as_nasyncresults; 1011 *result =3D=20 node->as_asyncresults[node->as_nasyncresults]; 1012 return true; 1013 } ExecAppendAsyncGetNext() looks (via ExecAppendAsyncRequest()) on any=20 result. However, when we are asked for result in MergeAppend, we should return=20 result of the specific subplan. To achieve this we should know, which subplan=20 given results correspond to. So, we enumerate async results in the same way as requests (or=20 ms_valid_asyncplans). Look at ExecAppendAsyncGetNext()/ExecAppendAsyncRequest(). > 2. I think that this comment should be updated. IIUC ms_valid_subplans > may not be all subplans because classify_matching_subplans() may move > async ones to ms_valid_asyncplans. Is that right? >=20 > /* > * If we've yet to determine the valid subplans then do so now. If > * run-time pruning is disabled then the valid subplans will always be > * set to all subplans. > */ >=20 Yes, you are correct, and similar comment in nodeAppend.c lacks the last=20 sentence. Removed it. > 3. This code comment should also mention the=20 > Assert(!bms_is_member(...));? >=20 > + /* The result should be a TupleTableSlot or NULL. */ > + Assert(slot =3D=3D NULL || IsA(slot, TupleTableSlot)); > + Assert(!bms_is_member(areq->request_index,=20 > node->ms_has_asyncresults)); >=20 > 4. It's worth include bms_num_members(node->ms_needrequest) <=3D 0 chec= k > on ExecMergeAppendAsyncRequest() as an early return? IIUC it would=20 > avoid > the bms_is_member(), bms_next_member() and bms_is_empty(needrequest) > calls. We can't exclude the first bms_is_member(), as node->ms_needrequest can=20 be empty (we've already got result), so do not need to do request to get it, just return previously fetched result. Not sure about check above the following lines: 650 i =3D -1; 651 while ((i =3D bms_next_member(node->ms_needrequest, i)) >=3D = 0) 652 { 653 if (!bms_is_member(i, node->ms_has_asyncresults)) 654 needrequest =3D bms_add_member(needrequest,=20 i); 655 } 656 I think, it shouldn't be much cheaper as bms_next_member() will execute=20 a couple instructions to find out that the number of words in bitmapset is zero, but will do=20 nothing expensive. >=20 > ExecMergeAppendAsyncRequest(MergeAppendState *node, int mplan) > Bitmapset *needrequest; > int i; >=20 > + if (bms_num_members(node->ms_needrequest) <=3D 0) > + return false; > + >=20 No, as I've mentioned, we can't exclude bms_is_member(mplan,=20 node->ms_has_asyncresults) check. We could have received result while waiting for data for another=20 subplan. Let's assume, we have 2 async subplans (0 and 1). For example, we've=20 decided to get data from subplan 1. We 've already send requests to both async=20 subplans (in ExecMergeAppendAsyncBegin() or later). Now we do ExecMergeAppendAsyncRequest(), but there's no subplans, which=20 need request. So we enter the waiting loop. Let's assume we got event for another=20 subplan (0). Via ExecAsyncNotify(), ExecAsyncForeignScanNotify() we go to postgresForeignAsyncNotify(),=20 fetch data and mark request as complete. Via ExecAsyncMergeAppendResponse() we save results for subplan 0 in=20 node->ms_asyncresults[0]. When we finally got result for subplan 1, we do the same, but now exit the loop. When=20 MergeAppend finally decides that it needs results from subplan 0, we already have them, but ms_needrequest is=20 empty, so ExecMergeAppendAsyncRequest() just returns this pre-fetched tuple. --=20 Best regards, Alexander Pyhalov, Postgres Professional --=_394198ab026a5018363a24aaa394a16d Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v8-0001-mark_async_capable-subpath-should-match-subplan.patch Content-Disposition: attachment; filename=v8-0001-mark_async_capable-subpath-should-match-subplan.patch; size=2420 RnJvbSAwN2FhMmYyZTU5MjYyNWJlYzU0MWM0Mjk2Zjc3ZTQyNGY3ZTY2MmIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjE2OjI1ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAxLzJdIG1hcmtfYXN5bmNfY2FwYWJsZSgpOiBzdWJwYXRoIHNob3VsZCBtYXRjaCBzdWJw bGFuCgptYXJrX2FzeW5jX2NhcGFibGUoKSBiZWxpZXZlcyB0aGF0IHBhdGggY29ycmVzcG9uZHMg dG8gcGxhbi4gVGhpcyBpcwpub3QgdHJ1ZSB3aGVuIGNyZWF0ZV9bbWVyZ2VfXWFwcGVuZF9wbGFu KCkgaW5zZXJ0cyBzb3J0IG5vZGUuIEluCnRoaXMgY2FzZSBtYXJrX2FzeW5jX2NhcGFibGUoKSBj YW4gdHJlYXQgU29ydCBwbGFuIG5vZGUgYXMgc29tZQpvdGhlciBhbmQgY3Jhc2guIEZpeCB0aGlz IGJ5IGhhbmRsaW5nIHRoZSBTb3J0IG5vZGUgc2VwYXJhdGVseS4KClRoaXMgaXMgbmVlZGVkIHRv IG1ha2UgTWVyZ2VBcHBlbmQgbm9kZSBhc3luYy1jYXBhYmxlIHRoYXQgd2lsbApiZSBpbXBsZW1l bnRlZCBpbiBhIG5leHQgY29tbWl0LgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYyB8IDE4ICsrKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwIGlu c2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jCmluZGV4IDhhZjA5MWJhNjQ3Li40NzhhZTBiN2JhMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTEzOSwxMCArMTEzOSwxMiBAQCBtYXJrX2Fz eW5jX2NhcGFibGVfcGxhbihQbGFuICpwbGFuLCBQYXRoICpwYXRoKQogCQkJCVN1YnF1ZXJ5U2Nh biAqc2Nhbl9wbGFuID0gKFN1YnF1ZXJ5U2NhbiAqKSBwbGFuOwogCiAJCQkJLyoKLQkJCQkgKiBJ ZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQgbm9kZSwK LQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5LgorCQkJCSAqIENoZWNr IHRoYXQgcGxhbiBpcyByZWFsbHkgYSBTdWJxdWVyeVNjYW4gYmVmb3JlIHVzaW5nIGl0LgorCQkJ CSAqIEl0IGNhbiBiZSBub3QgdHJ1ZSwgaWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVk ZXMgYQorCQkJCSAqIGdhdGluZyBSZXN1bHQgbm9kZSBvciBhIFNvcnQgbm9kZS4gSW4gc3VjaCBj YXNlIHdlIGNhbid0CisJCQkJICogZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4KIAkJCQkgKi8K LQkJCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCQkJaWYgKCFJc0EocGxhbiwgU3VicXVlcnlT Y2FuKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCiAJCQkJLyoKQEAgLTExNjAsMTAgKzExNjIsMTAg QEAgbWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAkJCQlG ZHdSb3V0aW5lICpmZHdyb3V0aW5lID0gcGF0aC0+cGFyZW50LT5mZHdyb3V0aW5lOwogCiAJCQkJ LyoKLQkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBS ZXN1bHQgbm9kZSwKLQkJCQkgKiB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5Lgor CQkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEgZ2F0aW5nIFJlc3Vs dCBub2RlIG9yCisJCQkJICogYSBTb3J0IG5vZGUsIHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNo cm9ub3VzbHkuCiAJCQkJICovCi0JCQkJaWYgKElzQShwbGFuLCBSZXN1bHQpKQorCQkJCWlmIChJ c0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJCQkJCXJldHVybiBmYWxzZTsK IAogCQkJCUFzc2VydChmZHdyb3V0aW5lICE9IE5VTEwpOwpAQCAtMTE3Niw5ICsxMTc4LDkgQEAg bWFya19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAogCQkJLyoK IAkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2RlIGluY2x1ZGVzIGEgUmVzdWx0IG5vZGUg Zm9yIHRoZQotCQkJICogcHJvamVjdGlvbiwgd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25v dXNseS4KKwkJCSAqIHByb2plY3Rpb24gb3IgYSBTb3J0IG5vZGUsIHdlIGNhbid0IGV4ZWN1dGUg aXQgYXN5bmNocm9ub3VzbHkuCiAJCQkgKi8KLQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJ CWlmIChJc0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29ydCkpCiAJCQkJcmV0dXJuIGZh bHNlOwogCiAJCQkvKgotLSAKMi40My4wCgo= --=_394198ab026a5018363a24aaa394a16d Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v8-0002-MergeAppend-should-support-Async-Foreign-Scan-subpla.patch Content-Disposition: attachment; filename*0*=UTF-8''v8-0002-MergeAppend-should-support-Async-Foreign-Scan-; filename*1*=subpla.patch; size=51462 RnJvbSBhNWYxNzU1ODY4MzEyZTgzNjcyN2VmNThhMmJlNzU4MGYzMTNjMWEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDE1IE5vdiAyMDI1IDEwOjIzOjQ3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAyLzJdIE1lcmdlQXBwZW5kIHNob3VsZCBzdXBwb3J0IEFzeW5jIEZvcmVpZ24gU2NhbiBz dWJwbGFucwoKLS0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQg ICAgfCAyODggKysrKysrKysrKysKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5j ICAgICAgICAgICB8ICAxMCArLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zk dy5zcWwgICAgIHwgIDg3ICsrKysKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAg ICAgICAgICAgICB8ICAxNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYyAgICAg ICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAgICAg ICAgICAgIHwgIDI0ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyAg ICAgICAgfCA0NzEgKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jICAgICAgIHwgICA5ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Bh cmFtZXRlcnMuZGF0ICAgICB8ICAgOCArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUgfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBw ZW5kLmggICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAg ICAgICAgICAgICB8ICA1OSArKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dCAgICAgICAgfCAgIDMgKy0KIDE1IGZpbGVzIGNoYW5nZWQsIDk1MSBpbnNlcnRpb25zKCspLCAz MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3Rl 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 IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IGExMWIzNmM3MTc2Li5h MmVkNWY3MWEzNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwpAQCAtMTE4NywxMCArMTE4 Nyw3IEBAIEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIHN0YXRp YyB2b2lkCiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhBcHBlbmRTdGF0ZSAqbm9kZSkKIHsK LQlCaXRtYXBzZXQgICp2YWxpZF9hc3luY3BsYW5zOwotCiAJQXNzZXJ0KG5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQpOwotCUFzc2VydChub2RlLT5hc192YWxpZF9hc3luY3BsYW5z ID09IE5VTEwpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3Vi cGxhbnMuICovCiAJaWYgKGJtc19pc19lbXB0eShub2RlLT5hc192YWxpZF9zdWJwbGFucykpCkBA IC0xMjAwLDIxICsxMTk3LDEwIEBAIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVuZFN0 YXRlICpub2RlKQogCQlyZXR1cm47CiAJfQogCi0JLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBh cmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCi0JaWYgKCFibXNfb3ZlcmxhcChub2RlLT5h c192YWxpZF9zdWJwbGFucywgbm9kZS0+YXNfYXN5bmNwbGFucykpCi0JeworCS8qIE5vIHZhbGlk IGFzeW5jIHN1YnBsYW5zIGlkZW50aWZpZWQuICovCisJaWYgKCFjbGFzc2lmeV9tYXRjaGluZ19z dWJwbGFuc19jb21tb24oCisJCQkJCQkJCQkJICAgJm5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLAor CQkJCQkJCQkJCSAgIG5vZGUtPmFzX2FzeW5jcGxhbnMsCisJCQkJCQkJCQkJICAgJm5vZGUtPmFz X3ZhbGlkX2FzeW5jcGxhbnMpKQogCQlub2RlLT5hc19uYXN5bmNyZW1haW4gPSAwOwotCQlyZXR1 cm47Ci0JfQotCi0JLyogR2V0IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwotCXZhbGlkX2FzeW5j cGxhbnMgPSBibXNfaW50ZXJzZWN0KG5vZGUtPmFzX2FzeW5jcGxhbnMsCi0JCQkJCQkJCQkgbm9k ZS0+YXNfdmFsaWRfc3VicGxhbnMpOwotCi0JLyogQWRqdXN0IHRoZSB2YWxpZCBzdWJwbGFucyB0 byBjb250YWluIHN5bmMgc3VicGxhbnMgb25seS4gKi8KLQlub2RlLT5hc192YWxpZF9zdWJwbGFu cyA9IGJtc19kZWxfbWVtYmVycyhub2RlLT5hc192YWxpZF9zdWJwbGFucywKLQkJCQkJCQkJCQkJ ICB2YWxpZF9hc3luY3BsYW5zKTsKLQotCS8qIFNhdmUgdmFsaWQgYXN5bmMgc3VicGxhbnMuICov Ci0Jbm9kZS0+YXNfdmFsaWRfYXN5bmNwbGFucyA9IHZhbGlkX2FzeW5jcGxhbnM7CiB9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCmluZGV4IDQwNWU4Zjk0Mjg1Li42MThiODk5 ZTdmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKQEAgLTM5LDEwICsz OSwxNSBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJleGVjdXRvci9leGVj dXRvci5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQu aCIKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgor I2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50Lmgi CisKKyNkZWZpbmUgRVZFTlRfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAxNgogCiAv KgogICogV2UgaGF2ZSBvbmUgc2xvdCBmb3IgZWFjaCBpdGVtIGluIHRoZSBoZWFwIGFycmF5LiAg V2UgdXNlIFNsb3ROdW1iZXIKQEAgLTU0LDYgKzU5LDEyIEBAIHR5cGVkZWYgaW50MzIgU2xvdE51 bWJlcjsKIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAq cHN0YXRlKTsKIHN0YXRpYyBpbnQJaGVhcF9jb21wYXJlX3Nsb3RzKERhdHVtIGEsIERhdHVtIGIs IHZvaWQgKmFyZyk7CiAKK3N0YXRpYyB2b2lkIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1l cmdlQXBwZW5kU3RhdGUgKm5vZGUpOworc3RhdGljIHZvaWQgRXhlY01lcmdlQXBwZW5kQXN5bmNC ZWdpbihNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJnZUFwcGVu ZEFzeW5jR2V0TmV4dChNZXJnZUFwcGVuZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pOworc3RhdGlj IGJvb2wgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUs IGludCBtcGxhbik7CitzdGF0aWMgdm9pZCBFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2FpdChN ZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRNZXJn ZUFwcGVuZApAQCAtNzEsNiArODIsOCBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5k ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpbnQJCQlucGxhbnM7CiAJaW50 CQkJaSwKIAkJCQlqOworCUJpdG1hcHNldCAgKmFzeW5jcGxhbnM7CisJaW50CQkJbmFzeW5jcGxh bnM7CiAKIAkvKiBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxh Z3MgJiAoRVhFQ19GTEFHX0JBQ0tXQVJEIHwgRVhFQ19GTEFHX01BUkspKSk7CkBAIC0xMDYsNyAr MTE5LDEwIEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5n U3ViUGxhbnMuCiAJCSAqLwogCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBs YW5zID4gMCkKKwkJewogCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRk X3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOworCQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3Vi cGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCX0KIAl9CiAJZWxzZQogCXsKQEAgLTExOSw2ICsx MzUsNyBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVz dGF0ZSwgaW50IGVmbGFncykKIAkJQXNzZXJ0KG5wbGFucyA+IDApOwogCQltZXJnZXN0YXRlLT5t c192YWxpZF9zdWJwbGFucyA9IHZhbGlkc3VicGxhbnMgPQogCQkJYm1zX2FkZF9yYW5nZShOVUxM LCAwLCBucGxhbnMgLSAxKTsKKwkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRp ZmllZCA9IHRydWU7CiAJCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gTlVMTDsKIAl9CiAK QEAgLTEzNSwxMSArMTUyLDI1IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5v ZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIHRoZSByZXN1bHRzIGludG8gdGhl IG1lcmdlcGxhbnN0YXRlcyBhcnJheS4KIAkgKi8KIAlqID0gMDsKKwlhc3luY3BsYW5zID0gTlVM TDsKKwluYXN5bmNwbGFucyA9IDA7CisKIAlpID0gLTE7CiAJd2hpbGUgKChpID0gYm1zX25leHRf bWVtYmVyKHZhbGlkc3VicGxhbnMsIGkpKSA+PSAwKQogCXsKIAkJUGxhbgkgICAqaW5pdE5vZGUg PSAoUGxhbiAqKSBsaXN0X250aChub2RlLT5tZXJnZXBsYW5zLCBpKTsKIAorCQkvKgorCQkgKiBS ZWNvcmQgYXN5bmMgc3VicGxhbnMuICBXaGVuIGV4ZWN1dGluZyBFdmFsUGxhblF1YWwsIHdlIHRy ZWF0IHRoZW0KKwkJICogYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlhbGl6 aW5nIGFuIEV2YWxQbGFuUXVhbCBwbGFuCisJCSAqIHRyZWUuCisJCSAqLworCQlpZiAoaW5pdE5v ZGUtPmFzeW5jX2NhcGFibGUgJiYgZXN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpCisJCXsK KwkJCWFzeW5jcGxhbnMgPSBibXNfYWRkX21lbWJlcihhc3luY3BsYW5zLCBqKTsKKwkJCW5hc3lu Y3BsYW5zKys7CisJCX0KKwogCQltZXJnZXBsYW5zdGF0ZXNbaisrXSA9IEV4ZWNJbml0Tm9kZShp bml0Tm9kZSwgZXN0YXRlLCBlZmxhZ3MpOwogCX0KIApAQCAtMTcwLDYgKzIwMSw0NSBAQCBFeGVj SW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVm bGFncykKIAkgKi8KIAltZXJnZXN0YXRlLT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7CiAKKwkvKiBJ bml0aWFsaXplIGFzeW5jIHN0YXRlICovCisJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNwbGFucyA9IGFz eW5jcGxhbnM7CisJbWVyZ2VzdGF0ZS0+bXNfbmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKKwlt ZXJnZXN0YXRlLT5tc19hc3luY3JlcXVlc3RzID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19hc3lu Y3Jlc3VsdHMgPSBOVUxMOworCW1lcmdlc3RhdGUtPm1zX2hhc19hc3luY3Jlc3VsdHMgPSBOVUxM OworCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVtYWluID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19u ZWVkcmVxdWVzdCA9IE5VTEw7CisJbWVyZ2VzdGF0ZS0+bXNfZXZlbnRzZXQgPSBOVUxMOworCW1l cmdlc3RhdGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOworCisJaWYgKG5hc3luY3BsYW5z ID4gMCkKKwl7CisJCW1lcmdlc3RhdGUtPm1zX2FzeW5jcmVxdWVzdHMgPSAoQXN5bmNSZXF1ZXN0 ICoqKQorCQkJcGFsbG9jMChucGxhbnMgKiBzaXplb2YoQXN5bmNSZXF1ZXN0ICopKTsKKworCQlp ID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihhc3luY3BsYW5zLCBpKSkgPj0g MCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVxOworCisJCQlhcmVxID0gcGFsbG9jKHNpemVv ZihBc3luY1JlcXVlc3QpKTsKKwkJCWFyZXEtPnJlcXVlc3RvciA9IChQbGFuU3RhdGUgKikgbWVy Z2VzdGF0ZTsKKwkJCWFyZXEtPnJlcXVlc3RlZSA9IG1lcmdlcGxhbnN0YXRlc1tpXTsKKwkJCWFy ZXEtPnJlcXVlc3RfaW5kZXggPSBpOworCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNl OworCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOworCQkJYXJlcS0+cmVzdWx0ID0g TlVMTDsKKworCQkJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXSA9IGFyZXE7CisJCX0K KworCQltZXJnZXN0YXRlLT5tc19hc3luY3Jlc3VsdHMgPSAoVHVwbGVUYWJsZVNsb3QgKiopCisJ CQlwYWxsb2MwKG5wbGFucyAqIHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSk7CisKKwkJaWYgKG1l cmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCQljbGFzc2lmeV9tYXRj aGluZ19zdWJwbGFucyhtZXJnZXN0YXRlKTsKKwl9CisKIAkvKgogCSAqIGluaXRpYWxpemUgc29y dC1rZXkgaW5mb3JtYXRpb24KIAkgKi8KQEAgLTIyNiwxNCArMjk2LDE4IEBAIEV4ZWNNZXJnZUFw cGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJaWYgKG5vZGUtPm1zX25wbGFucyA9PSAwKQogCQkJ cmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAKLQkJ LyoKLQkJICogSWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhl biBkbyBzbyBub3cuICBJZgotCQkgKiBydW4tdGltZSBwcnVuaW5nIGlzIGRpc2FibGVkIHRoZW4g dGhlIHZhbGlkIHN1YnBsYW5zIHdpbGwgYWx3YXlzIGJlCi0JCSAqIHNldCB0byBhbGwgc3VicGxh bnMuCi0JCSAqLwotCQlpZiAobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKKwkJLyog SWYgd2UndmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBu b3cuICovCisJCWlmICghbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJewog CQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPQogCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cyhub2RlLT5tc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQkJbm9kZS0+bXNfdmFsaWRf c3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CisJCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFu cyhub2RlKTsKKwkJfQorCisJCS8qIElmIHRoZXJlIGFyZSBhbnkgYXN5bmMgc3VicGxhbnMsIGJl Z2luIGV4ZWN1dGluZyB0aGVtLiAqLworCQlpZiAobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAwKQor CQkJRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdpbihub2RlKTsKIAogCQkvKgogCQkgKiBGaXJzdCB0 aW1lIHRocm91Z2g6IHB1bGwgdGhlIGZpcnN0IHR1cGxlIGZyb20gZWFjaCB2YWxpZCBzdWJwbGFu LApAQCAtMjQ2LDYgKzMyMCwxNiBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUp CiAJCQlpZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkpCiAJCQkJYmluYXJ5aGVhcF9h ZGRfdW5vcmRlcmVkKG5vZGUtPm1zX2hlYXAsIEludDMyR2V0RGF0dW0oaSkpOwogCQl9CisKKwkJ LyogTG9vayBhdCB2YWxpZCBhc3luYyBzdWJwbGFucyAqLworCQlpID0gLTE7CisJCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc192YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkK KwkJeworCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KG5vZGUsIGkpOworCQkJaWYgKCFU dXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0pKQorCQkJCWJpbmFyeWhlYXBfYWRkX3Vub3JkZXJl ZChub2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKKwkJfQorCiAJCWJpbmFyeWhlYXBf YnVpbGQobm9kZS0+bXNfaGVhcCk7CiAJCW5vZGUtPm1zX2luaXRpYWxpemVkID0gdHJ1ZTsKIAl9 CkBAIC0yNjAsNyArMzQ0LDEzIEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkK IAkJICogdG8gbm90IHB1bGwgdHVwbGVzIHVudGlsIG5lY2Vzc2FyeS4pCiAJCSAqLwogCQlpID0g RGF0dW1HZXRJbnQzMihiaW5hcnloZWFwX2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKLQkJbm9kZS0+ bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJCWlmIChi bXNfaXNfbWVtYmVyKGksIG5vZGUtPm1zX2FzeW5jcGxhbnMpKQorCQkJRXhlY01lcmdlQXBwZW5k QXN5bmNHZXROZXh0KG5vZGUsIGkpOworCQllbHNlCisJCXsKKwkJCUFzc2VydChibXNfaXNfbWVt YmVyKGksIG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zKSk7CisJCQlub2RlLT5tc19zbG90c1tpXSA9 IEV4ZWNQcm9jTm9kZShub2RlLT5tZXJnZXBsYW5zW2ldKTsKKwkJfQogCQlpZiAoIVR1cElzTnVs bChub2RlLT5tc19zbG90c1tpXSkpCiAJCQliaW5hcnloZWFwX3JlcGxhY2VfZmlyc3Qobm9kZS0+ bXNfaGVhcCwgSW50MzJHZXREYXR1bShpKSk7CiAJCWVsc2UKQEAgLTI3Niw2ICszNjYsOCBAQCBF eGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJewogCQlpID0gRGF0dW1HZXRJbnQz MihiaW5hcnloZWFwX2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKIAkJcmVzdWx0ID0gbm9kZS0+bXNf c2xvdHNbaV07CisJCS8qIEZvciBhc3luYyBwbGFuIHJlY29yZCB0aGF0IHdlIGNhbiBnZXQgdGhl IG5leHQgdHVwbGUgKi8KKwkJbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IGJtc19kZWxfbWVt YmVyKG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMsIGkpOwogCX0KIAogCXJldHVybiByZXN1bHQ7 CkBAIC0zNTUsNiArNDQ3LDcgQEAgdm9pZAogRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBw ZW5kU3RhdGUgKm5vZGUpCiB7CiAJaW50CQkJaTsKKwlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUt Pm1zX25hc3luY3BsYW5zOwogCiAJLyoKIAkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMgdXNl ZCBpbiBwcnVuaW5nIGV4cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhlbgpAQCAtMzY1LDggKzQ1 OCwxMSBAQCBFeGVjUmVTY2FuTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJ Ym1zX292ZXJsYXAobm9kZS0+cHMuY2hnUGFyYW0sCiAJCQkJCW5vZGUtPm1zX3BydW5lX3N0YXRl LT5leGVjcGFyYW1pZHMpKQogCXsKKwkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmll ZCA9IGZhbHNlOwogCQlibXNfZnJlZShub2RlLT5tc192YWxpZF9zdWJwbGFucyk7CiAJCW5vZGUt Pm1zX3ZhbGlkX3N1YnBsYW5zID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfdmFsaWRfYXN5 bmNwbGFucyk7CisJCW5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwogCX0KIAogCWZv ciAoaSA9IDA7IGkgPCBub2RlLT5tc19ucGxhbnM7IGkrKykKQEAgLTM4Nyw2ICs0ODMsMzY3IEBA IEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKQogCQlpZiAoc3Vi bm9kZS0+Y2hnUGFyYW0gPT0gTlVMTCkKIAkJCUV4ZWNSZVNjYW4oc3Vibm9kZSk7CiAJfQorCisJ LyogUmVzZXQgYXN5bmMgc3RhdGUgKi8KKwlpZiAobmFzeW5jcGxhbnMgPiAwKQorCXsKKwkJaSA9 IC0xOworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfYXN5bmNwbGFucywg aSkpID49IDApCisJCXsKKwkJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5jcmVx dWVzdHNbaV07CisKKwkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKwkJCWFyZXEt PnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsKKwkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7CisJCX0K KworCQlibXNfZnJlZShub2RlLT5tc19hc3luY3JlbWFpbik7CisJCW5vZGUtPm1zX2FzeW5jcmVt YWluID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfbmVlZHJlcXVlc3QpOworCQlub2RlLT5t c19uZWVkcmVxdWVzdCA9IE5VTEw7CisJCWJtc19mcmVlKG5vZGUtPm1zX2hhc19hc3luY3Jlc3Vs dHMpOworCQlub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0gTlVMTDsKKwl9CiAJYmluYXJ5aGVh cF9yZXNldChub2RlLT5tc19oZWFwKTsKIAlub2RlLT5tc19pbml0aWFsaXplZCA9IGZhbHNlOwog fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxh bnMKKyAqCisgKiAgICAgICAgICAgICAgQ2xhc3NpZnkgdGhlIG5vZGUncyBtc192YWxpZF9zdWJw bGFucyBpbnRvIHN5bmMgb25lcyBhbmQKKyAqICAgICAgICAgICAgICBhc3luYyBvbmVzLCBhZGp1 c3QgaXQgdG8gY29udGFpbiBzeW5jIG9uZXMgb25seSwgYW5kIHNhdmUKKyAqICAgICAgICAgICAg ICBhc3luYyBvbmVzIGluIHRoZSBub2RlJ3MgbXNfdmFsaWRfYXN5bmNwbGFucy4KKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworc3RhdGljIHZvaWQKK2NsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKE1lcmdlQXBw ZW5kU3RhdGUgKm5vZGUpCit7CisJQXNzZXJ0KG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50 aWZpZWQpOworCisJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3VicGxh bnMuICovCisJaWYgKGJtc19pc19lbXB0eShub2RlLT5tc192YWxpZF9zdWJwbGFucykpCisJewor CQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKiBObyB2 YWxpZCBhc3luYyBzdWJwbGFucyBpZGVudGlmaWVkLiAqLworCWlmICghY2xhc3NpZnlfbWF0Y2hp bmdfc3VicGxhbnNfY29tbW9uKAorCQkJCQkJCQkJCSAgICZub2RlLT5tc192YWxpZF9zdWJwbGFu cywKKwkJCQkJCQkJCQkgICBub2RlLT5tc19hc3luY3BsYW5zLAorCQkJCQkJCQkJCSAgICZub2Rl LT5tc192YWxpZF9hc3luY3BsYW5zKSkKKwkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOwor fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdp bgorICoKKyAqICAgICAgICAgICAgICBCZWdpbiBleGVjdXRpbmcgZGVzaWduZWQgYXN5bmMtY2Fw YWJsZSBzdWJwbGFucy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNNZXJnZUFw cGVuZEFzeW5jQmVnaW4oTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKK3sKKwlpbnQJCQlpOworCisJ LyogQmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFzeW5jLWF3YXJlIE1lcmdlQXBw ZW5kcy4gKi8KKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ ZXNfZGlyZWN0aW9uKSk7CisKKwkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhl cmUgYXJlIG5vIHN1YnBsYW5zICovCisJQXNzZXJ0KG5vZGUtPm1zX25wbGFucyA+IDApOworCisJ LyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3luYyBzdWJw bGFucy4gKi8KKwlBc3NlcnQobm9kZS0+bXNfbmFzeW5jcGxhbnMgPiAwKTsKKworCS8qIEV4ZWNN ZXJnZUFwcGVuZCgpIGlkZW50aWZpZXMgdmFsaWQgc3VicGxhbnMgKi8KKwlBc3NlcnQobm9kZS0+ bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisKKwkvKiBJbml0aWFsaXplIHN0YXRlIHZh cmlhYmxlcy4gKi8KKwlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19jb3B5KG5vZGUtPm1zX3Zh bGlkX2FzeW5jcGxhbnMpOworCisJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFs aWQgYXN5bmMgc3VicGxhbnMuICovCisJaWYgKGJtc19pc19lbXB0eShub2RlLT5tc19hc3luY3Jl bWFpbikpCisJCXJldHVybjsKKworCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2 YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRf bWVtYmVyKG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNS ZXF1ZXN0ICphcmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKKworCQlBc3NlcnQoYXJl cS0+cmVxdWVzdF9pbmRleCA9PSBpKTsKKwkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5n KTsKKworCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCisJCUV4ZWNBc3luY1JlcXVlc3QoYXJl cSk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgRXhlY01lcmdlQXBwZW5k QXN5bmNHZXROZXh0CisgKgorICogICAgICAgICAgICAgIEdldCB0aGUgbmV4dCB0dXBsZSBmcm9t IHNwZWNpZmllZCBhc3luY2hyb25vdXMgc3VicGxhbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGlj IHZvaWQKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4dChNZXJnZUFwcGVuZFN0YXRlICpub2Rl LCBpbnQgbXBsYW4pCit7CisJbm9kZS0+bXNfc2xvdHNbbXBsYW5dID0gTlVMTDsKKworCS8qIFJl cXVlc3QgYSB0dXBsZSBhc3luY2hyb25vdXNseS4gKi8KKwlpZiAoRXhlY01lcmdlQXBwZW5kQXN5 bmNSZXF1ZXN0KG5vZGUsIG1wbGFuKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBub2RlLT5tc19h c3luY3JlbWFpbiBjYW4gYmUgTlVMTCBpZiB3ZSBoYXZlIGZldGNoZWQgdHVwbGVzLCBidXQgaGF2 ZW4ndAorCSAqIHJldHVybmVkIHRoZW0geWV0LiBJbiB0aGlzIGNhc2UgRXhlY01lcmdlQXBwZW5k QXN5bmNSZXF1ZXN0KCkgYWJvdmUKKwkgKiBqdXN0IHJldHVybnMgdHVwbGVzIHdpdGhvdXQgcGVy Zm9ybWluZyBhIHJlcXVlc3QuCisJICovCisJd2hpbGUgKGJtc19pc19tZW1iZXIobXBsYW4sIG5v ZGUtPm1zX2FzeW5jcmVtYWluKSkKKwl7CisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJ LyogV2FpdCBvciBwb2xsIGZvciBhc3luYyBldmVudHMuICovCisJCUV4ZWNNZXJnZUFwcGVuZEFz eW5jRXZlbnRXYWl0KG5vZGUpOworCisJCS8qIFJlcXVlc3QgYSB0dXBsZSBhc3luY2hyb25vdXNs eS4gKi8KKwkJaWYgKEV4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChub2RlLCBtcGxhbikpCisJ CQlyZXR1cm47CisKKwkJLyoKKwkJICogV2FpdGluZyB1bnRpbCB0aGVyZSdzIG5vIGFzeW5jIHJl cXVlc3RzIHBlbmRpbmcgb3Igd2UgZ290IHNvbWUKKwkJICogdHVwbGVzIGZyb20gb3VyIHJlcXVl c3QKKwkJICovCisJfQorCisJLyogTm8gdHVwbGVzICovCisJcmV0dXJuOworfQorCisvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKiAgICAgICAgICAgICAgRXhlY01lcmdlQXBwZW5kQXN5bmNSZXF1ZXN0CisgKgorICog ICAgICAgICAgICAgIFJlcXVlc3QgYSB0dXBsZSBhc3luY2hyb25vdXNseS4KKyAqIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworc3RhdGljIGJvb2wKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jUmVxdWVzdChNZXJnZUFwcGVu ZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pCit7CisJQml0bWFwc2V0ICAqbmVlZHJlcXVlc3Q7CisJ aW50CQkJaTsKKworCS8qCisJICogSWYgd2UndmUgYWxyZWFkeSBmZXRjaGVkIG5lY2Vzc2FyeSBk YXRhLCBqdXN0IHJldHVybiBpdAorCSAqLworCWlmIChibXNfaXNfbWVtYmVyKG1wbGFuLCBub2Rl LT5tc19oYXNfYXN5bmNyZXN1bHRzKSkKKwl7CisJCW5vZGUtPm1zX3Nsb3RzW21wbGFuXSA9IG5v ZGUtPm1zX2FzeW5jcmVzdWx0c1ttcGxhbl07CisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJ ICogR2V0IGEgbGlzdCBvZiBtZW1iZXJzIHdoaWNoIGNhbiBwcm9jZXNzIHJlcXVlc3QgYW5kIGRv bid0IGhhdmUgZGF0YQorCSAqIHJlYWR5LgorCSAqLworCW5lZWRyZXF1ZXN0ID0gTlVMTDsKKwlp ID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX25lZWRyZXF1ZXN0 LCBpKSkgPj0gMCkKKwl7CisJCWlmICghYm1zX2lzX21lbWJlcihpLCBub2RlLT5tc19oYXNfYXN5 bmNyZXN1bHRzKSkKKwkJCW5lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1iZXIobmVlZHJlcXVlc3Qs IGkpOworCX0KKworCS8qCisJICogSWYgdGhlcmUncyBubyBtZW1iZXJzLCB3aGljaCBzdGlsbCBu ZWVkIHJlcXVlc3QsIG5vIG5lZWQgdG8gc2VuZCBpdC4KKwkgKi8KKwlpZiAoYm1zX2lzX2VtcHR5 KG5lZWRyZXF1ZXN0KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2xlYXIgbXNfbmVlZHJlcXVl c3QgZmxhZywgYXMgd2UgYXJlIGdvaW5nIHRvIHNlbmQgcmVxdWVzdHMgbm93ICovCisJbm9kZS0+ bXNfbmVlZHJlcXVlc3QgPSBibXNfZGVsX21lbWJlcnMobm9kZS0+bXNfbmVlZHJlcXVlc3QsIG5l ZWRyZXF1ZXN0KTsKKworCS8qIE1ha2UgYSBuZXcgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUgYXN5 bmMgc3VicGxhbnMgdGhhdCBuZWVkIGl0LiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIobmVlZHJlcXVlc3QsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNSZXF1ZXN0ICph cmVxID0gbm9kZS0+bXNfYXN5bmNyZXF1ZXN0c1tpXTsKKworCQkvKgorCQkgKiBXZSd2ZSBqdXN0 IGNoZWNrZWQgdGhhdCBzdWJwbGFuIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIHNvbWUgZmV0Y2hlZAor CQkgKiBkYXRhCisJCSAqLworCQlBc3NlcnQoIWJtc19pc19tZW1iZXIoaSwgbm9kZS0+bXNfaGFz X2FzeW5jcmVzdWx0cykpOworCisJCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJRXhlY0Fz eW5jUmVxdWVzdChhcmVxKTsKKwl9CisJYm1zX2ZyZWUobmVlZHJlcXVlc3QpOworCisJLyogUmV0 dXJuIG5lZWRlZCBhc3luY2hyb25vdXNseS1nZW5lcmF0ZWQgcmVzdWx0cyBpZiBhbnkuICovCisJ aWYgKGJtc19pc19tZW1iZXIobXBsYW4sIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCXsK KwkJbm9kZS0+bXNfc2xvdHNbbXBsYW5dID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsK KwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KiAgICAgICAgICAgICAgRXhlY0FzeW5jTWVyZ2VBcHBlbmRSZXNwb25zZQorICoKKyAqICAgICAg ICAgICAgICBSZWNlaXZlIGEgcmVzcG9uc2UgZnJvbSBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCB3 ZSBtYWRlLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitFeGVjQXN5bmNNZXJnZUFwcGVuZFJlc3Bv bnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKK3sKKwlNZXJnZUFwcGVuZFN0YXRlICpub2RlID0gKE1l cmdlQXBwZW5kU3RhdGUgKikgYXJlcS0+cmVxdWVzdG9yOworCVR1cGxlVGFibGVTbG90ICpzbG90 ID0gYXJlcS0+cmVzdWx0OworCisJLyogVGhlIHJlc3VsdCBzaG91bGQgYmUgYSBUdXBsZVRhYmxl U2xvdCBvciBOVUxMLiAqLworCUFzc2VydChzbG90ID09IE5VTEwgfHwgSXNBKHNsb3QsIFR1cGxl VGFibGVTbG90KSk7CisJLyogV2Ugc2hvdWxkIGhhbmRsZSBwcmV2aW91cyBhc3luYyByZXN1bHQg cHJpb3IgdG8gZ2V0dGluZyBuZXcgb25lICovCisJQXNzZXJ0KCFibXNfaXNfbWVtYmVyKGFyZXEt PnJlcXVlc3RfaW5kZXgsIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKTsKKworCW5vZGUtPm1z X2FzeW5jcmVzdWx0c1thcmVxLT5yZXF1ZXN0X2luZGV4XSA9IE5VTEw7CisJLyogTm90aGluZyB0 byBkbyBpZiB0aGUgcmVxdWVzdCBpcyBwZW5kaW5nLiAqLworCWlmICghYXJlcS0+cmVxdWVzdF9j b21wbGV0ZSkKKwl7CisJCS8qIFRoZSByZXF1ZXN0IHdvdWxkIGhhdmUgYmVlbiBwZW5kaW5nIGZv ciBhIGNhbGxiYWNrLiAqLworCQlBc3NlcnQoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyk7CisJCXJl dHVybjsKKwl9CisKKwkvKiBJZiB0aGUgcmVzdWx0IGlzIE5VTEwgb3IgYW4gZW1wdHkgc2xvdCwg dGhlcmUncyBub3RoaW5nIG1vcmUgdG8gZG8uICovCisJaWYgKFR1cElzTnVsbChzbG90KSkKKwl7 CisJCS8qIFRoZSBlbmRpbmcgc3VicGxhbiB3b3VsZG4ndCBoYXZlIGJlZW4gcGVuZGluZyBmb3Ig YSBjYWxsYmFjay4gKi8KKwkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKKwkJbm9k ZS0+bXNfYXN5bmNyZW1haW4gPSBibXNfZGVsX21lbWJlcihub2RlLT5tc19hc3luY3JlbWFpbiwK KwkJCQkJCQkJCQkJICBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkJcmV0dXJuOworCX0KKworCS8q IE1hcmsgdGhhdCB0aGUgYXN5bmMgcmVxdWVzdCBoYXMgYSByZXN1bHQgKi8KKwlub2RlLT5tc19o YXNfYXN5bmNyZXN1bHRzID0gYm1zX2FkZF9tZW1iZXIobm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0 cywKKwkJCQkJCQkJCQkJICAgYXJlcS0+cmVxdWVzdF9pbmRleCk7CisJLyogU2F2ZSByZXN1bHQg c28gd2UgY2FuIHJldHVybiBpdC4gKi8KKwlub2RlLT5tc19hc3luY3Jlc3VsdHNbYXJlcS0+cmVx dWVzdF9pbmRleF0gPSBzbG90OworCisJLyoKKwkgKiBNYXJrIHRoZSBzdWJwbGFuIHRoYXQgcmV0 dXJuZWQgYSByZXN1bHQgYXMgcmVhZHkgZm9yIGEgbmV3IHJlcXVlc3QuICBXZQorCSAqIGRvbid0 IGxhdW5jaCBhbm90aGVyIG9uZSBoZXJlIGltbWVkaWF0ZWx5IGJlY2F1c2UgaXQgbWlnaHQgY29t cGxldGUuCisJICovCisJbm9kZS0+bXNfbmVlZHJlcXVlc3QgPSBibXNfYWRkX21lbWJlcihub2Rl LT5tc19uZWVkcmVxdWVzdCwKKwkJCQkJCQkJCQkgIGFyZXEtPnJlcXVlc3RfaW5kZXgpOworfQor CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKgkJRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQKKyAqCisgKgkJ V2FpdCBvciBwb2xsIGZvciBmaWxlIGRlc2NyaXB0b3IgZXZlbnRzIGFuZCBmaXJlIGNhbGxiYWNr cy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK0V4ZWNNZXJnZUFwcGVuZEFzeW5jRXZl bnRXYWl0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCit7CisJaW50CQkJbmV2ZW50cyA9IG5vZGUt Pm1zX25hc3luY3BsYW5zICsgMjsgLyogb25lIGZvciBQTSBkZWF0aCBhbmQKKwkJCQkJCQkJCQkJ CQkgKiBvbmUgZm9yIGxhdGNoICovCisJV2FpdEV2ZW50CW9jY3VycmVkX2V2ZW50W0VWRU5UX0JV RkZFUl9TSVpFXTsKKwlpbnQJCQlub2NjdXJyZWQ7CisJaW50CQkJaTsKKworCS8qIFdlIHNob3Vs ZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMu ICovCisJQXNzZXJ0KGJtc19udW1fbWVtYmVycyhub2RlLT5tc19hc3luY3JlbWFpbikgPiAwKTsK KworCW5vZGUtPm1zX2V2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1cnJlbnRSZXNvdXJj ZU93bmVyLCBuZXZlbnRzKTsKKwlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5tc19ldmVudHNldCwg V0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJICBOVUxMLCBOVUxM KTsKKworCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4gYSBjaGFuY2UgdG8gYWRkIGFuIGV2 ZW50LiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNf YXN5bmNwbGFucywgaSkpID49IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5t c19hc3luY3JlcXVlc3RzW2ldOworCisJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQorCQkJ RXhlY0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsKKwl9CisKKwkvKgorCSAqIE5vIG5lZWQgZm9y IGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBub25lIG9mIHRoZSBzdWJwbGFucyBjb25maWd1cmVkIGFu eQorCSAqIGV2ZW50cy4KKwkgKi8KKwlpZiAoR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMobm9k ZS0+bXNfZXZlbnRzZXQpID09IDEpCisJeworCQlGcmVlV2FpdEV2ZW50U2V0KG5vZGUtPm1zX2V2 ZW50c2V0KTsKKwkJbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJ LyoKKwkgKiBBZGQgdGhlIHByb2Nlc3MgbGF0Y2ggdG8gdGhlIHNldCwgc28gdGhhdCB3ZSB3YWtl IHVwIHRvIHByb2Nlc3MgdGhlCisJICogc3RhbmRhcmQgaW50ZXJydXB0cyB3aXRoIENIRUNLX0ZP Ul9JTlRFUlJVUFRTKCkuCisJICoKKwkgKiBOT1RFOiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBp dCdzIGltcG9ydGFudCB0aGF0IHRoaXMgaXMgYWRkZWQgdG8gdGhlCisJICogV2FpdEV2ZW50U2V0 IGFmdGVyIHRoZSBFeGVjQXN5bmNDb25maWd1cmVXYWl0KCkgY2FsbHMuICBOYW1lbHksCisJICog cG9zdGdyZXNfZmR3IGNhbGxzICJHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhzZXQpID09IDEi IHRvIGNoZWNrIGlmCisJICogYW55IG90aGVyIGV2ZW50cyBhcmUgaW4gdGhlIHNldC4gIFRoYXQn cyBhIHBvb3IgZGVzaWduLCBpdCdzCisJICogcXVlc3Rpb25hYmxlIGZvciBwb3N0Z3Jlc19mZHcg dG8gYmUgZG9pbmcgdGhhdCBpbiB0aGUgZmlyc3QgcGxhY2UsIGJ1dAorCSAqIHdlIGNhbm5vdCBj aGFuZ2UgaXQgbm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3NpYmx5IGJlZW4gY29waWVkIHRvIG90 aGVyCisJICogZXh0ZW5zaW9ucyB0b28uCisJICovCisJQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+ bXNfZXZlbnRzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJICBNeUxh dGNoLCBOVUxMKTsKKworCS8qIFJldHVybiBhdCBtb3N0IEVWRU5UX0JVRkZFUl9TSVpFIGV2ZW50 cyBpbiBvbmUgY2FsbC4gKi8KKwlpZiAobmV2ZW50cyA+IEVWRU5UX0JVRkZFUl9TSVpFKQorCQlu ZXZlbnRzID0gRVZFTlRfQlVGRkVSX1NJWkU7CisKKwkvKgorCSAqIFdhaXQgdW50aWwgYXQgbGVh c3Qgb25lIGV2ZW50IG9jY3Vycy4KKwkgKi8KKwlub2NjdXJyZWQgPSBXYWl0RXZlbnRTZXRXYWl0 KG5vZGUtPm1zX2V2ZW50c2V0LCAtMSAvKiBubyB0aW1lb3V0ICovICwgb2NjdXJyZWRfZXZlbnQs CisJCQkJCQkJCSBuZXZlbnRzLCBXQUlUX0VWRU5UX0FQUEVORF9SRUFEWSk7CisJRnJlZVdhaXRF dmVudFNldChub2RlLT5tc19ldmVudHNldCk7CisJbm9kZS0+bXNfZXZlbnRzZXQgPSBOVUxMOwor CWlmIChub2NjdXJyZWQgPT0gMCkKKwkJcmV0dXJuOworCisJLyogRGVsaXZlciBub3RpZmljYXRp b25zLiAqLworCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykKKwl7CisJCVdhaXRFdmVu dCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07CisKKwkJLyoKKwkJICogRWFjaCB3YWl0aW5nIHN1 YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVudCB3aXRoCisJCSAqIHVz ZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1JlcXVlc3QuCisJCSAqLworCQlpZiAo KHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0gMCkKKwkJeworCQkJQXN5bmNSZXF1 ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7CisKKwkJCWlmIChhcmVx LT5jYWxsYmFja19wZW5kaW5nKQorCQkJeworCQkJCS8qCisJCQkJICogTWFyayBpdCBhcyBubyBs b25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlzCisJCQkJICogYmVmb3Jl IGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRoZSBjYWxsYmFjayByZXNldHMKKwkJ CQkgKiB0aGUgZmxhZy4KKwkJCQkgKi8KKwkJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFs c2U7CisKKwkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCisJCQkJRXhlY0FzeW5jTm90aWZ5 KGFyZXEpOworCQkJfQorCQl9CisKKwkJLyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVwdHMgKi8K KwkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCisJCXsKKwkJCVJlc2V0TGF0 Y2goTXlMYXRjaCk7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQl9CisJfQorfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggODMzNWNmNWI1YzUuLmNmYmU1MTJh MjZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE2Myw2ICsxNjMs NyBAQCBib29sCQllbmFibGVfcGFyYWxsZWxfaGFzaCA9IHRydWU7CiBib29sCQllbmFibGVfcGFy dGl0aW9uX3BydW5pbmcgPSB0cnVlOwogYm9vbAkJZW5hYmxlX3ByZXNvcnRlZF9hZ2dyZWdhdGUg PSB0cnVlOwogYm9vbAkJZW5hYmxlX2FzeW5jX2FwcGVuZCA9IHRydWU7Citib29sCQllbmFibGVf YXN5bmNfbWVyZ2VfYXBwZW5kID0gdHJ1ZTsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwppbmRleCA0NzhhZTBiN2JhMS4uNjU2NjdiYzM2 OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTE0NjYsNiAr MTQ2Niw3IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVy Z2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJTGlzdAkgICAqc3VicGxhbnMgPSBOSUw7CiAJTGlz dENlbGwgICAqc3VicGF0aHM7CiAJUmVsT3B0SW5mbyAqcmVsID0gYmVzdF9wYXRoLT5wYXRoLnBh cmVudDsKKwlib29sCQljb25zaWRlcl9hc3luYyA9IGZhbHNlOwogCiAJLyoKIAkgKiBXZSBkb24n dCBoYXZlIHRoZSBhY3R1YWwgY3JlYXRpb24gb2YgdGhlIE1lcmdlQXBwZW5kIG5vZGUgc3BsaXQg b3V0CkBAIC0xNDgwLDYgKzE0ODEsMTAgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlwbGFuLT5yaWdodHRy ZWUgPSBOVUxMOwogCW5vZGUtPmFwcHJlbGlkcyA9IHJlbC0+cmVsaWRzOwogCisJY29uc2lkZXJf YXN5bmMgPSAoZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZCAmJgorCQkJCQkgICFiZXN0X3BhdGgt PnBhdGgucGFyYWxsZWxfc2FmZSAmJgorCQkJCQkgIGxpc3RfbGVuZ3RoKGJlc3RfcGF0aC0+c3Vi cGF0aHMpID4gMSk7CisKIAkvKgogCSAqIENvbXB1dGUgc29ydCBjb2x1bW4gaW5mbywgYW5kIGFk anVzdCBNZXJnZUFwcGVuZCdzIHRsaXN0IGFzIG5lZWRlZC4KIAkgKiBCZWNhdXNlIHdlIHBhc3Mg YWRqdXN0X3RsaXN0X2luX3BsYWNlID0gdHJ1ZSwgd2UgbWF5IGlnbm9yZSB0aGUKQEAgLTE1ODAs NiArMTU4NSwxMCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3Qs IE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCQkJc3VicGxhbiA9IHNvcnRfcGxhbjsKIAkJ fQogCisJCS8qIElmIG5lZWRlZCwgY2hlY2sgdG8gc2VlIGlmIHN1YnBsYW4gY2FuIGJlIGV4ZWN1 dGVkIGFzeW5jaHJvbm91c2x5ICovCisJCWlmIChjb25zaWRlcl9hc3luYykKKwkJCW1hcmtfYXN5 bmNfY2FwYWJsZV9wbGFuKHN1YnBsYW4sIHN1YnBhdGgpOworCiAJCXN1YnBsYW5zID0gbGFwcGVu ZChzdWJwbGFucywgc3VicGxhbik7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Bh cmFtZXRlcnMuZGF0CmluZGV4IDExMjgxNjdjMDI1Li4yYTY3MGJkOGRiMSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTgwNSw2ICs4MDUsMTQgQEAKICAg Ym9vdF92YWwgPT4gJ3RydWUnLAogfSwKIAoreyBuYW1lID0+ICdlbmFibGVfYXN5bmNfbWVyZ2Vf YXBwZW5kJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAg PT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAorICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHRoZSBw bGFubmVyXCdzIHVzZSBvZiBhc3luYyBtZXJnZSBhcHBlbmQgcGxhbnMuJywKKyAgZmxhZ3MgPT4g J0dVQ19FWFBMQUlOJywKKyAgdmFyaWFibGUgPT4gJ2VuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQn LAorICBib290X3ZhbCA9PiAndHJ1ZScsCit9LAorCisKIHsgbmFtZSA9PiAnZW5hYmxlX2JpdG1h cHNjYW4nLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9 PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBs YW5uZXJcJ3MgdXNlIG9mIGJpdG1hcC1zY2FuIHBsYW5zLicsCiAgIGZsYWdzID0+ICdHVUNfRVhQ TEFJTicsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29u Zi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUK aW5kZXggZGM5ZTIyNTVmOGEuLmQ5NDlkMmFhZDA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC00MDUsNiArNDA1LDcgQEAKICMgLSBQbGFu bmVyIE1ldGhvZCBDb25maWd1cmF0aW9uIC0KIAogI2VuYWJsZV9hc3luY19hcHBlbmQgPSBvbgor I2VuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQgPSBvbgogI2VuYWJsZV9iaXRtYXBzY2FuID0gb24K ICNlbmFibGVfZ2F0aGVybWVyZ2UgPSBvbgogI2VuYWJsZV9oYXNoYWdnID0gb24KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oIGIvc3JjL2luY2x1ZGUv ZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgKaW5kZXggNGViMDVkYzMwZDYuLmUzZmRiMjZlY2U2 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaAorKysg Yi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaApAQCAtMTksNSArMTksNiBA QAogZXh0ZXJuIE1lcmdlQXBwZW5kU3RhdGUgKkV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBl bmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lkIEV4ZWNF bmRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lkIEV4ZWNS ZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKK2V4dGVybiB2b2lkIEV4 ZWNBc3luY01lcmdlQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKTsKIAogI2VuZGlm CQkJCQkJCS8qIE5PREVNRVJHRUFQUEVORF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDE4 YWU4ZjBkNGJiLi4xZGM3ZTllNjE0NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE1NDUsMTAg KzE1NDUsNjkgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmRTdGF0ZQogCVR1cGxlVGFibGVT bG90ICoqbXNfc2xvdHM7CS8qIGFycmF5IG9mIGxlbmd0aCBtc19ucGxhbnMgKi8KIAlzdHJ1Y3Qg YmluYXJ5aGVhcCAqbXNfaGVhcDsgLyogYmluYXJ5IGhlYXAgb2Ygc2xvdCBpbmRpY2VzICovCiAJ Ym9vbAkJbXNfaW5pdGlhbGl6ZWQ7IC8qIGFyZSBzdWJwbGFucyBzdGFydGVkPyAqLworCUJpdG1h cHNldCAgKm1zX2FzeW5jcGxhbnM7CS8qIGFzeW5jaHJvbm91cyBwbGFucyBpbmRleGVzICovCisJ aW50CQkJbXNfbmFzeW5jcGxhbnM7IC8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCisJQXN5 bmNSZXF1ZXN0ICoqbXNfYXN5bmNyZXF1ZXN0czsJLyogYXJyYXkgb2YgQXN5bmNSZXF1ZXN0cyAq LworCVR1cGxlVGFibGVTbG90ICoqbXNfYXN5bmNyZXN1bHRzOwkvKiB1bnJldHVybmVkIHJlc3Vs dHMgb2YgYXN5bmMgcGxhbnMgKi8KKwlCaXRtYXBzZXQgICptc19oYXNfYXN5bmNyZXN1bHRzOwkv KiBwbGFucyB3aGljaCBoYXZlIGFzeW5jIHJlc3VsdHMgKi8KKwlCaXRtYXBzZXQgICptc19hc3lu Y3JlbWFpbjsgLyogcmVtYWluaW5nIGFzeW5jaHJvbm91cyBwbGFucyAqLworCUJpdG1hcHNldCAg Km1zX25lZWRyZXF1ZXN0OyAvKiBhc3luY2hyb25vdXMgcGxhbnMgbmVlZGluZyBhIG5ldyByZXF1 ZXN0ICovCisJc3RydWN0IFdhaXRFdmVudFNldCAqbXNfZXZlbnRzZXQ7CS8qIFdhaXRFdmVudFNl dCB1c2VkIHRvIGNvbmZpZ3VyZSBmaWxlCisJCQkJCQkJCQkJICogZGVzY3JpcHRvciB3YWl0IGV2 ZW50cyAqLwogCXN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlICptc19wcnVuZV9zdGF0ZTsKKwli b29sCQltc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkOwkvKiBpcyBtc192YWxpZF9zdWJwbGFu cyB2YWxpZD8gKi8KIAlCaXRtYXBzZXQgICptc192YWxpZF9zdWJwbGFuczsKKwlCaXRtYXBzZXQg ICptc192YWxpZF9hc3luY3BsYW5zOwkvKiB2YWxpZCBhc3luY2hyb25vdXMgcGxhbnMgaW5kZXhl cyAqLwogfSBNZXJnZUFwcGVuZFN0YXRlOwogCisvKiBHZXR0ZXJzIGZvciBBcHBlbmRTdGF0ZSBh bmQgTWVyZ2VBcHBlbmRTdGF0ZSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgV2FpdEV2ZW50U2V0 ICoKK0dldEFwcGVuZEV2ZW50U2V0KFBsYW5TdGF0ZSAqcHMpCit7CisJQXNzZXJ0KElzQShwcywg QXBwZW5kU3RhdGUpIHx8IElzQShwcywgTWVyZ2VBcHBlbmRTdGF0ZSkpOworCisJaWYgKElzQShw cywgQXBwZW5kU3RhdGUpKQorCQlyZXR1cm4gKChBcHBlbmRTdGF0ZSAqKSBwcyktPmFzX2V2ZW50 c2V0OworCWVsc2UKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwcyktPm1zX2V2ZW50 c2V0OworfQorCitzdGF0aWMgaW5saW5lIEJpdG1hcHNldCAqCitHZXROZWVkUmVxdWVzdChQbGFu U3RhdGUgKnBzKQoreworCUFzc2VydChJc0EocHMsIEFwcGVuZFN0YXRlKSB8fCBJc0EocHMsIE1l cmdlQXBwZW5kU3RhdGUpKTsKKworCWlmIChJc0EocHMsIEFwcGVuZFN0YXRlKSkKKwkJcmV0dXJu ICgoQXBwZW5kU3RhdGUgKikgcHMpLT5hc19uZWVkcmVxdWVzdDsKKwllbHNlCisJCXJldHVybiAo KE1lcmdlQXBwZW5kU3RhdGUgKikgcHMpLT5tc19uZWVkcmVxdWVzdDsKK30KKworLyogQ29tbW9u IHBhcnQgb2YgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoKSBmb3IgQXBwZW5kIGFuZCBNZXJn ZUFwcGVuZCAqLworc3RhdGljIGlubGluZSBib29sCitjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFu c19jb21tb24oQml0bWFwc2V0ICoqdmFsaWRfc3VicGxhbnMsCisJCQkJCQkJCSAgQml0bWFwc2V0 ICphc3luY3BsYW5zLAorCQkJCQkJCQkgIEJpdG1hcHNldCAqKnZhbGlkX2FzeW5jcGxhbnMpCit7 CisJQXNzZXJ0KCp2YWxpZF9hc3luY3BsYW5zID09IE5VTEwpOworCisJLyogQ2hlY2tlZCBieSBj bGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucygpICovCisJQXNzZXJ0KCFibXNfaXNfZW1wdHkoKnZh bGlkX3N1YnBsYW5zKSk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxp ZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpZiAoIWJtc19vdmVybGFwKCp2YWxpZF9zdWJwbGFucywg YXN5bmNwbGFucykpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEdldCB2YWxpZCBhc3luYyBzdWJw bGFucy4gKi8KKwkqdmFsaWRfYXN5bmNwbGFucyA9IGJtc19pbnRlcnNlY3QoYXN5bmNwbGFucywK KwkJCQkJCQkJCSAgKnZhbGlkX3N1YnBsYW5zKTsKKworCS8qIEFkanVzdCB0aGUgdmFsaWQgc3Vi cGxhbnMgdG8gY29udGFpbiBzeW5jIHN1YnBsYW5zIG9ubHkuICovCisJKnZhbGlkX3N1YnBsYW5z ID0gYm1zX2RlbF9tZW1iZXJzKCp2YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJCSAgKnZhbGlkX2Fz eW5jcGxhbnMpOworCXJldHVybiB0cnVlOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkg UmVjdXJzaXZlVW5pb25TdGF0ZSBpbmZvcm1hdGlvbgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4 IGI1MjNiY2RhOGYzLi5mZWU0OTFiNzdhZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCkBAIC03MCw2ICs3 MCw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9wYXJhbGxlbF9oYXNoOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3BhcnRpdGlvbl9wcnVuaW5nOwogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX3ByZXNvcnRlZF9hZ2dyZWdhdGU7CiBleHRlcm4gUEdETExJ TVBPUlQgYm9vbCBlbmFibGVfYXN5bmNfYXBwZW5kOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg ZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgY29uc3Ry YWludF9leGNsdXNpb247CiAKIGV4dGVybiBkb3VibGUgaW5kZXhfcGFnZXNfZmV0Y2hlZChkb3Vi bGUgdHVwbGVzX2ZldGNoZWQsIEJsb2NrTnVtYmVyIHBhZ2VzLApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N5c3ZpZXdzLm91dAppbmRleCAzYjM3ZmFmYTY1Yi4uYWU0ZmE0MmE0MzggMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNDksNiArMTQ5LDcgQEAgc2VsZWN0 IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUn OwogICAgICAgICAgICAgICBuYW1lICAgICAgICAgICAgICB8IHNldHRpbmcgCiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0KICBlbmFibGVfYXN5bmNfYXBwZW5kICAg ICAgICAgICAgfCBvbgorIGVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQgICAgICB8IG9uCiAgZW5h YmxlX2JpdG1hcHNjYW4gICAgICAgICAgICAgIHwgb24KICBlbmFibGVfZGlzdGluY3RfcmVvcmRl cmluZyAgICAgfCBvbgogIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgICAgICAgICB8IG9uCkBAIC0x NzMsNyArMTc0LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVy ZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8 IG9uCiAgZW5hYmxlX3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2Nh biAgICAgICAgICAgICAgICAgfCBvbgotKDI1IHJvd3MpCisoMjYgcm93cykKIAogLS0gVGhlcmUg YXJlIGFsd2F5cyB3YWl0IGV2ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIElu amVjdGlvblBvaW50CiAtLSBtYXkgYmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBo aXN0b3J5IHNpbmNlIGxhc3QgcG9zdG1hc3RlciBzdGFydC4KLS0gCjIuNDMuMAoK --=_394198ab026a5018363a24aaa394a16d--