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 1ouuZf-00020z-2g for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Nov 2022 11:57:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ouuZd-0004fe-OB for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Nov 2022 11:57:53 +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 1ouuZc-0004fR-DJ for pgsql-hackers@lists.postgresql.org; Tue, 15 Nov 2022 11:57:53 +0000 Received: from esa9.fujitsucc.c3s2.iphmx.com ([68.232.159.90]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ouuZX-0005k4-J0 for pgsql-hackers@lists.postgresql.org; Tue, 15 Nov 2022 11:57:51 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1668513468; x=1700049468; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=aK5yLWNCsmCULJz60tUmAlqTVBOMEulquf0R9+JLfKA=; b=vzlFTNIf5JmN+bsT3IEx/HMHZFyLcHAlOEFXDOBa70NkGUHHfBrtOwFw kDzQDZxZuvxb1uqm6hiNsRhNGBeT0WL+w5mz4DO3xHYN43kOmiHSYhpYl xv0Uv3bEJWbRi0VqKFSOEIqNe1KD+LMjcdtyv2/t6TKLVRk/oB3C+EeEq A9R3Ob0rLuh9pXmtGOvymw/HUcza4uvWE02uRSz1nRtU0YdL1n1crReh1 g2PRVTQkc/FxNx/pMzUHRVXDL2IMO8aV+usnsZW/NVukORcwjT/TVr9/a ZTnFV2Yln1+479IUZP8XsRofXQ5/85qE3Qika2P03oc48MZat76sVC4Vt w==; X-IronPort-AV: E=McAfee;i="6500,9779,10531"; a="70203682" X-IronPort-AV: E=Sophos;i="5.96,165,1665414000"; d="scan'208,223";a="70203682" Received: from mail-tycjpn01lp2170.outbound.protection.outlook.com (HELO JPN01-TYC-obe.outbound.protection.outlook.com) ([104.47.23.170]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Nov 2022 20:57:42 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=POMu8YPF/rHDyPP4YnMXE73cIzgZbuX9x2PzlFWW0XcxPX+MgyUfpBeTr9H8CZUDLUqUvzNvDCHjOBIQFXxOHSuwrJAHjS2bLjZj+V/jDyNuvgSJhUl2eAhOP4I2cmkSFkx/dQVDjpDcBQUnW339/olAh68b5OGJ+UN9PRjjQIORUvB+pIk7HtK1CnkHQITCL9P+3QzHYVSPKkfFroQNVwrhBah5kfM9hTwKvsq/fKu02XVp1VhSN4xatFgU5gYb25bMEsWezmB5XpPq5M5LjOv7u6cVKLitnCQeVYHYwQxRdp7tzdexjh9MTWfHwzfC9CZ/tPK5YEiumEYytGNx3g== 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=7bFe7evOA/JiFllxb8RJ+lbg3RskOBId10fps5EX4PY=; b=lr69phwHE2Mz8nF0JDUlx8WAc8odb3dC4R6kQ7hcMvDO05n1LXo6gdiqvQ0NFROjLUErICT7JoCpK2ZMt0HMuQ2QEM5/fUUBn69fmgFLVmYWHBkLMS5q4xnS0TostjM5s/Qpvz2QbrpGjEmFAqa7fWZGhDr0W5IMwRlqZJa2m0VUHzw0Ylrzqg5DbdBR1q1aee505Iv8Sx4mddnnWcKnNozp3iuc8mcD1BWZg3SmLRGoYnFEJTKZrwiLFqkQlMDRJAmjeF1lImxS34Xn3PaoS23NffMXG6QTEw3nWnEYF6opHPfeATV9RqaAMu5mV80nfxkBrPQ2fJ/tcHoOq3iKYw== 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 OS3PR01MB8194.jpnprd01.prod.outlook.com (2603:1096:604:174::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.18; Tue, 15 Nov 2022 11:57:38 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::38a6:cf5c:b4ee:89dd]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::38a6:cf5c:b4ee:89dd%6]) with mapi id 15.20.5813.018; Tue, 15 Nov 2022 11:57:38 +0000 From: "houzj.fnst@fujitsu.com" To: 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+30AgAHyDYCAEzpGgIANkEmAgAI7xKCABhztAIAFv4zggABYqoCAABRMQIABvKAAgAS+5UA= Date: Tue, 15 Nov 2022 11:57:38 +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?NTBfQWN0aW9uSWQ9OGJjY2EwOTItN2Q1NS00YjZhLTg5NTQtZDYwN2I5MjZj?= =?utf-8?B?OTIwO01TSVBfTGFiZWxfYTcyOTVjYzEtZDI3OS00MmFjLWFiNGQtM2IwZjRm?= =?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?ZWNlMDUwX1NldERhdGU9MjAyMi0xMS0xNVQxMTozNDowMlo7TVNJUF9MYWJl?= =?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_|OS3PR01MB8194:EE_ x-ms-office365-filtering-correlation-id: cffac4f1-6de8-4ca0-872d-08dac7009781 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: YCAdNtVTE013BeDVxqmzzcmqzApMW3dzkAblMkPiQFucLdCodwAPfvmyRqQ4cOTrmZ+PiNI3OdGLs6wy5WIStppVbay8wJ4NPISMRunSi2VPYwqocD6Xa6BMAAY9rNdA+56+Bv89k2UjZqEF0Iu0QgvZIp3okYBYlBim1lnUwmmnHTh9vaP+YE+SyAxBQYky1w+5D2gUj4039+F9oSJQ7EJLFez15N7FdG32o5d2bJQ5eRY/Tqd6HjY58dGfznyWvwpHO5A3J8UMU0EfRBEjMup/mN2EQKImsj/nzIoPLxrgFblOfZnDuL9GNrgrUc0s5uBXSSUuS6Lk9fHLs0q2zu6DW9ah38OqaebZJCQVrbQICNmbk50gWhYGT2thlvq6D4Ly563wAEKA0Mx1Zer2e0JKccy0pqsxTf1Iv4CR52n5sv4+ok2rAcIVTQewghLkSBGUENjsAnWbNTZyOb5SORQdL9VFXabRPa8+2dcLhjLObaca8XqOQsOftNdStcs4K6GBYb0lVNO7wdfkO2Kvapx8D020gIU97Oa7y6Fsu7se0fn99Y0wWwkVaTNLRjrVemPMXIvyL7xHdii+Xj8ZFu39JL7HJKd7qsj0TTxP6n7XFjoXliTHui3BMYrMpg+lPEPuXXgE18OrKUlEik0fxDGv7YaFynelf0XzeM8r+2NwxK7gap9hs5r68O3wtkHSxYrQJT/IQVyYrm2i4thEFR0RdADaXp4NlX8YWHCeAfD8fjilwWiHj4kYUzRcm5l1kLsG4yHqdDWwE8Lp+nkFCcJlCrH3LPq+BRw3xOQC39WcMVv4f1tUg0F5Khka8sbjnQXLy3dL+Ue19pxJID6MBqYWVxxnC8h05p1I6nuENXw= 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)(346002)(366004)(376002)(39860400002)(136003)(396003)(451199015)(1590799012)(66899015)(2906002)(1580799009)(55016003)(82960400001)(33656002)(66946007)(66476007)(76116006)(66446008)(41300700001)(85182001)(66556008)(86362001)(6506007)(122000001)(7696005)(99936003)(38100700002)(54906003)(6916009)(83380400001)(8936002)(38070700005)(966005)(52536014)(186003)(5660300002)(8676002)(4326008)(64756008)(26005)(316002)(53546011)(478600001)(71200400001)(9686003)(21314003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cWFvSWNDRVBsOWV6dzRrWHZPSWpPS1JrZnR0VWN1N2I5dTV4OVV3OGd5VTNN?= =?utf-8?B?cncwOWJMdERwSTdMMHQrTzRpdDlCU2x5WlhKSVZGZEFMWXh1RTFhMWxLS0ZX?= =?utf-8?B?QjV0dlRpWGZoNVpjN0NXUkcxUVRmWHBaSlphaENyOUliZnNLdExTZ291TDdR?= =?utf-8?B?U2IweElOMThINWNtakszd3hiUU1GSEp5SlpxRm14ay9lcVdBSC8vQi8zWWcv?= =?utf-8?B?UGlkbkJkOXhZVGR1SUEzbGhMNndpV1gyV1N2NGMyaEZBMUtVQ25pdklSMmND?= =?utf-8?B?WjA1WU14TzJ4UzIvUm9wcmtLUUh6aExVN2t3SEtIN1pzckFNdUZvdVQ2RHJp?= =?utf-8?B?bUE3VlllOGJqZzV5VFROc1NvQWVvZVlFVVVZQjNnWThFZUUyNHFZN2FTWG1H?= =?utf-8?B?ckp3U2cxSFF3Vlo1bmtKQ21ncjZKOG8zVHU3dXVRQmJET2ZQZ25GZnR2dit3?= =?utf-8?B?ZDQyTFJGdVdORkFRUzI0SzhrYTFWNlNpU254SFQ1VEtmT25vaWkyQ3VzQ2Nu?= =?utf-8?B?SjNHM3hnSmZMaXJhOXY2ZkkybWhvQzdhMkxPaGhLcEpFbm9FU1dQTVJod2xY?= =?utf-8?B?NTdsdEFKUU9Rd1NTcUorZjBERHBoQklkYlRPUDhiaENhbVg5M29hTnBtNTFL?= =?utf-8?B?VHQrbVZ5ekZPTzF5U1Ntb0lQRVIra1JKUWk2RHhPNjZ3REJLQXVSbytrYkdp?= =?utf-8?B?M0VPS3dSOENMcFpPeFRwNGNKRTRYZzE1QkNaL3ZFS1hSUjZpWTkrTDJJajRT?= =?utf-8?B?cFNwVWZ4VUk4QytNZ0lSZjk0aXd0QjN1MEJCcU4rUitabHFKVFhpaGs3SnV0?= =?utf-8?B?VkVWMXpYd0dmUDhTTTBSRVB4VXdLa2pyaWl1ZzV6Rkk0amJzaTdiRGZBSVJE?= =?utf-8?B?emswaWxRbkpBNnU2OUVSKzh0cGVYYTd3R0x1dUlJM2xNUmZmT2VKT1diaVEy?= =?utf-8?B?YWRudllxaXJERXBmSlppSWxxc3R2ZXNraUZ4OTFhem1wYVUyYnNTMkRac3ND?= =?utf-8?B?MUw1dVZtTW1hUENNbXkySDZTcVJYVVROT0lNZFJmSW1HNVZVclErVmZYNGho?= =?utf-8?B?elpPbTBibk5ETDlsWG1vU3c1YkV0bjlROVRIUWEzWmZ2bFNLbTRHLzdUdkE4?= =?utf-8?B?RkxCK3BTQXBVUnRtaU5YSjR4dmRNNVNHNzZDRkJQN2o4TnNmYTBHSFhVRXRC?= =?utf-8?B?cDVtbTdiMEwvRGkzSTk0MkpBUFllSDJBK3FMditocnc3R2hDSkNlNFNBWVha?= =?utf-8?B?YmRCcEVJbS91eTM2OVVOU2RBUkJzak5CRk51VTdyTzlZUkZDSmlaTm5lQnli?= =?utf-8?B?OVVmTHBOaEZWRFE2VUk1aHBUS245ZjdHT0ZpRGZkdE9Ja2hlc1FRZTB6aDBT?= =?utf-8?B?ZVptV3RIYU9oUGVSYlg3M1B4S0JleWc3U1J1aXhsTzA4RTkrL1I4WjF6NnEz?= =?utf-8?B?UlZhVnRmbEVkZUlKc0tvM3ZVZTF4MUlhNnZnY2pkejRCVXR1dEJJOG1YZm9H?= =?utf-8?B?TnhUeklaMTJVWHg0U3NNS1M4YTMxV1B2NUFHU25Mdm9EbmNCNHR5WGtjUHcv?= =?utf-8?B?MG16bENlekdyaGVIRmxQNmNxd0cydUxHOTN2WDA2RDZMWVd2ZnB6czlxcUdy?= =?utf-8?B?Wld1UGIyWHNYK3BlcWgrcWlDb1hWZXhtZEszS2FVY3J1NGllVURkcmhKSGxY?= =?utf-8?B?M3dhQ1A2RHlHeS82ejdRbWtLUXp6SWwvRjV4WUJjd2FjRUNWNU53K2dmQmdP?= =?utf-8?B?dG1teXpzQ2hXVGpuakhtK1IrN2pLTVJWeVNjaFc4SUNpRHBtZzB4MURKUXVJ?= =?utf-8?B?NUcxRWt2NURvTzc2czB5ZVhsMUtISGhnc2JvNElZRHh0SjkzUU5Ld0dCcGdT?= =?utf-8?B?UWRzenZGWmxHbGdOWnZ1RVRYcDZUdFhnQnpuT1c0NHFRSGlkUUdCVnQ4NVlz?= =?utf-8?B?YTRqZWFYMitsd3d0MmJnRDh1c2JQM2JjaWw3RUR5RldGUXJHaURVQkNsRFNE?= =?utf-8?B?MG5KWW5wNEttcWEwWFlPQThIYmRGelRtZnlsTDdtMkxtZSt0QmtQOU14akgx?= =?utf-8?B?bGFwYjRrWG92WUg4MUt4cEJPWEQ0eWs2UTBNeTJWc1RpNFlQT211L1N6SkZU?= =?utf-8?Q?HDqnZjOf2BbUrNXIQKOtBYjqo?= Content-Type: multipart/mixed; boundary="_004_OS0PR01MB5716A380FDDE576CCD84F5BE94049OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: EOaVMOqh2UdKjs4kA4d1sgq7JN9gWSTXYN7/so0UI5SiA5stPVLqmKEQsktewebFUpJp7RE1zb+T4OFHWsh5hMGnA/rcrQUZ1KbhBaqWxQ2yCoMPip3jWQRMnT9dJth4bmVvuTPfjYNv8RlfdUZvAJwjovDL2ggA7cGU6SHRDTQKoIC7SlnMDPkmRLLY4rAQDuvCqZCujCiPVTSMYKmUH8C1kJRkKgGyownvDvJmhV0avo+am6mVAZXky/u6wEYaPHcMFhdr38m6P+FBhakZD6sntU1mTLjmOtv6U3F1anRRczZxXfQSMe2rvcBNEy5Tbr6ja32wxGTw7fU3XMGiwnG87IaTjxHKHTUWp7t24a0akvanfFX2yrYTUjIv4kfj9hAdKBeWcL6O6Sew7UparZ8YA++m3RlDSSDQhKk34bgYzjzMH/3RcANP0v2OlXIJRMGmVMPBljONbtXE/JN9XsqVhKjmnakf8+lRKfsamhx6GUuV4S1C9R17HH2JvdsYk+3/KUT/jQbLuxQyFjxQZdJM3T6Vzcuu3+sPgP7EIZfTAaLGoQGJpIcDyc2HKjdtnqYmvJpYGp3EyT7SYDaYVpX8TtCUMEa06fDNo7L0yeYAlxnI5AG24b7o4kMHY1Y7pXngbC7x5MZErTpGhi4aoHUcX7gLHl3kSG/LzXLZHnm8zo+OWQPmdfqJX1m+eG/7Ds8alaEjWM20aXFL24w3FtHT/7oeVyuVjN4ma/1SwpqHZbitXFPsvhRlTKynP1nTjvFQyvo/cmhS5J0jddvUe/KS+xOEx6ZVtJ0QjtpA74J+enz/pmKynCL+PcKYICX//RkM78Q1xyfr99EA7m+7+a13g0seaGtC23qoMdiOljquq3rOromun6lQ1/r/7ahmO2bLkW0B1Z1FMRjVPEwGGw== 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: cffac4f1-6de8-4ca0-872d-08dac7009781 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Nov 2022 11:57:38.1497 (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: cQMd3jXmxPeEVv+OJ30isfuQGUMJoVxZVDoiNU5FjhwxEIIJP2Sb4Xh8zYm7RVPIMrhI/o3PQbSj2hqIGsTqpw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS3PR01MB8194 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_OS0PR01MB5716A380FDDE576CCD84F5BE94049OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gU2F0dXJkYXksIE5vdmVtYmVyIDEyLCAyMDIyIDc6MDYgUE0gQW1pdCBLYXBpbGEgPGFtaXQu a2FwaWxhMTZAZ21haWwuY29tPg0KPiANCj4gT24gRnJpLCBOb3YgMTEsIDIwMjIgYXQgMjoxMiBQ TSBob3V6ai5mbnN0QGZ1aml0c3UuY29tDQo+IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPiB3cm90 ZToNCj4gPg0KPiANCj4gRmV3IGNvbW1lbnRzIG9uIHY0Ni0wMDAxOg0KPiA9PT09PT09PT09PT09 PT09PT09PT09DQo+DQoNClRoYW5rcyBmb3IgdGhlIGNvbW1lbnRzLg0KDQo+IDEuDQo+ICtzdGF0 aWMgdm9pZA0KPiArYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpDQo+IHsN Cj4gLi4uDQo+ICsgLyogU2VuZCBTVFJFQU0gQUJPUlQgbWVzc2FnZSB0byB0aGUgcGFyYWxsZWwg YXBwbHkgd29ya2VyLiAqLw0KPiArIHBhcmFsbGVsX2FwcGx5X3NlbmRfZGF0YSh3aW5mbywgcy0+ bGVuLCBzLT5kYXRhKTsNCj4gKw0KPiArIGlmIChhYm9ydF90b3BsZXZlbF90cmFuc2FjdGlvbikN Cj4gKyB7DQo+ICsgcGFyYWxsZWxfYXBwbHlfdW5sb2NrX3N0cmVhbSh4aWQsIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2spOw0KPiANCj4gU2hvdWxkbid0IHdlIG5lZWQgdG8gcmVsZWFzZSB0aGlzIGxvY2sg YmVmb3JlIHNlbmRpbmcgdGhlIG1lc3NhZ2UgYXMNCj4gd2UgYXJlIGRvaW5nIGZvciBzdHJlYXBf cHJlcGFyZSBhbmQgc3RyZWFtX2NvbW1pdD8gSWYgdGhlcmUgaXMgYQ0KPiByZWFzb24gZm9yIGRv aW5nIGl0IGRpZmZlcmVudGx5IGhlcmUgdGhlbiBsZXQncyBhZGQgc29tZSBjb21tZW50cyBmb3IN Cj4gdGhlIHNhbWUuDQoNCkNoYW5nZWQuDQoNCj4gMi4gSXQgc2VlbXMgb25jZSB0aGUgcGF0Y2gg bWFrZXMgdGhlIGZpbGUgc3RhdGUgYXMgYnVzeQ0KPiAoTEVBREVSX0ZJTEVTRVRfQlVTWSksIGl0 IHdpbGwgb25seSBiZSBhY2Nlc3NpYmxlIGFmdGVyIHRoZSBsZWFkZXINCj4gYXBwbHkgd29ya2Vy IHJlY2VpdmVzIGEgdHJhbnNhY3Rpb24gZW5kIG1lc3NhZ2UgbGlrZSBzdHJlYW1fY29tbWl0LiBJ cw0KPiBteSB1bmRlcnN0YW5kaW5nIGNvcnJlY3Q/IElmIHllcywgdGhlbiB3aHkgY2FuJ3Qgd2Ug bWFrZSBpdCBhY2Nlc3NpYmxlDQo+IGFmdGVyIHRoZSBzdHJlYW1fc3RvcCBtZXNzYWdlPyBBcmUg eW91IHdvcnJpZWQgYWJvdXQgdGhlIGNvbmN1cnJlbmN5DQo+IGhhbmRsaW5nIGZvciByZWFkaW5n IGFuZCB3cml0aW5nIHRoZSBmaWxlPyBJZiBzbywgd2UgY2FuIHByb2JhYmx5IGRlYWwNCj4gd2l0 aCBpdCB2aWEgc29tZSBsb2NrIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRvIGZpbGUgZm9yIGVh Y2ggY2hhbmdlLg0KPiBJIHRoaW5rIGFmdGVyIHRoaXMgd2UgbWF5IG5vdCBuZWVkIGFkZGl0aW9u YWwgc3RyZWFtIGxldmVsIGxvY2svdW5sb2NrDQo+IGluIHBhcmFsbGVsX2FwcGx5X3Nwb29sZWRf bWVzc2FnZXMuIEkgdW5kZXJzdGFuZCB0aGF0IHlvdSBwcm9iYWJseQ0KPiB3YW50IHRvIGtlZXAg dGhlIGNvZGUgc2ltcGxlIHNvIEkgYW0gbm90IHN1Z2dlc3RpbmcgY2hhbmdpbmcgaXQNCj4gaW1t ZWRpYXRlbHkgYnV0IGp1c3Qgd2FudGVkIHRvIGtub3cgd2hldGhlciB5b3UgaGF2ZSBjb25zaWRl cmVkDQo+IGFsdGVybmF0aXZlcyBoZXJlLg0KDQpJIHRob3VnaHQgYWJvdXQgdGhpcywgYnV0IGl0 IHNlZW1zIHRoZSBjdXJyZW50IGJ1ZmZpbGUgZGVzaWduIGRvZXNuJ3QgYWxsb3cgdHdvDQpwcm9j ZXNzZXMgdG8gb3BlbiB0aGUgc2FtZSBidWZmaWxlIGF0IHRoZSBzYW1lIHRpbWUocmVmZXIgdG8g dGhlIGNvbW1lbnQgYXRvcA0Kb2YgQnVmRmlsZU9wZW5GaWxlU2V0KCkpLiBUaGlzIG1lYW5zIHRo ZSBMQSBuZWVkcyB0byBtYWtlIHN1cmUgdGhlIFBBIGhhcw0KY2xvc2VkIHRoZSBidWZmaWxlIGJl Zm9yZSB3cml0aW5nIG1vcmUgY2hhbmdlcyBpbnRvIGl0LiBBbHRob3VnaCB3ZSBjb3VsZCBsZXQN CnRoZSBMQSB3YWl0IGZvciB0aGF0LCBidXQgaXQgY291bGQgY2F1c2UgYW5vdGhlciBraW5kIG9m IGRlYWRsb2NrLiBTdXBwb3NlIHRoZQ0KUEEgb3BlbmVkIHRoZSBmaWxlIGFuZCBpcyBibG9ja2Vk IHdoZW4gYXBwbHlpbmcgdGhlIGp1c3QgcmVhZCBjaGFuZ2UuIEFuZCB0aGUNCkxBIHN0YXJ0cyB0 byB3YWl0IHdoZW4gdHJ5aW5nIHRvIHdyaXRlIHRoZSBuZXh0IHNldCBvZiBzdHJlYW1pbmcgY2hh bmdlcyBpbnRvDQpmaWxlIGJlY2F1c2UgdGhlIGZpbGUgaXMgc3RpbGwgb3BlbmVkIGJ5IFBBLiBU aGVuIHRoZSBsb2NrIGVkZ2UgaXMgbGlrZToNCg0KTEEgKHdhaXQgZm9yIGZpbGUgdG8gYmUgY2xv c2VkKSAtPiBQQTEgKHdhaXQgZm9yIHVuaXF1ZSBsb2NrIGluIFBBMikgLT4gUEEyDQood2FpdCBm b3Igc3RyZWFtIGxvY2sgaGVsZCBpbiBMQSkNCg0KV2UgY291bGQgaW50cm9kdWNlIGFub3RoZXIg bG9jayBmb3IgdGhpcywgYnV0IHRoYXQgc2VlbXMgbm90IHZlcnkgZ3JlYXQgYXMgd2UNCmFscmVh ZHkgaGFkIHR3byBraW5kcyBvZiBsb2NrcyBoZXJlLg0KDQpBbm90aGVyIHNvbHV0aW9uIGNvdWxk IGJlIHdlIGNyZWF0ZSBkaWZmZXJlbnQgZmlsZW5hbWUgZm9yIGVhY2ggc3RyZWFtaW5nIGJsb2Nr DQpzbyB0aGF0IHRoZSBsZWFkZXIgZG9uJ3QgbmVlZCB0byByZW9wZW4gdGhlIHNhbWUgZmlsZSBh ZnRlciB3cml0aW5nIGNoYW5nZXMNCmludG8gaXQsIGJ1dCB0aGF0IHNlZW1zIGxhcmdlbHkgaW5j cmVhc2UgdGhlIG51bWJlciBvZiB0ZW1wIGZpbGVzIGFuZCBsb29rcyBhDQpiaXQgaGFja3kuIE9y IHdlIGNvdWxkIGxldCBQQSBvcGVuIHRoZSBmaWxlLCB0aGVuIHJlYWQgYW5kIGNsb3NlIHRoZSBm aWxlIGZvcg0KZWFjaCBjaGFuZ2UsIGJ1dCBpdCBzZWVtcyBicmluZyBzb21lIG92ZXJoZWFkIG9m IG9wZW5pbmcgYW5kIGNsb3NpbmcgZmlsZS4NCg0KQW5vdGhlciBzb2x1dGlvbiB3aGljaCBkb2Vz bid0IG5lZWQgYSBuZXcgbG9jayBjb3VsZCBiZSB0aGF0IHdlIGNyZWF0ZQ0KZGlmZmVyZW50IGZp bGVuYW1lIGZvciBlYWNoIHN0cmVhbWluZyBibG9jayBzbyB0aGF0IHRoZSBsZWFkZXIgZG9lc24n dCBuZWVkIHRvDQpyZW9wZW4gdGhlIHNhbWUgZmlsZSBhZnRlciB3cml0aW5nIGNoYW5nZXMgaW50 byBpdCwgYnV0IHRoYXQgc2VlbXMgbGFyZ2VseQ0KaW5jcmVhc2UgdGhlIG51bWJlciBvZiB0ZW1w IGZpbGVzIGFuZCBsb29rcyBhIGJpdCBoYWNreS4gT3Igd2UgY291bGQgbGV0IFBBDQpvcGVuIHRo ZSBmaWxlLCB0aGVuIHJlYWQgYW5kIGNsb3NlIHRoZSBmaWxlIGZvciBlYWNoIGNoYW5nZSwgYnV0 IGl0IHNlZW1zIGJyaW5nDQpzb21lIG92ZXJoZWFkIG9mIG9wZW5pbmcgYW5kIGNsb3NpbmcgZmls ZS4NCg0KQmFzZWQgb24gYWJvdmUsIGhvdyBhYm91dCBrZWVwIHRoZSBjdXJyZW50IGFwcHJvYWNo ID8oaS5lLiBQQQ0Kd2lsbCBvcGVuIHRoZSBmaWxlIG9ubHkgYWZ0ZXIgdGhlIGxlYWRlciBhcHBs eSB3b3JrZXIgcmVjZWl2ZXMgYSB0cmFuc2FjdGlvbg0KZW5kIG1lc3NhZ2UgbGlrZSBzdHJlYW1f Y29tbWl0KS4gSWRlYWxseSwgaXQgd2lsbCBlbnRlciBwYXJ0aWFsIHNlcmlhbGl6ZSBtb2RlDQpv bmx5IHdoZW4gUEEgaXMgYmxvY2tlZCBieSBhIGJhY2tlbmQgb3IgYW5vdGhlciBQQSB3aGljaCBz ZWVtcyBub3QgdGhhdCBjb21tb24uDQoNCj4gMy4gRG9uJ3Qgd2UgbmVlZCB0byByZWxlYXNlIHRo ZSB0cmFuc2FjdGlvbiBsb2NrIGF0IHN0cmVhbV9hYm9ydCBpbg0KPiBwYXJhbGxlbCBhcHBseSB3 b3JrZXI/IEkgdW5kZXJzdGFuZCB0aGF0IHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgaXQgaW4NCj4g dGhlIGxlYWRlciB3b3JrZXIgYnV0IHN0aWxsIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBzaG91bGQg cmVsZWFzZSBpdCBpZg0KPiBhY3F1aXJlZCBhdCBzdHJlYW1fc3RhcnQgYnkgaXQuDQoNCkkgdGhv dWdodCB0aGF0IHRoZSBsb2NrIHdpbGwgYmUgYXV0b21hdGljYWxseSByZWxlYXNlZCBvbiByb2xs YmFjay4gQnV0IGFmdGVyIHRlc3RpbmcsIEkgZmluZA0KSXTigJlzIHBvc3NpYmxlIHRoYXQgdGhl IGxvY2sgd29uJ3QgYmUgcmVsZWFzZWQgaWYgaXQncyBhIGVtcHR5IHN0cmVhbWluZyB0cmFuc2Fj dGlvbi4gU28sIEkNCmFkZCB0aGUgY29kZSB0byByZWxlYXNlIHRoZSBsb2NrIGluIHRoZSBuZXcg dmVyc2lvbiBwYXRjaC4NCg0KPiANCj4gNC4gQSBtaW5vciBjb21tZW50IGNoYW5nZSBhcyBiZWxv dzoNCj4gZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMNCj4gYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jDQo+IGluZGV4 IDQzZjA5YjdlOWEuLmM3NzE4NTFkMWYgMTAwNjQ0DQo+IC0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMNCj4gKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC93b3JrZXIuYw0KPiBAQCAtMTg1MSw2ICsxODUxLDkgQEAgYXBwbHlfaGFuZGxlX3N0 cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpDQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFs bGVsX2FwcGx5X3N0cmVhbV9hYm9ydCgmYWJvcnRfZGF0YSk7DQo+IA0KPiAgICAgICAgICAgICAg ICAgICAgICAgICAvKg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgKiBXZSBuZWVkIHRvIHdh aXQgYWZ0ZXIgcHJvY2Vzc2luZyByb2xsYmFjaw0KPiB0byBzYXZlcG9pbnQgZm9yIHRoZSBuZXh0 IHNldA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgKiBvZiBjaGFuZ2VzLg0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgKg0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBCeSB0aGUg dGltZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMNCj4gcHJvY2Vzc2luZyB0aGUgY2hhbmdlcyBp bg0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgY3VycmVudCBzdHJlYW1pbmcgYmxv Y2ssIHRoZSBsZWFkZXINCj4gYXBwbHkgd29ya2VyIG1heSBoYXZlDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAqIHNlbnQgbXVsdGlwbGUgc3RyZWFtaW5nIGJsb2Nrcy4gU28sIHRyeSB0bw0K PiBsb2NrIG9ubHkgaWYgdGhlcmUNCg0KTWVyZ2VkLg0KDQpBdHRhY2ggdGhlIG5ldyB2ZXJzaW9u IHBhdGNoIHNldCB3aGljaCBhZGRyZXNzZWQgYWJvdmUgY29tbWVudHMgYW5kIGNvbW1lbnRzIGZy b20gWzFdLg0KDQpJbiB0aGUgbmV3IHZlcnNpb24gcGF0Y2gsIEkgcmVuYW1lZCBwYXJhbGxlbF9h cHBseV94eHggZnVuY3Rpb25zIHRvIHBhX3h4eCB0bw0KbWFrZSB0aGUgbmFtZSBzaG9ydGVyIGFj Y29yZGluZyB0byB0aGUgc3VnZ2VzdGlvbiBpbiBbMV0uIEJlc2lkZXMsIEkgc3BsaXQgdGhlDQpj b2RlcyByZWxhdGVkIHRvIHBhcnRpYWwgc2VyaWFsaXplIHRvIDAwMDIgcGF0Y2ggdG8gbWFrZSB0 aGUgcGF0Y2ggZWFzaWVyIHRvDQpyZXZpZXcuDQoNClsxXSBodHRwczovL3d3dy5wb3N0Z3Jlc3Fs Lm9yZy9tZXNzYWdlLWlkL0NBQTRlSzFMR3lRJTJCUy1qQ01uWVN6X2h2b3FpTkEwT2YlM0QlMkJN a3NZJTNEWFRVYVJjNVh6WEpRJTQwbWFpbC5nbWFpbC5jb20NCg0KQmVzdCByZWdhcmRzLA0KSG91 IHpqDQo= --_004_OS0PR01MB5716A380FDDE576CCD84F5BE94049OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v47-0002-Serialize-partial-changes-to-disk-if-the-shm_mq-.patch" Content-Description: v47-0002-Serialize-partial-changes-to-disk-if-the-shm_mq-.patch Content-Disposition: attachment; filename="v47-0002-Serialize-partial-changes-to-disk-if-the-shm_mq-.patch"; size=37372; creation-date="Tue, 15 Nov 2022 11:45:08 GMT"; modification-date="Tue, 15 Nov 2022 11:57:34 GMT" Content-Transfer-Encoding: base64 RnJvbSA5N2E5YjRiMDcwMmZjMGIyZDAxOWUwMzdiOGFmMDAyMjNkZjQxYWNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIb3UgWmhpamllIDxob3V6ai5mbnN0QGNuLmZ1aml0c3UuY29t PgpEYXRlOiBUdWUsIDE1IE5vdiAyMDIyIDE3OjMxOjI2ICswODAwClN1YmplY3Q6IFtQQVRDSCB2 NDcgMi8yXSBTZXJpYWxpemUgcGFydGlhbCBjaGFuZ2VzIHRvIGRpc2sgaWYgdGhlIHNobV9tcQog YnVmZmVyIGlzIGZ1bGwKCldoZW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgdGltZXMgb3V0IHdo aWxlIHNlbmRpbmcgYSBtZXNzYWdlIHRvIHRoZSBwYXJhbGxlbAphcHBseSB3b3JrZXIuIEluc3Rl YWQgb2YgZXJyb3Jpbmcgb3V0LCBzd2l0Y2ggdG8gcGFydGlhbCBzZXJpYWxpemUgbW9kZSBhbmQg bGV0CnRoZSBsZWFkZXIgc2VyaWFsaXplIGFsbCByZW1haW5pbmcgY2hhbmdlcyB0byB0aGUgZmls ZSBhbmQgbm90aWZ5IHRoZSBwYXJhbGxlbAphcHBseSB3b3JrZXJzIHRvIHJlYWQgYW5kIGFwcGx5 IHRoZW0gYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24uCi0tLQogLi4uL3JlcGxpY2F0aW9u L2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jICAgICAgfCAxODAgKysrKysrKysrKy0KIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICAgICAgIHwgMzQzICsr KysrKysrKysrKysrKy0tLS0tLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVy bmFsLmggICAgICAgICAgfCAgNDYgKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQ2MiBpbnNlcnRpb25z KCspLCAxMDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwppbmRleCA0ZWVkMGVjLi44MjkxY2M3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3 b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxs ZWx3b3JrZXIuYwpAQCAtNzIsNyArNzIsMTAgQEAKICAqIG1lc3NhZ2VzLCBhbmQgdGhpcyB3YWl0 IGRvZXNuJ3QgYXBwZWFyIGluIGxtZ3IuCiAgKgogICogVG8gcmVzb2x2ZSB0aGlzIGlzc3VlLCB3 ZSB1c2Ugbm9uLWJsb2NraW5nIHdyaXRlIGFuZCB3YWl0IHdpdGggYSB0aW1lb3V0LiBJZgotICog dGltZW91dCBpcyBleGNlZWRlZCwgdGhlIExBIHJlcG9ydCBhbiBlcnJvciBhbmQgcmVzdGFydCBs b2dpY2FsIHJlcGxpY2F0aW9uLgorICogdGltZW91dCBpcyBleGNlZWRlZCwgdGhlIExBIHdpbGwg d3JpdGUgdG8gZmlsZSBhbmQgaW5kaWNhdGUgUEEtMiB0aGF0IGl0CisgKiBuZWVkcyB0byByZWFk IGZpbGUgZm9yIHJlbWFpbmluZyBtZXNzYWdlcy4gVGhlbiBMQSB3aWxsIHN0YXJ0IHdhaXRpbmcg Zm9yCisgKiBjb21taXQgd2hpY2ggd2lsbCBkZXRlY3QgZGVhZGxvY2sgaWYgYW55LiAoU2VlIHBh X3NlbmRfZGF0YSgpIGFuZCB0eXBlZGVmCisgKiBlbnVtIFRyYW5zQXBwbHlBY3Rpb24pCiAgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0zMDQsOSArMzA3LDExIEBAIHBhX3N0YXJ0X3dvcmtl cihUcmFuc2FjdGlvbklkIHhpZCkKIAlTcGluTG9ja0FjcXVpcmUoJndpbmZvLT5zaGFyZWQtPm11 dGV4KTsKIAl3aW5mby0+c2hhcmVkLT54YWN0X3N0YXRlID0gUEFSQUxMRUxfVFJBTlNfVU5LTk9X TjsKIAl3aW5mby0+c2hhcmVkLT54aWQgPSB4aWQ7CisJd2luZm8tPnNoYXJlZC0+ZmlsZXNldF9z dGF0ZSA9IExFQURFUl9GSUxFU0VUX1VOS05PV047CiAJU3BpbkxvY2tSZWxlYXNlKCZ3aW5mby0+ c2hhcmVkLT5tdXRleCk7CiAKIAl3aW5mby0+aW5fdXNlID0gdHJ1ZTsKKwl3aW5mby0+c2VyaWFs aXplX2NoYW5nZXMgPSBmYWxzZTsKIAllbnRyeS0+d2luZm8gPSB3aW5mbzsKIAllbnRyeS0+eGlk ID0geGlkOwogfQpAQCAtMzQ1LDggKzM1MCwxNCBAQCBwYV9maW5kX3dvcmtlcihUcmFuc2FjdGlv bklkIHhpZCkKIH0KIAogLyoKLSAqIFJlbW92ZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGVu dHJ5IGZyb20gdGhlIGhhc2ggdGFibGUuIFN0b3AgdGhlIHdvcmsgaWYKLSAqIHRoZXJlIGFyZSBl bm91Z2ggd29ya2VycyBpbiB0aGUgcG9vbC4KKyAqIFJlbW92ZSB0aGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyIGVudHJ5IGZyb20gdGhlIGhhc2ggdGFibGUgYW5kIGNsZWFudXAgdGhlCisgKiBmaWxl cyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcy4gU3RvcCB0aGUgd29yayBpZiB0aGVyZSBhcmUgZW5v dWdoIHdvcmtlcnMgaW4KKyAqIHRoZSBwb29sIG9yIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHNl cmlhbGl6ZWQgcGFydCBvZiB0aGUgdHJhbnNhY3Rpb24gZGF0YQorICogdG8gYSBmaWxlIGR1ZSB0 byBzZW5kIHRpbWVvdXQuCisgKgorICogWFhYIERhdGEgY291bGQgYmUgcGFydGlhbGx5IHdyaXR0 ZW4gdG8gdGhlIHF1ZXVlIGR1ZSB0byBzZW5kIHRpbWVvdXQgYW5kCisgKiB0aGVyZSBpcyBubyB3 YXkgdG8gY2xlYW4gdGhlIHF1ZXVlIG90aGVyIHRoYW4gcmVzZW5kaW5nIHRoZSBtZXNzYWdlIHVu dGlsIGl0CisgKiBzdWNjZWVkcy4gVG8gYXZvaWQgY29tcGxleGl0eSwgd2UgZGlyZWN0bHkgc3Rv cCB0aGUgd29ya2VyIGluIHRoaXMgY2FzZS4KICAqCiAgKiBJZiB0aGUgd29ya2VyIGlzIHN0b3Bw ZWQsIHRoZSB3b3JrZXIgaW5mb3JtYXRpb24gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlCiAgKiBQ YXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QgYW5kIHRoZSBtZW1vcnkgb2YgdGhlIGluZm9ybWF0aW9u IHdpbGwgYmUgZnJlZWQuCkBAIC0zODIsOCArMzkzLDE3IEBAIHBhX2ZyZWVfd29ya2VyKFBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgVHJhbnNhY3Rpb25JZCB4aWQpCiAJbmFwcGx5d29y a2VycyA9IGxvZ2ljYWxyZXBfcGFyYWxsZWxfYXBwbHlfd29ya2VyX2NvdW50KE15TG9naWNhbFJl cFdvcmtlci0+c3ViaWQpOwogCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwog Ci0JLyogQXJlIHRoZXJlIGVub3VnaCB3b3JrZXJzIGluIHRoZSBwb29sPyAqLwotCWlmIChuYXBw bHl3b3JrZXJzID4gKG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24g LyAyKSkKKwkvKiBVbmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzLiAqLwor CWlmICh3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMpCisJCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15 TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CisKKwkvKgorCSAqIFN0b3AgdGhlIHdvcmtl ciBpZiB0aGVyZSBhcmUgZW5vdWdoIHdvcmtlcnMgaW4gdGhlIHBvb2wgb3IgdGhlIGxlYWRlcgor CSAqIGFwcGx5IHdvcmtlciBzZXJpYWxpemVkIHBhcnQgb2YgdGhlIHRyYW5zYWN0aW9uIGRhdGEg dG8gYSBmaWxlIGR1ZSB0bworCSAqIHNlbmQgdGltZW91dC4KKwkgKi8KKwlpZiAod2luZm8tPnNl cmlhbGl6ZV9jaGFuZ2VzIHx8CisJCW5hcHBseXdvcmtlcnMgPiAobWF4X3BhcmFsbGVsX2FwcGx5 X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbiAvIDIpKQogCXsKIAkJaW50CQkJc2xvdF9ubzsKIAkJ dWludDE2CQlnZW5lcmF0aW9uOwpAQCAtNDEyLDYgKzQzMiw3IEBAIHBhX2ZyZWVfd29ya2VyKFBh cmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgVHJhbnNhY3Rpb25JZCB4aWQpCiAJfQogCiAJ d2luZm8tPmluX3VzZSA9IGZhbHNlOworCXdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9IGZhbHNl OwogCiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtNDM0LDYgKzQ1NSw0MyBAQCBwYV9mcmVlX3dvcmtl cl9pbmZvKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbykKIAlwZnJlZSh3aW5mbyk7CiB9 CiAKKy8qCisgKiBSZXBsYXkgdGhlIHNwb29sZWQgbWVzc2FnZXMgaW4gdGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlciBpZiBsZWFkZXIgYXBwbHkKKyAqIHdvcmtlciBoYXMgZmluaXNoZWQgc2VyaWFs aXppbmcgY2hhbmdlcyB0byB0aGUgZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK3BhX3Nwb29sZWRf bWVzc2FnZXModm9pZCkKK3sKKwlMZWFkZXJGaWxlU2V0U3RhdGUgZmlsZXNldF9zdGF0ZTsKKwor CS8qCisJICogQ2hlY2sgaWYgY2hhbmdlcyBoYXZlIGJlZW4gc2VyaWFsaXplZCB0byBkaXNrLiBp ZiBzbywgcmVhZCBhbmQgYXBwbHkKKwkgKiB0aGVtLgorCSAqLworCVNwaW5Mb2NrQWNxdWlyZSgm TXlQYXJhbGxlbFNoYXJlZC0+bXV0ZXgpOworCWZpbGVzZXRfc3RhdGUgPSBNeVBhcmFsbGVsU2hh cmVkLT5maWxlc2V0X3N0YXRlOworCVNwaW5Mb2NrUmVsZWFzZSgmTXlQYXJhbGxlbFNoYXJlZC0+ bXV0ZXgpOworCisJLyoKKwkgKiBBY3F1aXJlIHRoZSBzdHJlYW0gbG9jayBpZiB0aGUgbGVhZGVy IGFwcGx5IHdvcmtlciBpcyBzZXJpYWxpemluZworCSAqIGNoYW5nZXMgdG8gdGhlIGZpbGUsIGJl Y2F1c2UgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3aWxsIG5vIGxvbmdlcgorCSAqIGhhdmUg YSBjaGFuY2UgdG8gcmVjZWl2ZSBhIFNUUkVBTV9TVE9QIGFuZCBhY3F1aXJlIHRoZSBsb2NrIHVu dGlsIHRoZQorCSAqIGxlYWRlciBzZXJpYWxpemUgYWxsIGNoYW5nZXMgdG8gdGhlIGZpbGUuCisJ ICovCisJaWYgKGZpbGVzZXRfc3RhdGUgPT0gTEVBREVSX0ZJTEVTRVRfQlVTWSkKKwl7CisJCXBh X2xvY2tfc3RyZWFtKE15UGFyYWxsZWxTaGFyZWQtPnhpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJ cGFfdW5sb2NrX3N0cmVhbShNeVBhcmFsbGVsU2hhcmVkLT54aWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisJfQorCWVsc2UgaWYgKGZpbGVzZXRfc3RhdGUgPT0gTEVBREVSX0ZJTEVTRVRfQUNDRVNTSUJM RSkKKwl7CisJCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoJk15UGFyYWxsZWxTaGFyZWQtPmZpbGVz ZXQsCisJCQkJCQkJICAgTXlQYXJhbGxlbFNoYXJlZC0+eGlkLAorCQkJCQkJCSAgIEludmFsaWRY TG9nUmVjUHRyKTsKKwkJcGFfc2V0X2ZpbGVzZXRfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgTEVB REVSX0ZJTEVTRVRfVU5LTk9XTik7CisJfQorfQorCiAvKiBQYXJhbGxlbCBhcHBseSB3b3JrZXIg bWFpbiBsb29wLiAqLwogc3RhdGljIHZvaWQKIExvZ2ljYWxQYXJhbGxlbEFwcGx5TG9vcChzaG1f bXFfaGFuZGxlICptcWgpCkBAIC01MDUsNiArNTYzLDggQEAgTG9naWNhbFBhcmFsbGVsQXBwbHlM b29wKHNobV9tcV9oYW5kbGUgKm1xaCkKIAkJewogCQkJaW50CQkJcmM7CiAKKwkJCXBhX3Nwb29s ZWRfbWVzc2FnZXMoKTsKKwogCQkJaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJCXsK IAkJCQkvKgpAQCAtOTY0LDYgKzEwMjQsMTAgQEAgcGFfaW5pdF9hbmRfbGF1bmNoX3dvcmtlcih2 b2lkKQogLyoKICAqIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgdmlhIHNoYXJlZC1tZW1vcnkKICAqIHF1ZXVlLgorICoKKyAqIFdoZW4gc2VuZGlu ZyBkYXRhIHRpbWVzIG91dCwgZGF0YSB3aWxsIGJlIHNlcmlhbGl6ZWQgdG8gZGlzay4gQW5kIHRo ZQorICogY3VycmVudCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gd2lsbCBlbnRlciBQQVJUSUFMX1NF UklBTElaRSBtb2RlLCB3aGljaCBtZWFucworICogdGhhdCBzdWJzZXF1ZW50IGRhdGEgd2lsbCBh bHNvIGJlIHNlcmlhbGl6ZWQgdG8gZGlzay4KICAqLwogdm9pZAogcGFfc2VuZF9kYXRhKFBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbywgU2l6ZSBuYnl0ZXMsCkBAIC05NzIsNiArMTAzNiw3 IEBAIHBhX3NlbmRfZGF0YShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sIFNpemUgbmJ5 dGVzLAogCXNobV9tcV9yZXN1bHQgcmVzdWx0OwogCVRpbWVzdGFtcFR6IHN0YXJ0VGltZSA9IDA7 CiAKKwlBc3NlcnQoIXdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyk7CiAJQXNzZXJ0KCFJc1RyYW5z YWN0aW9uU3RhdGUoKSk7CiAKICNkZWZpbmUgU0hNX1NFTkRfVElNRU9VVF9NUwkJMTAwMDAKQEAg LTEwMDIsOSArMTA2Nyw1NyBAQCBwYV9zZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KndpbmZvLCBTaXplIG5ieXRlcywKIAkJCXN0YXJ0VGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAo KTsKIAkJZWxzZSBpZiAoVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMoc3RhcnRUaW1lLCBHZXRD dXJyZW50VGltZXN0YW1wKCksCiAJCQkJCQkJCQkJCVNITV9TRU5EX1RJTUVPVVRfTVMpKQotCQkJ ZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUp LAotCQkJCQkgZXJybXNnKCJ0ZXJtaW5hdGluZyBsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVs IGFwcGx5IHdvcmtlciBkdWUgdG8gdGltZW91dCIpKSk7CisJCXsKKwkJCVN0cmluZ0luZm9EYXRh IG1zZzsKKwkJCUxvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbjsKKworCQkJLyoKKwkJCSAqIFRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgbWlnaHQgYmUgc3R1Y2sgZm9yIHNvbWUgcmVhc29uLCBzbwor CQkJICogc3RvcCBzZW5kaW5nIGRhdGEgdG8gcGFyYWxsZWwgd29ya2VyIGFuZCBzdGFydCB0byBz ZXJpYWxpemUKKwkJCSAqIGRhdGEgdG8gZmlsZXMuCisJCQkgKi8KKwkJCXdpbmZvLT5zZXJpYWxp emVfY2hhbmdlcyA9IHRydWU7CisKKwkJCWluaXRTdHJpbmdJbmZvKCZtc2cpOworCQkJYXBwZW5k QmluYXJ5U3RyaW5nSW5mbygmbXNnLCBkYXRhLCBuYnl0ZXMpOworCisJCQkvKiBTa2lwIGZpcnN0 IGJ5dGUgYW5kIHN0YXRpc3RpY3MgZmllbGRzLiAqLworCQkJbXNnLmN1cnNvciArPSBTSVpFX1NU QVRTX01FU1NBR0UgKyAxOworCisJCQkvKiBJbml0aWFsaXplIHRoZSBzdHJlYW0gZmlsZXNldC4g Ki8KKwkJCXNlcmlhbGl6ZV9zdHJlYW1fc3RhcnQod2luZm8tPnNoYXJlZC0+eGlkLCB0cnVlKTsK KworCQkJLyogV3JpdGUgdGhpcyBtZXNzYWdlIHRvIGEgZmlsZS4gKi8KKwkJCWFjdGlvbiA9IHBx X2dldG1zZ2J5dGUoJm1zZyk7CisJCQlzdHJlYW1fd3JpdGVfY2hhbmdlKGFjdGlvbiwgJm1zZyk7 CisKKwkJCS8qCisJCQkgKiBUaGUgc3RyZWFtIGxvY2sgaXMgcmVsZWFzZWQgd2hlbiBwcm9jZXNz aW5nIGNoYW5nZXMgaW4gYQorCQkJICogc3RyZWFtaW5nIGJsb2NrLCBzbyB0aGUgbGVhZGVyIG5l ZWRzIHRvIGFjcXVpcmUgdGhlIGxvY2sgaGVyZQorCQkJICogYmVmb3JlIGVudGVyaW5nIFBBUlRJ QUxfU0VSSUFMSVpFIG1vZGUgdG8gZW5zdXJlIHRoYXQgdGhlCisJCQkgKiBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgd2lsbCB3YWl0IGZvciB0aGUgbGVhZGVyIHRvIHJlbGVhc2UgdGhlCisJCQkgKiBz dHJlYW0gbG9jay4KKwkJCSAqLworCQkJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uICYmCisJ CQkJYWN0aW9uICE9IExPR0lDQUxfUkVQX01TR19TVFJFQU1fU1RPUCkKKwkJCXsKKwkJCQlwYV9s b2NrX3N0cmVhbSh3aW5mby0+c2hhcmVkLT54aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCQkJ fQorCisJCQkvKgorCQkJICogQ2xvc2UgdGhlIHN0cmVhbSBmaWxlIGlmIG5vdCBpbiBhIHN0cmVh bWluZyBibG9jayBvciB0aGUKKwkJCSAqIG1lc3NhZ2UgYmVpbmcgcHJvY2Vzc2VkIGlzIHRoZSBs YXN0IG1lc3NhZ2Ugb2YgYSBzdHJlYW1pbmcKKwkJCSAqIGJsb2NrLgorCQkJICovCisJCQllbHNl CisJCQl7CisJCQkJc2VyaWFsaXplX3N0cmVhbV9zdG9wKHdpbmZvLT5zaGFyZWQtPnhpZCk7CisJ CQl9CisKKwkJCXBhX3NldF9maWxlc2V0X3N0YXRlKHdpbmZvLT5zaGFyZWQsIExFQURFUl9GSUxF U0VUX0JVU1kpOworCisJCQlicmVhazsKKwkJfQogCX0KIH0KIApAQCAtMTIyOCw5ICsxMzQxLDM5 IEBAIHBhX3N0cmVhbV9hYm9ydChMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRh KQogCiAJCWlmIChmb3VuZCkKIAkJeworCQkJYm9vbAkJcmVvcGVuX3N0cmVhbV9mZCA9IGZhbHNl OworCQkJaW50CQkJZmlsZW5vOworCQkJb2ZmX3QJCW9mZnNldDsKKworCQkJLyoKKwkJCSAqIElm IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgYXBwbHlpbmcgdGhlIHNwb29sZWQgbWVzc2Fn ZXMsCisJCQkgKiB3ZSBzYXZlIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gYW5kIGNsb3NlIHRo ZSBmaWxlIHRvIHByZXZlbnQKKwkJCSAqIHRoZSBmaWxlIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5 IGNsb3NlZCBvbiByb2xsYmFjay4KKwkJCSAqLworCQkJaWYgKHN0cmVhbV9mZCkKKwkJCXsKKwkJ CQlCdWZGaWxlVGVsbChzdHJlYW1fZmQsICZmaWxlbm8sICZvZmZzZXQpOworCQkJCUJ1ZkZpbGVD bG9zZShzdHJlYW1fZmQpOworCQkJCXJlb3Blbl9zdHJlYW1fZmQgPSB0cnVlOworCQkJfQorCiAJ CQlSb2xsYmFja1RvU2F2ZXBvaW50KHNwbmFtZSk7CiAJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKIAkJCXN1YnhhY3RsaXN0ID0gbGlzdF90cnVuY2F0ZShzdWJ4YWN0bGlzdCwgaSArIDEp OworCisJCQkvKgorCQkJICogUmVvcGVuIHRoZSBmaWxlIGFuZCBzZXQgdGhlIGZpbGUgcG9zaXRp b24gdG8gdGhlIHNhdmVkCisJCQkgKiBwb3NpdGlvbi4KKwkJCSAqLworCQkJaWYgKHJlb3Blbl9z dHJlYW1fZmQpCisJCQl7CisJCQkJY2hhcgkJcGF0aFtNQVhQR1BBVEhdOworCisJCQkJY2hhbmdl c19maWxlbmFtZShwYXRoLCBNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCQkJCXN0 cmVhbV9mZCA9IEJ1ZkZpbGVPcGVuRmlsZVNldCgmTXlQYXJhbGxlbFNoYXJlZC0+ZmlsZXNldCwK KwkJCQkJCQkJCQkJICAgcGF0aCwgT19SRE9OTFksIGZhbHNlKTsKKwkJCQlCdWZGaWxlU2Vlayhz dHJlYW1fZmQsIGZpbGVubywgb2Zmc2V0LCBTRUVLX1NFVCk7CisJCQl9CiAJCX0KIAogCQlwZ3N0 YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEVJTlRSQU5TQUNUSU9OLCBOVUxMKTsKQEAgLTEy MzgsNiArMTM4MSwyNyBAQCBwYV9zdHJlYW1fYWJvcnQoTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0 YSAqYWJvcnRfZGF0YSkKIH0KIAogLyoKKyAqIFNldCB0aGUgZmlsZXNldF9zdGF0ZSBmbGFnIGZv ciB0aGUgZ2l2ZW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBUaGUKKyAqIHN0cmVhbV9maWxlc2V0 IG9mIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHdpbGwgYmUgd3JpdHRlbiBpbnRvIHRoZSBzaGFy ZWQKKyAqIG1lbW9yeSBpZiB0aGUgZmlsZXNldF9zdGF0ZSBpcyBMRUFERVJfRklMRVNFVF9BQ0NF U1NJQkxFLgorICovCit2b2lkCitwYV9zZXRfZmlsZXNldF9zdGF0ZShQYXJhbGxlbEFwcGx5V29y a2VyU2hhcmVkICp3c2hhcmVkLCBMZWFkZXJGaWxlU2V0U3RhdGUgZmlsZXNldF9zdGF0ZSkKK3sK KwlTcGluTG9ja0FjcXVpcmUoJndzaGFyZWQtPm11dGV4KTsKKwl3c2hhcmVkLT5maWxlc2V0X3N0 YXRlID0gZmlsZXNldF9zdGF0ZTsKKworCWlmIChmaWxlc2V0X3N0YXRlID09IExFQURFUl9GSUxF U0VUX0FDQ0VTU0lCTEUpCisJeworCQlBc3NlcnQoYW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpKTsK KwkJQXNzZXJ0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpOworCQl3c2hhcmVk LT5maWxlc2V0ID0gKk15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQ7CisJfQorCisJ U3BpbkxvY2tSZWxlYXNlKCZ3c2hhcmVkLT5tdXRleCk7Cit9CisKKy8qCiAgKiBIZWxwZXIgZnVu Y3Rpb25zIHRvIGFjcXVpcmUgYW5kIHJlbGVhc2UgYSBsb2NrIGZvciBlYWNoIHN0cmVhbSBibG9j ay4KICAqCiAgKiBTZXQgbG9ja3RhZ19maWVsZDQgdG8gMCB0byBpbmRpY2F0ZSB0aGF0IGl0J3Mg YSBzdHJlYW0gbG9jay4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmlu ZGV4IDgxNGE1YTQuLjU1YjE3ZjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYwpAQCAtMjE4LDcgKzIxOCw2IEBACiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2FscmVj ZWl2ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCIKICNpbmNs dWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9idWZmaWxl LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKQEAgLTI3Nyw2ICsyNzYsMTkgQEAgdHlwZWRlZiBz dHJ1Y3QgQXBwbHlFeGVjdXRpb25EYXRhCiAgKiBDaGFuZ2VzIGFyZSB3cml0dGVuIHRvIHRlbXBv cmFyeSBmaWxlcyBhbmQgdGhlbiBhcHBsaWVkIHdoZW4gdGhlIGZpbmFsCiAgKiBjb21taXQgYXJy aXZlcy4KICAqCisgKiBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkU6CisgKiBUaGUgYWN0 aW9uIG1lYW5zIHRoYXQgd2UgYXJlIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBoYXZl IHNlbnQgc29tZQorICogY2hhbmdlcyB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCBidXQg dGhlIHJlbWFpbmluZyBjaGFuZ2VzIG5lZWQgdG8gYmUKKyAqIHNlcmlhbGl6ZWQgdG8gZGlzayBk dWUgdG8gdGltZW91dCB3aGlsZSBzZW5kaW5nIGRhdGEsIGFuZCB0aGUgcGFyYWxsZWwgYXBwbHkK KyAqIHdvcmtlciB3aWxsIGFwcGx5IHRoZXNlIGNoYW5nZXMgd2hlbiB0aGUgZmluYWwgY29tbWl0 IGFycml2ZXMuCisgKgorICogT25lIG1pZ2h0IHRoaW5rIHdlIGNhbiB1c2UgTEVBREVSX1NFUklB TElaRSBkaXJlY3RseS4gQnV0IGluIHBhcnRpYWwKKyAqIHNlcmlhbGl6ZSBtb2RlLCBpbiBhZGRp dGlvbiB0byBzZXJpYWxpemluZyBjaGFuZ2VzIHRvIGZpbGUsIHRoZSBsZWFkZXIKKyAqIHdvcmtl ciBuZWVkIHRvIHdyaXRlIHRoZSBTVFJFQU1fWFhYIG1lc3NhZ2UgdG8gZGlzaywgYW5kIG5lZWQg dG8gd2FpdCBmb3IKKyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0byBmaW5pc2ggdGhlIHRyYW5z YWN0aW9uIHdoZW4gcHJvY2Vzc2luZyB0aGUKKyAqIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5k LiBTbyBhIG5ldyBhY3Rpb24gd2FzIGludHJvZHVjZWQgdG8gbWFrZSB0aGUgbG9naWMKKyAqIGNs ZWFyZXIuCisgKgogICogVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CiAgKiBUaGUgYWN0 aW9uIG1lYW5zIHRoYXQgd2UgYXJlIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBuZWVk IHRvIHNlbmQgdGhlCiAgKiBjaGFuZ2VzIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCkBA IC0yOTIsNiArMzA0LDcgQEAgdHlwZWRlZiBlbnVtCiAKIAkvKiBBY3Rpb25zIGZvciBzdHJlYW1p bmcgdHJhbnNhY3Rpb25zLiAqLwogCVRSQU5TX0xFQURFUl9TRVJJQUxJWkUsCisJVFJBTlNfTEVB REVSX1BBUlRJQUxfU0VSSUFMSVpFLAogCVRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMLAog CVRSQU5TX1BBUkFMTEVMX0FQUExZCiB9IFRyYW5zQXBwbHlBY3Rpb247CkBAIC0zMjYsNyArMzM5 LDcgQEAgc3RhdGljIFhMb2dSZWNQdHIgcmVtb3RlX2ZpbmFsX2xzbiA9IEludmFsaWRYTG9nUmVj UHRyOwogLyogZmllbGRzIHZhbGlkIG9ubHkgd2hlbiBwcm9jZXNzaW5nIHN0cmVhbWVkIHRyYW5z YWN0aW9uICovCiBib29sCQlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOwogCi1zdGF0 aWMgVHJhbnNhY3Rpb25JZCBzdHJlYW1feGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CitUcmFu c2FjdGlvbklkIHN0cmVhbV94aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAogLyoKICAqIFRo ZSBudW1iZXIgb2YgY2hhbmdlcyBhcHBsaWVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBkdXJp bmcgb25lIHN0cmVhbWluZwpAQCAtMzUzLDcgKzM2Niw3IEBAIHN0YXRpYyBYTG9nUmVjUHRyIHNr aXBfeGFjdF9maW5pc2hfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CiAjZGVmaW5lIGlzX3NraXBw aW5nX2NoYW5nZXMoKSAodW5saWtlbHkoIVhMb2dSZWNQdHJJc0ludmFsaWQoc2tpcF94YWN0X2Zp bmlzaF9sc24pKSkKIAogLyogQnVmRmlsZSBoYW5kbGUgb2YgdGhlIGN1cnJlbnQgc3RyZWFtaW5n IGZpbGUgKi8KLXN0YXRpYyBCdWZGaWxlICpzdHJlYW1fZmQgPSBOVUxMOworQnVmRmlsZSAgICAq c3RyZWFtX2ZkID0gTlVMTDsKIAogdHlwZWRlZiBzdHJ1Y3QgU3ViWGFjdEluZm8KIHsKQEAgLTM3 NCw3ICszODcsNyBAQCB0eXBlZGVmIHN0cnVjdCBBcHBseVN1YlhhY3REYXRhCiBzdGF0aWMgQXBw bHlTdWJYYWN0RGF0YSBzdWJ4YWN0X2RhdGEgPSB7MCwgMCwgSW52YWxpZFRyYW5zYWN0aW9uSWQs IE5VTEx9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3VieGFjdF9maWxlbmFtZShjaGFyICpwYXRo LCBPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGFu Z2VzX2ZpbGVuYW1lKGNoYXIgKnBhdGgsIE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQpOwor aW5saW5lIHZvaWQgY2hhbmdlc19maWxlbmFtZShjaGFyICpwYXRoLCBPaWQgc3ViaWQsIFRyYW5z YWN0aW9uSWQgeGlkKTsKIAogLyoKICAqIEluZm9ybWF0aW9uIGFib3V0IHN1YnRyYW5zYWN0aW9u cyBvZiBhIGdpdmVuIHRvcGxldmVsIHRyYW5zYWN0aW9uLgpAQCAtMzg3LDEwICs0MDAsOSBAQCBz dGF0aWMgaW5saW5lIHZvaWQgY2xlYW51cF9zdWJ4YWN0X2luZm8odm9pZCk7CiAvKgogICogU2Vy aWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBjaGFuZ2VzIGZvciBhIHRvcGxldmVsIHRyYW5zYWN0aW9u LgogICovCi1zdGF0aWMgdm9pZCBzdHJlYW1fY2xlYW51cF9maWxlcyhPaWQgc3ViaWQsIFRyYW5z YWN0aW9uSWQgeGlkKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV9vcGVuX2ZpbGUoT2lkIHN1YmlkLCBU cmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkgYm9vbCBmaXJzdF9zZWdtZW50KTsKLXN0YXRpYyB2 b2lkIHN0cmVhbV93cml0ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcyk7CitzdGF0 aWMgdm9pZCBzdHJlYW1fd3JpdGVfbWVzc2FnZShUcmFuc2FjdGlvbklkIHhpZCwgY2hhciBhY3Rp b24sIFN0cmluZ0luZm8gcyk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fY2xvc2VfZmlsZSh2b2lkKTsK IAogc3RhdGljIHZvaWQgc2VuZF9mZWVkYmFjayhYTG9nUmVjUHRyIHJlY3Zwb3MsIGJvb2wgZm9y Y2UsIGJvb2wgcmVxdWVzdFJlcGx5KTsKQEAgLTQyMiw5ICs0MzQsNiBAQCBzdGF0aWMgdm9pZCBh cHBseV9oYW5kbGVfdHVwbGVfcm91dGluZyhBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogLyog Q29tcHV0ZSBHSUQgZm9yIHR3b19waGFzZSB0cmFuc2FjdGlvbnMgKi8KIHN0YXRpYyB2b2lkIFR3 b1BoYXNlVHJhbnNhY3Rpb25HaWQoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCwgY2hhciAq Z2lkLCBpbnQgc3pnaWQpOwogCi0vKiBDb21tb24gc3RyZWFtaW5nIGZ1bmN0aW9uIHRvIGFwcGx5 IGFsbCB0aGUgc3Bvb2xlZCBtZXNzYWdlcyAqLwotc3RhdGljIHZvaWQgYXBwbHlfc3Bvb2xlZF9t ZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOwotCiAvKiBGdW5jdGlv bnMgZm9yIHNraXBwaW5nIGNoYW5nZXMgKi8KIHN0YXRpYyB2b2lkIG1heWJlX3N0YXJ0X3NraXBw aW5nX2NoYW5nZXMoWExvZ1JlY1B0ciBmaW5pc2hfbHNuKTsKIHN0YXRpYyB2b2lkIHN0b3Bfc2tp cHBpbmdfY2hhbmdlcyh2b2lkKTsKQEAgLTU3Myw2ICs1ODIsNyBAQCBoYW5kbGVfc3RyZWFtZWRf dHJhbnNhY3Rpb24oTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiAJVHJh bnNhY3Rpb25JZCBjdXJyZW50X3hpZDsKIAlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87 CiAJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CisJU3RyaW5nSW5mb0RhdGEgb3JpZ2lu YWxfbXNnOwogCiAJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihz dHJlYW1feGlkLCAmd2luZm8pOwogCkBAIC01ODIsNiArNTkyLDggQEAgaGFuZGxlX3N0cmVhbWVk X3RyYW5zYWN0aW9uKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBzKQogCiAJ QXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHN0cmVhbV94aWQpKTsKIAorCW9yaWdpbmFsX21z ZyA9ICpzOworCiAJLyoKIAkgKiBXZSBzaG91bGQgaGF2ZSByZWNlaXZlZCBYSUQgb2YgdGhlIHN1 YnhhY3QgYXMgdGhlIGZpcnN0IHBhcnQgb2YgdGhlCiAJICogbWVzc2FnZSwgc28gZXh0cmFjdCBp dC4KQEAgLTYwNSwxMCArNjE3LDE0IEBAIGhhbmRsZV9zdHJlYW1lZF90cmFuc2FjdGlvbihMb2dp Y2FsUmVwTXNnVHlwZSBhY3Rpb24sIFN0cmluZ0luZm8gcykKIAkJCXN0cmVhbV93cml0ZV9jaGFu Z2UoYWN0aW9uLCBzKTsKIAkJCXJldHVybiB0cnVlOwogCisJCWNhc2UgVFJBTlNfTEVBREVSX1BB UlRJQUxfU0VSSUFMSVpFOgogCQljYXNlIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgog CQkJQXNzZXJ0KHdpbmZvKTsKIAotCQkJcGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRh dGEpOworCQkJaWYgKGFwcGx5X2FjdGlvbiA9PSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExF TCkKKwkJCQlwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisJCQllbHNlCisJ CQkJc3RyZWFtX3dyaXRlX2NoYW5nZShhY3Rpb24sICZvcmlnaW5hbF9tc2cpOwogCiAJCQkvKgog CQkJICogWFhYIFRoZSBwdWJsaXNoZXIgc2lkZSBkb2Vzbid0IGFsd2F5cyBzZW5kIHJlbGF0aW9u L3R5cGUgdXBkYXRlCkBAIC0xMjUzLDYgKzEyNjksNyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3By ZXBhcmUoU3RyaW5nSW5mbyBzKQogCUxvZ2ljYWxSZXBQcmVwYXJlZFR4bkRhdGEgcHJlcGFyZV9k YXRhOwogCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKIAlUcmFuc0FwcGx5QWN0aW9u IGFwcGx5X2FjdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKIAogCWlm IChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTEyNzgsNyAr MTI5NSw4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShTdHJpbmdJbmZvIHMpCiAJCQkg KiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gc2VyaWFsaXplZCB0byBmaWxlLCBzbyByZXBsYXkg YWxsIHRoZQogCQkJICogc3Bvb2xlZCBvcGVyYXRpb25zLgogCQkJICovCi0JCQlhcHBseV9zcG9v bGVkX21lc3NhZ2VzKHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJlX2xzbik7 CisJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2Zp bGVzZXQsCisJCQkJCQkJCSAgIHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJl X2xzbik7CiAKIAkJCS8qIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkLiAqLwogCQkJ YXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CkBAIC0xMjk0LDYg KzEzMTIsNyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCQkJ YnJlYWs7CiAKIAkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJY2FzZSBU UkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkU6CiAJCQlBc3NlcnQod2luZm8pOwogCiAJCQkv KgpAQCAtMTMwMywxMyArMTMyMiwyMSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3Ry aW5nSW5mbyBzKQogCQkJcGFfdW5sb2NrX3N0cmVhbSh3aW5mby0+c2hhcmVkLT54aWQsIEFjY2Vz c0V4Y2x1c2l2ZUxvY2spOwogCiAJCQkvKiBTZW5kIFNUUkVBTSBQUkVQQVJFIG1lc3NhZ2UgdG8g dGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gKi8KLQkJCXBhX3NlbmRfZGF0YSh3aW5mbywgcy0+ bGVuLCBzLT5kYXRhKTsKKwkJCWlmIChhcHBseV9hY3Rpb24gPT0gVFJBTlNfTEVBREVSX1NFTkRf VE9fUEFSQUxMRUwpCisJCQkJcGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpOwor CQkJZWxzZQorCQkJCXN0cmVhbV93cml0ZV9tZXNzYWdlKHByZXBhcmVfZGF0YS54aWQsCisJCQkJ CQkJCQkgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9QUkVQQVJFLAorCQkJCQkJCQkJICZvcmlnaW5h bF9tc2cpOworCisJCQlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzKQorCQkJCXBhX3NldF9m aWxlc2V0X3N0YXRlKHdpbmZvLT5zaGFyZWQsIExFQURFUl9GSUxFU0VUX0FDQ0VTU0lCTEUpOwog CiAJCQkvKgotCQkJICogQWZ0ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyLCB3YWl0IGZvcgotCQkJICogdGhhdCB3b3JrZXIgdG8gZmluaXNoLiBUaGlzIGlz IG5lY2Vzc2FyeSB0byBtYWludGFpbiBjb21taXQKLQkJCSAqIG9yZGVyIHdoaWNoIGF2b2lkcyBm YWlsdXJlcyBkdWUgdG8gdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVzIGFuZAotCQkJICogZGVhZGxv Y2tzLgorCQkJICogQWZ0ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyIG9yCisJCQkgKiBzZXJpYWxpemluZyBkYXRhIHRvIGZpbGUsIHdhaXQgZm9yIHRoYXQg d29ya2VyIHRvIGZpbmlzaC4gVGhpcworCQkJICogaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIGNv bW1pdCBvcmRlciB3aGljaCBhdm9pZHMgZmFpbHVyZXMgZHVlCisJCQkgKiB0byB0cmFuc2FjdGlv biBkZXBlbmRlbmNpZXMgYW5kIGRlYWRsb2Nrcy4KIAkJCSAqLwogCQkJcGFfd2FpdF9mb3JfeGFj dF9maW5pc2god2luZm8tPnNoYXJlZCk7CiAJCQkodm9pZCkgcGFfZnJlZV93b3JrZXIod2luZm8s IHByZXBhcmVfZGF0YS54aWQpOwpAQCAtMTMyMCw2ICsxMzQ3LDE0IEBAIGFwcGx5X2hhbmRsZV9z dHJlYW1fcHJlcGFyZShTdHJpbmdJbmZvIHMpCiAJCQlicmVhazsKIAogCQljYXNlIFRSQU5TX1BB UkFMTEVMX0FQUExZOgorCisJCQkvKgorCQkJICogQ2xvc2UgdGhlIGZpbGUgYmVmb3JlIGNvbW1p dHRpbmcgaWYgdGhlIHBhcmFsbGVsIGFwcGx5IGlzCisJCQkgKiBhcHBseWluZyBzcG9vbGVkIGNo YW5nZXMuCisJCQkgKi8KKwkJCWlmIChzdHJlYW1fZmQpCisJCQkJQnVmRmlsZUNsb3NlKHN0cmVh bV9mZCk7CisKIAkJCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAogCQkJLyogTWFyayB0aGUg dHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQuICovCkBAIC0xMzgwLDcgKzE0MTUsNDYgQEAgYXBwbHlf aGFuZGxlX29yaWdpbihTdHJpbmdJbmZvIHMpCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiT1JJR0lO IG1lc3NhZ2Ugc2VudCBvdXQgb2Ygb3JkZXIiKSkpOwogfQogCisvKgorICogSW5pdGlhbGl6ZSBm aWxlc2V0IChpZiBub3QgYWxyZWFkeSBkb25lKS4KKyAqCisgKiBDcmVhdGUgYSBuZXcgZmlsZSB3 aGVuIGZpcnN0X3NlZ21lbnQgaXMgdHJ1ZSwgb3RoZXJ3aXNlIG9wZW4gdGhlIGV4aXN0aW5nCisg KiBmaWxlLgorICovCit2b2lkCitzZXJpYWxpemVfc3RyZWFtX3N0YXJ0KFRyYW5zYWN0aW9uSWQg eGlkLCBib29sIGZpcnN0X3NlZ21lbnQpCit7CisJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOwor CisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSB3b3JrZXIncyBzdHJlYW1fZmlsZXNldCBpZiB3ZSBo YXZlbid0IHlldC4gVGhpcyB3aWxsIGJlCisJICogdXNlZCBmb3IgdGhlIGVudGlyZSBkdXJhdGlv biBvZiB0aGUgd29ya2VyIHNvIGNyZWF0ZSBpdCBpbiBhIHBlcm1hbmVudAorCSAqIGNvbnRleHQu IFdlIGNyZWF0ZSB0aGlzIG9uIHRoZSB2ZXJ5IGZpcnN0IHN0cmVhbWluZyBtZXNzYWdlIGZyb20g YW55CisJICogdHJhbnNhY3Rpb24gYW5kIHRoZW4gdXNlIGl0IGZvciB0aGlzIGFuZCBvdGhlciBz dHJlYW1pbmcgdHJhbnNhY3Rpb25zLgorCSAqIE5vdywgd2UgY291bGQgY3JlYXRlIGEgZmlsZXNl dCBhdCB0aGUgc3RhcnQgb2YgdGhlIHdvcmtlciBhcyB3ZWxsIGJ1dAorCSAqIHRoZW4gd2Ugd29u J3QgYmUgc3VyZSB0aGF0IGl0IHdpbGwgZXZlciBiZSB1c2VkLgorCSAqLworCWlmIChNeUxvZ2lj YWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID09IE5VTEwpCisJeworCQlNZW1vcnlDb250ZXh0 IG9sZGN0eDsKKworCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0 KTsKIAorCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVv ZihGaWxlU2V0KSk7CisJCUZpbGVTZXRJbml0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2Zp bGVzZXQpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCX0KKworCS8qIE9w ZW4gdGhlIHNwb29sIGZpbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICovCisJc3RyZWFtX29wZW5f ZmlsZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsIGZpcnN0X3NlZ21lbnQpOworCisJ LyogSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHNlZ21lbnQsIG9wZW4gZXhpc3Rpbmcgc3VieGFj dCBmaWxlLiAqLworCWlmICghZmlyc3Rfc2VnbWVudCkKKwkJc3VieGFjdF9pbmZvX3JlYWQoTXlM b2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKKworCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7 Cit9CiAKIC8qCiAgKiBIYW5kbGUgU1RSRUFNIFNUQVJUIG1lc3NhZ2UuCkBAIC0xMzk3LDYgKzE0 NzEsNyBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykKIAlib29sCQlm aXJzdF9zZWdtZW50OwogCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKIAlUcmFuc0Fw cGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAq czsKIAogCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKQEAg LTE0MzEsNDMgKzE1MDYsMjcgQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChTdHJpbmdJbmZv IHMpCiAJCWNhc2UgVFJBTlNfTEVBREVSX1NFUklBTElaRToKIAogCQkJLyoKLQkJCSAqIFN0YXJ0 IGEgdHJhbnNhY3Rpb24gb24gc3RyZWFtIHN0YXJ0LCB0aGlzIHRyYW5zYWN0aW9uIHdpbGwgYmUK LQkJCSAqIGNvbW1pdHRlZCBvbiB0aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEgdGFibGVz eW5jIHdvcmtlciBpbgotCQkJICogd2hpY2ggY2FzZSBpdCB3aWxsIGJlIGNvbW1pdHRlZCBhZnRl ciBwcm9jZXNzaW5nIGFsbCB0aGUKLQkJCSAqIG1lc3NhZ2VzLiBXZSBuZWVkIHRoZSB0cmFuc2Fj dGlvbiBmb3IgaGFuZGxpbmcgdGhlIGJ1ZmZpbGUsCi0JCQkgKiB1c2VkIGZvciBzZXJpYWxpemlu ZyB0aGUgc3RyZWFtaW5nIGRhdGEgYW5kIHN1YnhhY3QgaW5mby4KKwkJCSAqIHNlcmlhbGl6ZV9z dHJlYW1fc3RhcnQgd2lsbCBzdGFydCBhIHRyYW5zYWN0aW9uLCB0aGlzCisJCQkgKiB0cmFuc2Fj dGlvbiB3aWxsIGJlIGNvbW1pdHRlZCBvbiB0aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEK KwkJCSAqIHRhYmxlc3luYyB3b3JrZXIgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlIGNvbW1pdHRl ZCBhZnRlcgorCQkJICogcHJvY2Vzc2luZyBhbGwgdGhlIG1lc3NhZ2VzLiBXZSBuZWVkIHRoZSB0 cmFuc2FjdGlvbiBmb3IKKwkJCSAqIGhhbmRsaW5nIHRoZSBidWZmaWxlLCB1c2VkIGZvciBzZXJp YWxpemluZyB0aGUgc3RyZWFtaW5nIGRhdGEKKwkJCSAqIGFuZCBzdWJ4YWN0IGluZm8uCiAJCQkg Ki8KLQkJCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKwkJCXNlcmlhbGl6ZV9zdHJlYW1fc3Rh cnQoc3RyZWFtX3hpZCwgZmlyc3Rfc2VnbWVudCk7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5T X0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToKIAogCQkJLyoKLQkJCSAqIEluaXRpYWxpemUgdGhl IHdvcmtlcidzIHN0cmVhbV9maWxlc2V0IGlmIHdlIGhhdmVuJ3QgeWV0LiBUaGlzCi0JCQkgKiB3 aWxsIGJlIHVzZWQgZm9yIHRoZSBlbnRpcmUgZHVyYXRpb24gb2YgdGhlIHdvcmtlciBzbyBjcmVh dGUgaXQKLQkJCSAqIGluIGEgcGVybWFuZW50IGNvbnRleHQuIFdlIGNyZWF0ZSB0aGlzIG9uIHRo ZSB2ZXJ5IGZpcnN0Ci0JCQkgKiBzdHJlYW1pbmcgbWVzc2FnZSBmcm9tIGFueSB0cmFuc2FjdGlv biBhbmQgdGhlbiB1c2UgaXQgZm9yIHRoaXMKLQkJCSAqIGFuZCBvdGhlciBzdHJlYW1pbmcgdHJh bnNhY3Rpb25zLiBOb3csIHdlIGNvdWxkIGNyZWF0ZSBhCi0JCQkgKiBmaWxlc2V0IGF0IHRoZSBz dGFydCBvZiB0aGUgd29ya2VyIGFzIHdlbGwgYnV0IHRoZW4gd2Ugd29uJ3QgYmUKLQkJCSAqIHN1 cmUgdGhhdCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkJCSAqIFRoZSBmaWxlIHNob3VsZCBoYXZl IGJlZW4gY3JlYXRlZCB3aGVuIGVudGVyaW5nCisJCQkgKiBQQVJUSUFMX1NFUklBTElaRSBtb2Rl IHNvIG5vIG5lZWQgdG8gY3JlYXRlIGl0IGFnYWluLiBUaGUKKwkJCSAqIHRyYW5zYWN0aW9uIHN0 YXJ0ZWQgaW4gc2VyaWFsaXplX3N0cmVhbV9zdGFydCB3aWxsIGJlIGNvbW1pdHRlZAorCQkJICog b24gdGhlIHN0cmVhbSBzdG9wLgogCQkJICovCi0JCQlpZiAoTXlMb2dpY2FsUmVwV29ya2VyLT5z dHJlYW1fZmlsZXNldCA9PSBOVUxMKQotCQkJewotCQkJCU1lbW9yeUNvbnRleHQgb2xkY3R4Owor CQkJc2VyaWFsaXplX3N0cmVhbV9zdGFydChzdHJlYW1feGlkLCBmYWxzZSk7CisJCQlzdHJlYW1f d3JpdGVfY2hhbmdlKExPR0lDQUxfUkVQX01TR19TVFJFQU1fU1RBUlQsICZvcmlnaW5hbF9tc2cp OwogCi0JCQkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7Ci0K LQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVvZihG aWxlU2V0KSk7Ci0JCQkJRmlsZVNldEluaXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmls ZXNldCk7Ci0KLQkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKLQkJCX0KLQotCQkJ LyogT3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbi4gKi8KLQkJCXN0cmVh bV9vcGVuX2ZpbGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCwgZmlyc3Rf c2VnbWVudCk7Ci0KLQkJCS8qIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzZWdtZW50LCBvcGVu IGV4aXN0aW5nIHN1YnhhY3QgZmlsZS4gKi8KLQkJCWlmICghZmlyc3Rfc2VnbWVudCkKLQkJCQlz dWJ4YWN0X2luZm9fcmVhZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlkKTsK LQotCQkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVFJBTlNf TEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CkBAIC0xNTEzLDYgKzE1NzIsMzQgQEAgYXBwbHlfaGFu ZGxlX3N0cmVhbV9zdGFydChTdHJpbmdJbmZvIHMpCiB9CiAKIC8qCisgKiBVcGRhdGUgdGhlIGlu Zm9ybWF0aW9uIGFib3V0IHN1YnhhY3RzIGFuZCBjbG9zZSB0aGUgZmlsZS4KKyAqCisgKiBUaGlz IGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgc2VyaWFsaXplX3N0cmVhbV9zdGFy dCBmdW5jdGlvbiBoYXMKKyAqIGJlZW4gY2FsbGVkLgorICovCit2b2lkCitzZXJpYWxpemVfc3Ry ZWFtX3N0b3AoVHJhbnNhY3Rpb25JZCB4aWQpCit7CisJLyoKKwkgKiBDbG9zZSB0aGUgZmlsZSB3 aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcywgYW5kIHNlcmlhbGl6ZSBpbmZvcm1hdGlvbiBhYm91dAor CSAqIHN1YnhhY3RzIGZvciB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24uCisJICovCisJc3VieGFj dF9pbmZvX3dyaXRlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CisJc3RyZWFtX2Ns b3NlX2ZpbGUoKTsKKworCS8qIFdlIG11c3QgYmUgaW4gYSB2YWxpZCB0cmFuc2FjdGlvbiBzdGF0 ZSAqLworCUFzc2VydChJc1RyYW5zYWN0aW9uU3RhdGUoKSk7CisKKwkvKiBDb21taXQgdGhlIHBl ci1zdHJlYW0gdHJhbnNhY3Rpb24gKi8KKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwor CS8qIFJlc2V0IHBlci1zdHJlYW0gY29udGV4dCAqLworCU1lbW9yeUNvbnRleHRSZXNldChMb2dp Y2FsU3RyZWFtaW5nQ29udGV4dCk7CisKKwlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lE TEUsIE5VTEwpOworfQorCisvKgogICogSGFuZGxlIFNUUkVBTSBTVE9QIG1lc3NhZ2UuCiAgKi8K IHN0YXRpYyB2b2lkCkBAIC0xNTMxLDI0ICsxNjE4LDEzIEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1f c3RvcChTdHJpbmdJbmZvIHMpCiAJc3dpdGNoIChhcHBseV9hY3Rpb24pCiAJewogCQljYXNlIFRS QU5TX0xFQURFUl9TRVJJQUxJWkU6CisJCQlzZXJpYWxpemVfc3RyZWFtX3N0b3Aoc3RyZWFtX3hp ZCk7CisJCQlicmVhazsKIAotCQkJLyoKLQkJCSAqIENsb3NlIHRoZSBmaWxlIHdpdGggc2VyaWFs aXplZCBjaGFuZ2VzLCBhbmQgc2VyaWFsaXplCi0JCQkgKiBpbmZvcm1hdGlvbiBhYm91dCBzdWJ4 YWN0cyBmb3IgdGhlIHRvcGxldmVsIHRyYW5zYWN0aW9uLgotCQkJICovCi0JCQlzdWJ4YWN0X2lu Zm9fd3JpdGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCk7Ci0JCQlzdHJl YW1fY2xvc2VfZmlsZSgpOwotCi0JCQkvKiBXZSBtdXN0IGJlIGluIGEgdmFsaWQgdHJhbnNhY3Rp b24gc3RhdGUgKi8KLQkJCUFzc2VydChJc1RyYW5zYWN0aW9uU3RhdGUoKSk7Ci0KLQkJCS8qIENv bW1pdCB0aGUgcGVyLXN0cmVhbSB0cmFuc2FjdGlvbiAqLwotCQkJQ29tbWl0VHJhbnNhY3Rpb25D b21tYW5kKCk7Ci0KLQkJCS8qIFJlc2V0IHBlci1zdHJlYW0gY29udGV4dCAqLwotCQkJTWVtb3J5 Q29udGV4dFJlc2V0KExvZ2ljYWxTdHJlYW1pbmdDb250ZXh0KTsKLQotCQkJcGdzdGF0X3JlcG9y dF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKKwkJY2FzZSBUUkFOU19MRUFERVJfUEFSVElB TF9TRVJJQUxJWkU6CisJCQlzdHJlYW1fd3JpdGVfY2hhbmdlKExPR0lDQUxfUkVQX01TR19TVFJF QU1fU1RPUCwgcyk7CisJCQlzZXJpYWxpemVfc3RyZWFtX3N0b3Aoc3RyZWFtX3hpZCk7CisJCQlz dHJlYW1fYXBwbHlfd29ya2VyID0gTlVMTDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVFJBTlNfTEVB REVSX1NFTkRfVE9fUEFSQUxMRUw6CkBAIC0xNjkxLDYgKzE3NjcsNyBAQCBhcHBseV9oYW5kbGVf c3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKIAlMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhIGFi b3J0X2RhdGE7CiAJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOwogCVRyYW5zQXBwbHlB Y3Rpb24gYXBwbHlfYWN0aW9uOworCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFsX21zZyA9ICpzOwog CWJvb2wJCWFib3J0X3RvcGxldmVsX3RyYW5zYWN0aW9uOwogCiAJaWYgKGluX3N0cmVhbWVkX3Ry YW5zYWN0aW9uKQpAQCAtMTcyMSw2ICsxNzk4LDI2IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJv cnQoU3RyaW5nSW5mbyBzKQogCQkJc2VyaWFsaXplX3N0cmVhbV9hYm9ydCh4aWQsIHN1YnhpZCk7 CiAJCQlicmVhazsKIAorCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NFUklBTElaRToKKwkJ CUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJCQkgKiBQYXJhbGxlbCBhcHBseSB3b3JrZXIgbWln aHQgaGF2ZSBhcHBsaWVkIHNvbWUgY2hhbmdlcywgc28gd3JpdGUKKwkJCSAqIHRoZSBTVFJFQU1f QUJPUlQgbWVzc2FnZSBzbyB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY2FuCisJCQkg KiByb2xsYmFjayB0aGUgc3VidHJhbnNhY3Rpb24gaWYgbmVlZGVkLgorCQkJICovCisJCQlzdHJl YW1fd3JpdGVfbWVzc2FnZSh4aWQsIExPR0lDQUxfUkVQX01TR19TVFJFQU1fQUJPUlQsCisJCQkJ CQkJCSAmb3JpZ2luYWxfbXNnKTsKKworCQkJaWYgKGFib3J0X3RvcGxldmVsX3RyYW5zYWN0aW9u KQorCQkJeworCQkJCXBhX3VubG9ja19zdHJlYW0oeGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsK KwkJCQlwYV9zZXRfZmlsZXNldF9zdGF0ZSh3aW5mby0+c2hhcmVkLCBMRUFERVJfRklMRVNFVF9B Q0NFU1NJQkxFKTsKKwkJCQkodm9pZCkgcGFfZnJlZV93b3JrZXIod2luZm8sIHhpZCk7CisJCQl9 CisKKwkJCWJyZWFrOworCiAJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CiAJ CQlBc3NlcnQod2luZm8pOwogCkBAIC0xNzM4LDYgKzE4MzUsMTAgQEAgYXBwbHlfaGFuZGxlX3N0 cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpCiAKIAkJCWlmIChhYm9ydF90b3BsZXZlbF90cmFuc2Fj dGlvbikKIAkJCXsKKwkJCQlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzKQorCQkJCQlwYV9z ZXRfZmlsZXNldF9zdGF0ZSh3aW5mby0+c2hhcmVkLAorCQkJCQkJCQkJCSBMRUFERVJfRklMRVNF VF9BQ0NFU1NJQkxFKTsKKwogCQkJCSh2b2lkKSBwYV9mcmVlX3dvcmtlcih3aW5mbywgeGlkKTsK IAkJCX0KIApAQCAtMTc3NiwxNyArMTg3NywxOCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0 KFN0cmluZ0luZm8gcykKIC8qCiAgKiBDb21tb24gc3Bvb2xmaWxlIHByb2Nlc3NpbmcuCiAgKi8K LXN0YXRpYyB2b2lkCi1hcHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQgeGlkLCBY TG9nUmVjUHRyIGxzbikKK3ZvaWQKK2FwcGx5X3Nwb29sZWRfbWVzc2FnZXMoRmlsZVNldCAqc3Ry ZWFtX2ZpbGVzZXQsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkgICBYTG9nUmVjUHRyIGxzbikK IHsKIAlTdHJpbmdJbmZvRGF0YSBzMjsKIAlpbnQJCQluY2hhbmdlczsKIAljaGFyCQlwYXRoW01B WFBHUEFUSF07CiAJY2hhcgkgICAqYnVmZmVyID0gTlVMTDsKIAlNZW1vcnlDb250ZXh0IG9sZGN4 dDsKLQlCdWZGaWxlICAgICpmZDsKIAotCW1heWJlX3N0YXJ0X3NraXBwaW5nX2NoYW5nZXMobHNu KTsKKwlpZiAoIWFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCQltYXliZV9zdGFydF9za2lw cGluZ19jaGFuZ2VzKGxzbik7CiAKIAkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBvcGVuIHRyYW5z YWN0aW9uICovCiAJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOwpAQCAtMTgwMiw4ICsxOTA0LDgg QEAgYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBs c24pCiAJY2hhbmdlc19maWxlbmFtZShwYXRoLCBNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4 aWQpOwogCWVsb2coREVCVUcxLCAicmVwbGF5aW5nIGNoYW5nZXMgZnJvbSBmaWxlIFwiJXNcIiIs IHBhdGgpOwogCi0JZmQgPSBCdWZGaWxlT3BlbkZpbGVTZXQoTXlMb2dpY2FsUmVwV29ya2VyLT5z dHJlYW1fZmlsZXNldCwgcGF0aCwgT19SRE9OTFksCi0JCQkJCQkJZmFsc2UpOworCXN0cmVhbV9m ZCA9IEJ1ZkZpbGVPcGVuRmlsZVNldChzdHJlYW1fZmlsZXNldCwgcGF0aCwgT19SRE9OTFksIGZh bHNlKTsKKwlzdHJlYW1feGlkID0geGlkOwogCiAJYnVmZmVyID0gcGFsbG9jKEJMQ0tTWik7CiAJ aW5pdFN0cmluZ0luZm8oJnMyKTsKQEAgLTE4MzQsNyArMTkzNiw3IEBAIGFwcGx5X3Nwb29sZWRf bWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOwogCiAJCS8qIHJlYWQgbGVuZ3RoIG9mIHRoZSBvbi1kaXNrIHJlY29yZCAq LwotCQluYnl0ZXMgPSBCdWZGaWxlUmVhZChmZCwgJmxlbiwgc2l6ZW9mKGxlbikpOworCQluYnl0 ZXMgPSBCdWZGaWxlUmVhZChzdHJlYW1fZmQsICZsZW4sIHNpemVvZihsZW4pKTsKIAogCQkvKiBo YXZlIHdlIHJlYWNoZWQgZW5kIG9mIHRoZSBmaWxlPyAqLwogCQlpZiAobmJ5dGVzID09IDApCkBA IC0xODU1LDcgKzE5NTcsNyBAQCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQg eGlkLCBYTG9nUmVjUHRyIGxzbikKIAkJYnVmZmVyID0gcmVwYWxsb2MoYnVmZmVyLCBsZW4pOwog CiAJCS8qIGFuZCBmaW5hbGx5IHJlYWQgdGhlIGRhdGEgaW50byB0aGUgYnVmZmVyICovCi0JCWlm IChCdWZGaWxlUmVhZChmZCwgYnVmZmVyLCBsZW4pICE9IGxlbikKKwkJaWYgKEJ1ZkZpbGVSZWFk KHN0cmVhbV9mZCwgYnVmZmVyLCBsZW4pICE9IGxlbikKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJ CShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVh ZCBmcm9tIHN0cmVhbWluZyB0cmFuc2FjdGlvbidzIGNoYW5nZXMgZmlsZSBcIiVzXCI6ICVtIiwK QEAgLTE4NzQsNiArMTk3NiwxNiBAQCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9u SWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0 KTsKIAorCQkvKgorCQkgKiBCcmVhayB0aGUgbG9vcCBpZiB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VyIGhhcyBmaW5pc2hlZCBhcHBseWluZworCQkgKiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwYXJh bGxlbCBhcHBseSB3b3JrZXIgc2hvdWxkIGhhdmUgY2xvc2VkIHRoZQorCQkgKiBmaWxlIGJlZm9y ZSBjb21taXR0aW5nLgorCQkgKi8KKwkJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpICYm CisJCQkoTXlQYXJhbGxlbFNoYXJlZC0+eGFjdF9zdGF0ZSA9PSBQQVJBTExFTF9UUkFOU19GSU5J U0hFRCB8fAorCQkJIE15UGFyYWxsZWxTaGFyZWQtPnhhY3Rfc3RhdGUgPT0gUEFSQUxMRUxfVFJB TlNfVU5LTk9XTikpCisJCQlnb3RvIGRvbmU7CisKIAkJbmNoYW5nZXMrKzsKIAogCQlpZiAobmNo YW5nZXMgJSAxMDAwID09IDApCkBAIC0xODgxLDExICsxOTkzLDE0IEBAIGFwcGx5X3Nwb29sZWRf bWVzc2FnZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCQkJCSBuY2hhbmdl cywgcGF0aCk7CiAJfQogCi0JQnVmRmlsZUNsb3NlKGZkKTsKLQorCUJ1ZkZpbGVDbG9zZShzdHJl YW1fZmQpOwogCXBmcmVlKGJ1ZmZlcik7CiAJcGZyZWUoczIuZGF0YSk7CiAKK2RvbmU6CisJc3Ry ZWFtX2ZkID0gTlVMTDsKKwlzdHJlYW1feGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisKIAll bG9nKERFQlVHMSwgInJlcGxheWVkICVkIChhbGwpIGNoYW5nZXMgZnJvbSBmaWxlIFwiJXNcIiIs CiAJCSBuY2hhbmdlcywgcGF0aCk7CiAKQEAgLTE5MDIsNiArMjAxNyw3IEBAIGFwcGx5X2hhbmRs ZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gcykKIAlMb2dpY2FsUmVwQ29tbWl0RGF0YSBjb21t aXRfZGF0YTsKIAlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm87CiAJVHJhbnNBcHBseUFj dGlvbiBhcHBseV9hY3Rpb247CisJU3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7CiAK IAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0xOTIx LDcgKzIwMzcsOCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiAJ CQkgKiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gc2VyaWFsaXplZCB0byBmaWxlLCBzbyByZXBs YXkgYWxsIHRoZQogCQkJICogc3Bvb2xlZCBvcGVyYXRpb25zLgogCQkJICovCi0JCQlhcHBseV9z cG9vbGVkX21lc3NhZ2VzKHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CisJCQlhcHBseV9z cG9vbGVkX21lc3NhZ2VzKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQsIHhpZCwK KwkJCQkJCQkJICAgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CiAKIAkJCWFwcGx5X2hhbmRsZV9j b21taXRfaW50ZXJuYWwoJmNvbW1pdF9kYXRhKTsKIApAQCAtMTkzMCw2ICsyMDQ3LDcgQEAgYXBw bHlfaGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQogCQkJYnJlYWs7CiAKIAkJY2Fz ZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJY2FzZSBUUkFOU19MRUFERVJfUEFS VElBTF9TRVJJQUxJWkU6CiAJCQlBc3NlcnQod2luZm8pOwogCiAJCQkvKgpAQCAtMTkzOSwxMyAr MjA1NywyMSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiAJCQlw YV91bmxvY2tfc3RyZWFtKHhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CiAKIAkJCS8qIFNlbmQg U1RSRUFNIENPTU1JVCBtZXNzYWdlIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuICovCi0J CQlwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSk7CisJCQlpZiAoYXBwbHlfYWN0 aW9uID09IFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMKQorCQkJCXBhX3NlbmRfZGF0YSh3 aW5mbywgcy0+bGVuLCBzLT5kYXRhKTsKKwkJCWVsc2UKKwkJCQlzdHJlYW1fd3JpdGVfbWVzc2Fn ZSh4aWQsIExPR0lDQUxfUkVQX01TR19TVFJFQU1fQ09NTUlULAorCQkJCQkJCQkJICZvcmlnaW5h bF9tc2cpOworCisJCQlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzKQorCQkJCXBhX3NldF9m aWxlc2V0X3N0YXRlKHdpbmZvLT5zaGFyZWQsCisJCQkJCQkJCQkgTEVBREVSX0ZJTEVTRVRfQUND RVNTSUJMRSk7CiAKIAkJCS8qCi0JCQkgKiBBZnRlciBzZW5kaW5nIHRoZSBkYXRhIHRvIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIsIHdhaXQgZm9yCi0JCQkgKiB0aGF0IHdvcmtlciB0byBmaW5p c2guIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIGNvbW1pdAotCQkJICogb3JkZXIgd2hp Y2ggYXZvaWRzIGZhaWx1cmVzIGR1ZSB0byB0cmFuc2FjdGlvbiBkZXBlbmRlbmNpZXMgYW5kCi0J CQkgKiBkZWFkbG9ja3MuCisJCQkgKiBBZnRlciBzZW5kaW5nIHRoZSBkYXRhIHRvIHRoZSBwYXJh bGxlbCBhcHBseSB3b3JrZXIgb3IKKwkJCSAqIHNlcmlhbGl6aW5nIGRhdGEgdG8gZmlsZSwgd2Fp dCBmb3IgdGhhdCB3b3JrZXIgdG8gZmluaXNoLiBUaGlzCisJCQkgKiBpcyBuZWNlc3NhcnkgdG8g bWFpbnRhaW4gY29tbWl0IG9yZGVyIHdoaWNoIGF2b2lkcyBmYWlsdXJlcyBkdWUKKwkJCSAqIHRv IHRyYW5zYWN0aW9uIGRlcGVuZGVuY2llcyBhbmQgZGVhZGxvY2tzLgogCQkJICovCiAJCQlwYV93 YWl0X2Zvcl94YWN0X2ZpbmlzaCh3aW5mby0+c2hhcmVkKTsKIApAQCAtMTk2NCw2ICsyMDkwLDE0 IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gcykKIAkJCWJyZWFrOwog CiAJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisKKwkJCS8qCisJCQkgKiBDbG9zZSB0aGUg ZmlsZSBiZWZvcmUgY29tbWl0dGluZyBpZiB0aGUgcGFyYWxsZWwgYXBwbHkgaXMKKwkJCSAqIGFw cGx5aW5nIHNwb29sZWQgY2hhbmdlcy4KKwkJCSAqLworCQkJaWYgKHN0cmVhbV9mZCkKKwkJCQlC dWZGaWxlQ2xvc2Uoc3RyZWFtX2ZkKTsKKwogCQkJYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5h bCgmY29tbWl0X2RhdGEpOwogCiAJCQlsaXN0X2ZyZWUoc3VieGFjdGxpc3QpOwpAQCAtMzg1Myw3 ICszOTg3LDcgQEAgc3VieGFjdF9maWxlbmFtZShjaGFyICpwYXRoLCBPaWQgc3ViaWQsIFRyYW5z YWN0aW9uSWQgeGlkKQogfQogCiAvKiBmb3JtYXQgZmlsZW5hbWUgZm9yIGZpbGUgY29udGFpbmlu ZyBzZXJpYWxpemVkIGNoYW5nZXMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAordm9pZAogY2hhbmdl c19maWxlbmFtZShjaGFyICpwYXRoLCBPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKQogewog CXNucHJpbnRmKHBhdGgsIE1BWFBHUEFUSCwgIiV1LSV1LmNoYW5nZXMiLCBzdWJpZCwgeGlkKTsK QEAgLTM4NjcsNyArNDAwMSw3IEBAIGNoYW5nZXNfZmlsZW5hbWUoY2hhciAqcGF0aCwgT2lkIHN1 YmlkLCBUcmFuc2FjdGlvbklkIHhpZCkKICAqIHRvcGxldmVsIHRyYW5zYWN0aW9uLiBFYWNoIHN1 YnNjcmlwdGlvbiBoYXMgYSBzZXBhcmF0ZSBzZXQgb2YgZmlsZXMKICAqIGZvciBhbnkgdG9wbGV2 ZWwgdHJhbnNhY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBzdHJlYW1fY2xlYW51cF9m aWxlcyhPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKQogewogCWNoYXIJCXBhdGhbTUFYUEdQ QVRIXTsKQEAgLTM4OTAsOSArNDAyNCw2IEBAIHN0cmVhbV9jbGVhbnVwX2ZpbGVzKE9pZCBzdWJp ZCwgVHJhbnNhY3Rpb25JZCB4aWQpCiAgKiBieSBzdHJlYW1feGlkIChnbG9iYWwgdmFyaWFibGUp LiBJZiBpdCdzIHRoZSBmaXJzdCBjaHVuayBvZiBzdHJlYW1lZAogICogY2hhbmdlcyBmb3IgdGhp cyB0cmFuc2FjdGlvbiwgY3JlYXRlIHRoZSBidWZmaWxlLCBvdGhlcndpc2Ugb3BlbiB0aGUKICAq IHByZXZpb3VzbHkgY3JlYXRlZCBmaWxlLgotICoKLSAqIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVk IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSAic3RyZWFtaW5nIiBibG9jaywgaS5lLgotICogYmV0d2Vl biBzdHJlYW1fc3RhcnQvc3RyZWFtX3N0b3AgbWVzc2FnZXMgZnJvbSB0aGUgdXBzdHJlYW0uCiAg Ki8KIHN0YXRpYyB2b2lkCiBzdHJlYW1fb3Blbl9maWxlKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25J ZCB4aWQsIGJvb2wgZmlyc3Rfc2VnbWVudCkKQEAgLTM5MDAsNyArNDAzMSw2IEBAIHN0cmVhbV9v cGVuX2ZpbGUoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50 KQogCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAotCUFz c2VydChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbik7CiAJQXNzZXJ0KE9pZElzVmFsaWQoc3ViaWQp KTsKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7CiAJQXNzZXJ0KHN0cmVhbV9m ZCA9PSBOVUxMKTsKQEAgLTM5MzksMTUgKzQwNjksMTAgQEAgc3RyZWFtX29wZW5fZmlsZShPaWQg c3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGZpcnN0X3NlZ21lbnQpCiAvKgogICogc3Ry ZWFtX2Nsb3NlX2ZpbGUKICAqCSAgQ2xvc2UgdGhlIGN1cnJlbnRseSBvcGVuIGZpbGUgd2l0aCBz dHJlYW1lZCBjaGFuZ2VzLgotICoKLSAqIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIGF0IHRoZSBl bmQgb2YgYSBzdHJlYW1pbmcgYmxvY2ssIGkuZS4gYXQgc3RyZWFtX3N0b3AKLSAqIG1lc3NhZ2Ug ZnJvbSB0aGUgdXBzdHJlYW0uCiAgKi8KIHN0YXRpYyB2b2lkCiBzdHJlYW1fY2xvc2VfZmlsZSh2 b2lkKQogewotCUFzc2VydChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbik7Ci0JQXNzZXJ0KFRyYW5z YWN0aW9uSWRJc1ZhbGlkKHN0cmVhbV94aWQpKTsKIAlBc3NlcnQoc3RyZWFtX2ZkICE9IE5VTEwp OwogCiAJQnVmRmlsZUNsb3NlKHN0cmVhbV9mZCk7CkBAIC0zOTY0LDEzICs0MDg5LDExIEBAIHN0 cmVhbV9jbG9zZV9maWxlKHZvaWQpCiAgKiB0aGUgbGVuZ3RoKSwgYWN0aW9uIGNvZGUgKGlkZW50 aWZ5aW5nIHRoZSBtZXNzYWdlIHR5cGUpIGFuZCBtZXNzYWdlCiAgKiBjb250ZW50cyAod2l0aG91 dCB0aGUgc3VieGFjdCBUcmFuc2FjdGlvbklkIHZhbHVlKS4KICAqLwotc3RhdGljIHZvaWQKK3Zv aWQKIHN0cmVhbV93cml0ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcykKIHsKIAlp bnQJCQlsZW47CiAKLQlBc3NlcnQoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pOwotCUFzc2VydChU cmFuc2FjdGlvbklkSXNWYWxpZChzdHJlYW1feGlkKSk7CiAJQXNzZXJ0KHN0cmVhbV9mZCAhPSBO VUxMKTsKIAogCS8qIHRvdGFsIG9uLWRpc2sgc2l6ZSwgaW5jbHVkaW5nIHRoZSBhY3Rpb24gdHlw ZSBjaGFyYWN0ZXIgKi8KQEAgLTM5ODksNiArNDExMiwyMyBAQCBzdHJlYW1fd3JpdGVfY2hhbmdl KGNoYXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiB9CiAKIC8qCisgKiBzdHJlYW1fd3JpdGVfbWVz c2FnZQorICoJICBTZXJpYWxpemUgYSBtZXNzYWdlIHRvIGEgZmlsZSBmb3IgdGhlIGdpdmVuIHRy YW5zYWN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBzdHJlYW1fd3Jp dGVfY2hhbmdlIGV4Y2VwdCB0aGF0IGl0IHdpbGwgb3BlbiB0aGUKKyAqIHRhcmdldCBmaWxlIGJl Zm9yZSB3cml0aW5nIHRoZSBtZXNzYWdlIGFuZCBjbG9zZSBmaWxlIGF0IHRoZSBlbmQuCisgKi8K K3N0YXRpYyB2b2lkCitzdHJlYW1fd3JpdGVfbWVzc2FnZShUcmFuc2FjdGlvbklkIHhpZCwgY2hh ciBhY3Rpb24sIFN0cmluZ0luZm8gcykKK3sKKwlBc3NlcnQoIWluX3N0cmVhbWVkX3RyYW5zYWN0 aW9uKTsKKworCXNlcmlhbGl6ZV9zdHJlYW1fc3RhcnQoeGlkLCBmYWxzZSk7CisJc3RyZWFtX3dy aXRlX2NoYW5nZShhY3Rpb24sIHMpOworCXNlcmlhbGl6ZV9zdHJlYW1fc3RvcCh4aWQpOworfQor CisvKgogICogQ2xlYW51cCB0aGUgbWVtb3J5IGZvciBzdWJ4YWN0cyBhbmQgcmVzZXQgdGhlIHJl bGF0ZWQgdmFyaWFibGVzLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTQ2NjMsNyArNDgw Myw4IEBAIHJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbyh2b2lkKQogLyoKICAqIFJldHVy biB0aGUgYWN0aW9uIHRvIHRha2UgZm9yIHRoZSBnaXZlbiB0cmFuc2FjdGlvbi4gKndpbmZvIGlz IGFzc2lnbmVkIHRvCiAgKiB0aGUgZGVzdGluYXRpb24gcGFyYWxsZWwgd29ya2VyIGluZm8gKGlm IHRoZSBhY3Rpb24gaXMKLSAqIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMLCBvdGhlcndp c2UgKndpbmZvIGlzIGFzc2lnbmVkIE5VTEwuCisgKiBUUkFOU19MRUFERVJfU0VORF9UT19QQVJB TExFTCBvciBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkUpLCBvdGhlcndpc2UKKyAqICp3 aW5mbyBpcyBhc3NpZ25lZCBOVUxMLgogICovCiBzdGF0aWMgVHJhbnNBcHBseUFjdGlvbgogZ2V0 X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCwgUGFyYWxsZWxBcHBs eVdvcmtlckluZm8gKip3aW5mbykKQEAgLTQ2ODUsMTMgKzQ4MjYsMTcgQEAgZ2V0X3RyYW5zYWN0 aW9uX2FwcGx5X2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCwgUGFyYWxsZWxBcHBseVdvcmtlcklu Zm8gKip3aW5mbykKIAkgKi8KIAkqd2luZm8gPSBwYV9maW5kX3dvcmtlcih4aWQpOwogCi0JaWYg KCp3aW5mbykKKwlpZiAoKndpbmZvID09IE5VTEwpCiAJewotCQlyZXR1cm4gVFJBTlNfTEVBREVS X1NFTkRfVE9fUEFSQUxMRUw7CisJCXJldHVybiBUUkFOU19MRUFERVJfU0VSSUFMSVpFOworCX0K KwllbHNlIGlmICgoKndpbmZvKS0+c2VyaWFsaXplX2NoYW5nZXMpCisJeworCQlyZXR1cm4gVFJB TlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOwogCX0KIAllbHNlCiAJewotCQlyZXR1cm4gVFJB TlNfTEVBREVSX1NFUklBTElaRTsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFM TEVMOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2Vy X2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaApp bmRleCBjMWY4NjY2Li4xZWRiZjE0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJf aW50ZXJuYWwuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgImRhdGF0eXBlL3RpbWVzdGFt cC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2lj YWxyZWxhdGlvbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmZmlsZS5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvZmlsZXNldC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG9jay5oIgogI2luY2x1ZGUgInN0 b3JhZ2Uvc2htX21xLmgiCkBAIC0xMDcsNiArMTA4LDE0IEBAIHR5cGVkZWYgZW51bSBQYXJhbGxl bFRyYW5zU3RhdGUKIAlQQVJBTExFTF9UUkFOU19GSU5JU0hFRAogfSBQYXJhbGxlbFRyYW5zU3Rh dGU7CiAKKy8qIFN0YXRlIG9mIGZpbGVzZXQgaW4gbGVhZGVyIGFwcGx5IHdvcmtlci4gKi8KK3R5 cGVkZWYgZW51bSBMZWFkZXJGaWxlU2V0U3RhdGUKK3sKKwlMRUFERVJfRklMRVNFVF9VTktOT1dO LAorCUxFQURFUl9GSUxFU0VUX0JVU1ksCisJTEVBREVSX0ZJTEVTRVRfQUNDRVNTSUJMRQorfSBM ZWFkZXJGaWxlU2V0U3RhdGU7CisKIC8qCiAgKiBTdHJ1Y3QgZm9yIHNoYXJpbmcgaW5mb3JtYXRp b24gYmV0d2VlbiBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJhbGxlbAogICogYXBwbHkgd29y a2Vycy4KQEAgLTEzNyw2ICsxNDYsMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxBcHBseVdv cmtlclNoYXJlZAogCSAqIGFwcGx5IHdvcmtlciB3aWxsIGNoZWNrIGl0IGJlZm9yZSBzdGFydGlu ZyB0byB3YWl0LgogCSAqLwogCXBnX2F0b21pY191aW50MzIJcGVuZGluZ19tZXNzYWdlX2NvdW50 OworCisJLyoKKwkgKiBUaGUgbGVhZGVyIGFwcGx5IHdvcmtlciB3aWxsIHNlcmlhbGl6ZSBjaGFu Z2VzIHRvIHRoZSBmaWxlIGFmdGVyCisJICogZW50ZXJpbmcgUEFSVElBTF9TRVJJQUxJWkUgbW9k ZSBhbmQgc2hhcmUgdGhlIGZpbGVzZXQgd2l0aCB0aGUgcGFyYWxsZWwKKwkgKiBhcHBseSB3b3Jr ZXIgd2hlbiBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZC4gQW5kIHRo ZW4KKwkgKiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgYXBwbHkgYWxsIHRoZSBzcG9v bGVkIG1lc3NhZ2VzLgorCSAqCisJICogRG9uJ3QgdXNlIFNoYXJlZEZpbGVTZXQgaGVyZSBhcyB3 ZSBuZWVkIHRoZSBmaWxlc2V0IHRvIHN1cnZpdmUgYWZ0ZXIKKwkgKiByZWxlYXNpbmcgdGhlIHNo YXJlZCBtZW1vcnkgc28gdGhhdCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBjYW4gcmUtdXNlCisJ ICogdGhlIGZpbGVzZXQgZm9yIG5leHQgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgorCSAqLworCUxl YWRlckZpbGVTZXRTdGF0ZQkJZmlsZXNldF9zdGF0ZTsKKwlGaWxlU2V0CQlmaWxlc2V0OwogfSBQ YXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkOwogCiAvKgpAQCAtMTU2LDYgKzE3OCwxMyBAQCB0eXBl ZGVmIHN0cnVjdCBQYXJhbGxlbEFwcGx5V29ya2VySW5mbwogCWRzbV9zZWdtZW50ICpkc21fc2Vn OwogCiAJLyoKKwkgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBu ZWVkcyB0byBzZXJpYWxpemUgdGhlCisJICogcmVtYWluaW5nIGNoYW5nZXMgdG8gZGlzayBkdWUg dG8gdGltZW91dCB3aGVuIHNlbmRpbmcgZGF0YSB0byB0aGUKKwkgKiBwYXJhbGxlbCBhcHBseSB3 b3JrZXIuCisJICovCisJYm9vbAkJc2VyaWFsaXplX2NoYW5nZXM7CisKKwkvKgogCSAqIFRydWUg aWYgdGhlIHdvcmtlciBpcyBiZWluZyB1c2VkIHRvIHByb2Nlc3MgYSBwYXJhbGxlbCBhcHBseQog CSAqIHRyYW5zYWN0aW9uLiBGYWxzZSBpbmRpY2F0ZXMgdGhpcyB3b3JrZXIgaXMgYXZhaWxhYmxl IGZvciByZS11c2UuCiAJICovCkBAIC0xNzgsNiArMjA3LDggQEAgZXh0ZXJuIFBHRExMSU1QT1JU IFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKk15UGFyYWxsZWxTaGFyZWQ7CiAKIGV4dGVybiBQ R0RMTElNUE9SVCBMaXN0ICpzdWJ4YWN0bGlzdDsKIAorZXh0ZXJuIFBHRExMSU1QT1JUIEJ1ZkZp bGUgKnN0cmVhbV9mZDsKKwogLyogbGlicHFyZWNlaXZlciBjb25uZWN0aW9uICovCiBleHRlcm4g UEdETExJTVBPUlQgc3RydWN0IFdhbFJlY2VpdmVyQ29ubiAqTG9nUmVwV29ya2VyV2FsUmN2Q29u bjsKIApAQCAtMTg4LDYgKzIxOSw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBMb2dpY2FsUmVwV29y a2VyICpNeUxvZ2ljYWxSZXBXb3JrZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBpbl9yZW1v dGVfdHJhbnNhY3Rpb247CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBpbl9zdHJlYW1lZF90cmFu c2FjdGlvbjsKIGV4dGVybiBQR0RMTElNUE9SVCBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqc3Ry ZWFtX2FwcGx5X3dvcmtlcjsKK2V4dGVybiBQR0RMTElNUE9SVCBUcmFuc2FjdGlvbklkIHN0cmVh bV94aWQ7CiAKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCk7 CiBleHRlcm4gTG9naWNhbFJlcFdvcmtlciAqbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQgc3Vi aWQsIE9pZCByZWxpZCwKQEAgLTIxNSwxMiArMjQ3LDI0IEBAIGV4dGVybiB2b2lkIHByb2Nlc3Nf c3luY2luZ190YWJsZXMoWExvZ1JlY1B0ciBjdXJyZW50X2xzbik7CiBleHRlcm4gdm9pZCBpbnZh bGlkYXRlX3N5bmNpbmdfdGFibGVfc3RhdGVzKERhdHVtIGFyZywgaW50IGNhY2hlaWQsCiAJCQkJ CQkJCQkJCXVpbnQzMiBoYXNodmFsdWUpOwogCitleHRlcm4gdm9pZCBzZXJpYWxpemVfc3RyZWFt X3N0YXJ0KFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIGZpcnN0X3NlZ21lbnQpOworZXh0ZXJuIHZv aWQgc2VyaWFsaXplX3N0cmVhbV9zdG9wKFRyYW5zYWN0aW9uSWQgeGlkKTsKKworLyogQ29tbW9u IHN0cmVhbWluZyBmdW5jdGlvbiB0byBhcHBseSBhbGwgdGhlIHNwb29sZWQgbWVzc2FnZXMgKi8K K2V4dGVybiB2b2lkIGFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoRmlsZVNldCAqc3RyZWFtX2ZpbGVz ZXQsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkgICBYTG9nUmVjUHRyIGxzbik7CisKK2V4 dGVybiB2b2lkIGNoYW5nZXNfZmlsZW5hbWUoY2hhciAqcGF0aCwgT2lkIHN1YmlkLCBUcmFuc2Fj dGlvbklkIHhpZCk7CisKIGV4dGVybiB2b2lkIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcyk7 CiAKIGV4dGVybiB2b2lkIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCk7CiAKIGV4dGVy biB2b2lkIEluaXRpYWxpemVBcHBseVdvcmtlcih2b2lkKTsKIAorZXh0ZXJuIHZvaWQgc3RyZWFt X3dyaXRlX2NoYW5nZShjaGFyIGFjdGlvbiwgU3RyaW5nSW5mbyBzKTsKK2V4dGVybiB2b2lkIHN0 cmVhbV9jbGVhbnVwX2ZpbGVzKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQpOworCiAvKiBG dW5jdGlvbiBmb3IgYXBwbHkgZXJyb3IgY2FsbGJhY2sgKi8KIGV4dGVybiB2b2lkIGFwcGx5X2Vy cm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CiAKQEAgLTIzNyw2ICsyODEsOCBAQCBleHRlcm4gdm9p ZCBwYV9zZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTaXplIG5ieXRl cywKIAogZXh0ZXJuIHZvaWQgcGFfc3RhcnRfc3VidHJhbnMoVHJhbnNhY3Rpb25JZCBjdXJyZW50 X3hpZCwgVHJhbnNhY3Rpb25JZCB0b3BfeGlkKTsKIGV4dGVybiB2b2lkIHBhX3N0cmVhbV9hYm9y dChMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRhKTsKK2V4dGVybiB2b2lkIHBh X3NldF9maWxlc2V0X3N0YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQsCisJ CQkJCQkJCQkgICBMZWFkZXJGaWxlU2V0U3RhdGUgZmlsZXNldF9zdGF0ZSk7CiAKIGV4dGVybiB2 b2lkIHBhX2xvY2tfc3RyZWFtKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSk7 CiBleHRlcm4gdm9pZCBwYV9sb2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NL TU9ERSBsb2NrbW9kZSk7Ci0tIAoyLjcuMi53aW5kb3dzLjEKCg== --_004_OS0PR01MB5716A380FDDE576CCD84F5BE94049OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v47-0003-Test-streaming-parallel-option-in-tap-test.patch" Content-Description: v47-0003-Test-streaming-parallel-option-in-tap-test.patch Content-Disposition: attachment; filename="v47-0003-Test-streaming-parallel-option-in-tap-test.patch"; size=81986; creation-date="Tue, 15 Nov 2022 11:45:08 GMT"; modification-date="Tue, 15 Nov 2022 11:57:35 GMT" Content-Transfer-Encoding: base64 RnJvbSA0MGQxMDA5NThmOTdjNDRiZjZhY2RkZDBiYTAzMDc1Njc3MTU5OGZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAic2hpeS5mbnN0IiA8c2hpeS5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBGcmksIDEzIE1heSAyMDIyIDE0OjUwOjMwICswODAwClN1YmplY3Q6IFtQQVRDSCB2NDcg NC80XSBUZXN0IHN0cmVhbWluZyBwYXJhbGxlbCBvcHRpb24gaW4gdGFwIHRlc3QKCkNoYW5nZSBh bGwgVEFQIHRlc3RzIHVzaW5nIHRoZSBTVUJTQ1JJUFRJT04gInN0cmVhbWluZyIgcGFyYW1ldGVy LCBzbyB0aGV5Cm5vdyB0ZXN0IGJvdGggJ29uJyBhbmQgJ3BhcmFsbGVsJyB2YWx1ZXMuCi0tLQog c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwgICAxICsKIHNy Yy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwgICAgICAgICB8IDIzMiArKysrKy0t LQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0LnBsIHwgMTQzICsr Ky0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbCAgICAgfCAyMjEg KysrKy0tLQogLi4uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBsICAgICAgICAgICAgIHwg MjMzICsrKysrLS0tCiAuLi4vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsICAgICAg ICAgfCAxMzQgKysrKy0KIC4uLi9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5w bCAgICB8IDM5NCArKysrKysrKy0tLS0tCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3BoYXNl X3N0cmVhbS5wbCAgICAgfCA1NDAgKysrKysrKysrKystLS0tLS0tCiAuLi4vdC8wMzJfc3RyZWFt aW5nX3BhcmFsbGVsX2FwcGx5LnBsICAgICAgICAgfCAxNTIgKysrKysKIDkgZmlsZXMgY2hhbmdl ZCwgMTQwNSBpbnNlcnRpb25zKCspLCA2NDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX3N0cmVhbWluZ19wYXJhbGxlbF9hcHBseS5w bAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZCBiL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZAppbmRleCA4NWQxZGQ5Mjk1Li4wMjUyMThkYzlj IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQKKysrIGIvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCkBAIC0zNiw2ICszNiw3IEBAIHRlc3RzICs9 IHsKICAgICAgICd0LzAyOV9vbl9lcnJvci5wbCcsCiAgICAgICAndC8wMzBfb3JpZ2luLnBsJywK ICAgICAgICd0LzAzMV9jb2x1bW5fbGlzdC5wbCcsCisgICAgICAndC8wMzJfc3RyZWFtaW5nX3Bh cmFsbGVsX2FwcGx5LnBsJywKICAgICAgICd0LzEwMF9idWdzLnBsJywKICAgICBdLAogICB9LApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbCBiL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwKaW5kZXggY2JhYTMyN2U0NC4uNjVmNDNm MDg4MSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbAor KysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCkBAIC04LDYgKzgsMTQ5 IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgQ2hlY2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJl YW1lZCB0cmFuc2FjdGlvbiB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBi eSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCitzdWIgY2hlY2tfcGFyYWxsZWxfbG9nCit7CisJbXkg KCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCkgPSBAXzsKKwlteSAkcGFy YWxsZWxfbWVzc2FnZSA9CisJICAnZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24g ZmluaXNoIGNvbW1hbmQnOworCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNj cmliZXItPndhaXRfZm9yX2xvZyhxci8kcGFyYWxsZWxfbWVzc2FnZS8sICRvZmZzZXQpOworCX0K K30KKworIyBFbmNhcHN1bGF0ZSBhbGwgdGhlIGNvbW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSBy ZWxhdGVkIHRvICJzdHJlYW1pbmciCisjIHBhcmFtZXRlciBzbyB0aGUgc2FtZSBjb2RlIGNhbiBi ZSBydW4gYm90aCBmb3IgdGhlIHN0cmVhbWluZz1vbiBhbmQKKyMgc3RyZWFtaW5nPXBhcmFsbGVs IGNhc2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5v ZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkgPSBAXzsKKworCSMgSW50ZXJs ZWF2ZSBhIHBhaXIgb2YgdHJhbnNhY3Rpb25zLCBlYWNoIGV4Y2VlZGluZyB0aGUgNjRrQiBsaW1p dC4KKwlteSAkaW4gID0gJyc7CisJbXkgJG91dCA9ICcnOworCisJbXkgJG9mZnNldCA9IDA7CisK KwlteSAkdGltZXIgPSBJUEM6OlJ1bjo6dGltZW91dCgkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6 OnRpbWVvdXRfZGVmYXVsdCk7CisKKwlteSAkaCA9ICRub2RlX3B1Ymxpc2hlci0+YmFja2dyb3Vu ZF9wc3FsKCdwb3N0Z3JlcycsIFwkaW4sIFwkb3V0LCAkdGltZXIsCisJCW9uX2Vycm9yX3N0b3Ag PT4gMCk7CisKKwkjIElmICJzdHJlYW1pbmciIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgYXMgInBh cmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjaworCSMgdGhhdCBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3 YXMgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkjIFdlIGhhdmUgdG8g bG9vayBmb3IgdGhlIERFQlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQgdGhhdCwgc28gYnVtcCB1cCB0 aGUKKwkjIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1 YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVz c2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KKworCSMg Q2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9k ZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJJGluIC49IHF7CisJQkVHSU47CisJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LCA1MDAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2Qo YSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCX07 CisJJGgtPnB1bXBfbmI7CisKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3Rn cmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsIDk5OTkpIHMoaSk7CisJREVMRVRFIEZS T00gdGVzdF90YWIgV0hFUkUgYSA+IDUwMDA7CisJQ09NTUlUOworCX0pOworCisJJGluIC49IHF7 CisJQ09NTUlUOworCVxxCisJfTsKKwkkaC0+ZmluaXNoOyAgICAjIGVycm9ycyBtYWtlIHRoZSBu ZXh0IHRlc3QgZmFpbCwgc28gaWdub3JlIHRoZW0gaGVyZQorCisJJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9z dWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJbXkgJHJlc3VsdCA9CisJICAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgq KSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0 LCBxcSgzMzM0fDMzMzR8MzMzNCksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9j YWwgZGVmYXVsdHMnKTsKKworCSMgVGVzdCB0aGUgc3RyZWFtaW5nIGluIGJpbmFyeSBtb2RlCisJ JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJBTFRFUiBTVUJTQ1JJ UFRJT04gdGFwX3N1YiBTRVQgKGJpbmFyeSA9IG9uKSIpOworCisJIyBDaGVjayB0aGUgc3Vic2Ny aWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxv Z2ZpbGU7CisKKwkjIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhj ZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9z dGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgMTAwMDApIHMoaSk7CisJVVBEQVRF IHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJQ09NTUlUOworCX0pOworCisJJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVs X2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJJHJlc3Vs dCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVD VCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlp cygkcmVzdWx0LCBxcSg2NjY3fDY2Njd8NjY2NyksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNv bnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKKworCSMgQ2hhbmdlIHRoZSBsb2NhbCB2YWx1ZXMgb2Yg dGhlIGV4dHJhIGNvbHVtbnMgb24gdGhlIHN1YnNjcmliZXIsCisJIyB1cGRhdGUgcHVibGlzaGVy LCBhbmQgY2hlY2sgdGhhdCBzdWJzY3JpYmVyIHJldGFpbnMgdGhlIGV4cGVjdGVkCisJIyB2YWx1 ZXMuIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMgYmVo YXZlCisJIyBwcm9wZXJseSBhZnRlciBhIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KKwkkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlVQREFURSB0ZXN0X3RhYiBTRVQg YyA9ICdlcG9jaCc6OnRpbWVzdGFtcHR6ICsgOTg3NjU0MzIxICogaW50ZXJ2YWwgJzFzJyIKKwkp OworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9 IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGE6OnRleHQp Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJ Y2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxl bCk7CisKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGV4dHJhY3QoZXBvY2ggZnJvbSBjKSA9IDk4NzY1 NDMyMSksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiCisJKTsKKwlpcygkcmVzdWx0LCBx cSg2NjY3fDY2Njd8NjY2NyksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWxs eSBjaGFuZ2VkIGRhdGEnKTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIChhID4gMikiKTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWUpOworCisJIyBSZXNldCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQor CXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJ CQkibG9nX21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVs b2FkOworCX0KK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hl ciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9w dWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzcsNiAr MTgwLDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFU RSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFt ZSA9ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVz dCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBT VUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGlj YXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcg PSBvbikiCiApOwpAQCAtNDksODIgKzE5NiwyNSBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwogaXMoJHJl c3VsdCwgcXEoMnwyfDIpLCAnY2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2Ny aWJlcicpOwogCi0jIEludGVybGVhdmUgYSBwYWlyIG9mIHRyYW5zYWN0aW9ucywgZWFjaCBleGNl ZWRpbmcgdGhlIDY0a0IgbGltaXQuCi1teSAkaW4gID0gJyc7Ci1teSAkb3V0ID0gJyc7Ci0KLW15 ICR0aW1lciA9IElQQzo6UnVuOjp0aW1lb3V0KCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGlt ZW91dF9kZWZhdWx0KTsKLQotbXkgJGggPSAkbm9kZV9wdWJsaXNoZXItPmJhY2tncm91bmRfcHNx bCgncG9zdGdyZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAotCW9uX2Vycm9yX3N0b3AgPT4gMCk7 Ci0KLSRpbiAuPSBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci1VUERBVEUgdGVz dF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVz dF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotfTsKLSRoLT5wdW1wX25iOwotCi0kbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0 ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEs IDk5OTkpIHMoaSk7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gNTAwMDsKLUNPTU1J VDsKLX0pOwotCi0kaW4gLj0gcXsKLUNPTU1JVDsKLVxxCi19OwotJGgtPmZpbmlzaDsgICAgIyBl cnJvcnMgbWFrZSB0aGUgbmV4dCB0ZXN0IGZhaWwsIHNvIGlnbm9yZSB0aGVtIGhlcmUKLQotJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0g ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQo KiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0 LCBxcSgzMzM0fDMzMzR8MzMzNCksICdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwg ZGVmYXVsdHMnKTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2Ny aWJlciwgJGFwcG5hbWUsIDApOwogCi0jIFRlc3QgdGhlIHN0cmVhbWluZyBpbiBiaW5hcnkgbW9k ZQotJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkFMVEVSIFNVQlND UklQVElPTiB0YXBfc3ViIFNFVCAoYmluYXJ5ID0gb24pIik7Ci0KLSMgSW5zZXJ0LCB1cGRhdGUg YW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCi0kbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUw MDEsIDEwMDAwKSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1v ZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLUNP TU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs Ci0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90 YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2NjY3KSwgJ2NoZWNrIGV4dHJhIGNvbHVt bnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycpOworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0 X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0 ZSA9ICdzdHJlYW1pbmcnOyIKKyk7CiAKLSMgQ2hhbmdlIHRoZSBsb2NhbCB2YWx1ZXMgb2YgdGhl IGV4dHJhIGNvbHVtbnMgb24gdGhlIHN1YnNjcmliZXIsCi0jIHVwZGF0ZSBwdWJsaXNoZXIsIGFu ZCBjaGVjayB0aGF0IHN1YnNjcmliZXIgcmV0YWlucyB0aGUgZXhwZWN0ZWQKLSMgdmFsdWVzLiBU aGlzIGlzIHRvIGVuc3VyZSB0aGF0IG5vbi1zdHJlYW1pbmcgdHJhbnNhY3Rpb25zIGJlaGF2ZQot IyBwcm9wZXJseSBhZnRlciBhIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJVUERBVEUgdGVzdF90YWIgU0VUIGMgPSAnZXBv Y2gnOjp0aW1lc3RhbXB0eiArIDk4NzY1NDMyMSAqIGludGVydmFsICcxcyciCi0pOwotJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiVVBEQVRFIHRlc3RfdGFiIFNFVCBi ID0gbWQ1KGE6OnRleHQpIik7CisJIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVChzdHJl YW1pbmcgPSBwYXJhbGxlbCwgYmluYXJ5ID0gb2ZmKSIpOwogCi0kbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3Vu dGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVw bGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0g J3N0cmVhbWluZyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcg Zm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKIAotJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1Qg Y291bnQoKiksIGNvdW50KGV4dHJhY3QoZXBvY2ggZnJvbSBjKSA9IDk4NzY1NDMyMSksIGNvdW50 KGQgPSA5OTkpIEZST00gdGVzdF90YWIiCi0pOwotaXMoJHJlc3VsdCwgcXEoNjY2N3w2NjY3fDY2 NjcpLAotCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWxseSBjaGFuZ2VkIGRhdGEn KTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFw cG5hbWUsIDEpOwogCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5z dG9wOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4 YWN0LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0LnBsCmlu ZGV4IGJjMGE5Y2QwNTMuLjAyMGFkOTZkMWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAxNl9zdHJlYW1fc3VieGFjdC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMTZfc3RyZWFtX3N1YnhhY3QucGwKQEAgLTgsNiArOCw5NCBAQCB1c2UgUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpN b3JlOwogCisjIENoZWNrIHRoZSBsb2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2Fz IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29y a2VyLgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAk b2Zmc2V0LCAkaXNfcGFyYWxsZWwpID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2UgPQorCSAg J2ZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kJzsKKwor CWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2co cXIvJHBhcmFsbGVsX21lc3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMgRW5jYXBzdWxhdGUg YWxsIHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0byAic3RyZWFtaW5n IgorIyBwYXJhbWV0ZXIgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJvdGggZm9yIHRoZSBz dHJlYW1pbmc9b24gYW5kCisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0 cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBu YW1lLCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gMDsKKworCSMgSWYgInN0 cmVhbWluZyIgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBuZWVkIHRv IGNoZWNrCisJIyB0aGF0IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBhcHBsaWVkIHVzaW5nIGEg cGFyYWxsZWwgYXBwbHkgd29ya2VyLgorCSMgV2UgaGF2ZSB0byBsb29rIGZvciB0aGUgREVCVUcx IGxvZyBtZXNzYWdlcyBhYm91dCB0aGF0LCBzbyBidW1wIHVwIHRoZQorCSMgbG9nIHZlcmJvc2l0 eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2Nv bmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOwor CQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorCisJIyBDaGVjayB0aGUgc3Vic2NyaWJl ciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2Zp bGU7CisKKwkjIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVk IDY0a0IgbGltaXQuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3Jlcycs IHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNF VCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLCAxMDAwKSBz KGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7 CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCVNBVkVQT0lOVCBz MjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEwMDEsIDE1MDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0g bWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBt b2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHMzOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUwMSwgMjAwMCkgcyhpKTsK KwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlTQVZFUE9JTlQgczQ7CisJ SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRl X3NlcmllcygyMDAxLCAyNTAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShi KSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEs MykgPSAwOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwg JG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMTY2N3wx NjY3fDE2NjcpLAorCQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIgaW4gc3Ry ZWFtaW5nIG1vZGUgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKwkp OworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKSIpOwor CSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIFJlc2V0 IHRoZSBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJz Y3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3Nh Z2VzID0gd2FybmluZyIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorfQorCiAj IENyZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChh bGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsxMjUsMTAgQEAgJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRh cF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOwor CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWlu ZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBf c3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBu YW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC00 OSw0MSArMTQxLDI2IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8Miks ICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMgSW5z ZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgNjRrQiBsaW1pdC4K LSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlO U0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoICAgIDMsICA1MDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikg V0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykg PSAwOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsICAxMDAwKSBzKGkpOwotVVBEQVRFIHRl c3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9NIHRl c3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRl c3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwg IDE1MDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEs MikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBP SU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygxNTAxLCAgMjAwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQg YiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVS RSBtb2QoYSwzKSA9IDA7Ci1TQVZFUE9JTlQgczQ7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDEsIDI1MDApIHMoaSk7 Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVM RVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09NTUlUOwotfSk7Ci0KLSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQgPQot ICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50 KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3Vs dCwgcXEoMTY2N3wxNjY3fDE2NjcpLAotCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2Ny aWJlciBpbiBzdHJlYW1pbmcgbW9kZSBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRl ZmF1bHRzJwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVy LCAkYXBwbmFtZSwgMCk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlv biBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFt aW5nJzsiCiApOwogCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki QUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOwor Ciskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNU IHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlv bl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisgICkKKyAgb3Ig ZGllCisgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRl ciBjaGFuZ2luZyBTVUJTQ1JJUFRJT04iOworCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNo ZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsKKwogJG5vZGVfc3Vic2NyaWJlci0+ c3RvcDsKICRub2RlX3B1Ymxpc2hlci0+c3RvcDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDE3X3N0cmVhbV9kZGwucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MTdfc3RyZWFtX2RkbC5wbAppbmRleCA4NjZmMTUxMmU0Li5kMmNjNDZkMTgyIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbAorKysgYi9zcmMvdGVz dC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbApAQCAtOCw2ICs4LDEzOCBAQCB1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsK IHVzZSBUZXN0OjpNb3JlOwogCisjIENoZWNrIHRoZSBsb2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJh bnNhY3Rpb24gd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxs ZWwgYXBwbHkgd29ya2VyLgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9z dWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpID0gQF87CisJbXkgJHBhcmFsbGVsX21l c3NhZ2UgPQorCSAgJ2ZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBj b21tYW5kJzsKKworCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53 YWl0X2Zvcl9sb2cocXIvJHBhcmFsbGVsX21lc3NhZ2UvLCAkb2Zmc2V0KTsKKwl9Cit9CisKKyMg RW5jYXBzdWxhdGUgYWxsIHRoZSBjb21tb24gdGVzdCBzdGVwcyB3aGljaCBhcmUgcmVsYXRlZCB0 byAic3RyZWFtaW5nIgorIyBwYXJhbWV0ZXIgc28gdGhlIHNhbWUgY29kZSBjYW4gYmUgcnVuIGJv dGggZm9yIHRoZSBzdHJlYW1pbmc9b24gYW5kCisjIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4K K3N1YiB0ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNj cmliZXIsICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwlteSAkb2Zmc2V0ID0gMDsK KworCSMgYSBzbWFsbCAobm9uLXN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBhbmQgRE1M CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47 CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgzLCBtZDUoMzo6dGV4dCkpOworCUFMVEVS IFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gYyBJTlQ7CisJU0FWRVBPSU5UIHMxOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoNCwgbWQ1KDQ6OnRleHQpLCAtNCk7CisJQ09NTUlUOwor CX0pOworCisJIyBJZiAic3RyZWFtaW5nIiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIGFzICJwYXJh bGxlbCIsIHdlIG5lZWQgdG8gY2hlY2sKKwkjIHRoYXQgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2Fz IGFwcGxpZWQgdXNpbmcgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJIyBXZSBoYXZlIHRvIGxv b2sgZm9yIHRoZSBERUJVRzEgbG9nIG1lc3NhZ2VzIGFib3V0IHRoYXQsIHNvIGJ1bXAgdXAgdGhl CisJIyBsb2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJz Y3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3Nh Z2VzID0gZGVidWcxIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9CisKKwkjIENo ZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVf c3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3 aXRoIERETCBhbmQgRE1MCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3Jl cycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSwgLWkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNSwgMTAwMCkgcyhpKTsKKwlBTFRFUiBUQUJM RSB0ZXN0X3RhYiBBREQgQ09MVU1OIGQgSU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEwMDEsIDIwMDApIHMoaSk7CisJQ09NTUlUOworCX0pOworCisJIyBhIHNtYWxsIChu b24tc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKKwkkbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0 ZXN0X3RhYiBWQUxVRVMgKDIwMDEsIG1kNSgyMDAxOjp0ZXh0KSwgLTIwMDEsIDIqMjAwMSk7CisJ QUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBlIElOVDsKKwlTQVZFUE9JTlQgczE7CisJ SU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgyMDAyLCBtZDUoMjAwMjo6dGV4dCksIC0yMDAy LCAyKjIwMDIsIC0zKjIwMDIpOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVf c3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCW15ICRyZXN1bHQgPQorCSAg JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQo KiksIGNvdW50KGMpLCBjb3VudChkKSwgY291bnQoZSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRy ZXN1bHQsIHFxKDIwMDJ8MTk5OXwxMDAyfDEpLAorCQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRv IHN1YnNjcmliZXIgaW4gc3RyZWFtaW5nIG1vZGUgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBs b2NhbCBkZWZhdWx0cycKKwkpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBu b3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIEEg bGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBhbmQgRE1MLiBPbmUgb2YgdGhl IERETCBpcyBwZXJmb3JtZWQKKwkjIGFmdGVyIERNTCB0byBlbnN1cmUgdGhhdCB3ZSBpbnZhbGlk YXRlIHRoZSBzY2hlbWEgc2VudCBmb3IgdGVzdF90YWIgc28gdGhhdAorCSMgdGhlIG5leHQgdHJh bnNhY3Rpb24gaGFzIHRvIHNlbmQgdGhlIHNjaGVtYSBhZ2Fpbi4KKwkkbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0 X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppIEZST00gZ2VuZXJhdGVf c2VyaWVzKDIwMDMsNTAwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1O IGYgSU5UOworCUNPTU1JVDsKKwl9KTsKKworCSMgQSBzbWFsbCB0cmFuc2FjdGlvbiB0aGF0IHdv bid0IGdldCBzdHJlYW1lZC4gVGhpcyBpcyBqdXN0IHRvIGVuc3VyZSB0aGF0IHdlCisJIyBzZW5k IHRoZSBzY2hlbWEgYWdhaW4gdG8gcmVmbGVjdCB0aGUgbGFzdCBjb2x1bW4gYWRkZWQgaW4gdGhl IHByZXZpb3VzIHRlc3QuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3Jl cycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSwgLWksIDIqaSwgLTMqaSwgNCppIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsNTAwNSkg cyhpKTsKKwlDT01NSVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRv ZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChk KSwgY291bnQoZSksIGNvdW50KGYpIEZST00gdGVzdF90YWIiCisJKTsKKwlpcygkcmVzdWx0LCBx cSg1MDA1fDUwMDJ8NDAwNXwzMDA0fDUpLAorCQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1 YnNjcmliZXIgZm9yIGJvdGggc3RyZWFtaW5nIGFuZCBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9u cycKKwkpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAo YSA+IDIpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFiIERST1AgQ09MVU1OIGMsIERST1AgQ09MVU1O IGQsIERST1AgQ09MVU1OIGUsIERST1AgQ09MVU1OIGY7CisJfSk7CisJJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgUmVzZXQgdGhlIGxvZyB2ZXJib3Np dHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9j b25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5nIik7 CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hl ciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcg PT4gJ2xvZ2ljYWwnKTsKQEAgLTM3LDYgKzE2OSwxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUg dGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAogCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWIgQ09OTkVDVElPTiAn JHB1Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnIFBVQkxJQ0FUSU9O IHRhcF9wdWIgV0lUSCAoc3RyZWFtaW5nID0gb24pIgogKTsKQEAgLTQ5LDc3ICsxODUsMjYgQEAg bXkgJHJlc3VsdCA9CiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkp IEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MHwwKSwgJ2NoZWNrIGluaXRpYWwg ZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAotIyBhIHNtYWxsIChub24tc3RyZWFt ZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVF UyAoMywgbWQ1KDM6OnRleHQpKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gYyBJ TlQ7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDQsIG1kNSg0 Ojp0ZXh0KSwgLTQpOwotQ09NTUlUOwotfSk7Ci0KLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2Fj dGlvbiB3aXRoIERETCBhbmQgRE1MCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9z dGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpLCAtaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1LCAxMDAwKSBzKGkpOwotQUxURVIgVEFC TEUgdGVzdF90YWIgQUREIENPTFVNTiBkIElOVDsKLVNBVkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMTAwMSwgMjAwMCkgcyhpKTsKLUNPTU1JVDsKLX0pOwotCi0jIGEgc21hbGwgKG5vbi1z dHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAotJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIg VkFMVUVTICgyMDAxLCBtZDUoMjAwMTo6dGV4dCksIC0yMDAxLCAyKjIwMDEpOwotQUxURVIgVEFC TEUgdGVzdF90YWIgQUREIENPTFVNTiBlIElOVDsKLVNBVkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRP IHRlc3RfdGFiIFZBTFVFUyAoMjAwMiwgbWQ1KDIwMDI6OnRleHQpLCAtMjAwMiwgMioyMDAyLCAt MyoyMDAyKTsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQpLCBjb3Vu dChlKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgyMDAyfDE5OTl8MTAwMnwxKSwK LQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIgaW4gc3RyZWFtaW5nIG1vZGUg YW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKLSk7Cit0ZXN0X3N0cmVh bWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKIAot IyBBIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTC4gT25lIG9m IHRoZSBEREwgaXMgcGVyZm9ybWVkCi0jIGFmdGVyIERNTCB0byBlbnN1cmUgdGhhdCB3ZSBpbnZh bGlkYXRlIHRoZSBzY2hlbWEgc2VudCBmb3IgdGVzdF90YWIgc28gdGhhdAotIyB0aGUgbmV4dCB0 cmFuc2FjdGlvbiBoYXMgdG8gc2VuZCB0aGUgc2NoZW1hIGFnYWluLgotJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSwgLTMqaSBGUk9NIGdlbmVyYXRlX3Nl cmllcygyMDAzLDUwMDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGYg SU5UOwotQ09NTUlUOwotfSk7Ci0KLSMgQSBzbWFsbCB0cmFuc2FjdGlvbiB0aGF0IHdvbid0IGdl dCBzdHJlYW1lZC4gVGhpcyBpcyBqdXN0IHRvIGVuc3VyZSB0aGF0IHdlCi0jIHNlbmQgdGhlIHNj aGVtYSBhZ2FpbiB0byByZWZsZWN0IHRoZSBsYXN0IGNvbHVtbiBhZGRlZCBpbiB0aGUgcHJldmlv dXMgdGVzdC4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1C RUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAy KmksIC0zKmksIDQqaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLDUwMDUpIHMoaSk7Ci1DT01N SVQ7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsK LQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAot CSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkKSwgY291bnQoZSksIGNvdW50KGYp IEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDUwMDV8NTAwMnw0MDA1fDMwMDR8NSks Ci0JJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGZvciBib3RoIHN0cmVhbWlu ZyBhbmQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcK KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkb2xkcGlkID0gJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBn X3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5E IHN0YXRlID0gJ3N0cmVhbWluZyc7IgogKTsKIAorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcg PSBwYXJhbGxlbCkiKTsKKworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24g V0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWlu Zyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5 IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKKwordGVzdF9zdHJlYW1p bmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMSk7CisKICRu b2RlX3N1YnNjcmliZXItPnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CiAKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbAppbmRl eCA1NTFmMTZkZjZkLi43NTJlNzlhMDI5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMThfc3RyZWFtX3N1YnhhY3RfYWJvcnQucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBsCkBAIC04LDYgKzgsMTQ1IEBAIHVzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwog dXNlIFRlc3Q6Ok1vcmU7CiAKKyMgQ2hlY2sgdGhlIGxvZyB0aGF0IHRoZSBzdHJlYW1lZCB0cmFu c2FjdGlvbiB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQorIyByZXBvcnRlZCBieSBwYXJhbGxl bCBhcHBseSB3b3JrZXIuCitzdWIgY2hlY2tfcGFyYWxsZWxfbG9nCit7CisJbXkgKCRub2RlX3N1 YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCkgPSBAXzsKKwlteSAkcGFyYWxsZWxfbWVz c2FnZSA9CisJICAnZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNv bW1hbmQnOworCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndh aXRfZm9yX2xvZyhxci8kcGFyYWxsZWxfbWVzc2FnZS8sICRvZmZzZXQpOworCX0KK30KKworIyBF bmNhcHN1bGF0ZSBhbGwgdGhlIGNvbW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRv ICJzdHJlYW1pbmciCisjIHBhcmFtZXRlciBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90 aCBmb3IgdGhlIHN0cmVhbWluZz1vbiBhbmQKKyMgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgor c3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2Ny aWJlciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAwOwor CisJIyBJZiAic3RyZWFtaW5nIiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIGFzICJwYXJhbGxlbCIs IHdlIG5lZWQgdG8gY2hlY2sKKwkjIHRoYXQgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGFwcGxp ZWQgdXNpbmcgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJIyBXZSBoYXZlIHRvIGxvb2sgZm9y IHRoZSBERUJVRzEgbG9nIG1lc3NhZ2VzIGFib3V0IHRoYXQsIHNvIGJ1bXAgdXAgdGhlCisJIyBs b2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVy LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0g ZGVidWcxIik7CisJCSRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKwl9CisKKwkjIENoZWNrIHRo ZSBzdWJzY3JpYmVyIGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2Ny aWJlci0+bG9nZmlsZTsKKworCSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERE TCwgRE1MIGFuZCBST0xMQkFDS3MKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bv c3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsNTAwKSBzKGkpOworCVNBVkVQT0lOVCBz MTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDUwMSwxMDAwKSBzKGkpOworCVNBVkVQT0lOVCBzMjsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEw MDEsMTUwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczM7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLDIwMDApIHMoaSk7 CisJUk9MTEJBQ0sgVE8gczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygyMDAxLDI1MDApIHMoaSk7CisJUk9MTEJBQ0sg VE8gczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygyNTAxLDMwMDApIHMoaSk7CisJU0FWRVBPSU5UIHM0OworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMzAwMSwzNTAwKSBzKGkpOworCVNBVkVQT0lOVCBzNTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDM1MDEsNDAwMCkg cyhpKTsKKwlDT01NSVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRv ZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBG Uk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMjAwMHwwKSwKKwkJJ2NoZWNrIHJvbGxi YWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXIgYW5kIGV4dHJhIGNv bHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycKKwkpOworCisJIyBDaGVjayB0aGUgc3Vic2Ny aWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxv Z2ZpbGU7CisKKwkjIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBzdWJzY3JpYmVy IHJlY2VpdmluZyBvdXQgb2Ygb3JkZXIKKwkjIHN1YnRyYW5zYWN0aW9uIFJPTExCQUNLcworCSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlO U0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoNDAwMSw0NTAwKSBzKGkpOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0 X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMDEsNTUw MCkgcyhpKTsKKwlTQVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg2MDAxLDY1MDApIHMoaSk7CisJU0FW RVBPSU5UIHMzOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoNzAwMSw3NTAwKSBzKGkpOworCVJFTEVBU0UgczI7CisJSU5T RVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcyg4MDAxLDg1MDApIHMoaSk7CisJUk9MTEJBQ0sgVE8gczE7CisJQ09NTUlUOworCX0pOwor CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNr X3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOwor CisJJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1 bHQsIHFxKDI1MDB8MCksCisJCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxl Y3RlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBmcm9t IG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKworCSMg bGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIHN1YnNjcmliZXIgcmVjZWl2aW5nIHJv bGxiYWNrCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJ QkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3Nlcmllcyg4NTAxLDkwMDApIHMoaSk7CisJU0FWRVBPSU5UIHMxOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoOTAwMSw5NTAwKSBzKGkpOworCVNBVkVQT0lOVCBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDk1MDEsMTAwMDAp IHMoaSk7CisJUk9MTEJBQ0s7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIs ICRvZmZzZXQsICRpc19wYXJhbGxlbCk7CisKKwkkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBG Uk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMjUwMHwwKSwgJ2NoZWNrIHJvbGxiYWNr IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBDbGVhbnVwIHRoZSB0ZXN0IGRh dGEKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZS T00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKSIpOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIFJlc2V0IHRoZSBsb2cgdmVyYm9zaXR5LgorCWlmICgk aXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdy ZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0gd2FybmluZyIpOworCQkkbm9kZV9z dWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorfQorCiAjIENyZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkg JG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNo ZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2Fs Jyk7CkBAIC0zNiw2ICsxNzUsMTAgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7 CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJf Y29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJ VEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC00OCw4MSArMTkxLDI1IEBAIG15ICRyZXN1bHQg PQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1 bHQsIHFxKDJ8MCksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVy Jyk7CiAKLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCwgRE1MIGFuZCBS T0xMQkFDS3MKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1C RUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMyw1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0 ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwx MDAwKSBzKGkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLDE1MDApIHMoaSk7Ci1TQVZF UE9JTlQgczM7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDE1MDEsMjAwMCkgcyhpKTsKLVJPTExCQUNLIFRPIHMyOwotSU5T RVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcygyMDAxLDI1MDApIHMoaSk7Ci1ST0xMQkFDSyBUTyBzMTsKLUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjUwMSwzMDAw KSBzKGkpOwotU0FWRVBPSU5UIHM0OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzMDAxLDM1MDApIHMoaSk7Ci1TQVZFUE9J TlQgczU7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDM1MDEsNDAwMCkgcyhpKTsKLUNPTU1JVDsKLX0pOwotCi0kbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0kcmVzdWx0ID0KLSAgJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwg Y291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMjAwMHwwKSwKLQknY2hl Y2sgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlciBhbmQg ZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwordGVzdF9zdHJlYW1pbmcoJG5v ZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7CisKKyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1v ZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215 ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxF Q1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0g JyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCiApOwogCi0jIGxhcmdlIChzdHJl YW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBzdWJzY3JpYmVyIHJlY2VpdmluZyBvdXQgb2Ygb3JkZXIK LSMgc3VidHJhbnNhY3Rpb24gUk9MTEJBQ0tzCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgK LQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDQwMDEsNDUwMCkgcyhpKTsKLVNBVkVQ T0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSw1NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cyg2MDAxLDY1MDApIHMoaSk7Ci1TQVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDcwMDEsNzUwMCkgcyhp KTsKLVJFTEVBU0UgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDgwMDEsODUwMCkgcyhpKTsKLVJPTExCQUNLIFRPIHMx OwotQ09NTUlUOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygk cmVzdWx0LCBxcSgyNTAwfDApLAotCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJl ZmxlY3RlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlv biB3aXRoIHN1YnNjcmliZXIgcmVjZWl2aW5nIHJvbGxiYWNrCi0kbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDg1MDEsOTAwMCkgcyhp KTsKLVNBVkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoOTAwMSw5NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMy OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVy YXRlX3Nlcmllcyg5NTAxLDEwMDAwKSBzKGkpOwotUk9MTEJBQ0s7Ci19KTsKLQotJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNv dW50KGMpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDI1MDB8MCksICdjaGVjayBy b2xsYmFjayB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQo c3RyZWFtaW5nID0gcGFyYWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91 bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3Jl cGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9 ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5n IGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisKK3Rl c3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUs IDEpOwogCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2Rk bF9hYm9ydC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOV9zdHJlYW1fc3VieGFjdF9k ZGxfYWJvcnQucGwKaW5kZXggNGQ3ZGE4MmI3YS4uOWQ2NzhiMzk5OCAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbAorKysg Yi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBs CkBAIC05LDYgKzksOTEgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBDaGVjayB0aGUgbG9n IHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5 CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KK3N1YiBjaGVja19wYXJhbGxl bF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKSA9 IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdlID0KKwkgICdmaW5pc2hlZCBwcm9jZXNzaW5nIHRo ZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCc7CisKKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsK KwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNzYWdlLywg JG9mZnNldCk7CisJfQorfQorCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRlc3Qgc3Rl cHMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0cmVhbWluZyIKKyMgcGFyYW1ldGVyIHNvIHRoZSBz YW1lIGNvZGUgY2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZAorIyBzdHJl YW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAoJG5vZGVf cHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVsKSA9IEBf OworCisJbXkgJG9mZnNldCA9IDA7CisKKwkjIElmICJzdHJlYW1pbmciIHBhcmFtZXRlciBpcyBz cGVjaWZpZWQgYXMgInBhcmFsbGVsIiwgd2UgbmVlZCB0byBjaGVjaworCSMgdGhhdCBzdHJlYW1l ZCB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4K KwkjIFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERFQlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQgdGhh dCwgc28gYnVtcCB1cCB0aGUKKwkjIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkK Kwl7CisJCSRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAor CQkJImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVs b2FkOworCX0KKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRv ZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBsYXJnZSAoc3RyZWFt ZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcworCSRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMyw1 MDApIHMoaSk7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBjIElOVDsKKwlTQVZF UE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwg LWkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7CisJQUxURVIgVEFCTEUgdGVz dF90YWIgQUREIENPTFVNTiBkIElOVDsKKwlTQVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxMDAxLDE1MDApIHMoaSk7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgQUREIENPTFVNTiBlIElO VDsKKwlTQVZFUE9JTlQgczM7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSwgLWksIDIqaSwgLTMqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLDIwMDApIHMo aSk7CisJQUxURVIgVEFCTEUgdGVzdF90YWIgRFJPUCBDT0xVTU4gYzsKKwlST0xMQkFDSyBUTyBz MTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCBpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDUwMSwxMDAwKSBzKGkpOworCUNPTU1JVDsKKwl9KTsKKworCSRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxl bF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCW15ICRy ZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBx cSgxMDAwfDUwMCksCisJCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3Rl ZCBvbiBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMn CisJKTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEg PiAyKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBEUk9QIENPTFVNTiBjOworCX0pOworCSRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIFJlc2V0IHRoZSBs b2cgdmVyYm9zaXR5LgorCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVy LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJCSJsb2dfbWluX21lc3NhZ2VzID0g d2FybmluZyIpOworCQkkbm9kZV9zdWJzY3JpYmVyLT5yZWxvYWQ7CisJfQorfQorCiAjIENyZWF0 ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nf c3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsxMjIsMTAgQEAgJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIg Rk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2Rl ICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENP Tk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJyBQ VUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC00OSwzNSAr MTM4LDI2IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00g dGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MCksICdjaGVjayBpbml0aWFsIGRhdGEgd2Fz IGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlv biB3aXRoIERETCwgRE1MIGFuZCBST0xMQkFDS3MKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBp LCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMyw1MDApIHMoaSk7Ci1BTFRFUiBU QUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGMgSU5UOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNTAxLDEwMDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGQgSU5U OwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSwgLWksIDIqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLDE1MDApIHMoaSk7Ci1BTFRF UiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGUgSU5UOwotU0FWRVBPSU5UIHMzOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSwgLTMqaSBGUk9N IGdlbmVyYXRlX3NlcmllcygxNTAxLDIwMDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBE Uk9QIENPTFVNTiBjOwotUk9MTEJBQ0sgVE8gczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwxMDAwKSBzKGkp OwotQ09NTUlUOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygk cmVzdWx0LCBxcSgxMDAwfDUwMCksCi0JJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMg cmVmbGVjdGVkIG9uIHN1YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBk ZWZhdWx0cycKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJl ciwgJGFwcG5hbWUsIDApOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRp b24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVh bWluZyc7IgogKTsKIAorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsK KworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVD VCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRp b25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9y IGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0 ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKKwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlz aGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMSk7CisKICRub2RlX3N1YnNjcmliZXIt PnN0b3A7CiAkbm9kZV9wdWJsaXNoZXItPnN0b3A7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAyMl90d29waGFzZV9jYXNjYWRlLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwKaW5kZXggN2E3OTdmMzdiYS4uNDI2NWQzYjNm NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2Nh ZGUucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUu cGwKQEAgLTExLDYgKzExLDIzOSBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisjIENoZWNrIHRo ZSBsb2cgdGhhdCB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2FzIGNvbXBsZXRlZCBzdWNjZXNz ZnVsbHkKKyMgcmVwb3J0ZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorc3ViIGNoZWNrX3Bh cmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkc3RyZWFtaW5n X21vZGUpID0gQF87CisJbXkgJHBhcmFsbGVsX21lc3NhZ2UgPQorCSAgJ2ZpbmlzaGVkIHByb2Nl c3NpbmcgdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kJzsKKworCWlmICgkc3RyZWFtaW5n X21vZGUgZXEgJ3BhcmFsbGVsJykKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xv Zyhxci8kcGFyYWxsZWxfbWVzc2FnZS8sICRvZmZzZXQpOworCX0KK30KKworIyBFbmNhcHN1bGF0 ZSBhbGwgdGhlIGNvbW1vbiB0ZXN0IHN0ZXBzIHdoaWNoIGFyZSByZWxhdGVkIHRvICJzdHJlYW1p bmciIHBhcmFtZXRlcgorIyBzbyB0aGUgc2FtZSBjb2RlIGNhbiBiZSBydW4gYm90aCBmb3IgdGhl IHN0cmVhbWluZz1vbiBhbmQgc3RyZWFtaW5nPXBhcmFsbGVsCisjIGNhc2VzLgorc3ViIHRlc3Rf c3RyZWFtaW5nCit7CisJbXkgKCRub2RlX0EsICRub2RlX0IsICRub2RlX0MsICRhcHBuYW1lX0Is ICRhcHBuYW1lX0MsICRzdHJlYW1pbmdfbW9kZSkgPQorCSAgQF87CisKKwlteSAkb2Zmc2V0X0Ig PSAwOworCW15ICRvZmZzZXRfQyA9IDA7CisKKwlteSAkb2xkcGlkX0IgPSAkbm9kZV9BLT5zYWZl X3BzcWwoCisJCSdwb3N0Z3JlcycsICIKKwkJU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGlj YXRpb24KKwkJV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9CJyBBTkQgc3RhdGUg PSAnc3RyZWFtaW5nJzsiKTsKKwlteSAkb2xkcGlkX0MgPSAkbm9kZV9CLT5zYWZlX3BzcWwoCisJ CSdwb3N0Z3JlcycsICIKKwkJU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KKwkJ V0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9DJyBBTkQgc3RhdGUgPSAnc3RyZWFt aW5nJzsiKTsKKworCSMgU2V0dXAgbG9naWNhbCByZXBsaWNhdGlvbiBzdHJlYW1pbmcgbW9kZQor CisJJG5vZGVfQi0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCAiCisJCUFMVEVSIFNVQlNDUklQ VElPTiB0YXBfc3ViX0IKKwkJU0VUIChzdHJlYW1pbmcgPSAkc3RyZWFtaW5nX21vZGUpOyIpOwor CSRub2RlX0MtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlBTFRFUiBTVUJTQ1JJUFRJ T04gdGFwX3N1Yl9DCisJCVNFVCAoc3RyZWFtaW5nID0gJHN0cmVhbWluZ19tb2RlKSIpOworCisJ IyBXYWl0IGZvciBzdWJzY3JpYmVycyB0byBmaW5pc2ggaW5pdGlhbGl6YXRpb24KKworCSRub2Rl X0EtPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsICIKKwkJU0VMRUNUIHBpZCAhPSAk b2xkcGlkX0IgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCisJCVdIRVJFIGFwcGxpY2F0aW9uX25h bWUgPSAnJGFwcG5hbWVfQicgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorCSkgb3IgZGllICJU aW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCI7CisJJG5vZGVfQi0+ cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3RncmVzJywgIgorCQlTRUxFQ1QgcGlkICE9ICRvbGRw aWRfQyBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KKwkJV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9 ICckYXBwbmFtZV9DJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisJKSBvciBkaWUgIlRpbWVk IG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IjsKKworCSMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFRlc3QgMlBDIFBSRVBBUkUgLyBDT01NSVQgUFJFUEFS RUQuCisJIyAxLiBEYXRhIGlzIHN0cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9uLgorCSMgMi4g VGhlbiBkbyBjb21taXQgcHJlcGFyZWQuCisJIworCSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxp Y2F0ZWQgb24gc3Vic2NyaWJlcihzKSBhZnRlciB0aGUgY29tbWl0LgorCSMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKworCSMgSWYgInN0cmVhbWluZyIgcGFyYW1ldGVyIGlzIHNwZWNp ZmllZCBhcyAicGFyYWxsZWwiLCB3ZSBuZWVkIHRvIGNoZWNrCisJIyB0aGF0IHN0cmVhbWVkIHRy YW5zYWN0aW9uIHdhcyBwcmVwYXJlZCB1c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkj IFdlIGhhdmUgdG8gbG9vayBmb3IgdGhlIERFQlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQgdGhhdCwg c28gYnVtcCB1cCB0aGUKKwkjIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRzdHJlYW1pbmdfbW9kZSBl cSAncGFyYWxsZWwnKQorCXsKKwkJJG5vZGVfQi0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7CisJCSRub2RlX0ItPnJlbG9hZDsKKwor CQkkbm9kZV9DLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19taW5fbWVzc2Fn ZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVfQy0+cmVsb2FkOworCX0KKworCSMgQ2hlY2sgdGhlIHN1 YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXRfQiA9IC1zICRub2RlX0ItPmxvZ2Zp bGU7CisJJG9mZnNldF9DID0gLXMgJG5vZGVfQy0+bG9nZmlsZTsKKworCSMgSW5zZXJ0LCB1cGRh dGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCisJIyBU aGVuIDJQQyBQUkVQQVJFCisJJG5vZGVfQS0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxewor CQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VU IGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRf dGFiJzt9KTsKKworCSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7CisJJG5v ZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKworCWNoZWNrX3BhcmFsbGVsX2xv Zygkbm9kZV9CLCAkb2Zmc2V0X0IsICRzdHJlYW1pbmdfbW9kZSk7CisJY2hlY2tfcGFyYWxsZWxf bG9nKCRub2RlX0MsICRvZmZzZXRfQywgJHN0cmVhbWluZ19tb2RlKTsKKworCSMgY2hlY2sgdGhl IHRyYW5zYWN0aW9uIHN0YXRlIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIocykKKwlteSAkcmVz dWx0ID0KKwkgICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50 KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFu c2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0ID0KKwkgICRu b2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdf cHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBw cmVwYXJlZCBvbiBzdWJzY3JpYmVyIEMnKTsKKworCSMgMlBDIENPTU1JVAorCSRub2RlX0EtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7 Iik7CisKKwkkbm9kZV9BLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0IpOworCSRub2RlX0It PndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rp b24gd2FzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyKHMpCisJJHJlc3VsdCA9ICRub2RlX0ItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQo ZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0 KSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIg QiwgYW5kIGV4dHJhIGNvbHVtbnMgaGF2ZSBsb2NhbCBkZWZhdWx0cycKKwkpOworCSRyZXN1bHQg PSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgz MzM0fDMzMzR8MzMzNCksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBv biBzdWJzY3JpYmVyIEMsIGFuZCBleHRyYSBjb2x1bW5zIGhhdmUgbG9jYWwgZGVmYXVsdHMnCisJ KTsKKworCSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIGlzIGVuZGVkIG9uIHN1YnNjcmli ZXIocykKKwkkcmVzdWx0ID0KKwkgICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQki U0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwg cXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJl c3VsdCA9CisJICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJh bnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQycpOworCisJIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSB3aXRoIGEgbmVzdGVkIFJP TExCQUNLIFRPIFNBVkVQT0lOVC4KKwkjIDAuIENsZWFudXAgZnJvbSBwcmV2aW91cyB0ZXN0IGxl YXZpbmcgb25seSAyIHJvd3MuCisJIyAxLiBJbnNlcnQgb25lIG1vcmUgcm93LgorCSMgMi4gUmVj b3JkIGEgU0FWRVBPSU5ULgorCSMgMy4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCisJIyA0 LiBEbyByb2xsYmFjayB0byBTQVZFUE9JTlQgcHJpb3IgdG8gdGhlIHN0cmVhbWVkIGluc2VydHMu CisJIyA1LiBUaGVuIENPTU1JVCBQUkVQQVJFRC4KKwkjCisJIyBFeHBlY3QgZGF0YSBhZnRlciB0 aGUgU0FWRVBPSU5UIGlzIGFib3J0ZWQgbGVhdmluZyBvbmx5IDMgcm93cyAoPSAyIG9yaWdpbmFs ICsgMSBmcm9tIHN0ZXAgMSkuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJ IyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzIChkZWxldGUgd2lsbCBi ZSByZXBsaWNhdGVkKQorCSRub2RlX0EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZS T00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxv ZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0X0IgPSAtcyAkbm9kZV9CLT5sb2dmaWxlOworCSRvZmZz ZXRfQyA9IC1zICRub2RlX0MtPmxvZ2ZpbGU7CisKKwkjIDJQQyBQUkVQQVJFIHdpdGggYSBuZXN0 ZWQgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UCisJJG5vZGVfQS0+c2FmZV9wc3FsKAorCQkncG9zdGdy ZXMnLCAiCisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTksICdm b29iYXInKTsKKwkJU0FWRVBPSU5UIHNwX2lubmVyOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7 CisJCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJ CURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUk9MTEJBQ0sgVE8g U0FWRVBPSU5UIHNwX2lubmVyOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICdvdXRlcic7CisJCSIp OworCisJJG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKKwkkbm9kZV9CLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2Rl X0IsICRvZmZzZXRfQiwgJHN0cmVhbWluZ19tb2RlKTsKKwljaGVja19wYXJhbGxlbF9sb2coJG5v ZGVfQywgJG9mZnNldF9DLCAkc3RyZWFtaW5nX21vZGUpOworCisJIyBjaGVjayB0aGUgdHJhbnNh Y3Rpb24gc3RhdGUgcHJlcGFyZWQgb24gc3Vic2NyaWJlcihzKQorCSRyZXN1bHQgPQorCSAgJG5v ZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19w cmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHBy ZXBhcmVkIG9uIHN1YnNjcmliZXIgQicpOworCSRyZXN1bHQgPQorCSAgJG5vZGVfQy0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0 czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1 YnNjcmliZXIgQycpOworCisJIyAyUEMgQ09NTUlUCisJJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ291dGVyJzsiKTsKKworCSRub2RlX0EtPndhaXRfZm9y X2NhdGNodXAoJGFwcG5hbWVfQik7CisJJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZV9DKTsKKworCSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIGlzIGVuZGVkIG9uIHN1YnNj cmliZXIKKwkkcmVzdWx0ID0KKwkgICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQki U0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwg cXEoMCksICd0cmFuc2FjdGlvbiBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0 ID0KKwkgICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2Fj dGlvbiBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyIEMnKTsKKworCSMgY2hlY2sgaW5zZXJ0cyBhcmUg dmlzaWJsZSBhdCBzdWJzY3JpYmVyKHMpLgorCSMgQWxsIHRoZSBzdHJlYW1lZCBkYXRhIChwcmlv ciB0byB0aGUgU0FWRVBPSU5UKSBzaG91bGQgYmUgcm9sbGVkIGJhY2suCisJIyAoOTk5OSwgJ2Zv b2JhcicpIHNob3VsZCBiZSBjb21taXR0ZWQuCisJJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWIgd2hlcmUgYiA9 ICdmb29iYXInOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAnUm93cyBjb21taXR0ZWQgYXJlIHBy ZXNlbnQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJlc3VsdCA9CisJICAkbm9kZV9CLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiOyIpOworCWlzKCRy ZXN1bHQsIHFxKDMpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBC Jyk7CisJJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNU IGNvdW50KCopIEZST00gdGVzdF90YWIgd2hlcmUgYiA9ICdmb29iYXInOyIpOworCWlzKCRyZXN1 bHQsIHFxKDEpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBDJyk7 CisJJHJlc3VsdCA9CisJICAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBGUk9NIHRlc3RfdGFiOyIpOworCWlzKCRyZXN1bHQsIHFxKDMpLCAnUm93cyBjb21t aXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBDJyk7CisKKwkjIENsZWFudXAgdGhlIHRl c3QgZGF0YQorCSRub2RlX0EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVz dF90YWIgV0hFUkUgYSA+IDI7Iik7CisJJG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZV9CKTsKKwkkbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOworCisJIyBSZXNl dCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJHN0cmVhbWluZ19tb2RlIGVxICdwYXJhbGxlbCcp CisJeworCQkkbm9kZV9CLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19taW5f bWVzc2FnZXMgPSB3YXJuaW5nIik7CisJCSRub2RlX0ItPnJlbG9hZDsKKworCQkkbm9kZV9DLT5h cHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19taW5fbWVzc2FnZXMgPSB3YXJuaW5n Iik7CisJCSRub2RlX0MtPnJlbG9hZDsKKwl9Cit9CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKICMgU2V0dXAgYSBjYXNjYWRlIG9mIHB1Yi9zdWIgbm9kZXMuCiAjIG5vZGVfQSAt PiBub2RlX0IgLT4gbm9kZV9DCkBAIC0yNjAsMTYwICs0OTMsMTUgQEAgaXMoJHJlc3VsdCwgcXEo MjEpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBDJyk7CiAjIDJQ QyArIFNUUkVBTUlORyBURVNUUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotbXkgJG9sZHBp ZF9CID0gJG5vZGVfQS0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLQlTRUxFQ1QgcGlkIEZS T00gcGdfc3RhdF9yZXBsaWNhdGlvbgotCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5h bWVfQicgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7Iik7Ci1teSAkb2xkcGlkX0MgPSAkbm9kZV9C LT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgIgotCVNFTEVDVCBwaWQgRlJPTSBwZ19zdGF0X3Jl cGxpY2F0aW9uCi0JV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9DJyBBTkQgc3Rh dGUgPSAnc3RyZWFtaW5nJzsiKTsKLQotIyBTZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uIChzdHJl YW1pbmcgPSBvbikKLQotJG5vZGVfQi0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsICIKLQlBTFRF UiBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9CCi0JU0VUIChzdHJlYW1pbmcgPSBvbik7Iik7Ci0kbm9k ZV9DLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgIgotCUFMVEVSIFNVQlNDUklQVElPTiB0YXBf c3ViX0MKLQlTRVQgKHN0cmVhbWluZyA9IG9uKSIpOwotCi0jIFdhaXQgZm9yIHN1YnNjcmliZXJz IHRvIGZpbmlzaCBpbml0aWFsaXphdGlvbgotCi0kbm9kZV9BLT5wb2xsX3F1ZXJ5X3VudGlsKAot CSdwb3N0Z3JlcycsICIKLQlTRUxFQ1QgcGlkICE9ICRvbGRwaWRfQiBGUk9NIHBnX3N0YXRfcmVw bGljYXRpb24KLQlXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0InIEFORCBzdGF0 ZSA9ICdzdHJlYW1pbmcnOyIKLSkgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Ig YXBwbHkgdG8gcmVzdGFydCI7Ci0kbm9kZV9CLT5wb2xsX3F1ZXJ5X3VudGlsKAotCSdwb3N0Z3Jl cycsICIKLQlTRUxFQ1QgcGlkICE9ICRvbGRwaWRfQyBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24K LQlXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0MnIEFORCBzdGF0ZSA9ICdzdHJl YW1pbmcnOyIKLSkgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8g cmVzdGFydCI7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGVzdCAyUEMg UFJFUEFSRSAvIENPTU1JVCBQUkVQQVJFRC4KLSMgMS4gRGF0YSBpcyBzdHJlYW1lZCBhcyBhIDJQ QyB0cmFuc2FjdGlvbi4KLSMgMi4gVGhlbiBkbyBjb21taXQgcHJlcGFyZWQuCi0jCi0jIEV4cGVj dCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIocykgYWZ0ZXIgdGhlIGNvbW1p dC4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBJbnNlcnQsIHVwZGF0ZSBh bmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSMgVGhlbiAy UEMgUFJFUEFSRQotJG5vZGVfQS0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47 Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVy YXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShi KSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEs MykgPSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKLQot JG5vZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRfZm9y X2NhdGNodXAoJGFwcG5hbWVfQyk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor IyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCit0ZXN0X3N0cmVhbWluZygkbm9kZV9BLCAkbm9kZV9CLCAkbm9kZV9DLCAkYXBw bmFtZV9CLCAkYXBwbmFtZV9DLCAnb24nKTsKIAotIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3Rh dGUgaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcihzKQotJHJlc3VsdCA9Ci0gICRub2RlX0ItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFj dHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1 YnNjcmliZXIgQicpOwotJHJlc3VsdCA9Ci0gICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0 LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQycpOwotCi0j IDJQQyBDT01NSVQKLSRub2RlX0EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ09NTUlUIFBSRVBB UkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWVfQik7Ci0kbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOwotCi0j IGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gd2FzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyKHMpCi0k cmVzdWx0ID0gJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgq KSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQs IHFxKDMzMzR8MzMzNHwzMzM0KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0 ZWQgb24gc3Vic2NyaWJlciBCLCBhbmQgZXh0cmEgY29sdW1ucyBoYXZlIGxvY2FsIGRlZmF1bHRz JwotKTsKLSRyZXN1bHQgPSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNU IGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMo JHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZl IGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyIEMsIGFuZCBleHRyYSBjb2x1bW5zIGhhdmUgbG9jYWwg ZGVmYXVsdHMnCi0pOwotCi0jIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRlZCBv biBzdWJzY3JpYmVyKHMpCi0kcmVzdWx0ID0KLSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1 bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQicpOwot JHJlc3VsdCA9Ci0gICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5z YWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyIEMnKTsKLQotIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwotIyBUZXN0IDJQQyBQUkVQQVJFIHdpdGggYSBuZXN0ZWQgUk9MTEJB Q0sgVE8gU0FWRVBPSU5ULgotIyAwLiBDbGVhbnVwIGZyb20gcHJldmlvdXMgdGVzdCBsZWF2aW5n IG9ubHkgMiByb3dzLgotIyAxLiBJbnNlcnQgb25lIG1vcmUgcm93LgotIyAyLiBSZWNvcmQgYSBT QVZFUE9JTlQuCi0jIDMuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgotIyA0LiBEbyByb2xs YmFjayB0byBTQVZFUE9JTlQgcHJpb3IgdG8gdGhlIHN0cmVhbWVkIGluc2VydHMuCi0jIDUuIFRo ZW4gQ09NTUlUIFBSRVBBUkVELgotIwotIyBFeHBlY3QgZGF0YSBhZnRlciB0aGUgU0FWRVBPSU5U IGlzIGFib3J0ZWQgbGVhdmluZyBvbmx5IDMgcm93cyAoPSAyIG9yaWdpbmFsICsgMSBmcm9tIHN0 ZXAgMSkuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgRmlyc3QsIGRlbGV0 ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAoZGVsZXRlIHdpbGwgYmUgcmVwbGljYXRlZCkK LSRub2RlX0EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hF UkUgYSA+IDI7Iik7Ci0KLSMgMlBDIFBSRVBBUkUgd2l0aCBhIG5lc3RlZCBST0xMQkFDSyBUTyBT QVZFUE9JTlQKLSRub2RlX0EtPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCAiCi0JQkVHSU47Ci0J SU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5LCAnZm9vYmFyJyk7Ci0JU0FWRVBPSU5U IHNwX2lubmVyOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VU IGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIG1vZChhLDMpID0gMDsKLQlST0xMQkFDSyBUTyBTQVZFUE9JTlQgc3BfaW5uZXI7Ci0JUFJF UEFSRSBUUkFOU0FDVElPTiAnb3V0ZXInOwotCSIpOwotCi0kbm9kZV9BLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lX0IpOwotJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsK LQotIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgcHJlcGFyZWQgb24gc3Vic2NyaWJlcihz KQotJHJlc3VsdCA9Ci0gICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3Ry YW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQicpOwotJHJlc3VsdCA9Ci0gICRu b2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJl cGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBh cmVkIG9uIHN1YnNjcmliZXIgQycpOwotCi0jIDJQQyBDT01NSVQKLSRub2RlX0EtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ09NTUlUIFBSRVBBUkVEICdvdXRlcic7Iik7Ci0KLSRub2RlX0EtPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7Ci0kbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lX0MpOwotCi0jIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRlZCBvbiBz dWJzY3JpYmVyCi0kcmVzdWx0ID0KLSAgJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFx KDApLCAndHJhbnNhY3Rpb24gaXMgZW5kZWQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0K LSAgJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMg ZW5kZWQgb24gc3Vic2NyaWJlciBDJyk7Ci0KLSMgY2hlY2sgaW5zZXJ0cyBhcmUgdmlzaWJsZSBh dCBzdWJzY3JpYmVyKHMpLgotIyBBbGwgdGhlIHN0cmVhbWVkIGRhdGEgKHByaW9yIHRvIHRoZSBT QVZFUE9JTlQpIHNob3VsZCBiZSByb2xsZWQgYmFjay4KLSMgKDk5OTksICdmb29iYXInKSBzaG91 bGQgYmUgY29tbWl0dGVkLgotJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYiB3aGVyZSBiID0gJ2Zvb2Jhcic7Iik7 Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNj cmliZXIgQicpOwotJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIEZST00gdGVzdF90YWI7Iik7Ci1pcygkcmVzdWx0LCBxcSgzKSwgJ1Jvd3Mg Y29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQicpOwotJHJlc3VsdCA9ICRub2Rl X0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3Rh YiB3aGVyZSBiID0gJ2Zvb2Jhcic7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ1Jvd3MgY29tbWl0 dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQycpOwotJHJlc3VsdCA9ICRub2RlX0MtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWI7Iik7Ci1p cygkcmVzdWx0LCBxcSgzKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmli ZXIgQycpOworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1 c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwordGVzdF9zdHJlYW1pbmcoJG5vZGVfQSwgJG5vZGVfQiwgJG5vZGVfQywg JGFwcG5hbWVfQiwgJGFwcG5hbWVfQywgJ3BhcmFsbGVsJyk7CiAKICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKICMgY2hlY2sgYWxsIHRoZSBjbGVhbnVwCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBsIGIvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDIzX3R3b3BoYXNlX3N0cmVhbS5wbAppbmRleCA5YjQ1NDEwNmJkLi44MmI1 ZTZjMTJlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vf c3RyZWFtLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190d29waGFzZV9zdHJl YW0ucGwKQEAgLTgsNiArOCwzMDggQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorIyBDaGVjayB0 aGUgbG9nIHRoYXQgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vz c2Z1bGx5CisjIHJlcG9ydGVkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KK3N1YiBjaGVja19w YXJhbGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFs bGVsKSA9IEBfOworCW15ICRwYXJhbGxlbF9tZXNzYWdlID0KKwkgICdmaW5pc2hlZCBwcm9jZXNz aW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCc7CisKKwlpZiAoJGlzX3BhcmFsbGVs KQorCXsKKwkJJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKHFyLyRwYXJhbGxlbF9tZXNz YWdlLywgJG9mZnNldCk7CisJfQorfQorCisjIEVuY2Fwc3VsYXRlIGFsbCB0aGUgY29tbW9uIHRl c3Qgc3RlcHMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8gInN0cmVhbWluZyIKKyMgcGFyYW1ldGVyIHNv IHRoZSBzYW1lIGNvZGUgY2FuIGJlIHJ1biBib3RoIGZvciB0aGUgc3RyZWFtaW5nPW9uIGFuZAor IyBzdHJlYW1pbmc9cGFyYWxsZWwgY2FzZXMuCitzdWIgdGVzdF9zdHJlYW1pbmcKK3sKKwlteSAo JG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgJGlzX3BhcmFsbGVs KSA9IEBfOworCisJbXkgJG9mZnNldCA9IDA7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisJIyBUZXN0IDJQQyBQUkVQQVJFIC8gQ09NTUlUIFBSRVBBUkVELgorCSMgMS4gRGF0 YSBpcyBzdHJlYW1lZCBhcyBhIDJQQyB0cmFuc2FjdGlvbi4KKwkjIDIuIFRoZW4gZG8gY29tbWl0 IHByZXBhcmVkLgorCSMKKwkjIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNj cmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKworCSMgSWYgInN0cmVhbWluZyIgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyAicGFy YWxsZWwiLCB3ZSBuZWVkIHRvIGNoZWNrCisJIyB0aGF0IHN0cmVhbWVkIHRyYW5zYWN0aW9uIHdh cyBwcmVwYXJlZCB1c2luZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKwkjIFdlIGhhdmUgdG8g bG9vayBmb3IgdGhlIERFQlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQgdGhhdCwgc28gYnVtcCB1cCB0 aGUKKwkjIGxvZyB2ZXJib3NpdHkuCisJaWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1 YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCQkJImxvZ19taW5fbWVz c2FnZXMgPSBkZWJ1ZzEiKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCX0KKworCSMg Q2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9k ZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBjaGVjayB0aGF0IDJQQyBnZXRzIHJlcGxpY2F0 ZWQgdG8gc3Vic2NyaWJlcgorCSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93 cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo CisJCSdwb3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJ CVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FD VElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3Jp YmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9u IGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwlteSAkcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJP TSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9u IGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdldHMg Y29tbWl0dGVkCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNP TU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlv biBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNv dW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8 MzMzNCksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3Jp YmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisJJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNU IGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCks ICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSAvIFJPTExCQUNLIFBS RVBBUkVELgorCSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUg cmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgorCSMgMi4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAy UEMuCisJIyAzLiBEbyByb2xsYmFjayBwcmVwYXJlZC4KKwkjCisJIyBFeHBlY3QgZGF0YSByb2xs cyBiYWNrIGxlYXZpbmcgb25seSB0aGUgb3JpZ2luYWwgMiByb3dzLgorCSMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9y IDIgcm93cyAod2lsbCBiZSByZXBsaWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKwor CSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAk bm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBk ZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJ CVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9s b2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSMgY2hlY2sg dGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNU IGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSks ICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIDJQQyB0cmFu c2FjdGlvbiBnZXRzIGFib3J0ZWQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCQkiUk9MTEJBQ0sgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKKworCSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRo YXQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBj b3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFx KDJ8MnwyKSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGFyZSByb2xsZWQgYmFjaywgbGVhdmlu ZyBvbmx5IHRoZSBvcmlnaW5hbCAyIHJvd3MnCisJKTsKKworCSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBn X3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMg YWJvcnRlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisJIyBDaGVjayB0aGF0IDJQQyBDT01NSVQgUFJFUEFSRUQgaXMgZGVjb2RlZCBwcm9wZXJs eSBvbiBjcmFzaCByZXN0YXJ0LgorCSMgMS4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91 Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCisJIyAyLiBUaGVuIHNlcnZlciBjcmFz aGVzIGJlZm9yZSB0aGUgMlBDIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KKwkjIDMuIEFmdGVy IHNlcnZlcnMgYXJlIHJlc3RhcnRlZCB0aGUgcGVuZGluZyB0cmFuc2FjdGlvbiBpcyBjb21taXR0 ZWQuCisJIworCSMgRXhwZWN0IGFsbCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlciBz aWRlIGFmdGVyIHRoZSBjb21taXQuCisJIyBOb3RlOiBib3RoIHB1Ymxpc2hlciBhbmQgc3Vic2Ny aWJlciBkbyBjcmFzaC9yZXN0YXJ0LgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAt cyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoCisJCSdwb3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7 CisJCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJ CURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFO U0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOworCisJJG5vZGVfc3Vic2NyaWJlci0+c3Rv cCgnaW1tZWRpYXRlJyk7CisJJG5vZGVfcHVibGlzaGVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKKwor CSRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7CisJJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKKwlj aGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVs KTsKKworCSMgY29tbWl0IHBvc3QgdGhlIHJlc3RhcnQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7 Iik7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMg Y2hlY2sgaW5zZXJ0cyBhcmUgdmlzaWJsZQorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50 KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMz NCksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVy LCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworCSk7CisKKwkjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBB UkUgYnV0IGJlZm9yZSBST0xMQkFDSyBQUkVQQVJFRC4KKwkjIDEuIFRhYmxlIGlzIGRlbGV0ZWQg YmFjayB0byAyIHJvd3Mgd2hpY2ggYXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KKwkjIDIu IERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgorCSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBp cyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQUkVQQVJFLgorCSMgNC4gVGhlbiBkbyBhIFJPTExC QUNLIFBSRVBBUkVELgorCSMKKwkjIEV4cGVjdCB0aGUgMlBDIGRhdGEgcm9sbHMgYmFjayBsZWF2 aW5nIG9ubHkgMyByb3dzIG9uIHRoZSBzdWJzY3JpYmVyCisJIyAodGhlIG9yaWdpbmFsIDIgKyBp bnNlcnRlZCAxKS4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIEZpcnN0 LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVwbGljYXRlZCkK Kwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiREVMRVRFIEZST00g dGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7CisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVyIGxvZyBm cm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmlsZTsKKwor CSMgVGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0 aGUgNjRrQiBsaW1pdC4KKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVz JywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKKwkJVVBEQVRFIHRlc3Rf dGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVz dF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3By ZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFw cG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1YnNjcmliZXIsICRvZmZzZXQs ICRpc19wYXJhbGxlbCk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFy ZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hh Y3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24g c3Vic2NyaWJlcicpOworCisJIyBJbnNlcnQgYSBkaWZmZXJlbnQgcmVjb3JkIChub3cgd2UgYXJl IG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKKwkjIE5vdGU6IHRoZSAyUEMgdHJhbnNh Y3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNvIG1ha2Ugc3VyZSB0aGlzIGluc2VydCBpcyBm b3IgYSBzZXBhcmF0ZSBwcmltYXJ5IGtleQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTk5LCAnZm9vYmFy JykiKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAorCSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJST0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVw YXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmli ZXIsCisJIyBidXQgdGhlIGV4dHJhIElOU0VSVCBvdXRzaWRlIG9mIHRoZSAyUEMgc3RpbGwgd2Fz IHJlcGxpY2F0ZWQKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9N IHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoM3wzfDMpLAorCQknY2hlY2sgdGhlIG91dHNp ZGUgaW5zZXJ0IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOworCisJJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZS T00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlv biBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKwkjIERvIElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIENPTU1J VCBQUkVQQVJFRC4KKwkjIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2gg YXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNp bmcgMlBDLgorCSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVy IHRoZSBQUkVQQVJFLgorCSMgNC4gVGhlbiBkbyBhIENPTU1JVCBQUkVQQVJFRC4KKwkjCisJIyBF eHBlY3QgMlBDIGRhdGEgKyB0aGUgZXh0cmEgcm93IGFyZSBvbiB0aGUgc3Vic2NyaWJlcgorCSMg KHRoZSAzMzM0ICsgaW5zZXJ0ZWQgMSA9IDMzMzUpLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAo d2lsbCBiZSByZXBsaWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJz Y3JpYmVyLT5sb2dmaWxlOworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5v dWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBz KGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAw OworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUg VFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVf c3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsKTsKKworCSMgY2hlY2sgdGhhdCB0cmFu c2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCop IEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2Fj dGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIEluc2VydCBhIGRpZmZlcmVu dCByZWNvcmQgKG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQorCSMg Tm90ZTogdGhlIDJQQyB0cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBz dXJlIHRoaXMgaW5zZXJ0IGlzIGZvciBhIHNlcGFyYXJlIHByaW1hcnkga2V5CisJJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZB TFVFUyAoOTk5OTksICdmb29iYXInKSIpOworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21t aXR0ZWQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ09NTUlU IFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlz IGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQo ZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDMzMzV8MzMzNXwzMzM1 KSwKKwkJJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIChhcyB3ZWxsIGFzIG91dHNpZGUgaW5zZXJ0KSBo YXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxv Y2FsIGRlZmF1bHRzJworCSk7CisKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0 czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBz dWJzY3JpYmVyJyk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBh ID4gMjsiKTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwor CisJIyBSZXNldCB0aGUgbG9nIHZlcmJvc2l0eS4KKwlpZiAoJGlzX3BhcmFsbGVsKQorCXsKKwkJ JG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJCQkibG9n X21pbl9tZXNzYWdlcyA9IHdhcm5pbmciKTsKKwkJJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOwor CX0KK30KKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBTZXR1cAogIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtNDgsNiArMzUwLDEwIEBAICRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHVi IEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsKKworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9k ZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKAogCSdwb3N0Z3JlcycsICIKIAlDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9z dWIKQEAgLTY0LDIzNiArMzcwLDMwIEBAIG15ICR0d29waGFzZV9xdWVyeSA9CiAkbm9kZV9zdWJz Y3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICR0d29waGFzZV9xdWVyeSkKICAg b3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Igc3Vic2NyaWJlciB0byBlbmFibGUg dHdvcGhhc2UiOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIENoZWNrIGlu aXRpYWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIKLSMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKIG15ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJP TSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMnwyfDIpLCAnY2hlY2sgaW5pdGlhbCBkYXRh IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCi0jIFRlc3QgMlBDIFBSRVBBUkUgLyBDT01NSVQgUFJFUEFSRUQuCi0jIDEuIERhdGEg aXMgc3RyZWFtZWQgYXMgYSAyUEMgdHJhbnNhY3Rpb24uCi0jIDIuIFRoZW4gZG8gY29tbWl0IHBy ZXBhcmVkLgotIwotIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVy IHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK K3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5h bWUsIDApOwogCi0jIGNoZWNrIHRoYXQgMlBDIGdldHMgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVy Ci0jIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2 NGtCIGxpbWl0LgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsK LQlCRUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBi ID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVS RSBtb2QoYSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWIn O30pOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0j IGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJl cgotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFx KDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIDJQQyB0 cmFuc2FjdGlvbiBnZXRzIGNvbW1pdHRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKLQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhh dCB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNv dW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgz MzM0fDMzMzR8MzMzNCksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9u IHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVh bWluZyBtb2RlICdwYXJhbGxlbCcKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25f bmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgogKTsKLSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50 KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5z YWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKLSMgVGVzdCAyUEMgUFJFUEFSRSAvIFJPTExCQUNLIFBSRVBBUkVELgot IyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVk IG9uIHN1YnNjcmliZXIuCi0jIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgotIyAzLiBE byByb2xsYmFjayBwcmVwYXJlZC4KLSMKLSMgRXhwZWN0IGRhdGEgcm9sbHMgYmFjayBsZWF2aW5n IG9ubHkgdGhlIG9yaWdpbmFsIDIgcm93cy4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKLQotIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJl IHJlcGxpY2F0ZWQpCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVM RVRFIEZST00gdGVzdF90YWIgV0hFUkUgYSA+IDI7Iik7Ci0KLSMgVGhlbiBpbnNlcnQsIHVwZGF0 ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBt b2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwot CVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKIAotJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRyYW5z YWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZS T00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9u IGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKLQotIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBh Ym9ydGVkCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJST0xMQkFD SyBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMg YWJvcnRlZCBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5 OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwKLQknUm93cyBpbnNl cnRlZCBieSAyUEMgYXJlIHJvbGxlZCBiYWNrLCBsZWF2aW5nIG9ubHkgdGhlIG9yaWdpbmFsIDIg cm93cycpOwotCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJl c3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKLQot IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDaGVjayB0aGF0IDJQQyBDT01NSVQg UFJFUEFSRUQgaXMgZGVjb2RlZCBwcm9wZXJseSBvbiBjcmFzaCByZXN0YXJ0LgotIyAxLiBpbnNl cnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1p dC4KLSMgMi4gVGhlbiBzZXJ2ZXIgY3Jhc2hlcyBiZWZvcmUgdGhlIDJQQyB0cmFuc2FjdGlvbiBp cyBjb21taXR0ZWQuCi0jIDMuIEFmdGVyIHNlcnZlcnMgYXJlIHJlc3RhcnRlZCB0aGUgcGVuZGlu ZyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCi0jCi0jIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBs aWNhdGVkIG9uIHN1YnNjcmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgotIyBOb3RlOiBib3Ro IHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBkbyBjcmFzaC9yZXN0YXJ0LgotIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwotCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9z dGdyZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUo aTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVz dF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRl c3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3By ZXBhcmVkX3RhYic7fSk7Ci0KLSRub2RlX3N1YnNjcmliZXItPnN0b3AoJ2ltbWVkaWF0ZScpOwot JG5vZGVfcHVibGlzaGVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKLQotJG5vZGVfcHVibGlzaGVyLT5z dGFydDsKLSRub2RlX3N1YnNjcmliZXItPnN0YXJ0OwotCi0jIGNvbW1pdCBwb3N0IHRoZSByZXN0 YXJ0Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJDT01NSVQgUFJF UEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgaW5zZXJ0cyBhcmUgdmlzaWJsZQotJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29t bWl0dGVkIG9uIHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVm YXVsdHMnCi0pOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIERvIElOU0VS VCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIFJPTExCQUNLIFBSRVBBUkVELgotIyAxLiBU YWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1 YnNjcmliZXIuCi0jIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgotIyAzLiBBIHNpbmds ZSByb3cgSU5TRVJUIGlzIGRvbmUgd2hpY2ggaXMgYWZ0ZXIgdGhlIFBSRVBBUkUuCi0jIDQuIFRo ZW4gZG8gYSBST0xMQkFDSyBQUkVQQVJFRC4KLSMKLSMgRXhwZWN0IHRoZSAyUEMgZGF0YSByb2xs cyBiYWNrIGxlYXZpbmcgb25seSAzIHJvd3Mgb24gdGhlIHN1YnNjcmliZXIKLSMgKHRoZSBvcmln aW5hbCAyICsgaW5zZXJ0ZWQgMSkuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0K LSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBs aWNhdGVkKQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5k IGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywg NTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEs MikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQ QVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7Ci0KLSRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlv biBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBn X3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBw cmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgSW5zZXJ0IGEgZGlmZmVyZW50IHJlY29yZCAo bm93IHdlIGFyZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rpb24pCi0jIE5vdGU6IHRoZSAy UEMgdHJhbnNhY3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNvIG1ha2Ugc3VyZSB0aGlzIGlu c2VydCBpcyBmb3IgYSBzZXBhcmF0ZSBwcmltYXJ5IGtleQotJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKLQkiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5OSwg J2Zvb2JhcicpIik7Ci0KLSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAotJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiUk9MTEJBQ0sgUFJFUEFSRUQgJ3Rlc3Rf cHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2Ny aWJlciwKLSMgYnV0IHRoZSBleHRyYSBJTlNFUlQgb3V0c2lkZSBvZiB0aGUgMlBDIHN0aWxsIHdh cyByZXBsaWNhdGVkCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00g dGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDN8M3wzKSwgJ2NoZWNrIHRoZSBvdXRzaWRlIGlu c2VydCB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKLQotJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19w cmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgYWJv cnRlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK LSMgRG8gSU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUgQ09NTUlUIFBSRVBBUkVE LgotIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNh dGVkIG9uIHN1YnNjcmliZXIuCi0jIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgotIyAz LiBBIHNpbmdsZSByb3cgSU5TRVJUIGlzIGRvbmUgd2hpY2ggaXMgYWZ0ZXIgdGhlIFBSRVBBUkUu Ci0jIDQuIFRoZW4gZG8gYSBDT01NSVQgUFJFUEFSRUQuCi0jCi0jIEV4cGVjdCAyUEMgZGF0YSAr IHRoZSBleHRyYSByb3cgYXJlIG9uIHRoZSBzdWJzY3JpYmVyCi0jICh0aGUgMzMzNCArIGluc2Vy dGVkIDEgPSAzMzM1KS4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBGaXJz dCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQp Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVz dF90YWIgV0hFUkUgYSA+IDI7Iik7Ci0KLSMgVGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRl IGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBz KGkpOwotCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7 Ci0JREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJB TlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGlu IHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFy ZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVk IG9uIHN1YnNjcmliZXInKTsKLQotIyBJbnNlcnQgYSBkaWZmZXJlbnQgcmVjb3JkIChub3cgd2Ug YXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKLSMgTm90ZTogdGhlIDJQQyB0cmFu c2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJlIHRoaXMgaW5zZXJ0IGlz IGZvciBhIHNlcGFyYXJlIHByaW1hcnkga2V5Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAotCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTk5LCAnZm9vYmFy JykiKTsKLQotIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQKLSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJl ZF90YWInOyIpOwotCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlND UklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBwYXJhbGxlbCkiKTsKIAotIyBjaGVjayB0 aGF0IHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwg Y291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFx KDMzMzV8MzMzNXwzMzM1KSwKLQknUm93cyBpbnNlcnRlZCBieSAyUEMgKGFzIHdlbGwgYXMgb3V0 c2lkZSBpbnNlcnQpIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1 bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCi0pOworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1 ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0 YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0 YXRlID0gJ3N0cmVhbWluZyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdh aXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsK IAotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFx KDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKK3Rlc3Rfc3Ry ZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwog CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIGNoZWNrIGFsbCB0aGUgY2xlYW51 cApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX3N0cmVhbWluZ19wYXJh bGxlbF9hcHBseS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9zdHJlYW1pbmdfcGFy YWxsZWxfYXBwbHkucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTBl ZmQyZDM3NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9z dHJlYW1pbmdfcGFyYWxsZWxfYXBwbHkucGwKQEAgLTAsMCArMSwxNTIgQEAKKyMgQ29weXJpZ2h0 IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3Qg Zm9yIGRlYWRsb2NrIGluIHN0cmVhbWluZyBtb2RlICJwYXJhbGxlbCIgaW4gbG9naWNhbCByZXBs aWNhdGlvbi4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1v cmU7CisKK215ICRvZmZzZXQgPSAwOworCisjIENyZWF0ZSBwdWJsaXNoZXIgbm9kZQorbXkgJG5v ZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXIn KTsKKyRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7 Ciskbm9kZV9wdWJsaXNoZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCSdsb2dp Y2FsX2RlY29kaW5nX3dvcmtfbWVtID0gNjRrQicpOworJG5vZGVfcHVibGlzaGVyLT5zdGFydDsK KworIyBDcmVhdGUgc3Vic2NyaWJlciBub2RlCitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5pbml0OworCisjIENoZWNrIGlmIGFueSBzdHJlYW1pbmcgY2h1bmtzIGFyZSBhcHBsaWVkIHVz aW5nIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuIFdlCisjIGhhdmUgdG8gbG9vayBmb3IgdGhl IERFQlVHMSBsb2cgbWVzc2FnZXMgYWJvdXQgdGhhdCwgc28gYnVtcCB1cCB0aGUgbG9nCisjIHZl cmJvc2l0eS4KKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYn LCAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdGFy dDsKKworIyBTZXR1cCBzdHJ1Y3R1cmUgb24gcHVibGlzaGVyCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRlc3RfdGFiIChhIGludCkiKTsKKwor IyBTZXR1cCBzdHJ1Y3R1cmUgb24gc3Vic2NyaWJlcgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGVzdF90YWIgKGEgaW50KSIpOworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBVTklRVUUgSU5ERVgg aWR4X3RhYiBvbiB0ZXN0X3RhYihhKSIpOworCisjIFNldHVwIGxvZ2ljYWwgcmVwbGljYXRpb24K K215ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJu YW1lPXBvc3RncmVzJzsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ IkNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOworCitteSAk YXBwbmFtZSA9ICd0YXBfc3ViJzsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKKwkncG9z dGdyZXMnLCAiCisJQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViCisJQ09OTkVDVElPTiAnJHB1 Ymxpc2hlcl9jb25uc3RyIGFwcGxpY2F0aW9uX25hbWU9JGFwcG5hbWUnCisJUFVCTElDQVRJT04g dGFwX3B1YgorCVdJVEggKHN0cmVhbWluZyA9IHBhcmFsbGVsLCBjb3B5X2RhdGEgPSBmYWxzZSki KTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworIyBJ bnRlcmxlYXZlIGEgcGFpciBvZiB0cmFuc2FjdGlvbnMsIGVhY2ggZXhjZWVkaW5nIHRoZSA2NGtC IGxpbWl0LgorbXkgJGluICA9ICcnOworbXkgJG91dCA9ICcnOworCitteSAkdGltZXIgPSBJUEM6 OlJ1bjo6dGltZW91dCgkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCk7 CisKK215ICRoID0gJG5vZGVfcHVibGlzaGVyLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywg XCRpbiwgXCRvdXQsICR0aW1lciwKKwlvbl9lcnJvcl9zdG9wID0+IDApOworCisjID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKyMgQ29uZmlybSBpZiBhIGRlYWRsb2NrIGJldHdlZW4gdGhlIGxlYWRlciBh cHBseSB3b3JrZXIgYW5kIHRoZSBwYXJhbGxlbCBhcHBseQorIyB3b3JrZXIgY2FuIGJlIGRldGVj dGVkLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyRpbiAuPSBxeworQkVHSU47CitJTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkp OworfTsKKyRoLT5wdW1wX25iOworCisjIEVuc3VyZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgZXhlY3V0ZXMgdGhlIGluc2VydCBjb21tYW5kIGJlZm9yZSB0aGUKKyMgbGVhZGVyIHdv cmtlci4KKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwlxci9ERUJVRzogKCBbQS1a MC05XSs6KT8gYXBwbGllZCBbMC05XSsgY2hhbmdlcyBpbiB0aGUgc3RyZWFtaW5nIGNodW5rLywK Kwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRlc3RfdGFiIHZhbHVlcygxKSIpOworCiskaW4gLj0gcXsKK0NPTU1JVDsKK1xx Cit9OworJGgtPmZpbmlzaDsKKworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfbG9nKAorCXFy L0VSUk9SOiAoIFtBLVowLTldKzopPyBkZWFkbG9jayBkZXRlY3RlZC8sCisJJG9mZnNldCk7CisK KyMgRHJvcCB0aGUgdW5pcXVlIGluZGV4IG9uIHRoZSBzdWJzY3JpYmVyLCBub3cgaXQgd29ya3Mu Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgSU5ERVggaWR4 X3RhYiIpOworCisjIFdhaXQgZm9yIHRoaXMgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIGJlIGFw cGxpZWQgaW4gdGhlIGFwcGx5IHdvcmtlci4KKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7CisKK215ICRyZXN1bHQgPQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiIik7Citpcygk cmVzdWx0LCBxcSg1MDAxKSwgJ2RhdGEgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyIGFmdGVyIGRy b3BwaW5nIGluZGV4Jyk7CisKKyMgQ2xlYW4gdXAgdGVzdCBkYXRhIGZyb20gdGhlIGVudmlyb25t ZW50LgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlRSVU5DQVRFIFRB QkxFIHRlc3RfdGFiIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWUpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBV TklRVUUgSU5ERVggaWR4X3RhYiBvbiB0ZXN0X3RhYihhKSIpOworCisjID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKyMgQ29uZmlybSBpZiBhIGRlYWRsb2NrIGJldHdlZW4gdHdvIHBhcmFsbGVsIGFwcGx5 IHdvcmtlcnMgY2FuIGJlIGRldGVjdGVkLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgQ2hl Y2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1 YnNjcmliZXItPmxvZ2ZpbGU7CisKKyRpbiAuPSBxeworQkVHSU47CitJTlNFUlQgSU5UTyB0ZXN0 X3RhYiBTRUxFQ1QgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkpOworfTsKKyRo LT5wdW1wX25iOworCisjIEVuc3VyZSB0aGF0IHRoZSBmaXJzdCBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgZXhlY3V0ZXMgdGhlIGluc2VydCBjb21tYW5kCisjIGJlZm9yZSB0aGUgc2Vjb25kIG9uZS4K KyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwlxci9ERUJVRzogKCBbQS1aMC05XSs6 KT8gYXBwbGllZCBbMC05XSsgY2hhbmdlcyBpbiB0aGUgc3RyZWFtaW5nIGNodW5rLywKKwkkb2Zm c2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRlc3RfdGFiIFNFTEVDVCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSki KTsKKworJGluIC49IHF7CitDT01NSVQ7CitccQorfTsKKyRoLT5maW5pc2g7CisKKyRub2RlX3N1 YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwlxci9FUlJPUjogKCBbQS1aMC05XSs6KT8gZGVhZGxv Y2sgZGV0ZWN0ZWQvLAorCSRvZmZzZXQpOworCisjIERyb3AgdGhlIHVuaXF1ZSBpbmRleCBvbiB0 aGUgc3Vic2NyaWJlciwgbm93IGl0IHdvcmtzLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIElOREVYIGlkeF90YWIiKTsKKworIyBXYWl0IGZvciB0aGlzIHN0 cmVhbWluZyB0cmFuc2FjdGlvbiB0byBiZSBhcHBsaWVkIGluIHRoZSBhcHBseSB3b3JrZXIuCisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCiskcmVzdWx0ID0K KyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSB0ZXN0X3RhYiIpOworaXMoJHJlc3VsdCwgcXEoMTAwMDApLCAnZGF0YSByZXBsaWNh dGVkIHRvIHN1YnNjcmliZXIgYWZ0ZXIgZHJvcHBpbmcgaW5kZXgnKTsKKworJG5vZGVfc3Vic2Ny aWJlci0+c3RvcDsKKyRub2RlX3B1Ymxpc2hlci0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7Ci0t IAoyLjIzLjAud2luZG93cy4xCgo= --_004_OS0PR01MB5716A380FDDE576CCD84F5BE94049OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v47-0001-Perform-streaming-logical-transactions-by-parall.patch" Content-Description: v47-0001-Perform-streaming-logical-transactions-by-parall.patch Content-Disposition: attachment; filename="v47-0001-Perform-streaming-logical-transactions-by-parall.patch"; size=187030; creation-date="Tue, 15 Nov 2022 11:45:08 GMT"; modification-date="Tue, 15 Nov 2022 11:57:36 GMT" Content-Transfer-Encoding: base64 RnJvbSA2YmM2NDk4N2ZkMmI3MmNkOGQzYjZiZmUzNDFhOTU3YTY2YTE3NGIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHY0NyAxLzJdIFBlcmZvcm0gc3RyZWFtaW5nIGxvZ2ljYWwgdHJhbnNhY3Rpb25zIGJ5IHBhcmFs bGVsCiB3b3JrZXJzCgpDdXJyZW50bHksIGZvciBsYXJnZSB0cmFuc2FjdGlvbnMsIHRoZSBwdWJs aXNoZXIgc2VuZHMgdGhlIGRhdGEgaW4gbXVsdGlwbGUKc3RyZWFtcyAoY2hhbmdlcyBkaXZpZGVk IGludG8gY2h1bmtzIGRlcGVuZGluZyB1cG9uIGxvZ2ljYWxfZGVjb2Rpbmdfd29ya19tZW0pLAph bmQgdGhlbiBvbiB0aGUgc3Vic2NyaWJlci1zaWRlLCB0aGUgYXBwbHkgd29ya2VyIHdyaXRlcyB0 aGUgY2hhbmdlcyBpbnRvCnRlbXBvcmFyeSBmaWxlcyBhbmQgb25jZSBpdCByZWNlaXZlcyB0aGUg Y29tbWl0LCBpdCByZWFkcyBmcm9tIHRob3NlIGZpbGVzIGFuZAphcHBsaWVzIHRoZSBlbnRpcmUg dHJhbnNhY3Rpb24uIFRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHN1Y2gKdHJhbnNhY3Rp b25zLCB3ZSBjYW4gaW5zdGVhZCBhbGxvdyB0aGVtIHRvIGJlIGFwcGxpZWQgdmlhIHBhcmFsbGVs IHdvcmtlcnMuCgpJbiB0aGlzIGFwcHJvYWNoLCB3ZSBhc3NpZ24gYSBuZXcgcGFyYWxsZWwgYXBw bHkgd29ya2VyIChpZiBhdmFpbGFibGUpIGFzCnNvb24gYXMgdGhlIHhhY3QncyBmaXJzdCBzdHJl YW0gaXMgcmVjZWl2ZWQgYW5kIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHdpbGwKc2VuZCBjaGFu Z2VzIHRvIHRoaXMgbmV3IHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gVGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlcgp3aWxsIGRpcmVjdGx5IGFwcGx5IHRoZSBjaGFuZ2UgaW5zdGVhZCBvZiB3cml0 aW5nIGl0IHRvIHRlbXBvcmFyeSBmaWxlcy4gV2UKa2VlcCB0aGlzIHdvcmtlciBhc3NpZ25lZCB0 aWxsIHRoZSB0cmFuc2FjdGlvbiBjb21taXQgaXMgcmVjZWl2ZWQgYW5kIGFsc28gd2FpdApmb3Ig dGhlIHdvcmtlciB0byBmaW5pc2ggYXQgY29tbWl0LiBUaGlzIHByZXNlcnZlcyBjb21taXQgb3Jk ZXJpbmcgYW5kIGF2b2lkcwp3cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gZmlsZXMgaW4gbW9z dCBjYXNlcy4gV2Ugc3RpbGwgbmVlZCB0byBzcGlsbCBpZgp0aGVyZSBpcyBubyB3b3JrZXIgYXZh aWxhYmxlLgoKVGhpcyBwYXRjaCBhbHNvIGV4dGVuZHMgdGhlIFNVQlNDUklQVElPTiAnc3RyZWFt aW5nJyBwYXJhbWV0ZXIgc28gdGhhdCB0aGUgdXNlcgpjYW4gY29udHJvbCB3aGV0aGVyIHRvIGFw cGx5IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gaW4gYSBwYXJhbGxlbCBhcHBseQp3b3JrZXIg b3Igc3BpbGwgdGhlIGNoYW5nZSB0byBkaXNrLiBUaGUgdXNlciBjYW4gc2V0IHRoZSBzdHJlYW1p bmcgcGFyYW1ldGVyIHRvCidvbi9vZmYnLCAncGFyYWxsZWwnLiBUaGUgcGFyYW1ldGVyIHZhbHVl ICdwYXJhbGxlbCcgbWVhbnMgdGhlIHN0cmVhbWluZyB3aWxsCmJlIGFwcGxpZWQgdmlhIGEgcGFy YWxsZWwgYXBwbHkgd29ya2VyLCBpZiBhdmFpbGFibGUuIFRoZSBwYXJhbWV0ZXIgdmFsdWUKJ29u JyBtZWFucyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHdpbGwgYmUgc3BpbGxlZCB0byBkaXNr LiBUaGUgZGVmYXVsdCB2YWx1ZQppcyAnb2ZmJyAoc2FtZSBhcyBjdXJyZW50IGJlaGF2aW91ciku CgpJbiBhZGRpdGlvbiwgdGhlIHBhdGNoIGV4dGVuZHMgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24g U1RSRUFNX0FCT1JUIG1lc3NhZ2Ugc28KdGhhdCBhYm9ydF90aW1lIGFuZCBhYm9ydF9sc24gY2Fu IGFsc28gYmUgc2VudCB3aGljaCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlCnJlcGxpY2F0aW9u IG9yaWdpbiBpbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgd2hlbiB0aGUgc3RyZWFtaW5nIHRyYW5z YWN0aW9uIGlzCmFib3J0ZWQuIEJlY2F1c2UgdGhpcyBtZXNzYWdlIGV4dGVuc2lvbiBpcyBuZWVk ZWQgdG8gc3VwcG9ydCBwYXJhbGxlbApzdHJlYW1pbmcsIHBhcmFsbGVsIHN0cmVhbWluZyBpcyBu b3Qgc3VwcG9ydGVkIGZvciBwdWJsaWNhdGlvbnMgb24gc2VydmVycyA8ClBHMTYuCi0tLQogZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICst CiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg MjggKy0KIGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgICAgICAgICAgICAg IHwgICAyMSArLQogZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCAgICAgICAgICAgICAgICAg ICAgICAgfCAgICA1ICsKIGRvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAyOSArLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9u LnNnbWwgICAgICAgICAgfCAgIDI0ICstCiBkb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwg ICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hhY3QuYyAgICAgICAgICAgICAgICAgIHwgICAxMyArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9z dWJzY3JpcHRpb25jbWRzLmMgICAgICAgICAgICB8ICAgNjYgKy0KIHNyYy9iYWNrZW5kL2xpYnBx L3BxbXEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQogc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9iZ3dvcmtlci5jICAgICAgICAgICAgICAgICAgfCAgICAzICsKIC4uLi9saWJw cXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyAgICAgICAgICAgIHwgICAgNiArLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgICAgICAgfCAgICAxICsK IC4uLi9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYyAgICAgIHwgMTI4 MyArKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYyAgICAgICAgICAgfCAgIDEwICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xhdW5jaGVyLmMgICAgICAgICB8ICAyMTAgKysrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9tZXNvbi5idWlsZCAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgICAgICAgICAgIHwgICAyMyArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAgICAgICAgfCAgIDM3ICstCiBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyAgICB8ICAgMTAgKy0KIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgICAgICAgIHwgICAyNCAr LQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgICAgICAgfCAx MDEyICsrKysrKysrKysrKy0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYyAgICAgICAgfCAgIDIyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2ln bmFsLmMgICAgICAgICAgICAgICB8ICAgIDQgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xt Z3IuYyAgICAgICAgICAgICAgICAgICAgfCAgIDQ1ICsKIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50LmMgICAgICAgICAgICB8ICAgIDYgKwogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2xvY2tmdW5jcy5jICAgICAgICAgICAgICAgICAgfCAgICA1ICstCiBzcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAgICAgICAgICAgICB8ICAgMTIgKwogc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlICAgICAgfCAgICAxICsKIHNy Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiAr LQogc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDIxICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oICAgICAgICAgICAg ICB8ICAgMjEgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaCAgICAg ICAgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIu aCAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3Rv LmggICAgICAgICAgICAgfCAgIDI4ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fs d29ya2VyLmggICAgICAgICAgICB8ICAgIDggKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3Jp Z2luLmggICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9wZ291dHB1dC5oICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICAgICAgIHwgICAgNyArLQogc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCAgICAgICAgICB8ICAxNjAgKystCiBz cmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUg Kwogc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDE3ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oICAgICAgICAgICAgICAg ICAgICAgfCAgICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91 dCAgICAgICAgIHwgICA0NiArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNx bCAgICAgICAgICAgICAgfCAgICA2ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCAgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogNDkgZmlsZXMgY2hhbmdlZCwgMjk1MSBpbnNl cnRpb25zKCspLCAzMzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKCmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21s CmluZGV4IDAwZjgzM2QuLmM1NzY5ZGEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9n cy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCkBAIC03ODkyLDExICs3ODky LDE2IEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxhY2VhYmxlPiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7 PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxlPiZsCiAKICAgICAgPHJvdz4KICAgICAgIDxlbnRy eSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlv biI+Ci0gICAgICAgPHN0cnVjdGZpZWxkPnN1YnN0cmVhbTwvc3RydWN0ZmllbGQ+IDx0eXBlPmJv b2w8L3R5cGU+CisgICAgICAgPHN0cnVjdGZpZWxkPnN1YnN0cmVhbTwvc3RydWN0ZmllbGQ+IDx0 eXBlPmNoYXI8L3R5cGU+CiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KLSAgICAgICBJZiB0 cnVlLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgYWxsb3cgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNz Ci0gICAgICAgdHJhbnNhY3Rpb25zCisgICAgICAgQ29udHJvbHMgaG93IHRvIGhhbmRsZSB0aGUg c3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uczoKKyAgICAgICA8bGl0ZXJhbD5m PC9saXRlcmFsPiA9IGRpc2FsbG93IHN0cmVhbWluZyBvZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlv bnMsCisgICAgICAgPGxpdGVyYWw+dDwvbGl0ZXJhbD4gPSBzcGlsbCB0aGUgY2hhbmdlcyBvZiBp bi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgdG8KKyAgICAgICBkaXNrIGFuZCBhcHBseSBhdCBvbmNl IGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gdGhlCisgICAgICAgcHVibGlz aGVyLAorICAgICAgIDxsaXRlcmFsPnA8L2xpdGVyYWw+ID0gYXBwbHkgY2hhbmdlcyBkaXJlY3Rs eSB1c2luZyBhIHBhcmFsbGVsIGFwcGx5CisgICAgICAgd29ya2VyIGlmIGF2YWlsYWJsZSAoc2Ft ZSBhcyAndCcgaWYgbm8gd29ya2VyIGlzIGF2YWlsYWJsZSkKICAgICAgIDwvcGFyYT48L2VudHJ5 PgogICAgICA8L3Jvdz4KIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIv ZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDU1OWViODkuLmE2YWExYWMgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNn bWwKQEAgLTQ5NDgsNyArNDk0OCw4IEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8 bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+CiAgICAgICAgIFNwZWNpZmllcyBtYXhpbXVtIG51bWJl ciBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlcnMuIFRoaXMgaW5jbHVkZXMKLSAgICAgICAg Ym90aCBhcHBseSB3b3JrZXJzIGFuZCB0YWJsZSBzeW5jaHJvbml6YXRpb24gd29ya2Vycy4KKyAg ICAgICAgbGVhZGVyIGFwcGx5IHdvcmtlcnMsIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIGFuZCB0 YWJsZSBzeW5jaHJvbml6YXRpb24KKyAgICAgICAgd29ya2Vycy4KICAgICAgICA8L3BhcmE+CiAg ICAgICAgPHBhcmE+CiAgICAgICAgIExvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VycyBhcmUgdGFr ZW4gZnJvbSB0aGUgcG9vbCBkZWZpbmVkIGJ5CkBAIC00OTg4LDYgKzQ5ODksMzEgQEAgQU5ZIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJl cGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5 PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1tYXgtcGFyYWxsZWwtYXBwbHktd29ya2Vy cy1wZXItc3Vic2NyaXB0aW9uIiB4cmVmbGFiZWw9Im1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJz X3Blcl9zdWJzY3JpcHRpb24iPgorICAgICAgPHRlcm0+PHZhcm5hbWU+bWF4X3BhcmFsbGVsX2Fw cGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5 cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5tYXhfcGFy YWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uPC92YXJuYW1lPiBjb25maWd1cmF0 aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBNYXhpbXVtIG51bWJl ciBvZiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIHBlciBzdWJzY3JpcHRpb24uIFRoaXMKKyAgICAg ICAgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgcGFyYWxsZWxpc20gZm9yIHN0cmVh bWluZyBvZgorICAgICAgICBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgd2l0aCBzdWJzY3JpcHRp b24gcGFyYW1ldGVyCisgICAgICAgIDxsaXRlcmFsPnN0cmVhbWluZyA9IHBhcmFsbGVsPC9saXRl cmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBwYXJhbGxl bCBhcHBseSB3b3JrZXJzIGFyZSB0YWtlbiBmcm9tIHRoZSBwb29sIGRlZmluZWQgYnkKKyAgICAg ICAgPHZhcm5hbWU+bWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczwvdmFybmFtZT4uCisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBp cyAyLiBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4gdGhlCisgICAgICAgIDxmaWxl bmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29t bWFuZAorICAgICAgICBsaW5lLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgIDwvc2VjdDI+ CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9k b2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IGY4NzU2MzguLmYzNjY3 MTAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTQ5Nyw2ICsxNDk3 LDE2IEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBv cmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICBtaWdodCBub3QgdmlvbGF0ZSBhbnkg Y29uc3RyYWludC4gIFRoaXMgY2FuIGVhc2lseSBtYWtlIHRoZSBzdWJzY3JpYmVyCiAgICBpbmNv bnNpc3RlbnQuCiAgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gdGhlIHN0cmVhbWluZyBt b2RlIGlzIDxsaXRlcmFsPnBhcmFsbGVsPC9saXRlcmFsPiwgdGhlIGZpbmlzaCBMU04gb2YKKyAg IGZhaWxlZCB0cmFuc2FjdGlvbnMgbWF5IG5vdCBiZSBsb2dnZWQuIEluIHRoYXQgY2FzZSwgaXQg bWF5IGJlIG5lY2Vzc2FyeSB0bworICAgY2hhbmdlIHRoZSBzdHJlYW1pbmcgbW9kZSB0byA8bGl0 ZXJhbD5vbjwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiBhbmQKKyAgIGNhdXNl IHRoZSBzYW1lIGNvbmZsaWN0cyBhZ2FpbiBzbyB0aGUgZmluaXNoIExTTiBvZiB0aGUgZmFpbGVk IHRyYW5zYWN0aW9uIHdpbGwKKyAgIGJlIHdyaXR0ZW4gdG8gdGhlIHNlcnZlciBsb2cuIEZvciB0 aGUgdXNhZ2Ugb2YgZmluaXNoIExTTiwgcGxlYXNlIHJlZmVyIHRvIDxsaW5rCisgICBsaW5rZW5k PSJzcWwtYWx0ZXJzdWJzY3JpcHRpb24iPjxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4K KyAgIFNLSVA8L2NvbW1hbmQ+PC9saW5rPi4KKyAgPC9wYXJhPgogIDwvc2VjdDE+CiAKICA8c2Vj dDEgaWQ9ImxvZ2ljYWwtcmVwbGljYXRpb24tcmVzdHJpY3Rpb25zIj4KQEAgLTE2NzgsNyArMTY4 OCw4IEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBv cmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAgICBzdWJzY3JpcHRpb24uICBBIGRpc2Fi bGVkIHN1YnNjcmlwdGlvbiBvciBhIGNyYXNoZWQgc3Vic2NyaXB0aW9uIHdpbGwgaGF2ZQogICAg emVybyByb3dzIGluIHRoaXMgdmlldy4gIElmIHRoZSBpbml0aWFsIGRhdGEgc3luY2hyb25pemF0 aW9uIG9mIGFueQogICAgdGFibGUgaXMgaW4gcHJvZ3Jlc3MsIHRoZXJlIHdpbGwgYmUgYWRkaXRp b25hbCB3b3JrZXJzIGZvciB0aGUgdGFibGVzCi0gICBiZWluZyBzeW5jaHJvbml6ZWQuCisgICBi ZWluZyBzeW5jaHJvbml6ZWQuIE1vcmVvdmVyLCBpZiB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9u IGlzIGFwcGxpZWQgaW4KKyAgIHBhcmFsbGVsLCB0aGVyZSB3aWxsIGJlIGFkZGl0aW9uYWwgd29y a2Vycy4KICAgPC9wYXJhPgogIDwvc2VjdDE+CiAKQEAgLTE3ODQsOCArMTc5NSwxMiBAQCBDT05U RVhUOiAgcHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luICJwZ18x NjM5NSIgZHVyaW5nICJJTlNFUgogICAgdG8gdGhlIHN1YnNjcmliZXIsIHBsdXMgc29tZSByZXNl cnZlIGZvciB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiAgICA8dmFybmFtZT5tYXhfbG9naWNhbF9y ZXBsaWNhdGlvbl93b3JrZXJzPC92YXJuYW1lPiBtdXN0IGJlIHNldCB0byBhdCBsZWFzdAogICAg dGhlIG51bWJlciBvZiBzdWJzY3JpcHRpb25zLCBhZ2FpbiBwbHVzIHNvbWUgcmVzZXJ2ZSBmb3Ig dGhlIHRhYmxlCi0gICBzeW5jaHJvbml6YXRpb24uICBBZGRpdGlvbmFsbHkgdGhlIDx2YXJuYW1l Pm1heF93b3JrZXJfcHJvY2Vzc2VzPC92YXJuYW1lPgotICAgbWF5IG5lZWQgdG8gYmUgYWRqdXN0 ZWQgdG8gYWNjb21tb2RhdGUgZm9yIHJlcGxpY2F0aW9uIHdvcmtlcnMsIGF0IGxlYXN0CisgICBz eW5jaHJvbml6YXRpb24uIElmIHRoZSBzdWJzY3JpcHRpb24gcGFyYW1ldGVyIDxsaXRlcmFsPnN0 cmVhbWluZzwvbGl0ZXJhbD4KKyAgIGlzIHNldCB0byA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0ZXJh bD4sCisgICA8bGl0ZXJhbD5tYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzPC9saXRlcmFs PiBzaG91bGQgYmUgaW5jcmVhc2VkCisgICBhY2NvcmRpbmcgdG8gdGhlIGRlc2lyZWQgbnVtYmVy IG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICBBZGRpdGlvbmFsbHkgdGhlCisgICA8dmFybmFt ZT5tYXhfd29ya2VyX3Byb2Nlc3NlczwvdmFybmFtZT4gbWF5IG5lZWQgdG8gYmUgYWRqdXN0ZWQg dG8KKyAgIGFjY29tbW9kYXRlIGZvciByZXBsaWNhdGlvbiB3b3JrZXJzLCBhdCBsZWFzdAogICAg KDx2YXJuYW1lPm1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM8L3Zhcm5hbWU+CiAgICAr IDxsaXRlcmFsPjE8L2xpdGVyYWw+KS4gIE5vdGUgdGhhdCBzb21lIGV4dGVuc2lvbnMgYW5kIHBh cmFsbGVsIHF1ZXJpZXMKICAgIGFsc28gdGFrZSB3b3JrZXIgc2xvdHMgZnJvbSA8dmFybmFtZT5t YXhfd29ya2VyX3Byb2Nlc3NlczwvdmFybmFtZT4uCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv bW9uaXRvcmluZy5zZ21sIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAppbmRleCBlNWQ2 MjJkLi41NjAwZjVjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAgLTE4NTEsNiArMTg1MSwxMSBAQCBw b3N0Z3JlcyAgIDI3MDkzICAwLjAgIDAuMCAgMzAwOTYgIDI3NTIgPyAgICAgICAgU3MgICAxMToz NCAgIDA6MDAgcG9zdGdyZXM6IHNlcgogICAgICAgPGVudHJ5PldhaXRpbmcgdG8gYWNxdWlyZSBh biBhZHZpc29yeSB1c2VyIGxvY2suPC9lbnRyeT4KICAgICAgPC9yb3c+CiAgICAgIDxyb3c+Cisg ICAgICA8ZW50cnk+PGxpdGVyYWw+YXBwbHl0cmFuc2FjdGlvbjwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgPGVudHJ5PldhaXRpbmcgdG8gYWNxdWlyZSBhY3F1aXJlIGEgbG9jayBvbiBhIHJlbW90 ZSB0cmFuc2FjdGlvbiBiZWluZworICAgICAgYXBwbGllZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRl LjwvZW50cnk+CisgICAgIDwvcm93PgorICAgICA8cm93PgogICAgICAgPGVudHJ5PjxsaXRlcmFs PmV4dGVuZDwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PldhaXRpbmcgdG8gZXh0ZW5k IGEgcmVsYXRpb24uPC9lbnRyeT4KICAgICAgPC9yb3c+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvcHJvdG9jb2wuc2dtbCBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCmluZGV4IDVmZGQ0 MjkuLmM2YTBlODAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCkBAIC0zMTAyLDcgKzMxMDIsNyBAQCBwc3FsICJk Ym5hbWU9cG9zdGdyZXMgcmVwbGljYXRpb249ZGF0YWJhc2UiIC1jICJJREVOVElGWV9TWVNURU07 IgogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KICAgICAgICBQcm90b2NvbCB2ZXJzaW9u LiBDdXJyZW50bHkgdmVyc2lvbnMgPGxpdGVyYWw+MTwvbGl0ZXJhbD4sIDxsaXRlcmFsPjI8L2xp dGVyYWw+LAotICAgICAgIGFuZCA8bGl0ZXJhbD4zPC9saXRlcmFsPiBhcmUgc3VwcG9ydGVkLgor ICAgICAgIDxsaXRlcmFsPjM8L2xpdGVyYWw+LCBhbmQgPGxpdGVyYWw+NDwvbGl0ZXJhbD4gYXJl IHN1cHBvcnRlZC4KICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgogICAgICAgIFZlcnNpb24g PGxpdGVyYWw+MjwvbGl0ZXJhbD4gaXMgc3VwcG9ydGVkIG9ubHkgZm9yIHNlcnZlciB2ZXJzaW9u IDE0CkBAIC0zMTEyLDYgKzMxMTIsMTEgQEAgcHNxbCAiZGJuYW1lPXBvc3RncmVzIHJlcGxpY2F0 aW9uPWRhdGFiYXNlIiAtYyAiSURFTlRJRllfU1lTVEVNOyIKICAgICAgICBWZXJzaW9uIDxsaXRl cmFsPjM8L2xpdGVyYWw+IGlzIHN1cHBvcnRlZCBvbmx5IGZvciBzZXJ2ZXIgdmVyc2lvbiAxNQog ICAgICAgIGFuZCBhYm92ZSwgYW5kIGl0IGFsbG93cyBzdHJlYW1pbmcgb2YgdHdvLXBoYXNlIGNv bW1pdHMuCiAgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBWZXJzaW9uIDxsaXRl cmFsPjQ8L2xpdGVyYWw+IGlzIHN1cHBvcnRlZCBvbmx5IGZvciBzZXJ2ZXIgdmVyc2lvbiAxNgor ICAgICAgIGFuZCBhYm92ZSwgYW5kIGl0IGFsbG93cyBzdHJlYW1zIG9mIGxhcmdlIGluLXByb2dy ZXNzIHRyYW5zYWN0aW9ucyB0bworICAgICAgIGJlIGFwcGxpZWQgaW4gcGFyYWxsZWwuCisgICAg ICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CiAKQEAgLTY4 ODIsNiArNjg4NywyOCBAQCBwc3FsICJkYm5hbWU9cG9zdGdyZXMgcmVwbGljYXRpb249ZGF0YWJh c2UiIC1jICJJREVOVElGWV9TWVNURU07IgogICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9saXN0 aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5PgorICAg ICAgIDx0ZXJtPkludDY0IChYTG9nUmVjUHRyKTwvdGVybT4KKyAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgIDxwYXJhPgorICAgICAgICAgVGhlIExTTiBvZiB0aGUgYWJvcnQuIFRoaXMgZmllbGQg aXMgYXZhaWxhYmxlIHNpbmNlIHByb3RvY29sIHZlcnNpb24KKyAgICAgICAgIDQuCisgICAgICAg IDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+SW50NjQgKFRpbWVzdGFtcFR6KTwvdGVy bT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQWJvcnQgdGlt ZXN0YW1wIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHZhbHVlIGlzIGluIG51bWJlcgorICAgICAg ICAgb2YgbWljcm9zZWNvbmRzIHNpbmNlIFBvc3RncmVTUUwgZXBvY2ggKDIwMDAtMDEtMDEpLiBU aGlzIGZpZWxkIGlzCisgICAgICAgICBhdmFpbGFibGUgc2luY2UgcHJvdG9jb2wgdmVyc2lvbiA0 LgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVu dHJ5PgorCiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxp c3RlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlv bi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwKaW5kZXgg ZjlhMTc3Ni4uZjE3M2EwOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vi c2NyaXB0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9u LnNnbWwKQEAgLTIyOCwxMyArMjI4LDI5IEBAIENSRUFURSBTVUJTQ1JJUFRJT04gPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnN1YnNjcmlwdGlvbl9uYW1lPC9yZXBsYWNlYWJsCiAgICAg ICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICA8dGVy bT48bGl0ZXJhbD5zdHJlYW1pbmc8L2xpdGVyYWw+ICg8dHlwZT5ib29sZWFuPC90eXBlPik8L3Rl cm0+CisgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnN0cmVhbWluZzwvbGl0ZXJhbD4gKDx0eXBlPmVu dW08L3R5cGU+KTwvdGVybT4KICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgPHBhcmE+CiAg ICAgICAgICAgU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlIHN0cmVhbWluZyBvZiBpbi1wcm9n cmVzcyB0cmFuc2FjdGlvbnMKLSAgICAgICAgICBmb3IgdGhpcyBzdWJzY3JpcHRpb24uICBCeSBk ZWZhdWx0LCBhbGwgdHJhbnNhY3Rpb25zCi0gICAgICAgICAgYXJlIGZ1bGx5IGRlY29kZWQgb24g dGhlIHB1Ymxpc2hlciBhbmQgb25seSB0aGVuIHNlbnQgdG8gdGhlCi0gICAgICAgICAgc3Vic2Ny aWJlciBhcyBhIHdob2xlLgorICAgICAgICAgIGZvciB0aGlzIHN1YnNjcmlwdGlvbi4gIFRoZSBk ZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4sCisgICAgICAgICAgbWVhbmlu ZyBhbGwgdHJhbnNhY3Rpb25zIGFyZSBmdWxseSBkZWNvZGVkIG9uIHRoZSBwdWJsaXNoZXIgYW5k IG9ubHkKKyAgICAgICAgICB0aGVuIHNlbnQgdG8gdGhlIHN1YnNjcmliZXIgYXMgYSB3aG9sZS4K KyAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgPHBhcmE+CisgICAgICAgICAgSWYgc2V0IHRv IDxsaXRlcmFsPm9uPC9saXRlcmFsPiwgdGhlIGluY29taW5nIGNoYW5nZXMgYXJlIHdyaXR0ZW4g dG8KKyAgICAgICAgICB0ZW1wb3JhcnkgZmlsZXMgYW5kIHRoZW4gYXBwbGllZCBvbmx5IGFmdGVy IHRoZSB0cmFuc2FjdGlvbiBpcworICAgICAgICAgIGNvbW1pdHRlZCBvbiB0aGUgcHVibGlzaGVy IGFuZCByZWNlaXZlZCBieSB0aGUgc3Vic2NyaWJlci4KKyAgICAgICAgIDwvcGFyYT4KKworICAg ICAgICAgPHBhcmE+CisgICAgICAgICAgSWYgc2V0IHRvIDxsaXRlcmFsPnBhcmFsbGVsPC9saXRl cmFsPiwgaW5jb21pbmcgY2hhbmdlcyBhcmUgZGlyZWN0bHkKKyAgICAgICAgICBhcHBsaWVkIHZp YSBvbmUgb2YgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIGlmIGF2YWlsYWJsZS4gSWYgbm8K KyAgICAgICAgICBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgZnJlZSB0byBoYW5kbGUgc3RyZWFt aW5nIHRyYW5zYWN0aW9ucyB0aGVuCisgICAgICAgICAgdGhlIGNoYW5nZXMgYXJlIHdyaXR0ZW4g dG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCBhcHBsaWVkIGFmdGVyIHRoZQorICAgICAgICAgIHRyYW5z YWN0aW9uIGlzIGNvbW1pdHRlZC4gTm90ZSB0aGF0IGlmIGFuIGVycm9yIGhhcHBlbnMgaW4gYQor ICAgICAgICAgIHBhcmFsbGVsIGFwcGx5IHdvcmtlciwgdGhlIGZpbmlzaCBMU04gb2YgdGhlIHJl bW90ZSB0cmFuc2FjdGlvbgorICAgICAgICAgIG1pZ2h0IG5vdCBiZSByZXBvcnRlZCBpbiB0aGUg c2VydmVyIGxvZy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9saXN0aXRlbT4KICAgICAg ICA8L3Zhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Mu c2dtbCBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAppbmRleCA3YzcxNmZlLi5jMzgz Y2I0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCkBAIC0xMzYxLDggKzEzNjEsOSBAQAogICAgICAg IDxsaXRlcmFsPnZpcnR1YWx4aWQ8L2xpdGVyYWw+LAogICAgICAgIDxsaXRlcmFsPnNwZWN0b2tl bjwvbGl0ZXJhbD4sCiAgICAgICAgPGxpdGVyYWw+b2JqZWN0PC9saXRlcmFsPiwKLSAgICAgICA8 bGl0ZXJhbD51c2VybG9jazwvbGl0ZXJhbD4sIG9yCi0gICAgICAgPGxpdGVyYWw+YWR2aXNvcnk8 L2xpdGVyYWw+LgorICAgICAgIDxsaXRlcmFsPnVzZXJsb2NrPC9saXRlcmFsPiwKKyAgICAgICA8 bGl0ZXJhbD5hZHZpc29yeTwvbGl0ZXJhbD4gb3IKKyAgICAgICA8bGl0ZXJhbD5hcHBseXRyYW5z YWN0aW9uPC9saXRlcmFsPi4KICAgICAgICAoU2VlIGFsc28gPHhyZWYgbGlua2VuZD0id2FpdC1l dmVudC1sb2NrLXRhYmxlIi8+LikKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwppbmRleCA4MDg2Yjg1Li4wMzBjNjNhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGFjdC5jCkBAIC0xNzEyLDYgKzE3MTIsNyBAQCBSZWNvcmRUcmFuc2Fj dGlvbkFib3J0KGJvb2wgaXNTdWJYYWN0KQogCWludAkJCW5jaGlsZHJlbjsKIAlUcmFuc2FjdGlv bklkICpjaGlsZHJlbjsKIAlUaW1lc3RhbXBUeiB4YWN0X3RpbWU7CisJYm9vbAkJcmVwbG9yaWdp bjsKIAogCS8qCiAJICogSWYgd2UgaGF2ZW4ndCBiZWVuIGFzc2lnbmVkIGFuIFhJRCwgbm9ib2R5 IHdpbGwgY2FyZSB3aGV0aGVyIHdlIGFib3J0ZWQKQEAgLTE3NDIsNiArMTc0MywxMyBAQCBSZWNv cmRUcmFuc2FjdGlvbkFib3J0KGJvb2wgaXNTdWJYYWN0KQogCQllbG9nKFBBTklDLCAiY2Fubm90 IGFib3J0IHRyYW5zYWN0aW9uICV1LCBpdCB3YXMgYWxyZWFkeSBjb21taXR0ZWQiLAogCQkJIHhp ZCk7CiAKKwkvKgorCSAqIEFyZSB3ZSB1c2luZyB0aGUgcmVwbGljYXRpb24gb3JpZ2lucyBmZWF0 dXJlPyAgT3IsIGluIG90aGVyIHdvcmRzLCBhcmUKKwkgKiB3ZSByZXBsYXlpbmcgcmVtb3RlIGFj dGlvbnM/CisJICovCisJcmVwbG9yaWdpbiA9IChyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luICE9 IEludmFsaWRSZXBPcmlnaW5JZCAmJgorCQkJCSAgcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiAh PSBEb05vdFJlcGxpY2F0ZUlkKTsKKwogCS8qIEZldGNoIHRoZSBkYXRhIHdlIG5lZWQgZm9yIHRo ZSBhYm9ydCByZWNvcmQgKi8KIAlucmVscyA9IHNtZ3JHZXRQZW5kaW5nRGVsZXRlcyhmYWxzZSwg JnJlbHMpOwogCW5jaGlsZHJlbiA9IHhhY3RHZXRDb21taXR0ZWRDaGlsZHJlbigmY2hpbGRyZW4p OwpAQCAtMTc2NSw2ICsxNzczLDExIEBAIFJlY29yZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1 YlhhY3QpCiAJCQkJCSAgIE15WGFjdEZsYWdzLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCwKIAkJCQkJ ICAgTlVMTCk7CiAKKwlpZiAocmVwbG9yaWdpbikKKwkJLyogTW92ZSBMU05zIGZvcndhcmQgZm9y IHRoaXMgcmVwbGljYXRpb24gb3JpZ2luICovCisJCXJlcGxvcmlnaW5fc2Vzc2lvbl9hZHZhbmNl KHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fbHNuLAorCQkJCQkJCQkgICBYYWN0TGFzdFJlY0Vu ZCk7CisKIAkvKgogCSAqIFJlcG9ydCB0aGUgbGF0ZXN0IGFzeW5jIGFib3J0IExTTiwgc28gdGhh dCB0aGUgV0FMIHdyaXRlciBrbm93cyB0bwogCSAqIGZsdXNoIHRoaXMgYWJvcnQuIFRoZXJlJ3Mg bm90aGluZyB0byBiZSBnYWluZWQgYnkgZGVsYXlpbmcgdGhpcywgc2luY2UKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwppbmRleCBkNjczNTU3Li44YTE4Njk5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC04NCw3ICs4NCw3IEBAIHR5cGVk ZWYgc3RydWN0IFN1Yk9wdHMKIAlib29sCQljb3B5X2RhdGE7CiAJYm9vbAkJcmVmcmVzaDsKIAli b29sCQliaW5hcnk7Ci0JYm9vbAkJc3RyZWFtaW5nOworCWNoYXIJCXN0cmVhbWluZzsKIAlib29s CQl0d29waGFzZTsKIAlib29sCQlkaXNhYmxlb25lcnI7CiAJY2hhcgkgICAqb3JpZ2luOwpAQCAt MTAwLDYgKzEwMCw2MiBAQCBzdGF0aWMgdm9pZCBjaGVja19kdXBsaWNhdGVzX2luX3B1Ymxpc3Qo TGlzdCAqcHVibGlzdCwgRGF0dW0gKmRhdHVtcyk7CiBzdGF0aWMgTGlzdCAqbWVyZ2VfcHVibGlj YXRpb25zKExpc3QgKm9sZHB1Ymxpc3QsIExpc3QgKm5ld3B1Ymxpc3QsIGJvb2wgYWRkcHViLCBj b25zdCBjaGFyICpzdWJuYW1lKTsKIHN0YXRpYyB2b2lkIFJlcG9ydFNsb3RDb25uZWN0aW9uRXJy b3IoTGlzdCAqcnN0YXRlcywgT2lkIHN1YmlkLCBjaGFyICpzbG90bmFtZSwgY2hhciAqZXJyKTsK IAorLyoKKyAqIEV4dHJhY3QgdGhlIHN0cmVhbWluZyBtb2RlIHZhbHVlIGZyb20gYSBEZWZFbGVt LiAgVGhpcyBpcyBsaWtlCisgKiBkZWZHZXRCb29sZWFuKCkgYnV0IGFsc28gYWNjZXB0cyB0aGUg c3BlY2lhbCB2YWx1ZSBvZiAicGFyYWxsZWwiLgorICovCitjaGFyCitkZWZHZXRTdHJlYW1pbmdN b2RlKERlZkVsZW0gKmRlZikKK3sKKwkvKgorCSAqIElmIG5vIHBhcmFtZXRlciB2YWx1ZSBnaXZl biwgYXNzdW1lICJ0cnVlIiBpcyBtZWFudC4KKwkgKi8KKwlpZiAoZGVmLT5hcmcgPT0gTlVMTCkK KwkJcmV0dXJuIFNVQlNUUkVBTV9PTjsKKworCS8qCisJICogQWxsb3cgMCwgMSwgImZhbHNlIiwg InRydWUiLCAib2ZmIiwgIm9uIiBvciAicGFyYWxsZWwiLgorCSAqLworCXN3aXRjaCAobm9kZVRh ZyhkZWYtPmFyZykpCisJeworCQljYXNlIFRfSW50ZWdlcjoKKwkJCXN3aXRjaCAoaW50VmFsKGRl Zi0+YXJnKSkKKwkJCXsKKwkJCQljYXNlIDA6CisJCQkJCXJldHVybiBTVUJTVFJFQU1fT0ZGOwor CQkJCWNhc2UgMToKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PTjsKKwkJCQlkZWZhdWx0OgorCQkJ CQkvKiBvdGhlcndpc2UsIGVycm9yIG91dCBiZWxvdyAqLworCQkJCQlicmVhazsKKwkJCX0KKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCQkJeworCQkJCWNoYXIJICAgKnN2YWwgPSBkZWZHZXRTdHJp bmcoZGVmKTsKKworCQkJCS8qCisJCQkJICogVGhlIHNldCBvZiBzdHJpbmdzIGFjY2VwdGVkIGhl cmUgc2hvdWxkIG1hdGNoIHVwIHdpdGggdGhlCisJCQkJICogZ3JhbW1hcidzIG9wdF9ib29sZWFu X29yX3N0cmluZyBwcm9kdWN0aW9uLgorCQkJCSAqLworCQkJCWlmIChwZ19zdHJjYXNlY21wKHN2 YWwsICJmYWxzZSIpID09IDAgfHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib2ZmIikgPT0g MCkKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PRkY7CisJCQkJaWYgKHBnX3N0cmNhc2VjbXAoc3Zh bCwgInRydWUiKSA9PSAwIHx8CisJCQkJCXBnX3N0cmNhc2VjbXAoc3ZhbCwgIm9uIikgPT0gMCkK KwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PTjsKKwkJCQlpZiAocGdfc3RyY2FzZWNtcChzdmFsLCAi cGFyYWxsZWwiKSA9PSAwKQorCQkJCQlyZXR1cm4gU1VCU1RSRUFNX1BBUkFMTEVMOworCQkJfQor CQkJYnJlYWs7CisJfQorCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfU1lO VEFYX0VSUk9SKSwKKwkJCSBlcnJtc2coIiVzIHJlcXVpcmVzIGEgQm9vbGVhbiB2YWx1ZSBvciBc InBhcmFsbGVsXCIiLAorCQkJCQlkZWYtPmRlZm5hbWUpKSk7CisJcmV0dXJuIFNVQlNUUkVBTV9P RkY7CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCit9CiAKIC8qCiAgKiBDb21tb24gb3B0aW9u IHBhcnNpbmcgZnVuY3Rpb24gZm9yIENSRUFURSBhbmQgQUxURVIgU1VCU0NSSVBUSU9OIGNvbW1h bmRzLgpAQCAtMTM4LDcgKzE5NCw3IEBAIHBhcnNlX3N1YnNjcmlwdGlvbl9vcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwgTGlzdCAqc3RtdF9vcHRpb25zLAogCWlmIChJc1NldChzdXBwb3J0ZWRf b3B0cywgU1VCT1BUX0JJTkFSWSkpCiAJCW9wdHMtPmJpbmFyeSA9IGZhbHNlOwogCWlmIChJc1Nl dChzdXBwb3J0ZWRfb3B0cywgU1VCT1BUX1NUUkVBTUlORykpCi0JCW9wdHMtPnN0cmVhbWluZyA9 IGZhbHNlOworCQlvcHRzLT5zdHJlYW1pbmcgPSBTVUJTVFJFQU1fT0ZGOwogCWlmIChJc1NldChz dXBwb3J0ZWRfb3B0cywgU1VCT1BUX1RXT1BIQVNFX0NPTU1JVCkpCiAJCW9wdHMtPnR3b3BoYXNl ID0gZmFsc2U7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRfRElTQUJMRV9PTl9F UlIpKQpAQCAtMjQxLDcgKzI5Nyw3IEBAIHBhcnNlX3N1YnNjcmlwdGlvbl9vcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwgTGlzdCAqc3RtdF9vcHRpb25zLAogCQkJCWVycm9yQ29uZmxpY3RpbmdE ZWZFbGVtKGRlZmVsLCBwc3RhdGUpOwogCiAJCQlvcHRzLT5zcGVjaWZpZWRfb3B0cyB8PSBTVUJP UFRfU1RSRUFNSU5HOwotCQkJb3B0cy0+c3RyZWFtaW5nID0gZGVmR2V0Qm9vbGVhbihkZWZlbCk7 CisJCQlvcHRzLT5zdHJlYW1pbmcgPSBkZWZHZXRTdHJlYW1pbmdNb2RlKGRlZmVsKTsKIAkJfQog CQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0d29fcGhhc2UiKSA9PSAwKQogCQl7 CkBAIC02MjksNyArNjg1LDcgQEAgQ3JlYXRlU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAl2YWx1ZXNbQW51bV9wZ19zdWJzY3Jp cHRpb25fc3Vib3duZXIgLSAxXSA9IE9iamVjdElkR2V0RGF0dW0ob3duZXIpOwogCXZhbHVlc1tB bnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJlbmFibGVkIC0gMV0gPSBCb29sR2V0RGF0dW0ob3B0cy5l bmFibGVkKTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3ViYmluYXJ5IC0gMV0gPSBC b29sR2V0RGF0dW0ob3B0cy5iaW5hcnkpOwotCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9z dWJzdHJlYW0gLSAxXSA9IEJvb2xHZXREYXR1bShvcHRzLnN0cmVhbWluZyk7CisJdmFsdWVzW0Fu dW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0gQ2hhckdldERhdHVtKG9wdHMuc3Ry ZWFtaW5nKTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3VidHdvcGhhc2VzdGF0ZSAt IDFdID0KIAkJQ2hhckdldERhdHVtKG9wdHMudHdvcGhhc2UgPwogCQkJCQkgTE9HSUNBTFJFUF9U V09QSEFTRV9TVEFURV9QRU5ESU5HIDoKQEAgLTEwOTgsNyArMTE1NCw3IEBAIEFsdGVyU3Vic2Ny aXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJTdWJzY3JpcHRpb25TdG10ICpzdG10LAog CQkJCWlmIChJc1NldChvcHRzLnNwZWNpZmllZF9vcHRzLCBTVUJPUFRfU1RSRUFNSU5HKSkKIAkJ CQl7CiAJCQkJCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9Ci0J CQkJCQlCb29sR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOworCQkJCQkJQ2hhckdldERhdHVtKG9w dHMuc3RyZWFtaW5nKTsKIAkJCQkJcmVwbGFjZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3Ry ZWFtIC0gMV0gPSB0cnVlOwogCQkJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEv cHFtcS5jIGIvc3JjL2JhY2tlbmQvbGlicHEvcHFtcS5jCmluZGV4IDRkMDQxNWUuLjYzOTg0NWYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYworKysgYi9zcmMvYmFja2VuZC9s aWJwcS9wcW1xLmMKQEAgLTEzLDExICsxMywxMyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIK IAorI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgi CiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9wcW1xLmgiCiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVw bGljYXRpb24vbG9naWNhbHdvcmtlci5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogCkBAIC0xNjIsOSArMTY0LDE5IEBAIG1xX3B1dG1l c3NhZ2UoY2hhciBtc2d0eXBlLCBjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuKQogCQlyZXN1bHQg PSBzaG1fbXFfc2VuZHYocHFfbXFfaGFuZGxlLCBpb3YsIDIsIHRydWUsIHRydWUpOwogCiAJCWlm IChwcV9tcV9wYXJhbGxlbF9sZWFkZXJfcGlkICE9IDApCi0JCQlTZW5kUHJvY1NpZ25hbChwcV9t cV9wYXJhbGxlbF9sZWFkZXJfcGlkLAotCQkJCQkJICAgUFJPQ1NJR19QQVJBTExFTF9NRVNTQUdF LAotCQkJCQkJICAgcHFfbXFfcGFyYWxsZWxfbGVhZGVyX2JhY2tlbmRfaWQpOworCQl7CisJCQlp ZiAoSXNMb2dpY2FsUGFyYWxsZWxBcHBseVdvcmtlcigpKQorCQkJCVNlbmRQcm9jU2lnbmFsKHBx X21xX3BhcmFsbGVsX2xlYWRlcl9waWQsCisJCQkJCQkJICAgUFJPQ1NJR19QQVJBTExFTF9BUFBM WV9NRVNTQUdFLAorCQkJCQkJCSAgIHBxX21xX3BhcmFsbGVsX2xlYWRlcl9iYWNrZW5kX2lkKTsK KwkJCWVsc2UKKwkJCXsKKwkJCQlBc3NlcnQoSXNQYXJhbGxlbFdvcmtlcigpKTsKKwkJCQlTZW5k UHJvY1NpZ25hbChwcV9tcV9wYXJhbGxlbF9sZWFkZXJfcGlkLAorCQkJCQkJCSAgIFBST0NTSUdf UEFSQUxMRUxfTUVTU0FHRSwKKwkJCQkJCQkgICBwcV9tcV9wYXJhbGxlbF9sZWFkZXJfYmFja2Vu ZF9pZCk7CisJCQl9CisJCX0KIAogCQlpZiAocmVzdWx0ICE9IFNITV9NUV9XT1VMRF9CTE9DSykK IAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5j IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCmluZGV4IDBkNzJkZTIuLjJkZmE5 YWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTEyOCw2ICsxMjgsOSBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0CiAJfSwKIAl7CiAJCSJBcHBseVdvcmtlck1haW4iLCBBcHBseVdvcmtl ck1haW4KKwl9LAorCXsKKwkJIlBhcmFsbGVsQXBwbHlXb3JrZXJNYWluIiwgUGFyYWxsZWxBcHBs eVdvcmtlck1haW4KIAl9CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xpYnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCmluZGV4IDdmNjk3YjAu LjIyNWRhODEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVj ZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xp YnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCkBAIC00NDMsOSArNDQzLDkgQEAgbGli cHFyY3Zfc3RhcnRzdHJlYW1pbmcoV2FsUmVjZWl2ZXJDb25uICpjb25uLAogCQlhcHBlbmRTdHJp bmdJbmZvKCZjbWQsICJwcm90b192ZXJzaW9uICcldSciLAogCQkJCQkJIG9wdGlvbnMtPnByb3Rv LmxvZ2ljYWwucHJvdG9fdmVyc2lvbik7CiAKLQkJaWYgKG9wdGlvbnMtPnByb3RvLmxvZ2ljYWwu c3RyZWFtaW5nICYmCi0JCQlQUXNlcnZlclZlcnNpb24oY29ubi0+c3RyZWFtQ29ubikgPj0gMTQw MDAwKQotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiLCBzdHJlYW1pbmcgJ29uJyIp OworCQlpZiAob3B0aW9ucy0+cHJvdG8ubG9naWNhbC5zdHJlYW1pbmdfc3RyKQorCQkJYXBwZW5k U3RyaW5nSW5mbygmY21kLCAiLCBzdHJlYW1pbmcgJyVzJyIsCisJCQkJCQkJIG9wdGlvbnMtPnBy b3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0cik7CiAKIAkJaWYgKG9wdGlvbnMtPnByb3RvLmxvZ2lj YWwudHdvcGhhc2UgJiYKIAkJCVBRc2VydmVyVmVyc2lvbihjb25uLT5zdHJlYW1Db25uKSA+PSAx NTAwMDApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2Vm aWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQppbmRleCBjNGUy ZmRlLi4yZGMyNWUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUK QEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmds b2JhbAogb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JK UyA9IFwKKwlhcHBseXBhcmFsbGVsd29ya2VyLm8gXAogCWRlY29kZS5vIFwKIAlsYXVuY2hlci5v IFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi40ZWVkMGVjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKQEAgLTAsMCArMSwxMjgzIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqIGFwcGx5cGFyYWxsZWx3b3JrZXIuYworICoJICAgU3VwcG9ydCByb3V0 aW5lcyBmb3IgYXBwbHlpbmcgeGFjdCBieSBwYXJhbGxlbCBhcHBseSB3b3JrZXIKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICogSURFTlRJRklDQVRJT04gc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBs eXBhcmFsbGVsd29ya2VyLmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdGhh dCBhcmUgaW50ZW5kZWQgdG8gc3VwcG9ydCBzZXR0aW5nIHVwLCB1c2luZywKKyAqIGFuZCB0ZWFy aW5nIGRvd24gYSBQYXJhbGxlbEFwcGx5V29ya2VySW5mby4KKyAqCisgKiBSZWZlciB0byB0aGUg Y29tbWVudHMgaW4gdGhlIGZpbGUgaGVhZGVyIG9mIGxvZ2ljYWwvd29ya2VyLmMgdG8gc2VlIG1v cmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuCisgKgorICog RGVhZGxvY2stZGV0ZWN0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNpbmNlIHRoZSBk YXRhYmFzZSBzdHJ1Y3R1cmUgKHNjaGVtYSBvZiBzdWJzY3JpcHRpb24gdGFibGVzLCBldGMuKSBv ZgorICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIG1heSBiZSBkaWZmZXJlbnQuCisgKgorICog V2hlbiB0aGUgZm9sbG93aW5nIHR3byBzY2VuYXJpb3Mgb2NjdXIsIGEgZGVhZGxvY2sgb2NjdXJz LgorICoKKyAqIFN1cHBvc2UgYSBzdWJzY3JpYmVkIHRhYmxlIGRvZXMgbm90IGhhdmUgYSB1bmlx dWUga2V5IG9uIHRoZSBwdWJsaXNoZXIgYW5kCisgKiBoYXMgYSB1bmlxdWUga2V5IG9uIHRoZSBz dWJzY3JpYmVyLgorICoKKyAqIDEpIERlYWRsb2NrIGJldHdlZW4gdGhlIGxlYWRlciBhcHBseSB3 b3JrZXIgYW5kIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyCisgKgorICogVGhlIHBhcmFsbGVsIGFw cGx5IHdvcmtlciAoUEEpIGlzIGV4ZWN1dGluZyBUWC0xIGFuZCB0aGUgbGVhZGVyIGFwcGx5IHdv cmtlcgorICogKExBKSBpcyBleGVjdXRpbmcgVFgtMiBjb25jdXJyZW50bHkgb24gdGhlIHN1YnNj cmliZXIuIE5vdywgTEEgaXMgd2FpdGluZworICogZm9yIFBBIGJlY2F1c2Ugb2YgdGhlIHVuaXF1 ZSBrZXkgb2YgdGhlIHN1YnNjcmliZWQgdGFibGUgd2hpbGUgUEEgaXMgd2FpdGluZworICogZm9y IExBIHRvIHNlbmQgZnVydGhlciBtZXNzYWdlcy4KKyAqCisgKiBJbiBvcmRlciBmb3IgbG1nciB0 byBkZXRlY3QgdGhpcywgd2UgaGF2ZSBMQSBhY3F1aXJlIGEgc2Vzc2lvbiBsb2NrIG9uIHRoZQor ICogcmVtb3RlIHRyYW5zYWN0aW9uIChieSBwYV9sb2NrX3N0cmVhbSgpKSBhbmQgaGF2ZSBQQSB3 YWl0IG9uIHRoZQorICogbG9jayBiZWZvcmUgdHJ5aW5nIHRvIHJlY2VpdmUgbWVzc2FnZXMuIElu IG90aGVyIHdvcmRzLCBMQSBhY3F1aXJlcyB0aGUgbG9jaworICogYmVmb3JlIHNlbmRpbmcgU1RS RUFNX1NUT1AgYW5kIHJlbGVhc2VzIGl0IGlmIGFscmVhZHkgYWNxdWlyZWQgYmVmb3JlCisgKiBz ZW5kaW5nIFNUUkVBTV9TVEFSVCwgU1RSRUFNX1BSRVBBUkUgYW5kIFNUUkVBTV9DT01NSVQuIEZv ciBQQSwgaXQgYWx3YXlzCisgKiBuZWVkcyB0byBhY3F1aXJlIHRoZSBsb2NrIGFmdGVyIHByb2Nl c3NpbmcgU1RSRUFNX1NUT1AgYW5kIHRoZW4gcmVsZWFzZQorICogaW1tZWRpYXRlbHkgYWZ0ZXIg YWNxdWlyaW5nIGl0LiBUaGF0IHdheSwgd2hlbiBQQSBpcyB3YWl0aW5nIGZvciBMQSwgd2UgY2Fu CisgKiBoYXZlIGEgd2FpdC1lZGdlIGZyb20gUEEgdG8gTEEgaW4gbG1nciwgd2hpY2ggd2lsbCBt YWtlIGEgZGVhZGxvY2sgaW4gbG1ncgorICogbGlrZToKKyAqCisgKiBMQSAod2FpdGluZyB0byBh Y3F1aXJlIHRoZSBsb2NrIG9uIHRoZSB1bmlxdWUgaW5kZXgpIC0+IFBBICh3YWl0aW5nIHRvCisg KiBhY3F1aXJlIHRoZSBsb2NrIG9uIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24pIC0+IExBCisgKgor ICogMikgRGVhZGxvY2sgYmV0d2VlbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFyYWxs ZWwgYXBwbHkgd29ya2VycworICoKKyAqIFRoaXMgc2NlbmFyaW8gaXMgc2ltaWxhciB0byB0aGUg Zmlyc3QgY2FzZSBidXQgVFgtMSBhbmQgVFgtMiBhcmUgZXhlY3V0ZWQgYnkKKyAqIHR3byBwYXJh bGxlbCBhcHBseSB3b3JrZXJzIChQQS0xIGFuZCBQQS0yIHJlc3BlY3RpdmVseSkuIEluIHRoaXMg c2NlbmFyaW8sCisgKiBQQS0yIGlzIHdhaXRpbmcgZm9yIFBBLTEgdG8gY29tcGxldGUgaXRzIHRy YW5zYWN0aW9uIHdoaWxlIFBBLTEgaXMgd2FpdGluZworICogZm9yIHN1YnNlcXVlbnQgaW5wdXQg ZnJvbSBMQS4gQWxzbywgTEEgaXMgd2FpdGluZyBmb3IgUEEtMiB0byBjb21wbGV0ZSBpdHMKKyAq IHRyYW5zYWN0aW9uIGluIG9yZGVyIHRvIHByZXNlcnZlIHRoZSBjb21taXQgb3JkZXIuIFRoZXJl IGlzIGEgZGVhZGxvY2sgYW1vbmcKKyAqIHRocmVlIHByb2Nlc3Nlcy4KKyAqCisgKiBJbiBvcmRl ciBmb3IgbG1nciB0byBkZXRlY3QgdGhpcywgd2UgaGF2ZSBQQSBhY3F1aXJlIGEgc2Vzc2lvbiBs b2NrIG9uIHRoZQorICogdHJhbnNhY3Rpb24gYmVpbmcgYXBwbGllZCBhbmQgaGF2ZSBMQSB3YWl0 IG9uIHRoZSBsb2NrIGJlZm9yZSBwcm9jZWVkaW5nIGluCisgKiB0cmFuc2FjdGlvbiBmaW5pc2gg Y29tbWFuZHMuIFRoYXQgd2F5LCB3ZSBjYW4gaGF2ZSBhIHdhaXQtZWRnZSBmcm9tIExBIHRvIFBB CisgKiBpbiBsbWdyLCB3aGljaCB3aWxsIG1ha2UgYSBkZWFkbG9jayBpbiBsbWdyIGxpa2U6Cisg KgorICogTEEgKHdhaXRpbmcgdG8gYWNxdWlyZSB0aGUgbG9jYWwgdHJhbnNhY3Rpb24gbG9jaykg LT4gUEExICh3YWl0aW5nIHRvCisgKiBhY3F1aXJlIHRoZSBsb2NrIG9uIHRoZSB1bmlxdWUgaW5k ZXgpIC0+IFBBMiAod2FpdGluZyB0byBhY3F1aXJlIHRoZSBsb2NrIG9uCisgKiB0aGUgcmVtb3Rl IHRyYW5zYWN0aW9uKSAtPiBMQQorICoKKyAqIE9uZSBtaWdodCB0aGluayB3ZSBjYW4gdXNlIFhh Y3RMb2NrVGFibGVXYWl0KCksIGJ1dCBYYWN0TG9ja1RhYmxlV2FpdCgpCisgKiBjb25zaWRlcnMg UFJFUEFSRUQgVFJBTlNBQ1RJT04gYXMgc3RpbGwgaW4gcHJvZ3Jlc3Mgd2hpY2ggbWVhbnMgdGhl IGxvY2sKKyAqIHdvbid0IGJlIHJlbGVhc2VkIGV2ZW4gaWYgdGhlIHBhcmFsbGVsIGFwcGx5IHdv cmtlciBwcmVwYXJlZCB0aGUgdHJhbnNhY3Rpb24uCisgKgorICogMykgZGVhZGxvY2sgd2hlbiB0 aGUgc2htX21xIGJ1ZmZlciBpcyBmdWxsCisgKgorICogVGhlIHNjZW5hcmlvIHdoZXJlIExBIGhh cyB0byB3YWl0IGlzIHdoZW4gdGhlIHNobV9tcSBidWZmZXIgaXMgZnVsbC4gSW4gdGhlCisgKiBh Ym92ZSBzY2VuYXJpbyAoaWUuIFBBLTEgYW5kIFBBLTIgYXJlIGV4ZWN1dGluZyB0cmFuc2FjdGlv bnMgY29uY3VycmVudGx5KSwKKyAqIGlmIHRoZSBzaG1fbXEgYnVmZmVyIGJldHdlZW4gTEEgYW5k IFBBLTIgaXMgZnVsbCwgTEEgaGFzIHRvIHdhaXQgdG8gc2VuZAorICogbWVzc2FnZXMsIGFuZCB0 aGlzIHdhaXQgZG9lc24ndCBhcHBlYXIgaW4gbG1nci4KKyAqCisgKiBUbyByZXNvbHZlIHRoaXMg aXNzdWUsIHdlIHVzZSBub24tYmxvY2tpbmcgd3JpdGUgYW5kIHdhaXQgd2l0aCBhIHRpbWVvdXQu IElmCisgKiB0aW1lb3V0IGlzIGV4Y2VlZGVkLCB0aGUgTEEgcmVwb3J0IGFuIGVycm9yIGFuZCBy ZXN0YXJ0IGxvZ2ljYWwgcmVwbGljYXRpb24uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCisjaW5j bHVkZSAibGlicHEvcHFtcS5oIgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAi cGdzdGF0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dp Y2Fsd29ya2VyLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCisjaW5jbHVkZSAi cmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi93b3JrZXJf aW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv bG1nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAidGNvcC90 Y29wcHJvdC5oIgorI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCisjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5oIgorI2luY2x1ZGUgInV0aWxzL3N5 c2NhY2hlLmgiCisKKyNkZWZpbmUgUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMgMHg3ODdjYTA2 NworCisvKgorICogRFNNIGtleXMgZm9yIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gIFVubGlrZSBv dGhlciBwYXJhbGxlbCBleGVjdXRpb24gY29kZSwKKyAqIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8g d29ycnkgYWJvdXQgRFNNIGtleXMgY29uZmxpY3Rpbmcgd2l0aCBwbGFuX25vZGVfaWQgd2UKKyAq IGNhbiB1c2Ugc21hbGwgaW50ZWdlcnMuCisgKi8KKyNkZWZpbmUgUEFSQUxMRUxfQVBQTFlfS0VZ X1NIQVJFRAkJMQorI2RlZmluZSBQQVJBTExFTF9BUFBMWV9LRVlfTVEJCQkyCisjZGVmaW5lIFBB UkFMTEVMX0FQUExZX0tFWV9FUlJPUl9RVUVVRQkzCisKKy8qIFF1ZXVlIHNpemUgb2YgRFNNLCAx NiBNQiBmb3Igbm93LiAqLworI2RlZmluZSBEU01fUVVFVUVfU0laRQkoMTYgKiAxMDI0ICogMTAy NCkKKworLyoKKyAqIEVycm9yIHF1ZXVlIHNpemUgb2YgRFNNLiBJdCBpcyBkZXNpcmFibGUgdG8g bWFrZSBpdCBsYXJnZSBlbm91Z2ggdGhhdCBhCisgKiB0eXBpY2FsIEVycm9yUmVzcG9uc2UgY2Fu IGJlIHNlbnQgd2l0aG91dCBibG9ja2luZy4gIFRoYXQgd2F5LCBhIHdvcmtlciB0aGF0CisgKiBl cnJvcnMgb3V0IGNhbiB3cml0ZSB0aGUgd2hvbGUgbWVzc2FnZSBpbnRvIHRoZSBxdWV1ZSBhbmQg dGVybWluYXRlIHdpdGhvdXQKKyAqIHdhaXRpbmcgZm9yIHRoZSB1c2VyIGJhY2tlbmQuCisgKi8K KyNkZWZpbmUgRFNNX0VSUk9SX1FVRVVFX1NJWkUJCQkoMTYgKiAxMDI0KQorCisvKgorICogVGhl cmUgYXJlIHRocmVlIGZpZWxkcyBpbiBlYWNoIG1lc3NhZ2UgcmVjZWl2ZWQgYnkgdGhlIHBhcmFs bGVsIGFwcGx5CisgKiB3b3JrZXI6IHN0YXJ0X2xzbiwgZW5kX2xzbiBhbmQgc2VuZF90aW1lLiBC ZWNhdXNlIHdlIGhhdmUgdXBkYXRlZCB0aGVzZQorICogc3RhdGlzdGljcyBpbiB0aGUgbGVhZGVy IGFwcGx5IHdvcmtlciwgd2UgY2FuIGlnbm9yZSB0aGVzZSBmaWVsZHMgaW4gdGhlCisgKiBwYXJh bGxlbCBhcHBseSB3b3JrZXIgKHNlZSBmdW5jdGlvbiBMb2dpY2FsUmVwQXBwbHlMb29wKS4KKyAq LworI2RlZmluZSBTSVpFX1NUQVRTX01FU1NBR0UgKDIgKiBzaXplb2YoWExvZ1JlY1B0cikgKyBz aXplb2YoVGltZXN0YW1wVHopKQorCisvKgorICogSGFzaCB0YWJsZSBlbnRyeSB0byBtYXAgeGlk IHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgc3RhdGUuCisgKi8KK3R5cGVkZWYgc3RydWN0 IFBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeQoreworCVRyYW5zYWN0aW9uSWQgeGlkOwkJCS8qIEhh c2gga2V5IC0tIG11c3QgYmUgZmlyc3QgKi8KKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2lu Zm87Cit9IFBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeTsKKworLyogUGFyYWxsZWwgYXBwbHkgd29y a2VycyBoYXNoIHRhYmxlIChpbml0aWFsaXplZCBvbiBmaXJzdCB1c2UpLiAqLworc3RhdGljIEhU QUIgKlBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaCA9IE5VTEw7CisKKy8qCisgKiBBIGxpc3QgdG8g bWFpbnRhaW4gdGhlIGFjdGl2ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiBUaGUgaW5mb3JtYXRp b24gZm9yCisgKiB0aGUgbmV3IHdvcmtlciBpcyBhZGRlZCB0byB0aGUgbGlzdCBhZnRlciBzdWNj ZXNzZnVsbHkgbGF1bmNoaW5nIGl0LiBUaGUKKyAqIGxpc3QgZW50cnkgaXMgcmVtb3ZlZCBhdCB0 aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbiBpZiB0aGVyZSBhcmUgYWxyZWFkeQorICogZW5vdWdo IHdvcmtlcnMgaW4gdGhlIHdvcmtlciBwb29sLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0 aGUgd29ya2VyCisgKiBwb29sLCBzZWUgY29tbWVudHMgYXRvcCB3b3JrZXIuYy4KKyAqLworc3Rh dGljIExpc3QgKlBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdCA9IE5JTDsKKworLyoKKyAqIEluZm9y bWF0aW9uIHNoYXJlZCBiZXR3ZWVuIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHBhcmFsbGVsIGFw cGx5IHdvcmtlci4KKyAqLworUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqTXlQYXJhbGxlbFNo YXJlZCA9IE5VTEw7CisKKy8qCisgKiBJcyB0aGVyZSBhIG1lc3NhZ2Ugc2VudCBieSBwYXJhbGxl bCBhcHBseSB3b3JrZXIgd2hpY2ggd2UgbmVlZCB0byByZWNlaXZlPworICovCit2b2xhdGlsZSBz aWdfYXRvbWljX3QgUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0gZmFsc2U7CisKKy8qCisg KiBDYWNoZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZv ciBhcHBseWluZyB0aGUKKyAqIGN1cnJlbnQgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiBJdCBpcyB1 c2VkIHRvIHNhdmUgdGhlIGNvc3Qgb2Ygc2VhcmNoaW5nIHRoZQorICogaGFzaCB0YWJsZSB3aGVu IGFwcGx5aW5nIHRoZSBjaGFuZ2VzIGJldHdlZW4gU1RSRUFNX1NUQVJUIGFuZCBTVFJFQU1fU1RP UC4KKyAqLworUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKnN0cmVhbV9hcHBseV93b3JrZXIgPSBO VUxMOworCisvKiBBIGxpc3QgdG8gbWFpbnRhaW4gc3VidHJhbnNhY3Rpb25zLCBpZiBhbnkuICov CitMaXN0CSAgICpzdWJ4YWN0bGlzdCA9IE5JTDsKKworc3RhdGljIGJvb2wgcGFfY2FuX3N0YXJ0 KFRyYW5zYWN0aW9uSWQgeGlkKTsKK3N0YXRpYyBib29sIHBhX3NldHVwX2RzbShQYXJhbGxlbEFw cGx5V29ya2VySW5mbyAqd2luZm8pOworc3RhdGljIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICpw YV9pbml0X2FuZF9sYXVuY2hfd29ya2VyKHZvaWQpOworc3RhdGljIFBhcmFsbGVsQXBwbHlXb3Jr ZXJJbmZvICpwYV9nZXRfZnJlZV93b3JrZXIodm9pZCk7CitzdGF0aWMgdm9pZCBwYV9mcmVlX3dv cmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyk7CitzdGF0aWMgUGFyYWxs ZWxUcmFuc1N0YXRlIHBhX2dldF94YWN0X3N0YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQg KndzaGFyZWQpOworc3RhdGljIHZvaWQgcGFfd2FpdF9mb3JfeGFjdF9zdGF0ZShQYXJhbGxlbEFw cGx5V29ya2VyU2hhcmVkICp3c2hhcmVkLAorCQkJCQkJCQkgICBQYXJhbGxlbFRyYW5zU3RhdGUg eGFjdF9zdGF0ZSk7CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgT0sgdG8gc3RhcnQg YSBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJv b2wKK3BhX2Nhbl9zdGFydChUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwlpZiAoIVRyYW5zYWN0aW9u SWRJc1ZhbGlkKHhpZCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRG9uJ3Qgc3RhcnQg YSBuZXcgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlmIHRoZSBzdWJzY3JpcHRpb24gaXMgbm90CisJ ICogdXNpbmcgcGFyYWxsZWwgc3RyZWFtaW5nIG1vZGUsIG9yIGlmIHRoZSBwdWJsaXNoZXIgZG9l cyBub3Qgc3VwcG9ydAorCSAqIHBhcmFsbGVsIGFwcGx5LgorCSAqLworCWlmICghTXlMb2dpY2Fs UmVwV29ya2VyLT5wYXJhbGxlbF9hcHBseSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogT25seSBs ZWFkZXIgYXBwbHkgd29ya2VycyBjYW4gc3RhcnQgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gKi8K KwlpZiAoIWFtX2xlYWRlcl9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoK KwkgKiBEb24ndCBzdGFydCBhIG5ldyBwYXJhbGxlbCB3b3JrZXIgaWYgdXNlciBoYXMgc2V0IHNr aXBsc24gYXMgaXQncworCSAqIHBvc3NpYmxlIHRoYXQgdXNlciB3YW50IHRvIHNraXAgdGhlIHN0 cmVhbWluZyB0cmFuc2FjdGlvbi4gRm9yCisJICogc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCB3ZSBu ZWVkIHRvIHNwaWxsIHRoZSB0cmFuc2FjdGlvbiB0byBkaXNrIHNvIHRoYXQKKwkgKiB3ZSBjYW4g Z2V0IHRoZSBsYXN0IExTTiBvZiB0aGUgdHJhbnNhY3Rpb24gdG8ganVkZ2Ugd2hldGhlciB0byBz a2lwCisJICogYmVmb3JlIHN0YXJ0aW5nIHRvIGFwcGx5IHRoZSBjaGFuZ2UuCisJICovCisJaWYg KCFYTG9nUmVjUHRySXNJbnZhbGlkKE15U3Vic2NyaXB0aW9uLT5za2lwbHNuKSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBGb3Igc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBi ZWluZyBhcHBsaWVkIHVzaW5nIGEgcGFyYWxsZWwKKwkgKiBhcHBseSB3b3JrZXIsIHdlIGNhbm5v dCBkZWNpZGUgd2hldGhlciB0byBhcHBseSB0aGUgY2hhbmdlIGZvciBhCisJICogcmVsYXRpb24g dGhhdCBpcyBub3QgaW4gdGhlIFJFQURZIHN0YXRlIChzZWUKKwkgKiBzaG91bGRfYXBwbHlfY2hh bmdlc19mb3JfcmVsKSBhcyB3ZSB3b24ndCBrbm93IHJlbW90ZV9maW5hbF9sc24gYnkgdGhhdAor CSAqIHRpbWUuIFNvLCB3ZSBkb24ndCBzdGFydCB0aGUgbmV3IHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKCFBbGxUYWJsZXN5bmNzUmVhZHkoKSkKKwkJcmV0 dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBHZXQgYSBmcmVlIHBhcmFs bGVsIGFwcGx5IHdvcmtlciBmcm9tIHRoZSB3b3JrZXIgcG9vbC4KKyAqLworc3RhdGljIFBhcmFs bGVsQXBwbHlXb3JrZXJJbmZvICoKK3BhX2dldF9mcmVlX3dvcmtlcih2b2lkKQoreworCUxpc3QJ ICAgKmFjdGl2ZV93b3JrZXJzID0gbGlzdF9jb3B5KFBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdCk7 CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCBhY3RpdmVfd29ya2VycykKKwl7CisJ CVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyA9IE5VTEw7CisKKwkJd2luZm8gPSAoUGFy YWxsZWxBcHBseVdvcmtlckluZm8gKikgbGZpcnN0KGxjKTsKKworCQkvKgorCQkgKiBUcnkgdG8g ZnJlZSB0aGUgd29ya2VyIGZpcnN0LCBiZWNhdXNlIHdlIGRvbid0IHdhaXQgZm9yIHRoZSByb2xs YmFjaworCQkgKiBjb21tYW5kIHRvIGZpbmlzaCBzbyB0aGUgd29ya2VyIG1heSBub3QgYmUgZnJl ZWQgYXQgdGhlIGVuZCBvZiB0aGUKKwkJICogdHJhbnNhY3Rpb24uCisJCSAqLworCQlpZiAocGFf ZnJlZV93b3JrZXIod2luZm8sIHdpbmZvLT5zaGFyZWQtPnhpZCkpCisJCQljb250aW51ZTsKKwor CQlpZiAoIXdpbmZvLT5pbl91c2UpCisJCQlyZXR1cm4gd2luZm87CisJfQorCisJcmV0dXJuIE5V TEw7Cit9CisKKy8qCisgKiBTdGFydCBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0aGF0IHdpbGwg YmUgdXNlZCBmb3IgdGhlIHNwZWNpZmllZCB4aWQuCisgKgorICogSWYgYSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgaXMgZm91bmQgYnV0IG5vdCBpbiB1c2UgdGhlbiByZS11c2UgaXQsIG90aGVyd2lz ZQorICogc3RhcnQgYSBmcmVzaCBvbmUuIENhY2hlIHRoZSB3b3JrZXIgaW5mb3JtYXRpb24gaW4g UGFyYWxsZWxBcHBseVdvcmtlcnNIYXNoCisgKiBrZXllZCBieSB0aGUgc3BlY2lmaWVkIHhpZC4K KyAqLwordm9pZAorcGFfc3RhcnRfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkKQoreworCWJvb2wJ CWZvdW5kOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyA9IE5VTEw7CisJUGFyYWxs ZWxBcHBseVdvcmtlckVudHJ5ICplbnRyeTsKKworCWlmICghcGFfY2FuX3N0YXJ0KHhpZCkpCisJ CXJldHVybjsKKworCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSBhcHBseSB3b3Jr ZXJzIGhhc2h0YWJsZS4gKi8KKwlpZiAoUGFyYWxsZWxBcHBseVdvcmtlcnNIYXNoID09IE5VTEwp CisJeworCQlIQVNIQ1RMCQljdGw7CisKKwkJTWVtU2V0KCZjdGwsIDAsIHNpemVvZihjdGwpKTsK KwkJY3RsLmtleXNpemUgPSBzaXplb2YoVHJhbnNhY3Rpb25JZCk7CisJCWN0bC5lbnRyeXNpemUg PSBzaXplb2YoUGFyYWxsZWxBcHBseVdvcmtlckVudHJ5KTsKKwkJY3RsLmhjeHQgPSBBcHBseUNv bnRleHQ7CisKKwkJUGFyYWxsZWxBcHBseVdvcmtlcnNIYXNoID0gaGFzaF9jcmVhdGUoImxvZ2lj YWwgYXBwbHkgd29ya2VycyBoYXNoIiwKKwkJCQkJCQkJCQkJICAgMTYsICZjdGwsCisJCQkJCQkJ CQkJCSAgIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NPTlRFWFQpOworCX0KKworCS8q IFRyeSB0byBnZXQgYSBmcmVlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gKi8KKwl3aW5mbyA9IHBh X2dldF9mcmVlX3dvcmtlcigpOworCisJaWYgKHdpbmZvID09IE5VTEwpCisJeworCQkvKiBUcnkg dG8gc3RhcnQgYSBuZXcgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiAqLworCQl3aW5mbyA9IHBhX2lu aXRfYW5kX2xhdW5jaF93b3JrZXIoKTsKKworCQlpZiAod2luZm8gPT0gTlVMTCkKKwkJCXJldHVy bjsKKwl9CisKKwkvKiBDcmVhdGUgZW50cnkgZm9yIHJlcXVlc3RlZCB0cmFuc2FjdGlvbi4gKi8K KwllbnRyeSA9IGhhc2hfc2VhcmNoKFBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaCwgJnhpZCwgSEFT SF9FTlRFUiwgJmZvdW5kKTsKKwlpZiAoZm91bmQpCisJCWVsb2coRVJST1IsICJoYXNoIHRhYmxl IGNvcnJ1cHRlZCIpOworCisJLyogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IGFyZWEuICovCisJ U3BpbkxvY2tBY3F1aXJlKCZ3aW5mby0+c2hhcmVkLT5tdXRleCk7CisJd2luZm8tPnNoYXJlZC0+ eGFjdF9zdGF0ZSA9IFBBUkFMTEVMX1RSQU5TX1VOS05PV047CisJd2luZm8tPnNoYXJlZC0+eGlk ID0geGlkOworCVNwaW5Mb2NrUmVsZWFzZSgmd2luZm8tPnNoYXJlZC0+bXV0ZXgpOworCisJd2lu Zm8tPmluX3VzZSA9IHRydWU7CisJZW50cnktPndpbmZvID0gd2luZm87CisJZW50cnktPnhpZCA9 IHhpZDsKK30KKworLyoKKyAqIEZpbmQgdGhlIGFzc2lnbmVkIHdvcmtlciBmb3IgdGhlIGdpdmVu IHRyYW5zYWN0aW9uLCBpZiBhbnkuCisgKi8KK1BhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoKK3Bh X2ZpbmRfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkKQoreworCWJvb2wJCWZvdW5kOworCVBhcmFs bGVsQXBwbHlXb3JrZXJFbnRyeSAqZW50cnk7CisKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlk KHhpZCkpCisJCXJldHVybiBOVUxMOworCisJaWYgKFBhcmFsbGVsQXBwbHlXb3JrZXJzSGFzaCA9 PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFJldHVybiB0aGUgY2FjaGVkIHBhcmFsbGVs IGFwcGx5IHdvcmtlciBpZiB2YWxpZC4gKi8KKwlpZiAoc3RyZWFtX2FwcGx5X3dvcmtlciAhPSBO VUxMKQorCQlyZXR1cm4gc3RyZWFtX2FwcGx5X3dvcmtlcjsKKworCS8qCisJICogRmluZCBlbnRy eSBmb3IgcmVxdWVzdGVkIHRyYW5zYWN0aW9uLgorCSAqLworCWVudHJ5ID0gaGFzaF9zZWFyY2go UGFyYWxsZWxBcHBseVdvcmtlcnNIYXNoLCAmeGlkLCBIQVNIX0ZJTkQsICZmb3VuZCk7CisJaWYg KGZvdW5kKQorCXsKKwkJQXNzZXJ0KGVudHJ5LT53aW5mby0+aW5fdXNlKTsKKworCQlyZXR1cm4g ZW50cnktPndpbmZvOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogUmVtb3ZlIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZS4gU3RvcCB0 aGUgd29yayBpZgorICogdGhlcmUgYXJlIGVub3VnaCB3b3JrZXJzIGluIHRoZSBwb29sLgorICoK KyAqIElmIHRoZSB3b3JrZXIgaXMgc3RvcHBlZCwgdGhlIHdvcmtlciBpbmZvcm1hdGlvbiB3aWxs IGJlIHJlbW92ZWQgZnJvbSB0aGUKKyAqIFBhcmFsbGVsQXBwbHlXb3JrZXJzTGlzdCBhbmQgdGhl IG1lbW9yeSBvZiB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSBmcmVlZC4KKyAqCisgKiBSZXR1cm4g dHJ1ZSBpZiB0aGUgd29ya2VyIGlzIHN0b3BwZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBE byBub3RoaW5nIGlmIHRoZSB3b3JrZXIgaXMgbm90IGJlaW5nIHVzZWQuCisgKgorICogRm9yIG1v cmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdvcmtlciBwb29sLCBzZWUgY29tbWVudHMgYXRvcCB3 b3JrZXIuYy4KKyAqLworYm9vbAorcGFfZnJlZV93b3JrZXIoUGFyYWxsZWxBcHBseVdvcmtlcklu Zm8gKndpbmZvLCBUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwlpbnQJCQluYXBwbHl3b3JrZXJzOwor CisJQXNzZXJ0KCFhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSk7CisKKwlpZiAoIXdpbmZvLT5p bl91c2UpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogRG9uJ3QgZnJlZSB0aGUgd29ya2Vy IGlmIHRoZSB0cmFuc2FjdGlvbiBpbiB0aGUgd29ya2VyIGlzIHN0aWxsIGluCisJICogcHJvZ3Jl c3MuIFRoaXMgY291bGQgaGFwcGVuIGFzIHdlIGRvbid0IHdhaXQgZm9yIHRyYW5zYWN0aW9uIHJv bGxiYWNrCisJICogdG8gZmluaXNoLgorCSAqLworCWlmIChwYV9nZXRfeGFjdF9zdGF0ZSh3aW5m by0+c2hhcmVkKSAhPSBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCkKKwkJcmV0dXJuIGZhbHNlOwor CisJaWYgKCFoYXNoX3NlYXJjaChQYXJhbGxlbEFwcGx5V29ya2Vyc0hhc2gsICZ4aWQsIEhBU0hf UkVNT1ZFLCBOVUxMKSkKKwkJZWxvZyhFUlJPUiwgImhhc2ggdGFibGUgY29ycnVwdGVkIik7CisK KwlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOworCW5hcHBs eXdvcmtlcnMgPSBsb2dpY2FscmVwX3BhcmFsbGVsX2FwcGx5X3dvcmtlcl9jb3VudChNeUxvZ2lj YWxSZXBXb3JrZXItPnN1YmlkKTsKKwlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2Nr KTsKKworCS8qIEFyZSB0aGVyZSBlbm91Z2ggd29ya2VycyBpbiB0aGUgcG9vbD8gKi8KKwlpZiAo bmFwcGx5d29ya2VycyA+IChtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vic2NyaXB0 aW9uIC8gMikpCisJeworCQlpbnQJCQlzbG90X25vOworCQl1aW50MTYJCWdlbmVyYXRpb247CisK KwkJLyoKKwkJICogRGV0YWNoIHRoZSBlcnJvciBxdWV1ZSBiZWZvcmUgdGVybWluYXRpbmcgdGhl IHBhcmFsbGVsIGFwcGx5IHdvcmtlcgorCQkgKiB0byBwcmV2ZW50IHRoZSBsZWFkZXIgYXBwbHkg d29ya2VyIGZyb20gcmVjZWl2aW5nIHRoZSB3b3JrZXIKKwkJICogdGVybWluYXRpb24gbWVzc2Fn ZSB3aGljaCB3aWxsIGNhdXNlIHRoZSBsZWFkZXIgdG8gZXhpdC4KKwkJICovCisJCXNobV9tcV9k ZXRhY2god2luZm8tPmVycm9yX21xX2hhbmRsZSk7CisJCXdpbmZvLT5lcnJvcl9tcV9oYW5kbGUg PSBOVUxMOworCisJCVNwaW5Mb2NrQWNxdWlyZSgmd2luZm8tPnNoYXJlZC0+bXV0ZXgpOworCQlz bG90X25vID0gd2luZm8tPnNoYXJlZC0+bG9naWNhbHJlcF93b3JrZXJfc2xvdF9ubzsKKwkJZ2Vu ZXJhdGlvbiA9IHdpbmZvLT5zaGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX2dlbmVyYXRpb247CisJ CVNwaW5Mb2NrUmVsZWFzZSgmd2luZm8tPnNoYXJlZC0+bXV0ZXgpOworCisJCWxvZ2ljYWxyZXBf d29ya2VyX3N0b3BfYnlfc2xvdChzbG90X25vLCBnZW5lcmF0aW9uKTsKKworCQlQYXJhbGxlbEFw cGx5V29ya2Vyc0xpc3QgPSBsaXN0X2RlbGV0ZV9wdHIoUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0 LAorCQkJCQkJCQkJCQkJICAgd2luZm8pOworCisJCXBhX2ZyZWVfd29ya2VyX2luZm8od2luZm8p OworCisJCXJldHVybiB0cnVlOworCX0KKworCXdpbmZvLT5pbl91c2UgPSBmYWxzZTsKKworCXJl dHVybiBmYWxzZTsKK30KKworLyogRnJlZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGluZm9y bWF0aW9uLiAqLworc3RhdGljIHZvaWQKK3BhX2ZyZWVfd29ya2VyX2luZm8oUGFyYWxsZWxBcHBs eVdvcmtlckluZm8gKndpbmZvKQoreworCUFzc2VydCh3aW5mbyk7CisKKwlpZiAod2luZm8tPm1x X2hhbmRsZSAhPSBOVUxMKQorCQlzaG1fbXFfZGV0YWNoKHdpbmZvLT5tcV9oYW5kbGUpOworCisJ aWYgKHdpbmZvLT5lcnJvcl9tcV9oYW5kbGUgIT0gTlVMTCkKKwkJc2htX21xX2RldGFjaCh3aW5m by0+ZXJyb3JfbXFfaGFuZGxlKTsKKworCWlmICh3aW5mby0+ZHNtX3NlZyAhPSBOVUxMKQorCQlk c21fZGV0YWNoKHdpbmZvLT5kc21fc2VnKTsKKworCXBmcmVlKHdpbmZvKTsKK30KKworLyogUGFy YWxsZWwgYXBwbHkgd29ya2VyIG1haW4gbG9vcC4gKi8KK3N0YXRpYyB2b2lkCitMb2dpY2FsUGFy YWxsZWxBcHBseUxvb3Aoc2htX21xX2hhbmRsZSAqbXFoKQoreworCXNobV9tcV9yZXN1bHQgc2ht cV9yZXM7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisJTWVtb3J5Q29udGV4 dCBvbGRjeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCS8qCisJICogSW5pdCB0aGUgQXBw bHlNZXNzYWdlQ29udGV4dCB3aGljaCB3ZSBjbGVhbiB1cCBhZnRlciBlYWNoIHJlcGxpY2F0aW9u CisJICogcHJvdG9jb2wgbWVzc2FnZS4KKwkgKi8KKwlBcHBseU1lc3NhZ2VDb250ZXh0ID0gQWxs b2NTZXRDb250ZXh0Q3JlYXRlKEFwcGx5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSJBcHBseU1lc3Nh Z2VDb250ZXh0IiwKKwkJCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyoK KwkgKiBQdXNoIGFwcGx5IGVycm9yIGNvbnRleHQgY2FsbGJhY2suIEZpZWxkcyB3aWxsIGJlIGZp bGxlZCB3aGlsZSBhcHBseWluZworCSAqIGEgY2hhbmdlLgorCSAqLworCWVycmNhbGxiYWNrLmNh bGxiYWNrID0gYXBwbHlfZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBl cnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7 CisKKwlmb3IgKDs7KQorCXsKKwkJdm9pZAkgICAqZGF0YTsKKwkJU2l6ZQkJbGVuOworCisJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogRW5zdXJlIHdlIGFyZSByZWFkaW5nIHRoZSBk YXRhIGludG8gb3VyIG1lbW9yeSBjb250ZXh0LiAqLworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8o QXBwbHlNZXNzYWdlQ29udGV4dCk7CisKKwkJc2htcV9yZXMgPSBzaG1fbXFfcmVjZWl2ZShtcWgs ICZsZW4sICZkYXRhLCB0cnVlKTsKKworCQlpZiAoc2htcV9yZXMgPT0gU0hNX01RX1NVQ0NFU1Mp CisJCXsKKwkJCVN0cmluZ0luZm9EYXRhIHM7CisJCQlpbnQJCQljOworCisJCQlpZiAobGVuID09 IDApCisJCQkJYnJlYWs7CisKKwkJCXMuY3Vyc29yID0gMDsKKwkJCXMubWF4bGVuID0gLTE7CisJ CQlzLmRhdGEgPSAoY2hhciAqKSBkYXRhOworCQkJcy5sZW4gPSBsZW47CisKKwkJCS8qCisJCQkg KiBUaGUgZmlyc3QgYnl0ZSBvZiBtZXNzYWdlcyBzZW50IGZyb20gbGVhZGVyIGFwcGx5IHdvcmtl ciB0bworCQkJICogcGFyYWxsZWwgYXBwbHkgd29ya2VycyBjYW4gb25seSBiZSAndycuCisJCQkg Ki8KKwkJCWMgPSBwcV9nZXRtc2dieXRlKCZzKTsKKwkJCWlmIChjICE9ICd3JykKKwkJCQllbG9n KEVSUk9SLCAidW5leHBlY3RlZCBtZXNzYWdlIFwiJWNcIiIsIGMpOworCisJCQkvKgorCQkJICog SWdub3JlIHN0YXRpc3RpY3MgZmllbGRzIHRoYXQgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgdGhlIGxl YWRlcgorCQkJICogYXBwbHkgd29ya2VyLgorCQkJICovCisJCQlzLmN1cnNvciArPSBTSVpFX1NU QVRTX01FU1NBR0U7CisKKwkJCWFwcGx5X2Rpc3BhdGNoKCZzKTsKKworCQkJTWVtb3J5Q29udGV4 dFJlc2V0KEFwcGx5TWVzc2FnZUNvbnRleHQpOworCQl9CisJCWVsc2UgaWYgKHNobXFfcmVzID09 IFNITV9NUV9XT1VMRF9CTE9DSykKKwkJeworCQkJaW50CQkJcmM7CisKKwkJCWlmICghaW5fc3Ry ZWFtZWRfdHJhbnNhY3Rpb24pCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBkaWRuJ3QgZ2V0 IGFueSB0cmFuc2FjdGlvbnMgZm9yIGEgd2hpbGUgdGhlcmUgbWlnaHQKKwkJCQkgKiBiZSB1bmNv bnN1bWVkIGludmFsaWRhdGlvbiBtZXNzYWdlcyBpbiB0aGUgcXVldWUsIGNvbnN1bWUKKwkJCQkg KiB0aGVtIG5vdy4KKwkJCQkgKi8KKwkJCQlBY2NlcHRJbnZhbGlkYXRpb25NZXNzYWdlcygpOwor CQkJCW1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24oKTsKKwkJCX0KKworCQkJTWVtb3J5Q29udGV4 dFJlc2V0KEFwcGx5TWVzc2FnZUNvbnRleHQpOworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN4dCk7CisKKwkJCS8qIFdhaXQgZm9yIG1vcmUgd29yay4gKi8KKwkJCXJjID0gV2FpdExhdGNo KE15TGF0Y2gsCisJCQkJCQkgICBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9P Tl9QTV9ERUFUSCwKKwkJCQkJCSAgIDEwMDBMLAorCQkJCQkJICAgV0FJVF9FVkVOVF9MT0dJQ0FM X1BBUkFMTEVMX0FQUExZX01BSU4pOworCisJCQlpZiAocmMgJiBXTF9MQVRDSF9TRVQpCisJCQl7 CisJCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwor CQkJfQorCisJCQlpZiAoQ29uZmlnUmVsb2FkUGVuZGluZykKKwkJCXsKKwkJCQlDb25maWdSZWxv YWRQZW5kaW5nID0gZmFsc2U7CisJCQkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7CisJ CQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlBc3NlcnQoc2htcV9yZXMgPT0gU0hNX01RX0RFVEFD SEVEKTsKKworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1Rf Tk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImxvc3QgY29ubmVjdGlv biB0byB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciIpKSk7CisJCX0KKwl9CisKKwkvKiBQb3AgdGhl IGVycm9yIGNvbnRleHQgc3RhY2suICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxi YWNrLnByZXZpb3VzOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisKKy8q CisgKiBNYWtlIHN1cmUgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgdHJpZXMgdG8gcmVhZCBmcm9t IG91ciBlcnJvciBxdWV1ZSBvbmUgbW9yZQorICogdGltZS4gVGhpcyBndWFyZHMgYWdhaW5zdCB0 aGUgY2FzZSB3aGVyZSB3ZSBleGl0IHVuY2xlYW5seSB3aXRob3V0IHNlbmRpbmcKKyAqIGFuIEVy cm9yUmVzcG9uc2UsIGZvciBleGFtcGxlIGJlY2F1c2Ugc29tZSBjb2RlIGNhbGxzIHByb2NfZXhp dCBkaXJlY3RseS4KKyAqLworc3RhdGljIHZvaWQKK3BhX3NodXRkb3duKGludCBjb2RlLCBEYXR1 bSBhcmcpCit7CisJU2VuZFByb2NTaWduYWwoTXlMb2dpY2FsUmVwV29ya2VyLT5hcHBseV9sZWFk ZXJfcGlkLAorCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FHRSwKKwkJCQkgICBJ bnZhbGlkQmFja2VuZElkKTsKKworCWRzbV9kZXRhY2goKGRzbV9zZWdtZW50ICopIERhdHVtR2V0 UG9pbnRlcihhcmcpKTsKK30KKworLyoKKyAqIFBhcmFsbGVsIGFwcGx5IHdvcmtlciBlbnRyeSBw b2ludC4KKyAqLwordm9pZAorUGFyYWxsZWxBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcp Cit7CisJUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqc2hhcmVkOworCWRzbV9oYW5kbGUJaGFu ZGxlOworCWRzbV9zZWdtZW50ICpzZWc7CisJc2htX3RvYyAgICAqdG9jOworCXNobV9tcQkgICAq bXE7CisJc2htX21xX2hhbmRsZSAqbXFoOworCXNobV9tcV9oYW5kbGUgKmVycm9yX21xaDsKKwlS ZXBPcmlnaW5JZCBvcmlnaW5pZDsKKwlpbnQJCQl3b3JrZXJfc2xvdCA9IERhdHVtR2V0SW50MzIo bWFpbl9hcmcpOworCWNoYXIJCW9yaWdpbm5hbWVbTkFNRURBVEFMRU5dOworCisJLyogU2V0dXAg c2lnbmFsIGhhbmRsaW5nLiAqLworCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNv bmZpZ1JlbG9hZCk7CisJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKKwlCYWNrZ3JvdW5kV29ya2Vy VW5ibG9ja1NpZ25hbHMoKTsKKworCS8qCisJICogQXR0YWNoIHRvIHRoZSBkeW5hbWljIHNoYXJl ZCBtZW1vcnkgc2VnbWVudCBmb3IgdGhlIHBhcmFsbGVsIGFwcGx5LCBhbmQKKwkgKiBmaW5kIGl0 cyB0YWJsZSBvZiBjb250ZW50cy4KKwkgKgorCSAqIExpa2UgcGFyYWxsZWwgcXVlcnksIHdlIGRv bid0IG5lZWQgcmVzb3VyY2Ugb3duZXIgYnkgdGhpcyB0aW1lLiBTZWUKKwkgKiBQYXJhbGxlbFdv cmtlck1haW4uCisJICovCisJbWVtY3B5KCZoYW5kbGUsIE15Qmd3b3JrZXJFbnRyeS0+Ymd3X2V4 dHJhLCBzaXplb2YoZHNtX2hhbmRsZSkpOworCXNlZyA9IGRzbV9hdHRhY2goaGFuZGxlKTsKKwlp ZiAoc2VnID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9P QkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygidW5hYmxlIHRv IG1hcCBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIpKSk7CisKKwl0b2MgPSBzaG1fdG9j X2F0dGFjaChQR19MT0dJQ0FMX0FQUExZX1NITV9NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVzcyhz ZWcpKTsKKwlpZiAodG9jID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygi YmFkIG1hZ2ljIG51bWJlciBpbiBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIpKSk7CisK KwliZWZvcmVfc2htZW1fZXhpdChwYV9zaHV0ZG93biwgUG9pbnRlckdldERhdHVtKHNlZykpOwor CisJLyogTG9vayB1cCB0aGUgc2hhcmVkIGluZm9ybWF0aW9uLiAqLworCXNoYXJlZCA9IHNobV90 b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZX1NIQVJFRCwgZmFsc2UpOworCU15UGFy YWxsZWxTaGFyZWQgPSBzaGFyZWQ7CisKKwkvKgorCSAqIEF0dGFjaCB0byB0aGUgbWVzc2FnZSBx dWV1ZS4KKwkgKi8KKwltcSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZ X01RLCBmYWxzZSk7CisJc2htX21xX3NldF9yZWNlaXZlcihtcSwgTXlQcm9jKTsKKwltcWggPSBz aG1fbXFfYXR0YWNoKG1xLCBzZWcsIE5VTEwpOworCisJLyoKKwkgKiBQcmltYXJ5IGluaXRpYWxp emF0aW9uIGlzIGNvbXBsZXRlLiBOb3csIHdlIGNhbiBhdHRhY2ggdG8gb3VyIHNsb3QuCisJICog VGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBkb2VzIG5vdCB3 cml0ZSBkYXRhIHRvCisJICogdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHF1ZXVlLgorCSAqLwor CWxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaCh3b3JrZXJfc2xvdCk7CisKKwlTcGluTG9ja0FjcXVp cmUoJk15UGFyYWxsZWxTaGFyZWQtPm11dGV4KTsKKwlNeVBhcmFsbGVsU2hhcmVkLT5sb2dpY2Fs cmVwX3dvcmtlcl9nZW5lcmF0aW9uID0gTXlMb2dpY2FsUmVwV29ya2VyLT5nZW5lcmF0aW9uOwor CU15UGFyYWxsZWxTaGFyZWQtPmxvZ2ljYWxyZXBfd29ya2VyX3Nsb3Rfbm8gPSB3b3JrZXJfc2xv dDsKKwlTcGluTG9ja1JlbGVhc2UoJk15UGFyYWxsZWxTaGFyZWQtPm11dGV4KTsKKworCS8qCisJ ICogQXR0YWNoIHRvIHRoZSBlcnJvciBxdWV1ZS4KKwkgKi8KKwltcSA9IHNobV90b2NfbG9va3Vw KHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZX0VSUk9SX1FVRVVFLCBmYWxzZSk7CisJc2htX21xX3Nl dF9zZW5kZXIobXEsIE15UHJvYyk7CisJZXJyb3JfbXFoID0gc2htX21xX2F0dGFjaChtcSwgc2Vn LCBOVUxMKTsKKworCXBxX3JlZGlyZWN0X3RvX3NobV9tcShzZWcsIGVycm9yX21xaCk7CisJcHFf c2V0X3BhcmFsbGVsX2xlYWRlcihNeUxvZ2ljYWxSZXBXb3JrZXItPmFwcGx5X2xlYWRlcl9waWQs CisJCQkJCQkgICBJbnZhbGlkQmFja2VuZElkKTsKKworCU15TG9naWNhbFJlcFdvcmtlci0+bGFz dF9zZW5kX3RpbWUgPSBNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3RfcmVjdl90aW1lID0KKwkJTXlM b2dpY2FsUmVwV29ya2VyLT5yZXBseV90aW1lID0gMDsKKworCUluaXRpYWxpemVBcHBseVdvcmtl cigpOworCisJLyogU2V0dXAgcmVwbGljYXRpb24gb3JpZ2luIHRyYWNraW5nLiAqLworCVN0YXJ0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJUmVwbGljYXRpb25PcmlnaW5OYW1lRm9yTG9naWNhbFJl cChNeVN1YnNjcmlwdGlvbi0+b2lkLCBJbnZhbGlkT2lkLAorCQkJCQkJCQkJICAgb3JpZ2lubmFt ZSwgc2l6ZW9mKG9yaWdpbm5hbWUpKTsKKwlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fYnlfbmFtZShv cmlnaW5uYW1lLCB0cnVlKTsKKwlpZiAoIU9pZElzVmFsaWQob3JpZ2luaWQpKQorCQlvcmlnaW5p ZCA9IHJlcGxvcmlnaW5fY3JlYXRlKG9yaWdpbm5hbWUpOworCisJLyoKKwkgKiBUaGUgcGFyYWxs ZWwgYXBwbHkgd29ya2VyIGRvZXNuJ3QgbmVlZCB0byBtb25vcG9saXplIHRoaXMgcmVwbGljYXRp b24KKwkgKiBvcmlnaW4gd2hpY2ggd2FzIGFscmVhZHkgYWNxdWlyZWQgYnkgaXRzIGxlYWRlciBw cm9jZXNzLgorCSAqLworCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCwgTXlMb2dp Y2FsUmVwV29ya2VyLT5hcHBseV9sZWFkZXJfcGlkKTsKKwlyZXBsb3JpZ2luX3Nlc3Npb25fb3Jp Z2luID0gb3JpZ2luaWQ7CisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAq IFNldHVwIGNhbGxiYWNrIGZvciBzeXNjYWNoZSBzbyB0aGF0IHdlIGtub3cgd2hlbiBzb21ldGhp bmcgY2hhbmdlcyBpbgorCSAqIHRoZSBzdWJzY3JpcHRpb24gcmVsYXRpb24gc3RhdGUuCisJICov CisJQ2FjaGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soU1VCU0NSSVBUSU9OUkVMTUFQLAorCQkJ CQkJCQkgIGludmFsaWRhdGVfc3luY2luZ190YWJsZV9zdGF0ZXMsCisJCQkJCQkJCSAgKERhdHVt KSAwKTsKKworCS8qCisJICogQWxsb2NhdGUgdGhlIG9yaWdpbiBuYW1lIGluIGEgbG9uZy1saXZl ZCBjb250ZXh0IGZvciBlcnJvciBjb250ZXh0CisJICogbWVzc2FnZS4KKwkgKi8KKwlhcHBseV9l cnJvcl9jYWxsYmFja19hcmcub3JpZ2luX25hbWUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKEFwcGx5 Q29udGV4dCwKKwkJCQkJCQkJCQkJCQkJCSAgIG9yaWdpbm5hbWUpOworCisJTG9naWNhbFBhcmFs bGVsQXBwbHlMb29wKG1xaCk7CisKKwlwcm9jX2V4aXQoMCk7Cit9CisKKy8qCisgKiBIYW5kbGUg cmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgaW5kaWNhdGluZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBtZXNzYWdlLgorICoKKyAqIE5vdGU6IHRoaXMgaXMgY2FsbGVkIHdpdGhpbiBhIHNpZ25hbCBo YW5kbGVyISAgQWxsIHdlIGNhbiBkbyBpcyBzZXQgYSBmbGFnCisgKiB0aGF0IHdpbGwgY2F1c2Ug dGhlIG5leHQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSB0byBpbnZva2UKKyAqIEhhbmRsZVBhcmFs bGVsQXBwbHlNZXNzYWdlcygpLgorICovCit2b2lkCitIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2Fn ZUludGVycnVwdCh2b2lkKQoreworCUludGVycnVwdFBlbmRpbmcgPSB0cnVlOworCVBhcmFsbGVs QXBwbHlNZXNzYWdlUGVuZGluZyA9IHRydWU7CisJU2V0TGF0Y2goTXlMYXRjaCk7Cit9CisKKy8q CisgKiBIYW5kbGUgYSBzaW5nbGUgcHJvdG9jb2wgbWVzc2FnZSByZWNlaXZlZCBmcm9tIGEgc2lu Z2xlIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXIuCisgKi8KK3N0YXRpYyB2b2lkCitIYW5kbGVQ YXJhbGxlbEFwcGx5TWVzc2FnZShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sIFN0cmlu Z0luZm8gbXNnKQoreworCWNoYXIJCW1zZ3R5cGU7CisKKwltc2d0eXBlID0gcHFfZ2V0bXNnYnl0 ZShtc2cpOworCisJc3dpdGNoIChtc2d0eXBlKQorCXsKKwkJY2FzZSAnRSc6CQkJCS8qIEVycm9y UmVzcG9uc2UgKi8KKwkJCXsKKwkJCQlFcnJvckRhdGEJZWRhdGE7CisKKwkJCQkvKiBQYXJzZSBF cnJvclJlc3BvbnNlLiAqLworCQkJCXBxX3BhcnNlX2Vycm9ybm90aWNlKG1zZywgJmVkYXRhKTsK KworCQkJCS8qIERlYXRoIG9mIGEgd29ya2VyIGlzbid0IGVub3VnaCBqdXN0aWZpY2F0aW9uIGZv ciBzdWljaWRlLiAqLworCQkJCWVkYXRhLmVsZXZlbCA9IE1pbihlZGF0YS5lbGV2ZWwsIEVSUk9S KTsKKworCQkJCS8qCisJCQkJICogSWYgZGVzaXJlZCwgYWRkIGEgY29udGV4dCBsaW5lIHRvIHNo b3cgdGhhdCB0aGlzIGlzIGEKKwkJCQkgKiBtZXNzYWdlIHByb3BhZ2F0ZWQgZnJvbSBhIHBhcmFs bGVsIGFwcGx5IHdvcmtlci4gT3RoZXJ3aXNlLAorCQkJCSAqIGl0IGNhbiBzb21ldGltZXMgYmUg Y29uZnVzaW5nIHRvIHVuZGVyc3RhbmQgd2hhdCBhY3R1YWxseQorCQkJCSAqIGhhcHBlbmVkLgor CQkJCSAqLworCQkJCWlmIChlZGF0YS5jb250ZXh0KQorCQkJCQllZGF0YS5jb250ZXh0ID0gcHNw cmludGYoIiVzXG4lcyIsIGVkYXRhLmNvbnRleHQsCisJCQkJCQkJCQkJCSBfKCJwYXJhbGxlbCBh cHBseSB3b3JrZXIiKSk7CisJCQkJZWxzZQorCQkJCQllZGF0YS5jb250ZXh0ID0gcHN0cmR1cChf KCJwYXJhbGxlbCBhcHBseSB3b3JrZXIiKSk7CisKKwkJCQkvKgorCQkJCSAqIENvbnRleHQgYmV5 b25kIHRoYXQgc2hvdWxkIHVzZSB0aGUgZXJyb3IgY29udGV4dCBjYWxsYmFja3MKKwkJCQkgKiB0 aGF0IHdlcmUgaW4gZWZmZWN0IGluIExvZ2ljYWxSZXBBcHBseUxvb3AoKS4KKwkJCQkgKi8KKwkJ CQllcnJvcl9jb250ZXh0X3N0YWNrID0gYXBwbHlfZXJyb3JfY29udGV4dF9zdGFjazsKKworCQkJ CVRocm93RXJyb3JEYXRhKCZlZGF0YSk7CisKKwkJCQkvKiBTaG91bGQgbm90IHJlYWNoIGhlcmUg YWZ0ZXIgcmV0aHJvd2luZyBhbiBlcnJvci4gKi8KKwkJCQlBc3NlcnQoZmFsc2UpOworCQkJfQor CisJCQkvKgorCQkJICogRG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBhYm91dCBOb3RpY2VSZXNw b25zZSBhbmQKKwkJCSAqIE5vdGlmeVJlc3BvbnNlIGFzIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9u IHdvcmtlciBkb2Vzbid0IG5lZWQKKwkJCSAqIHRvIHNlbmQgbWVzc2FnZXMgdG8gdGhlIGNsaWVu dC4KKwkJCSAqLworCQljYXNlICdOJzoKKwkJY2FzZSAnQSc6CisJCQlicmVhazsKKwkJZGVmYXVs dDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbWVzc2FnZSB0eXBlIHJlY2VpdmVkIGZy b20gcGFyYWxsZWwgYXBwbHkgd29ya2VyOiAlYyAobWVzc2FnZSBsZW5ndGggJWQgYnl0ZXMpIiwK KwkJCQkgbXNndHlwZSwgbXNnLT5sZW4pOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBhbnkgcXVl dWVkIHByb3RvY29sIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2Vy cy4KKyAqLwordm9pZAorSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VzKHZvaWQpCit7CisJTGlz dENlbGwgICAqbGM7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJc3RhdGljIE1lbW9y eUNvbnRleHQgaHBhbV9jb250ZXh0ID0gTlVMTDsKKworCS8qCisJICogVGhpcyBpcyBpbnZva2Vk IGZyb20gUHJvY2Vzc0ludGVycnVwdHMoKSwgYW5kIHNpbmNlIHNvbWUgb2YgdGhlCisJICogZnVu Y3Rpb25zIGl0IGNhbGxzIGNvbnRhaW4gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwgdGhlcmUgaXMg YSBwb3RlbnRpYWwKKwkgKiBmb3IgcmVjdXJzaXZlIGNhbGxzIGlmIG1vcmUgc2lnbmFscyBhcmUg cmVjZWl2ZWQgd2hpbGUgdGhpcyBydW5zLiAgSXQncworCSAqIHVuY2xlYXIgdGhhdCByZWN1cnNp dmUgZW50cnkgd291bGQgYmUgc2FmZSwgYW5kIGl0IGRvZXNuJ3Qgc2VlbSB1c2VmdWwKKwkgKiBl dmVuIGlmIGl0IGlzIHNhZmUsIHNvIGxldCdzIGJsb2NrIGludGVycnVwdHMgdW50aWwgZG9uZS4K KwkgKi8KKwlIT0xEX0lOVEVSUlVQVFMoKTsKKworCS8qCisJICogTW9yZW92ZXIsIEN1cnJlbnRN ZW1vcnlDb250ZXh0IG1pZ2h0IGJlIHBvaW50aW5nIGFsbW9zdCBhbnl3aGVyZS4gIFdlCisJICog ZG9uJ3Qgd2FudCB0byByaXNrIGxlYWtpbmcgZGF0YSBpbnRvIGxvbmctbGl2ZWQgY29udGV4dHMs IHNvIGxldCdzIGRvCisJICogb3VyIHdvcmsgaGVyZSBpbiBhIHByaXZhdGUgY29udGV4dCB0aGF0 IHdlIGNhbiByZXNldCBvbiBlYWNoIHVzZS4KKwkgKi8KKwlpZiAoaHBhbV9jb250ZXh0ID09IE5V TEwpCS8qIGZpcnN0IHRpbWUgdGhyb3VnaD8gKi8KKwkJaHBhbV9jb250ZXh0ID0gQWxsb2NTZXRD b250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCSAiSGFuZGxlUGFyYWxs ZWxBcHBseU1lc3NhZ2VzIiwKKwkJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOwor CWVsc2UKKwkJTWVtb3J5Q29udGV4dFJlc2V0KGhwYW1fY29udGV4dCk7CisKKwlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGhwYW1fY29udGV4dCk7CisKKwlQYXJhbGxlbEFwcGx5 TWVzc2FnZVBlbmRpbmcgPSBmYWxzZTsKKworCWZvcmVhY2gobGMsIFBhcmFsbGVsQXBwbHlXb3Jr ZXJzTGlzdCkKKwl7CisJCXNobV9tcV9yZXN1bHQgcmVzOworCQlTaXplCQluYnl0ZXM7CisJCXZv aWQJICAgKmRhdGE7CisJCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbyA9IChQYXJhbGxl bEFwcGx5V29ya2VySW5mbyAqKSBsZmlyc3QobGMpOworCisJCWlmICh3aW5mby0+ZXJyb3JfbXFf aGFuZGxlID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlyZXMgPSBzaG1fbXFfcmVjZWl2ZSh3 aW5mby0+ZXJyb3JfbXFfaGFuZGxlLCAmbmJ5dGVzLCAmZGF0YSwgdHJ1ZSk7CisKKwkJaWYgKHJl cyA9PSBTSE1fTVFfV09VTERfQkxPQ0spCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAocmVzID09 IFNITV9NUV9TVUNDRVNTKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBtc2c7CisKKwkJCWluaXRT dHJpbmdJbmZvKCZtc2cpOworCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbygmbXNnLCBkYXRhLCBu Ynl0ZXMpOworCQkJSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2Uod2luZm8sICZtc2cpOworCQkJ cGZyZWUobXNnLmRhdGEpOworCQl9CisJCWVsc2UKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkg ZXJybXNnKCJsb3N0IGNvbm5lY3Rpb24gdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIpKSk7 CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJLyogTWlnaHQg YXMgd2VsbCBjbGVhciB0aGUgY29udGV4dCBvbiBvdXIgd2F5IG91dCAqLworCU1lbW9yeUNvbnRl eHRSZXNldChocGFtX2NvbnRleHQpOworCisJUkVTVU1FX0lOVEVSUlVQVFMoKTsKK30KKworLyoK KyAqIFNldCB1cCBhIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50LgorICoKKyAqIFdlIHNl dCB1cCBhIGNvbnRyb2wgcmVnaW9uIHRoYXQgY29udGFpbnMgYSBmaXhlZC1zaXplIHdvcmtlciBp bmZvCisgKiAoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCksIGEgbWVzc2FnZSBxdWV1ZSwgYW5k IGFuIGVycm9yIHF1ZXVlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBv biBmYWlsdXJlLgorICovCitzdGF0aWMgYm9vbAorcGFfc2V0dXBfZHNtKFBhcmFsbGVsQXBwbHlX b3JrZXJJbmZvICp3aW5mbykKK3sKKwlzaG1fdG9jX2VzdGltYXRvciBlOworCVNpemUJCXNlZ3Np emU7CisJZHNtX3NlZ21lbnQgKnNlZzsKKwlzaG1fdG9jICAgICp0b2M7CisJUGFyYWxsZWxBcHBs eVdvcmtlclNoYXJlZCAqc2hhcmVkOworCXNobV9tcQkgICAqbXE7CisJU2l6ZQkJcXVldWVfc2l6 ZSA9IERTTV9RVUVVRV9TSVpFOworCVNpemUJCWVycm9yX3F1ZXVlX3NpemUgPSBEU01fRVJST1Jf UVVFVUVfU0laRTsKKworCS8qCisJICogRXN0aW1hdGUgaG93IG11Y2ggc2hhcmVkIG1lbW9yeSB3 ZSBuZWVkLgorCSAqCisJICogQmVjYXVzZSB0aGUgVE9DIG1hY2hpbmVyeSBtYXkgY2hvb3NlIHRv IGluc2VydCBwYWRkaW5nIG9mIG9kZGx5LXNpemVkCisJICogcmVxdWVzdHMsIHdlIG11c3QgZXN0 aW1hdGUgZWFjaCBjaHVuayBzZXBhcmF0ZWx5LgorCSAqCisJICogV2UgbmVlZCBvbmUga2V5IHRv IHJlZ2lzdGVyIHRoZSBsb2NhdGlvbiBvZiB0aGUgaGVhZGVyLCBhbmQgdHdvIG90aGVyCisJICog a2V5cyB0byB0cmFjayB0aGUgbG9jYXRpb25zIG9mIHRoZSBtZXNzYWdlIHF1ZXVlIGFuZCB0aGUg ZXJyb3IgbWVzc2FnZQorCSAqIHF1ZXVlLgorCSAqLworCXNobV90b2NfaW5pdGlhbGl6ZV9lc3Rp bWF0b3IoJmUpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJmUsIHNpemVvZihQYXJhbGxlbEFw cGx5V29ya2VyU2hhcmVkKSk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmZSwgcXVldWVfc2l6 ZSk7CisJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmZSwgZXJyb3JfcXVldWVfc2l6ZSk7CisKKwlz aG1fdG9jX2VzdGltYXRlX2tleXMoJmUsIDMpOworCXNlZ3NpemUgPSBzaG1fdG9jX2VzdGltYXRl KCZlKTsKKworCS8qIENyZWF0ZSB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGFuZCBlc3RhYmxp c2ggYSB0YWJsZSBvZiBjb250ZW50cy4gKi8KKwlzZWcgPSBkc21fY3JlYXRlKHNobV90b2NfZXN0 aW1hdGUoJmUpLCAwKTsKKwlpZiAoc2VnID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCXRv YyA9IHNobV90b2NfY3JlYXRlKFBHX0xPR0lDQUxfQVBQTFlfU0hNX01BR0lDLCBkc21fc2VnbWVu dF9hZGRyZXNzKHNlZyksCisJCQkJCQkgc2Vnc2l6ZSk7CisKKwkvKiBTZXQgdXAgdGhlIGhlYWRl ciByZWdpb24uICovCisJc2hhcmVkID0gc2htX3RvY19hbGxvY2F0ZSh0b2MsIHNpemVvZihQYXJh bGxlbEFwcGx5V29ya2VyU2hhcmVkKSk7CisJU3BpbkxvY2tJbml0KCZzaGFyZWQtPm11dGV4KTsK KworCXNoYXJlZC0+eGFjdF9zdGF0ZSA9IFBBUkFMTEVMX1RSQU5TX1VOS05PV047CisJcGdfYXRv bWljX2luaXRfdTMyKCYoc2hhcmVkLT5wZW5kaW5nX21lc3NhZ2VfY291bnQpLCAwKTsKKworCXNo bV90b2NfaW5zZXJ0KHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZX1NIQVJFRCwgc2hhcmVkKTsKKwor CS8qIFNldCB1cCBtZXNzYWdlIHF1ZXVlIGZvciB0aGUgd29ya2VyLiAqLworCW1xID0gc2htX21x X2NyZWF0ZShzaG1fdG9jX2FsbG9jYXRlKHRvYywgcXVldWVfc2l6ZSksIHF1ZXVlX3NpemUpOwor CXNobV90b2NfaW5zZXJ0KHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZX01RLCBtcSk7CisJc2htX21x X3NldF9zZW5kZXIobXEsIE15UHJvYyk7CisKKwkvKiBBdHRhY2ggdGhlIHF1ZXVlLiAqLworCXdp bmZvLT5tcV9oYW5kbGUgPSBzaG1fbXFfYXR0YWNoKG1xLCBzZWcsIE5VTEwpOworCisJLyogU2V0 IHVwIGVycm9yIHF1ZXVlIGZvciB0aGUgd29ya2VyLiAqLworCW1xID0gc2htX21xX2NyZWF0ZShz aG1fdG9jX2FsbG9jYXRlKHRvYywgZXJyb3JfcXVldWVfc2l6ZSksCisJCQkJCSAgIGVycm9yX3F1 ZXVlX3NpemUpOworCXNobV90b2NfaW5zZXJ0KHRvYywgUEFSQUxMRUxfQVBQTFlfS0VZX0VSUk9S X1FVRVVFLCBtcSk7CisJc2htX21xX3NldF9yZWNlaXZlcihtcSwgTXlQcm9jKTsKKworCS8qIEF0 dGFjaCB0aGUgcXVldWUuICovCisJd2luZm8tPmVycm9yX21xX2hhbmRsZSA9IHNobV9tcV9hdHRh Y2gobXEsIHNlZywgTlVMTCk7CisKKwkvKiBSZXR1cm4gcmVzdWx0cyB0byBjYWxsZXIuICovCisJ d2luZm8tPmRzbV9zZWcgPSBzZWc7CisJd2luZm8tPnNoYXJlZCA9IHNoYXJlZDsKKworCXJldHVy biB0cnVlOworfQorCisvKgorICogU3RhcnQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHByb2Nlc3Mg YW5kIGFsbG9jYXRlIHNoYXJlZCBtZW1vcnkgZm9yIGl0LgorICovCitzdGF0aWMgUGFyYWxsZWxB cHBseVdvcmtlckluZm8gKgorcGFfaW5pdF9hbmRfbGF1bmNoX3dvcmtlcih2b2lkKQoreworCU1l bW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlib29sCQlsYXVuY2hlZDsKKwlQYXJhbGxlbEFwcGx5 V29ya2VySW5mbyAqd2luZm87CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRv KEFwcGx5Q29udGV4dCk7CisKKwl3aW5mbyA9IChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKSBw YWxsb2MwKHNpemVvZihQYXJhbGxlbEFwcGx5V29ya2VySW5mbykpOworCisJLyogU2V0dXAgc2hh cmVkIG1lbW9yeS4gKi8KKwlpZiAoIXBhX3NldHVwX2RzbSh3aW5mbykpCisJeworCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCXBmcmVlKHdpbmZvKTsKKworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwlsYXVuY2hlZCA9IGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChNeUxvZ2lj YWxSZXBXb3JrZXItPmRiaWQsCisJCQkJCQkJCQkJTXlTdWJzY3JpcHRpb24tPm9pZCwKKwkJCQkJ CQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSwKKwkJCQkJCQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXIt PnVzZXJpZCwKKwkJCQkJCQkJCQlJbnZhbGlkT2lkLAorCQkJCQkJCQkJCWRzbV9zZWdtZW50X2hh bmRsZSh3aW5mby0+ZHNtX3NlZykpOworCisJaWYgKGxhdW5jaGVkKQorCXsKKwkJUGFyYWxsZWxB cHBseVdvcmtlcnNMaXN0ID0gbGFwcGVuZChQYXJhbGxlbEFwcGx5V29ya2Vyc0xpc3QsIHdpbmZv KTsKKwl9CisJZWxzZQorCXsKKwkJcGFfZnJlZV93b3JrZXJfaW5mbyh3aW5mbyk7CisKKwkJd2lu Zm8gPSBOVUxMOworCX0KKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwor CXJldHVybiB3aW5mbzsKK30KKworLyoKKyAqIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNwZWNpZmll ZCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdmlhIHNoYXJlZC1tZW1vcnkKKyAqIHF1ZXVlLgorICov Cit2b2lkCitwYV9zZW5kX2RhdGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTaXpl IG5ieXRlcywKKwkJCQkJCSBjb25zdCB2b2lkICpkYXRhKQoreworCXNobV9tcV9yZXN1bHQgcmVz dWx0OworCVRpbWVzdGFtcFR6IHN0YXJ0VGltZSA9IDA7CisKKwlBc3NlcnQoIUlzVHJhbnNhY3Rp b25TdGF0ZSgpKTsKKworI2RlZmluZSBTSE1fU0VORF9USU1FT1VUX01TCQkxMDAwMAorCisJZm9y ICg7OykKKwl7CisJCXJlc3VsdCA9IHNobV9tcV9zZW5kKHdpbmZvLT5tcV9oYW5kbGUsIG5ieXRl cywgZGF0YSwgdHJ1ZSwgdHJ1ZSk7CisKKwkJaWYgKHJlc3VsdCA9PSBTSE1fTVFfU1VDQ0VTUykK KwkJCWJyZWFrOworCQllbHNlIGlmIChyZXN1bHQgPT0gU0hNX01RX0RFVEFDSEVEKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJ U0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzZW5kIGRhdGEgdG8gc2hhcmVk LW1lbW9yeSBxdWV1ZSIpKSk7CisKKwkJQXNzZXJ0KHJlc3VsdCA9PSBTSE1fTVFfV09VTERfQkxP Q0spOworCisJCS8qCisJCSAqIFJldHJ5IGFmdGVyIDFzIHRvIHJlZHVjZSB0aGUgY29zdCBvZiBn ZXR0aW5nIHRoZSBzeXN0ZW0gdGltZSBhbmQKKwkJICogY2FsY3VsYXRpbmcgdGhlIHRpbWUgZGlm ZmVyZW5jZS4KKwkJICovCisJCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJCSBXTF9M QVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAxMDAw TCwKKwkJCQkJCSBXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfU1RBVEVfQ0hBTkdF KTsKKworCQlpZiAoc3RhcnRUaW1lID09IDApCisJCQlzdGFydFRpbWUgPSBHZXRDdXJyZW50VGlt ZXN0YW1wKCk7CisJCWVsc2UgaWYgKFRpbWVzdGFtcERpZmZlcmVuY2VFeGNlZWRzKHN0YXJ0VGlt ZSwgR2V0Q3VycmVudFRpbWVzdGFtcCgpLAorCQkJCQkJCQkJCQlTSE1fU0VORF9USU1FT1VUX01T KSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfQ09OTkVDVElPTl9G QUlMVVJFKSwKKwkJCQkJIGVycm1zZygidGVybWluYXRpbmcgbG9naWNhbCByZXBsaWNhdGlvbiBw YXJhbGxlbCBhcHBseSB3b3JrZXIgZHVlIHRvIHRpbWVvdXQiKSkpOworCX0KK30KKworLyoKKyAq IFdhaXQgdW50aWwgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcidzIHRyYW5zYWN0aW9uIGZpbmlz aGVzLgorICovCit2b2lkCitwYV93YWl0X2Zvcl94YWN0X2ZpbmlzaChQYXJhbGxlbEFwcGx5V29y a2VyU2hhcmVkICp3c2hhcmVkKQoreworCS8qCisJICogV2FpdCB1bnRpbCB0aGUgcGFyYWxsZWwg YXBwbHkgd29ya2VyIHNldCB0aGUgc3RhdGUgdG8KKwkgKiBQQVJBTExFTF9UUkFOU19TVEFSVEVE IHdoaWNoIG1lYW5zIGl0IGhhcyBhY3F1aXJlZCB0aGUgdHJhbnNhY3Rpb24KKwkgKiBsb2NrLiBU aGlzIGlzIHRvIHByZXZlbnQgbGVhZGVyIGFwcGx5IHdvcmtlciBmcm9tIGFjcXVpcmluZyB0aGUK KwkgKiB0cmFuc2FjdGlvbiBsb2NrIGVhcmxpZXIgdGhhbiB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VyLgorCSAqLworCXBhX3dhaXRfZm9yX3hhY3Rfc3RhdGUod3NoYXJlZCwgUEFSQUxMRUxfVFJB TlNfU1RBUlRFRCk7CisKKwkvKiBXYWl0IGZvciB0aGUgdHJhbnNhY3Rpb24gbG9jayB0byBiZSBy ZWxlYXNlZC4gKi8KKwlwYV9sb2NrX3RyYW5zYWN0aW9uKHdzaGFyZWQtPnhpZCwgQWNjZXNzRXhj bHVzaXZlTG9jayk7CisJcGFfdW5sb2NrX3RyYW5zYWN0aW9uKHdzaGFyZWQtPnhpZCwgQWNjZXNz RXhjbHVzaXZlTG9jayk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBzdGF0ZSBiZWNvbWVzIFBB UkFMTEVMX1RSQU5TX0ZJTklTSEVEIGluIGNhc2UgdGhlIHBhcmFsbGVsCisJICogYXBwbHkgd29y a2VyIGZhaWxlZCB3aGlsZSBhcHBseWluZyBjaGFuZ2VzIGNhdXNpbmcgdGhlIGxvY2sgdG8gYmUK KwkgKiByZWxlYXNlZC4KKwkgKi8KKwlpZiAocGFfZ2V0X3hhY3Rfc3RhdGUod3NoYXJlZCkgIT0g UEFSQUxMRUxfVFJBTlNfRklOSVNIRUQpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygi bG9zdCBjb25uZWN0aW9uIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIiKSkpOworfQorCisv KgorICogV2FpdCB1bnRpbCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyJ3MgdHJhbnNhY3Rpb24g c3RhdGUgcmVhY2ggb3IgZXhjZWVkIHRoZQorICogZ2l2ZW4geGFjdF9zdGF0ZS4KKyAqLworc3Rh dGljIHZvaWQKK3BhX3dhaXRfZm9yX3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJl ZCAqd3NoYXJlZCwKKwkJCQkJCQkJICAgUGFyYWxsZWxUcmFuc1N0YXRlIHhhY3Rfc3RhdGUpCit7 CisJZm9yICg7OykKKwl7CisJCS8qIFN0b3AgaWYgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIHJlYWNo IG9yIGV4Y2VlZCB0aGUgeGFjdF9zdGF0ZS4gKi8KKwkJaWYgKHBhX2dldF94YWN0X3N0YXRlKHdz aGFyZWQpID49IHhhY3Rfc3RhdGUpCisJCQlicmVhazsKKworCQkvKiBXYWl0IHRvIGJlIHNpZ25h bGxlZC4gKi8KKwkJKHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLAorCQkJCQkJIFdMX0xBVENIX1NF VCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJIDEwTCwKKwkJCQkJ CSBXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfU1RBVEVfQ0hBTkdFKTsKKworCQkv KiBSZXNldCB0aGUgbGF0Y2ggc28gd2UgZG9uJ3Qgc3Bpbi4gKi8KKwkJUmVzZXRMYXRjaChNeUxh dGNoKTsKKworCQkvKiBBbiBpbnRlcnJ1cHQgbWF5IGhhdmUgb2NjdXJyZWQgd2hpbGUgd2Ugd2Vy ZSB3YWl0aW5nLiAqLworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCX0KK30KKworLyoKKyAq IFNldCBhbiBlbnVtIGluZGljYXRpbmcgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIGZvciB0aGUgZ2l2 ZW4gcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlci4KKyAqLwordm9pZAorcGFfc2V0X3hhY3Rfc3Rh dGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCwKKwkJCQkJCQkgIFBhcmFsbGVs VHJhbnNTdGF0ZSB4YWN0X3N0YXRlKQoreworCVNwaW5Mb2NrQWNxdWlyZSgmd3NoYXJlZC0+bXV0 ZXgpOworCXdzaGFyZWQtPnhhY3Rfc3RhdGUgPSB4YWN0X3N0YXRlOworCVNwaW5Mb2NrUmVsZWFz ZSgmd3NoYXJlZC0+bXV0ZXgpOworfQorCisvKgorICogR2V0IGFuIGVudW0gaW5kaWNhdGluZyB0 aGUgdHJhbnNhY3Rpb24gc3RhdGUgZm9yIHRoZSBnaXZlbiBwYXJhbGxlbCBhcHBseQorICogd29y a2VyLgorICovCitzdGF0aWMgUGFyYWxsZWxUcmFuc1N0YXRlCitwYV9nZXRfeGFjdF9zdGF0ZShQ YXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3c2hhcmVkKQoreworCVBhcmFsbGVsVHJhbnNTdGF0 ZSB4YWN0X3N0YXRlOworCisJU3BpbkxvY2tBY3F1aXJlKCZ3c2hhcmVkLT5tdXRleCk7CisJeGFj dF9zdGF0ZSA9IHdzaGFyZWQtPnhhY3Rfc3RhdGU7CisJU3BpbkxvY2tSZWxlYXNlKCZ3c2hhcmVk LT5tdXRleCk7CisKKwlyZXR1cm4geGFjdF9zdGF0ZTsKK30KKworLyoKKyAqIEZvcm0gdGhlIHNh dmVwb2ludCBuYW1lIGZvciB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgorICoKKyAqIFJldHVy biB0aGUgbmFtZSBpbiB0aGUgc3VwcGxpZWQgYnVmZmVyLgorICovCitzdGF0aWMgdm9pZAorcGFf c2F2ZXBvaW50X25hbWUoT2lkIHN1Ym9pZCwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJICBj aGFyICpzcG5hbWUsIFNpemUgc3pzcCkKK3sKKwlzbnByaW50ZihzcG5hbWUsIHN6c3AsICJwZ19z cF8ldV8ldSIsIHN1Ym9pZCwgeGlkKTsKK30KKworLyoKKyAqIERlZmluZSBhIHNhdmVwb2ludCBm b3IgYSBzdWJ4YWN0IGluIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpZiBuZWVkZWQuCisgKgorICog VGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBjYW4gZmlndXJlIG91dCBpZiBhIG5ldyBzdWJ0cmFu c2FjdGlvbiB3YXMKKyAqIHN0YXJ0ZWQgYnkgY2hlY2tpbmcgaWYgdGhlIG5ldyBjaGFuZ2UgYXJy aXZlZCB3aXRoIGEgZGlmZmVyZW50IHhpZC4gSW4gdGhhdAorICogY2FzZSBkZWZpbmUgYSBuYW1l ZCBzYXZlcG9pbnQsIHNvIHRoYXQgd2UgYXJlIGFibGUgdG8gcm9sbGJhY2sgdG8gaXQKKyAqIGlm IHJlcXVpcmVkLgorICovCit2b2lkCitwYV9zdGFydF9zdWJ0cmFucyhUcmFuc2FjdGlvbklkIGN1 cnJlbnRfeGlkLCBUcmFuc2FjdGlvbklkIHRvcF94aWQpCit7CisJaWYgKGN1cnJlbnRfeGlkICE9 IHRvcF94aWQgJiYKKwkJIWxpc3RfbWVtYmVyX3hpZChzdWJ4YWN0bGlzdCwgY3VycmVudF94aWQp KQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisJCWNoYXIJCXNwbmFtZVtOQU1FREFUQUxF Tl07CisKKwkJcGFfc2F2ZXBvaW50X25hbWUoTXlTdWJzY3JpcHRpb24tPm9pZCwgY3VycmVudF94 aWQsCisJCQkJCQkJCQkgIHNwbmFtZSwgc2l6ZW9mKHNwbmFtZSkpOworCisJCWVsb2coREVCVUcx LCAiZGVmaW5pbmcgc2F2ZXBvaW50ICVzIGluIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIsIHNwbmFt ZSk7CisKKwkJLyogV2UgbXVzdCBiZSBpbiB0cmFuc2FjdGlvbiBibG9jayB0byBkZWZpbmUgdGhl IFNBVkVQT0lOVC4gKi8KKwkJaWYgKCFJc1RyYW5zYWN0aW9uQmxvY2soKSkKKwkJeworCQkJaWYg KCFJc1RyYW5zYWN0aW9uU3RhdGUoKSkKKwkJCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwor CisJCQlCZWdpblRyYW5zYWN0aW9uQmxvY2soKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFu ZCgpOworCQl9CisKKwkJRGVmaW5lU2F2ZXBvaW50KHNwbmFtZSk7CisKKwkJLyoKKwkJICogQ29t bWl0VHJhbnNhY3Rpb25Db21tYW5kIGlzIG5lZWRlZCB0byBzdGFydCBhIHN1YnRyYW5zYWN0aW9u IGFmdGVyCisJCSAqIGlzc3VpbmcgYSBTQVZFUE9JTlQgaW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxv Y2sgKHNlZQorCQkgKiBTdGFydFN1YlRyYW5zYWN0aW9uKCkpLgorCQkgKi8KKwkJQ29tbWl0VHJh bnNhY3Rpb25Db21tYW5kKCk7CisKKwkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFw cGx5Q29udGV4dCk7CisJCXN1YnhhY3RsaXN0ID0gbGFwcGVuZF94aWQoc3VieGFjdGxpc3QsIGN1 cnJlbnRfeGlkKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisJfQorfQorCisv KgorICogSGFuZGxlIFNUUkVBTSBBQk9SVCBtZXNzYWdlIHdoZW4gdGhlIHRyYW5zYWN0aW9uIHdh cyBhcHBsaWVkIGluIGEgcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlci4KKyAqLwordm9pZAorcGFf c3RyZWFtX2Fib3J0KExvZ2ljYWxSZXBTdHJlYW1BYm9ydERhdGEgKmFib3J0X2RhdGEpCit7CisJ VHJhbnNhY3Rpb25JZCB4aWQgPSBhYm9ydF9kYXRhLT54aWQ7CisJVHJhbnNhY3Rpb25JZCBzdWJ4 aWQgPSBhYm9ydF9kYXRhLT5zdWJ4aWQ7CisKKwkvKgorCSAqIFVwZGF0ZSBvcmlnaW4gc3RhdGUg c28gd2UgY2FuIHJlc3RhcnQgc3RyZWFtaW5nIGZyb20gY29ycmVjdCBwb3NpdGlvbgorCSAqIGlu IGNhc2Ugb2YgY3Jhc2guCisJICovCisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl9sc24gPSBh Ym9ydF9kYXRhLT5hYm9ydF9sc247CisJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbl90aW1lc3Rh bXAgPSBhYm9ydF9kYXRhLT5hYm9ydF90aW1lOworCisJLyoKKwkgKiBJZiB0aGUgdHdvIFhJRHMg YXJlIHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2ZWwgeGFjdCwgc28KKwkg KiBqdXN0IGZyZWUgdGhlIHN1YnhhY3RsaXN0LgorCSAqLworCWlmIChzdWJ4aWQgPT0geGlkKQor CXsKKwkJLyoKKwkJICogQWx0aG91Z2ggdGhlIGxvY2sgY2FuIGJlIGF1dG9tYXRpY2FsbHkgcmVs ZWFzZWQgZHVyaW5nIHRyYW5zYWN0aW9uCisJCSAqIHJvbGxiYWNrLCBidXQgd2Ugc3RpbGwgcmVs ZWFzZSB0aGUgbG9jayBoZXJlIGFzIHdlIG1heSBub3QgaW4gYQorCQkgKiB0cmFuc2FjdGlvbi4K KwkJICovCisJCXBhX3VubG9ja190cmFuc2FjdGlvbih4aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwkJQWJvcnRDdXJyZW50VHJhbnNhY3Rpb24oKTsKKworCQlpZiAoSXNUcmFuc2FjdGlvbkJsb2Nr KCkpCisJCXsKKwkJCUVuZFRyYW5zYWN0aW9uQmxvY2soZmFsc2UpOworCQkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisJCX0KKworCQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lE TEUsIE5VTEwpOworCisJCWxpc3RfZnJlZShzdWJ4YWN0bGlzdCk7CisJCXN1YnhhY3RsaXN0ID0g TklMOworCisJCXBhX3NldF94YWN0X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIFBBUkFMTEVMX1RS QU5TX0ZJTklTSEVEKTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogT0ssIHNvIGl0J3MgYSBz dWJ4YWN0LiBSb2xsYmFjayB0byB0aGUgc2F2ZXBvaW50LgorCQkgKgorCQkgKiBXZSBhbHNvIG5l ZWQgdG8gcmVhZCB0aGUgc3VieGFjdGxpc3QsIGRldGVybWluZSB0aGUgb2Zmc2V0IHRyYWNrZWQK KwkJICogZm9yIHRoZSBzdWJ4YWN0LCBhbmQgdHJ1bmNhdGUgdGhlIGxpc3QuCisJCSAqLworCQlp bnQJCQlpOworCQlib29sCQlmb3VuZCA9IGZhbHNlOworCQljaGFyCQlzcG5hbWVbTkFNRURBVEFM RU5dOworCisJCXBhX3NhdmVwb2ludF9uYW1lKE15U3Vic2NyaXB0aW9uLT5vaWQsIHN1YnhpZCwg c3BuYW1lLAorCQkJCQkJCQkJICBzaXplb2Yoc3BuYW1lKSk7CisKKwkJZWxvZyhERUJVRzEsICJy b2xsaW5nIGJhY2sgdG8gc2F2ZXBvaW50ICVzIGluIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIsIHNw bmFtZSk7CisKKwkJZm9yIChpID0gbGlzdF9sZW5ndGgoc3VieGFjdGxpc3QpIC0gMTsgaSA+PSAw OyBpLS0pCisJCXsKKwkJCVRyYW5zYWN0aW9uSWQgeGlkX3RtcCA9IGxmaXJzdF94aWQobGlzdF9u dGhfY2VsbChzdWJ4YWN0bGlzdCwgaSkpOworCisJCQlpZiAoeGlkX3RtcCA9PSBzdWJ4aWQpCisJ CQl7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGZv dW5kKQorCQl7CisJCQlSb2xsYmFja1RvU2F2ZXBvaW50KHNwbmFtZSk7CisJCQlDb21taXRUcmFu c2FjdGlvbkNvbW1hbmQoKTsKKwkJCXN1YnhhY3RsaXN0ID0gbGlzdF90cnVuY2F0ZShzdWJ4YWN0 bGlzdCwgaSArIDEpOworCQl9CisKKwkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExF SU5UUkFOU0FDVElPTiwgTlVMTCk7CisJfQorfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyB0 byBhY3F1aXJlIGFuZCByZWxlYXNlIGEgbG9jayBmb3IgZWFjaCBzdHJlYW0gYmxvY2suCisgKgor ICogU2V0IGxvY2t0YWdfZmllbGQ0IHRvIDAgdG8gaW5kaWNhdGUgdGhhdCBpdCdzIGEgc3RyZWFt IGxvY2suCisgKi8KK3ZvaWQKK3BhX2xvY2tfc3RyZWFtKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NL TU9ERSBsb2NrbW9kZSkKK3sKKwlMb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oTXlMb2dp Y2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkLAorCQkJCQkJCQkgICAwLCBsb2NrbW9kZSk7Cit9CisK K3ZvaWQKK3BhX3VubG9ja19zdHJlYW0oVHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxvY2tt b2RlKQoreworCVVubG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uKE15TG9naWNhbFJlcFdv cmtlci0+c3ViaWQsIHhpZCwKKwkJCQkJCQkJCSAwLCBsb2NrbW9kZSk7Cit9CisKKy8qCisgKiBI ZWxwZXIgZnVuY3Rpb25zIHRvIGFjcXVpcmUgYW5kIHJlbGVhc2UgYSBsb2NrIGZvciBlYWNoIGxv Y2FsIHRyYW5zYWN0aW9uLgorICoKKyAqIFNldCBsb2NrdGFnX2ZpZWxkNCB0byAxIHRvIGluZGlj YXRlIHRoYXQgaXQncyBhIHRyYW5zYWN0aW9uIGxvY2suCisgKgorICogTm90ZSB0aGF0IGFsbCB0 aGUgY2FsbGVycyBhcmUgcGFzc2luZyByZW1vdGUgdHJhbnNhY3Rpb24gSUQgaW5zdGVhZCBvZiBs b2NhbAorICogdHJhbnNhY3Rpb24gSUQgYXMgeGlkLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGxvY2Fs IHRyYW5zYWN0aW9uIElEIHdpbGwgb25seSBiZQorICogYXNzaWduZWQgd2hpbGUgYXBwbHlpbmcg dGhlIGZpcnN0IGNoYW5nZSBpbiB0aGUgcGFyYWxsZWwgYXBwbHksIGJ1dCBpdCdzCisgKiBwb3Nz aWJsZSB0aGF0IHRoZSBmaXJzdCBjaGFuZ2UgaW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIGJs b2NrZWQgYnkgYQorICogY29uY3VycmVudGx5IGV4ZWN1dGluZyB0cmFuc2FjdGlvbiBpbiBhbm90 aGVyIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBjYXVzaW5nCisgKiB0aGUgbGVhZGVyIGNhbm5vdCBn ZXQgbG9jYWwgdHJhbnNhY3Rpb24gSUQuCisgKi8KK3ZvaWQKK3BhX2xvY2tfdHJhbnNhY3Rpb24o VHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2RlKQoreworCUxvY2tBcHBseVRyYW5z YWN0aW9uRm9yU2Vzc2lvbihNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsCisJCQkJCQkJ CSAgIDEsIGxvY2ttb2RlKTsKK30KKwordm9pZAorcGFfdW5sb2NrX3RyYW5zYWN0aW9uKFRyYW5z YWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlVbmxvY2tBcHBseVRyYW5zYWN0 aW9uRm9yU2Vzc2lvbihNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsCisJCQkJCQkJCQkg MSwgbG9ja21vZGUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMK aW5kZXggMmNjMGFjOS4uMzAzNTU3ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RlY29kZS5jCkBAIC02NTIsOSArNjUyLDEwIEBAIERlY29kZUNvbW1pdChMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZiwKIAl7CiAJCWZvciAoaSA9IDA7 IGkgPCBwYXJzZWQtPm5zdWJ4YWN0czsgaSsrKQogCQl7Ci0JCQlSZW9yZGVyQnVmZmVyRm9yZ2V0 KGN0eC0+cmVvcmRlciwgcGFyc2VkLT5zdWJ4YWN0c1tpXSwgYnVmLT5vcmlncHRyKTsKKwkJCVJl b3JkZXJCdWZmZXJGb3JnZXQoY3R4LT5yZW9yZGVyLCBwYXJzZWQtPnN1YnhhY3RzW2ldLCBidWYt Pm9yaWdwdHIsCisJCQkJCQkJCWNvbW1pdF90aW1lKTsKIAkJfQotCQlSZW9yZGVyQnVmZmVyRm9y Z2V0KGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPm9yaWdwdHIpOworCQlSZW9yZGVyQnVmZmVyRm9y Z2V0KGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPm9yaWdwdHIsIGNvbW1pdF90aW1lKTsKIAogCQly ZXR1cm47CiAJfQpAQCAtODIyLDEwICs4MjMsMTEgQEAgRGVjb2RlQWJvcnQoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYsCiAJCWZvciAoaSA9IDA7IGkg PCBwYXJzZWQtPm5zdWJ4YWN0czsgaSsrKQogCQl7CiAJCQlSZW9yZGVyQnVmZmVyQWJvcnQoY3R4 LT5yZW9yZGVyLCBwYXJzZWQtPnN1YnhhY3RzW2ldLAotCQkJCQkJCSAgIGJ1Zi0+cmVjb3JkLT5F bmRSZWNQdHIpOworCQkJCQkJCSAgIGJ1Zi0+cmVjb3JkLT5FbmRSZWNQdHIsIGFib3J0X3RpbWUp OwogCQl9CiAKLQkJUmVvcmRlckJ1ZmZlckFib3J0KGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPnJl Y29yZC0+RW5kUmVjUHRyKTsKKwkJUmVvcmRlckJ1ZmZlckFib3J0KGN0eC0+cmVvcmRlciwgeGlk LCBidWYtPnJlY29yZC0+RW5kUmVjUHRyLAorCQkJCQkJICAgYWJvcnRfdGltZSk7CiAJfQogCiAJ LyogdXBkYXRlIHRoZSBkZWNvZGluZyBzdGF0cyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9sYXVuY2hlci5jCmluZGV4IDczNTk0YzYuLmEwODY5OTcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKQEAgLTU1LDYgKzU1LDcgQEAKIC8qIEdV QyB2YXJpYWJsZXMgKi8KIGludAkJCW1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMgPSA0 OwogaW50CQkJbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uID0gMjsKK2ludAkJCW1h eF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyOwogCiBMb2dpY2Fs UmVwV29ya2VyICpNeUxvZ2ljYWxSZXBXb3JrZXIgPSBOVUxMOwogCkBAIC0xNTIsOCArMTUzLDEw IEBAIGdldF9zdWJzY3JpcHRpb25fbGlzdCh2b2lkKQogICoKICAqIFRoaXMgaXMgb25seSBuZWVk ZWQgZm9yIGNsZWFuaW5nIHVwIHRoZSBzaGFyZWQgbWVtb3J5IGluIGNhc2UgdGhlIHdvcmtlcgog ICogZmFpbHMgdG8gYXR0YWNoLgorICoKKyAqIFJldHVybiB3aGV0aGVyIHRoZSBhdHRhY2ggd2Fz IHN1Y2Nlc3NmdWwuCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgYm9vbAogV2FpdEZvclJlcGxp Y2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwKIAkJCQkJCQkgICB1 aW50MTYgZ2VuZXJhdGlvbiwKIAkJCQkJCQkgICBCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpoYW5k bGUpCkBAIC0xNjksMTEgKzE3MiwxMSBAQCBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2go TG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogCiAJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdv cmtlckxvY2ssIExXX1NIQVJFRCk7CiAKLQkJLyogV29ya2VyIGVpdGhlciBkaWVkIG9yIGhhcyBz dGFydGVkOyBubyBuZWVkIHRvIGRvIGFueXRoaW5nLiAqLworCQkvKiBXb3JrZXIgZWl0aGVyIGRp ZWQgb3IgaGFzIHN0YXJ0ZWQuIFJldHVybiBmYWxzZSBpZiBkaWVkLiAqLwogCQlpZiAoIXdvcmtl ci0+aW5fdXNlIHx8IHdvcmtlci0+cHJvYykKIAkJewogCQkJTFdMb2NrUmVsZWFzZShMb2dpY2Fs UmVwV29ya2VyTG9jayk7Ci0JCQlyZXR1cm47CisJCQlyZXR1cm4gd29ya2VyLT5pbl91c2U7CiAJ CX0KIAogCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKQEAgLTE4OCw3ICsx OTEsNyBAQCBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAq d29ya2VyLAogCQkJaWYgKGdlbmVyYXRpb24gPT0gd29ya2VyLT5nZW5lcmF0aW9uKQogCQkJCWxv Z2ljYWxyZXBfd29ya2VyX2NsZWFudXAod29ya2VyKTsKIAkJCUxXTG9ja1JlbGVhc2UoTG9naWNh bFJlcFdvcmtlckxvY2spOwotCQkJcmV0dXJuOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKIAkJ LyoKQEAgLTIxMCw2ICsyMTMsOCBAQCBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2goTG9n aWNhbFJlcFdvcmtlciAqd29ya2VyLAogLyoKICAqIFdhbGtzIHRoZSB3b3JrZXJzIGFycmF5IGFu ZCBzZWFyY2hlcyBmb3Igb25lIHRoYXQgbWF0Y2hlcyBnaXZlbgogICogc3Vic2NyaXB0aW9uIGlk IGFuZCByZWxpZC4KKyAqCisgKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBsZWFkZXIg YXBwbHkgd29ya2VyIG9yIHRhYmxlIHN5bmMgd29ya2VyLgogICovCiBMb2dpY2FsUmVwV29ya2Vy ICoKIGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoT2lkIHN1YmlkLCBPaWQgcmVsaWQsIGJvb2wgb25s eV9ydW5uaW5nKQpAQCAtMjI0LDYgKzIyOSwxMCBAQCBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE9p ZCBzdWJpZCwgT2lkIHJlbGlkLCBib29sIG9ubHlfcnVubmluZykKIAl7CiAJCUxvZ2ljYWxSZXBX b3JrZXIgKncgPSAmTG9naWNhbFJlcEN0eC0+d29ya2Vyc1tpXTsKIAorCQkvKiBTa2lwIHBhcmFs bGVsIGFwcGx5IHdvcmtlcnMuICovCisJCWlmIChpc1BhcmFsbGVsQXBwbHlXb3JrZXIodykpCisJ CQljb250aW51ZTsKKwogCQlpZiAody0+aW5fdXNlICYmIHctPnN1YmlkID09IHN1YmlkICYmIHct PnJlbGlkID09IHJlbGlkICYmCiAJCQkoIW9ubHlfcnVubmluZyB8fCB3LT5wcm9jKSkKIAkJewpA QCAtMjYwLDExICsyNjksMTMgQEAgbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBi b29sIG9ubHlfcnVubmluZykKIH0KIAogLyoKLSAqIFN0YXJ0IG5ldyBhcHBseSBiYWNrZ3JvdW5k IHdvcmtlciwgaWYgcG9zc2libGUuCisgKiBTdGFydCBuZXcgYmFja2dyb3VuZCB3b3JrZXIsIGlm IHBvc3NpYmxlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWls dXJlLgogICovCi12b2lkCitib29sCiBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQs IE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKLQkJCQkJCSBPaWQg cmVsaWQpCisJCQkJCQkgT2lkIHJlbGlkLCBkc21faGFuZGxlIHN1Yndvcmtlcl9kc20pCiB7CiAJ QmFja2dyb3VuZFdvcmtlciBiZ3c7CiAJQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqYmd3X2hhbmRs ZTsKQEAgLTI3Myw3ICsyODQsMTIgQEAgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlk LCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1c2VyaWQsCiAJaW50CQkJc2xv dCA9IDA7CiAJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyID0gTlVMTDsKIAlpbnQJCQluc3luY3dv cmtlcnM7CisJaW50CQkJbnBhcmFsbGVsYXBwbHl3b3JrZXJzOwogCVRpbWVzdGFtcFR6IG5vdzsK Kwlib29sCQlpc19wYXJhbGxlbF9hcHBseV93b3JrZXIgPSAoc3Vid29ya2VyX2RzbSAhPSBEU01f SEFORExFX0lOVkFMSUQpOworCisJLyogU2FuaXR5IGNoZWNrIC0gdGFibGVzeW5jIHdvcmtlciBj YW5ub3QgYmUgYSBzdWJ3b3JrZXIgKi8KKwlBc3NlcnQoIShpc19wYXJhbGxlbF9hcHBseV93b3Jr ZXIgJiYgT2lkSXNWYWxpZChyZWxpZCkpKTsKIAogCWVyZXBvcnQoREVCVUcxLAogCQkJKGVycm1z Z19pbnRlcm5hbCgic3RhcnRpbmcgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YnNj cmlwdGlvbiBcIiVzXCIiLApAQCAtMzUxLDcgKzM2NywyNiBAQCByZXRyeToKIAlpZiAoT2lkSXNW YWxpZChyZWxpZCkgJiYgbnN5bmN3b3JrZXJzID49IG1heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNj cmlwdGlvbikKIAl7CiAJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwotCQly ZXR1cm47CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlucGFyYWxsZWxhcHBseXdvcmtlcnMgPSBs b2dpY2FscmVwX3BhcmFsbGVsX2FwcGx5X3dvcmtlcl9jb3VudChzdWJpZCk7CisKKwkvKgorCSAq IFJldHVybiBmYWxzZSBpZiB0aGUgbnVtYmVyIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgcmVh Y2hlZCB0aGUgbGltaXQKKwkgKiBwZXIgc3Vic2NyaXB0aW9uLgorCSAqLworCWlmIChpc19wYXJh bGxlbF9hcHBseV93b3JrZXIgJiYKKwkJbnBhcmFsbGVsYXBwbHl3b3JrZXJzID49IG1heF9wYXJh bGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24pCisJeworCQlMV0xvY2tSZWxlYXNl KExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKKworCQllcmVwb3J0KExPRywKKwkJCQkoZXJyY29kZShF UlJDT0RFX0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQpLAorCQkJCSBlcnJtc2coIm91dCBv ZiBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIiksCisJCQkJIGVycmhpbnQoIllvdSBtaWdodCBuZWVk IHRvIGluY3JlYXNlIG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24u IikpKTsKKworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTM2NSw3ICs0MDAsNyBAQCBy ZXRyeToKIAkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR1VSQVRJT05fTElNSVRfRVhDRUVERUQp LAogCQkJCSBlcnJtc2coIm91dCBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciBzbG90cyIp LAogCQkJCSBlcnJoaW50KCJZb3UgbWlnaHQgbmVlZCB0byBpbmNyZWFzZSBtYXhfbG9naWNhbF9y ZXBsaWNhdGlvbl93b3JrZXJzLiIpKSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0K IAogCS8qIFByZXBhcmUgdGhlIHdvcmtlciBzbG90LiAqLwpAQCAtMzgwLDYgKzQxNSw4IEBAIHJl dHJ5OgogCXdvcmtlci0+cmVsc3RhdGUgPSBTVUJSRUxfU1RBVEVfVU5LTk9XTjsKIAl3b3JrZXIt PnJlbHN0YXRlX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCXdvcmtlci0+c3RyZWFtX2ZpbGVz ZXQgPSBOVUxMOworCXdvcmtlci0+YXBwbHlfbGVhZGVyX3BpZCA9IGlzX3BhcmFsbGVsX2FwcGx5 X3dvcmtlciA/IE15UHJvY1BpZCA6IEludmFsaWRQaWQ7CisJd29ya2VyLT5wYXJhbGxlbF9hcHBs eSA9IGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlcjsKIAl3b3JrZXItPmxhc3RfbHNuID0gSW52YWxp ZFhMb2dSZWNQdHI7CiAJVElNRVNUQU1QX05PQkVHSU4od29ya2VyLT5sYXN0X3NlbmRfdGltZSk7 CiAJVElNRVNUQU1QX05PQkVHSU4od29ya2VyLT5sYXN0X3JlY3ZfdGltZSk7CkBAIC0zOTcsMTkg KzQzNCwzNCBAQCByZXRyeToKIAkJQkdXT1JLRVJfQkFDS0VORF9EQVRBQkFTRV9DT05ORUNUSU9O OwogCWJndy5iZ3dfc3RhcnRfdGltZSA9IEJnV29ya2VyU3RhcnRfUmVjb3ZlcnlGaW5pc2hlZDsK IAlzbnByaW50ZihiZ3cuYmd3X2xpYnJhcnlfbmFtZSwgQkdXX01BWExFTiwgInBvc3RncmVzIik7 Ci0Jc25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiQXBwbHlXb3Jr ZXJNYWluIik7CisKKwlpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQlzbnByaW50Zihi Z3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4sICJQYXJhbGxlbEFwcGx5V29ya2VyTWFp biIpOworCWVsc2UKKwkJc25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVO LCAiQXBwbHlXb3JrZXJNYWluIik7CisKIAlpZiAoT2lkSXNWYWxpZChyZWxpZCkpCiAJCXNucHJp bnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExFTiwKIAkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24g d29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUgc3luYyAldSIsIHN1YmlkLCByZWxpZCk7CisJZWxz ZSBpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQlzbnByaW50ZihiZ3cuYmd3X25hbWUs IEJHV19NQVhMRU4sCisJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdv cmtlciBmb3Igc3Vic2NyaXB0aW9uICV1Iiwgc3ViaWQpOwogCWVsc2UKIAkJc25wcmludGYoYmd3 LmJnd19uYW1lLCBCR1dfTUFYTEVOLAotCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIg Zm9yIHN1YnNjcmlwdGlvbiAldSIsIHN1YmlkKTsKLQlzbnByaW50ZihiZ3cuYmd3X3R5cGUsIEJH V19NQVhMRU4sICJsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciIpOworCQkJCSAibG9naWNhbCBy ZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSIsIHN1YmlkKTsKKwor CWlmIChpc19wYXJhbGxlbF9hcHBseV93b3JrZXIpCisJCXNucHJpbnRmKGJndy5iZ3dfdHlwZSwg QkdXX01BWExFTiwgImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgd29ya2VyIik7CisJZWxz ZQorCQlzbnByaW50ZihiZ3cuYmd3X3R5cGUsIEJHV19NQVhMRU4sICJsb2dpY2FsIHJlcGxpY2F0 aW9uIHdvcmtlciIpOwogCiAJYmd3LmJnd19yZXN0YXJ0X3RpbWUgPSBCR1dfTkVWRVJfUkVTVEFS VDsKIAliZ3cuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7CiAJYmd3LmJnd19tYWluX2FyZyA9 IEludDMyR2V0RGF0dW0oc2xvdCk7CiAKKwlpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQor CQltZW1jcHkoYmd3LmJnd19leHRyYSwgJnN1Yndvcmtlcl9kc20sIHNpemVvZihkc21faGFuZGxl KSk7CisKIAlpZiAoIVJlZ2lzdGVyRHluYW1pY0JhY2tncm91bmRXb3JrZXIoJmJndywgJmJnd19o YW5kbGUpKQogCXsKIAkJLyogRmFpbGVkIHRvIHN0YXJ0IHdvcmtlciwgc28gY2xlYW4gdXAgdGhl IHdvcmtlciBzbG90LiAqLwpAQCAtNDIyLDMzICs0NzQsMjIgQEAgcmV0cnk6CiAJCQkJKGVycmNv ZGUoRVJSQ09ERV9DT05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkgZXJybXNnKCJv dXQgb2YgYmFja2dyb3VuZCB3b3JrZXIgc2xvdHMiKSwKIAkJCQkgZXJyaGludCgiWW91IG1pZ2h0 IG5lZWQgdG8gaW5jcmVhc2UgbWF4X3dvcmtlcl9wcm9jZXNzZXMuIikpKTsKLQkJcmV0dXJuOwor CQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyogTm93IHdhaXQgdW50aWwgaXQgYXR0YWNoZXMuICov Ci0JV2FpdEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKHdvcmtlciwgZ2VuZXJhdGlvbiwgYmd3 X2hhbmRsZSk7CisJcmV0dXJuIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaCh3b3JrZXIs IGdlbmVyYXRpb24sIGJnd19oYW5kbGUpOwogfQogCiAvKgotICogU3RvcCB0aGUgbG9naWNhbCBy ZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YmlkL3JlbGlkLCBpZiBhbnksIGFuZCB3YWl0IHVudGls Ci0gKiBpdCBkZXRhY2hlcyBmcm9tIHRoZSBzbG90LgorICogSW50ZXJuYWwgZnVuY3Rpb24gdG8g c3RvcCB0aGUgd29ya2VyIGFuZCB3YWl0IGZvciBpdCB0byBkaWUuCiAgKi8KLXZvaWQKLWxvZ2lj YWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpCitzdGF0aWMgdm9pZAorbG9n aWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpCiB7 Ci0JTG9naWNhbFJlcFdvcmtlciAqd29ya2VyOwogCXVpbnQxNgkJZ2VuZXJhdGlvbjsKIAotCUxX TG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7Ci0KLQl3b3JrZXIg PSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKHN1YmlkLCByZWxpZCwgZmFsc2UpOwotCi0JLyogTm8g d29ya2VyLCBub3RoaW5nIHRvIGRvLiAqLwotCWlmICghd29ya2VyKQotCXsKLQkJTFdMb2NrUmVs ZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0JCXJldHVybjsKLQl9CisJQXNzZXJ0KExXTG9j a0hlbGRCeU1lSW5Nb2RlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpKTsKIAogCS8q CiAJICogUmVtZW1iZXIgd2hpY2ggZ2VuZXJhdGlvbiB3YXMgb3VyIHdvcmtlciBzbyB3ZSBjYW4g Y2hlY2sgaWYgd2hhdCB3ZSBzZWUKQEAgLTQ4NiwxMCArNTI3LDcgQEAgbG9naWNhbHJlcF93b3Jr ZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkKIAkJICogZGlmZmVyZW50LCBtZWFuaW5nIHRo YXQgYSBkaWZmZXJlbnQgd29ya2VyIGhhcyB0YWtlbiB0aGUgc2xvdC4KIAkJICovCiAJCWlmICgh d29ya2VyLT5pbl91c2UgfHwgd29ya2VyLT5nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pCi0JCXsK LQkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwogCQkJcmV0dXJuOwotCQl9 CiAKIAkJLyogV29ya2VyIGhhcyBhc3NpZ25lZCBwcm9jLCBzbyBpdCBoYXMgc3RhcnRlZC4gKi8K IAkJaWYgKHdvcmtlci0+cHJvYykKQEAgLTUyMyw2ICs1NjEsNTAgQEAgbG9naWNhbHJlcF93b3Jr ZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkKIAogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxS ZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwogCX0KK30KKworLyoKKyAqIFN0b3AgdGhlIGxvZ2lj YWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJpZC9yZWxpZCwgaWYgYW55LCBhbmQgd2FpdCB1 bnRpbAorICogaXQgZGV0YWNoZXMgZnJvbSB0aGUgc2xvdC4KKyAqLwordm9pZAorbG9naWNhbHJl cF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxpZCkKK3sKKwlMb2dpY2FsUmVwV29ya2Vy ICp3b3JrZXI7CisKKwlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFS RUQpOworCisJd29ya2VyID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChzdWJpZCwgcmVsaWQsIGZh bHNlKTsKKworCWlmICh3b3JrZXIpCisJeworCQlBc3NlcnQoIWlzUGFyYWxsZWxBcHBseVdvcmtl cih3b3JrZXIpKTsKKwkJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3b3JrZXIpOwor CX0KKworCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOworfQorCisvKgorICog U3RvcCB0aGUgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgY29ycmVzcG9uZGluZyB0byB0aGUg aW5wdXQgc2xvdCBudW1iZXIsCisgKiBhbmQgd2FpdCB1bnRpbCBpdCBkZXRhY2hlcyBmcm9tIHRo ZSBzbG90LgorICovCit2b2lkCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2J5X3Nsb3QoaW50IHNs b3Rfbm8sIHVpbnQxNiBnZW5lcmF0aW9uKQoreworCUxvZ2ljYWxSZXBXb3JrZXIgKndvcmtlcjsK KworCUFzc2VydChzbG90X25vID49IDAgJiYgc2xvdF9ubyA8IG1heF9sb2dpY2FsX3JlcGxpY2F0 aW9uX3dvcmtlcnMpOworCisJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdf U0hBUkVEKTsKKworCXdvcmtlciA9ICZMb2dpY2FsUmVwQ3R4LT53b3JrZXJzW3Nsb3Rfbm9dOwor CisJLyoKKwkgKiBPbmx5IHN0b3AgdGhlIHdvcmtlciBpZiB0aGUgZ2VuZXJhdGlvbiBtYXRjaGVz IGFuZCB0aGUgd29ya2VyIGlzIGFsaXZlLgorCSAqLworCWlmICh3b3JrZXItPmdlbmVyYXRpb24g PT0gZ2VuZXJhdGlvbiAmJiB3b3JrZXItPnByb2MpCisJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3Bf aW50ZXJuYWwod29ya2VyKTsKIAogCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2sp OwogfQpAQCAtNTk1LDExICs2NzcsMzIgQEAgbG9naWNhbHJlcF93b3JrZXJfYXR0YWNoKGludCBz bG90KQogfQogCiAvKgotICogRGV0YWNoIHRoZSB3b3JrZXIgKGNsZWFucyB1cCB0aGUgd29ya2Vy IGluZm8pLgorICogU3RvcCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBpZiBhbnksIGFuZCBk ZXRhY2ggdGhlIGxlYWRlciBhcHBseSB3b3JrZXIKKyAqIChjbGVhbnMgdXAgdGhlIHdvcmtlciBp bmZvKS4KICAqLwogc3RhdGljIHZvaWQKIGxvZ2ljYWxyZXBfd29ya2VyX2RldGFjaCh2b2lkKQog eworCS8qIFN0b3AgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICovCisJaWYgKGFtX2xlYWRl cl9hcHBseV93b3JrZXIoKSkKKwl7CisJCUxpc3QJICAgKndvcmtlcnM7CisJCUxpc3RDZWxsICAg KmxjOworCisJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7 CisKKwkJd29ya2VycyA9IGxvZ2ljYWxyZXBfd29ya2Vyc19maW5kKE15TG9naWNhbFJlcFdvcmtl ci0+c3ViaWQsIHRydWUpOworCQlmb3JlYWNoKGxjLCB3b3JrZXJzKQorCQl7CisJCQlMb2dpY2Fs UmVwV29ya2VyICp3ID0gKExvZ2ljYWxSZXBXb3JrZXIgKikgbGZpcnN0KGxjKTsKKworCQkJaWYg KGlzUGFyYWxsZWxBcHBseVdvcmtlcih3KSkKKwkJCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2lu dGVybmFsKHcpOworCQl9CisKKwkJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7 CisJfQorCiAJLyogQmxvY2sgY29uY3VycmVudCBhY2Nlc3MuICovCiAJTFdMb2NrQWNxdWlyZShM b2dpY2FsUmVwV29ya2VyTG9jaywgTFdfRVhDTFVTSVZFKTsKIApAQCAtNjIyLDYgKzcyNSw4IEBA IGxvZ2ljYWxyZXBfd29ya2VyX2NsZWFudXAoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKQogCXdv cmtlci0+dXNlcmlkID0gSW52YWxpZE9pZDsKIAl3b3JrZXItPnN1YmlkID0gSW52YWxpZE9pZDsK IAl3b3JrZXItPnJlbGlkID0gSW52YWxpZE9pZDsKKwl3b3JrZXItPmFwcGx5X2xlYWRlcl9waWQg PSBJbnZhbGlkUGlkOworCXdvcmtlci0+cGFyYWxsZWxfYXBwbHkgPSBmYWxzZTsKIH0KIAogLyoK QEAgLTY1Myw2ICs3NTgsMTIgQEAgbG9naWNhbHJlcF93b3JrZXJfb25leGl0KGludCBjb2RlLCBE YXR1bSBhcmcpCiAJaWYgKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgIT0gTlVM TCkKIAkJRmlsZVNldERlbGV0ZUFsbChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0 KTsKIAorCS8qCisJICogUmVsZWFzZSBhbGwgc2Vzc2lvbiBsZXZlbCBsb2NrcyB0aGF0IGNvdWxk IGJlIGhlbGQgaW4gcGFyYWxsZWwgYXBwbHkKKwkgKiBtb2RlLgorCSAqLworCUxvY2tSZWxlYXNl QWxsKERFRkFVTFRfTE9DS01FVEhPRCwgdHJ1ZSk7CisKIAlBcHBseUxhdW5jaGVyV2FrZXVwKCk7 CiB9CiAKQEAgLTY4MSw2ICs3OTIsMzMgQEAgbG9naWNhbHJlcF9zeW5jX3dvcmtlcl9jb3VudChP aWQgc3ViaWQpCiB9CiAKIC8qCisgKiBDb3VudCB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgKGJ1 dCBub3QgbmVjZXNzYXJpbHkgcnVubmluZykgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlcnMgZm9y IGEgc3Vic2NyaXB0aW9uLgorICovCitpbnQKK2xvZ2ljYWxyZXBfcGFyYWxsZWxfYXBwbHlfd29y a2VyX2NvdW50KE9pZCBzdWJpZCkKK3sKKwlpbnQJCQlpOworCWludAkJCXJlcyA9IDA7CisKKwlB c3NlcnQoTFdMb2NrSGVsZEJ5TWUoTG9naWNhbFJlcFdvcmtlckxvY2spKTsKKworCS8qCisJICog U2NhbiBhbGwgYXR0YWNoZWQgcGFyYWxsZWwgYXBwbHkgd29ya2Vycywgb25seSBjb3VudGluZyB0 aG9zZSB3aGljaAorCSAqIGhhdmUgdGhlIGdpdmVuIHN1YnNjcmlwdGlvbiBpZC4KKwkgKi8KKwlm b3IgKGkgPSAwOyBpIDwgbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczsgaSsrKQorCXsK KwkJTG9naWNhbFJlcFdvcmtlciAqdyA9ICZMb2dpY2FsUmVwQ3R4LT53b3JrZXJzW2ldOworCisJ CWlmICh3LT5zdWJpZCA9PSBzdWJpZCAmJiBpc1BhcmFsbGVsQXBwbHlXb3JrZXIodykpCisJCQly ZXMrKzsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCisvKgogICogQXBwbHlMYXVuY2hlclNobWVt U2l6ZQogICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZvciByZXBsaWNhdGlvbiBsYXVuY2hlciBz aGFyZWQgbWVtb3J5CiAgKi8KQEAgLTg2OSw3ICsxMDA3LDcgQEAgQXBwbHlMYXVuY2hlck1haW4o RGF0dW0gbWFpbl9hcmcpCiAJCQkJCXdhaXRfdGltZSA9IHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRl cnZhbDsKIAogCQkJCQlsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goc3ViLT5kYmlkLCBzdWItPm9p ZCwgc3ViLT5uYW1lLAotCQkJCQkJCQkJCQkgc3ViLT5vd25lciwgSW52YWxpZE9pZCk7CisJCQkJ CQkJCQkJCSBzdWItPm93bmVyLCBJbnZhbGlkT2lkLCBEU01fSEFORExFX0lOVkFMSUQpOwogCQkJ CX0KIAkJCX0KIApAQCAtOTUyLDYgKzEwOTAsMTAgQEAgcGdfc3RhdF9nZXRfc3Vic2NyaXB0aW9u KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWlmIChPaWRJc1ZhbGlkKHN1YmlkKSAmJiB3b3JrZXIuc3Vi aWQgIT0gc3ViaWQpCiAJCQljb250aW51ZTsKIAorCQkvKiBTa2lwIGlmIHRoaXMgaXMgYSBwYXJh bGxlbCBhcHBseSB3b3JrZXIgKi8KKwkJaWYgKGlzUGFyYWxsZWxBcHBseVdvcmtlcigmd29ya2Vy KSkKKwkJCWNvbnRpbnVlOworCiAJCXdvcmtlcl9waWQgPSB3b3JrZXIucHJvYy0+cGlkOwogCiAJ CXZhbHVlc1swXSA9IE9iamVjdElkR2V0RGF0dW0od29ya2VyLnN1YmlkKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCmluZGV4IDc3MzU4M2EuLjI2YmZjMGUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZApAQCAtMSw0 ICsxLDUgQEAKIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKKyAgJ2FwcGx5cGFyYWxsZWx3b3Jr ZXIuYycsCiAgICdkZWNvZGUuYycsCiAgICdsYXVuY2hlci5jJywKICAgJ2xvZ2ljYWwuYycsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYwppbmRleCBmMTM0ZTQ0Li44MGRl YTEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMKQEAgLTEwNzUs MTIgKzEwNzUsMjEgQEAgUmVwbGljYXRpb25PcmlnaW5FeGl0Q2xlYW51cChpbnQgY29kZSwgRGF0 dW0gYXJnKQogICogYXJyYXkgZG9lc24ndCBoYXZlIHRvIGJlIHNlYXJjaGVkIHdoZW4gY2FsbGlu ZwogICogcmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UoKS4KICAqCi0gKiBPYnZpb3VzbHkgb25s eSBvbmUgc3VjaCBjYWNoZWQgb3JpZ2luIGNhbiBleGlzdCBwZXIgcHJvY2VzcyBhbmQgdGhlIGN1 cnJlbnQKKyAqIE5vcm1hbGx5IG9ubHkgb25lIHN1Y2ggY2FjaGVkIG9yaWdpbiBjYW4gZXhpc3Qg cGVyIHByb2Nlc3MgYW5kIHRoZSBjdXJyZW50CiAgKiBjYWNoZWQgdmFsdWUgY2FuIG9ubHkgYmUg c2V0IGFnYWluIGFmdGVyIHRoZSBwcmV2aW91cyB2YWx1ZSBpcyB0b3JuIGRvd24KICAqIHdpdGgg cmVwbG9yaWdpbl9zZXNzaW9uX3Jlc2V0KCkuCisgKgorICogSG93ZXZlciwgaWYgdGhlIGZ1bmN0 aW9uIHBhcmFtZXRlciAnYWNxdWlyZWRfYnknIGlzIG5vdCAwLCB3ZSBhbGxvdyB0aGUKKyAqIHBy b2Nlc3MgdG8gdXNlIHRoZSBzYW1lIHNsb3QgYWxyZWFkeSBhY3F1aXJlZCBieSBhbm90aGVyIHBy b2Nlc3MuIEl0J3Mgc2FmZQorICogYmVjYXVzZSAxKSBUaGUgb25seSBjYWxsZXIgKHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMpIHdpbGwgbWFpbnRhaW4gdGhlCisgKiBjb21taXQgb3JkZXIgYnkgYWxs b3dpbmcgb25seSBvbmUgcHJvY2VzcyB0byBjb21taXQgYXQgYSB0aW1lLCBzbyBubyB0d28KKyAq IHdvcmtlcnMgd2lsbCBiZSBvcGVyYXRpbmcgb24gdGhlIHNhbWUgb3JpZ2luIGF0IHRoZSBzYW1l IHRpbWUgKHNlZSBjb21tZW50cworICogaW4gbG9naWNhbC93b3JrZXIuYykuIDIpIEV2ZW4gdGhv dWdoIHdlIHRyeSB0byBhZHZhbmNlIHRoZSBzZXNzaW9uJ3Mgb3JpZ2luCisgKiBjb25jdXJyZW50 bHksIGl0J3Mgc2FmZSB0byBkbyBzbyBhcyB3ZSBjaGFuZ2UvYWR2YW5jZSB0aGUgc2Vzc2lvbl9v cmlnaW4KKyAqIExTTnMgdW5kZXIgcmVwbGljYXRlX3N0YXRlIExXTG9jay4KICAqLwogdm9pZAot cmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpCityZXBsb3JpZ2luX3Nl c3Npb25fc2V0dXAoUmVwT3JpZ2luSWQgbm9kZSwgaW50IGFjcXVpcmVkX2J5KQogewogCXN0YXRp YyBib29sIHJlZ2lzdGVyZWRfY2xlYW51cDsKIAlpbnQJCQlpOwpAQCAtMTEyMiw3ICsxMTMxLDcg QEAgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpCiAJCWlmIChjdXJz dGF0ZS0+cm9pZGVudCAhPSBub2RlKQogCQkJY29udGludWU7CiAKLQkJZWxzZSBpZiAoY3Vyc3Rh dGUtPmFjcXVpcmVkX2J5ICE9IDApCisJCWVsc2UgaWYgKGN1cnN0YXRlLT5hY3F1aXJlZF9ieSAh PSAwICYmIGFjcXVpcmVkX2J5ID09IDApCiAJCXsKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShl cnJjb2RlKEVSUkNPREVfT0JKRUNUX0lOX1VTRSksCkBAIC0xMTUzLDcgKzExNjIsMTEgQEAgcmVw bG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpCiAKIAlBc3NlcnQoc2Vzc2lv bl9yZXBsaWNhdGlvbl9zdGF0ZS0+cm9pZGVudCAhPSBJbnZhbGlkUmVwT3JpZ2luSWQpOwogCi0J c2Vzc2lvbl9yZXBsaWNhdGlvbl9zdGF0ZS0+YWNxdWlyZWRfYnkgPSBNeVByb2NQaWQ7CisJaWYg KGFjcXVpcmVkX2J5ID09IDApCisJCXNlc3Npb25fcmVwbGljYXRpb25fc3RhdGUtPmFjcXVpcmVk X2J5ID0gTXlQcm9jUGlkOworCWVsc2UgaWYgKHNlc3Npb25fcmVwbGljYXRpb25fc3RhdGUtPmFj cXVpcmVkX2J5ICE9IGFjcXVpcmVkX2J5KQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQg cmVwbGljYXRpb24gc3RhdGUgc2xvdCBmb3IgcmVwbGljYXRpb24iCisJCQkgIm9yaWdpbiB3aXRo IE9JRCAldSB3aGljaCB3YXMgYWNxdWlyZWQgYnkgJWQiLCBub2RlLCBhY3F1aXJlZF9ieSk7CiAK IAlMV0xvY2tSZWxlYXNlKFJlcGxpY2F0aW9uT3JpZ2luTG9jayk7CiAKQEAgLTEzMzcsNyArMTM1 MCw3IEBAIHBnX3JlcGxpY2F0aW9uX29yaWdpbl9zZXNzaW9uX3NldHVwKFBHX0ZVTkNUSU9OX0FS R1MpCiAKIAluYW1lID0gdGV4dF90b19jc3RyaW5nKCh0ZXh0ICopIERhdHVtR2V0UG9pbnRlcihQ R19HRVRBUkdfREFUVU0oMCkpKTsKIAlvcmlnaW4gPSByZXBsb3JpZ2luX2J5X25hbWUobmFtZSwg ZmFsc2UpOwotCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW4pOworCXJlcGxvcmlnaW5f c2Vzc2lvbl9zZXR1cChvcmlnaW4sIDApOwogCiAJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9 IG9yaWdpbjsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9w cm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IGZm ODUxM2UuLmQ2MTYwZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMK QEAgLTExNjMsMTAgKzExNjMsMTQgQEAgbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQoU3Ry aW5nSW5mbyBpbiwgTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKQogLyoKICAqIFdy aXRlIFNUUkVBTSBBQk9SVCB0byB0aGUgb3V0cHV0IHN0cmVhbS4gTm90ZSB0aGF0IHhpZCBhbmQg c3VieGlkIHdpbGwgYmUKICAqIHNhbWUgZm9yIHRoZSB0b3AtbGV2ZWwgdHJhbnNhY3Rpb24gYWJv cnQuCisgKgorICogSWYgd3JpdGVfYWJvcnRfaW5mbyBpcyB0cnVlLCBzZW5kIHRoZSBhYm9ydF9s c24gYW5kIGFib3J0X3RpbWUgZmllbGRzLAorICogb3RoZXJ3aXNlIGRvbid0LgogICovCiB2b2lk CiBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rp b25JZCB4aWQsCi0JCQkJCQkJICBUcmFuc2FjdGlvbklkIHN1YnhpZCkKKwkJCQkJCQkgIFRyYW5z YWN0aW9uSWQgc3VieGlkLCBYTG9nUmVjUHRyIGFib3J0X2xzbiwKKwkJCQkJCQkgIFRpbWVzdGFt cFR6IGFib3J0X3RpbWUsIGJvb2wgd3JpdGVfYWJvcnRfaW5mbykKIHsKIAlwcV9zZW5kYnl0ZShv dXQsIExPR0lDQUxfUkVQX01TR19TVFJFQU1fQUJPUlQpOwogCkBAIC0xMTc1LDE5ICsxMTc5LDQw IEBAIGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gb3V0LCBUcmFuc2Fj dGlvbklkIHhpZCwKIAkvKiB0cmFuc2FjdGlvbiBJRCAqLwogCXBxX3NlbmRpbnQzMihvdXQsIHhp ZCk7CiAJcHFfc2VuZGludDMyKG91dCwgc3VieGlkKTsKKworCWlmICh3cml0ZV9hYm9ydF9pbmZv KQorCXsKKwkJcHFfc2VuZGludDY0KG91dCwgYWJvcnRfbHNuKTsKKwkJcHFfc2VuZGludDY0KG91 dCwgYWJvcnRfdGltZSk7CisJfQogfQogCiAvKgogICogUmVhZCBTVFJFQU0gQUJPUlQgZnJvbSB0 aGUgb3V0cHV0IHN0cmVhbS4KKyAqCisgKiBJZiByZWFkX2Fib3J0X2luZm8gaXMgdHJ1ZSwgcmVh ZCB0aGUgYWJvcnRfbHNuIGFuZCBhYm9ydF90aW1lIGZpZWxkcywKKyAqIG90aGVyd2lzZSBkb24n dC4KICAqLwogdm9pZAotbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIGlu LCBUcmFuc2FjdGlvbklkICp4aWQsCi0JCQkJCQkJIFRyYW5zYWN0aW9uSWQgKnN1YnhpZCkKK2xv Z2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwKKwkJCQkJCQkgTG9naWNh bFJlcFN0cmVhbUFib3J0RGF0YSAqYWJvcnRfZGF0YSwKKwkJCQkJCQkgYm9vbCByZWFkX2Fib3J0 X2luZm8pCiB7Ci0JQXNzZXJ0KHhpZCAmJiBzdWJ4aWQpOworCUFzc2VydChhYm9ydF9kYXRhKTsK KworCWFib3J0X2RhdGEtPnhpZCA9IHBxX2dldG1zZ2ludChpbiwgNCk7CisJYWJvcnRfZGF0YS0+ c3VieGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKIAotCSp4aWQgPSBwcV9nZXRtc2dpbnQoaW4s IDQpOwotCSpzdWJ4aWQgPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCWlmIChyZWFkX2Fib3J0X2lu Zm8pCisJeworCQlhYm9ydF9kYXRhLT5hYm9ydF9sc24gPSBwcV9nZXRtc2dpbnQ2NChpbik7CisJ CWFib3J0X2RhdGEtPmFib3J0X3RpbWUgPSBwcV9nZXRtc2dpbnQ2NChpbik7CisJfQorCWVsc2UK Kwl7CisJCWFib3J0X2RhdGEtPmFib3J0X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlhYm9y dF9kYXRhLT5hYm9ydF90aW1lID0gMDsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDMxZjczODEuLmRlZDQ2YTkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5j CkBAIC0yODQ2LDcgKzI4NDYsOCBAQCBSZW9yZGVyQnVmZmVyRmluaXNoUHJlcGFyZWQoUmVvcmRl ckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogICogZGlzay4KICAqLwogdm9pZAotUmVv cmRlckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExv Z1JlY1B0ciBsc24pCitSZW9yZGVyQnVmZmVyQWJvcnQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5z YWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkgICBUaW1lc3RhbXBUeiBhYm9ydF90 aW1lKQogewogCVJlb3JkZXJCdWZmZXJUWE4gKnR4bjsKIApAQCAtMjg1Nyw2ICsyODU4LDggQEAg UmVvcmRlckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwg WExvZ1JlY1B0ciBsc24pCiAJaWYgKHR4biA9PSBOVUxMKQogCQlyZXR1cm47CiAKKwl0eG4tPnhh Y3RfdGltZS5hYm9ydF90aW1lID0gYWJvcnRfdGltZTsKKwogCS8qIEZvciBzdHJlYW1lZCB0cmFu c2FjdGlvbnMgbm90aWZ5IHRoZSByZW1vdGUgbm9kZSBhYm91dCB0aGUgYWJvcnQuICovCiAJaWYg KHJidHhuX2lzX3N0cmVhbWVkKHR4bikpCiAJewpAQCAtMjkzMSw3ICsyOTM0LDggQEAgUmVvcmRl ckJ1ZmZlckFib3J0T2xkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIG9sZGVzdFJ1 bm5pbmdYaWQpCiAgKiB0byB0aGlzIHhpZCBtaWdodCByZS1jcmVhdGUgdGhlIHRyYW5zYWN0aW9u IGluY29tcGxldGVseS4KICAqLwogdm9pZAotUmVvcmRlckJ1ZmZlckZvcmdldChSZW9yZGVyQnVm ZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQorUmVvcmRlckJ1ZmZl ckZvcmdldChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIg bHNuLAorCQkJCQlUaW1lc3RhbXBUeiBhYm9ydF90aW1lKQogewogCVJlb3JkZXJCdWZmZXJUWE4g KnR4bjsKIApAQCAtMjk0Miw2ICsyOTQ2LDggQEAgUmVvcmRlckJ1ZmZlckZvcmdldChSZW9yZGVy QnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCWlmICh0eG4g PT0gTlVMTCkKIAkJcmV0dXJuOwogCisJdHhuLT54YWN0X3RpbWUuYWJvcnRfdGltZSA9IGFib3J0 X3RpbWU7CisKIAkvKiBGb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25zIG5vdGlmeSB0aGUgcmVtb3Rl IG5vZGUgYWJvdXQgdGhlIGFib3J0LiAqLwogCWlmIChyYnR4bl9pc19zdHJlYW1lZCh0eG4pKQog CQlyYi0+c3RyZWFtX2Fib3J0KHJiLCB0eG4sIGxzbik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCA5NGU4MTNhLi42NDRkNWUwIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTE0LDcgKzE0LDcgQEAK ICAqCSAgVGhlIGluaXRpYWwgZGF0YSBzeW5jaHJvbml6YXRpb24gaXMgZG9uZSBzZXBhcmF0ZWx5 IGZvciBlYWNoIHRhYmxlLAogICoJICBpbiBhIHNlcGFyYXRlIGFwcGx5IHdvcmtlciB0aGF0IG9u bHkgZmV0Y2hlcyB0aGUgaW5pdGlhbCBzbmFwc2hvdCBkYXRhCiAgKgkgIGZyb20gdGhlIHB1Ymxp c2hlciBhbmQgdGhlbiBzeW5jaHJvbml6ZXMgdGhlIHBvc2l0aW9uIGluIHRoZSBzdHJlYW0gd2l0 aAotICoJICB0aGUgbWFpbiBhcHBseSB3b3JrZXIuCisgKgkgIHRoZSBsZWFkZXIgYXBwbHkgd29y a2VyLgogICoKICAqCSAgVGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucyBmb3IgZG9pbmcgdGhlIHN5 bmNocm9uaXphdGlvbiB0aGlzIHdheToKICAqCSAgIC0gSXQgYWxsb3dzIHVzIHRvIHBhcmFsbGVs aXplIHRoZSBpbml0aWFsIGRhdGEgc3luY2hyb25pemF0aW9uCkBAIC0xNTMsNyArMTUzLDcgQEAg ZmluaXNoX3N5bmNfd29ya2VyKHZvaWQpCiAJCQkJCWdldF9yZWxfbmFtZShNeUxvZ2ljYWxSZXBX b3JrZXItPnJlbGlkKSkpKTsKIAlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAotCS8qIEZp bmQgdGhlIG1haW4gYXBwbHkgd29ya2VyIGFuZCBzaWduYWwgaXQuICovCisJLyogRmluZCB0aGUg bGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgc2lnbmFsIGl0LiAqLwogCWxvZ2ljYWxyZXBfd29ya2Vy X3dha2V1cChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBJbnZhbGlkT2lkKTsKIAogCS8qIFN0 b3AgZ3JhY2VmdWxseSAqLwpAQCAtNjA5LDcgKzYwOSw4IEBAIHByb2Nlc3Nfc3luY2luZ190YWJs ZXNfZm9yX2FwcGx5KFhMb2dSZWNQdHIgY3VycmVudF9sc24pCiAJCQkJCQkJCQkJCQkgTXlTdWJz Y3JpcHRpb24tPm9pZCwKIAkJCQkJCQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+bmFtZSwKIAkJCQkJ CQkJCQkJCSBNeUxvZ2ljYWxSZXBXb3JrZXItPnVzZXJpZCwKLQkJCQkJCQkJCQkJCSByc3RhdGUt PnJlbGlkKTsKKwkJCQkJCQkJCQkJCSByc3RhdGUtPnJlbGlkLAorCQkJCQkJCQkJCQkJIERTTV9I QU5ETEVfSU5WQUxJRCk7CiAJCQkJCQloZW50cnktPmxhc3Rfc3RhcnRfdGltZSA9IG5vdzsKIAkJ CQkJfQogCQkJCX0KQEAgLTYzMCw2ICs2MzEsMTMgQEAgcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19m b3JfYXBwbHkoWExvZ1JlY1B0ciBjdXJyZW50X2xzbikKIHZvaWQKIHByb2Nlc3Nfc3luY2luZ190 YWJsZXMoWExvZ1JlY1B0ciBjdXJyZW50X2xzbikKIHsKKwkvKgorCSAqIFNraXAgZm9yIHBhcmFs bGVsIGFwcGx5IHdvcmtlcnMuIFNlZSBwYV9jYW5fc3RhcnQoKSBmb3IKKwkgKiBkZXRhaWxzLgor CSAqLworCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwkJcmV0dXJuOworCiAJaWYg KGFtX3RhYmxlc3luY193b3JrZXIoKSkKIAkJcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3Jfc3lu YyhjdXJyZW50X2xzbik7CiAJZWxzZQpAQCAtMTI0Nyw3ICsxMjU1LDcgQEAgTG9naWNhbFJlcFN5 bmNUYWJsZVN0YXJ0KFhMb2dSZWNQdHIgKm9yaWdpbl9zdGFydHBvcykKIAogCS8qCiAJICogSGVy ZSB3ZSB1c2UgdGhlIHNsb3QgbmFtZSBpbnN0ZWFkIG9mIHRoZSBzdWJzY3JpcHRpb24gbmFtZSBh cyB0aGUKLQkgKiBhcHBsaWNhdGlvbl9uYW1lLCBzbyB0aGF0IGl0IGlzIGRpZmZlcmVudCBmcm9t IHRoZSBtYWluIGFwcGx5IHdvcmtlciwKKwkgKiBhcHBsaWNhdGlvbl9uYW1lLCBzbyB0aGF0IGl0 IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLAogCSAqIHNvIHRoYXQg c3luY2hyb25vdXMgcmVwbGljYXRpb24gY2FuIGRpc3Rpbmd1aXNoIHRoZW0uCiAJICovCiAJTG9n UmVwV29ya2VyV2FsUmN2Q29ubiA9CkBAIC0xMjk1LDcgKzEzMDMsNyBAQCBMb2dpY2FsUmVwU3lu Y1RhYmxlU3RhcnQoWExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9zKQogCQkgKiB0aW1lIHRoaXMg dGFibGVzeW5jIHdhcyBsYXVuY2hlZC4KIAkJICovCiAJCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9i eV9uYW1lKG9yaWdpbm5hbWUsIGZhbHNlKTsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9y aWdpbmlkKTsKKwkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKIAkJcmVw bG9yaWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOwogCQkqb3JpZ2luX3N0YXJ0cG9zID0g cmVwbG9yaWdpbl9zZXNzaW9uX2dldF9wcm9ncmVzcyhmYWxzZSk7CiAKQEAgLTE0MDYsNyArMTQx NCw3IEBAIExvZ2ljYWxSZXBTeW5jVGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRw b3MpCiAJCQkJCQkgICB0cnVlIC8qIGdvIGJhY2t3YXJkICovICwgdHJ1ZSAvKiBXQUwgbG9nICov ICk7CiAJCVVubG9ja1JlbGF0aW9uT2lkKFJlcGxpY2F0aW9uT3JpZ2luUmVsYXRpb25JZCwgUm93 RXhjbHVzaXZlTG9jayk7CiAKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkKTsK KwkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKIAkJcmVwbG9yaWdpbl9z ZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOwogCX0KIAllbHNlCkBAIC0xNDYxLDggKzE0NjksOCBA QCBjb3B5X3RhYmxlX2RvbmU6CiAJU3BpbkxvY2tSZWxlYXNlKCZNeUxvZ2ljYWxSZXBXb3JrZXIt PnJlbG11dGV4KTsKIAogCS8qCi0JICogRmluYWxseSwgd2FpdCB1bnRpbCB0aGUgbWFpbiBhcHBs eSB3b3JrZXIgdGVsbHMgdXMgdG8gY2F0Y2ggdXAgYW5kIHRoZW4KLQkgKiByZXR1cm4gdG8gbGV0 IExvZ2ljYWxSZXBBcHBseUxvb3AgZG8gaXQuCisJICogRmluYWxseSwgd2FpdCB1bnRpbCB0aGUg bGVhZGVyIGFwcGx5IHdvcmtlciB0ZWxscyB1cyB0byBjYXRjaCB1cCBhbmQKKwkgKiB0aGVuIHJl dHVybiB0byBsZXQgTG9naWNhbFJlcEFwcGx5TG9vcCBkbyBpdC4KIAkgKi8KIAl3YWl0X2Zvcl93 b3JrZXJfc3RhdGVfY2hhbmdlKFNVQlJFTF9TVEFURV9DQVRDSFVQKTsKIAlyZXR1cm4gc2xvdG5h bWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCBlNDhhM2Y1 Li44MTRhNWE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAg LTIyLDggKzIyLDU0IEBACiAgKiBTVFJFQU1FRCBUUkFOU0FDVElPTlMKICAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICogU3RyZWFtZWQgdHJhbnNhY3Rpb25zIChsYXJnZSB0cmFuc2FjdGlvbnMg ZXhjZWVkaW5nIGEgbWVtb3J5IGxpbWl0IG9uIHRoZQotICogdXBzdHJlYW0pIGFyZSBub3QgYXBw bGllZCBpbW1lZGlhdGVseSwgYnV0IGluc3RlYWQsIHRoZSBkYXRhIGlzIHdyaXR0ZW4KLSAqIHRv IHRlbXBvcmFyeSBmaWxlcyBhbmQgdGhlbiBhcHBsaWVkIGF0IG9uY2Ugd2hlbiB0aGUgZmluYWwg Y29tbWl0IGFycml2ZXMuCisgKiB1cHN0cmVhbSkgYXJlIGFwcGxpZWQgdXNpbmcgb25lIG9mIHR3 byBhcHByb2FjaGVzOgorICoKKyAqIDEpIFBhcmFsbGVsIGFwcGx5IHdvcmtlcnMKKyAqCisgKiBJ ZiBzdHJlYW1pbmcgPSBwYXJhbGxlbCwgd2UgYXNzaWduIGEgbmV3IHBhcmFsbGVsIGFwcGx5IHdv cmtlciAoaWYKKyAqIGF2YWlsYWJsZSkgYXMgc29vbiBhcyB0aGUgeGFjdCdzIGZpcnN0IHN0cmVh bSBpcyByZWNlaXZlZC4gVGhlIGxlYWRlciBhcHBseQorICogd29ya2VyIHdpbGwgc2VuZCBjaGFu Z2VzIHRvIHRoaXMgbmV3IHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gV2Uga2VlcCB0aGlzCisg KiB3b3JrZXIgYXNzaWduZWQgdGlsbCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHJlY2VpdmVk IGFuZCBhbHNvIHdhaXQgZm9yCisgKiB0aGUgd29ya2VyIHRvIGZpbmlzaCBhdCBjb21taXQuIFRo aXMgcHJlc2VydmVzIGNvbW1pdCBvcmRlcmluZyBhbmQgYXZvaWRzCisgKiBmaWxlIEkvTyBpbiBt b3N0IGNhc2VzLCBhbHRob3VnaCB3ZSBzdGlsbCBuZWVkIHRvIHNwaWxsIHRvIGEgZmlsZSBpZiB0 aGVyZQorICogaXMgbm8gd29ya2VyIGF2YWlsYWJsZS4gSXQgaXMgaW1wb3J0YW50IHRvIG1haW50 YWluIGNvbW1pdCBvcmRlciB0byBhdm9pZAorICogZmFpbHVyZXMgZHVlIHRvIChhKSB0cmFuc2Fj dGlvbiBkZXBlbmRlbmNpZXMsIHNheSBpZiB3ZSBpbnNlcnQgYSByb3cgaW4gdGhlCisgKiBmaXJz dCB0cmFuc2FjdGlvbiBhbmQgdXBkYXRlIGl0IGluIHRoZSBzZWNvbmQgdHJhbnNhY3Rpb24gdGhl biBhbGxvd2luZyB0bworICogYXBwbHkgYm90aCBpbiBwYXJhbGxlbCBjYW4gbGVhZCB0byBmYWls dXJlIGluIHRoZSB1cGRhdGUuIChiKSBkZWFkbG9ja3MsCisgKiBhbGxvd2luZyB0cmFuc2FjdGlv bnMgdGhhdCB1cGRhdGUgdGhlIHNhbWUgc2V0IG9mIHJvd3MvdGFibGVzIGluIG9wcG9zaXRlCisg KiBvcmRlciB0byBiZSBhcHBsaWVkIGluIHBhcmFsbGVsIGNhbiBsZWFkIHRvIGRlYWRsb2Nrcy4K KyAqCisgKiBXZSBtYWludGFpbiBhIHdvcmtlciBwb29sIHRvIGF2b2lkIHJlc3RhcnRpbmcgd29y a2VycyBmb3IgZWFjaCBzdHJlYW1pbmcKKyAqIHRyYW5zYWN0aW9uLiBXZSBtYWludGFpbiBlYWNo IHdvcmtlcidzIGluZm9ybWF0aW9uIGluIHRoZQorICogUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0 LiBBZnRlciBzdWNjZXNzZnVsbHkgbGF1bmNoaW5nIGEgbmV3IHdvcmtlciwgaXRzCisgKiBpbmZv cm1hdGlvbiBpcyBhZGRlZCB0byB0aGUgUGFyYWxsZWxBcHBseVdvcmtlcnNMaXN0LiBPbmNlIHRo ZSB3b3JrZXIKKyAqIGZpbmlzaGVzIGFwcGx5aW5nIHRoZSB0cmFuc2FjdGlvbiwgd2UgbWFyayBp dCBhdmFpbGFibGUgZm9yIHJlLXVzZS4gTm93LAorICogYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IHdv cmtlciB0byBhcHBseSB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCB3ZSBjaGVjaworICogdGhl IGxpc3QgZm9yIGFueSBhdmFpbGFibGUgd29ya2VyLiBOb3RlIHRoYXQgd2UgbWFpbnRhaW4gYSBt YXhpbXVtIG9mIGhhbGYKKyAqIHRoZSBtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vi c2NyaXB0aW9uIHdvcmtlcnMgaW4gdGhlIHBvb2wgYW5kCisgKiBhZnRlciB0aGF0LCB3ZSBzaW1w bHkgZXhpdCB0aGUgd29ya2VyIGFmdGVyIGFwcGx5aW5nIHRoZSB0cmFuc2FjdGlvbi4KKyAqCisg KiBYWFggVGhpcyB3b3JrZXIgcG9vbCB0aHJlc2hvbGQgaXMgYSBiaXQgYXJiaXRyYXJ5IGFuZCB3 ZSBjYW4gcHJvdmlkZSBhIEdVQworICogdmFyaWFibGUgZm9yIHRoaXMgaW4gdGhlIGZ1dHVyZSBp ZiByZXF1aXJlZC4KKyAqCisgKiBUaGUgbGVhZGVyIGFwcGx5IHdvcmtlciB3aWxsIGNyZWF0ZSBz ZXBhcmF0ZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudAorICogd2hlbiBlYWNoIHBhcmFs bGVsIGFwcGx5IHdvcmtlciBzdGFydHMuIFRoZSByZWFzb24gZm9yIHRoaXMgZGVzaWduIGlzIHRo YXQKKyAqIHdlIGNhbm5vdCBjb3VudCBob3cgbWFueSB3b3JrZXJzIHdpbGwgYmUgc3RhcnRlZC4g SXQgbWF5IGJlIHBvc3NpYmxlIHRvCisgKiBhbGxvY2F0ZSBlbm91Z2ggc2hhcmVkIG1lbW9yeSBp biBvbmUgc2VnbWVudCBiYXNlZCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YKKyAqIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMgKG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRp b24pLCBidXQgdGhpcworICogd291bGQgd2FzdGUgbWVtb3J5IGlmIG5vIHByb2Nlc3MgaXMgYWN0 dWFsbHkgc3RhcnRlZC4KKyAqCisgKiBUaGUgZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQg d2lsbCBjb250YWluIChhKSBhIHNobV9tcSB0aGF0IGlzIHVzZWQgdG8KKyAqIHNlbmQgY2hhbmdl cyBpbiB0aGUgdHJhbnNhY3Rpb24gZnJvbSBsZWFkZXIgYXBwbHkgd29ya2VyIHRvIHBhcmFsbGVs IGFwcGx5CisgKiB3b3JrZXIgKGIpIGFub3RoZXIgc2htX21xIHRoYXQgaXMgdXNlZCB0byBzZW5k IGVycm9ycyAoYW5kIG90aGVyIG1lc3NhZ2VzCisgKiByZXBvcnRlZCB2aWEgZWxvZy9lcmVwb3J0 KSBmcm9tIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8gbGVhZGVyIGFwcGx5CisgKiB3b3Jr ZXIgKGMpIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBiZSBzaGFyZWQgYW1vbmcgcGFyYWxsZWwg YXBwbHkgd29ya2VycworICogYW5kIGxlYWRlciBhcHBseSB3b3JrZXIgKGkuZS4gbWVtYmVycyBv ZiBQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkKS4KKyAqCisgKiBJZiBubyBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgaXMgYXZhaWxhYmxlIHRvIGhhbmRsZSB0aGUgc3RyZWFtZWQgdHJhbnNhY3Rpb24K KyAqIHdlIGZvbGxvdyBhcHByb2FjaCAyLgorICoKKyAqIDIpIFdyaXRlIHRvIHRlbXBvcmFyeSBm aWxlcyBhbmQgYXBwbHkgd2hlbiB0aGUgZmluYWwgY29tbWl0IGFycml2ZXMKICAqCiAgKiBVbmxp a2UgdGhlIHJlZ3VsYXIgKG5vbi1zdHJlYW1lZCkgY2FzZSwgaGFuZGxpbmcgc3RyZWFtZWQgdHJh bnNhY3Rpb25zIGhhcwogICogdG8gaGFuZGxlIGFib3J0cyBvZiBib3RoIHRoZSB0b3BsZXZlbCB0 cmFuc2FjdGlvbiBhbmQgc3VidHJhbnNhY3Rpb25zLiBUaGlzCkBAIC0yMTksMjAgKzI2NSwzOSBA QCB0eXBlZGVmIHN0cnVjdCBBcHBseUV4ZWN1dGlvbkRhdGEKIAlQYXJ0aXRpb25UdXBsZVJvdXRp bmcgKnByb3V0ZTsJLyogcGFydGl0aW9uIHJvdXRpbmcgaW5mbyAqLwogfSBBcHBseUV4ZWN1dGlv bkRhdGE7CiAKLS8qIFN0cnVjdCBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgYXBwbHkgZXJyY29u dGV4dCBpbmZvcm1hdGlvbiAqLwotdHlwZWRlZiBzdHJ1Y3QgQXBwbHlFcnJvckNhbGxiYWNrQXJn CisvKgorICogV2hhdCBhY3Rpb24gdG8gdGFrZSBmb3IgdGhlIHRyYW5zYWN0aW9uLgorICoKKyAq IFRSQU5TX0xFQURFUl9BUFBMWToKKyAqIFRoZSBhY3Rpb24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4g dGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIGNoYW5nZXMgb2YgdGhlCisgKiB0cmFuc2FjdGlv biBhcmUgYXBwbGllZCBkaXJlY3RseSBpbiB0aGUgd29ya2VyLgorICoKKyAqIFRSQU5TX0xFQURF Ul9TRVJJQUxJWkU6CisgKiBJdCBtZWFucyB0aGF0IHdlIGFyZSBpbiB0aGUgbGVhZGVyIGFwcGx5 IHdvcmtlciBvciB0YWJsZSBzeW5jIHdvcmtlci4KKyAqIENoYW5nZXMgYXJlIHdyaXR0ZW4gdG8g dGVtcG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgd2hlbiB0aGUgZmluYWwKKyAqIGNvbW1p dCBhcnJpdmVzLgorICoKKyAqIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgorICogVGhl IGFjdGlvbiBtZWFucyB0aGF0IHdlIGFyZSBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQg bmVlZCB0byBzZW5kIHRoZQorICogY2hhbmdlcyB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vy LgorICoKKyAqIFRSQU5TX1BBUkFMTEVMX0FQUExZOgorICogVGhlIGFjdGlvbiB0aGF0IHdlIGFy ZSBpbiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGFuZCBjaGFuZ2VzIG9mIHRoZQorICogdHJh bnNhY3Rpb24gYXJlIGFwcGxpZWQgZGlyZWN0bHkgaW4gdGhlIHdvcmtlci4KKyAqLwordHlwZWRl ZiBlbnVtCiB7Ci0JTG9naWNhbFJlcE1zZ1R5cGUgY29tbWFuZDsJLyogMCBpZiBpbnZhbGlkICov Ci0JTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWw7CisJLyogVGhlIGFjdGlvbiBmb3Igbm9uLXN0 cmVhbWluZyB0cmFuc2FjdGlvbnMuICovCisJVFJBTlNfTEVBREVSX0FQUExZLAogCi0JLyogUmVt b3RlIG5vZGUgaW5mb3JtYXRpb24gKi8KLQlpbnQJCQlyZW1vdGVfYXR0bnVtOwkvKiAtMSBpZiBp bnZhbGlkICovCi0JVHJhbnNhY3Rpb25JZCByZW1vdGVfeGlkOwotCVhMb2dSZWNQdHIJZmluaXNo X2xzbjsKLQljaGFyCSAgICpvcmlnaW5fbmFtZTsKLX0gQXBwbHlFcnJvckNhbGxiYWNrQXJnOwor CS8qIEFjdGlvbnMgZm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMuICovCisJVFJBTlNfTEVBREVS X1NFUklBTElaRSwKKwlUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTCwKKwlUUkFOU19QQVJB TExFTF9BUFBMWQorfSBUcmFuc0FwcGx5QWN0aW9uOwogCi1zdGF0aWMgQXBwbHlFcnJvckNhbGxi YWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZyA9CisvKiBlcnJjb250ZXh0IHRyYWNrZXIg Ki8KK0FwcGx5RXJyb3JDYWxsYmFja0FyZyBhcHBseV9lcnJvcl9jYWxsYmFja19hcmcgPQogewog CS5jb21tYW5kID0gMCwKIAkucmVsID0gTlVMTCwKQEAgLTI0Miw3ICszMDcsOSBAQCBzdGF0aWMg QXBwbHlFcnJvckNhbGxiYWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZyA9CiAJLm9yaWdp bl9uYW1lID0gTlVMTCwKIH07CiAKLXN0YXRpYyBNZW1vcnlDb250ZXh0IEFwcGx5TWVzc2FnZUNv bnRleHQgPSBOVUxMOworRXJyb3JDb250ZXh0Q2FsbGJhY2sgKmFwcGx5X2Vycm9yX2NvbnRleHRf c3RhY2sgPSBOVUxMOworCitNZW1vcnlDb250ZXh0IEFwcGx5TWVzc2FnZUNvbnRleHQgPSBOVUxM OwogTWVtb3J5Q29udGV4dCBBcHBseUNvbnRleHQgPSBOVUxMOwogCiAvKiBwZXIgc3RyZWFtIGNv bnRleHQgZm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgKi8KQEAgLTI1MSwyNyArMzE4LDM2IEBA IHN0YXRpYyBNZW1vcnlDb250ZXh0IExvZ2ljYWxTdHJlYW1pbmdDb250ZXh0ID0gTlVMTDsKIFdh bFJlY2VpdmVyQ29ubiAqTG9nUmVwV29ya2VyV2FsUmN2Q29ubiA9IE5VTEw7CiAKIFN1YnNjcmlw dGlvbiAqTXlTdWJzY3JpcHRpb24gPSBOVUxMOwotc3RhdGljIGJvb2wgTXlTdWJzY3JpcHRpb25W YWxpZCA9IGZhbHNlOworYm9vbAkJTXlTdWJzY3JpcHRpb25WYWxpZCA9IGZhbHNlOwogCiBib29s CQlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsKIHN0YXRpYyBYTG9nUmVjUHRyIHJlbW90 ZV9maW5hbF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAogLyogZmllbGRzIHZhbGlkIG9ubHkg d2hlbiBwcm9jZXNzaW5nIHN0cmVhbWVkIHRyYW5zYWN0aW9uICovCi1zdGF0aWMgYm9vbCBpbl9z dHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOworYm9vbAkJaW5fc3RyZWFtZWRfdHJhbnNhY3Rp b24gPSBmYWxzZTsKIAogc3RhdGljIFRyYW5zYWN0aW9uSWQgc3RyZWFtX3hpZCA9IEludmFsaWRU cmFuc2FjdGlvbklkOwogCiAvKgorICogVGhlIG51bWJlciBvZiBjaGFuZ2VzIGFwcGxpZWQgYnkg cGFyYWxsZWwgYXBwbHkgd29ya2VyIGR1cmluZyBvbmUgc3RyZWFtaW5nCisgKiBibG9jay4KKyAq Lworc3RhdGljIHVpbnQzMiBwYXJhbGxlbF9zdHJlYW1fbmNoYW5nZXMgPSAwOworCisvKgogICog V2UgZW5hYmxlIHNraXBwaW5nIGFsbCBkYXRhIG1vZGlmaWNhdGlvbiBjaGFuZ2VzIChJTlNFUlQs IFVQREFURSwgZXRjLikgZm9yCiAgKiB0aGUgc3Vic2NyaXB0aW9uIGlmIHRoZSByZW1vdGUgdHJh bnNhY3Rpb24ncyBmaW5pc2ggTFNOIG1hdGNoZXMgdGhlIHN1YnNraXBsc24uCiAgKiBPbmNlIHdl IHN0YXJ0IHNraXBwaW5nIGNoYW5nZXMsIHdlIGRvbid0IHN0b3AgaXQgdW50aWwgd2Ugc2tpcCBh bGwgY2hhbmdlcyBvZgogICogdGhlIHRyYW5zYWN0aW9uIGV2ZW4gaWYgcGdfc3Vic2NyaXB0aW9u IGlzIHVwZGF0ZWQgYW5kIE15U3Vic2NyaXB0aW9uLT5za2lwbHNuCi0gKiBnZXRzIGNoYW5nZWQg b3IgcmVzZXQgZHVyaW5nIHRoYXQuIEFsc28sIGluIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBjYXNl cywgd2UKLSAqIGRvbid0IHNraXAgcmVjZWl2aW5nIGFuZCBzcG9vbGluZyB0aGUgY2hhbmdlcyBz aW5jZSB3ZSBkZWNpZGUgd2hldGhlciBvciBub3QKKyAqIGdldHMgY2hhbmdlZCBvciByZXNldCBk dXJpbmcgdGhhdC4gQWxzbywgaW4gc3RyZWFtaW5nIHRyYW5zYWN0aW9uIGNhc2VzIChzdHJlYW1p bmcgPSBvbiksCisgKiB3ZSBkb24ndCBza2lwIHJlY2VpdmluZyBhbmQgc3Bvb2xpbmcgdGhlIGNo YW5nZXMgc2luY2Ugd2UgZGVjaWRlIHdoZXRoZXIgb3Igbm90CiAgKiB0byBza2lwIGFwcGx5aW5n IHRoZSBjaGFuZ2VzIHdoZW4gc3RhcnRpbmcgdG8gYXBwbHkgY2hhbmdlcy4gVGhlIHN1YnNraXBs c24gaXMKICAqIGNsZWFyZWQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHNraXBwaW5nIHRoZSB0cmFuc2Fj dGlvbiBvciBhcHBseWluZyBub24tZW1wdHkKICAqIHRyYW5zYWN0aW9uLiBUaGUgbGF0dGVyIHBy ZXZlbnRzIHRoZSBtaXN0YWtlbmx5IHNwZWNpZmllZCBzdWJza2lwbHNuIGZyb20KLSAqIGJlaW5n IGxlZnQuCisgKiBiZWluZyBsZWZ0LiBOb3RlIHRoYXQgd2UgY2Fubm90IHNraXAgdGhlIHN0cmVh bWluZyB0cmFuc2FjdGlvbnMgd2hlbiB1c2luZworICogcGFyYWxsZWwgYXBwbHkgd29ya2VycyBi ZWNhdXNlIHdlIGNhbm5vdCBnZXQgdGhlIGZpbmlzaCBMU04gYmVmb3JlIGFwcGx5aW5nCisgKiB0 aGUgY2hhbmdlcy4gU28sIHdlIGRvbid0IHN0YXJ0IHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3aGVu IGZpbmlzaCBMU04gaXMgc2V0CisgKiBieSB0aGUgdXNlci4KICAqLwogc3RhdGljIFhMb2dSZWNQ dHIgc2tpcF94YWN0X2ZpbmlzaF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKICNkZWZpbmUgaXNf c2tpcHBpbmdfY2hhbmdlcygpICh1bmxpa2VseSghWExvZ1JlY1B0cklzSW52YWxpZChza2lwX3hh Y3RfZmluaXNoX2xzbikpKQpAQCAtMzIxLDEzICszOTcsOCBAQCBzdGF0aWMgdm9pZCBzZW5kX2Zl ZWRiYWNrKFhMb2dSZWNQdHIgcmVjdnBvcywgYm9vbCBmb3JjZSwgYm9vbCByZXF1ZXN0UmVwbHkp OwogCiBzdGF0aWMgdm9pZCBzdG9yZV9mbHVzaF9wb3NpdGlvbihYTG9nUmVjUHRyIHJlbW90ZV9s c24pOwogCi1zdGF0aWMgdm9pZCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpOwotCiBz dGF0aWMgdm9pZCBEaXNhYmxlU3Vic2NyaXB0aW9uQW5kRXhpdCh2b2lkKTsKIAotLyogcHJvdG90 eXBlIG5lZWRlZCBiZWNhdXNlIG9mIHN0cmVhbV9jb21taXQgKi8KLXN0YXRpYyB2b2lkIGFwcGx5 X2Rpc3BhdGNoKFN0cmluZ0luZm8gcyk7Ci0KIHN0YXRpYyB2b2lkIGFwcGx5X2hhbmRsZV9jb21t aXRfaW50ZXJuYWwoTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKTsKIHN0YXRpYyB2 b2lkIGFwcGx5X2hhbmRsZV9pbnNlcnRfaW50ZXJuYWwoQXBwbHlFeGVjdXRpb25EYXRhICplZGF0 YSwKIAkJCQkJCQkJCQkgUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywKQEAgLTM2MCwxMCArNDMxLDE0 IEBAIHN0YXRpYyB2b2lkIHN0b3Bfc2tpcHBpbmdfY2hhbmdlcyh2b2lkKTsKIHN0YXRpYyB2b2lk IGNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xzbihYTG9nUmVjUHRyIGZpbmlzaF9sc24pOwogCiAv KiBGdW5jdGlvbnMgZm9yIGFwcGx5IGVycm9yIGNhbGxiYWNrICovCi1zdGF0aWMgdm9pZCBhcHBs eV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOwogc3RhdGljIGlubGluZSB2b2lkIHNldF9hcHBs eV9lcnJvcl9jb250ZXh0X3hhY3QoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKTsK IHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8odm9pZCk7 CiAKK3N0YXRpYyBUcmFuc0FwcGx5QWN0aW9uIGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24o VHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJCQkJCQkJIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZv ICoqd2luZm8pOworCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3dvcmtlcl9uYW1lKHZvaWQpOwor CiAvKgogICogRm9ybSB0aGUgb3JpZ2luIG5hbWUgZm9yIHRoZSBzdWJzY3JpcHRpb24uCiAgKgpA QCAtMzkzLDE5ICs0NjgsNDMgQEAgUmVwbGljYXRpb25PcmlnaW5OYW1lRm9yTG9naWNhbFJlcChP aWQgc3Vib2lkLCBPaWQgcmVsaWQsCiAgKgogICogVGhpcyBpcyBtYWlubHkgbmVlZGVkIGZvciBp bml0aWFsIHJlbGF0aW9uIGRhdGEgc3luYyBhcyB0aGF0IHJ1bnMgaW4KICAqIHNlcGFyYXRlIHdv cmtlciBwcm9jZXNzIHJ1bm5pbmcgaW4gcGFyYWxsZWwgYW5kIHdlIG5lZWQgc29tZSB3YXkgdG8g c2tpcAotICogY2hhbmdlcyBjb21pbmcgdG8gdGhlIG1haW4gYXBwbHkgd29ya2VyIGR1cmluZyB0 aGUgc3luYyBvZiBhIHRhYmxlLgorICogY2hhbmdlcyBjb21pbmcgdG8gdGhlIGxlYWRlciBhcHBs eSB3b3JrZXIgZHVyaW5nIHRoZSBzeW5jIG9mIGEgdGFibGUuCiAgKgogICogTm90ZSB3ZSBuZWVk IHRvIGRvIHNtYWxsZXIgb3IgZXF1YWxzIGNvbXBhcmlzb24gZm9yIFNZTkNET05FIHN0YXRlIGJl Y2F1c2UKICAqIGl0IG1pZ2h0IGhvbGQgcG9zaXRpb24gb2YgZW5kIG9mIGluaXRpYWwgc2xvdCBj b25zaXN0ZW50IHBvaW50IFdBTAogICogcmVjb3JkICsgMSAoaWUgc3RhcnQgb2YgbmV4dCByZWNv cmQpIGFuZCBuZXh0IHJlY29yZCBjYW4gYmUgQ09NTUlUIG9mCiAgKiB0cmFuc2FjdGlvbiB3ZSBh cmUgbm93IHByb2Nlc3NpbmcgKHdoaWNoIGlzIHdoYXQgd2Ugc2V0IHJlbW90ZV9maW5hbF9sc24K ICAqIHRvIGluIGFwcGx5X2hhbmRsZV9iZWdpbikuCisgKgorICogTm90ZSB0aGF0IGZvciBzdHJl YW1pbmcgdHJhbnNhY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGFwcGxpZWQgaW4gdGhlIHBhcmFsbGVs CisgKiBhcHBseSB3b3JrZXIsIHdlIGRpc2FsbG93IGFwcGx5aW5nIGNoYW5nZXMgb24gYSB0YWJs ZSB0aGF0IGlzIG5vdCBpbgorICogdGhlIFJFQURZIHN0YXRlLCBiZWNhdXNlIHdlIGNhbm5vdCBk ZWNpZGUgd2hldGhlciB0byBhcHBseSB0aGUgY2hhbmdlIGFzIHdlCisgKiB3b24ndCBrbm93IHJl bW90ZV9maW5hbF9sc24gYnkgdGhhdCB0aW1lLgorICoKKyAqIFdlIGFscmVhZHkgY2hlY2tlZCB0 aGlzIGluIHBhX2Nhbl9zdGFydCgpIGJlZm9yZSBhc3NpZ25pbmcgdGhlCisgKiBzdHJlYW1pbmcg dHJhbnNhY3Rpb24gdG8gdGhlIHBhcmFsbGVsIHdvcmtlciwgYnV0IGl0IGFsc28gbmVlZHMgdG8g YmUKKyAqIGNoZWNrZWQgaGVyZSBiZWNhdXNlIGlmIHRoZSB1c2VyIGV4ZWN1dGVzIEFMVEVSIFNV QlNDUklQVElPTiAuLi4gUkVGUkVTSAorICogUFVCTElDQVRJT04gaW4gcGFyYWxsZWwsIHRoZSBu ZXcgdGFibGUgY2FuIGJlIGFkZGVkIHRvIHBnX3N1YnNjcmlwdGlvbl9yZWwKKyAqIHdoaWxlIGFw cGx5aW5nIHRoaXMgdHJhbnNhY3Rpb24uCiAgKi8KIHN0YXRpYyBib29sCiBzaG91bGRfYXBwbHlf Y2hhbmdlc19mb3JfcmVsKExvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsKQogewogCWlmIChhbV90 YWJsZXN5bmNfd29ya2VyKCkpCiAJCXJldHVybiBNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkID09 IHJlbC0+bG9jYWxyZWxvaWQ7CisJZWxzZSBpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkp CisJeworCQlpZiAocmVsLT5zdGF0ZSAhPSBTVUJSRUxfU1RBVEVfUkVBRFkpCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRF X1NUQVRFKSwKKwkJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGxvZ2lj YWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJCSBlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRp b24gXCIlc1wiIHdpbGwgc3RvcCIsCisJCQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15U3Vic2Ny aXB0aW9uLT5uYW1lKSwKKwkJCQkJIGVycmRldGFpbCgiQ2Fubm90IGhhbmRsZSBzdHJlYW1lZCBy ZXBsaWNhdGlvbiB0cmFuc2FjdGlvbnMgdXNpbmcgcGFyYWxsZWwgIgorCQkJCQkJCSAgICJhcHBs eSB3b3JrZXJzIHVudGlsIGFsbCB0YWJsZXMgaGF2ZSBiZWVuIHN5bmNocm9uaXplZC4iKSkpOwor CisJCXJldHVybiB0cnVlOworCX0KIAllbHNlCiAJCXJldHVybiAocmVsLT5zdGF0ZSA9PSBTVUJS RUxfU1RBVEVfUkVBRFkgfHwKIAkJCQkocmVsLT5zdGF0ZSA9PSBTVUJSRUxfU1RBVEVfU1lOQ0RP TkUgJiYKQEAgLTQ1MSw0MyArNTUwLDg2IEBAIGVuZF9yZXBsaWNhdGlvbl9zdGVwKHZvaWQpCiB9 CiAKIC8qCi0gKiBIYW5kbGUgc3RyZWFtZWQgdHJhbnNhY3Rpb25zLgorICogSGFuZGxlIHN0cmVh bWVkIHRyYW5zYWN0aW9ucyBmb3IgYm90aCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgdGhl IHBhcmFsbGVsCisgKiBhcHBseSB3b3JrZXJzLgorICoKKyAqIEluIHN0cmVhbWluZyBjYXNlIChy ZWNlaXZpbmcgYSBibG9jayBvZiBzdHJlYW1lZCB0cmFuc2FjdGlvbiksIGZvcgorICogU1VCU1RS RUFNX09OIG1vZGUsIHNpbXBseSByZWRpcmVjdCBpdCB0byBhIGZpbGUgZm9yIHRoZSBwcm9wZXIg dG9wbGV2ZWwKKyAqIHRyYW5zYWN0aW9uLCBhbmQgZm9yIFNVQlNUUkVBTV9QQVJBTExFTCBtb2Rl LCBzZW5kIHRoZSBjaGFuZ2VzIHRvIHBhcmFsbGVsCisgKiBhcHBseSB3b3JrZXJzIChMT0dJQ0FM X1JFUF9NU0dfUkVMQVRJT04gb3IgTE9HSUNBTF9SRVBfTVNHX1RZUEUgY2hhbmdlcworICogd2ls bCBiZSBhcHBsaWVkIGJ5IGJvdGggbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFyYWxsZWwgYXBw bHkgd29ya2VycykuCiAgKgotICogSWYgaW4gc3RyZWFtaW5nIG1vZGUgKHJlY2VpdmluZyBhIGJs b2NrIG9mIHN0cmVhbWVkIHRyYW5zYWN0aW9uKSwgd2UKLSAqIHNpbXBseSByZWRpcmVjdCBpdCB0 byBhIGZpbGUgZm9yIHRoZSBwcm9wZXIgdG9wbGV2ZWwgdHJhbnNhY3Rpb24uCisgKiBGb3Igbm9u LXN0cmVhbWVkIHRyYW5zYWN0aW9ucywgcmV0dXJucyBmYWxzZS4KKyAqIEZvciBzdHJlYW1lZCB0 cmFuc2FjdGlvbnMsIHJldHVybnMgdHJ1ZSBpZiBpbiBsZWFkZXIgYXBwbHkgd29ya2VyLCBmYWxz ZQorICogb3RoZXJ3aXNlLgogICoKLSAqIFJldHVybnMgdHJ1ZSBmb3Igc3RyZWFtZWQgdHJhbnNh Y3Rpb25zLCBmYWxzZSBvdGhlcndpc2UgKHJlZ3VsYXIgbW9kZSkuCisgKiBFeGNlcHRpb246IElm IHRoZSBtZXNzYWdlIGJlaW5nIHByb2Nlc3NlZCBpcyBMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04K KyAqIG9yIExPR0lDQUxfUkVQX01TR19UWVBFLCByZXR1cm4gZmFsc2UgZXZlbiBpZiB0aGUgbWVz c2FnZSBuZWVkcyB0byBiZSBzZW50CisgKiB0byBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KICAq Lwogc3RhdGljIGJvb2wKIGhhbmRsZV9zdHJlYW1lZF90cmFuc2FjdGlvbihMb2dpY2FsUmVwTXNn VHlwZSBhY3Rpb24sIFN0cmluZ0luZm8gcykKIHsKLQlUcmFuc2FjdGlvbklkIHhpZDsKKwlUcmFu c2FjdGlvbklkIGN1cnJlbnRfeGlkOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsK KwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKKworCWFwcGx5X2FjdGlvbiA9IGdldF90 cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oc3RyZWFtX3hpZCwgJndpbmZvKTsKIAogCS8qIG5vdCBp biBzdHJlYW1pbmcgbW9kZSAqLwotCWlmICghaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCisJaWYg KGFwcGx5X2FjdGlvbiA9PSBUUkFOU19MRUFERVJfQVBQTFkpCiAJCXJldHVybiBmYWxzZTsKIAot CUFzc2VydChzdHJlYW1fZmQgIT0gTlVMTCk7CiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlk KHN0cmVhbV94aWQpKTsKIAogCS8qCiAJICogV2Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgWElEIG9m IHRoZSBzdWJ4YWN0IGFzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZQogCSAqIG1lc3NhZ2UsIHNvIGV4 dHJhY3QgaXQuCiAJICovCi0JeGlkID0gcHFfZ2V0bXNnaW50KHMsIDQpOworCWN1cnJlbnRfeGlk ID0gcHFfZ2V0bXNnaW50KHMsIDQpOwogCi0JaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQp KQorCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoY3VycmVudF94aWQpKQogCQllcmVwb3J0KEVS Uk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKIAkJCQkgZXJy bXNnX2ludGVybmFsKCJpbnZhbGlkIHRyYW5zYWN0aW9uIElEIGluIHN0cmVhbWVkIHJlcGxpY2F0 aW9uIHRyYW5zYWN0aW9uIikpKTsKIAotCS8qIEFkZCB0aGUgbmV3IHN1YnhhY3QgdG8gdGhlIGFy cmF5ICh1bmxlc3MgYWxyZWFkeSB0aGVyZSkuICovCi0Jc3VieGFjdF9pbmZvX2FkZCh4aWQpOwor CXN3aXRjaCAoYXBwbHlfYWN0aW9uKQorCXsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VSSUFMSVpF OgorCQkJQXNzZXJ0KHN0cmVhbV9mZCAhPSBOVUxMKTsKKworCQkJLyogQWRkIHRoZSBuZXcgc3Vi eGFjdCB0byB0aGUgYXJyYXkgKHVubGVzcyBhbHJlYWR5IHRoZXJlKS4gKi8KKwkJCXN1YnhhY3Rf aW5mb19hZGQoY3VycmVudF94aWQpOwogCi0JLyogd3JpdGUgdGhlIGNoYW5nZSB0byB0aGUgY3Vy cmVudCBmaWxlICovCi0Jc3RyZWFtX3dyaXRlX2NoYW5nZShhY3Rpb24sIHMpOworCQkJLyogV3Jp dGUgdGhlIGNoYW5nZSB0byB0aGUgY3VycmVudCBmaWxlICovCisJCQlzdHJlYW1fd3JpdGVfY2hh bmdlKGFjdGlvbiwgcyk7CisJCQlyZXR1cm4gdHJ1ZTsKIAotCXJldHVybiB0cnVlOworCQljYXNl IFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJ cGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpOworCisJCQkvKgorCQkJICogWFhY IFRoZSBwdWJsaXNoZXIgc2lkZSBkb2Vzbid0IGFsd2F5cyBzZW5kIHJlbGF0aW9uL3R5cGUgdXBk YXRlCisJCQkgKiBtZXNzYWdlcyBhZnRlciB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLCBzbyBh bHNvIHVwZGF0ZSB0aGUKKwkJCSAqIHJlbGF0aW9uL3R5cGUgaW4gbGVhZGVyIGFwcGx5IHdvcmtl ci4gU2VlIGZ1bmN0aW9uCisJCQkgKiBjbGVhbnVwX3JlbF9zeW5jX2NhY2hlLgorCQkJICovCisJ CQlyZXR1cm4gKGFjdGlvbiAhPSBMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gJiYKKwkJCQkJYWN0 aW9uICE9IExPR0lDQUxfUkVQX01TR19UWVBFKTsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQ UExZOgorCQkJcGFyYWxsZWxfc3RyZWFtX25jaGFuZ2VzICs9IDE7CisKKwkJCS8qIERlZmluZSBh IHNhdmVwb2ludCBmb3IgYSBzdWJ4YWN0IGlmIG5lZWRlZC4gKi8KKwkJCXBhX3N0YXJ0X3N1YnRy YW5zKGN1cnJlbnRfeGlkLCBzdHJlYW1feGlkKTsKKwkJCXJldHVybiBmYWxzZTsKKworCQlkZWZh dWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCXJldHVybiBmYWxzZTsJCS8qIHNpbGVuY2UgY29t cGlsZXIgd2FybmluZyAqLworCX0KIH0KIAogLyoKQEAgLTkyMyw4ICsxMDY1LDExIEBAIGFwcGx5 X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKExvZ2ljYWxSZXBQcmVwYXJlZFR4bkRhdGEgKnByZXBh cmVfZGF0YSkKIAkgKiBCZWdpblRyYW5zYWN0aW9uQmxvY2sgaXMgbmVjZXNzYXJ5IHRvIGJhbGFu Y2UgdGhlIEVuZFRyYW5zYWN0aW9uQmxvY2sKIAkgKiBjYWxsZWQgd2l0aGluIHRoZSBQcmVwYXJl VHJhbnNhY3Rpb25CbG9jayBiZWxvdy4KIAkgKi8KLQlCZWdpblRyYW5zYWN0aW9uQmxvY2soKTsK LQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsgLyogQ29tcGxldGVzIHRoZSBwcmVjZWRpbmcg QmVnaW4gY29tbWFuZC4gKi8KKwlpZiAoIUlzVHJhbnNhY3Rpb25CbG9jaygpKQorCXsKKwkJQmVn aW5UcmFuc2FjdGlvbkJsb2NrKCk7CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOyAvKiBD b21wbGV0ZXMgdGhlIHByZWNlZGluZyBCZWdpbiBjb21tYW5kLiAqLworCX0KIAogCS8qCiAJICog VXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJvbSBjb3Jy ZWN0IHBvc2l0aW9uCkBAIC05OTMsNiArMTEzOCwxMiBAQCBhcHBseV9oYW5kbGVfcHJlcGFyZShT dHJpbmdJbmZvIHMpCiAKIC8qCiAgKiBIYW5kbGUgYSBDT01NSVQgUFJFUEFSRUQgb2YgYSBwcmV2 aW91c2x5IFBSRVBBUkVEIHRyYW5zYWN0aW9uLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBkb24ndCBu ZWVkIHRvIHdhaXQgaGVyZSBpZiB0aGUgdHJhbnNhY3Rpb24gd2FzIHByZXBhcmVkIGluIGEKKyAq IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gSW4gdGhhdCBjYXNlLCB3ZSBoYXZlIGFscmVhZHkgd2Fp dGVkIGZvciB0aGUgcHJlcGFyZQorICogdG8gZmluaXNoIGluIGFwcGx5X2hhbmRsZV9zdHJlYW1f cHJlcGFyZSgpIHdoaWNoIHdpbGwgZW5zdXJlIGFsbCB0aGUKKyAqIG9wZXJhdGlvbnMgaW4gdGhh dCB0cmFuc2FjdGlvbiBoYXZlIGhhcHBlbmVkIGluIHRoZSBzdWJzY3JpYmVyLCBzbyBubworICog Y29uY3VycmVudCB0cmFuc2FjdGlvbiBjYW4gY2F1c2UgZGVhZGxvY2sgb3IgdHJhbnNhY3Rpb24g ZGVwZW5kZW5jeSBpc3N1ZXMuCiAgKi8KIHN0YXRpYyB2b2lkCiBhcHBseV9oYW5kbGVfY29tbWl0 X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKQEAgLTEwMzYsNiArMTE4NywxMiBAQCBhcHBseV9oYW5k bGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIAogLyoKICAqIEhhbmRsZSBhIFJPTExC QUNLIFBSRVBBUkVEIG9mIGEgcHJldmlvdXNseSBQUkVQQVJFRCBUUkFOU0FDVElPTi4KKyAqCisg KiBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGhlcmUgaWYgdGhlIHRyYW5zYWN0aW9u IHdhcyBwcmVwYXJlZCBpbiBhCisgKiBwYXJhbGxlbCBhcHBseSB3b3JrZXIuIEluIHRoYXQgY2Fz ZSwgd2UgaGF2ZSBhbHJlYWR5IHdhaXRlZCBmb3IgdGhlIHByZXBhcmUKKyAqIHRvIGZpbmlzaCBp biBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoKSB3aGljaCB3aWxsIGVuc3VyZSBhbGwgdGhl CisgKiBvcGVyYXRpb25zIGluIHRoYXQgdHJhbnNhY3Rpb24gaGF2ZSBoYXBwZW5lZCBpbiB0aGUg c3Vic2NyaWJlciwgc28gbm8KKyAqIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb24gY2FuIGNhdXNlIGRl YWRsb2NrIG9yIHRyYW5zYWN0aW9uIGRlcGVuZGVuY3kgaXNzdWVzLgogICovCiBzdGF0aWMgdm9p ZAogYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0luZm8gcykKQEAgLTEwODks MTUgKzEyNDYsMTMgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0luZm8g cykKIAogLyoKICAqIEhhbmRsZSBTVFJFQU0gUFJFUEFSRS4KLSAqCi0gKiBMb2dpYyBpcyBpbiB0 d28gcGFydHM6Ci0gKiAxLiBSZXBsYXkgYWxsIHRoZSBzcG9vbGVkIG9wZXJhdGlvbnMKLSAqIDIu IE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkCiAgKi8KIHN0YXRpYyB2b2lkCiBhcHBs eV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBQcmVw YXJlZFR4bkRhdGEgcHJlcGFyZV9kYXRhOworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5m bzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKIAogCWlmIChpbl9zdHJlYW1lZF90 cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTExMTMsMjQgKzEyNjgsODIgQEAgYXBw bHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlYWRf c3RyZWFtX3ByZXBhcmUocywgJnByZXBhcmVfZGF0YSk7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRl eHRfeGFjdChwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCi0J ZWxvZyhERUJVRzEsICJyZWNlaXZlZCBwcmVwYXJlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAl dSIsIHByZXBhcmVfZGF0YS54aWQpOworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9h cHBseV9hY3Rpb24ocHJlcGFyZV9kYXRhLnhpZCwgJndpbmZvKTsKIAotCS8qIFJlcGxheSBhbGwg dGhlIHNwb29sZWQgb3BlcmF0aW9ucy4gKi8KLQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHByZXBh cmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJlX2xzbik7CisJc3dpdGNoIChhcHBseV9h Y3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CiAKLQkvKiBNYXJrIHRo ZSB0cmFuc2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8KLQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRl cm5hbCgmcHJlcGFyZV9kYXRhKTsKKwkJCS8qCisJCQkgKiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJl ZW4gc2VyaWFsaXplZCB0byBmaWxlLCBzbyByZXBsYXkgYWxsIHRoZQorCQkJICogc3Bvb2xlZCBv cGVyYXRpb25zLgorCQkJICovCisJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHByZXBhcmVfZGF0 YS54aWQsIHByZXBhcmVfZGF0YS5wcmVwYXJlX2xzbik7CiAKLQlDb21taXRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKKwkJCS8qIE1hcmsgdGhlIHRyYW5zYWN0aW9uIGFzIHByZXBhcmVkLiAqLworCQkJ YXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CiAKLQlwZ3N0YXRf cmVwb3J0X3N0YXQoZmFsc2UpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQlz dG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJCQlzdG9yZV9mbHVz aF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CiAKLQlpbl9yZW1vdGVfdHJhbnNhY3Rp b24gPSBmYWxzZTsKKwkJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJCQkvKiBV bmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8u ICovCisJCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBw cmVwYXJlX2RhdGEueGlkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfTEVBREVSX1NFTkRf VE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQkvKgorCQkJICogVW5sb2NrIHRo ZSBzaGFyZWQgb2JqZWN0IGxvY2sgc28gdGhhdCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY2FuCisJ CQkgKiBjb250aW51ZSB0byByZWNlaXZlIGFuZCBhcHBseSBjaGFuZ2VzLgorCQkJICovCisJCQlw YV91bmxvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7 CisKKwkJCS8qIFNlbmQgU1RSRUFNIFBSRVBBUkUgbWVzc2FnZSB0byB0aGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyLiAqLworCQkJcGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpOwor CisJCQkvKgorCQkJICogQWZ0ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgcGFyYWxsZWwgYXBw bHkgd29ya2VyLCB3YWl0IGZvcgorCQkJICogdGhhdCB3b3JrZXIgdG8gZmluaXNoLiBUaGlzIGlz IG5lY2Vzc2FyeSB0byBtYWludGFpbiBjb21taXQKKwkJCSAqIG9yZGVyIHdoaWNoIGF2b2lkcyBm YWlsdXJlcyBkdWUgdG8gdHJhbnNhY3Rpb24gZGVwZW5kZW5jaWVzIGFuZAorCQkJICogZGVhZGxv Y2tzLgorCQkJICovCisJCQlwYV93YWl0X2Zvcl94YWN0X2ZpbmlzaCh3aW5mby0+c2hhcmVkKTsK KwkJCSh2b2lkKSBwYV9mcmVlX3dvcmtlcih3aW5mbywgcHJlcGFyZV9kYXRhLnhpZCk7CisKKwkJ CWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJCQlzdG9yZV9mbHVzaF9wb3NpdGlv bihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFM TEVMX0FQUExZOgorCQkJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOwogCi0JLyogdW5saW5rIHRo ZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBpbmZvLiAqLwotCXN0 cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHByZXBhcmVfZGF0 YS54aWQpOworCQkJLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQuICovCisJCQlh cHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKworCQkJZW5kX3Jl cGxpY2F0aW9uX3N0ZXAoKTsKKworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJ CWxpc3RfZnJlZShzdWJ4YWN0bGlzdCk7CisJCQlzdWJ4YWN0bGlzdCA9IE5JTDsKKworCQkJcGFf c2V0X3hhY3Rfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQp OworCQkJcGFfdW5sb2NrX3RyYW5zYWN0aW9uKE15UGFyYWxsZWxTaGFyZWQtPnhpZCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCQkJZWxvZyhERUJVRzEsICJmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSB0 cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZCIpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJ CUFzc2VydChmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFs c2UpOwogCiAJLyogUHJvY2VzcyBhbnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXpl ZCBpbiBwYXJhbGxlbC4gKi8KIAlwcm9jZXNzX3N5bmNpbmdfdGFibGVzKHByZXBhcmVfZGF0YS5l bmRfbHNuKTsKQEAgLTExNjcsMjggKzEzODAsMjkgQEAgYXBwbHlfaGFuZGxlX29yaWdpbihTdHJp bmdJbmZvIHMpCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiT1JJR0lOIG1lc3NhZ2Ugc2VudCBvdXQg b2Ygb3JkZXIiKSkpOwogfQogCisKKwogLyoKICAqIEhhbmRsZSBTVFJFQU0gU1RBUlQgbWVzc2Fn ZS4KKyAqCisgKiBYWFggV2UgY2FuIGF2b2lkIHNlbmRpbmcgcGFpcnMgb2YgdGhlIFNUQVJUL1NU T1AgbWVzc2FnZXMgdG8gdGhlIHBhcmFsbGVsCisgKiB3b3JrZXIgYmVjYXVzZSB1bmxpa2UgYXBw bHkgd29ya2VyIGl0IHdpbGwgcHJvY2VzcyBvbmx5IG9uZSB0cmFuc2FjdGlvbiBhdCBhCisgKiB0 aW1lLiBIb3dldmVyLCBpdCBpcyBub3QgY2xlYXIgd2hldGhlciBhbnkgb3B0aW1pemF0aW9uIGlz IHdvcnRod2hpbGUKKyAqIGJlY2F1c2UgdGhlc2UgbWVzc2FnZXMgYXJlIHNlbnQgb25seSB3aGVu IHRoZSBsb2dpY2FsX2RlY29kaW5nX3dvcmtfbWVtCisgKiB0aHJlc2hvbGQgaXMgZXhjZWVkZWQu CiAgKi8KIHN0YXRpYyB2b2lkCiBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8g cykKIHsKIAlib29sCQlmaXJzdF9zZWdtZW50OworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3 aW5mbzsKKwlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKIAogCWlmIChpbl9zdHJlYW1l ZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BS T1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiZHVwbGljYXRlIFNUUkVB TSBTVEFSVCBtZXNzYWdlIikpKTsKIAotCS8qCi0JICogU3RhcnQgYSB0cmFuc2FjdGlvbiBvbiBz dHJlYW0gc3RhcnQsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb21taXR0ZWQKLQkgKiBvbiB0 aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEgdGFibGVzeW5jIHdvcmtlciBpbiB3aGljaCBj YXNlIGl0Ci0JICogd2lsbCBiZSBjb21taXR0ZWQgYWZ0ZXIgcHJvY2Vzc2luZyBhbGwgdGhlIG1l c3NhZ2VzLiBXZSBuZWVkIHRoZQotCSAqIHRyYW5zYWN0aW9uIGZvciBoYW5kbGluZyB0aGUgYnVm ZmlsZSwgdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlCi0JICogc3RyZWFtaW5nIGRhdGEgYW5kIHN1 YnhhY3QgaW5mby4KLQkgKi8KLQliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7Ci0KIAkvKiBub3Rp ZnkgaGFuZGxlIG1ldGhvZHMgd2UncmUgcHJvY2Vzc2luZyBhIHJlbW90ZSB0cmFuc2FjdGlvbiAq LwogCWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uID0gdHJ1ZTsKIApAQCAtMTIwMywzNSArMTQxNyw5 OSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykKIAlzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF94YWN0KHN0cmVhbV94aWQsIEludmFsaWRYTG9nUmVjUHRyKTsKIAogCS8q Ci0JICogSW5pdGlhbGl6ZSB0aGUgd29ya2VyJ3Mgc3RyZWFtX2ZpbGVzZXQgaWYgd2UgaGF2ZW4n dCB5ZXQuIFRoaXMgd2lsbCBiZQotCSAqIHVzZWQgZm9yIHRoZSBlbnRpcmUgZHVyYXRpb24gb2Yg dGhlIHdvcmtlciBzbyBjcmVhdGUgaXQgaW4gYSBwZXJtYW5lbnQKLQkgKiBjb250ZXh0LiBXZSBj cmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBmaXJzdCBzdHJlYW1pbmcgbWVzc2FnZSBmcm9tIGFueQot CSAqIHRyYW5zYWN0aW9uIGFuZCB0aGVuIHVzZSBpdCBmb3IgdGhpcyBhbmQgb3RoZXIgc3RyZWFt aW5nIHRyYW5zYWN0aW9ucy4KLQkgKiBOb3csIHdlIGNvdWxkIGNyZWF0ZSBhIGZpbGVzZXQgYXQg dGhlIHN0YXJ0IG9mIHRoZSB3b3JrZXIgYXMgd2VsbCBidXQKLQkgKiB0aGVuIHdlIHdvbid0IGJl IHN1cmUgdGhhdCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkgKiBGb3IgdGhlIGZpcnN0IHN0cmVh bSBzdGFydCwgY2hlY2sgaWYgdGhlcmUgaXMgYW55IGZyZWUgcGFyYWxsZWwgYXBwbHkKKwkgKiB3 b3JrZXIgd2UgY2FuIHVzZSB0byBwcm9jZXNzIHRoaXMgdHJhbnNhY3Rpb24sIG90aGVyd2lzZSB0 cnkgdG8gc3RhcnQgYQorCSAqIG5ldyBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCiAJICovCi0JaWYg KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPT0gTlVMTCkKKwlpZiAoZmlyc3Rf c2VnbWVudCkKKwkJcGFfc3RhcnRfd29ya2VyKHN0cmVhbV94aWQpOworCisJYXBwbHlfYWN0aW9u ID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOworCisJ c3dpdGNoIChhcHBseV9hY3Rpb24pCiAJewotCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwkJY2Fz ZSBUUkFOU19MRUFERVJfU0VSSUFMSVpFOgogCi0JCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhBcHBseUNvbnRleHQpOworCQkJLyoKKwkJCSAqIFN0YXJ0IGEgdHJhbnNhY3Rpb24gb24g c3RyZWFtIHN0YXJ0LCB0aGlzIHRyYW5zYWN0aW9uIHdpbGwgYmUKKwkJCSAqIGNvbW1pdHRlZCBv biB0aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEgdGFibGVzeW5jIHdvcmtlciBpbgorCQkJ ICogd2hpY2ggY2FzZSBpdCB3aWxsIGJlIGNvbW1pdHRlZCBhZnRlciBwcm9jZXNzaW5nIGFsbCB0 aGUKKwkJCSAqIG1lc3NhZ2VzLiBXZSBuZWVkIHRoZSB0cmFuc2FjdGlvbiBmb3IgaGFuZGxpbmcg dGhlIGJ1ZmZpbGUsCisJCQkgKiB1c2VkIGZvciBzZXJpYWxpemluZyB0aGUgc3RyZWFtaW5nIGRh dGEgYW5kIHN1YnhhY3QgaW5mby4KKwkJCSAqLworCQkJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgp OwogCi0JCU15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPSBwYWxsb2Moc2l6ZW9m KEZpbGVTZXQpKTsKLQkJRmlsZVNldEluaXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmls ZXNldCk7CisJCQkvKgorCQkJICogSW5pdGlhbGl6ZSB0aGUgd29ya2VyJ3Mgc3RyZWFtX2ZpbGVz ZXQgaWYgd2UgaGF2ZW4ndCB5ZXQuIFRoaXMKKwkJCSAqIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGVu dGlyZSBkdXJhdGlvbiBvZiB0aGUgd29ya2VyIHNvIGNyZWF0ZSBpdAorCQkJICogaW4gYSBwZXJt YW5lbnQgY29udGV4dC4gV2UgY3JlYXRlIHRoaXMgb24gdGhlIHZlcnkgZmlyc3QKKwkJCSAqIHN0 cmVhbWluZyBtZXNzYWdlIGZyb20gYW55IHRyYW5zYWN0aW9uIGFuZCB0aGVuIHVzZSBpdCBmb3Ig dGhpcworCQkJICogYW5kIG90aGVyIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMuIE5vdywgd2UgY291 bGQgY3JlYXRlIGEKKwkJCSAqIGZpbGVzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3b3JrZXIgYXMg d2VsbCBidXQgdGhlbiB3ZSB3b24ndCBiZQorCQkJICogc3VyZSB0aGF0IGl0IHdpbGwgZXZlciBi ZSB1c2VkLgorCQkJICovCisJCQlpZiAoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNl dCA9PSBOVUxMKQorCQkJeworCQkJCU1lbW9yeUNvbnRleHQgb2xkY3R4OwogCi0JCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjdHgpOwotCX0KKwkJCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oQXBwbHlDb250ZXh0KTsKKworCQkJCU15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2Zp bGVzZXQgPSBwYWxsb2Moc2l6ZW9mKEZpbGVTZXQpKTsKKwkJCQlGaWxlU2V0SW5pdChNeUxvZ2lj YWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0KTsKIAotCS8qIG9wZW4gdGhlIHNwb29sIGZpbGUg Zm9yIHRoaXMgdHJhbnNhY3Rpb24gKi8KLQlzdHJlYW1fb3Blbl9maWxlKE15TG9naWNhbFJlcFdv cmtlci0+c3ViaWQsIHN0cmVhbV94aWQsIGZpcnN0X3NlZ21lbnQpOworCQkJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjdHgpOworCQkJfQogCi0JLyogaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0 IHNlZ21lbnQsIG9wZW4gZXhpc3Rpbmcgc3VieGFjdCBmaWxlICovCi0JaWYgKCFmaXJzdF9zZWdt ZW50KQotCQlzdWJ4YWN0X2luZm9fcmVhZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBzdHJl YW1feGlkKTsKKwkJCS8qIE9wZW4gdGhlIHNwb29sIGZpbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24u ICovCisJCQlzdHJlYW1fb3Blbl9maWxlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVh bV94aWQsIGZpcnN0X3NlZ21lbnQpOwogCi0JcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9S VU5OSU5HLCBOVUxMKTsKKwkJCS8qIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzZWdtZW50LCBv cGVuIGV4aXN0aW5nIHN1YnhhY3QgZmlsZS4gKi8KKwkJCWlmICghZmlyc3Rfc2VnbWVudCkKKwkJ CQlzdWJ4YWN0X2luZm9fcmVhZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlk KTsKIAotCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CisJCQllbmRfcmVwbGljYXRpb25fc3RlcCgp OworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJ CUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJCQkgKiBVbmxvY2sgdGhlIHNoYXJlZCBvYmplY3Qg bG9jayBzbyB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIKKwkJCSAqIGNhbiBjb250aW51 ZSB0byByZWNlaXZlIGNoYW5nZXMuCisJCQkgKi8KKwkJCWlmICghZmlyc3Rfc2VnbWVudCkKKwkJ CQlwYV91bmxvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQtPnhpZCwKKwkJCQkJCQkJCQkJIEFjY2Vz c0V4Y2x1c2l2ZUxvY2spOworCisJCQkvKgorCQkJICogSW5jcmVtZW50IHRoZSBudW1iZXIgb2Yg bWVzc2FnZXMgd2FpdGluZyB0byBiZSBwcm9jZXNzZWQgYnkKKwkJCSAqIHBhcmFsbGVsIGFwcGx5 IHdvcmtlci4KKwkJCSAqLworCQkJcGdfYXRvbWljX2FkZF9mZXRjaF91MzIoJih3aW5mby0+c2hh cmVkLT5wZW5kaW5nX21lc3NhZ2VfY291bnQpLCAxKTsKKworCQkJcGFfc2VuZF9kYXRhKHdpbmZv LCBzLT5sZW4sIHMtPmRhdGEpOworCisJCQkvKiBDYWNoZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29y a2VyIGZvciB0aGlzIHRyYW5zYWN0aW9uLiAqLworCQkJc3RyZWFtX2FwcGx5X3dvcmtlciA9IHdp bmZvOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKwkJCWlmIChm aXJzdF9zZWdtZW50KQorCQkJeworCQkJCS8qIEhvbGQgdGhlIGxvY2sgdW50aWwgdGhlIGVuZCBv ZiB0aGUgdHJhbnNhY3Rpb24uICovCisJCQkJcGFfbG9ja190cmFuc2FjdGlvbihNeVBhcmFsbGVs U2hhcmVkLT54aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJcGFfc2V0X3hhY3Rfc3RhdGUoTXlQ YXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNfU1RBUlRFRCk7CisJCQl9CisKKwkJCXBhcmFs bGVsX3N0cmVhbV9uY2hhbmdlcyA9IDA7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQXNz ZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RB VEVfUlVOTklORywgTlVMTCk7CiB9CiAKIC8qCkBAIC0xMjQwLDU4ICsxNTE4LDk3IEBAIGFwcGx5 X2hhbmRsZV9zdHJlYW1fc3RhcnQoU3RyaW5nSW5mbyBzKQogc3RhdGljIHZvaWQKIGFwcGx5X2hh bmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZvIHMpCiB7CisJUGFyYWxsZWxBcHBseVdvcmtlcklu Zm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOworCiAJaWYgKCFpbl9z dHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJD T0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiU1RSRUFNIFNU T1AgbWVzc2FnZSB3aXRob3V0IFNUUkVBTSBTVEFSVCIpKSk7CiAKLQkvKgotCSAqIENsb3NlIHRo ZSBmaWxlIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzLCBhbmQgc2VyaWFsaXplIGluZm9ybWF0aW9u IGFib3V0Ci0JICogc3VieGFjdHMgZm9yIHRoZSB0b3BsZXZlbCB0cmFuc2FjdGlvbi4KLQkgKi8K LQlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hp ZCk7Ci0Jc3RyZWFtX2Nsb3NlX2ZpbGUoKTsKKwlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rp b25fYXBwbHlfYWN0aW9uKHN0cmVhbV94aWQsICZ3aW5mbyk7CiAKLQkvKiBXZSBtdXN0IGJlIGlu IGEgdmFsaWQgdHJhbnNhY3Rpb24gc3RhdGUgKi8KLQlBc3NlcnQoSXNUcmFuc2FjdGlvblN0YXRl KCkpOworCXN3aXRjaCAoYXBwbHlfYWN0aW9uKQorCXsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VS SUFMSVpFOgogCi0JLyogQ29tbWl0IHRoZSBwZXItc3RyZWFtIHRyYW5zYWN0aW9uICovCi0JQ29t bWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQkvKgorCQkJICogQ2xvc2UgdGhlIGZpbGUgd2l0 aCBzZXJpYWxpemVkIGNoYW5nZXMsIGFuZCBzZXJpYWxpemUKKwkJCSAqIGluZm9ybWF0aW9uIGFi b3V0IHN1YnhhY3RzIGZvciB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24uCisJCQkgKi8KKwkJCXN1 YnhhY3RfaW5mb193cml0ZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlkKTsK KwkJCXN0cmVhbV9jbG9zZV9maWxlKCk7CiAKLQlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZh bHNlOworCQkJLyogV2UgbXVzdCBiZSBpbiBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0YXRlICovCisJ CQlBc3NlcnQoSXNUcmFuc2FjdGlvblN0YXRlKCkpOwogCi0JLyogUmVzZXQgcGVyLXN0cmVhbSBj b250ZXh0ICovCi0JTWVtb3J5Q29udGV4dFJlc2V0KExvZ2ljYWxTdHJlYW1pbmdDb250ZXh0KTsK KwkJCS8qIENvbW1pdCB0aGUgcGVyLXN0cmVhbSB0cmFuc2FjdGlvbiAqLworCQkJQ29tbWl0VHJh bnNhY3Rpb25Db21tYW5kKCk7CisKKwkJCS8qIFJlc2V0IHBlci1zdHJlYW0gY29udGV4dCAqLwor CQkJTWVtb3J5Q29udGV4dFJlc2V0KExvZ2ljYWxTdHJlYW1pbmdDb250ZXh0KTsKKworCQkJcGdz dGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2luZm8pOworCisJ CQkvKgorCQkJICogTG9jayBiZWZvcmUgc2VuZGluZyB0aGUgU1RSRUFNX1NUT1AgbWVzc2FnZSBz byB0aGF0IHRoZSBsZWFkZXIKKwkJCSAqIGNhbiBob2xkIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGUg cGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgd2FpdAorCQkJICogZm9yIGxlYWRlciB0byByZWxl YXNlIHRoZSBsb2NrLgorCQkJICovCisJCQlwYV9sb2NrX3N0cmVhbSh3aW5mby0+c2hhcmVkLT54 aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJCQlwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxl biwgcy0+ZGF0YSk7CisKKwkJCXN0cmVhbV9hcHBseV93b3JrZXIgPSBOVUxMOworCisJCQlwZ3N0 YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lETEUsIE5VTEwpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKwkJCWVsb2coREVCVUcxLCAiYXBwbGllZCAldSBjaGFu Z2VzIGluIHRoZSBzdHJlYW1pbmcgY2h1bmsiLAorCQkJCSBwYXJhbGxlbF9zdHJlYW1fbmNoYW5n ZXMpOworCisJCQkvKgorCQkJICogQnkgdGhlIHRpbWUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlz IHByb2Nlc3NpbmcgdGhlIGNoYW5nZXMgaW4KKwkJCSAqIHRoZSBjdXJyZW50IHN0cmVhbWluZyBi bG9jaywgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgbWF5IGhhdmUKKwkJCSAqIHNlbnQgbXVsdGlw bGUgc3RyZWFtaW5nIGJsb2Nrcy4gU28sIHRyeSB0byBsb2NrIG9ubHkgaWYgdGhlcmUKKwkJCSAq IGlzIG5vIG1lc3NhZ2UgbGVmdCBpbiB0aGUgcXVldWUuCisJCQkgKi8KKwkJCWlmIChwZ19hdG9t aWNfc3ViX2ZldGNoX3UzMigmKE15UGFyYWxsZWxTaGFyZWQtPnBlbmRpbmdfbWVzc2FnZV9jb3Vu dCksIDEpID09IDApCisJCQl7CisJCQkJcGFfbG9ja19zdHJlYW0oTXlQYXJhbGxlbFNoYXJlZC0+ eGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXBhX3VubG9ja19zdHJlYW0oTXlQYXJhbGxlbFNo YXJlZC0+eGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCisJCQlwZ3N0YXRfcmVwb3J0X2Fj dGl2aXR5KFNUQVRFX0lETEVJTlRSQU5TQUNUSU9OLCBOVUxMKTsKKwkJCWJyZWFrOworCisJCWRl ZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQorCisJaW5fc3RyZWFtZWRf dHJhbnNhY3Rpb24gPSBmYWxzZTsKIAotCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfSURM RSwgTlVMTCk7CiAJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7CiB9CiAKIC8qCi0g KiBIYW5kbGUgU1RSRUFNIGFib3J0IG1lc3NhZ2UuCisgKiBIYW5kbGUgU1RSRUFNIEFCT1JUIG1l c3NhZ2Ugd2hlbiB0aGUgdHJhbnNhY3Rpb24gd2FzIHNwaWxsZWQgdG8gZGlzay4KICAqLwogc3Rh dGljIHZvaWQKLWFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQorc2VyaWFs aXplX3N0cmVhbV9hYm9ydChUcmFuc2FjdGlvbklkIHhpZCwgVHJhbnNhY3Rpb25JZCBzdWJ4aWQp CiB7Ci0JVHJhbnNhY3Rpb25JZCB4aWQ7Ci0JVHJhbnNhY3Rpb25JZCBzdWJ4aWQ7Ci0KLQlpZiAo aW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUo RVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAotCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVB TSBBQk9SVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUT1AiKSkpOwotCi0JbG9naWNhbHJlcF9y ZWFkX3N0cmVhbV9hYm9ydChzLCAmeGlkLCAmc3VieGlkKTsKLQogCS8qCiAJICogSWYgdGhlIHR3 byBYSURzIGFyZSB0aGUgc2FtZSwgaXQncyBpbiBmYWN0IGFib3J0IG9mIHRvcGxldmVsIHhhY3Qs IHNvCiAJICoganVzdCBkZWxldGUgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBpbmZvLgogCSAq LwogCWlmICh4aWQgPT0gc3VieGlkKQotCXsKLQkJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFj dCh4aWQsIEludmFsaWRYTG9nUmVjUHRyKTsKIAkJc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dp Y2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKLQl9CiAJZWxzZQogCXsKIAkJLyoKQEAgLTEzMTUs OCArMTYzMiw2IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQogCQli b29sCQlmb3VuZCA9IGZhbHNlOwogCQljaGFyCQlwYXRoW01BWFBHUEFUSF07CiAKLQkJc2V0X2Fw cGx5X2Vycm9yX2NvbnRleHRfeGFjdChzdWJ4aWQsIEludmFsaWRYTG9nUmVjUHRyKTsKLQogCQlz dWJpZHggPSAtMTsKIAkJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOwogCQlzdWJ4YWN0X2luZm9f cmVhZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwpAQCAtMTM0MSw3ICsxNjU2LDYg QEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpCiAJCQljbGVhbnVwX3N1 YnhhY3RfaW5mbygpOwogCQkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAkJCUNvbW1pdFRyYW5z YWN0aW9uQ29tbWFuZCgpOwotCQkJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7CiAJ CQlyZXR1cm47CiAJCX0KIApAQCAtMTM2NCw2ICsxNjc4LDk3IEBAIGFwcGx5X2hhbmRsZV9zdHJl YW1fYWJvcnQoU3RyaW5nSW5mbyBzKQogCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogCQlDb21t aXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAl9Cit9CisKKy8qCisgKiBIYW5kbGUgU1RSRUFNIEFC T1JUIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0 KFN0cmluZ0luZm8gcykKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDsKKwlUcmFuc2FjdGlvbklkIHN1 YnhpZDsKKwlMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhIGFib3J0X2RhdGE7CisJUGFyYWxsZWxB cHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOwor CWJvb2wJCWFib3J0X3RvcGxldmVsX3RyYW5zYWN0aW9uOworCisJaWYgKGluX3N0cmVhbWVkX3Ry YW5zYWN0aW9uKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9D T0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJTVFJFQU0gQUJPUlQgbWVzc2Fn ZSB3aXRob3V0IFNUUkVBTSBTVE9QIikpKTsKKworCS8qIFdlIHJlY2VpdmUgYWJvcnQgaW5mb3Jt YXRpb24gb25seSB3aGVuIHdlIGNhbiBhcHBseSBpbiBwYXJhbGxlbC4gKi8KKwlsb2dpY2FscmVw X3JlYWRfc3RyZWFtX2Fib3J0KHMsICZhYm9ydF9kYXRhLAorCQkJCQkJCQkgTXlMb2dpY2FsUmVw V29ya2VyLT5wYXJhbGxlbF9hcHBseSk7CisKKwl4aWQgPSBhYm9ydF9kYXRhLnhpZDsKKwlzdWJ4 aWQgPSBhYm9ydF9kYXRhLnN1YnhpZDsKKwlhYm9ydF90b3BsZXZlbF90cmFuc2FjdGlvbiA9ICh4 aWQgPT0gc3VieGlkKTsKKworCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3Qoc3VieGlkLCBh Ym9ydF9kYXRhLmFib3J0X2xzbik7CisKKwlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rpb25f YXBwbHlfYWN0aW9uKHhpZCwgJndpbmZvKTsKKworCXN3aXRjaCAoYXBwbHlfYWN0aW9uKQorCXsK KwkJY2FzZSBUUkFOU19MRUFERVJfU0VSSUFMSVpFOgorCisJCQkvKgorCQkJICogV2UgYXJlIGlu IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCB0aGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4KKwkJ CSAqIHNlcmlhbGl6ZWQgdG8gZmlsZS4KKwkJCSAqLworCQkJc2VyaWFsaXplX3N0cmVhbV9hYm9y dCh4aWQsIHN1YnhpZCk7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX0xFQURFUl9TRU5EX1RP X1BBUkFMTEVMOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJLyoKKwkJCSAqIEluY3JlbWVudCB0 aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkIGJ5CisJCQkgKiBw YXJhbGxlbCBhcHBseSB3b3JrZXIuCisJCQkgKi8KKwkJCWlmICghYWJvcnRfdG9wbGV2ZWxfdHJh bnNhY3Rpb24pCisJCQkJcGdfYXRvbWljX2FkZF9mZXRjaF91MzIoJih3aW5mby0+c2hhcmVkLT5w ZW5kaW5nX21lc3NhZ2VfY291bnQpLCAxKTsKKwkJCWVsc2UKKwkJCQlwYV91bmxvY2tfc3RyZWFt KHhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwkJCS8qIFNlbmQgU1RSRUFNIEFCT1JUIG1l c3NhZ2UgdG8gdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gKi8KKwkJCXBhX3NlbmRfZGF0YSh3 aW5mbywgcy0+bGVuLCBzLT5kYXRhKTsKKworCQkJaWYgKGFib3J0X3RvcGxldmVsX3RyYW5zYWN0 aW9uKQorCQkJeworCQkJCSh2b2lkKSBwYV9mcmVlX3dvcmtlcih3aW5mbywgeGlkKTsKKwkJCX0K KworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19QQVJBTExFTF9BUFBMWToKKwkJCXBhX3N0cmVh bV9hYm9ydCgmYWJvcnRfZGF0YSk7CisKKwkJCS8qCisJCQkgKiBXZSBuZWVkIHRvIHdhaXQgYWZ0 ZXIgcHJvY2Vzc2luZyByb2xsYmFjayB0byBzYXZlcG9pbnQgZm9yIHRoZQorCQkJICogbmV4dCBz ZXQgb2YgY2hhbmdlcy4KKwkJCSAqCisJCQkgKiBCeSB0aGUgdGltZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgaXMgcHJvY2Vzc2luZyB0aGUgY2hhbmdlcyBpbgorCQkJICogdGhlIGN1cnJlbnQgc3Ry ZWFtaW5nIGJsb2NrLCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBtYXkgaGF2ZQorCQkJICogc2Vu dCBtdWx0aXBsZSBzdHJlYW1pbmcgYmxvY2tzLiBTbywgdHJ5IHRvIGxvY2sgb25seSBpZiB0aGVy ZSBpcworCQkJICogbm8gbWVzc2FnZSBsZWZ0IGluIHRoZSBxdWV1ZS4KKwkJCSAqLworCQkJaWYg KCFhYm9ydF90b3BsZXZlbF90cmFuc2FjdGlvbiAmJgorCQkJCXBnX2F0b21pY19zdWJfZmV0Y2hf dTMyKCYoTXlQYXJhbGxlbFNoYXJlZC0+cGVuZGluZ19tZXNzYWdlX2NvdW50KSwgMSkgPT0gMCkK KwkJCXsKKwkJCQlwYV9sb2NrX3N0cmVhbShNeVBhcmFsbGVsU2hhcmVkLT54aWQsIEFjY2Vzc1No YXJlTG9jayk7CisJCQkJcGFfdW5sb2NrX3N0cmVhbShNeVBhcmFsbGVsU2hhcmVkLT54aWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJCQl9CisKKwkJCWVsb2coREVCVUcxLCAiZmluaXNoZWQgcHJvY2Vz c2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmQiKTsKKwkJCWJyZWFrOworCisJCWRl ZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQogCiAJcmVzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF9pbmZvKCk7CiB9CkBAIC0xNDk1LDYgKzE5MDAsOCBAQCBhcHBseV9oYW5k bGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiB7CiAJVHJhbnNhY3Rpb25JZCB4aWQ7CiAJ TG9naWNhbFJlcENvbW1pdERhdGEgY29tbWl0X2RhdGE7CisJUGFyYWxsZWxBcHBseVdvcmtlcklu Zm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOwogCiAJaWYgKGluX3N0 cmVhbWVkX3RyYW5zYWN0aW9uKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMTUwNCwxNCArMTkxMSw3 NCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiAJeGlkID0gbG9n aWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQocywgJmNvbW1pdF9kYXRhKTsKIAlzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF94YWN0KHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CiAKLQllbG9n KERFQlVHMSwgInJlY2VpdmVkIGNvbW1pdCBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb24gJXUiLCB4 aWQpOworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oeGlkLCAm d2luZm8pOwogCi0JYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyh4aWQsIGNvbW1pdF9kYXRhLmNvbW1p dF9sc24pOworCXN3aXRjaCAoYXBwbHlfYWN0aW9uKQorCXsKKwkJY2FzZSBUUkFOU19MRUFERVJf U0VSSUFMSVpFOgogCi0JYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29tbWl0X2RhdGEp OworCQkJLyoKKwkJCSAqIFRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBzZXJpYWxpemVkIHRvIGZp bGUsIHNvIHJlcGxheSBhbGwgdGhlCisJCQkgKiBzcG9vbGVkIG9wZXJhdGlvbnMuCisJCQkgKi8K KwkJCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoeGlkLCBjb21taXRfZGF0YS5jb21taXRfbHNuKTsK KworCQkJYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29tbWl0X2RhdGEpOwogCi0JLyog dW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3VieGFjdCBpbmZv ICovCi0Jc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlk KTsKKwkJCS8qIFVubGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1 YnhhY3QgaW5mby4gKi8KKwkJCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtl ci0+c3ViaWQsIHhpZCk7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX0xFQURFUl9TRU5EX1RP X1BBUkFMTEVMOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJLyoKKwkJCSAqIFVubG9jayB0aGUg c2hhcmVkIG9iamVjdCBsb2NrIHNvIHRoYXQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGNhbgorCQkJ ICogY29udGludWUgdG8gcmVjZWl2ZSBhbmQgYXBwbHkgY2hhbmdlcy4KKwkJCSAqLworCQkJcGFf dW5sb2NrX3N0cmVhbSh4aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJCQkvKiBTZW5kIFNU UkVBTSBDT01NSVQgbWVzc2FnZSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiAqLworCQkJ cGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpOworCisJCQkvKgorCQkJICogQWZ0 ZXIgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCB3YWl0IGZv cgorCQkJICogdGhhdCB3b3JrZXIgdG8gZmluaXNoLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWlu dGFpbiBjb21taXQKKwkJCSAqIG9yZGVyIHdoaWNoIGF2b2lkcyBmYWlsdXJlcyBkdWUgdG8gdHJh bnNhY3Rpb24gZGVwZW5kZW5jaWVzIGFuZAorCQkJICogZGVhZGxvY2tzLgorCQkJICovCisJCQlw YV93YWl0X2Zvcl94YWN0X2ZpbmlzaCh3aW5mby0+c2hhcmVkKTsKKworCQkJcGdzdGF0X3JlcG9y dF9zdGF0KGZhbHNlKTsKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKGNvbW1pdF9kYXRhLmVuZF9s c24pOworCQkJc3RvcF9za2lwcGluZ19jaGFuZ2VzKCk7CisKKwkJCSh2b2lkKSBwYV9mcmVlX3dv cmtlcih3aW5mbywgeGlkKTsKKworCQkJLyoKKwkJCSAqIFRoZSB0cmFuc2FjdGlvbiBpcyBlaXRo ZXIgbm9uLWVtcHR5IG9yIHNraXBwZWQsIHNvIHdlIGNsZWFyIHRoZQorCQkJICogc3Vic2tpcGxz bi4KKwkJCSAqLworCQkJY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKGNvbW1pdF9kYXRhLmNv bW1pdF9sc24pOworCisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZOgor CQkJYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29tbWl0X2RhdGEpOworCisJCQlsaXN0 X2ZyZWUoc3VieGFjdGxpc3QpOworCQkJc3VieGFjdGxpc3QgPSBOSUw7CisKKwkJCXBhX3NldF94 YWN0X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKTsKKwkJ CXBhX3VubG9ja190cmFuc2FjdGlvbih4aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWVsb2co REVCVUcxLCAiZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1h bmQiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJl YWs7CisJfQogCiAJLyogUHJvY2VzcyBhbnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9u aXplZCBpbiBwYXJhbGxlbC4gKi8KIAlwcm9jZXNzX3N5bmNpbmdfdGFibGVzKGNvbW1pdF9kYXRh LmVuZF9sc24pOwpAQCAtMTU1NSw2ICsyMDIyLDEzIEBAIGFwcGx5X2hhbmRsZV9jb21taXRfaW50 ZXJuYWwoTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKQogCQlyZXBsb3JpZ2luX3Nl c3Npb25fb3JpZ2luX3RpbWVzdGFtcCA9IGNvbW1pdF9kYXRhLT5jb21taXR0aW1lOwogCiAJCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCWlmIChJc1RyYW5zYWN0aW9uQmxvY2soKSkK KwkJeworCQkJRW5kVHJhbnNhY3Rpb25CbG9jayhmYWxzZSk7CisJCQlDb21taXRUcmFuc2FjdGlv bkNvbW1hbmQoKTsKKwkJfQorCiAJCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKIAkJc3Rv cmVfZmx1c2hfcG9zaXRpb24oY29tbWl0X2RhdGEtPmVuZF9sc24pOwpAQCAtMjUwNiw3ICsyOTgw LDcgQEAgYXBwbHlfaGFuZGxlX3RydW5jYXRlKFN0cmluZ0luZm8gcykKIC8qCiAgKiBMb2dpY2Fs IHJlcGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KICAqLwotc3RhdGljIHZv aWQKK3ZvaWQKIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcykKIHsKIAlMb2dpY2FsUmVwTXNn VHlwZSBhY3Rpb24gPSBwcV9nZXRtc2dieXRlKHMpOwpAQCAtMjY3NSw2ICszMTQ5LDEwIEBAIHN0 b3JlX2ZsdXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbikKIHsKIAlGbHVzaFBvc2l0 aW9uICpmbHVzaHBvczsKIAorCS8qIFNraXAgZm9yIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuICov CisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCQlyZXR1cm47CisKIAkvKiBOZWVk IHRvIGRvIHRoaXMgaW4gcGVybWFuZW50IGNvbnRleHQgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNo VG8oQXBwbHlDb250ZXh0KTsKIApAQCAtMjczOSw2ICszMjE3LDcgQEAgTG9naWNhbFJlcEFwcGx5 TG9vcChYTG9nUmVjUHRyIGxhc3RfcmVjZWl2ZWQpCiAJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBh cHBseV9lcnJvcl9jYWxsYmFjazsKIAllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRl eHRfc3RhY2s7CiAJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKwlhcHBseV9l cnJvcl9jb250ZXh0X3N0YWNrID0gZXJyb3JfY29udGV4dF9zdGFjazsKIAogCS8qIFRoaXMgb3V0 ZXIgbG9vcCBpdGVyYXRlcyBvbmNlIHBlciB3YWl0LiAqLwogCWZvciAoOzspCkBAIC0yOTUzLDYg KzM0MzIsNyBAQCBMb2dpY2FsUmVwQXBwbHlMb29wKFhMb2dSZWNQdHIgbGFzdF9yZWNlaXZlZCkK IAogCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLwogCWVycm9yX2NvbnRleHRfc3Rh Y2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKKwlhcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0g ZXJyb3JfY29udGV4dF9zdGFjazsKIAogCS8qIEFsbCBkb25lICovCiAJd2FscmN2X2VuZHN0cmVh bWluZyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCAmdGxpKTsKQEAgLTMwNTMsNyArMzUzMyw3IEBA IHNlbmRfZmVlZGJhY2soWExvZ1JlY1B0ciByZWN2cG9zLCBib29sIGZvcmNlLCBib29sIHJlcXVl c3RSZXBseSkKIC8qCiAgKiBSZXJlYWQgc3Vic2NyaXB0aW9uIGluZm8gaWYgbmVlZGVkLiBNb3N0 IGNoYW5nZXMgd2lsbCBiZSBleGl0LgogICovCi1zdGF0aWMgdm9pZAordm9pZAogbWF5YmVfcmVy ZWFkX3N1YnNjcmlwdGlvbih2b2lkKQogewogCU1lbW9yeUNvbnRleHQgb2xkY3R4OwpAQCAtMzA4 Myw4ICszNTYzLDkgQEAgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lkKQogCWlmICghbmV3 c3ViKQogCXsKIAkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlv biBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCAiCi0JCQkJCQkic3Rv cCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIHJlbW92ZWQiLAorCQkvKiB0cmFuc2xhdG9y OiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLwor CQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgc3RvcCBiZWNhdXNl IHRoZSAiCisJCQkJCQkic3Vic2NyaXB0aW9uIHdhcyByZW1vdmVkIiwgZ2V0X3dvcmtlcl9uYW1l KCksCiAJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAogCQlwcm9jX2V4aXQoMCk7CkBA IC0zMDk0LDggKzM1NzUsOSBAQCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpCiAJaWYg KCFuZXdzdWItPmVuYWJsZWQpCiAJewogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dp Y2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxs ICIKLQkJCQkJCSJzdG9wIGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgZGlzYWJsZWQiLAor CQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0 aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdp bGwgc3RvcCBiZWNhdXNlIHRoZSAiCisJCQkJCQkic3Vic2NyaXB0aW9uIHdhcyBkaXNhYmxlZCIs IGdldF93b3JrZXJfbmFtZSgpLAogCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CiAKIAkJ cHJvY19leGl0KDApOwpAQCAtMzEwOSw3ICszNTkxLDkgQEAgbWF5YmVfcmVyZWFkX3N1YnNjcmlw dGlvbih2b2lkKQogCiAJLyoKIAkgKiBFeGl0IGlmIGFueSBwYXJhbWV0ZXIgdGhhdCBhZmZlY3Rz IHRoZSByZW1vdGUgY29ubmVjdGlvbiB3YXMgY2hhbmdlZC4KLQkgKiBUaGUgbGF1bmNoZXIgd2ls bCBzdGFydCBhIG5ldyB3b3JrZXIuCisJICogVGhlIGxhdW5jaGVyIHdpbGwgc3RhcnQgYSBuZXcg d29ya2VyLCBidXQgbm90ZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseQorCSAqIHdvcmtlciBtYXkg b3IgbWF5IG5vdCByZXN0YXJ0IGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlIHN0cmVhbWlu ZworCSAqIG9wdGlvbiBhbmQgd2hldGhlciB0aGVyZSB3aWxsIGJlIGEgc3RyZWFtaW5nIHRyYW5z YWN0aW9uLgogCSAqLwogCWlmIChzdHJjbXAobmV3c3ViLT5jb25uaW5mbywgTXlTdWJzY3JpcHRp b24tPmNvbm5pbmZvKSAhPSAwIHx8CiAJCXN0cmNtcChuZXdzdWItPm5hbWUsIE15U3Vic2NyaXB0 aW9uLT5uYW1lKSAhPSAwIHx8CkBAIC0zMTIwLDkgKzM2MDQsMTYgQEAgbWF5YmVfcmVyZWFkX3N1 YnNjcmlwdGlvbih2b2lkKQogCQluZXdzdWItPm93bmVyICE9IE15U3Vic2NyaXB0aW9uLT5vd25l ciB8fAogCQkhZXF1YWwobmV3c3ViLT5wdWJsaWNhdGlvbnMsIE15U3Vic2NyaXB0aW9uLT5wdWJs aWNhdGlvbnMpKQogCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBs aWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCByZXN0YXJ0 IGJlY2F1c2Ugb2YgYSBwYXJhbWV0ZXIgY2hhbmdlIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9uLT5u YW1lKSkpOworCQlpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCQllcmVwb3J0KExP RywKKwkJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGxvZ2ljYWwgcmVw bGljYXRpb24gd29ya2VyICovCisJCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIl c1wiIHdpbGwgc3RvcCBiZWNhdXNlIG9mIGEgcGFyYW1ldGVyIGNoYW5nZSIsCisJCQkJCQkJZ2V0 X3dvcmtlcl9uYW1lKCksIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOworCQllbHNlCisJCQllcmVw b3J0KExPRywKKwkJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGxvZ2lj YWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRp b24gXCIlc1wiIHdpbGwgcmVzdGFydCBiZWNhdXNlIG9mIGEgcGFyYW1ldGVyIGNoYW5nZSIsCisJ CQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOwogCiAJCXBy b2NfZXhpdCgwKTsKIAl9CkBAIC0zNjA4LDM3ICs0MDk5LDE2IEBAIHN0YXJ0X2FwcGx5KFhMb2dS ZWNQdHIgb3JpZ2luX3N0YXJ0cG9zKQogCVBHX0VORF9UUlkoKTsKIH0KIAotLyogTG9naWNhbCBS ZXBsaWNhdGlvbiBBcHBseSB3b3JrZXIgZW50cnkgcG9pbnQgKi8KKy8qCisgKiBDb21tb24gaW5p dGlhbGl6YXRpb24gZm9yIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHBhcmFsbGVsIGFwcGx5IHdv cmtlci4KKyAqCisgKiBJbml0aWFsaXplIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uLCBpbi1tZW1v cnkgc3Vic2NyaXB0aW9uIGFuZCBuZWNlc3NhcnkKKyAqIGNvbmZpZyBvcHRpb25zLgorICovCiB2 b2lkCi1BcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCitJbml0aWFsaXplQXBwbHlXb3Jr ZXIodm9pZCkKIHsKLQlpbnQJCQl3b3JrZXJfc2xvdCA9IERhdHVtR2V0SW50MzIobWFpbl9hcmcp OwogCU1lbW9yeUNvbnRleHQgb2xkY3R4OwotCWNoYXIJCW9yaWdpbm5hbWVbTkFNRURBVEFMRU5d OwotCVhMb2dSZWNQdHIJb3JpZ2luX3N0YXJ0cG9zID0gSW52YWxpZFhMb2dSZWNQdHI7Ci0JY2hh cgkgICAqbXlzbG90bmFtZSA9IE5VTEw7Ci0JV2FsUmN2U3RyZWFtT3B0aW9ucyBvcHRpb25zOwot CWludAkJCXNlcnZlcl92ZXJzaW9uOwotCi0JLyogQXR0YWNoIHRvIHNsb3QgKi8KLQlsb2dpY2Fs cmVwX3dvcmtlcl9hdHRhY2god29ya2VyX3Nsb3QpOwotCi0JLyogU2V0dXAgc2lnbmFsIGhhbmRs aW5nICovCi0JcHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsK LQlwcXNpZ25hbChTSUdURVJNLCBkaWUpOwotCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFs cygpOwotCi0JLyoKLQkgKiBXZSBkb24ndCBjdXJyZW50bHkgbmVlZCBhbnkgUmVzb3VyY2VPd25l ciBpbiBhIHdhbHJlY2VpdmVyIHByb2Nlc3MsIGJ1dAotCSAqIGlmIHdlIGRpZCwgd2UgY291bGQg Y2FsbCBDcmVhdGVBdXhQcm9jZXNzUmVzb3VyY2VPd25lciBoZXJlLgotCSAqLwotCi0JLyogSW5p dGlhbGlzZSBzdGF0cyB0byBhIHNhbmlzaCB2YWx1ZSAqLwotCU15TG9naWNhbFJlcFdvcmtlci0+ bGFzdF9zZW5kX3RpbWUgPSBNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3RfcmVjdl90aW1lID0KLQkJ TXlMb2dpY2FsUmVwV29ya2VyLT5yZXBseV90aW1lID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwot Ci0JLyogTG9hZCB0aGUgbGlicHEtc3BlY2lmaWMgZnVuY3Rpb25zICovCi0JbG9hZF9maWxlKCJs aWJwcXdhbHJlY2VpdmVyIiwgZmFsc2UpOwogCiAJLyogUnVuIGFzIHJlcGxpY2Egc2Vzc2lvbiBy ZXBsaWNhdGlvbiByb2xlLiAqLwogCVNldENvbmZpZ09wdGlvbigic2Vzc2lvbl9yZXBsaWNhdGlv bl9yb2xlIiwgInJlcGxpY2EiLApAQCAtMzY2Niw5ICs0MTM2LDExIEBAIEFwcGx5V29ya2VyTWFp bihEYXR1bSBtYWluX2FyZykKIAlpZiAoIU15U3Vic2NyaXB0aW9uKQogCXsKIAkJZXJlcG9ydChM T0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1 YnNjcmlwdGlvbiAldSB3aWxsIG5vdCAiCi0JCQkJCQkic3RhcnQgYmVjYXVzZSB0aGUgc3Vic2Ny aXB0aW9uIHdhcyByZW1vdmVkIGR1cmluZyBzdGFydHVwIiwKLQkJCQkJCU15TG9naWNhbFJlcFdv cmtlci0+c3ViaWQpKSk7CisJCS8qIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9mIGxvZ2lj YWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMgZm9yIHN1YnNjcmlwdGlv biAldSB3aWxsIG5vdCBzdGFydCBiZWNhdXNlIHRoZSAiCisJCQkJCQkic3Vic2NyaXB0aW9uIHdh cyByZW1vdmVkIGR1cmluZyBzdGFydHVwIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeUxv Z2ljYWxSZXBXb3JrZXItPnN1YmlkKSkpOworCiAJCXByb2NfZXhpdCgwKTsKIAl9CiAKQEAgLTM2 NzgsOSArNDE1MCwxMCBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJaWYgKCFN eVN1YnNjcmlwdGlvbi0+ZW5hYmxlZCkKIAl7CiAJCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2co ImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wi IHdpbGwgbm90ICIKLQkJCQkJCSJzdGFydCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIGRp c2FibGVkIGR1cmluZyBzdGFydHVwIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOwor CQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0 aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdp bGwgbm90IHN0YXJ0IGJlY2F1c2UgIgorCQkJCQkJInRoZSBzdWJzY3JpcHRpb24gd2FzIGRpc2Fi bGVkIGR1cmluZyBzdGFydHVwIiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlw dGlvbi0+bmFtZSkpKTsKIAogCQlwcm9jX2V4aXQoMCk7CiAJfQpAQCAtMzY5NiwxNCArNDE2OSw1 MSBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAKIAlpZiAoYW1fdGFibGVzeW5j X3dvcmtlcigpKQogCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0 aW9uIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIs IHRhYmxlIFwiJXNcIiBoYXMgc3RhcnRlZCIsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSwg Z2V0X3JlbF9uYW1lKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQpKSkpOworCQkvKiB0cmFuc2xh dG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlciAq LworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiLCB0YWJsZSBcIiVzXCIg aGFzIHN0YXJ0ZWQiLAorCQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15U3Vic2NyaXB0aW9uLT5u YW1lLAorCQkJCQkJZ2V0X3JlbF9uYW1lKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQpKSkpOwog CWVsc2UKIAkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBh cHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgaGFzIHN0YXJ0ZWQiLAotCQkJCQkJ TXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRo ZSBuYW1lIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMg Zm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgaGFzIHN0YXJ0ZWQiLAorCQkJCQkJZ2V0X3dvcmtlcl9u YW1lKCksIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOwogCiAJQ29tbWl0VHJhbnNhY3Rpb25Db21t YW5kKCk7Cit9CisKKy8qIExvZ2ljYWwgUmVwbGljYXRpb24gQXBwbHkgd29ya2VyIGVudHJ5IHBv aW50ICovCit2b2lkCitBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCit7CisJaW50CQkJ d29ya2VyX3Nsb3QgPSBEYXR1bUdldEludDMyKG1haW5fYXJnKTsKKwljaGFyCQlvcmlnaW5uYW1l W05BTUVEQVRBTEVOXTsKKwlYTG9nUmVjUHRyCW9yaWdpbl9zdGFydHBvcyA9IEludmFsaWRYTG9n UmVjUHRyOworCWNoYXIJICAgKm15c2xvdG5hbWUgPSBOVUxMOworCVdhbFJjdlN0cmVhbU9wdGlv bnMgb3B0aW9uczsKKwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbjsKKworCS8qIEF0dGFjaCB0byBzbG90 ICovCisJbG9naWNhbHJlcF93b3JrZXJfYXR0YWNoKHdvcmtlcl9zbG90KTsKKworCS8qIFNldHVw IHNpZ25hbCBoYW5kbGluZyAqLworCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNv bmZpZ1JlbG9hZCk7CisJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKKwlCYWNrZ3JvdW5kV29ya2Vy VW5ibG9ja1NpZ25hbHMoKTsKKworCS8qCisJICogV2UgZG9uJ3QgY3VycmVudGx5IG5lZWQgYW55 IFJlc291cmNlT3duZXIgaW4gYSB3YWxyZWNlaXZlciBwcm9jZXNzLCBidXQKKwkgKiBpZiB3ZSBk aWQsIHdlIGNvdWxkIGNhbGwgQ3JlYXRlQXV4UHJvY2Vzc1Jlc291cmNlT3duZXIgaGVyZS4KKwkg Ki8KKworCS8qIEluaXRpYWxpc2Ugc3RhdHMgdG8gYSBzYW5pc2ggdmFsdWUgKi8KKwlNeUxvZ2lj YWxSZXBXb3JrZXItPmxhc3Rfc2VuZF90aW1lID0gTXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3Jl Y3ZfdGltZSA9CisJCU15TG9naWNhbFJlcFdvcmtlci0+cmVwbHlfdGltZSA9IEdldEN1cnJlbnRU aW1lc3RhbXAoKTsKKworCS8qIExvYWQgdGhlIGxpYnBxLXNwZWNpZmljIGZ1bmN0aW9ucyAqLwor CWxvYWRfZmlsZSgibGlicHF3YWxyZWNlaXZlciIsIGZhbHNlKTsKKworCUluaXRpYWxpemVBcHBs eVdvcmtlcigpOwogCiAJLyogQ29ubmVjdCB0byB0aGUgb3JpZ2luIGFuZCBzdGFydCB0aGUgcmVw bGljYXRpb24uICovCiAJZWxvZyhERUJVRzEsICJjb25uZWN0aW5nIHRvIHB1Ymxpc2hlciB1c2lu ZyBjb25uZWN0aW9uIHN0cmluZyBcIiVzXCIiLApAQCAtMzcyNiw3ICs0MjM2LDcgQEAgQXBwbHlX b3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCX0KIAllbHNlCiAJewotCQkvKiBUaGlzIGlzIG1h aW4gYXBwbHkgd29ya2VyICovCisJCS8qIFRoaXMgaXMgbGVhZGVyIGFwcGx5IHdvcmtlciAqLwog CQlSZXBPcmlnaW5JZCBvcmlnaW5pZDsKIAkJVGltZUxpbmVJRAlzdGFydHBvaW50VExJOwogCQlj aGFyCSAgICplcnI7CkBAIC0zNzUwLDcgKzQyNjAsNyBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0g bWFpbl9hcmcpCiAJCW9yaWdpbmlkID0gcmVwbG9yaWdpbl9ieV9uYW1lKG9yaWdpbm5hbWUsIHRy dWUpOwogCQlpZiAoIU9pZElzVmFsaWQob3JpZ2luaWQpKQogCQkJb3JpZ2luaWQgPSByZXBsb3Jp Z2luX2NyZWF0ZShvcmlnaW5uYW1lKTsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdp bmlkKTsKKwkJcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKG9yaWdpbmlkLCAwKTsKIAkJcmVwbG9y aWdpbl9zZXNzaW9uX29yaWdpbiA9IG9yaWdpbmlkOwogCQlvcmlnaW5fc3RhcnRwb3MgPSByZXBs b3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGZhbHNlKTsKIAkJQ29tbWl0VHJhbnNhY3Rpb25D b21tYW5kKCk7CkBAIC0zNzkxLDEzICs0MzAxLDM2IEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBt YWluX2FyZykKIAogCXNlcnZlcl92ZXJzaW9uID0gd2FscmN2X3NlcnZlcl92ZXJzaW9uKExvZ1Jl cFdvcmtlcldhbFJjdkNvbm4pOwogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5wcm90b192ZXJzaW9u ID0KKwkJc2VydmVyX3ZlcnNpb24gPj0gMTYwMDAwID8gTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1f UEFSQUxMRUxfVkVSU0lPTl9OVU0gOgogCQlzZXJ2ZXJfdmVyc2lvbiA+PSAxNTAwMDAgPyBMT0dJ Q0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIDoKIAkJc2VydmVyX3ZlcnNpb24gPj0g MTQwMDAwID8gTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lPTl9OVU0gOgogCQlMT0dJQ0FM UkVQX1BST1RPX1ZFUlNJT05fTlVNOwogCiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLnB1YmxpY2F0 aW9uX25hbWVzID0gTXlTdWJzY3JpcHRpb24tPnB1YmxpY2F0aW9uczsKIAlvcHRpb25zLnByb3Rv LmxvZ2ljYWwuYmluYXJ5ID0gTXlTdWJzY3JpcHRpb24tPmJpbmFyeTsKLQlvcHRpb25zLnByb3Rv LmxvZ2ljYWwuc3RyZWFtaW5nID0gTXlTdWJzY3JpcHRpb24tPnN0cmVhbTsKKworCS8qCisJICog QXNzaWduIHRoZSBhcHByb3ByaWF0ZSBvcHRpb24gdmFsdWUgZm9yIHN0cmVhbWluZyBvcHRpb24g YWNjb3JkaW5nIHRvCisJICogdGhlICdzdHJlYW1pbmcnIG1vZGUgYW5kIHRoZSBwdWJsaXNoZXIn cyBhYmlsaXR5IHRvIHN1cHBvcnQgdGhhdCBtb2RlLgorCSAqLworCWlmIChzZXJ2ZXJfdmVyc2lv biA+PSAxNjAwMDAgJiYKKwkJTXlTdWJzY3JpcHRpb24tPnN0cmVhbSA9PSBTVUJTVFJFQU1fUEFS QUxMRUwpCisJeworCQlvcHRpb25zLnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0ciA9IHBzdHJk dXAoInBhcmFsbGVsIik7CisJCU15TG9naWNhbFJlcFdvcmtlci0+cGFyYWxsZWxfYXBwbHkgPSB0 cnVlOworCX0KKwllbHNlIGlmIChzZXJ2ZXJfdmVyc2lvbiA+PSAxNDAwMDAgJiYKKwkJCSBNeVN1 YnNjcmlwdGlvbi0+c3RyZWFtICE9IFNVQlNUUkVBTV9PRkYpCisJeworCQlvcHRpb25zLnByb3Rv LmxvZ2ljYWwuc3RyZWFtaW5nX3N0ciA9IHBzdHJkdXAoIm9uIik7CisJCU15TG9naWNhbFJlcFdv cmtlci0+cGFyYWxsZWxfYXBwbHkgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJb3B0aW9ucy5w cm90by5sb2dpY2FsLnN0cmVhbWluZ19zdHIgPSBOVUxMOworCQlNeUxvZ2ljYWxSZXBXb3JrZXIt PnBhcmFsbGVsX2FwcGx5ID0gZmFsc2U7CisJfQorCiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLnR3 b3BoYXNlID0gZmFsc2U7CiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLm9yaWdpbiA9IHBzdHJkdXAo TXlTdWJzY3JpcHRpb24tPm9yaWdpbik7CiAKQEAgLTM4MzAsMTIgKzQzNjMsMTMgQEAgQXBwbHlX b3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCQl9CiAKIAkJZXJlcG9ydChERUJVRzEsCi0JCQkJ KGVycm1zZ19pbnRlcm5hbCgibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1 YnNjcmlwdGlvbiBcIiVzXCIgdHdvX3BoYXNlIGlzICVzIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9u LT5uYW1lLAotCQkJCQkJTXlTdWJzY3JpcHRpb24tPnR3b3BoYXNlc3RhdGUgPT0gTE9HSUNBTFJF UF9UV09QSEFTRV9TVEFURV9ESVNBQkxFRCA/ICJESVNBQkxFRCIgOgotCQkJCQkJTXlTdWJzY3Jp cHRpb24tPnR3b3BoYXNlc3RhdGUgPT0gTE9HSUNBTFJFUF9UV09QSEFTRV9TVEFURV9QRU5ESU5H ID8gIlBFTkRJTkciIDoKLQkJCQkJCU15U3Vic2NyaXB0aW9uLT50d29waGFzZXN0YXRlID09IExP R0lDQUxSRVBfVFdPUEhBU0VfU1RBVEVfRU5BQkxFRCA/ICJFTkFCTEVEIiA6Ci0JCQkJCQkiPyIp KSk7CisJCQkJKGVycm1zZ19pbnRlcm5hbCgiJXMgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgdHdv X3BoYXNlIGlzICVzIiwKKwkJCQkJCQkJIGdldF93b3JrZXJfbmFtZSgpLAorCQkJCQkJCQkgTXlT dWJzY3JpcHRpb24tPm5hbWUsCisJCQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+dHdvcGhhc2VzdGF0 ZSA9PSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX0RJU0FCTEVEID8gIkRJU0FCTEVEIiA6CisJ CQkJCQkJCSBNeVN1YnNjcmlwdGlvbi0+dHdvcGhhc2VzdGF0ZSA9PSBMT0dJQ0FMUkVQX1RXT1BI QVNFX1NUQVRFX1BFTkRJTkcgPyAiUEVORElORyIgOgorCQkJCQkJCQkgTXlTdWJzY3JpcHRpb24t PnR3b3BoYXNlc3RhdGUgPT0gTE9HSUNBTFJFUF9UV09QSEFTRV9TVEFURV9FTkFCTEVEID8gIkVO QUJMRUQiIDoKKwkJCQkJCQkJICI/IikpKTsKIAl9CiAJZWxzZQogCXsKQEAgLTM4OTUsNiArNDQy OSwxNSBAQCBJc0xvZ2ljYWxXb3JrZXIodm9pZCkKIH0KIAogLyoKKyAqIElzIGN1cnJlbnQgcHJv Y2VzcyBhIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyPworICovCiti b29sCitJc0xvZ2ljYWxQYXJhbGxlbEFwcGx5V29ya2VyKHZvaWQpCit7CisJcmV0dXJuIElzTG9n aWNhbFdvcmtlcigpICYmIGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpOworfQorCisvKgogICog U3RhcnQgc2tpcHBpbmcgY2hhbmdlcyBvZiB0aGUgdHJhbnNhY3Rpb24gaWYgdGhlIGdpdmVuIExT TiBtYXRjaGVzIHRoZQogICogTFNOIHNwZWNpZmllZCBieSBzdWJzY3JpcHRpb24ncyBza2lwbHNu LgogICovCkBAIC0zOTU2LDcgKzQ0OTksNyBAQCBjbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24o WExvZ1JlY1B0ciBmaW5pc2hfbHNuKQogCVhMb2dSZWNQdHIJbXlza2lwbHNuID0gTXlTdWJzY3Jp cHRpb24tPnNraXBsc247CiAJYm9vbAkJc3RhcnRlZF90eCA9IGZhbHNlOwogCi0JaWYgKGxpa2Vs eShYTG9nUmVjUHRySXNJbnZhbGlkKG15c2tpcGxzbikpKQorCWlmIChsaWtlbHkoWExvZ1JlY1B0 cklzSW52YWxpZChteXNraXBsc24pKSB8fCBhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKIAkJ cmV0dXJuOwogCiAJaWYgKCFJc1RyYW5zYWN0aW9uU3RhdGUoKSkKQEAgLTQwMjgsNyArNDU3MSw3 IEBAIGNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xzbihYTG9nUmVjUHRyIGZpbmlzaF9sc24pCiB9 CiAKIC8qIEVycm9yIGNhbGxiYWNrIHRvIGdpdmUgbW9yZSBjb250ZXh0IGluZm8gYWJvdXQgdGhl IGNoYW5nZSBiZWluZyBhcHBsaWVkICovCi1zdGF0aWMgdm9pZAordm9pZAogYXBwbHlfZXJyb3Jf Y2FsbGJhY2sodm9pZCAqYXJnKQogewogCUFwcGx5RXJyb3JDYWxsYmFja0FyZyAqZXJyYXJnID0g JmFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZzsKQEAgLTQwNTYsMjMgKzQ1OTksNDcgQEAgYXBwbHlf ZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCiAJ CQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJhcmctPmZpbmlzaF9sc24pKTsKIAl9Ci0JZWxzZSBp ZiAoZXJyYXJnLT5yZW1vdGVfYXR0bnVtIDwgMCkKLQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyBy ZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0 eXBlIFwiJXNcIiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBpbiB0 cmFuc2FjdGlvbiAldSwgZmluaXNoZWQgYXQgJVgvJVgiLAotCQkJCSAgIGVycmFyZy0+b3JpZ2lu X25hbWUsCi0JCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoZXJyYXJnLT5jb21tYW5kKSwK LQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCi0JCQkJICAgZXJyYXJnLT5y ZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAotCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCwKLQkJCQkg ICBMU05fRk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hfbHNuKSk7CiAJZWxzZQotCQllcnJjb250 ZXh0KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wi IGR1cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRp b24gXCIlcy4lc1wiIGNvbHVtbiBcIiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUsIGZpbmlzaGVkIGF0 ICVYLyVYIiwKLQkJCQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAotCQkJCSAgIGxvZ2ljYWxyZXBf bWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCi0JCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90 ZXJlbC5uc3BuYW1lLAotCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKLQkJ CQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLmF0dG5hbWVzW2VycmFyZy0+cmVtb3RlX2F0dG51 bV0sCi0JCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkLAotCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhl cnJhcmctPmZpbmlzaF9sc24pKTsKKwl7CisJCWlmIChlcnJhcmctPnJlbW90ZV9hdHRudW0gPCAw KQorCQl7CisJCQlpZiAoWExvZ1JlY1B0cklzSW52YWxpZChlcnJhcmctPmZpbmlzaF9sc24pKQor CQkJCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9y aWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRh cmdldCByZWxhdGlvbiBcIiVzLiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUiLAorCQkJCQkJICAgZXJy YXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKGVycmFy Zy0+Y29tbWFuZCksCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJ CQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJCQkJCQkgICBlcnJhcmct PnJlbW90ZV94aWQpOworCQkJZWxzZQorCQkJCWVycmNvbnRleHQoInByb2Nlc3NpbmcgcmVtb3Rl IGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVzXCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBc IiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxhdGlvbiBcIiVzLiVzXCIgaW4gdHJhbnNh Y3Rpb24gJXUsIGZpbmlzaGVkIGF0ICVYLyVYIiwKKwkJCQkJCSAgIGVycmFyZy0+b3JpZ2luX25h bWUsCisJCQkJCQkgICBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShlcnJhcmctPmNvbW1hbmQpLAor CQkJCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5uc3BuYW1lLAorCQkJCQkJICAgZXJyYXJn LT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAorCQkJCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkLAor CQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikpOworCQl9CisJCWVs c2UKKwkJeworCQkJaWYgKFhMb2dSZWNQdHJJc0ludmFsaWQoZXJyYXJnLT5maW5pc2hfbHNuKSkK KwkJCQllcnJjb250ZXh0KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBv cmlnaW4gXCIlc1wiIGR1cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wiIGZvciByZXBsaWNhdGlvbiB0 YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGNvbHVtbiBcIiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUi LAorCQkJCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2ljYWxyZXBfbWVz c2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3Rl cmVsLm5zcG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJlbG5hbWUsCisJ CQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLmF0dG5hbWVzW2VycmFyZy0+cmVtb3RlX2F0 dG51bV0sCisJCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQpOworCQkJZWxzZQorCQkJCWVycmNv bnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVz XCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxh dGlvbiBcIiVzLiVzXCIgY29sdW1uIFwiJXNcIiBpbiB0cmFuc2FjdGlvbiAldSwgZmluaXNoZWQg YXQgJVgvJVgiLAorCQkJCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwKKwkJCQkJCSAgIGxvZ2lj YWxyZXBfbWVzc2FnZV90eXBlKGVycmFyZy0+Y29tbWFuZCksCisJCQkJCQkgICBlcnJhcmctPnJl bC0+cmVtb3RlcmVsLm5zcG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLnJl bG5hbWUsCisJCQkJCQkgICBlcnJhcmctPnJlbC0+cmVtb3RlcmVsLmF0dG5hbWVzW2VycmFyZy0+ cmVtb3RlX2F0dG51bV0sCisJCQkJCQkgICBlcnJhcmctPnJlbW90ZV94aWQsCisJCQkJCQkgICBM U05fRk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hfbHNuKSk7CisJCX0KKwl9CiB9CiAKIC8qIFNl dCB0cmFuc2FjdGlvbiBpbmZvcm1hdGlvbiBvZiBhcHBseSBlcnJvciBjYWxsYmFjayAqLwpAQCAt NDA5MiwzICs0NjU5LDUyIEBAIHJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbyh2b2lkKQog CWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZW1vdGVfYXR0bnVtID0gLTE7CiAJc2V0X2FwcGx5 X2Vycm9yX2NvbnRleHRfeGFjdChJbnZhbGlkVHJhbnNhY3Rpb25JZCwgSW52YWxpZFhMb2dSZWNQ dHIpOwogfQorCisvKgorICogUmV0dXJuIHRoZSBhY3Rpb24gdG8gdGFrZSBmb3IgdGhlIGdpdmVu IHRyYW5zYWN0aW9uLiAqd2luZm8gaXMgYXNzaWduZWQgdG8KKyAqIHRoZSBkZXN0aW5hdGlvbiBw YXJhbGxlbCB3b3JrZXIgaW5mbyAoaWYgdGhlIGFjdGlvbiBpcworICogVFJBTlNfTEVBREVSX1NF TkRfVE9fUEFSQUxMRUwsIG90aGVyd2lzZSAqd2luZm8gaXMgYXNzaWduZWQgTlVMTC4KKyAqLwor c3RhdGljIFRyYW5zQXBwbHlBY3Rpb24KK2dldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oVHJh bnNhY3Rpb25JZCB4aWQsIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoqd2luZm8pCit7CisJKndp bmZvID0gTlVMTDsKKworCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIoKSkKKwl7CisJCXJl dHVybiBUUkFOU19QQVJBTExFTF9BUFBMWTsKKwl9CisJZWxzZSBpZiAoaW5fcmVtb3RlX3RyYW5z YWN0aW9uKQorCXsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9BUFBMWTsKKwl9CisKKwkvKgorCSAq IENoZWNrIGlmIHdlIGFyZSBwcm9jZXNzaW5nIHRoaXMgdHJhbnNhY3Rpb24gdXNpbmcgYSBwYXJh bGxlbCBhcHBseQorCSAqIHdvcmtlci4KKwkgKi8KKwkqd2luZm8gPSBwYV9maW5kX3dvcmtlcih4 aWQpOworCisJaWYgKCp3aW5mbykKKwl7CisJCXJldHVybiBUUkFOU19MRUFERVJfU0VORF9UT19Q QVJBTExFTDsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU7 CisJfQorfQorCisvKgorICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBsb2dpY2FsIHJlcGxpY2F0 aW9uIHdvcmtlci4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0X3dvcmtlcl9uYW1lKHZv aWQpCit7CisJaWYgKGFtX3RhYmxlc3luY193b3JrZXIoKSkKKwkJcmV0dXJuIF8oImxvZ2ljYWwg cmVwbGljYXRpb24gdGFibGUgc3luY2hyb25pemF0aW9uIHdvcmtlciIpOworCWVsc2UgaWYgKGFt X3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCQlyZXR1cm4gXygibG9naWNhbCByZXBsaWNhdGlv biBwYXJhbGxlbCBhcHBseSB3b3JrZXIiKTsKKwllbHNlCisJCXJldHVybiBfKCJsb2dpY2FsIHJl cGxpY2F0aW9uIGFwcGx5IHdvcmtlciIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bn b3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggMmVjYWE1Yi4uYmVhZjgyNyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X3N1YnNjcmlwdGlvbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUg ImNvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRv ci5oIgogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKQEAg LTI5MCw3ICsyOTEsNyBAQCBwYXJzZV9vdXRwdXRfcGFyYW1ldGVycyhMaXN0ICpvcHRpb25zLCBQ R091dHB1dERhdGEgKmRhdGEpCiAJYm9vbAkJb3JpZ2luX29wdGlvbl9naXZlbiA9IGZhbHNlOwog CiAJZGF0YS0+YmluYXJ5ID0gZmFsc2U7Ci0JZGF0YS0+c3RyZWFtaW5nID0gZmFsc2U7CisJZGF0 YS0+c3RyZWFtaW5nID0gU1VCU1RSRUFNX09GRjsKIAlkYXRhLT5tZXNzYWdlcyA9IGZhbHNlOwog CWRhdGEtPnR3b19waGFzZSA9IGZhbHNlOwogCkBAIC0zNjksNyArMzcwLDcgQEAgcGFyc2Vfb3V0 cHV0X3BhcmFtZXRlcnMoTGlzdCAqb3B0aW9ucywgUEdPdXRwdXREYXRhICpkYXRhKQogCQkJCQkJ IGVycm1zZygiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMiKSkpOwogCQkJc3RyZWFt aW5nX2dpdmVuID0gdHJ1ZTsKIAotCQkJZGF0YS0+c3RyZWFtaW5nID0gZGVmR2V0Qm9vbGVhbihk ZWZlbCk7CisJCQlkYXRhLT5zdHJlYW1pbmcgPSBkZWZHZXRTdHJlYW1pbmdNb2RlKGRlZmVsKTsK IAkJfQogCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0d29fcGhhc2UiKSA9PSAw KQogCQl7CkBAIC00NjEsMTMgKzQ2MiwyMCBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCQkgKiB3ZSBvbmx5 IGFsbG93IGl0IHdpdGggc3VmZmljaWVudCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCwgYW5kIHdo ZW4KIAkJICogdGhlIG91dHB1dCBwbHVnaW4gc3VwcG9ydHMgaXQuCiAJCSAqLwotCQlpZiAoIWRh dGEtPnN0cmVhbWluZykKKwkJaWYgKGRhdGEtPnN0cmVhbWluZyA9PSBTVUJTVFJFQU1fT0ZGKQog CQkJY3R4LT5zdHJlYW1pbmcgPSBmYWxzZTsKLQkJZWxzZSBpZiAoZGF0YS0+cHJvdG9jb2xfdmVy c2lvbiA8IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNKQorCQllbHNlIGlmIChk YXRhLT5zdHJlYW1pbmcgPT0gU1VCU1RSRUFNX09OICYmCisJCQkJIGRhdGEtPnByb3RvY29sX3Zl cnNpb24gPCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9WRVJTSU9OX05VTSkKIAkJCWVyZXBvcnQo RVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAog CQkJCQkgZXJybXNnKCJyZXF1ZXN0ZWQgcHJvdG9fdmVyc2lvbj0lZCBkb2VzIG5vdCBzdXBwb3J0 IHN0cmVhbWluZywgbmVlZCAlZCBvciBoaWdoZXIiLAogCQkJCQkJCWRhdGEtPnByb3RvY29sX3Zl cnNpb24sIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNKSkpOworCQllbHNlIGlm IChkYXRhLT5zdHJlYW1pbmcgPT0gU1VCU1RSRUFNX1BBUkFMTEVMICYmCisJCQkJIGRhdGEtPnBy b3RvY29sX3ZlcnNpb24gPCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9O X05VTSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJyZXF1ZXN0ZWQgcHJvdG9fdmVyc2lvbj0l ZCBkb2VzIG5vdCBzdXBwb3J0IHBhcmFsbGVsIHN0cmVhbWluZywgbmVlZCAlZCBvciBoaWdoZXIi LAorCQkJCQkJCWRhdGEtPnByb3RvY29sX3ZlcnNpb24sIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFN X1BBUkFMTEVMX1ZFUlNJT05fTlVNKSkpOwogCQllbHNlIGlmICghY3R4LT5zdHJlYW1pbmcpCiAJ CQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKQEAgLTE4MzksNiArMTg0Nyw4IEBAIHBnb3V0cHV0X3N0cmVhbV9hYm9ydChzdHJ1 Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkgIFhMb2dSZWNQdHIgYWJvcnRf bHNuKQogewogCVJlb3JkZXJCdWZmZXJUWE4gKnRvcHR4bjsKKwlQR091dHB1dERhdGEgKmRhdGEg PSAoUEdPdXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCWJvb2wJCXdy aXRlX2Fib3J0X2luZm8gPSAoZGF0YS0+c3RyZWFtaW5nID09IFNVQlNUUkVBTV9QQVJBTExFTCk7 CiAKIAkvKgogCSAqIFRoZSBhYm9ydCBzaG91bGQgaGFwcGVuIG91dHNpZGUgc3RyZWFtaW5nIGJs b2NrLCBldmVuIGZvciBzdHJlYW1lZApAQCAtMTg1Miw3ICsxODYyLDkgQEAgcGdvdXRwdXRfc3Ry ZWFtX2Fib3J0KHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJQXNzZXJ0KHJi dHhuX2lzX3N0cmVhbWVkKHRvcHR4bikpOwogCiAJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0 eCwgdHJ1ZSk7Ci0JbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoY3R4LT5vdXQsIHRvcHR4 bi0+eGlkLCB0eG4tPnhpZCk7CisJbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoY3R4LT5v dXQsIHRvcHR4bi0+eGlkLCB0eG4tPnhpZCwgYWJvcnRfbHNuLAorCQkJCQkJCQkgIHR4bi0+eGFj dF90aW1lLmFib3J0X3RpbWUsIHdyaXRlX2Fib3J0X2luZm8pOworCiAJT3V0cHV0UGx1Z2luV3Jp dGUoY3R4LCB0cnVlKTsKIAogCWNsZWFudXBfcmVsX3N5bmNfY2FjaGUodG9wdHhuLT54aWQsIGZh bHNlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwppbmRleCA3NzY3NjU3Li43YzAw OWQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0yMiw2ICsyMiw3IEBA CiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9j b25kaXRpb25fdmFyaWFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgpAQCAtNjU3LDYg KzY1OCw5IEBAIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChD aGVja1Byb2NTaWduYWwoUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQpKQogCQlIYW5kbGVMb2dN ZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdf UEFSQUxMRUxfQVBQTFlfTUVTU0FHRSkpCisJCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50 ZXJydXB0KCk7CisKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJ Q1RfREFUQUJBU0UpKQogCQlSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFBST0NTSUdfUkVDT1ZF UllfQ09ORkxJQ1RfREFUQUJBU0UpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvbG1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xtZ3IuYwppbmRleCAxMDQz MDY4Li5kMDFmYTdmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKQEAgLTExMTcsNiArMTExNyw0 NCBAQCBVbmxvY2tTaGFyZWRPYmplY3RGb3JTZXNzaW9uKE9pZCBjbGFzc2lkLCBPaWQgb2JqaWQs IHVpbnQxNiBvYmpzdWJpZCwKIAlMb2NrUmVsZWFzZSgmdGFnLCBsb2NrbW9kZSwgdHJ1ZSk7CiB9 CiAKKy8qCisgKgkJTG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uCisgKgorICogT2J0YWlu IGEgc2Vzc2lvbi1sZXZlbCBsb2NrIG9uIGEgdHJhbnNhY3Rpb24gYmVpbmcgYXBwbGllZCBvbiB0 aGUgc3Vic2NyaWJlci4KKyAqIFNlZSBMb2NrUmVsYXRpb25JZEZvclNlc3Npb24gZm9yIG5vdGVz IGFib3V0IHNlc3Npb24tbGV2ZWwgbG9ja3MuCisgKi8KK3ZvaWQKK0xvY2tBcHBseVRyYW5zYWN0 aW9uRm9yU2Vzc2lvbihPaWQgc3Vib2lkLCBUcmFuc2FjdGlvbklkIHhpZCwgdWludDE2IG9iamlk LAorCQkJCQkJCSAgIExPQ0tNT0RFIGxvY2ttb2RlKQoreworCUxPQ0tUQUcJCXRhZzsKKworCVNF VF9MT0NLVEFHX0FQUExZX1RSQU5TQUNUSU9OKHRhZywKKwkJCQkJCQkJICBNeURhdGFiYXNlSWQs CisJCQkJCQkJCSAgc3Vib2lkLAorCQkJCQkJCQkgIHhpZCwKKwkJCQkJCQkJICBvYmppZCk7CisK Kwkodm9pZCkgTG9ja0FjcXVpcmUoJnRhZywgbG9ja21vZGUsIHRydWUsIGZhbHNlKTsKK30KKwor LyoKKyAqCQlVbmxvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbgorICovCit2b2lkCitVbmxv Y2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihPaWQgc3Vib2lkLCBUcmFuc2FjdGlvbklkIHhp ZCwgdWludDE2IG9iamlkLAorCQkJCQkJCQkgTE9DS01PREUgbG9ja21vZGUpCit7CisJTE9DS1RB RwkJdGFnOworCisJU0VUX0xPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04odGFnLAorCQkJCQkJCQkg IE15RGF0YWJhc2VJZCwKKwkJCQkJCQkJICBzdWJvaWQsCisJCQkJCQkJCSAgeGlkLAorCQkJCQkJ CQkgIG9iamlkKTsKKworCUxvY2tSZWxlYXNlKCZ0YWcsIGxvY2ttb2RlLCB0cnVlKTsKK30KIAog LyoKICAqIEFwcGVuZCBhIGRlc2NyaXB0aW9uIG9mIGEgbG9ja2FibGUgb2JqZWN0IHRvIGJ1Zi4K QEAgLTEyMDIsNiArMTI0MCwxMyBAQCBEZXNjcmliZUxvY2tUYWcoU3RyaW5nSW5mbyBidWYsIGNv bnN0IExPQ0tUQUcgKnRhZykKIAkJCQkJCQkgdGFnLT5sb2NrdGFnX2ZpZWxkMywKIAkJCQkJCQkg dGFnLT5sb2NrdGFnX2ZpZWxkNCk7CiAJCQlicmVhazsKKwkJY2FzZSBMT0NLVEFHX0FQUExZX1RS QU5TQUNUSU9OOgorCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsCisJCQkJCQkJIF8oInJlbW90ZSB0 cmFuc2FjdGlvbiAldSBvZiBzdWJzY3JpcHRpb24gJXUgb2YgZGF0YWJhc2UgJXUiKSwKKwkJCQkJ CQkgdGFnLT5sb2NrdGFnX2ZpZWxkMywKKwkJCQkJCQkgdGFnLT5sb2NrdGFnX2ZpZWxkMiwKKwkJ CQkJCQkgdGFnLT5sb2NrdGFnX2ZpZWxkMSk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWFw cGVuZFN0cmluZ0luZm8oYnVmLAogCQkJCQkJCSBfKCJ1bnJlY29nbml6ZWQgbG9ja3RhZyB0eXBl ICVkIiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFj a2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggMzA4MjA5My4uZjUyZTViYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYwpAQCAtMzM3OSw2ICszMzc5LDkgQEAgUHJvY2Vzc0ludGVycnVwdHModm9pZCkKIAogCWlm IChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykKIAkJUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRl cnJ1cHQoKTsKKworCWlmIChQYXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRpbmcpCisJCUhhbmRsZVBh cmFsbGVsQXBwbHlNZXNzYWdlcygpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkv d2FpdF9ldmVudC5jCmluZGV4IDkyZjI0YTYuLmRjZmY1OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50LmMKQEAgLTIzMCw2ICsyMzAsOSBAQCBwZ3N0YXRfZ2V0X3dhaXRf YWN0aXZpdHkoV2FpdEV2ZW50QWN0aXZpdHkgdykKIAkJY2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxf TEFVTkNIRVJfTUFJTjoKIAkJCWV2ZW50X25hbWUgPSAiTG9naWNhbExhdW5jaGVyTWFpbiI7CiAJ CQlicmVhazsKKwkJY2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfTUFJTjoK KwkJCWV2ZW50X25hbWUgPSAiTG9naWNhbFBhcmFsbGVsQXBwbHlNYWluIjsKKwkJCWJyZWFrOwog CQljYXNlIFdBSVRfRVZFTlRfUkVDT1ZFUllfV0FMX1NUUkVBTToKIAkJCWV2ZW50X25hbWUgPSAi UmVjb3ZlcnlXYWxTdHJlYW0iOwogCQkJYnJlYWs7CkBAIC0zODgsNiArMzkxLDkgQEAgcGdzdGF0 X2dldF93YWl0X2lwYyhXYWl0RXZlbnRJUEMgdykKIAkJY2FzZSBXQUlUX0VWRU5UX0hBU0hfR1JP V19CVUNLRVRTX1JFSU5TRVJUOgogCQkJZXZlbnRfbmFtZSA9ICJIYXNoR3Jvd0J1Y2tldHNSZWlu c2VydCI7CiAJCQlicmVhazsKKwkJY2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQ TFlfU1RBVEVfQ0hBTkdFOgorCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsUGFyYWxsZWxBcHBseVN0 YXRlQ2hhbmdlIjsKKwkJCWJyZWFrOwogCQljYXNlIFdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX0RB VEE6CiAJCQlldmVudF9uYW1lID0gIkxvZ2ljYWxTeW5jRGF0YSI7CiAJCQlicmVhazsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9sb2NrZnVuY3MuYwppbmRleCBmOWIzMjRlLi4zYmYwNDgzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2xvY2tmdW5jcy5jCkBAIC0zNywxMCArMzcsMTEgQEAgY29uc3QgY2hhciAqY29uc3QgTG9j a1RhZ1R5cGVOYW1lc1tdID0gewogCSJzcGVjdG9rZW4iLAogCSJvYmplY3QiLAogCSJ1c2VybG9j ayIsCi0JImFkdmlzb3J5IgorCSJhZHZpc29yeSIsCisJImFwcGx5dHJhbnNhY3Rpb24iCiB9Owog Ci1TdGF0aWNBc3NlcnREZWNsKGxlbmd0aG9mKExvY2tUYWdUeXBlTmFtZXMpID09IChMT0NLVEFH X0FEVklTT1JZICsgMSksCitTdGF0aWNBc3NlcnREZWNsKGxlbmd0aG9mKExvY2tUYWdUeXBlTmFt ZXMpID09IChMT0NLVEFHX0xBU1RfVFlQRSArIDEpLAogCQkJCSAiYXJyYXkgbGVuZ3RoIG1pc21h dGNoIik7CiAKIC8qIFRoaXMgbXVzdCBtYXRjaCBlbnVtIFByZWRpY2F0ZUxvY2tUYXJnZXRUeXBl IChwcmVkaWNhdGVfaW50ZXJuYWxzLmgpICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5j CmluZGV4IDgzNmI0OTQuLjY3NGJhOGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5j CkBAIC0yOTYyLDYgKzI5NjIsMTggQEAgc3RydWN0IGNvbmZpZ19pbnQgQ29uZmlndXJlTmFtZXNJ bnRbXSA9CiAJfSwKIAogCXsKKwkJeyJtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJfc3Vi c2NyaXB0aW9uIiwKKwkJCVBHQ19TSUdIVVAsCisJCQlSRVBMSUNBVElPTl9TVUJTQ1JJQkVSUywK KwkJCWdldHRleHRfbm9vcCgiTWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2Vy cyBwZXIgc3Vic2NyaXB0aW9uLiIpLAorCQkJTlVMTCwKKwkJfSwKKwkJJm1heF9wYXJhbGxlbF9h cHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24sCisJCTIsIDAsIE1BWF9CQUNLRU5EUywKKwkJ TlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CiAJCXsibG9nX3JvdGF0aW9uX2FnZSIsIFBHQ19T SUdIVVAsIExPR0dJTkdfV0hFUkUsCiAJCQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIGFtb3VudCBv ZiB0aW1lIHRvIHdhaXQgYmVmb3JlIGZvcmNpbmcgIgogCQkJCQkJICJsb2cgZmlsZSByb3RhdGlv bi4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25m LnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpp bmRleCA4NjhkMjFjLi40ZDAxY2E5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNj L3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0 Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0zNjAsNiArMzYwLDcgQEAKICNtYXhfbG9naWNhbF9yZXBs aWNhdGlvbl93b3JrZXJzID0gNAkjIHRha2VuIGZyb20gbWF4X3dvcmtlcl9wcm9jZXNzZXMKIAkJ CQkJIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCiAjbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vi c2NyaXB0aW9uID0gMgkjIHRha2VuIGZyb20gbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vy cworI21heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyCSMgdGFr ZW4gZnJvbSBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzCiAKIAogIy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggZGE0MjdmNC4uNTE0MWE2NiAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j CkBAIC00NDgxLDcgKzQ0ODEsNyBAQCBnZXRTdWJzY3JpcHRpb25zKEFyY2hpdmUgKmZvdXQpCiAJ aWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTQwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cihxdWVyeSwgIiBzLnN1YnN0cmVhbSxcbiIpOwogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIocXVlcnksICIgZmFsc2UgQVMgc3Vic3RyZWFtLFxuIik7CisJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHF1ZXJ5LCAiICdmJyBBUyBzdWJzdHJlYW0sXG4iKTsKIAogCWlmIChmb3V0LT5yZW1vdGVW ZXJzaW9uID49IDE1MDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCkBAIC00NjE4 LDggKzQ2MTgsMTAgQEAgZHVtcFN1YnNjcmlwdGlvbihBcmNoaXZlICpmb3V0LCBjb25zdCBTdWJz Y3JpcHRpb25JbmZvICpzdWJpbmZvKQogCWlmIChzdHJjbXAoc3ViaW5mby0+c3ViYmluYXJ5LCAi dCIpID09IDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCBiaW5hcnkgPSB0cnVl Iik7CiAKLQlpZiAoc3RyY21wKHN1YmluZm8tPnN1YnN0cmVhbSwgImYiKSAhPSAwKQorCWlmIChz dHJjbXAoc3ViaW5mby0+c3Vic3RyZWFtLCAidCIpID09IDApCiAJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHF1ZXJ5LCAiLCBzdHJlYW1pbmcgPSBvbiIpOworCWVsc2UgaWYgKHN0cmNtcChzdWJpbmZv LT5zdWJzdHJlYW0sICJwIikgPT0gMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIs IHN0cmVhbWluZyA9IHBhcmFsbGVsIik7CiAKIAlpZiAoc3RyY21wKHN1YmluZm8tPnN1YnR3b3Bo YXNlc3RhdGUsIHR3b19waGFzZV9kaXNhYmxlZCkgIT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJT dHIocXVlcnksICIsIHR3b19waGFzZSA9IG9uIik7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwv ZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IDJlYWU1MTkuLjc0MGIx MzUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNx bC9kZXNjcmliZS5jCkBAIC02NDk5LDExICs2NDk5LDI0IEBAIGRlc2NyaWJlU3Vic2NyaXB0aW9u cyhjb25zdCBjaGFyICpwYXR0ZXJuLCBib29sIHZlcmJvc2UpCiAJewogCQkvKiBCaW5hcnkgbW9k ZSBhbmQgc3RyZWFtaW5nIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiB2MTQgYW5kIGhpZ2hlciAqLwog CQlpZiAocHNldC5zdmVyc2lvbiA+PSAxNDAwMDApCisJCXsKIAkJCWFwcGVuZFBRRXhwQnVmZmVy KCZidWYsCi0JCQkJCQkJICAiLCBzdWJiaW5hcnkgQVMgXCIlc1wiXG4iCi0JCQkJCQkJICAiLCBz dWJzdHJlYW0gQVMgXCIlc1wiXG4iLAotCQkJCQkJCSAgZ2V0dGV4dF9ub29wKCJCaW5hcnkiKSwK LQkJCQkJCQkgIGdldHRleHRfbm9vcCgiU3RyZWFtaW5nIikpOworCQkJCQkJCSAgIiwgc3ViYmlu YXJ5IEFTIFwiJXNcIlxuIiwKKwkJCQkJCQkgIGdldHRleHRfbm9vcCgiQmluYXJ5IikpOworCisJ CQlpZiAocHNldC5zdmVyc2lvbiA+PSAxNjAwMDApCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1 ZiwKKwkJCQkJCQkJICAiLCAoQ0FTRSBzdWJzdHJlYW1cbiIKKwkJCQkJCQkJICAiICAgIFdIRU4g J2YnIFRIRU4gJ29mZidcbiIKKwkJCQkJCQkJICAiICAgIFdIRU4gJ3QnIFRIRU4gJ29uJ1xuIgor CQkJCQkJCQkgICIgICAgV0hFTiAncCcgVEhFTiAncGFyYWxsZWwnXG4iCisJCQkJCQkJCSAgIiAg IEVORCkgQVMgXCIlc1wiXG4iLAorCQkJCQkJCQkgIGdldHRleHRfbm9vcCgiU3RyZWFtaW5nIikp OworCQkJZWxzZQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkJCSAgIiwgc3Vi c3RyZWFtIEFTIFwiJXNcIlxuIiwKKwkJCQkJCQkJICBnZXR0ZXh0X25vb3AoIlN0cmVhbWluZyIp KTsKKwkJfQogCiAJCS8qIFR3b19waGFzZSBhbmQgZGlzYWJsZV9vbl9lcnJvciBhcmUgb25seSBz dXBwb3J0ZWQgaW4gdjE1IGFuZCBoaWdoZXIgKi8KIAkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTUw MDAwKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgKaW5kZXggN2I5ODcxNC4uMDE2 YWZiYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaAor KysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCkBAIC04MCw3ICs4MCw4 IEBAIENBVEFMT0cocGdfc3Vic2NyaXB0aW9uLDYxMDAsU3Vic2NyaXB0aW9uUmVsYXRpb25JZCkg QktJX1NIQVJFRF9SRUxBVElPTiBCS0lfUk9XCiAJYm9vbAkJc3ViYmluYXJ5OwkJLyogVHJ1ZSBp ZiB0aGUgc3Vic2NyaXB0aW9uIHdhbnRzIHRoZQogCQkJCQkJCQkgKiBwdWJsaXNoZXIgdG8gc2Vu ZCBkYXRhIGluIGJpbmFyeSAqLwogCi0JYm9vbAkJc3Vic3RyZWFtOwkJLyogU3RyZWFtIGluLXBy b2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KKwljaGFyCQlzdWJzdHJlYW07CQkvKiBTdHJlYW0gaW4t cHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLiBTZWUKKwkJCQkJCQkJICogU1VCU1RSRUFNX3h4eCBjb25z dGFudHMuICovCiAKIAljaGFyCQlzdWJ0d29waGFzZXN0YXRlOwkvKiBTdHJlYW0gdHdvLXBoYXNl IHRyYW5zYWN0aW9ucyAqLwogCkBAIC0xMjQsNyArMTI1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3Vi c2NyaXB0aW9uCiAJYm9vbAkJZW5hYmxlZDsJCS8qIEluZGljYXRlcyBpZiB0aGUgc3Vic2NyaXB0 aW9uIGlzIGVuYWJsZWQgKi8KIAlib29sCQliaW5hcnk7CQkJLyogSW5kaWNhdGVzIGlmIHRoZSBz dWJzY3JpcHRpb24gd2FudHMgZGF0YSBpbgogCQkJCQkJCQkgKiBiaW5hcnkgZm9ybWF0ICovCi0J Ym9vbAkJc3RyZWFtOwkJCS8qIEFsbG93IHN0cmVhbWluZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlv bnMuICovCisJY2hhcgkJc3RyZWFtOwkJCS8qIEFsbG93IHN0cmVhbWluZyBpbi1wcm9ncmVzcyB0 cmFuc2FjdGlvbnMuCisJCQkJCQkJCSAqIFNlZSBTVUJTVFJFQU1feHh4IGNvbnN0YW50cy4gKi8K IAljaGFyCQl0d29waGFzZXN0YXRlOwkvKiBBbGxvdyBzdHJlYW1pbmcgdHdvLXBoYXNlIHRyYW5z YWN0aW9ucyAqLwogCWJvb2wJCWRpc2FibGVvbmVycjsJLyogSW5kaWNhdGVzIGlmIHRoZSBzdWJz Y3JpcHRpb24gc2hvdWxkIGJlCiAJCQkJCQkJCSAqIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgaWYg YSB3b3JrZXIgZXJyb3IKQEAgLTEzNyw2ICsxMzksMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgU3Vic2Ny aXB0aW9uCiAJCQkJCQkJCSAqIHNwZWNpZmllZCBvcmlnaW4gKi8KIH0gU3Vic2NyaXB0aW9uOwog CisvKiBEaXNhbGxvdyBzdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLiAqLworI2Rl ZmluZSBTVUJTVFJFQU1fT0ZGICdmJworCisvKgorICogU3RyZWFtaW5nIGluLXByb2dyZXNzIHRy YW5zYWN0aW9ucyBhcmUgd3JpdHRlbiB0byBhIHRlbXBvcmFyeSBmaWxlIGFuZAorICogYXBwbGll ZCBvbmx5IGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gdXBzdHJlYW0uCisg Ki8KKyNkZWZpbmUgU1VCU1RSRUFNX09OICd0JworCisvKgorICogU3RyZWFtaW5nIGluLXByb2dy ZXNzIHRyYW5zYWN0aW9ucyBhcmUgYXBwbGllZCBpbW1lZGlhdGVseSB2aWEgYSBwYXJhbGxlbAor ICogYXBwbHkgd29ya2VyLgorICovCisjZGVmaW5lIFNVQlNUUkVBTV9QQVJBTExFTCAncCcKKwog ZXh0ZXJuIFN1YnNjcmlwdGlvbiAqR2V0U3Vic2NyaXB0aW9uKE9pZCBzdWJpZCwgYm9vbCBtaXNz aW5nX29rKTsKIGV4dGVybiB2b2lkIEZyZWVTdWJzY3JpcHRpb24oU3Vic2NyaXB0aW9uICpzdWIp OwogZXh0ZXJuIHZvaWQgRGlzYWJsZVN1YnNjcmlwdGlvbihPaWQgc3ViaWQpOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oCmluZGV4IDJjYmU3ZDcuLjc3OTQ3NGYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaAorKysgYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmgKQEAgLTI2LDQgKzI2LDYgQEAgZXh0 ZXJuIHZvaWQgRHJvcFN1YnNjcmlwdGlvbihEcm9wU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwgYm9v bCBpc1RvcExldmVsKTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyU3Vic2NyaXB0aW9uT3du ZXIoY29uc3QgY2hhciAqbmFtZSwgT2lkIG5ld093bmVySWQpOwogZXh0ZXJuIHZvaWQgQWx0ZXJT dWJzY3JpcHRpb25Pd25lcl9vaWQoT2lkIHN1YmlkLCBPaWQgbmV3T3duZXJJZCk7CiAKK2V4dGVy biBjaGFyIGRlZkdldFN0cmVhbWluZ01vZGUoRGVmRWxlbSAqZGVmKTsKKwogI2VuZGlmCQkJCQkJ CS8qIFNVQlNDUklQVElPTkNNRFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vbG9naWNhbGxhdW5jaGVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fs bGF1bmNoZXIuaAppbmRleCBmMWUyODIxLi5kNTEzZWY1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9sb2dpY2FsbGF1bmNoZXIuaApAQCAtMTQsNiArMTQsNyBAQAogCiBleHRlcm4gUEdETExJ TVBPUlQgaW50IG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM7CiBleHRlcm4gUEdETExJ TVBPUlQgaW50IG1heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjsKK2V4dGVybiBQR0RM TElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjsK IAogZXh0ZXJuIHZvaWQgQXBwbHlMYXVuY2hlclJlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQg QXBwbHlMYXVuY2hlck1haW4oRGF0dW0gbWFpbl9hcmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FscHJvdG8uaAppbmRleCA3ZWFhNGM5Li4xZGE3YjAxIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9sb2dpY2FscHJvdG8uaApAQCAtMzIsMTIgKzMyLDE3IEBACiAgKgogICogTE9HSUNBTFJF UF9QUk9UT19UV09QSEFTRV9WRVJTSU9OX05VTSBpcyB0aGUgbWluaW11bSBwcm90b2NvbCB2ZXJz aW9uIHdpdGgKICAqIHN1cHBvcnQgZm9yIHR3by1waGFzZSBjb21taXQgZGVjb2RpbmcgKGF0IHBy ZXBhcmUgdGltZSkuIEludHJvZHVjZWQgaW4gUEcxNS4KKyAqCisgKiBMT0dJQ0FMUkVQX1BST1RP X1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSBpcyB0aGUgbWluaW11bSBwcm90b2NvbCB2ZXJz aW9uCisgKiB3aGVyZSB3ZSBzdXBwb3J0IGFwcGx5aW5nIGxhcmdlIHN0cmVhbWluZyB0cmFuc2Fj dGlvbnMgaW4gcGFyYWxsZWwuCisgKiBJbnRyb2R1Y2VkIGluIFBHMTYuCiAgKi8KICNkZWZpbmUg TE9HSUNBTFJFUF9QUk9UT19NSU5fVkVSU0lPTl9OVU0gMQogI2RlZmluZSBMT0dJQ0FMUkVQX1BS T1RPX1ZFUlNJT05fTlVNIDEKICNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVSU0lP Tl9OVU0gMgogI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVNIDMK LSNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19NQVhfVkVSU0lPTl9OVU0gTE9HSUNBTFJFUF9QUk9U T19UV09QSEFTRV9WRVJTSU9OX05VTQorI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9Q QVJBTExFTF9WRVJTSU9OX05VTSA0CisjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fTUFYX1ZFUlNJ T05fTlVNIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNCiAKIC8q CiAgKiBMb2dpY2FsIG1lc3NhZ2UgdHlwZXMKQEAgLTE3NSw2ICsxODAsMTcgQEAgdHlwZWRlZiBz dHJ1Y3QgTG9naWNhbFJlcFJvbGxiYWNrUHJlcGFyZWRUeG5EYXRhCiAJY2hhcgkJZ2lkW0dJRFNJ WkVdOwogfSBMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGE7CiAKKy8qCisgKiBUcmFu c2FjdGlvbiBwcm90b2NvbCBpbmZvcm1hdGlvbiBmb3Igc3RyZWFtIGFib3J0LgorICovCit0eXBl ZGVmIHN0cnVjdCBMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhCit7CisJVHJhbnNhY3Rpb25JZCB4 aWQ7CisJVHJhbnNhY3Rpb25JZCBzdWJ4aWQ7CisJWExvZ1JlY1B0cglhYm9ydF9sc247CisJVGlt ZXN0YW1wVHogYWJvcnRfdGltZTsKK30gTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YTsKKwogZXh0 ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9iZWdpbihTdHJpbmdJbmZvIG91dCwgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9iZWdpbihTdHJpbmdJ bmZvIGluLAogCQkJCQkJCQkgIExvZ2ljYWxSZXBCZWdpbkRhdGEgKmJlZ2luX2RhdGEpOwpAQCAt MjQ2LDkgKzI2MiwxMyBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9jb21t aXQoU3RyaW5nSW5mbyBvdXQsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bgogZXh0ZXJuIFRyYW5zYWN0 aW9uSWQgbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBpbiwKIAkJCQkJ CQkJCQkJCSAgIExvZ2ljYWxSZXBDb21taXREYXRhICpjb21taXRfZGF0YSk7CiBleHRlcm4gdm9p ZCBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rp b25JZCB4aWQsCi0JCQkJCQkJCQkJICBUcmFuc2FjdGlvbklkIHN1YnhpZCk7Ci1leHRlcm4gdm9p ZCBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gaW4sIFRyYW5zYWN0aW9u SWQgKnhpZCwKLQkJCQkJCQkJCQkgVHJhbnNhY3Rpb25JZCAqc3VieGlkKTsKKwkJCQkJCQkJCQkg IFRyYW5zYWN0aW9uSWQgc3VieGlkLAorCQkJCQkJCQkJCSAgWExvZ1JlY1B0ciBhYm9ydF9sc24s CisJCQkJCQkJCQkJICBUaW1lc3RhbXBUeiBhYm9ydF90aW1lLAorCQkJCQkJCQkJCSAgYm9vbCB3 cml0ZV9hYm9ydF9pbmZvKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJv cnQoU3RyaW5nSW5mbyBpbiwKKwkJCQkJCQkJCQkgTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YSAq YWJvcnRfZGF0YSwKKwkJCQkJCQkJCQkgYm9vbCByZWFkX2Fib3J0X2luZm8pOwogZXh0ZXJuIGNo YXIgKmxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbik7CiAK ICNlbmRpZgkJCQkJCQkvKiBMT0dJQ0FMX1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2xvZ2ljYWx3b3JrZXIuaAppbmRleCBjZDFiNmU4Li5kYzY4Y2Q4IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbG9naWNhbHdvcmtlci5oCkBAIC0xMiw4ICsxMiwxNiBAQAogI2lmbmRlZiBMT0dJ Q0FMV09SS0VSX0gKICNkZWZpbmUgTE9HSUNBTFdPUktFUl9ICiAKKyNpbmNsdWRlIDxzaWduYWwu aD4KKworZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQYXJhbGxlbEFw cGx5TWVzc2FnZVBlbmRpbmc7CisKIGV4dGVybiB2b2lkIEFwcGx5V29ya2VyTWFpbihEYXR1bSBt YWluX2FyZyk7CitleHRlcm4gdm9pZCBQYXJhbGxlbEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWlu X2FyZyk7CiAKIGV4dGVybiBib29sIElzTG9naWNhbFdvcmtlcih2b2lkKTsKK2V4dGVybiBib29s IElzTG9naWNhbFBhcmFsbGVsQXBwbHlXb3JrZXIodm9pZCk7CitleHRlcm4gdm9pZCBIYW5kbGVQ YXJhbGxlbEFwcGx5TWVzc2FnZUludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIEhhbmRsZVBh cmFsbGVsQXBwbHlNZXNzYWdlcyh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIExPR0lDQUxXT1JL RVJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmggYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAppbmRleCAyYTUwZDEwLi5jN2IxYWRmIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaApAQCAtNTMsNyArNTMsNyBAQCBleHRlcm4gWExvZ1Jl Y1B0ciByZXBsb3JpZ2luX2dldF9wcm9ncmVzcyhSZXBPcmlnaW5JZCBub2RlLCBib29sIGZsdXNo KTsKIAogZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UoWExvZ1JlY1B0ciBy ZW1vdGVfY29tbWl0LAogCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBsb2NhbF9jb21taXQpOwotZXh0 ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpOworZXh0 ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUsIGludCBh Y3F1aXJlZF9ieSk7CiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fcmVzZXQodm9pZCk7 CiBleHRlcm4gWExvZ1JlY1B0ciByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGJvb2wg Zmx1c2gpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5o IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAppbmRleCAwMjAyNzU1Li4zYzMw ZGE4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCisrKyBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKQEAgLTI2LDcgKzI2LDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgUEdPdXRwdXREYXRhCiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJ TGlzdAkgICAqcHVibGljYXRpb25zOwogCWJvb2wJCWJpbmFyeTsKLQlib29sCQlzdHJlYW1pbmc7 CisJY2hhcgkJc3RyZWFtaW5nOwogCWJvb2wJCW1lc3NhZ2VzOwogCWJvb2wJCXR3b19waGFzZTsK IAljaGFyCSAgICpvcmlnaW47CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9y ZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgK aW5kZXggYjIzZDhjYy4uYjJhNzAyOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJi dWZmZXIuaApAQCAtMzAxLDYgKzMwMSw3IEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJU WE4KIAl7CiAJCVRpbWVzdGFtcFR6IGNvbW1pdF90aW1lOwogCQlUaW1lc3RhbXBUeiBwcmVwYXJl X3RpbWU7CisJCVRpbWVzdGFtcFR6IGFib3J0X3RpbWU7CiAJfQkJCXhhY3RfdGltZTsKIAogCS8q CkBAIC02NjMsOSArNjY0LDExIEBAIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJBc3NpZ25DaGls ZChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiBleHRlcm4gdm9pZCBSZW9y ZGVyQnVmZmVyQ29tbWl0Q2hpbGQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlk LAogCQkJCQkJCQkJIFRyYW5zYWN0aW9uSWQgc3VieGlkLCBYTG9nUmVjUHRyIGNvbW1pdF9sc24s CiAJCQkJCQkJCQkgWExvZ1JlY1B0ciBlbmRfbHNuKTsKLWV4dGVybiB2b2lkIFJlb3JkZXJCdWZm ZXJBYm9ydChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIg bHNuKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJBYm9ydChSZW9yZGVyQnVmZmVyICpyYiwg VHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCSAgIFRpbWVzdGFtcFR6 IGFib3J0X3RpbWUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFib3J0T2xkKFJlb3JkZXJC dWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIG9sZGVzdFJ1bm5pbmdYaWQpOwotZXh0ZXJuIHZvaWQg UmVvcmRlckJ1ZmZlckZvcmdldChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQs IFhMb2dSZWNQdHIgbHNuKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJGb3JnZXQoUmVvcmRl ckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJ VGltZXN0YW1wVHogYWJvcnRfdGltZSk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVySW52YWxp ZGF0ZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNu KTsKIAogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlclNldEJhc2VTbmFwc2hvdChSZW9yZGVyQnVm ZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2 ZXIuaAppbmRleCA5MzM5ZjI5Li4wYzhiYmRkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJl Y2VpdmVyLmgKQEAgLTE4Miw3ICsxODIsNyBAQCB0eXBlZGVmIHN0cnVjdAogCQkJdWludDMyCQlw cm90b192ZXJzaW9uOwkvKiBMb2dpY2FsIHByb3RvY29sIHZlcnNpb24gKi8KIAkJCUxpc3QJICAg KnB1YmxpY2F0aW9uX25hbWVzOwkvKiBTdHJpbmcgbGlzdCBvZiBwdWJsaWNhdGlvbnMgKi8KIAkJ CWJvb2wJCWJpbmFyeTsgLyogQXNrIHB1Ymxpc2hlciB0byB1c2UgYmluYXJ5ICovCi0JCQlib29s CQlzdHJlYW1pbmc7CS8qIFN0cmVhbWluZyBvZiBsYXJnZSB0cmFuc2FjdGlvbnMgKi8KKwkJCWNo YXIJICAgKnN0cmVhbWluZ19zdHI7CS8qIFN0cmVhbWluZyBvZiBsYXJnZSB0cmFuc2FjdGlvbnMg Ki8KIAkJCWJvb2wJCXR3b3BoYXNlOwkvKiBTdHJlYW1pbmcgb2YgdHdvLXBoYXNlIHRyYW5zYWN0 aW9ucyBhdAogCQkJCQkJCQkJICogcHJlcGFyZSB0aW1lICovCiAJCQljaGFyCSAgICpvcmlnaW47 IC8qIE9ubHkgcHVibGlzaCBkYXRhIG9yaWdpbmF0aW5nIGZyb20gdGhlCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4IDJiNzExNGYuLmMxZjg2NjYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCkBAIC0xNyw4ICsxNywxMiBA QAogI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vi c2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAi bWlzY2FkbWluLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9uLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9maWxlc2V0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCisj aW5jbHVkZSAic3RvcmFnZS9zaG1fbXEuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobV90b2MuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKIAogCkBAIC02MCw2ICs2NCwxNSBAQCB0eXBlZGVm IHN0cnVjdCBMb2dpY2FsUmVwV29ya2VyCiAJICovCiAJRmlsZVNldCAgICAqc3RyZWFtX2ZpbGVz ZXQ7CiAKKwkvKgorCSAqIFBJRCBvZiBsZWFkZXIgYXBwbHkgd29ya2VyIGlmIHRoaXMgc2xvdCBp cyB1c2VkIGZvciBhIHBhcmFsbGVsIGFwcGx5CisJICogd29ya2VyLCBJbnZhbGlkUGlkIG90aGVy d2lzZS4KKwkgKi8KKwlwaWRfdAkJYXBwbHlfbGVhZGVyX3BpZDsKKworCS8qIEluZGljYXRlcyB3 aGV0aGVyIGFwcGx5IGNhbiBiZSBwZXJmb3JtZWQgaW4gcGFyYWxsZWwuICovCisJYm9vbAkJcGFy YWxsZWxfYXBwbHk7CisKIAkvKiBTdGF0cy4gKi8KIAlYTG9nUmVjUHRyCWxhc3RfbHNuOwogCVRp bWVzdGFtcFR6IGxhc3Rfc2VuZF90aW1lOwpAQCAtNjgsOSArODEsMTAzIEBAIHR5cGVkZWYgc3Ry dWN0IExvZ2ljYWxSZXBXb3JrZXIKIAlUaW1lc3RhbXBUeiByZXBseV90aW1lOwogfSBMb2dpY2Fs UmVwV29ya2VyOwogCisvKiBTdHJ1Y3QgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIGFwcGx5IGVy cmNvbnRleHQgaW5mb3JtYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IEFwcGx5RXJyb3JDYWxsYmFj a0FyZworeworCUxvZ2ljYWxSZXBNc2dUeXBlIGNvbW1hbmQ7CS8qIDAgaWYgaW52YWxpZCAqLwor CUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsOworCisJLyogUmVtb3RlIG5vZGUgaW5mb3JtYXRp b24gKi8KKwlpbnQJCQlyZW1vdGVfYXR0bnVtOwkvKiAtMSBpZiBpbnZhbGlkICovCisJVHJhbnNh Y3Rpb25JZCByZW1vdGVfeGlkOworCVhMb2dSZWNQdHIJZmluaXNoX2xzbjsKKwljaGFyCSAgICpv cmlnaW5fbmFtZTsKK30gQXBwbHlFcnJvckNhbGxiYWNrQXJnOworCisvKgorICogU3RhdGUgb2Yg dGhlIHRyYW5zYWN0aW9uIGluIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqCisgKiBUaGVzZSBl bnVtIHZhbHVlcyBhcmUgb3JkZXJlZCBieSB0aGUgb3JkZXIgb2YgdHJhbnNhY3Rpb24gc3RhdGUg Y2hhbmdlcyBpbgorICogcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICovCit0eXBlZGVmIGVudW0g UGFyYWxsZWxUcmFuc1N0YXRlCit7CisJUEFSQUxMRUxfVFJBTlNfVU5LTk9XTiwKKwlQQVJBTExF TF9UUkFOU19TVEFSVEVELAorCVBBUkFMTEVMX1RSQU5TX0ZJTklTSEVECit9IFBhcmFsbGVsVHJh bnNTdGF0ZTsKKworLyoKKyAqIFN0cnVjdCBmb3Igc2hhcmluZyBpbmZvcm1hdGlvbiBiZXR3ZWVu IGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHBhcmFsbGVsCisgKiBhcHBseSB3b3JrZXJzLgorICov Cit0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkCit7CisJc2xvY2tfdAkJ bXV0ZXg7CisKKwlUcmFuc2FjdGlvbklkCXhpZDsKKworCS8qCisJICogU3RhdGUgdXNlZCB0byBl bnN1cmUgY29tbWl0IG9yZGVyaW5nLgorCSAqCisJICogVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciB3aWxsIHNldCBpdCB0byBQQVJBTExFTF9UUkFOU19GSU5JU0hFRCBhZnRlcgorCSAqIGhhbmRs aW5nIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2ggY29tbWFuZHMgd2hpbGUgdGhlIGFwcGx5IGxlYWRl ciB3aWxsCisJICogd2FpdCBmb3IgaXQgdG8gYmVjb21lIFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVE IGJlZm9yZSBwcm9jZWVkaW5nIGluCisJICogdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmRzIChl LmcuIFNUUkVBTV9DT01NSVQvU1RSRUFNX1BSRVBBUkUpLgorCSAqLworCVBhcmFsbGVsVHJhbnNT dGF0ZQkJeGFjdF9zdGF0ZTsKKworCS8qIEluZm9ybWF0aW9uIGZyb20gdGhlIGNvcnJlc3BvbmRp bmcgTG9naWNhbFJlcFdvcmtlciBzbG90LiAqLworCXVpbnQxNgkJbG9naWNhbHJlcF93b3JrZXJf Z2VuZXJhdGlvbjsKKworCWludAkJCWxvZ2ljYWxyZXBfd29ya2VyX3Nsb3Rfbm87CisKKwkvKgor CSAqIEluZGljYXRlcyB3aGV0aGVyIHRoZXJlIGFyZSBwZW5kaW5nIG1lc3NhZ2VzIGluIHRoZSBx dWV1ZS4gVGhlIHBhcmFsbGVsCisJICogYXBwbHkgd29ya2VyIHdpbGwgY2hlY2sgaXQgYmVmb3Jl IHN0YXJ0aW5nIHRvIHdhaXQuCisJICovCisJcGdfYXRvbWljX3VpbnQzMglwZW5kaW5nX21lc3Nh Z2VfY291bnQ7Cit9IFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQ7CisKKy8qCisgKiBJbmZvcm1h dGlvbiB3aGljaCBpcyB1c2VkIHRvIG1hbmFnZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgor ICovCit0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEFwcGx5V29ya2VySW5mbworeworCXNobV9tcV9o YW5kbGUgKm1xX2hhbmRsZTsKKworCS8qCisJICogVGhlIHF1ZXVlIHVzZWQgdG8gdHJhbnNmZXIg ZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyCisJICogdG8gdGhl IGxlYWRlciBhcHBseSB3b3JrZXIuIE5VTEwgaWYgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBl eGl0ZWQKKwkgKiBjbGVhbmx5LgorCSAqLworCXNobV9tcV9oYW5kbGUgKmVycm9yX21xX2hhbmRs ZTsKKworCWRzbV9zZWdtZW50ICpkc21fc2VnOworCisJLyoKKwkgKiBUcnVlIGlmIHRoZSB3b3Jr ZXIgaXMgYmVpbmcgdXNlZCB0byBwcm9jZXNzIGEgcGFyYWxsZWwgYXBwbHkKKwkgKiB0cmFuc2Fj dGlvbi4gRmFsc2UgaW5kaWNhdGVzIHRoaXMgd29ya2VyIGlzIGF2YWlsYWJsZSBmb3IgcmUtdXNl LgorCSAqLworCWJvb2wJCWluX3VzZTsKKworCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKnNo YXJlZDsKK30gUGFyYWxsZWxBcHBseVdvcmtlckluZm87CisKIC8qIE1haW4gbWVtb3J5IGNvbnRl eHQgZm9yIGFwcGx5IHdvcmtlci4gUGVybWFuZW50IGR1cmluZyB3b3JrZXIgbGlmZXRpbWUuICov CiBleHRlcm4gUEdETExJTVBPUlQgTWVtb3J5Q29udGV4dCBBcHBseUNvbnRleHQ7CiAKK2V4dGVy biBQR0RMTElNUE9SVCBNZW1vcnlDb250ZXh0IEFwcGx5TWVzc2FnZUNvbnRleHQ7CisKK2V4dGVy biBQR0RMTElNUE9SVCBFcnJvckNvbnRleHRDYWxsYmFjayAqYXBwbHlfZXJyb3JfY29udGV4dF9z dGFjazsKK2V4dGVybiBQR0RMTElNUE9SVCBBcHBseUVycm9yQ2FsbGJhY2tBcmcgYXBwbHlfZXJy b3JfY2FsbGJhY2tfYXJnOworCitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBNeVN1YnNjcmlwdGlv blZhbGlkOworCitleHRlcm4gUEdETExJTVBPUlQgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAq TXlQYXJhbGxlbFNoYXJlZDsKKworZXh0ZXJuIFBHRExMSU1QT1JUIExpc3QgKnN1YnhhY3RsaXN0 OworCiAvKiBsaWJwcXJlY2VpdmVyIGNvbm5lY3Rpb24gKi8KIGV4dGVybiBQR0RMTElNUE9SVCBz dHJ1Y3QgV2FsUmVjZWl2ZXJDb25uICpMb2dSZXBXb3JrZXJXYWxSY3ZDb25uOwogCkBAIC03OSwx OCArMTg2LDIzIEBAIGV4dGVybiBQR0RMTElNUE9SVCBTdWJzY3JpcHRpb24gKk15U3Vic2NyaXB0 aW9uOwogZXh0ZXJuIFBHRExMSU1QT1JUIExvZ2ljYWxSZXBXb3JrZXIgKk15TG9naWNhbFJlcFdv cmtlcjsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgaW5fcmVtb3RlX3RyYW5zYWN0aW9uOwor ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb247CitleHRlcm4g UEdETExJTVBPUlQgUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKnN0cmVhbV9hcHBseV93b3JrZXI7 CiAKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCk7CiBleHRl cm4gTG9naWNhbFJlcFdvcmtlciAqbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9p ZCByZWxpZCwKIAkJCQkJCQkJCQkJCWJvb2wgb25seV9ydW5uaW5nKTsKIGV4dGVybiBMaXN0ICps b2dpY2FscmVwX3dvcmtlcnNfZmluZChPaWQgc3ViaWQsIGJvb2wgb25seV9ydW5uaW5nKTsKLWV4 dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lkIHN1YmlkLCBj b25zdCBjaGFyICpzdWJuYW1lLAotCQkJCQkJCQkJIE9pZCB1c2VyaWQsIE9pZCByZWxpZCk7Citl eHRlcm4gYm9vbCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwg Y29uc3QgY2hhciAqc3VibmFtZSwKKwkJCQkJCQkJCSBPaWQgdXNlcmlkLCBPaWQgcmVsaWQsCisJ CQkJCQkJCQkgZHNtX2hhbmRsZSBzdWJ3b3JrZXJfZHNtKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxy ZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpOworZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF93b3JrZXJfc3RvcF9ieV9zbG90KGludCBzbG90X25vLCB1aW50MTYgZ2VuZXJhdGlvbik7 CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl93YWtldXAoT2lkIHN1YmlkLCBPaWQgcmVs aWQpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwX3B0cihMb2dpY2FsUmVw V29ya2VyICp3b3JrZXIpOwogCiBleHRlcm4gaW50CWxvZ2ljYWxyZXBfc3luY193b3JrZXJfY291 bnQoT2lkIHN1YmlkKTsKK2V4dGVybiBpbnQJbG9naWNhbHJlcF9wYXJhbGxlbF9hcHBseV93b3Jr ZXJfY291bnQoT2lkIHN1YmlkKTsKIAogZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25PcmlnaW5OYW1l Rm9yTG9naWNhbFJlcChPaWQgc3Vib2lkLCBPaWQgcmVsaWQsCiAJCQkJCQkJCQkJCSAgIGNoYXIg Km9yaWdpbm5hbWUsIFNpemUgc3pvcmlnaW5uYW1lKTsKQEAgLTEwMywxMCArMjE1LDU0IEBAIGV4 dGVybiB2b2lkIHByb2Nlc3Nfc3luY2luZ190YWJsZXMoWExvZ1JlY1B0ciBjdXJyZW50X2xzbik7 CiBleHRlcm4gdm9pZCBpbnZhbGlkYXRlX3N5bmNpbmdfdGFibGVfc3RhdGVzKERhdHVtIGFyZywg aW50IGNhY2hlaWQsCiAJCQkJCQkJCQkJCXVpbnQzMiBoYXNodmFsdWUpOwogCitleHRlcm4gdm9p ZCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpOworCitleHRlcm4gdm9pZCBtYXliZV9yZXJl YWRfc3Vic2NyaXB0aW9uKHZvaWQpOworCitleHRlcm4gdm9pZCBJbml0aWFsaXplQXBwbHlXb3Jr ZXIodm9pZCk7CisKKy8qIEZ1bmN0aW9uIGZvciBhcHBseSBlcnJvciBjYWxsYmFjayAqLworZXh0 ZXJuIHZvaWQgYXBwbHlfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKTsKKworLyogUGFyYWxsZWwg YXBwbHkgd29ya2VyIHNldHVwIGFuZCBpbnRlcmFjdGlvbnMgKi8KK2V4dGVybiB2b2lkIHBhX3N0 YXJ0X3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCk7CitleHRlcm4gUGFyYWxsZWxBcHBseVdvcmtl ckluZm8gKnBhX2ZpbmRfd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkKTsKK2V4dGVybiB2b2lkIHBh X3NldF94YWN0X3N0YXRlKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQsCisJCQkJ CQkJCQkJICBQYXJhbGxlbFRyYW5zU3RhdGUgaW5feGFjdCk7CitleHRlcm4gYm9vbCBwYV9mcmVl X3dvcmtlcihQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sIFRyYW5zYWN0aW9uSWQgeGlk KTsKKworZXh0ZXJuIHZvaWQgcGFfd2FpdF9mb3JfeGFjdF9maW5pc2goUGFyYWxsZWxBcHBseVdv cmtlclNoYXJlZCAqd3NoYXJlZCk7CitleHRlcm4gdm9pZCBwYV9zZW5kX2RhdGEoUGFyYWxsZWxB cHBseVdvcmtlckluZm8gKndpbmZvLCBTaXplIG5ieXRlcywKKwkJCQkJCQkJCSBjb25zdCB2b2lk ICpkYXRhKTsKKworZXh0ZXJuIHZvaWQgcGFfc3RhcnRfc3VidHJhbnMoVHJhbnNhY3Rpb25JZCBj dXJyZW50X3hpZCwgVHJhbnNhY3Rpb25JZCB0b3BfeGlkKTsKK2V4dGVybiB2b2lkIHBhX3N0cmVh bV9hYm9ydChMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhICphYm9ydF9kYXRhKTsKKworZXh0ZXJu IHZvaWQgcGFfbG9ja19zdHJlYW0oVHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxvY2ttb2Rl KTsKK2V4dGVybiB2b2lkIHBhX2xvY2tfdHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQsIExP Q0tNT0RFIGxvY2ttb2RlKTsKKworZXh0ZXJuIHZvaWQgcGFfdW5sb2NrX3N0cmVhbShUcmFuc2Fj dGlvbklkIHhpZCwgTE9DS01PREUgbG9ja21vZGUpOworZXh0ZXJuIHZvaWQgcGFfdW5sb2NrX3Ry YW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CisKKyNkZWZp bmUgaXNQYXJhbGxlbEFwcGx5V29ya2VyKHdvcmtlcikgKCh3b3JrZXIpLT5hcHBseV9sZWFkZXJf cGlkICE9IEludmFsaWRQaWQpCisKIHN0YXRpYyBpbmxpbmUgYm9vbAogYW1fdGFibGVzeW5jX3dv cmtlcih2b2lkKQogewogCXJldHVybiBPaWRJc1ZhbGlkKE15TG9naWNhbFJlcFdvcmtlci0+cmVs aWQpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wKK2FtX2xlYWRlcl9hcHBseV93b3JrZXIodm9p ZCkKK3sKKwlyZXR1cm4gKCFPaWRJc1ZhbGlkKE15TG9naWNhbFJlcFdvcmtlci0+cmVsaWQpICYm CisJCQkhaXNQYXJhbGxlbEFwcGx5V29ya2VyKE15TG9naWNhbFJlcFdvcmtlcikpOworfQorCitz dGF0aWMgaW5saW5lIGJvb2wKK2FtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcih2b2lkKQoreworCXJl dHVybiBpc1BhcmFsbGVsQXBwbHlXb3JrZXIoTXlMb2dpY2FsUmVwV29ya2VyKTsKK30KKwogI2Vu ZGlmCQkJCQkJCS8qIFdPUktFUl9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2xtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oCmluZGV4IGJlMWQy YzkuLjVhM2JkMDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oCkBAIC0xMDcsNiArMTA3LDExIEBAIGV4dGVybiB2 b2lkIExvY2tTaGFyZWRPYmplY3RGb3JTZXNzaW9uKE9pZCBjbGFzc2lkLCBPaWQgb2JqaWQsIHVp bnQxNiBvYmpzdWJpZCwKIGV4dGVybiB2b2lkIFVubG9ja1NoYXJlZE9iamVjdEZvclNlc3Npb24o T2lkIGNsYXNzaWQsIE9pZCBvYmppZCwgdWludDE2IG9ianN1YmlkLAogCQkJCQkJCQkJCSBMT0NL TU9ERSBsb2NrbW9kZSk7CiAKK2V4dGVybiB2b2lkIExvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vz c2lvbihPaWQgc3Vib2lkLCBUcmFuc2FjdGlvbklkIHhpZCwgdWludDE2IG9iamlkLAorCQkJCQkJ CQkJCSAgIExPQ0tNT0RFIGxvY2ttb2RlKTsKK2V4dGVybiB2b2lkIFVubG9ja0FwcGx5VHJhbnNh Y3Rpb25Gb3JTZXNzaW9uKE9pZCBzdWJvaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCB1aW50MTYgb2Jq aWQsCisJCQkJCQkJCQkJCSBMT0NLTU9ERSBsb2NrbW9kZSk7CisKIC8qIERlc2NyaWJlIGEgbG9j a3RhZyBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KIGV4dGVybiB2b2lkIERlc2NyaWJlTG9ja1RhZyhT dHJpbmdJbmZvIGJ1ZiwgY29uc3QgTE9DS1RBRyAqdGFnKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9sb2NrLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAppbmRleCBl NGUxNDk1Li5iOWNkMmRmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAor KysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaApAQCAtMTQ5LDEwICsxNDksMTIgQEAgdHlw ZWRlZiBlbnVtIExvY2tUYWdUeXBlCiAJTE9DS1RBR19TUEVDVUxBVElWRV9UT0tFTiwJLyogc3Bl Y3VsYXRpdmUgaW5zZXJ0aW9uIFhpZCBhbmQgdG9rZW4gKi8KIAlMT0NLVEFHX09CSkVDVCwJCQkJ Lyogbm9uLXJlbGF0aW9uIGRhdGFiYXNlIG9iamVjdCAqLwogCUxPQ0tUQUdfVVNFUkxPQ0ssCQkJ LyogcmVzZXJ2ZWQgZm9yIG9sZCBjb250cmliL3VzZXJsb2NrIGNvZGUgKi8KLQlMT0NLVEFHX0FE VklTT1JZCQkJLyogYWR2aXNvcnkgdXNlciBsb2NrcyAqLworCUxPQ0tUQUdfQURWSVNPUlksCQkJ LyogYWR2aXNvcnkgdXNlciBsb2NrcyAqLworCUxPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04JLyog dHJhbnNhY3Rpb24gYmVpbmcgYXBwbGllZCBvbiB0aGUgc3Vic2NyaWJlcgorCQkJCQkJCQkgKiBz aWRlICovCiB9IExvY2tUYWdUeXBlOwogCi0jZGVmaW5lIExPQ0tUQUdfTEFTVF9UWVBFCUxPQ0tU QUdfQURWSVNPUlkKKyNkZWZpbmUgTE9DS1RBR19MQVNUX1RZUEUJTE9DS1RBR19BUFBMWV9UUkFO U0FDVElPTgogCiBleHRlcm4gUEdETExJTVBPUlQgY29uc3QgY2hhciAqY29uc3QgTG9ja1RhZ1R5 cGVOYW1lc1tdOwogCkBAIC0yNzgsNiArMjgwLDE3IEBAIHR5cGVkZWYgc3RydWN0IExPQ0tUQUcK IAkgKGxvY2t0YWcpLmxvY2t0YWdfdHlwZSA9IExPQ0tUQUdfQURWSVNPUlksIFwKIAkgKGxvY2t0 YWcpLmxvY2t0YWdfbG9ja21ldGhvZGlkID0gVVNFUl9MT0NLTUVUSE9EKQogCisvKgorICogSUQg aW5mbyBmb3IgYSByZW1vdGUgdHJhbnNhY3Rpb24gb24gdGhlIHN1YnNjcmliZXIgc2lkZSBpczoK KyAqIERCIE9JRCArIFNVQlNDUklQVElPTiBPSUQgKyBUUkFOU0FDVElPTiBJRCArIE9CSklECisg Ki8KKyNkZWZpbmUgU0VUX0xPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04obG9ja3RhZyxkYm9pZCxz dWJvaWQseGlkLG9iamlkKSBcCisJKChsb2NrdGFnKS5sb2NrdGFnX2ZpZWxkMSA9IChkYm9pZCks IFwKKwkgKGxvY2t0YWcpLmxvY2t0YWdfZmllbGQyID0gKHN1Ym9pZCksIFwKKwkgKGxvY2t0YWcp LmxvY2t0YWdfZmllbGQzID0gKHhpZCksIFwKKwkgKGxvY2t0YWcpLmxvY2t0YWdfZmllbGQ0ID0g KG9iamlkKSwgXAorCSAobG9ja3RhZykubG9ja3RhZ190eXBlID0gTE9DS1RBR19BUFBMWV9UUkFO U0FDVElPTiwgXAorCSAobG9ja3RhZykubG9ja3RhZ19sb2NrbWV0aG9kaWQgPSBERUZBVUxUX0xP Q0tNRVRIT0QpCiAKIC8qCiAgKiBQZXItbG9ja2VkLW9iamVjdCBsb2NrIGluZm9ybWF0aW9uOgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCBlZTYzNjkwLi45M2E1MWY0IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2NzaWduYWwuaApAQCAtMzUsNiArMzUsNyBAQCB0eXBlZGVmIGVudW0KIAlQUk9DU0lH X1dBTFNORF9JTklUX1NUT1BQSU5HLAkvKiBhc2sgd2Fsc2VuZGVycyB0byBwcmVwYXJlIGZvciBz aHV0ZG93biAgKi8KIAlQUk9DU0lHX0JBUlJJRVIsCQkJLyogZ2xvYmFsIGJhcnJpZXIgaW50ZXJy dXB0ICAqLwogCVBST0NTSUdfTE9HX01FTU9SWV9DT05URVhULCAvKiBhc2sgYmFja2VuZCB0byBs b2cgdGhlIG1lbW9yeSBjb250ZXh0cyAqLworCVBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FH RSwgLyogTWVzc2FnZSBmcm9tIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgKi8KIAogCS8qIFJlY292 ZXJ5IGNvbmZsaWN0IHJlYXNvbnMgKi8KIAlQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFC QVNFLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCmluZGV4IDZmMmQ1NjEuLmM2NTFhZDIgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaAorKysgYi9zcmMvaW5jbHVkZS91dGls cy93YWl0X2V2ZW50LmgKQEAgLTQyLDYgKzQyLDcgQEAgdHlwZWRlZiBlbnVtCiAJV0FJVF9FVkVO VF9DSEVDS1BPSU5URVJfTUFJTiwKIAlXQUlUX0VWRU5UX0xPR0lDQUxfQVBQTFlfTUFJTiwKIAlX QUlUX0VWRU5UX0xPR0lDQUxfTEFVTkNIRVJfTUFJTiwKKwlXQUlUX0VWRU5UX0xPR0lDQUxfUEFS QUxMRUxfQVBQTFlfTUFJTiwKIAlXQUlUX0VWRU5UX1JFQ09WRVJZX1dBTF9TVFJFQU0sCiAJV0FJ VF9FVkVOVF9TWVNMT0dHRVJfTUFJTiwKIAlXQUlUX0VWRU5UX1dBTF9SRUNFSVZFUl9NQUlOLApA QCAtMTA1LDYgKzEwNiw3IEBAIHR5cGVkZWYgZW51bQogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JV Q0tFVFNfQUxMT0NBVEUsCiAJV0FJVF9FVkVOVF9IQVNIX0dST1dfQlVDS0VUU19FTEVDVCwKIAlX QUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX1JFSU5TRVJULAorCVdBSVRfRVZFTlRfTE9HSUNB TF9QQVJBTExFTF9BUFBMWV9TVEFURV9DSEFOR0UsCiAJV0FJVF9FVkVOVF9MT0dJQ0FMX1NZTkNf REFUQSwKIAlXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19TVEFURV9DSEFOR0UsCiAJV0FJVF9FVkVO VF9NUV9JTlRFUk5BTCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vi c2NyaXB0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91 dAppbmRleCBjMTNkMjE4Li4xZWQ2ZjRjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z dWJzY3JpcHRpb24ub3V0CkBAIC0xMTcsNyArMTE3LDcgQEAgSElOVDogIFRvIGluaXRpYXRlIHJl cGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3Qs IGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25z CiAgICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVk IHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwg RGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAg IENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3Rlc3RzdWI0IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYg ICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAg ICAgfCBmICAgICAgICAgICAgICAgIHwgbm9uZSAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJu YW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViNCB8IHJlZ3Jl c3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBv ZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IG5vbmUgICB8 IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAog KDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViNCBTRVQgKG9yaWdp biA9IGFueSk7CkBAIC0xMjUsNyArMTI1LDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YjQgU0VUIChvcmlnaW4gPSBhbnkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVh bWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3lu Y2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04g CiAtLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YjQgfCByZWdy ZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwg ZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAg fCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAK KyByZWdyZXNzX3Rlc3RzdWI0IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAg fCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBm ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJl Z3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIERST1AgU1VCU0NSSVBUSU9OIHJl Z3Jlc3NfdGVzdHN1YjM7CkBAIC0xMzgsNyArMTM4LDcgQEAgRVJST1I6ICBpbnZhbGlkIGNvbm5l Y3Rpb24gc3RyaW5nIHN5bnRheDogbWlzc2luZyAiPSIgYWZ0ZXIgImZvb2JhciIgaW4gY29ubmVj dGkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25z CiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQg fCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBE aXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAg Q29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAg ICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAg fCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1l PXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19z dWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAg ICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2Zm ICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSBy b3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIFBVQkxJQ0FUSU9O IHRlc3RwdWIyLCB0ZXN0cHViMyBXSVRIIChyZWZyZXNoID0gZmFsc2UpOwpAQCAtMTU4LDcgKzE1 OCw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0tJUCAobHNuID0gJzAv MTIzNDUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vi c2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAg fCBFbmFibGVkIHwgICAgIFB1YmxpY2F0aW9uICAgICB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3 by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMg Y29tbWl0IHwgICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jl c3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYg ICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwg YW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 MiB8IDAvMTIzNDUKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHViMix0ZXN0cHViM30gfCBmICAgICAgfCBvZmYgICAgICAgfCBk ICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAg ICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdDIgfCAwLzEyMzQ1CiAoMSByb3cp CiAKIC0tIG9rIC0gd2l0aCBsc24gPSBOT05FCkBAIC0xNzAsNyArMTcwLDcgQEAgRVJST1I6ICBp bnZhbGlkIFdBTCBsb2NhdGlvbiAoTFNOKTogMC8wCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8ICAgICBQdWJsaWNhdGlvbiAgICAgfCBC aW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8 IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgICBDb25uaW5mbyAgICAgICAg ICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0 ZXN0cHViMix0ZXN0cHViM30gfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAg IHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFt ZT1yZWdyZXNzX2RvZXNub3RleGlzdDIgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNz X3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViMix0ZXN0cHViM30gfCBmICAg ICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFu eSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdDIg fCAwLzAKICgxIHJvdykKIAogQkVHSU47CkBAIC0yMDUsNyArMjA1LDcgQEAgSElOVDogIEF2YWls YWJsZSB2YWx1ZXM6IGxvY2FsLCByZW1vdGVfd3JpdGUsIHJlbW90ZV9hcHBseSwgb24sIG9mZi4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRp b25zCiAgICAgICAgIE5hbWUgICAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBF bmFibGVkIHwgICAgIFB1YmxpY2F0aW9uICAgICB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1w aGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29t bWl0IHwgICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWJfZm9vIHwg cmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1YjIsdGVzdHB1YjN9 IHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAg ICAgfCBhbnkgICAgfCBsb2NhbCAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90 ZXhpc3QyIHwgMC8wCisgcmVncmVzc190ZXN0c3ViX2ZvbyB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9u X3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IG9mZiAgICAg ICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgbG9jYWwg ICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMAogKDEgcm93 KQogCiAtLSByZW5hbWUgYmFjayB0byBrZWVwIHRoZSByZXN0IHNpbXBsZQpAQCAtMjQyLDcgKzI0 Miw3IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11c3QgbWFudWFsbHkg Y3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJl YW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5 bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNO IAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jl c3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCB0ICAgICAgfCBm ICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8 IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAor IHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWJ9ICAgfCB0ICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAg ICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVn cmVzc190ZXN0c3ViIFNFVCAoYmluYXJ5ID0gZmFsc2UpOwpAQCAtMjUxLDEzICsyNTEsMTMgQEAg QUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUp OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMK ICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8 IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERp c2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBD b25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAg ICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8 IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9 cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1 YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAg ICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYg ICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJv dykKIAogRFJPUCBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViOwotLS0gZmFpbCAtIHN0cmVh bWluZyBtdXN0IGJlIGJvb2xlYW4KKy0tIGZhaWwgLSBzdHJlYW1pbmcgbXVzdCBiZSBib29sZWFu IG9yICdwYXJhbGxlbCcKIENSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIENPTk5F Q1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCcgUFVCTElDQVRJT04gdGVzdHB1YiBX SVRIIChjb25uZWN0ID0gZmFsc2UsIHN0cmVhbWluZyA9IGZvbyk7Ci1FUlJPUjogIHN0cmVhbWlu ZyByZXF1aXJlcyBhIEJvb2xlYW4gdmFsdWUKK0VSUk9SOiAgc3RyZWFtaW5nIHJlcXVpcmVzIGEg Qm9vbGVhbiB2YWx1ZSBvciAicGFyYWxsZWwiCiAtLSBub3cgaXQgd29ya3MKIENSRUFURSBTVUJT Q1JJUFRJT04gcmVncmVzc190ZXN0c3ViIENPTk5FQ1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNu b3RleGlzdCcgUFVCTElDQVRJT04gdGVzdHB1YiBXSVRIIChjb25uZWN0ID0gZmFsc2UsIHN0cmVh bWluZyA9IHRydWUpOwogV0FSTklORzogIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCwgYnV0IGlz IG5vdCBjb25uZWN0ZWQKQEAgLTI2Niw3ICsyNjYsMTUgQEAgSElOVDogIFRvIGluaXRpYXRlIHJl cGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3Qs IGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25z CiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQg fCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBE aXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAg Q29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAg ICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IHQgICAgICAgICB8IGQgICAgICAgICAgICAgICAg fCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1l PXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19z dWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9uICAg ICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2Zm ICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisoMSBy b3cpCisKK0FMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzdHJlYW1pbmcg PSBwYXJhbGxlbCk7CitcZFJzKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHN1YnNjcmlwdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdv LXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBj b21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKKy0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlw dGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgcGFyYWxsZWwgIHwg ZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAg ICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAog QUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IGZhbHNl KTsKQEAgLTI3NSw3ICsyODMsNyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3Vi IFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcg fCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9u b3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vi c2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAg ICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAg ICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jl c3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3Rw dWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAg ICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2Rv ZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiAtLSBmYWlsIC0gcHVibGljYXRpb24gYWxyZWFk eSBleGlzdHMKQEAgLTI5Myw3ICszMDEsNyBAQCBFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHVi MSIgaXMgYWxyZWFkeSBpbiBzdWJzY3JpcHRpb24gInJlZ3Jlc3NfdGVzdHN1YiIKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAg ICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8ICAg ICAgICAgUHVibGljYXRpb24gICAgICAgICB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFz ZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0 IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jl c3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIsdGVzdHB1YjEsdGVzdHB1 YjJ9IHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAg ICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91 c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViLHRlc3RwdWIxLHRlc3RwdWIyfSB8IGYgICAgICB8IG9m ZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwg b2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAo MSByb3cpCiAKIC0tIGZhaWwgLSBwdWJsaWNhdGlvbiB1c2VkIG1vcmUgdGhlbiBvbmNlCkBAIC0z MTEsNyArMzE5LDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBEUk9QIFBV QkxJQ0FUSU9OIHRlc3RwdWIxLCB0ZXN0cHViMiBXSVRIIChyZWYKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwg ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFy eSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3Jp Z2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwg U2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3Vi IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYg ICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwg YW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYg ICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAg ICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJu YW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIERST1AgU1VCU0NSSVBU SU9OIHJlZ3Jlc3NfdGVzdHN1YjsKQEAgLTM1MCw3ICszNTgsNyBAQCBISU5UOiAgVG8gaW5pdGlh dGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRpb24g c2xvdCwgZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlw dGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5h YmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1p dCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAg ICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwg ZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgcCAgICAgICAgICAg ICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBk Ym5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdy ZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwg b2ZmICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAg fCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAK ICgxIHJvdykKIAogLS1mYWlsIC0gYWx0ZXIgb2YgdHdvX3BoYXNlIG9wdGlvbiBub3Qgc3VwcG9y dGVkLgpAQCAtMzYyLDcgKzM3MCw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3Rz dWIgU0VUIChzdHJlYW1pbmcgPSB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWlu ZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hy b25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAt LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19z dWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IHQgICAg ICAgICB8IHAgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2Zm ICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVn cmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVz dHB1Yn0gICB8IGYgICAgICB8IG9uICAgICAgICB8IHAgICAgICAgICAgICAgICAgfCBmICAgICAg ICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3Nf ZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNz X3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKQEAgLTM3NSw3ICszODMsNyBAQCBISU5U OiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUg cmVwbGljYXRpb24gc2xvdCwgZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdv LXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBj b21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlw dGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgdCAgICAgICAgIHwg cCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAg ICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rl c3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAg IHwgZiAgICAgIHwgb24gICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAg ICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90 ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1 YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwpAQCAtMzkxLDcgKzM5OSw3IEBAIEhJTlQ6ICBUbyBp bml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNh dGlvbiBzbG90LCBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vi c2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAg fCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2Ug Y29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8 ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3Vz ZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAg ICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAg ICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8 IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAg ICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFu eSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8 IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAo ZGlzYWJsZV9vbl9lcnJvciA9IHRydWUpOwpAQCAtMzk5LDcgKzQwNyw3IEBAIEFMVEVSIFNVQlND UklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChkaXNhYmxlX29uX2Vycm9yID0gdHJ1ZSk7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAg ICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVi bGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJs ZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5p bmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgdCAg ICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2Ny aXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAg fCBkICAgICAgICAgICAgICAgIHwgdCAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAg ICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQog CiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9O RSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzY3JpcHRpb24uc3FsIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vic2NyaXB0aW9uLnNxbAppbmRleCBlYWVhZGU4Li43OTkx YWJmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzY3JpcHRpb24uc3FsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5zcWwKQEAgLTE2Nyw3ICsxNjcs NyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0g Tk9ORSk7CiAKIERST1AgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YjsKIAotLS0gZmFpbCAt IHN0cmVhbWluZyBtdXN0IGJlIGJvb2xlYW4KKy0tIGZhaWwgLSBzdHJlYW1pbmcgbXVzdCBiZSBi b29sZWFuIG9yICdwYXJhbGxlbCcKIENSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3Vi IENPTk5FQ1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCcgUFVCTElDQVRJT04gdGVz dHB1YiBXSVRIIChjb25uZWN0ID0gZmFsc2UsIHN0cmVhbWluZyA9IGZvbyk7CiAKIC0tIG5vdyBp dCB3b3JrcwpAQCAtMTc1LDYgKzE3NSwxMCBAQCBDUkVBVEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBVQgogCiBc ZFJzKwogCitBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5n ID0gcGFyYWxsZWwpOworCitcZFJzKworCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0 c3ViIFNFVCAoc3RyZWFtaW5nID0gZmFsc2UpOwogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CmluZGV4IGY4MzAyZjEuLjUxZGNjZjcgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0x NDcyLDYgKzE0NzIsNyBAQCBMb2dpY2FsUmVwUmVsSWQKIExvZ2ljYWxSZXBSZWxNYXBFbnRyeQog TG9naWNhbFJlcFJlbGF0aW9uCiBMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGEKK0xv Z2ljYWxSZXBTdHJlYW1BYm9ydERhdGEKIExvZ2ljYWxSZXBUdXBsZURhdGEKIExvZ2ljYWxSZXBU eXAKIExvZ2ljYWxSZXBXb3JrZXIKQEAgLTE2NjMsNiArMTY2NCw5IEBAIE92ZXJyaWRlU3RhY2tF bnRyeQogT3ZlcnJpZGluZ0tpbmQKIFBBQ0VfSEVBREVSCiBQQUNMCitQYXJhbGxlbEFwcGx5V29y a2VyRW50cnkKK1BhcmFsbGVsQXBwbHlXb3JrZXJJbmZvCitQYXJhbGxlbEFwcGx5V29ya2VyU2hh cmVkCiBQQVRICiBQQk9PTAogUEN0eHRIYW5kbGUKQEAgLTE4OTQsNiArMTg5OCw3IEBAIFBhcmFs bGVsU2xvdFJlc3VsdEhhbmRsZXIKIFBhcmFsbGVsU3RhdGUKIFBhcmFsbGVsVGFibGVTY2FuRGVz YwogUGFyYWxsZWxUYWJsZVNjYW5EZXNjRGF0YQorUGFyYWxsZWxUcmFuc1N0YXRlCiBQYXJhbGxl bFZhY3V1bVN0YXRlCiBQYXJhbGxlbFdvcmtlckNvbnRleHQKIFBhcmFsbGVsV29ya2VySW5mbwpA QCAtMjc4NCw2ICsyNzg5LDcgQEAgVHJhbnNhY3Rpb25TdG10S2luZAogVHJhbnNmb3JtSW5mbwog VHJhbnNmb3JtSnNvblN0cmluZ1ZhbHVlc1N0YXRlCiBUcmFuc2l0aW9uQ2FwdHVyZVN0YXRlCitU cmFuc0FwcGx5QWN0aW9uCiBUcmdtQXJjCiBUcmdtQXJjSW5mbwogVHJnbUJvdW5kCi0tIAoyLjcu Mi53aW5kb3dzLjEKCg== --_004_OS0PR01MB5716A380FDDE576CCD84F5BE94049OS0PR01MB5716jpnp_--