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 1oDczr-0002eI-I4 for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Jul 2022 02:30:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oDcys-0007Bg-39 for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Jul 2022 02:29:02 +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 1oDcyr-0007BW-4v for pgsql-hackers@lists.postgresql.org; Tue, 19 Jul 2022 02:29:01 +0000 Received: from esa1.fujitsucc.c3s2.iphmx.com ([68.232.152.245]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oDcyg-0003dl-UP for pgsql-hackers@lists.postgresql.org; Tue, 19 Jul 2022 02:29:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1658197732; x=1689733732; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=e2O9CnyEWTllbHesquNtJu6CiMfSlxR1Ehm1dh19rME=; b=Z5cjY4T9d+bfJQPHPgjEH0MkV4daYaX07I6DygG4hRXXBKRAZDeUXdcd 9XBH+ArB2Z5XuCTUhjXGd90pWJSJBj1OP5fnYZ5Oot4vL6VmRsB9riE4I MmogW+xErEPPsDfwSooEHYPcoVceJiCOqEaaIE245qwwib2wZbnBs4I8w V0kw84GxC5OCmHWoAppPDs+VM3x0Mk7SPJt92SmSlviVq8Hq6WK3PfzJS ktIOc/9AKtDz7OD54FKe5CBPqCLwAJRVCtSjaJUvecWnGCUxXztvviU0I JJBcDXzSXkHHYPtYjuhJKRY9B43ppl6C0rH3fDLaRR5es4q0vdtDeIFRk g==; X-IronPort-AV: E=McAfee;i="6400,9594,10412"; a="68835514" X-IronPort-AV: E=Sophos;i="5.92,282,1650898800"; d="scan'208,223";a="68835514" Received: from mail-os0jpn01lp2112.outbound.protection.outlook.com (HELO JPN01-OS0-obe.outbound.protection.outlook.com) ([104.47.23.112]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Jul 2022 11:28:48 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mMp2FDZCg3OwUxZ9oShKUBP5doK64LjQOFfMRrJzgsp+qIAAfBYFD6ofJL9//ooJigWm36I+LE2QsO6xdvnVCLOhiRN3/Sya+W+cH306ahiibwIKo4NgLS5PCrT7nG0r1rlos91J7VGk27E6JnwsAxYvXvmXoyTvWoA5J9xO4rO4Q63qOjdaiS8UWws5FXCW0328sEMGP+hs5iR8Mm5vZzCbXTk/DXeXdK7j58ZZ0rFuC/x2IKWsugWqiSBzqCY19XMHVzQBgbm1IXPc/ywqNRRyYUA/YGspo0fb7u/TPEmtuaVDoIvpYsMEaLVajcu7y/yi3JVOrDXlxIh3SRFy2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XAwnuN7FFCi0AoqY7CNs6pz3SXFto99Fuj9IPjVQKw0=; b=lYUZVWbH3TEwvfmAO3WEciLOgeQiRhfo15a6kYBP0Tz62CeJ4m3Xz4pwPXbrLAW6iLTgoeW76B3pbM59vE0hRIxUJqKDZjCIbVAZjku3pT1kQ2BSZG7TunA7Lmf7P+EOVzv8HCuoo8g/s8dsN9T/tLVuKQLyVAiXrYnbPY8S56dIZ8gU0AO2NbphqxbU1Uo7+2uVc7ktIkHFQ1iQWrACNwqAp+mapJMfdVlADO2OPyt0jtEp3HtqwdWaxf66jtJ5RiTet2weQsimQaPq7kcHoIB64sjArhERc8a8xt9NJaTeWvyyGiksZ7U4YQQ905Mvg1YdJi94pzGbC3Tz8mC7BQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fujitsu.onmicrosoft.com; s=selector2-fujitsu-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XAwnuN7FFCi0AoqY7CNs6pz3SXFto99Fuj9IPjVQKw0=; b=EVOijXt4fuDYwDWoyNek+bcwKbcdlEGcpsM2EzNKSIwjnpCTSrN0GNlEgcoHMYypQIp/U/nBAkYylNAFTbvT9XxUP/FyD8Oc2uMvJ+3SVEzXf9FPhTwufPxZD+1xLsGp4ohponscT14GqsdFvxsW5bxz1rN/1ZdkEKX/tmrRN9I= Received: from OS3PR01MB6275.jpnprd01.prod.outlook.com (2603:1096:604:f1::8) by TYYPR01MB6876.jpnprd01.prod.outlook.com (2603:1096:400:d3::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5438.14; Tue, 19 Jul 2022 02:28:43 +0000 Received: from OS3PR01MB6275.jpnprd01.prod.outlook.com ([fe80::b7:3975:8c62:f5d1]) by OS3PR01MB6275.jpnprd01.prod.outlook.com ([fe80::b7:3975:8c62:f5d1%4]) with mapi id 15.20.5438.023; Tue, 19 Jul 2022 02:28:43 +0000 From: "wangw.fnst@fujitsu.com" To: Peter Smith CC: Amit Kapila , Masahiko Sawada , "shiy.fnst@fujitsu.com" , "houzj.fnst@fujitsu.com" , PostgreSQL Hackers Subject: RE: Perform streaming logical transactions by background workers and parallel apply Thread-Topic: Perform streaming logical transactions by background workers and parallel apply Thread-Index: AQHYSXX4/KZEbPJKjUy7J1pJS8eGYazlvxQAgAkRYICACBI2gIABs50AgAA5UwCAApvIgIAFAGuAgAXc1wCAADa7gIALO/aAgAsRZICAB606AIAS9tXQgAAv04CAAWQLgIABHxKAgAA3o4CAAd7v0IAJQDLggAkyO+CAAiLMAIAC0M5ggARwU4CABP8UAIAAGBkAgAd/49CABPEVgIAJO7xggABuopCACQ1GAIAJSjQg Date: Tue, 19 Jul 2022 02:28:43 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9ODY2ZTJkY2EtZTFmYy00OGIzLWEwNDMtYTBhMGM3MDZm?= =?utf-8?B?MDIwO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX0NvbnRlbnRCaXRzPTA7TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5?= =?utf-8?B?LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfRW5hYmxlZD10cnVlO01TSVBfTGFi?= =?utf-8?B?ZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRmZWNlMDUwX01ldGhv?= =?utf-8?B?ZD1TdGFuZGFyZDtNU0lQX0xhYmVsX2E3Mjk1Y2MxLWQyNzktNDJhYy1hYjRk?= =?utf-8?B?LTNiMGY0ZmVjZTA1MF9OYW1lPUZVSklUU1UtUkVTVFJJQ1RFRO+/ou++gA==?= =?utf-8?B?776LO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?utf-8?B?ZWNlMDUwX1NldERhdGU9MjAyMi0wNy0xOVQwMjoyNToxM1o7TVNJUF9MYWJl?= =?utf-8?B?bF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2UwNTBfU2l0ZUlk?= =?utf-8?Q?=3Da19f121d-81e1-4858-a9d8-736e267fd4c7;?= authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fujitsu.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ace0406b-f25f-4620-6a64-08da692e6677 x-ms-traffictypediagnostic: TYYPR01MB6876:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 7iGPwbZB98vOPY97PQxNyg75nW8o0FJcLWvsotl/rZdyibXrxfTOmOJTHsMo5HKuGTscr8T7HEuI0gyFREiaJ/4UyYwRs9Z8AJmNFR2xBAbLOGA4aWxQfEmpsTeLfkviiskPkqZsIKa4GCe16jmihsX89cGe/7VKELzav8pJuMVZumkP4EzIxS905QzLHBLary47qHdyB6PrySa2n5KaCpVGUuhGmNB1Ep6fqr7+76XcqrTAECPsvwT3IuGz+NN25TQf2uVZ1nJ5uyOgmUEK5uBgmuzkhqcJUt6bXlfN0fTjj+nSZqrez+C5CxzmTSZI2dmy+WEvPXGC7H9N2ftKK3uMC8JDId9qU2NE+ijG51/iewGRqDIs/E+DsEZd6RwnCWbqcUV4Hw3Fj7fQi502fvg0lM9bDj0poCYcGI1xkK8Sj5OJEI72w4QMDDxKql4KHk/Xah8byx0c+dMv3H4rWNGZiUtPxDiRYZ5LISzZDu7WejG2A++JLW/KFnym9x7Ei+/xP0KUba9LbofM7qpy2eCiJqOXUP27AoG+iUsKCvUUoef15nK9tbFHxJFLdnhSsiQm/MBx0JD8a0ttZPhocSiZqIN6MDzzLky5x+UwD9WyEcXbTCrWFzS85N2okXenVRL/3jMy4B9tpIjY/fwNiyF1sUJYr17F5vpc6VRTFI2S5p0NIsa6UztiijmtGU3ZSyhy/QeXFT8G9ZYpuP0ltlw3k9BY2qBC/Xm6pXN+m5b0k1h0kfOSsEdsbElC77AdT1/XfYamwMZD8j+MYhVXsv0kpKvnXa+FOXbgAagSR7d9ouCE4ScrSwMiWtS6uR2yyhETVyZ16Xmn9nl/h55/IQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS3PR01MB6275.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(366004)(396003)(346002)(376002)(136003)(39860400002)(83380400001)(186003)(38100700002)(53546011)(122000001)(966005)(478600001)(26005)(71200400001)(7696005)(9686003)(6506007)(38070700005)(41300700001)(66946007)(64756008)(99936003)(82960400001)(316002)(2906002)(66556008)(54906003)(85182001)(8936002)(52536014)(5660300002)(33656002)(55016003)(8676002)(4326008)(66476007)(6916009)(86362001)(66446008)(76116006);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bjV5SlFSemVqVlQza25EN1dHL05ucnQzTVJYT3FESlhoTXpFZkIwY2NLa3dQ?= =?utf-8?B?MFRMZngzWXluWVlrMmViekNkbVg3dFc0c1JyK20zdDVueXF4Y1h5RXRVOGR2?= =?utf-8?B?Y3U5WnFQVG80ODY4VWs0NmdxTzVtQzlNd1pmaldROWxxYXNlM0NJR0lyN1JT?= =?utf-8?B?ckkyNVNIeW44OXVpeXc4UzZleHM5NElrMG1TZTJ0TC80NkkwUmdESTJWek9Y?= =?utf-8?B?RENQdzBUclhoR2RsZkhxWVpuYVJmNVI3V2N2dE9oRkRmZHQraFZtSjJHZ0dO?= =?utf-8?B?Wjl6Z0JVRFludlhDN3BGMmtNZzRnc1pDQXE4L0ZJWVJrN3NURCtVRWpXazFw?= =?utf-8?B?N1lKMXM4V3NsdENxdHc3NnZibml5NlZRQm1pMS9PMTg2Z2gwZ1RjU3BLZlN4?= =?utf-8?B?TE5NUFpWZkdvUHVvQVZTL0kvM3Z3Rko0d2JZb3dSc2k3SkdnTUhOajRGMHVT?= =?utf-8?B?MmY4NDlpeFpFT25NeDZ3bk1iTlo0YmFUMWgrdFZQRGhvMGFGZjRIb1ZlS1Nu?= =?utf-8?B?aFYzYzRwRmhHTGpleTh4VnEyeHZKOGRiTUt6d0xaZGxMRVdXTGFES0pLNW5D?= =?utf-8?B?ekZMcXRkRGpIRlZYMytOUFVTaE1qS2wzdEx0WUdJZDE5dlg4K3dlRlpYd0VW?= =?utf-8?B?cUREYXRIV2VRUWd5VnpHTTFjVkcyVDNjS3MyUTZqTWFBbWptZFV6NTlCdE1Y?= =?utf-8?B?Szk1cmhUTTFOSUJwNDc1ZTM4MFBjbk9KdWx1VHBabWFLejA3OE1vUWpXY0dz?= =?utf-8?B?bldndFBkZkt1cW9KNE1ZT2NaeHpnVWlvVE9wVG5NbGl4azVKTGxjWDZVb2h1?= =?utf-8?B?TFovQjZuaStBNC81SVpER0oyMHl1dnQwcHEwVDlUeHhFSzB5TklHdGJiZnlv?= =?utf-8?B?WFJFZWpKZ2Y4OXBFeFA0aXBtS29weGtXc2JzSXlwOGdnVUwwRk9RMEVhdC9u?= =?utf-8?B?OUVKUSs2RStBMGxCN1A2anJjcFR6T2Z1SEdNQ2o4cEpiQ00xT0dLM25PV2JU?= =?utf-8?B?eHBiM1FqQU1GdDF1UzhzNGlrODRVcXVWd3F2cWNSU0hmUURJdW5aSEtLd1pW?= =?utf-8?B?eHRsdEFPbUlJVWRXTkp0TVhYNkZZdy9kMkxxWC92TU5wU3h6azlzWWlkbkR3?= =?utf-8?B?ejU4ZTR2SElwb1VSL2VPdnhQbkgxdDF0TzgvMnVsK0QrNEtPcWdxaXNoZ0kz?= =?utf-8?B?NFNwajc4ektPQ0ZjTW50MEUyVTU1R0NJTVdKNExkbE5HN0JMYm94TEFZankv?= =?utf-8?B?STY2T3JpZ051RWt3RGg2MnRnNHY2SEt0a1JVQjZxc1hmanNWcjkrMTlpV0lm?= =?utf-8?B?Ny9FaHpSWHRiQnRMbnVReG1GRks4TnFTaXZrL2Q2Z3YwdzZ5blJTaUVKVmp6?= =?utf-8?B?SWVmdVMyRjVPUEFHWEVZbTV4bU1UbUx1Wmh6MEdNR3BFU2tTTGl0d1dPNVhu?= =?utf-8?B?ZWIzbUNLbHRTVVNDcWw1YWNwaUlpcWJuQ2xwY0RmS3N3bjU1dzFkQTdMV0du?= =?utf-8?B?ZnRNM2JqS1M2Z1Z4TThBZFdnbGo4b29neklrQ28yWVFtQU5ya0NaNVBucEJM?= =?utf-8?B?dDduNXpoVzdYVWlyZEpxUnp6eUNIcEc2VHBXZEJQSU1BUzdsTEZ6L1F0Q1hE?= =?utf-8?B?eE4zdWZUM2trM3Y1M2N4WEFCSDNWa0pUcXZEWUEzYWt5KytQcVlESGRTOE5Z?= =?utf-8?B?VCt3dkpOS01KUjF5NDlQMTROVlIzeFBWK3VLaHdVemtmL2FZSVJNVUp1Q1Iy?= =?utf-8?B?WkFTRXF1aEZYazdTUnpjTlZQSTA5bXdVN21xK0pPcTF4Q0JhQ3F3OC8wQjlY?= =?utf-8?B?dCtTa1JLY1pSWWwzR2ZHNHg0cjB1T0VDWDVLcFFRdVR6QUszOThyWmdjd0xG?= =?utf-8?B?NXlxd2UxUVFCcmEzNHpwYmVlbmt2dEptbEZyL0dkTi96eFB3T2FmRWpFSzVp?= =?utf-8?B?aTQvWEdkMUxqSm5lNTdRMERmOWJiMm1GeS9iWnUxNFRraTg3Vnk1VVRweC8y?= =?utf-8?B?emRoUWpNcWFmcHZMajlvQ09Xd2xxYzZlN2poZHdtTkRzOEhUSDlnY3lUaXU5?= =?utf-8?B?YW5oUDRRUENYdERjcnBRUDgrZnE1elVUWWppRk44alZINzlQemF3amlzQ1U5?= =?utf-8?Q?YjpD6/ybQELSW9Bq6Lky7P1Oc?= Content-Type: multipart/mixed; boundary="_005_OS3PR01MB62758A6AAED27B3A848CEB7A9E8F9OS3PR01MB6275jpnp_" MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS3PR01MB6275.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ace0406b-f25f-4620-6a64-08da692e6677 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Jul 2022 02:28:43.4235 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: mDDTH/Fc88XvRCp3fdjzNFBb9NW4CF0ssnFC/prpSf3qaOCeHHQwxWzpsBlmqcpXbrTj7yklBoNQz1hOVTJpng== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYPR01MB6876 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_OS3PR01MB62758A6AAED27B3A848CEB7A9E8F9OS3PR01MB6275jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gV2VkLCBKdWwgMTMsIDIwMjIgYXQgMTM6NDkgUE0gUGV0ZXIgU21pdGggPHNtaXRocGIyMjUw QGdtYWlsLmNvbT4gd3JvdGU6DQo+IEJlbG93IGFyZSBteSByZXZpZXcgY29tbWVudHMgZm9yIHRo ZSB2MTYqIHBhdGNoIHNldDoNCg0KVGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzLg0KDQo+ID09PT09 PT09DQo+IHYxNi0wMDAxDQo+ID09PT09PT09DQo+IA0KPiAxLjAgPGdlbmVyYWw+DQo+IA0KPiBU aGVyZSBhcmUgcGxhY2VzIChjb21tZW50cywgZG9jcywgZXJybXNncywgZXRjKSBpbiB0aGUgcGF0 Y2ggcmVmZXJyaW5nDQo+IHRvICJwYXJhbGxlbCBtb2RlIi4gSSB0aGluayBldmVyeSBvbmUgb2Yg dGhvc2UgcmVmZXJlbmNlcyBzaG91bGQgYmUNCj4gZm91bmQgYW5kIHJlbmFtZWQgdG8gInBhcmFs bGVsIHN0cmVhbWluZyBtb2RlIiBvciAic3RyZWFtaW5nPXBhcmFsbGVsIg0KPiBvciBhdCB0aGUg dmVyeSBsZWFzdCBtYXRjaCBzdXJlIHRoYXQgInN0cmVhbWluZyIgaXMgaW4gdGhlIHNhbWUNCj4g c2VudGVuY2UuIElNTyBpdCdzIHRvbyB2YWd1ZSBqdXN0IHNheWluZyAicGFyYWxsZWwiIHdpdGhv dXQgYWxzbw0KPiBzYXlpbmcgdGhlIGNvbnRleHQgaXMgZm9yIHRoZSAic3RyZWFtaW5nIiBwYXJh bWV0ZXIuDQo+IA0KPiBJIGhhdmUgY29tbWVudGVkIG9uIHNvbWUgb2YgdGhvc2UgZXhhbXBsZXMg YmVsb3csIGJ1dCBwbGVhc2Ugc2VhcmNoDQo+IGV2ZXJ5dGhpbmcgYW55d2F5IChpbmNsdWRpbmcg dGhlIGRvY3MpIHRvIGNhdGNoIHRoZSBvbmVzIEkgaGF2ZW4ndA0KPiBleHBsaWNpdGx5IG1lbnRp b25lZC4NCg0KSSBjaGVja2VkIGFsbCBwbGFjZXMgaW4gdGhlIHBhdGNoIHdoZXJlIHRoZSB3b3Jk ICJwYXJhbGxlbCIgaXMgdXNlZCAoY2FzZQ0KaW5zZW5zaXRpdmUpLCBhbmQgSSB0aGluayBpdCBp cyBjbGVhciB0aGF0IHRoZSBkZXNjcmlwdGlvbiBpcyByZWxhdGVkIHRvIHN0cmVhbQ0KdHJhbnNh Y3Rpb25zLiBTbyBJIGFtIG5vdCBzbyBzdXJlLiBDb3VsZCB5b3UgcGxlYXNlIGdpdmUgbWUgc29t ZSBleGFtcGxlcz8gSQ0Kd2lsbCBpbXByb3ZlIHRoZW0gbGF0ZXIuDQoNCj4gMS4yIC4uLi9yZXBs aWNhdGlvbi9sb2dpY2FsL2FwcGx5Ymd3b3JrZXIuYyAtIGFwcGx5X2Jnd29ya2VyX3N0YXJ0DQo+ IA0KPiArIGlmIChsaXN0X2xlbmd0aChBcHBseVdvcmtlcnNGcmVlTGlzdCkgPiAwKQ0KPiArIHsN Cj4gKyB3c3RhdGUgPSAoQXBwbHlCZ3dvcmtlclN0YXRlICopIGxsYXN0KEFwcGx5V29ya2Vyc0Zy ZWVMaXN0KTsNCj4gKyBBcHBseVdvcmtlcnNGcmVlTGlzdCA9IGxpc3RfZGVsZXRlX2xhc3QoQXBw bHlXb3JrZXJzRnJlZUxpc3QpOw0KPiArIEFzc2VydCh3c3RhdGUtPnBzdGF0ZS0+c3RhdHVzID09 IEFQUExZX0JHV09SS0VSX0ZJTklTSEVEKTsNCj4gKyB9DQo+IA0KPiBUaGUgQXNzZXJ0IHRoYXQg dGhlIGVudHJpZXMgaW4gdGhlIGZyZWUtbGlzdCBhcmUgRklOSVNIRUQgc2VlbXMgbGlrZQ0KPiB1 bm5lY2Vzc2FyeSBjaGVja2luZy4gSUlVQywgY29kZSBpcyBhbHJlYWR5IGRvaW5nIHRoZSBBc3Nl cnQgdGhhdA0KPiBlbnRyaWVzIGFyZSBGSU5JU0hFRCBiZWZvcmUgYWxsb3dpbmcgdGhlbSBpbnRv IHRoZSBmcmVlLWxpc3QgaW4gdGhlDQo+IGZpcnN0IHBsYWNlLg0KDQpKdXN0IGZvciByb2J1c3Ru ZXNzLg0KDQo+IDEuMyAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9hcHBseWJnd29ya2VyLmMgLSBh cHBseV9iZ3dvcmtlcl9maW5kDQo+IA0KPiArIGlmIChmb3VuZCkNCj4gKyB7DQo+ICsgY2hhciBz dGF0dXMgPSBlbnRyeS0+d3N0YXRlLT5wc3RhdGUtPnN0YXR1czsNCj4gKw0KPiArIC8qIElmIGFu eSB3b3JrZXJzIChvciB0aGUgcG9zdG1hc3RlcikgaGF2ZSBkaWVkLCB3ZSBoYXZlIGZhaWxlZC4g Ki8NCj4gKyBpZiAoc3RhdHVzID09IEFQUExZX0JHV09SS0VSX0VYSVQpDQo+ICsgZXJlcG9ydChF UlJPUiwNCj4gKyAoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NU QVRFKSwNCj4gKyBlcnJtc2coImJhY2tncm91bmQgd29ya2VyICV1IGZhaWxlZCB0byBhcHBseSB0 cmFuc2FjdGlvbiAldSIsDQo+ICsgZW50cnktPndzdGF0ZS0+cHN0YXRlLT5uLA0KPiArIGVudHJ5 LT53c3RhdGUtPnBzdGF0ZS0+c3RyZWFtX3hpZCkpKTsNCj4gKw0KPiArIEFzc2VydChzdGF0dXMg PT0gQVBQTFlfQkdXT1JLRVJfQlVTWSk7DQo+ICsNCj4gKyByZXR1cm4gZW50cnktPndzdGF0ZTsN Cj4gKyB9DQo+IA0KPiBXaHkgbm90IHJlbW92ZSB0aGF0IEFzc2VydCBidXQgY2hhbmdlIHRoZSBj b25kaXRpb24gdG8gYmU6DQo+IA0KPiBpZiAoc3RhdHVzICE9IEFQUExZX0JHV09SS0VSX0JVU1kp DQo+IGVyZXBvcnQoLi4uKQ0KDQpXaGVuIEkgY2hlY2sgIkFQUExZX0JHV09SS0VSX0VYSVQiLCBJ IHVzZSB0aGUgZnVuY3Rpb24gImVyZXBvcnQiIHRvIHJlcG9ydCB0aGUNCmVycm9yLCBiZWNhdXNl ICJBUFBMWV9CR1dPUktFUl9FWElUIiBpcyBhIHBvc3NpYmxlIHVzZSBjYXNlLg0KQnV0IGZvciAi QVBQTFlfQkdXT1JLRVJfQlVTWSIsIHRoaXMgdXNlIGNhc2Ugc2hvdWxkIG5vdCBoYXBwZW4gaGVy ZS4gU28gSSB0aGluaw0KaXQncyBmaW5lIHRvIG9ubHkgY2hlY2sgdGhpcyBmb3IgZGV2ZWxvcGVy cyB3aGVuIHRoZSBjb21waWxlIG9wdGlvbg0KIi0tZW5hYmxlLWNhc3NlcnQiIGlzIHNwZWNpZmll ZC4NCg0KPiA9PT09PT09PQ0KPiB2MTYtMDAwMw0KPiA9PT09PT09PQ0KPiANCj4gMy4wIDxnZW5l cmFsPg0KPiANCj4gU2FtZSBjb21tZW50IGFib3V0ICJwYXJhbGxlbCBtb2RlIiBhcyBpbiBjb21t ZW50ICMxLjANCj4gDQo+ID09PT09PQ0KDQpQbGVhc2UgcmVmZXIgdG8gdGhlIHJlcGx5IHRvICMx LjAuDQoNCj4gMy41IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAtIGxv Z2ljYWxyZXBfcmVhZF9hdHRycw0KPiANCj4gQEAgLTEwMTIsMTEgKzEwNjIsMTQgQEAgbG9naWNh bHJlcF9yZWFkX2F0dHJzKFN0cmluZ0luZm8gaW4sDQo+IExvZ2ljYWxSZXBSZWxhdGlvbiAqcmVs KQ0KPiAgIHsNCj4gICB1aW50OCBmbGFnczsNCj4gDQo+IC0gLyogQ2hlY2sgZm9yIHJlcGxpY2Eg aWRlbnRpdHkgY29sdW1uICovDQo+ICsgLyogQ2hlY2sgZm9yIHJlcGxpY2EgaWRlbnRpdHkgYW5k IHVuaXF1ZSBjb2x1bW4gKi8NCj4gICBmbGFncyA9IHBxX2dldG1zZ2J5dGUoaW4pOw0KPiAtIGlm IChmbGFncyAmIExPR0lDQUxSRVBfSVNfUkVQTElDQV9JREVOVElUWSkNCj4gKyBpZiAoZmxhZ3Mg JiBBVFRSX0lTX1JFUExJQ0FfSURFTlRJVFkpDQo+ICAgYXR0a2V5cyA9IGJtc19hZGRfbWVtYmVy KGF0dGtleXMsIGkpOw0KPiANCj4gKyBpZiAoZmxhZ3MgJiBBVFRSX0lTX1VOSVFVRSkNCj4gKyBh dHR1bmlxdWUgPSBibXNfYWRkX21lbWJlcihhdHR1bmlxdWUsIGkpOw0KPiANCj4gVGhlIGNvZGUg Y29tbWVudCByZWFsbHkgYXBwbGllcyB0byBhbGwgMyBzdGF0ZW1lbnRzIHNvIG1heWJlIGJldHRl cg0KPiBub3QgdG8gaGF2ZSB0aGUgYmxhbmsgbGluZSBoZXJlLg0KDQpJIHRoaW5rIGl0IGxvb2tz IGEgYml0IG1lc3N5IHdpdGhvdXQgdGhlIGJsYW5rIGxpbmUuDQpTbyBJIHRyaWVkIHRvIGltcHJv dmUgaXQgdG8gdGhlIGZvbGxvd2luZzoNCmBgYA0KCQkvKiBDaGVjayBmb3IgcmVwbGljYSBpZGVu dGl0eSBjb2x1bW4gKi8NCgkJZmxhZ3MgPSBwcV9nZXRtc2dieXRlKGluKTsNCgkJaWYgKGZsYWdz ICYgQVRUUl9JU19SRVBMSUNBX0lERU5USVRZKQ0KCQkJYXR0a2V5cyA9IGJtc19hZGRfbWVtYmVy KGF0dGtleXMsIGkpOw0KDQoJCS8qIENoZWNrIGZvciB1bmlxdWUgY29sdW1uICovDQoJCWlmIChm bGFncyAmIEFUVFJfSVNfVU5JUVVFKQ0KCQkJYXR0dW5pcXVlID0gYm1zX2FkZF9tZW1iZXIoYXR0 dW5pcXVlLCBpKTsNCmBgYA0KDQo+IDMuNiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3JlbGF0aW9uLmMgLSBsb2dpY2FscmVwX3JlbF9tYXJrX3BhcmFsbGVsDQo+IA0KPiAzLjYuYQ0K PiArIC8qIEZhc3QgcGF0aCBpZiB3ZSBtYXJrZWQgJ3BhcmFsbGVsJyBmbGFnLiAqLw0KPiArIGlm IChlbnRyeS0+cGFyYWxsZWwgIT0gUEFSQUxMRUxfQVBQTFlfVU5LTk9XTikNCj4gKyByZXR1cm47 DQo+IA0KPiBTVUdHRVNURUQNCj4gRmFzdCBwYXRoIGlmICdwYXJhbGxlbCcgZmxhZyBpcyBhbHJl YWR5IGtub3duLg0KPiANCj4gfg0KPiANCj4gMy42LmINCj4gKyAvKiBJbml0aWFsaXplIHRoZSBm bGFnLiAqLw0KPiArIGVudHJ5LT5wYXJhbGxlbCA9IFBBUkFMTEVMX0FQUExZX1NBRkU7DQo+IA0K PiBJIHRoaW5rIGl0IG1ha2VzIG1vcmUgc2Vuc2UgaWYgYXNzaWduaW5nIFNBRkUgaXMgdGhlIHZl cnkgKmxhc3QqIHRoaW5nDQo+IHRoaXMgZnVuY3Rpb24gZG9lcyDigJMgbm90IHRoZSBmaXJzdCB0 aGluZy4NCj4gDQo+IH4NCj4gDQo+IDMuNi5jDQo+ICsgLyoNCj4gKyAqIEZpcnN0LCB3ZSBjaGVj ayBpZiB0aGUgdW5pcXVlIGNvbHVtbiBpbiB0aGUgcmVsYXRpb24gb24gdGhlDQo+ICsgKiBzdWJz Y3JpYmVyLXNpZGUgaXMgYWxzbyB0aGUgdW5pcXVlIGNvbHVtbiBvbiB0aGUgcHVibGlzaGVyLXNp ZGUuDQo+ICsgKi8NCj4gDQo+ICJGaXJzdCwgd2UgY2hlY2suLi4iIC0+ICJGaXJzdCwgY2hlY2su Li4iDQo+IA0KPiB+DQo+IA0KPiAzLjYuZA0KPiArIC8qDQo+ICsgKiBUaGVuLCBXZSBjaGVjayBp ZiB0aGVyZSBpcyBhbnkgbm9uLWltbXV0YWJsZSBmdW5jdGlvbiBpbiB0aGUgbG9jYWwNCj4gKyAq IHRhYmxlLiBMb29rIGZvciBmdW5jdGlvbnMgaW4gdGhlIGZvbGxvd2luZyBwbGFjZXM6DQo+IA0K PiANCj4gIlRoZW4sIFdlIGNoZWNrLi4uIiAtPiAiVGhlbiwgY2hlY2siDQoNCj0+My42LmENCj0+ My42LmMNCj0+My42LmQNCkltcHJvdmVkIGFzIHN1Z2dlc3RlZC4NCg0KPT4zLjYuYg0KTm90IHN1 cmUgYWJvdXQgdGhpcy4NCg0KPiAzLjcgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9y ZWxhdGlvbi5jIC0gbG9naWNhbHJlcF9yZWxfbWFya19wYXJhbGxlbA0KPiANCj4gRnJvbSBbM10g eW91IHdyb3RlOg0KPiBQZXJzb25hbGx5LCBJIGRvIG5vdCBsaWtlIHRvIHVzZSB0aGUgYGdvdG9g IHN5bnRheCBpZiBpdCBpcyBub3QgbmVjZXNzYXJ5LA0KPiBiZWNhdXNlIHRoZSBgZ290b2Agc3lu dGF4IHdpbGwgZm9yY2libHkgY2hhbmdlIHRoZSBmbG93IG9mIGNvZGUgZXhlY3V0aW9uLg0KPiAN Cj4gWWVzLCBidXQgT1RPSCByZWFkYWJpbGl0eSBpcyBhIG1ham9yIGNvbnNpZGVyYXRpb24gdG9v LCBhbmQgaW4gdGhpcw0KPiBmdW5jdGlvbiBieSBzaW1wbHkgc2F5aW5nIGdvdG8gcGFyYWxsZWxf dW5zYWZlOyB5b3UgY2FuIGhhdmUgMyByZXR1cm5zDQo+IGluc3RlYWQgb2YgNyByZXR1cm5zLCBh bmQgaXQgd2lsbCB0YWtlIH4xMCBsaW5lcyBsZXNzIGNvZGUgdG8gZG8gdGhlDQo+IHNhbWUgZnVu Y3Rpb25hbGl0eS4NCg0KSSBhbSBzdGlsbCBub3Qgc3VyZSBhYm91dCB0aGlzLCBJIHRoaW5rIEkg d2lsbCBjaGFuZ2UgdGhpcyBpZiBzb21lIG1vcmUgcGVvcGxlDQp0aGluayBgZ290b2AgaXMgYmV0 dGVyIGhlcmUuDQoNCj4gNC4zIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5z Z21sDQo+IA0KPiArICAgICAgICAgIDxsaXRlcmFsPnBhcmFsbGVsPC9saXRlcmFsPiBtb2RlIGlz IGRpc3JlZ2FyZGVkIHdoZW4gcmV0cnlpbmc7DQo+ICsgICAgICAgICAgaW5zdGVhZCB0aGUgdHJh bnNhY3Rpb24gd2lsbCBiZSBhcHBsaWVkIHVzaW5nIDxsaXRlcmFsPm9uPC9saXRlcmFsPg0KPiAr ICAgICAgICAgIG1vZGUuDQo+IA0KPiAib24gbW9kZSIgZXRjIHNvdW5kcyBzdHJhbmdlLg0KPiAN Cj4gU1VHR0VTVElPTg0KPiBEdXJpbmcgdGhlIHJldHJ5IHRoZSBzdHJlYW1pbmc9cGFyYWxsZWwg bW9kZSBpcyBpZ25vcmVkLiBUaGUgcmV0cmllZA0KPiB0cmFuc2FjdGlvbiB3aWxsIGJlIGFwcGxp ZWQgdXNpbmcgc3RyZWFtaW5nPW9uIG1vZGUuDQoNClNpbmNlIGl0J3MgcGFydCBvZiB0aGUgc3Ry ZWFtaW5nIG9wdGlvbiBkb2N1bWVudC4gSSB0aGluayBpdCdzIGZpbmUgdG8gZGlyZWN0bHkNCnNh eSAiPGxpdGVyYWw+cGFyYWxsZWw8L2xpdGVyYWw+IG1vZGUiDQoNCj4gNC40IHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgLSBzZXRfc3Vic2NyaXB0aW9uX3JldHJ5DQo+ IA0KPiArIGlmIChNeVN1YnNjcmlwdGlvbi0+cmV0cnkgPT0gcmV0cnkgfHwNCj4gKyBhbV9hcHBs eV9iZ3dvcmtlcigpKQ0KPiArIHJldHVybjsNCj4gKw0KPiANCj4gU29tZWhvdyBJIGZlZWwgdGhh dCB0aGlzIHF1aWNrIGV4aXQgY29uZGl0aW9uIGlzIG5vdCBxdWl0ZSB3aGF0IGl0DQo+IHNlZW1z LiBJSVVDIHRoZSBwdXJwb3NlIG9mIHRoaXMgaXMgcmVhbGx5IHRvIGF2b2lkIGRvaW5nIHRoZSB0 dXBsZQ0KPiB1cGRhdGVzIGlmIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhlbS4gU28gaWYg cmV0cnkgd2FzIGFscmVhZHkgc2V0DQo+IHRydWUgdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIHVw ZGF0ZSB0dXBsZSB0byB0cnVlIGFnYWluLiBTbyBpZiByZXRyeQ0KPiB3YXMgYWxyZWFkeSBzZXQg ZmFsc2UgdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIHVwZGF0ZSB0aGUgdHVwbGUgdG8NCj4gZmFs c2UuIEJ1dCBJIGp1c3QgZG9uJ3Qgc2VlIGhvdyB0aGUgKGh5cG90aGV0aWNhbCkgY29kZSBiZWxv dyBjYW4gd29yaw0KPiBhcyBleHBlY3RlZCwgYmVjYXVzZSB3aGVyZSBpcyB0aGUgY29kZSB1cGRh dGluZyB0aGUgdmFsdWUgb2YNCj4gTXlTdWJzY3JpcHRpb24tPnJldHJ5ID8/Pw0KPiANCj4gc2V0 X3N1YnNjcmlwdGlvbl9yZXRyeSh0cnVlKTsNCj4gc2V0X3N1YnNjcmlwdGlvbl9yZXRyeSh0cnVl KTsNCj4gDQo+IEkgdGhpbmsgYXQgbGVhc3QgdGhlcmUgbmVlZHMgdG8gYmUgc29tZSBkZXRhaWxl ZCBjb21tZW50cyBleHBsYWluaW5nDQo+IHdoYXQgdGhpcyBxdWljayBleGl0IGlzIHJlYWxseSBk b2luZyBiZWNhdXNlIG15IGd1ZXNzIGlzIHRoYXQNCj4gY3VycmVudGx5IGl0IGlzIG5vdCBxdWl0 ZSB3b3JraW5nIGFzIGV4cGVjdGVkLg0KDQpUaGUgc3Vic2NyaXB0aW9uIGNhY2hlIGlzIGJlIHVw ZGF0ZWQgaW4gbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbigpIGFuZCBpcw0KaW52b2tlZCBhdCBl dmVyeSB0cmFuc2FjdGlvbi4gQW5kIHdlIHJlc2V0IHRoZSByZXRyeSBmbGFnIGF0IHRyYW5zYWN0 aW9uIGVuZCwNCnNvIGl0IHNob3VsZCBiZSBmaW5lLiBBbmQgSSB0aGluayB0aGUgcXVpY2sgZXhp dCBjaGVjayBjb2RlIGlzIHNpbWlsYXIgdG8NCmNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xzbi4N Cg0KQXR0YWNoIHRoZSBuZXdzIHBhdGNoZXMuDQoNClsxXSAtIGh0dHBzOi8vd3d3LnBvc3RncmVz cWwub3JnL21lc3NhZ2UtaWQvQ0FIdXQlMkJQdjB5V3luV1RtcDRvMzRzMGQ5OHhWdWJ5czlmeSUz RHAwWVhzWjVfc1VjTm5NdyU0MG1haWwuZ21haWwuY29tDQoNClJlZ2FyZHMsDQpXYW5nIHdlaQ0K --_005_OS3PR01MB62758A6AAED27B3A848CEB7A9E8F9OS3PR01MB6275jpnp_ Content-Type: application/octet-stream; name="v18-0001-Perform-streaming-logical-transactions-by-backgr.patch" Content-Description: v18-0001-Perform-streaming-logical-transactions-by-backgr.patch Content-Disposition: attachment; filename="v18-0001-Perform-streaming-logical-transactions-by-backgr.patch"; size=109158; creation-date="Tue, 19 Jul 2022 02:25:00 GMT"; modification-date="Tue, 19 Jul 2022 02:28:39 GMT" Content-Transfer-Encoding: base64 RnJvbSBiMDUzMGFkMzY2MGQ1NTcxYjU2NDc4MTAwYzk0YjcwMjMwN2NkMDllIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHYxOCAxLzRdIFBlcmZvcm0gc3RyZWFtaW5nIGxvZ2ljYWwgdHJhbnNhY3Rpb25zIGJ5IGJhY2tn cm91bmQKIHdvcmtlcnMKCkN1cnJlbnRseSwgZm9yIGxhcmdlIHRyYW5zYWN0aW9ucywgdGhlIHB1 Ymxpc2hlciBzZW5kcyB0aGUgZGF0YSBpbiBtdWx0aXBsZQpzdHJlYW1zIChjaGFuZ2VzIGRpdmlk ZWQgaW50byBjaHVua3MgZGVwZW5kaW5nIHVwb24gbG9naWNhbF9kZWNvZGluZ193b3JrX21lbSks CmFuZCB0aGVuIG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUsIHRoZSBhcHBseSB3b3JrZXIgd3JpdGVz IHRoZSBjaGFuZ2VzIGludG8KdGVtcG9yYXJ5IGZpbGVzIGFuZCBvbmNlIGl0IHJlY2VpdmVzIHRo ZSBjb21taXQsIGl0IHJlYWRzIGZyb20gdGhlIGZpbGUgYW5kCmFwcGxpZXMgdGhlIGVudGlyZSB0 cmFuc2FjdGlvbi4gVG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygc3VjaAp0cmFuc2FjdGlv bnMsIHdlIGNhbiBpbnN0ZWFkIGFsbG93IHRoZW0gdG8gYmUgYXBwbGllZCB2aWEgYmFja2dyb3Vu ZCB3b3JrZXJzLgoKSW4gdGhpcyBhcHByb2FjaCwgd2UgYXNzaWduIGEgbmV3IGFwcGx5IGJhY2tn cm91bmQgd29ya2VyIChpZiBhdmFpbGFibGUpIGFzCnNvb24gYXMgdGhlIHhhY3QncyBmaXJzdCBz dHJlYW0gaXMgcmVjZWl2ZWQgYW5kIHRoZSBtYWluIGFwcGx5IHdvcmtlciB3aWxsIHNlbmQKY2hh bmdlcyB0byB0aGlzIG5ldyB3b3JrZXIgdmlhIHNoYXJlZCBtZW1vcnkuIFRoZSBhcHBseSBiYWNr Z3JvdW5kIHdvcmtlciB3aWxsCmRpcmVjdGx5IGFwcGx5IHRoZSBjaGFuZ2UgaW5zdGVhZCBvZiB3 cml0aW5nIGl0IHRvIHRlbXBvcmFyeSBmaWxlcy4gV2Uga2VlcAp0aGlzIHdvcmtlciBhc3NpZ25l ZCB0aWxsIHRoZSB0cmFuc2FjdGlvbiBjb21taXQgaXMgcmVjZWl2ZWQgYW5kIGFsc28gd2FpdCBm b3IKdGhlIHdvcmtlciB0byBmaW5pc2ggYXQgY29tbWl0LiBUaGlzIHByZXNlcnZlcyBjb21taXQg b3JkZXJpbmcgYW5kIGF2b2lkcwp3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gZmlsZSBpbiBt b3N0IGNhc2VzLiBXZSBzdGlsbCBuZWVkIHRvIHNwaWxsIGlmIHRoZXJlCmlzIG5vIHdvcmtlciBh dmFpbGFibGUuCgpUaGlzIHBhdGNoIGFsc28gZXh0ZW5kcyB0aGUgU1VCU0NSSVBUSU9OICdzdHJl YW1pbmcnIHBhcmFtZXRlciBzbyB0aGF0IHRoZSB1c2VyCmNhbiBjb250cm9sIHdoZXRoZXIgdG8g YXBwbHkgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBpbiBhbiBhcHBseSBiYWNrZ3JvdW5kCndv cmtlciBvciBzcGlsbCB0aGUgY2hhbmdlIHRvIGRpc2suIFRoZSB1c2VyIGNhbiBzZXQgdGhlIHN0 cmVhbWluZyBwYXJhbWV0ZXIgdG8KJ29uL29mZicsICdwYXJhbGxlbCcuIFRoZSBwYXJhbWV0ZXIg dmFsdWUgJ3BhcmFsbGVsJyBtZWFucyB0aGUgc3RyZWFtaW5nIHdpbGwKYmUgYXBwbGllZCB2aWEg YW4gYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIsIGlmIGF2YWlsYWJsZS4gVGhlIHBhcmFtZXRlciB2 YWx1ZQonb24nIG1lYW5zIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gd2lsbCBiZSBzcGlsbGVk IHRvIGRpc2suIFRoZSBkZWZhdWx0IHZhbHVlCmlzICdvZmYnIChzYW1lIGFzIGN1cnJlbnQgYmVo YXZpb3VyKS4KLS0tCiBkb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAgICAgICAg ICAgfCAgMTAgKy0KIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAg ICB8ICAyNSArCiBkb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAgICAgICAg fCAgMTAgKwogZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwgICAgICAgICAgICAgICAgICAgIHwg IDE5ICsKIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sICAgICB8ICAy NCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jICAgICAgICAgICAgIHwgIDEz ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyAgICAgICB8ICA2NiAr LQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jICAgICAgICAgICAgIHwgICAzICsK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICB8ICAgMSArCiAu Li4vcmVwbGljYXRpb24vbG9naWNhbC9hcHBseWJnd29ya2VyLmMgICAgICAgfCA4MDIgKysrKysr KysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jICAg ICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYyAg ICB8IDEzMCArKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgICAg ICB8ICAyNiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAg IHwgIDQxICstCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAg fCAgMTAgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgICB8 ICAxMCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwg NjkyICsrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYyAgIHwgICA2ICstCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50 LmMgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyAgICAgICAgICAg ICAgICAgIHwgIDEyICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZSB8ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAg ICAgfCAgIDYgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmggICAgICAg ICB8ICAyMSArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmggICAg IHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oICAgICAgICB8 ICAyNyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oICAgICAgIHwg ICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL29yaWdpbi5oICAgICAgICAgICAgICB8ICAg MiArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAgICAgIHwgICA3 ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCAgICAgfCAxMDIg KystCiBzcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmggICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0ICAgIHwgICAyICst CiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDUgKwog MzIgZmlsZXMgY2hhbmdlZCwgMTg2OSBpbnNlcnRpb25zKCspLCAyMjAgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseWJn d29ya2VyLmMKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9z cmMvc2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IDY3MGE1NDA2ZDYuLjEzYzllOGVjYTEgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRh bG9ncy5zZ21sCkBAIC03ODczLDExICs3ODczLDE1IEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxhY2Vh YmxlPiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxlPiZs CiAKICAgICAgPHJvdz4KICAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48 cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+Ci0gICAgICAgPHN0cnVjdGZpZWxkPnN1YnN0 cmVhbTwvc3RydWN0ZmllbGQ+IDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgPHN0cnVjdGZpZWxk PnN1YnN0cmVhbTwvc3RydWN0ZmllbGQ+IDx0eXBlPmNoYXI8L3R5cGU+CiAgICAgICA8L3BhcmE+ CiAgICAgICA8cGFyYT4KLSAgICAgICBJZiB0cnVlLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgYWxs b3cgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzCi0gICAgICAgdHJhbnNhY3Rpb25zCisgICAgICAg Q29udHJvbHMgaG93IHRvIGhhbmRsZSB0aGUgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRyYW5z YWN0aW9uczoKKyAgICAgICA8bGl0ZXJhbD5mPC9saXRlcmFsPiA9IGRpc2FsbG93IHN0cmVhbWlu ZyBvZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMsCisgICAgICAgPGxpdGVyYWw+dDwvbGl0ZXJh bD4gPSBzcGlsbCB0aGUgY2hhbmdlcyBvZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgdG8KKyAg ICAgICBkaXNrIGFuZCBhcHBseSBhdCBvbmNlIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21t aXR0ZWQgb24gdGhlCisgICAgICAgcHVibGlzaGVyLAorICAgICAgIDxsaXRlcmFsPnA8L2xpdGVy YWw+ID0gYXBwbHkgY2hhbmdlcyBkaXJlY3RseSB1c2luZyBhIGJhY2tncm91bmQgd29ya2VyCiAg ICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCAzN2ZkODAz ODhjLi42YmJkOTg2MTk1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC00OTcwLDYgKzQ5NzAsMzEgQEAgQU5ZIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJl cGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5 PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tYXgtYXBwbHktYmd3b3JrZXJzLXBlci1z dWJzY3JpcHRpb24iIHhyZWZsYWJlbD0ibWF4X2FwcGx5X2Jnd29ya2Vyc19wZXJfc3Vic2NyaXB0 aW9uIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPm1heF9hcHBseV9iZ3dvcmtlcnNfcGVyX3N1YnNj cmlwdGlvbjwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICAgPGluZGV4dGVy bT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5tYXhfYXBwbHlfYmd3b3JrZXJzX3Blcl9zdWJz Y3JpcHRpb248L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAg ICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAg PHBhcmE+CisgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGFwcGx5IGJhY2tncm91bmQgd29ya2Vy cyBwZXIgc3Vic2NyaXB0aW9uLiBUaGlzCisgICAgICAgIHBhcmFtZXRlciBjb250cm9scyB0aGUg YW1vdW50IG9mIHBhcmFsbGVsaXNtIG9mIHRoZSBzdHJlYW1pbmcgb2YKKyAgICAgICAgaW4tcHJv Z3Jlc3MgdHJhbnNhY3Rpb25zIHdoZW4gc3Vic2NyaXB0aW9uIHBhcmFtZXRlcgorICAgICAgICA8 bGl0ZXJhbD5zdHJlYW1pbmcgPSBwYXJhbGxlbDwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgor ICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXJzIGFyZSB0 YWtlbiBmcm9tIHRoZSBwb29sIGRlZmluZWQgYnkKKyAgICAgICAgPHZhcm5hbWU+bWF4X2xvZ2lj YWxfcmVwbGljYXRpb25fd29ya2VyczwvdmFybmFtZT4uCisgICAgICAgPC9wYXJhPgorICAgICAg IDxwYXJhPgorICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLiBUaGlzIHBhcmFtZXRlciBj YW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8 L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAorICAgICAgICBsaW5lLgor ICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5Pgor CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgIDwvc2VjdDI+CiAKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1y ZXBsaWNhdGlvbi5zZ21sCmluZGV4IGJkZjFlN2I3MjcuLjkyOTk3ZjkyOTkgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTE1Myw2ICsxMTUzLDE2IEBAIENPTlRFWFQ6 ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gInBnXzE2Mzk1 IiBkdXJpbmcgIklOU0VSCiAgICBtaWdodCBub3QgdmlvbGF0ZSBhbnkgY29uc3RyYWludC4gIFRo aXMgY2FuIGVhc2lseSBtYWtlIHRoZSBzdWJzY3JpYmVyCiAgICBpbmNvbnNpc3RlbnQuCiAgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gdGhlIHN0cmVhbWluZyBtb2RlIGlzIDxsaXRlcmFs PnBhcmFsbGVsPC9saXRlcmFsPiwgdGhlIGZpbmlzaCBMU04gb2YKKyAgIGZhaWxlZCB0cmFuc2Fj dGlvbnMgbWF5IG5vdCBiZSBsb2dnZWQuIEluIHRoYXQgY2FzZSwgaXQgbWF5IGJlIG5lY2Vzc2Fy eSB0bworICAgY2hhbmdlIHRoZSBzdHJlYW1pbmcgbW9kZSB0byA8bGl0ZXJhbD5vbjwvbGl0ZXJh bD4gYW5kIGNhdXNlIHRoZSBzYW1lCisgICBjb25mbGljdHMgYWdhaW4gc28gdGhlIGZpbmlzaCBM U04gb2YgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiB3aWxsIGJlIHdyaXR0ZW4KKyAgIHRvIHRoZSBz ZXJ2ZXIgbG9nLiBGb3IgdGhlIHVzYWdlIG9mIGZpbmlzaCBMU04sIHBsZWFzZSByZWZlciB0byA8 bGluaworICAgbGlua2VuZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9uIj48Y29tbWFuZD5BTFRFUiBT VUJTQ1JJUFRJT04gLi4uCisgICBTS0lQPC9jb21tYW5kPjwvbGluaz4uCisgIDwvcGFyYT4KICA8 L3NlY3QxPgogCiAgPHNlY3QxIGlkPSJsb2dpY2FsLXJlcGxpY2F0aW9uLXJlc3RyaWN0aW9ucyI+ CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCBiL2RvYy9zcmMvc2dtbC9w cm90b2NvbC5zZ21sCmluZGV4IGMwYjg5YTNjMDEuLjdlODhiYTk2MzEgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21s CkBAIC02ODA5LDYgKzY4MDksMjUgQEAgcHNxbCAiZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0aW9u PWRhdGFiYXNlIiAtYyAiSURFTlRJRllfU1lTVEVNOyIKICAgICAgICA8L2xpc3RpdGVtPgogICAg ICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+ SW50NjQgKFhMb2dSZWNQdHIpPC90ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBh cmE+CisgICAgICAgICBUaGUgTFNOIG9mIHRoZSBhYm9ydC4KKyAgICAgICAgPC9wYXJhPgorICAg ICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3Rl bnRyeT4KKyAgICAgICA8dGVybT5JbnQ2NCAoVGltZXN0YW1wVHopPC90ZXJtPgorICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBBYm9ydCB0aW1lc3RhbXAgb2YgdGhl IHRyYW5zYWN0aW9uLiBUaGUgdmFsdWUgaXMgaW4gbnVtYmVyCisgICAgICAgICBvZiBtaWNyb3Nl Y29uZHMgc2luY2UgUG9zdGdyZVNRTCBlcG9jaCAoMjAwMC0wMS0wMSkuCisgICAgICAgIDwvcGFy YT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgIDx2 YXJsaXN0ZW50cnk+CiAgICAgICAgPHRlcm0+SW50MzIgKFRyYW5zYWN0aW9uSWQpPC90ZXJtPgog ICAgICAgIDxsaXN0aXRlbT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1 YnNjcmlwdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNn bWwKaW5kZXggMzRiMzI2NGIyNi4uNzFkZDRhY2E4MSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfc3Vic2NyaXB0aW9uLnNnbWwKQEAgLTIxNywxMyArMjE3LDI5IEBAIENSRUFURSBTVUJTQ1JJ UFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnN1YnNjcmlwdGlvbl9uYW1lPC9y ZXBsYWNlYWJsCiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAgICA8dmFybGlzdGVudHJ5 PgotICAgICAgICA8dGVybT48bGl0ZXJhbD5zdHJlYW1pbmc8L2xpdGVyYWw+ICg8dHlwZT5ib29s ZWFuPC90eXBlPik8L3Rlcm0+CisgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnN0cmVhbWluZzwvbGl0 ZXJhbD4gKDx0eXBlPmVudW08L3R5cGU+KTwvdGVybT4KICAgICAgICAgPGxpc3RpdGVtPgogICAg ICAgICAgPHBhcmE+CiAgICAgICAgICAgU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlIHN0cmVh bWluZyBvZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMKLSAgICAgICAgICBmb3IgdGhpcyBzdWJz Y3JpcHRpb24uICBCeSBkZWZhdWx0LCBhbGwgdHJhbnNhY3Rpb25zCi0gICAgICAgICAgYXJlIGZ1 bGx5IGRlY29kZWQgb24gdGhlIHB1Ymxpc2hlciBhbmQgb25seSB0aGVuIHNlbnQgdG8gdGhlCi0g ICAgICAgICAgc3Vic2NyaWJlciBhcyBhIHdob2xlLgorICAgICAgICAgIGZvciB0aGlzIHN1YnNj cmlwdGlvbi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4sCisg ICAgICAgICAgbWVhbmluZyBhbGwgdHJhbnNhY3Rpb25zIGFyZSBmdWxseSBkZWNvZGVkIG9uIHRo ZSBwdWJsaXNoZXIgYW5kIG9ubHkKKyAgICAgICAgICB0aGVuIHNlbnQgdG8gdGhlIHN1YnNjcmli ZXIgYXMgYSB3aG9sZS4KKyAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgPHBhcmE+CisgICAg ICAgICAgSWYgc2V0IHRvIDxsaXRlcmFsPm9uPC9saXRlcmFsPiwgdGhlIGluY29taW5nIGNoYW5n ZXMgYXJlIHdyaXR0ZW4gdG8KKyAgICAgICAgICB0ZW1wb3JhcnkgZmlsZXMgYW5kIHRoZW4gYXBw bGllZCBvbmx5IGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBpcworICAgICAgICAgIGNvbW1pdHRlZCBv biB0aGUgcHVibGlzaGVyLgorICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICBJZiBzZXQgdG8gPGxpdGVyYWw+cGFyYWxsZWw8L2xpdGVyYWw+LCBpbmNvbWluZyBj aGFuZ2VzIGFyZSBkaXJlY3RseQorICAgICAgICAgIGFwcGxpZWQgdmlhIG9uZSBvZiB0aGUgYXBw bHkgYmFja2dyb3VuZCB3b3JrZXJzLCBpZiBhdmFpbGFibGUuIElmIG5vCisgICAgICAgICAgYmFj a2dyb3VuZCB3b3JrZXIgaXMgZnJlZSB0byBoYW5kbGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRo ZW4gdGhlCisgICAgICAgICAgY2hhbmdlcyBhcmUgd3JpdHRlbiB0byB0ZW1wb3JhcnkgZmlsZXMg YW5kIGFwcGxpZWQgYWZ0ZXIgdGhlCisgICAgICAgICAgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVk LiBOb3RlIHRoYXQgaWYgYW4gZXJyb3IgaGFwcGVucyB3aGVuCisgICAgICAgICAgYXBwbHlpbmcg Y2hhbmdlcyBpbiBhIGJhY2tncm91bmQgd29ya2VyLCB0aGUgZmluaXNoIExTTiBvZiB0aGUKKyAg ICAgICAgICByZW1vdGUgdHJhbnNhY3Rpb24gbWlnaHQgbm90IGJlIHJlcG9ydGVkIGluIHRoZSBz ZXJ2ZXIgbG9nLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgogICAgICAg IDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCmluZGV4IDExNmRlMTE3 NWIuLjNlNjFhNTdiNTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hh Y3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKQEAgLTE3MTEsNiAr MTcxMSw3IEBAIFJlY29yZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1YlhhY3QpCiAJaW50CQkJ bmNoaWxkcmVuOwogCVRyYW5zYWN0aW9uSWQgKmNoaWxkcmVuOwogCVRpbWVzdGFtcFR6IHhhY3Rf dGltZTsKKwlib29sCQlyZXBsb3JpZ2luOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlbid0IGJlZW4g YXNzaWduZWQgYW4gWElELCBub2JvZHkgd2lsbCBjYXJlIHdoZXRoZXIgd2UgYWJvcnRlZApAQCAt MTc0MSw2ICsxNzQyLDEzIEBAIFJlY29yZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1YlhhY3Qp CiAJCWVsb2coUEFOSUMsICJjYW5ub3QgYWJvcnQgdHJhbnNhY3Rpb24gJXUsIGl0IHdhcyBhbHJl YWR5IGNvbW1pdHRlZCIsCiAJCQkgeGlkKTsKIAorCS8qCisJICogQXJlIHdlIHVzaW5nIHRoZSBy ZXBsaWNhdGlvbiBvcmlnaW5zIGZlYXR1cmU/ICBPciwgaW4gb3RoZXIgd29yZHMsCisJICogYXJl IHdlIHJlcGxheWluZyByZW1vdGUgYWN0aW9ucz8KKwkgKi8KKwlyZXBsb3JpZ2luID0gKHJlcGxv cmlnaW5fc2Vzc2lvbl9vcmlnaW4gIT0gSW52YWxpZFJlcE9yaWdpbklkICYmCisJCQkJICByZXBs b3JpZ2luX3Nlc3Npb25fb3JpZ2luICE9IERvTm90UmVwbGljYXRlSWQpOworCiAJLyogRmV0Y2gg dGhlIGRhdGEgd2UgbmVlZCBmb3IgdGhlIGFib3J0IHJlY29yZCAqLwogCW5yZWxzID0gc21nckdl dFBlbmRpbmdEZWxldGVzKGZhbHNlLCAmcmVscyk7CiAJbmNoaWxkcmVuID0geGFjdEdldENvbW1p dHRlZENoaWxkcmVuKCZjaGlsZHJlbik7CkBAIC0xNzY1LDYgKzE3NzMsMTEgQEAgUmVjb3JkVHJh bnNhY3Rpb25BYm9ydChib29sIGlzU3ViWGFjdCkKIAkJCQkJICAgTXlYYWN0RmxhZ3MsIEludmFs aWRUcmFuc2FjdGlvbklkLAogCQkJCQkgICBOVUxMKTsKIAorCWlmIChyZXBsb3JpZ2luKQorCQkv KiBNb3ZlIExTTnMgZm9yd2FyZCBmb3IgdGhpcyByZXBsaWNhdGlvbiBvcmlnaW4gKi8KKwkJcmVw bG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24sCisJ CQkJCQkJCSAgIFhhY3RMYXN0UmVjRW5kKTsKKwogCS8qCiAJICogUmVwb3J0IHRoZSBsYXRlc3Qg YXN5bmMgYWJvcnQgTFNOLCBzbyB0aGF0IHRoZSBXQUwgd3JpdGVyIGtub3dzIHRvCiAJICogZmx1 c2ggdGhpcyBhYm9ydC4gVGhlcmUncyBub3RoaW5nIHRvIGJlIGdhaW5lZCBieSBkZWxheWluZyB0 aGlzLCBzaW5jZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9u Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCmluZGV4IGJk YzEyMDg3MjQuLmQ0YjI2MTZlZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1 YnNjcmlwdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25j bWRzLmMKQEAgLTgzLDcgKzgzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU3ViT3B0cwogCWJvb2wJCWNv cHlfZGF0YTsKIAlib29sCQlyZWZyZXNoOwogCWJvb2wJCWJpbmFyeTsKLQlib29sCQlzdHJlYW1p bmc7CisJY2hhcgkJc3RyZWFtaW5nOwogCWJvb2wJCXR3b3BoYXNlOwogCWJvb2wJCWRpc2FibGVv bmVycjsKIAlYTG9nUmVjUHRyCWxzbjsKQEAgLTk1LDYgKzk1LDYyIEBAIHN0YXRpYyBMaXN0ICpt ZXJnZV9wdWJsaWNhdGlvbnMoTGlzdCAqb2xkcHVibGlzdCwgTGlzdCAqbmV3cHVibGlzdCwgYm9v bCBhZGRwdWIsCiBzdGF0aWMgdm9pZCBSZXBvcnRTbG90Q29ubmVjdGlvbkVycm9yKExpc3QgKnJz dGF0ZXMsIE9pZCBzdWJpZCwgY2hhciAqc2xvdG5hbWUsIGNoYXIgKmVycik7CiAKIAorLyoKKyAq IEV4dHJhY3QgdGhlIHN0cmVhbWluZyBtb2RlIHZhbHVlIGZyb20gYSBEZWZFbGVtLiAgVGhpcyBp cyBsaWtlCisgKiBkZWZHZXRCb29sZWFuKCkgYnV0IGFsc28gYWNjZXB0cyB0aGUgc3BlY2lhbCB2 YWx1ZSBvZiAicGFyYWxsZWwiLgorICovCitzdGF0aWMgY2hhcgorZGVmR2V0U3RyZWFtaW5nTW9k ZShEZWZFbGVtICpkZWYpCit7CisJLyoKKwkgKiBJZiBubyBwYXJhbWV0ZXIgdmFsdWUgZ2l2ZW4s IGFzc3VtZSAidHJ1ZSIgaXMgbWVhbnQuCisJICovCisJaWYgKGRlZi0+YXJnID09IE5VTEwpCisJ CXJldHVybiBTVUJTVFJFQU1fT047CisKKwkvKgorCSAqIEFsbG93IDAsIDEsICJmYWxzZSIsICJ0 cnVlIiwgIm9mZiIsICJvbiIgb3IgInBhcmFsbGVsIi4KKwkgKi8KKwlzd2l0Y2ggKG5vZGVUYWco ZGVmLT5hcmcpKQorCXsKKwkJY2FzZSBUX0ludGVnZXI6CisJCQlzd2l0Y2ggKGludFZhbChkZWYt PmFyZykpCisJCQl7CisJCQkJY2FzZSAwOgorCQkJCQlyZXR1cm4gU1VCU1RSRUFNX09GRjsKKwkJ CQljYXNlIDE6CisJCQkJCXJldHVybiBTVUJTVFJFQU1fT047CisJCQkJZGVmYXVsdDoKKwkJCQkJ Lyogb3RoZXJ3aXNlLCBlcnJvciBvdXQgYmVsb3cgKi8KKwkJCQkJYnJlYWs7CisJCQl9CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCXsKKwkJCQljaGFyCSAgICpzdmFsID0gZGVmR2V0U3RyaW5n KGRlZik7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBzZXQgb2Ygc3RyaW5ncyBhY2NlcHRlZCBoZXJl IHNob3VsZCBtYXRjaCB1cCB3aXRoIHRoZQorCQkJCSAqIGdyYW1tYXIncyBvcHRfYm9vbGVhbl9v cl9zdHJpbmcgcHJvZHVjdGlvbi4KKwkJCQkgKi8KKwkJCQlpZiAocGdfc3RyY2FzZWNtcChzdmFs LCAiZmFsc2UiKSA9PSAwIHx8CisJCQkJCXBnX3N0cmNhc2VjbXAoc3ZhbCwgIm9mZiIpID09IDAp CisJCQkJCXJldHVybiBTVUJTVFJFQU1fT0ZGOworCQkJCWlmIChwZ19zdHJjYXNlY21wKHN2YWws ICJ0cnVlIikgPT0gMCB8fAorCQkJCQlwZ19zdHJjYXNlY21wKHN2YWwsICJvbiIpID09IDApCisJ CQkJCXJldHVybiBTVUJTVFJFQU1fT047CisJCQkJaWYgKHBnX3N0cmNhc2VjbXAoc3ZhbCwgInBh cmFsbGVsIikgPT0gMCkKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9QQVJBTExFTDsKKwkJCX0KKwkJ CWJyZWFrOworCX0KKwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLAorCQkJIGVycm1zZygiJXMgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlIG9yIFwicGFy YWxsZWxcIiIsCisJCQkJCWRlZi0+ZGVmbmFtZSkpKTsKKwlyZXR1cm4gU1VCU1RSRUFNX09GRjsJ CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KK30KKwogLyoKICAqIENvbW1vbiBvcHRpb24gcGFy c2luZyBmdW5jdGlvbiBmb3IgQ1JFQVRFIGFuZCBBTFRFUiBTVUJTQ1JJUFRJT04gY29tbWFuZHMu CiAgKgpAQCAtMTMyLDcgKzE4OCw3IEBAIHBhcnNlX3N1YnNjcmlwdGlvbl9vcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwgTGlzdCAqc3RtdF9vcHRpb25zLAogCWlmIChJc1NldChzdXBwb3J0ZWRf b3B0cywgU1VCT1BUX0JJTkFSWSkpCiAJCW9wdHMtPmJpbmFyeSA9IGZhbHNlOwogCWlmIChJc1Nl dChzdXBwb3J0ZWRfb3B0cywgU1VCT1BUX1NUUkVBTUlORykpCi0JCW9wdHMtPnN0cmVhbWluZyA9 IGZhbHNlOworCQlvcHRzLT5zdHJlYW1pbmcgPSBTVUJTVFJFQU1fT0ZGOwogCWlmIChJc1NldChz dXBwb3J0ZWRfb3B0cywgU1VCT1BUX1RXT1BIQVNFX0NPTU1JVCkpCiAJCW9wdHMtPnR3b3BoYXNl ID0gZmFsc2U7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRfRElTQUJMRV9PTl9F UlIpKQpAQCAtMjMzLDcgKzI4OSw3IEBAIHBhcnNlX3N1YnNjcmlwdGlvbl9vcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwgTGlzdCAqc3RtdF9vcHRpb25zLAogCQkJCWVycm9yQ29uZmxpY3RpbmdE ZWZFbGVtKGRlZmVsLCBwc3RhdGUpOwogCiAJCQlvcHRzLT5zcGVjaWZpZWRfb3B0cyB8PSBTVUJP UFRfU1RSRUFNSU5HOwotCQkJb3B0cy0+c3RyZWFtaW5nID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7 CisJCQlvcHRzLT5zdHJlYW1pbmcgPSBkZWZHZXRTdHJlYW1pbmdNb2RlKGRlZmVsKTsKIAkJfQog CQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0d29fcGhhc2UiKSA9PSAwKQogCQl7 CkBAIC02MDAsNyArNjU2LDcgQEAgQ3JlYXRlU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAl2YWx1ZXNbQW51bV9wZ19zdWJzY3Jp cHRpb25fc3Vib3duZXIgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0ob3duZXIpOwogCXZhbHVlc1tB bnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJlbmFibGVkIC0gMV0gPSBCb29sR2V0RGF0dW0ob3B0cy5l bmFibGVkKTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3ViYmluYXJ5IC0gMV0gPSBC b29sR2V0RGF0dW0ob3B0cy5iaW5hcnkpOwotCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9z dWJzdHJlYW0gLSAxXSA9IEJvb2xHZXREYXR1bShvcHRzLnN0cmVhbWluZyk7CisJdmFsdWVzW0Fu dW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0gQ2hhckdldERhdHVtKG9wdHMuc3Ry ZWFtaW5nKTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3VidHdvcGhhc2VzdGF0ZSAt IDFdID0KIAkJQ2hhckdldERhdHVtKG9wdHMudHdvcGhhc2UgPwogCQkJCQkgTE9HSUNBTFJFUF9U V09QSEFTRV9TVEFURV9QRU5ESU5HIDoKQEAgLTEwNTksNyArMTExNSw3IEBAIEFsdGVyU3Vic2Ny aXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJTdWJzY3JpcHRpb25TdG10ICpzdG10LAog CQkJCWlmIChJc1NldChvcHRzLnNwZWNpZmllZF9vcHRzLCBTVUJPUFRfU1RSRUFNSU5HKSkKIAkJ CQl7CiAJCQkJCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9Ci0J CQkJCQlCb29sR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOworCQkJCQkJQ2hhckdldERhdHVtKG9w dHMuc3RyZWFtaW5nKTsKIAkJCQkJcmVwbGFjZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3Ry ZWFtIC0gMV0gPSB0cnVlOwogCQkJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9iZ3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCmluZGV4 IDQwNjAxYWVmZDkuLjQwY2NiODk5M2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKQEAg LTEyOCw2ICsxMjgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0CiAJfSwKIAl7CiAJCSJBcHBseVdv cmtlck1haW4iLCBBcHBseVdvcmtlck1haW4KKwl9LAorCXsKKwkJIkFwcGx5Qmd3b3JrZXJNYWlu IiwgQXBwbHlCZ3dvcmtlck1haW4KIAl9CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9NYWtlZmlsZQppbmRleCBjNGUyZmRlYjcxLi5jYmZiNWQ3OTRlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAk KHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogb3ZlcnJpZGUgQ1BQRkxBR1MgOj0g LUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9IFwKKwlhcHBseWJnd29ya2VyLm8gXAog CWRlY29kZS5vIFwKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseWJnd29ya2VyLmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5Ymd3b3JrZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi5hYTIyMjQ5MGEwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseWJnd29ya2VyLmMKQEAgLTAsMCArMSw4MDIg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogYXBwbHliZ3dvcmtlci5jCisgKiAgICAgU3VwcG9y dCByb3V0aW5lcyBmb3IgYXBwbHlpbmcgeGFjdCBieSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlcgor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvYXBwbHliZ3dvcmtlci5jCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5z IHJvdXRpbmVzIHRoYXQgYXJlIGludGVuZGVkIHRvIHN1cHBvcnQgc2V0dGluZyB1cCwgdXNpbmcs CisgKiBhbmQgdGVhcmluZyBkb3duIGEgQXBwbHlCZ3dvcmtlclN0YXRlLgorICoKKyAqIFJlZmVy IHRvIHRoZSBjb21tZW50cyBpbiBmaWxlIGhlYWRlciBvZiBsb2dpY2FsL3dvcmtlci5jIHRvIHNl ZSBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlci4KKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu Y2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCisjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNs dWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWx3b3JrZXIuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dv cmtlcl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAi dXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0 aWxzL3Jlc293bmVyLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKworI2RlZmluZSBQ R19MT0dJQ0FMX0FQUExZX1NITV9NQUdJQyAweDc5ZmIyNDQ3IC8vIFRPRE8gQ29uc2lkZXIgY2hh bmdlCisKKy8qCisgKiBEU00ga2V5cyBmb3IgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuICBVbmxp a2Ugb3RoZXIgcGFyYWxsZWwgZXhlY3V0aW9uIGNvZGUsCisgKiBzaW5jZSB3ZSBkb24ndCBuZWVk IHRvIHdvcnJ5IGFib3V0IERTTSBrZXlzIGNvbmZsaWN0aW5nIHdpdGggcGxhbl9ub2RlX2lkIHdl CisgKiBjYW4gdXNlIHNtYWxsIGludGVnZXJzLgorICovCisjZGVmaW5lIEFQUExZX0JHV09SS0VS X0tFWV9TSEFSRUQJMQorI2RlZmluZSBBUFBMWV9CR1dPUktFUl9LRVlfTVEJCTIKKworLyogUXVl dWUgc2l6ZSBvZiBEU00sIDE2IE1CIGZvciBub3cuICovCisjZGVmaW5lIERTTV9RVUVVRV9TSVpF CTE2MDAwMDAwMAorCisvKgorICogVGhlcmUgYXJlIHRocmVlIGZpZWxkcyBpbiBtZXNzYWdlOiBz dGFydF9sc24sIGVuZF9sc24gYW5kIHNlbmRfdGltZS4gQmVjYXVzZQorICogd2UgaGF2ZSB1cGRh dGVkIHRoZXNlIHN0YXRpc3RpY3MgaW4gYXBwbHkgd29ya2VyLCB3ZSBjb3VsZCBpZ25vcmUgdGhl c2UKKyAqIGZpZWxkcyBpbiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlci4gKHNlZSBmdW5jdGlvbiBM b2dpY2FsUmVwQXBwbHlMb29wKQorICovCisjZGVmaW5lIElHTk9SRV9TSVpFX0lOX01FU1NBR0Ug KDMgKiBzaXplb2YodWludDY0KSkKKworLyoKKyAqIEVudHJ5IGZvciBhIGhhc2ggdGFibGUgd2Ug dXNlIHRvIG1hcCBmcm9tIHhpZCB0byBvdXIgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIKKyAqIHN0 YXRlLgorICovCit0eXBlZGVmIHN0cnVjdCBBcHBseUJnd29ya2VyRW50cnkKK3sKKwlUcmFuc2Fj dGlvbklkIHhpZDsKKwlBcHBseUJnd29ya2VyU3RhdGUgKndzdGF0ZTsKK30gQXBwbHlCZ3dvcmtl ckVudHJ5OworCisvKiBBcHBseSBiYWNrZ3JvdW5kIHdvcmtlcnMgaGFzaCB0YWJsZSAoaW5pdGlh bGl6ZWQgb24gZmlyc3QgdXNlKSAqLworc3RhdGljIEhUQUIgKkFwcGx5V29ya2Vyc0hhc2ggPSBO VUxMOworc3RhdGljIExpc3QgKkFwcGx5V29ya2Vyc0ZyZWVMaXN0ID0gTklMOworc3RhdGljIExp c3QgKkFwcGx5V29ya2Vyc0xpc3QgPSBOSUw7CisKKy8qCisgKiBJbmZvcm1hdGlvbiBzaGFyZWQg YmV0d2VlbiBtYWluIGFwcGx5IHdvcmtlciBhbmQgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuCisg Ki8KK3ZvbGF0aWxlIEFwcGx5Qmd3b3JrZXJTaGFyZWQgKk15UGFyYWxsZWxTaGFyZWQgPSBOVUxM OworCitMaXN0CSAgICpzdWJ4YWN0bGlzdCA9IE5JTDsKKworc3RhdGljIGJvb2wgYXBwbHlfYmd3 b3JrZXJfY2FuX3N0YXJ0KFRyYW5zYWN0aW9uSWQgeGlkKTsKK3N0YXRpYyBBcHBseUJnd29ya2Vy U3RhdGUgKmFwcGx5X2Jnd29ya2VyX3NldHVwKHZvaWQpOworc3RhdGljIHZvaWQgYXBwbHlfYmd3 b3JrZXJfc2V0dXBfZHNtKEFwcGx5Qmd3b3JrZXJTdGF0ZSAqd3N0YXRlKTsKKworLyoKKyAqIENo ZWNrIGlmIHN0YXJ0aW5nIGEgbmV3IGFwcGx5IGJhY2tncm91bmQgd29ya2VyIGlzIGFsbG93ZWQu CisgKi8KK3N0YXRpYyBib29sCithcHBseV9iZ3dvcmtlcl9jYW5fc3RhcnQoVHJhbnNhY3Rpb25J ZCB4aWQpCit7CisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKQorCQlyZXR1cm4gZmFs c2U7CisKKwkvKgorCSAqIERvbid0IHN0YXJ0IGEgbmV3IGJhY2tncm91bmQgd29ya2VyIGlmIG5v dCBpbiBzdHJlYW1pbmcgcGFyYWxsZWwgbW9kZS4KKwkgKi8KKwlpZiAoTXlTdWJzY3JpcHRpb24t PnN0cmVhbSAhPSBTVUJTVFJFQU1fUEFSQUxMRUwpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJ ICogRG9uJ3Qgc3RhcnQgYSBuZXcgYmFja2dyb3VuZCB3b3JrZXIgaWYgdXNlciBoYXMgc2V0IHNr aXBsc24gYXMgaXQncworCSAqIHBvc3NpYmxlIHRoYXQgdXNlciB3YW50IHRvIHNraXAgdGhlIHN0 cmVhbWluZyB0cmFuc2FjdGlvbi4gRm9yCisJICogc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCB3ZSBu ZWVkIHRvIHNwaWxsIHRoZSB0cmFuc2FjdGlvbiB0byBkaXNrIHNvIHRoYXQKKwkgKiB3ZSBjYW4g Z2V0IHRoZSBsYXN0IExTTiBvZiB0aGUgdHJhbnNhY3Rpb24gdG8ganVkZ2Ugd2hldGhlciB0byBz a2lwCisJICogYmVmb3JlIHN0YXJ0aW5nIHRvIGFwcGx5IHRoZSBjaGFuZ2UuCisJICovCisJaWYg KCFYTG9nUmVjUHRySXNJbnZhbGlkKE15U3Vic2NyaXB0aW9uLT5za2lwbHNuKSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBGb3Igc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBi ZWluZyBhcHBsaWVkIGluIGFwcGx5IGJhY2tncm91bmQKKwkgKiB3b3JrZXIsIHdlIGNhbm5vdCBk ZWNpZGUgd2hldGhlciB0byBhcHBseSB0aGUgY2hhbmdlIGZvciBhIHJlbGF0aW9uCisJICogdGhh dCBpcyBub3QgaW4gdGhlIFJFQURZIHN0YXRlIChzZWUgc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9y X3JlbCkgYXMgd2UKKwkgKiB3b24ndCBrbm93IHJlbW90ZV9maW5hbF9sc24gYnkgdGhhdCB0aW1l LiBTbywgd2UgZG9uJ3Qgc3RhcnQgbmV3IGFwcGx5CisJICogYmFja2dyb3VuZCB3b3JrZXIgaW4g dGhpcyBjYXNlLgorCSAqLworCWlmICghQWxsVGFibGVzeW5jc1JlYWR5KCkpCisJCXJldHVybiBm YWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogVHJ5IHRvIHN0YXJ0IGFuIGFwcGx5 IGJhY2tncm91bmQgd29ya2VyIGFuZCwgaWYgc3VjY2Vzc2Z1bCwgY2FjaGUgaXQgaW4KKyAqIEFw cGx5V29ya2Vyc0hhc2gga2V5ZWQgYnkgdGhlIHNwZWNpZmllZCB4aWQuCisgKi8KK0FwcGx5Qmd3 b3JrZXJTdGF0ZSAqCithcHBseV9iZ3dvcmtlcl9zdGFydChUcmFuc2FjdGlvbklkIHhpZCkKK3sK Kwlib29sCQlmb3VuZDsKKwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbjsKKwlBcHBseUJnd29ya2VyU3Rh dGUgKndzdGF0ZTsKKwlBcHBseUJnd29ya2VyRW50cnkgKmVudHJ5ID0gTlVMTDsKKworCWlmICgh YXBwbHlfYmd3b3JrZXJfY2FuX3N0YXJ0KHhpZCkpCisJCXJldHVybiBOVUxMOworCisJLyogRmly c3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXplIGFwcGx5IHdvcmtlcnMgaGFzaHRhYmxlICovCisJ aWYgKEFwcGx5V29ya2Vyc0hhc2ggPT0gTlVMTCkKKwl7CisJCUhBU0hDVEwJCWN0bDsKKworCQlN ZW1TZXQoJmN0bCwgMCwgc2l6ZW9mKGN0bCkpOworCQljdGwua2V5c2l6ZSA9IHNpemVvZihUcmFu c2FjdGlvbklkKTsKKwkJY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihBcHBseUJnd29ya2VyRW50cnkp OworCQljdGwuaGN4dCA9IEFwcGx5Q29udGV4dDsKKworCQlBcHBseVdvcmtlcnNIYXNoID0gaGFz aF9jcmVhdGUoImxvZ2ljYWwgYXBwbHkgd29ya2VycyBoYXNoIiwgOCwgJmN0bCwKKwkJCQkJCQkJ CSAgIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NPTlRFWFQpOworCX0KKworCS8qCisJ ICogTm93LCB3ZSB0cnkgdG8gZ2V0IGFuIGFwcGx5IGJhY2tncm91bmQgd29ya2VyLiBJZiB0aGVy ZSBpcyBhdCBsZWFzdCBvbmUKKwkgKiB3b3JrZXIgaW4gdGhlIGZyZWUgbGlzdCwgdGhlbiB0YWtl IG9uZS4gT3RoZXJ3aXNlLCB3ZSB0cnkgdG8gc3RhcnQgYQorCSAqIG5ldyBhcHBseSBiYWNrZ3Jv dW5kIHdvcmtlci4KKwkgKi8KKwlpZiAobGlzdF9sZW5ndGgoQXBwbHlXb3JrZXJzRnJlZUxpc3Qp ID4gMCkKKwl7CisJCXdzdGF0ZSA9IChBcHBseUJnd29ya2VyU3RhdGUgKikgbGxhc3QoQXBwbHlX b3JrZXJzRnJlZUxpc3QpOworCQlBcHBseVdvcmtlcnNGcmVlTGlzdCA9IGxpc3RfZGVsZXRlX2xh c3QoQXBwbHlXb3JrZXJzRnJlZUxpc3QpOworCQlBc3NlcnQod3N0YXRlLT5zaGFyZWQtPnN0YXR1 cyA9PSBBUFBMWV9CR1dPUktFUl9GSU5JU0hFRCk7CisJfQorCWVsc2UKKwl7CisJCXdzdGF0ZSA9 IGFwcGx5X2Jnd29ya2VyX3NldHVwKCk7CisKKwkJaWYgKHdzdGF0ZSA9PSBOVUxMKQorCQkJcmV0 dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBDcmVhdGUgZW50cnkgZm9yIHJlcXVlc3RlZCB0cmFu c2FjdGlvbi4KKwkgKi8KKwllbnRyeSA9IGhhc2hfc2VhcmNoKEFwcGx5V29ya2Vyc0hhc2gsICZ4 aWQsIEhBU0hfRU5URVIsICZmb3VuZCk7CisJaWYgKGZvdW5kKQorCQllbG9nKEVSUk9SLCAiaGFz aCB0YWJsZSBjb3JydXB0ZWQiKTsKKworCS8qIEZpbGwgdXAgdGhlIGhhc2ggZW50cnkgKi8KKwl3 c3RhdGUtPnNoYXJlZC0+c3RhdHVzID0gQVBQTFlfQkdXT1JLRVJfQlVTWTsKKworCXNlcnZlcl92 ZXJzaW9uID0gd2FscmN2X3NlcnZlcl92ZXJzaW9uKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4pOwor CXdzdGF0ZS0+c2hhcmVkLT5zZXJ2ZXJfdmVyc2lvbiA9CisJCXNlcnZlcl92ZXJzaW9uID49IDE2 MDAwMCA/IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNIDoKKwkJ c2VydmVyX3ZlcnNpb24gPj0gMTUwMDAwID8gTE9HSUNBTFJFUF9QUk9UT19UV09QSEFTRV9WRVJT SU9OX05VTSA6CisJCXNlcnZlcl92ZXJzaW9uID49IDE0MDAwMCA/IExPR0lDQUxSRVBfUFJPVE9f U1RSRUFNX1ZFUlNJT05fTlVNIDoKKwkJTE9HSUNBTFJFUF9QUk9UT19WRVJTSU9OX05VTTsKKwor CXdzdGF0ZS0+c2hhcmVkLT5zdHJlYW1feGlkID0geGlkOworCWVudHJ5LT53c3RhdGUgPSB3c3Rh dGU7CisJZW50cnktPnhpZCA9IHhpZDsKKworCXJldHVybiB3c3RhdGU7Cit9CisKKy8qCisgKiBU cnkgdG8gbG9vayB1cCB3b3JrZXIgaW5zaWRlIEFwcGx5V29ya2Vyc0hhc2ggZm9yIHJlcXVlc3Rl ZCB4aWQuCisgKi8KK0FwcGx5Qmd3b3JrZXJTdGF0ZSAqCithcHBseV9iZ3dvcmtlcl9maW5kKFRy YW5zYWN0aW9uSWQgeGlkKQoreworCWJvb2wJCWZvdW5kOworCUFwcGx5Qmd3b3JrZXJFbnRyeSAq ZW50cnkgPSBOVUxMOworCisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKQorCQlyZXR1 cm4gTlVMTDsKKworCWlmIChBcHBseVdvcmtlcnNIYXNoID09IE5VTEwpCisJCXJldHVybiBOVUxM OworCisJLyoKKwkgKiBGaW5kIGVudHJ5IGZvciByZXF1ZXN0ZWQgdHJhbnNhY3Rpb24uCisJICov CisJZW50cnkgPSBoYXNoX3NlYXJjaChBcHBseVdvcmtlcnNIYXNoLCAmeGlkLCBIQVNIX0ZJTkQs ICZmb3VuZCk7CisJaWYgKGZvdW5kKQorCXsKKwkJY2hhciBzdGF0dXMgPSBlbnRyeS0+d3N0YXRl LT5zaGFyZWQtPnN0YXR1czsKKworCQkvKiBJZiBhbnkgd29ya2VycyAob3IgdGhlIHBvc3RtYXN0 ZXIpIGhhdmUgZGllZCwgd2UgaGF2ZSBmYWlsZWQuICovCisJCWlmIChzdGF0dXMgPT0gQVBQTFlf QkdXT1JLRVJfRVhJVCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf T0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJiYWNrZ3Jv dW5kIHdvcmtlciAldSBmYWlsZWQgdG8gYXBwbHkgdHJhbnNhY3Rpb24gJXUiLAorCQkJCQkJCWVu dHJ5LT53c3RhdGUtPnNoYXJlZC0+biwKKwkJCQkJCQllbnRyeS0+d3N0YXRlLT5zaGFyZWQtPnN0 cmVhbV94aWQpKSk7CisKKwkJQXNzZXJ0KHN0YXR1cyA9PSBBUFBMWV9CR1dPUktFUl9CVVNZKTsK KworCQlyZXR1cm4gZW50cnktPndzdGF0ZTsKKwl9CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30K KworLyoKKyAqIEFkZCB0aGUgd29ya2VyIHRvIHRoZSBmcmVlIGxpc3QgYW5kIHJlbW92ZSB0aGUg ZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZS4KKyAqLwordm9pZAorYXBwbHlfYmd3b3JrZXJfZnJl ZShBcHBseUJnd29ya2VyU3RhdGUgKndzdGF0ZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN0eDsK KwlUcmFuc2FjdGlvbklkIHhpZCA9IHdzdGF0ZS0+c2hhcmVkLT5zdHJlYW1feGlkOworCisJQXNz ZXJ0KHdzdGF0ZS0+c2hhcmVkLT5zdGF0dXMgPT0gQVBQTFlfQkdXT1JLRVJfRklOSVNIRUQpOwor CisJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwloYXNo X3NlYXJjaChBcHBseVdvcmtlcnNIYXNoLCAmeGlkLCBIQVNIX1JFTU9WRSwgTlVMTCk7CisKKwll bG9nKERFQlVHMSwgImFkZGluZyBmaW5pc2hlZCBhcHBseSB3b3JrZXIgIyV1IGZvciB4aWQgJXUg dG8gdGhlIGZyZWUgbGlzdCIsCisJCSB3c3RhdGUtPnNoYXJlZC0+biwgd3N0YXRlLT5zaGFyZWQt PnN0cmVhbV94aWQpOworCisJQXBwbHlXb3JrZXJzRnJlZUxpc3QgPSBsYXBwZW5kKEFwcGx5V29y a2Vyc0ZyZWVMaXN0LCB3c3RhdGUpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7 Cit9CisKKy8qIEFwcGx5IEJhY2tncm91bmQgV29ya2VyIG1haW4gbG9vcCAqLworc3RhdGljIHZv aWQKK0xvZ2ljYWxBcHBseUJnd0xvb3Aoc2htX21xX2hhbmRsZSAqbXFoLCB2b2xhdGlsZSBBcHBs eUJnd29ya2VyU2hhcmVkICpzaGFyZWQpCit7CisJc2htX21xX3Jlc3VsdCBzaG1xX3JlczsKKwlQ R1BST0MJICAgKnJlZ2lzdHJhbnQ7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7 CisKKwlyZWdpc3RyYW50ID0gQmFja2VuZFBpZEdldFByb2MoTXlCZ3dvcmtlckVudHJ5LT5iZ3df bm90aWZ5X3BpZCk7CisJU2V0TGF0Y2goJnJlZ2lzdHJhbnQtPnByb2NMYXRjaCk7CisKKwkvKgor CSAqIFB1c2ggYXBwbHkgZXJyb3IgY29udGV4dCBjYWxsYmFjay4gRmllbGRzIHdpbGwgYmUgZmls bGVkIGFwcGx5aW5nIGEKKwkgKiBjaGFuZ2UuCisJICovCisJZXJyY2FsbGJhY2suY2FsbGJhY2sg PSBhcHBseV9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2Nv bnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCWZv ciAoOzspCisJeworCQl2b2lkCSAgICpkYXRhOworCQlTaXplCQlsZW47CisJCWludAkJCWM7CisJ CVN0cmluZ0luZm9EYXRhIHM7CisJCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCisJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CisKKwkJLyogRW5zdXJlIHdlIGFyZSByZWFkaW5nIHRoZSBkYXRhIGlu dG8gb3VyIG1lbW9yeSBjb250ZXh0LiAqLworCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oQXBwbHlNZXNzYWdlQ29udGV4dCk7CisKKwkJc2htcV9yZXMgPSBzaG1fbXFfcmVjZWl2ZSht cWgsICZsZW4sICZkYXRhLCBmYWxzZSk7CisKKwkJaWYgKHNobXFfcmVzICE9IFNITV9NUV9TVUND RVNTKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9U X0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImxvc3QgY29ubmVjdGlvbiB0 byB0aGUgbWFpbiBhcHBseSB3b3JrZXIiKSkpOworCisJCWlmIChsZW4gPT0gMCkKKwkJCWJyZWFr OworCisJCXMuY3Vyc29yID0gMDsKKwkJcy5tYXhsZW4gPSAtMTsKKwkJcy5kYXRhID0gKGNoYXIg KikgZGF0YTsKKwkJcy5sZW4gPSBsZW47CisKKwkJLyoKKwkJICogV2UgdXNlIGZpcnN0IGJ5dGUg b2YgbWVzc2FnZSBmb3IgYWRkaXRpb25hbCBjb21tdW5pY2F0aW9uIGJldHdlZW4KKwkJICogbWFp biBMb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBhbmQgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXJz LCBzbyBpZgorCQkgKiBpdCBkaWZmZXJzIGZyb20gJ3cnLCB0aGVuIHByb2Nlc3MgaXQgZmlyc3Qu CisJCSAqLworCQljID0gcHFfZ2V0bXNnYnl0ZSgmcyk7CisJCXN3aXRjaCAoYykKKwkJeworCQkJ LyogRW5kIG1lc3NhZ2Ugb2Ygc3RyZWFtaW5nIGNodW5rICovCisJCQljYXNlIExPR0lDQUxfUkVQ X01TR19TVFJFQU1fU1RPUDoKKwkJCQllbG9nKERFQlVHMSwgIltBcHBseSBCR1cgIyV1XSBlbmRl ZCBwcm9jZXNzaW5nIHN0cmVhbWluZyBjaHVuaywiCisJCQkJCSAid2FpdGluZyBvbiBzaG1fbXFf cmVjZWl2ZSIsIHNoYXJlZC0+bik7CisKKwkJCQlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZh bHNlOworCQkJCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURMRUlOVFJBTlNBQ1RJT04s IE5VTEwpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAndyc6CisJCQkJYnJlYWs7CisJCQlkZWZh dWx0OgorCQkJCWVsb2coRVJST1IsICJbQXBwbHkgQkdXICMldV0gdW5leHBlY3RlZCBtZXNzYWdl IFwiJWNcIiIsCisJCQkJCSBzaGFyZWQtPm4sIGMpOworCQkJCWJyZWFrOworCQl9CisKKwkJLyog SWdub3JlIHN0YXRpc3RpY3MgZmllbGRzIHRoYXQgaGF2ZSBiZWVuIHVwZGF0ZWQuICovCisJCXMu Y3Vyc29yICs9IElHTk9SRV9TSVpFX0lOX01FU1NBR0U7CisKKwkJYXBwbHlfZGlzcGF0Y2goJnMp OworCisJCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQorCQl7CisJCQlDb25maWdSZWxvYWRQZW5k aW5nID0gZmFsc2U7CisJCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKKwkJfQorCisJ CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCQlNZW1vcnlDb250ZXh0UmVzZXQoQXBw bHlNZXNzYWdlQ29udGV4dCk7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9y eUNvbnRleHQpOworCU1lbW9yeUNvbnRleHRSZXNldChBcHBseUNvbnRleHQpOworCisJLyogUG9w IHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNh bGxiYWNrLnByZXZpb3VzOworCisJZWxvZyhERUJVRzEsICJbQXBwbHkgQkdXICMldV0gZXhpdGlu ZyIsIHNoYXJlZC0+bik7CisKKwkvKiBTaWduYWwgbWFpbiBwcm9jZXNzIHRoYXQgd2UgYXJlIGRv bmUuICovCisJU2V0TGF0Y2goJnJlZ2lzdHJhbnQtPnByb2NMYXRjaCk7Cit9CisKKy8qCisgKiBT ZXQgdGhlIGV4aXQgc3RhdHVzIHNvIHRoYXQgdGhlIG1haW4gYXBwbHkgd29ya2VyIGNhbiByZWFs aXplIHdlIGhhdmUKKyAqIHNodXRkb3duLgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfYmd3b3Jr ZXJfc2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZykKK3sKKwlTcGluTG9ja0FjcXVpcmUoJk15 UGFyYWxsZWxTaGFyZWQtPm11dGV4KTsKKwlNeVBhcmFsbGVsU2hhcmVkLT5zdGF0dXMgPSBBUFBM WV9CR1dPUktFUl9FWElUOworCVNwaW5Mb2NrUmVsZWFzZSgmTXlQYXJhbGxlbFNoYXJlZC0+bXV0 ZXgpOworCisJZHNtX2RldGFjaCgoZHNtX3NlZ21lbnQgKikgRGF0dW1HZXRQb2ludGVyKGFyZykp OworfQorCisvKgorICogQXBwbHkgQmFja2dyb3VuZCBXb3JrZXIgZW50cnkgcG9pbnQKKyAqLwor dm9pZAorQXBwbHlCZ3dvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCit7CisJdm9sYXRpbGUgQXBw bHlCZ3dvcmtlclNoYXJlZCAqc2hhcmVkOworCisJZHNtX2hhbmRsZQloYW5kbGU7CisJZHNtX3Nl Z21lbnQgKnNlZzsKKwlzaG1fdG9jICAgICp0b2M7CisJc2htX21xCSAgICptcTsKKwlzaG1fbXFf aGFuZGxlICptcWg7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVJlcE9yaWdpbklkIG9y aWdpbmlkOworCWludAkJCXdvcmtlcl9zbG90ID0gRGF0dW1HZXRJbnQzMihtYWluX2FyZyk7CisJ Y2hhcgkJb3JpZ2lubmFtZVtOQU1FREFUQUxFTl07CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o VG9wTWVtb3J5Q29udGV4dCk7CisKKwkvKiBJbml0IHRoZSBtZW1vcnkgY29udGV4dCBmb3IgdGhl IGFwcGx5IGJhY2tncm91bmQgd29ya2VyIHRvIHdvcmsgaW4uICovCisJQXBwbHlDb250ZXh0ID0g QWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJICJBcHBs eUNvbnRleHQiLAorCQkJCQkJCQkJCSBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCS8qCisJ ICogSW5pdCB0aGUgQXBwbHlNZXNzYWdlQ29udGV4dCB3aGljaCB3ZSBjbGVhbiB1cCBhZnRlciBl YWNoIHJlcGxpY2F0aW9uCisJICogcHJvdG9jb2wgbWVzc2FnZS4KKwkgKi8KKwlBcHBseU1lc3Nh Z2VDb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEFwcGx5Q29udGV4dCwKKwkJCQkJCQkJ CQkJCSJBcHBseU1lc3NhZ2VDb250ZXh0IiwKKwkJCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRf U0laRVMpOworCisJLyogU2V0dXAgc2lnbmFsIGhhbmRsaW5nICovCisJcHFzaWduYWwoU0lHSFVQ LCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsKKwlwcXNpZ25hbChTSUdURVJNLCBkaWUp OworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyoKKwkgKiBDb25uZWN0 IHRvIHRoZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4KKwkgKgorCSAqIFRoZSBiYWNr ZW5kIHRoYXQgcmVnaXN0ZXJlZCB0aGlzIHdvcmtlciBwYXNzZWQgdXMgdGhlIElEIG9mIGEgc2hh cmVkCisJICogbWVtb3J5IHNlZ21lbnQgdG8gd2hpY2ggd2UgbXVzdCBhdHRhY2ggZm9yIGZ1cnRo ZXIgaW5zdHJ1Y3Rpb25zLiAgSW4KKwkgKiBvcmRlciB0byBhdHRhY2ggdG8gZHluYW1pYyBzaGFy ZWQgbWVtb3J5LCB3ZSBuZWVkIGEgcmVzb3VyY2Ugb3duZXIuCisJICogT25jZSB3ZSd2ZSBtYXBw ZWQgdGhlIHNlZ21lbnQgaW4gb3VyIGFkZHJlc3Mgc3BhY2UsIGF0dGFjaCB0byB0aGUgdGFibGUK KwkgKiBvZiBjb250ZW50cyBzbyB3ZSBjYW4gbG9jYXRlIHRoZSB2YXJpb3VzIGRhdGEgc3RydWN0 dXJlcyB3ZSdsbCBuZWVkIHRvCisJICogZmluZCB3aXRoaW4gdGhlIHNlZ21lbnQuCisJICovCisJ Q3VycmVudFJlc291cmNlT3duZXIgPSBSZXNvdXJjZU93bmVyQ3JlYXRlKE5VTEwsICJMb2dpY2Fs IGFwcGx5IHdvcmtlciIpOworCW1lbWNweSgmaGFuZGxlLCBNeUJnd29ya2VyRW50cnktPmJnd19l eHRyYSwgc2l6ZW9mKGRzbV9oYW5kbGUpKTsKKwlzZWcgPSBkc21fYXR0YWNoKGhhbmRsZSk7CisJ aWYgKHNlZyA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf T0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInVuYWJsZSB0 byBtYXAgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQiKSkpOworCXRvYyA9IHNobV90b2Nf YXR0YWNoKFBHX0xPR0lDQUxfQVBQTFlfU0hNX01BR0lDLCBkc21fc2VnbWVudF9hZGRyZXNzKHNl ZykpOworCWlmICh0b2MgPT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJi YWQgbWFnaWMgbnVtYmVyIGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IikpKTsKKwor CWJlZm9yZV9zaG1lbV9leGl0KGFwcGx5X2Jnd29ya2VyX3NodXRkb3duLCBQb2ludGVyR2V0RGF0 dW0oc2VnKSk7CisKKwkvKiBMb29rIHVwIHRoZSBzaGFyZWQgaW5mb3JtYXRpb24uICovCisJc2hh cmVkID0gc2htX3RvY19sb29rdXAodG9jLCBBUFBMWV9CR1dPUktFUl9LRVlfU0hBUkVELCBmYWxz ZSk7CisJTXlQYXJhbGxlbFNoYXJlZCA9IHNoYXJlZDsKKworCS8qCisJICogQXR0YWNoIHRvIHRo ZSBtZXNzYWdlIHF1ZXVlLgorCSAqLworCW1xID0gc2htX3RvY19sb29rdXAodG9jLCBBUFBMWV9C R1dPUktFUl9LRVlfTVEsIGZhbHNlKTsKKwlzaG1fbXFfc2V0X3JlY2VpdmVyKG1xLCBNeVByb2Mp OworCW1xaCA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisKKwkvKiBSdW4gYXMgcmVw bGljYSBzZXNzaW9uIHJlcGxpY2F0aW9uIHJvbGUuICovCisJU2V0Q29uZmlnT3B0aW9uKCJzZXNz aW9uX3JlcGxpY2F0aW9uX3JvbGUiLCAicmVwbGljYSIsCisJCQkJCVBHQ19TVVNFVCwgUEdDX1Nf T1ZFUlJJREUpOworCisJLyoKKwkgKiBOb3csIHdlIGhhdmUgaW5pdGlhbGl6ZWQgRFNNLiBBdHRh Y2ggdG8gc2xvdC4KKwkgKi8KKwlsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2god29ya2VyX3Nsb3Qp OworCisJLyogQ29ubmVjdCB0byBvdXIgZGF0YWJhc2UuICovCisJQmFja2dyb3VuZFdvcmtlcklu aXRpYWxpemVDb25uZWN0aW9uQnlPaWQoTXlMb2dpY2FsUmVwV29ya2VyLT5kYmlkLAorCQkJCQkJ CQkJCQkgIE15TG9naWNhbFJlcFdvcmtlci0+dXNlcmlkLAorCQkJCQkJCQkJCQkgIDApOworCisJ LyoKKwkgKiBTZXQgYWx3YXlzLXNlY3VyZSBzZWFyY2ggcGF0aCwgc28gbWFsaWNpb3VzIHVzZXJz IGNhbid0IHJlZGlyZWN0IHVzZXIKKwkgKiBjb2RlIChlLmcuIHBnX2luZGV4LmluZGV4cHJzKS4K KwkgKi8KKwlTZXRDb25maWdPcHRpb24oInNlYXJjaF9wYXRoIiwgIiIsIFBHQ19TVVNFVCwgUEdD X1NfT1ZFUlJJREUpOworCisJLyoKKwkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyB0byB0aGUg ZGF0YWJhc2UgZW5jb2RpbmcsIHNpbmNlIHRoYXQgaXMgd2hhdAorCSAqIHRoZSBsZWFkZXIgd2ls bCBleHBlY3QuCisJICovCisJU2V0Q2xpZW50RW5jb2RpbmcoR2V0RGF0YWJhc2VFbmNvZGluZygp KTsKKworCXN0cmVhbV94aWQgPSBzaGFyZWQtPnN0cmVhbV94aWQ7CisKKwlTdGFydFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlD b250ZXh0KTsKKworCU15U3Vic2NyaXB0aW9uID0gR2V0U3Vic2NyaXB0aW9uKE15TG9naWNhbFJl cFdvcmtlci0+c3ViaWQsIHRydWUpOworCWlmICghTXlTdWJzY3JpcHRpb24pCisJeworCQllcmVw b3J0KExPRywKKwkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBm b3Igc3Vic2NyaXB0aW9uICV1IHdpbGwgbm90ICIKKwkJCQkJCSJzdGFydCBiZWNhdXNlIHRoZSBz dWJzY3JpcHRpb24gd2FzIHJlbW92ZWQgZHVyaW5nIHN0YXJ0dXAiLAorCQkJCQkJTXlMb2dpY2Fs UmVwV29ya2VyLT5zdWJpZCkpKTsKKwkJcHJvY19leGl0KDApOworCX0KKworCU15U3Vic2NyaXB0 aW9uVmFsaWQgPSB0cnVlOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwor CS8qIFNldHVwIHN5bmNocm9ub3VzIGNvbW1pdCBhY2NvcmRpbmcgdG8gdGhlIHVzZXIncyB3aXNo ZXMgKi8KKwlTZXRDb25maWdPcHRpb24oInN5bmNocm9ub3VzX2NvbW1pdCIsIE15U3Vic2NyaXB0 aW9uLT5zeW5jY29tbWl0LAorCQkJCQlQR0NfQkFDS0VORCwgUEdDX1NfT1ZFUlJJREUpOworCisJ LyogS2VlcCB1cyBpbmZvcm1lZCBhYm91dCBzdWJzY3JpcHRpb24gY2hhbmdlcy4gKi8KKwlDYWNo ZVJlZ2lzdGVyU3lzY2FjaGVDYWxsYmFjayhTVUJTQ1JJUFRJT05PSUQsCisJCQkJCQkJCSAgc3Vi c2NyaXB0aW9uX2NoYW5nZV9jYiwKKwkJCQkJCQkJICAoRGF0dW0pIDApOworCisJQ29tbWl0VHJh bnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKiBTZXR1cCByZXBsaWNhdGlvbiBvcmlnaW4gdHJhY2tp bmcuICovCisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlzbnByaW50ZihvcmlnaW5uYW1l LCBzaXplb2Yob3JpZ2lubmFtZSksICJwZ18ldSIsIE15U3Vic2NyaXB0aW9uLT5vaWQpOworCW9y aWdpbmlkID0gcmVwbG9yaWdpbl9ieV9uYW1lKG9yaWdpbm5hbWUsIHRydWUpOworCWlmICghT2lk SXNWYWxpZChvcmlnaW5pZCkpCisJCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9jcmVhdGUob3JpZ2lu bmFtZSk7CisKKwkvKgorCSAqIFRoZSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBkb2Vzbid0IG5l ZWQgdG8gbW9ub3BvbGl6ZSB0aGlzIHJlcGxpY2F0aW9uCisJICogb3JpZ2luIHdoaWNoIHdhcyBh bHJlYWR5IGFjcXVpcmVkIGJ5IGl0cyBsZWFkZXIgcHJvY2Vzcy4KKwkgKi8KKwlyZXBsb3JpZ2lu X3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIGZhbHNlKTsKKwlyZXBsb3JpZ2luX3Nlc3Npb25fb3Jp Z2luID0gb3JpZ2luaWQ7CisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAq IEFsbG9jYXRlIHRoZSBvcmlnaW4gbmFtZSBpbiBsb25nLWxpdmVkIGNvbnRleHQgZm9yIGVycm9y IGNvbnRleHQKKwkgKiBtZXNzYWdlLgorCSAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5v cmlnaW5fbmFtZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoQXBwbHlDb250ZXh0LAorCQkJCQkJCQkJ CQkJCQkJICAgb3JpZ2lubmFtZSk7CisKKwllbG9nKERFQlVHMSwgIltBcHBseSBCR1cgIyV1XSBz dGFydGVkIiwgc2hhcmVkLT5uKTsKKworCUxvZ2ljYWxBcHBseUJnd0xvb3AobXFoLCBzaGFyZWQp OworCisJLyoKKwkgKiBXZSdyZSBkb25lLiAgRXhwbGljaXRseSBkZXRhY2ggdGhlIHNoYXJlZCBt ZW1vcnkgc2VnbWVudCBzbyB0aGF0IHdlCisJICogZG9uJ3QgZ2V0IGEgcmVzb3VyY2UgbGVhayB3 YXJuaW5nIGF0IGNvbW1pdCB0aW1lLiAgVGhpcyB3aWxsIGZpcmUgYW55CisJICogb25fZHNtX2Rl dGFjaCBjYWxsYmFja3Mgd2UndmUgcmVnaXN0ZXJlZCwgYXMgd2VsbC4gIE9uY2UgdGhhdCdzIGRv bmUsCisJICogd2UgY2FuIGdvIGFoZWFkIGFuZCBleGl0LgorCSAqLworCWRzbV9kZXRhY2goc2Vn KTsKKwlwcm9jX2V4aXQoMCk7Cit9CisKKy8qCisgKiBTZXQgdXAgYSBkeW5hbWljIHNoYXJlZCBt ZW1vcnkgc2VnbWVudC4KKyAqCisgKiBXZSBzZXQgdXAgYSBjb250cm9sIHJlZ2lvbiB0aGF0IGNv bnRhaW5zIGEgQXBwbHlCZ3dvcmtlclNoYXJlZCwKKyAqIHBsdXMgb25lIHJlZ2lvbiBwZXIgbWVz c2FnZSBxdWV1ZS4gVGhlcmUgYXJlIGFzIG1hbnkgbWVzc2FnZSBxdWV1ZXMgYXMKKyAqIHRoZSBu dW1iZXIgb2Ygd29ya2Vycy4KKyAqLworc3RhdGljIHZvaWQKK2FwcGx5X2Jnd29ya2VyX3NldHVw X2RzbShBcHBseUJnd29ya2VyU3RhdGUgKndzdGF0ZSkKK3sKKwlzaG1fdG9jX2VzdGltYXRvciBl OworCVNpemUJCXNlZ3NpemU7CisJZHNtX3NlZ21lbnQgKnNlZzsKKwlzaG1fdG9jICAgICp0b2M7 CisJQXBwbHlCZ3dvcmtlclNoYXJlZCAqc2hhcmVkOworCXNobV9tcQkgICAqbXE7CisJaW50NjQJ CXF1ZXVlX3NpemUgPSBEU01fUVVFVUVfU0laRTsKKwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbjsKKwor CS8qCisJICogRXN0aW1hdGUgaG93IG11Y2ggc2hhcmVkIG1lbW9yeSB3ZSBuZWVkLgorCSAqCisJ ICogQmVjYXVzZSB0aGUgVE9DIG1hY2hpbmVyeSBtYXkgY2hvb3NlIHRvIGluc2VydCBwYWRkaW5n IG9mIG9kZGx5LXNpemVkCisJICogcmVxdWVzdHMsIHdlIG11c3QgZXN0aW1hdGUgZWFjaCBjaHVu ayBzZXBhcmF0ZWx5LgorCSAqCisJICogV2UgbmVlZCBvbmUga2V5IHRvIHJlZ2lzdGVyIHRoZSBs b2NhdGlvbiBvZiB0aGUgaGVhZGVyLCBhbmQgd2UgbmVlZAorCSAqIGFub3RoZXIga2V5IHRvIHRy YWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZSBxdWV1ZS4KKwkgKi8KKwlzaG1fdG9jX2lu aXRpYWxpemVfZXN0aW1hdG9yKCZlKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBzaXpl b2YoQXBwbHlCZ3dvcmtlclNoYXJlZCkpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJmUsIChT aXplKSBxdWV1ZV9zaXplKTsKKworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmZSwgMSArIDEpOwor CXNlZ3NpemUgPSBzaG1fdG9jX2VzdGltYXRlKCZlKTsKKworCS8qIENyZWF0ZSB0aGUgc2hhcmVk IG1lbW9yeSBzZWdtZW50IGFuZCBlc3RhYmxpc2ggYSB0YWJsZSBvZiBjb250ZW50cy4gKi8KKwlz ZWcgPSBkc21fY3JlYXRlKHNobV90b2NfZXN0aW1hdGUoJmUpLCAwKTsKKwl0b2MgPSBzaG1fdG9j X2NyZWF0ZShQR19MT0dJQ0FMX0FQUExZX1NITV9NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVzcyhz ZWcpLAorCQkJCQkJIHNlZ3NpemUpOworCisJLyogU2V0IHVwIHRoZSBoZWFkZXIgcmVnaW9uLiAq LworCXNoYXJlZCA9IHNobV90b2NfYWxsb2NhdGUodG9jLCBzaXplb2YoQXBwbHlCZ3dvcmtlclNo YXJlZCkpOworCVNwaW5Mb2NrSW5pdCgmc2hhcmVkLT5tdXRleCk7CisJc2hhcmVkLT5zdGF0dXMg PSBBUFBMWV9CR1dPUktFUl9CVVNZOworCisJc2VydmVyX3ZlcnNpb24gPSB3YWxyY3Zfc2VydmVy X3ZlcnNpb24oTG9nUmVwV29ya2VyV2FsUmN2Q29ubik7CisJc2hhcmVkLT5zZXJ2ZXJfdmVyc2lv biA9CisJCXNlcnZlcl92ZXJzaW9uID49IDE2MDAwMCA/IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFN X1BBUkFMTEVMX1ZFUlNJT05fTlVNIDoKKwkJc2VydmVyX3ZlcnNpb24gPj0gMTUwMDAwID8gTE9H SUNBTFJFUF9QUk9UT19UV09QSEFTRV9WRVJTSU9OX05VTSA6CisJCXNlcnZlcl92ZXJzaW9uID49 IDE0MDAwMCA/IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNIDoKKwkJTE9HSUNB TFJFUF9QUk9UT19WRVJTSU9OX05VTTsKKworCXNoYXJlZC0+c3RyZWFtX3hpZCA9IHN0cmVhbV94 aWQ7CisJc2hhcmVkLT5uID0gbGlzdF9sZW5ndGgoQXBwbHlXb3JrZXJzTGlzdCkgKyAxOworCisJ c2htX3RvY19pbnNlcnQodG9jLCBBUFBMWV9CR1dPUktFUl9LRVlfU0hBUkVELCBzaGFyZWQpOwor CisJLyogU2V0IHVwIG1lc3NhZ2UgcXVldWUgZm9yIHRoZSB3b3JrZXIuICovCisJbXEgPSBzaG1f bXFfY3JlYXRlKHNobV90b2NfYWxsb2NhdGUodG9jLCAoU2l6ZSkgcXVldWVfc2l6ZSksCisJCQkJ CSAgIChTaXplKSBxdWV1ZV9zaXplKTsKKwlzaG1fdG9jX2luc2VydCh0b2MsIEFQUExZX0JHV09S S0VSX0tFWV9NUSwgbXEpOworCXNobV9tcV9zZXRfc2VuZGVyKG1xLCBNeVByb2MpOworCisJLyog QXR0YWNoIHRoZSBxdWV1ZS4gKi8KKwl3c3RhdGUtPm1xX2hhbmRsZSA9IHNobV9tcV9hdHRhY2go bXEsIHNlZywgTlVMTCk7CisKKwkvKiBSZXR1cm4gcmVzdWx0cyB0byBjYWxsZXIuICovCisJd3N0 YXRlLT5kc21fc2VnID0gc2VnOworCXdzdGF0ZS0+c2hhcmVkID0gc2hhcmVkOworfQorCisvKgor ICogU3RhcnQgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgcHJvY2VzcyBhbmQgYWxsb2NhdGUgc2hh cmVkIG1lbW9yeSBmb3IgaXQuCisgKi8KK3N0YXRpYyBBcHBseUJnd29ya2VyU3RhdGUgKgorYXBw bHlfYmd3b3JrZXJfc2V0dXAodm9pZCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJ Ym9vbAkJbGF1bmNoZWQ7CisJQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGU7CisJaW50CQkJbmFw cGx5d29ya2VyczsKKworCWVsb2coREVCVUcxLCAic2V0dGluZyB1cCBhcHBseSB3b3JrZXIgIyV1 IiwgbGlzdF9sZW5ndGgoQXBwbHlXb3JrZXJzTGlzdCkgKyAxKTsKKworCS8qIENoZWNrIGlmIHRo ZXJlIGFyZSBmcmVlIHdvcmtlciBzbG90KHMpICovCisJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVw V29ya2VyTG9jaywgTFdfU0hBUkVEKTsKKwluYXBwbHl3b3JrZXJzID0gbG9naWNhbHJlcF9hcHBs eV9iZ3dvcmtlcl9jb3VudChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkKTsKKwlMV0xvY2tSZWxl YXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKKwlpZiAobmFwcGx5d29ya2VycyA+PSBtYXhfYXBw bHlfYmd3b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24pCisJCXJldHVybiBOVUxMOworCisJb2xkY29u dGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOworCisJd3N0YXRlID0g KEFwcGx5Qmd3b3JrZXJTdGF0ZSAqKSBwYWxsb2MwKHNpemVvZihBcHBseUJnd29ya2VyU3RhdGUp KTsKKworCS8qIFNldHVwIHNoYXJlZCBtZW1vcnkgKi8KKwlhcHBseV9iZ3dvcmtlcl9zZXR1cF9k c20od3N0YXRlKTsKKworCWxhdW5jaGVkID0gbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE15TG9n aWNhbFJlcFdvcmtlci0+ZGJpZCwKKwkJCQkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+b2lkLAorCQkJ CQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lLAorCQkJCQkJCQkJCU15TG9naWNhbFJlcFdvcmtl ci0+dXNlcmlkLAorCQkJCQkJCQkJCUludmFsaWRPaWQsCisJCQkJCQkJCQkJZHNtX3NlZ21lbnRf aGFuZGxlKHdzdGF0ZS0+ZHNtX3NlZykpOworCisJaWYgKGxhdW5jaGVkKQorCQlBcHBseVdvcmtl cnNMaXN0ID0gbGFwcGVuZChBcHBseVdvcmtlcnNMaXN0LCB3c3RhdGUpOworCWVsc2UKKwl7CisJ CWRzbV9kZXRhY2god3N0YXRlLT5kc21fc2VnKTsKKwkJd3N0YXRlLT5kc21fc2VnID0gTlVMTDsK KworCQlwZnJlZSh3c3RhdGUpOworCQl3c3RhdGUgPSBOVUxMOworCX0KKworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCXJldHVybiB3c3RhdGU7Cit9CisKKy8qCisgKiBT ZW5kIHRoZSBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgdmlh IHNoYXJlZC1tZW1vcnkgcXVldWUuCisgKi8KK3ZvaWQKK2FwcGx5X2Jnd29ya2VyX3NlbmRfZGF0 YShBcHBseUJnd29ya2VyU3RhdGUgKndzdGF0ZSwgU2l6ZSBuYnl0ZXMsIGNvbnN0IHZvaWQgKmRh dGEpCit7CisJc2htX21xX3Jlc3VsdCByZXN1bHQ7CisKKwlyZXN1bHQgPSBzaG1fbXFfc2VuZCh3 c3RhdGUtPm1xX2hhbmRsZSwgbmJ5dGVzLCBkYXRhLCBmYWxzZSwgdHJ1ZSk7CisKKwlpZiAocmVz dWx0ICE9IFNITV9NUV9TVUNDRVNTKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coImNv dWxkIG5vdCBzZW5kIHR1cGxlcyB0byBzaGFyZWQtbWVtb3J5IHF1ZXVlIikpKTsKK30KKworLyoK KyAqIFdhaXQgdW50aWwgdGhlIHN0YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciByZWFj aGVzIHRoZQorICogJ3dhaXRfZm9yX3N0YXR1cycKKyAqLwordm9pZAorYXBwbHlfYmd3b3JrZXJf d2FpdF9mb3IoQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGUsCisJCQkJCQlBcHBseUJnd29ya2Vy U3RhdHVzIHdhaXRfZm9yX3N0YXR1cykKK3sKKwlmb3IgKDs7KQorCXsKKwkJY2hhcgkJc3RhdHVz OworCisJCVNwaW5Mb2NrQWNxdWlyZSgmd3N0YXRlLT5zaGFyZWQtPm11dGV4KTsKKwkJc3RhdHVz ID0gd3N0YXRlLT5zaGFyZWQtPnN0YXR1czsKKwkJU3BpbkxvY2tSZWxlYXNlKCZ3c3RhdGUtPnNo YXJlZC0+bXV0ZXgpOworCisJCS8qIERvbmUgaWYgYWxyZWFkeSBpbiBjb3JyZWN0IHN0YXR1cy4g Ki8KKwkJaWYgKHN0YXR1cyA9PSB3YWl0X2Zvcl9zdGF0dXMpCisJCQlicmVhazsKKworCQkvKiBJ ZiBhbnkgd29ya2VycyAob3IgdGhlIHBvc3RtYXN0ZXIpIGhhdmUgZGllZCwgd2UgaGF2ZSBmYWls ZWQuICovCisJCWlmIChzdGF0dXMgPT0gQVBQTFlfQkdXT1JLRVJfRVhJVCkKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVf U1RBVEUpLAorCQkJCQkgZXJybXNnKCJiYWNrZ3JvdW5kIHdvcmtlciAldSBmYWlsZWQgdG8gYXBw bHkgdHJhbnNhY3Rpb24gJXUiLAorCQkJCQkJCXdzdGF0ZS0+c2hhcmVkLT5uLCB3c3RhdGUtPnNo YXJlZC0+c3RyZWFtX3hpZCkpKTsKKworCQkvKiBXYWl0IHRvIGJlIHNpZ25hbGxlZC4gKi8KKwkJ V2FpdExhdGNoKE15TGF0Y2gsIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsIDAs CisJCQkJICBXQUlUX0VWRU5UX0xPR0lDQUxfQVBQTFlfV09SS0VSX1NUQVRFX0NIQU5HRSk7CisK KwkJLyogUmVzZXQgdGhlIGxhdGNoIHNvIHdlIGRvbid0IHNwaW4uICovCisJCVJlc2V0TGF0Y2go TXlMYXRjaCk7CisKKwkJLyogQW4gaW50ZXJydXB0IG1heSBoYXZlIG9jY3VycmVkIHdoaWxlIHdl IHdlcmUgd2FpdGluZy4gKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwl9Cit9CisKKy8q CisgKiBDaGVjayB0aGUgc3RhdHVzIG9mIHdvcmtlcnMgYW5kIHJlcG9ydCBhbiBlcnJvciBpZiBh bnkgYXBwbHkgYmFja2dyb3VuZAorICogd29ya2VyIGhhcyBleGl0ZWQgdW5leHBlY3RlZGx5Lgor ICovCit2b2lkCithcHBseV9iZ3dvcmtlcl9jaGVja19zdGF0dXModm9pZCkKK3sKKwlMaXN0Q2Vs bCAgICpsYzsKKworCWlmIChhbV9hcHBseV9iZ3dvcmtlcigpIHx8IE15U3Vic2NyaXB0aW9uLT5z dHJlYW0gIT0gU1VCU1RSRUFNX1BBUkFMTEVMKQorCQlyZXR1cm47CisKKwlmb3JlYWNoKGxjLCBB cHBseVdvcmtlcnNMaXN0KQorCXsKKwkJQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGUgPSAoQXBw bHlCZ3dvcmtlclN0YXRlICopIGxmaXJzdChsYyk7CisKKwkJLyoKKwkJICogV2UgZG9uJ3QgbG9j ayBoZXJlIGFzIGluIHRoZSB3b3JzdCBjYXNlIHdlIHdpbGwganVzdCBkZXRlY3QgdGhlCisJCSAq IGZhaWx1cmUgb2Ygd29ya2VyIGEgYml0IGxhdGVyLgorCQkgKi8KKwkJaWYgKHdzdGF0ZS0+c2hh cmVkLT5zdGF0dXMgPT0gQVBQTFlfQkdXT1JLRVJfRVhJVCkKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAor CQkJCQkgZXJybXNnKCJiYWNrZ3JvdW5kIHdvcmtlciAldSBleGl0ZWQgdW5leHBlY3RlZGx5IiwK KwkJCQkJCQl3c3RhdGUtPnNoYXJlZC0+bikpKTsKKwl9CisKKwkvKgorCSAqIEV4aXQgaWYgYW55 IHJlbGF0aW9uIGlzIG5vdCBpbiB0aGUgUkVBRFkgc3RhdGUgYW5kIGlmIGFueSB3b3JrZXIgaXMK KwkgKiBoYW5kbGluZyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIGF0IHRoZSBzYW1lIHRpbWUu IEJlY2F1c2UgZm9yCisJICogc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB0aGF0IGlzIGJlaW5nIGFw cGxpZWQgaW4gYXBwbHkgYmFja2dyb3VuZAorCSAqIHdvcmtlciwgd2UgY2Fubm90IGRlY2lkZSB3 aGV0aGVyIHRvIGFwcGx5IHRoZSBjaGFuZ2UgZm9yIGEgcmVsYXRpb24KKwkgKiB0aGF0IGlzIG5v dCBpbiB0aGUgUkVBRFkgc3RhdGUgKHNlZSBzaG91bGRfYXBwbHlfY2hhbmdlc19mb3JfcmVsKSBh cyB3ZQorCSAqIHdvbid0IGtub3cgcmVtb3RlX2ZpbmFsX2xzbiBieSB0aGF0IHRpbWUuCisJICov CisJaWYgKGxpc3RfbGVuZ3RoKEFwcGx5V29ya2Vyc0ZyZWVMaXN0KSAhPSBsaXN0X2xlbmd0aChB cHBseVdvcmtlcnNMaXN0KSAmJgorCQkhQWxsVGFibGVzeW5jc1JlYWR5KCkpCisJeworCQllcmVw b3J0KExPRywKKwkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlcnMg Zm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCByZXN0YXJ0IiwKKwkJCQkJCU15U3Vic2NyaXB0 aW9uLT5uYW1lKSwKKwkJCQkgZXJyZGV0YWlsKCJDYW5ub3QgaGFuZGxlIHN0cmVhbWVkIHJlcGxp Y2F0aW9uIHRyYW5zYWN0aW9uIGJ5IGFwcGx5ICIKKwkJCQkJCSAgICJiYWNrZ3JvdW5kIHdvcmtl cnMgdW50aWwgYWxsIHRhYmxlcyBhcmUgc3luY2hyb25pemVkIikpKTsKKworCQlwcm9jX2V4aXQo MCk7CisJfQorfQorCisvKiBTZXQgdGhlIGFwcGx5IGJhY2tncm91bmQgd29ya2VyIHN0YXR1cyAq Lwordm9pZAorYXBwbHlfYmd3b3JrZXJfc2V0X3N0YXR1cyhBcHBseUJnd29ya2VyU3RhdHVzIHN0 YXR1cykKK3sKKwlpZiAoIWFtX2FwcGx5X2Jnd29ya2VyKCkpCisJCXJldHVybjsKKworCWVsb2co REVCVUcxLCAiW0FwcGx5IEJHVyAjJXVdIHNldCBzdGF0dXMgdG8gJWQiLCBNeVBhcmFsbGVsU2hh cmVkLT5uLCBzdGF0dXMpOworCisJU3BpbkxvY2tBY3F1aXJlKCZNeVBhcmFsbGVsU2hhcmVkLT5t dXRleCk7CisJTXlQYXJhbGxlbFNoYXJlZC0+c3RhdHVzID0gc3RhdHVzOworCVNwaW5Mb2NrUmVs ZWFzZSgmTXlQYXJhbGxlbFNoYXJlZC0+bXV0ZXgpOworfQorCisvKgorICogRGVmaW5lIGEgc2F2 ZXBvaW50IGZvciBhIHN1YnhhY3QgaW4gYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgaWYgbmVlZGVk LgorICoKKyAqIEluc2lkZSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciB3ZSBjYW4gZmlndXJlIG91 dCB0aGF0IG5ldyBzdWJ0cmFuc2FjdGlvbiB3YXMKKyAqIHN0YXJ0ZWQgaWYgbmV3IGNoYW5nZSBh cnJpdmVkIHdpdGggZGlmZmVyZW50IHhpZC4gSW4gdGhhdCBjYXNlIHdlIGNhbiBkZWZpbmUKKyAq IG5hbWVkIHNhdmVwb2ludCwgc28gdGhhdCB3ZSB3ZXJlIGFibGUgdG8gY29tbWl0L3JvbGxiYWNr IGl0IHNlcGFyYXRlbHkKKyAqIGxhdGVyLgorICogU3BlY2lhbCBjYXNlIGlzIGlmIHRoZSBmaXJz dCBjaGFuZ2UgY29tZXMgZnJvbSBzdWJ0cmFuc2FjdGlvbiwgdGhlbgorICogd2UgY2hlY2sgdGhh dCBjdXJyZW50X3hpZCBkaWZmZXJzIGZyb20gc3RyZWFtX3hpZC4KKyAqLwordm9pZAorYXBwbHlf Ymd3b3JrZXJfc3VieGFjdF9pbmZvX2FkZChUcmFuc2FjdGlvbklkIGN1cnJlbnRfeGlkKQorewor CWlmIChjdXJyZW50X3hpZCAhPSBzdHJlYW1feGlkICYmCisJCSFsaXN0X21lbWJlcl9pbnQoc3Vi eGFjdGxpc3QsIChpbnQpIGN1cnJlbnRfeGlkKSkKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY3R4 OworCQljaGFyCQlzcG5hbWVbTUFYUEdQQVRIXTsKKworCQlzbnByaW50ZihzcG5hbWUsIE1BWFBH UEFUSCwgInNhdmVwb2ludF9mb3JfeGlkXyV1IiwgY3VycmVudF94aWQpOworCisJCWVsb2coREVC VUcxLCAiW0FwcGx5IEJHVyAjJXVdIGRlZmluaW5nIHNhdmVwb2ludCAlcyIsCisJCQkgTXlQYXJh bGxlbFNoYXJlZC0+biwgc3BuYW1lKTsKKworCQlEZWZpbmVTYXZlcG9pbnQoc3BuYW1lKTsKKwkJ Q29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKEFwcGx5Q29udGV4dCk7CisJCXN1YnhhY3RsaXN0ID0gbGFwcGVuZF9pbnQoc3VieGFj dGxpc3QsIChpbnQpIGN1cnJlbnRfeGlkKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0 eCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXgg YzVjNmEyYmE2OC4uZDRkNTA5M2EwYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RlY29kZS5jCkBAIC02NTEsOSArNjUxLDEwIEBAIERlY29kZUNvbW1pdChMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZiwKIAl7CiAJCWZvciAoaSA9IDA7 IGkgPCBwYXJzZWQtPm5zdWJ4YWN0czsgaSsrKQogCQl7Ci0JCQlSZW9yZGVyQnVmZmVyRm9yZ2V0 KGN0eC0+cmVvcmRlciwgcGFyc2VkLT5zdWJ4YWN0c1tpXSwgYnVmLT5vcmlncHRyKTsKKwkJCVJl b3JkZXJCdWZmZXJGb3JnZXQoY3R4LT5yZW9yZGVyLCBwYXJzZWQtPnN1YnhhY3RzW2ldLCBidWYt Pm9yaWdwdHIsCisJCQkJCQkJCWNvbW1pdF90aW1lKTsKIAkJfQotCQlSZW9yZGVyQnVmZmVyRm9y Z2V0KGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPm9yaWdwdHIpOworCQlSZW9yZGVyQnVmZmVyRm9y Z2V0KGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPm9yaWdwdHIsIGNvbW1pdF90aW1lKTsKIAogCQly ZXR1cm47CiAJfQpAQCAtODIxLDEwICs4MjIsMTEgQEAgRGVjb2RlQWJvcnQoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYsCiAJCWZvciAoaSA9IDA7IGkg PCBwYXJzZWQtPm5zdWJ4YWN0czsgaSsrKQogCQl7CiAJCQlSZW9yZGVyQnVmZmVyQWJvcnQoY3R4 LT5yZW9yZGVyLCBwYXJzZWQtPnN1YnhhY3RzW2ldLAotCQkJCQkJCSAgIGJ1Zi0+cmVjb3JkLT5F bmRSZWNQdHIpOworCQkJCQkJCSAgIGJ1Zi0+cmVjb3JkLT5FbmRSZWNQdHIsIGFib3J0X3RpbWUp OwogCQl9CiAKLQkJUmVvcmRlckJ1ZmZlckFib3J0KGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPnJl Y29yZC0+RW5kUmVjUHRyKTsKKwkJUmVvcmRlckJ1ZmZlckFib3J0KGN0eC0+cmVvcmRlciwgeGlk LCBidWYtPnJlY29yZC0+RW5kUmVjUHRyLAorCQkJCQkJICAgYWJvcnRfdGltZSk7CiAJfQogCiAJ LyogdXBkYXRlIHRoZSBkZWNvZGluZyBzdGF0cyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9sYXVuY2hlci5jCmluZGV4IDNiYmQ1MjI3MjQuLmQ5MmJmYWY2ZDYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKQEAgLTU0LDYgKzU0LDcgQEAK IAogaW50CQkJbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDQ7CiBpbnQJCQltYXhf c3luY193b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyOworaW50CQkJbWF4X2FwcGx5X2Jnd29y a2Vyc19wZXJfc3Vic2NyaXB0aW9uID0gMjsKIAogTG9naWNhbFJlcFdvcmtlciAqTXlMb2dpY2Fs UmVwV29ya2VyID0gTlVMTDsKIApAQCAtNzMsNiArNzQsNyBAQCBzdGF0aWMgdm9pZCBsb2dpY2Fs cmVwX2xhdW5jaGVyX29uZXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIGxv Z2ljYWxyZXBfd29ya2VyX29uZXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lk IGxvZ2ljYWxyZXBfd29ya2VyX2RldGFjaCh2b2lkKTsKIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBf d29ya2VyX2NsZWFudXAoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKTsKK3N0YXRpYyB2b2lkIGxv Z2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKTsK IAogc3RhdGljIGJvb2wgb25fY29tbWl0X2xhdW5jaGVyX3dha2V1cCA9IGZhbHNlOwogCkBAIC0x NTEsOCArMTUzLDEwIEBAIGdldF9zdWJzY3JpcHRpb25fbGlzdCh2b2lkKQogICoKICAqIFRoaXMg aXMgb25seSBuZWVkZWQgZm9yIGNsZWFuaW5nIHVwIHRoZSBzaGFyZWQgbWVtb3J5IGluIGNhc2Ug dGhlIHdvcmtlcgogICogZmFpbHMgdG8gYXR0YWNoLgorICoKKyAqIFJldHVybiBmYWxzZSBpZiB0 aGUgYXR0YWNoIGZhaWxzLiBPdGhlcndpc2UgcmV0dXJuIHRydWUuCiAgKi8KLXN0YXRpYyB2b2lk CitzdGF0aWMgYm9vbAogV2FpdEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBX b3JrZXIgKndvcmtlciwKIAkJCQkJCQkgICB1aW50MTYgZ2VuZXJhdGlvbiwKIAkJCQkJCQkgICBC YWNrZ3JvdW5kV29ya2VySGFuZGxlICpoYW5kbGUpCkBAIC0xNjgsMTEgKzE3MiwxMSBAQCBXYWl0 Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogCiAJ CUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CiAKLQkJLyog V29ya2VyIGVpdGhlciBkaWVkIG9yIGhhcyBzdGFydGVkOyBubyBuZWVkIHRvIGRvIGFueXRoaW5n LiAqLworCQkvKiBXb3JrZXIgZWl0aGVyIGRpZWQgb3IgaGFzIHN0YXJ0ZWQuIFJldHVybiBmYWxz ZSBpZiBkaWVkLiAqLwogCQlpZiAoIXdvcmtlci0+aW5fdXNlIHx8IHdvcmtlci0+cHJvYykKIAkJ ewogCQkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0JCQlyZXR1cm47CisJ CQlyZXR1cm4gd29ya2VyLT5pbl91c2U7CiAJCX0KIAogCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxS ZXBXb3JrZXJMb2NrKTsKQEAgLTE4Nyw3ICsxOTEsNyBAQCBXYWl0Rm9yUmVwbGljYXRpb25Xb3Jr ZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogCQkJaWYgKGdlbmVyYXRpb24gPT0g d29ya2VyLT5nZW5lcmF0aW9uKQogCQkJCWxvZ2ljYWxyZXBfd29ya2VyX2NsZWFudXAod29ya2Vy KTsKIAkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwotCQkJcmV0dXJuOwor CQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKIAkJLyoKQEAgLTIyMyw2ICsyMjcsMTMgQEAgbG9naWNh bHJlcF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwgYm9vbCBvbmx5X3J1bm5pbmcp CiAJewogCQlMb2dpY2FsUmVwV29ya2VyICp3ID0gJkxvZ2ljYWxSZXBDdHgtPndvcmtlcnNbaV07 CiAKKwkJLyoKKwkJICogV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgbWFpbiBhcHBseSB3 b3JrZXIgb3IgdGFibGUgc3luYyB3b3JrZXIKKwkJICogaGVyZS4KKwkJICovCisJCWlmICh3LT5z dWJ3b3JrZXIpCisJCQljb250aW51ZTsKKwogCQlpZiAody0+aW5fdXNlICYmIHctPnN1YmlkID09 IHN1YmlkICYmIHctPnJlbGlkID09IHJlbGlkICYmCiAJCQkoIW9ubHlfcnVubmluZyB8fCB3LT5w cm9jKSkKIAkJewpAQCAtMjU5LDExICsyNzAsMTEgQEAgbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQo T2lkIHN1YmlkLCBib29sIG9ubHlfcnVubmluZykKIH0KIAogLyoKLSAqIFN0YXJ0IG5ldyBhcHBs eSBiYWNrZ3JvdW5kIHdvcmtlciwgaWYgcG9zc2libGUuCisgKiBTdGFydCBuZXcgYmFja2dyb3Vu ZCB3b3JrZXIsIGlmIHBvc3NpYmxlLgogICovCi12b2lkCitib29sCiBsb2dpY2FscmVwX3dvcmtl cl9sYXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVz ZXJpZCwKLQkJCQkJCSBPaWQgcmVsaWQpCisJCQkJCQkgT2lkIHJlbGlkLCBkc21faGFuZGxlIHN1 Yndvcmtlcl9kc20pCiB7CiAJQmFja2dyb3VuZFdvcmtlciBiZ3c7CiAJQmFja2dyb3VuZFdvcmtl ckhhbmRsZSAqYmd3X2hhbmRsZTsKQEAgLTI3Myw2ICsyODQsMTAgQEAgbG9naWNhbHJlcF93b3Jr ZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1 c2VyaWQsCiAJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyID0gTlVMTDsKIAlpbnQJCQluc3luY3dv cmtlcnM7CiAJVGltZXN0YW1wVHogbm93OworCWJvb2wJCWlzX3N1YndvcmtlciA9IChzdWJ3b3Jr ZXJfZHNtICE9IERTTV9IQU5ETEVfSU5WQUxJRCk7CisKKwkvKiBTYW5pdHkgY2hlY2sgOiB3ZSBk b24ndCBzdXBwb3J0IHRhYmxlIHN5bmMgaW4gc3Vid29ya2VyLiAqLworCUFzc2VydCghKGlzX3N1 YndvcmtlciAmJiBPaWRJc1ZhbGlkKHJlbGlkKSkpOwogCiAJZXJlcG9ydChERUJVRzEsCiAJCQko ZXJybXNnX2ludGVybmFsKCJzdGFydGluZyBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Ig c3Vic2NyaXB0aW9uIFwiJXNcIiIsCkBAIC0zNTAsNyArMzY1LDcgQEAgcmV0cnk6CiAJaWYgKE9p ZElzVmFsaWQocmVsaWQpICYmIG5zeW5jd29ya2VycyA+PSBtYXhfc3luY193b3JrZXJzX3Blcl9z dWJzY3JpcHRpb24pCiAJewogCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsK LQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTM2NCw3ICszNzksNyBA QCByZXRyeToKIAkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVE RUQpLAogCQkJCSBlcnJtc2coIm91dCBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBzbG90 cyIpLAogCQkJCSBlcnJoaW50KCJZb3UgbWlnaHQgbmVlZCB0byBpbmNyZWFzZSBtYXhfbG9naWNh bF9yZXBsaWNhdGlvbl93b3JrZXJzLiIpKSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwog CX0KIAogCS8qIFByZXBhcmUgdGhlIHdvcmtlciBzbG90LiAqLwpAQCAtMzc5LDYgKzM5NCw3IEBA IHJldHJ5OgogCXdvcmtlci0+cmVsc3RhdGUgPSBTVUJSRUxfU1RBVEVfVU5LTk9XTjsKIAl3b3Jr ZXItPnJlbHN0YXRlX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCXdvcmtlci0+c3RyZWFtX2Zp bGVzZXQgPSBOVUxMOworCXdvcmtlci0+c3Vid29ya2VyID0gaXNfc3Vid29ya2VyOwogCXdvcmtl ci0+bGFzdF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAlUSU1FU1RBTVBfTk9CRUdJTih3b3Jr ZXItPmxhc3Rfc2VuZF90aW1lKTsKIAlUSU1FU1RBTVBfTk9CRUdJTih3b3JrZXItPmxhc3RfcmVj dl90aW1lKTsKQEAgLTM5NiwxOSArNDEyLDMxIEBAIHJldHJ5OgogCQlCR1dPUktFUl9CQUNLRU5E X0RBVEFCQVNFX0NPTk5FQ1RJT047CiAJYmd3LmJnd19zdGFydF90aW1lID0gQmdXb3JrZXJTdGFy dF9SZWNvdmVyeUZpbmlzaGVkOwogCXNucHJpbnRmKGJndy5iZ3dfbGlicmFyeV9uYW1lLCBCR1df TUFYTEVOLCAicG9zdGdyZXMiKTsKLQlzbnByaW50ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJH V19NQVhMRU4sICJBcHBseVdvcmtlck1haW4iKTsKKworCWlmIChpc19zdWJ3b3JrZXIpCisJCXNu cHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIkFwcGx5Qmd3b3JrZXJN YWluIik7CisJZWxzZQorCQlzbnByaW50ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhM RU4sICJBcHBseVdvcmtlck1haW4iKTsKKwogCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSkKIAkJc25w cmludGYoYmd3LmJnd19uYW1lLCBCR1dfTUFYTEVOLAogCQkJCSAibG9naWNhbCByZXBsaWNhdGlv biB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSBzeW5jICV1Iiwgc3ViaWQsIHJlbGlkKTsKKwll bHNlIGlmIChpc19zdWJ3b3JrZXIpCisJCXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExF TiwKKwkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgZm9y IHN1YnNjcmlwdGlvbiAldSIsIHN1YmlkKTsKIAllbHNlCiAJCXNucHJpbnRmKGJndy5iZ3dfbmFt ZSwgQkdXX01BWExFTiwKIAkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJz Y3JpcHRpb24gJXUiLCBzdWJpZCk7CisKIAlzbnByaW50ZihiZ3cuYmd3X3R5cGUsIEJHV19NQVhM RU4sICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciIpOwogCiAJYmd3LmJnd19yZXN0YXJ0X3Rp bWUgPSBCR1dfTkVWRVJfUkVTVEFSVDsKIAliZ3cuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7 CiAJYmd3LmJnd19tYWluX2FyZyA9IEludDMyR2V0RGF0dW0oc2xvdCk7CiAKKwlpZiAoaXNfc3Vi d29ya2VyKQorCQltZW1jcHkoYmd3LmJnd19leHRyYSwgJnN1Yndvcmtlcl9kc20sIHNpemVvZihk c21faGFuZGxlKSk7CisKIAlpZiAoIVJlZ2lzdGVyRHluYW1pY0JhY2tncm91bmRXb3JrZXIoJmJn dywgJmJnd19oYW5kbGUpKQogCXsKIAkJLyogRmFpbGVkIHRvIHN0YXJ0IHdvcmtlciwgc28gY2xl YW4gdXAgdGhlIHdvcmtlciBzbG90LiAqLwpAQCAtNDIxLDExICs0NDksMTEgQEAgcmV0cnk6CiAJ CQkJKGVycmNvZGUoRVJSQ09ERV9DT05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkg ZXJybXNnKCJvdXQgb2YgYmFja2dyb3VuZCB3b3JrZXIgc2xvdHMiKSwKIAkJCQkgZXJyaGludCgi WW91IG1pZ2h0IG5lZWQgdG8gaW5jcmVhc2UgbWF4X3dvcmtlcl9wcm9jZXNzZXMuIikpKTsKLQkJ cmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyogTm93IHdhaXQgdW50aWwgaXQgYXR0 YWNoZXMuICovCi0JV2FpdEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKHdvcmtlciwgZ2VuZXJh dGlvbiwgYmd3X2hhbmRsZSk7CisJcmV0dXJuIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFj aCh3b3JrZXIsIGdlbmVyYXRpb24sIGJnd19oYW5kbGUpOwogfQogCiAvKgpAQCAtNDM2LDE4ICs0 NjQsMjcgQEAgdm9pZAogbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxp ZCkKIHsKIAlMb2dpY2FsUmVwV29ya2VyICp3b3JrZXI7Ci0JdWludDE2CQlnZW5lcmF0aW9uOwog CiAJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKIAogCXdv cmtlciA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoc3ViaWQsIHJlbGlkLCBmYWxzZSk7CiAKLQkv KiBObyB3b3JrZXIsIG5vdGhpbmcgdG8gZG8uICovCi0JaWYgKCF3b3JrZXIpCi0JewotCQlMV0xv Y2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAod29y a2VyKQorCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKHdvcmtlcik7CisKKwlMV0xv Y2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKK30KKworLyoKKyAqIFdvcmtob3JzZSBm b3IgbG9naWNhbHJlcF93b3JrZXJfc3RvcCgpIGFuZCBsb2dpY2FscmVwX3dvcmtlcl9kZXRhY2go KS4gU3RvcAorICogdGhlIHdvcmtlciBhbmQgd2FpdCBmb3IgaXQgdG8gZGllLgorICovCitzdGF0 aWMgdm9pZAorbG9naWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbChMb2dpY2FsUmVwV29ya2Vy ICp3b3JrZXIpCit7CisJdWludDE2CQlnZW5lcmF0aW9uOworCisJQXNzZXJ0KExXTG9ja0hlbGRC eU1lKExvZ2ljYWxSZXBXb3JrZXJMb2NrKSk7CiAKIAkvKgogCSAqIFJlbWVtYmVyIHdoaWNoIGdl bmVyYXRpb24gd2FzIG91ciB3b3JrZXIgc28gd2UgY2FuIGNoZWNrIGlmIHdoYXQgd2Ugc2VlCkBA IC00ODUsMTAgKzUyMiw3IEBAIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQg cmVsaWQpCiAJCSAqIGRpZmZlcmVudCwgbWVhbmluZyB0aGF0IGEgZGlmZmVyZW50IHdvcmtlciBo YXMgdGFrZW4gdGhlIHNsb3QuCiAJCSAqLwogCQlpZiAoIXdvcmtlci0+aW5fdXNlIHx8IHdvcmtl ci0+Z2VuZXJhdGlvbiAhPSBnZW5lcmF0aW9uKQotCQl7Ci0JCQlMV0xvY2tSZWxlYXNlKExvZ2lj YWxSZXBXb3JrZXJMb2NrKTsKIAkJCXJldHVybjsKLQkJfQogCiAJCS8qIFdvcmtlciBoYXMgYXNz aWduZWQgcHJvYywgc28gaXQgaGFzIHN0YXJ0ZWQuICovCiAJCWlmICh3b3JrZXItPnByb2MpCkBA IC01MjIsOCArNTU2LDYgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCBy ZWxpZCkKIAogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQp OwogCX0KLQotCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwogfQogCiAvKgpA QCAtNTk5LDYgKzYzMSwyOSBAQCBsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2goaW50IHNsb3QpCiBz dGF0aWMgdm9pZAogbG9naWNhbHJlcF93b3JrZXJfZGV0YWNoKHZvaWQpCiB7CisJLyoKKwkgKiBJ ZiB3ZSBhcmUgdGhlIG1haW4gYXBwbHkgd29ya2VyLCBzdG9wIGFsbCB0aGUgYXBwbHkgYmFja2dy b3VuZCB3b3JrZXJzCisJICogd2Ugc3RhcnRlZCBiZWZvcmUuCisJICovCisJaWYgKCFNeUxvZ2lj YWxSZXBXb3JrZXItPnN1YndvcmtlcikKKwl7CisJCUxpc3QJICAgKndvcmtlcnM7CisJCUxpc3RD ZWxsICAgKmxjOworCisJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NI QVJFRCk7CisKKwkJd29ya2VycyA9IGxvZ2ljYWxyZXBfd29ya2Vyc19maW5kKE15TG9naWNhbFJl cFdvcmtlci0+c3ViaWQsIHRydWUpOworCQlmb3JlYWNoKGxjLCB3b3JrZXJzKQorCQl7CisJCQlM b2dpY2FsUmVwV29ya2VyICp3ID0gKExvZ2ljYWxSZXBXb3JrZXIgKikgbGZpcnN0KGxjKTsKKwor CQkJaWYgKHctPnN1YndvcmtlcikKKwkJCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFs KHcpOworCQl9CisKKwkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CisJfQor CiAJLyogQmxvY2sgY29uY3VycmVudCBhY2Nlc3MuICovCiAJTFdMb2NrQWNxdWlyZShMb2dpY2Fs UmVwV29ya2VyTG9jaywgTFdfRVhDTFVTSVZFKTsKIApAQCAtNjIxLDYgKzY3Niw3IEBAIGxvZ2lj YWxyZXBfd29ya2VyX2NsZWFudXAoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKQogCXdvcmtlci0+ dXNlcmlkID0gSW52YWxpZE9pZDsKIAl3b3JrZXItPnN1YmlkID0gSW52YWxpZE9pZDsKIAl3b3Jr ZXItPnJlbGlkID0gSW52YWxpZE9pZDsKKwl3b3JrZXItPnN1YndvcmtlciA9IGZhbHNlOwogfQog CiAvKgpAQCAtNjc5LDYgKzczNSwzMCBAQCBsb2dpY2FscmVwX3N5bmNfd29ya2VyX2NvdW50KE9p ZCBzdWJpZCkKIAlyZXR1cm4gcmVzOwogfQogCisvKgorICogQ291bnQgdGhlIG51bWJlciBvZiBy ZWdpc3RlcmVkIChub3QgbmVjZXNzYXJpbHkgcnVubmluZykgYXBwbHkgYmFja2dyb3VuZAorICog d29ya2VycyBmb3IgYSBzdWJzY3JpcHRpb24uCisgKi8KK2ludAorbG9naWNhbHJlcF9hcHBseV9i Z3dvcmtlcl9jb3VudChPaWQgc3ViaWQpCit7CisJaW50CQkJaTsKKwlpbnQJCQlyZXMgPSAwOwor CisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lKExvZ2ljYWxSZXBXb3JrZXJMb2NrKSk7CisKKwkvKiBT ZWFyY2ggZm9yIGF0dGFjaGVkIHdvcmtlciBmb3IgYSBnaXZlbiBzdWJzY3JpcHRpb24gaWQuICov CisJZm9yIChpID0gMDsgaSA8IG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM7IGkrKykK Kwl7CisJCUxvZ2ljYWxSZXBXb3JrZXIgKncgPSAmTG9naWNhbFJlcEN0eC0+d29ya2Vyc1tpXTsK KworCQlpZiAody0+c3ViaWQgPT0gc3ViaWQgJiYgdy0+c3Vid29ya2VyKQorCQkJcmVzKys7CisJ fQorCisJcmV0dXJuIHJlczsKK30KKwogLyoKICAqIEFwcGx5TGF1bmNoZXJTaG1lbVNpemUKICAq CQlDb21wdXRlIHNwYWNlIG5lZWRlZCBmb3IgcmVwbGljYXRpb24gbGF1bmNoZXIgc2hhcmVkIG1l bW9yeQpAQCAtODY4LDcgKzk0OCw3IEBAIEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5fYXJn KQogCQkJCQl3YWl0X3RpbWUgPSB3YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7CiAKIAkJCQkJ bG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIHN1Yi0+bmFtZSwK LQkJCQkJCQkJCQkJIHN1Yi0+b3duZXIsIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkgc3ViLT5v d25lciwgSW52YWxpZE9pZCwgRFNNX0hBTkRMRV9JTlZBTElEKTsKIAkJCQl9CiAJCQl9CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCmluZGV4IDIxOTM3YWIyZDMuLjUw YzU2N2ZiNmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3Jp Z2luLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYwpAQCAt MTA2MywxMiArMTA2MywyMSBAQCBSZXBsaWNhdGlvbk9yaWdpbkV4aXRDbGVhbnVwKGludCBjb2Rl LCBEYXR1bSBhcmcpCiAgKiBhcnJheSBkb2Vzbid0IGhhdmUgdG8gYmUgc2VhcmNoZWQgd2hlbiBj YWxsaW5nCiAgKiByZXBsb3JpZ2luX3Nlc3Npb25fYWR2YW5jZSgpLgogICoKLSAqIE9idmlvdXNs eSBvbmx5IG9uZSBzdWNoIGNhY2hlZCBvcmlnaW4gY2FuIGV4aXN0IHBlciBwcm9jZXNzIGFuZCB0 aGUgY3VycmVudAorICogTm9ybWFsbHkgb25seSBvbmUgc3VjaCBjYWNoZWQgb3JpZ2luIGNhbiBl eGlzdCBwZXIgcHJvY2VzcyBhbmQgdGhlIGN1cnJlbnQKICAqIGNhY2hlZCB2YWx1ZSBjYW4gb25s eSBiZSBzZXQgYWdhaW4gYWZ0ZXIgdGhlIHByZXZpb3VzIHZhbHVlIGlzIHRvcm4gZG93bgogICog d2l0aCByZXBsb3JpZ2luX3Nlc3Npb25fcmVzZXQoKS4KKyAqCisgKiBIb3dldmVyLCBpZiB0aGUg ZnVuY3Rpb24gcGFyYW1ldGVyICdtdXN0X2FjcXVpcmUnIGlzIGZhbHNlLCB3ZSBhbGxvdyB0aGUK KyAqIHByb2Nlc3MgdG8gdXNlIHRoZSBzYW1lIHNsb3QgYWxyZWFkeSBhY3F1aXJlZCBieSBhbm90 aGVyIHByb2Nlc3MuIEl0J3Mgc2FmZQorICogYmVjYXVzZSAxKSBUaGUgb25seSBjYWxsZXIgKGFw cGx5IGJhY2tncm91bmQgd29ya2Vycykgd2lsbCBtYWludGFpbiB0aGUKKyAqIGNvbW1pdCBvcmRl ciBieSBhbGxvd2luZyBvbmx5IG9uZSBwcm9jZXNzIHRvIGNvbW1pdCBhdCBhIHRpbWUsIHNvIG5v IHR3bworICogd29ya2VycyB3aWxsIGJlIG9wZXJhdGluZyBvbiB0aGUgc2FtZSBvcmlnaW4gYXQg dGhlIHNhbWUgdGltZSAoc2VlIGNvbW1lbnRzCisgKiBpbiBsb2dpY2FsL3dvcmtlci5jKS4gMikg RXZlbiB0aG91Z2ggd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHNlc3Npb24ncyBvcmlnaW4KKyAqIGNv bmN1cnJlbnRseSwgaXQncyBzYWZlIHRvIGRvIHNvIGFzIHdlIGNoYW5nZS9hZHZhbmNlIHRoZSBz ZXNzaW9uX29yaWdpbgorICogTFNOcyB1bmRlciByZXBsaWNhdGVfc3RhdGUgTFdMb2NrLgogICov CiB2b2lkCi1yZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAoUmVwT3JpZ2luSWQgbm9kZSkKK3JlcGxv cmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlLCBib29sIG11c3RfYWNxdWlyZSkK IHsKIAlzdGF0aWMgYm9vbCByZWdpc3RlcmVkX2NsZWFudXA7CiAJaW50CQkJaTsKQEAgLTExMTAs NyArMTExOSw3IEBAIHJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKQog CQlpZiAoY3Vyc3RhdGUtPnJvaWRlbnQgIT0gbm9kZSkKIAkJCWNvbnRpbnVlOwogCi0JCWVsc2Ug aWYgKGN1cnN0YXRlLT5hY3F1aXJlZF9ieSAhPSAwKQorCQllbHNlIGlmIChjdXJzdGF0ZS0+YWNx dWlyZWRfYnkgIT0gMCAmJiBtdXN0X2FjcXVpcmUpCiAJCXsKIAkJCWVyZXBvcnQoRVJST1IsCiAJ CQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX0lOX1VTRSksCkBAIC0xMTQxLDcgKzExNTAsMTQg QEAgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpCiAKIAlBc3NlcnQo c2Vzc2lvbl9yZXBsaWNhdGlvbl9zdGF0ZS0+cm9pZGVudCAhPSBJbnZhbGlkUmVwT3JpZ2luSWQp OwogCi0Jc2Vzc2lvbl9yZXBsaWNhdGlvbl9zdGF0ZS0+YWNxdWlyZWRfYnkgPSBNeVByb2NQaWQ7 CisJaWYgKG11c3RfYWNxdWlyZSkKKwkJc2Vzc2lvbl9yZXBsaWNhdGlvbl9zdGF0ZS0+YWNxdWly ZWRfYnkgPSBNeVByb2NQaWQ7CisJZWxzZSBpZiAoc2Vzc2lvbl9yZXBsaWNhdGlvbl9zdGF0ZS0+ YWNxdWlyZWRfYnkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQpLAorCQkJCSBlcnJtc2coImFwcGx5IGJhY2tn cm91bmQgd29ya2VyIGNvdWxkIG5vdCBmaW5kIHJlcGxpY2F0aW9uIHN0YXRlIHNsb3QgZm9yIHJl cGxpY2F0aW9uIG9yaWdpbiB3aXRoIE9JRCAldSIsCisJCQkJCQlub2RlKSwKKwkJCQkgZXJyZGV0 YWlsKCJUaGVyZSBpcyBubyByZXBsaWNhdGlvbiBzdGF0ZSBzbG90IHNldCBieSBpdHMgbWFpbiBh cHBseSB3b3JrZXIuIikpKTsKIAogCUxXTG9ja1JlbGVhc2UoUmVwbGljYXRpb25PcmlnaW5Mb2Nr KTsKIApAQCAtMTMyMSw3ICsxMzM3LDcgQEAgcGdfcmVwbGljYXRpb25fb3JpZ2luX3Nlc3Npb25f c2V0dXAoUEdfRlVOQ1RJT05fQVJHUykKIAogCW5hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoKHRleHQg KikgRGF0dW1HZXRQb2ludGVyKFBHX0dFVEFSR19EQVRVTSgwKSkpOwogCW9yaWdpbiA9IHJlcGxv cmlnaW5fYnlfbmFtZShuYW1lLCBmYWxzZSk7Ci0JcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9y aWdpbik7CisJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbiwgdHJ1ZSk7CiAKIAlyZXBs b3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3Byb3RvLmMKaW5kZXggZmY4NTEzZTJkMi4uNDdiZDgxMWZiNyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtMTE2MywzMSArMTE2Myw1NiBAQCBsb2dp Y2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwQ29tbWl0 RGF0YSAqY29tbWl0X2RhdGEpCiAvKgogICogV3JpdGUgU1RSRUFNIEFCT1JUIHRvIHRoZSBvdXRw dXQgc3RyZWFtLiBOb3RlIHRoYXQgeGlkIGFuZCBzdWJ4aWQgd2lsbCBiZQogICogc2FtZSBmb3Ig dGhlIHRvcC1sZXZlbCB0cmFuc2FjdGlvbiBhYm9ydC4KKyAqCisgKiBJZiB3cml0ZV9hYm9ydF9s c24gaXMgdHJ1ZSwgc2VuZCB0aGUgYWJvcnRfbHNuIGFuZCBhYm9ydF90aW1lIGZpZWxkcywKKyAq IG90aGVyd2lzZSBkb24ndC4KICAqLwogdm9pZAogbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJv cnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCSAgVHJhbnNhY3Rp b25JZCBzdWJ4aWQpCisJCQkJCQkJICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIg YWJvcnRfbHNuLAorCQkJCQkJCSAgYm9vbCB3cml0ZV9hYm9ydF9sc24pCiB7CiAJcHFfc2VuZGJ5 dGUob3V0LCBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX0FCT1JUKTsKIAotCUFzc2VydChUcmFuc2Fj dGlvbklkSXNWYWxpZCh4aWQpICYmIFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHN1YnhpZCkpOworCUFz c2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpICYmIFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHR4 bi0+eGlkKSk7CiAKIAkvKiB0cmFuc2FjdGlvbiBJRCAqLwogCXBxX3NlbmRpbnQzMihvdXQsIHhp ZCk7Ci0JcHFfc2VuZGludDMyKG91dCwgc3VieGlkKTsKKwlwcV9zZW5kaW50MzIob3V0LCB0eG4t PnhpZCk7CisKKwlpZiAod3JpdGVfYWJvcnRfbHNuKQorCXsKKwkJcHFfc2VuZGludDY0KG91dCwg YWJvcnRfbHNuKTsKKwkJcHFfc2VuZGludDY0KG91dCwgdHhuLT54YWN0X3RpbWUuYWJvcnRfdGlt ZSk7CisJfQogfQogCiAvKgogICogUmVhZCBTVFJFQU0gQUJPUlQgZnJvbSB0aGUgb3V0cHV0IHN0 cmVhbS4KKyAqCisgKiBJZiByZWFkX2Fib3J0X2xzbiBpcyB0cnVlLCB0cnkgdG8gcmVhZCB0aGUg YWJvcnRfbHNuIGFuZCBhYm9ydF90aW1lIGZpZWxkcywKKyAqIG90aGVyd2lzZSBkb24ndC4KICAq Lwogdm9pZAotbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIGluLCBUcmFu c2FjdGlvbklkICp4aWQsCi0JCQkJCQkJIFRyYW5zYWN0aW9uSWQgKnN1YnhpZCkKK2xvZ2ljYWxy ZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwKKwkJCQkJCQkgTG9naWNhbFJlcFN0 cmVhbUFib3J0RGF0YSAqYWJvcnRfZGF0YSwKKwkJCQkJCQkgYm9vbCByZWFkX2Fib3J0X2xzbikK IHsKLQlBc3NlcnQoeGlkICYmIHN1YnhpZCk7CisJQXNzZXJ0KGFib3J0X2RhdGEpOwogCi0JKnhp ZCA9IHBxX2dldG1zZ2ludChpbiwgNCk7Ci0JKnN1YnhpZCA9IHBxX2dldG1zZ2ludChpbiwgNCk7 CisJYWJvcnRfZGF0YS0+eGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKKwlhYm9ydF9kYXRhLT5z dWJ4aWQgPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCisJaWYgKHJlYWRfYWJvcnRfbHNuKQorCXsK KwkJYWJvcnRfZGF0YS0+YWJvcnRfbHNuID0gcHFfZ2V0bXNnaW50NjQoaW4pOworCQlhYm9ydF9k YXRhLT5hYm9ydF90aW1lID0gcHFfZ2V0bXNnaW50NjQoaW4pOworCX0KKwllbHNlCisJeworCQlh Ym9ydF9kYXRhLT5hYm9ydF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwkJYWJvcnRfZGF0YS0+ YWJvcnRfdGltZSA9IDA7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCA4OGEzN2ZkZTcyLi44OTg5MzI4MDQ2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIu YworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpA QCAtMjgyNiw3ICsyODI2LDggQEAgUmVvcmRlckJ1ZmZlckZpbmlzaFByZXBhcmVkKFJlb3JkZXJC dWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKICAqIGRpc2suCiAgKi8KIHZvaWQKLVJlb3Jk ZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dS ZWNQdHIgbHNuKQorUmVvcmRlckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2Fj dGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJICAgVGltZXN0YW1wVHogYWJvcnRfdGlt ZSkKIHsKIAlSZW9yZGVyQnVmZmVyVFhOICp0eG47CiAKQEAgLTI4MzcsNiArMjgzOCw4IEBAIFJl b3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhM b2dSZWNQdHIgbHNuKQogCWlmICh0eG4gPT0gTlVMTCkKIAkJcmV0dXJuOwogCisJdHhuLT54YWN0 X3RpbWUuYWJvcnRfdGltZSA9IGFib3J0X3RpbWU7CisKIAkvKiBGb3Igc3RyZWFtZWQgdHJhbnNh Y3Rpb25zIG5vdGlmeSB0aGUgcmVtb3RlIG5vZGUgYWJvdXQgdGhlIGFib3J0LiAqLwogCWlmIChy YnR4bl9pc19zdHJlYW1lZCh0eG4pKQogCXsKQEAgLTI5MTEsNyArMjkxNCw4IEBAIFJlb3JkZXJC dWZmZXJBYm9ydE9sZChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCBvbGRlc3RSdW5u aW5nWGlkKQogICogdG8gdGhpcyB4aWQgbWlnaHQgcmUtY3JlYXRlIHRoZSB0cmFuc2FjdGlvbiBp bmNvbXBsZXRlbHkuCiAgKi8KIHZvaWQKLVJlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1ZmZl ciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKK1Jlb3JkZXJCdWZmZXJG b3JnZXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxz biwKKwkJCQkJVGltZXN0YW1wVHogYWJvcnRfdGltZSkKIHsKIAlSZW9yZGVyQnVmZmVyVFhOICp0 eG47CiAKQEAgLTI5MjIsNiArMjkyNiw4IEBAIFJlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1 ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAlpZiAodHhuID09 IE5VTEwpCiAJCXJldHVybjsKIAorCXR4bi0+eGFjdF90aW1lLmFib3J0X3RpbWUgPSBhYm9ydF90 aW1lOworCiAJLyogRm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9ucyBub3RpZnkgdGhlIHJlbW90ZSBu b2RlIGFib3V0IHRoZSBhYm9ydC4gKi8KIAlpZiAocmJ0eG5faXNfc3RyZWFtZWQodHhuKSkKIAkJ cmItPnN0cmVhbV9hYm9ydChyYiwgdHhuLCBsc24pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvdGFibGVzeW5jLmMKaW5kZXggNjcwYzZmY2FkYS4uOGZmYmE3ZTJlNSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCkBAIC01NjgsNyArNTY4 LDggQEAgcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3JfYXBwbHkoWExvZ1JlY1B0ciBjdXJyZW50 X2xzbikKIAkJCQkJCQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+b2lkLAogCQkJCQkJCQkJCQkJIE15 U3Vic2NyaXB0aW9uLT5uYW1lLAogCQkJCQkJCQkJCQkJIE15TG9naWNhbFJlcFdvcmtlci0+dXNl cmlkLAotCQkJCQkJCQkJCQkJIHJzdGF0ZS0+cmVsaWQpOworCQkJCQkJCQkJCQkJIHJzdGF0ZS0+ cmVsaWQsCisJCQkJCQkJCQkJCQkgRFNNX0hBTkRMRV9JTlZBTElEKTsKIAkJCQkJCWhlbnRyeS0+ bGFzdF9zdGFydF90aW1lID0gbm93OwogCQkJCQl9CiAJCQkJfQpAQCAtNTg5LDYgKzU5MCw5IEBA IHByb2Nlc3Nfc3luY2luZ190YWJsZXNfZm9yX2FwcGx5KFhMb2dSZWNQdHIgY3VycmVudF9sc24p CiB2b2lkCiBwcm9jZXNzX3N5bmNpbmdfdGFibGVzKFhMb2dSZWNQdHIgY3VycmVudF9sc24pCiB7 CisJaWYgKE15TG9naWNhbFJlcFdvcmtlci0+c3Vid29ya2VyKQorCQlyZXR1cm47CisKIAlpZiAo YW1fdGFibGVzeW5jX3dvcmtlcigpKQogCQlwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zvcl9zeW5j KGN1cnJlbnRfbHNuKTsKIAllbHNlCkBAIC0xMjczLDcgKzEyNzcsNyBAQCBMb2dpY2FsUmVwU3lu Y1RhYmxlU3RhcnQoWExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCQkgKiB0aW1lIHRoaXMg dGFibGVzeW5jIHdhcyBsYXVuY2hlZC4KIAkJICovCiAJCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9i eV9uYW1lKG9yaWdpbm5hbWUsIGZhbHNlKTsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9y aWdpbmlkKTsKKwkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCB0cnVlKTsKIAkJ cmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOwogCQkqb3JpZ2luX3N0YXJ0cG9z ID0gcmVwbG9yaWdpbl9zZXNzaW9uX2dldF9wcm9ncmVzcyhmYWxzZSk7CiAKQEAgLTEzODQsNyAr MTM4OCw3IEBAIExvZ2ljYWxSZXBTeW5jVGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3Rh cnRwb3MpCiAJCQkJCQkgICB0cnVlIC8qIGdvIGJhY2t3YXJkICovICwgdHJ1ZSAvKiBXQUwgbG9n ICovICk7CiAJCVVubG9ja1JlbGF0aW9uT2lkKFJlcGxpY2F0aW9uT3JpZ2luUmVsYXRpb25JZCwg Um93RXhjbHVzaXZlTG9jayk7CiAKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlk KTsKKwkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCB0cnVlKTsKIAkJcmVwbG9y aWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOwogCX0KIAllbHNlCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCAzOGUzYjFjMWIzLi5iNWFhZTBlMTlhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTIyLDggKzIyLDI4 IEBACiAgKiBTVFJFQU1FRCBUUkFOU0FDVElPTlMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICogU3RyZWFtZWQgdHJhbnNhY3Rpb25zIChsYXJnZSB0cmFuc2FjdGlvbnMgZXhjZWVkaW5nIGEg bWVtb3J5IGxpbWl0IG9uIHRoZQotICogdXBzdHJlYW0pIGFyZSBub3QgYXBwbGllZCBpbW1lZGlh dGVseSwgYnV0IGluc3RlYWQsIHRoZSBkYXRhIGlzIHdyaXR0ZW4KLSAqIHRvIHRlbXBvcmFyeSBm aWxlcyBhbmQgdGhlbiBhcHBsaWVkIGF0IG9uY2Ugd2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2 ZXMuCisgKiB1cHN0cmVhbSkgYXJlIGFwcGxpZWQgdXNpbmcgb25lIG9mIHR3byBhcHByb2FjaGVz LgorICoKKyAqIDEpIFNlcGFyYXRlIGJhY2tncm91bmQgd29ya2VycworICoKKyAqIElmIHN0cmVh bWluZyA9IHBhcmFsbGVsLCB3ZSBhc3NpZ24gYSBuZXcgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIg KGlmCisgKiBhdmFpbGFibGUpIGFzIHNvb24gYXMgdGhlIHhhY3QncyBmaXJzdCBzdHJlYW0gaXMg cmVjZWl2ZWQuIFRoZSBtYWluIGFwcGx5CisgKiB3b3JrZXIgd2lsbCBzZW5kIGNoYW5nZXMgdG8g dGhpcyBuZXcgd29ya2VyIHZpYSBzaGFyZWQgbWVtb3J5LiBXZSBrZWVwIHRoaXMKKyAqIHdvcmtl ciBhc3NpZ25lZCB0aWxsIHRoZSB0cmFuc2FjdGlvbiBjb21taXQgaXMgcmVjZWl2ZWQgYW5kIGFs c28gd2FpdCBmb3IKKyAqIHRoZSB3b3JrZXIgdG8gZmluaXNoIGF0IGNvbW1pdC4gVGhpcyBwcmVz ZXJ2ZXMgY29tbWl0IG9yZGVyaW5nIGFuZCBhdm9pZHMKKyAqIGZpbGUgSS9PIGluIG1vc3QgY2Fz ZXMuIFdlIHN0aWxsIG5lZWQgdG8gc3BpbGwgdG8gYSBmaWxlIGlmIHRoZXJlIGlzIG5vCisgKiB3 b3JrZXIgYXZhaWxhYmxlLiBJdCBpcyBpbXBvcnRhbnQgdG8gbWFpbnRhaW4gY29tbWl0IG9yZGVy IHRvIGF2b2lkIGZhaWx1cmVzCisgKiBkdWUgdG8gKGEpIHRyYW5zYWN0aW9uIGRlcGVuZGVuY2ll cywgc2F5IGlmIHdlIGluc2VydCBhIHJvdyBpbiB0aGUgZmlyc3QKKyAqIHRyYW5zYWN0aW9uIGFu ZCB1cGRhdGUgaXQgaW4gdGhlIHNlY29uZCB0cmFuc2FjdGlvbiB0aGVuIGFsbG93aW5nIHRvIGFw cGx5CisgKiBib3RoIGluIHBhcmFsbGVsIGNhbiBsZWFkIHRvIGZhaWx1cmUgaW4gdGhlIHVwZGF0 ZS4gKGIpIGRlYWRsb2NrcywgYWxsb3dpbmcKKyAqIHRyYW5zYWN0aW9ucyB0aGF0IHVwZGF0ZSB0 aGUgc2FtZSBzZXQgb2Ygcm93cy90YWJsZXMgaW4gb3Bwb3NpdGUgb3JkZXIgdG8gYmUKKyAqIGFw cGxpZWQgaW4gcGFyYWxsZWwgY2FuIGxlYWQgdG8gZGVhZGxvY2tzLgorICoKKyAqIDIpIFdyaXRl IHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgYXBwbHkgd2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2 ZXMKKyAqCisgKiBJZiBubyB3b3JrZXIgaXMgYXZhaWxhYmxlIHRvIGhhbmRsZSBzdHJlYW1lZCB0 cmFuc2FjdGlvbiwgdGhlIGRhdGEgaXMKKyAqIHdyaXR0ZW4gdG8gdGVtcG9yYXJ5IGZpbGVzIGFu ZCB0aGVuIGFwcGxpZWQgYXQgb25jZSB3aGVuIHRoZSBmaW5hbCBjb21taXQKKyAqIGFycml2ZXMu CiAgKgogICogVW5saWtlIHRoZSByZWd1bGFyIChub24tc3RyZWFtZWQpIGNhc2UsIGhhbmRsaW5n IHN0cmVhbWVkIHRyYW5zYWN0aW9ucyBoYXMKICAqIHRvIGhhbmRsZSBhYm9ydHMgb2YgYm90aCB0 aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24gYW5kIHN1YnRyYW5zYWN0aW9ucy4gVGhpcwpAQCAtMjE5 LDIwICsyMzksOCBAQCB0eXBlZGVmIHN0cnVjdCBBcHBseUV4ZWN1dGlvbkRhdGEKIAlQYXJ0aXRp b25UdXBsZVJvdXRpbmcgKnByb3V0ZTsJLyogcGFydGl0aW9uIHJvdXRpbmcgaW5mbyAqLwogfSBB cHBseUV4ZWN1dGlvbkRhdGE7CiAKLS8qIFN0cnVjdCBmb3Igc2F2aW5nIGFuZCByZXN0b3Jpbmcg YXBwbHkgZXJyY29udGV4dCBpbmZvcm1hdGlvbiAqLwotdHlwZWRlZiBzdHJ1Y3QgQXBwbHlFcnJv ckNhbGxiYWNrQXJnCi17Ci0JTG9naWNhbFJlcE1zZ1R5cGUgY29tbWFuZDsJLyogMCBpZiBpbnZh bGlkICovCi0JTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWw7Ci0KLQkvKiBSZW1vdGUgbm9kZSBp bmZvcm1hdGlvbiAqLwotCWludAkJCXJlbW90ZV9hdHRudW07CS8qIC0xIGlmIGludmFsaWQgKi8K LQlUcmFuc2FjdGlvbklkIHJlbW90ZV94aWQ7Ci0JWExvZ1JlY1B0cglmaW5pc2hfbHNuOwotCWNo YXIJICAgKm9yaWdpbl9uYW1lOwotfSBBcHBseUVycm9yQ2FsbGJhY2tBcmc7Ci0KLXN0YXRpYyBB cHBseUVycm9yQ2FsbGJhY2tBcmcgYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnID0KKy8qIGVycmNv bnRleHQgdHJhY2tlciAqLworQXBwbHlFcnJvckNhbGxiYWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxi YWNrX2FyZyA9CiB7CiAJLmNvbW1hbmQgPSAwLAogCS5yZWwgPSBOVUxMLApAQCAtMjQyLDcgKzI1 MCw3IEBAIHN0YXRpYyBBcHBseUVycm9yQ2FsbGJhY2tBcmcgYXBwbHlfZXJyb3JfY2FsbGJhY2tf YXJnID0KIAkub3JpZ2luX25hbWUgPSBOVUxMLAogfTsKIAotc3RhdGljIE1lbW9yeUNvbnRleHQg QXBwbHlNZXNzYWdlQ29udGV4dCA9IE5VTEw7CitNZW1vcnlDb250ZXh0IEFwcGx5TWVzc2FnZUNv bnRleHQgPSBOVUxMOwogTWVtb3J5Q29udGV4dCBBcHBseUNvbnRleHQgPSBOVUxMOwogCiAvKiBw ZXIgc3RyZWFtIGNvbnRleHQgZm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgKi8KQEAgLTI1MSwy NyArMjU5LDM5IEBAIHN0YXRpYyBNZW1vcnlDb250ZXh0IExvZ2ljYWxTdHJlYW1pbmdDb250ZXh0 ID0gTlVMTDsKIFdhbFJlY2VpdmVyQ29ubiAqTG9nUmVwV29ya2VyV2FsUmN2Q29ubiA9IE5VTEw7 CiAKIFN1YnNjcmlwdGlvbiAqTXlTdWJzY3JpcHRpb24gPSBOVUxMOwotc3RhdGljIGJvb2wgTXlT dWJzY3JpcHRpb25WYWxpZCA9IGZhbHNlOworYm9vbCBNeVN1YnNjcmlwdGlvblZhbGlkID0gZmFs c2U7CiAKIGJvb2wJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogc3RhdGljIFhMb2dS ZWNQdHIgcmVtb3RlX2ZpbmFsX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCiAvKiBmaWVsZHMg dmFsaWQgb25seSB3aGVuIHByb2Nlc3Npbmcgc3RyZWFtZWQgdHJhbnNhY3Rpb24gKi8KLXN0YXRp YyBib29sIGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7Citib29sIGluX3N0cmVhbWVk X3RyYW5zYWN0aW9uID0gZmFsc2U7CisKK1RyYW5zYWN0aW9uSWQgc3RyZWFtX3hpZCA9IEludmFs aWRUcmFuc2FjdGlvbklkOworc3RhdGljIEFwcGx5Qmd3b3JrZXJTdGF0ZSAqc3RyZWFtX2FwcGx5 X3dvcmtlciA9IE5VTEw7CiAKLXN0YXRpYyBUcmFuc2FjdGlvbklkIHN0cmVhbV94aWQgPSBJbnZh bGlkVHJhbnNhY3Rpb25JZDsKKy8qIENoZWNrIGlmIHdlIGFyZSBhcHBseWluZyB0aGUgdHJhbnNh Y3Rpb24gaW4gYW4gYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgKi8KKyNkZWZpbmUgYXBwbHlfYmd3 b3JrZXJfYWN0aXZlKCkgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uICYmIHN0cmVhbV9hcHBseV93 b3JrZXIgIT0gTlVMTCkKKworLyoKKyAqIFRoZSBudW1iZXIgb2YgY2hhbmdlcyBkdXJpbmcgb25l IHN0cmVhbWluZyBibG9jayAob25seSBmb3IgYXBwbHkgYmFja2dyb3VuZAorICogd29ya2VycykK KyAqLworc3RhdGljIHVpbnQzMiBuY2hhbmdlcyA9IDA7CiAKIC8qCiAgKiBXZSBlbmFibGUgc2tp cHBpbmcgYWxsIGRhdGEgbW9kaWZpY2F0aW9uIGNoYW5nZXMgKElOU0VSVCwgVVBEQVRFLCBldGMu KSBmb3IKICAqIHRoZSBzdWJzY3JpcHRpb24gaWYgdGhlIHJlbW90ZSB0cmFuc2FjdGlvbidzIGZp bmlzaCBMU04gbWF0Y2hlcyB0aGUgc3Vic2tpcGxzbi4KICAqIE9uY2Ugd2Ugc3RhcnQgc2tpcHBp bmcgY2hhbmdlcywgd2UgZG9uJ3Qgc3RvcCBpdCB1bnRpbCB3ZSBza2lwIGFsbCBjaGFuZ2VzIG9m CiAgKiB0aGUgdHJhbnNhY3Rpb24gZXZlbiBpZiBwZ19zdWJzY3JpcHRpb24gaXMgdXBkYXRlZCBh bmQgTXlTdWJzY3JpcHRpb24tPnNraXBsc24KLSAqIGdldHMgY2hhbmdlZCBvciByZXNldCBkdXJp bmcgdGhhdC4gQWxzbywgaW4gc3RyZWFtaW5nIHRyYW5zYWN0aW9uIGNhc2VzLCB3ZQotICogZG9u J3Qgc2tpcCByZWNlaXZpbmcgYW5kIHNwb29saW5nIHRoZSBjaGFuZ2VzIHNpbmNlIHdlIGRlY2lk ZSB3aGV0aGVyIG9yIG5vdAorICogZ2V0cyBjaGFuZ2VkIG9yIHJlc2V0IGR1cmluZyB0aGF0LiBB bHNvLCBpbiBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gY2FzZXMgKHN0cmVhbWluZyA9IG9uKSwKKyAq IHdlIGRvbid0IHNraXAgcmVjZWl2aW5nIGFuZCBzcG9vbGluZyB0aGUgY2hhbmdlcyBzaW5jZSB3 ZSBkZWNpZGUgd2hldGhlciBvciBub3QKICAqIHRvIHNraXAgYXBwbHlpbmcgdGhlIGNoYW5nZXMg d2hlbiBzdGFydGluZyB0byBhcHBseSBjaGFuZ2VzLiBUaGUgc3Vic2tpcGxzbiBpcwogICogY2xl YXJlZCBhZnRlciBzdWNjZXNzZnVsbHkgc2tpcHBpbmcgdGhlIHRyYW5zYWN0aW9uIG9yIGFwcGx5 aW5nIG5vbi1lbXB0eQogICogdHJhbnNhY3Rpb24uIFRoZSBsYXR0ZXIgcHJldmVudHMgdGhlIG1p c3Rha2VubHkgc3BlY2lmaWVkIHN1YnNraXBsc24gZnJvbQotICogYmVpbmcgbGVmdC4KKyAqIGJl aW5nIGxlZnQuIE5vdGUgdGhhdCB3ZSBjYW5ub3Qgc2tpcCB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0 aW9ucyB3aGVuIHVzaW5nCisgKiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlcnMgYmVjYXVzZSB3ZSBj YW5ub3QgZ2V0IHRoZSBmaW5pc2ggTFNOIGJlZm9yZQorICogYXBwbHlpbmcgdGhlIGNoYW5nZXMu CiAgKi8KIHN0YXRpYyBYTG9nUmVjUHRyIHNraXBfeGFjdF9maW5pc2hfbHNuID0gSW52YWxpZFhM b2dSZWNQdHI7CiAjZGVmaW5lIGlzX3NraXBwaW5nX2NoYW5nZXMoKSAodW5saWtlbHkoIVhMb2dS ZWNQdHJJc0ludmFsaWQoc2tpcF94YWN0X2ZpbmlzaF9sc24pKSkKQEAgLTMyNCw5ICszNDQsNiBA QCBzdGF0aWMgdm9pZCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpOwogCiBzdGF0aWMg dm9pZCBEaXNhYmxlU3Vic2NyaXB0aW9uQW5kRXhpdCh2b2lkKTsKIAotLyogcHJvdG90eXBlIG5l ZWRlZCBiZWNhdXNlIG9mIHN0cmVhbV9jb21taXQgKi8KLXN0YXRpYyB2b2lkIGFwcGx5X2Rpc3Bh dGNoKFN0cmluZ0luZm8gcyk7Ci0KIHN0YXRpYyB2b2lkIGFwcGx5X2hhbmRsZV9jb21taXRfaW50 ZXJuYWwoTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKTsKIHN0YXRpYyB2b2lkIGFw cGx5X2hhbmRsZV9pbnNlcnRfaW50ZXJuYWwoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0YSwKIAkJ CQkJCQkJCQkgUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKQEAgLTM1OSw3ICszNzYsNiBAQCBzdGF0 aWMgdm9pZCBzdG9wX3NraXBwaW5nX2NoYW5nZXModm9pZCk7CiBzdGF0aWMgdm9pZCBjbGVhcl9z dWJzY3JpcHRpb25fc2tpcF9sc24oWExvZ1JlY1B0ciBmaW5pc2hfbHNuKTsKIAogLyogRnVuY3Rp b25zIGZvciBhcHBseSBlcnJvciBjYWxsYmFjayAqLwotc3RhdGljIHZvaWQgYXBwbHlfZXJyb3Jf Y2FsbGJhY2sodm9pZCAqYXJnKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXBwbHlfZXJyb3Jf Y29udGV4dF94YWN0KFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbik7CiBzdGF0aWMg aW5saW5lIHZvaWQgcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKHZvaWQpOwogCkBAIC00 MjYsNDAgKzQ0Miw4NSBAQCBlbmRfcmVwbGljYXRpb25fc3RlcCh2b2lkKQogfQogCiAvKgotICog SGFuZGxlIHN0cmVhbWVkIHRyYW5zYWN0aW9ucy4KKyAqIEhhbmRsZSBzdHJlYW1lZCB0cmFuc2Fj dGlvbnMgZm9yIGJvdGggdGhlIG1haW4gYXBwbHkgd29ya2VyIGFuZCB0aGUgYXBwbHkKKyAqIGJh Y2tncm91bmQgd29ya2Vycy4KKyAqCisgKiBJbiBzdHJlYW1pbmcgY2FzZSAocmVjZWl2aW5nIGEg YmxvY2sgb2Ygc3RyZWFtZWQgdHJhbnNhY3Rpb24pLCBmb3IKKyAqIFNVQlNUUkVBTV9PTiBtb2Rl LCBzaW1wbHkgcmVkaXJlY3QgaXQgdG8gYSBmaWxlIGZvciB0aGUgcHJvcGVyIHRvcGxldmVsCisg KiB0cmFuc2FjdGlvbiwgYW5kIGZvciBTVUJTVFJFQU1fUEFSQUxMRUwgbW9kZSwgc2VuZCB0aGUg Y2hhbmdlcyB0byBhcHBseQorICogYmFja2dyb3VuZCB3b3JrZXJzIChMT0dJQ0FMX1JFUF9NU0df UkVMQVRJT04gb3IgTE9HSUNBTF9SRVBfTVNHX1RZUEUgY2hhbmdlcworICogd2lsbCBhbHNvIGJl IGFwcGxpZWQgaW4gbWFpbiBhcHBseSB3b3JrZXIpLgogICoKLSAqIElmIGluIHN0cmVhbWluZyBt b2RlIChyZWNlaXZpbmcgYSBibG9jayBvZiBzdHJlYW1lZCB0cmFuc2FjdGlvbiksIHdlCi0gKiBz aW1wbHkgcmVkaXJlY3QgaXQgdG8gYSBmaWxlIGZvciB0aGUgcHJvcGVyIHRvcGxldmVsIHRyYW5z YWN0aW9uLgorICogRm9yIG5vbi1zdHJlYW1lZCB0cmFuc2FjdGlvbnMsIHJldHVybnMgZmFsc2U7 CisgKiBGb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25zLCByZXR1cm5zIHRydWUgaWYgaW4gbWFpbiBh cHBseSB3b3JrZXIsIGZhbHNlCisgKiBvdGhlcndpc2UuCiAgKgotICogUmV0dXJucyB0cnVlIGZv ciBzdHJlYW1lZCB0cmFuc2FjdGlvbnMsIGZhbHNlIG90aGVyd2lzZSAocmVndWxhciBtb2RlKS4K KyAqIEV4Y2VwdGlvbjogV2hlbiB0aGUgbWFpbiBhcHBseSB3b3JrZXIgaXMgYXBwbHlpbmcgc3Ry ZWFtaW5nIHRyYW5zYWN0aW9ucyBpbgorICogcGFyYWxsZWwgbW9kZSAoZS5nLiB3aGVuIGFkZHJl c3NpbmcgTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OIG9yCisgKiBMT0dJQ0FMX1JFUF9NU0dfVFlQ RSBjaGFuZ2VzKSwgdGhlbiByZXR1cm4gZmFsc2UuCiAgKi8KIHN0YXRpYyBib29sCiBoYW5kbGVf c3RyZWFtZWRfdHJhbnNhY3Rpb24oTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZv IHMpCiB7Ci0JVHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZCA9 IEludmFsaWRUcmFuc2FjdGlvbklkOwogCi0JLyogbm90IGluIHN0cmVhbWluZyBtb2RlICovCi0J aWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwkvKiBOb3QgaW4gc3RyZWFtaW5nIG1vZGUg Ki8KKwlpZiAoIShpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiB8fCBhbV9hcHBseV9iZ3dvcmtlcigp KSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JQXNzZXJ0KHN0cmVhbV9mZCAhPSBOVUxMKTsKIAlBc3Nl cnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoc3RyZWFtX3hpZCkpOwogCiAJLyoKIAkgKiBXZSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBYSUQgb2YgdGhlIHN1YnhhY3QgYXMgdGhlIGZpcnN0IHBhcnQgb2Yg dGhlCiAJICogbWVzc2FnZSwgc28gZXh0cmFjdCBpdC4KIAkgKi8KLQl4aWQgPSBwcV9nZXRtc2dp bnQocywgNCk7CisJY3VycmVudF94aWQgPSBwcV9nZXRtc2dpbnQocywgNCk7CiAKLQlpZiAoIVRy YW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpCisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChjdXJy ZW50X3hpZCkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NP TF9WSU9MQVRJT04pLAogCQkJCSBlcnJtc2dfaW50ZXJuYWwoImludmFsaWQgdHJhbnNhY3Rpb24g SUQgaW4gc3RyZWFtZWQgcmVwbGljYXRpb24gdHJhbnNhY3Rpb24iKSkpOwogCi0JLyogQWRkIHRo ZSBuZXcgc3VieGFjdCB0byB0aGUgYXJyYXkgKHVubGVzcyBhbHJlYWR5IHRoZXJlKS4gKi8KLQlz dWJ4YWN0X2luZm9fYWRkKHhpZCk7CisJaWYgKGFtX2FwcGx5X2Jnd29ya2VyKCkpCisJeworCQkv KiBEZWZpbmUgYSBzYXZlcG9pbnQgZm9yIGEgc3VieGFjdCBpZiBuZWVkZWQuICovCisJCWFwcGx5 X2Jnd29ya2VyX3N1YnhhY3RfaW5mb19hZGQoY3VycmVudF94aWQpOworCisJCXJldHVybiBmYWxz ZTsKKwl9CisKKwlpZiAoYXBwbHlfYmd3b3JrZXJfYWN0aXZlKCkpCisJeworCQkvKgorCQkgKiBU aGlzIGlzIHRoZSBtYWluIGFwcGx5IHdvcmtlciwgYnV0IHRoZXJlIGlzIGFuIGFwcGx5IGJhY2tn cm91bmQKKwkJICogd29ya2VyLCBzbyBhcHBseSB0aGUgY2hhbmdlcyBvZiB0aGlzIHRyYW5zYWN0 aW9uIGluIHRoYXQgYmFja2dyb3VuZAorCQkgKiB3b3JrZXIuIFBhc3MgdGhlIGRhdGEgdG8gdGhl IHdvcmtlci4KKwkJICovCisJCWFwcGx5X2Jnd29ya2VyX3NlbmRfZGF0YShzdHJlYW1fYXBwbHlf d29ya2VyLCBzLT5sZW4sIHMtPmRhdGEpOworCQluY2hhbmdlcyArPSAxOworCisJCS8qCisJCSAq IFhYWCBUaGUgcHVibGlzaGVyIHNpZGUgZG9lc24ndCBhbHdheXMgc2VuZCByZWxhdGlvbi90eXBl IHVwZGF0ZQorCQkgKiBtZXNzYWdlcyBhZnRlciB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCBz byBhbHNvIHVwZGF0ZSB0aGUKKwkJICogcmVsYXRpb24vdHlwZSBpbiBtYWluIGFwcGx5IHdvcmtl ciBoZXJlLiBTZWUgZnVuY3Rpb24KKwkJICogY2xlYW51cF9yZWxfc3luY19jYWNoZS4KKwkJICov CisJCWlmIChhY3Rpb24gPT0gTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OIHx8CisJCQlhY3Rpb24g PT0gTE9HSUNBTF9SRVBfTVNHX1RZUEUpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJcmV0dXJuIHRy dWU7CisJfQorCisJLyoKKwkgKiBUaGlzIGlzIHRoZSBtYWluIGFwcGx5IHdvcmtlciwgYnV0IHRo ZXJlIGlzIG5vIGFwcGx5IGJhY2tncm91bmQgd29ya2VyLAorCSAqIHNvIHdyaXRlIHRvIHRlbXBv cmFyeSBmaWxlcyBhbmQgYXBwbHkgd2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2ZXMuCisJICoK KwkgKiBBZGQgdGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJheSAodW5sZXNzIGFscmVhZHkgdGhl cmUpLgorCSAqLworCXN1YnhhY3RfaW5mb19hZGQoY3VycmVudF94aWQpOwogCi0JLyogd3JpdGUg dGhlIGNoYW5nZSB0byB0aGUgY3VycmVudCBmaWxlICovCisJLyogV3JpdGUgdGhlIGNoYW5nZSB0 byB0aGUgY3VycmVudCBmaWxlICovCiAJc3RyZWFtX3dyaXRlX2NoYW5nZShhY3Rpb24sIHMpOwog CiAJcmV0dXJuIHRydWU7CkBAIC04NDQsNiArOTA1LDkgQEAgYXBwbHlfaGFuZGxlX2NvbW1pdChT dHJpbmdJbmZvIHMpCiAKIAlhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0 YSk7CiAKKwkvKiBDaGVjayB0aGUgc3RhdHVzIG9mIGFwcGx5IGJhY2tncm91bmQgd29ya2VyIGlm IGFueS4gKi8KKwlhcHBseV9iZ3dvcmtlcl9jaGVja19zdGF0dXMoKTsKKwogCS8qIFByb2Nlc3Mg YW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCiAJ cHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhjb21taXRfZGF0YS5lbmRfbHNuKTsKIApAQCAtODk4LDcg Kzk2Miw5IEBAIGFwcGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKExvZ2ljYWxSZXBQcmVwYXJl ZFR4bkRhdGEgKnByZXBhcmVfZGF0YSkKIAkgKiBCZWdpblRyYW5zYWN0aW9uQmxvY2sgaXMgbmVj ZXNzYXJ5IHRvIGJhbGFuY2UgdGhlIEVuZFRyYW5zYWN0aW9uQmxvY2sKIAkgKiBjYWxsZWQgd2l0 aGluIHRoZSBQcmVwYXJlVHJhbnNhY3Rpb25CbG9jayBiZWxvdy4KIAkgKi8KLQlCZWdpblRyYW5z YWN0aW9uQmxvY2soKTsKKwlpZiAoIUlzVHJhbnNhY3Rpb25CbG9jaygpKQorCQlCZWdpblRyYW5z YWN0aW9uQmxvY2soKTsKKwogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOyAvKiBDb21wbGV0 ZXMgdGhlIHByZWNlZGluZyBCZWdpbiBjb21tYW5kLiAqLwogCiAJLyoKQEAgLTk1MCw2ICsxMDE2 LDkgQEAgYXBwbHlfaGFuZGxlX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCiAJaW5fcmVtb3RlX3Ry YW5zYWN0aW9uID0gZmFsc2U7CiAKKwkvKiBDaGVjayB0aGUgc3RhdHVzIG9mIGFwcGx5IGJhY2tn cm91bmQgd29ya2VyIGlmIGFueS4gKi8KKwlhcHBseV9iZ3dvcmtlcl9jaGVja19zdGF0dXMoKTsK KwogCS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4g cGFyYWxsZWwuICovCiAJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhwcmVwYXJlX2RhdGEuZW5kX2xz bik7CiAKQEAgLTEwNjQsMTAgKzExMzMsNiBAQCBhcHBseV9oYW5kbGVfcm9sbGJhY2tfcHJlcGFy ZWQoU3RyaW5nSW5mbyBzKQogCiAvKgogICogSGFuZGxlIFNUUkVBTSBQUkVQQVJFLgotICoKLSAq IExvZ2ljIGlzIGluIHR3byBwYXJ0czoKLSAqIDEuIFJlcGxheSBhbGwgdGhlIHNwb29sZWQgb3Bl cmF0aW9ucwotICogMi4gTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQKICAqLwogc3Rh dGljIHZvaWQKIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShTdHJpbmdJbmZvIHMpCkBAIC0x MDg4LDI0ICsxMTUzLDc4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShTdHJpbmdJbmZv IHMpCiAJbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9wcmVwYXJlKHMsICZwcmVwYXJlX2RhdGEpOwog CXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QocHJlcGFyZV9kYXRhLnhpZCwgcHJlcGFyZV9k YXRhLnByZXBhcmVfbHNuKTsKIAotCWVsb2coREVCVUcxLCAicmVjZWl2ZWQgcHJlcGFyZSBmb3Ig c3RyZWFtZWQgdHJhbnNhY3Rpb24gJXUiLCBwcmVwYXJlX2RhdGEueGlkKTsKKwlpZiAoYW1fYXBw bHlfYmd3b3JrZXIoKSkKKwl7CisJCS8qIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVk LiAqLworCQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKIAot CS8qIFJlcGxheSBhbGwgdGhlIHNwb29sZWQgb3BlcmF0aW9ucy4gKi8KLQlhcHBseV9zcG9vbGVk X21lc3NhZ2VzKHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJlX2xzbik7CisJ CUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCi0JLyogTWFyayB0aGUgdHJhbnNhY3Rpb24g YXMgcHJlcGFyZWQuICovCi0JYXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnByZXBhcmVf ZGF0YSk7CisJCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKLQlDb21taXRUcmFuc2FjdGlv bkNvbW1hbmQoKTsKKwkJbGlzdF9mcmVlKHN1YnhhY3RsaXN0KTsKKwkJc3VieGFjdGxpc3QgPSBO SUw7CiAKLQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOworCQlhcHBseV9iZ3dvcmtlcl9zZXRf c3RhdHVzKEFQUExZX0JHV09SS0VSX0ZJTklTSEVEKTsKKwl9CisJZWxzZQorCXsKKwkJLyogVGhp cyBpcyB0aGUgbWFpbiBhcHBseSB3b3JrZXIuICovCisJCUFwcGx5Qmd3b3JrZXJTdGF0ZSAqd3N0 YXRlID0gYXBwbHlfYmd3b3JrZXJfZmluZChwcmVwYXJlX2RhdGEueGlkKTsKIAotCXN0b3JlX2Zs dXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKKwkJZWxvZyhERUJVRzEsICJyZWNl aXZlZCBwcmVwYXJlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsCisJCQkgcHJlcGFyZV9k YXRhLnhpZCk7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgd2UgYXJlIHByb2Nlc3NpbmcgdGhpcyB0 cmFuc2FjdGlvbiBpbiBhbiBhcHBseSBiYWNrZ3JvdW5kCisJCSAqIHdvcmtlciBhbmQgaWYgc28s IHNlbmQgdGhlIGNoYW5nZXMgdG8gdGhhdCB3b3JrZXIuCisJCSAqLworCQlpZiAod3N0YXRlKQor CQl7CisJCQkvKiBTZW5kIFNUUkVBTSBQUkVQQVJFIG1lc3NhZ2UgdG8gdGhlIGFwcGx5IGJhY2tn cm91bmQgd29ya2VyLiAqLworCQkJYXBwbHlfYmd3b3JrZXJfc2VuZF9kYXRhKHdzdGF0ZSwgcy0+ bGVuLCBzLT5kYXRhKTsKKworCQkJLyoKKwkJCSAqIEFmdGVyIHNlbmRpbmcgdGhlIGRhdGEgdG8g dGhlIGFwcGx5IGJhY2tncm91bmQgd29ya2VyLCB3YWl0IGZvcgorCQkJICogdGhhdCB3b3JrZXIg dG8gZmluaXNoLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWludGFpbiBjb21taXQKKwkJCSAqIG9y ZGVyIHdoaWNoIGF2b2lkcyBmYWlsdXJlcyBkdWUgdG8gdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVz IGFuZAorCQkJICogZGVhZGxvY2tzLgorCQkJICovCisJCQlhcHBseV9iZ3dvcmtlcl93YWl0X2Zv cih3c3RhdGUsIEFQUExZX0JHV09SS0VSX0ZJTklTSEVEKTsKKwkJCWFwcGx5X2Jnd29ya2VyX2Zy ZWUod3N0YXRlKTsKKworCQkJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKKwkJCXN0b3JlX2Zs dXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CS8qCisJCQkgKiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gc2VyaWFsaXplZCB0byBmaWxlLCBz byByZXBsYXkgYWxsIHRoZQorCQkJICogc3Bvb2xlZCBvcGVyYXRpb25zLgorCQkJICovCisJCQlh cHBseV9zcG9vbGVkX21lc3NhZ2VzKHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5wcmVw YXJlX2xzbik7CisKKwkJCS8qIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkLiAqLwor CQkJYXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CisKKwkJCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2Up OworCisJCQlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisKKwkJ CWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJCQkvKiBVbmxpbmsgdGhlIGZpbGVz IHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCisJCQlzdHJlYW1f Y2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBwcmVwYXJlX2RhdGEueGlk KTsKKwkJfQorCX0KIAogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCXN0cmVhbV9h cHBseV93b3JrZXIgPSBOVUxMOwogCi0JLyogdW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6 ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBpbmZvLiAqLwotCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15 TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHByZXBhcmVfZGF0YS54aWQpOworCS8qIENoZWNrIHRo ZSBzdGF0dXMgb2YgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgaWYgYW55LiAqLworCWFwcGx5X2Jn d29ya2VyX2NoZWNrX3N0YXR1cygpOwogCiAJLyogUHJvY2VzcyBhbnkgdGFibGVzIHRoYXQgYXJl IGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8KIAlwcm9jZXNzX3N5bmNpbmdfdGFi bGVzKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKQEAgLTExNTUsMTUgKzEyNzQsNiBAQCBhcHBseV9o YW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BS T1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiZHVwbGljYXRlIFNUUkVB TSBTVEFSVCBtZXNzYWdlIikpKTsKIAotCS8qCi0JICogU3RhcnQgYSB0cmFuc2FjdGlvbiBvbiBz dHJlYW0gc3RhcnQsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb21taXR0ZWQKLQkgKiBvbiB0 aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEgdGFibGVzeW5jIHdvcmtlciBpbiB3aGljaCBj YXNlIGl0Ci0JICogd2lsbCBiZSBjb21taXR0ZWQgYWZ0ZXIgcHJvY2Vzc2luZyBhbGwgdGhlIG1l c3NhZ2VzLiBXZSBuZWVkIHRoZQotCSAqIHRyYW5zYWN0aW9uIGZvciBoYW5kbGluZyB0aGUgYnVm ZmlsZSwgdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlCi0JICogc3RyZWFtaW5nIGRhdGEgYW5kIHN1 YnhhY3QgaW5mby4KLQkgKi8KLQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7Ci0KIAkvKiBub3Rp ZnkgaGFuZGxlIG1ldGhvZHMgd2UncmUgcHJvY2Vzc2luZyBhIHJlbW90ZSB0cmFuc2FjdGlvbiAq LwogCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gdHJ1ZTsKIApAQCAtMTE3NywzNiArMTI4Nyw5 MyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykKIAogCXNldF9hcHBs eV9lcnJvcl9jb250ZXh0X3hhY3Qoc3RyZWFtX3hpZCwgSW52YWxpZFhMb2dSZWNQdHIpOwogCi0J LyoKLQkgKiBJbml0aWFsaXplIHRoZSB3b3JrZXIncyBzdHJlYW1fZmlsZXNldCBpZiB3ZSBoYXZl bid0IHlldC4gVGhpcyB3aWxsIGJlCi0JICogdXNlZCBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiBv ZiB0aGUgd29ya2VyIHNvIGNyZWF0ZSBpdCBpbiBhIHBlcm1hbmVudAotCSAqIGNvbnRleHQuIFdl IGNyZWF0ZSB0aGlzIG9uIHRoZSB2ZXJ5IGZpcnN0IHN0cmVhbWluZyBtZXNzYWdlIGZyb20gYW55 Ci0JICogdHJhbnNhY3Rpb24gYW5kIHRoZW4gdXNlIGl0IGZvciB0aGlzIGFuZCBvdGhlciBzdHJl YW1pbmcgdHJhbnNhY3Rpb25zLgotCSAqIE5vdywgd2UgY291bGQgY3JlYXRlIGEgZmlsZXNldCBh dCB0aGUgc3RhcnQgb2YgdGhlIHdvcmtlciBhcyB3ZWxsIGJ1dAotCSAqIHRoZW4gd2Ugd29uJ3Qg YmUgc3VyZSB0aGF0IGl0IHdpbGwgZXZlciBiZSB1c2VkLgotCSAqLwotCWlmIChNeUxvZ2ljYWxS ZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID09IE5VTEwpCisJaWYgKGFtX2FwcGx5X2Jnd29ya2Vy KCkpCiAJewotCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKLQotCQlvbGRjdHggPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSBoYW5k bGUgYXBwbHlfZGlzcGF0Y2ggbWV0aG9kcyBhcmUgYXdhcmUgd2UncmUgaW4gYQorCQkgKiByZW1v dGUgdHJhbnNhY3Rpb24uCisJCSAqLworCQlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSB0cnVlOwog Ci0JCU15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPSBwYWxsb2Moc2l6ZW9mKEZp bGVTZXQpKTsKLQkJRmlsZVNldEluaXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNl dCk7CisJCS8qIEJlZ2luIHRoZSB0cmFuc2FjdGlvbi4gKi8KKwkJQWNjZXB0SW52YWxpZGF0aW9u TWVzc2FnZXMoKTsKKwkJbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbigpOwogCi0JCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQlC ZWdpblRyYW5zYWN0aW9uQmxvY2soKTsKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJ fQorCWVsc2UKKwl7CisJCS8qCisJCSAqIFRoaXMgaXMgdGhlIG1haW4gYXBwbHkgd29ya2VyLiBD aGVjayBpZiB0aGVyZSBpcyBhbnkgZnJlZSBhcHBseQorCQkgKiBiYWNrZ3JvdW5kIHdvcmtlciB3 ZSBjYW4gdXNlIHRvIHByb2Nlc3MgdGhpcyB0cmFuc2FjdGlvbi4KKwkJICovCisJCWlmIChmaXJz dF9zZWdtZW50KQorCQkJc3RyZWFtX2FwcGx5X3dvcmtlciA9IGFwcGx5X2Jnd29ya2VyX3N0YXJ0 KHN0cmVhbV94aWQpOworCQllbHNlCisJCQlzdHJlYW1fYXBwbHlfd29ya2VyID0gYXBwbHlfYmd3 b3JrZXJfZmluZChzdHJlYW1feGlkKTsKIAotCS8qIG9wZW4gdGhlIHNwb29sIGZpbGUgZm9yIHRo aXMgdHJhbnNhY3Rpb24gKi8KLQlzdHJlYW1fb3Blbl9maWxlKE15TG9naWNhbFJlcFdvcmtlci0+ c3ViaWQsIHN0cmVhbV94aWQsIGZpcnN0X3NlZ21lbnQpOworCQlpZiAoc3RyZWFtX2FwcGx5X3dv cmtlcikKKwkJeworCQkJLyoKKwkJCSAqIElmIHdlIGhhdmUgZm91bmQgYSBmcmVlIHdvcmtlciBv ciBpZiB3ZSBhcmUgYWxyZWFkeSBhcHBseWluZyB0aGlzCisJCQkgKiB0cmFuc2FjdGlvbiBpbiBh biBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciwgdGhlbiB3ZSBwYXNzIHRoZSBkYXRhIHRvCisJCQkg KiB0aGF0IHdvcmtlci4KKwkJCSAqLworCQkJaWYgKGZpcnN0X3NlZ21lbnQpCisJCQkJYXBwbHlf Ymd3b3JrZXJfc2VuZF9kYXRhKHN0cmVhbV9hcHBseV93b3JrZXIsIHMtPmxlbiwgcy0+ZGF0YSk7 CiAKLQkvKiBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qgc2VnbWVudCwgb3BlbiBleGlzdGluZyBz dWJ4YWN0IGZpbGUgKi8KLQlpZiAoIWZpcnN0X3NlZ21lbnQpCi0JCXN1YnhhY3RfaW5mb19yZWFk KE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQpOworCQkJbmNoYW5nZXMgPSAw OworCQkJZWxvZyhERUJVRzEsICJzdGFydGluZyBzdHJlYW1pbmcgb2YgeGlkICV1Iiwgc3RyZWFt X3hpZCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogU2luY2Ugbm8gYXBwbHkgYmFj a2dyb3VuZCB3b3JrZXIgaXMgYXZhaWxhYmxlIGZvciB0aGUgZmlyc3QKKwkJCSAqIHN0cmVhbSBz dGFydCwgc2VyaWFsaXplIGFsbCB0aGUgY2hhbmdlcyBvZiB0aGUgdHJhbnNhY3Rpb24uCisJCQkg KgorCQkJICogU3RhcnQgYSB0cmFuc2FjdGlvbiBvbiBzdHJlYW0gc3RhcnQsIHRoaXMgdHJhbnNh Y3Rpb24gd2lsbCBiZQorCQkJICogY29tbWl0dGVkIG9uIHRoZSBzdHJlYW0gc3RvcCB1bmxlc3Mg aXQgaXMgYSB0YWJsZXN5bmMgd29ya2VyIGluCisJCQkgKiB3aGljaCBjYXNlIGl0IHdpbGwgYmUg Y29tbWl0dGVkIGFmdGVyIHByb2Nlc3NpbmcgYWxsIHRoZQorCQkJICogbWVzc2FnZXMuIFdlIG5l ZWQgdGhlIHRyYW5zYWN0aW9uIGZvciBoYW5kbGluZyB0aGUgYnVmZmlsZSwKKwkJCSAqIHVzZWQg Zm9yIHNlcmlhbGl6aW5nIHRoZSBzdHJlYW1pbmcgZGF0YSBhbmQgc3VieGFjdCBpbmZvLgorCQkJ ICovCisJCQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CiAKLQlwZ3N0YXRfcmVwb3J0X2FjdGl2 aXR5KFNUQVRFX1JVTk5JTkcsIE5VTEwpOworCQkJLyoKKwkJCSAqIEluaXRpYWxpemUgdGhlIHdv cmtlcidzIHN0cmVhbV9maWxlc2V0IGlmIHdlIGhhdmVuJ3QgeWV0LiBUaGlzIHdpbGwKKwkJCSAq IGJlIHVzZWQgZm9yIHRoZSBlbnRpcmUgZHVyYXRpb24gb2YgdGhlIHdvcmtlciBzbyBjcmVhdGUg aXQgaW4gYQorCQkJICogcGVybWFuZW50IGNvbnRleHQuIFdlIGNyZWF0ZSB0aGlzIG9uIHRoZSB2 ZXJ5IGZpcnN0IHN0cmVhbWluZworCQkJICogbWVzc2FnZSBmcm9tIGFueSB0cmFuc2FjdGlvbiBh bmQgdGhlbiB1c2UgaXQgZm9yIHRoaXMgYW5kIG90aGVyCisJCQkgKiBzdHJlYW1pbmcgdHJhbnNh Y3Rpb25zLiBOb3csIHdlIGNvdWxkIGNyZWF0ZSBhIGZpbGVzZXQgYXQgdGhlIHN0YXJ0CisJCQkg KiBvZiB0aGUgd29ya2VyIGFzIHdlbGwgYnV0IHRoZW4gd2Ugd29uJ3QgYmUgc3VyZSB0aGF0IGl0 IHdpbGwgZXZlcgorCQkJICogYmUgdXNlZC4KKwkJCSAqLworCQkJaWYgKE15TG9naWNhbFJlcFdv cmtlci0+c3RyZWFtX2ZpbGVzZXQgPT0gTlVMTCkKKwkJCXsKKwkJCQlNZW1vcnlDb250ZXh0IG9s ZGN0eDsKIAotCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CisJCQkJb2xkY3R4ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN0 cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVvZihGaWxlU2V0KSk7CisJCQkJRmlsZVNldEluaXQo TXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CisKKwkJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3R4KTsKKwkJCX0KKworCQkJLyogT3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3Ig dGhpcyB0cmFuc2FjdGlvbi4gKi8KKwkJCXN0cmVhbV9vcGVuX2ZpbGUoTXlMb2dpY2FsUmVwV29y a2VyLT5zdWJpZCwgc3RyZWFtX3hpZCwgZmlyc3Rfc2VnbWVudCk7CisKKwkJCS8qIElmIHRoaXMg aXMgbm90IHRoZSBmaXJzdCBzZWdtZW50LCBvcGVuIGV4aXN0aW5nIHN1YnhhY3QgZmlsZS4gKi8K KwkJCWlmICghZmlyc3Rfc2VnbWVudCkKKwkJCQlzdWJ4YWN0X2luZm9fcmVhZChNeUxvZ2ljYWxS ZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlkKTsKKworCQkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAo KTsKKwkJfQorCX0KKworCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVOTklORywgTlVM TCk7CiB9CiAKIC8qCkBAIC0xMjIwLDUzICsxMzg3LDUyIEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1f c3RvcChTdHJpbmdJbmZvIHMpCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJ T04pLAogCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBTVE9QIG1lc3NhZ2Ugd2l0aG91dCBT VFJFQU0gU1RBUlQiKSkpOwogCi0JLyoKLQkgKiBDbG9zZSB0aGUgZmlsZSB3aXRoIHNlcmlhbGl6 ZWQgY2hhbmdlcywgYW5kIHNlcmlhbGl6ZSBpbmZvcm1hdGlvbiBhYm91dAotCSAqIHN1YnhhY3Rz IGZvciB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24uCi0JICovCi0Jc3VieGFjdF9pbmZvX3dyaXRl KE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQpOwotCXN0cmVhbV9jbG9zZV9m aWxlKCk7CisJaWYgKGFwcGx5X2Jnd29ya2VyX2FjdGl2ZSgpKQorCXsKKwkJY2hhciBhY3Rpb24g PSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUT1A7CiAKLQkvKiBXZSBtdXN0IGJlIGluIGEgdmFs aWQgdHJhbnNhY3Rpb24gc3RhdGUgKi8KLQlBc3NlcnQoSXNUcmFuc2FjdGlvblN0YXRlKCkpOwor CQlhcHBseV9iZ3dvcmtlcl9zZW5kX2RhdGEoc3RyZWFtX2FwcGx5X3dvcmtlciwgMSwgJmFjdGlv bik7CiAKLQkvKiBDb21taXQgdGhlIHBlci1zdHJlYW0gdHJhbnNhY3Rpb24gKi8KLQlDb21taXRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJZWxvZyhERUJVRzEsICJzdG9wcGVkIHN0cmVhbWluZyBv ZiB4aWQgJXUsICV1IGNoYW5nZXMgc3RyZWFtZWQiLCBzdHJlYW1feGlkLCBuY2hhbmdlcyk7CisJ fQorCWVsc2UKKwl7CisJCS8qCisJCSAqIENsb3NlIHRoZSBmaWxlIHdpdGggc2VyaWFsaXplZCBj aGFuZ2VzLCBhbmQgc2VyaWFsaXplIGluZm9ybWF0aW9uCisJCSAqIGFib3V0IHN1YnhhY3RzIGZv ciB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24uCisJCSAqLworCQlzdWJ4YWN0X2luZm9fd3JpdGUo TXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCk7CisJCXN0cmVhbV9jbG9zZV9m aWxlKCk7CiAKLQlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOworCQkvKiBXZSBtdXN0 IGJlIGluIGEgdmFsaWQgdHJhbnNhY3Rpb24gc3RhdGUgKi8KKwkJQXNzZXJ0KElzVHJhbnNhY3Rp b25TdGF0ZSgpKTsKIAotCS8qIFJlc2V0IHBlci1zdHJlYW0gY29udGV4dCAqLwotCU1lbW9yeUNv bnRleHRSZXNldChMb2dpY2FsU3RyZWFtaW5nQ29udGV4dCk7CisJCS8qIENvbW1pdCB0aGUgcGVy LXN0cmVhbSB0cmFuc2FjdGlvbiAqLworCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwor CQkvKiBSZXNldCBwZXItc3RyZWFtIGNvbnRleHQgKi8KKwkJTWVtb3J5Q29udGV4dFJlc2V0KExv Z2ljYWxTdHJlYW1pbmdDb250ZXh0KTsKKwl9CisKKwlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9 IGZhbHNlOworCXN0cmVhbV9hcHBseV93b3JrZXIgPSBOVUxMOwogCiAJcGdzdGF0X3JlcG9ydF9h Y3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKIAlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2lu Zm8oKTsKIH0KIAogLyoKLSAqIEhhbmRsZSBTVFJFQU0gYWJvcnQgbWVzc2FnZS4KKyAqIEhhbmRs ZSBTVFJFQU0gQUJPUlQgbWVzc2FnZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgc3BpbGxlZCB0 byBkaXNrLgogICovCiBzdGF0aWMgdm9pZAotYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJp bmdJbmZvIHMpCitzZXJpYWxpemVfc3RyZWFtX2Fib3J0KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFu c2FjdGlvbklkIHN1YnhpZCkKIHsKLQlUcmFuc2FjdGlvbklkIHhpZDsKLQlUcmFuc2FjdGlvbklk IHN1YnhpZDsKLQotCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKLQkJZXJlcG9ydChFUlJP UiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCi0JCQkJIGVycm1z Z19pbnRlcm5hbCgiU1RSRUFNIEFCT1JUIG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RPUCIpKSk7 Ci0KLQlsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KHMsICZ4aWQsICZzdWJ4aWQpOwotCiAJ LyoKIAkgKiBJZiB0aGUgdHdvIFhJRHMgYXJlIHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQg b2YgdG9wbGV2ZWwgeGFjdCwgc28KIAkgKiBqdXN0IGRlbGV0ZSB0aGUgZmlsZXMgd2l0aCBzZXJp YWxpemVkIGluZm8uCiAJICovCiAJaWYgKHhpZCA9PSBzdWJ4aWQpCi0JewotCQlzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF94YWN0KHhpZCwgSW52YWxpZFhMb2dSZWNQdHIpOwogCQlzdHJlYW1fY2xl YW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwotCX0KIAllbHNlCiAJ ewogCQkvKgpAQCAtMTI5MCw4ICsxNDU2LDYgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChT dHJpbmdJbmZvIHMpCiAJCWJvb2wJCWZvdW5kID0gZmFsc2U7CiAJCWNoYXIJCXBhdGhbTUFYUEdQ QVRIXTsKIAotCQlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHN1YnhpZCwgSW52YWxpZFhM b2dSZWNQdHIpOwotCiAJCXN1YmlkeCA9IC0xOwogCQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7 CiAJCXN1YnhhY3RfaW5mb19yZWFkKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CkBA IC0xMzE2LDcgKzE0ODAsNiBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8g cykKIAkJCWNsZWFudXBfc3VieGFjdF9pbmZvKCk7CiAJCQllbmRfcmVwbGljYXRpb25fc3RlcCgp OwogCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7Ci0JCQlyZXNldF9hcHBseV9lcnJvcl9j b250ZXh0X2luZm8oKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0xMzM5LDYgKzE1MDIsMTQzIEBA IGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQogCQllbmRfcmVwbGljYXRp b25fc3RlcCgpOwogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAl9Cit9CisKKy8qCisg KiBIYW5kbGUgU1RSRUFNIEFCT1JUIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9o YW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDsK KwlUcmFuc2FjdGlvbklkIHN1YnhpZDsKKwlMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhIGFib3J0 X2RhdGE7CisJYm9vbCByZWFkX2Fib3J0X2xzbiA9IGZhbHNlOworCisJaWYgKGluX3N0cmVhbWVk X3RyYW5zYWN0aW9uKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJP VE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJTVFJFQU0gQUJPUlQgbWVz c2FnZSB3aXRob3V0IFNUUkVBTSBTVE9QIikpKTsKKworCS8qIENoZWNrIHdoZXRoZXIgdGhlIHB1 Ymxpc2hlciBzZW5kcyBhYm9ydF9sc24gYW5kIGFib3J0X3RpbWUuICovCisJaWYgKGFtX2FwcGx5 X2Jnd29ya2VyKCkpCisJCXJlYWRfYWJvcnRfbHNuID0gTXlQYXJhbGxlbFNoYXJlZC0+c2VydmVy X3ZlcnNpb24gPj0KKwkJCQkJCSBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJT SU9OX05VTTsKKworCWxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQocywgJmFib3J0X2RhdGEs IHJlYWRfYWJvcnRfbHNuKTsKKworCXhpZCA9IGFib3J0X2RhdGEueGlkOworCXN1YnhpZCA9IGFi b3J0X2RhdGEuc3VieGlkOworCisJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChzdWJ4aWQs IGFib3J0X2RhdGEuYWJvcnRfbHNuKTsKKworCWlmIChhbV9hcHBseV9iZ3dvcmtlcigpKQorCXsK KwkJZWxvZyhERUJVRzEsICJbQXBwbHkgQkdXICMldV0gYWJvcnRpbmcgY3VycmVudCB0cmFuc2Fj dGlvbiB4aWQ9JXUsIHN1YnhpZD0ldSIsCisJCQkgTXlQYXJhbGxlbFNoYXJlZC0+biwgR2V0Q3Vy cmVudFRyYW5zYWN0aW9uSWRJZkFueSgpLAorCQkJIEdldEN1cnJlbnRTdWJUcmFuc2FjdGlvbklk KCkpOworCisJCS8qCisJCSAqIFVwZGF0ZSBvcmlnaW4gc3RhdGUgc28gd2UgY2FuIHJlc3RhcnQg c3RyZWFtaW5nIGZyb20gY29ycmVjdAorCQkgKiBwb3NpdGlvbiBpbiBjYXNlIG9mIGNyYXNoLgor CQkgKi8KKwkJaWYgKHJlYWRfYWJvcnRfbHNuKQorCQl7CisJCQlyZXBsb3JpZ2luX3Nlc3Npb25f b3JpZ2luX2xzbiA9IGFib3J0X2RhdGEuYWJvcnRfbHNuOworCQkJcmVwbG9yaWdpbl9zZXNzaW9u X29yaWdpbl90aW1lc3RhbXAgPSBhYm9ydF9kYXRhLmFib3J0X3RpbWU7CisJCX0KKworCQkvKgor CQkgKiBJZiB0aGUgdHdvIFhJRHMgYXJlIHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2Yg dG9wbGV2ZWwgeGFjdCwKKwkJICogc28ganVzdCBmcmVlIHRoZSBzdWJ4YWN0bGlzdC4KKwkJICov CisJCWlmIChzdWJ4aWQgPT0geGlkKQorCQl7CisJCQlBYm9ydEN1cnJlbnRUcmFuc2FjdGlvbigp OworCisJCQlFbmRUcmFuc2FjdGlvbkJsb2NrKGZhbHNlKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCisJCQlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsKKwkJCXBnc3Rh dF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURMRSwgTlVMTCk7CisKKwkJCWxpc3RfZnJlZShzdWJ4 YWN0bGlzdCk7CisJCQlzdWJ4YWN0bGlzdCA9IE5JTDsKKworCQkJYXBwbHlfYmd3b3JrZXJfc2V0 X3N0YXR1cyhBUFBMWV9CR1dPUktFUl9GSU5JU0hFRCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkv KgorCQkJICogT0ssIHNvIGl0J3MgYSBzdWJ4YWN0LiBSb2xsYmFjayB0byB0aGUgc2F2ZXBvaW50 LgorCQkJICoKKwkJCSAqIFdlIGFsc28gbmVlZCB0byByZWFkIHRoZSBzdWJ4YWN0bGlzdCwgZGV0 ZXJtaW5lIHRoZSBvZmZzZXQKKwkJCSAqIHRyYWNrZWQgZm9yIHRoZSBzdWJ4YWN0LCBhbmQgdHJ1 bmNhdGUgdGhlIGxpc3QuCisJCQkgKi8KKwkJCWludAkJCWk7CisJCQlib29sCQlmb3VuZCA9IGZh bHNlOworCQkJY2hhcgkJc3BuYW1lW01BWFBHUEFUSF07CisKKwkJCXNucHJpbnRmKHNwbmFtZSwg TUFYUEdQQVRILCAic2F2ZXBvaW50X2Zvcl94aWRfJXUiLCBzdWJ4aWQpOworCisJCQllbG9nKERF QlVHMSwgIltBcHBseSBCR1cgIyV1XSByb2xsaW5nIGJhY2sgdG8gc2F2ZXBvaW50ICVzIiwKKwkJ CQkgTXlQYXJhbGxlbFNoYXJlZC0+biwgc3BuYW1lKTsKKworCQkJZm9yIChpID0gbGlzdF9sZW5n dGgoc3VieGFjdGxpc3QpIC0gMTsgaSA+PSAwOyBpLS0pCisJCQl7CisJCQkJeGlkID0gKFRyYW5z YWN0aW9uSWQpIGxpc3RfbnRoX2ludChzdWJ4YWN0bGlzdCwgaSk7CisJCQkJaWYgKHhpZCA9PSBz dWJ4aWQpCisJCQkJeworCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CX0KKworCQkJaWYgKGZvdW5kKQorCQkJeworCQkJCVJvbGxiYWNrVG9TYXZlcG9pbnQoc3BuYW1l KTsKKwkJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJCQlzdWJ4YWN0bGlzdCA9IGxp c3RfdHJ1bmNhdGUoc3VieGFjdGxpc3QsIGkgKyAxKTsKKwkJCX0KKworCQkJcGdzdGF0X3JlcG9y dF9hY3Rpdml0eShTVEFURV9JRExFSU5UUkFOU0FDVElPTiwgTlVMTCk7CisJCX0KKwl9CisJZWxz ZQorCXsKKwkJLyogVGhpcyBpcyB0aGUgbWFpbiBhcHBseSB3b3JrZXIuICovCisJCUFwcGx5Qmd3 b3JrZXJTdGF0ZSAqd3N0YXRlID0gYXBwbHlfYmd3b3JrZXJfZmluZCh4aWQpOworCisJCS8qCisJ CSAqIENoZWNrIGlmIHdlIGFyZSBwcm9jZXNzaW5nIHRoaXMgdHJhbnNhY3Rpb24gaW4gYW4gYXBw bHkgYmFja2dyb3VuZAorCQkgKiB3b3JrZXIgYW5kIGlmIHNvLCBzZW5kIHRoZSBjaGFuZ2VzIHRv IHRoYXQgd29ya2VyLgorCQkgKi8KKwkJaWYgKHdzdGF0ZSkKKwkJeworCQkJLyogU2VuZCBTVFJF QU0gQUJPUlQgbWVzc2FnZSB0byB0aGUgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuICovCisJCQlh cHBseV9iZ3dvcmtlcl9zZW5kX2RhdGEod3N0YXRlLCBzLT5sZW4sIHMtPmRhdGEpOworCisJCQkv KgorCQkJICogQWZ0ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgYXBwbHkgYmFja2dyb3VuZCB3 b3JrZXIsIHdhaXQgZm9yCisJCQkgKiB0aGF0IHdvcmtlciB0byBmaW5pc2guIFRoaXMgaXMgbmVj ZXNzYXJ5IHRvIG1haW50YWluIGNvbW1pdAorCQkJICogb3JkZXIgd2hpY2ggYXZvaWRzIGZhaWx1 cmVzIGR1ZSB0byB0cmFuc2FjdGlvbiBkZXBlbmRlbmNpZXMgYW5kCisJCQkgKiBkZWFkbG9ja3Mu CisJCQkgKi8KKwkJCWlmIChzdWJ4aWQgPT0geGlkKQorCQkJeworCQkJCWFwcGx5X2Jnd29ya2Vy X3dhaXRfZm9yKHdzdGF0ZSwgQVBQTFlfQkdXT1JLRVJfRklOSVNIRUQpOworCQkJCWFwcGx5X2Jn d29ya2VyX2ZyZWUod3N0YXRlKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkg KiBXZSBhcmUgaW4gbWFpbiBhcHBseSB3b3JrZXIgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVl bgorCQkJICogc2VyaWFsaXplZCB0byBmaWxlLgorCQkJICovCisJCQlzZXJpYWxpemVfc3RyZWFt X2Fib3J0KHhpZCwgc3VieGlkKTsKKwkJfQorCX0KIAogCXJlc2V0X2FwcGx5X2Vycm9yX2NvbnRl eHRfaW5mbygpOwogfQpAQCAtMTQ2OCw4ICsxNzY4LDggQEAgYXBwbHlfc3Bvb2xlZF9tZXNzYWdl cyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiBzdGF0aWMgdm9pZAogYXBwbHlf aGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQogewotCVRyYW5zYWN0aW9uSWQgeGlk OwogCUxvZ2ljYWxSZXBDb21taXREYXRhIGNvbW1pdF9kYXRhOworCVRyYW5zYWN0aW9uSWQgeGlk OwogCiAJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQogCQllcmVwb3J0KEVSUk9SLApAQCAt MTQ3OSwxNCArMTc3OSw4MSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZv IHMpCiAJeGlkID0gbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQocywgJmNvbW1pdF9kYXRh KTsKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHhpZCwgY29tbWl0X2RhdGEuY29tbWl0 X2xzbik7CiAKLQllbG9nKERFQlVHMSwgInJlY2VpdmVkIGNvbW1pdCBmb3Igc3RyZWFtZWQgdHJh bnNhY3Rpb24gJXUiLCB4aWQpOworCWlmIChhbV9hcHBseV9iZ3dvcmtlcigpKQorCXsKKwkJLyoK KwkJICogVXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJv bSBjb3JyZWN0CisJCSAqIHBvc2l0aW9uIGluIGNhc2Ugb2YgY3Jhc2guCisJCSAqLworCQlyZXBs b3JpZ2luX3Nlc3Npb25fb3JpZ2luX2xzbiA9IGNvbW1pdF9kYXRhLmVuZF9sc247CisJCXJlcGxv cmlnaW5fc2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1wID0gY29tbWl0X2RhdGEuY29tbWl0dGltZTsK IAotCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoeGlkLCBjb21taXRfZGF0YS5jb21taXRfbHNuKTsK KwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCUVuZFRyYW5zYWN0aW9uQmxvY2soZmFs c2UpOworCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAotCWFwcGx5X2hhbmRsZV9jb21t aXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKKwkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFs c2U7CisKKwkJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKKworCQlsaXN0X2ZyZWUoc3VieGFj dGxpc3QpOworCQlzdWJ4YWN0bGlzdCA9IE5JTDsKKworCQlhcHBseV9iZ3dvcmtlcl9zZXRfc3Rh dHVzKEFQUExZX0JHV09SS0VSX0ZJTklTSEVEKTsKKwl9CisJZWxzZQorCXsKKwkJLyogVGhpcyBp cyB0aGUgbWFpbiBhcHBseSB3b3JrZXIuICovCisJCUFwcGx5Qmd3b3JrZXJTdGF0ZSAqd3N0YXRl ID0gYXBwbHlfYmd3b3JrZXJfZmluZCh4aWQpOworCisJCWVsb2coREVCVUcxLCAicmVjZWl2ZWQg Y29tbWl0IGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHhpZCk7CisKKwkJLyoKKwkJICog Q2hlY2sgaWYgd2UgYXJlIHByb2Nlc3NpbmcgdGhpcyB0cmFuc2FjdGlvbiBpbiBhbiBhcHBseSBi YWNrZ3JvdW5kCisJCSAqIHdvcmtlciBhbmQgaWYgc28sIHNlbmQgdGhlIGNoYW5nZXMgdG8gdGhh dCB3b3JrZXIuCisJCSAqLworCQlpZiAod3N0YXRlKQorCQl7CisJCQkvKiBTZW5kIFNUUkVBTSBD T01NSVQgbWVzc2FnZSB0byB0aGUgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuICovCisJCQlhcHBs eV9iZ3dvcmtlcl9zZW5kX2RhdGEod3N0YXRlLCBzLT5sZW4sIHMtPmRhdGEpOworCisJCQkvKgor CQkJICogQWZ0ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgYXBwbHkgYmFja2dyb3VuZCB3b3Jr ZXIsIHdhaXQgZm9yCisJCQkgKiB0aGF0IHdvcmtlciB0byBmaW5pc2guIFRoaXMgaXMgbmVjZXNz YXJ5IHRvIG1haW50YWluIGNvbW1pdAorCQkJICogb3JkZXIgd2hpY2ggYXZvaWRzIGZhaWx1cmVz IGR1ZSB0byB0cmFuc2FjdGlvbiBkZXBlbmRlbmNpZXMgYW5kCisJCQkgKiBkZWFkbG9ja3MuCisJ CQkgKi8KKwkJCWFwcGx5X2Jnd29ya2VyX3dhaXRfZm9yKHdzdGF0ZSwgQVBQTFlfQkdXT1JLRVJf RklOSVNIRUQpOwogCi0JLyogdW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdl cyBhbmQgc3VieGFjdCBpbmZvICovCi0Jc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVw V29ya2VyLT5zdWJpZCwgeGlkKTsKKwkJCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CisJCQlz dG9yZV9mbHVzaF9wb3NpdGlvbihjb21taXRfZGF0YS5lbmRfbHNuKTsKKwkJCXN0b3Bfc2tpcHBp bmdfY2hhbmdlcygpOworCisJCQlhcHBseV9iZ3dvcmtlcl9mcmVlKHdzdGF0ZSk7CisKKwkJCS8q CisJCQkgKiBUaGUgdHJhbnNhY3Rpb24gaXMgZWl0aGVyIG5vbi1lbXB0eSBvciBza2lwcGVkLCBz byB3ZSBjbGVhciB0aGUKKwkJCSAqIHN1YnNraXBsc24uCisJCQkgKi8KKwkJCWNsZWFyX3N1YnNj cmlwdGlvbl9za2lwX2xzbihjb21taXRfZGF0YS5jb21taXRfbHNuKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCS8qCisJCQkgKiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gc2VyaWFsaXplZCB0byBm aWxlLCBzbyByZXBsYXkgYWxsIHRoZQorCQkJICogc3Bvb2xlZCBvcGVyYXRpb25zLgorCQkJICov CisJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7 CisKKwkJCWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKKworCQkJ LyogVW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBp bmZvLiAqLworCQkJc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJp ZCwgeGlkKTsKKwkJfQorCX0KKworCS8qIENoZWNrIHRoZSBzdGF0dXMgb2YgYXBwbHkgYmFja2dy b3VuZCB3b3JrZXIgaWYgYW55LiAqLworCWFwcGx5X2Jnd29ya2VyX2NoZWNrX3N0YXR1cygpOwog CiAJLyogUHJvY2VzcyBhbnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBw YXJhbGxlbC4gKi8KIAlwcm9jZXNzX3N5bmNpbmdfdGFibGVzKGNvbW1pdF9kYXRhLmVuZF9sc24p OwpAQCAtMjQ2Nyw3ICsyODM0LDcgQEAgYXBwbHlfaGFuZGxlX3RydW5jYXRlKFN0cmluZ0luZm8g cykKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hl ci4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcykK IHsKIAlMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24gPSBwcV9nZXRtc2dieXRlKHMpOwpAQCAtMjYz Niw2ICszMDAzLDEwIEBAIHN0b3JlX2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xz bikKIHsKIAlGbHVzaFBvc2l0aW9uICpmbHVzaHBvczsKIAorCS8qIFNraXAgaWYgbm90IHRoZSBt YWluIGFwcGx5IHdvcmtlciAqLworCWlmIChhbV9hcHBseV9iZ3dvcmtlcigpKQorCQlyZXR1cm47 CisKIAkvKiBOZWVkIHRvIGRvIHRoaXMgaW4gcGVybWFuZW50IGNvbnRleHQgKi8KIAlNZW1vcnlD b250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKIApAQCAtMjY1MCw3ICszMDIxLDcgQEAgc3Rv cmVfZmx1c2hfcG9zaXRpb24oWExvZ1JlY1B0ciByZW1vdGVfbHNuKQogCiAKIC8qIFVwZGF0ZSBz dGF0aXN0aWNzIG9mIHRoZSB3b3JrZXIuICovCi1zdGF0aWMgdm9pZAordm9pZAogVXBkYXRlV29y a2VyU3RhdHMoWExvZ1JlY1B0ciBsYXN0X2xzbiwgVGltZXN0YW1wVHogc2VuZF90aW1lLCBib29s IHJlcGx5KQogewogCU15TG9naWNhbFJlcFdvcmtlci0+bGFzdF9sc24gPSBsYXN0X2xzbjsKQEAg LTI4MTIsNiArMzE4Myw5IEBAIExvZ2ljYWxSZXBBcHBseUxvb3AoWExvZ1JlY1B0ciBsYXN0X3Jl Y2VpdmVkKQogCQkJQWNjZXB0SW52YWxpZGF0aW9uTWVzc2FnZXMoKTsKIAkJCW1heWJlX3JlcmVh ZF9zdWJzY3JpcHRpb24oKTsKIAorCQkJLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiBhcHBseSBiYWNr Z3JvdW5kIHdvcmtlciBpZiBhbnkuICovCisJCQlhcHBseV9iZ3dvcmtlcl9jaGVja19zdGF0dXMo KTsKKwogCQkJLyogUHJvY2VzcyBhbnkgdGFibGUgc3luY2hyb25pemF0aW9uIGNoYW5nZXMuICov CiAJCQlwcm9jZXNzX3N5bmNpbmdfdGFibGVzKGxhc3RfcmVjZWl2ZWQpOwogCQl9CkBAIC0zMTEz LDcgKzM0ODcsNyBAQCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpCiAvKgogICogQ2Fs bGJhY2sgZnJvbSBzdWJzY3JpcHRpb24gc3lzY2FjaGUgaW52YWxpZGF0aW9uLgogICovCi1zdGF0 aWMgdm9pZAordm9pZAogc3Vic2NyaXB0aW9uX2NoYW5nZV9jYihEYXR1bSBhcmcsIGludCBjYWNo ZWlkLCB1aW50MzIgaGFzaHZhbHVlKQogewogCU15U3Vic2NyaXB0aW9uVmFsaWQgPSBmYWxzZTsK QEAgLTM3MDksNyArNDA4Myw3IEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAkJ b3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5X25hbWUob3JpZ2lubmFtZSwgdHJ1ZSk7CiAJCWlmICgh T2lkSXNWYWxpZChvcmlnaW5pZCkpCiAJCQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fY3JlYXRlKG9y aWdpbm5hbWUpOwotCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQpOworCQlyZXBs b3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIHRydWUpOwogCQlyZXBsb3JpZ2luX3Nlc3Np b25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJCW9yaWdpbl9zdGFydHBvcyA9IHJlcGxvcmlnaW5fc2Vz c2lvbl9nZXRfcHJvZ3Jlc3MoZmFsc2UpOwogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK QEAgLTM3NTAsMTMgKzQxMjQsMTQgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQog CiAJc2VydmVyX3ZlcnNpb24gPSB3YWxyY3Zfc2VydmVyX3ZlcnNpb24oTG9nUmVwV29ya2VyV2Fs UmN2Q29ubik7CiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLnByb3RvX3ZlcnNpb24gPQorCQlzZXJ2 ZXJfdmVyc2lvbiA+PSAxNjAwMDAgPyBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9W RVJTSU9OX05VTSA6CiAJCXNlcnZlcl92ZXJzaW9uID49IDE1MDAwMCA/IExPR0lDQUxSRVBfUFJP VE9fVFdPUEhBU0VfVkVSU0lPTl9OVU0gOgogCQlzZXJ2ZXJfdmVyc2lvbiA+PSAxNDAwMDAgPyBM T0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9WRVJTSU9OX05VTSA6CiAJCUxPR0lDQUxSRVBfUFJPVE9f VkVSU0lPTl9OVU07CiAKIAlvcHRpb25zLnByb3RvLmxvZ2ljYWwucHVibGljYXRpb25fbmFtZXMg PSBNeVN1YnNjcmlwdGlvbi0+cHVibGljYXRpb25zOwogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5i aW5hcnkgPSBNeVN1YnNjcmlwdGlvbi0+YmluYXJ5OwotCW9wdGlvbnMucHJvdG8ubG9naWNhbC5z dHJlYW1pbmcgPSBNeVN1YnNjcmlwdGlvbi0+c3RyZWFtOworCW9wdGlvbnMucHJvdG8ubG9naWNh bC5zdHJlYW1pbmcgPSAoTXlTdWJzY3JpcHRpb24tPnN0cmVhbSAhPSBTVUJTVFJFQU1fT0ZGKTsK IAlvcHRpb25zLnByb3RvLmxvZ2ljYWwudHdvcGhhc2UgPSBmYWxzZTsKIAogCWlmICghYW1fdGFi bGVzeW5jX3dvcmtlcigpKQpAQCAtMzkxNCw3ICs0Mjg5LDggQEAgY2xlYXJfc3Vic2NyaXB0aW9u X3NraXBfbHNuKFhMb2dSZWNQdHIgZmluaXNoX2xzbikKIAlYTG9nUmVjUHRyCW15c2tpcGxzbiA9 IE15U3Vic2NyaXB0aW9uLT5za2lwbHNuOwogCWJvb2wJCXN0YXJ0ZWRfdHggPSBmYWxzZTsKIAot CWlmIChsaWtlbHkoWExvZ1JlY1B0cklzSW52YWxpZChteXNraXBsc24pKSkKKwlpZiAobGlrZWx5 KFhMb2dSZWNQdHJJc0ludmFsaWQobXlza2lwbHNuKSkgfHwKKwkJYW1fYXBwbHlfYmd3b3JrZXIo KSkKIAkJcmV0dXJuOwogCiAJaWYgKCFJc1RyYW5zYWN0aW9uU3RhdGUoKSkKQEAgLTM5ODYsNyAr NDM2Miw3IEBAIGNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xzbihYTG9nUmVjUHRyIGZpbmlzaF9s c24pCiB9CiAKIC8qIEVycm9yIGNhbGxiYWNrIHRvIGdpdmUgbW9yZSBjb250ZXh0IGluZm8gYWJv dXQgdGhlIGNoYW5nZSBiZWluZyBhcHBsaWVkICovCi1zdGF0aWMgdm9pZAordm9pZAogYXBwbHlf ZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogewogCUFwcGx5RXJyb3JDYWxsYmFja0FyZyAqZXJy YXJnID0gJmFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZzsKQEAgLTQwMTQsMjMgKzQzOTAsNDcgQEAg YXBwbHlfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogCQkJCQkgICBlcnJhcmctPnJlbW90ZV94 aWQsCiAJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJhcmctPmZpbmlzaF9sc24pKTsKIAl9Ci0J ZWxzZSBpZiAoZXJyYXJnLT5yZW1vdGVfYXR0bnVtIDwgMCkKLQkJZXJyY29udGV4dCgicHJvY2Vz c2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgXCIl c1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGluIHRyYW5zYWN0 aW9uICV1IGZpbmlzaGVkIGF0ICVYLyVYIiwKLQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAot CQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCi0JCQkJICAg ZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5uc3BuYW1lLAotCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1v dGVyZWwucmVsbmFtZSwKLQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCi0JCQkJICAgTFNOX0ZP Uk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikpOwogCWVsc2UKLQkJZXJyY29udGV4dCgicHJv Y2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcg XCIlc1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGNvbHVtbiBc IiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUgZmluaXNoZWQgYXQgJVgvJVgiLAotCQkJCSAgIGVycmFy Zy0+b3JpZ2luX25hbWUsCi0JCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5j b21tYW5kKSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCi0JCQkJICAg ZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAotCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1v dGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwKLQkJCQkgICBlcnJhcmctPnJl bW90ZV94aWQsCi0JCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikpOwor CXsKKwkJaWYgKGVycmFyZy0+cmVtb3RlX2F0dG51bSA8IDApCisJCXsKKwkJCWlmIChYTG9nUmVj UHRySXNJbnZhbGlkKGVycmFyZy0+ZmluaXNoX2xzbikpCisJCQkJZXJyY29udGV4dCgicHJvY2Vz c2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgXCIl c1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGluIHRyYW5zYWN0 aW9uICV1IiwKKwkJCQkJCSAgIGVycmFyZy0+b3JpZ2luX25hbWUsCisJCQkJCQkgICBsb2dpY2Fs cmVwX21lc3NhZ2VfdHlwZShlcnJhcmctPmNvbW1hbmQpLAorCQkJCQkJICAgZXJyYXJnLT5yZWwt PnJlbW90ZXJlbC5uc3BuYW1lLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5yZWxu YW1lLAorCQkJCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkKTsKKwkJCWVsc2UKKwkJCQllcnJjb250 ZXh0KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wi IGR1cmluZyBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIg aW4gdHJhbnNhY3Rpb24gJXUgZmluaXNoZWQgYXQgJVgvJVgiLAorCQkJCQkJICAgZXJyYXJnLT5v cmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29t bWFuZCksCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJCQkg ICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbW90 ZV94aWQsCisJCQkJCQkgICBMU05fRk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hfbHNuKSk7CisJ CX0KKwkJZWxzZQorCQl7CisJCQlpZiAoWExvZ1JlY1B0cklzSW52YWxpZChlcnJhcmctPmZpbmlz aF9sc24pKQorCQkJCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxp Y2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0 IHJlbGF0aW9uIFwiJXMuJXNcIiBjb2x1bW4gXCIlc1wiIGluIHRyYW5zYWN0aW9uICV1IiwKKwkJ CQkJCSAgIGVycmFyZy0+b3JpZ2luX25hbWUsCisJCQkJCQkgICBsb2dpY2FscmVwX21lc3NhZ2Vf dHlwZShlcnJhcmctPmNvbW1hbmQpLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5u c3BuYW1lLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAorCQkJCQkJ ICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5hdHRuYW1lc1tlcnJhcmctPnJlbW90ZV9hdHRudW1d LAorCQkJCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkKTsKKwkJCWVsc2UKKwkJCQllcnJjb250ZXh0 KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1 cmluZyBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIgY29s dW1uIFwiJXNcIiBpbiB0cmFuc2FjdGlvbiAldSBmaW5pc2hlZCBhdCAlWC8lWCIsCisJCQkJCQkg ICBlcnJhcmctPm9yaWdpbl9uYW1lLAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUo ZXJyYXJnLT5jb21tYW5kKSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFt ZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJCSAgIGVy cmFyZy0+cmVsLT5yZW1vdGVyZWwuYXR0bmFtZXNbZXJyYXJnLT5yZW1vdGVfYXR0bnVtXSwKKwkJ CQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCwKKwkJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJh cmctPmZpbmlzaF9sc24pKTsKKwkJfQorCX0KIH0KIAogLyogU2V0IHRyYW5zYWN0aW9uIGluZm9y bWF0aW9uIG9mIGFwcGx5IGVycm9yIGNhbGxiYWNrICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYwppbmRleCBiYThhMjRkMDk5Li5kZTI5ZGM2ZGE5IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTE4MTgsNiAr MTgxOCw5IEBAIHBnb3V0cHV0X3N0cmVhbV9hYm9ydChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LAogCQkJCQkgIFhMb2dSZWNQdHIgYWJvcnRfbHNuKQogewogCVJlb3JkZXJCdWZm ZXJUWE4gKnRvcHR4bjsKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRhICopIGN0 eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCWJvb2wgd3JpdGVfYWJvcnRfbHNuID0gKGRhdGEt PnByb3RvY29sX3ZlcnNpb24gPj0KKwkJCQkJCQlMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJB TExFTF9WRVJTSU9OX05VTSk7CiAKIAkvKgogCSAqIFRoZSBhYm9ydCBzaG91bGQgaGFwcGVuIG91 dHNpZGUgc3RyZWFtaW5nIGJsb2NrLCBldmVuIGZvciBzdHJlYW1lZApAQCAtMTgzMSw3ICsxODM0 LDggQEAgcGdvdXRwdXRfc3RyZWFtX2Fib3J0KHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsCiAJQXNzZXJ0KHJidHhuX2lzX3N0cmVhbWVkKHRvcHR4bikpOwogCiAJT3V0cHV0UGx1 Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7Ci0JbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJv cnQoY3R4LT5vdXQsIHRvcHR4bi0+eGlkLCB0eG4tPnhpZCk7CisJbG9naWNhbHJlcF93cml0ZV9z dHJlYW1fYWJvcnQoY3R4LT5vdXQsIHRvcHR4bi0+eGlkLCB0eG4sIGFib3J0X2xzbiwKKwkJCQkJ CQkJICB3cml0ZV9hYm9ydF9sc24pOwogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CiAK IAljbGVhbnVwX3JlbF9zeW5jX2NhY2hlKHRvcHR4bi0+eGlkLCBmYWxzZSk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMgYi9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKaW5kZXggZGE1N2E5MzAzNC4uMmUxNDZmZTA4NyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwpAQCAtMzg4LDYgKzM4OCw5 IEBAIHBnc3RhdF9nZXRfd2FpdF9pcGMoV2FpdEV2ZW50SVBDIHcpCiAJCWNhc2UgV0FJVF9FVkVO VF9IQVNIX0dST1dfQlVDS0VUU19SRUlOU0VSVDoKIAkJCWV2ZW50X25hbWUgPSAiSGFzaEdyb3dC dWNrZXRzUmVpbnNlcnQiOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FMX0FQ UExZX1dPUktFUl9TVEFURV9DSEFOR0U6CisJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxBcHBseVdv cmtlclN0YXRlQ2hhbmdlIjsKKwkJCWJyZWFrOwogCQljYXNlIFdBSVRfRVZFTlRfTE9HSUNBTF9T WU5DX0RBVEE6CiAJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxTeW5jRGF0YSI7CiAJCQlicmVhazsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Yy5jCmluZGV4IDAzMjgwMjlkNDMuLjQyODRiY2JjZDEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWMuYwpAQCAtMzIyMCw2ICszMjIwLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2ludCBD b25maWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsi bWF4X2FwcGx5X2Jnd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uIiwKKwkJCVBHQ19TSUdIVVAsCisJ CQlSRVBMSUNBVElPTl9TVUJTQ1JJQkVSUywKKwkJCWdldHRleHRfbm9vcCgiTWF4aW11bSBudW1i ZXIgb2YgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXJzIHBlciBzdWJzY3JpcHRpb24uIiksCisJCQlO VUxMLAorCQl9LAorCQkmbWF4X2FwcGx5X2Jnd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uLAorCQky LCAwLCBNQVhfQkFDS0VORFMsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7Imxv Z19yb3RhdGlvbl9hZ2UiLCBQR0NfU0lHSFVQLCBMT0dHSU5HX1dIRVJFLAogCQkJZ2V0dGV4dF9u b29wKCJTZXRzIHRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaW5nICIKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBi L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBiNGJj MDZlNWY1Li5hZDE4NzEwYWY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlCkBAIC0zNjAsNiArMzYwLDcgQEAKICNtYXhfbG9naWNhbF9yZXBsaWNh dGlvbl93b3JrZXJzID0gNAkjIHRha2VuIGZyb20gbWF4X3dvcmtlcl9wcm9jZXNzZXMKIAkJCQkJ IyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCiAjbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2Ny aXB0aW9uID0gMgkjIHRha2VuIGZyb20gbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vycwor I21heF9hcHBseV9iZ3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiA9IDIJIyB0YWtlbiBmcm9tIG1h eF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMKIAogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYwppbmRleCBlNGZkYjZiNzViLi45MDk5ZmU1Zjc0IDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAg LTQ0NTYsNyArNDQ1Niw3IEBAIGdldFN1YnNjcmlwdGlvbnMoQXJjaGl2ZSAqZm91dCkKIAlpZiAo Zm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNDAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1 ZXJ5LCAiIHMuc3Vic3RyZWFtLFxuIik7CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihx dWVyeSwgIiBmYWxzZSBBUyBzdWJzdHJlYW0sXG4iKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksICIgJ2YnIEFTIHN1YnN0cmVhbSxcbiIpOwogCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNp b24gPj0gMTUwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKQEAgLTQ1ODYsOCAr NDU4NiwxMCBAQCBkdW1wU3Vic2NyaXB0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFN1YnNjcmlw dGlvbkluZm8gKnN1YmluZm8pCiAJaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJiaW5hcnksICJ0Iikg PT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIGJpbmFyeSA9IHRydWUiKTsK IAotCWlmIChzdHJjbXAoc3ViaW5mby0+c3Vic3RyZWFtLCAiZiIpICE9IDApCisJaWYgKHN0cmNt cChzdWJpbmZvLT5zdWJzdHJlYW0sICJ0IikgPT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksICIsIHN0cmVhbWluZyA9IG9uIik7CisJZWxzZSBpZiAoc3RyY21wKHN1YmluZm8tPnN1 YnN0cmVhbSwgInAiKSA9PSAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgc3Ry ZWFtaW5nID0gcGFyYWxsZWwiKTsKIAogCWlmIChzdHJjbXAoc3ViaW5mby0+c3VidHdvcGhhc2Vz dGF0ZSwgdHdvX3BoYXNlX2Rpc2FibGVkKSAhPSAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihx dWVyeSwgIiwgdHdvX3BoYXNlID0gb24iKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfc3Vic2NyaXB0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlv bi5oCmluZGV4IGQxMjYwZjU5MGMuLmQ1NDU0MGY1ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19z dWJzY3JpcHRpb24uaApAQCAtNjgsNyArNjgsOCBAQCBDQVRBTE9HKHBnX3N1YnNjcmlwdGlvbiw2 MTAwLFN1YnNjcmlwdGlvblJlbGF0aW9uSWQpIEJLSV9TSEFSRURfUkVMQVRJT04gQktJX1JPVwog CWJvb2wJCXN1YmJpbmFyeTsJCS8qIFRydWUgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YW50cyB0aGUK IAkJCQkJCQkJICogcHVibGlzaGVyIHRvIHNlbmQgZGF0YSBpbiBiaW5hcnkgKi8KIAotCWJvb2wJ CXN1YnN0cmVhbTsJCS8qIFN0cmVhbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuICovCisJY2hh cgkJc3Vic3RyZWFtOwkJLyogU3RyZWFtIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KKwkJCQkJ CQkJICogU2VlIFNVQlNUUkVBTV94eHggY29uc3RhbnRzLiAqLwogCiAJY2hhcgkJc3VidHdvcGhh c2VzdGF0ZTsJLyogU3RyZWFtIHR3by1waGFzZSB0cmFuc2FjdGlvbnMgKi8KIApAQCAtMTA5LDcg KzExMCw4IEBAIHR5cGVkZWYgc3RydWN0IFN1YnNjcmlwdGlvbgogCWJvb2wJCWVuYWJsZWQ7CQkv KiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiBpcyBlbmFibGVkICovCiAJYm9vbAkJYmlu YXJ5OwkJCS8qIEluZGljYXRlcyBpZiB0aGUgc3Vic2NyaXB0aW9uIHdhbnRzIGRhdGEgaW4KIAkJ CQkJCQkJICogYmluYXJ5IGZvcm1hdCAqLwotCWJvb2wJCXN0cmVhbTsJCQkvKiBBbGxvdyBzdHJl YW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLiAqLworCWNoYXIJCXN0cmVhbTsJCQkvKiBB bGxvdyBzdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgorCQkJCQkJCQkgKiBTZWUg U1VCU1RSRUFNX3h4eCBjb25zdGFudHMuICovCiAJY2hhcgkJdHdvcGhhc2VzdGF0ZTsJLyogQWxs b3cgc3RyZWFtaW5nIHR3by1waGFzZSB0cmFuc2FjdGlvbnMgKi8KIAlib29sCQlkaXNhYmxlb25l cnI7CS8qIEluZGljYXRlcyBpZiB0aGUgc3Vic2NyaXB0aW9uIHNob3VsZCBiZQogCQkJCQkJCQkg KiBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGlmIGEgd29ya2VyIGVycm9yCkBAIC0xMjAsNiArMTIy LDIxIEBAIHR5cGVkZWYgc3RydWN0IFN1YnNjcmlwdGlvbgogCUxpc3QJICAgKnB1YmxpY2F0aW9u czsJLyogTGlzdCBvZiBwdWJsaWNhdGlvbiBuYW1lcyB0byBzdWJzY3JpYmUgdG8gKi8KIH0gU3Vi c2NyaXB0aW9uOwogCisvKiBEaXNhbGxvdyBzdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rp b25zICovCisjZGVmaW5lIFNVQlNUUkVBTV9PRkYgJ2YnCisKKy8qCisgKiBTdHJlYW1pbmcgaW4t cHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIGFyZSB3cml0dGVuIHRvIGEgdGVtcG9yYXJ5IGZpbGUgYW5k CisgKiBhcHBsaWVkIG9ubHkgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiB1 cHN0cmVhbS4KKyAqLworI2RlZmluZSBTVUJTVFJFQU1fT04gJ3QnCisKKy8qCisgKiBTdHJlYW1p bmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIGFyZSBhcHBsaWVkIGltbWVkaWF0ZWx5IHZpYSBh IGJhY2tncm91bmQKKyAqIHdvcmtlcgorICovCisjZGVmaW5lIFNVQlNUUkVBTV9QQVJBTExFTCAn cCcKKwogZXh0ZXJuIFN1YnNjcmlwdGlvbiAqR2V0U3Vic2NyaXB0aW9uKE9pZCBzdWJpZCwgYm9v bCBtaXNzaW5nX29rKTsKIGV4dGVybiB2b2lkIEZyZWVTdWJzY3JpcHRpb24oU3Vic2NyaXB0aW9u ICpzdWIpOwogZXh0ZXJuIHZvaWQgRGlzYWJsZVN1YnNjcmlwdGlvbihPaWQgc3ViaWQpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmggYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaAppbmRleCBmMWUyODIxZTI1Li5h YzhlZjk0MzgxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1 bmNoZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaApA QCAtMTQsNiArMTQsNyBAQAogCiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9sb2dpY2FsX3Jl cGxpY2F0aW9uX3dvcmtlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9zeW5jX3dvcmtl cnNfcGVyX3N1YnNjcmlwdGlvbjsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X2FwcGx5X2Jn d29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uOwogCiBleHRlcm4gdm9pZCBBcHBseUxhdW5jaGVyUmVn aXN0ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBBcHBseUxhdW5jaGVyTWFpbihEYXR1bSBtYWluX2Fy Zyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCmluZGV4IGE3NzFhYjhmZjMu LmViMGZkMjRmZDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxw cm90by5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCkBAIC0z MiwxMiArMzIsMTcgQEAKICAqCiAgKiBMT0dJQ0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05f TlVNIGlzIHRoZSBtaW5pbXVtIHByb3RvY29sIHZlcnNpb24gd2l0aAogICogc3VwcG9ydCBmb3Ig dHdvLXBoYXNlIGNvbW1pdCBkZWNvZGluZyAoYXQgcHJlcGFyZSB0aW1lKS4gSW50cm9kdWNlZCBp biBQRzE1LgorICoKKyAqIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05f TlVNIGlzIHRoZSBtaW5pbXVtIHByb3RvY29sIHZlcnNpb24KKyAqIHdpdGggc3VwcG9ydCBmb3Ig c3RyZWFtaW5nIGxhcmdlIHRyYW5zYWN0aW9ucyB1c2luZyBhcHBseSBiYWNrZ3JvdW5kCisgKiB3 b3JrZXJzLiBJbnRyb2R1Y2VkIGluIFBHMTYuCiAgKi8KICNkZWZpbmUgTE9HSUNBTFJFUF9QUk9U T19NSU5fVkVSU0lPTl9OVU0gMQogI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1ZFUlNJT05fTlVN IDEKICNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9OVU0gMgogI2RlZmlu ZSBMT0dJQ0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIDMKLSNkZWZpbmUgTE9HSUNB TFJFUF9QUk9UT19NQVhfVkVSU0lPTl9OVU0gTE9HSUNBTFJFUF9QUk9UT19UV09QSEFTRV9WRVJT SU9OX05VTQorI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9O X05VTSA0CisjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fTUFYX1ZFUlNJT05fTlVNIExPR0lDQUxS RVBfUFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNCiAKIC8qCiAgKiBMb2dpY2FsIG1l c3NhZ2UgdHlwZXMKQEAgLTE3NSw2ICsxODAsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJl cFJvbGxiYWNrUHJlcGFyZWRUeG5EYXRhCiAJY2hhcgkJZ2lkW0dJRFNJWkVdOwogfSBMb2dpY2Fs UmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGE7CiAKKy8qCisgKiBUcmFuc2FjdGlvbiBwcm90b2Nv bCBpbmZvcm1hdGlvbiBmb3Igc3RyZWFtIGFib3J0LgorICovCit0eXBlZGVmIHN0cnVjdCBMb2dp Y2FsUmVwU3RyZWFtQWJvcnREYXRhCit7CisJVHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rp b25JZCBzdWJ4aWQ7CisJWExvZ1JlY1B0cglhYm9ydF9sc247CisJVGltZXN0YW1wVHogYWJvcnRf dGltZTsKK30gTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YTsKKwogZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF93cml0ZV9iZWdpbihTdHJpbmdJbmZvIG91dCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKTsK IGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9iZWdpbihTdHJpbmdJbmZvIGluLAogCQkJCQkJ CQkgIExvZ2ljYWxSZXBCZWdpbkRhdGEgKmJlZ2luX2RhdGEpOwpAQCAtMjQ2LDkgKzI2MiwxMiBA QCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBv dXQsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bgogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgbG9naWNhbHJl cF9yZWFkX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBvdXQsCiAJCQkJCQkJCQkJCQkgICBMb2dp Y2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93 cml0ZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJ CQkJCQkJCSAgVHJhbnNhY3Rpb25JZCBzdWJ4aWQpOwotZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF9y ZWFkX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIGluLCBUcmFuc2FjdGlvbklkICp4aWQsCi0JCQkJ CQkJCQkJIFRyYW5zYWN0aW9uSWQgKnN1YnhpZCk7CisJCQkJCQkJCQkJICBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCisJCQkJCQkJCQkJICBYTG9nUmVjUHRyIGFib3J0X2xzbiwKKwkJCQkJCQkJCQkg IGJvb2wgd3JpdGVfYWJvcnRfbHNuKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJl YW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwKKwkJCQkJCQkJCQkgTG9naWNhbFJlcFN0cmVhbUFib3J0 RGF0YSAqYWJvcnRfZGF0YSwKKwkJCQkJCQkJCQkgYm9vbCByZWFkX2Fib3J0X2xzbik7CiBleHRl cm4gY2hhciAqbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9u KTsKIAogI2VuZGlmCQkJCQkJCS8qIExPR0lDQUxfUFJPVE9fSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vbG9naWNhbHdvcmtlci5oCmluZGV4IGNkMWI2ZThhZmMuLjZhMWFmN2YxM2MgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaAorKysgYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNk ZWZpbmUgTE9HSUNBTFdPUktFUl9ICiAKIGV4dGVybiB2b2lkIEFwcGx5V29ya2VyTWFpbihEYXR1 bSBtYWluX2FyZyk7CitleHRlcm4gdm9pZCBBcHBseUJnd29ya2VyTWFpbihEYXR1bSBtYWluX2Fy Zyk7CiAKIGV4dGVybiBib29sIElzTG9naWNhbFdvcmtlcih2b2lkKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9vcmlnaW4uaAppbmRleCAyZDFiNWU1YzI4Li5jNzM4OWI0MGE3IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9vcmlnaW4uaApAQCAtNTMsNyArNTMsNyBAQCBleHRlcm4gWExvZ1JlY1B0ciByZXBsb3JpZ2lu X2dldF9wcm9ncmVzcyhSZXBPcmlnaW5JZCBub2RlLCBib29sIGZsdXNoKTsKIAogZXh0ZXJuIHZv aWQgcmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UoWExvZ1JlY1B0ciByZW1vdGVfY29tbWl0LAog CQkJCQkJCQkJICAgWExvZ1JlY1B0ciBsb2NhbF9jb21taXQpOwotZXh0ZXJuIHZvaWQgcmVwbG9y aWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpOworZXh0ZXJuIHZvaWQgcmVwbG9y aWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUsIGJvb2wgbXVzdF9hY3F1aXJlKTsK IGV4dGVybiB2b2lkIHJlcGxvcmlnaW5fc2Vzc2lvbl9yZXNldCh2b2lkKTsKIGV4dGVybiBYTG9n UmVjUHRyIHJlcGxvcmlnaW5fc2Vzc2lvbl9nZXRfcHJvZ3Jlc3MoYm9vbCBmbHVzaCk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCBkMTA5ZDBiYWVkLi5kMmE4 MGQ3OWU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVy LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCkBAIC0zMDEs NiArMzAxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlclRYTgogCXsKIAkJVGltZXN0 YW1wVHogY29tbWl0X3RpbWU7CiAJCVRpbWVzdGFtcFR6IHByZXBhcmVfdGltZTsKKwkJVGltZXN0 YW1wVHogYWJvcnRfdGltZTsKIAl9CQkJeGFjdF90aW1lOwogCiAJLyoKQEAgLTY0Nyw5ICs2NDgs MTEgQEAgZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckZpbmlzaFByZXBhcmVkKFJlb3JkZXJCdWZm ZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJBc3Np Z25DaGlsZChSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFRyYW5zYWN0aW9uSWQsIFhM b2dSZWNQdHIgY29tbWl0X2xzbik7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQ29tbWl0Q2hp bGQoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBUcmFuc2FjdGlvbklkLAogCQkJCQkJ CQkJIFhMb2dSZWNQdHIgY29tbWl0X2xzbiwgWExvZ1JlY1B0ciBlbmRfbHNuKTsKLWV4dGVybiB2 b2lkIFJlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFhM b2dSZWNQdHIgbHNuKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVm ZmVyICosIFRyYW5zYWN0aW9uSWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCSAgIFRpbWVzdGFt cFR6IGFib3J0X3RpbWUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFib3J0T2xkKFJlb3Jk ZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCB4aWQpOwotZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZl ckZvcmdldChSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFhMb2dSZWNQdHIgbHNuKTsK K2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2Fj dGlvbklkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJVGltZXN0YW1wVHogYWJvcnRfdGltZSk7 CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVySW52YWxpZGF0ZShSZW9yZGVyQnVmZmVyICosIFRy YW5zYWN0aW9uSWQsIFhMb2dSZWNQdHIgbHNuKTsKIAogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZl clNldEJhc2VTbmFwc2hvdChSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFhMb2dSZWNQ dHIgbHNuLCBzdHJ1Y3QgU25hcHNob3REYXRhICpzbmFwKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vd29ya2VyX2ludGVybmFsLmgKaW5kZXggOTAxODQ1YWJjMi4uYTM1NjBkNDkwNCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKKysrIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKQEAgLTE3LDggKzE3LDExIEBA CiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJz Y3JpcHRpb24uaCIKICNpbmNsdWRlICJkYXRhdHlwZS90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZpbGVzZXQu aCIKICNpbmNsdWRlICJzdG9yYWdlL2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobV9tcS5o IgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX3RvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5o IgogCiAKQEAgLTYwLDYgKzYzLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdvcmtlcgog CSAqLwogCUZpbGVTZXQgICAgKnN0cmVhbV9maWxlc2V0OwogCisJLyogSW5kaWNhdGVzIGlmIHRo aXMgc2xvdCBpcyB1c2VkIGZvciBhbiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlci4gKi8KKwlib29s CQlzdWJ3b3JrZXI7CisKIAkvKiBTdGF0cy4gKi8KIAlYTG9nUmVjUHRyCWxhc3RfbHNuOwogCVRp bWVzdGFtcFR6IGxhc3Rfc2VuZF90aW1lOwpAQCAtNjgsOCArNzQsNjggQEAgdHlwZWRlZiBzdHJ1 Y3QgTG9naWNhbFJlcFdvcmtlcgogCVRpbWVzdGFtcFR6IHJlcGx5X3RpbWU7CiB9IExvZ2ljYWxS ZXBXb3JrZXI7CiAKKy8qIFN0cnVjdCBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgYXBwbHkgZXJy Y29udGV4dCBpbmZvcm1hdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgQXBwbHlFcnJvckNhbGxiYWNr QXJnCit7CisJTG9naWNhbFJlcE1zZ1R5cGUgY29tbWFuZDsJLyogMCBpZiBpbnZhbGlkICovCisJ TG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWw7CisKKwkvKiBSZW1vdGUgbm9kZSBpbmZvcm1hdGlv biAqLworCWludAkJCXJlbW90ZV9hdHRudW07CS8qIC0xIGlmIGludmFsaWQgKi8KKwlUcmFuc2Fj dGlvbklkIHJlbW90ZV94aWQ7CisJWExvZ1JlY1B0cglmaW5pc2hfbHNuOworCWNoYXIJICAgKm9y aWdpbl9uYW1lOworfSBBcHBseUVycm9yQ2FsbGJhY2tBcmc7CisKKy8qCisgKiBTdGF0dXMgb2Yg YXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuCisgKi8KK3R5cGVkZWYgZW51bSBBcHBseUJnd29ya2Vy U3RhdHVzCit7CisJQVBQTFlfQkdXT1JLRVJfQlVTWSA9IDAsCQkvKiBhc3NpZ25lZCB0byBhIHRy YW5zYWN0aW9uICovCisJQVBQTFlfQkdXT1JLRVJfRklOSVNIRUQsCQkvKiB0cmFuc2FjdGlvbiBp cyBjb21wbGV0ZWQgKi8KKwlBUFBMWV9CR1dPUktFUl9FWElUCQkJCS8qIGV4aXQgKi8KK30gQXBw bHlCZ3dvcmtlclN0YXR1czsKKworLyoKKyAqIFN0cnVjdCBmb3Igc2hhcmluZyBpbmZvcm1hdGlv biBiZXR3ZWVuIGFwcGx5IG1haW4gYW5kIGFwcGx5IGJhY2tncm91bmQKKyAqIHdvcmtlcnMuCisg Ki8KK3R5cGVkZWYgc3RydWN0IEFwcGx5Qmd3b3JrZXJTaGFyZWQKK3sKKwlzbG9ja190CW11dGV4 OworCisJLyogU3RhdHVzIG9mIGFwcGx5IGJhY2tncm91bmQgd29ya2VyLiAqLworCUFwcGx5Qmd3 b3JrZXJTdGF0dXMJc3RhdHVzOworCisJLyogc2VydmVyIHZlcnNpb24gb2YgcHVibGlzaGVyLiAq LworCXVpbnQzMglzZXJ2ZXJfdmVyc2lvbjsKKworCVRyYW5zYWN0aW9uSWQJc3RyZWFtX3hpZDsK Kwl1aW50MzIJbjsJLyogaWQgb2YgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgKi8KK30gQXBwbHlC Z3dvcmtlclNoYXJlZDsKKworLyoKKyAqIFN0cnVjdCBmb3IgbWFpbnRhaW5pbmcgYW4gYXBwbHkg YmFja2dyb3VuZCB3b3JrZXIuCisgKi8KK3R5cGVkZWYgc3RydWN0IEFwcGx5Qmd3b3JrZXJTdGF0 ZQoreworCXNobV9tcV9oYW5kbGUJCQkqbXFfaGFuZGxlOworCWRzbV9zZWdtZW50CQkJCSpkc21f c2VnOworCUFwcGx5Qmd3b3JrZXJTaGFyZWQgdm9sYXRpbGUJKnNoYXJlZDsKK30gQXBwbHlCZ3dv cmtlclN0YXRlOworCiAvKiBNYWluIG1lbW9yeSBjb250ZXh0IGZvciBhcHBseSB3b3JrZXIuIFBl cm1hbmVudCBkdXJpbmcgd29ya2VyIGxpZmV0aW1lLiAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIE1l bW9yeUNvbnRleHQgQXBwbHlDb250ZXh0OworZXh0ZXJuIFBHRExMSU1QT1JUIE1lbW9yeUNvbnRl eHQgQXBwbHlNZXNzYWdlQ29udGV4dDsKKworZXh0ZXJuIFBHRExMSU1QT1JUIEFwcGx5RXJyb3JD YWxsYmFja0FyZyBhcHBseV9lcnJvcl9jYWxsYmFja19hcmc7CisKK2V4dGVybiBQR0RMTElNUE9S VCBib29sIE15U3Vic2NyaXB0aW9uVmFsaWQ7CisKK2V4dGVybiBQR0RMTElNUE9SVCB2b2xhdGls ZSBBcHBseUJnd29ya2VyU2hhcmVkICpNeVBhcmFsbGVsU2hhcmVkOworCitleHRlcm4gUEdETExJ TVBPUlQgTGlzdCAqc3VieGFjdGxpc3Q7CiAKIC8qIGxpYnBxcmVjZWl2ZXIgY29ubmVjdGlvbiAq LwogZXh0ZXJuIFBHRExMSU1QT1JUIHN0cnVjdCBXYWxSZWNlaXZlckNvbm4gKkxvZ1JlcFdvcmtl cldhbFJjdkNvbm47CkBAIC03OSwxOCArMTQ1LDIyIEBAIGV4dGVybiBQR0RMTElNUE9SVCBTdWJz Y3JpcHRpb24gKk15U3Vic2NyaXB0aW9uOwogZXh0ZXJuIFBHRExMSU1QT1JUIExvZ2ljYWxSZXBX b3JrZXIgKk15TG9naWNhbFJlcFdvcmtlcjsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgaW5f cmVtb3RlX3RyYW5zYWN0aW9uOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgaW5fc3RyZWFtZWRf dHJhbnNhY3Rpb247CitleHRlcm4gUEdETExJTVBPUlQgVHJhbnNhY3Rpb25JZCBzdHJlYW1feGlk OwogCiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2goaW50IHNsb3QpOwogZXh0 ZXJuIExvZ2ljYWxSZXBXb3JrZXIgKmxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBP aWQgcmVsaWQsCiAJCQkJCQkJCQkJCQlib29sIG9ubHlfcnVubmluZyk7CiBleHRlcm4gTGlzdCAq bG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBib29sIG9ubHlfcnVubmluZyk7Ci1l eHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwg Y29uc3QgY2hhciAqc3VibmFtZSwKLQkJCQkJCQkJCSBPaWQgdXNlcmlkLCBPaWQgcmVsaWQpOwor ZXh0ZXJuIGJvb2wgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQs IGNvbnN0IGNoYXIgKnN1Ym5hbWUsCisJCQkJCQkJCQkgT2lkIHVzZXJpZCwgT2lkIHJlbGlkLAor CQkJCQkJCQkJIGRzbV9oYW5kbGUgc3Vid29ya2VyX2RzbSk7CiBleHRlcm4gdm9pZCBsb2dpY2Fs cmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKTsKIGV4dGVybiB2b2lkIGxvZ2lj YWxyZXBfd29ya2VyX3dha2V1cChPaWQgc3ViaWQsIE9pZCByZWxpZCk7CiBleHRlcm4gdm9pZCBs b2dpY2FscmVwX3dvcmtlcl93YWtldXBfcHRyKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcik7CiAK IGV4dGVybiBpbnQJbG9naWNhbHJlcF9zeW5jX3dvcmtlcl9jb3VudChPaWQgc3ViaWQpOworZXh0 ZXJuIGludAlsb2dpY2FscmVwX2FwcGx5X2Jnd29ya2VyX2NvdW50KE9pZCBzdWJpZCk7CiAKIGV4 dGVybiB2b2lkIFJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvclRhYmxlc3luYyhPaWQgc3Vib2lkLCBP aWQgcmVsaWQsCiAJCQkJCQkJCQkJCSAgY2hhciAqb3JpZ2lubmFtZSwgaW50IHN6b3JnbmFtZSk7 CkBAIC0xMDMsMTAgKzE3MywzOCBAQCBleHRlcm4gdm9pZCBwcm9jZXNzX3N5bmNpbmdfdGFibGVz KFhMb2dSZWNQdHIgY3VycmVudF9sc24pOwogZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9zeW5jaW5n X3RhYmxlX3N0YXRlcyhEYXR1bSBhcmcsIGludCBjYWNoZWlkLAogCQkJCQkJCQkJCQl1aW50MzIg aGFzaHZhbHVlKTsKIAorZXh0ZXJuIHZvaWQgVXBkYXRlV29ya2VyU3RhdHMoWExvZ1JlY1B0ciBs YXN0X2xzbiwgVGltZXN0YW1wVHogc2VuZF90aW1lLAorCQkJCQkJCSAgYm9vbCByZXBseSk7CisK K2V4dGVybiB2b2lkIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcyk7CisKKy8qIEZ1bmN0aW9u IGZvciBhcHBseSBlcnJvciBjYWxsYmFjayAqLworZXh0ZXJuIHZvaWQgYXBwbHlfZXJyb3JfY2Fs bGJhY2sodm9pZCAqYXJnKTsKKworZXh0ZXJuIHZvaWQgc3Vic2NyaXB0aW9uX2NoYW5nZV9jYihE YXR1bSBhcmcsIGludCBjYWNoZWlkLCB1aW50MzIgaGFzaHZhbHVlKTsKKworLyogQXBwbHkgYmFj a2dyb3VuZCB3b3JrZXIgc2V0dXAgYW5kIGludGVyYWN0aW9ucyAqLworZXh0ZXJuIEFwcGx5Qmd3 b3JrZXJTdGF0ZSAqYXBwbHlfYmd3b3JrZXJfc3RhcnQoVHJhbnNhY3Rpb25JZCB4aWQpOworZXh0 ZXJuIEFwcGx5Qmd3b3JrZXJTdGF0ZSAqYXBwbHlfYmd3b3JrZXJfZmluZChUcmFuc2FjdGlvbklk IHhpZCk7CitleHRlcm4gdm9pZCBhcHBseV9iZ3dvcmtlcl93YWl0X2ZvcihBcHBseUJnd29ya2Vy U3RhdGUgKndzdGF0ZSwKKwkJCQkJCQkJCUFwcGx5Qmd3b3JrZXJTdGF0dXMgd2FpdF9mb3Jfc3Rh dHVzKTsKK2V4dGVybiB2b2lkIGFwcGx5X2Jnd29ya2VyX3NlbmRfZGF0YShBcHBseUJnd29ya2Vy U3RhdGUgKndzdGF0ZSwgU2l6ZSBuYnl0ZXMsCisJCQkJCQkJCQkgY29uc3Qgdm9pZCAqZGF0YSk7 CitleHRlcm4gdm9pZCBhcHBseV9iZ3dvcmtlcl9mcmVlKEFwcGx5Qmd3b3JrZXJTdGF0ZSAqd3N0 YXRlKTsKK2V4dGVybiB2b2lkIGFwcGx5X2Jnd29ya2VyX2NoZWNrX3N0YXR1cyh2b2lkKTsKK2V4 dGVybiB2b2lkIGFwcGx5X2Jnd29ya2VyX3NldF9zdGF0dXMoQXBwbHlCZ3dvcmtlclN0YXR1cyBz dGF0dXMpOworZXh0ZXJuIHZvaWQgYXBwbHlfYmd3b3JrZXJfc3VieGFjdF9pbmZvX2FkZChUcmFu c2FjdGlvbklkIGN1cnJlbnRfeGlkKTsKKwogc3RhdGljIGlubGluZSBib29sCiBhbV90YWJsZXN5 bmNfd29ya2VyKHZvaWQpCiB7CiAJcmV0dXJuIE9pZElzVmFsaWQoTXlMb2dpY2FsUmVwV29ya2Vy LT5yZWxpZCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbAorYW1fYXBwbHlfYmd3b3JrZXIodm9p ZCkKK3sKKwlyZXR1cm4gTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJ3b3JrZXI7Cit9CisKICNlbmRp ZgkJCQkJCQkvKiBXT1JLRVJfSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvd2FpdF9ldmVudC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCmluZGV4 IGMzYWRlMDExMjAuLmUzNWYxOTlmZDQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3dh aXRfZXZlbnQuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKQEAgLTEwNSw2 ICsxMDUsNyBAQCB0eXBlZGVmIGVudW0KIAlXQUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX0FM TE9DQVRFLAogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JVQ0tFVFNfRUxFQ1QsCiAJV0FJVF9FVkVO VF9IQVNIX0dST1dfQlVDS0VUU19SRUlOU0VSVCwKKwlXQUlUX0VWRU5UX0xPR0lDQUxfQVBQTFlf V09SS0VSX1NUQVRFX0NIQU5HRSwKIAlXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19EQVRBLAogCVdB SVRfRVZFTlRfTE9HSUNBTF9TWU5DX1NUQVRFX0NIQU5HRSwKIAlXQUlUX0VWRU5UX01RX0lOVEVS TkFMLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24u b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0CmluZGV4IDVk YjcxNDZlMDYuLjkxOTI2NmFlMDYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc3Vic2NyaXB0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNj cmlwdGlvbi5vdXQKQEAgLTE5Nyw3ICsxOTcsNyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVz c190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CiBEUk9QIFNVQlNDUklQVElPTiByZWdy ZXNzX3Rlc3RzdWI7CiAtLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbgogQ1JFQVRF IFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3Nf ZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwg c3RyZWFtaW5nID0gZm9vKTsKLUVSUk9SOiAgc3RyZWFtaW5nIHJlcXVpcmVzIGEgQm9vbGVhbiB2 YWx1ZQorRVJST1I6ICBzdHJlYW1pbmcgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlIG9yICJwYXJh bGxlbCIKIC0tIG5vdyBpdCB3b3JrcwogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3Rz dWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0 ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gdHJ1ZSk7CiBXQVJOSU5H OiAgdGFibGVzIHdlcmUgbm90IHN1YnNjcmliZWQsIHlvdSB3aWxsIGhhdmUgdG8gcnVuIEFMVEVS IFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTiB0byBzdWJzY3JpYmUgdGhlIHRh YmxlcwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAzNGE3NmNlYjYwLi40MTM3ZGM3N2I0 IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTE2LDYgKzExNiwxMCBAQCBBcHBlbmQK IEFwcGVuZFBhdGgKIEFwcGVuZFJlbEluZm8KIEFwcGVuZFN0YXRlCitBcHBseUJnd29ya2VyRW50 cnkKK0FwcGx5Qmd3b3JrZXJTaGFyZWQKK0FwcGx5Qmd3b3JrZXJTdGF0ZQorQXBwbHlCZ3dvcmtl clN0YXR1cwogQXBwbHlFcnJvckNhbGxiYWNrQXJnCiBBcHBseUV4ZWN1dGlvbkRhdGEKIEFwcGx5 U3ViWGFjdERhdGEKQEAgLTE0ODUsNiArMTQ4OSw3IEBAIExvZ2ljYWxSZXBSZWxJZAogTG9naWNh bFJlcFJlbE1hcEVudHJ5CiBMb2dpY2FsUmVwUmVsYXRpb24KIExvZ2ljYWxSZXBSb2xsYmFja1By ZXBhcmVkVHhuRGF0YQorTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YQogTG9naWNhbFJlcFR1cGxl RGF0YQogTG9naWNhbFJlcFR5cAogTG9naWNhbFJlcFdvcmtlcgotLSAKMi4yMy4wLndpbmRvd3Mu MQoK --_005_OS3PR01MB62758A6AAED27B3A848CEB7A9E8F9OS3PR01MB6275jpnp_ Content-Type: application/octet-stream; name="v18-0002-Test-streaming-parallel-option-in-tap-test.patch" Content-Description: v18-0002-Test-streaming-parallel-option-in-tap-test.patch Content-Disposition: attachment; filename="v18-0002-Test-streaming-parallel-option-in-tap-test.patch"; size=70776; creation-date="Tue, 19 Jul 2022 02:25:00 GMT"; modification-date="Tue, 19 Jul 2022 02:28:40 GMT" Content-Transfer-Encoding: base64 RnJvbSAzZDlkOTUwZDJlNGM0YjZhZDY0NGM1YmFmZmEyOTNiNDhkMjFjYWMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAic2hpeS5mbnN0IiA8c2hpeS5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBGcmksIDEzIE1heSAyMDIyIDE0OjUwOjMwICswODAwClN1YmplY3Q6IFtQQVRDSCB2MTgg Mi80XSBUZXN0IHN0cmVhbWluZyBwYXJhbGxlbCBvcHRpb24gaW4gdGFwIHRlc3QKCkNoYW5nZSBh bGwgVEFQIHRlc3RzIHVzaW5nIHRoZSBTVUJTQ1JJUFRJT04gInN0cmVhbWluZyIgcGFyYW1ldGVy LCBzbyB0aGV5Cm5vdyB0ZXN0IGJvdGggJ29uJyBhbmQgJ3BhcmFsbGVsJyB2YWx1ZXMuCi0tLQog c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCAgICAgICAgIHwgMTk5ICsrKyst LS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3VieGFjdC5wbCB8IDExOSAr KystLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVhbV9kZGwucGwgICAgIHwgMTg4 ICsrKystLS0KIC4uLi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbCAgICAgICAgICAgICB8 IDE5NSArKysrLS0tCiAuLi4vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsICAgICAg ICAgfCAxMTAgKysrLQogLi4uL3N1YnNjcmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBs ICAgIHwgMzYzICsrKysrKystLS0tLS0KIC4uLi9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vf c3RyZWFtLnBsICAgICB8IDQ5OCArKysrKysrKysrLS0tLS0tLS0KIDcgZmlsZXMgY2hhbmdlZCwg MTAzNSBpbnNlcnRpb25zKCspLCA2MzcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAxNV9zdHJlYW0ucGwKaW5kZXggNjU2MWIxODlkZS4uMGJkZDIzNDkzNSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbAorKysgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCkBAIC04LDYgKzgsMTE2IEBAIHVzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6 Ok1vcmU7CiAKKyMgRW5jYXBzdWxhdGUgYWxsIHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBh cmUgcmVsYXRlZCB0byAic3RyZWFtaW5nIgorIyBwYXJhbWV0ZXIgc28gdGhlIHNhbWUgY29kZSBj YW4gYmUgcnVuIGJvdGggZm9yIHRoZSBzdHJlYW1pbmc9b24gYW5kCisjIHN0cmVhbWluZz1wYXJh bGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIs ICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwkjIElu dGVybGVhdmUgYSBwYWlyIG9mIHRyYW5zYWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0a0Ig bGltaXQuCisJbXkgJGluICA9ICcnOworCW15ICRvdXQgPSAnJzsKKworCW15ICR0aW1lciA9IElQ Qzo6UnVuOjp0aW1lb3V0KCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0 KTsKKworCW15ICRoID0gJG5vZGVfcHVibGlzaGVyLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVz JywgXCRpbiwgXCRvdXQsICR0aW1lciwKKwkJb25fZXJyb3Jfc3RvcCA9PiAwKTsKKworCSMgQ2hl Y2sgdGhhdCBhIGJhY2tncm91bmQgd29ya2VyIHN0YXJ0cyBpZiAic3RyZWFtaW5nIiBwYXJhbWV0 ZXIgaXMKKwkjIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLiAgV2UgaGF2ZSB0byBsb29rIGZvciB0 aGUgREVCVUcxIGxvZyBtZXNzYWdlcworCSMgYWJvdXQgdGhhdCwgc28gdGVtcG9yYXJpbHkgYnVt cCB1cCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVf c3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9t ZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorCisJ JGluIC49IHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOworCVVQREFURSB0ZXN0 X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVz dF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCX07CisJJGgtPnB1bXBfbmI7CisKKwlpZiAoJGlz X3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL1xbQXBw bHkgQkdXICNcZCtcXSBzdGFydGVkLywgMCk7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9j b25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5nIik7 CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9CisKKwkkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsIDk5OTkp IHMoaSk7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDUwMDA7CisJQ09NTUlUOwor CX0pOworCisJJGluIC49IHF7CisJQ09NTUlUOworCVxxCisJfTsKKwkkaC0+ZmluaXNoOyAgICAj IGVycm9ycyBtYWtlIHRoZSBuZXh0IHRlc3QgZmFpbCwgc28gaWdub3JlIHRoZW0gaGVyZQorCisJ JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCW15ICRyZXN1 bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxF Q1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJ aXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLAorCQknY2hlY2sgZXh0cmEgY29sdW1ucyBj b250YWluIGxvY2FsIGRlZmF1bHRzJyk7CisKKwkjIFRlc3QgdGhlIHN0cmVhbWluZyBpbiBiaW5h cnkgbW9kZQorCSRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQUxU RVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUIChiaW5hcnkgPSBvbikiKTsKKworCSMgSW5zZXJ0 LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQu CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47 CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVy YXRlX3Nlcmllcyg1MDAxLCAxMDAwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBt ZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1v ZChhLDMpID0gMDsKKwlDT01NSVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJGFwcG5hbWUpOworCisJJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50 KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSg2NjY3fDY2Njd8NjY2 NyksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKKwor CSMgQ2hhbmdlIHRoZSBsb2NhbCB2YWx1ZXMgb2YgdGhlIGV4dHJhIGNvbHVtbnMgb24gdGhlIHN1 YnNjcmliZXIsCisJIyB1cGRhdGUgcHVibGlzaGVyLCBhbmQgY2hlY2sgdGhhdCBzdWJzY3JpYmVy IHJldGFpbnMgdGhlIGV4cGVjdGVkCisJIyB2YWx1ZXMuIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQg bm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMgYmVoYXZlCisJIyBwcm9wZXJseSBhZnRlciBhIHN0 cmVhbWluZyB0cmFuc2FjdGlvbi4KKwkkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkJIlVQREFURSB0ZXN0X3RhYiBTRVQgYyA9ICdlcG9jaCc6OnRpbWVzdGFtcHR6ICsg OTg3NjU0MzIxICogaW50ZXJ2YWwgJzFzJyIKKwkpOworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJCSJVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYTo6dGV4dCki KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxF Q1QgY291bnQoKiksIGNvdW50KGV4dHJhY3QoZXBvY2ggZnJvbSBjKSA9IDk4NzY1NDMyMSksIGNv dW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiCisJKTsKKwlpcygkcmVzdWx0LCBxcSg2NjY3fDY2 Njd8NjY2NyksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWxseSBjaGFuZ2Vk IGRhdGEnKTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4g MikiKTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworfQor CiAjIENyZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5p dChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsxNDcsMTAgQEAgJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9O IHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWIn OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVh bWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0 YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRh cHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBA IC01NCw4MiArMTY4LDI1IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50 KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8 MiksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMg SW50ZXJsZWF2ZSBhIHBhaXIgb2YgdHJhbnNhY3Rpb25zLCBlYWNoIGV4Y2VlZGluZyB0aGUgNjRr QiBsaW1pdC4KLW15ICRpbiAgPSAnJzsKLW15ICRvdXQgPSAnJzsKLQotbXkgJHRpbWVyID0gSVBD OjpSdW46OnRpbWVvdXQoJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQp OwotCi1teSAkaCA9ICRub2RlX3B1Ymxpc2hlci0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3Jlcycs IFwkaW4sIFwkb3V0LCAkdGltZXIsCi0Jb25fZXJyb3Jfc3RvcCA9PiAwKTsKLQotJGluIC49IHF7 Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9 IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBt b2QoYSwzKSA9IDA7Ci19OwotJGgtPnB1bXBfbmI7Ci0KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgOTk5OSkgcyhpKTsK LURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiA1MDAwOwotQ09NTUlUOwotfSk7Ci0KLSRp biAuPSBxewotQ09NTUlUOwotXHEKLX07Ci0kaC0+ZmluaXNoOyAgICAjIGVycm9ycyBtYWtlIHRo ZSBuZXh0IHRlc3QgZmFpbCwgc28gaWdub3JlIHRoZW0gaGVyZQotCi0kbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyks IGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMz NHwzMzM0KSwgJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycpOwot Ci0jIFRlc3QgdGhlIHN0cmVhbWluZyBpbiBiaW5hcnkgbW9kZQotJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVCAo YmluYXJ5ID0gb24pIik7Ci0KLSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93 cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgK LQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsIDEwMDAwKSBzKGkpOwotVVBE QVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwordGVzdF9zdHJlYW1pbmcoJG5v ZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7CiAKLSRyZXN1bHQg PQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJl c3VsdCwgcXEoNjY2N3w2NjY3fDY2NjcpLCAnY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxv Y2FsIGRlZmF1bHRzJyk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor IyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24g V0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWlu Zyc7IgorKTsKIAotIyBDaGFuZ2UgdGhlIGxvY2FsIHZhbHVlcyBvZiB0aGUgZXh0cmEgY29sdW1u cyBvbiB0aGUgc3Vic2NyaWJlciwKLSMgdXBkYXRlIHB1Ymxpc2hlciwgYW5kIGNoZWNrIHRoYXQg c3Vic2NyaWJlciByZXRhaW5zIHRoZSBleHBlY3RlZAotIyB2YWx1ZXMuIFRoaXMgaXMgdG8gZW5z dXJlIHRoYXQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMgYmVoYXZlCi0jIHByb3Blcmx5IGFm dGVyIGEgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCi0JIlVQREFURSB0ZXN0X3RhYiBTRVQgYyA9ICdlcG9jaCc6OnRpbWVzdGFt cHR6ICsgOTg3NjU0MzIxICogaW50ZXJ2YWwgJzFzJyIKLSk7Ci0kbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAotCSJVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYTo6dGV4 dCkiKTsKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFs bGVsLCBiaW5hcnkgPSBvZmYpIik7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7Ciskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVz JywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVS RSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsi CisgICkKKyAgb3IgZGllCisgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8g cmVzdGFydCBhZnRlciBjaGFuZ2luZyBTVUJTQ1JJUFRJT04iOwogCi0kcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoZXh0cmFjdChlcG9jaCBmcm9tIGMpID0gOTg3NjU0MzIxKSwgY291bnQoZCA9IDk5OSkgRlJP TSB0ZXN0X3RhYiIKLSk7Ci1pcygkcmVzdWx0LCBxcSg2NjY3fDY2Njd8NjY2NyksCi0JJ2NoZWNr IGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbGx5IGNoYW5nZWQgZGF0YScpOwordGVzdF9zdHJl YW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMSk7CiAK ICRub2RlX3N1YnNjcmliZXItPnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3QucGwgYi9zcmMv dGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3QucGwKaW5kZXggZjI3ZjE2OTRm Mi4uNDU0MjlkZGRiYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0 cmVhbV9zdWJ4YWN0LnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1f c3VieGFjdC5wbApAQCAtOCw2ICs4LDcyIEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy OwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgRW5j YXBzdWxhdGUgYWxsIHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAi c3RyZWFtaW5nIgorIyBwYXJhbWV0ZXIgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGgg Zm9yIHRoZSBzdHJlYW1pbmc9b24gYW5kCisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1 YiB0ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmli ZXIsICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwkjIENoZWNrIHRoYXQgYSBiYWNr Z3JvdW5kIHdvcmtlciBzdGFydHMgaWYgInN0cmVhbWluZyIgcGFyYW1ldGVyIGlzCisJIyBzcGVj aWZpZWQgYXMgInBhcmFsbGVsIi4gIFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERFQlVHMSBsb2cg bWVzc2FnZXMKKwkjIGFib3V0IHRoYXQsIHNvIHRlbXBvcmFyaWx5IGJ1bXAgdXAgdGhlIGxvZyB2 ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFw cGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1 ZzEiKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KKworCSMgSW5zZXJ0LCB1cGRh dGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgNjRrQiBsaW1pdC4KKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVz KCAgICAzLCAgNTAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVS RSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAw OworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwgIDEwMDApIHMoaSk7CisJVVBEQVRFIHRl c3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0 ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAw MSwgIDE1MDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1v ZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJ U0FWRVBPSU5UIHMzOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUwMSwgIDIwMDApIHMoaSk7CisJVVBEQVRFIHRlc3Rf dGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0 X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHM0OworCUlOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMSwg MjUwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEs MikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlDT01N SVQ7CisJfSk7CisKKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+ d2FpdF9mb3JfbG9nKHFyL1xbQXBwbHkgQkdXICNcZCtcXSBzdGFydGVkLywgMCk7CisJCSRub2Rl X3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5f bWVzc2FnZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9CisK Kwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJbXkgJHJl c3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK KwlpcygkcmVzdWx0LCBxcSgxNjY3fDE2Njd8MTY2NyksCisJCSdjaGVjayBkYXRhIHdhcyBjb3Bp ZWQgdG8gc3Vic2NyaWJlciBpbiBzdHJlYW1pbmcgbW9kZSBhbmQgZXh0cmEgY29sdW1ucyBjb250 YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0 X3RhYiBXSEVSRSAoYSA+IDIpIik7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lKTsKK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxp c2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9k ZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzcs NiArMTAzLDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNS RUFURSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBw bmFtZSA9ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg VGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFU RSBTVUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBw bGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1p bmcgPSBvbikiCiApOwpAQCAtNTQsNDEgKzEyNCwyNiBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNU IGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwogaXMo JHJlc3VsdCwgcXEoMnwyfDIpLCAnY2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vi c2NyaWJlcicpOwogCi0jIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8g ZXhjZWVkIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdy ZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKCAgICAzLCAgNTAwKSBzKGkpOwotVVBEQVRFIHRlc3Rf dGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNBVkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLCAgMTAw MCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9 IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci1TQVZFUE9JTlQg czI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEwMDEsICAxNTAwKSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0g bWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1v ZChhLDMpID0gMDsKLVNBVkVQT0lOVCBzMzsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBp LCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUwMSwgIDIwMDApIHMoaSk7Ci1V UERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRF IEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBPSU5UIHM0OwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cygyMDAxLCAyNTAwKSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJF IG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsK LUNPTU1JVDsKLX0pOwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJz Y3JpYmVyLCAkYXBwbmFtZSwgMCk7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkg RlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMTY2N3wxNjY3fDE2NjcpLAotCSdjaGVj ayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlciBpbiBzdHJlYW1pbmcgbW9kZSBhbmQgZXh0 cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwn CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBw Z19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFO RCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7CiAKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5n ID0gcGFyYWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgncG9z dGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9u IFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1p bmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBs eSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisKK3Rlc3Rfc3RyZWFt aW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOworCiAk bm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwogCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbCBiL3NyYy90ZXN0 L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1fZGRsLnBsCmluZGV4IDBiY2U2M2I3MTYuLjUyZGZl ZjQ3ODAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1fZGRs LnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1fZGRsLnBsCkBAIC04 LDYgKzgsMTExIEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgRW5jYXBzdWxhdGUgYWxsIHRo ZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3RyZWFtaW5nIgorIyBw YXJhbWV0ZXIgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRoZSBzdHJlYW1p bmc9b24gYW5kCisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWlu ZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAk aXNfcGFyYWxsZWwpID0gQF87CisKKwkjIGEgc21hbGwgKG5vbi1zdHJlYW1lZCkgdHJhbnNhY3Rp b24gd2l0aCBEREwgYW5kIERNTAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9z dGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMywgbWQ1 KDM6OnRleHQpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGMgSU5UOworCVNB VkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDQsIG1kNSg0Ojp0ZXh0 KSwgLTQpOworCUNPTU1JVDsKKwl9KTsKKworCSMgQ2hlY2sgdGhhdCBhIGJhY2tncm91bmQgd29y a2VyIHN0YXJ0cyBpZiAic3RyZWFtaW5nIiBwYXJhbWV0ZXIgaXMKKwkjIHNwZWNpZmllZCBhcyAi cGFyYWxsZWwiLiAgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNzYWdlcwor CSMgYWJvdXQgdGhhdCwgc28gdGVtcG9yYXJpbHkgYnVtcCB1cCB0aGUgbG9nIHZlcmJvc2l0eS4K KwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYo J3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkk bm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5z YWN0aW9uIHdpdGggRERMIGFuZCBETUwKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJ J3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpLCAtaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1LCAxMDAwKSBzKGkpOworCUFM VEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZCBJTlQ7CisJU0FWRVBPSU5UIHMxOworCUlO U0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMTAwMSwgMjAwMCkgcyhpKTsKKwlDT01NSVQ7CisJfSk7CisKKwlpZiAo JGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyL1xb QXBwbHkgQkdXICNcZCtcXSBzdGFydGVkLywgMCk7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVu ZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5n Iik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9CisKKwkjIGEgc21hbGwgKG5vbi1z dHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAorCSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFZBTFVFUyAoMjAwMSwgbWQ1KDIwMDE6OnRleHQpLCAtMjAwMSwgMioyMDAxKTsKKwlBTFRF UiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGUgSU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDIwMDIsIG1kNSgyMDAyOjp0ZXh0KSwgLTIwMDIsIDIq MjAwMiwgLTMqMjAwMik7CisJQ09NTUlUOworCX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkKSwgY291bnQoZSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDIw MDJ8MTk5OXwxMDAyfDEpLAorCQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIg aW4gc3RyZWFtaW5nIG1vZGUgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0 cycKKwkpOworCisJIyBBIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5k IERNTC4gT25lIG9mIHRoZSBEREwgaXMgcGVyZm9ybWVkCisJIyBhZnRlciBETUwgdG8gZW5zdXJl IHRoYXQgd2UgaW52YWxpZGF0ZSB0aGUgc2NoZW1hIHNlbnQgZm9yIHRlc3RfdGFiIHNvIHRoYXQK KwkjIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGhhcyB0byBzZW5kIHRoZSBzY2hlbWEgYWdhaW4uCisJ JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJ SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSwgLTMq aSBGUk9NIGdlbmVyYXRlX3NlcmllcygyMDAzLDUwMDApIHMoaSk7CisJQUxURVIgVEFCTEUgdGVz dF90YWIgQUREIENPTFVNTiBmIElOVDsKKwlDT01NSVQ7CisJfSk7CisKKwkjIEEgc21hbGwgdHJh bnNhY3Rpb24gdGhhdCB3b24ndCBnZXQgc3RyZWFtZWQuIFRoaXMgaXMganVzdCB0byBlbnN1cmUg dGhhdCB3ZQorCSMgc2VuZCB0aGUgc2NoZW1hIGFnYWluIHRvIHJlZmxlY3QgdGhlIGxhc3QgY29s dW1uIGFkZGVkIGluIHRoZSBwcmV2aW91cyB0ZXN0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmksIC0zKmksIDQqaSBGUk9NIGdlbmVyYXRlX3Nl cmllcyg1MDAxLDUwMDUpIHMoaSk7CisJQ09NTUlUOworCX0pOworCisJJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyks IGNvdW50KGQpLCBjb3VudChlKSwgY291bnQoZikgRlJPTSB0ZXN0X3RhYiIKKwkpOworCWlzKCRy ZXN1bHQsIHFxKDUwMDV8NTAwMnw0MDA1fDMwMDR8NSksCisJCSdjaGVjayBkYXRhIHdhcyBjb3Bp ZWQgdG8gc3Vic2NyaWJlciBmb3IgYm90aCBzdHJlYW1pbmcgYW5kIG5vbi1zdHJlYW1pbmcgdHJh bnNhY3Rpb25zJworCSk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCURFTEVURSBGUk9NIHRlc3RfdGFi IFdIRVJFIChhID4gMik7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgRFJPUCBDT0xVTU4gYywgRFJP UCBDT0xVTU4gZCwgRFJPUCBDT0xVTU4gZSwgRFJPUCBDT0xVTU4gZjsKKwl9KTsKKwkkbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworfQorCiAjIENyZWF0ZSBwdWJs aXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl ci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFt aW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsxNDIsMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRB QkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicK KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJ T04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNB VElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC01NCw3NiArMTYzLDI1 IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0g OTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDB8MCksICdjaGVjayBpbml0 aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMgYSBzbWFsbCAobm9uLXN0 cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBhbmQgRE1MCi0kbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBW QUxVRVMgKDMsIG1kNSgzOjp0ZXh0KSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1O IGMgSU5UOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg0LCBt ZDUoNDo6dGV4dCksIC00KTsKLUNPTU1JVDsKLX0pOwotCi0jIGxhcmdlIChzdHJlYW1lZCkgdHJh bnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0J J3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSwgLWkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNSwgMTAwMCkgcyhpKTsKLUFMVEVS IFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZCBJTlQ7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEwMDEsIDIwMDApIHMoaSk7Ci1DT01NSVQ7Ci19KTsKLQotIyBhIHNtYWxsIChu b24tc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKLSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFZBTFVFUyAoMjAwMSwgbWQ1KDIwMDE6OnRleHQpLCAtMjAwMSwgMioyMDAxKTsKLUFMVEVS IFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZSBJTlQ7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQg SU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDIwMDIsIG1kNSgyMDAyOjp0ZXh0KSwgLTIwMDIsIDIqMjAw MiwgLTMqMjAwMik7Ci1DT01NSVQ7Ci19KTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hl ciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDApOwogCi0kbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNv dW50KGQpLCBjb3VudChlKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgyMDAyfDE5 OTl8MTAwMnwxKSwKLQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIgaW4gc3Ry ZWFtaW5nIG1vZGUgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFt aW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9u YW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCiApOwogCi0jIEEgbGFy Z2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBhbmQgRE1MLiBPbmUgb2YgdGhlIERE TCBpcyBwZXJmb3JtZWQKLSMgYWZ0ZXIgRE1MIHRvIGVuc3VyZSB0aGF0IHdlIGludmFsaWRhdGUg dGhlIHNjaGVtYSBzZW50IGZvciB0ZXN0X3RhYiBzbyB0aGF0Ci0jIHRoZSBuZXh0IHRyYW5zYWN0 aW9uIGhhcyB0byBzZW5kIHRoZSBzY2hlbWEgYWdhaW4uCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIw MDMsNTAwMCkgcyhpKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZiBJTlQ7Ci1D T01NSVQ7Ci19KTsKLQotIyBBIHNtYWxsIHRyYW5zYWN0aW9uIHRoYXQgd29uJ3QgZ2V0IHN0cmVh bWVkLiBUaGlzIGlzIGp1c3QgdG8gZW5zdXJlIHRoYXQgd2UKLSMgc2VuZCB0aGUgc2NoZW1hIGFn YWluIHRvIHJlZmxlY3QgdGhlIGxhc3QgY29sdW1uIGFkZGVkIGluIHRoZSBwcmV2aW91cyB0ZXN0 LgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwot SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSwgLTMq aSwgNCppIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsNTAwNSkgcyhpKTsKLUNPTU1JVDsKLX0p OworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlND UklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsKIAotJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKyRub2RlX3B1Ymxpc2hlci0+cG9s bF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBw Z19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFO RCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGls ZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElP TiI7CiAKLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCksIGNvdW50KGUpLCBjb3Vu dChmKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSg1MDA1fDUwMDJ8NDAwNXwzMDA0 fDUpLAotCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlciBmb3IgYm90aCBzdHJl YW1pbmcgYW5kIG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zJwotKTsKK3Rlc3Rfc3RyZWFtaW5n KCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwogCiAkbm9k ZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBsIGIvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBsCmluZGV4IDcx NTU0NDJlNzYuLjY4ZjBlNGIwZDEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMThfc3RyZWFtX3N1YnhhY3RfYWJvcnQucGwKQEAgLTgsNiArOCwxMTMgQEAgdXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2Ug VGVzdDo6TW9yZTsKIAorIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNvbW1vbiB0ZXN0IHN0ZXBzIHdo aWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciCisjIHBhcmFtZXRlciBzbyB0aGUgc2FtZSBj b2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1vbiBhbmQKKyMgc3RyZWFtaW5n PXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1Ymxp c2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkgPSBAXzsKKwor CSMgQ2hlY2sgdGhhdCBhIGJhY2tncm91bmQgd29ya2VyIHN0YXJ0cyBpZiAic3RyZWFtaW5nIiBw YXJhbWV0ZXIgaXMKKwkjIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLiAgV2UgaGF2ZSB0byBsb29r IGZvciB0aGUgREVCVUcxIGxvZyBtZXNzYWdlcworCSMgYWJvdXQgdGhhdCwgc28gdGVtcG9yYXJp bHkgYnVtcCB1cCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJ JG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9n X21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJ fQorCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJP TExCQUNLcworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxewor CUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMyw1MDApIHMoaSk7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo NTAxLDEwMDApIHMoaSk7CisJU0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwxNTAwKSBzKGkp OworCVNBVkVQT0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDE1MDEsMjAwMCkgcyhpKTsKKwlST0xMQkFDSyBU TyBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDIwMDEsMjUwMCkgcyhpKTsKKwlST0xMQkFDSyBUTyBzMTsKKwlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDI1MDEsMzAwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczQ7CisJSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzMDAxLDM1MDAp IHMoaSk7CisJU0FWRVBPSU5UIHM1OworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMzUwMSw0MDAwKSBzKGkpOworCUNPTU1J VDsKKwl9KTsKKworCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53 YWl0X2Zvcl9sb2cocXIvXFtBcHBseSBCR1cgI1xkK1xdIHN0YXJ0ZWQvLCAwKTsKKwkJJG5vZGVf c3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9t ZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KKwor CSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwlteSAkcmVz dWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VM RUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEo MjAwMHwwKSwKKwkJJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9u IHN1YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKwkp OworCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggc3Vic2NyaWJlciByZWNl aXZpbmcgb3V0IG9mIG9yZGVyCisJIyBzdWJ0cmFuc2FjdGlvbiBST0xMQkFDS3MKKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDQwMDEsNDUwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLDU1MDApIHMo aSk7CisJU0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNjAwMSw2NTAwKSBzKGkpOworCVNBVkVQT0lO VCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDcwMDEsNzUwMCkgcyhpKTsKKwlSRUxFQVNFIHMyOworCUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo ODAwMSw4NTAwKSBzKGkpOworCVJPTExCQUNLIFRPIHMxOworCUNPTU1JVDsKKwl9KTsKKworCSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkkcmVzdWx0ID0K KwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMjUwMHww KSwKKwkJJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNj cmliZXInKTsKKworCSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIHN1YnNjcmli ZXIgcmVjZWl2aW5nIHJvbGxiYWNrCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdw b3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg4NTAxLDkwMDApIHMoaSk7CisJU0FWRVBP SU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoOTAwMSw5NTAwKSBzKGkpOworCVNBVkVQT0lOVCBzMjsKKwlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDk1MDEsMTAwMDApIHMoaSk7CisJUk9MTEJBQ0s7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJJHJlc3VsdCA9CisJICAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoYykgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDI1MDB8MCksICdjaGVjayBy b2xsYmFjayB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgQ2xlYW51cCB0aGUg dGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMikiKTsKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworfQorCiAjIENyZWF0ZSBwdWJsaXNoZXIgbm9kZQog bXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJs aXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dp Y2FsJyk7CkBAIC0zNiw2ICsxNDMsMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFi Iik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNo ZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHVi IFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC01Myw4MSArMTY0LDI1IEBAIG15ICRyZXN1 bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKIGlzKCRy ZXN1bHQsIHFxKDJ8MCksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3Jp YmVyJyk7CiAKLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCwgRE1MIGFu ZCBST0xMQkFDS3MKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7 Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMyw1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUw MSwxMDAwKSBzKGkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLDE1MDApIHMoaSk7Ci1T QVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDE1MDEsMjAwMCkgcyhpKTsKLVJPTExCQUNLIFRPIHMyOwot SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRl X3NlcmllcygyMDAxLDI1MDApIHMoaSk7Ci1ST0xMQkFDSyBUTyBzMTsKLUlOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjUwMSwz MDAwKSBzKGkpOwotU0FWRVBPSU5UIHM0OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzMDAxLDM1MDApIHMoaSk7Ci1TQVZF UE9JTlQgczU7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDM1MDEsNDAwMCkgcyhpKTsKLUNPTU1JVDsKLX0pOwotCi0kbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwordGVzdF9zdHJlYW1pbmco JG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7CiAKLSRyZXN1 bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNU IGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgyMDAw fDApLAotCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJz Y3JpYmVyIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBt b2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitt eSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VM RUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9 ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgogKTsKIAotIyBsYXJnZSAoc3Ry ZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggc3Vic2NyaWJlciByZWNlaXZpbmcgb3V0IG9mIG9yZGVy Ci0jIHN1YnRyYW5zYWN0aW9uIFJPTExCQUNLcwotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo Ci0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg0MDAxLDQ1MDApIHMoaSk7Ci1TQVZF UE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsNTUwMCkgcyhpKTsKLVNBVkVQT0lOVCBzMjsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNjAwMSw2NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg3MDAxLDc1MDApIHMo aSk7Ci1SRUxFQVNFIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg4MDAxLDg1MDApIHMoaSk7Ci1ST0xMQkFDSyBUTyBz MTsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFw cG5hbWUpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVS IFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsKIAotJHJl c3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxF Q1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDI1 MDB8MCksCi0JJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1 YnNjcmliZXInKTsKLQotIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggc3Vic2Ny aWJlciByZWNlaXZpbmcgcm9sbGJhY2sKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdw b3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoODUwMSw5MDAwKSBzKGkpOwotU0FWRVBPSU5U IHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdl bmVyYXRlX3Nlcmllcyg5MDAxLDk1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczI7Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDk1 MDEsMTAwMDApIHMoaSk7Ci1ST0xMQkFDSzsKLX0pOworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1 ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0 YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0 YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdh aXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsK IAotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3Vs dCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1Qg Y291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDI1MDB8 MCksICdjaGVjayByb2xsYmFjayB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKK3Rlc3Rf c3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEp OwogCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9h Ym9ydC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOV9zdHJlYW1fc3VieGFjdF9kZGxf YWJvcnQucGwKaW5kZXggZGJkMGZjYTRkMS4uYjI3NjA2MzcyMSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbAorKysgYi9z cmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsCkBA IC05LDYgKzksNjkgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBFbmNhcHN1bGF0ZSBhbGwg dGhlIGNvbW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciCisj IHBhcmFtZXRlciBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVh bWluZz1vbiBhbmQKKyMgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFt aW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUs ICRpc19wYXJhbGxlbCkgPSBAXzsKKworCSMgQ2hlY2sgdGhhdCBhIGJhY2tncm91bmQgd29ya2Vy IHN0YXJ0cyBpZiAic3RyZWFtaW5nIiBwYXJhbWV0ZXIgaXMKKwkjIHNwZWNpZmllZCBhcyAicGFy YWxsZWwiLiAgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNzYWdlcworCSMg YWJvdXQgdGhhdCwgc28gdGVtcG9yYXJpbHkgYnVtcCB1cCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlp ZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bv c3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9k ZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0 aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMyw1MDApIHMoaSk7CisJ QUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBjIElOVDsKKwlTQVZFUE9JTlQgczE7CisJ SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENP TFVNTiBkIElOVDsKKwlTQVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLDE1MDAp IHMoaSk7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBlIElOVDsKKwlTQVZFUE9J TlQgczM7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWks IDIqaSwgLTMqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLDIwMDApIHMoaSk7CisJQUxURVIg VEFCTEUgdGVzdF90YWIgRFJPUCBDT0xVTU4gYzsKKwlST0xMQkFDSyBUTyBzMTsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCBpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDUwMSwxMDAwKSBzKGkpOworCUNPTU1JVDsKKwl9KTsKKworCWlmICgkaXNfcGFyYWxsZWwp CisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvXFtBcHBseSBCR1cgI1xk K1xdIHN0YXJ0ZWQvLCAwKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3Rn cmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVf c3Vic2NyaWJlci0+cmVsb2FkOworCX0KKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRl c3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMTAwMHw1MDApLAorCQknY2hlY2sgcm9sbGJhY2sg dG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlciBhbmQgZXh0cmEgY29sdW1u cyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0 YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCURFTEVU RSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMik7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgRFJP UCBDT0xVTU4gYzsKKwl9KTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFw cG5hbWUpOworfQorCiAjIENyZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVy ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1 Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsx MDAsMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRF IFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1l ID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0 IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNV QlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNh dGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9 IG9uKSIKICk7CkBAIC01NCwzNSArMTIxLDI2IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MCksICdj aGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMgbGFyZ2Ug KHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCwgRE1MIGFuZCBST0xMQkFDS3MKLSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo Myw1MDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGMgSU5UOwotU0FW RVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwg LWkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0 X3RhYiBBREQgQ09MVU1OIGQgSU5UOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx MDAxLDE1MDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGUgSU5UOwot U0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSwgLWksIDIqaSwgLTMqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLDIwMDApIHMoaSk7Ci1B TFRFUiBUQUJMRSB0ZXN0X3RhYiBEUk9QIENPTFVNTiBjOwotUk9MTEJBQ0sgVE8gczE7Ci1JTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCBpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDUwMSwxMDAwKSBzKGkpOwotQ09NTUlUOwotfSk7Cit0ZXN0X3N0cmVhbWluZygkbm9k ZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKIAotJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNv dW50KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDEwMDB8NTAwKSwKLQknY2hl Y2sgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlciBhbmQg ZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxs ZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9 ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7CiAKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFt aW5nID0gcGFyYWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgn cG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0 aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJl YW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBh cHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisKK3Rlc3Rfc3Ry ZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwor CiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwogCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBsCmluZGV4IDdh Nzk3ZjM3YmEuLjBhNDE1MmQzYmUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAyMl90d29waGFzZV9jYXNjYWRlLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAy Ml90d29waGFzZV9jYXNjYWRlLnBsCkBAIC0xMSw2ICsxMSwyMDggQEAgdXNlIFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6 TW9yZTsKIAorIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNvbW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFy ZSByZWxhdGVkIHRvICJzdHJlYW1pbmciIHBhcmFtZXRlcgorIyBzbyB0aGUgc2FtZSBjb2RlIGNh biBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1vbiBhbmQgc3RyZWFtaW5nPXBhcmFsbGVs CisjIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX0EsICRub2RlX0Is ICRub2RlX0MsICRhcHBuYW1lX0IsICRhcHBuYW1lX0MsICRzdHJlYW1pbmdfbW9kZSkgPQorCSAg QF87CisKKwlteSAkb2xkcGlkX0IgPSAkbm9kZV9BLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3Jlcycs ICIKKwkJU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KKwkJV0hFUkUgYXBwbGlj YXRpb25fbmFtZSA9ICckYXBwbmFtZV9CJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiKTsKKwlt eSAkb2xkcGlkX0MgPSAkbm9kZV9CLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsICIKKwkJU0VM RUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KKwkJV0hFUkUgYXBwbGljYXRpb25fbmFt ZSA9ICckYXBwbmFtZV9DJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiKTsKKworCSMgU2V0dXAg bG9naWNhbCByZXBsaWNhdGlvbiBzdHJlYW1pbmcgbW9kZQorCisJJG5vZGVfQi0+c2FmZV9wc3Fs KAorCQkncG9zdGdyZXMnLCAiCisJCUFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViX0IKKwkJU0VU IChzdHJlYW1pbmcgPSAkc3RyZWFtaW5nX21vZGUpOyIpOworCSRub2RlX0MtPnNhZmVfcHNxbCgK KwkJJ3Bvc3RncmVzJywgIgorCQlBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9DCisJCVNFVCAo c3RyZWFtaW5nID0gJHN0cmVhbWluZ19tb2RlKSIpOworCisJIyBXYWl0IGZvciBzdWJzY3JpYmVy cyB0byBmaW5pc2ggaW5pdGlhbGl6YXRpb24KKworCSRub2RlX0EtPnBvbGxfcXVlcnlfdW50aWwo CisJCSdwb3N0Z3JlcycsICIKKwkJU0VMRUNUIHBpZCAhPSAkb2xkcGlkX0IgRlJPTSBwZ19zdGF0 X3JlcGxpY2F0aW9uCisJCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVfQicgQU5E IHN0YXRlID0gJ3N0cmVhbWluZyc7IgorCSkgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGlu ZyBmb3IgYXBwbHkgdG8gcmVzdGFydCI7CisJJG5vZGVfQi0+cG9sbF9xdWVyeV91bnRpbCgKKwkJ J3Bvc3RncmVzJywgIgorCQlTRUxFQ1QgcGlkICE9ICRvbGRwaWRfQyBGUk9NIHBnX3N0YXRfcmVw bGljYXRpb24KKwkJV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9DJyBBTkQgc3Rh dGUgPSAnc3RyZWFtaW5nJzsiCisJKSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZv ciBhcHBseSB0byByZXN0YXJ0IjsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KwkjIFRlc3QgMlBDIFBSRVBBUkUgLyBDT01NSVQgUFJFUEFSRUQuCisJIyAxLiBEYXRhIGlzIHN0 cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9uLgorCSMgMi4gVGhlbiBkbyBjb21taXQgcHJlcGFy ZWQuCisJIworCSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlcihz KSBhZnRlciB0aGUgY29tbWl0LgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwor CSMgQ2hlY2sgdGhhdCBhIGJhY2tncm91bmQgd29ya2VyIHN0YXJ0cyBpZiAic3RyZWFtaW5nIiBv cHRwYXJhbWV0ZXJpb24gaXMKKwkjIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLiAgV2UgaGF2ZSB0 byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNzYWdlcworCSMgYWJvdXQgdGhhdCwgc28gdGVt cG9yYXJpbHkgYnVtcCB1cCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJHN0cmVhbWluZ19tb2Rl IGVxICdwYXJhbGxlbCcpCisJeworCQkkbm9kZV9CLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5j b25mJywgImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVfQi0+cmVsb2FkOwor CisJCSRub2RlX0MtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAibG9nX21pbl9tZXNz YWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9DLT5yZWxvYWQ7CisJfQorCisJIyBJbnNlcnQsIHVw ZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkj IFRoZW4gMlBDIFBSRVBBUkUKKwkkbm9kZV9BLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7 CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFURSB0ZXN0X3RhYiBT RVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3RfdGFi IFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJl ZF90YWInO30pOworCisJaWYgKCRzdHJlYW1pbmdfbW9kZSBlcSAncGFyYWxsZWwnKQorCXsKKwkJ JG5vZGVfQi0+d2FpdF9mb3JfbG9nKHFyL1xbQXBwbHkgQkdXICNcZCtcXSBzdGFydGVkLywgMCk7 CisJCSRub2RlX0ItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAibG9nX21pbl9tZXNz YWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfQi0+cmVsb2FkOworCisJCSRub2RlX0MtPndhaXRf Zm9yX2xvZyhxci9cW0FwcGx5IEJHVyAjXGQrXF0gc3RhcnRlZC8sIDApOworCQkkbm9kZV9DLT5h cHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5n Iik7CisJCSRub2RlX0MtPnJlbG9hZDsKKwl9CisKKwkkbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7CisK KwkjIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVy KHMpCisJbXkgJHJlc3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQs IHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJl c3VsdCA9CisJICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBDJyk7CisKKwkjIDJQQyBDT01NSVQK Kwkkbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9w cmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9C KTsKKwkkbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOworCisJIyBjaGVjayB0 aGF0IHRyYW5zYWN0aW9uIHdhcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcihzKQorCSRyZXN1bHQg PSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgz MzM0fDMzMzR8MzMzNCksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBv biBzdWJzY3JpYmVyIEIsIGFuZCBleHRyYSBjb2x1bW5zIGhhdmUgbG9jYWwgZGVmYXVsdHMnCisJ KTsKKwkkcmVzdWx0ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1Qg Y291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMo JHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2 ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBDLCBhbmQgZXh0cmEgY29sdW1ucyBoYXZlIGxvY2Fs IGRlZmF1bHRzJworCSk7CisKKwkjIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRl ZCBvbiBzdWJzY3JpYmVyKHMpCisJJHJlc3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwor CWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmli ZXIgQicpOworCSRyZXN1bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0 LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyIEMnKTsKKwor CSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFRlc3QgMlBDIFBSRVBBUkUgd2l0 aCBhIG5lc3RlZCBST0xMQkFDSyBUTyBTQVZFUE9JTlQuCisJIyAwLiBDbGVhbnVwIGZyb20gcHJl dmlvdXMgdGVzdCBsZWF2aW5nIG9ubHkgMiByb3dzLgorCSMgMS4gSW5zZXJ0IG9uZSBtb3JlIHJv dy4KKwkjIDIuIFJlY29yZCBhIFNBVkVQT0lOVC4KKwkjIDMuIERhdGEgaXMgc3RyZWFtZWQgdXNp bmcgMlBDLgorCSMgNC4gRG8gcm9sbGJhY2sgdG8gU0FWRVBPSU5UIHByaW9yIHRvIHRoZSBzdHJl YW1lZCBpbnNlcnRzLgorCSMgNS4gVGhlbiBDT01NSVQgUFJFUEFSRUQuCisJIworCSMgRXhwZWN0 IGRhdGEgYWZ0ZXIgdGhlIFNBVkVQT0lOVCBpcyBhYm9ydGVkIGxlYXZpbmcgb25seSAzIHJvd3Mg KD0gMiBvcmlnaW5hbCArIDEgZnJvbSBzdGVwIDEpLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAo ZGVsZXRlIHdpbGwgYmUgcmVwbGljYXRlZCkKKwkkbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyAyUEMgUFJFUEFS RSB3aXRoIGEgbmVzdGVkIFJPTExCQUNLIFRPIFNBVkVQT0lOVAorCSRub2RlX0EtPnNhZmVfcHNx bCgKKwkJJ3Bvc3RncmVzJywgIgorCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFM VUVTICg5OTk5LCAnZm9vYmFyJyk7CisJCVNBVkVQT0lOVCBzcF9pbm5lcjsKKwkJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJ CVJPTExCQUNLIFRPIFNBVkVQT0lOVCBzcF9pbm5lcjsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAn b3V0ZXInOworCQkiKTsKKworCSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7 CisJJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKworCSMgY2hlY2sgdGhl IHRyYW5zYWN0aW9uIHN0YXRlIHByZXBhcmVkIG9uIHN1YnNjcmliZXIocykKKwkkcmVzdWx0ID0K KwkgICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZS T00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlv biBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0ID0KKwkgICRub2RlX0Mt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFy ZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJl ZCBvbiBzdWJzY3JpYmVyIEMnKTsKKworCSMgMlBDIENPTU1JVAorCSRub2RlX0EtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ09NTUlUIFBSRVBBUkVEICdvdXRlcic7Iik7CisKKwkkbm9kZV9BLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWVfQyk7CisKKwkjIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRlZCBv biBzdWJzY3JpYmVyCisJJHJlc3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRy ZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgZW5kZWQgb24gc3Vic2NyaWJlciBCJyk7CisJ JHJlc3VsdCA9CisJICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAn dHJhbnNhY3Rpb24gaXMgZW5kZWQgb24gc3Vic2NyaWJlciBDJyk7CisKKwkjIGNoZWNrIGluc2Vy dHMgYXJlIHZpc2libGUgYXQgc3Vic2NyaWJlcihzKS4KKwkjIEFsbCB0aGUgc3RyZWFtZWQgZGF0 YSAocHJpb3IgdG8gdGhlIFNBVkVQT0lOVCkgc2hvdWxkIGJlIHJvbGxlZCBiYWNrLgorCSMgKDk5 OTksICdmb29iYXInKSBzaG91bGQgYmUgY29tbWl0dGVkLgorCSRyZXN1bHQgPSAkbm9kZV9CLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiIHdo ZXJlIGIgPSAnZm9vYmFyJzsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ1Jvd3MgY29tbWl0dGVk IGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQicpOworCSRyZXN1bHQgPQorCSAgJG5vZGVfQi0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYjsiKTsK KwlpcygkcmVzdWx0LCBxcSgzKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNj cmliZXIgQicpOworCSRyZXN1bHQgPSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiIHdoZXJlIGIgPSAnZm9vYmFyJzsiKTsKKwlp cygkcmVzdWx0LCBxcSgxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmli ZXIgQycpOworCSRyZXN1bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYjsiKTsKKwlpcygkcmVzdWx0LCBxcSgzKSwgJ1Jv d3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQycpOworCisJIyBDbGVhbnVw IHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWVfQik7CisJJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKK30K KwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBTZXR1cCBhIGNhc2NhZGUgb2Yg cHViL3N1YiBub2Rlcy4KICMgbm9kZV9BIC0+IG5vZGVfQiAtPiBub2RlX0MKQEAgLTI2MCwxNjAg KzQ2MiwxNSBAQCBpcygkcmVzdWx0LCBxcSgyMSksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2Vu dCBvbiBzdWJzY3JpYmVyIEMnKTsKICMgMlBDICsgU1RSRUFNSU5HIFRFU1RTCiAjIC0tLS0tLS0t LS0tLS0tLS0tLS0tLQogCi1teSAkb2xkcGlkX0IgPSAkbm9kZV9BLT5zYWZlX3BzcWwoCi0JJ3Bv c3RncmVzJywgIgotCVNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCi0JV0hFUkUg YXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9CJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsi KTsKLW15ICRvbGRwaWRfQyA9ICRub2RlX0ItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCAiCi0J U0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KLQlXSEVSRSBhcHBsaWNhdGlvbl9u YW1lID0gJyRhcHBuYW1lX0MnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIpOwotCi0jIFNldHVw IGxvZ2ljYWwgcmVwbGljYXRpb24gKHN0cmVhbWluZyA9IG9uKQotCi0kbm9kZV9CLT5zYWZlX3Bz cWwoCi0JJ3Bvc3RncmVzJywgIgotCUFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViX0IKLQlTRVQg KHN0cmVhbWluZyA9IG9uKTsiKTsKLSRub2RlX0MtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCAi Ci0JQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWJfQwotCVNFVCAoc3RyZWFtaW5nID0gb24pIik7 Ci0KLSMgV2FpdCBmb3Igc3Vic2NyaWJlcnMgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uCi0KLSRu b2RlX0EtPnBvbGxfcXVlcnlfdW50aWwoCi0JJ3Bvc3RncmVzJywgIgotCVNFTEVDVCBwaWQgIT0g JG9sZHBpZF9CIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbgotCVdIRVJFIGFwcGxpY2F0aW9uX25h bWUgPSAnJGFwcG5hbWVfQicgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgotKSBvciBkaWUgIlRp bWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IjsKLSRub2RlX0ItPnBv bGxfcXVlcnlfdW50aWwoCi0JJ3Bvc3RncmVzJywgIgotCVNFTEVDVCBwaWQgIT0gJG9sZHBpZF9D IEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbgotCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFw cG5hbWVfQycgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgotKSBvciBkaWUgIlRpbWVkIG91dCB3 aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IjsKLQotIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwotIyBUZXN0IDJQQyBQUkVQQVJFIC8gQ09NTUlUIFBSRVBBUkVELgotIyAx LiBEYXRhIGlzIHN0cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9uLgotIyAyLiBUaGVuIGRvIGNv bW1pdCBwcmVwYXJlZC4KLSMKLSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24gc3Vi c2NyaWJlcihzKSBhZnRlciB0aGUgY29tbWl0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwotCi0jIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVk IHRoZSA2NGtCIGxpbWl0LgotIyBUaGVuIDJQQyBQUkVQQVJFCi0kbm9kZV9BLT5zYWZlX3BzcWwo Ci0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBE QVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAn dGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0kbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lX0IpOwotJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29u JworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3Rfc3RyZWFtaW5nKCRub2Rl X0EsICRub2RlX0IsICRub2RlX0MsICRhcHBuYW1lX0IsICRhcHBuYW1lX0MsICdvbicpOwogCi0j IGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyKHMp Ci0kcmVzdWx0ID0KLSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0KLSAgJG5v ZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVw YXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFy ZWQgb24gc3Vic2NyaWJlciBDJyk7Ci0KLSMgMlBDIENPTU1JVAotJG5vZGVfQS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQot JG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRfZm9y X2NhdGNodXAoJGFwcG5hbWVfQyk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiB3YXMgY29t bWl0dGVkIG9uIHN1YnNjcmliZXIocykKLSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJP TSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLAotCSdSb3dzIGlu c2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyIEIsIGFuZCBleHRyYSBj b2x1bW5zIGhhdmUgbG9jYWwgZGVmYXVsdHMnCi0pOwotJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVf cHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0g OTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCi0J J1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQywgYW5k IGV4dHJhIGNvbHVtbnMgaGF2ZSBsb2NhbCBkZWZhdWx0cycKLSk7Ci0KLSMgY2hlY2sgdGhlIHRy YW5zYWN0aW9uIHN0YXRlIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIocykKLSRyZXN1bHQgPQotICAk bm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3By ZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21t aXR0ZWQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0KLSAgJG5vZGVfQy0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsK LWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmli ZXIgQycpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRlc3QgMlBDIFBS RVBBUkUgd2l0aCBhIG5lc3RlZCBST0xMQkFDSyBUTyBTQVZFUE9JTlQuCi0jIDAuIENsZWFudXAg ZnJvbSBwcmV2aW91cyB0ZXN0IGxlYXZpbmcgb25seSAyIHJvd3MuCi0jIDEuIEluc2VydCBvbmUg bW9yZSByb3cuCi0jIDIuIFJlY29yZCBhIFNBVkVQT0lOVC4KLSMgMy4gRGF0YSBpcyBzdHJlYW1l ZCB1c2luZyAyUEMuCi0jIDQuIERvIHJvbGxiYWNrIHRvIFNBVkVQT0lOVCBwcmlvciB0byB0aGUg c3RyZWFtZWQgaW5zZXJ0cy4KLSMgNS4gVGhlbiBDT01NSVQgUFJFUEFSRUQuCi0jCi0jIEV4cGVj dCBkYXRhIGFmdGVyIHRoZSBTQVZFUE9JTlQgaXMgYWJvcnRlZCBsZWF2aW5nIG9ubHkgMyByb3dz ICg9IDIgb3JpZ2luYWwgKyAxIGZyb20gc3RlcCAxKS4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKLQotIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzIChk ZWxldGUgd2lsbCBiZSByZXBsaWNhdGVkKQotJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyAyUEMgUFJFUEFSRSB3 aXRoIGEgbmVzdGVkIFJPTExCQUNLIFRPIFNBVkVQT0lOVAotJG5vZGVfQS0+c2FmZV9wc3FsKAot CSdwb3N0Z3JlcycsICIKLQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5 OTksICdmb29iYXInKTsKLQlTQVZFUE9JTlQgc3BfaW5uZXI7Ci0JSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBz KGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7 Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVJPTExCQUNLIFRP IFNBVkVQT0lOVCBzcF9pbm5lcjsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICdvdXRlcic7Ci0JIik7 Ci0KLSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7Ci0kbm9kZV9CLT53YWl0 X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOwotCi0jIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0 ZSBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyKHMpCi0kcmVzdWx0ID0KLSAgJG5vZGVfQi0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsi KTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2Ny aWJlciBCJyk7Ci0kcmVzdWx0ID0KLSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFx KDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBDJyk7Ci0KLSMgMlBD IENPTU1JVAotJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQg J291dGVyJzsiKTsKLQotJG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRu b2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7Ci0KLSMgY2hlY2sgdGhlIHRyYW5z YWN0aW9uIHN0YXRlIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPQotICAkbm9kZV9C LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVk X3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBlbmRlZCBvbiBz dWJzY3JpYmVyIEInKTsKLSRyZXN1bHQgPQotICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3Vs dCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyIEMnKTsKLQotIyBj aGVjayBpbnNlcnRzIGFyZSB2aXNpYmxlIGF0IHN1YnNjcmliZXIocykuCi0jIEFsbCB0aGUgc3Ry ZWFtZWQgZGF0YSAocHJpb3IgdG8gdGhlIFNBVkVQT0lOVCkgc2hvdWxkIGJlIHJvbGxlZCBiYWNr LgotIyAoOTk5OSwgJ2Zvb2JhcicpIHNob3VsZCBiZSBjb21taXR0ZWQuCi0kcmVzdWx0ID0gJG5v ZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3Rf dGFiIHdoZXJlIGIgPSAnZm9vYmFyJzsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAnUm93cyBjb21t aXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0gJG5vZGVfQi0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYjsiKTsK LWlzKCRyZXN1bHQsIHFxKDMpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2Ny aWJlciBCJyk7Ci0kcmVzdWx0ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNF TEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiIHdoZXJlIGIgPSAnZm9vYmFyJzsiKTsKLWlzKCRy ZXN1bHQsIHFxKDEpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBD Jyk7Ci0kcmVzdWx0ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgRlJPTSB0ZXN0X3RhYjsiKTsKLWlzKCRyZXN1bHQsIHFxKDMpLCAnUm93cyBjb21taXR0 ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBDJyk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcK KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit0ZXN0X3N0cmVhbWluZygk bm9kZV9BLCAkbm9kZV9CLCAkbm9kZV9DLCAkYXBwbmFtZV9CLCAkYXBwbmFtZV9DLCAncGFyYWxs ZWwnKTsKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBjaGVjayBhbGwgdGhl IGNsZWFudXAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190d29waGFz ZV9zdHJlYW0ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFt LnBsCmluZGV4IGQ4NDc1ZDI1YTQuLmI4OTQxNGFiNzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAyM190d29waGFzZV9zdHJlYW0ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMDIzX3R3b3BoYXNlX3N0cmVhbS5wbApAQCAtOCw2ICs4LDI2NiBAQCB1c2UgUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVz ZSBUZXN0OjpNb3JlOwogCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qgc3RlcHMg d2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0cmVhbWluZyIKKyMgcGFyYW1ldGVyIHNvIHRoZSBzYW1l IGNvZGUgY2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZAorIyBzdHJlYW1p bmc9cGFyYWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5vZGVfcHVi bGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVsKSA9IEBfOwor CisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSAv IENPTU1JVCBQUkVQQVJFRC4KKwkjIDEuIERhdGEgaXMgc3RyZWFtZWQgYXMgYSAyUEMgdHJhbnNh Y3Rpb24uCisJIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJlZC4KKwkjCisJIyBFeHBlY3QgYWxs IGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4K KwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIENoZWNrIHRoYXQgYSBiYWNr Z3JvdW5kIHdvcmtlciBzdGFydHMgaWYgInN0cmVhbWluZyIgcGFyYW1ldGVyIGlzCisJIyBzcGVj aWZpZWQgYXMgInBhcmFsbGVsIi4gIFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERFQlVHMSBsb2cg bWVzc2FnZXMKKwkjIGFib3V0IHRoYXQsIHNvIHRlbXBvcmFyaWx5IGJ1bXAgdXAgdGhlIGxvZyB2 ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFw cGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1 ZzEiKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KKworCSMgY2hlY2sgdGhhdCAy UEMgZ2V0cyByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIKKwkjIEluc2VydCwgdXBkYXRlIGFuZCBk ZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJ CVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCWlmICgkaXNf cGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvXFtBcHBs eSBCR1cgI1xkK1xdIHN0YXJ0ZWQvLCAwKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2Nv bmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsK KwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KKworCSRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMg aW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCW15ICRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBn X3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21t aXR0ZWQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ09NTUlU IFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlz IGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQo ZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0 KSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIs IGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKwkkcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3Ry YW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisJIyBUZXN0IDJQQyBQUkVQQVJFIC8gUk9MTEJBQ0sgUFJFUEFS RUQuCisJIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBs aWNhdGVkIG9uIHN1YnNjcmliZXIuCisJIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4K KwkjIDMuIERvIHJvbGxiYWNrIHByZXBhcmVkLgorCSMKKwkjIEV4cGVjdCBkYXRhIHJvbGxzIGJh Y2sgbGVhdmluZyBvbmx5IHRoZSBvcmlnaW5hbCAyIHJvd3MuCisJIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiBy b3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBU aGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2 NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBx eworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIg U0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3Rh YiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFy ZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24g c3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlz KCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicp OworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCisJJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVk X3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcgor CSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK KwlpcygkcmVzdWx0LCBxcSgyfDJ8MiksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBhcmUgcm9s bGVkIGJhY2ssIGxlYXZpbmcgb25seSB0aGUgb3JpZ2luYWwgMiByb3dzJworCSk7CisKKwkkcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1Qg Y291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwg J3RyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworCSMgQ2hlY2sgdGhhdCAyUEMgQ09NTUlUIFBSRVBBUkVEIGlz IGRlY29kZWQgcHJvcGVybHkgb24gY3Jhc2ggcmVzdGFydC4KKwkjIDEuIGluc2VydCwgdXBkYXRl IGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSMgMi4g VGhlbiBzZXJ2ZXIgY3Jhc2hlcyBiZWZvcmUgdGhlIDJQQyB0cmFuc2FjdGlvbiBpcyBjb21taXR0 ZWQuCisJIyAzLiBBZnRlciBzZXJ2ZXJzIGFyZSByZXN0YXJ0ZWQgdGhlIHBlbmRpbmcgdHJhbnNh Y3Rpb24gaXMgY29tbWl0dGVkLgorCSMKKwkjIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVk IG9uIHN1YnNjcmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgorCSMgTm90ZTogYm90aCBwdWJs aXNoZXIgYW5kIHN1YnNjcmliZXIgZG8gY3Jhc2gvcmVzdGFydC4KKwkjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3Rn cmVzJywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKKwkJVVBEQVRFIHRl c3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00g dGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0 X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9zdWJzY3JpYmVyLT5zdG9wKCdpbW1lZGlhdGUn KTsKKwkkbm9kZV9wdWJsaXNoZXItPnN0b3AoJ2ltbWVkaWF0ZScpOworCisJJG5vZGVfcHVibGlz aGVyLT5zdGFydDsKKwkkbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworCSMgY29tbWl0IHBvc3Qg dGhlIHJlc3RhcnQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQki Q09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisJJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgaW5zZXJ0cyBhcmUgdmlz aWJsZQorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90 YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCisJCSdSb3dzIGluc2VydGVk IGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBj b250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisJIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9yZSBST0xMQkFD SyBQUkVQQVJFRC4KKwkjIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2gg YXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNp bmcgMlBDLgorCSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVy IHRoZSBQUkVQQVJFLgorCSMgNC4gVGhlbiBkbyBhIFJPTExCQUNLIFBSRVBBUkVELgorCSMKKwkj IEV4cGVjdCB0aGUgMlBDIGRhdGEgcm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgMyByb3dzIG9uIHRo ZSBzdWJzY3JpYmVyCisJIyAodGhlIG9yaWdpbmFsIDIgKyBpbnNlcnRlZCAxKS4KKwkjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhj ZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKKwkkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7 Iik7CisKKwkjIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBl eGNlZWQgdGhlIDY0a0IgbGltaXQuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdw b3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFU RSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAn dGVzdF9wcmVwYXJlZF90YWInO30pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJl ZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFj dHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBz dWJzY3JpYmVyJyk7CisKKwkjIEluc2VydCBhIGRpZmZlcmVudCByZWNvcmQgKG5vdyB3ZSBhcmUg b3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQorCSMgTm90ZTogdGhlIDJQQyB0cmFuc2Fj dGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJlIHRoaXMgaW5zZXJ0IGlzIGZv ciBhIHNlcGFyYXRlIHByaW1hcnkga2V5CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTksICdmb29iYXIn KSIpOworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCisJJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBh cmVkX3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWUpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJl ciwKKwkjIGJ1dCB0aGUgZXh0cmEgSU5TRVJUIG91dHNpZGUgb2YgdGhlIDJQQyBzdGlsbCB3YXMg cmVwbGljYXRlZAorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00g dGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzfDN8MyksCisJCSdjaGVjayB0aGUgb3V0c2lk ZSBpbnNlcnQgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CisKKwkkcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJP TSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9u IGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworCSMgRG8gSU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUgQ09NTUlU IFBSRVBBUkVELgorCSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBh cmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgorCSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2lu ZyAyUEMuCisJIyAzLiBBIHNpbmdsZSByb3cgSU5TRVJUIGlzIGRvbmUgd2hpY2ggaXMgYWZ0ZXIg dGhlIFBSRVBBUkUuCisJIyA0LiBUaGVuIGRvIGEgQ09NTUlUIFBSRVBBUkVELgorCSMKKwkjIEV4 cGVjdCAyUEMgZGF0YSArIHRoZSBleHRyYSByb3cgYXJlIG9uIHRoZSBzdWJzY3JpYmVyCisJIyAo dGhlIDMzMzQgKyBpbnNlcnRlZCAxID0gMzMzNSkuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3 aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBUaGVuIGlu c2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxp bWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlC RUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIg PSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVS RSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFi Jzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisK KwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2Ny aWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1 bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJ IyBJbnNlcnQgYSBkaWZmZXJlbnQgcmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQ QyB0cmFuc2FjdGlvbikKKwkjIE5vdGU6IHRoZSAyUEMgdHJhbnNhY3Rpb24gc3RpbGwgaG9sZHMg cm93IGxvY2tzIHNvIG1ha2Ugc3VyZSB0aGlzIGluc2VydCBpcyBmb3IgYSBzZXBhcmFyZSBwcmlt YXJ5IGtleQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJJTlNF UlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTk5LCAnZm9vYmFyJykiKTsKKworCSMgMlBDIHRy YW5zYWN0aW9uIGdldHMgY29tbWl0dGVkCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCisJ JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sg dGhhdCB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgq KSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0 LCBxcSgzMzM1fDMzMzV8MzMzNSksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyAoYXMgd2VsbCBh cyBvdXRzaWRlIGluc2VydCkgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJh IGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKwkpOworCisJJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZS T00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlv biBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRh dGEKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZS T00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lKTsKK30KKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwog IyBTZXR1cAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtNDgsNiArMzA4LDEw IEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQVUJM SUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9ICd0 YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2lu ZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwog JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAogCSdwb3N0Z3JlcycsICIKIAlDUkVBVEUgU1VC U0NSSVBUSU9OIHRhcF9zdWIKQEAgLTcwLDIzNiArMzM0LDMwIEBAIG15ICR0d29waGFzZV9xdWVy eSA9CiAkbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICR0d29w aGFzZV9xdWVyeSkKICAgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Igc3Vic2Ny aWJlciB0byBlbmFibGUgdHdvcGhhc2UiOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiAjIENoZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIKLSMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIG15ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291 bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMnwyfDIpLCAnY2hl Y2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRlc3QgMlBDIFBSRVBBUkUgLyBDT01NSVQgUFJFUEFS RUQuCi0jIDEuIERhdGEgaXMgc3RyZWFtZWQgYXMgYSAyUEMgdHJhbnNhY3Rpb24uCi0jIDIuIFRo ZW4gZG8gY29tbWl0IHByZXBhcmVkLgotIwotIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRl ZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KLSMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKLQotIyBjaGVjayB0aGF0IDJQQyBnZXRzIHJlcGxpY2F0ZWQgdG8gc3Vi c2NyaWJlcgotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2Vl ZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3Jl cycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3Rh YiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90 YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFy ZWRfdGFiJzt9KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1 YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVz dWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKLQot IyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCi0JIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIp OwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNo ZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50 KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3Vs dCwgcXEoMzMzNHwzMzM0fDMzMzQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1p dHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1 bHRzJwotKTsKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVz dWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7Ci0K LSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGVzdCAyUEMgUFJFUEFSRSAvIFJP TExCQUNLIFBSRVBBUkVELgotIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdo aWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIuCi0jIDIuIERhdGEgaXMgc3RyZWFtZWQg dXNpbmcgMlBDLgotIyAzLiBEbyByb2xsYmFjayBwcmVwYXJlZC4KLSMKLSMgRXhwZWN0IGRhdGEg cm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgdGhlIG9yaWdpbmFsIDIgcm93cy4KLSMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBm b3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7Ci0KLSMg VGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUg NjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7 Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQg YiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hF UkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFi Jzt9KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQot IyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmli ZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQki U0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBx cSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKLQotIyAyUEMg dHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAotCSJST0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0k bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRo YXQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDJ8 MnwyKSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgYXJlIHJvbGxlZCBiYWNrLCBsZWF2aW5nIG9u bHkgdGhlIG9yaWdpbmFsIDIgcm93cycpOwotCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVk X3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9u IHN1YnNjcmliZXInKTsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDaGVj ayB0aGF0IDJQQyBDT01NSVQgUFJFUEFSRUQgaXMgZGVjb2RlZCBwcm9wZXJseSBvbiBjcmFzaCBy ZXN0YXJ0LgotIyAxLiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4 Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSMgMi4gVGhlbiBzZXJ2ZXIgY3Jhc2hlcyBiZWZvcmUgdGhl IDJQQyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCi0jIDMuIEFmdGVyIHNlcnZlcnMgYXJlIHJl c3RhcnRlZCB0aGUgcGVuZGluZyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCi0jCi0jIEV4cGVj dCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIgc2lkZSBhZnRlciB0aGUgY29t bWl0LgotIyBOb3RlOiBib3RoIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBkbyBjcmFzaC9yZXN0 YXJ0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0kbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkg cyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAw OwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRS QU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7Ci0KLSRub2RlX3N1YnNjcmliZXItPnN0 b3AoJ2ltbWVkaWF0ZScpOwotJG5vZGVfcHVibGlzaGVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKLQot JG5vZGVfcHVibGlzaGVyLT5zdGFydDsKLSRub2RlX3N1YnNjcmliZXItPnN0YXJ0OwotCi0jIGNv bW1pdCBwb3N0IHRoZSByZXN0YXJ0Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAotCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLSRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cit0ZXN0X3N0cmVhbWluZygkbm9k ZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKIAotIyBjaGVjayBp bnNlcnRzIGFyZSB2aXNpYmxlCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkp IEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwKLQknUm93 cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJh IGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdf c3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQg c3RhdGUgPSAnc3RyZWFtaW5nJzsiCiApOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCi0jIERvIElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIFJPTExCQUNLIFBS RVBBUkVELgotIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSBy ZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIuCi0jIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBD LgotIyAzLiBBIHNpbmdsZSByb3cgSU5TRVJUIGlzIGRvbmUgd2hpY2ggaXMgYWZ0ZXIgdGhlIFBS RVBBUkUuCi0jIDQuIFRoZW4gZG8gYSBST0xMQkFDSyBQUkVQQVJFRC4KLSMKLSMgRXhwZWN0IHRo ZSAyUEMgZGF0YSByb2xscyBiYWNrIGxlYXZpbmcgb25seSAzIHJvd3Mgb24gdGhlIHN1YnNjcmli ZXIKLSMgKHRoZSBvcmlnaW5hbCAyICsgaW5zZXJ0ZWQgMSkuCi0jIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCi0KLSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93 cyAod2lsbCBiZSByZXBsaWNhdGVkKQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5z ZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGlt aXQuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotCUJFR0lO OwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUo YikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChh LDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7Ci0K LSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sg dGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCi0kcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0 cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgSW5zZXJ0IGEgZGlm ZmVyZW50IHJlY29yZCAobm93IHdlIGFyZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rpb24p Ci0jIE5vdGU6IHRoZSAyUEMgdHJhbnNhY3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNvIG1h a2Ugc3VyZSB0aGlzIGluc2VydCBpcyBmb3IgYSBzZXBhcmF0ZSBwcmltYXJ5IGtleQotJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiSU5TRVJUIElOVE8gdGVzdF90YWIg VkFMVUVTICg5OTk5OSwgJ2Zvb2JhcicpIik7Ci0KLSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgYWJv cnRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiUk9MTEJBQ0sg UFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFi b3J0ZWQgb24gc3Vic2NyaWJlciwKLSMgYnV0IHRoZSBleHRyYSBJTlNFUlQgb3V0c2lkZSBvZiB0 aGUgMlBDIHN0aWxsIHdhcyByZXBsaWNhdGVkCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50 KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDN8M3wzKSwgJ2NoZWNr IHRoZSBvdXRzaWRlIGluc2VydCB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKLQotJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJh bnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKLSMgRG8gSU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUg Q09NTUlUIFBSRVBBUkVELgotIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdo aWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIuCi0jIDIuIERhdGEgaXMgc3RyZWFtZWQg dXNpbmcgMlBDLgotIyAzLiBBIHNpbmdsZSByb3cgSU5TRVJUIGlzIGRvbmUgd2hpY2ggaXMgYWZ0 ZXIgdGhlIFBSRVBBUkUuCi0jIDQuIFRoZW4gZG8gYSBDT01NSVQgUFJFUEFSRUQuCi0jCi0jIEV4 cGVjdCAyUEMgZGF0YSArIHRoZSBleHRyYSByb3cgYXJlIG9uIHRoZSBzdWJzY3JpYmVyCi0jICh0 aGUgMzMzNCArIGluc2VydGVkIDEgPSAzMzM1KS4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKLQotIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxs IGJlIHJlcGxpY2F0ZWQpCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7Ci0KLSMgVGhlbiBpbnNlcnQsIHVw ZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5T RVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVS RSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAw OwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKLQotJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRy YW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0 aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKLQotIyBJbnNlcnQgYSBkaWZmZXJlbnQg cmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKLSMgTm90 ZTogdGhlIDJQQyB0cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJl IHRoaXMgaW5zZXJ0IGlzIGZvciBhIHNlcGFyYXJlIHByaW1hcnkga2V5Ci0kbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDk5OTk5LCAnZm9vYmFyJykiKTsKLQotIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQK LSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNPTU1JVCBQUkVQQVJF RCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWUpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCki KTsKIAotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVy Ci0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK LWlzKCRyZXN1bHQsIHFxKDMzMzV8MzMzNXwzMzM1KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMg KGFzIHdlbGwgYXMgb3V0c2lkZSBpbnNlcnQpIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIs IGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCi0pOworJG5vZGVfcHVi bGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9s ZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICck YXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9yIGRpZQorICAiVGlt ZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcg U1VCU0NSSVBUSU9OIjsKIAotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsK LWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmli ZXInKTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwg JGFwcG5hbWUsIDEpOwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIGNoZWNr IGFsbCB0aGUgY2xlYW51cAotLSAKMi4yMy4wLndpbmRvd3MuMQoK --_005_OS3PR01MB62758A6AAED27B3A848CEB7A9E8F9OS3PR01MB6275jpnp_ Content-Type: application/octet-stream; name="v18-0003-Add-some-checks-before-using-apply-background-wo.patch" Content-Description: v18-0003-Add-some-checks-before-using-apply-background-wo.patch Content-Disposition: attachment; filename="v18-0003-Add-some-checks-before-using-apply-background-wo.patch"; size=38751; creation-date="Tue, 19 Jul 2022 02:25:00 GMT"; modification-date="Tue, 19 Jul 2022 02:28:41 GMT" Content-Transfer-Encoding: base64 RnJvbSAxNzUxNjkyOTQ1ZWI3MmVjMzMyZTc5Y2NmMjhjODgzODBhYzhlMmFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB3YW5ndyA8d2FuZ3cuZm5zdEBmdWppdHN1LmNvbT4KRGF0ZTog VHVlLCAxNCBKdW4gMjAyMiAxMToyMzo1MiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjE4IDMvNF0g QWRkIHNvbWUgY2hlY2tzIGJlZm9yZSB1c2luZyBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlcgogdG8g YXBwbHkgY2hhbmdlcy4KCnN0cmVhbWluZz1wYXJhbGxlbCBtb2RlIGhhcyB0d28gcmVxdWlyZW1l bnRzOgoxKSBUaGUgdW5pcXVlIGNvbHVtbiBpbiB0aGUgcmVsYXRpb24gb24gdGhlIHN1YnNjcmli ZXItc2lkZSBzaG91bGQgYWxzbyBiZSB0aGUKdW5pcXVlIGNvbHVtbiBvbiB0aGUgcHVibGlzaGVy LXNpZGU7CjIpIFRoZXJlIGNhbm5vdCBiZSBhbnkgbm9uLWltbXV0YWJsZSBmdW5jdGlvbnMgdXNl ZCBieSB0aGUgc3Vic2NyaWJlci1zaWRlCnJlcGxpY2F0ZWQgdGFibGUuIExvb2sgZm9yIGZ1bmN0 aW9ucyBpbiB0aGUgZm9sbG93aW5nIHBsYWNlczoKKiBhLiBUcmlnZ2VyIGZ1bmN0aW9ucwoqIGIu IENvbHVtbiBkZWZhdWx0IHZhbHVlIGV4cHJlc3Npb25zIGFuZCBkb21haW4gY29uc3RyYWludHMK KiBjLiBDb25zdHJhaW50IGV4cHJlc3Npb25zCiogZC4gRm9yZWlnbiBrZXlzCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwgICAgIHwgICA0ICsKIC4uLi9yZXBs aWNhdGlvbi9sb2dpY2FsL2FwcGx5Ymd3b3JrZXIuYyAgICAgICB8ICA0NCArKwogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAgIHwgIDg4ICsrKy0KIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyAgICB8IDIwMSArKysrKysrKysKIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgICB8ICAgMSArCiBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgfCAgMjMgKy0KIHNyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3R5cGNhY2hlLmMgICAgICAgICAgICB8ICAxNyArCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmggICAgIHwgIDE1ICsKIHNyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91 dGlscy90eXBjYWNoZS5oICAgICAgICAgICAgICAgICAgfCAgIDIgKwogLi4uL3N1YnNjcmlwdGlv bi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBsICAgIHwgICA2ICsKIC4uLi9zdWJzY3JpcHRpb24v dC8wMzJfc3RyZWFtaW5nX2FwcGx5LnBsICAgICB8IDM4MCArKysrKysrKysrKysrKysrKysKIHNy Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiAxNCBm aWxlcyBjaGFuZ2VkLCA3NzUgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfc3RyZWFtaW5nX2FwcGx5LnBs CgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbAppbmRleCA3MWRkNGFj YTgxLi5iZmQxODk1MDg3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJz Y3JpcHRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24u c2dtbApAQCAtMjQwLDYgKzI0MCwxMCBAQCBDUkVBVEUgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5zdWJzY3JpcHRpb25fbmFtZTwvcmVwbGFjZWFibAogICAgICAg ICAgIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4gTm90ZSB0aGF0IGlmIGFuIGVycm9yIGhhcHBl bnMgd2hlbgogICAgICAgICAgIGFwcGx5aW5nIGNoYW5nZXMgaW4gYSBiYWNrZ3JvdW5kIHdvcmtl ciwgdGhlIGZpbmlzaCBMU04gb2YgdGhlCiAgICAgICAgICAgcmVtb3RlIHRyYW5zYWN0aW9uIG1p Z2h0IG5vdCBiZSByZXBvcnRlZCBpbiB0aGUgc2VydmVyIGxvZy4KKyAgICAgICAgICA8bGl0ZXJh bD5wYXJhbGxlbDwvbGl0ZXJhbD4gbW9kZSBoYXMgdHdvIHJlcXVpcmVtZW50czogMSkgdGhlIHVu aXF1ZQorICAgICAgICAgIGNvbHVtbiBpbiB0aGUgcmVsYXRpb24gb24gdGhlIHN1YnNjcmliZXIt c2lkZSBzaG91bGQgYWxzbyBiZSB0aGUKKyAgICAgICAgICB1bmlxdWUgY29sdW1uIG9uIHRoZSBw dWJsaXNoZXItc2lkZTsgMikgdGhlcmUgY2Fubm90IGJlIGFueQorICAgICAgICAgIG5vbi1pbW11 dGFibGUgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIHN1YnNjcmliZXItc2lkZSByZXBsaWNhdGVkIHRh YmxlLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFy bGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9h cHBseWJnd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5Ymd3 b3JrZXIuYwppbmRleCBhYTIyMjQ5MGEwLi44OWM3MTJmNzg1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5Ymd3b3JrZXIuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5Ymd3b3JrZXIuYwpAQCAtODAwLDMgKzgwMCw0NyBA QCBhcHBseV9iZ3dvcmtlcl9zdWJ4YWN0X2luZm9fYWRkKFRyYW5zYWN0aW9uSWQgY3VycmVudF94 aWQpCiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwogCX0KIH0KKworLyoKKyAqIENo ZWNrIGlmIGNoYW5nZXMgb24gdGhpcyByZWxhdGlvbiBjYW4gYmUgYXBwbGllZCBieSBhbiBhcHBs eSBiYWNrZ3JvdW5kCisgKiB3b3JrZXIuCisgKgorICogQWx0aG91Z2ggdGhlIGNvbW1pdCBvcmRl ciBpcyBtYWludGFpbmVkIG9ubHkgYWxsb3dpbmcgb25lIHByb2Nlc3MgdG8gY29tbWl0CisgKiBh dCBhIHRpbWUsIHRoZSBhY2Nlc3Mgb3JkZXIgdG8gdGhlIHJlbGF0aW9uIGhhcyBjaGFuZ2VkLiBU aGlzIGNvdWxkIGNhdXNlCisgKiB1bmV4cGVjdGVkIHByb2JsZW1zIGlmIHRoZSB1bmlxdWUgY29s dW1uIG9uIHRoZSByZXBsaWNhdGVkIHRhYmxlIGlzCisgKiBpbmNvbnNpc3RlbnQgd2l0aCB0aGUg cHVibGlzaGVyLXNpZGUgb3IgY29udGFpbnMgbm9uLWltbXV0YWJsZSBmdW5jdGlvbnMKKyAqIHdo ZW4gYXBwbHlpbmcgdHJhbnNhY3Rpb25zIGluIHRoZSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlci4K KyAqLwordm9pZAorYXBwbHlfYmd3b3JrZXJfcmVsYXRpb25fY2hlY2soTG9naWNhbFJlcFJlbE1h cEVudHJ5ICpyZWwpCit7CisJLyogU2tpcCBjaGVjayBpZiBub3QgYW4gYXBwbHkgYmFja2dyb3Vu ZCB3b3JrZXIuICovCisJaWYgKCFhbV9hcHBseV9iZ3dvcmtlcigpKQorCQlyZXR1cm47CisKKwkv KgorCSAqIFBhcnRpdGlvbiB0YWJsZSBjaGVja3MgYXJlIGRvbmUgbGF0ZXIgaW4gZnVuY3Rpb24K KwkgKiBhcHBseV9oYW5kbGVfdHVwbGVfcm91dGluZy4KKwkgKi8KKwlpZiAocmVsLT5sb2NhbHJl bC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCXJldHVy bjsKKworCS8qCisJICogUmV0dXJuIGlmIGNoYW5nZXMgb24gdGhpcyByZWxhdGlvbiBjYW4gYmUg YXBwbGllZCBieSBhbiBhcHBseSBiYWNrZ3JvdW5kCisJICogd29ya2VyLgorCSAqLworCWlmIChy ZWwtPnBhcmFsbGVsX2FwcGx5ID09IFBBUkFMTEVMX0FQUExZX1NBRkUpCisJCXJldHVybjsKKwor CS8qIFdlIGFyZSBpbiBlcnJvciBtb2RlIGFuZCBzaG91bGQgZ2l2ZSB1c2VyIGNvcnJlY3QgZXJy b3IuICovCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9J Tl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJIGVycm1zZygiY2Fubm90IHJlcGxpY2F0ZSB0YXJn ZXQgcmVsYXRpb24gXCIlcy4lc1wiIHVzaW5nICIKKwkJCQkJInN1YnNjcmlwdGlvbiBwYXJhbWV0 ZXIgc3RyZWFtaW5nPXBhcmFsbGVsIiwKKwkJCQkJcmVsLT5yZW1vdGVyZWwubnNwbmFtZSwgcmVs LT5yZW1vdGVyZWwucmVsbmFtZSksCisJCQkgZXJyZGV0YWlsKCJUaGUgdW5pcXVlIGNvbHVtbiBv biBzdWJzY3JpYmVyIGlzIG5vdCB0aGUgdW5pcXVlICIKKwkJCQkJICAgImNvbHVtbiBvbiBwdWJs aXNoZXIgb3IgdGhlcmUgaXMgYXQgbGVhc3Qgb25lICIKKwkJCQkJICAgIm5vbi1pbW11dGFibGUg ZnVuY3Rpb24uIiksCisJCQkgZXJyaGludCgiUGxlYXNlIGNoYW5nZSB0byB1c2Ugc3Vic2NyaXB0 aW9uIHBhcmFtZXRlciAiCisJCQkJCSAic3RyZWFtaW5nPW9uLiIpKSk7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggNDdiZDgxMWZiNy4uNTExYmQ5YzA1MiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtMjMsNyArMjMsOCBA QAogLyoKICAqIFByb3RvY29sIG1lc3NhZ2UgZmxhZ3MuCiAgKi8KLSNkZWZpbmUgTE9HSUNBTFJF UF9JU19SRVBMSUNBX0lERU5USVRZIDEKKyNkZWZpbmUgQVRUUl9JU19SRVBMSUNBX0lERU5USVRZ CSgxIDw8IDApCisjZGVmaW5lIEFUVFJfSVNfVU5JUVVFCQkJCSgxIDw8IDEpCiAKICNkZWZpbmUg TUVTU0FHRV9UUkFOU0FDVElPTkFMICgxPDwwKQogI2RlZmluZSBUUlVOQ0FURV9DQVNDQURFCQko MTw8MCkKQEAgLTQwLDYgKzQxLDY4IEBAIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfcmVhZF90dXBs ZShTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICp0dXBsZSk7CiBzdGF0aWMgdm9p ZCBsb2dpY2FscmVwX3dyaXRlX25hbWVzcGFjZShTdHJpbmdJbmZvIG91dCwgT2lkIG5zcGlkKTsK IHN0YXRpYyBjb25zdCBjaGFyICpsb2dpY2FscmVwX3JlYWRfbmFtZXNwYWNlKFN0cmluZ0luZm8g aW4pOwogCitzdGF0aWMgQml0bWFwc2V0ICpSZWxhdGlvbkdldFVuaXF1ZUtleUJpdG1hcChSZWxh dGlvbiByZWwpOworCisvKgorICogUmVsYXRpb25HZXRVbmlxdWVLZXlCaXRtYXAgLS0gZ2V0IGEg Yml0bWFwIG9mIHVuaXF1ZSBhdHRyaWJ1dGUgbnVtYmVycworICoKKyAqIFRoaXMgaXMgc2ltaWxh ciB0byBSZWxhdGlvbkdldElkZW50aXR5S2V5Qml0bWFwKCksIGJ1dCByZXR1cm5zIGEgYml0bWFw IG9mCisgKiBpbmRleCBhdHRyaWJ1dGUgbnVtYmVycyBmb3IgYWxsIHVuaXF1ZSBpbmRleGVzLgor ICovCitzdGF0aWMgQml0bWFwc2V0ICoKK1JlbGF0aW9uR2V0VW5pcXVlS2V5Qml0bWFwKFJlbGF0 aW9uIHJlbCkKK3sKKwlMaXN0CQkgICAqaW5kZXhvaWRsaXN0ID0gTklMOworCUxpc3RDZWxsCSAg ICppbmRleG9pZHNjYW47CisJQml0bWFwc2V0CSAgICphdHR1bmlxdWUgPSBOVUxMOworCisJaWYg KCFyZWwtPnJkX3JlbC0+cmVsaGFzaW5kZXgpCisJCXJldHVybiBOVUxMOworCisJaW5kZXhvaWRs aXN0ID0gUmVsYXRpb25HZXRJbmRleExpc3QocmVsKTsKKworCWZvcmVhY2goaW5kZXhvaWRzY2Fu LCBpbmRleG9pZGxpc3QpCisJeworCQlPaWQJCQlpbmRleG9pZCA9IGxmaXJzdF9vaWQoaW5kZXhv aWRzY2FuKTsKKwkJUmVsYXRpb24JaW5kZXhSZWw7CisJCWludAkJCWk7CisKKwkJLyogTG9vayB1 cCB0aGUgZGVzY3JpcHRpb24gZm9yIGluZGV4ICovCisJCWluZGV4UmVsID0gUmVsYXRpb25JZEdl dFJlbGF0aW9uKGluZGV4b2lkKTsKKworCQlpZiAoIVJlbGF0aW9uSXNWYWxpZChpbmRleFJlbCkp CisJCQllbG9nKEVSUk9SLCAiY291bGQgbm90IG9wZW4gcmVsYXRpb24gd2l0aCBPSUQgJXUiLCBp bmRleG9pZCk7CisKKwkJaWYgKCFpbmRleFJlbC0+cmRfaW5kZXgtPmluZGlzdW5pcXVlKQorCQl7 CisJCQlSZWxhdGlvbkNsb3NlKGluZGV4UmVsKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyog QWRkIHJlZmVyZW5jZWQgYXR0cmlidXRlcyB0byBpZGluZGV4YXR0cnMgKi8KKwkJZm9yIChpID0g MDsgaSA8IGluZGV4UmVsLT5yZF9pbmRleC0+aW5kbmF0dHM7IGkrKykKKwkJeworCQkJaW50IGF0 dHJudW0gPSBpbmRleFJlbC0+cmRfaW5kZXgtPmluZGtleS52YWx1ZXNbaV07CisKKwkJCS8qCisJ CQkgKiBXZSBkb24ndCBpbmNsdWRlIG5vbi1rZXkgY29sdW1ucyBpbnRvIGlkaW5kZXhhdHRycwor CQkJICogYml0bWFwcy4gU2VlIFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwLgorCQkJICovCisJ CQlpZiAoYXR0cm51bSAhPSAwKQorCQkJeworCQkJCWlmIChpIDwgaW5kZXhSZWwtPnJkX2luZGV4 LT5pbmRua2V5YXR0cyAmJgorCQkJCQkhYm1zX2lzX21lbWJlcihhdHRybnVtIC0gRmlyc3RMb3dJ bnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciwgYXR0dW5pcXVlKSkKKwkJCQkJYXR0dW5pcXVlID0g Ym1zX2FkZF9tZW1iZXIoYXR0dW5pcXVlLAorCQkJCQkJCQkJCQkgICBhdHRybnVtIC0gRmlyc3RM b3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisJCQl9CisJCX0KKwkJUmVsYXRpb25DbG9z ZShpbmRleFJlbCk7CisJfQorCWxpc3RfZnJlZShpbmRleG9pZGxpc3QpOworCisJcmV0dXJuIGF0 dHVuaXF1ZTsKK30KKwogLyoKICAqIENoZWNrIGlmIGEgY29sdW1uIGlzIGNvdmVyZWQgYnkgYSBj b2x1bW4gbGlzdC4KICAqCkBAIC05MzMsNyArOTk2LDggQEAgbG9naWNhbHJlcF93cml0ZV9hdHRy cyhTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpCiAJVHVw bGVEZXNjCWRlc2M7CiAJaW50CQkJaTsKIAl1aW50MTYJCW5saXZlYXR0cyA9IDA7Ci0JQml0bWFw c2V0ICAqaWRhdHRycyA9IE5VTEw7CisJQml0bWFwc2V0ICAqaWRhdHRycyA9IE5VTEwsCisJCQkg ICAqYXR0dW5pcXVlID0gTlVMTDsKIAlib29sCQlyZXBsaWRlbnRmdWxsOwogCiAJZGVzYyA9IFJl bGF0aW9uR2V0RGVzY3IocmVsKTsKQEAgLTk1OCw2ICsxMDIyLDkgQEAgbG9naWNhbHJlcF93cml0 ZV9hdHRycyhTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMp CiAJaWYgKCFyZXBsaWRlbnRmdWxsKQogCQlpZGF0dHJzID0gUmVsYXRpb25HZXRJZGVudGl0eUtl eUJpdG1hcChyZWwpOwogCisJLyogZmV0Y2ggYml0bWFwIG9mIFVOSVFVRSBhdHRyaWJ1dGVzICov CisJYXR0dW5pcXVlID0gUmVsYXRpb25HZXRVbmlxdWVLZXlCaXRtYXAocmVsKTsKKwogCS8qIHNl bmQgdGhlIGF0dHJpYnV0ZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bmF0dHM7IGkrKykK IAl7CkBAIC05NzQsNyArMTA0MSwxMSBAQCBsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmluZ0lu Zm8gb3V0LCBSZWxhdGlvbiByZWwsIEJpdG1hcHNldCAqY29sdW1ucykKIAkJaWYgKHJlcGxpZGVu dGZ1bGwgfHwKIAkJCWJtc19pc19tZW1iZXIoYXR0LT5hdHRudW0gLSBGaXJzdExvd0ludmFsaWRI ZWFwQXR0cmlidXRlTnVtYmVyLAogCQkJCQkJICBpZGF0dHJzKSkKLQkJCWZsYWdzIHw9IExPR0lD QUxSRVBfSVNfUkVQTElDQV9JREVOVElUWTsKKwkJCWZsYWdzIHw9IEFUVFJfSVNfUkVQTElDQV9J REVOVElUWTsKKworCQlpZiAoYm1zX2lzX21lbWJlcihhdHQtPmF0dG51bSAtIEZpcnN0TG93SW52 YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCisJCQkJCQkgIGF0dHVuaXF1ZSkpCisJCQlmbGFncyB8 PSBBVFRSX0lTX1VOSVFVRTsKIAogCQlwcV9zZW5kYnl0ZShvdXQsIGZsYWdzKTsKIApAQCAtOTg5 LDYgKzEwNjAsNyBAQCBsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmluZ0luZm8gb3V0LCBSZWxh dGlvbiByZWwsIEJpdG1hcHNldCAqY29sdW1ucykKIAl9CiAKIAlibXNfZnJlZShpZGF0dHJzKTsK KwlibXNfZnJlZShhdHR1bmlxdWUpOwogfQogCiAvKgpAQCAtMTAwMSw3ICsxMDczLDggQEAgbG9n aWNhbHJlcF9yZWFkX2F0dHJzKFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBSZWxhdGlvbiAqcmVs KQogCWludAkJCW5hdHRzOwogCWNoYXIJICAqKmF0dG5hbWVzOwogCU9pZAkJICAgKmF0dHR5cHM7 Ci0JQml0bWFwc2V0ICAqYXR0a2V5cyA9IE5VTEw7CisJQml0bWFwc2V0ICAqYXR0a2V5cyA9IE5V TEwsCisJCQkgICAqYXR0dW5pcXVlID0gTlVMTDsKIAogCW5hdHRzID0gcHFfZ2V0bXNnaW50KGlu LCAyKTsKIAlhdHRuYW1lcyA9IHBhbGxvYyhuYXR0cyAqIHNpemVvZihjaGFyICopKTsKQEAgLTEw MTQsOSArMTA4NywxMyBAQCBsb2dpY2FscmVwX3JlYWRfYXR0cnMoU3RyaW5nSW5mbyBpbiwgTG9n aWNhbFJlcFJlbGF0aW9uICpyZWwpCiAKIAkJLyogQ2hlY2sgZm9yIHJlcGxpY2EgaWRlbnRpdHkg Y29sdW1uICovCiAJCWZsYWdzID0gcHFfZ2V0bXNnYnl0ZShpbik7Ci0JCWlmIChmbGFncyAmIExP R0lDQUxSRVBfSVNfUkVQTElDQV9JREVOVElUWSkKKwkJaWYgKGZsYWdzICYgQVRUUl9JU19SRVBM SUNBX0lERU5USVRZKQogCQkJYXR0a2V5cyA9IGJtc19hZGRfbWVtYmVyKGF0dGtleXMsIGkpOwog CisJCS8qIENoZWNrIGZvciB1bmlxdWUgY29sdW1uICovCisJCWlmIChmbGFncyAmIEFUVFJfSVNf VU5JUVVFKQorCQkJYXR0dW5pcXVlID0gYm1zX2FkZF9tZW1iZXIoYXR0dW5pcXVlLCBpKTsKKwog CQkvKiBhdHRyaWJ1dGUgbmFtZSAqLwogCQlhdHRuYW1lc1tpXSA9IHBzdHJkdXAocHFfZ2V0bXNn c3RyaW5nKGluKSk7CiAKQEAgLTEwMzAsNiArMTEwNyw3IEBAIGxvZ2ljYWxyZXBfcmVhZF9hdHRy cyhTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwUmVsYXRpb24gKnJlbCkKIAlyZWwtPmF0dG5hbWVz ID0gYXR0bmFtZXM7CiAJcmVsLT5hdHR0eXBzID0gYXR0dHlwczsKIAlyZWwtPmF0dGtleXMgPSBh dHRrZXlzOworCXJlbC0+YXR0dW5pcXVlID0gYXR0dW5pcXVlOwogCXJlbC0+bmF0dHMgPSBuYXR0 czsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxh dGlvbi5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmluZGV4 IGU5ODkwNDc2ODEuLjM3ZTQxMGI4ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3JlbGF0aW9uLmMKQEAgLTE5LDEyICsxOSwxOSBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3Rh YmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3Byb2MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N1YnNjcmlwdGlvbl9yZWwuaCIKKyNp bmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3Iu aCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0 aW1pemVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgiCisjaW5jbHVkZSAicmV3cml0ZS9y ZXdyaXRlSGFuZGxlci5oIgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCisjaW5jbHVkZSAidXRp bHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1 dGlscy90eXBjYWNoZS5oIgogCiAKIHN0YXRpYyBNZW1vcnlDb250ZXh0IExvZ2ljYWxSZXBSZWxN YXBDb250ZXh0ID0gTlVMTDsKQEAgLTkxLDYgKzk4LDI2IEBAIGxvZ2ljYWxyZXBfcmVsbWFwX2lu dmFsaWRhdGVfY2IoRGF0dW0gYXJnLCBPaWQgcmVsb2lkKQogCX0KIH0KIAorLyoKKyAqIFJlbGNh Y2hlIGludmFsaWRhdGlvbiBjYWxsYmFjayB0byByZXNldCBwYXJhbGxlbCBmbGFnLgorICovCitz dGF0aWMgdm9pZAorbG9naWNhbHJlcF9yZWxtYXBfcmVzZXRfcGFyYWxsZWxfY2IoRGF0dW0gYXJn LCBpbnQgY2FjaGVpZCwgdWludDMyIGhhc2h2YWx1ZSkKK3sKKwlIQVNIX1NFUV9TVEFUVVMgaGFz aF9zZXE7CisJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICplbnRyeTsKKworCWlmIChMb2dpY2FsUmVw UmVsTWFwID09IE5VTEwpCisJCXJldHVybjsKKworCWhhc2hfc2VxX2luaXQoJmhhc2hfc2VxLCBM b2dpY2FsUmVwUmVsTWFwKTsKKwl3aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFfc2VhcmNoKCZoYXNo X3NlcSkpICE9IE5VTEwpCisJeworCQllbnRyeS0+cGFyYWxsZWxfYXBwbHkgPSBQQVJBTExFTF9B UFBMWV9VTktOT1dOOworCQllbnRyeS0+bG9jYWxyZWx2YWxpZCA9IGZhbHNlOworCX0KK30KKwog LyoKICAqIEluaXRpYWxpemUgdGhlIHJlbGF0aW9uIG1hcCBjYWNoZS4KICAqLwpAQCAtMTE2LDYg KzE0Myw5IEBAIGxvZ2ljYWxyZXBfcmVsbWFwX2luaXQodm9pZCkKIAkvKiBXYXRjaCBmb3IgaW52 YWxpZGF0aW9uIGV2ZW50cy4gKi8KIAlDYWNoZVJlZ2lzdGVyUmVsY2FjaGVDYWxsYmFjayhsb2dp Y2FscmVwX3JlbG1hcF9pbnZhbGlkYXRlX2NiLAogCQkJCQkJCQkgIChEYXR1bSkgMCk7CisJQ2Fj aGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soUFJPQ09JRCwKKwkJCQkJCQkJICBsb2dpY2FscmVw X3JlbG1hcF9yZXNldF9wYXJhbGxlbF9jYiwKKwkJCQkJCQkJICAoRGF0dW0pIDApOwogfQogCiAv KgpAQCAtMTQyLDYgKzE3Miw3IEBAIGxvZ2ljYWxyZXBfcmVsbWFwX2ZyZWVfZW50cnkoTG9naWNh bFJlcFJlbE1hcEVudHJ5ICplbnRyeSkKIAkJcGZyZWUocmVtb3RlcmVsLT5hdHR0eXBzKTsKIAl9 CiAJYm1zX2ZyZWUocmVtb3RlcmVsLT5hdHRrZXlzKTsKKwlibXNfZnJlZShyZW1vdGVyZWwtPmF0 dHVuaXF1ZSk7CiAKIAlpZiAoZW50cnktPmF0dHJtYXApCiAJCWZyZWVfYXR0cm1hcChlbnRyeS0+ YXR0cm1hcCk7CkBAIC0xOTAsNiArMjIxLDcgQEAgbG9naWNhbHJlcF9yZWxtYXBfdXBkYXRlKExv Z2ljYWxSZXBSZWxhdGlvbiAqcmVtb3RlcmVsKQogCX0KIAllbnRyeS0+cmVtb3RlcmVsLnJlcGxp ZGVudCA9IHJlbW90ZXJlbC0+cmVwbGlkZW50OwogCWVudHJ5LT5yZW1vdGVyZWwuYXR0a2V5cyA9 IGJtc19jb3B5KHJlbW90ZXJlbC0+YXR0a2V5cyk7CisJZW50cnktPnJlbW90ZXJlbC5hdHR1bmlx dWUgPSBibXNfY29weShyZW1vdGVyZWwtPmF0dHVuaXF1ZSk7CiAJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGN0eCk7CiB9CiAKQEAgLTMxMCw2ICszNDIsMTY4IEBAIGxvZ2ljYWxyZXBfcmVsX21h cmtfdXBkYXRhYmxlKExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqZW50cnkpCiAJfQogfQogCisvKgor ICogQ2hlY2sgaWYgY2hhbmdlcyBvbiBvbmUgcmVsYXRpb24gY2FuIGJlIGFwcGxpZWQgYnkgYW4g YXBwbHkgYmFja2dyb3VuZAorICogd29ya2VyIGFuZCBhc3NpZ24gdGhlICdwYXJhbGxlbF9hcHBs eScgZmxhZy4KKyAqCisgKiBUaGVyZSBhcmUgdHdvIHJlcXVpcmVtZW50cyBmb3IgYXBwbHlpbmcg Y2hhbmdlcyBpbiBhbiBhcHBseSBiYWNrZ3JvdW5kCisgKiB3b3JrZXI6IDEpIFRoZSB1bmlxdWUg Y29sdW1uIGluIHRoZSByZWxhdGlvbiBvbiB0aGUgc3Vic2NyaWJlci1zaWRlIHNob3VsZAorICog YWxzbyBiZSB0aGUgdW5pcXVlIGNvbHVtbiBvbiB0aGUgcHVibGlzaGVyLXNpZGU7IDIpIFRoZXJl IGNhbm5vdCBiZSBhbnkKKyAqIG5vbi1pbW11dGFibGUgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIHN1 YnNjcmliZXItc2lkZS4KKyAqCisgKiBXZSBqdXN0IG1hcmsgdGhlIHJlbGF0aW9uIGVudHJ5IGFz ICdQQVJBTExFTF9BUFBMWV9VTlNBRkUnIGhlcmUgaWYgY2hhbmdlcworICogb24gb25lIHJlbGF0 aW9uIGNhbiBub3QgYmUgYXBwbGllZCBieSBhbiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBhbmQg bGVhdmUKKyAqIGl0IHRvIGFwcGx5X2Jnd29ya2VyX3JlbGF0aW9uX2NoZWNrKCkgdG8gdGhyb3cg dGhlIGFjdHVhbCBlcnJvciBpZiBuZWVkZWQuCisgKi8KK3N0YXRpYyB2b2lkCitsb2dpY2FscmVw X3JlbF9tYXJrX3BhcmFsbGVsX2FwcGx5KExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqZW50cnkpCit7 CisJQml0bWFwc2V0ICAgKnVrZXk7CisJaW50CQkJaTsKKwlUdXBsZURlc2MJdHVwZGVzYzsKKwlp bnQJCQlhdHRudW07CisJTGlzdAkgICAqZmtleXMgPSBOSUw7CisKKwkvKiBGYXN0IHBhdGggaWYg J3BhcmFsbGVsX2FwcGx5JyBmbGFnIGlzIGFscmVhZHkga25vd24uICovCisJaWYgKGVudHJ5LT5w YXJhbGxlbF9hcHBseSAhPSBQQVJBTExFTF9BUFBMWV9VTktOT1dOKQorCQlyZXR1cm47CisKKwkv KiBJbml0aWFsaXplIHRoZSBmbGFnLiAqLworCWVudHJ5LT5wYXJhbGxlbF9hcHBseSA9IFBBUkFM TEVMX0FQUExZX1NBRkU7CisKKwkvKgorCSAqIEZpcnN0LCBjaGVjayBpZiB0aGUgdW5pcXVlIGNv bHVtbiBpbiB0aGUgcmVsYXRpb24gb24gdGhlIHN1YnNjcmliZXItc2lkZQorCSAqIGlzIGFsc28g dGhlIHVuaXF1ZSBjb2x1bW4gb24gdGhlIHB1Ymxpc2hlci1zaWRlLgorCSAqLworCXVrZXkgPSBS ZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChlbnRyeS0+bG9jYWxyZWwsCisJCQkJCQkJCQkgIElO REVYX0FUVFJfQklUTUFQX0tFWSk7CisKKwlpZiAodWtleSkKKwl7CisJCWkgPSAtMTsKKwkJd2hp bGUgKChpID0gYm1zX25leHRfbWVtYmVyKHVrZXksIGkpKSA+PSAwKQorCQl7CisJCQlhdHRudW0g PSBBdHRyTnVtYmVyR2V0QXR0ck9mZnNldChpICsgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0 ZU51bWJlcik7CisKKwkJCWlmIChlbnRyeS0+YXR0cm1hcC0+YXR0bnVtc1thdHRudW1dIDwgMCB8 fAorCQkJCSFibXNfaXNfbWVtYmVyKGVudHJ5LT5hdHRybWFwLT5hdHRudW1zW2F0dG51bV0sIGVu dHJ5LT5yZW1vdGVyZWwuYXR0dW5pcXVlKSkKKwkJCXsKKwkJCQllbnRyeS0+cGFyYWxsZWxfYXBw bHkgPSBQQVJBTExFTF9BUFBMWV9VTlNBRkU7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJ Ym1zX2ZyZWUodWtleSk7CisJfQorCisJLyoKKwkgKiBUaGVuLCBjaGVjayBpZiB0aGVyZSBpcyBh bnkgbm9uLWltbXV0YWJsZSBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBsb2NhbAorCSAqIHRhYmxlLiBM b29rIGZvciBmdW5jdGlvbnMgaW4gdGhlIGZvbGxvd2luZyBwbGFjZXM6CisJICogYS4gdHJpZ2dl ciBmdW5jdGlvbnM7CisJICogYi4gQ29sdW1uIGRlZmF1bHQgdmFsdWUgZXhwcmVzc2lvbnMgYW5k IGRvbWFpbiBjb25zdHJhaW50czsKKwkgKiBjLiBDb25zdHJhaW50IGV4cHJlc3Npb25zOworCSAq IGQuIEZvcmVpZ24ga2V5cy4KKwkgKi8KKwkvKiBDaGVjayB0aGUgdHJpZ2dlciBmdW5jdGlvbnMu ICovCisJaWYgKGVudHJ5LT5sb2NhbHJlbC0+dHJpZ2Rlc2MgIT0gTlVMTCkKKwl7CisJCWZvciAo aSA9IDA7IGkgPCBlbnRyeS0+bG9jYWxyZWwtPnRyaWdkZXNjLT5udW10cmlnZ2VyczsgaSsrKQor CQl7CisJCQlUcmlnZ2VyICAgICp0cmlnID0gZW50cnktPmxvY2FscmVsLT50cmlnZGVzYy0+dHJp Z2dlcnMgKyBpOworCisJCQlpZiAodHJpZy0+dGdlbmFibGVkICE9IFRSSUdHRVJfRklSRVNfQUxX QVlTICYmCisJCQkJdHJpZy0+dGdlbmFibGVkICE9IFRSSUdHRVJfRklSRVNfT05fUkVQTElDQSkK KwkJCQljb250aW51ZTsKKworCQkJaWYgKGZ1bmNfdm9sYXRpbGUodHJpZy0+dGdmb2lkKSAhPSBQ Uk9WT0xBVElMRV9JTU1VVEFCTEUpCisJCQl7CisJCQkJZW50cnktPnBhcmFsbGVsX2FwcGx5ID0g UEFSQUxMRUxfQVBQTFlfVU5TQUZFOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKworCS8q IENoZWNrIHRoZSBjb2x1bW5zLiAqLworCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKGVudHJ5 LT5sb2NhbHJlbCk7CisJZm9yIChhdHRudW0gPSAwOyBhdHRudW0gPCB0dXBkZXNjLT5uYXR0czsg YXR0bnVtKyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1 cGRlc2MsIGF0dG51bSk7CisKKwkJLyogV2UgZG9uJ3QgbmVlZCBpbmZvIGZvciBkcm9wcGVkIG9y IGdlbmVyYXRlZCBhdHRyaWJ1dGVzICovCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCB8fCBhdHQt PmF0dGdlbmVyYXRlZCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFdlIGRvbid0IG5lZWQg dG8gY2hlY2sgY29sdW1ucyB0aGF0IG9ubHkgZXhpc3Qgb24gdGhlCisJCSAqIHN1YnNjcmliZXIK KwkJICovCisJCWlmIChlbnRyeS0+YXR0cm1hcC0+YXR0bnVtc1thdHRudW1dIDwgMCkKKwkJCWNv bnRpbnVlOworCisJCWlmIChhdHQtPmF0dGhhc2RlZikKKwkJeworCQkJTm9kZQkgICAqZGVmYXVs dGV4cHI7CisKKwkJCWRlZmF1bHRleHByID0gYnVpbGRfY29sdW1uX2RlZmF1bHQoZW50cnktPmxv Y2FscmVsLCBhdHRudW0gKyAxKTsKKwkJCWlmIChjb250YWluX211dGFibGVfZnVuY3Rpb25zKGRl ZmF1bHRleHByKSkKKwkJCXsKKwkJCQllbnRyeS0+cGFyYWxsZWxfYXBwbHkgPSBQQVJBTExFTF9B UFBMWV9VTlNBRkU7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogSWYgdGhl IGNvbHVtbiBpcyBvZiBhIERPTUFJTiB0eXBlLCBkZXRlcm1pbmUgd2hldGhlcgorCQkgKiB0aGF0 IGRvbWFpbiBoYXMgYW55IENIRUNLIGV4cHJlc3Npb25zIHRoYXQgYXJlIG5vdAorCQkgKiBpbW11 dGFibGUuCisJCSAqLworCQlpZiAoZ2V0X3R5cHR5cGUoYXR0LT5hdHR0eXBpZCkgPT0gVFlQVFlQ RV9ET01BSU4pCisJCXsKKwkJCUxpc3QJICAgKmRvbWFpbl9jb25zdHJhaW50czsKKwkJCUxpc3RD ZWxsICAgKmxjOworCisJCQlkb21haW5fY29uc3RyYWludHMgPSBHZXREb21haW5Db25zdHJhaW50 cyhhdHQtPmF0dHR5cGlkKTsKKworCQkJZm9yZWFjaChsYywgZG9tYWluX2NvbnN0cmFpbnRzKQor CQkJeworCQkJCURvbWFpbkNvbnN0cmFpbnRTdGF0ZSAqY29uID0gKERvbWFpbkNvbnN0cmFpbnRT dGF0ZSAqKSBsZmlyc3QobGMpOworCisJCQkJaWYgKGNvbi0+Y2hlY2tfZXhwciAmJiBjb250YWlu X211dGFibGVfZnVuY3Rpb25zKChOb2RlICopIGNvbi0+Y2hlY2tfZXhwcikpCisJCQkJeworCQkJ CQllbnRyeS0+cGFyYWxsZWxfYXBwbHkgPSBQQVJBTExFTF9BUFBMWV9VTlNBRkU7CisJCQkJCXJl dHVybjsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGUgY29uc3RyYWludHMu ICovCisJaWYgKHR1cGRlc2MtPmNvbnN0cikKKwl7CisJCUNvbnN0ckNoZWNrICpjaGVjayA9IHR1 cGRlc2MtPmNvbnN0ci0+Y2hlY2s7CisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIGlmIHRoZXJlIGFy ZSBhbnkgQ0hFQ0sgY29uc3RyYWludHMgd2hpY2gKKwkJICogY29udGFpbnMgbm9uLWltbXV0YWJs ZSBmdW5jdGlvbi4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCB0dXBkZXNjLT5jb25zdHItPm51 bV9jaGVjazsgaSsrKQorCQl7CisJCQlFeHByCSAgICpjaGVja19leHByID0gc3RyaW5nVG9Ob2Rl KGNoZWNrW2ldLmNjYmluKTsKKworCQkJaWYgKGNvbnRhaW5fbXV0YWJsZV9mdW5jdGlvbnMoKE5v ZGUgKikgY2hlY2tfZXhwcikpCisJCQl7CisJCQkJZW50cnktPnBhcmFsbGVsX2FwcGx5ID0gUEFS QUxMRUxfQVBQTFlfVU5TQUZFOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKworCS8qIENo ZWNrIHRoZSBmb3JlaWduIGtleXMuICovCisJZmtleXMgPSBSZWxhdGlvbkdldEZLZXlMaXN0KGVu dHJ5LT5sb2NhbHJlbCk7CisJaWYgKGZrZXlzKQorCQllbnRyeS0+cGFyYWxsZWxfYXBwbHkgPSBQ QVJBTExFTF9BUFBMWV9VTlNBRkU7Cit9CisKIC8qCiAgKiBPcGVuIHRoZSBsb2NhbCByZWxhdGlv biBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbW90ZSBvbmUuCiAgKgpAQCAtNDM4LDYgKzYzMiw5IEBA IGxvZ2ljYWxyZXBfcmVsX29wZW4oTG9naWNhbFJlcFJlbElkIHJlbW90ZWlkLCBMT0NLTU9ERSBs b2NrbW9kZSkKIAkJICovCiAJCWxvZ2ljYWxyZXBfcmVsX21hcmtfdXBkYXRhYmxlKGVudHJ5KTsK IAorCQkvKiBTZXQgaWYgY2hhbmdlcyBjb3VsZCBiZSBhcHBsaWVkIGluIHRoZSBhcHBseSBiYWNr Z3JvdW5kIHdvcmtlci4gKi8KKwkJbG9naWNhbHJlcF9yZWxfbWFya19wYXJhbGxlbF9hcHBseShl bnRyeSk7CisKIAkJZW50cnktPmxvY2FscmVsdmFsaWQgPSB0cnVlOwogCX0KIApAQCAtNjUzLDYg Kzg1MCw3IEBAIGxvZ2ljYWxyZXBfcGFydGl0aW9uX29wZW4oTG9naWNhbFJlcFJlbE1hcEVudHJ5 ICpyb290LAogCQl9CiAJCWVudHJ5LT5yZW1vdGVyZWwucmVwbGlkZW50ID0gcmVtb3RlcmVsLT5y ZXBsaWRlbnQ7CiAJCWVudHJ5LT5yZW1vdGVyZWwuYXR0a2V5cyA9IGJtc19jb3B5KHJlbW90ZXJl bC0+YXR0a2V5cyk7CisJCWVudHJ5LT5yZW1vdGVyZWwuYXR0dW5pcXVlID0gYm1zX2NvcHkocmVt b3RlcmVsLT5hdHR1bmlxdWUpOwogCX0KIAogCWVudHJ5LT5sb2NhbHJlbCA9IHBhcnRyZWw7CkBA IC02OTYsNiArODk0LDkgQEAgbG9naWNhbHJlcF9wYXJ0aXRpb25fb3BlbihMb2dpY2FsUmVwUmVs TWFwRW50cnkgKnJvb3QsCiAJLyogU2V0IGlmIHRoZSB0YWJsZSdzIHJlcGxpY2EgaWRlbnRpdHkg aXMgZW5vdWdoIHRvIGFwcGx5IHVwZGF0ZS9kZWxldGUuICovCiAJbG9naWNhbHJlcF9yZWxfbWFy a191cGRhdGFibGUoZW50cnkpOwogCisJLyogU2V0IGlmIGNoYW5nZXMgY291bGQgYmUgYXBwbGll ZCBpbiB0aGUgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuICovCisJbG9naWNhbHJlcF9yZWxfbWFy a19wYXJhbGxlbF9hcHBseShlbnRyeSk7CisKIAllbnRyeS0+bG9jYWxyZWx2YWxpZCA9IHRydWU7 CiAKIAkvKiBzdGF0ZSBhbmQgc3RhdGVsc24gYXJlIGxlZnQgc2V0IHRvIDAuICovCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCA4ZmZiYTdlMmU1Li4z Y2RiZjhiNDU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Rh Ymxlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5j LmMKQEAgLTg4NCw2ICs4ODQsNyBAQCBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3Bu YW1lLCBjaGFyICpyZWxuYW1lLAogCWxyZWwtPmF0dG5hbWVzID0gcGFsbG9jMChNYXhUdXBsZUF0 dHJpYnV0ZU51bWJlciAqIHNpemVvZihjaGFyICopKTsKIAlscmVsLT5hdHR0eXBzID0gcGFsbG9j MChNYXhUdXBsZUF0dHJpYnV0ZU51bWJlciAqIHNpemVvZihPaWQpKTsKIAlscmVsLT5hdHRrZXlz ID0gTlVMTDsKKwlscmVsLT5hdHR1bmlxdWUgPSBOVUxMOwogCiAJLyoKIAkgKiBTdG9yZSB0aGUg Y29sdW1ucyBhcyBhIGxpc3Qgb2YgbmFtZXMuICBJZ25vcmUgdGhvc2UgdGhhdCBhcmUgbm90CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCBiNWFhZTBlMTlhLi4y MjE2ZjZmM2E3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAg LTEzOTEsNiArMTM5MSwxNCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0b3AoU3RyaW5nSW5mbyBz KQogCXsKIAkJY2hhciBhY3Rpb24gPSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUT1A7CiAKKwkJ LyoKKwkJICogVW5saWtlIHN0cmVhbV9jb21taXQsIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBoZXJl IGZvciBzdHJlYW1fc3RvcCB0bworCQkgKiBmaW5pc2guIEFsbG93aW5nIHRoZSBvdGhlciB0cmFu c2FjdGlvbiB0byBiZSBhcHBsaWVkIGJlZm9yZQorCQkgKiBzdHJlYW1fc3RvcCBpcyBmaW5pc2hl ZCBjYW4gbGVhZCB0byBmYWlsdXJlcyBpZiB0aGUgdW5pcXVlCisJCSAqIGluZGV4L2NvbnN0cmFp bnQgaXMgZGlmZmVyZW50IGJldHdlZW4gcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBCdXQKKwkJ ICogZm9yIHN1Y2ggY2FzZXMsIHdlIGRvbid0IGFsbG93IHN0cmVhbWVkIHRyYW5zYWN0aW9ucyB0 byBiZSBhcHBsaWVkCisJCSAqIGluIHBhcmFsbGVsLiBTZWUgYXBwbHlfYmd3b3JrZXJfcmVsYXRp b25fY2hlY2suCisJCSAqLwogCQlhcHBseV9iZ3dvcmtlcl9zZW5kX2RhdGEoc3RyZWFtX2FwcGx5 X3dvcmtlciwgMSwgJmFjdGlvbik7CiAKIAkJZWxvZyhERUJVRzEsICJzdG9wcGVkIHN0cmVhbWlu ZyBvZiB4aWQgJXUsICV1IGNoYW5nZXMgc3RyZWFtZWQiLCBzdHJlYW1feGlkLCBuY2hhbmdlcyk7 CkBAIC0yMDQ0LDYgKzIwNTIsOCBAQCBhcHBseV9oYW5kbGVfaW5zZXJ0KFN0cmluZ0luZm8gcykK IAkvKiBTZXQgcmVsYXRpb24gZm9yIGVycm9yIGNhbGxiYWNrICovCiAJYXBwbHlfZXJyb3JfY2Fs bGJhY2tfYXJnLnJlbCA9IHJlbDsKIAorCWFwcGx5X2Jnd29ya2VyX3JlbGF0aW9uX2NoZWNrKHJl bCk7CisKIAkvKiBJbml0aWFsaXplIHRoZSBleGVjdXRvciBzdGF0ZS4gKi8KIAllZGF0YSA9IGNy ZWF0ZV9lZGF0YV9mb3JfcmVsYXRpb24ocmVsKTsKIAllc3RhdGUgPSBlZGF0YS0+ZXN0YXRlOwpA QCAtMjE4Nyw2ICsyMTk3LDggQEAgYXBwbHlfaGFuZGxlX3VwZGF0ZShTdHJpbmdJbmZvIHMpCiAJ LyogQ2hlY2sgaWYgd2UgY2FuIGRvIHRoZSB1cGRhdGUuICovCiAJY2hlY2tfcmVsYXRpb25fdXBk YXRhYmxlKHJlbCk7CiAKKwlhcHBseV9iZ3dvcmtlcl9yZWxhdGlvbl9jaGVjayhyZWwpOworCiAJ LyogSW5pdGlhbGl6ZSB0aGUgZXhlY3V0b3Igc3RhdGUuICovCiAJZWRhdGEgPSBjcmVhdGVfZWRh dGFfZm9yX3JlbGF0aW9uKHJlbCk7CiAJZXN0YXRlID0gZWRhdGEtPmVzdGF0ZTsKQEAgLTIzNTUs NiArMjM2Nyw4IEBAIGFwcGx5X2hhbmRsZV9kZWxldGUoU3RyaW5nSW5mbyBzKQogCS8qIENoZWNr IGlmIHdlIGNhbiBkbyB0aGUgZGVsZXRlLiAqLwogCWNoZWNrX3JlbGF0aW9uX3VwZGF0YWJsZShy ZWwpOwogCisJYXBwbHlfYmd3b3JrZXJfcmVsYXRpb25fY2hlY2socmVsKTsKKwogCS8qIEluaXRp YWxpemUgdGhlIGV4ZWN1dG9yIHN0YXRlLiAqLwogCWVkYXRhID0gY3JlYXRlX2VkYXRhX2Zvcl9y ZWxhdGlvbihyZWwpOwogCWVzdGF0ZSA9IGVkYXRhLT5lc3RhdGU7CkBAIC0yNTQwLDEzICsyNTU0 LDE0IEBAIGFwcGx5X2hhbmRsZV90dXBsZV9yb3V0aW5nKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRh dGEsCiAJfQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwogCisJcGFydF9lbnRyeSA9 IGxvZ2ljYWxyZXBfcGFydGl0aW9uX29wZW4ocmVsbWFwZW50cnksIHBhcnRyZWwsCisJCQkJCQkJ CQkJICAgYXR0cm1hcCk7CisKIAkvKiBDaGVjayBpZiB3ZSBjYW4gZG8gdGhlIHVwZGF0ZSBvciBk ZWxldGUgb24gdGhlIGxlYWYgcGFydGl0aW9uLiAqLwogCWlmIChvcGVyYXRpb24gPT0gQ01EX1VQ REFURSB8fCBvcGVyYXRpb24gPT0gQ01EX0RFTEVURSkKLQl7Ci0JCXBhcnRfZW50cnkgPSBsb2dp Y2FscmVwX3BhcnRpdGlvbl9vcGVuKHJlbG1hcGVudHJ5LCBwYXJ0cmVsLAotCQkJCQkJCQkJCQkg ICBhdHRybWFwKTsKIAkJY2hlY2tfcmVsYXRpb25fdXBkYXRhYmxlKHBhcnRfZW50cnkpOwotCX0K KworCWFwcGx5X2Jnd29ya2VyX3JlbGF0aW9uX2NoZWNrKHBhcnRfZW50cnkpOwogCiAJc3dpdGNo IChvcGVyYXRpb24pCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvdHlw Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3R5cGNhY2hlLmMKaW5kZXggODA4Zjll YmQwZC4uYjI0ODg5OWQ4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvdHlw Y2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS90eXBjYWNoZS5jCkBAIC0yNTQw LDYgKzI1NDAsMjMgQEAgY29tcGFyZV92YWx1ZXNfb2ZfZW51bShUeXBlQ2FjaGVFbnRyeSAqdGNh Y2hlLCBPaWQgYXJnMSwgT2lkIGFyZzIpCiAJCXJldHVybiAwOwogfQogCisvKgorICogR2V0RG9t YWluQ29uc3RyYWludHMgLS0tIGdldCBEb21haW5Db25zdHJhaW50U3RhdGUgbGlzdCBvZiBzcGVj aWZpZWQgZG9tYWluIHR5cGUKKyAqLworTGlzdCAqCitHZXREb21haW5Db25zdHJhaW50cyhPaWQg dHlwZV9pZCkKK3sKKwlUeXBlQ2FjaGVFbnRyeSAqdHlwZW50cnk7CisJTGlzdAkJICAgKmNvbnN0 cmFpbnRzID0gTklMOworCisJdHlwZW50cnkgPSBsb29rdXBfdHlwZV9jYWNoZSh0eXBlX2lkLCBU WVBFQ0FDSEVfRE9NQUlOX0NPTlNUUl9JTkZPKTsKKworCWlmKHR5cGVudHJ5LT5kb21haW5EYXRh ICE9IE5VTEwpCisJCWNvbnN0cmFpbnRzID0gdHlwZW50cnktPmRvbWFpbkRhdGEtPmNvbnN0cmFp bnRzOworCisJcmV0dXJuIGNvbnN0cmFpbnRzOworfQorCiAvKgogICogTG9hZCAob3IgcmUtbG9h ZCkgdGhlIGVudW1EYXRhIG1lbWJlciBvZiB0aGUgdHlwY2FjaGUgZW50cnkuCiAgKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggZWIwZmQyNGZkOC4uNDM5NWMxMWY3 NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTExMyw2ICsxMTMs NyBAQCB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwUmVsYXRpb24KIAljaGFyCQlyZXBsaWRlbnQ7 CQkvKiByZXBsaWNhIGlkZW50aXR5ICovCiAJY2hhcgkJcmVsa2luZDsJCS8qIHJlbW90ZSByZWxh dGlvbiBraW5kICovCiAJQml0bWFwc2V0ICAqYXR0a2V5czsJCS8qIEJpdG1hcCBvZiBrZXkgY29s dW1ucyAqLworCUJpdG1hcHNldCAgKmF0dHVuaXF1ZTsJCS8qIEJpdG1hcCBvZiB1bmlxdWUgY29s dW1ucyAqLwogfSBMb2dpY2FsUmVwUmVsYXRpb247CiAKIC8qIFR5cGUgbWFwcGluZyBpbmZvICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscmVsYXRpb24uaCBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlvbi5oCmluZGV4IDc4Y2Q3ZTc3 ZjUuLjgwMTFlNjQ4ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWxyZWxhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxyZWxhdGlv bi5oCkBAIC0xNSw2ICsxNSwxOSBAQAogI2luY2x1ZGUgImFjY2Vzcy9hdHRtYXAuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCIKIAorLyoKKyAqCVN0YXRlcyB0byBkZXRl cm1pbmUgaWYgY2hhbmdlcyBvbiBvbmUgcmVsYXRpb24gY2FuIGJlIGFwcGxpZWQgdXNpbmcgYW4K KyAqCWFwcGx5IGJhY2tncm91bmQgd29ya2VyLgorICovCit0eXBlZGVmIGVudW0gUGFyYWxsZUFw cGx5U2FmZXR5Cit7CisJUEFSQUxMRUxfQVBQTFlfVU5LTk9XTiA9IDAsCS8qIHVua25vd24gICov CisJUEFSQUxMRUxfQVBQTFlfU0FGRSwJCS8qIENhbiBhcHBseSBjaGFuZ2VzIGluIGFuIGFwcGx5 IGJhY2tncm91bmQKKwkJCQkJCQkJICAgd29ya2VyICovCisJUEFSQUxMRUxfQVBQTFlfVU5TQUZF CQkvKiBDYW4gbm90IGFwcGx5IGNoYW5nZXMgaW4gYW4gYXBwbHkgYmFja2dyb3VuZAorCQkJCQkJ CQkgICB3b3JrZXIgKi8KK30gUGFyYWxsZUFwcGx5U2FmZXR5OworCiB0eXBlZGVmIHN0cnVjdCBM b2dpY2FsUmVwUmVsTWFwRW50cnkKIHsKIAlMb2dpY2FsUmVwUmVsYXRpb24gcmVtb3RlcmVsOwkv KiBrZXkgaXMgcmVtb3RlcmVsLnJlbW90ZWlkICovCkBAIC0zMSw2ICs0NCw4IEBAIHR5cGVkZWYg c3RydWN0IExvZ2ljYWxSZXBSZWxNYXBFbnRyeQogCVJlbGF0aW9uCWxvY2FscmVsOwkJLyogcmVs Y2FjaGUgZW50cnkgKE5VTEwgd2hlbiBjbG9zZWQpICovCiAJQXR0ck1hcCAgICAqYXR0cm1hcDsJ CS8qIG1hcCBvZiBsb2NhbCBhdHRyaWJ1dGVzIHRvIHJlbW90ZSBvbmVzICovCiAJYm9vbAkJdXBk YXRhYmxlOwkJLyogQ2FuIGFwcGx5IHVwZGF0ZXMvZGVsZXRlcz8gKi8KKwlQYXJhbGxlQXBwbHlT YWZldHkJcGFyYWxsZWxfYXBwbHk7CS8qIENhbiBhcHBseSBjaGFuZ2VzIGluIGFuIGFwcGx5CisJ CQkJCQkJCQkJICAgYmFja2dyb3VuZCB3b3JrZXI/ICovCiAKIAkvKiBTeW5jIHN0YXRlLiAqLwog CWNoYXIJCXN0YXRlOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2Vy X2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaApp bmRleCBhMzU2MGQ0OTA0Li4xYzBkYjA1YzhhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 b3JrZXJfaW50ZXJuYWwuaApAQCAtMTk0LDYgKzE5NCw3IEBAIGV4dGVybiB2b2lkIGFwcGx5X2Jn d29ya2VyX2ZyZWUoQXBwbHlCZ3dvcmtlclN0YXRlICp3c3RhdGUpOwogZXh0ZXJuIHZvaWQgYXBw bHlfYmd3b3JrZXJfY2hlY2tfc3RhdHVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgYXBwbHlfYmd3b3Jr ZXJfc2V0X3N0YXR1cyhBcHBseUJnd29ya2VyU3RhdHVzIHN0YXR1cyk7CiBleHRlcm4gdm9pZCBh cHBseV9iZ3dvcmtlcl9zdWJ4YWN0X2luZm9fYWRkKFRyYW5zYWN0aW9uSWQgY3VycmVudF94aWQp OworZXh0ZXJuIHZvaWQgYXBwbHlfYmd3b3JrZXJfcmVsYXRpb25fY2hlY2soTG9naWNhbFJlcFJl bE1hcEVudHJ5ICpyZWwpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wKIGFtX3RhYmxlc3luY193b3Jr ZXIodm9pZCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3R5cGNhY2hlLmggYi9zcmMv aW5jbHVkZS91dGlscy90eXBjYWNoZS5oCmluZGV4IDQzMWFkN2YxYjMuLmVkN2MyZTdmNDggMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3R5cGNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvdHlwY2FjaGUuaApAQCAtMTk5LDYgKzE5OSw4IEBAIGV4dGVybiB1aW50NjQgYXNzaWdu X3JlY29yZF90eXBlX2lkZW50aWZpZXIoT2lkIHR5cGVfaWQsIGludDMyIHR5cG1vZCk7CiAKIGV4 dGVybiBpbnQJY29tcGFyZV92YWx1ZXNfb2ZfZW51bShUeXBlQ2FjaGVFbnRyeSAqdGNhY2hlLCBP aWQgYXJnMSwgT2lkIGFyZzIpOwogCitleHRlcm4gTGlzdCAqR2V0RG9tYWluQ29uc3RyYWludHMo T2lkIHR5cGVfaWQpOworCiBleHRlcm4gc2l6ZV90IFNoYXJlZFJlY29yZFR5cG1vZFJlZ2lzdHJ5 RXN0aW1hdGUodm9pZCk7CiAKIGV4dGVybiB2b2lkIFNoYXJlZFJlY29yZFR5cG1vZFJlZ2lzdHJ5 SW5pdChTaGFyZWRSZWNvcmRUeXBtb2RSZWdpc3RyeSAqLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv c3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwgYi9zcmMvdGVzdC9zdWJzY3Jp cHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbAppbmRleCAwYTQxNTJkM2JlLi4zMGEwMWY3 MzA1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2Fz Y2FkZS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2Fk ZS5wbApAQCAtMzksNiArMzksMTIgQEAgc3ViIHRlc3Rfc3RyZWFtaW5nCiAJCUFMVEVSIFNVQlND UklQVElPTiB0YXBfc3ViX0MKIAkJU0VUIChzdHJlYW1pbmcgPSAkc3RyZWFtaW5nX21vZGUpIik7 CiAKKwlpZiAoJHN0cmVhbWluZ19tb2RlIGVxICdwYXJhbGxlbCcpCisJeworCQkkbm9kZV9DLT5z YWZlX3BzcWwoCisJCQkncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF90YWIgQUxURVIgYyBE Uk9QIERFRkFVTFQiKTsKKwl9CisKIAkjIFdhaXQgZm9yIHN1YnNjcmliZXJzIHRvIGZpbmlzaCBp bml0aWFsaXphdGlvbgogCiAJJG5vZGVfQS0+cG9sbF9xdWVyeV91bnRpbCgKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9zdHJlYW1pbmdfYXBwbHkucGwgYi9zcmMvdGVz dC9zdWJzY3JpcHRpb24vdC8wMzJfc3RyZWFtaW5nX2FwcGx5LnBsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjdmOGJmYTY3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfc3RyZWFtaW5nX2FwcGx5LnBsCkBAIC0wLDAgKzEsMzgw IEBACisjIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKworIyBUZXN0IHRoZSByZXN0cmljdGlvbnMgb2Ygc3RyZWFtaW5nIG1vZGUgInBhcmFs bGVsIiBpbiBsb2dpY2FsIHJlcGxpY2F0aW9uCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkb2Zmc2V0ID0gMDsKKworIyBDcmVhdGUgcHVi bGlzaGVyIG5vZGUKK215ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXItPm5ldygncHVibGlzaGVyJyk7Ciskbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVh bWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfcHVibGlzaGVyLT5hcHBlbmRfY29uZigncG9zdGdy ZXNxbC5jb25mJywKKwknbG9naWNhbF9kZWNvZGluZ193b3JrX21lbSA9IDY0a0InKTsKKyRub2Rl X3B1Ymxpc2hlci0+c3RhcnQ7CisKKyMgQ3JlYXRlIHN1YnNjcmliZXIgbm9kZQorbXkgJG5vZGVf c3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicp OworJG5vZGVfc3Vic2NyaWJlci0+aW5pdDsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCisj IFNldHVwIHN0cnVjdHVyZSBvbiBwdWJsaXNoZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0ZXN0X3RhYiAoYSBpbnQgcHJpbWFyeSBrZXks IGIgdmFyY2hhcikiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IkNSRUFURSBUQUJMRSB0ZXN0X3RhYl9wYXJ0aXRpb25lZCAoYSBpbnQgcHJpbWFyeSBrZXksIGIg dmFyY2hhcikiKTsKKworIyBTZXR1cCBzdHJ1Y3R1cmUgb24gc3Vic2NyaWJlcgorIyBXZSBuZWVk IHRvIHRlc3Qgbm9ybWFsIHRhYmxlIGFuZCBwYXJ0aXRpb24gdGFibGUuCiskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRlc3RfdGFiIChhIGlu dCBwcmltYXJ5IGtleSwgYiB2YXJjaGFyKSIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0ZXN0X3RhYl9wYXJ0aXRpb25lZCAoYSBpbnQg cHJpbWFyeSBrZXksIGIgdmFyY2hhcikgUEFSVElUSU9OIEJZIFJBTkdFKGEpIik7Ciskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRlc3RfdGFi X3BhcnRpdGlvbiAoTElLRSB0ZXN0X3RhYl9wYXJ0aXRpb25lZCkiKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3RhYl9wYXJ0aXRp b25lZCBBVFRBQ0ggUEFSVElUSU9OIHRlc3RfdGFiX3BhcnRpdGlvbiBERUZBVUxUIgorKTsKKwor IyBTZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uCitteSAkcHVibGlzaGVyX2Nvbm5zdHIgPSAkbm9k ZV9wdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBG T1IgVEFCTEUgdGVzdF90YWIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnRpdGlvbmVkIEZPUiBUQUJMRSB0 ZXN0X3RhYl9wYXJ0aXRpb25lZCIpOworCitteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCAiCisJQ1JFQVRFIFNVQlNDUklQ VElPTiB0YXBfc3ViCisJQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9u X25hbWU9JGFwcG5hbWUnCisJUFVCTElDQVRJT04gdGFwX3B1YiwgdGFwX3B1Yl9wYXJ0aXRpb25l ZAorCVdJVEggKHN0cmVhbWluZyA9IHBhcmFsbGVsLCBjb3B5X2RhdGEgPSBmYWxzZSkiKTsKKwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyBJdCBpcyBu b3QgYWxsb3dlZCB0aGF0IHRoZSB1bmlxdWUgaW5kZXggb24gdGhlIHB1Ymxpc2hlciBhbmQgdGhl IHN1YnNjcmliZXIKKyMgaXMgZGlmZmVyZW50LiBDaGVjayB0aGUgZXJyb3IgcmVwb3J0ZWQgYnkg YmFja2dyb3VuZCB3b3JrZXIgaW4gdGhpcyBjYXNlLgorIyBGaXJzdCB3ZSBjaGVjayB0aGUgdW5p cXVlIGluZGV4IG9uIG5vcm1hbCB0YWJsZS4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJDUkVBVEUgVU5JUVVFIElOREVYIHRlc3RfdGFiX2JfaWR4IE9OIHRlc3Rf dGFiIChiKSIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJ TlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDUwMDApIHMoaSkiCispOworCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9s b2coCisJcXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGNhbm5vdCByZXBsaWNhdGUgdGFyZ2V0IHJl bGF0aW9uICJwdWJsaWMudGVzdF90YWIiIHVzaW5nIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIgc3Ry ZWFtaW5nPXBhcmFsbGVsLywKKwkkb2Zmc2V0KTsKKworIyBEcm9wIHRoZSB1bmlxdWUgaW5kZXgg b24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jrcy4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBJTkRFWCB0ZXN0X3RhYl9iX2lkeCIpOworCiskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCitteSAkcmVzdWx0ID0KKyAg JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg RlJPTSB0ZXN0X3RhYiIpOworaXMoJHJlc3VsdCwgcXEoNTAwMCksICdkYXRhIHJlcGxpY2F0ZWQg dG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBpbmRleCcpOworCisjIFRoZW4gd2UgY2hlY2sg dGhlIHVuaXF1ZSBpbmRleCBvbiBwYXJ0aXRpb24gdGFibGUuCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFVOSVFVRSBJTkRFWCB0ZXN0X3RhYl9iX3Bh cnRpdGlvbl9pZHggT04gdGVzdF90YWJfcGFydGl0aW9uIChiKSIpOworCisjIENoZWNrIHRoZSBz dWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVy LT5sb2dmaWxlOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJ TlNFUlQgSU5UTyB0ZXN0X3RhYl9wYXJ0aXRpb25lZCBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSkiCispOworCiskbm9kZV9zdWJzY3JpYmVy LT53YWl0X2Zvcl9sb2coCisJcXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGNhbm5vdCByZXBsaWNh dGUgdGFyZ2V0IHJlbGF0aW9uICJwdWJsaWMudGVzdF90YWJfcGFydGl0aW9uZWQiIHVzaW5nIHN1 YnNjcmlwdGlvbiBwYXJhbWV0ZXIgc3RyZWFtaW5nPXBhcmFsbGVsLywKKwkkb2Zmc2V0KTsKKwor IyBEcm9wIHRoZSB1bmlxdWUgaW5kZXggb24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jrcy4K KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBJTkRFWCB0ZXN0 X3RhYl9iX3BhcnRpdGlvbl9pZHgiKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lKTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWJfcGFydGl0aW9uZWQi KTsKK2lzKCRyZXN1bHQsIHFxKDUwMDApLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIg YWZ0ZXIgZHJvcHBpbmcgaW5kZXgnKTsKKworIyBUcmlnZ2VycyB3aGljaCBleGVjdXRlIG5vbi1p bW11dGFibGUgZnVuY3Rpb24gYXJlIG5vdCBhbGxvd2VkIG9uIHRoZQorIyBzdWJzY3JpYmVyIHNp ZGUuIENoZWNrIHRoZSBlcnJvciByZXBvcnRlZCBieSBiYWNrZ3JvdW5kIHdvcmtlciBpbiB0aGlz IGNhc2UuCisjIEZpcnN0IHdlIGNoZWNrIHRoZSB0cmlnZ2VyIGZ1bmN0aW9uIG9uIG5vcm1hbCB0 YWJsZS4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcXsKK0NS RUFURSBGVU5DVElPTiB0cmlnZ2VyX2Z1bmMoKSBSRVRVUk5TIFRSSUdHRVIgQVMgXCRcJAorICBC RUdJTgorICAgIFJFVFVSTiBOVUxMOworICBFTkQKK1wkXCQgbGFuZ3VhZ2UgcGxwZ3NxbDsKK0NS RUFURSBUUklHR0VSIGluc2VydF90cmlnCitCRUZPUkUgSU5TRVJUIE9OIHRlc3RfdGFiCitGT1Ig RUFDSCBST1cgRVhFQ1VURSBQUk9DRURVUkUgdHJpZ2dlcl9mdW5jKCk7CitBTFRFUiBUQUJMRSB0 ZXN0X3RhYiBFTkFCTEUgUkVQTElDQSBUUklHR0VSIGluc2VydF90cmlnOworfSk7CisKKyMgQ2hl Y2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1 YnNjcmliZXItPmxvZ2ZpbGU7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiIpOworCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zv cl9sb2coCisJcXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGNhbm5vdCByZXBsaWNhdGUgdGFyZ2V0 IHJlbGF0aW9uICJwdWJsaWMudGVzdF90YWIiIHVzaW5nIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIg c3RyZWFtaW5nPXBhcmFsbGVsLywKKwkkb2Zmc2V0KTsKKworIyBEcm9wIHRoZSB0cmlnZ2VyIG9u IHRoZSBzdWJzY3JpYmVyLCBub3cgaXQgd29ya3MuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiRFJPUCBUUklHR0VSIGluc2VydF90cmlnIE9OIHRlc3RfdGFiIik7 CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKyRyZXN1 bHQgPQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBGUk9NIHRlc3RfdGFiIik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ2RhdGEgcmVwbGlj YXRlZCB0byBzdWJzY3JpYmVyIGFmdGVyIGRyb3BwaW5nIHRyaWdnZXInKTsKKworIyBUaGVuIHdl IGNoZWNrIHRoZSB0cmlnZ2VyIGZ1bmN0aW9uIG9uIHBhcnRpdGlvbiB0YWJsZS4KKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcXsKK0NSRUFURSBUUklHR0VSIGlu c2VydF90cmlnCitCRUZPUkUgSU5TRVJUIE9OIHRlc3RfdGFiX3BhcnRpdGlvbgorRk9SIEVBQ0gg Uk9XIEVYRUNVVEUgUFJPQ0VEVVJFIHRyaWdnZXJfZnVuYygpOworQUxURVIgVEFCTEUgdGVzdF90 YWJfcGFydGl0aW9uIEVOQUJMRSBSRVBMSUNBIFRSSUdHRVIgaW5zZXJ0X3RyaWc7Cit9KTsKKwor IyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCiskb2Zmc2V0ID0gLXMgJG5v ZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfdGFiX3BhcnRpdGlvbmVkIik7CisKKyRub2RlX3N1 YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwlxci9FUlJPUjogKCBbQS1aMC05XSs6KT8gY2Fubm90 IHJlcGxpY2F0ZSB0YXJnZXQgcmVsYXRpb24gInB1YmxpYy50ZXN0X3RhYl9wYXJ0aXRpb25lZCIg dXNpbmcgc3Vic2NyaXB0aW9uIHBhcmFtZXRlciBzdHJlYW1pbmc9cGFyYWxsZWwvLAorCSRvZmZz ZXQpOworCisjIERyb3AgdGhlIHRyaWdnZXIgb24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jr cy4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJEUk9QIFRSSUdH RVIgaW5zZXJ0X3RyaWcgT04gdGVzdF90YWJfcGFydGl0aW9uIik7CisKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKyRyZXN1bHQgPQorICAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3Rf dGFiX3BhcnRpdGlvbmVkIik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ2RhdGEgcmVwbGljYXRlZCB0 byBzdWJzY3JpYmVyIGFmdGVyIGRyb3BwaW5nIHRyaWdnZXInKTsKKworIyBJdCBpcyBub3QgYWxs b3dlZCB0aGF0IGNvbHVtbiBkZWZhdWx0IHZhbHVlIGV4cHJlc3Npb24gY29udGFpbnMgYQorIyBu b24taW1tdXRhYmxlIGZ1bmN0aW9uIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIENoZWNrIHRoZSBl cnJvciByZXBvcnRlZCBieQorIyBiYWNrZ3JvdW5kIHdvcmtlciBpbiB0aGlzIGNhc2UuCisjIEZp cnN0IHdlIGNoZWNrIHRoZSBjb2x1bW4gZGVmYXVsdCB2YWx1ZSBleHByZXNzaW9uIG9uIG5vcm1h bCB0YWJsZS4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRF UiBUQUJMRSB0ZXN0X3RhYiBBTFRFUiBDT0xVTU4gYiBTRVQgREVGQVVMVCByYW5kb20oKSIpOwor CisjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAk bm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSkiCispOworCiskbm9kZV9zdWJzY3Jp YmVyLT53YWl0X2Zvcl9sb2coCisJcXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGNhbm5vdCByZXBs aWNhdGUgdGFyZ2V0IHJlbGF0aW9uICJwdWJsaWMudGVzdF90YWIiIHVzaW5nIHN1YnNjcmlwdGlv biBwYXJhbWV0ZXIgc3RyZWFtaW5nPXBhcmFsbGVsLywKKwkkb2Zmc2V0KTsKKworIyBEcm9wIGRl ZmF1bHQgdmFsdWUgb24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jrcy4KKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBTFRF UiBDT0xVTU4gYiBEUk9QIERFRkFVTFQiKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lKTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWIiKTsKK2lzKCRy ZXN1bHQsIHFxKDUwMDApLAorCSdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBk cm9wcGluZyBkZWZhdWx0IHZhbHVlIGV4cHJlc3Npb24nKTsKKworIyBUaGVuIHdlIGNoZWNrIHRo ZSBjb2x1bW4gZGVmYXVsdCB2YWx1ZSBleHByZXNzaW9uIG9uIHBhcnRpdGlvbiB0YWJsZS4KKyRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0 X3RhYl9wYXJ0aXRpb24gQUxURVIgQ09MVU1OIGIgU0VUIERFRkFVTFQgcmFuZG9tKCkiKTsKKwor IyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCiskb2Zmc2V0ID0gLXMgJG5v ZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGVzdF90YWJfcGFydGl0aW9uZWQgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkpIgorKTsKKworJG5v ZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCXFyL0VSUk9SOiAoIFtBLVowLTldKzopPyBj YW5ub3QgcmVwbGljYXRlIHRhcmdldCByZWxhdGlvbiAicHVibGljLnRlc3RfdGFiX3BhcnRpdGlv bmVkIiB1c2luZyBzdWJzY3JpcHRpb24gcGFyYW1ldGVyIHN0cmVhbWluZz1wYXJhbGxlbC8sCisJ JG9mZnNldCk7CisKKyMgRHJvcCBkZWZhdWx0IHZhbHVlIG9uIHRoZSBzdWJzY3JpYmVyLCBub3cg aXQgd29ya3MuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxU RVIgVEFCTEUgdGVzdF90YWJfcGFydGl0aW9uIEFMVEVSIENPTFVNTiBiIERST1AgREVGQVVMVCIp OworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCiskcmVz dWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y291bnQoKikgRlJPTSB0ZXN0X3RhYl9wYXJ0aXRpb25lZCIpOworaXMoJHJlc3VsdCwgcXEoNTAw MCksCisJJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyIGFmdGVyIGRyb3BwaW5nIGRlZmF1 bHQgdmFsdWUgZXhwcmVzc2lvbicpOworCisjIEl0IGlzIG5vdCBhbGxvd2VkIHRoYXQgZG9tYWlu IGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBjb250YWlucyBhIG5vbi1pbW11dGFibGUKKyMgZnVuY3Rp b24gb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gQ2hlY2sgdGhlIGVycm9yIHJlcG9ydGVkIGJ5IGJh Y2tncm91bmQKKyMgd29ya2VyIGluIHRoaXMgY2FzZS4KKyMgQmVjYXVzZSB0aGUgY29sdW1uIHR5 cGUgb2YgdGhlIHBhcnRpdGlvbiB0YWJsZSBtdXN0IGJlIHRoZSBzYW1lIGFzIGl0cyBwYXJlbnQK KyMgdGFibGUsIG9ubHkgdGVzdCBub3JtYWwgdGFibGUgaGVyZS4KKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcXsKK0NSRUFURSBET01BSU4gdGVzdF9kb21haW4g QVMgaW50IENIRUNLKFZBTFVFID4gcmFuZG9tKCkpOworQUxURVIgVEFCTEUgdGVzdF90YWIgQUxU RVIgQ09MVU1OIGEgVFlQRSB0ZXN0X2RvbWFpbjsKK30pOworCisjIENoZWNrIHRoZSBzdWJzY3Jp YmVyIGxvZyBmcm9tIG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dm aWxlOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZS T00gdGVzdF90YWIiKTsKKworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCXFyL0VS Uk9SOiAoIFtBLVowLTldKzopPyBjYW5ub3QgcmVwbGljYXRlIHRhcmdldCByZWxhdGlvbiAicHVi bGljLnRlc3RfdGFiIiB1c2luZyBzdWJzY3JpcHRpb24gcGFyYW1ldGVyIHN0cmVhbWluZz1wYXJh bGxlbC8sCisJJG9mZnNldCk7CisKKyMgRHJvcCBkb21haW4gY29uc3RyYWludCBleHByZXNzaW9u IG9uIHRoZSBzdWJzY3JpYmVyLCBub3cgaXQgd29ya3MuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgVEFCTEUgdGVzdF90YWIgQUxURVIgQ09MVU1OIGEg VFlQRSBpbnQiKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWIiKTsKK2lzKCRyZXN1bHQsIHFxKDApLAor CSdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBkb21haW4gY29u c3RyYWludCBleHByZXNzaW9uJworKTsKKworIyBJdCBpcyBub3QgYWxsb3dlZCB0aGF0IGNvbnN0 cmFpbnQgZXhwcmVzc2lvbiBjb250YWlucyBhIG5vbi1pbW11dGFibGUgZnVuY3Rpb24KKyMgb24g dGhlIHN1YnNjcmliZXIgc2lkZS4gQ2hlY2sgdGhlIGVycm9yIHJlcG9ydGVkIGJ5IGJhY2tncm91 bmQgd29ya2VyIGluIHRoaXMKKyMgY2FzZS4KKyMgRmlyc3Qgd2UgY2hlY2sgdGhlIGNvbnN0cmFp bnQgZXhwcmVzc2lvbiBvbiBub3JtYWwgdGFibGUuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoCisJJ3Bvc3RncmVzJywgcXF7CitBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09OU1RSQUlO VCB0ZXN0X3RhYl9jb24gY2hlY2sgKGEgPiByYW5kb20oKSk7Cit9KTsKKworIyBDaGVjayB0aGUg c3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCiskb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJl ci0+bG9nZmlsZTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCA1MDAwKSBzKGkpIgorKTsKKworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jf bG9nKAorCXFyL0VSUk9SOiAoIFtBLVowLTldKzopPyBjYW5ub3QgcmVwbGljYXRlIHRhcmdldCBy ZWxhdGlvbiAicHVibGljLnRlc3RfdGFiIiB1c2luZyBzdWJzY3JpcHRpb24gcGFyYW1ldGVyIHN0 cmVhbWluZz1wYXJhbGxlbC8sCisJJG9mZnNldCk7CisKKyMgRHJvcCBjb25zdHJhaW50IG9uIHRo ZSBzdWJzY3JpYmVyLCBub3cgaXQgd29ya3MuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiQUxURVIgVEFCTEUgdGVzdF90YWIgRFJPUCBDT05TVFJBSU5UIHRlc3Rf dGFiX2NvbiIpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYiIpOworaXMoJHJlc3VsdCwgcXEoNTAwMCks CisJJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyIGFmdGVyIGRyb3BwaW5nIGNvbnN0cmFp bnQgZXhwcmVzc2lvbicpOworCisjIFRoZW4gd2UgY2hlY2sgdGhlIGNvbnN0cmFpbnQgZXhwcmVz c2lvbiBvbiBwYXJ0aXRpb24gdGFibGUuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJ J3Bvc3RncmVzJywgcXF7CitBTFRFUiBUQUJMRSB0ZXN0X3RhYl9wYXJ0aXRpb24gQUREIENPTlNU UkFJTlQgdGVzdF90YWJfY29uIGNoZWNrIChhID4gcmFuZG9tKCkpOworfSk7CisKKyMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJERUxFVEUgRlJPTSB0ZXN0X3RhYl9wYXJ0aXRpb25lZCIpOworCiskbm9kZV9zdWJzY3JpYmVy LT53YWl0X2Zvcl9sb2coCisJcXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGNhbm5vdCByZXBsaWNh dGUgdGFyZ2V0IHJlbGF0aW9uICJwdWJsaWMudGVzdF90YWJfcGFydGl0aW9uZWQiIHVzaW5nIHN1 YnNjcmlwdGlvbiBwYXJhbWV0ZXIgc3RyZWFtaW5nPXBhcmFsbGVsLywKKwkkb2Zmc2V0KTsKKwor IyBEcm9wIGNvbnN0cmFpbnQgb24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jrcy4KKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3Rh Yl9wYXJ0aXRpb24gRFJPUCBDT05TVFJBSU5UIHRlc3RfdGFiX2NvbiIpOworCiskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCiskcmVzdWx0ID0KKyAgJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0 ZXN0X3RhYl9wYXJ0aXRpb25lZCIpOworaXMoJHJlc3VsdCwgcXEoMCksCisJJ2RhdGEgcmVwbGlj YXRlZCB0byBzdWJzY3JpYmVyIGFmdGVyIGRyb3BwaW5nIGNvbnN0cmFpbnQgZXhwcmVzc2lvbicp OworCisjIEl0IGlzIG5vdCBhbGxvd2VkIHRoYXQgZm9yZWlnbiBrZXkgb24gdGhlIHN1YnNjcmli ZXIgc2lkZS4gQ2hlY2sgdGhlIGVycm9yCisjIHJlcG9ydGVkIGJ5IGJhY2tncm91bmQgd29ya2Vy IGluIHRoaXMgY2FzZS4KKyMgRmlyc3Qgd2UgY2hlY2sgdGhlIGZvcmVpZ24ga2V5IG9uIG5vcm1h bCB0YWJsZS4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUg RlJPTSB0ZXN0X3RhYiIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcXsKK0NS RUFURSBUQUJMRSB0ZXN0X3RhYl9mIChhIGludCBwcmltYXJ5IGtleSk7CitBTFRFUiBUQUJMRSB0 ZXN0X3RhYiBBREQgQ09OU1RSQUlOVCB0ZXN0X3RhYmZrIEZPUkVJR04gS0VZKGEpIFJFRkVSRU5D RVMgdGVzdF90YWJfZihhKTsKK30pOworCisjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9t IG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMo aSkiCispOworCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJcXIvRVJST1I6ICgg W0EtWjAtOV0rOik/IGNhbm5vdCByZXBsaWNhdGUgdGFyZ2V0IHJlbGF0aW9uICJwdWJsaWMudGVz dF90YWIiIHVzaW5nIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIgc3RyZWFtaW5nPXBhcmFsbGVsLywK Kwkkb2Zmc2V0KTsKKworIyBEcm9wIHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50IG9uIHRoZSBz dWJzY3JpYmVyLCBub3cgaXQgd29ya3MuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQUxURVIgVEFCTEUgdGVzdF90YWIgRFJPUCBDT05TVFJBSU5UIHRlc3RfdGFi ZmsiKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKwor JHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIEZST00gdGVzdF90YWIiKTsKK2lzKCRyZXN1bHQsIHFxKDUwMDApLAorCSdk YXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyB0aGUgZm9yZWlnbiBr ZXknKTsKKworIyBUaGVuIHdlIGNoZWNrIHRoZSBmb3JlaWduIGtleSBvbiBwYXJ0aXRpb24gdGFi bGUuCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxeworQ1JFQVRFIFRBQkxFIHRl c3RfdGFiX3BhcnRpdGlvbl9mIChhIGludCBwcmltYXJ5IGtleSk7CitBTFRFUiBUQUJMRSB0ZXN0 X3RhYl9wYXJ0aXRpb24gQUREIENPTlNUUkFJTlQgdGVzdF90YWJfcGF0aXRpb25fZmsgRk9SRUlH TiBLRVkoYSkgUkVGRVJFTkNFUyB0ZXN0X3RhYl9wYXJ0aXRpb25fZihhKTsKK30pOworCisjIENo ZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9z dWJzY3JpYmVyLT5sb2dmaWxlOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYl9wYXJ0aXRpb25lZCBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSkiCispOworCiskbm9kZV9z dWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJcXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGNhbm5v dCByZXBsaWNhdGUgdGFyZ2V0IHJlbGF0aW9uICJwdWJsaWMudGVzdF90YWJfcGFydGl0aW9uZWQi IHVzaW5nIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIgc3RyZWFtaW5nPXBhcmFsbGVsLywKKwkkb2Zm c2V0KTsKKworIyBEcm9wIHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50IG9uIHRoZSBzdWJzY3Jp YmVyLCBub3cgaXQgd29ya3MuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiQUxURVIgVEFCTEUgdGVzdF90YWJfcGFydGl0aW9uIERST1AgQ09OU1RSQUlOVCB0ZXN0 X3RhYl9wYXRpdGlvbl9mayIpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWUpOworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYl9wYXJ0aXRpb25lZCIpOwor aXMoJHJlc3VsdCwgcXEoNTAwMCksCisJJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyIGFm dGVyIGRyb3BwaW5nIHRoZSBmb3JlaWduIGtleScpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9w OworJG5vZGVfcHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKaW5kZXggNDEzN2RjNzdiNC4uNjk3ZTZhN2JhMyAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTE4OTEsNiArMTg5MSw3IEBAIFBhZ2VYTG9nUmVjUHRyCiBQYWdldGFi bGVFbnRyeQogUGFpcnMKIFBhcmFsbGVsQXBwZW5kU3RhdGUKK1BhcmFsbGVsQXBwbHlTYWZldHkK IFBhcmFsbGVsQml0bWFwSGVhcFN0YXRlCiBQYXJhbGxlbEJsb2NrVGFibGVTY2FuRGVzYwogUGFy YWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlcgotLSAKMi4yMy4wLndpbmRvd3MuMQoK --_005_OS3PR01MB62758A6AAED27B3A848CEB7A9E8F9OS3PR01MB6275jpnp_ Content-Type: application/octet-stream; name="v18-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch" Content-Description: v18-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch Content-Disposition: attachment; filename="v18-0004-Retry-to-apply-streaming-xact-only-in-apply-work.patch"; size=29864; creation-date="Tue, 19 Jul 2022 02:25:00 GMT"; modification-date="Tue, 19 Jul 2022 02:28:42 GMT" Content-Transfer-Encoding: base64 RnJvbSAyMGY5ZjVhOGVjYWQ0NGY4YWI3NjFhOTA3OGI0ZTAwZDUyZGU1YmMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB3YW5ndyA8d2FuZ3cuZm5zdEBmdWppdHN1LmNvbT4KRGF0ZTog V2VkLCAxNSBKdW4gMjAyMiAxMTowMjowOCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjE4IDQvNF0g UmV0cnkgdG8gYXBwbHkgc3RyZWFtaW5nIHhhY3Qgb25seSBpbiBhcHBseSB3b3JrZXIKCldoZW4g dGhlIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIgaXMgc2V0IHN0cmVhbWluZz1wYXJhbGxlbCwgdGhl IGxvZ2ljIHRyaWVzIHRvCmFwcGx5IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdXNpbmcgYW4g YXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuIElmIHRoaXMKZmFpbHMgdGhlIGJhY2tncm91bmQgd29y a2VyIGV4aXRzIHdpdGggYW4gZXJyb3IuCgpJbiB0aGlzIGNhc2UsIHJldHJ5IGFwcGx5aW5nIHRo ZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIG5vcm1hbApzdHJlYW1pbmc9b24gbW9k ZS4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIGdldHRpbmcgY2F1Z2h0IGluIGEgbG9vcCBvZiB0aGUg c2FtZQpyZXRyeSBlcnJvcnMuCgpBIG5ldyBmbGFnIGZpZWxkICJzdWJyZXRyeSIgaGFzIGJlZW4g aW50cm9kdWNlZCB0byBjYXRhbG9nICJwZ19zdWJzY3JpcHRpb24iLgpJZiB0aGUgc3Vic2NyaWJl ciBleGl0cyB3aXRoIGFuIGVycm9yLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgdHJ1ZSwgYW5kCndo ZW5ldmVyIHRoZSB0cmFuc2FjdGlvbiBpcyBhcHBsaWVkIHN1Y2Nlc3NmdWxseSwgdGhpcyBmbGFn IGlzIHJlc2V0IGZhbHNlLgpOb3csIHdoZW4gZGVjaWRpbmcgaG93IHRvIGFwcGx5IGEgc3RyZWFt aW5nIHRyYW5zYWN0aW9uLCB0aGUgbG9naWMgY2FuIGtub3cgaWYKdGhpcyB0cmFuc2FjdGlvbiBo YXMgcHJldmlvdXNseSBmYWlsZWQgb3Igbm90IChieSBjaGVja2luZyB0aGUgInN1YnJldHJ5Igpm aWVsZCkuCi0tLQogZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgICAgICAgICAgICAgICAgICAg IHwgICA5ICsKIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sICAgICB8 ICAgNSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5jICAgICAgICAgfCAg IDEgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsICAgICAgICAgIHwgICA0 ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgICAgICAgfCAgIDEg KwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHliZ3dvcmtlci5jICAgICAgIHwgIDE2ICst CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgfCAxNjUgKysr KysrKysrKysrKy0tLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAg ICAgICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmggICAg ICAgICB8ICAgNCArCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDMyX3N0cmVhbWluZ19hcHBseS5wbCAg ICAgfCAxNTQgKysrKysrKysrLS0tLS0tLQogMTAgZmlsZXMgY2hhbmdlZCwgMjU0IGluc2VydGlv bnMoKyksIDExMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxv Z3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IDEzYzllOGVjYTEuLjgx NmJjZmUwODkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCkBAIC03OTA3LDYgKzc5MDcsMTUgQEAgU0NSQU0tU0hB LTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8 cmVwbGFjZWFibGU+JmwKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KIAorICAg ICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJv bGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+c3VicmV0cnk8L3N0 cnVjdGZpZWxkPiA8dHlwZT5ib29sPC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+ CisgICAgICAgVHJ1ZSBpZiB0aGUgcHJldmlvdXMgYXBwbHkgY2hhbmdlIGZhaWxlZCwgbmVjZXNz aXRhdGluZyBhIHJldHJ5CisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKICAg ICAgPHJvdz4KICAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSBy b2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CiAgICAgICAgPHN0cnVjdGZpZWxkPnN1YmNvbm5pbmZv PC9zdHJ1Y3RmaWVsZD4gPHR5cGU+dGV4dDwvdHlwZT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVf c3Vic2NyaXB0aW9uLnNnbWwKaW5kZXggYmZkMTg5NTA4Ny4uMjQwYTgzMzFhMCAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwKQEAgLTI0NCw2ICsyNDQsMTEgQEAg Q1JFQVRFIFNVQlNDUklQVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3Vic2Ny aXB0aW9uX25hbWU8L3JlcGxhY2VhYmwKICAgICAgICAgICBjb2x1bW4gaW4gdGhlIHJlbGF0aW9u IG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUgc2hvdWxkIGFsc28gYmUgdGhlCiAgICAgICAgICAgdW5p cXVlIGNvbHVtbiBvbiB0aGUgcHVibGlzaGVyLXNpZGU7IDIpIHRoZXJlIGNhbm5vdCBiZSBhbnkK ICAgICAgICAgICBub24taW1tdXRhYmxlIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBzdWJzY3JpYmVy LXNpZGUgcmVwbGljYXRlZCB0YWJsZS4KKyAgICAgICAgICBXaGVuIGFwcGx5aW5nIGEgc3RyZWFt aW5nIHRyYW5zYWN0aW9uLCBpZiBlaXRoZXIgcmVxdWlyZW1lbnQgaXMgbm90CisgICAgICAgICAg bWV0LCB0aGUgYmFja2dyb3VuZCB3b3JrZXIgd2lsbCBleGl0IHdpdGggYW4gZXJyb3IuCisgICAg ICAgICAgPGxpdGVyYWw+cGFyYWxsZWw8L2xpdGVyYWw+IG1vZGUgaXMgZGlzcmVnYXJkZWQgd2hl biByZXRyeWluZzsKKyAgICAgICAgICBpbnN0ZWFkIHRoZSB0cmFuc2FjdGlvbiB3aWxsIGJlIGFw cGxpZWQgdXNpbmcgPGxpdGVyYWw+b248L2xpdGVyYWw+CisgICAgICAgICAgbW9kZS4KICAgICAg ICAgIDwvcGFyYT4KICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5jCmluZGV4IDg4NTZjZTNiNTAuLjliN2Yw OTY1M2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMK KysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uYwpAQCAtNzEsNiArNzEs NyBAQCBHZXRTdWJzY3JpcHRpb24oT2lkIHN1YmlkLCBib29sIG1pc3Npbmdfb2spCiAJc3ViLT5z dHJlYW0gPSBzdWJmb3JtLT5zdWJzdHJlYW07CiAJc3ViLT50d29waGFzZXN0YXRlID0gc3ViZm9y bS0+c3VidHdvcGhhc2VzdGF0ZTsKIAlzdWItPmRpc2FibGVvbmVyciA9IHN1YmZvcm0tPnN1YmRp c2FibGVvbmVycjsKKwlzdWItPnJldHJ5ID0gc3ViZm9ybS0+c3VicmV0cnk7CiAKIAkvKiBHZXQg Y29ubmluZm8gKi8KIAlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihTVUJTQ1JJUFRJT05PSUQsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKaW5kZXggZmVkYWVkNTMzYi4uMTBmNGRkNjc4 NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTI5OCw4ICsxMjk4LDgg QEAgUkVWT0tFIEFMTCBPTiBwZ19yZXBsaWNhdGlvbl9vcmlnaW5fc3RhdHVzIEZST00gcHVibGlj OwogLS0gQWxsIGNvbHVtbnMgb2YgcGdfc3Vic2NyaXB0aW9uIGV4Y2VwdCBzdWJjb25uaW5mbyBh cmUgcHVibGljbHkgcmVhZGFibGUuCiBSRVZPS0UgQUxMIE9OIHBnX3N1YnNjcmlwdGlvbiBGUk9N IHB1YmxpYzsKIEdSQU5UIFNFTEVDVCAob2lkLCBzdWJkYmlkLCBzdWJza2lwbHNuLCBzdWJuYW1l LCBzdWJvd25lciwgc3ViZW5hYmxlZCwKLSAgICAgICAgICAgICAgc3ViYmluYXJ5LCBzdWJzdHJl YW0sIHN1YnR3b3BoYXNlc3RhdGUsIHN1YmRpc2FibGVvbmVyciwgc3Vic2xvdG5hbWUsCi0gICAg ICAgICAgICAgIHN1YnN5bmNjb21taXQsIHN1YnB1YmxpY2F0aW9ucykKKyAgICAgICAgICAgICAg c3ViYmluYXJ5LCBzdWJzdHJlYW0sIHN1YnR3b3BoYXNlc3RhdGUsIHN1YmRpc2FibGVvbmVyciwK KyAgICAgICAgICAgICAgc3VicmV0cnksIHN1YnNsb3RuYW1lLCBzdWJzeW5jY29tbWl0LCBzdWJw dWJsaWNhdGlvbnMpCiAgICAgT04gcGdfc3Vic2NyaXB0aW9uIFRPIHB1YmxpYzsKIAogQ1JFQVRF IFZJRVcgcGdfc3RhdF9zdWJzY3JpcHRpb25fc3RhdHMgQVMKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1 YnNjcmlwdGlvbmNtZHMuYwppbmRleCBkNGIyNjE2ZWU2Li42MTJhODMzOTNhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC02NjIsNiArNjYyLDcgQEAgQ3JlYXRl U3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAq c3RtdCwKIAkJCQkJIExPR0lDQUxSRVBfVFdPUEhBU0VfU1RBVEVfUEVORElORyA6CiAJCQkJCSBM T0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX0RJU0FCTEVEKTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJz Y3JpcHRpb25fc3ViZGlzYWJsZW9uZXJyIC0gMV0gPSBCb29sR2V0RGF0dW0ob3B0cy5kaXNhYmxl b25lcnIpOworCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJyZXRyeSAtIDFdID0gQm9v bEdldERhdHVtKGZhbHNlKTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3ViY29ubmlu Zm8gLSAxXSA9CiAJCUNTdHJpbmdHZXRUZXh0RGF0dW0oY29ubmluZm8pOwogCWlmIChvcHRzLnNs b3RfbmFtZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBw bHliZ3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseWJnd29y a2VyLmMKaW5kZXggODljNzEyZjc4NS4uNWQ3YjU1ZTVhYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseWJnd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9hcHBseWJnd29ya2VyLmMKQEAgLTEwNiw2ICsxMDYsMTggQEAg YXBwbHlfYmd3b3JrZXJfY2FuX3N0YXJ0KFRyYW5zYWN0aW9uSWQgeGlkKQogCWlmICghWExvZ1Jl Y1B0cklzSW52YWxpZChNeVN1YnNjcmlwdGlvbi0+c2tpcGxzbikpCiAJCXJldHVybiBmYWxzZTsK IAorCS8qCisJICogRG9uJ3QgdXNlIGFwcGx5IGJhY2tncm91bmQgd29ya2VycyBmb3IgcmV0cmll cywgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZQorCSAqIHRoYXQgdGhlIGxhc3QgdGltZSB3ZSB0cmll ZCB0byBhcHBseSBhIHRyYW5zYWN0aW9uIHVzaW5nIGFuIGFwcGx5CisJICogYmFja2dyb3VuZCB3 b3JrZXIgdGhlIGNoZWNrcyBmYWlsZWQgKHNlZSBmdW5jdGlvbgorCSAqIGFwcGx5X2Jnd29ya2Vy X3JlbGF0aW9uX2NoZWNrKS4KKwkgKi8KKwlpZiAoTXlTdWJzY3JpcHRpb24tPnJldHJ5KQorCXsK KwkJZWxvZyhERUJVRzEsICJhcHBseSBiYWNrZ3JvdW5kIHdvcmtlcnMgYXJlIG5vdCB1c2VkIGZv ciByZXRyaWVzIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKIAkvKgogCSAqIEZvciBzdHJlYW1p bmcgdHJhbnNhY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGFwcGxpZWQgaW4gYXBwbHkgYmFja2dyb3Vu ZAogCSAqIHdvcmtlciwgd2UgY2Fubm90IGRlY2lkZSB3aGV0aGVyIHRvIGFwcGx5IHRoZSBjaGFu Z2UgZm9yIGEgcmVsYXRpb24KQEAgLTg0MCw3ICs4NTIsNSBAQCBhcHBseV9iZ3dvcmtlcl9yZWxh dGlvbl9jaGVjayhMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbCkKIAkJCQkJcmVsLT5yZW1vdGVy ZWwubnNwbmFtZSwgcmVsLT5yZW1vdGVyZWwucmVsbmFtZSksCiAJCQkgZXJyZGV0YWlsKCJUaGUg dW5pcXVlIGNvbHVtbiBvbiBzdWJzY3JpYmVyIGlzIG5vdCB0aGUgdW5pcXVlICIKIAkJCQkJICAg ImNvbHVtbiBvbiBwdWJsaXNoZXIgb3IgdGhlcmUgaXMgYXQgbGVhc3Qgb25lICIKLQkJCQkJICAg Im5vbi1pbW11dGFibGUgZnVuY3Rpb24uIiksCi0JCQkgZXJyaGludCgiUGxlYXNlIGNoYW5nZSB0 byB1c2Ugc3Vic2NyaXB0aW9uIHBhcmFtZXRlciAiCi0JCQkJCSAic3RyZWFtaW5nPW9uLiIpKSk7 CisJCQkJCSAgICJub24taW1tdXRhYmxlIGZ1bmN0aW9uLiIpKSk7CiB9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCAyMjE2ZjZmM2E3Li45NjM1YTEyZmVhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTM3OSw2ICszNzks OCBAQCBzdGF0aWMgdm9pZCBjbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24oWExvZ1JlY1B0ciBm aW5pc2hfbHNuKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94 YWN0KFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbik7CiBzdGF0aWMgaW5saW5lIHZv aWQgcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKHZvaWQpOwogCitzdGF0aWMgdm9pZCBz ZXRfc3Vic2NyaXB0aW9uX3JldHJ5KGJvb2wgcmV0cnkpOworCiAvKgogICogU2hvdWxkIHRoaXMg d29ya2VyIGFwcGx5IGNoYW5nZXMgZm9yIGdpdmVuIHJlbGF0aW9uLgogICoKQEAgLTkwNSw2ICs5 MDcsOSBAQCBhcHBseV9oYW5kbGVfY29tbWl0KFN0cmluZ0luZm8gcykKIAogCWFwcGx5X2hhbmRs ZV9jb21taXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKIAorCS8qIFJlc2V0IHRoZSByZXRyeSBm bGFnLiAqLworCXNldF9zdWJzY3JpcHRpb25fcmV0cnkoZmFsc2UpOworCiAJLyogQ2hlY2sgdGhl IHN0YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBpZiBhbnkuICovCiAJYXBwbHlfYmd3 b3JrZXJfY2hlY2tfc3RhdHVzKCk7CiAKQEAgLTEwMTYsNiArMTAyMSw5IEBAIGFwcGx5X2hhbmRs ZV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNl OwogCisJLyogUmVzZXQgdGhlIHJldHJ5IGZsYWcuICovCisJc2V0X3N1YnNjcmlwdGlvbl9yZXRy eShmYWxzZSk7CisKIAkvKiBDaGVjayB0aGUgc3RhdHVzIG9mIGFwcGx5IGJhY2tncm91bmQgd29y a2VyIGlmIGFueS4gKi8KIAlhcHBseV9iZ3dvcmtlcl9jaGVja19zdGF0dXMoKTsKIApAQCAtMTA2 OSw2ICsxMDc3LDkgQEAgYXBwbHlfaGFuZGxlX2NvbW1pdF9wcmVwYXJlZChTdHJpbmdJbmZvIHMp CiAJc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24pOwogCWluX3JlbW90 ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogCisJLyogUmVzZXQgdGhlIHJldHJ5IGZsYWcuICovCisJ c2V0X3N1YnNjcmlwdGlvbl9yZXRyeShmYWxzZSk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMg dGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3lu Y2luZ190YWJsZXMocHJlcGFyZV9kYXRhLmVuZF9sc24pOwogCkBAIC0xMTI0LDYgKzExMzUsOSBA QCBhcHBseV9oYW5kbGVfcm9sbGJhY2tfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogCXN0b3JlX2Zs dXNoX3Bvc2l0aW9uKHJvbGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xzbik7CiAJaW5fcmVtb3Rl X3RyYW5zYWN0aW9uID0gZmFsc2U7CiAKKwkvKiBSZXNldCB0aGUgcmV0cnkgZmxhZy4gKi8KKwlz ZXRfc3Vic2NyaXB0aW9uX3JldHJ5KGZhbHNlKTsKKwogCS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0 aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCiAJcHJvY2Vzc19zeW5j aW5nX3RhYmxlcyhyb2xsYmFja19kYXRhLnJvbGxiYWNrX2VuZF9sc24pOwogCkBAIC0xMjE4LDYg KzEyMzIsOSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCQkJ LyogVW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBp bmZvLiAqLwogCQkJc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJp ZCwgcHJlcGFyZV9kYXRhLnhpZCk7CiAJCX0KKworCQkvKiBSZXNldCB0aGUgcmV0cnkgZmxhZy4g Ki8KKwkJc2V0X3N1YnNjcmlwdGlvbl9yZXRyeShmYWxzZSk7CiAJfQogCiAJaW5fcmVtb3RlX3Ry YW5zYWN0aW9uID0gZmFsc2U7CkBAIC0xNjQ2LDYgKzE2NjMsOSBAQCBhcHBseV9oYW5kbGVfc3Ry ZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKIAkJCSAqLwogCQkJc2VyaWFsaXplX3N0cmVhbV9hYm9y dCh4aWQsIHN1YnhpZCk7CiAJCX0KKworCQkvKiBSZXNldCB0aGUgcmV0cnkgZmxhZy4gKi8KKwkJ c2V0X3N1YnNjcmlwdGlvbl9yZXRyeShmYWxzZSk7CiAJfQogCiAJcmVzZXRfYXBwbHlfZXJyb3Jf Y29udGV4dF9pbmZvKCk7CkBAIC0xODU4LDYgKzE4NzgsOSBAQCBhcHBseV9oYW5kbGVfc3RyZWFt X2NvbW1pdChTdHJpbmdJbmZvIHMpCiAJCQkvKiBVbmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFs aXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCiAJCQlzdHJlYW1fY2xlYW51cF9maWxl cyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwogCQl9CisKKwkJLyogUmVzZXQgdGhl IHJldHJ5IGZsYWcuICovCisJCXNldF9zdWJzY3JpcHRpb25fcmV0cnkoZmFsc2UpOwogCX0KIAog CS8qIENoZWNrIHRoZSBzdGF0dXMgb2YgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgaWYgYW55LiAq LwpAQCAtMzkwMSwyMCArMzkyNCwyOCBAQCBzdGFydF90YWJsZV9zeW5jKFhMb2dSZWNQdHIgKm9y aWdpbl9zdGFydHBvcywgY2hhciAqKm15c2xvdG5hbWUpCiAJfQogCVBHX0NBVENIKCk7CiAJewor CQkvKgorCQkgKiBFbWl0IHRoZSBlcnJvciBtZXNzYWdlLCBhbmQgcmVjb3ZlciBmcm9tIHRoZSBl cnJvciBzdGF0ZSB0byBhbiBpZGxlCisJCSAqIHN0YXRlCisJCSAqLworCQlIT0xEX0lOVEVSUlVQ VFMoKTsKKworCQlFbWl0RXJyb3JSZXBvcnQoKTsKKwkJQWJvcnRPdXRPZkFueVRyYW5zYWN0aW9u KCk7CisJCUZsdXNoRXJyb3JTdGF0ZSgpOworCisJCVJFU1VNRV9JTlRFUlJVUFRTKCk7CisKKwkJ LyogUmVwb3J0IHRoZSB3b3JrZXIgZmFpbGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24g Ki8KKwkJcGdzdGF0X3JlcG9ydF9zdWJzY3JpcHRpb25fZXJyb3IoTXlTdWJzY3JpcHRpb24tPm9p ZCwgZmFsc2UpOworCisJCS8qIFNldCB0aGUgcmV0cnkgZmxhZy4gKi8KKwkJc2V0X3N1YnNjcmlw dGlvbl9yZXRyeSh0cnVlKTsKKwogCQlpZiAoTXlTdWJzY3JpcHRpb24tPmRpc2FibGVvbmVycikK IAkJCURpc2FibGVTdWJzY3JpcHRpb25BbmRFeGl0KCk7Ci0JCWVsc2UKLQkJewotCQkJLyoKLQkJ CSAqIFJlcG9ydCB0aGUgd29ya2VyIGZhaWxlZCBkdXJpbmcgdGFibGUgc3luY2hyb25pemF0aW9u LiBBYm9ydAotCQkJICogdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gc28gdGhhdCB0aGUgc3RhdHMg bWVzc2FnZSBpcyBzZW50IGluIGFuCi0JCQkgKiBpZGxlIHN0YXRlLgotCQkJICovCi0JCQlBYm9y dE91dE9mQW55VHJhbnNhY3Rpb24oKTsKLQkJCXBnc3RhdF9yZXBvcnRfc3Vic2NyaXB0aW9uX2Vy cm9yKE15U3Vic2NyaXB0aW9uLT5vaWQsIGZhbHNlKTsKIAotCQkJUEdfUkVfVEhST1coKTsKLQkJ fQorCQlwcm9jX2V4aXQoMCk7CiAJfQogCVBHX0VORF9UUlkoKTsKIApAQCAtMzkzOSwyMCArMzk3 MCwyNyBAQCBzdGFydF9hcHBseShYTG9nUmVjUHRyIG9yaWdpbl9zdGFydHBvcykKIAl9CiAJUEdf Q0FUQ0goKTsKIAl7CisJCS8qCisJCSAqIEVtaXQgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCByZWNv dmVyIGZyb20gdGhlIGVycm9yIHN0YXRlIHRvIGFuIGlkbGUKKwkJICogc3RhdGUKKwkJICovCisJ CUhPTERfSU5URVJSVVBUUygpOworCisJCUVtaXRFcnJvclJlcG9ydCgpOworCQlBYm9ydE91dE9m QW55VHJhbnNhY3Rpb24oKTsKKwkJRmx1c2hFcnJvclN0YXRlKCk7CisKKwkJUkVTVU1FX0lOVEVS UlVQVFMoKTsKKworCQkvKiBSZXBvcnQgdGhlIHdvcmtlciBmYWlsZWQgd2hpbGUgYXBwbHlpbmcg Y2hhbmdlcyAqLworCQlwZ3N0YXRfcmVwb3J0X3N1YnNjcmlwdGlvbl9lcnJvcihNeVN1YnNjcmlw dGlvbi0+b2lkLAorCQkJCQkJCQkJCSAhYW1fdGFibGVzeW5jX3dvcmtlcigpKTsKKworCQkvKiBT ZXQgdGhlIHJldHJ5IGZsYWcuICovCisJCXNldF9zdWJzY3JpcHRpb25fcmV0cnkodHJ1ZSk7CisK IAkJaWYgKE15U3Vic2NyaXB0aW9uLT5kaXNhYmxlb25lcnIpCiAJCQlEaXNhYmxlU3Vic2NyaXB0 aW9uQW5kRXhpdCgpOwotCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBSZXBvcnQgdGhlIHdvcmtl ciBmYWlsZWQgd2hpbGUgYXBwbHlpbmcgY2hhbmdlcy4gQWJvcnQgdGhlCi0JCQkgKiBjdXJyZW50 IHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlIHN0YXRzIG1lc3NhZ2UgaXMgc2VudCBpbiBhbgotCQkJ ICogaWRsZSBzdGF0ZS4KLQkJCSAqLwotCQkJQWJvcnRPdXRPZkFueVRyYW5zYWN0aW9uKCk7Ci0J CQlwZ3N0YXRfcmVwb3J0X3N1YnNjcmlwdGlvbl9lcnJvcihNeVN1YnNjcmlwdGlvbi0+b2lkLCAh YW1fdGFibGVzeW5jX3dvcmtlcigpKTsKLQotCQkJUEdfUkVfVEhST1coKTsKLQkJfQogCX0KIAlQ R19FTkRfVFJZKCk7CiB9CkBAIC00MTk4LDI4ICs0MjM2LDExIEBAIEFwcGx5V29ya2VyTWFpbihE YXR1bSBtYWluX2FyZykKIH0KIAogLyoKLSAqIEFmdGVyIGVycm9yIHJlY292ZXJ5LCBkaXNhYmxl IHRoZSBzdWJzY3JpcHRpb24gaW4gYSBuZXcgdHJhbnNhY3Rpb24KLSAqIGFuZCBleGl0IGNsZWFu bHkuCisgKiBEaXNhYmxlIHRoZSBzdWJzY3JpcHRpb24gaW4gYSBuZXcgdHJhbnNhY3Rpb24uCiAg Ki8KIHN0YXRpYyB2b2lkCiBEaXNhYmxlU3Vic2NyaXB0aW9uQW5kRXhpdCh2b2lkKQogewotCS8q Ci0JICogRW1pdCB0aGUgZXJyb3IgbWVzc2FnZSwgYW5kIHJlY292ZXIgZnJvbSB0aGUgZXJyb3Ig c3RhdGUgdG8gYW4gaWRsZQotCSAqIHN0YXRlCi0JICovCi0JSE9MRF9JTlRFUlJVUFRTKCk7Ci0K LQlFbWl0RXJyb3JSZXBvcnQoKTsKLQlBYm9ydE91dE9mQW55VHJhbnNhY3Rpb24oKTsKLQlGbHVz aEVycm9yU3RhdGUoKTsKLQotCVJFU1VNRV9JTlRFUlJVUFRTKCk7Ci0KLQkvKiBSZXBvcnQgdGhl IHdvcmtlciBmYWlsZWQgZHVyaW5nIGVpdGhlciB0YWJsZSBzeW5jaHJvbml6YXRpb24gb3IgYXBw bHkgKi8KLQlwZ3N0YXRfcmVwb3J0X3N1YnNjcmlwdGlvbl9lcnJvcihNeUxvZ2ljYWxSZXBXb3Jr ZXItPnN1YmlkLAotCQkJCQkJCQkJICFhbV90YWJsZXN5bmNfd29ya2VyKCkpOwotCiAJLyogRGlz YWJsZSB0aGUgc3Vic2NyaXB0aW9uICovCiAJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAlE aXNhYmxlU3Vic2NyaXB0aW9uKE15U3Vic2NyaXB0aW9uLT5vaWQpOwpAQCAtNDIyOSw4ICs0MjUw LDYgQEAgRGlzYWJsZVN1YnNjcmlwdGlvbkFuZEV4aXQodm9pZCkKIAllcmVwb3J0KExPRywKIAkJ CWVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBzdWJzY3JpcHRpb24gXCIlc1wiIGhhcyBiZWVu IGRpc2FibGVkIGR1ZSB0byBhbiBlcnJvciIsCiAJCQkJICAgTXlTdWJzY3JpcHRpb24tPm5hbWUp KTsKLQotCXByb2NfZXhpdCgwKTsKIH0KIAogLyoKQEAgLTQ0NjUsMyArNDQ4NCw2MyBAQCByZXNl dF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8odm9pZCkKIAlhcHBseV9lcnJvcl9jYWxsYmFja19h cmcucmVtb3RlX2F0dG51bSA9IC0xOwogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QoSW52 YWxpZFRyYW5zYWN0aW9uSWQsIEludmFsaWRYTG9nUmVjUHRyKTsKIH0KKworLyoKKyAqIFNldCBz dWJyZXRyeSBvZiBwZ19zdWJzY3JpcHRpb24gY2F0YWxvZy4KKyAqCisgKiBJZiByZXRyeSBpcyB0 cnVlLCBzdWJzY3JpYmVyIGlzIGFib3V0IHRvIGV4aXQgd2l0aCBhbiBlcnJvci4gT3RoZXJ3aXNl LCBpdAorICogbWVhbnMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gd2FzIGFwcGxpZWQgc3VjY2Vzc2Z1 bGx5LgorICovCitzdGF0aWMgdm9pZAorc2V0X3N1YnNjcmlwdGlvbl9yZXRyeShib29sIHJldHJ5 KQoreworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJdHVwOworCWJvb2wJCXN0YXJ0ZWRfdHgg PSBmYWxzZTsKKwlib29sCQludWxsc1tOYXR0c19wZ19zdWJzY3JpcHRpb25dOworCWJvb2wJCXJl cGxhY2VzW05hdHRzX3BnX3N1YnNjcmlwdGlvbl07CisJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19z dWJzY3JpcHRpb25dOworCisJaWYgKE15U3Vic2NyaXB0aW9uLT5yZXRyeSA9PSByZXRyeSB8fAor CQlhbV9hcHBseV9iZ3dvcmtlcigpKQorCQlyZXR1cm47CisKKwlpZiAoIUlzVHJhbnNhY3Rpb25T dGF0ZSgpKQorCXsKKwkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJc3RhcnRlZF90eCA9 IHRydWU7CisJfQorCisJLyogTG9vayB1cCB0aGUgc3Vic2NyaXB0aW9uIGluIHRoZSBjYXRhbG9n ICovCisJcmVsID0gdGFibGVfb3BlbihTdWJzY3JpcHRpb25SZWxhdGlvbklkLCBSb3dFeGNsdXNp dmVMb2NrKTsKKwl0dXAgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNVQlNDUklQVElPTk9JRCwKKwkJ CQkJCQkgIE9iamVjdElkR2V0RGF0dW0oTXlTdWJzY3JpcHRpb24tPm9pZCkpOworCisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCWVsb2coRVJST1IsICJzdWJzY3JpcHRpb24gXCIlc1wi IGRvZXMgbm90IGV4aXN0IiwgTXlTdWJzY3JpcHRpb24tPm5hbWUpOworCisJTG9ja1NoYXJlZE9i amVjdChTdWJzY3JpcHRpb25SZWxhdGlvbklkLCBNeVN1YnNjcmlwdGlvbi0+b2lkLCAwLAorCQkJ CQkgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qIEZvcm0gYSBuZXcgdHVwbGUuICovCisJbWVtc2V0 KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOworCW1lbXNldChudWxscywgZmFsc2UsIHNpemVv ZihudWxscykpOworCW1lbXNldChyZXBsYWNlcywgZmFsc2UsIHNpemVvZihyZXBsYWNlcykpOwor CisJLyogUmVzZXQgc3VicmV0cnkgKi8KKwl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vi cmV0cnkgLSAxXSA9IEJvb2xHZXREYXR1bShyZXRyeSk7CisJcmVwbGFjZXNbQW51bV9wZ19zdWJz Y3JpcHRpb25fc3VicmV0cnkgLSAxXSA9IHRydWU7CisKKwl0dXAgPSBoZWFwX21vZGlmeV90dXBs ZSh0dXAsIFJlbGF0aW9uR2V0RGVzY3IocmVsKSwgdmFsdWVzLCBudWxscywKKwkJCQkJCQlyZXBs YWNlcyk7CisKKwkvKiBVcGRhdGUgdGhlIGNhdGFsb2cuICovCisJQ2F0YWxvZ1R1cGxlVXBkYXRl KHJlbCwgJnR1cC0+dF9zZWxmLCB0dXApOworCisJLyogQ2xlYW51cC4gKi8KKwloZWFwX2ZyZWV0 dXBsZSh0dXApOworCXRhYmxlX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKworCWlmIChzdGFydGVkX3R4 KQorCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDkwOTlm ZTVmNzQuLmY2ZTI1N2QwNmQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtNDQ3OCw4ICs0NDc4LDkgQEAgZ2V0 U3Vic2NyaXB0aW9ucyhBcmNoaXZlICpmb3V0KQogCW50dXBzID0gUFFudHVwbGVzKHJlcyk7CiAK IAkvKgotCSAqIEdldCBzdWJzY3JpcHRpb24gZmllbGRzLiBXZSBkb24ndCBpbmNsdWRlIHN1YnNr aXBsc24gaW4gdGhlIGR1bXAgYXMKLQkgKiBhZnRlciByZXN0b3JpbmcgdGhlIGR1bXAgdGhpcyB2 YWx1ZSBtYXkgbm8gbG9uZ2VyIGJlIHJlbGV2YW50LgorCSAqIEdldCBzdWJzY3JpcHRpb24gZmll bGRzLiBXZSBkb24ndCBpbmNsdWRlIHN1YnNraXBsc24gYW5kIHN1YnJldHJ5IGluCisJICogdGhl IGR1bXAgYXMgYWZ0ZXIgcmVzdG9yaW5nIHRoZSBkdW1wIHRoaXMgdmFsdWUgbWF5IG5vIGxvbmdl ciBiZQorCSAqIHJlbGV2YW50LgogCSAqLwogCWlfdGFibGVvaWQgPSBQUWZudW1iZXIocmVzLCAi dGFibGVvaWQiKTsKIAlpX29pZCA9IFBRZm51bWJlcihyZXMsICJvaWQiKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3N1YnNjcmlwdGlvbi5oCmluZGV4IGQ1NDU0MGY1ZjUuLjVmNGUwNThlYzEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaApAQCAtNzYsNiArNzYsOCBAQCBDQVRBTE9H KHBnX3N1YnNjcmlwdGlvbiw2MTAwLFN1YnNjcmlwdGlvblJlbGF0aW9uSWQpIEJLSV9TSEFSRURf UkVMQVRJT04gQktJX1JPVwogCWJvb2wJCXN1YmRpc2FibGVvbmVycjsJLyogVHJ1ZSBpZiBhIHdv cmtlciBlcnJvciBzaG91bGQgY2F1c2UgdGhlCiAJCQkJCQkJCQkgKiBzdWJzY3JpcHRpb24gdG8g YmUgZGlzYWJsZWQgKi8KIAorCWJvb2wJCXN1YnJldHJ5IEJLSV9ERUZBVUxUKGYpOwkvKiBUcnVl IGlmIHRoZSBwcmV2aW91cyBhcHBseSBjaGFuZ2UgZmFpbGVkLiAqLworCiAjaWZkZWYgQ0FUQUxP R19WQVJMRU4JCQkvKiB2YXJpYWJsZS1sZW5ndGggZmllbGRzIHN0YXJ0IGhlcmUgKi8KIAkvKiBD b25uZWN0aW9uIHN0cmluZyB0byB0aGUgcHVibGlzaGVyICovCiAJdGV4dAkJc3ViY29ubmluZm8g QktJX0ZPUkNFX05PVF9OVUxMOwpAQCAtMTE2LDYgKzExOCw4IEBAIHR5cGVkZWYgc3RydWN0IFN1 YnNjcmlwdGlvbgogCWJvb2wJCWRpc2FibGVvbmVycjsJLyogSW5kaWNhdGVzIGlmIHRoZSBzdWJz Y3JpcHRpb24gc2hvdWxkIGJlCiAJCQkJCQkJCSAqIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgaWYg YSB3b3JrZXIgZXJyb3IKIAkJCQkJCQkJICogb2NjdXJzICovCisJYm9vbAkJcmV0cnk7CQkJLyog SW5kaWNhdGVzIGlmIHRoZSBwcmV2aW91cyBhcHBseSBjaGFuZ2UKKwkJCQkJCQkJICogZmFpbGVk LiAqLwogCWNoYXIJICAgKmNvbm5pbmZvOwkJLyogQ29ubmVjdGlvbiBzdHJpbmcgdG8gdGhlIHB1 Ymxpc2hlciAqLwogCWNoYXIJICAgKnNsb3RuYW1lOwkJLyogTmFtZSBvZiB0aGUgcmVwbGljYXRp b24gc2xvdCAqLwogCWNoYXIJICAgKnN5bmNjb21taXQ7CQkvKiBTeW5jaHJvbm91cyBjb21taXQg c2V0dGluZyBmb3Igd29ya2VyICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzJfc3RyZWFtaW5nX2FwcGx5LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX3N0 cmVhbWluZ19hcHBseS5wbAppbmRleCA3ZjhiZmE2NzQ1Li4yNGM1MTlhODcwIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfc3RyZWFtaW5nX2FwcGx5LnBsCisrKyBiL3Ny Yy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9zdHJlYW1pbmdfYXBwbHkucGwKQEAgLTU3LDggKzU3 LDEzIEBAICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKIAogJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKIAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIEl0 IGlzIG5vdCBhbGxvd2VkIHRoYXQgdGhlIHVuaXF1ZSBpbmRleCBvbiB0aGUgcHVibGlzaGVyIGFu ZCB0aGUgc3Vic2NyaWJlcgotIyBpcyBkaWZmZXJlbnQuIENoZWNrIHRoZSBlcnJvciByZXBvcnRl ZCBieSBiYWNrZ3JvdW5kIHdvcmtlciBpbiB0aGlzIGNhc2UuCisjIGlzIGRpZmZlcmVudC4gQ2hl Y2sgdGhlIGVycm9yIHJlcG9ydGVkIGJ5IGJhY2tncm91bmQgd29ya2VyIGluIHRoaXMgY2FzZS4g QW5kCisjIGFmdGVyIHJldHJ5aW5nIGluIGFwcGx5IHdvcmtlciwgd2UgY2hlY2sgaWYgdGhlIGRh dGEgaXMgcmVwbGljYXRlZAorIyBzdWNjZXNzZnVsbHkuCisjID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KwogIyBGaXJzdCB3ZSBjaGVjayB0aGUgdW5pcXVlIGluZGV4IG9uIG5vcm1hbCB0YWJsZS4KICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgVU5JUVVFIElO REVYIHRlc3RfdGFiX2JfaWR4IE9OIHRlc3RfdGFiIChiKSIpOwpAQCAtNzEsMTQgKzc2LDE1IEBA ICRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKIAlxci9FUlJPUjogKCBbQS1aMC05XSs6 KT8gY2Fubm90IHJlcGxpY2F0ZSB0YXJnZXQgcmVsYXRpb24gInB1YmxpYy50ZXN0X3RhYiIgdXNp bmcgc3Vic2NyaXB0aW9uIHBhcmFtZXRlciBzdHJlYW1pbmc9cGFyYWxsZWwvLAogCSRvZmZzZXQp OwogCi0jIERyb3AgdGhlIHVuaXF1ZSBpbmRleCBvbiB0aGUgc3Vic2NyaWJlciwgbm93IGl0IHdv cmtzLgotJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIElOREVY IHRlc3RfdGFiX2JfaWR4Iik7Ci0KKyMgV2FpdCBmb3IgdGhpcyBzdHJlYW1pbmcgdHJhbnNhY3Rp b24gdG8gYmUgYXBwbGllZCBpbiB0aGUgYXBwbHkgd29ya2VyLgogJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKIAogbXkgJHJlc3VsdCA9CiAgICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90 YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDUwMDApLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmli ZXIgYWZ0ZXIgZHJvcHBpbmcgaW5kZXgnKTsKK2lzKCRyZXN1bHQsIHFxKDUwMDApLCAnZGF0YSBy ZXBsaWNhdGVkIHRvIHN1YnNjcmliZXJzIGFmdGVyIHJldHJ5aW5nIGJlY2F1c2Ugb2YgdW5pcXVl IGluZGV4Jyk7CisKKyMgRHJvcCB0aGUgdW5pcXVlIGluZGV4IG9uIHRoZSBzdWJzY3JpYmVyLgor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIElOREVYIHRlc3Rf dGFiX2JfaWR4Iik7CiAKICMgVGhlbiB3ZSBjaGVjayB0aGUgdW5pcXVlIGluZGV4IG9uIHBhcnRp dGlvbiB0YWJsZS4KICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLApAQCAt OTUsMTcgKzEwMSwyMCBAQCAkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCiAJcXIvRVJS T1I6ICggW0EtWjAtOV0rOik/IGNhbm5vdCByZXBsaWNhdGUgdGFyZ2V0IHJlbGF0aW9uICJwdWJs aWMudGVzdF90YWJfcGFydGl0aW9uZWQiIHVzaW5nIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIgc3Ry ZWFtaW5nPXBhcmFsbGVsLywKIAkkb2Zmc2V0KTsKIAotIyBEcm9wIHRoZSB1bmlxdWUgaW5kZXgg b24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jrcy4KLSRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBJTkRFWCB0ZXN0X3RhYl9iX3BhcnRpdGlvbl9pZHgiKTsK LQorIyBXYWl0IGZvciB0aGlzIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB0byBiZSBhcHBsaWVkIGlu IHRoZSBhcHBseSB3b3JrZXIuCiAkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFw cG5hbWUpOwogCiAkcmVzdWx0ID0KICAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYl9wYXJ0aXRpb25lZCIpOwotaXMo JHJlc3VsdCwgcXEoNTAwMCksICdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBk cm9wcGluZyBpbmRleCcpOworaXMoJHJlc3VsdCwgcXEoNTAwMCksICdkYXRhIHJlcGxpY2F0ZWQg dG8gc3Vic2NyaWJlcnMgYWZ0ZXIgcmV0cnlpbmcgYmVjYXVzZSBvZiB1bmlxdWUgaW5kZXgnKTsK KworIyBEcm9wIHRoZSB1bmlxdWUgaW5kZXggb24gdGhlIHN1YnNjcmliZXIuCiskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgSU5ERVggdGVzdF90YWJfYl9wYXJ0 aXRpb25faWR4Iik7CiAKICMgVHJpZ2dlcnMgd2hpY2ggZXhlY3V0ZSBub24taW1tdXRhYmxlIGZ1 bmN0aW9uIGFyZSBub3QgYWxsb3dlZCBvbiB0aGUKICMgc3Vic2NyaWJlciBzaWRlLiBDaGVjayB0 aGUgZXJyb3IgcmVwb3J0ZWQgYnkgYmFja2dyb3VuZCB3b3JrZXIgaW4gdGhpcyBjYXNlLgorIyBB bmQgYWZ0ZXIgcmV0cnlpbmcgaW4gYXBwbHkgd29ya2VyLCB3ZSBjaGVjayBpZiB0aGUgZGF0YSBp cyByZXBsaWNhdGVkCisjIHN1Y2Nlc3NmdWxseS4KICMgRmlyc3Qgd2UgY2hlY2sgdGhlIHRyaWdn ZXIgZnVuY3Rpb24gb24gbm9ybWFsIHRhYmxlLgogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KAogCSdwb3N0Z3JlcycsIHFxewpAQCAtMTI5LDE1ICsxMzgsMTYgQEAgJG5vZGVfc3Vic2NyaWJl ci0+d2FpdF9mb3JfbG9nKAogCXFyL0VSUk9SOiAoIFtBLVowLTldKzopPyBjYW5ub3QgcmVwbGlj YXRlIHRhcmdldCByZWxhdGlvbiAicHVibGljLnRlc3RfdGFiIiB1c2luZyBzdWJzY3JpcHRpb24g cGFyYW1ldGVyIHN0cmVhbWluZz1wYXJhbGxlbC8sCiAJJG9mZnNldCk7CiAKLSMgRHJvcCB0aGUg dHJpZ2dlciBvbiB0aGUgc3Vic2NyaWJlciwgbm93IGl0IHdvcmtzLgotJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkRST1AgVFJJR0dFUiBpbnNlcnRfdHJpZyBPTiB0 ZXN0X3RhYiIpOwotCisjIFdhaXQgZm9yIHRoaXMgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIGJl IGFwcGxpZWQgaW4gdGhlIGFwcGx5IHdvcmtlci4KICRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgkYXBwbmFtZSk7CiAKICRyZXN1bHQgPQogICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygk cmVzdWx0LCBxcSgwKSwgJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyIGFmdGVyIGRyb3Bw aW5nIHRyaWdnZXInKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1 YnNjcmliZXJzIGFmdGVyIHJldHJ5aW5nIGJlY2F1c2Ugb2YgdHJpZ2dlcicpOworCisjIERyb3Ag dGhlIHRyaWdnZXIgb24gdGhlIHN1YnNjcmliZXIuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiRFJPUCBUUklHR0VSIGluc2VydF90cmlnIE9OIHRlc3RfdGFiIik7 CiAKICMgVGhlbiB3ZSBjaGVjayB0aGUgdHJpZ2dlciBmdW5jdGlvbiBvbiBwYXJ0aXRpb24gdGFi bGUuCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCkBAIC0xNTcsMTkgKzE2NywyNCBAQCAk bm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCiAJcXIvRVJST1I6ICggW0EtWjAtOV0rOik/ IGNhbm5vdCByZXBsaWNhdGUgdGFyZ2V0IHJlbGF0aW9uICJwdWJsaWMudGVzdF90YWJfcGFydGl0 aW9uZWQiIHVzaW5nIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIgc3RyZWFtaW5nPXBhcmFsbGVsLywK IAkkb2Zmc2V0KTsKIAotIyBEcm9wIHRoZSB0cmlnZ2VyIG9uIHRoZSBzdWJzY3JpYmVyLCBub3cg aXQgd29ya3MuCi0kbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiRFJP UCBUUklHR0VSIGluc2VydF90cmlnIE9OIHRlc3RfdGFiX3BhcnRpdGlvbiIpOwotCisjIFdhaXQg Zm9yIHRoaXMgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIGJlIGFwcGxpZWQgaW4gdGhlIGFwcGx5 IHdvcmtlci4KICRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CiAK ICRyZXN1bHQgPQogICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiX3BhcnRpdGlvbmVkIik7Ci1pcygkcmVzdWx0LCBx cSgwKSwgJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyIGFmdGVyIGRyb3BwaW5nIHRyaWdn ZXInKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXJz IGFmdGVyIHJldHJ5aW5nIGJlY2F1c2Ugb2YgdHJpZ2dlcicpOwogCisjIERyb3AgdGhlIHRyaWdn ZXIgb24gdGhlIHN1YnNjcmliZXIuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiRFJPUCBUUklHR0VSIGluc2VydF90cmlnIE9OIHRlc3RfdGFiX3BhcnRpdGlvbiIp OworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgSXQgaXMgbm90IGFsbG93ZWQgdGhhdCBjb2x1 bW4gZGVmYXVsdCB2YWx1ZSBleHByZXNzaW9uIGNvbnRhaW5zIGEKICMgbm9uLWltbXV0YWJsZSBm dW5jdGlvbiBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBDaGVjayB0aGUgZXJyb3IgcmVwb3J0ZWQg YnkKLSMgYmFja2dyb3VuZCB3b3JrZXIgaW4gdGhpcyBjYXNlLgorIyBiYWNrZ3JvdW5kIHdvcmtl ciBpbiB0aGlzIGNhc2UuIEFuZCBhZnRlciByZXRyeWluZyBpbiBhcHBseSB3b3JrZXIsIHdlIGNo ZWNrCisjIGlmIHRoZSBkYXRhIGlzIHJlcGxpY2F0ZWQgc3VjY2Vzc2Z1bGx5LgorIyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisKICMgRmlyc3Qgd2UgY2hlY2sgdGhlIGNvbHVtbiBkZWZhdWx0IHZhbHVl IGV4cHJlc3Npb24gb24gbm9ybWFsIHRhYmxlLgogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCiAJIkFMVEVSIFRBQkxFIHRlc3RfdGFiIEFMVEVSIENPTFVNTiBiIFNFVCBE RUZBVUxUIHJhbmRvbSgpIik7CkBAIC0xODUsMTYgKzIwMCwxNyBAQCAkbm9kZV9zdWJzY3JpYmVy LT53YWl0X2Zvcl9sb2coCiAJcXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGNhbm5vdCByZXBsaWNh dGUgdGFyZ2V0IHJlbGF0aW9uICJwdWJsaWMudGVzdF90YWIiIHVzaW5nIHN1YnNjcmlwdGlvbiBw YXJhbWV0ZXIgc3RyZWFtaW5nPXBhcmFsbGVsLywKIAkkb2Zmc2V0KTsKIAotIyBEcm9wIGRlZmF1 bHQgdmFsdWUgb24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jrcy4KLSRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBTFRFUiBD T0xVTU4gYiBEUk9QIERFRkFVTFQiKTsKLQorIyBXYWl0IGZvciB0aGlzIHN0cmVhbWluZyB0cmFu c2FjdGlvbiB0byBiZSBhcHBsaWVkIGluIHRoZSBhcHBseSB3b3JrZXIuCiAkbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwogCiAkcmVzdWx0ID0KICAgJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0 X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoNTAwMCksCi0JJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJz Y3JpYmVyIGFmdGVyIGRyb3BwaW5nIGRlZmF1bHQgdmFsdWUgZXhwcmVzc2lvbicpOworCSdkYXRh IHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlcnMgYWZ0ZXIgcmV0cnlpbmcgYmVjYXVzZSBvZiBjb2x1 bW4gZGVmYXVsdCB2YWx1ZScpOworCisjIERyb3AgZGVmYXVsdCB2YWx1ZSBvbiB0aGUgc3Vic2Ny aWJlci4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBU QUJMRSB0ZXN0X3RhYiBBTFRFUiBDT0xVTU4gYiBEUk9QIERFRkFVTFQiKTsKIAogIyBUaGVuIHdl IGNoZWNrIHRoZSBjb2x1bW4gZGVmYXVsdCB2YWx1ZSBleHByZXNzaW9uIG9uIHBhcnRpdGlvbiB0 YWJsZS4KICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLApAQCAtMjExLDIw ICsyMjcsMjUgQEAgJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAogCXFyL0VSUk9SOiAo IFtBLVowLTldKzopPyBjYW5ub3QgcmVwbGljYXRlIHRhcmdldCByZWxhdGlvbiAicHVibGljLnRl c3RfdGFiX3BhcnRpdGlvbmVkIiB1c2luZyBzdWJzY3JpcHRpb24gcGFyYW1ldGVyIHN0cmVhbWlu Zz1wYXJhbGxlbC8sCiAJJG9mZnNldCk7CiAKLSMgRHJvcCBkZWZhdWx0IHZhbHVlIG9uIHRoZSBz dWJzY3JpYmVyLCBub3cgaXQgd29ya3MuCi0kbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKLQkiQUxURVIgVEFCTEUgdGVzdF90YWJfcGFydGl0aW9uIEFMVEVSIENPTFVNTiBi IERST1AgREVGQVVMVCIpOwotCisjIFdhaXQgZm9yIHRoaXMgc3RyZWFtaW5nIHRyYW5zYWN0aW9u IHRvIGJlIGFwcGxpZWQgaW4gdGhlIGFwcGx5IHdvcmtlci4KICRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CiAKICRyZXN1bHQgPQogICAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiX3Bh cnRpdGlvbmVkIik7CiBpcygkcmVzdWx0LCBxcSg1MDAwKSwKLQknZGF0YSByZXBsaWNhdGVkIHRv IHN1YnNjcmliZXIgYWZ0ZXIgZHJvcHBpbmcgZGVmYXVsdCB2YWx1ZSBleHByZXNzaW9uJyk7CisJ J2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVycyBhZnRlciByZXRyeWluZyBiZWNhdXNlIG9m IGNvbHVtbiBkZWZhdWx0IHZhbHVlJyk7CisKKyMgRHJvcCBkZWZhdWx0IHZhbHVlIG9uIHRoZSBz dWJzY3JpYmVyLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFM VEVSIFRBQkxFIHRlc3RfdGFiX3BhcnRpdGlvbiBBTFRFUiBDT0xVTU4gYiBEUk9QIERFRkFVTFQi KTsKIAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIEl0IGlzIG5vdCBhbGxvd2VkIHRoYXQgZG9t YWluIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBjb250YWlucyBhIG5vbi1pbW11dGFibGUKICMgZnVu Y3Rpb24gb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gQ2hlY2sgdGhlIGVycm9yIHJlcG9ydGVkIGJ5 IGJhY2tncm91bmQKLSMgd29ya2VyIGluIHRoaXMgY2FzZS4KKyMgd29ya2VyIGluIHRoaXMgY2Fz ZS4gQW5kIGFmdGVyIHJldHJ5aW5nIGluIGFwcGx5IHdvcmtlciwgd2UgY2hlY2sgaWYgdGhlIGRh dGEKKyMgaXMgcmVwbGljYXRlZCBzdWNjZXNzZnVsbHkuCisjID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KwogIyBCZWNhdXNlIHRoZSBjb2x1bW4gdHlwZSBvZiB0aGUgcGFydGl0aW9uIHRhYmxlIG11c3Qg YmUgdGhlIHNhbWUgYXMgaXRzIHBhcmVudAogIyB0YWJsZSwgb25seSB0ZXN0IG5vcm1hbCB0YWJs ZSBoZXJlLgogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKApAQCAtMjQyLDIxICsyNjMsMjYg QEAgJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAogCXFyL0VSUk9SOiAoIFtBLVowLTld KzopPyBjYW5ub3QgcmVwbGljYXRlIHRhcmdldCByZWxhdGlvbiAicHVibGljLnRlc3RfdGFiIiB1 c2luZyBzdWJzY3JpcHRpb24gcGFyYW1ldGVyIHN0cmVhbWluZz1wYXJhbGxlbC8sCiAJJG9mZnNl dCk7CiAKLSMgRHJvcCBkb21haW4gY29uc3RyYWludCBleHByZXNzaW9uIG9uIHRoZSBzdWJzY3Jp YmVyLCBub3cgaXQgd29ya3MuCi0kbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiQUxURVIgVEFCTEUgdGVzdF90YWIgQUxURVIgQ09MVU1OIGEgVFlQRSBpbnQiKTsKLQor IyBXYWl0IGZvciB0aGlzIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB0byBiZSBhcHBsaWVkIGluIHRo ZSBhcHBseSB3b3JrZXIuCiAkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWUpOwogCiAkcmVzdWx0ID0KICAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMCks Ci0JJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyIGFmdGVyIGRyb3BwaW5nIGRvbWFpbiBj b25zdHJhaW50IGV4cHJlc3Npb24nCisJJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVycyBh ZnRlciByZXRyeWluZyBiZWNhdXNlIG9mIGRvbWFpbicKICk7CiAKLSMgSXQgaXMgbm90IGFsbG93 ZWQgdGhhdCBjb25zdHJhaW50IGV4cHJlc3Npb24gY29udGFpbnMgYSBub24taW1tdXRhYmxlIGZ1 bmN0aW9uCi0jIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIENoZWNrIHRoZSBlcnJvciByZXBvcnRl ZCBieSBiYWNrZ3JvdW5kIHdvcmtlciBpbiB0aGlzCi0jIGNhc2UuCisjIERyb3AgZG9tYWluIGNv bnN0cmFpbnQgZXhwcmVzc2lvbiBvbiB0aGUgc3Vic2NyaWJlci4KKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBTFRFUiBDT0xV TU4gYSBUWVBFIGludCIpOworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgSXQgaXMgbm90IGFs bG93ZWQgdGhhdCBjb25zdHJhaW50IGV4cHJlc3Npb24gY29udGFpbnMgYSBub24taW1tdXRhYmxl CisjIGZ1bmN0aW9uIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIENoZWNrIHRoZSBlcnJvciByZXBv cnRlZCBieSBiYWNrZ3JvdW5kCisjIHdvcmtlciBpbiB0aGlzIGNhc2UuIEFuZCBhZnRlciByZXRy eWluZyBpbiBhcHBseSB3b3JrZXIsIHdlIGNoZWNrIGlmIHRoZSBkYXRhCisjIGlzIHJlcGxpY2F0 ZWQgc3VjY2Vzc2Z1bGx5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKICMgRmlyc3Qgd2UgY2hl Y2sgdGhlIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBvbiBub3JtYWwgdGFibGUuCiAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoCiAJJ3Bvc3RncmVzJywgcXF7CkBAIC0yNzQsMTYgKzMwMCwxNyBA QCAkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCiAJcXIvRVJST1I6ICggW0EtWjAtOV0r Oik/IGNhbm5vdCByZXBsaWNhdGUgdGFyZ2V0IHJlbGF0aW9uICJwdWJsaWMudGVzdF90YWIiIHVz aW5nIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIgc3RyZWFtaW5nPXBhcmFsbGVsLywKIAkkb2Zmc2V0 KTsKIAotIyBEcm9wIGNvbnN0cmFpbnQgb24gdGhlIHN1YnNjcmliZXIsIG5vdyBpdCB3b3Jrcy4K LSRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJBTFRFUiBUQUJMRSB0 ZXN0X3RhYiBEUk9QIENPTlNUUkFJTlQgdGVzdF90YWJfY29uIik7Ci0KKyMgV2FpdCBmb3IgdGhp cyBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdG8gYmUgYXBwbGllZCBpbiB0aGUgYXBwbHkgd29ya2Vy LgogJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKIAogJHJlc3Vs dCA9CiAgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDUwMDApLAotCSdkYXRhIHJl cGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBjb25zdHJhaW50IGV4cHJlc3Np b24nKTsKKwknZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXJzIGFmdGVyIHJldHJ5aW5nIGJl Y2F1c2Ugb2YgY29uc3RyYWludCcpOworCisjIERyb3AgY29uc3RyYWludCBvbiB0aGUgc3Vic2Ny aWJlci4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBU QUJMRSB0ZXN0X3RhYiBEUk9QIENPTlNUUkFJTlQgdGVzdF90YWJfY29uIik7CiAKICMgVGhlbiB3 ZSBjaGVjayB0aGUgY29uc3RyYWludCBleHByZXNzaW9uIG9uIHBhcnRpdGlvbiB0YWJsZS4KICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKQEAgLTMwMCwxOSArMzI3LDI0IEBAICRub2RlX3N1 YnNjcmliZXItPndhaXRfZm9yX2xvZygKIAlxci9FUlJPUjogKCBbQS1aMC05XSs6KT8gY2Fubm90 IHJlcGxpY2F0ZSB0YXJnZXQgcmVsYXRpb24gInB1YmxpYy50ZXN0X3RhYl9wYXJ0aXRpb25lZCIg dXNpbmcgc3Vic2NyaXB0aW9uIHBhcmFtZXRlciBzdHJlYW1pbmc9cGFyYWxsZWwvLAogCSRvZmZz ZXQpOwogCi0jIERyb3AgY29uc3RyYWludCBvbiB0aGUgc3Vic2NyaWJlciwgbm93IGl0IHdvcmtz LgotJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkFMVEVSIFRBQkxF IHRlc3RfdGFiX3BhcnRpdGlvbiBEUk9QIENPTlNUUkFJTlQgdGVzdF90YWJfY29uIik7Ci0KKyMg V2FpdCBmb3IgdGhpcyBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdG8gYmUgYXBwbGllZCBpbiB0aGUg YXBwbHkgd29ya2VyLgogJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKIAogJHJlc3VsdCA9CiAgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWJfcGFydGl0aW9uZWQiKTsKIGlzKCRyZXN1 bHQsIHFxKDApLAotCSdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGlu ZyBjb25zdHJhaW50IGV4cHJlc3Npb24nKTsKKwknZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmli ZXJzIGFmdGVyIHJldHJ5aW5nIGJlY2F1c2Ugb2YgY29uc3RyYWludCcpOwogCisjIERyb3AgY29u c3RyYWludCBvbiB0aGUgc3Vic2NyaWJlci4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3RhYl9wYXJ0aXRpb24gRFJPUCBDT05TVFJB SU5UIHRlc3RfdGFiX2NvbiIpOworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgSXQgaXMgbm90 IGFsbG93ZWQgdGhhdCBmb3JlaWduIGtleSBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBDaGVjayB0 aGUgZXJyb3IKLSMgcmVwb3J0ZWQgYnkgYmFja2dyb3VuZCB3b3JrZXIgaW4gdGhpcyBjYXNlLgor IyByZXBvcnRlZCBieSBiYWNrZ3JvdW5kIHdvcmtlciBpbiB0aGlzIGNhc2UuIEFuZCBhZnRlciBy ZXRyeWluZyBpbiBhcHBseQorIyB3b3JrZXIsIHdlIGNoZWNrIGlmIHRoZSBkYXRhIGlzIHJlcGxp Y2F0ZWQgc3VjY2Vzc2Z1bGx5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKICMgRmlyc3Qgd2Ug Y2hlY2sgdGhlIGZvcmVpZ24ga2V5IG9uIG5vcm1hbCB0YWJsZS4KICRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiIpOwogJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKQEAgLTMzMywxNiArMzY1LDE3IEBA ICRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKIAlxci9FUlJPUjogKCBbQS1aMC05XSs6 KT8gY2Fubm90IHJlcGxpY2F0ZSB0YXJnZXQgcmVsYXRpb24gInB1YmxpYy50ZXN0X3RhYiIgdXNp bmcgc3Vic2NyaXB0aW9uIHBhcmFtZXRlciBzdHJlYW1pbmc9cGFyYWxsZWwvLAogCSRvZmZzZXQp OwogCi0jIERyb3AgdGhlIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgb24gdGhlIHN1YnNjcmliZXIs IG5vdyBpdCB3b3Jrcy4KLSRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAot CSJBTFRFUiBUQUJMRSB0ZXN0X3RhYiBEUk9QIENPTlNUUkFJTlQgdGVzdF90YWJmayIpOwotCisj IFdhaXQgZm9yIHRoaXMgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIGJlIGFwcGxpZWQgaW4gdGhl IGFwcGx5IHdvcmtlci4KICRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7CiAKICRyZXN1bHQgPQogICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSg1MDAw KSwKLQknZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYWZ0ZXIgZHJvcHBpbmcgdGhlIGZv cmVpZ24ga2V5Jyk7CisJJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVycyBhZnRlciByZXRy eWluZyBiZWNhdXNlIG9mIGZvcmVpZ24ga2V5Jyk7CisKKyMgRHJvcCB0aGUgZm9yZWlnbiBrZXkg Y29uc3RyYWludCBvbiB0aGUgc3Vic2NyaWJlci4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3RhYiBEUk9QIENPTlNUUkFJTlQgdGVz dF90YWJmayIpOwogCiAjIFRoZW4gd2UgY2hlY2sgdGhlIGZvcmVpZ24ga2V5IG9uIHBhcnRpdGlv biB0YWJsZS4KICRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CkBA IC0zNjMsMTYgKzM5NiwxNyBAQCAkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCiAJcXIv RVJST1I6ICggW0EtWjAtOV0rOik/IGNhbm5vdCByZXBsaWNhdGUgdGFyZ2V0IHJlbGF0aW9uICJw dWJsaWMudGVzdF90YWJfcGFydGl0aW9uZWQiIHVzaW5nIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIg c3RyZWFtaW5nPXBhcmFsbGVsLywKIAkkb2Zmc2V0KTsKIAotIyBEcm9wIHRoZSBmb3JlaWduIGtl eSBjb25zdHJhaW50IG9uIHRoZSBzdWJzY3JpYmVyLCBub3cgaXQgd29ya3MuCi0kbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQUxURVIgVEFCTEUgdGVzdF90YWJfcGFy dGl0aW9uIERST1AgQ09OU1RSQUlOVCB0ZXN0X3RhYl9wYXRpdGlvbl9mayIpOwotCisjIFdhaXQg Zm9yIHRoaXMgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIGJlIGFwcGxpZWQgaW4gdGhlIGFwcGx5 IHdvcmtlci4KICRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CiAK ICRyZXN1bHQgPQogICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiX3BhcnRpdGlvbmVkIik7CiBpcygkcmVzdWx0LCBx cSg1MDAwKSwKLQknZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYWZ0ZXIgZHJvcHBpbmcg dGhlIGZvcmVpZ24ga2V5Jyk7CisJJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVycyBhZnRl ciByZXRyeWluZyBiZWNhdXNlIG9mIGZvcmVpZ24ga2V5Jyk7CisKKyMgRHJvcCB0aGUgZm9yZWln biBrZXkgY29uc3RyYWludCBvbiB0aGUgc3Vic2NyaWJlci4KKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBUQUJMRSB0ZXN0X3RhYl9wYXJ0aXRpb24gRFJP UCBDT05TVFJBSU5UIHRlc3RfdGFiX3BhdGl0aW9uX2ZrIik7CiAKICRub2RlX3N1YnNjcmliZXIt PnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7Ci0tIAoyLjIzLjAud2luZG93cy4xCgo= --_005_OS3PR01MB62758A6AAED27B3A848CEB7A9E8F9OS3PR01MB6275jpnp_--