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 1wPdzE-000v8N-0n for pgsql-hackers@arkaria.postgresql.org; Wed, 20 May 2026 10:17:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wPdzC-00752v-0v for pgsql-hackers@arkaria.postgresql.org; Wed, 20 May 2026 10:17:11 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wPdzB-00752n-2D for pgsql-hackers@lists.postgresql.org; Wed, 20 May 2026 10:17:10 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wPdz7-00000000X1Y-3vMQ for pgsql-hackers@lists.postgresql.org; Wed, 20 May 2026 10:17:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1779272225; bh=df6cb1Ijq7lCG45re30b6KDi32f95za9Us0NI7J1ncU=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=sN9E4y1ggVXfHzD3BaXt/ujjMy3wWyaA+y6MOYgnuJabr4N51yTyC4FwqZKJFmfkh kMOBMHM6K8SGppf9YNDByI59KrHaU/VAGEhXCVNPZ1jEuuNvpvNwdEDAh9ttsCulkY e9NShVovbWPE8EoPnVVlXRhWm5Dx+e1Wq3mQu9ufnNQLx5vEKj70tHERSbV5iW28Cr LsJZpeCSim1BbxNCZReDU25RyugFeJ9XxCGv6jIEKWxwgDo31Xjw4FUSbKuf3DIZI5 VAyDYd18RH8b+wTyymV/xM91OAMX6GpQ2VKwKttqrJBApJqtBOk0+Ed2U+TYrkhgwP E2W28ZRreAu3Q== Received: from mail.l.postgrespro.ru (webmail-master-mstn.l.postgrespro.ru [192.168.2.26]) (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 E241060C0D; Wed, 20 May 2026 13:17:04 +0300 (MSK) MIME-Version: 1.0 Date: Wed, 20 May 2026 13:17:04 +0300 From: Alexander Pyhalov To: Alexander Korotkov Cc: solaimurugan vellaipandiyan , =?UTF-8?Q?=C3=81lvaro_Herrera?= , g.kashkin@postgrespro.ru, Ashutosh Bapat , PostgreSQL Hackers Subject: Re: Function scan FDW pushdown In-Reply-To: References: <202508051955.sao7ucalcce7@alvherre.pgsql> <7e2abeb3ea9bc7ca024f4e457dce33f5@postgrespro.ru> Message-ID: <214e7cb76a9f142a08246660a649ca0b@postgrespro.ru> X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_b4977fe68c5641a48bd9248e7fbae515" 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 3.0.0.9059, bases: 2026/05/20 09:46:00 #28195252 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 --=_b4977fe68c5641a48bd9248e7fbae515 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Alexander Korotkov писал(а) 2026-05-19 21:21: > Good evening! > > On Tue, May 19, 2026 at 6:25 PM Alexander Pyhalov > wrote: >> >> Found one more issue in whole row var deparsing. It can appear on a >> nullable outer side, and we should use the same logic as when >> deparsing >> table column reference. Otherwise we get records from nulls instead of >> nulls (for example, "(NULL, NULL)" instead of NULL). > > > Good catch, accepted. > Hi. I've found another issue. The fact that in the new versions of the patch RTE RelOptInfo misses fdw_private seems to be unfortunate. For example, in the last version we haven't thought about classifying baserestrictinfo. And if we do, we should pass fdw_private down to foreign_expr_walker. Perhaps, we could attach it to RTE_FUNCTION rel prior to calling classifyConditions(), but should we later set it back to NULL? Another problem comes if we try to handle joins, which can crearte subqueries (like INNER/OUTER UNIQUE). In this case we should somehow cook fpinfo for get_relation_column_alias_ids(). Attaching patch which tries to handle baserestrictinfos by passing fpinfo down to foreign_expr_walker(). One more interesting example (included in the patch) is EXPLAIN (VERBOSE, COSTS OFF) WITH s AS MATERIALIZED (SELECT r1.* FROM remote_tbl r1 JOIN LATERAL (SELECT r2.a FROM remote_tbl r2, f(r1.a) LIMIT 1) s ON true) SELECT * FROM s ORDER BY 1; We get the following plan: Sort Output: s.a, s.b Sort Key: s.a CTE s -> Nested Loop Output: r1.a, r1.b -> Foreign Scan on public.remote_tbl r1 Output: r1.a, r1.b Remote SQL: SELECT a, b FROM public.base_tbl_fn -> Foreign Scan Output: NULL::integer Relations: (public.remote_tbl r2) INNER JOIN (Function f) Remote SQL: SELECT NULL FROM (public.base_tbl_fn r1 INNER JOIN public.f($1::integer) f2(c1) ON (TRUE)) LIMIT 1::bigint -> CTE Scan on s Output: s.a, s.b Here you can see that we use parameter in function argument. Don't know if it's a real problem, but at least looks suspicious. In v3 patch used contain_param_walker() in is_nonrel_relinfo_ok() (which mutated to function_rte_pushdown_ok()) to avoid such plans. One minor issue I've noticed is in function_rte_pushdown_ok(): + if (rel->rtekind != RTE_FUNCTION) + return false; + rte = planner_rt_fetch(rel->relid, root); + if (rte->rtekind != RTE_FUNCTION) + return false; Is the second rtekind check necessary? -- Best regards, Alexander Pyhalov, Postgres Professional --=_b4977fe68c5641a48bd9248e7fbae515 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v9-0001-postgres_fdw-push-down-FUNCTION-RTE-into-foreign-joi.patch Content-Disposition: attachment; filename*0*=UTF-8''v9-0001-postgres_fdw-push-down-FUNCTION-RTE-into-forei; filename*1*=gn-joi.patch; size=74187 RnJvbSA4MDY4NDQ0MjMyNGFhMTJhNjAwNGRhNDBmMDllMzRiNTczMTMwY2IyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogV2VkLCAyMCBNYXkgMjAyNiAwOToyMjo1MSArMDMwMApTdWJqZWN0OiBb UEFUQ0hdIHBvc3RncmVzX2ZkdzogcHVzaCBkb3duIEZVTkNUSU9OIFJURSBpbnRvIGZvcmVpZ24g am9pbnMKCkEgZm9yZWlnbiBqb2luIHBsYW5uaW5nIGhvb2sgbm93IGNvbnNpZGVycyBhIChmb3Jl aWduLXRhYmxlIHggZnVuY3Rpb24tUlRFKQpJTk5FUiBqb2luIGFzIGEgcHVzaC1kb3duIGNhbmRp ZGF0ZSB3aGVuIHRoZSBmdW5jdGlvbiBleHByZXNzaW9uIGlzCklNTVVUQUJMRSBhbmQgb3RoZXJ3 aXNlIHNoaXBwYWJsZS4gIFRoZSByZW1vdGUgcXVlcnkgYWJzb3JicyB0aGUgZnVuY3Rpb24KY2Fs bCBhcyBhIEZST00tbGlzdCBpdGVtIChlLmcuIHVubmVzdCguLi4pIEFTIGY8cnRpPihjMSwgYzIs IC4uLikpLCBzbyB0aGUKZm9yZWlnbiBzaWRlIHJldHVybnMgb25seSByb3dzIHRoYXQgbWF0Y2gg dGhlIGZ1bmN0aW9uLXByb2R1Y2VkIHNldCBhbmQgdGhlCmpvaW4gZXhlY3V0ZXMgZW50aXJlbHkg b24gdGhlIHJlbW90ZS4KCkFuIElNTVVUQUJMRSBmdW5jdGlvbiBnaXZlcyB0aGUgc2FtZSByZXN1 bHQgb24gYW55IHNlcnZlciwgc28gdGhlIHNhbWUKZnVuY3Rpb24gUlRFIGNhbiBiZSBhIHB1c2gt ZG93biBjYW5kaWRhdGUgZm9yIHNldmVyYWwgZGlzdGluY3QgZm9yZWlnbgpzZXJ2ZXJzIHdpdGhv dXQgc2VtYW50aWMgcmlzay4gIFRvIGtlZXAgdGhlIHBsYW5uZXIgc3RhdGUgY29uc2lzdGVudAph Y3Jvc3MgdGhvc2UgaW5kZXBlbmRlbnQgYXR0ZW1wdHMsIHRoZSBwZXItY2FsbCBzdHViIGZwaW5m byBmb3IgdGhlCmZ1bmN0aW9uIHNpZGUgbGl2ZXMgb24gdGhlIGpvaW5yZWwncyBQZ0Zkd1JlbGF0 aW9uSW5mbyAobmV3Cm91dGVyX2Z1bmNfZnBpbmZvIC8gaW5uZXJfZnVuY19mcGluZm8pLCBuZXZl ciBvbiB0aGUgZnVuY3Rpb24gcmVsIGl0c2VsZiwKYW5kIHRoZSBmdW5jdGlvbiBzaWRlIGlzIGRl dGVjdGVkIHZpYSBydGVraW5kIHJhdGhlciB0aGFuIGZkd19wcml2YXRlLgoKc2V0X2ZvcmVpZ25f cmVsX3Byb3BlcnRpZXMoKSBwcm9wYWdhdGVzIGZkd3JvdXRpbmUgb250byBhIGpvaW5yZWwgdGhh dApwYWlycyBhIGZvcmVpZ24gcmVsIHdpdGggYW4gUlRFX0ZVTkNUSU9OIHJlbCBzbyBHZXRGb3Jl aWduSm9pblBhdGhzIGdldHMKY2FsbGVkOyB0aGUgRkRXIHJldGFpbnMgZnVsbCBjb250cm9sIG92 ZXIgd2hldGhlciB0byBhY3R1YWxseSBnZW5lcmF0ZSBhCnBhdGguICBkZXBhcnNlUmFuZ2VUYmxS ZWYgYW5kIGRlcGFyc2VDb2x1bW5SZWYgZ2FpbiBhIEZVTkNUSU9OLVJURSBicmFuY2gKdGhhdCBl bWl0cyB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbiBhbmQgcmVzb2x2ZXMgVmFycyB0byB0aGUgZ2Vu ZXJhdGVkCi0tLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jICAgICAgICAgICAgICAg IHwgMTQzICsrKystCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQg ICAgfCA1NjAgKysrKysrKysrKysrKysrKysrCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl c19mZHcuYyAgICAgICAgICAgfCA0OTkgKysrKysrKysrKysrKystLQogY29udHJpYi9wb3N0Z3Jl c19mZHcvcG9zdGdyZXNfZmR3LmggICAgICAgICAgIHwgIDEyICsKIGNvbnRyaWIvcG9zdGdyZXNf ZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsICAgICB8IDIyMiArKysrKysrCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgICAgICAgICAgfCAgMjQgKwogNiBmaWxlcyBjaGFuZ2Vk LCAxNDE2IGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2Uu YwppbmRleCAyZGNjNmM4YWYxYi4uYTJlOTMwMWZiNjUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9z dGdyZXNfZmR3L2RlcGFyc2UuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMK QEAgLTY4LDYgKzY4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgZm9yZWlnbl9nbG9iX2N4dAogewogCVBs YW5uZXJJbmZvICpyb290OwkJCS8qIGdsb2JhbCBwbGFubmVyIHN0YXRlICovCiAJUmVsT3B0SW5m byAqZm9yZWlnbnJlbDsJCS8qIHRoZSBmb3JlaWduIHJlbGF0aW9uIHdlIGFyZSBwbGFubmluZyBm b3IgKi8KKwlQZ0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvOwkvKiB0aGUgZm9yZWlnbiBzZXJ2ZXIg aW5mbyB3ZSBzaG91bGQgcmVseSBvbiAqLwogCVJlbGlkcwkJcmVsaWRzOwkJCS8qIHJlbGlkcyBv ZiBiYXNlIHJlbGF0aW9ucyBpbiB0aGUgdW5kZXJseWluZwogCQkJCQkJCQkgKiBzY2FuICovCiB9 IGZvcmVpZ25fZ2xvYl9jeHQ7CkBAIC0xMTIsNiArMTEzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgZGVw YXJzZV9leHByX2N4dAogCQlhcHBlbmRTdHJpbmdJbmZvKChidWYpLCAiJXMlZC4iLCBSRUxfQUxJ QVNfUFJFRklYLCAodmFybm8pKQogI2RlZmluZSBTVUJRVUVSWV9SRUxfQUxJQVNfUFJFRklYCSJz IgogI2RlZmluZSBTVUJRVUVSWV9DT0xfQUxJQVNfUFJFRklYCSJjIgorI2RlZmluZSBGVU5DVElP Tl9SRUxfQUxJQVNfUFJFRklYCSJmIgogCiAvKgogICogRnVuY3Rpb25zIHRvIGRldGVybWluZSB3 aGV0aGVyIGFuIGV4cHJlc3Npb24gY2FuIGJlIGV2YWx1YXRlZCBzYWZlbHkgb24KQEAgLTIxNyw2 ICsyMTksNyBAQCBzdGF0aWMgdm9pZCBnZXRfcmVsYXRpb25fY29sdW1uX2FsaWFzX2lkcyhWYXIg Km5vZGUsIFJlbE9wdEluZm8gKmZvcmVpZ25yZWwsCiB2b2lkCiBjbGFzc2lmeUNvbmRpdGlvbnMo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICAgUmVsT3B0SW5mbyAqYmFzZXJlbCwKKwkJCQkgICBQ Z0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvLAogCQkJCSAgIExpc3QgKmlucHV0X2NvbmRzLAogCQkJ CSAgIExpc3QgKipyZW1vdGVfY29uZHMsCiAJCQkJICAgTGlzdCAqKmxvY2FsX2NvbmRzKQpAQCAt MjMwLDcgKzIzMyw3IEBAIGNsYXNzaWZ5Q29uZGl0aW9ucyhQbGFubmVySW5mbyAqcm9vdCwKIAl7 CiAJCVJlc3RyaWN0SW5mbyAqcmkgPSBsZmlyc3Rfbm9kZShSZXN0cmljdEluZm8sIGxjKTsKIAot CQlpZiAoaXNfZm9yZWlnbl9leHByKHJvb3QsIGJhc2VyZWwsIHJpLT5jbGF1c2UpKQorCQlpZiAo aXNfZm9yZWlnbl9leHByKHJvb3QsIGJhc2VyZWwsIGZwaW5mbywgcmktPmNsYXVzZSkpCiAJCQkq cmVtb3RlX2NvbmRzID0gbGFwcGVuZCgqcmVtb3RlX2NvbmRzLCByaSk7CiAJCWVsc2UKIAkJCSps b2NhbF9jb25kcyA9IGxhcHBlbmQoKmxvY2FsX2NvbmRzLCByaSk7CkBAIC0yNDMsMTEgKzI0Niwx MSBAQCBjbGFzc2lmeUNvbmRpdGlvbnMoUGxhbm5lckluZm8gKnJvb3QsCiBib29sCiBpc19mb3Jl aWduX2V4cHIoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJUmVsT3B0SW5mbyAqYmFzZXJlbCwKKwkJ CQlQZ0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvLAogCQkJCUV4cHIgKmV4cHIpCiB7CiAJZm9yZWln bl9nbG9iX2N4dCBnbG9iX2N4dDsKIAlmb3JlaWduX2xvY19jeHQgbG9jX2N4dDsKLQlQZ0Zkd1Jl bGF0aW9uSW5mbyAqZnBpbmZvID0gKFBnRmR3UmVsYXRpb25JbmZvICopIChiYXNlcmVsLT5mZHdf cHJpdmF0ZSk7CiAKIAkvKgogCSAqIENoZWNrIHRoYXQgdGhlIGV4cHJlc3Npb24gY29uc2lzdHMg b2Ygbm9kZXMgdGhhdCBhcmUgc2FmZSB0byBleGVjdXRlCkBAIC0yNTUsNiArMjU4LDcgQEAgaXNf Zm9yZWlnbl9leHByKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCWdsb2JfY3h0LnJvb3QgPSBy b290OwogCWdsb2JfY3h0LmZvcmVpZ25yZWwgPSBiYXNlcmVsOworCWdsb2JfY3h0LmZwaW5mbyA9 IGZwaW5mbzsKIAogCS8qCiAJICogRm9yIGFuIHVwcGVyIHJlbGF0aW9uLCB1c2UgcmVsaWRzIGZy b20gaXRzIHVuZGVybmVhdGggc2NhbiByZWxhdGlvbiwKQEAgLTMyNCw4ICszMjgsOCBAQCBmb3Jl aWduX2V4cHJfd2Fsa2VyKE5vZGUgKm5vZGUsCiAJaWYgKG5vZGUgPT0gTlVMTCkKIAkJcmV0dXJu IHRydWU7CiAKLQkvKiBNYXkgbmVlZCBzZXJ2ZXIgaW5mbyBmcm9tIGJhc2VyZWwncyBmZHdfcHJp dmF0ZSBzdHJ1Y3QgKi8KLQlmcGluZm8gPSAoUGdGZHdSZWxhdGlvbkluZm8gKikgKGdsb2JfY3h0 LT5mb3JlaWducmVsLT5mZHdfcHJpdmF0ZSk7CisJLyogTWF5IG5lZWQgc2VydmVyIGluZm8gZnJv bSBnbG9iYWwgY29udGV4dCAqLworCWZwaW5mbyA9IGdsb2JfY3h0LT5mcGluZm87CiAKIAkvKiBT ZXQgdXAgaW5uZXJfY3h0IGZvciBwb3NzaWJsZSByZWN1cnNpb24gdG8gY2hpbGQgbm9kZXMgKi8K IAlpbm5lcl9jeHQuY29sbGF0aW9uID0gSW52YWxpZE9pZDsKQEAgLTIwMzAsNiArMjAzNCw3MiBA QCBkZXBhcnNlRnJvbUV4cHJGb3JSZWwoU3RyaW5nSW5mbyBidWYsIFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpmb3JlaWducmVsLAogCX0KIH0KIAorLyoKKyAqIERlcGFyc2UgYSBGVU5D VElPTiBSVEUgYWJzb3JiZWQgaW50byBhIGZvcmVpZ24gam9pbi4gIFRoZSBmdW5jdGlvbiBjYWxs KHMpCisgKiBhcmUgZW1pdHRlZCBhcyBhIEZST00tbGlzdCBpdGVtOgorICoKKyAqICAgPGZ1bmNl eHByPiBBUyBmPHJ0aT4oYzEsIGMyLCAuLi4sIGNOKQorICoKKyAqIEZvciBtdWx0aS1mdW5jdGlv biBSVEVzIChTUUwgUk9XUyBGUk9NIChmMSgpLCBmMigpLCAuLi4pKSwgZWFjaAorICogZnVuY3Rp b24gY2FsbCBhcHBlYXJzIGNvbW1hLXNlcGFyYXRlZCBpbnNpZGUgUk9XUyBGUk9NKC4uLikuICBD b2x1bW4KKyAqIGFsaWFzZXMgYzEuLmNOIGNvdmVyIHRoZSB1bmlvbiBvZiBldmVyeSBmdW5jdGlv bidzIGNvbHVtbnMsIGluIHRoZQorICogb3JkZXIgdGhleSBhcHBlYXI7IHRoYXQgbWF0Y2hlcyB0 aGUgY29sdW1uIG9yZGVyaW5nIG9mIHRoZSBSVEUuCisgKi8KK3N0YXRpYyB2b2lkCitkZXBhcnNl RnVuY3Rpb25SYW5nZVRibFJlZihTdHJpbmdJbmZvIGJ1ZiwgUGxhbm5lckluZm8gKnJvb3QsCisJ CQkJCQkgICBSZWxPcHRJbmZvICpmb3JlaWducmVsLCBSZWxPcHRJbmZvICpzY2FucmVsLAorCQkJ CQkJICAgTGlzdCAqKnBhcmFtc19saXN0KQoreworCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHBsYW5u ZXJfcnRfZmV0Y2goZm9yZWlnbnJlbC0+cmVsaWQsIHJvb3QpOworCWRlcGFyc2VfZXhwcl9jeHQg Y29udGV4dDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlib29sCQltdWx0aV9mdW5jOworCWludAkJCXRv dGFsX2NvbHMgPSAwOworCWludAkJCWk7CisKKwlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9G VU5DVElPTik7CisJQXNzZXJ0KCFydGUtPmZ1bmNvcmRpbmFsaXR5KTsKKwlBc3NlcnQobGlzdF9s ZW5ndGgocnRlLT5mdW5jdGlvbnMpID49IDEpOworCisJbXVsdGlfZnVuYyA9IGxpc3RfbGVuZ3Ro KHJ0ZS0+ZnVuY3Rpb25zKSA+IDE7CisKKwljb250ZXh0LmJ1ZiA9IGJ1ZjsKKwljb250ZXh0LnJv b3QgPSByb290OworCWNvbnRleHQuZm9yZWlnbnJlbCA9IHNjYW5yZWw7CisJY29udGV4dC5zY2Fu cmVsID0gc2NhbnJlbDsKKwljb250ZXh0LnBhcmFtc19saXN0ID0gcGFyYW1zX2xpc3Q7CisKKwlp ZiAobXVsdGlfZnVuYykKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJST1dTIEZST00g KCIpOworCisJZm9yZWFjaChsYywgcnRlLT5mdW5jdGlvbnMpCisJeworCQlSYW5nZVRibEZ1bmN0 aW9uICpydGZ1bmMgPSAoUmFuZ2VUYmxGdW5jdGlvbiAqKSBsZmlyc3QobGMpOworCisJCWlmIChm b3JlYWNoX2N1cnJlbnRfaW5kZXgobGMpID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCAiLCAiKTsKKwkJZGVwYXJzZUV4cHIoKEV4cHIgKikgcnRmdW5jLT5mdW5jZXhwciwgJmNv bnRleHQpOworCQl0b3RhbF9jb2xzICs9IHJ0ZnVuYy0+ZnVuY2NvbGNvdW50OworCX0KKworCWlm IChtdWx0aV9mdW5jKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CisKKwkvKiBB bGlhcyArIGdlbmVyYXRlZCBjb2x1bW4tbmFtZSBsaXN0LiAqLworCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAiICVzJWQiLCBGVU5DVElPTl9SRUxfQUxJQVNfUFJFRklYLCBmb3JlaWducmVsLT5yZWxp ZCk7CisJaWYgKHRvdGFsX2NvbHMgPiAwKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVm LCAnKCcpOworCQlmb3IgKGkgPSAxOyBpIDw9IHRvdGFsX2NvbHM7IGkrKykKKwkJeworCQkJaWYg KGkgPiAxKQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAiJXMlZCIsIFNVQlFVRVJZX0NPTF9BTElBU19QUkVGSVgsIGkpOwor CQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKKwl9Cit9CisKIC8qCiAgKiBB cHBlbmQgRlJPTSBjbGF1c2UgZW50cnkgZm9yIHRoZSBnaXZlbiByZWxhdGlvbiBpbnRvIGJ1Zi4K ICAqIENvbmRpdGlvbnMgZnJvbSBsb3dlci1sZXZlbCBTRU1JLUpPSU5zIGFyZSBhcHBlbmRlZCB0 byBhZGRpdGlvbmFsX2NvbmRzCkBAIC0yMDQwLDcgKzIxMTAsMjIgQEAgZGVwYXJzZVJhbmdlVGJs UmVmKFN0cmluZ0luZm8gYnVmLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqZm9yZWln bnJlbCwKIAkJCQkgICBib29sIG1ha2Vfc3VicXVlcnksIEluZGV4IGlnbm9yZV9yZWwsIExpc3Qg KippZ25vcmVfY29uZHMsCiAJCQkJICAgTGlzdCAqKmFkZGl0aW9uYWxfY29uZHMsIExpc3QgKipw YXJhbXNfbGlzdCkKIHsKLQlQZ0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvID0gKFBnRmR3UmVsYXRp b25JbmZvICopIGZvcmVpZ25yZWwtPmZkd19wcml2YXRlOworCVBnRmR3UmVsYXRpb25JbmZvICpm cGluZm87CisKKwkvKgorCSAqIEZvciBhIGZ1bmN0aW9uIFJURSBhYnNvcmJlZCBpbnRvIGEgZm9y ZWlnbiBqb2luLCBkZXBhcnNlIHRoZSBmdW5jdGlvbgorCSAqIGV4cHJlc3Npb24gYXMgYSBGUk9N LWxpc3QgaXRlbSBhbmQgcmV0dXJuLiAgVGhlIHN0dWIgZnBpbmZvIHNldCB1cCBieQorCSAqIGZv cmVpZ25fam9pbl9vaygpIG1heSBvciBtYXkgbm90IGJlIHByZXNlbnQgaGVyZS4KKwkgKi8KKwlp ZiAoZm9yZWlnbnJlbC0+cnRla2luZCA9PSBSVEVfRlVOQ1RJT04pCisJeworCQlBc3NlcnQoIW1h a2Vfc3VicXVlcnkpOworCQlkZXBhcnNlRnVuY3Rpb25SYW5nZVRibFJlZihidWYsIHJvb3QsIGZv cmVpZ25yZWwsIGZvcmVpZ25yZWwsCisJCQkJCQkJCSAgIHBhcmFtc19saXN0KTsKKwkJcmV0dXJu OworCX0KKworCWZwaW5mbyA9IChQZ0Zkd1JlbGF0aW9uSW5mbyAqKSBmb3JlaWducmVsLT5mZHdf cHJpdmF0ZTsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiB0aGVzZSBjYXNlcy4gKi8K IAlBc3NlcnQoSVNfU0lNUExFX1JFTChmb3JlaWducmVsKSB8fCBJU19KT0lOX1JFTChmb3JlaWdu cmVsKSk7CkBAIC0yNzEyLDYgKzI3OTcsNTQgQEAgc3RhdGljIHZvaWQKIGRlcGFyc2VDb2x1bW5S ZWYoU3RyaW5nSW5mbyBidWYsIGludCB2YXJubywgaW50IHZhcmF0dG5vLCBSYW5nZVRibEVudHJ5 ICpydGUsCiAJCQkJIGJvb2wgcXVhbGlmeV9jb2wpCiB7CisJLyoKKwkgKiBGdW5jdGlvbiBSVEUg Y29sdW1uczogZW1pdCBhcyBmPHZhcm5vPi5jPHZhcmF0dG5vPiwgbWF0Y2hpbmcgdGhlCisJICog YWxpYXNlcyBnZW5lcmF0ZWQgYnkgZGVwYXJzZUZ1bmN0aW9uUmFuZ2VUYmxSZWYoKS4gIEEgd2hv bGUtcm93IFZhcgorCSAqICh2YXJhdHRubyA9PSAwKSBpcyByZW5kZXJlZCBhcyBST1coZjx2YXJu bz4uYzEsIC4uLiwgZjx2YXJubz4uYzxOPikKKwkgKiB3aGVyZSBOIGlzIHRoZSB0b3RhbCBjb2x1 bW4gY291bnQgb2YgdGhlIGZ1bmN0aW9uIFJURSAoaW5jbHVkaW5nIGFsbAorCSAqIFJPV1MgRlJP TSAoLi4uKSBtZW1iZXJzKS4gIFN5c3RlbSBhdHRyaWJ1dGVzIHN1Y2ggYXMgY3RpZCBoYXZlIG5v CisJICogbWVhbmluZyBmb3IgZnVuY3Rpb24gUlRFcyBhbmQgYXJlIHJlamVjdGVkLgorCSAqLwor CWlmIChydGUtPnJ0ZWtpbmQgPT0gUlRFX0ZVTkNUSU9OKQorCXsKKwkJaWYgKHZhcmF0dG5vID09 IDApCisJCXsKKwkJCWludAkJCW5jb2xzID0gbGlzdF9sZW5ndGgocnRlLT5lcmVmLT5jb2xuYW1l cyk7CisJCQlpbnQJCQlpOworCisJCQlpZiAocXVhbGlmeV9jb2wpCisJCQl7CisJCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhidWYsICJDQVNFIFdIRU4gKCIpOworCQkJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiJXMlZC4iLCBGVU5DVElPTl9SRUxfQUxJQVNfUFJFRklYLCB2YXJubyk7CisJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIqKTo6dGV4dCBJUyBOT1QgTlVMTCBUSEVOICIp OworCQkJfQorCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlJPVygiKTsKKwkJCWZv ciAoaSA9IDE7IGkgPD0gbmNvbHM7IGkrKykKKwkJCXsKKwkJCQlpZiAoaSA+IDEpCisJCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIiVzJWQuJXMlZCIsCisJCQkJCQkJCSBGVU5DVElPTl9SRUxfQUxJQVNfUFJFRklYLCB2YXJu bywKKwkJCQkJCQkJIFNVQlFVRVJZX0NPTF9BTElBU19QUkVGSVgsIGkpOworCQkJfQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOworCisJCQlpZiAocXVhbGlmeV9jb2wpCisJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgRU5EIik7CisJCQlyZXR1cm47CisJCX0KKwor CQlpZiAodmFyYXR0bm8gPCAwKQorCQkJZWxvZyhFUlJPUiwKKwkJCQkgInN5c3RlbSBhdHRyaWJ1 dGUgcmVmZXJlbmNlIHRvIGEgZnVuY3Rpb24gUlRFIGlzIG5vdCBzdXBwb3J0ZWQgaW4gZm9yZWln biBqb2luIHB1c2hkb3duIik7CisKKwkJaWYgKHF1YWxpZnlfY29sKQorCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIlcyVkLiIsIEZVTkNUSU9OX1JFTF9BTElBU19QUkVGSVgsIHZhcm5vKTsKKwkJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVkIiwgU1VCUVVFUllfQ09MX0FMSUFTX1BSRUZJWCwg dmFyYXR0bm8pOworCQlyZXR1cm47CisJfQorCiAJLyogV2Ugc3VwcG9ydCBmZXRjaGluZyB0aGUg cmVtb3RlIHNpZGUncyBDVElEIGFuZCBPSUQuICovCiAJaWYgKHZhcmF0dG5vID09IFNlbGZJdGVt UG9pbnRlckF0dHJpYnV0ZU51bWJlcikKIAl7CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVz X2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhw ZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRleCBhYWZmY2YzMTI3MS4uMDRhNDdkYzAzZWQgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQK KysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApAQCAt Mjg4NSw2ICsyODg1LDU2NiBAQCBTRUxFQ1QgdDEuYzEsIHQyLmMyIEZST00gdjQgdDEgTEVGVCBK T0lOIGZ0NSB0MiBPTiAodDEuYzEgPSB0Mi5jMSkgT1JERVIgQlkgdDEuYwogKDEwIHJvd3MpCiAK IEFMVEVSIFZJRVcgdjQgT1dORVIgVE8gcmVncmVzc192aWV3X293bmVyOworLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0gRm9yZWlnbi1qb2luIHdpdGggRlVOQ1RJT04gUlRFIHB1c2hkb3duIChJTU1VVEFCTEUg ZnVuY3Rpb25zIG9ubHkpCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBJTU1VVEFCTEUgZnVuY3Rpb246IHVu bmVzdCBvZiBjb25zdGFudCBhcnJheSBjYW4gYmUgcHVzaGVkIGRvd24KK0VYUExBSU4gKFZFUkJP U0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5jMSwgdDEuYzMgRlJPTSBmdDEgdDEsIHVubmVzdChB UlJBWVsxLCA1LCAxMCwgMTAwXTo6aW50W10pIEFTIHUoaWQpCitXSEVSRSB0MS5jMSA9IHUuaWQg T1JERVIgQlkgdDEuYzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEuYzEsIHQxLmMzCisg ICBTb3J0IEtleTogdDEuYzEKKyAgIC0+ICBGb3JlaWduIFNjYW4KKyAgICAgICAgIE91dHB1dDog dDEuYzEsIHQxLmMzCisgICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMuZnQxIHQxKSBJTk5FUiBK T0lOIChGdW5jdGlvbiB1KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHIxLiJDIDEiLCBy MS5jMyBGUk9NICgiUyAxIi4iVCAxIiByMSBJTk5FUiBKT0lOIHVubmVzdCgnezEsNSwxMCwxMDB9 Jzo6aW50ZWdlcltdKSBmMihjMSkgT04gKCgocjEuIkMgMSIgPSBmMi5jMSkpKSkKKyg3IHJvd3Mp CisKK1NFTEVDVCB0MS5jMSwgdDEuYzMgRlJPTSBmdDEgdDEsIHVubmVzdChBUlJBWVsxLCA1LCAx MCwgMTAwXTo6aW50W10pIEFTIHUoaWQpCitXSEVSRSB0MS5jMSA9IHUuaWQgT1JERVIgQlkgdDEu YzE7CisgYzEgIHwgIGMzICAgCistLS0tLSstLS0tLS0tCisgICAxIHwgMDAwMDEKKyAgIDUgfCAw MDAwNQorICAxMCB8IDAwMDEwCisgMTAwIHwgMDAxMDAKKyg0IHJvd3MpCisKKy0tIElNTVVUQUJM RSBmdW5jdGlvbjogZ2VuZXJhdGVfc2VyaWVzIHdpdGggY29uc3RhbnQgYXJncworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmMxIEZST00gZnQxIHQxLCBnZW5lcmF0ZV9z ZXJpZXMoMSwgNCkgQVMgZyhpZCkKK1dIRVJFIHQxLmMxID0gZy5pZCBPUkRFUiBCWSB0MS5jMTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEuYzEKKyAgIFNv cnQgS2V5OiB0MS5jMQorICAgLT4gIEZvcmVpZ24gU2NhbgorICAgICAgICAgT3V0cHV0OiB0MS5j MQorICAgICAgICAgUmVsYXRpb25zOiAocHVibGljLmZ0MSB0MSkgSU5ORVIgSk9JTiAoRnVuY3Rp b24gZykKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCByMS4iQyAxIiBGUk9NICgiUyAxIi4i VCAxIiByMSBJTk5FUiBKT0lOIGdlbmVyYXRlX3NlcmllcygxLCA0KSBmMihjMSkgT04gKCgocjEu IkMgMSIgPSBmMi5jMSkpKSkKKyg3IHJvd3MpCisKK1NFTEVDVCB0MS5jMSBGUk9NIGZ0MSB0MSwg Z2VuZXJhdGVfc2VyaWVzKDEsIDQpIEFTIGcoaWQpCitXSEVSRSB0MS5jMSA9IGcuaWQgT1JERVIg QlkgdDEuYzE7CisgYzEgCistLS0tCisgIDEKKyAgMgorICAzCisgIDQKKyg0IHJvd3MpCisKKy0t IFZPTEFUSUxFIGZ1bmN0aW9uIChyYW5kb20pIG11c3QgTk9UIGJlIHB1c2hlZCBkb3duCitFWFBM QUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYzEgRlJPTSBmdDEgdDEsIGdlbmVy YXRlX3NlcmllcygxLCA0ICsgKHJhbmRvbSgpICogMCk6OmludCkgQVMgZyhpZCkKK1dIRVJFIHQx LmMxID0gZy5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBPdXRw dXQ6IHQxLmMxCisgICBIYXNoIENvbmQ6IChnLmlkID0gdDEuYzEpCisgICAtPiAgRnVuY3Rpb24g U2NhbiBvbiBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcyBnCisgICAgICAgICBPdXRwdXQ6IGcu aWQKKyAgICAgICAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCAoNCArICgocmFu ZG9tKCkgKiAnMCc6OmRvdWJsZSBwcmVjaXNpb24pKTo6aW50ZWdlcikpCisgICAtPiAgSGFzaAor ICAgICAgICAgT3V0cHV0OiB0MS5jMQorICAgICAgICAgLT4gIEZvcmVpZ24gU2NhbiBvbiBwdWJs aWMuZnQxIHQxCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmMxCisgICAgICAgICAgICAgICBS ZW1vdGUgU1FMOiBTRUxFQ1QgIkMgMSIgRlJPTSAiUyAxIi4iVCAxIgorKDExIHJvd3MpCisKKy0t IFdJVEggT1JESU5BTElUWSBtdXN0IE5PVCBiZSBwdXNoZWQgZG93biAobGltaXRhdGlvbiBvZiB0 aGlzIGltcGxlbWVudGF0aW9uKQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNU IHQxLmMxLCB1Lm9yZAorRlJPTSBmdDEgdDEsIHVubmVzdChBUlJBWVsxLCA1LCAxMF06OmludFtd KSBXSVRIIE9SRElOQUxJVFkgQVMgdShpZCwgb3JkKQorV0hFUkUgdDEuYzEgPSB1LmlkOworICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBIYXNoIEpvaW4KKyAgIE91dHB1dDogdDEuYzEsIHUub3JkCisgICBIYXNoIENvbmQ6 ICh0MS5jMSA9IHUuaWQpCisgICAtPiAgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5mdDEgdDEKKyAg ICAgICAgIE91dHB1dDogdDEuYzEKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCAiQyAxIiBG Uk9NICJTIDEiLiJUIDEiCisgICAtPiAgSGFzaAorICAgICAgICAgT3V0cHV0OiB1Lm9yZCwgdS5p ZAorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy51bm5lc3QgdQorICAg ICAgICAgICAgICAgT3V0cHV0OiB1Lm9yZCwgdS5pZAorICAgICAgICAgICAgICAgRnVuY3Rpb24g Q2FsbDogdW5uZXN0KCd7MSw1LDEwfSc6OmludGVnZXJbXSkKKygxMSByb3dzKQorCistLSBTYW1l IGZ1bmN0aW9uIFJURSBqb2luZWQgd2l0aCB0d28gZGlmZmVyZW50IGZvcmVpZ24gc2VydmVyczog cGxhbm5lciBwaWNrcworLS0gb25lIGFic29ycHRpb24gKyBhIGxvY2FsIGpvaW4gd2l0aCB0aGUg c2Vjb25kIGZvcmVpZ24gc2VydmVyLiAgVGhlIGZhY3QKKy0tIHRoYXQgdGhlIGZ1bmN0aW9uIGlz IElNTVVUQUJMRSBtYWtlcyB0aGlzIHNhZmUgZXZlbiBpZiBib3RoIHNpZGVzIGNob3NlIHRvCist LSBhYnNvcmIgaXQgaW5kZXBlbmRlbnRseS4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCB0MS5jMSwgdDIuYzEKK0ZST00gZnQxIHQxLCBmdDYgdDIsIHVubmVzdChBUlJBWVsx LCA1LCAxMCwgMTAwXTo6aW50W10pIEFTIHUoaWQpCitXSEVSRSB0MS5jMSA9IHUuaWQgQU5EIHQy LmMxID0gdS5pZCBPUkRFUiBCWSB0MS5jMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgT3V0cHV0 OiB0MS5jMSwgdDIuYzEKKyAgIE1lcmdlIENvbmQ6ICh0MS5jMSA9IHUuaWQpCisgICAtPiAgRm9y ZWlnbiBTY2FuIG9uIHB1YmxpYy5mdDEgdDEKKyAgICAgICAgIE91dHB1dDogdDEuYzEKKyAgICAg ICAgIFJlbW90ZSBTUUw6IFNFTEVDVCAiQyAxIiBGUk9NICJTIDEiLiJUIDEiIE9SREVSIEJZICJD IDEiIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgU29ydAorICAgICAgICAgT3V0cHV0OiB0Mi5jMSwg dS5pZAorICAgICAgICAgU29ydCBLZXk6IHQyLmMxCisgICAgICAgICAtPiAgRm9yZWlnbiBTY2Fu CisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMxLCB1LmlkCisgICAgICAgICAgICAgICBSZWxh dGlvbnM6IChwdWJsaWMuZnQ2IHQyKSBJTk5FUiBKT0lOIChGdW5jdGlvbiB1KQorICAgICAgICAg ICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHIyLmMxLCBmMy5jMSBGUk9NICgiUyAxIi4iVCA0IiBy MiBJTk5FUiBKT0lOIHVubmVzdCgnezEsNSwxMCwxMDB9Jzo6aW50ZWdlcltdKSBmMyhjMSkgT04g KCgocjIuYzEgPSBmMy5jMSkpKSkKKygxMyByb3dzKQorCistLSBDb3N0LWJhc2VkIHNlbGVjdGlv biBiZXR3ZWVuIHR3byBmb3JlaWduIHNlcnZlcnM6IGZ0MSAoIlMgMSIuIlQgMSIpIGhhcworLS0g MTAwMCByb3dzLCBmdDYgKCJTIDEiLiJUIDQiKSBoYXMgfjMzIHJvd3MuICBUaGUgc2FtZSBxdWVy eSBzaGFwZSBnZXRzIGEKKy0tIGRpZmZlcmVudCBwdXNoLWRvd24gdGFyZ2V0IGRlcGVuZGluZyBv biBhIHByZWRpY2F0ZSB0aGF0IGNoYW5nZXMgdGhlCistLSBlZmZlY3RpdmUgY2FyZGluYWxpdHkg b2Ygb25lIHNpZGUgLS0gdGhlIGZ1bmN0aW9uICJqdW1wcyIgdG8gd2hpY2hldmVyCistLSBmb3Jl aWduIHNjYW4gYmVuZWZpdHMgbW9yZSBmcm9tIGJlaW5nIHByZS1maWx0ZXJlZC4KK0FOQUxZWkUg ZnQxOworQU5BTFlaRSBmdDY7CistLSBObyBleHRyYSBwcmVkaWNhdGU6IGZ0MSBpcyB0aGUgYmln Z2VyIHNpZGUsIGZ1bmN0aW9uIGFic29yYmVkIHRoZXJlLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09T VFMgT0ZGKQorU0VMRUNUIHQxLmMxLCB0Mi5jMQorRlJPTSBmdDEgdDEsIGZ0NiB0MiwgdW5uZXN0 KEFSUkFZWzMsIDYsIDksIDEyLCAxNSwgMThdOjppbnRbXSkgQVMgdShpZCkKK1dIRVJFIHQxLmMx ID0gdS5pZCBBTkQgdDIuYzEgPSB1LmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAg T3V0cHV0OiB0MS5jMSwgdDIuYzEKKyAgIEhhc2ggQ29uZDogKHQxLmMxID0gdDIuYzEpCisgICAt PiAgRm9yZWlnbiBTY2FuCisgICAgICAgICBPdXRwdXQ6IHQxLmMxLCB1LmlkCisgICAgICAgICBS ZWxhdGlvbnM6IChwdWJsaWMuZnQxIHQxKSBJTk5FUiBKT0lOIChGdW5jdGlvbiB1KQorICAgICAg ICAgUmVtb3RlIFNRTDogU0VMRUNUIHIxLiJDIDEiLCBmMy5jMSBGUk9NICgiUyAxIi4iVCAxIiBy MSBJTk5FUiBKT0lOIHVubmVzdCgnezMsNiw5LDEyLDE1LDE4fSc6OmludGVnZXJbXSkgZjMoYzEp IE9OICgoKHIxLiJDIDEiID0gZjMuYzEpKSkpCisgICAtPiAgSGFzaAorICAgICAgICAgT3V0cHV0 OiB0Mi5jMQorICAgICAgICAgLT4gIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuZnQ2IHQyCisgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyLmMxCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxF Q1QgYzEgRlJPTSAiUyAxIi4iVCA0IgorKDEyIHJvd3MpCisKKy0tIFNlbGVjdGl2ZSBwcmVkaWNh dGUgb24gZnQxLmMzIChub3QgaW4gdGhlIGVxY2xhc3MpIHNocmlua3MgZnQxIHRvIGEKKy0tIGhh bmRmdWwgb2YgcmVtb3RlIHJvd3M7IG5vdyBmdDYgaXMgZWZmZWN0aXZlbHkgdGhlIGJpZ2dlciBz aWRlIGFuZCB0aGUKKy0tIGZ1bmN0aW9uIGlzIGFic29yYmVkIGludG8gZnQ2IGluc3RlYWQuCitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYzEsIHQyLmMxCitGUk9NIGZ0 MSB0MSwgZnQ2IHQyLCB1bm5lc3QoQVJSQVlbMywgNiwgOSwgMTIsIDE1LCAxOF06OmludFtdKSBB UyB1KGlkKQorV0hFUkUgdDEuYzEgPSB1LmlkIEFORCB0Mi5jMSA9IHUuaWQgQU5EIHQxLmMzIDwg JzAwMDEwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgT3V0cHV0OiB0MS5jMSwg dDIuYzEKKyAgIEpvaW4gRmlsdGVyOiAodDEuYzEgPSB1LmlkKQorICAgLT4gIEZvcmVpZ24gU2Nh biBvbiBwdWJsaWMuZnQxIHQxCisgICAgICAgICBPdXRwdXQ6IHQxLmMxCisgICAgICAgICBSZW1v dGUgU1FMOiBTRUxFQ1QgIkMgMSIgRlJPTSAiUyAxIi4iVCAxIiBXSEVSRSAoKGMzIDwgJzAwMDEw JykpCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIE91dHB1dDogdDIuYzEsIHUuaWQKKyAg ICAgICAgIC0+ICBGb3JlaWduIFNjYW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDIuYzEsIHUu aWQKKyAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5mdDYgdDIpIElOTkVSIEpPSU4g KEZ1bmN0aW9uIHUpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjIuYzEsIGYz LmMxIEZST00gKCJTIDEiLiJUIDQiIHIyIElOTkVSIEpPSU4gdW5uZXN0KCd7Myw2LDksMTIsMTUs MTh9Jzo6aW50ZWdlcltdKSBmMyhjMSkgT04gKCgocjIuYzEgPSBmMy5jMSkpKSkKKygxMiByb3dz KQorCistLSBUaGUgcmVtYWluaW5nIHNjZW5hcmlvcyByZXVzZSBhIGRlZGljYXRlZCBmb3JlaWdu IHRhYmxlIHRvIGNvdmVyIHRoZQorLS0gY29ybmVyIGNhc2VzIG9mIEZVTkNUSU9OIFJURSBwdXNo LWRvd246IGZ1bmN0aW9uLWZpcnN0IEZST00sIHJlY29yZAorLS0gcmV0dXJuIHR5cGUgcmVqZWN0 aW9uLCB3aG9sZS1yb3cgcmVmZXJlbmNlLCBVUERBVEUuLi5GUk9NLi4uLCBhbmQKKy0tIG11bHRp LWZ1bmN0aW9uIFJPV1MgRlJPTS4KK0NSRUFURSBUQUJMRSBiYXNlX3RibF9mbiAoYSBpbnQsIGIg aW50KTsKK0lOU0VSVCBJTlRPIGJhc2VfdGJsX2ZuCisgIFNFTEVDVCBnLCBnICsgMTAwIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDMwKSBnOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgcmVtb3RlX3Ri bCAoYSBpbnQsIGIgaW50KQorICBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAn YmFzZV90YmxfZm4nKTsKKy0tIFRoZSBmdW5jdGlvbiBSVEUgYXBwZWFycyBmaXJzdCBpbiBGUk9N OyB0aGUgZm9yZWlnbiByZWxhdGlvbiBtdXN0IGJlCistLSBmb3VuZCBieSBzY2FubmluZyBmc19i YXNlX3JlbGlkcyBmb3IgYW4gUlRFX1JFTEFUSU9OIHJhdGhlciB0aGFuCistLSB1c2luZyBzY2Fu LT5mc19yZWxpZCBibGluZGx5LgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSB1bm5lc3QoYXJyYXlbMiwgMywgNF0pIG4sIHJlbW90ZV90YmwgciBXSEVSRSByLmEg PSBuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBGb3JlaWduIFNjYW4KKyAgIE91dHB1dDogbi5uLCByLmEsIHIuYgorICAgUmVsYXRpb25zOiAo RnVuY3Rpb24gbikgSU5ORVIgSk9JTiAocHVibGljLnJlbW90ZV90YmwgcikKKyAgIFJlbW90ZSBT UUw6IFNFTEVDVCBmMS5jMSwgcjIuYSwgcjIuYiBGUk9NICh1bm5lc3QoJ3syLDMsNH0nOjppbnRl Z2VyW10pIGYxKGMxKSBJTk5FUiBKT0lOIHB1YmxpYy5iYXNlX3RibF9mbiByMiBPTiAoKChmMS5j MSA9IHIyLmEpKSkpCisoNCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHVubmVzdChhcnJheVsyLCAz LCA0XSkgbiwgcmVtb3RlX3RibCByCitXSEVSRSByLmEgPSBuIE9SREVSIEJZIHIuYTsKKyBuIHwg YSB8ICBiICAKKy0tLSstLS0rLS0tLS0KKyAyIHwgMiB8IDEwMgorIDMgfCAzIHwgMTAzCisgNCB8 IDQgfCAxMDQKKygzIHJvd3MpCisKKy0tIEZ1bmN0aW9uIFJURSBpcyByZXN0cmljdGVkLCBzaGlw cGFibGUgY29uZGl0aW9ucworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSB1bm5lc3QoYXJyYXlbMiwgMywgNF0pIG4sIHJlbW90ZV90YmwgciBXSEVSRSByLmEgPSBu IGFuZCBuID4gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRm9yZWlnbiBTY2Fu CisgICBPdXRwdXQ6IG4ubiwgci5hLCByLmIKKyAgIFJlbGF0aW9uczogKEZ1bmN0aW9uIG4pIElO TkVSIEpPSU4gKHB1YmxpYy5yZW1vdGVfdGJsIHIpCisgICBSZW1vdGUgU1FMOiBTRUxFQ1QgZjEu YzEsIHIyLmEsIHIyLmIgRlJPTSAodW5uZXN0KCd7MiwzLDR9Jzo6aW50ZWdlcltdKSBmMShjMSkg SU5ORVIgSk9JTiBwdWJsaWMuYmFzZV90YmxfZm4gcjIgT04gKCgoZjEuYzEgPSByMi5hKSkgQU5E ICgoZjEuYzEgPiAzKSkpKQorKDQgcm93cykKKworU0VMRUNUICogRlJPTSB1bm5lc3QoYXJyYXlb MiwgMywgNF0pIG4sIHJlbW90ZV90YmwgcgorV0hFUkUgci5hID0gbiBhbmQgbiA+IDMgT1JERVIg Qlkgci5hOworIG4gfCBhIHwgIGIgIAorLS0tKy0tLSstLS0tLQorIDQgfCA0IHwgMTA0CisoMSBy b3cpCisKKy0tIEZ1bmN0aW9uIFJURSBpcyByZXN0cmljdGVkLCBub25zaGlwcGFibGUgY29uZGl0 aW9ucworQ1JFQVRFIEZVTkNUSU9OIGZfbG9jYWwoaW50KSBSRVRVUk5TIGludCBBUyAkJAorQkVH SU4KK1JFVFVSTiAkMTsKK0VORAorJCQgTEFOR1VBR0UgcGxwZ3NxbDsKK0VYUExBSU4gKFZFUkJP U0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdW5uZXN0KGFycmF5WzIsIDMsIDRdKSBuLCBy ZW1vdGVfdGJsIHIgV0hFUkUgci5hID0gbiBhbmQgbiA+IGZfbG9jYWwoMyk7CisgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoIEpvaW4KKyAgIE91dHB1dDogbi5uLCByLmEsIHIuYgorICAgSGFzaCBDb25kOiAoci5hID0g bi5uKQorICAgLT4gIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMucmVtb3RlX3RibCByCisgICAgICAg ICBPdXRwdXQ6IHIuYSwgci5iCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiBGUk9N IHB1YmxpYy5iYXNlX3RibF9mbgorICAgLT4gIEhhc2gKKyAgICAgICAgIE91dHB1dDogbi5uCisg ICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9nLnVubmVzdCBuCisgICAgICAg ICAgICAgICBPdXRwdXQ6IG4ubgorICAgICAgICAgICAgICAgRnVuY3Rpb24gQ2FsbDogdW5uZXN0 KCd7MiwzLDR9Jzo6aW50ZWdlcltdKQorICAgICAgICAgICAgICAgRmlsdGVyOiAobi5uID4gZl9s b2NhbCgzKSkKKygxMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHVubmVzdChhcnJheVsyLCAzLCA0 XSkgbiwgcmVtb3RlX3RibCByCitXSEVSRSByLmEgPSBuIGFuZCBuID4gZl9sb2NhbCgzKSBPUkRF UiBCWSByLmE7CisgbiB8IGEgfCAgYiAgCistLS0rLS0tKy0tLS0tCisgNCB8IDQgfCAxMDQKKygx IHJvdykKKworRFJPUCBGVU5DVElPTiBmX2xvY2FsKGludCk7CistLSBBIGZ1bmN0aW9uIHJldHVy bmluZyByZWNvcmQgKGNvbXBvc2l0ZSkgaXMgZm9yYmlkZGVuOyBwdXNoaW5nIGl0CistLSB3b3Vs ZCB5aWVsZCBhIHJlbW90ZSAiY29sdW1uIGRlZmluaXRpb24gbGlzdCBpcyByZXF1aXJlZCIgZXJy b3IuCistLSBmdW5jdGlvbl9ydGVfcHVzaGRvd25fb2soKSByZWplY3RzIGl0IHZpYSBUWVBFRlVO Q19TQ0FMQVIuCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmX3JldF9yZWNvcmQoKSBSRVRV Uk5TIHJlY29yZCBBUyAkJAorICBTRUxFQ1QgKDEsIDIpOjpyZWNvcmQKKyQkIExBTkdVQUdFIFNR TCBJTU1VVEFCTEU7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgcyBGUk9N IHJlbW90ZV90YmwgcnQsIGZfcmV0X3JlY29yZCgpIEFTIHMoYSBpbnQsIGIgaW50KQorV0hFUkUg cy5hID0gcnQuYTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBPdXRwdXQ6IHMuKgorICAgSGFzaCBDb25kOiAocnQu YSA9IHMuYSkKKyAgIC0+ICBGb3JlaWduIFNjYW4gb24gcHVibGljLnJlbW90ZV90YmwgcnQKKyAg ICAgICAgIE91dHB1dDogcnQuYSwgcnQuYgorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEg RlJPTSBwdWJsaWMuYmFzZV90YmxfZm4KKyAgIC0+ICBIYXNoCisgICAgICAgICBPdXRwdXQ6IHMu Kiwgcy5hCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBwdWJsaWMuZl9yZXRfcmVjb3Jk IHMKKyAgICAgICAgICAgICAgIE91dHB1dDogcy4qLCBzLmEKKyAgICAgICAgICAgICAgIEZ1bmN0 aW9uIENhbGw6IGZfcmV0X3JlY29yZCgpCisoMTEgcm93cykKKworRFJPUCBGVU5DVElPTiBmX3Jl dF9yZWNvcmQoKTsKKy0tIFVQREFURSAuLi4gRlJPTSB1bm5lc3QoKSB3aXRoIGEgY29tcGxleCBl bGVtZW50IHR5cGU7IGFyZWEoYm94KQorLS0geWllbGRzIHRoZSB2YWx1ZSB0byBtYXRjaC4gIFRo ZSBsb2NraW5nIG1hY2hpbmVyeSBmb3IgdGhlCistLSBub24tcmVsYXRpb24gUlRFIGdlbmVyYXRl cyBhIHdob2xlLXJvdyBWYXIgdGhhdCBkZXBhcnNlQ29sdW1uUmVmCistLSBlbWl0cyBhcyBST1co ZjxydGk+LmMxLCAuLi4pLgorVVBEQVRFIHJlbW90ZV90YmwgciBTRVQgYiA9IDk5OQorRlJPTSB1 bm5lc3QoYXJyYXlbYm94ICcoKDIsMyksKC0yLC0zKSknXSkgQVMgdChieCkKK1dIRVJFIHIuYSA9 IGFyZWEodC5ieCk7CitTRUxFQ1QgKiBGUk9NIHJlbW90ZV90YmwgV0hFUkUgYSBJTiAoMjMsIDI0 LCAyNSkgT1JERVIgQlkgYTsKKyBhICB8ICBiICAKKy0tLS0rLS0tLS0KKyAyMyB8IDEyMworIDI0 IHwgOTk5CisgMjUgfCAxMjUKKygzIHJvd3MpCisKKy0tIFRoZSBzYW1lIHNoYXBlIHdpdGggQ0FT RSBhbmQgUkVUVVJOSU5HOyBleGVyY2lzZXMgdGhlIERpcmVjdE1vZGlmeQorLS0gcGF0aCBhbmQg dGhlIGV4ZWN1dG9yJ3MgdHVwbGUtZGVzYyByZWNvbnN0cnVjdGlvbi4KK1VQREFURSByZW1vdGVf dGJsIHIKKyAgIFNFVCBiID0gQ0FTRSBXSEVOIHJhbmRvbSgpID49IDAgVEhFTiA1IEVMU0UgMCBF TkQKKyAgRlJPTSB1bm5lc3QoYXJyYXlbYm94ICcoKDIsMyksKC0yLC0zKSknXSkgQVMgdChieCkK KyBXSEVSRSByLmEgPSBhcmVhKHQuYngpIFJFVFVSTklORyBhLCBiOworIGEgIHwgYiAKKy0tLS0r LS0tCisgMjQgfCA1CisoMSByb3cpCisKKy0tIFJFVFVSTklORyBhIHdob2xlLXJvdyByZWZlcmVu Y2UgdG8gdGhlIGZ1bmN0aW9uIFJURS4gIFdpdGhvdXQgdGhlCistLSBwZXItUlRFIGZ1bmN0aW9u IG1ldGFkYXRhIGJlaW5nIHByZXNlcnZlZCBvbiB0aGUgRGlyZWN0TW9kaWZ5IHBhdGgKKy0tIChG ZHdEaXJlY3RNb2RpZnlQcml2YXRlRnVuY3Rpb25zIC8gRmR3RGlyZWN0TW9kaWZ5UHJpdmF0ZU1p blJUSW5kZXgpLAorLS0gdGhpcyB3b3VsZCBmYWlsIHdpdGggImlucHV0IG9mIGFub255bW91cyBj b21wb3NpdGUgdHlwZXMgaXMgbm90CistLSBpbXBsZW1lbnRlZCIuCitVUERBVEUgcmVtb3RlX3Ri bCByIFNFVCBiID0gNworICBGUk9NIHVubmVzdChhcnJheVtib3ggJygoMiwzKSwoLTIsLTMpKSdd LAorICAgICAgICAgICAgICBhcnJheVtpbnQgJzEnXSkgQVMgdChieCwgaSkKKyBXSEVSRSByLmEg PSBhcmVhKHQuYngpIFJFVFVSTklORyBhLCBiLCB0OworIGEgIHwgYiB8ICAgICAgICAgIHQgICAg ICAgICAgCistLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAyNCB8IDcgfCAoIigyLDMp LCgtMiwtMykiLDEpCisoMSByb3cpCisKKy0tIFJPV1MgRlJPTSAoLi4uKSB3aXRoIHNldmVyYWwg ZnVuY3Rpb25zLiAgRm9yY2UgcHVzaGRvd24gYmVjYXVzZSB0aGUKKy0tIGNvc3QgbW9kZWwgb3Ro ZXJ3aXNlIHBpY2tzIGEgbG9jYWwgcGxhbi4KK1NFVCBlbmFibGVfaGFzaGpvaW4gPSBvZmY7CitT RVQgZW5hYmxlX21lcmdlam9pbiA9IG9mZjsKK1NFVCBlbmFibGVfbmVzdGxvb3AgPSBvZmY7CitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1Qgci5hLCB0Lm4sIHQucworICBGUk9N IHJlbW90ZV90YmwgciwgUk9XUyBGUk9NICh1bm5lc3QoYXJyYXlbMywgNiwgOV0pLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMTEsIDEzKSkgQVMgdChu LCBzKQorIFdIRVJFIHIuYSA9IHQubiBPUkRFUiBCWSByLmE7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogci5hLCB0Lm4sIHQucworICAgU29ydCBL ZXk6IHIuYQorICAgLT4gIEZvcmVpZ24gU2NhbgorICAgICAgICAgT3V0cHV0OiByLmEsIHQubiwg dC5zCisgICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMucmVtb3RlX3RibCByKSBJTk5FUiBKT0lO IChGdW5jdGlvbiB0KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHIxLmEsIGYyLmMxLCBm Mi5jMiBGUk9NIChwdWJsaWMuYmFzZV90YmxfZm4gcjEgSU5ORVIgSk9JTiBST1dTIEZST00gKHVu bmVzdCgnezMsNiw5fSc6OmludGVnZXJbXSksIGdlbmVyYXRlX3NlcmllcygxMSwgMTMpKSBmMihj MSwgYzIpIE9OICgoKHIxLmEgPSBmMi5jMSkpKSkKKyg3IHJvd3MpCisKK1NFTEVDVCByLmEsIHQu biwgdC5zCisgIEZST00gcmVtb3RlX3RibCByLCBST1dTIEZST00gKHVubmVzdChhcnJheVszLCA2 LCA5XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX3Nlcmllcygx MSwgMTMpKSBBUyB0KG4sIHMpCisgV0hFUkUgci5hID0gdC5uIE9SREVSIEJZIHIuYTsKKyBhIHwg biB8IHMgIAorLS0tKy0tLSstLS0tCisgMyB8IDMgfCAxMQorIDYgfCA2IHwgMTIKKyA5IHwgOSB8 IDEzCisoMyByb3dzKQorCistLSBXaG9sZS1yb3cgVmFyIG9uIHRoZSBhYnNvcmJlZCBmdW5jdGlv biBzaWRlIChlLmcuIHZpYSBhIGNhc3QgdG8KKy0tIHRleHQpLiAgRXhlcmNpc2VzIGJvdGggZGVw YXJzZUNvbHVtblJlZiB3aG9sZS1yb3cgYnJhbmNoIGFuZCB0aGUKKy0tIGdldF90dXBkZXNjX2Zv cl9qb2luX3NjYW5fdHVwbGVzKCkgUlRFX0ZVTkNUSU9OIG1ldGFkYXRhIHBhdGguCitFWFBMQUlO IChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDo6dGV4dCwgci5hCisgIEZST00gcmVtb3Rl X3RibCByLCBST1dTIEZST00gKHVubmVzdChhcnJheVszLCA2LCA5XSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX3NlcmllcygxMSwgMTMpKSBBUyB0KG4sIHMpCisg V0hFUkUgci5hID0gdC5uIE9SREVSIEJZIHIuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0Cisg ICBPdXRwdXQ6ICgodC4qKTo6dGV4dCksIHIuYQorICAgU29ydCBLZXk6IHIuYQorICAgLT4gIEZv cmVpZ24gU2NhbgorICAgICAgICAgT3V0cHV0OiAodC4qKTo6dGV4dCwgci5hCisgICAgICAgICBS ZWxhdGlvbnM6IChwdWJsaWMucmVtb3RlX3RibCByKSBJTk5FUiBKT0lOIChGdW5jdGlvbiB0KQor ICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIENBU0UgV0hFTiAoZjIuKik6OnRleHQgSVMgTk9U IE5VTEwgVEhFTiBST1coZjIuYzEsIGYyLmMyKSBFTkQsIHIxLmEgRlJPTSAocHVibGljLmJhc2Vf dGJsX2ZuIHIxIElOTkVSIEpPSU4gUk9XUyBGUk9NICh1bm5lc3QoJ3szLDYsOX0nOjppbnRlZ2Vy W10pLCBnZW5lcmF0ZV9zZXJpZXMoMTEsIDEzKSkgZjIoYzEsIGMyKSBPTiAoKChyMS5hID0gZjIu YzEpKSkpCisoNyByb3dzKQorCitTRUxFQ1QgdDo6dGV4dCwgci5hCisgIEZST00gcmVtb3RlX3Ri bCByLCBST1dTIEZST00gKHVubmVzdChhcnJheVszLCA2LCA5XSksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdlbmVyYXRlX3NlcmllcygxMSwgMTMpKSBBUyB0KG4sIHMpCisgV0hF UkUgci5hID0gdC5uIE9SREVSIEJZIHIuYTsKKyAgIHQgICAgfCBhIAorLS0tLS0tLS0rLS0tCisg KDMsMTEpIHwgMworICg2LDEyKSB8IDYKKyAoOSwxMykgfCA5CisoMyByb3dzKQorCistLSBDaGVj ayB3aG9sZS1yb3cgVmFyIHJlcHJlc2VudGVkIGJ5IGZ1bmN0aW9uIG9uIHRoZSBudWxsYWJsZQor LS0gbGVmdCBqb2luIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB1 LCBmdDUuYzEsIGZ0NS5jMiwgZnQ0LmMxLCBmdDQuYzIgRlJPTSBmdDUgTEVGVCBKT0lOCisoZnQ0 IEpPSU4gdW5uZXN0KGFycmF5WzEsMl0sIGFycmF5WzMsNF0pIGFzIHUgKHUxLCB1MikgT04gZnQ0 LmMxPXUxKQorT04gZnQ1LmMxID0gZnQ0LmMxIFdIRVJFIGZ0NS5jMSA8IDEwIE9SREVSIEJZIGZ0 NS5jMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEZvcmVpZ24gU2NhbgorICAgT3V0cHV0OiB1LiosIGZ0NS5j MSwgZnQ1LmMyLCBmdDQuYzEsIGZ0NC5jMgorICAgUmVsYXRpb25zOiAocHVibGljLmZ0NSkgTEVG VCBKT0lOICgocHVibGljLmZ0NCkgSU5ORVIgSk9JTiAoRnVuY3Rpb24gdSkpCisgICBSZW1vdGUg U1FMOiBTRUxFQ1QgQ0FTRSBXSEVOIChmMy4qKTo6dGV4dCBJUyBOT1QgTlVMTCBUSEVOIFJPVyhm My5jMSwgZjMuYzIpIEVORCwgcjEuYzEsIHIxLmMyLCByMi5jMSwgcjIuYzIgRlJPTSAoIlMgMSIu IlQgNCIgcjEgTEVGVCBKT0lOICgiUyAxIi4iVCAzIiByMiBJTk5FUiBKT0lOIFJPV1MgRlJPTSAo dW5uZXN0KCd7MSwyfSc6OmludGVnZXJbXSksIHVubmVzdCgnezMsNH0nOjppbnRlZ2VyW10pKSBm MyhjMSwgYzIpIE9OICgoKHIyLmMxID0gZjMuYzEpKSkpIE9OICgoKHIxLmMxID0gcjIuYzEpKSkp IFdIRVJFICgocjEuYzEgPCAxMCkpIE9SREVSIEJZIHIxLmMxIEFTQyBOVUxMUyBMQVNUCisoNCBy b3dzKQorCitTRUxFQ1QgdSwgZnQ1LmMxLCBmdDUuYzIsIGZ0NC5jMSwgZnQ0LmMyIEZST00gZnQ1 IExFRlQgSk9JTgorKGZ0NCBKT0lOIHVubmVzdChhcnJheVsxLDJdLCBhcnJheVszLDRdKSBhcyB1 ICh1MSwgdTIpIE9OIGZ0NC5jMT11MSkKK09OIGZ0NS5jMSA9IGZ0NC5jMSBXSEVSRSBmdDUuYzEg PCAxMCBPUkRFUiBCWSBmdDUuYzE7CisgdSB8IGMxIHwgYzIgfCBjMSB8IGMyIAorLS0tKy0tLS0r LS0tLSstLS0tKy0tLS0KKyAgIHwgIDMgfCAgNCB8ICAgIHwgICAKKyAgIHwgIDYgfCAgNyB8ICAg IHwgICAKKyAgIHwgIDkgfCAxMCB8ICAgIHwgICAKKygzIHJvd3MpCisKK1JFU0VUIGVuYWJsZV9o YXNoam9pbjsKK1JFU0VUIGVuYWJsZV9tZXJnZWpvaW47CitSRVNFVCBlbmFibGVfbmVzdGxvb3A7 CistLSBDaGVjayBmb3JlaWduIGpvaW4gd2l0aCBwYXJhbWV0ZXJpemVkIGZ1bmN0aW9uCitDUkVB VEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmKGludCkgUkVUVVJOUyBTRVRPRiBpbnQgTEFOR1VBR0Ug cGxwZ3NxbCBST1dTIDEwIEFTICdCRUdJTiBSRVRVUk4gUVVFUlkgU0VMRUNUIGdlbmVyYXRlX3Nl cmllcygxLCQxKSA7IEVORCcgSU1NVVRBQkxFOworQUxURVIgRVhURU5TSU9OIHBvc3RncmVzX2Zk dyBBREQgRlVOQ1RJT04gZihJTlRFR0VSKTsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1dJVEggcyBBUyBNQVRFUklBTElaRUQgKFNFTEVDVCByMS4qIEZST00gcmVtb3RlX3RibCByMQor Sk9JTiBMQVRFUkFMCisoU0VMRUNUIHIyLmEgRlJPTSByZW1vdGVfdGJsIHIyLCBmKHIxLmEpIExJ TUlUIDEpIHMKK09OIHRydWUpCitTRUxFQ1QgKiBGUk9NIHMgT1JERVIgQlkgMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBPdXRwdXQ6 IHMuYSwgcy5iCisgICBTb3J0IEtleTogcy5hCisgICBDVEUgcworICAgICAtPiAgTmVzdGVkIExv b3AKKyAgICAgICAgICAgT3V0cHV0OiByMS5hLCByMS5iCisgICAgICAgICAgIC0+ICBGb3JlaWdu IFNjYW4gb24gcHVibGljLnJlbW90ZV90YmwgcjEKKyAgICAgICAgICAgICAgICAgT3V0cHV0OiBy MS5hLCByMS5iCisgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiIEZST00g cHVibGljLmJhc2VfdGJsX2ZuCisgICAgICAgICAgIC0+ICBGb3JlaWduIFNjYW4KKyAgICAgICAg ICAgICAgICAgT3V0cHV0OiBOVUxMOjppbnRlZ2VyCisgICAgICAgICAgICAgICAgIFJlbGF0aW9u czogKHB1YmxpYy5yZW1vdGVfdGJsIHIyKSBJTk5FUiBKT0lOIChGdW5jdGlvbiBmKQorICAgICAg ICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgTlVMTCBGUk9NIChwdWJsaWMuYmFzZV90Ymxf Zm4gcjEgSU5ORVIgSk9JTiBwdWJsaWMuZigkMTo6aW50ZWdlcikgZjIoYzEpIE9OIChUUlVFKSkg TElNSVQgMTo6YmlnaW50CisgICAtPiAgQ1RFIFNjYW4gb24gcworICAgICAgICAgT3V0cHV0OiBz LmEsIHMuYgorKDE1IHJvd3MpCisKK1dJVEggcyBBUyBNQVRFUklBTElaRUQgKFNFTEVDVCByMS4q IEZST00gcmVtb3RlX3RibCByMQorSk9JTiBMQVRFUkFMCisoU0VMRUNUIHIyLmEgRlJPTSByZW1v dGVfdGJsIHIyLCBmKHIxLmEpIExJTUlUIDEpIHMKK09OIHRydWUpCitTRUxFQ1QgKiBGUk9NIHMg T1JERVIgQlkgMTsKKyBhICB8ICBiICAKKy0tLS0rLS0tLS0KKyAgMSB8IDEwMQorICAyIHwgMTAy CisgIDMgfCAxMDMKKyAgNCB8IDEwNAorICA1IHwgMTA1CisgIDYgfCAxMDYKKyAgNyB8IDEwNwor ICA4IHwgMTA4CisgIDkgfCAxMDkKKyAxMCB8IDExMAorIDExIHwgMTExCisgMTIgfCAxMTIKKyAx MyB8IDExMworIDE0IHwgMTE0CisgMTUgfCAxMTUKKyAxNiB8IDExNgorIDE3IHwgMTE3CisgMTgg fCAxMTgKKyAxOSB8IDExOQorIDIwIHwgMTIwCisgMjEgfCAxMjEKKyAyMiB8IDEyMgorIDIzIHwg MTIzCisgMjQgfCAgIDcKKyAyNSB8IDEyNQorIDI2IHwgMTI2CisgMjcgfCAxMjcKKyAyOCB8IDEy OAorIDI5IHwgMTI5CisgMzAgfCAxMzAKKygzMCByb3dzKQorCitBTFRFUiBFWFRFTlNJT04gcG9z dGdyZXNfZmR3IERST1AgRlVOQ1RJT04gZihJTlRFR0VSKTsKK0RST1AgRlVOQ1RJT04gZihJTlRF R0VSKTsKKy0tIFZvbGF0aWxlIGZ1bmN0aW9uIGluIFJPV1MgRlJPTSBkaXNxdWFsaWZpZXMgdGhl IHdob2xlIFJURS4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCByLmEgRlJP TSByZW1vdGVfdGJsIHIsCisgICAgICAgICAgICAgICAgUk9XUyBGUk9NICh1bm5lc3QoYXJyYXlb MywgNiwgOV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfc2VyaWVzKDEs IDQgKyAocmFuZG9tKCkgKiAwKTo6aW50KSkgQVMgdChuLCBzKQorIFdIRVJFIHIuYSA9IHQubjsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAg T3V0cHV0OiByLmEKKyAgIE1lcmdlIENvbmQ6ICh0Lm4gPSByLmEpCisgICAtPiAgU29ydAorICAg ICAgICAgT3V0cHV0OiB0Lm4KKyAgICAgICAgIFNvcnQgS2V5OiB0Lm4KKyAgICAgICAgIC0+ICBG dW5jdGlvbiBTY2FuIG9uIHQKKyAgICAgICAgICAgICAgIE91dHB1dDogdC5uCisgICAgICAgICAg ICAgICBGdW5jdGlvbiBDYWxsOiB1bm5lc3QoJ3szLDYsOX0nOjppbnRlZ2VyW10pLCBnZW5lcmF0 ZV9zZXJpZXMoMSwgKDQgKyAoKHJhbmRvbSgpICogJzAnOjpkb3VibGUgcHJlY2lzaW9uKSk6Omlu dGVnZXIpKQorICAgLT4gIFNvcnQKKyAgICAgICAgIE91dHB1dDogci5hCisgICAgICAgICBTb3J0 IEtleTogci5hCisgICAgICAgICAtPiAgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5yZW1vdGVfdGJs IHIKKyAgICAgICAgICAgICAgIE91dHB1dDogci5hCisgICAgICAgICAgICAgICBSZW1vdGUgU1FM OiBTRUxFQ1QgYSBGUk9NIHB1YmxpYy5iYXNlX3RibF9mbgorKDE1IHJvd3MpCisKKy0tIExBVEVS QUwgZnVuY3Rpb24gcmVmZXJlbmNpbmcgYSBmb3JlaWduIFZhcjogcG9zdGdyZXNfZmR3J3MKKy0t IGZvcmVpZ24tam9pbiBwdXNoZG93biByZWplY3RzIHRoaXMgdmlhIHRoZSBqb2lucmVsLT5sYXRl cmFsX3JlbGlkcworLS0gY2hlY2s7IHRoZSBwbGFuIGlzIHRoZXJlZm9yZSBhIGxvY2FsIE5lc3RM b29wICsgRnVuY3Rpb25TY2FuLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNU IHIuYSwgdC54IEZST00gcmVtb3RlX3RibCByLCBMQVRFUkFMIHVubmVzdChhcnJheVtyLmFdKSBB UyB0KHgpCitXSEVSRSByLmEgPD0gMyBPUkRFUiBCWSByLmE7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIE91dHB1dDogci5hLCB0LngKKyAgIC0+ICBGb3JlaWdu IFNjYW4gb24gcHVibGljLnJlbW90ZV90YmwgcgorICAgICAgICAgT3V0cHV0OiByLmEsIHIuYgor ICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEgRlJPTSBwdWJsaWMuYmFzZV90YmxfZm4gV0hF UkUgKChhIDw9IDMpKSBPUkRFUiBCWSBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgRnVuY3Rpb24g U2NhbiBvbiBwZ19jYXRhbG9nLnVubmVzdCB0CisgICAgICAgICBPdXRwdXQ6IHQueAorICAgICAg ICAgRnVuY3Rpb24gQ2FsbDogdW5uZXN0KEFSUkFZW3IuYV0pCisoOCByb3dzKQorCistLSBPdXRl ciBqb2lucyB3aXRoIHRoZSBmdW5jdGlvbiBSVEUgYXJlIG5vdCBwdXNoZWQgZG93biAob25seSBJ Tk5FUgorLS0gam9pbnMgYXJlIHN1cHBvcnRlZCBieSBmdW5jdGlvbl9ydGVfcHVzaGRvd25fb2so KSkuCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1Qgci5hLCB0Lm4gRlJPTSBy ZW1vdGVfdGJsIHIKKyAgICAgTEVGVCBKT0lOIHVubmVzdChhcnJheVsxLCAyLCAzXSkgQVMgdChu KSBPTiByLmEgPSB0Lm4KKyBXSEVSRSByLmEgPD0gNSBPUkRFUiBCWSByLmE7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgTGVmdCBKb2luCisgICBPdXRwdXQ6IHIuYSwgdC5uCisg ICBNZXJnZSBDb25kOiAoci5hID0gdC5uKQorICAgLT4gIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMu cmVtb3RlX3RibCByCisgICAgICAgICBPdXRwdXQ6IHIuYSwgci5iCisgICAgICAgICBSZW1vdGUg U1FMOiBTRUxFQ1QgYSBGUk9NIHB1YmxpYy5iYXNlX3RibF9mbiBXSEVSRSAoKGEgPD0gNSkpIE9S REVSIEJZIGEgQVNDIE5VTExTIExBU1QKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQu bgorICAgICAgICAgU29ydCBLZXk6IHQubgorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24g cGdfY2F0YWxvZy51bm5lc3QgdAorICAgICAgICAgICAgICAgT3V0cHV0OiB0Lm4KKyAgICAgICAg ICAgICAgIEZ1bmN0aW9uIENhbGw6IHVubmVzdCgnezEsMiwzfSc6OmludGVnZXJbXSkKKygxMiBy b3dzKQorCistLSBTRU1JIGpvaW4gKEVYSVNUUykgd2l0aCBhIGZ1bmN0aW9uIFJURSBpcyBhbHNv IG5vdCBwdXNoZWQgZG93bi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBy LmEgRlJPTSByZW1vdGVfdGJsIHIKKyBXSEVSRSBFWElTVFMgKFNFTEVDVCAxIEZST00gdW5uZXN0 KGFycmF5WzMsIDYsIDldKSBBUyB0KG4pIFdIRVJFIHQubiA9IHIuYSkKKyBPUkRFUiBCWSByLmE7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJn ZSBTZW1pIEpvaW4KKyAgIE91dHB1dDogci5hCisgICBNZXJnZSBDb25kOiAoci5hID0gdC5uKQor ICAgLT4gIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMucmVtb3RlX3RibCByCisgICAgICAgICBPdXRw dXQ6IHIuYSwgci5iCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSBGUk9NIHB1YmxpYy5i YXNlX3RibF9mbiBPUkRFUiBCWSBhIEFTQyBOVUxMUyBMQVNUCisgICAtPiAgU29ydAorICAgICAg ICAgT3V0cHV0OiB0Lm4KKyAgICAgICAgIFNvcnQgS2V5OiB0Lm4KKyAgICAgICAgIC0+ICBGdW5j dGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cudW5uZXN0IHQKKyAgICAgICAgICAgICAgIE91dHB1dDog dC5uCisgICAgICAgICAgICAgICBGdW5jdGlvbiBDYWxsOiB1bm5lc3QoJ3szLDYsOX0nOjppbnRl Z2VyW10pCisoMTIgcm93cykKKworRFJPUCBGT1JFSUdOIFRBQkxFIHJlbW90ZV90Ymw7CitEUk9Q IFRBQkxFIGJhc2VfdGJsX2ZuOwogLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIENoZWNrIHRoYXQgdXNlcmlk IHRvIHVzZSB3aGVuIHF1ZXJ5aW5nIHRoZSByZW1vdGUgdGFibGUgaXMgY29ycmVjdGx5CiAtLSBw cm9wYWdhdGVkIGludG8gZm9yZWlnbiByZWxzIHByZXNlbnQgaW4gc3VicXVlcmllcyB1bmRlciBh biBVTklPTiBBTEwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zk dy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggMGZmNGVjMjMx NjQuLmNkNzA0NmRiNDZkIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl c19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtMzEs NiArMzEsNyBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVz L25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9hcHBlbmRpbmZvLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL2NsYXVzZXMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvY29zdC5oIgogI2lu Y2x1ZGUgIm9wdGltaXplci9pbmhlcml0LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXpl ci5oIgpAQCAtODgsNiArODksMjIgQEAgZW51bSBGZHdTY2FuUHJpdmF0ZUluZGV4CiAJICogb2Yg am9pbiwgYWRkZWQgd2hlbiB0aGUgc2NhbiBpcyBqb2luCiAJICovCiAJRmR3U2NhblByaXZhdGVS ZWxhdGlvbnMsCisKKwkvKgorCSAqIExpc3Qgb2YgcGVyLVJURSBmdW5jdGlvbiBtZXRhZGF0YSwg aW5kZXhlZCBieSBiYXNlIFJUSSBvZmZzZXQuICBFYWNoCisJICogZWxlbWVudCBpcyBlaXRoZXIg TlVMTCAoZm9yIG5vbi1SVEVfRlVOQ1RJT04gcmVscyBpbiB0aGlzIHNjYW4pIG9yIGEKKwkgKiBs aXN0IG9mIHRocmVlLWVsZW1lbnQgbGlzdHMgKGZ1bmNpZCwgZnVuY3JldHR5cGUsIGZ1bmNjb2xs YXRpb24pIC0tIG9uZQorCSAqIGlubmVyIGxpc3QgcGVyIGZ1bmN0aW9uIGluIHRoZSBSVEUuICBB bGxvd3MgdGhlIGV4ZWN1dG9yIHRvIHJlYnVpbGQKKwkgKiBUdXBsZURlc2MgZW50cmllcyBmb3Ig d2hvbGUtcm93IHJlZmVyZW5jZXMgdG8gZnVuY3Rpb24gUlRFcy4KKwkgKi8KKwlGZHdTY2FuUHJp dmF0ZUZ1bmN0aW9ucywKKworCS8qCisJICogSW50ZWdlciBub2RlOiBtaW5pbXVtIGJhc2UgUlQg aW5kZXggY292ZXJlZCBieSB0aGUgc2NhbiwgdXNlZCB0bworCSAqIHRyYW5zbGF0ZSBzY2FuLWxv Y2FsIGluZGV4ZXMgdG8gZXN0YXRlLXJ0YWJsZSBpbmRleGVzIGFmdGVyIHNldHJlZnMuYworCSAq IGZsYXR0ZW5zIHJ0YWJsZXMuCisJICovCisJRmR3U2NhblByaXZhdGVNaW5SVEluZGV4LAogfTsK IAogLyoKQEAgLTEyNCw2ICsxNDEsMTEgQEAgZW51bSBGZHdNb2RpZnlQcml2YXRlSW5kZXgKICAq IDIpIEJvb2xlYW4gZmxhZyBzaG93aW5nIGlmIHRoZSByZW1vdGUgcXVlcnkgaGFzIGEgUkVUVVJO SU5HIGNsYXVzZQogICogMykgSW50ZWdlciBsaXN0IG9mIGF0dHJpYnV0ZSBudW1iZXJzIHJldHJp ZXZlZCBieSBSRVRVUk5JTkcsIGlmIGFueQogICogNCkgQm9vbGVhbiBmbGFnIHNob3dpbmcgaWYg d2Ugc2V0IHRoZSBjb21tYW5kIGVzX3Byb2Nlc3NlZAorICogNSkgUGVyLVJURSBmdW5jdGlvbiBt ZXRhZGF0YSAobWlycm9ycyBGZHdTY2FuUHJpdmF0ZUZ1bmN0aW9uczsgbGV0cworICogICAgdGhl IGV4ZWN1dG9yIHJlYnVpbGQgVHVwbGVEZXNjIGVudHJpZXMgZm9yIHdob2xlLXJvdyBWYXJzIG92 ZXIKKyAqICAgIGZ1bmN0aW9uIFJURXMgYWJzb3JiZWQgaW50byBhIGZvcmVpZ24gam9pbikKKyAq IDYpIEludGVnZXIgbm9kZTogbWluaW11bSBiYXNlIFJUIGluZGV4IG9mIHRoZSBzY2FuIChtaXJy b3JzCisgKiAgICBGZHdTY2FuUHJpdmF0ZU1pblJUSW5kZXgpCiAgKi8KIGVudW0gRmR3RGlyZWN0 TW9kaWZ5UHJpdmF0ZUluZGV4CiB7CkBAIC0xMzUsNiArMTU3LDEwIEBAIGVudW0gRmR3RGlyZWN0 TW9kaWZ5UHJpdmF0ZUluZGV4CiAJRmR3RGlyZWN0TW9kaWZ5UHJpdmF0ZVJldHJpZXZlZEF0dHJz LAogCS8qIHNldC1wcm9jZXNzZWQgZmxhZyAoYXMgYSBCb29sZWFuIG5vZGUpICovCiAJRmR3RGly ZWN0TW9kaWZ5UHJpdmF0ZVNldFByb2Nlc3NlZCwKKwkvKiBQZXItUlRFIGZ1bmN0aW9uIG1ldGFk YXRhLCBpbmRleGVkIGJ5IGJhc2UgUlRJIG9mZnNldCAqLworCUZkd0RpcmVjdE1vZGlmeVByaXZh dGVGdW5jdGlvbnMsCisJLyogSW50ZWdlciBub2RlOiBtaW5pbXVtIGJhc2UgUlQgaW5kZXggaW4g dGhlIHNjYW4gKi8KKwlGZHdEaXJlY3RNb2RpZnlQcml2YXRlTWluUlRJbmRleCwKIH07CiAKIC8q CkBAIC03NDAsNiArNzY2LDkgQEAgc3RhdGljIGJvb2wgZm9yZWlnbl9ncm91cGluZ19vayhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqZ3JvdXBlZF9yZWwsCiBzdGF0aWMgTGlzdCAqZ2V0 X3VzZWZ1bF9wYXRoa2V5c19mb3JfcmVsYXRpb24oUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJ CQkJCSAgUmVsT3B0SW5mbyAqcmVsKTsKIHN0YXRpYyBMaXN0ICpnZXRfdXNlZnVsX2Vjc19mb3Jf cmVsYXRpb24oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMgUmVs aWRzIGdldF9iYXNlX3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsK K3N0YXRpYyBpbnQJZ2V0X21pbl9iYXNlX3J0aShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsKTsKK3N0YXRpYyBMaXN0ICpnZXRfZnVuY3Rpb25zX2RhdGEoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCk7CiBzdGF0aWMgdm9pZCBhZGRfcGF0aHNfd2l0aF9wYXRoa2V5 c19mb3JfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJ CVBhdGggKmVwcV9wYXRoLCBMaXN0ICpyZXN0cmljdGxpc3QpOwogc3RhdGljIHZvaWQgYWRkX2Zv cmVpZ25fZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCkBAIC04OTMsNyArOTIyLDcg QEAgcG9zdGdyZXNHZXRGb3JlaWduUmVsU2l6ZShQbGFubmVySW5mbyAqcm9vdCwKIAkgKiBJZGVu dGlmeSB3aGljaCBiYXNlcmVzdHJpY3RpbmZvIGNsYXVzZXMgY2FuIGJlIHNlbnQgdG8gdGhlIHJl bW90ZQogCSAqIHNlcnZlciBhbmQgd2hpY2ggY2FuJ3QuCiAJICovCi0JY2xhc3NpZnlDb25kaXRp b25zKHJvb3QsIGJhc2VyZWwsIGJhc2VyZWwtPmJhc2VyZXN0cmljdGluZm8sCisJY2xhc3NpZnlD b25kaXRpb25zKHJvb3QsIGJhc2VyZWwsIGZwaW5mbywgYmFzZXJlbC0+YmFzZXJlc3RyaWN0aW5m bywKIAkJCQkJICAgJmZwaW5mby0+cmVtb3RlX2NvbmRzLCAmZnBpbmZvLT5sb2NhbF9jb25kcyk7 CiAKIAkvKgpAQCAtMTI5Nyw3ICsxMzI2LDcgQEAgcG9zdGdyZXNHZXRGb3JlaWduUGF0aHMoUGxh bm5lckluZm8gKnJvb3QsCiAJCQljb250aW51ZTsKIAogCQkvKiBTZWUgaWYgaXQgaXMgc2FmZSB0 byBzZW5kIHRvIHJlbW90ZSAqLwotCQlpZiAoIWlzX2ZvcmVpZ25fZXhwcihyb290LCBiYXNlcmVs LCByaW5mby0+Y2xhdXNlKSkKKwkJaWYgKCFpc19mb3JlaWduX2V4cHIocm9vdCwgYmFzZXJlbCwg ZnBpbmZvLCByaW5mby0+Y2xhdXNlKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIENhbGN1bGF0ZSBy ZXF1aXJlZCBvdXRlciByZWxzIGZvciB0aGUgcmVzdWx0aW5nIHBhdGggKi8KQEAgLTEzNzMsNyAr MTQwMiw3IEBAIHBvc3RncmVzR2V0Rm9yZWlnblBhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJ CQljb250aW51ZTsKIAogCQkJCS8qIFNlZSBpZiBpdCBpcyBzYWZlIHRvIHNlbmQgdG8gcmVtb3Rl ICovCi0JCQkJaWYgKCFpc19mb3JlaWduX2V4cHIocm9vdCwgYmFzZXJlbCwgcmluZm8tPmNsYXVz ZSkpCisJCQkJaWYgKCFpc19mb3JlaWduX2V4cHIocm9vdCwgYmFzZXJlbCwgZnBpbmZvLCByaW5m by0+Y2xhdXNlKSkKIAkJCQkJY29udGludWU7CiAKIAkJCQkvKiBDYWxjdWxhdGUgcmVxdWlyZWQg b3V0ZXIgcmVscyBmb3IgdGhlIHJlc3VsdGluZyBwYXRoICovCkBAIC0xNTEzLDcgKzE1NDIsNyBA QCBwb3N0Z3Jlc0dldEZvcmVpZ25QbGFuKFBsYW5uZXJJbmZvICpyb290LAogCQkJCXJlbW90ZV9l eHBycyA9IGxhcHBlbmQocmVtb3RlX2V4cHJzLCByaW5mby0+Y2xhdXNlKTsKIAkJCWVsc2UgaWYg KGxpc3RfbWVtYmVyX3B0cihmcGluZm8tPmxvY2FsX2NvbmRzLCByaW5mbykpCiAJCQkJbG9jYWxf ZXhwcnMgPSBsYXBwZW5kKGxvY2FsX2V4cHJzLCByaW5mby0+Y2xhdXNlKTsKLQkJCWVsc2UgaWYg KGlzX2ZvcmVpZ25fZXhwcihyb290LCBmb3JlaWducmVsLCByaW5mby0+Y2xhdXNlKSkKKwkJCWVs c2UgaWYgKGlzX2ZvcmVpZ25fZXhwcihyb290LCBmb3JlaWducmVsLCBmcGluZm8sIHJpbmZvLT5j bGF1c2UpKQogCQkJCXJlbW90ZV9leHBycyA9IGxhcHBlbmQocmVtb3RlX2V4cHJzLCByaW5mby0+ Y2xhdXNlKTsKIAkJCWVsc2UKIAkJCQlsb2NhbF9leHBycyA9IGxhcHBlbmQobG9jYWxfZXhwcnMs IHJpbmZvLT5jbGF1c2UpOwpAQCAtMTYzNCw5ICsxNjYzLDI2IEBAIHBvc3RncmVzR2V0Rm9yZWln blBsYW4oUGxhbm5lckluZm8gKnJvb3QsCiAJZmR3X3ByaXZhdGUgPSBsaXN0X21ha2UzKG1ha2VT dHJpbmcoc3FsLmRhdGEpLAogCQkJCQkJCSByZXRyaWV2ZWRfYXR0cnMsCiAJCQkJCQkJIG1ha2VJ bnRlZ2VyKGZwaW5mby0+ZmV0Y2hfc2l6ZSkpOworCisJLyoKKwkgKiBQb3NpdGlvbiBGZHdTY2Fu UHJpdmF0ZVJlbGF0aW9uczogZWl0aGVyIHRoZSBFWFBMQUlOIHJlbGF0aW9uIHN0cmluZworCSAq IChqb2lucy91cHBlciByZWxzKSBvciBhIE5VTEwgcGxhY2Vob2xkZXIsIHNvIHRoYXQgc3Vic2Vx dWVudCBpbmRleGVzCisJICogc3RheSB2YWxpZCBmb3IgdGhlIGJhc2UtcmVsIHNjYW4gY2FzZS4K KwkgKi8KIAlpZiAoSVNfSk9JTl9SRUwoZm9yZWlnbnJlbCkgfHwgSVNfVVBQRVJfUkVMKGZvcmVp Z25yZWwpKQogCQlmZHdfcHJpdmF0ZSA9IGxhcHBlbmQoZmR3X3ByaXZhdGUsCiAJCQkJCQkJICBt YWtlU3RyaW5nKGZwaW5mby0+cmVsYXRpb25fbmFtZSkpOworCWVsc2UKKwkJZmR3X3ByaXZhdGUg PSBsYXBwZW5kKGZkd19wcml2YXRlLCBOVUxMKTsKKworCS8qCisJICogRmR3U2NhblByaXZhdGVG dW5jdGlvbnMgLyBGZHdTY2FuUHJpdmF0ZU1pblJUSW5kZXggY2FycnkgdGhlIG1ldGFkYXRhCisJ ICogdGhlIGV4ZWN1dG9yIG5lZWRzIHRvIHJlYnVpbGQgVHVwbGVEZXNjIGVudHJpZXMgZm9yIHdo b2xlLXJvdyBWYXJzCisJICogcG9pbnRpbmcgYXQgUlRFX0ZVTkNUSU9OIHJlbHMgYWJzb3JiZWQg aW50byB0aGUgZm9yZWlnbiBzY2FuLgorCSAqLworCWZkd19wcml2YXRlID0gbGFwcGVuZChmZHdf cHJpdmF0ZSwgZ2V0X2Z1bmN0aW9uc19kYXRhKHJvb3QsIGZvcmVpZ25yZWwpKTsKKwlmZHdfcHJp dmF0ZSA9IGxhcHBlbmQoZmR3X3ByaXZhdGUsCisJCQkJCQkgIG1ha2VJbnRlZ2VyKGdldF9taW5f YmFzZV9ydGkocm9vdCwgZm9yZWlnbnJlbCkpKTsKIAogCS8qCiAJICogQ3JlYXRlIHRoZSBGb3Jl aWduU2NhbiBub2RlIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24uCkBAIC0xNjU3LDkgKzE3MDMsMTUg QEAgcG9zdGdyZXNHZXRGb3JlaWduUGxhbihQbGFubmVySW5mbyAqcm9vdCwKIAogLyoKICAqIENv bnN0cnVjdCBhIHR1cGxlIGRlc2NyaXB0b3IgZm9yIHRoZSBzY2FuIHR1cGxlcyBoYW5kbGVkIGJ5 IGEgZm9yZWlnbiBqb2luLgorICoKKyAqICdydGZ1bmNkYXRhJyBpcyB0aGUgRmR3U2NhblByaXZh dGVGdW5jdGlvbnMgbGlzdCBzYXZlZCBhdCBwbGFuIHRpbWUsIGFuZAorICogJ3J0b2Zmc2V0JyBp cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBleGVjdXRvcidzIFJUIGluZGV4ZXMgYW5kIHRo ZQorICogc2Nhbi1sb2NhbCBSVCBpbmRleGVzIGNhcHR1cmVkIGluIHRoYXQgbGlzdC4gIEJvdGgg bWF5IGJlIDAvTklMIHdoZW4gdGhlCisgKiBzY2FuIGhhcyBubyBSVEVfRlVOQ1RJT04gZGVwZW5k ZW50cy4KICAqLwogc3RhdGljIFR1cGxlRGVzYwotZ2V0X3R1cGRlc2NfZm9yX2pvaW5fc2Nhbl90 dXBsZXMoRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSkKK2dldF90dXBkZXNjX2Zvcl9qb2luX3NjYW5f dHVwbGVzKEZvcmVpZ25TY2FuU3RhdGUgKm5vZGUsCisJCQkJCQkJCSBMaXN0ICpydGZ1bmNkYXRh LCBpbnQgcnRvZmZzZXQpCiB7CiAJRm9yZWlnblNjYW4gKmZzcGxhbiA9IChGb3JlaWduU2NhbiAq KSBub2RlLT5zcy5wcy5wbGFuOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gbm9kZS0+c3MucHMuc3Rh dGU7CkBAIC0xNjk1LDEzICsxNzQ3LDY4IEBAIGdldF90dXBkZXNjX2Zvcl9qb2luX3NjYW5fdHVw bGVzKEZvcmVpZ25TY2FuU3RhdGUgKm5vZGUpCiAJCWlmICghSXNBKHZhciwgVmFyKSB8fCB2YXIt PnZhcmF0dG5vICE9IDApCiAJCQljb250aW51ZTsKIAkJcnRlID0gbGlzdF9udGgoZXN0YXRlLT5l c19yYW5nZV90YWJsZSwgdmFyLT52YXJubyAtIDEpOwotCQlpZiAocnRlLT5ydGVraW5kICE9IFJU RV9SRUxBVElPTikKLQkJCWNvbnRpbnVlOwotCQlyZWx0eXBlID0gZ2V0X3JlbF90eXBlX2lkKHJ0 ZS0+cmVsaWQpOwotCQlpZiAoIU9pZElzVmFsaWQocmVsdHlwZSkpCi0JCQljb250aW51ZTsKLQkJ YXR0LT5hdHR0eXBpZCA9IHJlbHR5cGU7Ci0JCS8qIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBh bnl0aGluZyBlbHNlICovCisKKwkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pCisJ CXsKKwkJCXJlbHR5cGUgPSBnZXRfcmVsX3R5cGVfaWQocnRlLT5yZWxpZCk7CisJCQlpZiAoIU9p ZElzVmFsaWQocmVsdHlwZSkpCisJCQkJY29udGludWU7CisJCQlhdHQtPmF0dHR5cGlkID0gcmVs dHlwZTsKKwkJCS8qIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBlbHNlICovCisJ CX0KKwkJZWxzZSBpZiAocnRlLT5ydGVraW5kID09IFJURV9GVU5DVElPTikKKwkJeworCQkJLyoK KwkJCSAqIEEgd2hvbGUtcm93IFZhciBwb2ludHMgYXQgYSBGVU5DVElPTiBSVEUgYWJzb3JiZWQg aW50byB0aGUKKwkJCSAqIGZvcmVpZ24gam9pbi4gIFN5bnRoZXNpemUgYW4gYW5vbnltb3VzIGNv bXBvc2l0ZSBUdXBsZURlc2MgZnJvbQorCQkJICogdGhlIHBlci1mdW5jdGlvbiByZXR1cm4tdHlw ZSBtZXRhZGF0YSB3ZSBzYXZlZCBhdCBwbGFuIHRpbWU7CisJCQkgKiB0aGUgZGVwYXJzZXIgZW1p dHMgdGhlc2UgYXMgUk9XKGY8cnRpPi5jMSwgZjxydGk+LmMyLCAuLi4pLgorCQkJICoKKwkJCSAq IEZvciBhbiB1cHBlcnJlbCBzY2FuICh0aGUgb25seSBwYXRoIHRoYXQgcmVhY2hlcyBoZXJlKQor CQkJICogcG9zdGdyZXNHZXRGb3JlaWduUGxhbiBhbHdheXMgYnVpbGRzIHJ0ZnVuY2RhdGEgdmlh CisJCQkgKiBnZXRfZnVuY3Rpb25zX2RhdGEoKSwgc28gaXQgaXMgbmV2ZXIgTklMOyB0aGUgcGVy LVJURSBzbG90IGZvcgorCQkJICogdGhlIGZ1bmN0aW9uIFJURSByZWZlcmVuY2VkIGJ5IHRoaXMg VmFyIG11c3QgbGlrZXdpc2UgYmUKKwkJCSAqIHBvcHVsYXRlZC4KKwkJCSAqLworCQkJTGlzdAkg ICAqZnVuY2RhdGE7CisJCQlUdXBsZURlc2MJcnRlX3R1cGRlc2M7CisJCQlpbnQJCQludW1fZnVu Y3M7CisJCQlpbnQJCQlhdHRudW07CisJCQlMaXN0Q2VsbCAgICpsYzEsCisJCQkJCSAgICpsYzI7 CisKKwkJCUFzc2VydChydGZ1bmNkYXRhICE9IE5JTCk7CisJCQlmdW5jZGF0YSA9IGxpc3RfbnRo KHJ0ZnVuY2RhdGEsIHZhci0+dmFybm8gLSBydG9mZnNldCk7CisJCQlBc3NlcnQoZnVuY2RhdGEg IT0gTklMKTsKKwkJCW51bV9mdW5jcyA9IGxpc3RfbGVuZ3RoKGZ1bmNkYXRhKTsKKwkJCUFzc2Vy dChudW1fZnVuY3MgPT0gbGlzdF9sZW5ndGgocnRlLT5lcmVmLT5jb2xuYW1lcykpOworCQkJcnRl X3R1cGRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYyhudW1fZnVuY3MpOworCisJCQlhdHRu dW0gPSAxOworCQkJZm9yYm90aChsYzEsIGZ1bmNkYXRhLCBsYzIsIHJ0ZS0+ZXJlZi0+Y29sbmFt ZXMpCisJCQl7CisJCQkJTGlzdAkgICAqZmRhdGEgPSBsZmlyc3Rfbm9kZShMaXN0LCBsYzEpOwor CQkJCWNoYXIJICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGxjMikpOworCQkJCU9pZAkJCWZ1 bmNyZXR0eXBlOworCQkJCU9pZAkJCWZ1bmNjb2xsYXRpb247CisKKwkJCQlmdW5jcmV0dHlwZSA9 IGxzZWNvbmRfbm9kZShJbnRlZ2VyLCBmZGF0YSktPml2YWw7CisJCQkJZnVuY2NvbGxhdGlvbiA9 IGx0aGlyZF9ub2RlKEludGVnZXIsIGZkYXRhKS0+aXZhbDsKKworCQkJCWlmICghT2lkSXNWYWxp ZChmdW5jcmV0dHlwZSkgfHwgZnVuY3JldHR5cGUgPT0gUkVDT1JET0lEKQorCQkJCQllbG9nKEVS Uk9SLAorCQkJCQkJICJjb3VsZCBub3QgZGV0ZXJtaW5lIHJldHVybiB0eXBlIGZvciBmdW5jdGlv biBpbiBmb3JlaWduIHNjYW4iKTsKKworCQkJCVR1cGxlRGVzY0luaXRFbnRyeShydGVfdHVwZGVz YywgKEF0dHJOdW1iZXIpIGF0dG51bSwgY29sbmFtZSwKKwkJCQkJCQkJICAgZnVuY3JldHR5cGUs IC0xLCAwKTsKKwkJCQlUdXBsZURlc2NJbml0RW50cnlDb2xsYXRpb24ocnRlX3R1cGRlc2MsIChB dHRyTnVtYmVyKSBhdHRudW0sCisJCQkJCQkJCQkJCWZ1bmNjb2xsYXRpb24pOworCQkJCWF0dG51 bSsrOworCQkJfQorCisJCQlhc3NpZ25fcmVjb3JkX3R5cGVfdHlwbW9kKHJ0ZV90dXBkZXNjKTsK KwkJCWF0dC0+YXR0dHlwbW9kID0gcnRlX3R1cGRlc2MtPnRkdHlwbW9kOworCQl9CiAJfQogCXJl dHVybiB0dXBkZXNjOwogfQpAQCAtMTczNywxNCArMTg0NCwzMCBAQCBwb3N0Z3Jlc0JlZ2luRm9y ZWlnblNjYW4oRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSwgaW50IGVmbGFncykKIAogCS8qCiAJICog SWRlbnRpZnkgd2hpY2ggdXNlciB0byBkbyB0aGUgcmVtb3RlIGFjY2VzcyBhcy4gIFRoaXMgc2hv dWxkIG1hdGNoIHdoYXQKLQkgKiBFeGVjQ2hlY2tQZXJtaXNzaW9ucygpIGRvZXMuCisJICogRXhl Y0NoZWNrUGVybWlzc2lvbnMoKSBkb2VzLiAgRm9yIGEgam9pbiwgc2NhbiB0aGUgYmFzZSByZWxp ZHMgdW50aWwgd2UKKwkgKiBmaW5kIGFuIFJURV9SRUxBVElPTiAodGhlIGZvcmVpZ24tdGFibGUg c2lkZSk7IGlnbm9yZSBhbnkgUlRFX0ZVTkNUSU9OCisJICogYWJzb3JiZWQgaW50byB0aGUgam9p biwgd2hpY2ggY29udHJpYnV0ZXMgbm8gcmVsYXRpb24gT0lEIHRvIGxvb2sgdXAuCiAJICovCiAJ dXNlcmlkID0gT2lkSXNWYWxpZChmc3BsYW4tPmNoZWNrQXNVc2VyKSA/IGZzcGxhbi0+Y2hlY2tB c1VzZXIgOiBHZXRVc2VySWQoKTsKKwlydGUgPSBOVUxMOwogCWlmIChmc3BsYW4tPnNjYW4uc2Nh bnJlbGlkID4gMCkKKwl7CiAJCXJ0aW5kZXggPSBmc3BsYW4tPnNjYW4uc2NhbnJlbGlkOworCQly dGUgPSBleGVjX3J0X2ZldGNoKHJ0aW5kZXgsIGVzdGF0ZSk7CisJfQogCWVsc2UKLQkJcnRpbmRl eCA9IGJtc19uZXh0X21lbWJlcihmc3BsYW4tPmZzX2Jhc2VfcmVsaWRzLCAtMSk7Ci0JcnRlID0g ZXhlY19ydF9mZXRjaChydGluZGV4LCBlc3RhdGUpOworCXsKKwkJcnRpbmRleCA9IC0xOworCQl3 aGlsZSAoKHJ0aW5kZXggPSBibXNfbmV4dF9tZW1iZXIoZnNwbGFuLT5mc19iYXNlX3JlbGlkcywg cnRpbmRleCkpID49IDApCisJCXsKKwkJCXJ0ZSA9IGV4ZWNfcnRfZmV0Y2gocnRpbmRleCwgZXN0 YXRlKTsKKwkJCWlmIChydGUgIT0gTlVMTCAmJiBydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9O KQorCQkJCWJyZWFrOworCQkJcnRlID0gTlVMTDsKKwkJfQorCQlpZiAocnRlID09IE5VTEwpCisJ CQllbG9nKEVSUk9SLCAiY291bGQgbm90IGxvY2F0ZSBhIGZvcmVpZ24gcmVsYXRpb24gUlRFIGlu IGZvcmVpZ24gc2NhbiIpOworCX0KIAogCS8qIEdldCBpbmZvIGFib3V0IGZvcmVpZ24gdGFibGUu ICovCiAJdGFibGUgPSBHZXRGb3JlaWduVGFibGUocnRlLT5yZWxpZCk7CkBAIC0xNzg3LDggKzE5 MTAsMTkgQEAgcG9zdGdyZXNCZWdpbkZvcmVpZ25TY2FuKEZvcmVpZ25TY2FuU3RhdGUgKm5vZGUs IGludCBlZmxhZ3MpCiAJfQogCWVsc2UKIAl7CisJCUxpc3QJICAgKnJ0ZnVuY2RhdGEgPSAoTGlz dCAqKSBsaXN0X250aChmc3BsYW4tPmZkd19wcml2YXRlLAorCQkJCQkJCQkJCQkJICAgRmR3U2Nh blByaXZhdGVGdW5jdGlvbnMpOworCQlpbnQJCQltaW5fYmFzZV9ydGkgPSBpbnRWYWwobGlzdF9u dGgoZnNwbGFuLT5mZHdfcHJpdmF0ZSwKKwkJCQkJCQkJCQkJCSAgIEZkd1NjYW5Qcml2YXRlTWlu UlRJbmRleCkpOworCQlpbnQJCQlydG9mZnNldCA9IGJtc19uZXh0X21lbWJlcihmc3BsYW4tPmZz X2Jhc2VfcmVsaWRzLCAtMSkgLQorCQkJbWluX2Jhc2VfcnRpOworCisJCUFzc2VydChtaW5fYmFz ZV9ydGkgPiAwKTsKKwkJQXNzZXJ0KHJ0b2Zmc2V0ID49IDApOworCiAJCWZzc3RhdGUtPnJlbCA9 IE5VTEw7Ci0JCWZzc3RhdGUtPnR1cGRlc2MgPSBnZXRfdHVwZGVzY19mb3Jfam9pbl9zY2FuX3R1 cGxlcyhub2RlKTsKKwkJZnNzdGF0ZS0+dHVwZGVzYyA9IGdldF90dXBkZXNjX2Zvcl9qb2luX3Nj YW5fdHVwbGVzKG5vZGUsIHJ0ZnVuY2RhdGEsCisJCQkJCQkJCQkJCQkJCQlydG9mZnNldCk7CiAJ fQogCiAJZnNzdGF0ZS0+YXR0aW5tZXRhID0gVHVwbGVEZXNjR2V0QXR0SW5NZXRhZGF0YShmc3N0 YXRlLT50dXBkZXNjKTsKQEAgLTI3NDEsNyArMjg3NSw3IEBAIHBvc3RncmVzUGxhbkRpcmVjdE1v ZGlmeShQbGFubmVySW5mbyAqcm9vdCwKIAkJCWlmIChhdHRubyA8PSBJbnZhbGlkQXR0ck51bWJl cikgLyogc2hvdWxkbid0IGhhcHBlbiAqLwogCQkJCWVsb2coRVJST1IsICJzeXN0ZW0tY29sdW1u IHVwZGF0ZSBpcyBub3Qgc3VwcG9ydGVkIik7CiAKLQkJCWlmICghaXNfZm9yZWlnbl9leHByKHJv b3QsIGZvcmVpZ25yZWwsIChFeHByICopIHRsZS0+ZXhwcikpCisJCQlpZiAoIWlzX2ZvcmVpZ25f ZXhwcihyb290LCBmb3JlaWducmVsLCBmcGluZm8sIChFeHByICopIHRsZS0+ZXhwcikpCiAJCQkJ cmV0dXJuIGZhbHNlOwogCQl9CiAJfQpAQCAtMjgyOCw2ICsyOTYyLDEwIEBAIHBvc3RncmVzUGxh bkRpcmVjdE1vZGlmeShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCW1ha2VCb29sZWFuKChy ZXRyaWV2ZWRfYXR0cnMgIT0gTklMKSksCiAJCQkJCQkJCQlyZXRyaWV2ZWRfYXR0cnMsCiAJCQkJ CQkJCQltYWtlQm9vbGVhbihwbGFuLT5jYW5TZXRUYWcpKTsKKwlmc2Nhbi0+ZmR3X3ByaXZhdGUg PSBsYXBwZW5kKGZzY2FuLT5mZHdfcHJpdmF0ZSwKKwkJCQkJCQkJIGdldF9mdW5jdGlvbnNfZGF0 YShyb290LCBmb3JlaWducmVsKSk7CisJZnNjYW4tPmZkd19wcml2YXRlID0gbGFwcGVuZChmc2Nh bi0+ZmR3X3ByaXZhdGUsCisJCQkJCQkJCSBtYWtlSW50ZWdlcihnZXRfbWluX2Jhc2VfcnRpKHJv b3QsIGZvcmVpZ25yZWwpKSk7CiAKIAkvKgogCSAqIFVwZGF0ZSB0aGUgZm9yZWlnbi1qb2luLXJl bGF0ZWQgZmllbGRzLgpAQCAtMjk0MSw3ICszMDc5LDI2IEBAIHBvc3RncmVzQmVnaW5EaXJlY3RN b2RpZnkoRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSwgaW50IGVmbGFncykKIAkJVHVwbGVEZXNjCXR1 cGRlc2M7CiAKIAkJaWYgKGZzcGxhbi0+c2Nhbi5zY2FucmVsaWQgPT0gMCkKLQkJCXR1cGRlc2Mg PSBnZXRfdHVwZGVzY19mb3Jfam9pbl9zY2FuX3R1cGxlcyhub2RlKTsKKwkJeworCQkJLyoKKwkJ CSAqIERpcmVjdE1vZGlmeSBvbiBhIGZvcmVpZ24gam9pbjogdXNlIHRoZSBwZXItUlRFIGZ1bmN0 aW9uCisJCQkgKiBtZXRhZGF0YSBzYXZlZCBhdCBwbGFuIHRpbWUgc28gYSB3aG9sZS1yb3cgVmFy IHBvaW50aW5nIGF0IGEKKwkJCSAqIGZ1bmN0aW9uIFJURSBhYnNvcmJlZCBpbnRvIHRoZSBqb2lu IGNhbiBiZSByZWJ1aWx0IGludG8gYQorCQkJICogdXNhYmxlIFR1cGxlRGVzYyAoZS5nLiBSRVRV Uk5JTkcgdCBmb3IgYSBqb2luIHdpdGggVU5ORVNUKC4uLiwKKwkJCSAqIC4uLikgQVMgdChieCwg aSkpLgorCQkJICovCisJCQlMaXN0CSAgICpydGZ1bmNkYXRhID0gKExpc3QgKikgbGlzdF9udGgo ZnNwbGFuLT5mZHdfcHJpdmF0ZSwKKwkJCQkJCQkJCQkJCQkgICBGZHdEaXJlY3RNb2RpZnlQcml2 YXRlRnVuY3Rpb25zKTsKKwkJCWludAkJCW1pbl9iYXNlX3J0aSA9IGludFZhbChsaXN0X250aChm c3BsYW4tPmZkd19wcml2YXRlLAorCQkJCQkJCQkJCQkJCSAgIEZkd0RpcmVjdE1vZGlmeVByaXZh dGVNaW5SVEluZGV4KSk7CisJCQlpbnQJCQlydG9mZnNldCA9IGJtc19uZXh0X21lbWJlcihmc3Bs YW4tPmZzX2Jhc2VfcmVsaWRzLCAtMSkgLQorCQkJCW1pbl9iYXNlX3J0aTsKKworCQkJQXNzZXJ0 KG1pbl9iYXNlX3J0aSA+IDApOworCQkJQXNzZXJ0KHJ0b2Zmc2V0ID49IDApOworCisJCQl0dXBk ZXNjID0gZ2V0X3R1cGRlc2NfZm9yX2pvaW5fc2Nhbl90dXBsZXMobm9kZSwgcnRmdW5jZGF0YSwg cnRvZmZzZXQpOworCQl9CiAJCWVsc2UKIAkJCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKGRt c3RhdGUtPnJlbCk7CiAKQEAgLTMwNTQsNyArMzIxMSw4IEBAIHBvc3RncmVzRXhwbGFpbkZvcmVp Z25TY2FuKEZvcmVpZ25TY2FuU3RhdGUgKm5vZGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJICogV2Ug ZG8gdGhhdCBoZXJlLCBub3Qgd2hlbiB0aGUgcGxhbiBpcyBjcmVhdGVkLCBiZWNhdXNlIHdlIGNh bid0IGtub3cKIAkgKiB3aGF0IGFsaWFzZXMgcnVsZXV0aWxzLmMgd2lsbCBhc3NpZ24gYXQgcGxh biBjcmVhdGlvbiB0aW1lLgogCSAqLwotCWlmIChsaXN0X2xlbmd0aChmZHdfcHJpdmF0ZSkgPiBG ZHdTY2FuUHJpdmF0ZVJlbGF0aW9ucykKKwlpZiAobGlzdF9sZW5ndGgoZmR3X3ByaXZhdGUpID4g RmR3U2NhblByaXZhdGVSZWxhdGlvbnMgJiYKKwkJbGlzdF9udGgoZmR3X3ByaXZhdGUsIEZkd1Nj YW5Qcml2YXRlUmVsYXRpb25zKSAhPSBOVUxMKQogCXsKIAkJU3RyaW5nSW5mb0RhdGEgcmVsYXRp b25zOwogCQljaGFyCSAgICpyYXdyZWxhdGlvbnM7CkBAIC0zMTA0LDYgKzMyNjIsMjIgQEAgcG9z dGdyZXNFeHBsYWluRm9yZWlnblNjYW4oRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSwgRXhwbGFpblN0 YXRlICplcykKIAkJCQlydGkgKz0gcnRvZmZzZXQ7CiAJCQkJQXNzZXJ0KGJtc19pc19tZW1iZXIo cnRpLCBwbGFuLT5mc19iYXNlX3JlbGlkcykpOwogCQkJCXJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgZXMt PnJ0YWJsZSk7CisKKwkJCQkvKgorCQkJCSAqIElmIGEgZnVuY3Rpb24gUlRFIHdhcyBhYnNvcmJl ZCBpbnRvIHRoZSBmb3JlaWduIGpvaW4sCisJCQkJICogcmVuZGVyIGl0IGFzICJGdW5jdGlvbiA8 YWxpYXM+IiBzaW5jZSB3ZSBoYXZlIG5vIGZvcmVpZ24KKwkJCQkgKiByZWxpZC4KKwkJCQkgKi8K KwkJCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9GVU5DVElPTikKKwkJCQl7CisJCQkJCXJlZm5h bWUgPSAoY2hhciAqKSBsaXN0X250aChlcy0+cnRhYmxlX25hbWVzLCBydGkgLSAxKTsKKwkJCQkJ aWYgKHJlZm5hbWUgPT0gTlVMTCkKKwkJCQkJCXJlZm5hbWUgPSBydGUtPmVyZWYtPmFsaWFzbmFt ZTsKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmcmVsYXRpb25zLCAiRnVuY3Rpb24gJXMiLAorCQkJ CQkJCQkJIHF1b3RlX2lkZW50aWZpZXIocmVmbmFtZSkpOworCQkJCQljb250aW51ZTsKKwkJCQl9 CisKIAkJCQlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTik7CiAJCQkJLyogVGhp cyBsb2dpYyBzaG91bGQgYWdyZWUgd2l0aCBleHBsYWluLmMncyBFeHBsYWluVGFyZ2V0UmVsICov CiAJCQkJcmVsbmFtZSA9IGdldF9yZWxfbmFtZShydGUtPnJlbGlkKTsKQEAgLTMzNDYsNyArMzUy MCw3IEBAIGVzdGltYXRlX3BhdGhfY29zdF9zaXplKFBsYW5uZXJJbmZvICpyb290LAogCQkgKiBw YXJhbV9qb2luX2NvbmRzIG1pZ2h0IGNvbnRhaW4gYm90aCBjbGF1c2VzIHRoYXQgYXJlIHNhZmUg dG8gc2VuZAogCQkgKiBhY3Jvc3MsIGFuZCBjbGF1c2VzIHRoYXQgYXJlbid0LgogCQkgKi8KLQkJ Y2xhc3NpZnlDb25kaXRpb25zKHJvb3QsIGZvcmVpZ25yZWwsIHBhcmFtX2pvaW5fY29uZHMsCisJ CWNsYXNzaWZ5Q29uZGl0aW9ucyhyb290LCBmb3JlaWducmVsLCBmcGluZm8sIHBhcmFtX2pvaW5f Y29uZHMsCiAJCQkJCQkgICAmcmVtb3RlX3BhcmFtX2pvaW5fY29uZHMsICZsb2NhbF9wYXJhbV9q b2luX2NvbmRzKTsKIAogCQkvKiBCdWlsZCB0aGUgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIGZldGNo ZWQgZnJvbSB0aGUgZm9yZWlnbiBzZXJ2ZXIuICovCkBAIC0zNDc5LDggKzM2NTMsMTcgQEAgZXN0 aW1hdGVfcGF0aF9jb3N0X3NpemUoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkvKiBGb3Igam9pbiB3 ZSBleHBlY3QgaW5uZXIgYW5kIG91dGVyIHJlbGF0aW9ucyBzZXQgKi8KIAkJCUFzc2VydChmcGlu Zm8tPmlubmVycmVsICYmIGZwaW5mby0+b3V0ZXJyZWwpOwogCi0JCQlmcGluZm9faSA9IChQZ0Zk d1JlbGF0aW9uSW5mbyAqKSBmcGluZm8tPmlubmVycmVsLT5mZHdfcHJpdmF0ZTsKLQkJCWZwaW5m b19vID0gKFBnRmR3UmVsYXRpb25JbmZvICopIGZwaW5mby0+b3V0ZXJyZWwtPmZkd19wcml2YXRl OworCQkJLyoKKwkJCSAqIEZvciBhIEZVTkNUSU9OIFJURSBhYnNvcmJlZCBpbnRvIHRoZSBqb2lu LCB1c2UgdGhlIHN0dWIgZnBpbmZvCisJCQkgKiB3ZSBidWlsdCBpbiBmb3JlaWduX2pvaW5fb2so KSwgc2luY2UgdGhlIGZ1bmN0aW9uIHJlbCBpdHNlbGYKKwkJCSAqIGhhcyBubyBmZHdfcHJpdmF0 ZS4KKwkJCSAqLworCQkJZnBpbmZvX2kgPSBmcGluZm8tPmlubmVyX2Z1bmNfZnBpbmZvID8KKwkJ CQlmcGluZm8tPmlubmVyX2Z1bmNfZnBpbmZvIDoKKwkJCQkoUGdGZHdSZWxhdGlvbkluZm8gKikg ZnBpbmZvLT5pbm5lcnJlbC0+ZmR3X3ByaXZhdGU7CisJCQlmcGluZm9fbyA9IGZwaW5mby0+b3V0 ZXJfZnVuY19mcGluZm8gPworCQkJCWZwaW5mby0+b3V0ZXJfZnVuY19mcGluZm8gOgorCQkJCShQ Z0Zkd1JlbGF0aW9uSW5mbyAqKSBmcGluZm8tPm91dGVycmVsLT5mZHdfcHJpdmF0ZTsKIAogCQkJ LyogRXN0aW1hdGUgb2YgbnVtYmVyIG9mIHJvd3MgaW4gY3Jvc3MgcHJvZHVjdCAqLwogCQkJbnJv d3MgPSBmcGluZm9faS0+cm93cyAqIGZwaW5mb19vLT5yb3dzOwpAQCAtNjYxOSw2ICs2ODAyLDE4 MSBAQCBzZW1pam9pbl90YXJnZXRfb2soUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpv aW5yZWwsIFJlbE9wdEluZm8gKm91dGVycmVsLAogCXJldHVybiBvazsKIH0KIAorLyoKKyAqIGdl dF9iYXNlX3JlbGlkcworICoJCVJldHVybiB0aGUgc2V0IG9mIGJhc2UgcmVsaWRzIHJlZmVyZW5j ZWQgYnkgYSBmb3JlaWduIHNjYW4gcmVsLgorICoKKyAqIEZvciBhbiB1cHBlciByZWwgd2UgdXNl IHRoZSBhbGwtcXVlcnkgcmVsaWRzIG1pbnVzIHRoZSBvdXRlciBqb2luczsKKyAqIG90aGVyd2lz ZSB0aGUgcmVsJ3Mgb3duIHJlbGlkcyBtaW51cyB0aGUgb3V0ZXIgam9pbnMuICBUaGUgcmVzdWx0 IG1hdGNoZXMKKyAqIHRoZSByZWxpZHMgdGhhdCBjcmVhdGVfZm9yZWlnbnNjYW5fcGxhbigpIHVs dGltYXRlbHkgdXNlcyBmb3IKKyAqIEZvcmVpZ25TY2FuLmZzX2Jhc2VfcmVsaWRzLCBzbyBpdCBp cyBzdWl0YWJsZSBmb3IgYW55IHRhZ2dpbmcgd2Ugd2FudCB0bworICogc3RvcmUgdmlhIHBsYW4t cHJpdmF0ZSBzdGF0ZS4KKyAqLworc3RhdGljIFJlbGlkcworZ2V0X2Jhc2VfcmVsaWRzKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpCit7CisJUmVsaWRzCQlyZWxpZHM7CisKKwlp ZiAocmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9VUFBFUl9SRUwpCisJCXJlbGlkcyA9IHJvb3Qt PmFsbF9xdWVyeV9yZWxzOworCWVsc2UKKwkJcmVsaWRzID0gcmVsLT5yZWxpZHM7CisKKwlyZXR1 cm4gYm1zX2RpZmZlcmVuY2UocmVsaWRzLCByb290LT5vdXRlcl9qb2luX3JlbHMpOworfQorCisv KgorICogZ2V0X21pbl9iYXNlX3J0aQorICoJCUxvd2VzdCBiYXNlIFJUIGluZGV4IGluIHRoZSBm b3JlaWduIHNjYW4gcmVsLgorICoKKyAqIEFmdGVyIHNldHJlZnMuYyBmbGF0dGVucyB0aGUgcnRh YmxlLCB0aGUgc2Nhbi1sb2NhbCBpbmRleGVzIHNhdmVkIGluCisgKiBwbGFuLXByaXZhdGUgZGF0 YSBjYW4gYmUgdHJhbnNsYXRlZCB0byBlc3RhdGUgaW5kZXhlcyBieSBhZGRpbmcKKyAqIChGb3Jl aWduU2Nhbi5mc19iYXNlX3JlbGlkcyBtaW4gLSB0aGlzIHZhbHVlKS4gIENhcHR1cmVkIGF0IHBs YW4gdGltZQorICogYmVjYXVzZSBjcmVhdGVfZm9yZWlnbnNjYW5fcGxhbigpIGNvbXB1dGVzIHRo ZSBzYW1lIHZhbHVlIGludGVybmFsbHkuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9taW5fYmFzZV9y dGkoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlSZWxpZHMJCXJlbGlk cyA9IGdldF9iYXNlX3JlbGlkcyhyb290LCByZWwpOworCisJcmV0dXJuIGJtc19uZXh0X21lbWJl cihyZWxpZHMsIC0xKTsKK30KKworLyoKKyAqIGdldF9mdW5jdGlvbnNfZGF0YQorICoJCUJ1aWxk IHRoZSBwZXItUlRFIGZ1bmN0aW9uIG1ldGFkYXRhIGxpc3Qgc2F2ZWQgYXMKKyAqCQlGZHdTY2Fu UHJpdmF0ZUZ1bmN0aW9ucy4KKyAqCisgKiBUaGUgcmVzdWx0IGxpc3QgaXMgaW5kZXhlZCBieSBi YXNlIFJUIGluZGV4IHJlbGF0aXZlIHRvIHRoZSBsb3dlc3QgYmFzZQorICogUlQgaW5kZXggb2Yg dGhlIHNjYW4uICBFYWNoIGVsZW1lbnQgaXMgZWl0aGVyIE5VTEwgKGZvciBub24tUlRFX0ZVTkNU SU9OCisgKiBiYXNlIHJlbHMgaW4gdGhpcyBzY2FuKSBvciBhIExpc3Qgb2YgTGlzdCBvZiB0aHJl ZSBJbnRlZ2VyIG5vZGVzOgorICogKGZ1bmNpZCwgZnVuY3JldHR5cGUsIGZ1bmNjb2xsYXRpb24p IC0tIG9uZSBpbm5lciBsaXN0IHBlciBSYW5nZVRibEZ1bmN0aW9uLgorICoKKyAqIE9ubHkgUlRF X0ZVTkNUSU9OIHJlbGlkcyBhY3R1YWxseSBhcHBlYXJpbmcgaW4gdGhlIGZvcmVpZ24gc2Nhbidz CisgKiBmc19iYXNlX3JlbGlkcyBjb250cmlidXRlOyBvdGhlcnMgYXJlIHBsYWNlaG9sZGVycyBz byB0aGF0IHRoZSBjb25zdW1lcgorICogY2FuIGluZGV4IGludG8gdGhlIHJlc3VsdCBieSBSVEkg b2Zmc2V0LgorICovCitzdGF0aWMgTGlzdCAqCitnZXRfZnVuY3Rpb25zX2RhdGEoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlMaXN0CSAgICpydGZ1bmNkYXRhID0gTklM OworCVJlbGlkcwkJZnNjYW5fcmVsaWRzID0gZ2V0X2Jhc2VfcmVsaWRzKHJvb3QsIHJlbCk7CisJ aW50CQkJaTsKKworCWZvciAoaSA9IDA7IGkgPCByb290LT5zaW1wbGVfcmVsX2FycmF5X3NpemU7 IGkrKykKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlb aV07CisJCUxpc3QJICAgKmZ1bmNkYXRhID0gTklMOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQlp ZiAocnRlID09IE5VTEwgfHwgaSA9PSAwIHx8CisJCQkhYm1zX2lzX21lbWJlcihpLCBmc2Nhbl9y ZWxpZHMpIHx8CisJCQlydGUtPnJ0ZWtpbmQgIT0gUlRFX0ZVTkNUSU9OKQorCQl7CisJCQlydGZ1 bmNkYXRhID0gbGFwcGVuZChydGZ1bmNkYXRhLCBOVUxMKTsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJZm9yZWFjaChsYywgcnRlLT5mdW5jdGlvbnMpCisJCXsKKwkJCVJhbmdlVGJsRnVuY3Rpb24g KnJ0ZnVuYyA9IChSYW5nZVRibEZ1bmN0aW9uICopIGxmaXJzdChsYyk7CisJCQlPaWQJCQlmdW5j cmV0dHlwZTsKKwkJCU9pZAkJCWZ1bmNjb2xsYXRpb247CisJCQlUdXBsZURlc2MJdHVwZGVzYzsK KwkJCU9pZAkJCWZ1bmNpZCA9IEludmFsaWRPaWQ7CisKKwkJCWdldF9leHByX3Jlc3VsdF90eXBl KHJ0ZnVuYy0+ZnVuY2V4cHIsICZmdW5jcmV0dHlwZSwgJnR1cGRlc2MpOworCisJCQlpZiAoIU9p ZElzVmFsaWQoZnVuY3JldHR5cGUpIHx8IGZ1bmNyZXR0eXBlID09IFJFQ09SRE9JRCkKKwkJCQll bG9nKEVSUk9SLAorCQkJCQkgImNvdWxkIG5vdCBkZXRlcm1pbmUgcmV0dXJuIHR5cGUgZm9yIGZ1 bmN0aW9uIGluIGZvcmVpZ24gc2NhbiIpOworCisJCQlmdW5jY29sbGF0aW9uID0gZXhwckNvbGxh dGlvbihydGZ1bmMtPmZ1bmNleHByKTsKKworCQkJaWYgKElzQShydGZ1bmMtPmZ1bmNleHByLCBG dW5jRXhwcikpCisJCQkJZnVuY2lkID0gKChGdW5jRXhwciAqKSBydGZ1bmMtPmZ1bmNleHByKS0+ ZnVuY2lkOworCisJCQlmdW5jZGF0YSA9IGxhcHBlbmQoZnVuY2RhdGEsCisJCQkJCQkJICAgbGlz dF9tYWtlMyhtYWtlSW50ZWdlcihmdW5jaWQpLAorCQkJCQkJCQkJCSAgbWFrZUludGVnZXIoZnVu Y3JldHR5cGUpLAorCQkJCQkJCQkJCSAgbWFrZUludGVnZXIoZnVuY2NvbGxhdGlvbikpKTsKKwkJ fQorCisJCXJ0ZnVuY2RhdGEgPSBsYXBwZW5kKHJ0ZnVuY2RhdGEsIGZ1bmNkYXRhKTsKKwl9CisK KwlyZXR1cm4gcnRmdW5jZGF0YTsKK30KKworLyoKKyAqIENoZWNrIGlmIGEgcmVsYXRpb24gaXMg YSBGVU5DVElPTiBSVEUgdGhhdCBjYW4gYmUgYWJzb3JiZWQgaW50byBhIHJlbW90ZQorICogam9p bi4gIEV2ZXJ5IGZ1bmN0aW9uIGluIHRoZSBSVEUgbXVzdAorICoKKyAqICAgLSByZXR1cm4gYSB3 ZWxsLWRlZmluZWQgc2NhbGFyIHR5cGUgLS0gd2UgZG9uJ3Qgc2hpcCByZWNvcmRzL2NvbXBvc2l0 ZQorICogICAgIHNpbmNlIHRoZSByZW1vdGUgc2VydmVyIGNhbm5vdCByZWNvbnN0cnVjdCBhIGNv bHVtbiBkZWZpbml0aW9uIGxpc3QKKyAqICAgICBhbmQgb3VyIGRlcGFyc2VyIGRvZXMgbm90IGVt aXQgb25lOworICogICAtIGhhdmUgYSBzaGlwcGFibGUgZXhwcmVzc2lvbiB3aXRoIG5vIG11dGFi bGUgc3Vibm9kZXMgLS0gaXNfZm9yZWlnbl9leHByKCkKKyAqICAgICByZWplY3RzIHZvbGF0aWxl L3N0YWJsZSBmdW5jdGlvbnMgdGhyb3VnaCBjb250YWluX211dGFibGVfZnVuY3Rpb25zKCksCisg KiAgICAgc28gdGhlIElNTVVUQUJMRS1vbmx5IHJlc3RyaWN0aW9uIGlzIGltcGxpY2l0OworICog ICAtIG5vdCBjb250YWluIFN1YlBsYW5zIC0tIHdlJ2Qgb3RoZXJ3aXNlIG5lZWQgdG8gc2hpcCBz dWItcmVzdWx0cyB0bworICogICAgIHRoZSByZW1vdGUsIHdoaWNoIHdlIGRvIG5vdCBpbXBsZW1l bnQuCisgKgorICogV0lUSCBPUkRJTkFMSVRZIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorICovCitz dGF0aWMgYm9vbAorZnVuY3Rpb25fcnRlX3B1c2hkb3duX29rKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCisJCQkJCQkgUmVsT3B0SW5mbyAqZmR3cmVsKQoreworCVJhbmdlVGJs RW50cnkgKnJ0ZTsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWlmIChyZWwtPnJ0ZWtpbmQgIT0gUlRF X0ZVTkNUSU9OKQorCQlyZXR1cm4gZmFsc2U7CisJcnRlID0gcGxhbm5lcl9ydF9mZXRjaChyZWwt PnJlbGlkLCByb290KTsKKwlpZiAocnRlLT5ydGVraW5kICE9IFJURV9GVU5DVElPTikKKwkJcmV0 dXJuIGZhbHNlOworCWlmIChydGUtPmZ1bmNvcmRpbmFsaXR5KQorCQlyZXR1cm4gZmFsc2U7CisK KwkvKgorCSAqIFJlamVjdCB1cC1mcm9udCBhbnkgZnVuY3Rpb24gUlRFIHRoYXQgbGF0ZXJhbC1y ZWZlcmVuY2VzIGFub3RoZXIKKwkgKiByZWxhdGlvbjogZm9yZWlnbi1qb2luIHB1c2gtZG93biB3 b3VsZCBuZWVkIHRvIHBhcmFtZXRlcmlzZSB0aGUgcmVtb3RlCisJICogcXVlcnkgcGVyIG91dGVy IHJvdywgd2hpY2ggd2UgZG9uJ3Qgc3VwcG9ydCwgYW5kIGV2ZW4gY29uc2lkZXJpbmcgdGhlCisJ ICogcGF0aCBpcyBleHBlbnNpdmUgb24gdGhlIHBsYW5uZXIgc2lkZS4gIFRoZSBzdXJyb3VuZGlu ZyBsYXRlcmFsX3JlbGlkcworCSAqIGNoZWNrIGluIHBvc3RncmVzR2V0Rm9yZWlnbkpvaW5QYXRo cygpIHdvdWxkIG5vcm1hbGx5IGJhaWwgb3V0IGZvciB0aGUKKwkgKiBqb2lucmVsLCBidXQgZG9p bmcgdGhlIGNoZWNrIGhlcmUgYXZvaWRzIHdhbGtpbmcgdGhlIGZ1bmN0aW9uCisJICogZXhwcmVz c2lvbiBlbnRpcmVseS4KKwkgKi8KKwlpZiAoIWJtc19pc19lbXB0eShyZWwtPmxhdGVyYWxfcmVs aWRzKSkKKwkJcmV0dXJuIGZhbHNlOworCisJQXNzZXJ0KGxpc3RfbGVuZ3RoKHJ0ZS0+ZnVuY3Rp b25zKSA+PSAxKTsKKworCWZvcmVhY2gobGMsIHJ0ZS0+ZnVuY3Rpb25zKQorCXsKKwkJUmFuZ2VU YmxGdW5jdGlvbiAqcnRmdW5jID0gKFJhbmdlVGJsRnVuY3Rpb24gKikgbGZpcnN0KGxjKTsKKwkJ VHlwZUZ1bmNDbGFzcyBmdW5jdHlwY2xhc3M7CisJCU9pZAkJCWZ1bmNyZXR0eXBlOworCQlUdXBs ZURlc2MJdHVwZGVzYzsKKworCQlmdW5jdHlwY2xhc3MgPSBnZXRfZXhwcl9yZXN1bHRfdHlwZShy dGZ1bmMtPmZ1bmNleHByLAorCQkJCQkJCQkJCQkmZnVuY3JldHR5cGUsICZ0dXBkZXNjKTsKKwkJ aWYgKGZ1bmN0eXBjbGFzcyAhPSBUWVBFRlVOQ19TQ0FMQVIpCisJCQlyZXR1cm4gZmFsc2U7CisJ CWlmICghT2lkSXNWYWxpZChmdW5jcmV0dHlwZSkgfHwKKwkJCWZ1bmNyZXR0eXBlID09IFJFQ09S RE9JRCB8fAorCQkJZnVuY3JldHR5cGUgPT0gVk9JRE9JRCkKKwkJCXJldHVybiBmYWxzZTsKKwor CQlpZiAoY29udGFpbl9zdWJwbGFucyhydGZ1bmMtPmZ1bmNleHByKSkKKwkJCXJldHVybiBmYWxz ZTsKKwkJaWYgKCFpc19mb3JlaWduX2V4cHIocm9vdCwgZmR3cmVsLCBmZHdyZWwtPmZkd19wcml2 YXRlLCAoRXhwciAqKSBydGZ1bmMtPmZ1bmNleHByKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisK KwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIEFzc2VzcyB3aGV0aGVyIHRoZSBqb2luIGJldHdl ZW4gaW5uZXIgYW5kIG91dGVyIHJlbGF0aW9ucyBjYW4gYmUgcHVzaGVkIGRvd24KICAqIHRvIHRo ZSBmb3JlaWduIHNlcnZlci4gQXMgYSBzaWRlIGVmZmVjdCwgc2F2ZSBpbmZvcm1hdGlvbiB3ZSBv YnRhaW4gaW4gdGhpcwpAQCAtNjYzNCw2ICs2OTkyLDggQEAgZm9yZWlnbl9qb2luX29rKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLCBKb2luVHlwZSBqb2ludHlwZSwKIAlQ Z0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvX2k7CiAJTGlzdENlbGwgICAqbGM7CiAJTGlzdAkgICAq am9pbmNsYXVzZXM7CisJYm9vbAkJb3V0ZXJfaXNfZnVuY3Rpb24gPSBmYWxzZTsKKwlib29sCQlp bm5lcl9pc19mdW5jdGlvbiA9IGZhbHNlOwogCiAJLyoKIAkgKiBXZSBzdXBwb3J0IHB1c2hpbmcg ZG93biBJTk5FUiwgTEVGVCwgUklHSFQsIEZVTEwgT1VURVIgYW5kIFNFTUkgam9pbnMuCkBAIC02 NjUyLDE1ICs3MDEyLDc2IEBAIGZvcmVpZ25fam9pbl9vayhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqam9pbnJlbCwgSm9pblR5cGUgam9pbnR5cGUsCiAJCXJldHVybiBmYWxzZTsKIAog CS8qCi0JICogSWYgZWl0aGVyIG9mIHRoZSBqb2luaW5nIHJlbGF0aW9ucyBpcyBtYXJrZWQgYXMg dW5zYWZlIHRvIHB1c2hkb3duLCB0aGUKLQkgKiBqb2luIGNhbiBub3QgYmUgcHVzaGVkIGRvd24u CisJICogRGV0ZWN0IG1peGVkIChmb3JlaWduIHggZnVuY3Rpb24tUlRFKSBjYXNlcy4gIE9ubHkg SU5ORVIgam9pbnMgYXJlCisJICogc3VwcG9ydGVkIGluaXRpYWxseS4gIFdlIGRpc3BhdGNoIG9u IHJ0ZWtpbmQgaGVyZSBzbyB0aGF0IHRoZSBzYW1lCisJICogZnVuY3Rpb24gUlRFIGNhbiBiZSBh YnNvcmJlZCBpbnRvIGpvaW5zIG9uIG11bHRpcGxlIGZvcmVpZ24gc2VydmVycworCSAqIChlYWNo IGNhbGwgZ2V0cyBpdHMgb3duIHN0dWIgZnBpbmZvIGFuZCByZWNoZWNrcyBzaGlwcGFiaWxpdHkg Zm9yIHRoZQorCSAqIHNwZWNpZmljIHNlcnZlcikuCiAJICovCiAJZnBpbmZvID0gKFBnRmR3UmVs YXRpb25JbmZvICopIGpvaW5yZWwtPmZkd19wcml2YXRlOwotCWZwaW5mb19vID0gKFBnRmR3UmVs YXRpb25JbmZvICopIG91dGVycmVsLT5mZHdfcHJpdmF0ZTsKLQlmcGluZm9faSA9IChQZ0Zkd1Jl bGF0aW9uSW5mbyAqKSBpbm5lcnJlbC0+ZmR3X3ByaXZhdGU7Ci0JaWYgKCFmcGluZm9fbyB8fCAh ZnBpbmZvX28tPnB1c2hkb3duX3NhZmUgfHwKLQkJIWZwaW5mb19pIHx8ICFmcGluZm9faS0+cHVz aGRvd25fc2FmZSkKLQkJcmV0dXJuIGZhbHNlOworCWlmIChqb2ludHlwZSA9PSBKT0lOX0lOTkVS ICYmIGlubmVycmVsLT5ydGVraW5kID09IFJURV9GVU5DVElPTiAmJgorCQkoZnBpbmZvX28gPSAo UGdGZHdSZWxhdGlvbkluZm8gKikgb3V0ZXJyZWwtPmZkd19wcml2YXRlKSAmJgorCQlmcGluZm9f by0+cHVzaGRvd25fc2FmZSAmJgorCQlmdW5jdGlvbl9ydGVfcHVzaGRvd25fb2socm9vdCwgaW5u ZXJyZWwsIG91dGVycmVsKSkKKwl7CisJCWlubmVyX2lzX2Z1bmN0aW9uID0gdHJ1ZTsKKwl9CisJ ZWxzZSBpZiAoam9pbnR5cGUgPT0gSk9JTl9JTk5FUiAmJiBvdXRlcnJlbC0+cnRla2luZCA9PSBS VEVfRlVOQ1RJT04gJiYKKwkJCSAoZnBpbmZvX2kgPSAoUGdGZHdSZWxhdGlvbkluZm8gKikgaW5u ZXJyZWwtPmZkd19wcml2YXRlKSAmJgorCQkJIGZwaW5mb19pLT5wdXNoZG93bl9zYWZlICYmCisJ CQkgZnVuY3Rpb25fcnRlX3B1c2hkb3duX29rKHJvb3QsIG91dGVycmVsLCBpbm5lcnJlbCkpCisJ eworCQlvdXRlcl9pc19mdW5jdGlvbiA9IHRydWU7CisJfQorCWVsc2UKKwl7CisJCWZwaW5mb19v ID0gKFBnRmR3UmVsYXRpb25JbmZvICopIG91dGVycmVsLT5mZHdfcHJpdmF0ZTsKKwkJZnBpbmZv X2kgPSAoUGdGZHdSZWxhdGlvbkluZm8gKikgaW5uZXJyZWwtPmZkd19wcml2YXRlOworCQlpZiAo IWZwaW5mb19vIHx8ICFmcGluZm9fby0+cHVzaGRvd25fc2FmZSB8fAorCQkJIWZwaW5mb19pIHx8 ICFmcGluZm9faS0+cHVzaGRvd25fc2FmZSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgor CSAqIElmIG9uZSBzaWRlIGlzIGEgZnVuY3Rpb24gUlRFLCBhbGxvY2F0ZSBhIHN0dWIgZnBpbmZv IHNvIHRoZSByZXN0IG9mCisJICogdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGNvc3QgZXN0aW1hdG9y IGNhbiB0cmVhdCBpdCB1bmlmb3JtbHkuICBXZSBoYW5kCisJICogdGhlIHN0dWIgdG8gdGhlIGpv aW5yZWwncyBkZXBhcnNlciB2aWEgdGhlIHNhbWUgcGF0aCB0aGUgZm9yZWlnbiBzaWRlCisJICog dXNlcywgYnV0IHdlIG5ldmVyIHBlcm1hbmVudGx5IGF0dGFjaCBpdCB0byB0aGUgZnVuY3Rpb24g cmVsJ3MKKwkgKiBmZHdfcHJpdmF0ZSAoZGlmZmVyZW50IGpvaW5yZWxzIG1heSBwYWlyIHRoZSBz YW1lIGZ1bmN0aW9uIFJURSB3aXRoCisJICogZGlmZmVyZW50IGZvcmVpZ24gc2VydmVycykuCisJ ICovCisJaWYgKGlubmVyX2lzX2Z1bmN0aW9uKQorCXsKKwkJZnBpbmZvX2kgPSBwYWxsb2MwX29i amVjdChQZ0Zkd1JlbGF0aW9uSW5mbyk7CisJCWZwaW5mb19pLT5wdXNoZG93bl9zYWZlID0gdHJ1 ZTsKKwkJZnBpbmZvX2ktPnNlcnZlciA9IGZwaW5mb19vLT5zZXJ2ZXI7CisJCWZwaW5mb19pLT5y ZWxhdGlvbl9uYW1lID0gcHNwcmludGYoIiV1IiwgaW5uZXJyZWwtPnJlbGlkKTsKKwkJZnBpbmZv X2ktPnJvd3MgPSBpbm5lcnJlbC0+cm93czsKKwkJZnBpbmZvX2ktPndpZHRoID0gaW5uZXJyZWwt PnJlbHRhcmdldC0+d2lkdGg7CisJCWZwaW5mb19pLT5yZXRyaWV2ZWRfcm93cyA9IGlubmVycmVs LT5yb3dzOworCQlmcGluZm9faS0+cmVsX3N0YXJ0dXBfY29zdCA9IDA7CisJCWZwaW5mb19pLT5y ZWxfdG90YWxfY29zdCA9IDA7CisKKwkJY2xhc3NpZnlDb25kaXRpb25zKHJvb3QsIGlubmVycmVs LCBmcGluZm8sIGlubmVycmVsLT5iYXNlcmVzdHJpY3RpbmZvLAorCQkJCQkJICAgJmZwaW5mb19p LT5yZW1vdGVfY29uZHMsICZmcGluZm9faS0+bG9jYWxfY29uZHMpOworCQlmcGluZm8tPmlubmVy X2Z1bmNfZnBpbmZvID0gZnBpbmZvX2k7CisJfQorCWVsc2UgaWYgKG91dGVyX2lzX2Z1bmN0aW9u KQorCXsKKwkJZnBpbmZvX28gPSBwYWxsb2MwX29iamVjdChQZ0Zkd1JlbGF0aW9uSW5mbyk7CisJ CWZwaW5mb19vLT5wdXNoZG93bl9zYWZlID0gdHJ1ZTsKKwkJZnBpbmZvX28tPnNlcnZlciA9IGZw aW5mb19pLT5zZXJ2ZXI7CisJCWZwaW5mb19vLT5yZWxhdGlvbl9uYW1lID0gcHNwcmludGYoIiV1 Iiwgb3V0ZXJyZWwtPnJlbGlkKTsKKwkJZnBpbmZvX28tPnJvd3MgPSBvdXRlcnJlbC0+cm93czsK KwkJZnBpbmZvX28tPndpZHRoID0gb3V0ZXJyZWwtPnJlbHRhcmdldC0+d2lkdGg7CisJCWZwaW5m b19vLT5yZXRyaWV2ZWRfcm93cyA9IG91dGVycmVsLT5yb3dzOworCQlmcGluZm9fby0+cmVsX3N0 YXJ0dXBfY29zdCA9IDA7CisJCWZwaW5mb19vLT5yZWxfdG90YWxfY29zdCA9IDA7CisKKwkJY2xh c3NpZnlDb25kaXRpb25zKHJvb3QsIG91dGVycmVsLCBmcGluZm8sIG91dGVycmVsLT5iYXNlcmVz dHJpY3RpbmZvLAorCQkJCQkJICAgJmZwaW5mb19vLT5yZW1vdGVfY29uZHMsICZmcGluZm9fby0+ bG9jYWxfY29uZHMpOworCQlmcGluZm8tPm91dGVyX2Z1bmNfZnBpbmZvID0gZnBpbmZvX287CisJ fQogCiAJLyoKIAkgKiBJZiBqb2luaW5nIHJlbGF0aW9ucyBoYXZlIGxvY2FsIGNvbmRpdGlvbnMs IHRob3NlIGNvbmRpdGlvbnMgYXJlCkBAIC02Njk4LDcgKzcxMTksNyBAQCBmb3JlaWduX2pvaW5f b2soUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsIEpvaW5UeXBlIGpvaW50 eXBlLAogCWZvcmVhY2gobGMsIGV4dHJhLT5yZXN0cmljdGxpc3QpCiAJewogCQlSZXN0cmljdElu Zm8gKnJpbmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsYyk7Ci0JCWJvb2wJCWlzX3Jl bW90ZV9jbGF1c2UgPSBpc19mb3JlaWduX2V4cHIocm9vdCwgam9pbnJlbCwKKwkJYm9vbAkJaXNf cmVtb3RlX2NsYXVzZSA9IGlzX2ZvcmVpZ25fZXhwcihyb290LCBqb2lucmVsLCBmcGluZm8sCiAJ CQkJCQkJCQkJCQkJICAgcmluZm8tPmNsYXVzZSk7CiAKIAkJaWYgKElTX09VVEVSX0pPSU4oam9p bnR5cGUpICYmCkBAIC03Mzk2LDcgKzc4MTcsNyBAQCBmb3JlaWduX2dyb3VwaW5nX29rKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpncm91cGVkX3JlbCwKIAkJCSAqIElmIGFueSBHUk9V UCBCWSBleHByZXNzaW9uIGlzIG5vdCBzaGlwcGFibGUsIHRoZW4gd2UgY2Fubm90CiAJCQkgKiBw dXNoIGRvd24gYWdncmVnYXRpb24gdG8gdGhlIGZvcmVpZ24gc2VydmVyLgogCQkJICovCi0JCQlp ZiAoIWlzX2ZvcmVpZ25fZXhwcihyb290LCBncm91cGVkX3JlbCwgZXhwcikpCisJCQlpZiAoIWlz X2ZvcmVpZ25fZXhwcihyb290LCBncm91cGVkX3JlbCwgZnBpbmZvLCBleHByKSkKIAkJCQlyZXR1 cm4gZmFsc2U7CiAKIAkJCS8qCkBAIC03NDI0LDcgKzc4NDUsNyBAQCBmb3JlaWduX2dyb3VwaW5n X29rKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpncm91cGVkX3JlbCwKIAkJCSAqIE5v bi1ncm91cGluZyBleHByZXNzaW9uIHdlIG5lZWQgdG8gY29tcHV0ZS4gIENhbiB3ZSBzaGlwIGl0 CiAJCQkgKiBhcy1pcyB0byB0aGUgZm9yZWlnbiBzZXJ2ZXI/CiAJCQkgKi8KLQkJCWlmIChpc19m b3JlaWduX2V4cHIocm9vdCwgZ3JvdXBlZF9yZWwsIGV4cHIpICYmCisJCQlpZiAoaXNfZm9yZWln bl9leHByKHJvb3QsIGdyb3VwZWRfcmVsLCBmcGluZm8sIGV4cHIpICYmCiAJCQkJIWlzX2ZvcmVp Z25fcGFyYW0ocm9vdCwgZ3JvdXBlZF9yZWwsIGV4cHIpKQogCQkJewogCQkJCS8qIFllcywgc28g YWRkIHRvIHRsaXN0IGFzLWlzOyBPSyB0byBzdXBwcmVzcyBkdXBsaWNhdGVzICovCkBAIC03NDQ0 LDcgKzc4NjUsNyBAQCBmb3JlaWduX2dyb3VwaW5nX29rKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpncm91cGVkX3JlbCwKIAkJCQkgKiBkb24ndCBoYXZlIHRvIGNoZWNrIGlzX2ZvcmVp Z25fcGFyYW0sIHNpbmNlIHRoYXQgY2VydGFpbmx5CiAJCQkJICogd29uJ3QgcmV0dXJuIHRydWUg Zm9yIGFueSBzdWNoIGV4cHJlc3Npb24uKQogCQkJCSAqLwotCQkJCWlmICghaXNfZm9yZWlnbl9l eHByKHJvb3QsIGdyb3VwZWRfcmVsLCAoRXhwciAqKSBhZ2d2YXJzKSkKKwkJCQlpZiAoIWlzX2Zv cmVpZ25fZXhwcihyb290LCBncm91cGVkX3JlbCwgZnBpbmZvLCAoRXhwciAqKSBhZ2d2YXJzKSkK IAkJCQkJcmV0dXJuIGZhbHNlOwogCiAJCQkJLyoKQEAgLTc0OTYsNyArNzkxNyw3IEBAIGZvcmVp Z25fZ3JvdXBpbmdfb2soUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmdyb3VwZWRfcmVs LAogCQkJCQkJCQkJICBncm91cGVkX3JlbC0+cmVsaWRzLAogCQkJCQkJCQkJICBOVUxMLAogCQkJ CQkJCQkJICBOVUxMKTsKLQkJCWlmIChpc19mb3JlaWduX2V4cHIocm9vdCwgZ3JvdXBlZF9yZWws IGV4cHIpKQorCQkJaWYgKGlzX2ZvcmVpZ25fZXhwcihyb290LCBncm91cGVkX3JlbCwgZnBpbmZv LCBleHByKSkKIAkJCQlmcGluZm8tPnJlbW90ZV9jb25kcyA9IGxhcHBlbmQoZnBpbmZvLT5yZW1v dGVfY29uZHMsIHJpbmZvKTsKIAkJCWVsc2UKIAkJCQlmcGluZm8tPmxvY2FsX2NvbmRzID0gbGFw cGVuZChmcGluZm8tPmxvY2FsX2NvbmRzLCByaW5mbyk7CkBAIC03NTMzLDcgKzc5NTQsNyBAQCBm b3JlaWduX2dyb3VwaW5nX29rKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpncm91cGVk X3JlbCwKIAkJCSAqLwogCQkJaWYgKElzQShleHByLCBBZ2dyZWYpKQogCQkJewotCQkJCWlmICgh aXNfZm9yZWlnbl9leHByKHJvb3QsIGdyb3VwZWRfcmVsLCBleHByKSkKKwkJCQlpZiAoIWlzX2Zv cmVpZ25fZXhwcihyb290LCBncm91cGVkX3JlbCwgZnBpbmZvLCBleHByKSkKIAkJCQkJcmV0dXJu IGZhbHNlOwogCiAJCQkJdGxpc3QgPSBhZGRfdG9fZmxhdF90bGlzdCh0bGlzdCwgbGlzdF9tYWtl MShleHByKSk7CkBAIC04MDQ2LDggKzg0NjcsOCBAQCBhZGRfZm9yZWlnbl9maW5hbF9wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCSAqIEFsc28sIHRoZSBM SU1JVC9PRkZTRVQgY2Fubm90IGJlIHB1c2hlZCBkb3duLCBpZiB0aGVpciBleHByZXNzaW9ucyBh cmUKIAkgKiBub3Qgc2FmZSB0byByZW1vdGUuCiAJICovCi0JaWYgKCFpc19mb3JlaWduX2V4cHIo cm9vdCwgaW5wdXRfcmVsLCAoRXhwciAqKSBwYXJzZS0+bGltaXRPZmZzZXQpIHx8Ci0JCSFpc19m b3JlaWduX2V4cHIocm9vdCwgaW5wdXRfcmVsLCAoRXhwciAqKSBwYXJzZS0+bGltaXRDb3VudCkp CisJaWYgKCFpc19mb3JlaWduX2V4cHIocm9vdCwgaW5wdXRfcmVsLCBpZnBpbmZvLCAoRXhwciAq KSBwYXJzZS0+bGltaXRPZmZzZXQpIHx8CisJCSFpc19mb3JlaWduX2V4cHIocm9vdCwgaW5wdXRf cmVsLCBpZnBpbmZvLCAoRXhwciAqKSBwYXJzZS0+bGltaXRDb3VudCkpCiAJCXJldHVybjsKIAog CS8qIFNhZmUgdG8gcHVzaCBkb3duICovCkBAIC04NjkzLDcgKzkxMTQsNyBAQCBmaW5kX2VtX2Zv cl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIEVxdWl2YWxlbmNlQ2xhc3MgKmVjLCBSZWxPcHRJbmZv ICpyZWwpCiAJCWlmIChibXNfaXNfc3Vic2V0KGVtLT5lbV9yZWxpZHMsIHJlbC0+cmVsaWRzKSAm JgogCQkJIWJtc19pc19lbXB0eShlbS0+ZW1fcmVsaWRzKSAmJgogCQkJYm1zX2lzX2VtcHR5KGJt c19pbnRlcnNlY3QoZW0tPmVtX3JlbGlkcywgZnBpbmZvLT5oaWRkZW5fc3VicXVlcnlfcmVscykp ICYmCi0JCQlpc19mb3JlaWduX2V4cHIocm9vdCwgcmVsLCBlbS0+ZW1fZXhwcikpCisJCQlpc19m b3JlaWduX2V4cHIocm9vdCwgcmVsLCBmcGluZm8sIGVtLT5lbV9leHByKSkKIAkJCXJldHVybiBl bTsKIAl9CiAKQEAgLTg3NjQsNyArOTE4NSw3IEBAIGZpbmRfZW1fZm9yX3JlbF90YXJnZXQoUGxh bm5lckluZm8gKnJvb3QsIEVxdWl2YWxlbmNlQ2xhc3MgKmVjLAogCQkJCWNvbnRpbnVlOwogCiAJ CQkvKiBDaGVjayB0aGF0IGV4cHJlc3Npb24gKGluY2x1ZGluZyByZWxhYmVscyEpIGlzIHNoaXBw YWJsZSAqLwotCQkJaWYgKGlzX2ZvcmVpZ25fZXhwcihyb290LCByZWwsIGVtLT5lbV9leHByKSkK KwkJCWlmIChpc19mb3JlaWduX2V4cHIocm9vdCwgcmVsLCByZWwtPmZkd19wcml2YXRlLCBlbS0+ ZW1fZXhwcikpCiAJCQkJcmV0dXJuIGVtOwogCQl9CiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9z dGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5oIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNf ZmR3LmgKaW5kZXggYTJiYjFmZjM1MmMuLmRhN2RhMWMyZWE5IDEwMDY0NAotLS0gYS9jb250cmli L3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9w b3N0Z3Jlc19mZHcuaApAQCAtMTA2LDYgKzEwNiwxNiBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Zkd1Jl bGF0aW9uSW5mbwogCS8qIGpvaW5jbGF1c2VzIGNvbnRhaW5zIG9ubHkgSk9JTi9PTiBjb25kaXRp b25zIGZvciBhbiBvdXRlciBqb2luICovCiAJTGlzdAkgICAqam9pbmNsYXVzZXM7CS8qIExpc3Qg b2YgUmVzdHJpY3RJbmZvICovCiAKKwkvKgorCSAqIElmIGEgRlVOQ1RJT04gUlRFIHdhcyBhYnNv cmJlZCBpbnRvIHRoaXMgam9pbiwgdGhlc2UgcG9pbnQgYXQgdGhlIHN0dWIKKwkgKiBQZ0Zkd1Jl bGF0aW9uSW5mbyBmb3IgdGhlIGZ1bmN0aW9uIHNpZGUgKHBhaXJlZCB3aXRoIHRoZQorCSAqIG91 dGVycmVsL2lubmVycmVsKSwgc28gdGhlIGNvc3QgZXN0aW1hdG9yIGFuZCBkZXBhcnNlciBjYW4g ZmluZCBpdAorCSAqIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgZnVuY3Rpb24gcmVsJ3MgZmR3X3By aXZhdGUuICBBdCBtb3N0IG9uZSBvZgorCSAqIG91dGVyX2Z1bmNfZnBpbmZvL2lubmVyX2Z1bmNf ZnBpbmZvIGlzIHNldC4KKwkgKi8KKwlzdHJ1Y3QgUGdGZHdSZWxhdGlvbkluZm8gKm91dGVyX2Z1 bmNfZnBpbmZvOworCXN0cnVjdCBQZ0Zkd1JlbGF0aW9uSW5mbyAqaW5uZXJfZnVuY19mcGluZm87 CisKIAkvKiBVcHBlciByZWxhdGlvbiBpbmZvcm1hdGlvbiAqLwogCVVwcGVyUmVsYXRpb25LaW5k IHN0YWdlOwogCkBAIC0xODMsMTEgKzE5MywxMyBAQCBleHRlcm4gY2hhciAqcGdmZHdfYXBwbGlj YXRpb25fbmFtZTsKIC8qIGluIGRlcGFyc2UuYyAqLwogZXh0ZXJuIHZvaWQgY2xhc3NpZnlDb25k aXRpb25zKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCSAgIFJlbE9wdEluZm8gKmJhc2VyZWws CisJCQkJCQkJICAgUGdGZHdSZWxhdGlvbkluZm8gKmZwaW5mbywKIAkJCQkJCQkgICBMaXN0ICpp bnB1dF9jb25kcywKIAkJCQkJCQkgICBMaXN0ICoqcmVtb3RlX2NvbmRzLAogCQkJCQkJCSAgIExp c3QgKipsb2NhbF9jb25kcyk7CiBleHRlcm4gYm9vbCBpc19mb3JlaWduX2V4cHIoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQkJCQkJUmVsT3B0SW5mbyAqYmFzZXJlbCwKKwkJCQkJCQlQZ0Zkd1JlbGF0 aW9uSW5mbyAqZnBpbmZvLAogCQkJCQkJCUV4cHIgKmV4cHIpOwogZXh0ZXJuIGJvb2wgaXNfZm9y ZWlnbl9wYXJhbShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkgUmVsT3B0SW5mbyAqYmFzZXJl bCwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3Fs IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5kZXggMjY3ZDNj MWE3ZTcuLjc5ODhiZWM0ZGY3IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwv cG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNf ZmR3LnNxbApAQCAtNzkwLDYgKzc5MCwyMjggQEAgU0VMRUNUIHQxLmMxLCB0Mi5jMiBGUk9NIHY0 IHQxIExFRlQgSk9JTiBmdDUgdDIgT04gKHQxLmMxID0gdDIuYzEpIE9SREVSIEJZIHQxLmMKIFNF TEVDVCB0MS5jMSwgdDIuYzIgRlJPTSB2NCB0MSBMRUZUIEpPSU4gZnQ1IHQyIE9OICh0MS5jMSA9 IHQyLmMxKSBPUkRFUiBCWSB0MS5jMSwgdDIuYzEgT0ZGU0VUIDEwIExJTUlUIDEwOwogQUxURVIg VklFVyB2NCBPV05FUiBUTyByZWdyZXNzX3ZpZXdfb3duZXI7CiAKKy0tID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t IEZvcmVpZ24tam9pbiB3aXRoIEZVTkNUSU9OIFJURSBwdXNoZG93biAoSU1NVVRBQkxFIGZ1bmN0 aW9ucyBvbmx5KQorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gSU1NVVRBQkxFIGZ1bmN0aW9uOiB1bm5lc3Qg b2YgY29uc3RhbnQgYXJyYXkgY2FuIGJlIHB1c2hlZCBkb3duCitFWFBMQUlOIChWRVJCT1NFLCBD T1NUUyBPRkYpCitTRUxFQ1QgdDEuYzEsIHQxLmMzIEZST00gZnQxIHQxLCB1bm5lc3QoQVJSQVlb MSwgNSwgMTAsIDEwMF06OmludFtdKSBBUyB1KGlkKQorV0hFUkUgdDEuYzEgPSB1LmlkIE9SREVS IEJZIHQxLmMxOworU0VMRUNUIHQxLmMxLCB0MS5jMyBGUk9NIGZ0MSB0MSwgdW5uZXN0KEFSUkFZ WzEsIDUsIDEwLCAxMDBdOjppbnRbXSkgQVMgdShpZCkKK1dIRVJFIHQxLmMxID0gdS5pZCBPUkRF UiBCWSB0MS5jMTsKKworLS0gSU1NVVRBQkxFIGZ1bmN0aW9uOiBnZW5lcmF0ZV9zZXJpZXMgd2l0 aCBjb25zdGFudCBhcmdzCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEu YzEgRlJPTSBmdDEgdDEsIGdlbmVyYXRlX3NlcmllcygxLCA0KSBBUyBnKGlkKQorV0hFUkUgdDEu YzEgPSBnLmlkIE9SREVSIEJZIHQxLmMxOworU0VMRUNUIHQxLmMxIEZST00gZnQxIHQxLCBnZW5l cmF0ZV9zZXJpZXMoMSwgNCkgQVMgZyhpZCkKK1dIRVJFIHQxLmMxID0gZy5pZCBPUkRFUiBCWSB0 MS5jMTsKKworLS0gVk9MQVRJTEUgZnVuY3Rpb24gKHJhbmRvbSkgbXVzdCBOT1QgYmUgcHVzaGVk IGRvd24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5jMSBGUk9NIGZ0 MSB0MSwgZ2VuZXJhdGVfc2VyaWVzKDEsIDQgKyAocmFuZG9tKCkgKiAwKTo6aW50KSBBUyBnKGlk KQorV0hFUkUgdDEuYzEgPSBnLmlkOworCistLSBXSVRIIE9SRElOQUxJVFkgbXVzdCBOT1QgYmUg cHVzaGVkIGRvd24gKGxpbWl0YXRpb24gb2YgdGhpcyBpbXBsZW1lbnRhdGlvbikKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5jMSwgdS5vcmQKK0ZST00gZnQxIHQxLCB1 bm5lc3QoQVJSQVlbMSwgNSwgMTBdOjppbnRbXSkgV0lUSCBPUkRJTkFMSVRZIEFTIHUoaWQsIG9y ZCkKK1dIRVJFIHQxLmMxID0gdS5pZDsKKworLS0gU2FtZSBmdW5jdGlvbiBSVEUgam9pbmVkIHdp dGggdHdvIGRpZmZlcmVudCBmb3JlaWduIHNlcnZlcnM6IHBsYW5uZXIgcGlja3MKKy0tIG9uZSBh YnNvcnB0aW9uICsgYSBsb2NhbCBqb2luIHdpdGggdGhlIHNlY29uZCBmb3JlaWduIHNlcnZlci4g IFRoZSBmYWN0CistLSB0aGF0IHRoZSBmdW5jdGlvbiBpcyBJTU1VVEFCTEUgbWFrZXMgdGhpcyBz YWZlIGV2ZW4gaWYgYm90aCBzaWRlcyBjaG9zZSB0bworLS0gYWJzb3JiIGl0IGluZGVwZW5kZW50 bHkuCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYzEsIHQyLmMxCitG Uk9NIGZ0MSB0MSwgZnQ2IHQyLCB1bm5lc3QoQVJSQVlbMSwgNSwgMTAsIDEwMF06OmludFtdKSBB UyB1KGlkKQorV0hFUkUgdDEuYzEgPSB1LmlkIEFORCB0Mi5jMSA9IHUuaWQgT1JERVIgQlkgdDEu YzE7CisKKy0tIENvc3QtYmFzZWQgc2VsZWN0aW9uIGJldHdlZW4gdHdvIGZvcmVpZ24gc2VydmVy czogZnQxICgiUyAxIi4iVCAxIikgaGFzCistLSAxMDAwIHJvd3MsIGZ0NiAoIlMgMSIuIlQgNCIp IGhhcyB+MzMgcm93cy4gIFRoZSBzYW1lIHF1ZXJ5IHNoYXBlIGdldHMgYQorLS0gZGlmZmVyZW50 IHB1c2gtZG93biB0YXJnZXQgZGVwZW5kaW5nIG9uIGEgcHJlZGljYXRlIHRoYXQgY2hhbmdlcyB0 aGUKKy0tIGVmZmVjdGl2ZSBjYXJkaW5hbGl0eSBvZiBvbmUgc2lkZSAtLSB0aGUgZnVuY3Rpb24g Imp1bXBzIiB0byB3aGljaGV2ZXIKKy0tIGZvcmVpZ24gc2NhbiBiZW5lZml0cyBtb3JlIGZyb20g YmVpbmcgcHJlLWZpbHRlcmVkLgorQU5BTFlaRSBmdDE7CitBTkFMWVpFIGZ0NjsKKy0tIE5vIGV4 dHJhIHByZWRpY2F0ZTogZnQxIGlzIHRoZSBiaWdnZXIgc2lkZSwgZnVuY3Rpb24gYWJzb3JiZWQg dGhlcmUuCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYzEsIHQyLmMx CitGUk9NIGZ0MSB0MSwgZnQ2IHQyLCB1bm5lc3QoQVJSQVlbMywgNiwgOSwgMTIsIDE1LCAxOF06 OmludFtdKSBBUyB1KGlkKQorV0hFUkUgdDEuYzEgPSB1LmlkIEFORCB0Mi5jMSA9IHUuaWQ7Cist LSBTZWxlY3RpdmUgcHJlZGljYXRlIG9uIGZ0MS5jMyAobm90IGluIHRoZSBlcWNsYXNzKSBzaHJp bmtzIGZ0MSB0byBhCistLSBoYW5kZnVsIG9mIHJlbW90ZSByb3dzOyBub3cgZnQ2IGlzIGVmZmVj dGl2ZWx5IHRoZSBiaWdnZXIgc2lkZSBhbmQgdGhlCistLSBmdW5jdGlvbiBpcyBhYnNvcmJlZCBp bnRvIGZ0NiBpbnN0ZWFkLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQx LmMxLCB0Mi5jMQorRlJPTSBmdDEgdDEsIGZ0NiB0MiwgdW5uZXN0KEFSUkFZWzMsIDYsIDksIDEy LCAxNSwgMThdOjppbnRbXSkgQVMgdShpZCkKK1dIRVJFIHQxLmMxID0gdS5pZCBBTkQgdDIuYzEg PSB1LmlkIEFORCB0MS5jMyA8ICcwMDAxMCc7CisKKy0tIFRoZSByZW1haW5pbmcgc2NlbmFyaW9z IHJldXNlIGEgZGVkaWNhdGVkIGZvcmVpZ24gdGFibGUgdG8gY292ZXIgdGhlCistLSBjb3JuZXIg Y2FzZXMgb2YgRlVOQ1RJT04gUlRFIHB1c2gtZG93bjogZnVuY3Rpb24tZmlyc3QgRlJPTSwgcmVj b3JkCistLSByZXR1cm4gdHlwZSByZWplY3Rpb24sIHdob2xlLXJvdyByZWZlcmVuY2UsIFVQREFU RS4uLkZST00uLi4sIGFuZAorLS0gbXVsdGktZnVuY3Rpb24gUk9XUyBGUk9NLgorQ1JFQVRFIFRB QkxFIGJhc2VfdGJsX2ZuIChhIGludCwgYiBpbnQpOworSU5TRVJUIElOVE8gYmFzZV90YmxfZm4K KyAgU0VMRUNUIGcsIGcgKyAxMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMzApIGc7CitDUkVB VEUgRk9SRUlHTiBUQUJMRSByZW1vdGVfdGJsIChhIGludCwgYiBpbnQpCisgIFNFUlZFUiBsb29w YmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlX3RibF9mbicpOworCistLSBUaGUgZnVuY3Rp b24gUlRFIGFwcGVhcnMgZmlyc3QgaW4gRlJPTTsgdGhlIGZvcmVpZ24gcmVsYXRpb24gbXVzdCBi ZQorLS0gZm91bmQgYnkgc2Nhbm5pbmcgZnNfYmFzZV9yZWxpZHMgZm9yIGFuIFJURV9SRUxBVElP TiByYXRoZXIgdGhhbgorLS0gdXNpbmcgc2Nhbi0+ZnNfcmVsaWQgYmxpbmRseS4KK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdW5uZXN0KGFycmF5WzIsIDMsIDRd KSBuLCByZW1vdGVfdGJsIHIgV0hFUkUgci5hID0gbjsKK1NFTEVDVCAqIEZST00gdW5uZXN0KGFy cmF5WzIsIDMsIDRdKSBuLCByZW1vdGVfdGJsIHIKK1dIRVJFIHIuYSA9IG4gT1JERVIgQlkgci5h OworCistLSBGdW5jdGlvbiBSVEUgaXMgcmVzdHJpY3RlZCwgc2hpcHBhYmxlIGNvbmRpdGlvbnMK K0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gdW5uZXN0KGFycmF5 WzIsIDMsIDRdKSBuLCByZW1vdGVfdGJsIHIgV0hFUkUgci5hID0gbiBhbmQgbiA+IDM7CitTRUxF Q1QgKiBGUk9NIHVubmVzdChhcnJheVsyLCAzLCA0XSkgbiwgcmVtb3RlX3RibCByCitXSEVSRSBy LmEgPSBuIGFuZCBuID4gMyBPUkRFUiBCWSByLmE7CisKKy0tIEZ1bmN0aW9uIFJURSBpcyByZXN0 cmljdGVkLCBub25zaGlwcGFibGUgY29uZGl0aW9ucworQ1JFQVRFIEZVTkNUSU9OIGZfbG9jYWwo aW50KSBSRVRVUk5TIGludCBBUyAkJAorQkVHSU4KK1JFVFVSTiAkMTsKK0VORAorJCQgTEFOR1VB R0UgcGxwZ3NxbDsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSB1bm5lc3QoYXJyYXlbMiwgMywgNF0pIG4sIHJlbW90ZV90YmwgciBXSEVSRSByLmEgPSBuIGFu ZCBuID4gZl9sb2NhbCgzKTsKK1NFTEVDVCAqIEZST00gdW5uZXN0KGFycmF5WzIsIDMsIDRdKSBu LCByZW1vdGVfdGJsIHIKK1dIRVJFIHIuYSA9IG4gYW5kIG4gPiBmX2xvY2FsKDMpIE9SREVSIEJZ IHIuYTsKKworRFJPUCBGVU5DVElPTiBmX2xvY2FsKGludCk7CisKKy0tIEEgZnVuY3Rpb24gcmV0 dXJuaW5nIHJlY29yZCAoY29tcG9zaXRlKSBpcyBmb3JiaWRkZW47IHB1c2hpbmcgaXQKKy0tIHdv dWxkIHlpZWxkIGEgcmVtb3RlICJjb2x1bW4gZGVmaW5pdGlvbiBsaXN0IGlzIHJlcXVpcmVkIiBl cnJvci4KKy0tIGZ1bmN0aW9uX3J0ZV9wdXNoZG93bl9vaygpIHJlamVjdHMgaXQgdmlhIFRZUEVG VU5DX1NDQUxBUi4KK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZfcmV0X3JlY29yZCgpIFJF VFVSTlMgcmVjb3JkIEFTICQkCisgIFNFTEVDVCAoMSwgMik6OnJlY29yZAorJCQgTEFOR1VBR0Ug U1FMIElNTVVUQUJMRTsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCBzIEZS T00gcmVtb3RlX3RibCBydCwgZl9yZXRfcmVjb3JkKCkgQVMgcyhhIGludCwgYiBpbnQpCitXSEVS RSBzLmEgPSBydC5hOworRFJPUCBGVU5DVElPTiBmX3JldF9yZWNvcmQoKTsKKworLS0gVVBEQVRF IC4uLiBGUk9NIHVubmVzdCgpIHdpdGggYSBjb21wbGV4IGVsZW1lbnQgdHlwZTsgYXJlYShib3gp CistLSB5aWVsZHMgdGhlIHZhbHVlIHRvIG1hdGNoLiAgVGhlIGxvY2tpbmcgbWFjaGluZXJ5IGZv ciB0aGUKKy0tIG5vbi1yZWxhdGlvbiBSVEUgZ2VuZXJhdGVzIGEgd2hvbGUtcm93IFZhciB0aGF0 IGRlcGFyc2VDb2x1bW5SZWYKKy0tIGVtaXRzIGFzIFJPVyhmPHJ0aT4uYzEsIC4uLikuCitVUERB VEUgcmVtb3RlX3RibCByIFNFVCBiID0gOTk5CitGUk9NIHVubmVzdChhcnJheVtib3ggJygoMiwz KSwoLTIsLTMpKSddKSBBUyB0KGJ4KQorV0hFUkUgci5hID0gYXJlYSh0LmJ4KTsKK1NFTEVDVCAq IEZST00gcmVtb3RlX3RibCBXSEVSRSBhIElOICgyMywgMjQsIDI1KSBPUkRFUiBCWSBhOworCist LSBUaGUgc2FtZSBzaGFwZSB3aXRoIENBU0UgYW5kIFJFVFVSTklORzsgZXhlcmNpc2VzIHRoZSBE aXJlY3RNb2RpZnkKKy0tIHBhdGggYW5kIHRoZSBleGVjdXRvcidzIHR1cGxlLWRlc2MgcmVjb25z dHJ1Y3Rpb24uCitVUERBVEUgcmVtb3RlX3RibCByCisgICBTRVQgYiA9IENBU0UgV0hFTiByYW5k b20oKSA+PSAwIFRIRU4gNSBFTFNFIDAgRU5ECisgIEZST00gdW5uZXN0KGFycmF5W2JveCAnKCgy LDMpLCgtMiwtMykpJ10pIEFTIHQoYngpCisgV0hFUkUgci5hID0gYXJlYSh0LmJ4KSBSRVRVUk5J TkcgYSwgYjsKKworLS0gUkVUVVJOSU5HIGEgd2hvbGUtcm93IHJlZmVyZW5jZSB0byB0aGUgZnVu Y3Rpb24gUlRFLiAgV2l0aG91dCB0aGUKKy0tIHBlci1SVEUgZnVuY3Rpb24gbWV0YWRhdGEgYmVp bmcgcHJlc2VydmVkIG9uIHRoZSBEaXJlY3RNb2RpZnkgcGF0aAorLS0gKEZkd0RpcmVjdE1vZGlm eVByaXZhdGVGdW5jdGlvbnMgLyBGZHdEaXJlY3RNb2RpZnlQcml2YXRlTWluUlRJbmRleCksCist LSB0aGlzIHdvdWxkIGZhaWwgd2l0aCAiaW5wdXQgb2YgYW5vbnltb3VzIGNvbXBvc2l0ZSB0eXBl cyBpcyBub3QKKy0tIGltcGxlbWVudGVkIi4KK1VQREFURSByZW1vdGVfdGJsIHIgU0VUIGIgPSA3 CisgIEZST00gdW5uZXN0KGFycmF5W2JveCAnKCgyLDMpLCgtMiwtMykpJ10sCisgICAgICAgICAg ICAgIGFycmF5W2ludCAnMSddKSBBUyB0KGJ4LCBpKQorIFdIRVJFIHIuYSA9IGFyZWEodC5ieCkg UkVUVVJOSU5HIGEsIGIsIHQ7CisKKy0tIFJPV1MgRlJPTSAoLi4uKSB3aXRoIHNldmVyYWwgZnVu Y3Rpb25zLiAgRm9yY2UgcHVzaGRvd24gYmVjYXVzZSB0aGUKKy0tIGNvc3QgbW9kZWwgb3RoZXJ3 aXNlIHBpY2tzIGEgbG9jYWwgcGxhbi4KK1NFVCBlbmFibGVfaGFzaGpvaW4gPSBvZmY7CitTRVQg ZW5hYmxlX21lcmdlam9pbiA9IG9mZjsKK1NFVCBlbmFibGVfbmVzdGxvb3AgPSBvZmY7CitFWFBM QUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1Qgci5hLCB0Lm4sIHQucworICBGUk9NIHJl bW90ZV90YmwgciwgUk9XUyBGUk9NICh1bm5lc3QoYXJyYXlbMywgNiwgOV0pLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMTEsIDEzKSkgQVMgdChuLCBz KQorIFdIRVJFIHIuYSA9IHQubiBPUkRFUiBCWSByLmE7CitTRUxFQ1Qgci5hLCB0Lm4sIHQucwor ICBGUk9NIHJlbW90ZV90YmwgciwgUk9XUyBGUk9NICh1bm5lc3QoYXJyYXlbMywgNiwgOV0pLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9zZXJpZXMoMTEsIDEzKSkg QVMgdChuLCBzKQorIFdIRVJFIHIuYSA9IHQubiBPUkRFUiBCWSByLmE7CisKKy0tIFdob2xlLXJv dyBWYXIgb24gdGhlIGFic29yYmVkIGZ1bmN0aW9uIHNpZGUgKGUuZy4gdmlhIGEgY2FzdCB0bwor LS0gdGV4dCkuICBFeGVyY2lzZXMgYm90aCBkZXBhcnNlQ29sdW1uUmVmIHdob2xlLXJvdyBicmFu Y2ggYW5kIHRoZQorLS0gZ2V0X3R1cGRlc2NfZm9yX2pvaW5fc2Nhbl90dXBsZXMoKSBSVEVfRlVO Q1RJT04gbWV0YWRhdGEgcGF0aC4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCB0Ojp0ZXh0LCByLmEKKyAgRlJPTSByZW1vdGVfdGJsIHIsIFJPV1MgRlJPTSAodW5uZXN0KGFy cmF5WzMsIDYsIDldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVf c2VyaWVzKDExLCAxMykpIEFTIHQobiwgcykKKyBXSEVSRSByLmEgPSB0Lm4gT1JERVIgQlkgci5h OworU0VMRUNUIHQ6OnRleHQsIHIuYQorICBGUk9NIHJlbW90ZV90YmwgciwgUk9XUyBGUk9NICh1 bm5lc3QoYXJyYXlbMywgNiwgOV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn ZW5lcmF0ZV9zZXJpZXMoMTEsIDEzKSkgQVMgdChuLCBzKQorIFdIRVJFIHIuYSA9IHQubiBPUkRF UiBCWSByLmE7CisKKy0tIENoZWNrIHdob2xlLXJvdyBWYXIgcmVwcmVzZW50ZWQgYnkgZnVuY3Rp b24gb24gdGhlIG51bGxhYmxlCistLSBsZWZ0IGpvaW4gc2lkZQorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUIHUsIGZ0NS5jMSwgZnQ1LmMyLCBmdDQuYzEsIGZ0NC5jMiBGUk9N IGZ0NSBMRUZUIEpPSU4KKyhmdDQgSk9JTiB1bm5lc3QoYXJyYXlbMSwyXSwgYXJyYXlbMyw0XSkg YXMgdSAodTEsIHUyKSBPTiBmdDQuYzE9dTEpCitPTiBmdDUuYzEgPSBmdDQuYzEgV0hFUkUgZnQ1 LmMxIDwgMTAgT1JERVIgQlkgZnQ1LmMxOworU0VMRUNUIHUsIGZ0NS5jMSwgZnQ1LmMyLCBmdDQu YzEsIGZ0NC5jMiBGUk9NIGZ0NSBMRUZUIEpPSU4KKyhmdDQgSk9JTiB1bm5lc3QoYXJyYXlbMSwy XSwgYXJyYXlbMyw0XSkgYXMgdSAodTEsIHUyKSBPTiBmdDQuYzE9dTEpCitPTiBmdDUuYzEgPSBm dDQuYzEgV0hFUkUgZnQ1LmMxIDwgMTAgT1JERVIgQlkgZnQ1LmMxOworUkVTRVQgZW5hYmxlX2hh c2hqb2luOworUkVTRVQgZW5hYmxlX21lcmdlam9pbjsKK1JFU0VUIGVuYWJsZV9uZXN0bG9vcDsK KworLS0gQ2hlY2sgZm9yZWlnbiBqb2luIHdpdGggcGFyYW1ldGVyaXplZCBmdW5jdGlvbgorQ1JF QVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZihpbnQpIFJFVFVSTlMgU0VUT0YgaW50IExBTkdVQUdF IHBscGdzcWwgUk9XUyAxMCBBUyAnQkVHSU4gUkVUVVJOIFFVRVJZIFNFTEVDVCBnZW5lcmF0ZV9z ZXJpZXMoMSwkMSkgOyBFTkQnIElNTVVUQUJMRTsKK0FMVEVSIEVYVEVOU0lPTiBwb3N0Z3Jlc19m ZHcgQUREIEZVTkNUSU9OIGYoSU5URUdFUik7CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikKK1dJVEggcyBBUyBNQVRFUklBTElaRUQgKFNFTEVDVCByMS4qIEZST00gcmVtb3RlX3RibCBy MQorSk9JTiBMQVRFUkFMCisoU0VMRUNUIHIyLmEgRlJPTSByZW1vdGVfdGJsIHIyLCBmKHIxLmEp IExJTUlUIDEpIHMKK09OIHRydWUpCitTRUxFQ1QgKiBGUk9NIHMgT1JERVIgQlkgMTsKK1dJVEgg cyBBUyBNQVRFUklBTElaRUQgKFNFTEVDVCByMS4qIEZST00gcmVtb3RlX3RibCByMQorSk9JTiBM QVRFUkFMCisoU0VMRUNUIHIyLmEgRlJPTSByZW1vdGVfdGJsIHIyLCBmKHIxLmEpIExJTUlUIDEp IHMKK09OIHRydWUpCitTRUxFQ1QgKiBGUk9NIHMgT1JERVIgQlkgMTsKKworQUxURVIgRVhURU5T SU9OIHBvc3RncmVzX2ZkdyBEUk9QIEZVTkNUSU9OIGYoSU5URUdFUik7CitEUk9QIEZVTkNUSU9O IGYoSU5URUdFUik7CisKKy0tIFZvbGF0aWxlIGZ1bmN0aW9uIGluIFJPV1MgRlJPTSBkaXNxdWFs aWZpZXMgdGhlIHdob2xlIFJURS4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCByLmEgRlJPTSByZW1vdGVfdGJsIHIsCisgICAgICAgICAgICAgICAgUk9XUyBGUk9NICh1bm5l c3QoYXJyYXlbMywgNiwgOV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVf c2VyaWVzKDEsIDQgKyAocmFuZG9tKCkgKiAwKTo6aW50KSkgQVMgdChuLCBzKQorIFdIRVJFIHIu YSA9IHQubjsKKworLS0gTEFURVJBTCBmdW5jdGlvbiByZWZlcmVuY2luZyBhIGZvcmVpZ24gVmFy OiBwb3N0Z3Jlc19mZHcncworLS0gZm9yZWlnbi1qb2luIHB1c2hkb3duIHJlamVjdHMgdGhpcyB2 aWEgdGhlIGpvaW5yZWwtPmxhdGVyYWxfcmVsaWRzCistLSBjaGVjazsgdGhlIHBsYW4gaXMgdGhl cmVmb3JlIGEgbG9jYWwgTmVzdExvb3AgKyBGdW5jdGlvblNjYW4uCitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpCitTRUxFQ1Qgci5hLCB0LnggRlJPTSByZW1vdGVfdGJsIHIsIExBVEVSQUwg dW5uZXN0KGFycmF5W3IuYV0pIEFTIHQoeCkKK1dIRVJFIHIuYSA8PSAzIE9SREVSIEJZIHIuYTsK KworLS0gT3V0ZXIgam9pbnMgd2l0aCB0aGUgZnVuY3Rpb24gUlRFIGFyZSBub3QgcHVzaGVkIGRv d24gKG9ubHkgSU5ORVIKKy0tIGpvaW5zIGFyZSBzdXBwb3J0ZWQgYnkgZnVuY3Rpb25fcnRlX3B1 c2hkb3duX29rKCkpLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHIuYSwg dC5uIEZST00gcmVtb3RlX3RibCByCisgICAgIExFRlQgSk9JTiB1bm5lc3QoYXJyYXlbMSwgMiwg M10pIEFTIHQobikgT04gci5hID0gdC5uCisgV0hFUkUgci5hIDw9IDUgT1JERVIgQlkgci5hOwor CistLSBTRU1JIGpvaW4gKEVYSVNUUykgd2l0aCBhIGZ1bmN0aW9uIFJURSBpcyBhbHNvIG5vdCBw dXNoZWQgZG93bi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCByLmEgRlJP TSByZW1vdGVfdGJsIHIKKyBXSEVSRSBFWElTVFMgKFNFTEVDVCAxIEZST00gdW5uZXN0KGFycmF5 WzMsIDYsIDldKSBBUyB0KG4pIFdIRVJFIHQubiA9IHIuYSkKKyBPUkRFUiBCWSByLmE7CisKK0RS T1AgRk9SRUlHTiBUQUJMRSByZW1vdGVfdGJsOworRFJPUCBUQUJMRSBiYXNlX3RibF9mbjsKKwog LS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KIC0tIENoZWNrIHRoYXQgdXNlcmlkIHRvIHVzZSB3aGVuIHF1ZXJ5aW5n IHRoZSByZW1vdGUgdGFibGUgaXMgY29ycmVjdGx5CiAtLSBwcm9wYWdhdGVkIGludG8gZm9yZWln biByZWxzIHByZXNlbnQgaW4gc3VicXVlcmllcyB1bmRlciBhbiBVTklPTiBBTEwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCAzZmMyYzJmNzFkMC4uZjIxYWUxYmFlYjIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTc0Niw2ICs3NDYsMzAgQEAgc2V0 X2ZvcmVpZ25fcmVsX3Byb3BlcnRpZXMoUmVsT3B0SW5mbyAqam9pbnJlbCwgUmVsT3B0SW5mbyAq b3V0ZXJfcmVsLAogCQkJam9pbnJlbC0+ZmR3cm91dGluZSA9IG91dGVyX3JlbC0+ZmR3cm91dGlu ZTsKIAkJfQogCX0KKwllbHNlIGlmIChPaWRJc1ZhbGlkKG91dGVyX3JlbC0+c2VydmVyaWQpICYm CisJCQkgaW5uZXJfcmVsLT5ydGVraW5kID09IFJURV9GVU5DVElPTikKKwl7CisJCS8qCisJCSAq IE9uZSBzaWRlIGlzIGEgZm9yZWlnbiByZWxhdGlvbiwgdGhlIG90aGVyIHNpZGUgaXMgYSBmdW5j dGlvbiBSVEUuCisJCSAqIElmIHRoZSBmdW5jdGlvbiBpcyBJTU1VVEFCTEUsIHRoZSBGRFcgY2Fu IGFic29yYiB0aGUgZnVuY3Rpb24gY2FsbAorCQkgKiBpbnRvIHRoZSByZW1vdGUgcXVlcnkgKHRo ZSByZXN1bHQgaXMgaWRlbnRpY2FsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2gKKwkJICogc2VydmVyIGV2 YWx1YXRlcyBpdCkuICBMZXQgdGhlIEZEVyBkZWNpZGUgd2hldGhlciB0aGUgam9pbiBpcworCQkg KiBhY3R1YWxseSBzaGlwcGFibGU7IGhlcmUgd2UganVzdCBwcm9wYWdhdGUgdGhlIEZEVyByb3V0 aW5lIHNvIHRoZQorCQkgKiBGRFcgZ2V0cyBhIGNoYW5jZS4KKwkJICovCisJCWpvaW5yZWwtPnNl cnZlcmlkID0gb3V0ZXJfcmVsLT5zZXJ2ZXJpZDsKKwkJam9pbnJlbC0+dXNlcmlkID0gb3V0ZXJf cmVsLT51c2VyaWQ7CisJCWpvaW5yZWwtPnVzZXJpZGlzY3VycmVudCA9IG91dGVyX3JlbC0+dXNl cmlkaXNjdXJyZW50OworCQlqb2lucmVsLT5mZHdyb3V0aW5lID0gb3V0ZXJfcmVsLT5mZHdyb3V0 aW5lOworCX0KKwllbHNlIGlmIChPaWRJc1ZhbGlkKGlubmVyX3JlbC0+c2VydmVyaWQpICYmCisJ CQkgb3V0ZXJfcmVsLT5ydGVraW5kID09IFJURV9GVU5DVElPTikKKwl7CisJCWpvaW5yZWwtPnNl cnZlcmlkID0gaW5uZXJfcmVsLT5zZXJ2ZXJpZDsKKwkJam9pbnJlbC0+dXNlcmlkID0gaW5uZXJf cmVsLT51c2VyaWQ7CisJCWpvaW5yZWwtPnVzZXJpZGlzY3VycmVudCA9IGlubmVyX3JlbC0+dXNl cmlkaXNjdXJyZW50OworCQlqb2lucmVsLT5mZHdyb3V0aW5lID0gaW5uZXJfcmVsLT5mZHdyb3V0 aW5lOworCX0KIH0KIAogLyoKLS0gCjIuNDMuMAoK --=_b4977fe68c5641a48bd9248e7fbae515--