Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pFJwL-000329-Ri for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Jan 2023 19:05:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pFJwK-0004Aj-Ma for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Jan 2023 19:05:40 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pFJwJ-0004AZ-PV for pgsql-hackers@lists.postgresql.org; Tue, 10 Jan 2023 19:05:40 +0000 Received: from smtp-fw-80007.amazon.com ([99.78.197.218]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pFJwA-00020R-S2 for pgsql-hackers@postgresql.org; Tue, 10 Jan 2023 19:05:39 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1673377531; x=1704913531; h=from:to:cc:date:message-id:references:in-reply-to: mime-version:subject; bh=cWQQGmwy1fj/jU4FfWahzOJ6flL44fRZ6GXkDxJqzs0=; b=IPwQSRB/aiEHQk6C6pA3EVNqq2tj+IGBUhIfT7WyFBjZImOprzL41tnU qQsLReBQTWj1gyNRdI1KuYcx6vb7PSxR+vla+ZQ62X5hYaEoZZO70OOlC dBm41iN4IVVWC1L0uylFvnOO3A7MucUa1B5WUndV55ongKNfKzqU+2vDR k=; X-Amazon-filename: slru_to_buffer_cache_with_page_headers_v4.patch X-IronPort-AV: E=Sophos;i="5.96,315,1665446400"; d="scan'208,223";a="169792061" Subject: Re: SLRUs in the main buffer pool - Page Header definitions Thread-Topic: SLRUs in the main buffer pool - Page Header definitions Received: from pdx4-co-svc-p1-lb2-vlan3.amazon.com (HELO email-inbound-relay-pdx-2c-m6i4x-d2040ec1.us-west-2.amazon.com) ([10.25.36.214]) by smtp-border-fw-80007.pdx80.corp.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jan 2023 19:05:25 +0000 Received: from EX13MTAUWC002.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan2.pdx.amazon.com [10.236.137.194]) by email-inbound-relay-pdx-2c-m6i4x-d2040ec1.us-west-2.amazon.com (Postfix) with ESMTPS id 5A7DC40D73; Tue, 10 Jan 2023 19:05:24 +0000 (UTC) Received: from EX19D005UWC002.ant.amazon.com (10.13.138.137) by EX13MTAUWC002.ant.amazon.com (10.43.162.240) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Tue, 10 Jan 2023 19:05:23 +0000 Received: from EX19D035UEA003.ant.amazon.com (10.252.134.113) by EX19D005UWC002.ant.amazon.com (10.13.138.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.7; Tue, 10 Jan 2023 19:05:22 +0000 Received: from EX19D035UEA003.ant.amazon.com ([fe80::b768:c926:7fea:2016]) by EX19D035UEA003.ant.amazon.com ([fe80::b768:c926:7fea:2016%3]) with mapi id 15.02.1118.020; Tue, 10 Jan 2023 19:05:21 +0000 From: "Bagga, Rishu" To: vignesh C , pgsql-hackers CC: Heikki Linnakangas , Thomas Munro , "Debnath, Shawn" Thread-Index: AQHYhnvxezKTgPNs7k2tXj3iuMBOO630OQiAgDqHS4CAHByDAIAlRqyAgB23l4CACt7JgA== Date: Tue, 10 Jan 2023 19:05:21 +0000 Message-ID: References: <7C4D53F1-A156-4ABC-9B89-B2C253D5FF74@amazon.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.187.171.23] Content-Type: multipart/mixed; boundary="_002_A09EAE0D0D3F4A34ADE98AC1DCBE7D57amazoncom_" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_A09EAE0D0D3F4A34ADE98AC1DCBE7D57amazoncom_ Content-Type: text/plain; charset="utf-8" Content-ID: <32C2FF2ACAA50E468340FCA4EF73C096@amazon.com> Content-Transfer-Encoding: base64 Pk9uIDEvMy8yMywgNTowNiBBTSwgInZpZ25lc2ggQyIgPHZpZ25lc2gyMUBnbWFpbC5jb20+IHdy b3RlOg0KPj5PbiBGcmksIDE2IERlYyAyMDIyIGF0IDA0OjQ3LCBCYWdnYSwgUmlzaHUgPGJhZ3Jp c2h1QGFtYXpvbi5jb20+IA0KPj53cm90ZToNCj4+UmViYXNlZCBhbmQgdXBkYXRlZCBhIG5ldyBw YXRjaCBhZGRyZXNzaW5nIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzc3VlIGluDQo+PlJlY29yZE5l d011bHRsaVhhY3QuSW4gR2V0TmV3TXVsdGlYYWN0SWQsIHdlIG5vdyBtYWtlIG91ciBSZWFkQnVm ZmVyDQo+PmNhbGxzIGJlZm9yZSBzdGFydGluZyB0aGUgY3JpdGljYWwgc2VjdGlvbiwgYnV0IHdo aWxlIGhvbGRpbmcgdGhlDQo+Pk11bHRpWGFjdEdlbkxvY2ssIHNvIHdlIGFsd2F5cyBmZXRjaCB0 aGUgY29ycmVjdCBidWZmZXJzLiBXZSBzdG9yZSANCj4+dGhlbSBpbiBhbiBhcnJheSB0aGF0IGlz IGFjY2Vzc2VkIGxhdGVyIGluIFJlY29yZE5ld011bHRpWGFjdC4NCj4+VGhpcyB3YXkgd2UgY2Fu IGtlZXAgdGhlIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgb2Ygb25seSBob2xkaW5nIHRoZSANCj4+ TXVsdGlYYWN0R2VuTG9jayB3aGlsZSByZWFkaW5nIGluIGJ1ZmZlcnMsIGJ1dCBjYW4gbGV0IGdv IHdoZW4gd2UgYXJlIA0KPj53cml0aW5nLCB0byBwcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgY29uY3Vy cmVuY3kgcGFyYWRpZ20uDQo+PkxldCBtZSBrbm93IHlvdXIgdGhvdWdodHMgb24gdGhpcyBhcHBy b2FjaC4NCg0KDQo+IFRoZSBwYXRjaCBkb2VzIG5vdCBhcHBseSBvbiB0b3Agb2YgSEVBRCBhcyBp biBbMV0sIHBsZWFzZSBwb3N0IGEgDQo+cmViYXNlZCBwYXRjaDoNCj49PT0gQXBwbHlpbmcgcGF0 Y2hlcyBvbiB0b3Agb2YgUG9zdGdyZVNRTCBjb21taXQgSUQNCj45Mjk1N2VkOThjNWM1NjUzNjJj ZTY2NTI2NjEzMmE3ZjA4ZjZiMGMwID09PQ0KPj09PSBhcHBseWluZyBwYXRjaCAuL3NscnVfdG9f YnVmZmVyX2NhY2hlX3dpdGhfcGFnZV9oZWFkZXJzX3YzLnBhdGNoDQouLi4NCj5wYXRjaGluZyBm aWxlIHNyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oDQo+SHVuayAjMSBGQUlMRUQgYXQg NTcuDQo+MSBvdXQgb2YgMSBodW5rIEZBSUxFRCAtLSBzYXZpbmcgcmVqZWN0cyB0byBmaWxlDQo+ c3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgucmVqDQoNCj5bMV0gLSBodHRwOi8vY2Zi b3QuY3B1dHViZS5vcmcvcGF0Y2ggXzQxXzM1MTQubG9nDQoNCj5SZWdhcmRzLA0KPlZpZ25lc2gN Cg0KSGkgYWxsLA0KDQpSZWJhc2VkIHRoZSBwYXRjaCwgYW5kIGZpeGVkIGEgYnVnIEkgaW50cm9k dWNlZCBpbiB0aGUgcHJldmlvdXMgcGF0Y2ggaW4gDQpUcmltQ0xPRy4gDQoNCldlIHJhbiBhIHF1 aWNrIHNldCBvZiBwZ2JlbmNoIHRlc3RzIGFuZCBvYnNlcnZlZCBubyByZWdyZXNzaW9ucy4gSGVy ZSANCmFyZSB0aGUgbnVtYmVyczoNCg0KMyB0cmlhbHMsIHdpdGggc2NhbGUgMTAsMDAwLCAzNTAg Y2xpZW50cywgMzUwIHRocmVhZHMsIG92ZXIgMzAgbWludXRlczoNCg0KTWVkaWFuIFRQUzoNCg0K Q29udHJvbOKAqOKAqFRyaWFsIDE6IDU4MzMxLjANClRyaWFsIDI6IDU3MTkxLjANClRyaWFsIDM6 IDU3MTAxLjMNCg0KQXZlcmFnZSBvZiBNZWRpYW5zOiA1NzU0MS4xDQoNClNMUlVzIHRvIEJ1ZmZl ckNhY2hlICsgUGFnZSBIZWFkZXJzOg0KDQpUcmlhbCAxOiA2MjYwNS4wDQpUcmlhbCAyOiA2Mjg5 MS4yDQpUcmlhbCAzOiA1OTkwNi4zDQoNCkF2ZXJhZ2Ugb2YgTWVkaWFuczogNjE4MDAuOA0KDQpN YWNoaW5lIFNwZWNzOg0KDQpEcml2ZXINCg0KSW5zdGFuY2U6IG01ZC5tZXRhbA0KQXJjaGl0ZWN0 dXJlIHg4Nl82NA0KQ1BVczogOTYNClJBTTogMzg0IEdpQg0KT1M6IEFtYXpvbiBMaW51eCAyDQoN Cg0KU2VydmVyDQoNCkluc3RhbmNlOiByNWRuLm1ldGFsDQpBcmNoaXRlY3R1cmUgeDg2XzY0DQpD UFVzOiA2NA0KUkFNOiA1MDBHaUINCk9TOiBBbWF6b24gTGludXggMg0KDQoNCkxvb2tpbmcgZm9y d2FyZCB0byB5b3VyIGZlZWRiYWNrIG9uIHRoaXMuDQoNClNpbmNlcmVseSwNClJpc2h1IEJhZ2dh LCBBbWF6b24gV2ViIFNlcnZpY2VzIChBV1MpDQoNCg0K77u/DQoNCg0K --_002_A09EAE0D0D3F4A34ADE98AC1DCBE7D57amazoncom_ Content-Type: application/octet-stream; name="slru_to_buffer_cache_with_page_headers_v4.patch" Content-Description: slru_to_buffer_cache_with_page_headers_v4.patch Content-Disposition: attachment; filename="slru_to_buffer_cache_with_page_headers_v4.patch"; size=356513; creation-date="Tue, 10 Jan 2023 19:05:21 GMT"; modification-date="Tue, 10 Jan 2023 19:05:21 GMT" Content-ID: <504C3D8C4E74E745A1CD8D31100F5E48@amazon.com> Content-Transfer-Encoding: base64 RnJvbSA1ZDY2ZmFkMWZhYzMwZWU2ODY5YmUyMzRlNWQwYjljNWU2YmZlYmIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaXNodSBCYWdnYSA8YmFncmlzaHVAYW1hem9uLmNvbT4KRGF0 ZTogVGh1LCAxNSBTZXAgMjAyMiAwMDo1NToyNSArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIGhlaWtr aSBzMmIgcGF0Y2ggKyBwYWdlIGhlYWRlcnMgKyB1cGdyYWRlCgotLS0KIGNvbnRyaWIvYW1jaGVj ay92ZXJpZnlfbmJ0cmVlLmMgICAgICAgICAgICAgfCAgICAyICstCiBjb250cmliL2Jsb29tL2Js aW5zZXJ0LmMgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogY29udHJpYi9wZ19wcmV3YXJt L2F1dG9wcmV3YXJtLmMgICAgICAgICAgICB8ICAgIDIgKy0KIGNvbnRyaWIvcGdfcHJld2FybS9w Z19wcmV3YXJtLmMgICAgICAgICAgICAgfCAgICA0ICstCiBjb250cmliL3BnX3Zpc2liaWxpdHkv cGdfdmlzaWJpbGl0eS5jICAgICAgIHwgICAgNSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdGJ1aWxkLmMgICAgICAgICB8ICAgMTEgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2hwYWdlLmMgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jICAgIHwgICAzMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3cml0 ZWhlYXAuYyAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxp dHltYXAuYyAgICAgfCAgIDQxICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5j ICAgICAgICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMg ICAgICAgICB8ICAgIDggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0LmMg ICAgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAg ICAgIHwgICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jICAgICAgICAg ICB8ICAyMjcgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyAgICAg IHwgIDE5OSArLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jICAgICAg fCAgNTA4ICsrKy0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYyAgICAgICAg ICAgfCAxNDg0ICsrLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3N1YnRyYW5zLmMgICAgICAgfCAgMTE0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 YWN0LmMgICAgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMgICAgICAgICAgIHwgICAxNSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3By ZWZldGNoZXIuYyB8ICAgMjggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGls cy5jICAgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL2NhdGFsb2cuYyAgICAgICAg ICAgICAgIHwgICA1MyArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAg ICAgICB8ICAgIDQgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFnZS5jICAgICAgICAgICAg ICAgfCAgMjA1ICsrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAgICAg ICB8ICAgOTcgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYyAgICAgICAgICAg fCAgICA4ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICAgICAgICAgIHwg ICAgOCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICB8ICAg MTkgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgICAgICAgfCAgIDE3 ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgIHwgIDM3OSAr Ky0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYyAgICAgICB8ICAgMjUg Ky0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvZnJlZXNwYWNlL2ZyZWVzcGFjZS5jICAgfCAgIDQxICst CiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAgICAgICAgICAgIHwgICAgNCAtCiBz cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgICAgICAgIHwgICA3MiArLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYyAgICAgICAgICB8ICAgMjMgKy0KIHNyYy9i YWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jICAgICAgICAgICAgICAgfCAgMzY2ICsrLS0tCiBzcmMv YmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jICAgICAgICAgICAgIHwgIDM5OSArKystLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYyAgICAgICAgICAgICB8ICAgMjAgKy0KIHNyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMgICAgICAgICAgICAgfCAgIDE3ICstCiBzcmMvYmFj a2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgIHwgICAyNyArLQogc3JjL2JhY2tl bmQvdXRpbHMvbW1nci9tY3h0LmMgICAgICAgICAgICAgICB8ICAgMTMgKy0KIHNyYy9iaW4vcGdf dXBncmFkZS9maWxlLmMgICAgICAgICAgICAgICAgICAgfCAgMTc1ICsrLQogc3JjL2Jpbi9wZ191 cGdyYWRlL2Z1bmN0aW9uLmMgICAgICAgICAgICAgICB8ICAgNjYgKwogc3JjL2Jpbi9wZ191cGdy YWRlL3BnX3VwZ3JhZGUuYyAgICAgICAgICAgICB8ICAgNzYgKy0KIHNyYy9iaW4vcGdfdXBncmFk ZS9wZ191cGdyYWRlLmggICAgICAgICAgICAgfCAgIDE5ICstCiBzcmMvY29tbW9uL3JlbHBhdGgu YyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2Ns b2cuaCAgICAgICAgICAgICAgICAgICB8ICAgIDYgLQogc3JjL2luY2x1ZGUvYWNjZXNzL2NvbW1p dF90cy5oICAgICAgICAgICAgICB8ICAgIDMgLQogc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFj dC5oICAgICAgICAgICAgICB8ICAgIDMgLQogc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaCAgICAg ICAgICAgICAgICAgICB8ICAxODEgKy0tCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWRlZnMuaCAg ICAgICAgICAgICAgIHwgICAxOSArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWxpc3QuaCAgICAg ICAgICAgICAgIHwgICAzMCArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaCAgICAgICAg ICAgICAgIHwgICAgMyAtCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3N0b3JhZ2UuaCAgICAgICAgICAg ICAgIHwgICAxMSArLQogc3JjL2luY2x1ZGUvY29tbW9uL3JlbHBhdGguaCAgICAgICAgICAgICAg ICB8ICAgMTUgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oICAgICAgICAg fCAgIDExICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgICAgICAgIHwg ICAzOCArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmggICAgICAgICAgICAgICB8ICAg MTcgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oICAgICAgICAgICAgICAgICAgICB8ICAgMjgg Ky0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCAgICAgICAgfCAgIDI5ICst CiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaCAgICAgICAgICAgICAgICAgIHwgICA5OSArLQog c3JjL2luY2x1ZGUvdXRpbHMvaW52YWwuaCAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIHNy Yy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDMzICstCiA2NSBm aWxlcyBjaGFuZ2VkLCAyMTczIGluc2VydGlvbnMoKyksIDMyNTkgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVkZWZzLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWxpc3QuaAoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJl ZS5jCmluZGV4IDI1N2NmZjY3MWJkLi4yYWI4MzdjMzA2MiAxMDA2NDQKLS0tIGEvY29udHJpYi9h bWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJl ZS5jCkBAIC0zMjQsNyArMzI0LDcgQEAgYnRfaW5kZXhfY2hlY2tfaW50ZXJuYWwoT2lkIGluZHJl bGlkLCBib29sIHBhcmVudGNoZWNrLCBib29sIGhlYXBhbGxpbmRleGVkLAogCQlib29sCQloZWFw a2V5c3BhY2UsCiAJCQkJCWFsbGVxdWFsaW1hZ2U7CiAKLQkJaWYgKCFzbWdyZXhpc3RzKFJlbGF0 aW9uR2V0U21ncihpbmRyZWwpLCBNQUlOX0ZPUktOVU0pKQorCQlpZiAoIXNtZ3JleGlzdHMoUmVs YXRpb25HZXRTbWdyKGluZHJlbCwgTUFJTl9GT1JLTlVNKSkpCiAJCQllcmVwb3J0KEVSUk9SLAog CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJVUFRFRCksCiAJCQkJCSBlcnJtc2coImlu ZGV4IFwiJXNcIiBsYWNrcyBhIG1haW4gcmVsYXRpb24gZm9yayIsCmRpZmYgLS1naXQgYS9jb250 cmliL2Jsb29tL2JsaW5zZXJ0LmMgYi9jb250cmliL2Jsb29tL2JsaW5zZXJ0LmMKaW5kZXggZjgx NDQyZWZiM2YuLjQ5Yjk1MmYzYzNiIDEwMDY0NAotLS0gYS9jb250cmliL2Jsb29tL2JsaW5zZXJ0 LmMKKysrIGIvY29udHJpYi9ibG9vbS9ibGluc2VydC5jCkBAIC0xNzcsOSArMTc3LDkgQEAgYmxi dWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KQogCSAqIHRoaXMgZXZlbiB3aGVuIHdhbF9sZXZlbD1t aW5pbWFsLgogCSAqLwogCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobWV0YXBhZ2UsIEJMT09NX01F VEFQQUdFX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwgSU5JVF9G T1JLTlVNLCBCTE9PTV9NRVRBUEFHRV9CTEtOTywKKwlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdy KGluZGV4LCBJTklUX0ZPUktOVU0pLCBCTE9PTV9NRVRBUEFHRV9CTEtOTywKIAkJCSAgKGNoYXIg KikgbWV0YXBhZ2UsIHRydWUpOwotCWxvZ19uZXdwYWdlKCYoUmVsYXRpb25HZXRTbWdyKGluZGV4 KSktPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVNLAorCWxvZ19uZXdwYWdlKCZp bmRleC0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNLAogCQkJCUJMT09NX01FVEFQQUdFX0JMS05P LCBtZXRhcGFnZSwgdHJ1ZSk7CiAKIAkvKgpAQCAtMTg3LDcgKzE4Nyw3IEBAIGJsYnVpbGRlbXB0 eShSZWxhdGlvbiBpbmRleCkKIAkgKiB3cml0ZSBkaWQgbm90IGdvIHRocm91Z2ggc2hhcmVkX2J1 ZmZlcnMgYW5kIHRoZXJlZm9yZSBhIGNvbmN1cnJlbnQKIAkgKiBjaGVja3BvaW50IG1heSBoYXZl IG1vdmVkIHRoZSByZWRvIHBvaW50ZXIgcGFzdCBvdXIgeGxvZyByZWNvcmQuCiAJICovCi0Jc21n cmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0pOworCXNtZ3Jp bW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKGluZGV4LCBJTklUX0ZPUktOVU0pKTsKIH0KIAogLyoK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcHJld2FybS9hdXRvcHJld2FybS5jIGIvY29udHJpYi9w Z19wcmV3YXJtL2F1dG9wcmV3YXJtLmMKaW5kZXggOTM4MzU0NDljMGUuLjc0Y2M4ZGY2NDgxIDEw MDY0NAotLS0gYS9jb250cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0uYworKysgYi9jb250cmli L3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0uYwpAQCAtNTM1LDcgKzUzNSw3IEBAIGF1dG9wcmV3YXJt X2RhdGFiYXNlX21haW4oRGF0dW0gbWFpbl9hcmcpCiAJCQkgKi8KIAkJCWlmIChibGstPmZvcmtu dW0gPiBJbnZhbGlkRm9ya051bWJlciAmJgogCQkJCWJsay0+Zm9ya251bSA8PSBNQVhfRk9SS05V TSAmJgotCQkJCXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIGJsay0+Zm9ya251bSkp CisJCQkJc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBibGstPmZvcmtudW0pKSkKIAkJ CQluYmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2Nrc0luRm9yayhyZWwsIGJsay0+Zm9y a251bSk7CiAJCQllbHNlCiAJCQkJbmJsb2NrcyA9IDA7CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3ByZXdhcm0vcGdfcHJld2FybS5jIGIvY29udHJpYi9wZ19wcmV3YXJtL3BnX3ByZXdhcm0uYwpp bmRleCA1NDIwOTkyNGFlZC4uNDc5YmJhZmI3NDUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcHJl d2FybS9wZ19wcmV3YXJtLmMKKysrIGIvY29udHJpYi9wZ19wcmV3YXJtL3BnX3ByZXdhcm0uYwpA QCAtMTA5LDcgKzEwOSw3IEBAIHBnX3ByZXdhcm0oUEdfRlVOQ1RJT05fQVJHUykKIAkJYWNsY2hl Y2tfZXJyb3IoYWNscmVzdWx0LCBnZXRfcmVsa2luZF9vYmp0eXBlKHJlbC0+cmRfcmVsLT5yZWxr aW5kKSwgZ2V0X3JlbF9uYW1lKHJlbE9pZCkpOwogCiAJLyogQ2hlY2sgdGhhdCB0aGUgZm9yayBl eGlzdHMuICovCi0JaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVt YmVyKSkKKwlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051bWJlcikp KQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAogCQkJCSBlcnJtc2coImZvcmsgXCIlc1wiIGRvZXMgbm90IGV4aXN0IGZvciB0 aGlzIHJlbGF0aW9uIiwKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwZ19wcmV3YXJtKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCWZvciAoYmxvY2sgPSBmaXJzdF9ibG9jazsgYmxvY2sgPD0gbGFzdF9ibG9jazsg KytibG9jaykKIAkJewogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJCXNtZ3JyZWFkKFJl bGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVtYmVyLCBibG9jaywgYmxvY2tidWZmZXIuZGF0YSk7 CisJCQlzbWdycmVhZChSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVtYmVyKSwgYmxvY2ssIGJs b2NrYnVmZmVyLmRhdGEpOwogCQkJKytibG9ja3NfZG9uZTsKIAkJfQogCX0KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMgYi9jb250cmliL3BnX3Zpc2li aWxpdHkvcGdfdmlzaWJpbGl0eS5jCmluZGV4IDJhNGFjZmQxZWVlLi5iYjdjZDhlYzQzZCAxMDA2 NDQKLS0tIGEvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYworKysgYi9jb250 cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCkBAIC0zODYsMTMgKzM4NiwxNCBAQCBw Z190cnVuY2F0ZV92aXNpYmlsaXR5X21hcChQR19GVU5DVElPTl9BUkdTKQogCWNoZWNrX3JlbGF0 aW9uX3JlbGtpbmQocmVsKTsKIAogCS8qIEZvcmNpYmx5IHJlc2V0IGNhY2hlZCBmaWxlIHNpemUg Ki8KLQlSZWxhdGlvbkdldFNtZ3IocmVsKS0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZ TUFQX0ZPUktOVU1dID0gSW52YWxpZEJsb2NrTnVtYmVyOworCVJlbGF0aW9uR2V0U21ncihyZWws IFZJU0lCSUxJVFlNQVBfRk9SS05VTSktPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7CiAKIAlibG9jayA9IHZpc2liaWxpdHltYXBfcHJlcGFyZV90cnVuY2F0ZShyZWws IDApOwogCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxvY2spKQogCXsKIAkJZm9yayA9IFZJU0lC SUxJVFlNQVBfRk9SS05VTTsKLQkJc21ncnRydW5jYXRlKFJlbGF0aW9uR2V0U21ncihyZWwpLCAm Zm9yaywgMSwgJmJsb2NrKTsKKwkJRHJvcFJlbGF0aW9uQnVmZmVycyhyZWwtPnJkX2xvY2F0b3Is IHJlbC0+cmRfYmFja2VuZCwgJmZvcmssIDEsICZibG9jayk7CisJCXNtZ3J0cnVuY2F0ZV9tdWx0 aShyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgJmZvcmssIDEsICZibG9jayk7CiAJ fQogCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9naXN0L2dpc3RidWlsZC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGJ1 aWxkLmMKaW5kZXggZDIxYTMwOGQ0MWQuLjVlZTZjMjZmMDg0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC9naXN0YnVpbGQuYwpAQCAtNDE2LDcgKzQxNiw3IEBAIGdpc3RfaW5kZXhzb3J0YnVpbGQoR0lT VEJ1aWxkU3RhdGUgKnN0YXRlKQogCSAqIHJlcGxhY2VkIHdpdGggdGhlIHJlYWwgcm9vdCBwYWdl IGF0IHRoZSBlbmQuCiAJICovCiAJcGFnZSA9IHBhbGxvYzAoQkxDS1NaKTsKLQlzbWdyZXh0ZW5k KFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwpLCBNQUlOX0ZPUktOVU0sIEdJU1RfUk9P VF9CTEtOTywKKwlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwsIE1B SU5fRk9SS05VTSksIEdJU1RfUk9PVF9CTEtOTywKIAkJCSAgIHBhZ2UsIHRydWUpOwogCXN0YXRl LT5wYWdlc19hbGxvY2F0ZWQrKzsKIAlzdGF0ZS0+cGFnZXNfd3JpdHRlbisrOwpAQCAtNDYwLDcg KzQ2MCw3IEBAIGdpc3RfaW5kZXhzb3J0YnVpbGQoR0lTVEJ1aWxkU3RhdGUgKnN0YXRlKQogCS8q IFdyaXRlIG91dCB0aGUgcm9vdCAqLwogCVBhZ2VTZXRMU04obGV2ZWxzdGF0ZS0+cGFnZXNbMF0s IEdpc3RCdWlsZExTTik7CiAJUGFnZVNldENoZWNrc3VtSW5wbGFjZShsZXZlbHN0YXRlLT5wYWdl c1swXSwgR0lTVF9ST09UX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHN0YXRl LT5pbmRleHJlbCksIE1BSU5fRk9SS05VTSwgR0lTVF9ST09UX0JMS05PLAorCXNtZ3J3cml0ZShS ZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsLCBNQUlOX0ZPUktOVU0pLCBHSVNUX1JPT1Rf QkxLTk8sCiAJCQkgIGxldmVsc3RhdGUtPnBhZ2VzWzBdLCB0cnVlKTsKIAlpZiAoUmVsYXRpb25O ZWVkc1dBTChzdGF0ZS0+aW5kZXhyZWwpKQogCQlsb2dfbmV3cGFnZSgmc3RhdGUtPmluZGV4cmVs LT5yZF9sb2NhdG9yLCBNQUlOX0ZPUktOVU0sIEdJU1RfUk9PVF9CTEtOTywKQEAgLTQ3OSw3ICs0 NzksNyBAQCBnaXN0X2luZGV4c29ydGJ1aWxkKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSkKIAkgKiBz dGlsbCBub3QgYmUgb24gZGlzayB3aGVuIHRoZSBjcmFzaCBvY2N1cnMuCiAJICovCiAJaWYgKFJl bGF0aW9uTmVlZHNXQUwoc3RhdGUtPmluZGV4cmVsKSkKLQkJc21ncmltbWVkc3luYyhSZWxhdGlv bkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsKSwgTUFJTl9GT1JLTlVNKTsKKwkJc21ncmltbWVkc3lu YyhSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsLCBNQUlOX0ZPUktOVU0pKTsKIH0KIAog LyoKQEAgLTY1Nyw3ICs2NTcsNyBAQCBnaXN0X2luZGV4c29ydGJ1aWxkX2ZsdXNoX3JlYWR5X3Bh Z2VzKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSkKIAogCQlQYWdlU2V0TFNOKHBhZ2UsIEdpc3RCdWls ZExTTik7CiAJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgYmxrbm8pOwotCQlzbWdyZXh0 ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwpLCBNQUlOX0ZPUktOVU0sIGJsa25v LCBwYWdlLAorCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwsIE1B SU5fRk9SS05VTSksIGJsa25vLCBwYWdlLAogCQkJCSAgIHRydWUpOwogCiAJCXN0YXRlLT5wYWdl c193cml0dGVuKys7CkBAIC05NDMsOCArOTQzLDcgQEAgZ2lzdEJ1aWxkQ2FsbGJhY2soUmVsYXRp b24gaW5kZXgsCiAJICovCiAJaWYgKChidWlsZHN0YXRlLT5idWlsZE1vZGUgPT0gR0lTVF9CVUZG RVJJTkdfQVVUTyAmJgogCQkgYnVpbGRzdGF0ZS0+aW5kdHVwbGVzICUgQlVGRkVSSU5HX01PREVf U1dJVENIX0NIRUNLX1NURVAgPT0gMCAmJgotCQkgZWZmZWN0aXZlX2NhY2hlX3NpemUgPCBzbWdy bmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLAotCQkJCQkJCQkJCQlNQUlOX0ZPUktOVU0p KSB8fAorCQkgZWZmZWN0aXZlX2NhY2hlX3NpemUgPCBzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNt Z3IoaW5kZXgsIE1BSU5fRk9SS05VTSkpKSB8fAogCQkoYnVpbGRzdGF0ZS0+YnVpbGRNb2RlID09 IEdJU1RfQlVGRkVSSU5HX1NUQVRTICYmCiAJCSBidWlsZHN0YXRlLT5pbmR0dXBsZXMgPj0gQlVG RkVSSU5HX01PREVfVFVQTEVfU0laRV9TVEFUU19UQVJHRVQpKQogCXsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNocGFnZS5jCmluZGV4IDJkOGZkZWM5OGVkLi4xNjZiZjgxZTAyOCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNocGFnZS5jCkBAIC0xMDMwLDcgKzEwMzAsNyBAQCBfaGFzaF9hbGxvY19idWNr ZXRzKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgZmlyc3RibG9jaywgdWludDMyIG5ibG9ja3Mp CiAJCQkJCXRydWUpOwogCiAJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBsYXN0YmxvY2sp OwotCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHJlbCksIE1BSU5fRk9SS05VTSwgbGFzdGJs b2NrLCB6ZXJvYnVmLmRhdGEsCisJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3IocmVsLCBNQUlO X0ZPUktOVU0pLCBsYXN0YmxvY2ssIHplcm9idWYuZGF0YSwKIAkJCSAgIGZhbHNlKTsKIAogCXJl dHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXgg YzRiMTkxNmQzNmUuLjhhZjIyNTUwMmNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9oYW5kbGVyLmMKQEAgLTU3Miw3ICs1NzIsNyBAQCBoZWFwYW1fcmVsYXRpb25fc2V0X25ld19m aWxlbG9jYXRvcihSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQlUcmFuc2FjdGlvbklkICpmcmVlemVY aWQsCiAJCQkJCQkJCQlNdWx0aVhhY3RJZCAqbWlubXVsdGkpCiB7Ci0JU01nclJlbGF0aW9uIHNy ZWw7CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdG8gdGhl IG1pbmltdW0gWElEIHRoYXQgY291bGQgcHV0IHR1cGxlcyBpbiB0aGUgdGFibGUuIFdlCkBAIC01 OTEsNyArNTkxLDcgQEAgaGVhcGFtX3JlbGF0aW9uX3NldF9uZXdfZmlsZWxvY2F0b3IoUmVsYXRp b24gcmVsLAogCSAqLwogCSptaW5tdWx0aSA9IEdldE9sZGVzdE11bHRpWGFjdElkKCk7CiAKLQlz cmVsID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKCpuZXdybG9jYXRvciwgcGVyc2lzdGVuY2UsIHRy dWUpOworCXNmaWxlID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKCpuZXdybG9jYXRvciwgcGVyc2lz dGVuY2UsIHRydWUpOwogCiAJLyoKIAkgKiBJZiByZXF1aXJlZCwgc2V0IHVwIGFuIGluaXQgZm9y ayBmb3IgYW4gdW5sb2dnZWQgdGFibGUgc28gdGhhdCBpdCBjYW4KQEAgLTYwNCwxNSArNjA0LDE4 IEBAIGhlYXBhbV9yZWxhdGlvbl9zZXRfbmV3X2ZpbGVsb2NhdG9yKFJlbGF0aW9uIHJlbCwKIAkg Ki8KIAlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQpCiAJeworCQlT TWdyRmlsZUhhbmRsZSBzZmlsZV9pbml0OworCiAJCUFzc2VydChyZWwtPnJkX3JlbC0+cmVsa2lu ZCA9PSBSRUxLSU5EX1JFTEFUSU9OIHx8CiAJCQkgICByZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBS RUxLSU5EX01BVFZJRVcgfHwKIAkJCSAgIHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRf VE9BU1RWQUxVRSk7Ci0JCXNtZ3JjcmVhdGUoc3JlbCwgSU5JVF9GT1JLTlVNLCBmYWxzZSk7CisJ CXNmaWxlX2luaXQgPSBzbWdyb3BlbigqbmV3cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIElO SVRfRk9SS05VTSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGVfaW5pdCwgZmFsc2UpOwogCQlsb2dfc21n cmNyZWF0ZShuZXdybG9jYXRvciwgSU5JVF9GT1JLTlVNKTsKLQkJc21ncmltbWVkc3luYyhzcmVs LCBJTklUX0ZPUktOVU0pOworCQlzbWdyaW1tZWRzeW5jKHNmaWxlKTsKIAl9CiAKLQlzbWdyY2xv c2Uoc3JlbCk7CisJc21ncmNsb3NlKHNmaWxlKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTYyNCw5 ICs2MjcsNyBAQCBoZWFwYW1fcmVsYXRpb25fbm9udHJhbnNhY3Rpb25hbF90cnVuY2F0ZShSZWxh dGlvbiByZWwpCiBzdGF0aWMgdm9pZAogaGVhcGFtX3JlbGF0aW9uX2NvcHlfZGF0YShSZWxhdGlv biByZWwsIGNvbnN0IFJlbEZpbGVMb2NhdG9yICpuZXdybG9jYXRvcikKIHsKLQlTTWdyUmVsYXRp b24gZHN0cmVsOwotCi0JZHN0cmVsID0gc21ncm9wZW4oKm5ld3Jsb2NhdG9yLCByZWwtPnJkX2Jh Y2tlbmQpOworCVNNZ3JGaWxlSGFuZGxlIGRzdG1haW47CiAKIAkvKgogCSAqIFNpbmNlIHdlIGNv cHkgdGhlIGZpbGUgZGlyZWN0bHkgd2l0aG91dCBsb29raW5nIGF0IHRoZSBzaGFyZWQgYnVmZmVy cywKQEAgLTY0NiwxNiArNjQ3LDIxIEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2RhdGEoUmVsYXRp b24gcmVsLCBjb25zdCBSZWxGaWxlTG9jYXRvciAqbmV3cmxvY2F0b3IpCiAJUmVsYXRpb25DcmVh dGVTdG9yYWdlKCpuZXdybG9jYXRvciwgcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlLCB0cnVl KTsKIAogCS8qIGNvcHkgbWFpbiBmb3JrICovCi0JUmVsYXRpb25Db3B5U3RvcmFnZShSZWxhdGlv bkdldFNtZ3IocmVsKSwgZHN0cmVsLCBNQUlOX0ZPUktOVU0sCisJZHN0bWFpbiA9IHNtZ3JvcGVu KCpuZXdybG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kLCBNQUlOX0ZPUktOVU0pOworCVJlbGF0aW9u Q29weVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCwgTUFJTl9GT1JLTlVNKSwgZHN0bWFpbiwK IAkJCQkJCXJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSk7CiAKIAkvKiBjb3B5IHRob3NlIGV4 dHJhIGZvcmtzIHRoYXQgZXhpc3QgKi8KIAlmb3IgKEZvcmtOdW1iZXIgZm9ya051bSA9IE1BSU5f Rk9SS05VTSArIDE7CiAJCSBmb3JrTnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrTnVtKyspCiAJewot CQlpZiAoc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9ya051bSkpCisJCVNNZ3JG aWxlSGFuZGxlIHNyY19mb3JrID0gUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051bSk7CisKKwkJ aWYgKHNtZ3JleGlzdHMoc3JjX2ZvcmspKQogCQl7Ci0JCQlzbWdyY3JlYXRlKGRzdHJlbCwgZm9y a051bSwgZmFsc2UpOworCQkJU01nckZpbGVIYW5kbGUgZHN0X2ZvcmsgPSBzbWdyb3BlbigqbmV3 cmxvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya051bSk7CisKKwkJCXNtZ3JjcmVhdGUoZHN0 X2ZvcmssIGZhbHNlKTsKIAogCQkJLyoKIAkJCSAqIFdBTCBsb2cgY3JlYXRpb24gaWYgdGhlIHJl bGF0aW9uIGlzIHBlcnNpc3RlbnQsIG9yIHRoaXMgaXMgdGhlCkBAIC02NjUsNyArNjcxLDcgQEAg aGVhcGFtX3JlbGF0aW9uX2NvcHlfZGF0YShSZWxhdGlvbiByZWwsIGNvbnN0IFJlbEZpbGVMb2Nh dG9yICpuZXdybG9jYXRvcikKIAkJCQkocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJF TFBFUlNJU1RFTkNFX1VOTE9HR0VEICYmCiAJCQkJIGZvcmtOdW0gPT0gSU5JVF9GT1JLTlVNKSkK IAkJCQlsb2dfc21ncmNyZWF0ZShuZXdybG9jYXRvciwgZm9ya051bSk7Ci0JCQlSZWxhdGlvbkNv cHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwpLCBkc3RyZWwsIGZvcmtOdW0sCisJCQlSZWxh dGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwsIGZvcmtOdW0pLCBkc3RfZm9yaywK IAkJCQkJCQkJcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKTsKIAkJfQogCX0KQEAgLTY3Myw3 ICs2NzksNyBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgY29uc3Qg UmVsRmlsZUxvY2F0b3IgKm5ld3Jsb2NhdG9yKQogCiAJLyogZHJvcCBvbGQgcmVsYXRpb24sIGFu ZCBjbG9zZSBuZXcgb25lICovCiAJUmVsYXRpb25Ecm9wU3RvcmFnZShyZWwpOwotCXNtZ3JjbG9z ZShkc3RyZWwpOworCXNtZ3JjbG9zZShkc3RtYWluKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Jld3JpdGVoZWFwLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCmluZGV4IDg5OTNjMWVkNWE5Li5kOTkxZTc3NjVm MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3cml0ZWhlYXAuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCkBAIC0zMjUsNyArMzI1LDcg QEAgZW5kX2hlYXBfcmV3cml0ZShSZXdyaXRlU3RhdGUgc3RhdGUpCiAKIAkJUGFnZVNldENoZWNr c3VtSW5wbGFjZShzdGF0ZS0+cnNfYnVmZmVyLCBzdGF0ZS0+cnNfYmxvY2tubyk7CiAKLQkJc21n cmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25ld19yZWwpLCBNQUlOX0ZPUktOVU0s CisJCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5yc19uZXdfcmVsLCBNQUlOX0ZP UktOVU0pLAogCQkJCSAgIHN0YXRlLT5yc19ibG9ja25vLCAoY2hhciAqKSBzdGF0ZS0+cnNfYnVm ZmVyLCB0cnVlKTsKIAl9CiAKQEAgLTMzNyw3ICszMzcsNyBAQCBlbmRfaGVhcF9yZXdyaXRlKFJl d3JpdGVTdGF0ZSBzdGF0ZSkKIAkgKiB3cm90ZSBiZWZvcmUgdGhlIGNoZWNrcG9pbnQuCiAJICov CiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwoc3RhdGUtPnJzX25ld19yZWwpKQotCQlzbWdyaW1tZWRz eW5jKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+cnNfbmV3X3JlbCksIE1BSU5fRk9SS05VTSk7CisJ CXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5yc19uZXdfcmVsLCBNQUlOX0ZP UktOVU0pKTsKIAogCWxvZ2ljYWxfZW5kX2hlYXBfcmV3cml0ZShzdGF0ZSk7CiAKQEAgLTY5MSw3 ICs2OTEsNyBAQCByYXdfaGVhcF9pbnNlcnQoUmV3cml0ZVN0YXRlIHN0YXRlLCBIZWFwVHVwbGUg dHVwKQogCQkJICovCiAJCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIHN0YXRlLT5yc19i bG9ja25vKTsKIAotCQkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25ld19y ZWwpLCBNQUlOX0ZPUktOVU0sCisJCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+ cnNfbmV3X3JlbCwgTUFJTl9GT1JLTlVNKSwKIAkJCQkJICAgc3RhdGUtPnJzX2Jsb2Nrbm8sIChj aGFyICopIHBhZ2UsIHRydWUpOwogCiAJCQlzdGF0ZS0+cnNfYmxvY2tubysrOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCmluZGV4IDFkMWNhNDIzYTk4Li5iMDNhMGRjNWQ0 MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwpAQCAtNDY1LDcgKzQ2 NSw3IEBAIHZpc2liaWxpdHltYXBfcHJlcGFyZV90cnVuY2F0ZShSZWxhdGlvbiByZWwsIEJsb2Nr TnVtYmVyIG5oZWFwYmxvY2tzKQogCSAqIElmIG5vIHZpc2liaWxpdHkgbWFwIGhhcyBiZWVuIGNy ZWF0ZWQgeWV0IGZvciB0aGlzIHJlbGF0aW9uLCB0aGVyZSdzCiAJICogbm90aGluZyB0byB0cnVu Y2F0ZS4KIAkgKi8KLQlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIFZJU0lC SUxJVFlNQVBfRk9SS05VTSkpCisJaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWws IFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpKQogCQlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwog CiAJLyoKQEAgLTUzMiw3ICs1MzIsNyBAQCB2aXNpYmlsaXR5bWFwX3ByZXBhcmVfdHJ1bmNhdGUo UmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBuaGVhcGJsb2NrcykKIAllbHNlCiAJCW5ld25ibG9j a3MgPSB0cnVuY0Jsb2NrOwogCi0JaWYgKHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihyZWwp LCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pIDw9IG5ld25ibG9ja3MpCisJaWYgKHNtZ3JuYmxvY2tz KFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpIDw9IG5ld25ibG9j a3MpCiAJewogCQkvKiBub3RoaW5nIHRvIGRvLCB0aGUgZmlsZSB3YXMgYWxyZWFkeSBzbWFsbGVy IHRoYW4gcmVxdWVzdGVkIHNpemUgKi8KIAkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKQEAg LTU1MSwyOSArNTUxLDI5IEBAIHN0YXRpYyBCdWZmZXIKIHZtX3JlYWRidWYoUmVsYXRpb24gcmVs LCBCbG9ja051bWJlciBibGtubywgYm9vbCBleHRlbmQpCiB7CiAJQnVmZmVyCQlidWY7Ci0JU01n clJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgdm1fc2ZpbGU7CiAKIAkvKgogCSAqIENh dXRpb246IHJlLXVzaW5nIHRoaXMgc21nciBwb2ludGVyIGNvdWxkIGZhaWwgaWYgdGhlIHJlbGNh Y2hlIGVudHJ5CiAJICogZ2V0cyBjbG9zZWQuICBJdCdzIHNhZmUgYXMgbG9uZyBhcyB3ZSBvbmx5 IGRvIHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJldHdlZW4gaGVyZSBhbmQgdGhlIGxhc3Qg dXNlIG9mIHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsK Kwl2bV9zZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSk7 CiAKIAkvKgogCSAqIElmIHdlIGhhdmVuJ3QgY2FjaGVkIHRoZSBzaXplIG9mIHRoZSB2aXNpYmls aXR5IG1hcCBmb3JrIHlldCwgY2hlY2sgaXQKIAkgKiBmaXJzdC4KIAkgKi8KLQlpZiAocmVsbi0+ c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID09IEludmFsaWRCbG9j a051bWJlcikKKwlpZiAodm1fc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPT0gSW52YWxpZEJs b2NrTnVtYmVyKQogCXsKLQkJaWYgKHNtZ3JleGlzdHMocmVsbiwgVklTSUJJTElUWU1BUF9GT1JL TlVNKSkKLQkJCXNtZ3JuYmxvY2tzKHJlbG4sIFZJU0lCSUxJVFlNQVBfRk9SS05VTSk7CisJCWlm IChzbWdyZXhpc3RzKHZtX3NmaWxlKSkKKwkJCXNtZ3JuYmxvY2tzKHZtX3NmaWxlKTsKIAkJZWxz ZQotCQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID0g MDsKKwkJCXZtX3NmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gMDsKIAl9CiAKIAkvKiBIYW5k bGUgcmVxdWVzdHMgYmV5b25kIEVPRiAqLwotCWlmIChibGtubyA+PSByZWxuLT5zbWdyX2NhY2hl ZF9uYmxvY2tzW1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0pCisJaWYgKGJsa25vID49IHZtX3NmaWxl LT5zbWdyX2NhY2hlZF9uYmxvY2tzKQogCXsKIAkJaWYgKGV4dGVuZCkKIAkJCXZtX2V4dGVuZChy ZWwsIGJsa25vICsgMSk7CkBAIC02MDAsOCArNjAwLDcgQEAgdm1fcmVhZGJ1ZihSZWxhdGlvbiBy ZWwsIEJsb2NrTnVtYmVyIGJsa25vLCBib29sIGV4dGVuZCkKIAkgKiBsb25nIGFzIGl0IGRvZXNu J3QgZGVwZW5kIG9uIHRoZSBwYWdlIGhlYWRlciBoYXZpbmcgY29ycmVjdCBjb250ZW50cy4KIAkg KiBDdXJyZW50IHVzYWdlIGlzIHNhZmUgYmVjYXVzZSBQYWdlR2V0Q29udGVudHMoKSBkb2VzIG5v dCByZXF1aXJlIHRoYXQuCiAJICovCi0JYnVmID0gUmVhZEJ1ZmZlckV4dGVuZGVkKHJlbCwgVklT SUJJTElUWU1BUF9GT1JLTlVNLCBibGtubywKLQkJCQkJCQkgUkJNX1pFUk9fT05fRVJST1IsIE5V TEwpOworCWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05V TSwgYmxrbm8sIFJCTV9aRVJPX09OX0VSUk9SLCBOVUxMKTsKIAlpZiAoUGFnZUlzTmV3KEJ1ZmZl ckdldFBhZ2UoYnVmKSkpCiAJewogCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfRVhDTFVT SVZFKTsKQEAgLTYyMSw3ICs2MjAsNyBAQCB2bV9leHRlbmQoUmVsYXRpb24gcmVsLCBCbG9ja051 bWJlciB2bV9uYmxvY2tzKQogewogCUJsb2NrTnVtYmVyIHZtX25ibG9ja3Nfbm93OwogCVBHQWxp Z25lZEJsb2NrIHBnOwotCVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlSGFuZGxlIHZtX3Nm aWxlOwogCiAJUGFnZUluaXQoKFBhZ2UpIHBnLmRhdGEsIEJMQ0tTWiwgMCk7CiAKQEAgLTY0Miwy NyArNjQxLDI3IEBAIHZtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIHZtX25ibG9j a3MpCiAJICogZ2V0cyBjbG9zZWQuICBJdCdzIHNhZmUgYXMgbG9uZyBhcyB3ZSBvbmx5IGRvIHNt Z3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJldHdlZW4gaGVyZSBhbmQgdGhlIGxhc3QgdXNlIG9m IHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKKwl2bV9z ZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSk7CiAKIAkv KgogCSAqIENyZWF0ZSB0aGUgZmlsZSBmaXJzdCBpZiBpdCBkb2Vzbid0IGV4aXN0LiAgSWYgc21n cl92bV9uYmxvY2tzIGlzCiAJICogcG9zaXRpdmUgdGhlbiBpdCBtdXN0IGV4aXN0LCBubyBuZWVk IGZvciBhbiBzbWdyZXhpc3RzIGNhbGwuCiAJICovCi0JaWYgKChyZWxuLT5zbWdyX2NhY2hlZF9u YmxvY2tzW1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0gPT0gMCB8fAotCQkgcmVsbi0+c21ncl9jYWNo ZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID09IEludmFsaWRCbG9ja051bWJlcikg JiYKLQkJIXNtZ3JleGlzdHMocmVsbiwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSkKLQkJc21ncmNy ZWF0ZShyZWxuLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0sIGZhbHNlKTsKKwlpZiAoKHZtX3NmaWxl LT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IDAgfHwKKwkJIHZtX3NmaWxlLT5zbWdyX2NhY2hlZF9u YmxvY2tzID09IEludmFsaWRCbG9ja051bWJlcikgJiYKKwkJIXNtZ3JleGlzdHModm1fc2ZpbGUp KQorCQlzbWdyY3JlYXRlKHZtX3NmaWxlLCBmYWxzZSk7CiAKIAkvKiBJbnZhbGlkYXRlIGNhY2hl IHNvIHRoYXQgc21ncm5ibG9ja3MoKSBhc2tzIHRoZSBrZXJuZWwuICovCi0JcmVsbi0+c21ncl9j YWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID0gSW52YWxpZEJsb2NrTnVtYmVy OwotCXZtX25ibG9ja3Nfbm93ID0gc21ncm5ibG9ja3MocmVsbiwgVklTSUJJTElUWU1BUF9GT1JL TlVNKTsKKwl2bV9zZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJl cjsKKwl2bV9uYmxvY2tzX25vdyA9IHNtZ3JuYmxvY2tzKHZtX3NmaWxlKTsKIAogCS8qIE5vdyBl eHRlbmQgdGhlIGZpbGUgKi8KIAl3aGlsZSAodm1fbmJsb2Nrc19ub3cgPCB2bV9uYmxvY2tzKQog CXsKIAkJUGFnZVNldENoZWNrc3VtSW5wbGFjZSgoUGFnZSkgcGcuZGF0YSwgdm1fbmJsb2Nrc19u b3cpOwogCi0JCXNtZ3JleHRlbmQocmVsbiwgVklTSUJJTElUWU1BUF9GT1JLTlVNLCB2bV9uYmxv Y2tzX25vdywgcGcuZGF0YSwgZmFsc2UpOworCQlzbWdyZXh0ZW5kKHZtX3NmaWxlLCB2bV9uYmxv Y2tzX25vdywgcGcuZGF0YSwgZmFsc2UpOwogCQl2bV9uYmxvY2tzX25vdysrOwogCX0KIApAQCAt NjczLDcgKzY3Miw3IEBAIHZtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIHZtX25i bG9ja3MpCiAJICogdG8ga2VlcCBjaGVja2luZyBmb3IgY3JlYXRpb24gb3IgZXh0ZW5zaW9uIG9m IHRoZSBmaWxlLCB3aGljaCBoYXBwZW5zCiAJICogaW5mcmVxdWVudGx5LgogCSAqLwotCUNhY2hl SW52YWxpZGF0ZVNtZ3IocmVsbi0+c21ncl9ybG9jYXRvcik7CisJQ2FjaGVJbnZhbGlkYXRlU21n cihyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCk7CiAKIAlVbmxvY2tSZWxhdGlvbkZv ckV4dGVuc2lvbihyZWwsIEV4Y2x1c2l2ZUxvY2spOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVlLmMKaW5kZXggMWNjODhkYTAzMmQuLjdkOTk2OGQyNDFhIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cmVlLmMKQEAgLTE2NCw5ICsxNjQsOSBAQCBidGJ1aWxkZW1wdHkoUmVsYXRpb24gaW5k ZXgpCiAJICogdGhpcyBldmVuIHdoZW4gd2FsX2xldmVsPW1pbmltYWwuCiAJICovCiAJUGFnZVNl dENoZWNrc3VtSW5wbGFjZShtZXRhcGFnZSwgQlRSRUVfTUVUQVBBR0UpOwotCXNtZ3J3cml0ZShS ZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0sIEJUUkVFX01FVEFQQUdFLAorCXNt Z3J3cml0ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgsIElOSVRfRk9SS05VTSksIEJUUkVFX01FVEFQ QUdFLAogCQkJICAoY2hhciAqKSBtZXRhcGFnZSwgdHJ1ZSk7Ci0JbG9nX25ld3BhZ2UoJlJlbGF0 aW9uR2V0U21ncihpbmRleCktPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVNLAor CWxvZ19uZXdwYWdlKCZpbmRleC0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNLAogCQkJCUJUUkVF X01FVEFQQUdFLCBtZXRhcGFnZSwgdHJ1ZSk7CiAKIAkvKgpAQCAtMTc0LDcgKzE3NCw3IEBAIGJ0 YnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkgKiB3cml0ZSBkaWQgbm90IGdvIHRocm91Z2gg c2hhcmVkX2J1ZmZlcnMgYW5kIHRoZXJlZm9yZSBhIGNvbmN1cnJlbnQKIAkgKiBjaGVja3BvaW50 IG1heSBoYXZlIG1vdmVkIHRoZSByZWRvIHBvaW50ZXIgcGFzdCBvdXIgeGxvZyByZWNvcmQuCiAJ ICovCi0Jc21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0p OworCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKGluZGV4LCBJTklUX0ZPUktOVU0pKTsK IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKaW5kZXggNjdiN2IxNzEwYzYu LjIxNmMyNmNhZDE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNv cnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYwpAQCAtNjYyLDcg KzY2Miw3IEBAIF9idF9ibHdyaXRlcGFnZShCVFdyaXRlU3RhdGUgKndzdGF0ZSwgUGFnZSBwYWdl LCBCbG9ja051bWJlciBibGtubykKIAkJaWYgKCF3c3RhdGUtPmJ0d3NfemVyb3BhZ2UpCiAJCQl3 c3RhdGUtPmJ0d3NfemVyb3BhZ2UgPSAoUGFnZSkgcGFsbG9jMChCTENLU1opOwogCQkvKiBkb24n dCBzZXQgY2hlY2tzdW0gZm9yIGFsbC16ZXJvIHBhZ2UgKi8KLQkJc21ncmV4dGVuZChSZWxhdGlv bkdldFNtZ3Iod3N0YXRlLT5pbmRleCksIE1BSU5fRk9SS05VTSwKKwkJc21ncmV4dGVuZChSZWxh dGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCwgTUFJTl9GT1JLTlVNKSwKIAkJCQkgICB3c3RhdGUt PmJ0d3NfcGFnZXNfd3JpdHRlbisrLAogCQkJCSAgIChjaGFyICopIHdzdGF0ZS0+YnR3c196ZXJv cGFnZSwKIAkJCQkgICB0cnVlKTsKQEAgLTY3NywxNCArNjc3LDE0IEBAIF9idF9ibHdyaXRlcGFn ZShCVFdyaXRlU3RhdGUgKndzdGF0ZSwgUGFnZSBwYWdlLCBCbG9ja051bWJlciBibGtubykKIAlp ZiAoYmxrbm8gPT0gd3N0YXRlLT5idHdzX3BhZ2VzX3dyaXR0ZW4pCiAJewogCQkvKiBleHRlbmRp bmcgdGhlIGZpbGUuLi4gKi8KLQkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5p bmRleCksIE1BSU5fRk9SS05VTSwgYmxrbm8sCisJCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdy KHdzdGF0ZS0+aW5kZXgsIE1BSU5fRk9SS05VTSksIGJsa25vLAogCQkJCSAgIChjaGFyICopIHBh Z2UsIHRydWUpOwogCQl3c3RhdGUtPmJ0d3NfcGFnZXNfd3JpdHRlbisrOwogCX0KIAllbHNlCiAJ ewogCQkvKiBvdmVyd3JpdGluZyBhIGJsb2NrIHdlIHplcm8tZmlsbGVkIGJlZm9yZSAqLwotCQlz bWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgpLCBNQUlOX0ZPUktOVU0sIGJs a25vLAorCQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgsIE1BSU5fRk9S S05VTSksIGJsa25vLAogCQkJCSAgKGNoYXIgKikgcGFnZSwgdHJ1ZSk7CiAJfQogCkBAIC0xNDMx LDcgKzE0MzEsNyBAQCBfYnRfbG9hZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRTcG9vbCAqYnRz cG9vbCwgQlRTcG9vbCAqYnRzcG9vbDIpCiAJICogc3RpbGwgbm90IGJlIG9uIGRpc2sgd2hlbiB0 aGUgY3Jhc2ggb2NjdXJzLgogCSAqLwogCWlmICh3c3RhdGUtPmJ0d3NfdXNlX3dhbCkKLQkJc21n cmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCksIE1BSU5fRk9SS05VTSk7 CisJCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgsIE1BSU5fRk9S S05VTSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9z cGdpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0LmMKaW5kZXgg NGVkMDY3ZjBkOTMuLjdmZjI2ZGU5NzkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv c3BnaXN0L3NwZ2luc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnaW5z ZXJ0LmMKQEAgLTE1NSw4ICsxNTUsMTEgQEAgc3BnYnVpbGQoUmVsYXRpb24gaGVhcCwgUmVsYXRp b24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZvKQogdm9pZAogc3BnYnVpbGRlbXB0eShSZWxh dGlvbiBpbmRleCkKIHsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAlQYWdlCQlwYWdlOwogCisJ c2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3IoaW5kZXgsIElOSVRfRk9SS05VTSk7CisKIAkvKiBDb25z dHJ1Y3QgbWV0YXBhZ2UuICovCiAJcGFnZSA9IChQYWdlKSBwYWxsb2MoQkxDS1NaKTsKIAlTcEdp c3RJbml0TWV0YXBhZ2UocGFnZSk7CkBAIC0xNjksMjcgKzE3MiwyNyBAQCBzcGdidWlsZGVtcHR5 KFJlbGF0aW9uIGluZGV4KQogCSAqIHJlcGxheWVkLgogCSAqLwogCVBhZ2VTZXRDaGVja3N1bUlu cGxhY2UocGFnZSwgU1BHSVNUX01FVEFQQUdFX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25H ZXRTbWdyKGluZGV4KSwgSU5JVF9GT1JLTlVNLCBTUEdJU1RfTUVUQVBBR0VfQkxLTk8sCisJc21n cndyaXRlKHNmaWxlLCBTUEdJU1RfTUVUQVBBR0VfQkxLTk8sCiAJCQkgIChjaGFyICopIHBhZ2Us IHRydWUpOwotCWxvZ19uZXdwYWdlKCYoUmVsYXRpb25HZXRTbWdyKGluZGV4KSktPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVNLAorCWxvZ19uZXdwYWdlKCZpbmRleC0+cmRfbG9j YXRvciwgSU5JVF9GT1JLTlVNLAogCQkJCVNQR0lTVF9NRVRBUEFHRV9CTEtOTywgcGFnZSwgdHJ1 ZSk7CiAKIAkvKiBMaWtld2lzZSBmb3IgdGhlIHJvb3QgcGFnZS4gKi8KIAlTcEdpc3RJbml0UGFn ZShwYWdlLCBTUEdJU1RfTEVBRik7CiAKIAlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIFNQ R0lTVF9ST09UX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwgSU5J VF9GT1JLTlVNLCBTUEdJU1RfUk9PVF9CTEtOTywKKwlzbWdyd3JpdGUoc2ZpbGUsIFNQR0lTVF9S T09UX0JMS05PLAogCQkJICAoY2hhciAqKSBwYWdlLCB0cnVlKTsKLQlsb2dfbmV3cGFnZSgmKFJl bGF0aW9uR2V0U21ncihpbmRleCkpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIElOSVRfRk9SS05V TSwKKwlsb2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05VTSwKIAkJCQlT UEdJU1RfUk9PVF9CTEtOTywgcGFnZSwgdHJ1ZSk7CiAKIAkvKiBMaWtld2lzZSBmb3IgdGhlIG51 bGwtdHVwbGVzIHJvb3QgcGFnZS4gKi8KIAlTcEdpc3RJbml0UGFnZShwYWdlLCBTUEdJU1RfTEVB RiB8IFNQR0lTVF9OVUxMUyk7CiAKIAlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIFNQR0lT VF9OVUxMX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwgSU5JVF9G T1JLTlVNLCBTUEdJU1RfTlVMTF9CTEtOTywKKwlzbWdyd3JpdGUoc2ZpbGUsIFNQR0lTVF9OVUxM X0JMS05PLAogCQkJICAoY2hhciAqKSBwYWdlLCB0cnVlKTsKLQlsb2dfbmV3cGFnZSgmKFJlbGF0 aW9uR2V0U21ncihpbmRleCkpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIElOSVRfRk9SS05VTSwK Kwlsb2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05VTSwKIAkJCQlTUEdJ U1RfTlVMTF9CTEtOTywgcGFnZSwgdHJ1ZSk7CiAKIAkvKgpAQCAtMTk3LDcgKzIwMCw3IEBAIHNw Z2J1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiAJICogd3JpdGVzIGRpZCBub3QgZ28gdGhyb3Vn aCBzaGFyZWQgYnVmZmVycyBhbmQgdGhlcmVmb3JlIGEgY29uY3VycmVudAogCSAqIGNoZWNrcG9p bnQgbWF5IGhhdmUgbW92ZWQgdGhlIHJlZG8gcG9pbnRlciBwYXN0IG91ciB4bG9nIHJlY29yZC4K IAkgKi8KLQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncihpbmRleCksIElOSVRfRk9SS05V TSk7CisJc21ncmltbWVkc3luYyhzZmlsZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3Rh YmxlYW0uYwppbmRleCBlZjBkMzRmY2VlZS4uOWViZjE3NGIxODkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Rh YmxlL3RhYmxlYW0uYwpAQCAtNjMxLDEwICs2MzEsMTAgQEAgdGFibGVfYmxvY2tfcmVsYXRpb25f c2l6ZShSZWxhdGlvbiByZWwsIEZvcmtOdW1iZXIgZm9ya051bWJlcikKIAlpZiAoZm9ya051bWJl ciA9PSBJbnZhbGlkRm9ya051bWJlcikKIAl7CiAJCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0ZP UktOVU07IGkrKykKLQkJCW5ibG9ja3MgKz0gc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHJl bCksIGkpOworCQkJbmJsb2NrcyArPSBzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsLCBp KSk7CiAJfQogCWVsc2UKLQkJbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihy ZWwpLCBmb3JrTnVtYmVyKTsKKwkJbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21n cihyZWwsIGZvcmtOdW1iZXIpKTsKIAogCXJldHVybiBuYmxvY2tzICogQkxDS1NaOwogfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vY2xvZy5jCmluZGV4IDRhNDMxZDU4NzY3Li5jMDhmMDEwY2YxNSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisj aW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5h bHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N5bmMu aCIKIApAQCAtNTksNyArNjEsNyBAQAogLyogV2UgbmVlZCB0d28gYml0cyBwZXIgeGFjdCwgc28g Zm91ciB4YWN0cyBmaXQgaW4gYSBieXRlICovCiAjZGVmaW5lIENMT0dfQklUU19QRVJfWEFDVAky CiAjZGVmaW5lIENMT0dfWEFDVFNfUEVSX0JZVEUgNAotI2RlZmluZSBDTE9HX1hBQ1RTX1BFUl9Q QUdFIChCTENLU1ogKiBDTE9HX1hBQ1RTX1BFUl9CWVRFKQorI2RlZmluZSBDTE9HX1hBQ1RTX1BF Ul9QQUdFICgoQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpICogQ0xPR19YQUNUU19QRVJf QllURSkKICNkZWZpbmUgQ0xPR19YQUNUX0JJVE1BU0sJKCgxIDw8IENMT0dfQklUU19QRVJfWEFD VCkgLSAxKQogCiAjZGVmaW5lIFRyYW5zYWN0aW9uSWRUb1BhZ2UoeGlkKQkoKHhpZCkgLyAoVHJh bnNhY3Rpb25JZCkgQ0xPR19YQUNUU19QRVJfUEFHRSkKQEAgLTgxLDE3ICs4MywxMCBAQAogICov CiAjZGVmaW5lIFRIUkVTSE9MRF9TVUJUUkFOU19DTE9HX09QVAk1CiAKLS8qCi0gKiBMaW5rIHRv IHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBDTE9HIGNvbnRyb2wKLSAqLwotc3Rh dGljIFNscnVDdGxEYXRhIFhhY3RDdGxEYXRhOwotCi0jZGVmaW5lIFhhY3RDdGwgKCZYYWN0Q3Rs RGF0YSkKIAotCi1zdGF0aWMgaW50CVplcm9DTE9HUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRl WGxvZyk7CitzdGF0aWMgQnVmZmVyIFplcm9DTE9HUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRl WGxvZyk7CiBzdGF0aWMgYm9vbCBDTE9HUGFnZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2Uy KTsKLXN0YXRpYyB2b2lkIFdyaXRlWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8pOworc3RhdGlj IFhMb2dSZWNQdHIgV3JpdGVaZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2Vubyk7CiBzdGF0aWMgdm9p ZCBXcml0ZVRydW5jYXRlWGxvZ1JlYyhpbnQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIG9sZGVzdFhh Y3QsCiAJCQkJCQkJCSBPaWQgb2xkZXN0WGFjdERiKTsKIHN0YXRpYyB2b2lkIFRyYW5zYWN0aW9u SWRTZXRQYWdlU3RhdHVzKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCkBAIC05OSw3 ICs5NCw3IEBAIHN0YXRpYyB2b2lkIFRyYW5zYWN0aW9uSWRTZXRQYWdlU3RhdHVzKFRyYW5zYWN0 aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCQkJCQkJCQkgICBYTG9nUmVjUHRyIGxzbiwgaW50 IHBhZ2VubywKIAkJCQkJCQkJCSAgIGJvb2wgYWxsX3hhY3Rfc2FtZV9wYWdlKTsKIHN0YXRpYyB2 b2lkIFRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1 cyBzdGF0dXMsCi0JCQkJCQkJCQkgIFhMb2dSZWNQdHIgbHNuLCBpbnQgc2xvdG5vKTsKKwkJCQkJ CQkJCSAgWExvZ1JlY1B0ciBsc24sIEJ1ZmZlciBidWZmZXIpOwogc3RhdGljIHZvaWQgc2V0X3N0 YXR1c19ieV9wYWdlcyhpbnQgbnN1YnhpZHMsIFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMsCiAJCQkJ CQkJCVhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuKTsKIHN0YXRpYyBib29sIFRyYW5z YWN0aW9uR3JvdXBVcGRhdGVYaWRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsCkBAIC0zMzksMTMg KzMzNCwxMiBAQCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0YXR1c0ludGVybmFsKFRyYW5zYWN0aW9u SWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMs IFhpZFN0YXR1cyBzdGF0dXMsCiAJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbHNuLCBpbnQgcGFnZW5v KQogewotCWludAkJCXNsb3RubzsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAlpbnQJCQlpOwogCiAJQXNz ZXJ0KHN0YXR1cyA9PSBUUkFOU0FDVElPTl9TVEFUVVNfQ09NTUlUVEVEIHx8CiAJCSAgIHN0YXR1 cyA9PSBUUkFOU0FDVElPTl9TVEFUVVNfQUJPUlRFRCB8fAogCQkgICAoc3RhdHVzID09IFRSQU5T QUNUSU9OX1NUQVRVU19TVUJfQ09NTUlUVEVEICYmICFUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQp KSk7Ci0JQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKFhhY3RTTFJVTG9jaywgTFdfRVhDTFVT SVZFKSk7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGRvaW5nIGFuIGFzeW5jIGNvbW1pdCAoaWUsIGxz biBpcyB2YWxpZCksIHRoZW4gd2UgbXVzdCB3YWl0CkBAIC0zNTYsNyArMzUwLDggQEAgVHJhbnNh Y3Rpb25JZFNldFBhZ2VTdGF0dXNJbnRlcm5hbChUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4 aWRzLAogCSAqIHdyaXRlLWJ1c3ksIHNpbmNlIHdlIGRvbid0IGNhcmUgaWYgdGhlIHVwZGF0ZSBy ZWFjaGVzIGRpc2sgc29vbmVyIHRoYW4KIAkgKiB3ZSB0aGluay4KIAkgKi8KLQlzbG90bm8gPSBT aW1wbGVMcnVSZWFkUGFnZShYYWN0Q3RsLCBwYWdlbm8sIFhMb2dSZWNQdHJJc0ludmFsaWQobHNu KSwgeGlkKTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX0NMT0dfSUQsIHBhZ2Vubywg UkJNX05PUk1BTCk7CisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7 CiAKIAkvKgogCSAqIFNldCB0aGUgbWFpbiB0cmFuc2FjdGlvbiBpZCwgaWYgYW55LgpAQCAtMzc0 LDI1ICszNjksMjcgQEAgVHJhbnNhY3Rpb25JZFNldFBhZ2VTdGF0dXNJbnRlcm5hbChUcmFuc2Fj dGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQl7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbnN1Ynhp ZHM7IGkrKykKIAkJCXsKLQkJCQlBc3NlcnQoWGFjdEN0bC0+c2hhcmVkLT5wYWdlX251bWJlcltz bG90bm9dID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tpXSkpOworCQkJCUFzc2VydChw YWdlbm8gPT0gVHJhbnNhY3Rpb25JZFRvUGFnZShzdWJ4aWRzW2ldKSk7CiAJCQkJVHJhbnNhY3Rp b25JZFNldFN0YXR1c0JpdChzdWJ4aWRzW2ldLAogCQkJCQkJCQkJCSAgVFJBTlNBQ1RJT05fU1RB VFVTX1NVQl9DT01NSVRURUQsCi0JCQkJCQkJCQkJICBsc24sIHNsb3Rubyk7CisJCQkJCQkJCQkJ ICBsc24sIGJ1ZmZlcik7CiAJCQl9CiAJCX0KIAogCQkvKiAuLi4gdGhlbiB0aGUgbWFpbiB0cmFu c2FjdGlvbiAqLwotCQlUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KHhpZCwgc3RhdHVzLCBsc24s IHNsb3Rubyk7CisJCVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoeGlkLCBzdGF0dXMsIGxzbiwg YnVmZmVyKTsKIAl9CiAKIAkvKiBTZXQgdGhlIHN1YnRyYW5zYWN0aW9ucyAqLwogCWZvciAoaSA9 IDA7IGkgPCBuc3VieGlkczsgaSsrKQogCXsKLQkJQXNzZXJ0KFhhY3RDdGwtPnNoYXJlZC0+cGFn ZV9udW1iZXJbc2xvdG5vXSA9PSBUcmFuc2FjdGlvbklkVG9QYWdlKHN1YnhpZHNbaV0pKTsKLQkJ VHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChzdWJ4aWRzW2ldLCBzdGF0dXMsIGxzbiwgc2xvdG5v KTsKKwkJQXNzZXJ0KHBhZ2VubyA9PSBUcmFuc2FjdGlvbklkVG9QYWdlKHN1YnhpZHNbaV0pKTsK KwkJVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChzdWJ4aWRzW2ldLCBzdGF0dXMsIGxzbiwgYnVm ZmVyKTsKIAl9CiAKLQlYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7 CisJCisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZm ZXIpOwogfQogCiAvKgpAQCAtNTY2LDcgKzU2Myw3IEBAIFRyYW5zYWN0aW9uR3JvdXBVcGRhdGVY aWRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsCiAgKiBNdXN0IGJl IGNhbGxlZCB3aXRoIFhhY3RTTFJVTG9jayBoZWxkCiAgKi8KIHN0YXRpYyB2b2lkCi1UcmFuc2Fj dGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMgc3RhdHVzLCBY TG9nUmVjUHRyIGxzbiwgaW50IHNsb3RubykKK1RyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoVHJh bnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuLCBCdWZmZXIg YnVmZmVyKQogewogCWludAkJCWJ5dGVubyA9IFRyYW5zYWN0aW9uSWRUb0J5dGUoeGlkKTsKIAlp bnQJCQlic2hpZnQgPSBUcmFuc2FjdGlvbklkVG9CSW5kZXgoeGlkKSAqIENMT0dfQklUU19QRVJf WEFDVDsKQEAgLTU3NCw3ICs1NzEsMTAgQEAgVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFu c2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIGkKIAljaGFy CQlieXRldmFsOwogCWNoYXIJCWN1cnZhbDsKIAotCWJ5dGVwdHIgPSBYYWN0Q3RsLT5zaGFyZWQt PnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBieXRlbm87CisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5N b2RlKEJ1ZmZlckRlc2NyaXB0b3JHZXRDb250ZW50TG9jayhHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1 ZmZlciAtIDEpKSwKKwkJCQkJCQkJTFdfRVhDTFVTSVZFKSk7CisKKwlieXRlcHRyID0gUGFnZUdl dENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBieXRlbm87CiAJY3VydmFsID0gKCpi eXRlcHRyID4+IGJzaGlmdCkgJiBDTE9HX1hBQ1RfQklUTUFTSzsKIAogCS8qCkBAIC02MDIsOCAr NjAyLDkgQEAgVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlk U3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIGkKIAlieXRldmFsIHw9IChzdGF0dXMgPDwg YnNoaWZ0KTsKIAkqYnl0ZXB0ciA9IGJ5dGV2YWw7CiAKKwogCS8qCi0JICogVXBkYXRlIHRoZSBn cm91cCBMU04gaWYgdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gTFNOIGlzIGhpZ2hlci4KKwkg KiBVcGRhdGUgdGhlIGJ1ZmZlciBMU04gaWYgdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gTFNO IGlzIGhpZ2hlci4KIAkgKgogCSAqIE5vdGU6IGxzbiB3aWxsIGJlIGludmFsaWQgd2hlbiBzdXBw bGllZCBkdXJpbmcgSW5SZWNvdmVyeSBwcm9jZXNzaW5nLAogCSAqIHNvIHdlIGRvbid0IG5lZWQg dG8gZG8gYW55dGhpbmcgc3BlY2lhbCB0byBhdm9pZCBMU04gdXBkYXRlcyBkdXJpbmcKQEAgLTYx MiwxMCArNjEzLDggQEAgVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhp ZCwgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIGkKIAkgKi8KIAlpZiAoIVhMb2dS ZWNQdHJJc0ludmFsaWQobHNuKSkKIAl7Ci0JCWludAkJCWxzbmluZGV4ID0gR2V0TFNOSW5kZXgo c2xvdG5vLCB4aWQpOwotCi0JCWlmIChYYWN0Q3RsLT5zaGFyZWQtPmdyb3VwX2xzbltsc25pbmRl eF0gPCBsc24pCi0JCQlYYWN0Q3RsLT5zaGFyZWQtPmdyb3VwX2xzbltsc25pbmRleF0gPSBsc247 CisJCWlmIChQYWdlR2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgPCBsc24pCisJCQlQYWdl U2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSwgbHNuKTsKIAl9CiB9CiAKQEAgLTY0MCw2NyAr NjM5LDIxIEBAIFRyYW5zYWN0aW9uSWRHZXRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dS ZWNQdHIgKmxzbikKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7CiAJ aW50CQkJYnl0ZW5vID0gVHJhbnNhY3Rpb25JZFRvQnl0ZSh4aWQpOwogCWludAkJCWJzaGlmdCA9 IFRyYW5zYWN0aW9uSWRUb0JJbmRleCh4aWQpICogQ0xPR19CSVRTX1BFUl9YQUNUOwotCWludAkJ CXNsb3RubzsKLQlpbnQJCQlsc25pbmRleDsKIAljaGFyCSAgICpieXRlcHRyOwogCVhpZFN0YXR1 cwlzdGF0dXM7CisJQnVmZmVyCQlidWZmZXI7CiAKLQkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNp bXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5ICovCi0KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFn ZV9SZWFkT25seShYYWN0Q3RsLCBwYWdlbm8sIHhpZCk7Ci0JYnl0ZXB0ciA9IFhhY3RDdGwtPnNo YXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGJ5dGVubzsKKwlidWZmZXIgPSBSZWFkU2xydUJ1 ZmZlcihTTFJVX0NMT0dfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CisJYnl0ZXB0ciA9IFBhZ2VH ZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgYnl0ZW5vOwogCiAJc3RhdHVzID0g KCpieXRlcHRyID4+IGJzaGlmdCkgJiBDTE9HX1hBQ1RfQklUTUFTSzsKKwkqbHNuICAgPSBQYWdl R2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSk7CiAKLQlsc25pbmRleCA9IEdldExTTkluZGV4 KHNsb3RubywgeGlkKTsKLQkqbHNuID0gWGFjdEN0bC0+c2hhcmVkLT5ncm91cF9sc25bbHNuaW5k ZXhdOwotCi0JTFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOworCVJlbGVhc2VCdWZmZXIoYnVm ZmVyKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qCi0gKiBOdW1iZXIgb2Ygc2hhcmVkIENM T0cgYnVmZmVycy4KLSAqCi0gKiBPbiBsYXJnZXIgbXVsdGktcHJvY2Vzc29yIHN5c3RlbXMsIGl0 IGlzIHBvc3NpYmxlIHRvIGhhdmUgbWFueSBDTE9HIHBhZ2UKLSAqIHJlcXVlc3RzIGluIGZsaWdo dCBhdCBvbmUgdGltZSB3aGljaCBjb3VsZCBsZWFkIHRvIGRpc2sgYWNjZXNzIGZvciBDTE9HCi0g KiBwYWdlIGlmIHRoZSByZXF1aXJlZCBwYWdlIGlzIG5vdCBmb3VuZCBpbiBtZW1vcnkuICBUZXN0 aW5nIHJldmVhbGVkIHRoYXQgd2UKLSAqIGNhbiBnZXQgdGhlIGJlc3QgcGVyZm9ybWFuY2UgYnkg aGF2aW5nIDEyOCBDTE9HIGJ1ZmZlcnMsIG1vcmUgdGhhbiB0aGF0IGl0Ci0gKiBkb2Vzbid0IGlt cHJvdmUgcGVyZm9ybWFuY2UuCi0gKgotICogVW5jb25kaXRpb25hbGx5IGtlZXBpbmcgdGhlIG51 bWJlciBvZiBDTE9HIGJ1ZmZlcnMgdG8gMTI4IGRpZCBub3Qgc2VlbSBsaWtlCi0gKiBhIGdvb2Qg aWRlYSwgYmVjYXVzZSBpdCB3b3VsZCBpbmNyZWFzZSB0aGUgbWluaW11bSBhbW91bnQgb2Ygc2hh cmVkIG1lbW9yeQotICogcmVxdWlyZWQgdG8gc3RhcnQsIHdoaWNoIGNvdWxkIGJlIGEgcHJvYmxl bSBmb3IgcGVvcGxlIHJ1bm5pbmcgdmVyeSBzbWFsbAotICogY29uZmlndXJhdGlvbnMuICBUaGUg Zm9sbG93aW5nIGZvcm11bGEgc2VlbXMgdG8gcmVwcmVzZW50IGEgcmVhc29uYWJsZQotICogY29t cHJvbWlzZTogcGVvcGxlIHdpdGggdmVyeSBsb3cgdmFsdWVzIGZvciBzaGFyZWRfYnVmZmVycyB3 aWxsIGdldCBmZXdlcgotICogQ0xPRyBidWZmZXJzIGFzIHdlbGwsIGFuZCBldmVyeW9uZSBlbHNl IHdpbGwgZ2V0IDEyOC4KLSAqLwotU2l6ZQotQ0xPR1NobWVtQnVmZmVycyh2b2lkKQotewotCXJl dHVybiBNaW4oMTI4LCBNYXgoNCwgTkJ1ZmZlcnMgLyA1MTIpKTsKLX0KLQotLyoKLSAqIEluaXRp YWxpemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIENMT0cKLSAqLwotU2l6ZQotQ0xPR1NobWVt U2l6ZSh2b2lkKQotewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ0xPR1NobWVtQnVmZmVy cygpLCBDTE9HX0xTTlNfUEVSX1BBR0UpOwotfQotCi12b2lkCi1DTE9HU2htZW1Jbml0KHZvaWQp Ci17Ci0JWGFjdEN0bC0+UGFnZVByZWNlZGVzID0gQ0xPR1BhZ2VQcmVjZWRlczsKLQlTaW1wbGVM cnVJbml0KFhhY3RDdGwsICJYYWN0IiwgQ0xPR1NobWVtQnVmZmVycygpLCBDTE9HX0xTTlNfUEVS X1BBR0UsCi0JCQkJICBYYWN0U0xSVUxvY2ssICJwZ194YWN0IiwgTFdUUkFOQ0hFX1hBQ1RfQlVG RkVSLAotCQkJCSAgU1lOQ19IQU5ETEVSX0NMT0cpOwotCVNscnVQYWdlUHJlY2VkZXNVbml0VGVz dHMoWGFjdEN0bCwgQ0xPR19YQUNUU19QRVJfUEFHRSk7Ci19Ci0KIC8qCiAgKiBUaGlzIGZ1bmMg bXVzdCBiZSBjYWxsZWQgT05DRSBvbiBzeXN0ZW0gaW5zdGFsbC4gIEl0IGNyZWF0ZXMKICAqIHRo ZSBpbml0aWFsIENMT0cgc2VnbWVudC4gIChUaGUgQ0xPRyBkaXJlY3RvcnkgaXMgYXNzdW1lZCB0 bwpAQCAtNzEwLDE4ICs2NjMsMTUgQEAgQ0xPR1NobWVtSW5pdCh2b2lkKQogdm9pZAogQm9vdFN0 cmFwQ0xPRyh2b2lkKQogewotCWludAkJCXNsb3RubzsKLQotCUxXTG9ja0FjcXVpcmUoWGFjdFNM UlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyogQ3JlYXRlIGFu ZCB6ZXJvIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBjb21taXQgbG9nICovCi0Jc2xvdG5vID0gWmVy b0NMT0dQYWdlKDAsIGZhbHNlKTsKKwlidWZmZXIgPSBaZXJvQ0xPR1BhZ2UoMCwgZmFsc2UpOwog CiAJLyogTWFrZSBzdXJlIGl0J3Mgd3JpdHRlbiBvdXQgKi8KLQlTaW1wbGVMcnVXcml0ZVBhZ2Uo WGFjdEN0bCwgc2xvdG5vKTsKLQlBc3NlcnQoIVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtz bG90bm9dKTsKKwlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOwogCi0JTFdMb2NrUmVsZWFzZShYYWN0 U0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoKQEAgLTcz MywxNyArNjgzLDI5IEBAIEJvb3RTdHJhcENMT0codm9pZCkKICAqCiAgKiBDb250cm9sIGxvY2sg bXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8KLXN0 YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIKIFplcm9DTE9HUGFnZShpbnQgcGFnZW5vLCBib29sIHdy aXRlWGxvZykKIHsKLQlpbnQJCQlzbG90bm87CisJQnVmZmVyCQlidWZmZXI7CisJUGFnZSAJCXBh Z2U7CisJWExvZ1JlY1B0ciAgbHNuOworCisJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9D TE9HX0lELCBwYWdlbm8pOworCQorCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAKLQlz bG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShYYWN0Q3RsLCBwYWdlbm8pOworCVBhZ2VJbml0U0xS VShwYWdlLCBCTENLU1osIDApOwogCisJbHNuID0gMDsKIAlpZiAod3JpdGVYbG9nKQotCQlXcml0 ZVplcm9QYWdlWGxvZ1JlYyhwYWdlbm8pOworCXsKKwkJbHNuID0gV3JpdGVaZXJvUGFnZVhsb2dS ZWMocGFnZW5vKTsKKwl9CisJCisJUGFnZVNldEhlYWRlckRhdGFOb25SZWwocGFnZSwgcGFnZW5v LCBsc24sIEJMQ0tTWiwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJT04pOworCU1hcmtCdWZmZXJE aXJ0eShidWZmZXIpOwogCi0JcmV0dXJuIHNsb3RubzsKKwlyZXR1cm4gYnVmZmVyOwogfQogCiAv KgpAQCAtNzUzLDE3ICs3MTUsNiBAQCBaZXJvQ0xPR1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0 ZVhsb2cpCiB2b2lkCiBTdGFydHVwQ0xPRyh2b2lkKQogewotCVRyYW5zYWN0aW9uSWQgeGlkID0g WGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKFNobWVtVmFyaWFibGVDYWNoZS0+bmV4dFhpZCk7Ci0J aW50CQkJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvUGFnZSh4aWQpOwotCi0JTFdMb2NrQWNxdWly ZShYYWN0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgb3Vy IGlkZWEgb2YgdGhlIGxhdGVzdCBwYWdlIG51bWJlci4KLQkgKi8KLQlYYWN0Q3RsLT5zaGFyZWQt PmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKLQotCUxXTG9ja1JlbGVhc2UoWGFjdFNMUlVM b2NrKTsKIH0KIAogLyoKQEAgLTc3NSw4ICs3MjYsNiBAQCBUcmltQ0xPRyh2b2lkKQogCVRyYW5z YWN0aW9uSWQgeGlkID0gWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKFNobWVtVmFyaWFibGVDYWNo ZS0+bmV4dFhpZCk7CiAJaW50CQkJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvUGFnZSh4aWQpOwog Ci0JTFdMb2NrQWNxdWlyZShYYWN0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAkvKgogCSAq IFplcm8gb3V0IHRoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgY2xvZyBwYWdlLiAgVW5kZXIg bm9ybWFsCiAJICogY2lyY3Vtc3RhbmNlcyBpdCBzaG91bGQgYmUgemVyb2VzIGFscmVhZHksIGJ1 dCBpdCBzZWVtcyBhdCBsZWFzdApAQCAtNzkzLDQwICs3NDIsMjUgQEAgVHJpbUNMT0codm9pZCkK IAl7CiAJCWludAkJCWJ5dGVubyA9IFRyYW5zYWN0aW9uSWRUb0J5dGUoeGlkKTsKIAkJaW50CQkJ YnNoaWZ0ID0gVHJhbnNhY3Rpb25JZFRvQkluZGV4KHhpZCkgKiBDTE9HX0JJVFNfUEVSX1hBQ1Q7 Ci0JCWludAkJCXNsb3RubzsKIAkJY2hhcgkgICAqYnl0ZXB0cjsKKwkJQnVmZmVyCQlidWZmZXI7 CiAKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoWGFjdEN0bCwgcGFnZW5vLCBmYWxzZSwg eGlkKTsKLQkJYnl0ZXB0ciA9IFhhY3RDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSAr IGJ5dGVubzsKKwkJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9DTE9HX0lELCBwYWdlbm8s IFJCTV9UUklNKTsKKwkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7 CisJCWJ5dGVwdHIgPSBQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIGJ5 dGVubzsKIAogCQkvKiBaZXJvIHNvLWZhci11bnVzZWQgcG9zaXRpb25zIGluIHRoZSBjdXJyZW50 IGJ5dGUgKi8KIAkJKmJ5dGVwdHIgJj0gKDEgPDwgYnNoaWZ0KSAtIDE7CiAJCS8qIFplcm8gdGhl IHJlc3Qgb2YgdGhlIHBhZ2UgKi8KLQkJTWVtU2V0KGJ5dGVwdHIgKyAxLCAwLCBCTENLU1ogLSBi eXRlbm8gLSAxKTsKKwkJTWVtU2V0KGJ5dGVwdHIgKyAxLCAwLCBCTENLU1ogLSBieXRlbm8gLSBN QVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkgLSAxKTsKIAotCQlYYWN0Q3RsLT5zaGFyZWQt PnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7Ci0JfQogCi0JTFdMb2NrUmVsZWFzZShYYWN0U0xS VUxvY2spOwotfQorCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAotLyoKLSAqIFBlcmZvcm0g YSBjaGVja3BvaW50IC0tLSBlaXRoZXIgZHVyaW5nIHNodXRkb3duLCBvciBvbi10aGUtZmx5Ci0g Ki8KLXZvaWQKLUNoZWNrUG9pbnRDTE9HKHZvaWQpCi17Ci0JLyoKLQkgKiBXcml0ZSBkaXJ0eSBD TE9HIHBhZ2VzIHRvIGRpc2suICBUaGlzIG1heSByZXN1bHQgaW4gc3luYyByZXF1ZXN0cwotCSAq IHF1ZXVlZCBmb3IgbGF0ZXIgaGFuZGxpbmcgYnkgUHJvY2Vzc1N5bmNSZXF1ZXN0cygpLCBhcyBw YXJ0IG9mIHRoZQotCSAqIGNoZWNrcG9pbnQuCi0JICovCi0JVFJBQ0VfUE9TVEdSRVNRTF9DTE9H X0NIRUNLUE9JTlRfU1RBUlQodHJ1ZSk7Ci0JU2ltcGxlTHJ1V3JpdGVBbGwoWGFjdEN0bCwgdHJ1 ZSk7Ci0JVFJBQ0VfUE9TVEdSRVNRTF9DTE9HX0NIRUNLUE9JTlRfRE9ORSh0cnVlKTsKKwkJVW5s b2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCX0KIH0KIAotCiAvKgogICogTWFrZSBzdXJlIHRo YXQgQ0xPRyBoYXMgcm9vbSBmb3IgYSBuZXdseS1hbGxvY2F0ZWQgWElELgogICoKQEAgLTg1MCwx MiArNzg0LDggQEAgRXh0ZW5kQ0xPRyhUcmFuc2FjdGlvbklkIG5ld2VzdFhhY3QpCiAKIAlwYWdl bm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKG5ld2VzdFhhY3QpOwogCi0JTFdMb2NrQWNxdWlyZShY YWN0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAkvKiBaZXJvIHRoZSBwYWdlIGFuZCBtYWtl IGFuIFhMT0cgZW50cnkgYWJvdXQgaXQgKi8KLQlaZXJvQ0xPR1BhZ2UocGFnZW5vLCB0cnVlKTsK LQotCUxXTG9ja1JlbGVhc2UoWGFjdFNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKFpl cm9DTE9HUGFnZShwYWdlbm8sIHRydWUpKTsKIH0KIAogCkBAIC04ODYsNyArODE2LDggQEAgVHJ1 bmNhdGVDTE9HKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwgT2lkIG9sZGVzdHhpZF9kYXRvaWQp CiAJY3V0b2ZmUGFnZSA9IFRyYW5zYWN0aW9uSWRUb1BhZ2Uob2xkZXN0WGFjdCk7CiAKIAkvKiBD aGVjayB0byBzZWUgaWYgdGhlcmUncyBhbnkgZmlsZXMgdGhhdCBjb3VsZCBiZSByZW1vdmVkICov Ci0JaWYgKCFTbHJ1U2NhbkRpcmVjdG9yeShYYWN0Q3RsLCBTbHJ1U2NhbkRpckNiUmVwb3J0UHJl c2VuY2UsICZjdXRvZmZQYWdlKSkKKwlpZiAoIVNscnVTY2FuRGlyZWN0b3J5KFNMUlVfQ0xPR19J RCwgQ0xPR1BhZ2VQcmVjZWRlcywKKwkJCQkJCSAgIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5j ZSwgJmN1dG9mZlBhZ2UpKQogCQlyZXR1cm47CQkJCQkvKiBub3RoaW5nIHRvIHJlbW92ZSAqLwog CiAJLyoKQEAgLTkwNyw3ICs4MzgsNyBAQCBUcnVuY2F0ZUNMT0coVHJhbnNhY3Rpb25JZCBvbGRl c3RYYWN0LCBPaWQgb2xkZXN0eGlkX2RhdG9pZCkKIAlXcml0ZVRydW5jYXRlWGxvZ1JlYyhjdXRv ZmZQYWdlLCBvbGRlc3RYYWN0LCBvbGRlc3R4aWRfZGF0b2lkKTsKIAogCS8qIE5vdyB3ZSBjYW4g cmVtb3ZlIHRoZSBvbGQgQ0xPRyBzZWdtZW50KHMpICovCi0JU2ltcGxlTHJ1VHJ1bmNhdGUoWGFj dEN0bCwgY3V0b2ZmUGFnZSk7CisJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9DTE9HX0lELCBDTE9H UGFnZVByZWNlZGVzLCBjdXRvZmZQYWdlKTsKIH0KIAogCkBAIC05NDgsMTIgKzg3OSwxNSBAQCBD TE9HUGFnZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKQogLyoKICAqIFdyaXRlIGEgWkVS T1BBR0UgeGxvZyByZWNvcmQKICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBYTG9nUmVjUHRyIAog V3JpdGVaZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2VubykKIHsKKwlYTG9nUmVjUHRyIGxzbjsKIAlY TG9nQmVnaW5JbnNlcnQoKTsKIAlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopICgmcGFnZW5vKSwg c2l6ZW9mKGludCkpOwotCSh2b2lkKSBYTG9nSW5zZXJ0KFJNX0NMT0dfSUQsIENMT0dfWkVST1BB R0UpOworCWxzbiA9IFhMb2dJbnNlcnQoUk1fQ0xPR19JRCwgQ0xPR19aRVJPUEFHRSk7CisKKwly ZXR1cm4gbHNuOwogfQogCiAvKgpAQCAtOTkyLDE3ICs5MjYsMTMgQEAgY2xvZ19yZWRvKFhMb2dS ZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IENMT0dfWkVST1BBR0UpCiAJewogCQlp bnQJCQlwYWdlbm87Ci0JCWludAkJCXNsb3RubzsKKwkJQnVmZmVyCQlidWZmZXI7CiAKIAkJbWVt Y3B5KCZwYWdlbm8sIFhMb2dSZWNHZXREYXRhKHJlY29yZCksIHNpemVvZihpbnQpKTsKIAotCQlM V0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQlzbG90bm8gPSBa ZXJvQ0xPR1BhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShYYWN0Q3Rs LCBzbG90bm8pOwotCQlBc3NlcnQoIVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9d KTsKLQotCQlMV0xvY2tSZWxlYXNlKFhhY3RTTFJVTG9jayk7CisJCWJ1ZmZlciA9IFplcm9DTE9H UGFnZShwYWdlbm8sIGZhbHNlKTsKKwkJRmx1c2hPbmVCdWZmZXIoYnVmZmVyKTsKKwkJVW5sb2Nr UmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KIAllbHNlIGlmIChpbmZvID09IENMT0dfVFJVTkNB VEUpCiAJewpAQCAtMTAxMiwxNyArOTQyLDggQEAgY2xvZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAq cmVjb3JkKQogCiAJCUFkdmFuY2VPbGRlc3RDbG9nWGlkKHhscmVjLm9sZGVzdFhhY3QpOwogCi0J CVNpbXBsZUxydVRydW5jYXRlKFhhY3RDdGwsIHhscmVjLnBhZ2Vubyk7CisJCVNpbXBsZUxydVRy dW5jYXRlKFNMUlVfQ0xPR19JRCwgQ0xPR1BhZ2VQcmVjZWRlcywgeGxyZWMucGFnZW5vKTsKIAl9 CiAJZWxzZQogCQllbG9nKFBBTklDLCAiY2xvZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBp bmZvKTsKIH0KLQotLyoKLSAqIEVudHJ5cG9pbnQgZm9yIHN5bmMuYyB0byBzeW5jIGNsb2cgZmls ZXMuCi0gKi8KLWludAotY2xvZ3N5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIg KnBhdGgpCi17Ci0JcmV0dXJuIFNscnVTeW5jRmlsZVRhZyhYYWN0Q3RsLCBmdGFnLCBwYXRoKTsK LX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMKaW5kZXggYjg5N2ZhYmM3MDIu LjQ5NWNmYWVkMDNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21t aXRfdHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYwpAQCAt NjMsMTkgKzYzLDE0IEBAIHR5cGVkZWYgc3RydWN0IENvbW1pdFRpbWVzdGFtcEVudHJ5CiAJCQkJ CQkJCQlzaXplb2YoUmVwT3JpZ2luSWQpKQogCiAjZGVmaW5lIENPTU1JVF9UU19YQUNUU19QRVJf UEFHRSBcCi0JKEJMQ0tTWiAvIFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5KQorCSgoQkxDS1Na IC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC8gU2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkpCiAK ICNkZWZpbmUgVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZSh4aWQpIFwKIAkoKHhpZCkgLyAoVHJhbnNh Y3Rpb25JZCkgQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFKQogI2RlZmluZSBUcmFuc2FjdGlvbklk VG9DVHNFbnRyeSh4aWQpCVwKIAkoKHhpZCkgJSAoVHJhbnNhY3Rpb25JZCkgQ09NTUlUX1RTX1hB Q1RTX1BFUl9QQUdFKQogCi0vKgotICogTGluayB0byBzaGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0 dXJlcyBmb3IgQ29tbWl0VHMgY29udHJvbAotICovCi1zdGF0aWMgU2xydUN0bERhdGEgQ29tbWl0 VHNDdGxEYXRhOwogCi0jZGVmaW5lIENvbW1pdFRzQ3RsICgmQ29tbWl0VHNDdGxEYXRhKQogCiAv KgogICogV2Uga2VlcCBhIGNhY2hlIG9mIHRoZSBsYXN0IHZhbHVlIHNldCBpbiBzaGFyZWQgbWVt b3J5LgpAQCAtMTA3LDExICsxMDIsMTIgQEAgc3RhdGljIHZvaWQgU2V0WGlkQ29tbWl0VHNJblBh Z2UoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIHN0YXRpYyB2b2lkIFRyYW5zYWN0 aW9uSWRTZXRDb21taXRUcyhUcmFuc2FjdGlvbklkIHhpZCwgVGltZXN0YW1wVHogdHMsCiAJCQkJ CQkJCQkgUmVwT3JpZ2luSWQgbm9kZWlkLCBpbnQgc2xvdG5vKTsKIHN0YXRpYyB2b2lkIGVycm9y X2NvbW1pdF90c19kaXNhYmxlZCh2b2lkKTsKLXN0YXRpYyBpbnQJWmVyb0NvbW1pdFRzUGFnZShp bnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZyk7CitzdGF0aWMgQnVmZmVyIFplcm9Db21taXRUc1Bh Z2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJvb2wgQ29tbWl0VHNQYWdl UHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpOwogc3RhdGljIHZvaWQgQWN0aXZhdGVDb21t aXRUcyh2b2lkKTsKIHN0YXRpYyB2b2lkIERlYWN0aXZhdGVDb21taXRUcyh2b2lkKTsKLXN0YXRp YyB2b2lkIFdyaXRlWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8pOworc3RhdGljIFhMb2dSZWNQ dHIgV3JpdGVaZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2Vubyk7CisKIHN0YXRpYyB2b2lkIFdyaXRl VHJ1bmNhdGVYbG9nUmVjKGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgb2xkZXN0WGlkKTsKIAog LyoKQEAgLTIxNiwzMiArMjEyLDMxIEBAIFNldFhpZENvbW1pdFRzSW5QYWdlKFRyYW5zYWN0aW9u SWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCQkJCSBUcmFuc2FjdGlvbklkICpzdWJ4aWRzLCBUaW1l c3RhbXBUeiB0cywKIAkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgaW50IHBhZ2VubykKIHsKLQlp bnQJCQlzbG90bm87CiAJaW50CQkJaTsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAotCUxXTG9ja0FjcXVp cmUoQ29tbWl0VHNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1 ZmZlcihTTFJVX0NPTU1JVF9UU19JRCwgcGFnZW5vLCBSQk1fTk9STUFMKTsKKwlMb2NrQnVmZmVy KGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKIAotCXNsb3RubyA9IFNpbXBsZUxydVJl YWRQYWdlKENvbW1pdFRzQ3RsLCBwYWdlbm8sIHRydWUsIHhpZCk7Ci0KLQlUcmFuc2FjdGlvbklk U2V0Q29tbWl0VHMoeGlkLCB0cywgbm9kZWlkLCBzbG90bm8pOworCVRyYW5zYWN0aW9uSWRTZXRD b21taXRUcyh4aWQsIHRzLCBub2RlaWQsIGJ1ZmZlcik7CiAJZm9yIChpID0gMDsgaSA8IG5zdWJ4 aWRzOyBpKyspCi0JCVRyYW5zYWN0aW9uSWRTZXRDb21taXRUcyhzdWJ4aWRzW2ldLCB0cywgbm9k ZWlkLCBzbG90bm8pOworCQlUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoc3VieGlkc1tpXSwgdHMs IG5vZGVpZCwgYnVmZmVyKTsKIAotCUNvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xv dG5vXSA9IHRydWU7CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKLQlMV0xvY2tSZWxlYXNl KENvbW1pdFRzU0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAog LyoKICAqIFNldHMgdGhlIGNvbW1pdCB0aW1lc3RhbXAgb2YgYSBzaW5nbGUgdHJhbnNhY3Rpb24u Ci0gKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBDb21taXRUc1NMUlVMb2NrIGhlbGQKICAqLwog c3RhdGljIHZvaWQKIFRyYW5zYWN0aW9uSWRTZXRDb21taXRUcyhUcmFuc2FjdGlvbklkIHhpZCwg VGltZXN0YW1wVHogdHMsCi0JCQkJCQkgUmVwT3JpZ2luSWQgbm9kZWlkLCBpbnQgc2xvdG5vKQor CQkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgQnVmZmVyIGJ1ZmZlcikKIHsKIAlpbnQJCQllbnRy eW5vID0gVHJhbnNhY3Rpb25JZFRvQ1RzRW50cnkoeGlkKTsKKwlpbnQgCQlwYWdlbm8gID0gVHJh bnNhY3Rpb25JZFRvQ1RzUGFnZSh4aWQpOworCQogCUNvbW1pdFRpbWVzdGFtcEVudHJ5IGVudHJ5 OwogCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc05vcm1hbCh4aWQpKTsKQEAgLTI0OSw5ICsyNDQs MTIgQEAgVHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1lc3Rh bXBUeiB0cywKIAllbnRyeS50aW1lID0gdHM7CiAJZW50cnkubm9kZWlkID0gbm9kZWlkOwogCi0J bWVtY3B5KENvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKworCUFzc2Vy dCh4aWQgPT0gcGFnZW5vICogQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFICsgZW50cnlubyk7CisK KwltZW1jcHkoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBcCiAJCSAg IFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5ICogZW50cnlubywKIAkJICAgJmVudHJ5LCBTaXpl T2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CisKIH0KIAogLyoKQEAgLTI2OCwxMCArMjY2LDEwIEBA IFRyYW5zYWN0aW9uSWRHZXRDb21taXRUc0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFt cFR6ICp0cywKIHsKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9DVHNQYWdlKHhpZCk7 CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0NUc0VudHJ5KHhpZCk7Ci0JaW50CQkJ c2xvdG5vOwogCUNvbW1pdFRpbWVzdGFtcEVudHJ5IGVudHJ5OwogCVRyYW5zYWN0aW9uSWQgb2xk ZXN0Q29tbWl0VHNYaWQ7CiAJVHJhbnNhY3Rpb25JZCBuZXdlc3RDb21taXRUc1hpZDsKKwlCdWZm ZXIJCWJ1ZmZlcjsKIAogCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKIAkJZXJlcG9y dChFUlJPUiwKQEAgLTMyNSwxOCArMzIzLDE5IEBAIFRyYW5zYWN0aW9uSWRHZXRDb21taXRUc0Rh dGEoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6ICp0cywKIAkJcmV0dXJuIGZhbHNlOwog CX0KIAotCS8qIGxvY2sgaXMgYWNxdWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkg Ki8KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShDb21taXRUc0N0bCwgcGFn ZW5vLCB4aWQpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ09NTUlUX1RTX0lELCBw YWdlbm8sIFJCTV9OT1JNQUwpOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFS RSk7CisKIAltZW1jcHkoJmVudHJ5LAotCQkgICBDb21taXRUc0N0bC0+c2hhcmVkLT5wYWdlX2J1 ZmZlcltzbG90bm9dICsKLQkJICAgU2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkgKiBlbnRyeW5v LAotCQkgICBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CisJCQlQYWdlR2V0Q29udGVudHMo QnVmZmVyR2V0UGFnZShidWZmZXIpKSArIFwKKwkJCVNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5 ICogZW50cnlubywKKwkJCVNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5KTsKIAogCSp0cyA9IGVu dHJ5LnRpbWU7CiAJaWYgKG5vZGVpZCkKIAkJKm5vZGVpZCA9IGVudHJ5Lm5vZGVpZDsKIAotCUxX TG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZm ZXIpOwogCXJldHVybiAqdHMgIT0gMDsKIH0KIApAQCAtNDg3LDI3ICs0ODYsMTMgQEAgcGdfeGFj dF9jb21taXRfdGltZXN0YW1wX29yaWdpbihQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9E QVRVTShIZWFwVHVwbGVHZXREYXR1bShodHVwKSk7CiB9CiAKLS8qCi0gKiBOdW1iZXIgb2Ygc2hh cmVkIENvbW1pdFRTIGJ1ZmZlcnMuCi0gKgotICogV2UgdXNlIGEgdmVyeSBzaW1pbGFyIGxvZ2lj IGFzIGZvciB0aGUgbnVtYmVyIG9mIENMT0cgYnVmZmVycyAoZXhjZXB0IHdlCi0gKiBzY2FsZSB1 cCB0d2ljZSBhcyBmYXN0IHdpdGggc2hhcmVkIGJ1ZmZlcnMsIGFuZCB0aGUgbWF4aW11bSBpcyB0 d2ljZSBhcwotICogaGlnaCk7IHNlZSBjb21tZW50cyBpbiBDTE9HU2htZW1CdWZmZXJzLgotICov Ci1TaXplCi1Db21taXRUc1NobWVtQnVmZmVycyh2b2lkKQotewotCXJldHVybiBNaW4oMjU2LCBN YXgoNCwgTkJ1ZmZlcnMgLyAyNTYpKTsKLX0KLQogLyoKICAqIFNoYXJlZCBtZW1vcnkgc2l6aW5n IGZvciBDb21taXRUcwogICovCiBTaXplCiBDb21taXRUc1NobWVtU2l6ZSh2b2lkKQogewotCXJl dHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ29tbWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCkgKwotCQlz aXplb2YoQ29tbWl0VGltZXN0YW1wU2hhcmVkKTsKKwlyZXR1cm4gc2l6ZW9mKENvbW1pdFRpbWVz dGFtcFNoYXJlZCk7CiB9CiAKIC8qCkBAIC01MTksMTIgKzUwNCw3IEBAIENvbW1pdFRzU2htZW1J bml0KHZvaWQpCiB7CiAJYm9vbAkJZm91bmQ7CiAKLQlDb21taXRUc0N0bC0+UGFnZVByZWNlZGVz ID0gQ29tbWl0VHNQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5pdChDb21taXRUc0N0bCwgIkNv bW1pdFRzIiwgQ29tbWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCwKLQkJCQkgIENvbW1pdFRzU0xSVUxv Y2ssICJwZ19jb21taXRfdHMiLAotCQkJCSAgTFdUUkFOQ0hFX0NPTU1JVFRTX0JVRkZFUiwKLQkJ CQkgIFNZTkNfSEFORExFUl9DT01NSVRfVFMpOwotCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMo Q29tbWl0VHNDdGwsIENPTU1JVF9UU19YQUNUU19QRVJfUEFHRSk7CisJU2xydVBhZ2VQcmVjZWRl c1VuaXRUZXN0cyhDb21taXRUc1BhZ2VQcmVjZWRlcywgQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdF KTsKIAogCWNvbW1pdFRzU2hhcmVkID0gU2htZW1Jbml0U3RydWN0KCJDb21taXRUcyBzaGFyZWQi LAogCQkJCQkJCQkJIHNpemVvZihDb21taXRUaW1lc3RhbXBTaGFyZWQpLApAQCAtNTY4LDE3ICs1 NDgsMjYgQEAgQm9vdFN0cmFwQ29tbWl0VHModm9pZCkKICAqCiAgKiBDb250cm9sIGxvY2sgbXVz dCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8KLXN0YXRp YyBpbnQKK3N0YXRpYyBCdWZmZXIKIFplcm9Db21taXRUc1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3 cml0ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOwotCi0Jc2xvdG5vID0gU2ltcGxlTHJ1WmVyb1Bh Z2UoQ29tbWl0VHNDdGwsIHBhZ2Vubyk7Ci0KKwlCdWZmZXIJCWJ1ZmZlcjsKKwlQYWdlIAkJcGFn ZTsKKwlYTG9nUmVjUHRyICBsc247CisKKwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX0NP TU1JVF9UU19JRCwgcGFnZW5vKTsKKwkKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOwor CVBhZ2VJbml0U0xSVShwYWdlLCBCTENLU1osIDApOworCQogCWlmICh3cml0ZVhsb2cpCi0JCVdy aXRlWmVyb1BhZ2VYbG9nUmVjKHBhZ2Vubyk7CisJeworCQlsc24gPSBXcml0ZVplcm9QYWdlWGxv Z1JlYyhwYWdlbm8pOworCQlQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChwYWdlLCBwYWdlbm8sIGxz biwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisJfQorCU1hcmtCdWZmZXJE aXJ0eShidWZmZXIpOwogCi0JcmV0dXJuIHNsb3RubzsKKwlyZXR1cm4gYnVmZmVyOwogfQogCiAv KgpAQCAtNjc2LDEzICs2NjUsNiBAQCBBY3RpdmF0ZUNvbW1pdFRzKHZvaWQpCiAJeGlkID0gWGlk RnJvbUZ1bGxUcmFuc2FjdGlvbklkKFNobWVtVmFyaWFibGVDYWNoZS0+bmV4dFhpZCk7CiAJcGFn ZW5vID0gVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZSh4aWQpOwogCi0JLyoKLQkgKiBSZS1Jbml0aWFs aXplIG91ciBpZGVhIG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIuCi0JICovCi0JTFdMb2NrQWNx dWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCUNvbW1pdFRzQ3RsLT5zaGFy ZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKLQlMV0xvY2tSZWxlYXNlKENvbW1pdFRz U0xSVUxvY2spOwotCiAJLyoKIAkgKiBJZiBDb21taXRUcyBpcyBlbmFibGVkLCBidXQgaXQgd2Fz bid0IGluIHRoZSBwcmV2aW91cyBzZXJ2ZXIgcnVuLCB3ZQogCSAqIG5lZWQgdG8gc2V0IHRoZSBv bGRlc3QgYW5kIG5ld2VzdCB2YWx1ZXMgdG8gdGhlIG5leHQgWGlkOyB0aGF0IHdheSwgd2UKQEAg LTcwNSwxNSArNjg3LDE5IEBAIEFjdGl2YXRlQ29tbWl0VHModm9pZCkKIAlMV0xvY2tSZWxlYXNl KENvbW1pdFRzTG9jayk7CiAKIAkvKiBDcmVhdGUgdGhlIGN1cnJlbnQgc2VnbWVudCBmaWxlLCBp ZiBuZWNlc3NhcnkgKi8KLQlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChDb21t aXRUc0N0bCwgcGFnZW5vKSkKKwlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChT TFJVX0NPTU1JVF9UU19JRCwgcGFnZW5vKSkKIAl7Ci0JCWludAkJCXNsb3RubzsKKwkJQnVmZmVy CQlidWZmZXI7CisJCVBhZ2UgCQlwYWdlOwogCi0JCUxXTG9ja0FjcXVpcmUoQ29tbWl0VHNTTFJV TG9jaywgTFdfRVhDTFVTSVZFKTsKLQkJc2xvdG5vID0gWmVyb0NvbW1pdFRzUGFnZShwYWdlbm8s IGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQYWdlKENvbW1pdFRzQ3RsLCBzbG90bm8pOwotCQlB c3NlcnQoIUNvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0JCUxXTG9j a1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7CisJCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNM UlVfQ09NTUlUX1RTX0lELCBwYWdlbm8pOworCQkKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVm ZmVyKTsKKwkJUGFnZUluaXRTTFJVKHBhZ2UsIEJMQ0tTWiwgMCk7CisKKwkJTWFya0J1ZmZlckRp cnR5KGJ1ZmZlcik7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJCVVubG9ja1JlbGVhc2VC dWZmZXIoYnVmZmVyKTsKIAl9CiAKIAkvKiBDaGFuZ2UgdGhlIGFjdGl2YXRpb24gc3RhdHVzIGlu IHNoYXJlZCBtZW1vcnkuICovCkBAIC03NjIsMjMgKzc0OCw5IEBAIERlYWN0aXZhdGVDb21taXRU cyh2b2lkKQogCSAqIGJlIG92ZXJ3cml0dGVuIGFueXdheSB3aGVuIHdlIHdyYXAgYXJvdW5kLCBi dXQgaXQgc2VlbXMgYmV0dGVyIHRvIGJlCiAJICogdGlkeS4pCiAJICovCi0JTFdMb2NrQWNxdWly ZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCSh2b2lkKSBTbHJ1U2NhbkRpcmVj dG9yeShDb21taXRUc0N0bCwgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbCwgTlVMTCk7Ci0JTFdMb2Nr UmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsKLX0KLQotLyoKLSAqIFBlcmZvcm0gYSBjaGVja3Bv aW50IC0tLSBlaXRoZXIgZHVyaW5nIHNodXRkb3duLCBvciBvbi10aGUtZmx5Ci0gKi8KLXZvaWQK LUNoZWNrUG9pbnRDb21taXRUcyh2b2lkKQotewotCS8qCi0JICogV3JpdGUgZGlydHkgQ29tbWl0 VHMgcGFnZXMgdG8gZGlzay4gIFRoaXMgbWF5IHJlc3VsdCBpbiBzeW5jIHJlcXVlc3RzCi0JICog cXVldWVkIGZvciBsYXRlciBoYW5kbGluZyBieSBQcm9jZXNzU3luY1JlcXVlc3RzKCksIGFzIHBh cnQgb2YgdGhlCi0JICogY2hlY2twb2ludC4KLQkgKi8KLQlTaW1wbGVMcnVXcml0ZUFsbChDb21t aXRUc0N0bCwgdHJ1ZSk7CisJKHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5KFNMUlVfQ09NTUlUX1RT X0lELAorCQkJCQkJCSBDb21taXRUc1BhZ2VQcmVjZWRlcywKKwkJCQkJCQkgU2xydVNjYW5EaXJD YkRlbGV0ZUFsbCwgTlVMTCk7CiB9CiAKIC8qCkBAIC04MTYsMTIgKzc4OCw4IEBAIEV4dGVuZENv bW1pdFRzKFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCkKIAogCXBhZ2VubyA9IFRyYW5zYWN0aW9u SWRUb0NUc1BhZ2UobmV3ZXN0WGFjdCk7CiAKLQlMV0xvY2tBY3F1aXJlKENvbW1pdFRzU0xSVUxv Y2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAkvKiBaZXJvIHRoZSBwYWdlIGFuZCBtYWtlIGFuIFhMT0cg ZW50cnkgYWJvdXQgaXQgKi8KLQlaZXJvQ29tbWl0VHNQYWdlKHBhZ2VubywgIUluUmVjb3Zlcnkp OwotCi0JTFdMb2NrUmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVm ZmVyKFplcm9Db21taXRUc1BhZ2UocGFnZW5vLCAhSW5SZWNvdmVyeSkpOwogfQogCiAvKgpAQCAt ODQyLDcgKzgxMCw5IEBAIFRydW5jYXRlQ29tbWl0VHMoVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0 KQogCWN1dG9mZlBhZ2UgPSBUcmFuc2FjdGlvbklkVG9DVHNQYWdlKG9sZGVzdFhhY3QpOwogCiAJ LyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGZpbGVzIHRoYXQgY291bGQgYmUgcmVtb3Zl ZCAqLwotCWlmICghU2xydVNjYW5EaXJlY3RvcnkoQ29tbWl0VHNDdGwsIFNscnVTY2FuRGlyQ2JS ZXBvcnRQcmVzZW5jZSwKKwlpZiAoIVNscnVTY2FuRGlyZWN0b3J5KFNMUlVfQ09NTUlUX1RTX0lE LAorCQkJCQkJICAgQ29tbWl0VHNQYWdlUHJlY2VkZXMsCisJCQkJCQkgICBTbHJ1U2NhbkRpckNi UmVwb3J0UHJlc2VuY2UsCiAJCQkJCQkgICAmY3V0b2ZmUGFnZSkpCiAJCXJldHVybjsJCQkJCS8q IG5vdGhpbmcgdG8gcmVtb3ZlICovCiAKQEAgLTg1MCw3ICs4MjAsNyBAQCBUcnVuY2F0ZUNvbW1p dFRzKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCkKIAlXcml0ZVRydW5jYXRlWGxvZ1JlYyhjdXRv ZmZQYWdlLCBvbGRlc3RYYWN0KTsKIAogCS8qIE5vdyB3ZSBjYW4gcmVtb3ZlIHRoZSBvbGQgQ29t bWl0VHMgc2VnbWVudChzKSAqLwotCVNpbXBsZUxydVRydW5jYXRlKENvbW1pdFRzQ3RsLCBjdXRv ZmZQYWdlKTsKKwlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX0NPTU1JVF9UU19JRCwgQ29tbWl0VHNQ YWdlUHJlY2VkZXMsIGN1dG9mZlBhZ2UpOwogfQogCiAvKgpAQCAtOTM2LDEyICs5MDYsMTYgQEAg Q29tbWl0VHNQYWdlUHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpCiAvKgogICogV3JpdGUg YSBaRVJPUEFHRSB4bG9nIHJlY29yZAogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIFhMb2dSZWNQ dHIgCiBXcml0ZVplcm9QYWdlWGxvZ1JlYyhpbnQgcGFnZW5vKQogeworCVhMb2dSZWNQdHIgbHNu OworCQogCVhMb2dCZWdpbkluc2VydCgpOwogCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgKCZw YWdlbm8pLCBzaXplb2YoaW50KSk7Ci0JKHZvaWQpIFhMb2dJbnNlcnQoUk1fQ09NTUlUX1RTX0lE LCBDT01NSVRfVFNfWkVST1BBR0UpOworCWxzbiA9IFhMb2dJbnNlcnQoUk1fQ09NTUlUX1RTX0lE LCBDT01NSVRfVFNfWkVST1BBR0UpOworCQorCXJldHVybiBsc247CiB9CiAKIC8qCkBAIC05NzQs MTcgKzk0OCwxOSBAQCBjb21taXRfdHNfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAlp ZiAoaW5mbyA9PSBDT01NSVRfVFNfWkVST1BBR0UpCiAJewogCQlpbnQJCQlwYWdlbm87Ci0JCWlu dAkJCXNsb3RubzsKKwkJQnVmZmVyCQlidWZmZXI7CisJCVBhZ2UJCXBhZ2U7CiAKIAkJbWVtY3B5 KCZwYWdlbm8sIFhMb2dSZWNHZXREYXRhKHJlY29yZCksIHNpemVvZihpbnQpKTsKIAotCQlMV0xv Y2tBY3F1aXJlKENvbW1pdFRzU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkJc2xvdG5vID0g WmVyb0NvbW1pdFRzUGFnZShwYWdlbm8sIGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQYWdlKENv bW1pdFRzQ3RsLCBzbG90bm8pOwotCQlBc3NlcnQoIUNvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2Vf ZGlydHlbc2xvdG5vXSk7Ci0KLQkJTFdMb2NrUmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsKKwkJ YnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2Vubyk7CisJCQor CQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOworCQlQYWdlSW5pdFNMUlUocGFnZSwgQkxD S1NaLCAwKTsKKwkJCisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOworCQlGbHVzaE9uZUJ1ZmZl cihidWZmZXIpOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJfQogCWVsc2UgaWYg KGluZm8gPT0gQ09NTUlUX1RTX1RSVU5DQVRFKQogCXsKQEAgLTk5MiwyMyArOTY4LDggQEAgY29t bWl0X3RzX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJQWR2YW5jZU9sZGVzdENv bW1pdFRzWGlkKHRydW5jLT5vbGRlc3RYaWQpOwogCi0JCS8qCi0JCSAqIER1cmluZyBYTE9HIHJl cGxheSwgbGF0ZXN0X3BhZ2VfbnVtYmVyIGlzbid0IHNldCB1cCB5ZXQ7IGluc2VydCBhCi0JCSAq IHN1aXRhYmxlIHZhbHVlIHRvIGJ5cGFzcyB0aGUgc2FuaXR5IHRlc3QgaW4gU2ltcGxlTHJ1VHJ1 bmNhdGUuCi0JCSAqLwotCQlDb21taXRUc0N0bC0+c2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIg PSB0cnVuYy0+cGFnZW5vOwotCi0JCVNpbXBsZUxydVRydW5jYXRlKENvbW1pdFRzQ3RsLCB0cnVu Yy0+cGFnZW5vKTsKKwkJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9DT01NSVRfVFNfSUQsIENvbW1p dFRzUGFnZVByZWNlZGVzLCB0cnVuYy0+cGFnZW5vKTsKIAl9CiAJZWxzZQogCQllbG9nKFBBTklD LCAiY29tbWl0X3RzX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOwogfQotCi0vKgot ICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgY29tbWl0X3RzIGZpbGVzLgotICovCi1p bnQKLWNvbW1pdHRzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkK LXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKENvbW1pdFRzQ3RsLCBmdGFnLCBwYXRoKTsKLX0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggZTc1ZTFmZGY3NDAuLjc0 YjhkNDM0ZmI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhh Y3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtMTA2 LDcgKzEwNiw3IEBACiAgKi8KIAogLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBlciBvZmZzZXQgKi8K LSNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UgKEJMQ0tTWiAvIHNpemVvZihNdWx0 aVhhY3RPZmZzZXQpKQorI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoKEJMQ0tT WiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhKS8gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpCiAKICNk ZWZpbmUgTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoeGlkKSBcCiAJKCh4aWQpIC8gKE11bHRpWGFj dE9mZnNldCkgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UpCkBAIC0xMzgsNyArMTM4LDcgQEAK IC8qIHNpemUgaW4gYnl0ZXMgb2YgYSBjb21wbGV0ZSBncm91cCAqLwogI2RlZmluZSBNVUxUSVhB Q1RfTUVNQkVSR1JPVVBfU0laRSBcCiAJKHNpemVvZihUcmFuc2FjdGlvbklkKSAqIE1VTFRJWEFD VF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCArIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQ KQotI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFIChCTENLU1ogLyBNVUxU SVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQU19Q RVJfUEFHRSAoKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhKSAvIE1VTFRJWEFDVF9NRU1C RVJHUk9VUF9TSVpFKQogI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCiAJKE1V TFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVN QkVSR1JPVVApCiAKQEAgLTE2MSw5ICsxNjEsOSBAQAogCiAvKiBMb2NhdGlvbiAoYnl0ZSBvZmZz ZXQgd2l0aGluIHBhZ2UpIG9mIGZsYWcgd29yZCBmb3IgYSBnaXZlbiBtZW1iZXIgKi8KICNkZWZp bmUgTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KHhpZCkgXAotCSgoKCh4aWQpIC8gKFRyYW5zYWN0aW9u SWQpIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkgJSBcCisJKCgoKCh4aWQpIC8g KFRyYW5zYWN0aW9uSWQpIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkgJSBcCiAJ ICAoVHJhbnNhY3Rpb25JZCkgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSkgKiBcCi0J IChUcmFuc2FjdGlvbklkKSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKKwkgKFRyYW5zYWN0 aW9uSWQpIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFKSkKICNkZWZpbmUgTVhPZmZzZXRUb0Zs YWdzQml0U2hpZnQoeGlkKSBcCiAJKCgoeGlkKSAlIChUcmFuc2FjdGlvbklkKSBNVUxUSVhBQ1Rf TUVNQkVSU19QRVJfTUVNQkVSR1JPVVApICogXAogCSBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFD VCkKQEAgLTE4MSwxNSArMTgxLDYgQEAKICNkZWZpbmUgUHJldmlvdXNNdWx0aVhhY3RJZCh4aWQp IFwKIAkoKHhpZCkgPT0gRmlyc3RNdWx0aVhhY3RJZCA/IE1heE11bHRpWGFjdElkIDogKHhpZCkg LSAxKQogCi0vKgotICogTGlua3MgdG8gc2hhcmVkLW1lbW9yeSBkYXRhIHN0cnVjdHVyZXMgZm9y IE11bHRpWGFjdCBjb250cm9sCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBNdWx0aVhhY3RPZmZz ZXRDdGxEYXRhOwotc3RhdGljIFNscnVDdGxEYXRhIE11bHRpWGFjdE1lbWJlckN0bERhdGE7Ci0K LSNkZWZpbmUgTXVsdGlYYWN0T2Zmc2V0Q3RsCSgmTXVsdGlYYWN0T2Zmc2V0Q3RsRGF0YSkKLSNk ZWZpbmUgTXVsdGlYYWN0TWVtYmVyQ3RsCSgmTXVsdGlYYWN0TWVtYmVyQ3RsRGF0YSkKLQogLyoK ICAqIE11bHRpWGFjdCBzdGF0ZSBzaGFyZWQgYWNyb3NzIGFsbCBiYWNrZW5kcy4gIEFsbCB0aGlz IHN0YXRlIGlzIHByb3RlY3RlZAogICogYnkgTXVsdGlYYWN0R2VuTG9jay4gIChXZSBhbHNvIHVz ZSBNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayBhbmQKQEAgLTM0MSw4ICszMzIsOCBAQCBzdGF0aWMg TWVtb3J5Q29udGV4dCBNWGFjdENvbnRleHQgPSBOVUxMOwogLyogaW50ZXJuYWwgTXVsdGlYYWN0 SWQgbWFuYWdlbWVudCAqLwogc3RhdGljIHZvaWQgTXVsdGlYYWN0SWRTZXRPbGRlc3RWaXNpYmxl KHZvaWQpOwogc3RhdGljIHZvaWQgUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRp LCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAotCQkJCQkJCSAgIGludCBubWVtYmVycywgTXVsdGlY YWN0TWVtYmVyICptZW1iZXJzKTsKLXN0YXRpYyBNdWx0aVhhY3RJZCBHZXROZXdNdWx0aVhhY3RJ ZChpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KTsKKwkJCQkJCQkgICBpbnQg bm1lbWJlcnMsIE11bHRpWGFjdE1lbWJlciAqbWVtYmVycywgQnVmZmVyICogb2Zmc2V0X2J1Zl9w dHIsIEJ1ZmZlciAqIG1lbWJlcl9idWZzKTsKK3N0YXRpYyBNdWx0aVhhY3RJZCBHZXROZXdNdWx0 aVhhY3RJZChpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0LCBCdWZmZXIgKiBv ZmZzZXRfYnVmLCBCdWZmZXIgKiogbWVtYmVyX2J1ZnMpOwogCiAvKiBNdWx0aVhhY3QgY2FjaGUg bWFuYWdlbWVudCAqLwogc3RhdGljIGludAlteGFjdE1lbWJlckNvbXBhcmF0b3IoY29uc3Qgdm9p ZCAqYXJnMSwgY29uc3Qgdm9pZCAqYXJnMik7CkBAIC0zNTQsMTkgKzM0NSwxOCBAQCBzdGF0aWMg dm9pZCBtWGFjdENhY2hlUHV0KE11bHRpWGFjdElkIG11bHRpLCBpbnQgbm1lbWJlcnMsCiBzdGF0 aWMgY2hhciAqbXhzdGF0dXNfdG9fc3RyaW5nKE11bHRpWGFjdFN0YXR1cyBzdGF0dXMpOwogCiAv KiBtYW5hZ2VtZW50IG9mIFNMUlUgaW5mcmFzdHJ1Y3R1cmUgKi8KLXN0YXRpYyBpbnQJWmVyb011 bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwotc3RhdGljIGlu dAlaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZyk7Citz dGF0aWMgQnVmZmVyIFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKGludCBwYWdlbm8sIGJvb2wgd3Jp dGVYbG9nKTsKK3N0YXRpYyBCdWZmZXIgWmVyb011bHRpWGFjdE1lbWJlclBhZ2UoaW50IHBhZ2Vu bywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNl ZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKTsKLXN0YXRpYyBib29sIE11bHRpWGFjdE1lbWJlclBh Z2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7CiBzdGF0aWMgYm9vbCBNdWx0aVhhY3RP ZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MSwKIAkJCQkJCQkJCU11bHRpWGFj dE9mZnNldCBvZmZzZXQyKTsKLXN0YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE9mZnNldChNdWx0 aVhhY3RJZCBtdWx0aSk7Ci1zdGF0aWMgdm9pZCBFeHRlbmRNdWx0aVhhY3RNZW1iZXIoTXVsdGlY YWN0T2Zmc2V0IG9mZnNldCwgaW50IG5tZW1iZXJzKTsKK3N0YXRpYyB2b2lkIEV4dGVuZE11bHRp WGFjdE9mZnNldChNdWx0aVhhY3RJZCBtdWx0aSwgQnVmZmVyICogYnVmZmVyKTsKK3N0YXRpYyB2 b2lkIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1l bWJlcnMsIEJ1ZmZlciAqKiBtZW1iZXJfYnVmZmVycyk7CiBzdGF0aWMgYm9vbCBNdWx0aVhhY3RP ZmZzZXRXb3VsZFdyYXAoTXVsdGlYYWN0T2Zmc2V0IGJvdW5kYXJ5LAogCQkJCQkJCQkJIE11bHRp WGFjdE9mZnNldCBzdGFydCwgdWludDMyIGRpc3RhbmNlKTsKIHN0YXRpYyBib29sIFNldE9mZnNl dFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCk7CiBzdGF0aWMgYm9vbCBmaW5kX211bHRpeGFj dF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpOwotc3Rh dGljIHZvaWQgV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8sIHVpbnQ4IGluZm8pOwor c3RhdGljIFhMb2dSZWNQdHIgV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8sIHVpbnQ4 IGluZm8pOwogc3RhdGljIHZvaWQgV3JpdGVNVHJ1bmNhdGVYbG9nUmVjKE9pZCBvbGRlc3RNdWx0 aURCLAogCQkJCQkJCQkgIE11bHRpWGFjdElkIHN0YXJ0VHJ1bmNPZmYsCiAJCQkJCQkJCSAgTXVs dGlYYWN0SWQgZW5kVHJ1bmNPZmYsCkBAIC03NjcsNiArNzU3LDkgQEAgUmVhZE11bHRpWGFjdElk UmFuZ2UoTXVsdGlYYWN0SWQgKm9sZGVzdCwgTXVsdGlYYWN0SWQgKm5leHQpCiBNdWx0aVhhY3RJ ZAogTXVsdGlYYWN0SWRDcmVhdGVGcm9tTWVtYmVycyhpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE1l bWJlciAqbWVtYmVycykKIHsKKwlCdWZmZXIgKiBtZW1iZXJfYnVmczsKKwlCdWZmZXIgb2Zmc2V0 X2J1ZmY7CisKIAlNdWx0aVhhY3RJZCBtdWx0aTsKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0Owog CXhsX211bHRpeGFjdF9jcmVhdGUgeGxyZWM7CkBAIC04MjAsNyArODEzLDggQEAgTXVsdGlYYWN0 SWRDcmVhdGVGcm9tTWVtYmVycyhpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE1lbWJlciAqbWVtYmVy cykKIAkgKiBpbiB2YWN1dW0uICBEdXJpbmcgdmFjdXVtLCBpbiBwYXJ0aWN1bGFyLCBpdCB3b3Vs ZCBiZSB1bmFjY2VwdGFibGUgdG8KIAkgKiBrZWVwIE9sZGVzdE11bHRpIHNldCwgaW4gY2FzZSBp dCBydW5zIGZvciBsb25nLgogCSAqLwotCW11bHRpID0gR2V0TmV3TXVsdGlYYWN0SWQobm1lbWJl cnMsICZvZmZzZXQpOworCisJbXVsdGkgPSBHZXROZXdNdWx0aVhhY3RJZChubWVtYmVycywgJm9m ZnNldCwgJm9mZnNldF9idWZmLCAmbWVtYmVyX2J1ZnMpOwogCiAJLyogTWFrZSBhbiBYTE9HIGVu dHJ5IGRlc2NyaWJpbmcgdGhlIG5ldyBNWElELiAqLwogCXhscmVjLm1pZCA9IG11bHRpOwpAQCAt ODQwLDggKzgzNCw4IEBAIE11bHRpWGFjdElkQ3JlYXRlRnJvbU1lbWJlcnMoaW50IG5tZW1iZXJz LCBNdWx0aVhhY3RNZW1iZXIgKm1lbWJlcnMpCiAJKHZvaWQpIFhMb2dJbnNlcnQoUk1fTVVMVElY QUNUX0lELCBYTE9HX01VTFRJWEFDVF9DUkVBVEVfSUQpOwogCiAJLyogTm93IGVudGVyIHRoZSBp bmZvcm1hdGlvbiBpbnRvIHRoZSBPRkZTRVRzIGFuZCBNRU1CRVJzIGxvZ3MgKi8KLQlSZWNvcmRO ZXdNdWx0aVhhY3QobXVsdGksIG9mZnNldCwgbm1lbWJlcnMsIG1lbWJlcnMpOwotCisJUmVjb3Jk TmV3TXVsdGlYYWN0KG11bHRpLCBvZmZzZXQsIG5tZW1iZXJzLCBtZW1iZXJzLCAmb2Zmc2V0X2J1 ZmYsIG1lbWJlcl9idWZzKTsKKwkKIAkvKiBEb25lIHdpdGggY3JpdGljYWwgc2VjdGlvbiAqLwog CUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtODYyLDQwICs4NTYsMzggQEAgTXVsdGlYYWN0SWRD cmVhdGVGcm9tTWVtYmVycyhpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE1lbWJlciAqbWVtYmVycykK ICAqLwogc3RhdGljIHZvaWQKIFJlY29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RJZCBtdWx0aSwg TXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKLQkJCQkgICBpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE1l bWJlciAqbWVtYmVycykKKwkJCQkgICBpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE1lbWJlciAqbWVt YmVycywgQnVmZmVyICogb2Zmc2V0X2J1Zl9wdHIsIEJ1ZmZlciAqIG1lbWJlcl9idWZzKQogewog CWludAkJCXBhZ2VubzsKIAlpbnQJCQlwcmV2X3BhZ2VubzsKKwlpbnQgCQltaW5fcGFnZW5vOwog CWludAkJCWVudHJ5bm87Ci0JaW50CQkJc2xvdG5vOwogCU11bHRpWGFjdE9mZnNldCAqb2ZmcHRy OwogCWludAkJCWk7Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrLCBM V19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVyOworCUJ1ZmZlcgkJb2Zmc2V0X2J1ZjsKIAog CXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKIAllbnRyeW5vID0gTXVs dGlYYWN0SWRUb09mZnNldEVudHJ5KG11bHRpKTsKIAotCS8qCi0JICogTm90ZTogd2UgcGFzcyB0 aGUgTXVsdGlYYWN0SWQgdG8gU2ltcGxlTHJ1UmVhZFBhZ2UgYXMgdGhlICJ0cmFuc2FjdGlvbiIK LQkgKiB0byBjb21wbGFpbiBhYm91dCBpZiB0aGVyZSdzIGFueSBJL08gZXJyb3IuICBUaGlzIGlz IGtpbmRhIGJvZ3VzLCBidXQKLQkgKiBzaW5jZSB0aGUgZXJyb3JzIHdpbGwgYWx3YXlzIGdpdmUg dGhlIGZ1bGwgcGF0aG5hbWUsIGl0IHNob3VsZCBiZSBjbGVhcgotCSAqIGVub3VnaCB0aGF0IGEg TXVsdGlYYWN0SWQgaXMgcmVhbGx5IGludm9sdmVkLiAgUGVyaGFwcyBzb21lZGF5IHdlJ2xsCi0J ICogdGFrZSB0aGUgdHJvdWJsZSB0byBnZW5lcmFsaXplIHRoZSBzbHJ1LmMgZXJyb3IgcmVwb3J0 aW5nIGNvZGUuCi0JICovCi0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zm c2V0Q3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKLQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0 ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOwotCW9m ZnB0ciArPSBlbnRyeW5vOworCWlmIChvZmZzZXRfYnVmX3B0cikKKwkJb2Zmc2V0X2J1ZiA9ICpv ZmZzZXRfYnVmX3B0cjsKKwllbHNlIAorCQlvZmZzZXRfYnVmID0gUmVhZFNscnVCdWZmZXIoU0xS VV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOwogCi0JKm9mZnB0ciA9 IG9mZnNldDsKKwlMb2NrQnVmZmVyKG9mZnNldF9idWYsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7 CisJCQkJCQkKIAotCU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Ru b10gPSB0cnVlOworCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgUGFnZUdldENvbnRlbnRz KEJ1ZmZlckdldFBhZ2Uob2Zmc2V0X2J1ZikpOworCW9mZnB0ciArPSBlbnRyeW5vOwogCi0JLyog RXhjaGFuZ2Ugb3VyIGxvY2sgKi8KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVM b2NrKTsKKwkqb2ZmcHRyID0gb2Zmc2V0OwogCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RNZW1i ZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlNYXJrQnVmZmVyRGlydHkob2Zmc2V0X2J1Zik7 CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihvZmZzZXRfYnVmKTsKKwlidWZmZXIgPSBJbnZhbGlkQnVm ZmVyOwogCisJbWluX3BhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7CiAJcHJl dl9wYWdlbm8gPSAtMTsKIAogCWZvciAoaSA9IDA7IGkgPCBubWVtYmVyczsgaSsrLCBvZmZzZXQr KykKQEAgLTkxNiwyNyArOTA4LDM1IEBAIFJlY29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RJZCBt dWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKIAogCQlpZiAocGFnZW5vICE9IHByZXZfcGFn ZW5vKQogCQl7Ci0JCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RNZW1iZXJD dGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOworCQkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmZmVyKSkK KwkJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisKKwkJCWlmIChtZW1iZXJfYnVmcykK KwkJCQlidWZmZXIgPSBtZW1iZXJfYnVmc1twYWdlbm8gLSBtaW5fcGFnZW5vXTsKKwkJCWVsc2UK KwkJCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQsIHBh Z2VubywgUkJNX05PUk1BTCk7CisKKwkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19F WENMVVNJVkUpOwogCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CiAJCX0KIAotCQltZW1iZXJwdHIg PSAoVHJhbnNhY3Rpb25JZCAqKQotCQkJKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdl X2J1ZmZlcltzbG90bm9dICsgbWVtYmVyb2ZmKTsKKwkJbWVtYmVycHRyID0gKFRyYW5zYWN0aW9u SWQgKikgKFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgbWVtYmVyb2Zm KTsKIAogCQkqbWVtYmVycHRyID0gbWVtYmVyc1tpXS54aWQ7CiAKLQkJZmxhZ3NwdHIgPSAodWlu dDMyICopCi0JCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Ru b10gKyBmbGFnc29mZik7CisJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoUGFnZUdldENvbnRlbnRz KEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBmbGFnc29mZik7CiAKIAkJZmxhZ3N2YWwgPSAqZmxh Z3NwdHI7CiAJCWZsYWdzdmFsICY9IH4oKCgxIDw8IE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNU KSAtIDEpIDw8IGJzaGlmdCk7CiAJCWZsYWdzdmFsIHw9IChtZW1iZXJzW2ldLnN0YXR1cyA8PCBi c2hpZnQpOwogCQkqZmxhZ3NwdHIgPSBmbGFnc3ZhbDsKIAotCQlNdWx0aVhhY3RNZW1iZXJDdGwt PnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwkJTWFya0J1ZmZlckRpcnR5KGJ1 ZmZlcik7CiAJfQogCi0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7CisJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCWlmIChtZW1iZXJfYnVmcyAhPSBOVUxMKQor CQlwZnJlZShtZW1iZXJfYnVmcyk7CiB9CiAKIC8qCkBAIC05NTUsOCArOTU1LDExIEBAIFJlY29y ZE5ld011bHRpWGFjdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwK ICAqIGNhbGxlciBtdXN0IGVuZCB0aGUgY3JpdGljYWwgc2VjdGlvbiBhZnRlciB3cml0aW5nIFNM UlUgZGF0YS4KICAqLwogc3RhdGljIE11bHRpWGFjdElkCi1HZXROZXdNdWx0aVhhY3RJZChpbnQg bm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQorR2V0TmV3TXVsdGlYYWN0SWQoaW50 IG5tZW1iZXJzLCBNdWx0aVhhY3RPZmZzZXQgKm9mZnNldCwgQnVmZmVyICogb2Zmc2V0X2J1Ziwg QnVmZmVyICoqIG1lbWJlcl9idWZzKQogeworCWludCBtaW5fcGFnZW5vOworCWludCBtYXhfcGFn ZW5vOworCiAJTXVsdGlYYWN0SWQgcmVzdWx0OwogCU11bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0 OwogCkBAIC0xMDc0LDcgKzEwNzcsNyBAQCBHZXROZXdNdWx0aVhhY3RJZChpbnQgbm1lbWJlcnMs IE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCX0KIAogCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBy b29tIGZvciB0aGUgTVhJRCBpbiB0aGUgZmlsZS4gICovCi0JRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0 KHJlc3VsdCk7CisJRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KHJlc3VsdCwgb2Zmc2V0X2J1Zik7CiAK IAkvKgogCSAqIFJlc2VydmUgdGhlIG1lbWJlcnMgc3BhY2UsIHNpbWlsYXJseSB0byBhYm92ZS4g IEFsc28sIGJlIGNhcmVmdWwgbm90IHRvCkBAIC0xMTYyLDcgKzExNjUsMTIgQEAgR2V0TmV3TXVs dGlYYWN0SWQoaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RPZmZzZXQgKm9mZnNldCkKIAkJCQkJCQkg ICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5tZW1iZXJz KSwKIAkJCQkgZXJyaGludCgiRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGluIHRoYXQg ZGF0YWJhc2Ugd2l0aCByZWR1Y2VkIHZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2UgYW5k IHZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZSBzZXR0aW5ncy4iKSkpOwogCi0JRXh0 ZW5kTXVsdGlYYWN0TWVtYmVyKG5leHRPZmZzZXQsIG5tZW1iZXJzKTsKKwltaW5fcGFnZW5vID0g TVhPZmZzZXRUb01lbWJlclBhZ2UobmV4dE9mZnNldCk7CisJbWF4X3BhZ2VubyA9IE1YT2Zmc2V0 VG9NZW1iZXJQYWdlKG5leHRPZmZzZXQgKyBubWVtYmVycyAtIDEpOworCisJKm1lbWJlcl9idWZz ID0gKEJ1ZmZlciAqKSBwYWxsb2Moc2l6ZW9mKEJ1ZmZlcikgKiAobWF4X3BhZ2VubyAtIG1pbl9w YWdlbm8gKyAxKSk7CisKKwlFeHRlbmRNdWx0aVhhY3RNZW1iZXIobmV4dE9mZnNldCwgbm1lbWJl cnMsIG1lbWJlcl9idWZzKTsKIAogCS8qCiAJICogQ3JpdGljYWwgc2VjdGlvbiBmcm9tIGhlcmUg dW50aWwgY2FsbGVyIGhhcyB3cml0dGVuIHRoZSBkYXRhIGludG8gdGhlCkBAIC0xMjI4LDcgKzEy MzYsNiBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFj dE1lbWJlciAqKm1lbWJlcnMsCiAJaW50CQkJcGFnZW5vOwogCWludAkJCXByZXZfcGFnZW5vOwog CWludAkJCWVudHJ5bm87Ci0JaW50CQkJc2xvdG5vOwogCU11bHRpWGFjdE9mZnNldCAqb2ZmcHRy OwogCU11bHRpWGFjdE9mZnNldCBvZmZzZXQ7CiAJaW50CQkJbGVuZ3RoOwpAQCAtMTIzOSw2ICsx MjQ2LDcgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhh Y3RNZW1iZXIgKiptZW1iZXJzLAogCU11bHRpWGFjdElkIHRtcE1YYWN0OwogCU11bHRpWGFjdE9m ZnNldCBuZXh0T2Zmc2V0OwogCU11bHRpWGFjdE1lbWJlciAqcHRyOworCUJ1ZmZlcgkJYnVmZmVy OwogCiAJZGVidWdfZWxvZzMoREVCVUcyLCAiR2V0TWVtYmVyczogYXNrZWQgZm9yICV1IiwgbXVs dGkpOwogCkBAIC0xMzQyLDEzICsxMzUwLDEyIEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0 aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAkgKiB0aW1lIG9uIGV2 ZXJ5IG11bHRpeGFjdCBjcmVhdGlvbi4KIAkgKi8KIHJldHJ5OgotCUxXTG9ja0FjcXVpcmUoTXVs dGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAlwYWdlbm8gPSBNdWx0aVhh Y3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7CiAJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRF bnRyeShtdWx0aSk7CiAKLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZz ZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQg KikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJYnVm ZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCBwYWdlbm8sIFJC TV9OT1JNQUwpOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJb2Zm cHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSAoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2Uo YnVmZmVyKSkpOwogCW9mZnB0ciArPSBlbnRyeW5vOwogCW9mZnNldCA9ICpvZmZwdHI7CiAKQEAg LTEzNzksMTYgKzEzODYsMjAgQEAgcmV0cnk6CiAJCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zm c2V0RW50cnkodG1wTVhhY3QpOwogCiAJCWlmIChwYWdlbm8gIT0gcHJldl9wYWdlbm8pCi0JCQlz bG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1 ZSwgdG1wTVhhY3QpOworCQl7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCQli dWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vubywg UkJNX05PUk1BTCk7CisJCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUpOwor CQl9CiAKLQkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwt PnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNl dCAqKSAoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkpOwogCQlvZmZwdHIg Kz0gZW50cnlubzsKIAkJbmV4dE1YT2Zmc2V0ID0gKm9mZnB0cjsKIAogCQlpZiAobmV4dE1YT2Zm c2V0ID09IDApCiAJCXsKIAkJCS8qIENvcm5lciBjYXNlIDI6IG5leHQgbXVsdGl4YWN0IGlzIHN0 aWxsIGJlaW5nIGZpbGxlZCBpbiAqLwotCQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRT TFJVTG9jayk7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOwogCQkJcGdfdXNsZWVwKDEwMDBMKTsKIAkJCWdvdG8gcmV0cnk7CkBAIC0x Mzk2LDE0ICsxNDA3LDExIEBAIHJldHJ5OgogCiAJCWxlbmd0aCA9IG5leHRNWE9mZnNldCAtIG9m ZnNldDsKIAl9Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsKKwlV bmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKIAog CXB0ciA9IChNdWx0aVhhY3RNZW1iZXIgKikgcGFsbG9jKGxlbmd0aCAqIHNpemVvZihNdWx0aVhh Y3RNZW1iZXIpKTsKIAotCS8qIE5vdyBnZXQgdGhlIG1lbWJlcnMgdGhlbXNlbHZlcy4gKi8KLQlM V0xvY2tBY3F1aXJlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCiAJ dHJ1ZWxlbmd0aCA9IDA7CiAJcHJldl9wYWdlbm8gPSAtMTsKIAlmb3IgKGkgPSAwOyBpIDwgbGVu Z3RoOyBpKyssIG9mZnNldCsrKQpAQCAtMTQxOSwxMiArMTQyNywxNCBAQCByZXRyeToKIAogCQlp ZiAocGFnZW5vICE9IHByZXZfcGFnZW5vKQogCQl7Ci0JCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFk UGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOworCQkJaWYgKEJ1 ZmZlcklzVmFsaWQoYnVmZmVyKSkKKwkJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJ CQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQsIHBhZ2Vu bywgUkJNX05PUk1BTCk7CisJCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUp OwogCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CiAJCX0KIAotCQl4YWN0cHRyID0gKFRyYW5zYWN0 aW9uSWQgKikKLQkJCShNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xv dG5vXSArIG1lbWJlcm9mZik7CisJCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoUGFnZUdl dENvbnRlbnRzKChCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgbWVtYmVyb2ZmKSk7CiAKIAkJaWYg KCFUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFjdHB0cikpCiAJCXsKQEAgLTE0MzUsMTQgKzE0NDUs MTMgQEAgcmV0cnk6CiAKIAkJZmxhZ3NvZmYgPSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0 KTsKIAkJYnNoaWZ0ID0gTVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsKLQkJZmxhZ3Nw dHIgPSAodWludDMyICopIChNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJb c2xvdG5vXSArIGZsYWdzb2ZmKTsKKwkJZmxhZ3NwdHIgPSAodWludDMyICopIChQYWdlR2V0Q29u dGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIGZsYWdzb2ZmKTsKIAogCQlwdHJbdHJ1ZWxl bmd0aF0ueGlkID0gKnhhY3RwdHI7CiAJCXB0clt0cnVlbGVuZ3RoXS5zdGF0dXMgPSAoKmZsYWdz cHRyID4+IGJzaGlmdCkgJiBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNLOwogCQl0cnVlbGVuZ3Ro Kys7CiAJfQotCi0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7CisJVW5s b2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJLyogQSBtdWx0aXhpZCB3aXRoIHplcm8gbWVt YmVycyBzaG91bGQgbm90IGhhcHBlbiAqLwogCUFzc2VydCh0cnVlbGVuZ3RoID4gMCk7CkBAIC0x ODM0LDggKzE4NDMsNiBAQCBNdWx0aVhhY3RTaG1lbVNpemUodm9pZCkKIAkJCSBtdWxfc2l6ZShz aXplb2YoTXVsdGlYYWN0SWQpICogMiwgTWF4T2xkZXN0U2xvdCkpCiAKIAlzaXplID0gU0hBUkVE X01VTFRJWEFDVF9TVEFURV9TSVpFOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVT aG1lbVNpemUoTlVNX01VTFRJWEFDVE9GRlNFVF9CVUZGRVJTLCAwKSk7Ci0Jc2l6ZSA9IGFkZF9z aXplKHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShOVU1fTVVMVElYQUNUTUVNQkVSX0JVRkZFUlMs IDApKTsKIAogCXJldHVybiBzaXplOwogfQpAQCAtMTg0NywyMiArMTg1NCw2IEBAIE11bHRpWGFj dFNobWVtSW5pdCh2b2lkKQogCiAJZGVidWdfZWxvZzIoREVCVUcyLCAiU2hhcmVkIE1lbW9yeSBJ bml0IGZvciBNdWx0aVhhY3QiKTsKIAotCU11bHRpWGFjdE9mZnNldEN0bC0+UGFnZVByZWNlZGVz ID0gTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzOwotCU11bHRpWGFjdE1lbWJlckN0bC0+UGFn ZVByZWNlZGVzID0gTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNlZGVzOwotCi0JU2ltcGxlTHJ1SW5p dChNdWx0aVhhY3RPZmZzZXRDdGwsCi0JCQkJICAiTXVsdGlYYWN0T2Zmc2V0IiwgTlVNX01VTFRJ WEFDVE9GRlNFVF9CVUZGRVJTLCAwLAotCQkJCSAgTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssICJw Z19tdWx0aXhhY3Qvb2Zmc2V0cyIsCi0JCQkJICBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX0JV RkZFUiwKLQkJCQkgIFNZTkNfSEFORExFUl9NVUxUSVhBQ1RfT0ZGU0VUKTsKLQlTbHJ1UGFnZVBy ZWNlZGVzVW5pdFRlc3RzKE11bHRpWGFjdE9mZnNldEN0bCwgTVVMVElYQUNUX09GRlNFVFNfUEVS X1BBR0UpOwotCVNpbXBsZUxydUluaXQoTXVsdGlYYWN0TWVtYmVyQ3RsLAotCQkJCSAgIk11bHRp WGFjdE1lbWJlciIsIE5VTV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSUywgMCwKLQkJCQkgIE11bHRp WGFjdE1lbWJlclNMUlVMb2NrLCAicGdfbXVsdGl4YWN0L21lbWJlcnMiLAotCQkJCSAgTFdUUkFO Q0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVIsCi0JCQkJICBTWU5DX0hBTkRMRVJfTVVMVElYQUNU X01FTUJFUik7Ci0JLyogZG9lc24ndCBjYWxsIFNpbXBsZUxydVRydW5jYXRlKCkgb3IgbWVldCBj cml0ZXJpYSBmb3IgdW5pdCB0ZXN0cyAqLwotCiAJLyogSW5pdGlhbGl6ZSBvdXIgc2hhcmVkIHN0 YXRlIHN0cnVjdCAqLwogCU11bHRpWGFjdFN0YXRlID0gU2htZW1Jbml0U3RydWN0KCJTaGFyZWQg TXVsdGlYYWN0IFN0YXRlIiwKIAkJCQkJCQkJCSBTSEFSRURfTVVMVElYQUNUX1NUQVRFX1NJWkUs CkBAIC0xODkzLDI5ICsxODg0LDE3IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQogdm9pZAog Qm9vdFN0cmFwTXVsdGlYYWN0KHZvaWQpCiB7Ci0JaW50CQkJc2xvdG5vOwotCi0JTFdMb2NrQWNx dWlyZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlCdWZmZXIJCWJ1 ZmZlcjsKIAogCS8qIENyZWF0ZSBhbmQgemVybyB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgb2Zmc2V0 cyBsb2cgKi8KLQlzbG90bm8gPSBaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZSgwLCBmYWxzZSk7Ci0K LQkvKiBNYWtlIHN1cmUgaXQncyB3cml0dGVuIG91dCAqLwotCVNpbXBsZUxydVdyaXRlUGFnZShN dWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7Ci0JQXNzZXJ0KCFNdWx0aVhhY3RPZmZzZXRDdGwt PnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0 T2Zmc2V0U0xSVUxvY2spOwotCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9j aywgTFdfRVhDTFVTSVZFKTsKKwlidWZmZXIgPSBaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZSgwLCBm YWxzZSk7CisJRmx1c2hPbmVCdWZmZXIoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1 ZmZlcik7CiAKIAkvKiBDcmVhdGUgYW5kIHplcm8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIG1lbWJl cnMgbG9nICovCi0Jc2xvdG5vID0gWmVyb011bHRpWGFjdE1lbWJlclBhZ2UoMCwgZmFsc2UpOwot Ci0JLyogTWFrZSBzdXJlIGl0J3Mgd3JpdHRlbiBvdXQgKi8KLQlTaW1wbGVMcnVXcml0ZVBhZ2Uo TXVsdGlYYWN0TWVtYmVyQ3RsLCBzbG90bm8pOwotCUFzc2VydCghTXVsdGlYYWN0TWVtYmVyQ3Rs LT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFj dE1lbWJlclNMUlVMb2NrKTsKKwlidWZmZXIgPSBaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZSgwLCBm YWxzZSk7CisJRmx1c2hPbmVCdWZmZXIoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1 ZmZlcik7CiB9CiAKIC8qCkBAIC0xOTI3LDMzICsxOTA2LDU0IEBAIEJvb3RTdHJhcE11bHRpWGFj dCh2b2lkKQogICoKICAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCB3 aWxsIGJlIGhlbGQgYXQgZXhpdC4KICAqLwotc3RhdGljIGludAorc3RhdGljIEJ1ZmZlcgogWmVy b011bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpCiB7Ci0JaW50 CQkJc2xvdG5vOworCUJ1ZmZlcgkJYnVmZmVyOworCVBhZ2UJCXBhZ2U7CisJWExvZ1JlY1B0cgly ZWNwdHI7CiAKLQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShNdWx0aVhhY3RPZmZzZXRDdGws IHBhZ2Vubyk7CisJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VU X0lELCBwYWdlbm8pOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJUGFnZUluaXRT TFJVKHBhZ2UsIEJMQ0tTWiwgMCk7CiAKKwlyZWNwdHIgPSAwOworCQogCWlmICh3cml0ZVhsb2cp Ci0JCVdyaXRlTVplcm9QYWdlWGxvZ1JlYyhwYWdlbm8sIFhMT0dfTVVMVElYQUNUX1pFUk9fT0ZG X1BBR0UpOworCXsKKwkJcmVjcHRyID0gV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKHBhZ2VubywgWExP R19NVUxUSVhBQ1RfWkVST19PRkZfUEFHRSk7CisJfQorCisJUGFnZVNldEhlYWRlckRhdGFOb25S ZWwocGFnZSwgcGFnZW5vLCByZWNwdHIsIEJMQ0tTWiwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJ T04pOworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCi0JcmV0dXJuIHNsb3RubzsKKwlyZXR1 cm4gYnVmZmVyOwogfQogCiAvKgogICogRGl0dG8sIGZvciBNdWx0aVhhY3RNZW1iZXIKICAqLwot c3RhdGljIGludAorc3RhdGljIEJ1ZmZlcgogWmVyb011bHRpWGFjdE1lbWJlclBhZ2UoaW50IHBh Z2VubywgYm9vbCB3cml0ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOwotCi0Jc2xvdG5vID0gU2lt cGxlTHJ1WmVyb1BhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBwYWdlbm8pOwotCisJQnVmZmVyCQli dWZmZXI7CisJUGFnZSAJCXBhZ2U7CisJWExvZ1JlY1B0ciAJcmVjcHRyOworCisJYnVmZmVyID0g WmVyb1NscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfTUVNQkVSX0lELCBwYWdlbm8pOworCXBhZ2Ug PSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJUGFnZUluaXRTTFJVKHBhZ2UsIEJMQ0tTWiwgMCk7 CisJCQorCXJlY3B0ciA9IDA7CiAJaWYgKHdyaXRlWGxvZykKLQkJV3JpdGVNWmVyb1BhZ2VYbG9n UmVjKHBhZ2VubywgWExPR19NVUxUSVhBQ1RfWkVST19NRU1fUEFHRSk7Ci0KLQlyZXR1cm4gc2xv dG5vOworCXsKKwkJcmVjcHRyID0gV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKHBhZ2VubywgWExPR19N VUxUSVhBQ1RfWkVST19NRU1fUEFHRSk7CisJfQorCQorCVBhZ2VTZXRIZWFkZXJEYXRhTm9uUmVs KHBhZ2UsIHBhZ2VubywgcmVjcHRyLCBCTENLU1osIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJTSU9O KTsKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwkKKwlyZXR1cm4gYnVmZmVyOwogfQogCiAv KgpAQCAtMTk3OCwyMiArMTk3OCwxNCBAQCBNYXliZUV4dGVuZE9mZnNldFNscnUodm9pZCkKIAog CXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKE11bHRpWGFjdFN0YXRlLT5uZXh0TVhh Y3QpOwogCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdfRVhDTFVT SVZFKTsKLQotCWlmICghU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KE11bHRpWGFjdE9m ZnNldEN0bCwgcGFnZW5vKSkKKwlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChT TFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2VubykpCiAJewotCQlpbnQJCQlzbG90bm87CisJ CUJ1ZmZlcgkJCWJ1ZmZlcjsKIAotCQkvKgotCQkgKiBGb3J0dW5hdGVseSBmb3IgdXMsIFNpbXBs ZUxydVdyaXRlUGFnZSBpcyBhbHJlYWR5IHByZXBhcmVkIHRvIGRlYWwKLQkJICogd2l0aCBjcmVh dGluZyBhIG5ldyBzZWdtZW50IGZpbGUgZXZlbiBpZiB0aGUgcGFnZSB3ZSdyZSB3cml0aW5nIGlz Ci0JCSAqIG5vdCB0aGUgZmlyc3QgaW4gaXQsIHNvIHRoaXMgaXMgZW5vdWdoLgotCQkgKi8KLQkJ c2xvdG5vID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNpbXBs ZUxydVdyaXRlUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7CisJCWJ1ZmZlciA9IFpl cm9NdWx0aVhhY3RPZmZzZXRQYWdlKHBhZ2VubywgZmFsc2UpOworCQlGbHVzaE9uZUJ1ZmZlcihi dWZmZXIpOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJfQotCi0JTFdMb2NrUmVs ZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CiB9CiAKIC8qCkBAIC0yMDA3LDIxICsxOTk5 LDYgQEAgTWF5YmVFeHRlbmRPZmZzZXRTbHJ1KHZvaWQpCiB2b2lkCiBTdGFydHVwTXVsdGlYYWN0 KHZvaWQpCiB7Ci0JTXVsdGlYYWN0SWQgbXVsdGkgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0 OwotCU11bHRpWGFjdE9mZnNldCBvZmZzZXQgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldDsK LQlpbnQJCQlwYWdlbm87Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgb2Zmc2V0J3MgaWRlYSBvZiB0 aGUgbGF0ZXN0IHBhZ2UgbnVtYmVyLgotCSAqLwotCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZz ZXRQYWdlKG11bHRpKTsKLQlNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2Vf bnVtYmVyID0gcGFnZW5vOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIG1lbWJlcidzIGlkZWEgb2Yg dGhlIGxhdGVzdCBwYWdlIG51bWJlci4KLQkgKi8KLQlwYWdlbm8gPSBNWE9mZnNldFRvTWVtYmVy UGFnZShvZmZzZXQpOwotCU11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5sYXRlc3RfcGFnZV9u dW1iZXIgPSBwYWdlbm87CiB9CiAKIC8qCkBAIC0yMDQ1LDE0ICsyMDIyLDggQEAgVHJpbU11bHRp WGFjdCh2b2lkKQogCW9sZGVzdE1YYWN0REIgPSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0TXVsdGlY YWN0REI7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAotCS8qIENsZWFuIHVw IG9mZnNldHMgc3RhdGUgKi8KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVMb2Nr LCBMV19FWENMVVNJVkUpOwotCi0JLyoKLQkgKiAoUmUtKUluaXRpYWxpemUgb3VyIGlkZWEgb2Yg dGhlIGxhdGVzdCBwYWdlIG51bWJlciBmb3Igb2Zmc2V0cy4KLQkgKi8KIAlwYWdlbm8gPSBNdWx0 aVhhY3RJZFRvT2Zmc2V0UGFnZShuZXh0TVhhY3QpOwotCU11bHRpWGFjdE9mZnNldEN0bC0+c2hh cmVkLT5sYXRlc3RfcGFnZV9udW1iZXIgPSBwYWdlbm87CisJCiAKIAkvKgogCSAqIFplcm8gb3V0 IHRoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgb2Zmc2V0cyBwYWdlLiAgU2VlIG5vdGVzIGlu CkBAIC0yMDY1LDQ2ICsyMDM2LDM5IEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAllbnRyeW5vID0g TXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KG5leHRNWGFjdCk7CiAJaWYgKGVudHJ5bm8gIT0gMCkK IAl7Ci0JCWludAkJCXNsb3RubzsKIAkJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CisJCUJ1ZmZl cgkJYnVmZmVyOwogCi0JCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE9mZnNl dEN0bCwgcGFnZW5vLCB0cnVlLCBuZXh0TVhhY3QpOwotCQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zm c2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOwor CQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vu bywgUkJNX1RSSU0pOworCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZF KTsKKwkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSAoUGFnZUdldENvbnRlbnRzKEJ1ZmZl ckdldFBhZ2UoYnVmZmVyKSkpOwogCQlvZmZwdHIgKz0gZW50cnlubzsKIAotCQlNZW1TZXQob2Zm cHRyLCAwLCBCTENLU1ogLSAoZW50cnlubyAqIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpKSk7CisJ CU1lbVNldChvZmZwdHIsIDAsIEJMQ0tTWiAtIE1BWEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRh KSAtIChlbnRyeW5vICogc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpKTsKIAotCQlNdWx0aVhhY3RP ZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwkJTWFya0J1ZmZl ckRpcnR5KGJ1ZmZlcik7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAl9CiAKLQlM V0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsKLQotCS8qIEFuZCB0aGUgc2Ft ZSBmb3IgbWVtYmVycyAqLwotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2ss IExXX0VYQ0xVU0lWRSk7Ci0KLQkvKgotCSAqIChSZS0pSW5pdGlhbGl6ZSBvdXIgaWRlYSBvZiB0 aGUgbGF0ZXN0IHBhZ2UgbnVtYmVyIGZvciBtZW1iZXJzLgotCSAqLwotCXBhZ2VubyA9IE1YT2Zm c2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7Ci0JTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPmxh dGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKLQogCS8qCiAJICogWmVybyBvdXQgdGhlIHJlbWFp bmRlciBvZiB0aGUgY3VycmVudCBtZW1iZXJzIHBhZ2UuICBTZWUgbm90ZXMgaW4KIAkgKiBUcmlt Q0xPRygpIGZvciBtb3RpdmF0aW9uLgogCSAqLworCisJcGFnZW5vID0gTVhPZmZzZXRUb01lbWJl clBhZ2Uob2Zmc2V0KTsKIAlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQp OwogCWlmIChmbGFnc29mZiAhPSAwKQogCXsKLQkJaW50CQkJc2xvdG5vOwogCQlUcmFuc2FjdGlv bklkICp4aWRwdHI7CiAJCWludAkJCW1lbWJlcm9mZjsKKwkJQnVmZmVyCQlidWZmZXI7CiAKIAkJ bWVtYmVyb2ZmID0gTVhPZmZzZXRUb01lbWJlck9mZnNldChvZmZzZXQpOwotCQlzbG90bm8gPSBT aW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2VubywgdHJ1ZSwgb2Zmc2V0 KTsKLQkJeGlkcHRyID0gKFRyYW5zYWN0aW9uSWQgKikKLQkJCShNdWx0aVhhY3RNZW1iZXJDdGwt PnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIG1lbWJlcm9mZik7CisJCWJ1ZmZlciA9IFJl YWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgcGFnZW5vLCBSQk1fVFJJTSk7 CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCQl4aWRwdHIg PSAoVHJhbnNhY3Rpb25JZCAqKSAoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVy KSkgKyBtZW1iZXJvZmYpOwogCi0JCU1lbVNldCh4aWRwdHIsIDAsIEJMQ0tTWiAtIG1lbWJlcm9m Zik7CisJCU1lbVNldCh4aWRwdHIsIDAsIEJMQ0tTWiAtIG1lbWJlcm9mZiAtIE1BWEFMSUdOKFNp emVPZlBhZ2VIZWFkZXJEYXRhKSk7CiAKIAkJLyoKIAkJICogTm90ZTogd2UgZG9uJ3QgbmVlZCB0 byB6ZXJvIG91dCB0aGUgZmxhZyBiaXRzIGluIHRoZSByZW1haW5pbmcKQEAgLTIxMTIsMTEgKzIw NzYsMTAgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCQkgKiB3cml0aW5nLgogCQkgKi8KIAotCQlN dWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwkJ TWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsK IAl9CiAKLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrKTsKLQogCS8qIHNp Z25hbCB0aGF0IHdlJ3JlIG9mZmljaWFsbHkgdXAgKi8KIAlMV0xvY2tBY3F1aXJlKE11bHRpWGFj dEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0U3RhdGUtPmZpbmlzaGVkU3RhcnR1 cCA9IHRydWU7CkBAIC0yMTQ4LDI1ICsyMTExLDYgQEAgTXVsdGlYYWN0R2V0Q2hlY2twdE11bHRp KGJvb2wgaXNfc2h1dGRvd24sCiAJCQkJKm5leHRNdWx0aSwgKm5leHRNdWx0aU9mZnNldCwgKm9s ZGVzdE11bHRpLCAqb2xkZXN0TXVsdGlEQik7CiB9CiAKLS8qCi0gKiBQZXJmb3JtIGEgY2hlY2tw b2ludCAtLS0gZWl0aGVyIGR1cmluZyBzaHV0ZG93biwgb3Igb24tdGhlLWZseQotICovCi12b2lk Ci1DaGVja1BvaW50TXVsdGlYYWN0KHZvaWQpCi17Ci0JVFJBQ0VfUE9TVEdSRVNRTF9NVUxUSVhB Q1RfQ0hFQ0tQT0lOVF9TVEFSVCh0cnVlKTsKLQotCS8qCi0JICogV3JpdGUgZGlydHkgTXVsdGlY YWN0IHBhZ2VzIHRvIGRpc2suICBUaGlzIG1heSByZXN1bHQgaW4gc3luYyByZXF1ZXN0cwotCSAq IHF1ZXVlZCBmb3IgbGF0ZXIgaGFuZGxpbmcgYnkgUHJvY2Vzc1N5bmNSZXF1ZXN0cygpLCBhcyBw YXJ0IG9mIHRoZQotCSAqIGNoZWNrcG9pbnQuCi0JICovCi0JU2ltcGxlTHJ1V3JpdGVBbGwoTXVs dGlYYWN0T2Zmc2V0Q3RsLCB0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFsbChNdWx0aVhhY3RNZW1i ZXJDdGwsIHRydWUpOwotCi0JVFJBQ0VfUE9TVEdSRVNRTF9NVUxUSVhBQ1RfQ0hFQ0tQT0lOVF9E T05FKHRydWUpOwotfQotCiAvKgogICogU2V0IHRoZSBuZXh0LXRvLWJlLWFzc2lnbmVkIE11bHRp WGFjdElkIGFuZCBvZmZzZXQKICAqCkBAIC0yNDAxLDI2ICsyMzQ1LDMwIEBAIE11bHRpWGFjdEFk dmFuY2VPbGRlc3QoTXVsdGlYYWN0SWQgb2xkZXN0TXVsdGksIE9pZCBvbGRlc3RNdWx0aURCKQog ICogcm9vbSBpbiBzaGFyZWQgbWVtb3J5LgogICovCiBzdGF0aWMgdm9pZAotRXh0ZW5kTXVsdGlY YWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKQorRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRp WGFjdElkIG11bHRpLCBCdWZmZXIgKiBidWZmZXIpCiB7CiAJaW50CQkJcGFnZW5vOwogCisKIAkv KgotCSAqIE5vIHdvcmsgZXhjZXB0IGF0IGZpcnN0IE11bHRpWGFjdElkIG9mIGEgcGFnZS4gIEJ1 dCBiZXdhcmU6IGp1c3QgYWZ0ZXIKLQkgKiB3cmFwYXJvdW5kLCB0aGUgZmlyc3QgTXVsdGlYYWN0 SWQgb2YgcGFnZSB6ZXJvIGlzIEZpcnN0TXVsdGlYYWN0SWQuCisJICogTWFrZSBhIFJlYWRCdWZm ZXIgY2FsbCBmb3IgdGhlIHBhZ2Ugd2UgbmVlZCBiZWZvcmVoYW5kIHNvIHRoYXQgd2UgZG9uJ3Qg bmVlZAorCSAqIHRvIG1hbGxvYyBsYXRlci4KKwkgKiBJZiB3ZSdyZSBhdCB0aGUgZmlyc3QgTXVs dGlYYWN0SWQgb2YgYSBwYWdlLCBtYWtlIHN1cmUgd2UgYWxzbyB6ZXJvIHRoZSBwYWdlCiAJICov CisKKwlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7CiAJaWYgKE11bHRp WGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSkgIT0gMCAmJgogCQltdWx0aSAhPSBGaXJzdE11bHRp WGFjdElkKQorCXsKKwkJLyogbWFrZSBhIHJlYWQgYnVmZmVyIGNhbGwgdG8gZW5sYXJnZSB0aGUg cmVzb3VyY2Ugb3duZXIgKi8KKwkJKmJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElY QUNUX09GRlNFVF9JRCwgcGFnZW5vLCBSQk1fTk9STUFMKTsKIAkJcmV0dXJuOwotCi0JcGFnZW5v ID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOwotCi0JTFdMb2NrQWNxdWlyZShNdWx0 aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qIFplcm8gdGhlIHBhZ2Ug YW5kIG1ha2UgYW4gWExPRyBlbnRyeSBhYm91dCBpdCAqLwotCVplcm9NdWx0aVhhY3RPZmZzZXRQ YWdlKHBhZ2VubywgdHJ1ZSk7Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVM b2NrKTsKKwl9IGVsc2UKKwl7CisJCS8qIFplcm8gdGhlIHBhZ2UgYW5kIG1ha2UgYW4gWExPRyBl bnRyeSBhYm91dCBpdCAqLworCQkqYnVmZmVyID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFn ZW5vLCB0cnVlKTsKKwkJTG9ja0J1ZmZlcigqYnVmZmVyLCBCVUZGRVJfTE9DS19VTkxPQ0spOyAv KiByZWxlYXNlIGxvY2sgYnV0IGRvbid0IHVucGluICovCisJfQogfQogCiAvKgpAQCAtMjQzMSw3 ICsyMzc5LDcgQEAgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKQogICog c2FtZSBjb21tZW50cyBhcHBseS4KICAqLwogc3RhdGljIHZvaWQKLUV4dGVuZE11bHRpWGFjdE1l bWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMpCitFeHRlbmRNdWx0aVhh Y3RNZW1iZXIoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwgaW50IG5tZW1iZXJzLCBCdWZmZXIgKiog YnVmZmVycykKIHsKIAkvKgogCSAqIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgbWVtYmVycyBzcGFu IG1vcmUgdGhhbiBvbmUgcGFnZSBvZiB0aGUgbWVtYmVycwpAQCAtMjQzOSwxMCArMjM4NywxNyBA QCBFeHRlbmRNdWx0aVhhY3RNZW1iZXIoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwgaW50IG5tZW1i ZXJzKQogCSAqIG9wdGltYWwgaWYgdGhlIG1lbWJlcnMgc3BhbiBzZXZlcmFsIHBhZ2VzLCBidXQg dGhhdCBzZWVtcyB1bnVzdWFsCiAJICogZW5vdWdoIHRvIG5vdCB3b3JyeSBtdWNoIGFib3V0Lgog CSAqLworCWludCBtaW5fcGFnZW5vOworCisJbWluX3BhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQ YWdlKG9mZnNldCk7CiAJd2hpbGUgKG5tZW1iZXJzID4gMCkKIAl7CisJCUJ1ZmZlciBidWY7CisK IAkJaW50CQkJZmxhZ3NvZmY7CiAJCWludAkJCWZsYWdzYml0OworCQlpbnQJCQlwYWdlbm87CisK IAkJdWludDMyCQlkaWZmZXJlbmNlOwogCiAJCS8qCkBAIC0yNDUwLDIwICsyNDA1LDI0IEBAIEV4 dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMp CiAJCSAqLwogCQlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOwogCQlm bGFnc2JpdCA9IE1YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNldCk7CisJCXBhZ2VubyA9IE1Y T2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7CisJCQorCQkKKwkJCiAJCWlmIChmbGFnc29mZiA9 PSAwICYmIGZsYWdzYml0ID09IDApCiAJCXsKLQkJCWludAkJCXBhZ2VubzsKLQotCQkJcGFnZW5v ID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsKLQotCQkJTFdMb2NrQWNxdWlyZShNdWx0 aVhhY3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCQkJLyogWmVybyB0aGUgcGFn ZSBhbmQgbWFrZSBhbiBYTE9HIGVudHJ5IGFib3V0IGl0ICovCi0JCQlaZXJvTXVsdGlYYWN0TWVt YmVyUGFnZShwYWdlbm8sIHRydWUpOwotCi0JCQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJl clNMUlVMb2NrKTsKKwkJCWJ1ZiA9IFplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKHBhZ2VubywgdHJ1 ZSk7CisJCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJfSBlbHNlCisJ CXsKKwkJCS8qIGRvIGEgcmVhZCBidWZmZXIgY2FsbCB0byBhbGxvY2F0ZSBzcGFjZSBiZWZvcmVo YW5kICovCisJCQlidWYgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQs IHBhZ2VubywgUkJNX05PUk1BTCk7CiAJCX0KIAorCQlpZiAoYnVmZmVycykKKwkJCSgqYnVmZmVy cylbcGFnZW5vIC0gbWluX3BhZ2Vub10gPSBidWY7CisKIAkJLyoKIAkJICogQ29tcHV0ZSB0aGUg bnVtYmVyIG9mIGl0ZW1zIHRpbGwgZW5kIG9mIGN1cnJlbnQgcGFnZS4gIENhcmVmdWw6IGlmCiAJ CSAqIGFkZGl0aW9uIG9mIHVuc2lnbmVkIGludHMgd3JhcHMgYXJvdW5kLCB3ZSdyZSBhdCB0aGUg bGFzdCBwYWdlIG9mCkBAIC0yNzM3LDggKzI2OTYsOCBAQCBmaW5kX211bHRpeGFjdF9zdGFydChN dWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpCiAJTXVsdGlYYWN0T2Zm c2V0IG9mZnNldDsKIAlpbnQJCQlwYWdlbm87CiAJaW50CQkJZW50cnlubzsKLQlpbnQJCQlzbG90 bm87CiAJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CisJQnVmZmVyCQlidWZmZXI7CiAKIAlBc3Nl cnQoTXVsdGlYYWN0U3RhdGUtPmZpbmlzaGVkU3RhcnR1cCk7CiAKQEAgLTI3NDYsMjAgKzI3MDUs MTkgQEAgZmluZF9tdWx0aXhhY3Rfc3RhcnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9m ZnNldCAqcmVzdWx0KQogCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkobXVsdGkp OwogCiAJLyoKLQkgKiBXcml0ZSBvdXQgZGlydHkgZGF0YSwgc28gUGh5c2ljYWxQYWdlRXhpc3Rz IGNhbiB3b3JrIGNvcnJlY3RseS4KKwkgKiBDb3BlIHdpdGggbWlzc2luZy9ib2d1cyBvbGRlc3Qg TXVsdGlYYWN0IGluIGluY29uc2lzdGVudCBzdGF0ZXMgKHNlZQorCSAqIGNvbW1pdCAwNjhjZmFk ZjkpLgogCSAqLwotCVNpbXBsZUxydVdyaXRlQWxsKE11bHRpWGFjdE9mZnNldEN0bCwgdHJ1ZSk7 Ci0JU2ltcGxlTHJ1V3JpdGVBbGwoTXVsdGlYYWN0TWVtYmVyQ3RsLCB0cnVlKTsKLQotCWlmICgh U2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5v KSkKKwlpZiAoIVByb2JlU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vu bykgJiYKKwkJIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTTFJVX01VTFRJWEFDVF9P RkZTRVRfSUQsIHBhZ2VubykpCiAJCXJldHVybiBmYWxzZTsKIAotCS8qIGxvY2sgaXMgYWNxdWly ZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkgKi8KLQlzbG90bm8gPSBTaW1wbGVMcnVS ZWFkUGFnZV9SZWFkT25seShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgbXVsdGkpOwotCW9m ZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBh Z2VfYnVmZmVyW3Nsb3Rub107CisJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhB Q1RfT0ZGU0VUX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOworCUxvY2tCdWZmZXIoYnVmZmVyLCBC VUZGRVJfTE9DS19TSEFSRSk7CisJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSAoUGFnZUdl dENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkpOwogCW9mZnB0ciArPSBlbnRyeW5vOwog CW9mZnNldCA9ICpvZmZwdHI7Ci0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9j ayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJKnJlc3VsdCA9IG9mZnNldDsK IAlyZXR1cm4gdHJ1ZTsKQEAgLTI4NjIsMTIgKzI4MjAsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgbXh0 cnVuY2luZm8KICAqCQlUaGlzIGNhbGxiYWNrIGRldGVybWluZXMgdGhlIGVhcmxpZXN0IGV4aXN0 aW5nIHBhZ2UgbnVtYmVyLgogICovCiBzdGF0aWMgYm9vbAotU2xydVNjYW5EaXJDYkZpbmRFYXJs aWVzdChTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRh KQorU2xydVNjYW5EaXJDYkZpbmRFYXJsaWVzdChpbnQgc2xydV9pZCwgU2xydVBhZ2VQcmVjZWRl c0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCSAgY2hhciAqZmlsZW5hbWUsIGludCBzZWdw YWdlLCB2b2lkICpkYXRhKQogewogCW14dHJ1bmNpbmZvICp0cnVuYyA9IChteHRydW5jaW5mbyAq KSBkYXRhOwogCiAJaWYgKHRydW5jLT5lYXJsaWVzdEV4aXN0aW5nUGFnZSA9PSAtMSB8fAotCQlj dGwtPlBhZ2VQcmVjZWRlcyhzZWdwYWdlLCB0cnVuYy0+ZWFybGllc3RFeGlzdGluZ1BhZ2UpKQor CQlQYWdlUHJlY2VkZXMoc2VncGFnZSwgdHJ1bmMtPmVhcmxpZXN0RXhpc3RpbmdQYWdlKSkKIAl7 CiAJCXRydW5jLT5lYXJsaWVzdEV4aXN0aW5nUGFnZSA9IHNlZ3BhZ2U7CiAJfQpAQCAtMjg5OSw3 ICsyODU4LDcgQEAgUGVyZm9ybU1lbWJlcnNUcnVuY2F0aW9uKE11bHRpWGFjdE9mZnNldCBvbGRl c3RPZmZzZXQsIE11bHRpWGFjdE9mZnNldCBuZXdPbGRlc3QKIAl3aGlsZSAoc2VnbWVudCAhPSBl bmRzZWdtZW50KQogCXsKIAkJZWxvZyhERUJVRzIsICJ0cnVuY2F0aW5nIG11bHRpeGFjdCBtZW1i ZXJzIHNlZ21lbnQgJXgiLCBzZWdtZW50KTsKLQkJU2xydURlbGV0ZVNlZ21lbnQoTXVsdGlYYWN0 TWVtYmVyQ3RsLCBzZWdtZW50KTsKKwkJU2xydURlbGV0ZVNlZ21lbnQoU0xSVV9NVUxUSVhBQ1Rf TUVNQkVSX0lELCBzZWdtZW50KTsKIAogCQkvKiBtb3ZlIHRvIG5leHQgc2VnbWVudCwgaGFuZGxp bmcgd3JhcGFyb3VuZCBjb3JyZWN0bHkgKi8KIAkJaWYgKHNlZ21lbnQgPT0gbWF4c2VnbWVudCkK QEAgLTI5MjIsNyArMjg4MSw4IEBAIFBlcmZvcm1PZmZzZXRzVHJ1bmNhdGlvbihNdWx0aVhhY3RJ ZCBvbGRlc3RNdWx0aSwgTXVsdGlYYWN0SWQgbmV3T2xkZXN0TXVsdGkpCiAJICogZGlkbid0IHN1 YnRyYWN0IG9uZSwgd2UnZCB0cmlnZ2VyIFNpbXBsZUxydVRydW5jYXRlJ3Mgd3JhcGFyb3VuZAog CSAqIGRldGVjdGlvbi4KIAkgKi8KLQlTaW1wbGVMcnVUcnVuY2F0ZShNdWx0aVhhY3RPZmZzZXRD dGwsCisJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELAorCQkJCQkg IE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcywKIAkJCQkJICBNdWx0aVhhY3RJZFRvT2Zmc2V0 UGFnZShQcmV2aW91c011bHRpWGFjdElkKG5ld09sZGVzdE11bHRpKSkpOwogfQogCkBAIC0yOTk2 LDcgKzI5NTYsOSBAQCBUcnVuY2F0ZU11bHRpWGFjdChNdWx0aVhhY3RJZCBuZXdPbGRlc3RNdWx0 aSwgT2lkIG5ld09sZGVzdE11bHRpREIpCiAJICogYmVlbiB0cnVuY2F0ZWQgYXdheSwgYW5kIHdl IGNyYXNoZWQgYmVmb3JlIHVwZGF0aW5nIG9sZGVzdE11bHRpLgogCSAqLwogCXRydW5jLmVhcmxp ZXN0RXhpc3RpbmdQYWdlID0gLTE7Ci0JU2xydVNjYW5EaXJlY3RvcnkoTXVsdGlYYWN0T2Zmc2V0 Q3RsLCBTbHJ1U2NhbkRpckNiRmluZEVhcmxpZXN0LCAmdHJ1bmMpOworCVNscnVTY2FuRGlyZWN0 b3J5KFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwKKwkJCQkJICBNdWx0aVhhY3RPZmZzZXRQYWdl UHJlY2VkZXMsCisJCQkJCSAgU2xydVNjYW5EaXJDYkZpbmRFYXJsaWVzdCwgJnRydW5jKTsKIAll YXJsaWVzdCA9IHRydW5jLmVhcmxpZXN0RXhpc3RpbmdQYWdlICogTVVMVElYQUNUX09GRlNFVFNf UEVSX1BBR0U7CiAJaWYgKGVhcmxpZXN0IDwgRmlyc3RNdWx0aVhhY3RJZCkKIAkJZWFybGllc3Qg PSBGaXJzdE11bHRpWGFjdElkOwpAQCAtMzEyOCwyNCArMzA5MCw2IEBAIE11bHRpWGFjdE9mZnNl dFBhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMikKIAkJCQkJCQkJbXVsdGkyICsgTVVM VElYQUNUX09GRlNFVFNfUEVSX1BBR0UgLSAxKSk7CiB9CiAKLS8qCi0gKiBEZWNpZGUgd2hldGhl ciBhIE11bHRpWGFjdE1lbWJlciBwYWdlIG51bWJlciBpcyAib2xkZXIiIGZvciB0cnVuY2F0aW9u Ci0gKiBwdXJwb3Nlcy4gIFRoZXJlIGlzIG5vICJpbnZhbGlkIG9mZnNldCBudW1iZXIiIHNvIHVz ZSB0aGUgbnVtYmVycyB2ZXJiYXRpbS4KLSAqLwotc3RhdGljIGJvb2wKLU11bHRpWGFjdE1lbWJl clBhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMikKLXsKLQlNdWx0aVhhY3RPZmZzZXQg b2Zmc2V0MTsKLQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MjsKLQotCW9mZnNldDEgPSAoKE11bHRp WGFjdE9mZnNldCkgcGFnZTEpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Ci0Jb2Zmc2V0 MiA9ICgoTXVsdGlYYWN0T2Zmc2V0KSBwYWdlMikgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFH RTsKLQotCXJldHVybiAoTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMob2Zmc2V0MSwgb2Zmc2V0Mikg JiYKLQkJCU11bHRpWGFjdE9mZnNldFByZWNlZGVzKG9mZnNldDEsCi0JCQkJCQkJCQlvZmZzZXQy ICsgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgLSAxKSk7Ci19Ci0KIC8qCiAgKiBEZWNpZGUg d2hpY2ggb2YgdHdvIE11bHRpWGFjdElkcyBpcyBlYXJsaWVyLgogICoKQEAgLTMxOTAsMTIgKzMx MzQsMTYgQEAgTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDEs IE11bHRpWGFjdE9mZnNldCBvZmZzZXQyKQogICogV3JpdGUgYW4geGxvZyByZWNvcmQgcmVmbGVj dGluZyB0aGUgemVyb2luZyBvZiBlaXRoZXIgYSBNRU1CRVJzIG9yCiAgKiBPRkZTRVRzIHBhZ2Ug KGluZm8gc2hvd3Mgd2hpY2gpCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgWExvZ1JlY1B0ciAK IFdyaXRlTVplcm9QYWdlWGxvZ1JlYyhpbnQgcGFnZW5vLCB1aW50OCBpbmZvKQogeworCVhMb2dS ZWNQdHIgcmVjcHRyOworCQogCVhMb2dCZWdpbkluc2VydCgpOwogCVhMb2dSZWdpc3RlckRhdGEo KGNoYXIgKikgKCZwYWdlbm8pLCBzaXplb2YoaW50KSk7Ci0JKHZvaWQpIFhMb2dJbnNlcnQoUk1f TVVMVElYQUNUX0lELCBpbmZvKTsKKwlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX01VTFRJWEFDVF9J RCwgaW5mbyk7CisKKwlyZXR1cm4gcmVjcHRyOwogfQogCiAvKgpAQCAtMzI0MCwzMiArMzE4OCwx OCBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAlpZiAoaW5mbyA9 PSBYTE9HX01VTFRJWEFDVF9aRVJPX09GRl9QQUdFKQogCXsKIAkJaW50CQkJcGFnZW5vOwotCQlp bnQJCQlzbG90bm87CiAKIAkJbWVtY3B5KCZwYWdlbm8sIFhMb2dSZWNHZXREYXRhKHJlY29yZCks IHNpemVvZihpbnQpKTsKIAotCQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVMb2Nr LCBMV19FWENMVVNJVkUpOwotCi0JCXNsb3RubyA9IFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKHBh Z2VubywgZmFsc2UpOwotCQlTaW1wbGVMcnVXcml0ZVBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBz bG90bm8pOwotCQlBc3NlcnQoIU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5 W3Nsb3Rub10pOwotCi0JCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOwor CQlVbmxvY2tSZWxlYXNlQnVmZmVyKFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKHBhZ2VubywgZmFs c2UpKTsKIAl9CiAJZWxzZSBpZiAoaW5mbyA9PSBYTE9HX01VTFRJWEFDVF9aRVJPX01FTV9QQUdF KQogCXsKIAkJaW50CQkJcGFnZW5vOwotCQlpbnQJCQlzbG90bm87CiAKIAkJbWVtY3B5KCZwYWdl bm8sIFhMb2dSZWNHZXREYXRhKHJlY29yZCksIHNpemVvZihpbnQpKTsKIAotCQlMV0xvY2tBY3F1 aXJlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JCXNsb3RubyA9 IFplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKHBhZ2VubywgZmFsc2UpOwotCQlTaW1wbGVMcnVXcml0 ZVBhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBzbG90bm8pOwotCQlBc3NlcnQoIU11bHRpWGFjdE1l bWJlckN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwotCi0JCUxXTG9ja1JlbGVhc2Uo TXVsdGlYYWN0TWVtYmVyU0xSVUxvY2spOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKFplcm9NdWx0 aVhhY3RNZW1iZXJQYWdlKHBhZ2VubywgZmFsc2UpKTsKIAl9CiAJZWxzZSBpZiAoaW5mbyA9PSBY TE9HX01VTFRJWEFDVF9DUkVBVEVfSUQpCiAJewpAQCAtMzI3Niw3ICszMjEwLDcgQEAgbXVsdGl4 YWN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJLyogU3RvcmUgdGhlIGRhdGEg YmFjayBpbnRvIHRoZSBTTFJVIGZpbGVzICovCiAJCVJlY29yZE5ld011bHRpWGFjdCh4bHJlYy0+ bWlkLCB4bHJlYy0+bW9mZiwgeGxyZWMtPm5tZW1iZXJzLAotCQkJCQkJICAgeGxyZWMtPm1lbWJl cnMpOworCQkJCQkJICAgeGxyZWMtPm1lbWJlcnMsIE5VTEwsIE5VTEwpOwogCiAJCS8qIE1ha2Ug c3VyZSBuZXh0TVhhY3QvbmV4dE9mZnNldCBhcmUgYmV5b25kIHdoYXQgdGhpcyByZWNvcmQgaGFz ICovCiAJCU11bHRpWGFjdEFkdmFuY2VOZXh0TVhhY3QoeGxyZWMtPm1pZCArIDEsCkBAIC0zMjk5 LDcgKzMyMzMsNiBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAll bHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElYQUNUX1RSVU5DQVRFX0lEKQogCXsKIAkJeGxfbXVs dGl4YWN0X3RydW5jYXRlIHhscmVjOwotCQlpbnQJCQlwYWdlbm87CiAKIAkJbWVtY3B5KCZ4bHJl YywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwKIAkJCSAgIFNpemVPZk11bHRpWGFjdFRydW5jYXRl KTsKQEAgLTMzMjUsMTMgKzMyNTgsNiBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCkKIAogCQlQZXJmb3JtTWVtYmVyc1RydW5jYXRpb24oeGxyZWMuc3RhcnRUcnVuY01l bWIsIHhscmVjLmVuZFRydW5jTWVtYik7CiAKLQkJLyoKLQkJICogRHVyaW5nIFhMT0cgcmVwbGF5 LCBsYXRlc3RfcGFnZV9udW1iZXIgaXNuJ3QgbmVjZXNzYXJpbHkgc2V0IHVwCi0JCSAqIHlldDsg aW5zZXJ0IGEgc3VpdGFibGUgdmFsdWUgdG8gYnlwYXNzIHRoZSBzYW5pdHkgdGVzdCBpbgotCQkg KiBTaW1wbGVMcnVUcnVuY2F0ZS4KLQkJICovCi0JCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZz ZXRQYWdlKHhscmVjLmVuZFRydW5jT2ZmKTsKLQkJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQt PmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKIAkJUGVyZm9ybU9mZnNldHNUcnVuY2F0aW9u KHhscmVjLnN0YXJ0VHJ1bmNPZmYsIHhscmVjLmVuZFRydW5jT2ZmKTsKIAogCQlMV0xvY2tSZWxl YXNlKE11bHRpWGFjdFRydW5jYXRpb25Mb2NrKTsKQEAgLTM0MDEsMjEgKzMzMjcsMyBAQCBwZ19n ZXRfbXVsdGl4YWN0X21lbWJlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAogCVNSRl9SRVRVUk5fRE9O RShmdW5jY3h0KTsKIH0KLQotLyoKLSAqIEVudHJ5cG9pbnQgZm9yIHN5bmMuYyB0byBzeW5jIG9m ZnNldHMgZmlsZXMuCi0gKi8KLWludAotbXVsdGl4YWN0b2Zmc2V0c3N5bmNmaWxldGFnKGNvbnN0 IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpCi17Ci0JcmV0dXJuIFNscnVTeW5jRmlsZVRhZyhN dWx0aVhhY3RPZmZzZXRDdGwsIGZ0YWcsIHBhdGgpOwotfQotCi0vKgotICogRW50cnlwb2ludCBm b3Igc3luYy5jIHRvIHN5bmMgbWVtYmVycyBmaWxlcy4KLSAqLwotaW50Ci1tdWx0aXhhY3RtZW1i ZXJzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKLXsKLQlyZXR1 cm4gU2xydVN5bmNGaWxlVGFnKE11bHRpWGFjdE1lbWJlckN0bCwgZnRhZywgcGF0aCk7Ci19CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKaW5kZXggNWFiODYyMzhhOTIuLjAwZjE3OGM0MjkzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCkBAIC0xLDQxICsxLDkgQEAKIC8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICoKICAqIHNscnUuYwotICoJCVNpbXBsZSBMUlUgYnVmZmVyaW5nIGZvciB0cmFu c2FjdGlvbiBzdGF0dXMgbG9nZmlsZXMKKyAqCQlTaW1wbGUgYnVmZmVyaW5nIGZvciB0cmFuc2Fj dGlvbiBzdGF0dXMgbG9nZmlsZXMKICAqCi0gKiBXZSB1c2UgYSBzaW1wbGUgbGVhc3QtcmVjZW50 bHktdXNlZCBzY2hlbWUgdG8gbWFuYWdlIGEgcG9vbCBvZiBwYWdlCi0gKiBidWZmZXJzLiAgVW5k ZXIgb3JkaW5hcnkgY2lyY3Vtc3RhbmNlcyB3ZSBleHBlY3QgdGhhdCB3cml0ZQotICogdHJhZmZp YyB3aWxsIG9jY3VyIG1vc3RseSB0byB0aGUgbGF0ZXN0IHBhZ2UgKGFuZCB0byB0aGUganVzdC1w cmlvcgotICogcGFnZSwgc29vbiBhZnRlciBhIHBhZ2UgdHJhbnNpdGlvbikuICBSZWFkIHRyYWZm aWMgd2lsbCBwcm9iYWJseSB0b3VjaAotICogYSBsYXJnZXIgc3BhbiBvZiBwYWdlcywgYnV0IGlu IGFueSBjYXNlIGEgZmFpcmx5IHNtYWxsIG51bWJlciBvZiBwYWdlCi0gKiBidWZmZXJzIHNob3Vs ZCBiZSBzdWZmaWNpZW50LiAgU28sIHdlIGp1c3Qgc2VhcmNoIHRoZSBidWZmZXJzIHVzaW5nIHBs YWluCi0gKiBsaW5lYXIgc2VhcmNoOyB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgaGFzaHRhYmxlIG9y IGFueXRoaW5nIGZhbmN5LgotICogVGhlIG1hbmFnZW1lbnQgYWxnb3JpdGhtIGlzIHN0cmFpZ2h0 IExSVSBleGNlcHQgdGhhdCB3ZSB3aWxsIG5ldmVyIHN3YXAKLSAqIG91dCB0aGUgbGF0ZXN0IHBh Z2UgKHNpbmNlIHdlIGtub3cgaXQncyBnb2luZyB0byBiZSBoaXQgYWdhaW4gZXZlbnR1YWxseSku Ci0gKgotICogV2UgdXNlIGEgY29udHJvbCBMV0xvY2sgdG8gcHJvdGVjdCB0aGUgc2hhcmVkIGRh dGEgc3RydWN0dXJlcywgcGx1cwotICogcGVyLWJ1ZmZlciBMV0xvY2tzIHRoYXQgc3luY2hyb25p emUgSS9PIGZvciBlYWNoIGJ1ZmZlci4gIFRoZSBjb250cm9sIGxvY2sKLSAqIG11c3QgYmUgaGVs ZCB0byBleGFtaW5lIG9yIG1vZGlmeSBhbnkgc2hhcmVkIHN0YXRlLiAgQSBwcm9jZXNzIHRoYXQg aXMKLSAqIHJlYWRpbmcgaW4gb3Igd3JpdGluZyBvdXQgYSBwYWdlIGJ1ZmZlciBkb2VzIG5vdCBo b2xkIHRoZSBjb250cm9sIGxvY2ssCi0gKiBvbmx5IHRoZSBwZXItYnVmZmVyIGxvY2sgZm9yIHRo ZSBidWZmZXIgaXQgaXMgd29ya2luZyBvbi4KLSAqCi0gKiAiSG9sZGluZyB0aGUgY29udHJvbCBs b2NrIiBtZWFucyBleGNsdXNpdmUgbG9jayBpbiBhbGwgY2FzZXMgZXhjZXB0IGZvcgotICogU2lt cGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoKTsgc2VlIGNvbW1lbnRzIGZvciBTbHJ1UmVjZW50bHlV c2VkKCkgZm9yCi0gKiB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQuCi0gKgotICogV2hlbiBpbml0 aWF0aW5nIEkvTyBvbiBhIGJ1ZmZlciwgd2UgYWNxdWlyZSB0aGUgcGVyLWJ1ZmZlciBsb2NrIGV4 Y2x1c2l2ZWx5Ci0gKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjb250cm9sIGxvY2suICBUaGUgcGVy LWJ1ZmZlciBsb2NrIGlzIHJlbGVhc2VkIGFmdGVyCi0gKiBjb21wbGV0aW5nIHRoZSBJL08sIHJl LWFjcXVpcmluZyB0aGUgY29udHJvbCBsb2NrLCBhbmQgdXBkYXRpbmcgdGhlIHNoYXJlZAotICog c3RhdGUuICAoRGVhZGxvY2sgaXMgbm90IHBvc3NpYmxlIGhlcmUsIGJlY2F1c2Ugd2UgbmV2ZXIg dHJ5IHRvIGluaXRpYXRlCi0gKiBJL08gd2hlbiBzb21lb25lIGVsc2UgaXMgYWxyZWFkeSBkb2lu ZyBJL08gb24gdGhlIHNhbWUgYnVmZmVyLikKLSAqIFRvIHdhaXQgZm9yIEkvTyB0byBjb21wbGV0 ZSwgcmVsZWFzZSB0aGUgY29udHJvbCBsb2NrLCBhY3F1aXJlIHRoZQotICogcGVyLWJ1ZmZlciBs b2NrIGluIHNoYXJlZCBtb2RlLCBpbW1lZGlhdGVseSByZWxlYXNlIHRoZSBwZXItYnVmZmVyIGxv Y2ssCi0gKiByZWFjcXVpcmUgdGhlIGNvbnRyb2wgbG9jaywgYW5kIHRoZW4gcmVjaGVjayBzdGF0 ZSAoc2luY2UgYXJiaXRyYXJ5IHRoaW5ncwotICogY291bGQgaGF2ZSBoYXBwZW5lZCB3aGlsZSB3 ZSBkaWRuJ3QgaGF2ZSB0aGUgbG9jaykuCi0gKgotICogQXMgd2l0aCB0aGUgcmVndWxhciBidWZm ZXIgbWFuYWdlciwgaXQgaXMgcG9zc2libGUgZm9yIGFub3RoZXIgcHJvY2VzcwotICogdG8gcmUt ZGlydHkgYSBwYWdlIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHdyaXR0ZW4gb3V0LiAgVGhpcyBp cyBoYW5kbGVkCi0gKiBieSByZS1zZXR0aW5nIHRoZSBwYWdlJ3MgcGFnZV9kaXJ0eSBmbGFnLgor ICogWFhYIHdyaXRlIG1lCiAgKgogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0y MDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cApAQCAtNjAsNTYyICsyOCwz NCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgi CiAKLSNkZWZpbmUgU2xydUZpbGVOYW1lKGN0bCwgcGF0aCwgc2VnKSBcCi0Jc25wcmludGYocGF0 aCwgTUFYUEdQQVRILCAiJXMvJTA0WCIsIChjdGwpLT5EaXIsIHNlZykKLQogLyoKLSAqIER1cmlu ZyBTaW1wbGVMcnVXcml0ZUFsbCgpLCB3ZSB3aWxsIHVzdWFsbHkgbm90IG5lZWQgdG8gd3JpdGUg bW9yZSB0aGFuIG9uZQotICogb3IgdHdvIHBoeXNpY2FsIGZpbGVzLCBidXQgd2UgbWF5IG5lZWQg dG8gd3JpdGUgc2V2ZXJhbCBwYWdlcyBwZXIgZmlsZS4gIFdlCi0gKiBjYW4gY29uc29saWRhdGUg dGhlIEkvTyByZXF1ZXN0cyBieSBsZWF2aW5nIGZpbGVzIG9wZW4gdW50aWwgY29udHJvbCByZXR1 cm5zCi0gKiB0byBTaW1wbGVMcnVXcml0ZUFsbCgpLiAgVGhpcyBkYXRhIHN0cnVjdHVyZSByZW1l bWJlcnMgd2hpY2ggZmlsZXMgYXJlIG9wZW4uCisgKiBTTFJVIElEIHRvIHBhdGggbWFwcGluZwog ICovCi0jZGVmaW5lIE1BWF9XUklURUFMTF9CVUZGRVJTCTE2CisjZGVmaW5lIFBHX1NMUlUoc3lt bmFtZSxuYW1lLHBhdGgsc3luY2hyb25pemUpIFwKKwlwYXRoLAogCi10eXBlZGVmIHN0cnVjdCBT bHJ1V3JpdGVBbGxEYXRhCitzdGF0aWMgY2hhciAqc2xydV9kaXJzW10gPQogewotCWludAkJCW51 bV9maWxlczsJCS8qICMgZmlsZXMgYWN0dWFsbHkgb3BlbiAqLwotCWludAkJCWZkW01BWF9XUklU RUFMTF9CVUZGRVJTXTsJLyogdGhlaXIgRkQncyAqLwotCWludAkJCXNlZ25vW01BWF9XUklURUFM TF9CVUZGRVJTXTsJLyogdGhlaXIgbG9nIHNlZyNzICovCi19IFNscnVXcml0ZUFsbERhdGE7Ci0K LXR5cGVkZWYgc3RydWN0IFNscnVXcml0ZUFsbERhdGEgKlNscnVXcml0ZUFsbDsKKyNpbmNsdWRl ICJhY2Nlc3Mvc2xydWxpc3QuaCIKK307CiAKIC8qCi0gKiBQb3B1bGF0ZSBhIGZpbGUgdGFnIGRl c2NyaWJpbmcgYSBzZWdtZW50IGZpbGUuICBXZSBvbmx5IHVzZSB0aGUgc2VnbWVudAotICogbnVt YmVyLCBzaW5jZSB3ZSBjYW4gZGVyaXZlIGV2ZXJ5dGhpbmcgZWxzZSB3ZSBuZWVkIGJ5IGhhdmlu ZyBzZXBhcmF0ZQotICogc3luYyBoYW5kbGVyIGZ1bmN0aW9ucyBmb3IgY2xvZywgbXVsdGl4YWN0 IGV0Yy4KKyAqIFdlJ2xsIG1haW50YWluIGEgbGl0dGxlIGNhY2hlIG9mIHJlY2VudGx5IHNlZW4g YnVmZmVycywgdG8gdHJ5IHRvIGF2b2lkIHRoZQorICogYnVmZmVyIG1hcHBpbmcgdGFibGUgb24g cmVwZWF0IGFjY2VzcyAoaWUgdGhlIGJ1c3kgZW5kIG9mIHRoZSBDTE9HKS4gIE9uZQorICogZW50 cnkgcGVyIFNMUlUuCiAgKi8KLSNkZWZpbmUgSU5JVF9TTFJVRklMRVRBRyhhLHh4X2hhbmRsZXIs eHhfc2Vnbm8pIFwKLSggXAotCW1lbXNldCgmKGEpLCAwLCBzaXplb2YoRmlsZVRhZykpLCBcCi0J KGEpLmhhbmRsZXIgPSAoeHhfaGFuZGxlciksIFwKLQkoYSkuc2Vnbm8gPSAoeHhfc2Vnbm8pIFwK LSkKLQotLyoKLSAqIE1hY3JvIHRvIG1hcmsgYSBidWZmZXIgc2xvdCAibW9zdCByZWNlbnRseSB1 c2VkIi4gIE5vdGUgbXVsdGlwbGUgZXZhbHVhdGlvbgotICogb2YgYXJndW1lbnRzIQotICoKLSAq IFRoZSByZWFzb24gZm9yIHRoZSBpZi10ZXN0IGlzIHRoYXQgdGhlcmUgYXJlIG9mdGVuIG1hbnkg Y29uc2VjdXRpdmUKLSAqIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIHBhZ2UgKHBhcnRpY3VsYXJseSB0 aGUgbGF0ZXN0IHBhZ2UpLiAgQnkgc3VwcHJlc3NpbmcKLSAqIHVzZWxlc3MgaW5jcmVtZW50cyBv ZiBjdXJfbHJ1X2NvdW50LCB3ZSByZWR1Y2UgdGhlIHByb2JhYmlsaXR5IHRoYXQgb2xkCi0gKiBw YWdlcycgY291bnRzIHdpbGwgIndyYXAgYXJvdW5kIiBhbmQgbWFrZSB0aGVtIGFwcGVhciByZWNl bnRseSB1c2VkLgotICoKLSAqIFdlIGFsbG93IHRoaXMgY29kZSB0byBiZSBleGVjdXRlZCBjb25j dXJyZW50bHkgYnkgbXVsdGlwbGUgcHJvY2Vzc2VzIHdpdGhpbgotICogU2ltcGxlTHJ1UmVhZFBh Z2VfUmVhZE9ubHkoKS4gIEFzIGxvbmcgYXMgaW50IHJlYWRzIGFuZCB3cml0ZXMgYXJlIGF0b21p YywKLSAqIHRoaXMgc2hvdWxkIG5vdCBjYXVzZSBhbnkgY29tcGxldGVseS1ib2d1cyB2YWx1ZXMg dG8gZW50ZXIgdGhlIGNvbXB1dGF0aW9uLgotICogSG93ZXZlciwgaXQgaXMgcG9zc2libGUgZm9y IGVpdGhlciBjdXJfbHJ1X2NvdW50IG9yIGluZGl2aWR1YWwKLSAqIHBhZ2VfbHJ1X2NvdW50IGVu dHJpZXMgdG8gYmUgInJlc2V0IiB0byBsb3dlciB2YWx1ZXMgdGhhbiB0aGV5IHNob3VsZCBoYXZl LAotICogaW4gY2FzZSBhIHByb2Nlc3MgaXMgZGVsYXllZCB3aGlsZSBpdCBleGVjdXRlcyB0aGlz IG1hY3JvLiAgV2l0aCBjYXJlIGluCi0gKiBTbHJ1U2VsZWN0TFJVUGFnZSgpLCB0aGlzIGRvZXMg bGl0dGxlIGhhcm0sIGFuZCBpbiBhbnkgY2FzZSB0aGUgYWJzb2x1dGUKLSAqIHdvcnN0IHBvc3Np YmxlIGNvbnNlcXVlbmNlIGlzIGEgbm9ub3B0aW1hbCBjaG9pY2Ugb2YgcGFnZSB0byBldmljdC4g IFRoZQotICogZ2FpbiBmcm9tIGFsbG93aW5nIGNvbmN1cnJlbnQgcmVhZHMgb2YgU0xSVSBwYWdl cyBzZWVtcyB3b3J0aCBpdC4KLSAqLwotI2RlZmluZSBTbHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwg c2xvdG5vKQlcCi0JZG8geyBcCi0JCWludAkJbmV3X2xydV9jb3VudCA9IChzaGFyZWQpLT5jdXJf bHJ1X2NvdW50OyBcCi0JCWlmIChuZXdfbHJ1X2NvdW50ICE9IChzaGFyZWQpLT5wYWdlX2xydV9j b3VudFtzbG90bm9dKSB7IFwKLQkJCShzaGFyZWQpLT5jdXJfbHJ1X2NvdW50ID0gKytuZXdfbHJ1 X2NvdW50OyBcCi0JCQkoc2hhcmVkKS0+cGFnZV9scnVfY291bnRbc2xvdG5vXSA9IG5ld19scnVf Y291bnQ7IFwKLQkJfSBcCi0JfSB3aGlsZSAoMCkKLQotLyogU2F2ZWQgaW5mbyBmb3IgU2xydVJl cG9ydElPRXJyb3IgKi8KLXR5cGVkZWYgZW51bQotewotCVNMUlVfT1BFTl9GQUlMRUQsCi0JU0xS VV9TRUVLX0ZBSUxFRCwKLQlTTFJVX1JFQURfRkFJTEVELAotCVNMUlVfV1JJVEVfRkFJTEVELAot CVNMUlVfRlNZTkNfRkFJTEVELAotCVNMUlVfQ0xPU0VfRkFJTEVECi19IFNscnVFcnJvckNhdXNl Oworc3RydWN0IFNscnVSZWNlbnRCdWZmZXIgeworCWludAkJCXBhZ2VubzsKKwlCdWZmZXIJCXJl Y2VudF9idWZmZXI7Cit9OwogCi1zdGF0aWMgU2xydUVycm9yQ2F1c2Ugc2xydV9lcnJjYXVzZTsK LXN0YXRpYyBpbnQJc2xydV9lcnJubzsKK3N0YXRpYyBzdHJ1Y3QgU2xydVJlY2VudEJ1ZmZlciBz bHJ1X3JlY2VudF9idWZmZXJzW1NMUlVfTkVYVF9JRF07CiAKLQotc3RhdGljIHZvaWQgU2ltcGxl THJ1WmVyb0xTTnMoU2xydUN0bCBjdGwsIGludCBzbG90bm8pOwotc3RhdGljIHZvaWQgU2ltcGxl THJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKTsKLXN0YXRpYyB2b2lkIFNscnVJbnRl cm5hbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRh KTsKLXN0YXRpYyBib29sIFNscnVQaHlzaWNhbFJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFn ZW5vLCBpbnQgc2xvdG5vKTsKLXN0YXRpYyBib29sIFNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1 Q3RsIGN0bCwgaW50IHBhZ2VubywgaW50IHNsb3RubywKLQkJCQkJCQkJICBTbHJ1V3JpdGVBbGwg ZmRhdGEpOwotc3RhdGljIHZvaWQgU2xydVJlcG9ydElPRXJyb3IoU2xydUN0bCBjdGwsIGludCBw YWdlbm8sIFRyYW5zYWN0aW9uSWQgeGlkKTsKLXN0YXRpYyBpbnQJU2xydVNlbGVjdExSVVBhZ2Uo U2xydUN0bCBjdGwsIGludCBwYWdlbm8pOwotCi1zdGF0aWMgYm9vbCBTbHJ1U2NhbkRpckNiRGVs ZXRlQ3V0b2ZmKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwKK3N0YXRpYyBib29sIFNscnVT Y2FuRGlyQ2JEZWxldGVDdXRvZmYoaW50IHNscnVfaWQsCisJCQkJCQkJCQkgIFNscnVQYWdlUHJl Y2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJCQkgIGNoYXIgKmZpbGVuYW1lLAog CQkJCQkJCQkJICBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgdm9pZCBTbHJ1SW50 ZXJuYWxEZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2Vnbm8pOwotCi0vKgotICogSW5p dGlhbGl6YXRpb24gb2Ygc2hhcmVkIG1lbW9yeQotICovCi0KLVNpemUKLVNpbXBsZUxydVNobWVt U2l6ZShpbnQgbnNsb3RzLCBpbnQgbmxzbnMpCi17Ci0JU2l6ZQkJc3o7Ci0KLQkvKiB3ZSBhc3N1 bWUgbnNsb3RzIGlzbid0IHNvIGxhcmdlIGFzIHRvIHJpc2sgb3ZlcmZsb3cgKi8KLQlzeiA9IE1B WEFMSUdOKHNpemVvZihTbHJ1U2hhcmVkRGF0YSkpOwotCXN6ICs9IE1BWEFMSUdOKG5zbG90cyAq IHNpemVvZihjaGFyICopKTsJLyogcGFnZV9idWZmZXJbXSAqLwotCXN6ICs9IE1BWEFMSUdOKG5z bG90cyAqIHNpemVvZihTbHJ1UGFnZVN0YXR1cykpOwkvKiBwYWdlX3N0YXR1c1tdICovCi0Jc3og Kz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGJvb2wpKTsJLyogcGFnZV9kaXJ0eVtdICovCi0J c3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGludCkpOwkvKiBwYWdlX251bWJlcltdICov Ci0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGludCkpOwkvKiBwYWdlX2xydV9jb3Vu dFtdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKExXTG9ja1BhZGRlZCkpOwkv KiBidWZmZXJfbG9ja3NbXSAqLwotCi0JaWYgKG5sc25zID4gMCkKLQkJc3ogKz0gTUFYQUxJR04o bnNsb3RzICogbmxzbnMgKiBzaXplb2YoWExvZ1JlY1B0cikpOwkvKiBncm91cF9sc25bXSAqLwot Ci0JcmV0dXJuIEJVRkZFUkFMSUdOKHN6KSArIEJMQ0tTWiAqIG5zbG90czsKLX0KLQotLyoKLSAq IEluaXRpYWxpemUsIG9yIGF0dGFjaCB0bywgYSBzaW1wbGUgTFJVIGNhY2hlIGluIHNoYXJlZCBt ZW1vcnkuCi0gKgotICogY3RsOiBhZGRyZXNzIG9mIGxvY2FsICh1bnNoYXJlZCkgY29udHJvbCBz dHJ1Y3R1cmUuCi0gKiBuYW1lOiBuYW1lIG9mIFNMUlUuICAoVGhpcyBpcyB1c2VyLXZpc2libGUs IHBpY2sgd2l0aCBjYXJlISkKLSAqIG5zbG90czogbnVtYmVyIG9mIHBhZ2Ugc2xvdHMgdG8gdXNl LgotICogbmxzbnM6IG51bWJlciBvZiBMU04gZ3JvdXBzIHBlciBwYWdlIChzZXQgdG8gemVybyBp ZiBub3QgcmVsZXZhbnQpLgotICogY3RsbG9jazogTFdMb2NrIHRvIHVzZSB0byBjb250cm9sIGFj Y2VzcyB0byB0aGUgc2hhcmVkIGNvbnRyb2wgc3RydWN0dXJlLgotICogc3ViZGlyOiBQR0RBVEEt cmVsYXRpdmUgc3ViZGlyZWN0b3J5IHRoYXQgd2lsbCBjb250YWluIHRoZSBmaWxlcy4KLSAqIHRy YW5jaGVfaWQ6IExXTG9jayB0cmFuY2hlIElEIHRvIHVzZSBmb3IgdGhlIFNMUlUncyBwZXItYnVm ZmVyIExXTG9ja3MuCi0gKiBzeW5jX2hhbmRsZXI6IHdoaWNoIHNldCBvZiBmdW5jdGlvbnMgdG8g dXNlIHRvIGhhbmRsZSBzeW5jIHJlcXVlc3RzCi0gKi8KLXZvaWQKLVNpbXBsZUxydUluaXQoU2xy dUN0bCBjdGwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuc2xvdHMsIGludCBubHNucywKLQkJCSAg TFdMb2NrICpjdGxsb2NrLCBjb25zdCBjaGFyICpzdWJkaXIsIGludCB0cmFuY2hlX2lkLAotCQkJ ICBTeW5jUmVxdWVzdEhhbmRsZXIgc3luY19oYW5kbGVyKQotewotCVNscnVTaGFyZWQJc2hhcmVk OwotCWJvb2wJCWZvdW5kOwotCi0Jc2hhcmVkID0gKFNscnVTaGFyZWQpIFNobWVtSW5pdFN0cnVj dChuYW1lLAotCQkJCQkJCQkJCSAgU2ltcGxlTHJ1U2htZW1TaXplKG5zbG90cywgbmxzbnMpLAot CQkJCQkJCQkJCSAgJmZvdW5kKTsKLQotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQkv KiBJbml0aWFsaXplIGxvY2tzIGFuZCBzaGFyZWQgbWVtb3J5IGFyZWEgKi8KLQkJY2hhcgkgICAq cHRyOwotCQlTaXplCQlvZmZzZXQ7Ci0JCWludAkJCXNsb3RubzsKLQotCQlBc3NlcnQoIWZvdW5k KTsKLQotCQltZW1zZXQoc2hhcmVkLCAwLCBzaXplb2YoU2xydVNoYXJlZERhdGEpKTsKLQotCQlz aGFyZWQtPkNvbnRyb2xMb2NrID0gY3RsbG9jazsKLQotCQlzaGFyZWQtPm51bV9zbG90cyA9IG5z bG90czsKLQkJc2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlID0gbmxzbnM7Ci0KLQkJc2hhcmVk LT5jdXJfbHJ1X2NvdW50ID0gMDsKLQotCQkvKiBzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciB3 aWxsIGJlIHNldCBsYXRlciAqLwotCi0JCXNoYXJlZC0+c2xydV9zdGF0c19pZHggPSBwZ3N0YXRf Z2V0X3NscnVfaW5kZXgobmFtZSk7Ci0KLQkJcHRyID0gKGNoYXIgKikgc2hhcmVkOwotCQlvZmZz ZXQgPSBNQVhBTElHTihzaXplb2YoU2xydVNoYXJlZERhdGEpKTsKLQkJc2hhcmVkLT5wYWdlX2J1 ZmZlciA9IChjaGFyICoqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5z bG90cyAqIHNpemVvZihjaGFyICopKTsKLQkJc2hhcmVkLT5wYWdlX3N0YXR1cyA9IChTbHJ1UGFn ZVN0YXR1cyAqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAq IHNpemVvZihTbHJ1UGFnZVN0YXR1cykpOwotCQlzaGFyZWQtPnBhZ2VfZGlydHkgPSAoYm9vbCAq KSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihi b29sKSk7Ci0JCXNoYXJlZC0+cGFnZV9udW1iZXIgPSAoaW50ICopIChwdHIgKyBvZmZzZXQpOwot CQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGludCkpOwotCQlzaGFyZWQtPnBh Z2VfbHJ1X2NvdW50ID0gKGludCAqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFM SUdOKG5zbG90cyAqIHNpemVvZihpbnQpKTsKLQotCQkvKiBJbml0aWFsaXplIExXTG9ja3MgKi8K LQkJc2hhcmVkLT5idWZmZXJfbG9ja3MgPSAoTFdMb2NrUGFkZGVkICopIChwdHIgKyBvZmZzZXQp OwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKExXTG9ja1BhZGRlZCkpOwot Ci0JCWlmIChubHNucyA+IDApCi0JCXsKLQkJCXNoYXJlZC0+Z3JvdXBfbHNuID0gKFhMb2dSZWNQ dHIgKikgKHB0ciArIG9mZnNldCk7Ci0JCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogbmxz bnMgKiBzaXplb2YoWExvZ1JlY1B0cikpOwotCQl9Ci0KLQkJcHRyICs9IEJVRkZFUkFMSUdOKG9m ZnNldCk7Ci0JCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgbnNsb3RzOyBzbG90bm8rKykKLQkJ ewotCQkJTFdMb2NrSW5pdGlhbGl6ZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2Nr LAotCQkJCQkJCSB0cmFuY2hlX2lkKTsKLQotCQkJc2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9d ID0gcHRyOwotCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX0VNUFRZ OwotCQkJc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSBmYWxzZTsKLQkJCXNoYXJlZC0+cGFn ZV9scnVfY291bnRbc2xvdG5vXSA9IDA7Ci0JCQlwdHIgKz0gQkxDS1NaOwotCQl9Ci0KLQkJLyog U2hvdWxkIGZpdCB0byBlc3RpbWF0ZWQgc2htZW0gc2l6ZSAqLwotCQlBc3NlcnQocHRyIC0gKGNo YXIgKikgc2hhcmVkIDw9IFNpbXBsZUxydVNobWVtU2l6ZShuc2xvdHMsIG5sc25zKSk7Ci0JfQot CWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgdW5zaGFy ZWQgY29udHJvbCBzdHJ1Y3QsIGluY2x1ZGluZyBkaXJlY3RvcnkgcGF0aC4gV2UKLQkgKiBhc3N1 bWUgY2FsbGVyIHNldCBQYWdlUHJlY2VkZXMuCi0JICovCi0JY3RsLT5zaGFyZWQgPSBzaGFyZWQ7 Ci0JY3RsLT5zeW5jX2hhbmRsZXIgPSBzeW5jX2hhbmRsZXI7Ci0Jc3RybGNweShjdGwtPkRpciwg c3ViZGlyLCBzaXplb2YoY3RsLT5EaXIpKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgKG9yIHJl aW5pdGlhbGl6ZSkgYSBwYWdlIHRvIHplcm9lcy4KLSAqCi0gKiBUaGUgcGFnZSBpcyBub3QgYWN0 dWFsbHkgd3JpdHRlbiwganVzdCBzZXQgdXAgaW4gc2hhcmVkIG1lbW9yeS4KLSAqIFRoZSBzbG90 IG51bWJlciBvZiB0aGUgbmV3IHBhZ2UgaXMgcmV0dXJuZWQuCi0gKgotICogQ29udHJvbCBsb2Nr IG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgotICovCi1p bnQKLVNpbXBsZUxydVplcm9QYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vKQotewotCVNscnVT aGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0JaW50CQkJc2xvdG5vOwotCi0JLyogRmluZCBh IHN1aXRhYmxlIGJ1ZmZlciBzbG90IGZvciB0aGUgcGFnZSAqLwotCXNsb3RubyA9IFNscnVTZWxl Y3RMUlVQYWdlKGN0bCwgcGFnZW5vKTsKLQlBc3NlcnQoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90 bm9dID09IFNMUlVfUEFHRV9FTVBUWSB8fAotCQkgICAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90 bm9dID09IFNMUlVfUEFHRV9WQUxJRCAmJgotCQkJIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9d KSB8fAotCQkgICBzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vKTsKLQotCS8q IE1hcmsgdGhlIHNsb3QgYXMgY29udGFpbmluZyB0aGlzIHBhZ2UgKi8KLQlzaGFyZWQtPnBhZ2Vf bnVtYmVyW3Nsb3Rub10gPSBwYWdlbm87Ci0Jc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0g U0xSVV9QQUdFX1ZBTElEOwotCXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKLQlT bHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwgc2xvdG5vKTsKLQotCS8qIFNldCB0aGUgYnVmZmVyIHRv IHplcm9lcyAqLwotCU1lbVNldChzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10sIDAsIEJMQ0tT Wik7Ci0KLQkvKiBTZXQgdGhlIExTTnMgZm9yIHRoaXMgbmV3IHBhZ2UgdG8gemVybyAqLwotCVNp bXBsZUxydVplcm9MU05zKGN0bCwgc2xvdG5vKTsKLQotCS8qIEFzc3VtZSB0aGlzIHBhZ2UgaXMg bm93IHRoZSBsYXRlc3QgYWN0aXZlIHBhZ2UgKi8KLQlzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJl ciA9IHBhZ2VubzsKLQotCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiB6ZXJvZWQgcGFn ZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV9wYWdlX3plcm9lZChzaGFyZWQtPnNscnVfc3RhdHNf aWR4KTsKLQotCXJldHVybiBzbG90bm87Ci19Ci0KLS8qCi0gKiBaZXJvIGFsbCB0aGUgTFNOcyB3 ZSBzdG9yZSBmb3IgdGhpcyBzbHJ1IHBhZ2UuCi0gKgotICogVGhpcyBzaG91bGQgYmUgY2FsbGVk IGVhY2ggdGltZSB3ZSBjcmVhdGUgYSBuZXcgcGFnZSwgYW5kIGVhY2ggdGltZSB3ZSByZWFkCi0g KiBpbiBhIHBhZ2UgZnJvbSBkaXNrIGludG8gYW4gZXhpc3RpbmcgYnVmZmVyLiAgKFN1Y2ggYW4g b2xkIHBhZ2UgY2Fubm90Ci0gKiBoYXZlIGFueSBpbnRlcmVzdGluZyBMU05zLCBzaW5jZSB3ZSdk IGhhdmUgZmx1c2hlZCB0aGVtIGJlZm9yZSB3cml0aW5nCi0gKiB0aGUgcGFnZSBpbiB0aGUgZmly c3QgcGxhY2UuKQotICoKLSAqIFRoaXMgYXNzdW1lcyB0aGF0IEludmFsaWRYTG9nUmVjUHRyIGlz IGJpdHdpc2UtYWxsLTAuCi0gKi8KLXN0YXRpYyB2b2lkCi1TaW1wbGVMcnVaZXJvTFNOcyhTbHJ1 Q3RsIGN0bCwgaW50IHNsb3RubykKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVk OwotCi0JaWYgKHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZSA+IDApCi0JCU1lbVNldCgmc2hh cmVkLT5ncm91cF9sc25bc2xvdG5vICogc2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlXSwgMCwK LQkJCSAgIHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZSAqIHNpemVvZihYTG9nUmVjUHRyKSk7 Ci19Ci0KLS8qCi0gKiBXYWl0IGZvciBhbnkgYWN0aXZlIEkvTyBvbiBhIHBhZ2Ugc2xvdCB0byBm aW5pc2guICAoVGhpcyBkb2VzIG5vdAotICogZ3VhcmFudGVlIHRoYXQgbmV3IEkvTyBoYXNuJ3Qg YmVlbiBzdGFydGVkIGJlZm9yZSB3ZSByZXR1cm4sIHRob3VnaC4KLSAqIEluIGZhY3QgdGhlIHNs b3QgbWlnaHQgbm90IGV2ZW4gY29udGFpbiB0aGUgc2FtZSBwYWdlIGFueW1vcmUuKQotICoKLSAq IENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQg ZXhpdC4KLSAqLwotc3RhdGljIHZvaWQKLVNpbXBsZUxydVdhaXRJTyhTbHJ1Q3RsIGN0bCwgaW50 IHNsb3RubykKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCi0JLyogU2Vl IG5vdGVzIGF0IHRvcCBvZiBmaWxlICovCi0JTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xM b2NrKTsKLQlMV0xvY2tBY3F1aXJlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ss IExXX1NIQVJFRCk7Ci0JTFdMb2NrUmVsZWFzZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5v XS5sb2NrKTsKLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lW RSk7Ci0KLQkvKgotCSAqIElmIHRoZSBzbG90IGlzIHN0aWxsIGluIGFuIGlvLWluLXByb2dyZXNz IHN0YXRlLCB0aGVuIGVpdGhlciBzb21lb25lCi0JICogYWxyZWFkeSBzdGFydGVkIGEgbmV3IEkv TyBvbiB0aGUgc2xvdCwgb3IgYSBwcmV2aW91cyBJL08gZmFpbGVkIGFuZAotCSAqIG5lZ2xlY3Rl ZCB0byByZXNldCB0aGUgcGFnZSBzdGF0ZS4gIFRoYXQgc2hvdWxkbid0IGhhcHBlbiwgcmVhbGx5 LCBidXQKLQkgKiBpdCBzZWVtcyB3b3J0aCBhIGZldyBleHRyYSBjeWNsZXMgdG8gY2hlY2sgYW5k IHJlY292ZXIgZnJvbSBpdC4gV2UgY2FuCi0JICogY2hlYXBseSB0ZXN0IGZvciBmYWlsdXJlIGJ5 IHNlZWluZyBpZiB0aGUgYnVmZmVyIGxvY2sgaXMgc3RpbGwgaGVsZCAod2UKLQkgKiBhc3N1bWUg dGhhdCB0cmFuc2FjdGlvbiBhYm9ydCB3b3VsZCByZWxlYXNlIHRoZSBsb2NrKS4KLQkgKi8KLQlp ZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dS RVNTIHx8Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfV1JJVEVf SU5fUFJPR1JFU1MpCi0JewotCQlpZiAoTFdMb2NrQ29uZGl0aW9uYWxBY3F1aXJlKCZzaGFyZWQt PmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssIExXX1NIQVJFRCkpCi0JCXsKLQkJCS8qIGluZGVl ZCwgdGhlIEkvTyBtdXN0IGhhdmUgZmFpbGVkICovCi0JCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1 c1tzbG90bm9dID09IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTKQotCQkJCXNoYXJlZC0+cGFn ZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9FTVBUWTsKLQkJCWVsc2UJCQkJLyogd3JpdGVf aW5fcHJvZ3Jlc3MgKi8KLQkJCXsKLQkJCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBT TFJVX1BBR0VfVkFMSUQ7Ci0JCQkJc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwot CQkJfQotCQkJTFdMb2NrUmVsZWFzZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2Nr KTsKLQkJfQotCX0KLX0KLQotLyoKLSAqIEZpbmQgYSBwYWdlIGluIGEgc2hhcmVkIGJ1ZmZlciwg cmVhZGluZyBpdCBpbiBpZiBuZWNlc3NhcnkuCi0gKiBUaGUgcGFnZSBudW1iZXIgbXVzdCBjb3Jy ZXNwb25kIHRvIGFuIGFscmVhZHktaW5pdGlhbGl6ZWQgcGFnZS4KLSAqCi0gKiBJZiB3cml0ZV9v ayBpcyB0cnVlIHRoZW4gaXQgaXMgT0sgdG8gcmV0dXJuIGEgcGFnZSB0aGF0IGlzIGluCi0gKiBX UklURV9JTl9QUk9HUkVTUyBzdGF0ZTsgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5 IHRvIGJlIHN1cmUKLSAqIHRoYXQgbW9kaWZpY2F0aW9uIG9mIHRoZSBwYWdlIGlzIHNhZmUuICBJ ZiB3cml0ZV9vayBpcyBmYWxzZSB0aGVuIHdlCi0gKiB3aWxsIG5vdCByZXR1cm4gdGhlIHBhZ2Ug dW50aWwgaXQgaXMgbm90IHVuZGVyZ29pbmcgYWN0aXZlIEkvTy4KLSAqCi0gKiBUaGUgcGFzc2Vk LWluIHhpZCBpcyB1c2VkIG9ubHkgZm9yIGVycm9yIHJlcG9ydGluZywgYW5kIG1heSBiZQotICog SW52YWxpZFRyYW5zYWN0aW9uSWQgaWYgbm8gc3BlY2lmaWMgeGlkIGlzIGFzc29jaWF0ZWQgd2l0 aCB0aGUgYWN0aW9uLgotICoKLSAqIFJldHVybiB2YWx1ZSBpcyB0aGUgc2hhcmVkLWJ1ZmZlciBz bG90IG51bWJlciBub3cgaG9sZGluZyB0aGUgcGFnZS4KLSAqIFRoZSBidWZmZXIncyBMUlUgYWNj ZXNzIGluZm8gaXMgdXBkYXRlZC4KLSAqCi0gKiBDb250cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0 IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKi8KLWludAotU2ltcGxlTHJ1UmVh ZFBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIGJvb2wgd3JpdGVfb2ssCi0JCQkJICBUcmFu c2FjdGlvbklkIHhpZCkKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCi0J LyogT3V0ZXIgbG9vcCBoYW5kbGVzIHJlc3RhcnQgaWYgd2UgbXVzdCB3YWl0IGZvciBzb21lb25l IGVsc2UncyBJL08gKi8KLQlmb3IgKDs7KQotCXsKLQkJaW50CQkJc2xvdG5vOwotCQlib29sCQlv azsKLQotCQkvKiBTZWUgaWYgcGFnZSBhbHJlYWR5IGlzIGluIG1lbW9yeTsgaWYgbm90LCBwaWNr IHZpY3RpbSBzbG90ICovCi0JCXNsb3RubyA9IFNscnVTZWxlY3RMUlVQYWdlKGN0bCwgcGFnZW5v KTsKLQotCQkvKiBEaWQgd2UgZmluZCB0aGUgcGFnZSBpbiBtZW1vcnk/ICovCi0JCWlmIChzaGFy ZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vICYmCi0JCQlzaGFyZWQtPnBhZ2Vfc3Rh dHVzW3Nsb3Rub10gIT0gU0xSVV9QQUdFX0VNUFRZKQotCQl7Ci0JCQkvKgotCQkJICogSWYgcGFn ZSBpcyBzdGlsbCBiZWluZyByZWFkIGluLCB3ZSBtdXN0IHdhaXQgZm9yIEkvTy4gIExpa2V3aXNl Ci0JCQkgKiBpZiB0aGUgcGFnZSBpcyBiZWluZyB3cml0dGVuIGFuZCB0aGUgY2FsbGVyIHNhaWQg dGhhdCdzIG5vdCBPSy4KLQkJCSAqLwotCQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5v XSA9PSBTTFJVX1BBR0VfUkVBRF9JTl9QUk9HUkVTUyB8fAotCQkJCShzaGFyZWQtPnBhZ2Vfc3Rh dHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRFX0lOX1BST0dSRVNTICYmCi0JCQkJICF3cml0 ZV9vaykpCi0JCQl7Ci0JCQkJU2ltcGxlTHJ1V2FpdElPKGN0bCwgc2xvdG5vKTsKLQkJCQkvKiBO b3cgd2UgbXVzdCByZWNoZWNrIHN0YXRlIGZyb20gdGhlIHRvcCAqLwotCQkJCWNvbnRpbnVlOwot CQkJfQotCQkJLyogT3RoZXJ3aXNlLCBpdCdzIHJlYWR5IHRvIHVzZSAqLwotCQkJU2xydVJlY2Vu dGx5VXNlZChzaGFyZWQsIHNsb3Rubyk7Ci0KLQkJCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRl ciBvZiBwYWdlcyBmb3VuZCBpbiB0aGUgU0xSVSAqLwotCQkJcGdzdGF0X2NvdW50X3NscnVfcGFn ZV9oaXQoc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7Ci0KLQkJCXJldHVybiBzbG90bm87Ci0JCX0K LQotCQkvKiBXZSBmb3VuZCBubyBtYXRjaDsgYXNzZXJ0IHdlIHNlbGVjdGVkIGEgZnJlZWFibGUg c2xvdCAqLwotCQlBc3NlcnQoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFH RV9FTVBUWSB8fAotCQkJICAgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BB R0VfVkFMSUQgJiYKLQkJCQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pKTsKLQotCQkvKiBN YXJrIHRoZSBzbG90IHJlYWQtYnVzeSAqLwotCQlzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10g PSBwYWdlbm87Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9SRUFE X0lOX1BST0dSRVNTOwotCQlzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IGZhbHNlOwotCi0J CS8qIEFjcXVpcmUgcGVyLWJ1ZmZlciBsb2NrIChjYW5ub3QgZGVhZGxvY2ssIHNlZSBub3RlcyBh dCB0b3ApICovCi0JCUxXTG9ja0FjcXVpcmUoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10u bG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQkvKiBSZWxlYXNlIGNvbnRyb2wgbG9jayB3aGlsZSBk b2luZyBJL08gKi8KLQkJTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKLQotCQkv KiBEbyB0aGUgcmVhZCAqLwotCQlvayA9IFNscnVQaHlzaWNhbFJlYWRQYWdlKGN0bCwgcGFnZW5v LCBzbG90bm8pOwotCi0JCS8qIFNldCB0aGUgTFNOcyBmb3IgdGhpcyBuZXdseSByZWFkLWluIHBh Z2UgdG8gemVybyAqLwotCQlTaW1wbGVMcnVaZXJvTFNOcyhjdGwsIHNsb3Rubyk7Ci0KLQkJLyog UmUtYWNxdWlyZSBjb250cm9sIGxvY2sgYW5kIHVwZGF0ZSBwYWdlIHN0YXRlICovCi0JCUxXTG9j a0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQlBc3NlcnQo c2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dID09IHBhZ2VubyAmJgotCQkJICAgc2hhcmVkLT5w YWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTICYmCi0JCQkg ICAhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwotCi0JCXNoYXJlZC0+cGFnZV9zdGF0dXNb c2xvdG5vXSA9IG9rID8gU0xSVV9QQUdFX1ZBTElEIDogU0xSVV9QQUdFX0VNUFRZOwotCi0JCUxX TG9ja1JlbGVhc2UoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jayk7Ci0KLQkJLyog Tm93IGl0J3Mgb2theSB0byBlcmVwb3J0IGlmIHdlIGZhaWxlZCAqLwotCQlpZiAoIW9rKQotCQkJ U2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdlbm8sIHhpZCk7Ci0KLQkJU2xydVJlY2VudGx5VXNl ZChzaGFyZWQsIHNsb3Rubyk7Ci0KLQkJLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHBh Z2VzIG5vdCBmb3VuZCBpbiBTTFJVICovCi0JCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfcmVhZChz aGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCQlyZXR1cm4gc2xvdG5vOwotCX0KLX0KLQotLyoK LSAqIEZpbmQgYSBwYWdlIGluIGEgc2hhcmVkIGJ1ZmZlciwgcmVhZGluZyBpdCBpbiBpZiBuZWNl c3NhcnkuCi0gKiBUaGUgcGFnZSBudW1iZXIgbXVzdCBjb3JyZXNwb25kIHRvIGFuIGFscmVhZHkt aW5pdGlhbGl6ZWQgcGFnZS4KLSAqIFRoZSBjYWxsZXIgbXVzdCBpbnRlbmQgb25seSByZWFkLW9u bHkgYWNjZXNzIHRvIHRoZSBwYWdlLgotICoKLSAqIFRoZSBwYXNzZWQtaW4geGlkIGlzIHVzZWQg b25seSBmb3IgZXJyb3IgcmVwb3J0aW5nLCBhbmQgbWF5IGJlCi0gKiBJbnZhbGlkVHJhbnNhY3Rp b25JZCBpZiBubyBzcGVjaWZpYyB4aWQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3Rpb24uCi0g KgotICogUmV0dXJuIHZhbHVlIGlzIHRoZSBzaGFyZWQtYnVmZmVyIHNsb3QgbnVtYmVyIG5vdyBo b2xkaW5nIHRoZSBwYWdlLgotICogVGhlIGJ1ZmZlcidzIExSVSBhY2Nlc3MgaW5mbyBpcyB1cGRh dGVkLgotICoKLSAqIENvbnRyb2wgbG9jayBtdXN0IE5PVCBiZSBoZWxkIGF0IGVudHJ5LCBidXQg d2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKiBJdCBpcyB1bnNwZWNpZmllZCB3aGV0aGVyIHRoZSBs b2NrIHdpbGwgYmUgc2hhcmVkIG9yIGV4Y2x1c2l2ZS4KLSAqLwotaW50Ci1TaW1wbGVMcnVSZWFk UGFnZV9SZWFkT25seShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgVHJhbnNhY3Rpb25JZCB4aWQp Ci17Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlzbG90bm87Ci0K LQkvKiBUcnkgdG8gZmluZCB0aGUgcGFnZSB3aGlsZSBob2xkaW5nIG9ubHkgc2hhcmVkIGxvY2sg Ki8KLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX1NIQVJFRCk7Ci0KLQkv KiBTZWUgaWYgcGFnZSBpcyBhbHJlYWR5IGluIGEgYnVmZmVyICovCi0JZm9yIChzbG90bm8gPSAw OyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0JewotCQlpZiAoc2hhcmVk LT5wYWdlX251bWJlcltzbG90bm9dID09IHBhZ2VubyAmJgotCQkJc2hhcmVkLT5wYWdlX3N0YXR1 c1tzbG90bm9dICE9IFNMUlVfUEFHRV9FTVBUWSAmJgotCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tz bG90bm9dICE9IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTKQotCQl7Ci0JCQkvKiBTZWUgY29t bWVudHMgZm9yIFNscnVSZWNlbnRseVVzZWQgbWFjcm8gKi8KLQkJCVNscnVSZWNlbnRseVVzZWQo c2hhcmVkLCBzbG90bm8pOwotCi0JCQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgcGFn ZXMgZm91bmQgaW4gdGhlIFNMUlUgKi8KLQkJCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfaGl0KHNo YXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0JCQlyZXR1cm4gc2xvdG5vOwotCQl9Ci0JfQotCi0J LyogTm8gbHVjaywgc28gc3dpdGNoIHRvIG5vcm1hbCBleGNsdXNpdmUgbG9jayBhbmQgZG8gcmVn dWxhciByZWFkICovCi0JTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKLQlMV0xv Y2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlyZXR1cm4g U2ltcGxlTHJ1UmVhZFBhZ2UoY3RsLCBwYWdlbm8sIHRydWUsIHhpZCk7Ci19Ci0KLS8qCi0gKiBX cml0ZSBhIHBhZ2UgZnJvbSBhIHNoYXJlZCBidWZmZXIsIGlmIG5lY2Vzc2FyeS4KLSAqIERvZXMg bm90aGluZyBpZiB0aGUgc3BlY2lmaWVkIHNsb3QgaXMgbm90IGRpcnR5LgotICoKLSAqIE5PVEU6 IG9ubHkgb25lIHdyaXRlIGF0dGVtcHQgaXMgbWFkZSBoZXJlLiAgSGVuY2UsIGl0IGlzIHBvc3Np YmxlIHRoYXQKLSAqIHRoZSBwYWdlIGlzIHN0aWxsIGRpcnR5IGF0IGV4aXQgKGlmIHNvbWVvbmUg ZWxzZSByZS1kaXJ0aWVkIGl0IGR1cmluZwotICogdGhlIHdyaXRlKS4gIEhvd2V2ZXIsIHdlICpk byogYXR0ZW1wdCBhIGZyZXNoIHdyaXRlIGV2ZW4gaWYgdGhlIHBhZ2UKLSAqIGlzIGFscmVhZHkg YmVpbmcgd3JpdHRlbjsgdGhpcyBpcyBmb3IgY2hlY2twb2ludHMuCi0gKgotICogQ29udHJvbCBs b2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgotICov Ci1zdGF0aWMgdm9pZAotU2xydUludGVybmFsV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgc2xv dG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNo YXJlZDsKLQlpbnQJCQlwYWdlbm8gPSBzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub107Ci0JYm9v bAkJb2s7Ci0KLQkvKiBJZiBhIHdyaXRlIGlzIGluIHByb2dyZXNzLCB3YWl0IGZvciBpdCB0byBm aW5pc2ggKi8KLQl3aGlsZSAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFH RV9XUklURV9JTl9QUk9HUkVTUyAmJgotCQkgICBzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10g PT0gcGFnZW5vKQotCXsKLQkJU2ltcGxlTHJ1V2FpdElPKGN0bCwgc2xvdG5vKTsKLQl9Ci0KLQkv KgotCSAqIERvIG5vdGhpbmcgaWYgcGFnZSBpcyBub3QgZGlydHksIG9yIGlmIGJ1ZmZlciBubyBs b25nZXIgY29udGFpbnMgdGhlCi0JICogc2FtZSBwYWdlIHdlIHdlcmUgY2FsbGVkIGZvci4KLQkg Ki8KLQlpZiAoIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dIHx8Ci0JCXNoYXJlZC0+cGFnZV9z dGF0dXNbc2xvdG5vXSAhPSBTTFJVX1BBR0VfVkFMSUQgfHwKLQkJc2hhcmVkLT5wYWdlX251bWJl cltzbG90bm9dICE9IHBhZ2VubykKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBNYXJrIHRoZSBzbG90 IHdyaXRlLWJ1c3ksIGFuZCBjbGVhciB0aGUgZGlydHliaXQuICBBZnRlciB0aGlzIHBvaW50LCBh Ci0JICogdHJhbnNhY3Rpb24gc3RhdHVzIHVwZGF0ZSBvbiB0aGlzIHBhZ2Ugd2lsbCBtYXJrIGl0 IGRpcnR5IGFnYWluLgotCSAqLwotCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVf UEFHRV9XUklURV9JTl9QUk9HUkVTUzsKLQlzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IGZh bHNlOwotCi0JLyogQWNxdWlyZSBwZXItYnVmZmVyIGxvY2sgKGNhbm5vdCBkZWFkbG9jaywgc2Vl IG5vdGVzIGF0IHRvcCkgKi8KLQlMV0xvY2tBY3F1aXJlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tz bG90bm9dLmxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKiBSZWxlYXNlIGNvbnRyb2wgbG9jayB3 aGlsZSBkb2luZyBJL08gKi8KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwot Ci0JLyogRG8gdGhlIHdyaXRlICovCi0Jb2sgPSBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2UoY3RsLCBw YWdlbm8sIHNsb3RubywgZmRhdGEpOwotCi0JLyogSWYgd2UgZmFpbGVkLCBhbmQgd2UncmUgaW4g YSBmbHVzaCwgYmV0dGVyIGNsb3NlIHRoZSBmaWxlcyAqLwotCWlmICghb2sgJiYgZmRhdGEpCi0J ewotCQlpbnQJCQlpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBmZGF0YS0+bnVtX2ZpbGVzOyBpKysp Ci0JCQlDbG9zZVRyYW5zaWVudEZpbGUoZmRhdGEtPmZkW2ldKTsKLQl9Ci0KLQkvKiBSZS1hY3F1 aXJlIGNvbnRyb2wgbG9jayBhbmQgdXBkYXRlIHBhZ2Ugc3RhdGUgKi8KLQlMV0xvY2tBY3F1aXJl KHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlBc3NlcnQoc2hhcmVkLT5w YWdlX251bWJlcltzbG90bm9dID09IHBhZ2VubyAmJgotCQkgICBzaGFyZWQtPnBhZ2Vfc3RhdHVz W3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRFX0lOX1BST0dSRVNTKTsKLQotCS8qIElmIHdlIGZh aWxlZCB0byB3cml0ZSwgbWFyayB0aGUgcGFnZSBkaXJ0eSBhZ2FpbiAqLwotCWlmICghb2spCi0J CXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKLQotCXNoYXJlZC0+cGFnZV9zdGF0 dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9WQUxJRDsKLQotCUxXTG9ja1JlbGVhc2UoJnNoYXJlZC0+ YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jayk7Ci0KLQkvKiBOb3cgaXQncyBva2F5IHRvIGVyZXBv cnQgaWYgd2UgZmFpbGVkICovCi0JaWYgKCFvaykKLQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBw YWdlbm8sIEludmFsaWRUcmFuc2FjdGlvbklkKTsKLQotCS8qIElmIHBhcnQgb2YgYSBjaGVja3Bv aW50LCBjb3VudCB0aGlzIGFzIGEgYnVmZmVyIHdyaXR0ZW4uICovCi0JaWYgKGZkYXRhKQotCQlD aGVja3BvaW50U3RhdHMuY2twdF9idWZzX3dyaXR0ZW4rKzsKLX0KLQotLyoKLSAqIFdyYXBwZXIg b2YgU2xydUludGVybmFsV3JpdGVQYWdlLCBmb3IgZXh0ZXJuYWwgY2FsbGVycy4KLSAqIGZkYXRh IGlzIGFsd2F5cyBwYXNzZWQgYSBOVUxMIGhlcmUuCi0gKi8KLXZvaWQKLVNpbXBsZUxydVdyaXRl UGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKLXsKLQlTbHJ1SW50ZXJuYWxXcml0ZVBhZ2Uo Y3RsLCBzbG90bm8sIE5VTEwpOwotfQorc3RhdGljIHZvaWQgU2xydUludGVybmFsRGVsZXRlU2Vn bWVudChpbnQgc2xydV9pZCwgaW50IHNlZ25vKTsKIAogLyoKICAqIFJldHVybiB3aGV0aGVyIHRo ZSBnaXZlbiBwYWdlIGV4aXN0cyBvbiBkaXNrLgpAQCAtNjI0LDU5MiArNjQsMjQgQEAgU2ltcGxl THJ1V3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKQogICogbGFyZ2UgZW5vdWdoIHRv IGNvbnRhaW4gdGhlIGdpdmVuIHBhZ2UuCiAgKi8KIGJvb2wKLVNpbXBsZUxydURvZXNQaHlzaWNh bFBhZ2VFeGlzdChTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubykKK1NpbXBsZUxydURvZXNQaHlzaWNh bFBhZ2VFeGlzdChpbnQgc2xydV9pZCwgaW50IHBhZ2VubykKIHsKLQlpbnQJCQlzZWdubyA9IHBh Z2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAl IFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJb2Zmc2V0ID0gcnBhZ2VubyAqIEJMQ0tT WjsKLQljaGFyCQlwYXRoW01BWFBHUEFUSF07Ci0JaW50CQkJZmQ7Ci0JYm9vbAkJcmVzdWx0Owot CW9mZl90CQllbmRwb3M7Ci0KLQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgY2hlY2tl ZCBwYWdlcyAqLwotCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfZXhpc3RzKGN0bC0+c2hhcmVkLT5z bHJ1X3N0YXRzX2lkeCk7Ci0KLQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7Ci0KLQlm ZCA9IE9wZW5UcmFuc2llbnRGaWxlKHBhdGgsIE9fUkRPTkxZIHwgUEdfQklOQVJZKTsKLQlpZiAo ZmQgPCAwKQotCXsKLQkJLyogZXhwZWN0ZWQ6IGZpbGUgZG9lc24ndCBleGlzdCAqLwotCQlpZiAo ZXJybm8gPT0gRU5PRU5UKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCS8qIHJlcG9ydCBlcnJvciBu b3JtYWxseSAqLwotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9PUEVOX0ZBSUxFRDsKLQkJc2xydV9l cnJubyA9IGVycm5vOwotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgMCk7Ci0JfQot Ci0JaWYgKChlbmRwb3MgPSBsc2VlayhmZCwgMCwgU0VFS19FTkQpKSA8IDApCi0JewotCQlzbHJ1 X2VycmNhdXNlID0gU0xSVV9TRUVLX0ZBSUxFRDsKLQkJc2xydV9lcnJubyA9IGVycm5vOwotCQlT bHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgMCk7Ci0JfQotCi0JcmVzdWx0ID0gZW5kcG9z ID49IChvZmZfdCkgKG9mZnNldCArIEJMQ0tTWik7Ci0KLQlpZiAoQ2xvc2VUcmFuc2llbnRGaWxl KGZkKSAhPSAwKQotCXsKLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwotCQlz bHJ1X2Vycm5vID0gZXJybm87Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0 OwotfQotCi0vKgotICogUGh5c2ljYWwgcmVhZCBvZiBhIChwcmV2aW91c2x5IGV4aXN0aW5nKSBw YWdlIGludG8gYSBidWZmZXIgc2xvdAotICoKLSAqIE9uIGZhaWx1cmUsIHdlIGNhbm5vdCBqdXN0 IGVyZXBvcnQoRVJST1IpIHNpbmNlIGNhbGxlciBoYXMgcHV0IHN0YXRlIGluCi0gKiBzaGFyZWQg bWVtb3J5IHRoYXQgbXVzdCBiZSB1bmRvbmUuICBTbywgd2UgcmV0dXJuIGZhbHNlIGFuZCBzYXZl IGVub3VnaAotICogaW5mbyBpbiBzdGF0aWMgdmFyaWFibGVzIHRvIGxldCBTbHJ1UmVwb3J0SU9F cnJvciBtYWtlIHRoZSByZXBvcnQuCi0gKgotICogRm9yIG5vdywgYXNzdW1lIGl0J3Mgbm90IHdv cnRoIGtlZXBpbmcgYSBmaWxlIHBvaW50ZXIgb3BlbiBhY3Jvc3MKLSAqIHJlYWQvd3JpdGUgb3Bl cmF0aW9ucy4gIFdlIGNvdWxkIGNhY2hlIG9uZSB2aXJ0dWFsIGZpbGUgcG9pbnRlciAuLi4KLSAq Lwotc3RhdGljIGJvb2wKLVNscnVQaHlzaWNhbFJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFn ZW5vLCBpbnQgc2xvdG5vKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0J aW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwotCWludAkJCXJw YWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwotCW9mZl90CQlvZmZzZXQg PSBycGFnZW5vICogQkxDS1NaOwotCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKLQlpbnQJCQlmZDsK LQotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQotCS8qCi0JICogSW4gYSBjcmFz aC1hbmQtcmVzdGFydCBzaXR1YXRpb24sIGl0J3MgcG9zc2libGUgZm9yIHVzIHRvIHJlY2VpdmUK LQkgKiBjb21tYW5kcyB0byBzZXQgdGhlIGNvbW1pdCBzdGF0dXMgb2YgdHJhbnNhY3Rpb25zIHdo b3NlIGJpdHMgYXJlIGluCi0JICogYWxyZWFkeS10cnVuY2F0ZWQgc2VnbWVudHMgb2YgdGhlIGNv bW1pdCBsb2cgKHNlZSBub3RlcyBpbgotCSAqIFNscnVQaHlzaWNhbFdyaXRlUGFnZSkuICBIZW5j ZSwgaWYgd2UgYXJlIEluUmVjb3ZlcnksIGFsbG93IHRoZSBjYXNlCi0JICogd2hlcmUgdGhlIGZp bGUgZG9lc24ndCBleGlzdCwgYW5kIHJldHVybiB6ZXJvZXMgaW5zdGVhZC4KLQkgKi8KLQlmZCA9 IE9wZW5UcmFuc2llbnRGaWxlKHBhdGgsIE9fUkRPTkxZIHwgUEdfQklOQVJZKTsKLQlpZiAoZmQg PCAwKQotCXsKLQkJaWYgKGVycm5vICE9IEVOT0VOVCB8fCAhSW5SZWNvdmVyeSkKLQkJewotCQkJ c2xydV9lcnJjYXVzZSA9IFNMUlVfT1BFTl9GQUlMRUQ7Ci0JCQlzbHJ1X2Vycm5vID0gZXJybm87 Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJm aWxlIFwiJXNcIiBkb2Vzbid0IGV4aXN0LCByZWFkaW5nIGFzIHplcm9lcyIsCi0JCQkJCQlwYXRo KSkpOwotCQlNZW1TZXQoc2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dLCAwLCBCTENLU1opOwot CQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQllcnJubyA9IDA7Ci0JcGdzdGF0X3JlcG9ydF93YWl0X3N0 YXJ0KFdBSVRfRVZFTlRfU0xSVV9SRUFEKTsKLQlpZiAocGdfcHJlYWQoZmQsIHNoYXJlZC0+cGFn ZV9idWZmZXJbc2xvdG5vXSwgQkxDS1NaLCBvZmZzZXQpICE9IEJMQ0tTWikKLQl7Ci0JCXBnc3Rh dF9yZXBvcnRfd2FpdF9lbmQoKTsKLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfUkVBRF9GQUlMRUQ7 Ci0JCXNscnVfZXJybm8gPSBlcnJubzsKLQkJQ2xvc2VUcmFuc2llbnRGaWxlKGZkKTsKLQkJcmV0 dXJuIGZhbHNlOwotCX0KLQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7Ci0KLQlpZiAoQ2xvc2VU cmFuc2llbnRGaWxlKGZkKSAhPSAwKQotCXsKLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfQ0xPU0Vf RkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQly ZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFBoeXNpY2FsIHdyaXRlIG9mIGEgcGFnZSBmcm9tIGEg YnVmZmVyIHNsb3QKLSAqCi0gKiBPbiBmYWlsdXJlLCB3ZSBjYW5ub3QganVzdCBlcmVwb3J0KEVS Uk9SKSBzaW5jZSBjYWxsZXIgaGFzIHB1dCBzdGF0ZSBpbgotICogc2hhcmVkIG1lbW9yeSB0aGF0 IG11c3QgYmUgdW5kb25lLiAgU28sIHdlIHJldHVybiBmYWxzZSBhbmQgc2F2ZSBlbm91Z2gKLSAq IGluZm8gaW4gc3RhdGljIHZhcmlhYmxlcyB0byBsZXQgU2xydVJlcG9ydElPRXJyb3IgbWFrZSB0 aGUgcmVwb3J0LgotICoKLSAqIEZvciBub3csIGFzc3VtZSBpdCdzIG5vdCB3b3J0aCBrZWVwaW5n IGEgZmlsZSBwb2ludGVyIG9wZW4gYWNyb3NzCi0gKiBpbmRlcGVuZGVudCByZWFkL3dyaXRlIG9w ZXJhdGlvbnMuICBXZSBkbyBiYXRjaCBvcGVyYXRpb25zIGR1cmluZwotICogU2ltcGxlTHJ1V3Jp dGVBbGwsIHRob3VnaC4KLSAqCi0gKiBmZGF0YSBpcyBOVUxMIGZvciBhIHN0YW5kYWxvbmUgd3Jp dGUsIHBvaW50ZXIgdG8gb3Blbi1maWxlIGluZm8gZHVyaW5nCi0gKiBTaW1wbGVMcnVXcml0ZUFs bC4KLSAqLwotc3RhdGljIGJvb2wKLVNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwg aW50IHBhZ2VubywgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRhKQotewotCVNscnVTaGFy ZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7CiAJaW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BB R0VTX1BFUl9TRUdNRU5UOwogCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BF Ul9TRUdNRU5UOwogCW9mZl90CQlvZmZzZXQgPSBycGFnZW5vICogQkxDS1NaOwotCWNoYXIJCXBh dGhbTUFYUEdQQVRIXTsKLQlpbnQJCQlmZCA9IC0xOwotCi0JLyogdXBkYXRlIHRoZSBzdGF0cyBj b3VudGVyIG9mIHdyaXR0ZW4gcGFnZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV9wYWdlX3dyaXR0 ZW4oc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7Ci0KLQkvKgotCSAqIEhvbm9yIHRoZSB3cml0ZS1X QUwtYmVmb3JlLWRhdGEgcnVsZSwgaWYgYXBwcm9wcmlhdGUsIHNvIHRoYXQgd2UgZG8gbm90Ci0J ICogd3JpdGUgb3V0IGRhdGEgYmVmb3JlIGFzc29jaWF0ZWQgV0FMIHJlY29yZHMuICBUaGlzIGlz IHRoZSBzYW1lIGFjdGlvbgotCSAqIHBlcmZvcm1lZCBkdXJpbmcgRmx1c2hCdWZmZXIoKSBpbiB0 aGUgbWFpbiBidWZmZXIgbWFuYWdlci4KLQkgKi8KLQlpZiAoc2hhcmVkLT5ncm91cF9sc24gIT0g TlVMTCkKLQl7Ci0JCS8qCi0JCSAqIFdlIG11c3QgZGV0ZXJtaW5lIHRoZSBsYXJnZXN0IGFzeW5j LWNvbW1pdCBMU04gZm9yIHRoZSBwYWdlLiBUaGlzCi0JCSAqIGlzIGEgYml0IHRlZGlvdXMsIGJ1 dCBzaW5jZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBpcyBhIHNsb3cgcGF0aAotCQkgKiBhbnl3YXks IGl0IHNlZW1zIGJldHRlciB0byBkbyB0aGlzIGhlcmUgdGhhbiB0byBtYWludGFpbiBhIHBlci1w YWdlCi0JCSAqIExTTiB2YXJpYWJsZSAod2hpY2gnZCBuZWVkIGFuIGV4dHJhIGNvbXBhcmlzb24g aW4gdGhlCi0JCSAqIHRyYW5zYWN0aW9uLWNvbW1pdCBwYXRoKS4KLQkJICovCi0JCVhMb2dSZWNQ dHIJbWF4X2xzbjsKLQkJaW50CQkJbHNuaW5kZXgsCi0JCQkJCWxzbm9mZjsKLQotCQlsc25pbmRl eCA9IHNsb3RubyAqIHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZTsKLQkJbWF4X2xzbiA9IHNo YXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4KytdOwotCQlmb3IgKGxzbm9mZiA9IDE7IGxzbm9mZiA8 IHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZTsgbHNub2ZmKyspCi0JCXsKLQkJCVhMb2dSZWNQ dHIJdGhpc19sc24gPSBzaGFyZWQtPmdyb3VwX2xzbltsc25pbmRleCsrXTsKLQotCQkJaWYgKG1h eF9sc24gPCB0aGlzX2xzbikKLQkJCQltYXhfbHNuID0gdGhpc19sc247Ci0JCX0KLQotCQlpZiAo IVhMb2dSZWNQdHJJc0ludmFsaWQobWF4X2xzbikpCi0JCXsKLQkJCS8qCi0JCQkgKiBBcyBub3Rl ZCBhYm92ZSwgZWxvZyhFUlJPUikgaXMgbm90IGFjY2VwdGFibGUgaGVyZSwgc28gaWYKLQkJCSAq IFhMb2dGbHVzaCB3ZXJlIHRvIGZhaWwsIHdlIG11c3QgUEFOSUMuICBUaGlzIGlzbid0IG11Y2gg b2YgYQotCQkJICogcmVzdHJpY3Rpb24gYmVjYXVzZSBYTG9nRmx1c2ggaXMganVzdCBhYm91dCBh bGwgY3JpdGljYWwKLQkJCSAqIHNlY3Rpb24gYW55d2F5LCBidXQgbGV0J3MgbWFrZSBzdXJlLgot CQkJICovCi0JCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsKLQkJCVhMb2dGbHVzaChtYXhfbHNuKTsK LQkJCUVORF9DUklUX1NFQ1RJT04oKTsKLQkJfQotCX0KLQotCS8qCi0JICogRHVyaW5nIGEgV3Jp dGVBbGwsIHdlIG1heSBhbHJlYWR5IGhhdmUgdGhlIGRlc2lyZWQgZmlsZSBvcGVuLgotCSAqLwot CWlmIChmZGF0YSkKLQl7Ci0JCWludAkJCWk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGZkYXRhLT5u dW1fZmlsZXM7IGkrKykKLQkJewotCQkJaWYgKGZkYXRhLT5zZWdub1tpXSA9PSBzZWdubykKLQkJ CXsKLQkJCQlmZCA9IGZkYXRhLT5mZFtpXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQot CWlmIChmZCA8IDApCi0JewotCQkvKgotCQkgKiBJZiB0aGUgZmlsZSBkb2Vzbid0IGFscmVhZHkg ZXhpc3QsIHdlIHNob3VsZCBjcmVhdGUgaXQuICBJdCBpcwotCQkgKiBwb3NzaWJsZSBmb3IgdGhp cyB0byBuZWVkIHRvIGhhcHBlbiB3aGVuIHdyaXRpbmcgYSBwYWdlIHRoYXQncyBub3QKLQkJICog Zmlyc3QgaW4gaXRzIHNlZ21lbnQ7IHdlIGFzc3VtZSB0aGUgT1MgY2FuIGNvcGUgd2l0aCB0aGF0 LiAoTm90ZToKLQkJICogaXQgbWlnaHQgc2VlbSB0aGF0IGl0J2QgYmUgb2theSB0byBjcmVhdGUg ZmlsZXMgb25seSB3aGVuCi0JCSAqIFNpbXBsZUxydVplcm9QYWdlIGlzIGNhbGxlZCBmb3IgdGhl IGZpcnN0IHBhZ2Ugb2YgYSBzZWdtZW50LgotCQkgKiBIb3dldmVyLCBpZiBhZnRlciBhIGNyYXNo IGFuZCByZXN0YXJ0IHRoZSBSRURPIGxvZ2ljIGVsZWN0cyB0bwotCQkgKiByZXBsYXkgdGhlIGxv ZyBmcm9tIGEgY2hlY2twb2ludCBiZWZvcmUgdGhlIGxhdGVzdCBvbmUsIHRoZW4gaXQncwotCQkg KiBwb3NzaWJsZSB0aGF0IHdlIHdpbGwgZ2V0IGNvbW1hbmRzIHRvIHNldCB0cmFuc2FjdGlvbiBz dGF0dXMgb2YKLQkJICogdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gdHJ1bmNh dGVkIGZyb20gdGhlIGNvbW1pdCBsb2cuCi0JCSAqIEVhc2llc3Qgd2F5IHRvIGRlYWwgd2l0aCB0 aGF0IGlzIHRvIGFjY2VwdCByZWZlcmVuY2VzIHRvCi0JCSAqIG5vbmV4aXN0ZW50IGZpbGVzIGhl cmUgYW5kIGluIFNscnVQaHlzaWNhbFJlYWRQYWdlLikKLQkJICoKLQkJICogTm90ZTogaXQgaXMg cG9zc2libGUgZm9yIG1vcmUgdGhhbiBvbmUgYmFja2VuZCB0byBiZSBleGVjdXRpbmcgdGhpcwot CQkgKiBjb2RlIHNpbXVsdGFuZW91c2x5IGZvciBkaWZmZXJlbnQgcGFnZXMgb2YgdGhlIHNhbWUg ZmlsZS4gSGVuY2UsCi0JCSAqIGRvbid0IHVzZSBPX0VYQ0wgb3IgT19UUlVOQyBvciBhbnl0aGlu ZyBsaWtlIHRoYXQuCi0JCSAqLwotCQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7Ci0J CWZkID0gT3BlblRyYW5zaWVudEZpbGUocGF0aCwgT19SRFdSIHwgT19DUkVBVCB8IFBHX0JJTkFS WSk7Ci0JCWlmIChmZCA8IDApCi0JCXsKLQkJCXNscnVfZXJyY2F1c2UgPSBTTFJVX09QRU5fRkFJ TEVEOwotCQkJc2xydV9lcnJubyA9IGVycm5vOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJ aWYgKGZkYXRhKQotCQl7Ci0JCQlpZiAoZmRhdGEtPm51bV9maWxlcyA8IE1BWF9XUklURUFMTF9C VUZGRVJTKQotCQkJewotCQkJCWZkYXRhLT5mZFtmZGF0YS0+bnVtX2ZpbGVzXSA9IGZkOwotCQkJ CWZkYXRhLT5zZWdub1tmZGF0YS0+bnVtX2ZpbGVzXSA9IHNlZ25vOwotCQkJCWZkYXRhLT5udW1f ZmlsZXMrKzsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIEluIHRoZSB1bmxp a2VseSBldmVudCB0aGF0IHdlIGV4Y2VlZCBNQVhfRkxVU0hfQlVGRkVSUywKLQkJCQkgKiBmYWxs IGJhY2sgdG8gdHJlYXRpbmcgaXQgYXMgYSBzdGFuZGFsb25lIHdyaXRlLgotCQkJCSAqLwotCQkJ CWZkYXRhID0gTlVMTDsKLQkJCX0KLQkJfQotCX0KLQotCWVycm5vID0gMDsKLQlwZ3N0YXRfcmVw b3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9TTFJVX1dSSVRFKTsKLQlpZiAocGdfcHdyaXRlKGZk LCBzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10sIEJMQ0tTWiwgb2Zmc2V0KSAhPSBCTENLU1op Ci0JewotCQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7Ci0JCS8qIGlmIHdyaXRlIGRpZG4ndCBz ZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KLQkJaWYgKGVycm5v ID09IDApCi0JCQllcnJubyA9IEVOT1NQQzsKLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfV1JJVEVf RkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCWlmICghZmRhdGEpCi0JCQlDbG9zZVRy YW5zaWVudEZpbGUoZmQpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXBnc3RhdF9yZXBvcnRfd2Fp dF9lbmQoKTsKLQotCS8qIFF1ZXVlIHVwIGEgc3luYyByZXF1ZXN0IGZvciB0aGUgY2hlY2twb2lu dGVyLiAqLwotCWlmIChjdGwtPnN5bmNfaGFuZGxlciAhPSBTWU5DX0hBTkRMRVJfTk9ORSkKLQl7 Ci0JCUZpbGVUYWcJCXRhZzsKLQotCQlJTklUX1NMUlVGSUxFVEFHKHRhZywgY3RsLT5zeW5jX2hh bmRsZXIsIHNlZ25vKTsKLQkJaWYgKCFSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNfUkVR VUVTVCwgZmFsc2UpKQotCQl7Ci0JCQkvKiBObyBzcGFjZSB0byBlbnF1ZXVlIHN5bmMgcmVxdWVz dC4gIERvIGl0IHN5bmNocm9ub3VzbHkuICovCi0JCQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQo V0FJVF9FVkVOVF9TTFJVX1NZTkMpOwotCQkJaWYgKHBnX2ZzeW5jKGZkKSAhPSAwKQotCQkJewot CQkJCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQkJCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9G U1lOQ19GQUlMRUQ7Ci0JCQkJc2xydV9lcnJubyA9IGVycm5vOwotCQkJCUNsb3NlVHJhbnNpZW50 RmlsZShmZCk7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQkJcGdzdGF0X3JlcG9ydF93YWl0 X2VuZCgpOwotCQl9Ci0JfQotCi0JLyogQ2xvc2UgZmlsZSwgdW5sZXNzIHBhcnQgb2YgZmx1c2gg cmVxdWVzdC4gKi8KLQlpZiAoIWZkYXRhKQotCXsKLQkJaWYgKENsb3NlVHJhbnNpZW50RmlsZShm ZCkgIT0gMCkKLQkJewotCQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwotCQkJ c2xydV9lcnJubyA9IGVycm5vOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JcmV0dXJu IHRydWU7Ci19Ci0KLS8qCi0gKiBJc3N1ZSB0aGUgZXJyb3IgbWVzc2FnZSBhZnRlciBmYWlsdXJl IG9mIFNscnVQaHlzaWNhbFJlYWRQYWdlIG9yCi0gKiBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2UuICBD YWxsIHRoaXMgYWZ0ZXIgY2xlYW5pbmcgdXAgc2hhcmVkLW1lbW9yeSBzdGF0ZS4KLSAqLwotc3Rh dGljIHZvaWQKLVNscnVSZXBvcnRJT0Vycm9yKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBUcmFu c2FjdGlvbklkIHhpZCkKLXsKLQlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVS X1NFR01FTlQ7Ci0JaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01F TlQ7Ci0JaW50CQkJb2Zmc2V0ID0gcnBhZ2VubyAqIEJMQ0tTWjsKLQljaGFyCQlwYXRoW01BWFBH UEFUSF07Ci0KLQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7Ci0JZXJybm8gPSBzbHJ1 X2Vycm5vOwotCXN3aXRjaCAoc2xydV9lcnJjYXVzZSkKLQl7Ci0JCWNhc2UgU0xSVV9PUEVOX0ZB SUxFRDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vzcygp LAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAl dSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAl bS4iLCBwYXRoKSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0xSVV9TRUVLX0ZBSUxFRDoKLQkJCWVy ZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJy bXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0J CQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBzZWVrIGluIGZpbGUgXCIlc1wiIHRvIG9mZnNldCAl ZDogJW0uIiwKLQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBT TFJVX1JFQURfRkFJTEVEOgotCQkJaWYgKGVycm5vKQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJ CQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBh Y2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJCSBlcnJkZXRhaWwo IkNvdWxkIG5vdCByZWFkIGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiAlbS4iLAotCQkJ CQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7Ci0JCQllbHNlCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJ CQkJCShlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1Iiwg eGlkKSwKLQkJCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCByZWFkIGZyb20gZmlsZSBcIiVzXCIg YXQgb2Zmc2V0ICVkOiByZWFkIHRvbyBmZXcgYnl0ZXMuIiwgcGF0aCwgb2Zmc2V0KSkpOwotCQkJ YnJlYWs7Ci0JCWNhc2UgU0xSVV9XUklURV9GQUlMRUQ6Ci0JCQlpZiAoZXJybm8pCi0JCQkJZXJl cG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkJIGVy cm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJhbnNhY3Rpb24gJXUiLCB4aWQpLAot CQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiIGF0IG9mZnNl dCAlZDogJW0uIiwKLQkJCQkJCQkJICAgcGF0aCwgb2Zmc2V0KSkpOwotCQkJZWxzZQotCQkJCWVy ZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0 cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBub3Qgd3JpdGUg dG8gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiB3cm90ZSB0b28gZmV3IGJ5dGVzLiIsCi0JCQkJ CQkJCSAgIHBhdGgsIG9mZnNldCkpKTsKLQkJCWJyZWFrOwotCQljYXNlIFNMUlVfRlNZTkNfRkFJ TEVEOgotCQkJZXJlcG9ydChkYXRhX3N5bmNfZWxldmVsKEVSUk9SKSwKLQkJCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVz IG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IGZz eW5jIGZpbGUgXCIlc1wiOiAlbS4iLAotCQkJCQkJCSAgIHBhdGgpKSk7Ci0JCQlicmVhazsKLQkJ Y2FzZSBTTFJVX0NMT1NFX0ZBSUxFRDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1 cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBj bG9zZSBmaWxlIFwiJXNcIjogJW0uIiwKLQkJCQkJCQkgICBwYXRoKSkpOwotCQkJYnJlYWs7Ci0J CWRlZmF1bHQ6Ci0JCQkvKiBjYW4ndCBnZXQgaGVyZSwgd2UgdHJ1c3QgKi8KLQkJCWVsb2coRVJS T1IsICJ1bnJlY29nbml6ZWQgU2ltcGxlTHJ1IGVycm9yIGNhdXNlOiAlZCIsCi0JCQkJIChpbnQp IHNscnVfZXJyY2F1c2UpOwotCQkJYnJlYWs7Ci0JfQotfQotCi0vKgotICogU2VsZWN0IHRoZSBz bG90IHRvIHJlLXVzZSB3aGVuIHdlIG5lZWQgYSBmcmVlIHNsb3QuCi0gKgotICogVGhlIHRhcmdl dCBwYWdlIG51bWJlciBpcyBwYXNzZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZQot ICogcG9zc2liaWxpdHkgdGhhdCBzb21lIG90aGVyIHByb2Nlc3MgcmVhZHMgaW4gdGhlIHRhcmdl dCBwYWdlIHdoaWxlCi0gKiB3ZSBhcmUgZG9pbmcgSS9PIHRvIGZyZWUgYSBzbG90LiAgSGVuY2Us IGNoZWNrIG9yIHJlY2hlY2sgdG8gc2VlIGlmCi0gKiBhbnkgc2xvdCBhbHJlYWR5IGhvbGRzIHRo ZSB0YXJnZXQgcGFnZSwgYW5kIHJldHVybiB0aGF0IHNsb3QgaWYgc28uCi0gKiBUaHVzLCB0aGUg cmV0dXJuZWQgc2xvdCBpcyAqZWl0aGVyKiBhIHNsb3QgYWxyZWFkeSBob2xkaW5nIHRoZSBwYWdl bm8KLSAqIChjb3VsZCBiZSBhbnkgc3RhdGUgZXhjZXB0IEVNUFRZKSwgKm9yKiBhIGZyZWVhYmxl IHNsb3QgKHN0YXRlIEVNUFRZCi0gKiBvciBDTEVBTikuCi0gKgotICogQ29udHJvbCBsb2NrIG11 c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgotICovCi1zdGF0 aWMgaW50Ci1TbHJ1U2VsZWN0TFJVUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubykKLXsKLQlT bHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCi0JLyogT3V0ZXIgbG9vcCBoYW5kbGVz IHJlc3RhcnQgYWZ0ZXIgSS9PICovCi0JZm9yICg7OykKLQl7Ci0JCWludAkJCXNsb3RubzsKLQkJ aW50CQkJY3VyX2NvdW50OwotCQlpbnQJCQliZXN0dmFsaWRzbG90ID0gMDsJLyoga2VlcCBjb21w aWxlciBxdWlldCAqLwotCQlpbnQJCQliZXN0X3ZhbGlkX2RlbHRhID0gLTE7Ci0JCWludAkJCWJl c3RfdmFsaWRfcGFnZV9udW1iZXIgPSAwOyAvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0JCWlu dAkJCWJlc3RpbnZhbGlkc2xvdCA9IDA7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KLQkJaW50 CQkJYmVzdF9pbnZhbGlkX2RlbHRhID0gLTE7Ci0JCWludAkJCWJlc3RfaW52YWxpZF9wYWdlX251 bWJlciA9IDA7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KLQotCQkvKiBTZWUgaWYgcGFnZSBh bHJlYWR5IGhhcyBhIGJ1ZmZlciBhc3NpZ25lZCAqLwotCQlmb3IgKHNsb3RubyA9IDA7IHNsb3Ru byA8IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQkJewotCQkJaWYgKHNoYXJlZC0+cGFn ZV9udW1iZXJbc2xvdG5vXSA9PSBwYWdlbm8gJiYKLQkJCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Ns b3Rub10gIT0gU0xSVV9QQUdFX0VNUFRZKQotCQkJCXJldHVybiBzbG90bm87Ci0JCX0KLQotCQkv KgotCQkgKiBJZiB3ZSBmaW5kIGFueSBFTVBUWSBzbG90LCBqdXN0IHNlbGVjdCB0aGF0IG9uZS4g RWxzZSBjaG9vc2UgYQotCQkgKiB2aWN0aW0gcGFnZSB0byByZXBsYWNlLiAgV2Ugbm9ybWFsbHkg dGFrZSB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZAotCQkgKiB2YWxpZCBwYWdlLCBidXQgd2Ugd2ls bCBuZXZlciB0YWtlIHRoZSBzbG90IGNvbnRhaW5pbmcKLQkJICogbGF0ZXN0X3BhZ2VfbnVtYmVy LCBldmVuIGlmIGl0IGFwcGVhcnMgbGVhc3QgcmVjZW50bHkgdXNlZC4gIFdlCi0JCSAqIHdpbGwg c2VsZWN0IGEgc2xvdCB0aGF0IGlzIGFscmVhZHkgSS9PIGJ1c3kgb25seSBpZiB0aGVyZSBpcyBu bwotCQkgKiBvdGhlciBjaG9pY2U6IGEgcmVhZC1idXN5IHNsb3Qgd2lsbCBub3QgYmUgbGVhc3Qg cmVjZW50bHkgdXNlZCBvbmNlCi0JCSAqIHRoZSByZWFkIGZpbmlzaGVzLCBhbmQgd2FpdGluZyBm b3IgYW4gSS9PIG9uIGEgd3JpdGUtYnVzeSBzbG90IGlzCi0JCSAqIGluZmVyaW9yIHRvIGp1c3Qg cGlja2luZyBzb21lIG90aGVyIHNsb3QuICBUZXN0aW5nIHNob3dzIHRoZSBzbG90Ci0JCSAqIHdl IHBpY2sgaW5zdGVhZCB3aWxsIG9mdGVuIGJlIGNsZWFuLCBhbGxvd2luZyB1cyB0byBiZWdpbiBh IHJlYWQgYXQKLQkJICogb25jZS4KLQkJICoKLQkJICogTm9ybWFsbHkgdGhlIHBhZ2VfbHJ1X2Nv dW50IHZhbHVlcyB3aWxsIGFsbCBiZSBkaWZmZXJlbnQgYW5kIHNvCi0JCSAqIHRoZXJlIHdpbGwg YmUgYSB3ZWxsLWRlZmluZWQgTFJVIHBhZ2UuICBCdXQgc2luY2Ugd2UgYWxsb3cKLQkJICogY29u Y3VycmVudCBleGVjdXRpb24gb2YgU2xydVJlY2VudGx5VXNlZCgpIHdpdGhpbgotCQkgKiBTaW1w bGVMcnVSZWFkUGFnZV9SZWFkT25seSgpLCBpdCBpcyBwb3NzaWJsZSB0aGF0IG11bHRpcGxlIHBh Z2VzCi0JCSAqIGFjcXVpcmUgdGhlIHNhbWUgbHJ1X2NvdW50IHZhbHVlcy4gIEluIHRoYXQgY2Fz ZSB3ZSBicmVhayB0aWVzIGJ5Ci0JCSAqIGNob29zaW5nIHRoZSBmdXJ0aGVzdC1iYWNrIHBhZ2Uu Ci0JCSAqCi0JCSAqIE5vdGljZSB0aGF0IHRoaXMgbmV4dCBsaW5lIGZvcmNpYmx5IGFkdmFuY2Vz IGN1cl9scnVfY291bnQgdG8gYQotCQkgKiB2YWx1ZSB0aGF0IGlzIGNlcnRhaW5seSBiZXlvbmQg YW55IHZhbHVlIHRoYXQgd2lsbCBiZSBpbiB0aGUKLQkJICogcGFnZV9scnVfY291bnQgYXJyYXkg YWZ0ZXIgdGhlIGxvb3AgZmluaXNoZXMuICBUaGlzIGVuc3VyZXMgdGhhdAotCQkgKiB0aGUgbmV4 dCBleGVjdXRpb24gb2YgU2xydVJlY2VudGx5VXNlZCB3aWxsIG1hcmsgdGhlIHBhZ2UgbmV3bHkK LQkJICogdXNlZCwgZXZlbiBpZiBpdCdzIGZvciBhIHBhZ2UgdGhhdCBoYXMgdGhlIGN1cnJlbnQg Y291bnRlciB2YWx1ZS4KLQkJICogVGhhdCBnZXRzIHVzIGJhY2sgb24gdGhlIHBhdGggdG8gaGF2 aW5nIGdvb2QgZGF0YSB3aGVuIHRoZXJlIGFyZQotCQkgKiBtdWx0aXBsZSBwYWdlcyB3aXRoIHRo ZSBzYW1lIGxydV9jb3VudC4KLQkJICovCi0JCWN1cl9jb3VudCA9IChzaGFyZWQtPmN1cl9scnVf Y291bnQpKys7Ci0JCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgc2hhcmVkLT5udW1fc2xvdHM7 IHNsb3RubysrKQotCQl7Ci0JCQlpbnQJCQl0aGlzX2RlbHRhOwotCQkJaW50CQkJdGhpc19wYWdl X251bWJlcjsKLQotCQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BB R0VfRU1QVFkpCi0JCQkJcmV0dXJuIHNsb3RubzsKLQkJCXRoaXNfZGVsdGEgPSBjdXJfY291bnQg LSBzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50W3Nsb3Rub107Ci0JCQlpZiAodGhpc19kZWx0YSA8IDAp Ci0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBDbGVhbiB1cCBpbiBjYXNlIHNoYXJlZCB1cGRhdGVzIGhh dmUgY2F1c2VkIGN1cl9jb3VudAotCQkJCSAqIGluY3JlbWVudHMgdG8gZ2V0ICJsb3N0Ii4gIFdl IGJhY2sgb2ZmIHRoZSBwYWdlIGNvdW50cywKLQkJCQkgKiByYXRoZXIgdGhhbiB0cnlpbmcgdG8g aW5jcmVhc2UgY3VyX2NvdW50LCB0byBhdm9pZCBhbnkKLQkJCQkgKiBxdWVzdGlvbiBvZiBpbmZp bml0ZSBsb29wcyBvciBmYWlsdXJlIGluIHRoZSBwcmVzZW5jZSBvZgotCQkJCSAqIHdyYXBwZWQt YXJvdW5kIGNvdW50cy4KLQkJCQkgKi8KLQkJCQlzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50W3Nsb3Ru b10gPSBjdXJfY291bnQ7Ci0JCQkJdGhpc19kZWx0YSA9IDA7Ci0JCQl9Ci0JCQl0aGlzX3BhZ2Vf bnVtYmVyID0gc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dOwotCQkJaWYgKHRoaXNfcGFnZV9u dW1iZXIgPT0gc2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIpCi0JCQkJY29udGludWU7Ci0JCQlp ZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCkKLQkJCXsK LQkJCQlpZiAodGhpc19kZWx0YSA+IGJlc3RfdmFsaWRfZGVsdGEgfHwKLQkJCQkJKHRoaXNfZGVs dGEgPT0gYmVzdF92YWxpZF9kZWx0YSAmJgotCQkJCQkgY3RsLT5QYWdlUHJlY2VkZXModGhpc19w YWdlX251bWJlciwKLQkJCQkJCQkJCSAgIGJlc3RfdmFsaWRfcGFnZV9udW1iZXIpKSkKLQkJCQl7 Ci0JCQkJCWJlc3R2YWxpZHNsb3QgPSBzbG90bm87Ci0JCQkJCWJlc3RfdmFsaWRfZGVsdGEgPSB0 aGlzX2RlbHRhOwotCQkJCQliZXN0X3ZhbGlkX3BhZ2VfbnVtYmVyID0gdGhpc19wYWdlX251bWJl cjsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJaWYgKHRoaXNfZGVsdGEgPiBiZXN0 X2ludmFsaWRfZGVsdGEgfHwKLQkJCQkJKHRoaXNfZGVsdGEgPT0gYmVzdF9pbnZhbGlkX2RlbHRh ICYmCi0JCQkJCSBjdGwtPlBhZ2VQcmVjZWRlcyh0aGlzX3BhZ2VfbnVtYmVyLAotCQkJCQkJCQkJ ICAgYmVzdF9pbnZhbGlkX3BhZ2VfbnVtYmVyKSkpCi0JCQkJewotCQkJCQliZXN0aW52YWxpZHNs b3QgPSBzbG90bm87Ci0JCQkJCWJlc3RfaW52YWxpZF9kZWx0YSA9IHRoaXNfZGVsdGE7Ci0JCQkJ CWJlc3RfaW52YWxpZF9wYWdlX251bWJlciA9IHRoaXNfcGFnZV9udW1iZXI7Ci0JCQkJfQotCQkJ fQotCQl9Ci0KLQkJLyoKLQkJICogSWYgYWxsIHBhZ2VzIChleGNlcHQgcG9zc2libHkgdGhlIGxh dGVzdCBvbmUpIGFyZSBJL08gYnVzeSwgd2UnbGwKLQkJICogaGF2ZSB0byB3YWl0IGZvciBhbiBJ L08gdG8gY29tcGxldGUgYW5kIHRoZW4gcmV0cnkuICBJbiB0aGF0Ci0JCSAqIHVuaGFwcHkgY2Fz ZSwgd2UgY2hvb3NlIHRvIHdhaXQgZm9yIHRoZSBJL08gb24gdGhlIGxlYXN0IHJlY2VudGx5Ci0J CSAqIHVzZWQgc2xvdCwgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCB3YXMgbGlrZWx5IGluaXRp YXRlZCBmaXJzdCBvZgotCQkgKiBhbGwgdGhlIEkvT3MgaW4gcHJvZ3Jlc3MgYW5kIG1heSB0aGVy ZWZvcmUgZmluaXNoIGZpcnN0LgotCQkgKi8KLQkJaWYgKGJlc3RfdmFsaWRfZGVsdGEgPCAwKQot CQl7Ci0JCQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBiZXN0aW52YWxpZHNsb3QpOwotCQkJY29udGlu dWU7Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB0aGUgc2VsZWN0ZWQgcGFnZSBpcyBjbGVhbiwgd2Un cmUgc2V0LgotCQkgKi8KLQkJaWYgKCFzaGFyZWQtPnBhZ2VfZGlydHlbYmVzdHZhbGlkc2xvdF0p Ci0JCQlyZXR1cm4gYmVzdHZhbGlkc2xvdDsKLQotCQkvKgotCQkgKiBXcml0ZSB0aGUgcGFnZS4K LQkJICovCi0JCVNscnVJbnRlcm5hbFdyaXRlUGFnZShjdGwsIGJlc3R2YWxpZHNsb3QsIE5VTEwp OwotCi0JCS8qCi0JCSAqIE5vdyBsb29wIGJhY2sgYW5kIHRyeSBhZ2Fpbi4gIFRoaXMgaXMgdGhl IGVhc2llc3Qgd2F5IG9mIGRlYWxpbmcKLQkJICogd2l0aCBjb3JuZXIgY2FzZXMgc3VjaCBhcyB0 aGUgdmljdGltIHBhZ2UgYmVpbmcgcmUtZGlydGllZCB3aGlsZSB3ZQotCQkgKiB3cm90ZSBpdC4K LQkJICovCi0JfQotfQotCi0vKgotICogV3JpdGUgZGlydHkgcGFnZXMgdG8gZGlzayBkdXJpbmcg Y2hlY2twb2ludCBvciBkYXRhYmFzZSBzaHV0ZG93bi4gIEZsdXNoaW5nCi0gKiBpcyBkZWZlcnJl ZCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIFByb2Nlc3NTeW5jUmVxdWVzdHMoKSwgdGhvdWdoIHdl IGRvIGZzeW5jCi0gKiB0aGUgY29udGFpbmluZyBkaXJlY3RvcnkgaGVyZSB0byBtYWtlIHN1cmUg dGhhdCBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeQotICogZW50cmllcyBhcmUgb24gZGlzay4KLSAq Lwotdm9pZAotU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0 aWVkKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0JU2xydVdyaXRlQWxs RGF0YSBmZGF0YTsKLQlpbnQJCQlzbG90bm87Ci0JaW50CQkJcGFnZW5vID0gMDsKLQlpbnQJCQlp OwotCWJvb2wJCW9rOwotCi0JLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIGZsdXNoZXMg Ki8KLQlwZ3N0YXRfY291bnRfc2xydV9mbHVzaChzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQot CS8qCi0JICogRmluZCBhbmQgd3JpdGUgZGlydHkgcGFnZXMKLQkgKi8KLQlmZGF0YS5udW1fZmls ZXMgPSAwOworCW9mZl90CQlzaXplOworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJl bEZpbGVMb2NhdG9yKHNscnVfaWQsIHNlZ25vKTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNt Z3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBNQUlOX0ZPUktOVU0pOwogCi0JTFdM b2NrQWNxdWlyZShzaGFyZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JZm9yIChz bG90bm8gPSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0JewotCQlT bHJ1SW50ZXJuYWxXcml0ZVBhZ2UoY3RsLCBzbG90bm8sICZmZGF0YSk7Ci0KLQkJLyoKLQkJICog SW4gc29tZSBwbGFjZXMgKGUuZy4gY2hlY2twb2ludHMpLCB3ZSBjYW5ub3QgYXNzZXJ0IHRoYXQg dGhlIHNsb3QKLQkJICogaXMgY2xlYW4gbm93LCBzaW5jZSBhbm90aGVyIHByb2Nlc3MgbWlnaHQg aGF2ZSByZS1kaXJ0aWVkIGl0Ci0JCSAqIGFscmVhZHkuICBUaGF0J3Mgb2theS4KLQkJICovCi0J CUFzc2VydChhbGxvd19yZWRpcnRpZWQgfHwKLQkJCSAgIHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xv dG5vXSA9PSBTTFJVX1BBR0VfRU1QVFkgfHwKLQkJCSAgIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Ns b3Rub10gPT0gU0xSVV9QQUdFX1ZBTElEICYmCi0JCQkJIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90 bm9dKSk7Ci0JfQotCi0JTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKKwkvKiB1 cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgY2hlY2tlZCBwYWdlcyAqLworCXBnc3RhdF9jb3Vu dF9zbHJ1X3BhZ2VfZXhpc3RzKHNscnVfaWQpOwogCi0JLyoKLQkgKiBOb3cgY2xvc2UgYW55IGZp bGVzIHRoYXQgd2VyZSBvcGVuCi0JICovCi0Jb2sgPSB0cnVlOwotCWZvciAoaSA9IDA7IGkgPCBm ZGF0YS5udW1fZmlsZXM7IGkrKykKLQl7Ci0JCWlmIChDbG9zZVRyYW5zaWVudEZpbGUoZmRhdGEu ZmRbaV0pICE9IDApCi0JCXsKLQkJCXNscnVfZXJyY2F1c2UgPSBTTFJVX0NMT1NFX0ZBSUxFRDsK LQkJCXNscnVfZXJybm8gPSBlcnJubzsKLQkJCXBhZ2VubyA9IGZkYXRhLnNlZ25vW2ldICogU0xS VV9QQUdFU19QRVJfU0VHTUVOVDsKLQkJCW9rID0gZmFsc2U7Ci0JCX0KLQl9Ci0JaWYgKCFvaykK LQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdlbm8sIEludmFsaWRUcmFuc2FjdGlvbklkKTsK KwlpZiAoc21ncmV4aXN0cyhzZmlsZSkpCisJCXNpemUgPSBzbWdybmJsb2NrcyhzZmlsZSk7CisJ ZWxzZQorCQlzaXplID0gMDsKIAotCS8qIEVuc3VyZSB0aGF0IGRpcmVjdG9yeSBlbnRyaWVzIGZv ciBuZXcgZmlsZXMgYXJlIG9uIGRpc2suICovCi0JaWYgKGN0bC0+c3luY19oYW5kbGVyICE9IFNZ TkNfSEFORExFUl9OT05FKQotCQlmc3luY19mbmFtZShjdGwtPkRpciwgdHJ1ZSk7CisJcmV0dXJu IHNpemUgPj0gb2Zmc2V0ICsgQkxDS1NaOwogfQogCiAvKgpAQCAtMTIyNCw3NSArOTYsMTQgQEAg U2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKQogICog YWZ0ZXIgaXQgaGFzIGFjY3J1ZWQgZnJlc2hseS13cml0dGVuIGRhdGEuCiAgKi8KIHZvaWQKLVNp bXBsZUxydVRydW5jYXRlKFNscnVDdGwgY3RsLCBpbnQgY3V0b2ZmUGFnZSkKK1NpbXBsZUxydVRy dW5jYXRlKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVz LCBpbnQgY3V0b2ZmUGFnZSkKIHsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwot CWludAkJCXNsb3RubzsKLQogCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiB0cnVuY2F0 ZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV90cnVuY2F0ZShzaGFyZWQtPnNscnVfc3RhdHNfaWR4 KTsKLQotCS8qCi0JICogU2NhbiBzaGFyZWQgbWVtb3J5IGFuZCByZW1vdmUgYW55IHBhZ2VzIHBy ZWNlZGluZyB0aGUgY3V0b2ZmIHBhZ2UsIHRvCi0JICogZW5zdXJlIHdlIHdvbid0IHJld3JpdGUg dGhlbSBsYXRlci4gIChTaW5jZSB0aGlzIGlzIG5vcm1hbGx5IGNhbGxlZCBpbgotCSAqIG9yIGp1 c3QgYWZ0ZXIgYSBjaGVja3BvaW50LCBhbnkgZGlydHkgcGFnZXMgc2hvdWxkIGhhdmUgYmVlbiBm bHVzaGVkCi0JICogYWxyZWFkeSAuLi4gd2UncmUganVzdCBiZWluZyBleHRyYSBjYXJlZnVsIGhl cmUuKQotCSAqLwotCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVT SVZFKTsKLQotcmVzdGFydDoKLQotCS8qCi0JICogV2hpbGUgd2UgYXJlIGhvbGRpbmcgdGhlIGxv Y2ssIG1ha2UgYW4gaW1wb3J0YW50IHNhZmV0eSBjaGVjazogdGhlCi0JICogY3VycmVudCBlbmRw b2ludCBwYWdlIG11c3Qgbm90IGJlIGVsaWdpYmxlIGZvciByZW1vdmFsLgotCSAqLwotCWlmIChj dGwtPlBhZ2VQcmVjZWRlcyhzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciwgY3V0b2ZmUGFnZSkp Ci0JewotCQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCQllcmVwb3J0KExP RywKLQkJCQkoZXJybXNnKCJjb3VsZCBub3QgdHJ1bmNhdGUgZGlyZWN0b3J5IFwiJXNcIjogYXBw YXJlbnQgd3JhcGFyb3VuZCIsCi0JCQkJCQljdGwtPkRpcikpKTsKLQkJcmV0dXJuOwotCX0KLQot CWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgc2hhcmVkLT5udW1fc2xvdHM7IHNsb3RubysrKQot CXsKLQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfRU1QVFkp Ci0JCQljb250aW51ZTsKLQkJaWYgKCFjdGwtPlBhZ2VQcmVjZWRlcyhzaGFyZWQtPnBhZ2VfbnVt YmVyW3Nsb3Rub10sIGN1dG9mZlBhZ2UpKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogSWYg cGFnZSBpcyBjbGVhbiwganVzdCBjaGFuZ2Ugc3RhdGUgdG8gRU1QVFkgKGV4cGVjdGVkIGNhc2Up LgotCQkgKi8KLQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0Vf VkFMSUQgJiYKLQkJCSFzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSkKLQkJewotCQkJc2hhcmVk LT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJY29udGludWU7Ci0J CX0KLQotCQkvKgotCQkgKiBIbW0sIHdlIGhhdmUgKG9yIG1heSBoYXZlKSBJL08gb3BlcmF0aW9u cyBhY3Rpbmcgb24gdGhlIHBhZ2UsIHNvCi0JCSAqIHdlJ3ZlIGdvdCB0byB3YWl0IGZvciB0aGVt IHRvIGZpbmlzaCBhbmQgdGhlbiBzdGFydCBhZ2Fpbi4gVGhpcyBpcwotCQkgKiB0aGUgc2FtZSBs b2dpYyBhcyBpbiBTbHJ1U2VsZWN0TFJVUGFnZS4gIChYWFggaWYgcGFnZSBpcyBkaXJ0eSwKLQkJ ICogd291bGRuJ3QgaXQgYmUgT0sgdG8ganVzdCBkaXNjYXJkIGl0IHdpdGhvdXQgd3JpdGluZyBp dD8KLQkJICogU2xydU1heURlbGV0ZVNlZ21lbnQoKSB1c2VzIGEgc3RyaWN0ZXIgcXVhbGlmaWNh dGlvbiwgc28gd2UgbWlnaHQKLQkJICogbm90IGRlbGV0ZSB0aGlzIHBhZ2UgaW4gdGhlIGVuZDsg ZXZlbiBpZiB3ZSBkb24ndCBkZWxldGUgaXQsIHdlCi0JCSAqIHdvbid0IGhhdmUgY2F1c2UgdG8g cmVhZCBpdHMgZGF0YSBhZ2Fpbi4gIEZvciBub3csIGtlZXAgdGhlIGxvZ2ljCi0JCSAqIHRoZSBz YW1lIGFzIGl0IHdhcy4pCi0JCSAqLwotCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9d ID09IFNMUlVfUEFHRV9WQUxJRCkKLQkJCVNscnVJbnRlcm5hbFdyaXRlUGFnZShjdGwsIHNsb3Ru bywgTlVMTCk7Ci0JCWVsc2UKLQkJCVNpbXBsZUxydVdhaXRJTyhjdGwsIHNsb3Rubyk7Ci0JCWdv dG8gcmVzdGFydDsKLQl9Ci0KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwor CXBnc3RhdF9jb3VudF9zbHJ1X3RydW5jYXRlKHNscnVfaWQpOwogCiAJLyogTm93IHdlIGNhbiBy ZW1vdmUgdGhlIG9sZCBzZWdtZW50KHMpICovCi0JKHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5KGN0 bCwgU2xydVNjYW5EaXJDYkRlbGV0ZUN1dG9mZiwgJmN1dG9mZlBhZ2UpOworCSh2b2lkKSBTbHJ1 U2NhbkRpcmVjdG9yeShzbHJ1X2lkLCBQYWdlUHJlY2VkZXMsIFNscnVTY2FuRGlyQ2JEZWxldGVD dXRvZmYsCisJCQkJCQkJICZjdXRvZmZQYWdlKTsKIH0KIAogLyoKQEAgLTEzMDIsNzcgKzExMywy MiBAQCByZXN0YXJ0OgogICogdGhleSBlaXRoZXIgY2FuJ3QgeWV0IGNvbnRhaW4gYW55dGhpbmcs IG9yIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFuZWQgb3V0LgogICovCiBzdGF0aWMgdm9pZAotU2xy dUludGVybmFsRGVsZXRlU2VnbWVudChTbHJ1Q3RsIGN0bCwgaW50IHNlZ25vKQorU2xydUludGVy bmFsRGVsZXRlU2VnbWVudChpbnQgc2xydV9pZCwgaW50IHNlZ25vKQogewotCWNoYXIJCXBhdGhb TUFYUEdQQVRIXTsKLQotCS8qIEZvcmdldCBhbnkgZnN5bmMgcmVxdWVzdHMgcXVldWVkIGZvciB0 aGlzIHNlZ21lbnQuICovCi0JaWYgKGN0bC0+c3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9O T05FKQotCXsKLQkJRmlsZVRhZwkJdGFnOwotCi0JCUlOSVRfU0xSVUZJTEVUQUcodGFnLCBjdGwt PnN5bmNfaGFuZGxlciwgc2Vnbm8pOwotCQlSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNf Rk9SR0VUX1JFUVVFU1QsIHRydWUpOwotCX0KKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvciA9IFNs cnVSZWxGaWxlTG9jYXRvcihzbHJ1X2lkLCBzZWdubyk7CisJU01nckZpbGVIYW5kbGUgc2ZpbGUg PSBzbWdyb3BlbihybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgTUFJTl9GT1JLTlVNKTsKIAog CS8qIFVubGluayB0aGUgZmlsZS4gKi8KLQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7 Ci0JZXJlcG9ydChERUJVRzIsIChlcnJtc2dfaW50ZXJuYWwoInJlbW92aW5nIGZpbGUgXCIlc1wi IiwgcGF0aCkpKTsKLQl1bmxpbmsocGF0aCk7CisJc21ncnVubGluayhzZmlsZSwgZmFsc2UpOwog fQogCiAvKgogICogRGVsZXRlIGFuIGluZGl2aWR1YWwgU0xSVSBzZWdtZW50LCBpZGVudGlmaWVk IGJ5IHRoZSBzZWdtZW50IG51bWJlci4KICAqLwogdm9pZAotU2xydURlbGV0ZVNlZ21lbnQoU2xy dUN0bCBjdGwsIGludCBzZWdubykKK1NscnVEZWxldGVTZWdtZW50KGludCBzbHJ1X2lkLCBpbnQg c2Vnbm8pCiB7Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlzbG90 bm87Ci0JYm9vbAkJZGlkX3dyaXRlOwotCi0JLyogQ2xlYW4gb3V0IGFueSBwb3NzaWJseSBleGlz dGluZyByZWZlcmVuY2VzIHRvIHRoZSBzZWdtZW50LiAqLwotCUxXTG9ja0FjcXVpcmUoc2hhcmVk LT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLXJlc3RhcnQ6Ci0JZGlkX3dyaXRlID0gZmFs c2U7Ci0JZm9yIChzbG90bm8gPSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5v KyspCi0JewotCQlpbnQJCQlwYWdlc2Vnbm8gPSBzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10g LyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwotCi0JCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Ns b3Rub10gPT0gU0xSVV9QQUdFX0VNUFRZKQotCQkJY29udGludWU7Ci0KLQkJLyogbm90IHRoZSBz ZWdtZW50IHdlJ3JlIGxvb2tpbmcgZm9yICovCi0JCWlmIChwYWdlc2Vnbm8gIT0gc2Vnbm8pCi0J CQljb250aW51ZTsKLQotCQkvKiBJZiBwYWdlIGlzIGNsZWFuLCBqdXN0IGNoYW5nZSBzdGF0ZSB0 byBFTVBUWSAoZXhwZWN0ZWQgY2FzZSkuICovCi0JCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Ns b3Rub10gPT0gU0xSVV9QQUdFX1ZBTElEICYmCi0JCQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Ru b10pCi0JCXsKLQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9FTVBU WTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogU2FtZSBsb2dpYyBhcyBTaW1wbGVMcnVUcnVu Y2F0ZSgpICovCi0JCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdF X1ZBTElEKQotCQkJU2xydUludGVybmFsV3JpdGVQYWdlKGN0bCwgc2xvdG5vLCBOVUxMKTsKLQkJ ZWxzZQotCQkJU2ltcGxlTHJ1V2FpdElPKGN0bCwgc2xvdG5vKTsKLQotCQlkaWRfd3JpdGUgPSB0 cnVlOwotCX0KLQotCS8qCi0JICogQmUgZXh0cmEgY2FyZWZ1bCBhbmQgcmUtY2hlY2suIFRoZSBJ TyBmdW5jdGlvbnMgcmVsZWFzZSB0aGUgY29udHJvbAotCSAqIGxvY2ssIHNvIG5ldyBwYWdlcyBj b3VsZCBoYXZlIGJlZW4gcmVhZCBpbi4KLQkgKi8KLQlpZiAoZGlkX3dyaXRlKQotCQlnb3RvIHJl c3RhcnQ7Ci0KLQlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGN0bCwgc2Vnbm8pOwotCi0JTFdM b2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKKwlTbHJ1SW50ZXJuYWxEZWxldGVTZWdt ZW50KHNscnVfaWQsIHNlZ25vKTsKIH0KIAogLyoKQEAgLTEzODksMTkgKzE0NSwyMSBAQCByZXN0 YXJ0OgogICogZmlyc3Q+PWN1dG9mZiAmJiBsYXN0Pj1jdXRvZmY6IG5vOyBldmVyeSBwYWdlIG9m IHRoaXMgc2VnbWVudCBpcyB0b28geW91bmcKICAqLwogc3RhdGljIGJvb2wKLVNscnVNYXlEZWxl dGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2VncGFnZSwgaW50IGN1dG9mZlBhZ2UpCitTbHJ1 TWF5RGVsZXRlU2VnbWVudChTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAor CQkJCQkgaW50IHNlZ3BhZ2UsIGludCBjdXRvZmZQYWdlKQogewogCWludAkJCXNlZ19sYXN0X3Bh Z2UgPSBzZWdwYWdlICsgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCAtIDE7CiAKIAlBc3NlcnQoc2Vn cGFnZSAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgPT0gMCk7CiAKLQlyZXR1cm4gKGN0bC0+UGFn ZVByZWNlZGVzKHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpICYmCi0JCQljdGwtPlBhZ2VQcmVjZWRlcyhz ZWdfbGFzdF9wYWdlLCBjdXRvZmZQYWdlKSk7CisJcmV0dXJuIChQYWdlUHJlY2VkZXMoc2VncGFn ZSwgY3V0b2ZmUGFnZSkgJiYKKwkJCVBhZ2VQcmVjZWRlcyhzZWdfbGFzdF9wYWdlLCBjdXRvZmZQ YWdlKSk7CiB9CiAKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiBzdGF0aWMgdm9pZAotU2xy dVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMy IG9mZnNldCkKK1NscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVQYWdlUHJlY2VkZXNGdW5j dGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkgICBpbnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZzZXQp CiB7CiAJVHJhbnNhY3Rpb25JZCBsaHMsCiAJCQkJcmhzOwpAQCAtMTQyNiwxOSArMTg0LDE5IEBA IFNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UsIHVp bnQzMiBvZmZzZXQpCiAJQXNzZXJ0KCFUcmFuc2FjdGlvbklkUHJlY2VkZXMocmhzLCBsaHMgKyAx KSk7CiAJQXNzZXJ0KCFUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKGxocywgcmhzKSk7CiAJ QXNzZXJ0KCFUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKHJocywgbGhzKSk7Ci0JQXNzZXJ0 KCFjdGwtPlBhZ2VQcmVjZWRlcyhsaHMgLyBwZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsKLQlB c3NlcnQoIWN0bC0+UGFnZVByZWNlZGVzKGxocyAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkp OwotCUFzc2VydCghY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIGxocyAvIHBlcl9w YWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcygobGhzIC0gcGVyX3BhZ2UpIC8gcGVy X3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKHJocyAv IHBlcl9wYWdlLCAobGhzIC0gMyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0 bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMiAqIHBlcl9wYWdlKSAvIHBl cl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhz IC0gMSAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKQorCUFzc2VydCghUGFnZVByZWNlZGVzKGxocyAv IHBlcl9wYWdlLCBsaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydCghUGFnZVByZWNlZGVzKGxocyAv IHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydCghUGFnZVByZWNlZGVzKHJocyAv IHBlcl9wYWdlLCBsaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydCghUGFnZVByZWNlZGVzKChsaHMg LSBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoUGFnZVBy ZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7 CisJQXNzZXJ0KFBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyAtIDIgKiBwZXJfcGFn ZSkgLyBwZXJfcGFnZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChs aHMgLSAxICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpCiAJCSAgIHx8ICgxVSA8PCAzMSkgJSBwZXJf cGFnZSAhPSAwKTsJLyogU2VlIENvbW1pdFRzUGFnZVByZWNlZGVzKCkgKi8KLQlBc3NlcnQoY3Rs LT5QYWdlUHJlY2VkZXMoKGxocyArIDEgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8gcGVy X3BhZ2UpCisJQXNzZXJ0KFBhZ2VQcmVjZWRlcygobGhzICsgMSAqIHBlcl9wYWdlKSAvIHBlcl9w YWdlLCByaHMgLyBwZXJfcGFnZSkKIAkJICAgfHwgKDFVIDw8IDMxKSAlIHBlcl9wYWdlICE9IDAp OwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcygobGhzICsgMiAqIHBlcl9wYWdlKSAvIHBlcl9w YWdlLCByaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcygobGhzICsg MyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydCghY3Rs LT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgKyBwZXJfcGFnZSkgLyBwZXJfcGFn ZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMoKGxocyArIDIgKiBwZXJfcGFnZSkgLyBwZXJfcGFn ZSwgcmhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoUGFnZVByZWNlZGVzKChsaHMgKyAzICogcGVy X3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJlY2Vk ZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgKyBwZXJfcGFnZSkgLyBwZXJfcGFnZSkpOwogCiAJLyoK IAkgKiBHZXROZXdUcmFuc2FjdGlvbklkKCkgaGFzIGFzc2lnbmVkIHRoZSBsYXN0IFhJRCBpdCBj YW4gc2FmZWx5IHVzZSwgYW5kCkBAIC0xNDUxLDcgKzIwOSw3IEBAIFNscnVQYWdlUHJlY2VkZXNU ZXN0T2Zmc2V0KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZzZXQpCiAJb2xk ZXN0WGFjdCA9IG5ld2VzdFhhY3QgKyAxOwogCW9sZGVzdFhhY3QgLT0gMVUgPDwgMzE7CiAJb2xk ZXN0UGFnZSA9IG9sZGVzdFhhY3QgLyBwZXJfcGFnZTsKLQlBc3NlcnQoIVNscnVNYXlEZWxldGVT ZWdtZW50KGN0bCwKKwlBc3NlcnQoIVNscnVNYXlEZWxldGVTZWdtZW50KFBhZ2VQcmVjZWRlcywK IAkJCQkJCQkJIChuZXdlc3RQYWdlIC0KIAkJCQkJCQkJICBuZXdlc3RQYWdlICUgU0xSVV9QQUdF U19QRVJfU0VHTUVOVCksCiAJCQkJCQkJCSBvbGRlc3RQYWdlKSk7CkBAIC0xNDY3LDcgKzIyNSw3 IEBAIFNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2Us IHVpbnQzMiBvZmZzZXQpCiAJb2xkZXN0WGFjdCA9IG5ld2VzdFhhY3QgKyAxOwogCW9sZGVzdFhh Y3QgLT0gMVUgPDwgMzE7CiAJb2xkZXN0UGFnZSA9IG9sZGVzdFhhY3QgLyBwZXJfcGFnZTsKLQlB c3NlcnQoIVNscnVNYXlEZWxldGVTZWdtZW50KGN0bCwKKwlBc3NlcnQoIVNscnVNYXlEZWxldGVT ZWdtZW50KFBhZ2VQcmVjZWRlcywKIAkJCQkJCQkJIChuZXdlc3RQYWdlIC0KIAkJCQkJCQkJICBu ZXdlc3RQYWdlICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCksCiAJCQkJCQkJCSBvbGRlc3RQYWdl KSk7CkBAIC0xNDgzLDEyICsyNDEsMTIgQEAgU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xy dUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKICAqIGRvIG5vdCBhcHBseSB0 byB0aGVtLikKICAqLwogdm9pZAotU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1Q3RsIGN0 bCwgaW50IHBlcl9wYWdlKQorU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1UGFnZVByZWNl ZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLCBpbnQgcGVyX3BhZ2UpCiB7CiAJLyogVGVzdCBmaXJz dCwgbWlkZGxlIGFuZCBsYXN0IGVudHJpZXMgb2YgYSBwYWdlLiAqLwotCVNscnVQYWdlUHJlY2Vk ZXNUZXN0T2Zmc2V0KGN0bCwgcGVyX3BhZ2UsIDApOwotCVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zm c2V0KGN0bCwgcGVyX3BhZ2UsIHBlcl9wYWdlIC8gMik7Ci0JU2xydVBhZ2VQcmVjZWRlc1Rlc3RP ZmZzZXQoY3RsLCBwZXJfcGFnZSwgcGVyX3BhZ2UgLSAxKTsKKwlTbHJ1UGFnZVByZWNlZGVzVGVz dE9mZnNldChQYWdlUHJlY2VkZXMsIHBlcl9wYWdlLCAwKTsKKwlTbHJ1UGFnZVByZWNlZGVzVGVz dE9mZnNldChQYWdlUHJlY2VkZXMsIHBlcl9wYWdlLCBwZXJfcGFnZSAvIDIpOworCVNscnVQYWdl UHJlY2VkZXNUZXN0T2Zmc2V0KFBhZ2VQcmVjZWRlcywgcGVyX3BhZ2UsIHBlcl9wYWdlIC0gMSk7 CiB9CiAjZW5kaWYKIApAQCAtMTQ5OCwxMSArMjU2LDEyIEBAIFNscnVQYWdlUHJlY2VkZXNVbml0 VGVzdHMoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSkKICAqCQlvbmUgY29udGFpbmluZyB0aGUg cGFnZSBwYXNzZWQgYXMgImRhdGEiLgogICovCiBib29sCi1TbHJ1U2NhbkRpckNiUmVwb3J0UHJl c2VuY2UoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0 YSkKK1NscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShpbnQgc2xydV9pZCwgU2xydVBhZ2VQcmVj ZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQljaGFyICpmaWxlbmFtZSwgaW50IHNl Z3BhZ2UsIHZvaWQgKmRhdGEpCiB7CiAJaW50CQkJY3V0b2ZmUGFnZSA9ICooaW50ICopIGRhdGE7 CiAKLQlpZiAoU2xydU1heURlbGV0ZVNlZ21lbnQoY3RsLCBzZWdwYWdlLCBjdXRvZmZQYWdlKSkK KwlpZiAoU2xydU1heURlbGV0ZVNlZ21lbnQoUGFnZVByZWNlZGVzLCBzZWdwYWdlLCBjdXRvZmZQ YWdlKSkKIAkJcmV0dXJuIHRydWU7CQkJLyogZm91bmQgb25lOyBkb24ndCBpdGVyYXRlIGFueSBt b3JlICovCiAKIAlyZXR1cm4gZmFsc2U7CQkJCS8qIGtlZXAgZ29pbmcgKi8KQEAgLTE1MTMsMTIg KzI3MiwxNSBAQCBTbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoU2xydUN0bCBjdGwsIGNoYXIg KmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YQogICoJCVRoaXMgY2FsbGJhY2sgZGVs ZXRlcyBzZWdtZW50cyBwcmlvciB0byB0aGUgb25lIHBhc3NlZCBpbiBhcyAiZGF0YSIuCiAgKi8K IHN0YXRpYyBib29sCi1TbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVDdGwgY3RsLCBjaGFy ICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCitTbHJ1U2NhbkRpckNiRGVsZXRl Q3V0b2ZmKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVz LAorCQkJCQkJICBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCiB7CiAJ aW50CQkJY3V0b2ZmUGFnZSA9ICooaW50ICopIGRhdGE7CiAKLQlpZiAoU2xydU1heURlbGV0ZVNl Z21lbnQoY3RsLCBzZWdwYWdlLCBjdXRvZmZQYWdlKSkKLQkJU2xydUludGVybmFsRGVsZXRlU2Vn bWVudChjdGwsIHNlZ3BhZ2UgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKKwlpZiAoU2xydU1h eURlbGV0ZVNlZ21lbnQoUGFnZVByZWNlZGVzLCBzZWdwYWdlLCBjdXRvZmZQYWdlKSkKKwl7CisJ CVNscnVEZWxldGVTZWdtZW50KHNscnVfaWQsIHNlZ3BhZ2UgLyBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UKTsKKwl9CiAKIAlyZXR1cm4gZmFsc2U7CQkJCS8qIGtlZXAgZ29pbmcgKi8KIH0KQEAgLTE1 MjgsOSArMjkwLDEwIEBAIFNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoU2xydUN0bCBjdGwsIGNo YXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKICAqCQlUaGlzIGNhbGxiYWNr IGRlbGV0ZXMgYWxsIHNlZ21lbnRzLgogICovCiBib29sCi1TbHJ1U2NhbkRpckNiRGVsZXRlQWxs KFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCitT bHJ1U2NhbkRpckNiRGVsZXRlQWxsKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rp b24gUGFnZVByZWNlZGVzLAorCQkJCQkgICBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZv aWQgKmRhdGEpCiB7Ci0JU2xydUludGVybmFsRGVsZXRlU2VnbWVudChjdGwsIHNlZ3BhZ2UgLyBT TFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKKwlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KHNscnVf aWQsIHNlZ3BhZ2UgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKIAogCXJldHVybiBmYWxzZTsJ CQkJLyoga2VlcCBnb2luZyAqLwogfQpAQCAtMTU1MSwxNiArMzE0LDIwIEBAIFNscnVTY2FuRGly Q2JEZWxldGVBbGwoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9p ZCAqZGF0YSkKICAqIE5vdGUgdGhhdCBubyBsb2NraW5nIGlzIGFwcGxpZWQuCiAgKi8KIGJvb2wK LVNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNr LCB2b2lkICpkYXRhKQorU2xydVNjYW5EaXJlY3RvcnkoaW50IHNscnVfaWQsIFNscnVQYWdlUHJl Y2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJICBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxi YWNrLCB2b2lkICpkYXRhKQogewogCWJvb2wJCXJldHZhbCA9IGZhbHNlOwogCURJUgkJICAgKmNs ZGlyOwogCXN0cnVjdCBkaXJlbnQgKmNsZGU7CiAJaW50CQkJc2Vnbm87CiAJaW50CQkJc2VncGFn ZTsKKwljb25zdCBjaGFyICpwYXRoOworCisJcGF0aCA9IHNscnVfZGlyc1tzbHJ1X2lkXTsKIAot CWNsZGlyID0gQWxsb2NhdGVEaXIoY3RsLT5EaXIpOwotCXdoaWxlICgoY2xkZSA9IFJlYWREaXIo Y2xkaXIsIGN0bC0+RGlyKSkgIT0gTlVMTCkKKwljbGRpciA9IEFsbG9jYXRlRGlyKHBhdGgpOwor CXdoaWxlICgoY2xkZSA9IFJlYWREaXIoY2xkaXIsIHBhdGgpKSAhPSBOVUxMKQogCXsKIAkJc2l6 ZV90CQlsZW47CiAKQEAgLTE1NzMsOCArMzQwLDggQEAgU2xydVNjYW5EaXJlY3RvcnkoU2xydUN0 bCBjdGwsIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEpCiAJCQlzZWdwYWdl ID0gc2Vnbm8gKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCiAJCQllbG9nKERFQlVHMiwgIlNs cnVTY2FuRGlyZWN0b3J5IGludm9raW5nIGNhbGxiYWNrIG9uICVzLyVzIiwKLQkJCQkgY3RsLT5E aXIsIGNsZGUtPmRfbmFtZSk7Ci0JCQlyZXR2YWwgPSBjYWxsYmFjayhjdGwsIGNsZGUtPmRfbmFt ZSwgc2VncGFnZSwgZGF0YSk7CisJCQkJIHBhdGgsIGNsZGUtPmRfbmFtZSk7CisJCQlyZXR2YWwg PSBjYWxsYmFjayhzbHJ1X2lkLCBQYWdlUHJlY2VkZXMsIGNsZGUtPmRfbmFtZSwgc2VncGFnZSwg ZGF0YSk7CiAJCQlpZiAocmV0dmFsKQogCQkJCWJyZWFrOwogCQl9CkBAIC0xNTg1LDI5ICszNTIs NzQgQEAgU2xydVNjYW5EaXJlY3RvcnkoU2xydUN0bCBjdGwsIFNscnVTY2FuQ2FsbGJhY2sgY2Fs bGJhY2ssIHZvaWQgKmRhdGEpCiB9CiAKIC8qCi0gKiBJbmRpdmlkdWFsIFNMUlVzIChjbG9nLCAu Li4pIGhhdmUgdG8gcHJvdmlkZSBhIHN5bmMuYyBoYW5kbGVyIGZ1bmN0aW9uIHNvCi0gKiB0aGF0 IHRoZXkgY2FuIHByb3ZpZGUgdGhlIGNvcnJlY3QgIlNscnVDdGwiIChvdGhlcndpc2Ugd2UgZG9u J3Qga25vdyBob3cgdG8KLSAqIGJ1aWxkIHRoZSBwYXRoKSwgYnV0IHRoZXkganVzdCBmb3J3YXJk IHRvIHRoaXMgY29tbW9uIGltcGxlbWVudGF0aW9uIHRoYXQKLSAqIHBlcmZvcm1zIHRoZSBmc3lu Yy4KKyAqIFJlYWQgYSBidWZmZXIuICBCdWZmZXIgaXMgcGlubmVkIG9uIHJldHVybi4KKyAqLwor QnVmZmVyCitSZWFkU2xydUJ1ZmZlcihpbnQgc2xydV9pZCwgaW50IHBhZ2VubywgUmVhZEJ1ZmZl ck1vZGUgbW9kZSkKK3sKKwlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NF R01FTlQ7CisJaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7 CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IgPSBTbHJ1UmVsRmlsZUxvY2F0b3Ioc2xydV9pZCwg c2Vnbm8pOworCUJ1ZmZlcgkJYnVmZmVyOworCWJvb2wJCWhpdDsKKworCS8qIFRyeSB0byBhdm9p ZCBkb2luZyBhIGJ1ZmZlciBtYXBwaW5nIHRhYmxlIGxvb2t1cCBmb3IgcmVwZWF0ZWQgYWNjZXNz LiAqLworCWJ1ZmZlciA9IHNscnVfcmVjZW50X2J1ZmZlcnNbc2xydV9pZF0ucmVjZW50X2J1ZmZl cjsKKwlpZiAoc2xydV9yZWNlbnRfYnVmZmVyc1tzbHJ1X2lkXS5wYWdlbm8gPT0gcGFnZW5vICYm CisJCUJ1ZmZlcklzVmFsaWQoYnVmZmVyKSAmJgorCQlSZWFkUmVjZW50QnVmZmVyKHJsb2NhdG9y LCBNQUlOX0ZPUktOVU0sIHBhZ2VubywgYnVmZmVyKSkKKwl7CisJCXBnc3RhdF9jb3VudF9zbHJ1 X3BhZ2VfaGl0KHNscnVfaWQpOworCQlyZXR1cm4gYnVmZmVyOworCX0KKworCS8qIFJlZ3VsYXIg bG9va3VwLiAqLworCWJ1ZmZlciA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGVXaXRoSGl0KHJs b2NhdG9yLCBNQUlOX0ZPUktOVU0sIHJwYWdlbm8sCisJCQkJCQkJCQkJCSAgbW9kZSwgTlVMTCwg dHJ1ZSwgJmhpdCk7CisKKwkvKiBSZW1lbWJlciB3aGVyZSB0aGlzIHBhZ2UgaXMgZm9yIG5leHQg dGltZS4gKi8KKwlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnBhZ2VubyA9IHBhZ2VubzsK KwlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnJlY2VudF9idWZmZXIgPSBidWZmZXI7CisK KwlpZiAoaGl0KQorCQlwZ3N0YXRfY291bnRfc2xydV9wYWdlX2hpdChzbHJ1X2lkKTsKKworCXJl dHVybiBidWZmZXI7Cit9CisKKy8qCisgKiBaZXJvLWluaXRpYWxpemUgYSBidWZmZXIuICBCdWZm ZXIgaXMgcGlubmVkIGFuZCBleGNsdXNpdmVseSBsb2NrZWQgb24gcmV0dXJuLgogICovCi1pbnQK LVNscnVTeW5jRmlsZVRhZyhTbHJ1Q3RsIGN0bCwgY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAq cGF0aCkKK0J1ZmZlcgorWmVyb1NscnVCdWZmZXIoaW50IHNscnVfaWQsIGludCBwYWdlbm8pCiB7 Ci0JaW50CQkJZmQ7Ci0JaW50CQkJc2F2ZV9lcnJubzsKLQlpbnQJCQlyZXN1bHQ7CisJaW50CQkJ c2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCWludAkJCXJwYWdlbm8g PSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCVJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yID0gU2xydVJlbEZpbGVMb2NhdG9yKHNscnVfaWQsIHNlZ25vKTsKKwlCdWZmZXIJCWJ1ZmZl cjsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIGZ0 YWctPnNlZ25vKTsKKwlzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElk LCBNQUlOX0ZPUktOVU0pOworCWlmICghc21ncmV4aXN0cyhzZmlsZSkpCisJCXNtZ3JjcmVhdGUo c2ZpbGUsIGZhbHNlKTsKKwkKKwlidWZmZXIgPSBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKHJs b2NhdG9yLCBNQUlOX0ZPUktOVU0sIHJwYWdlbm8sIFJCTV9aRVJPX0FORF9MT0NLLCBOVUxMLCB0 cnVlKTsKIAotCWZkID0gT3BlblRyYW5zaWVudEZpbGUocGF0aCwgT19SRFdSIHwgUEdfQklOQVJZ KTsKLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gLTE7CisJLyogUmVtZW1iZXIgd2hlcmUgdGhpcyBw YWdlIGlzIGZvciBuZXh0IHRpbWUuICovCisJc2xydV9yZWNlbnRfYnVmZmVyc1tzbHJ1X2lkXS5w YWdlbm8gPSBwYWdlbm87CisJc2xydV9yZWNlbnRfYnVmZmVyc1tzbHJ1X2lkXS5yZWNlbnRfYnVm ZmVyID0gYnVmZmVyOwogCi0JcmVzdWx0ID0gcGdfZnN5bmMoZmQpOwotCXNhdmVfZXJybm8gPSBl cnJubzsKKwlwZ3N0YXRfY291bnRfc2xydV9wYWdlX3plcm9lZChzbHJ1X2lkKTsKIAotCUNsb3Nl VHJhbnNpZW50RmlsZShmZCk7CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworYm9vbAorUHJvYmVTbHJ1 QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKQoreworCWludAkJCXNlZ25vID0gcGFnZW5v IC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlpbnQJCQlycGFnZW5vID0gcGFnZW5vICUgU0xS VV9QQUdFU19QRVJfU0VHTUVOVDsKKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvciA9IFNscnVSZWxG aWxlTG9jYXRvcihzbHJ1X2lkLCBzZWdubyk7CiAKLQllcnJubyA9IHNhdmVfZXJybm87Ci0JcmV0 dXJuIHJlc3VsdDsKKwlyZXR1cm4gQnVmZmVyUHJvYmUocmxvY2F0b3IsIE1BSU5fRk9SS05VTSwg cnBhZ2Vubyk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0 cmFucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYwppbmRleCA2MmJi NjEwMTY3Yy4uMzNlZGU4MTM4ZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3N1YnRyYW5zLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMu YwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9zdWJ0cmFucy5oIgogI2luY2x1 ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAicGdfdHJhY2UuaCIKKyNpbmNsdWRlICJz dG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKIAogCkBAIC00OSwy MSArNTAsMTMgQEAKICAqLwogCiAvKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIHhhY3QgKi8KLSNk ZWZpbmUgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UgKEJMQ0tTWiAvIHNpemVvZihUcmFuc2FjdGlv bklkKSkKKyNkZWZpbmUgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UgKChCTENLU1ogLSBTaXplT2ZQ YWdlSGVhZGVyRGF0YSkgLyBzaXplb2YoVHJhbnNhY3Rpb25JZCkpCiAKICNkZWZpbmUgVHJhbnNh Y3Rpb25JZFRvUGFnZSh4aWQpICgoeGlkKSAvIChUcmFuc2FjdGlvbklkKSBTVUJUUkFOU19YQUNU U19QRVJfUEFHRSkKICNkZWZpbmUgVHJhbnNhY3Rpb25JZFRvRW50cnkoeGlkKSAoKHhpZCkgJSAo VHJhbnNhY3Rpb25JZCkgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UpCiAKIAotLyoKLSAqIExpbmsg dG8gc2hhcmVkLW1lbW9yeSBkYXRhIHN0cnVjdHVyZXMgZm9yIFNVQlRSQU5TIGNvbnRyb2wKLSAq Lwotc3RhdGljIFNscnVDdGxEYXRhIFN1YlRyYW5zQ3RsRGF0YTsKLQotI2RlZmluZSBTdWJUcmFu c0N0bCAgKCZTdWJUcmFuc0N0bERhdGEpCi0KLQotc3RhdGljIGludAlaZXJvU1VCVFJBTlNQYWdl KGludCBwYWdlbm8pOworc3RhdGljIEJ1ZmZlciBaZXJvU1VCVFJBTlNQYWdlKGludCBwYWdlbm8p Owogc3RhdGljIGJvb2wgU3ViVHJhbnNQYWdlUHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIp OwogCiAKQEAgLTc1LDE2ICs2OCwxNSBAQCBTdWJUcmFuc1NldFBhcmVudChUcmFuc2FjdGlvbklk IHhpZCwgVHJhbnNhY3Rpb25JZCBwYXJlbnQpCiB7CiAJaW50CQkJcGFnZW5vID0gVHJhbnNhY3Rp b25JZFRvUGFnZSh4aWQpOwogCWludAkJCWVudHJ5bm8gPSBUcmFuc2FjdGlvbklkVG9FbnRyeSh4 aWQpOwotCWludAkJCXNsb3RubzsKIAlUcmFuc2FjdGlvbklkICpwdHI7CisJQnVmZmVyCQlidWZm ZXI7CiAKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQocGFyZW50KSk7CiAJQXNzZXJ0KFRy YW5zYWN0aW9uSWRGb2xsb3dzKHhpZCwgcGFyZW50KSk7CiAKLQlMV0xvY2tBY3F1aXJlKFN1YnRy YW5zU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFn ZShTdWJUcmFuc0N0bCwgcGFnZW5vLCB0cnVlLCB4aWQpOwotCXB0ciA9IChUcmFuc2FjdGlvbklk ICopIFN1YlRyYW5zQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJYnVmZmVyID0g UmVhZFNscnVCdWZmZXIoU0xSVV9TVUJUUkFOU19JRCwgcGFnZW5vLCBSQk1fTk9STUFMKTsKKwlM b2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlwdHIgPSAoVHJhbnNh Y3Rpb25JZCAqKSBQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKTsKIAlwdHIg Kz0gZW50cnlubzsKIAogCS8qCkBAIC05NiwxMCArODgsMTAgQEAgU3ViVHJhbnNTZXRQYXJlbnQo VHJhbnNhY3Rpb25JZCB4aWQsIFRyYW5zYWN0aW9uSWQgcGFyZW50KQogCXsKIAkJQXNzZXJ0KCpw dHIgPT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOwogCQkqcHRyID0gcGFyZW50OwotCQlTdWJUcmFu c0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVyRGly dHkoYnVmZmVyKTsKIAl9CiAKLQlMV0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2spOworCVVu bG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoKQEAgLTExMCw5ICsxMDIsOSBAQCBT dWJUcmFuc0dldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCkKIHsKIAlpbnQJCQlwYWdlbm8gPSBU cmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRU b0VudHJ5KHhpZCk7Ci0JaW50CQkJc2xvdG5vOwogCVRyYW5zYWN0aW9uSWQgKnB0cjsKIAlUcmFu c2FjdGlvbklkIHBhcmVudDsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIENhbid0IGFzayBhYm91 dCBzdHVmZiB0aGF0IG1pZ2h0IG5vdCBiZSBhcm91bmQgYW55bW9yZSAqLwogCUFzc2VydChUcmFu c2FjdGlvbklkRm9sbG93c09yRXF1YWxzKHhpZCwgVHJhbnNhY3Rpb25YbWluKSk7CkBAIC0xMjEs MTUgKzExMywxNCBAQCBTdWJUcmFuc0dldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCkKIAlpZiAo IVRyYW5zYWN0aW9uSWRJc05vcm1hbCh4aWQpKQogCQlyZXR1cm4gSW52YWxpZFRyYW5zYWN0aW9u SWQ7CiAKLQkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5 ICovCisJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9TVUJUUkFOU19JRCwgcGFnZW5vLCBS Qk1fTk9STUFMKTsKIAotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFN1YlRy YW5zQ3RsLCBwYWdlbm8sIHhpZCk7Ci0JcHRyID0gKFRyYW5zYWN0aW9uSWQgKikgU3ViVHJhbnND dGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlwdHIgPSAoVHJhbnNhY3Rpb25JZCAq KSBQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKTsKIAlwdHIgKz0gZW50cnlu bzsKIAogCXBhcmVudCA9ICpwdHI7CiAKLQlMV0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2sp OworCVJlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAogCXJldHVybiBwYXJlbnQ7CiB9CkBAIC0xNzcs MjYgKzE2OCw2IEBAIFN1YlRyYW5zR2V0VG9wbW9zdFRyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQg eGlkKQogCXJldHVybiBwcmV2aW91c1hpZDsKIH0KIAotCi0vKgotICogSW5pdGlhbGl6YXRpb24g b2Ygc2hhcmVkIG1lbW9yeSBmb3IgU1VCVFJBTlMKLSAqLwotU2l6ZQotU1VCVFJBTlNTaG1lbVNp emUodm9pZCkKLXsKLQlyZXR1cm4gU2ltcGxlTHJ1U2htZW1TaXplKE5VTV9TVUJUUkFOU19CVUZG RVJTLCAwKTsKLX0KLQotdm9pZAotU1VCVFJBTlNTaG1lbUluaXQodm9pZCkKLXsKLQlTdWJUcmFu c0N0bC0+UGFnZVByZWNlZGVzID0gU3ViVHJhbnNQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5p dChTdWJUcmFuc0N0bCwgIlN1YnRyYW5zIiwgTlVNX1NVQlRSQU5TX0JVRkZFUlMsIDAsCi0JCQkJ ICBTdWJ0cmFuc1NMUlVMb2NrLCAicGdfc3VidHJhbnMiLAotCQkJCSAgTFdUUkFOQ0hFX1NVQlRS QU5TX0JVRkZFUiwgU1lOQ19IQU5ETEVSX05PTkUpOwotCVNscnVQYWdlUHJlY2VkZXNVbml0VGVz dHMoU3ViVHJhbnNDdGwsIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFKTsKLX0KLQogLyoKICAqIFRo aXMgZnVuYyBtdXN0IGJlIGNhbGxlZCBPTkNFIG9uIHN5c3RlbSBpbnN0YWxsLiAgSXQgY3JlYXRl cwogICogdGhlIGluaXRpYWwgU1VCVFJBTlMgc2VnbWVudC4gIChUaGUgU1VCVFJBTlMgZGlyZWN0 b3J5IGlzIGFzc3VtZWQgdG8KQEAgLTIxMCwxOCArMTgxLDE2IEBAIFNVQlRSQU5TU2htZW1Jbml0 KHZvaWQpCiB2b2lkCiBCb290U3RyYXBTVUJUUkFOUyh2b2lkKQogewotCWludAkJCXNsb3RubzsK KwlCdWZmZXIJCWJ1ZmZlcjsKIAotCUxXTG9ja0FjcXVpcmUoU3VidHJhbnNTTFJVTG9jaywgTFdf RVhDTFVTSVZFKTsKKwlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFN1YlRyYW5zUGFnZVByZWNl ZGVzLCBTVUJUUkFOU19YQUNUU19QRVJfUEFHRSk7CiAKIAkvKiBDcmVhdGUgYW5kIHplcm8gdGhl IGZpcnN0IHBhZ2Ugb2YgdGhlIHN1YnRyYW5zIGxvZyAqLwotCXNsb3RubyA9IFplcm9TVUJUUkFO U1BhZ2UoMCk7CisJYnVmZmVyID0gWmVyb1NVQlRSQU5TUGFnZSgwKTsKIAogCS8qIE1ha2Ugc3Vy ZSBpdCdzIHdyaXR0ZW4gb3V0ICovCi0JU2ltcGxlTHJ1V3JpdGVQYWdlKFN1YlRyYW5zQ3RsLCBz bG90bm8pOwotCUFzc2VydCghU3ViVHJhbnNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9d KTsKLQotCUxXTG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7CisJRmx1c2hPbmVCdWZmZXIo YnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8qCkBAIC0yMzIs MTAgKzIwMSwxOSBAQCBCb290U3RyYXBTVUJUUkFOUyh2b2lkKQogICoKICAqIENvbnRyb2wgbG9j ayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KICAqLwot c3RhdGljIGludAorc3RhdGljIEJ1ZmZlcgogWmVyb1NVQlRSQU5TUGFnZShpbnQgcGFnZW5vKQog ewotCXJldHVybiBTaW1wbGVMcnVaZXJvUGFnZShTdWJUcmFuc0N0bCwgcGFnZW5vKTsKKwlCdWZm ZXIJCWJ1ZmZlcjsKKwlQYWdlCQlwYWdlOworCisJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xS VV9TVUJUUkFOU19JRCwgcGFnZW5vKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOwor CVBhZ2VJbml0U0xSVShwYWdlLCBCTENLU1osIDApOworCisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZl cik7CisKKwlyZXR1cm4gYnVmZmVyOwogfQogCiAvKgpAQCAtMjU4LDcgKzIzNiw2IEBAIFN0YXJ0 dXBTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdEFjdGl2ZVhJRCkKIAkgKiBXaGVuZXZlciB3 ZSBhZHZhbmNlIGludG8gYSBuZXcgcGFnZSwgRXh0ZW5kU1VCVFJBTlMgd2lsbCBsaWtld2lzZSB6 ZXJvCiAJICogdGhlIG5ldyBwYWdlIHdpdGhvdXQgcmVnYXJkIHRvIHdoYXRldmVyIHdhcyBwcmV2 aW91c2x5IG9uIGRpc2suCiAJICovCi0JTFdMb2NrQWNxdWlyZShTdWJ0cmFuc1NMUlVMb2NrLCBM V19FWENMVVNJVkUpOwogCiAJc3RhcnRQYWdlID0gVHJhbnNhY3Rpb25JZFRvUGFnZShvbGRlc3RB Y3RpdmVYSUQpOwogCW5leHRYaWQgPSBTaG1lbVZhcmlhYmxlQ2FjaGUtPm5leHRYaWQ7CkBAIC0y NjYsMzYgKzI0MywxNSBAQCBTdGFydHVwU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RBY3Rp dmVYSUQpCiAKIAl3aGlsZSAoc3RhcnRQYWdlICE9IGVuZFBhZ2UpCiAJewotCQkodm9pZCkgWmVy b1NVQlRSQU5TUGFnZShzdGFydFBhZ2UpOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKFplcm9TVUJU UkFOU1BhZ2Uoc3RhcnRQYWdlKSk7CiAJCXN0YXJ0UGFnZSsrOwogCQkvKiBtdXN0IGFjY291bnQg Zm9yIHdyYXBhcm91bmQgKi8KIAkJaWYgKHN0YXJ0UGFnZSA+IFRyYW5zYWN0aW9uSWRUb1BhZ2Uo TWF4VHJhbnNhY3Rpb25JZCkpCiAJCQlzdGFydFBhZ2UgPSAwOwogCX0KLQkodm9pZCkgWmVyb1NV QlRSQU5TUGFnZShzdGFydFBhZ2UpOwotCi0JTFdMb2NrUmVsZWFzZShTdWJ0cmFuc1NMUlVMb2Nr KTsKLX0KLQotLyoKLSAqIFBlcmZvcm0gYSBjaGVja3BvaW50IC0tLSBlaXRoZXIgZHVyaW5nIHNo dXRkb3duLCBvciBvbi10aGUtZmx5Ci0gKi8KLXZvaWQKLUNoZWNrUG9pbnRTVUJUUkFOUyh2b2lk KQotewotCS8qCi0JICogV3JpdGUgZGlydHkgU1VCVFJBTlMgcGFnZXMgdG8gZGlzawotCSAqCi0J ICogVGhpcyBpcyBub3QgYWN0dWFsbHkgbmVjZXNzYXJ5IGZyb20gYSBjb3JyZWN0bmVzcyBwb2lu dCBvZiB2aWV3LiBXZSBkbwotCSAqIGl0IG1lcmVseSB0byBpbXByb3ZlIHRoZSBvZGRzIHRoYXQg d3JpdGluZyBvZiBkaXJ0eSBwYWdlcyBpcyBkb25lIGJ5Ci0JICogdGhlIGNoZWNrcG9pbnQgcHJv Y2VzcyBhbmQgbm90IGJ5IGJhY2tlbmRzLgotCSAqLwotCVRSQUNFX1BPU1RHUkVTUUxfU1VCVFJB TlNfQ0hFQ0tQT0lOVF9TVEFSVCh0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFsbChTdWJUcmFuc0N0 bCwgdHJ1ZSk7Ci0JVFJBQ0VfUE9TVEdSRVNRTF9TVUJUUkFOU19DSEVDS1BPSU5UX0RPTkUodHJ1 ZSk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJvU1VCVFJBTlNQYWdlKHN0YXJ0UGFnZSkpOwog fQogCi0KIC8qCiAgKiBNYWtlIHN1cmUgdGhhdCBTVUJUUkFOUyBoYXMgcm9vbSBmb3IgYSBuZXds eS1hbGxvY2F0ZWQgWElELgogICoKQEAgLTMxOSwxMiArMjc1LDggQEAgRXh0ZW5kU1VCVFJBTlMo VHJhbnNhY3Rpb25JZCBuZXdlc3RYYWN0KQogCiAJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvUGFn ZShuZXdlc3RYYWN0KTsKIAotCUxXTG9ja0FjcXVpcmUoU3VidHJhbnNTTFJVTG9jaywgTFdfRVhD TFVTSVZFKTsKLQogCS8qIFplcm8gdGhlIHBhZ2UgKi8KLQlaZXJvU1VCVFJBTlNQYWdlKHBhZ2Vu byk7Ci0KLQlMV0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VC dWZmZXIoWmVyb1NVQlRSQU5TUGFnZShwYWdlbm8pKTsKIH0KIAogCkBAIC0zNTAsNyArMzAyLDcg QEAgVHJ1bmNhdGVTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QpCiAJVHJhbnNhY3Rp b25JZFJldHJlYXQob2xkZXN0WGFjdCk7CiAJY3V0b2ZmUGFnZSA9IFRyYW5zYWN0aW9uSWRUb1Bh Z2Uob2xkZXN0WGFjdCk7CiAKLQlTaW1wbGVMcnVUcnVuY2F0ZShTdWJUcmFuc0N0bCwgY3V0b2Zm UGFnZSk7CisJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9TVUJUUkFOU19JRCwgU3ViVHJhbnNQYWdl UHJlY2VkZXMsIGN1dG9mZlBhZ2UpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwpp bmRleCBkODVlMzEzOTA4Mi4uMWYxNzliYTIzMjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0 LmMKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlICJ1dGlscy9pbnZhbC5oIgogI2luY2x1ZGUg InV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsbWFwcGVyLmgiCisjaW5jbHVk ZSAidXRpbHMvcmVzb3duZXJfcHJpdmF0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIK ICNpbmNsdWRlICJ1dGlscy90aW1lb3V0LmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgi CkBAIC0xMzk3LDYgKzEzOTgsNyBAQCBSZWNvcmRUcmFuc2FjdGlvbkNvbW1pdCh2b2lkKQogCQkg KiBhcmUgZGVsYXlpbmcgdGhlIGNoZWNrcG9pbnQgYSBiaXQgZnV6enksIGJ1dCBpdCBkb2Vzbid0 IG1hdHRlci4KIAkJICovCiAJCUFzc2VydCgoTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgJiBERUxB WV9DSEtQVF9TVEFSVCkgPT0gMCk7CisKIAkJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CiAJCU15UHJv Yy0+ZGVsYXlDaGtwdEZsYWdzIHw9IERFTEFZX0NIS1BUX1NUQVJUOwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9nLmMKaW5kZXggMDA3MGQ1NmIwYjAuLjdiOTIxMjRkN2ZkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jCkBAIC00NjM2LDYgKzQ2MzYsNyBAQCBCb290U3RyYXBYTE9HKHZvaWQp CiAJdWludDY0CQlzeXNpZGVudGlmaWVyOwogCXN0cnVjdCB0aW1ldmFsIHR2OwogCXBnX2NyYzMy YwljcmM7CisJUmVzb3VyY2VPd25lciByZXNvd25lcjsKIAogCS8qIGFsbG93IG9yZGluYXJ5IFdB TCBzZWdtZW50IGNyZWF0aW9uLCBsaWtlIFN0YXJ0dXBYTE9HKCkgd291bGQgKi8KIAlTZXRJbnN0 YWxsWExvZ0ZpbGVTZWdtZW50QWN0aXZlKCk7CkBAIC00Nzc1LDEwICs0Nzc2LDE0IEBAIEJvb3RT dHJhcFhMT0codm9pZCkKIAlXcml0ZUNvbnRyb2xGaWxlKCk7CiAKIAkvKiBCb290c3RyYXAgdGhl IGNvbW1pdCBsb2csIHRvbyAqLworCXJlc293bmVyID0gUmVzb3VyY2VPd25lckNyZWF0ZShOVUxM LCAiYm9vdHN0cmFwIHJlc293bmVyIik7CisJQ3VycmVudFJlc291cmNlT3duZXIgPSByZXNvd25l cjsKIAlCb290U3RyYXBDTE9HKCk7CiAJQm9vdFN0cmFwQ29tbWl0VHMoKTsKIAlCb290U3RyYXBT VUJUUkFOUygpOwogCUJvb3RTdHJhcE11bHRpWGFjdCgpOworCUN1cnJlbnRSZXNvdXJjZU93bmVy ID0gTlVMTDsKKwlSZXNvdXJjZU93bmVyRGVsZXRlKHJlc293bmVyKTsKIAogCXBmcmVlKGJ1ZmZl cik7CiAKQEAgLTQ3ODcsNiArNDc5Miw4IEBAIEJvb3RTdHJhcFhMT0codm9pZCkKIAkgKiBvdGhl cndpc2UgbmV2ZXIgcnVuIHRoZSBjaGVja3MgYW5kIEdVQyByZWxhdGVkIGluaXRpYWxpemF0aW9u cyB0aGVyZWluLgogCSAqLwogCVJlYWRDb250cm9sRmlsZSgpOworCisJc21ncmNsb3NlYWxsKCk7 CiB9CiAKIHN0YXRpYyBjaGFyICoKQEAgLTY5OTUsMTUgKzcwMDIsMTEgQEAgQ2hlY2tQb2ludEd1 dHMoWExvZ1JlY1B0ciBjaGVja1BvaW50UmVkbywgaW50IGZsYWdzKQogCUNoZWNrUG9pbnRTbmFw QnVpbGQoKTsKIAlDaGVja1BvaW50TG9naWNhbFJld3JpdGVIZWFwKCk7CiAJQ2hlY2tQb2ludFJl cGxpY2F0aW9uT3JpZ2luKCk7CisJQ2hlY2tQb2ludFByZWRpY2F0ZSgpOwogCi0JLyogV3JpdGUg b3V0IGFsbCBkaXJ0eSBkYXRhIGluIFNMUlVzIGFuZCB0aGUgbWFpbiBidWZmZXIgcG9vbCAqLwor CS8qIFdyaXRlIG91dCBhbGwgZGlydHkgZGF0YSBpbiB0aGUgYnVmZmVyIHBvb2wgKi8KIAlUUkFD RV9QT1NUR1JFU1FMX0JVRkZFUl9DSEVDS1BPSU5UX1NUQVJUKGZsYWdzKTsKIAlDaGVja3BvaW50 U3RhdHMuY2twdF93cml0ZV90ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwotCUNoZWNrUG9pbnRD TE9HKCk7Ci0JQ2hlY2tQb2ludENvbW1pdFRzKCk7Ci0JQ2hlY2tQb2ludFNVQlRSQU5TKCk7Ci0J Q2hlY2tQb2ludE11bHRpWGFjdCgpOwotCUNoZWNrUG9pbnRQcmVkaWNhdGUoKTsKIAlDaGVja1Bv aW50QnVmZmVycyhmbGFncyk7CiAKIAkvKiBQZXJmb3JtIGFsbCBxdWV1ZWQgdXAgZnN5bmNzICov CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hlci5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYwppbmRleCAwNDZl NDBkMTQzYS4uNTA2NzRjZDhiNTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dwcmVmZXRjaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3ByZWZldGNoZXIuYwpAQCAtNjUyLDcgKzY1Miw3IEBAIFhMb2dQcmVmZXRjaGVyTmV4dEJsb2Nr KHVpbnRwdHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJewogCQkJaW50CQkJ YmxvY2tfaWQgPSBwcmVmZXRjaGVyLT5uZXh0X2Jsb2NrX2lkKys7CiAJCQlEZWNvZGVkQmtwQmxv Y2sgKmJsb2NrID0gJnJlY29yZC0+YmxvY2tzW2Jsb2NrX2lkXTsKLQkJCVNNZ3JSZWxhdGlvbiBy ZWxuOworCQkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAJCQlQcmVmZXRjaEJ1ZmZlclJlc3VsdCBy ZXN1bHQ7CiAKIAkJCWlmICghYmxvY2stPmluX3VzZSkKQEAgLTcyMiw3ICs3MjIsNyBAQCBYTG9n UHJlZmV0Y2hlck5leHRCbG9jayh1aW50cHRyX3QgcGdzcl9wcml2YXRlLCBYTG9nUmVjUHRyICps c24pCiAJCQkgKiBzYW1lIHJlbGF0aW9uICh3aXRoIHNvbWUgc2NoZW1lIHRvIGhhbmRsZSBpbnZh bGlkYXRpb25zCiAJCQkgKiBzYWZlbHkpLCBidXQgZm9yIG5vdyB3ZSdsbCBjYWxsIHNtZ3JvcGVu KCkgZXZlcnkgdGltZS4KIAkJCSAqLwotCQkJcmVsbiA9IHNtZ3JvcGVuKGJsb2NrLT5ybG9jYXRv ciwgSW52YWxpZEJhY2tlbmRJZCk7CisJCQlzZmlsZSA9IHNtZ3JvcGVuKGJsb2NrLT5ybG9jYXRv ciwgSW52YWxpZEJhY2tlbmRJZCwgYmxvY2stPmZvcmtudW0pOwogCiAJCQkvKgogCQkJICogSWYg dGhlIHJlbGF0aW9uIGZpbGUgZG9lc24ndCBleGlzdCBvbiBkaXNrLCBmb3IgZXhhbXBsZSBiZWNh dXNlCkBAIC03MzEsMTQgKzczMSwxNCBAQCBYTG9nUHJlZmV0Y2hlck5leHRCbG9jayh1aW50cHRy X3QgcGdzcl9wcml2YXRlLCBYTG9nUmVjUHRyICpsc24pCiAJCQkgKiBmdXJ0aGVyIHByZWZldGNo aW5nIGluIHRoZSByZWxhdGlvbiB1bnRpbCB0aGlzIHJlY29yZCBpcwogCQkJICogcmVwbGF5ZWQu CiAJCQkgKi8KLQkJCWlmICghc21ncmV4aXN0cyhyZWxuLCBNQUlOX0ZPUktOVU0pKQorCQkJaWYg KCFzbWdyZXhpc3RzKHNmaWxlKSkKIAkJCXsKICNpZmRlZiBYTE9HUFJFRkVUQ0hFUl9ERUJVR19M RVZFTAogCQkJCWVsb2coWExPR1BSRUZFVENIRVJfREVCVUdfTEVWRUwsCiAJCQkJCSAic3VwcHJl c3NpbmcgYWxsIHByZWZldGNoIGluIHJlbGF0aW9uICV1LyV1LyV1IHVudGlsICVYLyVYIGlzIHJl cGxheWVkLCBiZWNhdXNlIHRoZSByZWxhdGlvbiBkb2VzIG5vdCBleGlzdCBvbiBkaXNrIiwKLQkJ CQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCSByZWxuLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IucmVsTnVtYmVyLAorCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQs CisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkgc2ZpbGUt PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCiAJCQkJCSBMU05fRk9STUFUX0FSR1Mo cmVjb3JkLT5sc24pKTsKICNlbmRpZgogCQkJCVhMb2dQcmVmZXRjaGVyQWRkRmlsdGVyKHByZWZl dGNoZXIsIGJsb2NrLT5ybG9jYXRvciwgMCwKQEAgLTc1MiwxNCArNzUyLDE0IEBAIFhMb2dQcmVm ZXRjaGVyTmV4dEJsb2NrKHVpbnRwdHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxzbikK IAkJCSAqIGJsb2NrIHlldCwgc3VwcHJlc3MgcHJlZmV0Y2hpbmcgb2YgdGhpcyBibG9jayBhbmQg aGlnaGVyIHVudGlsCiAJCQkgKiB0aGlzIHJlY29yZCBpcyByZXBsYXllZC4KIAkJCSAqLwotCQkJ aWYgKGJsb2NrLT5ibGtubyA+PSBzbWdybmJsb2NrcyhyZWxuLCBibG9jay0+Zm9ya251bSkpCisJ CQlpZiAoYmxvY2stPmJsa25vID49IHNtZ3JuYmxvY2tzKHNmaWxlKSkKIAkJCXsKICNpZmRlZiBY TE9HUFJFRkVUQ0hFUl9ERUJVR19MRVZFTAogCQkJCWVsb2coWExPR1BSRUZFVENIRVJfREVCVUdf TEVWRUwsCiAJCQkJCSAic3VwcHJlc3NpbmcgcHJlZmV0Y2ggaW4gcmVsYXRpb24gJXUvJXUvJXUg ZnJvbSBibG9jayAldSB1bnRpbCAlWC8lWCBpcyByZXBsYXllZCwgYmVjYXVzZSB0aGUgcmVsYXRp b24gaXMgdG9vIHNtYWxsIiwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNP aWQsCi0JCQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCSByZWxu LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkgc2ZpbGUtPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9y LmRiT2lkLAorCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCiAJ CQkJCSBibG9jay0+Ymxrbm8sCiAJCQkJCSBMU05fRk9STUFUX0FSR1MocmVjb3JkLT5sc24pKTsK ICNlbmRpZgpAQCAtNzcwLDcgKzc3MCw3IEBAIFhMb2dQcmVmZXRjaGVyTmV4dEJsb2NrKHVpbnRw dHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJCX0KIAogCQkJLyogVHJ5IHRv IGluaXRpYXRlIHByZWZldGNoaW5nLiAqLwotCQkJcmVzdWx0ID0gUHJlZmV0Y2hTaGFyZWRCdWZm ZXIocmVsbiwgYmxvY2stPmZvcmtudW0sIGJsb2NrLT5ibGtubyk7CisJCQlyZXN1bHQgPSBQcmVm ZXRjaFNoYXJlZEJ1ZmZlcihzZmlsZSwgYmxvY2stPmJsa25vKTsKIAkJCWlmIChCdWZmZXJJc1Zh bGlkKHJlc3VsdC5yZWNlbnRfYnVmZmVyKSkKIAkJCXsKIAkJCQkvKiBDYWNoZSBoaXQsIG5vdGhp bmcgdG8gZG8uICovCkBAIC03OTYsOSArNzk2LDkgQEAgWExvZ1ByZWZldGNoZXJOZXh0QmxvY2so dWludHB0cl90IHBnc3JfcHJpdmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQkJCSAqLwogCQkJCWVs b2coRVJST1IsCiAJCQkJCSAiY291bGQgbm90IHByZWZldGNoIHJlbGF0aW9uICV1LyV1LyV1IGJs b2NrICV1IiwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJ CSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCSByZWxuLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2Nh dG9yLnNwY09pZCwKKwkJCQkJIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJ CQkJIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCiAJCQkJCSBibG9jay0+ Ymxrbm8pOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9ndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5jCmlu ZGV4IDg3Y2E5ZGZlZjE2Li45M2EwMWFkODQ0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ3V0aWxzLmMKQEAgLTQ3Nyw3ICs0NzcsNyBAQCBYTG9nUmVhZEJ1ZmZlckV4dGVuZGVkKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCiB7CiAJQmxvY2tOdW1i ZXIgbGFzdGJsb2NrOwogCUJ1ZmZlcgkJYnVmZmVyOwotCVNNZ3JSZWxhdGlvbiBzbWdyOworCVNN Z3JGaWxlSGFuZGxlIHNmaWxlOwogCiAJQXNzZXJ0KGJsa25vICE9IFBfTkVXKTsKIApAQCAtNDkx LDcgKzQ5MSw3IEBAIFhMb2dSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKIAl9CiAKIAkvKiBPcGVuIHRoZSByZWxhdGlvbiBhdCBz bWdyIGxldmVsICovCi0Jc21nciA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElk KTsKKwlzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrbnVt KTsKIAogCS8qCiAJICogQ3JlYXRlIHRoZSB0YXJnZXQgZmlsZSBpZiBpdCBkb2Vzbid0IGFscmVh ZHkgZXhpc3QuICBUaGlzIGxldHMgdXMgY29wZQpAQCAtNTAxLDkgKzUwMSw5IEBAIFhMb2dSZWFk QnVmZmVyRXh0ZW5kZWQoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251 bSwKIAkgKiBmaWxlc3lzdGVtIGxvc2VzIGFuIGlub2RlIGR1cmluZyBhIGNyYXNoLiAgQmV0dGVy IHRvIHdyaXRlIHRoZSBkYXRhCiAJICogdW50aWwgd2UgYXJlIGFjdHVhbGx5IHRvbGQgdG8gZGVs ZXRlIHRoZSBmaWxlLikKIAkgKi8KLQlzbWdyY3JlYXRlKHNtZ3IsIGZvcmtudW0sIHRydWUpOwor CXNtZ3JjcmVhdGUoc2ZpbGUsIHRydWUpOwogCi0JbGFzdGJsb2NrID0gc21ncm5ibG9ja3Moc21n ciwgZm9ya251bSk7CisJbGFzdGJsb2NrID0gc21ncm5ibG9ja3Moc2ZpbGUpOwogCiAJaWYgKGJs a25vIDwgbGFzdGJsb2NrKQogCXsKQEAgLTYzMSw3ICs2MzEsNyBAQCBDcmVhdGVGYWtlUmVsY2Fj aGVFbnRyeShSZWxGaWxlTG9jYXRvciBybG9jYXRvcikKIAlyZWwtPnJkX2xvY2tJbmZvLmxvY2tS ZWxJZC5kYklkID0gcmxvY2F0b3IuZGJPaWQ7CiAJcmVsLT5yZF9sb2NrSW5mby5sb2NrUmVsSWQu cmVsSWQgPSBybG9jYXRvci5yZWxOdW1iZXI7CiAKLQlyZWwtPnJkX3NtZ3IgPSBOVUxMOworCU1l bVNldChyZWwtPnJkX3NtZ3IsIDAsIHNpemVvZihyZWwtPnJkX3NtZ3IpKTsKIAogCXJldHVybiBy ZWw7CiB9CkBAIC02NDMsOCArNjQzLDExIEBAIHZvaWQKIEZyZWVGYWtlUmVsY2FjaGVFbnRyeShS ZWxhdGlvbiBmYWtlcmVsKQogewogCS8qIG1ha2Ugc3VyZSB0aGUgZmFrZXJlbCBpcyBub3QgcmVm ZXJlbmNlZCBieSB0aGUgU21nclJlbGF0aW9uIGFueW1vcmUgKi8KLQlpZiAoZmFrZXJlbC0+cmRf c21nciAhPSBOVUxMKQotCQlzbWdyY2xlYXJvd25lcigmZmFrZXJlbC0+cmRfc21nciwgZmFrZXJl bC0+cmRfc21ncik7CisJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFYX0ZPUktOVU07IGkrKykKKwl7 CisJCWlmIChmYWtlcmVsLT5yZF9zbWdyW2ldICE9IE5VTEwpCisJCQlzbWdyY2xlYXJvd25lcigm ZmFrZXJlbC0+cmRfc21ncltpXSwgZmFrZXJlbC0+cmRfc21ncltpXSk7CisJfQogCXBmcmVlKGZh a2VyZWwpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2NhdGFsb2cuYyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvY2F0YWxvZy5jCmluZGV4IDFiZjZjNTYzM2NkLi42YjAxMTU4 NjE1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9jYXRhbG9nLmMKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9jYXRhbG9nLmMKQEAgLTUwMSwxMCArNTAxLDEwIEBAIEdldE5ld09p ZFdpdGhJbmRleChSZWxhdGlvbiByZWxhdGlvbiwgT2lkIGluZGV4SWQsIEF0dHJOdW1iZXIgb2lk Y29sdW1uKQogUmVsRmlsZU51bWJlcgogR2V0TmV3UmVsRmlsZU51bWJlcihPaWQgcmVsdGFibGVz cGFjZSwgUmVsYXRpb24gcGdfY2xhc3MsIGNoYXIgcmVscGVyc2lzdGVuY2UpCiB7Ci0JUmVsRmls ZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yOwotCWNoYXIJICAgKnJwYXRoOwotCWJvb2wJCWNvbGxp ZGVzOworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yOwogCUJhY2tlbmRJZAliYWNrZW5kOworCVNN Z3JGaWxlSGFuZGxlIHNmaWxlOworCWJvb2wJCWNvbGxpZGVzOwogCiAJLyoKIAkgKiBJZiB3ZSBl dmVyIGdldCBoZXJlIGR1cmluZyBwZ191cGdyYWRlLCB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZzsg YWxsCkBAIC01MTMsNiArNTEzLDExIEBAIEdldE5ld1JlbEZpbGVOdW1iZXIoT2lkIHJlbHRhYmxl c3BhY2UsIFJlbGF0aW9uIHBnX2NsYXNzLCBjaGFyIHJlbHBlcnNpc3RlbmNlKQogCSAqLwogCUFz c2VydCghSXNCaW5hcnlVcGdyYWRlKTsKIAorCS8qCisJICogVGhlIHJlbHBhdGggd2lsbCB2YXJ5 IGJhc2VkIG9uIHRoZSBiYWNrZW5kIElELCBzbyB3ZSBtdXN0IGluaXRpYWxpemUKKwkgKiB0aGF0 IHByb3Blcmx5IGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGNvbGxpc2lvbnMgYmFzZWQgb24g ZmlsZW5hbWUKKwkgKiBhcmUgcHJvcGVybHkgZGV0ZWN0ZWQuCisJICovCiAJc3dpdGNoIChyZWxw ZXJzaXN0ZW5jZSkKIAl7CiAJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoKQEAgLTUyOCw1MyAr NTMzLDI5IEBAIEdldE5ld1JlbEZpbGVOdW1iZXIoT2lkIHJlbHRhYmxlc3BhY2UsIFJlbGF0aW9u IHBnX2NsYXNzLCBjaGFyIHJlbHBlcnNpc3RlbmNlKQogCX0KIAogCS8qIFRoaXMgbG9naWMgc2hv dWxkIG1hdGNoIFJlbGF0aW9uSW5pdFBoeXNpY2FsQWRkciAqLwotCXJsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkID0gcmVsdGFibGVzcGFjZSA/IHJlbHRhYmxlc3BhY2UgOiBNeURhdGFiYXNlVGFibGVT cGFjZTsKLQlybG9jYXRvci5sb2NhdG9yLmRiT2lkID0KLQkJKHJsb2NhdG9yLmxvY2F0b3Iuc3Bj T2lkID09IEdMT0JBTFRBQkxFU1BBQ0VfT0lEKSA/CisJcmxvY2F0b3Iuc3BjT2lkID0gcmVsdGFi bGVzcGFjZSA/IHJlbHRhYmxlc3BhY2UgOiBNeURhdGFiYXNlVGFibGVTcGFjZTsKKwlybG9jYXRv ci5kYk9pZCA9CisJCShybG9jYXRvci5zcGNPaWQgPT0gR0xPQkFMVEFCTEVTUEFDRV9PSUQpID8K IAkJSW52YWxpZE9pZCA6IE15RGF0YWJhc2VJZDsKIAotCS8qCi0JICogVGhlIHJlbHBhdGggd2ls bCB2YXJ5IGJhc2VkIG9uIHRoZSBiYWNrZW5kIElELCBzbyB3ZSBtdXN0IGluaXRpYWxpemUKLQkg KiB0aGF0IHByb3Blcmx5IGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGNvbGxpc2lvbnMgYmFz ZWQgb24gZmlsZW5hbWUKLQkgKiBhcmUgcHJvcGVybHkgZGV0ZWN0ZWQuCi0JICovCi0JcmxvY2F0 b3IuYmFja2VuZCA9IGJhY2tlbmQ7Ci0KIAlkbwogCXsKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKIAogCQkvKiBHZW5lcmF0ZSB0aGUgT0lEICovCiAJCWlmIChwZ19jbGFzcykKLQkJCXJsb2Nh dG9yLmxvY2F0b3IucmVsTnVtYmVyID0gR2V0TmV3T2lkV2l0aEluZGV4KHBnX2NsYXNzLCBDbGFz c09pZEluZGV4SWQsCisJCQlybG9jYXRvci5yZWxOdW1iZXIgPSBHZXROZXdPaWRXaXRoSW5kZXgo cGdfY2xhc3MsIENsYXNzT2lkSW5kZXhJZCwKIAkJCQkJCQkJCQkJCQkJCUFudW1fcGdfY2xhc3Nf b2lkKTsKIAkJZWxzZQotCQkJcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIgPSBHZXROZXdPYmpl Y3RJZCgpOworCQkJcmxvY2F0b3IucmVsTnVtYmVyID0gR2V0TmV3T2JqZWN0SWQoKTsKIAogCQkv KiBDaGVjayBmb3IgZXhpc3RpbmcgZmlsZSBvZiBzYW1lIG5hbWUgKi8KLQkJcnBhdGggPSByZWxw YXRoKHJsb2NhdG9yLCBNQUlOX0ZPUktOVU0pOwotCi0JCWlmIChhY2Nlc3MocnBhdGgsIEZfT0sp ID09IDApCi0JCXsKLQkJCS8qIGRlZmluaXRlIGNvbGxpc2lvbiAqLwotCQkJY29sbGlkZXMgPSB0 cnVlOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIEhlcmUgd2UgaGF2ZSBhIGxpdHRs ZSBiaXQgb2YgYSBkaWxlbW1hOiBpZiBlcnJubyBpcyBzb21ldGhpbmcKLQkJCSAqIG90aGVyIHRo YW4gRU5PRU5ULCBzaG91bGQgd2UgZGVjbGFyZSBhIGNvbGxpc2lvbiBhbmQgbG9vcD8gSW4KLQkJ CSAqIHByYWN0aWNlIGl0IHNlZW1zIGJlc3QgdG8gZ28gYWhlYWQgcmVnYXJkbGVzcyBvZiB0aGUg ZXJybm8uICBJZgotCQkJICogdGhlcmUgaXMgYSBjb2xsaWRpbmcgZmlsZSB3ZSB3aWxsIGdldCBh biBzbWdyIGZhaWx1cmUgd2hlbiB3ZQotCQkJICogYXR0ZW1wdCB0byBjcmVhdGUgdGhlIG5ldyBy ZWxhdGlvbiBmaWxlLgotCQkJICovCi0JCQljb2xsaWRlcyA9IGZhbHNlOwotCQl9Ci0KLQkJcGZy ZWUocnBhdGgpOworCQlzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBiYWNrZW5kLCBNQUlOX0ZP UktOVU0pOworCQljb2xsaWRlcyA9IHNtZ3JleGlzdHMoc2ZpbGUpOworCQlzbWdyY2xvc2Uoc2Zp bGUpOwogCX0gd2hpbGUgKGNvbGxpZGVzKTsKIAotCXJldHVybiBybG9jYXRvci5sb2NhdG9yLnJl bE51bWJlcjsKKwlyZXR1cm4gcmxvY2F0b3IucmVsTnVtYmVyOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRl eC5jCmluZGV4IGU2NTc5ZjI5NzkzLi42ODMyMTAwNjdiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAt MzAyOSw5ICszMDI5LDkgQEAgaW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCSAq IHJlbGZpbGVudW1iZXIgd29uJ3QgY2hhbmdlLCBhbmQgbm90aGluZyBuZWVkcyB0byBiZSBkb25l IGhlcmUuCiAJICovCiAJaWYgKGluZGV4UmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2Ug PT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQgJiYKLQkJIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRT bWdyKGluZGV4UmVsYXRpb24pLCBJTklUX0ZPUktOVU0pKQorCQkhc21ncmV4aXN0cyhSZWxhdGlv bkdldFNtZ3IoaW5kZXhSZWxhdGlvbiwgSU5JVF9GT1JLTlVNKSkpCiAJewotCQlzbWdyY3JlYXRl KFJlbGF0aW9uR2V0U21ncihpbmRleFJlbGF0aW9uKSwgSU5JVF9GT1JLTlVNLCBmYWxzZSk7CisJ CXNtZ3JjcmVhdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4UmVsYXRpb24sIElOSVRfRk9SS05VTSks IGZhbHNlKTsKIAkJaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtYnVpbGRlbXB0eShpbmRleFJl bGF0aW9uKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFnZS5j IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMKaW5kZXggMDM5YWRhOTRjNGYuLjdlNDVh M2QxZWM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N0b3JhZ2UuYworKysgYi9z cmMvYmFja2VuZC9jYXRhbG9nL3N0b3JhZ2UuYwpAQCAtMTE2LDExICsxMTYsMTEgQEAgQWRkUGVu ZGluZ1N5bmMoY29uc3QgUmVsRmlsZUxvY2F0b3IgKnJsb2NhdG9yKQogICogdGhhdCBkb2VzIG5v dCB3YW50IHRoZSBzdG9yYWdlIHRvIGJlIGRlc3Ryb3llZCBpbiBjYXNlIG9mIGFuIGFib3J0IG1h eQogICogcGFzcyByZWdpc3Rlcl9kZWxldGUgPSBmYWxzZS4KICAqLwotU01nclJlbGF0aW9uCitT TWdyRmlsZUhhbmRsZQogUmVsYXRpb25DcmVhdGVTdG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAogCQkJCQkgIGJvb2wgcmVnaXN0ZXJfZGVsZXRlKQog ewotCVNNZ3JSZWxhdGlvbiBzcmVsOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCUJhY2tlbmRJ ZAliYWNrZW5kOwogCWJvb2wJCW5lZWRzX3dhbDsKIApAQCAtMTQ1LDExICsxNDUsMTEgQEAgUmVs YXRpb25DcmVhdGVTdG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBjaGFyIHJlbHBlcnNp c3RlbmNlLAogCQkJcmV0dXJuIE5VTEw7CQkvKiBwbGFjYXRlIGNvbXBpbGVyICovCiAJfQogCi0J c3JlbCA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBiYWNrZW5kKTsKLQlzbWdyY3JlYXRlKHNyZWwsIE1B SU5fRk9SS05VTSwgZmFsc2UpOworCXNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIGJhY2tlbmQs IE1BSU5fRk9SS05VTSk7CisJc21ncmNyZWF0ZShzZmlsZSwgZmFsc2UpOwogCiAJaWYgKG5lZWRz X3dhbCkKLQkJbG9nX3NtZ3JjcmVhdGUoJnNyZWwtPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgTUFJ Tl9GT1JLTlVNKTsKKwkJbG9nX3NtZ3JjcmVhdGUoJnJsb2NhdG9yLCBNQUlOX0ZPUktOVU0pOwog CiAJLyoKIAkgKiBBZGQgdGhlIHJlbGF0aW9uIHRvIHRoZSBsaXN0IG9mIHN0dWZmIHRvIGRlbGV0 ZSBhdCBhYm9ydCwgaWYgd2UgYXJlCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVsYXRpb25DcmVhdGVT dG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAogCQlB ZGRQZW5kaW5nU3luYygmcmxvY2F0b3IpOwogCX0KIAotCXJldHVybiBzcmVsOworCXJldHVybiBz ZmlsZTsKIH0KIAogLyoKQEAgLTI5MiwxNiArMjkyLDE4IEBAIFJlbGF0aW9uVHJ1bmNhdGUoUmVs YXRpb24gcmVsLCBCbG9ja051bWJlciBuYmxvY2tzKQogCUZvcmtOdW1iZXIJZm9ya3NbTUFYX0ZP UktOVU1dOwogCUJsb2NrTnVtYmVyIGJsb2Nrc1tNQVhfRk9SS05VTV07CiAJaW50CQkJbmZvcmtz ID0gMDsKLQlTTWdyUmVsYXRpb24gcmVsbjsKIAogCS8qCiAJICogTWFrZSBzdXJlIHNtZ3JfdGFy Z2Jsb2NrIGV0YyBhcmVuJ3QgcG9pbnRpbmcgc29tZXdoZXJlIHBhc3QgbmV3IGVuZC4KIAkgKiAo Tm90ZTogZG9uJ3QgcmVseSBvbiB0aGlzIHJlbG4gcG9pbnRlciBiZWxvdyB0aGlzIGxvb3AuKQog CSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKLQlyZWxuLT5zbWdyX3RhcmdibG9j ayA9IEludmFsaWRCbG9ja051bWJlcjsKLQlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05V TTsgKytpKQotCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ldID0gSW52YWxpZEJsb2NrTnVt YmVyOworCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBpKyspCisJeworCQlTTWdy RmlsZUhhbmRsZSBzZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIGkpOworCisJCXNmaWxlLT5z bWdyX3RhcmdibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJc2ZpbGUtPnNtZ3JfY2FjaGVk X25ibG9ja3MgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJfQogCiAJLyogUHJlcGFyZSBmb3IgdHJ1 bmNhdGlvbiBvZiBNQUlOIGZvcmsgb2YgdGhlIHJlbGF0aW9uICovCiAJZm9ya3NbbmZvcmtzXSA9 IE1BSU5fRk9SS05VTTsKQEAgLTMwOSw3ICszMTEsNyBAQCBSZWxhdGlvblRydW5jYXRlKFJlbGF0 aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAluZm9ya3MrKzsKIAogCS8qIFByZXBhcmUg Zm9yIHRydW5jYXRpb24gb2YgdGhlIEZTTSBpZiBpdCBleGlzdHMgKi8KLQlmc20gPSBzbWdyZXhp c3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBGU01fRk9SS05VTSk7CisJZnNtID0gc21ncmV4aXN0 cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBGU01fRk9SS05VTSkpOwogCWlmIChmc20pCiAJewogCQli bG9ja3NbbmZvcmtzXSA9IEZyZWVTcGFjZU1hcFByZXBhcmVUcnVuY2F0ZVJlbChyZWwsIG5ibG9j a3MpOwpAQCAtMzIyLDcgKzMyNCw3IEBAIFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRpb24gcmVsLCBC bG9ja051bWJlciBuYmxvY2tzKQogCX0KIAogCS8qIFByZXBhcmUgZm9yIHRydW5jYXRpb24gb2Yg dGhlIHZpc2liaWxpdHkgbWFwIHRvbyBpZiBpdCBleGlzdHMgKi8KLQl2bSA9IHNtZ3JleGlzdHMo UmVsYXRpb25HZXRTbWdyKHJlbCksIFZJU0lCSUxJVFlNQVBfRk9SS05VTSk7CisJdm0gPSBzbWdy ZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpOwogCWlm ICh2bSkKIAl7CiAJCWJsb2Nrc1tuZm9ya3NdID0gdmlzaWJpbGl0eW1hcF9wcmVwYXJlX3RydW5j YXRlKHJlbCwgbmJsb2Nrcyk7CkBAIC0zOTAsMTEgKzM5MiwxMiBAQCBSZWxhdGlvblRydW5jYXRl KFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAl9CiAKIAkvKgotCSAqIFRoaXMg d2lsbCBmaXJzdCByZW1vdmUgYW55IGJ1ZmZlcnMgZnJvbSB0aGUgYnVmZmVyIHBvb2wgdGhhdCBz aG91bGQgbm8KKwkgKiBGaXJzdCByZW1vdmUgYW55IGJ1ZmZlcnMgZnJvbSB0aGUgYnVmZmVyIHBv b2wgdGhhdCBzaG91bGQgbm8KIAkgKiBsb25nZXIgZXhpc3QgYWZ0ZXIgdHJ1bmNhdGlvbiBpcyBj b21wbGV0ZSwgYW5kIHRoZW4gdHJ1bmNhdGUgdGhlCiAJICogY29ycmVzcG9uZGluZyBmaWxlcyBv biBkaXNrLgogCSAqLwotCXNtZ3J0cnVuY2F0ZShSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9ya3Ms IG5mb3JrcywgYmxvY2tzKTsKKwlEcm9wUmVsYXRpb25CdWZmZXJzKHJlbC0+cmRfbG9jYXRvciwg cmVsLT5yZF9iYWNrZW5kLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOworCXNtZ3J0cnVuY2F0ZV9t dWx0aShyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya3MsIG5mb3JrcywgYmxv Y2tzKTsKIAogCS8qIFdlJ3ZlIGRvbmUgYWxsIHRoZSBjcml0aWNhbCB3b3JrLCBzbyBjaGVja3Bv aW50cyBhcmUgT0sgbm93LiAqLwogCU15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzICY9IH5ERUxBWV9D SEtQVF9DT01QTEVURTsKQEAgLTQyOCw3ICs0MzEsNyBAQCBSZWxhdGlvblByZVRydW5jYXRlKFJl bGF0aW9uIHJlbCkKIAkJcmV0dXJuOwogCiAJcGVuZGluZyA9IGhhc2hfc2VhcmNoKHBlbmRpbmdT eW5jSGFzaCwKLQkJCQkJCSAgJihSZWxhdGlvbkdldFNtZ3IocmVsKS0+c21ncl9ybG9jYXRvci5s b2NhdG9yKSwKKwkJCQkJCSAgJnJlbC0+cmRfbG9jYXRvciwKIAkJCQkJCSAgSEFTSF9GSU5ELCBO VUxMKTsKIAlpZiAocGVuZGluZykKIAkJcGVuZGluZy0+aXNfdHJ1bmNhdGVkID0gdHJ1ZTsKQEAg LTQ0NCwxMiArNDQ3LDEyIEBAIFJlbGF0aW9uUHJlVHJ1bmNhdGUoUmVsYXRpb24gcmVsKQogICog QWxzbyBub3RlIHRoYXQgdGhpcyBpcyBmcmVxdWVudGx5IGNhbGxlZCB2aWEgbG9jdXRpb25zIHN1 Y2ggYXMKICAqCQlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwpLCAuLi4p OwogICogVGhhdCdzIHNhZmUgb25seSBiZWNhdXNlIHdlIHBlcmZvcm0gb25seSBzbWdyIGFuZCBX QUwgb3BlcmF0aW9ucyBoZXJlLgotICogSWYgd2UgaW52b2tlZCBhbnl0aGluZyBlbHNlLCBhIHJl bGNhY2hlIGZsdXNoIGNvdWxkIGNhdXNlIG91ciBTTWdyUmVsYXRpb24KKyAqIElmIHdlIGludm9r ZWQgYW55dGhpbmcgZWxzZSwgYSByZWxjYWNoZSBmbHVzaCBjb3VsZCBjYXVzZSBvdXIgU01nckZp bGVIYW5kbGUKICAqIGFyZ3VtZW50IHRvIGJlY29tZSBhIGRhbmdsaW5nIHBvaW50ZXIuCiAgKi8K IHZvaWQKLVJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01nclJlbGF0aW9u IGRzdCwKLQkJCQkJRm9ya051bWJlciBmb3JrTnVtLCBjaGFyIHJlbHBlcnNpc3RlbmNlKQorUmVs YXRpb25Db3B5U3RvcmFnZShTTWdyRmlsZUhhbmRsZSBzcmMsIFNNZ3JGaWxlSGFuZGxlIGRzdCwK KwkJCQkJY2hhciByZWxwZXJzaXN0ZW5jZSkKIHsKIAlQR0FsaWduZWRCbG9jayBidWY7CiAJUGFn ZQkJcGFnZTsKQEAgLTQ2Niw3ICs0NjksNyBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JSZWxh dGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJICogaXQgbmVlZHMgdG8gYmUgc3luY2VkIHRv IGRpc2suCiAJICovCiAJY29weWluZ19pbml0Zm9yayA9IHJlbHBlcnNpc3RlbmNlID09IFJFTFBF UlNJU1RFTkNFX1VOTE9HR0VEICYmCi0JCWZvcmtOdW0gPT0gSU5JVF9GT1JLTlVNOworCQlzcmMt PnNtZ3JfbG9jYXRvci5mb3JrbnVtID09IElOSVRfRk9SS05VTTsKIAogCS8qCiAJICogV2UgbmVl ZCB0byBsb2cgdGhlIGNvcGllZCBkYXRhIGluIFdBTCBpZmYgV0FMIGFyY2hpdmluZy9zdHJlYW1p bmcgaXMKQEAgLTQ3NywxNCArNDgwLDE0IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0 aW9uIHNyYywgU01nclJlbGF0aW9uIGRzdCwKIAl1c2Vfd2FsID0gWExvZ0lzTmVlZGVkKCkgJiYK IAkJKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCB8fCBjb3B5aW5n X2luaXRmb3JrKTsKIAotCW5ibG9ja3MgPSBzbWdybmJsb2NrcyhzcmMsIGZvcmtOdW0pOworCW5i bG9ja3MgPSBzbWdybmJsb2NrcyhzcmMpOwogCiAJZm9yIChibGtubyA9IDA7IGJsa25vIDwgbmJs b2NrczsgYmxrbm8rKykKIAl7CiAJCS8qIElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwgZHVyaW5n IHRoZSBjb3B5IG9mIHRoZSBkYXRhLCBxdWl0ICovCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7 CiAKLQkJc21ncnJlYWQoc3JjLCBmb3JrTnVtLCBibGtubywgYnVmLmRhdGEpOworCQlzbWdycmVh ZChzcmMsIGJsa25vLCBidWYuZGF0YSk7CiAKIAkJaWYgKCFQYWdlSXNWZXJpZmllZEV4dGVuZGVk KHBhZ2UsIGJsa25vLAogCQkJCQkJCQkJUElWX0xPR19XQVJOSU5HIHwgUElWX1JFUE9SVF9TVEFU KSkKQEAgLTQ5Niw5ICs0OTksNyBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JSZWxhdGlvbiBz cmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJCQkgKiAoZXJyY29udGV4dCBjYWxsYmFja3Mgc2hvdWxk bid0IGJlIHJpc2tpbmcgYW55IHN1Y2ggdGhpbmcsIGJ1dAogCQkJICogcGVvcGxlIGhhdmUgYmVl biBrbm93biB0byBmb3JnZXQgdGhhdCBydWxlLikKIAkJCSAqLwotCQkJY2hhcgkgICAqcmVscGF0 aCA9IHJlbHBhdGhiYWNrZW5kKHNyYy0+c21ncl9ybG9jYXRvci5sb2NhdG9yLAotCQkJCQkJCQkJ CQkJIHNyYy0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJCQkJCQkJIGZvcmtOdW0pOwor CQkJY2hhcgkgICAqcmVscGF0aCA9IHNtZ3JmaWxlcGF0aChzcmMtPnNtZ3JfbG9jYXRvcik7CiAK IAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQp LApAQCAtNTEyLDcgKzUxMyw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNy YywgU01nclJlbGF0aW9uIGRzdCwKIAkJICogc3BhY2UuCiAJCSAqLwogCQlpZiAodXNlX3dhbCkK LQkJCWxvZ19uZXdwYWdlKCZkc3QtPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgZm9ya051bSwgYmxr bm8sIHBhZ2UsIGZhbHNlKTsKKwkJCWxvZ19uZXdwYWdlKCZkc3QtPnNtZ3JfbG9jYXRvci5sb2Nh dG9yLCBkc3QtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibGtubywgcGFnZSwgZmFsc2UpOwogCiAJ CVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgYmxrbm8pOwogCkBAIC01MjEsNyArNTIyLDcg QEAgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRpb24gZHN0 LAogCQkgKiBuZWVkIGZvciBzbWdyIHRvIHNjaGVkdWxlIGFuIGZzeW5jIGZvciB0aGlzIHdyaXRl OyB3ZSdsbCBkbyBpdAogCQkgKiBvdXJzZWx2ZXMgYmVsb3cuCiAJCSAqLwotCQlzbWdyZXh0ZW5k KGRzdCwgZm9ya051bSwgYmxrbm8sIGJ1Zi5kYXRhLCB0cnVlKTsKKwkJc21ncmV4dGVuZChkc3Qs IGJsa25vLCBidWYuZGF0YSwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAgLTUzNCw3ICs1MzUsNyBAQCBS ZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JSZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJ ICogdGhleSBtaWdodCBzdGlsbCBub3QgYmUgb24gZGlzayB3aGVuIHRoZSBjcmFzaCBvY2N1cnMu CiAJICovCiAJaWYgKHVzZV93YWwgfHwgY29weWluZ19pbml0Zm9yaykKLQkJc21ncmltbWVkc3lu Yyhkc3QsIGZvcmtOdW0pOworCQlzbWdyaW1tZWRzeW5jKGRzdCk7CiB9CiAKIC8qCkBAIC02NTMs OSArNjU0LDkgQEAgc21nckRvUGVuZGluZ0RlbGV0ZXMoYm9vbCBpc0NvbW1pdCkKIAlQZW5kaW5n UmVsRGVsZXRlICpwZW5kaW5nOwogCVBlbmRpbmdSZWxEZWxldGUgKnByZXY7CiAJUGVuZGluZ1Jl bERlbGV0ZSAqbmV4dDsKLQlpbnQJCQlucmVscyA9IDAsCi0JCQkJbWF4cmVscyA9IDA7Ci0JU01n clJlbGF0aW9uICpzcmVscyA9IE5VTEw7CisJaW50CQkJbmxvY2F0b3JzID0gMCwKKwkJCQltYXhs b2NhdG9ycyA9IDA7CisJUmVsRmlsZUxvY2F0b3JCYWNrZW5kICpsb2NhdG9ycyA9IE5VTEw7CiAK IAlwcmV2ID0gTlVMTDsKIAlmb3IgKHBlbmRpbmcgPSBwZW5kaW5nRGVsZXRlczsgcGVuZGluZyAh PSBOVUxMOyBwZW5kaW5nID0gbmV4dCkKQEAgLTY3NiwyMyArNjc3LDIxIEBAIHNtZ3JEb1BlbmRp bmdEZWxldGVzKGJvb2wgaXNDb21taXQpCiAJCQkvKiBkbyBkZWxldGlvbiBpZiBjYWxsZWQgZm9y ICovCiAJCQlpZiAocGVuZGluZy0+YXRDb21taXQgPT0gaXNDb21taXQpCiAJCQl7Ci0JCQkJU01n clJlbGF0aW9uIHNyZWw7Ci0KLQkJCQlzcmVsID0gc21ncm9wZW4ocGVuZGluZy0+cmxvY2F0b3Is IHBlbmRpbmctPmJhY2tlbmQpOworCQkJCVJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciA9 IHsgcGVuZGluZy0+cmxvY2F0b3IsIHBlbmRpbmctPmJhY2tlbmQgfTsKIAogCQkJCS8qIGFsbG9j YXRlIHRoZSBpbml0aWFsIGFycmF5LCBvciBleHRlbmQgaXQsIGlmIG5lZWRlZCAqLwotCQkJCWlm IChtYXhyZWxzID09IDApCisJCQkJaWYgKG1heGxvY2F0b3JzID09IDApCiAJCQkJewotCQkJCQlt YXhyZWxzID0gODsKLQkJCQkJc3JlbHMgPSBwYWxsb2Moc2l6ZW9mKFNNZ3JSZWxhdGlvbikgKiBt YXhyZWxzKTsKKwkJCQkJbWF4bG9jYXRvcnMgPSA4OworCQkJCQlsb2NhdG9ycyA9IHBhbGxvYyhz aXplb2YoUmVsRmlsZUxvY2F0b3JCYWNrZW5kKSAqIG1heGxvY2F0b3JzKTsKIAkJCQl9Ci0JCQkJ ZWxzZSBpZiAobWF4cmVscyA8PSBucmVscykKKwkJCQllbHNlIGlmIChtYXhsb2NhdG9ycyA8PSBu bG9jYXRvcnMpCiAJCQkJewotCQkJCQltYXhyZWxzICo9IDI7Ci0JCQkJCXNyZWxzID0gcmVwYWxs b2Moc3JlbHMsIHNpemVvZihTTWdyUmVsYXRpb24pICogbWF4cmVscyk7CisJCQkJCW1heGxvY2F0 b3JzICo9IDI7CisJCQkJCWxvY2F0b3JzID0gcmVwYWxsb2MobG9jYXRvcnMsIHNpemVvZihSZWxG aWxlTG9jYXRvckJhY2tlbmQpICogbWF4bG9jYXRvcnMpOwogCQkJCX0KIAotCQkJCXNyZWxzW25y ZWxzKytdID0gc3JlbDsKKwkJCQlsb2NhdG9yc1tubG9jYXRvcnMrK10gPSBybG9jYXRvcjsKIAkJ CX0KIAkJCS8qIG11c3QgZXhwbGljaXRseSBmcmVlIHRoZSBsaXN0IGVudHJ5ICovCiAJCQlwZnJl ZShwZW5kaW5nKTsKQEAgLTcwMCwxNSArNjk5LDU4IEBAIHNtZ3JEb1BlbmRpbmdEZWxldGVzKGJv b2wgaXNDb21taXQpCiAJCX0KIAl9CiAKLQlpZiAobnJlbHMgPiAwKQorCWlmIChubG9jYXRvcnMg PiAwKQogCXsKLQkJc21ncmRvdW5saW5rYWxsKHNyZWxzLCBucmVscywgZmFsc2UpOworCQlGb3Jr TnVtYmVyIGZvcmtzW01BWF9GT1JLTlVNICsgMV07CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPD0g TUFYX0ZPUktOVU07IGkrKykKKwkJCWZvcmtzW2ldID0gaTsKKworCQkvKgorCQkgKiBHZXQgcmlk IG9mIGFueSByZW1haW5pbmcgYnVmZmVycyBmb3IgdGhlIHJlbGF0aW9ucy4gIGJ1Zm1nciB3aWxs IGp1c3QKKwkJICogZHJvcCB0aGVtIHdpdGhvdXQgYm90aGVyaW5nIHRvIHdyaXRlIHRoZSBjb250 ZW50cy4KKwkJICovCisJCURyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKGxvY2F0b3JzLCBubG9jYXRv cnMpOwogCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQkJCXNtZ3JjbG9zZShz cmVsc1tpXSk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbmxvY2F0b3JzOyBpKyspCisJCQlzbWdy dW5saW5rX211bHRpKGxvY2F0b3JzW2ldLmxvY2F0b3IsIGxvY2F0b3JzW2ldLmJhY2tlbmQsIGZv cmtzLCBNQVhfRk9SS05VTSArIDEsIGZhbHNlKTsKKwkJcGZyZWUobG9jYXRvcnMpOworCX0KK30K KworLyoKKyAqIERyb3BSZWxhdGlvbkZpbGVzIC0tIGRyb3AgZmlsZXMgb2YgYWxsIGdpdmVuIHJl bGF0aW9ucworICovCit2b2lkCitEcm9wUmVsYXRpb25GaWxlcyhSZWxGaWxlTG9jYXRvciAqZGVs cmVscywgaW50IG5kZWxyZWxzLCBib29sIGlzUmVkbykKK3sKKwlSZWxGaWxlTG9jYXRvckJhY2tl bmQgKmxvY2F0b3JzOworCWludAkJCWk7CisJRm9ya051bWJlcglhbGxfZm9ya3NbTUFYX0ZPUktO VU0gKyAxXTsKIAotCQlwZnJlZShzcmVscyk7CisJbG9jYXRvcnMgPSBwYWxsb2Moc2l6ZW9mKFJl bEZpbGVMb2NhdG9yQmFja2VuZCkgKiBuZGVscmVscyk7CisJZm9yIChpID0gMDsgaSA8IG5kZWxy ZWxzOyBpKyspCisJeworCQlpZiAoaXNSZWRvKQorCQl7CisJCQlmb3IgKGludCBmb3JrID0gMDsg Zm9yayA8PSBNQVhfRk9SS05VTTsgZm9yaysrKQorCQkJCVhMb2dEcm9wUmVsYXRpb24oZGVscmVs c1tpXSwgZm9yayk7CisJCX0KKwkJbG9jYXRvcnNbaV0ubG9jYXRvciA9IGRlbHJlbHNbaV07CisJ CWxvY2F0b3JzW2ldLmJhY2tlbmQgPSBJbnZhbGlkQmFja2VuZElkOwogCX0KKworCS8qCisJICog R2V0IHJpZCBvZiBhbnkgcmVtYWluaW5nIGJ1ZmZlcnMgZm9yIHRoZSByZWxhdGlvbnMuICBidWZt Z3Igd2lsbCBqdXN0CisJICogZHJvcCB0aGVtIHdpdGhvdXQgYm90aGVyaW5nIHRvIHdyaXRlIHRo ZSBjb250ZW50cy4KKwkgKi8KKwlEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhsb2NhdG9ycywgbmRl bHJlbHMpOworCisJZm9yIChpbnQgZm9yayA9IDA7IGZvcmsgPD0gTUFYX0ZPUktOVU07IGZvcmsr KykKKwkJYWxsX2ZvcmtzW2ZvcmtdID0gZm9yazsKKworCWZvciAoaSA9IDA7IGkgPCBuZGVscmVs czsgaSsrKQorCQlzbWdydW5saW5rX211bHRpKGxvY2F0b3JzW2ldLmxvY2F0b3IsIGxvY2F0b3Jz W2ldLmJhY2tlbmQsIGFsbF9mb3JrcywgTUFYX0ZPUktOVU0gKyAxLCB0cnVlKTsKIH0KIAogLyoK QEAgLTcxOCw5ICs3NjAsOSBAQCB2b2lkCiBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBpc0NvbW1p dCwgYm9vbCBpc1BhcmFsbGVsV29ya2VyKQogewogCVBlbmRpbmdSZWxEZWxldGUgKnBlbmRpbmc7 Ci0JaW50CQkJbnJlbHMgPSAwLAotCQkJCW1heHJlbHMgPSAwOwotCVNNZ3JSZWxhdGlvbiAqc3Jl bHMgPSBOVUxMOworCWludAkJCW5sb2NhdG9ycyA9IDAsCisJCQkJbWF4bG9jYXRvcnMgPSAwOwor CVJlbEZpbGVMb2NhdG9yICpsb2NhdG9ycyA9IE5VTEw7CiAJSEFTSF9TRVFfU1RBVFVTIHNjYW47 CiAJUGVuZGluZ1JlbFN5bmMgKnBlbmRpbmdzeW5jOwogCkBAIC03NTcsOSArNzk5LDYgQEAgc21n ckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQsIGJvb2wgaXNQYXJhbGxlbFdvcmtlcikKIAkJ Rm9ya051bWJlcglmb3JrOwogCQlCbG9ja051bWJlciBuYmxvY2tzW01BWF9GT1JLTlVNICsgMV07 CiAJCUJsb2NrTnVtYmVyIHRvdGFsX2Jsb2NrcyA9IDA7Ci0JCVNNZ3JSZWxhdGlvbiBzcmVsOwot Ci0JCXNyZWwgPSBzbWdyb3BlbihwZW5kaW5nc3luYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5k SWQpOwogCiAJCS8qCiAJCSAqIFdlIGVtaXQgbmV3cGFnZSBXQUwgcmVjb3JkcyBmb3Igc21hbGxl ciByZWxhdGlvbnMuCkBAIC03NzMsOSArODEyLDEyIEBAIHNtZ3JEb1BlbmRpbmdTeW5jcyhib29s IGlzQ29tbWl0LCBib29sIGlzUGFyYWxsZWxXb3JrZXIpCiAJCXsKIAkJCWZvciAoZm9yayA9IDA7 IGZvcmsgPD0gTUFYX0ZPUktOVU07IGZvcmsrKykKIAkJCXsKLQkJCQlpZiAoc21ncmV4aXN0cyhz cmVsLCBmb3JrKSkKKwkJCQlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKKworCQkJCXNmaWxlID0gc21n cm9wZW4ocGVuZGluZ3N5bmMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrKTsKKwkJ CQlpZiAoc21ncmV4aXN0cyhzZmlsZSkpCiAJCQkJewotCQkJCQlCbG9ja051bWJlciBuID0gc21n cm5ibG9ja3Moc3JlbCwgZm9yayk7CisJCQkJCUJsb2NrTnVtYmVyIG4gPSBzbWdybmJsb2Nrcyhz ZmlsZSk7CiAKIAkJCQkJLyogd2Ugc2hvdWxkbid0IGNvbWUgaGVyZSBmb3IgdW5sb2dnZWQgcmVs YXRpb25zICovCiAJCQkJCUFzc2VydChmb3JrICE9IElOSVRfRk9SS05VTSk7CkBAIC04MDMsMTgg Kzg0NSwxOSBAQCBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBpc0NvbW1pdCwgYm9vbCBpc1BhcmFs bGVsV29ya2VyKQogCQkJdG90YWxfYmxvY2tzICogQkxDS1NaIC8gMTAyNCA+PSB3YWxfc2tpcF90 aHJlc2hvbGQpCiAJCXsKIAkJCS8qIGFsbG9jYXRlIHRoZSBpbml0aWFsIGFycmF5LCBvciBleHRl bmQgaXQsIGlmIG5lZWRlZCAqLwotCQkJaWYgKG1heHJlbHMgPT0gMCkKKwkJCWlmIChtYXhsb2Nh dG9ycyA9PSAwKQogCQkJewotCQkJCW1heHJlbHMgPSA4OwotCQkJCXNyZWxzID0gcGFsbG9jKHNp emVvZihTTWdyUmVsYXRpb24pICogbWF4cmVscyk7CisJCQkJbWF4bG9jYXRvcnMgPSA4OworCQkJ CWxvY2F0b3JzID0gcGFsbG9jKHNpemVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQpICogbWF4bG9j YXRvcnMpOwogCQkJfQotCQkJZWxzZSBpZiAobWF4cmVscyA8PSBucmVscykKKwkJCWVsc2UgaWYg KG1heGxvY2F0b3JzIDw9IG5sb2NhdG9ycykKIAkJCXsKLQkJCQltYXhyZWxzICo9IDI7Ci0JCQkJ c3JlbHMgPSByZXBhbGxvYyhzcmVscywgc2l6ZW9mKFNNZ3JSZWxhdGlvbikgKiBtYXhyZWxzKTsK KwkJCQltYXhsb2NhdG9ycyAqPSAyOworCQkJCWxvY2F0b3JzID0gcmVwYWxsb2MobG9jYXRvcnMs IHNpemVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQpICogbWF4bG9jYXRvcnMpOwogCQkJfQogCi0J CQlzcmVsc1tucmVscysrXSA9IHNyZWw7CisJCQlsb2NhdG9yc1tubG9jYXRvcnNdID0gcGVuZGlu Z3N5bmMtPnJsb2NhdG9yOworCQkJbmxvY2F0b3JzKys7CiAJCX0KIAkJZWxzZQogCQl7CkBAIC04 MzMsNyArODc2LDcgQEAgc21nckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQsIGJvb2wgaXNQ YXJhbGxlbFdvcmtlcikKIAkJCQkgKiBwYWdlIGluY2x1ZGluZyBhbnkgdW51c2VkIHNwYWNlLiAg UmVhZEJ1ZmZlckV4dGVuZGVkKCkKIAkJCQkgKiBjb3VudHMgc29tZSBwZ3N0YXQgZXZlbnRzOyB1 bmZvcnR1bmF0ZWx5LCB3ZSBkaXNjYXJkIHRoZW0uCiAJCQkJICovCi0JCQkJcmVsID0gQ3JlYXRl RmFrZVJlbGNhY2hlRW50cnkoc3JlbC0+c21ncl9ybG9jYXRvci5sb2NhdG9yKTsKKwkJCQlyZWwg PSBDcmVhdGVGYWtlUmVsY2FjaGVFbnRyeShwZW5kaW5nc3luYy0+cmxvY2F0b3IpOwogCQkJCWxv Z19uZXdwYWdlX3JhbmdlKHJlbCwgZm9yaywgMCwgbiwgZmFsc2UpOwogCQkJCUZyZWVGYWtlUmVs Y2FjaGVFbnRyeShyZWwpOwogCQkJfQpAQCAtODQyLDExICs4ODUsMjAgQEAgc21nckRvUGVuZGlu Z1N5bmNzKGJvb2wgaXNDb21taXQsIGJvb2wgaXNQYXJhbGxlbFdvcmtlcikKIAogCXBlbmRpbmdT eW5jSGFzaCA9IE5VTEw7CiAKLQlpZiAobnJlbHMgPiAwKQorCUZsdXNoUmVsYXRpb25zQWxsQnVm ZmVycyhsb2NhdG9ycywgbmxvY2F0b3JzKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbmxvY2F0 b3JzOyBpKyspCiAJewotCQlzbWdyZG9zeW5jYWxsKHNyZWxzLCBucmVscyk7Ci0JCXBmcmVlKHNy ZWxzKTsKKwkJZm9yIChpbnQgZm9yayA9IDA7IGZvcmsgPD0gTUFYX0ZPUktOVU07IGZvcmsrKykK KwkJeworCQkJU01nckZpbGVIYW5kbGUgc2ZpbGUgPSBzbWdyb3Blbihsb2NhdG9yc1tpXSwgSW52 YWxpZEJhY2tlbmRJZCwgZm9yayk7CisKKwkJCWlmIChzbWdyZXhpc3RzKHNmaWxlKSkKKwkJCQlz bWdyaW1tZWRzeW5jKHNmaWxlKTsKKwkJfQogCX0KKwlpZiAobG9jYXRvcnMgIT0gTlVMTCkKKwkJ cGZyZWUobG9jYXRvcnMpOwogfQogCiAvKgpAQCAtOTY2LDIyICsxMDE4LDIyIEBAIHNtZ3JfcmVk byhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAlpZiAoaW5mbyA9PSBYTE9HX1NNR1JfQ1JFQVRF KQogCXsKIAkJeGxfc21ncl9jcmVhdGUgKnhscmVjID0gKHhsX3NtZ3JfY3JlYXRlICopIFhMb2dS ZWNHZXREYXRhKHJlY29yZCk7Ci0JCVNNZ3JSZWxhdGlvbiByZWxuOworCQlTTWdyRmlsZUhhbmRs ZSBzZmlsZTsKIAotCQlyZWxuID0gc21ncm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFj a2VuZElkKTsKLQkJc21ncmNyZWF0ZShyZWxuLCB4bHJlYy0+Zm9ya051bSwgdHJ1ZSk7CisJCXNm aWxlID0gc21ncm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCB4bHJlYy0+ Zm9ya051bSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGUsIHRydWUpOwogCX0KIAllbHNlIGlmIChpbmZv ID09IFhMT0dfU01HUl9UUlVOQ0FURSkKIAl7CiAJCXhsX3NtZ3JfdHJ1bmNhdGUgKnhscmVjID0g KHhsX3NtZ3JfdHJ1bmNhdGUgKikgWExvZ1JlY0dldERhdGEocmVjb3JkKTsKLQkJU01nclJlbGF0 aW9uIHJlbG47CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCQlSZWxhdGlvbglyZWw7CiAJCUZv cmtOdW1iZXIJZm9ya3NbTUFYX0ZPUktOVU1dOwogCQlCbG9ja051bWJlciBibG9ja3NbTUFYX0ZP UktOVU1dOwogCQlpbnQJCQluZm9ya3MgPSAwOwogCQlib29sCQluZWVkX2ZzbV92YWN1dW0gPSBm YWxzZTsKIAotCQlyZWxuID0gc21ncm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2Vu ZElkKTsKKwkJc2ZpbGUgPSBzbWdyb3Blbih4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5k SWQsIE1BSU5fRk9SS05VTSk7CiAKIAkJLyoKIAkJICogRm9yY2libHkgY3JlYXRlIHJlbGF0aW9u IGlmIGl0IGRvZXNuJ3QgZXhpc3QgKHdoaWNoIHN1Z2dlc3RzIHRoYXQKQEAgLTk4OSw3ICsxMDQx LDcgQEAgc21ncl9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkgKiBYTG9nUmVhZEJ1 ZmZlckZvclJlZG8sIHdlIHByZWZlciB0byByZWNyZWF0ZSB0aGUgcmVsIGFuZCByZXBsYXkgdGhl CiAJCSAqIGxvZyBhcyBiZXN0IHdlIGNhbiB1bnRpbCB0aGUgZHJvcCBpcyBzZWVuLgogCQkgKi8K LQkJc21ncmNyZWF0ZShyZWxuLCBNQUlOX0ZPUktOVU0sIHRydWUpOworCQlzbWdyY3JlYXRlKHNm aWxlLCB0cnVlKTsKIAogCQkvKgogCQkgKiBCZWZvcmUgd2UgcGVyZm9ybSB0aGUgdHJ1bmNhdGlv biwgdXBkYXRlIG1pbmltdW0gcmVjb3ZlcnkgcG9pbnQgdG8KQEAgLTEwMjIsOCArMTA3NCwxMCBA QCBzbWdyX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCS8qIFByZXBhcmUgZm9yIHRy dW5jYXRpb24gb2YgRlNNIGFuZCBWTSB0b28gKi8KIAkJcmVsID0gQ3JlYXRlRmFrZVJlbGNhY2hl RW50cnkoeGxyZWMtPnJsb2NhdG9yKTsKIAorCQlEcm9wUmVsYXRpb25CdWZmZXJzKHhscmVjLT5y bG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya3MsIG5mb3JrcywgYmxvY2tzKTsKKwogCQlp ZiAoKHhscmVjLT5mbGFncyAmIFNNR1JfVFJVTkNBVEVfRlNNKSAhPSAwICYmCi0JCQlzbWdyZXhp c3RzKHJlbG4sIEZTTV9GT1JLTlVNKSkKKwkJCXNtZ3JleGlzdHMoc21ncm9wZW4oeGxyZWMtPnJs b2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBGU01fRk9SS05VTSkpKQogCQl7CiAJCQlibG9ja3Nb bmZvcmtzXSA9IEZyZWVTcGFjZU1hcFByZXBhcmVUcnVuY2F0ZVJlbChyZWwsIHhscmVjLT5ibGtu byk7CiAJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsb2Nrc1tuZm9ya3NdKSkKQEAgLTEwMzQs NyArMTA4OCw3IEBAIHNtZ3JfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJCX0KIAkJ fQogCQlpZiAoKHhscmVjLT5mbGFncyAmIFNNR1JfVFJVTkNBVEVfVk0pICE9IDAgJiYKLQkJCXNt Z3JleGlzdHMocmVsbiwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSkKKwkJCXNtZ3JleGlzdHMoc21n cm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBWSVNJQklMSVRZTUFQX0ZP UktOVU0pKSkKIAkJewogCQkJYmxvY2tzW25mb3Jrc10gPSB2aXNpYmlsaXR5bWFwX3ByZXBhcmVf dHJ1bmNhdGUocmVsLCB4bHJlYy0+Ymxrbm8pOwogCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChi bG9ja3NbbmZvcmtzXSkpCkBAIC0xMDQ2LDcgKzExMDAsMTAgQEAgc21ncl9yZWRvKFhMb2dSZWFk ZXJTdGF0ZSAqcmVjb3JkKQogCiAJCS8qIERvIHRoZSByZWFsIHdvcmsgdG8gdHJ1bmNhdGUgcmVs YXRpb24gZm9ya3MgKi8KIAkJaWYgKG5mb3JrcyA+IDApCi0JCQlzbWdydHJ1bmNhdGUocmVsbiwg Zm9ya3MsIG5mb3JrcywgYmxvY2tzKTsKKwkJeworCQkJRHJvcFJlbGF0aW9uQnVmZmVycyh4bHJl Yy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtzLCBuZm9ya3MsIGJsb2Nrcyk7CisJ CQlzbWdydHJ1bmNhdGVfbXVsdGkoeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBm b3JrcywgbmZvcmtzLCBibG9ja3MpOworCQl9CiAKIAkJLyoKIAkJICogVXBkYXRlIHVwcGVyLWxl dmVsIEZTTSBwYWdlcyB0byBhY2NvdW50IGZvciB0aGUgdHJ1bmNhdGlvbi4gVGhpcyBpcwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2FzeW5jLmMKaW5kZXggZWY5MDljZjRlMDguLjUyM2EzNzg3NTJjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fz eW5jLmMKQEAgLTE0MSw2ICsxNDEsNyBAQAogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5j bHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRl ICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCkBAIC0xNjMsNyArMTY0 LDcgQEAKICAqIHRoYW4gdGhhdCwgc28gY2hhbmdlcyBpbiB0aGF0IGRhdGEgc3RydWN0dXJlIHdv bid0IGFmZmVjdCB1c2VyLXZpc2libGUKICAqIHJlc3RyaWN0aW9ucy4KICAqLwotI2RlZmluZSBO T1RJRllfUEFZTE9BRF9NQVhfTEVOR1RICShCTENLU1ogLSBOQU1FREFUQUxFTiAtIDEyOCkKKyNk ZWZpbmUgTk9USUZZX1BBWUxPQURfTUFYX0xFTkdUSAkoQkxDS1NaIC0gTkFNRURBVEFMRU4gLSBT aXplT2ZQYWdlSGVhZGVyRGF0YSAtIDEyOCkKIAogLyoKICAqIFN0cnVjdCByZXByZXNlbnRpbmcg YW4gZW50cnkgaW4gdGhlIGdsb2JhbCBub3RpZnkgcXVldWUKQEAgLTIxMyw3ICsyMTQsNyBAQCB0 eXBlZGVmIHN0cnVjdCBRdWV1ZVBvc2l0aW9uCiAJKCh4KS5wYWdlID09ICh5KS5wYWdlICYmICh4 KS5vZmZzZXQgPT0gKHkpLm9mZnNldCkKIAogI2RlZmluZSBRVUVVRV9QT1NfSVNfWkVSTyh4KSBc Ci0JKCh4KS5wYWdlID09IDAgJiYgKHgpLm9mZnNldCA9PSAwKQorCSgoeCkucGFnZSA9PSAwICYm ICh4KS5vZmZzZXQgPT0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEpKQogCiAvKiBjaG9v c2UgbG9naWNhbGx5IHNtYWxsZXIgUXVldWVQb3NpdGlvbiAqLwogI2RlZmluZSBRVUVVRV9QT1Nf TUlOKHgseSkgXApAQCAtMzA1LDEyICszMDYsNiBAQCBzdGF0aWMgQXN5bmNRdWV1ZUNvbnRyb2wg KmFzeW5jUXVldWVDb250cm9sOwogI2RlZmluZSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpCQkoYXN5 bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ubmV4dExpc3RlbmVyKQogI2RlZmluZSBRVUVVRV9C QUNLRU5EX1BPUyhpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLnBvcykKIAotLyoK LSAqIFRoZSBTTFJVIGJ1ZmZlciBhcmVhIHRocm91Z2ggd2hpY2ggd2UgYWNjZXNzIHRoZSBub3Rp ZmljYXRpb24gcXVldWUKLSAqLwotc3RhdGljIFNscnVDdGxEYXRhIE5vdGlmeUN0bERhdGE7Ci0K LSNkZWZpbmUgTm90aWZ5Q3RsCQkJCQkoJk5vdGlmeUN0bERhdGEpCiAjZGVmaW5lIFFVRVVFX1BB R0VTSVpFCQkJCUJMQ0tTWgogI2RlZmluZSBRVUVVRV9GVUxMX1dBUk5fSU5URVJWQUwJNTAwMAkv KiB3YXJuIGF0IG1vc3Qgb25jZSBldmVyeSA1cyAqLwogCkBAIC01MjEsOCArNTE2LDYgQEAgQXN5 bmNTaG1lbVNpemUodm9pZCkKIAlzaXplID0gbXVsX3NpemUoTWF4QmFja2VuZHMgKyAxLCBzaXpl b2YoUXVldWVCYWNrZW5kU3RhdHVzKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG9mZnNldG9m KEFzeW5jUXVldWVDb250cm9sLCBiYWNrZW5kKSk7CiAKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwg U2ltcGxlTHJ1U2htZW1TaXplKE5VTV9OT1RJRllfQlVGRkVSUywgMCkpOwotCiAJcmV0dXJuIHNp emU7CiB9CiAKQEAgLTU1MCw4ICs1NDMsOCBAQCBBc3luY1NobWVtSW5pdCh2b2lkKQogCWlmICgh Zm91bmQpCiAJewogCQkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIHNvIGluaXRpYWxpemUgaXQgKi8K LQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9IRUFELCAwLCAwKTsKLQkJU0VUX1FVRVVFX1BPUyhRVUVV RV9UQUlMLCAwLCAwKTsKKwkJU0VUX1FVRVVFX1BPUyhRVUVVRV9IRUFELCAwLCBNQVhBTElHTihT aXplT2ZQYWdlSGVhZGVyRGF0YSkpOworCQlTRVRfUVVFVUVfUE9TKFFVRVVFX1RBSUwsIDAsIE1B WEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRhKSk7CiAJCVFVRVVFX1NUT1BfUEFHRSA9IDA7CiAJ CVFVRVVFX0ZJUlNUX0xJU1RFTkVSID0gSW52YWxpZEJhY2tlbmRJZDsKIAkJYXN5bmNRdWV1ZUNv bnRyb2wtPmxhc3RRdWV1ZUZpbGxXYXJuID0gMDsKQEAgLTU2MSwyNCArNTU0LDE3IEBAIEFzeW5j U2htZW1Jbml0KHZvaWQpCiAJCQlRVUVVRV9CQUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7CiAJ CQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJCVFVRVVFX05FWFRfTElT VEVORVIoaSkgPSBJbnZhbGlkQmFja2VuZElkOwotCQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9CQUNL RU5EX1BPUyhpKSwgMCwgMCk7CisJCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfUE9TKGkp LCAwLCBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkpOwogCQl9CiAJfQogCi0JLyoKLQkg KiBTZXQgdXAgU0xSVSBtYW5hZ2VtZW50IG9mIHRoZSBwZ19ub3RpZnkgZGF0YS4KLQkgKi8KLQlO b3RpZnlDdGwtPlBhZ2VQcmVjZWRlcyA9IGFzeW5jUXVldWVQYWdlUHJlY2VkZXM7Ci0JU2ltcGxl THJ1SW5pdChOb3RpZnlDdGwsICJOb3RpZnkiLCBOVU1fTk9USUZZX0JVRkZFUlMsIDAsCi0JCQkJ ICBOb3RpZnlTTFJVTG9jaywgInBnX25vdGlmeSIsIExXVFJBTkNIRV9OT1RJRllfQlVGRkVSLAot CQkJCSAgU1lOQ19IQU5ETEVSX05PTkUpOwotCiAJaWYgKCFmb3VuZCkKIAl7CiAJCS8qCiAJCSAq IER1cmluZyBzdGFydCBvciByZWJvb3QsIGNsZWFuIG91dCB0aGUgcGdfbm90aWZ5IGRpcmVjdG9y eS4KIAkJICovCi0JCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShOb3RpZnlDdGwsIFNscnVTY2Fu RGlyQ2JEZWxldGVBbGwsIE5VTEwpOworCQkodm9pZCkgU2xydVNjYW5EaXJlY3RvcnkoU0xSVV9O T1RJRllfSUQsIGFzeW5jUXVldWVQYWdlUHJlY2VkZXMsCisJCQkJCQkJCSBTbHJ1U2NhbkRpckNi RGVsZXRlQWxsLCBOVUxMKTsKIAl9CiB9CiAKQEAgLTEzNDUsMTkgKzEzMzEsMTkgQEAgYXN5bmNR dWV1ZUFkdmFuY2Uodm9sYXRpbGUgUXVldWVQb3NpdGlvbiAqcG9zaXRpb24sIGludCBlbnRyeUxl bmd0aCkKIAkgKiB3cml0dGVuIG9yIHJlYWQuCiAJICovCiAJb2Zmc2V0ICs9IGVudHJ5TGVuZ3Ro OwotCUFzc2VydChvZmZzZXQgPD0gUVVFVUVfUEFHRVNJWkUpOworCUFzc2VydChvZmZzZXQgPD0g UVVFVUVfUEFHRVNJWkUgLSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkpOwogCiAJLyoK IAkgKiBJbiBhIHNlY29uZCBzdGVwIGNoZWNrIGlmIGFub3RoZXIgZW50cnkgY2FuIHBvc3NpYmx5 IGJlIHdyaXR0ZW4gdG8gdGhlCiAJICogcGFnZS4gSWYgc28sIHN0YXkgaGVyZSwgd2UgaGF2ZSBy ZWFjaGVkIHRoZSBuZXh0IHBvc2l0aW9uLiBJZiBub3QsIHRoZW4KIAkgKiB3ZSBuZWVkIHRvIG1v dmUgb24gdG8gdGhlIG5leHQgcGFnZS4KIAkgKi8KLQlpZiAob2Zmc2V0ICsgUVVFVUVBTElHTihB c3luY1F1ZXVlRW50cnlFbXB0eVNpemUpID4gUVVFVUVfUEFHRVNJWkUpCisJaWYgKG9mZnNldCAr IFFVRVVFQUxJR04oQXN5bmNRdWV1ZUVudHJ5RW1wdHlTaXplKSA+IFFVRVVFX1BBR0VTSVpFIC0g TUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEpKQogCXsKIAkJcGFnZW5vKys7CiAJCWlmIChw YWdlbm8gPiBRVUVVRV9NQVhfUEFHRSkKIAkJCXBhZ2VubyA9IDA7CQkJLyogd3JhcCBhcm91bmQg Ki8KLQkJb2Zmc2V0ID0gMDsKKwkJb2Zmc2V0ID0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRh dGEpOyAvKiBzdGFydCBhdCBTaXplT2ZQYWdlSGVhZGVyRGF0YSAqLwogCQlwYWdlSnVtcCA9IHRy dWU7CiAJfQogCkBAIC0xNDExLDEwICsxMzk3LDcgQEAgYXN5bmNRdWV1ZUFkZEVudHJpZXMoTGlz dENlbGwgKm5leHROb3RpZnkpCiAJUXVldWVQb3NpdGlvbiBxdWV1ZV9oZWFkOwogCWludAkJCXBh Z2VubzsKIAlpbnQJCQlvZmZzZXQ7Ci0JaW50CQkJc2xvdG5vOwotCi0JLyogV2UgaG9sZCBib3Ro IE5vdGlmeVF1ZXVlTG9jayBhbmQgTm90aWZ5U0xSVUxvY2sgZHVyaW5nIHRoaXMgb3BlcmF0aW9u ICovCi0JTFdMb2NrQWNxdWlyZShOb3RpZnlTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlCdWZm ZXIJCWJ1ZmZlcjsKIAogCS8qCiAJICogV2Ugd29yayB3aXRoIGEgbG9jYWwgY29weSBvZiBRVUVV RV9IRUFELCB3aGljaCB3ZSB3cml0ZSBiYWNrIHRvIHNoYXJlZApAQCAtMTQzOSwxMyArMTQyMiwy MCBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAkgKi8KIAlw YWdlbm8gPSBRVUVVRV9QT1NfUEFHRShxdWV1ZV9oZWFkKTsKIAlpZiAoUVVFVUVfUE9TX0lTX1pF Uk8ocXVldWVfaGVhZCkpCi0JCXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKE5vdGlmeUN0bCwg cGFnZW5vKTsKKwl7CisJCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfTk9USUZZX0lELCBw YWdlbm8pOworCQlQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChCdWZmZXJHZXRQYWdlKGJ1ZmZlciks IHBhZ2VubywgSW52YWxpZFhMb2dSZWNQdHIsIEJMQ0tTWiwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZF UlNJT04pOworCisJfQogCWVsc2UKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTm90aWZ5 Q3RsLCBwYWdlbm8sIHRydWUsCi0JCQkJCQkJCSAgIEludmFsaWRUcmFuc2FjdGlvbklkKTsKKwl7 CisJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTk9USUZZX0lELCBwYWdlbm8sIFJCTV9O T1JNQUwpOworCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwl9 CiAKKwkKIAkvKiBOb3RlIHdlIG1hcmsgdGhlIHBhZ2UgZGlydHkgYmVmb3JlIHdyaXRpbmcgaW4g aXQgKi8KLQlOb3RpZnlDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwlN YXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAogCXdoaWxlIChuZXh0Tm90aWZ5ICE9IE5VTEwpCiAJ ewpAQCAtMTQ1Nyw3ICsxNDQ3LDcgQEAgYXN5bmNRdWV1ZUFkZEVudHJpZXMoTGlzdENlbGwgKm5l eHROb3RpZnkpCiAJCW9mZnNldCA9IFFVRVVFX1BPU19PRkZTRVQocXVldWVfaGVhZCk7CiAKIAkJ LyogQ2hlY2sgd2hldGhlciB0aGUgZW50cnkgcmVhbGx5IGZpdHMgb24gdGhlIGN1cnJlbnQgcGFn ZSAqLwotCQlpZiAob2Zmc2V0ICsgcWUubGVuZ3RoIDw9IFFVRVVFX1BBR0VTSVpFKQorCQlpZiAo b2Zmc2V0ICsgcWUubGVuZ3RoIDw9IFFVRVVFX1BBR0VTSVpFIC0gTUFYQUxJR04oU2l6ZU9mUGFn ZUhlYWRlckRhdGEpKQogCQl7CiAJCQkvKiBPSywgc28gYWR2YW5jZSBuZXh0Tm90aWZ5IHBhc3Qg dGhpcyBpdGVtICovCiAJCQluZXh0Tm90aWZ5ID0gbG5leHQocGVuZGluZ05vdGlmaWVzLT5ldmVu dHMsIG5leHROb3RpZnkpOwpAQCAtMTQ2OSwxNyArMTQ1OSwxOCBAQCBhc3luY1F1ZXVlQWRkRW50 cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAkJCSAqIG9ubHkgY2hlY2sgZGJvaWQgYW5kIHNp bmNlIGl0IHdvbid0IG1hdGNoIGFueSByZWFkZXIncyBkYXRhYmFzZQogCQkJICogT0lELCB0aGV5 IHdpbGwgaWdub3JlIHRoaXMgZW50cnkgYW5kIG1vdmUgb24uCiAJCQkgKi8KLQkJCXFlLmxlbmd0 aCA9IFFVRVVFX1BBR0VTSVpFIC0gb2Zmc2V0OworCQkJcWUubGVuZ3RoID0gUVVFVUVfUEFHRVNJ WkUgLSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkgLSBvZmZzZXQ7CiAJCQlxZS5kYm9p ZCA9IEludmFsaWRPaWQ7CiAJCQlxZS5kYXRhWzBdID0gJ1wwJzsJLyogZW1wdHkgY2hhbm5lbCAq LwogCQkJcWUuZGF0YVsxXSA9ICdcMCc7CS8qIGVtcHR5IHBheWxvYWQgKi8KIAkJfQogCiAJCS8q IE5vdyBjb3B5IHFlIGludG8gdGhlIHNoYXJlZCBidWZmZXIgcGFnZSAqLwotCQltZW1jcHkoTm90 aWZ5Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBvZmZzZXQsCisJCW1lbWNweShQ YWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIG9mZnNldCwKIAkJCSAgICZx ZSwKIAkJCSAgIHFlLmxlbmd0aCk7CiAKKwogCQkvKiBBZHZhbmNlIHF1ZXVlX2hlYWQgYXBwcm9w cmlhdGVseSwgYW5kIGRldGVjdCBpZiBwYWdlIGlzIGZ1bGwgKi8KIAkJaWYgKGFzeW5jUXVldWVB ZHZhbmNlKCYocXVldWVfaGVhZCksIHFlLmxlbmd0aCkpCiAJCXsKQEAgLTE0OTEsNyArMTQ4Miwx MCBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAkJCSAqIGFz eW5jUXVldWVJc0Z1bGwoKSBlbnN1cmVkIHRoYXQgdGhlcmUgaXMgcm9vbSB0byBjcmVhdGUgdGhp cwogCQkJICogcGFnZSB3aXRob3V0IG92ZXJydW5uaW5nIHRoZSBxdWV1ZS4KIAkJCSAqLwotCQkJ c2xvdG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoTm90aWZ5Q3RsLCBRVUVVRV9QT1NfUEFHRShxdWV1 ZV9oZWFkKSk7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCQlidWZmZXIgPSBa ZXJvU2xydUJ1ZmZlcihTTFJVX05PVElGWV9JRCwKKwkJCQkJCQkJCVFVRVVFX1BPU19QQUdFKHF1 ZXVlX2hlYWQpKTsKKwkJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCiAJCQkvKgogCQkJICog SWYgdGhlIG5ldyBwYWdlIGFkZHJlc3MgaXMgYSBtdWx0aXBsZSBvZiBRVUVVRV9DTEVBTlVQX0RF TEFZLApAQCAtMTUwNSwxMiArMTQ5OSwxMSBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2Vs bCAqbmV4dE5vdGlmeSkKIAkJCWJyZWFrOwogCQl9CiAJfQorCVVubG9ja1JlbGVhc2VCdWZmZXIo YnVmZmVyKTsKIAogCS8qIFN1Y2Nlc3MsIHNvIHVwZGF0ZSB0aGUgZ2xvYmFsIFFVRVVFX0hFQUQg Ki8KIAlRVUVVRV9IRUFEID0gcXVldWVfaGVhZDsKIAotCUxXTG9ja1JlbGVhc2UoTm90aWZ5U0xS VUxvY2spOwotCiAJcmV0dXJuIG5leHROb3RpZnk7CiB9CiAKQEAgLTE5ODMsMTcgKzE5NzYsMTYg QEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJCXsKIAkJCWludAkJCWN1 cnBhZ2UgPSBRVUVVRV9QT1NfUEFHRShwb3MpOwogCQkJaW50CQkJY3Vyb2Zmc2V0ID0gUVVFVUVf UE9TX09GRlNFVChwb3MpOwotCQkJaW50CQkJc2xvdG5vOwogCQkJaW50CQkJY29weXNpemU7CisJ CQlCdWZmZXIJCWJ1ZmZlcjsKIAogCQkJLyoKLQkJCSAqIFdlIGNvcHkgdGhlIGRhdGEgZnJvbSBT TFJVIGludG8gYSBsb2NhbCBidWZmZXIsIHNvIGFzIHRvIGF2b2lkCi0JCQkgKiBob2xkaW5nIHRo ZSBOb3RpZnlTTFJVTG9jayB3aGlsZSB3ZSBhcmUgZXhhbWluaW5nIHRoZSBlbnRyaWVzCi0JCQkg KiBhbmQgcG9zc2libHkgdHJhbnNtaXR0aW5nIHRoZW0gdG8gb3VyIGZyb250ZW5kLiAgQ29weSBv bmx5IHRoZQotCQkJICogcGFydCBvZiB0aGUgcGFnZSB3ZSB3aWxsIGFjdHVhbGx5IGluc3BlY3Qu CisJCQkgKiBXZSBjb3B5IHRoZSBkYXRhIGludG8gYSBsb2NhbCBidWZmZXIsIHNvIGFzIHRvIGF2 b2lkIGhvbGRpbmcgYQorCQkJICogYnVmZmVyIHBpbiB3aGlsZSB3ZSBhcmUgZXhhbWluaW5nIHRo ZSBlbnRyaWVzIGFuZCBwb3NzaWJseQorCQkJICogdHJhbnNtaXR0aW5nIHRoZW0gdG8gb3VyIGZy b250ZW5kLiAgQ29weSBvbmx5IHRoZSBwYXJ0IG9mIHRoZQorCQkJICogcGFnZSB3ZSB3aWxsIGFj dHVhbGx5IGluc3BlY3QuCiAJCQkgKi8KLQkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1Jl YWRPbmx5KE5vdGlmeUN0bCwgY3VycGFnZSwKLQkJCQkJCQkJCQkJCUludmFsaWRUcmFuc2FjdGlv bklkKTsKKwkJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTk9USUZZX0lELCBjdXJwYWdl LCBSQk1fTk9STUFMKTsKIAkJCWlmIChjdXJwYWdlID09IFFVRVVFX1BPU19QQUdFKGhlYWQpKQog CQkJewogCQkJCS8qIHdlIG9ubHkgd2FudCB0byByZWFkIGFzIGZhciBhcyBoZWFkICovCkBAIC0y MDA0LDEzICsxOTk2LDEyIEBAIGFzeW5jUXVldWVSZWFkQWxsTm90aWZpY2F0aW9ucyh2b2lkKQog CQkJZWxzZQogCQkJewogCQkJCS8qIGZldGNoIGFsbCB0aGUgcmVzdCBvZiB0aGUgcGFnZSAqLwot CQkJCWNvcHlzaXplID0gUVVFVUVfUEFHRVNJWkUgLSBjdXJvZmZzZXQ7CisJCQkJY29weXNpemUg PSBRVUVVRV9QQUdFU0laRSAtIE1BWEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRhKSAtIGN1cm9m ZnNldDsKIAkJCX0KLQkJCW1lbWNweShwYWdlX2J1ZmZlci5idWYgKyBjdXJvZmZzZXQsCi0JCQkJ ICAgTm90aWZ5Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBjdXJvZmZzZXQsCisJ CQltZW1jcHkoUGFnZUdldENvbnRlbnRzKHBhZ2VfYnVmZmVyLmJ1ZikgKyAgY3Vyb2Zmc2V0LAor CQkJCSAgIFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgY3Vyb2Zmc2V0 LAogCQkJCSAgIGNvcHlzaXplKTsKLQkJCS8qIFJlbGVhc2UgbG9jayB0aGF0IHdlIGdvdCBmcm9t IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KCkgKi8KLQkJCUxXTG9ja1JlbGVhc2UoTm90aWZ5 U0xSVUxvY2spOworCQkJUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJCQkvKgogCQkJICogUHJv Y2VzcyBtZXNzYWdlcyB1cCB0byB0aGUgc3RvcCBwb3NpdGlvbiwgZW5kIG9mIHBhZ2UsIG9yIGFu CkBAIC0yMDc4LDcgKzIwNjksNyBAQCBhc3luY1F1ZXVlUHJvY2Vzc1BhZ2VFbnRyaWVzKHZvbGF0 aWxlIFF1ZXVlUG9zaXRpb24gKmN1cnJlbnQsCiAJCWlmIChRVUVVRV9QT1NfRVFVQUwodGhpc2Vu dHJ5LCBzdG9wKSkKIAkJCWJyZWFrOwogCi0JCXFlID0gKEFzeW5jUXVldWVFbnRyeSAqKSAocGFn ZV9idWZmZXIgKyBRVUVVRV9QT1NfT0ZGU0VUKHRoaXNlbnRyeSkpOworCQlxZSA9IChBc3luY1F1 ZXVlRW50cnkgKikgKFBhZ2VHZXRDb250ZW50cyhwYWdlX2J1ZmZlcikgKyBRVUVVRV9QT1NfT0ZG U0VUKHRoaXNlbnRyeSkpOwogCiAJCS8qCiAJCSAqIEFkdmFuY2UgKmN1cnJlbnQgb3ZlciB0aGlz IG1lc3NhZ2UsIHBvc3NpYmx5IHRvIHRoZSBuZXh0IHBhZ2UuIEFzCkBAIC0yMjA3LDcgKzIxOTgs NyBAQCBhc3luY1F1ZXVlQWR2YW5jZVRhaWwodm9pZCkKIAkJICogU2ltcGxlTHJ1VHJ1bmNhdGUo KSB3aWxsIGFzayBmb3IgTm90aWZ5U0xSVUxvY2sgYnV0IHdpbGwgYWxzbwogCQkgKiByZWxlYXNl IHRoZSBsb2NrIGFnYWluLgogCQkgKi8KLQkJU2ltcGxlTHJ1VHJ1bmNhdGUoTm90aWZ5Q3RsLCBu ZXd0YWlscGFnZSk7CisJCVNpbXBsZUxydVRydW5jYXRlKFNMUlVfTk9USUZZX0lELCBhc3luY1F1 ZXVlUGFnZVByZWNlZGVzLCBuZXd0YWlscGFnZSk7CiAKIAkJLyoKIAkJICogVXBkYXRlIFFVRVVF X1NUT1BfUEFHRS4gIFRoaXMgY2hhbmdlcyBhc3luY1F1ZXVlSXNGdWxsKCkncyB2ZXJkaWN0CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMKaW5kZXggNTE4ZmZjYTA5YTAuLjBiZmUxNDhlMDM2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZGJjb21tYW5kcy5jCkBAIC0yNTksNyArMjU5LDcgQEAgU2NhblNvdXJj ZURhdGFiYXNlUGdDbGFzcyhPaWQgdGJpZCwgT2lkIGRiaWQsIGNoYXIgKnNyY3BhdGgpCiAJTGlz dAkgICAqcmxvY2F0b3JsaXN0ID0gTklMOwogCUxvY2tSZWxJZAlyZWxpZDsKIAlTbmFwc2hvdAlz bmFwc2hvdDsKLQlTTWdyUmVsYXRpb24Jc21ncjsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAlC dWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3k7CiAKIAkvKiBHZXQgcGdfY2xhc3MgcmVsZmls ZW51bWJlci4gKi8KQEAgLTI3Niw5ICsyNzYsOSBAQCBTY2FuU291cmNlRGF0YWJhc2VQZ0NsYXNz KE9pZCB0YmlkLCBPaWQgZGJpZCwgY2hhciAqc3JjcGF0aCkKIAlybG9jYXRvci5kYk9pZCA9IGRi aWQ7CiAJcmxvY2F0b3IucmVsTnVtYmVyID0gcmVsZmlsZW51bWJlcjsKIAotCXNtZ3IgPSBzbWdy b3BlbihybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7Ci0JbmJsb2NrcyA9IHNtZ3JuYmxvY2tz KHNtZ3IsIE1BSU5fRk9SS05VTSk7Ci0Jc21ncmNsb3NlKHNtZ3IpOworCXNmaWxlID0gc21ncm9w ZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIE1BSU5fRk9SS05VTSk7CisJbmJsb2NrcyA9 IHNtZ3JuYmxvY2tzKHNmaWxlKTsKKwlzbWdyY2xvc2Uoc2ZpbGUpOwogCiAJLyogVXNlIGEgYnVm ZmVyIGFjY2VzcyBzdHJhdGVneSBzaW5jZSB0aGlzIGlzIGEgYnVsayByZWFkIG9wZXJhdGlvbi4g Ki8KIAlic3RyYXRlZ3kgPSBHZXRBY2Nlc3NTdHJhdGVneShCQVNfQlVMS1JFQUQpOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3NlcXVlbmNlLmMKaW5kZXggYmZlMjc5Y2RkZjEuLjQ2MGUyYmIxODIyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3NlcXVlbmNlLmMKQEAgLTM1MywxNCArMzUzLDE0IEBAIGZpbGxfc2VxX3dpdGhfZGF0YShS ZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXBsZSkKIAogCWlmIChyZWwtPnJkX3JlbC0+cmVscGVy c2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQpCiAJewotCQlTTWdyUmVsYXRpb24g c3JlbDsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKLQkJc3JlbCA9IHNtZ3JvcGVuKHJlbC0+ cmRfbG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7Ci0JCXNtZ3JjcmVhdGUoc3JlbCwgSU5JVF9G T1JLTlVNLCBmYWxzZSk7CisJCXNmaWxlID0gc21ncm9wZW4ocmVsLT5yZF9sb2NhdG9yLCBJbnZh bGlkQmFja2VuZElkLCBJTklUX0ZPUktOVU0pOworCQlzbWdyY3JlYXRlKHNmaWxlLCBmYWxzZSk7 CiAJCWxvZ19zbWdyY3JlYXRlKCZyZWwtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05VTSk7CiAJCWZp bGxfc2VxX2Zvcmtfd2l0aF9kYXRhKHJlbCwgdHVwbGUsIElOSVRfRk9SS05VTSk7CiAJCUZsdXNo UmVsYXRpb25CdWZmZXJzKHJlbCk7Ci0JCXNtZ3JjbG9zZShzcmVsKTsKKwkJc21ncmNsb3NlKHNm aWxlKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggMWRiM2JkOWUyZTgu LjdkNTNmZWE2YTgxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMTQ2MzQsOSArMTQ2 MzQsNyBAQCBBbHRlclRhYmxlTW92ZUFsbChBbHRlclRhYmxlTW92ZUFsbFN0bXQgKnN0bXQpCiBz dGF0aWMgdm9pZAogaW5kZXhfY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgUmVsRmlsZUxvY2F0b3Ig bmV3cmxvY2F0b3IpCiB7Ci0JU01nclJlbGF0aW9uIGRzdHJlbDsKLQotCWRzdHJlbCA9IHNtZ3Jv cGVuKG5ld3Jsb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQpOworCVNNZ3JGaWxlSGFuZGxlIGRzdG1h aW47CiAKIAkvKgogCSAqIFNpbmNlIHdlIGNvcHkgdGhlIGZpbGUgZGlyZWN0bHkgd2l0aG91dCBs b29raW5nIGF0IHRoZSBzaGFyZWQgYnVmZmVycywKQEAgLTE0NjU2LDE2ICsxNDY1NCwyMCBAQCBp bmRleF9jb3B5X2RhdGEoUmVsYXRpb24gcmVsLCBSZWxGaWxlTG9jYXRvciBuZXdybG9jYXRvcikK IAlSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UobmV3cmxvY2F0b3IsIHJlbC0+cmRfcmVsLT5yZWxwZXJz aXN0ZW5jZSwgdHJ1ZSk7CiAKIAkvKiBjb3B5IG1haW4gZm9yayAqLwotCVJlbGF0aW9uQ29weVN0 b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCksIGRzdHJlbCwgTUFJTl9GT1JLTlVNLAorCWRzdG1h aW4gPSBzbWdyb3BlbihuZXdybG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kLCBNQUlOX0ZPUktOVU0p OworCVJlbGF0aW9uQ29weVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCwgTUFJTl9GT1JLTlVN KSwgZHN0bWFpbiwKIAkJCQkJCXJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSk7CiAKIAkvKiBj b3B5IHRob3NlIGV4dHJhIGZvcmtzIHRoYXQgZXhpc3QgKi8KIAlmb3IgKEZvcmtOdW1iZXIgZm9y a051bSA9IE1BSU5fRk9SS05VTSArIDE7CiAJCSBmb3JrTnVtIDw9IE1BWF9GT1JLTlVNOyBmb3Jr TnVtKyspCiAJewotCQlpZiAoc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9ya051 bSkpCisJCWlmIChzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwsIGZvcmtOdW0pKSkKIAkJ ewotCQkJc21ncmNyZWF0ZShkc3RyZWwsIGZvcmtOdW0sIGZhbHNlKTsKKwkJCVNNZ3JGaWxlSGFu ZGxlIHNyY19mb3JrID0gUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051bSk7CisJCQlTTWdyRmls ZUhhbmRsZSBkc3RfZm9yayA9IHNtZ3JvcGVuKG5ld3Jsb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQs IGZvcmtOdW0pOworCisJCQlzbWdyY3JlYXRlKGRzdF9mb3JrLCBmYWxzZSk7CiAKIAkJCS8qCiAJ CQkgKiBXQUwgbG9nIGNyZWF0aW9uIGlmIHRoZSByZWxhdGlvbiBpcyBwZXJzaXN0ZW50LCBvciB0 aGlzIGlzIHRoZQpAQCAtMTQ2NzUsMTQgKzE0Njc3LDE1IEBAIGluZGV4X2NvcHlfZGF0YShSZWxh dGlvbiByZWwsIFJlbEZpbGVMb2NhdG9yIG5ld3Jsb2NhdG9yKQogCQkJCShyZWwtPnJkX3JlbC0+ cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQgJiYKIAkJCQkgZm9ya051 bSA9PSBJTklUX0ZPUktOVU0pKQogCQkJCWxvZ19zbWdyY3JlYXRlKCZuZXdybG9jYXRvciwgZm9y a051bSk7Ci0JCQlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwpLCBkc3Ry ZWwsIGZvcmtOdW0sCisJCQlSZWxhdGlvbkNvcHlTdG9yYWdlKHNyY19mb3JrLCBkc3RfZm9yaywK IAkJCQkJCQkJcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKTsKKwkJCXNtZ3JjbG9zZShkc3Rf Zm9yayk7CiAJCX0KIAl9CiAKIAkvKiBkcm9wIG9sZCByZWxhdGlvbiwgYW5kIGNsb3NlIG5ldyBv bmUgKi8KIAlSZWxhdGlvbkRyb3BTdG9yYWdlKHJlbCk7Ci0Jc21ncmNsb3NlKGRzdHJlbCk7CisJ c21ncmNsb3NlKGRzdG1haW4pOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmX2luaXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9p bml0LmMKaW5kZXggMjA5NDZjNDdjYjQuLjk3NDY4MzhiZjlmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zl9pbml0LmMKQEAgLTIwLDYgKzIwLDcgQEAKIAogQnVmZmVyRGVzY1BhZGRlZCAq QnVmZmVyRGVzY3JpcHRvcnM7CiBjaGFyCSAgICpCdWZmZXJCbG9ja3M7CitYTG9nUmVjUHRyICpC dWZmZXJFeHRlcm5hbExTTnM7CiBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCAqQnVm ZmVySU9DVkFycmF5OwogV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNrQ29udGV4dDsK IENrcHRTb3J0SXRlbSAqQ2twdEJ1ZmZlcklkczsKQEAgLTY5LDkgKzcwLDExIEBAIEluaXRCdWZm ZXJQb29sKHZvaWQpCiB7CiAJYm9vbAkJZm91bmRCdWZzLAogCQkJCWZvdW5kRGVzY3MsCisJCQkJ Zm91bmRMU05zLAogCQkJCWZvdW5kSU9DViwKIAkJCQlmb3VuZEJ1ZkNrcHQ7CiAKKwogCS8qIEFs aWduIGRlc2NyaXB0b3JzIHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5LiAqLwogCUJ1ZmZlckRlc2Ny aXB0b3JzID0gKEJ1ZmZlckRlc2NQYWRkZWQgKikKIAkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIg RGVzY3JpcHRvcnMiLApAQCAtODgsNiArOTEsMTEgQEAgSW5pdEJ1ZmZlclBvb2wodm9pZCkKIAkJ CQkJCU5CdWZmZXJzICogc2l6ZW9mKENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkKSwK IAkJCQkJCSZmb3VuZElPQ1YpOwogCisJQnVmZmVyRXh0ZXJuYWxMU05zID0gKFhMb2dSZWNQdHIg KikKKwkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgRXh0ZXJuYWwgTFNOcyIsCisJCQkJCQlOQnVm ZmVycyAqIHNpemVvZihYTG9nUmVjUHRyKSwKKwkJCQkJCSZmb3VuZExTTnMpOworCiAJLyoKIAkg KiBUaGUgYXJyYXkgdXNlZCB0byBzb3J0IHRvLWJlLWNoZWNrcG9pbnRlZCBidWZmZXIgaWRzIGlz IGxvY2F0ZWQgaW4KIAkgKiBzaGFyZWQgbWVtb3J5LCB0byBhdm9pZCBoYXZpbmcgdG8gYWxsb2Nh dGUgc2lnbmlmaWNhbnQgYW1vdW50cyBvZgpAQCAtOTksMTAgKzEwNywxMCBAQCBJbml0QnVmZmVy UG9vbCh2b2lkKQogCQlTaG1lbUluaXRTdHJ1Y3QoIkNoZWNrcG9pbnQgQnVmZmVySWRzIiwKIAkJ CQkJCU5CdWZmZXJzICogc2l6ZW9mKENrcHRTb3J0SXRlbSksICZmb3VuZEJ1ZkNrcHQpOwogCi0J aWYgKGZvdW5kRGVzY3MgfHwgZm91bmRCdWZzIHx8IGZvdW5kSU9DViB8fCBmb3VuZEJ1ZkNrcHQp CisJaWYgKGZvdW5kRGVzY3MgfHwgZm91bmRCdWZzIHx8IGZvdW5kSU9DViB8fCBmb3VuZEJ1ZkNr cHQgfHwgZm91bmRMU05zKQogCXsKIAkJLyogc2hvdWxkIGZpbmQgYWxsIG9mIHRoZXNlLCBvciBu b25lIG9mIHRoZW0gKi8KLQkJQXNzZXJ0KGZvdW5kRGVzY3MgJiYgZm91bmRCdWZzICYmIGZvdW5k SU9DViAmJiBmb3VuZEJ1ZkNrcHQpOworCQlBc3NlcnQoZm91bmREZXNjcyAmJiBmb3VuZEJ1ZnMg JiYgZm91bmRJT0NWICYmIGZvdW5kQnVmQ2twdCAmJiBmb3VuZExTTnMpOwogCQkvKiBub3RlOiB0 aGlzIHBhdGggaXMgb25seSB0YWtlbiBpbiBFWEVDX0JBQ0tFTkQgY2FzZSAqLwogCX0KIAllbHNl CkBAIC0xMzMsNiArMTQxLDggQEAgSW5pdEJ1ZmZlclBvb2wodm9pZCkKIAkJCQkJCQkgTFdUUkFO Q0hFX0JVRkZFUl9DT05URU5UKTsKIAogCQkJQ29uZGl0aW9uVmFyaWFibGVJbml0KEJ1ZmZlckRl c2NyaXB0b3JHZXRJT0NWKGJ1ZikpOworCisJCQlCdWZmZXJFeHRlcm5hbExTTnNbaV0gPSBJbnZh bGlkWExvZ1JlY1B0cjsKIAkJfQogCiAJCS8qIENvcnJlY3QgbGFzdCBlbnRyeSBvZiBsaW5rZWQg bGlzdCAqLwpAQCAtMTY2LDYgKzE3Niw5IEBAIEJ1ZmZlclNobWVtU2l6ZSh2b2lkKQogCS8qIHNp emUgb2YgZGF0YSBwYWdlcyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShOQnVm ZmVycywgQkxDS1NaKSk7CiAKKwkvKiBzaXplIG9mIGV4dGVybmFsIExTTnMgKi8KKwlzaXplID0g YWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTkJ1ZmZlcnMsIHNpemVvZihYTG9nUmVjUHRyKSkpOwor CiAJLyogc2l6ZSBvZiBzdHVmZiBjb250cm9sbGVkIGJ5IGZyZWVsaXN0LmMgKi8KIAlzaXplID0g YWRkX3NpemUoc2l6ZSwgU3RyYXRlZ3lTaG1lbVNpemUoKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMKaW5kZXggM2ZiMzhhMjVjZmEuLjVjZWZjNDA5OGVlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtNTcsMTAgKzU3LDE3IEBACiAjaW5jbHVkZSAidXRpbHMv cmVzb3duZXJfcHJpdmF0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogCisvKgor ICogWFhYIElkZWFsbHkgd2UnZCBzd2l0Y2ggdG8gc3RhbmRhcmQgcGFnZXMgZm9yIFNMUlUgZGF0 YSwgYnV0IGluIHRoZQorICogbWVhbnRpbWUgd2UgbmVlZCBzb21lIHdheSB0byBpZGVudGlmeSBi dWZmZXJzIHRoYXQgaG9sZCByYXcgZGF0YSAobm8KKyAqIGludmFzaXZlIExTTiwgbm8gY2hlY2tz dW1zKS4KKyAqLwogCiAvKiBOb3RlOiB0aGVzZSB0d28gbWFjcm9zIG9ubHkgd29yayBvbiBzaGFy ZWQgYnVmZmVycywgbm90IGxvY2FsIG9uZXMhICovCiAjZGVmaW5lIEJ1ZkhkckdldEJsb2NrKGJ1 ZkhkcikJKChCbG9jaykgKEJ1ZmZlckJsb2NrcyArICgoU2l6ZSkgKGJ1ZkhkciktPmJ1Zl9pZCkg KiBCTENLU1opKQotI2RlZmluZSBCdWZmZXJHZXRMU04oYnVmSGRyKQkoUGFnZUdldExTTihCdWZI ZHJHZXRCbG9jayhidWZIZHIpKSkKKworI2RlZmluZSBCdWZmZXJHZXRMU04oYnVmSGRyKSBcCisJ CVBhZ2VHZXRMU04oQnVmSGRyR2V0QmxvY2soYnVmSGRyKSkKIAogLyogTm90ZTogdGhpcyBtYWNy byBvbmx5IHdvcmtzIG9uIGxvY2FsIGJ1ZmZlcnMsIG5vdCBzaGFyZWQgb25lcyEgKi8KICNkZWZp bmUgTG9jYWxCdWZIZHJHZXRCbG9jayhidWZIZHIpIFwKQEAgLTExNywxOSArMTI0LDYgQEAgdHlw ZWRlZiBzdHJ1Y3QgQ2twdFRzU3RhdHVzCiAJaW50CQkJaW5kZXg7CiB9IENrcHRUc1N0YXR1czsK IAotLyoKLSAqIFR5cGUgZm9yIGFycmF5IHVzZWQgdG8gc29ydCBTTWdyUmVsYXRpb25zCi0gKgot ICogRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzIHNoYXJlcyB0aGUgc2FtZSBjb21wYXJhdG9yIGZ1 bmN0aW9uIHdpdGgKLSAqIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzLiBQb2ludGVyIHRvIHRoaXMg c3RydWN0IGFuZCBSZWxGaWxlTG9jYXRvciBtdXN0IGJlCi0gKiBjb21wYXRpYmxlLgotICovCi10 eXBlZGVmIHN0cnVjdCBTTWdyU29ydEFycmF5Ci17Ci0JUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3I7 CS8qIFRoaXMgbXVzdCBiZSB0aGUgZmlyc3QgbWVtYmVyICovCi0JU01nclJlbGF0aW9uIHNyZWw7 Ci19IFNNZ3JTb3J0QXJyYXk7Ci0KIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGJvb2wJCXplcm9fZGFt YWdlZF9wYWdlcyA9IGZhbHNlOwogaW50CQkJYmd3cml0ZXJfbHJ1X21heHBhZ2VzID0gMTAwOwpA QCAtNDU5LDggKzQ1Myw4IEBAIEZvcmdldFByaXZhdGVSZWZDb3VudEVudHJ5KFByaXZhdGVSZWZD b3VudEVudHJ5ICpyZWYpCiApCiAKIAotc3RhdGljIEJ1ZmZlciBSZWFkQnVmZmVyX2NvbW1vbihT TWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwKLQkJCQkJCQkJRm9ya051bWJl ciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKK3N0YXRpYyBCdWZmZXIgUmVhZEJ1ZmZl cl9jb21tb24oU01nckZpbGVIYW5kbGUgc2ZpbGUsIGNoYXIgcmVscGVyc2lzdGVuY2UsCisJCQkJ CQkJCUJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQkJCQkJCQlSZWFkQnVmZmVyTW9kZSBtb2RlLCBC dWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCQkJYm9vbCAqaGl0KTsKIHN0YXRp YyBib29sIFBpbkJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0 cmF0ZWd5KTsKQEAgLTQ3NiwyMCArNDcwLDE5IEBAIHN0YXRpYyB2b2lkIFRlcm1pbmF0ZUJ1ZmZl cklPKEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBjbGVhcl9kaXJ0eSwKIAkJCQkJCQkgIHVpbnQzMiBz ZXRfZmxhZ19iaXRzKTsKIHN0YXRpYyB2b2lkIHNoYXJlZF9idWZmZXJfd3JpdGVfZXJyb3JfY2Fs bGJhY2sodm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkIGxvY2FsX2J1ZmZlcl93cml0ZV9lcnJvcl9j YWxsYmFjayh2b2lkICphcmcpOwotc3RhdGljIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9jKFNNZ3JS ZWxhdGlvbiBzbWdyLAorc3RhdGljIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9jKFNNZ3JGaWxlSGFu ZGxlIHNtZ3IsCiAJCQkJCQkJICAgY2hhciByZWxwZXJzaXN0ZW5jZSwKLQkJCQkJCQkgICBGb3Jr TnVtYmVyIGZvcmtOdW0sCiAJCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJCQkJCQkJ ICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJCQkJICAgYm9vbCAqZm91bmRQ dHIpOwotc3RhdGljIHZvaWQgRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRp b24gcmVsbik7CitzdGF0aWMgdm9pZCBGbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JG aWxlSGFuZGxlIHNmaWxlKTsKIHN0YXRpYyB2b2lkIEZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJz KFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLAotCQkJCQkJCQkJICAgRm9ya051bWJlciBmb3JrTnVt LAorCQkJCQkJCQkJICAgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCQkJICAgQmxvY2tOdW1i ZXIgbkZvcmtCbG9jaywKIAkJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGZpcnN0RGVsQmxvY2spOwog c3RhdGljIHZvaWQgUmVsYXRpb25Db3B5U3RvcmFnZVVzaW5nQnVmZmVyKFJlbEZpbGVMb2NhdG9y IHNyY2xvY2F0b3IsCiAJCQkJCQkJCQkJICAgUmVsRmlsZUxvY2F0b3IgZHN0bG9jYXRvciwKLQkJ CQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtOdW0sIGJvb2wgcGVybWFuZW50KTsKKwkJCQkJCQkJ CQkgICBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgcGVybWFuZW50KTsKIHN0YXRpYyB2b2lkIEF0 UHJvY0V4aXRfQnVmZmVycyhpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIENoZWNr Rm9yQnVmZmVyTGVha3Modm9pZCk7CiBzdGF0aWMgaW50CXJsb2NhdG9yX2NvbXBhcmF0b3IoY29u c3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKTsKQEAgLTUwMiw5ICs0OTUsNyBAQCBzdGF0aWMg aW50CXRzX2NrcHRfcHJvZ3Jlc3NfY29tcGFyYXRvcihEYXR1bSBhLCBEYXR1bSBiLCB2b2lkICph cmcpOwogICogSW1wbGVtZW50YXRpb24gb2YgUHJlZmV0Y2hCdWZmZXIoKSBmb3Igc2hhcmVkIGJ1 ZmZlcnMuCiAgKi8KIFByZWZldGNoQnVmZmVyUmVzdWx0Ci1QcmVmZXRjaFNoYXJlZEJ1ZmZlcihT TWdyUmVsYXRpb24gc21ncl9yZWxuLAotCQkJCQkgRm9ya051bWJlciBmb3JrTnVtLAotCQkJCQkg QmxvY2tOdW1iZXIgYmxvY2tOdW0pCitQcmVmZXRjaFNoYXJlZEJ1ZmZlcihTTWdyRmlsZUhhbmRs ZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCiB7CiAJUHJlZmV0Y2hCdWZmZXJSZXN1bHQg cmVzdWx0ID0ge0ludmFsaWRCdWZmZXIsIGZhbHNlfTsKIAlCdWZmZXJUYWcJbmV3VGFnOwkJCS8q IGlkZW50aXR5IG9mIHJlcXVlc3RlZCBibG9jayAqLwpAQCAtNTE1LDggKzUwNiw4IEBAIFByZWZl dGNoU2hhcmVkQnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sCiAJQXNzZXJ0KEJsb2NrTnVt YmVySXNWYWxpZChibG9ja051bSkpOwogCiAJLyogY3JlYXRlIGEgdGFnIHNvIHdlIGNhbiBsb29r dXAgdGhlIGJ1ZmZlciAqLwotCUluaXRCdWZmZXJUYWcoJm5ld1RhZywgJnNtZ3JfcmVsbi0+c21n cl9ybG9jYXRvci5sb2NhdG9yLAotCQkJCSAgIGZvcmtOdW0sIGJsb2NrTnVtKTsKKwlJbml0QnVm ZmVyVGFnKCZuZXdUYWcsICZzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IsCisJCQkJICAgc2Zp bGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibG9ja051bSk7CiAKIAkvKiBkZXRlcm1pbmUgaXRz IGhhc2ggY29kZSBhbmQgcGFydGl0aW9uIGxvY2sgSUQgKi8KIAluZXdIYXNoID0gQnVmVGFibGVI YXNoQ29kZSgmbmV3VGFnKTsKQEAgLTUzNSw3ICs1MjYsNyBAQCBQcmVmZXRjaFNoYXJlZEJ1ZmZl cihTTWdyUmVsYXRpb24gc21ncl9yZWxuLAogCQkgKiBUcnkgdG8gaW5pdGlhdGUgYW4gYXN5bmNo cm9ub3VzIHJlYWQuICBUaGlzIHJldHVybnMgZmFsc2UgaW4KIAkJICogcmVjb3ZlcnkgaWYgdGhl IHJlbGF0aW9uIGZpbGUgZG9lc24ndCBleGlzdC4KIAkJICovCi0JCWlmIChzbWdycHJlZmV0Y2go c21ncl9yZWxuLCBmb3JrTnVtLCBibG9ja051bSkpCisJCWlmIChzbWdycHJlZmV0Y2goc2ZpbGUs IGJsb2NrTnVtKSkKIAkJCXJlc3VsdC5pbml0aWF0ZWRfaW8gPSB0cnVlOwogI2VuZGlmCQkJCQkJ CS8qIFVTRV9QUkVGRVRDSCAqLwogCX0KQEAgLTU4OSw3ICs1ODAsNyBAQCBQcmVmZXRjaFNoYXJl ZEJ1ZmZlcihTTWdyUmVsYXRpb24gc21ncl9yZWxuLAogICogcmVjb3ZlcnksIGFuIGVycm9yIGlz IHJhaXNlZCkuCiAgKi8KIFByZWZldGNoQnVmZmVyUmVzdWx0Ci1QcmVmZXRjaEJ1ZmZlcihSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQorUHJl ZmV0Y2hCdWZmZXIoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJl ciBibG9ja051bSkKIHsKIAlBc3NlcnQoUmVsYXRpb25Jc1ZhbGlkKHJlbG4pKTsKIAlBc3NlcnQo QmxvY2tOdW1iZXJJc1ZhbGlkKGJsb2NrTnVtKSk7CkBAIC02MDMsMTIgKzU5NCwxMiBAQCBQcmVm ZXRjaEJ1ZmZlcihSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVy IGJsb2NrTnVtKQogCQkJCQkgZXJybXNnKCJjYW5ub3QgYWNjZXNzIHRlbXBvcmFyeSB0YWJsZXMg b2Ygb3RoZXIgc2Vzc2lvbnMiKSkpOwogCiAJCS8qIHBhc3MgaXQgb2ZmIHRvIGxvY2FsYnVmLmMg Ki8KLQkJcmV0dXJuIFByZWZldGNoTG9jYWxCdWZmZXIoUmVsYXRpb25HZXRTbWdyKHJlbG4pLCBm b3JrTnVtLCBibG9ja051bSk7CisJCXJldHVybiBQcmVmZXRjaExvY2FsQnVmZmVyKFJlbGF0aW9u R2V0U21ncihyZWxuLCBmb3JrbnVtKSwgYmxvY2tOdW0pOwogCX0KIAllbHNlCiAJewogCQkvKiBw YXNzIGl0IHRvIHRoZSBzaGFyZWQgYnVmZmVyIHZlcnNpb24gKi8KLQkJcmV0dXJuIFByZWZldGNo U2hhcmVkQnVmZmVyKFJlbGF0aW9uR2V0U21ncihyZWxuKSwgZm9ya051bSwgYmxvY2tOdW0pOwor CQlyZXR1cm4gUHJlZmV0Y2hTaGFyZWRCdWZmZXIoUmVsYXRpb25HZXRTbWdyKHJlbG4sIGZvcmtu dW0pLCBibG9ja051bSk7CiAJfQogfQogCkBAIC02MjAsNyArNjExLDcgQEAgUHJlZmV0Y2hCdWZm ZXIoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051 bSkKICAqIHRhZy4gIEluIHRoYXQgY2FzZSwgdGhlIGJ1ZmZlciBpcyBwaW5uZWQgYW5kIHRoZSB1 c2FnZSBjb3VudCBpcyBidW1wZWQuCiAgKi8KIGJvb2wKLVJlYWRSZWNlbnRCdWZmZXIoUmVsRmls ZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tO dW0sCitSZWFkUmVjZW50QnVmZmVyKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVy IGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQkJCSBCdWZmZXIgcmVjZW50X2J1ZmZl cikKIHsKIAlCdWZmZXJEZXNjICpidWZIZHI7CkBAIC02MzIsNyArNjIzLDcgQEAgUmVhZFJlY2Vu dEJ1ZmZlcihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9j a051bWJlciBibG9ja04KIAogCVJlc291cmNlT3duZXJFbmxhcmdlQnVmZmVycyhDdXJyZW50UmVz b3VyY2VPd25lcik7CiAJUmVzZXJ2ZVByaXZhdGVSZWZDb3VudEVudHJ5KCk7Ci0JSW5pdEJ1ZmZl clRhZygmdGFnLCAmcmxvY2F0b3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKKwlJbml0QnVmZmVyVGFn KCZ0YWcsICZybG9jYXRvciwgZm9ya251bSwgYmxvY2tOdW0pOwogCiAJaWYgKEJ1ZmZlcklzTG9j YWwocmVjZW50X2J1ZmZlcikpCiAJewpAQCAtNzU2LDcgKzc0Nyw3IEBAIFJlYWRCdWZmZXIoUmVs YXRpb24gcmVsbiwgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCiAgKiBTZWUgYnVmZmVyL1JFQURNRSBm b3IgZGV0YWlscy4KICAqLwogQnVmZmVyCi1SZWFkQnVmZmVyRXh0ZW5kZWQoUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKK1JlYWRCdWZmZXJF eHRlbmRlZChSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJs b2NrTnVtLAogCQkJCSAgIFJlYWRCdWZmZXJNb2RlIG1vZGUsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHN0cmF0ZWd5KQogewogCWJvb2wJCWhpdDsKQEAgLTc3Nyw4ICs3NjgsOSBAQCBSZWFkQnVmZmVy RXh0ZW5kZWQoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBi bG9ja051bSwKIAkgKiBtaXNzLgogCSAqLwogCXBnc3RhdF9jb3VudF9idWZmZXJfcmVhZChyZWxu KTsKLQlidWYgPSBSZWFkQnVmZmVyX2NvbW1vbihSZWxhdGlvbkdldFNtZ3IocmVsbiksIHJlbG4t PnJkX3JlbC0+cmVscGVyc2lzdGVuY2UsCi0JCQkJCQkJZm9ya051bSwgYmxvY2tOdW0sIG1vZGUs IHN0cmF0ZWd5LCAmaGl0KTsKKwlidWYgPSBSZWFkQnVmZmVyX2NvbW1vbihSZWxhdGlvbkdldFNt Z3IocmVsbiwgZm9ya251bSksCisJCQkJCQkJcmVsbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSwK KwkJCQkJCQlibG9ja051bSwgbW9kZSwgc3RyYXRlZ3ksICZoaXQpOwogCWlmIChoaXQpCiAJCXBn c3RhdF9jb3VudF9idWZmZXJfaGl0KHJlbG4pOwogCXJldHVybiBidWY7CkBAIC03OTYsMTkgKzc4 OCwzMSBAQCBSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr TnVtLCBCbG9ja051bWJlciBibG9ja051bSwKICAqIEJhY2tlbmRJZCkuCiAgKi8KIEJ1ZmZlcgot UmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051 bWJlciBmb3JrTnVtLAorUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShSZWxGaWxlTG9jYXRvciBy bG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJICBCbG9ja051bWJlciBibG9ja051 bSwgUmVhZEJ1ZmZlck1vZGUgbW9kZSwKIAkJCQkJCSAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3Ry YXRlZ3ksIGJvb2wgcGVybWFuZW50KQogewogCWJvb2wJCWhpdDsKIAotCVNNZ3JSZWxhdGlvbiBz bWdyID0gc21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOworCVNNZ3JGaWxlSGFu ZGxlIHNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtudW0p OwogCi0JcmV0dXJuIFJlYWRCdWZmZXJfY29tbW9uKHNtZ3IsIHBlcm1hbmVudCA/IFJFTFBFUlNJ U1RFTkNFX1BFUk1BTkVOVCA6Ci0JCQkJCQkJIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VELCBmb3Jr TnVtLCBibG9ja051bSwKKwlyZXR1cm4gUmVhZEJ1ZmZlcl9jb21tb24oc2ZpbGUsIHBlcm1hbmVu dCA/IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCA6CisJCQkJCQkJIFJFTFBFUlNJU1RFTkNFX1VO TE9HR0VELCBibG9ja051bSwKIAkJCQkJCQkgbW9kZSwgc3RyYXRlZ3ksICZoaXQpOwogfQogCitC dWZmZXIKK1JlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGVXaXRoSGl0KFJlbEZpbGVMb2NhdG9yIHJs b2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJCQkJCQkJCSBCbG9ja051bWJlciBibG9ja051 bSwgUmVhZEJ1ZmZlck1vZGUgbW9kZSwKKwkJCQkJCQkJIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0 cmF0ZWd5LCBib29sIHBlcm1hbmVudCwgYm9vbCAqaGl0KQoreworCVNNZ3JGaWxlSGFuZGxlIHNm aWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtudW0pOworCisJ cmV0dXJuIFJlYWRCdWZmZXJfY29tbW9uKHNmaWxlLCBwZXJtYW5lbnQgPyBSRUxQRVJTSVNURU5D RV9QRVJNQU5FTlQgOgorCQkJCQkJCSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCwgYmxvY2tOdW0s CisJCQkJCQkJIG1vZGUsIHN0cmF0ZWd5LCBoaXQpOworfQorCiAKIC8qCiAgKiBSZWFkQnVmZmVy X2NvbW1vbiAtLSBjb21tb24gbG9naWMgZm9yIGFsbCBSZWFkQnVmZmVyIHZhcmlhbnRzCkBAIC04 MTYsNyArODIwLDcgQEAgUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShSZWxGaWxlTG9jYXRvciBy bG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLAogICogKmhpdCBpcyBzZXQgdG8gdHJ1ZSBpZiB0 aGUgcmVxdWVzdCB3YXMgc2F0aXNmaWVkIGZyb20gc2hhcmVkIGJ1ZmZlciBjYWNoZS4KICAqLwog c3RhdGljIEJ1ZmZlcgotUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIg cmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKK1JlYWRCdWZmZXJfY29tbW9uKFNN Z3JGaWxlSGFuZGxlIHNmaWxlLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAogCQkJCSAgQmxvY2tOdW1i ZXIgYmxvY2tOdW0sIFJlYWRCdWZmZXJNb2RlIG1vZGUsCiAJCQkJICBCdWZmZXJBY2Nlc3NTdHJh dGVneSBzdHJhdGVneSwgYm9vbCAqaGl0KQogewpAQCAtODI0LDcgKzgyOCw3IEBAIFJlYWRCdWZm ZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVt YmVyIGZvcmtOdW0sCiAJQmxvY2sJCWJ1ZkJsb2NrOwogCWJvb2wJCWZvdW5kOwogCWJvb2wJCWlz RXh0ZW5kOwotCWJvb2wJCWlzTG9jYWxCdWYgPSBTbWdySXNUZW1wKHNtZ3IpOworCWJvb2wJCWlz TG9jYWxCdWYgPSBTbWdySXNUZW1wKHNmaWxlKTsKIAogCSpoaXQgPSBmYWxzZTsKIApAQCAtODMz LDI5ICs4MzcsMzAgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIg cmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAogCWlzRXh0ZW5kID0gKGJsb2Nr TnVtID09IFBfTkVXKTsKIAotCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfU1RBUlQoZm9y a051bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkgICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkLAotCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAot CQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJ CQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKKwlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9SRUFEX1NUQVJUKHNtZ3ItPnNtZ3JfbG9jYXRvci5mb3JrbnVtLAorCQkJCQkJCQkJICAg YmxvY2tOdW0sCisJCQkJCQkJCQkgICBzbWdyLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQs CisJCQkJCQkJCQkgICBzbWdyLT5zbWdyX2xvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJ CSAgIHNtZ3ItPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCSAgIHNt Z3ItPnNtZ3JfbG9jYXRvci5iYWNrZW5kLAogCQkJCQkJCQkJICAgaXNFeHRlbmQpOwogCiAJLyog U3Vic3RpdHV0ZSBwcm9wZXIgYmxvY2sgbnVtYmVyIGlmIGNhbGxlciBhc2tlZCBmb3IgUF9ORVcg Ki8KIAlpZiAoaXNFeHRlbmQpCiAJewotCQlibG9ja051bSA9IHNtZ3JuYmxvY2tzKHNtZ3IsIGZv cmtOdW0pOworCQlibG9ja051bSA9IHNtZ3JuYmxvY2tzKHNmaWxlKTsKIAkJLyogRmFpbCBpZiBy ZWxhdGlvbiBpcyBhbHJlYWR5IGF0IG1heGltdW0gcG9zc2libGUgbGVuZ3RoICovCiAJCWlmIChi bG9ja051bSA9PSBQX05FVykKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNP REVfUFJPR1JBTV9MSU1JVF9FWENFRURFRCksCiAJCQkJCSBlcnJtc2coImNhbm5vdCBleHRlbmQg cmVsYXRpb24gJXMgYmV5b25kICV1IGJsb2NrcyIsCi0JCQkJCQkJcmVscGF0aChzbWdyLT5zbWdy X3Jsb2NhdG9yLCBmb3JrTnVtKSwKKwkJCQkJCQlzbWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9j YXRvciksCiAJCQkJCQkJUF9ORVcpKSk7CiAJfQogCiAJaWYgKGlzTG9jYWxCdWYpCiAJewotCQli dWZIZHIgPSBMb2NhbEJ1ZmZlckFsbG9jKHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtLCAmZm91bmQp OworCQlidWZIZHIgPSBMb2NhbEJ1ZmZlckFsbG9jKHNmaWxlLCBibG9ja051bSwgJmZvdW5kKTsK IAkJaWYgKGZvdW5kKQogCQkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX2hpdCsrOwogCQllbHNl IGlmIChpc0V4dGVuZCkKQEAgLTg3MCw3ICs4NzUsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdy UmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAog CQkgKiBsb29rdXAgdGhlIGJ1ZmZlci4gIElPX0lOX1BST0dSRVNTIGlzIHNldCBpZiB0aGUgcmVx dWVzdGVkIGJsb2NrIGlzCiAJCSAqIG5vdCBjdXJyZW50bHkgaW4gbWVtb3J5LgogCQkgKi8KLQkJ YnVmSGRyID0gQnVmZmVyQWxsb2Moc21nciwgcmVscGVyc2lzdGVuY2UsIGZvcmtOdW0sIGJsb2Nr TnVtLAorCQlidWZIZHIgPSBCdWZmZXJBbGxvYyhzZmlsZSwgcmVscGVyc2lzdGVuY2UsIGJsb2Nr TnVtLAogCQkJCQkJCSBzdHJhdGVneSwgJmZvdW5kKTsKIAkJaWYgKGZvdW5kKQogCQkJcGdCdWZm ZXJVc2FnZS5zaGFyZWRfYmxrc19oaXQrKzsKQEAgLTg5NSwxMSArOTAwLDEyIEBAIFJlYWRCdWZm ZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVt YmVyIGZvcmtOdW0sCiAJCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKIAkJCQlWYWN1dW1Db3N0QmFs YW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKIAotCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJf UkVBRF9ET05FKGZvcmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5s b2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5y ZWxOdW1iZXIsCi0JCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAorCQkJ VFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9ET05FKHNmaWxlLT5zbWdyX2ZvcmtudW0sCisJ CQkJCQkJCQkJCSAgYmxvY2tOdW0sCisJCQkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3Iu bG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5kYk9pZCwKKwkJCQkJCQkJCQkJICBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51 bWJlciwKKwkJCQkJCQkJCQkJICBzZmlsZS0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAogCQkJCQkJ CQkJCQkgIGlzRXh0ZW5kLAogCQkJCQkJCQkJCQkgIGZvdW5kKTsKIApAQCAtOTM2LDcgKzk0Miw3 IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3Rl bmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCWlmICghUGFnZUlzTmV3KChQYWdlKSBidWZCbG9j aykpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJybXNnKCJ1bmV4cGVjdGVkIGRhdGEgYmV5 b25kIEVPRiBpbiBibG9jayAldSBvZiByZWxhdGlvbiAlcyIsCi0JCQkJCQkJYmxvY2tOdW0sIHJl bHBhdGgoc21nci0+c21ncl9ybG9jYXRvciwgZm9ya051bSkpLAorCQkJCQkJCWJsb2NrTnVtLCBz bWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvcikpLAogCQkJCQkgZXJyaGludCgiVGhpcyBo YXMgYmVlbiBzZWVuIHRvIG9jY3VyIHdpdGggYnVnZ3kga2VybmVsczsgY29uc2lkZXIgdXBkYXRp bmcgeW91ciBzeXN0ZW0uIikpKTsKIAogCQkvKgpAQCAtOTkzLDcgKzk5OSw3IEBAIFJlYWRCdWZm ZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVt YmVyIGZvcmtOdW0sCiAJCS8qIG5ldyBidWZmZXJzIGFyZSB6ZXJvLWZpbGxlZCAqLwogCQlNZW1T ZXQoKGNoYXIgKikgYnVmQmxvY2ssIDAsIEJMQ0tTWik7CiAJCS8qIGRvbid0IHNldCBjaGVja3N1 bSBmb3IgYWxsLXplcm8gcGFnZSAqLwotCQlzbWdyZXh0ZW5kKHNtZ3IsIGZvcmtOdW0sIGJsb2Nr TnVtLCAoY2hhciAqKSBidWZCbG9jaywgZmFsc2UpOworCQlzbWdyZXh0ZW5kKHNmaWxlLCBibG9j a051bSwgKGNoYXIgKikgYnVmQmxvY2ssIGZhbHNlKTsKIAogCQkvKgogCQkgKiBOQjogd2UncmUg Km5vdCogZG9pbmcgYSBTY2hlZHVsZUJ1ZmZlclRhZ0ZvcldyaXRlYmFjayBoZXJlOwpAQCAtMTAx OCw3ICsxMDI0LDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIg cmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCWlmICh0cmFja19pb190aW1p bmcpCiAJCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChpb19zdGFydCk7CiAKLQkJCXNtZ3JyZWFk KHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtLCAoY2hhciAqKSBidWZCbG9jayk7CisJCQlzbWdycmVh ZChzZmlsZSwgYmxvY2tOdW0sIChjaGFyICopIGJ1ZkJsb2NrKTsKIAogCQkJaWYgKHRyYWNrX2lv X3RpbWluZykKIAkJCXsKQEAgLTEwMjksOCArMTAzNSw4IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNN Z3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0s CiAJCQl9CiAKIAkJCS8qIGNoZWNrIGZvciBnYXJiYWdlIGRhdGEgKi8KLQkJCWlmICghUGFnZUlz VmVyaWZpZWRFeHRlbmRlZCgoUGFnZSkgYnVmQmxvY2ssIGJsb2NrTnVtLAotCQkJCQkJCQkJCVBJ Vl9MT0dfV0FSTklORyB8IFBJVl9SRVBPUlRfU1RBVCkpCisJCQlpZiAoKCEobW9kZSA9PSBSQk1f VFJJTSkpICYmICghUGFnZUlzVmVyaWZpZWRFeHRlbmRlZCgoUGFnZSkgYnVmQmxvY2ssIGJsb2Nr TnVtLAorCQkJCQkJCQkJCVBJVl9MT0dfV0FSTklORyB8IFBJVl9SRVBPUlRfU1RBVCkpKQogCQkJ ewogCQkJCWlmIChtb2RlID09IFJCTV9aRVJPX09OX0VSUk9SIHx8IHplcm9fZGFtYWdlZF9wYWdl cykKIAkJCQl7CkBAIC0xMDM4LDcgKzEwNDQsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVs YXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJ CQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAogCQkJCQkJCSBlcnJtc2coImlu dmFsaWQgcGFnZSBpbiBibG9jayAldSBvZiByZWxhdGlvbiAlczsgemVyb2luZyBvdXQgcGFnZSIs CiAJCQkJCQkJCQlibG9ja051bSwKLQkJCQkJCQkJCXJlbHBhdGgoc21nci0+c21ncl9ybG9jYXRv ciwgZm9ya051bSkpKSk7CisJCQkJCQkJCQlzbWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRv cikpKSk7CiAJCQkJCU1lbVNldCgoY2hhciAqKSBidWZCbG9jaywgMCwgQkxDS1NaKTsKIAkJCQl9 CiAJCQkJZWxzZQpAQCAtMTA0Niw3ICsxMDUyLDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJl bGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJ CQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKIAkJCQkJCQkgZXJybXNnKCJp bnZhbGlkIHBhZ2UgaW4gYmxvY2sgJXUgb2YgcmVsYXRpb24gJXMiLAogCQkJCQkJCQkJYmxvY2tO dW0sCi0JCQkJCQkJCQlyZWxwYXRoKHNtZ3ItPnNtZ3JfcmxvY2F0b3IsIGZvcmtOdW0pKSkpOwor CQkJCQkJCQkJc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpKSkpOwogCQkJfQogCQl9 CiAJfQpAQCAtMTA4NSwxMSArMTA5MSwxMiBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRp b24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCWlmIChW YWN1dW1Db3N0QWN0aXZlKQogCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFnZU1p c3M7CiAKLQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX0RPTkUoZm9ya051bSwgYmxvY2tO dW0sCi0JCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJ CQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCSAgc21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJCSAgc21nci0+c21n cl9ybG9jYXRvci5iYWNrZW5kLAorCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShz ZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sCisJCQkJCQkJCQkgIGJsb2NrTnVtLAorCQkJCQkJ CQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJICBzZmls ZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xv Y2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3Iu YmFja2VuZCwKIAkJCQkJCQkJCSAgaXNFeHRlbmQsCiAJCQkJCQkJCQkgIGZvdW5kKTsKIApAQCAt MTExNiw3ICsxMTIzLDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNo YXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKICAqIE5vIGxvY2tzIGFyZSBo ZWxkIGVpdGhlciBhdCBlbnRyeSBvciBleGl0LgogICovCiBzdGF0aWMgQnVmZmVyRGVzYyAqCi1C dWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051 bWJlciBmb3JrTnVtLAorQnVmZmVyQWxsb2MoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGNoYXIgcmVs cGVyc2lzdGVuY2UsCiAJCQlCbG9ja051bWJlciBibG9ja051bSwKIAkJCUJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5IHN0cmF0ZWd5LAogCQkJYm9vbCAqZm91bmRQdHIpCkBAIC0xMTM0LDcgKzExNDEsNyBA QCBCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9y a051bWJlciBmb3JrTnVtLAogCXVpbnQzMgkJYnVmX3N0YXRlOwogCiAJLyogY3JlYXRlIGEgdGFn IHNvIHdlIGNhbiBsb29rdXAgdGhlIGJ1ZmZlciAqLwotCUluaXRCdWZmZXJUYWcoJm5ld1RhZywg JnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgZm9ya051bSwgYmxvY2tOdW0pOworCUluaXRC dWZmZXJUYWcoJm5ld1RhZywgJnNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvciwgc2ZpbGUtPnNt Z3JfbG9jYXRvci5mb3JrbnVtLCBibG9ja051bSk7CiAKIAkvKiBkZXRlcm1pbmUgaXRzIGhhc2gg Y29kZSBhbmQgcGFydGl0aW9uIGxvY2sgSUQgKi8KIAluZXdIYXNoID0gQnVmVGFibGVIYXNoQ29k ZSgmbmV3VGFnKTsKQEAgLTEyNjQsMTAgKzEyNzEsMTEgQEAgQnVmZmVyQWxsb2MoU01nclJlbGF0 aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQl9 CiAKIAkJCQkvKiBPSywgZG8gdGhlIEkvTyAqLwotCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1dSSVRFX0RJUlRZX1NUQVJUKGZvcmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCQkJCQkJCQkgIHNt Z3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJCQkJCSAgc21nci0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOworCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1dSSVRFX0RJUlRZX1NUQVJUKHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwKKwkJCQkJCQkJ CQkJCQkJICBibG9ja051bSwKKwkJCQkJCQkJCQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmxv Y2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRv ci5kYk9pZCwKKwkJCQkJCQkJCQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVs TnVtYmVyKTsKIAogCQkJCUZsdXNoQnVmZmVyKGJ1ZiwgTlVMTCk7CiAJCQkJTFdMb2NrUmVsZWFz ZShCdWZmZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2soYnVmKSk7CkBAIC0xMjc1LDEwICsxMjgz LDExIEBAIEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNl LCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQkJU2NoZWR1bGVCdWZmZXJUYWdGb3JXcml0ZWJhY2so JkJhY2tlbmRXcml0ZWJhY2tDb250ZXh0LAogCQkJCQkJCQkJCQkgICZidWYtPnRhZyk7CiAKLQkJ CQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9XUklURV9ESVJUWV9ET05FKGZvcmtOdW0sIGJsb2Nr TnVtLAotCQkJCQkJCQkJCQkJCQkgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwK LQkJCQkJCQkJCQkJCQkJIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJ CQkJCQkJCQkJIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOworCQkJCVRS QUNFX1BPU1RHUkVTUUxfQlVGRkVSX1dSSVRFX0RJUlRZX0RPTkUoc2ZpbGUtPnNtZ3JfbG9jYXRv ci5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCQkgYmxvY2tOdW0sCisJCQkJCQkJCQkJCQkJCSBzZmls ZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJCQkJCQkgc2ZpbGUtPnNt Z3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJCQkJCQkgc2ZpbGUtPnNtZ3JfbG9j YXRvci5sb2NhdG9yLnJlbE51bWJlcik7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC0xNDM0LDcg KzE0NDMsNyBAQCBCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0 ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCWJ1Zl9zdGF0ZSAmPSB+KEJNX1ZBTElEIHwgQk1f RElSVFkgfCBCTV9KVVNUX0RJUlRJRUQgfAogCQkJCSAgIEJNX0NIRUNLUE9JTlRfTkVFREVEIHwg Qk1fSU9fRVJST1IgfCBCTV9QRVJNQU5FTlQgfAogCQkJCSAgIEJVRl9VU0FHRUNPVU5UX01BU0sp OwotCWlmIChyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQgfHwgZm9y a051bSA9PSBJTklUX0ZPUktOVU0pCisJaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RF TkNFX1BFUk1BTkVOVCB8fCBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0gPT0gSU5JVF9GT1JL TlVNKQogCQlidWZfc3RhdGUgfD0gQk1fVEFHX1ZBTElEIHwgQk1fUEVSTUFORU5UIHwgQlVGX1VT QUdFQ09VTlRfT05FOwogCWVsc2UKIAkJYnVmX3N0YXRlIHw9IEJNX1RBR19WQUxJRCB8IEJVRl9V U0FHRUNPVU5UX09ORTsKQEAgLTE2NDcsNyArMTY1Niw3IEBAIFJlbGVhc2VBbmRSZWFkQnVmZmVy KEJ1ZmZlciBidWZmZXIsCiAJCQkJCSBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJIEJsb2NrTnVt YmVyIGJsb2NrTnVtKQogewotCUZvcmtOdW1iZXIJZm9ya051bSA9IE1BSU5fRk9SS05VTTsKKwlG b3JrTnVtYmVyCWZvcmtudW0gPSBNQUlOX0ZPUktOVU07CiAJQnVmZmVyRGVzYyAqYnVmSGRyOwog CiAJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmZmVyKSkKQEAgLTE2NTgsNyArMTY2Nyw3IEBAIFJlbGVh c2VBbmRSZWFkQnVmZmVyKEJ1ZmZlciBidWZmZXIsCiAJCQlidWZIZHIgPSBHZXRMb2NhbEJ1ZmZl ckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpOwogCQkJaWYgKGJ1Zkhkci0+dGFnLmJsb2NrTnVtID09 IGJsb2NrTnVtICYmCiAJCQkJQnVmVGFnTWF0Y2hlc1JlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRh ZywgJnJlbGF0aW9uLT5yZF9sb2NhdG9yKSAmJgotCQkJCUJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhk ci0+dGFnKSA9PSBmb3JrTnVtKQorCQkJCUJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSA9 PSBmb3JrbnVtKQogCQkJCXJldHVybiBidWZmZXI7CiAJCQlSZXNvdXJjZU93bmVyRm9yZ2V0QnVm ZmVyKEN1cnJlbnRSZXNvdXJjZU93bmVyLCBidWZmZXIpOwogCQkJTG9jYWxSZWZDb3VudFstYnVm ZmVyIC0gMV0tLTsKQEAgLTE2NjksNyArMTY3OCw3IEBAIFJlbGVhc2VBbmRSZWFkQnVmZmVyKEJ1 ZmZlciBidWZmZXIsCiAJCQkvKiB3ZSBoYXZlIHBpbiwgc28gaXQncyBvayB0byBleGFtaW5lIHRh ZyB3aXRob3V0IHNwaW5sb2NrICovCiAJCQlpZiAoYnVmSGRyLT50YWcuYmxvY2tOdW0gPT0gYmxv Y2tOdW0gJiYKIAkJCQlCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAm cmVsYXRpb24tPnJkX2xvY2F0b3IpICYmCi0JCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50 YWcpID09IGZvcmtOdW0pCisJCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09IGZv cmtudW0pCiAJCQkJcmV0dXJuIGJ1ZmZlcjsKIAkJCVVucGluQnVmZmVyKGJ1Zkhkcik7CiAJCX0K QEAgLTI4MjAsNyArMjgyOSw3IEBAIEJ1ZmZlckdldFRhZyhCdWZmZXIgYnVmZmVyLCBSZWxGaWxl TG9jYXRvciAqcmxvY2F0b3IsIEZvcmtOdW1iZXIgKmZvcmtudW0sCiAgKiBhcyB0aGUgc2Vjb25k IHBhcmFtZXRlci4gIElmIG5vdCwgcGFzcyBOVUxMLgogICovCiBzdGF0aWMgdm9pZAotRmx1c2hC dWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbikKK0ZsdXNoQnVmZmVyKEJ1 ZmZlckRlc2MgKmJ1ZiwgU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJWExvZ1JlY1B0cglyZWNw dHI7CiAJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CkBAIC0yODQ1LDE0ICsyODU0 LDE0IEBAIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pCiAJ ZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKIAogCS8qIEZpbmQgc21nciByZWxh dGlvbiBmb3IgYnVmZmVyICovCi0JaWYgKHJlbG4gPT0gTlVMTCkKLQkJcmVsbiA9IHNtZ3JvcGVu KEJ1ZlRhZ0dldFJlbEZpbGVMb2NhdG9yKCZidWYtPnRhZyksIEludmFsaWRCYWNrZW5kSWQpOwor CWlmIChzZmlsZSA9PSBOVUxMKQorCQlzZmlsZSA9IHNtZ3JvcGVuKEJ1ZlRhZ0dldFJlbEZpbGVM b2NhdG9yKCZidWYtPnRhZyksIEludmFsaWRCYWNrZW5kSWQsIEJ1ZlRhZ0dldEZvcmtOdW0oJmJ1 Zi0+dGFnKSk7CiAKLQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9GTFVTSF9TVEFSVChCdWZUYWdH ZXRGb3JrTnVtKCZidWYtPnRhZyksCisJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfRkxVU0hfU1RB UlQoc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLAogCQkJCQkJCQkJCWJ1Zi0+dGFnLmJsb2Nr TnVtLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJ CQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCXJlbG4t PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOworCQkJCQkJCQkJCXNmaWxlLT5zbWdy X2xvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5s b2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxO dW1iZXIpOwogCiAJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihidWYpOwogCkBAIC0yOTA2LDggKzI5 MTUsNyBAQCBGbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuKQog CS8qCiAJICogYnVmVG9Xcml0ZSBpcyBlaXRoZXIgdGhlIHNoYXJlZCBidWZmZXIgb3IgYSBjb3B5 LCBhcyBhcHByb3ByaWF0ZS4KIAkgKi8KLQlzbWdyd3JpdGUocmVsbiwKLQkJCSAgQnVmVGFnR2V0 Rm9ya051bSgmYnVmLT50YWcpLAorCXNtZ3J3cml0ZShzZmlsZSwKIAkJCSAgYnVmLT50YWcuYmxv Y2tOdW0sCiAJCQkgIGJ1ZlRvV3JpdGUsCiAJCQkgIGZhbHNlKTsKQEAgLTI5MjgsMTEgKzI5MzYs MTEgQEAgRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbikKIAkg Ki8KIAlUZXJtaW5hdGVCdWZmZXJJTyhidWYsIHRydWUsIDApOwogCi0JVFJBQ0VfUE9TVEdSRVNR TF9CVUZGRVJfRkxVU0hfRE9ORShCdWZUYWdHZXRGb3JrTnVtKCZidWYtPnRhZyksCisJVFJBQ0Vf UE9TVEdSRVNRTF9CVUZGRVJfRkxVU0hfRE9ORShzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0s CiAJCQkJCQkJCQkgICBidWYtPnRhZy5ibG9ja051bSwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2NhdG9y LmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu cmVsTnVtYmVyKTsKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNP aWQsCisJCQkJCQkJCQkgICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkgICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyKTsKIAogCS8qIFBv cCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJj YWxsYmFjay5wcmV2aW91czsKQEAgLTI5NDcsNyArMjk1NSw3IEBAIEZsdXNoQnVmZmVyKEJ1ZmZl ckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pCiAgKiBpdCBtaWdodCBub3QgYmUuCiAgKi8K IEJsb2NrTnVtYmVyCi1SZWxhdGlvbkdldE51bWJlck9mQmxvY2tzSW5Gb3JrKFJlbGF0aW9uIHJl bGF0aW9uLCBGb3JrTnVtYmVyIGZvcmtOdW0pCitSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzSW5G b3JrKFJlbGF0aW9uIHJlbGF0aW9uLCBGb3JrTnVtYmVyIGZvcmtudW0pCiB7CiAJaWYgKFJFTEtJ TkRfSEFTX1RBQkxFX0FNKHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQpKQogCXsKQEAgLTI5NTks MTMgKzI5NjcsMTMgQEAgUmVsYXRpb25HZXROdW1iZXJPZkJsb2Nrc0luRm9yayhSZWxhdGlvbiBy ZWxhdGlvbiwgRm9ya051bWJlciBmb3JrTnVtKQogCQkgKi8KIAkJdWludDY0CQlzemJ5dGVzOwog Ci0JCXN6Ynl0ZXMgPSB0YWJsZV9yZWxhdGlvbl9zaXplKHJlbGF0aW9uLCBmb3JrTnVtKTsKKwkJ c3pieXRlcyA9IHRhYmxlX3JlbGF0aW9uX3NpemUocmVsYXRpb24sIGZvcmtudW0pOwogCiAJCXJl dHVybiAoc3pieXRlcyArIChCTENLU1ogLSAxKSkgLyBCTENLU1o7CiAJfQogCWVsc2UgaWYgKFJF TEtJTkRfSEFTX1NUT1JBR0UocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCkpCiAJewotCQlyZXR1 cm4gc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHJlbGF0aW9uKSwgZm9ya051bSk7CisJCXJl dHVybiBzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsYXRpb24sIGZvcmtudW0pKTsKIAl9 CiAJZWxzZQogCQlBc3NlcnQoZmFsc2UpOwpAQCAtMzAyOCw2ICszMDM2LDcgQEAgQnVmZmVyR2V0 TFNOQXRvbWljKEJ1ZmZlciBidWZmZXIpCiAKIAlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGJ1Zkhk cik7CiAJbHNuID0gUGFnZUdldExTTihwYWdlKTsKKwkKIAlVbmxvY2tCdWZIZHIoYnVmSGRyLCBi dWZfc3RhdGUpOwogCiAJcmV0dXJuIGxzbjsKQEAgLTMwNTUsMjYgKzMwNjQsMjAgQEAgQnVmZmVy R2V0TFNOQXRvbWljKEJ1ZmZlciBidWZmZXIpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1E cm9wUmVsYXRpb25CdWZmZXJzKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sIEZvcmtOdW1iZXIgKmZv cmtOdW0sCitEcm9wUmVsYXRpb25CdWZmZXJzKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNr ZW5kSWQgYmFja2VuZCwgRm9ya051bWJlciAqZm9ya251bSwKIAkJCQkJaW50IG5mb3JrcywgQmxv Y2tOdW1iZXIgKmZpcnN0RGVsQmxvY2spCiB7CiAJaW50CQkJaTsKIAlpbnQJCQlqOwotCVJlbEZp bGVMb2NhdG9yQmFja2VuZCBybG9jYXRvcjsKIAlCbG9ja051bWJlciBuRm9ya0Jsb2NrW01BWF9G T1JLTlVNXTsKIAl1aW50NjQJCW5CbG9ja3NUb0ludmFsaWRhdGUgPSAwOwogCi0JcmxvY2F0b3Ig PSBzbWdyX3JlbG4tPnNtZ3JfcmxvY2F0b3I7Ci0KIAkvKiBJZiBpdCdzIGEgbG9jYWwgcmVsYXRp b24sIGl0J3MgbG9jYWxidWYuYydzIHByb2JsZW0uICovCi0JaWYgKFJlbEZpbGVMb2NhdG9yQmFj a2VuZElzVGVtcChybG9jYXRvcikpCisJaWYgKGJhY2tlbmQgPT0gTXlCYWNrZW5kSWQpCiAJewot CQlpZiAocmxvY2F0b3IuYmFja2VuZCA9PSBNeUJhY2tlbmRJZCkKLQkJewotCQkJZm9yIChqID0g MDsgaiA8IG5mb3JrczsgaisrKQotCQkJCURyb3BSZWxhdGlvbkxvY2FsQnVmZmVycyhybG9jYXRv ci5sb2NhdG9yLCBmb3JrTnVtW2pdLAotCQkJCQkJCQkJCSBmaXJzdERlbEJsb2NrW2pdKTsKLQkJ fQorCQlmb3IgKGogPSAwOyBqIDwgbmZvcmtzOyBqKyspCisJCQlEcm9wUmVsYXRpb25Mb2NhbEJ1 ZmZlcnMocmxvY2F0b3IsIGZvcmtudW1bal0sCisJCQkJCQkJCQkgZmlyc3REZWxCbG9ja1tqXSk7 CiAJCXJldHVybjsKIAl9CiAKQEAgLTMxMDMsNyArMzEwNiwxMCBAQCBEcm9wUmVsYXRpb25CdWZm ZXJzKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sIEZvcmtOdW1iZXIgKmZvcmtOdW0sCiAJZm9yIChp ID0gMDsgaSA8IG5mb3JrczsgaSsrKQogCXsKIAkJLyogR2V0IHRoZSBudW1iZXIgb2YgYmxvY2tz IGZvciBhIHJlbGF0aW9uJ3MgZm9yayAqLwotCQluRm9ya0Jsb2NrW2ldID0gc21ncm5ibG9ja3Nf Y2FjaGVkKHNtZ3JfcmVsbiwgZm9ya051bVtpXSk7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwor CisJCXNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIGJhY2tlbmQsIGZvcmtudW1baV0pOworCQlu Rm9ya0Jsb2NrW2ldID0gc21ncm5ibG9ja3NfY2FjaGVkKHNmaWxlKTsKIAogCQlpZiAobkZvcmtC bG9ja1tpXSA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCiAJCXsKQEAgLTMxMjMsNyArMzEyOSw3IEBA IERyb3BSZWxhdGlvbkJ1ZmZlcnMoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwgRm9ya051bWJlciAq Zm9ya051bSwKIAkJbkJsb2Nrc1RvSW52YWxpZGF0ZSA8IEJVRl9EUk9QX0ZVTExfU0NBTl9USFJF U0hPTEQpCiAJewogCQlmb3IgKGogPSAwOyBqIDwgbmZvcmtzOyBqKyspCi0JCQlGaW5kQW5kRHJv cFJlbGF0aW9uQnVmZmVycyhybG9jYXRvci5sb2NhdG9yLCBmb3JrTnVtW2pdLAorCQkJRmluZEFu ZERyb3BSZWxhdGlvbkJ1ZmZlcnMocmxvY2F0b3IsIGZvcmtudW1bal0sCiAJCQkJCQkJCQkgICBu Rm9ya0Jsb2NrW2pdLCBmaXJzdERlbEJsb2NrW2pdKTsKIAkJcmV0dXJuOwogCX0KQEAgLTMxNDYs MTggKzMxNTIsMTggQEAgRHJvcFJlbGF0aW9uQnVmZmVycyhTTWdyUmVsYXRpb24gc21ncl9yZWxu LCBGb3JrTnVtYmVyICpmb3JrTnVtLAogCQkgKiBmYWxzZSBwb3NpdGl2ZXMgYXJlIHNhZmUgYmVj YXVzZSB3ZSdsbCByZWNoZWNrIGFmdGVyIGdldHRpbmcgdGhlCiAJCSAqIGJ1ZmZlciBsb2NrLgog CQkgKgotCQkgKiBXZSBjb3VsZCBjaGVjayBmb3JrTnVtIGFuZCBibG9ja051bSBhcyB3ZWxsIGFz IHRoZSBybG9jYXRvciwgYnV0CisJCSAqIFdlIGNvdWxkIGNoZWNrIGZvcmtudW0gYW5kIGJsb2Nr TnVtIGFzIHdlbGwgYXMgdGhlIHJsb2NhdG9yLCBidXQKIAkJICogdGhlIGluY3JlbWVudGFsIHdp biBmcm9tIGRvaW5nIHNvIHNlZW1zIHNtYWxsLgogCQkgKi8KLQkJaWYgKCFCdWZUYWdNYXRjaGVz UmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmcmxvY2F0b3IubG9jYXRvcikpCisJCWlmICgh QnVmVGFnTWF0Y2hlc1JlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZywgJnJsb2NhdG9yKSkKIAkJ CWNvbnRpbnVlOwogCiAJCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsKIAogCQlmb3Ig KGogPSAwOyBqIDwgbmZvcmtzOyBqKyspCiAJCXsKLQkJCWlmIChCdWZUYWdNYXRjaGVzUmVsRmls ZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmcmxvY2F0b3IubG9jYXRvcikgJiYKLQkJCQlCdWZUYWdH ZXRGb3JrTnVtKCZidWZIZHItPnRhZykgPT0gZm9ya051bVtqXSAmJgorCQkJaWYgKEJ1ZlRhZ01h dGNoZXNSZWxGaWxlTG9jYXRvcigmYnVmSGRyLT50YWcsICZybG9jYXRvcikgJiYKKwkJCQlCdWZU YWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZykgPT0gZm9ya251bVtqXSAmJgogCQkJCWJ1Zkhkci0+ dGFnLmJsb2NrTnVtID49IGZpcnN0RGVsQmxvY2tbal0pCiAJCQl7CiAJCQkJSW52YWxpZGF0ZUJ1 ZmZlcihidWZIZHIpOwkvKiByZWxlYXNlcyBzcGlubG9jayAqLwpAQCAtMzE3OCwxMSArMzE4NCwx MCBAQCBEcm9wUmVsYXRpb25CdWZmZXJzKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sIEZvcmtOdW1i ZXIgKmZvcmtOdW0sCiAgKgkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZAotRHJvcFJlbGF0aW9uc0Fs bEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCitEcm9wUmVs YXRpb25zQWxsQnVmZmVycyhSZWxGaWxlTG9jYXRvckJhY2tlbmQgKnJsb2NhdG9ycywgaW50IG5s b2NhdG9ycykKIHsKIAlpbnQJCQlpOwogCWludAkJCW4gPSAwOwotCVNNZ3JSZWxhdGlvbiAqcmVs czsKIAlCbG9ja051bWJlciAoKmJsb2NrKVtNQVhfRk9SS05VTSArIDFdOwogCXVpbnQ2NAkJbkJs b2Nrc1RvSW52YWxpZGF0ZSA9IDA7CiAJUmVsRmlsZUxvY2F0b3IgKmxvY2F0b3JzOwpAQCAtMzE5 MiwxOCArMzE5NywxOCBAQCBEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNt Z3JfcmVsbiwgaW50IG5sb2NhdG9ycykKIAlpZiAobmxvY2F0b3JzID09IDApCiAJCXJldHVybjsK IAotCXJlbHMgPSBwYWxsb2Moc2l6ZW9mKFNNZ3JSZWxhdGlvbikgKiBubG9jYXRvcnMpOwkvKiBu b24tbG9jYWwgcmVsYXRpb25zICovCisJbG9jYXRvcnMgPSBwYWxsb2Moc2l6ZW9mKFJlbEZpbGVM b2NhdG9yKSAqIG5sb2NhdG9ycyk7CS8qIG5vbi1sb2NhbCByZWxhdGlvbnMgKi8KIAogCS8qIElm IGl0J3MgYSBsb2NhbCByZWxhdGlvbiwgaXQncyBsb2NhbGJ1Zi5jJ3MgcHJvYmxlbS4gKi8KIAlm b3IgKGkgPSAwOyBpIDwgbmxvY2F0b3JzOyBpKyspCiAJewotCQlpZiAoUmVsRmlsZUxvY2F0b3JC YWNrZW5kSXNUZW1wKHNtZ3JfcmVsbltpXS0+c21ncl9ybG9jYXRvcikpCisJCWlmIChybG9jYXRv cnNbaV0uYmFja2VuZCAhPSBJbnZhbGlkQmFja2VuZElkKQogCQl7Ci0JCQlpZiAoc21ncl9yZWxu W2ldLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQgPT0gTXlCYWNrZW5kSWQpCi0JCQkJRHJvcFJlbGF0 aW9uQWxsTG9jYWxCdWZmZXJzKHNtZ3JfcmVsbltpXS0+c21ncl9ybG9jYXRvci5sb2NhdG9yKTsK KwkJCWlmIChybG9jYXRvcnNbaV0uYmFja2VuZCA9PSBNeUJhY2tlbmRJZCkKKwkJCQlEcm9wUmVs YXRpb25BbGxMb2NhbEJ1ZmZlcnMocmxvY2F0b3JzW2ldLmxvY2F0b3IpOwogCQl9CiAJCWVsc2UK LQkJCXJlbHNbbisrXSA9IHNtZ3JfcmVsbltpXTsKKwkJCWxvY2F0b3JzW24rK10gPSBybG9jYXRv cnNbaV0ubG9jYXRvcjsKIAl9CiAKIAkvKgpAQCAtMzIxMiw3ICszMjE3LDcgQEAgRHJvcFJlbGF0 aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCiAJ ICovCiAJaWYgKG4gPT0gMCkKIAl7Ci0JCXBmcmVlKHJlbHMpOworCQlwZnJlZShsb2NhdG9ycyk7 CiAJCXJldHVybjsKIAl9CiAKQEAgLTMyMzIsMTIgKzMyMzcsMTMgQEAgRHJvcFJlbGF0aW9uc0Fs bEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCiAJCWZvciAo aW50IGogPSAwOyBqIDw9IE1BWF9GT1JLTlVNOyBqKyspCiAJCXsKIAkJCS8qIEdldCB0aGUgbnVt YmVyIG9mIGJsb2NrcyBmb3IgYSByZWxhdGlvbidzIGZvcmsuICovCi0JCQlibG9ja1tpXVtqXSA9 IHNtZ3JuYmxvY2tzX2NhY2hlZChyZWxzW2ldLCBqKTsKKwkJCVNNZ3JGaWxlSGFuZGxlIHNmaWxl ID0gc21ncm9wZW4obG9jYXRvcnNbaV0sIEludmFsaWRCYWNrZW5kSWQsIGopOworCQkJYmxvY2tb aV1bal0gPSBzbWdybmJsb2Nrc19jYWNoZWQoc2ZpbGUpOwogCiAJCQkvKiBXZSBuZWVkIHRvIG9u bHkgY29uc2lkZXIgdGhlIHJlbGF0aW9uIGZvcmtzIHRoYXQgZXhpc3RzLiAqLwogCQkJaWYgKGJs b2NrW2ldW2pdID09IEludmFsaWRCbG9ja051bWJlcikKIAkJCXsKLQkJCQlpZiAoIXNtZ3JleGlz dHMocmVsc1tpXSwgaikpCisJCQkJaWYgKCFzbWdyZXhpc3RzKHNmaWxlKSkKIAkJCQkJY29udGlu dWU7CiAJCQkJY2FjaGVkID0gZmFsc2U7CiAJCQkJYnJlYWs7CkBAIC0zMjYzLDIwICszMjY5LDE3 IEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncl9yZWxuLCBpbnQg bmxvY2F0b3JzKQogCQkJCQljb250aW51ZTsKIAogCQkJCS8qIGRyb3AgYWxsIHRoZSBidWZmZXJz IGZvciBhIHBhcnRpY3VsYXIgcmVsYXRpb24gZm9yayAqLwotCQkJCUZpbmRBbmREcm9wUmVsYXRp b25CdWZmZXJzKHJlbHNbaV0tPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwKKwkJCQlGaW5kQW5kRHJv cFJlbGF0aW9uQnVmZmVycyhsb2NhdG9yc1tpXSwKIAkJCQkJCQkJCQkgICBqLCBibG9ja1tpXVtq XSwgMCk7CiAJCQl9CiAJCX0KIAogCQlwZnJlZShibG9jayk7Ci0JCXBmcmVlKHJlbHMpOworCQlw ZnJlZShsb2NhdG9ycyk7CiAJCXJldHVybjsKIAl9CiAKIAlwZnJlZShibG9jayk7Ci0JbG9jYXRv cnMgPSBwYWxsb2Moc2l6ZW9mKFJlbEZpbGVMb2NhdG9yKSAqIG4pOwkvKiBub24tbG9jYWwgcmVs YXRpb25zICovCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykKLQkJbG9jYXRvcnNbaV0gPSByZWxz W2ldLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3I7CiAKIAkvKgogCSAqIEZvciBsb3cgbnVtYmVyIG9m IHJlbGF0aW9ucyB0byBkcm9wIGp1c3QgdXNlIGEgc2ltcGxlIHdhbGsgdGhyb3VnaCwgdG8KQEAg LTMzMzYsNyArMzMzOSw2IEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAq c21ncl9yZWxuLCBpbnQgbmxvY2F0b3JzKQogCX0KIAogCXBmcmVlKGxvY2F0b3JzKTsKLQlwZnJl ZShyZWxzKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMzQ5LDcgKzMzNTEsNyBAQCBEcm9w UmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5sb2NhdG9y cykKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyB2b2lkCi1GaW5kQW5kRHJvcFJlbGF0aW9u QnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLAorRmlu ZEFuZERyb3BSZWxhdGlvbkJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1i ZXIgZm9ya251bSwKIAkJCQkJCSAgIEJsb2NrTnVtYmVyIG5Gb3JrQmxvY2ssCiAJCQkJCQkgICBC bG9ja051bWJlciBmaXJzdERlbEJsb2NrKQogewpAQCAtMzM2NSw3ICszMzY3LDcgQEAgRmluZEFu ZERyb3BSZWxhdGlvbkJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIg Zm9ya051bSwKIAkJdWludDMyCQlidWZfc3RhdGU7CiAKIAkJLyogY3JlYXRlIGEgdGFnIHNvIHdl IGNhbiBsb29rdXAgdGhlIGJ1ZmZlciAqLwotCQlJbml0QnVmZmVyVGFnKCZidWZUYWcsICZybG9j YXRvciwgZm9ya051bSwgY3VyQmxvY2spOworCQlJbml0QnVmZmVyVGFnKCZidWZUYWcsICZybG9j YXRvciwgZm9ya251bSwgY3VyQmxvY2spOwogCiAJCS8qIGRldGVybWluZSBpdHMgaGFzaCBjb2Rl IGFuZCBwYXJ0aXRpb24gbG9jayBJRCAqLwogCQlidWZIYXNoID0gQnVmVGFibGVIYXNoQ29kZSgm YnVmVGFnKTsKQEAgLTMzOTAsNyArMzM5Miw3IEBAIEZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJz KFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCWJ1Zl9zdGF0 ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsKIAogCQlpZiAoQnVmVGFnTWF0Y2hlc1JlbEZpbGVMb2Nh dG9yKCZidWZIZHItPnRhZywgJnJsb2NhdG9yKSAmJgotCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVm SGRyLT50YWcpID09IGZvcmtOdW0gJiYKKwkJCUJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFn KSA9PSBmb3JrbnVtICYmCiAJCQlidWZIZHItPnRhZy5ibG9ja051bSA+PSBmaXJzdERlbEJsb2Nr KQogCQkJSW52YWxpZGF0ZUJ1ZmZlcihidWZIZHIpOwkvKiByZWxlYXNlcyBzcGlubG9jayAqLwog CQllbHNlCkBAIC0zNTQ1LDggKzM1NDcsNyBAQCBGbHVzaFJlbGF0aW9uQnVmZmVycyhSZWxhdGlv biByZWwpCiAKIAkJCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKGxvY2FscGFnZSwgYnVmSGRyLT50 YWcuYmxvY2tOdW0pOwogCi0JCQkJc21ncndyaXRlKFJlbGF0aW9uR2V0U21ncihyZWwpLAotCQkJ CQkJICBCdWZUYWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZyksCisJCQkJc21ncndyaXRlKFJlbGF0 aW9uR2V0U21ncihyZWwsIEJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSksCiAJCQkJCQkg IGJ1Zkhkci0+dGFnLmJsb2NrTnVtLAogCQkJCQkJICBsb2NhbHBhZ2UsCiAJCQkJCQkgIGZhbHNl KTsKQEAgLTM1ODYsNyArMzU4Nyw3IEBAIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJl bCkKIAkJewogCQkJUGluQnVmZmVyX0xvY2tlZChidWZIZHIpOwogCQkJTFdMb2NrQWNxdWlyZShC dWZmZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2soYnVmSGRyKSwgTFdfU0hBUkVEKTsKLQkJCUZs dXNoQnVmZmVyKGJ1ZkhkciwgUmVsYXRpb25HZXRTbWdyKHJlbCkpOworCQkJRmx1c2hCdWZmZXIo YnVmSGRyLCBSZWxhdGlvbkdldFNtZ3IocmVsLCBidWZIZHItPnRhZy5mb3JrTnVtKSk7CiAJCQlM V0xvY2tSZWxlYXNlKEJ1ZmZlckRlc2NyaXB0b3JHZXRDb250ZW50TG9jayhidWZIZHIpKTsKIAkJ CVVucGluQnVmZmVyKGJ1Zkhkcik7CiAJCX0KQEAgLTM2MDUsMjUgKzM2MDYsMjAgQEAgRmx1c2hS ZWxhdGlvbkJ1ZmZlcnMoUmVsYXRpb24gcmVsKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZAot Rmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncnMsIGludCBucmVscykK K0ZsdXNoUmVsYXRpb25zQWxsQnVmZmVycyhSZWxGaWxlTG9jYXRvciAqcmVscywgaW50IG5yZWxz KQogewogCWludAkJCWk7Ci0JU01nclNvcnRBcnJheSAqc3JlbHM7CisJUmVsRmlsZUxvY2F0b3Ig KmxvY2F0b3JzID0gTlVMTDsKIAlib29sCQl1c2VfYnNlYXJjaDsKIAogCWlmIChucmVscyA9PSAw KQogCQlyZXR1cm47CiAKIAkvKiBmaWxsLWluIGFycmF5IGZvciBxc29ydCAqLwotCXNyZWxzID0g cGFsbG9jKHNpemVvZihTTWdyU29ydEFycmF5KSAqIG5yZWxzKTsKKwlsb2NhdG9ycyA9IHBhbGxv YyhzaXplb2YoUmVsRmlsZUxvY2F0b3IpICogbnJlbHMpOwogCiAJZm9yIChpID0gMDsgaSA8IG5y ZWxzOyBpKyspCi0JewotCQlBc3NlcnQoIVJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChzbWdy c1tpXS0+c21ncl9ybG9jYXRvcikpOwotCi0JCXNyZWxzW2ldLnJsb2NhdG9yID0gc21ncnNbaV0t PnNtZ3JfcmxvY2F0b3IubG9jYXRvcjsKLQkJc3JlbHNbaV0uc3JlbCA9IHNtZ3JzW2ldOwotCX0K KwkJbG9jYXRvcnNbaV0gPSByZWxzW2ldOwogCiAJLyoKIAkgKiBTYXZlIHRoZSBic2VhcmNoIG92 ZXJoZWFkIGZvciBsb3cgbnVtYmVyIG9mIHJlbGF0aW9ucyB0byBzeW5jLiBTZWUKQEAgLTM2MzEs MTYgKzM2MjcsMTYgQEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21n cnMsIGludCBucmVscykKIAkgKi8KIAl1c2VfYnNlYXJjaCA9IG5yZWxzID4gUkVMU19CU0VBUkNI X1RIUkVTSE9MRDsKIAotCS8qIHNvcnQgdGhlIGxpc3Qgb2YgU01nclJlbGF0aW9ucyBpZiBuZWNl c3NhcnkgKi8KKwkvKiBzb3J0IHRoZSBsaXN0IG9mIGxvY2F0b3JzIGlmIG5lY2Vzc2FyeSAqLwog CWlmICh1c2VfYnNlYXJjaCkKLQkJcGdfcXNvcnQoc3JlbHMsIG5yZWxzLCBzaXplb2YoU01nclNv cnRBcnJheSksIHJsb2NhdG9yX2NvbXBhcmF0b3IpOworCQlwZ19xc29ydChsb2NhdG9ycywgbnJl bHMsIHNpemVvZihSZWxGaWxlTG9jYXRvciksIHJsb2NhdG9yX2NvbXBhcmF0b3IpOwogCiAJLyog TWFrZSBzdXJlIHdlIGNhbiBoYW5kbGUgdGhlIHBpbiBpbnNpZGUgdGhlIGxvb3AgKi8KIAlSZXNv dXJjZU93bmVyRW5sYXJnZUJ1ZmZlcnMoQ3VycmVudFJlc291cmNlT3duZXIpOwogCiAJZm9yIChp ID0gMDsgaSA8IE5CdWZmZXJzOyBpKyspCiAJewotCQlTTWdyU29ydEFycmF5ICpzcmVsZW50ID0g TlVMTDsKKwkJUmVsRmlsZUxvY2F0b3IgKmZvdW5kID0gTlVMTDsKIAkJQnVmZmVyRGVzYyAqYnVm SGRyID0gR2V0QnVmZmVyRGVzY3JpcHRvcihpKTsKIAkJdWludDMyCQlidWZfc3RhdGU7CiAKQEAg LTM2NTUsOSArMzY1MSw5IEBAIEZsdXNoUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24g KnNtZ3JzLCBpbnQgbnJlbHMpCiAKIAkJCWZvciAoaiA9IDA7IGogPCBucmVsczsgaisrKQogCQkJ ewotCQkJCWlmIChCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmc3Jl bHNbal0ucmxvY2F0b3IpKQorCQkJCWlmIChCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1 Zkhkci0+dGFnLCAmbG9jYXRvcnNbal0pKQogCQkJCXsKLQkJCQkJc3JlbGVudCA9ICZzcmVsc1tq XTsKKwkJCQkJZm91bmQgPSAmbG9jYXRvcnNbal07CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0K QEAgLTM2NjcsMjQgKzM2NjMsMjYgQEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxh dGlvbiAqc21ncnMsIGludCBucmVscykKIAkJCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yOwogCiAJ CQlybG9jYXRvciA9IEJ1ZlRhZ0dldFJlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZyk7Ci0JCQlz cmVsZW50ID0gYnNlYXJjaCgoY29uc3Qgdm9pZCAqKSAmKHJsb2NhdG9yKSwKLQkJCQkJCQkgIHNy ZWxzLCBucmVscywgc2l6ZW9mKFNNZ3JTb3J0QXJyYXkpLAorCQkJZm91bmQgPSBic2VhcmNoKChj b25zdCB2b2lkICopICYocmxvY2F0b3IpLAorCQkJCQkJCSAgbG9jYXRvcnMsIG5yZWxzLCBzaXpl b2YoUmVsRmlsZUxvY2F0b3IpLAogCQkJCQkJCSAgcmxvY2F0b3JfY29tcGFyYXRvcik7CiAJCX0K IAogCQkvKiBidWZmZXIgZG9lc24ndCBiZWxvbmcgdG8gYW55IG9mIHRoZSBnaXZlbiByZWxmaWxl bG9jYXRvcnM7IHNraXAgaXQgKi8KLQkJaWYgKHNyZWxlbnQgPT0gTlVMTCkKKwkJaWYgKGZvdW5k ID09IE5VTEwpCiAJCQljb250aW51ZTsKIAorCQkvKiBGSVhNRTogY2FjaGUgU01nckZpbGVIYW5k bGVzIGZvciB0aGUgcmVscywgYW5kIHBhc3MgdG8gRmx1c2hCdWZmZXIgKi8KKwogCQlSZXNlcnZl UHJpdmF0ZVJlZkNvdW50RW50cnkoKTsKIAogCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGJ1Zkhk cik7Ci0JCWlmIChCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmc3Jl bGVudC0+cmxvY2F0b3IpICYmCisJCWlmIChCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1 Zkhkci0+dGFnLCBmb3VuZCkgJiYKIAkJCShidWZfc3RhdGUgJiAoQk1fVkFMSUQgfCBCTV9ESVJU WSkpID09IChCTV9WQUxJRCB8IEJNX0RJUlRZKSkKIAkJewogCQkJUGluQnVmZmVyX0xvY2tlZChi dWZIZHIpOwogCQkJTFdMb2NrQWNxdWlyZShCdWZmZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2so YnVmSGRyKSwgTFdfU0hBUkVEKTsKLQkJCUZsdXNoQnVmZmVyKGJ1Zkhkciwgc3JlbGVudC0+c3Jl bCk7CisJCQlGbHVzaEJ1ZmZlcihidWZIZHIsIE5VTEwpOwogCQkJTFdMb2NrUmVsZWFzZShCdWZm ZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2soYnVmSGRyKSk7CiAJCQlVbnBpbkJ1ZmZlcihidWZI ZHIpOwogCQl9CkBAIC0zNjkyLDcgKzM2OTAsNyBAQCBGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMo U01nclJlbGF0aW9uICpzbWdycywgaW50IG5yZWxzKQogCQkJVW5sb2NrQnVmSGRyKGJ1Zkhkciwg YnVmX3N0YXRlKTsKIAl9CiAKLQlwZnJlZShzcmVscyk7CisJcGZyZWUobG9jYXRvcnMpOwogfQog CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM3MDgsNyArMzcwNiw3IEBAIEZsdXNoUmVsYXRpb25zQWxs QnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JzLCBpbnQgbnJlbHMpCiBzdGF0aWMgdm9pZAogUmVs YXRpb25Db3B5U3RvcmFnZVVzaW5nQnVmZmVyKFJlbEZpbGVMb2NhdG9yIHNyY2xvY2F0b3IsCiAJ CQkJCQkJICAgUmVsRmlsZUxvY2F0b3IgZHN0bG9jYXRvciwKLQkJCQkJCQkgICBGb3JrTnVtYmVy IGZvcmtOdW0sIGJvb2wgcGVybWFuZW50KQorCQkJCQkJCSAgIEZvcmtOdW1iZXIgZm9ya251bSwg Ym9vbCBwZXJtYW5lbnQpCiB7CiAJQnVmZmVyCQlzcmNCdWY7CiAJQnVmZmVyCQlkc3RCdWY7CkBA IC0zNzI2LDExICszNzI0LDExIEBAIFJlbGF0aW9uQ29weVN0b3JhZ2VVc2luZ0J1ZmZlcihSZWxG aWxlTG9jYXRvciBzcmNsb2NhdG9yLAogCSAqIGNhbiBza2lwIGl0IHdoZW4gY29weWluZyBhbnkg Zm9yayBvZiBhbiB1bmxvZ2dlZCByZWxhdGlvbiBvdGhlciB0aGFuCiAJICogdGhlIGluaXQgZm9y ay4KIAkgKi8KLQl1c2Vfd2FsID0gWExvZ0lzTmVlZGVkKCkgJiYgKHBlcm1hbmVudCB8fCBmb3Jr TnVtID09IElOSVRfRk9SS05VTSk7CisJdXNlX3dhbCA9IFhMb2dJc05lZWRlZCgpICYmIChwZXJt YW5lbnQgfHwgZm9ya251bSA9PSBJTklUX0ZPUktOVU0pOwogCiAJLyogR2V0IG51bWJlciBvZiBi bG9ja3MgaW4gdGhlIHNvdXJjZSByZWxhdGlvbi4gKi8KLQluYmxvY2tzID0gc21ncm5ibG9ja3Mo c21ncm9wZW4oc3JjbG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCksCi0JCQkJCQkgIGZvcmtOdW0p OworCW5ibG9ja3MgPSBzbWdybmJsb2NrcyhzbWdyb3BlbihzcmNsb2NhdG9yLCBJbnZhbGlkQmFj a2VuZElkLCBmb3JrbnVtKSk7CisJCQkJCQkgIAogCiAJLyogTm90aGluZyB0byBjb3B5OyBqdXN0 IHJldHVybi4gKi8KIAlpZiAobmJsb2NrcyA9PSAwKQpAQCAtMzc0MSw3ICszNzM5LDcgQEAgUmVs YXRpb25Db3B5U3RvcmFnZVVzaW5nQnVmZmVyKFJlbEZpbGVMb2NhdG9yIHNyY2xvY2F0b3IsCiAJ ICogcmVsYXRpb24gYmVmb3JlIHN0YXJ0aW5nIHRvIGNvcHkgYmxvY2sgYnkgYmxvY2suCiAJICov CiAJbWVtc2V0KGJ1Zi5kYXRhLCAwLCBCTENLU1opOwotCXNtZ3JleHRlbmQoc21ncm9wZW4oZHN0 bG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCksIGZvcmtOdW0sIG5ibG9ja3MgLSAxLAorCXNtZ3Jl eHRlbmQoc21ncm9wZW4oZHN0bG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya251bSksIG5i bG9ja3MgLSAxLAogCQkJICAgYnVmLmRhdGEsIHRydWUpOwogCiAJLyogVGhpcyBpcyBhIGJ1bGsg b3BlcmF0aW9uLCBzbyB1c2UgYnVmZmVyIGFjY2VzcyBzdHJhdGVnaWVzLiAqLwpAQCAtMzc1NCwx NCArMzc1MiwxNCBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlVXNpbmdCdWZmZXIoUmVsRmlsZUxvY2F0 b3Igc3JjbG9jYXRvciwKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkvKiBSZWFkIGJs b2NrIGZyb20gc291cmNlIHJlbGF0aW9uLiAqLwotCQlzcmNCdWYgPSBSZWFkQnVmZmVyV2l0aG91 dFJlbGNhY2hlKHNyY2xvY2F0b3IsIGZvcmtOdW0sIGJsa25vLAorCQlzcmNCdWYgPSBSZWFkQnVm ZmVyV2l0aG91dFJlbGNhY2hlKHNyY2xvY2F0b3IsIGZvcmtudW0sIGJsa25vLAogCQkJCQkJCQkJ CSAgIFJCTV9OT1JNQUwsIGJzdHJhdGVneV9zcmMsCiAJCQkJCQkJCQkJICAgcGVybWFuZW50KTsK IAkJTG9ja0J1ZmZlcihzcmNCdWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAkJc3JjUGFnZSA9IEJ1 ZmZlckdldFBhZ2Uoc3JjQnVmKTsKIAogCQkvKiBVc2UgUF9ORVcgdG8gZXh0ZW5kIHRoZSBkZXN0 aW5hdGlvbiByZWxhdGlvbi4gKi8KLQkJZHN0QnVmID0gUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNo ZShkc3Rsb2NhdG9yLCBmb3JrTnVtLCBibGtubywKKwkJZHN0QnVmID0gUmVhZEJ1ZmZlcldpdGhv dXRSZWxjYWNoZShkc3Rsb2NhdG9yLCBmb3JrbnVtLCBibGtubywKIAkJCQkJCQkJCQkgICBSQk1f Tk9STUFMLCBic3RyYXRlZ3lfZHN0LAogCQkJCQkJCQkJCSAgIHBlcm1hbmVudCk7CiAJCUxvY2tC dWZmZXIoZHN0QnVmLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOwpAQCAtMzc5OSw3ICszNzk3LDYg QEAgdm9pZAogQ3JlYXRlQW5kQ29weVJlbGF0aW9uRGF0YShSZWxGaWxlTG9jYXRvciBzcmNfcmxv Y2F0b3IsCiAJCQkJCQkgIFJlbEZpbGVMb2NhdG9yIGRzdF9ybG9jYXRvciwgYm9vbCBwZXJtYW5l bnQpCiB7Ci0JUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yOwogCWNoYXIJCXJlbHBlcnNp c3RlbmNlOwogCiAJLyogU2V0IHRoZSByZWxwZXJzaXN0ZW5jZS4gKi8KQEAgLTM4MTksMzQgKzM4 MTYsMzAgQEAgQ3JlYXRlQW5kQ29weVJlbGF0aW9uRGF0YShSZWxGaWxlTG9jYXRvciBzcmNfcmxv Y2F0b3IsCiAJCQkJCQkJCSAgIHBlcm1hbmVudCk7CiAKIAkvKiBjb3B5IHRob3NlIGV4dHJhIGZv cmtzIHRoYXQgZXhpc3QgKi8KLQlmb3IgKEZvcmtOdW1iZXIgZm9ya051bSA9IE1BSU5fRk9SS05V TSArIDE7Ci0JCSBmb3JrTnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrTnVtKyspCisJZm9yIChGb3Jr TnVtYmVyIGZvcmtudW0gPSBNQUlOX0ZPUktOVU0gKyAxOworCQkgZm9ya251bSA8PSBNQVhfRk9S S05VTTsgZm9ya251bSsrKQogCXsKLQkJaWYgKHNtZ3JleGlzdHMoc21ncm9wZW4oc3JjX3Jsb2Nh dG9yLCBJbnZhbGlkQmFja2VuZElkKSwgZm9ya051bSkpCisJCWlmIChzbWdyZXhpc3RzKHNtZ3Jv cGVuKHNyY19ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya251bSkpKQogCQl7Ci0JCQlz bWdyY3JlYXRlKHNtZ3JvcGVuKGRzdF9ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCksIGZvcmtO dW0sIGZhbHNlKTsKKwkJCXNtZ3JjcmVhdGUoc21ncm9wZW4oZHN0X3Jsb2NhdG9yLCBJbnZhbGlk QmFja2VuZElkLCBmb3JrbnVtKSwgZmFsc2UpOwogCiAJCQkvKgogCQkJICogV0FMIGxvZyBjcmVh dGlvbiBpZiB0aGUgcmVsYXRpb24gaXMgcGVyc2lzdGVudCwgb3IgdGhpcyBpcyB0aGUKIAkJCSAq IGluaXQgZm9yayBvZiBhbiB1bmxvZ2dlZCByZWxhdGlvbi4KIAkJCSAqLwotCQkJaWYgKHBlcm1h bmVudCB8fCBmb3JrTnVtID09IElOSVRfRk9SS05VTSkKLQkJCQlsb2dfc21ncmNyZWF0ZSgmZHN0 X3Jsb2NhdG9yLCBmb3JrTnVtKTsKKwkJCWlmIChwZXJtYW5lbnQgfHwgZm9ya251bSA9PSBJTklU X0ZPUktOVU0pCisJCQkJbG9nX3NtZ3JjcmVhdGUoJmRzdF9ybG9jYXRvciwgZm9ya251bSk7CiAK IAkJCS8qIENvcHkgYSBmb3JrJ3MgZGF0YSwgYmxvY2sgYnkgYmxvY2suICovCi0JCQlSZWxhdGlv bkNvcHlTdG9yYWdlVXNpbmdCdWZmZXIoc3JjX3Jsb2NhdG9yLCBkc3RfcmxvY2F0b3IsIGZvcmtO dW0sCisJCQlSZWxhdGlvbkNvcHlTdG9yYWdlVXNpbmdCdWZmZXIoc3JjX3Jsb2NhdG9yLCBkc3Rf cmxvY2F0b3IsIGZvcmtudW0sCiAJCQkJCQkJCQkJICAgcGVybWFuZW50KTsKIAkJfQogCX0KIAot CS8qIGNsb3NlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gc21nciBpZiBleGlzdHMuICovCi0Jcmxv Y2F0b3IuYmFja2VuZCA9IEludmFsaWRCYWNrZW5kSWQ7CiAKLQlybG9jYXRvci5sb2NhdG9yID0g c3JjX3Jsb2NhdG9yOwotCXNtZ3JjbG9zZXJlbGxvY2F0b3IocmxvY2F0b3IpOworCXNtZ3JjbG9z ZXJlbGxvY2F0b3Ioc3JjX3Jsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkKTsKIAotCXJsb2NhdG9y LmxvY2F0b3IgPSBkc3RfcmxvY2F0b3I7Ci0Jc21ncmNsb3NlcmVsbG9jYXRvcihybG9jYXRvcik7 CisJc21ncmNsb3NlcmVsbG9jYXRvcihkc3RfcmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOwog fQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ5NjcsNyArNDk2MCw3IEBAIElzc3VlUGVuZGluZ1dy aXRlYmFja3MoV3JpdGViYWNrQ29udGV4dCAqY29udGV4dCkKIAl7CiAJCVBlbmRpbmdXcml0ZWJh Y2sgKmN1cjsKIAkJUGVuZGluZ1dyaXRlYmFjayAqbmV4dDsKLQkJU01nclJlbGF0aW9uIHJlbG47 CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCQlpbnQJCQlhaGVhZDsKIAkJQnVmZmVyVGFnCXRh ZzsKIAkJUmVsRmlsZUxvY2F0b3IgY3VycmxvY2F0b3I7CkBAIC01MDA3LDggKzUwMDAsOCBAQCBJ c3N1ZVBlbmRpbmdXcml0ZWJhY2tzKFdyaXRlYmFja0NvbnRleHQgKmNvbnRleHQpCiAJCWkgKz0g YWhlYWQ7CiAKIAkJLyogYW5kIGZpbmFsbHkgdGVsbCB0aGUga2VybmVsIHRvIHdyaXRlIHRoZSBk YXRhIHRvIHN0b3JhZ2UgKi8KLQkJcmVsbiA9IHNtZ3JvcGVuKGN1cnJsb2NhdG9yLCBJbnZhbGlk QmFja2VuZElkKTsKLQkJc21ncndyaXRlYmFjayhyZWxuLCBCdWZUYWdHZXRGb3JrTnVtKCZ0YWcp LCB0YWcuYmxvY2tOdW0sIG5ibG9ja3MpOworCQlzZmlsZSA9IHNtZ3JvcGVuKGN1cnJsb2NhdG9y LCBJbnZhbGlkQmFja2VuZElkLCBCdWZUYWdHZXRGb3JrTnVtKCZ0YWcpKTsKKwkJc21ncndyaXRl YmFjayhzZmlsZSwgdGFnLmJsb2NrTnVtLCBuYmxvY2tzKTsKIAl9CiAKIAljb250ZXh0LT5ucl9w ZW5kaW5nID0gMDsKQEAgLTUwMzAsMyArNTAyMywyOSBAQCBUZXN0Rm9yT2xkU25hcHNob3RfaW1w bChTbmFwc2hvdCBzbmFwc2hvdCwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9TTkFQU0hPVF9UT09fT0xEKSwKIAkJCQkgZXJybXNnKCJzbmFwc2hvdCB0b28gb2xkIikp KTsKIH0KKworLyoKKyAqIENoZWNrIGlmIGEgYnVmZmVyIHRhZyBpcyBjdXJyZW50bHkgbWFwcGVk LgorICoKKyAqIFhYWCBEdWJpb3VzIHNlbWFudGljczsgbmVlZGVkIG9ubHkgZm9yIG11bHRpeGFj dCdzIGhhbmRsaW5nIGZvcgorICogaW5jb25zaXN0ZW50IHN0YXRlcy4KKyAqLworYm9vbAorQnVm ZmVyUHJvYmUoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwgQmxv Y2tOdW1iZXIgYmxvY2tOdW0pCit7CisJQnVmZmVyVGFnCXRhZzsKKwl1aW50MzIJCWhhc2g7CisJ TFdMb2NrCSAgICpwYXJ0aXRpb25Mb2NrOworCWludAkJCWJ1Zl9pZDsKKworCUluaXRCdWZmZXJU YWcoJnRhZywgJnJsb2NhdG9yLCBmb3JrbnVtLCBibG9ja051bSk7CisKKwloYXNoID0gQnVmVGFi bGVIYXNoQ29kZSgmdGFnKTsKKwlwYXJ0aXRpb25Mb2NrID0gQnVmTWFwcGluZ1BhcnRpdGlvbkxv Y2soaGFzaCk7CisKKwlMV0xvY2tBY3F1aXJlKHBhcnRpdGlvbkxvY2ssIExXX1NIQVJFRCk7CisJ YnVmX2lkID0gQnVmVGFibGVMb29rdXAoJnRhZywgaGFzaCk7CisJTFdMb2NrUmVsZWFzZShwYXJ0 aXRpb25Mb2NrKTsKKworCXJldHVybiBidWZfaWQgPj0gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2xvY2FsYnVmLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9sb2NhbGJ1Zi5jCmluZGV4IGIyNzIwZGY2ZWFhLi5kMjY4NDU4YzRiNSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYworKysgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9sb2NhbGJ1Zi5jCkBAIC02MSwxNCArNjEsMTMgQEAgc3RhdGljIEJs b2NrIEdldExvY2FsQnVmZmVyU3RvcmFnZSh2b2lkKTsKICAqIE5vLW9wIGlmIHByZWZldGNoaW5n IGlzbid0IGNvbXBpbGVkIGluLgogICovCiBQcmVmZXRjaEJ1ZmZlclJlc3VsdAotUHJlZmV0Y2hM b2NhbEJ1ZmZlcihTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLAotCQkJCQlC bG9ja051bWJlciBibG9ja051bSkKK1ByZWZldGNoTG9jYWxCdWZmZXIoU01nckZpbGVIYW5kbGUg c2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQogewogCVByZWZldGNoQnVmZmVyUmVzdWx0IHJl c3VsdCA9IHtJbnZhbGlkQnVmZmVyLCBmYWxzZX07CiAJQnVmZmVyVGFnCW5ld1RhZzsJCQkvKiBp ZGVudGl0eSBvZiByZXF1ZXN0ZWQgYmxvY2sgKi8KIAlMb2NhbEJ1ZmZlckxvb2t1cEVudCAqaHJl c3VsdDsKIAotCUluaXRCdWZmZXJUYWcoJm5ld1RhZywgJnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9j YXRvciwgZm9ya051bSwgYmxvY2tOdW0pOworCUluaXRCdWZmZXJUYWcoJm5ld1RhZywgJnNmaWxl LT5zbWdyX2xvY2F0b3IubG9jYXRvciwgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibG9j a051bSk7CiAKIAkvKiBJbml0aWFsaXplIGxvY2FsIGJ1ZmZlcnMgaWYgZmlyc3QgcmVxdWVzdCBp biB0aGlzIHNlc3Npb24gKi8KIAlpZiAoTG9jYWxCdWZIYXNoID09IE5VTEwpCkBAIC04Nyw3ICs4 Niw3IEBAIFByZWZldGNoTG9jYWxCdWZmZXIoU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIg Zm9ya051bSwKIAl7CiAjaWZkZWYgVVNFX1BSRUZFVENICiAJCS8qIE5vdCBpbiBidWZmZXJzLCBz byBpbml0aWF0ZSBwcmVmZXRjaCAqLwotCQlzbWdycHJlZmV0Y2goc21nciwgZm9ya051bSwgYmxv Y2tOdW0pOworCQlzbWdycHJlZmV0Y2goc2ZpbGUsIGJsb2NrTnVtKTsKIAkJcmVzdWx0LmluaXRp YXRlZF9pbyA9IHRydWU7CiAjZW5kaWYJCQkJCQkJLyogVVNFX1BSRUZFVENIICovCiAJfQpAQCAt MTA2LDggKzEwNSw3IEBAIFByZWZldGNoTG9jYWxCdWZmZXIoU01nclJlbGF0aW9uIHNtZ3IsIEZv cmtOdW1iZXIgZm9ya051bSwKICAqIChoZW5jZSwgdXNhZ2VfY291bnQgaXMgYWx3YXlzIGFkdmFu Y2VkKS4KICAqLwogQnVmZmVyRGVzYyAqCi1Mb2NhbEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBz bWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAotCQkJCSBib29s ICpmb3VuZFB0cikKK0xvY2FsQnVmZmVyQWxsb2MoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2Nr TnVtYmVyIGJsb2NrTnVtLCBib29sICpmb3VuZFB0cikKIHsKIAlCdWZmZXJUYWcJbmV3VGFnOwkJ CS8qIGlkZW50aXR5IG9mIHJlcXVlc3RlZCBibG9jayAqLwogCUxvY2FsQnVmZmVyTG9va3VwRW50 ICpocmVzdWx0OwpAQCAtMTE3LDcgKzExNSw3IEBAIExvY2FsQnVmZmVyQWxsb2MoU01nclJlbGF0 aW9uIHNtZ3IsIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJYm9v bAkJZm91bmQ7CiAJdWludDMyCQlidWZfc3RhdGU7CiAKLQlJbml0QnVmZmVyVGFnKCZuZXdUYWcs ICZzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKKwlJbml0 QnVmZmVyVGFnKCZuZXdUYWcsICZzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IsIHNmaWxlLT5z bWdyX2xvY2F0b3IuZm9ya251bSwgYmxvY2tOdW0pOwogCiAJLyogSW5pdGlhbGl6ZSBsb2NhbCBi dWZmZXJzIGlmIGZpcnN0IHJlcXVlc3QgaW4gdGhpcyBzZXNzaW9uICovCiAJaWYgKExvY2FsQnVm SGFzaCA9PSBOVUxMKQpAQCAtMTM0LDcgKzEzMiw3IEBAIExvY2FsQnVmZmVyQWxsb2MoU01nclJl bGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJ CUFzc2VydChCdWZmZXJUYWdzRXF1YWwoJmJ1Zkhkci0+dGFnLCAmbmV3VGFnKSk7CiAjaWZkZWYg TEJERUJVRwogCQlmcHJpbnRmKHN0ZGVyciwgIkxCIEFMTE9DICgldSwlZCwlZCkgJWRcbiIsCi0J CQkJc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwgZm9ya051bSwgYmxvY2tO dW0sIC1iIC0gMSk7CisJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwg c2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibG9ja051bSwgLWIgLSAxKTsKICNlbmRpZgog CQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91MzIoJmJ1Zkhkci0+c3RhdGUpOwogCkBAIC0x NjIsNyArMTYwLDcgQEAgTG9jYWxCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgRm9ya051 bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKIAogI2lmZGVmIExCREVCVUcKIAlm cHJpbnRmKHN0ZGVyciwgIkxCIEFMTE9DICgldSwlZCwlZCkgJWRcbiIsCi0JCQlzbWdyLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLCBmb3JrTnVtLCBibG9ja051bSwKKwkJCXNmaWxl LT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsIHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9y a251bSwgYmxvY2tOdW0sCiAJCQktbmV4dEZyZWVMb2NhbEJ1ZiAtIDEpOwogI2VuZGlmCiAKQEAg LTIxMSwxNyArMjA5LDE2IEBAIExvY2FsQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIEZv cmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJICovCiAJaWYgKGJ1Zl9z dGF0ZSAmIEJNX0RJUlRZKQogCXsKLQkJU01nclJlbGF0aW9uIG9yZWxuOworCQlTTWdyRmlsZUhh bmRsZSBvZmlsZTsKIAkJUGFnZQkJbG9jYWxwYWdlID0gKGNoYXIgKikgTG9jYWxCdWZIZHJHZXRC bG9jayhidWZIZHIpOwogCi0JCS8qIEZpbmQgc21nciByZWxhdGlvbiBmb3IgYnVmZmVyICovCi0J CW9yZWxuID0gc21ncm9wZW4oQnVmVGFnR2V0UmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnKSwg TXlCYWNrZW5kSWQpOworCQkvKiBGaW5kIHNtZ3IgZmlsZSBoYW5kbGUgZm9yIGJ1ZmZlciAqLwor CQlvZmlsZSA9IHNtZ3JvcGVuKEJ1ZlRhZ0dldFJlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZyks IE15QmFja2VuZElkLCBCdWZUYWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZykpOwogCiAJCVBhZ2VT ZXRDaGVja3N1bUlucGxhY2UobG9jYWxwYWdlLCBidWZIZHItPnRhZy5ibG9ja051bSk7CiAKIAkJ LyogQW5kIHdyaXRlLi4uICovCi0JCXNtZ3J3cml0ZShvcmVsbiwKLQkJCQkgIEJ1ZlRhZ0dldEZv cmtOdW0oJmJ1Zkhkci0+dGFnKSwKKwkJc21ncndyaXRlKG9maWxlLAogCQkJCSAgYnVmSGRyLT50 YWcuYmxvY2tOdW0sCiAJCQkJICBsb2NhbHBhZ2UsCiAJCQkJICBmYWxzZSk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2UuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvZnJlZXNwYWNlL2ZyZWVzcGFjZS5jCmluZGV4IDNlOTY5M2IyOTNiLi5hODI1YTBi NWFmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9mcmVlc3BhY2UvZnJlZXNwYWNl LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9mcmVlc3BhY2UvZnJlZXNwYWNlLmMKQEAgLTI3 MSw3ICsyNzEsNyBAQCBGcmVlU3BhY2VNYXBQcmVwYXJlVHJ1bmNhdGVSZWwoUmVsYXRpb24gcmVs LCBCbG9ja051bWJlciBuYmxvY2tzKQogCSAqIElmIG5vIEZTTSBoYXMgYmVlbiBjcmVhdGVkIHll dCBmb3IgdGhpcyByZWxhdGlvbiwgdGhlcmUncyBub3RoaW5nIHRvCiAJICogdHJ1bmNhdGUuCiAJ ICovCi0JaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBGU01fRk9SS05VTSkp CisJaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwsIEZTTV9GT1JLTlVNKSkpCiAJ CXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKIAkvKiBHZXQgdGhlIGxvY2F0aW9uIGluIHRo ZSBGU00gb2YgdGhlIGZpcnN0IHJlbW92ZWQgaGVhcCBibG9jayAqLwpAQCAtMzE3LDcgKzMxNyw3 IEBAIEZyZWVTcGFjZU1hcFByZXBhcmVUcnVuY2F0ZVJlbChSZWxhdGlvbiByZWwsIEJsb2NrTnVt YmVyIG5ibG9ja3MpCiAJZWxzZQogCXsKIAkJbmV3X25mc21ibG9ja3MgPSBmc21fbG9naWNhbF90 b19waHlzaWNhbChmaXJzdF9yZW1vdmVkX2FkZHJlc3MpOwotCQlpZiAoc21ncm5ibG9ja3MoUmVs YXRpb25HZXRTbWdyKHJlbCksIEZTTV9GT1JLTlVNKSA8PSBuZXdfbmZzbWJsb2NrcykKKwkJaWYg KHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihyZWwsIEZTTV9GT1JLTlVNKSkgPD0gbmV3X25m c21ibG9ja3MpCiAJCQlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwkvKiBub3RoaW5nIHRvIGRv OyB0aGUgRlNNIHdhcyBhbHJlYWR5CiAJCQkJCQkJCQkJICogc21hbGxlciAqLwogCX0KQEAgLTUz MiwxNCArNTMyLDE0IEBAIGZzbV9yZWFkYnVmKFJlbGF0aW9uIHJlbCwgRlNNQWRkcmVzcyBhZGRy LCBib29sIGV4dGVuZCkKIHsKIAlCbG9ja051bWJlciBibGtubyA9IGZzbV9sb2dpY2FsX3RvX3Bo eXNpY2FsKGFkZHIpOwogCUJ1ZmZlcgkJYnVmOwotCVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JG aWxlSGFuZGxlIGZzbV9maWxlOwogCiAJLyoKIAkgKiBDYXV0aW9uOiByZS11c2luZyB0aGlzIHNt Z3IgcG9pbnRlciBjb3VsZCBmYWlsIGlmIHRoZSByZWxjYWNoZSBlbnRyeQogCSAqIGdldHMgY2xv c2VkLiAgSXQncyBzYWZlIGFzIGxvbmcgYXMgd2Ugb25seSBkbyBzbWdyLWxldmVsIG9wZXJhdGlv bnMKIAkgKiBiZXR3ZWVuIGhlcmUgYW5kIHRoZSBsYXN0IHVzZSBvZiB0aGUgcG9pbnRlci4KIAkg Ki8KLQlyZWxuID0gUmVsYXRpb25HZXRTbWdyKHJlbCk7CisJZnNtX2ZpbGUgPSBSZWxhdGlvbkdl dFNtZ3IocmVsLCBGU01fRk9SS05VTSk7CiAKIAkvKgogCSAqIElmIHdlIGhhdmVuJ3QgY2FjaGVk IHRoZSBzaXplIG9mIHRoZSBGU00geWV0LCBjaGVjayBpdCBmaXJzdC4gIEFsc28KQEAgLTU0Nywx OSArNTQ3LDE5IEBAIGZzbV9yZWFkYnVmKFJlbGF0aW9uIHJlbCwgRlNNQWRkcmVzcyBhZGRyLCBi b29sIGV4dGVuZCkKIAkgKiB2YWx1ZSBtaWdodCBiZSBzdGFsZS4gIChXZSBzZW5kIHNtZ3IgaW52 YWwgbWVzc2FnZXMgb24gdHJ1bmNhdGlvbiwgYnV0CiAJICogbm90IG9uIGV4dGVuc2lvbi4pCiAJ ICovCi0JaWYgKHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dID09IEludmFs aWRCbG9ja051bWJlciB8fAotCQlibGtubyA+PSByZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW0ZT TV9GT1JLTlVNXSkKKwlpZiAoZnNtX2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPT0gSW52YWxp ZEJsb2NrTnVtYmVyIHx8CisJCWJsa25vID49IGZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tz KQogCXsKIAkJLyogSW52YWxpZGF0ZSB0aGUgY2FjaGUgc28gc21ncm5ibG9ja3MgYXNrcyB0aGUg a2VybmVsLiAqLwotCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVNXSA9IElu dmFsaWRCbG9ja051bWJlcjsKLQkJaWYgKHNtZ3JleGlzdHMocmVsbiwgRlNNX0ZPUktOVU0pKQot CQkJc21ncm5ibG9ja3MocmVsbiwgRlNNX0ZPUktOVU0pOworCQlmc21fZmlsZS0+c21ncl9jYWNo ZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJaWYgKHNtZ3JleGlzdHMoZnNtX2Zp bGUpKQorCQkJc21ncm5ibG9ja3MoZnNtX2ZpbGUpOwogCQllbHNlCi0JCQlyZWxuLT5zbWdyX2Nh Y2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVNXSA9IDA7CisJCQlmc21fZmlsZS0+c21ncl9jYWNoZWRf bmJsb2NrcyA9IDA7CiAJfQogCiAJLyogSGFuZGxlIHJlcXVlc3RzIGJleW9uZCBFT0YgKi8KLQlp ZiAoYmxrbm8gPj0gcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0pCisJaWYg KGJsa25vID49IGZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzKQogCXsKIAkJaWYgKGV4dGVu ZCkKIAkJCWZzbV9leHRlbmQocmVsLCBibGtubyArIDEpOwpAQCAtNjA5LDcgKzYwOSw3IEBAIGZz bV9leHRlbmQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBmc21fbmJsb2NrcykKIHsKIAlCbG9j a051bWJlciBmc21fbmJsb2Nrc19ub3c7CiAJUEdBbGlnbmVkQmxvY2sgcGc7Ci0JU01nclJlbGF0 aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgZnNtX2ZpbGU7CiAKIAlQYWdlSW5pdCgoUGFnZSkg cGcuZGF0YSwgQkxDS1NaLCAwKTsKIApAQCAtNjMwLDI5ICs2MzAsMjggQEAgZnNtX2V4dGVuZChS ZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGZzbV9uYmxvY2tzKQogCSAqIGdldHMgY2xvc2VkLiAg SXQncyBzYWZlIGFzIGxvbmcgYXMgd2Ugb25seSBkbyBzbWdyLWxldmVsIG9wZXJhdGlvbnMKIAkg KiBiZXR3ZWVuIGhlcmUgYW5kIHRoZSBsYXN0IHVzZSBvZiB0aGUgcG9pbnRlci4KIAkgKi8KLQly ZWxuID0gUmVsYXRpb25HZXRTbWdyKHJlbCk7CisJZnNtX2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3Io cmVsLCBGU01fRk9SS05VTSk7CiAKIAkvKgogCSAqIENyZWF0ZSB0aGUgRlNNIGZpbGUgZmlyc3Qg aWYgaXQgZG9lc24ndCBleGlzdC4gIElmCiAJICogc21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9S S05VTV0gaXMgcG9zaXRpdmUgdGhlbiBpdCBtdXN0IGV4aXN0LCBubwogCSAqIG5lZWQgZm9yIGFu IHNtZ3JleGlzdHMgY2FsbC4KIAkgKi8KLQlpZiAoKHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3Nb RlNNX0ZPUktOVU1dID09IDAgfHwKLQkJIHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZP UktOVU1dID09IEludmFsaWRCbG9ja051bWJlcikgJiYKLQkJIXNtZ3JleGlzdHMocmVsbiwgRlNN X0ZPUktOVU0pKQotCQlzbWdyY3JlYXRlKHJlbG4sIEZTTV9GT1JLTlVNLCBmYWxzZSk7CisJaWYg KChmc21fZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9PSAwIHx8CisJCSBmc21fZmlsZS0+c21n cl9jYWNoZWRfbmJsb2NrcyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpICYmCisJCSFzbWdyZXhpc3Rz KGZzbV9maWxlKSkKKwkJc21ncmNyZWF0ZShmc21fZmlsZSwgZmFsc2UpOwogCiAJLyogSW52YWxp ZGF0ZSBjYWNoZSBzbyB0aGF0IHNtZ3JuYmxvY2tzKCkgYXNrcyB0aGUga2VybmVsLiAqLwotCXJl bG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dID0gSW52YWxpZEJsb2NrTnVtYmVy OwotCWZzbV9uYmxvY2tzX25vdyA9IHNtZ3JuYmxvY2tzKHJlbG4sIEZTTV9GT1JLTlVNKTsKKwlm c21fZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKKwlmc21f bmJsb2Nrc19ub3cgPSBzbWdybmJsb2Nrcyhmc21fZmlsZSk7CiAKIAkvKiBFeHRlbmQgYXMgbmVl ZGVkLiAqLwogCXdoaWxlIChmc21fbmJsb2Nrc19ub3cgPCBmc21fbmJsb2NrcykKIAl7CiAJCVBh Z2VTZXRDaGVja3N1bUlucGxhY2UoKFBhZ2UpIHBnLmRhdGEsIGZzbV9uYmxvY2tzX25vdyk7CiAK LQkJc21ncmV4dGVuZChyZWxuLCBGU01fRk9SS05VTSwgZnNtX25ibG9ja3Nfbm93LAotCQkJCSAg IHBnLmRhdGEsIGZhbHNlKTsKKwkJc21ncmV4dGVuZChmc21fZmlsZSwgZnNtX25ibG9ja3Nfbm93 LCBwZy5kYXRhLCBmYWxzZSk7CiAJCWZzbV9uYmxvY2tzX25vdysrOwogCX0KIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvaXBjaS5jCmluZGV4IDhmMWRlZDczMzhmLi44NjAxZTFjMGRmYiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L2lwY2kuYwpAQCAtMTE3LDkgKzExNyw3IEBAIENhbGN1bGF0ZVNobWVtU2l6ZShpbnQgKm51bV9z ZW1hcGhvcmVzKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTG9nUHJlZmV0Y2hTaG1lbVNpemUo KSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMT0dTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFhMb2dSZWNvdmVyeVNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUo c2l6ZSwgQ0xPR1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQ29tbWl0VHNT aG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNVQlRSQU5TU2htZW1TaXplKCkp OwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBUd29QaGFzZVNobWVtU2l6ZSgpKTsKIAlzaXplID0g YWRkX3NpemUoc2l6ZSwgQmFja2dyb3VuZFdvcmtlclNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRk X3NpemUoc2l6ZSwgTXVsdGlYYWN0U2htZW1TaXplKCkpOwpAQCAtMjQxLDkgKzIzOSw3IEBAIENy ZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAlYTE9HU2htZW1Jbml0KCk7CiAJ WExvZ1ByZWZldGNoU2htZW1Jbml0KCk7CiAJWExvZ1JlY292ZXJ5U2htZW1Jbml0KCk7Ci0JQ0xP R1NobWVtSW5pdCgpOwogCUNvbW1pdFRzU2htZW1Jbml0KCk7Ci0JU1VCVFJBTlNTaG1lbUluaXQo KTsKIAlNdWx0aVhhY3RTaG1lbUluaXQoKTsKIAlJbml0QnVmZmVyUG9vbCgpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKaW5kZXggMzI3YWRlZjVkM2MuLjIyYjA2YTI5YmMxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKKysrIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCkBAIC0zMTMsMTcgKzMxMyw5IEBACiAJ KCh0YXJnZXRoYXNoKSBeICgodWludDMyKSBQb2ludGVyR2V0RGF0dW0oKHByZWRpY2F0ZWxvY2t0 YWcpLT5teVhhY3QpKSBcCiAJIDw8IExPRzJfTlVNX1BSRURJQ0FURUxPQ0tfUEFSVElUSU9OUykK IAotCi0vKgotICogVGhlIFNMUlUgYnVmZmVyIGFyZWEgdGhyb3VnaCB3aGljaCB3ZSBhY2Nlc3Mg dGhlIG9sZCB4aWRzLgotICovCi1zdGF0aWMgU2xydUN0bERhdGEgU2VyaWFsU2xydUN0bERhdGE7 Ci0KLSNkZWZpbmUgU2VyaWFsU2xydUN0bAkJCSgmU2VyaWFsU2xydUN0bERhdGEpCi0KICNkZWZp bmUgU0VSSUFMX1BBR0VTSVpFCQkJQkxDS1NaCiAjZGVmaW5lIFNFUklBTF9FTlRSWVNJWkUJCQlz aXplb2YoU2VyQ29tbWl0U2VxTm8pCi0jZGVmaW5lIFNFUklBTF9FTlRSSUVTUEVSUEFHRQkoU0VS SUFMX1BBR0VTSVpFIC8gU0VSSUFMX0VOVFJZU0laRSkKKyNkZWZpbmUgU0VSSUFMX0VOVFJJRVNQ RVJQQUdFCSgoU0VSSUFMX1BBR0VTSVpFIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC8gU0VSSUFM X0VOVFJZU0laRSkKIAogLyoKICAqIFNldCBtYXhpbXVtIHBhZ2VzIGJhc2VkIG9uIHRoZSBudW1i ZXIgbmVlZGVkIHRvIHRyYWNrIGFsbCB0cmFuc2FjdGlvbnMuCkBAIC0zMzIsMTIgKzMyNCwxMyBA QCBzdGF0aWMgU2xydUN0bERhdGEgU2VyaWFsU2xydUN0bERhdGE7CiAKICNkZWZpbmUgU2VyaWFs TmV4dFBhZ2UocGFnZSkgKCgocGFnZSkgPj0gU0VSSUFMX01BWF9QQUdFKSA/IDAgOiAocGFnZSkg KyAxKQogCi0jZGVmaW5lIFNlcmlhbFZhbHVlKHNsb3RubywgeGlkKSAoKigoU2VyQ29tbWl0U2Vx Tm8gKikgXAotCShTZXJpYWxTbHJ1Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBc CisjZGVmaW5lIFNlcmlhbFZhbHVlKGJ1ZmZlciwgeGlkKSAoKigoU2VyQ29tbWl0U2VxTm8gKikg XAorCShQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIFwKIAkoKCgodWlu dDMyKSAoeGlkKSkgJSBTRVJJQUxfRU5UUklFU1BFUlBBR0UpICogU0VSSUFMX0VOVFJZU0laRSkp KSkKIAogI2RlZmluZSBTZXJpYWxQYWdlKHhpZCkJKCgodWludDMyKSAoeGlkKSkgLyBTRVJJQUxf RU5UUklFU1BFUlBBR0UpCiAKKwogdHlwZWRlZiBzdHJ1Y3QgU2VyaWFsQ29udHJvbERhdGEKIHsK IAlpbnQJCQloZWFkUGFnZTsJCS8qIG5ld2VzdCBpbml0aWFsaXplZCBwYWdlICovCkBAIC04NDks MTAgKzg0MiwxNCBAQCBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHlVbml0VGVzdHModm9pZCkK IAkgKiByZXF1aXJlcyBidXJuaW5nIH4yQiBYSURzIGluIHNpbmdsZS11c2VyIG1vZGUsIGEgbmVn bGlnaWJsZQogCSAqIHBvc3NpYmlsaXR5LiAgTW9yZW92ZXIsIGlmIGl0IGRvZXMgaGFwcGVuLCB0 aGUgY29uc2VxdWVuY2Ugd291bGQgYmUKIAkgKiBtaWxkLCBuYW1lbHkgYSBuZXcgdHJhbnNhY3Rp b24gZmFpbGluZyBpbiBTaW1wbGVMcnVSZWFkUGFnZSgpLgorCSAqIAorCSAqIE5PVEU6ICBBZnRl ciBhZGRpbmcgcGFnZSBoZWFkZXJzLCB0aGUgZGVmZWN0IGFmZmVjdHMgdHdvIHBhZ2VzLgorCSAq IFdlIG5vdyBhc3NlcnQgY29ycmVjdCB0cmVhdG1lbnQgb2YgaXRzIHNlY29uZCB0byBwcmlvciBw YWdlLgorCSAqIAogCSAqLwogCWhlYWRQYWdlID0gb2xkZXN0UGFnZTsKIAl0YXJnZXRQYWdlID0g bmV3ZXN0UGFnZTsKLQlBc3NlcnQoU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5KGhlYWRQYWdl LCB0YXJnZXRQYWdlIC0gMSkpOworCUFzc2VydChTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHko aGVhZFBhZ2UsIHRhcmdldFBhZ2UgLSAyKSk7CiAjaWYgMAogCUFzc2VydChTZXJpYWxQYWdlUHJl Y2VkZXNMb2dpY2FsbHkoaGVhZFBhZ2UsIHRhcmdldFBhZ2UpKTsKICNlbmRpZgpAQCAtODY3LDE3 ICs4NjQsMTAgQEAgU2VyaWFsSW5pdCh2b2lkKQogewogCWJvb2wJCWZvdW5kOwogCi0JLyoKLQkg KiBTZXQgdXAgU0xSVSBtYW5hZ2VtZW50IG9mIHRoZSBwZ19zZXJpYWwgZGF0YS4KLQkgKi8KLQlT ZXJpYWxTbHJ1Q3RsLT5QYWdlUHJlY2VkZXMgPSBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHk7 Ci0JU2ltcGxlTHJ1SW5pdChTZXJpYWxTbHJ1Q3RsLCAiU2VyaWFsIiwKLQkJCQkgIE5VTV9TRVJJ QUxfQlVGRkVSUywgMCwgU2VyaWFsU0xSVUxvY2ssICJwZ19zZXJpYWwiLAotCQkJCSAgTFdUUkFO Q0hFX1NFUklBTF9CVUZGRVIsIFNZTkNfSEFORExFUl9OT05FKTsKICNpZmRlZiBVU0VfQVNTRVJU X0NIRUNLSU5HCiAJU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5VW5pdFRlc3RzKCk7CiAjZW5k aWYKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNlcmlhbFNscnVDdGwsIFNFUklBTF9FTlRS SUVTUEVSUEFHRSk7CisJU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTZXJpYWxQYWdlUHJlY2Vk ZXNMb2dpY2FsbHksIFNFUklBTF9FTlRSSUVTUEVSUEFHRSk7CiAKIAkvKgogCSAqIENyZWF0ZSBv ciBhdHRhY2ggdG8gdGhlIFNlcmlhbENvbnRyb2wgc3RydWN0dXJlLgpAQCAtOTA3LDkgKzg5Nyw5 IEBAIFNlcmlhbEFkZChUcmFuc2FjdGlvbklkIHhpZCwgU2VyQ29tbWl0U2VxTm8gbWluQ29uZmxp Y3RDb21taXRTZXFObykKIHsKIAlUcmFuc2FjdGlvbklkIHRhaWxYaWQ7CiAJaW50CQkJdGFyZ2V0 UGFnZTsKLQlpbnQJCQlzbG90bm87CiAJaW50CQkJZmlyc3RaZXJvUGFnZTsKIAlib29sCQlpc05l d1BhZ2U7CisJQnVmZmVyCQlidWZmZXI7CiAKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQo eGlkKSk7CiAKQEAgLTk1NCwxNiArOTQ0LDIzIEBAIFNlcmlhbEFkZChUcmFuc2FjdGlvbklkIHhp ZCwgU2VyQ29tbWl0U2VxTm8gbWluQ29uZmxpY3RDb21taXRTZXFObykKIAkJLyogSW5pdGlhbGl6 ZSBpbnRlcnZlbmluZyBwYWdlcy4gKi8KIAkJd2hpbGUgKGZpcnN0WmVyb1BhZ2UgIT0gdGFyZ2V0 UGFnZSkKIAkJewotCQkJKHZvaWQpIFNpbXBsZUxydVplcm9QYWdlKFNlcmlhbFNscnVDdGwsIGZp cnN0WmVyb1BhZ2UpOworCQkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9TRVJJQUxfSUQs IGZpcnN0WmVyb1BhZ2UpOworCQkJUGFnZVNldEhlYWRlckRhdGFOb25SZWwoQnVmZmVyR2V0UGFn ZShidWZmZXIpLCBmaXJzdFplcm9QYWdlLCBJbnZhbGlkWExvZ1JlY1B0ciwgQkxDS1NaLCBQR19N RVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisJCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwkJ CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAkJCWZpcnN0WmVyb1BhZ2UgPSBTZXJpYWxO ZXh0UGFnZShmaXJzdFplcm9QYWdlKTsKIAkJfQotCQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFn ZShTZXJpYWxTbHJ1Q3RsLCB0YXJnZXRQYWdlKTsKKwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIo U0xSVV9TRVJJQUxfSUQsIHRhcmdldFBhZ2UpOwogCX0KIAllbHNlCi0JCXNsb3RubyA9IFNpbXBs ZUxydVJlYWRQYWdlKFNlcmlhbFNscnVDdGwsIHRhcmdldFBhZ2UsIHRydWUsIHhpZCk7CisJewor CQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX1NFUklBTF9JRCwgdGFyZ2V0UGFnZSwgUkJN X05PUk1BTCk7CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOwor CX0KIAotCVNlcmlhbFZhbHVlKHNsb3RubywgeGlkKSA9IG1pbkNvbmZsaWN0Q29tbWl0U2VxTm87 Ci0JU2VyaWFsU2xydUN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCVNl cmlhbFZhbHVlKGJ1ZmZlciwgeGlkKSA9IG1pbkNvbmZsaWN0Q29tbWl0U2VxTm87CisJTWFya0J1 ZmZlckRpcnR5KGJ1ZmZlcik7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJTFdM b2NrUmVsZWFzZShTZXJpYWxTTFJVTG9jayk7CiB9CkBAIC05NzksNyArOTc2LDcgQEAgU2VyaWFs R2V0TWluQ29uZmxpY3RDb21taXRTZXFObyhUcmFuc2FjdGlvbklkIHhpZCkKIAlUcmFuc2FjdGlv bklkIGhlYWRYaWQ7CiAJVHJhbnNhY3Rpb25JZCB0YWlsWGlkOwogCVNlckNvbW1pdFNlcU5vIHZh bDsKLQlpbnQJCQlzbG90bm87CisJQnVmZmVyCQlidWZmZXI7CiAKIAlBc3NlcnQoVHJhbnNhY3Rp b25JZElzVmFsaWQoeGlkKSk7CiAKQEAgLTEwMDEsOSArOTk4LDkgQEAgU2VyaWFsR2V0TWluQ29u ZmxpY3RDb21taXRTZXFObyhUcmFuc2FjdGlvbklkIHhpZCkKIAkgKiBUaGUgZm9sbG93aW5nIGZ1 bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgaG9sZGluZyBTZXJpYWxTTFJVTG9jaywKIAkg KiBidXQgd2lsbCByZXR1cm4gd2l0aCB0aGF0IGxvY2sgaGVsZCwgd2hpY2ggbXVzdCB0aGVuIGJl IHJlbGVhc2VkLgogCSAqLwotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFNl cmlhbFNscnVDdGwsCi0JCQkJCQkJCQkJU2VyaWFsUGFnZSh4aWQpLCB4aWQpOwotCXZhbCA9IFNl cmlhbFZhbHVlKHNsb3RubywgeGlkKTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX1NF UklBTF9JRCwgU2VyaWFsUGFnZSh4aWQpLCBSQk1fTk9STUFMKTsKKwl2YWwgPSBTZXJpYWxWYWx1 ZShidWZmZXIsIHhpZCk7CisJUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCUxXTG9ja1JlbGVhc2Uo U2VyaWFsU0xSVUxvY2spOwogCXJldHVybiB2YWw7CiB9CkBAIC0xMTIyLDE5ICsxMTE5LDcgQEAg Q2hlY2tQb2ludFByZWRpY2F0ZSh2b2lkKQogCUxXTG9ja1JlbGVhc2UoU2VyaWFsU0xSVUxvY2sp OwogCiAJLyogVHJ1bmNhdGUgYXdheSBwYWdlcyB0aGF0IGFyZSBubyBsb25nZXIgcmVxdWlyZWQg Ki8KLQlTaW1wbGVMcnVUcnVuY2F0ZShTZXJpYWxTbHJ1Q3RsLCB0YWlsUGFnZSk7Ci0KLQkvKgot CSAqIFdyaXRlIGRpcnR5IFNMUlUgcGFnZXMgdG8gZGlzawotCSAqCi0JICogVGhpcyBpcyBub3Qg YWN0dWFsbHkgbmVjZXNzYXJ5IGZyb20gYSBjb3JyZWN0bmVzcyBwb2ludCBvZiB2aWV3LiBXZSBk bwotCSAqIGl0IG1lcmVseSBhcyBhIGRlYnVnZ2luZyBhaWQuCi0JICoKLQkgKiBXZSdyZSBkb2lu ZyB0aGlzIGFmdGVyIHRoZSB0cnVuY2F0aW9uIHRvIGF2b2lkIHdyaXRpbmcgcGFnZXMgcmlnaHQK LQkgKiBiZWZvcmUgZGVsZXRpbmcgdGhlIGZpbGUgaW4gd2hpY2ggdGhleSBzaXQsIHdoaWNoIHdv dWxkIGJlIGNvbXBsZXRlbHkKLQkgKiBwb2ludGxlc3MuCi0JICovCi0JU2ltcGxlTHJ1V3JpdGVB bGwoU2VyaWFsU2xydUN0bCwgdHJ1ZSk7CisJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9TRVJJQUxf SUQsIFNlcmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseSwgdGFpbFBhZ2UpOwogfQogCiAvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSovCkBAIC0xMzk2LDcgKzEzODEsNiBAQCBQcmVkaWNhdGVMb2NrU2htZW1TaXpl KHZvaWQpCiAKIAkvKiBTaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMgZm9yIFNMUlUgdHJhY2tpbmcg b2Ygb2xkIGNvbW1pdHRlZCB4aWRzLiAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBzaXplb2Yo U2VyaWFsQ29udHJvbERhdGEpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2ltcGxlTHJ1U2ht ZW1TaXplKE5VTV9TRVJJQUxfQlVGRkVSUywgMCkpOwogCiAJcmV0dXJuIHNpemU7CiB9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVmcGFnZS5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYwppbmRleCA5Mjk5NGY4ZjM5NS4uMWE4MTA3NTRjNWMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYwpAQCAtNTksNiArNTksMjcgQEAgUGFnZUluaXQo UGFnZSBwYWdlLCBTaXplIHBhZ2VTaXplLCBTaXplIHNwZWNpYWxTaXplKQogCS8qIHAtPnBkX3By dW5lX3hpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwkJZG9uZSBieSBhYm92ZSBNZW1TZXQgKi8K IH0KIAordm9pZAorUGFnZUluaXRTTFJVKFBhZ2UgcGFnZSwgU2l6ZSBwYWdlU2l6ZSwgU2l6ZSBz cGVjaWFsU2l6ZSkKK3sKKwlQYWdlSGVhZGVyCXAgPSAoUGFnZUhlYWRlcikgcGFnZTsKKworCXNw ZWNpYWxTaXplID0gTUFYQUxJR04oc3BlY2lhbFNpemUpOworCisJQXNzZXJ0KHBhZ2VTaXplID09 IEJMQ0tTWik7CisJQXNzZXJ0KHBhZ2VTaXplID4gc3BlY2lhbFNpemUgKyBTaXplT2ZQYWdlSGVh ZGVyRGF0YSk7CisKKwkvKiBNYWtlIHN1cmUgYWxsIGZpZWxkcyBvZiBwYWdlIGFyZSB6ZXJvLCBh cyB3ZWxsIGFzIHVudXNlZCBzcGFjZSAqLworCU1lbVNldChwLCAwLCBwYWdlU2l6ZSk7CisKKwlw LT5wZF9mbGFncyA9IDA7CisJcC0+cGRfbG93ZXIgPSBTaXplT2ZQYWdlSGVhZGVyRGF0YTsKKwlw LT5wZF91cHBlciA9IHBhZ2VTaXplIC0gc3BlY2lhbFNpemU7CisJcC0+cGRfc3BlY2lhbCA9IHBh Z2VTaXplIC0gc3BlY2lhbFNpemU7CisJUGFnZVNldFBhZ2VTaXplQW5kVmVyc2lvbihwYWdlLCBw YWdlU2l6ZSwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJT04pOworCS8qIHAtPnBkX3BydW5lX3hp ZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwkJZG9uZSBieSBhYm92ZSBNZW1TZXQgKi8KK30KKwog CiAvKgogICogUGFnZUlzVmVyaWZpZWRFeHRlbmRlZApAQCAtMTAzLDcgKzEyNCw3IEBAIFBhZ2VJ c1ZlcmlmaWVkRXh0ZW5kZWQoUGFnZSBwYWdlLCBCbG9ja051bWJlciBibGtubywgaW50IGZsYWdz KQogCQlpZiAoRGF0YUNoZWNrc3Vtc0VuYWJsZWQoKSkKIAkJewogCQkJY2hlY2tzdW0gPSBwZ19j aGVja3N1bV9wYWdlKChjaGFyICopIHBhZ2UsIGJsa25vKTsKLQorCQkJCiAJCQlpZiAoY2hlY2tz dW0gIT0gcC0+cGRfY2hlY2tzdW0pCiAJCQkJY2hlY2tzdW1fZmFpbHVyZSA9IHRydWU7CiAJCX0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9zbWdyL21kLmMKaW5kZXggNjBjOTkwNWVmZjkuLjU1ZWJkNDViN2QxIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL3NtZ3IvbWQuYwpAQCAtNjYsMTAgKzY2LDEwIEBACiAgKglvdXQgdG8gYW4gdW5saW5rZWQg b2xkIGNvcHkgb2YgYSBzZWdtZW50IGZpbGUgdGhhdCB3aWxsIGV2ZW50dWFsbHkKICAqCWRpc2Fw cGVhci4KICAqCi0gKglGaWxlIGRlc2NyaXB0b3JzIGFyZSBzdG9yZWQgaW4gdGhlIHBlci1mb3Jr IG1kX3NlZ19mZHMgYXJyYXlzIGluc2lkZQotICoJU01nclJlbGF0aW9uLiBUaGUgbGVuZ3RoIG9m IHRoZXNlIGFycmF5cyBpcyBzdG9yZWQgaW4gbWRfbnVtX29wZW5fc2Vncy4KLSAqCU5vdGUgdGhh dCBhIGZvcmsncyBtZF9udW1fb3Blbl9zZWdzIGhhdmluZyBhIHNwZWNpZmljIHZhbHVlIGRvZXMg bm90Ci0gKgluZWNlc3NhcmlseSBtZWFuIHRoZSByZWxhdGlvbiBkb2Vzbid0IGhhdmUgYWRkaXRp b25hbCBzZWdtZW50czsgd2UgbWF5CisgKglGaWxlIGRlc2NyaXB0b3JzIGFyZSBzdG9yZWQgaW4g dGhlIG1kX3NlZ19mZHMgYXJyYXkgaW5zaWRlCisgKglTTWdyRmlsZURhdGEuIFRoZSBsZW5ndGgg b2YgdGhlIGFycmF5IGlzIHN0b3JlZCBpbiBtZF9udW1fb3Blbl9zZWdzLgorICoJTm90ZSB0aGF0 IG1kX251bV9vcGVuX3NlZ3MgaGF2aW5nIGEgc3BlY2lmaWMgdmFsdWUgZG9lcyBub3QKKyAqCW5l Y2Vzc2FyaWx5IG1lYW4gdGhlIGZpbGUgZG9lc24ndCBoYXZlIGFkZGl0aW9uYWwgc2VnbWVudHM7 IHdlIG1heQogICoJanVzdCBub3QgaGF2ZSBvcGVuZWQgdGhlIG5leHQgc2VnbWVudCB5ZXQuICAo V2UgY291bGQgbm90IGhhdmUgImFsbAogICoJc2VnbWVudHMgYXJlIGluIHRoZSBhcnJheSIgYXMg YW4gaW52YXJpYW50IGFueXdheSwgc2luY2UgYW5vdGhlciBiYWNrZW5kCiAgKgljb3VsZCBleHRl bmQgdGhlIHJlbGF0aW9uIHdoaWxlIHdlIGFyZW4ndCBsb29raW5nLikgIFdlIGRvIG5vdCBoYXZl CkBAIC0xMjEsMjYgKzEyMSwxOCBAQCBzdGF0aWMgTWVtb3J5Q29udGV4dCBNZEN4dDsJCS8qIGNv bnRleHQgZm9yIGFsbCBNZGZkVmVjIG9iamVjdHMgKi8KIAogCiAvKiBsb2NhbCByb3V0aW5lcyAq Lwotc3RhdGljIHZvaWQgbWR1bmxpbmtmb3JrKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRv ciwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJIGJvb2wgaXNSZWRvKTsKLXN0YXRpYyBNZGZk VmVjICptZG9wZW5mb3JrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIGlu dCBiZWhhdmlvcik7Ci1zdGF0aWMgdm9pZCByZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCSAgIE1kZmRWZWMgKnNlZyk7 Ci1zdGF0aWMgdm9pZCByZWdpc3Rlcl91bmxpbmtfc2VnbWVudChSZWxGaWxlTG9jYXRvckJhY2tl bmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJCUJsb2NrTnVtYmVyIHNl Z25vKTsKLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0KFJlbEZpbGVMb2NhdG9y QmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCQkJQmxvY2tOdW1i ZXIgc2Vnbm8pOwotc3RhdGljIHZvaWQgX2ZkdmVjX3Jlc2l6ZShTTWdyUmVsYXRpb24gcmVsbiwK LQkJCQkJCSAgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJICBpbnQgbnNlZyk7Ci1zdGF0aWMg Y2hhciAqX21kZmRfc2VncGF0aChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LAotCQkJCQkJICAgQmxvY2tOdW1iZXIgc2Vnbm8pOwotc3RhdGljIE1kZmRWZWMgKl9tZGZkX29w ZW5zZWcoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK3N0YXRpYyB2b2lk IG1kdW5saW5rZm9yayhTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIGJvb2wgaXNSZWRvKTsKK3N0 YXRpYyBNZGZkVmVjICptZG9wZW5mb3JrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBpbnQgYmVoYXZp b3IpOworc3RhdGljIHZvaWQgcmVnaXN0ZXJfZGlydHlfc2VnbWVudChTTWdyRmlsZUhhbmRsZSBz ZmlsZSwgTWRmZFZlYyAqc2VnKTsKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX3VubGlua19zZWdtZW50 KFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwgQmxvY2tOdW1iZXIgc2Vnbm8pOworc3RhdGljIHZv aWQgcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3QoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBCbG9j a051bWJlciBzZWdubyk7CitzdGF0aWMgdm9pZCBfZmR2ZWNfcmVzaXplKFNNZ3JGaWxlSGFuZGxl IHNmaWxlLCBpbnQgbnNlZyk7CitzdGF0aWMgY2hhciAqX21kZmRfc2VncGF0aChTTWdyRmlsZUhh bmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgc2Vnbm8pOworc3RhdGljIE1kZmRWZWMgKl9tZGZkX29w ZW5zZWcoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCQkJICBCbG9ja051bWJlciBzZWdubywg aW50IG9mbGFncyk7Ci1zdGF0aWMgTWRmZFZlYyAqX21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitzdGF0aWMgTWRmZFZlYyAqX21kZmRfZ2V0c2VnKFNN Z3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJCSBCbG9ja051bWJlciBibGtubywgYm9vbCBza2lw RnN5bmMsIGludCBiZWhhdmlvcik7Ci1zdGF0aWMgQmxvY2tOdW1iZXIgX21kbmJsb2NrcyhTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCSAgTWRmZFZlYyAqc2Vn KTsKK3N0YXRpYyBCbG9ja051bWJlciBfbWRuYmxvY2tzKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBN ZGZkVmVjICpzZWcpOwogCiAKIC8qCkBAIC0xNjAsNyArMTUyLDcgQEAgbWRpbml0KHZvaWQpCiAg KiBOb3RlOiB0aGlzIHdpbGwgcmV0dXJuIHRydWUgZm9yIGxpbmdlcmluZyBmaWxlcywgd2l0aCBw ZW5kaW5nIGRlbGV0aW9ucwogICovCiBib29sCi1tZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtKQorbWRleGlzdHMoU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJ LyoKIAkgKiBDbG9zZSBpdCBmaXJzdCwgdG8gZW5zdXJlIHRoYXQgd2Ugbm90aWNlIGlmIHRoZSBm b3JrIGhhcyBiZWVuIHVubGlua2VkCkBAIC0xNjgsOSArMTYwLDkgQEAgbWRleGlzdHMoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAkgKiB3aGljaCBhbHJlYWR5IGNsb3Nl cyByZWxhdGlvbnMgd2hlbiBkcm9wcGluZyB0aGVtLgogCSAqLwogCWlmICghSW5SZWNvdmVyeSkK LQkJbWRjbG9zZShyZWxuLCBmb3JrbnVtKTsKKwkJbWRjbG9zZShzZmlsZSk7CiAKLQlyZXR1cm4g KG1kb3BlbmZvcmsocmVsbiwgZm9ya251bSwgRVhURU5TSU9OX1JFVFVSTl9OVUxMKSAhPSBOVUxM KTsKKwlyZXR1cm4gKG1kb3BlbmZvcmsoc2ZpbGUsIEVYVEVOU0lPTl9SRVRVUk5fTlVMTCkgIT0g TlVMTCk7CiB9CiAKIC8qCkBAIC0xNzksMTYgKzE3MSwxNiBAQCBtZGV4aXN0cyhTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogICogSWYgaXNSZWRvIGlzIHRydWUsIGl0J3Mg b2theSBmb3IgdGhlIHJlbGF0aW9uIHRvIGV4aXN0IGFscmVhZHkuCiAgKi8KIHZvaWQKLW1kY3Jl YXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQor bWRjcmVhdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGJvb2wgaXNSZWRvKQogewogCU1kZmRWZWMg ICAgKm1kZmQ7CiAJY2hhcgkgICAqcGF0aDsKIAlGaWxlCQlmZDsKIAotCWlmIChpc1JlZG8gJiYg cmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA+IDApCisJaWYgKGlzUmVkbyAmJiBzZmls ZS0+bWRfbnVtX29wZW5fc2VncyA+IDApCiAJCXJldHVybjsJCQkJCS8qIGNyZWF0ZWQgYW5kIG9w ZW5lZCBhbHJlYWR5Li4uICovCiAKLQlBc3NlcnQocmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3Jr bnVtXSA9PSAwKTsKKwlBc3NlcnQoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPT0gMCk7CiAKIAkv KgogCSAqIFdlIG1heSBiZSB1c2luZyB0aGUgdGFyZ2V0IHRhYmxlIHNwYWNlIGZvciB0aGUgZmly c3QgdGltZSBpbiB0aGlzCkBAIC0xOTksMTEgKzE5MSwxNCBAQCBtZGNyZWF0ZShTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKIAkgKiBzaG91bGQgYmUg aGVyZSBhbmQgbm90IGluIGNvbW1hbmRzL3RhYmxlc3BhY2UuYz8gIEJ1dCB0aGF0IHdvdWxkIGlt cGx5CiAJICogaW1wb3J0aW5nIGEgbG90IG9mIHN0dWZmIHRoYXQgc21nci5jIG91Z2h0bid0IGtu b3csIGVpdGhlci4KIAkgKi8KLQlUYWJsZXNwYWNlQ3JlYXRlRGJzcGFjZShyZWxuLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5kYk9pZCwKLQkJCQkJCQlpc1JlZG8pOworCWlmIChzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0 b3Iuc3BjT2lkICE9IFNMUlVfU1BDX09JRCkKKwl7CisJCVRhYmxlc3BhY2VDcmVhdGVEYnNwYWNl KHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCXNmaWxlLT5zbWdy X2xvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJaXNSZWRvKTsKKwl9CiAKLQlwYXRoID0g cmVscGF0aChyZWxuLT5zbWdyX3Jsb2NhdG9yLCBmb3JrbnVtKTsKKwlwYXRoID0gc21ncmZpbGVw YXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpOwogCiAJZmQgPSBQYXRoTmFtZU9wZW5GaWxlKHBhdGgs IE9fUkRXUiB8IE9fQ1JFQVQgfCBPX0VYQ0wgfCBQR19CSU5BUlkpOwogCkBAIC0yMjUsOCArMjIw LDggQEAgbWRjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9v bCBpc1JlZG8pCiAKIAlwZnJlZShwYXRoKTsKIAotCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251 bSwgMSk7Ci0JbWRmZCA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dWzBdOworCV9mZHZlY19y ZXNpemUoc2ZpbGUsIDEpOworCW1kZmQgPSAmc2ZpbGUtPm1kX3NlZ19mZHNbMF07CiAJbWRmZC0+ bWRmZF92ZmQgPSBmZDsKIAltZGZkLT5tZGZkX3NlZ25vID0gMDsKIH0KQEAgLTI5MywxNiArMjg4 LDkgQEAgbWRjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9v bCBpc1JlZG8pCiAgKiB3ZSBhcmUgdXN1YWxseSBub3QgaW4gYSB0cmFuc2FjdGlvbiBhbnltb3Jl IHdoZW4gdGhpcyBpcyBjYWxsZWQuCiAgKi8KIHZvaWQKLW1kdW5saW5rKFJlbEZpbGVMb2NhdG9y QmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKK21kdW5s aW5rKFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwgYm9vbCBpc1JlZG8pCiB7Ci0JLyogTm93IGRv IHRoZSBwZXItZm9yayB3b3JrICovCi0JaWYgKGZvcmtudW0gPT0gSW52YWxpZEZvcmtOdW1iZXIp Ci0JewotCQlmb3IgKGZvcmtudW0gPSAwOyBmb3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVt KyspCi0JCQltZHVubGlua2ZvcmsocmxvY2F0b3IsIGZvcmtudW0sIGlzUmVkbyk7Ci0JfQotCWVs c2UKLQkJbWR1bmxpbmtmb3JrKHJsb2NhdG9yLCBmb3JrbnVtLCBpc1JlZG8pOworCW1kdW5saW5r Zm9yayhzbG9jYXRvciwgaXNSZWRvKTsKIH0KIAogLyoKQEAgLTMzMCwyOSArMzE4LDI5IEBAIGRv X3RydW5jYXRlKGNvbnN0IGNoYXIgKnBhdGgpCiB9CiAKIHN0YXRpYyB2b2lkCi1tZHVubGlua2Zv cmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJv b2wgaXNSZWRvKQorbWR1bmxpbmtmb3JrKFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwgYm9vbCBp c1JlZG8pCiB7CiAJY2hhcgkgICAqcGF0aDsKIAlpbnQJCQlyZXQ7CiAJaW50CQkJc2F2ZV9lcnJu bzsKIAotCXBhdGggPSByZWxwYXRoKHJsb2NhdG9yLCBmb3JrbnVtKTsKKwlwYXRoID0gc21ncmZp bGVwYXRoKHNsb2NhdG9yKTsKIAogCS8qCiAJICogVHJ1bmNhdGUgYW5kIHRoZW4gdW5saW5rIHRo ZSBmaXJzdCBzZWdtZW50LCBvciBqdXN0IHJlZ2lzdGVyIGEgcmVxdWVzdAogCSAqIHRvIHVubGlu ayBpdCBsYXRlciwgYXMgZGVzY3JpYmVkIGluIHRoZSBjb21tZW50cyBmb3IgbWR1bmxpbmsoKS4K IAkgKi8KLQlpZiAoaXNSZWRvIHx8IElzQmluYXJ5VXBncmFkZSB8fCBmb3JrbnVtICE9IE1BSU5f Rk9SS05VTSB8fAotCQlSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAocmxvY2F0b3IpKQorCWlm IChpc1JlZG8gfHwgSXNCaW5hcnlVcGdyYWRlIHx8IHNsb2NhdG9yLmZvcmtudW0gIT0gTUFJTl9G T1JLTlVNIHx8CisJCVNNZ3JGaWxlTG9jYXRvcklzVGVtcChzbG9jYXRvcikpCiAJewotCQlpZiAo IVJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChybG9jYXRvcikpCisJCWlmICghU01nckZpbGVM b2NhdG9ySXNUZW1wKHNsb2NhdG9yKSkKIAkJewogCQkJLyogUHJldmVudCBvdGhlciBiYWNrZW5k cycgZmRzIGZyb20gaG9sZGluZyBvbiB0byB0aGUgZGlzayBzcGFjZSAqLwogCQkJcmV0ID0gZG9f dHJ1bmNhdGUocGF0aCk7CiAKIAkJCS8qIEZvcmdldCBhbnkgcGVuZGluZyBzeW5jIHJlcXVlc3Rz IGZvciB0aGUgZmlyc3Qgc2VnbWVudCAqLwogCQkJc2F2ZV9lcnJubyA9IGVycm5vOwotCQkJcmVn aXN0ZXJfZm9yZ2V0X3JlcXVlc3QocmxvY2F0b3IsIGZvcmtudW0sIDAgLyogZmlyc3Qgc2VnICov ICk7CisJCQlyZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdChzbG9jYXRvciwgMCAvKiBmaXJzdCBzZWcg Ki8gKTsKIAkJCWVycm5vID0gc2F2ZV9lcnJubzsKIAkJfQogCQllbHNlCkBAIC0zNzksNyArMzY3 LDcgQEAgbWR1bmxpbmtmb3JrKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051 bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKIAogCQkvKiBSZWdpc3RlciByZXF1ZXN0IHRvIHVu bGluayBmaXJzdCBzZWdtZW50IGxhdGVyICovCiAJCXNhdmVfZXJybm8gPSBlcnJubzsKLQkJcmVn aXN0ZXJfdW5saW5rX3NlZ21lbnQocmxvY2F0b3IsIGZvcmtudW0sIDAgLyogZmlyc3Qgc2VnICov ICk7CisJCXJlZ2lzdGVyX3VubGlua19zZWdtZW50KHNsb2NhdG9yLCAwIC8qIGZpcnN0IHNlZyAq LyApOwogCQllcnJubyA9IHNhdmVfZXJybm87CiAJfQogCkBAIC00MDQsNyArMzkyLDcgQEAgbWR1 bmxpbmtmb3JrKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3Jr bnVtLCBib29sIGlzUmVkbykKIAkJewogCQkJc3ByaW50ZihzZWdwYXRoLCAiJXMuJXUiLCBwYXRo LCBzZWdubyk7CiAKLQkJCWlmICghUmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1wKHJsb2NhdG9y KSkKKwkJCWlmICghU01nckZpbGVMb2NhdG9ySXNUZW1wKHNsb2NhdG9yKSkKIAkJCXsKIAkJCQkv KgogCQkJCSAqIFByZXZlbnQgb3RoZXIgYmFja2VuZHMnIGZkcyBmcm9tIGhvbGRpbmcgb24gdG8g dGhlIGRpc2sKQEAgLTQxNyw3ICs0MDUsNyBAQCBtZHVubGlua2ZvcmsoUmVsRmlsZUxvY2F0b3JC YWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQogCQkJCSAq IEZvcmdldCBhbnkgcGVuZGluZyBzeW5jIHJlcXVlc3RzIGZvciB0aGlzIHNlZ21lbnQgYmVmb3Jl IHdlCiAJCQkJICogdHJ5IHRvIHVubGluay4KIAkJCQkgKi8KLQkJCQlyZWdpc3Rlcl9mb3JnZXRf cmVxdWVzdChybG9jYXRvciwgZm9ya251bSwgc2Vnbm8pOworCQkJCXJlZ2lzdGVyX2ZvcmdldF9y ZXF1ZXN0KHNsb2NhdG9yLCBzZWdubyk7CiAJCQl9CiAKIAkJCWlmICh1bmxpbmsoc2VncGF0aCkg PCAwKQpAQCAtNDQ2LDcgKzQzNCw3IEBAIG1kdW5saW5rZm9yayhSZWxGaWxlTG9jYXRvckJhY2tl bmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCiAgKgkJY2F1c2Vz IGludGVydmVuaW5nIGZpbGUgc3BhY2UgdG8gYmVjb21lIGZpbGxlZCB3aXRoIHplcm9lcy4KICAq Lwogdm9pZAotbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwg QmxvY2tOdW1iZXIgYmxvY2tudW0sCittZGV4dGVuZChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxv Y2tOdW1iZXIgYmxvY2tudW0sCiAJCSBjaGFyICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKQogewog CW9mZl90CQlzZWVrcG9zOwpAQCAtNDU1LDcgKzQ0Myw3IEBAIG1kZXh0ZW5kKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCiAJLyog VGhpcyBhc3NlcnQgaXMgdG9vIGV4cGVuc2l2ZSB0byBoYXZlIG9uIG5vcm1hbGx5IC4uLiAqLwog I2lmZGVmIENIRUNLX1dSSVRFX1ZTX0VYVEVORAotCUFzc2VydChibG9ja251bSA+PSBtZG5ibG9j a3MocmVsbiwgZm9ya251bSkpOworCUFzc2VydChibG9ja251bSA+PSBtZG5ibG9ja3Moc2ZpbGUp KTsKICNlbmRpZgogCiAJLyoKQEAgLTQ2OCwxMCArNDU2LDEwIEBAIG1kZXh0ZW5kKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQll cmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPR1JBTV9MSU1JVF9FWENFRURF RCksCiAJCQkJIGVycm1zZygiY2Fubm90IGV4dGVuZCBmaWxlIFwiJXNcIiBiZXlvbmQgJXUgYmxv Y2tzIiwKLQkJCQkJCXJlbHBhdGgocmVsbi0+c21ncl9ybG9jYXRvciwgZm9ya251bSksCisJCQkJ CQlzbWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvciksCiAJCQkJCQlJbnZhbGlkQmxvY2tO dW1iZXIpKSk7CiAKLQl2ID0gX21kZmRfZ2V0c2VnKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBz a2lwRnN5bmMsIEVYVEVOU0lPTl9DUkVBVEUpOworCXYgPSBfbWRmZF9nZXRzZWcoc2ZpbGUsIGJs b2NrbnVtLCBza2lwRnN5bmMsIEVYVEVOU0lPTl9DUkVBVEUpOwogCiAJc2Vla3BvcyA9IChvZmZf dCkgQkxDS1NaICogKGJsb2NrbnVtICUgKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKIApA QCAtNDk0LDEwICs0ODIsMTAgQEAgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCQkJIGVycmhpbnQoIkNoZWNrIGZy ZWUgZGlzayBzcGFjZS4iKSkpOwogCX0KIAotCWlmICghc2tpcEZzeW5jICYmICFTbWdySXNUZW1w KHJlbG4pKQotCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0sIHYpOworCWlm ICghc2tpcEZzeW5jICYmICFTbWdySXNUZW1wKHNmaWxlKSkKKwkJcmVnaXN0ZXJfZGlydHlfc2Vn bWVudChzZmlsZSwgdik7CiAKLQlBc3NlcnQoX21kbmJsb2NrcyhyZWxuLCBmb3JrbnVtLCB2KSA8 PSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOworCUFzc2VydChfbWRuYmxvY2tzKHNmaWxl LCB2KSA8PSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwogfQogCiAvKgpAQCAtNTExLDE3 ICs0OTksMTcgQEAgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKiBpbnZlbnQgb25lIG91dCBvZiB3aG9sZSBjbG90 aC4KICAqLwogc3RhdGljIE1kZmRWZWMgKgotbWRvcGVuZm9yayhTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpCittZG9wZW5mb3JrKFNNZ3JGaWxlSGFu ZGxlIHNmaWxlLCBpbnQgYmVoYXZpb3IpCiB7CiAJTWRmZFZlYyAgICAqbWRmZDsKIAljaGFyCSAg ICpwYXRoOwogCUZpbGUJCWZkOwogCiAJLyogTm8gd29yayBpZiBhbHJlYWR5IG9wZW4gKi8KLQlp ZiAocmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA+IDApCi0JCXJldHVybiAmcmVsbi0+ bWRfc2VnX2Zkc1tmb3JrbnVtXVswXTsKKwlpZiAoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPiAw KQorCQlyZXR1cm4gJnNmaWxlLT5tZF9zZWdfZmRzWzBdOwogCi0JcGF0aCA9IHJlbHBhdGgocmVs bi0+c21ncl9ybG9jYXRvciwgZm9ya251bSk7CisJcGF0aCA9IHNtZ3JmaWxlcGF0aChzZmlsZS0+ c21ncl9sb2NhdG9yKTsKIAogCWZkID0gUGF0aE5hbWVPcGVuRmlsZShwYXRoLCBPX1JEV1IgfCBQ R19CSU5BUlkpOwogCkBAIC01NDAsMTIgKzUyOCwxMiBAQCBtZG9wZW5mb3JrKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIGludCBiZWhhdmlvcikKIAogCXBmcmVlKHBhdGgp OwogCi0JX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVtLCAxKTsKLQltZGZkID0gJnJlbG4tPm1k X3NlZ19mZHNbZm9ya251bV1bMF07CisJX2ZkdmVjX3Jlc2l6ZShzZmlsZSwgMSk7CisJbWRmZCA9 ICZzZmlsZS0+bWRfc2VnX2Zkc1swXTsKIAltZGZkLT5tZGZkX3ZmZCA9IGZkOwogCW1kZmQtPm1k ZmRfc2Vnbm8gPSAwOwogCi0JQXNzZXJ0KF9tZG5ibG9ja3MocmVsbiwgZm9ya251bSwgbWRmZCkg PD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKKwlBc3NlcnQoX21kbmJsb2NrcyhzZmls ZSwgbWRmZCkgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKIAogCXJldHVybiBtZGZk OwogfQpAQCAtNTU0LDIwICs1NDIsMTkgQEAgbWRvcGVuZm9yayhTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpCiAgKiAgbWRvcGVuKCkgLS0gSW5pdGlh bGl6ZSBuZXdseS1vcGVuZWQgcmVsYXRpb24uCiAgKi8KIHZvaWQKLW1kb3BlbihTTWdyUmVsYXRp b24gcmVsbikKK21kb3BlbihTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKiBtYXJrIGl0IG5v dCBvcGVuICovCi0JZm9yIChpbnQgZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07 IGZvcmtudW0rKykKLQkJcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA9IDA7CisJc2Zp bGUtPm1kX251bV9vcGVuX3NlZ3MgPSAwOwogfQogCiAvKgogICoJbWRjbG9zZSgpIC0tIENsb3Nl IHRoZSBzcGVjaWZpZWQgcmVsYXRpb24sIGlmIGl0IGlzbid0IGNsb3NlZCBhbHJlYWR5LgogICov CiB2b2lkCi1tZGNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCitt ZGNsb3NlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewotCWludAkJCW5vcGVuc2VncyA9IHJlbG4t Pm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJaW50CQkJbm9wZW5zZWdzID0gc2ZpbGUtPm1k X251bV9vcGVuX3NlZ3M7CiAKIAkvKiBObyB3b3JrIGlmIGFscmVhZHkgY2xvc2VkICovCiAJaWYg KG5vcGVuc2VncyA9PSAwKQpAQCAtNTc2LDEwICs1NjMsMTAgQEAgbWRjbG9zZShTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogCS8qIGNsb3NlIHNlZ21lbnRzIHN0YXJ0aW5n IGZyb20gdGhlIGVuZCAqLwogCXdoaWxlIChub3BlbnNlZ3MgPiAwKQogCXsKLQkJTWRmZFZlYyAg ICAqdiA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW25vcGVuc2VncyAtIDFdOworCQlNZGZk VmVjICAgICp2ID0gJnNmaWxlLT5tZF9zZWdfZmRzW25vcGVuc2VncyAtIDFdOwogCiAJCUZpbGVD bG9zZSh2LT5tZGZkX3ZmZCk7Ci0JCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgbm9wZW5z ZWdzIC0gMSk7CisJCV9mZHZlY19yZXNpemUoc2ZpbGUsIG5vcGVuc2VncyAtIDEpOwogCQlub3Bl bnNlZ3MtLTsKIAl9CiB9CkBAIC01ODgsMTMgKzU3NSwxMyBAQCBtZGNsb3NlKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAgKgltZHByZWZldGNoKCkgLS0gSW5pdGlhdGUg YXN5bmNocm9ub3VzIHJlYWQgb2YgdGhlIHNwZWNpZmllZCBibG9jayBvZiBhIHJlbGF0aW9uCiAg Ki8KIGJvb2wKLW1kcHJlZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0pCittZHByZWZldGNoKFNNZ3JGaWxlSGFuZGxlIHNmaWxl LCBCbG9ja051bWJlciBibG9ja251bSkKIHsKICNpZmRlZiBVU0VfUFJFRkVUQ0gKIAlvZmZfdAkJ c2Vla3BvczsKIAlNZGZkVmVjICAgICp2OwogCi0JdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3Jr bnVtLCBibG9ja251bSwgZmFsc2UsCisJdiA9IF9tZGZkX2dldHNlZyhzZmlsZSwgYmxvY2tudW0s IGZhbHNlLAogCQkJCQkgSW5SZWNvdmVyeSA/IEVYVEVOU0lPTl9SRVRVUk5fTlVMTCA6IEVYVEVO U0lPTl9GQUlMKTsKIAlpZiAodiA9PSBOVUxMKQogCQlyZXR1cm4gZmFsc2U7CkBAIC02MTYsOCAr NjAzLDcgQEAgbWRwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LCBCbG9ja051bWJlciBibG9ja251bSkKICAqIGNvbnNpZGVyYWJseSBtb3JlIGVmZmljaWVudCB0 aGFuIGRvaW5nIHNvIGluZGl2aWR1YWxseS4KICAqLwogdm9pZAotbWR3cml0ZWJhY2soU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVt LCBCbG9ja051bWJlciBuYmxvY2tzKQorbWR3cml0ZWJhY2soU01nckZpbGVIYW5kbGUgc2ZpbGUs IEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQogewogCS8qCiAJICog SXNzdWUgZmx1c2ggcmVxdWVzdHMgaW4gYXMgZmV3IHJlcXVlc3RzIGFzIHBvc3NpYmxlOyBoYXZl IHRvIHNwbGl0IGF0CkBAIC02MzEsNyArNjE3LDcgQEAgbWR3cml0ZWJhY2soU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJaW50CQkJc2VnbnVtX3N0YXJ0LAogCQkJCQlz ZWdudW1fZW5kOwogCi0JCXYgPSBfbWRmZF9nZXRzZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0s IHRydWUgLyogbm90IHVzZWQgKi8gLAorCQl2ID0gX21kZmRfZ2V0c2VnKHNmaWxlLCBibG9ja251 bSwgdHJ1ZSAvKiBub3QgdXNlZCAqLyAsCiAJCQkJCQkgRVhURU5TSU9OX0RPTlRfT1BFTik7CiAK IAkJLyoKQEAgLTY2OCwyMCArNjU0LDIxIEBAIG1kd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sCiAgKgltZHJlYWQoKSAtLSBSZWFkIHRoZSBzcGVjaWZpZWQg YmxvY2sgZnJvbSBhIHJlbGF0aW9uLgogICovCiB2b2lkCi1tZHJlYWQoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCittZHJlYWQoU01n ckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCSAgIGNoYXIgKmJ1ZmZl cikKIHsKIAlvZmZfdAkJc2Vla3BvczsKIAlpbnQJCQluYnl0ZXM7CiAJTWRmZFZlYyAgICAqdjsK IAotCVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9SRUFEX1NUQVJUKGZvcmtudW0sIGJsb2NrbnVt LAotCQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJ CQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCXJlbG4tPnNt Z3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9j YXRvci5iYWNrZW5kKTsKKwlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfUkVBRF9TVEFSVChzZmls ZS0+c21ncl9mb3JrbnVtLAorCQkJCQkJCQkJCWJsb2NrbnVtLAorCQkJCQkJCQkJCXNmaWxlLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5yZWxOdW1iZXIsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCk7CiAK LQl2ID0gX21kZmRfZ2V0c2VnKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBmYWxzZSwKKwl2ID0g X21kZmRfZ2V0c2VnKHNmaWxlLCBibG9ja251bSwgZmFsc2UsCiAJCQkJCSBFWFRFTlNJT05fRkFJ TCB8IEVYVEVOU0lPTl9DUkVBVEVfUkVDT1ZFUlkpOwogCiAJc2Vla3BvcyA9IChvZmZfdCkgQkxD S1NaICogKGJsb2NrbnVtICUgKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKQEAgLTY5MCwx MSArNjc3LDEyIEBAIG1kcmVhZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LCBCbG9ja051bWJlciBibG9ja251bSwKIAogCW5ieXRlcyA9IEZpbGVSZWFkKHYtPm1kZmRfdmZk LCBidWZmZXIsIEJMQ0tTWiwgc2Vla3BvcywgV0FJVF9FVkVOVF9EQVRBX0ZJTEVfUkVBRCk7CiAK LQlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfUkVBRF9ET05FKGZvcmtudW0sIGJsb2NrbnVtLAot CQkJCQkJCQkJICAgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJ CSAgIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCSAgIHJlbG4t PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkgICByZWxuLT5zbWdy X3Jsb2NhdG9yLmJhY2tlbmQsCisJVFJBQ0VfUE9TVEdSRVNRTF9TTUdSX01EX1JFQURfRE9ORShz ZmlsZS0+c21ncl9mb3JrbnVtLAorCQkJCQkJCQkJICAgYmxvY2tudW0sCisJCQkJCQkJCQkgICBz ZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCSAgIHNmaWxlLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkgICBzZmlsZS0+c21ncl9ybG9j YXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX3Jsb2NhdG9y LmJhY2tlbmQsCiAJCQkJCQkJCQkgICBuYnl0ZXMsCiAJCQkJCQkJCQkgICBCTENLU1opOwogCkBA IC03MzMsNyArNzIxLDcgQEAgbWRyZWFkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogICoJCXVzZSBtZGV4dGVuZCgpLgogICovCiB2 b2lkCi1tZHdyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2Nr TnVtYmVyIGJsb2NrbnVtLAorbWR3cml0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1i ZXIgYmxvY2tudW0sCiAJCWNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpCiB7CiAJb2ZmX3QJ CXNlZWtwb3M7CkBAIC03NDIsMTYgKzczMCwxNyBAQCBtZHdyaXRlKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCiAJLyogVGhpcyBh c3NlcnQgaXMgdG9vIGV4cGVuc2l2ZSB0byBoYXZlIG9uIG5vcm1hbGx5IC4uLiAqLwogI2lmZGVm IENIRUNLX1dSSVRFX1ZTX0VYVEVORAotCUFzc2VydChibG9ja251bSA8IG1kbmJsb2NrcyhyZWxu LCBmb3JrbnVtKSk7CisJQXNzZXJ0KGJsb2NrbnVtIDwgbWRuYmxvY2tzKHNmaWxlKSk7CiAjZW5k aWYKIAotCVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9XUklURV9TVEFSVChmb3JrbnVtLCBibG9j a251bSwKLQkJCQkJCQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJ CQkJCQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCSBy ZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJCSByZWxuLT5z bWdyX3Jsb2NhdG9yLmJhY2tlbmQpOworCVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9XUklURV9T VEFSVChzZmlsZS0+c21ncl9mb3JrbnVtLAorCQkJCQkJCQkJCSBibG9ja251bSwKKwkJCQkJCQkJ CQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJIHNmaWxl LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkJIHNmaWxlLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRv ci5iYWNrZW5kKTsKIAotCXYgPSBfbWRmZF9nZXRzZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0s IHNraXBGc3luYywKKwl2ID0gX21kZmRfZ2V0c2VnKHNmaWxlLCBibG9ja251bSwgc2tpcEZzeW5j LAogCQkJCQkgRVhURU5TSU9OX0ZBSUwgfCBFWFRFTlNJT05fQ1JFQVRFX1JFQ09WRVJZKTsKIAog CXNlZWtwb3MgPSAob2ZmX3QpIEJMQ0tTWiAqIChibG9ja251bSAlICgoQmxvY2tOdW1iZXIpIFJF TFNFR19TSVpFKSk7CkBAIC03NjAsMTEgKzc0OSwxMiBAQCBtZHdyaXRlKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCiAJbmJ5dGVz ID0gRmlsZVdyaXRlKHYtPm1kZmRfdmZkLCBidWZmZXIsIEJMQ0tTWiwgc2Vla3BvcywgV0FJVF9F VkVOVF9EQVRBX0ZJTEVfV1JJVEUpOwogCi0JVFJBQ0VfUE9TVEdSRVNRTF9TTUdSX01EX1dSSVRF X0RPTkUoZm9ya251bSwgYmxvY2tudW0sCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5s b2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJP aWQsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKLQkJ CQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJVFJBQ0VfUE9TVEdSRVNRTF9T TUdSX01EX1dSSVRFX0RPTkUoc2ZpbGUtPnNtZ3JfZm9ya251bSwKKwkJCQkJCQkJCQlibG9ja251 bSwKKwkJCQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJ CQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJCXNmaWxl LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdy X3Jsb2NhdG9yLmJhY2tlbmQsCiAJCQkJCQkJCQkJbmJ5dGVzLAogCQkJCQkJCQkJCUJMQ0tTWik7 CiAKQEAgLTc4NSw4ICs3NzUsOCBAQCBtZHdyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQkJCSBlcnJoaW50KCJDaGVjayBm cmVlIGRpc2sgc3BhY2UuIikpKTsKIAl9CiAKLQlpZiAoIXNraXBGc3luYyAmJiAhU21ncklzVGVt cChyZWxuKSkKLQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChyZWxuLCBmb3JrbnVtLCB2KTsKKwlp ZiAoIXNraXBGc3luYyAmJiAhU21ncklzVGVtcChzZmlsZSkpCisJCXJlZ2lzdGVyX2RpcnR5X3Nl Z21lbnQoc2ZpbGUsIHYpOwogfQogCiAvKgpAQCAtNzk4LDE2ICs3ODgsMTYgQEAgbWR3cml0ZShT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251 bSwKICAqCQlhcmUgcHJlc2VudCBpbiB0aGUgYXJyYXkuCiAgKi8KIEJsb2NrTnVtYmVyCi1tZG5i bG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK21kbmJsb2NrcyhT TWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAlNZGZkVmVjICAgICp2OwogCUJsb2NrTnVtYmVyIG5i bG9ja3M7CiAJQmxvY2tOdW1iZXIgc2Vnbm87CiAKLQltZG9wZW5mb3JrKHJlbG4sIGZvcmtudW0s IEVYVEVOU0lPTl9GQUlMKTsKKwltZG9wZW5mb3JrKHNmaWxlLCBFWFRFTlNJT05fRkFJTCk7CiAK IAkvKiBtZG9wZW4gaGFzIG9wZW5lZCB0aGUgZmlyc3Qgc2VnbWVudCAqLwotCUFzc2VydChyZWxu LT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCk7CisJQXNzZXJ0KHNmaWxlLT5tZF9udW1f b3Blbl9zZWdzID4gMCk7CiAKIAkvKgogCSAqIFN0YXJ0IGZyb20gdGhlIGxhc3Qgb3BlbiBzZWdt ZW50cywgdG8gYXZvaWQgcmVkdW5kYW50IHNlZWtzLiAgV2UgaGF2ZQpAQCAtODIyLDEyICs4MTIs MTIgQEAgbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJ ICogdGhhdCdzIE9LIGJlY2F1c2UgdGhlIGNoZWNrcG9pbnRlciBuZXZlciBuZWVkcyB0byBjb21w dXRlIHJlbGF0aW9uCiAJICogc2l6ZS4pCiAJICovCi0Jc2Vnbm8gPSByZWxuLT5tZF9udW1fb3Bl bl9zZWdzW2ZvcmtudW1dIC0gMTsKLQl2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bc2Vn bm9dOworCXNlZ25vID0gc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgLSAxOworCXYgPSAmc2ZpbGUt Pm1kX3NlZ19mZHNbc2Vnbm9dOwogCiAJZm9yICg7OykKIAl7Ci0JCW5ibG9ja3MgPSBfbWRuYmxv Y2tzKHJlbG4sIGZvcmtudW0sIHYpOworCQluYmxvY2tzID0gX21kbmJsb2NrcyhzZmlsZSwgdik7 CiAJCWlmIChuYmxvY2tzID4gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKQogCQkJZWxvZyhG QVRBTCwgInNlZ21lbnQgdG9vIGJpZyIpOwogCQlpZiAobmJsb2NrcyA8ICgoQmxvY2tOdW1iZXIp IFJFTFNFR19TSVpFKSkKQEAgLTg0NSw3ICs4MzUsNyBAQCBtZG5ibG9ja3MoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAkJICogdW5kZXJtaW5lcyBfbWRmZF9nZXRzZWcn cyBhdHRlbXB0cyB0byBub3RpY2UgYW5kIHJlcG9ydCBhbiBlcnJvcgogCQkgKiB1cG9uIGFjY2Vz cyB0byBhIG1pc3Npbmcgc2VnbWVudC4KIAkJICovCi0JCXYgPSBfbWRmZF9vcGVuc2VnKHJlbG4s IGZvcmtudW0sIHNlZ25vLCAwKTsKKwkJdiA9IF9tZGZkX29wZW5zZWcoc2ZpbGUsIHNlZ25vLCAw KTsKIAkJaWYgKHYgPT0gTlVMTCkKIAkJCXJldHVybiBzZWdubyAqICgoQmxvY2tOdW1iZXIpIFJF TFNFR19TSVpFKTsKIAl9CkBAIC04NTUsNyArODQ1LDcgQEAgbWRuYmxvY2tzKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAgKgltZHRydW5jYXRlKCkgLS0gVHJ1bmNhdGUg cmVsYXRpb24gdG8gc3BlY2lmaWVkIG51bWJlciBvZiBibG9ja3MuCiAgKi8KIHZvaWQKLW1kdHJ1 bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIg bmJsb2NrcykKK21kdHJ1bmNhdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIG5i bG9ja3MpCiB7CiAJQmxvY2tOdW1iZXIgY3VybmJsazsKIAlCbG9ja051bWJlciBwcmlvcmJsb2Nr czsKQEAgLTg2NSw3ICs4NTUsNyBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJICogTk9URTogbWRuYmxvY2tz IG1ha2VzIHN1cmUgd2UgaGF2ZSBvcGVuZWQgYWxsIGFjdGl2ZSBzZWdtZW50cywgc28gdGhhdAog CSAqIHRydW5jYXRpb24gbG9vcCB3aWxsIGdldCB0aGVtIGFsbCEKIAkgKi8KLQljdXJuYmxrID0g bWRuYmxvY2tzKHJlbG4sIGZvcmtudW0pOworCWN1cm5ibGsgPSBtZG5ibG9ja3Moc2ZpbGUpOwog CWlmIChuYmxvY2tzID4gY3VybmJsaykKIAl7CiAJCS8qIEJvZ3VzIHJlcXVlc3QgLi4uIGJ1dCBu byBjb21wbGFpbnQgaWYgSW5SZWNvdmVyeSAqLwpAQCAtODczLDcgKzg2Myw3IEBAIG1kdHJ1bmNh dGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgbmJs b2NrcykKIAkJCXJldHVybjsKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCJjb3VsZCBu b3QgdHJ1bmNhdGUgZmlsZSBcIiVzXCIgdG8gJXUgYmxvY2tzOiBpdCdzIG9ubHkgJXUgYmxvY2tz IG5vdyIsCi0JCQkJCQlyZWxwYXRoKHJlbG4tPnNtZ3JfcmxvY2F0b3IsIGZvcmtudW0pLAorCQkJ CQkJc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpLAogCQkJCQkJbmJsb2NrcywgY3Vy bmJsaykpKTsKIAl9CiAJaWYgKG5ibG9ja3MgPT0gY3VybmJsaykKQEAgLTg4MywxNCArODczLDE0 IEBAIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxv Y2tOdW1iZXIgbmJsb2NrcykKIAkgKiBUcnVuY2F0ZSBzZWdtZW50cywgc3RhcnRpbmcgYXQgdGhl IGxhc3Qgb25lLiBTdGFydGluZyBhdCB0aGUgZW5kIG1ha2VzCiAJICogbWFuYWdpbmcgdGhlIG1l bW9yeSBmb3IgdGhlIGZkIGFycmF5IGVhc2llciwgc2hvdWxkIHRoZXJlIGJlIGVycm9ycy4KIAkg Ki8KLQljdXJvcGVuc2VncyA9IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJY3Vy b3BlbnNlZ3MgPSBzZmlsZS0+bWRfbnVtX29wZW5fc2VnczsKIAl3aGlsZSAoY3Vyb3BlbnNlZ3Mg PiAwKQogCXsKIAkJTWRmZFZlYyAgICAqdjsKIAogCQlwcmlvcmJsb2NrcyA9IChjdXJvcGVuc2Vn cyAtIDEpICogUkVMU0VHX1NJWkU7CiAKLQkJdiA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1d W2N1cm9wZW5zZWdzIC0gMV07CisJCXYgPSAmc2ZpbGUtPm1kX3NlZ19mZHNbY3Vyb3BlbnNlZ3Mg LSAxXTsKIAogCQlpZiAocHJpb3JibG9ja3MgPiBuYmxvY2tzKQogCQl7CkBAIC05MDQsMTQgKzg5 NCwxNCBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s IEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgdHJ1bmNhdGUg ZmlsZSBcIiVzXCI6ICVtIiwKIAkJCQkJCQkJRmlsZVBhdGhOYW1lKHYtPm1kZmRfdmZkKSkpKTsK IAotCQkJaWYgKCFTbWdySXNUZW1wKHJlbG4pKQotCQkJCXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQo cmVsbiwgZm9ya251bSwgdik7CisJCQlpZiAoIVNtZ3JJc1RlbXAoc2ZpbGUpKQorCQkJCXJlZ2lz dGVyX2RpcnR5X3NlZ21lbnQoc2ZpbGUsIHYpOwogCiAJCQkvKiB3ZSBuZXZlciBkcm9wIHRoZSAx c3Qgc2VnbWVudCAqLwotCQkJQXNzZXJ0KHYgIT0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1b MF0pOworCQkJQXNzZXJ0KHYgIT0gJnNmaWxlLT5tZF9zZWdfZmRzWzBdKTsKIAogCQkJRmlsZUNs b3NlKHYtPm1kZmRfdmZkKTsKLQkJCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgY3Vyb3Bl bnNlZ3MgLSAxKTsKKwkJCV9mZHZlY19yZXNpemUoc2ZpbGUsIGN1cm9wZW5zZWdzIC0gMSk7CiAJ CX0KIAkJZWxzZSBpZiAocHJpb3JibG9ja3MgKyAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkg PiBuYmxvY2tzKQogCQl7CkBAIC05MzAsOCArOTIwLDggQEAgbWR0cnVuY2F0ZShTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQogCQkJCQkJ IGVycm1zZygiY291bGQgbm90IHRydW5jYXRlIGZpbGUgXCIlc1wiIHRvICV1IGJsb2NrczogJW0i LAogCQkJCQkJCQlGaWxlUGF0aE5hbWUodi0+bWRmZF92ZmQpLAogCQkJCQkJCQluYmxvY2tzKSkp OwotCQkJaWYgKCFTbWdySXNUZW1wKHJlbG4pKQotCQkJCXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQo cmVsbiwgZm9ya251bSwgdik7CisJCQlpZiAoIVNtZ3JJc1RlbXAoc2ZpbGUpKQorCQkJCXJlZ2lz dGVyX2RpcnR5X3NlZ21lbnQoc2ZpbGUsIHYpOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtOTU3LDcg Kzk0Nyw3IEBAIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKICAqIHNlZ21lbnQgbWF5IHN1cnZpdmUgcmVjb3Zlcnks IHJlaW50cm9kdWNpbmcgdW53YW50ZWQgZGF0YSBpbnRvIHRoZSB0YWJsZS4KICAqLwogdm9pZAot bWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK21kaW1t ZWRzeW5jKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewogCWludAkJCXNlZ25vOwogCWludAkJCW1p bl9pbmFjdGl2ZV9zZWc7CkBAIC05NjYsOSArOTU2LDkgQEAgbWRpbW1lZHN5bmMoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAkgKiBOT1RFOiBtZG5ibG9ja3MgbWFrZXMg c3VyZSB3ZSBoYXZlIG9wZW5lZCBhbGwgYWN0aXZlIHNlZ21lbnRzLCBzbyB0aGF0CiAJICogZnN5 bmMgbG9vcCB3aWxsIGdldCB0aGVtIGFsbCEKIAkgKi8KLQltZG5ibG9ja3MocmVsbiwgZm9ya251 bSk7CisJbWRuYmxvY2tzKHNmaWxlKTsKIAotCW1pbl9pbmFjdGl2ZV9zZWcgPSBzZWdubyA9IHJl bG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJbWluX2luYWN0aXZlX3NlZyA9IHNlZ25v ID0gc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3M7CiAKIAkvKgogCSAqIFRlbXBvcmFyaWx5IG9wZW4g aW5hY3RpdmUgc2VnbWVudHMsIHRoZW4gY2xvc2UgdGhlbSBhZnRlciBzeW5jLiAgVGhlcmUKQEAg LTk3NiwxMiArOTY2LDEyIEBAIG1kaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0pCiAJICogaXMgaGFybWxlc3MuICBXZSBkb24ndCBib3RoZXIgdG8gY2xlYW4g dGhlbSB1cCBhbmQgdGFrZSBhIHJpc2sgb2YKIAkgKiBmdXJ0aGVyIHRyb3VibGUuICBUaGUgbmV4 dCBtZGNsb3NlKCkgd2lsbCBzb29uIGNsb3NlIHRoZW0uCiAJICovCi0Jd2hpbGUgKF9tZGZkX29w ZW5zZWcocmVsbiwgZm9ya251bSwgc2Vnbm8sIDApICE9IE5VTEwpCisJd2hpbGUgKF9tZGZkX29w ZW5zZWcoc2ZpbGUsIHNlZ25vLCAwKSAhPSBOVUxMKQogCQlzZWdubysrOwogCiAJd2hpbGUgKHNl Z25vID4gMCkKIAl7Ci0JCU1kZmRWZWMgICAgKnYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVt XVtzZWdubyAtIDFdOworCQlNZGZkVmVjICAgICp2ID0gJnNmaWxlLT5tZF9zZWdfZmRzW3NlZ25v IC0gMV07CiAKIAkJaWYgKEZpbGVTeW5jKHYtPm1kZmRfdmZkLCBXQUlUX0VWRU5UX0RBVEFfRklM RV9JTU1FRElBVEVfU1lOQykgPCAwKQogCQkJZXJlcG9ydChkYXRhX3N5bmNfZWxldmVsKEVSUk9S KSwKQEAgLTk5Myw3ICs5ODMsNyBAQCBtZGltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtKQogCQlpZiAoc2Vnbm8gPiBtaW5faW5hY3RpdmVfc2VnKQogCQl7CiAJ CQlGaWxlQ2xvc2Uodi0+bWRmZF92ZmQpOwotCQkJX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVt LCBzZWdubyAtIDEpOworCQkJX2ZkdmVjX3Jlc2l6ZShzZmlsZSwgc2Vnbm8gLSAxKTsKIAkJfQog CiAJCXNlZ25vLS07CkBAIC0xMDEwLDE0ICsxMDAwLDE0IEBAIG1kaW1tZWRzeW5jKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAgKiBlbm91Z2ggdG8gYmUgYSBwZXJmb3Jt YW5jZSBwcm9ibGVtKS4KICAqLwogc3RhdGljIHZvaWQKLXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgTWRmZFZlYyAqc2VnKQorcmVn aXN0ZXJfZGlydHlfc2VnbWVudChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgTWRmZFZlYyAqc2VnKQog ewogCUZpbGVUYWcJCXRhZzsKIAotCUlOSVRfTURfRklMRVRBRyh0YWcsIHJlbG4tPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvciwgZm9ya251bSwgc2VnLT5tZGZkX3NlZ25vKTsKKwlJTklUX01EX0ZJTEVU QUcodGFnLCBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IsIHNmaWxlLT5zbWdyX2xvY2F0b3Iu Zm9ya251bSwgc2VnLT5tZGZkX3NlZ25vKTsKIAogCS8qIFRlbXAgcmVsYXRpb25zIHNob3VsZCBu ZXZlciBiZSBmc3luYydkICovCi0JQXNzZXJ0KCFTbWdySXNUZW1wKHJlbG4pKTsKKwlBc3NlcnQo IVNtZ3JJc1RlbXAoc2ZpbGUpKTsKIAogCWlmICghUmVnaXN0ZXJTeW5jUmVxdWVzdCgmdGFnLCBT WU5DX1JFUVVFU1QsIGZhbHNlIC8qIHJldHJ5T25FcnJvciAqLyApKQogCXsKQEAgLTEwMzYsMTUg KzEwMjYsMTQgQEAgcmVnaXN0ZXJfZGlydHlfc2VnbWVudChTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLCBNZGZkVmVjICpzZWcpCiAgKiByZWdpc3Rlcl91bmxpbmtfc2VnbWVu dCgpIC0tIFNjaGVkdWxlIGEgZmlsZSB0byBiZSBkZWxldGVkIGFmdGVyIG5leHQgY2hlY2twb2lu dAogICovCiBzdGF0aWMgdm9pZAotcmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoUmVsRmlsZUxvY2F0 b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQlCbG9ja051bWJl ciBzZWdubykKK3JlZ2lzdGVyX3VubGlua19zZWdtZW50KFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRv ciwgQmxvY2tOdW1iZXIgc2Vnbm8pCiB7CiAJRmlsZVRhZwkJdGFnOwogCi0JSU5JVF9NRF9GSUxF VEFHKHRhZywgcmxvY2F0b3IubG9jYXRvciwgZm9ya251bSwgc2Vnbm8pOworCUlOSVRfTURfRklM RVRBRyh0YWcsIHNsb2NhdG9yLmxvY2F0b3IsIHNsb2NhdG9yLmZvcmtudW0sIHNlZ25vKTsKIAog CS8qIFNob3VsZCBuZXZlciBiZSB1c2VkIHdpdGggdGVtcCByZWxhdGlvbnMgKi8KLQlBc3NlcnQo IVJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChybG9jYXRvcikpOworCUFzc2VydCghU01nckZp bGVMb2NhdG9ySXNUZW1wKHNsb2NhdG9yKSk7CiAKIAlSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcs IFNZTkNfVU5MSU5LX1JFUVVFU1QsIHRydWUgLyogcmV0cnlPbkVycm9yICovICk7CiB9CkBAIC0x MDUzLDEyICsxMDQyLDExIEBAIHJlZ2lzdGVyX3VubGlua19zZWdtZW50KFJlbEZpbGVMb2NhdG9y QmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAogICogcmVnaXN0ZXJfZm9yZ2V0 X3JlcXVlc3QoKSAtLSBmb3JnZXQgYW55IGZzeW5jcyBmb3IgYSByZWxhdGlvbiBmb3JrJ3Mgc2Vn bWVudAogICovCiBzdGF0aWMgdm9pZAotcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3QoUmVsRmlsZUxv Y2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQlCbG9ja051 bWJlciBzZWdubykKK3JlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0KFNNZ3JGaWxlTG9jYXRvciBzbG9j YXRvciwgQmxvY2tOdW1iZXIgc2Vnbm8pCiB7CiAJRmlsZVRhZwkJdGFnOwogCi0JSU5JVF9NRF9G SUxFVEFHKHRhZywgcmxvY2F0b3IubG9jYXRvciwgZm9ya251bSwgc2Vnbm8pOworCUlOSVRfTURf RklMRVRBRyh0YWcsIHNsb2NhdG9yLmxvY2F0b3IsIHNsb2NhdG9yLmZvcmtudW0sIHNlZ25vKTsK IAogCVJlZ2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19GT1JHRVRfUkVRVUVTVCwgdHJ1ZSAv KiByZXRyeU9uRXJyb3IgKi8gKTsKIH0KQEAgLTEwODEsNTcgKzEwNjksMjUgQEAgRm9yZ2V0RGF0 YWJhc2VTeW5jUmVxdWVzdHMoT2lkIGRiaWQpCiAJUmVnaXN0ZXJTeW5jUmVxdWVzdCgmdGFnLCBT WU5DX0ZJTFRFUl9SRVFVRVNULCB0cnVlIC8qIHJldHJ5T25FcnJvciAqLyApOwogfQogCi0vKgot ICogRHJvcFJlbGF0aW9uRmlsZXMgLS0gZHJvcCBmaWxlcyBvZiBhbGwgZ2l2ZW4gcmVsYXRpb25z Ci0gKi8KLXZvaWQKLURyb3BSZWxhdGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpkZWxyZWxzLCBp bnQgbmRlbHJlbHMsIGJvb2wgaXNSZWRvKQotewotCVNNZ3JSZWxhdGlvbiAqc3JlbHM7Ci0JaW50 CQkJaTsKLQotCXNyZWxzID0gcGFsbG9jKHNpemVvZihTTWdyUmVsYXRpb24pICogbmRlbHJlbHMp OwotCWZvciAoaSA9IDA7IGkgPCBuZGVscmVsczsgaSsrKQotCXsKLQkJU01nclJlbGF0aW9uIHNy ZWwgPSBzbWdyb3BlbihkZWxyZWxzW2ldLCBJbnZhbGlkQmFja2VuZElkKTsKLQotCQlpZiAoaXNS ZWRvKQotCQl7Ci0JCQlGb3JrTnVtYmVyCWZvcms7Ci0KLQkJCWZvciAoZm9yayA9IDA7IGZvcmsg PD0gTUFYX0ZPUktOVU07IGZvcmsrKykKLQkJCQlYTG9nRHJvcFJlbGF0aW9uKGRlbHJlbHNbaV0s IGZvcmspOwotCQl9Ci0JCXNyZWxzW2ldID0gc3JlbDsKLQl9Ci0KLQlzbWdyZG91bmxpbmthbGwo c3JlbHMsIG5kZWxyZWxzLCBpc1JlZG8pOwotCi0JZm9yIChpID0gMDsgaSA8IG5kZWxyZWxzOyBp KyspCi0JCXNtZ3JjbG9zZShzcmVsc1tpXSk7Ci0JcGZyZWUoc3JlbHMpOwotfQotCiAKIC8qCiAg KglfZmR2ZWNfcmVzaXplKCkgLS0gUmVzaXplIHRoZSBmb3JrJ3Mgb3BlbiBzZWdtZW50cyBhcnJh eQogICovCiBzdGF0aWMgdm9pZAotX2ZkdmVjX3Jlc2l6ZShTTWdyUmVsYXRpb24gcmVsbiwKLQkJ CSAgRm9ya051bWJlciBmb3JrbnVtLAorX2ZkdmVjX3Jlc2l6ZShTTWdyRmlsZUhhbmRsZSBzZmls ZSwKIAkJCSAgaW50IG5zZWcpCiB7CiAJaWYgKG5zZWcgPT0gMCkKIAl7Ci0JCWlmIChyZWxuLT5t ZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCkKKwkJaWYgKHNmaWxlLT5tZF9udW1fb3Blbl9z ZWdzID4gMCkKIAkJewotCQkJcGZyZWUocmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXSk7Ci0JCQly ZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dID0gTlVMTDsKKwkJCXBmcmVlKHNmaWxlLT5tZF9zZWdf ZmRzKTsKKwkJCXNmaWxlLT5tZF9zZWdfZmRzID0gTlVMTDsKIAkJfQogCX0KLQllbHNlIGlmIChy ZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID09IDApCisJZWxzZSBpZiAoc2ZpbGUtPm1k X251bV9vcGVuX3NlZ3MgPT0gMCkKIAl7Ci0JCXJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV0gPQor CQlzZmlsZS0+bWRfc2VnX2ZkcyA9CiAJCQlNZW1vcnlDb250ZXh0QWxsb2MoTWRDeHQsIHNpemVv ZihNZGZkVmVjKSAqIG5zZWcpOwogCX0KIAllbHNlCkBAIC0xMTQyLDEyICsxMDk4LDEyIEBAIF9m ZHZlY19yZXNpemUoU01nclJlbGF0aW9uIHJlbG4sCiAJCSAqIEZpbGVDbG9zZSgpLCBhbmQgdGhl IG1lbW9yeSBjb250ZXh0IGludGVybmFsbHkgd2lsbCBzb21ldGltZXMgYXZvaWQKIAkJICogZG9p bmcgYW4gYWN0dWFsIHJlYWxsb2NhdGlvbi4KIAkJICovCi0JCXJlbG4tPm1kX3NlZ19mZHNbZm9y a251bV0gPQotCQkJcmVwYWxsb2MocmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXSwKKwkJc2ZpbGUt Pm1kX3NlZ19mZHMgPQorCQkJcmVwYWxsb2Moc2ZpbGUtPm1kX3NlZ19mZHMsCiAJCQkJCSBzaXpl b2YoTWRmZFZlYykgKiBuc2VnKTsKIAl9CiAKLQlyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2Zvcmtu dW1dID0gbnNlZzsKKwlzZmlsZS0+bWRfbnVtX29wZW5fc2VncyA9IG5zZWc7CiB9CiAKIC8qCkBA IC0xMTU1LDEyICsxMTExLDEyIEBAIF9mZHZlY19yZXNpemUoU01nclJlbGF0aW9uIHJlbG4sCiAg KiByZXR1cm5lZCBzdHJpbmcgaXMgcGFsbG9jJ2QuCiAgKi8KIHN0YXRpYyBjaGFyICoKLV9tZGZk X3NlZ3BhdGgoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1i ZXIgc2Vnbm8pCitfbWRmZF9zZWdwYXRoKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJl ciBzZWdubykKIHsKIAljaGFyCSAgICpwYXRoLAogCQkJICAgKmZ1bGxwYXRoOwogCi0JcGF0aCA9 IHJlbHBhdGgocmVsbi0+c21ncl9ybG9jYXRvciwgZm9ya251bSk7CisJcGF0aCA9IHNtZ3JmaWxl cGF0aChzZmlsZS0+c21ncl9sb2NhdG9yKTsKIAogCWlmIChzZWdubyA+IDApCiAJewpAQCAtMTE3 OCwxNCArMTEzNCwxNCBAQCBfbWRmZF9zZWdwYXRoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIHNlZ25vKQogICogYW5kIG1ha2UgYSBNZGZkVmVjIG9i amVjdCBmb3IgaXQuICBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIE1kZmRW ZWMgKgotX21kZmRfb3BlbnNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LCBCbG9ja051bWJlciBzZWdubywKK19tZGZkX29wZW5zZWcoU01nckZpbGVIYW5kbGUgc2ZpbGUs IEJsb2NrTnVtYmVyIHNlZ25vLAogCQkJICBpbnQgb2ZsYWdzKQogewogCU1kZmRWZWMgICAgKnY7 CiAJRmlsZQkJZmQ7CiAJY2hhcgkgICAqZnVsbHBhdGg7CiAKLQlmdWxscGF0aCA9IF9tZGZkX3Nl Z3BhdGgocmVsbiwgZm9ya251bSwgc2Vnbm8pOworCWZ1bGxwYXRoID0gX21kZmRfc2VncGF0aChz ZmlsZSwgc2Vnbm8pOwogCiAJLyogb3BlbiB0aGUgZmlsZSAqLwogCWZkID0gUGF0aE5hbWVPcGVu RmlsZShmdWxscGF0aCwgT19SRFdSIHwgUEdfQklOQVJZIHwgb2ZsYWdzKTsKQEAgLTExOTksMTYg KzExNTUsMTYgQEAgX21kZmRfb3BlbnNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLCBCbG9ja051bWJlciBzZWdubywKIAkgKiBTZWdtZW50cyBhcmUgYWx3YXlzIG9wZW5l ZCBpbiBvcmRlciBmcm9tIGxvd2VzdCB0byBoaWdoZXN0LCBzbyB3ZSBtdXN0CiAJICogYmUgYWRk aW5nIGEgbmV3IG9uZSBhdCB0aGUgZW5kLgogCSAqLwotCUFzc2VydChzZWdubyA9PSByZWxuLT5t ZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dKTsKKwlBc3NlcnQoc2Vnbm8gPT0gc2ZpbGUtPm1kX251 bV9vcGVuX3NlZ3MpOwogCi0JX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVtLCBzZWdubyArIDEp OworCV9mZHZlY19yZXNpemUoc2ZpbGUsIHNlZ25vICsgMSk7CiAKIAkvKiBmaWxsIHRoZSBlbnRy eSAqLwotCXYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtzZWdub107CisJdiA9ICZzZmls ZS0+bWRfc2VnX2Zkc1tzZWdub107CiAJdi0+bWRmZF92ZmQgPSBmZDsKIAl2LT5tZGZkX3NlZ25v ID0gc2Vnbm87CiAKLQlBc3NlcnQoX21kbmJsb2NrcyhyZWxuLCBmb3JrbnVtLCB2KSA8PSAoKEJs b2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOworCUFzc2VydChfbWRuYmxvY2tzKHNmaWxlLCB2KSA8 PSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwogCiAJLyogYWxsIGRvbmUgKi8KIAlyZXR1 cm4gdjsKQEAgLTEyMjMsNyArMTE3OSw3IEBAIF9tZGZkX29wZW5zZWcoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgc2Vnbm8sCiAgKiBFWFRFTlNJT05f Q1JFQVRFIGNhc2UuCiAgKi8KIHN0YXRpYyBNZGZkVmVjICoKLV9tZGZkX2dldHNlZyhTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibGtubywKK19tZGZk X2dldHNlZyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkgYm9v bCBza2lwRnN5bmMsIGludCBiZWhhdmlvcikKIHsKIAlNZGZkVmVjICAgICp2OwpAQCAtMTIzOCw5 ICsxMTk0LDkgQEAgX21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sIEJsb2NrTnVtYmVyIGJsa25vLAogCXRhcmdldHNlZyA9IGJsa25vIC8gKChCbG9ja051 bWJlcikgUkVMU0VHX1NJWkUpOwogCiAJLyogaWYgYW4gZXhpc3RpbmcgYW5kIG9wZW5lZCBzZWdt ZW50LCB3ZSdyZSBkb25lICovCi0JaWYgKHRhcmdldHNlZyA8IHJlbG4tPm1kX251bV9vcGVuX3Nl Z3NbZm9ya251bV0pCisJaWYgKHRhcmdldHNlZyA8IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzKQog CXsKLQkJdiA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW3RhcmdldHNlZ107CisJCXYgPSAm c2ZpbGUtPm1kX3NlZ19mZHNbdGFyZ2V0c2VnXTsKIAkJcmV0dXJuIHY7CiAJfQogCkBAIC0xMjU1 LDE5ICsxMjExLDE5IEBAIF9tZGZkX2dldHNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLCBCbG9ja051bWJlciBibGtubywKIAkgKiAnYmVoYXZpb3InKS4gU3RhcnQgd2l0 aCBlaXRoZXIgdGhlIGxhc3Qgb3BlbmVkLCBvciB0aGUgZmlyc3Qgc2VnbWVudCBpZgogCSAqIG5v bmUgd2FzIG9wZW5lZCBiZWZvcmUuCiAJICovCi0JaWYgKHJlbG4tPm1kX251bV9vcGVuX3NlZ3Nb Zm9ya251bV0gPiAwKQotCQl2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bcmVsbi0+bWRf bnVtX29wZW5fc2Vnc1tmb3JrbnVtXSAtIDFdOworCWlmIChzZmlsZS0+bWRfbnVtX29wZW5fc2Vn cyA+IDApCisJCXYgPSAmc2ZpbGUtPm1kX3NlZ19mZHNbc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3Mg LSAxXTsKIAllbHNlCiAJewotCQl2ID0gbWRvcGVuZm9yayhyZWxuLCBmb3JrbnVtLCBiZWhhdmlv cik7CisJCXYgPSBtZG9wZW5mb3JrKHNmaWxlLCBiZWhhdmlvcik7CiAJCWlmICghdikKIAkJCXJl dHVybiBOVUxMOwkJLyogaWYgYmVoYXZpb3IgJiBFWFRFTlNJT05fUkVUVVJOX05VTEwgKi8KIAl9 CiAKLQlmb3IgKG5leHRzZWdubyA9IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJ Zm9yIChuZXh0c2Vnbm8gPSBzZmlsZS0+bWRfbnVtX29wZW5fc2VnczsKIAkJIG5leHRzZWdubyA8 PSB0YXJnZXRzZWc7IG5leHRzZWdubysrKQogCXsKLQkJQmxvY2tOdW1iZXIgbmJsb2NrcyA9IF9t ZG5ibG9ja3MocmVsbiwgZm9ya251bSwgdik7CisJCUJsb2NrTnVtYmVyIG5ibG9ja3MgPSBfbWRu YmxvY2tzKHNmaWxlLCB2KTsKIAkJaW50CQkJZmxhZ3MgPSAwOwogCiAJCUFzc2VydChuZXh0c2Vn bm8gPT0gdi0+bWRmZF9zZWdubyArIDEpOwpAQCAtMTI5Niw3ICsxMjUyLDcgQEAgX21kZmRfZ2V0 c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJs a25vLAogCQkJewogCQkJCWNoYXIJICAgKnplcm9idWYgPSBwYWxsb2MwKEJMQ0tTWik7CiAKLQkJ CQltZGV4dGVuZChyZWxuLCBmb3JrbnVtLAorCQkJCW1kZXh0ZW5kKHNmaWxlLAogCQkJCQkJIG5l eHRzZWdubyAqICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSAtIDEsCiAJCQkJCQkgemVyb2J1 Ziwgc2tpcEZzeW5jKTsKIAkJCQlwZnJlZSh6ZXJvYnVmKTsKQEAgLTEzMjcsMTEgKzEyODMsMTEg QEAgX21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJs b2NrTnVtYmVyIGJsa25vLAogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGVfZm9yX2Zp bGVfYWNjZXNzKCksCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiICh0 YXJnZXQgYmxvY2sgJXUpOiBwcmV2aW91cyBzZWdtZW50IGlzIG9ubHkgJXUgYmxvY2tzIiwKLQkJ CQkJCQlfbWRmZF9zZWdwYXRoKHJlbG4sIGZvcmtudW0sIG5leHRzZWdubyksCisJCQkJCQkJX21k ZmRfc2VncGF0aChzZmlsZSwgbmV4dHNlZ25vKSwKIAkJCQkJCQlibGtubywgbmJsb2NrcykpKTsK IAkJfQogCi0JCXYgPSBfbWRmZF9vcGVuc2VnKHJlbG4sIGZvcmtudW0sIG5leHRzZWdubywgZmxh Z3MpOworCQl2ID0gX21kZmRfb3BlbnNlZyhzZmlsZSwgbmV4dHNlZ25vLCBmbGFncyk7CiAKIAkJ aWYgKHYgPT0gTlVMTCkKIAkJewpAQCAtMTM0MSw3ICsxMjk3LDcgQEAgX21kZmRfZ2V0c2VnKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsa25vLAog CQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCiAJCQkJ CSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiICh0YXJnZXQgYmxvY2sgJXUpOiAl bSIsCi0JCQkJCQkJX21kZmRfc2VncGF0aChyZWxuLCBmb3JrbnVtLCBuZXh0c2Vnbm8pLAorCQkJ CQkJCV9tZGZkX3NlZ3BhdGgoc2ZpbGUsIG5leHRzZWdubyksCiAJCQkJCQkJYmxrbm8pKSk7CiAJ CX0KIAl9CkBAIC0xMzUzLDcgKzEzMDksNyBAQCBfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAgKiBHZXQgbnVtYmVy IG9mIGJsb2NrcyBwcmVzZW50IGluIGEgc2luZ2xlIGRpc2sgZmlsZQogICovCiBzdGF0aWMgQmxv Y2tOdW1iZXIKLV9tZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwgTWRmZFZlYyAqc2VnKQorX21kbmJsb2NrcyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgTWRmZFZl YyAqc2VnKQogewogCW9mZl90CQlsZW47CiAKQEAgLTEzNzYsMTYgKzEzMzIsMTYgQEAgX21kbmJs b2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBNZGZkVmVjICpzZWcp CiBpbnQKIG1kc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKIHsK LQlTTWdyUmVsYXRpb24gcmVsbiA9IHNtZ3JvcGVuKGZ0YWctPnJsb2NhdG9yLCBJbnZhbGlkQmFj a2VuZElkKTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKGZ0YWctPnJsb2NhdG9y LCBJbnZhbGlkQmFja2VuZElkLCBmdGFnLT5mb3JrbnVtKTsKIAlGaWxlCQlmaWxlOwogCWJvb2wJ CW5lZWRfdG9fY2xvc2U7CiAJaW50CQkJcmVzdWx0LAogCQkJCXNhdmVfZXJybm87CiAKIAkvKiBT ZWUgaWYgd2UgYWxyZWFkeSBoYXZlIHRoZSBmaWxlIG9wZW4sIG9yIG5lZWQgdG8gb3BlbiBpdC4g Ki8KLQlpZiAoZnRhZy0+c2Vnbm8gPCByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2Z0YWctPmZvcmtu dW1dKQorCWlmIChmdGFnLT5zZWdubyA8IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzKQogCXsKLQkJ ZmlsZSA9IHJlbG4tPm1kX3NlZ19mZHNbZnRhZy0+Zm9ya251bV1bZnRhZy0+c2Vnbm9dLm1kZmRf dmZkOworCQlmaWxlID0gc2ZpbGUtPm1kX3NlZ19mZHNbZnRhZy0+c2Vnbm9dLm1kZmRfdmZkOwog CQlzdHJsY3B5KHBhdGgsIEZpbGVQYXRoTmFtZShmaWxlKSwgTUFYUEdQQVRIKTsKIAkJbmVlZF90 b19jbG9zZSA9IGZhbHNlOwogCX0KQEAgLTEzOTMsNyArMTM0OSw3IEBAIG1kc3luY2ZpbGV0YWco Y29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKIAl7CiAJCWNoYXIJICAgKnA7CiAKLQkJ cCA9IF9tZGZkX3NlZ3BhdGgocmVsbiwgZnRhZy0+Zm9ya251bSwgZnRhZy0+c2Vnbm8pOworCQlw ID0gX21kZmRfc2VncGF0aChzZmlsZSwgZnRhZy0+c2Vnbm8pOwogCQlzdHJsY3B5KHBhdGgsIHAs IE1BWFBHUEFUSCk7CiAJCXBmcmVlKHApOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL3NtZ3Ivc21nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwppbmRleCA4 MGViNjMxMWU3NC4uODMyOWQ3Yjk4M2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv c21nci9zbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwpAQCAtNDEs MjcgKzQxLDI0IEBAIHR5cGVkZWYgc3RydWN0IGZfc21ncgogewogCXZvaWQJCSgqc21ncl9pbml0 KSAodm9pZCk7CS8qIG1heSBiZSBOVUxMICovCiAJdm9pZAkJKCpzbWdyX3NodXRkb3duKSAodm9p ZCk7CS8qIG1heSBiZSBOVUxMICovCi0Jdm9pZAkJKCpzbWdyX29wZW4pIChTTWdyUmVsYXRpb24g cmVsbik7Ci0Jdm9pZAkJKCpzbWdyX2Nsb3NlKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSk7Ci0Jdm9pZAkJKCpzbWdyX2NyZWF0ZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCWJvb2wgaXNSZWRvKTsKLQlib29sCQkoKnNtZ3Jf ZXhpc3RzKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci0Jdm9pZAkJ KCpzbWdyX3VubGluaykgKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJl ciBmb3JrbnVtLAotCQkJCQkJCQlib29sIGlzUmVkbyk7Ci0Jdm9pZAkJKCpzbWdyX2V4dGVuZCkg KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJdm9pZAkJKCpzbWdyX29w ZW4pIChTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CisJdm9pZAkJKCpzbWdyX2Nsb3NlKSAoU01nckZp bGVIYW5kbGUgc2ZpbGUpOworCXZvaWQJCSgqc21ncl9jcmVhdGUpIChTTWdyRmlsZUhhbmRsZSBz ZmlsZSwgYm9vbCBpc1JlZG8pOworCWJvb2wJCSgqc21ncl9leGlzdHMpIChTTWdyRmlsZUhhbmRs ZSBzZmlsZSk7CisJdm9pZAkJKCpzbWdyX3VubGluaykgKFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRv ciwgYm9vbCBpc1JlZG8pOworCXZvaWQJCSgqc21ncl9leHRlbmQpIChTTWdyRmlsZUhhbmRsZSBz ZmlsZSwKIAkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBz a2lwRnN5bmMpOwotCWJvb2wJCSgqc21ncl9wcmVmZXRjaCkgKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sCisJYm9vbAkJKCpzbWdyX3ByZWZldGNoKSAoU01nckZpbGVIYW5k bGUgc2ZpbGUsCiAJCQkJCQkJCSAgQmxvY2tOdW1iZXIgYmxvY2tudW0pOwotCXZvaWQJCSgqc21n cl9yZWFkKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwl2b2lkCQko KnNtZ3JfcmVhZCkgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJCSAgQmxvY2tOdW1iZXIg YmxvY2tudW0sIGNoYXIgKmJ1ZmZlcik7Ci0Jdm9pZAkJKCpzbWdyX3dyaXRlKSAoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwl2b2lkCQkoKnNtZ3Jfd3JpdGUpIChTTWdy RmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAq YnVmZmVyLCBib29sIHNraXBGc3luYyk7Ci0Jdm9pZAkJKCpzbWdyX3dyaXRlYmFjaykgKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJdm9pZAkJKCpzbWdyX3dyaXRlYmFj aykgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja251 bSwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci0JQmxvY2tOdW1iZXIgKCpzbWdyX25ibG9ja3MpIChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLQl2b2lkCQkoKnNtZ3JfdHJ1 bmNhdGUpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCQkg IEJsb2NrTnVtYmVyIG5ibG9ja3MpOwotCXZvaWQJCSgqc21ncl9pbW1lZHN5bmMpIChTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKKwlCbG9ja051bWJlciAoKnNtZ3JfbmJs b2NrcykgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKKwl2b2lkCQkoKnNtZ3JfdHJ1bmNhdGUpIChT TWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7CisJdm9pZAkJKCpzbWdy X2ltbWVkc3luYykgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKIH0gZl9zbWdyOwogCiBzdGF0aWMg Y29uc3QgZl9zbWdyIHNtZ3Jzd1tdID0gewpAQCAtODgsMTIgKzg1LDEyIEBAIHN0YXRpYyBjb25z dCBmX3NtZ3Igc21ncnN3W10gPSB7CiBzdGF0aWMgY29uc3QgaW50IE5TbWdyID0gbGVuZ3Rob2Yo c21ncnN3KTsKIAogLyoKLSAqIEVhY2ggYmFja2VuZCBoYXMgYSBoYXNodGFibGUgdGhhdCBzdG9y ZXMgYWxsIGV4dGFudCBTTWdyUmVsYXRpb24gb2JqZWN0cy4KLSAqIEluIGFkZGl0aW9uLCAidW5v d25lZCIgU01nclJlbGF0aW9uIG9iamVjdHMgYXJlIGNoYWluZWQgdG9nZXRoZXIgaW4gYSBsaXN0 LgorICogRWFjaCBiYWNrZW5kIGhhcyBhIGhhc2h0YWJsZSB0aGF0IHN0b3JlcyBhbGwgZXh0YW50 IFNNZ3JGaWxlRGF0YSBvYmplY3RzLgorICogSW4gYWRkaXRpb24sICJ1bm93bmVkIiBTTWdyRmls ZSBvYmplY3RzIGFyZSBjaGFpbmVkIHRvZ2V0aGVyIGluIGEgbGlzdC4KICAqLwotc3RhdGljIEhU QUIgKlNNZ3JSZWxhdGlvbkhhc2ggPSBOVUxMOworc3RhdGljIEhUQUIgKlNNZ3JGaWxlSGFzaCA9 IE5VTEw7CiAKLXN0YXRpYyBkbGlzdF9oZWFkIHVub3duZWRfcmVsbnM7CitzdGF0aWMgZGxpc3Rf aGVhZCB1bm93bmVkX3NmaWxlczsKIAogLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwog c3RhdGljIHZvaWQgc21ncnNodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpOwpAQCAtMTQyLDUw ICsxMzksNTAgQEAgc21ncnNodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpCiAgKgogICoJCVRo aXMgZG9lcyBub3QgYXR0ZW1wdCB0byBhY3R1YWxseSBvcGVuIHRoZSB1bmRlcmx5aW5nIGZpbGUu CiAgKi8KLVNNZ3JSZWxhdGlvbgotc21ncm9wZW4oUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJh Y2tlbmRJZCBiYWNrZW5kKQorU01nckZpbGVIYW5kbGUKK3NtZ3JvcGVuKFJlbEZpbGVMb2NhdG9y IHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9ya051bWJlciBmb3JrTnVtKQogewotCVJl bEZpbGVMb2NhdG9yQmFja2VuZCBicmxvY2F0b3I7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01n ckZpbGVMb2NhdG9yIHNsb2NhdG9yOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCWJvb2wJCWZv dW5kOwogCi0JaWYgKFNNZ3JSZWxhdGlvbkhhc2ggPT0gTlVMTCkKKwlpZiAoU01nckZpbGVIYXNo ID09IE5VTEwpCiAJewogCQkvKiBGaXJzdCB0aW1lIHRocm91Z2g6IGluaXRpYWxpemUgdGhlIGhh c2ggdGFibGUgKi8KIAkJSEFTSENUTAkJY3RsOwogCi0JCWN0bC5rZXlzaXplID0gc2l6ZW9mKFJl bEZpbGVMb2NhdG9yQmFja2VuZCk7Ci0JCWN0bC5lbnRyeXNpemUgPSBzaXplb2YoU01nclJlbGF0 aW9uRGF0YSk7Ci0JCVNNZ3JSZWxhdGlvbkhhc2ggPSBoYXNoX2NyZWF0ZSgic21nciByZWxhdGlv biB0YWJsZSIsIDQwMCwKKwkJY3RsLmtleXNpemUgPSBzaXplb2YoU01nckZpbGVMb2NhdG9yKTsK KwkJY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihTTWdyRmlsZURhdGEpOworCQlTTWdyRmlsZUhhc2gg PSBoYXNoX2NyZWF0ZSgic21nciByZWxhdGlvbiB0YWJsZSIsIDQwMCwKIAkJCQkJCQkJCSAgICZj dGwsIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMpOwotCQlkbGlzdF9pbml0KCZ1bm93bmVkX3JlbG5z KTsKKwkJZGxpc3RfaW5pdCgmdW5vd25lZF9zZmlsZXMpOwogCX0KIAogCS8qIExvb2sgdXAgb3Ig Y3JlYXRlIGFuIGVudHJ5ICovCi0JYnJsb2NhdG9yLmxvY2F0b3IgPSBybG9jYXRvcjsKLQlicmxv Y2F0b3IuYmFja2VuZCA9IGJhY2tlbmQ7Ci0JcmVsbiA9IChTTWdyUmVsYXRpb24pIGhhc2hfc2Vh cmNoKFNNZ3JSZWxhdGlvbkhhc2gsCi0JCQkJCQkJCQkgICh2b2lkICopICZicmxvY2F0b3IsCi0J CQkJCQkJCQkgIEhBU0hfRU5URVIsICZmb3VuZCk7CisJc2xvY2F0b3IubG9jYXRvciA9IHJsb2Nh dG9yOworCXNsb2NhdG9yLmJhY2tlbmQgPSBiYWNrZW5kOworCXNsb2NhdG9yLmZvcmtudW0gPSBm b3JrTnVtOworCXNmaWxlID0gKFNNZ3JGaWxlSGFuZGxlKSBoYXNoX3NlYXJjaChTTWdyRmlsZUhh c2gsCisJCQkJCQkJCQkJICh2b2lkICopICZzbG9jYXRvciwKKwkJCQkJCQkJCQkgSEFTSF9FTlRF UiwgJmZvdW5kKTsKIAogCS8qIEluaXRpYWxpemUgaXQgaWYgbm90IHByZXNlbnQgYmVmb3JlICov CiAJaWYgKCFmb3VuZCkKIAl7CiAJCS8qIGhhc2hfc2VhcmNoIGFscmVhZHkgZmlsbGVkIGluIHRo ZSBsb29rdXAga2V5ICovCi0JCXJlbG4tPnNtZ3Jfb3duZXIgPSBOVUxMOwotCQlyZWxuLT5zbWdy X3RhcmdibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPD0g TUFYX0ZPUktOVU07ICsraSkKLQkJCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbaV0gPSBJbnZh bGlkQmxvY2tOdW1iZXI7Ci0JCXJlbG4tPnNtZ3Jfd2hpY2ggPSAwOwkvKiB3ZSBvbmx5IGhhdmUg bWQuYyBhdCBwcmVzZW50ICovCisJCXNmaWxlLT5zbWdyX293bmVyID0gTlVMTDsKKwkJc2ZpbGUt PnNtZ3JfdGFyZ2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlzZmlsZS0+c21ncl9jYWNo ZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJc2ZpbGUtPnNtZ3Jfd2hpY2ggPSAw OwkvKiB3ZSBvbmx5IGhhdmUgbWQuYyBhdCBwcmVzZW50ICovCiAKIAkJLyogaW1wbGVtZW50YXRp b24tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KLQkJc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hd LnNtZ3Jfb3BlbihyZWxuKTsKKwkJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX29wZW4o c2ZpbGUpOwogCiAJCS8qIGl0IGhhcyBubyBvd25lciB5ZXQgKi8KLQkJZGxpc3RfcHVzaF90YWls KCZ1bm93bmVkX3JlbG5zLCAmcmVsbi0+bm9kZSk7CisJCWRsaXN0X3B1c2hfdGFpbCgmdW5vd25l ZF9zZmlsZXMsICZzZmlsZS0+bm9kZSk7CiAJfQogCi0JcmV0dXJuIHJlbG47CisJcmV0dXJuIHNm aWxlOwogfQogCiAvKgpAQCAtMTk1LDcgKzE5Miw3IEBAIHNtZ3JvcGVuKFJlbEZpbGVMb2NhdG9y IHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCkKICAqIHRoZSBvbmx5IHN1Y2ggb3duZXJzIGV4 aXN0IGluIHRoZSByZWxjYWNoZS4KICAqLwogdm9pZAotc21ncnNldG93bmVyKFNNZ3JSZWxhdGlv biAqb3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKQorc21ncnNldG93bmVyKFNNZ3JGaWxlSGFuZGxl ICpvd25lciwgU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJLyogV2UgZG9uJ3Qgc3VwcG9ydCAi ZGlzb3duaW5nIiBhbiBTTWdyUmVsYXRpb24gaGVyZSwgdXNlIHNtZ3JjbGVhcm93bmVyICovCiAJ QXNzZXJ0KG93bmVyICE9IE5VTEwpOwpAQCAtMjA2LDY4ICsyMDMsNjYgQEAgc21ncnNldG93bmVy KFNNZ3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKQogCSAqIGRlcGVuZGluZyBv biB0aGUgb3JkZXIgb2YgcHJvY2Vzc2luZy4gIEl0J3Mgb2sgdG8gY2xvc2UgdGhlIG9sZAogCSAq IHJlbGNhY2hlIGVudHJ5IGVhcmx5IGluIHRoYXQgY2FzZS4pCiAJICoKLQkgKiBJZiB0aGVyZSBp c24ndCBhbiBvbGQgb3duZXIsIHRoZW4gdGhlIHJlbG4gc2hvdWxkIGJlIGluIHRoZSB1bm93bmVk CisJICogSWYgdGhlcmUgaXNuJ3QgYW4gb2xkIG93bmVyLCB0aGVuIHRoZSBzZmlsZSBzaG91bGQg YmUgaW4gdGhlIHVub3duZWQKIAkgKiBsaXN0LCBhbmQgd2UgbmVlZCB0byByZW1vdmUgaXQuCiAJ ICovCi0JaWYgKHJlbG4tPnNtZ3Jfb3duZXIpCi0JCSoocmVsbi0+c21ncl9vd25lcikgPSBOVUxM OworCWlmIChzZmlsZS0+c21ncl9vd25lcikKKwkJKihzZmlsZS0+c21ncl9vd25lcikgPSBOVUxM OwogCWVsc2UKLQkJZGxpc3RfZGVsZXRlKCZyZWxuLT5ub2RlKTsKKwkJZGxpc3RfZGVsZXRlKCZz ZmlsZS0+bm9kZSk7CiAKIAkvKiBOb3cgZXN0YWJsaXNoIHRoZSBvd25lcnNoaXAgcmVsYXRpb25z aGlwLiAqLwotCXJlbG4tPnNtZ3Jfb3duZXIgPSBvd25lcjsKLQkqb3duZXIgPSByZWxuOworCXNm aWxlLT5zbWdyX293bmVyID0gb3duZXI7CisJKm93bmVyID0gc2ZpbGU7CiB9CiAKIC8qCi0gKiBz bWdyY2xlYXJvd25lcigpIC0tIFJlbW92ZSBsb25nLWxpdmVkIHJlZmVyZW5jZSB0byBhbiBTTWdy UmVsYXRpb24gb2JqZWN0CisgKiBzbWdyY2xlYXJvd25lcigpIC0tIFJlbW92ZSBsb25nLWxpdmVk IHJlZmVyZW5jZSB0byBhbiBTTWdyRmlsZUhhbmRsZSBvYmplY3QKICAqCQkJCQkgICBpZiBvbmUg ZXhpc3RzCiAgKi8KIHZvaWQKLXNtZ3JjbGVhcm93bmVyKFNNZ3JSZWxhdGlvbiAqb3duZXIsIFNN Z3JSZWxhdGlvbiByZWxuKQorc21ncmNsZWFyb3duZXIoU01nckZpbGVIYW5kbGUgKm93bmVyLCBT TWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKiBEbyBub3RoaW5nIGlmIHRoZSBTTWdyUmVsYXRp b24gb2JqZWN0IGlzIG5vdCBvd25lZCBieSB0aGUgb3duZXIgKi8KLQlpZiAocmVsbi0+c21ncl9v d25lciAhPSBvd25lcikKKwlpZiAoc2ZpbGUtPnNtZ3Jfb3duZXIgIT0gb3duZXIpCiAJCXJldHVy bjsKIAogCS8qIHVuc2V0IHRoZSBvd25lcidzIHJlZmVyZW5jZSAqLwogCSpvd25lciA9IE5VTEw7 CiAKIAkvKiB1bnNldCBvdXIgcmVmZXJlbmNlIHRvIHRoZSBvd25lciAqLwotCXJlbG4tPnNtZ3Jf b3duZXIgPSBOVUxMOworCXNmaWxlLT5zbWdyX293bmVyID0gTlVMTDsKIAogCS8qIGFkZCB0byBs aXN0IG9mIHVub3duZWQgcmVsYXRpb25zICovCi0JZGxpc3RfcHVzaF90YWlsKCZ1bm93bmVkX3Jl bG5zLCAmcmVsbi0+bm9kZSk7CisJZGxpc3RfcHVzaF90YWlsKCZ1bm93bmVkX3NmaWxlcywgJnNm aWxlLT5ub2RlKTsKIH0KIAogLyoKLSAqCXNtZ3JleGlzdHMoKSAtLSBEb2VzIHRoZSB1bmRlcmx5 aW5nIGZpbGUgZm9yIGEgZm9yayBleGlzdD8KKyAqCXNtZ3JleGlzdHMoKSAtLSBEb2VzIHRoZSB1 bmRlcmx5aW5nIGZpbGUgZXhpc3Q/CiAgKi8KIGJvb2wKLXNtZ3JleGlzdHMoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3NtZ3JleGlzdHMoU01nckZpbGVIYW5kbGUgc2Zp bGUpCiB7Ci0JcmV0dXJuIHNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX2V4aXN0cyhyZWxu LCBmb3JrbnVtKTsKKwlyZXR1cm4gc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX2V4aXN0 cyhzZmlsZSk7CiB9CiAKIC8qCi0gKglzbWdyY2xvc2UoKSAtLSBDbG9zZSBhbmQgZGVsZXRlIGFu IFNNZ3JSZWxhdGlvbiBvYmplY3QuCisgKglzbWdyY2xvc2UoKSAtLSBDbG9zZSBhbmQgZGVsZXRl IGFuIFNNZ3JGaWxlIG9iamVjdC4KICAqLwogdm9pZAotc21ncmNsb3NlKFNNZ3JSZWxhdGlvbiBy ZWxuKQorc21ncmNsb3NlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewotCVNNZ3JSZWxhdGlvbiAq b3duZXI7Ci0JRm9ya051bWJlcglmb3JrbnVtOworCVNNZ3JGaWxlSGFuZGxlICpvd25lcjsKIAot CWZvciAoZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJ c21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfY2xvc2UocmVsbiwgZm9ya251bSk7CisJc21n cnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX2Nsb3NlKHNmaWxlKTsKIAotCW93bmVyID0gcmVs bi0+c21ncl9vd25lcjsKKwlvd25lciA9IHNmaWxlLT5zbWdyX293bmVyOwogCiAJaWYgKCFvd25l cikKLQkJZGxpc3RfZGVsZXRlKCZyZWxuLT5ub2RlKTsKKwkJZGxpc3RfZGVsZXRlKCZzZmlsZS0+ bm9kZSk7CiAKLQlpZiAoaGFzaF9zZWFyY2goU01nclJlbGF0aW9uSGFzaCwKLQkJCQkJKHZvaWQg KikgJihyZWxuLT5zbWdyX3Jsb2NhdG9yKSwKKwlpZiAoaGFzaF9zZWFyY2goU01nckZpbGVIYXNo LAorCQkJCQkodm9pZCAqKSAmKHNmaWxlLT5zbWdyX2xvY2F0b3IpLAogCQkJCQlIQVNIX1JFTU9W RSwgTlVMTCkgPT0gTlVMTCkKIAkJZWxvZyhFUlJPUiwgIlNNZ3JSZWxhdGlvbiBoYXNodGFibGUg Y29ycnVwdGVkIik7CiAKQEAgLTI4NCwxNCArMjc5LDExIEBAIHNtZ3JjbG9zZShTTWdyUmVsYXRp b24gcmVsbikKICAqCiAgKglUaGUgb2JqZWN0IHJlbWFpbnMgdmFsaWQuCiAgKi8KLXZvaWQKLXNt Z3JyZWxlYXNlKFNNZ3JSZWxhdGlvbiByZWxuKQorc3RhdGljIHZvaWQKK3NtZ3JyZWxlYXNlKFNN Z3JGaWxlSGFuZGxlIHNmaWxlKQogewotCWZvciAoRm9ya051bWJlciBmb3JrbnVtID0gMDsgZm9y a251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQotCXsKLQkJc21ncnN3W3JlbG4tPnNtZ3Jf d2hpY2hdLnNtZ3JfY2xvc2UocmVsbiwgZm9ya251bSk7Ci0JCXJlbG4tPnNtZ3JfY2FjaGVkX25i bG9ja3NbZm9ya251bV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JfQorCXNtZ3Jzd1tzZmlsZS0+ c21ncl93aGljaF0uc21ncl9jbG9zZShzZmlsZSk7CisJc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9j a3MgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiB9CiAKIC8qCkBAIC0zMDMsMTYgKzI5NSwxNiBAQCB2 b2lkCiBzbWdycmVsZWFzZWFsbCh2b2lkKQogewogCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7Ci0J U01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKIAkvKiBOb3RoaW5n IHRvIGRvIGlmIGhhc2h0YWJsZSBub3Qgc2V0IHVwICovCi0JaWYgKFNNZ3JSZWxhdGlvbkhhc2gg PT0gTlVMTCkKKwlpZiAoU01nckZpbGVIYXNoID09IE5VTEwpCiAJCXJldHVybjsKIAotCWhhc2hf c2VxX2luaXQoJnN0YXR1cywgU01nclJlbGF0aW9uSGFzaCk7CisJaGFzaF9zZXFfaW5pdCgmc3Rh dHVzLCBTTWdyRmlsZUhhc2gpOwogCi0Jd2hpbGUgKChyZWxuID0gKFNNZ3JSZWxhdGlvbikgaGFz aF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQotCQlzbWdycmVsZWFzZShyZWxuKTsKKwl3 aGlsZSAoKHNmaWxlID0gKFNNZ3JGaWxlSGFuZGxlKSBoYXNoX3NlcV9zZWFyY2goJnN0YXR1cykp ICE9IE5VTEwpCisJCXNtZ3JyZWxlYXNlKHNmaWxlKTsKIH0KIAogLyoKQEAgLTMyMiwxNiArMzE0 LDE2IEBAIHZvaWQKIHNtZ3JjbG9zZWFsbCh2b2lkKQogewogCUhBU0hfU0VRX1NUQVRVUyBzdGF0 dXM7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKIAkvKiBO b3RoaW5nIHRvIGRvIGlmIGhhc2h0YWJsZSBub3Qgc2V0IHVwICovCi0JaWYgKFNNZ3JSZWxhdGlv bkhhc2ggPT0gTlVMTCkKKwlpZiAoU01nckZpbGVIYXNoID09IE5VTEwpCiAJCXJldHVybjsKIAot CWhhc2hfc2VxX2luaXQoJnN0YXR1cywgU01nclJlbGF0aW9uSGFzaCk7CisJaGFzaF9zZXFfaW5p dCgmc3RhdHVzLCBTTWdyRmlsZUhhc2gpOwogCi0Jd2hpbGUgKChyZWxuID0gKFNNZ3JSZWxhdGlv bikgaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQotCQlzbWdyY2xvc2UocmVsbik7 CisJd2hpbGUgKChzZmlsZSA9IChTTWdyRmlsZUhhbmRsZSkgaGFzaF9zZXFfc2VhcmNoKCZzdGF0 dXMpKSAhPSBOVUxMKQorCQlzbWdyY2xvc2Uoc2ZpbGUpOwogfQogCiAvKgpAQCAtMzQzLDExMSAr MzM1LDExMiBAQCBzbWdyY2xvc2VhbGwodm9pZCkKICAqIHN1Y2ggZW50cnkgZXhpc3RzIGFscmVh ZHkuCiAgKi8KIHZvaWQKLXNtZ3JjbG9zZXJlbGxvY2F0b3IoUmVsRmlsZUxvY2F0b3JCYWNrZW5k IHJsb2NhdG9yKQorc21ncmNsb3NlcmVsbG9jYXRvcihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwg QmFja2VuZElkIGJhY2tlbmQpCiB7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5k bGUgc2ZpbGU7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIGhhc2h0YWJsZSBub3Qgc2V0IHVwICov Ci0JaWYgKFNNZ3JSZWxhdGlvbkhhc2ggPT0gTlVMTCkKKwlpZiAoU01nckZpbGVIYXNoID09IE5V TEwpCiAJCXJldHVybjsKIAotCXJlbG4gPSAoU01nclJlbGF0aW9uKSBoYXNoX3NlYXJjaChTTWdy UmVsYXRpb25IYXNoLAotCQkJCQkJCQkJICAodm9pZCAqKSAmcmxvY2F0b3IsCi0JCQkJCQkJCQkg IEhBU0hfRklORCwgTlVMTCk7Ci0JaWYgKHJlbG4gIT0gTlVMTCkKLQkJc21ncmNsb3NlKHJlbG4p OworCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBpKyspCisJeworCQlTTWdyRmls ZUxvY2F0b3Igc2xvY2F0b3IgPSB7IHJsb2NhdG9yLCBiYWNrZW5kLCBpIH07CisKKwkJc2ZpbGUg PSAoU01nckZpbGVIYW5kbGUpIGhhc2hfc2VhcmNoKFNNZ3JGaWxlSGFzaCwKKwkJCQkJCQkJCQkJ ICh2b2lkICopICZzbG9jYXRvciwKKwkJCQkJCQkJCQkJIEhBU0hfRklORCwgTlVMTCk7CisJCWlm IChzZmlsZSAhPSBOVUxMKQorCQkJc21ncmNsb3NlKHNmaWxlKTsKKwl9CiB9CiAKIC8qCi0gKglz bWdyY3JlYXRlKCkgLS0gQ3JlYXRlIGEgbmV3IHJlbGF0aW9uLgorICoJc21ncmNyZWF0ZSgpIC0t IENyZWF0ZSBhIG5ldyBmaWxlLgogICoKLSAqCQlHaXZlbiBhbiBhbHJlYWR5LWNyZWF0ZWQgKGJ1 dCBwcmVzdW1hYmx5IHVudXNlZCkgU01nclJlbGF0aW9uLAorICoJCUdpdmVuIGFuIGFscmVhZHkt Y3JlYXRlZCAoYnV0IHByZXN1bWFibHkgdW51c2VkKSBTTWdyRmlsZUhhbmRsZSwKICAqCQljYXVz ZSB0aGUgdW5kZXJseWluZyBkaXNrIGZpbGUgb3Igb3RoZXIgc3RvcmFnZSBmb3IgdGhlIGZvcmsK ICAqCQl0byBiZSBjcmVhdGVkLgogICovCiB2b2lkCi1zbWdyY3JlYXRlKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQorc21ncmNyZWF0ZShTTWdyRmls ZUhhbmRsZSBzZmlsZSwgYm9vbCBpc1JlZG8pCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hd LnNtZ3JfY3JlYXRlKHJlbG4sIGZvcmtudW0sIGlzUmVkbyk7CisJc21ncnN3W3NmaWxlLT5zbWdy X3doaWNoXS5zbWdyX2NyZWF0ZShzZmlsZSwgaXNSZWRvKTsKIH0KIAogLyoKLSAqCXNtZ3Jkb3N5 bmNhbGwoKSAtLSBJbW1lZGlhdGVseSBzeW5jIGFsbCBmb3JrcyBvZiBhbGwgZ2l2ZW4gcmVsYXRp b25zCisgKglzbWdydW5saW5rX211bHRpKCkgLS0gSW1tZWRpYXRlbHkgdW5saW5rIGdpdmVuIGZv cmtzIG9mIGdpdmVuIHJlbGF0aW9uCiAgKgotICoJCUFsbCBmb3JrcyBvZiBhbGwgZ2l2ZW4gcmVs YXRpb25zIGFyZSBzeW5jZWQgb3V0IHRvIHRoZSBzdG9yZS4KKyAqCQlUaGUgZ2l2ZW4gZm9ya3Mg b2YgdGhlIHJlbGF0aW9uIGFyZSByZW1vdmVkIGZyb20gdGhlIHN0b3JlLiAgVGhpcworICoJCXNo b3VsZCBub3QgYmUgdXNlZCBkdXJpbmcgdHJhbnNhY3Rpb25hbCBvcGVyYXRpb25zLCBzaW5jZSBp dCBjYW4ndCBiZQorICoJCXVuZG9uZS4KKyAqCisgKgkJVGhpcyBoYW5kbGVzIG11bHRpcGxlIGZv cmtzIGluIG9uZSBjYWxsLCBiZWNhdXNlIHRoZSBjYWNoZSBpbnZhbGlkYXRpb24KKyAqCQloYXBw ZW5zIGF0IHJlbGF0aW9uIGdyYW51bGFyaXR5LiBJZiB3ZSBoYWQgYW4gc21ncnVubGluaygpIGZ1 bmN0aW9uCisgKgkJdG8gdW5saW5rIGp1c3QgYSBzaW5nbGUgc21nciBmaWxlLCBhbmQgdGhlIGNh bGxlciB3YW50ZWQgdG8gZGVsZXRlCisgKgkJbXVsdGlwbGUgZm9ya3Mgb2YgYSBzaW5nbGUgcmVs YXRpb24sIGVhY2ggY2FsbCB3b3VsZCBzZW5kIGEgbmV3CisgKgkJY2FjaGUgaW52YWxpZGF0aW9u IGV2ZW50LCB3aGljaCB3b3VsZCBiZSB3YXN0ZWZ1bC4KICAqCi0gKgkJVGhpcyBpcyBlcXVpdmFs ZW50IHRvIEZsdXNoUmVsYXRpb25CdWZmZXJzKCkgZm9yIGVhY2ggc21nciByZWxhdGlvbiwKLSAq CQl0aGVuIGNhbGxpbmcgc21ncmltbWVkc3luYygpIGZvciBhbGwgZm9ya3Mgb2YgZWFjaCByZWxh dGlvbiwgYnV0IGl0J3MKLSAqCQlzaWduaWZpY2FudGx5IHF1aWNrZXIgc28gc2hvdWxkIGJlIHBy ZWZlcnJlZCB3aGVuIHBvc3NpYmxlLgorICoJCUlmIGlzUmVkbyBpcyB0cnVlLCBpdCBpcyBva2F5 IGZvciB0aGUgdW5kZXJseWluZyBmaWxlKHMpIHRvIGJlIGdvbmUKKyAqCQlhbHJlYWR5LgogICov CiB2b2lkCi1zbWdyZG9zeW5jYWxsKFNNZ3JSZWxhdGlvbiAqcmVscywgaW50IG5yZWxzKQorc21n cnVubGlua19tdWx0aShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQs IEZvcmtOdW1iZXIgKmZvcmtzLCBpbnQgbmZvcmtzLCBib29sIGlzUmVkbykKIHsKKwlpbnQJCQl3 aGljaDsKIAlpbnQJCQlpID0gMDsKLQlGb3JrTnVtYmVyCWZvcmtudW07CiAKLQlpZiAobnJlbHMg PT0gMCkKLQkJcmV0dXJuOworCXdoaWNoID0gMDsJLyogd2Ugb25seSBoYXZlIG1kLmMgYXQgcHJl c2VudCAqLwogCi0JRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKHJlbHMsIG5yZWxzKTsKKwkvKiBD bG9zZSB0aGUgZm9ya3MgYXQgc21nciBsZXZlbCAqLworCXNtZ3JjbG9zZXJlbGxvY2F0b3Iocmxv Y2F0b3IsIGJhY2tlbmQpOwogCiAJLyoKLQkgKiBTeW5jIHRoZSBwaHlzaWNhbCBmaWxlKHMpLgor CSAqIFNlbmQgYSBzaGFyZWQtaW52YWwgbWVzc2FnZSB0byBmb3JjZSBvdGhlciBiYWNrZW5kcyB0 byBjbG9zZSBhbnkKKwkgKiBkYW5nbGluZyBzbWdyIHJlZmVyZW5jZXMgdGhleSBtYXkgaGF2ZSBm b3IgdGhlc2UgcmVscy4gIFdlIHNob3VsZCBkbworCSAqIHRoaXMgYmVmb3JlIHN0YXJ0aW5nIHRo ZSBhY3R1YWwgdW5saW5raW5nLCBpbiBjYXNlIHdlIGZhaWwgcGFydHdheQorCSAqIHRocm91Z2gg dGhhdCBzdGVwLiAgTm90ZSB0aGF0IHRoZSBzaW52YWwgbWVzc2FnZXMgd2lsbCBldmVudHVhbGx5 IGNvbWUKKwkgKiBiYWNrIHRvIHRoaXMgYmFja2VuZCwgdG9vLCBhbmQgdGhlcmVieSBwcm92aWRl IGEgYmFja3N0b3AgdGhhdCB3ZQorCSAqIGNsb3NlZCBvdXIgb3duIHNtZ3IgcmVsLgogCSAqLwot CWZvciAoaSA9IDA7IGkgPCBucmVsczsgaSsrKQotCXsKLQkJaW50CQkJd2hpY2ggPSByZWxzW2ld LT5zbWdyX3doaWNoOworCUNhY2hlSW52YWxpZGF0ZVNtZ3IocmxvY2F0b3IsIGJhY2tlbmQpOwog Ci0JCWZvciAoZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykK LQkJewotCQkJaWYgKHNtZ3Jzd1t3aGljaF0uc21ncl9leGlzdHMocmVsc1tpXSwgZm9ya251bSkp Ci0JCQkJc21ncnN3W3doaWNoXS5zbWdyX2ltbWVkc3luYyhyZWxzW2ldLCBmb3JrbnVtKTsKLQkJ fQorCS8qCisJICogRGVsZXRlIHRoZSBwaHlzaWNhbCBmaWxlKHMpLgorCSAqCisJICogTm90ZTog c21ncl91bmxpbmsgbXVzdCB0cmVhdCBkZWxldGlvbiBmYWlsdXJlIGFzIGEgV0FSTklORywgbm90 IGFuCisJICogRVJST1IsIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBkZWNpZGVkIHRvIGNvbW1pdCBv ciBhYm9ydCB0aGUgY3VycmVudAorCSAqIHhhY3QuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5m b3JrczsgaSsrKQorCXsKKwkJU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yID0geyBybG9jYXRvciwg YmFja2VuZCwgZm9ya3NbaV0gfTsKKwkJc21ncnN3W3doaWNoXS5zbWdyX3VubGluayhzbG9jYXRv ciwgaXNSZWRvKTsKIAl9CiB9CiAKIC8qCi0gKglzbWdyZG91bmxpbmthbGwoKSAtLSBJbW1lZGlh dGVseSB1bmxpbmsgYWxsIGZvcmtzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMKLSAqCi0gKgkJQWxs IGZvcmtzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgc3RvcmUu ICBUaGlzCi0gKgkJc2hvdWxkIG5vdCBiZSB1c2VkIGR1cmluZyB0cmFuc2FjdGlvbmFsIG9wZXJh dGlvbnMsIHNpbmNlIGl0IGNhbid0IGJlCi0gKgkJdW5kb25lLgorICoJc21ncmRvdW5saW5rKCkg LS0gSW1tZWRpYXRlbHkgdW5saW5rIGEgZmlsZQogICoKICAqCQlJZiBpc1JlZG8gaXMgdHJ1ZSwg aXQgaXMgb2theSBmb3IgdGhlIHVuZGVybHlpbmcgZmlsZShzKSB0byBiZSBnb25lCiAgKgkJYWxy ZWFkeS4KKyAqCisgKiBUbyByZW1vdmUgYSByZWxhdGlvbiB0cmFuc2FjdGlvbmFsbHksIHNlZSBS ZWxhdGlvbkRyb3BTdG9yYWdlKCkgaW5zdGVhZC4KKyAqIFRoaXMgd2lsbCBjYXVzZSBjYWNoZSBp bnZhbGlkYXRpb24gb2YgYWxsIGZvcmtzIG9mIHRoZSByZWxhdGlvbiwgbm90IGp1c3QKKyAqIHRo aXMgb25lLgogICovCiB2b2lkCi1zbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9uICpyZWxzLCBp bnQgbnJlbHMsIGJvb2wgaXNSZWRvKQorc21ncnVubGluayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwg Ym9vbCBpc1JlZG8pCiB7Ci0JaW50CQkJaSA9IDA7Ci0JUmVsRmlsZUxvY2F0b3JCYWNrZW5kICpy bG9jYXRvcnM7Ci0JRm9ya051bWJlcglmb3JrbnVtOwotCi0JaWYgKG5yZWxzID09IDApCi0JCXJl dHVybjsKLQotCS8qCi0JICogR2V0IHJpZCBvZiBhbnkgcmVtYWluaW5nIGJ1ZmZlcnMgZm9yIHRo ZSByZWxhdGlvbnMuICBidWZtZ3Igd2lsbCBqdXN0Ci0JICogZHJvcCB0aGVtIHdpdGhvdXQgYm90 aGVyaW5nIHRvIHdyaXRlIHRoZSBjb250ZW50cy4KLQkgKi8KLQlEcm9wUmVsYXRpb25zQWxsQnVm ZmVycyhyZWxzLCBucmVscyk7Ci0KLQkvKgotCSAqIGNyZWF0ZSBhbiBhcnJheSB3aGljaCBjb250 YWlucyBhbGwgcmVsYXRpb25zIHRvIGJlIGRyb3BwZWQsIGFuZCBjbG9zZQotCSAqIGVhY2ggcmVs YXRpb24ncyBmb3JrcyBhdCB0aGUgc21nciBsZXZlbCB3aGlsZSBhdCBpdAotCSAqLwotCXJsb2Nh dG9ycyA9IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0b3JCYWNrZW5kKSAqIG5yZWxzKTsKLQlm b3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQl7Ci0JCVJlbEZpbGVMb2NhdG9yQmFja2VuZCBy bG9jYXRvciA9IHJlbHNbaV0tPnNtZ3JfcmxvY2F0b3I7Ci0JCWludAkJCXdoaWNoID0gcmVsc1tp XS0+c21ncl93aGljaDsKKwlTTWdyRmlsZUxvY2F0b3IgbG9jYXRvcjsKKwlpbnQJCQl3aGljaDsK IAotCQlybG9jYXRvcnNbaV0gPSBybG9jYXRvcjsKKwkvKiByZW1lbWJlciBiZWZvcmUgY2xvc2lu ZyAqLworCXdoaWNoID0gc2ZpbGUtPnNtZ3Jfd2hpY2g7CisJbG9jYXRvciA9IHNmaWxlLT5zbWdy X2xvY2F0b3I7CiAKLQkJLyogQ2xvc2UgdGhlIGZvcmtzIGF0IHNtZ3IgbGV2ZWwgKi8KLQkJZm9y IChmb3JrbnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQotCQkJc21n cnN3W3doaWNoXS5zbWdyX2Nsb3NlKHJlbHNbaV0sIGZvcmtudW0pOwotCX0KKwkvKiBDbG9zZSB0 aGUgZmlsZSBhdCBzbWdyIGxldmVsICovCisJc21ncmNsb3NlKHNmaWxlKTsKIAogCS8qCiAJICog U2VuZCBhIHNoYXJlZC1pbnZhbCBtZXNzYWdlIHRvIGZvcmNlIG90aGVyIGJhY2tlbmRzIHRvIGNs b3NlIGFueQpAQCAtNDU3LDggKzQ1MCw3IEBAIHNtZ3Jkb3VubGlua2FsbChTTWdyUmVsYXRpb24g KnJlbHMsIGludCBucmVscywgYm9vbCBpc1JlZG8pCiAJICogYmFjayB0byB0aGlzIGJhY2tlbmQs IHRvbywgYW5kIHRoZXJlYnkgcHJvdmlkZSBhIGJhY2tzdG9wIHRoYXQgd2UKIAkgKiBjbG9zZWQg b3VyIG93biBzbWdyIHJlbC4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQkJ Q2FjaGVJbnZhbGlkYXRlU21ncihybG9jYXRvcnNbaV0pOworCUNhY2hlSW52YWxpZGF0ZVNtZ3Io bG9jYXRvci5sb2NhdG9yLCBsb2NhdG9yLmJhY2tlbmQpOwogCiAJLyoKIAkgKiBEZWxldGUgdGhl IHBoeXNpY2FsIGZpbGUocykuCkBAIC00NjcsMTYgKzQ1OSw3IEBAIHNtZ3Jkb3VubGlua2FsbChT TWdyUmVsYXRpb24gKnJlbHMsIGludCBucmVscywgYm9vbCBpc1JlZG8pCiAJICogRVJST1IsIGJl Y2F1c2Ugd2UndmUgYWxyZWFkeSBkZWNpZGVkIHRvIGNvbW1pdCBvciBhYm9ydCB0aGUgY3VycmVu dAogCSAqIHhhY3QuCiAJICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQl7Ci0J CWludAkJCXdoaWNoID0gcmVsc1tpXS0+c21ncl93aGljaDsKLQotCQlmb3IgKGZvcmtudW0gPSAw OyBmb3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JCQlzbWdyc3dbd2hpY2hdLnNt Z3JfdW5saW5rKHJsb2NhdG9yc1tpXSwgZm9ya251bSwgaXNSZWRvKTsKLQl9Ci0KLQlwZnJlZShy bG9jYXRvcnMpOworCXNtZ3Jzd1t3aGljaF0uc21ncl91bmxpbmsobG9jYXRvciwgaXNSZWRvKTsK IH0KIAogCkBAIC00OTAsMjEgKzQ3MywyMSBAQCBzbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9u ICpyZWxzLCBpbnQgbnJlbHMsIGJvb2wgaXNSZWRvKQogICoJCWNhdXNlcyBpbnRlcnZlbmluZyBm aWxlIHNwYWNlIHRvIGJlY29tZSBmaWxsZWQgd2l0aCB6ZXJvZXMuCiAgKi8KIHZvaWQKLXNtZ3Jl eHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIg YmxvY2tudW0sCitzbWdyZXh0ZW5kKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBi bG9ja251bSwKIAkJICAgY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYykKIHsKLQlzbWdyc3db cmVsbi0+c21ncl93aGljaF0uc21ncl9leHRlbmQocmVsbiwgZm9ya251bSwgYmxvY2tudW0sCi0J CQkJCQkJCQkJIGJ1ZmZlciwgc2tpcEZzeW5jKTsKKwlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hd LnNtZ3JfZXh0ZW5kKHNmaWxlLCBibG9ja251bSwKKwkJCQkJCQkJCQkgIGJ1ZmZlciwgc2tpcEZz eW5jKTsKIAogCS8qCiAJICogTm9ybWFsbHkgd2UgZXhwZWN0IHRoaXMgdG8gaW5jcmVhc2UgbmJs b2NrcyBieSBvbmUsIGJ1dCBpZiB0aGUgY2FjaGVkCiAJICogdmFsdWUgaXNuJ3QgYXMgZXhwZWN0 ZWQsIGp1c3QgaW52YWxpZGF0ZSBpdCBzbyB0aGUgbmV4dCBjYWxsIGFza3MgdGhlCiAJICoga2Vy bmVsLgogCSAqLwotCWlmIChyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID09IGJs b2NrbnVtKQotCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID0gYmxvY2tudW0g KyAxOworCWlmIChzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9PSBibG9ja251bSkKKwkJc2Zp bGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBibG9ja251bSArIDE7CiAJZWxzZQotCQlyZWxuLT5z bWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlzZmls ZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKIH0KIAogLyoKQEAg LTUxNSwxMyArNDk4LDEzIEBAIHNtZ3JleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJcmVjb3JkKS4KICAqLwogYm9v bAotc21ncnByZWZldGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJs b2NrTnVtYmVyIGJsb2NrbnVtKQorc21ncnByZWZldGNoKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBC bG9ja051bWJlciBibG9ja251bSkKIHsKLQlyZXR1cm4gc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hd LnNtZ3JfcHJlZmV0Y2gocmVsbiwgZm9ya251bSwgYmxvY2tudW0pOworCXJldHVybiBzbWdyc3db c2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3JfcHJlZmV0Y2goc2ZpbGUsIGJsb2NrbnVtKTsKIH0KIAog LyoKLSAqCXNtZ3JyZWFkKCkgLS0gcmVhZCBhIHBhcnRpY3VsYXIgYmxvY2sgZnJvbSBhIHJlbGF0 aW9uIGludG8gdGhlIHN1cHBsaWVkCisgKglzbWdycmVhZCgpIC0tIHJlYWQgYSBwYXJ0aWN1bGFy IGJsb2NrIGZyb20gYSBmaWxlIGludG8gdGhlIHN1cHBsaWVkCiAgKgkJCQkgIGJ1ZmZlci4KICAq CiAgKgkJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIHRoZSBidWZmZXIgbWFuYWdlciBpbiBv cmRlciB0bwpAQCAtNTI5LDEwICs1MTIsOSBAQCBzbWdycHJlZmV0Y2goU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0pCiAgKgkJcmV0dXJu IHBhZ2VzIGluIHRoZSBmb3JtYXQgdGhhdCBQT1NUR1JFUyBleHBlY3RzLgogICovCiB2b2lkCi1z bWdycmVhZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJl ciBibG9ja251bSwKLQkJIGNoYXIgKmJ1ZmZlcikKK3NtZ3JyZWFkKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLCBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVyKQogewotCXNtZ3Jzd1tyZWxu LT5zbWdyX3doaWNoXS5zbWdyX3JlYWQocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGJ1ZmZlcik7 CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX3JlYWQoc2ZpbGUsIGJsb2NrbnVtLCBi dWZmZXIpOwogfQogCiAvKgpAQCAtNTUxLDExICs1MzMsMTEgQEAgc21ncnJlYWQoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJ ZG8gbm90IHJlcXVpcmUgZnN5bmMuCiAgKi8KIHZvaWQKLXNtZ3J3cml0ZShTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKK3NtZ3J3cml0 ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCSAgY2hhciAq YnVmZmVyLCBib29sIHNraXBGc3luYykKIHsKLQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21n cl93cml0ZShyZWxuLCBmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJCQlidWZmZXIsIHNraXBG c3luYyk7CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX3dyaXRlKHNmaWxlLCBibG9j a251bSwKKwkJCQkJCQkJCQkgYnVmZmVyLCBza2lwRnN5bmMpOwogfQogCiAKQEAgLTU2NCwxMSAr NTQ2LDExIEBAIHNtZ3J3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LCBCbG9ja051bWJlciBibG9ja251bSwKICAqCQkJCQkgICBibG9ja3MuCiAgKi8KIHZvaWQKLXNt Z3J3cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tO dW1iZXIgYmxvY2tudW0sCitzbWdyd3JpdGViYWNrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9j a051bWJlciBibG9ja251bSwKIAkJCSAgQmxvY2tOdW1iZXIgbmJsb2NrcykKIHsKLQlzbWdyc3db cmVsbi0+c21ncl93aGljaF0uc21ncl93cml0ZWJhY2socmVsbiwgZm9ya251bSwgYmxvY2tudW0s Ci0JCQkJCQkJCQkJCW5ibG9ja3MpOworCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl93 cml0ZWJhY2soc2ZpbGUsIGJsb2NrbnVtLAorCQkJCQkJCQkJCQkgbmJsb2Nrcyk7CiB9CiAKIC8q CkBAIC01NzYsMTggKzU1OCwxOCBAQCBzbWdyd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogICoJCQkJCSBzdXBwbGll ZCByZWxhdGlvbi4KICAqLwogQmxvY2tOdW1iZXIKLXNtZ3JuYmxvY2tzKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCitzbWdybmJsb2NrcyhTTWdyRmlsZUhhbmRsZSBzZmls ZSkKIHsKIAlCbG9ja051bWJlciByZXN1bHQ7CiAKIAkvKiBDaGVjayBhbmQgcmV0dXJuIGlmIHdl IGdldCB0aGUgY2FjaGVkIHZhbHVlIGZvciB0aGUgbnVtYmVyIG9mIGJsb2Nrcy4gKi8KLQlyZXN1 bHQgPSBzbWdybmJsb2Nrc19jYWNoZWQocmVsbiwgZm9ya251bSk7CisJcmVzdWx0ID0gc21ncm5i bG9ja3NfY2FjaGVkKHNmaWxlKTsKIAlpZiAocmVzdWx0ICE9IEludmFsaWRCbG9ja051bWJlcikK IAkJcmV0dXJuIHJlc3VsdDsKIAotCXJlc3VsdCA9IHNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5z bWdyX25ibG9ja3MocmVsbiwgZm9ya251bSk7CisJcmVzdWx0ID0gc21ncnN3W3NmaWxlLT5zbWdy X3doaWNoXS5zbWdyX25ibG9ja3Moc2ZpbGUpOwogCi0JcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nr c1tmb3JrbnVtXSA9IHJlc3VsdDsKKwlzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IHJlc3Vs dDsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC02MDAsMzggKzU4Miw0MSBAQCBzbWdybmJsb2Nr cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogICogZm9yayBzaXplIGlz IG5vdCBjYWNoZWQuCiAgKi8KIEJsb2NrTnVtYmVyCi1zbWdybmJsb2Nrc19jYWNoZWQoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3NtZ3JuYmxvY2tzX2NhY2hlZChTTWdy RmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKgogCSAqIEZvciBub3csIHdlIG9ubHkgdXNlIGNhY2hl ZCB2YWx1ZXMgaW4gcmVjb3ZlcnkgZHVlIHRvIGxhY2sgb2YgYSBzaGFyZWQKIAkgKiBpbnZhbGlk YXRpb24gbWVjaGFuaXNtIGZvciBjaGFuZ2VzIGluIGZpbGUgc2l6ZS4KIAkgKi8KLQlpZiAoSW5S ZWNvdmVyeSAmJiByZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dICE9IEludmFsaWRC bG9ja051bWJlcikKLQkJcmV0dXJuIHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV07 CisJaWYgKEluUmVjb3ZlcnkgJiYgc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgIT0gSW52YWxp ZEJsb2NrTnVtYmVyKQorCQlyZXR1cm4gc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3M7CiAKIAly ZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCiAvKgotICoJc21ncnRydW5jYXRlKCkgLS0g VHJ1bmNhdGUgdGhlIGdpdmVuIGZvcmtzIG9mIHN1cHBsaWVkIHJlbGF0aW9uIHRvCi0gKgkJCQkJ ICBlYWNoIHNwZWNpZmllZCBudW1iZXJzIG9mIGJsb2NrcworICoJc21ncnRydW5jYXRlX211bHRp KCkgLS0gVHJ1bmNhdGUgdGhlIGdpdmVuIGZvcmtzIG9mIHN1cHBsaWVkIHJlbGF0aW9uIHRvCisg KgkJCQkJCQllYWNoIHNwZWNpZmllZCBudW1iZXJzIG9mIGJsb2NrcwogICoKICAqIFRoZSB0cnVu Y2F0aW9uIGlzIGRvbmUgaW1tZWRpYXRlbHksIHNvIHRoaXMgY2FuJ3QgYmUgcm9sbGVkIGJhY2su CiAgKgogICogVGhlIGNhbGxlciBtdXN0IGhvbGQgQWNjZXNzRXhjbHVzaXZlTG9jayBvbiB0aGUg cmVsYXRpb24sIHRvIGVuc3VyZSB0aGF0CiAgKiBvdGhlciBiYWNrZW5kcyByZWNlaXZlIHRoZSBz bWdyIGludmFsaWRhdGlvbiBldmVudCB0aGF0IHRoaXMgZnVuY3Rpb24gc2VuZHMKICAqIGJlZm9y ZSB0aGV5IGFjY2VzcyBhbnkgZm9ya3Mgb2YgdGhlIHJlbGF0aW9uIGFnYWluLgorICoKKyAqIExp a2Ugc21ncnVubGlua19tdWx0aSgpLCB0aGlzIGhhbmRsZXMgbXVsdGlwbGUgZm9ya3MgaW4gb25l IGNhbGwgYmVjYXVzZQorICogdGhlIGNhY2hlIGludmFsaWRhdGlvbiBoYXBwZW5zIGF0IHJlbGF0 aW9uIGdyYW51bGFyaXR5LgorICoKKyAqIE5COiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZv ciBkcm9wcGluZyBidWZmZXJzISBCZWZvcmUgdjE2LCB0aGlzCisgKiBmdW5jdGlvbiBkaWQgaXQu CiAgKi8KIHZvaWQKLXNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciAq Zm9ya251bSwgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5ibG9ja3MpCitzbWdydHJ1bmNhdGVf bXVsdGkoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kLCBGb3JrTnVt YmVyICpmb3JrcywKKwkJCQkgICBpbnQgbmZvcmtzLCBCbG9ja051bWJlciAqbmJsb2NrcykKIHsK IAlpbnQJCQlpOwogCi0JLyoKLQkgKiBHZXQgcmlkIG9mIGFueSBidWZmZXJzIGZvciB0aGUgYWJv dXQtdG8tYmUtZGVsZXRlZCBibG9ja3MuIGJ1Zm1nciB3aWxsCi0JICoganVzdCBkcm9wIHRoZW0g d2l0aG91dCBib3RoZXJpbmcgdG8gd3JpdGUgdGhlIGNvbnRlbnRzLgotCSAqLwotCURyb3BSZWxh dGlvbkJ1ZmZlcnMocmVsbiwgZm9ya251bSwgbmZvcmtzLCBuYmxvY2tzKTsKKwlBc3NlcnQobmZv cmtzIDwgTUFYX0ZPUktOVU0gKyAxKTsKIAogCS8qCiAJICogU2VuZCBhIHNoYXJlZC1pbnZhbCBt ZXNzYWdlIHRvIGZvcmNlIG90aGVyIGJhY2tlbmRzIHRvIGNsb3NlIGFueSBzbWdyCkBAIC02NDMs MTUgKzYyOCwxOSBAQCBzbWdydHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg KmZvcmtudW0sIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYgogCSAqIGlzIGEgcGVyZm9ybWFu Y2UtY3JpdGljYWwgcGF0aC4pICBBcyBpbiB0aGUgdW5saW5rIGNvZGUsIHdlIHdhbnQgdG8gYmUK IAkgKiBzdXJlIHRoZSBtZXNzYWdlIGlzIHNlbnQgYmVmb3JlIHdlIHN0YXJ0IGNoYW5naW5nIHRo aW5ncyBvbi1kaXNrLgogCSAqLwotCUNhY2hlSW52YWxpZGF0ZVNtZ3IocmVsbi0+c21ncl9ybG9j YXRvcik7CisJQ2FjaGVJbnZhbGlkYXRlU21ncihybG9jYXRvciwgYmFja2VuZCk7CiAKLQkvKiBE byB0aGUgdHJ1bmNhdGlvbiAqLworCS8qIERvIHRoZSB0cnVuY2F0aW9ucyAqLwogCWZvciAoaSA9 IDA7IGkgPCBuZm9ya3M7IGkrKykKIAl7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOworCisJCXNm aWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIGJhY2tlbmQsIGZvcmtzW2ldKTsKKwogCQkvKiBNYWtl IHRoZSBjYWNoZWQgc2l6ZSBpcyBpbnZhbGlkIGlmIHdlIGVuY291bnRlciBhbiBlcnJvci4gKi8K LQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tmb3JrbnVtW2ldXSA9IEludmFsaWRCbG9ja051 bWJlcjsKKwkJc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CiAKLQkJc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfdHJ1bmNhdGUocmVsbiwgZm9ya251 bVtpXSwgbmJsb2Nrc1tpXSk7CisJCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl90cnVu Y2F0ZShzZmlsZSwgbmJsb2Nrc1tpXSk7CiAKIAkJLyoKIAkJICogV2UgbWlnaHQgYXMgd2VsbCB1 cGRhdGUgdGhlIGxvY2FsIHNtZ3JfY2FjaGVkX25ibG9ja3MgdmFsdWVzLiBUaGUKQEAgLTY2MCw3 ICs2NDksNyBAQCBzbWdydHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZv cmtudW0sIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYgogCQkgKiBzbWdyX3ZtX25ibG9ja3Ms IGFuZCB0aGVzZSBvbmVzIHRvbyBhdCB0aGUgbmV4dCBjb21tYW5kIGJvdW5kYXJ5LgogCQkgKiBC dXQgdGhlc2UgZW5zdXJlIHRoZXkgYXJlbid0IG91dHJpZ2h0IHdyb25nIHVudGlsIHRoZW4uCiAJ CSAqLwotCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1baV1dID0gbmJsb2Nrc1tp XTsKKwkJc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBuYmxvY2tzW2ldOwogCX0KIH0KIApA QCAtNjg4LDkgKzY3Nyw5IEBAIHNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciAqZm9ya251bSwgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5iCiAgKgkJb3RoZXJ3aXNl IHRoZSBzeW5jIGlzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuCiAgKi8KIHZvaWQKLXNtZ3JpbW1lZHN5 bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3NtZ3JpbW1lZHN5bmMo U01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3Jf aW1tZWRzeW5jKHJlbG4sIGZvcmtudW0pOworCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21n cl9pbW1lZHN5bmMoc2ZpbGUpOwogfQogCiAvKgpAQCAtNzE0LDE0ICs3MDMsMTQgQEAgQXRFT1hh Y3RfU01ncih2b2lkKQogCSAqIFphcCBhbGwgdW5vd25lZCBTTWdyUmVsYXRpb25zLiAgV2UgcmVs eSBvbiBzbWdyY2xvc2UoKSB0byByZW1vdmUgZWFjaAogCSAqIG9uZSBmcm9tIHRoZSBsaXN0Lgog CSAqLwotCWRsaXN0X2ZvcmVhY2hfbW9kaWZ5KGl0ZXIsICZ1bm93bmVkX3JlbG5zKQorCWRsaXN0 X2ZvcmVhY2hfbW9kaWZ5KGl0ZXIsICZ1bm93bmVkX3NmaWxlcykKIAl7Ci0JCVNNZ3JSZWxhdGlv biByZWwgPSBkbGlzdF9jb250YWluZXIoU01nclJlbGF0aW9uRGF0YSwgbm9kZSwKLQkJCQkJCQkJ CQkgICBpdGVyLmN1cik7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0gZGxpc3RfY29udGFpbmVy KFNNZ3JGaWxlRGF0YSwgbm9kZSwKKwkJCQkJCQkJCQkJICAgaXRlci5jdXIpOwogCi0JCUFzc2Vy dChyZWwtPnNtZ3Jfb3duZXIgPT0gTlVMTCk7CisJCUFzc2VydChzZmlsZS0+c21ncl9vd25lciA9 PSBOVUxMKTsKIAotCQlzbWdyY2xvc2UocmVsKTsKKwkJc21ncmNsb3NlKHNmaWxlKTsKIAl9CiB9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc3luYy9zeW5jLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL3N5bmMvc3luYy5jCmluZGV4IDcxMzUxNTBiMTY3Li4yZWQ3MDU3NjQ4MiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL3N5bmMvc3luYy5jCkBAIC0xOCw5ICsxOCw3IEBACiAjaW5jbHVkZSA8ZmNu dGwuaD4KICNpbmNsdWRlIDxzeXMvZmlsZS5oPgogCi0jaW5jbHVkZSAiYWNjZXNzL2NvbW1pdF90 cy5oIgotI2luY2x1ZGUgImFjY2Vzcy9jbG9nLmgiCi0jaW5jbHVkZSAiYWNjZXNzL211bHRpeGFj dC5oIgorI2luY2x1ZGUgImFjY2Vzcy9zbHJ1LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIK ICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVz cGFjZS5oIgpAQCAtMTA2LDIyICsxMDQsNiBAQCBzdGF0aWMgY29uc3QgU3luY09wcyBzeW5jc3db XSA9IHsKIAkJLnN5bmNfdW5saW5rZmlsZXRhZyA9IG1kdW5saW5rZmlsZXRhZywKIAkJLnN5bmNf ZmlsZXRhZ21hdGNoZXMgPSBtZGZpbGV0YWdtYXRjaGVzCiAJfSwKLQkvKiBwZ194YWN0ICovCi0J W1NZTkNfSEFORExFUl9DTE9HXSA9IHsKLQkJLnN5bmNfc3luY2ZpbGV0YWcgPSBjbG9nc3luY2Zp bGV0YWcKLQl9LAotCS8qIHBnX2NvbW1pdF90cyAqLwotCVtTWU5DX0hBTkRMRVJfQ09NTUlUX1RT XSA9IHsKLQkJLnN5bmNfc3luY2ZpbGV0YWcgPSBjb21taXR0c3N5bmNmaWxldGFnCi0JfSwKLQkv KiBwZ19tdWx0aXhhY3Qvb2Zmc2V0cyAqLwotCVtTWU5DX0hBTkRMRVJfTVVMVElYQUNUX09GRlNF VF0gPSB7Ci0JCS5zeW5jX3N5bmNmaWxldGFnID0gbXVsdGl4YWN0b2Zmc2V0c3N5bmNmaWxldGFn Ci0JfSwKLQkvKiBwZ19tdWx0aXhhY3QvbWVtYmVycyAqLwotCVtTWU5DX0hBTkRMRVJfTVVMVElY QUNUX01FTUJFUl0gPSB7Ci0JCS5zeW5jX3N5bmNmaWxldGFnID0gbXVsdGl4YWN0bWVtYmVyc3N5 bmNmaWxldGFnCi0JfQogfTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL2ludmFsLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9pbnZhbC5jCmluZGV4IDAwMDg4 MjZmNjdjLi43YTFkOGMwMTJjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv aW52YWwuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9pbnZhbC5jCkBAIC02NjEsMTEg KzY2MSwxMiBAQCBMb2NhbEV4ZWN1dGVJbnZhbGlkYXRpb25NZXNzYWdlKFNoYXJlZEludmFsaWRh dGlvbk1lc3NhZ2UgKm1zZykKIAkJICogV2UgY291bGQgaGF2ZSBzbWdyIGVudHJpZXMgZm9yIHJl bGF0aW9ucyBvZiBvdGhlciBkYXRhYmFzZXMsIHNvIG5vCiAJCSAqIHNob3J0LWNpcmN1aXQgdGVz dCBpcyBwb3NzaWJsZSBoZXJlLgogCQkgKi8KLQkJUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2Nh dG9yOworCQlSZWxGaWxlTG9jYXRvciBybG9jYXRvcjsKKwkJQmFja2VuZElkIGJhY2tlbmQ7CiAK LQkJcmxvY2F0b3IubG9jYXRvciA9IG1zZy0+c20ucmxvY2F0b3I7Ci0JCXJsb2NhdG9yLmJhY2tl bmQgPSAobXNnLT5zbS5iYWNrZW5kX2hpIDw8IDE2KSB8IChpbnQpIG1zZy0+c20uYmFja2VuZF9s bzsKLQkJc21ncmNsb3NlcmVsbG9jYXRvcihybG9jYXRvcik7CisJCXJsb2NhdG9yID0gbXNnLT5z bS5ybG9jYXRvcjsKKwkJYmFja2VuZCA9IChtc2ctPnNtLmJhY2tlbmRfaGkgPDwgMTYpIHwgKGlu dCkgbXNnLT5zbS5iYWNrZW5kX2xvOworCQlzbWdyY2xvc2VyZWxsb2NhdG9yKHJsb2NhdG9yLCBi YWNrZW5kKTsKIAl9CiAJZWxzZSBpZiAobXNnLT5pZCA9PSBTSEFSRURJTlZBTFJFTE1BUF9JRCkK IAl7CkBAIC0xNDU5LDE0ICsxNDYwLDE0IEBAIENhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQnlSZWxp ZChPaWQgcmVsaWQpCiAgKiBUaHVzLCB0aGUgbWF4aW11bSBwb3NzaWJsZSBiYWNrZW5kIElEIGlz IDJeMjMtMS4KICAqLwogdm9pZAotQ2FjaGVJbnZhbGlkYXRlU21ncihSZWxGaWxlTG9jYXRvckJh Y2tlbmQgcmxvY2F0b3IpCitDYWNoZUludmFsaWRhdGVTbWdyKFJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yLCBCYWNrZW5kSWQgYmFja2VuZCkKIHsKIAlTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlIG1z ZzsKIAogCW1zZy5zbS5pZCA9IFNIQVJFRElOVkFMU01HUl9JRDsKLQltc2cuc20uYmFja2VuZF9o aSA9IHJsb2NhdG9yLmJhY2tlbmQgPj4gMTY7Ci0JbXNnLnNtLmJhY2tlbmRfbG8gPSBybG9jYXRv ci5iYWNrZW5kICYgMHhmZmZmOwotCW1zZy5zbS5ybG9jYXRvciA9IHJsb2NhdG9yLmxvY2F0b3I7 CisJbXNnLnNtLmJhY2tlbmRfaGkgPSBiYWNrZW5kID4+IDE2OworCW1zZy5zbS5iYWNrZW5kX2xv ID0gYmFja2VuZCAmIDB4ZmZmZjsKKwltc2cuc20ucmxvY2F0b3IgPSBybG9jYXRvcjsKIAkvKiBj aGVjayBBZGRDYXRjYWNoZUludmFsaWRhdGlvbk1lc3NhZ2UoKSBmb3IgYW4gZXhwbGFuYXRpb24g Ki8KIAlWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKCZtc2csIHNpemVvZihtc2cpKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggZDE3MWNmY2YyZmMuLmExOTNmNTE1YzY2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTQxOSw3ICs0MTksNyBAQCBBbGxvY2F0 ZVJlbGF0aW9uRGVzYyhGb3JtX3BnX2NsYXNzIHJlbHApCiAJcmVsYXRpb24gPSAoUmVsYXRpb24p IHBhbGxvYzAoc2l6ZW9mKFJlbGF0aW9uRGF0YSkpOwogCiAJLyogbWFrZSBzdXJlIHJlbGF0aW9u IGlzIG1hcmtlZCBhcyBoYXZpbmcgbm8gb3BlbiBmaWxlIHlldCAqLwotCXJlbGF0aW9uLT5yZF9z bWdyID0gTlVMTDsKKwlNZW1TZXQocmVsYXRpb24tPnJkX3NtZ3IsIDAsIHNpemVvZihyZWxhdGlv bi0+cmRfc21ncikpOwogCiAJLyoKIAkgKiBDb3B5IHRoZSByZWxhdGlvbiB0dXBsZSBmb3JtCkBA IC0xMjQ4LDcgKzEyNDgsNyBAQCByZXRyeToKIAlSZWxhdGlvbkluaXRQaHlzaWNhbEFkZHIocmVs YXRpb24pOwogCiAJLyogbWFrZSBzdXJlIHJlbGF0aW9uIGlzIG1hcmtlZCBhcyBoYXZpbmcgbm8g b3BlbiBmaWxlIHlldCAqLwotCXJlbGF0aW9uLT5yZF9zbWdyID0gTlVMTDsKKwlNZW1TZXQocmVs YXRpb24tPnJkX3NtZ3IsIDAsIHNpemVvZihyZWxhdGlvbi0+cmRfc21ncikpOwogCiAJLyoKIAkg KiBub3cgd2UgY2FuIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHBnX2NsYXNzX3R1cGxl CkBAIC0xODc3LDcgKzE4NzcsNyBAQCBmb3JtcmRlc2MoY29uc3QgY2hhciAqcmVsYXRpb25OYW1l LCBPaWQgcmVsYXRpb25SZWx0eXBlLAogCXJlbGF0aW9uID0gKFJlbGF0aW9uKSBwYWxsb2MwKHNp emVvZihSZWxhdGlvbkRhdGEpKTsKIAogCS8qIG1ha2Ugc3VyZSByZWxhdGlvbiBpcyBtYXJrZWQg YXMgaGF2aW5nIG5vIG9wZW4gZmlsZSB5ZXQgKi8KLQlyZWxhdGlvbi0+cmRfc21nciA9IE5VTEw7 CisJTWVtU2V0KHJlbGF0aW9uLT5yZF9zbWdyLCAwLCBzaXplb2YocmVsYXRpb24tPnJkX3NtZ3Ip KTsKIAogCS8qCiAJICogaW5pdGlhbGl6ZSByZWZlcmVuY2UgY291bnQ6IDEgYmVjYXVzZSBpdCBp cyBuYWlsZWQgaW4gY2FjaGUKQEAgLTI3MDEsNyArMjcwMSw4IEBAIFJlbGF0aW9uQ2xlYXJSZWxh dGlvbihSZWxhdGlvbiByZWxhdGlvbiwgYm9vbCByZWJ1aWxkKQogCQl9CiAKIAkJLyogcmRfc21n ciBtdXN0IG5vdCBiZSBzd2FwcGVkLCBkdWUgdG8gYmFjay1saW5rcyBmcm9tIHNtZ3IgbGV2ZWwg Ki8KLQkJU1dBUEZJRUxEKFNNZ3JSZWxhdGlvbiwgcmRfc21ncik7CisJCWZvciAoaW50IGkgPSAw OyBpIDw9IE1BWF9GT1JLTlVNOyBpKyspCisJCQlTV0FQRklFTEQoU01nckZpbGVIYW5kbGUsIHJk X3NtZ3JbaV0pOwogCQkvKiByZF9yZWZjbnQgbXVzdCBiZSBwcmVzZXJ2ZWQgKi8KIAkJU1dBUEZJ RUxEKGludCwgcmRfcmVmY250KTsKIAkJLyogaXNuYWlsZWQgc2hvdWxkbid0IGNoYW5nZSAqLwpA QCAtMzUzMiw3ICszNTMzLDcgQEAgUmVsYXRpb25CdWlsZExvY2FsUmVsYXRpb24oY29uc3QgY2hh ciAqcmVsbmFtZSwKIAlyZWwgPSAoUmVsYXRpb24pIHBhbGxvYzAoc2l6ZW9mKFJlbGF0aW9uRGF0 YSkpOwogCiAJLyogbWFrZSBzdXJlIHJlbGF0aW9uIGlzIG1hcmtlZCBhcyBoYXZpbmcgbm8gb3Bl biBmaWxlIHlldCAqLwotCXJlbC0+cmRfc21nciA9IE5VTEw7CisJTWVtU2V0KHJlbC0+cmRfc21n ciwgMCwgc2l6ZW9mKHJlbC0+cmRfc21ncikpOwogCiAJLyogbWFyayBpdCBuYWlsZWQgaWYgYXBw cm9wcmlhdGUgKi8KIAlyZWwtPnJkX2lzbmFpbGVkID0gbmFpbGl0OwpAQCAtMzc2NCw3ICszNzY1 LDYgQEAgUmVsYXRpb25TZXROZXdSZWxmaWxlbnVtYmVyKFJlbGF0aW9uIHJlbGF0aW9uLCBjaGFy IHBlcnNpc3RlbmNlKQogCSAqLwogCWlmIChJc0JpbmFyeVVwZ3JhZGUpCiAJewotCQlTTWdyUmVs YXRpb24Jc3JlbDsKIAogCQkvKgogCQkgKiBEdXJpbmcgYSBiaW5hcnkgdXBncmFkZSwgd2UgdXNl IHRoaXMgY29kZSBwYXRoIHRvIGVuc3VyZSB0aGF0CkBAIC0zNzgxLDkgKzM3ODEsMTQgQEAgUmVs YXRpb25TZXROZXdSZWxmaWxlbnVtYmVyKFJlbGF0aW9uIHJlbGF0aW9uLCBjaGFyIHBlcnNpc3Rl bmNlKQogCQkgKiBmYWlscyBhdCB0aGlzIHN0YWdlLCB0aGUgbmV3IGNsdXN0ZXIgd2lsbCBuZWVk IHRvIGJlIHJlY3JlYXRlZAogCQkgKiBhbnl3YXkuCiAJCSAqLwotCQlzcmVsID0gc21ncm9wZW4o cmVsYXRpb24tPnJkX2xvY2F0b3IsIHJlbGF0aW9uLT5yZF9iYWNrZW5kKTsKLQkJc21ncmRvdW5s aW5rYWxsKCZzcmVsLCAxLCBmYWxzZSk7Ci0JCXNtZ3JjbG9zZShzcmVsKTsKKwkJRm9ya051bWJl ciBmb3Jrc1tNQVhfRk9SS05VTSArIDFdOworCQlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9S S05VTTsgaSArKykgCisJCXsKKwkJCXNtZ3JvcGVuKHJlbGF0aW9uLT5yZF9sb2NhdG9yLCByZWxh dGlvbi0+cmRfYmFja2VuZCwgaSk7CisJCQlmb3Jrc1tpXSA9IGk7CisJCX0KKwkJCisJCXNtZ3J1 bmxpbmtfbXVsdGkocmVsYXRpb24tPnJkX2xvY2F0b3IsIHJlbGF0aW9uLT5yZF9iYWNrZW5kLCBm b3JrcywgTUFYX0ZPUktOVU0gKyAxLCBmYWxzZSk7CiAJfQogCWVsc2UKIAl7CkBAIC0zODExLDcg KzM4MTYsNyBAQCBSZWxhdGlvblNldE5ld1JlbGZpbGVudW1iZXIoUmVsYXRpb24gcmVsYXRpb24s IGNoYXIgcGVyc2lzdGVuY2UpCiAJZWxzZSBpZiAoUkVMS0lORF9IQVNfU1RPUkFHRShyZWxhdGlv bi0+cmRfcmVsLT5yZWxraW5kKSkKIAl7CiAJCS8qIGhhbmRsZSB0aGVzZSBkaXJlY3RseSwgYXQg bGVhc3QgZm9yIG5vdyAqLwotCQlTTWdyUmVsYXRpb24gc3JlbDsKKwkJU01nckZpbGVIYW5kbGUg c3JlbDsKIAogCQlzcmVsID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKG5ld3Jsb2NhdG9yLCBwZXJz aXN0ZW5jZSwgdHJ1ZSk7CiAJCXNtZ3JjbG9zZShzcmVsKTsKQEAgLTYyOTgsNyArNjMwMyw3IEBA IGxvYWRfcmVsY2FjaGVfaW5pdF9maWxlKGJvb2wgc2hhcmVkKQogCQkvKgogCQkgKiBSZXNldCB0 cmFuc2llbnQtc3RhdGUgZmllbGRzIGluIHRoZSByZWxjYWNoZSBlbnRyeQogCQkgKi8KLQkJcmVs LT5yZF9zbWdyID0gTlVMTDsKKwkJTWVtU2V0KHJlbC0+cmRfc21nciwgMCwgc2l6ZW9mKHJlbC0+ cmRfc21ncikpOwogCQlpZiAocmVsLT5yZF9pc25haWxlZCkKIAkJCXJlbC0+cmRfcmVmY250ID0g MTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgYi9z cmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYwppbmRleCA4YjY1OTFhYmZiMi4uN2UyNjM1YjEy NGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCkBAIC0xNjIsOSArMTYyLDIwIEBAIHN0YXRpYyB2b2lk IE1lbW9yeUNvbnRleHRTdGF0c1ByaW50KE1lbW9yeUNvbnRleHQgY29udGV4dCwgdm9pZCAqcGFz c3RocnUsCiAgKiBZb3Ugc2hvdWxkIG5vdCBkbyBtZW1vcnkgYWxsb2NhdGlvbnMgd2l0aGluIGEg Y3JpdGljYWwgc2VjdGlvbiwgYmVjYXVzZQogICogYW4gb3V0LW9mLW1lbW9yeSBlcnJvciB3aWxs IGJlIGVzY2FsYXRlZCB0byBhIFBBTklDLiBUbyBlbmZvcmNlIHRoYXQKICAqIHJ1bGUsIHRoZSBh bGxvY2F0aW9uIGZ1bmN0aW9ucyBBc3NlcnQgdGhhdC4KKyAqCisgKiBGSVhNRTogYnlwYXNzIHRo aXMgZm9yIHRoZSBjcml0aWNhbCBzZWN0aW9uIGluIFJlY29yZFRyYW5zYWN0aW9uQ29tbWl0KCkK KyAqIGZvciBub3cuIEl0IGRvZXMgYSBsb3Qgb2YgdGhpbmdzIHRoYXQgY2FuIGFsbG9jYXRlOgor ICogLSBjYWxscyBUcmFuc2FjdGlvbklkQ29tbWl0VHJlZSwgd2hpY2ggcGlucyBidWZmZXJzLCB3 aGljaCByZXF1aXJlcworICogICBzcGFjZSBpbiB0aGUgUmVzb3VyY2VPd25lciBmb3IgdGhlIHBp biAoUmVzb3VyY2VPd25lckVubGFyZ2VCdWZmZXJzKCkpCisgKiAtIHNhbWUgZm9yIFRyYW5zYWN0 aW9uVHJlZVNldENvbW1pdFRzRGF0YSgpIGNhbGwuCisgKiAtIHJlYWRpbmcgYSBwYWdlIGNhbiBy ZXF1aXJlIGZsdXNoaW5nIG90aGVyIHBhZ2VzLCB3aGljaCBpbiB0dXJuCisgKiAgIGNhbiBjYWxs IENvbXBhY3RDaGVja3BvaW50ZXJSZXF1ZXN0UXVldWUoKSwgd2hpY2ggYWxsb2NhdGVzCisgKiAt IHJlYWRpbmcgYSBwYWdlIGNhbGxzIHNtZ3JvcGVuKCksIHdoaWNoIGFsbG9jYXRlcyB0aGUgU01n ckZpbGUgZW50cnkKKyAqICAgaWYgaXQncyBub3Qgb3BlbiBhbHJlYWR5CiAgKi8KICNkZWZpbmUg QXNzZXJ0Tm90SW5Dcml0aWNhbFNlY3Rpb24oY29udGV4dCkgXAotCUFzc2VydChDcml0U2VjdGlv bkNvdW50ID09IDAgfHwgKGNvbnRleHQpLT5hbGxvd0luQ3JpdFNlY3Rpb24pCisJQXNzZXJ0KENy aXRTZWN0aW9uQ291bnQgPT0gMCB8fCAoY29udGV4dCktPmFsbG93SW5Dcml0U2VjdGlvbiB8fCBc CisJCSAgIChNeVByb2MgIT0gTlVMTCAmJiAoTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgJiBERUxB WV9DSEtQVF9TVEFSVCAhPSAwKSkpCiAKIC8qCiAgKiBDYWxsIHRoZSBnaXZlbiBmdW5jdGlvbiBp biB0aGUgTWVtb3J5Q29udGV4dE1ldGhvZHMgZm9yIHRoZSBtZW1vcnkgY29udGV4dApkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL2ZpbGUuYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9maWxl LmMKaW5kZXggZWQ4NzQ1MDdmZjQuLjI3ZjI0MDQ3MGJhIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X3VwZ3JhZGUvZmlsZS5jCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9maWxlLmMKQEAgLTIwLDYg KzIwLDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXBkZWZzLmgi CisjaW5jbHVkZSAiYWNjZXNzL3NscnVkZWZzLmgiCiAjaW5jbHVkZSAiY29tbW9uL2ZpbGVfcGVy bS5oIgogI2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2Uu aCIKQEAgLTEzOSw3ICsxNDAsNiBAQCBjb3B5RmlsZShjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNo YXIgKmRzdCwKICNlbmRpZgkJCQkJCQkvKiBXSU4zMiAqLwogfQogCi0KIC8qCiAgKiBsaW5rRmls ZSgpCiAgKgpAQCAtMzE2LDYgKzMxNiwxNzkgQEAgcmV3cml0ZVZpc2liaWxpdHlNYXAoY29uc3Qg Y2hhciAqZnJvbWZpbGUsIGNvbnN0IGNoYXIgKnRvZmlsZSwKIAljbG9zZShzcmNfZmQpOwogfQog CisKKy8vY3JlYXRlIG5ldyBmaWxlIGFuZCBpbml0aWFsaXplIHRvIDI1NksKK3N0YXRpYyBpbnQK K2luaXRfbmV3X3NscnVfZmlsZShGSUxFICogZnApCit7IAorCWludCBmZDsKKwlpbnQgcmVzOwor CQorCWZkID0gZmlsZW5vKGZwKTsKKwlyZXMgPSBmdHJ1bmNhdGUoZmQsIEJMQ0tTWiAqIFNMUlVf UEFHRVNfUEVSX1NFR01FTlQpOworCXJldHVybiByZXM7Cit9CisKK2ludCAKK2NvcHlfdG9fbmV3 X2Zvcm1hdChjb25zdCBjaGFyICpvbGRfc3ViZGlyLCBjb25zdCBjaGFyICpuZXdfc3ViZGlyLCBp bnQgZWxlbWVudF9zaXplKSAKK3sKKwlESVIgKmRyOworCXN0cnVjdCBkaXJlbnQgKmRlOworCQor CXNpemVfdCAJcmVhZF9pdGVtczsKKwlzaXplX3QgCW5faXRlbXM7CisJc2l6ZV90IAl0b19yZWFk X2l0ZW1zOworCXNpemVfdCAJd3JpdGVfaXRlbXM7CisJc2l6ZV90IAlwYWdlc193cml0dGVuOwor CXNpemVfdCAJd3JpdGVfb2Zmc2V0OworCisJY2hhciAqIAlyZWFkX2ZpbGU7CQorCWNoYXIgKiAJ d3JpdGVfZmlsZTsKKwkKKwlpbnQgCXJlczsKKwlpbnQgCXdyaXRlX2ZpbGVfc2Vnbm87CisJaW50 IAl0b3RhbF9yZWFkX2ZpbGVzOworCQorCUZJTEUgKiAJb2xkX2ZkOyAKKwlGSUxFICogCW5ld19m cDsKKworI2RlZmluZSBNQVhCVUZTSVpFIChCTENLU1ogLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSkK KworCWNoYXIJb2xkX3BhdGhbTUFYUEdQQVRIXTsKKwljaGFyCW5ld19wYXRoW01BWFBHUEFUSF07 CisJUEdBbGlnbmVkQmxvY2sgcGdfYnVmOworCUJsb2NrTnVtYmVyIGJsa25vOyAvL3RyYWNrIGFi b3NsdXRlIGJsb2NrIG51bWJlcgorCQorCisJc3RydWN0IAlkaXJlbnQqKiBhbGxfZGlyZW50czsK KworCisJc25wcmludGYob2xkX3BhdGgsIHNpemVvZihvbGRfcGF0aCksICIlcy8lcyIsIG9sZF9j bHVzdGVyLnBnZGF0YSwgb2xkX3N1YmRpcik7CisJc25wcmludGYobmV3X3BhdGgsIHNpemVvZihu ZXdfcGF0aCksICIlcy8lcyIsIG5ld19jbHVzdGVyLnBnZGF0YSwgbmV3X3N1YmRpcik7CisKKwkv KiAKKwkgKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBmaXQgCisJICog aW5zaWRlIEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhCisJICovCisKKwluX2l0ZW1zID0g KHNpemVfdCkgKE1BWEJVRlNJWkUgLyBlbGVtZW50X3NpemUpOyAKKwkKKwkvKiBudW1iZXIgb2Yg aXRlbXMgdG8gcmVhZCBpbiBhdCBhIHRpbWUgKi8KKwl0b19yZWFkX2l0ZW1zID0gbl9pdGVtczsK KwkKKwkvL2J1ZnNpemUgPSAoc2l6ZV90KSAobl9pdGVtcyAqIGVsZW1lbnRfc2l6ZSk7IAorCXdy aXRlX2ZpbGVfc2Vnbm8gPSAwOyAvKiB0cmFjayB3aGljaCBzZWdtZW50IHdlIGFyZSB3cml0aW5n IGludG8gKi8KKwl3cml0ZV9vZmZzZXQgPSAoc2l6ZV90KSAoU2l6ZU9mUGFnZUhlYWRlckRhdGEp OyAKKworCWRyID0gb3BlbmRpcigoY2hhciAqKW9sZF9wYXRoKTsKKwlpZiAoZHIgPT0gTlVMTCkK KwkJcmV0dXJuIC0xOworCisJd3JpdGVfZmlsZSA9IHBzcHJpbnRmKCIlcy8lMDRYIiwgbmV3X3Bh dGgsIHdyaXRlX2ZpbGVfc2Vnbm8pOworCQorCW5ld19mcCA9IGZvcGVuKHdyaXRlX2ZpbGUsICJ3 YiIpOworCQorCWlmIChuZXdfZnAgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJcmVzID0gaW5p dF9uZXdfc2xydV9maWxlKG5ld19mcCk7CisJaWYgKHJlcyA8IDApCQorCQlyZXR1cm4gLTE7CisK KwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcGFnZXNfd3JpdHRlbiA9IDA7CisJYmxr bm8gPSAwOyAvKiBhYnNvbHV0ZSBibGtubyAqLworCisJYWxsX2RpcmVudHMgPSBnZXRfc29ydGVk X2hleF9maWxlcyhvbGRfcGF0aCwgJnRvdGFsX3JlYWRfZmlsZXMpOworCisJd3JpdGVfaXRlbXMg PSAwOworCWZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxfcmVhZF9maWxlczsgaSsrKQorCXsKKwkJ ZGUgPSBhbGxfZGlyZW50c1tpXTsKKwkJCisJCWlmICgoIXN0cmNtcCgoY2hhciAqKSBkZS0+ZF9u YW1lLCAiLiIpKSB8fCAhc3RyY21wKChjaGFyICopIGRlLT5kX25hbWUsICIuLiIpKQorCSAJewor CQkJY29udGludWU7CisJIAl9CisKKwkJcmVhZF9maWxlID0gcHNwcmludGYoIiVzLyVzIiwgKGNo YXIgKikgb2xkX3BhdGgsIChjaGFyICopIGRlLT5kX25hbWUpOworCQkKKwkJb2xkX2ZkID0gZm9w ZW4ocmVhZF9maWxlLCAicmIiKTsKKwkJcmVhZF9pdGVtcyA9IDA7CisJCQorCQlkbyAKKwkJewor CQkJbWVtc2V0KHBnX2J1Zi5kYXRhLCAwLCBCTENLU1opOwkJCisJCQlyZWFkX2l0ZW1zID0gZnJl YWQocGdfYnVmLmRhdGEgKyB3cml0ZV9vZmZzZXQsIGVsZW1lbnRfc2l6ZSwgdG9fcmVhZF9pdGVt cywgb2xkX2ZkKTsgIC8qIGhvdyBtYW55IGl0ZW1zIHdlIHJlYWQgKi8KKworCQkJaWYgKHRvX3Jl YWRfaXRlbXMgPT0gbl9pdGVtcykgLyogbm90IGZpbmlzaGluZyB1cCBhIHBhcnRpYWwgcmVhZCAq LworCQkJeworCisJCQkJKChQYWdlSGVhZGVyKSBwZ19idWYuZGF0YSktPnBkX2xvd2VyID0gU2l6 ZU9mUGFnZUhlYWRlckRhdGE7CisJCQkJKChQYWdlSGVhZGVyKSBwZ19idWYuZGF0YSktPnBkX3Vw cGVyID0gQkxDS1NaOworCQkJCSgoUGFnZUhlYWRlcikgcGdfYnVmLmRhdGEpLT5wZF9zcGVjaWFs ID0gQkxDS1NaOworCQkJCQorCQkJCSgoUGFnZUhlYWRlcikgcGdfYnVmLmRhdGEpLT5wZF9jaGVj a3N1bSA9CisJCQkJCXBnX2NoZWNrc3VtX3BhZ2UocGdfYnVmLmRhdGEsIGJsa25vKTsKKworCQkJ CWZ3cml0ZShwZ19idWYuZGF0YSwgU2l6ZU9mUGFnZUhlYWRlckRhdGEsIDEsIG5ld19mcCk7IC8q IHdyaXRlIHBhZ2UgaGVhZGVyIGRhdGEgKi8KKwkJCX0KKworCQkJCisJCQl3cml0ZV9pdGVtcyAr PSBmd3JpdGUocGdfYnVmLmRhdGEgKyB3cml0ZV9vZmZzZXQsIGVsZW1lbnRfc2l6ZSwgcmVhZF9p dGVtcywgbmV3X2ZwKTsgIC8qIGluY3JlbWVudCBob3cgbWFueSBpdGVtcyB3cml0dGVuICovCisJ CQkJCQkKKwkJCWlmICh3cml0ZV9pdGVtcyAlIG5faXRlbXMgPT0gMCAmJiB3cml0ZV9pdGVtcyA+ IDAgJiYgZXJybm8gPT0gMCkgLyogZmluaXNoZWQgd3JpdGluZyBpbnRvIG5ldyBwYWdlLiAqLwor CQkJeworCQkJCWlmICh3cml0ZV9pdGVtcyA9PSBuX2l0ZW1zICogU0xSVV9QQUdFU19QRVJfU0VH TUVOVCkgLyogZW5kIG9mIHNlZ21lbnQgKi8KKwkJCQl7CisJCQkJCWZjbG9zZShuZXdfZnApOwor CQkJCQlwYWdlc193cml0dGVuID0gMDsKKwkJCQkJd3JpdGVfZmlsZV9zZWdubyArKzsKKwkJCQkJ d3JpdGVfaXRlbXMgPSAwOworCQkJCQl3cml0ZV9maWxlID0gcHNwcmludGYoIiVzLyUwNFgiLCBu ZXdfcGF0aCwgd3JpdGVfZmlsZV9zZWdubyk7CisJCQkJCW5ld19mcCA9IGZvcGVuKChjaGFyICop d3JpdGVfZmlsZSwgIndiIik7CisJCQkJCXJlcyA9IGluaXRfbmV3X3NscnVfZmlsZShuZXdfZnAp OworCQkJCQlpZiAocmVzIDwgMCB8fCBuZXdfZnAgPT0gTlVMTCkKKwkJCQkJeworCQkJCQkJZmNs b3NlKG5ld19mcCk7CisJCQkJCQljbGVhbnVwX2RpcmVudHMoYWxsX2RpcmVudHMsIHRvdGFsX3Jl YWRfZmlsZXMpOworCQkJCQkJCisJCQkJCX0KKwkJCQl9IGVsc2UgeyAvKiBlbmQgb2YgcGFnZSBi dXQgbm90IHNlZ21lbnQgKi8KKwkJCQkJLy9mZmx1c2gobmV3X2ZwKTsKKwkJCQkJcGFnZXNfd3Jp dHRlbiArKzsgCisJCQkJfQorCisJCQkJYmxrbm8rKzsgCisKKwkJCQl0b19yZWFkX2l0ZW1zID0g bl9pdGVtczsgLyogdG9fcmVhZF9pdGVtcyA9IG4gKi8KKwkJCQlyZXMgPSBmc2VlayhuZXdfZnAs IChwYWdlc193cml0dGVuICogQkxDS1NaKSwgU0VFS19TRVQpOworCQkJCWlmIChyZXMgPCAwKQor CQkJCXsKKwkJCQkJZmNsb3NlKG5ld19mcCk7CisJCQkJCWNsZWFudXBfZGlyZW50cyhhbGxfZGly ZW50cywgdG90YWxfcmVhZF9maWxlcyk7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQl9IGVs c2UgeworCQkJCS8qZW5kIG9mIHNlZ21lbnQgaW4gc291cmNlIGRpciovCisJCQkJaWYgKHJlYWRf aXRlbXMgPCB0b19yZWFkX2l0ZW1zKSAKKwkJCQl7CisJCQkJCXRvX3JlYWRfaXRlbXMgPSBuX2l0 ZW1zIC0gcmVhZF9pdGVtczsgLyogcmVhZCByZW1haW5pbmcgaXRlbXMgKi8KKwkJCQl9CisJCQl9 CisJCX0gd2hpbGUgKCFmZW9mKG9sZF9mZCkpOyAgLyogdW50aWwgZW5kIG9mIGZpbGUgKi8KKwkJ ZmNsb3NlKG9sZF9mZCk7CisJfQorCWZmbHVzaChuZXdfZnApOworCQorCS8qIGZyZWUgbWVtb3J5 IG1hbGxvYydkIGJ5IHNjYW5kaXIgd2hpbGUgc29ydGluZyAqLworCWNsZWFudXBfZGlyZW50cyhh bGxfZGlyZW50cywgdG90YWxfcmVhZF9maWxlcyk7CisKKwlyZXR1cm4gMDsKK30KKwogdm9pZAog Y2hlY2tfZmlsZV9jbG9uZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRl L2Z1bmN0aW9uLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvZnVuY3Rpb24uYwppbmRleCA5YWQ3NTQ0 NmVlYy4uMzliMzZhMWUwZWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9mdW5jdGlv bi5jCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9mdW5jdGlvbi5jCkBAIC03LDYgKzcsNyBAQAog ICoJc3JjL2Jpbi9wZ191cGdyYWRlL2Z1bmN0aW9uLmMKICAqLwogCisKICNpbmNsdWRlICJwb3N0 Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKQEAgLTQyLDYgKzQzLDQz IEBAIGxpYnJhcnlfbmFtZV9jb21wYXJlKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikK IAkJCSgoY29uc3QgTGlicmFyeUluZm8gKikgcDIpLT5kYm51bTsKIH0KIAorLyoKKyAqIHFzb3J0 IGNvbXBhcmF0b3IgZm9yIGhleCBmaWxlbmFtZXMKKyAqLworc3RhdGljIGludAorZmlsZV9uYW1l X2NvbXBhcmUoY29uc3Qgc3RydWN0IGRpcmVudCAqKiBkZV8xLCBjb25zdCBzdHJ1Y3QgZGlyZW50 ICoqIGRlXzIpCit7CisJaW50IG4xOworCWludCBuMjsKKworCisJY2hhciAqIGZuYW1lXzE7CisJ Y2hhciAqIGZuYW1lXzI7CisKKwlmbmFtZV8xID0gKGNoYXIgKikgKCpkZV8xKS0+ZF9uYW1lOwor CWZuYW1lXzIgPSAoY2hhciAqKSAoKmRlXzIpLT5kX25hbWU7CisJCisJaWYgKChzdHJjbXAoZm5h bWVfMSwgIi4iKSkgfHwgc3RyY21wKGZuYW1lXzEsICIuLiIpKSAKKwl7CisJCW4xID0gKGludCkg c3RydG9sKGZuYW1lXzEsIE5VTEwsIDE2KTsKKwl9IGVsc2UgeworCQluMSA9IC0xOworCX0KKwor CWlmICgoc3RyY21wKGZuYW1lXzIsICIuIikpIHx8IHN0cmNtcChmbmFtZV8yLCAiLi4iKSkKKwl7 CisJCW4yID0gKGludCkgc3RydG9sKGZuYW1lXzIsIE5VTEwsIDE2KTsKKwl9IGVsc2UgeworCQlu MiA9IC0xOworCX0KKworCWlmIChuMSA9PSBuMikgCisJeworCQlyZXR1cm4gMTsgLy9hcmJpdHJh cmlseSBzZWxlY3QgdGhlIGZpcnN0IGlucHV0CisJfSBlbHNlIHsKKwkJcmV0dXJuIG4xIC0gbjI7 CisJfQorfQogCiAvKgogICogZ2V0X2xvYWRhYmxlX2xpYnJhcmllcygpCkBAIC0xMDksNiArMTQ3 LDM0IEBAIGdldF9sb2FkYWJsZV9saWJyYXJpZXModm9pZCkKIH0KIAogCisvKgorICogZ2V0X3Nv cnRlZF9oZXhfZmlsZXMoKQorICogZ2l2ZW4gdGhlIGZpbGVwYXRoIG9mIGEgZGlyZWN0b3J5LAor ICogcmV0dXJuIGFycmF5IG9mIGNoaWxkIGRpcmVudHMgd2l0aCBoZXggZmlsZW5hbWVzIGUuZyAn MDAwQScKKyAqIGluIHNvcnRlZCBvcmRlcgorICovCitzdHJ1Y3QgZGlyZW50KiogCitnZXRfc29y dGVkX2hleF9maWxlcyhjaGFyICogZHIsIGludCAqIHNpemUpCit7CisJc3RydWN0IGRpcmVudCAq KmVudHJ5X2xpc3Q7CisKKwkqc2l6ZSA9IHNjYW5kaXIoZHIsICZlbnRyeV9saXN0LCBOVUxMLCBm aWxlX25hbWVfY29tcGFyZSk7CisJaWYgKCpzaXplIDwgMCkKKwl7CisJCXJldHVybiBOVUxMOyAv L2Vycm9yCisJfQorCXJldHVybiBlbnRyeV9saXN0OworfQorCit2b2lkCitjbGVhbnVwX2RpcmVu dHMoc3RydWN0IGRpcmVudCAqKiBhbGxfZGlyZW50cywgaW50IHRvdGFsX3JlYWRfZmlsZXMpCit7 CQorCWZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxfcmVhZF9maWxlczsgaSsrKQorCXsKKwkJIGZy ZWUoKHN0cnVjdCBkaXJlbnQgKiopIGFsbF9kaXJlbnRzW2ldKTsKKwl9CisJZnJlZSgoc3RydWN0 IGRpcmVudCAqKikgYWxsX2RpcmVudHMpOworfQogLyoKICAqIGNoZWNrX2xvYWRhYmxlX2xpYnJh cmllcygpCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYyBi L3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKaW5kZXggZTU1OTdkMzEwNTIuLjhjMjY0 Y2M5OGRkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jCisrKyBi L3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKQEAgLTM4LDI3ICszOCwzNSBAQAogCiAj aW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1ZGUgPGRpcmVudC5oPgogI2luY2x1ZGUg PHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2lmZGVmIEhBVkVfTEFOR0lORk9fSAog I2luY2x1ZGUgPGxhbmdpbmZvLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgImFjY2Vzcy9zbHJ1ZGVm cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3NfZC5oIgogI2luY2x1ZGUgImNvbW1vbi9m aWxlX3Blcm0uaCIKICNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgogI2luY2x1ZGUgImNvbW1v bi9yZXN0cmljdGVkX3Rva2VuLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgi CiAjaW5jbHVkZSAicGdfdXBncmFkZS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgog CiBzdGF0aWMgdm9pZCBwcmVwYXJlX25ld19jbHVzdGVyKHZvaWQpOwogc3RhdGljIHZvaWQgcHJl cGFyZV9uZXdfZ2xvYmFscyh2b2lkKTsKIHN0YXRpYyB2b2lkIGNyZWF0ZV9uZXdfb2JqZWN0cyh2 b2lkKTsKIHN0YXRpYyB2b2lkIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKTsKLXN0YXRpYyB2b2lk IHNldF9mcm96ZW54aWRzKGJvb2wgbWlubXhpZF9vbmx5KTsKK3N0YXRpYyB2b2lkIHNldF9mcm96 ZW54aWRzKGJvb2wgbWlubXhpZF9vbmx5KTs7CiBzdGF0aWMgdm9pZCBtYWtlX291dHB1dGRpcnMo Y2hhciAqcGdkYXRhKTsKIHN0YXRpYyB2b2lkIHNldHVwKGNoYXIgKmFyZ3YwLCBib29sICpsaXZl X2NoZWNrKTsKIAorCisjZGVmaW5lIE1BWEJVRlNJWkUgKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFk ZXJEYXRhKQorI2RlZmluZSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UIDMyCisKIENsdXN0ZXJJbmZv IG9sZF9jbHVzdGVyLAogCQkJbmV3X2NsdXN0ZXI7CiBPU0luZm8JCW9zX2luZm87CkBAIC01NzMs MTEgKzU4MSwzNiBAQCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIAkgKiBDb3B5IG9sZCBjb21t aXQgbG9ncyB0byBuZXcgZGF0YSBkaXIuIHBnX2Nsb2cgaGFzIGJlZW4gcmVuYW1lZCB0bwogCSAq IHBnX3hhY3QgaW4gcG9zdC0xMCBjbHVzdGVycy4KIAkgKi8KLQljb3B5X3N1YmRpcl9maWxlcyhH RVRfTUFKT1JfVkVSU0lPTihvbGRfY2x1c3Rlci5tYWpvcl92ZXJzaW9uKSA8PSA5MDYgPwotCQkJ CQkgICJwZ19jbG9nIiA6ICJwZ194YWN0IiwKLQkJCQkJICBHRVRfTUFKT1JfVkVSU0lPTihuZXdf Y2x1c3Rlci5tYWpvcl92ZXJzaW9uKSA8PSA5MDYgPwotCQkJCQkgICJwZ19jbG9nIiA6ICJwZ194 YWN0Iik7CisJIAorCWlmIChvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyIDw9IENMT0df Rk9STUFUQ0hBTkdFX0NBVF9WRVIgJiYKKwkJbmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3Zl ciA+PSBDTE9HX0ZPUk1BVENIQU5HRV9DQVRfVkVSKQorCXsKKwkJCWludCByZXQ7CisJCQlyZXQg PSBjb3B5X3RvX25ld19mb3JtYXQoR0VUX01BSk9SX1ZFUlNJT04ob2xkX2NsdXN0ZXIubWFqb3Jf dmVyc2lvbikgPD0gOTA2ID8KKwkJCSJwZ19jbG9nIiA6ICJwZ194YWN0IiwgCisJCQkicGdfeGFj dCIsIDEpOworCQkJCisJCQlpZiAocmV0IDwgMCkKKwkJCXsKKwkJCQlwZ19mYXRhbCgiY291bGQg bm90IHJlZm9ybWF0IGNsb2cgZmlsZXMiKTsKKwkJCX0KKwl9CiAKKwlpZiAob2xkX2NsdXN0ZXIu Y29udHJvbGRhdGEuY2F0X3ZlciA+PSBDTE9HX0ZPUk1BVENIQU5HRV9DQVRfVkVSICYmCisJCW5l d19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gQ0xPR19GT1JNQVRDSEFOR0VfQ0FUX1ZF UikKKwl7CisJCWNvcHlfc3ViZGlyX2ZpbGVzKCJwZ194YWN0IiwgInBnX3hhY3QiKTsKKwl9CisK KwlpZiAob2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA8PSBDTE9HX0ZPUk1BVENIQU5H RV9DQVRfVkVSICYmCisJCW5ld19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPD0gQ0xPR19G T1JNQVRDSEFOR0VfQ0FUX1ZFUikKKwl7CisJCWNvcHlfc3ViZGlyX2ZpbGVzKEdFVF9NQUpPUl9W RVJTSU9OKG9sZF9jbHVzdGVyLm1ham9yX3ZlcnNpb24pIDw9IDkwNiA/CisJCQkJCSJwZ19jbG9n IiA6ICJwZ194YWN0IiwKKwkJCQkJR0VUX01BSk9SX1ZFUlNJT04obmV3X2NsdXN0ZXIubWFqb3Jf dmVyc2lvbikgPD0gOTA2ID8KKwkJCQkJInBnX2Nsb2ciIDogInBnX3hhY3QiKTsKKwl9CisJCiAJ cHJlcF9zdGF0dXMoIlNldHRpbmcgb2xkZXN0IFhJRCBmb3IgbmV3IGNsdXN0ZXIiKTsKIAlleGVj X3Byb2coVVRJTElUWV9MT0dfRklMRSwgTlVMTCwgdHJ1ZSwgdHJ1ZSwKIAkJCSAgIlwiJXMvcGdf cmVzZXR3YWxcIiAtZiAtdSAldSBcIiVzXCIiLApAQCAtNjMzLDIzICs2NjYsNDQgQEAgY29weV94 YWN0X3hsb2dfeGlkKHZvaWQpCiAJfQogCWVsc2UgaWYgKG5ld19jbHVzdGVyLmNvbnRyb2xkYXRh LmNhdF92ZXIgPj0gTVVMVElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVSKQogCXsKKwkJY29weV90 b19uZXdfZm9ybWF0KCJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsICJwZ19tdWx0aXhhY3Qvb2Zmc2V0 cyIsIE1VTFRJWEFDVF9NRU1CRVJfRU5UUllfU0laRSk7CisJCWNvcHlfdG9fbmV3X2Zvcm1hdCgi cGdfbXVsdGl4YWN0L21lbWJlcnMiLCAicGdfbXVsdGl4YWN0L21lbWJlcnMiLCBNVUxUSVhBQ1Rf T0ZGU0VUX0VOVFJZX1NJWkUpOwkgCisKKworCQlwcmVwX3N0YXR1cygiU2V0dGluZyBuZXh0IG11 bHRpeGFjdCBJRCBhbmQgb2Zmc2V0IGZvciBuZXcgY2x1c3RlciIpOworCiAJCS8qCisJCSAqIHdl IHByZXNlcnZlIGFsbCBmaWxlcyBhbmQgY29udGVudHMsIHNvIHdlIG11c3QgcHJlc2VydmUgYm90 aCAibmV4dCIKKwkJICogY291bnRlcnMgaGVyZSBhbmQgdGhlIG9sZGVzdCBtdWx0aSBwcmVzZW50 IG9uIHN5c3RlbS4KKwkJICovCisJCWV4ZWNfcHJvZyhVVElMSVRZX0xPR19GSUxFLCBOVUxMLCB0 cnVlLCB0cnVlLAorCQkJCSAgIlwiJXMvcGdfcmVzZXR3YWxcIiAtTyAldSAtbSAldSwldSBcIiVz XCIiLAorCQkJCSAgbmV3X2NsdXN0ZXIuYmluZGlyLAorCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJv bGRhdGEuY2hrcG50X254dG14b2ZmLAorCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hr cG50X254dG11bHRpLAorCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X29sZHN0 TXVsdGksCisJCQkJICBuZXdfY2x1c3Rlci5wZ2RhdGEpOworCQljaGVja19vaygpOworCisJfQor CS8qZWxzZSBpZiAobmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1Rf Rk9STUFUQ0hBTkdFX0NBVF9WRVIpCisJeworCQkqCiAJCSAqIFJlbW92ZSBvZmZzZXRzLzAwMDAg ZmlsZSBjcmVhdGVkIGJ5IGluaXRkYiB0aGF0IG5vIGxvbmdlciBtYXRjaGVzCiAJCSAqIHRoZSBu ZXcgbXVsdGkteGlkIHZhbHVlLiAgIm1lbWJlcnMiIHN0YXJ0cyBhdCB6ZXJvIHNvIG5vIG5lZWQg dG8KIAkJICogcmVtb3ZlIGl0LgotCQkgKi8KKwkJICoKIAkJcmVtb3ZlX25ld19zdWJkaXIoInBn X211bHRpeGFjdC9vZmZzZXRzIiwgZmFsc2UpOwogCiAJCXByZXBfc3RhdHVzKCJTZXR0aW5nIG9s ZGVzdCBtdWx0aXhhY3QgSUQgaW4gbmV3IGNsdXN0ZXIiKTsKLQotCQkvKgorIAkJKgogCQkgKiBX ZSBkb24ndCBwcmVzZXJ2ZSBmaWxlcyBpbiB0aGlzIGNhc2UsIGJ1dCBpdCdzIGltcG9ydGFudCB0 aGF0IHRoZQogCQkgKiBvbGRlc3QgbXVsdGkgaXMgc2V0IHRvIHRoZSBsYXRlc3QgdmFsdWUgdXNl ZCBieSB0aGUgb2xkIHN5c3RlbSwgc28KIAkJICogdGhhdCBtdWx0aXhhY3QuYyByZXR1cm5zIHRo ZSBlbXB0eSBzZXQgZm9yIG11bHRpcyB0aGF0IG1pZ2h0IGJlCiAJCSAqIHByZXNlbnQgb24gZGlz ay4gIFdlIHNldCBuZXh0IG11bHRpIHRvIHRoZSB2YWx1ZSBmb2xsb3dpbmcgdGhhdDsgaXQKIAkJ ICogbWlnaHQgZW5kIHVwIHdyYXBwZWQgYXJvdW5kIChpLmUuIDApIGlmIHRoZSBvbGQgY2x1c3Rl ciBoYWQKIAkJICogbmV4dD1NYXhNdWx0aVhhY3RJZCwgYnV0IG11bHRpeGFjdC5jIGNhbiBjb3Bl IHdpdGggdGhhdCBqdXN0IGZpbmUuCi0JCSAqLworCQkgKgogCQlleGVjX3Byb2coVVRJTElUWV9M T0dfRklMRSwgTlVMTCwgdHJ1ZSwgdHJ1ZSwKIAkJCQkgICJcIiVzL3BnX3Jlc2V0d2FsXCIgLW0g JXUsJXUgXCIlc1wiIiwKIAkJCQkgIG5ld19jbHVzdGVyLmJpbmRpciwKQEAgLTY1Nyw3ICs3MTEs OCBAQCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIAkJCQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xk YXRhLmNoa3BudF9ueHRtdWx0aSwKIAkJCQkgIG5ld19jbHVzdGVyLnBnZGF0YSk7CiAJCWNoZWNr X29rKCk7Ci0JfQorCQkKKwl9Ki8KIAogCS8qIG5vdyByZXNldCB0aGUgd2FsIGFyY2hpdmVzIGlu IHRoZSBuZXcgY2x1c3RlciAqLwogCXByZXBfc3RhdHVzKCJSZXNldHRpbmcgV0FMIGFyY2hpdmVz Iik7CkBAIC02NjksNyArNzI0LDYgQEAgY29weV94YWN0X3hsb2dfeGlkKHZvaWQpCiAJY2hlY2tf b2soKTsKIH0KIAotCiAvKgogICoJc2V0X2Zyb3plbnhpZHMoKQogICoKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBn cmFkZS5oCmluZGV4IDVmMmExMTZmMjNlLi4xOWUxNmVkY2M1NSAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBn cmFkZS5oCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8 YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNp bmNsdWRlIDxzeXMvdGltZS5oPgogCkBAIC0xMTMsNyArMTE0LDE2IEBAIGV4dGVybiBjaGFyICpv dXRwdXRfZmlsZXNbXTsKICAqIHZlcnNpb24gdG8gdGhpcyB2YWx1ZS4gIHBnX3VwZ3JhZGUgYmVo YXZpb3IgZGVwZW5kcyBvbiB3aGV0aGVyIG9sZCBhbmQgbmV3CiAgKiBzZXJ2ZXIgdmVyc2lvbnMg YXJlIGJvdGggbmV3ZXIgdGhhbiB0aGlzLCBvciBvbmx5IHRoZSBuZXcgb25lIGlzLgogICovCi0j ZGVmaW5lIE1VTFRJWEFDVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAyMDEzMDEyMzEKKworLyoKKyAq IHBhZ2UgaGVhZGVyIGZvcm1hdCBjaGFuZ2UKKyAqLworI2RlZmluZSBNVUxUSVhBQ1RfRk9STUFU Q0hBTkdFX0NBVF9WRVIgMjAyMjA5MTQxCisKKy8qIAorICogcGFnZSBoZWFkZXIgZm9ybWF0IGNo YW5nZSAKKyAqLworI2RlZmluZSBDTE9HX0ZPUk1BVENIQU5HRV9DQVRfVkVSIDIwMjIxMDE0MQog CiAvKgogICogbGFyZ2Ugb2JqZWN0IGNodW5rIHNpemUgYWRkZWQgdG8gcGdfY29udHJvbGRhdGEs CkBAIC0xMjIsNyArMTMyLDcgQEAgZXh0ZXJuIGNoYXIgKm91dHB1dF9maWxlc1tdOwogI2RlZmlu ZSBMQVJHRV9PQkpFQ1RfU0laRV9QR19DT05UUk9MX1ZFUiA5NDIKIAogLyoKLSAqIGNoYW5nZSBp biBKU09OQiBmb3JtYXQgZHVyaW5nIDkuNCBiZXRhCisgKiBhZGRpdGlvbiBvZiBwYWdlIGhlYWRl ciAKICAqLwogI2RlZmluZSBKU09OQl9GT1JNQVRfQ0hBTkdFX0NBVF9WRVIgMjAxNDA5MjkxCiAK QEAgLTM3OCw2ICszODgsOSBAQCB2b2lkCQlyZXdyaXRlVmlzaWJpbGl0eU1hcChjb25zdCBjaGFy ICpmcm9tZmlsZSwgY29uc3QgY2hhciAqdG9maWxlLAogdm9pZAkJY2hlY2tfZmlsZV9jbG9uZSh2 b2lkKTsKIHZvaWQJCWNoZWNrX2hhcmRfbGluayh2b2lkKTsKIAorCitpbnQgCWNvcHlfdG9fbmV3 X2Zvcm1hdChjb25zdCBjaGFyICpvbGRfc3ViZGlyLCBjb25zdCBjaGFyICpuZXdfc3ViZGlyLCBp bnQgZWxlbWVudF9zaXplKTsKKwogLyogZm9wZW5fcHJpdigpIGlzIG5vIGxvbmdlciBkaWZmZXJl bnQgZnJvbSBmb3BlbigpICovCiAjZGVmaW5lIGZvcGVuX3ByaXYocGF0aCwgbW9kZSkJZm9wZW4o cGF0aCwgbW9kZSkKIApAQCAtMzg1LDYgKzM5OCw4IEBAIHZvaWQJCWNoZWNrX2hhcmRfbGluayh2 b2lkKTsKIAogdm9pZAkJZ2V0X2xvYWRhYmxlX2xpYnJhcmllcyh2b2lkKTsKIHZvaWQJCWNoZWNr X2xvYWRhYmxlX2xpYnJhcmllcyh2b2lkKTsKK3ZvaWQgCQljbGVhbnVwX2RpcmVudHMoc3RydWN0 IGRpcmVudCAqKiBhbGxfZGlyZW50cywgaW50IHRvdGFsX3JlYWRfZmlsZXMpOworc3RydWN0IGRp cmVudCoqIAlnZXRfc29ydGVkX2hleF9maWxlcyhjaGFyICogZHIsIGludCAqIHNpemUpOwogCiAv KiBpbmZvLmMgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9yZWxwYXRoLmMgYi9zcmMvY29t bW9uL3JlbHBhdGguYwppbmRleCA4N2RlNWY2Yzk2MC4uNDcxNWQwNmQyODcgMTAwNjQ0Ci0tLSBh L3NyYy9jb21tb24vcmVscGF0aC5jCisrKyBiL3NyYy9jb21tb24vcmVscGF0aC5jCkBAIC0yMiw2 ICsyMiwxNiBAQAogI2luY2x1ZGUgImNvbW1vbi9yZWxwYXRoLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9iYWNrZW5kaWQuaCIKIAorLyoKKyAqIFNMUlUgSUQgdG8gcGF0aCBtYXBwaW5nCisgKi8KKyNk ZWZpbmUgUEdfU0xSVShzeW1uYW1lLG5hbWUscGF0aCxzeW5jaHJvbml6ZSkgXAorCXBhdGgsCisK K3N0YXRpYyBjaGFyICpzbHJ1X2RpcnNbXSA9Cit7CisjaW5jbHVkZSAiYWNjZXNzL3NscnVsaXN0 LmgiCit9OwogCiAvKgogICogTG9va3VwIHRhYmxlIG9mIGZvcmsgbmFtZSBieSBmb3JrIG51bWJl ci4KQEAgLTEyOSw3ICsxMzksNyBAQCBHZXREYXRhYmFzZVBhdGgoT2lkIGRiT2lkLCBPaWQgc3Bj T2lkKQogfQogCiAvKgotICogR2V0UmVsYXRpb25QYXRoIC0gY29uc3RydWN0IHBhdGggdG8gYSBy ZWxhdGlvbidzIGZpbGUKKyAqIEdldFNNZ3JGaWxlUGF0aCAtIGNvbnN0cnVjdCBwYXRoIHRvIGEg cmVsYXRpb24ncyBmaWxlCiAgKgogICogUmVzdWx0IGlzIGEgcGFsbG9jJ2Qgc3RyaW5nLgogICoK QEAgLTEzOCwxMiArMTQ4LDI3IEBAIEdldERhdGFiYXNlUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNP aWQpCiAgKiB0aGUgdHJvdWJsZSBjb25zaWRlcmluZyBCYWNrZW5kSWQgaXMganVzdCBpbnQgYW55 d2F5LgogICovCiBjaGFyICoKLUdldFJlbGF0aW9uUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQs IFJlbEZpbGVOdW1iZXIgcmVsTnVtYmVyLAorR2V0U01nckZpbGVQYXRoKE9pZCBkYk9pZCwgT2lk IHNwY09pZCwgUmVsRmlsZU51bWJlciByZWxOdW1iZXIsCiAJCQkJaW50IGJhY2tlbmRJZCwgRm9y a051bWJlciBmb3JrTnVtYmVyKQogewogCWNoYXIJICAgKnBhdGg7CiAKLQlpZiAoc3BjT2lkID09 IEdMT0JBTFRBQkxFU1BBQ0VfT0lEKQorCWlmIChzcGNPaWQgPT0gU0xSVV9TUENfT0lEKQorCXsK KwkJaWYgKGRiT2lkID49IGxlbmd0aG9mKHNscnVfZGlycykgfHwgZm9ya051bWJlciAhPSAwIHx8 IGJhY2tlbmRJZCAhPSBJbnZhbGlkQmFja2VuZElkKQorCQl7CisjaWZuZGVmIEZST05URU5ECisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBTTFJVIGZpbGUgbG9jYXRvciAldS8ldS8l dS8ldS8ldSIsCisJCQkJCQkJc3BjT2lkLCBkYk9pZCwgcmVsTnVtYmVyLCBiYWNrZW5kSWQsIGZv cmtOdW1iZXIpKSk7CisjZWxzZQorCQkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKwkJfQorCQlwYXRo ID0gcHNwcmludGYoIiVzLyUwNFgiLCBzbHJ1X2RpcnNbZGJPaWRdLCByZWxOdW1iZXIpOworCX0K KwllbHNlIGlmIChzcGNPaWQgPT0gR0xPQkFMVEFCTEVTUEFDRV9PSUQpCiAJewogCQkvKiBTaGFy ZWQgc3lzdGVtIHJlbGF0aW9ucyBsaXZlIGluIHtkYXRhZGlyfS9nbG9iYWwgKi8KIAkJQXNzZXJ0 KGRiT2lkID09IDApOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cuaCBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9jbG9nLmgKaW5kZXggZDk5NDQ0ZjA3M2YuLmFhY2YxMGNhNTIyIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvY2xvZy5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9jbG9nLmgKQEAgLTQwLDE4ICs0MCwxMiBAQCBleHRlcm4gdm9pZCBUcmFuc2FjdGlvbklk U2V0VHJlZVN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQkJCQkJCQkJ ICAgVHJhbnNhY3Rpb25JZCAqc3VieGlkcywgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBs c24pOwogZXh0ZXJuIFhpZFN0YXR1cyBUcmFuc2FjdGlvbklkR2V0U3RhdHVzKFRyYW5zYWN0aW9u SWQgeGlkLCBYTG9nUmVjUHRyICpsc24pOwogCi1leHRlcm4gU2l6ZSBDTE9HU2htZW1CdWZmZXJz KHZvaWQpOwotZXh0ZXJuIFNpemUgQ0xPR1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIENM T0dTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBCb290U3RyYXBDTE9HKHZvaWQpOwogZXh0 ZXJuIHZvaWQgU3RhcnR1cENMT0codm9pZCk7CiBleHRlcm4gdm9pZCBUcmltQ0xPRyh2b2lkKTsK LWV4dGVybiB2b2lkIENoZWNrUG9pbnRDTE9HKHZvaWQpOwogZXh0ZXJuIHZvaWQgRXh0ZW5kQ0xP RyhUcmFuc2FjdGlvbklkIG5ld2VzdFhhY3QpOwogZXh0ZXJuIHZvaWQgVHJ1bmNhdGVDTE9HKFRy YW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwgT2lkIG9sZGVzdHhpZF9kYXRvaWQpOwogCi1leHRlcm4g aW50CWNsb2dzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKLQog LyogWExPRyBzdHVmZiAqLwogI2RlZmluZSBDTE9HX1pFUk9QQUdFCQkweDAwCiAjZGVmaW5lIENM T0dfVFJVTkNBVEUJCTB4MTAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9jb21taXRf dHMuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaAppbmRleCA1MDg3Y2RjZTUxZS4u NjA1ZGM3NWIzYjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0X3RzLmgKQEAgLTI3LDcgKzI3LDYgQEAgZXh0 ZXJuIGJvb2wgVHJhbnNhY3Rpb25JZEdldENvbW1pdFRzRGF0YShUcmFuc2FjdGlvbklkIHhpZCwK IGV4dGVybiBUcmFuc2FjdGlvbklkIEdldExhdGVzdENvbW1pdFRzRGF0YShUaW1lc3RhbXBUeiAq dHMsCiAJCQkJCQkJCQkJICAgUmVwT3JpZ2luSWQgKm5vZGVpZCk7CiAKLWV4dGVybiBTaXplIENv bW1pdFRzU2htZW1CdWZmZXJzKHZvaWQpOwogZXh0ZXJuIFNpemUgQ29tbWl0VHNTaG1lbVNpemUo dm9pZCk7CiBleHRlcm4gdm9pZCBDb21taXRUc1NobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lk IEJvb3RTdHJhcENvbW1pdFRzKHZvaWQpOwpAQCAtNDEsOCArNDAsNiBAQCBleHRlcm4gdm9pZCBT ZXRDb21taXRUc0xpbWl0KFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwKIAkJCQkJCQkgVHJhbnNh Y3Rpb25JZCBuZXdlc3RYYWN0KTsKIGV4dGVybiB2b2lkIEFkdmFuY2VPbGRlc3RDb21taXRUc1hp ZChUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QpOwogCi1leHRlcm4gaW50CWNvbW1pdHRzc3luY2Zp bGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCk7Ci0KIC8qIFhMT0cgc3R1ZmYg Ki8KICNkZWZpbmUgQ09NTUlUX1RTX1pFUk9QQUdFCQkweDAwCiAjZGVmaW5lIENPTU1JVF9UU19U UlVOQ0FURQkJMHgxMApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCmluZGV4IDI0NmY3NTdmNmFiLi41ODQ4 ZTQwNzJiYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaApAQCAtMTE4LDkgKzExOCw2IEBAIGV4dGVy biBib29sIE11bHRpWGFjdElkUHJlY2VkZXMoTXVsdGlYYWN0SWQgbXVsdGkxLCBNdWx0aVhhY3RJ ZCBtdWx0aTIpOwogZXh0ZXJuIGJvb2wgTXVsdGlYYWN0SWRQcmVjZWRlc09yRXF1YWxzKE11bHRp WGFjdElkIG11bHRpMSwKIAkJCQkJCQkJCQlNdWx0aVhhY3RJZCBtdWx0aTIpOwogCi1leHRlcm4g aW50CW11bHRpeGFjdG9mZnNldHNzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFy ICpwYXRoKTsKLWV4dGVybiBpbnQJbXVsdGl4YWN0bWVtYmVyc3N5bmNmaWxldGFnKGNvbnN0IEZp bGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpOwotCiBleHRlcm4gdm9pZCBBdEVPWGFjdF9NdWx0aVhh Y3Qodm9pZCk7CiBleHRlcm4gdm9pZCBBdFByZXBhcmVfTXVsdGlYYWN0KHZvaWQpOwogZXh0ZXJu IHZvaWQgUG9zdFByZXBhcmVfTXVsdGlYYWN0KFRyYW5zYWN0aW9uSWQgeGlkKTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5o CmluZGV4IGE4YTQyNGQ5MmRhLi40YjNlMmU0YTM0ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL3NscnUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCkBAIC0xLDcgKzEs NyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogc2xydS5oCi0gKgkJU2ltcGxlIExSVSBi dWZmZXJpbmcgZm9yIHRyYW5zYWN0aW9uIHN0YXR1cyBsb2dmaWxlcworICoJCUJ1ZmZlcmluZyBm b3IgdHJhbnNhY3Rpb24gc3RhdHVzIGxvZ2ZpbGVzCiAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYQpAQCAtMTQsOSArMTQsMzYgQEAKICNkZWZpbmUgU0xSVV9ICiAKICNpbmNsdWRl ICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RhYmxlc3BhY2VfZC5o IgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgog I2luY2x1ZGUgInN0b3JhZ2Uvc3luYy5oIgogCisvKiBQc2V1ZG8gZGF0YWJhc2UgSUQgdXNlZCBm b3IgU0xSVSBkYXRhLiAqLworI2RlZmluZSBTTFJVX1NQQ19JRCA5CisKKy8qIFBzZXVkbyBkYXRh YmFzZSBJRHMgdXNlZCBieSBlYWNoIGNhY2hlLiAqLworI2RlZmluZSBQR19TTFJVKHN5bW5hbWUs bmFtZSxwYXRoLCBzeW5jaHJvbml6ZSkgXAorCXN5bW5hbWUsCisKK3R5cGVkZWYgZW51bSBTbHJ1 SWRzCit7CisjaW5jbHVkZSAiYWNjZXNzL3NscnVsaXN0LmgiCisJU0xSVV9ORVhUX0lECit9CQkJ U2xydUlkczsKKyN1bmRlZiBQR19TTFJVCisKK3R5cGVkZWYgYm9vbCAoKlNscnVQYWdlUHJlY2Vk ZXNGdW5jdGlvbikgKGludCwgaW50KTsKKworc3RhdGljIGlubGluZSBSZWxGaWxlTG9jYXRvcgor U2xydVJlbEZpbGVMb2NhdG9yKHVpbnQzMiBzbHJ1X2RiX2lkLCB1aW50MzIgc2VnbWVudF9pZCkK K3sKKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvciA9IHtTTFJVX1NQQ19JRCwgc2xydV9kYl9pZCwg c2VnbWVudF9pZH07CisJcmV0dXJuIHJsb2NhdG9yOworfQorCiAKIC8qCiAgKiBEZWZpbmUgU0xS VSBzZWdtZW50IHNpemUuICBBIHBhZ2UgaXMgdGhlIHNhbWUgQkxDS1NaIGFzIGlzIHVzZWQgZXZl cnl3aGVyZQpAQCAtMzMsMTQyICs2MCw0MCBAQAogICovCiAjZGVmaW5lIFNMUlVfUEFHRVNfUEVS X1NFR01FTlQJMzIKIAotLyoKLSAqIFBhZ2Ugc3RhdHVzIGNvZGVzLiAgTm90ZSB0aGF0IHRoZXNl IGRvIG5vdCBpbmNsdWRlIHRoZSAiZGlydHkiIGJpdC4KLSAqIHBhZ2VfZGlydHkgY2FuIGJlIHRy dWUgb25seSBpbiB0aGUgVkFMSUQgb3IgV1JJVEVfSU5fUFJPR1JFU1Mgc3RhdGVzOwotICogaW4g dGhlIGxhdHRlciBjYXNlIGl0IGltcGxpZXMgdGhhdCB0aGUgcGFnZSBoYXMgYmVlbiByZS1kaXJ0 aWVkIHNpbmNlCi0gKiB0aGUgd3JpdGUgc3RhcnRlZC4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0J U0xSVV9QQUdFX0VNUFRZLAkJCS8qIGJ1ZmZlciBpcyBub3QgaW4gdXNlICovCi0JU0xSVV9QQUdF X1JFQURfSU5fUFJPR1JFU1MsIC8qIHBhZ2UgaXMgYmVpbmcgcmVhZCBpbiAqLwotCVNMUlVfUEFH RV9WQUxJRCwJCQkvKiBwYWdlIGlzIHZhbGlkIGFuZCBub3QgYmVpbmcgd3JpdHRlbiAqLwotCVNM UlVfUEFHRV9XUklURV9JTl9QUk9HUkVTUyAvKiBwYWdlIGlzIGJlaW5nIHdyaXR0ZW4gb3V0ICov Ci19IFNscnVQYWdlU3RhdHVzOwotCi0vKgotICogU2hhcmVkLW1lbW9yeSBzdGF0ZQotICovCi10 eXBlZGVmIHN0cnVjdCBTbHJ1U2hhcmVkRGF0YQotewotCUxXTG9jawkgICAqQ29udHJvbExvY2s7 Ci0KLQkvKiBOdW1iZXIgb2YgYnVmZmVycyBtYW5hZ2VkIGJ5IHRoaXMgU0xSVSBzdHJ1Y3R1cmUg Ki8KLQlpbnQJCQludW1fc2xvdHM7Ci0KLQkvKgotCSAqIEFycmF5cyBob2xkaW5nIGluZm8gZm9y IGVhY2ggYnVmZmVyIHNsb3QuICBQYWdlIG51bWJlciBpcyB1bmRlZmluZWQKLQkgKiB3aGVuIHN0 YXR1cyBpcyBFTVBUWSwgYXMgaXMgcGFnZV9scnVfY291bnQuCi0JICovCi0JY2hhcgkgICoqcGFn ZV9idWZmZXI7Ci0JU2xydVBhZ2VTdGF0dXMgKnBhZ2Vfc3RhdHVzOwotCWJvb2wJICAgKnBhZ2Vf ZGlydHk7Ci0JaW50CQkgICAqcGFnZV9udW1iZXI7Ci0JaW50CQkgICAqcGFnZV9scnVfY291bnQ7 Ci0JTFdMb2NrUGFkZGVkICpidWZmZXJfbG9ja3M7Ci0KLQkvKgotCSAqIE9wdGlvbmFsIGFycmF5 IG9mIFdBTCBmbHVzaCBMU05zIGFzc29jaWF0ZWQgd2l0aCBlbnRyaWVzIGluIHRoZSBTTFJVCi0J ICogcGFnZXMuICBJZiBub3QgemVyby9OVUxMLCB3ZSBtdXN0IGZsdXNoIFdBTCBiZWZvcmUgd3Jp dGluZyBwYWdlcyAodHJ1ZQotCSAqIGZvciBwZ194YWN0LCBmYWxzZSBmb3IgbXVsdGl4YWN0LCBw Z19zdWJ0cmFucywgcGdfbm90aWZ5KS4gIGdyb3VwX2xzbltdCi0JICogaGFzIGxzbl9ncm91cHNf cGVyX3BhZ2UgZW50cmllcyBwZXIgYnVmZmVyIHNsb3QsIGVhY2ggY29udGFpbmluZyB0aGUKLQkg KiBoaWdoZXN0IExTTiBrbm93biBmb3IgYSBjb250aWd1b3VzIGdyb3VwIG9mIFNMUlUgZW50cmll cyBvbiB0aGF0IHNsb3QncwotCSAqIHBhZ2UuCi0JICovCi0JWExvZ1JlY1B0ciAqZ3JvdXBfbHNu OwotCWludAkJCWxzbl9ncm91cHNfcGVyX3BhZ2U7Ci0KLQkvKi0tLS0tLS0tLS0KLQkgKiBXZSBt YXJrIGEgcGFnZSAibW9zdCByZWNlbnRseSB1c2VkIiBieSBzZXR0aW5nCi0JICoJCXBhZ2VfbHJ1 X2NvdW50W3Nsb3Rub10gPSArK2N1cl9scnVfY291bnQ7Ci0JICogVGhlIG9sZGVzdCBwYWdlIGlz IHRoZXJlZm9yZSB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QgdmFsdWUgb2YKLQkgKgkJY3VyX2xy dV9jb3VudCAtIHBhZ2VfbHJ1X2NvdW50W3Nsb3Rub10KLQkgKiBUaGUgY291bnRzIHdpbGwgZXZl bnR1YWxseSB3cmFwIGFyb3VuZCwgYnV0IHRoaXMgY2FsY3VsYXRpb24gc3RpbGwKLQkgKiB3b3Jr cyBhcyBsb25nIGFzIG5vIHBhZ2UncyBhZ2UgZXhjZWVkcyBJTlRfTUFYIGNvdW50cy4KLQkgKi0t LS0tLS0tLS0KLQkgKi8KLQlpbnQJCQljdXJfbHJ1X2NvdW50OwotCi0JLyoKLQkgKiBsYXRlc3Rf cGFnZV9udW1iZXIgaXMgdGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSBjdXJyZW50IGVuZCBvZiB0aGUg bG9nOwotCSAqIHRoaXMgaXMgbm90IGNyaXRpY2FsIGRhdGEsIHNpbmNlIHdlIHVzZSBpdCBvbmx5 IHRvIGF2b2lkIHN3YXBwaW5nIG91dAotCSAqIHRoZSBsYXRlc3QgcGFnZS4KLQkgKi8KLQlpbnQJ CQlsYXRlc3RfcGFnZV9udW1iZXI7Ci0KLQkvKiBTTFJVJ3MgaW5kZXggZm9yIHN0YXRpc3RpY3Mg cHVycG9zZXMgKG1pZ2h0IG5vdCBiZSB1bmlxdWUpICovCi0JaW50CQkJc2xydV9zdGF0c19pZHg7 Ci19IFNscnVTaGFyZWREYXRhOwotCi10eXBlZGVmIFNscnVTaGFyZWREYXRhICpTbHJ1U2hhcmVk OwotCi0vKgotICogU2xydUN0bERhdGEgaXMgYW4gdW5zaGFyZWQgc3RydWN0dXJlIHRoYXQgcG9p bnRzIHRvIHRoZSBhY3RpdmUgaW5mb3JtYXRpb24KLSAqIGluIHNoYXJlZCBtZW1vcnkuCi0gKi8K LXR5cGVkZWYgc3RydWN0IFNscnVDdGxEYXRhCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQ7Ci0KLQkv KgotCSAqIFdoaWNoIHN5bmMgaGFuZGxlciBmdW5jdGlvbiB0byB1c2Ugd2hlbiBoYW5kaW5nIHN5 bmMgcmVxdWVzdHMgb3ZlciB0bwotCSAqIHRoZSBjaGVja3BvaW50ZXIuICBTWU5DX0hBTkRMRVJf Tk9ORSB0byBkaXNhYmxlIGZzeW5jIChlZyBwZ19ub3RpZnkpLgotCSAqLwotCVN5bmNSZXF1ZXN0 SGFuZGxlciBzeW5jX2hhbmRsZXI7Ci0KLQkvKgotCSAqIERlY2lkZSB3aGV0aGVyIGEgcGFnZSBp cyAib2xkZXIiIGZvciB0cnVuY2F0aW9uIGFuZCBhcyBhIGhpbnQgZm9yCi0JICogZXZpY3Rpbmcg cGFnZXMgaW4gTFJVIG9yZGVyLiAgUmV0dXJuIHRydWUgaWYgZXZlcnkgZW50cnkgb2YgdGhlIGZp cnN0Ci0JICogYXJndW1lbnQgaXMgb2xkZXIgdGhhbiBldmVyeSBlbnRyeSBvZiB0aGUgc2Vjb25k IGFyZ3VtZW50LiAgTm90ZSB0aGF0Ci0JICogIVBhZ2VQcmVjZWRlcyhhLGIpICYmICFQYWdlUHJl Y2VkZXMoYixhKSBuZWVkIG5vdCBpbXBseSBhPT1iOyBpdCBhbHNvCi0JICogYXJpc2VzIHdoZW4g c29tZSBlbnRyaWVzIGFyZSBvbGRlciBhbmQgc29tZSBhcmUgbm90LiAgRm9yIFNMUlVzIHVzaW5n Ci0JICogU2ltcGxlTHJ1VHJ1bmNhdGUoKSwgdGhpcyBtdXN0IHVzZSBtb2R1bGFyIGFyaXRobWV0 aWMuICAoRm9yIG90aGVycywKLQkgKiB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjYWxsYmFjayBoYXMg bm8gZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMuKSAgVXNlCi0JICogU2xydVBhZ2VQcmVjZWRlc1Vu aXRUZXN0cygpIGluIFNMUlVzIG1lZXRpbmcgaXRzIGNyaXRlcmlhLgotCSAqLwotCWJvb2wJCSgq UGFnZVByZWNlZGVzKSAoaW50LCBpbnQpOwotCi0JLyoKLQkgKiBEaXIgaXMgc2V0IGR1cmluZyBT aW1wbGVMcnVJbml0IGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlcmVhZnRlci4gU2luY2UKLQkgKiBp dCdzIGFsd2F5cyB0aGUgc2FtZSwgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGluIHNoYXJlZCBtZW1v cnkuCi0JICovCi0JY2hhcgkJRGlyWzY0XTsKLX0gU2xydUN0bERhdGE7Ci0KLXR5cGVkZWYgU2xy dUN0bERhdGEgKlNscnVDdGw7Ci0KLQotZXh0ZXJuIFNpemUgU2ltcGxlTHJ1U2htZW1TaXplKGlu dCBuc2xvdHMsIGludCBubHNucyk7Ci1leHRlcm4gdm9pZCBTaW1wbGVMcnVJbml0KFNscnVDdGwg Y3RsLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnNsb3RzLCBpbnQgbmxzbnMsCi0JCQkJCQkgIExX TG9jayAqY3RsbG9jaywgY29uc3QgY2hhciAqc3ViZGlyLCBpbnQgdHJhbmNoZV9pZCwKLQkJCQkJ CSAgU3luY1JlcXVlc3RIYW5kbGVyIHN5bmNfaGFuZGxlcik7Ci1leHRlcm4gaW50CVNpbXBsZUxy dVplcm9QYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vKTsKLWV4dGVybiBpbnQJU2ltcGxlTHJ1 UmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIGJvb2wgd3JpdGVfb2ssCi0JCQkJCQkJ ICBUcmFuc2FjdGlvbklkIHhpZCk7Ci1leHRlcm4gaW50CVNpbXBsZUxydVJlYWRQYWdlX1JlYWRP bmx5KFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLAotCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCB4 aWQpOwotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1V3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgc2xv dG5vKTsKLWV4dGVybiB2b2lkIFNpbXBsZUxydVdyaXRlQWxsKFNscnVDdGwgY3RsLCBib29sIGFs bG93X3JlZGlydGllZCk7CiAjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwotZXh0ZXJuIHZvaWQg U2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlKTsKK2V4 dGVybiB2b2lkIFNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU2xydVBhZ2VQcmVjZWRlc0Z1bmN0 aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJCSAgaW50IHBlcl9wYWdlKTsKICNlbHNlCiAjZGVm aW5lIFNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoY3RsLCBwZXJfcGFnZSkgZG8ge30gd2hpbGUg KDApCiAjZW5kaWYKLWV4dGVybiB2b2lkIFNpbXBsZUxydVRydW5jYXRlKFNscnVDdGwgY3RsLCBp bnQgY3V0b2ZmUGFnZSk7Ci1leHRlcm4gYm9vbCBTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhp c3QoU2xydUN0bCBjdGwsIGludCBwYWdlbm8pOworZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1VHJ1bmNh dGUoaW50IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJ CQkJCQkJICBpbnQgY3V0b2ZmUGFnZSk7CitleHRlcm4gYm9vbCBTaW1wbGVMcnVEb2VzUGh5c2lj YWxQYWdlRXhpc3QoaW50IHNscnVfaWQsIGludCBwYWdlbm8pOwogCi10eXBlZGVmIGJvb2wgKCpT bHJ1U2NhbkNhbGxiYWNrKSAoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFn ZSwKK3R5cGVkZWYgYm9vbCAoKlNscnVTY2FuQ2FsbGJhY2spIChpbnQgc2xydV9pZCwKKwkJCQkJ CQkJICBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJCQkgIGNo YXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwKIAkJCQkJCQkJICB2b2lkICpkYXRhKTsKLWV4dGVy biBib29sIFNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNh bGxiYWNrLCB2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIFNscnVEZWxldGVTZWdtZW50KFNscnVD dGwgY3RsLCBpbnQgc2Vnbm8pOwotCi1leHRlcm4gaW50CVNscnVTeW5jRmlsZVRhZyhTbHJ1Q3Rs IGN0bCwgY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCk7CitleHRlcm4gYm9vbCBTbHJ1 U2NhbkRpcmVjdG9yeShpbnQgc2xydV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQ cmVjZWRlcywKKwkJCQkJCQkgIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEp OworZXh0ZXJuIHZvaWQgU2xydURlbGV0ZVNlZ21lbnQoaW50IHNscnVfaWQsIGludCBzZWdubyk7 CiAKIC8qIFNscnVTY2FuRGlyZWN0b3J5IHB1YmxpYyBjYWxsYmFja3MgKi8KLWV4dGVybiBib29s IFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUs CitleHRlcm4gYm9vbCBTbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoaW50IHNscnVfaWQsCisJ CQkJCQkJCQkJU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJ CQljaGFyICpmaWxlbmFtZSwKIAkJCQkJCQkJCQlpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSk7Ci1l eHRlcm4gYm9vbCBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsKFNscnVDdGwgY3RsLCBjaGFyICpmaWxl bmFtZSwgaW50IHNlZ3BhZ2UsCitleHRlcm4gYm9vbCBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsKGlu dCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJ CQkgICBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsCiAJCQkJCQkJCSAgIHZvaWQgKmRhdGEp OwogCisvKiBCdWZmZXIgYWNjZXNzICovCitleHRlcm4gQnVmZmVyIFJlYWRTbHJ1QnVmZmVyKGlu dCBzbHJ1X2lkLCBpbnQgcGFnZW5vLCBSZWFkQnVmZmVyTW9kZSBtb2RlKTsKK2V4dGVybiBCdWZm ZXIgWmVyb1NscnVCdWZmZXIoaW50IHNscnVfaWQsIGludCBwYWdlbm8pOworZXh0ZXJuIGJvb2wg UHJvYmVTbHJ1QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKTsKKworLyogSW50ZXJmYWNl cyB1c2UgYnkgc3RhdHMgdmlldyAqLworZXh0ZXJuIE9pZCBTbHJ1UmVsSWRCeU5hbWUoY29uc3Qg Y2hhciAqbmFtZSk7CitleHRlcm4gY29uc3QgY2hhciAqU2xydU5hbWUoaW50IHNscnVfaWQpOwor CiAjZW5kaWYJCQkJCQkJLyogU0xSVV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3Mvc2xydWRlZnMuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1ZGVmcy5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40OWNkNzhkOTIzZAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1ZGVmcy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHNscnVkZWZzLmgKKyAqCQltYWNyb3MgZm9yIGFjY2Vzc2lu ZyBjb250ZW50cyBvZiAic2xydSIgcGFnZXMgCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAy MS0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9p bmNsdWRlL2FjY2Vzcy9zbHJ1ZGVmcy5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK KyNkZWZpbmUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCAzMgorCisjZGVmaW5lIE1VTFRJWEFDVF9N RU1CRVJfRU5UUllfU0laRSAyMCAKKworI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUX0VOVFJZX1NJ WkUgOAorCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWxpc3QuaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9zbHJ1bGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5jMTI4OWExMzI2YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9zbHJ1bGlzdC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBz bHJ1bGlzdC5oCisgKgorICogVGhlIFNMUlUgbGlzdCBpcyBrZXB0IGluIGl0cyBvd24gc291cmNl IGZpbGUgZm9yIHBvc3NpYmxlCisgKiB1c2UgYnkgYXV0b21hdGljIHRvb2xzLiAgVGhlIGV4YWN0 IHJlcHJlc2VudGF0aW9uIG9mIGEgcm1nciBpcyBkZXRlcm1pbmVkCisgKiBieSB0aGUgUEdfU0xS VSBtYWNybywgd2hpY2ggaXMgbm90IGRlZmluZWQgaW4gdGhpcyBmaWxlOyBpdCBjYW4gYmUKKyAq IGRlZmluZWQgYnkgdGhlIGNhbGxlciBmb3Igc3BlY2lhbCBwdXJwb3Nlcy4KKyAqCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVs aXN0LmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogdGhlcmUgaXMgZGVsaWJlcmF0 ZWx5IG5vdCBhbiAjaWZuZGVmIFNMUlVMSVNUX0ggaGVyZSAqLworCisvKgorICogTGlzdCBvZiBT TFJVIGVudHJpZXMuICBOb3RlIHRoYXQgb3JkZXIgb2YgZW50cmllcyBkZWZpbmVzIHRoZQorICog bnVtZXJpY2FsIHZhbHVlcyBvZiBlYWNoIFNMUlUncyBJRCwgd2hpY2ggaXMgdXNlZCBpbiBpbi1t ZW1vcnkgc3RydWN0dXMuCisgKi8KKworLyogc3ltYm9sIG5hbWUsIHRleHR1YWwgbmFtZSwgcGF0 aCwgc3luY2hyb25pemUgKi8KK1BHX1NMUlUoU0xSVV9DTE9HX0lELCAiWGFjdCIsICJwZ194YWN0 IiwgdHJ1ZSkKK1BHX1NMUlUoU0xSVV9TVUJUUkFOU19JRCwgIlN1YnRyYW5zIiwgInBnX3N1YnRy YW5zIiwgZmFsc2UpCitQR19TTFJVKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgIk11bHRpWGFj dE9mZnNldCIsICJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsIHRydWUpCitQR19TTFJVKFNMUlVfTVVM VElYQUNUX01FTUJFUl9JRCwgIk11bHRpWGFjdE1lbWJlciIsICJwZ19tdWx0aXhhY3QvbWVtYmVy cyIsIHRydWUpCitQR19TTFJVKFNMUlVfQ09NTUlUX1RTX0lELCAiQ29tbWl0VHMiLCAicGdfY29t bWl0X3RzIiwgdHJ1ZSkKK1BHX1NMUlUoU0xSVV9TRVJJQUxfSUQsICJTZXJpYWwiLCAicGdfc2Vy aWFsIiwgZmFsc2UpCitQR19TTFJVKFNMUlVfTk9USUZZX0lELCAiTm90aWZ5IiwgInBnX25vdGlm eSIsIGZhbHNlKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3N1YnRyYW5zLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaAppbmRleCA0NmE0NzNjNzdmNS4uMTRlM2JmNzIw ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zdWJ0cmFucy5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9zdWJ0cmFucy5oCkBAIC0xOCwxMSArMTgsOCBAQCBleHRlcm4gdm9pZCBT dWJUcmFuc1NldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCwgVHJhbnNhY3Rpb25JZCBwYXJlbnQp OwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgU3ViVHJhbnNHZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4 aWQpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgU3ViVHJhbnNHZXRUb3Btb3N0VHJhbnNhY3Rpb24o VHJhbnNhY3Rpb25JZCB4aWQpOwogCi1leHRlcm4gU2l6ZSBTVUJUUkFOU1NobWVtU2l6ZSh2b2lk KTsKLWV4dGVybiB2b2lkIFNVQlRSQU5TU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9v dFN0cmFwU1VCVFJBTlModm9pZCk7CiBleHRlcm4gdm9pZCBTdGFydHVwU1VCVFJBTlMoVHJhbnNh Y3Rpb25JZCBvbGRlc3RBY3RpdmVYSUQpOwotZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludFNVQlRSQU5T KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXh0ZW5kU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBuZXdlc3RY YWN0KTsKIGV4dGVybiB2b2lkIFRydW5jYXRlU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RY YWN0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9zdG9yYWdlLmggYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3N0b3JhZ2UuaAppbmRleCA0NWEzYzc4MzVjYi4uYzk2ZjQ0ODIyNWIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvc3RvcmFnZS5oCisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvc3RvcmFnZS5oCkBAIC0yMiwxOSArMjIsMjAgQEAKIC8qIEdVQyB2YXJpYWJs ZXMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgd2FsX3NraXBfdGhyZXNob2xkOwogCi1leHRl cm4gU01nclJlbGF0aW9uIFJlbGF0aW9uQ3JlYXRlU3RvcmFnZShSZWxGaWxlTG9jYXRvciBybG9j YXRvciwKLQkJCQkJCQkJCQkgIGNoYXIgcmVscGVyc2lzdGVuY2UsCi0JCQkJCQkJCQkJICBib29s IHJlZ2lzdGVyX2RlbGV0ZSk7CitleHRlcm4gU01nckZpbGVIYW5kbGUgUmVsYXRpb25DcmVhdGVT dG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLAorCQkJCQkJCQkJCQljaGFyIHJlbHBlcnNp c3RlbmNlLAorCQkJCQkJCQkJCQlib29sIHJlZ2lzdGVyX2RlbGV0ZSk7CiBleHRlcm4gdm9pZCBS ZWxhdGlvbkRyb3BTdG9yYWdlKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBSZWxhdGlvblBy ZXNlcnZlU3RvcmFnZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgYm9vbCBhdENvbW1pdCk7CiBl eHRlcm4gdm9pZCBSZWxhdGlvblByZVRydW5jYXRlKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9p ZCBSZWxhdGlvblRydW5jYXRlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci1l eHRlcm4gdm9pZCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JSZWxhdGlvbiBzcmMsIFNNZ3JSZWxh dGlvbiBkc3QsCi0JCQkJCQkJCUZvcmtOdW1iZXIgZm9ya051bSwgY2hhciByZWxwZXJzaXN0ZW5j ZSk7CitleHRlcm4gdm9pZCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JGaWxlSGFuZGxlIHNyYywg U01nckZpbGVIYW5kbGUgZHN0LAorCQkJCQkJCQljaGFyIHJlbHBlcnNpc3RlbmNlKTsKIGV4dGVy biBib29sIFJlbEZpbGVMb2NhdG9yU2tpcHBpbmdXQUwoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3Ip OwogZXh0ZXJuIFNpemUgRXN0aW1hdGVQZW5kaW5nU3luY3NTcGFjZSh2b2lkKTsKIGV4dGVybiB2 b2lkIFNlcmlhbGl6ZVBlbmRpbmdTeW5jcyhTaXplIG1heFNpemUsIGNoYXIgKnN0YXJ0QWRkcmVz cyk7CiBleHRlcm4gdm9pZCBSZXN0b3JlUGVuZGluZ1N5bmNzKGNoYXIgKnN0YXJ0QWRkcmVzcyk7 CitleHRlcm4gdm9pZCBEcm9wUmVsYXRpb25GaWxlcyhSZWxGaWxlTG9jYXRvciAqZGVscmVscywg aW50IG5kZWxyZWxzLCBib29sIGlzUmVkbyk7CiAKIC8qCiAgKiBUaGVzZSBmdW5jdGlvbnMgdXNl ZCB0byBiZSBpbiBzdG9yYWdlL3NtZ3Ivc21nci5jLCB3aGljaCBleHBsYWlucyB0aGUKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9yZWxwYXRoLmggYi9zcmMvaW5jbHVkZS9jb21tb24v cmVscGF0aC5oCmluZGV4IDUxMWMyMTY4MmVjLi43ZjEzMjg2NDU5MiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvY29tbW9uL3JlbHBhdGguaAorKysgYi9zcmMvaW5jbHVkZS9jb21tb24vcmVscGF0 aC5oCkBAIC02Myw2ICs2Myw5IEBAIHR5cGVkZWYgZW51bSBGb3JrTnVtYmVyCiAKICNkZWZpbmUg Rk9SS05BTUVDSEFSUwk0CQkvKiBtYXggY2hhcnMgZm9yIGEgZm9yayBuYW1lICovCiAKKy8qIFBz ZXVkbyB0YWJsZXNwYWNlIElEIHVzZWQgZm9yIFNMUlVzLiAqLworI2RlZmluZSBTTFJVX1NQQ19P SUQgOQorCiBleHRlcm4gUEdETExJTVBPUlQgY29uc3QgY2hhciAqY29uc3QgZm9ya05hbWVzW107 CiAKIGV4dGVybiBGb3JrTnVtYmVyIGZvcmtuYW1lX3RvX251bWJlcihjb25zdCBjaGFyICpmb3Jr TmFtZSk7CkBAIC03MywyNSArNzYsMjUgQEAgZXh0ZXJuIGludAlmb3JrbmFtZV9jaGFycyhjb25z dCBjaGFyICpzdHIsIEZvcmtOdW1iZXIgKmZvcmspOwogICovCiBleHRlcm4gY2hhciAqR2V0RGF0 YWJhc2VQYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCk7CiAKLWV4dGVybiBjaGFyICpHZXRSZWxh dGlvblBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lkLCBSZWxGaWxlTnVtYmVyIHJlbE51bWJlciwK K2V4dGVybiBjaGFyICpHZXRTTWdyRmlsZVBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lkLCBSZWxG aWxlTnVtYmVyIHJlbE51bWJlciwKIAkJCQkJCQkgaW50IGJhY2tlbmRJZCwgRm9ya051bWJlciBm b3JrTnVtYmVyKTsKIAogLyoKICAqIFdyYXBwZXIgbWFjcm9zIGZvciBHZXRSZWxhdGlvblBhdGgu ICBCZXdhcmUgb2YgbXVsdGlwbGUKLSAqIGV2YWx1YXRpb24gb2YgdGhlIFJlbEZpbGVMb2NhdG9y IG9yIFJlbEZpbGVMb2NhdG9yQmFja2VuZCBhcmd1bWVudCEKKyAqIGV2YWx1YXRpb24gb2YgdGhl IFJlbEZpbGVMb2NhdG9yIG9yIFNNZ3JGaWxlTG9jYXRvciBhcmd1bWVudCEKICAqLwogCiAvKiBG aXJzdCBhcmd1bWVudCBpcyBhIFJlbEZpbGVMb2NhdG9yICovCiAjZGVmaW5lIHJlbHBhdGhiYWNr ZW5kKHJsb2NhdG9yLCBiYWNrZW5kLCBmb3JrbnVtKSBcCi0JR2V0UmVsYXRpb25QYXRoKChybG9j YXRvcikuZGJPaWQsIChybG9jYXRvcikuc3BjT2lkLCAocmxvY2F0b3IpLnJlbE51bWJlciwgXAor CUdldFNNZ3JGaWxlUGF0aCgocmxvY2F0b3IpLmRiT2lkLCAocmxvY2F0b3IpLnNwY09pZCwgKHJs b2NhdG9yKS5yZWxOdW1iZXIsIFwKIAkJCQkJYmFja2VuZCwgZm9ya251bSkKIAogLyogRmlyc3Qg YXJndW1lbnQgaXMgYSBSZWxGaWxlTG9jYXRvciAqLwogI2RlZmluZSByZWxwYXRocGVybShybG9j YXRvciwgZm9ya251bSkgXAogCXJlbHBhdGhiYWNrZW5kKHJsb2NhdG9yLCBJbnZhbGlkQmFja2Vu ZElkLCBmb3JrbnVtKQogCi0vKiBGaXJzdCBhcmd1bWVudCBpcyBhIFJlbEZpbGVMb2NhdG9yQmFj a2VuZCAqLwotI2RlZmluZSByZWxwYXRoKHJsb2NhdG9yLCBmb3JrbnVtKSBcCi0JcmVscGF0aGJh Y2tlbmQoKHJsb2NhdG9yKS5sb2NhdG9yLCAocmxvY2F0b3IpLmJhY2tlbmQsIGZvcmtudW0pCisv KiBGaXJzdCBhcmd1bWVudCBpcyBhIFNNZ3JGaWxlTG9jYXRvciAqLworI2RlZmluZSBzbWdyZmls ZXBhdGgoc2xvY2F0b3IpIFwKKwlHZXRTTWdyRmlsZVBhdGgoKHNsb2NhdG9yKS5sb2NhdG9yLmRi T2lkLCAoc2xvY2F0b3IpLmxvY2F0b3Iuc3BjT2lkLCAoc2xvY2F0b3IpLmxvY2F0b3IucmVsTnVt YmVyLCAoc2xvY2F0b3IpLmJhY2tlbmQsIChzbG9jYXRvcikuZm9ya251bSkKIAogI2VuZGlmCQkJ CQkJCS8qIFJFTFBBVEhfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZf aW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaAppbmRleCBl ZDhhYTI1MTljMC4uMmM4Y2Y4NTYyMjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5o CkBAIC0yODEsNiArMjgxLDExIEBAIHR5cGVkZWYgdW5pb24gQnVmZmVyRGVzY1BhZGRlZAogCWNo YXIJCXBhZFtCVUZGRVJERVNDX1BBRF9UT19TSVpFXTsKIH0gQnVmZmVyRGVzY1BhZGRlZDsKIAor I2RlZmluZSBCdWZmZXJHZXRFeHRlcm5hbExTTihidWZIZHIpIFwKKwlCdWZmZXJFeHRlcm5hbExT TnNbKGJ1ZkhkciktPmJ1Zl9pZF0KKyNkZWZpbmUgQnVmZmVyU2V0RXh0ZXJuYWxMU04oYnVmSGRy LCBsc24pIFwKKwlCdWZmZXJFeHRlcm5hbExTTnNbKGJ1ZkhkciktPmJ1Zl9pZF0gPSAobHNuKQor CiAvKgogICogVGhlIFBlbmRpbmdXcml0ZWJhY2sgJiBXcml0ZWJhY2tDb250ZXh0IHN0cnVjdHVy ZSBhcmUgdXNlZCB0byBrZWVwCiAgKiBpbmZvcm1hdGlvbiBhYm91dCBwZW5kaW5nIGZsdXNoIHJl cXVlc3RzIHRvIGJlIGlzc3VlZCB0byB0aGUgT1MuCkBAIC0zMDcsNiArMzEyLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgV3JpdGViYWNrQ29udGV4dAogLyogaW4gYnVmX2luaXQuYyAqLwogZXh0ZXJuIFBH RExMSU1QT1JUIEJ1ZmZlckRlc2NQYWRkZWQgKkJ1ZmZlckRlc2NyaXB0b3JzOwogZXh0ZXJuIFBH RExMSU1QT1JUIENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkICpCdWZmZXJJT0NWQXJy YXk7CitleHRlcm4gUEdETExJTVBPUlQgWExvZ1JlY1B0ciAqQnVmZmVyRXh0ZXJuYWxMU05zOwog ZXh0ZXJuIFBHRExMSU1QT1JUIFdyaXRlYmFja0NvbnRleHQgQmFja2VuZFdyaXRlYmFja0NvbnRl eHQ7CiAKIC8qIGluIGxvY2FsYnVmLmMgKi8KQEAgLTQxMywxMCArNDE5LDkgQEAgZXh0ZXJuIGlu dAlCdWZUYWJsZUluc2VydChCdWZmZXJUYWcgKnRhZ1B0ciwgdWludDMyIGhhc2hjb2RlLCBpbnQg YnVmX2lkKTsKIGV4dGVybiB2b2lkIEJ1ZlRhYmxlRGVsZXRlKEJ1ZmZlclRhZyAqdGFnUHRyLCB1 aW50MzIgaGFzaGNvZGUpOwogCiAvKiBsb2NhbGJ1Zi5jICovCi1leHRlcm4gUHJlZmV0Y2hCdWZm ZXJSZXN1bHQgUHJlZmV0Y2hMb2NhbEJ1ZmZlcihTTWdyUmVsYXRpb24gc21nciwKLQkJCQkJCQkJ CQkJCUZvcmtOdW1iZXIgZm9ya051bSwKK2V4dGVybiBQcmVmZXRjaEJ1ZmZlclJlc3VsdCBQcmVm ZXRjaExvY2FsQnVmZmVyKFNNZ3JGaWxlSGFuZGxlIHNtZ3IsCiAJCQkJCQkJCQkJCQlCbG9ja051 bWJlciBibG9ja051bSk7Ci1leHRlcm4gQnVmZmVyRGVzYyAqTG9jYWxCdWZmZXJBbGxvYyhTTWdy UmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLAorZXh0ZXJuIEJ1ZmZlckRlc2MgKkxv Y2FsQnVmZmVyQWxsb2MoU01nckZpbGVIYW5kbGUgc21nciwKIAkJCQkJCQkJCUJsb2NrTnVtYmVy IGJsb2NrTnVtLCBib29sICpmb3VuZFB0cik7CiBleHRlcm4gdm9pZCBNYXJrTG9jYWxCdWZmZXJE aXJ0eShCdWZmZXIgYnVmZmVyKTsKIGV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkxvY2FsQnVmZmVy cyhSZWxGaWxlTG9jYXRvciBybG9jYXRvciwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCmluZGV4IDMzZWFkYmMx MjkxLi5lNmFlZDE4ZjBmYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC00Miw4ICs0MiwxMSBAQCB0 eXBlZGVmIGVudW0KIAlSQk1fWkVST19BTkRfQ0xFQU5VUF9MT0NLLAkvKiBMaWtlIFJCTV9aRVJP X0FORF9MT0NLLCBidXQgbG9ja3MgdGhlIHBhZ2UKIAkJCQkJCQkJICogaW4gImNsZWFudXAiIG1v ZGUgKi8KIAlSQk1fWkVST19PTl9FUlJPUiwJCQkvKiBSZWFkLCBidXQgcmV0dXJuIGFuIGFsbC16 ZXJvcyBwYWdlIG9uIGVycm9yICovCi0JUkJNX05PUk1BTF9OT19MT0cJCQkvKiBEb24ndCBsb2cg cGFnZSBhcyBpbnZhbGlkIGR1cmluZyBXQUwKKwlSQk1fTk9STUFMX05PX0xPRywJCQkvKiBEb24n dCBsb2cgcGFnZSBhcyBpbnZhbGlkIGR1cmluZyBXQUwKIAkJCQkJCQkJICogcmVwbGF5OyBvdGhl cndpc2Ugc2FtZSBhcyBSQk1fTk9STUFMICovCisKKwlSQk1fVFJJTQkJCQkvKlJlYWQgZm9yIFRS SU0gZnVuY3Rpb25zIGluIENMT0cgLyBNdWx0aVhhY3QuIAorCQkJCQkJICBEb24ndCB2YWxpZGF0 ZSBjaGVja3N1bSAgb3IgemVyby4gKi8JCiB9IFJlYWRCdWZmZXJNb2RlOwogCiAvKgpAQCAtNTks NyArNjIsNyBAQCB0eXBlZGVmIHN0cnVjdCBQcmVmZXRjaEJ1ZmZlclJlc3VsdAogc3RydWN0IFdy aXRlYmFja0NvbnRleHQ7CiAKIC8qIGZvcndhcmQgZGVjbGFyZWQsIHRvIGF2b2lkIGluY2x1ZGlu ZyBzbWdyLmggaGVyZSAqLwotc3RydWN0IFNNZ3JSZWxhdGlvbkRhdGE7CitzdHJ1Y3QgU01nckZp bGVEYXRhOwogCiAvKiBpbiBnbG9iYWxzLmMgLi4uIHRoaXMgZHVwbGljYXRlcyBtaXNjYWRtaW4u aCAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBOQnVmZmVyczsKQEAgLTExMCw4ICsxMTMsNyBA QCBleHRlcm4gUEdETExJTVBPUlQgaW50MzIgKkxvY2FsUmVmQ291bnQ7CiAvKgogICogcHJvdG90 eXBlcyBmb3IgZnVuY3Rpb25zIGluIGJ1Zm1nci5jCiAgKi8KLWV4dGVybiBQcmVmZXRjaEJ1ZmZl clJlc3VsdCBQcmVmZXRjaFNoYXJlZEJ1ZmZlcihzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YSAqc21n cl9yZWxuLAotCQkJCQkJCQkJCQkJIEZvcmtOdW1iZXIgZm9ya051bSwKK2V4dGVybiBQcmVmZXRj aEJ1ZmZlclJlc3VsdCBQcmVmZXRjaFNoYXJlZEJ1ZmZlcihzdHJ1Y3QgU01nckZpbGVEYXRhICpz bWdyX2ZpbGUsCiAJCQkJCQkJCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tOdW0pOwogZXh0ZXJuIFBy ZWZldGNoQnVmZmVyUmVzdWx0IFByZWZldGNoQnVmZmVyKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya051bSwKIAkJCQkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja051bSk7CkBAIC0xMjUs MTMgKzEyNywxOSBAQCBleHRlcm4gQnVmZmVyIFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoUmVs RmlsZUxvY2F0b3IgcmxvY2F0b3IsCiAJCQkJCQkJCQkJRm9ya051bWJlciBmb3JrTnVtLCBCbG9j a051bWJlciBibG9ja051bSwKIAkJCQkJCQkJCQlSZWFkQnVmZmVyTW9kZSBtb2RlLCBCdWZmZXJB Y2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCQkJCQlib29sIHBlcm1hbmVudCk7CitleHRl cm4gQnVmZmVyIFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGVXaXRoSGl0KFJlbEZpbGVMb2NhdG9y IHJsb2NhdG9yLAorCQkJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxv Y2tOdW0sCisJCQkJCQkJCQkJUmVhZEJ1ZmZlck1vZGUgbW9kZSwgQnVmZmVyQWNjZXNzU3RyYXRl Z3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkJCSAgIGJvb2wgcGVybWFuZW50LCBib29sICpoaXQpOwog ZXh0ZXJuIHZvaWQgUmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKIGV4dGVybiB2b2lkIFVu bG9ja1JlbGVhc2VCdWZmZXIoQnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9pZCBNYXJrQnVmZmVy RGlydHkoQnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9pZCBJbmNyQnVmZmVyUmVmQ291bnQoQnVm ZmVyIGJ1ZmZlcik7CiBleHRlcm4gQnVmZmVyIFJlbGVhc2VBbmRSZWFkQnVmZmVyKEJ1ZmZlciBi dWZmZXIsIFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja051 bSk7Ci0KK2V4dGVybiBib29sIEJ1ZmZlclByb2JlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBG b3JrTnVtYmVyIGZvcmtOdW0sCisJCQkJCQlCbG9ja051bWJlciBibG9ja051bSk7CisgCiBleHRl cm4gdm9pZCBJbml0QnVmZmVyUG9vbEFjY2Vzcyh2b2lkKTsKIGV4dGVybiB2b2lkIEF0RU9YYWN0 X0J1ZmZlcnMoYm9vbCBpc0NvbW1pdCk7CiBleHRlcm4gdm9pZCBQcmludEJ1ZmZlckxlYWtXYXJu aW5nKEJ1ZmZlciBidWZmZXIpOwpAQCAtMTM5LDE4ICsxNDcsMjYgQEAgZXh0ZXJuIHZvaWQgQ2hl Y2tQb2ludEJ1ZmZlcnMoaW50IGZsYWdzKTsKIGV4dGVybiBCbG9ja051bWJlciBCdWZmZXJHZXRC bG9ja051bWJlcihCdWZmZXIgYnVmZmVyKTsKIGV4dGVybiBCbG9ja051bWJlciBSZWxhdGlvbkdl dE51bWJlck9mQmxvY2tzSW5Gb3JrKFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkJCQkJICAg Rm9ya051bWJlciBmb3JrTnVtKTsKLWV4dGVybiB2b2lkIEZsdXNoT25lQnVmZmVyKEJ1ZmZlciBi dWZmZXIpOwotZXh0ZXJuIHZvaWQgRmx1c2hSZWxhdGlvbkJ1ZmZlcnMoUmVsYXRpb24gcmVsKTsK LWV4dGVybiB2b2lkIEZsdXNoUmVsYXRpb25zQWxsQnVmZmVycyhzdHJ1Y3QgU01nclJlbGF0aW9u RGF0YSAqKnNtZ3JzLCBpbnQgbnJlbHMpOwogZXh0ZXJuIHZvaWQgQ3JlYXRlQW5kQ29weVJlbGF0 aW9uRGF0YShSZWxGaWxlTG9jYXRvciBzcmNfcmxvY2F0b3IsCiAJCQkJCQkJCQkgIFJlbEZpbGVM b2NhdG9yIGRzdF9ybG9jYXRvciwKIAkJCQkJCQkJCSAgYm9vbCBwZXJtYW5lbnQpOworCitleHRl cm4gdm9pZCBGbHVzaE9uZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKK2V4dGVybiB2b2lkIEZsdXNo UmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJlbCk7CitleHRlcm4gdm9pZCBGbHVzaFJlbGF0aW9u c0FsbEJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgKmxvY2F0b3JzLCBpbnQgbmxvY2F0b3JzKTsKIGV4 dGVybiB2b2lkIEZsdXNoRGF0YWJhc2VCdWZmZXJzKE9pZCBkYmlkKTsKLWV4dGVybiB2b2lkIERy b3BSZWxhdGlvbkJ1ZmZlcnMoc3RydWN0IFNNZ3JSZWxhdGlvbkRhdGEgKnNtZ3JfcmVsbiwKKwor ZXh0ZXJuIHZvaWQgRHJvcFJlbGF0aW9uQnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvciwg QmFja2VuZElkIGJhY2tlbmQsCiAJCQkJCQkJCUZvcmtOdW1iZXIgKmZvcmtOdW0sCiAJCQkJCQkJ CWludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpmaXJzdERlbEJsb2NrKTsKLWV4dGVybiB2b2lkIERy b3BSZWxhdGlvbnNBbGxCdWZmZXJzKHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhICoqc21ncl9yZWxu LAotCQkJCQkJCQkJaW50IG5sb2NhdG9ycyk7CisKK3R5cGVkZWYgc3RydWN0IFJlbEZpbGVMb2Nh dG9yQmFja2VuZAoreworCVJlbEZpbGVMb2NhdG9yIGxvY2F0b3I7CisJQmFja2VuZElkCWJhY2tl bmQ7Cit9IFJlbEZpbGVMb2NhdG9yQmFja2VuZDsKKworZXh0ZXJuIHZvaWQgRHJvcFJlbGF0aW9u c0FsbEJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3JCYWNrZW5kICpsb2NhdG9ycywgaW50IG5sb2NhdG9y cyk7CiBleHRlcm4gdm9pZCBEcm9wRGF0YWJhc2VCdWZmZXJzKE9pZCBkYmlkKTsKIAogI2RlZmlu ZSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKHJlbG4pIFwKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYnVmcGFnZS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmgKaW5k ZXggNDI0ZWNiYTAyOGYuLmM5NDRlM2RjOTI4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9y YWdlL2J1ZnBhZ2UuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZnBhZ2UuaApAQCAtMjAx LDYgKzIwMSw3IEBAIHR5cGVkZWYgUGFnZUhlYWRlckRhdGEgKlBhZ2VIZWFkZXI7CiAgKiBoYW5k bGluZyBwYWdlcy4KICAqLwogI2RlZmluZSBQR19QQUdFX0xBWU9VVF9WRVJTSU9OCQk0CisjZGVm aW5lIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJTSU9OICAxCiAjZGVmaW5lIFBHX0RBVEFfQ0hFQ0tT VU1fVkVSU0lPTgkxCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMwMiw2ICszMDMsMjAgQEAgUGFnZVNldFBh Z2VTaXplQW5kVmVyc2lvbihQYWdlIHBhZ2UsIFNpemUgc2l6ZSwgdWludDggdmVyc2lvbikKIAko KFBhZ2VIZWFkZXIpIHBhZ2UpLT5wZF9wYWdlc2l6ZV92ZXJzaW9uID0gc2l6ZSB8IHZlcnNpb247 CiB9CiAKKy8qCisgKiBQYWdlU2V0SGVhZGVyRGF0YU1pbmltYWwgCisgKiBTZXRzIHRoZSBMU04s IHBhZ2Ugc2l6ZSBhbmQgdmVyc2lvbiwgYW5kIGNoZWNrc3VtCisgKi8KKyNkZWZpbmUgUGFnZVNl dEhlYWRlckRhdGFOb25SZWwocGFnZSwgcGFnZW5vLCBsc24sIHNpemUsIHZlcnNpb24pIFwKKygg XAorCVBhZ2VTZXRMU04ocGFnZSwgbHNuKSwgXAorCVBhZ2VTZXRQYWdlU2l6ZUFuZFZlcnNpb24o cGFnZSwgc2l6ZSwgdmVyc2lvbiksIFwKKwlQYWdlQ2xlYXJIYXNGcmVlTGluZVBvaW50ZXJzKHBh Z2UpLCBcCisJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBwYWdlbm8pIFwKKykKKworCisK IC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlwYWdlIHNwZWNpYWwgZGF0YSBmdW5jdGlvbnMKICAq IC0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4Niw2ICs1MDEsOCBAQCBTdGF0aWNBc3NlcnREZWNsKEJM Q0tTWiA9PSAoKEJMQ0tTWiAvIHNpemVvZihzaXplX3QpKSAqIHNpemVvZihzaXplX3QpKSwKIAkJ CQkgIkJMQ0tTWiBoYXMgdG8gYmUgYSBtdWx0aXBsZSBvZiBzaXplb2Yoc2l6ZV90KSIpOwogCiBl eHRlcm4gdm9pZCBQYWdlSW5pdChQYWdlIHBhZ2UsIFNpemUgcGFnZVNpemUsIFNpemUgc3BlY2lh bFNpemUpOworZXh0ZXJuIHZvaWQgUGFnZUluaXRTTFJVKFBhZ2UgcGFnZSwgU2l6ZSBwYWdlU2l6 ZSwgU2l6ZSBzcGVjaWFsU2l6ZSk7CisKIGV4dGVybiBib29sIFBhZ2VJc1ZlcmlmaWVkRXh0ZW5k ZWQoUGFnZSBwYWdlLCBCbG9ja051bWJlciBibGtubywgaW50IGZsYWdzKTsKIGV4dGVybiBPZmZz ZXROdW1iZXIgUGFnZUFkZEl0ZW1FeHRlbmRlZChQYWdlIHBhZ2UsIEl0ZW0gaXRlbSwgU2l6ZSBz aXplLAogCQkJCQkJCQkJCU9mZnNldE51bWJlciBvZmZzZXROdW1iZXIsIGludCBmbGFncyk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL21kLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdl L21kLmgKaW5kZXggYmNhZGE5ZmYyMjEuLmEwNTI5NDU2ODVjIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9zdG9yYWdlL21kLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oCkBAIC0yMSwy OCArMjEsMjYgQEAKIAogLyogbWQgc3RvcmFnZSBtYW5hZ2VyIGZ1bmN0aW9uYWxpdHkgKi8KIGV4 dGVybiB2b2lkIG1kaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIG1kb3BlbihTTWdyUmVsYXRpb24g cmVsbik7Ci1leHRlcm4gdm9pZCBtZGNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgbWRjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pOwotZXh0ZXJuIGJvb2wgbWRleGlzdHMoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci1leHRlcm4gdm9pZCBtZHVubGluayhS ZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBp c1JlZG8pOwotZXh0ZXJuIHZvaWQgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIG1kb3BlbihTTWdyRmlsZUhhbmRsZSBzZmlsZSk7Citl eHRlcm4gdm9pZCBtZGNsb3NlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKK2V4dGVybiB2b2lkIG1k Y3JlYXRlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBib29sIGlzUmVkbyk7CitleHRlcm4gYm9vbCBt ZGV4aXN0cyhTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBtZHVubGluayhTTWdy RmlsZUxvY2F0b3Igc2xvY2F0b3IsIGJvb2wgaXNSZWRvKTsKK2V4dGVybiB2b2lkIG1kZXh0ZW5k KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIg KmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotZXh0ZXJuIGJvb2wgbWRwcmVmZXRjaChTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorZXh0ZXJuIGJvb2wgbWRwcmVmZXRjaChT TWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tudW0pOwotZXh0 ZXJuIHZvaWQgbWRyZWFkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJs b2NrTnVtYmVyIGJsb2NrbnVtLAorZXh0ZXJuIHZvaWQgbWRyZWFkKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJCQkgICBjaGFyICpidWZmZXIpOwotZXh0ZXJu IHZvaWQgbWR3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorZXh0 ZXJuIHZvaWQgbWR3cml0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJQmxvY2tOdW1iZXIg YmxvY2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotZXh0ZXJuIHZvaWQgbWR3 cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiB2 b2lkIG1kd3JpdGViYWNrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJQmxvY2tOdW1iZXIg YmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpOwotZXh0ZXJuIEJsb2NrTnVtYmVyIG1kbmJs b2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLWV4dGVybiB2b2lk IG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJ ICAgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci1leHRlcm4gdm9pZCBtZGltbWVkc3luYyhTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKK2V4dGVybiBCbG9ja051bWJlciBtZG5i bG9ja3MoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0ZXJuIHZvaWQgbWR0cnVuY2F0ZShTTWdy RmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7CitleHRlcm4gdm9pZCBtZGlt bWVkc3luYyhTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CiAKIGV4dGVybiB2b2lkIEZvcmdldERhdGFi YXNlU3luY1JlcXVlc3RzKE9pZCBkYmlkKTsKLWV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkZpbGVz KFJlbEZpbGVMb2NhdG9yICpkZWxyZWxzLCBpbnQgbmRlbHJlbHMsIGJvb2wgaXNSZWRvKTsKIAog LyogbWQgc3luYyBjYWxsYmFja3MgKi8KIGV4dGVybiBpbnQJbWRzeW5jZmlsZXRhZyhjb25zdCBG aWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcmVsZmlsZWxvY2F0b3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3Iu aAppbmRleCA2MWNmMDE2OWJkNy4uZTJjMjJiOGU2ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3JlbGZp bGVsb2NhdG9yLmgKQEAgLTUzLDYgKzUzLDggQEAKICAqIE5vdGU6IHZhcmlvdXMgcGxhY2VzIHVz ZSBSZWxGaWxlTG9jYXRvciBpbiBoYXNodGFibGUga2V5cy4gIFRoZXJlZm9yZSwKICAqIHRoZXJl ICptdXN0IG5vdCogYmUgYW55IHVudXNlZCBwYWRkaW5nIGJ5dGVzIGluIHRoaXMgc3RydWN0LiAg VGhhdAogICogc2hvdWxkIGJlIHNhZmUgYXMgbG9uZyBhcyBhbGwgdGhlIGZpZWxkcyBhcmUgb2Yg dHlwZSBPaWQuCisgKgorICogU2VlIGFsc28gU01nckZpbGVMb2NhdG9yIGluIHNtZ3IuaC4KICAq LwogdHlwZWRlZiBzdHJ1Y3QgUmVsRmlsZUxvY2F0b3IKIHsKQEAgLTYyLDM4ICs2NCwxNSBAQCB0 eXBlZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRvcgogfSBSZWxGaWxlTG9jYXRvcjsKIAogLyoKLSAq IEF1Z21lbnRpbmcgYSByZWxmaWxlbG9jYXRvciB3aXRoIHRoZSBiYWNrZW5kIElEIHByb3ZpZGVz IGFsbCB0aGUgaW5mb3JtYXRpb24KLSAqIHdlIG5lZWQgdG8gbG9jYXRlIHRoZSBwaHlzaWNhbCBz dG9yYWdlLiAgVGhlIGJhY2tlbmQgSUQgaXMgSW52YWxpZEJhY2tlbmRJZAotICogZm9yIHJlZ3Vs YXIgcmVsYXRpb25zICh0aG9zZSBhY2Nlc3NpYmxlIHRvIG1vcmUgdGhhbiBvbmUgYmFja2VuZCks IG9yIHRoZQotICogb3duaW5nIGJhY2tlbmQncyBJRCBmb3IgYmFja2VuZC1sb2NhbCByZWxhdGlv bnMuICBCYWNrZW5kLWxvY2FsIHJlbGF0aW9ucwotICogYXJlIGFsd2F5cyB0cmFuc2llbnQgYW5k IHJlbW92ZWQgaW4gY2FzZSBvZiBhIGRhdGFiYXNlIGNyYXNoOyB0aGV5IGFyZQotICogbmV2ZXIg V0FMLWxvZ2dlZCBvciBmc3luYydkLgotICovCi10eXBlZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRv ckJhY2tlbmQKLXsKLQlSZWxGaWxlTG9jYXRvciBsb2NhdG9yOwotCUJhY2tlbmRJZAliYWNrZW5k OwotfSBSZWxGaWxlTG9jYXRvckJhY2tlbmQ7Ci0KLSNkZWZpbmUgUmVsRmlsZUxvY2F0b3JCYWNr ZW5kSXNUZW1wKHJsb2NhdG9yKSBcCi0JKChybG9jYXRvcikuYmFja2VuZCAhPSBJbnZhbGlkQmFj a2VuZElkKQotCi0vKgotICogTm90ZTogUmVsRmlsZUxvY2F0b3JFcXVhbHMgYW5kIFJlbEZpbGVM b2NhdG9yQmFja2VuZEVxdWFscyBjb21wYXJlIHJlbE51bWJlcgorICogTm90ZTogUmVsRmlsZUxv Y2F0b3JFcXVhbHMgY29tcGFyZXMgcmVsTnVtYmVyCiAgKiBmaXJzdCBzaW5jZSB0aGF0IGlzIG1v c3QgbGlrZWx5IHRvIGJlIGRpZmZlcmVudCBpbiB0d28gdW5lcXVhbAogICogUmVsRmlsZUxvY2F0 b3JzLiAgSXQgaXMgcHJvYmFibHkgcmVkdW5kYW50IHRvIGNvbXBhcmUgc3BjT2lkIGlmIHRoZSBv dGhlcgogICogZmllbGRzIGFyZSBmb3VuZCBlcXVhbCwgYnV0IGRvIGl0IGFueXdheSB0byBiZSBz dXJlLiAgTGlrZXdpc2UgZm9yIGNoZWNraW5nCi0gKiB0aGUgYmFja2VuZCBJRCBpbiBSZWxGaWxl TG9jYXRvckJhY2tlbmRFcXVhbHMuCisgKiB0aGUgYmFja2VuZCBJRCBpbiBTTWdyRmlsZUxvY2F0 b3JCYWNrZW5kRXF1YWxzLgogICovCiAjZGVmaW5lIFJlbEZpbGVMb2NhdG9yRXF1YWxzKGxvY2F0 b3IxLCBsb2NhdG9yMikgXAogCSgobG9jYXRvcjEpLnJlbE51bWJlciA9PSAobG9jYXRvcjIpLnJl bE51bWJlciAmJiBcCiAJIChsb2NhdG9yMSkuZGJPaWQgPT0gKGxvY2F0b3IyKS5kYk9pZCAmJiBc CiAJIChsb2NhdG9yMSkuc3BjT2lkID09IChsb2NhdG9yMikuc3BjT2lkKQogCi0jZGVmaW5lIFJl bEZpbGVMb2NhdG9yQmFja2VuZEVxdWFscyhsb2NhdG9yMSwgbG9jYXRvcjIpIFwKLQkoKGxvY2F0 b3IxKS5sb2NhdG9yLnJlbE51bWJlciA9PSAobG9jYXRvcjIpLmxvY2F0b3IucmVsTnVtYmVyICYm IFwKLQkgKGxvY2F0b3IxKS5sb2NhdG9yLmRiT2lkID09IChsb2NhdG9yMikubG9jYXRvci5kYk9p ZCAmJiBcCi0JIChsb2NhdG9yMSkuYmFja2VuZCA9PSAobG9jYXRvcjIpLmJhY2tlbmQgJiYgXAot CSAobG9jYXRvcjEpLmxvY2F0b3Iuc3BjT2lkID09IChsb2NhdG9yMikubG9jYXRvci5zcGNPaWQp Ci0KICNlbmRpZgkJCQkJCQkvKiBSRUxGSUxFTE9DQVRPUl9IICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL3NtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oCmluZGV4 IDU2MjMzYzRkMjE2Li44M2M0YTc1NmNlNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmgKQEAgLTE4LDMxICsxOCw1 NiBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL3JlbGZp bGVsb2NhdG9yLmgiCiAKKwogLyoKLSAqIHNtZ3IuYyBtYWludGFpbnMgYSB0YWJsZSBvZiBTTWdy UmVsYXRpb24gb2JqZWN0cywgd2hpY2ggYXJlIGVzc2VudGlhbGx5Ci0gKiBjYWNoZWQgZmlsZSBo YW5kbGVzLiAgQW4gU01nclJlbGF0aW9uIGlzIGNyZWF0ZWQgKGlmIG5vdCBhbHJlYWR5IHByZXNl bnQpCisgKiBTTWdyRmlsZUxvY2F0b3IgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVk ZWQgdG8gbG9jYXRlIHRoZSBwaHlzaWNhbAorICogc3RvcmFnZSBvZiBhIHJlbGF0aW9uIGZvcmss IG9yIHNvbWUgb3RoZXIgZmlsZSB0aGF0IGlzIG1hbmFnZWQgYnkgdGhlIGJ1ZmZlcgorICogbWFu YWdlci4KKyAqCisgKiBUaGUgYmFja2VuZCBJRCBpcyBJbnZhbGlkQmFja2VuZElkIGZvciByZWd1 bGFyIHJlbGF0aW9ucyAodGhvc2UgYWNjZXNzaWJsZQorICogdG8gbW9yZSB0aGFuIG9uZSBiYWNr ZW5kKSwgb3IgdGhlIG93bmluZyBiYWNrZW5kJ3MgSUQgZm9yIGJhY2tlbmQtbG9jYWwKKyAqIHJl bGF0aW9ucy4gQmFja2VuZC1sb2NhbCByZWxhdGlvbnMgYXJlIGFsd2F5cyB0cmFuc2llbnQgYW5k IHJlbW92ZWQgaW4KKyAqIGNhc2Ugb2YgYSBkYXRhYmFzZSBjcmFzaDsgdGhleSBhcmUgbmV2ZXIg V0FMLWxvZ2dlZCBvciBmc3luYydkLgorICovCit0eXBlZGVmIHN0cnVjdCBTTWdyRmlsZUxvY2F0 b3IKK3sKKwlSZWxGaWxlTG9jYXRvciBsb2NhdG9yOworCUJhY2tlbmRJZAliYWNrZW5kOworCUZv cmtOdW1iZXIJZm9ya251bTsKK30gU01nckZpbGVMb2NhdG9yOworCisjZGVmaW5lIFNNZ3JGaWxl TG9jYXRvcklzVGVtcChzbG9jYXRvcikgXAorCSgoc2xvY2F0b3IpLmJhY2tlbmQgIT0gSW52YWxp ZEJhY2tlbmRJZCkKKworLyoKKyAqIHNtZ3IuYyBtYWludGFpbnMgYSB0YWJsZSBvZiBTTWdyRmls ZURhdGEgb2JqZWN0cywgd2hpY2ggYXJlIGVzc2VudGlhbGx5CisgKiBjYWNoZWQgZmlsZSBoYW5k bGVzLiAgQW4gU01nckZpbGUgaXMgY3JlYXRlZCAoaWYgbm90IGFscmVhZHkgcHJlc2VudCkKICAq IGJ5IHNtZ3JvcGVuKCksIGFuZCBkZXN0cm95ZWQgYnkgc21ncmNsb3NlKCkuICBOb3RlIHRoYXQg bmVpdGhlciBvZiB0aGVzZQogICogb3BlcmF0aW9ucyBpbXBseSBJL08sIHRoZXkganVzdCBjcmVh dGUgb3IgZGVzdHJveSBhIGhhc2h0YWJsZSBlbnRyeS4KICAqIChCdXQgc21ncmNsb3NlKCkgbWF5 IHJlbGVhc2UgYXNzb2NpYXRlZCByZXNvdXJjZXMsIHN1Y2ggYXMgT1MtbGV2ZWwgZmlsZQogICog ZGVzY3JpcHRvcnMuKQogICoKLSAqIEFuIFNNZ3JSZWxhdGlvbiBtYXkgaGF2ZSBhbiAib3duZXIi LCB3aGljaCBpcyBqdXN0IGEgcG9pbnRlciB0byBpdCBmcm9tCi0gKiBzb21ld2hlcmUgZWxzZTsg c21nci5jIHdpbGwgY2xlYXIgdGhpcyBwb2ludGVyIGlmIHRoZSBTTWdyUmVsYXRpb24gaXMKKyAq IEFuIFNNZ3JGaWxlIG1heSBoYXZlIGFuICJvd25lciIsIHdoaWNoIGlzIGp1c3QgYSBwb2ludGVy IHRvIGl0IGZyb20KKyAqIHNvbWV3aGVyZSBlbHNlOyBzbWdyLmMgd2lsbCBjbGVhciB0aGlzIHBv aW50ZXIgaWYgdGhlIFNNZ3JGaWxlIGlzCiAgKiBjbG9zZWQuICBXZSB1c2UgdGhpcyB0byBhdm9p ZCBkYW5nbGluZyBwb2ludGVycyBmcm9tIHJlbGNhY2hlIHRvIHNtZ3IKICAqIHdpdGhvdXQgaGF2 aW5nIHRvIG1ha2UgdGhlIHNtZ3IgZXhwbGljaXRseSBhd2FyZSBvZiByZWxjYWNoZS4gIFRoZXJl CiAgKiBjYW4ndCBiZSBtb3JlIHRoYW4gb25lICJvd25lciIgcG9pbnRlciBwZXIgU01nclJlbGF0 aW9uLCBidXQgdGhhdCdzCiAgKiBhbGwgd2UgbmVlZC4KICAqCi0gKiBTTWdyUmVsYXRpb25zIHRo YXQgZG8gbm90IGhhdmUgYW4gIm93bmVyIiBhcmUgY29uc2lkZXJlZCB0byBiZSB0cmFuc2llbnQs CisgKiBTTWdyRmlsZXMgdGhhdCBkbyBub3QgaGF2ZSBhbiAib3duZXIiIGFyZSBjb25zaWRlcmVk IHRvIGJlIHRyYW5zaWVudCwKICAqIGFuZCBhcmUgZGVsZXRlZCBhdCBlbmQgb2YgdHJhbnNhY3Rp b24uCisgKgorICogQSBmaWxlIHRoYXQgaXMgcmVwcmVzZW50ZWQgYnkgYW4gU01nckZpbGUgY2Fu IGJlIG1hbmFnZWQgYnkgdGhlIGJ1ZmZlcgorICogbWFuYWdlci4gQ3VycmVudGx5LCBpdCdzIG9u bHkgdXNlZCBmb3IgcmVsYXRpb24gZmlsZXMsIGJ1dCBjb3VsZCBiZSB1c2VkCisgKiBmb3IgU0xS VXMgYW5kIG90aGVyIHRoaW5ncyBpbiB0aGUgZnV0dXJlLgogICovCi10eXBlZGVmIHN0cnVjdCBT TWdyUmVsYXRpb25EYXRhCit0eXBlZGVmIHN0cnVjdCBTTWdyRmlsZURhdGEKIHsKLQkvKiBybG9j YXRvciBpcyB0aGUgaGFzaHRhYmxlIGxvb2t1cCBrZXksIHNvIGl0IG11c3QgYmUgZmlyc3QhICov Ci0JUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHNtZ3JfcmxvY2F0b3I7CS8qIHJlbGF0aW9uIHBoeXNp Y2FsIGlkZW50aWZpZXIgKi8KKwkvKiBsb2NhdG9yIGlzIHRoZSBoYXNodGFibGUgbG9va3VwIGtl eSwgc28gbXVzdCBiZSBmaXJzdCEgKi8KKwlTTWdyRmlsZUxvY2F0b3Igc21ncl9sb2NhdG9yOwkv KiBmaWxlIHBoeXNpY2FsIGlkZW50aWZpZXIgKi8KIAogCS8qIHBvaW50ZXIgdG8gb3duaW5nIHBv aW50ZXIsIG9yIE5VTEwgaWYgbm9uZSAqLwotCXN0cnVjdCBTTWdyUmVsYXRpb25EYXRhICoqc21n cl9vd25lcjsKKwlzdHJ1Y3QgU01nckZpbGVEYXRhICoqc21ncl9vd25lcjsKIAogCS8qCiAJICog VGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHJlc2V0IHRvIEludmFsaWRCbG9ja051bWJlciB1cG9u IGEgY2FjaGUgZmx1c2gKQEAgLTUxLDcgKzc2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclJlbGF0 aW9uRGF0YQogCSAqIGludmFsaWRhdGlvbiBmb3IgZm9yayBleHRlbnNpb24uCiAJICovCiAJQmxv Y2tOdW1iZXIgc21ncl90YXJnYmxvY2s7IC8qIGN1cnJlbnQgaW5zZXJ0aW9uIHRhcmdldCBibG9j ayAqLwotCUJsb2NrTnVtYmVyIHNtZ3JfY2FjaGVkX25ibG9ja3NbTUFYX0ZPUktOVU0gKyAxXTsJ LyogbGFzdCBrbm93biBzaXplICovCisJQmxvY2tOdW1iZXIgc21ncl9jYWNoZWRfbmJsb2NrczsJ LyogbGFzdCBrbm93biBzaXplICovCiAKIAkvKiBhZGRpdGlvbmFsIHB1YmxpYyBmaWVsZHMgbWF5 IHNvbWVkYXkgZXhpc3QgaGVyZSAqLwogCkBAIC02NSw0NiArOTAsNDYgQEAgdHlwZWRlZiBzdHJ1 Y3QgU01nclJlbGF0aW9uRGF0YQogCSAqIGZvciBtZC5jOyBwZXItZm9yayBhcnJheXMgb2YgdGhl IG51bWJlciBvZiBvcGVuIHNlZ21lbnRzCiAJICogKG1kX251bV9vcGVuX3NlZ3MpIGFuZCB0aGUg c2VnbWVudHMgdGhlbXNlbHZlcyAobWRfc2VnX2ZkcykuCiAJICovCi0JaW50CQkJbWRfbnVtX29w ZW5fc2Vnc1tNQVhfRk9SS05VTSArIDFdOwotCXN0cnVjdCBfTWRmZFZlYyAqbWRfc2VnX2Zkc1tN QVhfRk9SS05VTSArIDFdOworCWludAkJCW1kX251bV9vcGVuX3NlZ3M7CisJc3RydWN0IF9NZGZk VmVjICptZF9zZWdfZmRzOwogCi0JLyogaWYgdW5vd25lZCwgbGlzdCBsaW5rIGluIGxpc3Qgb2Yg YWxsIHVub3duZWQgU01nclJlbGF0aW9ucyAqLworCS8qIGlmIHVub3duZWQsIGxpc3QgbGluayBp biBsaXN0IG9mIGFsbCB1bm93bmVkIFNNZ3JGaWxlcyAqLwogCWRsaXN0X25vZGUJbm9kZTsKLX0g U01nclJlbGF0aW9uRGF0YTsKK30gU01nckZpbGVEYXRhOwogCi10eXBlZGVmIFNNZ3JSZWxhdGlv bkRhdGEgKlNNZ3JSZWxhdGlvbjsKK3R5cGVkZWYgU01nckZpbGVEYXRhICpTTWdyRmlsZUhhbmRs ZTsKIAogI2RlZmluZSBTbWdySXNUZW1wKHNtZ3IpIFwKLQlSZWxGaWxlTG9jYXRvckJhY2tlbmRJ c1RlbXAoKHNtZ3IpLT5zbWdyX3Jsb2NhdG9yKQorCVNNZ3JGaWxlTG9jYXRvcklzVGVtcCgoc21n ciktPnNtZ3JfbG9jYXRvcikKIAogZXh0ZXJuIHZvaWQgc21ncmluaXQodm9pZCk7Ci1leHRlcm4g U01nclJlbGF0aW9uIHNtZ3JvcGVuKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQg YmFja2VuZCk7Ci1leHRlcm4gYm9vbCBzbWdyZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgc21ncnNldG93bmVyKFNNZ3JSZWxhdGlvbiAq b3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKTsKLWV4dGVybiB2b2lkIHNtZ3JjbGVhcm93bmVyKFNN Z3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKTsKLWV4dGVybiB2b2lkIHNtZ3Jj bG9zZShTTWdyUmVsYXRpb24gcmVsbik7CitleHRlcm4gU01nckZpbGVIYW5kbGUgc21ncm9wZW4o UmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kLCBGb3JrTnVtYmVyIGZv cmtOdW0pOworZXh0ZXJuIGJvb2wgc21ncmV4aXN0cyhTTWdyRmlsZUhhbmRsZSBzZmlsZSk7Citl eHRlcm4gdm9pZCBzbWdyc2V0b3duZXIoU01nckZpbGVIYW5kbGUgKm93bmVyLCBTTWdyRmlsZUhh bmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBzbWdyY2xlYXJvd25lcihTTWdyRmlsZUhhbmRsZSAq b3duZXIsIFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKK2V4dGVybiB2b2lkIHNtZ3JjbG9zZShTTWdy RmlsZUhhbmRsZSBzZmlsZSk7CiBleHRlcm4gdm9pZCBzbWdyY2xvc2VhbGwodm9pZCk7Ci1leHRl cm4gdm9pZCBzbWdyY2xvc2VyZWxsb2NhdG9yKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRv cik7Ci1leHRlcm4gdm9pZCBzbWdycmVsZWFzZShTTWdyUmVsYXRpb24gcmVsbik7CiBleHRlcm4g dm9pZCBzbWdycmVsZWFzZWFsbCh2b2lkKTsKLWV4dGVybiB2b2lkIHNtZ3JjcmVhdGUoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pOwotZXh0ZXJuIHZv aWQgc21ncmRvc3luY2FsbChTTWdyUmVsYXRpb24gKnJlbHMsIGludCBucmVscyk7Ci1leHRlcm4g dm9pZCBzbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQgbnJlbHMsIGJvb2wg aXNSZWRvKTsKLWV4dGVybiB2b2lkIHNtZ3JleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIHNtZ3JjcmVhdGUoU01nckZpbGVIYW5kbGUgc2Zp bGUsIGJvb2wgaXNSZWRvKTsKK2V4dGVybiB2b2lkIHNtZ3JleHRlbmQoU01nckZpbGVIYW5kbGUg c2ZpbGUsCiAJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpidWZmZXIsIGJvb2wg c2tpcEZzeW5jKTsKLWV4dGVybiBib29sIHNtZ3JwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKLWV4dGVy biB2b2lkIHNtZ3JyZWFkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitl eHRlcm4gYm9vbCBzbWdycHJlZmV0Y2goU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVy IGJsb2NrbnVtKTsKK2V4dGVybiB2b2lkIHNtZ3JyZWFkKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAog CQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1ZmZlcik7Ci1leHRlcm4gdm9pZCBz bWdyd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiB2 b2lkIHNtZ3J3cml0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJICBCbG9ja051bWJlciBi bG9ja251bSwgY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYyk7Ci1leHRlcm4gdm9pZCBzbWdy d3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitleHRlcm4g dm9pZCBzbWdyd3JpdGViYWNrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJICBCbG9ja051 bWJlciBibG9ja251bSwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci1leHRlcm4gQmxvY2tOdW1iZXIg c21ncm5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci1leHRl cm4gQmxvY2tOdW1iZXIgc21ncm5ibG9ja3NfY2FjaGVkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgc21ncnRydW5jYXRlKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyICpmb3JrbnVtLAotCQkJCQkJIGludCBuZm9ya3MsIEJsb2NrTnVtYmVy ICpuYmxvY2tzKTsKLWV4dGVybiB2b2lkIHNtZ3JpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSk7CitleHRlcm4gQmxvY2tOdW1iZXIgc21ncm5ibG9ja3MoU01n ckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0ZXJuIEJsb2NrTnVtYmVyIHNtZ3JuYmxvY2tzX2NhY2hl ZChTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBzbWdyaW1tZWRzeW5jKFNNZ3JG aWxlSGFuZGxlIHNmaWxlKTsKK2V4dGVybiB2b2lkIHNtZ3J1bmxpbmsoU01nckZpbGVIYW5kbGUg c2ZpbGUsIGJvb2wgaXNSZWRvKTsKKworZXh0ZXJuIHZvaWQgc21ncnRydW5jYXRlX211bHRpKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9ya051bWJlciAqZm9y a3MsIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYmxvY2tzKTsKK2V4dGVybiB2b2lkIHNtZ3J1 bmxpbmtfbXVsdGkoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kLCBG b3JrTnVtYmVyICpmb3JrcywgaW50IG5mb3JrcywgYm9vbCBpc1JlZG8pOworCitleHRlcm4gdm9p ZCBzbWdyY2xvc2VyZWxsb2NhdG9yKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQg YmFja2VuZCk7CisKIGV4dGVybiB2b2lkIEF0RU9YYWN0X1NNZ3Iodm9pZCk7CiBleHRlcm4gYm9v bCBQcm9jZXNzQmFycmllclNtZ3JSZWxlYXNlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS91dGlscy9pbnZhbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW52YWwuaAppbmRleCAxNGI0 ZWFjMDYzMC4uNmMyNzk0MjJiMmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2ludmFs LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW52YWwuaApAQCAtNDgsNyArNDgsNyBAQCBleHRl cm4gdm9pZCBDYWNoZUludmFsaWRhdGVSZWxjYWNoZUJ5VHVwbGUoSGVhcFR1cGxlIGNsYXNzVHVw bGUpOwogCiBleHRlcm4gdm9pZCBDYWNoZUludmFsaWRhdGVSZWxjYWNoZUJ5UmVsaWQoT2lkIHJl bGlkKTsKIAotZXh0ZXJuIHZvaWQgQ2FjaGVJbnZhbGlkYXRlU21ncihSZWxGaWxlTG9jYXRvckJh Y2tlbmQgcmxvY2F0b3IpOworZXh0ZXJuIHZvaWQgQ2FjaGVJbnZhbGlkYXRlU21ncihSZWxGaWxl TG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQpOwogCiBleHRlcm4gdm9pZCBDYWNo ZUludmFsaWRhdGVSZWxtYXAoT2lkIGRhdGFiYXNlSWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IGFmOTc4NTAz OGQzLi5iZDdiOThkZWU5OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysr IGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTU0LDcgKzU0LDcgQEAgdHlwZWRlZiBMb2Nr SW5mb0RhdGEgKkxvY2tJbmZvOwogdHlwZWRlZiBzdHJ1Y3QgUmVsYXRpb25EYXRhCiB7CiAJUmVs RmlsZUxvY2F0b3IgcmRfbG9jYXRvcjsJLyogcmVsYXRpb24gcGh5c2ljYWwgaWRlbnRpZmllciAq LwotCVNNZ3JSZWxhdGlvbiByZF9zbWdyOwkJLyogY2FjaGVkIGZpbGUgaGFuZGxlLCBvciBOVUxM ICovCisJU01nckZpbGVIYW5kbGUgcmRfc21ncltNQVhfRk9SS05VTSArIDFdOwkJLyogY2FjaGVk IGZpbGUgaGFuZGxlcywgb3IgTlVMTHMgKi8KIAlpbnQJCQlyZF9yZWZjbnQ7CQkvKiByZWZlcmVu Y2UgY291bnQgKi8KIAlCYWNrZW5kSWQJcmRfYmFja2VuZDsJCS8qIG93bmluZyBiYWNrZW5kIGlk LCBpZiB0ZW1wb3JhcnkgcmVsYXRpb24gKi8KIAlib29sCQlyZF9pc2xvY2FsdGVtcDsgLyogcmVs IGlzIGEgdGVtcCByZWwgb2YgdGhpcyBzZXNzaW9uICovCkBAIC01NjIsMTYgKzU2MiwxNyBAQCB0 eXBlZGVmIHN0cnVjdCBWaWV3T3B0aW9ucwogICogTm90ZTogc2luY2UgYSByZWxjYWNoZSBmbHVz aCBjYW4gY2F1c2UgdGhlIGZpbGUgaGFuZGxlIHRvIGJlIGNsb3NlZCBhZ2FpbiwKICAqIGl0J3Mg dW53aXNlIHRvIGhvbGQgb250byB0aGUgcG9pbnRlciByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9u IGZvciBhbnkKICAqIGxvbmcgcGVyaW9kLiAgUmVjb21tZW5kZWQgcHJhY3RpY2UgaXMgdG8ganVz dCByZS1leGVjdXRlIFJlbGF0aW9uR2V0U21ncgotICogZWFjaCB0aW1lIHlvdSBuZWVkIHRvIGFj Y2VzcyB0aGUgU01nclJlbGF0aW9uLiAgSXQncyBxdWl0ZSBjaGVhcCBpbgorICogZWFjaCB0aW1l IHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgU01nckZpbGVIYW5kbGUuICBJdCdzIHF1aXRlIGNoZWFw IGluCiAgKiBjb21wYXJpc29uIHRvIHdoYXRldmVyIGFuIHNtZ3IgZnVuY3Rpb24gaXMgZ29pbmcg dG8gZG8uCiAgKi8KLXN0YXRpYyBpbmxpbmUgU01nclJlbGF0aW9uCi1SZWxhdGlvbkdldFNtZ3Io UmVsYXRpb24gcmVsKQorc3RhdGljIGlubGluZSBTTWdyRmlsZUhhbmRsZQorUmVsYXRpb25HZXRT bWdyKFJlbGF0aW9uIHJlbCwgRm9ya051bWJlciBmb3JrTnVtKQogewotCWlmICh1bmxpa2VseShy ZWwtPnJkX3NtZ3IgPT0gTlVMTCkpCi0JCXNtZ3JzZXRvd25lcigmKHJlbC0+cmRfc21nciksIHNt Z3JvcGVuKHJlbC0+cmRfbG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kKSk7Ci0JcmV0dXJuIHJlbC0+ cmRfc21ncjsKKwlpZiAodW5saWtlbHkocmVsLT5yZF9zbWdyW2ZvcmtOdW1dID09IE5VTEwpKQor CQlzbWdyc2V0b3duZXIoJihyZWwtPnJkX3NtZ3JbZm9ya051bV0pLCBzbWdyb3BlbihyZWwtPnJk X2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya051bSkpOworCXJldHVybiByZWwtPnJkX3Nt Z3JbZm9ya051bV07CiB9CisjZW5kaWYKIAogLyoKICAqIFJlbGF0aW9uQ2xvc2VTbWdyCkBAIC01 ODAsMTMgKzU4MSwxNSBAQCBSZWxhdGlvbkdldFNtZ3IoUmVsYXRpb24gcmVsKQogc3RhdGljIGlu bGluZSB2b2lkCiBSZWxhdGlvbkNsb3NlU21ncihSZWxhdGlvbiByZWxhdGlvbikKIHsKLQlpZiAo cmVsYXRpb24tPnJkX3NtZ3IgIT0gTlVMTCkKLQkJc21ncmNsb3NlKHJlbGF0aW9uLT5yZF9zbWdy KTsKLQotCS8qIHNtZ3JjbG9zZSBzaG91bGQgdW5ob29rIGZyb20gb3duZXIgcG9pbnRlciAqLwot CUFzc2VydChyZWxhdGlvbi0+cmRfc21nciA9PSBOVUxMKTsKKwlmb3IgKGludCBpID0gMDsgaSA8 PSBNQVhfRk9SS05VTTsgaSsrKQorCXsKKwkJaWYgKHJlbGF0aW9uLT5yZF9zbWdyW2ldICE9IE5V TEwpCisJCXsKKwkJCXNtZ3JjbG9zZShyZWxhdGlvbi0+cmRfc21ncltpXSk7CisJCQlBc3NlcnQo cmVsYXRpb24tPnJkX3NtZ3JbaV0gPT0gTlVMTCk7CisJCX0KKwl9CiB9Ci0jZW5kaWYJCQkJCQkJ LyogIUZST05URU5EICovCiAKIC8qCiAgKiBSZWxhdGlvbkdldFRhcmdldEJsb2NrCkBAIC01OTcs NyArNjAwLDcgQEAgUmVsYXRpb25DbG9zZVNtZ3IoUmVsYXRpb24gcmVsYXRpb24pCiAgKiBzbyB0 aGVyZSdzIG5vIG5lZWQgdG8gcmUtb3BlbiB0aGUgc21nciBoYW5kbGUgaWYgaXQncyBub3QgY3Vy cmVudGx5IG9wZW4uCiAgKi8KICNkZWZpbmUgUmVsYXRpb25HZXRUYXJnZXRCbG9jayhyZWxhdGlv bikgXAotCSggKHJlbGF0aW9uKS0+cmRfc21nciAhPSBOVUxMID8gKHJlbGF0aW9uKS0+cmRfc21n ci0+c21ncl90YXJnYmxvY2sgOiBJbnZhbGlkQmxvY2tOdW1iZXIgKQorCSggKHJlbGF0aW9uKS0+ cmRfc21ncltNQUlOX0ZPUktOVU1dICE9IE5VTEwgPyAocmVsYXRpb24pLT5yZF9zbWdyW01BSU5f Rk9SS05VTV0tPnNtZ3JfdGFyZ2Jsb2NrIDogSW52YWxpZEJsb2NrTnVtYmVyICkKIAogLyoKICAq IFJlbGF0aW9uU2V0VGFyZ2V0QmxvY2sKQEAgLTYwNSw3ICs2MDgsNyBAQCBSZWxhdGlvbkNsb3Nl U21ncihSZWxhdGlvbiByZWxhdGlvbikKICAqLwogI2RlZmluZSBSZWxhdGlvblNldFRhcmdldEJs b2NrKHJlbGF0aW9uLCB0YXJnYmxvY2spIFwKIAlkbyB7IFwKLQkJUmVsYXRpb25HZXRTbWdyKHJl bGF0aW9uKS0+c21ncl90YXJnYmxvY2sgPSAodGFyZ2Jsb2NrKTsgXAorCQlSZWxhdGlvbkdldFNt Z3IocmVsYXRpb24sIE1BSU5fRk9SS05VTSktPnNtZ3JfdGFyZ2Jsb2NrID0gKHRhcmdibG9jayk7 IFwKIAl9IHdoaWxlICgwKQogCiAvKgotLSAKMi4zOC4xCgo= --_002_A09EAE0D0D3F4A34ADE98AC1DCBE7D57amazoncom_--