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 1osFjO-0006sR-U3 for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Nov 2022 03:56:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1osFjN-0007bN-JC for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Nov 2022 03:56:57 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1osFjM-0007ah-BG for pgsql-hackers@lists.postgresql.org; Tue, 08 Nov 2022 03:56:57 +0000 Received: from esa2.fujitsucc.c3s2.iphmx.com ([68.232.152.246]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1osFjH-0008Nz-TC for pgsql-hackers@lists.postgresql.org; Tue, 08 Nov 2022 03:56:55 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1667879813; x=1699415813; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=kIX6/U+J6ZmhG7IetHGAso1wuJNOIFj+lDyKd82cB6c=; b=kXJHz3/R5j0Od2tLVXJTR2GytNV7gC/gixlGMCKle7sM+JxwQXXQ5Nef bQ+ChbqBTyPovYq8fHOlq+NINEmPraoCF+ykePLz/WJvjVWDlLgwP3T9s ab9STADVSkMsTB90lFJpKKqoAKoRwcA/PnXNFz7X4AKH2L3B4kxr7nYYK yXSxL9QvQevmngFjwKGLqk2C+lwSzFwI7J1lG7ZttT+poVbq2w2iv9ShX vIWBqFMsADU3H9gPGApZMTM8dqBQJw6f6SmcgPZ7s+HNhzaYY3sYfY7vd QKBMc7EnKr+wW9lEetbRHp/zNykNWSDVwuZaajH0fJS+Gpnxszlicma0p g==; X-IronPort-AV: E=McAfee;i="6500,9779,10524"; a="77697684" X-IronPort-AV: E=Sophos;i="5.96,145,1665414000"; d="scan'208,223";a="77697684" Received: from mail-tycjpn01lp2171.outbound.protection.outlook.com (HELO JPN01-TYC-obe.outbound.protection.outlook.com) ([104.47.23.171]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Nov 2022 12:56:48 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=A02JTeVnCXjGN4PSiwPFSLl+oTP1fUXRQx4T/wKDDk0LyTtpdOjW/7VS01QlVEJJrrfbnlFTUEWHjdyNkj+dqzUriQzxNWfUWMV1pjHu+VRBIHERHXRsW7I4jIvNn97IsURisJwBtdJv254kn/dG3U8ckNblI9lsnmQulYyzzGuE9KnbBPfKWqDeU/OgCJeT1+CUbiML12x5skCXCUMCtcsoVIVgjDoGkkb0iXCYGNYiyXkft73twLgzRveviydHFEvLz1dqB79SQq/T1d1KDzzPMJjEf59UPj9MF1o8ae+WEQ44pQ8m+yMt8Kdok9DykEV+vQbzEz+0ZUMxswxYgg== 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=NBa4dFYQJGpUO6NWpBbqn8Ejc9z0JhbDw2P+U2c7e9k=; b=Y+rIUKbrN2MYZuH2f32enaM2Uuz1xJafstOUtX74nPqmY+remjOCCv/17gVgj9Fc0y6XOUcsZsCV0LsG2tHUPLQEfTlXflnCC6Z7rjntl9RMcv0wLeV52rwxFBqx4YCGYM/+sqUubGbgkLWEe1bgcZR7AX2WMhLHj3M1mmxqhP6G/ZK9ulMO7tYLSIQ7UAIquNhpyX78uiFnqqx6tEb/yXDLBhe/qj9tJAyTrZQDVoPsEjbaci8BAeO0J9puFQJWHvre2MHaTLHNINWsc537OfKmpxqmV5FgTe8E/0ZtOWfy9zsQac2R46/p9EJp+sQeOPBPzbW4TWGizc0C6pLg7A== 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 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by OS0PR01MB5474.jpnprd01.prod.outlook.com (2603:1096:604:a5::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.27; Tue, 8 Nov 2022 03:56:43 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::38a6:cf5c:b4ee:89dd]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::38a6:cf5c:b4ee:89dd%7]) with mapi id 15.20.5791.022; Tue, 8 Nov 2022 03:56:43 +0000 From: "houzj.fnst@fujitsu.com" To: "houzj.fnst@fujitsu.com" , Amit Kapila CC: Masahiko Sawada , "wangw.fnst@fujitsu.com" , Peter Smith , Dilip Kumar , "shiy.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: AQHYSXX5ZKpBKXxeUU2FhEhnmXQum6zlu9SQgAkSooCACBQ0gIABsTcwgAA1vECAAqHFgIAE/jVwgAXct9CAADkRgIALO/aAgAsRZICAB606AIAS+CyAgAAufICAAWQLgIABHxKAgAA3o4CAAeE3gIAJPr0AgAkxzACAAiJoAIAC0hUAgARvDICABQA2gIAAFvcAgAeBmICABO9ggIAJO+YAgABu1YCACQzpAIAJSy6AgAS+zICABq7mgIABSJUAgAAOtoCAACghoIAB8TqAgAqL+oCADJWRgIAGVm0AgAGAQICAAerMgIABYRWAgAgnZ+CAAXRdgIAGBUSQgAGFeoCAAFYagIABb5aggAGsWiCAATu3gIAEyyEAgABeLHCABFBngIAK5WIAgABrY4CABb89gIADiS0AgAEu2oCAAHBpgIADPWcAgAS/1gCADeB2AIAAPUnQgAEERACAABzggIAF+30AgAHyDYCAEzpGgIANkEmAgAI7xKCAAUFhAIAAPN6AgATOZqCAAPdMEA== Date: Tue, 8 Nov 2022 03:56:43 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: =?utf-8?B?TVNJUF9MYWJlbF9hNzI5NWNjMS1kMjc5LTQyYWMtYWI0ZC0zYjBmNGZlY2Uw?= =?utf-8?B?NTBfQWN0aW9uSWQ9ZjI5MWRjNzgtNTA0ZC00YTg0LTkyNWEtZTllMWY4MDYy?= =?utf-8?B?ODc1O01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?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?ZWNlMDUwX1NldERhdGU9MjAyMi0xMS0wN1QxMzowODoxOVo7TVNJUF9MYWJl?= =?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-traffictypediagnostic: OS0PR01MB5716:EE_|OS0PR01MB5474:EE_ x-ms-office365-filtering-correlation-id: f18082a1-0f51-4459-0459-08dac13d3fc6 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: piuZBdNg3jD6oOCylvcZIpZOnBtY+Ioj8waBKPZzIOydMwxguDQsrVN2GOqJW5gL1bVYOYQ39lFQ7e5la1KbLG2FxoUZcPB/AWYnhJrFk+KGYD/oPO8MDkV8auqk8oSpayUEswhJ1lqxeU+G3rErSOX0EeknyuPBRn+UzvMgFAjhP/DsXPzJUH3VMQ7ppoQPBvQVb19FomwSRMggIGl1d5MWEU79t6HnsiPKSNo9zOito3S7RL0pbAdlEyXhSkHq9FoTeptPcW3ik7f9ZOsq50gu2hT2Wd40TirQlD+Yzzz4ab04J1Qoip3ZyUAWAkGKx0vLXI/6QJGilY3L95gI84WNuYe7RqbXDPq6GEwVYekrvfJwLHMdjyvxv91sxkcDGQNqb2FAHwyWCjZ4Prvx2tFh0fMU1dQoBeDgdU8bZuhDgH7s9Yzl+6MFM0jRZcl7PuFURAYqUZ/zdvaVr9Ti0QK+oEU4/rVfqhtqUdRuEMCYOIyVtecEE2ucwKrcJOnzXEFCRij2dz/RNQtSDR0wyvANmyTKYmIm1VaRSczynhog8EIftuIzCRcrdfOv8eypMkJ0OmtW1FG8MP3weGxlPtfSvugNbhJmWABTxwEn5LfaLGoE0/3549wsCKiG7rR/Xz7dzlpyvk2KYuVQh8pkPjqTlliLZorkmGfzxke66fB6y7bSlsYD7LNWtOer+CJBEFCRYYqQWpdY7Iuxe4OSF1Tc8Msh67NI+9EG91biJBDLssaOfCqoO7dvdPltumsTSTf2W2dOY1xCxAxcCD1DTasmjPaU97In5hS+4v6fKJk= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS0PR01MB5716.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(39860400002)(136003)(376002)(346002)(366004)(1590799012)(451199015)(1580799009)(85182001)(82960400001)(186003)(38100700002)(122000001)(99936003)(83380400001)(8676002)(8936002)(2906002)(41300700001)(52536014)(4326008)(5660300002)(86362001)(55016003)(33656002)(110136005)(478600001)(26005)(9686003)(316002)(54906003)(71200400001)(7696005)(6506007)(38070700005)(53546011)(64756008)(66556008)(66476007)(76116006)(66446008)(66946007);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bXBNYmxaOU13dUxxZmNqRUh4TVFoSUJ2UnJWRXAzRmNEbTZsbDQ5UjliaXZr?= =?utf-8?B?WkhicXhxZm9Fc3ZOVThydXM4bThkMlZ0TG9uYXcrMyt5T1JmczhVSWVEeEpX?= =?utf-8?B?ZXoxdXJXZmx1YTRnV2NBQldjM2ZzZkhPMzUzZDdsMFlqaGFTRmN4U25hQ2hI?= =?utf-8?B?eEtNektkUFIweVhuNCtuMzE0MjhVUnk5UFFKWjdMVjZGRVRDY3g2RkUzbTVx?= =?utf-8?B?aE15eVFCMTFWbXBEY2N4RjNxR3NLMEVjOFRVZzRXd0t3bE1yMVpXRlhmd2to?= =?utf-8?B?RWRLZW5idWRub0FPVSs0UzdFTnptL2J0Y1VGQXhZT2xsbktMQUszVS8rNWM0?= =?utf-8?B?YjYxRm1PdFI3K0J1dzBwdU5HQTUyMmpJckZ0dnNGSG5VaEtNRUFKdkZ0elAr?= =?utf-8?B?aTVrdUZnVnBxTFNOVjJ1WVMrKzE5NmEydkFWaTFJdHo1YlZjbDBidWt4M3pF?= =?utf-8?B?a24weFhBcDI4TnVVMUV0S3loTjFoem9YRmNqS0dwS3d0UEV5YlgwcmM2U2Fy?= =?utf-8?B?cVh6SUxScUU2dGF6TEttVjJCQkZQQk9ZMDV6Wmd4c25NYXdXK2pzcXV5SFBE?= =?utf-8?B?Zk9qZDd6cVFoOGFVYjlCMjZ6ZThoT29UeWY3VEdsRzNhUHJILzRKdUNCeUpq?= =?utf-8?B?U29mZzhpVWlNTDB6NVFZa29yODNtbVVOcnFKRTdYYTRmZVFwWHppemRmRVkr?= =?utf-8?B?dDlQaTNLRGdIOUpaTzY4TG9uV29TMnVrV2d1T3RDdlhoZTZmQzRRZG9nT2ls?= =?utf-8?B?NmZ2dDkvY0tweWhuTXdCT2JTV2R6YjQybmxKWGdZWnFKSmttYWdMeXpBZm9a?= =?utf-8?B?bDlGVlNNZ3JkbDBwTzB4WmRhTnBwNVBsN3hVS2JjYWVlWjhNbWpqNHN2RTVl?= =?utf-8?B?RlFHZkZpcUhwWjg0K0pqTGNmei9tT2MrSE1RRm9sM28welJMQklpVDgyTWxv?= =?utf-8?B?SHhqT0NDT2t4MWRFYTBmb09OMTV4eEdUU3MzZXJIZGZvbW1TWUJ6ZlpXVFN5?= =?utf-8?B?aUwzZThwZ05KaVJPS05qdUJiS3BNWU5ML0RmU3dQSHJGU3p3anFyR0xyUHJN?= =?utf-8?B?YkkySTI2T0lXN2dOeS9JMlIrLy83ZlVtcmtjTlJSSWJiNzR0U0V0ckw5YlZr?= =?utf-8?B?TktnY0FySjBVUlQ0NE05VXFjSHd1SFpaWFE3MmlmT1NjM0c1TExqZkZDTk9K?= =?utf-8?B?dDBLaERhblNQZGc0WXlaaDFUOEFFWGtYMVBkTmVEMTlMZEtmZ29jS1l2TnJx?= =?utf-8?B?TFc5alJ3aisvOVJWNEVUaGhVREVheEJMWmlmN2NZUm1LK0Y2QytrSDRabGRD?= =?utf-8?B?MzljK3BYT1drSEpjb0kxd1l2RFRsOTRWU3BUM2Nvbnh5b0F3NDl1Yng1YnRu?= =?utf-8?B?ak44OUZTdGVuOURVZkFWMkNYYm1wN0VSUExIbkZZUk53UjlzV3V5K1lmL1pw?= =?utf-8?B?ZFRKM3hMVWFnZExqeTVxWGx0U2g3dk95eFNCT2lzUU5nbW1OQUtSeENHNk80?= =?utf-8?B?elREb3U3UW1icUR6a0tRUlgzOUk1UzVtUXp5MnhBVkhUSDNJMWQ0WWNwbG14?= =?utf-8?B?ZVp6V2M0VitJTzdlV09nQ0wveWo3NkZlS3V4T2dSSWFEMURlNy9HeFR6NGU5?= =?utf-8?B?TTBBcUVueUhmekc4R0o4K2Z4V1BtU0swcklXNVQ4RllZOEMwQXc3QUo1TmJx?= =?utf-8?B?Z2dTbVNEdFY1NDBpeE9NS3J4TWxyZTdVblpIWVZMZVRoS0ZXQmlpOVRJa3RZ?= =?utf-8?B?TGVvd2xQa0Mwd3BPQTBJL0tmMmtSbGlkV3NnYlcxZmVnaDhkVFFvcHhiRjdY?= =?utf-8?B?UWtMa2RBV0tXVnZhQzFxVDNVdlF1SEkvbGNlMmV6VlowelFYSDc0S2NnaktE?= =?utf-8?B?WHRsTS9PNWlualVOcWlWM0dURzFNU1IwQ250V0F2cWpjNjJtT0dyemVycnRE?= =?utf-8?B?QzFNbzJWMjh2bGJIV1p2Yk14cHYrc3FBS2ZkZXEySVFSSGR6SlVPWG9aZmJW?= =?utf-8?B?WnZQUkU1dnFuYWRlYWU4U2RqNDFMd2dsakpBakpaazN3Y0RMa0I2TE5GMmly?= =?utf-8?B?Um81aEgvaURxSWJkeVJhbHRVNFdydDg1aVVISWtJbk9weTRqRVZxWUU1UDVR?= =?utf-8?Q?kU+vJIsIpGBFHqLvk44it3BbQ?= Content-Type: multipart/mixed; boundary="_003_OS0PR01MB5716F3493A051C5BB23CAD3C943F9OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS0PR01MB5716.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f18082a1-0f51-4459-0459-08dac13d3fc6 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Nov 2022 03:56:43.3297 (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: 5DbS1TK6R7kRzdsS9X0JI1cQNyHwEq9oHR++g0BOEySHEgjnT4rX0O2sedEFEo39Jm9RUSDeYxSQ5E9Ive/29Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS0PR01MB5474 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_003_OS0PR01MB5716F3493A051C5BB23CAD3C943F9OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gTW9uZGF5LCBOb3ZlbWJlciA3LCAyMDIyIDk6MTkgUE0gaG91emouZm5zdEBmdWppdHN1LmNv bSA8aG91emouZm5zdEBmdWppdHN1LmNvbT4gd3JvdGU6DQo+IA0KPiBPbiBGcmlkYXksIE5vdmVt YmVyIDQsIDIwMjIgNzo0NSBQTSBBbWl0IEthcGlsYSA8YW1pdC5rYXBpbGExNkBnbWFpbC5jb20+ DQo+IHdyb3RlOg0KPiA+DQo+ID4gT24gRnJpLCBOb3YgNCwgMjAyMiBhdCAxOjM2IFBNIEFtaXQg S2FwaWxhIDxhbWl0LmthcGlsYTE2QGdtYWlsLmNvbT4NCj4gd3JvdGU6DQo+ID4gPg0KPiA+ID4g T24gVGh1LCBOb3YgMywgMjAyMiBhdCA2OjM2IFBNIGhvdXpqLmZuc3RAZnVqaXRzdS5jb20NCj4g PiA+IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPiB3cm90ZToNCj4gPiA+ID4NCj4gPiA+ID4gVGhh bmtzIGZvciB0aGUgYW5hbHlzaXMgYW5kIHN1bW1hcnkgIQ0KPiA+ID4gPg0KPiA+ID4gPiBJIHRy aWVkIHRvIGltcGxlbWVudCB0aGUgYWJvdmUgaWRlYSBhbmQgaGVyZSBpcyB0aGUgcGF0Y2ggc2V0 Lg0KPiA+ID4gPg0KPiA+ID4NCj4gPiA+IEZldyBjb21tZW50cyBvbiB2NDItMDAwMQ0KPiA+ID4g PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID4gPg0KPiANCj4gVGhhbmtzIGZvciB0aGUg Y29tbWVudHMuDQo+IA0KPiA+IEZldyBtb3JlIGNvbW1lbnRzIG9uIHY0Mi0wMDAxDQo+ID4gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+IDEuIEluIHBhcmFsbGVsX2FwcGx5X3Nl bmRfZGF0YSgpLCBpdCBzZWVtcyB3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMNCj4gPiBhbmQgc3dp dGNoaW5nX3RvX3NlcmlhbGl6ZSBhcmUgc2V0IHRvIGluZGljYXRlIHRoYXQgd2UgaGF2ZSBjaGFu Z2VkDQo+ID4gcGFyYWxsZWwgdG8gc2VyaWFsaXplIG1vZGUuIElzbid0IHVzaW5nIGp1c3QgdGhl DQo+ID4gc3dpdGNoaW5nX3RvX3NlcmlhbGl6ZSBzdWZmaWNpZW50PyBBbHNvLCBpdCB3b3VsZCBi ZSBiZXR0ZXIgdG8gbmFtZQ0KPiA+IHN3aXRjaGluZ190b19zZXJpYWxpemUgYXMgcGFyYWxsZWxf dG9fc2VyaWFsaXplIG9yIHNvbWV0aGluZyBsaWtlDQo+ID4gdGhhdC4NCj4gDQo+IEkgc2xpZ2h0 bHkgY2hhbmdlIHRoZSBsb2dpYyB0byBsZXQgc2VyaWFsaXplIHRoZSBtZXNzYWdlIGRpcmVjdGx5 IHdoZW4gdGltZW91dA0KPiBpbnN0ZWFkIG9mIGludm9raW5nIGFwcGx5X2Rpc3BhdGNoIGFnYWlu IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0aGUNCj4gc3dpdGNoaW5nX3RvX3NlcmlhbGl6ZS4NCj4g DQo+ID4NCj4gPiAyLiBJbiBwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEoKSwgdGhlIHBhdGNoIGhh cyBhbHJlYWR5IGluaXRpYWxpemVkDQo+ID4gdGhlIGZpbGVzZXQsIGFuZCB0aGVuIGFnYWluIGlu IGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQoKSwgaXQgd2lsbCBkbw0KPiA+IHRoZSBzYW1lIGlm IHdlIGZhaWwgd2hpbGUgc2VuZGluZyBzdHJlYW1fc3RhcnQgbWVzc2FnZSB0byB0aGUgcGFyYWxs ZWwNCj4gPiB3b3JrZXIuIEl0IHNlZW1zIHdlIGRvbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSBmaWxl c2V0IGFnYWluIGZvcg0KPiA+IFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRSBzdGF0ZSBp biBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KCkNCj4gPiB1bmxlc3MgSSBhbSBtaXNzaW5nIHNv bWV0aGluZy4NCj4gDQo+IEZpeGVkLg0KPiANCj4gPiAzLg0KPiA+IGFwcGx5X2hhbmRsZV9zdHJl YW1fc3RhcnQoU3RyaW5nSW5mbyBzKSB7IC4uLg0KPiA+ICsgaWYgKCFmaXJzdF9zZWdtZW50KQ0K PiA+ICsgew0KPiA+ICsgLyoNCj4gPiArICogVW5sb2NrIHRoZSBzaGFyZWQgb2JqZWN0IGxvY2sg c28gdGhhdCBwYXJhbGxlbCBhcHBseSB3b3JrZXINCj4gPiArICogY2FuIGNvbnRpbnVlIHRvIHJl Y2VpdmUgYW5kIGFwcGx5IGNoYW5nZXMuDQo+ID4gKyAqLw0KPiA+ICsgcGFyYWxsZWxfYXBwbHlf dW5sb2NrKHdpbmZvLT5zaGFyZWQtPnN0cmVhbV9sb2NrX2lkKTsNCj4gPiAuLi4NCj4gPiB9DQo+ ID4NCj4gPiBDYW4gd2UgaGF2ZSBhbiBhc3NlcnQgYmVmb3JlIHRoaXMgdW5sb2NrIGNhbGwgdGhh dCB0aGUgbG9jayBtdXN0IGJlDQo+ID4gaGVsZD8gU2ltaWxhcmx5LCBpZiB0aGVyZSBhcmUgb3Ro ZXIgcGxhY2VzIHRoZW4gd2UgY2FuIGhhdmUgYXNzZXJ0DQo+ID4gdGhlcmUgYXMgd2VsbC4NCj4g DQo+IEl0IHNlZW1zIHdlIGRvbid0IGhhdmUgYSBzdGFuZGFyZCBBUEkgY2FuIGJlIHVzZWQgd2l0 aG91dCBhIHRyYW5zYWN0aW9uLg0KPiBNYXliZSB3ZSBjYW4gdXNlIHRoZSBsaXN0IFBhcmFsbGVs QXBwbHlMb2NraWRzIHRvIGNoZWNrIHRoYXQgPw0KPiANCj4gPiA0LiBJdCBpcyBub3QgdmVyeSBj bGVhciB0byBtZSBob3cgbWFpbnRhaW5pbmcgUGFyYWxsZWxBcHBseUxvY2tpZHMNCj4gPiBsaXN0 IGlzIGhlbHBmdWwuDQo+IA0KPiBJIHdpbGwgdGhpbmsgYWJvdXQgdGhpcyBhbmQgcmVtb3ZlIHRo aXMgaW4gbmV4dCB2ZXJzaW9uIGxpc3QgaWYgcG9zc2libGUuDQo+IA0KPiA+DQo+ID4gNS4NCj4g PiAvKg0KPiA+ICsgKiBIYW5kbGUgU1RSRUFNIFNUQVJUIG1lc3NhZ2Ugd2hlbiB0aGUgdHJhbnNh Y3Rpb24gd2FzIHNwaWxsZWQgdG8gZGlzay4NCj4gPiArICoNCj4gPiArICogSW5pbnRpYWxpemUg ZmlsZXNldCBpZiBub3QgeWV0IGFuZCBvcGVuIHRoZSBmaWxlLg0KPiA+ICsgKi8NCj4gPiArdm9p ZA0KPiA+ICtzZXJpYWxpemVfc3RyZWFtX3N0YXJ0KFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGZp cnN0X3NlZ21lbnQpIHsNCj4gPiArIC8qDQo+ID4gKyAqIFN0YXJ0IGEgdHJhbnNhY3Rpb24gb24g c3RyZWFtIHN0YXJ0LA0KPiA+DQo+ID4gVGhpcyBmdW5jdGlvbidzIG5hbWUgYW5kIGNvbW1lbnRz IHNlZW0gdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyB0bw0KPiA+IGhhbmRsZSBzdHJlYW1fc3RhcnQg bWVzc2FnZS4gSXMgdGhhdCByZWFsbHkgdGhlIGNhc2U/IEl0IGlzIGJlaW5nDQo+ID4gY2FsbGVk IGZyb20gcGFyYWxsZWxfYXBwbHlfc2VuZF9kYXRhKCkgd2hpY2ggbWFkZSBtZSB0aGluayBpdCBj YW4gYmUNCj4gPiB1c2VkIGZyb20gb3RoZXIgcGxhY2VzIGFzIHdlbGwuDQo+IA0KPiBBZGp1c3Rl ZCB0aGUgY29tbWVudC4NCj4gDQo+IEhlcmUgaXMgdGhlIG5ldyB2ZXJzaW9uIHBhdGNoIHNldCB3 aGljaCBhZGRyZXNzZWQgY29tbWVudHMgYXMgb2YgbGFzdCBGcmlkYXkuDQo+IEkgYWxzbyBhZGRl ZCBzb21lIGNvbW1lbnRzIGZvciB0aGUgbmV3bHkgaW50cm9kdWNlZCBjb2RlcyBpbiB0aGlzIHZl cnNpb24uDQo+DQoNClNvcnJ5LCBJIHBvc3RlZCB0aGUgd3JvbmcgcGF0Y2ggZm9yIFY0MyB3aGlj aCBsYWNrIHNvbWUgY2hhbmdlcy4NCkF0dGFjaCB0aGUgY29ycmVjdCBwYXRjaCBzZXQgaGVyZS4N Cg0KQmVzdCByZWdhcmRzLA0KSG91IHpqDQo= --_003_OS0PR01MB5716F3493A051C5BB23CAD3C943F9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v44-0002-Test-streaming-parallel-option-in-tap-test.patch" Content-Description: v44-0002-Test-streaming-parallel-option-in-tap-test.patch Content-Disposition: attachment; filename="v44-0002-Test-streaming-parallel-option-in-tap-test.patch"; size=81289; creation-date="Tue, 08 Nov 2022 03:55:21 GMT"; modification-date="Tue, 08 Nov 2022 03:56:41 GMT" Content-Transfer-Encoding: base64 RnJvbSAwMzAxN2JmZmQyYmYwNDUwZDc1N2E4OTBmY2E3NjNkZGM4YjgzMzhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAic2hpeS5mbnN0IiA8c2hpeS5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBGcmksIDEzIE1heSAyMDIyIDE0OjUwOjMwICswODAwClN1YmplY3Q6IFtQQVRDSCB2NDMg Mi8yXSBUZXN0IHN0cmVhbWluZyBwYXJhbGxlbCBvcHRpb24gaW4gdGFwIHRlc3QKCkNoYW5nZSBh bGwgVEFQIHRlc3RzIHVzaW5nIHRoZSBTVUJTQ1JJUFRJT04gInN0cmVhbWluZyIgcGFyYW1ldGVy LCBzbyB0aGV5Cm5vdyB0ZXN0IGJvdGggJ29uJyBhbmQgJ3BhcmFsbGVsJyB2YWx1ZXMuCi0tLQog c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCAgICAgICAgICAgICAgfCAy MzIgKysrKysrLS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3Qu cGwgICAgICB8IDE0MyArKysrLS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1f ZGRsLnBsICAgICAgICAgIHwgMjIxICsrKysrKy0tLQogLi4uL3N1YnNjcmlwdGlvbi90LzAxOF9z dHJlYW1fc3VieGFjdF9hYm9ydC5wbCAgICAgfCAyMzMgKysrKysrLS0tCiAuLi4vc3Vic2NyaXB0 aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbCB8IDEzNCArKystLQogc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwgICAgfCAzOTQgKysrKysr KysrLS0tLS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBs ICAgICB8IDU0MCArKysrKysrKysrKystLS0tLS0tLS0KIC4uLi9zdWJzY3JpcHRpb24vdC8wMzJf c3RyZWFtaW5nX3BhcmFsbGVsX2FwcGx5LnBsIHwgMTM0ICsrKysrCiA5IGZpbGVzIGNoYW5nZWQs IDEzODcgaW5zZXJ0aW9ucygrKSwgNjQ1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9zdHJlYW1pbmdfcGFyYWxsZWxfYXBwbHkucGwK CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQgYi9zcmMvdGVz dC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQKaW5kZXggODVkMWRkOS4uMDI1MjE4ZCAxMDA2NDQK LS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi9tZXNvbi5idWlsZApAQCAtMzYsNiArMzYsNyBAQCB0ZXN0cyArPSB7CiAgICAg ICAndC8wMjlfb25fZXJyb3IucGwnLAogICAgICAgJ3QvMDMwX29yaWdpbi5wbCcsCiAgICAgICAn dC8wMzFfY29sdW1uX2xpc3QucGwnLAorICAgICAgJ3QvMDMyX3N0cmVhbWluZ19wYXJhbGxlbF9h cHBseS5wbCcsCiAgICAgICAndC8xMDBfYnVncy5wbCcsCiAgICAgXSwKICAgfSwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCmluZGV4IGNiYWEzMjcuLjY1ZjQzZjAgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwKKysrIGIvc3JjL3Rlc3Qv c3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbApAQCAtOCw2ICs4LDE0OSBAQCB1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBU ZXN0OjpNb3JlOwogCisjIENoZWNrIHRoZSBsb2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rp b24gd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBw bHkgd29ya2VyLgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3Jp YmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2Ug PQorCSAgJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5k JzsKKworCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zv cl9sb2cocXIvJHBhcmFsbGVsX21lc3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMgRW5jYXBz dWxhdGUgYWxsIHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3Ry ZWFtaW5nIgorIyBwYXJhbWV0ZXIgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9y IHRoZSBzdHJlYW1pbmc9b24gYW5kCisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0 ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIs ICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwkjIEludGVybGVhdmUgYSBwYWlyIG9m IHRyYW5zYWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0a0IgbGltaXQuCisJbXkgJGluICA9 ICcnOworCW15ICRvdXQgPSAnJzsKKworCW15ICRvZmZzZXQgPSAwOworCisJbXkgJHRpbWVyID0g SVBDOjpSdW46OnRpbWVvdXQoJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1 bHQpOworCisJbXkgJGggPSAkbm9kZV9wdWJsaXNoZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdy ZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAorCQlvbl9lcnJvcl9zdG9wID0+IDApOworCisJIyBJ ZiAic3RyZWFtaW5nIiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIGFzICJwYXJhbGxlbCIsIHdlIG5l ZWQgdG8gY2hlY2sKKwkjIHRoYXQgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGFwcGxpZWQgdXNp bmcgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJIyBXZSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBE RUJVRzEgbG9nIG1lc3NhZ2VzIGFib3V0IHRoYXQsIHNvIGJ1bXAgdXAgdGhlCisJIyBsb2cgdmVy Ym9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcx Iik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9CisKKwkjIENoZWNrIHRoZSBzdWJz Y3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+ bG9nZmlsZTsKKworCSRpbiAuPSBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsK KwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwl9OworCSRoLT5wdW1wX25i OworCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVH SU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdl bmVyYXRlX3Nlcmllcyg1MDAxLCA5OTk5KSBzKGkpOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIGEgPiA1MDAwOworCUNPTU1JVDsKKwl9KTsKKworCSRpbiAuPSBxeworCUNPTU1JVDsKKwlc cQorCX07CisJJGgtPmZpbmlzaDsgICAgIyBlcnJvcnMgbWFrZSB0aGUgbmV4dCB0ZXN0IGZhaWws IHNvIGlnbm9yZSB0aGVtIGhlcmUKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9m ZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBj b3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0 fDMzMzQpLAorCQknY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJyk7 CisKKwkjIFRlc3QgdGhlIHN0cmVhbWluZyBpbiBiaW5hcnkgbW9kZQorCSRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIg U0VUIChiaW5hcnkgPSBvbikiKTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20g bm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBJ bnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBs aW1pdC4KKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlC RUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDUwMDEsIDEwMDAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQg YiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hF UkUgbW9kKGEsMykgPSAwOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vi c2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSRyZXN1bHQgPQorCSAgJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNv dW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEo NjY2N3w2NjY3fDY2NjcpLAorCQknY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRl ZmF1bHRzJyk7CisKKwkjIENoYW5nZSB0aGUgbG9jYWwgdmFsdWVzIG9mIHRoZSBleHRyYSBjb2x1 bW5zIG9uIHRoZSBzdWJzY3JpYmVyLAorCSMgdXBkYXRlIHB1Ymxpc2hlciwgYW5kIGNoZWNrIHRo YXQgc3Vic2NyaWJlciByZXRhaW5zIHRoZSBleHBlY3RlZAorCSMgdmFsdWVzLiBUaGlzIGlzIHRv IGVuc3VyZSB0aGF0IG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zIGJlaGF2ZQorCSMgcHJvcGVy bHkgYWZ0ZXIgYSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uCisJJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJVUERBVEUgdGVzdF90YWIgU0VUIGMgPSAnZXBvY2gnOjp0 aW1lc3RhbXB0eiArIDk4NzY1NDMyMSAqIGludGVydmFsICcxcyciCisJKTsKKworCSMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJz Y3JpYmVyLT5sb2dmaWxlOworCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIlVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShhOjp0ZXh0KSIpOworCisJJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVs X2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChleHRyYWN0KGVwb2NoIGZyb20gYykgPSA5ODc2NTQzMjEpLCBjb3VudChk ID0gOTk5KSBGUk9NIHRlc3RfdGFiIgorCSk7CisJaXMoJHJlc3VsdCwgcXEoNjY2N3w2NjY3fDY2 NjcpLAorCQknY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsbHkgY2hhbmdlZCBkYXRh Jyk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpIik7 CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgUmVz ZXQgdGhlIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1 YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVz c2FnZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9Cit9CisK ICMgQ3JlYXRlIHB1Ymxpc2hlciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0 KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKQEAgLTM3LDYgKzE4MCwxMCBAQCAkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04g dGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7 CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFt aW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRh cF9zdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFw cG5hbWUnIFBVQkxJQ0FUSU9OIHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5nID0gb24pIgogKTsKQEAg LTQ5LDgyICsxOTYsMjUgQEAgbXkgJHJlc3VsdCA9CiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQo YyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8Mnwy KSwgJ2NoZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyBJ bnRlcmxlYXZlIGEgcGFpciBvZiB0cmFuc2FjdGlvbnMsIGVhY2ggZXhjZWVkaW5nIHRoZSA2NGtC IGxpbWl0LgotbXkgJGluICA9ICcnOwotbXkgJG91dCA9ICcnOwotCi1teSAkdGltZXIgPSBJUEM6 OlJ1bjo6dGltZW91dCgkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCk7 Ci0KLW15ICRoID0gJG5vZGVfcHVibGlzaGVyLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywg XCRpbiwgXCRvdXQsICR0aW1lciwKLQlvbl9lcnJvcl9zdG9wID0+IDApOwotCi0kaW4gLj0gcXsK LUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0g bWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1v ZChhLDMpID0gMDsKLX07Ci0kaC0+cHVtcF9uYjsKLQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLCA5OTk5KSBzKGkpOwot REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDUwMDA7Ci1DT01NSVQ7Ci19KTsKLQotJGlu IC49IHF7Ci1DT01NSVQ7Ci1ccQotfTsKLSRoLT5maW5pc2g7ICAgICMgZXJyb3JzIG1ha2UgdGhl IG5leHQgdGVzdCBmYWlsLCBzbyBpZ25vcmUgdGhlbSBoZXJlCi0KLSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwg Y291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0 fDMzMzQpLCAnY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJyk7Cit0 ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1l LCAwKTsKIAotIyBUZXN0IHRoZSBzdHJlYW1pbmcgaW4gYmluYXJ5IG1vZGUKLSRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1 YiBTRVQgKGJpbmFyeSA9IG9uKSIpOwotCi0jIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5v dWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgotJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLCAxMDAwMCkgcyhp KTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1E RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci1DT01NSVQ7Ci19KTsKLQot JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9 Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSg2NjY3fDY2Njd8NjY2NyksICdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9j YWwgZGVmYXVsdHMnKTsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBX SEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5n JzsiCispOwogCi0jIENoYW5nZSB0aGUgbG9jYWwgdmFsdWVzIG9mIHRoZSBleHRyYSBjb2x1bW5z IG9uIHRoZSBzdWJzY3JpYmVyLAotIyB1cGRhdGUgcHVibGlzaGVyLCBhbmQgY2hlY2sgdGhhdCBz dWJzY3JpYmVyIHJldGFpbnMgdGhlIGV4cGVjdGVkCi0jIHZhbHVlcy4gVGhpcyBpcyB0byBlbnN1 cmUgdGhhdCBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBiZWhhdmUKLSMgcHJvcGVybHkgYWZ0 ZXIgYSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKLQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBjID0gJ2Vwb2NoJzo6dGltZXN0YW1w dHogKyA5ODc2NTQzMjEgKiBpbnRlcnZhbCAnMXMnIgotKTsKLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShhOjp0ZXh0 KSIpOworCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFyYWxs ZWwsIGJpbmFyeSA9IG9mZikiKTsKIAotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lKTsKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJF IGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIK KyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byBy ZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CiAKLSRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3Vu dChleHRyYWN0KGVwb2NoIGZyb20gYykgPSA5ODc2NTQzMjEpLCBjb3VudChkID0gOTk5KSBGUk9N IHRlc3RfdGFiIgotKTsKLWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2NjY3KSwKLQknY2hlY2sg ZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsbHkgY2hhbmdlZCBkYXRhJyk7Cit0ZXN0X3N0cmVh bWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsKIAog JG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRub2RlX3B1Ymxpc2hlci0+c3RvcDsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3VieGFjdC5wbCBiL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3VieGFjdC5wbAppbmRleCBiYzBhOWNkLi4w MjBhZDk2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1 YnhhY3QucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0 LnBsCkBAIC04LDYgKzgsOTQgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBDaGVjayB0aGUg bG9nIHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1 bGx5CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KK3N1YiBjaGVja19wYXJh bGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVs KSA9IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdlID0KKwkgICdmaW5pc2hlZCBwcm9jZXNzaW5n IHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCc7CisKKwlpZiAoJGlzX3BhcmFsbGVsKQor CXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNzYWdl LywgJG9mZnNldCk7CisJfQorfQorCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qg c3RlcHMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0cmVhbWluZyIKKyMgcGFyYW1ldGVyIHNvIHRo ZSBzYW1lIGNvZGUgY2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZAorIyBz dHJlYW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5v ZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVsKSA9 IEBfOworCisJbXkgJG9mZnNldCA9IDA7CisKKwkjIElmICJzdHJlYW1pbmciIHBhcmFtZXRlciBp cyBzcGVjaWZpZWQgYXMgInBhcmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjaworCSMgdGhhdCBzdHJl YW1lZCB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtl ci4KKwkjIFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERFQlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQg dGhhdCwgc28gYnVtcCB1cCB0aGUKKwkjIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxl bCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+ cmVsb2FkOworCX0KKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgor CSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBJbnNlcnQsIHVw ZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCA2NGtCIGxpbWl0LgorCSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMywgNTAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBt b2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwor CVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwgMTAwMCkgcyhpKTsKKwlVUERBVEUgdGVzdF90 YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlTQVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLCAx NTAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwy KSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCVNBVkVQ T0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDE1MDEsIDIwMDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNF VCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHM0OworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMSwgMjUwMCkg cyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAw OworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlDT01NSVQ7CisJ fSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJ Y2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxl bCk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJP TSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDE2Njd8MTY2N3wxNjY3KSwKKwkJJ2NoZWNr IGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGluIHN0cmVhbWluZyBtb2RlIGFuZCBleHRy YSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKworCSMgQ2xlYW51cCB0aGUg dGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMikiKTsKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBSZXNldCB0aGUgbG9nIHZlcmJvc2l0eS4K KwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYo J3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJ JG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5v ZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn cHVibGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAn bG9naWNhbCcpOwpAQCAtMzcsNiArMTI1LDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0 X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVi bGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFw X3B1YiBXSVRIIChzdHJlYW1pbmcgPSBvbikiCiApOwpAQCAtNDksNDEgKzE0MSwyNiBAQCBteSAk cmVzdWx0ID0KIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJP TSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMnwyfDIpLCAnY2hlY2sgaW5pdGlhbCBkYXRh IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIEluc2VydCwgdXBkYXRlIGFuZCBkZWxl dGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKCAgICAzLCAgNTAwKSBz KGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsK LURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNBVkVQT0lOVCBzMTsK LUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoNTAxLCAgMTAwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShi KSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwz KSA9IDA7Ci1TQVZFUE9JTlQgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEwMDEsICAxNTAwKSBzKGkpOwotVVBEQVRF IHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9N IHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNBVkVQT0lOVCBzMzsKLUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUw MSwgIDIwMDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FW RVBPSU5UIHM0OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygyMDAxLCAyNTAwKSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNF VCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIG1vZChhLDMpID0gMDsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50 KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDE2Njd8MTY2N3wxNjY3 KSwKLQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIgaW4gc3RyZWFtaW5nIG1v ZGUgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKK3Rlc3Rfc3RyZWFt aW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDApOworCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVh bWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25f bmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgogKTsKIAorJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiB0 YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsKKworJG5vZGVfcHVibGlzaGVyLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9N IHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScg QU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdo aWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBU SU9OIjsKKwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVy LCAkYXBwbmFtZSwgMSk7CisKICRub2RlX3N1YnNjcmliZXItPnN0b3A7CiAkbm9kZV9wdWJsaXNo ZXItPnN0b3A7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJl YW1fZGRsLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVhbV9kZGwucGwKaW5k ZXggODY2ZjE1MS4uZDJjYzQ2ZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3Qv MDE3X3N0cmVhbV9kZGwucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVh bV9kZGwucGwKQEAgLTgsNiArOCwxMzggQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7 CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBDaGVj ayB0aGUgbG9nIHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBjb21wbGV0ZWQgc3Vj Y2Vzc2Z1bGx5CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KK3N1YiBjaGVj a19wYXJhbGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3Bh cmFsbGVsKSA9IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdlID0KKwkgICdmaW5pc2hlZCBwcm9j ZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCc7CisKKwlpZiAoJGlzX3BhcmFs bGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9t ZXNzYWdlLywgJG9mZnNldCk7CisJfQorfQorCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9u IHRlc3Qgc3RlcHMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0cmVhbWluZyIKKyMgcGFyYW1ldGVy IHNvIHRoZSBzYW1lIGNvZGUgY2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFu ZAorIyBzdHJlYW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlt eSAoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFs bGVsKSA9IEBfOworCisJbXkgJG9mZnNldCA9IDA7CisKKwkjIGEgc21hbGwgKG5vbi1zdHJlYW1l ZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZB TFVFUyAoMywgbWQ1KDM6OnRleHQpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1O IGMgSU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDQs IG1kNSg0Ojp0ZXh0KSwgLTQpOworCUNPTU1JVDsKKwl9KTsKKworCSMgSWYgInN0cmVhbWluZyIg cGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBuZWVkIHRvIGNoZWNrCisJ IyB0aGF0IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHVzaW5nIGEgcGFyYWxsZWwg YXBwbHkgd29ya2VyLgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNz YWdlcyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0eS4KKwlpZiAo JGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3Rn cmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9z dWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJv bSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkj IGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAorCSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDUsIDEwMDApIHMoaSk7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBkIElO VDsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSwgLWksIDIqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLCAyMDAwKSBzKGkpOwor CUNPTU1JVDsKKwl9KTsKKworCSMgYSBzbWFsbCAobm9uLXN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3 aXRoIERETCBhbmQgRE1MCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3Jl cycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgyMDAxLCBtZDUo MjAwMTo6dGV4dCksIC0yMDAxLCAyKjIwMDEpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBD T0xVTU4gZSBJTlQ7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVF UyAoMjAwMiwgbWQ1KDIwMDI6OnRleHQpLCAtMjAwMiwgMioyMDAyLCAtMyoyMDAyKTsKKwlDT01N SVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19w YXJhbGxlbCk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCksIGNv dW50KGUpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgyMDAyfDE5OTl8MTAwMnwx KSwKKwkJJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGluIHN0cmVhbWluZyBt b2RlIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKworCSMg Q2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9k ZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBBIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rp b24gd2l0aCBEREwgYW5kIERNTC4gT25lIG9mIHRoZSBEREwgaXMgcGVyZm9ybWVkCisJIyBhZnRl ciBETUwgdG8gZW5zdXJlIHRoYXQgd2UgaW52YWxpZGF0ZSB0aGUgc2NoZW1hIHNlbnQgZm9yIHRl c3RfdGFiIHNvIHRoYXQKKwkjIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGhhcyB0byBzZW5kIHRoZSBz Y2hlbWEgYWdhaW4uCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3Jlcycs IHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSwgLWksIDIqaSwgLTMqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygyMDAzLDUwMDApIHMoaSk7CisJ QUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBmIElOVDsKKwlDT01NSVQ7CisJfSk7CisK KwkjIEEgc21hbGwgdHJhbnNhY3Rpb24gdGhhdCB3b24ndCBnZXQgc3RyZWFtZWQuIFRoaXMgaXMg anVzdCB0byBlbnN1cmUgdGhhdCB3ZQorCSMgc2VuZCB0aGUgc2NoZW1hIGFnYWluIHRvIHJlZmxl Y3QgdGhlIGxhc3QgY29sdW1uIGFkZGVkIGluIHRoZSBwcmV2aW91cyB0ZXN0LgorCSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmksIC0zKmksIDQqaSBG Uk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLDUwMDUpIHMoaSk7CisJQ09NTUlUOworCX0pOworCisJ JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3Bh cmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJ JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VM RUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCksIGNvdW50KGUpLCBjb3VudChmKSBGUk9N IHRlc3RfdGFiIgorCSk7CisJaXMoJHJlc3VsdCwgcXEoNTAwNXw1MDAyfDQwMDV8MzAwNHw1KSwK KwkJJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGZvciBib3RoIHN0cmVhbWlu ZyBhbmQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMnCisJKTsKKworCSMgQ2xlYW51cCB0aGUg dGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7 CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKTsKKwlBTFRFUiBUQUJMRSB0ZXN0 X3RhYiBEUk9QIENPTFVNTiBjLCBEUk9QIENPTFVNTiBkLCBEUk9QIENPTFVNTiBlLCBEUk9QIENP TFVNTiBmOworCX0pOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7CisKKwkjIFJlc2V0IHRoZSBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJ eworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJ CSJsb2dfbWluX21lc3NhZ2VzID0gd2FybmluZyIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxv YWQ7CisJfQorfQorCiAjIENyZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVy ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1 Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsx NjksMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRF IFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1l ID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0 IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNV QlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNh dGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9 IG9uKSIKICk7CkBAIC00OSw3NyArMTg1LDI2IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVz dWx0LCBxcSgyfDB8MCksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3Jp YmVyJyk7CiAKLSMgYSBzbWFsbCAobm9uLXN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBh bmQgRE1MCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVH SU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDMsIG1kNSgzOjp0ZXh0KSk7Ci1BTFRF UiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGMgSU5UOwotU0FWRVBPSU5UIHMxOwotSU5TRVJU IElOVE8gdGVzdF90YWIgVkFMVUVTICg0LCBtZDUoNDo6dGV4dCksIC00KTsKLUNPTU1JVDsKLX0p OwotCi0jIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAotJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoNSwgMTAwMCkgcyhpKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZCBJ TlQ7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpLCAtaSwgMippIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEwMDEsIDIwMDApIHMoaSk7Ci1D T01NSVQ7Ci19KTsKLQotIyBhIHNtYWxsIChub24tc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGgg RERMIGFuZCBETUwKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7 Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMjAwMSwgbWQ1KDIwMDE6OnRl eHQpLCAtMjAwMSwgMioyMDAxKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZSBJ TlQ7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDIwMDIsIG1k NSgyMDAyOjp0ZXh0KSwgLTIwMDIsIDIqMjAwMiwgLTMqMjAwMik7Ci1DT01NSVQ7Ci19KTsKLQot JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9 Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkKSwgY291bnQoZSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMo JHJlc3VsdCwgcXEoMjAwMnwxOTk5fDEwMDJ8MSksCi0JJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0 byBzdWJzY3JpYmVyIGluIHN0cmVhbWluZyBtb2RlIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4g bG9jYWwgZGVmYXVsdHMnCi0pOwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9k ZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7CiAKLSMgQSBsYXJnZSAoc3RyZWFtZWQpIHRyYW5z YWN0aW9uIHdpdGggRERMIGFuZCBETUwuIE9uZSBvZiB0aGUgRERMIGlzIHBlcmZvcm1lZAotIyBh ZnRlciBETUwgdG8gZW5zdXJlIHRoYXQgd2UgaW52YWxpZGF0ZSB0aGUgc2NoZW1hIHNlbnQgZm9y IHRlc3RfdGFiIHNvIHRoYXQKLSMgdGhlIG5leHQgdHJhbnNhY3Rpb24gaGFzIHRvIHNlbmQgdGhl IHNjaGVtYSBhZ2Fpbi4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3Jlcycs IHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCks IC1pLCAyKmksIC0zKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMyw1MDAwKSBzKGkpOwotQUxU RVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBmIElOVDsKLUNPTU1JVDsKLX0pOwotCi0jIEEg c21hbGwgdHJhbnNhY3Rpb24gdGhhdCB3b24ndCBnZXQgc3RyZWFtZWQuIFRoaXMgaXMganVzdCB0 byBlbnN1cmUgdGhhdCB3ZQotIyBzZW5kIHRoZSBzY2hlbWEgYWdhaW4gdG8gcmVmbGVjdCB0aGUg bGFzdCBjb2x1bW4gYWRkZWQgaW4gdGhlIHByZXZpb3VzIHRlc3QuCi0kbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppLCA0KmkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoNTAwMSw1MDA1KSBzKGkpOwotQ09NTUlUOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChj KSwgY291bnQoZCksIGNvdW50KGUpLCBjb3VudChmKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSg1MDA1fDUwMDJ8NDAwNXwzMDA0fDUpLAotCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQg dG8gc3Vic2NyaWJlciBmb3IgYm90aCBzdHJlYW1pbmcgYW5kIG5vbi1zdHJlYW1pbmcgdHJhbnNh Y3Rpb25zJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1 c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFw cGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7 CiAKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJT Q1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFyYWxsZWwpIik7CisKKyRub2RlX3B1 Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRv bGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAn JGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRp bWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5n IFNVQlNDUklQVElPTiI7CisKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVf c3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOworCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5v ZGVfcHVibGlzaGVyLT5zdG9wOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMThfc3RyZWFtX3N1YnhhY3RfYWJvcnQucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MThfc3RyZWFtX3N1YnhhY3RfYWJvcnQucGwKaW5kZXggNTUxZjE2ZC4uNzUyZTc5YSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBs CisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5w bApAQCAtOCw2ICs4LDE0NSBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisjIENoZWNrIHRoZSBs b2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVs bHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorc3ViIGNoZWNrX3BhcmFs bGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwp ID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2UgPQorCSAgJ2ZpbmlzaGVkIHByb2Nlc3Npbmcg dGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kJzsKKworCWlmICgkaXNfcGFyYWxsZWwpCisJ eworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2cocXIvJHBhcmFsbGVsX21lc3NhZ2Uv LCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMgRW5jYXBzdWxhdGUgYWxsIHRoZSBjb21tb24gdGVzdCBz dGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3RyZWFtaW5nIgorIyBwYXJhbWV0ZXIgc28gdGhl IHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRoZSBzdHJlYW1pbmc9b24gYW5kCisjIHN0 cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9k ZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0g QF87CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCSMgSWYgInN0cmVhbWluZyIgcGFyYW1ldGVyIGlz IHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBuZWVkIHRvIGNoZWNrCisJIyB0aGF0IHN0cmVh bWVkIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHVzaW5nIGEgcGFyYWxsZWwgYXBwbHkgd29ya2Vy LgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcxIGxvZyBtZXNzYWdlcyBhYm91dCB0 aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVs KQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZics CisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5y ZWxvYWQ7CisJfQorCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJ JG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIGxhcmdlIChzdHJl YW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9MTEJBQ0tzCisJJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LDUwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhpKTsKKwlT QVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLDE1MDApIHMoaSk7CisJU0FWRVBPSU5UIHMzOwor CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMTUwMSwyMDAwKSBzKGkpOworCVJPTExCQUNLIFRPIHMyOworCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAw MSwyNTAwKSBzKGkpOworCVJPTExCQUNLIFRPIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjUwMSwzMDAwKSBzKGkp OworCVNBVkVQT0lOVCBzNDsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMwMDEsMzUwMCkgcyhpKTsKKwlTQVZFUE9JTlQg czU7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdl bmVyYXRlX3NlcmllcygzNTAxLDQwMDApIHMoaSk7CisJQ09NTUlUOworCX0pOworCisJJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVs X2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJbXkgJHJl c3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFx KDIwMDB8MCksCisJCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBv biBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJ KTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQg PSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRy YW5zYWN0aW9uIHdpdGggc3Vic2NyaWJlciByZWNlaXZpbmcgb3V0IG9mIG9yZGVyCisJIyBzdWJ0 cmFuc2FjdGlvbiBST0xMQkFDS3MKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bv c3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDQwMDEsNDUwMCkgcyhpKTsKKwlTQVZFUE9J TlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3Nlcmllcyg1MDAxLDU1MDApIHMoaSk7CisJU0FWRVBPSU5UIHMyOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNjAwMSw2NTAwKSBzKGkpOworCVNBVkVQT0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDcwMDEsNzUwMCkg cyhpKTsKKwlSRUxFQVNFIHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoODAwMSw4NTAwKSBzKGkpOworCVJPTExCQUNL IFRPIHMxOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwg JG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZS T00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgyNTAwfDApLAorCQknY2hlY2sgcm9sbGJh Y2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBDaGVj ayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1 YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0 aCBzdWJzY3JpYmVyIHJlY2VpdmluZyByb2xsYmFjaworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoODUwMSw5MDAwKSBzKGkp OworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDkwMDEsOTUwMCkgcyhpKTsKKwlTQVZFUE9JTlQg czI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdl bmVyYXRlX3Nlcmllcyg5NTAxLDEwMDAwKSBzKGkpOworCVJPTExCQUNLOworCX0pOworCisJJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFs bGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJJHJl c3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFx KDI1MDB8MCksICdjaGVjayByb2xsYmFjayB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsK KworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMikiKTsKKwkk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBSZXNldCB0 aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2Ny aWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdl cyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KK30KKwogIyBD cmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxs b3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzYsNiArMTc1LDEwIEBAICRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBf cHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsKKwor IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcg bW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1 YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFt ZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcgPSBvbikiCiApOwpAQCAtNDgs ODEgKzE5MSwyNSBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBG Uk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDApLCAnY2hlY2sgaW5pdGlhbCBkYXRh IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNh Y3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9MTEJBQ0tzCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsNTAwKSBzKGkpOwotU0FW RVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhpKTsKLVNBVkVQT0lOVCBzMjsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMTAwMSwxNTAwKSBzKGkpOwotU0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLDIwMDApIHMo aSk7Ci1ST0xMQkFDSyBUTyBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMSwyNTAwKSBzKGkpOwotUk9MTEJBQ0sg VE8gczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDI1MDEsMzAwMCkgcyhpKTsKLVNBVkVQT0lOVCBzNDsKLUlOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MzAwMSwzNTAwKSBzKGkpOwotU0FWRVBPSU5UIHM1OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzNTAxLDQwMDApIHMoaSk7 Ci1DT01NSVQ7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRy ZXN1bHQsIHFxKDIwMDB8MCksCi0JJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVm bGVjdGVkIG9uIHN1YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZh dWx0cycKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwg JGFwcG5hbWUsIDApOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor IyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24g V0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWlu Zyc7IgogKTsKIAotIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggc3Vic2NyaWJl ciByZWNlaXZpbmcgb3V0IG9mIG9yZGVyCi0jIHN1YnRyYW5zYWN0aW9uIFJPTExCQUNLcwotJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cyg0MDAxLDQ1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsNTUwMCkgcyhp KTsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNjAwMSw2NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMz OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVy YXRlX3Nlcmllcyg3MDAxLDc1MDApIHMoaSk7Ci1SRUxFQVNFIHMyOwotSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg4MDAxLDg1 MDApIHMoaSk7Ci1ST0xMQkFDSyBUTyBzMTsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQo YykgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMjUwMHwwKSwKLQknY2hlY2sgcm9s bGJhY2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIGxh cmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBzdWJzY3JpYmVyIHJlY2VpdmluZyByb2xs YmFjawotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lO OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVy YXRlX3Nlcmllcyg4NTAxLDkwMDApIHMoaSk7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0 ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDkwMDEs OTUwMCkgcyhpKTsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBp LCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoOTUwMSwxMDAwMCkgcyhpKTsKLVJP TExCQUNLOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSgyNTAwfDApLCAnY2hlY2sgcm9sbGJhY2sgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3Jp YmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIg U1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOworCiskbm9k ZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAh PSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1l ID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisgICkKKyAgb3IgZGllCisg ICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFu Z2luZyBTVUJTQ1JJUFRJT04iOworCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRu b2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsKIAogJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsK ICRub2RlX3B1Ymxpc2hlci0+c3RvcDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAxOV9zdHJlYW1fc3VieGFjdF9kZGxfYWJvcnQucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsCmluZGV4IDRkN2RhODIuLjlkNjc4 YjMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOV9zdHJlYW1fc3VieGFj dF9kZGxfYWJvcnQucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9z dWJ4YWN0X2RkbF9hYm9ydC5wbApAQCAtOSw2ICs5LDkxIEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7 CiAKKyMgQ2hlY2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgY29t cGxldGVkIHN1Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIu CitzdWIgY2hlY2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZz ZXQsICRpc19wYXJhbGxlbCkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9CisJICAnZmlu aXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQnOworCisJaWYg KCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci8k cGFyYWxsZWxfbWVzc2FnZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1bGF0ZSBhbGwg dGhlIGNvbW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciCisj IHBhcmFtZXRlciBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVh bWluZz1vbiBhbmQKKyMgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFt aW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUs ICRpc19wYXJhbGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJIyBJZiAic3RyZWFt aW5nIiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIGFzICJwYXJhbGxlbCIsIHdlIG5lZWQgdG8gY2hl Y2sKKwkjIHRoYXQgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGFwcGxpZWQgdXNpbmcgYSBwYXJh bGxlbCBhcHBseSB3b3JrZXIuCisJIyBXZSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBERUJVRzEgbG9n IG1lc3NhZ2VzIGFib3V0IHRoYXQsIHNvIGJ1bXAgdXAgdGhlCisJIyBsb2cgdmVyYm9zaXR5Lgor CWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZign cG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7CisJCSRu b2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxv ZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsK KworCSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCwgRE1MIGFuZCBST0xM QkFDS3MKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlC RUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDMsNTAwKSBzKGkpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBD T0xVTU4gYyBJTlQ7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCksIC1pIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwxMDAwKSBzKGkp OworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZCBJTlQ7CisJU0FWRVBPSU5UIHMy OworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwxNTAwKSBzKGkpOworCUFMVEVSIFRBQkxFIHRlc3Rf dGFiIEFERCBDT0xVTU4gZSBJTlQ7CisJU0FWRVBPSU5UIHMzOworCUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmksIC0zKmkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMTUwMSwyMDAwKSBzKGkpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIERST1AgQ09MVU1O IGM7CisJUk9MTEJBQ0sgVE8gczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSwgaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhpKTsKKwlDT01N SVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19w YXJhbGxlbCk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFi Iik7CisJaXMoJHJlc3VsdCwgcXEoMTAwMHw1MDApLAorCQknY2hlY2sgcm9sbGJhY2sgdG8gc2F2 ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlciBhbmQgZXh0cmEgY29sdW1ucyBjb250 YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCURFTEVURSBGUk9N IHRlc3RfdGFiIFdIRVJFIChhID4gMik7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgRFJPUCBDT0xV TU4gYzsKKwl9KTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJIyBSZXNldCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsK KwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQki bG9nX21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2Fk OworCX0KK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9 IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9wdWJs aXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzcsNiArMTIy LDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQ VUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9 ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1 c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBTVUJT Q1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRp b25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcgPSBv bikiCiApOwpAQCAtNDksMzUgKzEzOCwyNiBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNvdW50 KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDApLCAnY2hl Y2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIGxhcmdlIChz dHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9MTEJBQ0tzCi0kbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMs NTAwKSBzKGkpOwotQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBjIElOVDsKLVNBVkVQ T0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1p IEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwxMDAwKSBzKGkpOwotQUxURVIgVEFCTEUgdGVzdF90 YWIgQUREIENPTFVNTiBkIElOVDsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAw MSwxNTAwKSBzKGkpOwotQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBlIElOVDsKLVNB VkVQT0lOVCBzMzsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCks IC1pLCAyKmksIC0zKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUwMSwyMDAwKSBzKGkpOwotQUxU RVIgVEFCTEUgdGVzdF90YWIgRFJPUCBDT0xVTU4gYzsKLVJPTExCQUNLIFRPIHMxOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgaSBGUk9NIGdlbmVyYXRlX3Nl cmllcyg1MDEsMTAwMCkgcyhpKTsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJP TSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMTAwMHw1MDApLAotCSdjaGVjayByb2xsYmFj ayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1 bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNo ZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKKworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxs ZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9 ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7CiAKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFt aW5nID0gcGFyYWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgn cG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0 aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJl YW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBh cHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisKK3Rlc3Rfc3Ry ZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwor CiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwogCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBsCmluZGV4IDdh Nzk3ZjMuLjQyNjVkM2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyMl90 d29waGFzZV9jYXNjYWRlLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyMl90d29w aGFzZV9jYXNjYWRlLnBsCkBAIC0xMSw2ICsxMSwyMzkgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsK IAorIyBDaGVjayB0aGUgbG9nIHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBjb21w bGV0ZWQgc3VjY2Vzc2Z1bGx5CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4K K3N1YiBjaGVja19wYXJhbGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNl dCwgJHN0cmVhbWluZ19tb2RlKSA9IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdlID0KKwkgICdm aW5pc2hlZCBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCc7CisKKwlp ZiAoJHN0cmVhbWluZ19tb2RlIGVxICdwYXJhbGxlbCcpCisJeworCQkkbm9kZV9zdWJzY3JpYmVy LT53YWl0X2Zvcl9sb2cocXIvJHBhcmFsbGVsX21lc3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisK KyMgRW5jYXBzdWxhdGUgYWxsIHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRl ZCB0byAic3RyZWFtaW5nIiBwYXJhbWV0ZXIKKyMgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVu IGJvdGggZm9yIHRoZSBzdHJlYW1pbmc9b24gYW5kIHN0cmVhbWluZz1wYXJhbGxlbAorIyBjYXNl cy4KK3N1YiB0ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9BLCAkbm9kZV9CLCAkbm9kZV9D LCAkYXBwbmFtZV9CLCAkYXBwbmFtZV9DLCAkc3RyZWFtaW5nX21vZGUpID0KKwkgIEBfOworCisJ bXkgJG9mZnNldF9CID0gMDsKKwlteSAkb2Zmc2V0X0MgPSAwOworCisJbXkgJG9sZHBpZF9CID0g JG5vZGVfQS0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCAiCisJCVNFTEVDVCBwaWQgRlJPTSBw Z19zdGF0X3JlcGxpY2F0aW9uCisJCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVf QicgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7Iik7CisJbXkgJG9sZHBpZF9DID0gJG5vZGVfQi0+ c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCAiCisJCVNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3Jl cGxpY2F0aW9uCisJCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVfQycgQU5EIHN0 YXRlID0gJ3N0cmVhbWluZyc7Iik7CisKKwkjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24gc3Ry ZWFtaW5nIG1vZGUKKworCSRub2RlX0ItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlB TFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9CCisJCVNFVCAoc3RyZWFtaW5nID0gJHN0cmVhbWlu Z19tb2RlKTsiKTsKKwkkbm9kZV9DLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsICIKKwkJQUxU RVIgU1VCU0NSSVBUSU9OIHRhcF9zdWJfQworCQlTRVQgKHN0cmVhbWluZyA9ICRzdHJlYW1pbmdf bW9kZSkiKTsKKworCSMgV2FpdCBmb3Igc3Vic2NyaWJlcnMgdG8gZmluaXNoIGluaXRpYWxpemF0 aW9uCisKKwkkbm9kZV9BLT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkncG9zdGdyZXMnLCAiCisJCVNF TEVDVCBwaWQgIT0gJG9sZHBpZF9CIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbgorCQlXSEVSRSBh cHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0InIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIK KwkpIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQi OworCSRub2RlX0ItPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsICIKKwkJU0VMRUNU IHBpZCAhPSAkb2xkcGlkX0MgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCisJCVdIRVJFIGFwcGxp Y2F0aW9uX25hbWUgPSAnJGFwcG5hbWVfQycgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorCSkg b3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCI7CisK KwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBUZXN0IDJQQyBQUkVQQVJFIC8g Q09NTUlUIFBSRVBBUkVELgorCSMgMS4gRGF0YSBpcyBzdHJlYW1lZCBhcyBhIDJQQyB0cmFuc2Fj dGlvbi4KKwkjIDIuIFRoZW4gZG8gY29tbWl0IHByZXBhcmVkLgorCSMKKwkjIEV4cGVjdCBhbGwg ZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIocykgYWZ0ZXIgdGhlIGNvbW1pdC4KKwkj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIElmICJzdHJlYW1pbmciIHBhcmFt ZXRlciBpcyBzcGVjaWZpZWQgYXMgInBhcmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjaworCSMgdGhh dCBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgcHJlcGFyZWQgdXNpbmcgYSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIuCisJIyBXZSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBERUJVRzEgbG9nIG1lc3NhZ2Vz IGFib3V0IHRoYXQsIHNvIGJ1bXAgdXAgdGhlCisJIyBsb2cgdmVyYm9zaXR5LgorCWlmICgkc3Ry ZWFtaW5nX21vZGUgZXEgJ3BhcmFsbGVsJykKKwl7CisJCSRub2RlX0ItPmFwcGVuZF9jb25mKCdw b3N0Z3Jlc3FsLmNvbmYnLCAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCQkkbm9kZV9C LT5yZWxvYWQ7CisKKwkJJG5vZGVfQy0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJs b2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7CisJCSRub2RlX0MtPnJlbG9hZDsKKwl9CisKKwkj IENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0X0IgPSAtcyAk bm9kZV9CLT5sb2dmaWxlOworCSRvZmZzZXRfQyA9IC1zICRub2RlX0MtPmxvZ2ZpbGU7CisKKwkj IEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtC IGxpbWl0LgorCSMgVGhlbiAyUEMgUFJFUEFSRQorCSRub2RlX0EtPnNhZmVfcHNxbCgKKwkJJ3Bv c3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKKwkJVVBEQVRF IHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZS T00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0 ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7CisKKwljaGVj a19wYXJhbGxlbF9sb2coJG5vZGVfQiwgJG9mZnNldF9CLCAkc3RyZWFtaW5nX21vZGUpOworCWNo ZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9DLCAkb2Zmc2V0X0MsICRzdHJlYW1pbmdfbW9kZSk7CisK 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 JywgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBDaGVjayB0aGUg c3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldF9CID0gLXMgJG5vZGVfQi0+bG9n ZmlsZTsKKwkkb2Zmc2V0X0MgPSAtcyAkbm9kZV9DLT5sb2dmaWxlOworCisJIyAyUEMgUFJFUEFS RSB3aXRoIGEgbmVzdGVkIFJPTExCQUNLIFRPIFNBVkVQT0lOVAorCSRub2RlX0EtPnNhZmVfcHNx bCgKKwkJJ3Bvc3RncmVzJywgIgorCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFM VUVTICg5OTk5LCAnZm9vYmFyJyk7CisJCVNBVkVQT0lOVCBzcF9pbm5lcjsKKwkJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJ CVJPTExCQUNLIFRPIFNBVkVQT0lOVCBzcF9pbm5lcjsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAn b3V0ZXInOworCQkiKTsKKworCSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7 CisJJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKworCWNoZWNrX3BhcmFs bGVsX2xvZygkbm9kZV9CLCAkb2Zmc2V0X0IsICRzdHJlYW1pbmdfbW9kZSk7CisJY2hlY2tfcGFy YWxsZWxfbG9nKCRub2RlX0MsICRvZmZzZXRfQywgJHN0cmVhbWluZ19tb2RlKTsKKworCSMgY2hl Y2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIHByZXBhcmVkIG9uIHN1YnNjcmliZXIocykKKwkkcmVz dWx0ID0KKwkgICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50 KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFu c2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0ID0KKwkgICRu b2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdf cHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBw cmVwYXJlZCBvbiBzdWJzY3JpYmVyIEMnKTsKKworCSMgMlBDIENPTU1JVAorCSRub2RlX0EtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ09NTUlUIFBSRVBBUkVEICdvdXRlcic7Iik7CisKKwkkbm9k ZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWVfQyk7CisKKwkjIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBl bmRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwor CWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgZW5kZWQgb24gc3Vic2NyaWJlciBC Jyk7CisJJHJlc3VsdCA9CisJICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNF TEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFx KDApLCAndHJhbnNhY3Rpb24gaXMgZW5kZWQgb24gc3Vic2NyaWJlciBDJyk7CisKKwkjIGNoZWNr IGluc2VydHMgYXJlIHZpc2libGUgYXQgc3Vic2NyaWJlcihzKS4KKwkjIEFsbCB0aGUgc3RyZWFt ZWQgZGF0YSAocHJpb3IgdG8gdGhlIFNBVkVQT0lOVCkgc2hvdWxkIGJlIHJvbGxlZCBiYWNrLgor CSMgKDk5OTksICdmb29iYXInKSBzaG91bGQgYmUgY29tbWl0dGVkLgorCSRyZXN1bHQgPSAkbm9k ZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3Rf dGFiIHdoZXJlIGIgPSAnZm9vYmFyJzsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ1Jvd3MgY29t bWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQicpOworCSRyZXN1bHQgPQorCSAgJG5v ZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3Rh YjsiKTsKKwlpcygkcmVzdWx0LCBxcSgzKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9u IHN1YnNjcmliZXIgQicpOworCSRyZXN1bHQgPSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiIHdoZXJlIGIgPSAnZm9vYmFyJzsi KTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1 YnNjcmliZXIgQycpOworCSRyZXN1bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYjsiKTsKKwlpcygkcmVzdWx0LCBxcSgz KSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQycpOworCisJIyBD bGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCSRub2RlX0EtPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWVfQik7CisJJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9D KTsKKworCSMgUmVzZXQgdGhlIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRzdHJlYW1pbmdfbW9kZSBl cSAncGFyYWxsZWwnKQorCXsKKwkJJG5vZGVfQi0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICJsb2dfbWluX21lc3NhZ2VzID0gd2FybmluZyIpOworCQkkbm9kZV9CLT5yZWxvYWQ7CisK KwkJJG5vZGVfQy0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJsb2dfbWluX21lc3Nh Z2VzID0gd2FybmluZyIpOworCQkkbm9kZV9DLT5yZWxvYWQ7CisJfQorfQorCiAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFNldHVwIGEgY2FzY2FkZSBvZiBwdWIvc3ViIG5vZGVz LgogIyBub2RlX0EgLT4gbm9kZV9CIC0+IG5vZGVfQwpAQCAtMjYwLDE2MCArNDkzLDE1IEBAIGlz KCRyZXN1bHQsIHFxKDIxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmli ZXIgQycpOwogIyAyUEMgKyBTVFJFQU1JTkcgVEVTVFMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAKLW15ICRvbGRwaWRfQiA9ICRub2RlX0EtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCAiCi0J U0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KLQlXSEVSRSBhcHBsaWNhdGlvbl9u YW1lID0gJyRhcHBuYW1lX0InIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIpOwotbXkgJG9sZHBp ZF9DID0gJG5vZGVfQi0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLQlTRUxFQ1QgcGlkIEZS T00gcGdfc3RhdF9yZXBsaWNhdGlvbgotCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5h bWVfQycgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7Iik7Ci0KLSMgU2V0dXAgbG9naWNhbCByZXBs aWNhdGlvbiAoc3RyZWFtaW5nID0gb24pCi0KLSRub2RlX0ItPnNhZmVfcHNxbCgKLQkncG9zdGdy ZXMnLCAiCi0JQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWJfQgotCVNFVCAoc3RyZWFtaW5nID0g b24pOyIpOwotJG5vZGVfQy0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLQlBTFRFUiBTVUJT Q1JJUFRJT04gdGFwX3N1Yl9DCi0JU0VUIChzdHJlYW1pbmcgPSBvbikiKTsKLQotIyBXYWl0IGZv ciBzdWJzY3JpYmVycyB0byBmaW5pc2ggaW5pdGlhbGl6YXRpb24KLQotJG5vZGVfQS0+cG9sbF9x dWVyeV91bnRpbCgKLQkncG9zdGdyZXMnLCAiCi0JU0VMRUNUIHBpZCAhPSAkb2xkcGlkX0IgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uCi0JV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFt ZV9CJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCi0pIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxl IHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQiOwotJG5vZGVfQi0+cG9sbF9xdWVyeV91bnRp bCgKLQkncG9zdGdyZXMnLCAiCi0JU0VMRUNUIHBpZCAhPSAkb2xkcGlkX0MgRlJPTSBwZ19zdGF0 X3JlcGxpY2F0aW9uCi0JV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9DJyBBTkQg c3RhdGUgPSAnc3RyZWFtaW5nJzsiCi0pIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcg Zm9yIGFwcGx5IHRvIHJlc3RhcnQiOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Ci0jIFRlc3QgMlBDIFBSRVBBUkUgLyBDT01NSVQgUFJFUEFSRUQuCi0jIDEuIERhdGEgaXMgc3Ry ZWFtZWQgYXMgYSAyUEMgdHJhbnNhY3Rpb24uCi0jIDIuIFRoZW4gZG8gY29tbWl0IHByZXBhcmVk LgotIwotIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyKHMpIGFm dGVyIHRoZSBjb21taXQuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgSW5z ZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGlt aXQuCi0jIFRoZW4gMlBDIFBSRVBBUkUKLSRub2RlX0EtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMn LCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4 dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIg U0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFi IFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVk X3RhYic7fSk7Ci0KLSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7Ci0kbm9k ZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdF9zdHJlYW1pbmcoJG5vZGVfQSwgJG5vZGVfQiwg JG5vZGVfQywgJGFwcG5hbWVfQiwgJGFwcG5hbWVfQywgJ29uJyk7CiAKLSMgY2hlY2sgdGhlIHRy YW5zYWN0aW9uIHN0YXRlIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIocykKLSRyZXN1bHQgPQot ICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBn X3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBw cmVwYXJlZCBvbiBzdWJzY3JpYmVyIEInKTsKLSRyZXN1bHQgPQotICAkbm9kZV9DLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIp OwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3Jp YmVyIEMnKTsKLQotIyAyUEMgQ09NTUlUCi0kbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9kZV9BLT53YWl0 X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOwotJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZV9DKTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIHdhcyBjb21taXR0ZWQgb24gc3Vi c2NyaWJlcihzKQotJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJT RUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7 Ci1pcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBD IGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQiwgYW5kIGV4dHJhIGNvbHVtbnMgaGF2ZSBs b2NhbCBkZWZhdWx0cycKLSk7Ci0kcmVzdWx0ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVz dF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwKLQknUm93cyBpbnNlcnRl ZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBDLCBhbmQgZXh0cmEgY29sdW1u cyBoYXZlIGxvY2FsIGRlZmF1bHRzJwotKTsKLQotIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3Rh dGUgaXMgZW5kZWQgb24gc3Vic2NyaWJlcihzKQotJHJlc3VsdCA9Ci0gICRub2RlX0ItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7 Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJz Y3JpYmVyIEInKTsKLSRyZXN1bHQgPQotICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwg cXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBDJyk7Ci0KLSMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGVzdCAyUEMgUFJFUEFSRSB3aXRoIGEg bmVzdGVkIFJPTExCQUNLIFRPIFNBVkVQT0lOVC4KLSMgMC4gQ2xlYW51cCBmcm9tIHByZXZpb3Vz IHRlc3QgbGVhdmluZyBvbmx5IDIgcm93cy4KLSMgMS4gSW5zZXJ0IG9uZSBtb3JlIHJvdy4KLSMg Mi4gUmVjb3JkIGEgU0FWRVBPSU5ULgotIyAzLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4K LSMgNC4gRG8gcm9sbGJhY2sgdG8gU0FWRVBPSU5UIHByaW9yIHRvIHRoZSBzdHJlYW1lZCBpbnNl cnRzLgotIyA1LiBUaGVuIENPTU1JVCBQUkVQQVJFRC4KLSMKLSMgRXhwZWN0IGRhdGEgYWZ0ZXIg dGhlIFNBVkVQT0lOVCBpcyBhYm9ydGVkIGxlYXZpbmcgb25seSAzIHJvd3MgKD0gMiBvcmlnaW5h bCArIDEgZnJvbSBzdGVwIDEpLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0j IEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKGRlbGV0ZSB3aWxsIGJl IHJlcGxpY2F0ZWQpCi0kbm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9N IHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIDJQQyBQUkVQQVJFIHdpdGggYSBuZXN0ZWQg Uk9MTEJBQ0sgVE8gU0FWRVBPSU5UCi0kbm9kZV9BLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywg IgotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OSwgJ2Zvb2Jhcicp OwotCVNBVkVQT0lOVCBzcF9pbm5lcjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRF IHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHNw X2lubmVyOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ291dGVyJzsKLQkiKTsKLQotJG5vZGVfQS0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWVfQyk7Ci0KLSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIHByZXBhcmVkIG9u IHN1YnNjcmliZXIocykKLSRyZXN1bHQgPQotICAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3Vs dCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyIEInKTsKLSRy ZXN1bHQgPQotICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2Fj dGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyIEMnKTsKLQotIyAyUEMgQ09NTUlUCi0kbm9k ZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNPTU1JVCBQUkVQQVJFRCAnb3V0ZXInOyIpOwot Ci0kbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOwotJG5vZGVfQi0+d2FpdF9m b3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKLQotIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUg aXMgZW5kZWQgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9Ci0gICRub2RlX0ItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1p cygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIgQicp OwotJHJlc3VsdCA9Ci0gICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3Ry YW5zYWN0aW9uIGlzIGVuZGVkIG9uIHN1YnNjcmliZXIgQycpOwotCi0jIGNoZWNrIGluc2VydHMg YXJlIHZpc2libGUgYXQgc3Vic2NyaWJlcihzKS4KLSMgQWxsIHRoZSBzdHJlYW1lZCBkYXRhIChw cmlvciB0byB0aGUgU0FWRVBPSU5UKSBzaG91bGQgYmUgcm9sbGVkIGJhY2suCi0jICg5OTk5LCAn Zm9vYmFyJykgc2hvdWxkIGJlIGNvbW1pdHRlZC4KLSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWIgd2hlcmUgYiA9 ICdmb29iYXInOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJl c2VudCBvbiBzdWJzY3JpYmVyIEInKTsKLSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiOyIpOwotaXMoJHJlc3VsdCwg cXEoMyksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVyIEInKTsKLSRy ZXN1bHQgPSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCop IEZST00gdGVzdF90YWIgd2hlcmUgYiA9ICdmb29iYXInOyIpOwotaXMoJHJlc3VsdCwgcXEoMSks ICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVyIEMnKTsKLSRyZXN1bHQg PSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRl c3RfdGFiOyIpOwotaXMoJHJlc3VsdCwgcXEoMyksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2Vu dCBvbiBzdWJzY3JpYmVyIEMnKTsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX0EsICRub2Rl X0IsICRub2RlX0MsICRhcHBuYW1lX0IsICRhcHBuYW1lX0MsICdwYXJhbGxlbCcpOwogCiAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIGNoZWNrIGFsbCB0aGUgY2xlYW51cApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3BoYXNlX3N0cmVhbS5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190d29waGFzZV9zdHJlYW0ucGwKaW5kZXggOWI0 NTQxMC4uODJiNWU2YyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3 b3BoYXNlX3N0cmVhbS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhh c2Vfc3RyZWFtLnBsCkBAIC04LDYgKzgsMzA4IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMg Q2hlY2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3YXMgY29tcGxldGVk IHN1Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCitzdWIg Y2hlY2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRp c19wYXJhbGxlbCkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVzc2FnZSA9CisJICAnZmluaXNoZWQg cHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQnOworCisJaWYgKCRpc19w YXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZyhxci8kcGFyYWxs ZWxfbWVzc2FnZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNv bW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1pbmciCisjIHBhcmFt ZXRlciBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1v biBhbmQKKyMgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7 CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19w YXJhbGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSAvIENPTU1JVCBQUkVQQVJFRC4KKwkj IDEuIERhdGEgaXMgc3RyZWFtZWQgYXMgYSAyUEMgdHJhbnNhY3Rpb24uCisJIyAyLiBUaGVuIGRv IGNvbW1pdCBwcmVwYXJlZC4KKwkjCisJIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBv biBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KKwkjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisKKwkjIElmICJzdHJlYW1pbmciIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQg YXMgInBhcmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjaworCSMgdGhhdCBzdHJlYW1lZCB0cmFuc2Fj dGlvbiB3YXMgcHJlcGFyZWQgdXNpbmcgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJIyBXZSBo YXZlIHRvIGxvb2sgZm9yIHRoZSBERUJVRzEgbG9nIG1lc3NhZ2VzIGFib3V0IHRoYXQsIHNvIGJ1 bXAgdXAgdGhlCisJIyBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkk bm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2df bWluX21lc3NhZ2VzID0gZGVidWcxIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9 CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0g LXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgY2hlY2sgdGhhdCAyUEMgZ2V0cyBy ZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIKKwkjIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5v dWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBz KGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAw OworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUg VFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVf c3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSMgY2hlY2sgdGhhdCB0cmFu c2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJbXkgJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50 KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFu c2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIDJQQyB0cmFuc2FjdGlv biBnZXRzIGNvbW1pdHRlZAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50 KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMzMz NHwzMzM0fDMzMzQpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24g c3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKwkp OworCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQs IHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFRlc3QgMlBDIFBSRVBBUkUgLyBST0xM QkFDSyBQUkVQQVJFRC4KKwkjIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hp Y2ggYXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMgc3RyZWFtZWQg dXNpbmcgMlBDLgorCSMgMy4gRG8gcm9sbGJhY2sgcHJlcGFyZWQuCisJIworCSMgRXhwZWN0IGRh dGEgcm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgdGhlIG9yaWdpbmFsIDIgcm93cy4KKwkjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhj ZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKKwkkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7 Iik7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0 ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgVGhlbiBpbnNlcnQsIHVwZGF0 ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlO U0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMywgNTAwMCkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdI RVJFIG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykg PSAwOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFy YWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkj IGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJl cgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQs IHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyAy UEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkJIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7 CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBj aGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVz dWx0LCBxcSgyfDJ8MiksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBhcmUgcm9sbGVkIGJhY2ss IGxlYXZpbmcgb25seSB0aGUgb3JpZ2luYWwgMiByb3dzJworCSk7CisKKwkkcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0 aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworCSMgQ2hlY2sgdGhhdCAyUEMgQ09NTUlUIFBSRVBBUkVEIGlzIGRlY29kZWQg cHJvcGVybHkgb24gY3Jhc2ggcmVzdGFydC4KKwkjIDEuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxl dGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSMgMi4gVGhlbiBzZXJ2 ZXIgY3Jhc2hlcyBiZWZvcmUgdGhlIDJQQyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCisJIyAz LiBBZnRlciBzZXJ2ZXJzIGFyZSByZXN0YXJ0ZWQgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb24gaXMg Y29tbWl0dGVkLgorCSMKKwkjIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNj cmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgorCSMgTm90ZTogYm90aCBwdWJsaXNoZXIgYW5k IHN1YnNjcmliZXIgZG8gY3Jhc2gvcmVzdGFydC4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zm c2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAw KSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikg PSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBB UkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3N1YnNjcmli ZXItPnN0b3AoJ2ltbWVkaWF0ZScpOworCSRub2RlX3B1Ymxpc2hlci0+c3RvcCgnaW1tZWRpYXRl Jyk7CisKKwkkbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCSRub2RlX3N1YnNjcmliZXItPnN0YXJ0 OworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19w YXJhbGxlbCk7CisKKwkjIGNvbW1pdCBwb3N0IHRoZSByZXN0YXJ0CisJJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJl ZF90YWInOyIpOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7 CisKKwkjIGNoZWNrIGluc2VydHMgYXJlIHZpc2libGUKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMzMzNHwz MzM0fDMzMzQpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vi c2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKwkpOwor CisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgRG8gSU5TRVJUIGFmdGVyIHRo ZSBQUkVQQVJFIGJ1dCBiZWZvcmUgUk9MTEJBQ0sgUFJFUEFSRUQuCisJIyAxLiBUYWJsZSBpcyBk ZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIu CisJIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KKwkjIDMuIEEgc2luZ2xlIHJvdyBJ TlNFUlQgaXMgZG9uZSB3aGljaCBpcyBhZnRlciB0aGUgUFJFUEFSRS4KKwkjIDQuIFRoZW4gZG8g YSBST0xMQkFDSyBQUkVQQVJFRC4KKwkjCisJIyBFeHBlY3QgdGhlIDJQQyBkYXRhIHJvbGxzIGJh Y2sgbGVhdmluZyBvbmx5IDMgcm93cyBvbiB0aGUgc3Vic2NyaWJlcgorCSMgKHRoZSBvcmlnaW5h bCAyICsgaW5zZXJ0ZWQgMSkuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJ IyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxp Y2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVU RSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJl ciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2Zp bGU7CisKKwkjIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBl eGNlZWQgdGhlIDY0a0IgbGltaXQuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdw b3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFU RSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAn dGVzdF9wcmVwYXJlZF90YWInO30pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAk b2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGlu IHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVw YXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBh cmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgSW5zZXJ0IGEgZGlmZmVyZW50IHJlY29yZCAobm93 IHdlIGFyZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rpb24pCisJIyBOb3RlOiB0aGUgMlBD IHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUgdGhpcyBpbnNl cnQgaXMgZm9yIGEgc2VwYXJhdGUgcHJpbWFyeSBrZXkKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5OSwg J2Zvb2JhcicpIik7CisKKwkjIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGFib3J0ZWQKKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiUk9MTEJBQ0sgUFJFUEFSRUQgJ3Rl c3RfcHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBz dWJzY3JpYmVyLAorCSMgYnV0IHRoZSBleHRyYSBJTlNFUlQgb3V0c2lkZSBvZiB0aGUgMlBDIHN0 aWxsIHdhcyByZXBsaWNhdGVkCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5 OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDN8M3wzKSwKKwkJJ2NoZWNrIHRo ZSBvdXRzaWRlIGluc2VydCB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKKworCSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJh bnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisJIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9y ZSBDT01NSVQgUFJFUEFSRUQuCisJIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dz IHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIuCisJIyAyLiBEYXRhIGlzIHN0cmVh bWVkIHVzaW5nIDJQQy4KKwkjIDMuIEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBp cyBhZnRlciB0aGUgUFJFUEFSRS4KKwkjIDQuIFRoZW4gZG8gYSBDT01NSVQgUFJFUEFSRUQuCisJ IworCSMgRXhwZWN0IDJQQyBkYXRhICsgdGhlIGV4dHJhIHJvdyBhcmUgb24gdGhlIHN1YnNjcmli ZXIKKwkjICh0aGUgMzMzNCArIGluc2VydGVkIDEgPSAzMzM1KS4KKwkjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAy IHJvd3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7CisKKwkj IENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5v ZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgVGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVs ZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkkbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywg NTAwMCkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChh LDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQ UkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9n KCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkjIGNoZWNrIHRo YXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCSRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAn dHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBJbnNlcnQgYSBk aWZmZXJlbnQgcmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlv bikKKwkjIE5vdGU6IHRoZSAyUEMgdHJhbnNhY3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNv IG1ha2Ugc3VyZSB0aGlzIGluc2VydCBpcyBmb3IgYSBzZXBhcmFyZSBwcmltYXJ5IGtleQorCSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJJTlNFUlQgSU5UTyB0ZXN0 X3RhYiBWQUxVRVMgKDk5OTk5LCAnZm9vYmFyJykiKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdl dHMgY29tbWl0dGVkCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2Fj dGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyks IGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM1fDMz MzV8MzMzNSksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyAoYXMgd2VsbCBhcyBvdXRzaWRlIGlu c2VydCkgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29u dGFpbiBsb2NhbCBkZWZhdWx0cycKKwkpOworCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFy ZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0 ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIg V0hFUkUgYSA+IDI7Iik7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKKworCSMgUmVzZXQgdGhlIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkK Kwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAor CQkJImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJl bG9hZDsKKwl9Cit9CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgU2V0dXAK ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTQ4LDYgKzM1MCwxMCBAQCAkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04g dGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7 CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFt aW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgKIAkncG9zdGdyZXMnLCAiCiAJQ1JFQVRFIFNVQlNDUklQVElP TiB0YXBfc3ViCkBAIC02NCwyMzYgKzM3MCwzMCBAQCBteSAkdHdvcGhhc2VfcXVlcnkgPQogJG5v ZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCAkdHdvcGhhc2VfcXVl cnkpCiAgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN1YnNjcmliZXIgdG8g ZW5hYmxlIHR3b3BoYXNlIjsKIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBD aGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyCi0jIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiBteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5 OTkpIEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwgJ2NoZWNrIGluaXRp YWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwotIyBUZXN0IDJQQyBQUkVQQVJFIC8gQ09NTUlUIFBSRVBBUkVELgotIyAx LiBEYXRhIGlzIHN0cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9uLgotIyAyLiBUaGVuIGRvIGNv bW1pdCBwcmVwYXJlZC4KLSMKLSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24gc3Vi c2NyaWJlciBzaWRlIGFmdGVyIHRoZSBjb21taXQuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIs ICRhcHBuYW1lLCAwKTsKIAotIyBjaGVjayB0aGF0IDJQQyBnZXRzIHJlcGxpY2F0ZWQgdG8gc3Vi c2NyaWJlcgotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2Vl ZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3Jl cycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3Rh YiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90 YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFy ZWRfdGFiJzt9KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1l KTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1 YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVz dWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKLQot IyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCi0JIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIp OwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNo ZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50 KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3Vs dCwgcXEoMzMzNHwzMzM0fDMzMzQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1p dHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1 bHRzJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2lu ZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxp Y2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7Ci0k cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVD VCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCks ICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRlc3QgMlBDIFBSRVBBUkUgLyBST0xMQkFDSyBQUkVQ QVJFRC4KLSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVw bGljYXRlZCBvbiBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4K LSMgMy4gRG8gcm9sbGJhY2sgcHJlcGFyZWQuCi0jCi0jIEV4cGVjdCBkYXRhIHJvbGxzIGJhY2sg bGVhdmluZyBvbmx5IHRoZSBvcmlnaW5hbCAyIHJvd3MuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCi0KLSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAo d2lsbCBiZSByZXBsaWNhdGVkKQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0 LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQu Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotCUJFR0lOOwot CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikg V0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMp ID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CiAKLSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhh dCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFu c2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgMlBDIHRyYW5zYWN0aW9u IGdldHMgYWJvcnRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQki Uk9MTEJBQ0sgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0 aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3Vu dChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgyfDJ8MiksCi0JJ1Jv d3MgaW5zZXJ0ZWQgYnkgMlBDIGFyZSByb2xsZWQgYmFjaywgbGVhdmluZyBvbmx5IHRoZSBvcmln aW5hbCAyIHJvd3MnKTsKLQotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsK LWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVy Jyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ2hlY2sgdGhhdCAyUEMg Q09NTUlUIFBSRVBBUkVEIGlzIGRlY29kZWQgcHJvcGVybHkgb24gY3Jhc2ggcmVzdGFydC4KLSMg MS4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0 a0IgbGltaXQuCi0jIDIuIFRoZW4gc2VydmVyIGNyYXNoZXMgYmVmb3JlIHRoZSAyUEMgdHJhbnNh Y3Rpb24gaXMgY29tbWl0dGVkLgotIyAzLiBBZnRlciBzZXJ2ZXJzIGFyZSByZXN0YXJ0ZWQgdGhl IHBlbmRpbmcgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgotIwotIyBFeHBlY3QgYWxsIGRhdGEg aXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KLSMgTm90 ZTogYm90aCBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZG8gY3Jhc2gvcmVzdGFydC4KLSMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo Ci0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBE QVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAn dGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0kbm9kZV9zdWJzY3JpYmVyLT5zdG9wKCdpbW1lZGlh dGUnKTsKLSRub2RlX3B1Ymxpc2hlci0+c3RvcCgnaW1tZWRpYXRlJyk7Ci0KLSRub2RlX3B1Ymxp c2hlci0+c3RhcnQ7Ci0kbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKLQotIyBjb21taXQgcG9zdCB0 aGUgcmVzdGFydAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ09N TUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0kbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIGluc2VydHMgYXJlIHZpc2libGUK LSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VM RUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwot aXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBo YXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxv Y2FsIGRlZmF1bHRzJwotKTsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBE byBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9yZSBST0xMQkFDSyBQUkVQQVJFRC4K LSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRl ZCBvbiBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KLSMgMy4g QSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQUkVQQVJFLgot IyA0LiBUaGVuIGRvIGEgUk9MTEJBQ0sgUFJFUEFSRUQuCi0jCi0jIEV4cGVjdCB0aGUgMlBDIGRh dGEgcm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgMyByb3dzIG9uIHRoZSBzdWJzY3JpYmVyCi0jICh0 aGUgb3JpZ2luYWwgMiArIGluc2VydGVkIDEpLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwotCi0jIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwg YmUgcmVwbGljYXRlZCkKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyBUaGVuIGluc2VydCwgdXBk YXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgotJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsKLQlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJF IG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7 Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0kbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rp b24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIEluc2VydCBhIGRpZmZlcmVudCBy ZWNvcmQgKG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQotIyBOb3Rl OiB0aGUgMlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUg dGhpcyBpbnNlcnQgaXMgZm9yIGEgc2VwYXJhdGUgcHJpbWFyeSBrZXkKLSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAo OTk5OTksICdmb29iYXInKSIpOwotCi0jIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGFib3J0ZWQKLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlJPTExCQUNLIFBSRVBBUkVE ICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9u IHN1YnNjcmliZXIsCi0jIGJ1dCB0aGUgZXh0cmEgSU5TRVJUIG91dHNpZGUgb2YgdGhlIDJQQyBz dGlsbCB3YXMgcmVwbGljYXRlZAotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5 KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzfDN8MyksICdjaGVjayB0aGUgb3V0 c2lkZSBpbnNlcnQgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7Ci0KLSRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZS T00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9u IGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCi0jIERvIElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIENPTU1JVCBQ UkVQQVJFRC4KLSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUg cmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQ Qy4KLSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQ UkVQQVJFLgotIyA0LiBUaGVuIGRvIGEgQ09NTUlUIFBSRVBBUkVELgotIwotIyBFeHBlY3QgMlBD IGRhdGEgKyB0aGUgZXh0cmEgcm93IGFyZSBvbiB0aGUgc3Vic2NyaWJlcgotIyAodGhlIDMzMzQg KyBpbnNlcnRlZCAxID0gMzMzNSkuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0K LSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBs aWNhdGVkKQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5k IGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywg NTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEs MikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQ QVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7Ci0KLSRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlv biBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBn X3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBw cmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgSW5zZXJ0IGEgZGlmZmVyZW50IHJlY29yZCAo bm93IHdlIGFyZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rpb24pCi0jIE5vdGU6IHRoZSAy UEMgdHJhbnNhY3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNvIG1ha2Ugc3VyZSB0aGlzIGlu c2VydCBpcyBmb3IgYSBzZXBhcmFyZSBwcmltYXJ5IGtleQotJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKLQkiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5OSwg J2Zvb2JhcicpIik7Ci0KLSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgY29tbWl0dGVkCi0kbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3Rf cHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRF UiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFyYWxsZWwpIik7CiAKLSMg Y2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgotJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSgzMzM1fDMzMzV8MzMzNSksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIChhcyB3ZWxs IGFzIG91dHNpZGUgaW5zZXJ0KSBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0 cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwotKTsKKyRub2RlX3B1Ymxpc2hlci0+ cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3 aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQ VElPTiI7CiAKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVz dWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7Cit0 ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1l LCAxKTsKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBjaGVjayBhbGwgdGhl IGNsZWFudXAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9zdHJlYW1p bmdfcGFyYWxsZWxfYXBwbHkucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfc3RyZWFt aW5nX3BhcmFsbGVsX2FwcGx5LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmIyMWU5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJf c3RyZWFtaW5nX3BhcmFsbGVsX2FwcGx5LnBsCkBAIC0wLDAgKzEsMTM0IEBACisjIENvcHlyaWdo dCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0 IGZvciBkZWFkbG9jayBpbiBzdHJlYW1pbmcgbW9kZSAicGFyYWxsZWwiIGluIGxvZ2ljYWwgcmVw bGljYXRpb24uCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpN b3JlOworCitteSAkb2Zmc2V0ID0gMDsKKworIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKK215ICRu b2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVy Jyk7Ciskbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcp OworJG5vZGVfcHVibGlzaGVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwknbG9n aWNhbF9kZWNvZGluZ193b3JrX21lbSA9IDY0a0InKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7 CisKKyMgQ3JlYXRlIHN1YnNjcmliZXIgbm9kZQorbXkgJG5vZGVfc3Vic2NyaWJlciA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJlcicpOworJG5vZGVfc3Vic2NyaWJl ci0+aW5pdDsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCisjIFNldHVwIHN0cnVjdHVyZSBv biBwdWJsaXNoZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdGVzdF90YWIgKGEgaW50KSIpOworCisjIFNldHVwIHN0cnVjdHVyZSBvbiBzdWJz Y3JpYmVyCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0ZXN0X3RhYiAoYSBpbnQpIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfdGFiIG9uIHRlc3RfdGFiKGEpIik7 CisKKyMgU2V0dXAgbG9naWNhbCByZXBsaWNhdGlvbgorbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0g JG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9w dWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CisKK215ICRhcHBuYW1lID0gJ3RhcF9zdWInOworJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsICIKKwlDUkVBVEUgU1VCU0NS SVBUSU9OIHRhcF9zdWIKKwlDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRp b25fbmFtZT0kYXBwbmFtZScKKwlQVUJMSUNBVElPTiB0YXBfcHViCisJV0lUSCAoc3RyZWFtaW5n ID0gcGFyYWxsZWwsIGNvcHlfZGF0YSA9IGZhbHNlKSIpOworCiskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisjIEludGVybGVhdmUgYSBwYWlyIG9mIHRyYW5z YWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0a0IgbGltaXQuCitteSAkaW4gID0gJyc7Citt eSAkb3V0ID0gJyc7CisKK215ICR0aW1lciA9IElQQzo6UnVuOjp0aW1lb3V0KCRQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KTsKKworbXkgJGggPSAkbm9kZV9wdWJsaXNo ZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAorCW9u X2Vycm9yX3N0b3AgPT4gMCk7CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBDb25maXJtIGlm IGEgZGVhZGxvY2sgYmV0d2VlbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgdGhlIHBhcmFs bGVsIGFwcGx5CisjIHdvcmtlciBjYW4gYmUgZGV0ZWN0ZWQuCisjID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKworJGluIC49IHF7CitCRUdJTjsKK0lOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSk7Cit9OworJGgtPnB1bXBfbmI7CisKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3Rh YiB2YWx1ZXMoMSkiKTsKKworJGluIC49IHF7CitDT01NSVQ7CitccQorfTsKKyRoLT5maW5pc2g7 CisKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwlxci9FUlJPUjogKCBbQS1aMC05 XSs6KT8gZGVhZGxvY2sgZGV0ZWN0ZWQvLAorCSRvZmZzZXQpOworCisjIERyb3AgdGhlIHVuaXF1 ZSBpbmRleCBvbiB0aGUgc3Vic2NyaWJlciwgbm93IGl0IHdvcmtzLgorJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIElOREVYIGlkeF90YWIiKTsKKworIyBXYWl0 IGZvciB0aGlzIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB0byBiZSBhcHBsaWVkIGluIHRoZSBhcHBs eSB3b3JrZXIuCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwor CitteSAkcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYiIpOworaXMoJHJlc3VsdCwgcXEoNTAwMSks ICdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBpbmRleCcpOwor CisjIENsZWFuIHVwIHRlc3QgZGF0YSBmcm9tIHRoZSBlbnZpcm9ubWVudC4KKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJUUlVOQ0FURSBUQUJMRSB0ZXN0X3RhYiIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVU5JUVVFIElOREVYIGlkeF90 YWIgb24gdGVzdF90YWIoYSkiKTsKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIENvbmZpcm0g aWYgYSBkZWFkbG9jayBiZXR3ZWVuIHR3byBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGNhbiBiZSBk ZXRlY3RlZC4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIENoZWNrIHRoZSBzdWJzY3JpYmVy IGxvZyBmcm9tIG5vdyBvbi4KKyRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxl OworCiskaW4gLj0gcXsKK0JFR0lOOworSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkgcyhpKTsKK307CiskaC0+cHVtcF9uYjsKKworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSkiKTsKKworJGluIC49 IHF7CitDT01NSVQ7CitccQorfTsKKyRoLT5maW5pc2g7CisKKyRub2RlX3N1YnNjcmliZXItPndh aXRfZm9yX2xvZygKKwlxci9FUlJPUjogKCBbQS1aMC05XSs6KT8gZGVhZGxvY2sgZGV0ZWN0ZWQv LAorCSRvZmZzZXQpOworCisjIERyb3AgdGhlIHVuaXF1ZSBpbmRleCBvbiB0aGUgc3Vic2NyaWJl ciwgbm93IGl0IHdvcmtzLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIElOREVYIGlkeF90YWIiKTsKKworIyBXYWl0IGZvciB0aGlzIHN0cmVhbWluZyB0cmFu c2FjdGlvbiB0byBiZSBhcHBsaWVkIGluIHRoZSBhcHBseSB3b3JrZXIuCiskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0 X3RhYiIpOworaXMoJHJlc3VsdCwgcXEoMTAwMDApLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNj cmliZXIgYWZ0ZXIgZHJvcHBpbmcgaW5kZXgnKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsK KyRub2RlX3B1Ymxpc2hlci0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjcuMi53aW5k b3dzLjEKCg== --_003_OS0PR01MB5716F3493A051C5BB23CAD3C943F9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v44-0001-Perform-streaming-logical-transactions-by-parall.patch" Content-Description: v44-0001-Perform-streaming-logical-transactions-by-parall.patch Content-Disposition: attachment; filename="v44-0001-Perform-streaming-logical-transactions-by-parall.patch"; size=172035; creation-date="Tue, 08 Nov 2022 03:55:21 GMT"; modification-date="Tue, 08 Nov 2022 03:56:42 GMT" Content-Transfer-Encoding: base64 RnJvbSBiZjg5OTBhYmYxZmQ4YmNhN2E2MTEzZDFmNDc1MWE1MjIxYjg4NTJiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHY0NF0gUGVyZm9ybSBzdHJlYW1pbmcgbG9naWNhbCB0cmFuc2FjdGlvbnMgYnkgcGFyYWxsZWwK IHdvcmtlcnMKCkN1cnJlbnRseSwgZm9yIGxhcmdlIHRyYW5zYWN0aW9ucywgdGhlIHB1Ymxpc2hl ciBzZW5kcyB0aGUgZGF0YSBpbiBtdWx0aXBsZQpzdHJlYW1zIChjaGFuZ2VzIGRpdmlkZWQgaW50 byBjaHVua3MgZGVwZW5kaW5nIHVwb24gbG9naWNhbF9kZWNvZGluZ193b3JrX21lbSksCmFuZCB0 aGVuIG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUsIHRoZSBhcHBseSB3b3JrZXIgd3JpdGVzIHRoZSBj aGFuZ2VzIGludG8KdGVtcG9yYXJ5IGZpbGVzIGFuZCBvbmNlIGl0IHJlY2VpdmVzIHRoZSBjb21t aXQsIGl0IHJlYWRzIGZyb20gdGhvc2UgZmlsZXMgYW5kCmFwcGxpZXMgdGhlIGVudGlyZSB0cmFu c2FjdGlvbi4gVG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygc3VjaAp0cmFuc2FjdGlvbnMs IHdlIGNhbiBpbnN0ZWFkIGFsbG93IHRoZW0gdG8gYmUgYXBwbGllZCB2aWEgcGFyYWxsZWwgd29y a2Vycy4KCkluIHRoaXMgYXBwcm9hY2gsIHdlIGFzc2lnbiBhIG5ldyBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgKGlmIGF2YWlsYWJsZSkgYXMKc29vbiBhcyB0aGUgeGFjdCdzIGZpcnN0IHN0cmVhbSBp cyByZWNlaXZlZCBhbmQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbApzZW5kIGNoYW5nZXMg dG8gdGhpcyBuZXcgd29ya2VyIHZpYSBzaGFyZWQgbWVtb3J5LiBUaGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyCndpbGwgZGlyZWN0bHkgYXBwbHkgdGhlIGNoYW5nZSBpbnN0ZWFkIG9mIHdyaXRpbmcg aXQgdG8gdGVtcG9yYXJ5IGZpbGVzLiBXZQprZWVwIHRoaXMgd29ya2VyIGFzc2lnbmVkIHRpbGwg dGhlIHRyYW5zYWN0aW9uIGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0CmZvciB0aGUg d29ya2VyIHRvIGZpbmlzaCBhdCBjb21taXQuIFRoaXMgcHJlc2VydmVzIGNvbW1pdCBvcmRlcmlu ZyBhbmQgYXZvaWRzCndyaXRpbmcgdG8gYW5kIHJlYWRpbmcgZnJvbSBmaWxlcyBpbiBtb3N0IGNh c2VzLiBXZSBzdGlsbCBuZWVkIHRvIHNwaWxsIGlmCnRoZXJlIGlzIG5vIHdvcmtlciBhdmFpbGFi bGUuCgpUaGlzIHBhdGNoIGFsc28gZXh0ZW5kcyB0aGUgU1VCU0NSSVBUSU9OICdzdHJlYW1pbmcn IHBhcmFtZXRlciBzbyB0aGF0IHRoZSB1c2VyCmNhbiBjb250cm9sIHdoZXRoZXIgdG8gYXBwbHkg dGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBpbiBhIHBhcmFsbGVsIGFwcGx5CndvcmtlciBvciBz cGlsbCB0aGUgY2hhbmdlIHRvIGRpc2suIFRoZSB1c2VyIGNhbiBzZXQgdGhlIHN0cmVhbWluZyBw YXJhbWV0ZXIgdG8KJ29uL29mZicsICdwYXJhbGxlbCcuIFRoZSBwYXJhbWV0ZXIgdmFsdWUgJ3Bh cmFsbGVsJyBtZWFucyB0aGUgc3RyZWFtaW5nIHdpbGwKYmUgYXBwbGllZCB2aWEgYSBwYXJhbGxl bCBhcHBseSB3b3JrZXIsIGlmIGF2YWlsYWJsZS4gVGhlIHBhcmFtZXRlciB2YWx1ZQonb24nIG1l YW5zIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gd2lsbCBiZSBzcGlsbGVkIHRvIGRpc2suIFRo ZSBkZWZhdWx0IHZhbHVlCmlzICdvZmYnIChzYW1lIGFzIGN1cnJlbnQgYmVoYXZpb3VyKS4KCklu IGFkZGl0aW9uLCB0aGUgcGF0Y2ggZXh0ZW5kcyB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiBTVFJF QU1fQUJPUlQgbWVzc2FnZSBzbwp0aGF0IGFib3J0X3RpbWUgYW5kIGFib3J0X2xzbiBjYW4gYWxz byBiZSBzZW50IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUKcmVwbGljYXRpb24gb3Jp Z2luIGluIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3aGVuIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rp b24gaXMKYWJvcnRlZC4gQmVjYXVzZSB0aGlzIG1lc3NhZ2UgZXh0ZW5zaW9uIGlzIG5lZWRlZCB0 byBzdXBwb3J0IHBhcmFsbGVsCnN0cmVhbWluZywgcGFyYWxsZWwgc3RyZWFtaW5nIGlzIG5vdCBz dXBwb3J0ZWQgZm9yIHB1YmxpY2F0aW9ucyBvbiBzZXJ2ZXJzIDwKUEcxNi4KLS0tCiBkb2Mvc3Jj L3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKy0KIGRv Yy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOCAr LQogZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbCAgICAgICAgICAgICAgfCAg IDIxICstCiBkb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMjkgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sICAg ICAgICAgIHwgICAyNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jICAgICAg ICAgICAgICAgICAgfCAgIDEzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RlZmluZS5jICAgICAg ICAgICAgICAgICAgICAgIHwgICA1OCArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRp b25jbWRzLmMgICAgICAgICAgICB8ICAgMTAgKy0KIHNyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9iZ3dvcmtlci5jICAgICAgICAgICAgICAgICAgfCAgICAzICsKIC4uLi9saWJwcXdhbHJlY2Vp dmVyL2xpYnBxd2FscmVjZWl2ZXIuYyAgICAgICAgICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgICAgICAgfCAgICAxICsKIC4uLi9yZXBs aWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYyAgICAgIHwgMTM0MCArKysrKysr KysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAg ICAgICAgICAgfCAgIDEwICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5j aGVyLmMgICAgICAgICB8ICAyMTAgKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L21lc29uLmJ1aWxkICAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9vcmlnaW4uYyAgICAgICAgICAgfCAgIDIzICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Byb3RvLmMgICAgICAgICAgICB8ICAgMzcgKy0KIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jICAgIHwgICAxMCArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyAgICAgICAgfCAgIDI0ICstCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgICAgICB8IDExODAgKysrKysr KysrKysrKy0tLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMg ICAgICAgIHwgICAyMyArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jICAg ICAgICAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0 X2V2ZW50LmMgICAgICAgICAgICB8ICAgIDYgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf dGFibGVzLmMgICAgICAgICAgICAgICAgfCAgIDEyICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZSAgICAgIHwgICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KIHNyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfc3Vic2NyaXB0aW9uLmggICAgICAgICAgICAgIHwgICAyMSArLQogc3JjL2luY2x1 ZGUvY29tbWFuZHMvZGVmcmVtLmggICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oICAgICAgICAgIHwgICAgMSArCiBz cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCAgICAgICAgICAgICB8ICAgMjgg Ky0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCAgICAgICAgICAgIHwg ICAgOCArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaCAgICAgICAgICAgICAgICAg ICB8ICAgIDIgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggICAgICAgICAg ICAgICAgIHwgICAgMiArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5o ICAgICAgICAgICAgfCAgICA3ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZl ci5oICAgICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtl cl9pbnRlcm5hbC5oICAgICAgICAgIHwgIDE5MiArKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJv Y3NpZ25hbC5oICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy93 YWl0X2V2ZW50LmggICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0ICAgICAgICAgfCAgIDEyICstCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9zdWJzY3JpcHRpb24uc3FsICAgICAgICAgICAgICB8ICAgIDYgKy0KIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICAgICAgIHwgICAgNSArCiA0 MyBmaWxlcyBjaGFuZ2VkLCAzMDg0IGluc2VydGlvbnMoKyksIDMxOCBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFy YWxsZWx3b3JrZXIuYwoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIv ZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKaW5kZXggMDBmODMzZC4uYzU3NjlkYSAxMDA2NDQK LS0tIGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFs b2dzLnNnbWwKQEAgLTc4OTIsMTEgKzc4OTIsMTYgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFi bGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwK IAogICAgICA8cm93PgogICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxw YXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KLSAgICAgICA8c3RydWN0ZmllbGQ+c3Vic3Ry ZWFtPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+Ym9vbDwvdHlwZT4KKyAgICAgICA8c3RydWN0ZmllbGQ+ c3Vic3RyZWFtPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+Y2hhcjwvdHlwZT4KICAgICAgIDwvcGFyYT4K ICAgICAgIDxwYXJhPgotICAgICAgIElmIHRydWUsIHRoZSBzdWJzY3JpcHRpb24gd2lsbCBhbGxv dyBzdHJlYW1pbmcgb2YgaW4tcHJvZ3Jlc3MKLSAgICAgICB0cmFuc2FjdGlvbnMKKyAgICAgICBD b250cm9scyBob3cgdG8gaGFuZGxlIHRoZSBzdHJlYW1pbmcgb2YgaW4tcHJvZ3Jlc3MgdHJhbnNh Y3Rpb25zOgorICAgICAgIDxsaXRlcmFsPmY8L2xpdGVyYWw+ID0gZGlzYWxsb3cgc3RyZWFtaW5n IG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucywKKyAgICAgICA8bGl0ZXJhbD50PC9saXRlcmFs PiA9IHNwaWxsIHRoZSBjaGFuZ2VzIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyB0bworICAg ICAgIGRpc2sgYW5kIGFwcGx5IGF0IG9uY2UgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1p dHRlZCBvbiB0aGUKKyAgICAgICBwdWJsaXNoZXIsCisgICAgICAgPGxpdGVyYWw+cDwvbGl0ZXJh bD4gPSBhcHBseSBjaGFuZ2VzIGRpcmVjdGx5IHVzaW5nIGEgcGFyYWxsZWwgYXBwbHkKKyAgICAg ICB3b3JrZXIgaWYgYXZhaWxhYmxlIChzYW1lIGFzICd0JyBpZiBubyB3b3JrZXIgaXMgYXZhaWxh YmxlKQogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgogCmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXgg NTU5ZWI4OS4uYTZhYTFhYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNDk0OCw3ICs0OTQ4LDggQEAgQU5ZIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJl cGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDxsaXN0aXRlbT4KICAgICAgICA8cGFyYT4KICAgICAg ICAgU3BlY2lmaWVzIG1heGltdW0gbnVtYmVyIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2Vy cy4gVGhpcyBpbmNsdWRlcwotICAgICAgICBib3RoIGFwcGx5IHdvcmtlcnMgYW5kIHRhYmxlIHN5 bmNocm9uaXphdGlvbiB3b3JrZXJzLgorICAgICAgICBsZWFkZXIgYXBwbHkgd29ya2VycywgcGFy YWxsZWwgYXBwbHkgd29ya2VycywgYW5kIHRhYmxlIHN5bmNocm9uaXphdGlvbgorICAgICAgICB3 b3JrZXJzLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgTG9naWNhbCBy ZXBsaWNhdGlvbiB3b3JrZXJzIGFyZSB0YWtlbiBmcm9tIHRoZSBwb29sIGRlZmluZWQgYnkKQEAg LTQ5ODgsNiArNDk4OSwzMSBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51 bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAgPC9saXN0 aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3Vj LW1heC1wYXJhbGxlbC1hcHBseS13b3JrZXJzLXBlci1zdWJzY3JpcHRpb24iIHhyZWZsYWJlbD0i bWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiI+CisgICAgICA8dGVy bT48dmFybmFtZT5tYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uPC92 YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAg IDxwcmltYXJ5Pjx2YXJuYW1lPm1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3Jp cHRpb248L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAg PC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBh cmE+CisgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgcGVy IHN1YnNjcmlwdGlvbi4gVGhpcworICAgICAgICBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGFtb3Vu dCBvZiBwYXJhbGxlbGlzbSBmb3Igc3RyZWFtaW5nIG9mCisgICAgICAgIGluLXByb2dyZXNzIHRy YW5zYWN0aW9ucyB3aXRoIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIKKyAgICAgICAgPGxpdGVyYWw+ c3RyZWFtaW5nID0gcGFyYWxsZWw8L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgYXJlIHRha2VuIGZyb20g dGhlIHBvb2wgZGVmaW5lZCBieQorICAgICAgICA8dmFybmFtZT5tYXhfbG9naWNhbF9yZXBsaWNh dGlvbl93b3JrZXJzPC92YXJuYW1lPi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+Cisg ICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIuIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJl IHNldCBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+ IGZpbGUgb3Igb24gdGhlIHNlcnZlciBjb21tYW5kCisgICAgICAgIGxpbmUuCisgICAgICAgPC9w YXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPC92 YXJpYWJsZWxpc3Q+CiAgICAgPC9zZWN0Mj4KIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2xv Z2ljYWwtcmVwbGljYXRpb24uc2dtbCBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9u LnNnbWwKaW5kZXggZjg3NTYzOC4uZjM2NjcxMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2xv Z2ljYWwtcmVwbGljYXRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNh dGlvbi5zZ21sCkBAIC0xNDk3LDYgKzE0OTcsMTYgQEAgQ09OVEVYVDogIHByb2Nlc3NpbmcgcmVt b3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiAicGdfMTYzOTUiIGR1cmluZyAiSU5TRVIK ICAgIG1pZ2h0IG5vdCB2aW9sYXRlIGFueSBjb25zdHJhaW50LiAgVGhpcyBjYW4gZWFzaWx5IG1h a2UgdGhlIHN1YnNjcmliZXIKICAgIGluY29uc2lzdGVudC4KICAgPC9wYXJhPgorCisgIDxwYXJh PgorICAgV2hlbiB0aGUgc3RyZWFtaW5nIG1vZGUgaXMgPGxpdGVyYWw+cGFyYWxsZWw8L2xpdGVy YWw+LCB0aGUgZmluaXNoIExTTiBvZgorICAgZmFpbGVkIHRyYW5zYWN0aW9ucyBtYXkgbm90IGJl IGxvZ2dlZC4gSW4gdGhhdCBjYXNlLCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvCisgICBjaGFuZ2Ug dGhlIHN0cmVhbWluZyBtb2RlIHRvIDxsaXRlcmFsPm9uPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5v ZmY8L2xpdGVyYWw+IGFuZAorICAgY2F1c2UgdGhlIHNhbWUgY29uZmxpY3RzIGFnYWluIHNvIHRo ZSBmaW5pc2ggTFNOIG9mIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gd2lsbAorICAgYmUgd3JpdHRl biB0byB0aGUgc2VydmVyIGxvZy4gRm9yIHRoZSB1c2FnZSBvZiBmaW5pc2ggTFNOLCBwbGVhc2Ug cmVmZXIgdG8gPGxpbmsKKyAgIGxpbmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlvbiI+PGNvbW1h bmQ+QUxURVIgU1VCU0NSSVBUSU9OIC4uLgorICAgU0tJUDwvY29tbWFuZD48L2xpbms+LgorICA8 L3BhcmE+CiAgPC9zZWN0MT4KIAogIDxzZWN0MSBpZD0ibG9naWNhbC1yZXBsaWNhdGlvbi1yZXN0 cmljdGlvbnMiPgpAQCAtMTY3OCw3ICsxNjg4LDggQEAgQ09OVEVYVDogIHByb2Nlc3NpbmcgcmVt b3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiAicGdfMTYzOTUiIGR1cmluZyAiSU5TRVIK ICAgIHN1YnNjcmlwdGlvbi4gIEEgZGlzYWJsZWQgc3Vic2NyaXB0aW9uIG9yIGEgY3Jhc2hlZCBz dWJzY3JpcHRpb24gd2lsbCBoYXZlCiAgICB6ZXJvIHJvd3MgaW4gdGhpcyB2aWV3LiAgSWYgdGhl IGluaXRpYWwgZGF0YSBzeW5jaHJvbml6YXRpb24gb2YgYW55CiAgICB0YWJsZSBpcyBpbiBwcm9n cmVzcywgdGhlcmUgd2lsbCBiZSBhZGRpdGlvbmFsIHdvcmtlcnMgZm9yIHRoZSB0YWJsZXMKLSAg IGJlaW5nIHN5bmNocm9uaXplZC4KKyAgIGJlaW5nIHN5bmNocm9uaXplZC4gTW9yZW92ZXIsIGlm IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gaXMgYXBwbGllZCBpbgorICAgcGFyYWxsZWwsIHRo ZXJlIHdpbGwgYmUgYWRkaXRpb25hbCB3b3JrZXJzLgogICA8L3BhcmE+CiAgPC9zZWN0MT4KIApA QCAtMTc4NCw4ICsxNzk1LDEyIEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZv ciByZXBsaWNhdGlvbiBvcmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICB0byB0aGUg c3Vic2NyaWJlciwgcGx1cyBzb21lIHJlc2VydmUgZm9yIHRhYmxlIHN5bmNocm9uaXphdGlvbi4K ICAgIDx2YXJuYW1lPm1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM8L3Zhcm5hbWU+IG11 c3QgYmUgc2V0IHRvIGF0IGxlYXN0CiAgICB0aGUgbnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMsIGFn YWluIHBsdXMgc29tZSByZXNlcnZlIGZvciB0aGUgdGFibGUKLSAgIHN5bmNocm9uaXphdGlvbi4g IEFkZGl0aW9uYWxseSB0aGUgPHZhcm5hbWU+bWF4X3dvcmtlcl9wcm9jZXNzZXM8L3Zhcm5hbWU+ Ci0gICBtYXkgbmVlZCB0byBiZSBhZGp1c3RlZCB0byBhY2NvbW1vZGF0ZSBmb3IgcmVwbGljYXRp b24gd29ya2VycywgYXQgbGVhc3QKKyAgIHN5bmNocm9uaXphdGlvbi4gSWYgdGhlIHN1YnNjcmlw dGlvbiBwYXJhbWV0ZXIgPGxpdGVyYWw+c3RyZWFtaW5nPC9saXRlcmFsPgorICAgaXMgc2V0IHRv IDxsaXRlcmFsPnBhcmFsbGVsPC9saXRlcmFsPiwKKyAgIDxsaXRlcmFsPm1heF9sb2dpY2FsX3Jl cGxpY2F0aW9uX3dvcmtlcnM8L2xpdGVyYWw+IHNob3VsZCBiZSBpbmNyZWFzZWQKKyAgIGFjY29y ZGluZyB0byB0aGUgZGVzaXJlZCBudW1iZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gIEFk ZGl0aW9uYWxseSB0aGUKKyAgIDx2YXJuYW1lPm1heF93b3JrZXJfcHJvY2Vzc2VzPC92YXJuYW1l PiBtYXkgbmVlZCB0byBiZSBhZGp1c3RlZCB0bworICAgYWNjb21tb2RhdGUgZm9yIHJlcGxpY2F0 aW9uIHdvcmtlcnMsIGF0IGxlYXN0CiAgICAoPHZhcm5hbWU+bWF4X2xvZ2ljYWxfcmVwbGljYXRp b25fd29ya2VyczwvdmFybmFtZT4KICAgICsgPGxpdGVyYWw+MTwvbGl0ZXJhbD4pLiAgTm90ZSB0 aGF0IHNvbWUgZXh0ZW5zaW9ucyBhbmQgcGFyYWxsZWwgcXVlcmllcwogICAgYWxzbyB0YWtlIHdv cmtlciBzbG90cyBmcm9tIDx2YXJuYW1lPm1heF93b3JrZXJfcHJvY2Vzc2VzPC92YXJuYW1lPi4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3By b3RvY29sLnNnbWwKaW5kZXggNWZkZDQyOS4uYzZhMGU4MCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL3Byb3RvY29sLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwKQEAgLTMx MDIsNyArMzEwMiw3IEBAIHBzcWwgImRibmFtZT1wb3N0Z3JlcyByZXBsaWNhdGlvbj1kYXRhYmFz ZSIgLWMgIklERU5USUZZX1NZU1RFTTsiCiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgog ICAgICAgIFByb3RvY29sIHZlcnNpb24uIEN1cnJlbnRseSB2ZXJzaW9ucyA8bGl0ZXJhbD4xPC9s aXRlcmFsPiwgPGxpdGVyYWw+MjwvbGl0ZXJhbD4sCi0gICAgICAgYW5kIDxsaXRlcmFsPjM8L2xp dGVyYWw+IGFyZSBzdXBwb3J0ZWQuCisgICAgICAgPGxpdGVyYWw+MzwvbGl0ZXJhbD4sIGFuZCA8 bGl0ZXJhbD40PC9saXRlcmFsPiBhcmUgc3VwcG9ydGVkLgogICAgICAgPC9wYXJhPgogICAgICAg PHBhcmE+CiAgICAgICAgVmVyc2lvbiA8bGl0ZXJhbD4yPC9saXRlcmFsPiBpcyBzdXBwb3J0ZWQg b25seSBmb3Igc2VydmVyIHZlcnNpb24gMTQKQEAgLTMxMTIsNiArMzExMiwxMSBAQCBwc3FsICJk Ym5hbWU9cG9zdGdyZXMgcmVwbGljYXRpb249ZGF0YWJhc2UiIC1jICJJREVOVElGWV9TWVNURU07 IgogICAgICAgIFZlcnNpb24gPGxpdGVyYWw+MzwvbGl0ZXJhbD4gaXMgc3VwcG9ydGVkIG9ubHkg Zm9yIHNlcnZlciB2ZXJzaW9uIDE1CiAgICAgICAgYW5kIGFib3ZlLCBhbmQgaXQgYWxsb3dzIHN0 cmVhbWluZyBvZiB0d28tcGhhc2UgY29tbWl0cy4KICAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJh PgorICAgICAgIFZlcnNpb24gPGxpdGVyYWw+NDwvbGl0ZXJhbD4gaXMgc3VwcG9ydGVkIG9ubHkg Zm9yIHNlcnZlciB2ZXJzaW9uIDE2CisgICAgICAgYW5kIGFib3ZlLCBhbmQgaXQgYWxsb3dzIHN0 cmVhbXMgb2YgbGFyZ2UgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIHRvCisgICAgICAgYmUgYXBw bGllZCBpbiBwYXJhbGxlbC4KKyAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8 L3Zhcmxpc3RlbnRyeT4KIApAQCAtNjg4Miw2ICs2ODg3LDI4IEBAIHBzcWwgImRibmFtZT1wb3N0 Z3JlcyByZXBsaWNhdGlvbj1kYXRhYmFzZSIgLWMgIklERU5USUZZX1NZU1RFTTsiCiAgICAgICAg IDwvcGFyYT4KICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+SW50NjQgKFhMb2dSZWNQdHIpPC90ZXJt PgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgTFNOIG9m IHRoZSBhYm9ydC4gVGhpcyBmaWVsZCBpcyBhdmFpbGFibGUgc2luY2UgcHJvdG9jb2wgdmVyc2lv bgorICAgICAgICAgNC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT5J bnQ2NCAoVGltZXN0YW1wVHopPC90ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBh cmE+CisgICAgICAgICBBYm9ydCB0aW1lc3RhbXAgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgdmFs dWUgaXMgaW4gbnVtYmVyCisgICAgICAgICBvZiBtaWNyb3NlY29uZHMgc2luY2UgUG9zdGdyZVNR TCBlcG9jaCAoMjAwMC0wMS0wMSkuIFRoaXMgZmllbGQgaXMKKyAgICAgICAgIGF2YWlsYWJsZSBz aW5jZSBwcm90b2NvbCB2ZXJzaW9uIDQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAg PC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9z dWJzY3JpcHRpb24uc2dtbAppbmRleCBmOWExNzc2Li5mMTczYTA5IDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbApAQCAtMjI4LDEzICsyMjgsMjkgQEAgQ1JFQVRF IFNVQlNDUklQVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3Vic2NyaXB0aW9u X25hbWU8L3JlcGxhY2VhYmwKICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICAgIDx2YXJs aXN0ZW50cnk+Ci0gICAgICAgIDx0ZXJtPjxsaXRlcmFsPnN0cmVhbWluZzwvbGl0ZXJhbD4gKDx0 eXBlPmJvb2xlYW48L3R5cGU+KTwvdGVybT4KKyAgICAgICAgPHRlcm0+PGxpdGVyYWw+c3RyZWFt aW5nPC9saXRlcmFsPiAoPHR5cGU+ZW51bTwvdHlwZT4pPC90ZXJtPgogICAgICAgICA8bGlzdGl0 ZW0+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFi bGUgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucwotICAgICAgICAgIGZvciB0 aGlzIHN1YnNjcmlwdGlvbi4gIEJ5IGRlZmF1bHQsIGFsbCB0cmFuc2FjdGlvbnMKLSAgICAgICAg ICBhcmUgZnVsbHkgZGVjb2RlZCBvbiB0aGUgcHVibGlzaGVyIGFuZCBvbmx5IHRoZW4gc2VudCB0 byB0aGUKLSAgICAgICAgICBzdWJzY3JpYmVyIGFzIGEgd2hvbGUuCisgICAgICAgICAgZm9yIHRo aXMgc3Vic2NyaXB0aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+b2ZmPC9saXRl cmFsPiwKKyAgICAgICAgICBtZWFuaW5nIGFsbCB0cmFuc2FjdGlvbnMgYXJlIGZ1bGx5IGRlY29k ZWQgb24gdGhlIHB1Ymxpc2hlciBhbmQgb25seQorICAgICAgICAgIHRoZW4gc2VudCB0byB0aGUg c3Vic2NyaWJlciBhcyBhIHdob2xlLgorICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICA8cGFy YT4KKyAgICAgICAgICBJZiBzZXQgdG8gPGxpdGVyYWw+b248L2xpdGVyYWw+LCB0aGUgaW5jb21p bmcgY2hhbmdlcyBhcmUgd3JpdHRlbiB0bworICAgICAgICAgIHRlbXBvcmFyeSBmaWxlcyBhbmQg dGhlbiBhcHBsaWVkIG9ubHkgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgICAgICAgY29t bWl0dGVkIG9uIHRoZSBwdWJsaXNoZXIgYW5kIHJlY2VpdmVkIGJ5IHRoZSBzdWJzY3JpYmVyLgor ICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiBzZXQgdG8g PGxpdGVyYWw+cGFyYWxsZWw8L2xpdGVyYWw+LCBpbmNvbWluZyBjaGFuZ2VzIGFyZSBkaXJlY3Rs eQorICAgICAgICAgIGFwcGxpZWQgdmlhIG9uZSBvZiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy cywgaWYgYXZhaWxhYmxlLiBJZiBubworICAgICAgICAgIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBp cyBmcmVlIHRvIGhhbmRsZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zIHRoZW4KKyAgICAgICAgICB0 aGUgY2hhbmdlcyBhcmUgd3JpdHRlbiB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIGFwcGxpZWQgYWZ0 ZXIgdGhlCisgICAgICAgICAgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLiBOb3RlIHRoYXQgaWYg YW4gZXJyb3IgaGFwcGVucyBpbiBhCisgICAgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCB0 aGUgZmluaXNoIExTTiBvZiB0aGUgcmVtb3RlIHRyYW5zYWN0aW9uCisgICAgICAgICAgbWlnaHQg bm90IGJlIHJlcG9ydGVkIGluIHRoZSBzZXJ2ZXIgbG9nLgogICAgICAgICAgPC9wYXJhPgogICAg ICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGFjdC5jCmluZGV4IDg4M2Q2YzAuLmU2MzQ0OTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 YWN0LmMKQEAgLTE3MTIsNiArMTcxMiw3IEBAIFJlY29yZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBp c1N1YlhhY3QpCiAJaW50CQkJbmNoaWxkcmVuOwogCVRyYW5zYWN0aW9uSWQgKmNoaWxkcmVuOwog CVRpbWVzdGFtcFR6IHhhY3RfdGltZTsKKwlib29sCQlyZXBsb3JpZ2luOwogCiAJLyoKIAkgKiBJ ZiB3ZSBoYXZlbid0IGJlZW4gYXNzaWduZWQgYW4gWElELCBub2JvZHkgd2lsbCBjYXJlIHdoZXRo ZXIgd2UgYWJvcnRlZApAQCAtMTc0Miw2ICsxNzQzLDEzIEBAIFJlY29yZFRyYW5zYWN0aW9uQWJv cnQoYm9vbCBpc1N1YlhhY3QpCiAJCWVsb2coUEFOSUMsICJjYW5ub3QgYWJvcnQgdHJhbnNhY3Rp b24gJXUsIGl0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCIsCiAJCQkgeGlkKTsKIAorCS8qCisJICog QXJlIHdlIHVzaW5nIHRoZSByZXBsaWNhdGlvbiBvcmlnaW5zIGZlYXR1cmU/ICBPciwgaW4gb3Ro ZXIgd29yZHMsIGFyZQorCSAqIHdlIHJlcGxheWluZyByZW1vdGUgYWN0aW9ucz8KKwkgKi8KKwly ZXBsb3JpZ2luID0gKHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW4gIT0gSW52YWxpZFJlcE9yaWdp bklkICYmCisJCQkJICByZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luICE9IERvTm90UmVwbGljYXRl SWQpOworCiAJLyogRmV0Y2ggdGhlIGRhdGEgd2UgbmVlZCBmb3IgdGhlIGFib3J0IHJlY29yZCAq LwogCW5yZWxzID0gc21nckdldFBlbmRpbmdEZWxldGVzKGZhbHNlLCAmcmVscyk7CiAJbmNoaWxk cmVuID0geGFjdEdldENvbW1pdHRlZENoaWxkcmVuKCZjaGlsZHJlbik7CkBAIC0xNzY1LDYgKzE3 NzMsMTEgQEAgUmVjb3JkVHJhbnNhY3Rpb25BYm9ydChib29sIGlzU3ViWGFjdCkKIAkJCQkJICAg TXlYYWN0RmxhZ3MsIEludmFsaWRUcmFuc2FjdGlvbklkLAogCQkJCQkgICBOVUxMKTsKIAorCWlm IChyZXBsb3JpZ2luKQorCQkvKiBNb3ZlIExTTnMgZm9yd2FyZCBmb3IgdGhpcyByZXBsaWNhdGlv biBvcmlnaW4gKi8KKwkJcmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UocmVwbG9yaWdpbl9zZXNz aW9uX29yaWdpbl9sc24sCisJCQkJCQkJCSAgIFhhY3RMYXN0UmVjRW5kKTsKKwogCS8qCiAJICog UmVwb3J0IHRoZSBsYXRlc3QgYXN5bmMgYWJvcnQgTFNOLCBzbyB0aGF0IHRoZSBXQUwgd3JpdGVy IGtub3dzIHRvCiAJICogZmx1c2ggdGhpcyBhYm9ydC4gVGhlcmUncyBub3RoaW5nIHRvIGJlIGdh aW5lZCBieSBkZWxheWluZyB0aGlzLCBzaW5jZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZGVmaW5lLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZWZpbmUuYwppbmRleCAwOTBl NWQzLi4zZGRhMTVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZWZpbmUuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZWZpbmUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2lu Y2x1ZGUgPG1hdGguaD4KIAogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0u aCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vf dHlwZS5oIgpAQCAtMzc5LDYgKzM4MCw2MyBAQCBkZWZHZXRTdHJpbmdMaXN0KERlZkVsZW0gKmRl ZikKIH0KIAogLyoKKyAqIEV4dHJhY3QgdGhlIHN0cmVhbWluZyBtb2RlIHZhbHVlIGZyb20gYSBE ZWZFbGVtLiAgVGhpcyBpcyBsaWtlCisgKiBkZWZHZXRCb29sZWFuKCkgYnV0IGFsc28gYWNjZXB0 cyB0aGUgc3BlY2lhbCB2YWx1ZSBvZiAicGFyYWxsZWwiLgorICovCitjaGFyCitkZWZHZXRTdHJl YW1pbmdNb2RlKERlZkVsZW0gKmRlZikKK3sKKwkvKgorCSAqIElmIG5vIHBhcmFtZXRlciB2YWx1 ZSBnaXZlbiwgYXNzdW1lICJ0cnVlIiBpcyBtZWFudC4KKwkgKi8KKwlpZiAoZGVmLT5hcmcgPT0g TlVMTCkKKwkJcmV0dXJuIFNVQlNUUkVBTV9PTjsKKworCS8qCisJICogQWxsb3cgMCwgMSwgImZh bHNlIiwgInRydWUiLCAib2ZmIiwgIm9uIiBvciAicGFyYWxsZWwiLgorCSAqLworCXN3aXRjaCAo bm9kZVRhZyhkZWYtPmFyZykpCisJeworCQljYXNlIFRfSW50ZWdlcjoKKwkJCXN3aXRjaCAoaW50 VmFsKGRlZi0+YXJnKSkKKwkJCXsKKwkJCQljYXNlIDA6CisJCQkJCXJldHVybiBTVUJTVFJFQU1f T0ZGOworCQkJCWNhc2UgMToKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PTjsKKwkJCQlkZWZhdWx0 OgorCQkJCQkvKiBvdGhlcndpc2UsIGVycm9yIG91dCBiZWxvdyAqLworCQkJCQlicmVhazsKKwkJ CX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJeworCQkJCWNoYXIJICAgKnN2YWwgPSBkZWZH ZXRTdHJpbmcoZGVmKTsKKworCQkJCS8qCisJCQkJICogVGhlIHNldCBvZiBzdHJpbmdzIGFjY2Vw dGVkIGhlcmUgc2hvdWxkIG1hdGNoIHVwIHdpdGggdGhlCisJCQkJICogZ3JhbW1hcidzIG9wdF9i b29sZWFuX29yX3N0cmluZyBwcm9kdWN0aW9uLgorCQkJCSAqLworCQkJCWlmIChwZ19zdHJjYXNl Y21wKHN2YWwsICJmYWxzZSIpID09IDAgfHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib2Zm IikgPT0gMCkKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PRkY7CisJCQkJaWYgKHBnX3N0cmNhc2Vj bXAoc3ZhbCwgInRydWUiKSA9PSAwIHx8CisJCQkJCXBnX3N0cmNhc2VjbXAoc3ZhbCwgIm9uIikg PT0gMCkKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PTjsKKwkJCQlpZiAocGdfc3RyY2FzZWNtcChz dmFsLCAicGFyYWxsZWwiKSA9PSAwKQorCQkJCQlyZXR1cm4gU1VCU1RSRUFNX1BBUkFMTEVMOwor CQkJfQorCQkJYnJlYWs7CisJfQorCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNP REVfU1lOVEFYX0VSUk9SKSwKKwkJCSBlcnJtc2coIiVzIHJlcXVpcmVzIGEgQm9vbGVhbiB2YWx1 ZSBvciBcInBhcmFsbGVsXCIiLAorCQkJCQlkZWYtPmRlZm5hbWUpKSk7CisJcmV0dXJuIFNVQlNU UkVBTV9PRkY7CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCit9CisKKy8qCiAgKiBSYWlzZSBh biBlcnJvciBhYm91dCBhIGNvbmZsaWN0aW5nIERlZkVsZW0uCiAgKi8KIHZvaWQKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwppbmRleCBmMGNlYzJhLi41YzU4ZmU1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC04NCw3ICs4NCw3IEBAIHR5 cGVkZWYgc3RydWN0IFN1Yk9wdHMKIAlib29sCQljb3B5X2RhdGE7CiAJYm9vbAkJcmVmcmVzaDsK IAlib29sCQliaW5hcnk7Ci0JYm9vbAkJc3RyZWFtaW5nOworCWNoYXIJCXN0cmVhbWluZzsKIAli b29sCQl0d29waGFzZTsKIAlib29sCQlkaXNhYmxlb25lcnI7CiAJY2hhcgkgICAqb3JpZ2luOwpA QCAtMTM4LDcgKzEzOCw3IEBAIHBhcnNlX3N1YnNjcmlwdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUg KnBzdGF0ZSwgTGlzdCAqc3RtdF9vcHRpb25zLAogCWlmIChJc1NldChzdXBwb3J0ZWRfb3B0cywg U1VCT1BUX0JJTkFSWSkpCiAJCW9wdHMtPmJpbmFyeSA9IGZhbHNlOwogCWlmIChJc1NldChzdXBw b3J0ZWRfb3B0cywgU1VCT1BUX1NUUkVBTUlORykpCi0JCW9wdHMtPnN0cmVhbWluZyA9IGZhbHNl OworCQlvcHRzLT5zdHJlYW1pbmcgPSBTVUJTVFJFQU1fT0ZGOwogCWlmIChJc1NldChzdXBwb3J0 ZWRfb3B0cywgU1VCT1BUX1RXT1BIQVNFX0NPTU1JVCkpCiAJCW9wdHMtPnR3b3BoYXNlID0gZmFs c2U7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRfRElTQUJMRV9PTl9FUlIpKQpA QCAtMjQxLDcgKzI0MSw3IEBAIHBhcnNlX3N1YnNjcmlwdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUg KnBzdGF0ZSwgTGlzdCAqc3RtdF9vcHRpb25zLAogCQkJCWVycm9yQ29uZmxpY3RpbmdEZWZFbGVt KGRlZmVsLCBwc3RhdGUpOwogCiAJCQlvcHRzLT5zcGVjaWZpZWRfb3B0cyB8PSBTVUJPUFRfU1RS RUFNSU5HOwotCQkJb3B0cy0+c3RyZWFtaW5nID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7CisJCQlv cHRzLT5zdHJlYW1pbmcgPSBkZWZHZXRTdHJlYW1pbmdNb2RlKGRlZmVsKTsKIAkJfQogCQllbHNl IGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0d29fcGhhc2UiKSA9PSAwKQogCQl7CkBAIC02 MjksNyArNjI5LDcgQEAgQ3JlYXRlU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3Jl YXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25f c3Vib3duZXIgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0ob3duZXIpOwogCXZhbHVlc1tBbnVtX3Bn X3N1YnNjcmlwdGlvbl9zdWJlbmFibGVkIC0gMV0gPSBCb29sR2V0RGF0dW0ob3B0cy5lbmFibGVk KTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3ViYmluYXJ5IC0gMV0gPSBCb29sR2V0 RGF0dW0ob3B0cy5iaW5hcnkpOwotCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJzdHJl YW0gLSAxXSA9IEJvb2xHZXREYXR1bShvcHRzLnN0cmVhbWluZyk7CisJdmFsdWVzW0FudW1fcGdf c3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0gQ2hhckdldERhdHVtKG9wdHMuc3RyZWFtaW5n KTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3VidHdvcGhhc2VzdGF0ZSAtIDFdID0K IAkJQ2hhckdldERhdHVtKG9wdHMudHdvcGhhc2UgPwogCQkJCQkgTE9HSUNBTFJFUF9UV09QSEFT RV9TVEFURV9QRU5ESU5HIDoKQEAgLTEwOTgsNyArMTA5OCw3IEBAIEFsdGVyU3Vic2NyaXB0aW9u KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJTdWJzY3JpcHRpb25TdG10ICpzdG10LAogCQkJCWlm IChJc1NldChvcHRzLnNwZWNpZmllZF9vcHRzLCBTVUJPUFRfU1RSRUFNSU5HKSkKIAkJCQl7CiAJ CQkJCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9Ci0JCQkJCQlC b29sR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOworCQkJCQkJQ2hhckdldERhdHVtKG9wdHMuc3Ry ZWFtaW5nKTsKIAkJCQkJcmVwbGFjZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0g MV0gPSB0cnVlOwogCQkJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvcHFtcS5j IGIvc3JjL2JhY2tlbmQvbGlicHEvcHFtcS5jCmluZGV4IDRkMDQxNWUuLjYzOTg0NWYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9w cW1xLmMKQEAgLTEzLDExICsxMywxMyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2lu Y2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5j bHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9wcW1xLmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRp b24vbG9naWNhbHdvcmtlci5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgogCkBAIC0xNjIsOSArMTY0LDE5IEBAIG1xX3B1dG1lc3NhZ2Uo Y2hhciBtc2d0eXBlLCBjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuKQogCQlyZXN1bHQgPSBzaG1f bXFfc2VuZHYocHFfbXFfaGFuZGxlLCBpb3YsIDIsIHRydWUsIHRydWUpOwogCiAJCWlmIChwcV9t cV9wYXJhbGxlbF9sZWFkZXJfcGlkICE9IDApCi0JCQlTZW5kUHJvY1NpZ25hbChwcV9tcV9wYXJh bGxlbF9sZWFkZXJfcGlkLAotCQkJCQkJICAgUFJPQ1NJR19QQVJBTExFTF9NRVNTQUdFLAotCQkJ CQkJICAgcHFfbXFfcGFyYWxsZWxfbGVhZGVyX2JhY2tlbmRfaWQpOworCQl7CisJCQlpZiAoSXNM b2dpY2FsUGFyYWxsZWxBcHBseVdvcmtlcigpKQorCQkJCVNlbmRQcm9jU2lnbmFsKHBxX21xX3Bh cmFsbGVsX2xlYWRlcl9waWQsCisJCQkJCQkJICAgUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNT QUdFLAorCQkJCQkJCSAgIHBxX21xX3BhcmFsbGVsX2xlYWRlcl9iYWNrZW5kX2lkKTsKKwkJCWVs c2UKKwkJCXsKKwkJCQlBc3NlcnQoSXNQYXJhbGxlbFdvcmtlcigpKTsKKwkJCQlTZW5kUHJvY1Np Z25hbChwcV9tcV9wYXJhbGxlbF9sZWFkZXJfcGlkLAorCQkJCQkJCSAgIFBST0NTSUdfUEFSQUxM RUxfTUVTU0FHRSwKKwkJCQkJCQkgICBwcV9tcV9wYXJhbGxlbF9sZWFkZXJfYmFja2VuZF9pZCk7 CisJCQl9CisJCX0KIAogCQlpZiAocmVzdWx0ICE9IFNITV9NUV9XT1VMRF9CTE9DSykKIAkJCWJy ZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCmluZGV4IDBkNzJkZTIuLjJkZmE5YWIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTEyOCw2ICsxMjgsOSBAQCBzdGF0aWMgY29u c3Qgc3RydWN0CiAJfSwKIAl7CiAJCSJBcHBseVdvcmtlck1haW4iLCBBcHBseVdvcmtlck1haW4K Kwl9LAorCXsKKwkJIlBhcmFsbGVsQXBwbHlXb3JrZXJNYWluIiwgUGFyYWxsZWxBcHBseVdvcmtl ck1haW4KIAl9CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJw cXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCmluZGV4IDdmNjk3YjAuLjIyNWRh ODEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIv bGlicHF3YWxyZWNlaXZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2Fs cmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCkBAIC00NDMsOSArNDQzLDkgQEAgbGlicHFyY3Zf c3RhcnRzdHJlYW1pbmcoV2FsUmVjZWl2ZXJDb25uICpjb25uLAogCQlhcHBlbmRTdHJpbmdJbmZv KCZjbWQsICJwcm90b192ZXJzaW9uICcldSciLAogCQkJCQkJIG9wdGlvbnMtPnByb3RvLmxvZ2lj YWwucHJvdG9fdmVyc2lvbik7CiAKLQkJaWYgKG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwuc3RyZWFt aW5nICYmCi0JCQlQUXNlcnZlclZlcnNpb24oY29ubi0+c3RyZWFtQ29ubikgPj0gMTQwMDAwKQot CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiLCBzdHJlYW1pbmcgJ29uJyIpOworCQlp ZiAob3B0aW9ucy0+cHJvdG8ubG9naWNhbC5zdHJlYW1pbmdfc3RyKQorCQkJYXBwZW5kU3RyaW5n SW5mbygmY21kLCAiLCBzdHJlYW1pbmcgJyVzJyIsCisJCQkJCQkJIG9wdGlvbnMtPnByb3RvLmxv Z2ljYWwuc3RyZWFtaW5nX3N0cik7CiAKIAkJaWYgKG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwudHdv cGhhc2UgJiYKIAkJCVBRc2VydmVyVmVyc2lvbihjb25uLT5zdHJlYW1Db25uKSA+PSAxNTAwMDAp CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQppbmRleCBjNGUyZmRlLi4y ZGMyNWUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2Vm aWxlCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKQEAgLTE1 LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAog b3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9IFwK KwlhcHBseXBhcmFsbGVsd29ya2VyLm8gXAogCWRlY29kZS5vIFwKIAlsYXVuY2hlci5vIFwKIAls b2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9h cHBseXBhcmFsbGVsd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Fw cGx5cGFyYWxsZWx3b3JrZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41 NWYxYjU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9hcHBseXBhcmFsbGVsd29ya2VyLmMKQEAgLTAsMCArMSwxMzQwIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqIGFwcGx5cGFyYWxsZWx3b3JrZXIuYworICogICAgIFN1cHBvcnQgcm91dGluZXMg Zm9yIGFwcGx5aW5nIHhhY3QgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9hcHBseXBhcmFsbGVsd29ya2VyLmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGlu ZXMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gc3VwcG9ydCBzZXR0aW5nIHVwLCB1c2luZywKKyAqIGFu ZCB0ZWFyaW5nIGRvd24gYSBQYXJhbGxlbEFwcGx5V29ya2VySW5mby4KKyAqCisgKiBSZWZlciB0 byB0aGUgY29tbWVudHMgaW4gdGhlIGZpbGUgaGVhZGVyIG9mIGxvZ2ljYWwvd29ya2VyLmMgdG8g c2VlIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNp bmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgorI2luY2x1ZGUgImxpYnBxL3BxbXEuaCIKKyNpbmNs dWRlICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvc3Rt YXN0ZXIvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVy LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgorI2luY2x1ZGUgInJl cGxpY2F0aW9uL29yaWdpbi5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdl L3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ1dGls cy9pbnZhbC5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMv cmVzb3duZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisjZGVmaW5lIFBHX0xP R0lDQUxfQVBQTFlfU0hNX01BR0lDIDB4Nzg3Y2EwNjcKKworLyoKKyAqIERTTSBrZXlzIGZvciBw YXJhbGxlbCBhcHBseSB3b3JrZXIuICBVbmxpa2Ugb3RoZXIgcGFyYWxsZWwgZXhlY3V0aW9uIGNv ZGUsCisgKiBzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IERTTSBrZXlzIGNvbmZs aWN0aW5nIHdpdGggcGxhbl9ub2RlX2lkIHdlCisgKiBjYW4gdXNlIHNtYWxsIGludGVnZXJzLgor ICovCisjZGVmaW5lIFBBUkFMTEVMX0FQUExZX0tFWV9TSEFSRUQJCTEKKyNkZWZpbmUgUEFSQUxM RUxfQVBQTFlfS0VZX01RCQkJMgorI2RlZmluZSBQQVJBTExFTF9BUFBMWV9LRVlfRVJST1JfUVVF VUUJMworCisvKiBRdWV1ZSBzaXplIG9mIERTTSwgMTYgTUIgZm9yIG5vdy4gKi8KKyNkZWZpbmUg RFNNX1FVRVVFX1NJWkUJKDE2ICogMTAyNCAqIDEwMjQpCisKKy8qCisgKiBFcnJvciBxdWV1ZSBz aXplIG9mIERTTS4gSXQgaXMgZGVzaXJhYmxlIHRvIG1ha2UgaXQgbGFyZ2UgZW5vdWdoIHRoYXQg YQorICogdHlwaWNhbCBFcnJvclJlc3BvbnNlIGNhbiBiZSBzZW50IHdpdGhvdXQgYmxvY2tpbmcu ICBUaGF0IHdheSwgYSB3b3JrZXIgdGhhdAorICogZXJyb3JzIG91dCBjYW4gd3JpdGUgdGhlIHdo b2xlIG1lc3NhZ2UgaW50byB0aGUgcXVldWUgYW5kIHRlcm1pbmF0ZSB3aXRob3V0CisgKiB3YWl0 aW5nIGZvciB0aGUgdXNlciBiYWNrZW5kLgorICovCisjZGVmaW5lIERTTV9FUlJPUl9RVUVVRV9T SVpFCQkJKDE2ICogMTAyNCkKKworLyoKKyAqIFRoZXJlIGFyZSB0aHJlZSBmaWVsZHMgaW4gZWFj aCBtZXNzYWdlIHJlY2VpdmVkIGJ5IHRoZSBwYXJhbGxlbCBhcHBseQorICogd29ya2VyOiBzdGFy dF9sc24sIGVuZF9sc24gYW5kIHNlbmRfdGltZS4gQmVjYXVzZSB3ZSBoYXZlIHVwZGF0ZWQgdGhl c2UKKyAqIHN0YXRpc3RpY3MgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIsIHdlIGNhbiBpZ25v cmUgdGhlc2UgZmllbGRzIGluIHRoZQorICogcGFyYWxsZWwgYXBwbHkgd29ya2VyIChzZWUgZnVu Y3Rpb24gTG9naWNhbFJlcEFwcGx5TG9vcCkuCisgKi8KKyNkZWZpbmUgU0laRV9TVEFUU19NRVNT QUdFICgyICogc2l6ZW9mKFhMb2dSZWNQdHIpICsgc2l6ZW9mKFRpbWVzdGFtcFR6KSkKKworLyoK KyAqIEhhc2ggdGFibGUgZW50cnkgdG8gbWFwIHhpZCB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VyIHN0YXRlLgorICovCit0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEFwcGx5V29ya2VyRW50cnkK K3sKKwlUcmFuc2FjdGlvbklkIHhpZDsJCQkvKiBIYXNoIGtleSAtLSBtdXN0IGJlIGZpcnN0ICov CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworfSBQYXJhbGxlbEFwcGx5V29ya2Vy RW50cnk7CisKKy8qIFBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgaGFzaCB0YWJsZSAoaW5pdGlhbGl6 ZWQgb24gZmlyc3QgdXNlKS4gKi8KK3N0YXRpYyBIVEFCICpQYXJhbGxlbEFwcGx5V29ya2Vyc0hh c2ggPSBOVUxMOworCisvKgorICogQSBsaXN0IHRvIG1haW50YWluIHRoZSBhY3RpdmUgcGFyYWxs ZWwgYXBwbHkgd29ya2Vycy4gVGhlIGluZm9ybWF0aW9uIGZvcgorICogdGhlIG5ldyB3b3JrZXIg aXMgYWRkZWQgdG8gdGhlIGxpc3QgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGxhdW5jaGluZyBpdC4gVGhl CisgKiBsaXN0IGVudHJ5IGlzIHJlbW92ZWQgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24g aWYgdGhlcmUgYXJlIGFscmVhZHkKKyAqIGVub3VnaCB3b3JrZXJzIGluIHRoZSB3b3JrZXIgcG9v bC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdvcmtlcgorICogcG9vbCwgc2VlIGNv bW1lbnRzIGF0b3Agd29ya2VyLmMuIFdlIGFsc28gcmVtb3ZlIHRoZSBlbnRyeSBmcm9tIHRoZSBs aXN0IGlmCisgKiB0aGUgd29ya2VyIGlzIGV4aXRlZCBkdWUgdG8gc29tZSBlcnJvci4KKyAqLwor c3RhdGljIExpc3QgKlBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdCA9IE5JTDsKKworc3RhdGljIExp c3QgKlBhcmFsbGVsQXBwbHlMb2NraWRzID0gTklMOworCisvKgorICogSW5mb3JtYXRpb24gc2hh cmVkIGJldHdlZW4gbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2Vy LgorICovCitQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICpNeVBhcmFsbGVsU2hhcmVkID0gTlVM TDsKKworLyoKKyAqIElzIHRoZXJlIGEgbWVzc2FnZSBzZW50IGJ5IHBhcmFsbGVsIGFwcGx5IHdv cmtlciB3aGljaCB3ZSBuZWVkIHRvIHJlY2VpdmU/CisgKi8KK3ZvbGF0aWxlIHNpZ19hdG9taWNf dCBQYXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRpbmcgPSBmYWxzZTsKKworLyoKKyAqIENhY2hlIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIGFwcGx5aW5n IHRoZQorICogY3VycmVudCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uIEl0IGlzIHVzZWQgdG8gc2F2 ZSB0aGUgY29zdCBvZiBzZWFyY2hpbmcgdGhlCisgKiBoYXNoIHRhYmxlIHdoZW4gYXBwbHlpbmcg dGhlIGNoYW5nZXMgYmV0d2VlbiBTVFJFQU1fU1RBUlQgYW5kIFNUUkVBTV9TVE9QLgorICovCitQ YXJhbGxlbEFwcGx5V29ya2VySW5mbyAqc3RyZWFtX2FwcGx5X3dvcmtlciA9IE5VTEw7CisKKy8q IEEgbGlzdCB0byBtYWludGFpbiBzdWJ0cmFuc2FjdGlvbnMsIGlmIGFueS4gKi8KK0xpc3QJICAg KnN1YnhhY3RsaXN0ID0gTklMOworCitzdGF0aWMgYm9vbCBwYXJhbGxlbF9hcHBseV9jYW5fc3Rh cnQoVHJhbnNhY3Rpb25JZCB4aWQpOworc3RhdGljIGJvb2wgcGFyYWxsZWxfYXBwbHlfc2V0dXBf ZHNtKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyk7CitzdGF0aWMgUGFyYWxsZWxBcHBs eVdvcmtlckluZm8gKnBhcmFsbGVsX2FwcGx5X3NldHVwX3dvcmtlcih2b2lkKTsKK3N0YXRpYyBQ YXJhbGxlbFRyYW5zU3RhdGUgcGFyYWxsZWxfYXBwbHlfZ2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxB cHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCk7CitzdGF0aWMgdm9pZCBwYXJhbGxlbF9hcHBseV9m cmVlX3dvcmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyk7CitzdGF0aWMg dm9pZCBwYXJhbGxlbF9hcHBseV93YWl0X2Zvcl9pbl94YWN0KFBhcmFsbGVsQXBwbHlXb3JrZXJT aGFyZWQgKndzaGFyZWQsCisJCQkJCQkJCQkJCVBhcmFsbGVsVHJhbnNTdGF0ZSB4YWN0X3N0YXRl KTsKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgT0sgdG8gc3RhcnQgYSBwYXJhbGxlbCBh cHBseSB3b3JrZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wKK3BhcmFsbGVs X2FwcGx5X2Nhbl9zdGFydChUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwlpZiAoIVRyYW5zYWN0aW9u SWRJc1ZhbGlkKHhpZCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRG9uJ3Qgc3RhcnQg YSBuZXcgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlmIHRoZSBzdWJzY3JpcHRpb24gaXMgbm90IHVz aW5nCisJICogcGFyYWxsZWwgc3RyZWFtaW5nIG1vZGUsIG9yIGlmIHRoZSBwdWJsaXNoZXIgZG9l cyBub3Qgc3VwcG9ydCBwYXJhbGxlbAorCSAqIGFwcGx5LgorCSAqLworCWlmICghTXlMb2dpY2Fs UmVwV29ya2VyLT5wYXJhbGxlbF9hcHBseSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogT25seSBs ZWFkZXIgYXBwbHkgd29ya2VycyBjYW4gc3RhcnQgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gKi8K KwlpZiAoIWFtX2xlYWRlcl9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoK KwkgKiBEb24ndCBzdGFydCBhIG5ldyBwYXJhbGxlbCB3b3JrZXIgaWYgdXNlciBoYXMgc2V0IHNr aXBsc24gYXMgaXQncworCSAqIHBvc3NpYmxlIHRoYXQgdXNlciB3YW50IHRvIHNraXAgdGhlIHN0 cmVhbWluZyB0cmFuc2FjdGlvbi4gRm9yCisJICogc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCB3ZSBu ZWVkIHRvIHNwaWxsIHRoZSB0cmFuc2FjdGlvbiB0byBkaXNrIHNvIHRoYXQKKwkgKiB3ZSBjYW4g Z2V0IHRoZSBsYXN0IExTTiBvZiB0aGUgdHJhbnNhY3Rpb24gdG8ganVkZ2Ugd2hldGhlciB0byBz a2lwCisJICogYmVmb3JlIHN0YXJ0aW5nIHRvIGFwcGx5IHRoZSBjaGFuZ2UuCisJICovCisJaWYg KCFYTG9nUmVjUHRySXNJbnZhbGlkKE15U3Vic2NyaXB0aW9uLT5za2lwbHNuKSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBGb3Igc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBi ZWluZyBhcHBsaWVkIHVzaW5nIGEgcGFyYWxsZWwKKwkgKiBhcHBseSB3b3JrZXIsIHdlIGNhbm5v dCBkZWNpZGUgd2hldGhlciB0byBhcHBseSB0aGUgY2hhbmdlIGZvciBhCisJICogcmVsYXRpb24g dGhhdCBpcyBub3QgaW4gdGhlIFJFQURZIHN0YXRlIChzZWUKKwkgKiBzaG91bGRfYXBwbHlfY2hh bmdlc19mb3JfcmVsKSBhcyB3ZSB3b24ndCBrbm93IHJlbW90ZV9maW5hbF9sc24gYnkgdGhhdAor CSAqIHRpbWUuIFNvLCB3ZSBkb24ndCBzdGFydCB0aGUgbmV3IHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKCFBbGxUYWJsZXN5bmNzUmVhZHkoKSkKKwkJcmV0 dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBTdGFydCBhIHBhcmFsbGVs IGFwcGx5IHdvcmtlciB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIHNwZWNpZmllZCB4aWQuCisg KgorICogSWYgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgZm91bmQgYnV0IG5vdCBpbiB1c2Ug dGhlbiByZS11c2UgaXQsIG90aGVyd2lzZQorICogc3RhcnQgYSBmcmVzaCBvbmUuIENhY2hlIHRo ZSB3b3JrZXIgaW5mb3JtYXRpb24gaW4gUGFyYWxsZWxBcHBseVdvcmtlcnNIYXNoCisgKiBrZXll ZCBieSB0aGUgc3BlY2lmaWVkIHhpZC4KKyAqLwordm9pZAorcGFyYWxsZWxfYXBwbHlfc3RhcnRf d29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkKQoreworCWJvb2wJCWZvdW5kOworCUxpc3RDZWxsICAg KmxjOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyA9IE5VTEw7CisJUGFyYWxsZWxB cHBseVdvcmtlckVudHJ5ICplbnRyeTsKKworCWlmICghcGFyYWxsZWxfYXBwbHlfY2FuX3N0YXJ0 KHhpZCkpCisJCXJldHVybjsKKworCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSBh cHBseSB3b3JrZXJzIGhhc2h0YWJsZS4gKi8KKwlpZiAoUGFyYWxsZWxBcHBseVdvcmtlcnNIYXNo ID09IE5VTEwpCisJeworCQlIQVNIQ1RMCQljdGw7CisKKwkJTWVtU2V0KCZjdGwsIDAsIHNpemVv ZihjdGwpKTsKKwkJY3RsLmtleXNpemUgPSBzaXplb2YoVHJhbnNhY3Rpb25JZCk7CisJCWN0bC5l bnRyeXNpemUgPSBzaXplb2YoUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5KTsKKwkJY3RsLmhjeHQg PSBBcHBseUNvbnRleHQ7CisKKwkJUGFyYWxsZWxBcHBseVdvcmtlcnNIYXNoID0gaGFzaF9jcmVh dGUoImxvZ2ljYWwgYXBwbHkgd29ya2VycyBoYXNoIiwKKwkJCQkJCQkJCQkJICAgMTYsICZjdGws CisJCQkJCQkJCQkJCSAgIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NPTlRFWFQpOwor CX0KKworCS8qIFRyeSB0byBnZXQgYSBmcmVlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gKi8KKwlm b3JlYWNoKGxjLCBQYXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QpCisJeworCQlQYXJhbGxlbFRyYW5z U3RhdGUgeGFjdF9zdGF0ZTsKKwkJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKnRtcF93aW5mbzsK KworCQl0bXBfd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikgbGZpcnN0KGxjKTsK KworCQlpZiAoIXRtcF93aW5mby0+aW5fdXNlKQorCQl7CisJCQl3aW5mbyA9IHRtcF93aW5mbzsK KwkJCWJyZWFrOworCQl9CisKKwkJLyogQ2hlY2sgaWYgdGhlIHRyYW5zYWN0aW9uIGluIHRoYXQg d29ya2VyIGhhcyBiZWVuIGZpbmlzaGVkLiAqLworCQl4YWN0X3N0YXRlID0gcGFyYWxsZWxfYXBw bHlfZ2V0X3hhY3Rfc3RhdGUodG1wX3dpbmZvLT5zaGFyZWQpOworCQlpZiAoeGFjdF9zdGF0ZSA9 PSBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCkKKwkJeworCQkJcGFyYWxsZWxfYXBwbHlfZnJlZV93 b3JrZXIodG1wX3dpbmZvLCB4aWQsIGZhbHNlKTsKKworCQkJdG1wX3dpbmZvLT5pbl91c2UgPSBm YWxzZTsKKwkJCXdpbmZvID0gdG1wX3dpbmZvOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAo d2luZm8gPT0gTlVMTCkKKwl7CisJCS8qIFRyeSB0byBzdGFydCBhIG5ldyBwYXJhbGxlbCBhcHBs eSB3b3JrZXIuICovCisJCXdpbmZvID0gcGFyYWxsZWxfYXBwbHlfc2V0dXBfd29ya2VyKCk7CisK KwkJaWYgKHdpbmZvID09IE5VTEwpCisJCQlyZXR1cm47CisJfQorCisJLyogQ3JlYXRlIGVudHJ5 IGZvciByZXF1ZXN0ZWQgdHJhbnNhY3Rpb24uICovCisJZW50cnkgPSBoYXNoX3NlYXJjaChQYXJh bGxlbEFwcGx5V29ya2Vyc0hhc2gsICZ4aWQsIEhBU0hfRU5URVIsICZmb3VuZCk7CisJaWYgKGZv dW5kKQorCQllbG9nKEVSUk9SLCAiaGFzaCB0YWJsZSBjb3JydXB0ZWQiKTsKKworCS8qIEluaXRp YWxpemUgc2hhcmVkIG1lbW9yeSBhcmVhLiAqLworCVNwaW5Mb2NrQWNxdWlyZSgmd2luZm8tPnNo YXJlZC0+bXV0ZXgpOworCXdpbmZvLT5zaGFyZWQtPnhhY3Rfc3RhdGUgPSBQQVJBTExFTF9UUkFO U19VTktOT1dOOworCXdpbmZvLT5zaGFyZWQtPnhpZCA9IHhpZDsKKwl3aW5mby0+c2hhcmVkLT5m aWxlc2V0X3ZhbGlkID0gZmFsc2U7CisJd2luZm8tPnNoYXJlZC0+cGFydGlhbF9zZW50X21lc3Nh Z2UgPSBmYWxzZTsKKwlTcGluTG9ja1JlbGVhc2UoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKwor CXdpbmZvLT5pbl91c2UgPSB0cnVlOworCXdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9IGZhbHNl OworCWVudHJ5LT53aW5mbyA9IHdpbmZvOworCWVudHJ5LT54aWQgPSB4aWQ7Cit9CisKKy8qCisg KiBGaW5kIHRoZSBhc3NpZ25lZCB3b3JrZXIgZm9yIHRoZSBnaXZlbiB0cmFuc2FjdGlvbiwgaWYg YW55LgorICovCitQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqCitwYXJhbGxlbF9hcHBseV9maW5k X3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwlib29sCQlmb3VuZDsKKwlQYXJhbGxlbEFw cGx5V29ya2VyRW50cnkgKmVudHJ5OworCisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQp KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChQYXJhbGxlbEFwcGx5V29ya2Vyc0hhc2ggPT0gTlVM TCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBSZXR1cm4gdGhlIGNhY2hlZCBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgaWYgdmFsaWQuICovCisJaWYgKHN0cmVhbV9hcHBseV93b3JrZXIgIT0gTlVMTCkK KwkJcmV0dXJuIHN0cmVhbV9hcHBseV93b3JrZXI7CisKKwkvKgorCSAqIEZpbmQgZW50cnkgZm9y IHJlcXVlc3RlZCB0cmFuc2FjdGlvbi4KKwkgKi8KKwllbnRyeSA9IGhhc2hfc2VhcmNoKFBhcmFs bGVsQXBwbHlXb3JrZXJzSGFzaCwgJnhpZCwgSEFTSF9GSU5ELCAmZm91bmQpOworCWlmIChmb3Vu ZCkKKwl7CisJCUFzc2VydChlbnRyeS0+d2luZm8tPmluX3VzZSk7CisKKwkJcmV0dXJuIGVudHJ5 LT53aW5mbzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJlbW92ZSB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyIGVudHJ5IGZyb20gdGhlIGhhc2ggdGFibGUuIFN0b3AgdGhlIHdv cmtlcgorICogaWYgc3RvcF93b3JrZXIgaXMgdHJ1ZSBhbmQgdGhlcmUgYXJlIGVub3VnaCB3b3Jr ZXJzIGluIHRoZSBwb29sLiBJZgorICogc3RvcF93b3JrZXIgaXMgZmFsc2UsIHNlbmQgYWxsIHBl bmRpbmcgbWVzc2FnZXMgdG8gY2xlYW51cCB0aGUgbWVtb3J5IHF1ZXVlLgorICoKKyAqIEZvciBt b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB3b3JrZXIgcG9vbCwgc2VlIGNvbW1lbnRzIGF0b3Ag d29ya2VyLmMuCisgKi8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X2ZyZWVfd29ya2VyKFBhcmFsbGVs QXBwbHlXb3JrZXJJbmZvICp3aW5mbywgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkgICBib29s IHN0b3Bfd29ya2VyKQoreworCWludAkJCW5hcHBseXdvcmtlcnM7CisKKwlBc3NlcnQoIWFtX3Bh cmFsbGVsX2FwcGx5X3dvcmtlcigpKTsKKworCS8qCisJICogRG9uJ3QgZnJlZSB0aGUgd29ya2Vy IGlmIHRoZSB0cmFuc2FjdGlvbiBpbiB0aGUgd29ya2VyIGlzIHN0aWxsIGluCisJICogcHJvZ3Jl c3MuIFRoaXMgY291bGQgaGFwcGVuIGFzIHdlIGRvbid0IHdhaXQgZm9yIHRyYW5zYWN0aW9uIHJv bGxiYWNrIHRvCisJICogZmluaXNoLgorCSAqLworCWlmIChwYXJhbGxlbF9hcHBseV9nZXRfeGFj dF9zdGF0ZSh3aW5mby0+c2hhcmVkKSA8IFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKQorCQlyZXR1 cm47CisKKwlpZiAoIWhhc2hfc2VhcmNoKFBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaCwgJnhpZCwg SEFTSF9SRU1PVkUsIE5VTEwpKQorCQllbG9nKEVSUk9SLCAiaGFzaCB0YWJsZSBjb3JydXB0ZWQi KTsKKworCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisJ bmFwcGx5d29ya2VycyA9IGxvZ2ljYWxyZXBfcGFyYWxsZWxfYXBwbHlfd29ya2VyX2NvdW50KE15 TG9naWNhbFJlcFdvcmtlci0+c3ViaWQpOworCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtl ckxvY2spOworCisJd2luZm8tPmluX3VzZSA9IGZhbHNlOworCXdpbmZvLT5zZXJpYWxpemVfY2hh bmdlcyA9IGZhbHNlOworCisJLyogQXJlIHRoZXJlIGVub3VnaCB3b3JrZXJzIGluIHRoZSBwb29s PyAqLworCWlmIChzdG9wX3dvcmtlciAmJgorCQluYXBwbHl3b3JrZXJzID4gKG1heF9wYXJhbGxl bF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gLyAyKSkKKwl7CisJCWludAkJc2xvdF9u bzsKKwkJdWludDE2CWdlbmVyYXRpb247CisKKwkJLyoKKwkJICogRGV0YWNoIHRoZSBlcnJvciBx dWV1ZSBiZWZvcmUgdGVybWluYXRpbmcgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcgorCQkgKiB0 byBwcmV2ZW50IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGZyb20gcmVjZWl2aW5nIHRoZSB3b3Jr ZXIKKwkJICogdGVybWluYXRpb24gbWVzc2FnZSB3aGljaCB3aWxsIGNhdXNlIHRoZSBsZWFkZXIg dG8gZXhpdC4KKwkJICovCisJCXNobV9tcV9kZXRhY2god2luZm8tPmVycm9yX21xX2hhbmRsZSk7 CisJCXdpbmZvLT5lcnJvcl9tcV9oYW5kbGUgPSBOVUxMOworCisJCVNwaW5Mb2NrQWNxdWlyZSgm d2luZm8tPnNoYXJlZC0+bXV0ZXgpOworCQlzbG90X25vID0gd2luZm8tPnNoYXJlZC0+bG9naWNh bHJlcF93b3JrZXJfc2xvdF9ubzsKKwkJZ2VuZXJhdGlvbiA9IHdpbmZvLT5zaGFyZWQtPmxvZ2lj YWxyZXBfd29ya2VyX2dlbmVyYXRpb247CisJCVNwaW5Mb2NrUmVsZWFzZSgmd2luZm8tPnNoYXJl ZC0+bXV0ZXgpOworCisJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfYnlfc2xvdChzbG90X25vLCBn ZW5lcmF0aW9uKTsKKworCQlQYXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QgPSBsaXN0X2RlbGV0ZV9w dHIoUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0LAorCQkJCQkJCQkJCQkJICAgd2luZm8pOworCisJ CXBhcmFsbGVsX2FwcGx5X2ZyZWVfd29ya2VyX2luZm8od2luZm8pOworCX0KKwllbHNlIGlmICh3 aW5mby0+cGVuZGluZ19tc2cpCisJeworCQlzaG1fbXFfcmVzdWx0IHJlc3VsdDsKKworCQl3aW5m by0+c2hhcmVkLT5wYXJ0aWFsX3NlbnRfbWVzc2FnZSA9IHRydWU7CisKKwkJLyoKKwkJICogUmVz ZW5kIHRoZSBwZW5kaW5nIG1lc3NhZ2UgdG8gcGFyYWxsZWwgYXBwbHkgd29ya2VyIHRvIGNsZWFu dXAgdGhlCisJCSAqIHF1ZXVlLiBOb3RlIHRoYXQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwg anVzdCBpZ25vcmUgdGhpcyBtZXNzYWdlCisJCSAqIGFzIGl0IGhhcyBhbHJlYWR5IGhhbmRsZWQg dGhpcyBtZXNzYWdlIHdoaWxlIGFwcGx5aW5nIHNwb29sZWQKKwkJICogbWVzc2FnZXMuCisJCSAq LworCQlyZXN1bHQgPSBzaG1fbXFfc2VuZCh3aW5mby0+bXFfaGFuZGxlLCB3aW5mby0+cGVuZGlu Z19sZW5ndGgsCisJCQkJCQkJIHdpbmZvLT5wZW5kaW5nX21zZywgZmFsc2UsIHRydWUpOworCisJ CWlmIChyZXN1bHQgIT0gU0hNX01RX1NVQ0NFU1MpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJ IGVycm1zZygiY291bGQgbm90IHNlbmQgZGF0YSB0byBzaGFyZWQtbWVtb3J5IHF1ZXVlIikpKTsK KworCQlwZnJlZSh3aW5mby0+cGVuZGluZ19tc2cpOworCQl3aW5mby0+cGVuZGluZ19tc2cgPSBO VUxMOworCQl3aW5mby0+cGVuZGluZ19sZW5ndGggPSAwOworCX0KK30KKworLyogRnJlZSB0aGUg cGFyYWxsZWwgYXBwbHkgd29ya2VyIGluZm9ybWF0aW9uLiAqLworc3RhdGljIHZvaWQKK3BhcmFs bGVsX2FwcGx5X2ZyZWVfd29ya2VyX2luZm8oUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZv KQoreworCUFzc2VydCh3aW5mbyk7CisKKwlpZiAod2luZm8tPm1xX2hhbmRsZSAhPSBOVUxMKQor CQlzaG1fbXFfZGV0YWNoKHdpbmZvLT5tcV9oYW5kbGUpOworCisJaWYgKHdpbmZvLT5lcnJvcl9t cV9oYW5kbGUgIT0gTlVMTCkKKwkJc2htX21xX2RldGFjaCh3aW5mby0+ZXJyb3JfbXFfaGFuZGxl KTsKKworCWlmICh3aW5mby0+ZHNtX3NlZyAhPSBOVUxMKQorCQlkc21fZGV0YWNoKHdpbmZvLT5k c21fc2VnKTsKKworCWlmICh3aW5mby0+cGVuZGluZ19tc2cpCisJeworCQlwZnJlZSh3aW5mby0+ cGVuZGluZ19tc2cpOworCQl3aW5mby0+cGVuZGluZ19tc2cgPSBOVUxMOworCX0KKworCXBmcmVl KHdpbmZvKTsKK30KKworc3RhdGljIHZvaWQKK3BhcmFsbGVsX2FwcGx5X3Nwb29sZWRfbWVzc2Fn ZXModm9pZCkKK3sKKwlib29sCQlmaWxlc2V0X3ZhbGlkOworCisJLyoKKwkgKiBDaGVjayBpZiBj aGFuZ2VzIGhhcyBiZWVuIHNlcmlhbGl6ZWQgdG8gZGlzay4gaWYgc28sIHJlYWQgYW5kCisJICog YXBwbHkgdGhlbS4KKwkgKi8KKwlTcGluTG9ja0FjcXVpcmUoJk15UGFyYWxsZWxTaGFyZWQtPm11 dGV4KTsKKwlmaWxlc2V0X3ZhbGlkID0gTXlQYXJhbGxlbFNoYXJlZC0+ZmlsZXNldF92YWxpZDsK KwlTcGluTG9ja1JlbGVhc2UoJk15UGFyYWxsZWxTaGFyZWQtPm11dGV4KTsKKworCWlmIChmaWxl c2V0X3ZhbGlkKQorCXsKKwkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcygmTXlQYXJhbGxlbFNoYXJl ZC0+ZmlsZXNldCwKKwkJCQkJCQkgICBNeVBhcmFsbGVsU2hhcmVkLT54aWQsCisJCQkJCQkJICAg SW52YWxpZFhMb2dSZWNQdHIpOworCQlwYXJhbGxlbF9hcHBseV9zZXRfZmlsZXNldChNeVBhcmFs bGVsU2hhcmVkLCBmYWxzZSk7CisJfQorfQorCisvKiBQYXJhbGxlbCBhcHBseSB3b3JrZXIgbWFp biBsb29wLiAqLworc3RhdGljIHZvaWQKK0xvZ2ljYWxQYXJhbGxlbEFwcGx5TG9vcChzaG1fbXFf aGFuZGxlICptcWgpCit7CisJc2htX21xX3Jlc3VsdCBzaG1xX3JlczsKKwlFcnJvckNvbnRleHRD YWxsYmFjayBlcnJjYWxsYmFjazsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IEN1cnJlbnRNZW1v cnlDb250ZXh0OworCisJLyoKKwkgKiBJbml0IHRoZSBBcHBseU1lc3NhZ2VDb250ZXh0IHdoaWNo IHdlIGNsZWFuIHVwIGFmdGVyIGVhY2ggcmVwbGljYXRpb24KKwkgKiBwcm90b2NvbCBtZXNzYWdl LgorCSAqLworCUFwcGx5TWVzc2FnZUNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQXBw bHlDb250ZXh0LAorCQkJCQkJCQkJCQkJIkFwcGx5TWVzc2FnZUNvbnRleHQiLAorCQkJCQkJCQkJ CQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwkvKgorCSAqIFB1c2ggYXBwbHkgZXJyb3Ig Y29udGV4dCBjYWxsYmFjay4gRmllbGRzIHdpbGwgYmUgZmlsbGVkIHdoaWxlIGFwcGx5aW5nCisJ ICogYSBjaGFuZ2UuCisJICovCisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBhcHBseV9lcnJvcl9j YWxsYmFjazsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJ ZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCWZvciAoOzspCisJeworCQl2 b2lkCSAgICpkYXRhOworCQlTaXplCQlsZW47CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK KworCQkvKiBFbnN1cmUgd2UgYXJlIHJlYWRpbmcgdGhlIGRhdGEgaW50byBvdXIgbWVtb3J5IGNv bnRleHQuICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseU1lc3NhZ2VDb250ZXh0KTsK KworCQlzaG1xX3JlcyA9IHNobV9tcV9yZWNlaXZlKG1xaCwgJmxlbiwgJmRhdGEsIHRydWUpOwor CisJCWlmIChzaG1xX3JlcyA9PSBTSE1fTVFfU1VDQ0VTUykKKwkJeworCQkJU3RyaW5nSW5mb0Rh dGEgczsKKwkJCWludAkJCWM7CisKKwkJCWlmIChsZW4gPT0gMCkKKwkJCQlicmVhazsKKworCQkJ LyoKKwkJCSAqIElnbm9yZSBwYXJ0aWFsbHkgc2VudCBtZXNzYWdlLCBpZiBhbnkuIE5vIG5lZWQg dG8gbG9jayBoZXJlIGFzCisJCQkgKiBvbmx5IHRoZSBsZWFkZXIgc2hvdWxkIHNldCB0aGlzIGZs YWcgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2UuCisJCQkgKi8KKwkJCWlmIChNeVBhcmFsbGVs U2hhcmVkLT5wYXJ0aWFsX3NlbnRfbWVzc2FnZSkKKwkJCQljb250aW51ZTsKKworCQkJcy5jdXJz b3IgPSAwOworCQkJcy5tYXhsZW4gPSAtMTsKKwkJCXMuZGF0YSA9IChjaGFyICopIGRhdGE7CisJ CQlzLmxlbiA9IGxlbjsKKworCQkJLyoKKwkJCSAqIFRoZSBmaXJzdCBieXRlIG9mIG1lc3NhZ2Vz IHNlbnQgZnJvbSBsZWFkZXIgYXBwbHkgd29ya2VyIHRvCisJCQkgKiBwYXJhbGxlbCBhcHBseSB3 b3JrZXJzIGNhbiBvbmx5IGJlICd3Jy4KKwkJCSAqLworCQkJYyA9IHBxX2dldG1zZ2J5dGUoJnMp OworCQkJaWYgKGMgIT0gJ3cnKQorCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIG1lc3NhZ2Ug XCIlY1wiIiwgYyk7CisKKwkJCS8qCisJCQkgKiBJZ25vcmUgc3RhdGlzdGljcyBmaWVsZHMgdGhh dCBoYXZlIGJlZW4gdXBkYXRlZCBieSB0aGUgbGVhZGVyCisJCQkgKiBhcHBseSB3b3JrZXIuCisJ CQkgKi8KKwkJCXMuY3Vyc29yICs9IFNJWkVfU1RBVFNfTUVTU0FHRTsKKworCQkJYXBwbHlfZGlz cGF0Y2goJnMpOworCisJCQlNZW1vcnlDb250ZXh0UmVzZXQoQXBwbHlNZXNzYWdlQ29udGV4dCk7 CisJCX0KKwkJZWxzZSBpZiAoc2htcV9yZXMgPT0gU0hNX01RX1dPVUxEX0JMT0NLKQorCQl7CisJ CQlpbnQJCQlyYzsKKworCQkJcGFyYWxsZWxfYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcygpOworCisJ CQlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQorCQkJeworCQkJCS8qCisJCQkJICogSWYg d2UgZGlkbid0IGdldCBhbnkgdHJhbnNhY3Rpb25zIGZvciBhIHdoaWxlIHRoZXJlIG1pZ2h0IGJl CisJCQkJICogdW5jb25zdW1lZCBpbnZhbGlkYXRpb24gbWVzc2FnZXMgaW4gdGhlIHF1ZXVlLCBj b25zdW1lIHRoZW0KKwkJCQkgKiBub3cuCisJCQkJICovCisJCQkJQWNjZXB0SW52YWxpZGF0aW9u TWVzc2FnZXMoKTsKKwkJCQltYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKCk7CisJCQl9CisKKwkJ CU1lbW9yeUNvbnRleHRSZXNldChBcHBseU1lc3NhZ2VDb250ZXh0KTsKKwkJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjeHQpOworCisJCQkvKiBXYWl0IGZvciBtb3JlIHdvcmsuICovCisJCQly YyA9IFdhaXRMYXRjaChNeUxhdGNoLAorCQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9V VCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkgICAxMDAwTCwKKwkJCQkJCSAgIFdBSVRf RVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9NQUlOKTsKKworCQkJaWYgKHJjICYgV0xfTEFU Q0hfU0VUKQorCQkJeworCQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKKwkJCX0KKworCQkJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCisJCQl7CisJ CQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOworCQkJCVByb2Nlc3NDb25maWdGaWxlKFBH Q19TSUdIVVApOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KHNobXFfcmVzID09 IFNITV9NUV9ERVRBQ0hFRCk7CisKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVS UkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJs b3N0IGNvbm5lY3Rpb24gdG8gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIiKSkpOworCQl9CisJfQor CisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrLiAqLworCWVycm9yX2NvbnRleHRfc3Rh Y2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj eHQpOworfQorCisvKgorICogTWFrZSBzdXJlIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRyaWVz IHRvIHJlYWQgZnJvbSBvdXIgZXJyb3IgcXVldWUgb25lIG1vcmUKKyAqIHRpbWUuIFRoaXMgZ3Vh cmRzIGFnYWluc3QgdGhlIGNhc2Ugd2hlcmUgd2UgZXhpdCB1bmNsZWFubHkgd2l0aG91dCBzZW5k aW5nCisgKiBhbiBFcnJvclJlc3BvbnNlLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHNvbWUgY29kZSBj YWxscyBwcm9jX2V4aXQgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyB2b2lkCitwYXJhbGxlbF9hcHBs eV9zaHV0ZG93bihpbnQgY29kZSwgRGF0dW0gYXJnKQoreworCVNlbmRQcm9jU2lnbmFsKE15TG9n aWNhbFJlcFdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCwKKwkJCQkgICBQUk9DU0lHX1BBUkFMTEVM X0FQUExZX01FU1NBR0UsCisJCQkJICAgSW52YWxpZEJhY2tlbmRJZCk7CisKKwlkc21fZGV0YWNo KChkc21fc2VnbWVudCAqKSBEYXR1bUdldFBvaW50ZXIoYXJnKSk7Cit9CisKKy8qCisgKiBQYXJh bGxlbCBhcHBseSB3b3JrZXIgZW50cnkgcG9pbnQuCisgKi8KK3ZvaWQKK1BhcmFsbGVsQXBwbHlX b3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQoreworCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQg KnNoYXJlZDsKKwlkc21faGFuZGxlCWhhbmRsZTsKKwlkc21fc2VnbWVudCAqc2VnOworCXNobV90 b2MgICAgKnRvYzsKKwlzaG1fbXEJICAgKm1xOworCXNobV9tcV9oYW5kbGUgKm1xaDsKKwlzaG1f bXFfaGFuZGxlICplcnJvcl9tcWg7CisJUmVwT3JpZ2luSWQgb3JpZ2luaWQ7CisJaW50CQkJd29y a2VyX3Nsb3QgPSBEYXR1bUdldEludDMyKG1haW5fYXJnKTsKKwljaGFyCQlvcmlnaW5uYW1lW05B TUVEQVRBTEVOXTsKKworCS8qIFNldHVwIHNpZ25hbCBoYW5kbGluZy4gKi8KKwlwcXNpZ25hbChT SUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOworCXBxc2lnbmFsKFNJR1RFUk0s IGRpZSk7CisJQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7CisKKwkvKgorCSAqIEF0 dGFjaCB0byB0aGUgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgZm9yIHRoZSBwYXJhbGxl bCBhcHBseSwgYW5kCisJICogZmluZCBpdHMgdGFibGUgb2YgY29udGVudHMuCisJICoKKwkgKiBM aWtlIHBhcmFsbGVsIHF1ZXJ5LCB3ZSBkb24ndCBuZWVkIHJlc291cmNlIG93bmVyIGJ5IHRoaXMg dGltZS4gU2VlCisJICogUGFyYWxsZWxXb3JrZXJNYWluLgorCSAqLworCW1lbWNweSgmaGFuZGxl LCBNeUJnd29ya2VyRW50cnktPmJnd19leHRyYSwgc2l6ZW9mKGRzbV9oYW5kbGUpKTsKKwlzZWcg PSBkc21fYXR0YWNoKGhhbmRsZSk7CisJaWYgKHNlZyA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUp LAorCQkJCSBlcnJtc2coInVuYWJsZSB0byBtYXAgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21l bnQiKSkpOworCisJdG9jID0gc2htX3RvY19hdHRhY2goUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFH SUMsIGRzbV9zZWdtZW50X2FkZHJlc3Moc2VnKSk7CisJaWYgKHRvYyA9PSBOVUxMKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJ VEVfU1RBVEUpLAorCQkJCSBlcnJtc2coImJhZCBtYWdpYyBudW1iZXIgaW4gZHluYW1pYyBzaGFy ZWQgbWVtb3J5IHNlZ21lbnQiKSkpOworCisJYmVmb3JlX3NobWVtX2V4aXQocGFyYWxsZWxfYXBw bHlfc2h1dGRvd24sIFBvaW50ZXJHZXREYXR1bShzZWcpKTsKKworCS8qIExvb2sgdXAgdGhlIHNo YXJlZCBpbmZvcm1hdGlvbi4gKi8KKwlzaGFyZWQgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFM TEVMX0FQUExZX0tFWV9TSEFSRUQsIGZhbHNlKTsKKwlNeVBhcmFsbGVsU2hhcmVkID0gc2hhcmVk OworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIG1lc3NhZ2UgcXVldWUuCisJICovCisJbXEgPSBz aG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9NUSwgZmFsc2UpOworCXNobV9t cV9zZXRfcmVjZWl2ZXIobXEsIE15UHJvYyk7CisJbXFoID0gc2htX21xX2F0dGFjaChtcSwgc2Vn LCBOVUxMKTsKKworCS8qCisJICogUHJpbWFyeSBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS4g Tm93LCB3ZSBjYW4gYXR0YWNoIHRvIG91ciBzbG90LgorCSAqIFRoaXMgaXMgdG8gZW5zdXJlIHRo YXQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgZG9lcyBub3Qgd3JpdGUgZGF0YSB0bworCSAqIHRo ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBxdWV1ZS4KKwkgKi8KKwlsb2dpY2FscmVwX3dvcmtlcl9h dHRhY2god29ya2VyX3Nsb3QpOworCisJU3BpbkxvY2tBY3F1aXJlKCZNeVBhcmFsbGVsU2hhcmVk LT5tdXRleCk7CisJTXlQYXJhbGxlbFNoYXJlZC0+bG9naWNhbHJlcF93b3JrZXJfZ2VuZXJhdGlv biA9IE15TG9naWNhbFJlcFdvcmtlci0+Z2VuZXJhdGlvbjsKKwlNeVBhcmFsbGVsU2hhcmVkLT5s b2dpY2FscmVwX3dvcmtlcl9zbG90X25vID0gd29ya2VyX3Nsb3Q7CisJU3BpbkxvY2tSZWxlYXNl KCZNeVBhcmFsbGVsU2hhcmVkLT5tdXRleCk7CisKKwkvKgorCSAqIEF0dGFjaCB0byB0aGUgZXJy b3IgcXVldWUuCisJICovCisJbXEgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0FQUExZ X0tFWV9FUlJPUl9RVUVVRSwgZmFsc2UpOworCXNobV9tcV9zZXRfc2VuZGVyKG1xLCBNeVByb2Mp OworCWVycm9yX21xaCA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisKKwlwcV9yZWRp cmVjdF90b19zaG1fbXEoc2VnLCBlcnJvcl9tcWgpOworCXBxX3NldF9wYXJhbGxlbF9sZWFkZXIo TXlMb2dpY2FsUmVwV29ya2VyLT5hcHBseV9sZWFkZXJfcGlkLAorCQkJCQkJICAgSW52YWxpZEJh Y2tlbmRJZCk7CisKKwlNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3Rfc2VuZF90aW1lID0gTXlMb2dp Y2FsUmVwV29ya2VyLT5sYXN0X3JlY3ZfdGltZSA9CisJCU15TG9naWNhbFJlcFdvcmtlci0+cmVw bHlfdGltZSA9IDA7CisKKwlJbml0aWFsaXplQXBwbHlXb3JrZXIoKTsKKworCS8qIFNldHVwIHJl cGxpY2F0aW9uIG9yaWdpbiB0cmFja2luZy4gKi8KKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgp OworCVJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvckxvZ2ljYWxSZXAoTXlTdWJzY3JpcHRpb24tPm9p ZCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJCSAgIG9yaWdpbm5hbWUsIHNpemVvZihvcmlnaW5uYW1l KSk7CisJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5X25hbWUob3JpZ2lubmFtZSwgdHJ1ZSk7CisJ aWYgKCFPaWRJc1ZhbGlkKG9yaWdpbmlkKSkKKwkJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2NyZWF0 ZShvcmlnaW5uYW1lKTsKKworCS8qCisJICogVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBkb2Vz bid0IG5lZWQgdG8gbW9ub3BvbGl6ZSB0aGlzIHJlcGxpY2F0aW9uCisJICogb3JpZ2luIHdoaWNo IHdhcyBhbHJlYWR5IGFjcXVpcmVkIGJ5IGl0cyBsZWFkZXIgcHJvY2Vzcy4KKwkgKi8KKwlyZXBs b3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIE15TG9naWNhbFJlcFdvcmtlci0+YXBwbHlf bGVhZGVyX3BpZCk7CisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOworCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBTZXR1cCBjYWxsYmFjayBmb3Ig c3lzY2FjaGUgc28gdGhhdCB3ZSBrbm93IHdoZW4gc29tZXRoaW5nIGNoYW5nZXMgaW4KKwkgKiB0 aGUgc3Vic2NyaXB0aW9uIHJlbGF0aW9uIHN0YXRlLgorCSAqLworCUNhY2hlUmVnaXN0ZXJTeXNj YWNoZUNhbGxiYWNrKFNVQlNDUklQVElPTlJFTE1BUCwKKwkJCQkJCQkJICBpbnZhbGlkYXRlX3N5 bmNpbmdfdGFibGVfc3RhdGVzLAorCQkJCQkJCQkgIChEYXR1bSkgMCk7CisKKwkvKgorCSAqIEFs bG9jYXRlIHRoZSBvcmlnaW4gbmFtZSBpbiBhIGxvbmctbGl2ZWQgY29udGV4dCBmb3IgZXJyb3Ig Y29udGV4dAorCSAqIG1lc3NhZ2UuCisJICovCisJYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLm9y aWdpbl9uYW1lID0gTWVtb3J5Q29udGV4dFN0cmR1cChBcHBseUNvbnRleHQsCisJCQkJCQkJCQkJ CQkJCQkgICBvcmlnaW5uYW1lKTsKKworCUxvZ2ljYWxQYXJhbGxlbEFwcGx5TG9vcChtcWgpOwor CisJcHJvY19leGl0KDApOworfQorCisvKgorICogSGFuZGxlIHJlY2VpcHQgb2YgYW4gaW50ZXJy dXB0IGluZGljYXRpbmcgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgbWVzc2FnZS4KKyAqCisgKiBO b3RlOiB0aGlzIGlzIGNhbGxlZCB3aXRoaW4gYSBzaWduYWwgaGFuZGxlciEgIEFsbCB3ZSBjYW4g ZG8gaXMgc2V0IGEgZmxhZworICogdGhhdCB3aWxsIGNhdXNlIHRoZSBuZXh0IENIRUNLX0ZPUl9J TlRFUlJVUFRTKCkgdG8gaW52b2tlCisgKiBIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMoKS4K KyAqLwordm9pZAorSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VJbnRlcnJ1cHQodm9pZCkKK3sK KwlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKKwlQYXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRpbmcg PSB0cnVlOworCVNldExhdGNoKE15TGF0Y2gpOworfQorCisvKgorICogSGFuZGxlIGEgc2luZ2xl IHByb3RvY29sIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBhIHNpbmdsZSBwYXJhbGxlbCBhcHBseQor ICogd29ya2VyLgorICovCitzdGF0aWMgdm9pZAorSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2Uo UGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTdHJpbmdJbmZvIG1zZykKK3sKKwljaGFy CQltc2d0eXBlOworCisJbXNndHlwZSA9IHBxX2dldG1zZ2J5dGUobXNnKTsKKworCXN3aXRjaCAo bXNndHlwZSkKKwl7CisJCWNhc2UgJ0UnOgkJCQkvKiBFcnJvclJlc3BvbnNlICovCisJCQl7CisJ CQkJRXJyb3JEYXRhCWVkYXRhOworCisJCQkJLyogUGFyc2UgRXJyb3JSZXNwb25zZS4gKi8KKwkJ CQlwcV9wYXJzZV9lcnJvcm5vdGljZShtc2csICZlZGF0YSk7CisKKwkJCQkvKiBEZWF0aCBvZiBh IHdvcmtlciBpc24ndCBlbm91Z2gganVzdGlmaWNhdGlvbiBmb3Igc3VpY2lkZS4gKi8KKwkJCQll ZGF0YS5lbGV2ZWwgPSBNaW4oZWRhdGEuZWxldmVsLCBFUlJPUik7CisKKwkJCQkvKgorCQkJCSAq IElmIGRlc2lyZWQsIGFkZCBhIGNvbnRleHQgbGluZSB0byBzaG93IHRoYXQgdGhpcyBpcyBhCisJ CQkJICogbWVzc2FnZSBwcm9wYWdhdGVkIGZyb20gYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuIE90 aGVyd2lzZSwKKwkJCQkgKiBpdCBjYW4gc29tZXRpbWVzIGJlIGNvbmZ1c2luZyB0byB1bmRlcnN0 YW5kIHdoYXQgYWN0dWFsbHkKKwkJCQkgKiBoYXBwZW5lZC4KKwkJCQkgKi8KKwkJCQlpZiAoZWRh dGEuY29udGV4dCkKKwkJCQkJZWRhdGEuY29udGV4dCA9IHBzcHJpbnRmKCIlc1xuJXMiLCBlZGF0 YS5jb250ZXh0LAorCQkJCQkJCQkJCQkgXygicGFyYWxsZWwgYXBwbHkgd29ya2VyIikpOworCQkJ CWVsc2UKKwkJCQkJZWRhdGEuY29udGV4dCA9IHBzdHJkdXAoXygicGFyYWxsZWwgYXBwbHkgd29y a2VyIikpOworCisJCQkJLyoKKwkJCQkgKiBDb250ZXh0IGJleW9uZCB0aGF0IHNob3VsZCB1c2Ug dGhlIGVycm9yIGNvbnRleHQgY2FsbGJhY2tzCisJCQkJICogdGhhdCB3ZXJlIGluIGVmZmVjdCBp biBMb2dpY2FsUmVwQXBwbHlMb29wKCkuCisJCQkJICovCisJCQkJZXJyb3JfY29udGV4dF9zdGFj ayA9IGFwcGx5X2Vycm9yX2NvbnRleHRfc3RhY2s7CisKKwkJCQlUaHJvd0Vycm9yRGF0YSgmZWRh dGEpOworCisJCQkJLyogU2hvdWxkIG5vdCByZWFjaCBoZXJlIGFmdGVyIHJldGhyb3dpbmcgYW4g ZXJyb3IuICovCisJCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIERvbid0 IG5lZWQgdG8gZG8gYW55dGhpbmcgYWJvdXQgTm90aWNlUmVzcG9uc2UgYW5kCisJCQkgKiBOb3Rp ZnlSZXNwb25zZSBhcyB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZG9lc24ndCBuZWVk CisJCQkgKiB0byBzZW5kIG1lc3NhZ2VzIHRvIHRoZSBjbGllbnQuCisJCQkgKi8KKwkJY2FzZSAn Tic6CisJCWNhc2UgJ0EnOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwg InVucmVjb2duaXplZCBtZXNzYWdlIHR5cGUgcmVjZWl2ZWQgZnJvbSBwYXJhbGxlbCBhcHBseSB3 b3JrZXI6ICVjIChtZXNzYWdlIGxlbmd0aCAlZCBieXRlcykiLAorCQkJCQkgbXNndHlwZSwgbXNn LT5sZW4pOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBhbnkgcXVldWVkIHByb3RvY29sIG1lc3Nh Z2VzIHJlY2VpdmVkIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4KKyAqLwordm9pZAorSGFu ZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VzKHZvaWQpCit7CisJTGlzdENlbGwgICAqbGM7CisJTWVt b3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJc3RhdGljIE1lbW9yeUNvbnRleHQgaHBhbV9jb250 ZXh0ID0gTlVMTDsKKworCS8qCisJICogVGhpcyBpcyBpbnZva2VkIGZyb20gUHJvY2Vzc0ludGVy cnVwdHMoKSwgYW5kIHNpbmNlIHNvbWUgb2YgdGhlCisJICogZnVuY3Rpb25zIGl0IGNhbGxzIGNv bnRhaW4gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwgdGhlcmUgaXMgYSBwb3RlbnRpYWwKKwkgKiBm b3IgcmVjdXJzaXZlIGNhbGxzIGlmIG1vcmUgc2lnbmFscyBhcmUgcmVjZWl2ZWQgd2hpbGUgdGhp cyBydW5zLiAgSXQncworCSAqIHVuY2xlYXIgdGhhdCByZWN1cnNpdmUgZW50cnkgd291bGQgYmUg c2FmZSwgYW5kIGl0IGRvZXNuJ3Qgc2VlbSB1c2VmdWwKKwkgKiBldmVuIGlmIGl0IGlzIHNhZmUs IHNvIGxldCdzIGJsb2NrIGludGVycnVwdHMgdW50aWwgZG9uZS4KKwkgKi8KKwlIT0xEX0lOVEVS UlVQVFMoKTsKKworCS8qCisJICogTW9yZW92ZXIsIEN1cnJlbnRNZW1vcnlDb250ZXh0IG1pZ2h0 IGJlIHBvaW50aW5nIGFsbW9zdCBhbnl3aGVyZS4gIFdlCisJICogZG9uJ3Qgd2FudCB0byByaXNr IGxlYWtpbmcgZGF0YSBpbnRvIGxvbmctbGl2ZWQgY29udGV4dHMsIHNvIGxldCdzIGRvCisJICog b3VyIHdvcmsgaGVyZSBpbiBhIHByaXZhdGUgY29udGV4dCB0aGF0IHdlIGNhbiByZXNldCBvbiBl YWNoIHVzZS4KKwkgKi8KKwlpZiAoaHBhbV9jb250ZXh0ID09IE5VTEwpCS8qIGZpcnN0IHRpbWUg dGhyb3VnaD8gKi8KKwkJaHBhbV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1l bW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCSJIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMiLAor CQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwllbHNlCisJCU1lbW9yeUNvbnRl eHRSZXNldChocGFtX2NvbnRleHQpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhocGFtX2NvbnRleHQpOworCisJUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0gZmFs c2U7CisKKwlmb3JlYWNoKGxjLCBQYXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QpCisJeworCQlzaG1f bXFfcmVzdWx0IHJlczsKKwkJU2l6ZQkJbmJ5dGVzOworCQl2b2lkCSAgICpkYXRhOworCQlQYXJh bGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikg bGZpcnN0KGxjKTsKKworCQlpZiAod2luZm8tPmVycm9yX21xX2hhbmRsZSA9PSBOVUxMKQorCQkJ Y29udGludWU7CisKKwkJcmVzID0gc2htX21xX3JlY2VpdmUod2luZm8tPmVycm9yX21xX2hhbmRs ZSwgJm5ieXRlcywgJmRhdGEsIHRydWUpOworCisJCWlmIChyZXMgPT0gU0hNX01RX1dPVUxEX0JM T0NLKQorCQkJY29udGludWU7CisJCWVsc2UgaWYgKHJlcyA9PSBTSE1fTVFfU1VDQ0VTUykKKwkJ eworCQkJU3RyaW5nSW5mb0RhdGEgbXNnOworCisJCQlpbml0U3RyaW5nSW5mbygmbXNnKTsKKwkJ CWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJm1zZywgZGF0YSwgbmJ5dGVzKTsKKwkJCUhhbmRsZVBh cmFsbGVsQXBwbHlNZXNzYWdlKHdpbmZvLCAmbXNnKTsKKwkJCXBmcmVlKG1zZy5kYXRhKTsKKwkJ fQorCQllbHNlCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVD VF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJIGVycm1zZygibG9zdCBjb25uZWN0 aW9uIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIiKSkpOworCX0KKworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCS8qIE1pZ2h0IGFzIHdlbGwgY2xlYXIgdGhlIGNv bnRleHQgb24gb3VyIHdheSBvdXQgKi8KKwlNZW1vcnlDb250ZXh0UmVzZXQoaHBhbV9jb250ZXh0 KTsKKworCVJFU1VNRV9JTlRFUlJVUFRTKCk7Cit9CisKKy8qCisgKiBTZXQgdXAgYSBkeW5hbWlj IHNoYXJlZCBtZW1vcnkgc2VnbWVudC4KKyAqCisgKiBXZSBzZXQgdXAgYSBjb250cm9sIHJlZ2lv biB0aGF0IGNvbnRhaW5zIGEgZml4ZWQtc2l6ZSB3b3JrZXIgaW5mbworICogKFBhcmFsbGVsQXBw bHlXb3JrZXJTaGFyZWQpLCBhIG1lc3NhZ2UgcXVldWUsIGFuZCBhbiBlcnJvciBxdWV1ZS4KKyAq CisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZS4KKyAqLworc3Rh dGljIGJvb2wKK3BhcmFsbGVsX2FwcGx5X3NldHVwX2RzbShQYXJhbGxlbEFwcGx5V29ya2VySW5m byAqd2luZm8pCit7CisJc2htX3RvY19lc3RpbWF0b3IgZTsKKwlTaXplCQlzZWdzaXplOworCWRz bV9zZWdtZW50ICpzZWc7CisJc2htX3RvYyAgICAqdG9jOworCVBhcmFsbGVsQXBwbHlXb3JrZXJT aGFyZWQgKnNoYXJlZDsKKwlzaG1fbXEJICAgKm1xOworCVNpemUJCXF1ZXVlX3NpemUgPSBEU01f UVVFVUVfU0laRTsKKwlTaXplCQllcnJvcl9xdWV1ZV9zaXplID0gRFNNX0VSUk9SX1FVRVVFX1NJ WkU7CisKKwkvKgorCSAqIEVzdGltYXRlIGhvdyBtdWNoIHNoYXJlZCBtZW1vcnkgd2UgbmVlZC4K KwkgKgorCSAqIEJlY2F1c2UgdGhlIFRPQyBtYWNoaW5lcnkgbWF5IGNob29zZSB0byBpbnNlcnQg cGFkZGluZyBvZiBvZGRseS1zaXplZAorCSAqIHJlcXVlc3RzLCB3ZSBtdXN0IGVzdGltYXRlIGVh Y2ggY2h1bmsgc2VwYXJhdGVseS4KKwkgKgorCSAqIFdlIG5lZWQgb25lIGtleSB0byByZWdpc3Rl ciB0aGUgbG9jYXRpb24gb2YgdGhlIGhlYWRlciwgYW5kIHR3byBvdGhlcgorCSAqIGtleXMgdG8g dHJhY2sgdGhlIGxvY2F0aW9ucyBvZiB0aGUgbWVzc2FnZSBxdWV1ZSBhbmQgdGhlIGVycm9yIG1l c3NhZ2UKKwkgKiBxdWV1ZS4KKwkgKi8KKwlzaG1fdG9jX2luaXRpYWxpemVfZXN0aW1hdG9yKCZl KTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBzaXplb2YoUGFyYWxsZWxBcHBseVdvcmtl clNoYXJlZCkpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJmUsIHF1ZXVlX3NpemUpOworCXNo bV90b2NfZXN0aW1hdGVfY2h1bmsoJmUsIGVycm9yX3F1ZXVlX3NpemUpOworCisJc2htX3RvY19l c3RpbWF0ZV9rZXlzKCZlLCAzKTsKKwlzZWdzaXplID0gc2htX3RvY19lc3RpbWF0ZSgmZSk7CisK KwkvKiBDcmVhdGUgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBhbmQgZXN0YWJsaXNoIGEgdGFi bGUgb2YgY29udGVudHMuICovCisJc2VnID0gZHNtX2NyZWF0ZShzaG1fdG9jX2VzdGltYXRlKCZl KSwgMCk7CisJaWYgKHNlZyA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwl0b2MgPSBzaG1f dG9jX2NyZWF0ZShQR19MT0dJQ0FMX0FQUExZX1NITV9NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVz cyhzZWcpLAorCQkJCQkJIHNlZ3NpemUpOworCisJLyogU2V0IHVwIHRoZSBoZWFkZXIgcmVnaW9u LiAqLworCXNoYXJlZCA9IHNobV90b2NfYWxsb2NhdGUodG9jLCBzaXplb2YoUGFyYWxsZWxBcHBs eVdvcmtlclNoYXJlZCkpOworCVNwaW5Mb2NrSW5pdCgmc2hhcmVkLT5tdXRleCk7CisKKwlzaGFy ZWQtPnhhY3Rfc3RhdGUgPSBQQVJBTExFTF9UUkFOU19VTktOT1dOOworCXBnX2F0b21pY19pbml0 X3UzMigmKHNoYXJlZC0+bGVmdF9tZXNzYWdlKSwgMCk7CisKKwlzaG1fdG9jX2luc2VydCh0b2Ms IFBBUkFMTEVMX0FQUExZX0tFWV9TSEFSRUQsIHNoYXJlZCk7CisKKwkvKiBTZXQgdXAgbWVzc2Fn ZSBxdWV1ZSBmb3IgdGhlIHdvcmtlci4gKi8KKwltcSA9IHNobV9tcV9jcmVhdGUoc2htX3RvY19h bGxvY2F0ZSh0b2MsIHF1ZXVlX3NpemUpLCBxdWV1ZV9zaXplKTsKKwlzaG1fdG9jX2luc2VydCh0 b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9NUSwgbXEpOworCXNobV9tcV9zZXRfc2VuZGVyKG1xLCBN eVByb2MpOworCisJLyogQXR0YWNoIHRoZSBxdWV1ZS4gKi8KKwl3aW5mby0+bXFfaGFuZGxlID0g c2htX21xX2F0dGFjaChtcSwgc2VnLCBOVUxMKTsKKworCS8qIFNldCB1cCBlcnJvciBxdWV1ZSBm b3IgdGhlIHdvcmtlci4gKi8KKwltcSA9IHNobV9tcV9jcmVhdGUoc2htX3RvY19hbGxvY2F0ZSh0 b2MsIGVycm9yX3F1ZXVlX3NpemUpLAorCQkJCQkgICBlcnJvcl9xdWV1ZV9zaXplKTsKKwlzaG1f dG9jX2luc2VydCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9FUlJPUl9RVUVVRSwgbXEpOworCXNo bV9tcV9zZXRfcmVjZWl2ZXIobXEsIE15UHJvYyk7CisKKwkvKiBBdHRhY2ggdGhlIHF1ZXVlLiAq LworCXdpbmZvLT5lcnJvcl9tcV9oYW5kbGUgPSBzaG1fbXFfYXR0YWNoKG1xLCBzZWcsIE5VTEwp OworCisJLyogUmV0dXJuIHJlc3VsdHMgdG8gY2FsbGVyLiAqLworCXdpbmZvLT5kc21fc2VnID0g c2VnOworCXdpbmZvLT5zaGFyZWQgPSBzaGFyZWQ7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoK KyAqIFJldHVybnMgdGhlIHVuaXF1ZSBpZCBhbW9uZyBhbGwgcGFyYWxsZWwgYXBwbHkgd29ya2Vy cyBpbiB0aGUgc3Vic2NyaWJlci4KKyAqLworc3RhdGljIHVpbnQxNgorcGFyYWxsZWxfYXBwbHlf Z2V0X3VuaXF1ZV9pZCgpCit7CisJTGlzdENlbGwgKmxjOworCisJc3RhdGljIHVpbnQxNiBpZCA9 IDA7CisKKwlmb3IoOzspCisJeworCQlib29sCXVuaXF1ZSA9IHRydWU7CisKKwkJZm9yZWFjaChs YywgUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0KQorCQl7CisJCQlQYXJhbGxlbEFwcGx5V29ya2Vy SW5mbyAqd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikgbGZpcnN0KGxjKTsKKwor CQkJaWYgKGlkID09IHdpbmZvLT5zaGFyZWQtPnN0cmVhbV9sb2NrX2lkIHx8CisJCQkJaWQgPT0g d2luZm8tPnNoYXJlZC0+dHJhbnNhY3Rpb25fbG9ja19pZCkKKwkJCXsKKwkJCQl1bmlxdWUgPSBm YWxzZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICh1bmlxdWUpCisJCQlicmVhazsK KworCQlpZCArPSAxOworCX0KKworCXJldHVybiBpZDsKK30KKworLyoKKyAqIFN0YXJ0IHBhcmFs bGVsIGFwcGx5IHdvcmtlciBwcm9jZXNzIGFuZCBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5IGZvciBp dC4KKyAqLworc3RhdGljIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoKK3BhcmFsbGVsX2FwcGx5 X3NldHVwX3dvcmtlcih2b2lkKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlib29s CQlsYXVuY2hlZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisKKwlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwl3aW5mbyA9IChQ YXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKSBwYWxsb2MwKHNpemVvZihQYXJhbGxlbEFwcGx5V29y a2VySW5mbykpOworCisJLyogU2V0dXAgc2hhcmVkIG1lbW9yeS4gKi8KKwlpZiAoIXBhcmFsbGVs X2FwcGx5X3NldHVwX2RzbSh3aW5mbykpCisJeworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y29udGV4dCk7CisJCXBmcmVlKHdpbmZvKTsKKworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlsYXVu Y2hlZCA9IGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChNeUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQs CisJCQkJCQkJCQkJTXlTdWJzY3JpcHRpb24tPm9pZCwKKwkJCQkJCQkJCQlNeVN1YnNjcmlwdGlv bi0+bmFtZSwKKwkJCQkJCQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnVzZXJpZCwKKwkJCQkJCQkJ CQlJbnZhbGlkT2lkLAorCQkJCQkJCQkJCWRzbV9zZWdtZW50X2hhbmRsZSh3aW5mby0+ZHNtX3Nl ZykpOworCisJaWYgKGxhdW5jaGVkKQorCXsKKwkJUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0ID0g bGFwcGVuZChQYXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QsIHdpbmZvKTsKKwkJd2luZm8tPnNoYXJl ZC0+c3RyZWFtX2xvY2tfaWQgPSBwYXJhbGxlbF9hcHBseV9nZXRfdW5pcXVlX2lkKCk7CisJCXdp bmZvLT5zaGFyZWQtPnRyYW5zYWN0aW9uX2xvY2tfaWQgPSBwYXJhbGxlbF9hcHBseV9nZXRfdW5p cXVlX2lkKCk7CisJfQorCWVsc2UKKwl7CisJCXBhcmFsbGVsX2FwcGx5X2ZyZWVfd29ya2VyX2lu Zm8od2luZm8pOworCisJCXdpbmZvID0gTlVMTDsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisKKwlyZXR1cm4gd2luZm87Cit9CisKKy8qCisgKiBTZW5kIHRoZSBk YXRhIHRvIHRoZSBzcGVjaWZpZWQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHZpYSBzaGFyZWQtbWVt b3J5IHF1ZXVlLgorICovCit2b2lkCitwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEoUGFyYWxsZWxB cHBseVdvcmtlckluZm8gKndpbmZvLCBTaXplIG5ieXRlcywKKwkJCQkJCSBjb25zdCB2b2lkICpk YXRhKQoreworCWludAlyZXRyeSA9IDA7CisJc2htX21xX3Jlc3VsdCByZXN1bHQ7CisJVGltZXN0 YW1wVHogc3RhcnRUaW1lID0gMDsKKworCUFzc2VydCghd2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2Vz KTsKKwlBc3NlcnQoIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKKworI2RlZmluZSBDSEFOR0VTX1RI UkVTSE9MRAkxMDAwCisjZGVmaW5lIFNITV9TRU5EX1RJTUVPVVRfTVMJMTAwMDAKKworCWZvciAo OzspCisJeworCQlyZXN1bHQgPSBzaG1fbXFfc2VuZCh3aW5mby0+bXFfaGFuZGxlLCBuYnl0ZXMs IGRhdGEsIHRydWUsIHRydWUpOworCisJCWlmIChyZXN1bHQgPT0gU0hNX01RX1NVQ0NFU1MpCisJ CQlicmVhazsKKwkJZWxzZSBpZiAocmVzdWx0ID09IFNITV9NUV9ERVRBQ0hFRCkKKwkJCWVyZXBv cnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJ VEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBkYXRhIHRvIHNoYXJlZC1t ZW1vcnkgcXVldWUiKSkpOworCisJCUFzc2VydChyZXN1bHQgPT0gU0hNX01RX1dPVUxEX0JMT0NL KTsKKworCQlpZiAoKytyZXRyeSA+PSBDSEFOR0VTX1RIUkVTSE9MRCkKKwkJeworCQkJTWVtb3J5 Q29udGV4dCBvbGRjb250ZXh0OworCQkJU3RyaW5nSW5mb0RhdGEgbXNnOworCQkJTG9naWNhbFJl cE1zZ1R5cGUgYWN0aW9uOworCQkJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFt cCgpOworCisJCQlpZiAoc3RhcnRUaW1lID09IDApCisJCQkJc3RhcnRUaW1lID0gbm93OworCisJ CQlpZiAoIVRpbWVzdGFtcERpZmZlcmVuY2VFeGNlZWRzKHN0YXJ0VGltZSwgbm93LCBTSE1fU0VO RF9USU1FT1VUX01TKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogU2F2ZSB0aGUgbWVzc2FnZSB0 aGF0IHdhcyBvbmx5IHBhcnRpYWxseSBzZW50LiAqLworCQkJb2xkY29udGV4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOworCQkJd2luZm8tPnBlbmRpbmdfbXNnID0gcGFs bG9jKG5ieXRlcyk7CisJCQltZW1jcHkod2luZm8tPnBlbmRpbmdfbXNnLCBkYXRhLCBuYnl0ZXMp OworCQkJd2luZm8tPnBlbmRpbmdfbGVuZ3RoID0gbmJ5dGVzOworCisJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJCS8qCisJCQkgKiBUaGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyIG1pZ2h0IGJlIHN0dWNrIGZvciBzb21lIHJlYXNvbiwgc28KKwkJCSAqIHN0b3Agc2Vu ZGluZyBkYXRhIHRvIHBhcmFsbGVsIHdvcmtlciBhbmQgc3RhcnQgdG8gc2VyaWFsaXplIGRhdGEK KwkJCSAqIHRvIGZpbGVzLgorCQkJICovCisJCQl3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgPSB0 cnVlOworCisJCQlpbml0U3RyaW5nSW5mbygmbXNnKTsKKwkJCWFwcGVuZEJpbmFyeVN0cmluZ0lu Zm8oJm1zZywgZGF0YSwgbmJ5dGVzKTsKKworCQkJLyogU2tpcCBmaXJzdCBieXRlIGFuZCBzdGF0 aXN0aWNzIGZpZWxkcy4gKi8KKwkJCW1zZy5jdXJzb3IgKz0gU0laRV9TVEFUU19NRVNTQUdFICsg MTsKKworCQkJLyogSW5pdGlhbGl6ZSB0aGUgc3RyZWFtIGZpbGVzZXQuICovCisJCQlzZXJpYWxp emVfc3RyZWFtX3N0YXJ0KHdpbmZvLT5zaGFyZWQtPnhpZCwgdHJ1ZSk7CisKKwkJCS8qIFdyaXRl IHRoaXMgbWVzc2FnZSB0byBmaWxlLiAqLworCQkJYWN0aW9uID0gcHFfZ2V0bXNnYnl0ZSgmbXNn KTsKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9uLCAmbXNnKTsKKworCQkJLyoKKwkJCSAq IENsb3NlIHRoZSBzdHJlYW0gZmlsZSBpZiBub3QgaW4gYSBzdHJlYW1pbmcgYmxvY2sgb3IgdGhl IG1lc3NhZ2UKKwkJCSAqIGJlaW5nIHByb2Nlc3NlZCBpcyB0aGUgbGFzdCBtZXNzYWdlIG9mIGEg c3RyZWFtaW5nIGJsb2NrLgorCQkJICovCisJCQlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9u IHx8CisJCQkJYWN0aW9uID09IExPR0lDQUxfUkVQX01TR19TVFJFQU1fU1RPUCkKKwkJCQlzZXJp YWxpemVfc3RyZWFtX3N0b3Aod2luZm8tPnNoYXJlZC0+eGlkKTsKKworCQkJYnJlYWs7CisJCX0K Kwl9Cit9CisKKy8qCisgKiBXYWl0IHVudGlsIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIncyB0 cmFuc2FjdGlvbiBmaW5pc2hlcy4KKyAqLwordm9pZAorcGFyYWxsZWxfYXBwbHlfd2FpdF9mb3Jf eGFjdF9maW5pc2goUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCkKK3sKKwkvKgor CSAqIFdhaXQgdW50aWwgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBoYW5kbGVzIHRoZSBmaXJz dCBtZXNzYWdlIGFuZAorCSAqIHNldCB0aGUgZmxhZyB0byB0cnVlLgorCSAqLworCXBhcmFsbGVs X2FwcGx5X3dhaXRfZm9yX2luX3hhY3Qod3NoYXJlZCwgUEFSQUxMRUxfVFJBTlNfU1RBUlRFRCk7 CisKKwkvKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gbG9jayB0byBiZSByZWxlYXNlZC4gKi8K KwlwYXJhbGxlbF9hcHBseV9sb2NrKHdzaGFyZWQtPnRyYW5zYWN0aW9uX2xvY2tfaWQsIEFjY2Vz c0V4Y2x1c2l2ZUxvY2spOworCisJcGFyYWxsZWxfYXBwbHlfdW5sb2NrKHdzaGFyZWQtPnRyYW5z YWN0aW9uX2xvY2tfaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBXYWl0IHVu dGlsIHRoZSBmbGFnIGJlY29tZXMgZmFsc2UgaW4gY2FzZSB0aGUgbG9jayB3YXMgcmVsZWFzZWQg YmVjYXVzZQorCSAqIG9mIGZhaWx1cmUgd2hpbGUgYXBwbHlpbmcuCisJICovCisJcGFyYWxsZWxf YXBwbHlfd2FpdF9mb3JfaW5feGFjdCh3c2hhcmVkLCBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCk7 Cit9CisKKy8qCisgKiBXYWl0IHVudGlsIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIncyB4YWN0 X3N0YXRlIGZsYWcgcmVhY2ggb3IgZXhjZWVkIHRoZQorICogZ2l2ZW4geGFjdF9zdGF0ZS4KKyAq Lworc3RhdGljIHZvaWQKK3BhcmFsbGVsX2FwcGx5X3dhaXRfZm9yX2luX3hhY3QoUGFyYWxsZWxB cHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCwKKwkJCQkJCQkJUGFyYWxsZWxUcmFuc1N0YXRlIHhh Y3Rfc3RhdGUpCit7CisJZm9yICg7OykKKwl7CisJCS8qIFN0b3AgaWYgdGhlIGZsYWcgcmVhY2gg b3IgZXhjZWVkIHRoZSB4YWN0X3N0YXRlLiAqLworCQlpZiAocGFyYWxsZWxfYXBwbHlfZ2V0X3hh Y3Rfc3RhdGUod3NoYXJlZCkgPj0geGFjdF9zdGF0ZSkKKwkJCWJyZWFrOworCisJCS8qIFdhaXQg dG8gYmUgc2lnbmFsbGVkLiAqLworCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCQkg V0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkg MTBMLAorCQkJCQkJIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9TVEFURV9DSEFO R0UpOworCisJCS8qIFJlc2V0IHRoZSBsYXRjaCBzbyB3ZSBkb24ndCBzcGluLiAqLworCQlSZXNl dExhdGNoKE15TGF0Y2gpOworCisJCS8qIEFuIGludGVycnVwdCBtYXkgaGF2ZSBvY2N1cnJlZCB3 aGlsZSB3ZSB3ZXJlIHdhaXRpbmcuICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJfQor fQorCisvKgorICogU2V0IHRoZSB4YWN0X3N0YXRlIGZsYWcgZm9yIHRoZSBnaXZlbiBwYXJhbGxl bCBhcHBseSB3b3JrZXIuCisgKi8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3NldF94YWN0X3N0YXRl KFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQsCisJCQkJCQkJICBQYXJhbGxlbFRy YW5zU3RhdGUgeGFjdF9zdGF0ZSkKK3sKKwlTcGluTG9ja0FjcXVpcmUoJndzaGFyZWQtPm11dGV4 KTsKKwl3c2hhcmVkLT54YWN0X3N0YXRlID0geGFjdF9zdGF0ZTsKKwlTcGluTG9ja1JlbGVhc2Uo JndzaGFyZWQtPm11dGV4KTsKK30KKworLyoKKyAqIEdldCB0aGUgeGFjdF9zdGF0ZSBmbGFnIGZv ciB0aGUgZ2l2ZW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICovCitzdGF0aWMgUGFyYWxsZWxU cmFuc1N0YXRlCitwYXJhbGxlbF9hcHBseV9nZXRfeGFjdF9zdGF0ZShQYXJhbGxlbEFwcGx5V29y a2VyU2hhcmVkICp3c2hhcmVkKQoreworCVBhcmFsbGVsVHJhbnNTdGF0ZQkJeGFjdF9zdGF0ZTsK KworCVNwaW5Mb2NrQWNxdWlyZSgmd3NoYXJlZC0+bXV0ZXgpOworCXhhY3Rfc3RhdGUgPSB3c2hh cmVkLT54YWN0X3N0YXRlOworCVNwaW5Mb2NrUmVsZWFzZSgmd3NoYXJlZC0+bXV0ZXgpOworCisJ cmV0dXJuIHhhY3Rfc3RhdGU7Cit9CisKKy8qCisgKiBGb3JtIHRoZSBzYXZlcG9pbnQgbmFtZSBm b3IgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KKyAqCisgKiBSZXR1cm4gdGhlIG5hbWUgaW4g dGhlIHN1cHBsaWVkIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQKK3BhcmFsbGVsX2FwcGx5X3Nh dmVwb2ludF9uYW1lKE9pZCBzdWJvaWQsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSAgY2hh ciAqc3BuYW1lLCBTaXplIHN6c3ApCit7CisJc25wcmludGYoc3BuYW1lLCBzenNwLCAicGdfc3Bf JXVfJXUiLCBzdWJvaWQsIHhpZCk7Cit9CisKKy8qCisgKiBEZWZpbmUgYSBzYXZlcG9pbnQgZm9y IGEgc3VieGFjdCBpbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaWYgbmVlZGVkLgorICoKKyAqIFRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY2FuIGZpZ3VyZSBvdXQgaWYgYSBuZXcgc3VidHJhbnNh Y3Rpb24gd2FzCisgKiBzdGFydGVkIGJ5IGNoZWNraW5nIGlmIHRoZSBuZXcgY2hhbmdlIGFycml2 ZWQgd2l0aCBhIGRpZmZlcmVudCB4aWQuIEluIHRoYXQKKyAqIGNhc2UgZGVmaW5lIGEgbmFtZWQg c2F2ZXBvaW50LCBzbyB0aGF0IHdlIGFyZSBhYmxlIHRvIHJvbGxiYWNrIHRvIGl0CisgKiBpZiBy ZXF1aXJlZC4KKyAqLwordm9pZAorcGFyYWxsZWxfYXBwbHlfc3RhcnRfc3VidHJhbnMoVHJhbnNh Y3Rpb25JZCBjdXJyZW50X3hpZCwgVHJhbnNhY3Rpb25JZCB0b3BfeGlkKQoreworCWlmIChjdXJy ZW50X3hpZCAhPSB0b3BfeGlkICYmCisJCSFsaXN0X21lbWJlcl94aWQoc3VieGFjdGxpc3QsIGN1 cnJlbnRfeGlkKSkKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCQljaGFyCQlzcG5hbWVb TkFNRURBVEFMRU5dOworCisJCXBhcmFsbGVsX2FwcGx5X3NhdmVwb2ludF9uYW1lKE15U3Vic2Ny aXB0aW9uLT5vaWQsIGN1cnJlbnRfeGlkLAorCQkJCQkJCQkJICBzcG5hbWUsIHNpemVvZihzcG5h bWUpKTsKKworCQllbG9nKERFQlVHMSwgImRlZmluaW5nIHNhdmVwb2ludCAlcyBpbiBwYXJhbGxl bCBhcHBseSB3b3JrZXIiLCBzcG5hbWUpOworCisJCS8qIFdlIG11c3QgYmUgaW4gdHJhbnNhY3Rp b24gYmxvY2sgdG8gZGVmaW5lIHRoZSBTQVZFUE9JTlQuICovCisJCWlmICghSXNUcmFuc2FjdGlv bkJsb2NrKCkpCisJCXsKKwkJCWlmICghSXNUcmFuc2FjdGlvblN0YXRlKCkpCisJCQkJU3RhcnRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQkJQmVnaW5UcmFuc2FjdGlvbkJsb2NrKCk7CisJCQlD b21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJfQorCisJCURlZmluZVNhdmVwb2ludChzcG5h bWUpOworCisJCS8qCisJCSAqIENvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCBpcyBuZWVkZWQgdG8g c3RhcnQgYSBzdWJ0cmFuc2FjdGlvbiBhZnRlcgorCQkgKiBpc3N1aW5nIGEgU0FWRVBPSU5UIGlu c2lkZSBhIHRyYW5zYWN0aW9uIGJsb2NrIChzZWUKKwkJICogU3RhcnRTdWJUcmFuc2FjdGlvbigp KS4KKwkJICovCisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCW9sZGN0eCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOworCQlzdWJ4YWN0bGlzdCA9IGxhcHBl bmRfeGlkKHN1YnhhY3RsaXN0LCBjdXJyZW50X3hpZCk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjdHgpOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBTVFJFQU0gQUJPUlQgbWVzc2FnZSB3 aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCBpbiBhIHBhcmFsbGVsCisgKiBhcHBseSB3 b3JrZXIuCisgKi8KK3ZvaWQKK3BhcmFsbGVsX2FwcGx5X3N0cmVhbV9hYm9ydChMb2dpY2FsUmVw U3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRhKQoreworCVRyYW5zYWN0aW9uSWQgeGlkID0gYWJv cnRfZGF0YS0+eGlkOworCVRyYW5zYWN0aW9uSWQgc3VieGlkID0gYWJvcnRfZGF0YS0+c3VieGlk OworCisJLyoKKwkgKiBVcGRhdGUgb3JpZ2luIHN0YXRlIHNvIHdlIGNhbiByZXN0YXJ0IHN0cmVh bWluZyBmcm9tIGNvcnJlY3QgcG9zaXRpb24KKwkgKiBpbiBjYXNlIG9mIGNyYXNoLgorCSAqLwor CXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fbHNuID0gYWJvcnRfZGF0YS0+YWJvcnRfbHNuOwor CXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1wID0gYWJvcnRfZGF0YS0+YWJvcnRf dGltZTsKKworCS8qCisJICogSWYgdGhlIHR3byBYSURzIGFyZSB0aGUgc2FtZSwgaXQncyBpbiBm YWN0IGFib3J0IG9mIHRvcGxldmVsIHhhY3QsIHNvCisJICoganVzdCBmcmVlIHRoZSBzdWJ4YWN0 bGlzdC4KKwkgKi8KKwlpZiAoc3VieGlkID09IHhpZCkKKwl7CisJCUFib3J0Q3VycmVudFRyYW5z YWN0aW9uKCk7CisKKwkJaWYgKElzVHJhbnNhY3Rpb25CbG9jaygpKQorCQl7CisJCQlFbmRUcmFu c2FjdGlvbkJsb2NrKGZhbHNlKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQl9 CisKKwkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKKworCQlsaXN0 X2ZyZWUoc3VieGFjdGxpc3QpOworCQlzdWJ4YWN0bGlzdCA9IE5JTDsKKworCQlwYXJhbGxlbF9h cHBseV91bmxvY2soTXlQYXJhbGxlbFNoYXJlZC0+dHJhbnNhY3Rpb25fbG9ja19pZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwkJcGFyYWxsZWxfYXBwbHlfc2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNo YXJlZCwgUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQpOworCX0KKwllbHNlCisJeworCQkvKgorCQkg KiBPSywgc28gaXQncyBhIHN1YnhhY3QuIFJvbGxiYWNrIHRvIHRoZSBzYXZlcG9pbnQuCisJCSAq CisJCSAqIFdlIGFsc28gbmVlZCB0byByZWFkIHRoZSBzdWJ4YWN0bGlzdCwgZGV0ZXJtaW5lIHRo ZSBvZmZzZXQgdHJhY2tlZAorCQkgKiBmb3IgdGhlIHN1YnhhY3QsIGFuZCB0cnVuY2F0ZSB0aGUg bGlzdC4KKwkJICovCisJCWludAkJCWk7CisJCWJvb2wJCWZvdW5kID0gZmFsc2U7CisJCWNoYXIJ CXNwbmFtZVtOQU1FREFUQUxFTl07CisKKwkJcGFyYWxsZWxfYXBwbHlfc2F2ZXBvaW50X25hbWUo TXlTdWJzY3JpcHRpb24tPm9pZCwgc3VieGlkLCBzcG5hbWUsCisJCQkJCQkJCQkgIHNpemVvZihz cG5hbWUpKTsKKworCQllbG9nKERFQlVHMSwgInJvbGxpbmcgYmFjayB0byBzYXZlcG9pbnQgJXMg aW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyIiwgc3BuYW1lKTsKKworCQlmb3IgKGkgPSBsaXN0X2xl bmd0aChzdWJ4YWN0bGlzdCkgLSAxOyBpID49IDA7IGktLSkKKwkJeworCQkJVHJhbnNhY3Rpb25J ZCB4aWRfdG1wID0gbGZpcnN0X3hpZChsaXN0X250aF9jZWxsKHN1YnhhY3RsaXN0LCBpKSk7CisK KwkJCWlmICh4aWRfdG1wID09IHN1YnhpZCkKKwkJCXsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJ YnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoZm91bmQpCisJCXsKKwkJCVJvbGxiYWNrVG9TYXZl cG9pbnQoc3BuYW1lKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQkJc3VieGFj dGxpc3QgPSBsaXN0X3RydW5jYXRlKHN1YnhhY3RsaXN0LCBpICsgMSk7CisJCX0KKworCQlwZ3N0 YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEVJTlRSQU5TQUNUSU9OLCBOVUxMKTsKKwl9Cit9 CisKKy8qCisgKiBTZXQgdGhlIGZpbGVzZXRfdmFsaWQgZmxhZyBhbmQgZmlsZXNldCBmb3IgdGhl IGdpdmVuIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLwordm9pZAorcGFyYWxsZWxfYXBwbHlf c2V0X2ZpbGVzZXQoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCwgYm9vbCBmaWxl c2V0X3ZhbGlkKQoreworCVNwaW5Mb2NrQWNxdWlyZSgmd3NoYXJlZC0+bXV0ZXgpOworCXdzaGFy ZWQtPmZpbGVzZXRfdmFsaWQgPSBmaWxlc2V0X3ZhbGlkOworCisJaWYgKGZpbGVzZXRfdmFsaWQp CisJeworCQlBc3NlcnQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CisJCXdz aGFyZWQtPmZpbGVzZXQgPSAqTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldDsKKwl9 CisJZWxzZQorCQltZW1zZXQoJndzaGFyZWQtPmZpbGVzZXQsIDAsIHNpemVvZih3c2hhcmVkLT5m aWxlc2V0KSk7CisKKwlTcGluTG9ja1JlbGVhc2UoJndzaGFyZWQtPm11dGV4KTsKK30KKworLyog SGVscGVyIGZ1bmN0aW9uIHRvIHRha2UgYSBsb2NrIHdpdGggbG9ja2lkLiAqLwordm9pZAorcGFy YWxsZWxfYXBwbHlfbG9jayh1aW50MTYgbG9ja2lkLCBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlN ZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwlpZiAobGlzdF9tZW1iZXJfaW50KFBhcmFsbGVs QXBwbHlMb2NraWRzLCBsb2NraWQpKQorCQlyZXR1cm47CisKKwlMb2NrU2hhcmVkT2JqZWN0Rm9y U2Vzc2lvbihTdWJzY3JpcHRpb25SZWxhdGlvbklkLCBNeVN1YnNjcmlwdGlvbi0+b2lkLAorCQkJ CQkJCSAgIGxvY2tpZCwgbG9ja21vZGUpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhBcHBseUNvbnRleHQpOworCVBhcmFsbGVsQXBwbHlMb2NraWRzID0gbGFwcGVuZF9p bnQoUGFyYWxsZWxBcHBseUxvY2tpZHMsIGxvY2tpZCk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVsZWFzZSBhIGxvY2sg d2l0aCBsb2NraWQuICovCit2b2lkCitwYXJhbGxlbF9hcHBseV91bmxvY2sodWludDE2IGxvY2tp ZCwgTE9DS01PREUgbG9ja21vZGUpCit7CisJaWYgKCFsaXN0X21lbWJlcl9pbnQoUGFyYWxsZWxB cHBseUxvY2tpZHMsIGxvY2tpZCkpCisJCXJldHVybjsKKworCVVubG9ja1NoYXJlZE9iamVjdEZv clNlc3Npb24oU3Vic2NyaXB0aW9uUmVsYXRpb25JZCwgTXlTdWJzY3JpcHRpb24tPm9pZCwKKwkJ CQkJCQkJIGxvY2tpZCwgYW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpID8KKwkJCQkJCQkJIEFjY2Vz c0V4Y2x1c2l2ZUxvY2s6CisJCQkJCQkJCSBBY2Nlc3NTaGFyZUxvY2spOworCisJUGFyYWxsZWxB cHBseUxvY2tpZHMgPSBsaXN0X2RlbGV0ZV9pbnQoUGFyYWxsZWxBcHBseUxvY2tpZHMsIGxvY2tp ZCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29k ZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCAyY2Mw YWM5Li4zMDM1NTdkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMK QEAgLTY1Miw5ICs2NTIsMTAgQEAgRGVjb2RlQ29tbWl0KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmLAogCXsKIAkJZm9yIChpID0gMDsgaSA8IHBhcnNl ZC0+bnN1YnhhY3RzOyBpKyspCiAJCXsKLQkJCVJlb3JkZXJCdWZmZXJGb3JnZXQoY3R4LT5yZW9y ZGVyLCBwYXJzZWQtPnN1YnhhY3RzW2ldLCBidWYtPm9yaWdwdHIpOworCQkJUmVvcmRlckJ1ZmZl ckZvcmdldChjdHgtPnJlb3JkZXIsIHBhcnNlZC0+c3VieGFjdHNbaV0sIGJ1Zi0+b3JpZ3B0ciwK KwkJCQkJCQkJY29tbWl0X3RpbWUpOwogCQl9Ci0JCVJlb3JkZXJCdWZmZXJGb3JnZXQoY3R4LT5y ZW9yZGVyLCB4aWQsIGJ1Zi0+b3JpZ3B0cik7CisJCVJlb3JkZXJCdWZmZXJGb3JnZXQoY3R4LT5y ZW9yZGVyLCB4aWQsIGJ1Zi0+b3JpZ3B0ciwgY29tbWl0X3RpbWUpOwogCiAJCXJldHVybjsKIAl9 CkBAIC04MjIsMTAgKzgyMywxMSBAQCBEZWNvZGVBYm9ydChMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZiwKIAkJZm9yIChpID0gMDsgaSA8IHBhcnNlZC0+ bnN1YnhhY3RzOyBpKyspCiAJCXsKIAkJCVJlb3JkZXJCdWZmZXJBYm9ydChjdHgtPnJlb3JkZXIs IHBhcnNlZC0+c3VieGFjdHNbaV0sCi0JCQkJCQkJICAgYnVmLT5yZWNvcmQtPkVuZFJlY1B0cik7 CisJCQkJCQkJICAgYnVmLT5yZWNvcmQtPkVuZFJlY1B0ciwgYWJvcnRfdGltZSk7CiAJCX0KIAot CQlSZW9yZGVyQnVmZmVyQWJvcnQoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+cmVjb3JkLT5FbmRS ZWNQdHIpOworCQlSZW9yZGVyQnVmZmVyQWJvcnQoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+cmVj b3JkLT5FbmRSZWNQdHIsCisJCQkJCQkgICBhYm9ydF90aW1lKTsKIAl9CiAKIAkvKiB1cGRhdGUg dGhlIGRlY29kaW5nIHN0YXRzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xhdW5jaGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xh dW5jaGVyLmMKaW5kZXggNzM1OTRjNi4uZjQzMjM1MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwpAQCAtNTUsNiArNTUsNyBAQAogLyogR1VDIHZhcmlhYmxl cyAqLwogaW50CQkJbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDQ7CiBpbnQJCQlt YXhfc3luY193b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyOworaW50CQkJbWF4X3BhcmFsbGVs X2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiA9IDI7CiAKIExvZ2ljYWxSZXBXb3JrZXIg Kk15TG9naWNhbFJlcFdvcmtlciA9IE5VTEw7CiAKQEAgLTE1Miw4ICsxNTMsMTAgQEAgZ2V0X3N1 YnNjcmlwdGlvbl9saXN0KHZvaWQpCiAgKgogICogVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgY2xl YW5pbmcgdXAgdGhlIHNoYXJlZCBtZW1vcnkgaW4gY2FzZSB0aGUgd29ya2VyCiAgKiBmYWlscyB0 byBhdHRhY2guCisgKgorICogUmV0dXJuIHdoZXRoZXIgdGhlIGF0dGFjaCB3YXMgc3VjY2Vzc2Z1 bC4KICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBib29sCiBXYWl0Rm9yUmVwbGljYXRpb25Xb3Jr ZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogCQkJCQkJCSAgIHVpbnQxNiBnZW5l cmF0aW9uLAogCQkJCQkJCSAgIEJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmhhbmRsZSkKQEAgLTE2 OSwxMSArMTcyLDExIEBAIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2FsUmVw V29ya2VyICp3b3JrZXIsCiAKIAkJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywg TFdfU0hBUkVEKTsKIAotCQkvKiBXb3JrZXIgZWl0aGVyIGRpZWQgb3IgaGFzIHN0YXJ0ZWQ7IG5v IG5lZWQgdG8gZG8gYW55dGhpbmcuICovCisJCS8qIFdvcmtlciBlaXRoZXIgZGllZCBvciBoYXMg c3RhcnRlZC4gUmV0dXJuIGZhbHNlIGlmIGRpZWQuICovCiAJCWlmICghd29ya2VyLT5pbl91c2Ug fHwgd29ya2VyLT5wcm9jKQogCQl7CiAJCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJM b2NrKTsKLQkJCXJldHVybjsKKwkJCXJldHVybiB3b3JrZXItPmluX3VzZTsKIAkJfQogCiAJCUxX TG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwpAQCAtMTg4LDcgKzE5MSw3IEBAIFdh aXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIsCiAJ CQlpZiAoZ2VuZXJhdGlvbiA9PSB3b3JrZXItPmdlbmVyYXRpb24pCiAJCQkJbG9naWNhbHJlcF93 b3JrZXJfY2xlYW51cCh3b3JrZXIpOwogCQkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2Vy TG9jayk7Ci0JCQlyZXR1cm47CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAogCQkvKgpAQCAtMjEw LDYgKzIxMyw4IEBAIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaChMb2dpY2FsUmVwV29y a2VyICp3b3JrZXIsCiAvKgogICogV2Fsa3MgdGhlIHdvcmtlcnMgYXJyYXkgYW5kIHNlYXJjaGVz IGZvciBvbmUgdGhhdCBtYXRjaGVzIGdpdmVuCiAgKiBzdWJzY3JpcHRpb24gaWQgYW5kIHJlbGlk LgorICoKKyAqIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGxlYWRlciBhcHBseSB3b3Jr ZXIgb3IgdGFibGUgc3luYyB3b3JrZXIuCiAgKi8KIExvZ2ljYWxSZXBXb3JrZXIgKgogbG9naWNh bHJlcF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwgYm9vbCBvbmx5X3J1bm5pbmcp CkBAIC0yMjQsNiArMjI5LDEwIEBAIGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBP aWQgcmVsaWQsIGJvb2wgb25seV9ydW5uaW5nKQogCXsKIAkJTG9naWNhbFJlcFdvcmtlciAqdyA9 ICZMb2dpY2FsUmVwQ3R4LT53b3JrZXJzW2ldOwogCisJCS8qIFNraXAgcGFyYWxsZWwgYXBwbHkg d29ya2Vycy4gKi8KKwkJaWYgKGlzUGFyYWxsZWxBcHBseVdvcmtlcih3KSkKKwkJCWNvbnRpbnVl OworCiAJCWlmICh3LT5pbl91c2UgJiYgdy0+c3ViaWQgPT0gc3ViaWQgJiYgdy0+cmVsaWQgPT0g cmVsaWQgJiYKIAkJCSghb25seV9ydW5uaW5nIHx8IHctPnByb2MpKQogCQl7CkBAIC0yNjAsMTEg KzI2OSwxMyBAQCBsb2dpY2FscmVwX3dvcmtlcnNfZmluZChPaWQgc3ViaWQsIGJvb2wgb25seV9y dW5uaW5nKQogfQogCiAvKgotICogU3RhcnQgbmV3IGFwcGx5IGJhY2tncm91bmQgd29ya2VyLCBp ZiBwb3NzaWJsZS4KKyAqIFN0YXJ0IG5ldyBiYWNrZ3JvdW5kIHdvcmtlciwgaWYgcG9zc2libGUu CisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCiAgKi8K LXZvaWQKK2Jvb2wKIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lkIHN1Ymlk LCBjb25zdCBjaGFyICpzdWJuYW1lLCBPaWQgdXNlcmlkLAotCQkJCQkJIE9pZCByZWxpZCkKKwkJ CQkJCSBPaWQgcmVsaWQsIGRzbV9oYW5kbGUgc3Vid29ya2VyX2RzbSkKIHsKIAlCYWNrZ3JvdW5k V29ya2VyIGJndzsKIAlCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpiZ3dfaGFuZGxlOwpAQCAtMjcz LDcgKzI4NCwxMiBAQCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBzdWJp ZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKIAlpbnQJCQlzbG90ID0gMDsKIAlM b2dpY2FsUmVwV29ya2VyICp3b3JrZXIgPSBOVUxMOwogCWludAkJCW5zeW5jd29ya2VyczsKKwlp bnQJCQlucGFyYWxsZWxhcHBseXdvcmtlcnM7CiAJVGltZXN0YW1wVHogbm93OworCWJvb2wJCWlz X3BhcmFsbGVsX2FwcGx5X3dvcmtlciA9IChzdWJ3b3JrZXJfZHNtICE9IERTTV9IQU5ETEVfSU5W QUxJRCk7CisKKwkvKiBTYW5pdHkgY2hlY2sgLSB0YWJsZXN5bmMgd29ya2VyIGNhbm5vdCBiZSBh IHN1YndvcmtlciAqLworCUFzc2VydCghKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlciAmJiBPaWRJ c1ZhbGlkKHJlbGlkKSkpOwogCiAJZXJlcG9ydChERUJVRzEsCiAJCQkoZXJybXNnX2ludGVybmFs KCJzdGFydGluZyBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwi JXNcIiIsCkBAIC0zNTEsNyArMzY3LDI2IEBAIHJldHJ5OgogCWlmIChPaWRJc1ZhbGlkKHJlbGlk KSAmJiBuc3luY3dvcmtlcnMgPj0gbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uKQog CXsKIAkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0JCXJldHVybjsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCW5wYXJhbGxlbGFwcGx5d29ya2VycyA9IGxvZ2ljYWxyZXBf cGFyYWxsZWxfYXBwbHlfd29ya2VyX2NvdW50KHN1YmlkKTsKKworCS8qCisJICogUmV0dXJuIGZh bHNlIGlmIHRoZSBudW1iZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VycyByZWFjaGVkIHRoZSBs aW1pdAorCSAqIHBlciBzdWJzY3JpcHRpb24uCisJICovCisJaWYgKGlzX3BhcmFsbGVsX2FwcGx5 X3dvcmtlciAmJgorCQlucGFyYWxsZWxhcHBseXdvcmtlcnMgPj0gbWF4X3BhcmFsbGVsX2FwcGx5 X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbikKKwl7CisJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJl cFdvcmtlckxvY2spOworCisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2RlKEVSUkNPREVfQ09O RklHVVJBVElPTl9MSU1JVF9FWENFRURFRCksCisJCQkJIGVycm1zZygib3V0IG9mIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMiKSwKKwkJCQkgZXJyaGludCgiWW91IG1pZ2h0IG5lZWQgdG8gaW5jcmVh c2UgbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbi4iKSkpOworCisJ CXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKgpAQCAtMzY1LDcgKzQwMCw3IEBAIHJldHJ5OgogCQkJ CShlcnJjb2RlKEVSUkNPREVfQ09ORklHVVJBVElPTl9MSU1JVF9FWENFRURFRCksCiAJCQkJIGVy cm1zZygib3V0IG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIHNsb3RzIiksCiAJCQkJIGVy cmhpbnQoIllvdSBtaWdodCBuZWVkIHRvIGluY3JlYXNlIG1heF9sb2dpY2FsX3JlcGxpY2F0aW9u X3dvcmtlcnMuIikpKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyogUHJl cGFyZSB0aGUgd29ya2VyIHNsb3QuICovCkBAIC0zODAsNiArNDE1LDggQEAgcmV0cnk6CiAJd29y a2VyLT5yZWxzdGF0ZSA9IFNVQlJFTF9TVEFURV9VTktOT1dOOwogCXdvcmtlci0+cmVsc3RhdGVf bHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJd29ya2VyLT5zdHJlYW1fZmlsZXNldCA9IE5VTEw7 CisJd29ya2VyLT5hcHBseV9sZWFkZXJfcGlkID0gaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyID8g TXlQcm9jUGlkIDogSW52YWxpZFBpZDsKKwl3b3JrZXItPnBhcmFsbGVsX2FwcGx5ID0gaXNfcGFy YWxsZWxfYXBwbHlfd29ya2VyOwogCXdvcmtlci0+bGFzdF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0 cjsKIAlUSU1FU1RBTVBfTk9CRUdJTih3b3JrZXItPmxhc3Rfc2VuZF90aW1lKTsKIAlUSU1FU1RB TVBfTk9CRUdJTih3b3JrZXItPmxhc3RfcmVjdl90aW1lKTsKQEAgLTM5NywxOSArNDM0LDM0IEBA IHJldHJ5OgogCQlCR1dPUktFUl9CQUNLRU5EX0RBVEFCQVNFX0NPTk5FQ1RJT047CiAJYmd3LmJn d19zdGFydF90aW1lID0gQmdXb3JrZXJTdGFydF9SZWNvdmVyeUZpbmlzaGVkOwogCXNucHJpbnRm KGJndy5iZ3dfbGlicmFyeV9uYW1lLCBCR1dfTUFYTEVOLCAicG9zdGdyZXMiKTsKLQlzbnByaW50 ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4sICJBcHBseVdvcmtlck1haW4iKTsK KworCWlmIChpc19wYXJhbGxlbF9hcHBseV93b3JrZXIpCisJCXNucHJpbnRmKGJndy5iZ3dfZnVu Y3Rpb25fbmFtZSwgQkdXX01BWExFTiwgIlBhcmFsbGVsQXBwbHlXb3JrZXJNYWluIik7CisJZWxz ZQorCQlzbnByaW50ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4sICJBcHBseVdv cmtlck1haW4iKTsKKwogCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSkKIAkJc25wcmludGYoYmd3LmJn d19uYW1lLCBCR1dfTUFYTEVOLAogCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9y IHN1YnNjcmlwdGlvbiAldSBzeW5jICV1Iiwgc3ViaWQsIHJlbGlkKTsKKwllbHNlIGlmIChpc19w YXJhbGxlbF9hcHBseV93b3JrZXIpCisJCXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExF TiwKKwkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGZvciBz dWJzY3JpcHRpb24gJXUiLCBzdWJpZCk7CiAJZWxzZQogCQlzbnByaW50ZihiZ3cuYmd3X25hbWUs IEJHV19NQVhMRU4sCi0JCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vic2Ny aXB0aW9uICV1Iiwgc3ViaWQpOwotCXNucHJpbnRmKGJndy5iZ3dfdHlwZSwgQkdXX01BWExFTiwg ImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIik7CisJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9u IGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1Iiwgc3ViaWQpOworCisJaWYgKGlzX3Bh cmFsbGVsX2FwcGx5X3dvcmtlcikKKwkJc25wcmludGYoYmd3LmJnd190eXBlLCBCR1dfTUFYTEVO LCAibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCB3b3JrZXIiKTsKKwllbHNlCisJCXNucHJp bnRmKGJndy5iZ3dfdHlwZSwgQkdXX01BWExFTiwgImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2Vy Iik7CiAKIAliZ3cuYmd3X3Jlc3RhcnRfdGltZSA9IEJHV19ORVZFUl9SRVNUQVJUOwogCWJndy5i Z3dfbm90aWZ5X3BpZCA9IE15UHJvY1BpZDsKIAliZ3cuYmd3X21haW5fYXJnID0gSW50MzJHZXRE YXR1bShzbG90KTsKIAorCWlmIChpc19wYXJhbGxlbF9hcHBseV93b3JrZXIpCisJCW1lbWNweShi Z3cuYmd3X2V4dHJhLCAmc3Vid29ya2VyX2RzbSwgc2l6ZW9mKGRzbV9oYW5kbGUpKTsKKwogCWlm ICghUmVnaXN0ZXJEeW5hbWljQmFja2dyb3VuZFdvcmtlcigmYmd3LCAmYmd3X2hhbmRsZSkpCiAJ ewogCQkvKiBGYWlsZWQgdG8gc3RhcnQgd29ya2VyLCBzbyBjbGVhbiB1cCB0aGUgd29ya2VyIHNs b3QuICovCkBAIC00MjIsMzMgKzQ3NCwyMiBAQCByZXRyeToKIAkJCQkoZXJyY29kZShFUlJDT0RF X0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQpLAogCQkJCSBlcnJtc2coIm91dCBvZiBiYWNr Z3JvdW5kIHdvcmtlciBzbG90cyIpLAogCQkJCSBlcnJoaW50KCJZb3UgbWlnaHQgbmVlZCB0byBp bmNyZWFzZSBtYXhfd29ya2VyX3Byb2Nlc3Nlcy4iKSkpOwotCQlyZXR1cm47CisJCXJldHVybiBm YWxzZTsKIAl9CiAKIAkvKiBOb3cgd2FpdCB1bnRpbCBpdCBhdHRhY2hlcy4gKi8KLQlXYWl0Rm9y UmVwbGljYXRpb25Xb3JrZXJBdHRhY2god29ya2VyLCBnZW5lcmF0aW9uLCBiZ3dfaGFuZGxlKTsK KwlyZXR1cm4gV2FpdEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKHdvcmtlciwgZ2VuZXJhdGlv biwgYmd3X2hhbmRsZSk7CiB9CiAKIC8qCi0gKiBTdG9wIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9u IHdvcmtlciBmb3Igc3ViaWQvcmVsaWQsIGlmIGFueSwgYW5kIHdhaXQgdW50aWwKLSAqIGl0IGRl dGFjaGVzIGZyb20gdGhlIHNsb3QuCisgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBzdG9wIHRoZSB3 b3JrZXIgYW5kIHdhaXQgZm9yIGl0IHRvIGRpZS4KICAqLwotdm9pZAotbG9naWNhbHJlcF93b3Jr ZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkKK3N0YXRpYyB2b2lkCitsb2dpY2FscmVwX3dv cmtlcl9zdG9wX2ludGVybmFsKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcikKIHsKLQlMb2dpY2Fs UmVwV29ya2VyICp3b3JrZXI7CiAJdWludDE2CQlnZW5lcmF0aW9uOwogCi0JTFdMb2NrQWNxdWly ZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKLQotCXdvcmtlciA9IGxvZ2ljYWxy ZXBfd29ya2VyX2ZpbmQoc3ViaWQsIHJlbGlkLCBmYWxzZSk7Ci0KLQkvKiBObyB3b3JrZXIsIG5v dGhpbmcgdG8gZG8uICovCi0JaWYgKCF3b3JrZXIpCi0JewotCQlMV0xvY2tSZWxlYXNlKExvZ2lj YWxSZXBXb3JrZXJMb2NrKTsKLQkJcmV0dXJuOwotCX0KKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJ bk1vZGUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCkpOwogCiAJLyoKIAkgKiBSZW1l bWJlciB3aGljaCBnZW5lcmF0aW9uIHdhcyBvdXIgd29ya2VyIHNvIHdlIGNhbiBjaGVjayBpZiB3 aGF0IHdlIHNlZQpAQCAtNDg2LDEwICs1MjcsNyBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9p ZCBzdWJpZCwgT2lkIHJlbGlkKQogCQkgKiBkaWZmZXJlbnQsIG1lYW5pbmcgdGhhdCBhIGRpZmZl cmVudCB3b3JrZXIgaGFzIHRha2VuIHRoZSBzbG90LgogCQkgKi8KIAkJaWYgKCF3b3JrZXItPmlu X3VzZSB8fCB3b3JrZXItPmdlbmVyYXRpb24gIT0gZ2VuZXJhdGlvbikKLQkJewotCQkJTFdMb2Nr UmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CiAJCQlyZXR1cm47Ci0JCX0KIAogCQkvKiBX b3JrZXIgaGFzIGFzc2lnbmVkIHByb2MsIHNvIGl0IGhhcyBzdGFydGVkLiAqLwogCQlpZiAod29y a2VyLT5wcm9jKQpAQCAtNTIzLDYgKzU2MSw1MCBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9p ZCBzdWJpZCwgT2lkIHJlbGlkKQogCiAJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxv Y2ssIExXX1NIQVJFRCk7CiAJfQorfQorCisvKgorICogU3RvcCB0aGUgbG9naWNhbCByZXBsaWNh dGlvbiB3b3JrZXIgZm9yIHN1YmlkL3JlbGlkLCBpZiBhbnksIGFuZCB3YWl0IHVudGlsCisgKiBp dCBkZXRhY2hlcyBmcm9tIHRoZSBzbG90LgorICovCit2b2lkCitsb2dpY2FscmVwX3dvcmtlcl9z dG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKQoreworCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsK KworCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisKKwl3 b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKHN1YmlkLCByZWxpZCwgZmFsc2UpOworCisJ aWYgKHdvcmtlcikKKwl7CisJCUFzc2VydCghaXNQYXJhbGxlbEFwcGx5V29ya2VyKHdvcmtlcikp OworCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKHdvcmtlcik7CisJfQorCisJTFdM b2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Cit9CisKKy8qCisgKiBTdG9wIHRoZSBs b2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnB1dCBzbG90 IG51bWJlciwKKyAqIGFuZCB3YWl0IHVudGlsIGl0IGRldGFjaGVzIGZyb20gdGhlIHNsb3QuCisg Ki8KK3ZvaWQKK2xvZ2ljYWxyZXBfd29ya2VyX3N0b3BfYnlfc2xvdChpbnQgc2xvdF9ubywgdWlu dDE2IGdlbmVyYXRpb24pCit7CisJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyOworCisJQXNzZXJ0 KHNsb3Rfbm8gPj0wICYmIHNsb3Rfbm8gPCBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJz KTsKKworCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisK Kwl3b3JrZXIgPSAmTG9naWNhbFJlcEN0eC0+d29ya2Vyc1tzbG90X25vXTsKKworCS8qCisJICog T25seSBzdG9wIHRoZSB3b3JrZXIgaWYgdGhlIGdlbmVyYXRpb24gbWF0Y2hlcyBhbmQgdGhlIHdv cmtlciBpcyBhbGl2ZS4KKwkgKi8KKwlpZiAod29ya2VyLT5nZW5lcmF0aW9uID09IGdlbmVyYXRp b24gJiYgd29ya2VyLT5wcm9jKQorCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKHdv cmtlcik7CiAKIAlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKIH0KQEAgLTU5 NSwxMSArNjc3LDMyIEBAIGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCkKIH0KIAog LyoKLSAqIERldGFjaCB0aGUgd29ya2VyIChjbGVhbnMgdXAgdGhlIHdvcmtlciBpbmZvKS4KKyAq IFN0b3AgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgaWYgYW55LCBhbmQgZGV0YWNoIHRoZSBs ZWFkZXIgYXBwbHkgd29ya2VyCisgKiAoY2xlYW5zIHVwIHRoZSB3b3JrZXIgaW5mbykuCiAgKi8K IHN0YXRpYyB2b2lkCiBsb2dpY2FscmVwX3dvcmtlcl9kZXRhY2godm9pZCkKIHsKKwkvKiBTdG9w IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiAqLworCWlmIChhbV9sZWFkZXJfYXBwbHlfd29y a2VyKCkpCisJeworCQlMaXN0CSAgICp3b3JrZXJzOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQlM V0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOworCisJCXdvcmtl cnMgPSBsb2dpY2FscmVwX3dvcmtlcnNfZmluZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB0 cnVlKTsKKwkJZm9yZWFjaChsYywgd29ya2VycykKKwkJeworCQkJTG9naWNhbFJlcFdvcmtlciAq dyA9IChMb2dpY2FsUmVwV29ya2VyICopIGxmaXJzdChsYyk7CisKKwkJCWlmIChpc1BhcmFsbGVs QXBwbHlXb3JrZXIodykpCisJCQkJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3KTsK KwkJfQorCisJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOworCX0KKwogCS8q IEJsb2NrIGNvbmN1cnJlbnQgYWNjZXNzLiAqLwogCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdv cmtlckxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKQEAgLTYyMiw2ICs3MjUsOCBAQCBsb2dpY2FscmVw X3dvcmtlcl9jbGVhbnVwKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcikKIAl3b3JrZXItPnVzZXJp ZCA9IEludmFsaWRPaWQ7CiAJd29ya2VyLT5zdWJpZCA9IEludmFsaWRPaWQ7CiAJd29ya2VyLT5y ZWxpZCA9IEludmFsaWRPaWQ7CisJd29ya2VyLT5hcHBseV9sZWFkZXJfcGlkID0gSW52YWxpZFBp ZDsKKwl3b3JrZXItPnBhcmFsbGVsX2FwcGx5ID0gZmFsc2U7CiB9CiAKIC8qCkBAIC02NTMsNiAr NzU4LDEyIEBAIGxvZ2ljYWxyZXBfd29ya2VyX29uZXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKQog CWlmIChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ICE9IE5VTEwpCiAJCUZpbGVT ZXREZWxldGVBbGwoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CiAKKwkvKgor CSAqIFJlbGVhc2UgYWxsIHRoZSBzZXNzaW9uIGxldmVsIGxvY2sgdGhhdCBjb3VsZCBiZSBoZWxk IGluIHBhcmFsbGVsIGFwcGx5CisJICogbW9kZS4KKwkgKi8KKwlMb2NrUmVsZWFzZUFsbChERUZB VUxUX0xPQ0tNRVRIT0QsIHRydWUpOworCiAJQXBwbHlMYXVuY2hlcldha2V1cCgpOwogfQogCkBA IC02ODEsNiArNzkyLDMzIEBAIGxvZ2ljYWxyZXBfc3luY193b3JrZXJfY291bnQoT2lkIHN1Ymlk KQogfQogCiAvKgorICogQ291bnQgdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIChidXQgbm90IG5l Y2Vzc2FyaWx5IHJ1bm5pbmcpIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXJzIGZvciBhIHN1YnNj cmlwdGlvbi4KKyAqLworaW50Citsb2dpY2FscmVwX3BhcmFsbGVsX2FwcGx5X3dvcmtlcl9jb3Vu dChPaWQgc3ViaWQpCit7CisJaW50CQkJaTsKKwlpbnQJCQlyZXMgPSAwOworCisJQXNzZXJ0KExX TG9ja0hlbGRCeU1lKExvZ2ljYWxSZXBXb3JrZXJMb2NrKSk7CisKKwkvKgorCSAqIFNjYW4gYWxs IGF0dGFjaGVkIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIG9ubHkgY291bnRpbmcgdGhvc2Ugd2hp Y2gKKwkgKiBoYXZlIHRoZSBnaXZlbiBzdWJzY3JpcHRpb24gaWQuCisJICovCisJZm9yIChpID0g MDsgaSA8IG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM7IGkrKykKKwl7CisJCUxvZ2lj YWxSZXBXb3JrZXIgKncgPSAmTG9naWNhbFJlcEN0eC0+d29ya2Vyc1tpXTsKKworCQlpZiAody0+ c3ViaWQgPT0gc3ViaWQgJiYgaXNQYXJhbGxlbEFwcGx5V29ya2VyKHcpKQorCQkJcmVzKys7CisJ fQorCisJcmV0dXJuIHJlczsKK30KKworLyoKICAqIEFwcGx5TGF1bmNoZXJTaG1lbVNpemUKICAq CQlDb21wdXRlIHNwYWNlIG5lZWRlZCBmb3IgcmVwbGljYXRpb24gbGF1bmNoZXIgc2hhcmVkIG1l bW9yeQogICovCkBAIC04NjksNyArMTAwNyw3IEBAIEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1h aW5fYXJnKQogCQkJCQl3YWl0X3RpbWUgPSB3YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7CiAK IAkJCQkJbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIHN1Yi0+ bmFtZSwKLQkJCQkJCQkJCQkJIHN1Yi0+b3duZXIsIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkg c3ViLT5vd25lciwgSW52YWxpZE9pZCwgRFNNX0hBTkRMRV9JTlZBTElEKTsKIAkJCQl9CiAJCQl9 CiAKQEAgLTk1Miw2ICsxMDkwLDEwIEBAIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19GVU5D VElPTl9BUkdTKQogCQlpZiAoT2lkSXNWYWxpZChzdWJpZCkgJiYgd29ya2VyLnN1YmlkICE9IHN1 YmlkKQogCQkJY29udGludWU7CiAKKwkJLyogU2tpcCBpZiB0aGlzIGlzIGEgcGFyYWxsZWwgYXBw bHkgd29ya2VyICovCisJCWlmIChpc1BhcmFsbGVsQXBwbHlXb3JrZXIoJndvcmtlcikpCisJCQlj b250aW51ZTsKKwogCQl3b3JrZXJfcGlkID0gd29ya2VyLnByb2MtPnBpZDsKIAogCQl2YWx1ZXNb MF0gPSBPYmplY3RJZEdldERhdHVtKHdvcmtlci5zdWJpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAppbmRleCA3NzM1ODNhLi4yNmJmYzBlIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKQEAgLTEsNCArMSw1IEBA CiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCisgICdhcHBseXBhcmFsbGVsd29ya2VyLmMnLAog ICAnZGVjb2RlLmMnLAogICAnbGF1bmNoZXIuYycsCiAgICdsb2dpY2FsLmMnLApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMKaW5kZXggZjEzNGU0NC4uZWNhMjdiNiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCkBAIC0xMDc1LDEyICsxMDc1 LDIxIEBAIFJlcGxpY2F0aW9uT3JpZ2luRXhpdENsZWFudXAoaW50IGNvZGUsIERhdHVtIGFyZykK ICAqIGFycmF5IGRvZXNuJ3QgaGF2ZSB0byBiZSBzZWFyY2hlZCB3aGVuIGNhbGxpbmcKICAqIHJl cGxvcmlnaW5fc2Vzc2lvbl9hZHZhbmNlKCkuCiAgKgotICogT2J2aW91c2x5IG9ubHkgb25lIHN1 Y2ggY2FjaGVkIG9yaWdpbiBjYW4gZXhpc3QgcGVyIHByb2Nlc3MgYW5kIHRoZSBjdXJyZW50Cisg KiBOb3JtYWxseSBvbmx5IG9uZSBzdWNoIGNhY2hlZCBvcmlnaW4gY2FuIGV4aXN0IHBlciBwcm9j ZXNzIGFuZCB0aGUgY3VycmVudAogICogY2FjaGVkIHZhbHVlIGNhbiBvbmx5IGJlIHNldCBhZ2Fp biBhZnRlciB0aGUgcHJldmlvdXMgdmFsdWUgaXMgdG9ybiBkb3duCiAgKiB3aXRoIHJlcGxvcmln aW5fc2Vzc2lvbl9yZXNldCgpLgorICoKKyAqIEhvd2V2ZXIsIGlmIHRoZSBmdW5jdGlvbiBwYXJh bWV0ZXIgJ2FjcXVpcmVkX2J5JyBpcyBub3QgMCwgd2UgYWxsb3cgdGhlCisgKiBwcm9jZXNzIHRv IHVzZSB0aGUgc2FtZSBzbG90IGFscmVhZHkgYWNxdWlyZWQgYnkgYW5vdGhlciBwcm9jZXNzLiBJ dCdzIHNhZmUKKyAqIGJlY2F1c2UgMSkgVGhlIG9ubHkgY2FsbGVyIChwYXJhbGxlbCBhcHBseSB3 b3JrZXJzKSB3aWxsIG1haW50YWluIHRoZQorICogY29tbWl0IG9yZGVyIGJ5IGFsbG93aW5nIG9u bHkgb25lIHByb2Nlc3MgdG8gY29tbWl0IGF0IGEgdGltZSwgc28gbm8gdHdvCisgKiB3b3JrZXJz IHdpbGwgYmUgb3BlcmF0aW5nIG9uIHRoZSBzYW1lIG9yaWdpbiBhdCB0aGUgc2FtZSB0aW1lIChz ZWUgY29tbWVudHMKKyAqIGluIGxvZ2ljYWwvd29ya2VyLmMpLiAyKSBFdmVuIHRob3VnaCB3ZSB0 cnkgdG8gYWR2YW5jZSB0aGUgc2Vzc2lvbidzIG9yaWdpbgorICogY29uY3VycmVudGx5LCBpdCdz IHNhZmUgdG8gZG8gc28gYXMgd2UgY2hhbmdlL2FkdmFuY2UgdGhlIHNlc3Npb25fb3JpZ2luCisg KiBMU05zIHVuZGVyIHJlcGxpY2F0ZV9zdGF0ZSBMV0xvY2suCiAgKi8KIHZvaWQKLXJlcGxvcmln aW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKQorcmVwbG9yaWdpbl9zZXNzaW9uX3Nl dHVwKFJlcE9yaWdpbklkIG5vZGUsIGludCBhY3F1aXJlZF9ieSkKIHsKIAlzdGF0aWMgYm9vbCBy ZWdpc3RlcmVkX2NsZWFudXA7CiAJaW50CQkJaTsKQEAgLTExMjIsNyArMTEzMSw3IEBAIHJlcGxv cmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKQogCQlpZiAoY3Vyc3RhdGUtPnJv aWRlbnQgIT0gbm9kZSkKIAkJCWNvbnRpbnVlOwogCi0JCWVsc2UgaWYgKGN1cnN0YXRlLT5hY3F1 aXJlZF9ieSAhPSAwKQorCQllbHNlIGlmIChjdXJzdGF0ZS0+YWNxdWlyZWRfYnkgIT0gMCAmJiBh Y3F1aXJlZF9ieSA9PSAwKQogCQl7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShF UlJDT0RFX09CSkVDVF9JTl9VU0UpLApAQCAtMTE1Myw3ICsxMTYyLDExIEBAIHJlcGxvcmlnaW5f c2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlKQogCiAJQXNzZXJ0KHNlc3Npb25fcmVwbGlj YXRpb25fc3RhdGUtPnJvaWRlbnQgIT0gSW52YWxpZFJlcE9yaWdpbklkKTsKIAotCXNlc3Npb25f cmVwbGljYXRpb25fc3RhdGUtPmFjcXVpcmVkX2J5ID0gTXlQcm9jUGlkOworCWlmIChhY3F1aXJl ZF9ieSA9PSAwKQorCQlzZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1aXJlZF9ieSA9IE15 UHJvY1BpZDsKKwllbHNlIGlmIChzZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1aXJlZF9i eSAhPSBhY3F1aXJlZF9ieSkKKwkJIGVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCByZXBsaWNh dGlvbiBzdGF0ZSBzbG90IGZvciByZXBsaWNhdGlvbiIKKwkJCSAgIm9yaWdpbiB3aXRoIE9JRCAl dSB3aGljaCB3YXMgYWNxdWlyZWQgYnkgJWQiLCBub2RlLCBhY3F1aXJlZF9ieSk7CiAKIAlMV0xv Y2tSZWxlYXNlKFJlcGxpY2F0aW9uT3JpZ2luTG9jayk7CiAKQEAgLTEzMzcsNyArMTM1MCw3IEBA IHBnX3JlcGxpY2F0aW9uX29yaWdpbl9zZXNzaW9uX3NldHVwKFBHX0ZVTkNUSU9OX0FSR1MpCiAK IAluYW1lID0gdGV4dF90b19jc3RyaW5nKCh0ZXh0ICopIERhdHVtR2V0UG9pbnRlcihQR19HRVRB UkdfREFUVU0oMCkpKTsKIAlvcmlnaW4gPSByZXBsb3JpZ2luX2J5X25hbWUobmFtZSwgZmFsc2Up OwotCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW4pOworCXJlcGxvcmlnaW5fc2Vzc2lv bl9zZXR1cChvcmlnaW4sIDApOwogCiAJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdp bjsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IGZmODUxM2Uu LmQ2MTYwZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJv dG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAgLTEx NjMsMTAgKzExNjMsMTQgQEAgbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQoU3RyaW5nSW5m byBpbiwgTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKQogLyoKICAqIFdyaXRlIFNU UkVBTSBBQk9SVCB0byB0aGUgb3V0cHV0IHN0cmVhbS4gTm90ZSB0aGF0IHhpZCBhbmQgc3VieGlk IHdpbGwgYmUKICAqIHNhbWUgZm9yIHRoZSB0b3AtbGV2ZWwgdHJhbnNhY3Rpb24gYWJvcnQuCisg KgorICogSWYgd3JpdGVfYWJvcnRfaW5mbyBpcyB0cnVlLCBzZW5kIHRoZSBhYm9ydF9sc24gYW5k IGFib3J0X3RpbWUgZmllbGRzLAorICogb3RoZXJ3aXNlIGRvbid0LgogICovCiB2b2lkCiBsb2dp Y2FscmVwX3dyaXRlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4 aWQsCi0JCQkJCQkJICBUcmFuc2FjdGlvbklkIHN1YnhpZCkKKwkJCQkJCQkgIFRyYW5zYWN0aW9u SWQgc3VieGlkLCBYTG9nUmVjUHRyIGFib3J0X2xzbiwKKwkJCQkJCQkgIFRpbWVzdGFtcFR6IGFi b3J0X3RpbWUsIGJvb2wgd3JpdGVfYWJvcnRfaW5mbykKIHsKIAlwcV9zZW5kYnl0ZShvdXQsIExP R0lDQUxfUkVQX01TR19TVFJFQU1fQUJPUlQpOwogCkBAIC0xMTc1LDE5ICsxMTc5LDQwIEBAIGxv Z2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklk IHhpZCwKIAkvKiB0cmFuc2FjdGlvbiBJRCAqLwogCXBxX3NlbmRpbnQzMihvdXQsIHhpZCk7CiAJ cHFfc2VuZGludDMyKG91dCwgc3VieGlkKTsKKworCWlmICh3cml0ZV9hYm9ydF9pbmZvKQorCXsK KwkJcHFfc2VuZGludDY0KG91dCwgYWJvcnRfbHNuKTsKKwkJcHFfc2VuZGludDY0KG91dCwgYWJv cnRfdGltZSk7CisJfQogfQogCiAvKgogICogUmVhZCBTVFJFQU0gQUJPUlQgZnJvbSB0aGUgb3V0 cHV0IHN0cmVhbS4KKyAqCisgKiBJZiByZWFkX2Fib3J0X2luZm8gaXMgdHJ1ZSwgcmVhZCB0aGUg YWJvcnRfbHNuIGFuZCBhYm9ydF90aW1lIGZpZWxkcywKKyAqIG90aGVyd2lzZSBkb24ndC4KICAq Lwogdm9pZAotbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIGluLCBUcmFu c2FjdGlvbklkICp4aWQsCi0JCQkJCQkJIFRyYW5zYWN0aW9uSWQgKnN1YnhpZCkKK2xvZ2ljYWxy ZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwKKwkJCQkJCQkgTG9naWNhbFJlcFN0 cmVhbUFib3J0RGF0YSAqYWJvcnRfZGF0YSwKKwkJCQkJCQkgYm9vbCByZWFkX2Fib3J0X2luZm8p CiB7Ci0JQXNzZXJ0KHhpZCAmJiBzdWJ4aWQpOworCUFzc2VydChhYm9ydF9kYXRhKTsKKworCWFi b3J0X2RhdGEtPnhpZCA9IHBxX2dldG1zZ2ludChpbiwgNCk7CisJYWJvcnRfZGF0YS0+c3VieGlk ID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKIAotCSp4aWQgPSBwcV9nZXRtc2dpbnQoaW4sIDQpOwot CSpzdWJ4aWQgPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCWlmIChyZWFkX2Fib3J0X2luZm8pCisJ eworCQlhYm9ydF9kYXRhLT5hYm9ydF9sc24gPSBwcV9nZXRtc2dpbnQ2NChpbik7CisJCWFib3J0 X2RhdGEtPmFib3J0X3RpbWUgPSBwcV9nZXRtc2dpbnQ2NChpbik7CisJfQorCWVsc2UKKwl7CisJ CWFib3J0X2RhdGEtPmFib3J0X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlhYm9ydF9kYXRh LT5hYm9ydF90aW1lID0gMDsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDIyYTE1YTQuLmE3MWMxMmQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC0y ODQ2LDcgKzI4NDYsOCBAQCBSZW9yZGVyQnVmZmVyRmluaXNoUHJlcGFyZWQoUmVvcmRlckJ1ZmZl ciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogICogZGlzay4KICAqLwogdm9pZAotUmVvcmRlckJ1 ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0 ciBsc24pCitSZW9yZGVyQnVmZmVyQWJvcnQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9u SWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkgICBUaW1lc3RhbXBUeiBhYm9ydF90aW1lKQog ewogCVJlb3JkZXJCdWZmZXJUWE4gKnR4bjsKIApAQCAtMjg1Nyw2ICsyODU4LDggQEAgUmVvcmRl ckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1Jl Y1B0ciBsc24pCiAJaWYgKHR4biA9PSBOVUxMKQogCQlyZXR1cm47CiAKKwl0eG4tPnhhY3RfdGlt ZS5hYm9ydF90aW1lID0gYWJvcnRfdGltZTsKKwogCS8qIEZvciBzdHJlYW1lZCB0cmFuc2FjdGlv bnMgbm90aWZ5IHRoZSByZW1vdGUgbm9kZSBhYm91dCB0aGUgYWJvcnQuICovCiAJaWYgKHJidHhu X2lzX3N0cmVhbWVkKHR4bikpCiAJewpAQCAtMjkzMSw3ICsyOTM0LDggQEAgUmVvcmRlckJ1ZmZl ckFib3J0T2xkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIG9sZGVzdFJ1bm5pbmdY aWQpCiAgKiB0byB0aGlzIHhpZCBtaWdodCByZS1jcmVhdGUgdGhlIHRyYW5zYWN0aW9uIGluY29t cGxldGVseS4KICAqLwogdm9pZAotUmVvcmRlckJ1ZmZlckZvcmdldChSZW9yZGVyQnVmZmVyICpy YiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQorUmVvcmRlckJ1ZmZlckZvcmdl dChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAor CQkJCQlUaW1lc3RhbXBUeiBhYm9ydF90aW1lKQogewogCVJlb3JkZXJCdWZmZXJUWE4gKnR4bjsK IApAQCAtMjk0Miw2ICsyOTQ2LDggQEAgUmVvcmRlckJ1ZmZlckZvcmdldChSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCWlmICh0eG4gPT0gTlVM TCkKIAkJcmV0dXJuOwogCisJdHhuLT54YWN0X3RpbWUuYWJvcnRfdGltZSA9IGFib3J0X3RpbWU7 CisKIAkvKiBGb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25zIG5vdGlmeSB0aGUgcmVtb3RlIG5vZGUg YWJvdXQgdGhlIGFib3J0LiAqLwogCWlmIChyYnR4bl9pc19zdHJlYW1lZCh0eG4pKQogCQlyYi0+ c3RyZWFtX2Fib3J0KHJiLCB0eG4sIGxzbik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC90YWJsZXN5bmMuYwppbmRleCA5NGU4MTNhLi43MDg0MzUwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTE0LDcgKzE0LDcgQEAKICAqCSAg VGhlIGluaXRpYWwgZGF0YSBzeW5jaHJvbml6YXRpb24gaXMgZG9uZSBzZXBhcmF0ZWx5IGZvciBl YWNoIHRhYmxlLAogICoJICBpbiBhIHNlcGFyYXRlIGFwcGx5IHdvcmtlciB0aGF0IG9ubHkgZmV0 Y2hlcyB0aGUgaW5pdGlhbCBzbmFwc2hvdCBkYXRhCiAgKgkgIGZyb20gdGhlIHB1Ymxpc2hlciBh bmQgdGhlbiBzeW5jaHJvbml6ZXMgdGhlIHBvc2l0aW9uIGluIHRoZSBzdHJlYW0gd2l0aAotICoJ ICB0aGUgbWFpbiBhcHBseSB3b3JrZXIuCisgKgkgIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLgog ICoKICAqCSAgVGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucyBmb3IgZG9pbmcgdGhlIHN5bmNocm9u aXphdGlvbiB0aGlzIHdheToKICAqCSAgIC0gSXQgYWxsb3dzIHVzIHRvIHBhcmFsbGVsaXplIHRo ZSBpbml0aWFsIGRhdGEgc3luY2hyb25pemF0aW9uCkBAIC0xNTMsNyArMTUzLDcgQEAgZmluaXNo X3N5bmNfd29ya2VyKHZvaWQpCiAJCQkJCWdldF9yZWxfbmFtZShNeUxvZ2ljYWxSZXBXb3JrZXIt PnJlbGlkKSkpKTsKIAlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAotCS8qIEZpbmQgdGhl IG1haW4gYXBwbHkgd29ya2VyIGFuZCBzaWduYWwgaXQuICovCisJLyogRmluZCB0aGUgbGVhZGVy IGFwcGx5IHdvcmtlciBhbmQgc2lnbmFsIGl0LiAqLwogCWxvZ2ljYWxyZXBfd29ya2VyX3dha2V1 cChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBJbnZhbGlkT2lkKTsKIAogCS8qIFN0b3AgZ3Jh Y2VmdWxseSAqLwpAQCAtNjA5LDcgKzYwOSw4IEBAIHByb2Nlc3Nfc3luY2luZ190YWJsZXNfZm9y X2FwcGx5KFhMb2dSZWNQdHIgY3VycmVudF9sc24pCiAJCQkJCQkJCQkJCQkgTXlTdWJzY3JpcHRp b24tPm9pZCwKIAkJCQkJCQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+bmFtZSwKIAkJCQkJCQkJCQkJ CSBNeUxvZ2ljYWxSZXBXb3JrZXItPnVzZXJpZCwKLQkJCQkJCQkJCQkJCSByc3RhdGUtPnJlbGlk KTsKKwkJCQkJCQkJCQkJCSByc3RhdGUtPnJlbGlkLAorCQkJCQkJCQkJCQkJIERTTV9IQU5ETEVf SU5WQUxJRCk7CiAJCQkJCQloZW50cnktPmxhc3Rfc3RhcnRfdGltZSA9IG5vdzsKIAkJCQkJfQog CQkJCX0KQEAgLTYzMCw2ICs2MzEsMTMgQEAgcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3JfYXBw bHkoWExvZ1JlY1B0ciBjdXJyZW50X2xzbikKIHZvaWQKIHByb2Nlc3Nfc3luY2luZ190YWJsZXMo WExvZ1JlY1B0ciBjdXJyZW50X2xzbikKIHsKKwkvKgorCSAqIFNraXAgZm9yIHBhcmFsbGVsIGFw cGx5IHdvcmtlcnMuIFNlZSBwYXJhbGxlbF9hcHBseV9jYW5fc3RhcnQoKSBmb3IKKwkgKiBkZXRh aWxzLgorCSAqLworCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuOwor CiAJaWYgKGFtX3RhYmxlc3luY193b3JrZXIoKSkKIAkJcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19m b3Jfc3luYyhjdXJyZW50X2xzbik7CiAJZWxzZQpAQCAtMTI0Nyw3ICsxMjU1LDcgQEAgTG9naWNh bFJlcFN5bmNUYWJsZVN0YXJ0KFhMb2dSZWNQdHIgKm9yaWdpbl9zdGFydHBvcykKIAogCS8qCiAJ ICogSGVyZSB3ZSB1c2UgdGhlIHNsb3QgbmFtZSBpbnN0ZWFkIG9mIHRoZSBzdWJzY3JpcHRpb24g bmFtZSBhcyB0aGUKLQkgKiBhcHBsaWNhdGlvbl9uYW1lLCBzbyB0aGF0IGl0IGlzIGRpZmZlcmVu dCBmcm9tIHRoZSBtYWluIGFwcGx5IHdvcmtlciwKKwkgKiBhcHBsaWNhdGlvbl9uYW1lLCBzbyB0 aGF0IGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLAogCSAqIHNv IHRoYXQgc3luY2hyb25vdXMgcmVwbGljYXRpb24gY2FuIGRpc3Rpbmd1aXNoIHRoZW0uCiAJICov CiAJTG9nUmVwV29ya2VyV2FsUmN2Q29ubiA9CkBAIC0xMjk1LDcgKzEzMDMsNyBAQCBMb2dpY2Fs UmVwU3luY1RhYmxlU3RhcnQoWExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCQkgKiB0aW1l IHRoaXMgdGFibGVzeW5jIHdhcyBsYXVuY2hlZC4KIAkJICovCiAJCW9yaWdpbmlkID0gcmVwbG9y aWdpbl9ieV9uYW1lKG9yaWdpbm5hbWUsIGZhbHNlKTsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3Nl dHVwKG9yaWdpbmlkKTsKKwkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCAwKTsK IAkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOwogCQkqb3JpZ2luX3N0YXJ0 cG9zID0gcmVwbG9yaWdpbl9zZXNzaW9uX2dldF9wcm9ncmVzcyhmYWxzZSk7CiAKQEAgLTE0MDYs NyArMTQxNCw3IEBAIExvZ2ljYWxSZXBTeW5jVGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5f c3RhcnRwb3MpCiAJCQkJCQkgICB0cnVlIC8qIGdvIGJhY2t3YXJkICovICwgdHJ1ZSAvKiBXQUwg bG9nICovICk7CiAJCVVubG9ja1JlbGF0aW9uT2lkKFJlcGxpY2F0aW9uT3JpZ2luUmVsYXRpb25J ZCwgUm93RXhjbHVzaXZlTG9jayk7CiAKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdp bmlkKTsKKwkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKIAkJcmVwbG9y aWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOwogCX0KIAllbHNlCkBAIC0xNDYxLDggKzE0 NjksOCBAQCBjb3B5X3RhYmxlX2RvbmU6CiAJU3BpbkxvY2tSZWxlYXNlKCZNeUxvZ2ljYWxSZXBX b3JrZXItPnJlbG11dGV4KTsKIAogCS8qCi0JICogRmluYWxseSwgd2FpdCB1bnRpbCB0aGUgbWFp biBhcHBseSB3b3JrZXIgdGVsbHMgdXMgdG8gY2F0Y2ggdXAgYW5kIHRoZW4KLQkgKiByZXR1cm4g dG8gbGV0IExvZ2ljYWxSZXBBcHBseUxvb3AgZG8gaXQuCisJICogRmluYWxseSwgd2FpdCB1bnRp bCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciB0ZWxscyB1cyB0byBjYXRjaCB1cCBhbmQKKwkgKiB0 aGVuIHJldHVybiB0byBsZXQgTG9naWNhbFJlcEFwcGx5TG9vcCBkbyBpdC4KIAkgKi8KIAl3YWl0 X2Zvcl93b3JrZXJfc3RhdGVfY2hhbmdlKFNVQlJFTF9TVEFURV9DQVRDSFVQKTsKIAlyZXR1cm4g c2xvdG5hbWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCBl NDhhM2Y1Li5kOTNjZTY2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMKQEAgLTIyLDggKzIyLDU0IEBACiAgKiBTVFJFQU1FRCBUUkFOU0FDVElPTlMKICAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLQogICogU3RyZWFtZWQgdHJhbnNhY3Rpb25zIChsYXJnZSB0cmFuc2Fj dGlvbnMgZXhjZWVkaW5nIGEgbWVtb3J5IGxpbWl0IG9uIHRoZQotICogdXBzdHJlYW0pIGFyZSBu b3QgYXBwbGllZCBpbW1lZGlhdGVseSwgYnV0IGluc3RlYWQsIHRoZSBkYXRhIGlzIHdyaXR0ZW4K LSAqIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgdGhlbiBhcHBsaWVkIGF0IG9uY2Ugd2hlbiB0aGUg ZmluYWwgY29tbWl0IGFycml2ZXMuCisgKiB1cHN0cmVhbSkgYXJlIGFwcGxpZWQgdXNpbmcgb25l IG9mIHR3byBhcHByb2FjaGVzOgorICoKKyAqIDEpIFBhcmFsbGVsIGFwcGx5IHdvcmtlcnMKKyAq CisgKiBJZiBzdHJlYW1pbmcgPSBwYXJhbGxlbCwgd2UgYXNzaWduIGEgbmV3IHBhcmFsbGVsIGFw cGx5IHdvcmtlciAoaWYKKyAqIGF2YWlsYWJsZSkgYXMgc29vbiBhcyB0aGUgeGFjdCdzIGZpcnN0 IHN0cmVhbSBpcyByZWNlaXZlZC4gVGhlIGxlYWRlciBhcHBseQorICogd29ya2VyIHdpbGwgc2Vu ZCBjaGFuZ2VzIHRvIHRoaXMgbmV3IHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gV2Uga2VlcCB0 aGlzCisgKiB3b3JrZXIgYXNzaWduZWQgdGlsbCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHJl Y2VpdmVkIGFuZCBhbHNvIHdhaXQgZm9yCisgKiB0aGUgd29ya2VyIHRvIGZpbmlzaCBhdCBjb21t aXQuIFRoaXMgcHJlc2VydmVzIGNvbW1pdCBvcmRlcmluZyBhbmQgYXZvaWRzCisgKiBmaWxlIEkv TyBpbiBtb3N0IGNhc2VzLCBhbHRob3VnaCB3ZSBzdGlsbCBuZWVkIHRvIHNwaWxsIHRvIGEgZmls ZSBpZiB0aGVyZQorICogaXMgbm8gd29ya2VyIGF2YWlsYWJsZS4gSXQgaXMgaW1wb3J0YW50IHRv IG1haW50YWluIGNvbW1pdCBvcmRlciB0byBhdm9pZAorICogZmFpbHVyZXMgZHVlIHRvIChhKSB0 cmFuc2FjdGlvbiBkZXBlbmRlbmNpZXMsIHNheSBpZiB3ZSBpbnNlcnQgYSByb3cgaW4gdGhlCisg KiBmaXJzdCB0cmFuc2FjdGlvbiBhbmQgdXBkYXRlIGl0IGluIHRoZSBzZWNvbmQgdHJhbnNhY3Rp b24gdGhlbiBhbGxvd2luZyB0bworICogYXBwbHkgYm90aCBpbiBwYXJhbGxlbCBjYW4gbGVhZCB0 byBmYWlsdXJlIGluIHRoZSB1cGRhdGUuIChiKSBkZWFkbG9ja3MsCisgKiBhbGxvd2luZyB0cmFu c2FjdGlvbnMgdGhhdCB1cGRhdGUgdGhlIHNhbWUgc2V0IG9mIHJvd3MvdGFibGVzIGluIG9wcG9z aXRlCisgKiBvcmRlciB0byBiZSBhcHBsaWVkIGluIHBhcmFsbGVsIGNhbiBsZWFkIHRvIGRlYWRs b2Nrcy4KKyAqCisgKiBXZSBtYWludGFpbiBhIHdvcmtlciBwb29sIHRvIGF2b2lkIHJlc3RhcnRp bmcgd29ya2VycyBmb3IgZWFjaCBzdHJlYW1pbmcKKyAqIHRyYW5zYWN0aW9uLiBXZSBtYWludGFp biBlYWNoIHdvcmtlcidzIGluZm9ybWF0aW9uIGluIHRoZQorICogUGFyYWxsZWxBcHBseVdvcmtl cnNMaXN0LiBBZnRlciBzdWNjZXNzZnVsbHkgbGF1bmNoaW5nIGEgbmV3IHdvcmtlciwgaXRzCisg KiBpbmZvcm1hdGlvbiBpcyBhZGRlZCB0byB0aGUgUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0LiBP bmNlIHRoZSB3b3JrZXIKKyAqIGZpbmlzaGVzIGFwcGx5aW5nIHRoZSB0cmFuc2FjdGlvbiwgd2Ug bWFyayBpdCBhdmFpbGFibGUgZm9yIHJlLXVzZS4gTm93LAorICogYmVmb3JlIHN0YXJ0aW5nIGEg bmV3IHdvcmtlciB0byBhcHBseSB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCB3ZSBjaGVjawor ICogdGhlIGxpc3QgZm9yIGFueSBhdmFpbGFibGUgd29ya2VyLiBOb3RlIHRoYXQgd2UgbWFpbnRh aW4gYSBtYXhpbXVtIG9mIGhhbGYKKyAqIHRoZSBtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19w ZXJfc3Vic2NyaXB0aW9uIHdvcmtlcnMgaW4gdGhlIHBvb2wgYW5kCisgKiBhZnRlciB0aGF0LCB3 ZSBzaW1wbHkgZXhpdCB0aGUgd29ya2VyIGFmdGVyIGFwcGx5aW5nIHRoZSB0cmFuc2FjdGlvbi4K KyAqCisgKiBYWFggVGhpcyB3b3JrZXIgcG9vbCB0aHJlc2hvbGQgaXMgYSBiaXQgYXJiaXRyYXJ5 IGFuZCB3ZSBjYW4gcHJvdmlkZSBhIEdVQworICogdmFyaWFibGUgZm9yIHRoaXMgaW4gdGhlIGZ1 dHVyZSBpZiByZXF1aXJlZC4KKyAqCisgKiBUaGUgbGVhZGVyIGFwcGx5IHdvcmtlciB3aWxsIGNy ZWF0ZSBzZXBhcmF0ZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudAorICogd2hlbiBlYWNo IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBzdGFydHMuIFRoZSByZWFzb24gZm9yIHRoaXMgZGVzaWdu IGlzIHRoYXQKKyAqIHdlIGNhbm5vdCBjb3VudCBob3cgbWFueSB3b3JrZXJzIHdpbGwgYmUgc3Rh cnRlZC4gSXQgbWF5IGJlIHBvc3NpYmxlIHRvCisgKiBhbGxvY2F0ZSBlbm91Z2ggc2hhcmVkIG1l bW9yeSBpbiBvbmUgc2VnbWVudCBiYXNlZCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YKKyAqIHBh cmFsbGVsIGFwcGx5IHdvcmtlcnMgKG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJz Y3JpcHRpb24pLCBidXQgdGhpcworICogd291bGQgd2FzdGUgbWVtb3J5IGlmIG5vIHByb2Nlc3Mg aXMgYWN0dWFsbHkgc3RhcnRlZC4KKyAqCisgKiBUaGUgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNl Z21lbnQgd2lsbCBjb250YWluIChhKSBhIHNobV9tcSB0aGF0IGlzIHVzZWQgdG8KKyAqIHNlbmQg Y2hhbmdlcyBpbiB0aGUgdHJhbnNhY3Rpb24gZnJvbSBsZWFkZXIgYXBwbHkgd29ya2VyIHRvIHBh cmFsbGVsIGFwcGx5CisgKiB3b3JrZXIgKGIpIGFub3RoZXIgc2htX21xIHRoYXQgaXMgdXNlZCB0 byBzZW5kIGVycm9ycyAoYW5kIG90aGVyIG1lc3NhZ2VzCisgKiByZXBvcnRlZCB2aWEgZWxvZy9l cmVwb3J0KSBmcm9tIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8gbGVhZGVyIGFwcGx5Cisg KiB3b3JrZXIgKGMpIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBiZSBzaGFyZWQgYW1vbmcgcGFy YWxsZWwgYXBwbHkgd29ya2VycworICogYW5kIGxlYWRlciBhcHBseSB3b3JrZXIgKGkuZS4gbWVt YmVycyBpbiBQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkKS4KKyAqCisgKiBJZiBubyBwYXJhbGxl bCBhcHBseSB3b3JrZXIgaXMgYXZhaWxhYmxlIHRvIGhhbmRsZSB0aGUgc3RyZWFtZWQgdHJhbnNh Y3Rpb24KKyAqIHdlIGZvbGxvdyBhcHByb2FjaCAyLgorICoKKyAqIDIpIFdyaXRlIHRvIHRlbXBv cmFyeSBmaWxlcyBhbmQgYXBwbHkgd2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2ZXMKICAqCiAg KiBVbmxpa2UgdGhlIHJlZ3VsYXIgKG5vbi1zdHJlYW1lZCkgY2FzZSwgaGFuZGxpbmcgc3RyZWFt ZWQgdHJhbnNhY3Rpb25zIGhhcwogICogdG8gaGFuZGxlIGFib3J0cyBvZiBib3RoIHRoZSB0b3Bs ZXZlbCB0cmFuc2FjdGlvbiBhbmQgc3VidHJhbnNhY3Rpb25zLiBUaGlzCkBAIC0yMTksMjAgKzI2 NSw1MyBAQCB0eXBlZGVmIHN0cnVjdCBBcHBseUV4ZWN1dGlvbkRhdGEKIAlQYXJ0aXRpb25UdXBs ZVJvdXRpbmcgKnByb3V0ZTsJLyogcGFydGl0aW9uIHJvdXRpbmcgaW5mbyAqLwogfSBBcHBseUV4 ZWN1dGlvbkRhdGE7CiAKLS8qIFN0cnVjdCBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgYXBwbHkg ZXJyY29udGV4dCBpbmZvcm1hdGlvbiAqLwotdHlwZWRlZiBzdHJ1Y3QgQXBwbHlFcnJvckNhbGxi YWNrQXJnCisvKgorICogV2hhdCBhY3Rpb24gdG8gdGFrZSBmb3IgdGhlIHRyYW5zYWN0aW9uLgor ICoKKyAqIFRSQU5TX0xFQURFUl9BUFBMWToKKyAqIFRoZSBhY3Rpb24gbWVhbnMgdGhhdCB3ZSBh cmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIGNoYW5nZXMgb2YgdGhlCisgKiB0cmFu c2FjdGlvbiBhcmUgYXBwbGllZCBkaXJlY3RseSBpbiB0aGUgd29ya2VyLgorICoKKyAqIFRSQU5T X0xFQURFUl9TRVJJQUxJWkU6CisgKiBJdCBtZWFucyB0aGF0IHdlIGFyZSBpbiB0aGUgbGVhZGVy IGFwcGx5IHdvcmtlciBvciB0YWJsZSBzeW5jIHdvcmtlci4KKyAqIENoYW5nZXMgYXJlIHdyaXR0 ZW4gdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgd2hlbiB0aGUgZmluYWwKKyAq IGNvbW1pdCBhcnJpdmVzLgorICoKKyAqIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToK KyAqIFRoZSBhY3Rpb24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3Jr ZXIgYW5kIGhhdmUgc2VudCBzb21lCisgKiBjaGFuZ2VzIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIsIGJ1dCB0aGUgcmVtYWluaW5nIGNoYW5nZXMgbmVlZCB0byBiZQorICogc2VyaWFsaXpl ZCB0byBkaXNrIGR1ZSB0byB0aW1lb3V0IHdoaWxlIHNlbmRpbmcgZGF0YSwgYW5kIHRoZSBwYXJh bGxlbCBhcHBseQorICogd29ya2VyIHdpbGwgYXBwbHkgdGhlc2UgY2hhbmdlcyB3aGVuIHRoZSBm aW5hbCBjb21taXQgYXJyaXZlcy4KKyAqCisgKiBPbmUgbWlnaHQgdGhpbmsgd2UgY2FuIHVzZSBM RUFERVJfU0VSSUFMSVpFIGRpcmVjdGx5LiBCdXQgaW4gcGFydGlhbAorICogc2VyaWFsaXplIG1v ZGUsIGluIGFkZGl0aW9uIHRvIHNlcmlhbGl6aW5nIGNoYW5nZXMgdG8gZmlsZSwgdGhlIGxlYWRl cgorICogd29ya2VyIG5lZWQgdG8gd3JpdGUgdGhlIFNUUkVBTV9YWFggbWVzc2FnZSB0byBkaXNr LCBhbmQgbmVlZCB0byB3YWl0IGZvcgorICogcGFyYWxsZWwgYXBwbHkgd29ya2VyIHRvIGZpbmlz aCB0aGUgdHJhbnNhY3Rpb24gd2hlbiBwcm9jZXNzaW5nIHRoZQorICogdHJhbnNhY3Rpb24gZmlu aXNoIGNvbW1hbmQuIFNvIGEgbmV3IGFjdGlvbiB3YXMgaW50cm9kdWNlZCB0byBtYWtlIHRoZSBs b2dpYworICogY2xlYXJlci4KKyAqCisgKiBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoK KyAqIFRoZSBhY3Rpb24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3Jr ZXIgYW5kIG5lZWQgdG8gc2VuZCB0aGUKKyAqIGNoYW5nZXMgdG8gdGhlIHBhcmFsbGVsIGFwcGx5 IHdvcmtlci4KKyAqCisgKiBUUkFOU19QQVJBTExFTF9BUFBMWToKKyAqIFRoZSBhY3Rpb24gdGhh dCB3ZSBhcmUgaW4gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBhbmQgY2hhbmdlcyBvZiB0aGUK KyAqIHRyYW5zYWN0aW9uIGFyZSBhcHBsaWVkIGRpcmVjdGx5IGluIHRoZSB3b3JrZXIuCisgKi8K K3R5cGVkZWYgZW51bQogewotCUxvZ2ljYWxSZXBNc2dUeXBlIGNvbW1hbmQ7CS8qIDAgaWYgaW52 YWxpZCAqLwotCUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsOwotCi0JLyogUmVtb3RlIG5vZGUg aW5mb3JtYXRpb24gKi8KLQlpbnQJCQlyZW1vdGVfYXR0bnVtOwkvKiAtMSBpZiBpbnZhbGlkICov Ci0JVHJhbnNhY3Rpb25JZCByZW1vdGVfeGlkOwotCVhMb2dSZWNQdHIJZmluaXNoX2xzbjsKLQlj aGFyCSAgICpvcmlnaW5fbmFtZTsKLX0gQXBwbHlFcnJvckNhbGxiYWNrQXJnOwotCi1zdGF0aWMg QXBwbHlFcnJvckNhbGxiYWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZyA9CisJLyogVGhl IGFjdGlvbiBmb3Igbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMuICovCisJVFJBTlNfTEVBREVS X0FQUExZLAorCisJLyogQWN0aW9ucyBmb3Igc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4gKi8KKwlU UkFOU19MRUFERVJfU0VSSUFMSVpFLAorCVRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRSwK KwlUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCwKKwlUUkFOU19QQVJBTExFTF9BUFBMWQor fSBUcmFuc0FwcGx5QWN0aW9uOworCisvKiBlcnJjb250ZXh0IHRyYWNrZXIgKi8KK0FwcGx5RXJy b3JDYWxsYmFja0FyZyBhcHBseV9lcnJvcl9jYWxsYmFja19hcmcgPQogewogCS5jb21tYW5kID0g MCwKIAkucmVsID0gTlVMTCwKQEAgLTI0Miw3ICszMjEsOSBAQCBzdGF0aWMgQXBwbHlFcnJvckNh bGxiYWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZyA9CiAJLm9yaWdpbl9uYW1lID0gTlVM TCwKIH07CiAKLXN0YXRpYyBNZW1vcnlDb250ZXh0IEFwcGx5TWVzc2FnZUNvbnRleHQgPSBOVUxM OworRXJyb3JDb250ZXh0Q2FsbGJhY2sgKmFwcGx5X2Vycm9yX2NvbnRleHRfc3RhY2sgPSBOVUxM OworCitNZW1vcnlDb250ZXh0IEFwcGx5TWVzc2FnZUNvbnRleHQgPSBOVUxMOwogTWVtb3J5Q29u dGV4dCBBcHBseUNvbnRleHQgPSBOVUxMOwogCiAvKiBwZXIgc3RyZWFtIGNvbnRleHQgZm9yIHN0 cmVhbWluZyB0cmFuc2FjdGlvbnMgKi8KQEAgLTI1MSwyNyArMzMyLDM2IEBAIHN0YXRpYyBNZW1v cnlDb250ZXh0IExvZ2ljYWxTdHJlYW1pbmdDb250ZXh0ID0gTlVMTDsKIFdhbFJlY2VpdmVyQ29u biAqTG9nUmVwV29ya2VyV2FsUmN2Q29ubiA9IE5VTEw7CiAKIFN1YnNjcmlwdGlvbiAqTXlTdWJz Y3JpcHRpb24gPSBOVUxMOwotc3RhdGljIGJvb2wgTXlTdWJzY3JpcHRpb25WYWxpZCA9IGZhbHNl OworYm9vbAkJTXlTdWJzY3JpcHRpb25WYWxpZCA9IGZhbHNlOwogCiBib29sCQlpbl9yZW1vdGVf dHJhbnNhY3Rpb24gPSBmYWxzZTsKIHN0YXRpYyBYTG9nUmVjUHRyIHJlbW90ZV9maW5hbF9sc24g PSBJbnZhbGlkWExvZ1JlY1B0cjsKIAogLyogZmllbGRzIHZhbGlkIG9ubHkgd2hlbiBwcm9jZXNz aW5nIHN0cmVhbWVkIHRyYW5zYWN0aW9uICovCi1zdGF0aWMgYm9vbCBpbl9zdHJlYW1lZF90cmFu c2FjdGlvbiA9IGZhbHNlOworYm9vbCBpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOwog Ci1zdGF0aWMgVHJhbnNhY3Rpb25JZCBzdHJlYW1feGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7 CitUcmFuc2FjdGlvbklkIHN0cmVhbV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKworLyoK KyAqIFRoZSBudW1iZXIgb2YgY2hhbmdlcyBzZW50IHRvIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMg ZHVyaW5nIG9uZSBzdHJlYW1pbmcKKyAqIGJsb2NrLgorICovCitzdGF0aWMgdWludDMyIHBhcmFs bGVsX3N0cmVhbV9uY2hhbmdlcyA9IDA7CiAKIC8qCiAgKiBXZSBlbmFibGUgc2tpcHBpbmcgYWxs IGRhdGEgbW9kaWZpY2F0aW9uIGNoYW5nZXMgKElOU0VSVCwgVVBEQVRFLCBldGMuKSBmb3IKICAq IHRoZSBzdWJzY3JpcHRpb24gaWYgdGhlIHJlbW90ZSB0cmFuc2FjdGlvbidzIGZpbmlzaCBMU04g bWF0Y2hlcyB0aGUgc3Vic2tpcGxzbi4KICAqIE9uY2Ugd2Ugc3RhcnQgc2tpcHBpbmcgY2hhbmdl cywgd2UgZG9uJ3Qgc3RvcCBpdCB1bnRpbCB3ZSBza2lwIGFsbCBjaGFuZ2VzIG9mCiAgKiB0aGUg dHJhbnNhY3Rpb24gZXZlbiBpZiBwZ19zdWJzY3JpcHRpb24gaXMgdXBkYXRlZCBhbmQgTXlTdWJz Y3JpcHRpb24tPnNraXBsc24KLSAqIGdldHMgY2hhbmdlZCBvciByZXNldCBkdXJpbmcgdGhhdC4g QWxzbywgaW4gc3RyZWFtaW5nIHRyYW5zYWN0aW9uIGNhc2VzLCB3ZQotICogZG9uJ3Qgc2tpcCBy ZWNlaXZpbmcgYW5kIHNwb29saW5nIHRoZSBjaGFuZ2VzIHNpbmNlIHdlIGRlY2lkZSB3aGV0aGVy IG9yIG5vdAorICogZ2V0cyBjaGFuZ2VkIG9yIHJlc2V0IGR1cmluZyB0aGF0LiBBbHNvLCBpbiBz dHJlYW1pbmcgdHJhbnNhY3Rpb24gY2FzZXMgKHN0cmVhbWluZyA9IG9uKSwKKyAqIHdlIGRvbid0 IHNraXAgcmVjZWl2aW5nIGFuZCBzcG9vbGluZyB0aGUgY2hhbmdlcyBzaW5jZSB3ZSBkZWNpZGUg d2hldGhlciBvciBub3QKICAqIHRvIHNraXAgYXBwbHlpbmcgdGhlIGNoYW5nZXMgd2hlbiBzdGFy dGluZyB0byBhcHBseSBjaGFuZ2VzLiBUaGUgc3Vic2tpcGxzbiBpcwogICogY2xlYXJlZCBhZnRl ciBzdWNjZXNzZnVsbHkgc2tpcHBpbmcgdGhlIHRyYW5zYWN0aW9uIG9yIGFwcGx5aW5nIG5vbi1l bXB0eQogICogdHJhbnNhY3Rpb24uIFRoZSBsYXR0ZXIgcHJldmVudHMgdGhlIG1pc3Rha2VubHkg c3BlY2lmaWVkIHN1YnNraXBsc24gZnJvbQotICogYmVpbmcgbGVmdC4KKyAqIGJlaW5nIGxlZnQu IE5vdGUgdGhhdCB3ZSBjYW5ub3Qgc2tpcCB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB3aGVu IHVzaW5nCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGJlY2F1c2Ugd2UgY2Fubm90IGdldCB0 aGUgZmluaXNoIExTTiBiZWZvcmUgYXBwbHlpbmcKKyAqIHRoZSBjaGFuZ2VzLiBTbywgd2UgZG9u J3Qgc3RhcnQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdoZW4gZmluaXNoIExTTiBpcyBzZXQKKyAq IGJ5IHRoZSB1c2VyLgogICovCiBzdGF0aWMgWExvZ1JlY1B0ciBza2lwX3hhY3RfZmluaXNoX2xz biA9IEludmFsaWRYTG9nUmVjUHRyOwogI2RlZmluZSBpc19za2lwcGluZ19jaGFuZ2VzKCkgKHVu bGlrZWx5KCFYTG9nUmVjUHRySXNJbnZhbGlkKHNraXBfeGFjdF9maW5pc2hfbHNuKSkpCkBAIC0z MTQsMjAgKzQwNCwxNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW51cF9zdWJ4YWN0X2luZm8o dm9pZCk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fY2xlYW51cF9maWxlcyhPaWQgc3ViaWQsIFRyYW5z YWN0aW9uSWQgeGlkKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV9vcGVuX2ZpbGUoT2lkIHN1YmlkLCBU cmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkgYm9vbCBmaXJzdF9zZWdtZW50KTsKLXN0YXRpYyB2 b2lkIHN0cmVhbV93cml0ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcyk7CitzdGF0 aWMgdm9pZCBzdHJlYW1fd3JpdGVfbWVzc2FnZShUcmFuc2FjdGlvbklkIHhpZCwgY2hhciBhY3Rp b24sIFN0cmluZ0luZm8gcywKKwkJCQkJCQkJIGJvb2wgY3JlYXRlX2ZpbGUpOwogc3RhdGljIHZv aWQgc3RyZWFtX2Nsb3NlX2ZpbGUodm9pZCk7CiAKIHN0YXRpYyB2b2lkIHNlbmRfZmVlZGJhY2so WExvZ1JlY1B0ciByZWN2cG9zLCBib29sIGZvcmNlLCBib29sIHJlcXVlc3RSZXBseSk7CiAKIHN0 YXRpYyB2b2lkIHN0b3JlX2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbik7CiAK LXN0YXRpYyB2b2lkIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCk7Ci0KIHN0YXRpYyB2 b2lkIERpc2FibGVTdWJzY3JpcHRpb25BbmRFeGl0KHZvaWQpOwogCi0vKiBwcm90b3R5cGUgbmVl ZGVkIGJlY2F1c2Ugb2Ygc3RyZWFtX2NvbW1pdCAqLwotc3RhdGljIHZvaWQgYXBwbHlfZGlzcGF0 Y2goU3RyaW5nSW5mbyBzKTsKLQogc3RhdGljIHZvaWQgYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRl cm5hbChMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEpOwogc3RhdGljIHZvaWQgYXBw bHlfaGFuZGxlX2luc2VydF9pbnRlcm5hbChBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogCQkJ CQkJCQkJCSBSZXN1bHRSZWxJbmZvICpyZWxpbmZvLApAQCAtMzUxLDE5ICs0MzcsMjAgQEAgc3Rh dGljIHZvaWQgYXBwbHlfaGFuZGxlX3R1cGxlX3JvdXRpbmcoQXBwbHlFeGVjdXRpb25EYXRhICpl ZGF0YSwKIC8qIENvbXB1dGUgR0lEIGZvciB0d29fcGhhc2UgdHJhbnNhY3Rpb25zICovCiBzdGF0 aWMgdm9pZCBUd29QaGFzZVRyYW5zYWN0aW9uR2lkKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4 aWQsIGNoYXIgKmdpZCwgaW50IHN6Z2lkKTsKIAotLyogQ29tbW9uIHN0cmVhbWluZyBmdW5jdGlv biB0byBhcHBseSBhbGwgdGhlIHNwb29sZWQgbWVzc2FnZXMgKi8KLXN0YXRpYyB2b2lkIGFwcGx5 X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKTsKLQog LyogRnVuY3Rpb25zIGZvciBza2lwcGluZyBjaGFuZ2VzICovCiBzdGF0aWMgdm9pZCBtYXliZV9z dGFydF9za2lwcGluZ19jaGFuZ2VzKFhMb2dSZWNQdHIgZmluaXNoX2xzbik7CiBzdGF0aWMgdm9p ZCBzdG9wX3NraXBwaW5nX2NoYW5nZXModm9pZCk7CiBzdGF0aWMgdm9pZCBjbGVhcl9zdWJzY3Jp cHRpb25fc2tpcF9sc24oWExvZ1JlY1B0ciBmaW5pc2hfbHNuKTsKIAogLyogRnVuY3Rpb25zIGZv ciBhcHBseSBlcnJvciBjYWxsYmFjayAqLwotc3RhdGljIHZvaWQgYXBwbHlfZXJyb3JfY2FsbGJh Y2sodm9pZCAqYXJnKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYXBwbHlfZXJyb3JfY29udGV4 dF94YWN0KFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbik7CiBzdGF0aWMgaW5saW5l IHZvaWQgcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKHZvaWQpOwogCitzdGF0aWMgVHJh bnNBcHBseUFjdGlvbiBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKFRyYW5zYWN0aW9uSWQg eGlkLAorCQkJCQkJCQkJCQkJCSBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKndpbmZvKTsKKwor c3RhdGljIGNvbnN0IGNoYXIgKmdldF93b3JrZXJfbmFtZSh2b2lkKTsKKwogLyoKICAqIEZvcm0g dGhlIG9yaWdpbiBuYW1lIGZvciB0aGUgc3Vic2NyaXB0aW9uLgogICoKQEAgLTM5MywxOSArNDgw LDQzIEBAIFJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvckxvZ2ljYWxSZXAoT2lkIHN1Ym9pZCwgT2lk IHJlbGlkLAogICoKICAqIFRoaXMgaXMgbWFpbmx5IG5lZWRlZCBmb3IgaW5pdGlhbCByZWxhdGlv biBkYXRhIHN5bmMgYXMgdGhhdCBydW5zIGluCiAgKiBzZXBhcmF0ZSB3b3JrZXIgcHJvY2VzcyBy dW5uaW5nIGluIHBhcmFsbGVsIGFuZCB3ZSBuZWVkIHNvbWUgd2F5IHRvIHNraXAKLSAqIGNoYW5n ZXMgY29taW5nIHRvIHRoZSBtYWluIGFwcGx5IHdvcmtlciBkdXJpbmcgdGhlIHN5bmMgb2YgYSB0 YWJsZS4KKyAqIGNoYW5nZXMgY29taW5nIHRvIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGR1cmlu ZyB0aGUgc3luYyBvZiBhIHRhYmxlLgogICoKICAqIE5vdGUgd2UgbmVlZCB0byBkbyBzbWFsbGVy IG9yIGVxdWFscyBjb21wYXJpc29uIGZvciBTWU5DRE9ORSBzdGF0ZSBiZWNhdXNlCiAgKiBpdCBt aWdodCBob2xkIHBvc2l0aW9uIG9mIGVuZCBvZiBpbml0aWFsIHNsb3QgY29uc2lzdGVudCBwb2lu dCBXQUwKICAqIHJlY29yZCArIDEgKGllIHN0YXJ0IG9mIG5leHQgcmVjb3JkKSBhbmQgbmV4dCBy ZWNvcmQgY2FuIGJlIENPTU1JVCBvZgogICogdHJhbnNhY3Rpb24gd2UgYXJlIG5vdyBwcm9jZXNz aW5nICh3aGljaCBpcyB3aGF0IHdlIHNldCByZW1vdGVfZmluYWxfbHNuCiAgKiB0byBpbiBhcHBs eV9oYW5kbGVfYmVnaW4pLgorICoKKyAqIE5vdGUgdGhhdCBmb3Igc3RyZWFtaW5nIHRyYW5zYWN0 aW9ucyB0aGF0IGFyZSBiZWluZyBhcHBsaWVkIGluIHRoZSBwYXJhbGxlbAorICogYXBwbHkgd29y a2VyLCB3ZSBkaXNhbGxvdyBhcHBseWluZyBjaGFuZ2VzIG9uIGEgdGFibGUgdGhhdCBpcyBub3Qg aW4KKyAqIHRoZSBSRUFEWSBzdGF0ZSwgYmVjYXVzZSB3ZSBjYW5ub3QgZGVjaWRlIHdoZXRoZXIg dG8gYXBwbHkgdGhlIGNoYW5nZSBhcyB3ZQorICogd29uJ3Qga25vdyByZW1vdGVfZmluYWxfbHNu IGJ5IHRoYXQgdGltZS4KKyAqCisgKiBXZSBhbHJlYWR5IGNoZWNrZWQgdGhpcyBpbiBwYXJhbGxl bF9hcHBseV9jYW5fc3RhcnQoKSBiZWZvcmUgYXNzaWduaW5nIHRoZQorICogc3RyZWFtaW5nIHRy YW5zYWN0aW9uIHRvIHRoZSBwYXJhbGxlbCB3b3JrZXIsIGJ1dCBpdCBhbHNvIG5lZWRzIHRvIGJl CisgKiBjaGVja2VkIGhlcmUgYmVjYXVzZSBpZiB0aGUgdXNlciBleGVjdXRlcyBBTFRFUiBTVUJT Q1JJUFRJT04gLi4uIFJFRlJFU0gKKyAqIFBVQkxJQ0FUSU9OIGluIHBhcmFsbGVsLCB0aGUgbmV3 IHRhYmxlIGNhbiBiZSBhZGRlZCB0byBwZ19zdWJzY3JpcHRpb25fcmVsCisgKiB3aGlsZSBhcHBs eWluZyB0aGlzIHRyYW5zYWN0aW9uLgogICovCiBzdGF0aWMgYm9vbAogc2hvdWxkX2FwcGx5X2No YW5nZXNfZm9yX3JlbChMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbCkKIHsKIAlpZiAoYW1fdGFi bGVzeW5jX3dvcmtlcigpKQogCQlyZXR1cm4gTXlMb2dpY2FsUmVwV29ya2VyLT5yZWxpZCA9PSBy ZWwtPmxvY2FscmVsb2lkOworCWVsc2UgaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQor CXsKKwkJaWYgKHJlbC0+c3RhdGUgIT0gU1VCUkVMX1NUQVRFX1JFQURZKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9T VEFURSksCisJCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2Fs IHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCQkgZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9u IFwiJXNcIiB3aWxsIHN0b3AiLAorCQkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlw dGlvbi0+bmFtZSksCisJCQkJCSBlcnJkZXRhaWwoIkNhbm5vdCBoYW5kbGUgc3RyZWFtZWQgcmVw bGljYXRpb24gdHJhbnNhY3Rpb25zIHVzaW5nIHBhcmFsbGVsICIKKwkJCQkJCQkgICAiYXBwbHkg d29ya2VycyB1bnRpbCBhbGwgdGFibGVzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQuIikpKTsKKwor CQlyZXR1cm4gdHJ1ZTsKKwl9CiAJZWxzZQogCQlyZXR1cm4gKHJlbC0+c3RhdGUgPT0gU1VCUkVM X1NUQVRFX1JFQURZIHx8CiAJCQkJKHJlbC0+c3RhdGUgPT0gU1VCUkVMX1NUQVRFX1NZTkNET05F ICYmCkBAIC00NTEsNDMgKzU2Miw5MSBAQCBlbmRfcmVwbGljYXRpb25fc3RlcCh2b2lkKQogfQog CiAvKgotICogSGFuZGxlIHN0cmVhbWVkIHRyYW5zYWN0aW9ucy4KKyAqIEhhbmRsZSBzdHJlYW1l ZCB0cmFuc2FjdGlvbnMgZm9yIGJvdGggdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHRoZSBw YXJhbGxlbAorICogYXBwbHkgd29ya2Vycy4KICAqCi0gKiBJZiBpbiBzdHJlYW1pbmcgbW9kZSAo cmVjZWl2aW5nIGEgYmxvY2sgb2Ygc3RyZWFtZWQgdHJhbnNhY3Rpb24pLCB3ZQotICogc2ltcGx5 IHJlZGlyZWN0IGl0IHRvIGEgZmlsZSBmb3IgdGhlIHByb3BlciB0b3BsZXZlbCB0cmFuc2FjdGlv bi4KKyAqIEluIHN0cmVhbWluZyBjYXNlIChyZWNlaXZpbmcgYSBibG9jayBvZiBzdHJlYW1lZCB0 cmFuc2FjdGlvbiksIGZvcgorICogU1VCU1RSRUFNX09OIG1vZGUsIHNpbXBseSByZWRpcmVjdCBp dCB0byBhIGZpbGUgZm9yIHRoZSBwcm9wZXIgdG9wbGV2ZWwKKyAqIHRyYW5zYWN0aW9uLCBhbmQg Zm9yIFNVQlNUUkVBTV9QQVJBTExFTCBtb2RlLCBzZW5kIHRoZSBjaGFuZ2VzIHRvIHBhcmFsbGVs CisgKiBhcHBseSB3b3JrZXJzIChMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gb3IgTE9HSUNBTF9S RVBfTVNHX1RZUEUgY2hhbmdlcworICogd2lsbCBiZSBhcHBsaWVkIGJ5IGJvdGggbGVhZGVyIGFw cGx5IHdvcmtlciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2VycykuCiAgKgotICogUmV0dXJucyB0 cnVlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbnMsIGZhbHNlIG90aGVyd2lzZSAocmVndWxhciBt b2RlKS4KKyAqIEZvciBub24tc3RyZWFtZWQgdHJhbnNhY3Rpb25zLCByZXR1cm5zIGZhbHNlLgor ICogRm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9ucywgcmV0dXJucyB0cnVlIGlmIGluIGxlYWRlciBh cHBseSB3b3JrZXIsIGZhbHNlCisgKiBvdGhlcndpc2UuCisgKgorICogRXhjZXB0aW9uOiBJZiB0 aGUgbWVzc2FnZSBiZWluZyBwcm9jZXNzZWQgaXMgTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OCisg KiBvciBMT0dJQ0FMX1JFUF9NU0dfVFlQRSwgcmV0dXJuIGZhbHNlIGV2ZW4gaWYgdGhlIG1lc3Nh Z2UgbmVlZHMgdG8gYmUgc2VudAorICogdG8gYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCiAgKi8K IHN0YXRpYyBib29sCiBoYW5kbGVfc3RyZWFtZWRfdHJhbnNhY3Rpb24oTG9naWNhbFJlcE1zZ1R5 cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiB7Ci0JVHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNh Y3Rpb25JZCBjdXJyZW50X3hpZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CisJ VHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CisJU3RyaW5nSW5mb0RhdGEJb3JpZ2luYWxf bXNnOworCisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihzdHJl YW1feGlkLCAmd2luZm8pOwogCiAJLyogbm90IGluIHN0cmVhbWluZyBtb2RlICovCi0JaWYgKCFp bl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwlpZiAoYXBwbHlfYWN0aW9uID09IFRSQU5TX0xFQURF Ul9BUFBMWSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JQXNzZXJ0KHN0cmVhbV9mZCAhPSBOVUxMKTsK IAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoc3RyZWFtX3hpZCkpOwogCisJb3JpZ2luYWxf bXNnID0gKnM7CisKIAkvKgogCSAqIFdlIHNob3VsZCBoYXZlIHJlY2VpdmVkIFhJRCBvZiB0aGUg c3VieGFjdCBhcyB0aGUgZmlyc3QgcGFydCBvZiB0aGUKIAkgKiBtZXNzYWdlLCBzbyBleHRyYWN0 IGl0LgogCSAqLwotCXhpZCA9IHBxX2dldG1zZ2ludChzLCA0KTsKKwljdXJyZW50X3hpZCA9IHBx X2dldG1zZ2ludChzLCA0KTsKIAotCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwlp ZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKGN1cnJlbnRfeGlkKSkKIAkJZXJlcG9ydChFUlJPUiwK IAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19p bnRlcm5hbCgiaW52YWxpZCB0cmFuc2FjdGlvbiBJRCBpbiBzdHJlYW1lZCByZXBsaWNhdGlvbiB0 cmFuc2FjdGlvbiIpKSk7CiAKLQkvKiBBZGQgdGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJheSAo dW5sZXNzIGFscmVhZHkgdGhlcmUpLiAqLwotCXN1YnhhY3RfaW5mb19hZGQoeGlkKTsKKwlzd2l0 Y2ggKGFwcGx5X2FjdGlvbikKKwl7CisJCWNhc2UgVFJBTlNfTEVBREVSX1NFUklBTElaRToKKwkJ Y2FzZSBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkU6CisJCQlBc3NlcnQoc3RyZWFtX2Zk ICE9IE5VTEwpOwogCi0JLyogd3JpdGUgdGhlIGNoYW5nZSB0byB0aGUgY3VycmVudCBmaWxlICov Ci0Jc3RyZWFtX3dyaXRlX2NoYW5nZShhY3Rpb24sIHMpOworCQkJLyogQWRkIHRoZSBuZXcgc3Vi eGFjdCB0byB0aGUgYXJyYXkgKHVubGVzcyBhbHJlYWR5IHRoZXJlKS4gKi8KKwkJCXN1YnhhY3Rf aW5mb19hZGQoY3VycmVudF94aWQpOworCisJCQkvKiBXcml0ZSB0aGUgY2hhbmdlIHRvIHRoZSBj dXJyZW50IGZpbGUgKi8KKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9uLAorCQkJCQkJCQlh cHBseV9hY3Rpb24gPT0gVFJBTlNfTEVBREVSX1NFUklBTElaRSA/CisJCQkJCQkJCXMgOiAmb3Jp Z2luYWxfbXNnKTsKKwkJCXJldHVybiB0cnVlOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRf VE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2luZm8pOwogCi0JcmV0dXJuIHRydWU7CisJCQlwYXJh bGxlbF9hcHBseV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisJCQlwYXJhbGxl bF9zdHJlYW1fbmNoYW5nZXMgKz0gMTsKKworCQkJLyoKKwkJCSAqIFhYWCBUaGUgcHVibGlzaGVy IHNpZGUgZG9lc24ndCBhbHdheXMgc2VuZCByZWxhdGlvbi90eXBlIHVwZGF0ZQorCQkJICogbWVz c2FnZXMgYWZ0ZXIgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiwgc28gYWxzbyB1cGRhdGUgdGhl CisJCQkgKiByZWxhdGlvbi90eXBlIGluIGxlYWRlciBhcHBseSB3b3JrZXIuIFNlZSBmdW5jdGlv bgorCQkJICogY2xlYW51cF9yZWxfc3luY19jYWNoZS4KKwkJCSAqLworCQkJcmV0dXJuIChhY3Rp b24gIT0gTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OICYmCisJCQkJCWFjdGlvbiAhPSBMT0dJQ0FM X1JFUF9NU0dfVFlQRSk7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKwkJCS8qIERl ZmluZSBhIHNhdmVwb2ludCBmb3IgYSBzdWJ4YWN0IGlmIG5lZWRlZC4gKi8KKwkJCXBhcmFsbGVs X2FwcGx5X3N0YXJ0X3N1YnRyYW5zKGN1cnJlbnRfeGlkLCBzdHJlYW1feGlkKTsKKwkJCXJldHVy biBmYWxzZTsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCXJldHVybiBmYWxz ZTsJCS8qIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZyAqLworCX0KIH0KIAogLyoKQEAgLTkyMyw4 ICsxMDgyLDExIEBAIGFwcGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKExvZ2ljYWxSZXBQcmVw YXJlZFR4bkRhdGEgKnByZXBhcmVfZGF0YSkKIAkgKiBCZWdpblRyYW5zYWN0aW9uQmxvY2sgaXMg bmVjZXNzYXJ5IHRvIGJhbGFuY2UgdGhlIEVuZFRyYW5zYWN0aW9uQmxvY2sKIAkgKiBjYWxsZWQg d2l0aGluIHRoZSBQcmVwYXJlVHJhbnNhY3Rpb25CbG9jayBiZWxvdy4KIAkgKi8KLQlCZWdpblRy YW5zYWN0aW9uQmxvY2soKTsKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsgLyogQ29tcGxl dGVzIHRoZSBwcmVjZWRpbmcgQmVnaW4gY29tbWFuZC4gKi8KKwlpZiAoIUlzVHJhbnNhY3Rpb25C bG9jaygpKQorCXsKKwkJQmVnaW5UcmFuc2FjdGlvbkJsb2NrKCk7CisJCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOyAvKiBDb21wbGV0ZXMgdGhlIHByZWNlZGluZyBCZWdpbiBjb21tYW5kLiAq LworCX0KIAogCS8qCiAJICogVXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBz dHJlYW1pbmcgZnJvbSBjb3JyZWN0IHBvc2l0aW9uCkBAIC05OTMsNiArMTE1NSwxMiBAQCBhcHBs eV9oYW5kbGVfcHJlcGFyZShTdHJpbmdJbmZvIHMpCiAKIC8qCiAgKiBIYW5kbGUgYSBDT01NSVQg UFJFUEFSRUQgb2YgYSBwcmV2aW91c2x5IFBSRVBBUkVEIHRyYW5zYWN0aW9uLgorICoKKyAqIE5v dGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgaGVyZSBpZiB0aGUgdHJhbnNhY3Rpb24gd2Fz IHByZXBhcmVkIGluIGEKKyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gSW4gdGhhdCBjYXNlLCB3 ZSBoYXZlIGFscmVhZHkgd2FpdGVkIGZvciB0aGUgcHJlcGFyZQorICogdG8gZmluaXNoIGluIGFw cGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZSgpIHdoaWNoIHdpbGwgZW5zdXJlIGFsbCB0aGUKKyAq IG9wZXJhdGlvbnMgaW4gdGhhdCB0cmFuc2FjdGlvbiBoYXZlIGhhcHBlbmVkIGluIHRoZSBzdWJz Y3JpYmVyLCBzbyBubworICogY29uY3VycmVudCB0cmFuc2FjdGlvbiBjYW4gY2F1c2UgZGVhZGxv Y2sgb3IgdHJhbnNhY3Rpb24gZGVwZW5kZW5jeSBpc3N1ZXMuCiAgKi8KIHN0YXRpYyB2b2lkCiBh cHBseV9oYW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKQEAgLTEwMzYsNiArMTIw NCwxMiBAQCBhcHBseV9oYW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIAogLyoK ICAqIEhhbmRsZSBhIFJPTExCQUNLIFBSRVBBUkVEIG9mIGEgcHJldmlvdXNseSBQUkVQQVJFRCBU UkFOU0FDVElPTi4KKyAqCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGhlcmUg aWYgdGhlIHRyYW5zYWN0aW9uIHdhcyBwcmVwYXJlZCBpbiBhCisgKiBwYXJhbGxlbCBhcHBseSB3 b3JrZXIuIEluIHRoYXQgY2FzZSwgd2UgaGF2ZSBhbHJlYWR5IHdhaXRlZCBmb3IgdGhlIHByZXBh cmUKKyAqIHRvIGZpbmlzaCBpbiBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoKSB3aGljaCB3 aWxsIGVuc3VyZSBhbGwgdGhlCisgKiBvcGVyYXRpb25zIGluIHRoYXQgdHJhbnNhY3Rpb24gaGF2 ZSBoYXBwZW5lZCBpbiB0aGUgc3Vic2NyaWJlciwgc28gbm8KKyAqIGNvbmN1cnJlbnQgdHJhbnNh Y3Rpb24gY2FuIGNhdXNlIGRlYWRsb2NrIG9yIHRyYW5zYWN0aW9uIGRlcGVuZGVuY3kgaXNzdWVz LgogICovCiBzdGF0aWMgdm9pZAogYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmlu Z0luZm8gcykKQEAgLTEwODksMTUgKzEyNjMsMTQgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3By ZXBhcmVkKFN0cmluZ0luZm8gcykKIAogLyoKICAqIEhhbmRsZSBTVFJFQU0gUFJFUEFSRS4KLSAq Ci0gKiBMb2dpYyBpcyBpbiB0d28gcGFydHM6Ci0gKiAxLiBSZXBsYXkgYWxsIHRoZSBzcG9vbGVk IG9wZXJhdGlvbnMKLSAqIDIuIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkCiAgKi8K IHN0YXRpYyB2b2lkCiBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQog ewogCUxvZ2ljYWxSZXBQcmVwYXJlZFR4bkRhdGEgcHJlcGFyZV9kYXRhOworCVBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKKwlT dHJpbmdJbmZvRGF0YQlvcmlnaW5hbF9tc2cgPSAqczsKIAogCWlmIChpbl9zdHJlYW1lZF90cmFu c2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTExMTMsMjQgKzEyODYsOTggQEAgYXBwbHlf aGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlYWRfc3Ry ZWFtX3ByZXBhcmUocywgJnByZXBhcmVfZGF0YSk7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRf eGFjdChwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCi0JZWxv ZyhERUJVRzEsICJyZWNlaXZlZCBwcmVwYXJlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIs IHByZXBhcmVfZGF0YS54aWQpOworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBs eV9hY3Rpb24ocHJlcGFyZV9kYXRhLnhpZCwgJndpbmZvKTsKIAotCS8qIFJlcGxheSBhbGwgdGhl IHNwb29sZWQgb3BlcmF0aW9ucy4gKi8KLQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHByZXBhcmVf ZGF0YS54aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJlX2xzbik7CisJc3dpdGNoIChhcHBseV9hY3Rp b24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CiAKLQkvKiBNYXJrIHRoZSB0 cmFuc2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8KLQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5h bCgmcHJlcGFyZV9kYXRhKTsKKwkJCS8qCisJCQkgKiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4g c2VyaWFsaXplZCB0byBmaWxlLCBzbyByZXBsYXkgYWxsIHRoZQorCQkJICogc3Bvb2xlZCBvcGVy YXRpb25zLgorCQkJICovCisJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKE15TG9naWNhbFJlcFdv cmtlci0+c3RyZWFtX2ZpbGVzZXQsCisJCQkJCQkJCSAgIHByZXBhcmVfZGF0YS54aWQsIHByZXBh cmVfZGF0YS5wcmVwYXJlX2xzbik7CiAKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJ CS8qIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkLiAqLworCQkJYXBwbHlfaGFuZGxl X3ByZXBhcmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CiAKLQlwZ3N0YXRfcmVwb3J0X3N0YXQo ZmFsc2UpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQlzdG9yZV9mbHVzaF9w b3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJCQlzdG9yZV9mbHVzaF9wb3NpdGlvbihw cmVwYXJlX2RhdGEuZW5kX2xzbik7CiAKLQlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsK KwkJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJCQkvKiBVbmxpbmsgdGhlIGZp bGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCisJCQlzdHJl YW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBwcmVwYXJlX2RhdGEu eGlkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6 CisJCWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZv KTsKKworCQkJLyoKKwkJCSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQg cGFyYWxsZWwgYXBwbHkgd29ya2VyCisJCQkgKiBjYW4gY29udGludWUgdG8gcmVjZWl2ZSBhbmQg YXBwbHkgY2hhbmdlcy4KKwkJCSAqLworCQkJcGFyYWxsZWxfYXBwbHlfdW5sb2NrKHdpbmZvLT5z aGFyZWQtPnN0cmVhbV9sb2NrX2lkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKworCQkJLyogU2Vu ZCBTVFJFQU0gUFJFUEFSRSBtZXNzYWdlIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICov CisJCQlpZiAoYXBwbHlfYWN0aW9uID09IFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMKQor CQkJCXBhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKTsKKwkJ CWVsc2UKKwkJCXsKKwkJCQlzdHJlYW1fd3JpdGVfbWVzc2FnZShwcmVwYXJlX2RhdGEueGlkLAor CQkJCQkJCQkJIExPR0lDQUxfUkVQX01TR19TVFJFQU1fUFJFUEFSRSwKKwkJCQkJCQkJCSAmb3Jp Z2luYWxfbXNnLCBmYWxzZSk7CisJCQkJcGFyYWxsZWxfYXBwbHlfc2V0X2ZpbGVzZXQod2luZm8t PnNoYXJlZCwgdHJ1ZSk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBBZnRlciBzZW5kaW5nIHRoZSBk YXRhIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgb3IKKwkJCSAqIHNlcmlhbGl6aW5nIGRh dGEgdG8gZmlsZSwgd2FpdCBmb3IgdGhhdCB3b3JrZXIgdG8gZmluaXNoLiBUaGlzCisJCQkgKiBp cyBuZWNlc3NhcnkgdG8gbWFpbnRhaW4gY29tbWl0IG9yZGVyIHdoaWNoIGF2b2lkcyBmYWlsdXJl cyBkdWUKKwkJCSAqIHRvIHRyYW5zYWN0aW9uIGRlcGVuZGVuY2llcyBhbmQgZGVhZGxvY2tzLgor CQkJICovCisJCQlwYXJhbGxlbF9hcHBseV93YWl0X2Zvcl94YWN0X2ZpbmlzaCh3aW5mby0+c2hh cmVkKTsKKwkJCXBhcmFsbGVsX2FwcGx5X2ZyZWVfd29ya2VyKHdpbmZvLCBwcmVwYXJlX2RhdGEu eGlkLCB0cnVlKTsKKworCQkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKwkJCXN0 b3JlX2ZsdXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisJCQkvKiBVbmxvY2sgdGhlIHNoYXJlZCBvYmpl Y3QgbG9jayBhdCB0cmFuc2FjdGlvbiBlbmQuICovCisJCQlwYXJhbGxlbF9hcHBseV91bmxvY2so TXlQYXJhbGxlbFNoYXJlZC0+c3RyZWFtX2xvY2tfaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJ CWlmIChzdHJlYW1fZmQpCisJCQkJQnVmRmlsZUNsb3NlKHN0cmVhbV9mZCk7CisKKwkJCWJlZ2lu X3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCQkJLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJl cGFyZWQuICovCisJCQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRh KTsKKworCQkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCQkJQ29tbWl0VHJhbnNhY3Rpb25D b21tYW5kKCk7CisKKwkJCWxpc3RfZnJlZShzdWJ4YWN0bGlzdCk7CisJCQlzdWJ4YWN0bGlzdCA9 IE5JTDsKIAotCS8qIHVubGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5k IHN1YnhhY3QgaW5mby4gKi8KLQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3Jr ZXItPnN1YmlkLCBwcmVwYXJlX2RhdGEueGlkKTsKKwkJCXBhcmFsbGVsX2FwcGx5X3NldF94YWN0 X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKTsKKwkJCXBh cmFsbGVsX2FwcGx5X3VubG9jayhNeVBhcmFsbGVsU2hhcmVkLT50cmFuc2FjdGlvbl9sb2NrX2lk LCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQllbG9nKERFQlVHMSwgImZpbmlzaGVkIHByb2Nlc3Np bmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kIik7CisJCQlicmVhazsKKworCQlkZWZh dWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXBnc3RhdF9yZXBvcnRf c3RhdChmYWxzZSk7CiAKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3lu Y2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190YWJsZXMocHJlcGFy ZV9kYXRhLmVuZF9sc24pOwpAQCAtMTE2OCwyNyArMTQxNSw3NyBAQCBhcHBseV9oYW5kbGVfb3Jp Z2luKFN0cmluZ0luZm8gcykKIH0KIAogLyoKKyAqIEluaXRpYWxpemUgZmlsZXNldCBpZiBub3Qg eWV0IGFuZCBvcGVuIHRoZSBmaWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBj YWxsZWQgd2hlbiBwcm9jZXNzaW5nIFNUUkVBTV9TVEFSVCwgYnV0IGNhbiBhbHNvCisgKiBiZSBj YWxsZWQgaWYgeW91IG5lZWQgdG8gc2VyaWFsaXplIGNoYW5nZXMgdGhhdCBub3QgaW4gYSBzdHJl YW1pbmcgYmxvY2sgdG8KKyAqIGRpc2suCisgKi8KK3ZvaWQKK3NlcmlhbGl6ZV9zdHJlYW1fc3Rh cnQoVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgZmlyc3Rfc2VnbWVudCkKK3sKKwkvKgorCSAqIFN0 YXJ0IGEgdHJhbnNhY3Rpb24gb24gc3RyZWFtIHN0YXJ0LCB0aGlzIHRyYW5zYWN0aW9uIHdpbGwg YmUKKwkgKiBjb21taXR0ZWQgb24gdGhlIHN0cmVhbSBzdG9wIHVubGVzcyBpdCBpcyBhIHRhYmxl c3luYyB3b3JrZXIgaW4KKwkgKiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgY29tbWl0dGVkIGFmdGVy IHByb2Nlc3NpbmcgYWxsIHRoZQorCSAqIG1lc3NhZ2VzLiBXZSBuZWVkIHRoZSB0cmFuc2FjdGlv biBmb3IgaGFuZGxpbmcgdGhlIGJ1ZmZpbGUsCisJICogdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhl IHN0cmVhbWluZyBkYXRhIGFuZCBzdWJ4YWN0IGluZm8uCisJICovCisJYmVnaW5fcmVwbGljYXRp b25fc3RlcCgpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSB3b3JrZXIncyBzdHJlYW1fZmls ZXNldCBpZiB3ZSBoYXZlbid0IHlldC4gVGhpcworCSAqIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGVu dGlyZSBkdXJhdGlvbiBvZiB0aGUgd29ya2VyIHNvIGNyZWF0ZSBpdAorCSAqIGluIGEgcGVybWFu ZW50IGNvbnRleHQuIFdlIGNyZWF0ZSB0aGlzIG9uIHRoZSB2ZXJ5IGZpcnN0CisJICogc3RyZWFt aW5nIG1lc3NhZ2UgZnJvbSBhbnkgdHJhbnNhY3Rpb24gYW5kIHRoZW4gdXNlIGl0IGZvciB0aGlz CisJICogYW5kIG90aGVyIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMuIE5vdywgd2UgY291bGQgY3Jl YXRlIGEKKwkgKiBmaWxlc2V0IGF0IHRoZSBzdGFydCBvZiB0aGUgd29ya2VyIGFzIHdlbGwgYnV0 IHRoZW4gd2Ugd29uJ3QgYmUKKwkgKiBzdXJlIHRoYXQgaXQgd2lsbCBldmVyIGJlIHVzZWQuCisJ ICovCisJaWYgKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPT0gTlVMTCkKKwl7 CisJCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhBcHBseUNvbnRleHQpOworCisJCU15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVz ZXQgPSBwYWxsb2Moc2l6ZW9mKEZpbGVTZXQpKTsKKwkJRmlsZVNldEluaXQoTXlMb2dpY2FsUmVw V29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0 eCk7CisJfQorCisJLyogT3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbi4g Ki8KKwlzdHJlYW1fb3Blbl9maWxlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCwgZmly c3Rfc2VnbWVudCk7CisKKwkvKiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qgc2VnbWVudCwgb3Bl biBleGlzdGluZyBzdWJ4YWN0IGZpbGUuICovCisJaWYgKCFmaXJzdF9zZWdtZW50KQorCQlzdWJ4 YWN0X2luZm9fcmVhZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCisJZW5kX3Jl cGxpY2F0aW9uX3N0ZXAoKTsKK30KKworLyoKICAqIEhhbmRsZSBTVFJFQU0gU1RBUlQgbWVzc2Fn ZS4KKyAqCisgKiBYWFggV2UgY2FuIGF2b2lkIHNlbmRpbmcgcGFpcnMgb2YgdGhlIFNUQVJUL1NU T1AgbWVzc2FnZXMgdG8gdGhlIHBhcmFsbGVsCisgKiB3b3JrZXIgYmVjYXVzZSB1bmxpa2UgYXBw bHkgd29ya2VyIGl0IHdpbGwgcHJvY2VzcyBvbmx5IG9uZSB0cmFuc2FjdGlvbiBhdCBhCisgKiB0 aW1lLiBIb3dldmVyLCBpdCBpcyBub3QgY2xlYXIgd2hldGhlciBhbnkgb3B0aW1pemF0aW9uIGlz IHdvcnRod2hpbGUKKyAqIGJlY2F1c2UgdGhlc2UgbWVzc2FnZXMgYXJlIHNlbnQgb25seSB3aGVu IHRoZSBsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtCisgKiB0aHJlc2hvbGQgaXMgZXhjZWVkZWQu CiAgKi8KIHN0YXRpYyB2b2lkCiBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8g cykKIHsKIAlib29sCQlmaXJzdF9zZWdtZW50OworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3 aW5mbzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBv cmlnaW5hbF9tc2cgPSAqczsKIAogCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJl cG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCiAJ CQkJIGVycm1zZ19pbnRlcm5hbCgiZHVwbGljYXRlIFNUUkVBTSBTVEFSVCBtZXNzYWdlIikpKTsK IAotCS8qCi0JICogU3RhcnQgYSB0cmFuc2FjdGlvbiBvbiBzdHJlYW0gc3RhcnQsIHRoaXMgdHJh bnNhY3Rpb24gd2lsbCBiZSBjb21taXR0ZWQKLQkgKiBvbiB0aGUgc3RyZWFtIHN0b3AgdW5sZXNz IGl0IGlzIGEgdGFibGVzeW5jIHdvcmtlciBpbiB3aGljaCBjYXNlIGl0Ci0JICogd2lsbCBiZSBj b21taXR0ZWQgYWZ0ZXIgcHJvY2Vzc2luZyBhbGwgdGhlIG1lc3NhZ2VzLiBXZSBuZWVkIHRoZQot CSAqIHRyYW5zYWN0aW9uIGZvciBoYW5kbGluZyB0aGUgYnVmZmlsZSwgdXNlZCBmb3Igc2VyaWFs aXppbmcgdGhlCi0JICogc3RyZWFtaW5nIGRhdGEgYW5kIHN1YnhhY3QgaW5mby4KLQkgKi8KLQli ZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7Ci0KIAkvKiBub3RpZnkgaGFuZGxlIG1ldGhvZHMgd2Un cmUgcHJvY2Vzc2luZyBhIHJlbW90ZSB0cmFuc2FjdGlvbiAqLwogCWluX3N0cmVhbWVkX3RyYW5z YWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIwMyw1MyArMTUwMCw4NyBAQCBhcHBseV9oYW5kbGVfc3Ry ZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHN0 cmVhbV94aWQsIEludmFsaWRYTG9nUmVjUHRyKTsKIAogCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUg d29ya2VyJ3Mgc3RyZWFtX2ZpbGVzZXQgaWYgd2UgaGF2ZW4ndCB5ZXQuIFRoaXMgd2lsbCBiZQot CSAqIHVzZWQgZm9yIHRoZSBlbnRpcmUgZHVyYXRpb24gb2YgdGhlIHdvcmtlciBzbyBjcmVhdGUg aXQgaW4gYSBwZXJtYW5lbnQKLQkgKiBjb250ZXh0LiBXZSBjcmVhdGUgdGhpcyBvbiB0aGUgdmVy eSBmaXJzdCBzdHJlYW1pbmcgbWVzc2FnZSBmcm9tIGFueQotCSAqIHRyYW5zYWN0aW9uIGFuZCB0 aGVuIHVzZSBpdCBmb3IgdGhpcyBhbmQgb3RoZXIgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4KLQkg KiBOb3csIHdlIGNvdWxkIGNyZWF0ZSBhIGZpbGVzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3b3Jr ZXIgYXMgd2VsbCBidXQKLQkgKiB0aGVuIHdlIHdvbid0IGJlIHN1cmUgdGhhdCBpdCB3aWxsIGV2 ZXIgYmUgdXNlZC4KKwkgKiBGb3IgdGhlIGZpcnN0IHN0cmVhbSBzdGFydCwgY2hlY2sgaWYgdGhl cmUgaXMgYW55IGZyZWUgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIgd2UgY2FuIHVzZSB0byBw cm9jZXNzIHRoaXMgdHJhbnNhY3Rpb24sIG90aGVyd2lzZSB0cnkgdG8gc3RhcnQgYQorCSAqIG5l dyBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCiAJICovCi0JaWYgKE15TG9naWNhbFJlcFdvcmtlci0+ c3RyZWFtX2ZpbGVzZXQgPT0gTlVMTCkKKwlpZiAoZmlyc3Rfc2VnbWVudCkKKwkJcGFyYWxsZWxf YXBwbHlfc3RhcnRfd29ya2VyKHN0cmVhbV94aWQpOworCisJYXBwbHlfYWN0aW9uID0gZ2V0X3Ry YW5zYWN0aW9uX2FwcGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOworCisJc3dpdGNoIChh cHBseV9hY3Rpb24pCiAJewotCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwkJY2FzZSBUUkFOU19M RUFERVJfU0VSSUFMSVpFOgorCQkJc2VyaWFsaXplX3N0cmVhbV9zdGFydChzdHJlYW1feGlkLCBm aXJzdF9zZWdtZW50KTsKKwkJCWJyZWFrOwogCi0JCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhBcHBseUNvbnRleHQpOworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTEla RToKIAotCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVv ZihGaWxlU2V0KSk7Ci0JCUZpbGVTZXRJbml0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2Zp bGVzZXQpOworCQkJLyoKKwkJCSAqIFRoZSBmaWxlIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCB3 aGVuIGVudGVyaW5nCisJCQkgKiBQQVJUSUFMX1NFUklBTElaRSBtb2RlIHNvIG5vIG5lZWQgdG8g Y3JlYXRlIGl0IGFnYWluLgorCQkJICovCisJCQlzZXJpYWxpemVfc3RyZWFtX3N0YXJ0KHN0cmVh bV94aWQsIGZhbHNlKTsKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoTE9HSUNBTF9SRVBfTVNHX1NU UkVBTV9TVEFSVCwgJm9yaWdpbmFsX21zZyk7CiAKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN0eCk7Ci0JfQorCQkJYnJlYWs7CiAKLQkvKiBvcGVuIHRoZSBzcG9vbCBmaWxlIGZvciB0aGlz IHRyYW5zYWN0aW9uICovCi0Jc3RyZWFtX29wZW5fZmlsZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1 YmlkLCBzdHJlYW1feGlkLCBmaXJzdF9zZWdtZW50KTsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VO RF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CiAKLQkvKiBpZiB0aGlzIGlzIG5vdCB0 aGUgZmlyc3Qgc2VnbWVudCwgb3BlbiBleGlzdGluZyBzdWJ4YWN0IGZpbGUgKi8KLQlpZiAoIWZp cnN0X3NlZ21lbnQpCi0JCXN1YnhhY3RfaW5mb19yZWFkKE15TG9naWNhbFJlcFdvcmtlci0+c3Vi aWQsIHN0cmVhbV94aWQpOworCQkJLyoKKwkJCSAqIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIG1l c3NhZ2Ugd2FpdGluZyB0byBiZSBwcm9jZXNzZWQgYnkKKwkJCSAqIHBhcmFsbGVsIGFwcGx5IHdv cmtlci4KKwkJCSAqLworCQkJcGdfYXRvbWljX2FkZF9mZXRjaF91MzIoJih3aW5mby0+c2hhcmVk LT5sZWZ0X21lc3NhZ2UpLCAxKTsKIAotCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVO TklORywgTlVMTCk7CisJCQlwYXJhbGxlbF9hcHBseV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwg cy0+ZGF0YSk7CiAKLQllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCQkJcGFyYWxsZWxfc3RyZWFt X25jaGFuZ2VzID0gMDsKKworCQkJLyogQ2FjaGUgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBm b3IgdGhpcyB0cmFuc2FjdGlvbi4gKi8KKwkJCXN0cmVhbV9hcHBseV93b3JrZXIgPSB3aW5mbzsK KwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisJCQlpZiAoZmlyc3Rf c2VnbWVudCkKKwkJCXsKKwkJCQkvKiBIb2xkIHRoZSBsb2NrIHVudGlsIHRoZSBlbmQgb2YgdGhl IHRyYW5zYWN0aW9uLiAqLworCQkJCXBhcmFsbGVsX2FwcGx5X2xvY2soTXlQYXJhbGxlbFNoYXJl ZC0+dHJhbnNhY3Rpb25fbG9ja19pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlwYXJhbGxlbF9h cHBseV9zZXRfeGFjdF9zdGF0ZShNeVBhcmFsbGVsU2hhcmVkLCBQQVJBTExFTF9UUkFOU19TVEFS VEVEKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2Nr IHNvIHRoYXQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIKKwkJCSAqIGNhbiBjb250aW51ZSB0byBz ZW5kIGNoYW5nZXMuCisJCQkgKi8KKwkJCXBhcmFsbGVsX2FwcGx5X3VubG9jayhNeVBhcmFsbGVs U2hhcmVkLT5zdHJlYW1fbG9ja19pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJYnJlYWs7CisK KwkJZGVmYXVsdDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlwZ3N0YXRf cmVwb3J0X2FjdGl2aXR5KFNUQVRFX1JVTk5JTkcsIE5VTEwpOwogfQogCiAvKgotICogSGFuZGxl IFNUUkVBTSBTVE9QIG1lc3NhZ2UuCisgKiBVcGRhdGUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHN1 YnhhY3RzIGFuZCBjbG9zZSB0aGUgZmlsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBi ZSBjYWxsZWQgd2hlbiB0aGUgc2VyaWFsaXplX3N0cmVhbV9zdGFydCBmdW5jdGlvbiBoYXMKKyAq IGJlZW4gY2FsbGVkLgogICovCi1zdGF0aWMgdm9pZAotYXBwbHlfaGFuZGxlX3N0cmVhbV9zdG9w KFN0cmluZ0luZm8gcykKK3ZvaWQKK3NlcmlhbGl6ZV9zdHJlYW1fc3RvcChUcmFuc2FjdGlvbklk IHhpZCkKIHsKLQlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQotCQllcmVwb3J0KEVSUk9S LAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKLQkJCQkgZXJybXNn X2ludGVybmFsKCJTVFJFQU0gU1RPUCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUQVJUIikpKTsK LQogCS8qCi0JICogQ2xvc2UgdGhlIGZpbGUgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMsIGFuZCBz ZXJpYWxpemUgaW5mb3JtYXRpb24gYWJvdXQKLQkgKiBzdWJ4YWN0cyBmb3IgdGhlIHRvcGxldmVs IHRyYW5zYWN0aW9uLgorCSAqIENsb3NlIHRoZSBmaWxlIHdpdGggc2VyaWFsaXplZCBjaGFuZ2Vz LCBhbmQgc2VyaWFsaXplCisJICogaW5mb3JtYXRpb24gYWJvdXQgc3VieGFjdHMgZm9yIHRoZSB0 b3BsZXZlbCB0cmFuc2FjdGlvbi4KIAkgKi8KLQlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dpY2Fs UmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCk7CisJc3VieGFjdF9pbmZvX3dyaXRlKE15TG9n aWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CiAJc3RyZWFtX2Nsb3NlX2ZpbGUoKTsKIAogCS8q IFdlIG11c3QgYmUgaW4gYSB2YWxpZCB0cmFuc2FjdGlvbiBzdGF0ZSAqLwpAQCAtMTI1OCw0MCAr MTU4OSw5OCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0b3AoU3RyaW5nSW5mbyBzKQogCS8qIENv bW1pdCB0aGUgcGVyLXN0cmVhbSB0cmFuc2FjdGlvbiAqLwogCUNvbW1pdFRyYW5zYWN0aW9uQ29t bWFuZCgpOwogCi0JaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxzZTsKLQogCS8qIFJlc2V0 IHBlci1zdHJlYW0gY29udGV4dCAqLwogCU1lbW9yeUNvbnRleHRSZXNldChMb2dpY2FsU3RyZWFt aW5nQ29udGV4dCk7CiAKIAlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwp OwotCXJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOwogfQogCiAvKgotICogSGFuZGxl IFNUUkVBTSBhYm9ydCBtZXNzYWdlLgorICogSGFuZGxlIFNUUkVBTSBTVE9QIG1lc3NhZ2UuCiAg Ki8KIHN0YXRpYyB2b2lkCi1hcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykK K2FwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZvIHMpCiB7Ci0JVHJhbnNhY3Rpb25J ZCB4aWQ7Ci0JVHJhbnNhY3Rpb25JZCBzdWJ4aWQ7CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOwogCi0JaWYgKGluX3N0cmVh bWVkX3RyYW5zYWN0aW9uKQorCWlmICghaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBv cnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAotCQkJ CSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNU T1AiKSkpOworCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBTVE9QIG1lc3NhZ2Ugd2l0aG91 dCBTVFJFQU0gU1RBUlQiKSkpOworCisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2Fw cGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOworCisJc3dpdGNoIChhcHBseV9hY3Rpb24p CisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CisJCQlzZXJpYWxpemVfc3RyZWFt X3N0b3Aoc3RyZWFtX3hpZCk7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJU SUFMX1NFUklBTElaRToKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoTE9HSUNBTF9SRVBfTVNHX1NU UkVBTV9TVE9QLCBzKTsKKwkJCXNlcmlhbGl6ZV9zdHJlYW1fc3RvcChzdHJlYW1feGlkKTsKKwkJ CXN0cmVhbV9hcHBseV93b3JrZXIgPSBOVUxMOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19M RUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CiAKLQlsb2dpY2FscmVw X3JlYWRfc3RyZWFtX2Fib3J0KHMsICZ4aWQsICZzdWJ4aWQpOworCQkJLyoKKwkJCSAqIExvY2sg YmVmb3JlIHNlbmRpbmcgdGhlIFNUUkVBTV9TVE9QIG1lc3NhZ2Ugc28gdGhhdCB0aGUgbGVhZGVy CisJCQkgKiBjYW4gaG9sZCB0aGUgbG9jayBmaXJzdCBhbmQgdGhlIHBhcmFsbGVsIGFwcGx5IHdv cmtlciB3aWxsIHdhaXQKKwkJCSAqIGZvciBsZWFkZXIgdG8gcmVsZWFzZSB0aGUgbG9jay4KKwkJ CSAqLworCQkJcGFyYWxsZWxfYXBwbHlfbG9jayh3aW5mby0+c2hhcmVkLT5zdHJlYW1fbG9ja19p ZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwkJCXBhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YSh3 aW5mbywgcy0+bGVuLCBzLT5kYXRhKTsKKworCQkJZWxvZyhERUJVRzEsICJhcHBsaWVkICV1IGNo YW5nZXMgaW4gdGhlIHN0cmVhbWluZyBjaHVuayIsCisJCQkJIHBhcmFsbGVsX3N0cmVhbV9uY2hh bmdlcyk7CisKKwkJCXN0cmVhbV9hcHBseV93b3JrZXIgPSBOVUxMOworCisJCQlwZ3N0YXRfcmVw b3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFO U19QQVJBTExFTF9BUFBMWToKKworCQkJLyoKKwkJCSAqIFRoZSBsZWFkZXIgbWF5IGhhdmUgc2Vu dCBtdWx0aXBsZSBzdHJlYW1pbmcgYmxvY2tzIGluIHRoZSBxdWV1ZQorCQkJICogV2hlbiB0aGUg Y2hpbGQgaXMgcHJvY2Vzc2luZyBhIHN0cmVhbWluZyBibG9jay4gU28gb25seSB0cnkgdG8KKwkJ CSAqIGxvY2sgaWYgdGhlcmUgaXMgbm8gbWVzc2FnZSBsZWZ0IGluIHRoZSBxdWV1ZS4KKwkJCSAq LworCQkJaWYgKHBnX2F0b21pY19zdWJfZmV0Y2hfdTMyKCYoTXlQYXJhbGxlbFNoYXJlZC0+bGVm dF9tZXNzYWdlKSwgMSkgPT0gMCkKKwkJCXsKKwkJCQlwYXJhbGxlbF9hcHBseV9sb2NrKE15UGFy YWxsZWxTaGFyZWQtPnN0cmVhbV9sb2NrX2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXBhcmFs bGVsX2FwcGx5X3VubG9jayhNeVBhcmFsbGVsU2hhcmVkLT5zdHJlYW1fbG9ja19pZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwkJCX0KKworCQkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExF SU5UUkFOU0FDVElPTiwgTlVMTCk7CisJCQlicmVhazsKIAorCQlkZWZhdWx0OgorCQkJQXNzZXJ0 KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFs c2U7CisKKwlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKK30KKworLyoKKyAqIEhh bmRsZSBTVFJFQU0gQUJPUlQgbWVzc2FnZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgc3BpbGxl ZCB0byBkaXNrLgorICovCitzdGF0aWMgdm9pZAorc2VyaWFsaXplX3N0cmVhbV9hYm9ydChUcmFu c2FjdGlvbklkIHhpZCwgVHJhbnNhY3Rpb25JZCBzdWJ4aWQpCit7CiAJLyoKIAkgKiBJZiB0aGUg dHdvIFhJRHMgYXJlIHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2ZWwgeGFj dCwgc28KIAkgKiBqdXN0IGRlbGV0ZSB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGluZm8uCiAJ ICovCiAJaWYgKHhpZCA9PSBzdWJ4aWQpCi0JewotCQlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94 YWN0KHhpZCwgSW52YWxpZFhMb2dSZWNQdHIpOwogCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxv Z2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwotCX0KIAllbHNlCiAJewogCQkvKgpAQCAtMTMx NSw4ICsxNzA0LDYgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpCiAJ CWJvb2wJCWZvdW5kID0gZmFsc2U7CiAJCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAotCQlzZXRf YXBwbHlfZXJyb3JfY29udGV4dF94YWN0KHN1YnhpZCwgSW52YWxpZFhMb2dSZWNQdHIpOwotCiAJ CXN1YmlkeCA9IC0xOwogCQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CiAJCXN1YnhhY3RfaW5m b19yZWFkKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CkBAIC0xMzQxLDcgKzE3Mjgs NiBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKIAkJCWNsZWFudXBf c3VieGFjdF9pbmZvKCk7CiAJCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogCQkJQ29tbWl0VHJh bnNhY3Rpb25Db21tYW5kKCk7Ci0JCQlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsK IAkJCXJldHVybjsKIAkJfQogCkBAIC0xMzY0LDE1ICsxNzUwLDEyOSBAQCBhcHBseV9oYW5kbGVf c3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKIAkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAkJ Q29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJfQorfQorCisvKgorICogSGFuZGxlIFNUUkVB TSBBQk9SVCBtZXNzYWdlLgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfaGFuZGxlX3N0cmVhbV9h Ym9ydChTdHJpbmdJbmZvIHMpCit7CisJVHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25J ZCBzdWJ4aWQ7CisJTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YSBhYm9ydF9kYXRhOworCVBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlv bjsKKwlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKKwlib29sCQlhYm9ydF90b3Bs ZXZlbF94YWN0OworCisJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJy bXNnX2ludGVybmFsKCJTVFJFQU0gQUJPUlQgbWVzc2FnZSB3aXRob3V0IFNUUkVBTSBTVE9QIikp KTsKKworCS8qIFdlIHJlY2VpdmUgYWJvcnQgaW5mb3JtYXRpb24gb25seSB3aGVuIHdlIGNhbiBh cHBseSBpbiBwYXJhbGxlbC4gKi8KKwlsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KHMsICZh Ym9ydF9kYXRhLAorCQkJCQkJCQkgTXlMb2dpY2FsUmVwV29ya2VyLT5wYXJhbGxlbF9hcHBseSk7 CisKKwl4aWQgPSBhYm9ydF9kYXRhLnhpZDsKKwlzdWJ4aWQgPSBhYm9ydF9kYXRhLnN1YnhpZDsK KwlhYm9ydF90b3BsZXZlbF94YWN0ID0gKHhpZCA9PSBzdWJ4aWQpOworCisJc2V0X2FwcGx5X2Vy cm9yX2NvbnRleHRfeGFjdChzdWJ4aWQsIGFib3J0X2RhdGEuYWJvcnRfbHNuKTsKKworCWFwcGx5 X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oeGlkLCAmd2luZm8pOworCisJ c3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6 CisKKwkJCS8qCisJCQkgKiBXZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHRo ZSB0cmFuc2FjdGlvbiBoYXMgYmVlbgorCQkJICogc2VyaWFsaXplZCB0byBmaWxlLgorCQkJICov CisJCQlzZXJpYWxpemVfc3RyZWFtX2Fib3J0KHhpZCwgc3VieGlkKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCWNhc2UgVFJBTlNfTEVBREVS X1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJLyogU2VuZCBTVFJF QU0gQUJPUlQgbWVzc2FnZSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiAqLworCQkJaWYg KGFwcGx5X2FjdGlvbiA9PSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCkKKwkJCQlwYXJh bGxlbF9hcHBseV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisJCQllbHNlCisJ CQl7CisJCQkJaWYgKGFib3J0X3RvcGxldmVsX3hhY3QpCisJCQkJCXN0cmVhbV9jbGVhbnVwX2Zp bGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CisKKwkJCQkvKgorCQkJCSAqIFBh cmFsbGVsIGFwcGx5IHdvcmtlciBtaWdodCBoYXZlIGFwcGxpZWQgc29tZSBjaGFuZ2VzLCBzbwor CQkJCSAqIHdyaXRlIHRoZSBTVFJFQU1fQUJPUlQgbWVzc2FnZSBzbyB0aGF0IHRoZSBwYXJhbGxl bCBhcHBseQorCQkJCSAqIHdvcmtlciBjYW4gcm9sbGJhY2sgdGhlIHN1YnRyYW5zYWN0aW9uIGlm IG5lZWRlZC4KKwkJCQkgKgorCQkJCSAqIFRoZSBmaWxlIHdhcyBkZWxldGVkIGlmIGFib3J0ZWQg dGhlIHRvcGxldmVsIHRyYW5zYWN0aW9uLCBzbworCQkJCSAqIGNyZWF0ZSBpdCBhZ2FpbiBpbiB0 aGlzIGNhc2UuCisJCQkJICovCisJCQkJc3RyZWFtX3dyaXRlX21lc3NhZ2UoeGlkLCBMT0dJQ0FM X1JFUF9NU0dfU1RSRUFNX0FCT1JULAorCQkJCQkJCQkJICZvcmlnaW5hbF9tc2csIGFib3J0X3Rv cGxldmVsX3hhY3QpOworCQkJfQorCisJCQlpZiAoYWJvcnRfdG9wbGV2ZWxfeGFjdCkKKwkJCXsK KwkJCQlpZiAoYXBwbHlfYWN0aW9uID09IFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRSkK KwkJCQkJcGFyYWxsZWxfYXBwbHlfc2V0X2ZpbGVzZXQod2luZm8tPnNoYXJlZCwgdHJ1ZSk7CisK KwkJCQkvKgorCQkJCSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIGF0IHRyYW5zYWN0 aW9uIGVuZC4KKwkJCQkgKi8KKwkJCQlwYXJhbGxlbF9hcHBseV91bmxvY2sod2luZm8tPnNoYXJl ZC0+c3RyZWFtX2xvY2tfaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJCQkJcGFyYWxsZWxf YXBwbHlfZnJlZV93b3JrZXIod2luZm8sIHhpZCwgdHJ1ZSk7CisJCQl9CisJCQllbHNlCisJCQl7 CisJCQkJLyoKKwkJCQkgKiBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiBtZXNzYWdlIHdhaXRpbmcg dG8gYmUgcHJvY2Vzc2VkIGJ5CisJCQkJICogcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCQkJCSAq LworCQkJCXBnX2F0b21pY19hZGRfZmV0Y2hfdTMyKCYod2luZm8tPnNoYXJlZC0+bGVmdF9tZXNz YWdlKSwgMSk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZ OgorCQkJcGFyYWxsZWxfYXBwbHlfc3RyZWFtX2Fib3J0KCZhYm9ydF9kYXRhKTsKKworCQkJLyoK KwkJCSAqIFRoZSBsZWFkZXIgbWF5IGhhdmUgc2VudCBtdWx0aXBsZSBzdHJlYW1pbmcgYmxvY2tz IGluIHRoZSBxdWV1ZQorCQkJICogV2hlbiB0aGUgY2hpbGQgaXMgcHJvY2Vzc2luZyBhIHN0cmVh bWluZyBibG9jay4gU28gb25seSB0cnkgdG8KKwkJCSAqIGxvY2sgaWYgdGhlcmUgaXMgbm8gbWVz c2FnZSBsZWZ0IGluIHRoZSBxdWV1ZS4KKwkJCSAqLworCQkJaWYgKHhpZCAhPSBzdWJ4aWQgJiYK KwkJCQlwZ19hdG9taWNfc3ViX2ZldGNoX3UzMigmKE15UGFyYWxsZWxTaGFyZWQtPmxlZnRfbWVz c2FnZSksIDEpID09IDApCisJCQl7CisJCQkJcGFyYWxsZWxfYXBwbHlfbG9jayhNeVBhcmFsbGVs U2hhcmVkLT5zdHJlYW1fbG9ja19pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlwYXJhbGxlbF9h cHBseV91bmxvY2soTXlQYXJhbGxlbFNoYXJlZC0+c3RyZWFtX2xvY2tfaWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJCQl9CisKKwkJCWVsb2coREVCVUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUg dHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJ CQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQogCiAJcmVzZXRfYXBwbHlfZXJyb3JfY29u dGV4dF9pbmZvKCk7CiB9CiAKKwogLyoKICAqIENvbW1vbiBzcG9vbGZpbGUgcHJvY2Vzc2luZy4K ICAqLwotc3RhdGljIHZvaWQKLWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4 aWQsIFhMb2dSZWNQdHIgbHNuKQordm9pZAorYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhGaWxlU2V0 ICpzdHJlYW1fZmlsZXNldCwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCSAgIFhMb2dSZWNQdHIg bHNuKQogewogCVN0cmluZ0luZm9EYXRhIHMyOwogCWludAkJCW5jaGFuZ2VzOwpAQCAtMTM4MSw3 ICsxODgxLDggQEAgYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExv Z1JlY1B0ciBsc24pCiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAJQnVmRmlsZSAgICAqZmQ7CiAK LQltYXliZV9zdGFydF9za2lwcGluZ19jaGFuZ2VzKGxzbik7CisJaWYgKCFhbV9wYXJhbGxlbF9h cHBseV93b3JrZXIoKSkKKwkJbWF5YmVfc3RhcnRfc2tpcHBpbmdfY2hhbmdlcyhsc24pOwogCiAJ LyogTWFrZSBzdXJlIHdlIGhhdmUgYW4gb3BlbiB0cmFuc2FjdGlvbiAqLwogCWJlZ2luX3JlcGxp Y2F0aW9uX3N0ZXAoKTsKQEAgLTEzOTcsOCArMTg5OCwxMCBAQCBhcHBseV9zcG9vbGVkX21lc3Nh Z2VzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAljaGFuZ2VzX2ZpbGVuYW1l KHBhdGgsIE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CiAJZWxvZyhERUJVRzEsICJy ZXBsYXlpbmcgY2hhbmdlcyBmcm9tIGZpbGUgXCIlc1wiIiwgcGF0aCk7CiAKLQlmZCA9IEJ1ZkZp bGVPcGVuRmlsZVNldChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0LCBwYXRoLCBP X1JET05MWSwKKwlmZCA9IEJ1ZkZpbGVPcGVuRmlsZVNldChzdHJlYW1fZmlsZXNldCwgcGF0aCwg T19SRE9OTFksCiAJCQkJCQkJZmFsc2UpOworCXN0cmVhbV9mZCA9IGZkOworCXN0cmVhbV94aWQg PSB4aWQ7CiAKIAlidWZmZXIgPSBwYWxsb2MoQkxDS1NaKTsKIAlpbml0U3RyaW5nSW5mbygmczIp OwpAQCAtMTQ2OSw2ICsxOTcyLDE2IEBAIGFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoVHJhbnNhY3Rp b25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj eHQpOwogCisJCS8qCisJCSAqIEJyZWFrIHRoZSBsb29wIGlmIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBoYXZlIGZpbmlzaGVkIGFwcGx5aW5nIHRoZQorCQkgKiB0cmFuc2FjdGlvbi4gVGhlIHBhcmFs bGVsIGFwcGx5IHdvcmtlciBzaG91bGQgaGF2ZSBjbG9zZSB0aGUgZmlsZQorCQkgKiBiZWZvcmUg Y29tbWl0dGluZy4KKwkJICovCisJCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSAmJgor CQkJKE15UGFyYWxsZWxTaGFyZWQtPnhhY3Rfc3RhdGUgPT0gUEFSQUxMRUxfVFJBTlNfRklOSVNI RUQgfHwKKwkJCU15UGFyYWxsZWxTaGFyZWQtPnhhY3Rfc3RhdGUgPT0gUEFSQUxMRUxfVFJBTlNf VU5LTk9XTikpCisJCQlnb3RvIGRvbmU7CisKIAkJbmNoYW5nZXMrKzsKIAogCQlpZiAobmNoYW5n ZXMgJSAxMDAwID09IDApCkBAIC0xNDc3LDEwICsxOTkwLDEzIEBAIGFwcGx5X3Nwb29sZWRfbWVz c2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCX0KIAogCUJ1ZkZpbGVD bG9zZShmZCk7Ci0KIAlwZnJlZShidWZmZXIpOwogCXBmcmVlKHMyLmRhdGEpOwogCitkb25lOgor CXN0cmVhbV9mZCA9IE5VTEw7CisJc3RyZWFtX3hpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwor CiAJZWxvZyhERUJVRzEsICJyZXBsYXllZCAlZCAoYWxsKSBjaGFuZ2VzIGZyb20gZmlsZSBcIiVz XCIiLAogCQkgbmNoYW5nZXMsIHBhdGgpOwogCkBAIC0xNDk1LDYgKzIwMTEsOSBAQCBhcHBseV9o YW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiB7CiAJVHJhbnNhY3Rpb25JZCB4aWQ7 CiAJTG9naWNhbFJlcENvbW1pdERhdGEgY29tbWl0X2RhdGE7CisJUGFyYWxsZWxBcHBseVdvcmtl ckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOworCVN0cmluZ0lu Zm9EYXRhCW9yaWdpbmFsX21zZyA9ICpzOwogCiAJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9u KQogCQllcmVwb3J0KEVSUk9SLApAQCAtMTUwNCwxNCArMjAyMyw5MyBAQCBhcHBseV9oYW5kbGVf c3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiAJeGlkID0gbG9naWNhbHJlcF9yZWFkX3N0cmVh bV9jb21taXQocywgJmNvbW1pdF9kYXRhKTsKIAlzZXRfYXBwbHlfZXJyb3JfY29udGV4dF94YWN0 KHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CiAKLQllbG9nKERFQlVHMSwgInJlY2VpdmVk IGNvbW1pdCBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb24gJXUiLCB4aWQpOworCWFwcGx5X2FjdGlv biA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oeGlkLCAmd2luZm8pOwogCi0JYXBwbHlf c3Bvb2xlZF9tZXNzYWdlcyh4aWQsIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOworCXN3aXRjaCAo YXBwbHlfYWN0aW9uKQorCXsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VSSUFMSVpFOgogCi0JYXBw bHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29tbWl0X2RhdGEpOworCQkJLyoKKwkJCSAqIFRo ZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBzZXJpYWxpemVkIHRvIGZpbGUsIHNvIHJlcGxheSBhbGwg dGhlCisJCQkgKiBzcG9vbGVkIG9wZXJhdGlvbnMuCisJCQkgKi8KKwkJCWFwcGx5X3Nwb29sZWRf bWVzc2FnZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCwgeGlkLAorCQkJCQkJ CQkgICBjb21taXRfZGF0YS5jb21taXRfbHNuKTsKKworCQkJYXBwbHlfaGFuZGxlX2NvbW1pdF9p bnRlcm5hbCgmY29tbWl0X2RhdGEpOworCisJCQkvKiBVbmxpbmsgdGhlIGZpbGVzIHdpdGggc2Vy aWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCisJCQlzdHJlYW1fY2xlYW51cF9m aWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCQkJYnJlYWs7CiAKLQkvKiB1 bmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8g Ki8KLQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQp OworCQljYXNlIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgorCQljYXNlIFRSQU5TX0xF QURFUl9QQVJUSUFMX1NFUklBTElaRToKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJCQkg KiBVbmxvY2sgdGhlIHNoYXJlZCBvYmplY3QgbG9jayBzbyB0aGF0IHBhcmFsbGVsIGFwcGx5IHdv cmtlcgorCQkJICogY2FuIGNvbnRpbnVlIHRvIHJlY2VpdmUgYW5kIGFwcGx5IGNoYW5nZXMuCisJ CQkgKi8KKwkJCXBhcmFsbGVsX2FwcGx5X3VubG9jayh3aW5mby0+c2hhcmVkLT5zdHJlYW1fbG9j a19pZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwkJCS8qIFNlbmQgU1RSRUFNIENPTU1JVCBt ZXNzYWdlIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICovCisJCQlpZiAoYXBwbHlfYWN0 aW9uID09IFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMKQorCQkJCXBhcmFsbGVsX2FwcGx5 X3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlz dHJlYW1fd3JpdGVfbWVzc2FnZSh4aWQsIExPR0lDQUxfUkVQX01TR19TVFJFQU1fQ09NTUlULAor CQkJCQkJCQkJICZvcmlnaW5hbF9tc2csIGZhbHNlKTsKKwkJCQlwYXJhbGxlbF9hcHBseV9zZXRf ZmlsZXNldCh3aW5mby0+c2hhcmVkLCB0cnVlKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEFmdGVy IHNlbmRpbmcgdGhlIGRhdGEgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBvcgorCQkJICog c2VyaWFsaXppbmcgZGF0YSB0byBmaWxlLCB3YWl0IGZvciB0aGF0IHdvcmtlciB0byBmaW5pc2gu IFRoaXMKKwkJCSAqIGlzIG5lY2Vzc2FyeSB0byBtYWludGFpbiBjb21taXQgb3JkZXIgd2hpY2gg YXZvaWRzIGZhaWx1cmVzIGR1ZQorCQkJICogdG8gdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVzIGFu ZCBkZWFkbG9ja3MuCisJCQkgKi8KKwkJCXBhcmFsbGVsX2FwcGx5X3dhaXRfZm9yX3hhY3RfZmlu aXNoKHdpbmZvLT5zaGFyZWQpOworCisJCQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOworCQkJ c3RvcmVfZmx1c2hfcG9zaXRpb24oY29tbWl0X2RhdGEuZW5kX2xzbik7CisJCQlzdG9wX3NraXBw aW5nX2NoYW5nZXMoKTsKKworCQkJcGFyYWxsZWxfYXBwbHlfZnJlZV93b3JrZXIod2luZm8sIHhp ZCwgdHJ1ZSk7CisKKwkJCS8qCisJCQkgKiBUaGUgdHJhbnNhY3Rpb24gaXMgZWl0aGVyIG5vbi1l bXB0eSBvciBza2lwcGVkLCBzbyB3ZSBjbGVhciB0aGUKKwkJCSAqIHN1YnNraXBsc24uCisJCQkg Ki8KKwkJCWNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xzbihjb21taXRfZGF0YS5jb21taXRfbHNu KTsKKworCQkJaWYgKGFwcGx5X2FjdGlvbiA9PSBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJ WkUpCisJCQkJc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwg eGlkKTsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKworCQkJ LyogVW5sb2NrIGFsbCB0aGUgc2hhcmVkIG9iamVjdCBsb2NrIGF0IHRyYW5zYWN0aW9uIGVuZC4g Ki8KKwkJCXBhcmFsbGVsX2FwcGx5X3VubG9jayhNeVBhcmFsbGVsU2hhcmVkLT5zdHJlYW1fbG9j a19pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJaWYgKHN0cmVhbV9mZCkKKwkJCQlCdWZGaWxl Q2xvc2Uoc3RyZWFtX2ZkKTsKKworCQkJYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29t bWl0X2RhdGEpOworCisJCQlsaXN0X2ZyZWUoc3VieGFjdGxpc3QpOworCQkJc3VieGFjdGxpc3Qg PSBOSUw7CisKKwkJCXBhcmFsbGVsX2FwcGx5X3VubG9jayhNeVBhcmFsbGVsU2hhcmVkLT50cmFu c2FjdGlvbl9sb2NrX2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJcGFyYWxsZWxfYXBwbHlfc2V0 X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQpOwor CisJCQllbG9nKERFQlVHMSwgImZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZp bmlzaCBjb21tYW5kIik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNl KTsKKwkJCWJyZWFrOworCX0KIAogCS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWlu ZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCiAJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhj b21taXRfZGF0YS5lbmRfbHNuKTsKQEAgLTE1NTUsNiArMjE1MywxMyBAQCBhcHBseV9oYW5kbGVf Y29tbWl0X2ludGVybmFsKExvZ2ljYWxSZXBDb21taXREYXRhICpjb21taXRfZGF0YSkKIAkJcmVw bG9yaWdpbl9zZXNzaW9uX29yaWdpbl90aW1lc3RhbXAgPSBjb21taXRfZGF0YS0+Y29tbWl0dGlt ZTsKIAogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQlpZiAoSXNUcmFuc2FjdGlv bkJsb2NrKCkpCisJCXsKKwkJCUVuZFRyYW5zYWN0aW9uQmxvY2soZmFsc2UpOworCQkJQ29tbWl0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCX0KKwogCQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2Up OwogCiAJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKGNvbW1pdF9kYXRhLT5lbmRfbHNuKTsKQEAgLTI1 MDYsNyArMzExMSw3IEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAvKgog ICogTG9naWNhbCByZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNzYWdlIGRpc3BhdGNoZXIuCiAgKi8K LXN0YXRpYyB2b2lkCit2b2lkCiBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpCiB7CiAJTG9n aWNhbFJlcE1zZ1R5cGUgYWN0aW9uID0gcHFfZ2V0bXNnYnl0ZShzKTsKQEAgLTI2NzUsNiArMzI4 MCwxMCBAQCBzdG9yZV9mbHVzaF9wb3NpdGlvbihYTG9nUmVjUHRyIHJlbW90ZV9sc24pCiB7CiAJ Rmx1c2hQb3NpdGlvbiAqZmx1c2hwb3M7CiAKKwkvKiBTa2lwIGZvciBwYXJhbGxlbCBhcHBseSB3 b3JrZXJzLiAqLworCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuOwor CiAJLyogTmVlZCB0byBkbyB0aGlzIGluIHBlcm1hbmVudCBjb250ZXh0ICovCiAJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CiAKQEAgLTI3MzksNiArMzM0OCw3IEBAIExvZ2lj YWxSZXBBcHBseUxvb3AoWExvZ1JlY1B0ciBsYXN0X3JlY2VpdmVkKQogCWVycmNhbGxiYWNrLmNh bGxiYWNrID0gYXBwbHlfZXJyb3JfY2FsbGJhY2s7CiAJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBl cnJvcl9jb250ZXh0X3N0YWNrOwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7 CisJYXBwbHlfZXJyb3JfY29udGV4dF9zdGFjayA9IGVycm9yX2NvbnRleHRfc3RhY2s7CiAKIAkv KiBUaGlzIG91dGVyIGxvb3AgaXRlcmF0ZXMgb25jZSBwZXIgd2FpdC4gKi8KIAlmb3IgKDs7KQpA QCAtMjk1Myw2ICszNTYzLDcgQEAgTG9naWNhbFJlcEFwcGx5TG9vcChYTG9nUmVjUHRyIGxhc3Rf cmVjZWl2ZWQpCiAKIAkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KIAllcnJvcl9j b250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7CisJYXBwbHlfZXJyb3JfY29udGV4 dF9zdGFjayA9IGVycm9yX2NvbnRleHRfc3RhY2s7CiAKIAkvKiBBbGwgZG9uZSAqLwogCXdhbHJj dl9lbmRzdHJlYW1pbmcoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwgJnRsaSk7CkBAIC0zMDUzLDcg KzM2NjQsNyBAQCBzZW5kX2ZlZWRiYWNrKFhMb2dSZWNQdHIgcmVjdnBvcywgYm9vbCBmb3JjZSwg Ym9vbCByZXF1ZXN0UmVwbHkpCiAvKgogICogUmVyZWFkIHN1YnNjcmlwdGlvbiBpbmZvIGlmIG5l ZWRlZC4gTW9zdCBjaGFuZ2VzIHdpbGwgYmUgZXhpdC4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQK IG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCkKIHsKIAlNZW1vcnlDb250ZXh0IG9sZGN0 eDsKQEAgLTMwODMsOCArMzY5NCw5IEBAIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCkK IAlpZiAoIW5ld3N1YikKIAl7CiAJCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImxvZ2ljYWwg cmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgIgot CQkJCQkJInN0b3AgYmVjYXVzZSB0aGUgc3Vic2NyaXB0aW9uIHdhcyByZW1vdmVkIiwKKwkJLyog dHJhbnNsYXRvcjogZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3 b3JrZXIgKi8KKwkJCQkoZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0 b3AgYmVjYXVzZSB0aGUgIgorCQkJCQkJInN1YnNjcmlwdGlvbiB3YXMgcmVtb3ZlZCIsIGdldF93 b3JrZXJfbmFtZSgpLAogCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CiAKIAkJcHJvY19l eGl0KDApOwpAQCAtMzA5NCw4ICszNzA2LDkgQEAgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2 b2lkKQogCWlmICghbmV3c3ViLT5lbmFibGVkKQogCXsKIAkJZXJlcG9ydChMT0csCi0JCQkJKGVy cm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBc IiVzXCIgd2lsbCAiCi0JCQkJCQkic3RvcCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIGRp c2FibGVkIiwKKwkJLyogdHJhbnNsYXRvcjogZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9naWNh bCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJCQkoZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9u IFwiJXNcIiB3aWxsIHN0b3AgYmVjYXVzZSB0aGUgIgorCQkJCQkJInN1YnNjcmlwdGlvbiB3YXMg ZGlzYWJsZWQiLCBnZXRfd29ya2VyX25hbWUoKSwKIAkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1l KSkpOwogCiAJCXByb2NfZXhpdCgwKTsKQEAgLTMxMDksNyArMzcyMiw5IEBAIG1heWJlX3JlcmVh ZF9zdWJzY3JpcHRpb24odm9pZCkKIAogCS8qCiAJICogRXhpdCBpZiBhbnkgcGFyYW1ldGVyIHRo YXQgYWZmZWN0cyB0aGUgcmVtb3RlIGNvbm5lY3Rpb24gd2FzIGNoYW5nZWQuCi0JICogVGhlIGxh dW5jaGVyIHdpbGwgc3RhcnQgYSBuZXcgd29ya2VyLgorCSAqIFRoZSBsYXVuY2hlciB3aWxsIHN0 YXJ0IGEgbmV3IHdvcmtlciwgYnV0IG5vdGUgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkKKwkgKiB3 b3JrZXIgbWF5IG9yIG1heSBub3QgcmVzdGFydCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRo ZSBzdHJlYW1pbmcKKwkgKiBvcHRpb24gYW5kIHdoZXRoZXIgdGhlcmUgd2lsbCBiZSBhIHN0cmVh bWluZyB0cmFuc2FjdGlvbi4KIAkgKi8KIAlpZiAoc3RyY21wKG5ld3N1Yi0+Y29ubmluZm8sIE15 U3Vic2NyaXB0aW9uLT5jb25uaW5mbykgIT0gMCB8fAogCQlzdHJjbXAobmV3c3ViLT5uYW1lLCBN eVN1YnNjcmlwdGlvbi0+bmFtZSkgIT0gMCB8fApAQCAtMzEyMCw5ICszNzM1LDE2IEBAIG1heWJl X3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCkKIAkJbmV3c3ViLT5vd25lciAhPSBNeVN1YnNjcmlw dGlvbi0+b3duZXIgfHwKIAkJIWVxdWFsKG5ld3N1Yi0+cHVibGljYXRpb25zLCBNeVN1YnNjcmlw dGlvbi0+cHVibGljYXRpb25zKSkKIAl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImxv Z2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdp bGwgcmVzdGFydCBiZWNhdXNlIG9mIGEgcGFyYW1ldGVyIGNoYW5nZSIsCi0JCQkJCQlNeVN1YnNj cmlwdGlvbi0+bmFtZSkpKTsKKwkJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCQkJ ZXJlcG9ydChMT0csCisJCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBs b2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCQkoZXJybXNnKCIlcyBmb3Igc3Vic2Ny aXB0aW9uIFwiJXNcIiB3aWxsIHN0b3AgYmVjYXVzZSBvZiBhIHBhcmFtZXRlciBjaGFuZ2UiLAor CQkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJZWxz ZQorCQkJZXJlcG9ydChMT0csCisJCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFt ZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCQkoZXJybXNnKCIlcyBmb3Ig c3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHJlc3RhcnQgYmVjYXVzZSBvZiBhIHBhcmFtZXRlciBj aGFuZ2UiLAorCQkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkp KTsKIAogCQlwcm9jX2V4aXQoMCk7CiAJfQpAQCAtMzM5OSw5ICs0MDIxLDYgQEAgc3RyZWFtX2Ns ZWFudXBfZmlsZXMoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCkKICAqIGJ5IHN0cmVhbV94 aWQgKGdsb2JhbCB2YXJpYWJsZSkuIElmIGl0J3MgdGhlIGZpcnN0IGNodW5rIG9mIHN0cmVhbWVk CiAgKiBjaGFuZ2VzIGZvciB0aGlzIHRyYW5zYWN0aW9uLCBjcmVhdGUgdGhlIGJ1ZmZpbGUsIG90 aGVyd2lzZSBvcGVuIHRoZQogICogcHJldmlvdXNseSBjcmVhdGVkIGZpbGUuCi0gKgotICogVGhp cyBjYW4gb25seSBiZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhICJzdHJlYW1pbmciIGJs b2NrLCBpLmUuCi0gKiBiZXR3ZWVuIHN0cmVhbV9zdGFydC9zdHJlYW1fc3RvcCBtZXNzYWdlcyBm cm9tIHRoZSB1cHN0cmVhbS4KICAqLwogc3RhdGljIHZvaWQKIHN0cmVhbV9vcGVuX2ZpbGUoT2lk IHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50KQpAQCAtMzQwOSw3 ICs0MDI4LDYgQEAgc3RyZWFtX29wZW5fZmlsZShPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlk LCBib29sIGZpcnN0X3NlZ21lbnQpCiAJY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwogCU1lbW9yeUNv bnRleHQgb2xkY3h0OwogCi0JQXNzZXJ0KGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKTsKIAlBc3Nl cnQoT2lkSXNWYWxpZChzdWJpZCkpOwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQp KTsKIAlBc3NlcnQoc3RyZWFtX2ZkID09IE5VTEwpOwpAQCAtMzQ0OCwxNSArNDA2NiwxMCBAQCBz dHJlYW1fb3Blbl9maWxlKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgZmlyc3Rf c2VnbWVudCkKIC8qCiAgKiBzdHJlYW1fY2xvc2VfZmlsZQogICoJICBDbG9zZSB0aGUgY3VycmVu dGx5IG9wZW4gZmlsZSB3aXRoIHN0cmVhbWVkIGNoYW5nZXMuCi0gKgotICogVGhpcyBjYW4gb25s eSBiZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBhIHN0cmVhbWluZyBibG9jaywgaS5lLiBhdCBzdHJl YW1fc3RvcAotICogbWVzc2FnZSBmcm9tIHRoZSB1cHN0cmVhbS4KICAqLwogc3RhdGljIHZvaWQK IHN0cmVhbV9jbG9zZV9maWxlKHZvaWQpCiB7Ci0JQXNzZXJ0KGluX3N0cmVhbWVkX3RyYW5zYWN0 aW9uKTsKLQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoc3RyZWFtX3hpZCkpOwogCUFzc2Vy dChzdHJlYW1fZmQgIT0gTlVMTCk7CiAKIAlCdWZGaWxlQ2xvc2Uoc3RyZWFtX2ZkKTsKQEAgLTM0 NzMsMTMgKzQwODYsMTEgQEAgc3RyZWFtX2Nsb3NlX2ZpbGUodm9pZCkKICAqIHRoZSBsZW5ndGgp LCBhY3Rpb24gY29kZSAoaWRlbnRpZnlpbmcgdGhlIG1lc3NhZ2UgdHlwZSkgYW5kIG1lc3NhZ2UK ICAqIGNvbnRlbnRzICh3aXRob3V0IHRoZSBzdWJ4YWN0IFRyYW5zYWN0aW9uSWQgdmFsdWUpLgog ICovCi1zdGF0aWMgdm9pZAordm9pZAogc3RyZWFtX3dyaXRlX2NoYW5nZShjaGFyIGFjdGlvbiwg U3RyaW5nSW5mbyBzKQogewogCWludAkJCWxlbjsKIAotCUFzc2VydChpbl9zdHJlYW1lZF90cmFu c2FjdGlvbik7Ci0JQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHN0cmVhbV94aWQpKTsKIAlB c3NlcnQoc3RyZWFtX2ZkICE9IE5VTEwpOwogCiAJLyogdG90YWwgb24tZGlzayBzaXplLCBpbmNs dWRpbmcgdGhlIGFjdGlvbiB0eXBlIGNoYXJhY3RlciAqLwpAQCAtMzQ5OCw2ICs0MTA5LDIxIEBA IHN0cmVhbV93cml0ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcykKIH0KIAogLyoK KyAqIHN0cmVhbV93cml0ZV9tZXNzYWdlCisgKgkgIFNlcmlhbGl6ZSB0aGUgbWVzc2FnZSB0aGF0 IGFyZSBub3QgaW4gYSBzdHJlYW1pbmcgYmxvY2sgdG8gYSBmaWxlLgorICovCitzdGF0aWMgdm9p ZAorc3RyZWFtX3dyaXRlX21lc3NhZ2UoVHJhbnNhY3Rpb25JZCB4aWQsIGNoYXIgYWN0aW9uLCBT dHJpbmdJbmZvIHMsCisJCQkJCSBib29sIGNyZWF0ZV9maWxlKQoreworCUFzc2VydCghaW5fc3Ry ZWFtZWRfdHJhbnNhY3Rpb24pOworCisJc2VyaWFsaXplX3N0cmVhbV9zdGFydCh4aWQsIGNyZWF0 ZV9maWxlKTsKKwlzdHJlYW1fd3JpdGVfY2hhbmdlKGFjdGlvbiwgcyk7CisJc2VyaWFsaXplX3N0 cmVhbV9zdG9wKHhpZCk7Cit9CisKKy8qCiAgKiBDbGVhbnVwIHRoZSBtZW1vcnkgZm9yIHN1Ynhh Y3RzIGFuZCByZXNldCB0aGUgcmVsYXRlZCB2YXJpYWJsZXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUg dm9pZApAQCAtMzYwOCwzNyArNDIzNCwxNiBAQCBzdGFydF9hcHBseShYTG9nUmVjUHRyIG9yaWdp bl9zdGFydHBvcykKIAlQR19FTkRfVFJZKCk7CiB9CiAKLS8qIExvZ2ljYWwgUmVwbGljYXRpb24g QXBwbHkgd29ya2VyIGVudHJ5IHBvaW50ICovCisvKgorICogQ29tbW9uIGluaXRpYWxpemF0aW9u IGZvciBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKgor ICogSW5pdGlhbGl6ZSB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiwgaW4tbWVtb3J5IHN1YnNjcmlw dGlvbiBhbmQgbmVjZXNzYXJ5CisgKiBjb25maWcgb3B0aW9ucy4KKyAqLwogdm9pZAotQXBwbHlX b3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQorSW5pdGlhbGl6ZUFwcGx5V29ya2VyKHZvaWQpCiB7 Ci0JaW50CQkJd29ya2VyX3Nsb3QgPSBEYXR1bUdldEludDMyKG1haW5fYXJnKTsKIAlNZW1vcnlD b250ZXh0IG9sZGN0eDsKLQljaGFyCQlvcmlnaW5uYW1lW05BTUVEQVRBTEVOXTsKLQlYTG9nUmVj UHRyCW9yaWdpbl9zdGFydHBvcyA9IEludmFsaWRYTG9nUmVjUHRyOwotCWNoYXIJICAgKm15c2xv dG5hbWUgPSBOVUxMOwotCVdhbFJjdlN0cmVhbU9wdGlvbnMgb3B0aW9uczsKLQlpbnQJCQlzZXJ2 ZXJfdmVyc2lvbjsKLQotCS8qIEF0dGFjaCB0byBzbG90ICovCi0JbG9naWNhbHJlcF93b3JrZXJf YXR0YWNoKHdvcmtlcl9zbG90KTsKLQotCS8qIFNldHVwIHNpZ25hbCBoYW5kbGluZyAqLwotCXBx c2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7Ci0JcHFzaWduYWwo U0lHVEVSTSwgZGllKTsKLQlCYWNrZ3JvdW5kV29ya2VyVW5ibG9ja1NpZ25hbHMoKTsKLQotCS8q Ci0JICogV2UgZG9uJ3QgY3VycmVudGx5IG5lZWQgYW55IFJlc291cmNlT3duZXIgaW4gYSB3YWxy ZWNlaXZlciBwcm9jZXNzLCBidXQKLQkgKiBpZiB3ZSBkaWQsIHdlIGNvdWxkIGNhbGwgQ3JlYXRl QXV4UHJvY2Vzc1Jlc291cmNlT3duZXIgaGVyZS4KLQkgKi8KLQotCS8qIEluaXRpYWxpc2Ugc3Rh dHMgdG8gYSBzYW5pc2ggdmFsdWUgKi8KLQlNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3Rfc2VuZF90 aW1lID0gTXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3JlY3ZfdGltZSA9Ci0JCU15TG9naWNhbFJl cFdvcmtlci0+cmVwbHlfdGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKLQotCS8qIExvYWQg dGhlIGxpYnBxLXNwZWNpZmljIGZ1bmN0aW9ucyAqLwotCWxvYWRfZmlsZSgibGlicHF3YWxyZWNl aXZlciIsIGZhbHNlKTsKIAogCS8qIFJ1biBhcyByZXBsaWNhIHNlc3Npb24gcmVwbGljYXRpb24g cm9sZS4gKi8KIAlTZXRDb25maWdPcHRpb24oInNlc3Npb25fcmVwbGljYXRpb25fcm9sZSIsICJy ZXBsaWNhIiwKQEAgLTM2NjYsOSArNDI3MSwxMSBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFp bl9hcmcpCiAJaWYgKCFNeVN1YnNjcmlwdGlvbikKIAl7CiAJCWVyZXBvcnQoTE9HLAotCQkJCShl cnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24g JXUgd2lsbCBub3QgIgotCQkJCQkJInN0YXJ0IGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMg cmVtb3ZlZCBkdXJpbmcgc3RhcnR1cCIsCi0JCQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN1Ymlk KSkpOworCQkvKiB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0 aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gJXUgd2lsbCBu b3Qgc3RhcnQgYmVjYXVzZSB0aGUgIgorCQkJCQkJInN1YnNjcmlwdGlvbiB3YXMgcmVtb3ZlZCBk dXJpbmcgc3RhcnR1cCIsCisJCQkJCQlnZXRfd29ya2VyX25hbWUoKSwgTXlMb2dpY2FsUmVwV29y a2VyLT5zdWJpZCkpKTsKKwogCQlwcm9jX2V4aXQoMCk7CiAJfQogCkBAIC0zNjc4LDkgKzQyODUs MTAgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCWlmICghTXlTdWJzY3JpcHRp b24tPmVuYWJsZWQpCiAJewogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dpY2FsIHJl cGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIG5vdCAi Ci0JCQkJCQkic3RhcnQgYmVjYXVzZSB0aGUgc3Vic2NyaXB0aW9uIHdhcyBkaXNhYmxlZCBkdXJp bmcgc3RhcnR1cCIsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwkJLyogdHJhbnNs YXRvcjogZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIg Ki8KKwkJCQkoZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIG5vdCBzdGFy dCBiZWNhdXNlICIKKwkJCQkJCSJ0aGUgc3Vic2NyaXB0aW9uIHdhcyBkaXNhYmxlZCBkdXJpbmcg c3RhcnR1cCIsCisJCQkJCQlnZXRfd29ya2VyX25hbWUoKSwgTXlTdWJzY3JpcHRpb24tPm5hbWUp KSk7CiAKIAkJcHJvY19leGl0KDApOwogCX0KQEAgLTM2OTYsMTQgKzQzMDQsNTEgQEAgQXBwbHlX b3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCiAJaWYgKGFtX3RhYmxlc3luY193b3JrZXIoKSkK IAkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiB0YWJsZSBz eW5jaHJvbml6YXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiLCB0YWJsZSBcIiVz XCIgaGFzIHN0YXJ0ZWQiLAotCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUsIGdldF9yZWxfbmFt ZShNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKSkpKTsKKwkJLyogdHJhbnNsYXRvcjogZmlyc3Qg JXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgKi8KKwkJCQkoZXJy bXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiwgdGFibGUgXCIlc1wiIGhhcyBzdGFydGVk IiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSwKKwkJCQkJ CWdldF9yZWxfbmFtZShNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKSkpKTsKIAllbHNlCiAJCWVy ZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2Vy IGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIGhhcyBzdGFydGVkIiwKLQkJCQkJCU15U3Vic2NyaXB0 aW9uLT5uYW1lKSkpOworCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBs b2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3Jp cHRpb24gXCIlc1wiIGhhcyBzdGFydGVkIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1 YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworfQor CisvKiBMb2dpY2FsIFJlcGxpY2F0aW9uIEFwcGx5IHdvcmtlciBlbnRyeSBwb2ludCAqLwordm9p ZAorQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQoreworCWludAkJCXdvcmtlcl9zbG90 ID0gRGF0dW1HZXRJbnQzMihtYWluX2FyZyk7CisJY2hhcgkJb3JpZ2lubmFtZVtOQU1FREFUQUxF Tl07CisJWExvZ1JlY1B0cglvcmlnaW5fc3RhcnRwb3MgPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwlj aGFyCSAgICpteXNsb3RuYW1lID0gTlVMTDsKKwlXYWxSY3ZTdHJlYW1PcHRpb25zIG9wdGlvbnM7 CisJaW50CQkJc2VydmVyX3ZlcnNpb247CisKKwkvKiBBdHRhY2ggdG8gc2xvdCAqLworCWxvZ2lj YWxyZXBfd29ya2VyX2F0dGFjaCh3b3JrZXJfc2xvdCk7CisKKwkvKiBTZXR1cCBzaWduYWwgaGFu ZGxpbmcgKi8KKwlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQp OworCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7CisJQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWdu YWxzKCk7CisKKwkvKgorCSAqIFdlIGRvbid0IGN1cnJlbnRseSBuZWVkIGFueSBSZXNvdXJjZU93 bmVyIGluIGEgd2FscmVjZWl2ZXIgcHJvY2VzcywgYnV0CisJICogaWYgd2UgZGlkLCB3ZSBjb3Vs ZCBjYWxsIENyZWF0ZUF1eFByb2Nlc3NSZXNvdXJjZU93bmVyIGhlcmUuCisJICovCisKKwkvKiBJ bml0aWFsaXNlIHN0YXRzIHRvIGEgc2FuaXNoIHZhbHVlICovCisJTXlMb2dpY2FsUmVwV29ya2Vy LT5sYXN0X3NlbmRfdGltZSA9IE15TG9naWNhbFJlcFdvcmtlci0+bGFzdF9yZWN2X3RpbWUgPQor CQlNeUxvZ2ljYWxSZXBXb3JrZXItPnJlcGx5X3RpbWUgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7 CisKKwkvKiBMb2FkIHRoZSBsaWJwcS1zcGVjaWZpYyBmdW5jdGlvbnMgKi8KKwlsb2FkX2ZpbGUo ImxpYnBxd2FscmVjZWl2ZXIiLCBmYWxzZSk7CisKKwlJbml0aWFsaXplQXBwbHlXb3JrZXIoKTsK IAogCS8qIENvbm5lY3QgdG8gdGhlIG9yaWdpbiBhbmQgc3RhcnQgdGhlIHJlcGxpY2F0aW9uLiAq LwogCWVsb2coREVCVUcxLCAiY29ubmVjdGluZyB0byBwdWJsaXNoZXIgdXNpbmcgY29ubmVjdGlv biBzdHJpbmcgXCIlc1wiIiwKQEAgLTM3MjYsNyArNDM3MSw3IEBAIEFwcGx5V29ya2VyTWFpbihE YXR1bSBtYWluX2FyZykKIAl9CiAJZWxzZQogCXsKLQkJLyogVGhpcyBpcyBtYWluIGFwcGx5IHdv cmtlciAqLworCQkvKiBUaGlzIGlzIGxlYWRlciBhcHBseSB3b3JrZXIgKi8KIAkJUmVwT3JpZ2lu SWQgb3JpZ2luaWQ7CiAJCVRpbWVMaW5lSUQJc3RhcnRwb2ludFRMSTsKIAkJY2hhcgkgICAqZXJy OwpAQCAtMzc1MCw3ICs0Mzk1LDcgQEAgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQog CQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fYnlfbmFtZShvcmlnaW5uYW1lLCB0cnVlKTsKIAkJaWYg KCFPaWRJc1ZhbGlkKG9yaWdpbmlkKSkKIAkJCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9jcmVhdGUo b3JpZ2lubmFtZSk7Ci0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCk7CisJCXJl cGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCwgMCk7CiAJCXJlcGxvcmlnaW5fc2Vzc2lv bl9vcmlnaW4gPSBvcmlnaW5pZDsKIAkJb3JpZ2luX3N0YXJ0cG9zID0gcmVwbG9yaWdpbl9zZXNz aW9uX2dldF9wcm9ncmVzcyhmYWxzZSk7CiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwpA QCAtMzc5MSwxMyArNDQzNiwzNiBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAK IAlzZXJ2ZXJfdmVyc2lvbiA9IHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbihMb2dSZXBXb3JrZXJXYWxS Y3ZDb25uKTsKIAlvcHRpb25zLnByb3RvLmxvZ2ljYWwucHJvdG9fdmVyc2lvbiA9CisJCXNlcnZl cl92ZXJzaW9uID49IDE2MDAwMCA/IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZF UlNJT05fTlVNIDoKIAkJc2VydmVyX3ZlcnNpb24gPj0gMTUwMDAwID8gTE9HSUNBTFJFUF9QUk9U T19UV09QSEFTRV9WRVJTSU9OX05VTSA6CiAJCXNlcnZlcl92ZXJzaW9uID49IDE0MDAwMCA/IExP R0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNIDoKIAkJTE9HSUNBTFJFUF9QUk9UT19W RVJTSU9OX05VTTsKIAogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5wdWJsaWNhdGlvbl9uYW1lcyA9 IE15U3Vic2NyaXB0aW9uLT5wdWJsaWNhdGlvbnM7CiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLmJp bmFyeSA9IE15U3Vic2NyaXB0aW9uLT5iaW5hcnk7Ci0Jb3B0aW9ucy5wcm90by5sb2dpY2FsLnN0 cmVhbWluZyA9IE15U3Vic2NyaXB0aW9uLT5zdHJlYW07CisKKwkvKgorCSAqIEFzc2lnbiB0aGUg YXBwcm9wcmlhdGUgb3B0aW9uIHZhbHVlIGZvciBzdHJlYW1pbmcgb3B0aW9uIGFjY29yZGluZyB0 bworCSAqIHRoZSAnc3RyZWFtaW5nJyBtb2RlIGFuZCB0aGUgcHVibGlzaGVyJ3MgYWJpbGl0eSB0 byBzdXBwb3J0IHRoYXQgbW9kZS4KKwkgKi8KKwlpZiAoc2VydmVyX3ZlcnNpb24gPj0gMTYwMDAw ICYmCisJCU15U3Vic2NyaXB0aW9uLT5zdHJlYW0gPT0gU1VCU1RSRUFNX1BBUkFMTEVMKQorCXsK KwkJb3B0aW9ucy5wcm90by5sb2dpY2FsLnN0cmVhbWluZ19zdHIgPSBwc3RyZHVwKCJwYXJhbGxl bCIpOworCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnBhcmFsbGVsX2FwcGx5ID0gdHJ1ZTsKKwl9CisJ ZWxzZSBpZiAoc2VydmVyX3ZlcnNpb24gPj0gMTQwMDAwICYmCisJCQkgTXlTdWJzY3JpcHRpb24t PnN0cmVhbSAhPSBTVUJTVFJFQU1fT0ZGKQorCXsKKwkJb3B0aW9ucy5wcm90by5sb2dpY2FsLnN0 cmVhbWluZ19zdHIgPSBwc3RyZHVwKCJvbiIpOworCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnBhcmFs bGVsX2FwcGx5ID0gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCW9wdGlvbnMucHJvdG8ubG9naWNh bC5zdHJlYW1pbmdfc3RyID0gTlVMTDsKKwkJTXlMb2dpY2FsUmVwV29ya2VyLT5wYXJhbGxlbF9h cHBseSA9IGZhbHNlOworCX0KKwogCW9wdGlvbnMucHJvdG8ubG9naWNhbC50d29waGFzZSA9IGZh bHNlOwogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5vcmlnaW4gPSBwc3RyZHVwKE15U3Vic2NyaXB0 aW9uLT5vcmlnaW4pOwogCkBAIC0zODMwLDcgKzQ0OTgsOCBAQCBBcHBseVdvcmtlck1haW4oRGF0 dW0gbWFpbl9hcmcpCiAJCX0KIAogCQllcmVwb3J0KERFQlVHMSwKLQkJCQkoZXJybXNnX2ludGVy bmFsKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwi JXNcIiB0d29fcGhhc2UgaXMgJXMiLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoIiVzIGZvciBzdWJz Y3JpcHRpb24gXCIlc1wiIHR3b19waGFzZSBpcyAlcyIsCisJCQkJCQlnZXRfd29ya2VyX25hbWUo KSwKIAkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lLAogCQkJCQkJTXlTdWJzY3JpcHRpb24tPnR3 b3BoYXNlc3RhdGUgPT0gTE9HSUNBTFJFUF9UV09QSEFTRV9TVEFURV9ESVNBQkxFRCA/ICJESVNB QkxFRCIgOgogCQkJCQkJTXlTdWJzY3JpcHRpb24tPnR3b3BoYXNlc3RhdGUgPT0gTE9HSUNBTFJF UF9UV09QSEFTRV9TVEFURV9QRU5ESU5HID8gIlBFTkRJTkciIDoKQEAgLTM4OTUsNiArNDU2NCwx NSBAQCBJc0xvZ2ljYWxXb3JrZXIodm9pZCkKIH0KIAogLyoKKyAqIElzIGN1cnJlbnQgcHJvY2Vz cyBhIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyPworICovCitib29s CitJc0xvZ2ljYWxQYXJhbGxlbEFwcGx5V29ya2VyKHZvaWQpCit7CisJcmV0dXJuIElzTG9naWNh bFdvcmtlcigpICYmIGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpOworfQorCisvKgogICogU3Rh cnQgc2tpcHBpbmcgY2hhbmdlcyBvZiB0aGUgdHJhbnNhY3Rpb24gaWYgdGhlIGdpdmVuIExTTiBt YXRjaGVzIHRoZQogICogTFNOIHNwZWNpZmllZCBieSBzdWJzY3JpcHRpb24ncyBza2lwbHNuLgog ICovCkBAIC0zOTU2LDcgKzQ2MzQsNyBAQCBjbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24oWExv Z1JlY1B0ciBmaW5pc2hfbHNuKQogCVhMb2dSZWNQdHIJbXlza2lwbHNuID0gTXlTdWJzY3JpcHRp b24tPnNraXBsc247CiAJYm9vbAkJc3RhcnRlZF90eCA9IGZhbHNlOwogCi0JaWYgKGxpa2VseShY TG9nUmVjUHRySXNJbnZhbGlkKG15c2tpcGxzbikpKQorCWlmIChsaWtlbHkoWExvZ1JlY1B0cklz SW52YWxpZChteXNraXBsc24pKSB8fCBhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKIAkJcmV0 dXJuOwogCiAJaWYgKCFJc1RyYW5zYWN0aW9uU3RhdGUoKSkKQEAgLTQwMjgsNyArNDcwNiw3IEBA IGNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xzbihYTG9nUmVjUHRyIGZpbmlzaF9sc24pCiB9CiAK IC8qIEVycm9yIGNhbGxiYWNrIHRvIGdpdmUgbW9yZSBjb250ZXh0IGluZm8gYWJvdXQgdGhlIGNo YW5nZSBiZWluZyBhcHBsaWVkICovCi1zdGF0aWMgdm9pZAordm9pZAogYXBwbHlfZXJyb3JfY2Fs bGJhY2sodm9pZCAqYXJnKQogewogCUFwcGx5RXJyb3JDYWxsYmFja0FyZyAqZXJyYXJnID0gJmFw cGx5X2Vycm9yX2NhbGxiYWNrX2FyZzsKQEAgLTQwNTYsMjMgKzQ3MzQsNDcgQEAgYXBwbHlfZXJy b3JfY2FsbGJhY2sodm9pZCAqYXJnKQogCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCiAJCQkJ CSAgIExTTl9GT1JNQVRfQVJHUyhlcnJhcmctPmZpbmlzaF9sc24pKTsKIAl9Ci0JZWxzZSBpZiAo ZXJyYXJnLT5yZW1vdGVfYXR0bnVtIDwgMCkKLQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1v dGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBl IFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBpbiB0cmFu c2FjdGlvbiAldSwgZmluaXNoZWQgYXQgJVgvJVgiLAotCQkJCSAgIGVycmFyZy0+b3JpZ2luX25h bWUsCi0JCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwKLQkJ CQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCi0JCQkJICAgZXJyYXJnLT5yZWwt PnJlbW90ZXJlbC5yZWxuYW1lLAotCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCwKLQkJCQkgICBM U05fRk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hfbHNuKSk7CiAJZWxzZQotCQllcnJjb250ZXh0 KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1 cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24g XCIlcy4lc1wiIGNvbHVtbiBcIiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUsIGZpbmlzaGVkIGF0ICVY LyVYIiwKLQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAotCQkJCSAgIGxvZ2ljYWxyZXBfbWVz c2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCi0JCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJl bC5uc3BuYW1lLAotCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKLQkJCQkg ICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLmF0dG5hbWVzW2VycmFyZy0+cmVtb3RlX2F0dG51bV0s Ci0JCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkLAotCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJh cmctPmZpbmlzaF9sc24pKTsKKwl7CisJCWlmIChlcnJhcmctPnJlbW90ZV9hdHRudW0gPCAwKQor CQl7CisJCQlpZiAoWExvZ1JlY1B0cklzSW52YWxpZChlcnJhcmctPmZpbmlzaF9sc24pKQorCQkJ CWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdp biBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdl dCByZWxhdGlvbiBcIiVzLiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUiLAorCQkJCQkJICAgZXJyYXJn LT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+ Y29tbWFuZCksCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJ CQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJl bW90ZV94aWQpOworCQkJZWxzZQorCQkJCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRh dGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVz XCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIgaW4gdHJhbnNhY3Rp b24gJXUsIGZpbmlzaGVkIGF0ICVYLyVYIiwKKwkJCQkJCSAgIGVycmFyZy0+b3JpZ2luX25hbWUs CisJCQkJCQkgICBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShlcnJhcmctPmNvbW1hbmQpLAorCQkJ CQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5uc3BuYW1lLAorCQkJCQkJICAgZXJyYXJnLT5y ZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAorCQkJCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkLAorCQkJ CQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikpOworCQl9CisJCWVsc2UK KwkJeworCQkJaWYgKFhMb2dSZWNQdHJJc0ludmFsaWQoZXJyYXJnLT5maW5pc2hfbHNuKSkKKwkJ CQllcnJjb250ZXh0KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmln aW4gXCIlc1wiIGR1cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wiIGZvciByZXBsaWNhdGlvbiB0YXJn ZXQgcmVsYXRpb24gXCIlcy4lc1wiIGNvbHVtbiBcIiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUiLAor CQkJCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2Fn ZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVs Lm5zcG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJCQkJ CQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLmF0dG5hbWVzW2VycmFyZy0+cmVtb3RlX2F0dG51 bV0sCisJCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQpOworCQkJZWxzZQorCQkJCWVycmNvbnRl eHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIg ZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlv biBcIiVzLiVzXCIgY29sdW1uIFwiJXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmluaXNoZWQgYXQg JVgvJVgiLAorCQkJCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2ljYWxy ZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCisJCQkJCQkgICBlcnJhcmctPnJlbC0+ cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5h bWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLmF0dG5hbWVzW2VycmFyZy0+cmVt b3RlX2F0dG51bV0sCisJCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCisJCQkJCQkgICBMU05f Rk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hfbHNuKSk7CisJCX0KKwl9CiB9CiAKIC8qIFNldCB0 cmFuc2FjdGlvbiBpbmZvcm1hdGlvbiBvZiBhcHBseSBlcnJvciBjYWxsYmFjayAqLwpAQCAtNDA5 MiwzICs0Nzk0LDU3IEBAIHJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbyh2b2lkKQogCWFw cGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZW1vdGVfYXR0bnVtID0gLTE7CiAJc2V0X2FwcGx5X2Vy cm9yX2NvbnRleHRfeGFjdChJbnZhbGlkVHJhbnNhY3Rpb25JZCwgSW52YWxpZFhMb2dSZWNQdHIp OwogfQorCisvKgorICogUmV0dXJuIHRoZSBhY3Rpb24gdG8gdGFrZSBmb3IgdGhlIGdpdmVuIHRy YW5zYWN0aW9uLiAqd2luZm8gaXMgYXNzaWduZWQgdG8KKyAqIHRoZSBkZXN0aW5hdGlvbiBwYXJh bGxlbCB3b3JrZXIgaW5mbyAoaWYgdGhlIGFjdGlvbiBpcworICogVFJBTlNfTEVBREVSX1NFTkRf VE9fUEFSQUxMRUwgb3IgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFKSwgb3RoZXJ3aXNl CisgKiAqd2luZm8gaXMgYXNzaWduZWQgTlVMTC4KKyAqLworc3RhdGljIFRyYW5zQXBwbHlBY3Rp b24KK2dldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQsIFBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvICoqd2luZm8pCit7CisJKndpbmZvID0gTlVMTDsKKworCWlmIChh bV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwl7CisJCXJldHVybiBUUkFOU19QQVJBTExFTF9B UFBMWTsKKwl9CisJZWxzZSBpZiAoaW5fcmVtb3RlX3RyYW5zYWN0aW9uKQorCXsKKwkJcmV0dXJu IFRSQU5TX0xFQURFUl9BUFBMWTsKKwl9CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGFyZSBwcm9j ZXNzaW5nIHRoaXMgdHJhbnNhY3Rpb24gdXNpbmcgYSBwYXJhbGxlbCBhcHBseQorCSAqIHdvcmtl ci4KKwkgKi8KKwkqd2luZm8gPSBwYXJhbGxlbF9hcHBseV9maW5kX3dvcmtlcih4aWQpOworCisJ aWYgKCp3aW5mbyA9PSBOVUxMKQorCXsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU7 CisJfQorCWVsc2UgaWYgKCgqd2luZm8pLT5zZXJpYWxpemVfY2hhbmdlcykKKwl7CisJCXJldHVy biBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkU7CisJfQorCWVsc2UKKwl7CisJCXJldHVy biBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm4g dGhlIG5hbWUgb2YgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyLgorICovCitzdGF0aWMg Y29uc3QgY2hhciAqCitnZXRfd29ya2VyX25hbWUodm9pZCkKK3sKKwlpZiAoYW1fdGFibGVzeW5j X3dvcmtlcigpKQorCQlyZXR1cm4gXygibG9naWNhbCByZXBsaWNhdGlvbiB0YWJsZSBzeW5jaHJv bml6YXRpb24gd29ya2VyIik7CisJZWxzZSBpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkp CisJCXJldHVybiBfKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIp OworCWVsc2UKKwkJcmV0dXJuIF8oImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIik7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1 dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwppbmRleCAy ZWNhYTViLi4wM2NkZTdmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291 dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bn b3V0cHV0LmMKQEAgLTI5MCw3ICsyOTAsNyBAQCBwYXJzZV9vdXRwdXRfcGFyYW1ldGVycyhMaXN0 ICpvcHRpb25zLCBQR091dHB1dERhdGEgKmRhdGEpCiAJYm9vbAkJb3JpZ2luX29wdGlvbl9naXZl biA9IGZhbHNlOwogCiAJZGF0YS0+YmluYXJ5ID0gZmFsc2U7Ci0JZGF0YS0+c3RyZWFtaW5nID0g ZmFsc2U7CisJZGF0YS0+c3RyZWFtaW5nID0gU1VCU1RSRUFNX09GRjsKIAlkYXRhLT5tZXNzYWdl cyA9IGZhbHNlOwogCWRhdGEtPnR3b19waGFzZSA9IGZhbHNlOwogCkBAIC0zNjksNyArMzY5LDcg QEAgcGFyc2Vfb3V0cHV0X3BhcmFtZXRlcnMoTGlzdCAqb3B0aW9ucywgUEdPdXRwdXREYXRhICpk YXRhKQogCQkJCQkJIGVycm1zZygiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMiKSkp OwogCQkJc3RyZWFtaW5nX2dpdmVuID0gdHJ1ZTsKIAotCQkJZGF0YS0+c3RyZWFtaW5nID0gZGVm R2V0Qm9vbGVhbihkZWZlbCk7CisJCQlkYXRhLT5zdHJlYW1pbmcgPSBkZWZHZXRTdHJlYW1pbmdN b2RlKGRlZmVsKTsKIAkJfQogCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0d29f cGhhc2UiKSA9PSAwKQogCQl7CkBAIC00NjEsMTMgKzQ2MSwyMCBAQCBwZ291dHB1dF9zdGFydHVw KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAog CQkgKiB3ZSBvbmx5IGFsbG93IGl0IHdpdGggc3VmZmljaWVudCB2ZXJzaW9uIG9mIHRoZSBwcm90 b2NvbCwgYW5kIHdoZW4KIAkJICogdGhlIG91dHB1dCBwbHVnaW4gc3VwcG9ydHMgaXQuCiAJCSAq LwotCQlpZiAoIWRhdGEtPnN0cmVhbWluZykKKwkJaWYgKGRhdGEtPnN0cmVhbWluZyA9PSBTVUJT VFJFQU1fT0ZGKQogCQkJY3R4LT5zdHJlYW1pbmcgPSBmYWxzZTsKLQkJZWxzZSBpZiAoZGF0YS0+ cHJvdG9jb2xfdmVyc2lvbiA8IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNKQor CQllbHNlIGlmIChkYXRhLT5zdHJlYW1pbmcgPT0gU1VCU1RSRUFNX09OICYmCisJCQkJIGRhdGEt PnByb3RvY29sX3ZlcnNpb24gPCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9WRVJTSU9OX05VTSkK IAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAogCQkJCQkgZXJybXNnKCJyZXF1ZXN0ZWQgcHJvdG9fdmVyc2lvbj0lZCBkb2Vz IG5vdCBzdXBwb3J0IHN0cmVhbWluZywgbmVlZCAlZCBvciBoaWdoZXIiLAogCQkJCQkJCWRhdGEt PnByb3RvY29sX3ZlcnNpb24sIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNKSkp OworCQllbHNlIGlmIChkYXRhLT5zdHJlYW1pbmcgPT0gU1VCU1RSRUFNX1BBUkFMTEVMICYmCisJ CQkJIGRhdGEtPnByb3RvY29sX3ZlcnNpb24gPCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJB TExFTF9WRVJTSU9OX05VTSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJyZXF1ZXN0ZWQgcHJv dG9fdmVyc2lvbj0lZCBkb2VzIG5vdCBzdXBwb3J0IHBhcmFsbGVsIHN0cmVhbWluZywgbmVlZCAl ZCBvciBoaWdoZXIiLAorCQkJCQkJCWRhdGEtPnByb3RvY29sX3ZlcnNpb24sIExPR0lDQUxSRVBf UFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNKSkpOwogCQllbHNlIGlmICghY3R4LT5z dHJlYW1pbmcpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKQEAgLTUxMyw3ICs1MjAsNyBAQCBwZ291dHB1dF9zdGFydHVw KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAog CQkgKiBEaXNhYmxlIHRoZSBzdHJlYW1pbmcgYW5kIHByZXBhcmVkIHRyYW5zYWN0aW9ucyBkdXJp bmcgdGhlIHNsb3QKIAkJICogaW5pdGlhbGl6YXRpb24gbW9kZS4KIAkJICovCi0JCWN0eC0+c3Ry ZWFtaW5nID0gZmFsc2U7CisJCWN0eC0+c3RyZWFtaW5nID0gU1VCU1RSRUFNX09GRjsKIAkJY3R4 LT50d29waGFzZSA9IGZhbHNlOwogCX0KIH0KQEAgLTE4MzksNiArMTg0Niw4IEBAIHBnb3V0cHV0 X3N0cmVhbV9hYm9ydChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkg IFhMb2dSZWNQdHIgYWJvcnRfbHNuKQogewogCVJlb3JkZXJCdWZmZXJUWE4gKnRvcHR4bjsKKwlQ R091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9w cml2YXRlOworCWJvb2wJCXdyaXRlX2Fib3J0X2luZm8gPSAoZGF0YS0+c3RyZWFtaW5nID09IFNV QlNUUkVBTV9QQVJBTExFTCk7CiAKIAkvKgogCSAqIFRoZSBhYm9ydCBzaG91bGQgaGFwcGVuIG91 dHNpZGUgc3RyZWFtaW5nIGJsb2NrLCBldmVuIGZvciBzdHJlYW1lZApAQCAtMTg1Miw3ICsxODYx LDkgQEAgcGdvdXRwdXRfc3RyZWFtX2Fib3J0KHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsCiAJQXNzZXJ0KHJidHhuX2lzX3N0cmVhbWVkKHRvcHR4bikpOwogCiAJT3V0cHV0UGx1 Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7Ci0JbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJv cnQoY3R4LT5vdXQsIHRvcHR4bi0+eGlkLCB0eG4tPnhpZCk7CisJbG9naWNhbHJlcF93cml0ZV9z dHJlYW1fYWJvcnQoY3R4LT5vdXQsIHRvcHR4bi0+eGlkLCB0eG4tPnhpZCwgYWJvcnRfbHNuLAor CQkJCQkJCQkgIHR4bi0+eGFjdF90aW1lLmFib3J0X3RpbWUsIHdyaXRlX2Fib3J0X2luZm8pOwor CiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAogCWNsZWFudXBfcmVsX3N5bmNfY2Fj aGUodG9wdHhuLT54aWQsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpp bmRleCA3NzY3NjU3Li43YzAwOWQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5j CkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlv bi9sb2dpY2Fsd29ya2VyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdl L2lwYy5oIgpAQCAtNjU3LDYgKzY1OCw5IEBAIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJ R05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRF WFQpKQogCQlIYW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQ cm9jU2lnbmFsKFBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FHRSkpCisJCUhhbmRsZVBhcmFs bGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KCk7CisKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NT SUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UpKQogCQlSZWNvdmVyeUNvbmZsaWN0SW50ZXJy dXB0KFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UpOwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK aW5kZXggMzA4MjA5My4uZjUyZTViYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtMzM3OSw2ICszMzc5 LDkgQEAgUHJvY2Vzc0ludGVycnVwdHModm9pZCkKIAogCWlmIChMb2dNZW1vcnlDb250ZXh0UGVu ZGluZykKIAkJUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKKworCWlmIChQYXJh bGxlbEFwcGx5TWVzc2FnZVBlbmRpbmcpCisJCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlcygp OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9l dmVudC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCmluZGV4IDky ZjI0YTYuLmRjZmY1OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dh aXRfZXZlbnQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMK QEAgLTIzMCw2ICsyMzAsOSBAQCBwZ3N0YXRfZ2V0X3dhaXRfYWN0aXZpdHkoV2FpdEV2ZW50QWN0 aXZpdHkgdykKIAkJY2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxfTEFVTkNIRVJfTUFJTjoKIAkJCWV2 ZW50X25hbWUgPSAiTG9naWNhbExhdW5jaGVyTWFpbiI7CiAJCQlicmVhazsKKwkJY2FzZSBXQUlU X0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfTUFJTjoKKwkJCWV2ZW50X25hbWUgPSAiTG9n aWNhbFBhcmFsbGVsQXBwbHlNYWluIjsKKwkJCWJyZWFrOwogCQljYXNlIFdBSVRfRVZFTlRfUkVD T1ZFUllfV0FMX1NUUkVBTToKIAkJCWV2ZW50X25hbWUgPSAiUmVjb3ZlcnlXYWxTdHJlYW0iOwog CQkJYnJlYWs7CkBAIC0zODgsNiArMzkxLDkgQEAgcGdzdGF0X2dldF93YWl0X2lwYyhXYWl0RXZl bnRJUEMgdykKIAkJY2FzZSBXQUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX1JFSU5TRVJUOgog CQkJZXZlbnRfbmFtZSA9ICJIYXNoR3Jvd0J1Y2tldHNSZWluc2VydCI7CiAJCQlicmVhazsKKwkJ Y2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfU1RBVEVfQ0hBTkdFOgorCQkJ ZXZlbnRfbmFtZSA9ICJMb2dpY2FsUGFyYWxsZWxBcHBseVN0YXRlQ2hhbmdlIjsKKwkJCWJyZWFr OwogCQljYXNlIFdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX0RBVEE6CiAJCQlldmVudF9uYW1lID0g IkxvZ2ljYWxTeW5jRGF0YSI7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVz LmMKaW5kZXggODM2YjQ5NC4uNjc0YmE4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVz LmMKQEAgLTI5NjIsNiArMjk2MiwxOCBAQCBzdHJ1Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1l c0ludFtdID0KIAl9LAogCiAJeworCQl7Im1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9z dWJzY3JpcHRpb24iLAorCQkJUEdDX1NJR0hVUCwKKwkJCVJFUExJQ0FUSU9OX1NVQlNDUklCRVJT LAorCQkJZ2V0dGV4dF9ub29wKCJNYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCBhcHBseSB3b3Jr ZXJzIHBlciBzdWJzY3JpcHRpb24uIiksCisJCQlOVUxMLAorCQl9LAorCQkmbWF4X3BhcmFsbGVs X2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiwKKwkJMiwgMCwgTUFYX0JBQ0tFTkRTLAor CQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKIAkJeyJsb2dfcm90YXRpb25fYWdlIiwgUEdD X1NJR0hVUCwgTE9HR0lOR19XSEVSRSwKIAkJCWdldHRleHRfbm9vcCgiU2V0cyB0aGUgYW1vdW50 IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2luZyAiCiAJCQkJCQkgImxvZyBmaWxlIHJvdGF0 aW9uLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl CmluZGV4IDg2OGQyMWMuLjRkMDFjYTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTM2MCw2ICszNjAsNyBAQAogI21heF9sb2dpY2FsX3Jl cGxpY2F0aW9uX3dvcmtlcnMgPSA0CSMgdGFrZW4gZnJvbSBtYXhfd29ya2VyX3Byb2Nlc3Nlcwog CQkJCQkjIChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKICNtYXhfc3luY193b3JrZXJzX3Blcl9z dWJzY3JpcHRpb24gPSAyCSMgdGFrZW4gZnJvbSBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3Jr ZXJzCisjbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiA9IDIJIyB0 YWtlbiBmcm9tIG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMKIAogCiAjLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBkYTQyN2Y0Li41MTQxYTY2IDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMKQEAgLTQ0ODEsNyArNDQ4MSw3IEBAIGdldFN1YnNjcmlwdGlvbnMoQXJjaGl2ZSAqZm91dCkK IAlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNDAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHF1ZXJ5LCAiIHMuc3Vic3RyZWFtLFxuIik7CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwgIiBmYWxzZSBBUyBzdWJzdHJlYW0sXG4iKTsKKwkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXVlcnksICIgJ2YnIEFTIHN1YnN0cmVhbSxcbiIpOwogCiAJaWYgKGZvdXQtPnJlbW90 ZVZlcnNpb24gPj0gMTUwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKQEAgLTQ2 MTgsOCArNDYxOCwxMCBAQCBkdW1wU3Vic2NyaXB0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFN1 YnNjcmlwdGlvbkluZm8gKnN1YmluZm8pCiAJaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJiaW5hcnks ICJ0IikgPT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIGJpbmFyeSA9IHRy dWUiKTsKIAotCWlmIChzdHJjbXAoc3ViaW5mby0+c3Vic3RyZWFtLCAiZiIpICE9IDApCisJaWYg KHN0cmNtcChzdWJpbmZvLT5zdWJzdHJlYW0sICJ0IikgPT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXVlcnksICIsIHN0cmVhbWluZyA9IG9uIik7CisJZWxzZSBpZiAoc3RyY21wKHN1Ymlu Zm8tPnN1YnN0cmVhbSwgInAiKSA9PSAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwg Iiwgc3RyZWFtaW5nID0gcGFyYWxsZWwiKTsKIAogCWlmIChzdHJjbXAoc3ViaW5mby0+c3VidHdv cGhhc2VzdGF0ZSwgdHdvX3BoYXNlX2Rpc2FibGVkKSAhPSAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwgIiwgdHdvX3BoYXNlID0gb24iKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNj cmlwdGlvbi5oCmluZGV4IDdiOTg3MTQuLjAxNmFmYmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19z dWJzY3JpcHRpb24uaApAQCAtODAsNyArODAsOCBAQCBDQVRBTE9HKHBnX3N1YnNjcmlwdGlvbiw2 MTAwLFN1YnNjcmlwdGlvblJlbGF0aW9uSWQpIEJLSV9TSEFSRURfUkVMQVRJT04gQktJX1JPVwog CWJvb2wJCXN1YmJpbmFyeTsJCS8qIFRydWUgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YW50cyB0aGUK IAkJCQkJCQkJICogcHVibGlzaGVyIHRvIHNlbmQgZGF0YSBpbiBiaW5hcnkgKi8KIAotCWJvb2wJ CXN1YnN0cmVhbTsJCS8qIFN0cmVhbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuICovCisJY2hh cgkJc3Vic3RyZWFtOwkJLyogU3RyZWFtIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gU2VlCisJ CQkJCQkJCSAqIFNVQlNUUkVBTV94eHggY29uc3RhbnRzLiAqLwogCiAJY2hhcgkJc3VidHdvcGhh c2VzdGF0ZTsJLyogU3RyZWFtIHR3by1waGFzZSB0cmFuc2FjdGlvbnMgKi8KIApAQCAtMTI0LDcg KzEyNSw4IEBAIHR5cGVkZWYgc3RydWN0IFN1YnNjcmlwdGlvbgogCWJvb2wJCWVuYWJsZWQ7CQkv KiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiBpcyBlbmFibGVkICovCiAJYm9vbAkJYmlu YXJ5OwkJCS8qIEluZGljYXRlcyBpZiB0aGUgc3Vic2NyaXB0aW9uIHdhbnRzIGRhdGEgaW4KIAkJ CQkJCQkJICogYmluYXJ5IGZvcm1hdCAqLwotCWJvb2wJCXN0cmVhbTsJCQkvKiBBbGxvdyBzdHJl YW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLiAqLworCWNoYXIJCXN0cmVhbTsJCQkvKiBB bGxvdyBzdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgorCQkJCQkJCQkgKiBTZWUg U1VCU1RSRUFNX3h4eCBjb25zdGFudHMuICovCiAJY2hhcgkJdHdvcGhhc2VzdGF0ZTsJLyogQWxs b3cgc3RyZWFtaW5nIHR3by1waGFzZSB0cmFuc2FjdGlvbnMgKi8KIAlib29sCQlkaXNhYmxlb25l cnI7CS8qIEluZGljYXRlcyBpZiB0aGUgc3Vic2NyaXB0aW9uIHNob3VsZCBiZQogCQkJCQkJCQkg KiBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGlmIGEgd29ya2VyIGVycm9yCkBAIC0xMzcsNiArMTM5 LDIxIEBAIHR5cGVkZWYgc3RydWN0IFN1YnNjcmlwdGlvbgogCQkJCQkJCQkgKiBzcGVjaWZpZWQg b3JpZ2luICovCiB9IFN1YnNjcmlwdGlvbjsKIAorLyogRGlzYWxsb3cgc3RyZWFtaW5nIGluLXBy b2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KKyNkZWZpbmUgU1VCU1RSRUFNX09GRiAnZicKKworLyoK KyAqIFN0cmVhbWluZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgYXJlIHdyaXR0ZW4gdG8gYSB0 ZW1wb3JhcnkgZmlsZSBhbmQKKyAqIGFwcGxpZWQgb25seSBhZnRlciB0aGUgdHJhbnNhY3Rpb24g aXMgY29tbWl0dGVkIG9uIHVwc3RyZWFtLgorICovCisjZGVmaW5lIFNVQlNUUkVBTV9PTiAndCcK KworLyoKKyAqIFN0cmVhbWluZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgYXJlIGFwcGxpZWQg aW1tZWRpYXRlbHkgdmlhIGEgcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlci4KKyAqLworI2RlZmlu ZSBTVUJTVFJFQU1fUEFSQUxMRUwgJ3AnCisKIGV4dGVybiBTdWJzY3JpcHRpb24gKkdldFN1YnNj cmlwdGlvbihPaWQgc3ViaWQsIGJvb2wgbWlzc2luZ19vayk7CiBleHRlcm4gdm9pZCBGcmVlU3Vi c2NyaXB0aW9uKFN1YnNjcmlwdGlvbiAqc3ViKTsKIGV4dGVybiB2b2lkIERpc2FibGVTdWJzY3Jp cHRpb24oT2lkIHN1YmlkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJl bS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZGVmcmVtLmgKaW5kZXggMWQzY2UyNC4uMDUzZWRk OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZGVmcmVtLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZGVmcmVtLmgKQEAgLTE1NSw2ICsxNTUsNyBAQCBleHRlcm4gTGlzdCAq ZGVmR2V0UXVhbGlmaWVkTmFtZShEZWZFbGVtICpkZWYpOwogZXh0ZXJuIFR5cGVOYW1lICpkZWZH ZXRUeXBlTmFtZShEZWZFbGVtICpkZWYpOwogZXh0ZXJuIGludAlkZWZHZXRUeXBlTGVuZ3RoKERl ZkVsZW0gKmRlZik7CiBleHRlcm4gTGlzdCAqZGVmR2V0U3RyaW5nTGlzdChEZWZFbGVtICpkZWYp OworZXh0ZXJuIGNoYXIgZGVmR2V0U3RyZWFtaW5nTW9kZShEZWZFbGVtICpkZWYpOwogZXh0ZXJu IHZvaWQgZXJyb3JDb25mbGljdGluZ0RlZkVsZW0oRGVmRWxlbSAqZGVmZWwsIFBhcnNlU3RhdGUg KnBzdGF0ZSkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiAKICNlbmRpZgkJCQkJCQkvKiBERUZS RU1fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbGxhdW5j aGVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaAppbmRleCBm MWUyODIxLi5kNTEzZWY1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dp Y2FsbGF1bmNoZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNo ZXIuaApAQCAtMTQsNiArMTQsNyBAQAogCiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9sb2dp Y2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9zeW5j X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3Bh cmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjsKIAogZXh0ZXJuIHZvaWQgQXBw bHlMYXVuY2hlclJlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgQXBwbHlMYXVuY2hlck1haW4o RGF0dW0gbWFpbl9hcmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9n aWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAppbmRl eCA3ZWFhNGM5Li4xZGE3YjAxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8u aApAQCAtMzIsMTIgKzMyLDE3IEBACiAgKgogICogTE9HSUNBTFJFUF9QUk9UT19UV09QSEFTRV9W RVJTSU9OX05VTSBpcyB0aGUgbWluaW11bSBwcm90b2NvbCB2ZXJzaW9uIHdpdGgKICAqIHN1cHBv cnQgZm9yIHR3by1waGFzZSBjb21taXQgZGVjb2RpbmcgKGF0IHByZXBhcmUgdGltZSkuIEludHJv ZHVjZWQgaW4gUEcxNS4KKyAqCisgKiBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9W RVJTSU9OX05VTSBpcyB0aGUgbWluaW11bSBwcm90b2NvbCB2ZXJzaW9uCisgKiB3aGVyZSB3ZSBz dXBwb3J0IGFwcGx5aW5nIGxhcmdlIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgaW4gcGFyYWxsZWwu CisgKiBJbnRyb2R1Y2VkIGluIFBHMTYuCiAgKi8KICNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19N SU5fVkVSU0lPTl9OVU0gMQogI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1ZFUlNJT05fTlVNIDEK ICNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9OVU0gMgogI2RlZmluZSBM T0dJQ0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIDMKLSNkZWZpbmUgTE9HSUNBTFJF UF9QUk9UT19NQVhfVkVSU0lPTl9OVU0gTE9HSUNBTFJFUF9QUk9UT19UV09QSEFTRV9WRVJTSU9O X05VTQorI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05V TSA0CisjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fTUFYX1ZFUlNJT05fTlVNIExPR0lDQUxSRVBf UFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNCiAKIC8qCiAgKiBMb2dpY2FsIG1lc3Nh Z2UgdHlwZXMKQEAgLTE3NSw2ICsxODAsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFJv bGxiYWNrUHJlcGFyZWRUeG5EYXRhCiAJY2hhcgkJZ2lkW0dJRFNJWkVdOwogfSBMb2dpY2FsUmVw Um9sbGJhY2tQcmVwYXJlZFR4bkRhdGE7CiAKKy8qCisgKiBUcmFuc2FjdGlvbiBwcm90b2NvbCBp bmZvcm1hdGlvbiBmb3Igc3RyZWFtIGFib3J0LgorICovCit0eXBlZGVmIHN0cnVjdCBMb2dpY2Fs UmVwU3RyZWFtQWJvcnREYXRhCit7CisJVHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25J ZCBzdWJ4aWQ7CisJWExvZ1JlY1B0cglhYm9ydF9sc247CisJVGltZXN0YW1wVHogYWJvcnRfdGlt ZTsKK30gTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YTsKKwogZXh0ZXJuIHZvaWQgbG9naWNhbHJl cF93cml0ZV9iZWdpbihTdHJpbmdJbmZvIG91dCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKTsKIGV4 dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9iZWdpbihTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkg IExvZ2ljYWxSZXBCZWdpbkRhdGEgKmJlZ2luX2RhdGEpOwpAQCAtMjQ2LDkgKzI2MiwxMyBAQCBl eHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBvdXQs IFJlb3JkZXJCdWZmZXJUWE4gKnR4bgogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgbG9naWNhbHJlcF9y ZWFkX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBpbiwKIAkJCQkJCQkJCQkJCSAgIExvZ2ljYWxS ZXBDb21taXREYXRhICpjb21taXRfZGF0YSk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRl X3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCi0JCQkJCQkJ CQkJICBUcmFuc2FjdGlvbklkIHN1YnhpZCk7Ci1leHRlcm4gdm9pZCBsb2dpY2FscmVwX3JlYWRf c3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gaW4sIFRyYW5zYWN0aW9uSWQgKnhpZCwKLQkJCQkJCQkJ CQkgVHJhbnNhY3Rpb25JZCAqc3VieGlkKTsKKwkJCQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgc3Vi eGlkLAorCQkJCQkJCQkJCSAgWExvZ1JlY1B0ciBhYm9ydF9sc24sCisJCQkJCQkJCQkJICBUaW1l c3RhbXBUeiBhYm9ydF90aW1lLAorCQkJCQkJCQkJCSAgYm9vbCB3cml0ZV9hYm9ydF9pbmZvKTsK K2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwK KwkJCQkJCQkJCQkgTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YSAqYWJvcnRfZGF0YSwKKwkJCQkJ CQkJCQkgYm9vbCByZWFkX2Fib3J0X2luZm8pOwogZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfbWVz c2FnZV90eXBlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbik7CiAKICNlbmRpZgkJCQkJCQkvKiBM T0dJQ0FMX1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWx3b3JrZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaApp bmRleCBjZDFiNmU4Li5kYzY4Y2Q4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2Fsd29ya2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdv cmtlci5oCkBAIC0xMiw4ICsxMiwxNiBAQAogI2lmbmRlZiBMT0dJQ0FMV09SS0VSX0gKICNkZWZp bmUgTE9HSUNBTFdPUktFUl9ICiAKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworZXh0ZXJuIFBHRExM SU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQYXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRpbmc7 CisKIGV4dGVybiB2b2lkIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZyk7CitleHRlcm4g dm9pZCBQYXJhbGxlbEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZyk7CiAKIGV4dGVybiBi b29sIElzTG9naWNhbFdvcmtlcih2b2lkKTsKK2V4dGVybiBib29sIElzTG9naWNhbFBhcmFsbGVs QXBwbHlXb3JrZXIodm9pZCk7CitleHRlcm4gdm9pZCBIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2Fn ZUludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIEhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdl cyh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIExPR0lDQUxXT1JLRVJfSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9vcmlnaW4uaAppbmRleCAyYTUwZDEwLi5jN2IxYWRmIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9v cmlnaW4uaApAQCAtNTMsNyArNTMsNyBAQCBleHRlcm4gWExvZ1JlY1B0ciByZXBsb3JpZ2luX2dl dF9wcm9ncmVzcyhSZXBPcmlnaW5JZCBub2RlLCBib29sIGZsdXNoKTsKIAogZXh0ZXJuIHZvaWQg cmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UoWExvZ1JlY1B0ciByZW1vdGVfY29tbWl0LAogCQkJ CQkJCQkJICAgWExvZ1JlY1B0ciBsb2NhbF9jb21taXQpOwotZXh0ZXJuIHZvaWQgcmVwbG9yaWdp bl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpOworZXh0ZXJuIHZvaWQgcmVwbG9yaWdp bl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUsIGludCBhY3F1aXJlZF9ieSk7CiBleHRl cm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fcmVzZXQodm9pZCk7CiBleHRlcm4gWExvZ1JlY1B0 ciByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGJvb2wgZmx1c2gpOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vcGdvdXRwdXQuaAppbmRleCAwMjAyNzU1Li4zYzMwZGE4IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0LmgKQEAgLTI2LDcgKzI2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUEdPdXRw dXREYXRhCiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRp b25zOwogCWJvb2wJCWJpbmFyeTsKLQlib29sCQlzdHJlYW1pbmc7CisJY2hhcgkJc3RyZWFtaW5n OwogCWJvb2wJCW1lc3NhZ2VzOwogCWJvb2wJCXR3b19waGFzZTsKIAljaGFyCSAgICpvcmlnaW47 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5kZXggYjIzZDhjYy4uYjJh NzAyOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5o CisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMzAxLDYg KzMwMSw3IEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJUWE4KIAl7CiAJCVRpbWVzdGFt cFR6IGNvbW1pdF90aW1lOwogCQlUaW1lc3RhbXBUeiBwcmVwYXJlX3RpbWU7CisJCVRpbWVzdGFt cFR6IGFib3J0X3RpbWU7CiAJfQkJCXhhY3RfdGltZTsKIAogCS8qCkBAIC02NjMsOSArNjY0LDEx IEBAIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJBc3NpZ25DaGlsZChSZW9yZGVyQnVmZmVyICpy YiwgVHJhbnNhY3Rpb25JZCB4aWQsCiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQ29tbWl0Q2hp bGQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJIFRyYW5z YWN0aW9uSWQgc3VieGlkLCBYTG9nUmVjUHRyIGNvbW1pdF9sc24sCiAJCQkJCQkJCQkgWExvZ1Jl Y1B0ciBlbmRfbHNuKTsKLWV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVm ZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKTsKK2V4dGVybiB2b2lk IFJlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQs IFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCSAgIFRpbWVzdGFtcFR6IGFib3J0X3RpbWUpOwogZXh0 ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFib3J0T2xkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2Fj dGlvbklkIG9sZGVzdFJ1bm5pbmdYaWQpOwotZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckZvcmdl dChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKTsK K2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5z YWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJVGltZXN0YW1wVHogYWJvcnRf dGltZSk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVySW52YWxpZGF0ZShSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKTsKIAogZXh0ZXJuIHZvaWQg UmVvcmRlckJ1ZmZlclNldEJhc2VTbmFwc2hvdChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rp b25JZCB4aWQsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZl ci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaAppbmRleCA5MzM5ZjI5 Li4wYzhiYmRkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZl ci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKQEAgLTE4Miw3 ICsxODIsNyBAQCB0eXBlZGVmIHN0cnVjdAogCQkJdWludDMyCQlwcm90b192ZXJzaW9uOwkvKiBM b2dpY2FsIHByb3RvY29sIHZlcnNpb24gKi8KIAkJCUxpc3QJICAgKnB1YmxpY2F0aW9uX25hbWVz OwkvKiBTdHJpbmcgbGlzdCBvZiBwdWJsaWNhdGlvbnMgKi8KIAkJCWJvb2wJCWJpbmFyeTsgLyog QXNrIHB1Ymxpc2hlciB0byB1c2UgYmluYXJ5ICovCi0JCQlib29sCQlzdHJlYW1pbmc7CS8qIFN0 cmVhbWluZyBvZiBsYXJnZSB0cmFuc2FjdGlvbnMgKi8KKwkJCWNoYXIJICAgKnN0cmVhbWluZ19z dHI7CS8qIFN0cmVhbWluZyBvZiBsYXJnZSB0cmFuc2FjdGlvbnMgKi8KIAkJCWJvb2wJCXR3b3Bo YXNlOwkvKiBTdHJlYW1pbmcgb2YgdHdvLXBoYXNlIHRyYW5zYWN0aW9ucyBhdAogCQkJCQkJCQkJ ICogcHJlcGFyZSB0aW1lICovCiAJCQljaGFyCSAgICpvcmlnaW47IC8qIE9ubHkgcHVibGlzaCBk YXRhIG9yaWdpbmF0aW5nIGZyb20gdGhlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi93b3JrZXJfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9p bnRlcm5hbC5oCmluZGV4IDJiNzExNGYuLmI2NjdkYjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3dvcmtlcl9pbnRlcm5hbC5oCkBAIC0xNyw4ICsxNywxMiBAQAogI2luY2x1ZGUgImFjY2Vz cy94bG9nZGVmcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgiCiAjaW5j bHVkZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9m aWxlc2V0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9z aG1fbXEuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobV90b2MuaCIKICNpbmNsdWRlICJzdG9yYWdl L3NwaW4uaCIKIAogCkBAIC02MCw2ICs2NCwxNSBAQCB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVw V29ya2VyCiAJICovCiAJRmlsZVNldCAgICAqc3RyZWFtX2ZpbGVzZXQ7CiAKKwkvKgorCSAqIFBJ RCBvZiBsZWFkZXIgYXBwbHkgd29ya2VyIGlmIHRoaXMgc2xvdCBpcyB1c2VkIGZvciBhIHBhcmFs bGVsIGFwcGx5CisJICogd29ya2VyLCBJbnZhbGlkUGlkIG90aGVyd2lzZS4KKwkgKi8KKwlwaWRf dAkJYXBwbHlfbGVhZGVyX3BpZDsKKworCS8qIEluZGljYXRlcyB3aGV0aGVyIGFwcGx5IGNhbiBi ZSBwZXJmb3JtZWQgaW4gcGFyYWxsZWwuICovCisJYm9vbAkJcGFyYWxsZWxfYXBwbHk7CisKIAkv KiBTdGF0cy4gKi8KIAlYTG9nUmVjUHRyCWxhc3RfbHNuOwogCVRpbWVzdGFtcFR6IGxhc3Rfc2Vu ZF90aW1lOwpAQCAtNjgsOSArODEsMTI3IEBAIHR5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBXb3Jr ZXIKIAlUaW1lc3RhbXBUeiByZXBseV90aW1lOwogfSBMb2dpY2FsUmVwV29ya2VyOwogCisvKiBT dHJ1Y3QgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIGFwcGx5IGVycmNvbnRleHQgaW5mb3JtYXRp b24gKi8KK3R5cGVkZWYgc3RydWN0IEFwcGx5RXJyb3JDYWxsYmFja0FyZworeworCUxvZ2ljYWxS ZXBNc2dUeXBlIGNvbW1hbmQ7CS8qIDAgaWYgaW52YWxpZCAqLworCUxvZ2ljYWxSZXBSZWxNYXBF bnRyeSAqcmVsOworCisJLyogUmVtb3RlIG5vZGUgaW5mb3JtYXRpb24gKi8KKwlpbnQJCQlyZW1v dGVfYXR0bnVtOwkvKiAtMSBpZiBpbnZhbGlkICovCisJVHJhbnNhY3Rpb25JZCByZW1vdGVfeGlk OworCVhMb2dSZWNQdHIJZmluaXNoX2xzbjsKKwljaGFyCSAgICpvcmlnaW5fbmFtZTsKK30gQXBw bHlFcnJvckNhbGxiYWNrQXJnOworCisvKiBTdGF0ZSBvZiB0aGUgdHJhbnNhY3Rpb24gaW4gcGFy YWxsZWwgYXBwbHkgd29ya2VyICovCit0eXBlZGVmIGVudW0gUGFyYWxsZWxUcmFuc1N0YXRlCit7 CisJUEFSQUxMRUxfVFJBTlNfVU5LTk9XTiwKKwlQQVJBTExFTF9UUkFOU19TVEFSVEVELAorCVBB UkFMTEVMX1RSQU5TX0ZJTklTSEVECit9IFBhcmFsbGVsVHJhbnNTdGF0ZTsKKworLyoKKyAqIFN0 cnVjdCBmb3Igc2hhcmluZyBpbmZvcm1hdGlvbiBiZXR3ZWVuIGxlYWRlciBhcHBseSB3b3JrZXIg YW5kIHBhcmFsbGVsCisgKiBhcHBseSB3b3JrZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBQYXJh bGxlbEFwcGx5V29ya2VyU2hhcmVkCit7CisJc2xvY2tfdAkJbXV0ZXg7CisKKwlUcmFuc2FjdGlv bklkCXhpZDsKKworCS8qCisJICogRmxhZyB1c2VkIHRvIGVuc3VyZSBjb21taXQgb3JkZXJpbmcu CisJICoKKwkgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgc2V0IGl0IHRvIFBBUkFM TEVMX1RSQU5TX0ZJTklTSEVEIGFmdGVyCisJICogaGFuZGxpbmcgdGhlIHRyYW5zYWN0aW9uIGZp bmlzaCBjb21tYW5kcyB3aGlsZSB0aGUgYXBwbHkgbGVhZGVyIHdpbGwKKwkgKiB3YWl0IGZvciBp dCB0byBiZWNvbWUgUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQgYmVmb3JlIHByb2NlZWRpbmcgaW4K KwkgKiB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZHMgKGUuZy4gU1RSRUFNX0NPTU1JVC9TVFJF QU1fUFJFUEFSRSkuCisJICovCisJUGFyYWxsZWxUcmFuc1N0YXRlCQl4YWN0X3N0YXRlOworCisJ LyogVW5pcXVlIGlkZW50aWZpZXJzIGluIHRoZSBjdXJyZW50IHN1YnNjcmlwdGlvbiB0aGF0IHVz ZWQgdG8gbG9jay4gKi8KKwl1aW50MTYJCXN0cmVhbV9sb2NrX2lkOworCXVpbnQxNgkJdHJhbnNh Y3Rpb25fbG9ja19pZDsKKworCS8qIEluZm9ybWF0aW9uIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcg TG9naWNhbFJlcFdvcmtlciBzbG90LiAqLworCXVpbnQxNgkJbG9naWNhbHJlcF93b3JrZXJfZ2Vu ZXJhdGlvbjsKKworCWludAkJCWxvZ2ljYWxyZXBfd29ya2VyX3Nsb3Rfbm87CisKKwkvKgorCSAq IEluZGljYXRlcyB3aGV0aGVyIHRoZXJlIGFyZSBwZW5kaW5nIG1lc3NhZ2VzIGluIHRoZSBxdWV1 ZS4gVGhlIHBhcmFsbGVsCisJICogYXBwbHkgd29ya2VyIHdpbGwgY2hlY2sgaXQgYmVmb3JlIHN0 YXJ0aW5nIHRvIHdhaXQuCisJICovCisJcGdfYXRvbWljX3VpbnQzMglsZWZ0X21lc3NhZ2U7CisK KwkvKiBXaGV0aGVyIHRoZXJlIGlzIHBhcnRpYWxseSBzZW50IG1lc3NhZ2UgbGVmdCBpbiB0aGUg cXVldWUuICovCisJYm9vbAkJcGFydGlhbF9zZW50X21lc3NhZ2U7CisKKwkvKgorCSAqIFRoZSBs ZWFkZXIgYXBwbHkgd29ya2VyIHdpbGwgc2VyaWFsaXplIGNoYW5nZXMgdG8gdGhlIGZpbGUgYW5k IHNoYXJlIHRoZQorCSAqIGZpbGUgd2l0aCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdoZW4g cHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24KKwkgKiBmaW5pc2ggY29tbWFuZC4gQW5kIHRoZW4g dGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3aWxsIGFwcGx5IGFsbCB0aGUKKwkgKiBzcG9vbGVk IG1lc3NhZ2VzLgorCSAqCisJICogRG9uJ3QgdXNlIFNoYXJlZEZpbGVTZXQgaGVyZSBhcyB3ZSBu ZWVkIHRoZSBmaWxlc2V0IHRvIHN1cnZpdmUgYWZ0ZXIKKwkgKiByZWxlYXNpbmcgdGhlIHNoYXJl ZCBtZW1vcnkgc28gdGhhdCB0aGUgbGVhZGVyIGNhbiByZS11c2UgdGhlIGZpbGVzZXQKKwkgKiBm b3IgbmV4dCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uCisJICovCisJYm9vbAkJZmlsZXNldF92YWxp ZDsKKwlGaWxlU2V0CQlmaWxlc2V0OworfSBQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkOworCisv KgorICogSW5mb3JtYXRpb24gd2hpY2ggaXMgdXNlZCB0byBtYW5hZ2UgdGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxBcHBseVdvcmtlckluZm8K K3sKKwlzaG1fbXFfaGFuZGxlICptcV9oYW5kbGU7CisKKwkvKgorCSAqIFRoZSBxdWV1ZSB1c2Vk IHRvIHRyYW5zZmVyIGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtl cgorCSAqIHRvIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLiBOVUxMIGlmIHRoZSBwYXJhbGxlbCBh cHBseSB3b3JrZXIgZXhpdGVkCisJICogY2xlYW5seS4KKwkgKi8KKwlzaG1fbXFfaGFuZGxlICpl cnJvcl9tcV9oYW5kbGU7CisKKwlkc21fc2VnbWVudCAqZHNtX3NlZzsKKworCWJvb2wJCXNlcmlh bGl6ZV9jaGFuZ2VzOworCisJLyoKKwkgKiBVc2VkIHRvIHNhdmUgdGhlIG1lc3NhZ2UgdGhhdCB3 YXMgb25seSBwYXJ0aWFsbHkgc2VudCB0byBwYXJhbGxlbCBhcHBseQorCSAqIHdvcmtlci4KKwkg Ki8KKwl2b2lkCSAgICpwZW5kaW5nX21zZzsKKwlTaXplCQlwZW5kaW5nX2xlbmd0aDsKKworCS8q CisJICogVHJ1ZSBpZiB0aGUgd29ya2VyIGlzIGJlaW5nIHVzZWQgdG8gcHJvY2VzcyBhIHBhcmFs bGVsIGFwcGx5CisJICogdHJhbnNhY3Rpb24uIEZhbHNlIGluZGljYXRlcyB0aGlzIHdvcmtlciBp cyBhdmFpbGFibGUgZm9yIHJlLXVzZS4KKwkgKi8KKwlib29sCQlpbl91c2U7CisKKwlQYXJhbGxl bEFwcGx5V29ya2VyU2hhcmVkICpzaGFyZWQ7Cit9IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvOwor CiAvKiBNYWluIG1lbW9yeSBjb250ZXh0IGZvciBhcHBseSB3b3JrZXIuIFBlcm1hbmVudCBkdXJp bmcgd29ya2VyIGxpZmV0aW1lLiAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIE1lbW9yeUNvbnRleHQg QXBwbHlDb250ZXh0OwogCitleHRlcm4gUEdETExJTVBPUlQgTWVtb3J5Q29udGV4dCBBcHBseU1l c3NhZ2VDb250ZXh0OworCitleHRlcm4gUEdETExJTVBPUlQgRXJyb3JDb250ZXh0Q2FsbGJhY2sg KmFwcGx5X2Vycm9yX2NvbnRleHRfc3RhY2s7CitleHRlcm4gUEdETExJTVBPUlQgQXBwbHlFcnJv ckNhbGxiYWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZzsKKworZXh0ZXJuIFBHRExMSU1Q T1JUIGJvb2wgTXlTdWJzY3JpcHRpb25WYWxpZDsKKworZXh0ZXJuIFBHRExMSU1QT1JUIFBhcmFs bGVsQXBwbHlXb3JrZXJTaGFyZWQgKk15UGFyYWxsZWxTaGFyZWQ7CisKK2V4dGVybiBQR0RMTElN UE9SVCBMaXN0ICpzdWJ4YWN0bGlzdDsKKwogLyogbGlicHFyZWNlaXZlciBjb25uZWN0aW9uICov CiBleHRlcm4gUEdETExJTVBPUlQgc3RydWN0IFdhbFJlY2VpdmVyQ29ubiAqTG9nUmVwV29ya2Vy V2FsUmN2Q29ubjsKIApAQCAtNzksMTggKzIxMCwyNCBAQCBleHRlcm4gUEdETExJTVBPUlQgU3Vi c2NyaXB0aW9uICpNeVN1YnNjcmlwdGlvbjsKIGV4dGVybiBQR0RMTElNUE9SVCBMb2dpY2FsUmVw V29ya2VyICpNeUxvZ2ljYWxSZXBXb3JrZXI7CiAKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGlu X3JlbW90ZV90cmFuc2FjdGlvbjsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIGluX3N0cmVhbWVk X3RyYW5zYWN0aW9uOworZXh0ZXJuIFBHRExMSU1QT1JUIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZv ICpzdHJlYW1fYXBwbHlfd29ya2VyOworZXh0ZXJuIFBHRExMSU1QT1JUIFRyYW5zYWN0aW9uSWQg c3RyZWFtX3hpZDsKIAogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfYXR0YWNoKGludCBz bG90KTsKIGV4dGVybiBMb2dpY2FsUmVwV29ya2VyICpsb2dpY2FscmVwX3dvcmtlcl9maW5kKE9p ZCBzdWJpZCwgT2lkIHJlbGlkLAogCQkJCQkJCQkJCQkJYm9vbCBvbmx5X3J1bm5pbmcpOwogZXh0 ZXJuIExpc3QgKmxvZ2ljYWxyZXBfd29ya2Vyc19maW5kKE9pZCBzdWJpZCwgYm9vbCBvbmx5X3J1 bm5pbmcpOwotZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBP aWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsCi0JCQkJCQkJCQkgT2lkIHVzZXJpZCwgT2lk IHJlbGlkKTsKK2V4dGVybiBib29sIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwg T2lkIHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLAorCQkJCQkJCQkJIE9pZCB1c2VyaWQsIE9p ZCByZWxpZCwKKwkJCQkJCQkJCSBkc21faGFuZGxlIHN1Yndvcmtlcl9kc20pOwogZXh0ZXJuIHZv aWQgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCk7CitleHRlcm4g dm9pZCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2J5X3Nsb3QoaW50IHNsb3Rfbm8sIHVpbnQxNiBn ZW5lcmF0aW9uKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cChPaWQgc3Vi aWQsIE9pZCByZWxpZCk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl93YWtldXBfcHRy KExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcik7CiAKIGV4dGVybiBpbnQJbG9naWNhbHJlcF9zeW5j X3dvcmtlcl9jb3VudChPaWQgc3ViaWQpOworZXh0ZXJuIGludAlsb2dpY2FscmVwX3BhcmFsbGVs X2FwcGx5X3dvcmtlcl9jb3VudChPaWQgc3ViaWQpOwogCiBleHRlcm4gdm9pZCBSZXBsaWNhdGlv bk9yaWdpbk5hbWVGb3JMb2dpY2FsUmVwKE9pZCBzdWJvaWQsIE9pZCByZWxpZCwKIAkJCQkJCQkJ CQkJICAgY2hhciAqb3JpZ2lubmFtZSwgU2l6ZSBzem9yaWdpbm5hbWUpOwpAQCAtMTAzLDEwICsy NDAsNjEgQEAgZXh0ZXJuIHZvaWQgcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhYTG9nUmVjUHRyIGN1 cnJlbnRfbHNuKTsKIGV4dGVybiB2b2lkIGludmFsaWRhdGVfc3luY2luZ190YWJsZV9zdGF0ZXMo RGF0dW0gYXJnLCBpbnQgY2FjaGVpZCwKIAkJCQkJCQkJCQkJdWludDMyIGhhc2h2YWx1ZSk7CiAK K2V4dGVybiB2b2lkIHNlcmlhbGl6ZV9zdHJlYW1fc3RhcnQoVHJhbnNhY3Rpb25JZCB4aWQsIGJv b2wgZmlyc3Rfc2VnbWVudCk7CitleHRlcm4gdm9pZCBzZXJpYWxpemVfc3RyZWFtX3N0b3AoVHJh bnNhY3Rpb25JZCB4aWQpOworCisvKiBDb21tb24gc3RyZWFtaW5nIGZ1bmN0aW9uIHRvIGFwcGx5 IGFsbCB0aGUgc3Bvb2xlZCBtZXNzYWdlcyAqLworZXh0ZXJuIHZvaWQgYXBwbHlfc3Bvb2xlZF9t ZXNzYWdlcyhGaWxlU2V0ICpzdHJlYW1fZmlsZXNldCwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJ CQkJCSAgIFhMb2dSZWNQdHIgbHNuKTsKKworZXh0ZXJuIHZvaWQgYXBwbHlfZGlzcGF0Y2goU3Ry aW5nSW5mbyBzKTsKKworZXh0ZXJuIHZvaWQgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lk KTsKKworZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZUFwcGx5V29ya2VyKHZvaWQpOworCitleHRlcm4g dm9pZCBzdHJlYW1fd3JpdGVfY2hhbmdlKGNoYXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMpOworCisv KiBGdW5jdGlvbiBmb3IgYXBwbHkgZXJyb3IgY2FsbGJhY2sgKi8KK2V4dGVybiB2b2lkIGFwcGx5 X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CisKKy8qIFBhcmFsbGVsIGFwcGx5IHdvcmtlciBz ZXR1cCBhbmQgaW50ZXJhY3Rpb25zICovCitleHRlcm4gdm9pZCBwYXJhbGxlbF9hcHBseV9zdGFy dF93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpOworZXh0ZXJuIFBhcmFsbGVsQXBwbHlXb3JrZXJJ bmZvICpwYXJhbGxlbF9hcHBseV9maW5kX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCk7CitleHRl cm4gdm9pZCBwYXJhbGxlbF9hcHBseV9zZXRfeGFjdF9zdGF0ZShQYXJhbGxlbEFwcGx5V29ya2Vy U2hhcmVkICp3c2hhcmVkLAorCQkJCQkJCQkJCSAgUGFyYWxsZWxUcmFuc1N0YXRlIGluX3hhY3Qp OworZXh0ZXJuIHZvaWQgcGFyYWxsZWxfYXBwbHlfZnJlZV93b3JrZXIoUGFyYWxsZWxBcHBseVdv cmtlckluZm8gKndpbmZvLAorCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgc3Rv cF93b3JrZXIpOworZXh0ZXJuIHZvaWQgcGFyYWxsZWxfYXBwbHlfd2FpdF9mb3JfeGFjdF9maW5p c2goUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCk7CitleHRlcm4gdm9pZCBwYXJh bGxlbF9hcHBseV9zZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTaXpl IG5ieXRlcywKKwkJCQkJCQkJCSBjb25zdCB2b2lkICpkYXRhKTsKKworZXh0ZXJuIHZvaWQgcGFy YWxsZWxfYXBwbHlfc3RhcnRfc3VidHJhbnMoVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZCwgVHJh bnNhY3Rpb25JZCB0b3BfeGlkKTsKK2V4dGVybiB2b2lkIHBhcmFsbGVsX2FwcGx5X3N0cmVhbV9h Ym9ydChMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRhKTsKK2V4dGVybiB2b2lk IHBhcmFsbGVsX2FwcGx5X3NldF9maWxlc2V0KFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndz aGFyZWQsCisJCQkJCQkJCQkgICBib29sIGZpbGVzZXRfdmFsaWQpOworZXh0ZXJuIHZvaWQgcGFy YWxsZWxfYXBwbHlfbG9jayh1aW50MTYgbG9ja2lkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CitleHRl cm4gdm9pZCBwYXJhbGxlbF9hcHBseV91bmxvY2sodWludDE2IGxvY2tpZCwgTE9DS01PREUgbG9j a21vZGUpOworCisjZGVmaW5lIGlzUGFyYWxsZWxBcHBseVdvcmtlcih3b3JrZXIpICgod29ya2Vy KS0+YXBwbHlfbGVhZGVyX3BpZCAhPSBJbnZhbGlkUGlkKQorCiBzdGF0aWMgaW5saW5lIGJvb2wK IGFtX3RhYmxlc3luY193b3JrZXIodm9pZCkKIHsKIAlyZXR1cm4gT2lkSXNWYWxpZChNeUxvZ2lj YWxSZXBXb3JrZXItPnJlbGlkKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sCithbV9sZWFkZXJf YXBwbHlfd29ya2VyKHZvaWQpCit7CisJcmV0dXJuICghT2lkSXNWYWxpZChNeUxvZ2ljYWxSZXBX b3JrZXItPnJlbGlkKSAmJgorCQkJIWlzUGFyYWxsZWxBcHBseVdvcmtlcihNeUxvZ2ljYWxSZXBX b3JrZXIpKTsKK30KKworc3RhdGljIGlubGluZSBib29sCithbV9wYXJhbGxlbF9hcHBseV93b3Jr ZXIodm9pZCkKK3sKKwlyZXR1cm4gaXNQYXJhbGxlbEFwcGx5V29ya2VyKE15TG9naWNhbFJlcFdv cmtlcik7Cit9CisKICNlbmRpZgkJCQkJCQkvKiBXT1JLRVJfSU5URVJOQUxfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2NzaWduYWwuaAppbmRleCBlZTYzNjkwLi45M2E1MWY0IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3By b2NzaWduYWwuaApAQCAtMzUsNiArMzUsNyBAQCB0eXBlZGVmIGVudW0KIAlQUk9DU0lHX1dBTFNO RF9JTklUX1NUT1BQSU5HLAkvKiBhc2sgd2Fsc2VuZGVycyB0byBwcmVwYXJlIGZvciBzaHV0ZG93 biAgKi8KIAlQUk9DU0lHX0JBUlJJRVIsCQkJLyogZ2xvYmFsIGJhcnJpZXIgaW50ZXJydXB0ICAq LwogCVBST0NTSUdfTE9HX01FTU9SWV9DT05URVhULCAvKiBhc2sgYmFja2VuZCB0byBsb2cgdGhl IG1lbW9yeSBjb250ZXh0cyAqLworCVBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FHRSwgLyog TWVzc2FnZSBmcm9tIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgKi8KIAogCS8qIFJlY292ZXJ5IGNv bmZsaWN0IHJlYXNvbnMgKi8KIAlQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvd2FpdF9ldmVudC5oCmluZGV4IDZmMmQ1NjEuLmM2NTFhZDIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy93YWl0 X2V2ZW50LmgKQEAgLTQyLDYgKzQyLDcgQEAgdHlwZWRlZiBlbnVtCiAJV0FJVF9FVkVOVF9DSEVD S1BPSU5URVJfTUFJTiwKIAlXQUlUX0VWRU5UX0xPR0lDQUxfQVBQTFlfTUFJTiwKIAlXQUlUX0VW RU5UX0xPR0lDQUxfTEFVTkNIRVJfTUFJTiwKKwlXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxf QVBQTFlfTUFJTiwKIAlXQUlUX0VWRU5UX1JFQ09WRVJZX1dBTF9TVFJFQU0sCiAJV0FJVF9FVkVO VF9TWVNMT0dHRVJfTUFJTiwKIAlXQUlUX0VWRU5UX1dBTF9SRUNFSVZFUl9NQUlOLApAQCAtMTA1 LDYgKzEwNiw3IEBAIHR5cGVkZWYgZW51bQogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JVQ0tFVFNf QUxMT0NBVEUsCiAJV0FJVF9FVkVOVF9IQVNIX0dST1dfQlVDS0VUU19FTEVDVCwKIAlXQUlUX0VW RU5UX0hBU0hfR1JPV19CVUNLRVRTX1JFSU5TRVJULAorCVdBSVRfRVZFTlRfTE9HSUNBTF9QQVJB TExFTF9BUFBMWV9TVEFURV9DSEFOR0UsCiAJV0FJVF9FVkVOVF9MT0dJQ0FMX1NZTkNfREFUQSwK IAlXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19TVEFURV9DSEFOR0UsCiAJV0FJVF9FVkVOVF9NUV9J TlRFUk5BTCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0 aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dAppbmRl eCBjMTNkMjE4Li4wZjY1Y2M3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N1YnNjcmlwdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3Jp cHRpb24ub3V0CkBAIC0yNTUsOSArMjU1LDkgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwogKDEgcm93KQogCiBEUk9QIFNVQlNDUklQ VElPTiByZWdyZXNzX3Rlc3RzdWI7Ci0tLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVh bgorLS0gZmFpbCAtIHN0cmVhbWluZyBtdXN0IGJlIGJvb2xlYW4gb3IgJ3BhcmFsbGVsJwogQ1JF QVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jl c3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxz ZSwgc3RyZWFtaW5nID0gZm9vKTsKLUVSUk9SOiAgc3RyZWFtaW5nIHJlcXVpcmVzIGEgQm9vbGVh biB2YWx1ZQorRVJST1I6ICBzdHJlYW1pbmcgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlIG9yICJw YXJhbGxlbCIKIC0tIG5vdyBpdCB3b3JrcwogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rl c3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElP TiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gdHJ1ZSk7CiBXQVJO SU5HOiAgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkLCBidXQgaXMgbm90IGNvbm5lY3RlZApAQCAt MjY5LDYgKzI2OSwxNCBAQCBISU5UOiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0 IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xvdCwgZQogIHJlZ3Jlc3NfdGVzdHN1 YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBm ICAgICAgfCB0ICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8 IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlz dCB8IDAvMAogKDEgcm93KQogCitBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNF VCAoc3RyZWFtaW5nID0gcGFyYWxsZWwpOworXGRScysKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0 cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwg U3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBM U04gCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc190ZXN0c3ViIHwgcmVn cmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8 IHAgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAg IHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8w CisoMSByb3cpCisKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzdHJl YW1pbmcgPSBmYWxzZSk7CiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAo c2xvdF9uYW1lID0gTk9ORSk7CiBcZFJzKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvc3Vic2NyaXB0aW9uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5z cWwKaW5kZXggZWFlYWRlOC4uNzk5MWFiZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvc3Vic2NyaXB0aW9uLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzY3JpcHRp b24uc3FsCkBAIC0xNjcsNyArMTY3LDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVz dHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwogCiBEUk9QIFNVQlNDUklQVElPTiByZWdyZXNz X3Rlc3RzdWI7CiAKLS0tIGZhaWwgLSBzdHJlYW1pbmcgbXVzdCBiZSBib29sZWFuCistLSBmYWls IC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbiBvciAncGFyYWxsZWwnCiBDUkVBVEUgU1VCU0NS SVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90 ZXhpc3QnIFBVQkxJQ0FUSU9OIHRlc3RwdWIgV0lUSCAoY29ubmVjdCA9IGZhbHNlLCBzdHJlYW1p bmcgPSBmb28pOwogCiAtLSBub3cgaXQgd29ya3MKQEAgLTE3NSw2ICsxNzUsMTAgQEAgQ1JFQVRF IFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3Nf ZG9lc25vdGV4aXN0JyBQVUIKIAogXGRScysKIAorQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IHBhcmFsbGVsKTsKKworXGRScysKKwogQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IGZhbHNlKTsKIEFMVEVS IFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKIApk aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA5NjgzYjBhLi44ODhkOWY3IDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMTQ3Miw2ICsxNDcyLDcgQEAgTG9naWNhbFJlcFJlbElkCiBM b2dpY2FsUmVwUmVsTWFwRW50cnkKIExvZ2ljYWxSZXBSZWxhdGlvbgogTG9naWNhbFJlcFJvbGxi YWNrUHJlcGFyZWRUeG5EYXRhCitMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhCiBMb2dpY2FsUmVw VHVwbGVEYXRhCiBMb2dpY2FsUmVwVHlwCiBMb2dpY2FsUmVwV29ya2VyCkBAIC0xNjYzLDYgKzE2 NjQsOSBAQCBPdmVycmlkZVN0YWNrRW50cnkKIE92ZXJyaWRpbmdLaW5kCiBQQUNFX0hFQURFUgog UEFDTAorUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5CitQYXJhbGxlbEFwcGx5V29ya2VySW5mbwor UGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZAogUEFUSAogUEJPT0wKIFBDdHh0SGFuZGxlCkBAIC0y Nzg0LDYgKzI3ODgsNyBAQCBUcmFuc2FjdGlvblN0bXRLaW5kCiBUcmFuc2Zvcm1JbmZvCiBUcmFu c2Zvcm1Kc29uU3RyaW5nVmFsdWVzU3RhdGUKIFRyYW5zaXRpb25DYXB0dXJlU3RhdGUKK1RyYW5z QXBwbHlBY3Rpb24KIFRyZ21BcmMKIFRyZ21BcmNJbmZvCiBUcmdtQm91bmQKLS0gCjIuNy4yLndp bmRvd3MuMQoK --_003_OS0PR01MB5716F3493A051C5BB23CAD3C943F9OS0PR01MB5716jpnp_--