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.94.2) (envelope-from ) id 1tpsQQ-00Dbga-3I for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Mar 2025 17:20:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tpsQO-00H4w2-Ri for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Mar 2025 17:20:52 +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.94.2) (envelope-from ) id 1tpsQO-00H4uL-AN for pgsql-hackers@lists.postgresql.org; Wed, 05 Mar 2025 17:20:52 +0000 Received: from smtp-fw-80006.amazon.com ([99.78.197.217]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tpsQI-0018jx-2n for pgsql-hackers@postgresql.org; Wed, 05 Mar 2025 17:20:51 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1741195248; x=1772731248; h=from:to:subject:date:message-id:references:mime-version; bh=U8YzbKlGH2AFAO+LhIAH6LgCdnY9qD3Iixi2zB+U4Jo=; b=af05zdevDYMzc150EGNmITHK09wQdOx/rOXW8RDgCG+rfOC1X7sbu23Q dKZhZcxIHqg7swMacN9K85fiLiqBzP51RRrKIsZGL9CwN4YbVnRN/sZmw rdiAwIQOiBSx88V7uljvw2OoGS4+wJ8jAcZc/OTSx4IK/jL0Mmm+USuuv k=; X-Amazon-filename: v10-0001-Expand-HOT-update-path-to-include-expression-and.patch X-Secure-Attach-Ingestion: ProdSecureAttachHeaderAddedFromMessageFilter X-IronPort-AV: E=Sophos;i="6.14,223,1736812800"; d="scan'208,223";a="28744549" Received: from pdx4-co-svc-p1-lb2-vlan3.amazon.com (HELO smtpout.prod.us-east-1.prod.farcaster.email.amazon.dev) ([10.25.36.214]) by smtp-border-fw-80006.pdx80.corp.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Mar 2025 17:20:35 +0000 Received: from EX19MTAUEA002.ant.amazon.com [10.0.0.204:50985] by smtpin.naws.us-east-1.prod.farcaster.email.amazon.dev [10.0.45.47:2525] with esmtp (Farcaster) id 49b4a7b4-549b-4cd4-a01d-2917ae7df5ad; Wed, 5 Mar 2025 17:20:34 +0000 (UTC) X-Farcaster-Flow-ID: 49b4a7b4-549b-4cd4-a01d-2917ae7df5ad Received: from EX19D018UEC002.ant.amazon.com (10.252.135.229) by EX19MTAUEA002.ant.amazon.com (10.252.134.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1544.14; Wed, 5 Mar 2025 17:20:34 +0000 Received: from EX19D018UEC003.ant.amazon.com (10.252.135.218) by EX19D018UEC002.ant.amazon.com (10.252.135.229) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1544.14; Wed, 5 Mar 2025 17:20:34 +0000 Received: from EX19D018UEC003.ant.amazon.com ([fe80::ea09:1bf7:c4d8:3004]) by EX19D018UEC003.ant.amazon.com ([fe80::ea09:1bf7:c4d8:3004%3]) with mapi id 15.02.1544.014; Wed, 5 Mar 2025 17:20:34 +0000 From: "Burd, Greg" To: "pgsql-hackers@postgresql.org" Subject: Re: Expanding HOT updates for expression and partial indexes Thread-Topic: Expanding HOT updates for expression and partial indexes Thread-Index: AQHbgjA8Gt6ExU8qBkWj3c8Md8j0Mw== Date: Wed, 5 Mar 2025 17:20:34 +0000 Message-ID: <51C77060-059F-4BB3-8EAF-83F08656F6D2@amazon.com> References: <78574B24-BE0A-42C5-8075-3FA9FA63B8FC@amazon.com> <238EEE41-B206-4590-8C20-DA52C25A2291@amazon.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.136.81.191] Content-Type: multipart/mixed; boundary="_002_51C77060059F4BB38EAF83F08656F6D2amazoncom_" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_51C77060059F4BB38EAF83F08656F6D2amazoncom_ Content-Type: text/plain; charset="us-ascii" Content-ID: <57A471C898B74545B962248FC25847CB@amazon.com> Content-Transfer-Encoding: quoted-printable Hello, I've rebased and updated the patch a bit. The biggest change is that the p= erformance penalty measured with v1 of this patch is essentially gone in v1= 0. The overhead was due to re-creating IndexInfo information unnecessarily= , which I found existed in the estate. I've added a few fields in IndexInf= o that are not populated by default but necessary when checking expression = indexes, those fields are populated on demand and only once limiting their = overhead. =20 Here's what you'll find if you look into execIndexing.c where the majority = of changes happened.=20 * assumes estate->es_result_relations[0] is the ResultRelInfo being updated * uses ri_IndexRelationInfo[] from within estate rather than re-creating it * augments IndexInfo only when needed for testing expressions and only once * only creates a local old/new TupleTableSlot when not present in estate * retains existing summarized index HOT update logic One remaining concern stems from the assumption that estate->es_result_rela= tions[0] is always going to be the relation being updated. This is guarded= by assert()'s in the patch. It seems this is safe, all tests are passing = (including TAP) and my review of the code seems to line up with that assump= tion. That said... opinions? Another lingering question is under what conditions the old/new TupleTableS= lots are not created and available via the ResultRelInfo found in estate. = I've only seen this happen when there is an INSERT ... ON CONFLICT UPDATE .= .. with expression indexes. I was hopeful that in all cases I could avoid = re-creating those when checking expression indexes to avoid that repeated o= verhead. I still avoid it when possible in this patch. When you have time I'd appreciate any feedback. -greg Amazon Web Services: https://aws.amazon.com --_002_51C77060059F4BB38EAF83F08656F6D2amazoncom_ Content-Type: application/octet-stream; name="v10-0001-Expand-HOT-update-path-to-include-expression-and.patch" Content-Description: v10-0001-Expand-HOT-update-path-to-include-expression-and.patch Content-Disposition: attachment; filename="v10-0001-Expand-HOT-update-path-to-include-expression-and.patch"; size=93099; creation-date="Wed, 05 Mar 2025 17:20:34 GMT"; modification-date="Wed, 05 Mar 2025 17:20:34 GMT" Content-ID: <58D722B066828343A856DCE101DAFCA4@amazon.com> Content-Transfer-Encoding: base64 RnJvbSA5NDIyNTI2YTE0ZTlkNDgxNTBlYjFkNTRjMDMwMzUxMjIxZDA4N2E1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnb3J5IEJ1cmQgPGdyZWdidXJkQGFtYXpvbi5jb20+CkRh dGU6IE1vbiwgMjcgSmFuIDIwMjUgMTM6Mjg6NTkgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMF0g RXhwYW5kIEhPVCB1cGRhdGUgcGF0aCB0byBpbmNsdWRlIGV4cHJlc3Npb24gYW5kIHBhcnRpYWwK IGluZGV4ZXMuCgpUaGlzIHBhdGNoIGV4dGVuZHMgdGhlIGNhc2VzIHdoZXJlIEhPVCB1cGRhdGVz IGFyZSBwb3NzaWJsZSBpbiB0aGUgaGVhcGFtIGJ5CmV4YW1pbmluZyBleHByZXNzaW9uIGluZGV4 ZXMgYW5kIGRldGVybWluaW5nIGlmIGluZGV4ZWQgdmFsdWVzIHdoZXJlIG11dGF0ZWQKb3Igbm90 LiAgUHJldmlvdXNseSwgYW55IGV4cHJlc3Npb24gaW5kZXggb24gYSBjb2x1bW4gd291bGQgZGlz cXVhbGlmeSBpdApmcm9tIHRoZSBIT1QgdXBkYXRlIHBhdGguIEFsc28gZXhhbWluZXMgcGFydGlh bCBpbmRleGVzIHRvIHNlZSBpZiB0aGUKdmFsdWVzIGFyZSB3aXRoaW4gdGhlIHByZWRpY2F0ZSBv ciBub3QuCgpGb3IgaGlzdG9yaWNhbCBjb250ZXh0LCB0aGlzIGlzIGEgcmV3cml0ZSBvZiBhIHBh dGNoIGZpcnN0IHByb3Bvc2VkIG9uIHRoZQpwZ3NxbC1oYWNrZXJzIGxpc3Q6Cmh0dHBzOi8vd3d3 LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxhdC80ZDk5MjhlZS1hOWU2LTE1ZjktOWM4Mi01 OTgxZjEzZmZjYTYlNDBwb3N0Z3Jlc3Byby5ydQphcHBsaWVkOiBodHRwczovL2dpdC5wb3N0Z3Jl c3FsLm9yZy9naXR3ZWIvP3A9cG9zdGdyZXNxbC5naXQ7YT1jb21taXQ7aD1jMjAzZDZjZjgKcmV2 ZXJ0ZWQ6IGh0dHBzOi8vZ2l0LnBvc3RncmVzcWwub3JnL2dpdHdlYi8/cD1wb3N0Z3Jlc3FsLmdp dDthPWNvbW1pdDtoPTA1Zjg0NjA1ZGJlYjljZjgyNzlhMTU3MjM0YjI0YmJiNzA2YzUyNTYKClNp Z25lZC1vZmYtYnk6IEdyZWcgQnVyZCA8Z3JlZ2J1cmRAYW1hem9uLmNvbT4KLS0tCiBkb2Mvc3Jj L3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sICAgICAgICAgICAgfCAgMTggKwogZG9jL3NyYy9z Z21sL3N0b3JhZ2Uuc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgIDIxICsKIHNyYy9iYWNrZW5k L2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jICAgICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvUkVBRE1FLkhPVCAgICAgICAgICAgIHwgIDQ1ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAgICAgICAgfCAgMjMgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL3RhYmxlL3RhYmxlYW0uYyAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jYXRh bG9nL2luZGV4LmMgICAgICAgICAgICAgICAgICAgfCAgMTkgKwogc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0luZGV4aW5nLmMgICAgICAgICAgIHwgMjU1ICsrKysrKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC91dGls cy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgNzAgKy0KIHNyYy9iaW4vcHNxbC90YWIt Y29tcGxldGUuaW4uYyAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv dGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWN1dG9yLmggICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgg ICAgICAgICAgICAgICAgICAgICAgIHwgIDEwICsKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hl LmggICAgICAgICAgICAgICAgICB8ICAgMSArCiAuLi4vcmVncmVzcy9leHBlY3RlZC9oZWFwX2hv dF91cGRhdGVzLm91dCAgICAgfCA2NjUgKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgIDUgKwogc3JjL3Rlc3QvcmVncmVz cy9zcWwvaGVhcF9ob3RfdXBkYXRlcy5zcWwgICAgIHwgNDgxICsrKysrKysrKysrKysKIDIyIGZp bGVzIGNoYW5nZWQsIDE2MTkgaW5zZXJ0aW9ucygrKSwgNTIgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9oZWFwX2hvdF91cGRhdGVzLm91 dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hlYXBfaG90X3VwZGF0 ZXMuc3FsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKaW5kZXggMGEzZTUyMGYyMTUuLjhl ZTJhYzUyM2VlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKQEAgLTE5ODEsNiArMTk4 MSwyNCBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVt ZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zh cmxpc3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeSBpZD0icmVsb3B0aW9uLWV4cHJlc3Npb24t Y2hlY2tzIiB4cmVmbGFiZWw9ImV4cHJlc3Npb25fY2hlY2tzIj4KKyAgICA8dGVybT48bGl0ZXJh bD5leHByZXNzaW9uX2NoZWNrczwvbGl0ZXJhbD4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAg IDxpbmRleHRlcm0+CisgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmV4cHJlc3Npb25fY2hlY2tzPC92 YXJuYW1lPiBzdG9yYWdlIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICA8L2luZGV4dGVybT4KKyAg ICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIEVuYWJsZXMgb3Ig ZGlzYWJsZXMgZXZhdWxhdGlvbiBvZiBwcmVkaWNhdGUgZXhwcmVzc2lvbnMgb24gcGFydGlhbAor ICAgICAgaW5kZXhlcyBvciBleHByZXNzaW9ucyB1c2VkIHRvIGRlZmluZSBpbmRleGVzIGR1cmlu ZyB1cGRhdGVzLgorICAgICAgSWYgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIHRoZW4gdGhlc2Ug ZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCBkdXJpbmcKKyAgICAgIHVwZGF0ZXMgdG8gZGF0YSB3 aXRoaW4gdGhlIGhlYXAgcmVsYXRpb24gYWdhaW5zdCB0aGUgb2xkIGFuZCBuZXcgdmFsdWVzCisg ICAgICBhbmQgdGhlbiBjb21wYXJlZCB0byBkZXRlcm1pbmUgaWYgPGFjcm9ueW0+SE9UPC9hY3Jv bnltPiB1cGRhdGVzIGFyZQorICAgICAgYWxsb3dhYmxlIG9yIG5vdC4gVGhlIGRlZmF1bHQgdmFs dWUgaXMgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3Rp dGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAgIDwvdmFyaWFibGVsaXN0PgogCiAgIDwvcmVm c2VjdDI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvc3RvcmFnZS5zZ21sIGIvZG9jL3NyYy9z Z21sL3N0b3JhZ2Uuc2dtbAppbmRleCA2MTI1MDc5OWVjMC4uNjRhNjI2NGQ4ZmQgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9zdG9yYWdlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3N0b3JhZ2Uu c2dtbApAQCAtMTEzOCw2ICsxMTM4LDI3IEBAIGRhdGEuIEVtcHR5IGluIG9yZGluYXJ5IHRhYmxl cy48L2VudHJ5PgogICA8L2l0ZW1pemVkbGlzdD4KICA8L3BhcmE+CiAKKyA8cGFyYT4KKyAgPGFj cm9ueW0+SE9UPC9hY3JvbnltPiB1cGRhdGVzIGNhbiBvY2N1ciB3aGVuIHRoZSBleHByZXNzaW9u IHVzZWQgdG8gZGVmaW5lCisgIGFuIGluZGV4IHNob3dzIG5vIGNoYW5nZXMgdG8gdGhlIGluZGV4 ZWQgdmFsdWUuIFRvIGRldGVybWluZSB0aGlzIHJlcXVpcmVzCisgIHRoYXQgdGhlIGV4cHJlc3Np b24gYmUgZXZhdWxhdGVkIGZvciB0aGUgb2xkIGFuZCBuZXcgdmFsdWVzIHRvIGJlIHN0b3JlZCBp bgorICB0aGUgaW5kZXggYW5kIHRoZW4gY29tcGFyZWQuIFRoaXMgYWxsb3dzIGZvciA8YWNyb255 bT5IT1Q8L2Fjcm9ueW0+IHVwZGF0ZXMKKyAgd2hlbiBkYXRhIGluZGV4ZWQgd2l0aGluIEpTT05C IGNvbHVtbnMgaXMgdW5jaGFuZ2VkLiBUbyBkaXNhYmxlIHRoaXMKKyAgYmVoYXZpb3IgYW5kIGF2 b2lkIHRoZSBvdmVyaGVhZCBvZiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uIGR1cmluZyB1cGRh dGVzCisgIHNldCB0aGUgPGxpdGVyYWw+ZXhwcmVzc2lvbl9jaGVja3M8L2xpdGVyYWw+IG9wdGlv biB0byBmYWxzZSBmb3IgdGhlIHRhYmxlLgorIDwvcGFyYT4KKworIDxwYXJhPgorICA8YWNyb255 bT5IT1Q8L2Fjcm9ueW0+IHVwZGF0ZXMgY2FuIGFsc28gb2NjdXIgd2hlbiB1cGRhdGVkIHZhbHVl cyBhcmUgbm90CisgIHdpdGhpbiB0aGUgcHJlZGljYXRlIG9mIGEgcGFydGlhbCBpbmRleC4gSG93 ZXZlciwgPGFjcm9ueW0+SE9UPC9hY3JvbnltPgorICB1cGRhdGVzIGFyZSBub3QgcG9zc2libGUg d2hlbiB0aGUgdXBkYXRlZCB2YWx1ZSBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgZGlmZmVyCisgIHdp dGggcmVnYXJkcyB0byB0aGUgcHJlZGljYXRlLiBUbyBkZXRlcm1pbiB0aGlzIHJlcXVpcmVzIHRo YXQgdGhlIHByZWRpY2F0ZQorICBleHByZXNzaW9uIGJlIGV2YWx1YXRlZCBmb3IgdGhlIG9sZCBh bmQgbmV3IHZhbHVlcyB0byBiZSBzdG9yZWQgaW4gdGhlIGluZGV4CisgIGFuZCB0aGVuIGNvbXBh cmVkLiBUbyBkaXNhYmxlIHRoaXMgYmVoYXZpb3IgYW5kIGF2b2lkIHRoZSBvdmVyaGVhZCBvZgor ICBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uIGR1cmluZyB1cGRhdGVzIHNldAorICB0aGUgPGxp dGVyYWw+ZXhwcmVzc2lvbl9jaGVja3M8L2xpdGVyYWw+IG9wdGlvbiB0byBmYWxzZSBmb3IgdGhl IHRhYmxlLgorIDwvcGFyYT4KKwogIDxwYXJhPgogICBZb3UgY2FuIGluY3JlYXNlIHRoZSBsaWtl bGlob29kIG9mIHN1ZmZpY2llbnQgcGFnZSBzcGFjZSBmb3IKICAgPGFjcm9ueW0+SE9UPC9hY3Jv bnltPiB1cGRhdGVzIGJ5IGRlY3JlYXNpbmcgYSB0YWJsZSdzIDxsaW5rCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vcmVsb3B0aW9ucy5jCmluZGV4IDU5ZmI1M2U3NzA3Li5jMDgxNjExOTI2ZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMKQEAgLTE2Niw2ICsxNjYsMTUgQEAg c3RhdGljIHJlbG9wdF9ib29sIGJvb2xSZWxPcHRzW10gPQogCQl9LAogCQl0cnVlCiAJfSwKKwl7 CisJCXsKKwkJCSJleHByZXNzaW9uX2NoZWNrcyIsCisJCQkiV2hlbiBkaXNhYmxlZCBwcmV2ZW50 cyBjaGVja2luZyBleHByZXNzaW9ucyBvbiBpbmRleGVzIGFuZCBwcmVkaWNhdGVzIG9uIHBhcnRp YWwgaW5kZXhlcyBmb3IgY2hhbmdlcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBoZWFwLW9ubHkgdHVw bGUgKEhPVCkgdXBkYXRlcy4iLAorCQkJUkVMT1BUX0tJTkRfSEVBUCwKKwkJCVNoYXJlVXBkYXRl RXhjbHVzaXZlTG9jaworCQl9LAorCQl0cnVlCisJfSwKIAkvKiBsaXN0IHRlcm1pbmF0b3IgKi8K IAl7e05VTEx9fQogfTsKQEAgLTE5MDMsNyArMTkxMiw4IEBAIGRlZmF1bHRfcmVsb3B0aW9ucyhE YXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlLCByZWxvcHRfa2luZCBraW5kKQogCQl7InZh Y3V1bV90cnVuY2F0ZSIsIFJFTE9QVF9UWVBFX0JPT0wsCiAJCW9mZnNldG9mKFN0ZFJkT3B0aW9u cywgdmFjdXVtX3RydW5jYXRlKX0sCiAJCXsidmFjdXVtX21heF9lYWdlcl9mcmVlemVfZmFpbHVy ZV9yYXRlIiwgUkVMT1BUX1RZUEVfUkVBTCwKLQkJb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCB2YWN1 dW1fbWF4X2VhZ2VyX2ZyZWV6ZV9mYWlsdXJlX3JhdGUpfQorCQlvZmZzZXRvZihTdGRSZE9wdGlv bnMsIHZhY3V1bV9tYXhfZWFnZXJfZnJlZXplX2ZhaWx1cmVfcmF0ZSl9LAorCQl7ImV4cHJlc3Np b25fY2hlY2tzIiwgUkVMT1BUX1RZUEVfQk9PTCwgb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCBleHBy ZXNzaW9uX2NoZWNrcyl9CiAJfTsKIAogCXJldHVybiAoYnl0ZWEgKikgYnVpbGRfcmVsb3B0aW9u cyhyZWxvcHRpb25zLCB2YWxpZGF0ZSwga2luZCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL1JFQURNRS5IT1QgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9U CmluZGV4IDc0ZTQwN2YzNzVhLi4yMzQwZDgyMDUzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvUkVBRE1FLkhPVAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFE TUUuSE9UCkBAIC0zNiw3ICszNiw3IEBAIEhPVCBzb2x2ZXMgdGhpcyBwcm9ibGVtIGZvciB0d28g cmVzdHJpY3RlZCBidXQgdXNlZnVsIHNwZWNpYWwgY2FzZXM6CiBGaXJzdCwgd2hlcmUgYSB0dXBs ZSBpcyByZXBlYXRlZGx5IHVwZGF0ZWQgaW4gd2F5cyB0aGF0IGRvIG5vdCBjaGFuZ2UKIGl0cyBp bmRleGVkIGNvbHVtbnMuICAoSGVyZSwgImluZGV4ZWQgY29sdW1uIiBtZWFucyBhbnkgY29sdW1u IHJlZmVyZW5jZWQKIGF0IGFsbCBpbiBhbiBpbmRleCBkZWZpbml0aW9uLCBpbmNsdWRpbmcgZm9y IGV4YW1wbGUgY29sdW1ucyB0aGF0IGFyZQotdGVzdGVkIGluIGEgcGFydGlhbC1pbmRleCBwcmVk aWNhdGUgYnV0IGFyZSBub3Qgc3RvcmVkIGluIHRoZSBpbmRleC4pCit0ZXN0ZWQgaW4gYSBwYXJ0 aWFsLWluZGV4IHByZWRpY2F0ZSwgdGhhdCBoYXMgbWF0ZXJpYWxseSBjaGFuZ2VkLikKIAogU2Vj b25kLCB3aGVyZSB0aGUgbW9kaWZpZWQgY29sdW1ucyBhcmUgb25seSB1c2VkIGluIGluZGV4ZXMg dGhhdCBkbyBub3QKIGNvbnRhaW4gdHVwbGUgSURzLCBidXQgbWFpbnRhaW4gc3VtbWFyaWVzIG9m IHRoZSBpbmRleGVkIGRhdGEgYnkgYmxvY2suCkBAIC0xMzMsMjggKzEzMywzNCBAQCBOb3RlOiB3 ZSBjYW4gdXNlIGEgImRlYWQiIGxpbmUgcG9pbnRlciBmb3IgYW55IERFTEVURWQgdHVwbGUsCiB3 aGV0aGVyIGl0IHdhcyBwYXJ0IG9mIGEgSE9UIGNoYWluIG9yIG5vdC4gIFRoaXMgYWxsb3dzIHNw YWNlIHJlY2xhbWF0aW9uCiBpbiBhZHZhbmNlIG9mIHJ1bm5pbmcgVkFDVVVNIGZvciBwbGFpbiBE RUxFVEVzIGFzIHdlbGwgYXMgSE9UIHVwZGF0ZXMuCiAKLVRoZSByZXF1aXJlbWVudCBmb3IgZG9p bmcgYSBIT1QgdXBkYXRlIGlzIHRoYXQgaW5kZXhlcyB3aGljaCBwb2ludCB0bwotdGhlIHJvb3Qg bGluZSBwb2ludGVyIChhbmQgdGh1cyBuZWVkIHRvIGJlIGNsZWFuZWQgdXAgYnkgVkFDVVVNIHdo ZW4gdGhlCi10dXBsZSBpcyBkZWFkKSBkbyBub3QgcmVmZXJlbmNlIGNvbHVtbnMgd2hpY2ggYXJl IHVwZGF0ZWQgaW4gdGhhdCBIT1QKLWNoYWluLiAgU3VtbWFyaXppbmcgaW5kZXhlcyAoc3VjaCBh cyBCUklOKSBhcmUgYXNzdW1lZCB0byBoYXZlIG5vCi1yZWZlcmVuY2VzIHRvIGluZGl2aWR1YWwg dHVwbGVzIGFuZCB0aHVzIGFyZSBpZ25vcmVkIHdoZW4gY2hlY2tpbmcgSE9UCi1hcHBsaWNhYmls aXR5LiAgVGhlIHVwZGF0ZWQgY29sdW1ucyBhcmUgY2hlY2tlZCBhdCBleGVjdXRpb24gdGltZSBi eQotY29tcGFyaW5nIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9sZCBhbmQgbmV3 IHZhbHVlcy4gIFdlIGluc2lzdAotb24gYml0d2lzZSBlcXVhbGl0eSByYXRoZXIgdGhhbiB1c2lu ZyBkYXRhdHlwZS1zcGVjaWZpYyBlcXVhbGl0eSByb3V0aW5lcy4KLVRoZSBtYWluIHJlYXNvbiB0 byBhdm9pZCB0aGUgbGF0dGVyIGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUKLW5vdGlv bnMgb2YgZXF1YWxpdHkgZm9yIGEgZGF0YXR5cGUsIGFuZCB3ZSBkb24ndCBrbm93IGV4YWN0bHkg d2hpY2ggb25lCi1pcyByZWxldmFudCBmb3IgdGhlIGluZGV4ZXMgYXQgaGFuZC4gIFdlIGFzc3Vt ZSB0aGF0IGJpdHdpc2UgZXF1YWxpdHkKLWd1YXJhbnRlZXMgZXF1YWxpdHkgZm9yIGFsbCBwdXJw b3Nlcy4KK1RoZSByZXF1aXJlbWVudCBmb3IgZG9pbmcgYSBIT1QgdXBkYXRlIGlzIHRoYXQgaW5k ZXhlcyB3aGljaCBwb2ludCB0byB0aGUgcm9vdAorbGluZSBwb2ludGVyIChhbmQgdGh1cyBuZWVk IHRvIGJlIGNsZWFuZWQgdXAgYnkgVkFDVVVNIHdoZW4gdGhlIHR1cGxlIGlzIGRlYWQpCitkbyBu b3QgcmVmZXJlbmNlIGNvbHVtbnMgd2hpY2ggYXJlIHVwZGF0ZWQgaW4gdGhhdCBIT1QgY2hhaW4u CisKK1N1bW1hcml6aW5nIGluZGV4ZXMgKHN1Y2ggYXMgQlJJTikgYXJlIGFzc3VtZWQgdG8gaGF2 ZSBubyByZWZlcmVuY2VzIHRvCitpbmRpdmlkdWFsIHR1cGxlcyBhbmQgdGh1cyBhcmUgaWdub3Jl ZCB3aGVuIGNoZWNraW5nIEhPVCBhcHBsaWNhYmlsaXR5LgorCitFeHByZXNzaW9ucyBvbiBpbmRl eGVzIGFyZSBldmFsdWF0ZWQgYW5kIHRoZSByZXN1bHRzIHVzZWQgd2hlbiBjaGVja2luZyBmb3IK K2NoYW5nZXMuICBUaGlzIGFsbG93cyBmb3IgdGhlIEpTT05CIGRhdGF0eXBlIHRvIGhhdmUgSE9U IHVwZGF0ZXMgd2hlbiB0aGUKK2luZGV4ZWQgcG9ydGlvbiBvZiB0aGUgZG9jdW1lbnQgYXJlIG5v dCBtb2RpZmllZC4KKworUGFydGlhbCBpbmRleCBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkLCBI T1QgdXBkYXRlcyBhcmUgYWxsb3dlZCB3aGVuIHRoZQordXBkYXRlZCBpbmRleCB2YWx1ZXMgZG8g bm90IHNhdGlzZnkgdGhlIHByZWRpY2F0ZS4KKworVGhlIHVwZGF0ZWQgY29sdW1ucyBhcmUgY2hl Y2tlZCBhdCBleGVjdXRpb24gdGltZSBieSBjb21wYXJpbmcgdGhlIGJpbmFyeQorcmVwcmVzZW50 YXRpb24gb2YgdGhlIG9sZCBhbmQgbmV3IHZhbHVlcy4gIFdlIGluc2lzdCBvbiBiaXR3aXNlIGVx dWFsaXR5IHJhdGhlcgordGhhbiB1c2luZyBkYXRhdHlwZS1zcGVjaWZpYyBlcXVhbGl0eSByb3V0 aW5lcy4gIFRoZSBtYWluIHJlYXNvbiB0byBhdm9pZCB0aGUKK2xhdHRlciBpcyB0aGF0IHRoZXJl IG1pZ2h0IGJlIG11bHRpcGxlIG5vdGlvbnMgb2YgZXF1YWxpdHkgZm9yIGEgZGF0YXR5cGUsIGFu ZAord2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoaWNoIG9uZSBpcyByZWxldmFudCBmb3IgdGhlIGlu ZGV4ZXMgYXQgaGFuZC4gIFdlIGFzc3VtZQordGhhdCBiaXR3aXNlIGVxdWFsaXR5IGd1YXJhbnRl ZXMgZXF1YWxpdHkgZm9yIGFsbCBwdXJwb3Nlcy4KIAogSWYgYW55IGNvbHVtbnMgdGhhdCBhcmUg aW5jbHVkZWQgYnkgbm9uLXN1bW1hcml6aW5nIGluZGV4ZXMgYXJlIHVwZGF0ZWQsCiB0aGUgSE9U IG9wdGltaXphdGlvbiBpcyBub3QgYXBwbGllZCwgYW5kIHRoZSBuZXcgdHVwbGUgaXMgaW5zZXJ0 ZWQgaW50bwogYWxsIGluZGV4ZXMgb2YgdGhlIHRhYmxlLiAgSWYgbm9uZSBvZiB0aGUgdXBkYXRl ZCBjb2x1bW5zIGFyZSBpbmNsdWRlZCBpbgogdGhlIHRhYmxlJ3MgaW5kZXhlcywgdGhlIEhPVCBv cHRpbWl6YXRpb24gaXMgYXBwbGllZCBhbmQgbm8gaW5kZXhlcyBhcmUKIHVwZGF0ZWQuICBJZiBp bnN0ZWFkIHRoZSB1cGRhdGVkIGNvbHVtbnMgYXJlIG9ubHkgaW5kZXhlZCBieSBzdW1tYXJpemlu ZwotaW5kZXhlcywgdGhlIEhPVCBvcHRpbWl6YXRpb24gaXMgYXBwbGllZCwgYnV0IHRoZSB1cGRh dGUgaXMgcHJvcGFnYXRlZCB0bwotYWxsIHN1bW1hcml6aW5nIGluZGV4ZXMuICAoUmVhbGlzdGlj YWxseSwgd2Ugb25seSBuZWVkIHRvIHByb3BhZ2F0ZSB0aGUKLXVwZGF0ZSB0byB0aGUgaW5kZXhl cyB0aGF0IGNvbnRhaW4gdGhlIHVwZGF0ZWQgdmFsdWVzLCBidXQgdGhhdCBpcyB5ZXQgdG8KLWJl IGltcGxlbWVudGVkLikKK2luZGV4ZXMsIHRoZSBIT1Qgb3B0aW1pemF0aW9uIGlzIGFwcGxpZWQg YW5kIHRoZSB1cGRhdGUgaXMgcHJvcGFnYXRlZCB0bworYWxsIG9mIHRoZSBzdW1tYXJpemluZyBp bmRleGVzLgogCiBBYm9ydCBDYXNlcwogLS0tLS0tLS0tLS0KQEAgLTQ3Nyw4ICs0ODMsOSBAQCBI ZWFwLW9ubHkgdHVwbGUKIEhPVC1zYWZlCiAKIAlBIHByb3Bvc2VkIHR1cGxlIHVwZGF0ZSBpcyBz YWlkIHRvIGJlIEhPVC1zYWZlIGlmIGl0IGNoYW5nZXMKLQlub25lIG9mIHRoZSB0dXBsZSdzIGlu ZGV4ZWQgY29sdW1ucy4gIEl0IHdpbGwgb25seSBiZWNvbWUgYW4KLQlhY3R1YWwgSE9UIHVwZGF0 ZSBpZiB3ZSBjYW4gZmluZCByb29tIG9uIHRoZSBzYW1lIHBhZ2UgZm9yCisJbm9uZSBvZiB0aGUg dHVwbGUncyBpbmRleGVkIGNvbHVtbnMgb3IgaWYgdGhlIGNoYW5nZXMgcmVtYWluCisJb3V0c2lk ZSBvZiBhIHBhcnRpYWwgaW5kZXgncyBwcmVkaWNhdGUuICBJdCB3aWxsIG9ubHkgYmVjb21lCisJ YW4gYWN0dWFsIEhPVCB1cGRhdGUgaWYgd2UgY2FuIGZpbmQgcm9vbSBvbiB0aGUgc2FtZSBwYWdl IGZvcgogCXRoZSBuZXcgdHVwbGUgdmVyc2lvbi4KIAogSE9UIHVwZGF0ZQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW0uYwppbmRleCBmYTc5MzVhMGVkMy4uMzJiM2NjMWQ0ZWYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbS5jCkBAIC0zMTY0LDEyICszMTY0LDEzIEBAIFRNX1Jlc3VsdAogaGVhcF91cGRh dGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIEhlYXBUdXBsZSBuZXd0dXAs CiAJCQlDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29sIHdhaXQsCiAJCQlU TV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQlUVV9VcGRh dGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKKwkJCVRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9p bmRleGVzLCBzdHJ1Y3QgRVN0YXRlICplc3RhdGUpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAlU cmFuc2FjdGlvbklkIHhpZCA9IEdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CiAJQml0bWFwc2V0 ICAqaG90X2F0dHJzOwogCUJpdG1hcHNldCAgKnN1bV9hdHRyczsKKwlCaXRtYXBzZXQgICpleHBf YXR0cnM7CiAJQml0bWFwc2V0ICAqa2V5X2F0dHJzOwogCUJpdG1hcHNldCAgKmlkX2F0dHJzOwog CUJpdG1hcHNldCAgKmludGVyZXN0aW5nX2F0dHJzOwpAQCAtMzI0Niw2ICszMjQ3LDggQEAgaGVh cF91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIEhlYXBUdXBsZSBu ZXd0dXAsCiAJCQkJCQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfSE9UX0JMT0NLSU5HKTsKIAlz dW1fYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwKIAkJCQkJCQkJ CQkgICBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEKTsKKwlleHBfYXR0cnMgPSBSZWxhdGlv bkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJ VE1BUF9FWFBSRVNTSU9OKTsKIAlrZXlfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1h cChyZWxhdGlvbiwgSU5ERVhfQVRUUl9CSVRNQVBfS0VZKTsKIAlpZF9hdHRycyA9IFJlbGF0aW9u R2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAogCQkJCQkJCQkJCSAgSU5ERVhfQVRUUl9CSVRN QVBfSURFTlRJVFlfS0VZKTsKQEAgLTMzMTEsNiArMzMxNCw3IEBAIGhlYXBfdXBkYXRlKFJlbGF0 aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCiAJCWJt c19mcmVlKGhvdF9hdHRycyk7CiAJCWJtc19mcmVlKHN1bV9hdHRycyk7CisJCWJtc19mcmVlKGV4 cF9hdHRycyk7CiAJCWJtc19mcmVlKGtleV9hdHRycyk7CiAJCWJtc19mcmVlKGlkX2F0dHJzKTsK IAkJLyogbW9kaWZpZWRfYXR0cnMgbm90IHlldCBpbml0aWFsaXplZCAqLwpAQCAtMzYxMiw2ICsz NjE2LDcgQEAgbDI6CiAKIAkJYm1zX2ZyZWUoaG90X2F0dHJzKTsKIAkJYm1zX2ZyZWUoc3VtX2F0 dHJzKTsKKwkJYm1zX2ZyZWUoZXhwX2F0dHJzKTsKIAkJYm1zX2ZyZWUoa2V5X2F0dHJzKTsKIAkJ Ym1zX2ZyZWUoaWRfYXR0cnMpOwogCQlibXNfZnJlZShtb2RpZmllZF9hdHRycyk7CkBAIC0zOTI4 LDEyICszOTMzLDE5IEBAIGwyOgogCiAJaWYgKG5ld2J1ZiA9PSBidWZmZXIpCiAJeworCQlib29s CQlleHByZXNzaW9uX2NoZWNrcyA9IFJlbGF0aW9uR2V0RXhwcmVzc2lvbkNoZWNrcyhyZWxhdGlv bik7CisKIAkJLyoKIAkJICogU2luY2UgdGhlIG5ldyB0dXBsZSBpcyBnb2luZyBpbnRvIHRoZSBz YW1lIHBhZ2UsIHdlIG1pZ2h0IGJlIGFibGUKLQkJICogdG8gZG8gYSBIT1QgdXBkYXRlLiAgQ2hl Y2sgaWYgYW55IG9mIHRoZSBpbmRleCBjb2x1bW5zIGhhdmUgYmVlbgotCQkgKiBjaGFuZ2VkLgor CQkgKiB0byBkbyBhIEhPVCB1cGRhdGUuICBBcyBhIHJlbWluZGVyLCBob3RfYXR0cnMgaW5jbHVk ZXMgYXR0cmlidXRlcworCQkgKiB1c2VkIGJ5IGluZGV4ZXMgaW5jbHVkaW5nIHdpdGhpbiBleHBy ZXNzaW9ucyBhbmQgcHJlZGljYXRlcywgYnV0CisJCSAqIG5vdCBhdHRyaWJ1dGVzIG9ubHkgdXNl ZCBieSBzdW1tYXJpemluZyBpbmRleGVzLgogCQkgKi8KLQkJaWYgKCFibXNfb3ZlcmxhcChtb2Rp ZmllZF9hdHRycywgaG90X2F0dHJzKSkKKwkJaWYgKCFibXNfb3ZlcmxhcChtb2RpZmllZF9hdHRy cywgaG90X2F0dHJzKSB8fAorCQkJKGV4cHJlc3Npb25fY2hlY2tzICYmCisJCQkgYm1zX292ZXJs YXAobW9kaWZpZWRfYXR0cnMsIGV4cF9hdHRycykgJiYKKwkJCSAhRXhlY0V4cHJlc3Npb25JbmRl eGVzVXBkYXRlZChyZWxhdGlvbiwgbW9kaWZpZWRfYXR0cnMsIGVzdGF0ZSwKKwkJCQkJCQkJCQkg ICAmb2xkdHVwLCBuZXd0dXApKSkKIAkJewogCQkJdXNlX2hvdF91cGRhdGUgPSB0cnVlOwogCkBA IC00MTI2LDcgKzQxMzgsNiBAQCBsMjoKIAkJaGVhcF9mcmVldHVwbGUob2xkX2tleV90dXBsZSk7 CiAKIAlibXNfZnJlZShob3RfYXR0cnMpOwotCWJtc19mcmVlKHN1bV9hdHRycyk7CiAJYm1zX2Zy ZWUoa2V5X2F0dHJzKTsKIAlibXNfZnJlZShpZF9hdHRycyk7CiAJYm1zX2ZyZWUobW9kaWZpZWRf YXR0cnMpOwpAQCAtNDQxMyw3ICs0NDI0LDcgQEAgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9u IHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBIZWFwVHVwbGUgdHVwLAogCXJlc3VsdCA9IGhl YXBfdXBkYXRlKHJlbGF0aW9uLCBvdGlkLCB0dXAsCiAJCQkJCQkgR2V0Q3VycmVudENvbW1hbmRJ ZCh0cnVlKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJIHRydWUgLyogd2FpdCBmb3IgY29tbWl0 ICovICwKLQkJCQkJCSAmdG1mZCwgJmxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkg JnRtZmQsICZsb2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMsIE5VTEwpOwogCXN3aXRjaCAocmVzdWx0 KQogCXsKIAkJY2FzZSBUTV9TZWxmTW9kaWZpZWQ6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtX2hhbmRsZXIuYwppbmRleCBlNzg2ODJjM2NlZi4uYTg3MTBmMjlmZmMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMzEyLDggKzMxMiw4IEBAIGhlYXBh bV90dXBsZV9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRpZCwgQ29tbWFu ZElkIGNpZCwKIHN0YXRpYyBUTV9SZXN1bHQKIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24g cmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQlD b21tYW5kSWQgY2lkLCBTbmFwc2hvdCBzbmFwc2hvdCwgU25hcHNob3QgY3Jvc3NjaGVjaywKLQkJ CQkJYm9vbCB3YWl0LCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwKLQkJCQkJTG9ja1R1cGxlTW9kZSAq bG9ja21vZGUsIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKQorCQkJCQlib29sIHdh aXQsIFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKKwkJCQkJ VFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMsIEVTdGF0ZSAqZXN0YXRlKQogewogCWJv b2wJCXNob3VsZEZyZWUgPSB0cnVlOwogCUhlYXBUdXBsZQl0dXBsZSA9IEV4ZWNGZXRjaFNsb3RI ZWFwVHVwbGUoc2xvdCwgdHJ1ZSwgJnNob3VsZEZyZWUpOwpAQCAtMzI0LDcgKzMyNCw3IEBAIGhl YXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIFR1 cGxlVGFibGVTbG90ICpzbG90LAogCXR1cGxlLT50X3RhYmxlT2lkID0gc2xvdC0+dHRzX3RhYmxl T2lkOwogCiAJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1cGxlLCBjaWQs IGNyb3NzY2hlY2ssIHdhaXQsCi0JCQkJCQkgdG1mZCwgbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVz KTsKKwkJCQkJCSB0bWZkLCBsb2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMsIGVzdGF0ZSk7CiAJSXRl bVBvaW50ZXJDb3B5KCZ0dXBsZS0+dF9zZWxmLCAmc2xvdC0+dHRzX3RpZCk7CiAKIAkvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggYTU2YzVlY2ViMTQuLmE2MmRmN2Y0YmNlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKQEAgLTM0Niw3ICszNDYsNyBAQCBzaW1wbGVf dGFibGVfdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwKIAkJCQkJ CQkJR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKIAkJCQkJCQkJc25hcHNob3QsIEludmFsaWRT bmFwc2hvdCwKIAkJCQkJCQkJdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAotCQkJCQkJCQkm dG1mZCwgJmxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkJCSZ0bWZkLCAmbG9ja21v ZGUsIHVwZGF0ZV9pbmRleGVzLCBOVUxMKTsKIAogCXN3aXRjaCAocmVzdWx0KQogCXsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv aW5kZXguYwppbmRleCA4ZTE3NDFjODFmNS4uZDliZDY0YmZlOTYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvaW5kZXguYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMK QEAgLTI0NTUsNyArMjQ1NSwyNiBAQCBCdWlsZEluZGV4SW5mbyhSZWxhdGlvbiBpbmRleCkKIAog CS8qIGZpbGwgaW4gYXR0cmlidXRlIG51bWJlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtQXR0 czsgaSsrKQorCXsKKwkJQ29tcGFjdEF0dHJpYnV0ZSAqYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RB dHRyKFJlbGF0aW9uR2V0RGVzY3IoaW5kZXgpLCBpKTsKKwogCQlpaS0+aWlfSW5kZXhBdHRyTnVt YmVyc1tpXSA9IGluZGV4U3RydWN0LT5pbmRrZXkudmFsdWVzW2ldOworCQlpaS0+aWlfSW5kZXhB dHRycyA9CisJCQlibXNfYWRkX21lbWJlcihpaS0+aWlfSW5kZXhBdHRycywKKwkJCQkJCSAgIGlu ZGV4U3RydWN0LT5pbmRrZXkudmFsdWVzW2ldIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0 ZU51bWJlcik7CisKKwkJaWktPmlpX0luZGV4QXR0ckxlbltpXSA9IGF0dHItPmF0dGxlbjsKKwkJ aWYgKGF0dHItPmF0dGJ5dmFsKQorCQkJaWktPmlpX0luZGV4QXR0ckJ5VmFsID0gYm1zX2FkZF9t ZW1iZXIoaWktPmlpX0luZGV4QXR0ckJ5VmFsLCBpKTsKKwl9CisKKwkvKiBjb2xsZWN0IGF0dHJp YnV0ZXMgdXNlZCBpbiB0aGUgZXhwcmVzc2lvbiwgaWYgb25lIGlzIHByZXNlbnQgKi8KKwlpZiAo aWktPmlpX0V4cHJlc3Npb25zKQorCQlwdWxsX3ZhcmF0dG5vcygoTm9kZSAqKSBpaS0+aWlfRXhw cmVzc2lvbnMsIDEsICZpaS0+aWlfRXhwcmVzc2lvbkF0dHJzKTsKKworCS8qIGNvbGxlY3QgYXR0 cmlidXRlcyB1c2VkIGluIHRoZSBwcmVkaWNhdGUsIGlmIG9uZSBpcyBwcmVzZW50ICovCisJaWYg KGlpLT5paV9QcmVkaWNhdGUpCisJCXB1bGxfdmFyYXR0bm9zKChOb2RlICopIGlpLT5paV9QcmVk aWNhdGUsIDEsICZpaS0+aWlfUHJlZGljYXRlQXR0cnMpOwogCiAJLyogZmV0Y2ggZXhjbHVzaW9u IGNvbnN0cmFpbnQgaW5mbyBpZiBhbnkgKi8KIAlpZiAoaW5kZXhTdHJ1Y3QtPmluZGlzZXhjbHVz aW9uKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCA3NDJmM2Y4YzA4ZC4uMmI2 MTE0N2FkODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC0xMTMsMTAgKzEx MywxMyBAQAogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIKICNpbmNsdWRlICJleGVjdXRvci9l eGVjdXRvci5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm9wdGlt aXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJ1 dGlscy9tdWx0aXJhbmdldHlwZXMuaCIKICNpbmNsdWRlICJ1dGlscy9yYW5nZXR5cGVzLmgiCiAj aW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgorI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCisjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAKIC8qIHdhaXRNb2RlIGFyZ3VtZW50IHRvIGNoZWNr X2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludCgpICovCiB0eXBlZGVmIGVudW0KQEAgLTM3 Miw3ICszNzUsNyBAQCBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0 UmVsSW5mbywKIAogCQkvKgogCQkgKiBTa2lwIHByb2Nlc3Npbmcgb2Ygbm9uLXN1bW1hcml6aW5n IGluZGV4ZXMgaWYgd2Ugb25seSB1cGRhdGUKLQkJICogc3VtbWFyaXppbmcgaW5kZXhlcworCQkg KiBzdW1tYXJpemluZyBpbmRleGVzLgogCQkgKi8KIAkJaWYgKG9ubHlTdW1tYXJpemluZyAmJiAh aW5kZXhJbmZvLT5paV9TdW1tYXJpemluZykKIAkJCWNvbnRpbnVlOwpAQCAtMTA5Niw2ICsxMDk5 LDkgQEAgaW5kZXhfdW5jaGFuZ2VkX2J5X3VwZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJ bmZvLCBFU3RhdGUgKmVzdGF0ZSwKIAogCWlmIChoYXNleHByZXNzaW9uKQogCXsKKwkJaWYgKGlu ZGV4SW5mby0+aWlfSW5kZXhVbmNoYW5nZWQpCisJCQlyZXR1cm4gdHJ1ZTsKKwogCQlpbmRleElu Zm8tPmlpX0luZGV4VW5jaGFuZ2VkID0gZmFsc2U7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0x MTczLDMgKzExNzksMjUwIEBAIEV4ZWNXaXRob3V0T3ZlcmxhcHNOb3RFbXB0eShSZWxhdGlvbiBy ZWwsIE5hbWVEYXRhIGF0dG5hbWUsIERhdHVtIGF0dHZhbCwgY2hhciB0CiAJCQkJIGVycm1zZygi ZW1wdHkgV0lUSE9VVCBPVkVSTEFQUyB2YWx1ZSBmb3VuZCBpbiBjb2x1bW4gXCIlc1wiIGluIHJl bGF0aW9uIFwiJXNcIiIsCiAJCQkJCQlOYW1lU3RyKGF0dG5hbWUpLCBSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpKSkpOwogfQorCisKKyAvKgorICAqIEF0dHJpYnV0ZUluZGV4SW5mbyAtLSBh ZGRzIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbiB0byBJbmRleEluZm8KKyAgKi8KK3N0YXRpYyBJbmRl eEluZm8gKgorQXR0cmlidXRlSW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4LCBJbmRleEluZm8gKmlu ZGV4SW5mbykKK3sKKwlpZiAoaW5kZXhJbmZvLT5paV9JbmRleEF0dHJCeVZhbCkKKwkJcmV0dXJu IGluZGV4SW5mbzsKKworCS8qCisJICogY29sbGVjdCBhdHRyaWJ1dGVzIHVzZWQgYnkgdGhlIGlu ZGV4LCB0aGVpciBsZW4gYW5kIGlmIHRoZXkgYXJlIGJ5CisJICogdmFsdWUKKwkgKi8KKwlmb3Ig KGludCBpID0gMDsgaSA8IGluZGV4SW5mby0+aWlfTnVtSW5kZXhBdHRyczsgaSsrKQorCXsKKwkJ aW5kZXhJbmZvLT5paV9JbmRleEF0dHJzID0KKwkJCWJtc19hZGRfbWVtYmVyKGluZGV4SW5mby0+ aWlfSW5kZXhBdHRycywKKwkJCQkJCSAgIGluZGV4SW5mby0+aWlfSW5kZXhBdHRyTnVtYmVyc1tp XSAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCisJCWlmIChpIDwgaW5k ZXhJbmZvLT5paV9OdW1JbmRleEtleUF0dHJzKQorCQl7CisJCQlpbnQxNgkJZWxtbGVuOworCQkJ Ym9vbAkJZWxtYnl2YWw7CisKKwkJCWdldF90eXBsZW5ieXZhbChpbmRleC0+cmRfb3BjaW50eXBl W2ldLCAmZWxtbGVuLCAmZWxtYnl2YWwpOworCQkJaW5kZXhJbmZvLT5paV9JbmRleEF0dHJMZW5b aV0gPSBlbG1sZW47CisJCQlpZiAoZWxtYnl2YWwpCisJCQkJaW5kZXhJbmZvLT5paV9JbmRleEF0 dHJCeVZhbCA9IGJtc19hZGRfbWVtYmVyKGluZGV4SW5mby0+aWlfSW5kZXhBdHRyQnlWYWwsIGkp OworCQl9CisJfQorCisJLyogY29sbGVjdCBhdHRyaWJ1dGVzIHVzZWQgaW4gdGhlIGV4cHJlc3Np b24gKi8KKwlpZiAoaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucykKKwkJcHVsbF92YXJhdHRub3Mo KE5vZGUgKikgaW5kZXhJbmZvLT5paV9FeHByZXNzaW9ucywgMSwgJmluZGV4SW5mby0+aWlfRXhw cmVzc2lvbkF0dHJzKTsKKworCS8qIGNvbGxlY3QgYXR0cmlidXRlcyB1c2VkIGluIHRoZSBwcmVk aWNhdGUgKi8KKwlpZiAoaW5kZXhJbmZvLT5paV9QcmVkaWNhdGUpCisJCXB1bGxfdmFyYXR0bm9z KChOb2RlICopIGluZGV4SW5mby0+aWlfUHJlZGljYXRlLCAxLCAmaW5kZXhJbmZvLT5paV9QcmVk aWNhdGVBdHRycyk7CisKKwlyZXR1cm4gaW5kZXhJbmZvOworfQorCisvKgorICogRGV0ZXJtaW5l IGlmIGluZGV4ZXMgdGhhdCBoYXZlIGV4cHJlc3Npb25zIG9yIHByZWRpY2F0ZXMgcmVxdWlyZSB1 cGRhdGVzCisgKiBmb3IgdGhlIHB1cnBvc2VzIG9mIGFsbG93aW5nIEhPVCB1cGRhdGVzLiAgUmV0 dXJucyBmYWxzZSBpZmYgYWxsIGluZGV4ZWQKKyAqIHZhbHVlcyBhcmUgdW5jaGFuZ2VkLgorICov Citib29sCitFeGVjRXhwcmVzc2lvbkluZGV4ZXNVcGRhdGVkKFJlbGF0aW9uIHJlbGF0aW9uLAor CQkJCQkJCSBCaXRtYXBzZXQgKm1vZGlmaWVkX2F0dHJzLAorCQkJCQkJCSBFU3RhdGUgKmVzdGF0 ZSwKKwkJCQkJCQkgSGVhcFR1cGxlIG9sZF90dXBsZSwKKwkJCQkJCQkgSGVhcFR1cGxlIG5ld190 dXBsZSkKK3sKKwlib29sCQlleHByZXNzaW9uX2NoZWNrcyA9IFJlbGF0aW9uR2V0RXhwcmVzc2lv bkNoZWNrcyhyZWxhdGlvbik7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisJUmVzdWx0UmVsSW5m byAqcmVzdWx0UmVsSW5mbzsKKwlSZWxhdGlvbglpbmRleDsKKwlJbmRleEluZm8gICppbmRleElu Zm87CisJRXhwckNvbnRleHQgKmVjb250ZXh0ID0gTlVMTDsKKwlUdXBsZURlc2MJdHVwbGVkZXNj OworCVR1cGxlVGFibGVTbG90ICpvbGRfdHRzOworCVR1cGxlVGFibGVTbG90ICpuZXdfdHRzOwor CisJLyoKKwkgKiBXZSdyZSBub3QgYWJsZSB0byBhY2Nlc3MgdGhlIEluZGV4SW5mbyBhcnJheSB3 aXRob3V0IGFuIGVzdGF0ZS4KKwkgKi8KKwlpZiAoZXN0YXRlID09IE5VTEwgfHwgbW9kaWZpZWRf YXR0cnMgPT0gTlVMTCkKKwkJcmV0dXJuIHRydWU7CisKKyNpZm5kZWYgVVNFX0FTU0VSVF9DSEVD S0lORworCWlmIChlc3RhdGUtPmVzX3Jlc3VsdF9yZWxhdGlvbnNbMF0tPnJpX1JlbGF0aW9uRGVz YyAhPSByZWxhdGlvbikKKwkJcmV0dXJuIHRydWU7CisjZW5kaWYKKworCUFzc2VydChlc3RhdGUt PmVzX3Jlc3VsdF9yZWxhdGlvbnNbMF0tPnJpX1JlbGF0aW9uRGVzYyA9PSByZWxhdGlvbik7CisK KwlpZiAoZXhwcmVzc2lvbl9jaGVja3MgPT0gZmFsc2UpCisJCXJldHVybiB0cnVlOworCisJcmVz dWx0UmVsSW5mbyA9IGVzdGF0ZS0+ZXNfcmVzdWx0X3JlbGF0aW9uc1swXTsKKwlvbGRfdHRzID0g cmVzdWx0UmVsSW5mby0+cmlfb2xkVHVwbGVTbG90OworCW5ld190dHMgPSByZXN1bHRSZWxJbmZv LT5yaV9uZXdUdXBsZVNsb3Q7CisJZWNvbnRleHQgPSBHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVz dGF0ZSk7CisJdHVwbGVkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbik7CisKKwkvKgor CSAqIEV4YW1pbmUgZWFjaCBpbmRleCBvbiB0aGlzIHJlbGF0aW9uIHJlbGF0aXZlIHRvIHRoZSBj aGFuZ2VzIGJldHdlZW4gb2xkCisJICogYW5kIG5ldyB0dXBsZXMuCisJICovCisJZm9yIChpbnQg aSA9IDA7IGkgPCByZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzOyBpKyspCisJeworCQlpbmRl eCA9IChSZWxhdGlvbikgcmVzdWx0UmVsSW5mby0+cmlfSW5kZXhSZWxhdGlvbkRlc2NzW2ldOwor CQlpbmRleEluZm8gPSBBdHRyaWJ1dGVJbmRleEluZm8oaW5kZXgsCisJCQkJCQkJCQkgICByZXN1 bHRSZWxJbmZvLT5yaV9JbmRleFJlbGF0aW9uSW5mb1tpXSk7CisKKwkJLyoKKwkJICogSWYgdGhp cyBpcyBhIHBhcnRpYWwgaW5kZXggaXQgaGFzIGEgcHJlZGljYXRlLCBldmFsdWF0ZSB0aGUKKwkJ ICogZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBpbmNsdWRlIGl0IG9yIG5v dC4KKwkJICovCisJCWlmIChibXNfb3ZlcmxhcChpbmRleEluZm8tPmlpX1ByZWRpY2F0ZUF0dHJz LCBtb2RpZmllZF9hdHRycykpCisJCXsKKwkJCUV4cHJTdGF0ZSAgKnBzdGF0ZTsKKwkJCWJvb2wJ CW9sZF90dXBsZV9xdWFsaWZpZXMsCisJCQkJCQluZXdfdHVwbGVfcXVhbGlmaWVzOworCisJCQkv KiBDcmVhdGUgdGhlc2Ugb25jZSwgb25seSBpZiBuZWNlc3NhcnksIHRoZW4gcmV1c2UgdGhlbS4g Ki8KKwkJCWlmIChvbGRfdHRzID09IE5VTEwpCisJCQl7CisJCQkJb2xkX3R0cyA9IE1ha2VTaW5n bGVUdXBsZVRhYmxlU2xvdCh0dXBsZWRlc2MsCisJCQkJCQkJCQkJCQkgICAmVFRTT3BzSGVhcFR1 cGxlKTsKKwkJCQlFeGVjU3RvcmVIZWFwVHVwbGUob2xkX3R1cGxlLCBvbGRfdHRzLCBJbnZhbGlk QnVmZmVyKTsKKwkJCX0KKworCQkJaWYgKG5ld190dHMgPT0gTlVMTCkKKwkJCXsKKwkJCQluZXdf dHRzID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KHR1cGxlZGVzYywKKwkJCQkJCQkJCQkJCSAg ICZUVFNPcHNIZWFwVHVwbGUpOworCQkJCUV4ZWNTdG9yZUhlYXBUdXBsZShuZXdfdHVwbGUsIG5l d190dHMsIEludmFsaWRCdWZmZXIpOworCQkJfQorCisJCQlwc3RhdGUgPSBFeGVjUHJlcGFyZVF1 YWwoaW5kZXhJbmZvLT5paV9QcmVkaWNhdGUsIGVzdGF0ZSk7CisKKwkJCS8qCisJCQkgKiBIZXJl IHRoZSB0ZXJtICJxdWFsaWZpZXMiIG1lYW5zICJzYXRpc2ZpZXMgdGhlIHByZWRpY2F0ZQorCQkJ ICogY29uZGl0aW9uIG9mIHRoZSBwYXJ0aWFsIGluZGV4Ii4KKwkJCSAqLworCQkJZWNvbnRleHQt PmVjeHRfc2NhbnR1cGxlID0gb2xkX3R0czsKKwkJCW9sZF90dXBsZV9xdWFsaWZpZXMgPSBFeGVj UXVhbChwc3RhdGUsIGVjb250ZXh0KTsKKworCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0g bmV3X3R0czsKKwkJCW5ld190dXBsZV9xdWFsaWZpZXMgPSBFeGVjUXVhbChwc3RhdGUsIGVjb250 ZXh0KTsKKworCQkJLyoKKwkJCSAqIElmIG5laXRoZXIgdGhlIG9sZCBub3IgdGhlIG5ldyB0dXBs ZXMgc2F0aXNmeSB0aGUgcHJlZGljYXRlIHdlCisJCQkgKiBjYW4gYmUgc3VyZSB0aGF0IHRoaXMg aW5kZXggZG9lc24ndCBuZWVkIHVwZGF0aW5nLCBjb250aW51ZSB0bworCQkJICogdGhlIG5leHQg aW5kZXguCisJCQkgKi8KKwkJCWlmICgobmV3X3R1cGxlX3F1YWxpZmllcyA9PSBmYWxzZSkgJiYg KG9sZF90dXBsZV9xdWFsaWZpZXMgPT0gZmFsc2UpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgor CQkJICogSWYgdGhlcmUgaXMgYSB0cmFuc2l0aW9uIGJldHdlZW4gaW5kZXhlZCBhbmQgbm90IGlu ZGV4ZWQsCisJCQkgKiB0aGF0J3MgZW5vdWdoIHRvIHJlcXVpcmUgdGhhdCB0aGlzIGluZGV4IGlz IHVwZGF0ZWQuIElmIGFueQorCQkJICogc2luZ2xlIG5vbi1zdW1tYXJpemluZyBpbmRleCByZXF1 aXJlcyB1cGRhdGVzIHRoZW4gdGhleSBhbGwKKwkJCSAqIHNob3VsZCBiZSB1cGRhdGVkLgorCQkJ ICovCisJCQlpZiAobmV3X3R1cGxlX3F1YWxpZmllcyAhPSBvbGRfdHVwbGVfcXVhbGlmaWVzKQor CQkJeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkg KiBPdGhlcndpc2UgdGhlIG9sZCBhbmQgbmV3IHZhbHVlcyBleGlzdCBpbiB0aGUgaW5kZXgsIGJ1 dCBkaWQKKwkJCSAqIHRoZXkgZ2V0IHVwZGF0ZWQ/ICBXZSBkb24ndCB5ZXQga25vdywgc28gcHJv Y2VlZCB3aXRoIHRoZSBuZXh0CisJCQkgKiBzdGF0ZW1lbnQgaW4gdGhlIGxvb3AgdG8gZmluZCBv dXQuCisJCQkgKi8KKwkJfQorCisJCS8qCisJCSAqIEluZGV4ZXMgd2l0aCBleHByZXNzaW9ucyBt YXkgb3IgbWF5IG5vdCBoYXZlIGNoYW5nZWQsIGl0IGlzCisJCSAqIGltcG9zc2libGUgdG8ga25v dyB3aXRob3V0IGV4ZXJjaXNpbmcgdGhlaXIgZXhwcmVzc2lvbiBhbmQKKwkJICogcmV2aWV3aW5n IGluZGV4IHR1cGxlIHN0YXRlIGZvciBjaGFuZ2VzLiAgVGhpcyBpcyBhIGxvdCBvZiB3b3JrLAor CQkgKiBidXQgYmVjYXVzZSBhbGwgaW5kZXhlcyBvbiBKU09OQiBjb2x1bW5zIGZhbGwgaW50byB0 aGlzIGNhdGVnb3J5IGl0CisJCSAqIGNhbiBiZSB3b3J0aCBpdCB0byBhdm9pZCBpbmRleCB1cGRh dGVzIGFuZCByZW1haW4gb24gdGhlIEhPVCB1cGRhdGUKKwkJICogcGF0aCB3aGVuIHBvc3NpYmxl LgorCQkgKi8KKwkJaWYgKGJtc19vdmVybGFwKGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbkF0dHJz LCBtb2RpZmllZF9hdHRycykpCisJCXsKKwkJCURhdHVtCQlvbGRfdmFsdWVzW0lOREVYX01BWF9L RVlTXTsKKwkJCWJvb2wJCW9sZF9pc251bGxbSU5ERVhfTUFYX0tFWVNdOworCQkJRGF0dW0JCW5l d192YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOworCQkJYm9vbAkJbmV3X2lzbnVsbFtJTkRFWF9NQVhf S0VZU107CisJCQlib29sCQljaGFuZ2VkID0gZmFsc2U7CisKKwkJCS8qIENyZWF0ZSB0aGVzZSBv bmNlLCBvbmx5IGlmIG5lY2Vzc2FyeSwgdGhlbiByZXVzZSB0aGVtLiAqLworCQkJaWYgKG9sZF90 dHMgPT0gTlVMTCkKKwkJCXsKKwkJCQlvbGRfdHRzID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90 KHR1cGxlZGVzYywKKwkJCQkJCQkJCQkJCSAgICZUVFNPcHNIZWFwVHVwbGUpOworCQkJCUV4ZWNT dG9yZUhlYXBUdXBsZShvbGRfdHVwbGUsIG9sZF90dHMsIEludmFsaWRCdWZmZXIpOworCQkJfQor CisJCQlpZiAobmV3X3R0cyA9PSBOVUxMKQorCQkJeworCQkJCW5ld190dHMgPSBNYWtlU2luZ2xl VHVwbGVUYWJsZVNsb3QodHVwbGVkZXNjLAorCQkJCQkJCQkJCQkJICAgJlRUU09wc0hlYXBUdXBs ZSk7CisJCQkJRXhlY1N0b3JlSGVhcFR1cGxlKG5ld190dXBsZSwgbmV3X3R0cywgSW52YWxpZEJ1 ZmZlcik7CisJCQl9CisKKwkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IG9sZF90dHM7CisJ CQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sCisJCQkJCQkgICBvbGRfdHRzLAorCQkJCQkJICAg ZXN0YXRlLAorCQkJCQkJICAgb2xkX3ZhbHVlcywKKwkJCQkJCSAgIG9sZF9pc251bGwpOworCisJ CQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBuZXdfdHRzOworCQkJRm9ybUluZGV4RGF0dW0o aW5kZXhJbmZvLAorCQkJCQkJICAgbmV3X3R0cywKKwkJCQkJCSAgIGVzdGF0ZSwKKwkJCQkJCSAg IG5ld192YWx1ZXMsCisJCQkJCQkgICBuZXdfaXNudWxsKTsKKworCQkJZm9yIChpbnQgaiA9IDA7 IGogPCBpbmRleEluZm8tPmlpX051bUluZGV4S2V5QXR0cnM7IGorKykKKwkJCXsKKwkJCQlpZiAo b2xkX2lzbnVsbFtqXSAhPSBuZXdfaXNudWxsW2pdKQorCQkJCXsKKwkJCQkJY2hhbmdlZCA9IHRy dWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlIGlmICghb2xkX2lzbnVsbFtqXSkKKwkJ CQl7CisJCQkJCWludDE2CQllbG1sZW4gPSBpbmRleEluZm8tPmlpX0luZGV4QXR0ckxlbltqXTsK KwkJCQkJYm9vbAkJZWxtYnl2YWwgPSBibXNfaXNfbWVtYmVyKGosIGluZGV4SW5mby0+aWlfSW5k ZXhBdHRyQnlWYWwpOworCisJCQkJCWlmICghZGF0dW1faW1hZ2VfZXEob2xkX3ZhbHVlc1tqXSwg bmV3X3ZhbHVlc1tqXSwKKwkJCQkJCQkJCQllbG1ieXZhbCwgZWxtbGVuKSkKKwkJCQkJeworCQkJ CQkJY2hhbmdlZCA9IHRydWU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwor CQkJaW5kZXhJbmZvLT5paV9DaGVja2VkVW5jaGFuZ2VkID0gdHJ1ZTsKKwkJCWluZGV4SW5mby0+ aWlfSW5kZXhVbmNoYW5nZWQgPSAhY2hhbmdlZDsKKworCQkJaWYgKGNoYW5nZWQpCisJCQl7CisJ CQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChyZXN1 bHRSZWxJbmZvLT5yaV9vbGRUdXBsZVNsb3QgPT0gTlVMTCkKKwkJRXhlY0Ryb3BTaW5nbGVUdXBs ZVRhYmxlU2xvdChvbGRfdHRzKTsKKworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9uZXdUdXBsZVNs b3QgPT0gTlVMTCkKKwkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChuZXdfdHRzKTsKKwor CXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UmVwbGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmlu ZGV4IDVjZWY1NGYwMGVkLi5iM2NiYTM1NGQ4YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Jl cGxpY2F0aW9uLmMKQEAgLTYzOSw4ICs2MzksOCBAQCBFeGVjU2ltcGxlUmVsYXRpb25VcGRhdGUo UmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAlpZiAoIXNraXBfdHVwbGUpCiAJewogCQlM aXN0CSAgICpyZWNoZWNrSW5kZXhlcyA9IE5JTDsKLQkJVFVfVXBkYXRlSW5kZXhlcyB1cGRhdGVf aW5kZXhlczsKIAkJTGlzdAkgICAqY29uZmxpY3RpbmRleGVzOworCQlUVV9VcGRhdGVJbmRleGVz IHVwZGF0ZV9pbmRleGVzOwogCQlib29sCQljb25mbGljdCA9IGZhbHNlOwogCiAJCS8qIENvbXB1 dGUgc3RvcmVkIGdlbmVyYXRlZCBjb2x1bW5zICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jCmluZGV4IGIwZmU1MDA3NWFkLi5lZjRlOGQyNDk5ZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTIyODMsNyArMjI4Myw4IEBAIGxyZXBsYWNlOgog CQkJCQkJCQllc3RhdGUtPmVzX2Nyb3NzY2hlY2tfc25hcHNob3QsCiAJCQkJCQkJCXRydWUgLyog d2FpdCBmb3IgY29tbWl0ICovICwKIAkJCQkJCQkJJmNvbnRleHQtPnRtZmQsICZ1cGRhdGVDeHQt PmxvY2ttb2RlLAotCQkJCQkJCQkmdXBkYXRlQ3h0LT51cGRhdGVJbmRleGVzKTsKKwkJCQkJCQkJ JnVwZGF0ZUN4dC0+dXBkYXRlSW5kZXhlcywKKwkJCQkJCQkJZXN0YXRlKTsKIAogCXJldHVybiBy ZXN1bHQ7CiB9CkBAIC0yMzAxLDYgKzIzMDIsNyBAQCBFeGVjVXBkYXRlRXBpbG9ndWUoTW9kaWZ5 VGFibGVDb250ZXh0ICpjb250ZXh0LCBVcGRhdGVDb250ZXh0ICp1cGRhdGVDeHQsCiB7CiAJTW9k aWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9IGNvbnRleHQtPm10c3RhdGU7CiAJTGlzdAkgICAqcmVj aGVja0luZGV4ZXMgPSBOSUw7CisJYm9vbAkJb25seVN1bW1hcml6aW5nID0gdXBkYXRlQ3h0LT51 cGRhdGVJbmRleGVzID09IFRVX1N1bW1hcml6aW5nOwogCiAJLyogaW5zZXJ0IGluZGV4IGVudHJp ZXMgZm9yIHR1cGxlIGlmIG5lY2Vzc2FyeSAqLwogCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1J bmRpY2VzID4gMCAmJiAodXBkYXRlQ3h0LT51cGRhdGVJbmRleGVzICE9IFRVX05vbmUpKQpAQCAt MjMwOCw3ICsyMzEwLDcgQEAgRXhlY1VwZGF0ZUVwaWxvZ3VlKE1vZGlmeVRhYmxlQ29udGV4dCAq Y29udGV4dCwgVXBkYXRlQ29udGV4dCAqdXBkYXRlQ3h0LAogCQkJCQkJCQkJCQkgICBzbG90LCBj b250ZXh0LT5lc3RhdGUsCiAJCQkJCQkJCQkJCSAgIHRydWUsIGZhbHNlLAogCQkJCQkJCQkJCQkg ICBOVUxMLCBOSUwsCi0JCQkJCQkJCQkJCSAgICh1cGRhdGVDeHQtPnVwZGF0ZUluZGV4ZXMgPT0g VFVfU3VtbWFyaXppbmcpKTsKKwkJCQkJCQkJCQkJICAgb25seVN1bW1hcml6aW5nKTsKIAogCS8q IEFGVEVSIFJPVyBVUERBVEUgVHJpZ2dlcnMgKi8KIAlFeGVjQVJVcGRhdGVUcmlnZ2Vycyhjb250 ZXh0LT5lc3RhdGUsIHJlc3VsdFJlbEluZm8sCkBAIC00MzYyLDYgKzQzNjQsNyBAQCBFeGVjTW9k aWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJCQkJLyogTm93IGFwcGx5IHRoZSB1cGRhdGUu ICovCiAJCQkJc2xvdCA9IEV4ZWNVcGRhdGUoJmNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1cGxl aWQsIG9sZHR1cGxlLAogCQkJCQkJCQkgIG9sZFNsb3QsIHNsb3QsIG5vZGUtPmNhblNldFRhZyk7 CisKIAkJCQlpZiAodHVwbG9jaykKIAkJCQkJVW5sb2NrVHVwbGUocmVzdWx0UmVsSW5mby0+cmlf UmVsYXRpb25EZXNjLCB0dXBsZWlkLAogCQkJCQkJCQlJbnBsYWNlVXBkYXRlVHVwbGVMb2NrKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IGQxYWU3NjFiM2Y2Li4yMWNjZWZlZWZh MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCkBAIC02NCw2ICs2NCw3IEBACiAjaW5j bHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9zY2hlbWFwZy5oIgog I2luY2x1ZGUgImNhdGFsb2cvc3RvcmFnZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIK ICNpbmNsdWRlICJjb21tYW5kcy9wb2xpY3kuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNh dGlvbmNtZHMuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCkBAIC01MjA4LDYgKzUy MDksNyBAQCBSZWxhdGlvbkdldEluZGV4UHJlZGljYXRlKFJlbGF0aW9uIHJlbGF0aW9uKQogICoJ CQkJCQkJCQlpbmRleCAoZW1wdHkgaWYgRlVMTCkKICAqCUlOREVYX0FUVFJfQklUTUFQX0hPVF9C TE9DS0lORwlDb2x1bW5zIHRoYXQgYmxvY2sgdXBkYXRlcyBmcm9tIGJlaW5nIEhPVAogICoJSU5E RVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRAlDb2x1bW5zIGluY2x1ZGVkIGluIHN1bW1hcml6aW5n IGluZGV4ZXMKKyAqCUlOREVYX0FUVFJfQklUTUFQX0VYUFJFU1NJT04JQ29sdW1ucyBpbmNsdWRl ZCBpbiBleHByZXNpb24gaW5kZXhlcwogICoKICAqIEF0dHJpYnV0ZSBudW1iZXJzIGFyZSBvZmZz ZXQgYnkgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciBzbyB0aGF0CiAgKiB3ZSBj YW4gaW5jbHVkZSBzeXN0ZW0gYXR0cmlidXRlcyAoZS5nLiwgT0lEKSBpbiB0aGUgYml0bWFwIHJl cHJlc2VudGF0aW9uLgpAQCAtNTIzMSw3ICs1MjMzLDExIEBAIFJlbGF0aW9uR2V0SW5kZXhBdHRy Qml0bWFwKFJlbGF0aW9uIHJlbGF0aW9uLCBJbmRleEF0dHJCaXRtYXBLaW5kIGF0dHJLaW5kKQog CUJpdG1hcHNldCAgKnBraW5kZXhhdHRyczsJLyogY29sdW1ucyBpbiB0aGUgcHJpbWFyeSBpbmRl eCAqLwogCUJpdG1hcHNldCAgKmlkaW5kZXhhdHRyczsJLyogY29sdW1ucyBpbiB0aGUgcmVwbGlj YSBpZGVudGl0eSAqLwogCUJpdG1hcHNldCAgKmhvdGJsb2NraW5nYXR0cnM7CS8qIGNvbHVtbnMg d2l0aCBIT1QgYmxvY2tpbmcgaW5kZXhlcyAqLworCUJpdG1hcHNldCAgKmhvdGJsb2NraW5nZXhw cmF0dHJzOwkvKiBhcyBhYm92ZSwgYnV0IG9ubHkgdGhvc2UgaW4KKwkJCQkJCQkJCQkgKiBleHBy ZXNzaW9ucyAqLwogCUJpdG1hcHNldCAgKnN1bW1hcml6ZWRhdHRyczsJLyogY29sdW1ucyB3aXRo IHN1bW1hcml6aW5nIGluZGV4ZXMgKi8KKwlCaXRtYXBzZXQgICpzdW1tYXJpemVkZXhwcmF0dHJz OwkvKiBhcyBhYm92ZSwgYnV0IG9ubHkgdGhvc2UgaW4KKwkJCQkJCQkJCQkgKiBleHByZXNzaW9u cyAqLwogCUxpc3QJICAgKmluZGV4b2lkbGlzdDsKIAlMaXN0CSAgICpuZXdpbmRleG9pZGxpc3Q7 CiAJT2lkCQkJcmVscGtpbmRleDsKQEAgLTUyNTQsNiArNTI2MCw4IEBAIFJlbGF0aW9uR2V0SW5k ZXhBdHRyQml0bWFwKFJlbGF0aW9uIHJlbGF0aW9uLCBJbmRleEF0dHJCaXRtYXBLaW5kIGF0dHJL aW5kKQogCQkJCXJldHVybiBibXNfY29weShyZWxhdGlvbi0+cmRfaG90YmxvY2tpbmdhdHRyKTsK IAkJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRDoKIAkJCQlyZXR1cm4gYm1zX2Nv cHkocmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyKTsKKwkJCWNhc2UgSU5ERVhfQVRUUl9CSVRN QVBfRVhQUkVTU0lPTjoKKwkJCQlyZXR1cm4gYm1zX2NvcHkocmVsYXRpb24tPnJkX2V4cHJlc3Np b25hdHRyKTsKIAkJCWRlZmF1bHQ6CiAJCQkJZWxvZyhFUlJPUiwgInVua25vd24gYXR0cktpbmQg JXUiLCBhdHRyS2luZCk7CiAJCX0KQEAgLTUyOTcsNyArNTMwNSw5IEBAIHJlc3RhcnQ6CiAJcGtp bmRleGF0dHJzID0gTlVMTDsKIAlpZGluZGV4YXR0cnMgPSBOVUxMOwogCWhvdGJsb2NraW5nYXR0 cnMgPSBOVUxMOworCWhvdGJsb2NraW5nZXhwcmF0dHJzID0gTlVMTDsKIAlzdW1tYXJpemVkYXR0 cnMgPSBOVUxMOworCXN1bW1hcml6ZWRleHByYXR0cnMgPSBOVUxMOwogCWZvcmVhY2gobCwgaW5k ZXhvaWRsaXN0KQogCXsKIAkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rfb2lkKGwpOwpAQCAtNTMx MSw2ICs1MzIxLDcgQEAgcmVzdGFydDoKIAkJYm9vbAkJaXNQSzsJCS8qIHByaW1hcnkga2V5ICov CiAJCWJvb2wJCWlzSURLZXk7CS8qIHJlcGxpY2EgaWRlbnRpdHkgaW5kZXggKi8KIAkJQml0bWFw c2V0ICoqYXR0cnM7CisJCUJpdG1hcHNldCAqKmV4cHJhdHRyczsKIAogCQlpbmRleERlc2MgPSBp bmRleF9vcGVuKGluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOwogCkBAIC01MzU0LDE0ICs1MzY1 LDIwIEBAIHJlc3RhcnQ6CiAJCSAqIGRlY2lkZSB3aGljaCBiaXRtYXAgd2UnbGwgdXBkYXRlIGlu IHRoZSBmb2xsb3dpbmcgbG9vcC4KIAkJICovCiAJCWlmIChpbmRleERlc2MtPnJkX2luZGFtLT5h bXN1bW1hcml6aW5nKQorCQl7CiAJCQlhdHRycyA9ICZzdW1tYXJpemVkYXR0cnM7CisJCQlleHBy YXR0cnMgPSAmc3VtbWFyaXplZGV4cHJhdHRyczsKKwkJfQogCQllbHNlCisJCXsKIAkJCWF0dHJz ID0gJmhvdGJsb2NraW5nYXR0cnM7CisJCQlleHByYXR0cnMgPSAmaG90YmxvY2tpbmdleHByYXR0 cnM7CisJCX0KIAogCQkvKiBDb2xsZWN0IHNpbXBsZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcyAqLwog CQlmb3IgKGkgPSAwOyBpIDwgaW5kZXhEZXNjLT5yZF9pbmRleC0+aW5kbmF0dHM7IGkrKykKIAkJ ewotCQkJaW50CQkJYXR0cm51bSA9IGluZGV4RGVzYy0+cmRfaW5kZXgtPmluZGtleS52YWx1ZXNb aV07CisJCQlpbnQJCQlhdHRyaWR4ID0gaW5kZXhEZXNjLT5yZF9pbmRleC0+aW5ka2V5LnZhbHVl c1tpXTsKIAogCQkJLyoKIAkJCSAqIFNpbmNlIHdlIGhhdmUgY292ZXJpbmcgaW5kZXhlcyB3aXRo IG5vbi1rZXkgY29sdW1ucywgd2UgbXVzdApAQCAtNTM3NywzMCArNTM5NCwyOCBAQCByZXN0YXJ0 OgogCQkJICoga2V5IG9yIGlkZW50aXR5IGtleS4gSGVuY2Ugd2UgZG8gbm90IGluY2x1ZGUgdGhl bSBpbnRvCiAJCQkgKiB1aW5kZXhhdHRycywgcGtpbmRleGF0dHJzIGFuZCBpZGluZGV4YXR0cnMg Yml0bWFwcy4KIAkJCSAqLwotCQkJaWYgKGF0dHJudW0gIT0gMCkKKwkJCWlmIChhdHRyaWR4ICE9 IDApCiAJCQl7Ci0JCQkJKmF0dHJzID0gYm1zX2FkZF9tZW1iZXIoKmF0dHJzLAotCQkJCQkJCQkJ CWF0dHJudW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwkJCQlBdHRy TnVtYmVyCWF0dHJudW0gPSBhdHRyaWR4IC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51 bWJlcjsKKworCQkJCSphdHRycyA9IGJtc19hZGRfbWVtYmVyKCphdHRycywgYXR0cm51bSk7CiAK IAkJCQlpZiAoaXNLZXkgJiYgaSA8IGluZGV4RGVzYy0+cmRfaW5kZXgtPmluZG5rZXlhdHRzKQot CQkJCQl1aW5kZXhhdHRycyA9IGJtc19hZGRfbWVtYmVyKHVpbmRleGF0dHJzLAotCQkJCQkJCQkJ CQkJIGF0dHJudW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwkJCQkJ dWluZGV4YXR0cnMgPSBibXNfYWRkX21lbWJlcih1aW5kZXhhdHRycywgYXR0cm51bSk7CiAKIAkJ CQlpZiAoaXNQSyAmJiBpIDwgaW5kZXhEZXNjLT5yZF9pbmRleC0+aW5kbmtleWF0dHMpCi0JCQkJ CXBraW5kZXhhdHRycyA9IGJtc19hZGRfbWVtYmVyKHBraW5kZXhhdHRycywKLQkJCQkJCQkJCQkJ CSAgYXR0cm51bSAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCQkJCQlw a2luZGV4YXR0cnMgPSBibXNfYWRkX21lbWJlcihwa2luZGV4YXR0cnMsIGF0dHJudW0pOwogCiAJ CQkJaWYgKGlzSURLZXkgJiYgaSA8IGluZGV4RGVzYy0+cmRfaW5kZXgtPmluZG5rZXlhdHRzKQot CQkJCQlpZGluZGV4YXR0cnMgPSBibXNfYWRkX21lbWJlcihpZGluZGV4YXR0cnMsCi0JCQkJCQkJ CQkJCQkgIGF0dHJudW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwkJ CQkJaWRpbmRleGF0dHJzID0gYm1zX2FkZF9tZW1iZXIoaWRpbmRleGF0dHJzLCBhdHRybnVtKTsK IAkJCX0KIAkJfQogCiAJCS8qIENvbGxlY3QgYWxsIGF0dHJpYnV0ZXMgdXNlZCBpbiBleHByZXNz aW9ucywgdG9vICovCi0JCXB1bGxfdmFyYXR0bm9zKGluZGV4RXhwcmVzc2lvbnMsIDEsIGF0dHJz KTsKKwkJcHVsbF92YXJhdHRub3MoaW5kZXhFeHByZXNzaW9ucywgMSwgZXhwcmF0dHJzKTsKIAog CQkvKiBDb2xsZWN0IGFsbCBhdHRyaWJ1dGVzIGluIHRoZSBpbmRleCBwcmVkaWNhdGUsIHRvbyAq LwotCQlwdWxsX3ZhcmF0dG5vcyhpbmRleFByZWRpY2F0ZSwgMSwgYXR0cnMpOworCQlwdWxsX3Zh cmF0dG5vcyhpbmRleFByZWRpY2F0ZSwgMSwgZXhwcmF0dHJzKTsKIAogCQlpbmRleF9jbG9zZShp bmRleERlc2MsIEFjY2Vzc1NoYXJlTG9jayk7CiAJfQpAQCAtNTQyOSwxMSArNTQ0NCwzNyBAQCBy ZXN0YXJ0OgogCQlibXNfZnJlZShwa2luZGV4YXR0cnMpOwogCQlibXNfZnJlZShpZGluZGV4YXR0 cnMpOwogCQlibXNfZnJlZShob3RibG9ja2luZ2F0dHJzKTsKKwkJYm1zX2ZyZWUoaG90YmxvY2tp bmdleHByYXR0cnMpOwogCQlibXNfZnJlZShzdW1tYXJpemVkYXR0cnMpOworCQlibXNfZnJlZShz dW1tYXJpemVkZXhwcmF0dHJzKTsKIAogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCisJLyoKKwkgKiBI T1QtYmxvY2tpbmcgYXR0cmlidXRlcyAoY29sdW1ucykgc2hvdWxkIGluY2x1ZGUgYWxsIGNvbHVt bnMgdGhhdCBhcmUKKwkgKiBwYXJ0IG9mIHRoZSBpbmRleCwgYnV0IG5vdCBwYXJ0IG9mIHRoZSBp bmRleCBleHByZXNzaW9ucyBmcm9tIHBhcnRpYWwKKwkgKiBhbmQgZXhwcmVzc2lvbiBpbmRleGVz LiAgU28sIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleHByZXNzaW9uLW9ubHkKKwkgKiBjb2x1bW5z IGZyb20gdGhlIEhPVC1ibG9ja2luZyBjb2x1bW5zIGJpdG1hcCBhcyB0aG9zZSB3aWxsIGJlIGNo ZWNrZWQKKwkgKiBzZXBhcmF0ZWx5LiAgVGhpcyBpcyB0cnVlIGZvciBib3RoIHN1bW1hcml6aW5n IGFuZCBub24tc3VtbWFyaXppbmcKKwkgKiBpbmRleGVzIHdoaWNoIHdlJ3ZlIHNlcGFyYXRlZCBh Ym92ZSwgc28gd2UgaGF2ZSB0byBkbyB0aGlzIGZvciBib3RoCisJICogYml0bWFwcy4KKwkgKi8K KworCS8qIHtleHByZXNzaW9uLW9ubHkgY29sdW1uc30gPSB7ZXhwcmVzc2lvbiBjb2x1bW5zfSAt IHtkaXJlY3QgY29sdW1uc30gKi8KKwlob3RibG9ja2luZ2V4cHJhdHRycyA9IGJtc19kZWxfbWVt YmVycyhob3RibG9ja2luZ2V4cHJhdHRycywKKwkJCQkJCQkJCQkgICBob3RibG9ja2luZ2F0dHJz KTsKKwkvKiB7aG90LWJsb2NraW5nIGNvbHVtbnN9ID0ge2RpcmVjdCBjb2x1bW5zfSArIHtleHBy ZXNzaW9uLW9ubHkgY29sdW1uc30gKi8KKwlob3RibG9ja2luZ2F0dHJzID0gYm1zX2FkZF9tZW1i ZXJzKGhvdGJsb2NraW5nYXR0cnMsCisJCQkJCQkJCQkgICBob3RibG9ja2luZ2V4cHJhdHRycyk7 CisKKwkvKiB7c3VtbWFyaXplZC1vbmx5IGNvbHVtbnN9ID0ge2FsbCBzdW1tYXJpemVkIGNvbHVt bnN9IC0ge2RpcmVjdCBjb2x1bW5zfSAqLworCXN1bW1hcml6ZWRleHByYXR0cnMgPSBibXNfZGVs X21lbWJlcnMoc3VtbWFyaXplZGV4cHJhdHRycywKKwkJCQkJCQkJCQkgIHN1bW1hcml6ZWRhdHRy cyk7CisJLyoge3N1bW1hcml6ZWQgY29sdW1uc30gPSB7YWxsIGRpcmVjdCBjb2x1bW5zfSArIHtz dW1tYXJpemVkLW9ubHkgY29sdW1uc30gKi8KKwlzdW1tYXJpemVkYXR0cnMgPSBibXNfYWRkX21l bWJlcnMoc3VtbWFyaXplZGF0dHJzLAorCQkJCQkJCQkJICBzdW1tYXJpemVkZXhwcmF0dHJzKTsK KwogCS8qIERvbid0IGxlYWsgdGhlIG9sZCB2YWx1ZXMgb2YgdGhlc2UgYml0bWFwcywgaWYgYW55 ICovCiAJcmVsYXRpb24tPnJkX2F0dHJzdmFsaWQgPSBmYWxzZTsKIAlibXNfZnJlZShyZWxhdGlv bi0+cmRfa2V5YXR0cik7CkBAIC01NDQ2LDYgKzU0ODcsOCBAQCByZXN0YXJ0OgogCXJlbGF0aW9u LT5yZF9ob3RibG9ja2luZ2F0dHIgPSBOVUxMOwogCWJtc19mcmVlKHJlbGF0aW9uLT5yZF9zdW1t YXJpemVkYXR0cik7CiAJcmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRyID0gTlVMTDsKKwlibXNf ZnJlZShyZWxhdGlvbi0+cmRfZXhwcmVzc2lvbmF0dHIpOworCXJlbGF0aW9uLT5yZF9leHByZXNz aW9uYXR0ciA9IE5VTEw7CiAKIAkvKgogCSAqIE5vdyBzYXZlIGNvcGllcyBvZiB0aGUgYml0bWFw cyBpbiB0aGUgcmVsY2FjaGUgZW50cnkuICBXZSBpbnRlbnRpb25hbGx5CkBAIC01NDYwLDYgKzU1 MDMsNyBAQCByZXN0YXJ0OgogCXJlbGF0aW9uLT5yZF9pZGF0dHIgPSBibXNfY29weShpZGluZGV4 YXR0cnMpOwogCXJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIgPSBibXNfY29weShob3RibG9j a2luZ2F0dHJzKTsKIAlyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIgPSBibXNfY29weShzdW1t YXJpemVkYXR0cnMpOworCXJlbGF0aW9uLT5yZF9leHByZXNzaW9uYXR0ciA9IGJtc19jb3B5KGhv dGJsb2NraW5nZXhwcmF0dHJzKTsKIAlyZWxhdGlvbi0+cmRfYXR0cnN2YWxpZCA9IHRydWU7CiAJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiAKQEAgLTU0NzYsNiArNTUyMCw4IEBAIHJl c3RhcnQ6CiAJCQlyZXR1cm4gaG90YmxvY2tpbmdhdHRyczsKIAkJY2FzZSBJTkRFWF9BVFRSX0JJ VE1BUF9TVU1NQVJJWkVEOgogCQkJcmV0dXJuIHN1bW1hcml6ZWRhdHRyczsKKwkJY2FzZSBJTkRF WF9BVFRSX0JJVE1BUF9FWFBSRVNTSU9OOgorCQkJcmV0dXJuIGhvdGJsb2NraW5nZXhwcmF0dHJz OwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVua25vd24gYXR0cktpbmQgJXUiLCBhdHRy S2luZCk7CiAJCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29t cGxldGUuaW4uYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYwppbmRleCA4NDMyYmU2 NDFhYy4uZmMzMjUwMTc2ZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUu aW4uYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKQEAgLTI5OTIsNyArMjk5 Miw3IEBAIG1hdGNoX3ByZXZpb3VzX3dvcmRzKGludCBwYXR0ZXJuX2lkLAogCQlDT01QTEVURV9X SVRIKCIoIik7CiAJLyogQUxURVIgVEFCTEVTUEFDRSA8Zm9vPiBTRVR8UkVTRVQgKCAqLwogCWVs c2UgaWYgKE1hdGNoZXMoIkFMVEVSIiwgIlRBQkxFU1BBQ0UiLCBNYXRjaEFueSwgIlNFVHxSRVNF VCIsICIoIikpCi0JCUNPTVBMRVRFX1dJVEgoInNlcV9wYWdlX2Nvc3QiLCAicmFuZG9tX3BhZ2Vf Y29zdCIsCisJCUNPTVBMRVRFX1dJVEgoInNlcV9wYWdlX2Nvc3QiLCAicmFuZG9tX3BhZ2VfY29z dCIsICJleHByZXNzaW9uX2NoZWNrcyIsCiAJCQkJCSAgImVmZmVjdGl2ZV9pb19jb25jdXJyZW5j eSIsICJtYWludGVuYW5jZV9pb19jb25jdXJyZW5jeSIpOwogCiAJLyogQUxURVIgVEVYVCBTRUFS Q0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAxNjQwZDljMzJmNy4uZTEyZGExOTM0ZTkgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc2tleS5oIgog I2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgkJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkg Ki8KICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1 dG9yLmgiCiAjaW5jbHVkZSAibm9kZXMvbG9ja29wdGlvbnMuaCIKICNpbmNsdWRlICJub2Rlcy9w cmltbm9kZXMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKQEAgLTMzOSw3ICszNDAs NyBAQCBleHRlcm4gVE1fUmVzdWx0IGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVt UG9pbnRlciBvdGlkLAogCQkJCQkJCSBIZWFwVHVwbGUgbmV3dHVwLAogCQkJCQkJCSBDb21tYW5k SWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29sIHdhaXQsCiAJCQkJCQkJIHN0cnVjdCBU TV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJCQkJIFRV X1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzKTsKKwkJCQkJCQkgVFVfVXBkYXRlSW5kZXhl cyAqdXBkYXRlX2luZGV4ZXMsIHN0cnVjdCBFU3RhdGUgKmVzdGF0ZSk7CiBleHRlcm4gVE1fUmVz dWx0IGhlYXBfbG9ja190dXBsZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cGxlLAog CQkJCQkJCQkgQ29tbWFuZElkIGNpZCwgTG9ja1R1cGxlTW9kZSBtb2RlLCBMb2NrV2FpdFBvbGlj eSB3YWl0X3BvbGljeSwKIAkJCQkJCQkJIGJvb2wgZm9sbG93X3VwZGF0ZXMsCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaAppbmRleCAxMzFjMDUwYzE1Zi4uNjJlZDY1OTJiODUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApA QCAtMzgsNiArMzgsNyBAQCBzdHJ1Y3QgSW5kZXhJbmZvOwogc3RydWN0IFNhbXBsZVNjYW5TdGF0 ZTsKIHN0cnVjdCBWYWN1dW1QYXJhbXM7CiBzdHJ1Y3QgVmFsaWRhdGVJbmRleFN0YXRlOworc3Ry dWN0IEVTdGF0ZTsKIAogLyoKICAqIEJpdG1hc2sgdmFsdWVzIGZvciB0aGUgZmxhZ3MgYXJndW1l bnQgdG8gdGhlIHNjYW5fYmVnaW4gY2FsbGJhY2suCkBAIC01NTAsNyArNTUxLDggQEAgdHlwZWRl ZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJIGJvb2wgd2FpdCwKIAkJCQkJCQkJIFRN X0ZhaWx1cmVEYXRhICp0bWZkLAogCQkJCQkJCQkgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0J CQkJCQkJCSBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkJCSBUVV9V cGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcywKKwkJCQkJCQkJIHN0cnVjdCBFU3RhdGUgKmVz dGF0ZSk7CiAKIAkvKiBzZWUgdGFibGVfdHVwbGVfbG9jaygpIGZvciByZWZlcmVuY2UgYWJvdXQg cGFyYW1ldGVycyAqLwogCVRNX1Jlc3VsdAkoKnR1cGxlX2xvY2spIChSZWxhdGlvbiByZWwsCkBA IC0xNTQxLDEyICsxNTQzLDEyIEBAIHN0YXRpYyBpbmxpbmUgVE1fUmVzdWx0CiB0YWJsZV90dXBs ZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAq c2xvdCwKIAkJCQkgICBDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBzbmFwc2hvdCwgU25hcHNob3Qg Y3Jvc3NjaGVjaywKIAkJCQkgICBib29sIHdhaXQsIFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2Nr VHVwbGVNb2RlICpsb2NrbW9kZSwKLQkJCQkgICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5k ZXhlcykKKwkJCQkgICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcywgc3RydWN0IEVT dGF0ZSAqZXN0YXRlKQogewogCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX3VwZGF0ZShy ZWwsIG90aWQsIHNsb3QsCiAJCQkJCQkJCQkJIGNpZCwgc25hcHNob3QsIGNyb3NzY2hlY2ssCi0J CQkJCQkJCQkJIHdhaXQsIHRtZmQsCi0JCQkJCQkJCQkJIGxvY2ttb2RlLCB1cGRhdGVfaW5kZXhl cyk7CisJCQkJCQkJCQkJIHdhaXQsIHRtZmQsIGxvY2ttb2RlLAorCQkJCQkJCQkJCSB1cGRhdGVf aW5kZXhlcywgZXN0YXRlKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IGQx MmUzZjQ1MWQyLi5iNWZlNzRmMTc2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC02ODks NiArNjg5LDExIEBAIGV4dGVybiB2b2lkIGNoZWNrX2V4Y2x1c2lvbl9jb25zdHJhaW50KFJlbGF0 aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAogCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgdHVwbGVp ZCwKIAkJCQkJCQkJCSAgIGNvbnN0IERhdHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKmlzbnVsbCwK IAkJCQkJCQkJCSAgIEVTdGF0ZSAqZXN0YXRlLCBib29sIG5ld0luZGV4KTsKK2V4dGVybiBib29s IEV4ZWNFeHByZXNzaW9uSW5kZXhlc1VwZGF0ZWQoUmVsYXRpb24gcmVsYXRpb24sCisJCQkJCQkJ CQkJIEJpdG1hcHNldCAqbW9kaWZpZWRfYXR0cnMsCisJCQkJCQkJCQkJIEVTdGF0ZSAqZXN0YXRl LAorCQkJCQkJCQkJCSBIZWFwVHVwbGUgb2xkX3R1cGxlLAorCQkJCQkJCQkJCSBIZWFwVHVwbGUg bmV3X3R1cGxlKTsKIAogLyoKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlvbnMgaW4gZXhlY1Jl cGxpY2F0aW9uLmMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggYTMyM2ZhOThiYmIuLjZlNWY2MGNh ZDc2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTYwLDEyICsxNjAsMTUgQEAgdHlwZWRlZiBz dHJ1Y3QgRXhwclN0YXRlCiAgKgogICoJCU51bUluZGV4QXR0cnMJCXRvdGFsIG51bWJlciBvZiBj b2x1bW5zIGluIHRoaXMgaW5kZXgKICAqCQlOdW1JbmRleEtleUF0dHJzCW51bWJlciBvZiBrZXkg Y29sdW1ucyBpbiBpbmRleAorICoJCUluZGV4QXR0cnMJCQliaXRtYXAgb2YgaW5kZXggYXR0cmli dXRlcwogICoJCUluZGV4QXR0ck51bWJlcnMJdW5kZXJseWluZy1yZWwgYXR0cmlidXRlIG51bWJl cnMgdXNlZCBhcyBrZXlzCiAgKgkJCQkJCQkoemVyb2VzIGluZGljYXRlIGV4cHJlc3Npb25zKS4g SXQgYWxzbyBjb250YWlucwogICogCQkJCQkJCWluZm8gYWJvdXQgaW5jbHVkZWQgY29sdW1ucy4K ICAqCQlFeHByZXNzaW9ucwkJCWV4cHIgdHJlZXMgZm9yIGV4cHJlc3Npb24gZW50cmllcywgb3Ig TklMIGlmIG5vbmUKKyAqCQlFeHByZXNzaW9uQXR0cnMJCWJpdG1hcCBvZiBhdHRyaWJ1dGVzIHVz ZWQgd2l0aGluIHRoZSBleHByZXNzaW9uCiAgKgkJRXhwcmVzc2lvbnNTdGF0ZQlleGVjIHN0YXRl IGZvciBleHByZXNzaW9ucywgb3IgTklMIGlmIG5vbmUKICAqCQlQcmVkaWNhdGUJCQlwYXJ0aWFs LWluZGV4IHByZWRpY2F0ZSwgb3IgTklMIGlmIG5vbmUKKyAqCQlQcmVkaWNhdGVBdHRycwkJYml0 bWFwIG9mIGF0dHJpYnV0ZXMgdXNlZCB3aXRoaW4gdGhlIHByZWRpY2F0ZQogICoJCVByZWRpY2F0 ZVN0YXRlCQlleGVjIHN0YXRlIGZvciBwcmVkaWNhdGUsIG9yIE5JTCBpZiBub25lCiAgKgkJRXhj bHVzaW9uT3BzCQlQZXItY29sdW1uIGV4Y2x1c2lvbiBvcGVyYXRvcnMsIG9yIE5VTEwgaWYgbm9u ZQogICoJCUV4Y2x1c2lvblByb2NzCQlVbmRlcmx5aW5nIGZ1bmN0aW9uIE9JRHMgZm9yIEV4Y2x1 c2lvbk9wcwpAQCAtMTg0LDYgKzE4Nyw3IEBAIHR5cGVkZWYgc3RydWN0IEV4cHJTdGF0ZQogICoJ CVBhcmFsbGVsV29ya2VycwkJIyBvZiB3b3JrZXJzIHJlcXVlc3RlZCAoZXhjbHVkZXMgbGVhZGVy KQogICoJCUFtCQkJCQlPaWQgb2YgaW5kZXggQU0KICAqCQlBbUNhY2hlCQkJCXByaXZhdGUgY2Fj aGUgYXJlYSBmb3IgaW5kZXggQU0KKyAqCQlPcENsYXNzRGF0YVR5cGVzCW9wZXJhdG9yIGNsYXNz IGRhdGEgdHlwZXMKICAqCQlDb250ZXh0CQkJCW1lbW9yeSBjb250ZXh0IGhvbGRpbmcgdGhpcyBJ bmRleEluZm8KICAqCiAgKiBpaV9Db25jdXJyZW50LCBpaV9Ccm9rZW5Ib3RDaGFpbiwgYW5kIGlp X1BhcmFsbGVsV29ya2VycyBhcmUgdXNlZCBvbmx5CkBAIC0xOTUsMTAgKzE5OSwxNSBAQCB0eXBl ZGVmIHN0cnVjdCBJbmRleEluZm8KIAlOb2RlVGFnCQl0eXBlOwogCWludAkJCWlpX051bUluZGV4 QXR0cnM7CS8qIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIGluIGluZGV4ICovCiAJaW50CQkJaWlf TnVtSW5kZXhLZXlBdHRyczsJLyogbnVtYmVyIG9mIGtleSBjb2x1bW5zIGluIGluZGV4ICovCisJ Qml0bWFwc2V0ICAqaWlfSW5kZXhBdHRyczsKIAlBdHRyTnVtYmVyCWlpX0luZGV4QXR0ck51bWJl cnNbSU5ERVhfTUFYX0tFWVNdOworCXVpbnQxNgkJaWlfSW5kZXhBdHRyTGVuW0lOREVYX01BWF9L RVlTXTsKKwlCaXRtYXBzZXQgICppaV9JbmRleEF0dHJCeVZhbDsKIAlMaXN0CSAgICppaV9FeHBy ZXNzaW9uczsgLyogbGlzdCBvZiBFeHByICovCisJQml0bWFwc2V0ICAqaWlfRXhwcmVzc2lvbkF0 dHJzOwogCUxpc3QJICAgKmlpX0V4cHJlc3Npb25zU3RhdGU7CS8qIGxpc3Qgb2YgRXhwclN0YXRl ICovCiAJTGlzdAkgICAqaWlfUHJlZGljYXRlOwkvKiBsaXN0IG9mIEV4cHIgKi8KKwlCaXRtYXBz ZXQgICppaV9QcmVkaWNhdGVBdHRyczsKIAlFeHByU3RhdGUgICppaV9QcmVkaWNhdGVTdGF0ZTsK IAlPaWQJCSAgICppaV9FeGNsdXNpb25PcHM7CS8qIGFycmF5IHdpdGggb25lIGVudHJ5IHBlciBj b2x1bW4gKi8KIAlPaWQJCSAgICppaV9FeGNsdXNpb25Qcm9jczsJLyogYXJyYXkgd2l0aCBvbmUg ZW50cnkgcGVyIGNvbHVtbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgg Yi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAppbmRleCBkYjNlNTA0YzNkMi4uMzk5NzU2NzJkYTEg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbC5oCkBAIC0xNjQsNiArMTY0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsYXRpb25EYXRh CiAJQml0bWFwc2V0ICAqcmRfaWRhdHRyOwkJLyogaW5jbHVkZWQgaW4gcmVwbGljYSBpZGVudGl0 eSBpbmRleCAqLwogCUJpdG1hcHNldCAgKnJkX2hvdGJsb2NraW5nYXR0cjsgLyogY29scyBibG9j a2luZyBIT1QgdXBkYXRlICovCiAJQml0bWFwc2V0ICAqcmRfc3VtbWFyaXplZGF0dHI7CS8qIGNv bHMgaW5kZXhlZCBieSBzdW1tYXJpemluZyBpbmRleGVzICovCisJQml0bWFwc2V0ICAqcmRfZXhw cmVzc2lvbmF0dHI7CS8qIGluZGV4ZWQgY29scyByZWZlcmVuY2VkIGJ5IGV4cHJlc3Npb25zICov CiAKIAlQdWJsaWNhdGlvbkRlc2MgKnJkX3B1YmRlc2M7CS8qIHB1YmxpY2F0aW9uIGRlc2NyaXB0 b3IsIG9yIE5VTEwgKi8KIApAQCAtMzQ0LDYgKzM0NSw3IEBAIHR5cGVkZWYgc3RydWN0IFN0ZFJk T3B0aW9ucwogCWludAkJCXBhcmFsbGVsX3dvcmtlcnM7CS8qIG1heCBudW1iZXIgb2YgcGFyYWxs ZWwgd29ya2VycyAqLwogCVN0ZFJkT3B0SW5kZXhDbGVhbnVwIHZhY3V1bV9pbmRleF9jbGVhbnVw OwkvKiBjb250cm9scyBpbmRleCB2YWN1dW1pbmcgKi8KIAlib29sCQl2YWN1dW1fdHJ1bmNhdGU7 CS8qIGVuYWJsZXMgdmFjdXVtIHRvIHRydW5jYXRlIGEgcmVsYXRpb24gKi8KKwlib29sCQlleHBy ZXNzaW9uX2NoZWNrczsJLyogdXNlIGV4cHJlc3Npb24gdG8gY2hlY2tzIGZvciBjaGFuZ2VzICov CiAKIAkvKgogCSAqIEZyYWN0aW9uIG9mIHBhZ2VzIGluIGEgcmVsYXRpb24gdGhhdCB2YWN1dW0g Y2FuIGVhZ2VybHkgc2NhbiBhbmQgZmFpbApAQCAtNDA1LDYgKzQwNywxNCBAQCB0eXBlZGVmIHN0 cnVjdCBTdGRSZE9wdGlvbnMKIAkoKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyA/IFwKIAkgKChTdGRS ZE9wdGlvbnMgKikgKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyktPnBhcmFsbGVsX3dvcmtlcnMgOiAo ZGVmYXVsdHB3KSkKIAorLyoKKyAqIFJlbGF0aW9uR2V0RXhwcmVzc2lvbkNoZWNrcworICoJCVJl dHVybnMgdGhlIHJlbGF0aW9uJ3MgZXhwcmVzc2lvbl9jaGVja3MgcmVsb3B0aW9uIHNldHRpbmcu CisgKi8KKyNkZWZpbmUgUmVsYXRpb25HZXRFeHByZXNzaW9uQ2hlY2tzKHJlbGF0aW9uKSBcCisJ KChyZWxhdGlvbiktPnJkX29wdGlvbnMgPyBcCisJICgoU3RkUmRPcHRpb25zICopIChyZWxhdGlv biktPnJkX29wdGlvbnMpLT5leHByZXNzaW9uX2NoZWNrcyA6IHRydWUpCisKIC8qIFZpZXdPcHRp b25zLT5jaGVja19vcHRpb24gdmFsdWVzICovCiB0eXBlZGVmIGVudW0gVmlld09wdENoZWNrT3B0 aW9uCiB7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvcmVsY2FjaGUuaAppbmRleCBhN2M1NWRiMzM5ZS4uMGNjMjhjYjk3ZTIgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvcmVsY2FjaGUuaApAQCAtNjMsNiArNjMsNyBAQCB0eXBlZGVmIGVudW0gSW5kZXhBdHRy Qml0bWFwS2luZAogCUlOREVYX0FUVFJfQklUTUFQX0lERU5USVRZX0tFWSwKIAlJTkRFWF9BVFRS X0JJVE1BUF9IT1RfQkxPQ0tJTkcsCiAJSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRCwKKwlJ TkRFWF9BVFRSX0JJVE1BUF9FWFBSRVNTSU9OLAogfSBJbmRleEF0dHJCaXRtYXBLaW5kOwogCiBl eHRlcm4gQml0bWFwc2V0ICpSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChSZWxhdGlvbiByZWxh dGlvbiwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaGVhcF9ob3RfdXBk YXRlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2hlYXBfaG90X3VwZGF0ZXMub3V0 Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMjdjODc2MGQ2OQotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaGVhcF9ob3RfdXBkYXRl cy5vdXQKQEAgLTAsMCArMSw2NjUgQEAKKy0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tCistLSBUaGlzIHRh YmxlIHdpbGwgaGF2ZSB0d28gY29sdW1ucyBhbmQgdHdvIGluZGV4ZXMsIG9uZSBvbiB0aGUgcHJp bWFyeSBrZXkKKy0tIGlkIGFuZCBvbmUgb24gdGhlIGV4cHJlc3Npb24gKGluZm8tPj4nbmFtZScp LiAgVGhhdCBtZWFucyB0aGF0IHRoZSBpbmRleGVkCistLSBhdHRyaWJ1dGVzIGFyZSAnaWQnIGFu ZCAnaW5mbycuCitjcmVhdGUgdGFibGUga2V5dmFsdWUoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwg aW5mbyBqc29uYik7CitjcmVhdGUgaW5kZXggbmFtZWluZGV4IG9uIGtleXZhbHVlKChpbmZvLT4+ J25hbWUnKSk7CitpbnNlcnQgaW50byBrZXl2YWx1ZSB2YWx1ZXMgKDEsICd7Im5hbWUiOiAiam9o biIsICJkYXRhIjogInNvbWUgZGF0YSJ9Jyk7CistLSBEaXNhYmxlIGV4cHJlc3Npb24gY2hlY2tz LgorQUxURVIgVEFCTEUga2V5dmFsdWUgU0VUIChleHByZXNzaW9uX2NoZWNrcyA9IGZhbHNlKTsK K1NFTEVDVCByZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICdrZXl2YWx1 ZSc7CisgICAgICAgIHJlbG9wdGlvbnMgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIHtleHByZXNzaW9uX2NoZWNrcz1mYWxzZX0KKygxIHJvdykKKworLS0gV2hpbGUgdGhl IGluZGV4ZWQgYXR0cmlidXRlICJuYW1lIiBpcyB1bmNoYW5nZWQgd2UndmUgZGlzYWJsZWQgZXhw cmVzc2lvbgorLS0gY2hlY2tzIHNvIHRoaXMgdXBkYXRlIHNob3VsZCBub3QgZ28gSE9UIGFzIHRo ZSBzeXN0ZW0gY2FuJ3QgZGV0ZXJtaW5lIGlmCistLSB0aGUgaW5kZXhlZCBhdHRyaWJ1dGUgaGFz IGNoYW5nZWQgd2l0aG91dCBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uLgordXBkYXRlIGtleXZh bHVlIHNldCBpbmZvPSd7Im5hbWUiOiAiam9obiIsICJkYXRhIjogInNvbWV0aGluZyBlbHNlIn0n IHdoZXJlIGlkPTE7CitzZWxlY3QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQo J2tleXZhbHVlJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDAgcm93CisgcGdfc3RhdF9nZXRfeGFj dF90dXBsZXNfaG90X3VwZGF0ZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKygxIHJvdykKKworLS0g UmUtZW5hYmxlIGV4cHJlc3Npb24gY2hlY2tzLgorQUxURVIgVEFCTEUga2V5dmFsdWUgU0VUIChl eHByZXNzaW9uX2NoZWNrcyA9IHRydWUpOworU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFz cyBXSEVSRSByZWxuYW1lID0gJ2tleXZhbHVlJzsKKyAgICAgICAgcmVsb3B0aW9ucyAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHtleHByZXNzaW9uX2NoZWNrcz10cnVlfQor KDEgcm93KQorCistLSBUaGUgaW5kZXhlZCBhdHRyaWJ1dGUgIm5hbWUiIHdpdGggdmFsdWUgImpv aG4iIGlzIHVuY2hhbmdlZCwgZXhwZWN0IGEgSE9UIHVwZGF0ZS4KK3VwZGF0ZSBrZXl2YWx1ZSBz ZXQgaW5mbz0neyJuYW1lIjogImpvaG4iLCAiZGF0YSI6ICJzb21lIG90aGVyIGRhdGEifScgd2hl cmUgaWQ9MTsKK3NlbGVjdCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgna2V5 dmFsdWUnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDogMSByb3cKKyBwZ19zdGF0X2dldF94YWN0X3R1 cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorKDEgcm93KQorCistLSBUaGUg Zm9sbG93aW5nIHVwZGF0ZSBjaGFuZ2VzIHRoZSBpbmRleGVkIGF0dHJpYnV0ZSAibmFtZSIsIHRo aXMgc2hvdWxkIG5vdCBiZSBhIEhPVCB1cGRhdGUuCit1cGRhdGUga2V5dmFsdWUgc2V0IGluZm89 J3sibmFtZSI6ICJzbWl0aCIsICJkYXRhIjogInNvbWUgb3RoZXIgZGF0YSJ9JyB3aGVyZSBpZD0x Oworc2VsZWN0IHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdrZXl2YWx1ZSc6 OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5vIG5ldyBIT1QgdXBkYXRlcworIHBnX3N0YXRfZ2V0 X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisoMSByb3cpCisK Ky0tIE5vdywgdGhpcyB1cGRhdGUgZG9lcyBub3QgY2hhbmdlIHRoZSBpbmRleGVkIGF0dHJpYnV0 ZSAibmFtZSIgZnJvbSAic21pdGgiLCB0aGlzIHNob3VsZCBiZSBIT1QuCit1cGRhdGUga2V5dmFs dWUgc2V0IGluZm89J3sibmFtZSI6ICJzbWl0aCIsICJkYXRhIjogInNvbWUgbW9yZSBkYXRhIn0n IHdoZXJlIGlkPTE7CitzZWxlY3QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQo J2tleXZhbHVlJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDIgcm93cyBub3cKKyBwZ19zdGF0X2dl dF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorKDEgcm93KQor Citkcm9wIHRhYmxlIGtleXZhbHVlOworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0tIFRoaXMgdGFi bGUgaXMgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIG9uZSBidXQgaXQgaGFzIGEgdGhpcmQgaW5k ZXguICBUaGUKKy0tIGluZGV4ICdjb2xpbmRleCcgaXNuJ3QgYW4gZXhwcmVzc2lvbiBpbmRleCwg aXQgaW5kZXhlcyB0aGUgZW50aXJlIHZhbHVlCistLSBpbiB0aGUgaW5mbyBjb2x1bW4uICBUaGVy ZSBhcmUgc3RpbGwgb25seSB0d28gaW5kZXhlZCBhdHRyaWJ1dGVzIGZvciB0aGlzCistLSByZWxh dGlvbiwgdGhlIHNhbWUgdHdvIGFzIGJlZm9yZS4gIFRoZSBwcmVzZW5jZSBvZiBhbiBpbmRleCBv biB0aGUgZW50aXJlCistLSB2YWx1ZSBvZiB0aGUgaW5mbyBjb2x1bW4gc2hvdWxkIHByZXZlbnQg SE9UIHVwZGF0ZXMgZm9yIGFueSB1cGRhdGVzIHRvIGFueQorLS0gcG9ydGlvbiBvZiBKU09OQiBj b250ZW50IGluIHRoYXQgY29sdW1uLgorY3JlYXRlIHRhYmxlIGtleXZhbHVlKGlkIGludGVnZXIg cHJpbWFyeSBrZXksIGluZm8ganNvbmIpOworY3JlYXRlIGluZGV4IG5hbWVpbmRleCBvbiBrZXl2 YWx1ZSgoaW5mby0+PiduYW1lJykpOworY3JlYXRlIGluZGV4IGNvbGluZGV4IG9uIGtleXZhbHVl KGluZm8pOworaW5zZXJ0IGludG8ga2V5dmFsdWUgdmFsdWVzICgxLCAneyJuYW1lIjogImpvaG4i LCAiZGF0YSI6ICJzb21lIGRhdGEifScpOworLS0gVGhpcyB1cGRhdGUgZG9lc24ndCBjaGFuZ2Ug dGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGluZGV4LCBidXQgaXQgZG9lcworLS0gY2hhbmdl IHRoZSBjb250ZW50IG9mIHRoZSBpbmZvIGNvbHVtbiBhbmQgc28gc2hvdWxkIG5vdCBiZSBIT1Qg YmVjYXVzZSB0aGUKKy0tIGluZGV4ZWQgdmFsdWUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0aGUg dXBkYXRlLgordXBkYXRlIGtleXZhbHVlIHNldCBpbmZvPSd7Im5hbWUiOiAiam9obiIsICJkYXRh IjogInNvbWUgb3RoZXIgZGF0YSJ9JyB3aGVyZSBpZD0xOworc2VsZWN0IHBnX3N0YXRfZ2V0X3hh Y3RfdHVwbGVzX2hvdF91cGRhdGVkKCdrZXl2YWx1ZSc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAw IHJvd3MKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMAorKDEgcm93KQorCitkcm9wIHRhYmxlIGtleXZhbHVlOworLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0KKy0tIFRoZSB0YWJsZSBoYXMgb25lIGNvbHVtbiBkb2NzIGFuZCB0d28gaW5kZXhlcy4g IFRoZXkgYXJlIGJvdGggZXhwcmVzc2lvbgorLS0gaW5kZXhlcyByZWZlcmVuY2luZyB0aGUgc2Ft ZSBjb2x1bW4gYXR0cmlidXRlIChkb2NzKSBidXQgb25lIGlzIGEgcGFydGlhbAorLS0gaW5kZXgu CitDUkVBVEUgVEFCTEUgZXggKGRvY3MgSlNPTkIpIFdJVEggKGZpbGxmYWN0b3IgPSA2MCk7CitJ TlNFUlQgSU5UTyBleCAoZG9jcykgVkFMVUVTICgneyJhIjogMCwgImIiOiAwfScpOworSU5TRVJU IElOVE8gZXggKGRvY3MpIFNFTEVDVCBqc29uYl9idWlsZF9vYmplY3QoJ2InLCBuKSBGUk9NIGdl bmVyYXRlX3NlcmllcygxMDAsIDEwMDAwKSBhcyBuOworQ1JFQVRFIElOREVYIGlkeF9leF9hIE9O IGV4ICgoZG9jcy0+PidhJykpOworQ1JFQVRFIElOREVYIGlkeF9leF9iIE9OIGV4ICgoZG9jcy0+ PidiJykpIFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA+IDk7CistLSBXZSdyZSB1c2luZyBC VFJFRSBpbmRleGVzIGFuZCBmb3IgdGhpcyB0ZXN0IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQg dGhleSByZW1haW4KKy0tIGluIHN5bmMgd2l0aCBjaGFuZ2VzIHRvIG91ciByZWxhdGlvbi4gIEZv cmNlIHRoZSBjaG9pY2Ugb2YgaW5kZXggc2NhbnMgYmVsb3cgc28KKy0tIHRoYXQgd2Uga25vdyB3 ZSdyZSBjaGVja2luZyB0aGUgaW5kZXgncyB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdmFsdWVzIHNo b3VsZCBiZQorLS0gaW4gdGhlIGluZGV4IG9yIG5vdC4KK1NFVCBTRVNTSU9OIGVuYWJsZV9zZXFz Y2FuID0gT0ZGOworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBPRkY7CistLSBMZWF2 ZSAnYScgdW5jaGFuZ2VkIGJ1dCBtb2RpZnkgJ2InIHRvIGEgdmFsdWUgb3V0c2lkZSBvZiB0aGUg aW5kZXggcHJlZGljYXRlLgorLS0gVGhpcyBzaG91bGQgYmUgYSBIT1QgdXBkYXRlIGJlY2F1c2Ug bmVpdGhlciBpbmRleCBpcyBjaGFuZ2VkLgorVVBEQVRFIGV4IFNFVCBkb2NzID0ganNvbmJfYnVp bGRfb2JqZWN0KCdhJywgMCwgJ2InLCAxKSBXSEVSRSAoZG9jcy0+PidhJyk6Om51bWVyaWMgPSAw OworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2Ns YXNzKTsgLS0gZXhwZWN0OiAxIHJvdworIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRh dGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxCisoMSByb3cpCisKKy0tIExldCdzIGNoZWNrIHRvIG1h a2Ugc3VyZSB0aGF0IHRoZSBpbmRleCBkb2VzIG5vdCBjb250YWluIGEgdmFsdWUgZm9yICdiJwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGV4IFdIRVJFIChkb2NzLT4+J2InKTo6 bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEwMDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IFNjYW4gdXNpbmcgaWR4X2V4X2Igb24gZXgKKyAgIEZpbHRlcjogKCgoZG9jcyAt Pj4gJ2InOjp0ZXh0KSk6Om51bWVyaWMgPCAnMTAwJzo6bnVtZXJpYykKKygyIHJvd3MpCisKK1NF TEVDVCAqIEZST00gZXggV0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3Mt Pj4nYicpOjpudW1lcmljIDwgMTAwOworIGRvY3MgCistLS0tLS0KKygwIHJvd3MpCisKKy0tIExl YXZlICdhJyB1bmNoYW5nZWQgYnV0IG1vZGlmeSAnYicgdG8gYSB2YWx1ZSB3aXRoaW4gdGhlIGlu ZGV4IHByZWRpY2F0ZS4KKy0tIFRoaXMgcmVwcmVzZW50cyBhIGNoYW5nZSBmb3IgZmllbGQgJ2In IGZyb20gdW5pbmRleGVkIHRvIGluZGV4ZWQgYW5kIHNvCistLSB0aGlzIHNob3VsZCBub3QgdGFr ZSB0aGUgSE9UIHBhdGguCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3Qo J2EnLCAwLCAnYicsIDEwKSBXSEVSRSAoZG9jcy0+PidhJyk6Om51bWVyaWMgPSAwOworU0VMRUNU IHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0g ZXhwZWN0OiAxIG5vIG5ldyBIT1QgdXBkYXRlcworIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hv dF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisoMSByb3cpCisKKy0tIExldCdzIGNoZWNr IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmRleCBjb250YWlucyB0aGUgbmV3IHZhbHVlIG9mICdi JworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGV4IFdIRVJFIChkb2NzLT4+J2In KTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEwMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEluZGV4IFNjYW4gdXNpbmcgaWR4X2V4X2Igb24gZXgKKyAgIEZpbHRlcjogKCgoZG9j cyAtPj4gJ2InOjp0ZXh0KSk6Om51bWVyaWMgPCAnMTAwJzo6bnVtZXJpYykKKygyIHJvd3MpCisK K1NFTEVDVCAqIEZST00gZXggV0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmljID4gOSBBTkQgKGRv Y3MtPj4nYicpOjpudW1lcmljIDwgMTAwOworICAgICAgIGRvY3MgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLQorIHsiYSI6IDAsICJiIjogMTB9CisoMSByb3cpCisKKy0tIFRoaXMgdXBkYXRl IG1vZGlmaWVzIHRoZSB2YWx1ZSBvZiAnYScsIGFuIGluZGV4ZWQgZmllbGQsIHNvIGl0IGFsc28g Y2Fubm90CistLSBiZSBhIEhPVCB1cGRhdGUuCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9i dWlsZF9vYmplY3QoJ2EnLCAxLCAnYicsIDEwKSBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMg PSAxMDsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnZXgnOjpy ZWdjbGFzcyk7IC0tIGV4cGVjdDogMSBubyBuZXcgSE9UIHVwZGF0ZXMKKyBwZ19zdGF0X2dldF94 YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorKDEgcm93KQorCist LSBUaGlzIHVwZGF0ZSBjaGFuZ2VzIGJvdGggJ2EnIGFuZCAnYicgdG8gbmV3IHZhbHVlcyB0aGF0 IHJlcXVpcmUgaW5kZXggdXBkYXRlcywKKy0tIHRoaXMgY2Fubm90IHVzZSB0aGUgSE9UIHBhdGgu CitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3QoJ2EnLCAyLCAnYicsIDEy KSBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPSAxMDsKK1NFTEVDVCBwZ19zdGF0X2dldF94 YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnZXgnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDogMSBubyBu ZXcgSE9UIHVwZGF0ZXMKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMQorKDEgcm93KQorCistLSBMZXQncyBjaGVjayB0byBtYWtlIHN1cmUg dGhhdCB0aGUgaW5kZXggY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiAnYicKK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUICogRlJPTSBleCBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5 IEFORCAoZG9jcy0+PidiJyk6Om51bWVyaWMgPCAxMDA7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBT Y2FuIHVzaW5nIGlkeF9leF9iIG9uIGV4CisgICBGaWx0ZXI6ICgoKGRvY3MgLT4+ICdiJzo6dGV4 dCkpOjpudW1lcmljIDwgJzEwMCc6Om51bWVyaWMpCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9N IGV4IFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVt ZXJpYyA8IDEwMDsKKyAgICAgICBkb2NzICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7 ImEiOiAyLCAiYiI6IDEyfQorKDEgcm93KQorCistLSBUaGlzIHVwZGF0ZSBjaGFuZ2VzICdiJyB0 byBhIHZhbHVlIG91dHNpZGUgaXRzIHByZWRpY2F0ZSByZXF1aXJpbmcgdGhhdAorLS0gd2UgcmVt b3ZlIGl0IGZyb20gdGhlIGluZGV4LiAgVGhhdCdzIGEgdHJhbnNpdGlvbiB0aGF0IGNhbid0IGJl IGRvbmUKKy0tIGR1cmluZyBhIEhPVCB1cGRhdGUuCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29u Yl9idWlsZF9vYmplY3QoJ2EnLCAyLCAnYicsIDEpIFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJp YyA9IDEyOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6 OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5vIG5ldyBIT1QgdXBkYXRlcworIHBnX3N0YXRfZ2V0 X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisoMSByb3cpCisK Ky0tIExldCdzIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmRleCBubyBsb25nZXIgY29u dGFpbnMgdGhlIHZhbHVlIG9mICdiJworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9N IGV4IFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVt ZXJpYyA8IDEwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgaWR4X2V4X2Igb24g ZXgKKyAgIEZpbHRlcjogKCgoZG9jcyAtPj4gJ2InOjp0ZXh0KSk6Om51bWVyaWMgPCAnMTAwJzo6 bnVtZXJpYykKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gZXggV0hFUkUgKGRvY3MtPj4nYicp OjpudW1lcmljID4gOSBBTkQgKGRvY3MtPj4nYicpOjpudW1lcmljIDwgMTAwOworIGRvY3MgCist LS0tLS0KKygwIHJvd3MpCisKKy0tIERpc2FibGUgZXhwcmVzc2lvbiBjaGVja3MuCitBTFRFUiBU QUJMRSBleCBTRVQgKGV4cHJlc3Npb25fY2hlY2tzID0gZmFsc2UpOworU0VMRUNUIHJlbG9wdGlv bnMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ2V4JzsKKyAgICAgICAgICAgICAgIHJl bG9wdGlvbnMgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIHtmaWxsZmFjdG9yPTYwLGV4cHJlc3Npb25fY2hlY2tzPWZhbHNlfQorKDEg cm93KQorCistLSBUaGlzIHVwZGF0ZSBjaGFuZ2VzICdiJyB0byBhIHZhbHVlIHdpdGhpbiBpdHMg cHJlZGljYXRlIGp1c3QgbGlrZSBpdAorLS0gcHJldmlvdXMgdmFsdWUsIHdoaWNoIHdvdWxkIGFs bG93IGZvciBhIEhPVCB1cGRhdGUgYnV0IHdpdGggZXhwcmVzc2lvbgorLS0gY2hlY2tzIGRpc2Fi bGVkIHdlIGNhbid0IGRldGVybWluZSB0aGF0IHNvIHRoaXMgc2hvdWxkIG5vdCBiZSBhIEhPVCB1 cGRhdGUuCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3QoJ2EnLCAyLCAn YicsIDIpIFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA9IDE7CitTRUxFQ1QgcGdfc3RhdF9n ZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDEg bm8gbmV3IEhPVCB1cGRhdGVzCisgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEKKygxIHJvdykKKworLS0gTGV0J3MgbWFrZSBzdXJlIHdlJ3Jl IHJlY29yZGluZyBIT1QgdXBkYXRlcyBmb3Igb3VyICdleCcgcmVsYXRpb24gcHJvcGVybHkgaW4g dGhlIHN5c3RlbQorLS0gdGFibGUgcGdfc3RhdF91c2VyX3RhYmxlcy4gIE5vdGUgdGhhdCBzdGF0 aXN0aWNzIGFyZSBzdG9yZWQgd2l0aGluIGEgdHJhbnNhY3Rpb24gY29udGV4dAorLS0gZmlyc3Qg KHhhY3QpIGFuZCB0aGVuIGxhdGVyIGludG8gdGhlIGdsb2JhbCBzdGF0aXN0aWNzIGZvciBhIHJl bGF0aW9uLCBzbyBmaXJzdCB3ZSBuZWVkCistLSB0byBlbnN1cmUgcGVuZGluZyBzdGF0cyBhcmUg Zmx1c2hlZC4KK1NFTEVDVCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKKyBwZ19zdGF0X2Zv cmNlX25leHRfZmx1c2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CitTRUxFQ1QKKyAgICBjLnJlbG5hbWUgQVMgdGFibGVfbmFtZSwKKyAgICAtLSBUcmFuc2FjdGlv biBzdGF0aXN0aWNzCisgICAgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfdXBkYXRlZChjLm9pZCkg QVMgeGFjdF91cGRhdGVzLAorICAgIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVk KGMub2lkKSBBUyB4YWN0X2hvdF91cGRhdGVzLAorICAgIFJPVU5EKCgKKyAgICAgICAgcGdfc3Rh dF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoYy5vaWQpOjpmbG9hdCAvCisgICAgICAgIE5V TExJRihwZ19zdGF0X2dldF94YWN0X3R1cGxlc191cGRhdGVkKGMub2lkKSwgMCkgKiAxMDAKKyAg ICApOjpudW1lcmljLCAyKSBBUyB4YWN0X2hvdF91cGRhdGVfcGVyY2VudGFnZSwKKyAgICAtLSBD dW11bGF0aXZlIHN0YXRpc3RpY3MKKyAgICBzLm5fdHVwX3VwZCBBUyB0b3RhbF91cGRhdGVzLAor ICAgIHMubl90dXBfaG90X3VwZCBBUyBob3RfdXBkYXRlcywKKyAgICBST1VORCgoCisgICAgICAg IHMubl90dXBfaG90X3VwZDo6ZmxvYXQgLworICAgICAgICBOVUxMSUYocy5uX3R1cF91cGQsIDAp ICogMTAwCisgICAgKTo6bnVtZXJpYywgMikgQVMgdG90YWxfaG90X3VwZGF0ZV9wZXJjZW50YWdl CitGUk9NIHBnX2NsYXNzIGMKK0xFRlQgSk9JTiBwZ19zdGF0X3VzZXJfdGFibGVzIHMgT04gYy5y ZWxuYW1lID0gcy5yZWxuYW1lCitXSEVSRSBjLnJlbG5hbWUgPSAnZXgnCitBTkQgYy5yZWxuYW1l c3BhY2UgPSAncHVibGljJzo6cmVnbmFtZXNwYWNlOworIHRhYmxlX25hbWUgfCB4YWN0X3VwZGF0 ZXMgfCB4YWN0X2hvdF91cGRhdGVzIHwgeGFjdF9ob3RfdXBkYXRlX3BlcmNlbnRhZ2UgfCB0b3Rh bF91cGRhdGVzIHwgaG90X3VwZGF0ZXMgfCB0b3RhbF9ob3RfdXBkYXRlX3BlcmNlbnRhZ2UgCist LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBleCAgICAgICAgIHwgICAgICAgICAgICAwIHwgICAgICAg ICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgNiB8 ICAgICAgICAgICAxIHwgICAgICAgICAgICAgICAgICAgICAgIDE2LjY3CisoMSByb3cpCisKKy0t IGV4cGVjdDogNSB4YWN0IHVwZGF0ZXMgd2l0aCAxIHhhY3QgaG90IHVwZGF0ZSBhbmQgbm8gY3Vt dWxhdGl2ZSB1cGRhdGVzIGFzIHlldAorU0VUIFNFU1NJT04gZW5hYmxlX3NlcXNjYW4gPSBPTjsK K1NFVCBTRVNTSU9OIGVuYWJsZV9iaXRtYXBzY2FuID0gT047CitEUk9QIFRBQkxFIGV4OworLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0KKy0tIFRoaXMgdGFibGUgaGFzIGEgc2luZ2xlIGNvbHVtbiAnZW1h aWwnIGFuZCBhIHVuaXF1ZSBjb25zdHJhaW50IG9uIGl0IHRoYXQKKy0tIHNob3VsZCBwcmVjbHVk ZSBIT1QgdXBkYXRlcy4KK0NSRUFURSBUQUJMRSB1c2VycyAoCisgICAgdXNlcl9pZCBzZXJpYWwg cHJpbWFyeSBrZXksCisgICAgbmFtZSBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCisgICAgZW1haWwg VkFSQ0hBUigyNTUpIE5PVCBOVUxMLAorICAgIEVYQ0xVREUgVVNJTkcgYnRyZWUgKGxvd2VyKGVt YWlsKSBXSVRIID0pCispOworLS0gQWRkIHNvbWUgZGF0YSB0byB0aGUgdGFibGUgYW5kIHRoZW4g dXBkYXRlIGl0IGluIHdheXMgdGhhdCBzaG91bGQgYW5kIHNob3VsZAorLS0gbm90IGJlIEhPVCB1 cGRhdGVzLgorSU5TRVJUIElOVE8gdXNlcnMgKG5hbWUsIGVtYWlsKSBWQUxVRVMKKygndXNlcjEn LCAndXNlcjFAZXhhbXBsZS5jb20nKSwKKygndXNlcjInLCAndXNlcjJAZXhhbXBsZS5jb20nKSwK KygndGFrZW4nLCAndGFrZW5ARVhBTVBMRS5jb20nKSwKKygneW91JywgJ3lvdUBkb21haW4uY29t JyksCisoJ3Rha2VuJywgJ3Rha2VuQGRvbWFpbi5jb20nKTsKKy0tIFNob3VsZCBmYWlsIGJlY2F1 c2Ugb2YgdGhlIHVuaXF1ZSBjb25zdHJhaW50IG9uIHRoZSBlbWFpbCBjb2x1bW4uCitVUERBVEUg dXNlcnMgU0VUIGVtYWlsID0gJ3VzZXIxQGV4YW1wbGUuY29tJyBXSEVSRSBlbWFpbCA9ICd1c2Vy MkBleGFtcGxlLmNvbSc7CitFUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBl eGNsdXNpb24gY29uc3RyYWludCAidXNlcnNfbG93ZXJfZXhjbCIKK0RFVEFJTDogIEtleSAobG93 ZXIoZW1haWw6OnRleHQpKT0odXNlcjFAZXhhbXBsZS5jb20pIGNvbmZsaWN0cyB3aXRoIGV4aXN0 aW5nIGtleSAobG93ZXIoZW1haWw6OnRleHQpKT0odXNlcjFAZXhhbXBsZS5jb20pLgorU0VMRUNU IHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCd1c2Vycyc6OnJlZ2NsYXNzKTsg LS0gZXhwZWN0OiAwIG5vIG5ldyBIT1QgdXBkYXRlcworIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVz X2hvdF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisoMSByb3cpCisKKy0tIFNob3VsZCBz dWNjZWVkIGJlY2F1c2UgdGhlIGVtYWlsIGNvbHVtbiBpcyBub3QgYmVpbmcgdXBkYXRlZCBhbmQg c2hvdWxkIGdvIEhPVC4KK1VQREFURSB1c2VycyBTRVQgbmFtZSA9ICdmb28nIFdIRVJFIGVtYWls ID0gJ3VzZXIxQGV4YW1wbGUuY29tJzsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19o b3RfdXBkYXRlZCgndXNlcnMnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDogMSBhIHNpbmdsZSBuZXcg SE9UIHVwZGF0ZQorIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxCisoMSByb3cpCisKKy0tIENyZWF0ZSBhIHBhcnRpYWwgaW5kZXggb24gdGhl IGVtYWlsIGNvbHVtbiwgdXBkYXRlcworQ1JFQVRFIElOREVYIGlkeF91c2Vyc19lbWFpbF9ub19l eGFtcGxlIE9OIHVzZXJzIChsb3dlcihlbWFpbCkpIFdIRVJFIGxvd2VyKGVtYWlsKSBMSUtFICcl QGV4YW1wbGUuY29tJSc7CistLSBBbiB1cGRhdGUgdGhhdCBjaGFuZ2VzIHRoZSBlbWFpbCBjb2x1 bW4gYnV0IG5vdCB0aGUgaW5kZXhlZCBwb3J0aW9uIG9mIGl0IGFuZCBmYWxscyBvdXRzaWRlIHRo ZSBjb25zdHJhaW50LgorLS0gU2hvdWxkbid0IGJlIGEgSE9UIHVwZGF0ZSBiZWNhdXNlIG9mIHRo ZSBleGNsdXNpb24gY29uc3RyYWludC4KK1VQREFURSB1c2VycyBTRVQgZW1haWwgPSAneW91KzJA ZG9tYWluLmNvbScgV0hFUkUgbmFtZSA9ICd5b3UnOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3Rf dHVwbGVzX2hvdF91cGRhdGVkKCd1c2Vycyc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5vIG5l dyBIT1QgdXBkYXRlcworIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxCisoMSByb3cpCisKKy0tIEFuIHVwZGF0ZSB0aGF0IGNoYW5nZXMgdGhl IGVtYWlsIGNvbHVtbiBidXQgbm90IHRoZSBpbmRleGVkIHBvcnRpb24gb2YgaXQgYW5kIGZhbGxz IHdpdGhpbiB0aGUgY29uc3RyYWludC4KKy0tIEFnYWluLCBzaG91bGQgZmFpbCBjb25zdHJhaW50 IGFuZCBmYWlsIHRvIGJlIGEgSE9UIHVwZGF0ZS4KK1VQREFURSB1c2VycyBTRVQgZW1haWwgPSAn dGFrZW5AZG9tYWluLmNvbScgV0hFUkUgbmFtZSA9ICd5b3UnOworRVJST1I6ICBjb25mbGljdGlu ZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhjbHVzaW9uIGNvbnN0cmFpbnQgInVzZXJzX2xvd2VyX2V4 Y2wiCitERVRBSUw6ICBLZXkgKGxvd2VyKGVtYWlsOjp0ZXh0KSk9KHRha2VuQGRvbWFpbi5jb20p IGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGtleSAobG93ZXIoZW1haWw6OnRleHQpKT0odGFrZW5A ZG9tYWluLmNvbSkuCitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQo J3VzZXJzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDEgbm8gbmV3IEhPVCB1cGRhdGVzCisgcGdf c3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKygx IHJvdykKKworRFJPUCBUQUJMRSB1c2VyczsKKy0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tCistLSBBbm90 aGVyIHRlc3Qgb2YgY29uc3RyYWludHMgc3BvaWxpbmcgSE9UIHVwZGF0ZXMsIHRoaXMgdGltZSB3 aXRoIGEgcmFuZ2UuCitDUkVBVEUgVEFCTEUgZXZlbnRzICgKKyAgICBpZCBzZXJpYWwgcHJpbWFy eSBrZXksCisgICAgbmFtZSBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCisgICAgZXZlbnRfdGltZSB0 c3R6cmFuZ2UsCisgICAgY29uc3RyYWludCBub19zY3JlZW5pbmdfdGltZV9vdmVybGFwIGV4Y2x1 ZGUgdXNpbmcgZ2lzdCAoCisgICAgICAgIGV2ZW50X3RpbWUgV0lUSCAmJgorICAgICkKKyk7Cist LSBBZGQgdHdvIG5vbi1vdmVybGFwcGluZyBldmVudHMuCitJTlNFUlQgSU5UTyBldmVudHMgKGlk LCBldmVudF90aW1lLCBuYW1lKQorVkFMVUVTCisgICAgKDEsICdbIjIwMjMtMDEtMDEgMTk6MDA6 MDAiLCAiMjAyMy0wMS0wMSAyMDo0NTowMCJdJywgJ2V2ZW50MScpLAorICAgICgyLCAnWyIyMDIz LTAxLTAxIDIxOjAwOjAwIiwgIjIwMjMtMDEtMDEgMjE6NDU6MDAiXScsICdldmVudDInKTsKKy0t IFVwZGF0ZSB0aGUgZmlyc3QgZXZlbnQgdG8gb3ZlcmxhcCB3aXRoIHRoZSBzZWNvbmQsIHNob3Vs ZCBmYWlsIHRoZSBjb25zdHJhaW50IGFuZCBub3QgYmUgSE9ULgorVVBEQVRFIGV2ZW50cyBTRVQg ZXZlbnRfdGltZSA9ICdbIjIwMjMtMDEtMDEgMjA6MDA6MDAiLCAiMjAyMy0wMS0wMSAyMTo0NTow MCJdJyBXSEVSRSBpZCA9IDE7CitFUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRl cyBleGNsdXNpb24gY29uc3RyYWludCAibm9fc2NyZWVuaW5nX3RpbWVfb3ZlcmxhcCIKK0RFVEFJ TDogIEtleSAoZXZlbnRfdGltZSk9KFsiU3VuIEphbiAwMSAyMDowMDowMCAyMDIzIFBTVCIsIlN1 biBKYW4gMDEgMjE6NDU6MDAgMjAyMyBQU1QiXSkgY29uZmxpY3RzIHdpdGggZXhpc3Rpbmcga2V5 IChldmVudF90aW1lKT0oWyJTdW4gSmFuIDAxIDIxOjAwOjAwIDIwMjMgUFNUIiwiU3VuIEphbiAw MSAyMTo0NTowMCAyMDIzIFBTVCJdKS4KK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19o b3RfdXBkYXRlZCgnZXZlbnRzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDAgbm8gbmV3IEhPVCB1 cGRhdGVzCisgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDAKKygxIHJvdykKKworLS0gVXBkYXRlIHRoZSBmaXJzdCBldmVudCB0byBub3Qgb3Zl cmxhcCB3aXRoIHRoZSBzZWNvbmQsIGFnYWluIG5vdCBIT1QgZHVlIHRvIHRoZSBjb25zdHJhaW50 LgorVVBEQVRFIGV2ZW50cyBTRVQgZXZlbnRfdGltZSA9ICdbIjIwMjMtMDEtMDEgMjI6MDA6MDAi LCAiMjAyMy0wMS0wMSAyMjo0NTowMCJdJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgcGdfc3RhdF9n ZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V2ZW50cyc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0 OiAwIG5vIG5ldyBIT1QgdXBkYXRlcworIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRh dGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAwCisoMSByb3cpCisKKy0tIFVwZGF0ZSB0aGUgZmlyc3Qg ZXZlbnQgdG8gbm90IG92ZXJsYXAgd2l0aCB0aGUgc2Vjb25kLCB0aGlzIHRpbWUgd2UncmUgSE9U IGJlY2F1c2Ugd2UgZG9uJ3Qgb3ZlcmxhcCB3aXRoIHRoZSBjb25zdHJhaW50LgorVVBEQVRFIGV2 ZW50cyBTRVQgbmFtZSA9ICduZXcgbmFtZSBoZXJlJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgcGdf c3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V2ZW50cyc6OnJlZ2NsYXNzKTsgLS0g ZXhwZWN0OiAxIG9uZSBuZXcgSE9UIHVwZGF0ZQorIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hv dF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisoMSByb3cpCisKK0RST1AgVEFCTEUgZXZl bnRzOworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0tIEEgdGVzdCB0byBlbnN1cmUgdGhhdCBvbmx5 IG1vZGlmaWVkIHN1bW1hcml6aW5nIGluZGV4ZXMgYXJlIHVwZGF0ZWQsIG5vdAorLS0gYWxsIG9m IHRoZW0uCitDUkVBVEUgVEFCTEUgZXggKGlkIFNFUklBTCBwcmltYXJ5IGtleSwgYXR0MSBKU09O QiwgYXR0MiB0ZXh0LCBhdHQzIHRleHQsIGF0dDQgdGV4dCkgV0lUSCAoZmlsbGZhY3RvciA9IDYw KTsKK0NSRUFURSBJTkRFWCBleF9leHByMV9pZHggT04gZXggVVNJTkcgYnRyZWUoKGF0dDEtPidk YXRhJykpOworQ1JFQVRFIElOREVYIGV4X3N1bXIxX2lkeCBPTiBleCBVU0lORyBCUklOKGF0dDIp OworQ1JFQVRFIElOREVYIGV4X2V4cHIyX2lkeCBPTiBleCBVU0lORyBidHJlZSgoYXR0MS0+J2En KSk7CitDUkVBVEUgSU5ERVggZXhfZXhwcjNfaWR4IE9OIGV4IFVTSU5HIGJ0cmVlKChhdHQxLT4n YicpKTsKK0NSRUFURSBJTkRFWCBleF9leHByNF9pZHggT04gZXggVVNJTkcgYnRyZWUoKGF0dDEt PidjJykpOworQ1JFQVRFIElOREVYIGV4X3N1bXIyX2lkeCBPTiBleCBVU0lORyBCUklOKGF0dDMp OworQ1JFQVRFIElOREVYIGV4X3N1bXIzX2lkeCBPTiBleCBVU0lORyBCUklOKGF0dDQpOworQ1JF QVRFIElOREVYIGV4X2V4cHI1X2lkeCBPTiBleCBVU0lORyBidHJlZSgoYXR0MS0+J2QnKSk7CitJ TlNFUlQgSU5UTyBleCAoYXR0MSwgYXR0MikgVkFMVUVTICgneyJkYXRhIjogW119Jzo6anNvbiwg J25vdGhpbmcgc3BlY2lhbCcpOworU0VMRUNUICogRlJPTSBleDsKKyBpZCB8ICAgICBhdHQxICAg ICB8ICAgICAgYXR0MiAgICAgICB8IGF0dDMgfCBhdHQ0IAorLS0tLSstLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tCisgIDEgfCB7ImRhdGEiOiBbXX0gfCBub3Ro aW5nIHNwZWNpYWwgfCAgICAgIHwgCisoMSByb3cpCisKKy0tIFVwZGF0ZSBhdHQyIGFuZCBhdHQ0 IGJvdGggYXJlIEJSSU4vc3VtbWFyaXppbmcgaW5kZXhlcywgdGhpcyBzaG91bGQgYmUgYSBIT1Qg dXBkYXRlIGFuZAorLS0gb25seSB1cGRhdGUgdHdvIG9mIHRoZSB0aHJlZSBzdW1tYXJpemluZyBp bmRleGVzLgorVVBEQVRFIGV4IFNFVCBhdHQyID0gJ3NwZWNpYWwgaW5kZWVkJywgYXR0NCA9ICd3 aGF0ZXZlcic7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4 Jzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDEgb25lIG5ldyBIT1QgdXBkYXRlCisgcGdfc3RhdF9n ZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKygxIHJvdykK KworU0VMRUNUICogRlJPTSBleDsKKyBpZCB8ICAgICBhdHQxICAgICB8ICAgICAgYXR0MiAgICAg IHwgYXR0MyB8ICAgYXR0NCAgIAorLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLSstLS0tLS0tLS0tCisgIDEgfCB7ImRhdGEiOiBbXX0gfCBzcGVjaWFsIGluZGVlZCB8 ICAgICAgfCB3aGF0ZXZlcgorKDEgcm93KQorCistLSBVcGRhdGUgYXR0MSBhbmQgYXR0Miwgb25s eSBvbmUgaXMgQlJJTi9zdW1tYXJpemluZywgdGhpcyBzaG91bGQgTk9UIGJlIGEgSE9UIHVwZGF0 ZS4KK1VQREFURSBleCBTRVQgYXR0MSA9IGF0dDEgfHwgJ3siZGF0YSI6ICJob3dkeSJ9JywgYXR0 MiA9ICdzcGVjaWFsLCBzbyBzcGVjaWFsJzsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxl c19ob3RfdXBkYXRlZCgnZXgnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDogMSBubyBuZXcgSE9UIHVw ZGF0ZXMKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMQorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIGV4OworIGlkIHwgICAgICAgYXR0MSAg ICAgICAgfCAgICAgICAgYXR0MiAgICAgICAgIHwgYXR0MyB8ICAgYXR0NCAgIAorLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLQor ICAxIHwgeyJkYXRhIjogImhvd2R5In0gfCBzcGVjaWFsLCBzbyBzcGVjaWFsIHwgICAgICB8IHdo YXRldmVyCisoMSByb3cpCisKKy0tIFVwZGF0ZSBhdHQyLCBhdHQzLCBhbmQgYXR0NCBhbGwgYXJl IEJSSU4vc3VtbWFyaXppbmcgaW5kZXhlcywgdGhpcyBzaG91bGQgYmUgYSBIT1QgdXBkYXRlCist LSBhbmQgeWV0IHN0aWxsIHVwZGF0ZSBhbGwgdGhyZWUgc3VtbWFyaXppbmcgaW5kZXhlcy4KK1VQ REFURSBleCBTRVQgYXR0MiA9ICdhJywgYXR0MyA9ICdiJywgYXR0NCA9ICdjJzsKK1NFTEVDVCBw Z19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnZXgnOjpyZWdjbGFzcyk7IC0tIGV4 cGVjdDogMiB3aXRoIG9uZSBuZXcgSE9UIHVwZGF0ZQorIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVz X2hvdF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisoMSByb3cpCisKK1NFTEVDVCAqIEZS T00gZXg7CisgaWQgfCAgICAgICBhdHQxICAgICAgICB8IGF0dDIgfCBhdHQzIHwgYXR0NCAKKy0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLQorICAxIHwgeyJkYXRh IjogImhvd2R5In0gfCBhICAgIHwgYiAgICB8IGMKKygxIHJvdykKKworLS0gVXBkYXRlIGF0dDEs IGF0dDIsIGFuZCBhdHQzIGFsbCBtb2RpZmllZCB2YWx1ZXMgYXJlIEJSSU4vc3VtbWFyaXppbmcg aW5kZXhlcywgdGhpcyBzaG91bGQgYmUgYSBIT1QgdXBkYXRlCistLSBhbmQgeWV0IHN0aWxsIHVw ZGF0ZSBhbGwgdGhyZWUgc3VtbWFyaXppbmcgaW5kZXhlcy4KK1VQREFURSBleCBTRVQgYXR0MSA9 ICd7ImRhdGEiOiAiaG93ZHkifScsIGF0dDIgPSAnZCcsIGF0dDMgPSAnZSc7CitTRUxFQ1QgcGdf c3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6cmVnY2xhc3MpOyAtLSBleHBl Y3Q6IDMgd2l0aCBvbmUgbmV3IEhPVCB1cGRhdGUKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19o b3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9N IGV4OworIGlkIHwgICAgICAgYXR0MSAgICAgICAgfCBhdHQyIHwgYXR0MyB8IGF0dDQgCistLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0KKyAgMSB8IHsiZGF0YSI6 ICJob3dkeSJ9IHwgZCAgICB8IGUgICAgfCBjCisoMSByb3cpCisKK0RST1AgVEFCTEUgZXg7Cist LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gQSB0ZXN0IHRvIGVuc3VyZSB0aGF0IHN1bW1hcml6aW5n IGluZGV4ZXMgYXJlIG5vdCB1cGRhdGVkIHdoZW4gdGhleSBkb24ndAorLS0gY2hhbmdlLCBidXQg YXJlIHVwZGF0ZWQgd2hlbiB0aGV5IGRvIHdoaWxlIG5vdCBwcmVmZW50IEhPVCB1cGRhdGVzLgor Q1JFQVRFIFRBQkxFIGV4IChhdHQxIEpTT05CLCBhdHQyIHRleHQpIFdJVEggKGZpbGxmYWN0b3Ig PSA2MCk7CitDUkVBVEUgSU5ERVggZXhfZXhwcjFfaWR4IE9OIGV4IFVTSU5HIGJ0cmVlKChhdHQx LT4nZGF0YScpKTsKK0NSRUFURSBJTkRFWCBleF9zdW1yMV9pZHggT04gZXggVVNJTkcgQlJJTihh dHQyKTsKK0lOU0VSVCBJTlRPIGV4IFZBTFVFUyAoJ3siZGF0YSI6IFtdfScsICdub3RoaW5nIHNw ZWNpYWwnKTsKKy0tIFVwZGF0ZSB0aGUgdW5pbmRleGVkIHZhbHVlIG9mIGF0dDEsIHRoaXMgc2hv dWxkIGJlIGEgSE9UIHVwZGF0ZSBhbmQgYW5kIHNob3VsZAorLS0gdXBkYXRlIHRoZSBzdW1tYXJp emluZyBpbmRleC4KK1VQREFURSBleCBTRVQgYXR0MSA9IGF0dDEgfHwgJ3sic3RhdHVzIjogInN0 YWxlbWF0ZSJ9JzsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgn ZXgnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDogMSBvbmUgbmV3IEhPVCB1cGRhdGUKKyBwZ19zdGF0 X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorKDEgcm93 KQorCistLSBVcGRhdGUgdGhlIGluZGV4ZWQgdmFsdWUgb2YgYXR0MiwgYSBzdW1tYXJpemVkIHZh bHVlLCB0aGlzIGlzIGEgc3VtbWFyaXplZAorLS0gb25seSB1cGRhdGUgYW5kIHNob3VsZCB1c2Ug dGhlIEhPVCBwYXRoIHdoaWxlIHN0aWxsIHRyaWdnZXJpbmcgYW4gdXBkYXRlIHRvCistLSB0aGUg c3VtbWFyaXppbmcgQlJJTiBpbmRleC4KK1VQREFURSBleCBTRVQgYXR0MiA9ICdzcGVjaWFsIGlu ZGVlZCc7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6 cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDIgb25lIG5ldyBIT1QgdXBkYXRlCisgcGdfc3RhdF9nZXRf eGFjdF90dXBsZXNfaG90X3VwZGF0ZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKygxIHJvdykKKwor LS0gVXBkYXRlIHRvIGF0dDEgZG9lc24ndCBjaGFuZ2UgdGhlIGluZGV4ZWQgdmFsdWUgd2hpbGUg dGhlIHVwZGF0ZSB0byBhdHQyIGRvZXMsCistLSB0aGlzIGFnYWluIGlzIGEgc3VtbWFyaXplZCBv bmx5IHVwZGF0ZSBhbmQgc2hvdWxkIHVzZSB0aGUgSE9UIHBhdGggYXMgd2VsbCBhcworLS0gdHJp Z2dlciBhbiB1cGRhdGUgdG8gdGhlIEJSSU4gaW5kZXguCitVUERBVEUgZXggU0VUIGF0dDEgPSBh dHQxIHx8ICd7InN0YXR1cyI6ICJjaGVja21hdGUifScsIGF0dDIgPSAnc3BlY2lhbCwgc28gc3Bl Y2lhbCc7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6 cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDMgb25lIG5ldyBIT1QgdXBkYXRlCisgcGdfc3RhdF9nZXRf eGFjdF90dXBsZXNfaG90X3VwZGF0ZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKygxIHJvdykKKwor LS0gVGhpcyB1cGRhdGVzIGJvdGggaW5kZXhlcywgdGhlIGV4cHJlc3Npb24gaW5kZXggb24gYXR0 MSBhbmQgdGhlIHN1bW1hcml6aW5nCistLSBpbmRleCBvbiBhdHQyLiAgVGhpcyBzaG91bGQgbm90 IGJlIGEgSE9UIHVwZGF0ZSBiZWNhdXNlIHRoZXJlIGFyZSBtb2RpZmllZAorLS0gaW5kZXhlcyBh bmQgb25seSBzb21lIGFyZSBzdW1tYXJpemVkLCBub3QgYWxsLiAgVGhpcyBzaG91bGQgZm9yY2Ug YWxsCistLSBpbmRleGVzIHRvIGJlIHVwZGF0ZWQuCitVUERBVEUgZXggU0VUIGF0dDEgPSBhdHQx IHx8ICd7ImRhdGEiOiBbMSwyLDNdfScsIGF0dDIgPSAnZG8geW91IHdhbnQgdG8gcGxheSBhIGdh bWU/JzsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnZXgnOjpy ZWdjbGFzcyk7IC0tIGV4cGVjdDogNCBib3RoIGluZGV4ZXMgdXBkYXRlZAorIHBnX3N0YXRfZ2V0 X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisoMSByb3cpCisK K0RST1AgVEFCTEUgZXg7CistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gVGhpcyB0ZXN0IGlzIGZv ciBhIHRhYmxlIHdpdGggYSBjdXN0b20gdHlwZSBhbmQgYSBjdXN0b20gb3BlcmF0b3JzIG9uCist LSB0aGUgQlRSRUUgaW5kZXguICBUaGUgcXVlc3Rpb24gaXMsIHdoZW4gY29tcGFyaW5nIHZhbHVl cyBmb3IgZXF1YWxpdHkKKy0tIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgY2hhbmdlcyBvbiB0 aGUgaW5kZXggb3Igbm90Li4uIHNob3VsZG4ndCB3ZQorLS0gYmUgdXNpbmcgdGhlIGN1c3RvbSBv cGVyYXRvcnM/CistLSBDcmVhdGUgYSB0eXBlCitDUkVBVEUgVFlQRSBteV9jdXN0b21fdHlwZSBB UyAodmFsIGludCk7CistLSBDb21wYXJpc29uIGZ1bmN0aW9ucyAocmV0dXJucyBib29sZWFuKQor Q1JFQVRFIEZVTkNUSU9OIG15X2N1c3RvbV9sdChhIG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3Rv bV90eXBlKSBSRVRVUk5TIGJvb2xlYW4gQVMgJCQKK0JFR0lOCisgICAgUkVUVVJOIGEudmFsIDwg Yi52YWw7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CitDUkVB VEUgRlVOQ1RJT04gbXlfY3VzdG9tX2xlKGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5 cGUpIFJFVFVSTlMgYm9vbGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52YWwgPD0gYi52 YWw7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CitDUkVBVEUg RlVOQ1RJT04gbXlfY3VzdG9tX2VxKGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUp IFJFVFVSTlMgYm9vbGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52YWwgPSBiLnZhbDsK K0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsKK0NSRUFURSBGVU5D VElPTiBteV9jdXN0b21fZ2UoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVU VVJOUyBib29sZWFuIEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA+PSBiLnZhbDsKK0VO RDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsKK0NSRUFURSBGVU5DVElP TiBteV9jdXN0b21fZ3QoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJO UyBib29sZWFuIEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA+IGIudmFsOworRU5EOwor JCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworQ1JFQVRFIEZVTkNUSU9OIG15 X2N1c3RvbV9uZShhIG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGJv b2xlYW4gQVMgJCQKK0JFR0lOCisgICAgUkVUVVJOIGEudmFsICE9IGIudmFsOworRU5EOworJCQg TEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworLS0gQ29tcGFyaXNvbiBmdW5jdGlv biAocmV0dXJucyAtMSwgMCwgMSkKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21fY21wKGEgbXlf Y3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUpIFJFVFVSTlMgaW50IEFTICQkCitCRUdJTgor ICAgIElGIGEudmFsIDwgYi52YWwgVEhFTgorICAgICAgICBSRVRVUk4gLTE7CisgICAgRUxTSUYg YS52YWwgPiBiLnZhbCBUSEVOCisgICAgICAgIFJFVFVSTiAxOworICAgIEVMU0UKKyAgICAgICAg UkVUVVJOIDA7CisgICAgRU5EIElGOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFC TEUgU1RSSUNUOworLS0gQ3JlYXRlIHRoZSBvcGVyYXRvcnMKK0NSRUFURSBPUEVSQVRPUiA8ICgK KyAgICBMRUZUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUklHSFRBUkcgPSBteV9jdXN0b21f dHlwZSwKKyAgICBQUk9DRURVUkUgPSBteV9jdXN0b21fbHQsCisgICAgQ09NTVVUQVRPUiA9ID4s CisgICAgTkVHQVRPUiA9ID49CispOworQ1JFQVRFIE9QRVJBVE9SIDw9ICgKKyAgICBMRUZUQVJH ID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUklHSFRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBQ Uk9DRURVUkUgPSBteV9jdXN0b21fbGUsCisgICAgQ09NTVVUQVRPUiA9ID49LAorICAgIE5FR0FU T1IgPSA+CispOworQ1JFQVRFIE9QRVJBVE9SID0gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21f dHlwZSwKKyAgICBSSUdIVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15 X2N1c3RvbV9lcSwKKyAgICBDT01NVVRBVE9SID0gPSwKKyAgICBORUdBVE9SID0gPD4KKyk7CitD UkVBVEUgT1BFUkFUT1IgPj0gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBS SUdIVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15X2N1c3RvbV9nZSwK KyAgICBDT01NVVRBVE9SID0gPD0sCisgICAgTkVHQVRPUiA9IDwKKyk7CitDUkVBVEUgT1BFUkFU T1IgPiAoCisgICAgTEVGVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFJJR0hUQVJHID0gbXlf Y3VzdG9tX3R5cGUsCisgICAgUFJPQ0VEVVJFID0gbXlfY3VzdG9tX2d0LAorICAgIENPTU1VVEFU T1IgPSA8LAorICAgIE5FR0FUT1IgPSA8PQorKTsKK0NSRUFURSBPUEVSQVRPUiA8PiAoCisgICAg TEVGVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFJJR0hUQVJHID0gbXlfY3VzdG9tX3R5cGUs CisgICAgUFJPQ0VEVVJFID0gbXlfY3VzdG9tX25lLAorICAgIENPTU1VVEFUT1IgPSA8PiwKKyAg ICBORUdBVE9SID0gPQorKTsKKy0tIENyZWF0ZSB0aGUgb3BlcmF0b3IgY2xhc3MgKGluY2x1ZGlu ZyB0aGUgc3VwcG9ydCBmdW5jdGlvbikKK0NSRUFURSBPUEVSQVRPUiBDTEFTUyBteV9jdXN0b21f b3BzCisgICAgREVGQVVMVCBGT1IgVFlQRSBteV9jdXN0b21fdHlwZSBVU0lORyBidHJlZSBBUwor ICAgIE9QRVJBVE9SIDEgPCwKKyAgICBPUEVSQVRPUiAyIDw9LAorICAgIE9QRVJBVE9SIDMgPSwK KyAgICBPUEVSQVRPUiA0ID49LAorICAgIE9QRVJBVE9SIDUgPiwKKyAgICBGVU5DVElPTiAxIG15 X2N1c3RvbV9jbXAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKKy0tIENyZWF0ZSB0 aGUgdGFibGUKK0NSRUFURSBUQUJMRSBteV90YWJsZSAoCisgICAgaWQgaW50LAorICAgIGN1c3Rv bV92YWwgbXlfY3VzdG9tX3R5cGUKKyk7CistLSBJbnNlcnQgc29tZSBkYXRhCitJTlNFUlQgSU5U TyBteV90YWJsZSAoaWQsIGN1c3RvbV92YWwpIFZBTFVFUworKDEsIFJPVygzKTo6bXlfY3VzdG9t X3R5cGUpLAorKDIsIFJPVygxKTo6bXlfY3VzdG9tX3R5cGUpLAorKDMsIFJPVyg0KTo6bXlfY3Vz dG9tX3R5cGUpLAorKDQsIFJPVygyKTo6bXlfY3VzdG9tX3R5cGUpOworLS0gQ3JlYXRlIGEgZnVu Y3Rpb24gdG8gdXNlIHdoZW4gaW5kZXhpbmcKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGFi c192YWwodmFsIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGludCBBUyAkJAorQkVHSU4KKyAgUkVU VVJOIGFicyh2YWwudmFsKTsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNU UklDVDsKKy0tIENyZWF0ZSB0aGUgaW5kZXgKK0NSRUFURSBJTkRFWCBpZHhfY3VzdG9tX3ZhbF9h YnMgT04gbXlfdGFibGUgKGFic192YWwoY3VzdG9tX3ZhbCkpOworLS0gVXBkYXRlIDEKK1VQREFU RSBteV90YWJsZSBTRVQgY3VzdG9tX3ZhbCA9IFJPVyg1KTo6bXlfY3VzdG9tX3R5cGUgV0hFUkUg aWQgPSAxOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdteV90 YWJsZSc6OnJlZ2NsYXNzKTsKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMAorKDEgcm93KQorCistLSBVcGRhdGUgMgorVVBEQVRFIG15X3Rh YmxlIFNFVCBjdXN0b21fdmFsID0gUk9XKDApOjpteV9jdXN0b21fdHlwZSBXSEVSRSBjdXN0b21f dmFsIDwgUk9XKDMpOjpteV9jdXN0b21fdHlwZTsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1 cGxlc19ob3RfdXBkYXRlZCgnbXlfdGFibGUnOjpyZWdjbGFzcyk7CisgcGdfc3RhdF9nZXRfeGFj dF90dXBsZXNfaG90X3VwZGF0ZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKygxIHJvdykKKworLS0g VXBkYXRlIDMKK1VQREFURSBteV90YWJsZSBTRVQgY3VzdG9tX3ZhbCA9IFJPVyg2KTo6bXlfY3Vz dG9tX3R5cGUgV0hFUkUgaWQgPSAzOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hv dF91cGRhdGVkKCdteV90YWJsZSc6OnJlZ2NsYXNzKTsKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxl c19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorKDEgcm93KQorCistLSBVcGRhdGUg NAorVVBEQVRFIG15X3RhYmxlIFNFVCBpZCA9IDUgV0hFUkUgaWQgPSAxOworU0VMRUNUIHBnX3N0 YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdteV90YWJsZSc6OnJlZ2NsYXNzKTsKKyBw Z19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQor KDEgcm93KQorCistLSBRdWVyeSB1c2luZyB0aGUgaW5kZXgKK0VYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUICogRlJPTSBteV90YWJsZSBXSEVSRSBhYnNfdmFsKGN1c3RvbV92YWwpID0gNjsKKyAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBteV90YWJsZQorICAgRmlsdGVyOiAoYWJz X3ZhbChjdXN0b21fdmFsKSA9IDYpCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIG15X3RhYmxl IFdIRVJFIGFic192YWwoY3VzdG9tX3ZhbCkgPSA2OworIGlkIHwgY3VzdG9tX3ZhbCAKKy0tLS0r LS0tLS0tLS0tLS0tCisgIDMgfCAoNikKKygxIHJvdykKKworLS0gQ2xlYW4gdXAKK0RST1AgVEFC TEUgbXlfdGFibGUgQ0FTQ0FERTsKK0RST1AgT1BFUkFUT1IgQ0xBU1MgbXlfY3VzdG9tX29wcyBV U0lORyBidHJlZSBDQVNDQURFOworRFJPUCBPUEVSQVRPUiA8IChteV9jdXN0b21fdHlwZSwgbXlf Y3VzdG9tX3R5cGUpOworRFJPUCBPUEVSQVRPUiA8PSAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3Rv bV90eXBlKTsKK0RST1AgT1BFUkFUT1IgPSAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBl KTsKK0RST1AgT1BFUkFUT1IgPj0gKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitE Uk9QIE9QRVJBVE9SID4gKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIE9Q RVJBVE9SIDw+IChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElP TiBteV9jdXN0b21fbHQobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVO Q1RJT04gbXlfY3VzdG9tX2xlKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9Q IEZVTkNUSU9OIG15X2N1c3RvbV9lcShteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOwor RFJPUCBGVU5DVElPTiBteV9jdXN0b21fZ2UobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBl KTsKK0RST1AgRlVOQ1RJT04gbXlfY3VzdG9tX2d0KG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21f dHlwZSk7CitEUk9QIEZVTkNUSU9OIG15X2N1c3RvbV9uZShteV9jdXN0b21fdHlwZSwgbXlfY3Vz dG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBteV9jdXN0b21fY21wKG15X2N1c3RvbV90eXBlLCBt eV9jdXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIGFic192YWwobXlfY3VzdG9tX3R5cGUpOwor RFJPUCBUWVBFIG15X2N1c3RvbV90eXBlIENBU0NBREU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hl ZHVsZQppbmRleCAzN2I2ZDIxZTFmOS4uN2FiOTcxMmU4YTggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxl bF9zY2hlZHVsZQpAQCAtNjgsNiArNjgsMTEgQEAgdGVzdDogc2VsZWN0X2ludG8gc2VsZWN0X2Rp c3RpbmN0IHNlbGVjdF9kaXN0aW5jdF9vbiBzZWxlY3RfaW1wbGljaXQgc2VsZWN0X2hhdmkKICMg LS0tLS0tLS0tLQogdGVzdDogYnJpbiBnaW4gZ2lzdCBzcGdpc3QgcHJpdmlsZWdlcyBpbml0X3By aXZzIHNlY3VyaXR5X2xhYmVsIGNvbGxhdGUgbWF0dmlldyBsb2NrIHJlcGxpY2FfaWRlbnRpdHkg cm93c2VjdXJpdHkgb2JqZWN0X2FkZHJlc3MgdGFibGVzYW1wbGUgZ3JvdXBpbmdzZXRzIGRyb3Bf b3BlcmF0b3IgcGFzc3dvcmQgaWRlbnRpdHkgZ2VuZXJhdGVkX3N0b3JlZCBqb2luX2hhc2gKIAor IyAtLS0tLS0tLS0tCisjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMKKyMgLS0tLS0t LS0tLQordGVzdDogaGVhcF9ob3RfdXBkYXRlcworCiAjIC0tLS0tLS0tLS0KICMgQWRkaXRpb25h bCBCUklOIHRlc3RzCiAjIC0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2hlYXBfaG90X3VwZGF0ZXMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaGVhcF9ob3Rf dXBkYXRlcy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU2ZWM0 ZjJmOTZjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaGVhcF9ob3Rf dXBkYXRlcy5zcWwKQEAgLTAsMCArMSw0ODEgQEAKKy0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tCistLSBU aGlzIHRhYmxlIHdpbGwgaGF2ZSB0d28gY29sdW1ucyBhbmQgdHdvIGluZGV4ZXMsIG9uZSBvbiB0 aGUgcHJpbWFyeSBrZXkKKy0tIGlkIGFuZCBvbmUgb24gdGhlIGV4cHJlc3Npb24gKGluZm8tPj4n bmFtZScpLiAgVGhhdCBtZWFucyB0aGF0IHRoZSBpbmRleGVkCistLSBhdHRyaWJ1dGVzIGFyZSAn aWQnIGFuZCAnaW5mbycuCitjcmVhdGUgdGFibGUga2V5dmFsdWUoaWQgaW50ZWdlciBwcmltYXJ5 IGtleSwgaW5mbyBqc29uYik7CitjcmVhdGUgaW5kZXggbmFtZWluZGV4IG9uIGtleXZhbHVlKChp bmZvLT4+J25hbWUnKSk7CitpbnNlcnQgaW50byBrZXl2YWx1ZSB2YWx1ZXMgKDEsICd7Im5hbWUi OiAiam9obiIsICJkYXRhIjogInNvbWUgZGF0YSJ9Jyk7CisKKy0tIERpc2FibGUgZXhwcmVzc2lv biBjaGVja3MuCitBTFRFUiBUQUJMRSBrZXl2YWx1ZSBTRVQgKGV4cHJlc3Npb25fY2hlY2tzID0g ZmFsc2UpOworU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0g J2tleXZhbHVlJzsKKworLS0gV2hpbGUgdGhlIGluZGV4ZWQgYXR0cmlidXRlICJuYW1lIiBpcyB1 bmNoYW5nZWQgd2UndmUgZGlzYWJsZWQgZXhwcmVzc2lvbgorLS0gY2hlY2tzIHNvIHRoaXMgdXBk YXRlIHNob3VsZCBub3QgZ28gSE9UIGFzIHRoZSBzeXN0ZW0gY2FuJ3QgZGV0ZXJtaW5lIGlmCist LSB0aGUgaW5kZXhlZCBhdHRyaWJ1dGUgaGFzIGNoYW5nZWQgd2l0aG91dCBldmFsdWF0aW5nIHRo ZSBleHByZXNzaW9uLgordXBkYXRlIGtleXZhbHVlIHNldCBpbmZvPSd7Im5hbWUiOiAiam9obiIs ICJkYXRhIjogInNvbWV0aGluZyBlbHNlIn0nIHdoZXJlIGlkPTE7CitzZWxlY3QgcGdfc3RhdF9n ZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2tleXZhbHVlJzo6cmVnY2xhc3MpOyAtLSBleHBl Y3Q6IDAgcm93CisKKy0tIFJlLWVuYWJsZSBleHByZXNzaW9uIGNoZWNrcy4KK0FMVEVSIFRBQkxF IGtleXZhbHVlIFNFVCAoZXhwcmVzc2lvbl9jaGVja3MgPSB0cnVlKTsKK1NFTEVDVCByZWxvcHRp b25zIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICdrZXl2YWx1ZSc7CisKKy0tIFRoZSBp bmRleGVkIGF0dHJpYnV0ZSAibmFtZSIgd2l0aCB2YWx1ZSAiam9obiIgaXMgdW5jaGFuZ2VkLCBl eHBlY3QgYSBIT1QgdXBkYXRlLgordXBkYXRlIGtleXZhbHVlIHNldCBpbmZvPSd7Im5hbWUiOiAi am9obiIsICJkYXRhIjogInNvbWUgb3RoZXIgZGF0YSJ9JyB3aGVyZSBpZD0xOworc2VsZWN0IHBn X3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdrZXl2YWx1ZSc6OnJlZ2NsYXNzKTsg LS0gZXhwZWN0OiAxIHJvdworCistLSBUaGUgZm9sbG93aW5nIHVwZGF0ZSBjaGFuZ2VzIHRoZSBp bmRleGVkIGF0dHJpYnV0ZSAibmFtZSIsIHRoaXMgc2hvdWxkIG5vdCBiZSBhIEhPVCB1cGRhdGUu Cit1cGRhdGUga2V5dmFsdWUgc2V0IGluZm89J3sibmFtZSI6ICJzbWl0aCIsICJkYXRhIjogInNv bWUgb3RoZXIgZGF0YSJ9JyB3aGVyZSBpZD0xOworc2VsZWN0IHBnX3N0YXRfZ2V0X3hhY3RfdHVw bGVzX2hvdF91cGRhdGVkKCdrZXl2YWx1ZSc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5vIG5l dyBIT1QgdXBkYXRlcworCistLSBOb3csIHRoaXMgdXBkYXRlIGRvZXMgbm90IGNoYW5nZSB0aGUg aW5kZXhlZCBhdHRyaWJ1dGUgIm5hbWUiIGZyb20gInNtaXRoIiwgdGhpcyBzaG91bGQgYmUgSE9U LgordXBkYXRlIGtleXZhbHVlIHNldCBpbmZvPSd7Im5hbWUiOiAic21pdGgiLCAiZGF0YSI6ICJz b21lIG1vcmUgZGF0YSJ9JyB3aGVyZSBpZD0xOworc2VsZWN0IHBnX3N0YXRfZ2V0X3hhY3RfdHVw bGVzX2hvdF91cGRhdGVkKCdrZXl2YWx1ZSc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAyIHJvd3Mg bm93Citkcm9wIHRhYmxlIGtleXZhbHVlOworCisKKy0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tCistLSBU aGlzIHRhYmxlIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBvbmUgYnV0IGl0IGhhcyBhIHRo aXJkIGluZGV4LiAgVGhlCistLSBpbmRleCAnY29saW5kZXgnIGlzbid0IGFuIGV4cHJlc3Npb24g aW5kZXgsIGl0IGluZGV4ZXMgdGhlIGVudGlyZSB2YWx1ZQorLS0gaW4gdGhlIGluZm8gY29sdW1u LiAgVGhlcmUgYXJlIHN0aWxsIG9ubHkgdHdvIGluZGV4ZWQgYXR0cmlidXRlcyBmb3IgdGhpcwor LS0gcmVsYXRpb24sIHRoZSBzYW1lIHR3byBhcyBiZWZvcmUuICBUaGUgcHJlc2VuY2Ugb2YgYW4g aW5kZXggb24gdGhlIGVudGlyZQorLS0gdmFsdWUgb2YgdGhlIGluZm8gY29sdW1uIHNob3VsZCBw cmV2ZW50IEhPVCB1cGRhdGVzIGZvciBhbnkgdXBkYXRlcyB0byBhbnkKKy0tIHBvcnRpb24gb2Yg SlNPTkIgY29udGVudCBpbiB0aGF0IGNvbHVtbi4KK2NyZWF0ZSB0YWJsZSBrZXl2YWx1ZShpZCBp bnRlZ2VyIHByaW1hcnkga2V5LCBpbmZvIGpzb25iKTsKK2NyZWF0ZSBpbmRleCBuYW1laW5kZXgg b24ga2V5dmFsdWUoKGluZm8tPj4nbmFtZScpKTsKK2NyZWF0ZSBpbmRleCBjb2xpbmRleCBvbiBr ZXl2YWx1ZShpbmZvKTsKK2luc2VydCBpbnRvIGtleXZhbHVlIHZhbHVlcyAoMSwgJ3sibmFtZSI6 ICJqb2huIiwgImRhdGEiOiAic29tZSBkYXRhIn0nKTsKKworLS0gVGhpcyB1cGRhdGUgZG9lc24n dCBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGluZGV4LCBidXQgaXQgZG9lcwor LS0gY2hhbmdlIHRoZSBjb250ZW50IG9mIHRoZSBpbmZvIGNvbHVtbiBhbmQgc28gc2hvdWxkIG5v dCBiZSBIT1QgYmVjYXVzZSB0aGUKKy0tIGluZGV4ZWQgdmFsdWUgY2hhbmdlZCBhcyBhIHJlc3Vs dCBvZiB0aGUgdXBkYXRlLgordXBkYXRlIGtleXZhbHVlIHNldCBpbmZvPSd7Im5hbWUiOiAiam9o biIsICJkYXRhIjogInNvbWUgb3RoZXIgZGF0YSJ9JyB3aGVyZSBpZD0xOworc2VsZWN0IHBnX3N0 YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdrZXl2YWx1ZSc6OnJlZ2NsYXNzKTsgLS0g ZXhwZWN0OiAwIHJvd3MKK2Ryb3AgdGFibGUga2V5dmFsdWU7CisKKy0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tCistLSBUaGUgdGFibGUgaGFzIG9uZSBjb2x1bW4gZG9jcyBhbmQgdHdvIGluZGV4ZXMuICBU aGV5IGFyZSBib3RoIGV4cHJlc3Npb24KKy0tIGluZGV4ZXMgcmVmZXJlbmNpbmcgdGhlIHNhbWUg Y29sdW1uIGF0dHJpYnV0ZSAoZG9jcykgYnV0IG9uZSBpcyBhIHBhcnRpYWwKKy0tIGluZGV4Lgor Q1JFQVRFIFRBQkxFIGV4IChkb2NzIEpTT05CKSBXSVRIIChmaWxsZmFjdG9yID0gNjApOworSU5T RVJUIElOVE8gZXggKGRvY3MpIFZBTFVFUyAoJ3siYSI6IDAsICJiIjogMH0nKTsKK0lOU0VSVCBJ TlRPIGV4IChkb2NzKSBTRUxFQ1QganNvbmJfYnVpbGRfb2JqZWN0KCdiJywgbikgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMTAwLCAxMDAwMCkgYXMgbjsKK0NSRUFURSBJTkRFWCBpZHhfZXhfYSBPTiBl eCAoKGRvY3MtPj4nYScpKTsKK0NSRUFURSBJTkRFWCBpZHhfZXhfYiBPTiBleCAoKGRvY3MtPj4n YicpKSBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5OworCistLSBXZSdyZSB1c2luZyBC VFJFRSBpbmRleGVzIGFuZCBmb3IgdGhpcyB0ZXN0IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQg dGhleSByZW1haW4KKy0tIGluIHN5bmMgd2l0aCBjaGFuZ2VzIHRvIG91ciByZWxhdGlvbi4gIEZv cmNlIHRoZSBjaG9pY2Ugb2YgaW5kZXggc2NhbnMgYmVsb3cgc28KKy0tIHRoYXQgd2Uga25vdyB3 ZSdyZSBjaGVja2luZyB0aGUgaW5kZXgncyB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdmFsdWVzIHNo b3VsZCBiZQorLS0gaW4gdGhlIGluZGV4IG9yIG5vdC4KK1NFVCBTRVNTSU9OIGVuYWJsZV9zZXFz Y2FuID0gT0ZGOworU0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBPRkY7CisKKy0tIExl YXZlICdhJyB1bmNoYW5nZWQgYnV0IG1vZGlmeSAnYicgdG8gYSB2YWx1ZSBvdXRzaWRlIG9mIHRo ZSBpbmRleCBwcmVkaWNhdGUuCistLSBUaGlzIHNob3VsZCBiZSBhIEhPVCB1cGRhdGUgYmVjYXVz ZSBuZWl0aGVyIGluZGV4IGlzIGNoYW5nZWQuCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9i dWlsZF9vYmplY3QoJ2EnLCAwLCAnYicsIDEpIFdIRVJFIChkb2NzLT4+J2EnKTo6bnVtZXJpYyA9 IDA7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6cmVn Y2xhc3MpOyAtLSBleHBlY3Q6IDEgcm93CistLSBMZXQncyBjaGVjayB0byBtYWtlIHN1cmUgdGhh dCB0aGUgaW5kZXggZG9lcyBub3QgY29udGFpbiBhIHZhbHVlIGZvciAnYicKK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUICogRlJPTSBleCBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5 IEFORCAoZG9jcy0+PidiJyk6Om51bWVyaWMgPCAxMDA7CitTRUxFQ1QgKiBGUk9NIGV4IFdIRVJF IChkb2NzLT4+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEw MDsKKworLS0gTGVhdmUgJ2EnIHVuY2hhbmdlZCBidXQgbW9kaWZ5ICdiJyB0byBhIHZhbHVlIHdp dGhpbiB0aGUgaW5kZXggcHJlZGljYXRlLgorLS0gVGhpcyByZXByZXNlbnRzIGEgY2hhbmdlIGZv ciBmaWVsZCAnYicgZnJvbSB1bmluZGV4ZWQgdG8gaW5kZXhlZCBhbmQgc28KKy0tIHRoaXMgc2hv dWxkIG5vdCB0YWtlIHRoZSBIT1QgcGF0aC4KK1VQREFURSBleCBTRVQgZG9jcyA9IGpzb25iX2J1 aWxkX29iamVjdCgnYScsIDAsICdiJywgMTApIFdIRVJFIChkb2NzLT4+J2EnKTo6bnVtZXJpYyA9 IDA7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6cmVn Y2xhc3MpOyAtLSBleHBlY3Q6IDEgbm8gbmV3IEhPVCB1cGRhdGVzCistLSBMZXQncyBjaGVjayB0 byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kZXggY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiAnYicK K0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBleCBXSEVSRSAoZG9jcy0+PidiJyk6 Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+PidiJyk6Om51bWVyaWMgPCAxMDA7CitTRUxFQ1QgKiBG Uk9NIGV4IFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6 bnVtZXJpYyA8IDEwMDsKKworLS0gVGhpcyB1cGRhdGUgbW9kaWZpZXMgdGhlIHZhbHVlIG9mICdh JywgYW4gaW5kZXhlZCBmaWVsZCwgc28gaXQgYWxzbyBjYW5ub3QKKy0tIGJlIGEgSE9UIHVwZGF0 ZS4KK1VQREFURSBleCBTRVQgZG9jcyA9IGpzb25iX2J1aWxkX29iamVjdCgnYScsIDEsICdiJywg MTApIFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA9IDEwOworU0VMRUNUIHBnX3N0YXRfZ2V0 X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5v IG5ldyBIT1QgdXBkYXRlcworCistLSBUaGlzIHVwZGF0ZSBjaGFuZ2VzIGJvdGggJ2EnIGFuZCAn YicgdG8gbmV3IHZhbHVlcyB0aGF0IHJlcXVpcmUgaW5kZXggdXBkYXRlcywKKy0tIHRoaXMgY2Fu bm90IHVzZSB0aGUgSE9UIHBhdGguCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9v YmplY3QoJ2EnLCAyLCAnYicsIDEyKSBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPSAxMDsK K1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnZXgnOjpyZWdjbGFz cyk7IC0tIGV4cGVjdDogMSBubyBuZXcgSE9UIHVwZGF0ZXMKKy0tIExldCdzIGNoZWNrIHRvIG1h a2Ugc3VyZSB0aGF0IHRoZSBpbmRleCBjb250YWlucyB0aGUgbmV3IHZhbHVlIG9mICdiJworRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGV4IFdIRVJFIChkb2NzLT4+J2InKTo6bnVt ZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEwMDsKK1NFTEVDVCAqIEZST00g ZXggV0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3MtPj4nYicpOjpudW1l cmljIDwgMTAwOworCistLSBUaGlzIHVwZGF0ZSBjaGFuZ2VzICdiJyB0byBhIHZhbHVlIG91dHNp ZGUgaXRzIHByZWRpY2F0ZSByZXF1aXJpbmcgdGhhdAorLS0gd2UgcmVtb3ZlIGl0IGZyb20gdGhl IGluZGV4LiAgVGhhdCdzIGEgdHJhbnNpdGlvbiB0aGF0IGNhbid0IGJlIGRvbmUKKy0tIGR1cmlu ZyBhIEhPVCB1cGRhdGUuCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3Qo J2EnLCAyLCAnYicsIDEpIFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA9IDEyOworU0VMRUNU IHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0g ZXhwZWN0OiAxIG5vIG5ldyBIT1QgdXBkYXRlcworLS0gTGV0J3MgY2hlY2sgdG8gbWFrZSBzdXJl IHRoYXQgdGhlIGluZGV4IG5vIGxvbmdlciBjb250YWlucyB0aGUgdmFsdWUgb2YgJ2InCitFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gZXggV0hFUkUgKGRvY3MtPj4nYicpOjpudW1l cmljID4gOSBBTkQgKGRvY3MtPj4nYicpOjpudW1lcmljIDwgMTAwOworU0VMRUNUICogRlJPTSBl eCBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+PidiJyk6Om51bWVy aWMgPCAxMDA7CisKKy0tIERpc2FibGUgZXhwcmVzc2lvbiBjaGVja3MuCitBTFRFUiBUQUJMRSBl eCBTRVQgKGV4cHJlc3Npb25fY2hlY2tzID0gZmFsc2UpOworU0VMRUNUIHJlbG9wdGlvbnMgRlJP TSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ2V4JzsKKworLS0gVGhpcyB1cGRhdGUgY2hhbmdl cyAnYicgdG8gYSB2YWx1ZSB3aXRoaW4gaXRzIHByZWRpY2F0ZSBqdXN0IGxpa2UgaXQKKy0tIHBy ZXZpb3VzIHZhbHVlLCB3aGljaCB3b3VsZCBhbGxvdyBmb3IgYSBIT1QgdXBkYXRlIGJ1dCB3aXRo IGV4cHJlc3Npb24KKy0tIGNoZWNrcyBkaXNhYmxlZCB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhhdCBz byB0aGlzIHNob3VsZCBub3QgYmUgYSBIT1QgdXBkYXRlLgorVVBEQVRFIGV4IFNFVCBkb2NzID0g anNvbmJfYnVpbGRfb2JqZWN0KCdhJywgMiwgJ2InLCAyKSBXSEVSRSAoZG9jcy0+PidiJyk6Om51 bWVyaWMgPSAxOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdl eCc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5vIG5ldyBIT1QgdXBkYXRlcworCisKKy0tIExl dCdzIG1ha2Ugc3VyZSB3ZSdyZSByZWNvcmRpbmcgSE9UIHVwZGF0ZXMgZm9yIG91ciAnZXgnIHJl bGF0aW9uIHByb3Blcmx5IGluIHRoZSBzeXN0ZW0KKy0tIHRhYmxlIHBnX3N0YXRfdXNlcl90YWJs ZXMuICBOb3RlIHRoYXQgc3RhdGlzdGljcyBhcmUgc3RvcmVkIHdpdGhpbiBhIHRyYW5zYWN0aW9u IGNvbnRleHQKKy0tIGZpcnN0ICh4YWN0KSBhbmQgdGhlbiBsYXRlciBpbnRvIHRoZSBnbG9iYWwg c3RhdGlzdGljcyBmb3IgYSByZWxhdGlvbiwgc28gZmlyc3Qgd2UgbmVlZAorLS0gdG8gZW5zdXJl IHBlbmRpbmcgc3RhdHMgYXJlIGZsdXNoZWQuCitTRUxFQ1QgcGdfc3RhdF9mb3JjZV9uZXh0X2Zs dXNoKCk7CitTRUxFQ1QKKyAgICBjLnJlbG5hbWUgQVMgdGFibGVfbmFtZSwKKyAgICAtLSBUcmFu c2FjdGlvbiBzdGF0aXN0aWNzCisgICAgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfdXBkYXRlZChj Lm9pZCkgQVMgeGFjdF91cGRhdGVzLAorICAgIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91 cGRhdGVkKGMub2lkKSBBUyB4YWN0X2hvdF91cGRhdGVzLAorICAgIFJPVU5EKCgKKyAgICAgICAg cGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoYy5vaWQpOjpmbG9hdCAvCisgICAg ICAgIE5VTExJRihwZ19zdGF0X2dldF94YWN0X3R1cGxlc191cGRhdGVkKGMub2lkKSwgMCkgKiAx MDAKKyAgICApOjpudW1lcmljLCAyKSBBUyB4YWN0X2hvdF91cGRhdGVfcGVyY2VudGFnZSwKKyAg ICAtLSBDdW11bGF0aXZlIHN0YXRpc3RpY3MKKyAgICBzLm5fdHVwX3VwZCBBUyB0b3RhbF91cGRh dGVzLAorICAgIHMubl90dXBfaG90X3VwZCBBUyBob3RfdXBkYXRlcywKKyAgICBST1VORCgoCisg ICAgICAgIHMubl90dXBfaG90X3VwZDo6ZmxvYXQgLworICAgICAgICBOVUxMSUYocy5uX3R1cF91 cGQsIDApICogMTAwCisgICAgKTo6bnVtZXJpYywgMikgQVMgdG90YWxfaG90X3VwZGF0ZV9wZXJj ZW50YWdlCitGUk9NIHBnX2NsYXNzIGMKK0xFRlQgSk9JTiBwZ19zdGF0X3VzZXJfdGFibGVzIHMg T04gYy5yZWxuYW1lID0gcy5yZWxuYW1lCitXSEVSRSBjLnJlbG5hbWUgPSAnZXgnCitBTkQgYy5y ZWxuYW1lc3BhY2UgPSAncHVibGljJzo6cmVnbmFtZXNwYWNlOworLS0gZXhwZWN0OiA1IHhhY3Qg dXBkYXRlcyB3aXRoIDEgeGFjdCBob3QgdXBkYXRlIGFuZCBubyBjdW11bGF0aXZlIHVwZGF0ZXMg YXMgeWV0CisKK1NFVCBTRVNTSU9OIGVuYWJsZV9zZXFzY2FuID0gT047CitTRVQgU0VTU0lPTiBl bmFibGVfYml0bWFwc2NhbiA9IE9OOworCitEUk9QIFRBQkxFIGV4OworCistLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLQorLS0gVGhpcyB0YWJsZSBoYXMgYSBzaW5nbGUgY29sdW1uICdlbWFpbCcgYW5kIGEg dW5pcXVlIGNvbnN0cmFpbnQgb24gaXQgdGhhdAorLS0gc2hvdWxkIHByZWNsdWRlIEhPVCB1cGRh dGVzLgorQ1JFQVRFIFRBQkxFIHVzZXJzICgKKyAgICB1c2VyX2lkIHNlcmlhbCBwcmltYXJ5IGtl eSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKKyAgICBlbWFpbCBWQVJDSEFSKDI1 NSkgTk9UIE5VTEwsCisgICAgRVhDTFVERSBVU0lORyBidHJlZSAobG93ZXIoZW1haWwpIFdJVEgg PSkKKyk7CisKKy0tIEFkZCBzb21lIGRhdGEgdG8gdGhlIHRhYmxlIGFuZCB0aGVuIHVwZGF0ZSBp dCBpbiB3YXlzIHRoYXQgc2hvdWxkIGFuZCBzaG91bGQKKy0tIG5vdCBiZSBIT1QgdXBkYXRlcy4K K0lOU0VSVCBJTlRPIHVzZXJzIChuYW1lLCBlbWFpbCkgVkFMVUVTCisoJ3VzZXIxJywgJ3VzZXIx QGV4YW1wbGUuY29tJyksCisoJ3VzZXIyJywgJ3VzZXIyQGV4YW1wbGUuY29tJyksCisoJ3Rha2Vu JywgJ3Rha2VuQEVYQU1QTEUuY29tJyksCisoJ3lvdScsICd5b3VAZG9tYWluLmNvbScpLAorKCd0 YWtlbicsICd0YWtlbkBkb21haW4uY29tJyk7CisKKy0tIFNob3VsZCBmYWlsIGJlY2F1c2Ugb2Yg dGhlIHVuaXF1ZSBjb25zdHJhaW50IG9uIHRoZSBlbWFpbCBjb2x1bW4uCitVUERBVEUgdXNlcnMg U0VUIGVtYWlsID0gJ3VzZXIxQGV4YW1wbGUuY29tJyBXSEVSRSBlbWFpbCA9ICd1c2VyMkBleGFt cGxlLmNvbSc7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ3Vz ZXJzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDAgbm8gbmV3IEhPVCB1cGRhdGVzCisKKy0tIFNo b3VsZCBzdWNjZWVkIGJlY2F1c2UgdGhlIGVtYWlsIGNvbHVtbiBpcyBub3QgYmVpbmcgdXBkYXRl ZCBhbmQgc2hvdWxkIGdvIEhPVC4KK1VQREFURSB1c2VycyBTRVQgbmFtZSA9ICdmb28nIFdIRVJF IGVtYWlsID0gJ3VzZXIxQGV4YW1wbGUuY29tJzsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1 cGxlc19ob3RfdXBkYXRlZCgndXNlcnMnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDogMSBhIHNpbmds ZSBuZXcgSE9UIHVwZGF0ZQorCistLSBDcmVhdGUgYSBwYXJ0aWFsIGluZGV4IG9uIHRoZSBlbWFp bCBjb2x1bW4sIHVwZGF0ZXMKK0NSRUFURSBJTkRFWCBpZHhfdXNlcnNfZW1haWxfbm9fZXhhbXBs ZSBPTiB1c2VycyAobG93ZXIoZW1haWwpKSBXSEVSRSBsb3dlcihlbWFpbCkgTElLRSAnJUBleGFt cGxlLmNvbSUnOworCistLSBBbiB1cGRhdGUgdGhhdCBjaGFuZ2VzIHRoZSBlbWFpbCBjb2x1bW4g YnV0IG5vdCB0aGUgaW5kZXhlZCBwb3J0aW9uIG9mIGl0IGFuZCBmYWxscyBvdXRzaWRlIHRoZSBj b25zdHJhaW50LgorLS0gU2hvdWxkbid0IGJlIGEgSE9UIHVwZGF0ZSBiZWNhdXNlIG9mIHRoZSBl eGNsdXNpb24gY29uc3RyYWludC4KK1VQREFURSB1c2VycyBTRVQgZW1haWwgPSAneW91KzJAZG9t YWluLmNvbScgV0hFUkUgbmFtZSA9ICd5b3UnOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVw bGVzX2hvdF91cGRhdGVkKCd1c2Vycyc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5vIG5ldyBI T1QgdXBkYXRlcworCistLSBBbiB1cGRhdGUgdGhhdCBjaGFuZ2VzIHRoZSBlbWFpbCBjb2x1bW4g YnV0IG5vdCB0aGUgaW5kZXhlZCBwb3J0aW9uIG9mIGl0IGFuZCBmYWxscyB3aXRoaW4gdGhlIGNv bnN0cmFpbnQuCistLSBBZ2Fpbiwgc2hvdWxkIGZhaWwgY29uc3RyYWludCBhbmQgZmFpbCB0byBi ZSBhIEhPVCB1cGRhdGUuCitVUERBVEUgdXNlcnMgU0VUIGVtYWlsID0gJ3Rha2VuQGRvbWFpbi5j b20nIFdIRVJFIG5hbWUgPSAneW91JzsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19o b3RfdXBkYXRlZCgndXNlcnMnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDogMSBubyBuZXcgSE9UIHVw ZGF0ZXMKKworRFJPUCBUQUJMRSB1c2VyczsKKworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0tIEFu b3RoZXIgdGVzdCBvZiBjb25zdHJhaW50cyBzcG9pbGluZyBIT1QgdXBkYXRlcywgdGhpcyB0aW1l IHdpdGggYSByYW5nZS4KK0NSRUFURSBUQUJMRSBldmVudHMgKAorICAgIGlkIHNlcmlhbCBwcmlt YXJ5IGtleSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKKyAgICBldmVudF90aW1l IHRzdHpyYW5nZSwKKyAgICBjb25zdHJhaW50IG5vX3NjcmVlbmluZ190aW1lX292ZXJsYXAgZXhj bHVkZSB1c2luZyBnaXN0ICgKKyAgICAgICAgZXZlbnRfdGltZSBXSVRIICYmCisgICAgKQorKTsK KworLS0gQWRkIHR3byBub24tb3ZlcmxhcHBpbmcgZXZlbnRzLgorSU5TRVJUIElOVE8gZXZlbnRz IChpZCwgZXZlbnRfdGltZSwgbmFtZSkKK1ZBTFVFUworICAgICgxLCAnWyIyMDIzLTAxLTAxIDE5 OjAwOjAwIiwgIjIwMjMtMDEtMDEgMjA6NDU6MDAiXScsICdldmVudDEnKSwKKyAgICAoMiwgJ1si MjAyMy0wMS0wMSAyMTowMDowMCIsICIyMDIzLTAxLTAxIDIxOjQ1OjAwIl0nLCAnZXZlbnQyJyk7 CisKKy0tIFVwZGF0ZSB0aGUgZmlyc3QgZXZlbnQgdG8gb3ZlcmxhcCB3aXRoIHRoZSBzZWNvbmQs IHNob3VsZCBmYWlsIHRoZSBjb25zdHJhaW50IGFuZCBub3QgYmUgSE9ULgorVVBEQVRFIGV2ZW50 cyBTRVQgZXZlbnRfdGltZSA9ICdbIjIwMjMtMDEtMDEgMjA6MDA6MDAiLCAiMjAyMy0wMS0wMSAy MTo0NTowMCJdJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNf aG90X3VwZGF0ZWQoJ2V2ZW50cyc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAwIG5vIG5ldyBIT1Qg dXBkYXRlcworCistLSBVcGRhdGUgdGhlIGZpcnN0IGV2ZW50IHRvIG5vdCBvdmVybGFwIHdpdGgg dGhlIHNlY29uZCwgYWdhaW4gbm90IEhPVCBkdWUgdG8gdGhlIGNvbnN0cmFpbnQuCitVUERBVEUg ZXZlbnRzIFNFVCBldmVudF90aW1lID0gJ1siMjAyMy0wMS0wMSAyMjowMDowMCIsICIyMDIzLTAx LTAxIDIyOjQ1OjAwIl0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1 cGxlc19ob3RfdXBkYXRlZCgnZXZlbnRzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDAgbm8gbmV3 IEhPVCB1cGRhdGVzCisKKy0tIFVwZGF0ZSB0aGUgZmlyc3QgZXZlbnQgdG8gbm90IG92ZXJsYXAg d2l0aCB0aGUgc2Vjb25kLCB0aGlzIHRpbWUgd2UncmUgSE9UIGJlY2F1c2Ugd2UgZG9uJ3Qgb3Zl cmxhcCB3aXRoIHRoZSBjb25zdHJhaW50LgorVVBEQVRFIGV2ZW50cyBTRVQgbmFtZSA9ICduZXcg bmFtZSBoZXJlJyBXSEVSRSBpZCA9IDE7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNf aG90X3VwZGF0ZWQoJ2V2ZW50cyc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG9uZSBuZXcgSE9U IHVwZGF0ZQorCitEUk9QIFRBQkxFIGV2ZW50czsKKworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0t IEEgdGVzdCB0byBlbnN1cmUgdGhhdCBvbmx5IG1vZGlmaWVkIHN1bW1hcml6aW5nIGluZGV4ZXMg YXJlIHVwZGF0ZWQsIG5vdAorLS0gYWxsIG9mIHRoZW0uCitDUkVBVEUgVEFCTEUgZXggKGlkIFNF UklBTCBwcmltYXJ5IGtleSwgYXR0MSBKU09OQiwgYXR0MiB0ZXh0LCBhdHQzIHRleHQsIGF0dDQg dGV4dCkgV0lUSCAoZmlsbGZhY3RvciA9IDYwKTsKK0NSRUFURSBJTkRFWCBleF9leHByMV9pZHgg T04gZXggVVNJTkcgYnRyZWUoKGF0dDEtPidkYXRhJykpOworQ1JFQVRFIElOREVYIGV4X3N1bXIx X2lkeCBPTiBleCBVU0lORyBCUklOKGF0dDIpOworQ1JFQVRFIElOREVYIGV4X2V4cHIyX2lkeCBP TiBleCBVU0lORyBidHJlZSgoYXR0MS0+J2EnKSk7CitDUkVBVEUgSU5ERVggZXhfZXhwcjNfaWR4 IE9OIGV4IFVTSU5HIGJ0cmVlKChhdHQxLT4nYicpKTsKK0NSRUFURSBJTkRFWCBleF9leHByNF9p ZHggT04gZXggVVNJTkcgYnRyZWUoKGF0dDEtPidjJykpOworQ1JFQVRFIElOREVYIGV4X3N1bXIy X2lkeCBPTiBleCBVU0lORyBCUklOKGF0dDMpOworQ1JFQVRFIElOREVYIGV4X3N1bXIzX2lkeCBP TiBleCBVU0lORyBCUklOKGF0dDQpOworQ1JFQVRFIElOREVYIGV4X2V4cHI1X2lkeCBPTiBleCBV U0lORyBidHJlZSgoYXR0MS0+J2QnKSk7CitJTlNFUlQgSU5UTyBleCAoYXR0MSwgYXR0MikgVkFM VUVTICgneyJkYXRhIjogW119Jzo6anNvbiwgJ25vdGhpbmcgc3BlY2lhbCcpOworCitTRUxFQ1Qg KiBGUk9NIGV4OworCistLSBVcGRhdGUgYXR0MiBhbmQgYXR0NCBib3RoIGFyZSBCUklOL3N1bW1h cml6aW5nIGluZGV4ZXMsIHRoaXMgc2hvdWxkIGJlIGEgSE9UIHVwZGF0ZSBhbmQKKy0tIG9ubHkg dXBkYXRlIHR3byBvZiB0aGUgdGhyZWUgc3VtbWFyaXppbmcgaW5kZXhlcy4KK1VQREFURSBleCBT RVQgYXR0MiA9ICdzcGVjaWFsIGluZGVlZCcsIGF0dDQgPSAnd2hhdGV2ZXInOworU0VMRUNUIHBn X3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0gZXhw ZWN0OiAxIG9uZSBuZXcgSE9UIHVwZGF0ZQorU0VMRUNUICogRlJPTSBleDsKKworLS0gVXBkYXRl IGF0dDEgYW5kIGF0dDIsIG9ubHkgb25lIGlzIEJSSU4vc3VtbWFyaXppbmcsIHRoaXMgc2hvdWxk IE5PVCBiZSBhIEhPVCB1cGRhdGUuCitVUERBVEUgZXggU0VUIGF0dDEgPSBhdHQxIHx8ICd7ImRh dGEiOiAiaG93ZHkifScsIGF0dDIgPSAnc3BlY2lhbCwgc28gc3BlY2lhbCc7CitTRUxFQ1QgcGdf c3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6cmVnY2xhc3MpOyAtLSBleHBl Y3Q6IDEgbm8gbmV3IEhPVCB1cGRhdGVzCitTRUxFQ1QgKiBGUk9NIGV4OworCistLSBVcGRhdGUg YXR0MiwgYXR0MywgYW5kIGF0dDQgYWxsIGFyZSBCUklOL3N1bW1hcml6aW5nIGluZGV4ZXMsIHRo aXMgc2hvdWxkIGJlIGEgSE9UIHVwZGF0ZQorLS0gYW5kIHlldCBzdGlsbCB1cGRhdGUgYWxsIHRo cmVlIHN1bW1hcml6aW5nIGluZGV4ZXMuCitVUERBVEUgZXggU0VUIGF0dDIgPSAnYScsIGF0dDMg PSAnYicsIGF0dDQgPSAnYyc7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3Vw ZGF0ZWQoJ2V4Jzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDIgd2l0aCBvbmUgbmV3IEhPVCB1cGRh dGUKK1NFTEVDVCAqIEZST00gZXg7CisKKy0tIFVwZGF0ZSBhdHQxLCBhdHQyLCBhbmQgYXR0MyBh bGwgbW9kaWZpZWQgdmFsdWVzIGFyZSBCUklOL3N1bW1hcml6aW5nIGluZGV4ZXMsIHRoaXMgc2hv dWxkIGJlIGEgSE9UIHVwZGF0ZQorLS0gYW5kIHlldCBzdGlsbCB1cGRhdGUgYWxsIHRocmVlIHN1 bW1hcml6aW5nIGluZGV4ZXMuCitVUERBVEUgZXggU0VUIGF0dDEgPSAneyJkYXRhIjogImhvd2R5 In0nLCBhdHQyID0gJ2QnLCBhdHQzID0gJ2UnOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVw bGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAzIHdpdGggb25lIG5l dyBIT1QgdXBkYXRlCitTRUxFQ1QgKiBGUk9NIGV4OworCitEUk9QIFRBQkxFIGV4OworCistLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLQorLS0gQSB0ZXN0IHRvIGVuc3VyZSB0aGF0IHN1bW1hcml6aW5nIGlu ZGV4ZXMgYXJlIG5vdCB1cGRhdGVkIHdoZW4gdGhleSBkb24ndAorLS0gY2hhbmdlLCBidXQgYXJl IHVwZGF0ZWQgd2hlbiB0aGV5IGRvIHdoaWxlIG5vdCBwcmVmZW50IEhPVCB1cGRhdGVzLgorQ1JF QVRFIFRBQkxFIGV4IChhdHQxIEpTT05CLCBhdHQyIHRleHQpIFdJVEggKGZpbGxmYWN0b3IgPSA2 MCk7CitDUkVBVEUgSU5ERVggZXhfZXhwcjFfaWR4IE9OIGV4IFVTSU5HIGJ0cmVlKChhdHQxLT4n ZGF0YScpKTsKK0NSRUFURSBJTkRFWCBleF9zdW1yMV9pZHggT04gZXggVVNJTkcgQlJJTihhdHQy KTsKK0lOU0VSVCBJTlRPIGV4IFZBTFVFUyAoJ3siZGF0YSI6IFtdfScsICdub3RoaW5nIHNwZWNp YWwnKTsKKworLS0gVXBkYXRlIHRoZSB1bmluZGV4ZWQgdmFsdWUgb2YgYXR0MSwgdGhpcyBzaG91 bGQgYmUgYSBIT1QgdXBkYXRlIGFuZCBhbmQgc2hvdWxkCistLSB1cGRhdGUgdGhlIHN1bW1hcml6 aW5nIGluZGV4LgorVVBEQVRFIGV4IFNFVCBhdHQxID0gYXR0MSB8fCAneyJzdGF0dXMiOiAic3Rh bGVtYXRlIn0nOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdl eCc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG9uZSBuZXcgSE9UIHVwZGF0ZQorCistLSBVcGRh dGUgdGhlIGluZGV4ZWQgdmFsdWUgb2YgYXR0MiwgYSBzdW1tYXJpemVkIHZhbHVlLCB0aGlzIGlz IGEgc3VtbWFyaXplZAorLS0gb25seSB1cGRhdGUgYW5kIHNob3VsZCB1c2UgdGhlIEhPVCBwYXRo IHdoaWxlIHN0aWxsIHRyaWdnZXJpbmcgYW4gdXBkYXRlIHRvCistLSB0aGUgc3VtbWFyaXppbmcg QlJJTiBpbmRleC4KK1VQREFURSBleCBTRVQgYXR0MiA9ICdzcGVjaWFsIGluZGVlZCc7CitTRUxF Q1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6cmVnY2xhc3MpOyAt LSBleHBlY3Q6IDIgb25lIG5ldyBIT1QgdXBkYXRlCisKKy0tIFVwZGF0ZSB0byBhdHQxIGRvZXNu J3QgY2hhbmdlIHRoZSBpbmRleGVkIHZhbHVlIHdoaWxlIHRoZSB1cGRhdGUgdG8gYXR0MiBkb2Vz LAorLS0gdGhpcyBhZ2FpbiBpcyBhIHN1bW1hcml6ZWQgb25seSB1cGRhdGUgYW5kIHNob3VsZCB1 c2UgdGhlIEhPVCBwYXRoIGFzIHdlbGwgYXMKKy0tIHRyaWdnZXIgYW4gdXBkYXRlIHRvIHRoZSBC UklOIGluZGV4LgorVVBEQVRFIGV4IFNFVCBhdHQxID0gYXR0MSB8fCAneyJzdGF0dXMiOiAiY2hl Y2ttYXRlIn0nLCBhdHQyID0gJ3NwZWNpYWwsIHNvIHNwZWNpYWwnOworU0VMRUNUIHBnX3N0YXRf Z2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAz IG9uZSBuZXcgSE9UIHVwZGF0ZQorCistLSBUaGlzIHVwZGF0ZXMgYm90aCBpbmRleGVzLCB0aGUg ZXhwcmVzc2lvbiBpbmRleCBvbiBhdHQxIGFuZCB0aGUgc3VtbWFyaXppbmcKKy0tIGluZGV4IG9u IGF0dDIuICBUaGlzIHNob3VsZCBub3QgYmUgYSBIT1QgdXBkYXRlIGJlY2F1c2UgdGhlcmUgYXJl IG1vZGlmaWVkCistLSBpbmRleGVzIGFuZCBvbmx5IHNvbWUgYXJlIHN1bW1hcml6ZWQsIG5vdCBh bGwuICBUaGlzIHNob3VsZCBmb3JjZSBhbGwKKy0tIGluZGV4ZXMgdG8gYmUgdXBkYXRlZC4KK1VQ REFURSBleCBTRVQgYXR0MSA9IGF0dDEgfHwgJ3siZGF0YSI6IFsxLDIsM119JywgYXR0MiA9ICdk byB5b3Ugd2FudCB0byBwbGF5IGEgZ2FtZT8nOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVw bGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiA0IGJvdGggaW5kZXhl cyB1cGRhdGVkCisKK0RST1AgVEFCTEUgZXg7CisKKy0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tCistLSBU aGlzIHRlc3QgaXMgZm9yIGEgdGFibGUgd2l0aCBhIGN1c3RvbSB0eXBlIGFuZCBhIGN1c3RvbSBv cGVyYXRvcnMgb24KKy0tIHRoZSBCVFJFRSBpbmRleC4gIFRoZSBxdWVzdGlvbiBpcywgd2hlbiBj b21wYXJpbmcgdmFsdWVzIGZvciBlcXVhbGl0eQorLS0gdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFy ZSBjaGFuZ2VzIG9uIHRoZSBpbmRleCBvciBub3QuLi4gc2hvdWxkbid0IHdlCistLSBiZSB1c2lu ZyB0aGUgY3VzdG9tIG9wZXJhdG9ycz8KKworLS0gQ3JlYXRlIGEgdHlwZQorQ1JFQVRFIFRZUEUg bXlfY3VzdG9tX3R5cGUgQVMgKHZhbCBpbnQpOworCistLSBDb21wYXJpc29uIGZ1bmN0aW9ucyAo cmV0dXJucyBib29sZWFuKQorQ1JFQVRFIEZVTkNUSU9OIG15X2N1c3RvbV9sdChhIG15X2N1c3Rv bV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGJvb2xlYW4gQVMgJCQKK0JFR0lOCisg ICAgUkVUVVJOIGEudmFsIDwgYi52YWw7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVU QUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21fbGUoYSBteV9jdXN0b21f dHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFuIEFTICQkCitCRUdJTgorICAg IFJFVFVSTiBhLnZhbCA8PSBiLnZhbDsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1NVVRB QkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIG15X2N1c3RvbV9lcShhIG15X2N1c3RvbV90 eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGJvb2xlYW4gQVMgJCQKK0JFR0lOCisgICAg UkVUVVJOIGEudmFsID0gYi52YWw7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJM RSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21fZ2UoYSBteV9jdXN0b21fdHlw ZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFuIEFTICQkCitCRUdJTgorICAgIFJF VFVSTiBhLnZhbCA+PSBiLnZhbDsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1NVVRBQkxF IFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIG15X2N1c3RvbV9ndChhIG15X2N1c3RvbV90eXBl LCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGJvb2xlYW4gQVMgJCQKK0JFR0lOCisgICAgUkVU VVJOIGEudmFsID4gYi52YWw7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBT VFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21fbmUoYSBteV9jdXN0b21fdHlwZSwg YiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFuIEFTICQkCitCRUdJTgorICAgIFJFVFVS TiBhLnZhbCAhPSBiLnZhbDsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNU UklDVDsKKworLS0gQ29tcGFyaXNvbiBmdW5jdGlvbiAocmV0dXJucyAtMSwgMCwgMSkKK0NSRUFU RSBGVU5DVElPTiBteV9jdXN0b21fY21wKGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5 cGUpIFJFVFVSTlMgaW50IEFTICQkCitCRUdJTgorICAgIElGIGEudmFsIDwgYi52YWwgVEhFTgor ICAgICAgICBSRVRVUk4gLTE7CisgICAgRUxTSUYgYS52YWwgPiBiLnZhbCBUSEVOCisgICAgICAg IFJFVFVSTiAxOworICAgIEVMU0UKKyAgICAgICAgUkVUVVJOIDA7CisgICAgRU5EIElGOworRU5E OworJCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworCistLSBDcmVhdGUgdGhl IG9wZXJhdG9ycworQ1JFQVRFIE9QRVJBVE9SIDwgKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21f dHlwZSwKKyAgICBSSUdIVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15 X2N1c3RvbV9sdCwKKyAgICBDT01NVVRBVE9SID0gPiwKKyAgICBORUdBVE9SID0gPj0KKyk7CisK K0NSRUFURSBPUEVSQVRPUiA8PSAoCisgICAgTEVGVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAg IFJJR0hUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUFJPQ0VEVVJFID0gbXlfY3VzdG9tX2xl LAorICAgIENPTU1VVEFUT1IgPSA+PSwKKyAgICBORUdBVE9SID0gPgorKTsKKworQ1JFQVRFIE9Q RVJBVE9SID0gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9 IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15X2N1c3RvbV9lcSwKKyAgICBDT01N VVRBVE9SID0gPSwKKyAgICBORUdBVE9SID0gPD4KKyk7CisKK0NSRUFURSBPUEVSQVRPUiA+PSAo CisgICAgTEVGVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFJJR0hUQVJHID0gbXlfY3VzdG9t X3R5cGUsCisgICAgUFJPQ0VEVVJFID0gbXlfY3VzdG9tX2dlLAorICAgIENPTU1VVEFUT1IgPSA8 PSwKKyAgICBORUdBVE9SID0gPAorKTsKKworQ1JFQVRFIE9QRVJBVE9SID4gKAorICAgIExFRlRB UkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAg IFBST0NFRFVSRSA9IG15X2N1c3RvbV9ndCwKKyAgICBDT01NVVRBVE9SID0gPCwKKyAgICBORUdB VE9SID0gPD0KKyk7CisKK0NSRUFURSBPUEVSQVRPUiA8PiAoCisgICAgTEVGVEFSRyA9IG15X2N1 c3RvbV90eXBlLAorICAgIFJJR0hUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUFJPQ0VEVVJF ID0gbXlfY3VzdG9tX25lLAorICAgIENPTU1VVEFUT1IgPSA8PiwKKyAgICBORUdBVE9SID0gPQor KTsKKworLS0gQ3JlYXRlIHRoZSBvcGVyYXRvciBjbGFzcyAoaW5jbHVkaW5nIHRoZSBzdXBwb3J0 IGZ1bmN0aW9uKQorQ1JFQVRFIE9QRVJBVE9SIENMQVNTIG15X2N1c3RvbV9vcHMKKyAgICBERUZB VUxUIEZPUiBUWVBFIG15X2N1c3RvbV90eXBlIFVTSU5HIGJ0cmVlIEFTCisgICAgT1BFUkFUT1Ig MSA8LAorICAgIE9QRVJBVE9SIDIgPD0sCisgICAgT1BFUkFUT1IgMyA9LAorICAgIE9QRVJBVE9S IDQgPj0sCisgICAgT1BFUkFUT1IgNSA+LAorICAgIEZVTkNUSU9OIDEgbXlfY3VzdG9tX2NtcCht eV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworCistLSBDcmVhdGUgdGhlIHRhYmxlCitD UkVBVEUgVEFCTEUgbXlfdGFibGUgKAorICAgIGlkIGludCwKKyAgICBjdXN0b21fdmFsIG15X2N1 c3RvbV90eXBlCispOworCistLSBJbnNlcnQgc29tZSBkYXRhCitJTlNFUlQgSU5UTyBteV90YWJs ZSAoaWQsIGN1c3RvbV92YWwpIFZBTFVFUworKDEsIFJPVygzKTo6bXlfY3VzdG9tX3R5cGUpLAor KDIsIFJPVygxKTo6bXlfY3VzdG9tX3R5cGUpLAorKDMsIFJPVyg0KTo6bXlfY3VzdG9tX3R5cGUp LAorKDQsIFJPVygyKTo6bXlfY3VzdG9tX3R5cGUpOworCistLSBDcmVhdGUgYSBmdW5jdGlvbiB0 byB1c2Ugd2hlbiBpbmRleGluZworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYWJzX3ZhbCh2 YWwgbXlfY3VzdG9tX3R5cGUpIFJFVFVSTlMgaW50IEFTICQkCitCRUdJTgorICBSRVRVUk4gYWJz KHZhbC52YWwpOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOwor CistLSBDcmVhdGUgdGhlIGluZGV4CitDUkVBVEUgSU5ERVggaWR4X2N1c3RvbV92YWxfYWJzIE9O IG15X3RhYmxlIChhYnNfdmFsKGN1c3RvbV92YWwpKTsKKworLS0gVXBkYXRlIDEKK1VQREFURSBt eV90YWJsZSBTRVQgY3VzdG9tX3ZhbCA9IFJPVyg1KTo6bXlfY3VzdG9tX3R5cGUgV0hFUkUgaWQg PSAxOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdteV90YWJs ZSc6OnJlZ2NsYXNzKTsKKworLS0gVXBkYXRlIDIKK1VQREFURSBteV90YWJsZSBTRVQgY3VzdG9t X3ZhbCA9IFJPVygwKTo6bXlfY3VzdG9tX3R5cGUgV0hFUkUgY3VzdG9tX3ZhbCA8IFJPVygzKTo6 bXlfY3VzdG9tX3R5cGU7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0 ZWQoJ215X3RhYmxlJzo6cmVnY2xhc3MpOworCistLSBVcGRhdGUgMworVVBEQVRFIG15X3RhYmxl IFNFVCBjdXN0b21fdmFsID0gUk9XKDYpOjpteV9jdXN0b21fdHlwZSBXSEVSRSBpZCA9IDM7CitT RUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ215X3RhYmxlJzo6cmVn Y2xhc3MpOworCistLSBVcGRhdGUgNAorVVBEQVRFIG15X3RhYmxlIFNFVCBpZCA9IDUgV0hFUkUg aWQgPSAxOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdteV90 YWJsZSc6OnJlZ2NsYXNzKTsKKworLS0gUXVlcnkgdXNpbmcgdGhlIGluZGV4CitFWFBMQUlOIChD T1NUUyBPRkYpIFNFTEVDVCAqIEZST00gbXlfdGFibGUgV0hFUkUgYWJzX3ZhbChjdXN0b21fdmFs KSA9IDY7CitTRUxFQ1QgKiBGUk9NIG15X3RhYmxlIFdIRVJFIGFic192YWwoY3VzdG9tX3ZhbCkg PSA2OworCistLSBDbGVhbiB1cAorRFJPUCBUQUJMRSBteV90YWJsZSBDQVNDQURFOworRFJPUCBP UEVSQVRPUiBDTEFTUyBteV9jdXN0b21fb3BzIFVTSU5HIGJ0cmVlIENBU0NBREU7CitEUk9QIE9Q RVJBVE9SIDwgKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIE9QRVJBVE9S IDw9IChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBPUEVSQVRPUiA9ICht eV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBPUEVSQVRPUiA+PSAobXlfY3Vz dG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgT1BFUkFUT1IgPiAobXlfY3VzdG9tX3R5 cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgT1BFUkFUT1IgPD4gKG15X2N1c3RvbV90eXBlLCBt eV9jdXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIG15X2N1c3RvbV9sdChteV9jdXN0b21fdHlw ZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBteV9jdXN0b21fbGUobXlfY3VzdG9t X3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJT04gbXlfY3VzdG9tX2VxKG15X2N1 c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIG15X2N1c3RvbV9nZSht eV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBteV9jdXN0b21f Z3QobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJT04gbXlfY3Vz dG9tX25lKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIG15 X2N1c3RvbV9jbXAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJ T04gYWJzX3ZhbChteV9jdXN0b21fdHlwZSk7CitEUk9QIFRZUEUgbXlfY3VzdG9tX3R5cGUgQ0FT Q0FERTsKLS0gCjIuNDIuMAoK --_002_51C77060059F4BB38EAF83F08656F6D2amazoncom_--