Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tTJoJ-004iik-VI for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jan 2025 11:56:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tTJoJ-00Enn4-Bn for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jan 2025 11:56:19 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tTHI9-00DFdO-TM for pgsql-hackers@lists.postgresql.org; Thu, 02 Jan 2025 09:14:58 +0000 Received: from mgamail.intel.com ([198.175.65.16]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tTHI6-001gmw-1b for pgsql-hackers@lists.postgresql.org; Thu, 02 Jan 2025 09:14:56 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1735809294; x=1767345294; h=from:to:subject:date:message-id:mime-version; bh=oZCLHq8+E8RP50bbdW5Y+88/F3Rk+/Z+KbtqQEN11h8=; b=fLi9KbWo2b6vwDoGlhRKi/3iJ3rX2LKzUNv/lfAUdLyKf8RPxRCq4lEb YhEW1BXi9k9N0E2rDtdAyKIlEy2CiDcQoVECtppGIh6dUGVM1SjTp5z5l FNwpAn/trr+ODMwhNICetzTHZTL1zHI35pg/4J6q9DDysmz7ycux+kEgt 2Pcd6Z1AIl6NZ6o8fhilkMD6TJLSydTFlPXoD530oAf/ec7n6Ks0HYHfT 92XYp99Cdu3Vj5lOK5nIxazvxAufuaaGSU0hx6GSLIoWHnFqsqhMqgD7x 55NltsHyAJgSbHQ1aLvsCXh9XPX5y2vY5qAW9Jurzb7Z9MMxe03WQqrhP A==; X-CSE-ConnectionGUID: jdnB2iRhQa2O+Cp06ckq8w== X-CSE-MsgGUID: w9mQCgvfSZKjY42sl7mwmg== X-IronPort-AV: E=McAfee;i="6700,10204,11302"; a="36195243" X-IronPort-AV: E=Sophos;i="6.12,284,1728975600"; d="scan'208,223";a="36195243" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by orvoesa108.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jan 2025 01:14:52 -0800 X-CSE-ConnectionGUID: rtGu/pMWQqGU0u2J+Qw3QA== X-CSE-MsgGUID: v649ihRJRWOHPlv6+Wk6Og== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,284,1728975600"; d="scan'208,223";a="101949959" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by fmviesa009.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 02 Jan 2025 01:14:52 -0800 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.44; Thu, 2 Jan 2025 01:14:51 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.44 via Frontend Transport; Thu, 2 Jan 2025 01:14:51 -0800 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.175) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Thu, 2 Jan 2025 01:14:51 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=b/VG/lZwkOB1YN+S6GE4PqABfSwcQhRVtdkcsI1ftMRh0cQdZxfxpKbsWd3tYW7LzBw1IQWPLPYfrX60F3qAueb5f7ZSq8YI4ZypNjCtRBKms8LQRse758IjMBDGZvSD/Z2T8WH2E0YXVe8G4iXpJBuvpZFzbiUbxh4LaDLKyj38hsNxOB78nVooa3pUGmZbDV91NY7OWFVciOQfObwpK/JekSsYIr1hoe/nO4kdpw6Il7tMp46guVhxw/4yQ6D/SMZOG8Sp8Y07AC4VUXxnuWR6H9dhAIJ3aD/NlxfOsP9mIZhCpyAXbjgZurYoiCbT29TtYIQlqVynBQe/LUWe8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=XrRKN4dhfLZXZ6nVfsZTKpQxOg8/8eZNTEqnxGG/BME=; b=EL562cp+4dxvkmppcJhCMFblZFEX5w+TIOeZ5/8Do9trpOV7cXetdfBqGfDlO9w9pa1jQ9XAJ6BOdMYcHOC0gdXjZqPWHcSowJyRILx4v3bLdrNY6J4AgYBEviHsOuq46VmIuD7N19fINHy72peIKQGElQzkoKGKuSe3QwacijdD0Ehuzal5svdos2PmrHJfELgbQBOhBygMzoltiOZJDevRa7TnzQNrhzRhs7K8T8hPis3aD5CFWYg61Fgj+Qyd/5R7RcGQvfAnhlY2P6go1XvGPmroeRIaFQNUHpEXX7+oi2eSTfQScFUfYeJcQ1HSmq9rwURPCYAo6t00oePFYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from PH7PR11MB5796.namprd11.prod.outlook.com (2603:10b6:510:13b::13) by MW4PR11MB6864.namprd11.prod.outlook.com (2603:10b6:303:21b::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8314.11; Thu, 2 Jan 2025 09:14:44 +0000 Received: from PH7PR11MB5796.namprd11.prod.outlook.com ([fe80::3df7:b9c0:960:78fa]) by PH7PR11MB5796.namprd11.prod.outlook.com ([fe80::3df7:b9c0:960:78fa%5]) with mapi id 15.20.8314.012; Thu, 2 Jan 2025 09:14:44 +0000 From: "Zhou, Zhiguo" To: "pgsql-hackers@lists.postgresql.org" Subject: RFC: Lock-free XLog Reservation from WAL Thread-Topic: RFC: Lock-free XLog Reservation from WAL Thread-Index: Adtc9m6dnwcurM9aRhGqCm4I/blifw== Date: Thu, 2 Jan 2025 09:14:44 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH7PR11MB5796:EE_|MW4PR11MB6864:EE_ x-ms-office365-filtering-correlation-id: 605e7fb8-caf0-4d23-0fec-08dd2b0de58e x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|38070700018; x-microsoft-antispam-message-info: =?us-ascii?Q?GTY9QFG/ZqR7iziVjZi1uxJJzX4R2gxc9GROFcJzZIj2tXSd8N7HK64dVfNP?= =?us-ascii?Q?pu+PUJ6q3E8qDSKOR0Fy37GNsg9tfcqdTtO+Pr89Uv4BxuVb6Pj5C6Rvyzst?= =?us-ascii?Q?s2Um0xnims9ITjPw5MDRvU424aqGWgwefh+qSHdITk+aJgGo3+9jDFyRKw4U?= =?us-ascii?Q?i15zlL2D6Kt5ac5gWwd8xCRUC/Jwhf2XkX+cReV0A9Lxt1FFOo/ziXQooiDQ?= =?us-ascii?Q?ZnSjfuSgF+ncsZXZ2T92sJhvU0y1n1jd/moe8SLaBebDUfBY8vppeKEY9+Cf?= =?us-ascii?Q?yNRONW1pNa0OTLvgJH/6Ruy9n3XMTYNWSn5uv+bs19M7NuErbQ3SzEQjzJZQ?= =?us-ascii?Q?vypojVdLYtKs0adpQVD0y/x4JgvdLb1OznLil3/a4jeFCJ0C5q0/O0/W1bF6?= =?us-ascii?Q?jCxno9B8QEEl1FWPmqU/0xA11xDTA04gB/+sXeC0LDiGg2a6l72K9+28IyEx?= =?us-ascii?Q?1bTwTzNB3nYtaKYfiIseWkByR2DKCusvMxRCdx7q4eERTCIKSiJDLODLVZo5?= =?us-ascii?Q?oUXhOjS290cyy31o3k+ku4BUXC/GjfZH5+FcC7rH11rI6Gg76AY6wBGhVMSo?= =?us-ascii?Q?veg8JD0wLWATlzUUpEIptFiblV3YBl9+LdQUW+raepxVE1wb2VBdnGt6DZ4D?= =?us-ascii?Q?TXU8dfEnKo1E9hIOeBxetL/ytT7gAVAN3ZormsJeMAo1k7Ml11kiCTG0YTab?= =?us-ascii?Q?Azs2ty4UZcQVoV+KsZXNabBjY23XUTY85IGZ9XkMspPKSYN5stjn97r8Myf7?= =?us-ascii?Q?7olMp/D21z5GL5tx0999H5a6oGC2DJDNfVVJhINFlJLfnwPZqZXePXniWgX1?= =?us-ascii?Q?8HYsxg485xbuaojy/zAH7pWm8KW/7MjdAVgX6CTSAjfQMKwV9os6RWBLBu4y?= =?us-ascii?Q?ge8ZX9c4QpRKpuz23Zdl1sc1uK5ySqKhgZoC+W6zr0w6ZC6vTS9K2a7fVpew?= =?us-ascii?Q?NYm9Y6LDapDZ3tt8d0R5yGlHJg67I2vmmo+BQPhK1wtmAkE6jdIXiGm+2l6t?= =?us-ascii?Q?w07NvFmD3dZ8EiyasgmoQgjkj+ICNwJxsXvZtvJF/PRlfloe88fXYKet9P07?= =?us-ascii?Q?VLac69ET3+h9FdsS4j1WpA92/Ijd/fHdAcRJv84dPJqyZtOn93X3i0t54jGp?= =?us-ascii?Q?ZVkl1gij1RXAoOMMNqYuV0YimwVzuFf5enzxcpwJayOWfAI0fG6hZ1nT5mVT?= =?us-ascii?Q?mvf1voMv0qnQMIsP0EFGMt35wC28Y/lEyg99ielbfkjGRzriv3mJJc0LPAEG?= =?us-ascii?Q?lNLOubyuDmvceMc3iB8zCprLTfqxW0u1hhh3Rtxb3wMRNHRbDQ1Jc9lPhg6o?= =?us-ascii?Q?miBP8DT1SrOGXLKdtF18S7ryyfCWP7Q/ueZJEQ8mXyHixfuHb8y7azgLOmjQ?= =?us-ascii?Q?CxuBVpk7YuZuLYGu4d9UIwHwntleuxg9WU5kivz6XE+pji4QMS27BPfwHVPd?= =?us-ascii?Q?wATTQDKNnHRrhsGCnvVwmfZblWafiIvb?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR11MB5796.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?bKdRtD9N0DuOmbLcJLjqCnKXFzmMtGa7lwvsff7Wrsfw16J2H09awc4QsLyp?= =?us-ascii?Q?6xrt1FCOX9ULYRCEC6+wDn2WG7fnNy4w51wNgC8uDS8m/s1uXmj0wUmrWhuE?= =?us-ascii?Q?B2a9XdgolF+mzv2BDxPCMZ3rtrKhP0llceATgfv13NOATAZiEQKTo5zv+5q9?= =?us-ascii?Q?vuxN0HpSGbq6dRY+uBznBXkcMuTSYG+sFmC4Qt7urCYEJKrS4toP3M+KVOrp?= =?us-ascii?Q?B/73ah3f74ZgQjseQIL6SfaGcUqTow17fyr2tRcw0roDpfMVfBY669+gL46t?= =?us-ascii?Q?H1YuApB7Plf1RoLr+O5UP+URMak4aOSQoS5A199DYVfyEPaiqpdU64Fk05Ch?= =?us-ascii?Q?vgbvaFE/vHN+xD4hXAqyhX39sqgZe8FxPdgiV/6FwT0qw4d2xJRhM44dW217?= =?us-ascii?Q?5+6taGpkqxudJx9C+BkPCLAsnuavz6+oV1MMe/p+4qNkYgUYjz5SXAkmeozW?= =?us-ascii?Q?ThlKjBgr9DHVhDA2ugKzOD46+SMWcab76vnWojJRHmQk1FrrAKJV2nWUBQvO?= =?us-ascii?Q?mMsi2EJWOdZCKn6J5UmuUZhgGkMIWd/vxWOOOrs059OTj4QoWA7QKETX4Qdh?= =?us-ascii?Q?v6z35xXV1l/PUf/ScOKxKxkWKZOmysNBGcwxRauyjkO+gtpv1+SkjUffyvfE?= =?us-ascii?Q?xtzCpxoNq+fz0irpfG4WFtTvIAYNKF9mjDFO9W6kuS4tW7XWanueAb74MOOK?= =?us-ascii?Q?kdRoCzqfoMMukoqqFJxpKri4KVpR60T762RS0uTCdw6Ms5MZNIGm6obuzj+T?= =?us-ascii?Q?9+6nP3GsuE5AZ7nCWn5JpMr0aTogIiPll26M8GQwLLbJI1KJKJK5RtqhDY2W?= =?us-ascii?Q?uBGhkLQ1xbAV20oYrBnSwbhXemILExZgn1GharOUirqpKjgeBN6fOm5uRsVK?= =?us-ascii?Q?SyLN7iLyqBqbQ69GyBf4C783s0xNs4KmZrZ6MJA2dCWs+/2ni1L9tWQDsOuh?= =?us-ascii?Q?OoNj5runCA7xSToyH19vQbLJJUyT0IK58viBjjJSGvo5Uw3ZkR424vUHT5sg?= =?us-ascii?Q?WYMEwpwBGCHObbRCqPG89c2saHP63jb+Oo2xTp7b5RkAIagfGmiWS8I7xjbQ?= =?us-ascii?Q?lejQc/4dOIkuOzuDroKHNQ6IiJWuvrbL+9fldeqQXJBYhvqoZyNjIYTznpv3?= =?us-ascii?Q?2qps4v4u4y0mEQ4AFLcMJtA+1gtkobOTfL/M7vEpZI6Lgr7WGdjLEooeSiLV?= =?us-ascii?Q?YvASAjx5VJunnTSoZU3v7qDVgHTyJX4nPl2u6D5PvWNs87tsalgb+KupP/9Q?= =?us-ascii?Q?hszmHPPYqPAQlOWeNamb1BzICjIB7OwRR6O+fEAwSfonjS7NmDyrHSY66ZBp?= =?us-ascii?Q?+RGUlFzJujYPT+xP2RrQw0b+y6VHE8YQy3VZSqnC4e0labboTod918A6z11h?= =?us-ascii?Q?MHat11/2LGAIXDu98uvnrcHa25A1akAxH2LB732NWjg6sp+WSSTGRAw1p0l8?= =?us-ascii?Q?dr5y47qjsklNp/y04YRzVl6HQrj+rUdglLHp+wMrI8+MCEGyWdo88cKNbOQy?= =?us-ascii?Q?coP5A7gEFFKFlsVosx+5eYO4UgK0cC0xh9mJheIIncCLhrab/AUd48YERg8T?= =?us-ascii?Q?+/oNyEL0Zg9L5/XDh7RbYiRu7N4zZw+dwQWjJTbc?= Content-Type: multipart/mixed; boundary="_002_PH7PR11MB57960AF063703DEB96FBCA98EF142PH7PR11MB5796namp_" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH7PR11MB5796.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 605e7fb8-caf0-4d23-0fec-08dd2b0de58e X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jan 2025 09:14:44.1714 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: QvlhgjxT8EUn5zJjS+9o/OYG0B3zxQydBo2cVvNHTlOWQHXw/CSGcAHedAkgfvpLLjiNf9aBsTk/i+XqVZiqzw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB6864 X-OriginatorOrg: intel.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_PH7PR11MB57960AF063703DEB96FBCA98EF142PH7PR11MB5796namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi all, I am reaching out to solicit your insights and comments on a recent proposa= l regarding the "Lock-free XLog Reservation from WAL." We have identified s= ome challenges with the current WAL insertions, which require space reserva= tions in the WAL buffer which involve updating two shared-memory statuses i= n XLogCtlInsert: CurrBytePos (the start position of the current XLog) and P= revBytePos (the prev-link to the previous XLog). Currently, the use of XLog= CtlInsert.insertpos_lck ensures consistency but introduces lock contention,= hindering the parallelism of XLog insertions. To address this issue, we propose the following changes: 1. Removal of PrevBytePos: This will allow increments of the CurrBytePos (a= single uint64 field) to be implemented with an atomic operation (fetch_add= ). 2. Updating Prev-Link of next XLog: Based on the fact that the prev-link of= the next XLog always points to the head of the current Xlog,we will slight= ly exceed the reserved memory range of the current XLog to update the prev-= link of the next XLog, regardless of which backend acquires the next memory= space. The next XLog inserter will wait until its prev-link is updated for= CRC calculation before starting its own XLog copy into the WAL. 3. Breaking Sequential Write Convention: Each backend will update the prev-= link of its next XLog first, then return to the header position for the cur= rent log insertion. This change will reduce the dependency of XLog writes o= n previous ones (compared with the sequential writes). 4. Revised GetXLogBuffer: To support #3, we need update this function to se= parate the LSN it intends to access from the LSN it expects to update in th= e insertingAt field. 5. Increase NUM_XLOGINSERT_LOCKS: With the above changes, increasing NUM_XL= OGINSERT_LOCKS, for example to 128, could effectively enhance the paralleli= sm. The attached patch could pass the regression tests (make check, make check-= world), and in the performance test of this POC on SPR (480 vCPU) shows tha= t this optimization could help the TPCC benchmark better scale with the cor= e count and as a result the performance with full cores enabled could be im= proved by 2.04x. Before we proceed with further patch validation and refinement work, we are= eager to hear the community's thoughts and comments on this optimization s= o that we can confirm our current work aligns with expectations. --_002_PH7PR11MB57960AF063703DEB96FBCA98EF142PH7PR11MB5796namp_ Content-Type: application/octet-stream; name="0001-Lock-free-XLog-Reservation-from-WAL.patch" Content-Description: 0001-Lock-free-XLog-Reservation-from-WAL.patch Content-Disposition: attachment; filename="0001-Lock-free-XLog-Reservation-from-WAL.patch"; size=14630; creation-date="Thu, 02 Jan 2025 09:14:31 GMT"; modification-date="Thu, 02 Jan 2025 09:14:43 GMT" Content-Transfer-Encoding: base64 RnJvbSAyZjRhMzJiMWQwOTQxOTE2N2ZlNTA0MDQ2NWM4YTM0NjQwMTBlMDEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaaGlndW8gWmhvdSA8emhpZ3VvLnpob3VAaW50ZWwuY29tPgpE YXRlOiBUaHUsIDIgSmFuIDIwMjUgMTI6MDQ6MDIgKzA4MDAKU3ViamVjdDogW1BBVENIXSBMb2Nr LWZyZWUgWExvZyBSZXNlcnZhdGlvbiBmcm9tIFdBTAoKUmVtb3ZlZCBQcmV2Qnl0ZVBvcyB0byBl bGltaW5hdGUgbG9jayBjb250ZW50aW9uLCBhbGxvd2luZyBhdG9taWMgdXBkYXRlcwp0byBDdXJy Qnl0ZVBvcy4gQWRqdXN0ZWQgWExvZyByZXNlcnZhdGlvbiB0byBleGNlZWQgY3VycmVudCBYTG9n IG1lbW9yeQpzbGlnaHRseSwgZW5hYmxpbmcgdGhlIG5leHQgWExvZydzIHByZXYtbGluayB1cGRh dGUgd2l0aG91dCB3YWl0aW5nIGZvcgp0aGUgY3VycmVudCBYTG9nLiBCYWNrZW5kcyBub3cgdXBk YXRlIG5leHQgWExvZydzIHByZXYtbGluayBiZWZvcmUKaW5zZXJ0aW5nIGN1cnJlbnQgbG9nLCBi cmVha2luZyBzZXF1ZW50aWFsIHdyaXRlIGNvbnZlbnRpb24uIFVwZGF0ZWQKR2V0WExvZ0J1ZmZl ciB0byBoYW5kbGUgc2VwYXJhdGUgYWNjZXNzIGFuZCB1cGRhdGUgTFNOcy4gSW5jcmVhc2VkCk5V TV9YTE9HSU5TRVJUX0xPQ0tTLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cu YyB8IDE4NiArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAx MzEgaW5zZXJ0aW9ucygrKSwgNTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Zy5jCmluZGV4IDZmNTg0MTJiY2EuLjYyMTVlYTY5NzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMKQEAgLTE0Nyw3ICsxNDcsNyBAQCBpbnQJCQl3YWxfc2VnbWVudF9zaXplID0gREVGQVVM VF9YTE9HX1NFR19TSVpFOwogICogdG8gaGFwcGVuIGNvbmN1cnJlbnRseSwgYnV0IGFkZHMgc29t ZSBDUFUgb3ZlcmhlYWQgdG8gZmx1c2hpbmcgdGhlIFdBTCwKICAqIHdoaWNoIG5lZWRzIHRvIGl0 ZXJhdGUgYWxsIHRoZSBsb2Nrcy4KICAqLwotI2RlZmluZSBOVU1fWExPR0lOU0VSVF9MT0NLUyAg OAorI2RlZmluZSBOVU1fWExPR0lOU0VSVF9MT0NLUyAgMTI4CiAKIC8qCiAgKiBNYXggZGlzdGFu Y2UgZnJvbSBsYXN0IGNoZWNrcG9pbnQsIGJlZm9yZSB0cmlnZ2VyaW5nIGEgbmV3IHhsb2ctYmFz ZWQKQEAgLTQwNCw4ICs0MDQsNyBAQCB0eXBlZGVmIHN0cnVjdCBYTG9nQ3RsSW5zZXJ0CiAJICog cHJldi1saW5rIG9mIHRoZSBuZXh0IHJlY29yZC4gVGhlc2UgYXJlIHN0b3JlZCBhcyAidXNhYmxl IGJ5dGUKIAkgKiBwb3NpdGlvbnMiIHJhdGhlciB0aGFuIFhMb2dSZWNQdHJzIChzZWUgWExvZ0J5 dGVQb3NUb1JlY1B0cigpKS4KIAkgKi8KLQl1aW50NjQJCUN1cnJCeXRlUG9zOwotCXVpbnQ2NAkJ UHJldkJ5dGVQb3M7CisJcGdfYXRvbWljX3VpbnQ2NAkJQ3VyckJ5dGVQb3M7CiAKIAkvKgogCSAq IE1ha2Ugc3VyZSB0aGUgYWJvdmUgaGVhdmlseS1jb250ZW5kZWQgc3BpbmxvY2sgYW5kIGJ5dGUg cG9zaXRpb25zIGFyZQpAQCAtNzAwLDEyICs2OTksMTQgQEAgc3RhdGljIHZvaWQgQ29weVhMb2dS ZWNvcmRUb1dBTChpbnQgd3JpdGVfbGVuLCBib29sIGlzTG9nU3dpdGNoLAogCQkJCQkJCQlYTG9n UmVjRGF0YSAqcmRhdGEsCiAJCQkJCQkJCVhMb2dSZWNQdHIgU3RhcnRQb3MsIFhMb2dSZWNQdHIg RW5kUG9zLAogCQkJCQkJCQlUaW1lTGluZUlEIHRsaSk7CitzdGF0aWMgWExvZ1JlY1B0ciBHZXRQ cmV2UmVjUHRyKFhMb2dSZWNQdHIgaGRyLCBUaW1lTGluZUlEIHRsaSk7CitzdGF0aWMgdm9pZCBT ZXRQcmV2UmVjUHRyKFhMb2dSZWNQdHIgaGRyLCBYTG9nUmVjUHRyIFByZXZQb3MsCisJCQkJCQkg IFRpbWVMaW5lSUQgdGxpLCBib29sIGluX29yZGVyKTsKIHN0YXRpYyB2b2lkIFJlc2VydmVYTG9n SW5zZXJ0TG9jYXRpb24oaW50IHNpemUsIFhMb2dSZWNQdHIgKlN0YXJ0UG9zLAotCQkJCQkJCQkJ ICBYTG9nUmVjUHRyICpFbmRQb3MsIFhMb2dSZWNQdHIgKlByZXZQdHIpOwotc3RhdGljIGJvb2wg UmVzZXJ2ZVhMb2dTd2l0Y2goWExvZ1JlY1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQdHIgKkVuZFBv cywKLQkJCQkJCQkgIFhMb2dSZWNQdHIgKlByZXZQdHIpOworCQkJCQkJCQkJICBYTG9nUmVjUHRy ICpFbmRQb3MpOworc3RhdGljIGJvb2wgUmVzZXJ2ZVhMb2dTd2l0Y2goWExvZ1JlY1B0ciAqU3Rh cnRQb3MsIFhMb2dSZWNQdHIgKkVuZFBvcyk7CiBzdGF0aWMgWExvZ1JlY1B0ciBXYWl0WExvZ0lu c2VydGlvbnNUb0ZpbmlzaChYTG9nUmVjUHRyIHVwdG8pOwotc3RhdGljIGNoYXIgKkdldFhMb2dC dWZmZXIoWExvZ1JlY1B0ciBwdHIsIFRpbWVMaW5lSUQgdGxpKTsKK3N0YXRpYyBjaGFyICpHZXRY TG9nQnVmZmVyKFhMb2dSZWNQdHIgcHRyLCBYTG9nUmVjUHRyIHVwdG8sIFRpbWVMaW5lSUQgdGxp KTsKIHN0YXRpYyBYTG9nUmVjUHRyIFhMb2dCeXRlUG9zVG9SZWNQdHIodWludDY0IGJ5dGVwb3Mp Owogc3RhdGljIFhMb2dSZWNQdHIgWExvZ0J5dGVQb3NUb0VuZFJlY1B0cih1aW50NjQgYnl0ZXBv cyk7CiBzdGF0aWMgdWludDY0IFhMb2dSZWNQdHJUb0J5dGVQb3MoWExvZ1JlY1B0ciBwdHIpOwpA QCAtODYyLDggKzg2Myw3IEBAIFhMb2dJbnNlcnRSZWNvcmQoWExvZ1JlY0RhdGEgKnJkYXRhLAog CQkgKiBSZXNlcnZlIHNwYWNlIGZvciB0aGUgcmVjb3JkIGluIHRoZSBXQUwuIFRoaXMgYWxzbyBz ZXRzIHRoZSB4bF9wcmV2CiAJCSAqIHBvaW50ZXIuCiAJCSAqLwotCQlSZXNlcnZlWExvZ0luc2Vy dExvY2F0aW9uKHJlY2hkci0+eGxfdG90X2xlbiwgJlN0YXJ0UG9zLCAmRW5kUG9zLAotCQkJCQkJ CQkgICZyZWNoZHItPnhsX3ByZXYpOworCQlSZXNlcnZlWExvZ0luc2VydExvY2F0aW9uKHJlY2hk ci0+eGxfdG90X2xlbiwgJlN0YXJ0UG9zLCAmRW5kUG9zKTsKIAogCQkvKiBOb3JtYWwgcmVjb3Jk cyBhcmUgYWx3YXlzIGluc2VydGVkLiAqLwogCQlpbnNlcnRlZCA9IHRydWU7CkBAIC04ODMsNyAr ODgzLDcgQEAgWExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEsCiAJCSAqLwogCQlB c3NlcnQoZnB3X2xzbiA9PSBJbnZhbGlkWExvZ1JlY1B0cik7CiAJCVdBTEluc2VydExvY2tBY3F1 aXJlRXhjbHVzaXZlKCk7Ci0JCWluc2VydGVkID0gUmVzZXJ2ZVhMb2dTd2l0Y2goJlN0YXJ0UG9z LCAmRW5kUG9zLCAmcmVjaGRyLT54bF9wcmV2KTsKKwkJaW5zZXJ0ZWQgPSBSZXNlcnZlWExvZ1N3 aXRjaCgmU3RhcnRQb3MsICZFbmRQb3MpOwogCX0KIAllbHNlCiAJewpAQCAtODk4LDE0ICs4OTgs MjIgQEAgWExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEsCiAJCSAqLwogCQlBc3Nl cnQoZnB3X2xzbiA9PSBJbnZhbGlkWExvZ1JlY1B0cik7CiAJCVdBTEluc2VydExvY2tBY3F1aXJl RXhjbHVzaXZlKCk7Ci0JCVJlc2VydmVYTG9nSW5zZXJ0TG9jYXRpb24ocmVjaGRyLT54bF90b3Rf bGVuLCAmU3RhcnRQb3MsICZFbmRQb3MsCi0JCQkJCQkJCSAgJnJlY2hkci0+eGxfcHJldik7CisJ CVJlc2VydmVYTG9nSW5zZXJ0TG9jYXRpb24ocmVjaGRyLT54bF90b3RfbGVuLCAmU3RhcnRQb3Ms ICZFbmRQb3MpOwogCQlSZWRvUmVjUHRyID0gSW5zZXJ0LT5SZWRvUmVjUHRyID0gU3RhcnRQb3M7 CiAJCWluc2VydGVkID0gdHJ1ZTsKIAl9CiAKIAlpZiAoaW5zZXJ0ZWQpCiAJeworCQlib29sCQlp c2xhcmdlcmVjb3JkOworCisJCWlzbGFyZ2VyZWNvcmQgPSBFbmRQb3MgLSBTdGFydFBvcyA+PSAo U2l6ZSkgWExPR2J1ZmZlcnMgKiBYTE9HX0JMQ0tTWjsKKwkJaWYgKCFpc2xhcmdlcmVjb3JkKQor CQl7CisJCQlTZXRQcmV2UmVjUHRyKEVuZFBvcywgU3RhcnRQb3MsIGluc2VydFRMSSwgZmFsc2Up OworCQl9CisJCXdoaWxlICghKHJlY2hkci0+eGxfcHJldiA9IEdldFByZXZSZWNQdHIoU3RhcnRQ b3MsIGluc2VydFRMSSkpKTsKKwogCQkvKgogCQkgKiBOb3cgdGhhdCB4bF9wcmV2IGhhcyBiZWVu IGZpbGxlZCBpbiwgY2FsY3VsYXRlIENSQyBvZiB0aGUgcmVjb3JkCiAJCSAqIGhlYWRlci4KQEAg LTkyMyw2ICs5MzEsMTEgQEAgWExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEsCiAJ CQkJCQkJY2xhc3MgPT0gV0FMSU5TRVJUX1NQRUNJQUxfU1dJVENILCByZGF0YSwKIAkJCQkJCQlT dGFydFBvcywgRW5kUG9zLCBpbnNlcnRUTEkpOwogCisJCWlmIChpc2xhcmdlcmVjb3JkKQorCQl7 CisJCQlTZXRQcmV2UmVjUHRyKEVuZFBvcywgU3RhcnRQb3MsIGluc2VydFRMSSwgdHJ1ZSk7CisJ CX0KKwogCQkvKgogCQkgKiBVbmxlc3MgcmVjb3JkIGlzIGZsYWdnZWQgYXMgbm90IGltcG9ydGFu dCwgdXBkYXRlIExTTiBvZiBsYXN0CiAJCSAqIGltcG9ydGFudCByZWNvcmQgaW4gdGhlIGN1cnJl bnQgc2xvdC4gV2hlbiBob2xkaW5nIGFsbCBsb2NrcywganVzdApAQCAtMTEwNSwxMyArMTExOCwx MSBAQCBYTG9nSW5zZXJ0UmVjb3JkKFhMb2dSZWNEYXRhICpyZGF0YSwKICAqIGlubGluZS4gV2Ug dXNlIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGhlcmUgdG8gdHJ5IHRvIGNvbnZpbmNlIGl0 LgogICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZAotUmVzZXJ2ZVhM b2dJbnNlcnRMb2NhdGlvbihpbnQgc2l6ZSwgWExvZ1JlY1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQ dHIgKkVuZFBvcywKLQkJCQkJCSAgWExvZ1JlY1B0ciAqUHJldlB0cikKK1Jlc2VydmVYTG9nSW5z ZXJ0TG9jYXRpb24oaW50IHNpemUsIFhMb2dSZWNQdHIgKlN0YXJ0UG9zLCBYTG9nUmVjUHRyICpF bmRQb3MpCiB7CiAJWExvZ0N0bEluc2VydCAqSW5zZXJ0ID0gJlhMb2dDdGwtPkluc2VydDsKIAl1 aW50NjQJCXN0YXJ0Ynl0ZXBvczsKIAl1aW50NjQJCWVuZGJ5dGVwb3M7Ci0JdWludDY0CQlwcmV2 Ynl0ZXBvczsKIAogCXNpemUgPSBNQVhBTElHTihzaXplKTsKIApAQCAtMTEyOCwxOSArMTEzOSwx MSBAQCBSZXNlcnZlWExvZ0luc2VydExvY2F0aW9uKGludCBzaXplLCBYTG9nUmVjUHRyICpTdGFy dFBvcywgWExvZ1JlY1B0ciAqRW5kUG9zLAogCSAqIGJlY2F1c2UgdGhlIHVzYWJsZSBieXRlIHBv c2l0aW9uIGRvZXNuJ3QgaW5jbHVkZSBhbnkgaGVhZGVycywgcmVzZXJ2aW5nCiAJICogWCBieXRl cyBmcm9tIFdBTCBpcyBhbG1vc3QgYXMgc2ltcGxlIGFzICJDdXJyQnl0ZVBvcyArPSBYIi4KIAkg Ki8KLQlTcGluTG9ja0FjcXVpcmUoJkluc2VydC0+aW5zZXJ0cG9zX2xjayk7Ci0KLQlzdGFydGJ5 dGVwb3MgPSBJbnNlcnQtPkN1cnJCeXRlUG9zOworCXN0YXJ0Ynl0ZXBvcyA9IHBnX2F0b21pY19m ZXRjaF9hZGRfdTY0KCZJbnNlcnQtPkN1cnJCeXRlUG9zLCBzaXplKTsKIAllbmRieXRlcG9zID0g c3RhcnRieXRlcG9zICsgc2l6ZTsKLQlwcmV2Ynl0ZXBvcyA9IEluc2VydC0+UHJldkJ5dGVQb3M7 Ci0JSW5zZXJ0LT5DdXJyQnl0ZVBvcyA9IGVuZGJ5dGVwb3M7Ci0JSW5zZXJ0LT5QcmV2Qnl0ZVBv cyA9IHN0YXJ0Ynl0ZXBvczsKLQotCVNwaW5Mb2NrUmVsZWFzZSgmSW5zZXJ0LT5pbnNlcnRwb3Nf bGNrKTsKIAogCSpTdGFydFBvcyA9IFhMb2dCeXRlUG9zVG9SZWNQdHIoc3RhcnRieXRlcG9zKTsK IAkqRW5kUG9zID0gWExvZ0J5dGVQb3NUb0VuZFJlY1B0cihlbmRieXRlcG9zKTsKLQkqUHJldlB0 ciA9IFhMb2dCeXRlUG9zVG9SZWNQdHIocHJldmJ5dGVwb3MpOwogCiAJLyoKIAkgKiBDaGVjayB0 aGF0IHRoZSBjb252ZXJzaW9ucyBiZXR3ZWVuICJ1c2FibGUgYnl0ZSBwb3NpdGlvbnMiIGFuZApA QCAtMTE0OCw3ICsxMTUxLDYgQEAgUmVzZXJ2ZVhMb2dJbnNlcnRMb2NhdGlvbihpbnQgc2l6ZSwg WExvZ1JlY1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQdHIgKkVuZFBvcywKIAkgKi8KIAlBc3NlcnQo WExvZ1JlY1B0clRvQnl0ZVBvcygqU3RhcnRQb3MpID09IHN0YXJ0Ynl0ZXBvcyk7CiAJQXNzZXJ0 KFhMb2dSZWNQdHJUb0J5dGVQb3MoKkVuZFBvcykgPT0gZW5kYnl0ZXBvcyk7Ci0JQXNzZXJ0KFhM b2dSZWNQdHJUb0J5dGVQb3MoKlByZXZQdHIpID09IHByZXZieXRlcG9zKTsKIH0KIAogLyoKQEAg LTExNjEsMTIgKzExNjMsMTEgQEAgUmVzZXJ2ZVhMb2dJbnNlcnRMb2NhdGlvbihpbnQgc2l6ZSwg WExvZ1JlY1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQdHIgKkVuZFBvcywKICAqIHJlc2VydmluZyBh bnkgc3BhY2UsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KICovCiBzdGF0aWMgYm9v bAotUmVzZXJ2ZVhMb2dTd2l0Y2goWExvZ1JlY1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQdHIgKkVu ZFBvcywgWExvZ1JlY1B0ciAqUHJldlB0cikKK1Jlc2VydmVYTG9nU3dpdGNoKFhMb2dSZWNQdHIg KlN0YXJ0UG9zLCBYTG9nUmVjUHRyICpFbmRQb3MpCiB7CiAJWExvZ0N0bEluc2VydCAqSW5zZXJ0 ID0gJlhMb2dDdGwtPkluc2VydDsKIAl1aW50NjQJCXN0YXJ0Ynl0ZXBvczsKIAl1aW50NjQJCWVu ZGJ5dGVwb3M7Ci0JdWludDY0CQlwcmV2Ynl0ZXBvczsKIAl1aW50MzIJCXNpemUgPSBNQVhBTElH TihTaXplT2ZYTG9nUmVjb3JkKTsKIAlYTG9nUmVjUHRyCXB0cjsKIAl1aW50MzIJCXNlZ2xlZnQ7 CkBAIC0xMTc5LDcgKzExODAsNyBAQCBSZXNlcnZlWExvZ1N3aXRjaChYTG9nUmVjUHRyICpTdGFy dFBvcywgWExvZ1JlY1B0ciAqRW5kUG9zLCBYTG9nUmVjUHRyICpQcmV2UHRyKQogCSAqLwogCVNw aW5Mb2NrQWNxdWlyZSgmSW5zZXJ0LT5pbnNlcnRwb3NfbGNrKTsKIAotCXN0YXJ0Ynl0ZXBvcyA9 IEluc2VydC0+Q3VyckJ5dGVQb3M7CisJc3RhcnRieXRlcG9zID0gcGdfYXRvbWljX3JlYWRfdTY0 KCZJbnNlcnQtPkN1cnJCeXRlUG9zKTsKIAogCXB0ciA9IFhMb2dCeXRlUG9zVG9FbmRSZWNQdHIo c3RhcnRieXRlcG9zKTsKIAlpZiAoWExvZ1NlZ21lbnRPZmZzZXQocHRyLCB3YWxfc2VnbWVudF9z aXplKSA9PSAwKQpAQCAtMTE5MCw3ICsxMTkxLDYgQEAgUmVzZXJ2ZVhMb2dTd2l0Y2goWExvZ1Jl Y1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQdHIgKkVuZFBvcywgWExvZ1JlY1B0ciAqUHJldlB0cikK IAl9CiAKIAllbmRieXRlcG9zID0gc3RhcnRieXRlcG9zICsgc2l6ZTsKLQlwcmV2Ynl0ZXBvcyA9 IEluc2VydC0+UHJldkJ5dGVQb3M7CiAKIAkqU3RhcnRQb3MgPSBYTG9nQnl0ZVBvc1RvUmVjUHRy KHN0YXJ0Ynl0ZXBvcyk7CiAJKkVuZFBvcyA9IFhMb2dCeXRlUG9zVG9FbmRSZWNQdHIoZW5kYnl0 ZXBvcyk7CkBAIC0xMjAyLDE3ICsxMjAyLDEzIEBAIFJlc2VydmVYTG9nU3dpdGNoKFhMb2dSZWNQ dHIgKlN0YXJ0UG9zLCBYTG9nUmVjUHRyICpFbmRQb3MsIFhMb2dSZWNQdHIgKlByZXZQdHIpCiAJ CSpFbmRQb3MgKz0gc2VnbGVmdDsKIAkJZW5kYnl0ZXBvcyA9IFhMb2dSZWNQdHJUb0J5dGVQb3Mo KkVuZFBvcyk7CiAJfQotCUluc2VydC0+Q3VyckJ5dGVQb3MgPSBlbmRieXRlcG9zOwotCUluc2Vy dC0+UHJldkJ5dGVQb3MgPSBzdGFydGJ5dGVwb3M7CisJcGdfYXRvbWljX3dyaXRlX3U2NCgmSW5z ZXJ0LT5DdXJyQnl0ZVBvcywgZW5kYnl0ZXBvcyk7CiAKIAlTcGluTG9ja1JlbGVhc2UoJkluc2Vy dC0+aW5zZXJ0cG9zX2xjayk7CiAKLQkqUHJldlB0ciA9IFhMb2dCeXRlUG9zVG9SZWNQdHIocHJl dmJ5dGVwb3MpOwotCiAJQXNzZXJ0KFhMb2dTZWdtZW50T2Zmc2V0KCpFbmRQb3MsIHdhbF9zZWdt ZW50X3NpemUpID09IDApOwogCUFzc2VydChYTG9nUmVjUHRyVG9CeXRlUG9zKCpFbmRQb3MpID09 IGVuZGJ5dGVwb3MpOwogCUFzc2VydChYTG9nUmVjUHRyVG9CeXRlUG9zKCpTdGFydFBvcykgPT0g c3RhcnRieXRlcG9zKTsKLQlBc3NlcnQoWExvZ1JlY1B0clRvQnl0ZVBvcygqUHJldlB0cikgPT0g cHJldmJ5dGVwb3MpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMjM2LDcgKzEyMzIsNyBAQCBD b3B5WExvZ1JlY29yZFRvV0FMKGludCB3cml0ZV9sZW4sIGJvb2wgaXNMb2dTd2l0Y2gsIFhMb2dS ZWNEYXRhICpyZGF0YSwKIAkgKiBpbnNlcnRpbmcgdG8uCiAJICovCiAJQ3VyclBvcyA9IFN0YXJ0 UG9zOwotCWN1cnJwb3MgPSBHZXRYTG9nQnVmZmVyKEN1cnJQb3MsIHRsaSk7CisJY3VycnBvcyA9 IEdldFhMb2dCdWZmZXIoQ3VyclBvcywgQ3VyclBvcywgdGxpKTsKIAlmcmVlc3BhY2UgPSBJTlNF UlRfRlJFRVNQQUNFKEN1cnJQb3MpOwogCiAJLyoKQEAgLTEyNzMsNyArMTI2OSw3IEBAIENvcHlY TG9nUmVjb3JkVG9XQUwoaW50IHdyaXRlX2xlbiwgYm9vbCBpc0xvZ1N3aXRjaCwgWExvZ1JlY0Rh dGEgKnJkYXRhLAogCQkJICogcGFnZSB3YXMgaW5pdGlhbGl6ZWQsIGluIEFkdmFuY2VYTEluc2Vy dEJ1ZmZlciwgYW5kIHdlJ3JlIHRoZQogCQkJICogb25seSBiYWNrZW5kIHRoYXQgbmVlZHMgdG8g c2V0IHRoZSBjb250cmVjb3JkIGZsYWcuCiAJCQkgKi8KLQkJCWN1cnJwb3MgPSBHZXRYTG9nQnVm ZmVyKEN1cnJQb3MsIHRsaSk7CisJCQljdXJycG9zID0gR2V0WExvZ0J1ZmZlcihDdXJyUG9zLCBD dXJyUG9zLCB0bGkpOwogCQkJcGFnZWhkciA9IChYTG9nUGFnZUhlYWRlcikgY3VycnBvczsKIAkJ CXBhZ2VoZHItPnhscF9yZW1fbGVuID0gd3JpdGVfbGVuIC0gd3JpdHRlbjsKIAkJCXBhZ2VoZHIt PnhscF9pbmZvIHw9IFhMUF9GSVJTVF9JU19DT05UUkVDT1JEOwpAQCAtMTM0Niw3ICsxMzQyLDcg QEAgQ29weVhMb2dSZWNvcmRUb1dBTChpbnQgd3JpdGVfbGVuLCBib29sIGlzTG9nU3dpdGNoLCBY TG9nUmVjRGF0YSAqcmRhdGEsCiAJCQkgKiAod2hpY2ggaXRzZWxmIGNhbGxzIHRoZSB0d28gbWV0 aG9kcyB3ZSBuZWVkKSB0byBnZXQgdGhlIHBvaW50ZXIKIAkJCSAqIGFuZCB6ZXJvIG1vc3Qgb2Yg dGhlIHBhZ2UuICBUaGVuIHdlIGp1c3QgemVybyB0aGUgcGFnZSBoZWFkZXIuCiAJCQkgKi8KLQkJ CWN1cnJwb3MgPSBHZXRYTG9nQnVmZmVyKEN1cnJQb3MsIHRsaSk7CisJCQljdXJycG9zID0gR2V0 WExvZ0J1ZmZlcihDdXJyUG9zLCBDdXJyUG9zLCB0bGkpOwogCQkJTWVtU2V0KGN1cnJwb3MsIDAs IFNpemVPZlhMb2dTaG9ydFBIRCk7CiAKIAkJCUN1cnJQb3MgKz0gWExPR19CTENLU1o7CkBAIC0x MzY0LDYgKzEzNjAsOTAgQEAgQ29weVhMb2dSZWNvcmRUb1dBTChpbnQgd3JpdGVfbGVuLCBib29s IGlzTG9nU3dpdGNoLCBYTG9nUmVjRGF0YSAqcmRhdGEsCiAJCQkJZXJybXNnX2ludGVybmFsKCJz cGFjZSByZXNlcnZlZCBmb3IgV0FMIHJlY29yZCBkb2VzIG5vdCBtYXRjaCB3aGF0IHdhcyB3cml0 dGVuIikpOwogfQogCitzdGF0aWMgWExvZ1JlY1B0cgorR2V0UHJldlJlY1B0cihYTG9nUmVjUHRy IGhkciwgVGltZUxpbmVJRCB0bGkpCit7CisJdWludDY0CQl4bHByZXZieXRlcG9zOworCWNoYXIJ CSp4bF9wcmV2X3BvczsKKwlpbnQJCQlmcmVlc3BhY2U7CisKKwlYTG9nUmVjUHRyCXJlczsKKwlY TG9nUmVjUHRyCXhsX3ByZXZfcHRyOworCisJeGxwcmV2Ynl0ZXBvcyA9IFhMb2dSZWNQdHJUb0J5 dGVQb3MoaGRyKSArIG9mZnNldG9mKFhMb2dSZWNvcmQsIHhsX3ByZXYpOworCXhsX3ByZXZfcHRy ID0gWExvZ0J5dGVQb3NUb1JlY1B0cih4bHByZXZieXRlcG9zKTsKKwl4bF9wcmV2X3BvcyA9IEdl dFhMb2dCdWZmZXIoeGxfcHJldl9wdHIsIGhkciwgdGxpKTsKKwlmcmVlc3BhY2UgPSBJTlNFUlRf RlJFRVNQQUNFKHhsX3ByZXZfcHRyKTsKKworCWlmIChmcmVlc3BhY2UgPj0gc2l6ZW9mKFhMb2dS ZWNQdHIpKQorCXsKKwkJcmVzID0gKigoWExvZ1JlY1B0ciAqKSB4bF9wcmV2X3Bvcyk7CisJfQor CWVsc2UKKwl7CisJCWNoYXIJKnJlc19kYXRhOworCisJCXJlc19kYXRhID0gKGNoYXIgKikgJnJl czsKKwkJbWVtY3B5KHJlc19kYXRhLCB4bF9wcmV2X3BvcywgZnJlZXNwYWNlKTsKKworCQlpZiAo WExvZ1NlZ21lbnRPZmZzZXQoeGxfcHJldl9wdHIgKyBmcmVlc3BhY2UsIHdhbF9zZWdtZW50X3Np emUpID09IDApCisJCXsKKwkJCXhsX3ByZXZfcG9zICs9IFNpemVPZlhMb2dMb25nUEhEOworCQl9 CisJCWVsc2UKKwkJeworCQkJeGxfcHJldl9wb3MgKz0gU2l6ZU9mWExvZ1Nob3J0UEhEOworCQl9 CisKKwkJbWVtY3B5KHJlc19kYXRhICsgZnJlZXNwYWNlLCB4bF9wcmV2X3Bvcywgc2l6ZW9mKFhM b2dSZWNQdHIpIC0gZnJlZXNwYWNlKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMg dm9pZAorU2V0UHJldlJlY1B0cihYTG9nUmVjUHRyIGhkciwgWExvZ1JlY1B0ciB4bF9wcmV2X3Rv X2luc2VydCwgVGltZUxpbmVJRCB0bGksIGJvb2wgaW5fb3JkZXIpCit7CisJdWludDY0CQl4bHBy ZXZieXRlcG9zOworCWNoYXIJCSp4bF9wcmV2X3BvczsKKwlpbnQJCQlmcmVlc3BhY2U7CisKKwlY TG9nUmVjUHRyCXhsX3ByZXZfcHRyOworCisJeGxwcmV2Ynl0ZXBvcyA9IFhMb2dSZWNQdHJUb0J5 dGVQb3MoaGRyKSArIG9mZnNldG9mKFhMb2dSZWNvcmQsIHhsX3ByZXYpOworCXhsX3ByZXZfcHRy ID0gWExvZ0J5dGVQb3NUb1JlY1B0cih4bHByZXZieXRlcG9zKTsKKworCWlmIChpbl9vcmRlcikK KwkJeGxfcHJldl9wb3MgPSBHZXRYTG9nQnVmZmVyKHhsX3ByZXZfcHRyLCB4bF9wcmV2X3B0ciwg dGxpKTsKKwllbHNlCisJCXhsX3ByZXZfcG9zID0gR2V0WExvZ0J1ZmZlcih4bF9wcmV2X3B0ciwg eGxfcHJldl90b19pbnNlcnQsIHRsaSk7CisKKwlmcmVlc3BhY2UgPSBJTlNFUlRfRlJFRVNQQUNF KHhsX3ByZXZfcHRyKTsKKworCWlmIChmcmVlc3BhY2UgPj0gc2l6ZW9mKFhMb2dSZWNQdHIpKQor CXsKKwkJKigoWExvZ1JlY1B0ciAqKSB4bF9wcmV2X3BvcykgPSB4bF9wcmV2X3RvX2luc2VydDsK Kwl9CisJZWxzZQorCXsKKwkJY2hhcgkqeGxfcHJldl90b19pbnNlcnRfZGF0YTsKKworCQl4bF9w cmV2X3RvX2luc2VydF9kYXRhID0gKGNoYXIgKikgJnhsX3ByZXZfdG9faW5zZXJ0OworCQltZW1j cHkoeGxfcHJldl9wb3MsIHhsX3ByZXZfdG9faW5zZXJ0X2RhdGEsIGZyZWVzcGFjZSk7CisKKwkJ aWYgKFhMb2dTZWdtZW50T2Zmc2V0KHhsX3ByZXZfcHRyICsgZnJlZXNwYWNlLCB3YWxfc2VnbWVu dF9zaXplKSA9PSAwKQorCQl7CisJCQl4bF9wcmV2X3BvcyArPSBTaXplT2ZYTG9nTG9uZ1BIRDsK KwkJfQorCQllbHNlCisJCXsKKwkJCXhsX3ByZXZfcG9zICs9IFNpemVPZlhMb2dTaG9ydFBIRDsK KwkJfQorCisJCW1lbWNweSh4bF9wcmV2X3BvcywgeGxfcHJldl90b19pbnNlcnRfZGF0YSArIGZy ZWVzcGFjZSwgc2l6ZW9mKFhMb2dSZWNQdHIpIC0gZnJlZXNwYWNlKTsKKwl9Cit9CisKIC8qCiAg KiBBY3F1aXJlIGEgV0FMIGluc2VydGlvbiBsb2NrLCBmb3IgaW5zZXJ0aW5nIHRvIFdBTC4KICAq LwpAQCAtMTUyMiw5ICsxNjAyLDcgQEAgV2FpdFhMb2dJbnNlcnRpb25zVG9GaW5pc2goWExvZ1Jl Y1B0ciB1cHRvKQogCQlyZXR1cm4gaW5zZXJ0ZWQ7CiAKIAkvKiBSZWFkIHRoZSBjdXJyZW50IGlu c2VydCBwb3NpdGlvbiAqLwotCVNwaW5Mb2NrQWNxdWlyZSgmSW5zZXJ0LT5pbnNlcnRwb3NfbGNr KTsKLQlieXRlcG9zID0gSW5zZXJ0LT5DdXJyQnl0ZVBvczsKLQlTcGluTG9ja1JlbGVhc2UoJklu c2VydC0+aW5zZXJ0cG9zX2xjayk7CisJYnl0ZXBvcyA9IHBnX2F0b21pY19yZWFkX3U2NCgmSW5z ZXJ0LT5DdXJyQnl0ZVBvcyk7CiAJcmVzZXJ2ZWRVcHRvID0gWExvZ0J5dGVQb3NUb0VuZFJlY1B0 cihieXRlcG9zKTsKIAogCS8qCkBAIC0xNjI5LDcgKzE3MDcsNyBAQCBXYWl0WExvZ0luc2VydGlv bnNUb0ZpbmlzaChYTG9nUmVjUHRyIHVwdG8pCiAgKiBsYXRlciwgYmVjYXVzZSBvbGRlciBidWZm ZXJzIG1pZ2h0IGJlIHJlY3ljbGVkIGFscmVhZHkpCiAgKi8KIHN0YXRpYyBjaGFyICoKLUdldFhM b2dCdWZmZXIoWExvZ1JlY1B0ciBwdHIsIFRpbWVMaW5lSUQgdGxpKQorR2V0WExvZ0J1ZmZlcihY TG9nUmVjUHRyIHB0ciwgWExvZ1JlY1B0ciB1cHRvLCBUaW1lTGluZUlEIHRsaSkKIHsKIAlpbnQJ CQlpZHg7CiAJWExvZ1JlY1B0cgllbmRwdHI7CkBAIC0xNjkwLDE0ICsxNzY4LDE0IEBAIEdldFhM b2dCdWZmZXIoWExvZ1JlY1B0ciBwdHIsIFRpbWVMaW5lSUQgdGxpKQogCQkgKiBzdXJlIHRoYXQg aXQncyBpbml0aWFsaXplZCwgYmVmb3JlIHdlIGxldCBpbnNlcnRpbmdBdCB0byBtb3ZlIHBhc3QK IAkJICogdGhlIHBhZ2UgaGVhZGVyLgogCQkgKi8KLQkJaWYgKHB0ciAlIFhMT0dfQkxDS1NaID09 IFNpemVPZlhMb2dTaG9ydFBIRCAmJgotCQkJWExvZ1NlZ21lbnRPZmZzZXQocHRyLCB3YWxfc2Vn bWVudF9zaXplKSA+IFhMT0dfQkxDS1NaKQotCQkJaW5pdGlhbGl6ZWRVcHRvID0gcHRyIC0gU2l6 ZU9mWExvZ1Nob3J0UEhEOwotCQllbHNlIGlmIChwdHIgJSBYTE9HX0JMQ0tTWiA9PSBTaXplT2ZY TG9nTG9uZ1BIRCAmJgotCQkJCSBYTG9nU2VnbWVudE9mZnNldChwdHIsIHdhbF9zZWdtZW50X3Np emUpIDwgWExPR19CTENLU1opCi0JCQlpbml0aWFsaXplZFVwdG8gPSBwdHIgLSBTaXplT2ZYTG9n TG9uZ1BIRDsKKwkJaWYgKHVwdG8gJSBYTE9HX0JMQ0tTWiA9PSBTaXplT2ZYTG9nU2hvcnRQSEQg JiYKKwkJCVhMb2dTZWdtZW50T2Zmc2V0KHVwdG8sIHdhbF9zZWdtZW50X3NpemUpID4gWExPR19C TENLU1opCisJCQlpbml0aWFsaXplZFVwdG8gPSB1cHRvIC0gU2l6ZU9mWExvZ1Nob3J0UEhEOwor CQllbHNlIGlmICh1cHRvICUgWExPR19CTENLU1ogPT0gU2l6ZU9mWExvZ0xvbmdQSEQgJiYKKwkJ CQkgWExvZ1NlZ21lbnRPZmZzZXQodXB0bywgd2FsX3NlZ21lbnRfc2l6ZSkgPCBYTE9HX0JMQ0tT WikKKwkJCWluaXRpYWxpemVkVXB0byA9IHVwdG8gLSBTaXplT2ZYTG9nTG9uZ1BIRDsKIAkJZWxz ZQotCQkJaW5pdGlhbGl6ZWRVcHRvID0gcHRyOworCQkJaW5pdGlhbGl6ZWRVcHRvID0gdXB0bzsK IAogCQlXQUxJbnNlcnRMb2NrVXBkYXRlSW5zZXJ0aW5nQXQoaW5pdGlhbGl6ZWRVcHRvKTsKIApA QCAtNjAxOCw4ICs2MDk2LDcgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkgKiBwcmV2aW91cyBpbmNh cm5hdGlvbi4KIAkgKi8KIAlJbnNlcnQgPSAmWExvZ0N0bC0+SW5zZXJ0OwotCUluc2VydC0+UHJl dkJ5dGVQb3MgPSBYTG9nUmVjUHRyVG9CeXRlUG9zKGVuZE9mUmVjb3ZlcnlJbmZvLT5sYXN0UmVj KTsKLQlJbnNlcnQtPkN1cnJCeXRlUG9zID0gWExvZ1JlY1B0clRvQnl0ZVBvcyhFbmRPZkxvZyk7 CisJcGdfYXRvbWljX3dyaXRlX3U2NCgmSW5zZXJ0LT5DdXJyQnl0ZVBvcywgWExvZ1JlY1B0clRv Qnl0ZVBvcyhFbmRPZkxvZykpOwogCiAJLyoKIAkgKiBUcmlja3kgcG9pbnQgaGVyZTogbGFzdFBh Z2UgY29udGFpbnMgdGhlICpsYXN0KiBibG9jayB0aGF0IHRoZSBMYXN0UmVjCkBAIC02MDUzLDYg KzYxMzAsNyBAQCBTdGFydHVwWExPRyh2b2lkKQogCQkgKi8KIAkJWExvZ0N0bC0+SW5pdGlhbGl6 ZWRVcFRvID0gRW5kT2ZMb2c7CiAJfQorCVNldFByZXZSZWNQdHIoRW5kT2ZMb2csIGVuZE9mUmVj b3ZlcnlJbmZvLT5sYXN0UmVjLCBuZXdUTEksIHRydWUpOwogCiAJLyoKIAkgKiBVcGRhdGUgbG9j YWwgYW5kIHNoYXJlZCBzdGF0dXMuICBUaGlzIGlzIE9LIHRvIGRvIHdpdGhvdXQgYW55IGxvY2tz CkBAIC03MDA1LDcgKzcwODMsNyBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAogCWlm IChzaHV0ZG93bikKIAl7Ci0JCVhMb2dSZWNQdHIJY3VySW5zZXJ0ID0gWExvZ0J5dGVQb3NUb1Jl Y1B0cihJbnNlcnQtPkN1cnJCeXRlUG9zKTsKKwkJWExvZ1JlY1B0cgljdXJJbnNlcnQgPSBYTG9n Qnl0ZVBvc1RvUmVjUHRyKHBnX2F0b21pY19yZWFkX3U2NCgmSW5zZXJ0LT5DdXJyQnl0ZVBvcykp OwogCiAJCS8qCiAJCSAqIENvbXB1dGUgbmV3IFJFRE8gcmVjb3JkIHB0ciA9IGxvY2F0aW9uIG9m IG5leHQgWExPRyByZWNvcmQuCkBAIC03NDczLDcgKzc1NTEsNyBAQCBDcmVhdGVPdmVyd3JpdGVD b250cmVjb3JkUmVjb3JkKFhMb2dSZWNQdHIgYWJvcnRlZF9sc24sIFhMb2dSZWNQdHIgcGFnZVB0 ciwKIAkgKiBpbnNlcnRpb24gbG9jayBpcyBqdXN0IHBybyBmb3JtYS4KIAkgKi8KIAlXQUxJbnNl cnRMb2NrQWNxdWlyZSgpOwotCXBhZ2VoZHIgPSAoWExvZ1BhZ2VIZWFkZXIpIEdldFhMb2dCdWZm ZXIocGFnZVB0ciwgbmV3VExJKTsKKwlwYWdlaGRyID0gKFhMb2dQYWdlSGVhZGVyKSBHZXRYTG9n QnVmZmVyKHBhZ2VQdHIsIHBhZ2VQdHIsIG5ld1RMSSk7CiAJcGFnZWhkci0+eGxwX2luZm8gfD0g WExQX0ZJUlNUX0lTX09WRVJXUklURV9DT05UUkVDT1JEOwogCVdBTEluc2VydExvY2tSZWxlYXNl KCk7CiAKQEAgLTk0MzcsOSArOTUxNSw3IEBAIEdldFhMb2dJbnNlcnRSZWNQdHIodm9pZCkKIAlY TG9nQ3RsSW5zZXJ0ICpJbnNlcnQgPSAmWExvZ0N0bC0+SW5zZXJ0OwogCXVpbnQ2NAkJY3VycmVu dF9ieXRlcG9zOwogCi0JU3BpbkxvY2tBY3F1aXJlKCZJbnNlcnQtPmluc2VydHBvc19sY2spOwot CWN1cnJlbnRfYnl0ZXBvcyA9IEluc2VydC0+Q3VyckJ5dGVQb3M7Ci0JU3BpbkxvY2tSZWxlYXNl KCZJbnNlcnQtPmluc2VydHBvc19sY2spOworCWN1cnJlbnRfYnl0ZXBvcyA9IHBnX2F0b21pY19y ZWFkX3U2NCgmSW5zZXJ0LT5DdXJyQnl0ZVBvcyk7CiAKIAlyZXR1cm4gWExvZ0J5dGVQb3NUb1Jl Y1B0cihjdXJyZW50X2J5dGVwb3MpOwogfQotLSAKMi40My4wCgo= --_002_PH7PR11MB57960AF063703DEB96FBCA98EF142PH7PR11MB5796namp_--