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.98.2) (envelope-from ) id 1xOIcy-000000004Ur-3n8d for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Nov 2026 17:49:00 +0000 Received: from localhost ([127.0.0.1]:43500 helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.98.2) (envelope-from ) id 1xOIcy-00000002CG1-0C7W for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Nov 2026 17:48:56 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]:56594) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1xOIcx-00000002CFs-1Ggd for pgsql-hackers@lists.postgresql.org; Tue, 03 Nov 2026 17:48:55 +0000 Received: from mail-4399.protonmail.ch ([185.70.43.99]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1xOIct-0000000045g-3eCY for pgsql-hackers@lists.postgresql.org; Tue, 03 Nov 2026 17:48:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; s=protonmail; t=1793728126; x=1793987326; bh=TCnY0XCdY75jfunIkgG7CRHvhK3CfXjmJEEOMMgpfc0=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=Ps4BL+ntQ79h/M3ktMdL4yWtKglX5p9nZz8xE7bYmHh11l8h4MLdBUx9JBGYk8FiK Byb1dR2UdCwg1jk+WxlBZtTD5M7jBRq6kgYHmQ02hrQ5WSUb2ovMvDfKAKDDdlFsGp h2gp/3wgSAY+X1hvlE34Y8XTlLIfCe94F3LKb0fOCj48FdVgZnpiRKzKtQhCEGQ8Qp rDGZVRjIBGQbrYHDZy70vmkFcoZ0dU53ygLtoG3+NWa8+cAnUiAieDjm63EtfS7lAw kM4NygE2bBdeuudasRn9jvODbMapuElxYMW0xtecoGTdYKUqP63WqFJwKAAeD0pDMU YQJv7XYCscNxg== Date: Tue, 03 Nov 2026 17:48:41 +0000 To: pgsql-hackers@lists.postgresql.org From: Greg Burd Cc: fengyao0087@gmail.com, pg@bowt.ie Subject: Re: nbtree: opt-in leaf key prefix compression Message-ID: In-Reply-To: References: Feedback-ID: 2668248:user:proton X-Pm-Message-ID: f8a02a390de3e5f4c86b943c0c545d4e3b895f25 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1=_8rcErnQfH7REGMhZswxwOKQz0RfsSdRKypkUQFo6I" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --b1=_8rcErnQfH7REGMhZswxwOKQz0RfsSdRKypkUQFo6I Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello, v7 attached, one real fix since v4, found by the sanitizer CI. CI was red on the Linux Autoconf and 32-bit legs (the ones built with -fsanitize=3Dalignment,undefined -fno-sanitize-recover=3Dall) while every other leg (64-bit meson, macOS, Windows) was green. The standby's startup process aborted (SIGABRT) replaying a prefix leaf split: itup.h:74: runtime error: member access within misaligned address ... for type 'const struct IndexTupleData' #1 btree_xlog_split_prefix nbtxlog.c #2 btree_xlog_split #3 btree_redo The split/dedup WAL payload for the right half is [chosen prefix bytes] [high key][data items]. I was advancing past the prefix bytes by the raw prefix length, not a MAXALIGN'd length, so the IndexTuple high key (and the items after it) landed on an unaligned offset. On x86-64 the misaligned read happens to work, which is why plain cassert builds and my own testing never caught it; the alignment sanitizer correctly rejects it, and a big-endian or stricter-alignment platform would fault for real. Fix: MAXALIGN the prefix region on both the logging and the replay side, in the split path (_bt_split / btree_xlog_split_prefix) and the matching dedup path (_bt_dedup_pass / btree_xlog_dedup). The left-half prefix is logged last and read back as raw bytes, never dereferenced as a tuple, so it was already fine and is unchanged. The lesson for me is that WAL-payload packing has to be tested under the alignment sanitizer, not just cassert. No other changes from v4. For the committer (I hope!), a BTREE_VERSION and catalog version bump. best. -greg --b1=_8rcErnQfH7REGMhZswxwOKQz0RfsSdRKypkUQFo6I Content-Type: text/plain; charset=us-ascii; name=v7-0001-nbtree-opt-in-leaf-key-prefix-compression.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v7-0001-nbtree-opt-in-leaf-key-prefix-compression.patch RnJvbSBhMWRmMzdjMzkzZDU2MTk1OTU0MGZhMDVjYTQzOGFjNzExOTAyZjliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+DQpEYXRlOiBNb24s IDI2IE9jdCAyMDI2IDE1OjI1OjU4IC0wNDAwDQpTdWJqZWN0OiBbUEFUQ0ggdjddIG5idHJlZTog b3B0LWluIGxlYWYga2V5IHByZWZpeCBjb21wcmVzc2lvbg0KDQpBZGQgbGVhZiBrZXkgcHJlZml4 IGNvbXByZXNzaW9uIHRvIG5idHJlZSwgY29udHJvbGxlZCBieSBhIG5ldw0KcGVyLWluZGV4IHN0 b3JhZ2UgcGFyYW1ldGVyLCBwcmVmaXhfY29tcHJlc3Npb24sIHRoYXQgaXMgb2ZmIGJ5IGRlZmF1 bHQuDQoNCldoZW4gYSBsZWFmIHBhZ2UgaXMgd3JpdHRlbiBhcyBhIHdob2xlIC0tIGR1cmluZyBh biBpbmRleCBidWlsZCwgYXMgYQ0Kc3BsaXQgaGFsZiwgb3IgYXMgdGhlIHJlc3VsdCBvZiBhIGRl ZHVwbGljYXRpb24gcGFzcyAtLSBhbmQgaXRzIGRhdGENCml0ZW1zIHNoYXJlIGEgbGVhZGluZyBi eXRlLXByZWZpeCBvZiB0aGVpciBmaXJzdCBrZXkgY29sdW1uLCB0aGUgcGFnZSBpcw0KcmVidWls dCBpbiB0aGUgQlRQX1BSRUZJWCBmb3JtYXQ6IGEgc2luZ2xlIFBSRUZJWCBpdGVtIGFmdGVyIHRo ZSBoaWdoDQprZXkgaG9sZHMgdGhlIHNoYXJlZCBieXRlcywgYW5kIGVhY2ggZGF0YSBpdGVtIGlz IHN0b3JlZCAiY29kZWQiIChpdHMNCmNvcHkgb2YgdGhlIHNoYXJlZCBwcmVmaXggcmVwbGFjZWQg YnkgYSBvbmUtYnl0ZSBsZW5ndGgpLiAgUmVhZHMgb2YgYQ0KbGVhZiBkYXRhIGl0ZW0gZnVubmVs IHRocm91Z2ggX2J0X2dldGl0ZW0oKSwgd2hpY2ggZGVjb2RlcyBvbiBkZW1hbmQ7DQpoaWdoIGtl eXMgYW5kIGludGVybmFsLXBhZ2UgZG93bmxpbmtzIGFyZSBuZXZlciBjb2RlZCBhbmQgYXJlIHJl YWQgd2l0aA0KdGhlIGV4aXN0aW5nIFBhZ2VHZXRJdGVtKCkuDQoNClRoZSBmZWF0dXJlIGlzIGRl bGliZXJhdGVseSBhIHBlci1wYWdlIG9wdC1pbiB3aXRoIG5vIG9uLWRpc2sgdmVyc2lvbg0KY2hh bmdlOiBCVFJFRV9WRVJTSU9OIGFuZCB0aGUgY2F0YWxvZyB2ZXJzaW9uIGFyZSB1bnRvdWNoZWQu ICBBIHBhZ2UgaXMNCmNvbnZlcnRlZCBvbmx5IHdoZW4gaXQgaXMgbmV4dCB3cml0dGVuIHdob2xl LCBuZXZlciBieSBhbiBpbnNlcnQsIFZBQ1VVTQ0Kb3Iga2V5LXJhbmdlIGNoYW5nZSwgc28gY29t cHJlc3Npb24gImZhdWx0cyBmb3J3YXJkIiBvbiBhbiBleGlzdGluZw0KaW5kZXguICBPbGQtZm9y bWF0IGFuZCBuZXctZm9ybWF0IHBhZ2VzIGNvZXhpc3QgaW4gdGhlIHNhbWUgaW5kZXgsIHdoaWNo DQprZWVwcyBwZ191cGdyYWRlLCBwaHlzaWNhbCByZXBsaWNhdGlvbiwgYW5kIHN0YW5kYnlzIHdv cmtpbmcgd2l0aCBubw0KUkVJTkRFWDogYSByZXBsaWNhIHRoYXQgaGFzIG5vdCB5ZXQgc2VlbiBh IHBhZ2UncyBjb252ZXJzaW9uIHN0aWxsIHJlYWRzDQppdCBjb3JyZWN0bHksIGFuZCB0dXJuaW5n IHRoZSBwYXJhbWV0ZXIgb2ZmIChBTFRFUiBJTkRFWCAuLi4gU0VUKSBzdG9wcw0KbmV3IGNvbnZl cnNpb25zIHdoaWxlIGxlYXZpbmcgZXhpc3RpbmcgY29kZWQgcGFnZXMgcmVhZGFibGUuDQoNClBy ZWZpeCBjb21wcmVzc2lvbiBpcyBhIHNlcGFyYXRlIG1lY2hhbmlzbSBmcm9tIGRlZHVwbGljYXRp b24sIG5vdCBhbg0KZXh0ZW5zaW9uIG9mIGl0OiBkZWR1cGxpY2F0aW9uIGNvbGxhcHNlcyB0dXBs ZXMgd2hvc2Ugd2hvbGUga2V5IGlzDQplcXVhbCwgd2hpbGUgcHJlZml4IGNvbXByZXNzaW9uIGZh Y3RvcnMgb3V0IGEgbGVhZGluZyBydW4gc2hhcmVkIGJ5DQpkaXN0aW5jdCBrZXlzIChhIFVSTCBv ciBqc29uYi1wYXRoIGNvbHVtbiBpcyB0aGUgbW90aXZhdGluZyBjYXNlLCB3aGVyZQ0KZGVkdXBs aWNhdGlvbiBkb2VzIG5vdCBoZWxwKS4gIFRoZSB0d28gY29tcG9zZSBvbiBvbmUgcGFnZSAtLSBh IGJ1aWxkDQpkZWR1cGxpY2F0ZXMgZmlyc3QgYW5kIHRoZW4gY29kZXMgdGhlIHN1cnZpdm9ycywg c28gYSBkdXBsaWNhdGUtaGVhdnkNCnByZWZpeCBpbmRleCBpcyBubyBsYXJnZXIgdGhhbiBhIHBs YWluIG9uZS4gIEJvdHRvbS11cCBpbmRleCBkZWxldGlvbg0KcnVucyBvbiBjb2RlZCBwYWdlcyB1 bmNoYW5nZWQsIHNpbmNlIGl0IG9ubHkgcmVtb3ZlcyBpdGVtcy4gIEEgcnVudGltZQ0KZGVkdXBs aWNhdGlvbiBwYXNzIG9uIGEgY29kZWQgcGFnZSBkZWNvZGVzIGZpcnN0LCBhbmQgYmVjYXVzZSBh IGNvZGVkDQpwYWdlIGNhbiBob2xkIG1vcmUgbG9naWNhbCBkYXRhIHRoYW4gZml0cyBwbGFpbiwg dGhlIHBhc3MgYWJvcnRzIGNsZWFubHkNCmFuZCB0aGUgcGFnZSBzcGxpdHMgaW5zdGVhZCB3aGVu IHRoZSBkZWNvZGVkIHNldCB3b3VsZCBvdmVyZmxvdy4NCg0KV0FMIHJlcGxheSByZXByb2R1Y2Vz IHRoZSBjb2RlZCBieXRlcyB3aXRob3V0IHJlc29ydGluZyB0byBmdWxsLXBhZ2UNCmltYWdlcyBp biB0aGUgY29tbW9uIHBhdGhzLiAgQSBSZWxhdGlvbi1mcmVlIGxheW91dCByb3V0aW5lLA0KX2J0 X3NwbGl0X2xlYWZfbGF5b3V0KCksIHRvZ2V0aGVyIHdpdGggYSBzaW5nbGUgaXRlbS1jb2xsZWN0 aW9uIHJvdXRpbmUsDQpfYnRfc3BsaXRfbGVhZl9jb2xsZWN0KCksIGFyZSBzaGFyZWQgYnkgdGhl IHByaW1hcnkgKF9idF9zcGxpdCkgYW5kIHJlZG8NCihidHJlZV94bG9nX3NwbGl0KSBzbyBib3Ro IGRlcml2ZSB0aGUgc2FtZSBwbGFpbiBpdGVtIHNlcXVlbmNlIGFuZCBjb2RlDQppdCBhZ2FpbnN0 IHRoZSBzYW1lIGxvZ2dlZCBwcmVmaXgsIGVtaXR0aW5nIGlkZW50aWNhbCBieXRlcy4gIEFuDQpp bi1wbGFjZSBpbnNlcnQgbG9ncyB0aGUgY29kZWQgdHVwbGU7IGEgc3BsaXQgbG9ncyBlYWNoIGhh bGYncyBjaG9zZW4NCnByZWZpeCBwbHVzIHRoZSByaWdodCBoYWxmJ3MgcGxhaW4gaXRlbXM7IGEg cHJlZml4IGRlZHVwbGljYXRpb24gbG9ncw0KdGhlIGNob3NlbiBwcmVmaXggcGx1cyB0aGUgZGVk dXBlZCBwbGFpbiBpdGVtcy4gIEEgYm91bmRlZCBmYWxsYmFjaw0KY2FycmllcyB0aGUgcGFnZSBh cyBhIGZvcmNlZCBmdWxsLXBhZ2UgaW1hZ2Ugb25seSB3aGVuIGEgcGF0aG9sb2dpY2FsbHkNCmNv bXByZXNzaWJsZSBwYWdlJ3MgcGxhaW4gcGF5bG9hZCB3b3VsZCBleGNlZWQgb25lIGJsb2NrOyBy ZWFsaXN0aWMgZGF0YQ0KbmV2ZXIgcmVhY2hlcyB0aGF0IHRocmVzaG9sZCwgc28gdGhlIG5idHJl ZS1wcmVmaXgtZm9yY2UtcmZwaSBpbmplY3Rpb24NCnBvaW50IGFuZCBhIGRlZGljYXRlZCB0ZXN0 IGluIHNyYy90ZXN0L21vZHVsZXMvbmJ0cmVlIGV4ZXJjaXNlIHRoZQ0KZmFsbGJhY2sgZGV0ZXJt aW5pc3RpY2FsbHkuDQoNCmFtY2hlY2sgZGVjb2RlcyBldmVyeSBsZWFmIGRhdGEgaXRlbSwgaW5j bHVkaW5nIHVuZGVyIGhlYXBhbGxpbmRleGVkLA0KYW5kIGNoZWNrcyB0aGUgQlRQX1BSRUZJWCBz dHJ1Y3R1cmFsIGludmFyaWFudHMgKGZsYWcgb25seSBvbiBsZWFmDQpwYWdlcywgYSB3ZWxsLWZv cm1lZCBQUkVGSVggaXRlbSBhdCB0aGUgZXhwZWN0ZWQgb2Zmc2V0KTsgaXRzIHRlc3Qgc3VpdGUN CmNvdmVycyBhIHByZWZpeC1jb21wcmVzc2VkIGluZGV4LiAgVGhlIGNyZWF0ZV9pbmRleCBkb2N1 bWVudGF0aW9uIGFuZA0KdGhlIG5idHJlZSBSRUFETUUgZGVzY3JpYmUgdGhlIHBhcmFtZXRlciwg dGhlIG9uLWRpc2sgZm9ybWF0LCBhbmQgdGhlDQpyZWxhdGlvbnNoaXAgdG8gZGVkdXBsaWNhdGlv bi4gIFRlc3RlZCB3aXRoIHdhbF9jb25zaXN0ZW5jeV9jaGVja2luZz1hbGwNCm9uIGEgcHJpbWFy eSBhbmQgYSBzdHJlYW1pbmcgc3RhbmRieSBhY3Jvc3MgaW5zZXJ0LCBzcGxpdCwgZGVkdXBsaWNh dGlvbg0KKGluY2x1ZGluZyB0aGUgZm9yY2VkLWltYWdlIGZhbGxiYWNrKSwgZGVsZXRlIGFuZCB2 YWN1dW0gd29ya2xvYWRzLA0KdGhyb3VnaCBjcmFzaCByZWNvdmVyeSwgYW5kIGFjcm9zcyBhIHBn X3VwZ3JhZGUgdGhhdCBjYXJyaWVzIGJvdGggcGFnZQ0KZm9ybWF0cy4NCi0tLQ0KIGNvbnRyaWIv YW1jaGVjay9leHBlY3RlZC9jaGVja19idHJlZS5vdXQgICAgICB8ICAyNyArDQogY29udHJpYi9h bWNoZWNrL3NxbC9jaGVja19idHJlZS5zcWwgICAgICAgICAgIHwgIDE4ICsNCiBjb250cmliL2Ft Y2hlY2svdmVyaWZ5X25idHJlZS5jICAgICAgICAgICAgICAgfCAxMjAgKystDQogZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbCAgICAgICAgICAgIHwgIDM1ICsNCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYyAgICAgICAgfCAgMTAgKw0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArDQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9SRUFETUUgICAgICAgICAgICAgIHwgIDk3ICsrKw0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbWVzb24uYnVpbGQgICAgICAgICB8ICAgMSArDQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRkZWR1cC5jICAgICAgICAgIHwgMjY5ICsrKysrLQ0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMgICAgICAgICB8IDM3OCArKysrKystLQ0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jICAgICAgICAgICB8ICAzMSArLQ0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cHJlZml4LmMgICAgICAgICB8IDgxNCArKysrKysr KysrKysrKysrKysNCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMgICAg ICAgfCAgMjMgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAgICAg ICAgfCAgIDYgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jICAgICAg ICAgfCAgIDMgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYyAgICAgICAg ICAgfCAgNTQgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNwbGl0bG9jLmMgICAg ICAgfCAgODQgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgICAgICAg ICAgfCAgIDQgKy0NCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYyAgICAgICAg ICAgfCAzMTMgKysrKysrLQ0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAg ICAgICAgICB8IDE0NyArKystDQogc3JjL2luY2x1ZGUvYWNjZXNzL25idHhsb2cuaCAgICAgICAg ICAgICAgICAgIHwgIDQ0ICstDQogc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvTWFrZWZpbGUgICAg ICAgICAgICAgIHwgICAzICstDQogLi4uL25idHJlZS9leHBlY3RlZC9uYnRyZWVfcHJlZml4X3Jm cGkub3V0ICAgIHwgIDc3ICsrDQogc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvbWVzb24uYnVpbGQg ICAgICAgICAgIHwgICAxICsNCiAuLi4vbW9kdWxlcy9uYnRyZWUvc3FsL25idHJlZV9wcmVmaXhf cmZwaS5zcWwgfCAgNTkgKysNCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVlX2luZGV4 Lm91dCAgICAgfCAyNTYgKysrKysrDQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfaW5kZXgu c3FsICAgICAgICAgIHwgMTY3ICsrKysNCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCAgICAgICAgICAgICAgfCAgIDIgKw0KIDI4IGZpbGVzIGNoYW5nZWQsIDI5MjkgaW5zZXJ0aW9u cygrKSwgMTE1IGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHByZWZpeC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21v ZHVsZXMvbmJ0cmVlL2V4cGVjdGVkL25idHJlZV9wcmVmaXhfcmZwaS5vdXQNCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvc3FsL25idHJlZV9wcmVmaXhfcmZwaS5z cWwNCg0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19idHJlZS5v dXQgYi9jb250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnRyZWUub3V0DQppbmRleCA0ZmNl ZTVkYTQ2My4uODk2ZDhiZmJiMGUgMTAwNjQ0DQotLS0gYS9jb250cmliL2FtY2hlY2svZXhwZWN0 ZWQvY2hlY2tfYnRyZWUub3V0DQorKysgYi9jb250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tf YnRyZWUub3V0DQpAQCAtMjgzLDYgKzI4MywzMiBAQCBTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ3Zh cmxlbmFfYnVnX2lkeCcsIHRydWUpOw0KICANCiAoMSByb3cpDQogDQorLS0gQ2hlY2sgYSBwcmVm aXgtY29tcHJlc3NlZCAocHJlZml4X2NvbXByZXNzaW9uPW9uKSBpbmRleDogdGhlIGRhdGEgaXRl bXMgYXJlDQorLS0gc3RvcmVkIGNvZGVkIGFnYWluc3QgYSBwZXItcGFnZSBQUkVGSVggaXRlbSwg c28gYW1jaGVjayBtdXN0IGRlY29kZSB0aGVtIGFuZA0KKy0tIHZhbGlkYXRlIHRoZSBCVFBfUFJF RklYIHN0cnVjdHVyYWwgaW52YXJpYW50cy4gIFVzZSBrZXlzIHdpdGggYSBsb25nIHNoYXJlZA0K Ky0tIGxlYWRpbmcgcHJlZml4IChzbyBwYWdlcyBhY3R1YWxseSBjb21wcmVzcykgcGx1cyBzb21l IHRoYXQgc2hhcmUgbm90aGluZyBhbmQNCistLSBhIE5VTEwgKHN0b3JlZCB1bmNvZGVkKSwgYW5k IGVub3VnaCByb3dzIHRvIGZvcmNlIHNwbGl0cyBhbmQgZGVkdXBsaWNhdGlvbi4NCitDUkVBVEUg VEFCTEUgcHJlZml4X2J1ZyAodiB0ZXh0IENPTExBVEUgIkMiKTsNCitJTlNFUlQgSU5UTyBwcmVm aXhfYnVnDQorICBTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8n IHx8IGxwYWQoZzo6dGV4dCwgOCwgJzAnKQ0KKyAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAw MDApIGc7DQorSU5TRVJUIElOVE8gcHJlZml4X2J1Zw0KKyAgU0VMRUNUICdodHRwczovL2V4YW1w bGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8fCBscGFkKChnICUgMTAwKTo6dGV4dCwgOCwgJzAn KQ0KKyAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApIGc7DQorSU5TRVJUIElOVE8gcHJl Zml4X2J1ZyBWQUxVRVMgKCd6enotbm8tc2hhcmVkLXByZWZpeCcpLCAoTlVMTCk7DQorQ1JFQVRF IElOREVYIHByZWZpeF9idWdfaWR4IE9OIHByZWZpeF9idWcgKHYpIFdJVEggKHByZWZpeF9jb21w cmVzc2lvbiA9IG9uKTsNCitTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ3ByZWZpeF9idWdfaWR4Jywg aGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSk7DQorIGJ0X2luZGV4X2NoZWNrIA0KKy0tLS0tLS0tLS0t LS0tLS0NCisgDQorKDEgcm93KQ0KKw0KK1NFTEVDVCBidF9pbmRleF9wYXJlbnRfY2hlY2soJ3By ZWZpeF9idWdfaWR4JywgaGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSwgcm9vdGRlc2NlbmQgPT4gdHJ1 ZSk7DQorIGJ0X2luZGV4X3BhcmVudF9jaGVjayANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K KyANCisoMSByb3cpDQorDQogLS0gY2xlYW51cA0KIERST1AgVEFCTEUgYnR0ZXN0X2E7DQogRFJP UCBUQUJMRSBidHRlc3RfYjsNCkBAIC0yOTQsMyArMzIwLDQgQEAgRFJPUCBUQUJMRSBidHRlc3Rf dW5pcXVlX251bGxzOw0KIERST1AgT1dORUQgQlkgcmVncmVzc19idHRlc3Rfcm9sZTsgLS0gcGVy bWlzc2lvbnMNCiBEUk9QIFJPTEUgcmVncmVzc19idHRlc3Rfcm9sZTsNCiBEUk9QIFRBQkxFIHZh cmxlbmFfYnVnOw0KK0RST1AgVEFCTEUgcHJlZml4X2J1ZzsNCmRpZmYgLS1naXQgYS9jb250cmli L2FtY2hlY2svc3FsL2NoZWNrX2J0cmVlLnNxbCBiL2NvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tf YnRyZWUuc3FsDQppbmRleCBhNTU4NTA4NWZhZC4uN2QyYzZhOGU4ZmYgMTAwNjQ0DQotLS0gYS9j b250cmliL2FtY2hlY2svc3FsL2NoZWNrX2J0cmVlLnNxbA0KKysrIGIvY29udHJpYi9hbWNoZWNr L3NxbC9jaGVja19idHJlZS5zcWwNCkBAIC0xODMsNiArMTgzLDIzIEBAIElOU0VSVCBJTlRPIHZh cmxlbmFfYnVnIFZBTFVFUyAocmVwZWF0KCdUZXN0JywgMjUwKSk7DQogQUxURVIgVEFCTEUgdmFy bGVuYV9idWcgQUxURVIgQ09MVU1OIHYgU0VUIFNUT1JBR0UgZXh0ZW5kZWQ7DQogU0VMRUNUIGJ0 X2luZGV4X2NoZWNrKCd2YXJsZW5hX2J1Z19pZHgnLCB0cnVlKTsNCiANCistLSBDaGVjayBhIHBy ZWZpeC1jb21wcmVzc2VkIChwcmVmaXhfY29tcHJlc3Npb249b24pIGluZGV4OiB0aGUgZGF0YSBp dGVtcyBhcmUNCistLSBzdG9yZWQgY29kZWQgYWdhaW5zdCBhIHBlci1wYWdlIFBSRUZJWCBpdGVt LCBzbyBhbWNoZWNrIG11c3QgZGVjb2RlIHRoZW0gYW5kDQorLS0gdmFsaWRhdGUgdGhlIEJUUF9Q UkVGSVggc3RydWN0dXJhbCBpbnZhcmlhbnRzLiAgVXNlIGtleXMgd2l0aCBhIGxvbmcgc2hhcmVk DQorLS0gbGVhZGluZyBwcmVmaXggKHNvIHBhZ2VzIGFjdHVhbGx5IGNvbXByZXNzKSBwbHVzIHNv bWUgdGhhdCBzaGFyZSBub3RoaW5nIGFuZA0KKy0tIGEgTlVMTCAoc3RvcmVkIHVuY29kZWQpLCBh bmQgZW5vdWdoIHJvd3MgdG8gZm9yY2Ugc3BsaXRzIGFuZCBkZWR1cGxpY2F0aW9uLg0KK0NSRUFU RSBUQUJMRSBwcmVmaXhfYnVnICh2IHRleHQgQ09MTEFURSAiQyIpOw0KK0lOU0VSVCBJTlRPIHBy ZWZpeF9idWcNCisgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNl LycgfHwgbHBhZChnOjp0ZXh0LCA4LCAnMCcpDQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAy MDAwMCkgZzsNCitJTlNFUlQgSU5UTyBwcmVmaXhfYnVnDQorICBTRUxFQ1QgJ2h0dHBzOi8vZXhh bXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAxMDApOjp0ZXh0LCA4LCAn MCcpDQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAyMDAwMCkgZzsNCitJTlNFUlQgSU5UTyBw cmVmaXhfYnVnIFZBTFVFUyAoJ3p6ei1uby1zaGFyZWQtcHJlZml4JyksIChOVUxMKTsNCitDUkVB VEUgSU5ERVggcHJlZml4X2J1Z19pZHggT04gcHJlZml4X2J1ZyAodikgV0lUSCAocHJlZml4X2Nv bXByZXNzaW9uID0gb24pOw0KK1NFTEVDVCBidF9pbmRleF9jaGVjaygncHJlZml4X2J1Z19pZHgn LCBoZWFwYWxsaW5kZXhlZCA9PiB0cnVlKTsNCitTRUxFQ1QgYnRfaW5kZXhfcGFyZW50X2NoZWNr KCdwcmVmaXhfYnVnX2lkeCcsIGhlYXBhbGxpbmRleGVkID0+IHRydWUsIHJvb3RkZXNjZW5kID0+ IHRydWUpOw0KKw0KIC0tIGNsZWFudXANCiBEUk9QIFRBQkxFIGJ0dGVzdF9hOw0KIERST1AgVEFC TEUgYnR0ZXN0X2I7DQpAQCAtMTk0LDMgKzIxMSw0IEBAIERST1AgVEFCTEUgYnR0ZXN0X3VuaXF1 ZV9udWxsczsNCiBEUk9QIE9XTkVEIEJZIHJlZ3Jlc3NfYnR0ZXN0X3JvbGU7IC0tIHBlcm1pc3Np b25zDQogRFJPUCBST0xFIHJlZ3Jlc3NfYnR0ZXN0X3JvbGU7DQogRFJPUCBUQUJMRSB2YXJsZW5h X2J1ZzsNCitEUk9QIFRBQkxFIHByZWZpeF9idWc7DQpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNo ZWNrL3ZlcmlmeV9uYnRyZWUuYyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMNCmlu ZGV4IDk3YzUxOWI0N2Y1Li4xODU1MTQ4M2U4OCAxMDA2NDQNCi0tLSBhL2NvbnRyaWIvYW1jaGVj ay92ZXJpZnlfbmJ0cmVlLmMNCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMN CkBAIC0xNTgsNyArMTU4LDEyIEBAIHR5cGVkZWYgc3RydWN0IEJ0cmVlTGFzdFZpc2libGVFbnRy eQ0KIAlPZmZzZXROdW1iZXIgb2Zmc2V0OwkJLyogT2Zmc2V0IG9uIGluZGV4IGJsb2NrICovDQog CWludAkJCXBvc3RpbmdJbmRleDsJLyogTnVtYmVyIGluIHRoZSBwb3N0aW5nIGxpc3QgKC0xIGZv cg0KIAkJCQkJCQkJICogbm9uLWRlZHVwbGljYXRlZCB0dXBsZXMpICovDQotCUl0ZW1Qb2ludGVy IHRpZDsJCQkvKiBIZWFwIHRpZCAqLw0KKwlJdGVtUG9pbnRlciB0aWQ7CQkJLyogSGVhcCB0aWQs IG9yIE5VTEw7IHBvaW50cyBhdCB0aWRkYXRhICovDQorCUl0ZW1Qb2ludGVyRGF0YSB0aWRkYXRh OwkvKiBPd24gc3RvcmFnZSBmb3IgKnRpZDogYSBwcmVmaXgtY29kZWQgbGVhZg0KKwkJCQkJCQkJ ICogdHVwbGUgaXMgZGVjb2RlZCBpbnRvIGEgc2NyYXRjaCBidWZmZXIgdGhhdA0KKwkJCQkJCQkJ ICogaXMgcmV1c2VkIG9uIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLCBzbyB3ZQ0KKwkJCQkJCQkJ ICogbXVzdCBrZWVwIHRoZSBoZWFwIFRJRCBieSB2YWx1ZSwgbm90IHBvaW50DQorCQkJCQkJCQkg KiBpbnRvIHRoZSAodHJhbnNpZW50KSBkZWNvZGVkIHR1cGxlICovDQogfSBCdHJlZUxhc3RWaXNp YmxlRW50cnk7DQogDQogLyoNCkBAIC05MzUsNyArOTQwLDggQEAgYnRfZW50cnlfdW5pcXVlX2No ZWNrKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCwNCiAJCQkJbFZpcy0+ Ymxrbm8gPSB0YXJnZXRibG9jazsNCiAJCQkJbFZpcy0+b2Zmc2V0ID0gb2Zmc2V0Ow0KIAkJCQls VmlzLT5wb3N0aW5nSW5kZXggPSBpOw0KLQkJCQlsVmlzLT50aWQgPSB0aWQ7DQorCQkJCUl0ZW1Q b2ludGVyQ29weSh0aWQsICZsVmlzLT50aWRkYXRhKTsNCisJCQkJbFZpcy0+dGlkID0gJmxWaXMt PnRpZGRhdGE7DQogCQkJfQ0KIAkJfQ0KIAl9DQpAQCAtOTYxLDcgKzk2Nyw4IEBAIGJ0X2VudHJ5 X3VuaXF1ZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXAsDQog DQogCQkJbFZpcy0+Ymxrbm8gPSB0YXJnZXRibG9jazsNCiAJCQlsVmlzLT5vZmZzZXQgPSBvZmZz ZXQ7DQotCQkJbFZpcy0+dGlkID0gdGlkOw0KKwkJCUl0ZW1Qb2ludGVyQ29weSh0aWQsICZsVmlz LT50aWRkYXRhKTsNCisJCQlsVmlzLT50aWQgPSAmbFZpcy0+dGlkZGF0YTsNCiAJCQlsVmlzLT5w b3N0aW5nSW5kZXggPSAtMTsNCiAJCX0NCiAJfQ0KQEAgLTEyMjksNiArMTIzNiwxNiBAQCBidF90 YXJnZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQ0KIAlPZmZzZXROdW1iZXIg bWF4Ow0KIAlCVFBhZ2VPcGFxdWUgdG9wYXF1ZTsNCiANCisJLyoNCisJICogU2NyYXRjaCBzcGFj ZSBmb3IgZGVjb2RpbmcgcHJlZml4LWNvZGVkIGxlYWYgdHVwbGVzIChfYnRfZ2V0aXRlbSkuDQor CSAqIGl0dXBidWYgYmFja3MgdGhlIGN1cnJlbnQgbG9vcCBpdGVtOyBjcm9zc2J1ZiBiYWNrcyB0 aGUgcmlnaHQgc2libGluZydzDQorCSAqIGZpcnN0IGl0ZW0gaW4gdGhlIGNyb3NzLXBhZ2UgdW5p cXVlIGNoZWNrLCB3aGljaCBtdXN0IGNvZXhpc3Qgd2l0aCB0aGUNCisJICogY3VycmVudCBpdGVt J3Mgc3RhdGUuICBBIHBpdm90LCBoaWdoIGtleSBvciBub24tcHJlZml4IGxlYWYgaXRlbSBpcw0K KwkgKiByZXR1cm5lZCBieSBfYnRfZ2V0aXRlbSB1bmNoYW5nZWQgKGJ1ZmZlciB1bnVzZWQpLg0K KwkgKi8NCisJQlRJdGVtQnVmCWl0dXBidWY7DQorCUJUSXRlbUJ1Zgljcm9zc2J1ZjsNCisNCiAJ LyogTGFzdCB2aXNpYmxlIGVudHJ5IGluZm8gZm9yIGNoZWNraW5nIGluZGV4ZXMgd2l0aCB1bmlx dWUgY29uc3RyYWludCAqLw0KIAlCdHJlZUxhc3RWaXNpYmxlRW50cnkgbFZpcyA9IHtJbnZhbGlk QmxvY2tOdW1iZXIsIEludmFsaWRPZmZzZXROdW1iZXIsIC0xLCBOVUxMfTsNCiANCkBAIC0xMjY2 LDYgKzEyODMsNTQgQEAgYnRfdGFyZ2V0X3BhZ2VfY2hlY2soQnRyZWVDaGVja1N0YXRlICpzdGF0 ZSkNCiAJCX0NCiAJfQ0KIA0KKwkvKg0KKwkgKiBTdHJ1Y3R1cmFsIGNoZWNrcyBmb3IgYSBwcmVm aXgtY29tcHJlc3NlZCAoQlRQX1BSRUZJWCkgbGVhZi4gIEEgcmVhZGVyDQorCSAqIHRydXN0cyB0 aGlzIGZvcm1hdCBpbXBsaWNpdGx5LCBzbyB2YWxpZGF0ZSB0aGUgcGFydHMgdGhhdCBhbiBvdXQt b2YtDQorCSAqIHBsYWNlIGRlY29kZSB3b3VsZCBvdGhlcndpc2UgcmVhZCBhcyBnYXJiYWdlOiB0 aGUgZmxhZyBhcHBlYXJzIG9ubHkgb24NCisJICogbGVhZiBwYWdlcywgYW5kIHRoZSBQUkVGSVgg aXRlbSBzaXRzIGF0IHRoZSBleHBlY3RlZCBvZmZzZXQgd2l0aCBhDQorCSAqIGxlbmd0aCBpbiB0 aGUgbGVnYWwgcmFuZ2UuICBUaGUgcGVyLWl0ZW0ga2V5L2NvbnRlbnQgY2hlY2tzIGJlbG93IHJ1 bg0KKwkgKiBvbiB0aGUgZGVjb2RlZCB0dXBsZSBmcm9tIF9idF9nZXRpdGVtLCB3aGljaCBmYWls cyBvbiBhIG1hbGZvcm1lZCBjb2RlZA0KKwkgKiBpdGVtLCBzbyBpdGVtLWxldmVsIGNvZGluZyBp cyBjb3ZlcmVkIHRoZXJlLg0KKwkgKi8NCisJaWYgKFBfSEFTUFJFRklYKHRvcGFxdWUpKQ0KKwl7 DQorCQlJdGVtSWQJCXBpdGVtaWQ7DQorCQlJbmRleFR1cGxlCXBpdHVwOw0KKwkJU2l6ZQkJcHJl Zml4bGVuOw0KKwkJT2Zmc2V0TnVtYmVyIHByZWZpeG9mZiA9IEJUUGFnZUdldFByZWZpeE9mZih0 b3BhcXVlKTsNCisNCisJCWlmICghUF9JU0xFQUYodG9wYXF1ZSkpDQorCQkJZXJlcG9ydChFUlJP UiwNCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5ERVhfQ09SUlVQVEVEKSwNCisJCQkJCSBlcnJt c2coInByZWZpeCBjb21wcmVzc2lvbiBmbGFnIHNldCBvbiBub24tbGVhZiBwYWdlIGluIGluZGV4 IFwiJXNcIiIsDQorCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5yZWwpKSwN CisJCQkJCSBlcnJkZXRhaWxfaW50ZXJuYWwoIkluZGV4IGJsb2NrPSV1IHBhZ2UgbHNuPSVYLyUw OFguIiwNCisJCQkJCQkJCQkJc3RhdGUtPnRhcmdldGJsb2NrLA0KKwkJCQkJCQkJCQlMU05fRk9S TUFUX0FSR1Moc3RhdGUtPnRhcmdldGxzbikpKSk7DQorDQorCQlpZiAocHJlZml4b2ZmID4gbWF4 KQ0KKwkJCWVyZXBvcnQoRVJST1IsDQorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJV UFRFRCksDQorCQkJCQkgZXJybXNnKCJwcmVmaXgtY29tcHJlc3NlZCBwYWdlIGhhcyBubyBQUkVG SVggaXRlbSBpbiBpbmRleCBcIiVzXCIiLA0KKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShzdGF0ZS0+cmVsKSksDQorCQkJCQkgZXJyZGV0YWlsX2ludGVybmFsKCJJbmRleCBibG9jaz0l dSBwcmVmaXggb2Zmc2V0PSV1IG1heCBvZmZzZXQ9JXUgcGFnZSBsc249JVgvJTA4WC4iLA0KKwkJ CQkJCQkJCQlzdGF0ZS0+dGFyZ2V0YmxvY2ssIHByZWZpeG9mZiwgbWF4LA0KKwkJCQkJCQkJCQlM U05fRk9STUFUX0FSR1Moc3RhdGUtPnRhcmdldGxzbikpKSk7DQorDQorCQlwaXRlbWlkID0gUGFn ZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHN0YXRlLT50YXJnZXRibG9jaywNCisJCQkJCQkJCQkg ICBzdGF0ZS0+dGFyZ2V0LCBwcmVmaXhvZmYpOw0KKwkJcGl0dXAgPSAoSW5kZXhUdXBsZSkgUGFn ZUdldEl0ZW0oc3RhdGUtPnRhcmdldCwgcGl0ZW1pZCk7DQorCQlwcmVmaXhsZW4gPSBJbmRleFR1 cGxlU2l6ZShwaXR1cCkgLSBzaXplb2YoSW5kZXhUdXBsZURhdGEpOw0KKwkJaWYgKHByZWZpeGxl biA8IDEgfHwgcHJlZml4bGVuID4gQlRSRUVfUFJFRklYX01BWCkNCisJCQllcmVwb3J0KEVSUk9S LA0KKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQpLA0KKwkJCQkJIGVycm1z ZygiUFJFRklYIGl0ZW0gaGFzIGludmFsaWQgbGVuZ3RoIGluIGluZGV4IFwiJXNcIiIsDQorCQkJ CQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5yZWwpKSwNCisJCQkJCSBlcnJkZXRh aWxfaW50ZXJuYWwoIkluZGV4IGJsb2NrPSV1IHByZWZpeCBsZW5ndGg9JXp1IHBhZ2UgbHNuPSVY LyUwOFguIiwNCisJCQkJCQkJCQkJc3RhdGUtPnRhcmdldGJsb2NrLCBwcmVmaXhsZW4sDQorCQkJ CQkJCQkJCUxTTl9GT1JNQVRfQVJHUyhzdGF0ZS0+dGFyZ2V0bHNuKSkpKTsNCisJfQ0KKw0KIAkv Kg0KIAkgKiBMb29wIG92ZXIgcGFnZSBpdGVtcywgc3RhcnRpbmcgZnJvbSBmaXJzdCBub24taGln aGtleSBpdGVtLCBub3QgaGlnaA0KIAkgKiBrZXkgKGlmIGFueSkuICBNb3N0IHRlc3RzIGFyZSBu b3QgcGVyZm9ybWVkIGZvciB0aGUgIm5lZ2F0aXZlIGluZmluaXR5Ig0KQEAgLTEyOTMsOCArMTM1 OCwxNSBAQCBidF90YXJnZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQ0KIA0K IAkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHN0YXRlLT50YXJnZXRibG9j aywNCiAJCQkJCQkJCQkgIHN0YXRlLT50YXJnZXQsIG9mZnNldCk7DQotCQlpdHVwID0gKEluZGV4 VHVwbGUpIFBhZ2VHZXRJdGVtKHN0YXRlLT50YXJnZXQsIGl0ZW1pZCk7DQotCQl0dXBzaXplID0g SW5kZXhUdXBsZVNpemUoaXR1cCk7DQorDQorCQkvKg0KKwkJICogbHBfbGVuIGFuZCB0aGUgdHVw bGUgc2l6ZSBsaW1pdCBhcmUgcGh5c2ljYWwgcHJvcGVydGllcyBvZiB0aGUgaXRlbQ0KKwkJICog YXMgc3RvcmVkLCBzbyB0aGV5IGFyZSBjaGVja2VkIGFnYWluc3QgdGhlIHJhdyBvbi1wYWdlIHR1 cGxlIChjb2RlZCwNCisJCSAqIG9uIGEgQlRQX1BSRUZJWCBsZWFmKS4gIEV2ZXJ5IGtleS9jb250 ZW50IGNoZWNrIGJlbG93IGluc3RlYWQgdXNlcw0KKwkJICogdGhlIGRlY29kZWQgdHVwbGUgcmV0 dXJuZWQgYnkgX2J0X2dldGl0ZW0uDQorCQkgKi8NCisJCXR1cHNpemUgPSBJbmRleFR1cGxlU2l6 ZSgoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0oc3RhdGUtPnRhcmdldCwgaXRlbWlkKSk7DQorCQlp dHVwID0gX2J0X2dldGl0ZW0oc3RhdGUtPnRhcmdldCwgb2Zmc2V0LCAmaXR1cGJ1Zik7DQogDQog CQkvKg0KIAkJICogbHBfbGVuIHNob3VsZCBtYXRjaCB0aGUgSW5kZXhUdXBsZSByZXBvcnRlZCBs ZW5ndGggZXhhY3RseSwgc2luY2UNCkBAIC0xNjA2LDcgKzE2NzgsNyBAQCBidF90YXJnZXRfcGFn ZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQ0KIAkJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVt SWRDYXJlZnVsKHN0YXRlLCBzdGF0ZS0+dGFyZ2V0YmxvY2ssDQogCQkJCQkJCQkJCSAgc3RhdGUt PnRhcmdldCwNCiAJCQkJCQkJCQkJICBPZmZzZXROdW1iZXJOZXh0KG9mZnNldCkpOw0KLQkJCWl0 dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0oc3RhdGUtPnRhcmdldCwgaXRlbWlkKTsNCisJ CQlpdHVwID0gX2J0X2dldGl0ZW0oc3RhdGUtPnRhcmdldCwgT2Zmc2V0TnVtYmVyTmV4dChvZmZz ZXQpLCAmaXR1cGJ1Zik7DQogCQkJdGlkID0gQlRyZWVUdXBsZUdldFBvaW50c1RvVElEKGl0dXAp Ow0KIAkJCW5odGlkID0gcHNwcmludGYoIigldSwldSkiLA0KIAkJCQkJCQkgSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlck5vQ2hlY2sodGlkKSwNCkBAIC0xNzkzLDcgKzE4NjUsNyBAQCBidF90YXJn ZXRfcGFnZV9jaGVjayhCdHJlZUNoZWNrU3RhdGUgKnN0YXRlKQ0KIAkJCQkJaXRlbWlkID0gUGFn ZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHJpZ2h0YmxvY2tfbnVtYmVyLA0KIAkJCQkJCQkJCQkJ CSAgcmlnaHRwYWdlLA0KIAkJCQkJCQkJCQkJCSAgcmlnaHRmaXJzdG9mZnNldCk7DQotCQkJCQlp dHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHJpZ2h0cGFnZSwgaXRlbWlkKTsNCisJCQkJ CWl0dXAgPSBfYnRfZ2V0aXRlbShyaWdodHBhZ2UsIHJpZ2h0Zmlyc3RvZmZzZXQsICZjcm9zc2J1 Zik7DQogDQogCQkJCQlidF9lbnRyeV91bmlxdWVfY2hlY2soc3RhdGUsIGl0dXAsIHJpZ2h0Ymxv Y2tfbnVtYmVyLCByaWdodGZpcnN0b2Zmc2V0LCAmbFZpcyk7DQogDQpAQCAtMTg1Nyw2ICsxOTI5 LDggQEAgYnRfcmlnaHRfcGFnZV9jaGVja19zY2Fua2V5KEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUs IE9mZnNldE51bWJlciAqcmlnaHRmaXJzdG9mZnMNCiAJQmxvY2tOdW1iZXIgdGFyZ2V0bmV4dDsN CiAJUGFnZQkJcmlnaHRwYWdlOw0KIAlPZmZzZXROdW1iZXIgbmxpbmU7DQorCU9mZnNldE51bWJl ciByaWdodG9mZnNldDsNCisJQlRJdGVtQnVmCWZpcnN0YnVmOw0KIA0KIAkvKiBEZXRlcm1pbmUg dGFyZ2V0J3MgbmV4dCBibG9jayBudW1iZXIgKi8NCiAJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVl KHN0YXRlLT50YXJnZXQpOw0KQEAgLTIwMTYsNiArMjA5MCw3IEBAIGJ0X3JpZ2h0X3BhZ2VfY2hl Y2tfc2NhbmtleShCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBPZmZzZXROdW1iZXIgKnJpZ2h0Zmly c3RvZmZzDQogCQkvKiBSZXR1cm4gZmlyc3QgZGF0YSBpdGVtIChpZiBhbnkpICovDQogCQlyaWdo dGl0ZW0gPSBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSwgdGFyZ2V0bmV4dCwgcmlnaHRwYWdl LA0KIAkJCQkJCQkJCQkgUF9GSVJTVERBVEFLRVkob3BhcXVlKSk7DQorCQlyaWdodG9mZnNldCA9 IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7DQogCQkqcmlnaHRmaXJzdG9mZnNldCA9IFBfRklSU1RE QVRBS0VZKG9wYXF1ZSk7DQogCX0NCiAJZWxzZSBpZiAoIVBfSVNMRUFGKG9wYXF1ZSkgJiYNCkBA IC0yMDI3LDYgKzIxMDIsNyBAQCBidF9yaWdodF9wYWdlX2NoZWNrX3NjYW5rZXkoQnRyZWVDaGVj a1N0YXRlICpzdGF0ZSwgT2Zmc2V0TnVtYmVyICpyaWdodGZpcnN0b2Zmcw0KIAkJICovDQogCQly aWdodGl0ZW0gPSBQYWdlR2V0SXRlbUlkQ2FyZWZ1bChzdGF0ZSwgdGFyZ2V0bmV4dCwgcmlnaHRw YWdlLA0KIAkJCQkJCQkJCQkgT2Zmc2V0TnVtYmVyTmV4dChQX0ZJUlNUREFUQUtFWShvcGFxdWUp KSk7DQorCQlyaWdodG9mZnNldCA9IE9mZnNldE51bWJlck5leHQoUF9GSVJTVERBVEFLRVkob3Bh cXVlKSk7DQogCX0NCiAJZWxzZQ0KIAl7DQpAQCAtMjA0Niw5ICsyMTIyLDE5IEBAIGJ0X3JpZ2h0 X3BhZ2VfY2hlY2tfc2NhbmtleShCdHJlZUNoZWNrU3RhdGUgKnN0YXRlLCBPZmZzZXROdW1iZXIg KnJpZ2h0Zmlyc3RvZmZzDQogCS8qDQogCSAqIFJldHVybiBmaXJzdCByZWFsIGl0ZW0gc2Nhbmtl eS4gIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiByaWdodCBwYWdlDQogCSAqIG1lbW9yeSByZW1h aW5pbmcgYWxsb2NhdGVkLg0KKwkgKg0KKwkgKiBPbiBhIEJUUF9QUkVGSVggbGVhZiB0aGUgZmly c3QgZGF0YSBpdGVtIGlzIHByZWZpeC1jb2RlZCwgc28gZGVjb2RlIGl0Ow0KKwkgKiBiZWNhdXNl IHRoZSByZXR1cm5lZCBzY2Fua2V5IChidWlsdCBieSBfYnRfbWtzY2Fua2V5KSByZWZlcmVuY2Vz IHRoZQ0KKwkgKiB0dXBsZSdzIG93biBzdG9yYWdlLCBhbmQgX2J0X2dldGl0ZW0gZGVjb2RlcyBp bnRvIGEgYnVmZmVyIGxvY2FsIHRvDQorCSAqIHRoaXMgZnVuY3Rpb24sIGNvcHkgdGhlIGRlY29k ZWQgdHVwbGUgaW50byB0aGUgY2FsbGVyLXJlc2V0IG1lbW9yeQ0KKwkgKiBjb250ZXh0IHNvIGl0 IG91dGxpdmVzIHRoZSBjYWxsLiAgQSBwaXZvdCBvciBub24tcHJlZml4IGl0ZW0gaXMNCisJICog cmV0dXJuZWQgYnkgX2J0X2dldGl0ZW0gdW5jaGFuZ2VkIChpdCBsaXZlcyBpbiB0aGUgcmlnaHQg cGFnZSwgd2hpY2gNCisJICogcmVtYWlucyBhbGxvY2F0ZWQpLCBzbyBubyBjb3B5IGlzIG5lZWRl ZCB0aGVuLg0KIAkgKi8NCi0JZmlyc3RpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHJp Z2h0cGFnZSwgcmlnaHRpdGVtKTsNCi0JcmV0dXJuIGJ0X21rc2NhbmtleV9waXZvdHNlYXJjaChz dGF0ZS0+cmVsLCBmaXJzdGl0dXApOw0KKwlmaXJzdGl0dXAgPSBfYnRfZ2V0aXRlbShyaWdodHBh Z2UsIHJpZ2h0b2Zmc2V0LCAmZmlyc3RidWYpOw0KKwlpZiAoZmlyc3RpdHVwID09IChJbmRleFR1 cGxlKSBQYWdlR2V0SXRlbShyaWdodHBhZ2UsIHJpZ2h0aXRlbSkpDQorCQlyZXR1cm4gYnRfbWtz Y2Fua2V5X3Bpdm90c2VhcmNoKHN0YXRlLT5yZWwsIGZpcnN0aXR1cCk7DQorCXJldHVybiBidF9t a3NjYW5rZXlfcGl2b3RzZWFyY2goc3RhdGUtPnJlbCwgQ29weUluZGV4VHVwbGUoZmlyc3RpdHVw KSk7DQogfQ0KIA0KIC8qDQpAQCAtMzA5NSwxNCArMzE4MSwxMyBAQCBzdGF0aWMgaW5saW5lIGJv b2wNCiBpbnZhcmlhbnRfbF9vZmZzZXQoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgQlRTY2FuSW5z ZXJ0IGtleSwNCiAJCQkJICAgT2Zmc2V0TnVtYmVyIHVwcGVyYm91bmQpDQogew0KLQlJdGVtSWQJ CWl0ZW1pZDsNCiAJaW50MzIJCWNtcDsNCiANCiAJQXNzZXJ0KCFrZXktPm5leHRrZXkgJiYga2V5 LT5iYWNrd2FyZCk7DQogDQogCS8qIFZlcmlmeSBsaW5lIHBvaW50ZXIgYmVmb3JlIGNoZWNraW5n IHR1cGxlICovDQotCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWRDYXJlZnVsKHN0YXRlLCBzdGF0ZS0+ dGFyZ2V0YmxvY2ssIHN0YXRlLT50YXJnZXQsDQotCQkJCQkJCQkgIHVwcGVyYm91bmQpOw0KKwko dm9pZCkgUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIHN0YXRlLT50YXJnZXRibG9jaywgc3Rh dGUtPnRhcmdldCwNCisJCQkJCQkJCXVwcGVyYm91bmQpOw0KIAkvKiBwZ191cGdyYWRlJ2QgaW5k ZXhlcyBtYXkgbGVnYWxseSBoYXZlIGVxdWFsIHNpYmxpbmcgdHVwbGVzICovDQogCWlmICgha2V5 LT5oZWFwa2V5c3BhY2UpDQogCQlyZXR1cm4gaW52YXJpYW50X2xlcV9vZmZzZXQoc3RhdGUsIGtl eSwgdXBwZXJib3VuZCk7DQpAQCAtMzEyMiwxMSArMzIwNywxMiBAQCBpbnZhcmlhbnRfbF9vZmZz ZXQoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgQlRTY2FuSW5zZXJ0IGtleSwNCiAJew0KIAkJQlRQ YWdlT3BhcXVlIHRvcGFxdWU7DQogCQlJbmRleFR1cGxlCXJpdHVwOw0KKwkJQlRJdGVtQnVmCXJp dHVwYnVmOw0KIAkJaW50CQkJdXBwbmtleWF0dHM7DQogCQlJdGVtUG9pbnRlciByaGVhcHRpZDsN CiAJCWJvb2wJCW5vbnBpdm90Ow0KIA0KLQkJcml0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0 ZW0oc3RhdGUtPnRhcmdldCwgaXRlbWlkKTsNCisJCXJpdHVwID0gX2J0X2dldGl0ZW0oc3RhdGUt PnRhcmdldCwgdXBwZXJib3VuZCwgJnJpdHVwYnVmKTsNCiAJCXRvcGFxdWUgPSBCVFBhZ2VHZXRP cGFxdWUoc3RhdGUtPnRhcmdldCk7DQogCQlub25waXZvdCA9IFBfSVNMRUFGKHRvcGFxdWUpICYm IHVwcGVyYm91bmQgPj0gUF9GSVJTVERBVEFLRVkodG9wYXF1ZSk7DQogDQpAQCAtMzIxOCwxNCAr MzMwNCwxMyBAQCBpbnZhcmlhbnRfbF9ub250YXJnZXRfb2Zmc2V0KEJ0cmVlQ2hlY2tTdGF0ZSAq c3RhdGUsIEJUU2Nhbkluc2VydCBrZXksDQogCQkJCQkJCSBCbG9ja051bWJlciBub250YXJnZXRi bG9jaywgUGFnZSBub250YXJnZXQsDQogCQkJCQkJCSBPZmZzZXROdW1iZXIgdXBwZXJib3VuZCkN CiB7DQotCUl0ZW1JZAkJaXRlbWlkOw0KIAlpbnQzMgkJY21wOw0KIA0KIAlBc3NlcnQoIWtleS0+ bmV4dGtleSAmJiBrZXktPmJhY2t3YXJkKTsNCiANCiAJLyogVmVyaWZ5IGxpbmUgcG9pbnRlciBi ZWZvcmUgY2hlY2tpbmcgdHVwbGUgKi8NCi0JaXRlbWlkID0gUGFnZUdldEl0ZW1JZENhcmVmdWwo c3RhdGUsIG5vbnRhcmdldGJsb2NrLCBub250YXJnZXQsDQotCQkJCQkJCQkgIHVwcGVyYm91bmQp Ow0KKwkodm9pZCkgUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUsIG5vbnRhcmdldGJsb2NrLCBu b250YXJnZXQsDQorCQkJCQkJCQl1cHBlcmJvdW5kKTsNCiAJY21wID0gX2J0X2NvbXBhcmUoc3Rh dGUtPnJlbCwga2V5LCBub250YXJnZXQsIHVwcGVyYm91bmQpOw0KIA0KIAkvKiBwZ191cGdyYWRl J2QgaW5kZXhlcyBtYXkgbGVnYWxseSBoYXZlIGVxdWFsIHNpYmxpbmcgdHVwbGVzICovDQpAQCAt MzIzNiwxMiArMzMyMSwxMyBAQCBpbnZhcmlhbnRfbF9ub250YXJnZXRfb2Zmc2V0KEJ0cmVlQ2hl Y2tTdGF0ZSAqc3RhdGUsIEJUU2Nhbkluc2VydCBrZXksDQogCWlmIChjbXAgPT0gMCkNCiAJew0K IAkJSW5kZXhUdXBsZQljaGlsZDsNCisJCUJUSXRlbUJ1ZgljaGlsZGJ1ZjsNCiAJCWludAkJCXVw cG5rZXlhdHRzOw0KIAkJSXRlbVBvaW50ZXIgY2hpbGRoZWFwdGlkOw0KIAkJQlRQYWdlT3BhcXVl IGNvcGFxdWU7DQogCQlib29sCQlub25waXZvdDsNCiANCi0JCWNoaWxkID0gKEluZGV4VHVwbGUp IFBhZ2VHZXRJdGVtKG5vbnRhcmdldCwgaXRlbWlkKTsNCisJCWNoaWxkID0gX2J0X2dldGl0ZW0o bm9udGFyZ2V0LCB1cHBlcmJvdW5kLCAmY2hpbGRidWYpOw0KIAkJY29wYXF1ZSA9IEJUUGFnZUdl dE9wYXF1ZShub250YXJnZXQpOw0KIAkJbm9ucGl2b3QgPSBQX0lTTEVBRihjb3BhcXVlKSAmJiB1 cHBlcmJvdW5kID49IFBfRklSU1REQVRBS0VZKGNvcGFxdWUpOw0KIA0KZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9pbmRleC5zZ21sDQppbmRleCBiYjc1MDVkMTcxYi4uN2U2Njc2NWMzZDMgMTAwNjQ0DQotLS0g YS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sDQorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV9pbmRleC5zZ21sDQpAQCAtNDc3LDYgKzQ3Nyw0MSBAQCBDUkVBVEUgWyBVTklR VUUgXSBJTkRFWCBbIENPTkNVUlJFTlRMWSBdIFsgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxhY2Vh YmxlIGNsYXNzPQ0KICAgICA8L25vdGU+DQogICAgIDwvbGlzdGl0ZW0+DQogICAgPC92YXJsaXN0 ZW50cnk+DQorDQorICAgPHZhcmxpc3RlbnRyeSBpZD0iaW5kZXgtcmVsb3B0aW9uLXByZWZpeC1j b21wcmVzc2lvbiIgeHJlZmxhYmVsPSJwcmVmaXhfY29tcHJlc3Npb24iPg0KKyAgICA8dGVybT48 bGl0ZXJhbD5wcmVmaXhfY29tcHJlc3Npb248L2xpdGVyYWw+ICg8dHlwZT5ib29sZWFuPC90eXBl PikNCisgICAgIDxpbmRleHRlcm0+DQorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cHJlZml4X2Nv bXByZXNzaW9uPC92YXJuYW1lPiBzdG9yYWdlIHBhcmFtZXRlcjwvcHJpbWFyeT4NCisgICAgIDwv aW5kZXh0ZXJtPg0KKyAgICA8L3Rlcm0+DQorICAgIDxsaXN0aXRlbT4NCisgICAgPHBhcmE+DQor ICAgICAgQ29udHJvbHMgbGVhZiBrZXkgcHJlZml4IGNvbXByZXNzaW9uLiAgV2hlbiBzZXQgdG8N CisgICAgICA8bGl0ZXJhbD5PTjwvbGl0ZXJhbD4sIGFuZCB0aGUgaW5kZXgncyBmaXJzdCBrZXkg Y29sdW1uIGlzIG9mIGENCisgICAgICB2YXJpYWJsZS1sZW5ndGggdHlwZSwgYSBsZWFmIHBhZ2Ug bWF5IHN0b3JlIGEgc2hhcmVkIHByZWZpeCBvZiB0aGF0DQorICAgICAgY29sdW1uIG9uY2UgYW5k IHJlY29yZCBvbmx5IGVhY2ggdHVwbGUncyB1bnNoYXJlZCByZW1haW5kZXIsIHdoaWNoIGNhbg0K KyAgICAgIHN1YnN0YW50aWFsbHkgc2hyaW5rIGluZGV4ZXMgb24ga2V5cyB0aGF0IHNoYXJlIGxv bmcgbGVhZGluZyBieXRlcw0KKyAgICAgIChmb3IgZXhhbXBsZSBVUkxzIG9yIDx0eXBlPmpzb25i PC90eXBlPiBrZXlzIHdpdGggY29tbW9uIHBhdGhzKS4gIFNldA0KKyAgICAgIHRvIDxsaXRlcmFs Pk9OPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5PRkY8L2xpdGVyYWw+IHRvIGVuYWJsZSBvciBkaXNh YmxlDQorICAgICAgdGhlIG9wdGltaXphdGlvbi4gIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPk9G RjwvbGl0ZXJhbD4uDQorICAgIDwvcGFyYT4NCisNCisgICAgPG5vdGU+DQorICAgICA8cGFyYT4N CisgICAgICBQcmVmaXggY29tcHJlc3Npb24gb25seSBjaGFuZ2VzIGhvdyBrZXlzIGFyZSBzdG9y ZWQ7IGNvbXBhcmlzb25zIGFsd2F5cw0KKyAgICAgIHNlZSB0aGUgb3JpZ2luYWwga2V5IHZhbHVl cywgc28gZXZlcnkgY29sbGF0aW9uIGFuZCBvcGVyYXRvciBjbGFzcw0KKyAgICAgIGJlaGF2ZXMg aWRlbnRpY2FsbHkgd2l0aCBpdCBvbiBvciBvZmYuICBBIGxlYWYgYWRvcHRzIGEgcHJlZml4IG9u bHkgd2hlbg0KKyAgICAgIGl0IGlzIHdyaXR0ZW4gYXMgYSB3aG9sZSAoZHVyaW5nIGFuIGluZGV4 IGJ1aWxkLCBvciBlaXRoZXIgaGFsZiBvZiBhDQorICAgICAgcGFnZSBzcGxpdCksIHNvIHR1cm5p bmcgPGxpdGVyYWw+cHJlZml4X2NvbXByZXNzaW9uPC9saXRlcmFsPiBvbiBvciBvZmYNCisgICAg ICB2aWEgPGNvbW1hbmQ+QUxURVIgSU5ERVg8L2NvbW1hbmQ+IGRvZXMgbm90IHJld3JpdGUgdGhl IGluZGV4OiBleGlzdGluZw0KKyAgICAgIHBhZ2VzIGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGFuZCBh cmUgY29udmVydGVkIHRoZSBuZXh0IHRpbWUgdGhleSBhcmUNCisgICAgICB3cml0dGVuIHdob2xl LiAgTm8gPGNvbW1hbmQ+UkVJTkRFWDwvY29tbWFuZD4gaXMgcmVxdWlyZWQsIGFuZCBpbmRleGVz DQorICAgICAgdXBncmFkZWQgd2l0aCA8YXBwbGljYXRpb24+cGdfdXBncmFkZTwvYXBwbGljYXRp b24+IGtlZXAgd29ya2luZw0KKyAgICAgIHVuY2hhbmdlZC4NCisgICAgIDwvcGFyYT4NCisgICAg PC9ub3RlPg0KKyAgICA8L2xpc3RpdGVtPg0KKyAgIDwvdmFybGlzdGVudHJ5Pg0KICAgIDwvdmFy aWFibGVsaXN0Pg0KIA0KICAgIDxwYXJhPg0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vcmVsb3B0aW9ucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRp b25zLmMNCmluZGV4IGVhOWEwNDE3OTA5Li5iZTFmY2Q5YTE1YiAxMDA2NDQNCi0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jDQorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvY29tbW9uL3JlbG9wdGlvbnMuYw0KQEAgLTE1Myw2ICsxNTMsMTYgQEAgc3RhdGljIHJlbG9w dF9ib29sIGJvb2xSZWxPcHRzW10gPQ0KIAkJfSwNCiAJCXRydWUNCiAJfSwNCisJew0KKwkJew0K KwkJCSJwcmVmaXhfY29tcHJlc3Npb24iLA0KKwkJCSJFbmFibGVzIGxlYWYga2V5IHByZWZpeCBj b21wcmVzc2lvbiBmb3IgdGhpcyBidHJlZSBpbmRleCIsDQorCQkJUkVMT1BUX0tJTkRfQlRSRUUs DQorCQkJU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCS8qIHNpbmNlIGl0IGFwcGxpZXMgb25seSB0 byBsYXRlcg0KKwkJCQkJCQkJCQkgKiB3aG9sZS1wYWdlIHdyaXRlcyAqLw0KKwkJfSwNCisJCWZh bHNlDQorCX0sDQogCS8qIGxpc3QgdGVybWluYXRvciAqLw0KIAl7e05VTEx9fQ0KIH07DQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUNCmluZGV4IDBkYWY2NDBhZjk2Li4wMDQ0ZDc3ZjU0OCAx MDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUNCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvTWFrZWZpbGUNCkBAIC0xOCw2ICsxOCw3IEBAIE9CSlMg PSBcDQogCW5idGluc2VydC5vIFwNCiAJbmJ0cGFnZS5vIFwNCiAJbmJ0cHJlcHJvY2Vzc2tleXMu byBcDQorCW5idHByZWZpeC5vIFwNCiAJbmJ0cmVhZHBhZ2UubyBcDQogCW5idHJlZS5vIFwNCiAJ bmJ0c2VhcmNoLm8gXA0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVB RE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUNCmluZGV4IGYzODY3NTQ3Njkx Li41OTZlNTk1ZjIwYiAxMDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVB RE1FDQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQ0KQEAgLTEwODEsMyAr MTA4MSwxMDAgQEAgaXRlbSBpcyBpcnJlbGV2YW50LCBhbmQgbmVlZCBub3QgYmUgc3RvcmVkIGF0 IGFsbC4gIFRoaXMgYXJyYW5nZW1lbnQNCiBjb3JyZXNwb25kcyB0byB0aGUgZmFjdCB0aGF0IGFu IEwmWSBub24tbGVhZiBwYWdlIGhhcyBvbmUgbW9yZSBwb2ludGVyDQogdGhhbiBrZXkuICBTdWZm aXggdHJ1bmNhdGlvbidzIG5lZ2F0aXZlIGluZmluaXR5IGF0dHJpYnV0ZXMgYmVoYXZlIGluDQog dGhlIHNhbWUgd2F5Lg0KKw0KK05vdGVzIGFib3V0IGxlYWYga2V5IHByZWZpeCBjb21wcmVzc2lv bg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCitXaXRoIHRo ZSBwcmVmaXhfY29tcHJlc3Npb24gc3RvcmFnZSBwYXJhbWV0ZXIgKGRlZmF1bHQgb2ZmKSBhIGxl YWYgcGFnZSBtYXkNCitmcm9udC1jb2RlIHRoZSBmaXJzdCBrZXkgY29sdW1uIG9mIGVhY2ggb2Yg aXRzIGRhdGEgdHVwbGVzIGFnYWluc3QgYSBwZXItcGFnZQ0KK3ByZWZpeCwgd2hpY2ggc2hyaW5r cyBpbmRleGVzIG9uIGtleXMgdGhhdCBzaGFyZSBsb25nIGxlYWRpbmcgYnl0ZXMgKFVSTHMsDQor anNvbmIga2V5cyB3aXRoIGNvbW1vbiBwYXRocywgemVyby1wYWRkZWQgY29kZXMpLiAgTGlrZSBk ZWR1cGxpY2F0aW9uLCB0aGlzDQorYWx0ZXJzIHRoZSBwaHlzaWNhbCByZXByZXNlbnRhdGlvbiBv ZiB0dXBsZXMgd2l0aG91dCBjaGFuZ2luZyB0aGUgbG9naWNhbA0KK2NvbnRlbnRzIG9mIHRoZSBp bmRleCwgYW5kIGNvbXBhcmlzb25zIGFsd2F5cyBvcGVyYXRlIG9uIHRoZSByZWNvbnN0cnVjdGVk DQorb3JpZ2luYWwgdmFsdWVzLCBzbyBldmVyeSBjb2xsYXRpb24gYW5kIG9wZXJhdG9yIGNsYXNz IGlzIHVuYWZmZWN0ZWQuDQorDQorQSBsZWFmIHRoYXQgdXNlcyB0aGUgdGVjaG5pcXVlIGNhcnJp ZXMgdGhlIEJUUF9QUkVGSVggcGFnZSBmbGFnIGFuZCBvbmUgZXh0cmENCitpdGVtLCB0aGUgUFJF RklYIGl0ZW0sIGF0IHRoZSBvZmZzZXQgd2hlcmUgaXRzIGZpcnN0IGRhdGEgaXRlbSB3b3VsZCBv dGhlcndpc2UNCitiZSAoUF9ISUtFWSBvbiBhIHJpZ2h0bW9zdCBwYWdlLCBQX0ZJUlNUS0VZIG90 aGVyd2lzZSk7IGRhdGEgaXRlbXMgYmVnaW4gb25lDQorb2Zmc2V0IGxhdGVyLCB3aGljaCBQX0ZJ UlNUREFUQUtFWSgpIGFjY291bnRzIGZvci4gIFRoZSBQUkVGSVggaXRlbSBpcyBhbg0KK0luZGV4 VHVwbGVEYXRhIGhlYWRlciBmb2xsb3dlZCBieSAxLi5CVFJFRV9QUkVGSVhfTUFYIHByZWZpeCBi eXRlcywgc2hhcGVkIHNvDQordGhhdCBjb2RlIHdoaWNoIHdhbGtzIGEgcGFnZSdzIGl0ZW1zIGJ5 IEluZGV4VHVwbGVTaXplIChzdWNoIGFzDQorX2J0X3Jlc3RvcmVfcGFnZSkgc3RlcHMgb3ZlciBp dC4gIE9uIHN1Y2ggYSBwYWdlIGV2ZXJ5IG5vbi1waXZvdCB0dXBsZSAocGxhaW4NCitvciBwb3N0 aW5nKSB3aG9zZSBmaXJzdCBrZXkgY29sdW1uIGlzIG5vdCBOVUxMIHN0b3JlcyB0aGF0IGNvbHVt biBhcyBhIHZhcmxlbmENCit3aG9zZSBwYXlsb2FkIGJlZ2lucyB3aXRoIGEgb25lLWJ5dGUgY291 bnQgb2YgaG93IG1hbnkgbGVhZGluZyBieXRlcyBpdCBzaGFyZXMNCit3aXRoIHRoZSBwYWdlIHBy ZWZpeCwgZm9sbG93ZWQgYnkgdGhlIHVuc2hhcmVkIHJlbWFpbmRlciAob3IsIGZvciBhIHZhbHVl IHdob3NlDQoraGVhZGVyIGlzIG5vdCB0aGUgZm9ybSBpbmRleF9mb3JtX3R1cGxlIHdvdWxkIHJl cHJvZHVjZSwgdGhlIHdob2xlIHZhbHVlIGFmdGVyDQorYSBzZW50aW5lbCBjb3VudCkuICBUcmFp bGluZyBrZXkgY29sdW1ucywgSU5DTFVERSBjb2x1bW5zLCBhIHBvc3RpbmcgbGlzdCBhbmQNCith bGlnbm1lbnQgcGFkZGluZyBmb2xsb3csIG1vdmVkIHRvIHByZXNlcnZlIGFsaWdubWVudDsgcGFk ZGluZyB0aGF0IGlzIG9ubHkgdGhlDQora2V5J3MgY2xvc2luZyB6ZXJvcyBpcyBkcm9wcGVkIGFu ZCByZXN0b3JlZCBvbiBkZWNvZGUuICBQaXZvdHMsIE5VTEwgZmlyc3QNCitjb2x1bW5zIGFuZCB0 aGUgaGlnaCBrZXkgYXJlIGFsd2F5cyBzdG9yZWQgdW5jb21wcmVzc2VkLiAgQ29kaW5nIGFuZCBk ZWNvZGluZw0KK2RlcGVuZCBvbmx5IG9uIHRoZSBwYWdlIHByZWZpeCBhbmQgdGhlIHR1cGxlLCBu ZXZlciB0aGUgY2F0YWxvZywgc28gV0FMIHJlZG8NCityZXByb2R1Y2VzIHRoZW0gYW5kIGRlY29k aW5nIHlpZWxkcyB0aGUgb3JpZ2luYWwgdHVwbGUgYnl0ZSBmb3IgYnl0ZS4gIEFsbCBvZg0KK25i dHByZWZpeC5jIGltcGxlbWVudHMgdGhpczsgX2J0X2dldGl0ZW0oKSBpcyB0aGUgb25lIGFjY2Vz c29yIHRocm91Z2ggd2hpY2gNCityZWFkZXJzIG9idGFpbiBhIGRlY29kZWQgbGVhZiBkYXRhIHR1 cGxlLg0KKw0KK0EgcGFnZSBhZG9wdHMgYSBwcmVmaXggb25seSB3aGVuIGl0IGlzIHdyaXR0ZW4g YXMgYSB3aG9sZTogYSBmaW5pc2hlZCBsZWFmDQorZHVyaW5nIGFuIGluZGV4IGJ1aWxkLCBvciBl aXRoZXIgaGFsZiBvZiBhIGxlYWYgcGFnZSBzcGxpdCAoYnVpbHQgY29kZWQgZnJvbQ0KK3RoZSBz dGFydCBieSBfYnRfc3BsaXRfbGVhZl9oYWxmLCBzaW5jZSBhIGNvbXByZXNzZWQgbGVhZiBjYW4g aG9sZCBtb3JlIGxvZ2ljYWwNCitkYXRhIHRoYW4gZml0cyBvbiBhIHBsYWluIHBhZ2UsIGNob29z aW5nIGVhY2ggaGFsZidzIG93biBwcmVmaXggYW5kIGZhbGxpbmcNCitiYWNrIHRvIGEgcGxhaW4g bGF5b3V0IG9yIHRoZSBvcmlnaW5hbCBwYWdlJ3MgcHJlZml4IGlmIGl0cyBvd24gZG9lcyBub3Qg Zml0KS4NCitDcnVjaWFsbHksIG5vIGluc2VydCwgVkFDVVVNLCBkZWR1cGxpY2F0aW9uIG9yIGNo YW5nZSBvZiBhIHBhZ2UncyBrZXkgcmFuZ2UNCitldmVyIHJld3JpdGVzIGEgcGFnZSB0byBrZWVw IGl0cyBwcmVmaXggdmFsaWQ6IGEgdHVwbGUgdGhhdCBoYXBwZW5zIHRvIHNoYXJlDQorZmV3ZXIg Ynl0ZXMgc2ltcGx5IHJlY29yZHMgYSBzbWFsbGVyIHNoYXJlZCBjb3VudC4gIEJlY2F1c2UgdGhl IGZvcm1hdCBpcyBhDQorcGVyLXBhZ2Ugb3B0LWluIGZsYWcgd2l0aCBubyBidHJlZSB2ZXJzaW9u IGNoYW5nZSwgcGFnZXMgd2l0aG91dCB0aGUgZmxhZyBhcmUNCityZWFkIGV4YWN0bHkgYXMgYmVm b3JlLCBzbyBwZ191cGdyYWRlIGFuZCBwaHlzaWNhbC9sb2dpY2FsIHJlcGxpY2F0aW9uIGtlZXAN Cit3b3JraW5nIGFuZCBleGlzdGluZyBpbmRleGVzIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBubyBS RUlOREVYLiAgVHVybmluZyB0aGUNCitwYXJhbWV0ZXIgb24gd2l0aCBBTFRFUiBJTkRFWCBkb2Vz IG5vdCByZXdyaXRlIGFueXRoaW5nOyBlYWNoIGxlYWYgaXMgY29udmVydGVkDQordGhlIG5leHQg dGltZSBpdCBpcyB3cml0dGVuIHdob2xlLCBhbmQgY29tcHJlc3NlZCBhbmQgdW5jb21wcmVzc2Vk IGxlYXZlcw0KK2NvZXhpc3QgaW4gdGhlIHNhbWUgaW5kZXggaW5kZWZpbml0ZWx5LiAgVHVybmlu ZyBpdCBvZmYgbGlrZXdpc2UgcmV3cml0ZXMNCitub3RoaW5nOiBleGlzdGluZyBCVFBfUFJFRklY IGxlYXZlcyBrZWVwIHRoZWlyIGNvZGVkIGZvcm0gKHRoZSBmbGFnIGlzIGNsZWFyZWQNCitvbmx5 IHdoZW4gYSBwYWdlIGlzIHNwbGl0LCBlbXB0aWVkIG9yIGRlZHVwLXJld3JpdHRlbikgYW5kIGFy ZSBzdGlsbCByZWFkIGJhY2sNCitjb3JyZWN0bHkgd2l0aCB0aGUgcGFyYW1ldGVyIG9mZiwgc2lu Y2UgZXZlcnkgcmVhZGVyIGRlY29kZXMgYmFzZWQgb24gdGhlIHBhZ2UNCitmbGFnLCBub3Qgb24g dGhlIGN1cnJlbnQgcmVsb3B0aW9uLiAgU2Nhbi10aW1lIHdvcmtzcGFjZSB0aGF0IG11c3QgaG9s ZCBkZWNvZGVkDQordHVwbGVzICh0aGUgaW5kZXgtb25seS1zY2FuIGN1cnJUdXBsZXMvbWFya1R1 cGxlcyBidWZmZXJzLCBzZWUNCitCVFR1cGxlU3RvcmFnZVNpemUpIGlzIHRoZXJlZm9yZSBzaXpl ZCBmb3IgYSBkZWNvZGVkIHBhZ2Ugb24gZXZlcnkgYnRyZWUgaW5kZXgsDQorbm90IGp1c3QgdGhv c2Ugd2hvc2UgcGFyYW1ldGVyIGlzIGN1cnJlbnRseSBvbi4NCisNCitMZWFmIGNoYW5nZXMgdG8g YSBwcmVmaXggcGFnZSBhcmUgcmVwbGF5ZWQgd2l0aG91dCBhIGZ1bGwtcGFnZSBpbWFnZSBpbiB0 aGUNCitjb21tb24gY2FzZS4gIFJlZG8gY2Fubm90IHJ1biB0aGUgcHJlZml4LWNob29zaW5nIGhl dXJpc3RpYyAoaXQgaGFzIG5vDQorcmVsY2FjaGUpLCBzbyB0aGUgcHJpbWFyeSBsb2dzIHRoZSBw cmVmaXggaXQgY2hvc2UgYW5kIGJvdGggc2lkZXMgbGF5IHRoZQ0KK3BhZ2Ugb3V0IHRocm91Z2gg b25lIFJlbGF0aW9uLWZyZWUgcm91dGluZSwgX2J0X3NwbGl0X2xlYWZfbGF5b3V0KCksIGZlZCBi eQ0KK29uZSBpdGVtLWNvbGxlY3Rpb24gcm91dGluZSwgX2J0X3NwbGl0X2xlYWZfY29sbGVjdCgp LCB0aGF0IHRoZSBwcmltYXJ5DQorKF9idF9zcGxpdCkgYW5kIHJlZG8gKGJ0cmVlX3hsb2dfc3Bs aXQpIGJvdGggY2FsbC4gIEJlY2F1c2UgdGhlIHR3byBkZXJpdmUNCit0aGUgcGxhaW4gaXRlbSBz ZXF1ZW5jZSB0aGUgc2FtZSB3YXkgYW5kIGNvZGUgaXQgYWdhaW5zdCB0aGUgc2FtZSBsb2dnZWQN CitwcmVmaXgsIHRoZXkgcHJvZHVjZSBieXRlLWlkZW50aWNhbCBwYWdlcy4gIEFuIGluLXBsYWNl IGluc2VydCBsb2dzIHRoZSBjb2RlZA0KK3R1cGxlIChzdGFuZGFyZCBpbnNlcnQgcmVkbyBhZGRz IGl0IHZlcmJhdGltKTsgYSBzcGxpdCBsb2dzIGVhY2ggaGFsZidzDQorY2hvc2VuIHByZWZpeCBw bHVzIHRoZSByaWdodCBoYWxmJ3MgcGxhaW4gaXRlbXM7IGEgZGVkdXBsaWNhdGlvbiBsb2dzIHRo ZQ0KK2Nob3NlbiBwcmVmaXggcGx1cyB0aGUgZGVkdXBlZCBwbGFpbiBpdGVtcy4gIEEgYm91bmRl ZCBmYWxsYmFjayBmb3JjZXMgYQ0KK2Z1bGwtcGFnZSBpbWFnZSBvbmx5IHdoZW4gYSBwYXRob2xv Z2ljYWxseSBjb21wcmVzc2libGUgcGFnZSdzIHBsYWluIHBheWxvYWQNCit3b3VsZCBleGNlZWQg QkxDS1NaIChzbyB0aGUgbG9nZ2VkIHBheWxvYWQgY2FuIG5ldmVyIGV4Y2VlZCBvbmUgYmxvY2sp OyByZWRvDQordGhlbiByZXN0b3JlcyB0aGUgaW1hZ2UgdmlhIEJMS19SRVNUT1JFRC4gIFdoZW4g VkFDVVVNIG9yIHBhZ2UgZGVsZXRpb24NCitlbXB0aWVzIGEgcHJlZml4IGxlYWYsIHRoZSBQUkVG SVggaXRlbSBpcyByZW1vdmVkIGFuZCB0aGUgZmxhZyBjbGVhcmVkIHNvIHRoYXQNCit0aGUgaW52 YXJpYW50IHRoYXQgYW4gZW1wdGllZCBsZWFmIGhvbGRzIG9ubHkgaXRzIGhpZ2gga2V5IChyZWxp ZWQgb24gYnkgcGFnZQ0KK2RlbGV0aW9uKSBzdGlsbCBob2xkcy4NCisNCitEZWR1cGxpY2F0aW9u IGFuZCBib3R0b20tdXAgaW5kZXggZGVsZXRpb24gYm90aCBydW4gb24gQlRQX1BSRUZJWCBwYWdl cy4NCitCb3R0b20tdXAgZGVsZXRpb24gb25seSByZW1vdmVzIGl0ZW1zIGFuZCBuZXZlciByZXdy aXRlcyBzdXJ2aXZvcnMsIHNvIGl0IGlzDQorc2FmZSBvbiBjb2RlZCBwYWdlcyB1bmNoYW5nZWQu ICBBIGRlZHVwbGljYXRpb24gcGFzcyBkZWNvZGVzIHRoZSBwYWdlJ3MgaXRlbXMsDQorbWVyZ2Vz IGR1cGxpY2F0ZXMgaW50byBwb3N0aW5nIGxpc3RzIGFuZCByZS1jb21wcmVzc2VzIHRoZSByZXN1 bHQgYXMgYSB3aG9sZTsNCitiZWNhdXNlIGEgY29kZWQgcGFnZSBjYW4gaG9sZCBtb3JlIGxvZ2lj YWwgZGF0YSB0aGFuIGZpdHMgcGxhaW4sIGlmIHRoZQ0KK2RlY29kZWQgc2V0IHdvdWxkIG92ZXJm bG93IGEgcGxhaW4gcGFnZSB0aGUgcGFzcyBhYm9ydHMgY2xlYW5seSBhbmQgdGhlIHBhZ2UNCitz cGxpdHMgaW5zdGVhZCwgc28gbm8gaW4tcGxhY2UgcmV3cml0ZSBpcyBldmVyIGZvcmNlZCB0byBm YWlsLiAgQW4gaW5kZXggYnVpbGQNCitkZWR1cGxpY2F0ZXMgYmVmb3JlIGNvZGluZyB0aGUgZmlu aXNoZWQgcGFnZSwgc28gYSBkdXBsaWNhdGUtaGVhdnkgcHJlZml4DQoraW5kZXggaXMgbm8gbGFy Z2VyIHRoYW4gYSBwbGFpbiBvbmUuDQorDQorUHJlZml4IGNvbXByZXNzaW9uIGlzIGEgc2VwYXJh dGUgbWVjaGFuaXNtIGZyb20gZGVkdXBsaWNhdGlvbiByYXRoZXIgdGhhbiBhbg0KK2V4dGVuc2lv biBvZiBpdCBiZWNhdXNlIHRoZSB0d28gYXR0YWNrIGRpZmZlcmVudCByZWR1bmRhbmN5LiAgRGVk dXBsaWNhdGlvbg0KK2NvbGxhcHNlcyB0dXBsZXMgd2hvc2Ugd2hvbGUga2V5IGlzICplcXVhbCog aW50byBvbmUgcG9zdGluZyBsaXN0IHR1cGxlOyBpdA0KK2RvZXMgbm90aGluZyBmb3Iga2V5cyB0 aGF0IGFyZSBhbGwgZGlzdGluY3QuICBQcmVmaXggY29tcHJlc3Npb24gZmFjdG9ycyBvdXQgYQ0K K2xlYWRpbmcgYnl0ZSBydW4gc2hhcmVkIGJ5ICpkaXN0aW5jdCoga2V5cyBhbmQgbGVhdmVzIHRo ZWlyIGRpZmZlcmluZyBzdWZmaXhlcw0KK2Fsb25lOyBpdCBkb2VzIG5vdGhpbmcgZm9yIGV4YWN0 IGR1cGxpY2F0ZXMgdGhhdCBhIHBvc3RpbmcgbGlzdCBhbHJlYWR5DQorY29sbGFwc2VzLiAgVGhl IGNvbW1vbiBjYXNlIHRoaXMgdGFyZ2V0cyAtLSBhIFVSTCBvciBqc29uYi1wYXRoIGNvbHVtbiB3 aG9zZQ0KK3ZhbHVlcyBhcmUgZGlzdGluY3QgYnV0IHNoYXJlIGEgbG9uZyBwcmVmaXggLS0gaXMg ZXhhY3RseSB3aGVyZSBkZWR1cGxpY2F0aW9uDQorZG9lcyBub3QgaGVscC4gIFRoZSB0d28gY29t cG9zZSBvbiBvbmUgcGFnZSAoZGVkdXBsaWNhdGUgZmlyc3QsIHRoZW4gY29kZSB0aGUNCitzdXJ2 aXZvcnMpLCB3aGljaCBpcyB3aHkgYSBidWlsZCBhcHBsaWVzIGJvdGguICBSZXVzaW5nIHRoZSBw b3N0aW5nLWxpc3QNCitmb3JtYXQgdG8gY2FycnkgYSBzaGFyZWQgcHJlZml4IHdhcyBjb25zaWRl cmVkIGFuZCByZWplY3RlZDogYSBwb3N0aW5nIGxpc3QNCitzdG9yZXMgb25lIGtleSBwbHVzIG1h bnkgVElEcywgd2hlcmVhcyBwcmVmaXggY29kaW5nIHN0b3JlcyBtYW55IGtleXMgdGhhdA0KK3No YXJlIGEgcHJlZml4LCBzbyB0aGUgdHdvIHdvdWxkIG5lZWQgZGlmZmVyZW50IHBlci1pdGVtIGxh eW91dHMgYW55d2F5LCBhbmQNCitvdmVybG9hZGluZyBwb3N0aW5nIGxpc3RzIHdvdWxkIGVudGFu Z2xlIHRoZSBkZWR1cGxpY2F0aW9uIGFuZCBjb21wcmVzc2lvbg0KK3BhdGhzIHRoYXQgYXJlIGtl cHQgc2VwYXJhdGUgaGVyZSBvbiBwdXJwb3NlLg0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL21lc29u LmJ1aWxkDQppbmRleCA4MTJmMDY3ZTcxMC4uY2JkMzQyMDEzMjggMTAwNjQ0DQotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL21lc29uLmJ1aWxkDQorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL21lc29uLmJ1aWxkDQpAQCAtNiw2ICs2LDcgQEAgYmFja2VuZF9zb3VyY2VzICs9 IGZpbGVzKA0KICAgJ25idGluc2VydC5jJywNCiAgICduYnRwYWdlLmMnLA0KICAgJ25idHByZXBy b2Nlc3NrZXlzLmMnLA0KKyAgJ25idHByZWZpeC5jJywNCiAgICduYnRyZWFkcGFnZS5jJywNCiAg ICduYnRyZWUuYycsDQogICAnbmJ0c2VhcmNoLmMnLA0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0ZGVkdXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 ZGVkdXAuYw0KaW5kZXggYWY3YWZmZGY0MDkuLmU0YjliYzQ3ZjkwIDEwMDY0NA0KLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5jDQorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idGRlZHVwLmMNCkBAIC0xOSw2ICsxOSw3IEBADQogI2luY2x1ZGUgImFjY2Vz cy90YWJsZWFtLmgiDQogI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiDQogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIg0KKyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCINCiAjaW5j bHVkZSAidXRpbHMvcmVsLmgiDQogDQogc3RhdGljIHZvaWQgX2J0X2JvdHRvbXVwZGVsX2Zpbmlz aF9wZW5kaW5nKFBhZ2UgcGFnZSwgQlREZWR1cFN0YXRlIHN0YXRlLA0KQEAgLTY5LDcgKzcwLDE5 IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBu ZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwNCiAJU2l6ZQkJcGFnZXNhdmluZyBQR19VU0VEX0ZPUl9B U1NFUlRTX09OTFkgPSAwOw0KIAlib29sCQlzaW5nbGV2YWxzdHJhdCA9IGZhbHNlOw0KIAlpbnQJ CQlua2V5YXR0cyA9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKTsN CisJYm9vbAkJcGFnZXByZWZpeCA9IFBfSEFTUFJFRklYKG9wYXF1ZSk7DQorCUJUSXRlbUJ1Zglj dXJidWY7CQkJLyogZGVjb2RlIHNjcmF0Y2ggZm9yIHRoZSBsb29wJ3MgY3VycmVudCBpdGVtICov DQorCUJUSXRlbUJ1ZgliYXNlYnVmOwkJLyogZGVjb2RlIHNjcmF0Y2gga2VwdCBmb3IgdGhlIHBl bmRpbmcgYmFzZSAqLw0KIAlYTG9nUmVjUHRyCXJlY3B0cjsNCisJSW5kZXhUdXBsZSAqZGVkdXBf cGxhaW4gPSBOVUxMOwkvKiBkZWR1cGVkIHBsYWluIGl0ZW1zLCBmb3IgcHJlZml4IFdBTCAqLw0K KwlpbnQJCQlkZWR1cF9ucGxhaW4gPSAwOw0KKwlJbmRleFR1cGxlCWRlZHVwX2hpa2V5ID0gTlVM TDsNCisJY2hhcgkJZGVkdXBfcHJlZml4W0JUUkVFX1BSRUZJWF9NQVhdOw0KKwlTaXplCQlkZWR1 cF9wcmVmaXhsZW4gPSAwOw0KKwlib29sCQlkZWR1cF9pc2xvZ3ByZWZpeCA9IGZhbHNlOwkvKiBw YWdlIGVuZGVkIHVwIHByZWZpeC1jb2RlZCAqLw0KKwljaGFyCSAgICpkZWR1cF93YWxidWYgPSBO VUxMOwkvKiBwYWNrZWQgcHJlZml4LWRlZHVwIFdBTCBwYXlsb2FkICovDQorCVNpemUJCWRlZHVw X3dhbGJ1ZmxlbiA9IDA7DQorCWJvb2wJCWRlZHVwX3JmcGkgPSBmYWxzZTsJLyogZmFsbCBiYWNr IHRvIGEgZm9yY2VkIGZ1bGwtcGFnZSBpbWFnZSAqLw0KIA0KIAkvKiBQYXNzZWQtaW4gbmV3aXRl bXN6IGlzIE1BWEFMSUdORUQgYnV0IGRvZXMgbm90IGluY2x1ZGUgbGluZSBwb2ludGVyICovDQog CW5ld2l0ZW1zeiArPSBzaXplb2YoSXRlbUlkRGF0YSk7DQpAQCAtMTIwLDcgKzEzMywxNiBAQCBf YnRfZGVkdXBfcGFzcyhSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsIEluZGV4VHVwbGUgbmV3aXRl bSwgU2l6ZSBuZXdpdGVtc3osDQogCW5ld3BhZ2UgPSBQYWdlR2V0VGVtcFBhZ2VDb3B5U3BlY2lh bChwYWdlKTsNCiAJUGFnZVNldExTTihuZXdwYWdlLCBQYWdlR2V0TFNOKHBhZ2UpKTsNCiANCi0J LyogQ29weSBoaWdoIGtleSwgaWYgYW55ICovDQorCS8qDQorCSAqIFRoZSByZWJ1aWx0IHBhZ2Ug aXMgbGFpZCBvdXQgcGxhaW4gaGVyZSAoY2xlYXIgYW55IGluaGVyaXRlZCBCVFBfUFJFRklYOw0K KwkgKiBQYWdlR2V0VGVtcFBhZ2VDb3B5U3BlY2lhbCBjb3BpZXMgdGhlIHNwZWNpYWwgYXJlYSBi dXQgbm90IHRoZSBQUkVGSVgNCisJICogaXRlbSkuICBJZiB0aGUgcGFnZSB3YXMgcHJlZml4LWNv bXByZXNzZWQgaXQgaXMgcmUtY29tcHJlc3NlZCBhcyBhIHdob2xlDQorCSAqIGJlbG93LCBhZnRl ciBkZWR1cGxpY2F0aW9uLCBob25vdXJpbmcgU3RyYXRlZ3kgMS4NCisJICovDQorCWlmIChwYWdl cHJlZml4KQ0KKwkJQlRQYWdlR2V0T3BhcXVlKG5ld3BhZ2UpLT5idHBvX2ZsYWdzICY9IH5CVFBf UFJFRklYOw0KKw0KKwkvKiBDb3B5IGhpZ2gga2V5LCBpZiBhbnkgKGEgcGl2b3QsIHN0b3JlZCBw bGFpbiBvbiBhbnkgcGFnZSkgKi8NCiAJaWYgKCFQX1JJR0hUTU9TVChvcGFxdWUpKQ0KIAl7DQog CQlJdGVtSWQJCWhpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIFBfSElLRVkpOw0KQEAgLTE0 MCwxMiArMTYyLDIyIEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Ziwg SW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwNCiANCiAJCUFzc2VydCghSXRlbUlk SXNEZWFkKGl0ZW1pZCkpOw0KIA0KKwkJLyogRGVjb2RlIG9uIGEgcHJlZml4IHBhZ2Ugc28ga2V5 cy9wb3N0aW5nIGxpc3RzIGFyZSB0aGUgcmVhbCBvbmVzLiAqLw0KKwkJaWYgKHBhZ2VwcmVmaXgp DQorCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIGl0dXAsICZjdXJidWYpOw0KKw0K IAkJaWYgKG9mZm51bSA9PSBtaW5vZmYpDQogCQl7DQogCQkJLyoNCiAJCQkgKiBObyBwcmV2aW91 cy9iYXNlIHR1cGxlIGZvciB0aGUgZGF0YSBpdGVtIC0tIHVzZSB0aGUgZGF0YSBpdGVtDQotCQkJ ICogYXMgYmFzZSB0dXBsZSBvZiBwZW5kaW5nIHBvc3RpbmcgbGlzdA0KKwkJCSAqIGFzIGJhc2Ug dHVwbGUgb2YgcGVuZGluZyBwb3N0aW5nIGxpc3QuICBPbiBhIHByZWZpeCBwYWdlIHRoZQ0KKwkJ CSAqIGJhc2UgbXVzdCBzdXJ2aXZlIHRoZSB3aG9sZSBtZXJnZSBydW4gKGl0IGlzIGtlcHQgYXMg YSBwb2ludGVyDQorCQkJICogaW4gc3RhdGUgYW5kIHJlYWQgYnkgX2J0X2RlZHVwX2ZpbmlzaF9w ZW5kaW5nKSwgc28ga2VlcCBpdCBpbiBhDQorCQkJICogZGVkaWNhdGVkIGJ1ZmZlciByYXRoZXIg dGhhbiB0aGUgcGVyLWl0ZXJhdGlvbiBjdXJidWYuDQogCQkJICovDQorCQkJaWYgKHBhZ2VwcmVm aXgpDQorCQkJCWl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLCAoSW5kZXhUdXBsZSkgUGFn ZUdldEl0ZW0ocGFnZSwgaXRlbWlkKSwNCisJCQkJCQkJCQkJICZiYXNlYnVmKTsNCiAJCQlfYnRf ZGVkdXBfc3RhcnRfcGVuZGluZyhzdGF0ZSwgaXR1cCwgb2ZmbnVtKTsNCiAJCX0NCiAJCWVsc2Ug aWYgKHN0YXRlLT5kZWR1cGxpY2F0ZSAmJg0KQEAgLTE3MCw3ICsyMDIsMjAgQEAgX2J0X2RlZHVw X3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBJbmRleFR1cGxlIG5ld2l0ZW0sIFNpemUg bmV3aXRlbXN6LA0KIAkJCSAqIGZvcm0gbmV3IHBvc3RpbmcgdHVwbGUgYW5kIGFkZCBpdCB0byBv dXIgdGVtcCBwYWdlIChuZXdwYWdlKS4NCiAJCQkgKiBFbHNlIGFkZCBwZW5kaW5nIGludGVydmFs J3MgYmFzZSB0dXBsZSB0byB0aGUgdGVtcCBwYWdlIGFzLWlzLg0KIAkJCSAqLw0KLQkJCXBhZ2Vz YXZpbmcgKz0gX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKG5ld3BhZ2UsIHN0YXRlKTsNCisJCQkv Kg0KKwkJCSAqIE9uIGEgcHJlZml4IHBhZ2UgdGhlIGRlZHVwZWQgaXRlbXMgYXJlIGxhaWQgb3V0 IHBsYWluIGhlcmU7IHRoZQ0KKwkJCSAqIGRlY29kZWQgc2V0IGNhbiBleGNlZWQgb25lIHBhZ2Ug ZXZlbiB3aGVuIHRoZSBjb2RlZCBmb3JtIGZpdCwgc28NCisJCQkgKiB0b2xlcmF0ZSBhbiBvdmVy ZmxvdyBhbmQgYWJvcnQgdGhlIHdob2xlIHBhc3MgKHRoZSBjYWxsZXIgdGhlbg0KKwkJCSAqIHNw bGl0cyB0aGUgcGFnZSBpbnN0ZWFkIG9mIGRlZHVwbGljYXRpbmcgaXQpLg0KKwkJCSAqLw0KKwkJ CXsNCisJCQkJU2l6ZQkJc2F2ZWQgPSBfYnRfZGVkdXBfZmluaXNoX3BlbmRpbmcobmV3cGFnZSwg c3RhdGUsDQorCQkJCQkJCQkJCQkJCQkJCXBhZ2VwcmVmaXgpOw0KKw0KKwkJCQlpZiAocGFnZXBy ZWZpeCAmJiBzYXZlZCA9PSAoU2l6ZSkgLTEpDQorCQkJCQlnb3RvIGRlZHVwX292ZXJmbG93Ow0K KwkJCQlwYWdlc2F2aW5nICs9IHNhdmVkOw0KKwkJCX0NCiANCiAJCQlpZiAoc2luZ2xldmFsc3Ry YXQpDQogCQkJew0KQEAgLTE5OCwxMiArMjQzLDIyIEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9u IHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwNCiAJ CQl9DQogDQogCQkJLyogaXR1cCBzdGFydHMgbmV3IHBlbmRpbmcgcG9zdGluZyBsaXN0ICovDQor CQkJaWYgKHBhZ2VwcmVmaXgpDQorCQkJCWl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLA0K KwkJCQkJCQkJCQkgKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIFBhZ2VHZXRJdGVtSWQo cGFnZSwgb2ZmbnVtKSksDQorCQkJCQkJCQkJCSAmYmFzZWJ1Zik7DQogCQkJX2J0X2RlZHVwX3N0 YXJ0X3BlbmRpbmcoc3RhdGUsIGl0dXAsIG9mZm51bSk7DQogCQl9DQogCX0NCiANCiAJLyogSGFu ZGxlIHRoZSBsYXN0IGl0ZW0gKi8NCi0JcGFnZXNhdmluZyArPSBfYnRfZGVkdXBfZmluaXNoX3Bl bmRpbmcobmV3cGFnZSwgc3RhdGUpOw0KKwl7DQorCQlTaXplCQlzYXZlZCA9IF9idF9kZWR1cF9m aW5pc2hfcGVuZGluZyhuZXdwYWdlLCBzdGF0ZSwgcGFnZXByZWZpeCk7DQorDQorCQlpZiAocGFn ZXByZWZpeCAmJiBzYXZlZCA9PSAoU2l6ZSkgLTEpDQorCQkJZ290byBkZWR1cF9vdmVyZmxvdzsN CisJCXBhZ2VzYXZpbmcgKz0gc2F2ZWQ7DQorCX0NCiANCiAJLyoNCiAJICogSWYgbm8gaXRlbXMg c3VpdGFibGUgZm9yIGRlZHVwbGljYXRpb24gd2VyZSBmb3VuZCwgbmV3cGFnZSBtdXN0IGJlDQpA QCAtMjM4LDYgKzI5MywxMTMgQEAgX2J0X2RlZHVwX3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIg YnVmLCBJbmRleFR1cGxlIG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LA0KIAkJbm9wYXF1ZS0+YnRw b19mbGFncyAmPSB+QlRQX0hBU19HQVJCQUdFOw0KIAl9DQogDQorCS8qDQorCSAqIFJlLWFwcGx5 IHByZWZpeCBjb21wcmVzc2lvbiB0byB0aGUgcmVidWlsdCAocGxhaW4pIHBhZ2UgYXMgYSB3aG9s ZQ0KKwkgKiAoU3RyYXRlZ3kgMSksIGJlZm9yZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBzaW5jZSBp dCBhbGxvY2F0ZXMgYSBzY3JhdGNoDQorCSAqIHBhZ2UuICBGaXJzdCBjYXB0dXJlIHRoZSBkZWR1 cGVkIHBsYWluIGl0ZW1zIGFuZCBoaWdoIGtleTogaWYgdGhlIHBhZ2UNCisJICogZG9lcyBiZWNv bWUgcHJlZml4LWNvbXByZXNzZWQsIHJlZG8gcmVidWlsZHMgaXRzIGNvZGVkIGJ5dGVzIGZyb20g dGhlc2UNCisJICogcGx1cyB0aGUgY2hvc2VuIHByZWZpeCAodmlhIF9idF9zcGxpdF9sZWFmX2xh eW91dCksIHRoZSBzYW1lIHdheSBhIHByZWZpeA0KKwkgKiBsZWFmIHNwbGl0IGlzIHJlcGxheWVk IC0tIG5vIGZ1bGwtcGFnZSBpbWFnZSBuZWVkZWQuDQorCSAqLw0KKwlpZiAocGFnZXByZWZpeCkN CisJew0KKwkJQlRQYWdlT3BhcXVlIG5vcHEgPSBCVFBhZ2VHZXRPcGFxdWUobmV3cGFnZSk7DQor CQlPZmZzZXROdW1iZXIgbm1pbiA9IFBfRklSU1REQVRBS0VZKG5vcHEpOw0KKwkJT2Zmc2V0TnVt YmVyIG5tYXggPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKG5ld3BhZ2UpOw0KKw0KKwkJZGVkdXBf bnBsYWluID0gKG5tYXggPj0gbm1pbikgPyAoaW50KSBubWF4IC0gKGludCkgbm1pbiArIDEgOiAw Ow0KKwkJaWYgKGRlZHVwX25wbGFpbiA+IDApDQorCQl7DQorCQkJZGVkdXBfcGxhaW4gPSBwYWxs b2MoZGVkdXBfbnBsYWluICogc2l6ZW9mKEluZGV4VHVwbGUpKTsNCisJCQlmb3IgKGludCBpID0g MDsgaSA8IGRlZHVwX25wbGFpbjsgaSsrKQ0KKwkJCQlkZWR1cF9wbGFpbltpXSA9IENvcHlJbmRl eFR1cGxlKChJbmRleFR1cGxlKQ0KKwkJCQkJCQkJCQkJCVBhZ2VHZXRJdGVtKG5ld3BhZ2UsDQor CQkJCQkJCQkJCQkJCQkJUGFnZUdldEl0ZW1JZChuZXdwYWdlLCBubWluICsgaSkpKTsNCisJCX0N CisJCWlmICghUF9SSUdIVE1PU1Qobm9wcSkpDQorCQl7DQorCQkJSXRlbUlkCQloaWkgPSBQYWdl R2V0SXRlbUlkKG5ld3BhZ2UsIFBfSElLRVkpOw0KKw0KKwkJCWRlZHVwX2hpa2V5ID0gQ29weUlu ZGV4VHVwbGUoKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKG5ld3BhZ2UsIGhpaSkpOw0KKwkJfQ0K Kw0KKwkJX2J0X3ByZWZpeF9jb21wcmVzc19wYWdlKHJlbCwgbmV3cGFnZSk7DQorDQorCQkvKiBE aWQgaXQgYWN0dWFsbHkgY29tcHJlc3M/ICAoSXQgZ2l2ZXMgdXAgaWYgYSBjb2RlZCBpdGVtIHdv bid0IGZpdC4pICovDQorCQlpZiAoUF9IQVNQUkVGSVgoQlRQYWdlR2V0T3BhcXVlKG5ld3BhZ2Up KSkNCisJCXsNCisJCQljb25zdCBjaGFyICpwZnggPSBfYnRfcGFnZV9nZXRfcHJlZml4KG5ld3Bh Z2UsICZkZWR1cF9wcmVmaXhsZW4pOw0KKw0KKwkJCWlmIChkZWR1cF9wcmVmaXhsZW4gPiAwKQ0K KwkJCQltZW1jcHkoZGVkdXBfcHJlZml4LCBwZngsIGRlZHVwX3ByZWZpeGxlbik7DQorCQkJZGVk dXBfaXNsb2dwcmVmaXggPSB0cnVlOw0KKwkJfQ0KKwl9DQorDQorCS8qDQorCSAqIFBhY2sgdGhl IHByZWZpeC1kZWR1cCBXQUwgcGF5bG9hZCBub3csIGJlZm9yZSB0aGUgY3JpdGljYWwgc2VjdGlv bg0KKwkgKiAocGFsbG9jIGlzIGRpc2FsbG93ZWQgaW5zaWRlIGl0KTogdGhlIGNob3NlbiBwcmVm aXggYnl0ZXMsIHRoZW4gdGhlIGhpZ2gNCisJICoga2V5ICh1bmxlc3MgcmlnaHRtb3N0KSwgdGhl biB0aGUgZGVkdXBlZCBwbGFpbiBpdGVtcywgZWFjaCBNQVhBTElHTidkLA0KKwkgKiBpbiBvbmUg Y29udGlndW91cyBidWZmZXIgbG9nZ2VkIHdpdGggYSBzaW5nbGUgcmRhdGEgc2xvdC4NCisJICov DQorCWlmIChkZWR1cF9pc2xvZ3ByZWZpeCkNCisJew0KKwkJU2l6ZQkJb2ZmID0gTUFYQUxJR04o ZGVkdXBfcHJlZml4bGVuKTsNCisNCisJCWlmIChkZWR1cF9oaWtleSAhPSBOVUxMKQ0KKwkJCW9m ZiArPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShkZWR1cF9oaWtleSkpOw0KKwkJZm9yIChpbnQg aSA9IDA7IGkgPCBkZWR1cF9ucGxhaW47IGkrKykNCisJCQlvZmYgKz0gTUFYQUxJR04oSW5kZXhU dXBsZVNpemUoZGVkdXBfcGxhaW5baV0pKTsNCisNCisJCS8qDQorCQkgKiBBIHBhdGhvbG9naWNh bGx5IGNvbXByZXNzaWJsZSBwYWdlIGNhbiBob2xkIG1vcmUgcGxhaW4gZGF0YSB0aGFuDQorCQkg KiBmaXRzIGluIG9uZSBwYWdlOyBpZiB0aGUgcGF5bG9hZCB3b3VsZCBiZSB0aGF0IGxhcmdlLCBm YWxsIGJhY2sgdG8NCisJCSAqIGEgZm9yY2VkIGZ1bGwtcGFnZSBpbWFnZSBvZiB0aGUgY29kZWQg cGFnZSAoYm91bmRlZCBhdCBCTENLU1opLg0KKwkJICovDQorCQlpZiAob2ZmID4gQkxDS1NaKQ0K KwkJCWRlZHVwX3JmcGkgPSB0cnVlOw0KKyNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUw0KKwkJ LyogTGV0IGEgdGVzdCBmb3JjZSB0aGUgb3RoZXJ3aXNlLXJhcmUgZnVsbC1wYWdlLWltYWdlIGZh bGxiYWNrLiAqLw0KKwkJaWYgKElTX0lOSkVDVElPTl9QT0lOVF9BVFRBQ0hFRCgibmJ0cmVlLXBy ZWZpeC1mb3JjZS1yZnBpIikpDQorCQkJZGVkdXBfcmZwaSA9IHRydWU7DQorI2VuZGlmDQorCQlp ZiAoZGVkdXBfcmZwaSkNCisJCQkgOwkJCQkJLyogaW1hZ2UgZm9yY2VkOyBubyBwYXlsb2FkIGJ1 ZmZlciBidWlsdCAqLw0KKwkJZWxzZQ0KKwkJew0KKwkJCWRlZHVwX3dhbGJ1ZmxlbiA9IG9mZjsN CisJCQlkZWR1cF93YWxidWYgPSBwYWxsb2MoTWF4KG9mZiwgMSkpOw0KKw0KKwkJCW9mZiA9IDA7 DQorCQkJaWYgKGRlZHVwX3ByZWZpeGxlbiA+IDApDQorCQkJew0KKwkJCQltZW1jcHkoZGVkdXBf d2FsYnVmLCBkZWR1cF9wcmVmaXgsIGRlZHVwX3ByZWZpeGxlbik7DQorCQkJCWlmIChNQVhBTElH TihkZWR1cF9wcmVmaXhsZW4pICE9IGRlZHVwX3ByZWZpeGxlbikNCisJCQkJCW1lbXNldChkZWR1 cF93YWxidWYgKyBkZWR1cF9wcmVmaXhsZW4sIDAsDQorCQkJCQkJICAgTUFYQUxJR04oZGVkdXBf cHJlZml4bGVuKSAtIGRlZHVwX3ByZWZpeGxlbik7DQorCQkJCW9mZiArPSBNQVhBTElHTihkZWR1 cF9wcmVmaXhsZW4pOw0KKwkJCX0NCisJCQlpZiAoZGVkdXBfaGlrZXkgIT0gTlVMTCkNCisJCQl7 DQorCQkJCVNpemUJCWhzeiA9IEluZGV4VHVwbGVTaXplKGRlZHVwX2hpa2V5KTsNCisNCisJCQkJ bWVtY3B5KGRlZHVwX3dhbGJ1ZiArIG9mZiwgZGVkdXBfaGlrZXksIGhzeik7DQorCQkJCWlmIChN QVhBTElHTihoc3opICE9IGhzeikNCisJCQkJCW1lbXNldChkZWR1cF93YWxidWYgKyBvZmYgKyBo c3osIDAsIE1BWEFMSUdOKGhzeikgLSBoc3opOw0KKwkJCQlvZmYgKz0gTUFYQUxJR04oaHN6KTsN CisJCQl9DQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkZWR1cF9ucGxhaW47IGkrKykNCisJCQl7 DQorCQkJCVNpemUJCXN6ID0gSW5kZXhUdXBsZVNpemUoZGVkdXBfcGxhaW5baV0pOw0KKw0KKwkJ CQltZW1jcHkoZGVkdXBfd2FsYnVmICsgb2ZmLCBkZWR1cF9wbGFpbltpXSwgc3opOw0KKwkJCQlp ZiAoTUFYQUxJR04oc3opICE9IHN6KQ0KKwkJCQkJbWVtc2V0KGRlZHVwX3dhbGJ1ZiArIG9mZiAr IHN6LCAwLCBNQVhBTElHTihzeikgLSBzeik7DQorCQkJCW9mZiArPSBNQVhBTElHTihzeik7DQor CQkJfQ0KKwkJfQ0KKwl9DQorDQogCVNUQVJUX0NSSVRfU0VDVElPTigpOw0KIA0KIAlQYWdlUmVz dG9yZVRlbXBQYWdlKG5ld3BhZ2UsIHBhZ2UpOw0KQEAgLTI0OCwxOSArNDEwLDM4IEBAIF9idF9k ZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBT aXplIG5ld2l0ZW1zeiwNCiAJew0KIAkJeGxfYnRyZWVfZGVkdXAgeGxyZWNfZGVkdXA7DQogDQot CQl4bHJlY19kZWR1cC5uaW50ZXJ2YWxzID0gc3RhdGUtPm5pbnRlcnZhbHM7DQorCQl4bHJlY19k ZWR1cC5uaW50ZXJ2YWxzID0gZGVkdXBfaXNsb2dwcmVmaXggPyAwIDogc3RhdGUtPm5pbnRlcnZh bHM7DQorCQl4bHJlY19kZWR1cC5wcmVmaXhsZW4gPSAodWludDgpIGRlZHVwX3ByZWZpeGxlbjsN CisJCXhscmVjX2RlZHVwLmZsYWdzID0gKGRlZHVwX2hpa2V5ICE9IE5VTEwpID8gWExIX0RFRFVQ X05PVF9SSUdIVE1PU1QgOiAwOw0KKwkJaWYgKGRlZHVwX3JmcGkpDQorCQkJeGxyZWNfZGVkdXAu ZmxhZ3MgfD0gWExIX0RFRFVQX1JGUEk7DQogDQogCQlYTG9nQmVnaW5JbnNlcnQoKTsNCi0JCVhM b2dSZWdpc3RlckJ1ZmZlcigwLCBidWYsIFJFR0JVRl9TVEFOREFSRCk7DQorCQlYTG9nUmVnaXN0 ZXJCdWZmZXIoMCwgYnVmLA0KKwkJCQkJCSAgIFJFR0JVRl9TVEFOREFSRCB8DQorCQkJCQkJICAg KGRlZHVwX3JmcGkgPyBSRUdCVUZfRk9SQ0VfSU1BR0UgOiAwKSk7DQogCQlYTG9nUmVnaXN0ZXJE YXRhKCZ4bHJlY19kZWR1cCwgU2l6ZU9mQnRyZWVEZWR1cCk7DQogDQotCQkvKg0KLQkJICogVGhl IGludGVydmFscyBhcnJheSBpcyBub3QgaW4gdGhlIGJ1ZmZlciwgYnV0IHByZXRlbmQgdGhhdCBp dCBpcy4NCi0JCSAqIFdoZW4gWExvZ0luc2VydCBzdG9yZXMgdGhlIHdob2xlIGJ1ZmZlciwgdGhl IGFycmF5IG5lZWQgbm90IGJlDQotCQkgKiBzdG9yZWQgdG9vLg0KLQkJICovDQotCQlYTG9nUmVn aXN0ZXJCdWZEYXRhKDAsIHN0YXRlLT5pbnRlcnZhbHMsDQotCQkJCQkJCXN0YXRlLT5uaW50ZXJ2 YWxzICogc2l6ZW9mKEJURGVkdXBJbnRlcnZhbCkpOw0KKwkJaWYgKGRlZHVwX2lzbG9ncHJlZml4 KQ0KKwkJew0KKwkJCS8qDQorCQkJICogUHJlZml4LWRlZHVwOiBjYXJyeSB0aGUgY2hvc2VuIHBy ZWZpeCBhbmQgdGhlIGRlZHVwZWQgcGxhaW4NCisJCQkgKiBpdGVtcyBzbyByZWRvIGNhbiBsYXkg b3V0IHRoZSBjb2RlZCBwYWdlOyBubyBmdWxsLXBhZ2UgaW1hZ2UNCisJCQkgKiAodW5sZXNzIHRo ZSBwYXlsb2FkIHdhcyB0b28gbGFyZ2UsIGhhbmRsZWQgYnkgdGhlIGZvcmNlZCBpbWFnZSkuDQor CQkJICovDQorCQkJaWYgKCFkZWR1cF9yZnBpICYmIGRlZHVwX3dhbGJ1ZmxlbiA+IDApDQorCQkJ CVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgZGVkdXBfd2FsYnVmLCBkZWR1cF93YWxidWZsZW4pOw0K KwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCS8qDQorCQkJICogVGhlIGludGVydmFscyBhcnJheSBp cyBub3QgaW4gdGhlIGJ1ZmZlciwgYnV0IHByZXRlbmQgdGhhdCBpdA0KKwkJCSAqIGlzLiAgV2hl biBYTG9nSW5zZXJ0IHN0b3JlcyB0aGUgd2hvbGUgYnVmZmVyLCB0aGUgYXJyYXkgbmVlZCBub3QN CisJCQkgKiBiZSBzdG9yZWQgdG9vLg0KKwkJCSAqLw0KKwkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEo MCwgc3RhdGUtPmludGVydmFscywNCisJCQkJCQkJCXN0YXRlLT5uaW50ZXJ2YWxzICogc2l6ZW9m KEJURGVkdXBJbnRlcnZhbCkpOw0KKwkJfQ0KIA0KIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9C VFJFRV9JRCwgWExPR19CVFJFRV9ERURVUCk7DQogCX0NCkBAIC0yNzcsNiArNDU4LDIwIEBAIF9i dF9kZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVt LCBTaXplIG5ld2l0ZW1zeiwNCiAJLyogY2Fubm90IGxlYWsgbWVtb3J5IGhlcmUgKi8NCiAJcGZy ZWUoc3RhdGUtPmh0aWRzKTsNCiAJcGZyZWUoc3RhdGUpOw0KKwlyZXR1cm47DQorDQorZGVkdXBf b3ZlcmZsb3c6DQorDQorCS8qDQorCSAqIEEgcHJlZml4IHBhZ2UncyBkZWR1cGVkIGl0ZW1zIGRp ZCBub3QgZml0IHdoZW4gbGFpZCBvdXQgcGxhaW4uICBMZWF2ZQ0KKwkgKiB0aGUgb3JpZ2luYWwg cGFnZSB1bnRvdWNoZWQgYW5kIHJldHVybiB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmc7IHRoZQ0K KwkgKiBjYWxsZXIgZmFsbHMgdGhyb3VnaCB0byBzcGxpdCB0aGUgcGFnZS4gIE5vIGNyaXRpY2Fs IHNlY3Rpb24gd2FzDQorCSAqIGVudGVyZWQgYW5kIHRoZSBidWZmZXIgd2FzIG5vdCBtYXJrZWQg ZGlydHksIHNvIHRoZSBwYWdlIGlzIHVuY2hhbmdlZC4NCisJICovDQorCUFzc2VydChwYWdlcHJl Zml4KTsNCisJcGZyZWUobmV3cGFnZSk7DQorCXBmcmVlKHN0YXRlLT5odGlkcyk7DQorCXBmcmVl KHN0YXRlKTsNCiB9DQogDQogLyoNCkBAIC0zMTgsNiArNTEzLDkgQEAgX2J0X2JvdHRvbXVwZGVs X3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBSZWxhdGlvbiBoZWFwUmVsLA0KIAlUTV9J bmRleERlbGV0ZU9wIGRlbHN0YXRlOw0KIAlib29sCQluZXZlcmRlZHVwOw0KIAlpbnQJCQlua2V5 YXR0cyA9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKTsNCisJYm9v bAkJcGFnZXByZWZpeCA9IFBfSEFTUFJFRklYKG9wYXF1ZSk7DQorCUJUSXRlbUJ1ZgljdXJidWY7 CQkJLyogZGVjb2RlIHNjcmF0Y2ggZm9yIHRoZSBsb29wJ3MgY3VycmVudCBpdGVtICovDQorCUJU SXRlbUJ1ZgliYXNlYnVmOwkJLyogZGVjb2RlIHNjcmF0Y2gga2VwdCBmb3IgdGhlIHBlbmRpbmcg YmFzZSAqLw0KIA0KIAkvKiBQYXNzZWQtaW4gbmV3aXRlbXN6IGlzIE1BWEFMSUdORUQgYnV0IGRv ZXMgbm90IGluY2x1ZGUgbGluZSBwb2ludGVyICovDQogCW5ld2l0ZW1zeiArPSBzaXplb2YoSXRl bUlkRGF0YSk7DQpAQCAtMzcxLDkgKzU2OSwyNCBAQCBfYnRfYm90dG9tdXBkZWxfcGFzcyhSZWxh dGlvbiByZWwsIEJ1ZmZlciBidWYsIFJlbGF0aW9uIGhlYXBSZWwsDQogDQogCQlBc3NlcnQoIUl0 ZW1JZElzRGVhZChpdGVtaWQpKTsNCiANCisJCS8qDQorCQkgKiBPbiBhIHByZWZpeC1jb21wcmVz c2VkIHBhZ2UgZGVjb2RlIHRoZSBpdGVtIHNvIF9idF9rZWVwX25hdHRzX2Zhc3QNCisJCSAqIHNl ZXMgdGhlIHJlYWwga2V5LiAgVGhlIGJhc2Ugb2YgYSBwZW5kaW5nIGludGVydmFsIG11c3Qgc3Vy dml2ZSB0aGUNCisJCSAqIHdob2xlIHJ1biAoaXQgaXMgY29tcGFyZWQgYWdhaW5zdCBlYWNoIGZv bGxvd2luZyBpdGVtKSwgc28ga2VlcCBpdA0KKwkJICogaW4gaXRzIG93biBidWZmZXI7IHRoZSBj dXJyZW50IGl0ZW0gdXNlcyBhIHJldXNlZCBidWZmZXIuICBIZWFwIFRJRHMNCisJCSAqIGFuZCBw b3N0aW5nIGxpc3RzIGFyZSBwcmVzZXJ2ZWQgYnkgY29kaW5nLCBzbyBfYnRfZGVkdXBfc3RhcnRf cGVuZGluZw0KKwkJICogYW5kIF9idF9ib3R0b211cGRlbF9maW5pc2hfcGVuZGluZyAod2hpY2gg cmVhZCBvbmx5IFRJRHMvc2l6ZXMsIGJ5DQorCQkgKiBwYWdlIG9mZnNldCkgbmVlZCBubyBkZWNv ZGUuDQorCQkgKi8NCisJCWlmIChwYWdlcHJlZml4KQ0KKwkJCWl0dXAgPSBfYnRfcHJlZml4X2Rl Y29kZShwYWdlLCBpdHVwLCAmY3VyYnVmKTsNCisNCiAJCWlmIChvZmZudW0gPT0gbWlub2ZmKQ0K IAkJew0KIAkJCS8qIGl0dXAgc3RhcnRzIGZpcnN0IHBlbmRpbmcgaW50ZXJ2YWwgKi8NCisJCQlp ZiAocGFnZXByZWZpeCkNCisJCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpLA0KKwkJCQkJCQkJCQkgJmJhc2VidWYp Ow0KIAkJCV9idF9kZWR1cF9zdGFydF9wZW5kaW5nKHN0YXRlLCBpdHVwLCBvZmZudW0pOw0KIAkJ fQ0KIAkJZWxzZSBpZiAoX2J0X2tlZXBfbmF0dHNfZmFzdChyZWwsIHN0YXRlLT5iYXNlLCBpdHVw KSA+IG5rZXlhdHRzICYmDQpAQCAtMzg3LDYgKzYwMCw5IEBAIF9idF9ib3R0b211cGRlbF9wYXNz KFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgUmVsYXRpb24gaGVhcFJlbCwNCiAJCQlfYnRfYm90 dG9tdXBkZWxfZmluaXNoX3BlbmRpbmcocGFnZSwgc3RhdGUsICZkZWxzdGF0ZSk7DQogDQogCQkJ LyogaXR1cCBzdGFydHMgbmV3IHBlbmRpbmcgaW50ZXJ2YWwgKi8NCisJCQlpZiAocGFnZXByZWZp eCkNCisJCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIChJbmRleFR1cGxlKSBQYWdl R2V0SXRlbShwYWdlLCBpdGVtaWQpLA0KKwkJCQkJCQkJCQkgJmJhc2VidWYpOw0KIAkJCV9idF9k ZWR1cF9zdGFydF9wZW5kaW5nKHN0YXRlLCBpdHVwLCBvZmZudW0pOw0KIAkJfQ0KIAl9DQpAQCAt NTU0LDcgKzc3MCw3IEBAIF9idF9kZWR1cF9zYXZlX2h0aWQoQlREZWR1cFN0YXRlIHN0YXRlLCBJ bmRleFR1cGxlIGl0dXApDQogICogd2hlcmUgbm8gZGVkdXBsaWNhdGlvbiB3YXMgcG9zc2libGUu DQogICovDQogU2l6ZQ0KLV9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhQYWdlIG5ld3BhZ2UsIEJU RGVkdXBTdGF0ZSBzdGF0ZSkNCitfYnRfZGVkdXBfZmluaXNoX3BlbmRpbmcoUGFnZSBuZXdwYWdl LCBCVERlZHVwU3RhdGUgc3RhdGUsIGJvb2wgb3ZlcmZsb3dvaykNCiB7DQogCU9mZnNldE51bWJl ciB0dXBvZmY7DQogCVNpemUJCXR1cGxlc3o7DQpAQCAtNTcyLDcgKzc4OCwxMSBAQCBfYnRfZGVk dXBfZmluaXNoX3BlbmRpbmcoUGFnZSBuZXdwYWdlLCBCVERlZHVwU3RhdGUgc3RhdGUpDQogCQlB c3NlcnQodHVwbGVzeiA9PSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShzdGF0ZS0+YmFzZSkpKTsN CiAJCUFzc2VydCh0dXBsZXN6IDw9IEJUTWF4SXRlbVNpemUpOw0KIAkJaWYgKFBhZ2VBZGRJdGVt KG5ld3BhZ2UsIHN0YXRlLT5iYXNlLCB0dXBsZXN6LCB0dXBvZmYsIGZhbHNlLCBmYWxzZSkgPT0g SW52YWxpZE9mZnNldE51bWJlcikNCisJCXsNCisJCQlpZiAob3ZlcmZsb3dvaykNCisJCQkJcmV0 dXJuIChTaXplKSAtMTsNCiAJCQllbG9nKEVSUk9SLCAiZGVkdXBsaWNhdGlvbiBmYWlsZWQgdG8g YWRkIHR1cGxlIHRvIHBhZ2UiKTsNCisJCX0NCiANCiAJCXNwYWNlc2F2aW5nID0gMDsNCiAJfQ0K QEAgLTU5MSwxMyArODExLDI2IEBAIF9idF9kZWR1cF9maW5pc2hfcGVuZGluZyhQYWdlIG5ld3Bh Z2UsIEJURGVkdXBTdGF0ZSBzdGF0ZSkNCiAJCUFzc2VydCh0dXBsZXN6ID09IE1BWEFMSUdOKElu ZGV4VHVwbGVTaXplKGZpbmFsKSkpOw0KIAkJQXNzZXJ0KHR1cGxlc3ogPD0gQlRNYXhJdGVtU2l6 ZSk7DQogCQlpZiAoUGFnZUFkZEl0ZW0obmV3cGFnZSwgZmluYWwsIHR1cGxlc3osIHR1cG9mZiwg ZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQ0KKwkJew0KKwkJCXBmcmVlKGZp bmFsKTsNCisJCQlpZiAob3ZlcmZsb3dvaykNCisJCQkJcmV0dXJuIChTaXplKSAtMTsNCiAJCQll bG9nKEVSUk9SLCAiZGVkdXBsaWNhdGlvbiBmYWlsZWQgdG8gYWRkIHR1cGxlIHRvIHBhZ2UiKTsN CisJCX0NCiANCiAJCXBmcmVlKGZpbmFsKTsNCiAJCXNwYWNlc2F2aW5nID0gc3RhdGUtPnBoeXN0 dXBzaXplIC0gKHR1cGxlc3ogKyBzaXplb2YoSXRlbUlkRGF0YSkpOw0KIAkJLyogSW5jcmVtZW50 IG5pbnRlcnZhbHMsIHNpbmNlIHdlIHdyb3RlIGEgbmV3IHBvc3RpbmcgbGlzdCB0dXBsZSAqLw0K IAkJc3RhdGUtPm5pbnRlcnZhbHMrKzsNCi0JCUFzc2VydChzcGFjZXNhdmluZyA+IDAgJiYgc3Bh Y2VzYXZpbmcgPCBCTENLU1opOw0KKw0KKwkJLyoNCisJCSAqIE9uIGFuIG9yZGluYXJ5IHBhZ2Ug dGhlIG1lcmdlZCBpbnRlcnZhbCdzIHR1cGxlcyB3ZXJlIGFsbCBwaHlzaWNhbGx5DQorCQkgKiBw cmVzZW50IG9uIG9uZSBwYWdlLCBzbyB0aGUgc2F2aW5nIGlzIGJvdW5kZWQgYnkgQkxDS1NaLiAg T24gYSBwcmVmaXgNCisJCSAqIHBhZ2UgKG92ZXJmbG93b2spIHBoeXN0dXBzaXplIGlzIHRoZSBE RUNPREVEIHNpemUgb2YgdGhvc2UgdHVwbGVzLA0KKwkJICogd2hpY2ggY2FuIGV4Y2VlZCBhIHBh Z2UgKGEgY29kZWQgcGFnZSBob2xkcyBtb3JlIGxvZ2ljYWwgZGF0YSB0aGFuDQorCQkgKiBmaXRz IHBsYWluKSwgc28gb25seSByZXF1aXJlIHRoZSBzYXZpbmcgdG8gYmUgcG9zaXRpdmUgdGhlcmUu DQorCQkgKi8NCisJCUFzc2VydChzcGFjZXNhdmluZyA+IDAgJiYgKG92ZXJmbG93b2sgfHwgc3Bh Y2VzYXZpbmcgPCBCTENLU1opKTsNCiAJfQ0KIA0KIAkvKiBSZXNldCBzdGF0ZSBmb3IgbmV4dCBw ZW5kaW5nIHBvc3RpbmcgbGlzdCAqLw0KQEAgLTc4MywxNiArMTAxNiwyMiBAQCBfYnRfZG9fc2lu Z2xldmFsKFJlbGF0aW9uIHJlbCwgUGFnZSBwYWdlLCBCVERlZHVwU3RhdGUgc3RhdGUsDQogCQkJ CSBPZmZzZXROdW1iZXIgbWlub2ZmLCBJbmRleFR1cGxlIG5ld2l0ZW0pDQogew0KIAlpbnQJCQlu a2V5YXR0cyA9IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKTsNCisJ Ym9vbAkJcGFnZXByZWZpeCA9IFBfSEFTUFJFRklYKEJUUGFnZUdldE9wYXF1ZShwYWdlKSk7DQog CUl0ZW1JZAkJaXRlbWlkOw0KIAlJbmRleFR1cGxlCWl0dXA7DQorCUJUSXRlbUJ1ZglidWY7DQog DQogCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgbWlub2ZmKTsNCiAJaXR1cCA9IChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOw0KKwlpZiAocGFnZXByZWZpeCkNCisJ CWl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLCBpdHVwLCAmYnVmKTsNCiANCiAJaWYgKF9i dF9rZWVwX25hdHRzX2Zhc3QocmVsLCBuZXdpdGVtLCBpdHVwKSA+IG5rZXlhdHRzKQ0KIAl7DQog CQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFn ZSkpOw0KIAkJaXR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOw0K KwkJaWYgKHBhZ2VwcmVmaXgpDQorCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIGl0 dXAsICZidWYpOw0KIA0KIAkJaWYgKF9idF9rZWVwX25hdHRzX2Zhc3QocmVsLCBuZXdpdGVtLCBp dHVwKSA+IG5rZXlhdHRzKQ0KIAkJCXJldHVybiB0cnVlOw0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idGluc2VydC5jDQppbmRleCBkNWQ5NjQzMDFjMS4uYjE4N2QxODk2ZDYgMTAwNjQ0DQotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jDQorKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jDQpAQCAtMzQ4LDggKzM0OCw4IEBAIF9idF9zZWFy Y2hfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRJbnNlcnRTdGF0ZSBp bnNlcnRzdGF0ZSkNCiAJCQkJUF9JU0xFQUYob3BhcXVlKSAmJg0KIAkJCQkhUF9JR05PUkUob3Bh cXVlKSAmJg0KIAkJCQlQYWdlR2V0RnJlZVNwYWNlKHBhZ2UpID4gaW5zZXJ0c3RhdGUtPml0ZW1z eiAmJg0KLQkJCQlQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpID49IFBfSElLRVkgJiYNCi0J CQkJX2J0X2NvbXBhcmUocmVsLCBpbnNlcnRzdGF0ZS0+aXR1cF9rZXksIHBhZ2UsIFBfSElLRVkp ID4gMCkNCisJCQkJUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSA+PSBQX0ZJUlNUREFUQUtF WShvcGFxdWUpICYmDQorCQkJCV9idF9jb21wYXJlKHJlbCwgaW5zZXJ0c3RhdGUtPml0dXBfa2V5 LCBwYWdlLCBQX0ZJUlNUREFUQUtFWShvcGFxdWUpKSA+IDApDQogCQkJew0KIAkJCQkvKg0KIAkJ CQkgKiBDYWxsZXIgY2FuIHVzZSB0aGUgZmFzdHBhdGggb3B0aW1pemF0aW9uIGJlY2F1c2UgY2Fj aGVkDQpAQCAtMTEzNSw2ICsxMTM1LDExIEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwN CiAJSW5kZXhUdXBsZQlvcG9zdGluZyA9IE5VTEw7DQogCUluZGV4VHVwbGUJb3JpZ2l0dXAgPSBO VUxMOw0KIAlJbmRleFR1cGxlCW5wb3N0aW5nID0gTlVMTDsNCisJSW5kZXhUdXBsZQljb2RlZGl0 dXA7CQkvKiBpdHVwIGNvZGVkIGZvciB0aGUgcGFnZSwgb3IgaXR1cCAqLw0KKwlTaXplCQljb2Rl ZGl0ZW1zejsJLyogaXRzIE1BWEFMSUdOZWQgc2l6ZSAqLw0KKwlJbmRleFR1cGxlCWNvZGVkbnBv c3RpbmcgPSBOVUxMOwkvKiBucG9zdGluZyBjb2RlZCBmb3IgdGhlIHBhZ2UgKi8NCisJQlRJdGVt QnVmCW9wb3N0YnVmOwkJLyogZGVjb2RlIHdvcmtzcGFjZSBmb3IgYW4gZXhpc3RpbmcgcG9zdGlu ZyAqLw0KKwlib29sCQlwYWdlcHJlZml4OwkJLyogdGFyZ2V0IHBhZ2UgaXMgQlRQX1BSRUZJWCAq Lw0KIAlYTG9nUmVjUHRyCXJlY3B0cjsNCiANCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsN CkBAIC0xMTQzLDYgKzExNDgsNyBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsDQogCWlz cm9vdCA9IFBfSVNST09UKG9wYXF1ZSk7DQogCWlzcmlnaHRtb3N0ID0gUF9SSUdIVE1PU1Qob3Bh cXVlKTsNCiAJaXNvbmx5ID0gUF9MRUZUTU9TVChvcGFxdWUpICYmIFBfUklHSFRNT1NUKG9wYXF1 ZSk7DQorCXBhZ2VwcmVmaXggPSBQX0hBU1BSRUZJWChvcGFxdWUpOw0KIA0KIAkvKiBjaGlsZCBi dWZmZXIgbXVzdCBiZSBnaXZlbiBpZmYgaW5zZXJ0aW5nIG9uIGFuIGludGVybmFsIHBhZ2UgKi8N CiAJQXNzZXJ0KGlzbGVhZiA9PSAhQnVmZmVySXNWYWxpZChjYnVmKSk7DQpAQCAtMTE4Miw2ICsx MTg4LDkgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRpb24gcmVsLA0KIAkJICovDQogCQlBc3NlcnQo aXNsZWFmICYmIGl0dXBfa2V5LT5oZWFwa2V5c3BhY2UgJiYgaXR1cF9rZXktPmFsbGVxdWFsaW1h Z2UpOw0KIAkJb3Bvc3RpbmcgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaXRlbWlk KTsNCisJCS8qIE9uIGEgcHJlZml4IHBhZ2UgdGhlIGV4aXN0aW5nIHBvc3RpbmcgaXMgY29kZWQ7 IGRlY29kZSBmb3IgdGhlIHN3YXAuICovDQorCQlpZiAocGFnZXByZWZpeCkNCisJCQlvcG9zdGlu ZyA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIG9wb3N0aW5nLCAmb3Bvc3RidWYpOw0KIA0KIAkJ LyoNCiAJCSAqIHBvc3RpbmdvZmYgdmFsdWUgY29tZXMgZnJvbSBlYXJsaWVyIGNhbGwgdG8gX2J0 X2JpbnNyY2hfcG9zdGluZygpLg0KQEAgLTEyMTMsMTkgKzEyMjIsNTAgQEAgX2J0X2luc2VydG9u cGcoUmVsYXRpb24gcmVsLA0KIAkJbmV3aXRlbW9mZiA9IE9mZnNldE51bWJlck5leHQobmV3aXRl bW9mZik7DQogCX0NCiANCisJLyoNCisJICogT24gYSBwcmVmaXgtY29tcHJlc3NlZCBwYWdlIHRo ZSBuZXcgaXRlbSBpcyBzdG9yZWQgY29kZWQsIHdoaWNoIGlzIGF0DQorCSAqIG1vc3QgTUFYQUxJ R04gbGFyZ2VyIHRoYW4gcGxhaW4gYW5kIHVzdWFsbHkgbXVjaCBzbWFsbGVyLiAgU2l6ZSB0aGUg Zml0DQorCSAqIHRlc3QgYW5kIHRoZSBwbGFjZW1lbnQgYnkgdGhlIGNvZGVkIHNpemUuICAoU3Bs aXQgaXMgaGFuZGxlZCBvbiBwbGFpbg0KKwkgKiB0dXBsZXM7IF9idF9zcGxpdCByZS1jb21wcmVz c2VzIGVhY2ggaGFsZiBpdHNlbGYuKQ0KKwkgKi8NCisJaWYgKHBhZ2VwcmVmaXgpDQorCXsNCisJ CWNvZGVkaXR1cCA9IF9idF9wcmVmaXhfZW5jb2RlKHBhZ2UsIGl0dXApOw0KKwkJY29kZWRpdGVt c3ogPSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShjb2RlZGl0dXApKTsNCisJCS8qDQorCQkgKiBB IHBvc3RpbmctbGlzdCBzcGxpdCByZXBsYWNlcyB0aGUgZXhpc3RpbmcgY29kZWQgcG9zdGluZyB3 aXRoIGENCisJCSAqIHJlLWNvZGVkIG9uZTsgZW5jb2RlIGl0IGhlcmUsIGJlZm9yZSB0aGUgY3Jp dGljYWwgc2VjdGlvbiwgc2luY2UNCisJCSAqIF9idF9wcmVmaXhfZW5jb2RlKCkgYWxsb2NhdGVz Lg0KKwkJICovDQorCQlpZiAobnBvc3RpbmcgIT0gTlVMTCkNCisJCQljb2RlZG5wb3N0aW5nID0g X2J0X3ByZWZpeF9lbmNvZGUocGFnZSwgbnBvc3RpbmcpOw0KKwl9DQorCWVsc2UNCisJew0KKwkJ Y29kZWRpdHVwID0gaXR1cDsNCisJCWNvZGVkaXRlbXN6ID0gaXRlbXN6Ow0KKwl9DQorDQogCS8q DQogCSAqIERvIHdlIG5lZWQgdG8gc3BsaXQgdGhlIHBhZ2UgdG8gZml0IHRoZSBpdGVtIG9uIGl0 Pw0KIAkgKg0KIAkgKiBOb3RlOiBQYWdlR2V0RnJlZVNwYWNlKCkgc3VidHJhY3RzIHNpemVvZihJ dGVtSWREYXRhKSBmcm9tIGl0cyByZXN1bHQsDQogCSAqIHNvIHRoaXMgY29tcGFyaXNvbiBpcyBj b3JyZWN0IGV2ZW4gdGhvdWdoIHdlIGFwcGVhciB0byBiZSBhY2NvdW50aW5nDQotCSAqIG9ubHkg Zm9yIHRoZSBpdGVtIGFuZCBub3QgZm9yIGl0cyBsaW5lIHBvaW50ZXIuDQorCSAqIG9ubHkgZm9y IHRoZSBpdGVtIGFuZCBub3QgZm9yIGl0cyBsaW5lIHBvaW50ZXIuICBUaGUgY29kZWQgaXRlbSBz aXplIGlzDQorCSAqIHVzZWQ7IGEgcG9zdGluZy1saXN0IHNwbGl0IGFkZGl0aW9uYWxseSBjaGFu Z2VzIHRoZSBwb3N0aW5nIHR1cGxlJ3MNCisJICogc2l6ZSwgYnV0IHRoYXQgY2FuIG9ubHkgc2hy aW5rIG9yIGtlZXAgZnJlZSBzcGFjZSAodGhlIG5ldyBwb3N0aW5nIGhhcw0KKwkgKiBvbmUgZmV3 ZXIgVElEJ3Mgd29ydGggb2Ygcm9vbSByZXVzZWQgYnkgbmV3aXRlbSksIHNvIHRoZSBpdGVtIGZp dCB0ZXN0DQorCSAqIHJlbWFpbnMgYSBzYWZlIHVwcGVyIGJvdW5kLg0KIAkgKi8NCi0JaWYgKFBh Z2VHZXRGcmVlU3BhY2UocGFnZSkgPCBpdGVtc3opDQorCWlmIChQYWdlR2V0RnJlZVNwYWNlKHBh Z2UpIDwgY29kZWRpdGVtc3opDQogCXsNCiAJCUJ1ZmZlcgkJcmJ1ZjsNCiANCiAJCUFzc2VydCgh c3BsaXRfb25seV9wYWdlKTsNCiANCisJCWlmIChjb2RlZGl0dXAgIT0gaXR1cCkNCisJCQlwZnJl ZShjb2RlZGl0dXApOw0KKw0KIAkJLyogc3BsaXQgdGhlIGJ1ZmZlciBpbnRvIGxlZnQgYW5kIHJp Z2h0IGhhbHZlcyAqLw0KIAkJcmJ1ZiA9IF9idF9zcGxpdChyZWwsIGhlYXByZWwsIGl0dXBfa2V5 LCBidWYsIGNidWYsIG5ld2l0ZW1vZmYsIGl0ZW1zeiwNCiAJCQkJCQkgaXR1cCwgb3JpZ2l0dXAs IG5wb3N0aW5nLCBwb3N0aW5nb2ZmKTsNCkBAIC0xMjk1LDkgKzEzMzUsMjUgQEAgX2J0X2luc2Vy dG9ucGcoUmVsYXRpb24gcmVsLA0KIAkJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7DQogDQogCQlpZiAo cG9zdGluZ29mZiAhPSAwKQ0KLQkJCW1lbWNweShvcG9zdGluZywgbnBvc3RpbmcsIE1BWEFMSUdO KEluZGV4VHVwbGVTaXplKG5wb3N0aW5nKSkpOw0KKwkJew0KKwkJCWlmIChwYWdlcHJlZml4KQ0K KwkJCXsNCisJCQkJLyoNCisJCQkJICogVGhlIGV4aXN0aW5nIHBvc3RpbmcgaXMgc3RvcmVkIGNv ZGVkOyByZXBsYWNlIGl0cyBzbG90IChhdA0KKwkJCQkgKiB0aGUgb2Zmc2V0IGp1c3QgYmVmb3Jl IG5ld2l0ZW1vZmYsIHNpbmNlIG5ld2l0ZW1vZmYgd2FzDQorCQkJCSAqIGFkdmFuY2VkIHBhc3Qg aXQgYWJvdmUpIHdpdGggdGhlIGNvZGVkIG5ldyBwb3N0aW5nIChlbmNvZGVkDQorCQkJCSAqIGJl Zm9yZSB0aGUgY3JpdGljYWwgc2VjdGlvbiksIHdob3NlIHNpemUgbWF5IGRpZmZlci4NCisJCQkJ ICovDQorCQkJCWlmICghUGFnZUluZGV4VHVwbGVPdmVyd3JpdGUocGFnZSwgT2Zmc2V0TnVtYmVy UHJldihuZXdpdGVtb2ZmKSwNCisJCQkJCQkJCQkJCSBjb2RlZG5wb3N0aW5nLCBJbmRleFR1cGxl U2l6ZShjb2RlZG5wb3N0aW5nKSkpDQorCQkJCQllbG9nKFBBTklDLCAiZmFpbGVkIHRvIG92ZXJ3 cml0ZSBwb3N0aW5nIGxpc3QgaW4gYmxvY2sgJXUgaW4gaW5kZXggXCIlc1wiIiwNCisJCQkJCQkg QnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7 DQorCQkJfQ0KKwkJCWVsc2UNCisJCQkJbWVtY3B5KG9wb3N0aW5nLCBucG9zdGluZywgTUFYQUxJ R04oSW5kZXhUdXBsZVNpemUobnBvc3RpbmcpKSk7DQorCQl9DQogDQotCQlpZiAoUGFnZUFkZEl0 ZW0ocGFnZSwgaXR1cCwgaXRlbXN6LCBuZXdpdGVtb2ZmLCBmYWxzZSwgZmFsc2UpID09IEludmFs aWRPZmZzZXROdW1iZXIpDQorCQlpZiAoUGFnZUFkZEl0ZW0ocGFnZSwgY29kZWRpdHVwLCBjb2Rl ZGl0ZW1zeiwgbmV3aXRlbW9mZiwgZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVy KQ0KIAkJCWVsb2coUEFOSUMsICJmYWlsZWQgdG8gYWRkIG5ldyBpdGVtIHRvIGJsb2NrICV1IGlu IGluZGV4IFwiJXNcIiIsDQogCQkJCSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpLCBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpKTsNCiANCkBAIC0xMzgxLDggKzE0MzcsMzAgQEAgX2J0X2lu c2VydG9ucGcoUmVsYXRpb24gcmVsLA0KIAkJCQl9DQogCQkJfQ0KIA0KLQkJCVhMb2dSZWdpc3Rl ckJ1ZmZlcigwLCBidWYsIFJFR0JVRl9TVEFOREFSRCk7DQotCQkJaWYgKHBvc3RpbmdvZmYgPT0g MCkNCisJCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMCwgYnVmLA0KKwkJCQkJCQkgICBSRUdCVUZfU1RB TkRBUkQgfA0KKwkJCQkJCQkgICAoKHBhZ2VwcmVmaXggJiYgcG9zdGluZ29mZiAhPSAwKSA/IFJF R0JVRl9GT1JDRV9JTUFHRSA6IDApKTsNCisJCQlpZiAocGFnZXByZWZpeCAmJiBwb3N0aW5nb2Zm ICE9IDApDQorCQkJew0KKwkJCQkvKg0KKwkJCQkgKiBBIHBvc3RpbmctbGlzdCBzcGxpdCBvbiBh IHByZWZpeCBwYWdlIHJld3JpdGVzIGFuIGV4aXN0aW5nDQorCQkJCSAqIGNvZGVkIHBvc3Rpbmcg YW5kIGFkZHMgYSBjb2RlZCBpdGVtOyByYXRoZXIgdGhhbiB0ZWFjaCByZWRvIHRvDQorCQkJCSAq IHJlLWNvZGUgYm90aCwgZm9yY2UgYSBmdWxsLXBhZ2UgaW1hZ2UgKHRoaXMgaXMgYSByYXJlIGNh c2UpLg0KKwkJCQkgKiBwb3N0aW5nb2ZmIGlzIHN0aWxsIHJlY29yZGVkIGZvciB0aGUgcmVjb3Jk IGZvcm1hdC4NCisJCQkJICovDQorCQkJCXVwb3N0aW5nb2ZmID0gcG9zdGluZ29mZjsNCisJCQkJ WExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCAmdXBvc3RpbmdvZmYsIHNpemVvZih1aW50MTYpKTsNCisJ CQl9DQorCQkJZWxzZSBpZiAocGFnZXByZWZpeCkNCisJCQl7DQorCQkJCS8qDQorCQkJCSAqIFNp bXBsZSBpbnNlcnQgb24gYSBwcmVmaXggcGFnZTogbG9nIHRoZSBDT0RFRCBpdGVtIGJ5dGVzIGFz DQorCQkJCSAqIHRoZXkgd2VyZSBwbGFjZWQgb24gdGhlIHBhZ2UsIHNvIHJlZG8gYWRkcyB0aGVt IHZlcmJhdGltIGF0DQorCQkJCSAqIG5ld2l0ZW1vZmYgLS0gbm8gZnVsbC1wYWdlIGltYWdlIG5l ZWRlZCwgYW5kIGJ5dGUtaWRlbnRpY2FsLg0KKwkJCQkgKi8NCisJCQkJWExvZ1JlZ2lzdGVyQnVm RGF0YSgwLCAoY2hhciAqKSBjb2RlZGl0dXAsIEluZGV4VHVwbGVTaXplKGNvZGVkaXR1cCkpOw0K KwkJCX0NCisJCQllbHNlIGlmIChwb3N0aW5nb2ZmID09IDApDQogCQkJew0KIAkJCQkvKiBKdXN0 IGxvZyBpdHVwIGZyb20gY2FsbGVyICovDQogCQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgaXR1 cCwgSW5kZXhUdXBsZVNpemUoaXR1cCkpOw0KQEAgLTE0MTgsNiArMTQ5NiwxMSBAQCBfYnRfaW5z ZXJ0b25wZyhSZWxhdGlvbiByZWwsDQogDQogCQlFTkRfQ1JJVF9TRUNUSU9OKCk7DQogDQorCQlp ZiAoY29kZWRpdHVwICE9IGl0dXApDQorCQkJcGZyZWUoY29kZWRpdHVwKTsNCisJCWlmIChjb2Rl ZG5wb3N0aW5nICE9IE5VTEwgJiYgY29kZWRucG9zdGluZyAhPSBucG9zdGluZykNCisJCQlwZnJl ZShjb2RlZG5wb3N0aW5nKTsNCisNCiAJCS8qIFJlbGVhc2Ugc3Vic2lkaWFyeSBidWZmZXJzICov DQogCQlpZiAoQnVmZmVySXNWYWxpZChtZXRhYnVmKSkNCiAJCQlfYnRfcmVsYnVmKHJlbCwgbWV0 YWJ1Zik7DQpAQCAtMTUwNiw2ICsxNTg5LDIyIEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJl bGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwNCiAJSXRl bUlkCQlpdGVtaWQ7DQogCUluZGV4VHVwbGUJZmlyc3RyaWdodCwNCiAJCQkJbGVmdGhpZ2hrZXk7 DQorCUJUSXRlbUJ1ZglmcmJ1ZjsJCQkvKiBkZWNvZGUgc2NyYXRjaCBmb3IgZmlyc3RyaWdodCAq Lw0KKwlCVEl0ZW1CdWYJbGxidWY7CQkJLyogZGVjb2RlIHNjcmF0Y2ggZm9yIGxhc3RsZWZ0ICov DQorCUluZGV4VHVwbGUgKmxlZnRpdGVtcyA9IE5VTEw7CS8qIGxlYWY6IHBsYWluIGl0ZW1zIGZv ciB0aGUgbGVmdCBoYWxmICovDQorCUluZGV4VHVwbGUgKnJpZ2h0aXRlbXMgPSBOVUxMOwkvKiBs ZWFmOiBwbGFpbiBpdGVtcyBmb3IgdGhlIHJpZ2h0IGhhbGYgKi8NCisJaW50CQkJbmxlZnQgPSAw Ow0KKwlpbnQJCQlucmlnaHQgPSAwOw0KKwlJbmRleFR1cGxlCXJpZ2h0aGlnaGtleSA9IE5VTEw7 CS8qIGxlYWYgcmlnaHQgaGFsZidzIGhpZ2gga2V5IChOVUxMPXJpZ2h0bW9zdCkgKi8NCisJY29u c3QgY2hhciAqb3JpZ3ByZWZpeCA9IE5VTEw7DQorCVNpemUJCW9yaWdwcmVmaXhsZW4gPSAwOw0K KwljaGFyCQlsZWZ0cHJlZml4W0JUUkVFX1BSRUZJWF9NQVhdOwkvKiBjaG9zZW4gcHJlZml4IG9m IGVhY2ggbGVhZiBoYWxmICovDQorCWNoYXIJCXJpZ2h0cHJlZml4W0JUUkVFX1BSRUZJWF9NQVhd Ow0KKwlTaXplCQlsZWZ0cHJlZml4bGVuID0gMDsNCisJU2l6ZQkJcmlnaHRwcmVmaXhsZW4gPSAw Ow0KKwljaGFyCSAgICpyaWdodHdhbGJ1ZiA9IE5VTEw7CS8qIHBhY2tlZCByaWdodC1wYWdlIFdB TCBwYXlsb2FkICovDQorCVNpemUJCXJpZ2h0d2FsYnVmbGVuID0gMDsNCisJYm9vbAkJZm9yY2Vf cmZwaSA9IGZhbHNlOwkvKiBjYXJyeSB0aGUgcmlnaHQgcGFnZSBhcyBhIGZvcmNlZCBpbWFnZSAq Lw0KIAlPZmZzZXROdW1iZXIgZmlyc3RyaWdodG9mZjsNCiAJT2Zmc2V0TnVtYmVyIGFmdGVybGVm dG9mZiwNCiAJCQkJYWZ0ZXJyaWdodG9mZiwNCkBAIC0xNTc1LDcgKzE2NzQsNyBAQCBfYnRfc3Bs aXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXks IEJ1ZmZlciBidWYsDQogCSAqIGFuZCBIQVNfR0FSQkFHRSBmbGFncy4NCiAJICovDQogCWxvcGFx dWUtPmJ0cG9fZmxhZ3MgPSBvb3BhcXVlLT5idHBvX2ZsYWdzOw0KLQlsb3BhcXVlLT5idHBvX2Zs YWdzICY9IH4oQlRQX1JPT1QgfCBCVFBfU1BMSVRfRU5EIHwgQlRQX0hBU19HQVJCQUdFKTsNCisJ bG9wYXF1ZS0+YnRwb19mbGFncyAmPSB+KEJUUF9ST09UIHwgQlRQX1NQTElUX0VORCB8IEJUUF9I QVNfR0FSQkFHRSB8IEJUUF9QUkVGSVgpOw0KIAkvKiBzZXQgZmxhZyBpbiBsZWZ0cGFnZSBpbmRp Y2F0aW5nIHRoYXQgcmlnaHRwYWdlIGhhcyBubyBkb3dubGluayB5ZXQgKi8NCiAJbG9wYXF1ZS0+ YnRwb19mbGFncyB8PSBCVFBfSU5DT01QTEVURV9TUExJVDsNCiAJbG9wYXF1ZS0+YnRwb19wcmV2 ID0gb29wYXF1ZS0+YnRwb19wcmV2Ow0KQEAgLTE2NTAsNiArMTc0OSw4IEBAIF9idF9zcGxpdChS ZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVm ZmVyIGJ1ZiwNCiAJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQob3JpZ3BhZ2UsIGZpcnN0cmlnaHRv ZmYpOw0KIAkJaXRlbXN6ID0gSXRlbUlkR2V0TGVuZ3RoKGl0ZW1pZCk7DQogCQlmaXJzdHJpZ2h0 ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKG9yaWdwYWdlLCBpdGVtaWQpOw0KKwkJaWYgKFBf SEFTUFJFRklYKG9vcGFxdWUpKQ0KKwkJCWZpcnN0cmlnaHQgPSBfYnRfcHJlZml4X2RlY29kZShv cmlncGFnZSwgZmlyc3RyaWdodCwgJmZyYnVmKTsNCiAJCWlmIChmaXJzdHJpZ2h0b2ZmID09IG9y aWdwYWdlcG9zdGluZ29mZikNCiAJCQlmaXJzdHJpZ2h0ID0gbnBvc3Rpbmc7DQogCX0NCkBAIC0x NjczLDYgKzE3NzQsOCBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVs LCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQogCQkJQXNzZXJ0KGxhc3RsZWZ0 b2ZmID49IFBfRklSU1REQVRBS0VZKG9vcGFxdWUpKTsNCiAJCQlpdGVtaWQgPSBQYWdlR2V0SXRl bUlkKG9yaWdwYWdlLCBsYXN0bGVmdG9mZik7DQogCQkJbGFzdGxlZnQgPSAoSW5kZXhUdXBsZSkg UGFnZUdldEl0ZW0ob3JpZ3BhZ2UsIGl0ZW1pZCk7DQorCQkJaWYgKFBfSEFTUFJFRklYKG9vcGFx dWUpKQ0KKwkJCQlsYXN0bGVmdCA9IF9idF9wcmVmaXhfZGVjb2RlKG9yaWdwYWdlLCBsYXN0bGVm dCwgJmxsYnVmKTsNCiAJCQlpZiAobGFzdGxlZnRvZmYgPT0gb3JpZ3BhZ2Vwb3N0aW5nb2ZmKQ0K IAkJCQlsYXN0bGVmdCA9IG5wb3N0aW5nOw0KIAkJfQ0KQEAgLTE3MTIsNyArMTgxNSwxMSBAQCBf YnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1 cF9rZXksIEJ1ZmZlciBidWYsDQogCX0NCiANCiAJLyoNCi0JICogQWRkIG5ldyBoaWdoIGtleSB0 byBsZWZ0cGFnZQ0KKwkgKiBBZGQgbmV3IGhpZ2gga2V5IHRvIGxlZnRwYWdlLiAgRm9yIGEgbGVh ZiBzcGxpdCB0aGUgbGVmdCBoYWxmIGlzIGJ1aWx0DQorCSAqIGFzIGEgd2hvbGUgYmVsb3cgKHNv IGl0IGNhbiBiZSBwcmVmaXgtY29tcHJlc3NlZCBmcm9tIHRoZSBzdGFydCwgd2hpY2gNCisJICog YSBwbGFpbiBpbmNyZW1lbnRhbCBidWlsZCBjYW5ub3QgcmVwcmVzZW50IHdoZW4gdGhlIHBhZ2Ug aG9sZHMgbW9yZQ0KKwkgKiBsb2dpY2FsIGRhdGEgdGhhbiBmaXRzIHBsYWluKTsgdGhlIGhpZ2gg a2V5IGlzIHBhc3NlZCB0byB0aGUgYnVpbGRlcg0KKwkgKiB0aGVuLiAgSW50ZXJuYWwgaGFsdmVz IGFyZSBidWlsdCBpbmNyZW1lbnRhbGx5IGhlcmUgYXMgYmVmb3JlLg0KIAkgKi8NCiAJYWZ0ZXJs ZWZ0b2ZmID0gUF9ISUtFWTsNCiANCkBAIC0xNzIwLDExICsxODI3LDIzIEBAIF9idF9zcGxpdChS ZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVm ZmVyIGJ1ZiwNCiAJQXNzZXJ0KEJUcmVlVHVwbGVHZXROQXR0cyhsZWZ0aGlnaGtleSwgcmVsKSA8 PQ0KIAkJICAgSW5kZXhSZWxhdGlvbkdldE51bWJlck9mS2V5QXR0cmlidXRlcyhyZWwpKTsNCiAJ QXNzZXJ0KGl0ZW1zeiA9PSBNQVhBTElHTihJbmRleFR1cGxlU2l6ZShsZWZ0aGlnaGtleSkpKTsN Ci0JaWYgKFBhZ2VBZGRJdGVtKGxlZnRwYWdlLCBsZWZ0aGlnaGtleSwgaXRlbXN6LCBhZnRlcmxl ZnRvZmYsIGZhbHNlLCBmYWxzZSkgPT0gSW52YWxpZE9mZnNldE51bWJlcikNCi0JCWVsb2coRVJS T1IsICJmYWlsZWQgdG8gYWRkIGhpZ2gga2V5IHRvIHRoZSBsZWZ0IHNpYmxpbmciDQotCQkJICIg d2hpbGUgc3BsaXR0aW5nIGJsb2NrICV1IG9mIGluZGV4IFwiJXNcIiIsDQotCQkJIG9yaWdwYWdl bnVtYmVyLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsNCi0JYWZ0ZXJsZWZ0b2ZmID0g T2Zmc2V0TnVtYmVyTmV4dChhZnRlcmxlZnRvZmYpOw0KKwlpZiAoaXNsZWFmKQ0KKwl7DQorCQkv KiBUaGUgYnVpbGRlciBuZWVkcyBhIHN0YWJsZSBjb3B5OyBsZWZ0aGlnaGtleSBwb2ludHMgaW50 byB3b3Jrc3BhY2UuICovDQorCQlsZWZ0aGlnaGtleSA9IENvcHlJbmRleFR1cGxlKGxlZnRoaWdo a2V5KTsNCisJCWxlZnRpdGVtcyA9IHBhbGxvY19hcnJheShJbmRleFR1cGxlLCBtYXhvZmYgKyAy KTsNCisJCXJpZ2h0aXRlbXMgPSBwYWxsb2NfYXJyYXkoSW5kZXhUdXBsZSwgbWF4b2ZmICsgMik7 DQorCQlpZiAoUF9IQVNQUkVGSVgob29wYXF1ZSkpDQorCQkJb3JpZ3ByZWZpeCA9IF9idF9wYWdl X2dldF9wcmVmaXgob3JpZ3BhZ2UsICZvcmlncHJlZml4bGVuKTsNCisJfQ0KKwllbHNlDQorCXsN CisJCWlmIChQYWdlQWRkSXRlbShsZWZ0cGFnZSwgbGVmdGhpZ2hrZXksIGl0ZW1zeiwgYWZ0ZXJs ZWZ0b2ZmLCBmYWxzZSwgZmFsc2UpID09IEludmFsaWRPZmZzZXROdW1iZXIpDQorCQkJZWxvZyhF UlJPUiwgImZhaWxlZCB0byBhZGQgaGlnaCBrZXkgdG8gdGhlIGxlZnQgc2libGluZyINCisJCQkJ ICIgd2hpbGUgc3BsaXR0aW5nIGJsb2NrICV1IG9mIGluZGV4IFwiJXNcIiIsDQorCQkJCSBvcmln cGFnZW51bWJlciwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7DQorCQlhZnRlcmxlZnRv ZmYgPSBPZmZzZXROdW1iZXJOZXh0KGFmdGVybGVmdG9mZik7DQorCX0NCiANCiAJLyoNCiAJICog QWNxdWlyZSBhIG5ldyByaWdodCBwYWdlIHRvIHNwbGl0IGludG8sIG5vdyB0aGF0IGxlZnQgcGFn ZSBoYXMgYSBuZXcNCkBAIC0xNzY1LDcgKzE4ODQsNyBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVs LCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQog CSAqIGFuZCBIQVNfR0FSQkFHRSBmbGFncy4NCiAJICovDQogCXJvcGFxdWUtPmJ0cG9fZmxhZ3Mg PSBvb3BhcXVlLT5idHBvX2ZsYWdzOw0KLQlyb3BhcXVlLT5idHBvX2ZsYWdzICY9IH4oQlRQX1JP T1QgfCBCVFBfU1BMSVRfRU5EIHwgQlRQX0hBU19HQVJCQUdFKTsNCisJcm9wYXF1ZS0+YnRwb19m bGFncyAmPSB+KEJUUF9ST09UIHwgQlRQX1NQTElUX0VORCB8IEJUUF9IQVNfR0FSQkFHRSB8IEJU UF9QUkVGSVgpOw0KIAlyb3BhcXVlLT5idHBvX3ByZXYgPSBvcmlncGFnZW51bWJlcjsNCiAJcm9w YXF1ZS0+YnRwb19uZXh0ID0gb29wYXF1ZS0+YnRwb19uZXh0Ow0KIAlyb3BhcXVlLT5idHBvX2xl dmVsID0gb29wYXF1ZS0+YnRwb19sZXZlbDsNCkBAIC0xNzgyLDIxICsxOTAxLDI1IEBAIF9idF9z cGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tl eSwgQnVmZmVyIGJ1ZiwNCiANCiAJaWYgKCFpc3JpZ2h0bW9zdCkNCiAJew0KLQkJSW5kZXhUdXBs ZQlyaWdodGhpZ2hrZXk7DQorCQlJdGVtSWQJCWhpaXRlbWlkID0gUGFnZUdldEl0ZW1JZChvcmln cGFnZSwgUF9ISUtFWSk7DQorCQlTaXplCQloaWl0ZW1zeiA9IEl0ZW1JZEdldExlbmd0aChoaWl0 ZW1pZCk7DQorCQlJbmRleFR1cGxlCWhpa2V5ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKG9y aWdwYWdlLCBoaWl0ZW1pZCk7DQogDQotCQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKG9yaWdwYWdl LCBQX0hJS0VZKTsNCi0JCWl0ZW1zeiA9IEl0ZW1JZEdldExlbmd0aChpdGVtaWQpOw0KLQkJcmln aHRoaWdoa2V5ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKG9yaWdwYWdlLCBpdGVtaWQpOw0K LQkJQXNzZXJ0KEJUcmVlVHVwbGVHZXROQXR0cyhyaWdodGhpZ2hrZXksIHJlbCkgPiAwKTsNCi0J CUFzc2VydChCVHJlZVR1cGxlR2V0TkF0dHMocmlnaHRoaWdoa2V5LCByZWwpIDw9DQorCQlBc3Nl cnQoQlRyZWVUdXBsZUdldE5BdHRzKGhpa2V5LCByZWwpID4gMCk7DQorCQlBc3NlcnQoQlRyZWVU dXBsZUdldE5BdHRzKGhpa2V5LCByZWwpIDw9DQogCQkJICAgSW5kZXhSZWxhdGlvbkdldE51bWJl ck9mS2V5QXR0cmlidXRlcyhyZWwpKTsNCi0JCWlmIChQYWdlQWRkSXRlbShyaWdodHBhZ2UsIHJp Z2h0aGlnaGtleSwgaXRlbXN6LCBhZnRlcnJpZ2h0b2ZmLCBmYWxzZSwgZmFsc2UpID09IEludmFs aWRPZmZzZXROdW1iZXIpDQorCQlpZiAoaXNsZWFmKQ0KKwkJCXJpZ2h0aGlnaGtleSA9IENvcHlJ bmRleFR1cGxlKGhpa2V5KTsJLyogc3RhYmxlOiBvcmlncGFnZSBpcw0KKwkJCQkJCQkJCQkJCQkJ ICogb3ZlcndyaXR0ZW4gYnkgdGhlIGxlZnQNCisJCQkJCQkJCQkJCQkJCSAqIGhhbGYgYmVmb3Jl IFdBTCBsb2dnaW5nICovDQorCQllbHNlDQogCQl7DQotCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0 byBhZGQgaGlnaCBrZXkgdG8gdGhlIHJpZ2h0IHNpYmxpbmciDQotCQkJCSAiIHdoaWxlIHNwbGl0 dGluZyBibG9jayAldSBvZiBpbmRleCBcIiVzXCIiLA0KLQkJCQkgb3JpZ3BhZ2VudW1iZXIsIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOw0KKwkJCWlmIChQYWdlQWRkSXRlbShyaWdodHBh Z2UsIGhpa2V5LCBoaWl0ZW1zeiwgYWZ0ZXJyaWdodG9mZiwgZmFsc2UsIGZhbHNlKSA9PSBJbnZh bGlkT2Zmc2V0TnVtYmVyKQ0KKwkJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGFkZCBoaWdoIGtl eSB0byB0aGUgcmlnaHQgc2libGluZyINCisJCQkJCSAiIHdoaWxlIHNwbGl0dGluZyBibG9jayAl dSBvZiBpbmRleCBcIiVzXCIiLA0KKwkJCQkJIG9yaWdwYWdlbnVtYmVyLCBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpKTsNCisJCQlhZnRlcnJpZ2h0b2ZmID0gT2Zmc2V0TnVtYmVyTmV4dChh ZnRlcnJpZ2h0b2ZmKTsNCiAJCX0NCi0JCWFmdGVycmlnaHRvZmYgPSBPZmZzZXROdW1iZXJOZXh0 KGFmdGVycmlnaHRvZmYpOw0KIAl9DQogDQogCS8qDQpAQCAtMTgxMyw3ICsxOTM2LDIxIEBAIF9i dF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVw X2tleSwgQnVmZmVyIGJ1ZiwNCiAJICoNCiAJICogTm90ZTogd2UgKm11c3QqIGluc2VydCBhdCBs ZWFzdCB0aGUgcmlnaHQgcGFnZSdzIGl0ZW1zIGluIGl0ZW0tbnVtYmVyDQogCSAqIG9yZGVyLCBm b3IgdGhlIGJlbmVmaXQgb2YgX2J0X3Jlc3RvcmVfcGFnZSgpLg0KKwkgKg0KKwkgKiBBIGxlYWYg c3BsaXQgYnVpbGRzIGVhY2ggaGFsZiBhcyBhIHdob2xlIHBhZ2UgYmVsb3cgKHNvIGl0IGNhbiBi ZQ0KKwkgKiBwcmVmaXgtY29tcHJlc3NlZCBmcm9tIHRoZSBzdGFydCksIHdoaWNoIHJlZG8gbXVz dCByZXByb2R1Y2UgYnl0ZSBmb3INCisJICogYnl0ZS4gIFRvIGtlZXAgdGhlIHByaW1hcnkgYW5k IHJlZG8gaW4gbG9jayBzdGVwLCBib3RoIGRlcml2ZSB0aGUNCisJICogc3BsaXQncyBwbGFpbiBp dGVtIGFycmF5cyBmcm9tIHRoZSBvcmlnaW5hbCBwYWdlIHRocm91Z2ggdGhlIHNpbmdsZQ0KKwkg KiBzaGFyZWQgcm91dGluZSBfYnRfc3BsaXRfbGVhZl9jb2xsZWN0KCk7IHRoZSBpbmNyZW1lbnRh bCBsb29wIGhlcmUNCisJICogaGFuZGxlcyBvbmx5IHRoZSBpbnRlcm5hbCAoIWlzbGVhZikgY2Fz ZS4NCiAJICovDQorCWlmIChpc2xlYWYpDQorCXsNCisJCV9idF9zcGxpdF9sZWFmX2NvbGxlY3Qo b3JpZ3BhZ2UsIGZpcnN0cmlnaHRvZmYsIG5ld2l0ZW1vZmYsIG5ld2l0ZW0sDQorCQkJCQkJCSAg IG5ld2l0ZW1vbmxlZnQsIG9yaWdwYWdlcG9zdGluZ29mZiwgbnBvc3RpbmcsDQorCQkJCQkJCSAg IGxlZnRpdGVtcywgJm5sZWZ0LCByaWdodGl0ZW1zLCAmbnJpZ2h0KTsNCisJfQ0KKwllbHNlDQog CWZvciAoaSA9IFBfRklSU1REQVRBS0VZKG9vcGFxdWUpOyBpIDw9IG1heG9mZjsgaSA9IE9mZnNl dE51bWJlck5leHQoaSkpDQogCXsNCiAJCUluZGV4VHVwbGUJZGF0YWl0ZW07DQpAQCAtMTgzNywy NCArMTk3NCwyMCBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBC VFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsDQogCQkJew0KIAkJCQlBc3NlcnQobmV3 aXRlbW9mZiA8PSBmaXJzdHJpZ2h0b2ZmKTsNCiAJCQkJaWYgKCFfYnRfcGdhZGR0dXAobGVmdHBh Z2UsIG5ld2l0ZW1zeiwgbmV3aXRlbSwgYWZ0ZXJsZWZ0b2ZmLA0KLQkJCQkJCQkJICBmYWxzZSkp DQotCQkJCXsNCisJCQkJCQkJCQkgICBmYWxzZSkpDQogCQkJCQllbG9nKEVSUk9SLCAiZmFpbGVk IHRvIGFkZCBuZXcgaXRlbSB0byB0aGUgbGVmdCBzaWJsaW5nIg0KIAkJCQkJCSAiIHdoaWxlIHNw bGl0dGluZyBibG9jayAldSBvZiBpbmRleCBcIiVzXCIiLA0KIAkJCQkJCSBvcmlncGFnZW51bWJl ciwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7DQotCQkJCX0NCiAJCQkJYWZ0ZXJsZWZ0 b2ZmID0gT2Zmc2V0TnVtYmVyTmV4dChhZnRlcmxlZnRvZmYpOw0KIAkJCX0NCiAJCQllbHNlDQog CQkJew0KIAkJCQlBc3NlcnQobmV3aXRlbW9mZiA+PSBmaXJzdHJpZ2h0b2ZmKTsNCiAJCQkJaWYg KCFfYnRfcGdhZGR0dXAocmlnaHRwYWdlLCBuZXdpdGVtc3osIG5ld2l0ZW0sIGFmdGVycmlnaHRv ZmYsDQotCQkJCQkJCQkgIGFmdGVycmlnaHRvZmYgPT0gbWludXNpbmZvZmYpKQ0KLQkJCQl7DQor CQkJCQkJCQkJICAgYWZ0ZXJyaWdodG9mZiA9PSBtaW51c2luZm9mZikpDQogCQkJCQllbG9nKEVS Uk9SLCAiZmFpbGVkIHRvIGFkZCBuZXcgaXRlbSB0byB0aGUgcmlnaHQgc2libGluZyINCiAJCQkJ CQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxvY2sgJXUgb2YgaW5kZXggXCIlc1wiIiwNCiAJCQkJCQkg b3JpZ3BhZ2VudW1iZXIsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOw0KLQkJCQl9DQog CQkJCWFmdGVycmlnaHRvZmYgPSBPZmZzZXROdW1iZXJOZXh0KGFmdGVycmlnaHRvZmYpOw0KIAkJ CX0NCiAJCX0NCkBAIC0xODYzLDI4ICsxOTk2LDI0IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWws IFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwNCiAJ CWlmIChpIDwgZmlyc3RyaWdodG9mZikNCiAJCXsNCiAJCQlpZiAoIV9idF9wZ2FkZHR1cChsZWZ0 cGFnZSwgaXRlbXN6LCBkYXRhaXRlbSwgYWZ0ZXJsZWZ0b2ZmLCBmYWxzZSkpDQotCQkJew0KIAkJ CQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGFkZCBvbGQgaXRlbSB0byB0aGUgbGVmdCBzaWJsaW5n Ig0KIAkJCQkJICIgd2hpbGUgc3BsaXR0aW5nIGJsb2NrICV1IG9mIGluZGV4IFwiJXNcIiIsDQog CQkJCQkgb3JpZ3BhZ2VudW1iZXIsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOw0KLQkJ CX0NCiAJCQlhZnRlcmxlZnRvZmYgPSBPZmZzZXROdW1iZXJOZXh0KGFmdGVybGVmdG9mZik7DQog CQl9DQogCQllbHNlDQogCQl7DQogCQkJaWYgKCFfYnRfcGdhZGR0dXAocmlnaHRwYWdlLCBpdGVt c3osIGRhdGFpdGVtLCBhZnRlcnJpZ2h0b2ZmLA0KLQkJCQkJCQkgIGFmdGVycmlnaHRvZmYgPT0g bWludXNpbmZvZmYpKQ0KLQkJCXsNCisJCQkJCQkJCSAgIGFmdGVycmlnaHRvZmYgPT0gbWludXNp bmZvZmYpKQ0KIAkJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGFkZCBvbGQgaXRlbSB0byB0aGUg cmlnaHQgc2libGluZyINCiAJCQkJCSAiIHdoaWxlIHNwbGl0dGluZyBibG9jayAldSBvZiBpbmRl eCBcIiVzXCIiLA0KIAkJCQkJIG9yaWdwYWdlbnVtYmVyLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWwpKTsNCi0JCQl9DQogCQkJYWZ0ZXJyaWdodG9mZiA9IE9mZnNldE51bWJlck5leHQoYWZ0 ZXJyaWdodG9mZik7DQogCQl9DQogCX0NCiANCi0JLyogSGFuZGxlIGNhc2Ugd2hlcmUgbmV3aXRl bSBnb2VzIGF0IHRoZSBlbmQgb2YgcmlnaHRwYWdlICovDQotCWlmIChpIDw9IG5ld2l0ZW1vZmYp DQorCS8qIEhhbmRsZSBjYXNlIHdoZXJlIG5ld2l0ZW0gZ29lcyBhdCB0aGUgZW5kIG9mIHJpZ2h0 cGFnZSAoaW50ZXJuYWwgb25seSkgKi8NCisJaWYgKCFpc2xlYWYgJiYgaSA8PSBuZXdpdGVtb2Zm KQ0KIAl7DQogCQkvKg0KIAkJICogQ2FuJ3QgaGF2ZSBuZXdpdGVtb25sZWZ0IGhlcmU7IHRoYXQg d291bGQgaW1wbHkgd2Ugd2VyZSB0b2xkIHRvIHB1dA0KQEAgLTE4OTMsMTUgKzIwMjIsOTMgQEAg X2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGl0 dXBfa2V5LCBCdWZmZXIgYnVmLA0KIAkJICovDQogCQlBc3NlcnQoIW5ld2l0ZW1vbmxlZnQgJiYg bmV3aXRlbW9mZiA9PSBtYXhvZmYgKyAxKTsNCiAJCWlmICghX2J0X3BnYWRkdHVwKHJpZ2h0cGFn ZSwgbmV3aXRlbXN6LCBuZXdpdGVtLCBhZnRlcnJpZ2h0b2ZmLA0KLQkJCQkJCSAgYWZ0ZXJyaWdo dG9mZiA9PSBtaW51c2luZm9mZikpDQotCQl7DQorCQkJCQkJCSAgIGFmdGVycmlnaHRvZmYgPT0g bWludXNpbmZvZmYpKQ0KIAkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gYWRkIG5ldyBpdGVtIHRv IHRoZSByaWdodCBzaWJsaW5nIg0KIAkJCQkgIiB3aGlsZSBzcGxpdHRpbmcgYmxvY2sgJXUgb2Yg aW5kZXggXCIlc1wiIiwNCiAJCQkJIG9yaWdwYWdlbnVtYmVyLCBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKTsNCi0JCX0NCiAJCWFmdGVycmlnaHRvZmYgPSBPZmZzZXROdW1iZXJOZXh0KGFm dGVycmlnaHRvZmYpOw0KIAl9DQogDQorCS8qDQorCSAqIExlYWYgaGFsdmVzIGFyZSBidWlsdCBh cyB3aG9sZSBwYWdlcyBub3csIHNvIHRoZXkgY2FuIGJlIHByZWZpeC0NCisJICogY29tcHJlc3Nl ZCBmcm9tIHRoZSBzdGFydCAoU3RyYXRlZ3kgMTogYSBwYWdlIGlzIGZhdWx0ZWQgaW50byB0aGUN CisJICogQlRQX1BSRUZJWCBmb3JtYXQgb25seSB3aGVuIGl0IGlzIHdyaXR0ZW4gd2hvbGUpLiAg VGhlIHBsYWluIGl0ZW0gYXJyYXlzDQorCSAqIHdlcmUgY29sbGVjdGVkIGFib3ZlIGJ5IF9idF9z cGxpdF9sZWFmX2NvbGxlY3QoKSwgdGhlIHNhbWUgcm91dGluZSByZWRvDQorCSAqIHVzZXMsIHNv IHRoZSBwcmltYXJ5IGFuZCByZWRvIGxheSBvdXQgaWRlbnRpY2FsIGJ5dGVzLg0KKwkgKi8NCisJ aWYgKGlzbGVhZikNCisJew0KKwkJX2J0X3NwbGl0X2xlYWZfaGFsZihyZWwsIGxlZnRwYWdlLCBs ZWZ0aGlnaGtleSwgbGVmdGl0ZW1zLCBubGVmdCwNCisJCQkJCQkJb3JpZ3ByZWZpeCwgb3JpZ3By ZWZpeGxlbiwNCisJCQkJCQkJbGVmdHByZWZpeCwgJmxlZnRwcmVmaXhsZW4pOw0KKwkJX2J0X3Nw bGl0X2xlYWZfaGFsZihyZWwsIHJpZ2h0cGFnZSwgcmlnaHRoaWdoa2V5LCByaWdodGl0ZW1zLCBu cmlnaHQsDQorCQkJCQkJCW9yaWdwcmVmaXgsIG9yaWdwcmVmaXhsZW4sDQorCQkJCQkJCXJpZ2h0 cHJlZml4LCAmcmlnaHRwcmVmaXhsZW4pOw0KKw0KKwkJLyoNCisJCSAqIEJ1aWxkIHRoZSByaWdo dCBwYWdlJ3MgV0FMIHBheWxvYWQgbm93LCBiZWZvcmUgdGhlIGNyaXRpY2FsIHNlY3Rpb24NCisJ CSAqIChwYWxsb2MgaXMgZGlzYWxsb3dlZCBpbnNpZGUgaXQpOiB0aGUgcmlnaHQgcHJlZml4IGJ5 dGVzLCB0aGVuIHRoZQ0KKwkJICogcmlnaHQgaGlnaCBrZXkgKHVubGVzcyByaWdodG1vc3QpLCB0 aGVuIHRoZSByaWdodCBoYWxmJ3MgcGxhaW4gaXRlbXMsDQorCQkgKiBlYWNoIE1BWEFMSUdOJ2Qs IGluIG9uZSBjb250aWd1b3VzIGJ1ZmZlciBsb2dnZWQgd2l0aCBhIHNpbmdsZSByZGF0YQ0KKwkJ ICogc2xvdC4gIEEgdmVyeSBjb21wcmVzc2libGUgcmlnaHQgaGFsZiB3aG9zZSBwbGFpbiBpdGVt cyB3b3VsZCBleGNlZWQNCisJCSAqIGEgcGFnZSBpcyBpbnN0ZWFkIGNhcnJpZWQgYXMgYSBmdWxs LXBhZ2UgaW1hZ2UgKHNldCBiZWxvdyksIHNvIHRoaXMNCisJCSAqIGJ1ZmZlciBpcyBib3VuZGVk Lg0KKwkJICovDQorCQlpZiAobGVmdHByZWZpeGxlbiA+IDAgfHwgcmlnaHRwcmVmaXhsZW4gPiAw IHx8IG9yaWdwcmVmaXhsZW4gPiAwKQ0KKwkJew0KKwkJCVNpemUJCXJvZmYgPSBNQVhBTElHTihy aWdodHByZWZpeGxlbik7DQorDQorCQkJaWYgKHJpZ2h0aGlnaGtleSAhPSBOVUxMKQ0KKwkJCQly b2ZmICs9IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKHJpZ2h0aGlnaGtleSkpOw0KKwkJCWZvciAo aW50IHJpID0gMDsgcmkgPCBucmlnaHQ7IHJpKyspDQorCQkJCXJvZmYgKz0gTUFYQUxJR04oSW5k ZXhUdXBsZVNpemUocmlnaHRpdGVtc1tyaV0pKTsNCisJCQlyaWdodHdhbGJ1ZiA9IHBhbGxvYyhN YXgocm9mZiwgMSkpOw0KKwkJCXJpZ2h0d2FsYnVmbGVuID0gcm9mZjsNCisNCisJCQkvKg0KKwkJ CSAqIERlY2lkZSAoYmVmb3JlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCBzaW5jZSB0aGUgaW5qZWN0 aW9uLXBvaW50DQorCQkJICogY2FjaGUgbG9hZCBjYW4gYWxsb2NhdGUpIHdoZXRoZXIgdG8gY2Fy cnkgdGhlIHJpZ2h0IHBhZ2UgYXMgYQ0KKwkJCSAqIGZvcmNlZCBmdWxsLXBhZ2UgaW1hZ2U6IG5v cm1hbGx5IG9ubHkgd2hlbiBpdHMgcGxhaW4gcGF5bG9hZA0KKwkJCSAqIHdvdWxkIGV4Y2VlZCBh IGJsb2NrLCBidXQgYSB0ZXN0IGNhbiBmb3JjZSB0aGUgb3RoZXJ3aXNlLXJhcmUNCisJCQkgKiBw YXRoIHdpdGggdGhlIG5idHJlZS1wcmVmaXgtZm9yY2UtcmZwaSBpbmplY3Rpb24gcG9pbnQuDQor CQkJICovDQorCQkJaWYgKHJpZ2h0d2FsYnVmbGVuID4gQkxDS1NaKQ0KKwkJCQlmb3JjZV9yZnBp ID0gdHJ1ZTsNCisjaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lOVFMNCisJCQllbHNlIGlmIChJU19J TkpFQ1RJT05fUE9JTlRfQVRUQUNIRUQoIm5idHJlZS1wcmVmaXgtZm9yY2UtcmZwaSIpKQ0KKwkJ CQlmb3JjZV9yZnBpID0gdHJ1ZTsNCisjZW5kaWYNCisNCisJCQlyb2ZmID0gMDsNCisJCQlpZiAo cmlnaHRwcmVmaXhsZW4gPiAwKQ0KKwkJCXsNCisJCQkJbWVtY3B5KHJpZ2h0d2FsYnVmLCByaWdo dHByZWZpeCwgcmlnaHRwcmVmaXhsZW4pOw0KKwkJCQlpZiAoTUFYQUxJR04ocmlnaHRwcmVmaXhs ZW4pICE9IHJpZ2h0cHJlZml4bGVuKQ0KKwkJCQkJbWVtc2V0KHJpZ2h0d2FsYnVmICsgcmlnaHRw cmVmaXhsZW4sIDAsDQorCQkJCQkJICAgTUFYQUxJR04ocmlnaHRwcmVmaXhsZW4pIC0gcmlnaHRw cmVmaXhsZW4pOw0KKwkJCQlyb2ZmICs9IE1BWEFMSUdOKHJpZ2h0cHJlZml4bGVuKTsNCisJCQl9 DQorCQkJaWYgKHJpZ2h0aGlnaGtleSAhPSBOVUxMKQ0KKwkJCXsNCisJCQkJU2l6ZQkJaHN6ID0g SW5kZXhUdXBsZVNpemUocmlnaHRoaWdoa2V5KTsNCisNCisJCQkJbWVtY3B5KHJpZ2h0d2FsYnVm ICsgcm9mZiwgcmlnaHRoaWdoa2V5LCBoc3opOw0KKwkJCQlpZiAoTUFYQUxJR04oaHN6KSAhPSBo c3opDQorCQkJCQltZW1zZXQocmlnaHR3YWxidWYgKyByb2ZmICsgaHN6LCAwLCBNQVhBTElHTiho c3opIC0gaHN6KTsNCisJCQkJcm9mZiArPSBNQVhBTElHTihoc3opOw0KKwkJCX0NCisJCQlmb3Ig KGludCByaSA9IDA7IHJpIDwgbnJpZ2h0OyByaSsrKQ0KKwkJCXsNCisJCQkJU2l6ZQkJcnN6ID0g SW5kZXhUdXBsZVNpemUocmlnaHRpdGVtc1tyaV0pOw0KKw0KKwkJCQltZW1jcHkocmlnaHR3YWxi dWYgKyByb2ZmLCByaWdodGl0ZW1zW3JpXSwgcnN6KTsNCisJCQkJaWYgKE1BWEFMSUdOKHJzeikg IT0gcnN6KQ0KKwkJCQkJbWVtc2V0KHJpZ2h0d2FsYnVmICsgcm9mZiArIHJzeiwgMCwgTUFYQUxJ R04ocnN6KSAtIHJzeik7DQorCQkJCXJvZmYgKz0gTUFYQUxJR04ocnN6KTsNCisJCQl9DQorCQl9 DQorCX0NCisNCiAJLyoNCiAJICogV2UgaGF2ZSB0byBncmFiIHRoZSBvcmlnaW5hbCByaWdodCBz aWJsaW5nIChpZiBhbnkpIGFuZCB1cGRhdGUgaXRzIHByZXYNCiAJICogbGluay4gIFdlIGFyZSBn dWFyYW50ZWVkIHRoYXQgdGhpcyBpcyBkZWFkbG9jay1mcmVlLCBzaW5jZSB3ZSBjb3VwbGUNCkBA IC0yMDA1LDE3ICsyMjEyLDcxIEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhl YXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwNCiAJCWlmIChwb3N0aW5n b2ZmICE9IDAgJiYgb3JpZ3BhZ2Vwb3N0aW5nb2ZmIDwgZmlyc3RyaWdodG9mZikNCiAJCQl4bHJl Yy5wb3N0aW5nb2ZmID0gcG9zdGluZ29mZjsNCiANCisJCS8qDQorCQkgKiBBIGxlYWYgc3BsaXQg dGhhdCBpbnZvbHZlcyBwcmVmaXggY29tcHJlc3Npb24gKGVpdGhlciBoYWxmIGVuZHMgdXANCisJ CSAqIGNvbXByZXNzZWQsIG9yIHRoZSBwcmUtc3BsaXQgcGFnZSB3YXMgY29tcHJlc3NlZCBzbyBp dHMgaXRlbXMgYXJlDQorCQkgKiBjb2RlZCkgaXMgcmVwbGF5ZWQgYnkgcmVidWlsZGluZyBib3Ro IGhhbHZlcyBmcm9tIHRoZSBwcmUtc3BsaXQgcGFnZSwNCisJCSAqIGV4YWN0bHkgYXMgdGhlIHBy aW1hcnkgZGlkLCByYXRoZXIgdGhhbiBieSByZXBsYXlpbmcgbG9nZ2VkIHR1cGxlcyAtLQ0KKwkJ ICogdGhlIGNvZGVkIHBoeXNpY2FsIGxheW91dCB3b3VsZCBub3QgbWF0Y2ggX2J0X3Jlc3RvcmVf cGFnZS4gIE5vDQorCQkgKiBmdWxsLXBhZ2UgaW1hZ2UgaXMgbmVlZGVkOyByZWRvIHJlY29uc3Ry dWN0cyB0aGUgcGxhaW4gaXRlbXMgZnJvbSB0aGUNCisJCSAqIG9yaWdpbmFsIHBhZ2UgKGJsb2Nr IDApIGFuZCBsYXlzIGVhY2ggaGFsZiBvdXQgY29kZWQgYWdhaW5zdCB0aGUNCisJCSAqIGNob3Nl biBwcmVmaXgsIHdob3NlIGxlbmd0aCBhbmQgYnl0ZXMgYXJlIGNhcnJpZWQgaW4gdGhlIHJlY29y ZC4NCisJCSAqLw0KKwkJeGxyZWMuZmxhZ3MgPSAwOw0KKwkJeGxyZWMubGVmdHByZWZpeGxlbiA9 IDA7DQorCQl4bHJlYy5yaWdodHByZWZpeGxlbiA9IDA7DQorCQlpZiAoaXNsZWFmICYmIChsZWZ0 cHJlZml4bGVuID4gMCB8fCByaWdodHByZWZpeGxlbiA+IDAgfHwgb3JpZ3ByZWZpeGxlbiA+IDAp KQ0KKwkJew0KKwkJCXhscmVjLmZsYWdzIHw9IFhMSF9TUExJVF9MRUFGUFJFRklYOw0KKwkJCXhs cmVjLmxlZnRwcmVmaXhsZW4gPSAodWludDgpIGxlZnRwcmVmaXhsZW47DQorCQkJeGxyZWMucmln aHRwcmVmaXhsZW4gPSAodWludDgpIHJpZ2h0cHJlZml4bGVuOw0KKw0KKwkJCS8qDQorCQkJICog VGhlIHJpZ2h0IGhhbGYgaXMgbm9ybWFsbHkgY2FycmllZCBhcyBpdHMgcGFja2VkIHBsYWluIHBh eWxvYWQNCisJCQkgKiAocmVkbyBsYXlzIGl0IG91dCBjb2RlZCksIGZhciBjaGVhcGVyIHRoYW4g YSBmdWxsLXBhZ2UgaW1hZ2UuDQorCQkJICogQnV0IGEgdmVyeSBjb21wcmVzc2libGUgcGFnZSBj YW4gaG9sZCBtb3JlIHBsYWluIGRhdGEgdGhhbiBmaXRzDQorCQkJICogaW4gb25lIHBhZ2U7IGZv cmNlX3JmcGkgKGRlY2lkZWQgYmVmb3JlIHRoZSBjcml0aWNhbCBzZWN0aW9uKQ0KKwkJCSAqIGNh cnJpZXMgdGhlIGNvZGVkIHJpZ2h0IHBhZ2UgYXMgYSBib3VuZGVkIGZ1bGwtcGFnZSBpbWFnZSBp bnN0ZWFkLg0KKwkJCSAqLw0KKwkJCWlmIChmb3JjZV9yZnBpKQ0KKwkJCQl4bHJlYy5mbGFncyB8 PSBYTEhfU1BMSVRfUkZQSTsNCisJCX0NCisNCiAJCVhMb2dCZWdpbkluc2VydCgpOw0KIAkJWExv Z1JlZ2lzdGVyRGF0YSgmeGxyZWMsIFNpemVPZkJ0cmVlU3BsaXQpOw0KIA0KIAkJWExvZ1JlZ2lz dGVyQnVmZmVyKDAsIGJ1ZiwgUkVHQlVGX1NUQU5EQVJEKTsNCi0JCVhMb2dSZWdpc3RlckJ1ZmZl cigxLCByYnVmLCBSRUdCVUZfV0lMTF9JTklUKTsNCisJCS8qDQorCQkgKiBUaGUgcmlnaHQgcGFn ZSBpcyByZWJ1aWx0IGZyb20gc2NyYXRjaCBpbiByZWRvLiAgT3JkaW5hcmlseSB0aGF0IGlzDQor CQkgKiBmcm9tIHRoZSBsb2dnZWQgdHVwbGUgcmVnaW9uIChSRUdCVUZfV0lMTF9JTklUKS4gIEEg cHJlZml4LWxlYWYgc3BsaXQNCisJCSAqIGluc3RlYWQgcmVidWlsZHMgaXQgZnJvbSBpdHMgbG9n Z2VkIHBsYWluIGl0ZW1zLCB1bmxlc3MgdGhvc2Ugd291bGQNCisJCSAqIG92ZXJmbG93IHRoZSBy ZWNvcmQgKFhMSF9TUExJVF9SRlBJKSwgaW4gd2hpY2ggY2FzZSB0aGUgY29kZWQgcGFnZSBpcw0K KwkJICogY2FycmllZCBhcyBhIGZvcmNlZCBmdWxsLXBhZ2UgaW1hZ2UuDQorCQkgKi8NCisJCVhM b2dSZWdpc3RlckJ1ZmZlcigxLCByYnVmLA0KKwkJCQkJCSAgICh4bHJlYy5mbGFncyAmIFhMSF9T UExJVF9SRlBJKSA/DQorCQkJCQkJICAgKFJFR0JVRl9TVEFOREFSRCB8IFJFR0JVRl9GT1JDRV9J TUFHRSkgOiBSRUdCVUZfV0lMTF9JTklUKTsNCiAJCS8qIExvZyBvcmlnaW5hbCByaWdodCBzaWJs aW5nLCBzaW5jZSB3ZSd2ZSBjaGFuZ2VkIGl0cyBwcmV2LXBvaW50ZXIgKi8NCiAJCWlmICghaXNy aWdodG1vc3QpDQogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDIsIHNidWYsIFJFR0JVRl9TVEFOREFS RCk7DQogCQlpZiAoIWlzbGVhZikNCiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIoMywgY2J1ZiwgUkVH QlVGX1NUQU5EQVJEKTsNCiANCisJCS8qDQorCQkgKiBGb3IgYSBwcmVmaXggbGVhZiBzcGxpdCwg Y2FycnkgZWFjaCBoYWxmJ3MgY2hvc2VuIHByZWZpeCBieXRlcywgYW5kDQorCQkgKiAodW5sZXNz IHRoZSByaWdodCBwYWdlIGlzIGNhcnJpZWQgYXMgYSBmdWxsLXBhZ2UgaW1hZ2UpIHRoZSByaWdo dA0KKwkJICogaGlnaCBrZXkgYW5kIHRoZSByaWdodCBoYWxmJ3MgUExBSU4gaXRlbXMgb24gYmxv Y2sgMSwgc28gcmVkbyBjYW4gbGF5DQorCQkgKiB0aGUgcmlnaHQgcGFnZSBvdXQgY29kZWQgd2l0 aG91dCBkZXBlbmRpbmcgb24gYmxvY2sgMCdzIHN0YXRlIChibG9jaw0KKwkJICogMCBtYXkgYmUg cmVzdG9yZWQgZnJvbSBhbiBhdXRvbWF0aWMgZnVsbC1wYWdlIGltYWdlKS4gIFRoZSBsZWZ0IGhh bGYNCisJCSAqIGlzIHJlYnVpbHQgaW4gcmVkbyBmcm9tIHRoZSBvcmlnaW5hbCBwYWdlIChibG9j ayAwKSB3aGVuIGl0IG5lZWRzDQorCQkgKiByZWRvLCBvciBmcm9tIGl0cyBvd24gRlBJIG90aGVy d2lzZSwgc28gdGhlIGxlZnQgaXRlbXMgYXJlIG5vdCBsb2dnZWQuDQorCQkgKi8NCisJCWlmICh4 bHJlYy5mbGFncyAmIFhMSF9TUExJVF9MRUFGUFJFRklYKQ0KKwkJew0KKwkJCWlmICghKHhscmVj LmZsYWdzICYgWExIX1NQTElUX1JGUEkpICYmIHJpZ2h0d2FsYnVmbGVuID4gMCkNCisJCQkJWExv Z1JlZ2lzdGVyQnVmRGF0YSgxLCByaWdodHdhbGJ1ZiwgcmlnaHR3YWxidWZsZW4pOw0KKwkJfQ0K Kw0KIAkJLyoNCiAJCSAqIExvZyB0aGUgbmV3IGl0ZW0sIGlmIGl0IHdhcyBpbnNlcnRlZCBvbiB0 aGUgbGVmdCBwYWdlLiAoSWYgaXQgd2FzDQogCQkgKiBwdXQgb24gdGhlIHJpZ2h0IHBhZ2UsIHdl IGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBXQUwgbG9nIGl0DQpAQCAtMjA2Myw2ICsyMzI0LDE0 IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2Vy dCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwNCiAJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgbGVmdGhp Z2hrZXksDQogCQkJCQkJCU1BWEFMSUdOKEluZGV4VHVwbGVTaXplKGxlZnRoaWdoa2V5KSkpOw0K IA0KKwkJLyoNCisJCSAqIEZvciBhIHByZWZpeCBsZWFmIHNwbGl0LCB0aGUgbGVmdCBoYWxmJ3Mg Y2hvc2VuIHByZWZpeCBieXRlcyBmb2xsb3cNCisJCSAqIHRoZSBoaWdoIGtleSBvbiBibG9jayAw IChyZWRvIHJlYWRzIG5ld2l0ZW0vb3JpZ25ld2l0ZW0sIHRoZW4gdGhlDQorCQkgKiBoaWdoIGtl eSwgdGhlbiB0aGlzIHByZWZpeCkuDQorCQkgKi8NCisJCWlmICgoeGxyZWMuZmxhZ3MgJiBYTEhf U1BMSVRfTEVBRlBSRUZJWCkgJiYgbGVmdHByZWZpeGxlbiA+IDApDQorCQkJWExvZ1JlZ2lzdGVy QnVmRGF0YSgwLCBsZWZ0cHJlZml4LCBsZWZ0cHJlZml4bGVuKTsNCisNCiAJCS8qDQogCQkgKiBM b2cgdGhlIGNvbnRlbnRzIG9mIHRoZSByaWdodCBwYWdlIGluIHRoZSBmb3JtYXQgdW5kZXJzdG9v ZCBieQ0KIAkJICogX2J0X3Jlc3RvcmVfcGFnZSgpLiAgVGhlIHdob2xlIHJpZ2h0IHBhZ2Ugd2ls bCBiZSByZWNyZWF0ZWQuDQpAQCAtMjA3MSwxMSArMjM0MCwxNCBAQCBfYnRfc3BsaXQoUmVsYXRp b24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBi dWYsDQogCQkgKiBzb21lIG5ldyBmdW5jIGluIHBhZ2UgQVBJLiAgTm90ZSB3ZSBvbmx5IHN0b3Jl IHRoZSB0dXBsZXMNCiAJCSAqIHRoZW1zZWx2ZXMsIGtub3dpbmcgdGhhdCB0aGV5IHdlcmUgaW5z ZXJ0ZWQgaW4gaXRlbS1udW1iZXIgb3JkZXINCiAJCSAqIGFuZCBzbyB0aGUgbGluZSBwb2ludGVy cyBjYW4gYmUgcmVjb25zdHJ1Y3RlZC4gIFNlZSBjb21tZW50cyBmb3INCi0JCSAqIF9idF9yZXN0 b3JlX3BhZ2UoKS4NCisJCSAqIF9idF9yZXN0b3JlX3BhZ2UoKS4gIEEgcHJlZml4LWNvbXByZXNz ZWQgbGVhZiBzcGxpdCBpbnN0ZWFkIHJlYnVpbGRzDQorCQkgKiB0aGUgcmlnaHQgcGFnZSBmcm9t IHRoZSBvcmlnaW5hbCBwYWdlIGluIHJlZG8gKHNlZSBYTEhfU1BMSVRfTEVBRlBSRUZJWCksDQor CQkgKiBzbyBpdHMgdHVwbGUgcmVnaW9uIGlzIG5vdCBsb2dnZWQuDQogCQkgKi8NCi0JCVhMb2dS ZWdpc3RlckJ1ZkRhdGEoMSwNCi0JCQkJCQkJKGNoYXIgKikgcmlnaHRwYWdlICsgKChQYWdlSGVh ZGVyKSByaWdodHBhZ2UpLT5wZF91cHBlciwNCi0JCQkJCQkJKChQYWdlSGVhZGVyKSByaWdodHBh Z2UpLT5wZF9zcGVjaWFsIC0gKChQYWdlSGVhZGVyKSByaWdodHBhZ2UpLT5wZF91cHBlcik7DQor CQlpZiAoISh4bHJlYy5mbGFncyAmIFhMSF9TUExJVF9MRUFGUFJFRklYKSkNCisJCQlYTG9nUmVn aXN0ZXJCdWZEYXRhKDEsDQorCQkJCQkJCQkoY2hhciAqKSByaWdodHBhZ2UgKyAoKFBhZ2VIZWFk ZXIpIHJpZ2h0cGFnZSktPnBkX3VwcGVyLA0KKwkJCQkJCQkJKChQYWdlSGVhZGVyKSByaWdodHBh Z2UpLT5wZF9zcGVjaWFsIC0gKChQYWdlSGVhZGVyKSByaWdodHBhZ2UpLT5wZF91cHBlcik7DQog DQogCQl4bGluZm8gPSBuZXdpdGVtb25sZWZ0ID8gWExPR19CVFJFRV9TUExJVF9MIDogWExPR19C VFJFRV9TUExJVF9SOw0KIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9CVFJFRV9JRCwgeGxpbmZv KTsNCkBAIC0yODIwLDcgKzMwOTIsMTUgQEAgX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZShS ZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXBSZWwsDQogCQlfYnRfYm90dG9tdXBkZWxfcGFzcyhy ZWwsIGJ1ZmZlciwgaGVhcFJlbCwgaW5zZXJ0c3RhdGUtPml0ZW1zeikpDQogCQlyZXR1cm47DQog DQotCS8qIFBlcmZvcm0gZGVkdXBsaWNhdGlvbiBwYXNzICh3aGVuIGVuYWJsZWQgYW5kIGluZGV4 LWlzLWFsbGVxdWFsaW1hZ2UpICovDQorCS8qDQorCSAqIFBlcmZvcm0gZGVkdXBsaWNhdGlvbiBw YXNzICh3aGVuIGVuYWJsZWQgYW5kIGluZGV4LWlzLWFsbGVxdWFsaW1hZ2UpLg0KKwkgKg0KKwkg KiBPbiBhIHByZWZpeC1jb21wcmVzc2VkIHBhZ2UgdGhlIHBhc3MgZGVjb2RlcyBpdGVtcyBhbmQg bGF5cyB0aGUgZGVkdXBlZA0KKwkgKiByZXN1bHQgb3V0IHBsYWluIGJlZm9yZSByZS1jb2Rpbmcg aXQ7IHRoZSBkZWNvZGVkIHNldCBjYW4gZXhjZWVkIG9uZQ0KKwkgKiBwYWdlIGV2ZW4gd2hlbiB0 aGUgY29kZWQgZm9ybSBmaXQsIGluIHdoaWNoIGNhc2UgdGhlIHBhc3MgYWJvcnRzIHdpdGhvdXQN CisJICogdG91Y2hpbmcgdGhlIHBhZ2UgYW5kIHdlIGZhbGwgdGhyb3VnaCB0byBzcGxpdCBpdC4g IFdoZW4gaXQgZG9lcyBmaXQsIHRoZQ0KKwkgKiByZWNvbXByZXNzZWQgcGFnZSdzIFdBTCByZXBs YXlzIHdpdGhvdXQgYSBmdWxsLXBhZ2UgaW1hZ2UuDQorCSAqLw0KIAlpZiAoQlRHZXREZWR1cGxp Y2F0ZUl0ZW1zKHJlbCkgJiYgaXR1cF9rZXktPmFsbGVxdWFsaW1hZ2UpDQogCQlfYnRfZGVkdXBf cGFzcyhyZWwsIGJ1ZmZlciwgaW5zZXJ0c3RhdGUtPml0dXAsIGluc2VydHN0YXRlLT5pdGVtc3os DQogCQkJCQkgICAoaW5kZXhVbmNoYW5nZWQgfHwgdW5pcXVlZHVwKSk7DQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHBhZ2UuYw0KaW5kZXggODNkNmQzNjdmODEuLmM3NTVlZmM4MWIwIDEwMDY0NA0K LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMNCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jDQpAQCAtMTIxMiwxMSArMTIxMiwyNiBAQCBfYnRf ZGVsaXRlbXNfdmFjdXVtKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwNCiAJaWYgKG5kZWxldGFi bGUgPiAwKQ0KIAkJUGFnZUluZGV4TXVsdGlEZWxldGUocGFnZSwgZGVsZXRhYmxlLCBuZGVsZXRh YmxlKTsNCiANCisJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOw0KKw0KKwkvKg0KKwkg KiBJZiBWQUNVVU0gZW1wdGllZCBhIHByZWZpeC1jb21wcmVzc2VkIGxlYWYgb2YgYWxsIGl0cyBk YXRhIGl0ZW1zLCBkcm9wDQorCSAqIHRoZSBQUkVGSVggaXRlbSB0b28gYW5kIGNsZWFyIEJUUF9Q UkVGSVg6IGFuIGVtcHR5IHBhZ2UgY2FycmllcyBubw0KKwkgKiBwcmVmaXgsIGFuZCBwYWdlIGRl bGV0aW9uIHJlbGllcyBvbiBhbiBlbXB0aWVkIGxlYWYgaG9sZGluZyBvbmx5IGl0cw0KKwkgKiBo aWdoIGtleSAobmJ0cGFnZS5jJ3MgX2J0X21hcmtfcGFnZV9oYWxmZGVhZCkuICBSZWNvcmRlZCBp biB0aGUgdmFjdXVtDQorCSAqIHJlY29yZCBzbyByZWRvIGRvZXMgdGhlIHNhbWUuDQorCSAqLw0K KwlpZiAoUF9IQVNQUkVGSVgob3BhcXVlKSAmJg0KKwkJUGFnZUdldE1heE9mZnNldE51bWJlcihw YWdlKSA9PSBCVFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSkNCisJew0KKwkJUGFnZUluZGV4VHVw bGVEZWxldGUocGFnZSwgQlRQYWdlR2V0UHJlZml4T2ZmKG9wYXF1ZSkpOw0KKwkJb3BhcXVlLT5i dHBvX2ZsYWdzICY9IH5CVFBfUFJFRklYOw0KKwl9DQorDQogCS8qDQogCSAqIFdlIGNhbiBjbGVh ciB0aGUgdmFjdXVtIGN5Y2xlIElEIHNpbmNlIHRoaXMgcGFnZSBoYXMgY2VydGFpbmx5IGJlZW4N CiAJICogcHJvY2Vzc2VkIGJ5IHRoZSBjdXJyZW50IHZhY3V1bSBzY2FuLg0KIAkgKi8NCi0Jb3Bh cXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOw0KIAlvcGFxdWUtPmJ0cG9fY3ljbGVpZCA9IDA7 DQogDQogCS8qDQpAQCAtMjI0NSw2ICsyMjYwLDIwIEBAIF9idF9tYXJrX3BhZ2VfaGFsZmRlYWQo UmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCdWZmZXIgbGVhZmJ1ZiwNCiAJb3BhcXVl ID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOw0KIAlvcGFxdWUtPmJ0cG9fZmxhZ3MgfD0gQlRQX0hB TEZfREVBRDsNCiANCisJLyoNCisJICogQSBwcmVmaXgtY29tcHJlc3NlZCBsZWFmIGJlaW5nIGRl bGV0ZWQgbWF5IHN0aWxsIGNhcnJ5IGl0cyBQUkVGSVggaXRlbQ0KKwkgKiAoZS5nLiBlbXB0aWVk IGJ5IHNpbXBsZSBkZWxldGlvbiwgd2hpY2ggZG9lcyBub3QgZHJvcCBpdCkuICBSZW1vdmUgaXQN CisJICogYW5kIGNsZWFyIEJUUF9QUkVGSVggc28gdGhlIHBhZ2UgaG9sZHMgb25seSBpdHMgaGln aCBrZXksIGFzIHRoZQ0KKwkgKiBoYWxmLWRlYWQgdHJhbnNpdGlvbiBiZWxvdyByZXF1aXJlcy4g IFJlZG8gKGJ0cmVlX3hsb2dfbWFya19wYWdlX2hhbGZkZWFkKQ0KKwkgKiByZWluaXRpYWxpemVz IHRoZSBwYWdlLCBzbyBpdCBuZWVkcyBubyBzZXBhcmF0ZSBoYW5kbGluZy4NCisJICovDQorCWlm IChQX0hBU1BSRUZJWChvcGFxdWUpICYmDQorCQlQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2Up ID09IEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKQ0KKwl7DQorCQlQYWdlSW5kZXhUdXBsZURl bGV0ZShwYWdlLCBCVFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSk7DQorCQlvcGFxdWUtPmJ0cG9f ZmxhZ3MgJj0gfkJUUF9QUkVGSVg7DQorCX0NCisNCiAJQXNzZXJ0KFBhZ2VHZXRNYXhPZmZzZXRO dW1iZXIocGFnZSkgPT0gUF9ISUtFWSk7DQogCU1lbVNldCgmdHJ1bmN0dXBsZSwgMCwgc2l6ZW9m KEluZGV4VHVwbGVEYXRhKSk7DQogCXRydW5jdHVwbGUudF9pbmZvID0gc2l6ZW9mKEluZGV4VHVw bGVEYXRhKTsNCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHByZWZp eC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwcmVmaXguYw0KbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwLi5jNzI1Zjc1Y2Q5Mg0KLS0tIC9kZXYvbnVsbA0K KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwcmVmaXguYw0KQEAgLTAsMCArMSw4 MTQgQEANCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKg0KKyAqIG5idHByZWZpeC5jDQorICoJICBM ZWFmIGtleSBwcmVmaXggY29tcHJlc3Npb24gZm9yIFBvc3RncmVzIGJ0cmVlcy4NCisgKg0KKyAq IEEgbGVhZiBwYWdlIG9mIGFuIGluZGV4IHdob3NlIHByZWZpeF9jb21wcmVzc2lvbiByZWxvcHRp b24gaXMgb24sIGFuZCB3aG9zZQ0KKyAqIGZpcnN0IGtleSBjb2x1bW4gaXMgb2YgYSB2YXJsZW5h IHR5cGUsIG1heSBiZSBmbGFnZ2VkIEJUUF9QUkVGSVguICBTdWNoIGENCisgKiBwYWdlIGZyb250 LWNvZGVzIHRoZSBmaXJzdCBrZXkgY29sdW1uIG9mIGVhY2ggbm9uLXBpdm90IHR1cGxlIGFnYWlu c3QgYQ0KKyAqIHBlci1wYWdlIFBSRUZJWCBpdGVtLCBzbyB0aGF0IGEgbG9uZyBrZXkgdGhhdCBy ZXBlYXRzIG9uIGEgcGFnZSBjb3N0cw0KKyAqIGxpdHRsZSBtb3JlIHRoYW4gaXRzIHVuc2hhcmVk IHRhaWwuICBUaGUgb24tZGlzayBmb3JtYXQgaXMgZG9jdW1lbnRlZCBhdA0KKyAqIEJUUF9QUkVG SVggaW4gbmJ0cmVlLmg7IHRoaXMgZmlsZSBpcyB0aGUgZW5jb2RlciwgZGVjb2RlciwgYW5kIHRo ZSBwb2xpY3kNCisgKiB0aGF0IGNob29zZXMgYSBwYWdlJ3MgcHJlZml4Lg0KKyAqDQorICogQ29k aW5nIGFuZCBkZWNvZGluZyBkZXBlbmQgb25seSBvbiB0aGUgcGFnZSdzIHByZWZpeCBhbmQgdGhl IHR1cGxlLCBub3Qgb24NCisgKiB0aGUgY2F0YWxvZywgc28gV0FMIHJlZG8gcmVwZWF0cyB0aGVt LCBhbmQgZGVjb2RpbmcgcmVwcm9kdWNlcyB0aGUgcGxhaW4NCisgKiB0dXBsZSBieXRlIGZvciBi eXRlLiAgQSB0dXBsZSBpbnNlcnRlZCBsYXRlciB0aGF0IHNoYXJlcyBsZXNzIG9mIHRoZSBwcmVm aXgNCisgKiBqdXN0IHN0b3JlcyBhIHNtYWxsZXIgYHNoYXJlZCcgY291bnQsIHNvIG5vIGluc2Vy dCwgVkFDVVVNLCBkZWR1cGxpY2F0aW9uDQorICogb3IgY2hhbmdlIG9mIHRoZSBwYWdlJ3Mga2V5 IHJhbmdlIGV2ZXIgaGFzIHRvIHJld3JpdGUgdGhlIHBhZ2UgdG8ga2VlcCB0aGUNCisgKiBwcmVm aXggdmFsaWQuICBUaGUgcHJlZml4IGlzIGNob3NlbiBvbmx5IHdoZW4gYSBwYWdlIGlzIHdyaXR0 ZW4gYXMgYSB3aG9sZQ0KKyAqIChDUkVBVEUgSU5ERVgsIG9yIGEgaGFsZiBvZiBhIHNwbGl0KS4N CisgKg0KKyAqIFRoaXMgaXMgbW9kZWxlZCBvbiB0aGUgbGVhZiBwcmVmaXggY29tcHJlc3Npb24g b2YgdGhlIEJBUksgYWNjZXNzIG1ldGhvZA0KKyAqIChzcmMvYmFja2VuZC9hY2Nlc3MvYmFyay9i YXJrdXRpbHMuYykuDQorICoNCisgKg0KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0y MDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cA0KKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh DQorICoNCisgKiBJREVOVElGSUNBVElPTg0KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRwcmVmaXguYw0KKyAqDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICovDQorI2luY2x1ZGUg InBvc3RncmVzLmgiDQorDQorI2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiDQorI2luY2x1ZGUgImFj Y2Vzcy9uYnRyZWUuaCINCisjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiDQorI2luY2x1ZGUg InV0aWxzL3JlbC5oIg0KKw0KKy8qDQorICogV2hlcmUgZWFjaCBwYXJ0IG9mIGEgdHVwbGUgZ29l cyBpbiBpdHMgY29kZWQgZm9ybS4gIENvZGluZyBhbmQgZGVjb2RpbmcNCisgKiBib3RoIGxheSB0 aGUgdHVwbGUgb3V0IGZyb20gdGhpcywgc28gdGhlIHR3byBjYW5ub3QgZGlzYWdyZWUuDQorICov DQordHlwZWRlZiBzdHJ1Y3QgQlRQcmVmaXhQbGFuDQorew0KKwlTaXplCQlob2ZmOwkJCS8qIGRh dGEgb2Zmc2V0OiBoZWFkZXIgYW5kIG51bGwgYml0bWFwICovDQorCVNpemUJCWMxOwkJCQkvKiBw bGFpbiBmaXJzdCBjb2x1bW4ncyBzaXplLCB3aXRoIGhlYWRlciAqLw0KKwlTaXplCQlrZXllbmQ7 CQkJLyogZW5kIG9mIHRoZSBwbGFpbiBrZXkgKHBvc3Rpbmcgb2Zmc2V0KSAqLw0KKwl1aW50OAkJ Y29kZTsJCQkvKiBmaXJzdCBwYXlsb2FkIGJ5dGUgb2YgdGhlIGNvZGVkIGNvbHVtbiAqLw0KKwlj b25zdCBjaGFyICpzdWZmaXg7CQkJLyogYnl0ZXMgc3RvcmVkIGFmdGVyIGl0ICovDQorCVNpemUJ CXN1ZmZpeGxlbjsNCisJU2l6ZQkJdnNpemU7CQkJLyogY29kZWQgY29sdW1uJ3Mgc2l6ZSwgd2l0 aCBoZWFkZXIgKi8NCisJU2l6ZQkJY29kZWRrZXllbmQ7CS8qIGVuZCBvZiB0aGUgY29kZWQga2V5 ICovDQorCVNpemUJCXRvdGFsOwkJCS8qIHNpemUgb2YgdGhlIGNvZGVkIHR1cGxlICovDQorfSBC VFByZWZpeFBsYW47DQorDQorLyoNCisgKiBJcyBgaXR1cCcgc3RvcmVkIGNvZGVkIG9uIGEgQlRQ X1BSRUZJWCBwYWdlPyAgT25seSBhIG5vbi1waXZvdCB0dXBsZSAocGxhaW4NCisgKiBvciBwb3N0 aW5nKSB3aG9zZSBmaXJzdCBjb2x1bW4gaXMgbm90IE5VTEw7IGEgcGl2b3QgKGhpZ2gga2V5LCBk b3dubGluaykNCisgKiBpcyBzdG9yZWQgYXMgaXQgaXMuDQorICovDQorc3RhdGljIGJvb2wNCitf YnRfcHJlZml4X2NvZGFibGUoSW5kZXhUdXBsZSBpdHVwKQ0KK3sNCisJaWYgKEJUcmVlVHVwbGVJ c1Bpdm90KGl0dXApKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwlyZXR1cm4gIUluZGV4VHVwbGVIYXNO dWxscyhpdHVwKSB8fA0KKwkJIWF0dF9pc251bGwoMCwgKHVpbnQ4ICopIGl0dXAgKyBzaXplb2Yo SW5kZXhUdXBsZURhdGEpKTsNCit9DQorDQorLyoNCisgKiBEb2VzIHRoZSB2YXJsZW5hIGB2YWwn IGhhdmUgdGhlIGhlYWRlciBkZWNvZGluZyB3b3VsZCBnaXZlIGl0IGJhY2s6IHRoZQ0KKyAqIDEt Ynl0ZSBoZWFkZXIgaWYgaXRzIGRhdGEgZml0IG9uZSwgZWxzZSBhbiB1bmNvbXByZXNzZWQgNC1i eXRlIGhlYWRlcj8NCisgKi8NCitzdGF0aWMgYm9vbA0KK19idF9wcmVmaXhfY2Fub25pY2FsKGNv bnN0IGNoYXIgKnZhbCkNCit7DQorCWlmIChWQVJBVFRfSVNfU0hPUlQodmFsKSkNCisJCXJldHVy biAhVkFSQVRUX0lTX0VYVEVSTkFMKHZhbCk7DQorCXJldHVybiAhVkFSQVRUX0lTX0VYVEVOREVE KHZhbCkgJiYNCisJCVZBUlNJWkUodmFsKSAtIFZBUkhEUlNaICsgVkFSSERSU1pfU0hPUlQgPiBW QVJBVFRfU0hPUlRfTUFYOw0KK30NCisNCisvKg0KKyAqIEVuZCBvZiBhIGxlYWYgdHVwbGUncyBr ZXk6IHRoZSBwb3N0aW5nLWxpc3Qgb2Zmc2V0IGZvciBhIHBvc3RpbmcgdHVwbGUsIHRoZQ0KKyAq IHdob2xlIHR1cGxlIHNpemUgb3RoZXJ3aXNlLiAgVGhlIGJ5dGVzIGFmdGVyIHRoZSBrZXkgKGEg cG9zdGluZyBsaXN0KSBhcmUNCisgKiBtb3ZlZCBhcyB0aGV5IGFyZS4NCisgKi8NCitzdGF0aWMg U2l6ZQ0KK19idF9wcmVmaXhfa2V5ZW5kKEluZGV4VHVwbGUgaXR1cCkNCit7DQorCWlmIChCVHJl ZVR1cGxlSXNQb3N0aW5nKGl0dXApKQ0KKwkJcmV0dXJuIEJUcmVlVHVwbGVHZXRQb3N0aW5nT2Zm c2V0KGl0dXApOw0KKwlyZXR1cm4gSW5kZXhUdXBsZVNpemUoaXR1cCk7DQorfQ0KKw0KKy8qDQor ICogVGhlIHNpemUgb2YgYSBjb2RlZCBmaXJzdCBjb2x1bW4gd2hvc2UgcGF5bG9hZCBpcyBgcGF5 bG9hZCcgYnl0ZXM6IGENCisgKiB2YXJsZW5hIHdpdGggYSAxLWJ5dGUgaGVhZGVyIHdoZW4gaXQg Zml0cyBvbmUuDQorICovDQorc3RhdGljIGlubGluZSBTaXplDQorX2J0X3ByZWZpeF92c2l6ZShT aXplIHBheWxvYWQpDQorew0KKwlpZiAocGF5bG9hZCArIFZBUkhEUlNaX1NIT1JUIDw9IFZBUkFU VF9TSE9SVF9NQVgpDQorCQlyZXR1cm4gcGF5bG9hZCArIFZBUkhEUlNaX1NIT1JUOw0KKwlyZXR1 cm4gcGF5bG9hZCArIFZBUkhEUlNaOw0KK30NCisNCisvKg0KKyAqIE9mZnNldCBhdCB3aGljaCB0 aGUgYnl0ZXMgYWZ0ZXIgdGhlIGZpcnN0IGNvbHVtbiBnbyBpbiBhIGNvZGVkIHR1cGxlIHdob3Nl DQorICogY29kZWQgY29sdW1uIGVuZHMgYXQgYHZlbmQnLCB3aGVuIGluIHRoZSBwbGFpbiB0dXBs ZSB0aGV5IHN0YXJ0IGF0DQorICogYHJlc3RvcmlnJzogdGhlIGZpcnN0IG9mZnNldCBhdCBvciBh ZnRlciBgdmVuZCcgdGhhdCBpcyB0aGUgc2FtZSBkaXN0YW5jZQ0KKyAqIHBhc3QgYSBNQVhBTElH TiBib3VuZGFyeS4NCisgKi8NCitzdGF0aWMgaW5saW5lIFNpemUNCitfYnRfcHJlZml4X3Jlc3Rv ZmYoU2l6ZSB2ZW5kLCBTaXplIHJlc3RvcmlnKQ0KK3sNCisJcmV0dXJuIHZlbmQgKyAoTUFYSU1V TV9BTElHTk9GICsgcmVzdG9yaWcgJSBNQVhJTVVNX0FMSUdOT0YgLQ0KKwkJCQkgICB2ZW5kICUg TUFYSU1VTV9BTElHTk9GKSAlIE1BWElNVU1fQUxJR05PRjsNCit9DQorDQorLyogUGxhbiB0aGUg Y29kaW5nIG9mIHRoZSBjb2RhYmxlIHR1cGxlIGBpdHVwJyBhZ2FpbnN0IGBwcmVmaXgnLiAqLw0K K3N0YXRpYyB2b2lkDQorX2J0X3ByZWZpeF9wbGFuKGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBw cmVmaXhsZW4sIEluZGV4VHVwbGUgaXR1cCwNCisJCQkJQlRQcmVmaXhQbGFuICpwbGFuKQ0KK3sN CisJY29uc3QgY2hhciAqdmFsOw0KKwlTaXplCQlyZXN0b3JpZzsNCisJYm9vbAkJc3RvcmVyZXN0 Ow0KKw0KKwlwbGFuLT5ob2ZmID0gSW5kZXhJbmZvRmluZERhdGFPZmZzZXQoaXR1cC0+dF9pbmZv KTsNCisJdmFsID0gKGNvbnN0IGNoYXIgKikgaXR1cCArIHBsYW4tPmhvZmY7DQorCXBsYW4tPmMx ID0gVkFSU0laRV9BTlkodmFsKTsNCisJcGxhbi0+a2V5ZW5kID0gX2J0X3ByZWZpeF9rZXllbmQo aXR1cCk7DQorDQorCWlmIChfYnRfcHJlZml4X2Nhbm9uaWNhbCh2YWwpKQ0KKwl7DQorCQljb25z dCBjaGFyICpkYXRhID0gVkFSREFUQV9BTlkodmFsKTsNCisJCVNpemUJCWRhdGFsZW4gPSBWQVJT SVpFX0FOWV9FWEhEUih2YWwpOw0KKwkJU2l6ZQkJbGltaXQgPSBNaW4ocHJlZml4bGVuLCBkYXRh bGVuKTsNCisJCVNpemUJCXNoYXJlZCA9IDA7DQorDQorCQl3aGlsZSAoc2hhcmVkIDwgbGltaXQg JiYgcHJlZml4W3NoYXJlZF0gPT0gZGF0YVtzaGFyZWRdKQ0KKwkJCXNoYXJlZCsrOw0KKwkJcGxh bi0+Y29kZSA9ICh1aW50OCkgc2hhcmVkOw0KKwkJcGxhbi0+c3VmZml4ID0gZGF0YSArIHNoYXJl ZDsNCisJCXBsYW4tPnN1ZmZpeGxlbiA9IGRhdGFsZW4gLSBzaGFyZWQ7DQorCX0NCisJZWxzZQ0K Kwl7DQorCQlwbGFuLT5jb2RlID0gQlRSRUVfUFJFRklYX1JBVzsNCisJCXBsYW4tPnN1ZmZpeCA9 IHZhbDsNCisJCXBsYW4tPnN1ZmZpeGxlbiA9IHBsYW4tPmMxOw0KKwl9DQorCXBsYW4tPnZzaXpl ID0gX2J0X3ByZWZpeF92c2l6ZSgxICsgcGxhbi0+c3VmZml4bGVuKTsNCisNCisJLyoNCisJICog VGhlIGJ5dGVzIGFmdGVyIHRoZSBmaXJzdCBjb2x1bW4gY2FuIGJlIGxlZnQgb3V0IHdoZW4gdGhl eSBhcmUganVzdCB0aGUNCisJICogemVybyBwYWRkaW5nIHRoYXQgZW5kcyB0aGUga2V5Lg0KKwkg Ki8NCisJcmVzdG9yaWcgPSBwbGFuLT5ob2ZmICsgcGxhbi0+YzE7DQorCXN0b3JlcmVzdCA9IHBs YW4tPmtleWVuZCAhPSBNQVhBTElHTihyZXN0b3JpZyk7DQorCWZvciAoU2l6ZSBpID0gcmVzdG9y aWc7ICFzdG9yZXJlc3QgJiYgaSA8IHBsYW4tPmtleWVuZDsgaSsrKQ0KKwkJc3RvcmVyZXN0ID0g KChjb25zdCBjaGFyICopIGl0dXApW2ldICE9IDA7DQorDQorCWlmIChzdG9yZXJlc3QpDQorCXsN CisJCXBsYW4tPmNvZGUgfD0gQlRSRUVfUFJFRklYX1JFU1Q7DQorCQlwbGFuLT5jb2RlZGtleWVu ZCA9IF9idF9wcmVmaXhfcmVzdG9mZihwbGFuLT5ob2ZmICsgcGxhbi0+dnNpemUsDQorCQkJCQkJ CQkJCQkgICByZXN0b3JpZykgKw0KKwkJCShwbGFuLT5rZXllbmQgLSByZXN0b3JpZyk7DQorCX0N CisJZWxzZQ0KKwkJcGxhbi0+Y29kZWRrZXllbmQgPSBNQVhBTElHTihwbGFuLT5ob2ZmICsgcGxh bi0+dnNpemUpOw0KKwlwbGFuLT50b3RhbCA9IHBsYW4tPmNvZGVka2V5ZW5kICsgKEluZGV4VHVw bGVTaXplKGl0dXApIC0gcGxhbi0+a2V5ZW5kKTsNCit9DQorDQorLyoNCisgKiBDb3B5IG4gYnl0 ZXMsIGFzIG1lbWNweS4gIERlY29kaW5nIG1vdmVzIGEgZmV3IHNob3J0IHJ1bnMgb2YgYnl0ZXMg cGVyDQorICogdHVwbGU7IGVpZ2h0IGJ5dGVzIGF0IGEgdGltZSBpcyBzZXZlcmFsIHRpbWVzIGZh c3RlciB0aGFuIGEgbGliYyBtZW1jcHkNCisgKiBmb3IgcnVucyB0aGlzIHNob3J0ICh0aGUgc3Ry aW5nLW1vdmUgc3RhcnR1cCBjb3N0IGRvbWluYXRlcyBvdGhlcndpc2UpLg0KKyAqLw0KK3N0YXRp YyBpbmxpbmUgdm9pZA0KK19idF9wcmVmaXhfY29weShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNy YywgU2l6ZSBuKQ0KK3sNCisJd2hpbGUgKG4gPj0gc2l6ZW9mKHVpbnQ2NCkpDQorCXsNCisJCW1l bWNweShkc3QsIHNyYywgc2l6ZW9mKHVpbnQ2NCkpOw0KKwkJZHN0ICs9IHNpemVvZih1aW50NjQp Ow0KKwkJc3JjICs9IHNpemVvZih1aW50NjQpOw0KKwkJbiAtPSBzaXplb2YodWludDY0KTsNCisJ fQ0KKwl3aGlsZSAobi0tID4gMCkNCisJCSpkc3QrKyA9ICpzcmMrKzsNCit9DQorDQorLyogVGhl IHByZWZpeCBvZiBhIEJUUF9QUkVGSVggcGFnZSwgYW5kIGl0cyBsZW5ndGggaW4gKmxlbi4gKi8N Citjb25zdCBjaGFyICoNCitfYnRfcGFnZV9nZXRfcHJlZml4KFBhZ2UgcGFnZSwgU2l6ZSAqbGVu KQ0KK3sNCisJQlRQYWdlT3BhcXVlIG9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsNCisJ SW5kZXhUdXBsZQlpdGVtOw0KKw0KKwlBc3NlcnQoUF9IQVNQUkVGSVgob3BhcXVlKSk7DQorCWl0 ZW0gPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwNCisJCQkJCQkJCQlQYWdlR2V0SXRl bUlkKHBhZ2UsDQorCQkJCQkJCQkJCQkJICBCVFBhZ2VHZXRQcmVmaXhPZmYob3BhcXVlKSkpOw0K KwkqbGVuID0gSW5kZXhUdXBsZVNpemUoaXRlbSkgLSBzaXplb2YoSW5kZXhUdXBsZURhdGEpOw0K KwlyZXR1cm4gKGNvbnN0IGNoYXIgKikgaXRlbSArIHNpemVvZihJbmRleFR1cGxlRGF0YSk7DQor fQ0KKw0KKy8qDQorICogR2l2ZSBgcGFnZScsIGEgbGVhZiBob2xkaW5nIG5vdGhpbmcgeWV0IGJ1 dCBpdHMgaGlnaCBrZXkgKGlmIGl0IGhhcyBvbmUpLA0KKyAqIHRoZSBwcmVmaXggYHByZWZpeCcg b2YgYGxlbicgYnl0ZXM6IGFkZCB0aGUgUFJFRklYIGl0ZW0gYW5kIHNldCBCVFBfUFJFRklYLg0K KyAqIEl0cyBwYWRkaW5nIGNvbWVzIGZyb20gdGhlIHBhZ2UncyBmcmVlIHNwYWNlLCB3aGljaCBf YnRfcGFnZWluaXQgemVyb2VkLCBzbw0KKyAqIGEgcGFnZSByZWJ1aWx0IGluIHJlZG8gaXMgdGhl IHNhbWUuDQorICovDQordm9pZA0KK19idF9wYWdlX3NldF9wcmVmaXgoUGFnZSBwYWdlLCBjb25z dCBjaGFyICpwcmVmaXgsIFNpemUgbGVuKQ0KK3sNCisJQlRQYWdlT3BhcXVlIG9wYXF1ZSA9IEJU UGFnZUdldE9wYXF1ZShwYWdlKTsNCisJdW5pb24NCisJew0KKwkJSW5kZXhUdXBsZURhdGEgaGRy Ow0KKwkJY2hhcgkJZGF0YVtzaXplb2YoSW5kZXhUdXBsZURhdGEpICsgQlRSRUVfUFJFRklYX01B WF07DQorCX0JCQlpdGVtOw0KKw0KKwlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSAmJiAhUF9IQVNQ UkVGSVgob3BhcXVlKSk7DQorCUFzc2VydChsZW4gPj0gMSAmJiBsZW4gPD0gQlRSRUVfUFJFRklY X01BWCk7DQorCUFzc2VydChQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpID09IEJUUGFnZUdl dFByZWZpeE9mZihvcGFxdWUpIC0gMSk7DQorDQorCW1lbXNldCgmaXRlbS5oZHIsIDAsIHNpemVv ZihJbmRleFR1cGxlRGF0YSkpOw0KKwlpdGVtLmhkci50X2luZm8gPSAodW5zaWduZWQgc2hvcnQp IChzaXplb2YoSW5kZXhUdXBsZURhdGEpICsgbGVuKTsNCisJbWVtY3B5KGl0ZW0uZGF0YSArIHNp emVvZihJbmRleFR1cGxlRGF0YSksIHByZWZpeCwgbGVuKTsNCisJaWYgKFBhZ2VBZGRJdGVtKHBh Z2UsIGl0ZW0uZGF0YSwgc2l6ZW9mKEluZGV4VHVwbGVEYXRhKSArIGxlbiwNCisJCQkJCUJUUGFn ZUdldFByZWZpeE9mZihvcGFxdWUpLCBmYWxzZSwgZmFsc2UpID09DQorCQlJbnZhbGlkT2Zmc2V0 TnVtYmVyKQ0KKwkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBhZGQgcHJlZml4IGl0ZW0gdG8gYnRy ZWUgcGFnZSIpOw0KKwlvcGFxdWUtPmJ0cG9fZmxhZ3MgfD0gQlRQX1BSRUZJWDsNCit9DQorDQor LyoNCisgKiBUaGUgY29kZWQgZm9ybSBvZiB0aGUgbGVhZiB0dXBsZSBgaXR1cCcgZm9yIGBwYWdl JywgcGFsbG9jJ2Q7IGBpdHVwJyBpdHNlbGYNCisgKiB3aGVuIHRoZSBwYWdlIGhhcyBubyBwcmVm aXggb3IgdGhlIHR1cGxlIGlzIHN0b3JlZCBwbGFpbi4NCisgKi8NCitJbmRleFR1cGxlDQorX2J0 X3ByZWZpeF9lbmNvZGUoUGFnZSBwYWdlLCBJbmRleFR1cGxlIGl0dXApDQorew0KKwljb25zdCBj aGFyICpwcmVmaXg7DQorCVNpemUJCXByZWZpeGxlbjsNCisJQlRQcmVmaXhQbGFuIHBsYW47DQor CWNoYXIJICAgKmNvZGVkOw0KKwljaGFyCSAgICp2Ow0KKwljaGFyCSAgICpwYXlsb2FkOw0KKw0K KwlpZiAoIVBfSEFTUFJFRklYKEJUUGFnZUdldE9wYXF1ZShwYWdlKSkgfHwNCisJCSFfYnRfcHJl Zml4X2NvZGFibGUoaXR1cCkpDQorCQlyZXR1cm4gaXR1cDsNCisNCisJcHJlZml4ID0gX2J0X3Bh Z2VfZ2V0X3ByZWZpeChwYWdlLCAmcHJlZml4bGVuKTsNCisJX2J0X3ByZWZpeF9wbGFuKHByZWZp eCwgcHJlZml4bGVuLCBpdHVwLCAmcGxhbik7DQorCUFzc2VydChwbGFuLnRvdGFsIDw9IElOREVY X1NJWkVfTUFTSyk7DQorDQorCWNvZGVkID0gcGFsbG9jMChwbGFuLnRvdGFsKTsNCisJbWVtY3B5 KGNvZGVkLCBpdHVwLCBwbGFuLmhvZmYpOw0KKwl2ID0gY29kZWQgKyBwbGFuLmhvZmY7DQorCWlm IChwbGFuLnZzaXplIDw9IFZBUkFUVF9TSE9SVF9NQVgpDQorCXsNCisJCVNFVF9WQVJTSVpFX1NI T1JUKHYsIHBsYW4udnNpemUpOw0KKwkJcGF5bG9hZCA9IHYgKyBWQVJIRFJTWl9TSE9SVDsNCisJ fQ0KKwllbHNlDQorCXsNCisJCVNFVF9WQVJTSVpFKHYsIHBsYW4udnNpemUpOw0KKwkJcGF5bG9h ZCA9IHYgKyBWQVJIRFJTWjsNCisJfQ0KKwlwYXlsb2FkWzBdID0gKGNoYXIpIHBsYW4uY29kZTsN CisJbWVtY3B5KHBheWxvYWQgKyAxLCBwbGFuLnN1ZmZpeCwgcGxhbi5zdWZmaXhsZW4pOw0KKwlp ZiAocGxhbi5jb2RlICYgQlRSRUVfUFJFRklYX1JFU1QpDQorCXsNCisJCVNpemUJCXJlc3Rvcmln ID0gcGxhbi5ob2ZmICsgcGxhbi5jMTsNCisNCisJCW1lbWNweShjb2RlZCArIF9idF9wcmVmaXhf cmVzdG9mZihwbGFuLmhvZmYgKyBwbGFuLnZzaXplLCByZXN0b3JpZyksDQorCQkJICAgKGNoYXIg KikgaXR1cCArIHJlc3RvcmlnLCBwbGFuLmtleWVuZCAtIHJlc3RvcmlnKTsNCisJfQ0KKwltZW1j cHkoY29kZWQgKyBwbGFuLmNvZGVka2V5ZW5kLCAoY2hhciAqKSBpdHVwICsgcGxhbi5rZXllbmQs DQorCQkgICBJbmRleFR1cGxlU2l6ZShpdHVwKSAtIHBsYW4ua2V5ZW5kKTsNCisNCisJKChJbmRl eFR1cGxlKSBjb2RlZCktPnRfaW5mbyA9DQorCQkoaXR1cC0+dF9pbmZvICYgfklOREVYX1NJWkVf TUFTSykgfCAodW5zaWduZWQgc2hvcnQpIHBsYW4udG90YWw7DQorCWlmIChCVHJlZVR1cGxlSXNQ b3N0aW5nKGl0dXApKQ0KKwkJQlRyZWVUdXBsZVNldFBvc3RpbmcoKEluZGV4VHVwbGUpIGNvZGVk LCBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCksDQorCQkJCQkJCSBwbGFuLmNvZGVka2V5ZW5k KTsNCisNCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORw0KKwl7DQorCQlCVEl0ZW1CdWYJY2hl Y2s7DQorCQlJbmRleFR1cGxlCWRlY29kZWQgPSBfYnRfcHJlZml4X2RlY29kZShwYWdlLCAoSW5k ZXhUdXBsZSkgY29kZWQsDQorCQkJCQkJCQkJCQkJJmNoZWNrKTsNCisNCisJCUFzc2VydChJbmRl eFR1cGxlU2l6ZShkZWNvZGVkKSA9PSBJbmRleFR1cGxlU2l6ZShpdHVwKSAmJg0KKwkJCSAgIG1l bWNtcChkZWNvZGVkLCBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVwKSkgPT0gMCk7DQorCX0NCisj ZW5kaWYNCisNCisJcmV0dXJuIChJbmRleFR1cGxlKSBjb2RlZDsNCit9DQorDQorLyogVGhlIE1B WEFMSUdOZWQgc2l6ZSBgaXR1cCcgdGFrZXMgb24gYHBhZ2UnLCBjb2RlZCBpZiB0aGUgcGFnZSBj b2RlcyBpdC4gKi8NCitTaXplDQorX2J0X3ByZWZpeF9jb2RlZF9zaXplKFBhZ2UgcGFnZSwgSW5k ZXhUdXBsZSBpdHVwKQ0KK3sNCisJY29uc3QgY2hhciAqcHJlZml4Ow0KKwlTaXplCQlwcmVmaXhs ZW47DQorCUJUUHJlZml4UGxhbiBwbGFuOw0KKw0KKwlpZiAoIVBfSEFTUFJFRklYKEJUUGFnZUdl dE9wYXF1ZShwYWdlKSkgfHwNCisJCSFfYnRfcHJlZml4X2NvZGFibGUoaXR1cCkpDQorCQlyZXR1 cm4gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUoaXR1cCkpOw0KKw0KKwlwcmVmaXggPSBfYnRfcGFn ZV9nZXRfcHJlZml4KHBhZ2UsICZwcmVmaXhsZW4pOw0KKwlfYnRfcHJlZml4X3BsYW4ocHJlZml4 LCBwcmVmaXhsZW4sIGl0dXAsICZwbGFuKTsNCisJcmV0dXJuIE1BWEFMSUdOKHBsYW4udG90YWwp Ow0KK30NCisNCisvKg0KKyAqIERlY29kZSB0aGUgaXRlbSBgaXR1cCcgb2YgdGhlIEJUUF9QUkVG SVggcGFnZSBgcGFnZScgaW50byBgYnVmJywgYW5kIHJldHVybg0KKyAqIGl0OyBhbiBpdGVtIHN0 b3JlZCBwbGFpbiBpcyByZXR1cm5lZCBhcyBpdCBpcy4gIFRoZSBpbnZlcnNlIG9mDQorICogX2J0 X3ByZWZpeF9lbmNvZGUsIGJ5dGUgZm9yIGJ5dGUuICBBbiBpdGVtIHRoYXQgZG9lcyBub3QgZGVj b2RlIHdpdGhpbiBpdHMNCisgKiBvd24gYm91bmRzLCBvciBjbGFpbXMgbW9yZSBvZiB0aGUgcHJl Zml4IHRoYW4gdGhlIHBhZ2UgaGFzLCBpcyByZXBvcnRlZCBhcw0KKyAqIGNvcnJ1cHRpb24uDQor ICovDQorSW5kZXhUdXBsZQ0KK19idF9wcmVmaXhfZGVjb2RlKFBhZ2UgcGFnZSwgSW5kZXhUdXBs ZSBpdHVwLCBCVEl0ZW1CdWYgKmJ1ZikNCit7DQorCWNvbnN0IGNoYXIgKnByZWZpeDsNCisJU2l6 ZQkJcHJlZml4bGVuOw0KKwlTaXplCQlzaXplID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7DQorCVNp emUJCWhvZmY7DQorCVNpemUJCWNvZGVka2V5ZW5kOw0KKwljb25zdCBjaGFyICp2Ow0KKwlTaXpl CQl2c2l6ZSA9IDA7DQorCWNvbnN0IGNoYXIgKnBheWxvYWQ7DQorCVNpemUJCXBheWxlbiA9IDA7 DQorCXVpbnQ4CQljb2RlOw0KKwlTaXplCQlzaGFyZWQ7DQorCWNoYXIJICAgKm91dCA9IGJ1Zi0+ ZGF0YTsNCisJY2hhcgkgICAqdmFsID0gTlVMTDsNCisJU2l6ZQkJYzE7DQorCVNpemUJCXJlc3Rv cmlnOw0KKwlTaXplCQlrZXllbmQ7DQorDQorCWlmICghX2J0X3ByZWZpeF9jb2RhYmxlKGl0dXAp KQ0KKwkJcmV0dXJuIGl0dXA7DQorDQorCXByZWZpeCA9IF9idF9wYWdlX2dldF9wcmVmaXgocGFn ZSwgJnByZWZpeGxlbik7DQorCWhvZmYgPSBJbmRleEluZm9GaW5kRGF0YU9mZnNldChpdHVwLT50 X2luZm8pOw0KKwljb2RlZGtleWVuZCA9IF9idF9wcmVmaXhfa2V5ZW5kKGl0dXApOw0KKwl2ID0g KGNvbnN0IGNoYXIgKikgaXR1cCArIGhvZmY7DQorCWlmIChob2ZmID49IGNvZGVka2V5ZW5kIHx8 IGNvZGVka2V5ZW5kID4gc2l6ZSB8fA0KKwkJKHZzaXplID0gVkFSU0laRV9BTlkodikpID4gY29k ZWRrZXllbmQgLSBob2ZmIHx8DQorCQkocGF5bGVuID0gVkFSU0laRV9BTllfRVhIRFIodikpIDwg MSkNCisJCWdvdG8gY29ycnVwdDsNCisJcGF5bG9hZCA9IFZBUkRBVEFfQU5ZKHYpOw0KKwljb2Rl ID0gKHVpbnQ4KSBwYXlsb2FkWzBdOw0KKwlzaGFyZWQgPSBjb2RlICYgQlRSRUVfUFJFRklYX1NI QVJFRF9NQVNLOw0KKw0KKwlfYnRfcHJlZml4X2NvcHkob3V0LCAoY29uc3QgY2hhciAqKSBpdHVw LCBob2ZmKTsNCisJdmFsID0gb3V0ICsgaG9mZjsNCisJaWYgKHNoYXJlZCA9PSBCVFJFRV9QUkVG SVhfUkFXKQ0KKwl7DQorCQljMSA9IHBheWxlbiAtIDE7DQorCQlfYnRfcHJlZml4X2NvcHkodmFs LCBwYXlsb2FkICsgMSwgYzEpOw0KKwkJaWYgKGMxIDwgVkFSSERSU1pfU0hPUlQgfHwgVkFSU0la RV9BTlkodmFsKSAhPSBjMSkNCisJCQlnb3RvIGNvcnJ1cHQ7DQorCX0NCisJZWxzZQ0KKwl7DQor CQlTaXplCQlkYXRhbGVuID0gc2hhcmVkICsgcGF5bGVuIC0gMTsNCisJCWNoYXIJICAgKmRhdGE7 DQorDQorCQlpZiAoaG9mZiArIFZBUkhEUlNaICsgZGF0YWxlbiA+IHNpemVvZihCVEl0ZW1CdWYp KQ0KKwkJCWdvdG8gY29ycnVwdDsNCisJCWlmIChzaGFyZWQgPiBwcmVmaXhsZW4pDQorCQkJZXJl cG9ydChFUlJPUiwNCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5ERVhfQ09SUlVQVEVEKSwNCisJ CQkJCSBlcnJtc2dfaW50ZXJuYWwoImJ0cmVlIGxlYWYgdHVwbGUgc2hhcmVzICV6dSBieXRlcyBv ZiBhICV6dS1ieXRlIHBhZ2UgcHJlZml4IiwNCisJCQkJCQkJCQkgc2hhcmVkLCBwcmVmaXhsZW4p KSk7DQorCQlpZiAoZGF0YWxlbiArIFZBUkhEUlNaX1NIT1JUIDw9IFZBUkFUVF9TSE9SVF9NQVgp DQorCQl7DQorCQkJYzEgPSBkYXRhbGVuICsgVkFSSERSU1pfU0hPUlQ7DQorCQkJU0VUX1ZBUlNJ WkVfU0hPUlQodmFsLCBjMSk7DQorCQkJZGF0YSA9IHZhbCArIFZBUkhEUlNaX1NIT1JUOw0KKwkJ fQ0KKwkJZWxzZQ0KKwkJew0KKwkJCWMxID0gZGF0YWxlbiArIFZBUkhEUlNaOw0KKwkJCVNFVF9W QVJTSVpFKHZhbCwgYzEpOw0KKwkJCWRhdGEgPSB2YWwgKyBWQVJIRFJTWjsNCisJCX0NCisJCV9i dF9wcmVmaXhfY29weShkYXRhLCBwcmVmaXgsIHNoYXJlZCk7DQorCQlfYnRfcHJlZml4X2NvcHko ZGF0YSArIHNoYXJlZCwgcGF5bG9hZCArIDEsIHBheWxlbiAtIDEpOw0KKwl9DQorDQorCXJlc3Rv cmlnID0gaG9mZiArIGMxOw0KKwlpZiAoY29kZSAmIEJUUkVFX1BSRUZJWF9SRVNUKQ0KKwl7DQor CQlTaXplCQlyZXN0b2ZmID0gX2J0X3ByZWZpeF9yZXN0b2ZmKGhvZmYgKyB2c2l6ZSwgcmVzdG9y aWcpOw0KKw0KKwkJaWYgKHJlc3RvZmYgPiBjb2RlZGtleWVuZCkNCisJCQlnb3RvIGNvcnJ1cHQ7 DQorCQlrZXllbmQgPSByZXN0b3JpZyArIChjb2RlZGtleWVuZCAtIHJlc3RvZmYpOw0KKwkJaWYg KGtleWVuZCArIChzaXplIC0gY29kZWRrZXllbmQpID4gc2l6ZW9mKEJUSXRlbUJ1ZikpDQorCQkJ Z290byBjb3JydXB0Ow0KKwkJX2J0X3ByZWZpeF9jb3B5KG91dCArIHJlc3RvcmlnLCAoY29uc3Qg Y2hhciAqKSBpdHVwICsgcmVzdG9mZiwNCisJCQkJCQljb2RlZGtleWVuZCAtIHJlc3RvZmYpOw0K Kwl9DQorCWVsc2UNCisJew0KKwkJa2V5ZW5kID0gTUFYQUxJR04ocmVzdG9yaWcpOw0KKwkJaWYg KGtleWVuZCArIChzaXplIC0gY29kZWRrZXllbmQpID4gc2l6ZW9mKEJUSXRlbUJ1ZikpDQorCQkJ Z290byBjb3JydXB0Ow0KKwkJbWVtc2V0KG91dCArIHJlc3RvcmlnLCAwLCBrZXllbmQgLSByZXN0 b3JpZyk7DQorCX0NCisJX2J0X3ByZWZpeF9jb3B5KG91dCArIGtleWVuZCwgKGNvbnN0IGNoYXIg KikgaXR1cCArIGNvZGVka2V5ZW5kLA0KKwkJCQkJc2l6ZSAtIGNvZGVka2V5ZW5kKTsNCisNCisJ KChJbmRleFR1cGxlKSBvdXQpLT50X2luZm8gPSAoaXR1cC0+dF9pbmZvICYgfklOREVYX1NJWkVf TUFTSykgfA0KKwkJKHVuc2lnbmVkIHNob3J0KSAoa2V5ZW5kICsgKHNpemUgLSBjb2RlZGtleWVu ZCkpOw0KKwlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkNCisJCUJUcmVlVHVwbGVTZXRQ b3N0aW5nKChJbmRleFR1cGxlKSBvdXQsIEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKSwNCisJ CQkJCQkJIGtleWVuZCk7DQorCXJldHVybiAoSW5kZXhUdXBsZSkgb3V0Ow0KKw0KK2NvcnJ1cHQ6 DQorCWVyZXBvcnQoRVJST1IsDQorCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JSVVBURUQp LA0KKwkJCSBlcnJtc2dfaW50ZXJuYWwoImJ0cmVlIGxlYWYgdHVwbGUgaXMgbm90IGEgdmFsaWQg cHJlZml4LWNvZGVkIHR1cGxlIikpKTsNCisJcmV0dXJuIE5VTEw7CQkJCS8qIGtlZXAgY29tcGls ZXIgcXVpZXQgKi8NCit9DQorDQorLyoNCisgKiBUaGUgYnl0ZXMgb2YgYGl0dXAnJ3MgZmlyc3Qg Y29sdW1uIGEgcGFnZSBwcmVmaXggbWF5IGJlIHRha2VuIGZyb20sIGFuZCBob3cNCisgKiBtYW55 IChhdCBtb3N0IEJUUkVFX1BSRUZJWF9NQVgpIGluICpsZW47IE5VTEwgd2hlbiB0aGUgdHVwbGUg aGFzIG5vbmU6IGl0DQorICogaXMgbm90IGNvZGFibGUsIGl0cyB2YWx1ZSBpcyBlbXB0eSwgb3Ig aXQgd291bGQgYmUgc3RvcmVkIHJhdy4NCisgKi8NCitjb25zdCBjaGFyICoNCitfYnRfcHJlZml4 X2NhbmRpZGF0ZShJbmRleFR1cGxlIGl0dXAsIFNpemUgKmxlbikNCit7DQorCWNvbnN0IGNoYXIg KnZhbDsNCisNCisJaWYgKCFfYnRfcHJlZml4X2NvZGFibGUoaXR1cCkpDQorCQlyZXR1cm4gTlVM TDsNCisJdmFsID0gKGNvbnN0IGNoYXIgKikgaXR1cCArIEluZGV4SW5mb0ZpbmREYXRhT2Zmc2V0 KGl0dXAtPnRfaW5mbyk7DQorCWlmICghX2J0X3ByZWZpeF9jYW5vbmljYWwodmFsKSB8fCBWQVJT SVpFX0FOWV9FWEhEUih2YWwpID09IDApDQorCQlyZXR1cm4gTlVMTDsNCisJKmxlbiA9IE1pbihW QVJTSVpFX0FOWV9FWEhEUih2YWwpLCBCVFJFRV9QUkVGSVhfTUFYKTsNCisJcmV0dXJuIFZBUkRB VEFfQU5ZKHZhbCk7DQorfQ0KKw0KKy8qDQorICogSG93IG1hbnkgYnl0ZXMgb2YgYHByZWZpeCcg dGhlIGZpcnN0IGNvbHVtbiBvZiBgaXR1cCcgd291bGQgc2hhcmUgb24gYSBwYWdlDQorICogd2l0 aCB0aGF0IHByZWZpeDogLTEgd2hlbiB0aGUgdHVwbGUgd291bGQgbm90IGJlIGNvZGVkLCAwIHdo ZW4gaXQgd291bGQgYmUNCisgKiBzdG9yZWQgcmF3Lg0KKyAqLw0KK2ludA0KK19idF9wcmVmaXhf c2hhcmVkKGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBwcmVmaXhsZW4sIEluZGV4VHVwbGUgaXR1 cCkNCit7DQorCUJUUHJlZml4UGxhbiBwbGFuOw0KKw0KKwlpZiAoIV9idF9wcmVmaXhfY29kYWJs ZShpdHVwKSkNCisJCXJldHVybiAtMTsNCisJX2J0X3ByZWZpeF9wbGFuKHByZWZpeCwgcHJlZml4 bGVuLCBpdHVwLCAmcGxhbik7DQorCWlmICgocGxhbi5jb2RlICYgQlRSRUVfUFJFRklYX1NIQVJF RF9NQVNLKSA9PSBCVFJFRV9QUkVGSVhfUkFXKQ0KKwkJcmV0dXJuIDA7DQorCXJldHVybiBwbGFu LmNvZGUgJiBCVFJFRV9QUkVGSVhfU0hBUkVEX01BU0s7DQorfQ0KKw0KKy8qDQorICogTWF5IHRo ZSBsZWF2ZXMgb2YgYGluZGV4JyBoYXZlIGEgcHJlZml4PyAgT25seSB3aGVuIHRoZSBwcmVmaXhf Y29tcHJlc3Npb24NCisgKiByZWxvcHRpb24gaXMgb24gYW5kIHRoZSBmaXJzdCBrZXkgY29sdW1u IGlzIG9mIGEgdmFybGVuYSB0eXBlLg0KKyAqLw0KK2Jvb2wNCitfYnRfcHJlZml4X2VuYWJsZWQo UmVsYXRpb24gaW5kZXgpDQorew0KKwlyZXR1cm4gQlRHZXRQcmVmaXhDb21wcmVzc2lvbihpbmRl eCkgJiYNCisJCVR1cGxlRGVzY0F0dHIoUmVsYXRpb25HZXREZXNjcihpbmRleCksIDApLT5hdHRs ZW4gPT0gLTE7DQorfQ0KKw0KKy8qDQorICogQ2hvb3NlIHRoZSBwcmVmaXggZm9yIGEgbGVhZiBh Ym91dCB0byBiZSBidWlsdCBmcm9tIHRoZSBgbicgdHVwbGVzIGBpdGVtcycsDQorICogaW4ga2V5 IG9yZGVyOiB0aGUgZmlyc3QgdHVwbGUncyBmaXJzdC1jb2x1bW4gYnl0ZXMsIGN1dCB0byB0aGUg bG9uZ2VzdCBydW4NCisgKiBhbnkgbGF0ZXIgdHVwbGUgc2hhcmVzLCBwcm92aWRlZCB0aGUgdHVw bGVzIHNoYXJlIGF0IGxlYXN0DQorICogQlRSRUVfUFJFRklYX01JTl9TSEFSRUQgYnl0ZXMgb2Yg aXQgb24gYXZlcmFnZS4gIFJldHVybnMgdGhlIHByZWZpeCdzDQorICogbGVuZ3RoLCB3aXRoICpw cmVmaXggcG9pbnRpbmcgaW50byBpdGVtc1swXSwgb3IgMCBmb3Igbm8gcHJlZml4Lg0KKyAqLw0K K1NpemUNCitfYnRfcHJlZml4X2Nob29zZShSZWxhdGlvbiBpbmRleCwgSW5kZXhUdXBsZSAqaXRl bXMsIGludCBuLA0KKwkJCQkgIGNvbnN0IGNoYXIgKipwcmVmaXgpDQorew0KKwljb25zdCBjaGFy ICpjYW5kOw0KKwlTaXplCQljYW5kbGVuOw0KKwlTaXplCQlsb25nZXN0ID0gMDsNCisJU2l6ZQkJ dG90YWwgPSAwOw0KKwlpbnQJCQluY29kZWQgPSAwOw0KKw0KKwlpZiAoIV9idF9wcmVmaXhfZW5h YmxlZChpbmRleCkgfHwNCisJCShjYW5kID0gX2J0X3ByZWZpeF9jYW5kaWRhdGUoaXRlbXNbMF0s ICZjYW5kbGVuKSkgPT0gTlVMTCkNCisJCXJldHVybiAwOw0KKwlpZiAobiA9PSAxKQ0KKwl7DQor CQkqcHJlZml4ID0gY2FuZDsNCisJCXJldHVybiBjYW5kbGVuOw0KKwl9DQorCWZvciAoaW50IGkg PSAxOyBpIDwgbjsgaSsrKQ0KKwl7DQorCQlpbnQJCQlzaGFyZWQgPSBfYnRfcHJlZml4X3NoYXJl ZChjYW5kLCBjYW5kbGVuLCBpdGVtc1tpXSk7DQorDQorCQlpZiAoc2hhcmVkIDwgMCkNCisJCQlj b250aW51ZTsNCisJCXRvdGFsICs9IHNoYXJlZDsNCisJCW5jb2RlZCsrOw0KKwkJbG9uZ2VzdCA9 IE1heChsb25nZXN0LCAoU2l6ZSkgc2hhcmVkKTsNCisJfQ0KKwlpZiAobG9uZ2VzdCA9PSAwIHx8 IHRvdGFsIDwgKFNpemUpIEJUUkVFX1BSRUZJWF9NSU5fU0hBUkVEICogbmNvZGVkKQ0KKwkJcmV0 dXJuIDA7DQorCSpwcmVmaXggPSBjYW5kOw0KKwlyZXR1cm4gbG9uZ2VzdDsNCit9DQorDQorLyoN CisgKiBGYXVsdCBhIGZyZXNobHkgZmluaXNoZWQgbGVhZiBgcGFnZScgZm9yd2FyZCBpbnRvIHRo ZSBCVFBfUFJFRklYIGZvcm1hdCBpZg0KKyAqIGEgcHJlZml4IHBheXMgb2ZmIChTdHJhdGVneSAx OiBjb21wcmVzcyBhIHBhZ2Ugb25seSB3aGVuIGl0IGlzIHdyaXR0ZW4gYXMgYQ0KKyAqIHdob2xl IC0tIENSRUFURSBJTkRFWCBwYWdlIGZpbmlzaCwgYSBzcGxpdCBoYWxmLCBhIGRlZHVwIHJld3Jp dGUgLS0gc28gdGhhdA0KKyAqIG5vIGluc2VydCwgVkFDVVVNIG9yIGtleS1yYW5nZSBjaGFuZ2Ug ZXZlciBmb3JjZXMgYSBwYWdlIHJld3JpdGUsIGFuZCBhbg0KKyAqIG9sZC1mb3JtYXQgcGFnZSBp cyBjb252ZXJ0ZWQgb25seSB3aGVuIGl0IGlzIG5leHQgd3JpdHRlbiB3aG9sZSkuDQorICoNCisg KiBPbiBlbnRyeSBgcGFnZScgaXMgYSBjb21wbGV0ZSBsZWFmOiBpdHMgaGlnaCBrZXkgYXQgUF9I SUtFWSBpZiBpdCBpcyBub3QNCisgKiByaWdodG1vc3QsIHRoZW4gaXRzIGRhdGEgaXRlbXMsIG5v bmUgb2YgdGhlbSBjb2RlZCAodGhlIHBhZ2UgZG9lcyBub3QgeWV0DQorICogaGF2ZSBCVFBfUFJF RklYKS4gIElmIHRoZSBkYXRhIGl0ZW1zIHNoYXJlIGVub3VnaCBvZiBhIGNvbW1vbiBmaXJzdC1j b2x1bW4NCisgKiBwcmVmaXgsIHRoZSBwYWdlIGlzIHJlYnVpbHQgaW4gcGxhY2Ugd2l0aCB0aGUg UFJFRklYIGl0ZW0gaW5zZXJ0ZWQgYWZ0ZXINCisgKiB0aGUgaGlnaCBrZXkgYW5kIGV2ZXJ5IGRh dGEgaXRlbSBjb2RlZCBhZ2FpbnN0IGl0OyBvdGhlcndpc2UgdGhlIHBhZ2UgaXMNCisgKiBsZWZ0 IHVuY2hhbmdlZC4gIEl0ZW0gb3JkZXIgYW5kIHRoZSBoaWdoIGtleSBhcmUgcHJlc2VydmVkLg0K KyAqDQorICogQ2FsbGVyIG11c3QgaG9sZCB0aGUgcGFnZSdzIGJ1ZmZlciBleGNsdXNpdmVseSAo b3Igb3duIHRoZSBwYWdlIG91dHJpZ2h0LA0KKyAqIGFzIHRoZSBidWlsZCBhbmQgc3BsaXQgcGF0 aHMgZG8gd2l0aCBhIHRlbXAgcGFnZSkuICBObyBXQUwgaXMgd3JpdHRlbiBoZXJlOg0KKyAqIGNh bGxlcnMgbG9nIHRoZSByZXN1bHRpbmcgcGFnZSAoYSBidWlsZCB3cml0ZXMgaXQgd2hvbGU7IGEg c3BsaXQgbG9ncyBlYWNoDQorICogaGFsZiB3aG9sZSBvciBieSBmdWxsLXBhZ2UgaW1hZ2UpLCBh bmQgcmVkbyByZWFjaGVzIHRoZSBzYW1lIGJ5dGVzIGJ5DQorICogcnVubmluZyBfYnRfcHJlZml4 X2VuY29kZSBhZ2FpbnN0IHRoZSBzYW1lIHByZWZpeC4NCisgKi8NCit2b2lkDQorX2J0X3ByZWZp eF9jb21wcmVzc19wYWdlKFJlbGF0aW9uIGluZGV4LCBQYWdlIHBhZ2UpDQorew0KKwlCVFBhZ2VP cGFxdWUgb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOw0KKwlPZmZzZXROdW1iZXIgbWlu b2ZmOw0KKwlPZmZzZXROdW1iZXIgbWF4b2ZmOw0KKwlpbnQJCQluOw0KKwlJbmRleFR1cGxlICpp dGVtczsNCisJU2l6ZQkJcHJlZml4bGVuOw0KKwljb25zdCBjaGFyICpwcmVmaXg7DQorCVBhZ2UJ CXRtcDsNCisJT2Zmc2V0TnVtYmVyIG87DQorCUluZGV4VHVwbGUJaGlrZXkgPSBOVUxMOw0KKwlT aXplCQloaWtleXN6ID0gMDsNCisNCisJQXNzZXJ0KFBfSVNMRUFGKG9wYXF1ZSkgJiYgIVBfSEFT UFJFRklYKG9wYXF1ZSkpOw0KKw0KKwlpZiAoIV9idF9wcmVmaXhfZW5hYmxlZChpbmRleCkpDQor CQlyZXR1cm47DQorDQorCW1pbm9mZiA9IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7DQorCW1heG9m ZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7DQorCW4gPSAoaW50KSBtYXhvZmYgLSAo aW50KSBtaW5vZmYgKyAxOw0KKwlpZiAobiA8PSAwKQ0KKwkJcmV0dXJuOw0KKw0KKwlpdGVtcyA9 IChJbmRleFR1cGxlICopIHBhbGxvYyhuICogc2l6ZW9mKEluZGV4VHVwbGUpKTsNCisJZm9yIChp bnQgaSA9IDA7IGkgPCBuOyBpKyspDQorCQlpdGVtc1tpXSA9IChJbmRleFR1cGxlKSBQYWdlR2V0 SXRlbShwYWdlLA0KKwkJCQkJCQkJCQkJUGFnZUdldEl0ZW1JZChwYWdlLCBtaW5vZmYgKyBpKSk7 DQorDQorCXByZWZpeGxlbiA9IF9idF9wcmVmaXhfY2hvb3NlKGluZGV4LCBpdGVtcywgbiwgJnBy ZWZpeCk7DQorCWlmIChwcmVmaXhsZW4gPT0gMCkNCisJew0KKwkJcGZyZWUoaXRlbXMpOw0KKwkJ cmV0dXJuOw0KKwl9DQorDQorCS8qIFRoZSBoaWdoIGtleSAoaWYgYW55KSBzdGF5cyBhdCBQX0hJ S0VZLCB1bmNvZGVkLiAqLw0KKwlpZiAoIVBfUklHSFRNT1NUKG9wYXF1ZSkpDQorCXsNCisJCUl0 ZW1JZAkJaGlpID0gUGFnZUdldEl0ZW1JZChwYWdlLCBQX0hJS0VZKTsNCisNCisJCWhpa2V5c3og PSBJdGVtSWRHZXRMZW5ndGgoaGlpKTsNCisJCWhpa2V5ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJ dGVtKHBhZ2UsIGhpaSk7DQorCX0NCisNCisJLyoNCisJICogUmVidWlsZCBpbnRvIGEgdGVtcCBw YWdlOiBoaWdoIGtleSAoaWYgYW55KSwgUFJFRklYIGl0ZW0sIHRoZW4gZWFjaA0KKwkgKiBkYXRh IGl0ZW0gY29kZWQuICBUaGUgY29kZWQgZm9ybSBjYW4gYmUgdXAgdG8gTUFYQUxJR04gbGFyZ2Vy IHRoYW4gdGhlDQorCSAqIHBsYWluIG9uZSwgYnV0IHRoZSBQUkVGSVggaXRlbSByZXBsYWNlcyBm YXIgbW9yZSBzaGFyZWQgYnl0ZXMgdGhhbiBpdA0KKwkgKiBhZGRzLCBzbyBhIHBhZ2UgdGhhdCB3 YXMgbm90IG92ZXJmdWxsIHN0YXlzIHdpdGhpbiBib3VuZHM7IGlmIGEgY29kZWQNCisJICogaXRl bSBzb21laG93IGRvZXMgbm90IGZpdCwgbGVhdmUgdGhlIHBhZ2UgdW5jb21wcmVzc2VkIChhbHdh eXMgdmFsaWQpLg0KKwkgKi8NCisJdG1wID0gUGFnZUdldFRlbXBQYWdlQ29weVNwZWNpYWwocGFn ZSk7DQorCUJUUGFnZUdldE9wYXF1ZSh0bXApLT5idHBvX2ZsYWdzICY9IH5CVFBfUFJFRklYOw0K KwlpZiAoaGlrZXkgIT0gTlVMTCAmJg0KKwkJUGFnZUFkZEl0ZW0odG1wLCAoY2hhciAqKSBoaWtl eSwgaGlrZXlzeiwgUF9ISUtFWSwgZmFsc2UsIGZhbHNlKSA9PQ0KKwkJSW52YWxpZE9mZnNldE51 bWJlcikNCisJCWdvdG8gZ2l2ZXVwOw0KKwlfYnRfcGFnZV9zZXRfcHJlZml4KHRtcCwgcHJlZml4 LCBwcmVmaXhsZW4pOw0KKwlvID0gT2Zmc2V0TnVtYmVyTmV4dChQYWdlR2V0TWF4T2Zmc2V0TnVt YmVyKHRtcCkpOw0KKwlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykNCisJew0KKwkJSW5kZXhU dXBsZQljb2RlZCA9IF9idF9wcmVmaXhfZW5jb2RlKHRtcCwgaXRlbXNbaV0pOw0KKwkJYm9vbAkJ b2s7DQorDQorCQlvayA9IFBhZ2VBZGRJdGVtKHRtcCwgKGNoYXIgKikgY29kZWQsIEluZGV4VHVw bGVTaXplKGNvZGVkKSwgbysrLA0KKwkJCQkJCSBmYWxzZSwgZmFsc2UpICE9IEludmFsaWRPZmZz ZXROdW1iZXI7DQorCQlpZiAoY29kZWQgIT0gaXRlbXNbaV0pDQorCQkJcGZyZWUoY29kZWQpOw0K KwkJaWYgKCFvaykNCisJCQlnb3RvIGdpdmV1cDsNCisJfQ0KKw0KKwltZW1jcHkocGFnZSwgdG1w LCBCTENLU1opOw0KKwlwZnJlZSh0bXApOw0KKwlwZnJlZShpdGVtcyk7DQorCXJldHVybjsNCisN CitnaXZldXA6DQorCXBmcmVlKHRtcCk7DQorCXBmcmVlKGl0ZW1zKTsNCit9DQorDQorLyoNCisg KiBMYXkgb3V0IG9uZSBoYWxmIG9mIGEgbGVhZiBzcGxpdCBvbiBgcGFnZScsIHdoaWNoIHRoZSBj YWxsZXIgaGFzDQorICogaW5pdGlhbGl6ZWQgKGZsYWdzLCBsaW5rcykgYW5kIGxlZnQgZW1wdHk6 IHRoZSBoaWdoIGtleSBgaGlrZXknIChOVUxMIGZvcg0KKyAqIGEgcmlnaHRtb3N0IGhhbGYpLCB0 aGVuIHRoZSBgbicgcGxhaW4gdHVwbGVzIGBpdGVtcycgaW4ga2V5IG9yZGVyLg0KKyAqDQorICog VGhlIGhhbGYgaXMgZm9ybWVkIGFzIGEgd2hvbGUsIHNvIGl0IG1heSB0YWtlIGEgcHJlZml4IG9m IGl0cyBvd246IGl0cw0KKyAqIGZpcnN0IGl0ZW0ncyBsZWFkaW5nIGJ5dGVzLCBpZiB0aGUgaXRl bXMgc2hhcmUgZW5vdWdoIChfYnRfcHJlZml4X2Nob29zZSkuDQorICogQmVjYXVzZSBhIHByZWZp eC1jb21wcmVzc2VkIGxlYWYgY2FuIGhvbGQgbW9yZSBsb2dpY2FsIGRhdGEgdGhhbiBmaXRzIGlu IGENCisgKiBwbGFpbiBwYWdlLCB0aGUgaGFsZiBpcyBsYWlkIG91dCBjb2RlZCBmcm9tIHRoZSBz dGFydCByYXRoZXIgdGhhbiBidWlsdA0KKyAqIHBsYWluIGFuZCBjb21wcmVzc2VkIGFmdGVyd2Fy ZHMuICBXaGVuIHRoZSBoYWxmIGRvZXMgbm90IGZpdCB3aXRoIGl0cyBvd24NCisgKiBwcmVmaXgg KG9yIHNoYXJlcyB0b28gbGl0dGxlIHRvIHRha2Ugb25lKSBpdCBpcyBsYWlkIG91dCBwbGFpbiwg YW5kIGlmIHRoYXQNCisgKiBkb2VzIG5vdCBmaXQgZWl0aGVyLCB3aXRoIGBvcmlncHJlZml4JyAo dGhlIHNwbGl0dGluZyBwYWdlJ3MgcHJlZml4LCB6ZXJvDQorICogbGVuZ3RoIHdoZW4gaXQgaGFk IG5vbmUpLCBhZ2FpbnN0IHdoaWNoIGl0IGZpdHMgYnkgY29uc3RydWN0aW9uOiB0aGUgaXRlbXMN CisgKiBrZWVwIHRoZSBzaGFyZXMgdGhleSBoYWQgb24gdGhlIG9yaWdpbmFsIHBhZ2UuDQorICoN CisgKiBNaXJyb3JzIEJBUksncyBiYXJrX3NwbGl0X2xlYWZfaGFsZi4gIENhbGxlcnM6IF9idF9z cGxpdCAoYm90aCBoYWx2ZXMpLg0KKyAqLw0KK3ZvaWQNCitfYnRfc3BsaXRfbGVhZl9oYWxmKFJl bGF0aW9uIGluZGV4LCBQYWdlIHBhZ2UsIEluZGV4VHVwbGUgaGlrZXksDQorCQkJCQlJbmRleFR1 cGxlICppdGVtcywgaW50IG4sDQorCQkJCQljb25zdCBjaGFyICpvcmlncHJlZml4LCBTaXplIG9y aWdwcmVmaXhsZW4sDQorCQkJCQljaGFyICpjaG9zZW5wcmVmaXgsIFNpemUgKmNob3NlbnByZWZp eGxlbikNCit7DQorCUJUUGFnZU9wYXF1ZURhdGEgc2F2ZWQgPSAqQlRQYWdlR2V0T3BhcXVlKHBh Z2UpOw0KKwljb25zdCBjaGFyICpwcmVmaXhbM107DQorCVNpemUJCXByZWZpeGxlblszXTsNCisJ aW50CQkJbnRyaWVzID0gMDsNCisNCisJQXNzZXJ0KFBfSVNMRUFGKCZzYXZlZCkgJiYgIVBfSEFT UFJFRklYKCZzYXZlZCkpOw0KKw0KKwkvKiBDYW5kaWRhdGUgcHJlZml4ZXMgdG8gdHJ5LCBpbiBv cmRlcjogb3duLCBub25lLCB0aGUgb3JpZyBwYWdlJ3MuICovDQorCWlmIChfYnRfcHJlZml4X2Vu YWJsZWQoaW5kZXgpKQ0KKwl7DQorCQlwcmVmaXhsZW5bbnRyaWVzXSA9IF9idF9wcmVmaXhfY2hv b3NlKGluZGV4LCBpdGVtcywgbiwgJnByZWZpeFtudHJpZXNdKTsNCisJCWlmIChwcmVmaXhsZW5b bnRyaWVzXSA+IDApDQorCQkJbnRyaWVzKys7DQorCX0NCisJcHJlZml4W250cmllc10gPSBOVUxM Ow0KKwlwcmVmaXhsZW5bbnRyaWVzKytdID0gMDsNCisJaWYgKG9yaWdwcmVmaXhsZW4gPiAwKQ0K Kwl7DQorCQlwcmVmaXhbbnRyaWVzXSA9IG9yaWdwcmVmaXg7DQorCQlwcmVmaXhsZW5bbnRyaWVz KytdID0gb3JpZ3ByZWZpeGxlbjsNCisJfQ0KKw0KKwlmb3IgKGludCB0ID0gMDsgdCA8IG50cmll czsgdCsrKQ0KKwl7DQorCQlpZiAoX2J0X3NwbGl0X2xlYWZfbGF5b3V0KHBhZ2UsIGhpa2V5LCBp dGVtcywgbiwgcHJlZml4W3RdLCBwcmVmaXhsZW5bdF0pKQ0KKwkJew0KKwkJCS8qIFJlcG9ydCB0 aGUgcHJlZml4IHRoYXQgd29uLCBzbyB0aGUgc3BsaXQgY2FuIGxvZyBpdCBmb3IgcmVkby4gKi8N CisJCQlpZiAoY2hvc2VucHJlZml4bGVuICE9IE5VTEwpDQorCQkJew0KKwkJCQkqY2hvc2VucHJl Zml4bGVuID0gcHJlZml4bGVuW3RdOw0KKwkJCQlpZiAocHJlZml4bGVuW3RdID4gMCkNCisJCQkJ CW1lbWNweShjaG9zZW5wcmVmaXgsIHByZWZpeFt0XSwgcHJlZml4bGVuW3RdKTsNCisJCQl9DQor CQkJcmV0dXJuOw0KKwkJfQ0KKwkJLyogcmVzdG9yZSB0aGUgZW1wdHktcGFnZSBzdGF0ZSBmb3Ig dGhlIG5leHQgYXR0ZW1wdCAqLw0KKwkJX2J0X3BhZ2Vpbml0KHBhZ2UsIEJMQ0tTWik7DQorCQkq QlRQYWdlR2V0T3BhcXVlKHBhZ2UpID0gc2F2ZWQ7DQorCX0NCisJZWxvZyhFUlJPUiwgImZhaWxl ZCB0byBsYXkgb3V0IGEgc3BsaXQgaGFsZiBvZiBpbmRleCBcIiVzXCIiLA0KKwkJIFJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKGluZGV4KSk7DQorfQ0KKw0KKy8qDQorICogTGF5IG91dCBvbmUgbGVh ZiBzcGxpdCBoYWxmIG9uIHRoZSBjYWxsZXItaW5pdGlhbGl6ZWQgZW1wdHkgYHBhZ2UnIHVzaW5n IGENCisgKiBHSVZFTiBwcmVmaXggKGBwcmVmaXhsZW4nIDAgZm9yIG5vbmUpOiB0aGUgaGlnaCBr ZXkgYGhpa2V5JyAoTlVMTCBmb3IgYQ0KKyAqIHJpZ2h0bW9zdCBoYWxmKSwgdGhlIFBSRUZJWCBp dGVtLCB0aGVuIHRoZSBgbicgcGxhaW4gdHVwbGVzIGBpdGVtcycgY29kZWQNCisgKiBhZ2FpbnN0 IHRoZSBwcmVmaXguICBSZXR1cm5zIGZhbHNlIGlmIHRoZXkgZG8gbm90IGZpdCAoY2FsbGVyIHRy aWVzIGFub3RoZXINCisgKiBwcmVmaXgpLiAgVGhpcyBpcyBSZWxhdGlvbi1mcmVlIGFuZCBkZXRl cm1pbmlzdGljIGluIChoaWtleSwgaXRlbXMsIHByZWZpeCksDQorICogc28gV0FMIHJlZG8gY2Fs bHMgaXQgd2l0aCB0aGUgbG9nZ2VkIHByZWZpeCB0byByZXByb2R1Y2UgdGhlIHByaW1hcnkncyBw YWdlDQorICogYnl0ZSBmb3IgYnl0ZS4NCisgKi8NCitib29sDQorX2J0X3NwbGl0X2xlYWZfbGF5 b3V0KFBhZ2UgcGFnZSwgSW5kZXhUdXBsZSBoaWtleSwgSW5kZXhUdXBsZSAqaXRlbXMsIGludCBu LA0KKwkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgcHJlZml4bGVuKQ0KK3sNCisJT2Zm c2V0TnVtYmVyIG8gPSBQX0hJS0VZOw0KKwlib29sCQlmaXQgPSB0cnVlOw0KKw0KKwlBc3NlcnQo UF9JU0xFQUYoQlRQYWdlR2V0T3BhcXVlKHBhZ2UpKSAmJiAhUF9IQVNQUkVGSVgoQlRQYWdlR2V0 T3BhcXVlKHBhZ2UpKSk7DQorCWlmIChoaWtleSAhPSBOVUxMICYmDQorCQlQYWdlQWRkSXRlbShw YWdlLCAoY2hhciAqKSBoaWtleSwgTUFYQUxJR04oSW5kZXhUdXBsZVNpemUoaGlrZXkpKSwNCisJ CQkJCW8rKywgZmFsc2UsIGZhbHNlKSA9PSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQ0KKwkJcmV0dXJu IGZhbHNlOw0KKwlpZiAocHJlZml4bGVuID4gMCkNCisJew0KKwkJX2J0X3BhZ2Vfc2V0X3ByZWZp eChwYWdlLCBwcmVmaXgsIHByZWZpeGxlbik7DQorCQlvKys7DQorCX0NCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBuOyBpKyspDQorCXsNCisJCUluZGV4VHVwbGUJY29kZWQgPSBfYnRfcHJlZml4X2Vu Y29kZShwYWdlLCBpdGVtc1tpXSk7DQorDQorCQlpZiAoUGFnZUFkZEl0ZW0ocGFnZSwgKGNoYXIg KikgY29kZWQsIEluZGV4VHVwbGVTaXplKGNvZGVkKSwNCisJCQkJCQlvKyssIGZhbHNlLCBmYWxz ZSkgPT0gSW52YWxpZE9mZnNldE51bWJlcikNCisJCQlmaXQgPSBmYWxzZTsNCisJCWlmIChjb2Rl ZCAhPSBpdGVtc1tpXSkNCisJCQlwZnJlZShjb2RlZCk7DQorCQlpZiAoIWZpdCkNCisJCQlyZXR1 cm4gZmFsc2U7DQorCX0NCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORw0KKwlpZiAoUF9IQVNQ UkVGSVgoQlRQYWdlR2V0T3BhcXVlKHBhZ2UpKSkNCisJew0KKwkJT2Zmc2V0TnVtYmVyIG14ID0g UGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsNCisJCU9mZnNldE51bWJlciBvZmY7DQorDQor CQlmb3IgKG9mZiA9IFBfRklSU1REQVRBS0VZKEJUUGFnZUdldE9wYXF1ZShwYWdlKSk7IG9mZiA8 PSBteDsgb2ZmKyspDQorCQl7DQorCQkJQlRJdGVtQnVmCXZiOw0KKw0KKwkJCSh2b2lkKSBfYnRf Z2V0aXRlbShwYWdlLCBvZmYsICZ2Yik7DQorCQl9DQorCX0NCisjZW5kaWYNCisJcmV0dXJuIHRy dWU7DQorfQ0KKw0KKy8qDQorICogQ29sbGVjdCB0aGUgcGxhaW4gKGRlY29kZWQpIGRhdGEgaXRl bXMgb2YgYSBsZWFmIHNwbGl0IGludG8gdGhlIGxlZnQgYW5kDQorICogcmlnaHQgYXJyYXlzLCBp biB0aGUgZXhhY3Qgb3JkZXIgYW5kIHdpdGggdGhlIGV4YWN0IHN1YnN0aXR1dGlvbnMgdGhhdCB0 aGUNCisgKiBzcGxpdCBwZXJmb3JtczogdGhlIG9yaWdpbmFsIHBhZ2UncyBkYXRhIGl0ZW1zIHNw bGl0IGF0IGBmaXJzdHJpZ2h0b2ZmJywNCisgKiB3aXRoIGBuZXdpdGVtJyBpbnNlcnRlZCBhdCBg bmV3aXRlbW9mZicgb24gdGhlIHNpZGUgZ2l2ZW4gYnkgYG5ld2l0ZW1vbmxlZnQnDQorICogYW5k LCBmb3IgYSBwb3N0aW5nLWxpc3Qgc3BsaXQsIHRoZSBwb3N0aW5nIGF0IGBvcmlncGFnZXBvc3Rp bmdvZmYnIHJlcGxhY2VkDQorICogYnkgYG5wb3N0aW5nJy4gIGBvcmlncGFnZScgaXMgdGhlIHBy ZS1zcGxpdCBwYWdlIChpdHMgaXRlbXMgYXJlIGRlY29kZWQgd2hlbg0KKyAqIGl0IGlzIGEgQlRQ X1BSRUZJWCBwYWdlKS4gIFRoZSBhcnJheXMgcmVjZWl2ZSBwb2ludGVycyB0aGF0IGFyZSB2YWxp ZCB1bnRpbA0KKyAqIHRoZSBjYWxsZXIgaXMgZG9uZSBsYXlpbmcgb3V0IHRoZSBoYWx2ZXM7IGl0 ZW1zIHRha2VuIGZyb20gdGhlIHBhZ2UgYXJlDQorICogY29waWVkLCBzbyB0aGUgY2FsbGVyIG93 bnMgYW5kIHNob3VsZCByZXNldCB0aGUgc3Vycm91bmRpbmcgbWVtb3J5IGNvbnRleHQuDQorICoN CisgKiBCb3RoIHRoZSBwcmltYXJ5IChfYnRfc3BsaXQpIGFuZCBXQUwgcmVkbyAoYnRyZWVfeGxv Z19zcGxpdCkgY29sbGVjdCBpdGVtcw0KKyAqIHRoaXMgd2F5IGFuZCB0aGVuIGxheSBvdXQgZWFj aCBoYWxmIHdpdGggX2J0X3NwbGl0X2xlYWZfaGFsZiwgc28gdGhlIHR3bw0KKyAqIHByb2R1Y2Ug Ynl0ZS1pZGVudGljYWwgY29kZWQgcGFnZXMgd2l0aG91dCBsb2dnaW5nIGEgZnVsbC1wYWdlIGlt YWdlLg0KKyAqLw0KK3ZvaWQNCitfYnRfc3BsaXRfbGVhZl9jb2xsZWN0KFBhZ2Ugb3JpZ3BhZ2Us IE9mZnNldE51bWJlciBmaXJzdHJpZ2h0b2ZmLA0KKwkJCQkJICAgT2Zmc2V0TnVtYmVyIG5ld2l0 ZW1vZmYsIEluZGV4VHVwbGUgbmV3aXRlbSwNCisJCQkJCSAgIGJvb2wgbmV3aXRlbW9ubGVmdCwg T2Zmc2V0TnVtYmVyIG9yaWdwYWdlcG9zdGluZ29mZiwNCisJCQkJCSAgIEluZGV4VHVwbGUgbnBv c3RpbmcsDQorCQkJCQkgICBJbmRleFR1cGxlICpsZWZ0aXRlbXMsIGludCAqbmxlZnQsDQorCQkJ CQkgICBJbmRleFR1cGxlICpyaWdodGl0ZW1zLCBpbnQgKm5yaWdodCkNCit7DQorCUJUUGFnZU9w YXF1ZSBvb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKG9yaWdwYWdlKTsNCisJT2Zmc2V0TnVtYmVy IG1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIob3JpZ3BhZ2UpOw0KKwlib29sCQloYXNw cmVmaXggPSBQX0hBU1BSRUZJWChvb3BhcXVlKTsNCisJT2Zmc2V0TnVtYmVyIGk7DQorDQorCSpu bGVmdCA9IDA7DQorCSpucmlnaHQgPSAwOw0KKwlmb3IgKGkgPSBQX0ZJUlNUREFUQUtFWShvb3Bh cXVlKTsgaSA8PSBtYXhvZmY7IGkgPSBPZmZzZXROdW1iZXJOZXh0KGkpKQ0KKwl7DQorCQlJdGVt SWQJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVtSWQob3JpZ3BhZ2UsIGkpOw0KKwkJSW5kZXhUdXBsZQlk YXRhaXRlbSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShvcmlncGFnZSwgaXRlbWlkKTsNCisJ CUJUSXRlbUJ1ZglkaWJ1ZjsNCisNCisJCWlmIChoYXNwcmVmaXgpDQorCQkJZGF0YWl0ZW0gPSBf YnRfcHJlZml4X2RlY29kZShvcmlncGFnZSwgZGF0YWl0ZW0sICZkaWJ1Zik7DQorDQorCQlpZiAo aSA9PSBvcmlncGFnZXBvc3RpbmdvZmYpDQorCQkJZGF0YWl0ZW0gPSBucG9zdGluZzsNCisJCWVs c2UgaWYgKGkgPT0gbmV3aXRlbW9mZikNCisJCXsNCisJCQlpZiAobmV3aXRlbW9ubGVmdCkNCisJ CQkJbGVmdGl0ZW1zWygqbmxlZnQpKytdID0gbmV3aXRlbTsNCisJCQllbHNlDQorCQkJCXJpZ2h0 aXRlbXNbKCpucmlnaHQpKytdID0gbmV3aXRlbTsNCisJCX0NCisNCisJCWlmIChpIDwgZmlyc3Ry aWdodG9mZikNCisJCQlsZWZ0aXRlbXNbKCpubGVmdCkrK10gPSBDb3B5SW5kZXhUdXBsZShkYXRh aXRlbSk7DQorCQllbHNlDQorCQkJcmlnaHRpdGVtc1soKm5yaWdodCkrK10gPSBDb3B5SW5kZXhU dXBsZShkYXRhaXRlbSk7DQorCX0NCisJaWYgKGkgPD0gbmV3aXRlbW9mZikNCisJCXJpZ2h0aXRl bXNbKCpucmlnaHQpKytdID0gbmV3aXRlbTsNCit9DQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWFkcGFnZS5jDQppbmRleCA1NTcyMmZkODc5MS4uZmZjNTg0NmU0YzkgMTAwNjQ0DQotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMNCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYw0KQEAgLTE0NSw2ICsxNDUsOCBAQCBfYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt YmVyIG9mZm51bSwNCiAJCQkJaWdub3JlX2tpbGxlZF90dXBsZXMgPSBzY2FuLT5pZ25vcmVfa2ls bGVkX3R1cGxlczsNCiAJaW50CQkJaXRlbUluZGV4LA0KIAkJCQlpbmRuYXR0czsNCisJQlRJdGVt QnVmCWl0dXBidWY7CQkJLyogZGVjb2RlIHdvcmtzcGFjZSBmb3IgYSBsb29wJ3MgY3VycmVudCBp dGVtICovDQorCUJUSXRlbUJ1ZglmaW5hbGJ1ZjsJCS8qIGRlY29kZSB3b3Jrc3BhY2UgZm9yIGEg YmFja3dhcmQgZmluYWx0dXAgKi8NCiANCiAJLyogc2F2ZSB0aGUgcGFnZS9idWZmZXIgYmxvY2sg bnVtYmVyLCBhbG9uZyB3aXRoIGl0cyBzaWJsaW5nIGxpbmtzICovDQogCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7DQpAQCAtMjUyLDcgKzI1NCw3IEBAIF9idF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2Zm bnVtLA0KIAkJCQljb250aW51ZTsNCiAJCQl9DQogDQotCQkJaXR1cCA9IChJbmRleFR1cGxlKSBQ YWdlR2V0SXRlbShwYWdlLCBpaWQpOw0KKwkJCWl0dXAgPSBfYnRfZ2V0aXRlbShwYWdlLCBvZmZu dW0sICZpdHVwYnVmKTsNCiAJCQlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApKTsNCiAN CiAJCQlwc3RhdGUub2ZmbnVtID0gb2ZmbnVtOw0KQEAgLTM1Myw5ICszNTUsNyBAQCBfYnRfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVy IG9mZm51bSwNCiAJCXsNCiAJCQlpZiAobWlub2ZmIDw9IG1heG9mZiAmJiAhUF9MRUZUTU9TVChv cGFxdWUpKQ0KIAkJCXsNCi0JCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG1p bm9mZik7DQotDQotCQkJCXBzdGF0ZS5maW5hbHR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRl bShwYWdlLCBpaWQpOw0KKwkJCQlwc3RhdGUuZmluYWx0dXAgPSBfYnRfZ2V0aXRlbShwYWdlLCBt aW5vZmYsICZmaW5hbGJ1Zik7DQogDQogCQkJCWlmICh1bmxpa2VseShzby0+c2NhbkJlaGluZCkg JiYNCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUuZmlu YWx0dXApKQ0KQEAgLTQxNSw3ICs0MTUsNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwNCiAJCQllbHNlDQog CQkJCXR1cGxlX2FsaXZlID0gdHJ1ZTsNCiANCi0JCQlpdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VH ZXRJdGVtKHBhZ2UsIGlpZCk7DQorCQkJaXR1cCA9IF9idF9nZXRpdGVtKHBhZ2UsIG9mZm51bSwg Jml0dXBidWYpOw0KIAkJCUFzc2VydCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkpOw0KIA0KIAkJ CXBzdGF0ZS5vZmZudW0gPSBvZmZudW07DQpAQCAtNTk2LDkgKzU5NiwxMCBAQCBfYnRfc2V0X3N0 YXJ0aWtleShJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlKQ0KIAlC VFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7DQogCVJlbGF0aW9u CXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247DQogCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRp b25HZXREZXNjcihyZWwpOw0KLQlJdGVtSWQJCWlpZDsNCiAJSW5kZXhUdXBsZQlmaXJzdHR1cCwN CiAJCQkJbGFzdHR1cDsNCisJQlRJdGVtQnVmCWZpcnN0YnVmLA0KKwkJCQlsYXN0YnVmOw0KIAlp bnQJCQlzdGFydGlrZXkgPSAwLA0KIAkJCQlhcnJheWlkeCA9IDAsDQogCQkJCWZpcnN0Y2hhbmdp bmdhdHRudW07DQpAQCAtNjE2LDEyICs2MTcsMTAgQEAgX2J0X3NldF9zdGFydGlrZXkoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0ZSkNCiAJCXJldHVybjsNCiANCiAJ LyogbWlub2ZmIGlzIGFuIG9mZnNldCB0byB0aGUgbG93ZXN0IG5vbi1waXZvdCB0dXBsZSBvbiB0 aGUgcGFnZSAqLw0KLQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBzdGF0ZS0+cGFnZSwgcHN0YXRlLT5t aW5vZmYpOw0KLQlmaXJzdHR1cCA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwc3RhdGUtPnBh Z2UsIGlpZCk7DQorCWZpcnN0dHVwID0gX2J0X2dldGl0ZW0ocHN0YXRlLT5wYWdlLCBwc3RhdGUt Pm1pbm9mZiwgJmZpcnN0YnVmKTsNCiANCiAJLyogbWF4b2ZmIGlzIGFuIG9mZnNldCB0byB0aGUg aGlnaGVzdCBub24tcGl2b3QgdHVwbGUgb24gdGhlIHBhZ2UgKi8NCi0JaWlkID0gUGFnZUdldEl0 ZW1JZChwc3RhdGUtPnBhZ2UsIHBzdGF0ZS0+bWF4b2ZmKTsNCi0JbGFzdHR1cCA9IChJbmRleFR1 cGxlKSBQYWdlR2V0SXRlbShwc3RhdGUtPnBhZ2UsIGlpZCk7DQorCWxhc3R0dXAgPSBfYnRfZ2V0 aXRlbShwc3RhdGUtPnBhZ2UsIHBzdGF0ZS0+bWF4b2ZmLCAmbGFzdGJ1Zik7DQogDQogCS8qIERl dGVybWluZSB0aGUgZmlyc3QgYXR0cmlidXRlIHdob3NlIHZhbHVlcyBjaGFuZ2Ugb24gY2FsbGVy J3MgcGFnZSAqLw0KIAlmaXJzdGNoYW5naW5nYXR0bnVtID0gX2J0X2tlZXBfbmF0dHNfZmFzdChy ZWwsIGZpcnN0dHVwLCBsYXN0dHVwKTsNCkBAIC0yMDUzLDYgKzIwNTIsNyBAQCBfYnRfY2hlY2tr ZXlzX2xvb2tfYWhlYWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0 ZSwNCiAJU2NhbkRpcmVjdGlvbiBkaXIgPSBwc3RhdGUtPmRpcjsNCiAJT2Zmc2V0TnVtYmVyIGFo ZWFkb2ZmbnVtOw0KIAlJbmRleFR1cGxlCWFoZWFkOw0KKwlCVEl0ZW1CdWYJYWhlYWRidWY7CQkv KiBkZWNvZGUgd29ya3NwYWNlIGZvciB0aGUgbG9vay1haGVhZCB0dXBsZSAqLw0KIA0KIAlBc3Nl cnQoIXBzdGF0ZS0+Zm9yY2Vub25yZXF1aXJlZCk7DQogDQpAQCAtMjA4OCw4ICsyMDg4LDcgQEAg X2J0X2NoZWNra2V5c19sb29rX2FoZWFkKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0 YXRlICpwc3RhdGUsDQogCQlhaGVhZG9mZm51bSA9IE1heCgoaW50KSBwc3RhdGUtPm1pbm9mZiwN CiAJCQkJCQkgIChpbnQpIHBzdGF0ZS0+b2ZmbnVtIC0gcHN0YXRlLT50YXJnZXRkaXN0YW5jZSk7 DQogDQotCWFoZWFkID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBzdGF0ZS0+cGFnZSwNCi0J CQkJCQkJCQkgUGFnZUdldEl0ZW1JZChwc3RhdGUtPnBhZ2UsIGFoZWFkb2ZmbnVtKSk7DQorCWFo ZWFkID0gX2J0X2dldGl0ZW0ocHN0YXRlLT5wYWdlLCBhaGVhZG9mZm51bSwgJmFoZWFkYnVmKTsN CiAJaWYgKF9idF90dXBsZV9iZWZvcmVfYXJyYXlfc2tleXMoc2NhbiwgZGlyLCBhaGVhZCwgdHVw ZGVzYywgdHVwbmF0dHMsDQogCQkJCQkJCQkJIGZhbHNlLCAwLCBOVUxMKSkNCiAJew0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHJlZS5jDQppbmRleCAwYWJkZDdiNDlmNS4uYjhiOGVjMDE4ZjMgMTAw NjQ0DQotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jDQorKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jDQpAQCAtNDM1LDggKzQzNSwxMCBAQCBidHJl c2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywN CiAJICovDQogCWlmIChzY2FuLT54c193YW50X2l0dXAgJiYgc28tPmN1cnJUdXBsZXMgPT0gTlVM TCkNCiAJew0KLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2MoQkxDS1NaICogMik7 DQotCQlzby0+bWFya1R1cGxlcyA9IHNvLT5jdXJyVHVwbGVzICsgQkxDS1NaOw0KKwkJU2l6ZQkJ aGFsZiA9IEJUVHVwbGVTdG9yYWdlU2l6ZShzY2FuLT5pbmRleFJlbGF0aW9uKTsNCisNCisJCXNv LT5jdXJyVHVwbGVzID0gKGNoYXIgKikgcGFsbG9jKGhhbGYgKiAyKTsNCisJCXNvLT5tYXJrVHVw bGVzID0gc28tPmN1cnJUdXBsZXMgKyBoYWxmOw0KIAl9DQogDQogCS8qDQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0c2VhcmNoLmMNCmluZGV4IDYxZjYzMjUxYzZmLi5mOTMyY2EzM2MzYSAxMDA2 NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMNCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMNCkBAIC02OTYsNiArNjk2LDcgQEAg X2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLA0KIAlUdXBsZURlc2MJaXR1cGRlc2MgPSBSZWxhdGlv bkdldERlc2NyKHJlbCk7DQogCUJUUGFnZU9wYXF1ZSBvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUo cGFnZSk7DQogCUluZGV4VHVwbGUJaXR1cDsNCisJQlRJdGVtQnVmCWl0dXBidWY7DQogCUl0ZW1Q b2ludGVyIGhlYXBUaWQ7DQogCVNjYW5LZXkJCXNjYW5rZXk7DQogCWludAkJCW5jbXBrZXk7DQpA QCAtNzEzLDcgKzcxNCw3IEBAIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwNCiAJaWYgKCFQX0lT TEVBRihvcGFxdWUpICYmIG9mZm51bSA9PSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpKQ0KIAkJcmV0 dXJuIDE7DQogDQotCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgUGFnZUdl dEl0ZW1JZChwYWdlLCBvZmZudW0pKTsNCisJaXR1cCA9IF9idF9nZXRpdGVtKHBhZ2UsIG9mZm51 bSwgJml0dXBidWYpOw0KIAludHVwYXR0cyA9IEJUcmVlVHVwbGVHZXROQXR0cyhpdHVwLCByZWwp Ow0KIA0KIAkvKg0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29y dC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMNCmluZGV4IDc1NmRmYTNk Y2Y0Li45YThiMzcyMDMzZSAxMDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0c29ydC5jDQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYw0KQEAg LTI0MSw2ICsyNDEsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRQYWdlU3RhdGUNCiAJU2l6ZQkJYnRw c19sYXN0ZXh0cmE7IC8qIGxhc3QgaXRlbSdzIGV4dHJhIHBvc3RpbmcgbGlzdCBzcGFjZSAqLw0K IAl1aW50MzIJCWJ0cHNfbGV2ZWw7CQkvKiB0cmVlIGxldmVsICgwID0gbGVhZikgKi8NCiAJU2l6 ZQkJYnRwc19mdWxsOwkJLyogImZ1bGwiIGlmIGxlc3MgdGhhbiB0aGlzIG11Y2ggZnJlZSBzcGFj ZSAqLw0KKwkvKiBMZWFmIHByZWZpeCBjb21wcmVzc2lvbjogdGhlIGNhbmRpZGF0ZSBwcmVmaXgg b2YgdGhlIHBhZ2UgYmVpbmcgZmlsbGVkICovDQorCWNvbnN0IGNoYXIgKmJ0cHNfcHJlZml4Owkv KiBpbnRvIHRoZSBwYWdlJ3MgZmlyc3QgZGF0YSBpdGVtLCBvciBOVUxMICovDQorCVNpemUJCWJ0 cHNfcHJlZml4bGVuOyAvKiBpdHMgbGVuZ3RoICgwID0gbm8gY2FuZGlkYXRlKSAqLw0KKwlTaXpl CQlidHBzX2NvZGVkc2F2ZWQ7CS8qIGJ5dGVzIHRoZSBwYWdlJ3MgaXRlbXMgd291bGQgc2F2ZSBj b2RlZCAqLw0KIAlzdHJ1Y3QgQlRQYWdlU3RhdGUgKmJ0cHNfbmV4dDsJLyogbGluayB0byBwYXJl bnQgbGV2ZWwsIGlmIGFueSAqLw0KIH0gQlRQYWdlU3RhdGU7DQogDQpAQCAtODU2LDcgKzg2MCw4 IEBAIF9idF9idWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUgKnN0YXRl LCBJbmRleFR1cGxlIGl0dXAsDQogCSAqLw0KIAlBc3NlcnQobGFzdF90cnVuY2V4dHJhID09IDAg fHwgaXNsZWFmKTsNCiAJaWYgKHBnc3BjIDwgaXR1cHN6ICsgKGlzbGVhZiA/IE1BWEFMSUdOKHNp emVvZihJdGVtUG9pbnRlckRhdGEpKSA6IDApIHx8DQotCQkocGdzcGMgKyBsYXN0X3RydW5jZXh0 cmEgPCBzdGF0ZS0+YnRwc19mdWxsICYmIGxhc3Rfb2ZmID4gUF9GSVJTVEtFWSkpDQorCQkocGdz cGMgKyBsYXN0X3RydW5jZXh0cmEgKyBzdGF0ZS0+YnRwc19jb2RlZHNhdmVkIDwgc3RhdGUtPmJ0 cHNfZnVsbCAmJg0KKwkJIGxhc3Rfb2ZmID4gUF9GSVJTVEtFWSkpDQogCXsNCiAJCS8qDQogCQkg KiBGaW5pc2ggb2ZmIHRoZSBwYWdlIGFuZCB3cml0ZSBpdCBvdXQuDQpAQCAtOTgwLDYgKzk4NSwx NSBAQCBfYnRfYnVpbGRhZGQoQlRXcml0ZVN0YXRlICp3c3RhdGUsIEJUUGFnZVN0YXRlICpzdGF0 ZSwgSW5kZXhUdXBsZSBpdHVwLA0KIAkJCW5vcGFxdWUtPmJ0cG9fbmV4dCA9IFBfTk9ORTsJLyog cmVkdW5kYW50ICovDQogCQl9DQogDQorCQkvKg0KKwkJICogVGhlIG9sZCBsZWFmIHBhZ2UgaXMg Y29tcGxldGU6IGZhdWx0IGl0IGZvcndhcmQgaW50byB0aGUNCisJCSAqIEJUUF9QUkVGSVggZm9y bWF0IGlmIGEgcHJlZml4IHBheXMgb2ZmLiAgRG9uZSBhZnRlciBidHBzX2xvd2tleQ0KKwkJICog KHRoZSBkb3dubGluaywgYSBjb3B5IG9mIHRoZSB1bmNvZGVkIGhpZ2gga2V5KSBpcyBzYXZlZCwg c2luY2UNCisJCSAqIGNvbXByZXNzaW9uIHJld3JpdGVzIG9wYWdlIGluIHBsYWNlLg0KKwkJICov DQorCQlpZiAoaXNsZWFmKQ0KKwkJCV9idF9wcmVmaXhfY29tcHJlc3NfcGFnZSh3c3RhdGUtPmlu ZGV4LCBvcGFnZSk7DQorDQogCQkvKg0KIAkJICogV3JpdGUgb3V0IHRoZSBvbGQgcGFnZS4gX2J0 X2Jsd3JpdGVwYWdlIHRha2VzIG93bmVyc2hpcCBvZiB0aGUNCiAJCSAqICdvcGFnZScgYnVmZmVy Lg0KQEAgLTk5MCw2ICsxMDA0LDExIEBAIF9idF9idWlsZGFkZChCVFdyaXRlU3RhdGUgKndzdGF0 ZSwgQlRQYWdlU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXAsDQogCQkgKiBSZXNldCBsYXN0 X29mZiB0byBwb2ludCB0byBuZXcgcGFnZQ0KIAkJICovDQogCQlsYXN0X29mZiA9IFBfRklSU1RL RVk7DQorDQorCQkvKiBUaGUgbmV3IHBhZ2Ugc3RhcnRzIHdpdGggbm8gcHJlZml4IGNhbmRpZGF0 ZSBhbmQgbm8gc2F2aW5ncyB5ZXQuICovDQorCQlzdGF0ZS0+YnRwc19wcmVmaXggPSBOVUxMOw0K KwkJc3RhdGUtPmJ0cHNfcHJlZml4bGVuID0gMDsNCisJCXN0YXRlLT5idHBzX2NvZGVkc2F2ZWQg PSAwOw0KIAl9DQogDQogCS8qDQpAQCAtMTAxNyw2ICsxMDM2LDM0IEBAIF9idF9idWlsZGFkZChC VFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRQYWdlU3RhdGUgKnN0YXRlLCBJbmRleFR1cGxlIGl0dXAs DQogCV9idF9zb3J0YWRkdHVwKG5wYWdlLCBpdHVwc3osIGl0dXAsIGxhc3Rfb2ZmLA0KIAkJCQkg ICAhaXNsZWFmICYmIGxhc3Rfb2ZmID09IFBfRklSU1RLRVkpOw0KIA0KKwkvKg0KKwkgKiBMZWFm IHByZWZpeCBjb21wcmVzc2lvbiBhY2NvdW50aW5nIChTdHJhdGVneSAxKTogdGhlIHBhZ2UncyBl dmVudHVhbA0KKwkgKiBwcmVmaXggaXMgaXRzIGZpcnN0IGRhdGEgaXRlbSdzIGZpcnN0LWNvbHVt biBieXRlczsgZXN0aW1hdGUgaG93IG11Y2gNCisJICogcm9vbSBjb2RpbmcgdGhpcyBwYWdlJ3Mg aXRlbXMgd291bGQgZnJlZSwgc28gdGhlIGZpbGxmYWN0b3IgdGVzdCBhYm92ZQ0KKwkgKiBjYW4g cGFjayBtb3JlIHBsYWluIGl0ZW1zIG9udG8gYSBwYWdlIHRoYXQgd2lsbCBzaHJpbmsgd2hlbiBp dCBpcw0KKwkgKiBjb21wcmVzc2VkIGF0IGZpbmlzaC4gIEl0ZW1zIGFyZSBzdGlsbCBwbGFjZWQg cGxhaW4gaGVyZTsgdGhlIGVzdGltYXRlDQorCSAqIG9ubHkgcmVsYXhlcyB0aGUgc29mdCBsaW1p dCwgbmV2ZXIgdGhlIGhhcmQgZml0IGNoZWNrLg0KKwkgKi8NCisJaWYgKGlzbGVhZiAmJiBfYnRf cHJlZml4X2VuYWJsZWQod3N0YXRlLT5pbmRleCkpDQorCXsNCisJCWlmIChzdGF0ZS0+YnRwc19w cmVmaXggPT0gTlVMTCkNCisJCQlzdGF0ZS0+YnRwc19wcmVmaXggPSBfYnRfcHJlZml4X2NhbmRp ZGF0ZShpdHVwLA0KKwkJCQkJCQkJCQkJCQkgICZzdGF0ZS0+YnRwc19wcmVmaXhsZW4pOw0KKwkJ ZWxzZQ0KKwkJew0KKwkJCWludAkJCXNoYXJlZCA9IF9idF9wcmVmaXhfc2hhcmVkKHN0YXRlLT5i dHBzX3ByZWZpeCwNCisJCQkJCQkJCQkJCSAgIHN0YXRlLT5idHBzX3ByZWZpeGxlbiwgaXR1cCk7 DQorDQorCQkJLyoNCisJCQkgKiBBIGNvZGVkIGl0ZW0gZHJvcHMgYHNoYXJlZCcgdmFsdWUgYnl0 ZXMgYnV0IGtlZXBzIGEgMS1ieXRlDQorCQkJICogc2hhcmUgY291bnQ7IGNvdW50IHRoZSBuZXQg TUFYQUxJR04tcm91bmRlZCBzYXZpbmcuDQorCQkJICovDQorCQkJaWYgKHNoYXJlZCA+IDEpDQor CQkJCXN0YXRlLT5idHBzX2NvZGVkc2F2ZWQgKz0NCisJCQkJCU1BWEFMSUdOKGl0dXBzeikgLSBN QVhBTElHTihpdHVwc3ogLSAoc2hhcmVkIC0gMSkpOw0KKwkJfQ0KKwl9DQorDQogCXN0YXRlLT5i dHBzX2J1ZiA9IG5idWY7DQogCXN0YXRlLT5idHBzX2Jsa25vID0gbmJsa25vOw0KIAlzdGF0ZS0+ YnRwc19sYXN0b2ZmID0gbGFzdF9vZmY7DQpAQCAtMTExNSw2ICsxMTYyLDExIEBAIF9idF91cHBl cnNodXRkb3duKEJUV3JpdGVTdGF0ZSAqd3N0YXRlLCBCVFBhZ2VTdGF0ZSAqc3RhdGUpDQogCQkg KiBiYWNrIG9uZSBzbG90LiAgVGhlbiB3ZSBjYW4gZHVtcCBvdXQgdGhlIHBhZ2UuDQogCQkgKi8N CiAJCV9idF9zbGlkZWxlZnQoKFBhZ2UpIHMtPmJ0cHNfYnVmKTsNCisNCisJCS8qIEZhdWx0IHRo ZSBmaW5pc2hlZCByaWdodG1vc3QgbGVhZiBmb3J3YXJkIGludG8gQlRQX1BSRUZJWCBpZiBpdCBw YXlzLiAqLw0KKwkJaWYgKHMtPmJ0cHNfbGV2ZWwgPT0gMCkNCisJCQlfYnRfcHJlZml4X2NvbXBy ZXNzX3BhZ2Uod3N0YXRlLT5pbmRleCwgKFBhZ2UpIHMtPmJ0cHNfYnVmKTsNCisNCiAJCV9idF9i bHdyaXRlcGFnZSh3c3RhdGUsIHMtPmJ0cHNfYnVmLCBzLT5idHBzX2Jsa25vKTsNCiAJCXMtPmJ0 cHNfYnVmID0gTlVMTDsJCS8qIHdyaXRlcGFnZSB0b29rIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVy ICovDQogCX0NCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNwbGl0 bG9jLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNwbGl0bG9jLmMNCmluZGV4IGRl OWVjYTNjOGIyLi4xNGJlZTU2OGU0NSAxMDA2NDQNCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0c3BsaXRsb2MuYw0KKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRz cGxpdGxvYy5jDQpAQCAtNTIsNiArNTIsOSBAQCB0eXBlZGVmIHN0cnVjdA0KIAlpbnQJCQlyaWdo dHNwYWNlOwkJLyogc3BhY2UgYXZhaWxhYmxlIGZvciBpdGVtcyBvbiByaWdodCBwYWdlICovDQog CWludAkJCW9sZGRhdGFpdGVtc3RvdGFsOwkvKiBzcGFjZSB0YWtlbiBieSBvbGQgaXRlbXMgKi8N CiAJU2l6ZQkJbWluZmlyc3RyaWdodHN6OwkvKiBzbWFsbGVzdCBmaXJzdHJpZ2h0IHNpemUgKi8N CisJYm9vbAkJaGFzcHJlZml4OwkJLyogb3JpZ3BhZ2UgaXMgcHJlZml4LWNvbXByZXNzZWQgKEJU UF9QUkVGSVgpICovDQorCUJUSXRlbUJ1ZglsYnVmOwkJCS8qIGRlY29kZSBzY3JhdGNoIGZvciBf YnRfc3BsaXRfbGFzdGxlZnQgKi8NCisJQlRJdGVtQnVmCXJidWY7CQkJLyogZGVjb2RlIHNjcmF0 Y2ggZm9yIF9idF9zcGxpdF9maXJzdHJpZ2h0ICovDQogDQogCS8qIGNhbmRpZGF0ZSBzcGxpdCBw b2ludCBkYXRhICovDQogCWludAkJCW1heHNwbGl0czsJCS8qIG1heGltdW0gbnVtYmVyIG9mIHNw bGl0cyAqLw0KQEAgLTE3Miw2ICsxNzUsMjMgQEAgX2J0X2ZpbmRzcGxpdGxvYyhSZWxhdGlvbiBy ZWwsDQogCW9sZGRhdGFpdGVtc3RvdGFsID0gcmlnaHRzcGFjZSAtIChpbnQpIFBhZ2VHZXRFeGFj dEZyZWVTcGFjZShvcmlncGFnZSk7DQogCWxlYWZmaWxsZmFjdG9yID0gQlRHZXRGaWxsRmFjdG9y KHJlbCk7DQogDQorCS8qDQorCSAqIE9uIGEgcHJlZml4LWNvbXByZXNzZWQgbGVhZiB0aGUgcGFn ZSBjYXJyaWVzIGFuIGV4dHJhIFBSRUZJWCBpdGVtIHRoYXQNCisJICogaXMgbm90IGEgZGF0YSBp dGVtLiAgVGhlIHNwbGl0IGlzIHJlYXNvbmVkIGFib3V0IGluIENPREVEIChvbi1wYWdlKQ0KKwkg KiBieXRlcyAtLSB0aGUgcGh5c2ljYWwgcmVhbGl0eSBvZiB0aGUgcGFnZSBhbmQgb2YgZWFjaCBy ZWNvbXByZXNzZWQgaGFsZg0KKwkgKiAtLSBzbyBzdWJ0cmFjdCBvbmx5IHRoZSBQUkVGSVggaXRl bSdzIHNwYWNlIGZyb20gb2xkZGF0YWl0ZW1zdG90YWwgYW5kDQorCSAqIHVzZSB0aGUgb24tcGFn ZSAoY29kZWQpIGl0ZW0gc2l6ZXMgaW4gdGhlIHNjYW4gYmVsb3cuICAoUGxhaW4tc2l6ZQ0KKwkg KiBhY2NvdW50aW5nIGlzIG5vdCB1c2FibGUgaGVyZTogYSBjb21wcmVzc2VkIGxlYWYgY2FuIGhv bGQgZmFyIG1vcmUNCisJICogbG9naWNhbCBkYXRhIHRoYW4gdHdvIHBsYWluIHBhZ2VzLCBzbyBh IHBsYWluIHNwbGl0IGNhbiBiZSBpbmZlYXNpYmxlLikNCisJICovDQorCWlmIChQX0hBU1BSRUZJ WChvcGFxdWUpKQ0KKwl7DQorCQlJdGVtSWQJCXBpaSA9IFBhZ2VHZXRJdGVtSWQob3JpZ3BhZ2Us IEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKTsNCisNCisJCW9sZGRhdGFpdGVtc3RvdGFsIC09 IChpbnQpIChNQVhBTElHTihJdGVtSWRHZXRMZW5ndGgocGlpKSkgKw0KKwkJCQkJCQkJCXNpemVv ZihJdGVtSWREYXRhKSk7DQorCX0NCisNCiAJLyogUGFzc2VkLWluIG5ld2l0ZW1zeiBpcyBNQVhB TElHTkVEIGJ1dCBkb2VzIG5vdCBpbmNsdWRlIGxpbmUgcG9pbnRlciAqLw0KIAluZXdpdGVtc3og Kz0gc2l6ZW9mKEl0ZW1JZERhdGEpOw0KIAlzdGF0ZS5yZWwgPSByZWw7DQpAQCAtMTg1LDYgKzIw NSw3IEBAIF9idF9maW5kc3BsaXRsb2MoUmVsYXRpb24gcmVsLA0KIAlzdGF0ZS5vbGRkYXRhaXRl bXN0b3RhbCA9IG9sZGRhdGFpdGVtc3RvdGFsOw0KIAlzdGF0ZS5taW5maXJzdHJpZ2h0c3ogPSBT SVpFX01BWDsNCiAJc3RhdGUubmV3aXRlbW9mZiA9IG5ld2l0ZW1vZmY7DQorCXN0YXRlLmhhc3By ZWZpeCA9IFBfSEFTUFJFRklYKG9wYXF1ZSk7DQogDQogCS8qIG5ld2l0ZW0gY2Fubm90IGJlIGEg cG9zdGluZyBsaXN0IGl0ZW0gKi8NCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQb3N0aW5nKG5ld2l0 ZW0pKTsNCkBAIC00NjMsNiArNDg0LDE5IEBAIF9idF9yZWNzcGxpdGxvYyhGaW5kU3BsaXREYXRh ICpzdGF0ZSwNCiAJbmV3aXRlbWlzZmlyc3RyaWdodCA9IChmaXJzdHJpZ2h0b2ZmID09IHN0YXRl LT5uZXdpdGVtb2ZmICYmDQogCQkJCQkJICAgIW5ld2l0ZW1vbmxlZnQpOw0KIA0KKwkvKg0KKwkg KiBSZWplY3QgYSBzcGxpdCB0aGF0IHdvdWxkIGxlYXZlIHRoZSBsZWZ0IHBhZ2Ugd2l0aCBubyBk YXRhIGl0ZW1zIGF0IGFsbA0KKwkgKiAoZmlyc3RyaWdodG9mZiBhdCB0aGUgZmlyc3QgZGF0YSBr ZXksIHdpdGggbmV3aXRlbSBub3Qgb24gdGhlIGxlZnQpLg0KKwkgKiBVcHN0cmVhbSdzIHNwbGl0 LXBvaW50IGhldXJpc3RpY3MgbmV2ZXIgY2hvb3NlIHN1Y2ggYSBwb2ludCBmb3IgYSBwbGFpbg0K KwkgKiBwYWdlOyBvbiBhIHByZWZpeC1jb21wcmVzc2VkIHBhZ2UgdGhlIGNvZGVkLXNpemUgYWNj b3VudGluZyBjYW4gbWFrZSBpdA0KKwkgKiBsb29rIGF0dHJhY3RpdmUsIGFuZCBfYnRfc3BsaXQg Y2Fubm90IGZvcm0gYSBsZWZ0IGhpZ2gga2V5IGZyb20gYQ0KKwkgKiBub25leGlzdGVudCBsYXN0 bGVmdC4NCisJICovDQorCWlmIChzdGF0ZS0+aGFzcHJlZml4ICYmDQorCQlmaXJzdHJpZ2h0b2Zm ID09IFBfRklSU1REQVRBS0VZKEJUUGFnZUdldE9wYXF1ZShzdGF0ZS0+b3JpZ3BhZ2UpKSAmJg0K KwkJIW5ld2l0ZW1vbmxlZnQpDQorCQlyZXR1cm47DQorDQogCWlmIChuZXdpdGVtaXNmaXJzdHJp Z2h0KQ0KIAkJZmlyc3RyaWdodHN6ID0gc3RhdGUtPm5ld2l0ZW1zejsNCiAJZWxzZQ0KQEAgLTY4 Niw4ICs3MjAsMTIgQEAgX2J0X2FmdGVybmV3aXRlbW9mZihGaW5kU3BsaXREYXRhICpzdGF0ZSwg T2Zmc2V0TnVtYmVyIG1heG9mZiwNCiAJICovDQogCWlmIChzdGF0ZS0+bmV3aXRlbW9mZiA+IG1h eG9mZikNCiAJew0KKwkJQlRJdGVtQnVmCXRidWY7DQorDQogCQlpdGVtaWQgPSBQYWdlR2V0SXRl bUlkKHN0YXRlLT5vcmlncGFnZSwgbWF4b2ZmKTsNCiAJCXR1cCA9IChJbmRleFR1cGxlKSBQYWdl R2V0SXRlbShzdGF0ZS0+b3JpZ3BhZ2UsIGl0ZW1pZCk7DQorCQlpZiAoc3RhdGUtPmhhc3ByZWZp eCkNCisJCQl0dXAgPSBfYnRfcHJlZml4X2RlY29kZShzdGF0ZS0+b3JpZ3BhZ2UsIHR1cCwgJnRi dWYpOw0KIAkJa2VlcG5hdHRzID0gX2J0X2tlZXBfbmF0dHNfZmFzdChzdGF0ZS0+cmVsLCB0dXAs IHN0YXRlLT5uZXdpdGVtKTsNCiANCiAJCWlmIChrZWVwbmF0dHMgPiAxICYmIGtlZXBuYXR0cyA8 PSBua2V5YXR0cykNCkBAIC03MTQsMTIgKzc1MiwyMCBAQCBfYnRfYWZ0ZXJuZXdpdGVtb2ZmKEZp bmRTcGxpdERhdGEgKnN0YXRlLCBPZmZzZXROdW1iZXIgbWF4b2ZmLA0KIAkgKi8NCiAJaXRlbWlk ID0gUGFnZUdldEl0ZW1JZChzdGF0ZS0+b3JpZ3BhZ2UsIE9mZnNldE51bWJlclByZXYoc3RhdGUt Pm5ld2l0ZW1vZmYpKTsNCiAJdHVwID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHN0YXRlLT5v cmlncGFnZSwgaXRlbWlkKTsNCi0JLyogRG8gY2hlYXBlciB0ZXN0IGZpcnN0ICovDQorCS8qIERv IGNoZWFwZXIgdGVzdCBmaXJzdCAodF90aWQgYW5kIHRoZSBwb3N0aW5nIGJpdCBzdXJ2aXZlIGNv ZGluZykgKi8NCiAJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcodHVwKSB8fA0KIAkJIV9idF9hZGph Y2VudGh0aWQoJnR1cC0+dF90aWQsICZzdGF0ZS0+bmV3aXRlbS0+dF90aWQpKQ0KIAkJcmV0dXJu IGZhbHNlOw0KIAkvKiBDaGVjayBzYW1lIGNvbmRpdGlvbnMgYXMgcmlnaHRtb3N0IGl0ZW0gY2Fz ZSwgdG9vICovDQotCWtlZXBuYXR0cyA9IF9idF9rZWVwX25hdHRzX2Zhc3Qoc3RhdGUtPnJlbCwg dHVwLCBzdGF0ZS0+bmV3aXRlbSk7DQorCWlmIChzdGF0ZS0+aGFzcHJlZml4KQ0KKwl7DQorCQlC VEl0ZW1CdWYJdGJ1ZjsNCisNCisJCXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHN0YXRlLT5vcmln cGFnZSwgdHVwLCAmdGJ1Zik7DQorCQlrZWVwbmF0dHMgPSBfYnRfa2VlcF9uYXR0c19mYXN0KHN0 YXRlLT5yZWwsIHR1cCwgc3RhdGUtPm5ld2l0ZW0pOw0KKwl9DQorCWVsc2UNCisJCWtlZXBuYXR0 cyA9IF9idF9rZWVwX25hdHRzX2Zhc3Qoc3RhdGUtPnJlbCwgdHVwLCBzdGF0ZS0+bmV3aXRlbSk7 DQogDQogCWlmIChrZWVwbmF0dHMgPiAxICYmIGtlZXBuYXR0cyA8PSBua2V5YXR0cykNCiAJew0K QEAgLTExNjAsMTIgKzEyMDYsMzggQEAgc3RhdGljIGlubGluZSBJbmRleFR1cGxlDQogX2J0X3Nw bGl0X2xhc3RsZWZ0KEZpbmRTcGxpdERhdGEgKnN0YXRlLCBTcGxpdFBvaW50ICpzcGxpdCkNCiB7 DQogCUl0ZW1JZAkJaXRlbWlkOw0KKwlPZmZzZXROdW1iZXIgb2ZmOw0KIA0KIAlpZiAoc3BsaXQt Pm5ld2l0ZW1vbmxlZnQgJiYgc3BsaXQtPmZpcnN0cmlnaHRvZmYgPT0gc3RhdGUtPm5ld2l0ZW1v ZmYpDQogCQlyZXR1cm4gc3RhdGUtPm5ld2l0ZW07DQogDQotCWl0ZW1pZCA9IFBhZ2VHZXRJdGVt SWQoc3RhdGUtPm9yaWdwYWdlLA0KLQkJCQkJCSAgIE9mZnNldE51bWJlclByZXYoc3BsaXQtPmZp cnN0cmlnaHRvZmYpKTsNCisJb2ZmID0gT2Zmc2V0TnVtYmVyUHJldihzcGxpdC0+Zmlyc3RyaWdo dG9mZik7DQorDQorCS8qDQorCSAqIE9uIGEgcHJlZml4LWNvbXByZXNzZWQgbGVhZiB0aGUgUFJF RklYIGl0ZW0gc2l0cyBqdXN0IGJlZm9yZSB0aGUgZmlyc3QNCisJICogZGF0YSBpdGVtLiAgV2hl biB0aGUgc3BsaXQgYm91bmRhcnkgaXMgYXQgdGhlIGZpcnN0IGRhdGEga2V5LCB0aGUgZGF0YQ0K KwkgKiBwcmVkZWNlc3NvciBpcyB0aGUgaGlnaCBrZXkgb24gYSBwbGFpbiBwYWdlIChhIHBpdm90 LCByZWFkIHBsYWluKTsgYQ0KKwkgKiByaWdodG1vc3QgcGFnZSBoYXMgbm9uZSwgc28gZmFsbCBi YWNrIHRvIHRoZSBmaXJzdCBkYXRhIGl0ZW0gKHRoaXMgb25seQ0KKwkgKiBmZWVkcyBwZW5hbHR5 IGVzdGltYXRpb24sIG5ldmVyIHBsYWNlbWVudCkuICBOZXZlciByZWFkIHRoZSBQUkVGSVggaXRl bQ0KKwkgKiBhcyBhIGRhdGEgdHVwbGUuDQorCSAqLw0KKwlpZiAoc3RhdGUtPmhhc3ByZWZpeCkN CisJew0KKwkJQlRQYWdlT3BhcXVlIG9wID0gQlRQYWdlR2V0T3BhcXVlKHN0YXRlLT5vcmlncGFn ZSk7DQorDQorCQlpZiAob2ZmID09IEJUUGFnZUdldFByZWZpeE9mZihvcCkpDQorCQl7DQorCQkJ aWYgKCFQX1JJR0hUTU9TVChvcCkpDQorCQkJCXJldHVybiAoSW5kZXhUdXBsZSkgUGFnZUdldEl0 ZW0oc3RhdGUtPm9yaWdwYWdlLA0KKwkJCQkJCQkJCQkJCVBhZ2VHZXRJdGVtSWQoc3RhdGUtPm9y aWdwYWdlLCBQX0hJS0VZKSk7DQorCQkJb2ZmID0gUF9GSVJTVERBVEFLRVkob3ApOw0KKwkJfQ0K KwkJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChzdGF0ZS0+b3JpZ3BhZ2UsIG9mZik7DQorCQlyZXR1 cm4gX2J0X3ByZWZpeF9kZWNvZGUoc3RhdGUtPm9yaWdwYWdlLA0KKwkJCQkJCQkJIChJbmRleFR1 cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+b3JpZ3BhZ2UsIGl0ZW1pZCksDQorCQkJCQkJCQkgJnN0 YXRlLT5sYnVmKTsNCisJfQ0KKwlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHN0YXRlLT5vcmlncGFn ZSwgb2ZmKTsNCiAJcmV0dXJuIChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+b3JpZ3Bh Z2UsIGl0ZW1pZCk7DQogfQ0KIA0KQEAgLTExODEsNSArMTI1Myw5IEBAIF9idF9zcGxpdF9maXJz dHJpZ2h0KEZpbmRTcGxpdERhdGEgKnN0YXRlLCBTcGxpdFBvaW50ICpzcGxpdCkNCiAJCXJldHVy biBzdGF0ZS0+bmV3aXRlbTsNCiANCiAJaXRlbWlkID0gUGFnZUdldEl0ZW1JZChzdGF0ZS0+b3Jp Z3BhZ2UsIHNwbGl0LT5maXJzdHJpZ2h0b2ZmKTsNCisJaWYgKHN0YXRlLT5oYXNwcmVmaXgpDQor CQlyZXR1cm4gX2J0X3ByZWZpeF9kZWNvZGUoc3RhdGUtPm9yaWdwYWdlLA0KKwkJCQkJCQkJIChJ bmRleFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0ZS0+b3JpZ3BhZ2UsIGl0ZW1pZCksDQorCQkJCQkJ CQkgJnN0YXRlLT5yYnVmKTsNCiAJcmV0dXJuIChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShzdGF0 ZS0+b3JpZ3BhZ2UsIGl0ZW1pZCk7DQogfQ0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0dXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMu Yw0KaW5kZXggODVjMWI2MzI1MjIuLjVkYzJiMmYzMDUwIDEwMDY0NA0KLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jDQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHV0aWxzLmMNCkBAIC02MDIsNyArNjAyLDkgQEAgYnRvcHRpb25zKERhdHVtIHJlbG9w dGlvbnMsIGJvb2wgdmFsaWRhdGUpDQogCQl7InZhY3V1bV9jbGVhbnVwX2luZGV4X3NjYWxlX2Zh Y3RvciIsIFJFTE9QVF9UWVBFX1JFQUwsDQogCQlvZmZzZXRvZihCVE9wdGlvbnMsIHZhY3V1bV9j bGVhbnVwX2luZGV4X3NjYWxlX2ZhY3Rvcil9LA0KIAkJeyJkZWR1cGxpY2F0ZV9pdGVtcyIsIFJF TE9QVF9UWVBFX0JPT0wsDQotCQlvZmZzZXRvZihCVE9wdGlvbnMsIGRlZHVwbGljYXRlX2l0ZW1z KX0NCisJCW9mZnNldG9mKEJUT3B0aW9ucywgZGVkdXBsaWNhdGVfaXRlbXMpfSwNCisJCXsicHJl Zml4X2NvbXByZXNzaW9uIiwgUkVMT1BUX1RZUEVfQk9PTCwNCisJCW9mZnNldG9mKEJUT3B0aW9u cywgcHJlZml4X2NvbXByZXNzaW9uKX0NCiAJfTsNCiANCiAJcmV0dXJuIChieXRlYSAqKSBidWls ZF9yZWxvcHRpb25zKHJlbG9wdGlvbnMsIHZhbGlkYXRlLA0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR4bG9nLmMNCmluZGV4IGRmZjdkMjg2ZmM4Li4xZTU4MjUxOTIzNyAxMDA2NDQNCi0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jDQorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHhsb2cuYw0KQEAgLTI0Myw2ICsyNDMsMjExIEBAIGJ0cmVlX3hsb2dfaW5z ZXJ0KGJvb2wgaXNsZWFmLCBib29sIGlzbWV0YSwgYm9vbCBwb3N0aW5nLA0KIAkJX2J0X3Jlc3Rv cmVfbWV0YShyZWNvcmQsIDIpOw0KIH0NCiANCisvKg0KKyAqIFJlcGxheSBhIHByZWZpeC1jb21w cmVzc2VkIGxlYWYgcGFnZSBzcGxpdC4NCisgKg0KKyAqIFJhdGhlciB0aGFuIHJlcGxheSBsb2dn ZWQgdHVwbGVzICh3aG9zZSBjb2RlZCBwaHlzaWNhbCBsYXlvdXQNCisgKiBfYnRfcmVzdG9yZV9w YWdlIGNvdWxkIG5vdCByZXByb2R1Y2UpLCByZWJ1aWxkIGJvdGggaGFsdmVzIHRoZSB3YXkgdGhl DQorICogcHJpbWFyeSBkaWQ6IGNvbGxlY3QgdGhlIHNwbGl0J3MgcGxhaW4gaXRlbXMgZnJvbSB0 aGUgcHJlLXNwbGl0IG9yaWdpbmFsDQorICogcGFnZSAoYmxvY2sgMCkgd2l0aCBfYnRfc3BsaXRf bGVhZl9jb2xsZWN0LCB0aGVuIGxheSBlYWNoIGhhbGYgb3V0IGNvZGVkDQorICogYWdhaW5zdCBp dHMgY2hvc2VuIHByZWZpeCAoY2FycmllZCBpbiB0aGUgcmVjb3JkKSB3aXRoIF9idF9zcGxpdF9s ZWFmX2xheW91dC4NCisgKiBUaGUgcmVzdWx0IGlzIGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBwcmlt YXJ5LCBzbyBubyBmdWxsLXBhZ2UgaW1hZ2UgaXMNCisgKiBuZWVkZWQuICBUaGUgcmVjb3JkJ3Mg YmxvY2stMCBkYXRhIGNhcnJpZXMsIGluIG9yZGVyOiBuZXdpdGVtICh3aGVuIGl0IHdlbnQNCisg KiBvbiB0aGUgbGVmdCwgb3IgZm9yIGEgcG9zdGluZyBzcGxpdCksIHRoZSBsZWZ0IGhpZ2gga2V5 LCBhbmQgdGhlIGxlZnQgaGFsZidzDQorICogcHJlZml4IGJ5dGVzOyBibG9jay0xIGRhdGEgY2Fy cmllcyB0aGUgcmlnaHQgaGFsZidzIHByZWZpeCBieXRlcy4NCisgKi8NCitzdGF0aWMgdm9pZA0K K2J0cmVlX3hsb2dfc3BsaXRfcHJlZml4KFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkLCBCbG9ja051 bWJlciBvcmlncGFnZW51bWJlciwNCisJCQkJCQlCbG9ja051bWJlciByaWdodHBhZ2VudW1iZXIs IEJsb2NrTnVtYmVyIHNwYWdlbnVtYmVyLA0KKwkJCQkJCWJvb2wgbmV3aXRlbW9ubGVmdCkNCit7 DQorCVhMb2dSZWNQdHIJbHNuID0gcmVjb3JkLT5FbmRSZWNQdHI7DQorCXhsX2J0cmVlX3NwbGl0 ICp4bHJlYyA9ICh4bF9idHJlZV9zcGxpdCAqKSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOw0KKwlC dWZmZXIJCXJidWY7DQorCUJ1ZmZlcgkJb3JpZ2J1ZjsNCisJUGFnZQkJb3JpZ3BhZ2U7DQorCUJU UGFnZU9wYXF1ZSBvb3BhcXVlOw0KKwljaGFyCSAgICpkYXRhcG9zOw0KKwlTaXplCQlkYXRhbGVu Ow0KKwlJbmRleFR1cGxlCW5ld2l0ZW0gPSBOVUxMOw0KKwlJbmRleFR1cGxlCWxlZnRfaGlrZXk7 DQorCUluZGV4VHVwbGUJcmlnaHRfaGlrZXkgPSBOVUxMOw0KKwlJbmRleFR1cGxlCW5wb3N0aW5n ID0gTlVMTDsNCisJU2l6ZQkJbmV3aXRlbXN6ID0gMDsNCisJY29uc3QgY2hhciAqbGVmdHByZWZp eCA9IE5VTEw7DQorCWNvbnN0IGNoYXIgKnJpZ2h0cHJlZml4ID0gTlVMTDsNCisJSW5kZXhUdXBs ZQlyaWdodGl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07DQorCWludAkJCW5yaWdodCA9IDA7 DQorCVBhZ2UJCXJpZ2h0cGFnZTsNCisJQlRQYWdlT3BhcXVlIHJvcGFxdWU7DQorCVhMb2dSZWRv QWN0aW9uIG9yaWdhY3Rpb247DQorDQorCS8qDQorCSAqIFRoZSByaWdodCAobmV3KSBwYWdlIGlz IHJlYnVpbHQgZW50aXJlbHkgZnJvbSBkYXRhIGxvZ2dlZCB3aXRoIHRoZQ0KKwkgKiByZWNvcmQs IGluZGVwZW5kZW50IG9mIGJsb2NrIDAsIGJlY2F1c2UgYmxvY2sgMCBtYXkgYmUgcmVzdG9yZWQg ZnJvbSBhbg0KKwkgKiBhdXRvbWF0aWMgZnVsbC1wYWdlIGltYWdlIChzbyBpdHMgbGl2ZSBjb250 ZW50cyBhZnRlciByZWRvIGFyZSB0aGUgbGVmdA0KKwkgKiBoYWxmLCBub3QgdGhlIHByZS1zcGxp dCBwYWdlKS4gIEJsb2NrLTEgZGF0YSBpcywgaW4gb3JkZXI6IHRoZSByaWdodA0KKwkgKiBoYWxm J3MgY2hvc2VuIHByZWZpeCBieXRlcyAocmlnaHRwcmVmaXhsZW4pLCB0aGUgcmlnaHQgaGlnaCBr ZXkgd2hlbiB0aGUNCisJICogc3BsaXQgaXMgbm90IHJpZ2h0bW9zdCAoc3BhZ2VudW1iZXIgIT0g UF9OT05FKSwgdGhlbiB0aGUgcmlnaHQgaGFsZidzDQorCSAqIHBsYWluIGRhdGEgaXRlbXMgaW4g b2Zmc2V0IG9yZGVyIChzZWxmLWRlc2NyaWJpbmcgYnkgSW5kZXhUdXBsZVNpemUpLg0KKwkgKi8N CisJZGF0YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAxLCAmZGF0YWxlbik7DQor CWlmICh4bHJlYy0+ZmxhZ3MgJiBYTEhfU1BMSVRfUkZQSSkNCisJew0KKwkJLyoNCisJCSAqIFRo ZSByaWdodCBoYWxmJ3MgcGxhaW4gaXRlbXMgd291bGQgaGF2ZSBvdmVyZmxvd2VkIHRoZSBXQUwg cmVjb3JkLA0KKwkJICogc28gdGhlIHByaW1hcnkgY2FycmllZCB0aGUgY29kZWQgcmlnaHQgcGFn ZSBhcyBhIGZvcmNlZCBmdWxsLXBhZ2UNCisJCSAqIGltYWdlLiAgUmVzdG9yZSBpdCBmcm9tIHRo YXQgaW1hZ2UuDQorCQkgKi8NCisJCWlmIChYTG9nUmVhZEJ1ZmZlckZvclJlZG8ocmVjb3JkLCAx LCAmcmJ1ZikgIT0gQkxLX1JFU1RPUkVEKQ0KKwkJCWVsb2coRVJST1IsICJwcmVmaXggbGVhZiBz cGxpdCByaWdodCBwYWdlIGxhY2tzIGl0cyBmdWxsLXBhZ2UgaW1hZ2UiKTsNCisJfQ0KKwllbHNl DQorCXsNCisJCWlmICh4bHJlYy0+cmlnaHRwcmVmaXhsZW4gPiAwKQ0KKwkJew0KKwkJCXJpZ2h0 cHJlZml4ID0gZGF0YXBvczsNCisJCQlkYXRhcG9zICs9IE1BWEFMSUdOKHhscmVjLT5yaWdodHBy ZWZpeGxlbik7DQorCQkJZGF0YWxlbiAtPSBNQVhBTElHTih4bHJlYy0+cmlnaHRwcmVmaXhsZW4p Ow0KKwkJfQ0KKwkJaWYgKHNwYWdlbnVtYmVyICE9IFBfTk9ORSkNCisJCXsNCisJCQlyaWdodF9o aWtleSA9IChJbmRleFR1cGxlKSBkYXRhcG9zOw0KKwkJCWRhdGFwb3MgKz0gTUFYQUxJR04oSW5k ZXhUdXBsZVNpemUocmlnaHRfaGlrZXkpKTsNCisJCQlkYXRhbGVuIC09IE1BWEFMSUdOKEluZGV4 VHVwbGVTaXplKHJpZ2h0X2hpa2V5KSk7DQorCQl9DQorCQl3aGlsZSAoZGF0YWxlbiA+IDApDQor CQl7DQorCQkJSW5kZXhUdXBsZQlpdCA9IChJbmRleFR1cGxlKSBkYXRhcG9zOw0KKwkJCVNpemUJ CXN6ID0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUoaXQpKTsNCisNCisJCQlBc3NlcnQobnJpZ2h0 IDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsNCisJCQlyaWdodGl0ZW1zW25yaWdodCsrXSA9IGl0 Ow0KKwkJCWRhdGFwb3MgKz0gc3o7DQorCQkJZGF0YWxlbiAtPSBzejsNCisJCX0NCisJCUFzc2Vy dChkYXRhbGVuID09IDApOw0KKw0KKwkJcmJ1ZiA9IFhMb2dJbml0QnVmZmVyRm9yUmVkbyhyZWNv cmQsIDEpOw0KKwkJcmlnaHRwYWdlID0gQnVmZmVyR2V0UGFnZShyYnVmKTsNCisJCV9idF9wYWdl aW5pdChyaWdodHBhZ2UsIEJ1ZmZlckdldFBhZ2VTaXplKHJidWYpKTsNCisJCXJvcGFxdWUgPSBC VFBhZ2VHZXRPcGFxdWUocmlnaHRwYWdlKTsNCisJCXJvcGFxdWUtPmJ0cG9fcHJldiA9IG9yaWdw YWdlbnVtYmVyOw0KKwkJcm9wYXF1ZS0+YnRwb19uZXh0ID0gc3BhZ2VudW1iZXI7DQorCQlyb3Bh cXVlLT5idHBvX2xldmVsID0geGxyZWMtPmxldmVsOw0KKwkJcm9wYXF1ZS0+YnRwb19mbGFncyA9 IEJUUF9MRUFGOw0KKwkJcm9wYXF1ZS0+YnRwb19jeWNsZWlkID0gMDsNCisJCWlmICghX2J0X3Nw bGl0X2xlYWZfbGF5b3V0KHJpZ2h0cGFnZSwgcmlnaHRfaGlrZXksIHJpZ2h0aXRlbXMsIG5yaWdo dCwNCisJCQkJCQkJCSAgIHJpZ2h0cHJlZml4LCB4bHJlYy0+cmlnaHRwcmVmaXhsZW4pKQ0KKwkJ CWVsb2coRVJST1IsICJmYWlsZWQgdG8gcmVwbGF5IHJpZ2h0IGhhbGYgb2YgYSBwcmVmaXggbGVh ZiBzcGxpdCIpOw0KKwkJUGFnZVNldExTTihyaWdodHBhZ2UsIGxzbik7DQorCX0NCisJTWFya0J1 ZmZlckRpcnR5KHJidWYpOw0KKw0KKwkvKg0KKwkgKiBSZWJ1aWxkIHRoZSBsZWZ0IChvcmlnaW5h bCkgcGFnZSBmcm9tIHRoZSBwcmUtc3BsaXQgcGFnZSwgdW5sZXNzIGl0IHdhcw0KKwkgKiByZXN0 b3JlZCBmcm9tIGEgZnVsbC1wYWdlIGltYWdlICh0aGVuIGl0IGlzIGFscmVhZHkgdGhlIGZpbmFs IGxlZnQNCisJICogaGFsZikuICBCbG9jay0wIGRhdGEgaXM6IFtuZXdpdGVtIChsZWZ0L3Bvc3Rp bmcpXSBbbGVmdCBoaWdoIGtleV0NCisJICogW2xlZnQgcHJlZml4XS4gIFRoZSBsZWZ0IHBsYWlu IGl0ZW1zIGNvbWUgZnJvbSB0aGUgcHJlLXNwbGl0IHBhZ2UuDQorCSAqLw0KKwlvcmlnYWN0aW9u ID0gWExvZ1JlYWRCdWZmZXJGb3JSZWRvKHJlY29yZCwgMCwgJm9yaWdidWYpOw0KKwlvcmlncGFn ZSA9IEJ1ZmZlckdldFBhZ2Uob3JpZ2J1Zik7DQorDQorCWlmIChvcmlnYWN0aW9uID09IEJMS19O RUVEU19SRURPKQ0KKwl7DQorCQlJbmRleFR1cGxlICpsZWZ0aXRlbXM7DQorCQlpbnQJCQlubGVm dDsNCisJCU9mZnNldE51bWJlciBvcmlncGFnZXBvc3RpbmdvZmYgPSBJbnZhbGlkT2Zmc2V0TnVt YmVyOw0KKwkJUGFnZQkJbGVmdHBhZ2U7DQorCQlCVFBhZ2VPcGFxdWUgbG9wYXF1ZTsNCisNCisJ CW9vcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUob3JpZ3BhZ2UpOw0KKw0KKwkJZGF0YXBvcyA9IFhM b2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAwLCAmZGF0YWxlbik7DQorCQlpZiAobmV3aXRlbW9u bGVmdCB8fCB4bHJlYy0+cG9zdGluZ29mZiAhPSAwKQ0KKwkJew0KKwkJCW5ld2l0ZW0gPSAoSW5k ZXhUdXBsZSkgZGF0YXBvczsNCisJCQluZXdpdGVtc3ogPSBNQVhBTElHTihJbmRleFR1cGxlU2l6 ZShuZXdpdGVtKSk7DQorCQkJZGF0YXBvcyArPSBuZXdpdGVtc3o7DQorCQkJZGF0YWxlbiAtPSBu ZXdpdGVtc3o7DQorCQl9DQorCQlsZWZ0X2hpa2V5ID0gKEluZGV4VHVwbGUpIGRhdGFwb3M7DQor CQlkYXRhcG9zICs9IE1BWEFMSUdOKEluZGV4VHVwbGVTaXplKGxlZnRfaGlrZXkpKTsNCisJCWRh dGFsZW4gLT0gTUFYQUxJR04oSW5kZXhUdXBsZVNpemUobGVmdF9oaWtleSkpOw0KKwkJaWYgKHhs cmVjLT5sZWZ0cHJlZml4bGVuID4gMCkNCisJCXsNCisJCQlsZWZ0cHJlZml4ID0gZGF0YXBvczsN CisJCQlkYXRhcG9zICs9IHhscmVjLT5sZWZ0cHJlZml4bGVuOw0KKwkJCWRhdGFsZW4gLT0geGxy ZWMtPmxlZnRwcmVmaXhsZW47DQorCQl9DQorCQlBc3NlcnQoZGF0YWxlbiA9PSAwKTsNCisNCisJ CWlmICh4bHJlYy0+cG9zdGluZ29mZiAhPSAwKQ0KKwkJew0KKwkJCUl0ZW1JZAkJaXRlbWlkOw0K KwkJCUluZGV4VHVwbGUJb3Bvc3Rpbmc7DQorCQkJQlRJdGVtQnVmCW9idWY7DQorDQorCQkJb3Jp Z3BhZ2Vwb3N0aW5nb2ZmID0gT2Zmc2V0TnVtYmVyUHJldih4bHJlYy0+bmV3aXRlbW9mZik7DQor CQkJbmV3aXRlbSA9IENvcHlJbmRleFR1cGxlKG5ld2l0ZW0pOw0KKwkJCWl0ZW1pZCA9IFBhZ2VH ZXRJdGVtSWQob3JpZ3BhZ2UsIG9yaWdwYWdlcG9zdGluZ29mZik7DQorCQkJb3Bvc3RpbmcgPSAo SW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ob3JpZ3BhZ2UsIGl0ZW1pZCk7DQorCQkJaWYgKFBfSEFT UFJFRklYKG9vcGFxdWUpKQ0KKwkJCQlvcG9zdGluZyA9IF9idF9wcmVmaXhfZGVjb2RlKG9yaWdw YWdlLCBvcG9zdGluZywgJm9idWYpOw0KKwkJCW5wb3N0aW5nID0gX2J0X3N3YXBfcG9zdGluZyhu ZXdpdGVtLCBvcG9zdGluZywgeGxyZWMtPnBvc3RpbmdvZmYpOw0KKwkJfQ0KKw0KKwkJbGVmdGl0 ZW1zID0gcGFsbG9jX2FycmF5KEluZGV4VHVwbGUsIFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIob3Jp Z3BhZ2UpICsgMik7DQorCQlyaWdodGl0ZW1zWzBdID0gTlVMTDsJLyogbm90IHJldXNlZCBiZWxv dyAqLw0KKwkJew0KKwkJCUluZGV4VHVwbGUJZHVtbXlyaWdodFtNYXhJbmRleFR1cGxlc1BlclBh Z2VdOw0KKwkJCWludAkJCWR1bW15bnI7DQorDQorCQkJX2J0X3NwbGl0X2xlYWZfY29sbGVjdChv cmlncGFnZSwgeGxyZWMtPmZpcnN0cmlnaHRvZmYsDQorCQkJCQkJCQkgICB4bHJlYy0+bmV3aXRl bW9mZiwgbmV3aXRlbSwgbmV3aXRlbW9ubGVmdCwNCisJCQkJCQkJCSAgIG9yaWdwYWdlcG9zdGlu Z29mZiwgbnBvc3RpbmcsDQorCQkJCQkJCQkgICBsZWZ0aXRlbXMsICZubGVmdCwgZHVtbXlyaWdo dCwgJmR1bW15bnIpOw0KKwkJfQ0KKw0KKwkJbGVmdHBhZ2UgPSBQYWdlR2V0VGVtcFBhZ2VDb3B5 U3BlY2lhbChvcmlncGFnZSk7DQorCQlsb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKGxlZnRwYWdl KTsNCisJCWxvcGFxdWUtPmJ0cG9fZmxhZ3MgPSBCVFBfTEVBRiB8IEJUUF9JTkNPTVBMRVRFX1NQ TElUOw0KKwkJbG9wYXF1ZS0+YnRwb19wcmV2ID0gb29wYXF1ZS0+YnRwb19wcmV2Ow0KKwkJbG9w YXF1ZS0+YnRwb19uZXh0ID0gcmlnaHRwYWdlbnVtYmVyOw0KKwkJbG9wYXF1ZS0+YnRwb19sZXZl bCA9IHhscmVjLT5sZXZlbDsNCisJCWxvcGFxdWUtPmJ0cG9fY3ljbGVpZCA9IDA7DQorCQlpZiAo IV9idF9zcGxpdF9sZWFmX2xheW91dChsZWZ0cGFnZSwgbGVmdF9oaWtleSwgbGVmdGl0ZW1zLCBu bGVmdCwNCisJCQkJCQkJCSAgIGxlZnRwcmVmaXgsIHhscmVjLT5sZWZ0cHJlZml4bGVuKSkNCisJ CQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIHJlcGxheSBsZWZ0IGhhbGYgb2YgYSBwcmVmaXggbGVh ZiBzcGxpdCIpOw0KKwkJUGFnZVJlc3RvcmVUZW1wUGFnZShsZWZ0cGFnZSwgb3JpZ3BhZ2UpOw0K KwkJUGFnZVNldExTTihvcmlncGFnZSwgbHNuKTsNCisJCU1hcmtCdWZmZXJEaXJ0eShvcmlnYnVm KTsNCisJCXBmcmVlKGxlZnRpdGVtcyk7DQorCX0NCisNCisJLyogRml4IGxlZnQtbGluayBvZiB0 aGUgcGFnZSB0byB0aGUgcmlnaHQgb2YgdGhlIG5ldyByaWdodCBzaWJsaW5nLiAqLw0KKwlpZiAo c3BhZ2VudW1iZXIgIT0gUF9OT05FKQ0KKwl7DQorCQlCdWZmZXIJCXNidWY7DQorDQorCQlpZiAo WExvZ1JlYWRCdWZmZXJGb3JSZWRvKHJlY29yZCwgMiwgJnNidWYpID09IEJMS19ORUVEU19SRURP KQ0KKwkJew0KKwkJCVBhZ2UJCXNwYWdlID0gQnVmZmVyR2V0UGFnZShzYnVmKTsNCisJCQlCVFBh Z2VPcGFxdWUgc3BhZ2VvcCA9IEJUUGFnZUdldE9wYXF1ZShzcGFnZSk7DQorDQorCQkJc3BhZ2Vv cC0+YnRwb19wcmV2ID0gcmlnaHRwYWdlbnVtYmVyOw0KKwkJCVBhZ2VTZXRMU04oc3BhZ2UsIGxz bik7DQorCQkJTWFya0J1ZmZlckRpcnR5KHNidWYpOw0KKwkJfQ0KKwkJaWYgKEJ1ZmZlcklzVmFs aWQoc2J1ZikpDQorCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihzYnVmKTsNCisJfQ0KKw0KKwlVbmxv Y2tSZWxlYXNlQnVmZmVyKHJidWYpOw0KKwlpZiAoQnVmZmVySXNWYWxpZChvcmlnYnVmKSkNCisJ CVVubG9ja1JlbGVhc2VCdWZmZXIob3JpZ2J1Zik7DQorfQ0KKw0KIHN0YXRpYyB2b2lkDQogYnRy ZWVfeGxvZ19zcGxpdChib29sIG5ld2l0ZW1vbmxlZnQsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3Jk KQ0KIHsNCkBAIC0yNjQsNiArNDY5LDE4IEBAIGJ0cmVlX3hsb2dfc3BsaXQoYm9vbCBuZXdpdGVt b25sZWZ0LCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkNCiAJaWYgKCFYTG9nUmVjR2V0QmxvY2tU YWdFeHRlbmRlZChyZWNvcmQsIDIsIE5VTEwsIE5VTEwsICZzcGFnZW51bWJlciwgTlVMTCkpDQog CQlzcGFnZW51bWJlciA9IFBfTk9ORTsNCiANCisJLyoNCisJICogQSBwcmVmaXgtY29tcHJlc3Nl ZCBsZWFmIHNwbGl0IGlzIHJlcGxheWVkIGJ5IHJlYnVpbGRpbmcgYm90aCBoYWx2ZXMNCisJICog ZnJvbSB0aGUgcHJlLXNwbGl0IG9yaWdpbmFsIHBhZ2UsIGV4YWN0bHkgYXMgdGhlIHByaW1hcnkg ZGlkLCBzbyB0aGUNCisJICogY29kZWQgcGFnZXMgY29tZSBvdXQgYnl0ZS1pZGVudGljYWwgd2l0 aG91dCBhIGZ1bGwtcGFnZSBpbWFnZS4NCisJICovDQorCWlmICh4bHJlYy0+ZmxhZ3MgJiBYTEhf U1BMSVRfTEVBRlBSRUZJWCkNCisJew0KKwkJYnRyZWVfeGxvZ19zcGxpdF9wcmVmaXgocmVjb3Jk LCBvcmlncGFnZW51bWJlciwgcmlnaHRwYWdlbnVtYmVyLA0KKwkJCQkJCQkJc3BhZ2VudW1iZXIs IG5ld2l0ZW1vbmxlZnQpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQogCS8qDQogCSAqIENsZWFyIHRo ZSBpbmNvbXBsZXRlIHNwbGl0IGZsYWcgb24gdGhlIGFwcHJvcHJpYXRlIGNoaWxkIHBhZ2Ugb25l IGxldmVsDQogCSAqIGRvd24gd2hlbiBvcmlncGFnZS9idWYgaXMgYW4gaW50ZXJuYWwgcGFnZSAo dGhlcmUgbXVzdCBoYXZlIGJlZW4NCkBAIC0yODAsNyArNDk3LDcgQEAgYnRyZWVfeGxvZ19zcGxp dChib29sIG5ld2l0ZW1vbmxlZnQsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQ0KIAlpZiAoIWlz bGVhZikNCiAJCV9idF9jbGVhcl9pbmNvbXBsZXRlX3NwbGl0KHJlY29yZCwgMyk7DQogDQotCS8q IFJlY29uc3RydWN0IHJpZ2h0IChuZXcpIHNpYmxpbmcgcGFnZSBmcm9tIHNjcmF0Y2ggKi8NCisJ LyogUmVjb25zdHJ1Y3QgcmlnaHQgKG5ldykgc2libGluZyBwYWdlIGZyb20gdGhlIGxvZ2dlZCB0 dXBsZXMuICovDQogCXJidWYgPSBYTG9nSW5pdEJ1ZmZlckZvclJlZG8ocmVjb3JkLCAxKTsNCiAJ ZGF0YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAxLCAmZGF0YWxlbik7DQogCXJw YWdlID0gQnVmZmVyR2V0UGFnZShyYnVmKTsNCkBAIC00NjgsNiArNjg1LDU2IEBAIGJ0cmVlX3hs b2dfZGVkdXAoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpDQogCQlCVERlZHVwU3RhdGUgc3RhdGU7 DQogCQlCVERlZHVwSW50ZXJ2YWwgKmludGVydmFsczsNCiAJCVBhZ2UJCW5ld3BhZ2U7DQorCQli b29sCQlwYWdlcHJlZml4OwkJLyogc291cmNlIHBhZ2UgaXMgQlRQX1BSRUZJWCAqLw0KKwkJQlRJ dGVtQnVmCWN1cmJ1ZjsJCQkvKiBkZWNvZGUgc2NyYXRjaCBmb3IgdGhlIGN1cnJlbnQgaXRlbSAq Lw0KKwkJQlRJdGVtQnVmCWJhc2VidWY7CQkvKiBkZWNvZGUgc2NyYXRjaCBrZXB0IGZvciB0aGUg cGVuZGluZyBiYXNlICovDQorDQorCQlpZiAoeGxyZWMtPnByZWZpeGxlbiA+IDApDQorCQl7DQor CQkJLyoNCisJCQkgKiBQcmVmaXgtZGVkdXA6IHRoZSBkZWR1cGVkIHJlc3VsdCB3YXMgY2Fycmll ZCBhcyB0aGUgY2hvc2VuIHByZWZpeA0KKwkJCSAqIGJ5dGVzLCB0aGVuICh1bmxlc3MgcmlnaHRt b3N0KSB0aGUgaGlnaCBrZXksIHRoZW4gdGhlIGRlZHVwZWQNCisJCQkgKiBwbGFpbiBpdGVtcy4g IFJlYnVpbGQgdGhlIGNvZGVkIHBhZ2UgYnl0ZS1mb3ItYnl0ZSB0aGUgd2F5IHRoZQ0KKwkJCSAq IHByaW1hcnkgZGlkLCB1c2luZyB0aGUgc2FtZSBsYXlvdXQgcm91dGluZSBhcyBhIHByZWZpeCBs ZWFmIHNwbGl0Lg0KKwkJCSAqLw0KKwkJCVNpemUJCWRhdGFsZW47DQorCQkJY2hhcgkgICAqZGF0 YXBvcyA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAwLCAmZGF0YWxlbik7DQorCQkJY29u c3QgY2hhciAqcHJlZml4ID0gZGF0YXBvczsNCisJCQlJbmRleFR1cGxlCWhpa2V5ID0gTlVMTDsN CisJCQlJbmRleFR1cGxlCWl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07DQorCQkJaW50CQkJ bml0ZW1zID0gMDsNCisNCisJCQlkYXRhcG9zICs9IE1BWEFMSUdOKHhscmVjLT5wcmVmaXhsZW4p Ow0KKwkJCWRhdGFsZW4gLT0gTUFYQUxJR04oeGxyZWMtPnByZWZpeGxlbik7DQorCQkJaWYgKHhs cmVjLT5mbGFncyAmIFhMSF9ERURVUF9OT1RfUklHSFRNT1NUKQ0KKwkJCXsNCisJCQkJaGlrZXkg PSAoSW5kZXhUdXBsZSkgZGF0YXBvczsNCisJCQkJZGF0YXBvcyArPSBNQVhBTElHTihJbmRleFR1 cGxlU2l6ZShoaWtleSkpOw0KKwkJCQlkYXRhbGVuIC09IE1BWEFMSUdOKEluZGV4VHVwbGVTaXpl KGhpa2V5KSk7DQorCQkJfQ0KKwkJCXdoaWxlIChkYXRhbGVuID4gMCkNCisJCQl7DQorCQkJCUlu ZGV4VHVwbGUJaXQgPSAoSW5kZXhUdXBsZSkgZGF0YXBvczsNCisJCQkJU2l6ZQkJc3ogPSBNQVhB TElHTihJbmRleFR1cGxlU2l6ZShpdCkpOw0KKw0KKwkJCQlBc3NlcnQobml0ZW1zIDwgTWF4SW5k ZXhUdXBsZXNQZXJQYWdlKTsNCisJCQkJaXRlbXNbbml0ZW1zKytdID0gaXQ7DQorCQkJCWRhdGFw b3MgKz0gc3o7DQorCQkJCWRhdGFsZW4gLT0gc3o7DQorCQkJfQ0KKwkJCUFzc2VydChkYXRhbGVu ID09IDApOw0KKw0KKwkJCW5ld3BhZ2UgPSBQYWdlR2V0VGVtcFBhZ2VDb3B5U3BlY2lhbChwYWdl KTsNCisJCQlCVFBhZ2VHZXRPcGFxdWUobmV3cGFnZSktPmJ0cG9fZmxhZ3MgJj0gfihCVFBfUFJF RklYIHwgQlRQX0hBU19HQVJCQUdFKTsNCisJCQlpZiAoIV9idF9zcGxpdF9sZWFmX2xheW91dChu ZXdwYWdlLCBoaWtleSwgaXRlbXMsIG5pdGVtcywNCisJCQkJCQkJCQkgICBwcmVmaXgsIHhscmVj LT5wcmVmaXhsZW4pKQ0KKwkJCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIHJlcGxheSBwcmVmaXgg ZGVkdXBsaWNhdGlvbiIpOw0KKwkJCVBhZ2VSZXN0b3JlVGVtcFBhZ2UobmV3cGFnZSwgcGFnZSk7 DQorCQkJUGFnZVNldExTTihwYWdlLCBsc24pOw0KKwkJCU1hcmtCdWZmZXJEaXJ0eShidWYpOw0K KwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsNCisJCQlyZXR1cm47DQorCQl9DQogDQogCQlz dGF0ZSA9IHBhbGxvY19vYmplY3QoQlREZWR1cFN0YXRlRGF0YSk7DQogCQlzdGF0ZS0+ZGVkdXBs aWNhdGUgPSB0cnVlOwkvKiB1bnVzZWQgKi8NCkBAIC00ODcsNiArNzU0LDE5IEBAIGJ0cmVlX3hs b2dfZGVkdXAoWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpDQogCQltYXhvZmYgPSBQYWdlR2V0TWF4 T2Zmc2V0TnVtYmVyKHBhZ2UpOw0KIAkJbmV3cGFnZSA9IFBhZ2VHZXRUZW1wUGFnZUNvcHlTcGVj aWFsKHBhZ2UpOw0KIA0KKwkJLyoNCisJCSAqIFRoZSBzb3VyY2UgcGFnZSBtYXkgYmUgcHJlZml4 LWNvbXByZXNzZWQgZXZlbiBvbiB0aGUgb3JkaW5hcnkNCisJCSAqIChub24tcHJlZml4KSBkZWR1 cCBwYXRoOiB0aGF0IGhhcHBlbnMgd2hlbiB0aGUgcHJpbWFyeSBkZWR1cGxpY2F0ZWQNCisJCSAq IGEgcHJlZml4IHBhZ2UgYnV0IHJlLWNvbXByZXNzaW9uIG9mIHRoZSByZXN1bHQgZGVjbGluZWQs IGxlYXZpbmcgYQ0KKwkJICogcGxhaW4gcGFnZSAocHJlZml4bGVuID09IDAsIG5vIGZ1bGwtcGFn ZSBpbWFnZSkuICBSZXByb2R1Y2UgdGhlDQorCQkgKiBwcmltYXJ5OiBsYXkgdGhlIHJlc3VsdCBv dXQgcGxhaW4gYW5kIGRlY29kZSBlYWNoIGNvZGVkIGRhdGEgaXRlbQ0KKwkJICogYmVmb3JlIGZl ZWRpbmcgaXQgdG8gdGhlIGRlZHVwIHN0YXRlIG1hY2hpbmUuICBUaGUgaGlnaCBrZXkgaXMgYQ0K KwkJICogcGl2b3QgYW5kIGlzIG5ldmVyIGNvZGVkLg0KKwkJICovDQorCQlwYWdlcHJlZml4ID0g UF9IQVNQUkVGSVgob3BhcXVlKTsNCisJCWlmIChwYWdlcHJlZml4KQ0KKwkJCUJUUGFnZUdldE9w YXF1ZShuZXdwYWdlKS0+YnRwb19mbGFncyAmPSB+QlRQX1BSRUZJWDsNCisNCiAJCWlmICghUF9S SUdIVE1PU1Qob3BhcXVlKSkNCiAJCXsNCiAJCQlJdGVtSWQJCWl0ZW1pZCA9IFBhZ2VHZXRJdGVt SWQocGFnZSwgUF9ISUtFWSk7DQpAQCAtNTA1LDggKzc4NSwxOCBAQCBidHJlZV94bG9nX2RlZHVw KFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQ0KIAkJCUl0ZW1JZAkJaXRlbWlkID0gUGFnZUdldEl0 ZW1JZChwYWdlLCBvZmZudW0pOw0KIAkJCUluZGV4VHVwbGUJaXR1cCA9IChJbmRleFR1cGxlKSBQ YWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpOw0KIA0KKwkJCS8qIERlY29kZSBvbiBhIHByZWZpeCBz b3VyY2Ugc28ga2V5cy9wb3N0aW5nIGxpc3RzIGFyZSByZWFsLiAqLw0KKwkJCWlmIChwYWdlcHJl Zml4KQ0KKwkJCQlpdHVwID0gX2J0X3ByZWZpeF9kZWNvZGUocGFnZSwgaXR1cCwgJmN1cmJ1Zik7 DQorDQogCQkJaWYgKG9mZm51bSA9PSBtaW5vZmYpDQorCQkJew0KKwkJCQkvKiBiYXNlIG11c3Qg c3Vydml2ZSB0aGUgd2hvbGUgcnVuOyBrZWVwIGl0IGluIGl0cyBvd24gYnVmZmVyICovDQorCQkJ CWlmIChwYWdlcHJlZml4KQ0KKwkJCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIChJ bmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpLA0KKwkJCQkJCQkJCQkJICZiYXNl YnVmKTsNCiAJCQkJX2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcoc3RhdGUsIGl0dXAsIG9mZm51bSk7 DQorCQkJfQ0KIAkJCWVsc2UgaWYgKHN0YXRlLT5uaW50ZXJ2YWxzIDwgeGxyZWMtPm5pbnRlcnZh bHMgJiYNCiAJCQkJCSBzdGF0ZS0+YmFzZW9mZiA9PSBpbnRlcnZhbHNbc3RhdGUtPm5pbnRlcnZh bHNdLmJhc2VvZmYgJiYNCiAJCQkJCSBzdGF0ZS0+bml0ZW1zIDwgaW50ZXJ2YWxzW3N0YXRlLT5u aW50ZXJ2YWxzXS5uaXRlbXMpDQpAQCAtNTE2LDEyICs4MDYsMTUgQEAgYnRyZWVfeGxvZ19kZWR1 cChYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkNCiAJCQl9DQogCQkJZWxzZQ0KIAkJCXsNCi0JCQkJ X2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKG5ld3BhZ2UsIHN0YXRlKTsNCisJCQkJX2J0X2RlZHVw X2ZpbmlzaF9wZW5kaW5nKG5ld3BhZ2UsIHN0YXRlLCBmYWxzZSk7DQorCQkJCWlmIChwYWdlcHJl Zml4KQ0KKwkJCQkJaXR1cCA9IF9idF9wcmVmaXhfZGVjb2RlKHBhZ2UsIChJbmRleFR1cGxlKSBQ YWdlR2V0SXRlbShwYWdlLCBpdGVtaWQpLA0KKwkJCQkJCQkJCQkJICZiYXNlYnVmKTsNCiAJCQkJ X2J0X2RlZHVwX3N0YXJ0X3BlbmRpbmcoc3RhdGUsIGl0dXAsIG9mZm51bSk7DQogCQkJfQ0KIAkJ fQ0KIA0KLQkJX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKG5ld3BhZ2UsIHN0YXRlKTsNCisJCV9i dF9kZWR1cF9maW5pc2hfcGVuZGluZyhuZXdwYWdlLCBzdGF0ZSwgZmFsc2UpOw0KIAkJQXNzZXJ0 KHN0YXRlLT5uaW50ZXJ2YWxzID09IHhscmVjLT5uaW50ZXJ2YWxzKTsNCiAJCUFzc2VydChtZW1j bXAoc3RhdGUtPmludGVydmFscywgaW50ZXJ2YWxzLA0KIAkJCQkJICBzdGF0ZS0+bmludGVydmFs cyAqIHNpemVvZihCVERlZHVwSW50ZXJ2YWwpKSA9PSAwKTsNCkBAIC02MjEsMTEgKzkxNCwyMyBA QCBidHJlZV94bG9nX3ZhY3V1bShYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkNCiAJCWlmICh4bHJl Yy0+bmRlbGV0ZWQgPiAwKQ0KIAkJCVBhZ2VJbmRleE11bHRpRGVsZXRlKHBhZ2UsIChPZmZzZXRO dW1iZXIgKikgcHRyLCB4bHJlYy0+bmRlbGV0ZWQpOw0KIA0KKwkJb3BhcXVlID0gQlRQYWdlR2V0 T3BhcXVlKHBhZ2UpOw0KKw0KKwkJLyoNCisJCSAqIE1pcnJvciB0aGUgcHJpbWFyeTogYW4gZW1w dGllZCBwcmVmaXgtY29tcHJlc3NlZCBsZWFmIGRyb3BzIGl0cw0KKwkJICogUFJFRklYIGl0ZW0g YW5kIHRoZSBCVFBfUFJFRklYIGZsYWcgKHNlZSBfYnRfZGVsaXRlbXNfdmFjdXVtKS4NCisJCSAq Lw0KKwkJaWYgKFBfSEFTUFJFRklYKG9wYXF1ZSkgJiYNCisJCQlQYWdlR2V0TWF4T2Zmc2V0TnVt YmVyKHBhZ2UpID09IEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKQ0KKwkJew0KKwkJCVBhZ2VJ bmRleFR1cGxlRGVsZXRlKHBhZ2UsIEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKTsNCisJCQlv cGFxdWUtPmJ0cG9fZmxhZ3MgJj0gfkJUUF9QUkVGSVg7DQorCQl9DQorDQogCQkvKg0KIAkJICog Q2xlYXIgdGhlIHZhY3V1bSBjeWNsZSBJRCwgYW5kIG1hcmsgdGhlIHBhZ2UgYXMgbm90IGNvbnRh aW5pbmcgYW55DQogCQkgKiBMUF9ERUFEIGl0ZW1zDQogCQkgKi8NCi0JCW9wYXF1ZSA9IEJUUGFn ZUdldE9wYXF1ZShwYWdlKTsNCiAJCW9wYXF1ZS0+YnRwb19jeWNsZWlkID0gMDsNCiAJCW9wYXF1 ZS0+YnRwb19mbGFncyAmPSB+QlRQX0hBU19HQVJCQUdFOw0KIA0KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaA0KaW5k ZXggMzA5N2U5YmIxYWYuLmNhN2U2ODUyNTQyIDEwMDY0NA0KLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL25idHJlZS5oDQorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgNCkBAIC04Myw2 ICs4Myw4IEBAIHR5cGVkZWYgQlRQYWdlT3BhcXVlRGF0YSAqQlRQYWdlT3BhcXVlOw0KICNkZWZp bmUgQlRQX0hBU19HQVJCQUdFICgxIDw8IDYpCS8qIHBhZ2UgaGFzIExQX0RFQUQgdHVwbGVzIChk ZXByZWNhdGVkKSAqLw0KICNkZWZpbmUgQlRQX0lOQ09NUExFVEVfU1BMSVQgKDEgPDwgNykJLyog cmlnaHQgc2libGluZydzIGRvd25saW5rIGlzIG1pc3NpbmcgKi8NCiAjZGVmaW5lIEJUUF9IQVNf RlVMTFhJRAkoMSA8PCA4KQkvKiBjb250YWlucyBCVERlbGV0ZWRQYWdlRGF0YSAqLw0KKyNkZWZp bmUgQlRQX1BSRUZJWAkJKDEgPDwgOSkJLyogbGVhZiBrZXlzIGNvZGVkIGFnYWluc3QgYSBwYWdl IHByZWZpeA0KKwkJCQkJCQkJCSAqIChzZWUgbmJ0cHJlZml4LmMpICovDQogDQogLyoNCiAgKiBU aGUgbWF4IGFsbG93ZWQgdmFsdWUgb2YgYSBjeWNsZSBJRCBpcyBhIGJpdCBsZXNzIHRoYW4gNjRL LiAgVGhpcyBpcw0KQEAgLTM2Nyw3ICszNjksNjEgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRWYWNTdGF0 ZQ0KIA0KICNkZWZpbmUgUF9ISUtFWQkJCQkoKE9mZnNldE51bWJlcikgMSkNCiAjZGVmaW5lIFBf RklSU1RLRVkJCQkoKE9mZnNldE51bWJlcikgMikNCi0jZGVmaW5lIFBfRklSU1REQVRBS0VZKG9w YXF1ZSkJKFBfUklHSFRNT1NUKG9wYXF1ZSkgPyBQX0hJS0VZIDogUF9GSVJTVEtFWSkNCisNCisv Kg0KKyAqIExlYWYga2V5IHByZWZpeCBjb21wcmVzc2lvbiAoc2VlIG5idHByZWZpeC5jIGZvciB0 aGUgZm9ybWF0IGFuZCBjb2RlKS4NCisgKg0KKyAqIEEgbGVhZiBvZiBhbiBpbmRleCB3aG9zZSBw cmVmaXhfY29tcHJlc3Npb24gcmVsb3B0aW9uIGlzIG9uLCBhbmQgd2hvc2UNCisgKiBmaXJzdCBr ZXkgY29sdW1uIGlzIG9mIGEgdmFybGVuYSB0eXBlLCBtYXkgYmUgZmxhZ2dlZCBCVFBfUFJFRklY LiAgU3VjaCBhDQorICogcGFnZSBob2xkcyBvbmUgZXh0cmEgaXRlbSwgdGhlIFBSRUZJWCBpdGVt LCBhdCBCVFBhZ2VHZXRQcmVmaXhPZmYgKHdoZXJlDQorICogaXRzIGZpcnN0IGRhdGEgaXRlbSB3 b3VsZCBvdGhlcndpc2UgYmUpOyBpdHMgZGF0YSBpdGVtcyBzdGFydCBvbmUgb2Zmc2V0DQorICog bGF0ZXIsIHNvIFBfRklSU1REQVRBS0VZIC0tIHdoaWNoIGV2ZXJ5IGxvb3Agb3ZlciBhIHBhZ2Un cyBkYXRhIGl0ZW1zDQorICogc3RhcnRzIGZyb20gLS0gYWNjb3VudHMgZm9yIHRoZSBmbGFnLiAg VGhlIFBSRUZJWCBpdGVtIGlzIGFuDQorICogSW5kZXhUdXBsZURhdGEgaGVhZGVyICh0X3RpZCB6 ZXJvLCB0X2luZm8gaXRzIHNpemUgYW5kIG5vdGhpbmcgZWxzZSwgc28NCisgKiB0aGF0IGNvZGUg d2Fsa2luZyBhIHBhZ2UncyBpdGVtcyBieSBJbmRleFR1cGxlU2l6ZSwgc3VjaCBhcyBzcGxpdCBy ZWRvLA0KKyAqIHN0ZXBzIG92ZXIgaXQpIGZvbGxvd2VkIGJ5IDEuLkJUUkVFX1BSRUZJWF9NQVgg cHJlZml4IGJ5dGVzLiAgVGhlIHByZWZpeCBpcw0KKyAqIGNob3NlbiBvbmx5IHdoZW4gYSBwYWdl IGlzIHdyaXR0ZW4gd2hvbGUgKENSRUFURSBJTkRFWCwgb3IgYSBoYWxmIG9mIGENCisgKiBzcGxp dCkgYW5kIG5ldmVyIGNoYW5nZXMgYWZ0ZXIgdGhhdDsgYSBwYWdlJ3MgaGlnaCBrZXksIHdoaWNo IGZpeGVzIHRoZQ0KKyAqIHByZWZpeCBpdGVtJ3Mgb2Zmc2V0LCBhbHNvIGNoYW5nZXMgb25seSBp biBhIHNwbGl0Lg0KKyAqDQorICogT24gYSBCVFBfUFJFRklYIHBhZ2UsIGV2ZXJ5IG5vbi1waXZv dCB0dXBsZSAocGxhaW4gb3IgcG9zdGluZykgd2hvc2UgZmlyc3QNCisgKiBrZXkgY29sdW1uIGlz IG5vdCBOVUxMIHN0b3JlcyB0aGF0IGNvbHVtbiBjb2RlZCwgYXMgYSB2YXJsZW5hICgxLWJ5dGUN CisgKiBoZWFkZXIgd2hlbiBpdCBmaXRzIG9uZSwgZWxzZSA0LWJ5dGUpIHdob3NlIHBheWxvYWQg c3RhcnRzIHdpdGggYSB1aW50OA0KKyAqIGBzaGFyZWQnOg0KKyAqDQorICogICBzaGFyZWQgPD0g QlRSRUVfUFJFRklYX01BWDogdGhlIHZhbHVlJ3MgZGF0YSBieXRlcyBhcmUgdGhlIHBhZ2UgcHJl Zml4J3MNCisgKgkJCQlmaXJzdCBgc2hhcmVkJyBieXRlcyBmb2xsb3dlZCBieSB0aGUgcmVzdCBv ZiB0aGUgcGF5bG9hZC4NCisgKgkJCQlUaGUgdmFsdWUncyBvd24gdmFybGVuYSBoZWFkZXIgaXMg cmVjb21wdXRlZCBvbiBkZWNvZGUgKHRoZQ0KKyAqCQkJCWZvcm0gaW5kZXhfZm9ybV90dXBsZSBn aXZlcyBpdDogMS1ieXRlIHdoZW4gaXQgZml0cywgZWxzZQ0KKyAqCQkJCTQtYnl0ZSB1bmNvbXBy ZXNzZWQpLg0KKyAqICAgc2hhcmVkID09IEJUUkVFX1BSRUZJWF9SQVc6IHRoZSByZXN0IG9mIHRo ZSBwYXlsb2FkIGlzIHRoZSB2YWx1ZSBleGFjdGx5DQorICoJCQkJYXMgc3RvcmVkLCBoZWFkZXIg aW5jbHVkZWQuICBVc2VkIGZvciBhIHZhbHVlIGNvbXByZXNzZWQNCisgKgkJCQlpbmxpbmUsIG9y IHdob3NlIGhlYWRlciBpcyBub3QgdGhlIGNhbm9uaWNhbCBmb3JtIGFib3ZlLg0KKyAqDQorICog VGhlIGJ5dGVzIGFmdGVyIHRoZSBmaXJzdCBjb2x1bW4gKGxhdGVyIGtleSBjb2x1bW5zLCBJTkNM VURFIGNvbHVtbnMsIHRoZQ0KKyAqIHBvc3RpbmcgbGlzdCwgYW5kIGFsaWdubWVudCBwYWRkaW5n KSBhcmUga2VwdCBhcyB0aGV5IGFyZSwgbW92ZWQgdG8ga2VlcA0KKyAqIHRoZWlyIGFsaWdubWVu dCwgb3IgbGVmdCBvdXQgd2hlbiB0aGV5IGFyZSBvbmx5IHRoZSBrZXkncyBjbG9zaW5nIHplcm8N CisgKiBwYWRkaW5nIChkZWNvZGUgcHV0cyB0aGVtIGJhY2spLiAgQSBwb3N0aW5nIGxpc3QgZm9s bG93cyB0aGUga2V5IGF0IHRoZSBuZXcNCisgKiBrZXkgZW5kLCBhbmQgdGhlIHBvc3Rpbmcgb2Zm c2V0IGluIHRfdGlkIGlzIGNoYW5nZWQgdG8gbWF0Y2guICBQaXZvdHMsIE5VTEwNCisgKiBmaXJz dCBjb2x1bW5zLCBhbmQgdGhlIGhpZ2gga2V5IGFyZSBzdG9yZWQgYXMgb24gYW55IG90aGVyIHBh Z2UuDQorICoNCisgKiBDb2RpbmcgYW5kIGRlY29kaW5nIGRlcGVuZCBvbmx5IG9uIHRoZSBwYWdl J3MgcHJlZml4IGFuZCB0aGUgdHVwbGUsIG5vdCBvbg0KKyAqIHRoZSBjYXRhbG9nLCBzbyBXQUwg cmVkbyBjYW4gcmVwZWF0IHRoZW0sIGFuZCBkZWNvZGluZyBnaXZlcyBiYWNrIHRoZSBwbGFpbg0K KyAqIHR1cGxlIGJ5dGUgZm9yIGJ5dGUuDQorICovDQorI2RlZmluZSBCVFJFRV9QUkVGSVhfTUFY CQkxMjYNCisjZGVmaW5lIEJUUkVFX1BSRUZJWF9SQVcJCTEyNwkvKiBzaGFyZWQgY291bnQgb2Yg YSByYXcgdmFsdWUgKi8NCisjZGVmaW5lIEJUUkVFX1BSRUZJWF9TSEFSRURfTUFTSyAweDdGCS8q IHNoYXJlZCBjb3VudCBiaXRzICovDQorI2RlZmluZSBCVFJFRV9QUkVGSVhfUkVTVAkJMHg4MAkv KiBieXRlcyBhZnRlciB0aGUgY29sdW1uIGZvbGxvdyAqLw0KKw0KKy8qIEEgbGVhZiB3aG9zZSB0 dXBsZXMgc2hhcmUgbGVzcyBvZiBpdHMgcHJlZml4IHRoYW4gdGhpcywgb24gYXZlcmFnZSwgaGFz IG5vbmUuICovDQorI2RlZmluZSBCVFJFRV9QUkVGSVhfTUlOX1NIQVJFRAk0DQorDQorI2RlZmlu ZSBQX0hBU1BSRUZJWChvcGFxdWUpCQkoKChvcGFxdWUpLT5idHBvX2ZsYWdzICYgQlRQX1BSRUZJ WCkgIT0gMCkNCisjZGVmaW5lIEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpIFwNCisJKFBfUklH SFRNT1NUKG9wYXF1ZSkgPyBQX0hJS0VZIDogUF9GSVJTVEtFWSkNCisjZGVmaW5lIFBfRklSU1RE QVRBS0VZKG9wYXF1ZSkgXA0KKwkoQlRQYWdlR2V0UHJlZml4T2ZmKG9wYXF1ZSkgKyAoUF9IQVNQ UkVGSVgob3BhcXVlKSA/IDEgOiAwKSkNCiANCiAvKg0KICAqIE5vdGVzIG9uIEItVHJlZSB0dXBs ZSBmb3JtYXQsIGFuZCBrZXkgYW5kIG5vbi1rZXkgYXR0cmlidXRlczoNCkBAIC02NzYsNiArNzMy LDM2IEBAIEJUcmVlVHVwbGVHZXRNYXhIZWFwVElEKEluZGV4VHVwbGUgaXR1cCkNCiAJcmV0dXJu ICZpdHVwLT50X3RpZDsNCiB9DQogDQorLyoNCisgKiBMZWFmIGtleSBwcmVmaXggY29tcHJlc3Np b24gKHNlZSBuYnRwcmVmaXguYyBmb3IgdGhlIGZvcm1hdCkuDQorICoNCisgKiBXb3Jrc3BhY2Ug Zm9yIF9idF9nZXRpdGVtLiAgRXZlcnkgcmVhZCBvZiBhIGxlYWYgREFUQSBpdGVtIChhbnkgaXRl bSBidXQNCisgKiB0aGUgaGlnaCBrZXkgb3IgYSBwaXZvdCkgdGhhdCBjb3VsZCBiZSBvbiBhIEJU UF9QUkVGSVggcGFnZSBnb2VzIHRocm91Z2gNCisgKiB0aGF0IGZ1bmN0aW9uIHJhdGhlciB0aGFu IGJhcmUgUGFnZUdldEl0ZW0sIHNvIGRlY29kaW5nIGhhcyBvbmUgaG9tZS4gIFRoZQ0KKyAqIHdv cmtzcGFjZSBob2xkcyBhIGRlY29kZWQgY29weTsgdGhlIHJldHVybmVkIHR1cGxlIGlzIHZhbGlk IHVudGlsIHRoZQ0KKyAqIHdvcmtzcGFjZSBpcyByZXVzZWQgb3IgdGhlIHBhZ2UgaXMgdW5sb2Nr ZWQuICBIaWdoIGtleXMgYW5kIHBpdm90cywgYW5kDQorICogaXRlbXMgYSBjYWxsZXIgY2hhbmdl cyBpbiBwbGFjZSwgYXJlIHJlYWQgd2l0aCBQYWdlR2V0SXRlbS4NCisgKi8NCit0eXBlZGVmIFBH QWxpZ25lZEJsb2NrIEJUSXRlbUJ1ZjsNCisNCitleHRlcm4gSW5kZXhUdXBsZSBfYnRfcHJlZml4 X2RlY29kZShQYWdlIHBhZ2UsIEluZGV4VHVwbGUgaXR1cCwgQlRJdGVtQnVmICpidWYpOw0KKw0K Ky8qDQorICogUmV0dXJuIHRoZSBkYXRhIGl0ZW0gYXQgYG9mZm51bScgb24gYHBhZ2UnIGFzIGEg cGxhaW4gSW5kZXhUdXBsZTogb24gYQ0KKyAqIEJUUF9QUkVGSVggcGFnZSwgdGhlIHR1cGxlIGRl Y29kZWQgaW50byBgYnVmJzsgb3RoZXJ3aXNlIHRoZSBvbi1wYWdlIHR1cGxlLA0KKyAqIGFuZCBg YnVmJyBpcyBub3QgdXNlZC4gIENhbGxlcnMgbXVzdCBub3Qgd3JpdGUgdGhyb3VnaCB0aGUgcmVz dWx0Lg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgSW5kZXhUdXBsZQ0KK19idF9nZXRpdGVtKFBhZ2Ug cGFnZSwgT2Zmc2V0TnVtYmVyIG9mZm51bSwgQlRJdGVtQnVmICpidWYpDQorew0KKwlJbmRleFR1 cGxlCWl0dXAgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgUGFnZUdldEl0ZW1JZChw YWdlLCBvZmZudW0pKTsNCisJQlRQYWdlT3BhcXVlIG9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShw YWdlKTsNCisNCisJaWYgKHVubGlrZWx5KFBfSEFTUFJFRklYKG9wYXF1ZSkpICYmIG9mZm51bSA+ IEJUUGFnZUdldFByZWZpeE9mZihvcGFxdWUpKQ0KKwkJcmV0dXJuIF9idF9wcmVmaXhfZGVjb2Rl KHBhZ2UsIGl0dXAsIGJ1Zik7DQorCXJldHVybiBpdHVwOw0KK30NCisNCiAvKg0KICAqCU9wZXJh dG9yIHN0cmF0ZWd5IG51bWJlcnMgZm9yIEItdHJlZSBoYXZlIGJlZW4gbW92ZWQgdG8gYWNjZXNz L3N0cmF0bnVtLmgsDQogICoJYmVjYXVzZSBtYW55IHBsYWNlcyBuZWVkIHRvIHVzZSB0aGVtIGlu IFNjYW5LZXlJbml0KCkgY2FsbHMuDQpAQCAtMTEyMiw2ICsxMjA4LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgQlRPcHRpb25zDQogCWludAkJCWZpbGxmYWN0b3I7CQkvKiBwYWdlIGZpbGwgZmFjdG9yIGlu IHBlcmNlbnQgKDAuLjEwMCkgKi8NCiAJZmxvYXQ4CQl2YWN1dW1fY2xlYW51cF9pbmRleF9zY2Fs ZV9mYWN0b3I7CS8qIGRlcHJlY2F0ZWQgKi8NCiAJYm9vbAkJZGVkdXBsaWNhdGVfaXRlbXM7CS8q IFRyeSB0byBkZWR1cGxpY2F0ZSBpdGVtcz8gKi8NCisJYm9vbAkJcHJlZml4X2NvbXByZXNzaW9u OyAvKiBDb2RlIGxlYWYga2V5cyBhZ2FpbnN0IGEgcGFnZSBwcmVmaXg/ICovDQogfSBCVE9wdGlv bnM7DQogDQogI2RlZmluZSBCVEdldEZpbGxGYWN0b3IocmVsYXRpb24pIFwNCkBAIC0xMTM3LDYg KzEyMjQsMzMgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRPcHRpb25zDQogCQkJCSByZWxhdGlvbi0+cmRf cmVsLT5yZWxhbSA9PSBCVFJFRV9BTV9PSUQpLCBcDQogCSgocmVsYXRpb24pLT5yZF9vcHRpb25z ID8gXA0KIAkgKChCVE9wdGlvbnMgKikgKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyktPmRlZHVwbGlj YXRlX2l0ZW1zIDogdHJ1ZSkpDQorI2RlZmluZSBCVEdldFByZWZpeENvbXByZXNzaW9uKHJlbGF0 aW9uKSBcDQorCShBc3NlcnRNYWNybyhyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJ TkRfSU5ERVggJiYgXA0KKwkJCQkgcmVsYXRpb24tPnJkX3JlbC0+cmVsYW0gPT0gQlRSRUVfQU1f T0lEKSwgXA0KKwkoKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyA/IFwNCisJICgoQlRPcHRpb25zICop IChyZWxhdGlvbiktPnJkX29wdGlvbnMpLT5wcmVmaXhfY29tcHJlc3Npb24gOiBmYWxzZSkpDQor DQorLyoNCisgKiBTaXplIG9mIG9uZSBoYWxmIChjdXJyVHVwbGVzIG9yIG1hcmtUdXBsZXMpIG9m IGFuIGluZGV4LW9ubHkgc2NhbidzIHR1cGxlDQorICogc3RvcmFnZS4gIEEgcGxhaW4gbGVhZidz IGxpdmUgbm9uLXBpdm90IHR1cGxlcyBmaXQgaW4gb25lIHBhZ2UsIHNvIEJMQ0tTWg0KKyAqIHdv dWxkIHN1ZmZpY2UgZm9yIHRoZW0uICBBIHByZWZpeC1jb21wcmVzc2VkIChCVFBfUFJFRklYKSBs ZWFmIGNhbiBob2xkIG1vcmUNCisgKiBsb2dpY2FsIGRhdGEgdGhhbiBmaXRzIHBsYWluOiB3aGVu IGl0cyB0dXBsZXMgYXJlIGRlY29kZWQgZm9yIHRoZSBzY2FuIHRoZXkNCisgKiBjYW4gZXhjZWVk IEJMQ0tTWi4gIEJlY2F1c2UgX2J0X2dldGl0ZW0oKSBkZWNvZGVzIGJhc2VkIG9uIHRoZSBwYWdl IGZsYWcsDQorICogbm90IG9uIHRoZSBjdXJyZW50IHJlbG9wdGlvbiwgYW5kIGEgQlRQX1BSRUZJ WCBwYWdlIGNhbiBwZXJzaXN0IGFmdGVyDQorICogcHJlZml4X2NvbXByZXNzaW9uIGlzIHR1cm5l ZCBvZmYgKHRoZSBmbGFnIGlzIGNsZWFyZWQgb25seSB3aGVuIGEgcGFnZSBpcw0KKyAqIHNwbGl0 LCBlbXB0aWVkIG9yIGRlZHVwLXJld3JpdHRlbiAtLSBuZXZlciBieSBBTFRFUiBJTkRFWCksIEFO WSBidHJlZSBpbmRleA0KKyAqIG1heSBjb250YWluIHN1Y2ggYSBwYWdlLiAgVGhlIGJ1ZmZlciBt dXN0IHRoZXJlZm9yZSBhbHdheXMgcmVzZXJ2ZSB0aGUgc2xhY2sNCisgKiBmb3IgYSBkZWNvZGVk IHBhZ2UsIGluZGVwZW5kZW50IG9mIHRoZSBsaXZlIHJlbG9wdGlvbjsgc2l6aW5nIGl0IG9uIHRo ZQ0KKyAqIG9wdGlvbiB3b3VsZCBvdmVyZmxvdyBjdXJyVHVwbGVzL21hcmtUdXBsZXMgb24gYSBz dXJ2aXZpbmcgcHJlZml4IGxlYWYuDQorICoNCisgKiBUaGUgYm91bmQgaXMgdGhlIG1vc3QgZGlz dGluY3QgaW5kZXggdHVwbGVzIGEgbGVhZiBjYW4gaG9sZCAoZWFjaCBhdCBsZWFzdCBhDQorICog bGluZSBwb2ludGVyIHBsdXMgYSBtaW5pbWFsbHkgY29kZWQgdHVwbGUpIHRpbWVzIHRoZSBtb3N0 IGEgc2luZ2xlIGZpcnN0DQorICogY29sdW1uIGNhbiByZWdhaW4gb24gZGVjb2RlICh0aGUgcGFn ZSBwcmVmaXgsIGF0IG1vc3QgQlRSRUVfUFJFRklYX01BWA0KKyAqIGJ5dGVzLCBNQVhBTElHTmVk KS4NCisgKi8NCisjZGVmaW5lIEJUVHVwbGVTdG9yYWdlU2l6ZShyZWxhdGlvbikgXA0KKwkoQkxD S1NaICsgKEJMQ0tTWiAvIChpbnQpIE1BWEFMSUdOKHNpemVvZihJbmRleFR1cGxlRGF0YSkgKyAy KSkgKiBcDQorCSAoaW50KSBNQVhBTElHTihCVFJFRV9QUkVGSVhfTUFYKSkNCiANCiAvKg0KICAq IENvbnN0YW50IGRlZmluaXRpb24gZm9yIHByb2dyZXNzIHJlcG9ydGluZy4gIFBoYXNlIG51bWJl cnMgbXVzdCBtYXRjaA0KQEAgLTEyMDIsNyArMTMxNiw4IEBAIGV4dGVybiBib29sIF9idF9ib3R0 b211cGRlbF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgUmVsYXRpb24gaGVhcFJlbCwN CiBleHRlcm4gdm9pZCBfYnRfZGVkdXBfc3RhcnRfcGVuZGluZyhCVERlZHVwU3RhdGUgc3RhdGUs IEluZGV4VHVwbGUgYmFzZSwNCiAJCQkJCQkJCQlPZmZzZXROdW1iZXIgYmFzZW9mZik7DQogZXh0 ZXJuIGJvb2wgX2J0X2RlZHVwX3NhdmVfaHRpZChCVERlZHVwU3RhdGUgc3RhdGUsIEluZGV4VHVw bGUgaXR1cCk7DQotZXh0ZXJuIFNpemUgX2J0X2RlZHVwX2ZpbmlzaF9wZW5kaW5nKFBhZ2UgbmV3 cGFnZSwgQlREZWR1cFN0YXRlIHN0YXRlKTsNCitleHRlcm4gU2l6ZSBfYnRfZGVkdXBfZmluaXNo X3BlbmRpbmcoUGFnZSBuZXdwYWdlLCBCVERlZHVwU3RhdGUgc3RhdGUsDQorCQkJCQkJCQkJYm9v bCBvdmVyZmxvd29rKTsNCiBleHRlcm4gSW5kZXhUdXBsZSBfYnRfZm9ybV9wb3N0aW5nKEluZGV4 VHVwbGUgYmFzZSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpodGlkcywNCiAJCQkJCQkJCSAgIGlu dCBuaHRpZHMpOw0KIGV4dGVybiB2b2lkIF9idF91cGRhdGVfcG9zdGluZyhCVFZhY3V1bVBvc3Rp bmcgdmFjcG9zdGluZyk7DQpAQCAtMTMxNSw2ICsxNDMwLDM0IEBAIGV4dGVybiB2b2lkIF9idF9j aGVja190aGlyZF9wYWdlKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcCwNCiAJCQkJCQkJCSBi b29sIG5lZWRoZWFwdGlkc3BhY2UsIFBhZ2UgcGFnZSwgSW5kZXhUdXBsZSBuZXd0dXApOw0KIGV4 dGVybiBib29sIF9idF9hbGxlcXVhbGltYWdlKFJlbGF0aW9uIHJlbCwgYm9vbCBkZWJ1Z21lc3Nh Z2UpOw0KIA0KKy8qDQorICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idHByZWZpeC5j DQorICovDQorZXh0ZXJuIGNvbnN0IGNoYXIgKl9idF9wYWdlX2dldF9wcmVmaXgoUGFnZSBwYWdl LCBTaXplICpsZW4pOw0KK2V4dGVybiB2b2lkIF9idF9wYWdlX3NldF9wcmVmaXgoUGFnZSBwYWdl LCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbGVuKTsNCitleHRlcm4gSW5kZXhUdXBsZSBfYnRf cHJlZml4X2VuY29kZShQYWdlIHBhZ2UsIEluZGV4VHVwbGUgaXR1cCk7DQorZXh0ZXJuIFNpemUg X2J0X3ByZWZpeF9jb2RlZF9zaXplKFBhZ2UgcGFnZSwgSW5kZXhUdXBsZSBpdHVwKTsNCitleHRl cm4gYm9vbCBfYnRfcHJlZml4X2VuYWJsZWQoUmVsYXRpb24gaW5kZXgpOw0KK2V4dGVybiBjb25z dCBjaGFyICpfYnRfcHJlZml4X2NhbmRpZGF0ZShJbmRleFR1cGxlIGl0dXAsIFNpemUgKmxlbik7 DQorZXh0ZXJuIGludAlfYnRfcHJlZml4X3NoYXJlZChjb25zdCBjaGFyICpwcmVmaXgsIFNpemUg cHJlZml4bGVuLCBJbmRleFR1cGxlIGl0dXApOw0KK2V4dGVybiBTaXplIF9idF9wcmVmaXhfY2hv b3NlKFJlbGF0aW9uIGluZGV4LCBJbmRleFR1cGxlICppdGVtcywgaW50IG4sDQorCQkJCQkJCSAg Y29uc3QgY2hhciAqKnByZWZpeCk7DQorZXh0ZXJuIHZvaWQgX2J0X3ByZWZpeF9jb21wcmVzc19w YWdlKFJlbGF0aW9uIGluZGV4LCBQYWdlIHBhZ2UpOw0KK2V4dGVybiB2b2lkIF9idF9zcGxpdF9s ZWFmX2hhbGYoUmVsYXRpb24gaW5kZXgsIFBhZ2UgcGFnZSwgSW5kZXhUdXBsZSBoaWtleSwNCisJ CQkJCQkJCUluZGV4VHVwbGUgKml0ZW1zLCBpbnQgbiwNCisJCQkJCQkJCWNvbnN0IGNoYXIgKm9y aWdwcmVmaXgsIFNpemUgb3JpZ3ByZWZpeGxlbiwNCisJCQkJCQkJCWNoYXIgKmNob3NlbnByZWZp eCwgU2l6ZSAqY2hvc2VucHJlZml4bGVuKTsNCitleHRlcm4gYm9vbCBfYnRfc3BsaXRfbGVhZl9s YXlvdXQoUGFnZSBwYWdlLCBJbmRleFR1cGxlIGhpa2V5LA0KKwkJCQkJCQkJICBJbmRleFR1cGxl ICppdGVtcywgaW50IG4sDQorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBwcmVm aXhsZW4pOw0KK2V4dGVybiB2b2lkIF9idF9zcGxpdF9sZWFmX2NvbGxlY3QoUGFnZSBvcmlncGFn ZSwgT2Zmc2V0TnVtYmVyIGZpcnN0cmlnaHRvZmYsDQorCQkJCQkJCQkgICBPZmZzZXROdW1iZXIg bmV3aXRlbW9mZiwgSW5kZXhUdXBsZSBuZXdpdGVtLA0KKwkJCQkJCQkJICAgYm9vbCBuZXdpdGVt b25sZWZ0LA0KKwkJCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9yaWdwYWdlcG9zdGluZ29mZiwNCisJ CQkJCQkJCSAgIEluZGV4VHVwbGUgbnBvc3RpbmcsDQorCQkJCQkJCQkgICBJbmRleFR1cGxlICps ZWZ0aXRlbXMsIGludCAqbmxlZnQsDQorCQkJCQkJCQkgICBJbmRleFR1cGxlICpyaWdodGl0ZW1z LCBpbnQgKm5yaWdodCk7DQorDQogLyoNCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4g bmJ0dmFsaWRhdGUuYw0KICAqLw0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnR4 bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oDQppbmRleCAzYTc4ZWMyN2ZlOC4u Mjg1ZWFjNmYxYWEgMTAwNjQ0DQotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oDQor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oDQpAQCAtMTU2LDI1ICsxNTYsNTkgQEAg dHlwZWRlZiBzdHJ1Y3QgeGxfYnRyZWVfc3BsaXQNCiAJT2Zmc2V0TnVtYmVyIGZpcnN0cmlnaHRv ZmY7IC8qIGZpcnN0IG9yaWdwYWdlIGl0ZW0gb24gcmlnaHRwYWdlICovDQogCU9mZnNldE51bWJl ciBuZXdpdGVtb2ZmOwkvKiBuZXcgaXRlbSdzIG9mZnNldCAqLw0KIAl1aW50MTYJCXBvc3Rpbmdv ZmY7CQkvKiBvZmZzZXQgaW5zaWRlIG9yaWcgcG9zdGluZyB0dXBsZSAqLw0KKwl1aW50MTYJCWZs YWdzOwkJCS8qIFhMSF9TUExJVF8qIGJlbG93ICovDQorCXVpbnQ4CQlsZWZ0cHJlZml4bGVuOwkv KiBsZWFmOiBsZWZ0IGhhbGYncyBwcmVmaXggbGVuZ3RoICgwIG5vbmUpICovDQorCXVpbnQ4CQly aWdodHByZWZpeGxlbjsgLyogbGVhZjogcmlnaHQgaGFsZidzIHByZWZpeCBsZW5ndGggKDAgbm9u ZSkgKi8NCiB9IHhsX2J0cmVlX3NwbGl0Ow0KIA0KLSNkZWZpbmUgU2l6ZU9mQnRyZWVTcGxpdAko b2Zmc2V0b2YoeGxfYnRyZWVfc3BsaXQsIHBvc3RpbmdvZmYpICsgc2l6ZW9mKHVpbnQxNikpDQor I2RlZmluZSBTaXplT2ZCdHJlZVNwbGl0CShvZmZzZXRvZih4bF9idHJlZV9zcGxpdCwgcmlnaHRw cmVmaXhsZW4pICsgc2l6ZW9mKHVpbnQ4KSkNCisNCisvKg0KKyAqIHhsX2J0cmVlX3NwbGl0IGZs YWcgYml0cy4NCisgKg0KKyAqIEEgcHJlZml4LWNvbXByZXNzZWQgbGVhZiBzcGxpdCBsb2dzIG5v IGZ1bGwtcGFnZSBpbWFnZSBpbiB0aGUgY29tbW9uIGNhc2U6DQorICogcmVkbyByZWJ1aWxkcyBl YWNoIGhhbGYgdGhlIHdheSB0aGUgcHJpbWFyeSBkaWQuICBUaGUgbGVmdCBoYWxmIGlzDQorICog cmVjb25zdHJ1Y3RlZCBmcm9tIHRoZSBwcmUtc3BsaXQgb3JpZ2luYWwgcGFnZSAoYmxvY2sgMCkg dG9nZXRoZXIgd2l0aCB0aGUNCisgKiBsb2dnZWQgbmV3IGl0ZW0gYW5kIGhpZ2gga2V5OyB0aGUg cmlnaHQgaGFsZiBpcyByZWNvbnN0cnVjdGVkIGZyb20gaXRzIHBsYWluDQorICogZGF0YSBpdGVt cywgd2hpY2ggYXJlIGxvZ2dlZCBhcyBibG9jay0xIGRhdGEuICBFYWNoIGhhbGYncyBjaG9zZW4g cHJlZml4DQorICogYnl0ZXMgYXJlIGxvZ2dlZCB0b28gKGJsb2NrIDAgZm9yIHRoZSBsZWZ0IGhh bGYsIGJsb2NrIDEgZm9yIHRoZSByaWdodCksIGFuZA0KKyAqIGFwcGxpZWQgd2l0aCBfYnRfc3Bs aXRfbGVhZl9sYXlvdXQoKTsgcmVkbyBjYW5ub3QgcnVuIHRoZSBwcmVmaXgtY2hvb3NpbmcNCisg KiBoZXVyaXN0aWMgaXRzZWxmLCBzbyB0aGUgcHJpbWFyeSBsb2dzIHRoZSBwcmVmaXggaXQgY2hv c2UuDQorICogbGVmdHByZWZpeGxlbi9yaWdodHByZWZpeGxlbiBnaXZlIHRoZSBsZW5ndGhzICgw IG1lYW5zIHRoZSBoYWxmIGlzIG5vdA0KKyAqIHByZWZpeC1jb21wcmVzc2VkKS4gIFhMSF9TUExJ VF9MRUFGUFJFRklYIG1hcmtzIGEgbGVhZiBzcGxpdCB0aGF0IHVzZXMgdGhpcw0KKyAqIHBhdGgg YXQgYWxsIChzbyByZWRvIHJlYnVpbGRzIGNvZGVkIHJhdGhlciB0aGFuIHJlcGxheWluZyBpdGVt cykuDQorICovDQorI2RlZmluZSBYTEhfU1BMSVRfTEVBRlBSRUZJWAkweDAxCS8qIGxlYWYgc3Bs aXQsIHJlYnVpbGQgaGFsdmVzIGNvZGVkICovDQorI2RlZmluZSBYTEhfU1BMSVRfUkZQSQkJCTB4 MDgJLyogcmlnaHQgaGFsZiBjYXJyaWVkIGJ5IGEgZnVsbC1wYWdlIGltYWdlDQorCQkJCQkJCQkJ CSAqIChpdHMgcGxhaW4gaXRlbXMgd291bGQgb3ZlcmZsb3cgdGhlIFdBTA0KKwkJCQkJCQkJCQkg KiByZWNvcmQpOyByZWRvIHJlc3RvcmVzIGl0IGZyb20gdGhlIGltYWdlICovDQogDQogLyoNCiAg KiBXaGVuIHBhZ2UgaXMgZGVkdXBsaWNhdGVkLCBjb25zZWN1dGl2ZSBncm91cHMgb2YgdHVwbGVz IHdpdGggZXF1YWwga2V5cyBhcmUNCiAgKiBtZXJnZWQgdG9nZXRoZXIgaW50byBwb3N0aW5nIGxp c3QgdHVwbGVzLg0KICAqDQotICogVGhlIFdBTCByZWNvcmQgcmVwcmVzZW50cyBhIGRlZHVwbGlj YXRpb24gcGFzcyBmb3IgYSBsZWFmIHBhZ2UuICBBbiBhcnJheQ0KLSAqIG9mIEJURGVkdXBJbnRl cnZhbCBzdHJ1Y3RzIGZvbGxvd3MuDQorICogVGhlIFdBTCByZWNvcmQgcmVwcmVzZW50cyBhIGRl ZHVwbGljYXRpb24gcGFzcyBmb3IgYSBsZWFmIHBhZ2UuICBOb3JtYWxseQ0KKyAqIChwcmVmaXhs ZW4gPT0gMCkgYW4gYXJyYXkgb2YgQlREZWR1cEludGVydmFsIHN0cnVjdHMgZm9sbG93cyBhbmQg cmVkbw0KKyAqIHJlcGxheXMgdGhlbSBhZ2FpbnN0IHRoZSBvbGQgcGFnZS4gIFdoZW4gdGhlIHBh Z2UgaXMgcHJlZml4LWNvbXByZXNzZWQNCisgKiAocHJlZml4bGVuID4gMCkgdGhlIGRlZHVwZWQg cmVzdWx0IGlzIGluc3RlYWQgY2FycmllZCBhcyB0aGUgY2hvc2VuIHByZWZpeA0KKyAqIGJ5dGVz IChwcmVmaXhsZW4pIGZvbGxvd2VkIGJ5LCB3aGVuIG5vdCByaWdodG1vc3QsIHRoZSBoaWdoIGtl eSwgdGhlbiB0aGUNCisgKiBkZWR1cGVkIHBsYWluIGRhdGEgaXRlbXMgLS0gZWFjaCBNQVhBTElH TidkIC0tIGFuZCByZWRvIGxheXMgdGhlbSBvdXQgY29kZWQNCisgKiB3aXRoIF9idF9zcGxpdF9s ZWFmX2xheW91dCgpLCBhdm9pZGluZyBhIGZ1bGwtcGFnZSBpbWFnZS4NCiAgKi8NCiB0eXBlZGVm IHN0cnVjdCB4bF9idHJlZV9kZWR1cA0KIHsNCiAJdWludDE2CQluaW50ZXJ2YWxzOw0KKwl1aW50 OAkJcHJlZml4bGVuOwkJLyogPjA6IHByZWZpeC1kZWR1cCBwYXlsb2FkLCBzZWUgYWJvdmUgKi8N CisJdWludDgJCWZsYWdzOwkJCS8qIFhMSF9ERURVUF8qICovDQogDQotCS8qIERFRFVQTElDQVRJ T04gSU5URVJWQUxTIEZPTExPVyAqLw0KKwkvKiBERURVUExJQ0FUSU9OIElOVEVSVkFMUyBvciBQ UkVGSVggUEFZTE9BRCBGT0xMT1cgKi8NCiB9IHhsX2J0cmVlX2RlZHVwOw0KIA0KLSNkZWZpbmUg U2l6ZU9mQnRyZWVEZWR1cCAJKG9mZnNldG9mKHhsX2J0cmVlX2RlZHVwLCBuaW50ZXJ2YWxzKSAr IHNpemVvZih1aW50MTYpKQ0KKyNkZWZpbmUgU2l6ZU9mQnRyZWVEZWR1cCAJKG9mZnNldG9mKHhs X2J0cmVlX2RlZHVwLCBmbGFncykgKyBzaXplb2YodWludDgpKQ0KKw0KKy8qIHhsX2J0cmVlX2Rl ZHVwIGZsYWcgYml0cyAqLw0KKyNkZWZpbmUgWExIX0RFRFVQX05PVF9SSUdIVE1PU1QJMHgwMQkv KiBwcmVmaXggcGF5bG9hZCBpbmNsdWRlcyBhIGhpZ2gga2V5ICovDQorI2RlZmluZSBYTEhfREVE VVBfUkZQSQkJCTB4MDIJLyogcHJlZml4IHBhZ2UgY2FycmllZCBhcyBhIGZvcmNlZCBpbWFnZSAq Lw0KIA0KIC8qDQogICogVGhpcyBpcyB3aGF0IHdlIG5lZWQgdG8ga25vdyBhYm91dCBwYWdlIHJl dXNlIHdpdGhpbiBidHJlZS4gIFRoaXMgcmVjb3JkDQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9uYnRyZWUvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL25idHJlZS9NYWtlZmlsZQ0K aW5kZXggMjBhMWNhNmE5MmIuLmNhMDc3OWU5YjU3IDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy9uYnRyZWUvTWFrZWZpbGUNCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbmJ0cmVlL01ha2Vm aWxlDQpAQCAtMyw3ICszLDggQEANCiBFWFRSQV9JTlNUQUxMID0gc3JjL3Rlc3QvbW9kdWxlcy9p bmplY3Rpb25fcG9pbnRzIGNvbnRyaWIvYW1jaGVjaw0KIA0KIFJFR1JFU1MgPSBuYnRyZWVfaGFs Zl9kZWFkX3BhZ2VzIFwNCi0JbmJ0cmVlX2luY29tcGxldGVfc3BsaXRzDQorCW5idHJlZV9pbmNv bXBsZXRlX3NwbGl0cyBcDQorCW5idHJlZV9wcmVmaXhfcmZwaQ0KIA0KIElTT0xBVElPTiA9IGJh Y2t3YXJkcy1zY2FuLWNvbmN1cnJlbnQtc3BsaXRzIFwNCiAJcHJlZGljYXRlLWVtcHR5LWluZGV4 DQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9uYnRyZWUvZXhwZWN0ZWQvbmJ0cmVlX3By ZWZpeF9yZnBpLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvbmJ0cmVlL2V4cGVjdGVkL25idHJlZV9w cmVmaXhfcmZwaS5vdXQNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4u MTYxNGFkMDE4NmINCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbmJ0cmVl L2V4cGVjdGVkL25idHJlZV9wcmVmaXhfcmZwaS5vdXQNCkBAIC0wLDAgKzEsNzcgQEANCistLQ0K Ky0tIFRlc3QgdGhlIGZvcmNlZCBmdWxsLXBhZ2UtaW1hZ2UgZmFsbGJhY2sgZm9yIHByZWZpeC1j b21wcmVzc2VkIGxlYXZlcy4NCistLQ0KKy0tIEEgcHJlZml4LWNvbXByZXNzZWQgbGVhZiBjYW4s IGluIHByaW5jaXBsZSwgaG9sZCBtb3JlIGxvZ2ljYWwgKGRlY29kZWQpDQorLS0gZGF0YSB0aGFu IGZpdHMgb24gYSBwbGFpbiBwYWdlLiAgV2hlbiBhIHNwbGl0J3MgcmlnaHQgaGFsZiBvciBhDQor LS0gZGVkdXBsaWNhdGlvbiByZXdyaXRlIHdvdWxkIGhhdmUgdG8gbG9nIG1vcmUgdGhhbiBvbmUg cGFnZSBvZiBwbGFpbg0KKy0tIGl0ZW1zLCB0aGUgV0FMIHJlY29yZCBpbnN0ZWFkIGNhcnJpZXMg dGhlIGNvZGVkIHBhZ2UgYXMgYSBmb3JjZWQNCistLSBmdWxsLXBhZ2UgaW1hZ2UgKFhMSF9TUExJ VF9SRlBJIC8gWExIX0RFRFVQX1JGUEkpLiAgUmVhbGlzdGljIGRhdGEgbmV2ZXINCistLSByZWFj aGVzIHRoYXQgdGhyZXNob2xkIC0tIHRoZSBzcGxpdC1wb2ludCBiYWxhbmNlIGtlZXBzIGEgaGFs ZiB3ZWxsIHVuZGVyDQorLS0gYSBwYWdlIC0tIHNvIHRoZSBvbmx5IHdheSB0byBleGVyY2lzZSB0 aGUgcGF0aCBkZXRlcm1pbmlzdGljYWxseSBpcyB0aGUNCistLSBuYnRyZWUtcHJlZml4LWZvcmNl LXJmcGkgaW5qZWN0aW9uIHBvaW50LCB3aGljaCBmb3JjZXMgdGhlIGZhbGxiYWNrIGZvcg0KKy0t IGV2ZXJ5IHByZWZpeCBzcGxpdCBhbmQgZGVkdXBsaWNhdGlvbiByZWdhcmRsZXNzIG9mIHNpemUu DQorLS0NCistLSBUaGlzIHZlcmlmaWVzIHRoZSBwcmltYXJ5IHByb2R1Y2VzIGEgdmFsaWQgaW5k ZXggb24gdGhhdCBwYXRoOyBieXRlLWZvci0NCistLSBieXRlIHJlZG8gb2YgdGhlIGZvcmNlZCBp bWFnZSBpcyBjb3ZlcmVkIGJ5IHRoZSByZWNvdmVyeS9zdHJlYW1pbmcgdGVzdHMNCistLSBydW4g d2l0aCB3YWxfY29uc2lzdGVuY3lfY2hlY2tpbmcuDQorLS0NCitzZXQgY2xpZW50X21pbl9tZXNz YWdlcyBUTyAnd2FybmluZyc7DQorY3JlYXRlIGV4dGVuc2lvbiBpZiBub3QgZXhpc3RzIGluamVj dGlvbl9wb2ludHM7DQorY3JlYXRlIGV4dGVuc2lvbiBpZiBub3QgZXhpc3RzIGFtY2hlY2s7DQor cmVzZXQgY2xpZW50X21pbl9tZXNzYWdlczsNCistLSBMb2NhbCB0byB0aGlzIHByb2Nlc3MsIHNv IGEgY29uY3VycmVudCBiYWNrZW5kIGlzIHVuYWZmZWN0ZWQuDQorU0VMRUNUIGluamVjdGlvbl9w b2ludHNfc2V0X2xvY2FsKCk7DQorIGluamVjdGlvbl9wb2ludHNfc2V0X2xvY2FsIA0KKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgDQorKDEgcm93KQ0KKw0KK1NFTEVDVCBpbmplY3Rp b25fcG9pbnRzX2F0dGFjaCgnbmJ0cmVlLXByZWZpeC1mb3JjZS1yZnBpJywgJ25vdGljZScpOw0K KyBpbmplY3Rpb25fcG9pbnRzX2F0dGFjaCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQor IA0KKygxIHJvdykNCisNCistLSBLZXlzIHdpdGggYSBsb25nIHNoYXJlZCBsZWFkaW5nIHByZWZp eCBzbyB0aGUgbGVhdmVzIGNvbXByZXNzIGFuZCBzcGxpdC4NCitjcmVhdGUgdGFibGUgbmJ0cmVl X3ByZWZpeF9yZnBpKHUgdGV4dCBjb2xsYXRlICJDIikgd2l0aCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gb2ZmKTsNCitjcmVhdGUgaW5kZXggbmJ0cmVlX3ByZWZpeF9yZnBpX3VfaWR4IG9uIG5idHJl ZV9wcmVmaXhfcmZwaSAodSkNCisgIHdpdGggKHByZWZpeF9jb21wcmVzc2lvbiA9IG9uKTsNCist LSBEaXN0aW5jdCBrZXlzOiBtYW55IHNwbGl0cywgZWFjaCByaWdodCBoYWxmIGNhcnJpZWQgYXMg YSBmb3JjZWQgaW1hZ2UuDQoraW5zZXJ0IGludG8gbmJ0cmVlX3ByZWZpeF9yZnBpDQorICBzZWxl Y3QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoZzo6dGV4 dCwgOCwgJzAnKQ0KKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApIGc7DQorLS0gRHVw bGljYXRlLWhlYXZ5IGtleXM6IHJ1bnRpbWUgZGVkdXBsaWNhdGlvbiwgcmUtY29kZWQgcGFnZSBh cyBhIGZvcmNlZCBpbWFnZS4NCitpbnNlcnQgaW50byBuYnRyZWVfcHJlZml4X3JmcGkNCisgIHNl bGVjdCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAl IDIwMCk6OnRleHQsIDgsICcwJykNCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBn Ow0KKy0tIFRoZSBpbmRleCBtdXN0IGJlIHN0cnVjdHVyYWxseSB2YWxpZCBhbmQgYWdyZWUgd2l0 aCB0aGUgaGVhcC4NCitTRUxFQ1QgYnRfaW5kZXhfcGFyZW50X2NoZWNrKCduYnRyZWVfcHJlZml4 X3JmcGlfdV9pZHgnOjpyZWdjbGFzcywgdHJ1ZSwgdHJ1ZSk7DQorIGJ0X2luZGV4X3BhcmVudF9j aGVjayANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyANCisoMSByb3cpDQorDQorLS0gQW4g aW5kZXgtb25seSBzY2FuIG9mIHRoZSBrZXkgY29sdW1uIG11c3QgZXF1YWwgdGhlIGluZGVwZW5k ZW50IG9yYWNsZS4NCitzZXQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7DQorU0VMRUNUIChTRUxFQ1Qg bWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZIHUpKSBGUk9NIG5idHJlZV9wcmVmaXhfcmZw aSkgPQ0KKyAgICAgICBtZDUoc3RyaW5nX2FnZyh4LCAnfCcgT1JERVIgQlkgeCkpIEFTIGZvcmNl ZF9yZnBpX29rDQorICBGUk9NIChTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9y ZXNvdXJjZS8nIHx8IGxwYWQoZzo6dGV4dCwgOCwgJzAnKSBBUyB4DQorICAgICAgICAgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnDQorICAgICAgICBVTklPTiBBTEwNCisgICAgICAg IFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgo ZyAlIDIwMCk6OnRleHQsIDgsICcwJykNCisgICAgICAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwgMjAwMDApIGcpIG9yYWNsZTsNCisgZm9yY2VkX3JmcGlfb2sgDQorLS0tLS0tLS0tLS0tLS0t LQ0KKyB0DQorKDEgcm93KQ0KKw0KK3Jlc2V0IGVuYWJsZV9zZXFzY2FuOw0KK1NFTEVDVCBpbmpl Y3Rpb25fcG9pbnRzX2RldGFjaCgnbmJ0cmVlLXByZWZpeC1mb3JjZS1yZnBpJyk7DQorIGluamVj dGlvbl9wb2ludHNfZGV0YWNoIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgDQorKDEg cm93KQ0KKw0KK2Ryb3AgdGFibGUgbmJ0cmVlX3ByZWZpeF9yZnBpOw0KK2Ryb3AgZXh0ZW5zaW9u IGFtY2hlY2s7DQorZHJvcCBleHRlbnNpb24gaW5qZWN0aW9uX3BvaW50czsNCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL25idHJlZS9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMv bmJ0cmVlL21lc29uLmJ1aWxkDQppbmRleCBiNWRjMDI2MzkyZS4uZDZhMzRlMjY1YmUgMTAwNjQ0 DQotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL25idHJlZS9tZXNvbi5idWlsZA0KKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy9uYnRyZWUvbWVzb24uYnVpbGQNCkBAIC0xMiw2ICsxMiw3IEBAIHRlc3RzICs9 IHsNCiAgICAgJ3NxbCc6IFsNCiAgICAgICAnbmJ0cmVlX2hhbGZfZGVhZF9wYWdlcycsDQogICAg ICAgJ25idHJlZV9pbmNvbXBsZXRlX3NwbGl0cycsDQorICAgICAgJ25idHJlZV9wcmVmaXhfcmZw aScsDQogICAgIF0sDQogICB9LA0KICAgJ2lzb2xhdGlvbic6IHsNCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL25idHJlZS9zcWwvbmJ0cmVlX3ByZWZpeF9yZnBpLnNxbCBiL3NyYy90ZXN0 L21vZHVsZXMvbmJ0cmVlL3NxbC9uYnRyZWVfcHJlZml4X3JmcGkuc3FsDQpuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAuLjQ1ODk5ZTU3OTZmDQotLS0gL2Rldi9udWxsDQor KysgYi9zcmMvdGVzdC9tb2R1bGVzL25idHJlZS9zcWwvbmJ0cmVlX3ByZWZpeF9yZnBpLnNxbA0K QEAgLTAsMCArMSw1OSBAQA0KKy0tDQorLS0gVGVzdCB0aGUgZm9yY2VkIGZ1bGwtcGFnZS1pbWFn ZSBmYWxsYmFjayBmb3IgcHJlZml4LWNvbXByZXNzZWQgbGVhdmVzLg0KKy0tDQorLS0gQSBwcmVm aXgtY29tcHJlc3NlZCBsZWFmIGNhbiwgaW4gcHJpbmNpcGxlLCBob2xkIG1vcmUgbG9naWNhbCAo ZGVjb2RlZCkNCistLSBkYXRhIHRoYW4gZml0cyBvbiBhIHBsYWluIHBhZ2UuICBXaGVuIGEgc3Bs aXQncyByaWdodCBoYWxmIG9yIGENCistLSBkZWR1cGxpY2F0aW9uIHJld3JpdGUgd291bGQgaGF2 ZSB0byBsb2cgbW9yZSB0aGFuIG9uZSBwYWdlIG9mIHBsYWluDQorLS0gaXRlbXMsIHRoZSBXQUwg cmVjb3JkIGluc3RlYWQgY2FycmllcyB0aGUgY29kZWQgcGFnZSBhcyBhIGZvcmNlZA0KKy0tIGZ1 bGwtcGFnZSBpbWFnZSAoWExIX1NQTElUX1JGUEkgLyBYTEhfREVEVVBfUkZQSSkuICBSZWFsaXN0 aWMgZGF0YSBuZXZlcg0KKy0tIHJlYWNoZXMgdGhhdCB0aHJlc2hvbGQgLS0gdGhlIHNwbGl0LXBv aW50IGJhbGFuY2Uga2VlcHMgYSBoYWxmIHdlbGwgdW5kZXINCistLSBhIHBhZ2UgLS0gc28gdGhl IG9ubHkgd2F5IHRvIGV4ZXJjaXNlIHRoZSBwYXRoIGRldGVybWluaXN0aWNhbGx5IGlzIHRoZQ0K Ky0tIG5idHJlZS1wcmVmaXgtZm9yY2UtcmZwaSBpbmplY3Rpb24gcG9pbnQsIHdoaWNoIGZvcmNl cyB0aGUgZmFsbGJhY2sgZm9yDQorLS0gZXZlcnkgcHJlZml4IHNwbGl0IGFuZCBkZWR1cGxpY2F0 aW9uIHJlZ2FyZGxlc3Mgb2Ygc2l6ZS4NCistLQ0KKy0tIFRoaXMgdmVyaWZpZXMgdGhlIHByaW1h cnkgcHJvZHVjZXMgYSB2YWxpZCBpbmRleCBvbiB0aGF0IHBhdGg7IGJ5dGUtZm9yLQ0KKy0tIGJ5 dGUgcmVkbyBvZiB0aGUgZm9yY2VkIGltYWdlIGlzIGNvdmVyZWQgYnkgdGhlIHJlY292ZXJ5L3N0 cmVhbWluZyB0ZXN0cw0KKy0tIHJ1biB3aXRoIHdhbF9jb25zaXN0ZW5jeV9jaGVja2luZy4NCist LQ0KK3NldCBjbGllbnRfbWluX21lc3NhZ2VzIFRPICd3YXJuaW5nJzsNCitjcmVhdGUgZXh0ZW5z aW9uIGlmIG5vdCBleGlzdHMgaW5qZWN0aW9uX3BvaW50czsNCitjcmVhdGUgZXh0ZW5zaW9uIGlm IG5vdCBleGlzdHMgYW1jaGVjazsNCityZXNldCBjbGllbnRfbWluX21lc3NhZ2VzOw0KKw0KKy0t IExvY2FsIHRvIHRoaXMgcHJvY2Vzcywgc28gYSBjb25jdXJyZW50IGJhY2tlbmQgaXMgdW5hZmZl Y3RlZC4NCitTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19zZXRfbG9jYWwoKTsNCitTRUxFQ1QgaW5q ZWN0aW9uX3BvaW50c19hdHRhY2goJ25idHJlZS1wcmVmaXgtZm9yY2UtcmZwaScsICdub3RpY2Un KTsNCisNCistLSBLZXlzIHdpdGggYSBsb25nIHNoYXJlZCBsZWFkaW5nIHByZWZpeCBzbyB0aGUg bGVhdmVzIGNvbXByZXNzIGFuZCBzcGxpdC4NCitjcmVhdGUgdGFibGUgbmJ0cmVlX3ByZWZpeF9y ZnBpKHUgdGV4dCBjb2xsYXRlICJDIikgd2l0aCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmKTsN CitjcmVhdGUgaW5kZXggbmJ0cmVlX3ByZWZpeF9yZnBpX3VfaWR4IG9uIG5idHJlZV9wcmVmaXhf cmZwaSAodSkNCisgIHdpdGggKHByZWZpeF9jb21wcmVzc2lvbiA9IG9uKTsNCisNCistLSBEaXN0 aW5jdCBrZXlzOiBtYW55IHNwbGl0cywgZWFjaCByaWdodCBoYWxmIGNhcnJpZWQgYXMgYSBmb3Jj ZWQgaW1hZ2UuDQoraW5zZXJ0IGludG8gbmJ0cmVlX3ByZWZpeF9yZnBpDQorICBzZWxlY3QgJ2h0 dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoZzo6dGV4dCwgOCwg JzAnKQ0KKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApIGc7DQorDQorLS0gRHVwbGlj YXRlLWhlYXZ5IGtleXM6IHJ1bnRpbWUgZGVkdXBsaWNhdGlvbiwgcmUtY29kZWQgcGFnZSBhcyBh IGZvcmNlZCBpbWFnZS4NCitpbnNlcnQgaW50byBuYnRyZWVfcHJlZml4X3JmcGkNCisgIHNlbGVj dCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAlIDIw MCk6OnRleHQsIDgsICcwJykNCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnOw0K Kw0KKy0tIFRoZSBpbmRleCBtdXN0IGJlIHN0cnVjdHVyYWxseSB2YWxpZCBhbmQgYWdyZWUgd2l0 aCB0aGUgaGVhcC4NCitTRUxFQ1QgYnRfaW5kZXhfcGFyZW50X2NoZWNrKCduYnRyZWVfcHJlZml4 X3JmcGlfdV9pZHgnOjpyZWdjbGFzcywgdHJ1ZSwgdHJ1ZSk7DQorDQorLS0gQW4gaW5kZXgtb25s eSBzY2FuIG9mIHRoZSBrZXkgY29sdW1uIG11c3QgZXF1YWwgdGhlIGluZGVwZW5kZW50IG9yYWNs ZS4NCitzZXQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7DQorU0VMRUNUIChTRUxFQ1QgbWQ1KHN0cmlu Z19hZ2codSwgJ3wnIE9SREVSIEJZIHUpKSBGUk9NIG5idHJlZV9wcmVmaXhfcmZwaSkgPQ0KKyAg ICAgICBtZDUoc3RyaW5nX2FnZyh4LCAnfCcgT1JERVIgQlkgeCkpIEFTIGZvcmNlZF9yZnBpX29r DQorICBGUk9NIChTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8n IHx8IGxwYWQoZzo6dGV4dCwgOCwgJzAnKSBBUyB4DQorICAgICAgICAgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDIwMDAwKSBnDQorICAgICAgICBVTklPTiBBTEwNCisgICAgICAgIFNFTEVDVCAn aHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAlIDIwMCk6 OnRleHQsIDgsICcwJykNCisgICAgICAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDAp IGcpIG9yYWNsZTsNCityZXNldCBlbmFibGVfc2Vxc2NhbjsNCisNCitTRUxFQ1QgaW5qZWN0aW9u X3BvaW50c19kZXRhY2goJ25idHJlZS1wcmVmaXgtZm9yY2UtcmZwaScpOw0KK2Ryb3AgdGFibGUg bmJ0cmVlX3ByZWZpeF9yZnBpOw0KK2Ryb3AgZXh0ZW5zaW9uIGFtY2hlY2s7DQorZHJvcCBleHRl bnNpb24gaW5qZWN0aW9uX3BvaW50czsNCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2J0cmVlX2luZGV4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYnRyZWVf aW5kZXgub3V0DQppbmRleCA3YzUzZDU5ODY0OS4uYzFkYWU0YjU1YWQgMTAwNjQ0DQotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2J0cmVlX2luZGV4Lm91dA0KKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9idHJlZV9pbmRleC5vdXQNCkBAIC04OTEsMyArODkxLDI1OSBAQCBB TFRFUiBJTkRFWCBidHJlZV9wYXJ0X2lkeCBBTFRFUiBDT0xVTU4gaWQgU0VUIChuX2Rpc3RpbmN0 PTEwMCk7DQogRVJST1I6ICBBTFRFUiBhY3Rpb24gQUxURVIgQ09MVU1OIC4uLiBTRVQgY2Fubm90 IGJlIHBlcmZvcm1lZCBvbiByZWxhdGlvbiAiYnRyZWVfcGFydF9pZHgiDQogREVUQUlMOiAgVGhp cyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgcGFydGl0aW9uZWQgaW5kZXhlcy4NCiBE Uk9QIFRBQkxFIGJ0cmVlX3BhcnQ7DQorLS0NCistLSBMZWFmIGtleSBwcmVmaXggY29tcHJlc3Np b24gKHByZWZpeF9jb21wcmVzc2lvbiByZWxvcHRpb24pLg0KKy0tDQorLS0gQ29ycmVjdG5lc3Mg aXMgY2hlY2tlZCBhZ2FpbnN0IGFuIGluZGVwZW5kZW50IG9yYWNsZTogYSBmb3JjZWQgaW5kZXgg c2Nhbg0KKy0tIG92ZXIgYSBwcmVmaXgtY29tcHJlc3NlZCBpbmRleCBtdXN0IHJldHVybiBleGFj dGx5IHRoZSByb3dzIGEgc2VxdWVudGlhbA0KKy0tIHNjYW4gb2YgdGhlIHNhbWUgZGF0YSByZXR1 cm5zLCBhY3Jvc3MgYnVpbGQsIHJldGFpbCBpbnNlcnQvc3BsaXQsIGRlbGV0ZQ0KKy0tIGFuZCBW QUNVVU0sIGZvciBlcXVhbGl0eSwgcmFuZ2UsIGJhY2t3YXJkLCBpbmRleC1vbmx5IGFuZCBOVUxM IHF1ZXJpZXMuDQorLS0gVGhlIGtleSBjb2x1bW4gdXNlcyB0aGUgQyBjb2xsYXRpb24gc28gdGhl IHJlY29yZGVkIG91dHB1dCBpcyBkZXRlcm1pbmlzdGljDQorLS0gYWNyb3NzIHBsYXRmb3Jtcy4g IFRoZSBwYWdlIGZvcm1hdCBpcyBleGVyY2lzZWQgYnkga2V5cyB0aGF0IHNoYXJlIGEgbG9uZw0K Ky0tIHByZWZpeCAoVVJMLWxpa2UpLCBieSBrZXlzIHNoYXJpbmcgZXhhY3RseSAxMjUvMTI2LzEy NyBieXRlcyAodGhlIGJvdW5kYXJ5DQorLS0gd2hlcmUgdGhlIG9uZS1ieXRlIHNoYXJlZCBjb3Vu dCBzYXR1cmF0ZXM6IEJUUkVFX1BSRUZJWF9NQVggaXMgMTI2LA0KKy0tIEJUUkVFX1BSRUZJWF9S QVcgaXMgMTI3KSwgYnkga2V5cyB0aGF0IHNoYXJlIG5vdGhpbmcsIGFuZCBieSBhIE5VTEwga2V5 Lg0KKy0tDQorQ1JFQVRFIFRBQkxFIGJ0cmVlX3ByZWZpeCAodSB0ZXh0IENPTExBVEUgIkMiKTsN CistLSBCdWlsZC1wYXRoIHBhZ2VzIChDUkVBVEUgSU5ERVggd3JpdGVzIHdob2xlIGxlYXZlcyku ICBBIHNoYXJlZCA0MC1ieXRlDQorLS0gcHJlZml4LCBwbHVzIGV4cGxpY2l0IHJvd3MgYXQgdGhl IDEyNS8xMjYvMTI3IHNoYXJlZC1ieXRlIGJvdW5kYXJ5Lg0KK0lOU0VSVCBJTlRPIGJ0cmVlX3By ZWZpeA0KKyAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8 fCBscGFkKChnICUgMjAwMDApOjp0ZXh0LCA4LCAnMCcpDQorICBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCAyMDAwMCkgZzsNCitJTlNFUlQgSU5UTyBidHJlZV9wcmVmaXgNCisgIFNFTEVDVCByZXBl YXQoJ2EnLCA0MCkgfHwgcmVwZWF0KCdiJywgbikgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoODUsIDkw KSBuOw0KK0lOU0VSVCBJTlRPIGJ0cmVlX3ByZWZpeCBWQUxVRVMNCisgIChyZXBlYXQoJ2EnLCAx MjUpKSwgKHJlcGVhdCgnYScsIDEyNikpLCAocmVwZWF0KCdhJywgMTI3KSksIChyZXBlYXQoJ2En LCAzMDApKSwNCisgICgnenp6LW5vLXNoYXJlZC1wcmVmaXgnKSwgKE5VTEwpOw0KK0NSRUFURSBJ TkRFWCBidHJlZV9wcmVmaXhfb24gT04gYnRyZWVfcHJlZml4ICh1KSBXSVRIIChwcmVmaXhfY29t cHJlc3Npb24gPSBvbik7DQorLS0gQ29uZmlybSB0aGUgaW5kZXggcmVhbGx5IGlzIHVzZWQgKGFu ZCBpcyBwcmVmaXgtY29tcHJlc3NlZCksIHNvIHRoZSBxdWVyaWVzDQorLS0gYmVsb3cgZXhlcmNp c2UgdGhlIGNvZGVkIHBhZ2UgZm9ybWF0IHJhdGhlciB0aGFuIHNpbGVudGx5IGZhbGxpbmcgYmFj ay4NCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7DQorU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0g b2ZmOw0KK0VYUExBSU4gKGNvc3RzIG9mZikNCisgIFNFTEVDVCB1IEZST00gYnRyZWVfcHJlZml4 IFdIRVJFIHUgPSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDEyMzQ1 JzsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgSW5kZXggT25s eSBTY2FuIHVzaW5nIGJ0cmVlX3ByZWZpeF9vbiBvbiBidHJlZV9wcmVmaXgNCisgICBJbmRleCBD b25kOiAodSA9ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMTIzNDUn Ojp0ZXh0KQ0KKygyIHJvd3MpDQorDQorLS0gRXF1YWxpdHksIHJhbmdlIGFuZCBiYWNrd2FyZCBz Y2FucyBmb3JjZWQgdGhyb3VnaCB0aGUgcHJlZml4IGluZGV4LiAgVGhlaXINCistLSByZXN1bHRz IGFyZSByZWNvcmRlZCBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0LCB3aGljaCBpcyBpdHNlbGYgdGhl IG9yYWNsZTogYQ0KKy0tIGRlY29kZSByZWdyZXNzaW9uIGNoYW5nZXMgdGhlc2Ugcm93cy4gIChU aGUgaW5kZXgtb25seSBkaWdlc3QgYmVsb3cgYWRkcyBhbg0KKy0tIG9yYWNsZSB0aGF0IGRvZXMg bm90IHJlYWQgdGhlIGluZGV4IGF0IGFsbC4pDQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVf cHJlZml4DQorICBXSEVSRSB1ID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJj ZS8wMDAxMjM0NSc7DQorIGNvdW50IA0KKy0tLS0tLS0NCisgICAgIDENCisoMSByb3cpDQorDQor U0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVfcHJlZml4DQorICBXSEVSRSB1IEJFVFdFRU4gJ2h0 dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8wMDAwMDEwMCcNCisgICAgICAgICAg ICAgQU5EICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMDA5MDAnOw0K KyBjb3VudCANCistLS0tLS0tDQorICAgODAxDQorKDEgcm93KQ0KKw0KK1NFTEVDVCB1IEZST00g YnRyZWVfcHJlZml4DQorICBXSEVSRSB1ID4gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9y ZXNvdXJjZS8wMDAxOTk5NicgT1JERVIgQlkgdSBERVNDOw0KKyAgICAgICAgICAgICAgICAgICAg ICAgdSAgICAgICAgICAgICAgICAgICAgICAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgenp6LW5vLXNoYXJlZC1wcmVmaXgNCisgaHR0cHM6Ly9l eGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLzAwMDE5OTk5DQorIGh0dHBzOi8vZXhhbXBsZS5j b20vcGF0aC90by9yZXNvdXJjZS8wMDAxOTk5OA0KKyBodHRwczovL2V4YW1wbGUuY29tL3BhdGgv dG8vcmVzb3VyY2UvMDAwMTk5OTcNCisoNCByb3dzKQ0KKw0KKy0tIEJvdW5kYXJ5IGFuZCBvdmVy c2l6ZWQga2V5cyByb3VuZC10cmlwIHRvIHRoZWlyIGV4YWN0IHN0b3JlZCB2YWx1ZXMuDQorU0VM RUNUIHUgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBMSUtFICdhYWFhJScgT1JERVIgQlkgdTsN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIGFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhDQor IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYQ0KKyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhDQorIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ0KKyBhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYg0KKyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmINCisgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYg0KKyBhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi Yg0KKyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmINCisgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYWFhYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYg0KKygxMCByb3dzKQ0KKw0K K1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSB1ID0gcmVwZWF0KCdhJywg MzAwKTsNCisgY291bnQgDQorLS0tLS0tLQ0KKyAgICAgMQ0KKygxIHJvdykNCisNCitTRUxFQ1Qg Y291bnQoKikgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBJUyBOVUxMOw0KKyBjb3VudCANCist LS0tLS0tDQorICAgICAxDQorKDEgcm93KQ0KKw0KKy0tIEluZGV4LW9ubHkgc2NhbiBvdmVyIHRo ZSBwcmVmaXggaW5kZXgsIGNvbXBhcmVkIHRvIHRoZSBsaXRlcmFsIHZhbHVlcyB0aGF0DQorLS0g d2VyZSBpbnNlcnRlZCAoYW4gb3JhY2xlIHRoYXQgZG9lcyBub3QgaXRzZWxmIHJlYWQgdGhlIGlu ZGV4KS4NCitTRUxFQ1QgKFNFTEVDVCBtZDUoc3RyaW5nX2FnZyh1LCAnfCcgT1JERVIgQlkgdSkp DQorICAgICAgICAgIEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgSVMgTk9UIE5VTEwpID0NCisg ICAgICAgbWQ1KHN0cmluZ19hZ2coeCwgJ3wnIE9SREVSIEJZIHgpKSBBUyBpb3Nfb2sNCisgIEZS T00gKA0KKyAgICBTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8n IHx8IGxwYWQoKGcgJSAyMDAwMCk6OnRleHQsIDgsICcwJykgQVMgeA0KKyAgICAgIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnDQorICAgIFVOSU9OIEFMTCBTRUxFQ1QgcmVwZWF0KCdh JywgNDApIHx8IHJlcGVhdCgnYicsIG4pIEZST00gZ2VuZXJhdGVfc2VyaWVzKDg1LCA5MCkgbg0K KyAgICBVTklPTiBBTEwgU0VMRUNUIHYgRlJPTSAoVkFMVUVTIChyZXBlYXQoJ2EnLDEyNSkpLChy ZXBlYXQoJ2EnLDEyNikpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChy ZXBlYXQoJ2EnLDEyNykpLChyZXBlYXQoJ2EnLDMwMCkpLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgnenp6LW5vLXNoYXJlZC1wcmVmaXgnKSkgdCh2KQ0KKyAgKSBvcmFj bGU7DQorIGlvc19vayANCistLS0tLS0tLQ0KKyB0DQorKDEgcm93KQ0KKw0KKy0tIFJldGFpbCBp bnNlcnRzIGNhdXNlIHNwbGl0cyB0aGF0IGZhdWx0IHBhZ2VzIGZvcndhcmQgaW50byB0aGUgY29k ZWQgZm9ybWF0Ow0KKy0tIGFuIGluZGV4LW9ubHkgc2NhbiBtdXN0IHN0aWxsIGFncmVlIHdpdGgg dGhlIGluZGVwZW5kZW50IG9yYWNsZSBhZnRlcndhcmRzLg0KK0lOU0VSVCBJTlRPIGJ0cmVlX3By ZWZpeA0KKyAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL290aGVyLycgfHwgbHBhZChnOjp0 ZXh0LCA4LCAnMCcpDQorICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgZzsNCistLSBE ZWxldGUgdGhlbiBWQUNVVU0sIHRoZW4gcmUtaW5zZXJ0IGludG8gZnJlZWQgc3BhY2UuICBUaGUg ZGVsZXRlIHRhcmdldHMNCistLSBvbmx5IHBhcnQgb2YgdGhlIFVSTCBuYW1lc3BhY2Ugc28gdGhl IGJvdW5kYXJ5IGtleXMgKGFhYWEuLi4venp6Li4uKSBzdXJ2aXZlDQorLS0gZm9yIHRoZSBjaGVj a3MgYmVsb3cuDQorREVMRVRFIEZST00gYnRyZWVfcHJlZml4DQorICBXSEVSRSB1ID49ICdodHRw czovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMDAwMDAnDQorICAgIEFORCB1IDwg ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMDUwMDAnOw0KK1ZBQ1VV TSBidHJlZV9wcmVmaXg7DQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4DQorICBTRUxFQ1QgJ2h0 dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSA1MDAwKTo6 dGV4dCwgOCwgJzAnKQ0KKyAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkgZzsNCistLSBB ZnRlciB0aGUgY2h1cm4sIGFuIGluZGV4LW9ubHkgc2NhbiBvZiB0aGUgbGl2ZSBrZXlzIG11c3Qg ZXF1YWwgdGhlIHNhbWUNCistLSBrZXlzIGZldGNoZWQgZnJvbSB0aGUgaGVhcCBieSBhIHNlcXVl bnRpYWwgc2NhbiAoYW4gaW5kZXBlbmRlbnQgcGF0aCk6IGlmDQorLS0gZGVjb2RpbmcgdGhlIGNv ZGVkIGxlYXZlcyB3ZXJlIHdyb25nLCB0aGUgdHdvIGRpZ2VzdHMgd291bGQgZGlmZmVyLg0KK1NF VCBlbmFibGVfaW5kZXhvbmx5c2NhbiA9IG9uOw0KK1NFTEVDVCBtZDUoc3RyaW5nX2FnZyh1LCAn fCcgT1JERVIgQlkgdSkpIEFTIGlvc19kaWdlc3QNCisgIEZST00gYnRyZWVfcHJlZml4IFdIRVJF IHUgSVMgTk9UIE5VTEwgXGdzZXQNCitTRVQgZW5hYmxlX2luZGV4c2NhbiA9IG9mZjsNCitTRVQg ZW5hYmxlX2luZGV4b25seXNjYW4gPSBvZmY7DQorU0VUIGVuYWJsZV9zZXFzY2FuID0gb247DQor U0VMRUNUIDonaW9zX2RpZ2VzdCcgPQ0KKyAgICAgICAoU0VMRUNUIG1kNShzdHJpbmdfYWdnKHUs ICd8JyBPUkRFUiBCWSB1KSkgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBJUyBOT1QgTlVMTCkN CisgICAgICAgQVMgcG9zdF9jaHVybl9vazsNCisgcG9zdF9jaHVybl9vayANCistLS0tLS0tLS0t LS0tLS0NCisgdA0KKygxIHJvdykNCisNCitTRVQgZW5hYmxlX2luZGV4c2NhbiA9IG9uOw0KK1JF U0VUIGVuYWJsZV9zZXFzY2FuOw0KK1JFU0VUIGVuYWJsZV9iaXRtYXBzY2FuOw0KKy0tIFRoZSBy ZWxvcHRpb24gcm91bmQtdHJpcHMgYW5kIGNhbiBiZSB0b2dnbGVkIHdpdGhvdXQgYSByZXdyaXRl Lg0KK1NFTEVDVCByZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICdidHJl ZV9wcmVmaXhfb24nOw0KKyAgICAgICByZWxvcHRpb25zICAgICAgICANCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQorIHtwcmVmaXhfY29tcHJlc3Npb249b259DQorKDEgcm93KQ0KKw0KK0FM VEVSIElOREVYIGJ0cmVlX3ByZWZpeF9vbiBTRVQgKHByZWZpeF9jb21wcmVzc2lvbiA9IG9mZik7 DQorU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ2J0cmVl X3ByZWZpeF9vbic7DQorICAgICAgICByZWxvcHRpb25zICAgICAgICANCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KKyB7cHJlZml4X2NvbXByZXNzaW9uPW9mZn0NCisoMSByb3cpDQorDQor LS0gUmVhZGluZyBiYWNrIHdpdGggdGhlIG9wdGlvbiBvZmYgc3RpbGwgcmV0dXJucyBjb3JyZWN0 IHJvd3M6IGV4aXN0aW5nDQorLS0gQlRQX1BSRUZJWCBsZWF2ZXMga2VlcCB0aGVpciBjb2RlZCBm b3JtIGFuZCBkZWNvZGUgb24gdGhlIHBhZ2UgZmxhZy4NCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBv ZmY7DQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVfcHJlZml4IFdIRVJFIHUgPSByZXBlYXQo J2EnLCAxMjYpOw0KKyBjb3VudCANCistLS0tLS0tDQorICAgICAxDQorKDEgcm93KQ0KKw0KK1JF U0VUIGVuYWJsZV9zZXFzY2FuOw0KKy0tIEEgbm9uLXZhcmxlbmEgZmlyc3QgY29sdW1uIGlzIGxl Z2FsIGFuZCBzaWxlbnRseSBzdG9yZXMgbm8gcHJlZml4OyB2ZXJpZnkgYQ0KKy0tIHNjYW4gb3Zl ciBzdWNoIGFuIGluZGV4IHJldHVybnMgY29ycmVjdCByb3dzLg0KK0NSRUFURSBJTkRFWCBidHJl ZV9wcmVmaXhfaW50IE9OIGJ0cmVlX3ByZWZpeCAoKGxlbmd0aCh1KSkpIFdJVEggKHByZWZpeF9j b21wcmVzc2lvbiA9IG9uKTsNCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7DQorU0VMRUNUIGxl bmd0aCh1KSBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSBsZW5ndGgodSkgPSAzMDA7DQorIGxlbmd0 aCANCistLS0tLS0tLQ0KKyAgICAzMDANCisoMSByb3cpDQorDQorUkVTRVQgZW5hYmxlX3NlcXNj YW47DQorRFJPUCBUQUJMRSBidHJlZV9wcmVmaXg7DQorLS0NCistLSBCb3R0b20tdXAgaW5kZXgg ZGVsZXRpb24gb24gcHJlZml4LWNvbXByZXNzZWQgcGFnZXMuDQorLS0NCistLSBBbiBVUERBVEUg dGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGluZGV4ZWQgY29sdW1uIG1hcmtzIHRoZSByZXN1bHRp bmcgaW5kZXgNCistLSBpbnNlcnQgImxvZ2ljYWxseSB1bmNoYW5nZWQiLCB3aGljaCBsZXRzIG5i dHJlZSBydW4gYSBib3R0b20tdXAgZGVsZXRpb24NCistLSBwYXNzIGJlZm9yZSBzcGxpdHRpbmcg YSBsZWFmLiAgVGhhdCBwYXNzIHJlYWRzIGFuZCAob25seSkgcmVtb3ZlcyBpdGVtczsgaXQNCist LSBtdXN0IHdvcmsgb24gY29kZWQgcGFnZXMgdG9vLiAgSGVyZSB3ZSBleGVyY2lzZSB0aGUgcGF0 aCBhbmQgdmVyaWZ5IHRoZQ0KKy0tIGluZGV4IHN0YXlzIGNvcnJlY3Q7IGNvbW1pdHRlZCB1cGRh dGUgYmF0Y2hlcyBiZXR3ZWVuIFZBQ1VVTXMgbGVhdmUNCistLSByZW1vdmFibGUgZHVwbGljYXRl cyBmb3IgdGhlIHBhc3MgdG8gZmluZC4gIChCbG9hdCBpcyBxdWFudGlmaWVkIGluIHRoZQ0KKy0t IHBlcmZvcm1hbmNlIGJlbmNobWFyaywgbm90IGhlcmUsIHNpbmNlIHJlbW92YWJpbGl0eSBpcyB0 aW1pbmctZGVwZW5kZW50LikNCistLQ0KK0NSRUFURSBUQUJMRSBidHJlZV9wcmVmaXhfYnUgKGlk IGludCBQUklNQVJZIEtFWSwgdSB0ZXh0IENPTExBVEUgIkMiLCBmaWxsZXIgdGV4dCk7DQorSU5T RVJUIElOVE8gYnRyZWVfcHJlZml4X2J1DQorICBTRUxFQ1QgZywgJ2h0dHBzOi8vZXhhbXBsZS5j b20vcGF0aC8nIHx8IGxwYWQoKGcgJSA1MDApOjp0ZXh0LCA4LCAnMCcpLCByZXBlYXQoJ3gnLCA0 MCkNCisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDQwMDApIGc7DQorQ1JFQVRFIElOREVYIGJ0 cmVlX3ByZWZpeF9idV91IE9OIGJ0cmVlX3ByZWZpeF9idSAodSkgV0lUSCAocHJlZml4X2NvbXBy ZXNzaW9uID0gb24pOw0KKy0tIFNldmVyYWwgY29tbWl0dGVkIG5vbi1rZXkgVVBEQVRFIGJhdGNo ZXMgKHZlcnNpb24gY2h1cm4gb24gdGhlIHByZWZpeCBpbmRleCkuDQorVVBEQVRFIGJ0cmVlX3By ZWZpeF9idSBTRVQgZmlsbGVyID0gcmVwZWF0KCd5JywgNDApOw0KK1VQREFURSBidHJlZV9wcmVm aXhfYnUgU0VUIGZpbGxlciA9IHJlcGVhdCgneicsIDQwKTsNCitVUERBVEUgYnRyZWVfcHJlZml4 X2J1IFNFVCBmaWxsZXIgPSByZXBlYXQoJ3cnLCA0MCk7DQorLS0gQ29ycmVjdG5lc3MgYWZ0ZXIg dGhlIGNodXJuOiBhbiBpbmRleC1vbmx5IHNjYW4gb2YgdGhlIGtleSBjb2x1bW4gbXVzdCBlcXVh bA0KKy0tIHRoZSBpbmRlcGVuZGVudCBvcmFjbGUgKHRoZSBsaXRlcmFsIGtleXMpLCBwcm92aW5n IG5vIGRlY29kZS9kZWxldGlvbiBkYW1hZ2UuDQorU0VUIGVuYWJsZV9zZXFzY2FuID0gb2ZmOw0K K1NFTEVDVCAoU0VMRUNUIG1kNShzdHJpbmdfYWdnKHUsICd8JyBPUkRFUiBCWSB1KSkgRlJPTSBi dHJlZV9wcmVmaXhfYnUpID0NCisgICAgICAgbWQ1KHN0cmluZ19hZ2coeCwgJ3wnIE9SREVSIEJZ IHgpKSBBUyBib3R0b211cF9vaw0KKyAgRlJPTSAoU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29t L3BhdGgvJyB8fCBscGFkKChnICUgNTAwKTo6dGV4dCwgOCwgJzAnKSBBUyB4DQorICAgICAgICAg IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDQwMDApIGcpIG9yYWNsZTsNCisgYm90dG9tdXBfb2sg DQorLS0tLS0tLS0tLS0tLQ0KKyB0DQorKDEgcm93KQ0KKw0KK1NFTEVDVCBjb3VudCgqKSBGUk9N IGJ0cmVlX3ByZWZpeF9idQ0KKyAgV0hFUkUgdSA9ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgv JyB8fCBscGFkKCc3JywgOCwgJzAnKTsNCisgY291bnQgDQorLS0tLS0tLQ0KKyAgICAgOA0KKygx IHJvdykNCisNCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsNCitEUk9QIFRBQkxFIGJ0cmVlX3ByZWZp eF9idTsNCistLQ0KKy0tIFJ1bnRpbWUgZGVkdXBsaWNhdGlvbiBvbiBhIHByZWZpeC1jb21wcmVz c2VkIHBhZ2UuICBEdXBsaWNhdGUga2V5cyBpbnNlcnRlZA0KKy0tIG9uZSBhdCBhIHRpbWUgaW50 byBhbiBleGlzdGluZyBwcmVmaXggaW5kZXggZmlsbCBhIGxlYWY7IGJlZm9yZSBpdCBzcGxpdHMs DQorLS0gdGhlIGRlZHVwbGljYXRpb24gcGFzcyBkZWNvZGVzIHRoZSBjb2RlZCBpdGVtcywgbWVy Z2VzIHRoZSBkdXBsaWNhdGUgVElEcw0KKy0tIGludG8gcG9zdGluZyBsaXN0cyBhbmQgcmUtY29k ZXMgdGhlIHBhZ2UuICBUaGUgZGVjb2RlZCBzZXQgY2FuIGV4Y2VlZCBvbmUNCistLSBwYWdlIGV2 ZW4gd2hlbiB0aGUgY29kZWQgZm9ybSBmaXQsIGluIHdoaWNoIGNhc2UgdGhlIHBhc3MgYWJvcnRz IGFuZCB0aGUNCistLSBwYWdlIHNwbGl0cyBpbnN0ZWFkOyBlaXRoZXIgd2F5IHRoZSByZXN1bHQg bXVzdCBiZSBjb3JyZWN0Lg0KKy0tDQorQ1JFQVRFIFRBQkxFIGJ0cmVlX3ByZWZpeF9kZCAodSB0 ZXh0IENPTExBVEUgIkMiKTsNCitDUkVBVEUgSU5ERVggYnRyZWVfcHJlZml4X2RkX3UgT04gYnRy ZWVfcHJlZml4X2RkICh1KSBXSVRIIChwcmVmaXhfY29tcHJlc3Npb24gPSBvbik7DQorSU5TRVJU IElOVE8gYnRyZWVfcHJlZml4X2RkDQorICBTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0 aC90by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAyMDApOjp0ZXh0LCA4LCAnMCcpDQorICBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCA0MDAwMCkgZzsNCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7 DQorU0VMRUNUIChTRUxFQ1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZIHUpKSBGUk9N IGJ0cmVlX3ByZWZpeF9kZCkgPQ0KKyAgICAgICBtZDUoc3RyaW5nX2FnZyh4LCAnfCcgT1JERVIg QlkgeCkpIEFTIHJ1bnRpbWVfZGVkdXBfb2sNCisgIEZST00gKFNFTEVDVCAnaHR0cHM6Ly9leGFt cGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAlIDIwMCk6OnRleHQsIDgsICcw JykgQVMgeA0KKyAgICAgICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA0MDAwMCkgZykgb3Jh Y2xlOw0KKyBydW50aW1lX2RlZHVwX29rIA0KKy0tLS0tLS0tLS0tLS0tLS0tLQ0KKyB0DQorKDEg cm93KQ0KKw0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVlX3ByZWZpeF9kZA0KKyAgV0hFUkUg dSA9ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8fCBscGFkKCc0Mics IDgsICcwJyk7DQorIGNvdW50IA0KKy0tLS0tLS0NCisgICAyMDANCisoMSByb3cpDQorDQorUkVT RVQgZW5hYmxlX3NlcXNjYW47DQorRFJPUCBUQUJMRSBidHJlZV9wcmVmaXhfZGQ7DQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYnRyZWVfaW5kZXguc3FsIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvYnRyZWVfaW5kZXguc3FsDQppbmRleCA2OTkwZDc4MThkYS4uNmNkMDUzYTE1OTYg MTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9idHJlZV9pbmRleC5zcWwNCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2J0cmVlX2luZGV4LnNxbA0KQEAgLTUyMCwzICs1MjAsMTcw IEBAIENSRUFURSBUQUJMRSBidHJlZV9wYXJ0IChpZCBpbnQ0KSBQQVJUSVRJT04gQlkgUkFOR0Ug KGlkKTsNCiBDUkVBVEUgSU5ERVggYnRyZWVfcGFydF9pZHggT04gYnRyZWVfcGFydChpZCk7DQog QUxURVIgSU5ERVggYnRyZWVfcGFydF9pZHggQUxURVIgQ09MVU1OIGlkIFNFVCAobl9kaXN0aW5j dD0xMDApOw0KIERST1AgVEFCTEUgYnRyZWVfcGFydDsNCisNCistLQ0KKy0tIExlYWYga2V5IHBy ZWZpeCBjb21wcmVzc2lvbiAocHJlZml4X2NvbXByZXNzaW9uIHJlbG9wdGlvbikuDQorLS0NCist LSBDb3JyZWN0bmVzcyBpcyBjaGVja2VkIGFnYWluc3QgYW4gaW5kZXBlbmRlbnQgb3JhY2xlOiBh IGZvcmNlZCBpbmRleCBzY2FuDQorLS0gb3ZlciBhIHByZWZpeC1jb21wcmVzc2VkIGluZGV4IG11 c3QgcmV0dXJuIGV4YWN0bHkgdGhlIHJvd3MgYSBzZXF1ZW50aWFsDQorLS0gc2NhbiBvZiB0aGUg c2FtZSBkYXRhIHJldHVybnMsIGFjcm9zcyBidWlsZCwgcmV0YWlsIGluc2VydC9zcGxpdCwgZGVs ZXRlDQorLS0gYW5kIFZBQ1VVTSwgZm9yIGVxdWFsaXR5LCByYW5nZSwgYmFja3dhcmQsIGluZGV4 LW9ubHkgYW5kIE5VTEwgcXVlcmllcy4NCistLSBUaGUga2V5IGNvbHVtbiB1c2VzIHRoZSBDIGNv bGxhdGlvbiBzbyB0aGUgcmVjb3JkZWQgb3V0cHV0IGlzIGRldGVybWluaXN0aWMNCistLSBhY3Jv c3MgcGxhdGZvcm1zLiAgVGhlIHBhZ2UgZm9ybWF0IGlzIGV4ZXJjaXNlZCBieSBrZXlzIHRoYXQg c2hhcmUgYSBsb25nDQorLS0gcHJlZml4IChVUkwtbGlrZSksIGJ5IGtleXMgc2hhcmluZyBleGFj dGx5IDEyNS8xMjYvMTI3IGJ5dGVzICh0aGUgYm91bmRhcnkNCistLSB3aGVyZSB0aGUgb25lLWJ5 dGUgc2hhcmVkIGNvdW50IHNhdHVyYXRlczogQlRSRUVfUFJFRklYX01BWCBpcyAxMjYsDQorLS0g QlRSRUVfUFJFRklYX1JBVyBpcyAxMjcpLCBieSBrZXlzIHRoYXQgc2hhcmUgbm90aGluZywgYW5k IGJ5IGEgTlVMTCBrZXkuDQorLS0NCitDUkVBVEUgVEFCTEUgYnRyZWVfcHJlZml4ICh1IHRleHQg Q09MTEFURSAiQyIpOw0KKy0tIEJ1aWxkLXBhdGggcGFnZXMgKENSRUFURSBJTkRFWCB3cml0ZXMg d2hvbGUgbGVhdmVzKS4gIEEgc2hhcmVkIDQwLWJ5dGUNCistLSBwcmVmaXgsIHBsdXMgZXhwbGlj aXQgcm93cyBhdCB0aGUgMTI1LzEyNi8xMjcgc2hhcmVkLWJ5dGUgYm91bmRhcnkuDQorSU5TRVJU IElOVE8gYnRyZWVfcHJlZml4DQorICBTRUxFQ1QgJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90 by9yZXNvdXJjZS8nIHx8IGxwYWQoKGcgJSAyMDAwMCk6OnRleHQsIDgsICcwJykNCisgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDIwMDAwKSBnOw0KK0lOU0VSVCBJTlRPIGJ0cmVlX3ByZWZpeA0K KyAgU0VMRUNUIHJlcGVhdCgnYScsIDQwKSB8fCByZXBlYXQoJ2InLCBuKSBGUk9NIGdlbmVyYXRl X3Nlcmllcyg4NSwgOTApIG47DQorSU5TRVJUIElOVE8gYnRyZWVfcHJlZml4IFZBTFVFUw0KKyAg KHJlcGVhdCgnYScsIDEyNSkpLCAocmVwZWF0KCdhJywgMTI2KSksIChyZXBlYXQoJ2EnLCAxMjcp KSwgKHJlcGVhdCgnYScsIDMwMCkpLA0KKyAgKCd6enotbm8tc2hhcmVkLXByZWZpeCcpLCAoTlVM TCk7DQorQ1JFQVRFIElOREVYIGJ0cmVlX3ByZWZpeF9vbiBPTiBidHJlZV9wcmVmaXggKHUpIFdJ VEggKHByZWZpeF9jb21wcmVzc2lvbiA9IG9uKTsNCisNCistLSBDb25maXJtIHRoZSBpbmRleCBy ZWFsbHkgaXMgdXNlZCAoYW5kIGlzIHByZWZpeC1jb21wcmVzc2VkKSwgc28gdGhlIHF1ZXJpZXMN CistLSBiZWxvdyBleGVyY2lzZSB0aGUgY29kZWQgcGFnZSBmb3JtYXQgcmF0aGVyIHRoYW4gc2ls ZW50bHkgZmFsbGluZyBiYWNrLg0KK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsNCitTRVQgZW5h YmxlX2JpdG1hcHNjYW4gPSBvZmY7DQorRVhQTEFJTiAoY29zdHMgb2ZmKQ0KKyAgU0VMRUNUIHUg RlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSA9ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8v cmVzb3VyY2UvMDAwMTIzNDUnOw0KKw0KKy0tIEVxdWFsaXR5LCByYW5nZSBhbmQgYmFja3dhcmQg c2NhbnMgZm9yY2VkIHRocm91Z2ggdGhlIHByZWZpeCBpbmRleC4gIFRoZWlyDQorLS0gcmVzdWx0 cyBhcmUgcmVjb3JkZWQgaW4gdGhlIGV4cGVjdGVkIG91dHB1dCwgd2hpY2ggaXMgaXRzZWxmIHRo ZSBvcmFjbGU6IGENCistLSBkZWNvZGUgcmVncmVzc2lvbiBjaGFuZ2VzIHRoZXNlIHJvd3MuICAo VGhlIGluZGV4LW9ubHkgZGlnZXN0IGJlbG93IGFkZHMgYW4NCistLSBvcmFjbGUgdGhhdCBkb2Vz IG5vdCByZWFkIHRoZSBpbmRleCBhdCBhbGwuKQ0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVl X3ByZWZpeA0KKyAgV0hFUkUgdSA9ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3Vy Y2UvMDAwMTIzNDUnOw0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVlX3ByZWZpeA0KKyAgV0hF UkUgdSBCRVRXRUVOICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMDAx MDAnDQorICAgICAgICAgICAgIEFORCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291 cmNlLzAwMDAwOTAwJzsNCitTRUxFQ1QgdSBGUk9NIGJ0cmVlX3ByZWZpeA0KKyAgV0hFUkUgdSA+ ICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvMDAwMTk5OTYnIE9SREVSIEJZ IHUgREVTQzsNCistLSBCb3VuZGFyeSBhbmQgb3ZlcnNpemVkIGtleXMgcm91bmQtdHJpcCB0byB0 aGVpciBleGFjdCBzdG9yZWQgdmFsdWVzLg0KK1NFTEVDVCB1IEZST00gYnRyZWVfcHJlZml4IFdI RVJFIHUgTElLRSAnYWFhYSUnIE9SREVSIEJZIHU7DQorU0VMRUNUIGNvdW50KCopIEZST00gYnRy ZWVfcHJlZml4IFdIRVJFIHUgPSByZXBlYXQoJ2EnLCAzMDApOw0KK1NFTEVDVCBjb3VudCgqKSBG Uk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSB1IElTIE5VTEw7DQorDQorLS0gSW5kZXgtb25seSBzY2Fu IG92ZXIgdGhlIHByZWZpeCBpbmRleCwgY29tcGFyZWQgdG8gdGhlIGxpdGVyYWwgdmFsdWVzIHRo YXQNCistLSB3ZXJlIGluc2VydGVkIChhbiBvcmFjbGUgdGhhdCBkb2VzIG5vdCBpdHNlbGYgcmVh ZCB0aGUgaW5kZXgpLg0KK1NFTEVDVCAoU0VMRUNUIG1kNShzdHJpbmdfYWdnKHUsICd8JyBPUkRF UiBCWSB1KSkNCisgICAgICAgICAgRlJPTSBidHJlZV9wcmVmaXggV0hFUkUgdSBJUyBOT1QgTlVM TCkgPQ0KKyAgICAgICBtZDUoc3RyaW5nX2FnZyh4LCAnfCcgT1JERVIgQlkgeCkpIEFTIGlvc19v aw0KKyAgRlJPTSAoDQorICAgIFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jl c291cmNlLycgfHwgbHBhZCgoZyAlIDIwMDAwKTo6dGV4dCwgOCwgJzAnKSBBUyB4DQorICAgICAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwMDApIGcNCisgICAgVU5JT04gQUxMIFNFTEVDVCBy ZXBlYXQoJ2EnLCA0MCkgfHwgcmVwZWF0KCdiJywgbikgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoODUs IDkwKSBuDQorICAgIFVOSU9OIEFMTCBTRUxFQ1QgdiBGUk9NIChWQUxVRVMgKHJlcGVhdCgnYScs MTI1KSksKHJlcGVhdCgnYScsMTI2KSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHJlcGVhdCgnYScsMTI3KSksKHJlcGVhdCgnYScsMzAwKSksDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCd6enotbm8tc2hhcmVkLXByZWZpeCcpKSB0KHYpDQor ICApIG9yYWNsZTsNCisNCistLSBSZXRhaWwgaW5zZXJ0cyBjYXVzZSBzcGxpdHMgdGhhdCBmYXVs dCBwYWdlcyBmb3J3YXJkIGludG8gdGhlIGNvZGVkIGZvcm1hdDsNCistLSBhbiBpbmRleC1vbmx5 IHNjYW4gbXVzdCBzdGlsbCBhZ3JlZSB3aXRoIHRoZSBpbmRlcGVuZGVudCBvcmFjbGUgYWZ0ZXJ3 YXJkcy4NCitJTlNFUlQgSU5UTyBidHJlZV9wcmVmaXgNCisgIFNFTEVDVCAnaHR0cHM6Ly9leGFt cGxlLmNvbS9vdGhlci8nIHx8IGxwYWQoZzo6dGV4dCwgOCwgJzAnKQ0KKyAgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwMDApIGc7DQorLS0gRGVsZXRlIHRoZW4gVkFDVVVNLCB0aGVuIHJlLWlu c2VydCBpbnRvIGZyZWVkIHNwYWNlLiAgVGhlIGRlbGV0ZSB0YXJnZXRzDQorLS0gb25seSBwYXJ0 IG9mIHRoZSBVUkwgbmFtZXNwYWNlIHNvIHRoZSBib3VuZGFyeSBrZXlzIChhYWFhLi4uL3p6ei4u Likgc3Vydml2ZQ0KKy0tIGZvciB0aGUgY2hlY2tzIGJlbG93Lg0KK0RFTEVURSBGUk9NIGJ0cmVl X3ByZWZpeA0KKyAgV0hFUkUgdSA+PSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3RvL3Jlc291 cmNlLzAwMDAwMDAwJw0KKyAgICBBTkQgdSA8ICAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3Rv L3Jlc291cmNlLzAwMDA1MDAwJzsNCitWQUNVVU0gYnRyZWVfcHJlZml4Ow0KK0lOU0VSVCBJTlRP IGJ0cmVlX3ByZWZpeA0KKyAgU0VMRUNUICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVz b3VyY2UvJyB8fCBscGFkKChnICUgNTAwMCk6OnRleHQsIDgsICcwJykNCisgIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDUwMDApIGc7DQorLS0gQWZ0ZXIgdGhlIGNodXJuLCBhbiBpbmRleC1vbmx5 IHNjYW4gb2YgdGhlIGxpdmUga2V5cyBtdXN0IGVxdWFsIHRoZSBzYW1lDQorLS0ga2V5cyBmZXRj aGVkIGZyb20gdGhlIGhlYXAgYnkgYSBzZXF1ZW50aWFsIHNjYW4gKGFuIGluZGVwZW5kZW50IHBh dGgpOiBpZg0KKy0tIGRlY29kaW5nIHRoZSBjb2RlZCBsZWF2ZXMgd2VyZSB3cm9uZywgdGhlIHR3 byBkaWdlc3RzIHdvdWxkIGRpZmZlci4NCitTRVQgZW5hYmxlX2luZGV4b25seXNjYW4gPSBvbjsN CitTRUxFQ1QgbWQ1KHN0cmluZ19hZ2codSwgJ3wnIE9SREVSIEJZIHUpKSBBUyBpb3NfZGlnZXN0 DQorICBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSB1IElTIE5PVCBOVUxMIFxnc2V0DQorU0VUIGVu YWJsZV9pbmRleHNjYW4gPSBvZmY7DQorU0VUIGVuYWJsZV9pbmRleG9ubHlzY2FuID0gb2ZmOw0K K1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9uOw0KK1NFTEVDVCA6J2lvc19kaWdlc3QnID0NCisgICAg ICAgKFNFTEVDVCBtZDUoc3RyaW5nX2FnZyh1LCAnfCcgT1JERVIgQlkgdSkpIEZST00gYnRyZWVf cHJlZml4IFdIRVJFIHUgSVMgTk9UIE5VTEwpDQorICAgICAgIEFTIHBvc3RfY2h1cm5fb2s7DQor U0VUIGVuYWJsZV9pbmRleHNjYW4gPSBvbjsNCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsNCitSRVNF VCBlbmFibGVfYml0bWFwc2NhbjsNCisNCistLSBUaGUgcmVsb3B0aW9uIHJvdW5kLXRyaXBzIGFu ZCBjYW4gYmUgdG9nZ2xlZCB3aXRob3V0IGEgcmV3cml0ZS4NCitTRUxFQ1QgcmVsb3B0aW9ucyBG Uk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAnYnRyZWVfcHJlZml4X29uJzsNCitBTFRFUiBJ TkRFWCBidHJlZV9wcmVmaXhfb24gU0VUIChwcmVmaXhfY29tcHJlc3Npb24gPSBvZmYpOw0KK1NF TEVDVCByZWxvcHRpb25zIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICdidHJlZV9wcmVm aXhfb24nOw0KKy0tIFJlYWRpbmcgYmFjayB3aXRoIHRoZSBvcHRpb24gb2ZmIHN0aWxsIHJldHVy bnMgY29ycmVjdCByb3dzOiBleGlzdGluZw0KKy0tIEJUUF9QUkVGSVggbGVhdmVzIGtlZXAgdGhl aXIgY29kZWQgZm9ybSBhbmQgZGVjb2RlIG9uIHRoZSBwYWdlIGZsYWcuDQorU0VUIGVuYWJsZV9z ZXFzY2FuID0gb2ZmOw0KK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0cmVlX3ByZWZpeCBXSEVSRSB1 ID0gcmVwZWF0KCdhJywgMTI2KTsNCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsNCisNCistLSBBIG5v bi12YXJsZW5hIGZpcnN0IGNvbHVtbiBpcyBsZWdhbCBhbmQgc2lsZW50bHkgc3RvcmVzIG5vIHBy ZWZpeDsgdmVyaWZ5IGENCistLSBzY2FuIG92ZXIgc3VjaCBhbiBpbmRleCByZXR1cm5zIGNvcnJl Y3Qgcm93cy4NCitDUkVBVEUgSU5ERVggYnRyZWVfcHJlZml4X2ludCBPTiBidHJlZV9wcmVmaXgg KChsZW5ndGgodSkpKSBXSVRIIChwcmVmaXhfY29tcHJlc3Npb24gPSBvbik7DQorU0VUIGVuYWJs ZV9zZXFzY2FuID0gb2ZmOw0KK1NFTEVDVCBsZW5ndGgodSkgRlJPTSBidHJlZV9wcmVmaXggV0hF UkUgbGVuZ3RoKHUpID0gMzAwOw0KK1JFU0VUIGVuYWJsZV9zZXFzY2FuOw0KK0RST1AgVEFCTEUg YnRyZWVfcHJlZml4Ow0KKw0KKy0tDQorLS0gQm90dG9tLXVwIGluZGV4IGRlbGV0aW9uIG9uIHBy ZWZpeC1jb21wcmVzc2VkIHBhZ2VzLg0KKy0tDQorLS0gQW4gVVBEQVRFIHRoYXQgZG9lcyBub3Qg Y2hhbmdlIHRoZSBpbmRleGVkIGNvbHVtbiBtYXJrcyB0aGUgcmVzdWx0aW5nIGluZGV4DQorLS0g aW5zZXJ0ICJsb2dpY2FsbHkgdW5jaGFuZ2VkIiwgd2hpY2ggbGV0cyBuYnRyZWUgcnVuIGEgYm90 dG9tLXVwIGRlbGV0aW9uDQorLS0gcGFzcyBiZWZvcmUgc3BsaXR0aW5nIGEgbGVhZi4gIFRoYXQg cGFzcyByZWFkcyBhbmQgKG9ubHkpIHJlbW92ZXMgaXRlbXM7IGl0DQorLS0gbXVzdCB3b3JrIG9u IGNvZGVkIHBhZ2VzIHRvby4gIEhlcmUgd2UgZXhlcmNpc2UgdGhlIHBhdGggYW5kIHZlcmlmeSB0 aGUNCistLSBpbmRleCBzdGF5cyBjb3JyZWN0OyBjb21taXR0ZWQgdXBkYXRlIGJhdGNoZXMgYmV0 d2VlbiBWQUNVVU1zIGxlYXZlDQorLS0gcmVtb3ZhYmxlIGR1cGxpY2F0ZXMgZm9yIHRoZSBwYXNz IHRvIGZpbmQuICAoQmxvYXQgaXMgcXVhbnRpZmllZCBpbiB0aGUNCistLSBwZXJmb3JtYW5jZSBi ZW5jaG1hcmssIG5vdCBoZXJlLCBzaW5jZSByZW1vdmFiaWxpdHkgaXMgdGltaW5nLWRlcGVuZGVu dC4pDQorLS0NCitDUkVBVEUgVEFCTEUgYnRyZWVfcHJlZml4X2J1IChpZCBpbnQgUFJJTUFSWSBL RVksIHUgdGV4dCBDT0xMQVRFICJDIiwgZmlsbGVyIHRleHQpOw0KK0lOU0VSVCBJTlRPIGJ0cmVl X3ByZWZpeF9idQ0KKyAgU0VMRUNUIGcsICdodHRwczovL2V4YW1wbGUuY29tL3BhdGgvJyB8fCBs cGFkKChnICUgNTAwKTo6dGV4dCwgOCwgJzAnKSwgcmVwZWF0KCd4JywgNDApDQorICBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCA0MDAwKSBnOw0KK0NSRUFURSBJTkRFWCBidHJlZV9wcmVmaXhfYnVf dSBPTiBidHJlZV9wcmVmaXhfYnUgKHUpIFdJVEggKHByZWZpeF9jb21wcmVzc2lvbiA9IG9uKTsN CistLSBTZXZlcmFsIGNvbW1pdHRlZCBub24ta2V5IFVQREFURSBiYXRjaGVzICh2ZXJzaW9uIGNo dXJuIG9uIHRoZSBwcmVmaXggaW5kZXgpLg0KK1VQREFURSBidHJlZV9wcmVmaXhfYnUgU0VUIGZp bGxlciA9IHJlcGVhdCgneScsIDQwKTsNCitVUERBVEUgYnRyZWVfcHJlZml4X2J1IFNFVCBmaWxs ZXIgPSByZXBlYXQoJ3onLCA0MCk7DQorVVBEQVRFIGJ0cmVlX3ByZWZpeF9idSBTRVQgZmlsbGVy ID0gcmVwZWF0KCd3JywgNDApOw0KKy0tIENvcnJlY3RuZXNzIGFmdGVyIHRoZSBjaHVybjogYW4g aW5kZXgtb25seSBzY2FuIG9mIHRoZSBrZXkgY29sdW1uIG11c3QgZXF1YWwNCistLSB0aGUgaW5k ZXBlbmRlbnQgb3JhY2xlICh0aGUgbGl0ZXJhbCBrZXlzKSwgcHJvdmluZyBubyBkZWNvZGUvZGVs ZXRpb24gZGFtYWdlLg0KK1NFVCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsNCitTRUxFQ1QgKFNFTEVD VCBtZDUoc3RyaW5nX2FnZyh1LCAnfCcgT1JERVIgQlkgdSkpIEZST00gYnRyZWVfcHJlZml4X2J1 KSA9DQorICAgICAgIG1kNShzdHJpbmdfYWdnKHgsICd8JyBPUkRFUiBCWSB4KSkgQVMgYm90dG9t dXBfb2sNCisgIEZST00gKFNFTEVDVCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoLycgfHwgbHBh ZCgoZyAlIDUwMCk6OnRleHQsIDgsICcwJykgQVMgeA0KKyAgICAgICAgICBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCA0MDAwKSBnKSBvcmFjbGU7DQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVf cHJlZml4X2J1DQorICBXSEVSRSB1ID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC8nIHx8IGxw YWQoJzcnLCA4LCAnMCcpOw0KK1JFU0VUIGVuYWJsZV9zZXFzY2FuOw0KK0RST1AgVEFCTEUgYnRy ZWVfcHJlZml4X2J1Ow0KKw0KKy0tDQorLS0gUnVudGltZSBkZWR1cGxpY2F0aW9uIG9uIGEgcHJl Zml4LWNvbXByZXNzZWQgcGFnZS4gIER1cGxpY2F0ZSBrZXlzIGluc2VydGVkDQorLS0gb25lIGF0 IGEgdGltZSBpbnRvIGFuIGV4aXN0aW5nIHByZWZpeCBpbmRleCBmaWxsIGEgbGVhZjsgYmVmb3Jl IGl0IHNwbGl0cywNCistLSB0aGUgZGVkdXBsaWNhdGlvbiBwYXNzIGRlY29kZXMgdGhlIGNvZGVk IGl0ZW1zLCBtZXJnZXMgdGhlIGR1cGxpY2F0ZSBUSURzDQorLS0gaW50byBwb3N0aW5nIGxpc3Rz IGFuZCByZS1jb2RlcyB0aGUgcGFnZS4gIFRoZSBkZWNvZGVkIHNldCBjYW4gZXhjZWVkIG9uZQ0K Ky0tIHBhZ2UgZXZlbiB3aGVuIHRoZSBjb2RlZCBmb3JtIGZpdCwgaW4gd2hpY2ggY2FzZSB0aGUg cGFzcyBhYm9ydHMgYW5kIHRoZQ0KKy0tIHBhZ2Ugc3BsaXRzIGluc3RlYWQ7IGVpdGhlciB3YXkg dGhlIHJlc3VsdCBtdXN0IGJlIGNvcnJlY3QuDQorLS0NCitDUkVBVEUgVEFCTEUgYnRyZWVfcHJl Zml4X2RkICh1IHRleHQgQ09MTEFURSAiQyIpOw0KK0NSRUFURSBJTkRFWCBidHJlZV9wcmVmaXhf ZGRfdSBPTiBidHJlZV9wcmVmaXhfZGQgKHUpIFdJVEggKHByZWZpeF9jb21wcmVzc2lvbiA9IG9u KTsNCitJTlNFUlQgSU5UTyBidHJlZV9wcmVmaXhfZGQNCisgIFNFTEVDVCAnaHR0cHM6Ly9leGFt cGxlLmNvbS9wYXRoL3RvL3Jlc291cmNlLycgfHwgbHBhZCgoZyAlIDIwMCk6OnRleHQsIDgsICcw JykNCisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDQwMDAwKSBnOw0KK1NFVCBlbmFibGVfc2Vx c2NhbiA9IG9mZjsNCitTRUxFQ1QgKFNFTEVDVCBtZDUoc3RyaW5nX2FnZyh1LCAnfCcgT1JERVIg QlkgdSkpIEZST00gYnRyZWVfcHJlZml4X2RkKSA9DQorICAgICAgIG1kNShzdHJpbmdfYWdnKHgs ICd8JyBPUkRFUiBCWSB4KSkgQVMgcnVudGltZV9kZWR1cF9vaw0KKyAgRlJPTSAoU0VMRUNUICdo dHRwczovL2V4YW1wbGUuY29tL3BhdGgvdG8vcmVzb3VyY2UvJyB8fCBscGFkKChnICUgMjAwKTo6 dGV4dCwgOCwgJzAnKSBBUyB4DQorICAgICAgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDQw MDAwKSBnKSBvcmFjbGU7DQorU0VMRUNUIGNvdW50KCopIEZST00gYnRyZWVfcHJlZml4X2RkDQor ICBXSEVSRSB1ID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcGF0aC90by9yZXNvdXJjZS8nIHx8IGxw YWQoJzQyJywgOCwgJzAnKTsNCitSRVNFVCBlbmFibGVfc2Vxc2NhbjsNCitEUk9QIFRBQkxFIGJ0 cmVlX3ByZWZpeF9kZDsNCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0DQppbmRleCBiOTY0ZTVlZTkw Ny4uYzNmYjU2ODAyZjYgMTAwNjQ0DQotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdA0KKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QNCkBAIC0yMTUsNiAr MjE1LDcgQEAgQlREZWxldGVkUGFnZURhdGENCiBCVEluZGV4U3RhdA0KIEJUSW5zZXJ0U3RhdGUN CiBCVEluc2VydFN0YXRlRGF0YQ0KK0JUSXRlbUJ1Zg0KIEJUTGVhZGVyDQogQlRNZXRhUGFnZURh dGENCiBCVE9uZVZhY0luZm8NCkBAIC0yMjYsNiArMjI3LDcgQEAgQlRQYWdlU3RhdA0KIEJUUGFn ZVN0YXRlDQogQlRQYXJhbGxlbFNjYW5EZXNjDQogQlRQZW5kaW5nRlNNDQorQlRQcmVmaXhQbGFu DQogQlRSZWFkUGFnZVN0YXRlDQogQlRTY2FuSW5zZXJ0DQogQlRTY2FuSW5zZXJ0RGF0YQ0KLS0g DQoyLjU0LjANCg0K --b1=_8rcErnQfH7REGMhZswxwOKQz0RfsSdRKypkUQFo6I--