From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [67.231.154.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BC90F30C37A; Fri, 16 Oct 2026 00:58:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.154.183 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792112327; cv=fail; b=s+D6JaoWtUcEouYxdserH90oeAx3V7L/uvOkOGz5jYv0lw3ma1Ugi9PnletMbDjAqSNg9wC0o/CyeuQazSh9cIXkv88BQTPimgv5qmybus+h0uMGLcsJrfPiU0NgbDuzdGqRxbPCHl+LAa6q5sOUA95LeUmSvHJLxMDzJ1IPLSs= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792112327; c=relaxed/simple; bh=I3UJ+6qIMSw/gUcualsUvM1iRs26P+VixbDlDY8iXuU=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=u0toZFfx0pTBs0ktTNhS3z4ZwGxsIMBkRBZ9V7bCqC++PD0YlENyYOaVjjknb77wBSWpugGrQWdSvmSUDPN0iL+iIZPewqcTjd/orxVYdTf1mlB3j/Qbh8VosgxgYM/AxnZMSltdSDKbqp5++SHcdmixaX0gsG2SSlfQbfpX2hg= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sitime.com; spf=pass smtp.mailfrom=sitime.com; dkim=pass (2048-bit key) header.d=sitime.com header.i=@sitime.com header.b=WH+8ihGc; dkim=pass (2048-bit key) header.d=Sitime.onmicrosoft.com header.i=@Sitime.onmicrosoft.com header.b=XpgWE3Rh; arc=fail smtp.client-ip=67.231.154.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sitime.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sitime.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sitime.com header.i=@sitime.com header.b="WH+8ihGc"; dkim=pass (2048-bit key) header.d=Sitime.onmicrosoft.com header.i=@Sitime.onmicrosoft.com header.b="XpgWE3Rh" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sitime.com; h=cc:cc:content-transfer-encoding:content-transfer-encoding:content-type:content-type:date:date:from:from:in-reply-to:in-reply-to:message-id:message-id:mime-version:mime-version:references:references:subject:subject:to:to; s=mail; bh=I3UJ+6qIMSw/gUcualsUvM1iRs26P+VixbDlDY8iXuU=; b=WH+8ihGctGW2DvK+mYTyhMCH+Lz6GSrrMsDtG8sZN64LdPQolCMnXz4wR+Q2Hm/LH3uGALnZRaz8xjGu4CztOkzYl26y82xNsqsu+KDdLNA0SxJRBKFfSf+wX2ifi2OU3CSg5k9qYPNlnfmuX1GnR9zZblTner9ZyIvaSo3xoYI+eiHasrjK/Fr3eGq1eOboeyJ9qRoxZgd/5Fml8BmltvC4nLb34cT7vLKEeli1vHzi2JBiKmGxO2Au2b1qIt+UeSRpWd+AFdjz0dHvteEB4if8KJXQXQf4yCC/ewJXmiQ6jh6qYG0zXWccveCGoMjwhXww5delhIaGrOXKC/WZCg== X-Virus-Scanned: Proofpoint Essentials engine Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11022079.outbound.protection.outlook.com [52.101.43.79]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id A9A5690007F; Fri, 16 Oct 2026 00:58:33 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DOCb8iidlFtnmVLt0zAd9ZufMXATgvbXM7GUVTs60MrKs+HM6S+wCy2LGTPGgj7k1nK2Gwrevib5yRjFvp/wf4Zx3VDHSZXlIBaqKdwlv1GdZHEQYCVNJ5rQTNvg20HdzRbtL8TyslEuywlp8BC5d4DZOodUM5LW/KLW6DPNu8WUYkh//AhEQBDLlIf2CV15p9IlMUdWO7FLeYWDejgqJYJz+mbB6lDL0PDkWFU3mPeSv/xqe3JnPpMVoca+XTdpi8EGeVkpeIt/q4Kvn6tUQY/pv7/qengNiwBLaNPHtmps5QTtCdHViFa0Y4GXVKyrI41u5wo/GbcpzNMhTsm6rg== 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=I3UJ+6qIMSw/gUcualsUvM1iRs26P+VixbDlDY8iXuU=; b=HXxTgbqoCJh+umMQ3rdEtTKYF06zWNi8ynKdmFz82+OMZcrjlQUwFZCRDAcuA2ptoARQYegMa6+qZ6ZA/6sqCdfoVRvI7o4eklaTdi8mgNvUNz7z9l6U9dYXBHGdqTx59kgyxe1vaCL82WDhmco34NNd500CgIK2cdN71o5xBbpOeLdVTkcON9Z1ptRtRtGwoLWTqCEFrjJJYitXfhmZvqsofPQMOjzW5wMxdlJ13eyCintPtDVzr0tID9ngVPHON13A91J0di0pSY1ImYFv+yBo11Oo8ULbZeIb3X2ekUdJga/runJ2D/ABFbdj8Ymb1/dStALph4d/e3SbAL+KDw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sitime.com; dmarc=pass action=none header.from=sitime.com; dkim=pass header.d=sitime.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Sitime.onmicrosoft.com; s=selector1-Sitime-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=I3UJ+6qIMSw/gUcualsUvM1iRs26P+VixbDlDY8iXuU=; b=XpgWE3RhUk+Kjj+Tvsmqtz0jWFZTVHb9JqIAk5H0PMzUm8Z+9VsAv7ozGIVrPLgsvZ5s77wMaxSu2bvHDzbbKBlwElD2WzmmHIeSkz6txSIh3elprVwxzct3zPZuuUEcD9T2dExn72OU5svUlnen8fY2oA+HoTqgg1CwICIgwrPWc8hxMwu8e0hDyrjJlaQaHiUqKpPJacEyci5nEBZzjFYe5/h95bUjs5bNV3VqQxNYb2mXb8fN/Pd+5OAm1v31eE+c1T0tnhEtMDd6/iXPyGyPc7It4BkkcRRJqMGpot2xpEo3+VVx+q32GinOEXS58htP73R1DfCCRskB2np+5Q== Received: from LVWPR20MB994915.namprd20.prod.outlook.com (2603:10b6:408:3bf::16) by IA3PR20MB995299.namprd20.prod.outlook.com (2603:10b6:208:623::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Fri, 16 Oct 2026 00:58:30 +0000 Received: from LVWPR20MB994915.namprd20.prod.outlook.com ([fe80::9551:3864:128b:8c01]) by LVWPR20MB994915.namprd20.prod.outlook.com ([fe80::9551:3864:128b:8c01%4]) with mapi id 15.21.0522.013; Fri, 16 Oct 2026 00:58:30 +0000 From: Ali Rouhi To: "jiri@resnulli.us" CC: "vadim.fedorenko@linux.dev" , "arkadiusz.kubalewski@intel.com" , "ivecera@redhat.com" , "kuba@kernel.org" , "pabeni@redhat.com" , "robh@kernel.org" , "krzk+dt@kernel.org" , "conor+dt@kernel.org" , "prabhakar.mahadev-lad.rj@bp.renesas.com" , "cjubran@nvidia.com" , "Oleg.Zadorozhnyi@devoxsoftware.com" , "devicetree@vger.kernel.org" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH net-next v14 10/12] dpll: sit9531x: add support to adjust output phase Thread-Topic: [PATCH net-next v14 10/12] dpll: sit9531x: add support to adjust output phase Thread-Index: AQHdXQl131R5Dy8ZakeLgLqgrzBykQ== Date: Fri, 16 Oct 2026 00:58:30 +0000 Message-ID: <20261016005823.13690-11-arouhi@sitime.com> References: <20261016005823.13690-1-arouhi@sitime.com> In-Reply-To: <20261016005823.13690-1-arouhi@sitime.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=sitime.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: LVWPR20MB994915:EE_|IA3PR20MB995299:EE_ x-ms-office365-filtering-correlation-id: 37fa137f-835b-41fa-69c3-08df2b20984d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|23010399003|1800799024|366016|6133799003|10067099003|18002099003|22082099003|3023799007|260925022911599003|5023799004|260925021911599003|260925021311599003|261009223027099003|38070700021|56012099006; x-microsoft-antispam-message-info: 6IY3bhMWayWGx8KGeDr5b9uJLMivzEfiKGhJruYJ+ZTNj7mgGJdzpgFXou2JGqa7SEUR2Rsln/eU4G8wuaH7yx3Jy1Vg3zTaUiLkIXYvVMytKXYBPMv+PxXrkYQquTDPibkgsNEIL/fexuvv3vOf0cNPMAka9aOhLGwFbWkVbtw6LD5ncmdaSOtIHTz36AMXdI4sk2AqthuvKf2utZUgCjkt0ETEOkBypvqCCUzUQqTr3coT1oaa7knoHY1S+YuMVE6noBnc7KZRnQqAtPQ9h++tRvl0y3ZlpzepJYn3lVCYjdR7jx2nbAkvF7JKF15Chw/akx9XNVSjndXL7/7v280ycxIcAX5MJ9FuJThKu/t6VHzZgDn6VuyGYfpkSmBhaOHM+PIpl7PjtA+eLkoR9BtMvEykvGG1Nwz74UKRpuJr8nOssz2zla+dQt9XziIQ7bk1iyO+lwqMhN9r6fn3y2A0RDnqZ/jOFM5uUQb8eAAyKya7bKMADcQZIkfhbM6CRXAE9pJdzbFmDgPj3wJ0ZhHmVjcVLegIDVKQrMSluV9eeBV3Es2uQr8sY8cDBIkNOxIdkr8LGF63hSHLRdLOu+4cORZyYOyBSS4FNY0y9je0XNia6FghJ5qLwvR0deCODQwUM7cAfFqCoOXFLvBOR4tHYIFs8mD094F0DQKWkI/ueZsSv0TGJZvskcIwsgovtd5fDcqG0Thjfn9Huxz9p9Uz+FX+u6c6cbv2CgA9/ME= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LVWPR20MB994915.namprd20.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(1800799024)(366016)(6133799003)(10067099003)(18002099003)(22082099003)(3023799007)(260925022911599003)(5023799004)(260925021911599003)(260925021311599003)(261009223027099003)(38070700021)(56012099006);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TnJPN1ZJSUFPNDFkSGNiK1doeVc5enJjVlVZdngxM24wQ0xNMDFPMkh4VFg4?= =?utf-8?B?eUxLVXdmdFNkWThCdzR4NWtOVHJuU0ZJMFVFYTcxYm9QWXlRVWxhTmxsd2Zy?= =?utf-8?B?MlYzaUNYSkhjVURCMDFRVXVqWjhiMGNPYzF5VVg2dk85U2lCNFdISVUzckU3?= =?utf-8?B?SG1PcEdGdmUrWm1lZWo4UlNBbldVN0NxaFlOcmFCK21iLzVmU3hrR3BMVW0w?= =?utf-8?B?U3hrbFBZMTJTMlFsZFcrTStQaEF0QkkySzBBeFB0K01Tb2tJa3NXRlJyQWJN?= =?utf-8?B?L1RBMU5DTEZnMVdLeFp0U3NGSDhXeGdaOVdVNmdtNHpUOHZ6Z1N0dVZ0ZUZL?= =?utf-8?B?dkxHVytQMjZhVEFGM0l1RUxDaEFUS052TnRmZ1lZVzRYck92SmpkVm1kaWlO?= =?utf-8?B?VTdKYlVMNEtaMDNHWkpENStEcUNiSng4UzRQcmtvRDgreDkvSE5WQWoydndB?= =?utf-8?B?TjdrbWdjYXhCYjM2aWVGZzFyK0h2eWVKUnhBcjEvV1ZJSUEvYnZwMWNIdkZl?= =?utf-8?B?VVJ4M3kreXFDS3FNZitUNTk0TldZZHFEVnBsb0xuWHBXNWZzQ1g2aEY0dkdK?= =?utf-8?B?NHp2cFlhejQydXRzNGd1aWtCOWpEZDV5T3hkY3VZSGd4MnZLUWNKM3hmd2I5?= =?utf-8?B?Y05obHpreTJONUcwNmFoSnpTc3d6WXBLRE9id0YwYWt0aThBR2czZ3JtY3pX?= =?utf-8?B?diszb25xUmIrbVBJK0tLK1pjOVU5RkxFTGlTdVBkRGZ4WXFRUWFhTWJKSXNC?= =?utf-8?B?NG54OS83bTlEN2RXbHVRM0dWdzB3VlpQZVpwTmlsYStVTXJVQ3RYdVRZS2V5?= =?utf-8?B?LzhZeGFGdUw3UXVrTm54L01xenkvS2JxZjZoTUZJVUtFYXdreEdyTEowTUNr?= =?utf-8?B?bnlURVdFUDcvTmtZQVpmQ0tGaVZ2NDYyclZKaUVzWWRGak83VVFPY1FMYS9U?= =?utf-8?B?QUpBOVFWWi8xS05na1dxbkhSNkRmUXZkVFk1TzlsVFoycFNFTlJmYVh6bE9r?= =?utf-8?B?MmFoNFhZdDRreUFDZ3hBaU1DbXJpT0xnWjBxaGMxSjRqdHZkZGFlanJ3b21R?= =?utf-8?B?S1hZcDFmU1B1SUNPenBzbnNhOGo3eUNqZDY5WkZ3VHE0aHkwM2JMTEpkbUdZ?= =?utf-8?B?Y2M0TEVnSDkxeEJEaGpaV0xpeE91L0pXdU4vRzlOL3hGSGdvUE1Fa0FGTVNU?= =?utf-8?B?SzY4Ujc1cXd3MnFCbGFTeC9KT0NRWDRXamlhSHBpNjZwNWw5T1NtY1FOTitQ?= =?utf-8?B?S2hGeWxiTnZyLzk1UWx3WVZlTWpzbXA0T0JSdm00dmF1OXhBNE5kYVJDZHZa?= =?utf-8?B?SGNuTmNkVi9FSVd5K0pkQlE5dTA5TTdpZmhqVjRJZ1Bia1J6R29nRUtnNGk1?= =?utf-8?B?UjM3clZEMDVPRXlSTTB1ZEsyNkJRemNGZkprY3FhMXZ3Y1pQeUNsV1kxTUZ6?= =?utf-8?B?b3hSZkx6SlJ2eGJ3K1hQNjNIQnBLeDJvdXlSZXg2MUl2OHBhcERmdHpzVjNT?= =?utf-8?B?TmI2cW8ySk5KelNSL0FhMmttNDZjN0IxT0JFbjc1aFdtanliVzhMTm1mSXps?= =?utf-8?B?alJyeGxWZUo0amNPVmYwRlp1Z2lrSkJhV2dpZjdxNlBnZzZhRUcwVjQxT3p4?= =?utf-8?B?eGt4RjNrdmR2ZjVJVTYvblhtMkI5eW0xUnZncjVYai9sdVhWbzJST2RxTFIx?= =?utf-8?B?c04ycjZRdG9FVGl3Yko0MGtiTng5R0FvWVJ4NjBGYndJa2NSTHd5Z01Rb25H?= =?utf-8?B?M2VzNk02RGtnZ0RyTm5tWGxvSDZ1N3hjS0JLdGhKeEorUkdzOXpUOUxwL3Uv?= =?utf-8?B?MXVEemFIWG1JWFh4VmtjSmd6MXlmcE80T244ZVYzVStRODZtbksxdWN0Y01L?= =?utf-8?B?TVMwT3pUVllBZHlaV1F5K2xFekdoOEUyNmJiR05BT3pQU2FTb05yelQxYnRt?= =?utf-8?B?YWkxMGI3Z0V5RnZPaktYdytlcW5pbGZ5ZEl1aUxXTDFsOTlJYys1WVFPRG52?= =?utf-8?B?MkhtYm1rOHloSFd0R1VsRXdRcUF0bXRNc003Q0N0bzNRajYwNHlXTmY5Y0d4?= =?utf-8?B?TWUzc0l6NTZiWCtVSXZYTnFQWHg1THQ2dEhDTDZzZVhZYWR5dERmL0JuTGtB?= =?utf-8?B?WVB0L2NuejY3dUYrNUN4SDNzQm1iTlJlbTA4bjRBM3Q0blhTWVZ0cTJHVDlp?= =?utf-8?B?Y04xUzJ4MUk1TTVmQnFjdS9ISHNiVTYrSCtrQktFTEdkcnJCbkFsd0N0WFlO?= =?utf-8?B?S3Z0M3RhRmhGaUNGM0I0anZabXlsdmpzZVptVExZN0xuR3YvWGJJa1JtWEls?= =?utf-8?Q?VSp/TojcX9veT1PkNO?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: VLMPION7KQqKtA/DpqH5RbiVz+Doc7XhzAGvD08nKYDCcV0VrM1leCp4FJDEa+6BCOjn8tSZ1b8wcJFEObh8WA526o91V2E2FWHUEjXZ0anSsjdRvZTLwu1NeeYvJ3//oSm5RxmJI22g5hqx9NFVZIVCc+H2vB7x8nBWNaQeVrgyZx4aPoAUivADmd1LirUT8jBzXyfsoBqbs1aaG5npaHoEZ0xyfPXMSWfSul9B6jAogk/3jRePKLua7p+NNsFPJtP4t7DCXKDbgJ+TBP2xiqR4UeapMxmy7rpukAx9hghmOYtAZJPtdod6EK+DBGsj0io4LcRXZK4igv72hbKLNg== X-OriginatorOrg: sitime.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: LVWPR20MB994915.namprd20.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 37fa137f-835b-41fa-69c3-08df2b20984d X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Oct 2026 00:58:30.3749 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 8fb55916-cf10-4b0d-96f4-cf3952657263 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ekoYpC2E2ZIz9qbhrYgrA6L8/Vgv370H/N2/He2eS9teAX7YsWGngxasB7+c/hla/q8ERwz5iVJK3XFEndQvNw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR20MB995299 X-MDID: 1792112314-oVAIoZDD_v4M X-PPE-STACK: {"stack":"us1"} X-MDID-O: us1;at1;1792112314;oVAIoZDD_v4M;;ba04557de9d2da8490f5f1e6de07b967 X-PPE-TRUSTED: V=1;DIR=OUT; RnJvbTogT2xlZyBaYWRvcm96aG55aSA8T2xlZy5aYWRvcm96aG55aUBkZXZveHNvZnR3YXJlLmNv bT4KClNoaWZ0IGFuIG91dHB1dCBpbiB0aW1lIGFnYWluc3QgdGhlIG90aGVycyBkcml2ZW4gYnkg dGhlIHNhbWUgUExMLiAgVGhlCmRldmljZSBoYXMgYSBjb2Fyc2UgZGVsYXkgY291bnRlZCBpbiBW Q08gY3ljbGVzIGFuZCBhIHRocmVlLWJpdCBmaW5lIGZpZWxkCmluIGZpeGVkIHRoaXJ0eS1waWNv c2Vjb25kIHN0ZXBzLCBzbyBhIHJlcXVlc3RlZCBvZmZzZXQgaXMgc3BsaXQgYmV0d2Vlbgp0aGUg dHdvIGFuZCB3aGF0IHRoZSBjb3JlIHJlYWRzIGJhY2sgaXMgd2hhdCB0aGUgcmVnaXN0ZXJzIGhv bGQgcmF0aGVyCnRoYW4gd2hhdCB3YXMgYXNrZWQgZm9yLiAgVGhlIGRpdmlkZXIgc3BlbmRzIHR3 byBWQ08gY3ljbGVzIGFjdGluZyBvbiBhCnByb2dyYW1tZWQgZGVsYXkgYmVmb3JlIGl0IHJlbGVh c2VzIHRoZSBvdXRwdXQsIHNvIHRoZSByZWdpc3RlcnMgaG9sZCB0aGUKcmVxdWVzdCBwbHVzIHRo b3NlIHR3byBjeWNsZXMgYW5kIHRoZSByZWFkLWJhY2sgdGFrZXMgdGhlbSBvZmYgYWdhaW4uCgpU aGUgd2luZG93IGFkdmVydGlzZWQgdG8gdGhlIGNvcmUgaXMgb25lIG1pbGxpc2Vjb25kIGVpdGhl ciB3YXk6IHRoZQpkZXZpY2UgaG9sZHMgYSBkZWxheSBhbnl3aGVyZSB3aXRoaW4gdGhlIG91dHB1 dCBwZXJpb2QsIHNvIG9uIGEgc2xvdwpvdXRwdXQgdGhlIGJvdW5kIGlzIHRoZSBzaWduZWQgMzIt Yml0IHBpY29zZWNvbmQgYXR0cmlidXRlIHJhdGhlciB0aGFuCnRoZSBoYXJkd2FyZSwgYW5kIGEg cm91bmQgZmlndXJlIGJlbG93IGl0IGNvc3RzIG5vdGhpbmcgYW5kIGlzIHdoYXQKa2VlcHMgdGhl IHN1YnN5c3RlbSBmcm9tIHJlZnVzaW5nIGV2ZXJ5IHJlcXVlc3Q7IHRoZSBncmFudWxhcml0eSBp cyBvbmUKcGljb3NlY29uZCwgYmVjYXVzZSB0aGUgYWNoaWV2YWJsZSBkZWxheXMgYXJlIHdob2xl IFZDTyBjeWNsZXMgcGx1cwp0aGlydHktcGljb3NlY29uZCBzdGVwcyBhbmQgc28gZm9ybSBubyB1 bmlmb3JtIGxhdHRpY2UgZm9yIHRoZSBjb3JlIHRvCmNoZWNrIGFnYWluc3QuCgpEZWxheSBvbmx5 IGV2ZXIgYWR2YW5jZXMsIHNvIGFuIG9mZnNldCBsYXJnZXIgdGhhbiBvbmUgb3V0cHV0IHBlcmlv ZCBpcwpmb2xkZWQgYmFjayBpbnRvIGEgc2luZ2xlIHBlcmlvZCAtLSBmb3IgYSBwZXJpb2RpYyBz aWduYWwgdGhhdCBpcyB0aGUKc2FtZSBwaGFzZS4gIFRoZSBmb2xkIGlzIGNvdW50ZWQgaW4gVkNP IGN5Y2xlcywgc2luY2UgdGhlIHBlcmlvZCBpcwpleGFjdGx5IHRoZSBkaXZpZGVyJ3MgY291bnQg b2YgdGhlbSwgYW5kIHRoZSBxdWFudGl6ZXIgdGFrZXMgd2hpY2hldmVyCm9mIHRoZSBuZWlnaGJv dXJpbmcgd2hvbGUgY3ljbGVzIHdpdGggdGhlIGZpbmUgc3RlcHMgbGFuZHMgbmVhcmVzdC4gIEFu CmFkdmFuY2UgaXMgaGVsZCBhcyB0aGUgY29tcGxlbWVudGFyeSBkZWxheSBhbmQgcmVhZHMgYmFj ayBhcyBhbiBhZHZhbmNlCm9ubHkgd2hlcmUgdGhlIHBlcmlvZCBleGNlZWRzIHRoZSBhZHZlcnRp c2VkIHdpbmRvdzsgZWxzZXdoZXJlIHRoZSB0d28KZGVzY3JpYmUgdGhlIHNhbWUgZWRnZSBhbmQg dGhlIGRlbGF5IGZvcm0gaXMgcmVwb3J0ZWQuICBBIGRlbGF5IHRoZQpsb2FkZWQgY29uZmlndXJh dGlvbiBsZWZ0IGJleW9uZCB0aGUgd2luZG93IGlzIHJlcG9ydGVkIGNsYW1wZWQgYW5kIGlzCm5v dCBjYXJyaWVkIGludG8gYSBsYXRlciByYXRlIGNoYW5nZS4gIEEgcmF0ZSBjaGFuZ2Ugb24gYW4g b3V0cHV0IHdpdGggYQpwcm9ncmFtbWVkIGRlbGF5IHJlLXRpbWVzIGl0IGluc2lkZSB0aGUgcmF0 ZSBjaGFuZ2UncyBvd24gcHJvZ3JhbW1pbmcKd2luZG93LCBzbyB0aGVyZSBpcyBvbmUgc2VxdWVu Y2UgYW5kIG9uZSBmbHVzaCwgYW5kIGEgZmx1c2ggdGhhdCBmYWlsZWQKYWZ0ZXIgdGhlIGRlbGF5 IHdhcyBjb21taXR0ZWQgaXMgcmV0cmllZCBieSB0aGUgbmV4dCByZXF1ZXN0LiAgVGhlIHdyaXRl CnRha2VzIGVmZmVjdCBpbiB0aGUgcHJvZ3JhbW1pbmcgc3RhdGUsIHdoaWNoIGlzIGxlZnQgd2l0 aCB0aGUgbG9vcHMKcmUtbG9ja2VkIGV2ZW4gd2hlbiBhIHdyaXRlIGluc2lkZSBpdCBmYWlsZWQu CgpUaGUgZGV2aWNlIGhhcyBubyBwZXItb3V0cHV0IHBoYXNlIGZsdXNoLCBzbyByZWFsaWduaW5n IHRoZSBhZGp1c3RlZApvdXRwdXQgcmVzdGFydHMgdGhlIGRpdmlkZXIgcGhhc2Ugb2YgZXZlcnkg b3V0cHV0IHRoYXQgUExMIGRyaXZlcy4gIE9uIGEKcGFydCB3aGVyZSBvdXRwdXRzIGFyZSBkZWxp YmVyYXRlbHkgc2tld2VkIGFnYWluc3QgZWFjaCBvdGhlciB0aGF0IGlzIGEKdmlzaWJsZSBlZGdl IGp1bXAgb24gdGhlIG90aGVycywgYW5kIHRoZXJlIGlzIG5vIHJlZ2lzdGVyIHRoYXQgd291bGQg bGV0CnRoZSBkcml2ZXIgYXZvaWQgaXQuICBBIFBMTCB0aGUgbG9hZGVkIHByb2ZpbGUgYnVpbGRz IHdpdGhvdXQgdGhlCnBoYXNlLWZsdXNoIGZlYXR1cmUgaGFzIG5vIGZsdXNoIHRvIGZpcmU7IHJl YWxpZ25pbmcgaXRzIG91dHB1dHMKcmVzdGFydHMgdGhlIHdob2xlIFBMTCwgc28gYSBwaGFzZSBh ZGp1c3Qgb3IgYSByYXRlIGNoYW5nZSBvbiBzdWNoIGEgUExMCmlzIGEgbG9zcyBvZiBsb2NrIGFz IHdlbGwgYXMgYW4gZWRnZSBqdW1wIG9uIGl0cyBvdGhlciBvdXRwdXRzLgoKU3VnZ2VzdGVkLWJ5 OiBJdmFuIFZlY2VyYSA8aXZlY2VyYUByZWRoYXQuY29tPgpTaWduZWQtb2ZmLWJ5OiBPbGVnIFph ZG9yb3pobnlpIDxPbGVnLlphZG9yb3pobnlpQGRldm94c29mdHdhcmUuY29tPgpBc3Npc3RlZC1i eTogTExNClNpZ25lZC1vZmYtYnk6IEFsaSBSb3VoaSA8YXJvdWhpQHNpdGltZS5jb20+Ci0tLQog ZHJpdmVycy9kcGxsL3NpdDk1MzF4L2NvcmUuYyB8IDY4NCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLQogZHJpdmVycy9kcGxsL3NpdDk1MzF4L2NvcmUuaCB8ICAyMiArKwogZHJp dmVycy9kcGxsL3NpdDk1MzF4L2RwbGwuYyB8ICA4MCArKysrCiBkcml2ZXJzL2RwbGwvc2l0OTUz MXgvcHJvcC5jIHwgIDIyICsrCiBkcml2ZXJzL2RwbGwvc2l0OTUzMXgvcmVncy5oIHwgIDM3ICsr CiA1IGZpbGVzIGNoYW5nZWQsIDgyMCBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvY29yZS5jIGIvZHJpdmVycy9kcGxsL3Np dDk1MzF4L2NvcmUuYwppbmRleCA5YWEwZDMyN2I2YmYuLmZmZWQyYWFmOGEzNCAxMDA2NDQKLS0t IGEvZHJpdmVycy9kcGxsL3NpdDk1MzF4L2NvcmUuYworKysgYi9kcml2ZXJzL2RwbGwvc2l0OTUz MXgvY29yZS5jCkBAIC0yMjY3LDExICsyMjY3LDQzMSBAQCBzdGF0aWMgaW50IHNpdDk1MzF4X291 dHB1dF9kaXZvX3JlYWQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBvdXRfaWR4LAog CXJldHVybiAqZGl2byA/IDAgOiAtRU5PREFUQTsKIH0KIAorLyoKKyAqIFBoYXNlIGFkanVzdCAo UFJHX1JTVF9ERUxBWSByZWdpc3Rlci1iYXNlZCkuCisgKgorICogVGhlIGNoaXAgZXhwb3NlcyBh IHBlci1vdXRwdXQgMzQtYml0IGNvYXJzZSBkZWxheSBtZWFzdXJlZCBpbiBWQ08KKyAqIGNsb2Nr IHBlcmlvZHMgcGx1cyBhIDMtYml0IGZpbmUgZGVsYXkgaW4gZml4ZWQgMzAgcHMgc3RlcHMuICBU aGUKKyAqIGZpdmUgYnl0ZXMgUFJPRzYuLlBST0cyIGhvbGQgdGhlIGZpZWxkIGFjcm9zcyByZWdp c3RlcnM6CisgKiAgIGJhc2UgKyAwICBQUk9HNiAgWzc6NV0gT1BTVEdfVkNBU0NfQlVNUCAocHJl c2VydmVkIHZpYSBSTVcpCisgKiAgICAgICAgICAgICAgICAgICAgWzQ6Ml0gUFJHX1JTVF9GSU5F X0RFTEFZCisgKiAgICAgICAgICAgICAgICAgICAgWzE6MF0gUFJHX1JTVF9ERUxBWVszMzozMl0K KyAqICAgYmFzZSArIDEgIFBST0c1ICBQUkdfUlNUX0RFTEFZWzMxOjI0XQorICogICBiYXNlICsg MiAgUFJPRzQgIFBSR19SU1RfREVMQVlbMjM6MTZdCisgKiAgIGJhc2UgKyAzICBQUk9HMyAgUFJH X1JTVF9ERUxBWVsxNTo4XQorICogICBiYXNlICsgNCAgUFJPRzIgIFBSR19SU1RfREVMQVlbNzow XQorICoKKyAqIFNsb3RzIDAtNSBsaXZlIG9uIFBhZ2UgMywgc2xvdHMgNi0xMSBvbiBQYWdlIDQs IHdpdGggZWFjaCBzbG90J3MKKyAqIGJsb2NrIGF0IGJhc2UgPSAweDE1ICsgMTYgKiAoc2xvdCAl IDYpOyB0aGUgc2xvdCBpcyB0aGUgcGh5c2ljYWwKKyAqIG91dHB1dCBwb3NpdGlvbiBmcm9tIGNs a291dF9tYXBbXSwgbm90IHRoZSBsb2dpY2FsIG91dHB1dCBpbmRleC4KKyAqCisgKiBUaGUgY2hp cCBvbmx5IHN1cHBvcnRzIHVuc2lnbmVkIHBvc2l0aXZlIGRlbGF5LiAgUmVxdWVzdHMgYXJlIGZv bGRlZAorICogbW9kdWxvIG9uZSBvdXRwdXQgcGVyaW9kOiBwb3NpdGl2ZSBkZWxheXMgd3JhcCBu YXR1cmFsbHkgYW5kIGEgbmVnYXRpdmUKKyAqIHBoYXNlIGFkanVzdG1lbnQgKGFkdmFuY2UpIGlz IHJlbmRlcmVkIGFzIChUX291dCAtIHxwaGFzZXwpLgorICovCisKKy8qCisgKiBSZWdpc3RlciBv ZiBieXRlIEBpIChQUk9HNiBmaXJzdCkgb2YgYW4gb3V0cHV0J3MgUFJHX1JTVF9ERUxBWSBibG9j ay4KKyAqCisgKiBUaGUgbG9naWNhbCBvdXRwdXQgaW5kZXggbWFwcyB0byB0aGUgY2hpcCdzIHBo eXNpY2FsIG91dHB1dCBzbG90LiAgT24KKyAqIFNpVDk1MzE3IHRoZSBlaWdodCBsb2dpY2FsIG91 dHB1dHMgbGFuZCBvbiBjaGlwIHNsb3RzIHswLCAzLCA0LCA1LCA3LAorICogOCwgOSwgMTF9OyBv biBTaVQ5NTMxNiB0aGUgbWFwIGlzIGlkZW50aXR5LiAgUGFnZSBhbmQgYmFzZSBhZGRyZXNzIHRo ZQorICogc2xvdCwgbm90IHRoZSBsb2dpY2FsIGluZGV4LgorICovCitzdGF0aWMgdW5zaWduZWQg aW50IHNpdDk1MzF4X291dHB1dF9wcmdfcmVnKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwK KwkJCQkJICAgIHU4IG91dF9pZHgsIHU4IGkpCit7CisJdTggc2xvdCA9IHNpdGRldi0+aW5mby0+ Y2xrb3V0X21hcFtvdXRfaWR4XTsKKwl1OCBwYWdlID0gKHNsb3QgPiBTSVQ5NTMxWF9QQUdFX09V VFNZUzBfU0xPVF9NQVgpID8KKwkJICBTSVQ5NTMxWF9QQUdFX09VVFNZUzEgOiBTSVQ5NTMxWF9Q QUdFX09VVFNZUzA7CisJdTggYmFzZSA9IFNJVDk1MzFYX09VVF9QUkdfREVMQVlfQkFTRSArCisJ CSAgU0lUOTUzMVhfT1VUX1BSR19TTE9UX1NUUklERSAqIChzbG90ICUgNik7CisKKwlyZXR1cm4g U0lUOTUzMVhfUkVHKHBhZ2UsIGJhc2UgKyBpKTsKK30KKworLyogUmVhZCB0aGUgUFJHX1JTVF9E RUxBWSBieXRlcyBvZiBhbiBvdXRwdXQsIFBST0c2IGZpcnN0LiAqLworc3RhdGljIGludCBzaXQ5 NTMxeF9vdXRwdXRfcGhhc2VfYnl0ZXNfcmVhZChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYs CisJCQkJCSAgICB1OCBvdXRfaWR4LCB1OCAqYnl0ZXMpCit7CisJdW5zaWduZWQgaW50IHJlZzsK KwlpbnQgcmM7CisJdTggaTsKKworCWZvciAoaSA9IDA7IGkgPCBTSVQ5NTMxWF9PVVRfUFJHX0JZ VEVTOyBpKyspIHsKKwkJcmVnID0gc2l0OTUzMXhfb3V0cHV0X3ByZ19yZWcoc2l0ZGV2LCBvdXRf aWR4LCBpKTsKKwkJcmMgPSBzaXQ5NTMxeF9yZWFkX3U4KHNpdGRldiwgcmVnLCAmYnl0ZXNbaV0p OworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisg KiBFbmNvZGUgYSBxdWFudGl6ZWQgZGVsYXkgaW50byB0aGUgcmVnaXN0ZXIgYnl0ZXMuICBAb2xk X2J5dGVzIHN1cHBsaWVzCisgKiB0aGUgUFJPRzYgYml0cyB0aGF0IGFyZSBub3QgdGhlIGRlbGF5 J3MsIHdoaWNoIGFyZSBwcmVzZXJ2ZWQuCisgKgorICogVGhlIHJlZ2lzdGVyIHZhbHVlIGNhcnJp ZXMgdGhlIGRpdmlkZXIncyBvd24gc2V0dGxpbmcgdGltZTogdGhlCisgKiBxdWFudGl6ZXIgd29y a3MgaW4gdGhlIGRlbGF5IHRoZSBjYWxsZXIgYXNrZWQgZm9yLCB0aGUgcmVnaXN0ZXIgd2FudHMK KyAqIHRoYXQgcGx1cyB0aGUgdHdvIFZDTyBjeWNsZXMgdGhlIGRpdmlkZXIgc3BlbmRzIGFjdGlu ZyBvbiBpdCwgYW5kIGEKKyAqIHJlcXVlc3Qgb2YgemVybyBzdGlsbCB3YWl0cyB0aG9zZSB0d28u ICBPbmx5IHRoZSByZWdpc3RlciB2YWx1ZSBjYXJyaWVzCisgKiB0aGVtOyBAY29hcnNlIHN0YXlz IHRoZSByZXF1ZXN0ZWQgZGVsYXksIHdoaWNoIGlzIHdoYXQgZ2V0cyBjYWNoZWQuCisgKi8KK3N0 YXRpYyB2b2lkIHNpdDk1MzF4X291dHB1dF9waGFzZV9ieXRlc19idWlsZChjb25zdCB1OCAqb2xk X2J5dGVzLCB1NjQgY29hcnNlLAorCQkJCQkgICAgICB1OCBmaW5lLCB1OCAqbmV3X2J5dGVzKQor eworCXU2NCBwcmdfY29hcnNlID0gY29hcnNlICsgU0lUOTUzMVhfT1VUX1BSR19ESVZPX0NZQ0xF UzsKKworCS8qIFBST0c2IFJNVzogcHJlc2VydmUgT1BTVEdfVkNBU0NfQlVNUCBpbiBbNzo1XSAq LworCW5ld19ieXRlc1swXSA9IG9sZF9ieXRlc1swXSAmIFNJVDk1MzFYX09VVF9QUkdfT1BTVEdf TUFTSzsKKwluZXdfYnl0ZXNbMF0gfD0gKGZpbmUgPDwgU0lUOTUzMVhfT1VUX1BSR19GSU5FX1NI SUZUKSAmCisJCQlTSVQ5NTMxWF9PVVRfUFJHX0ZJTkVfTUFTSzsKKwluZXdfYnl0ZXNbMF0gfD0g KHU4KSgocHJnX2NvYXJzZSA+PiAzMikgJgorCQkJICAgICBTSVQ5NTMxWF9PVVRfUFJHX0NPQVJT RV9ISV9NQVNLKTsKKwluZXdfYnl0ZXNbMV0gPSAodTgpKChwcmdfY29hcnNlID4+IDI0KSAmIDB4 RkYpOworCW5ld19ieXRlc1syXSA9ICh1OCkoKHByZ19jb2Fyc2UgPj4gMTYpICYgMHhGRik7CisJ bmV3X2J5dGVzWzNdID0gKHU4KSgocHJnX2NvYXJzZSA+PiA4KSAmIDB4RkYpOworCW5ld19ieXRl c1s0XSA9ICh1OCkocHJnX2NvYXJzZSAmIDB4RkYpOworfQorCisvKgorICogV3JpdGUgYW4gb3V0 cHV0J3MgZGVsYXkgYnl0ZXMuICBUaGUgY2FsbGVyIG11c3QgYWxyZWFkeSBiZSBpbiB0aGUKKyAq IHByb2dyYW1taW5nIHN0YXRlLiAgT24gYSBmYWlsdXJlIGV2ZXJ5IGJ5dGUgaXMgcHV0IGJhY2ss IHRoZSBvbmUgd2hvc2UKKyAqIHdyaXRlIHJlcG9ydGVkIHRoZSBlcnJvciBpbmNsdWRlZCwgc2lu Y2UgaXQgbWF5IGhhdmUgcmVhY2hlZCB0aGUgcGFydC4KKyAqLworc3RhdGljIGludCBzaXQ5NTMx eF9vdXRwdXRfcGhhc2VfYnl0ZXNfd3JpdGUoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LAor CQkJCQkgICAgIHU4IG91dF9pZHgsIGNvbnN0IHU4ICpuZXdfYnl0ZXMsCisJCQkJCSAgICAgY29u c3QgdTggKm9sZF9ieXRlcykKK3sKKwlpbnQgcmMsIHJldCwgcmJfcmMgPSAwOworCXVuc2lnbmVk IGludCByZWc7CisJdTggaTsKKworCWZvciAoaSA9IDA7IGkgPCBTSVQ5NTMxWF9PVVRfUFJHX0JZ VEVTOyBpKyspIHsKKwkJcmVnID0gc2l0OTUzMXhfb3V0cHV0X3ByZ19yZWcoc2l0ZGV2LCBvdXRf aWR4LCBpKTsKKwkJcmMgPSBzaXQ5NTMxeF93cml0ZV91OChzaXRkZXYsIHJlZywgbmV3X2J5dGVz W2ldKTsKKwkJaWYgKHJjKQorCQkJZ290byByb2xsYmFjazsKKwl9CisKKwlyZXR1cm4gMDsKKwor cm9sbGJhY2s6CisJZm9yIChpID0gMDsgaSA8IFNJVDk1MzFYX09VVF9QUkdfQllURVM7IGkrKykg eworCQlyZWcgPSBzaXQ5NTMxeF9vdXRwdXRfcHJnX3JlZyhzaXRkZXYsIG91dF9pZHgsIGkpOwor CQlyZXQgPSBzaXQ5NTMxeF93cml0ZV91OChzaXRkZXYsIHJlZywgb2xkX2J5dGVzW2ldKTsKKwkJ aWYgKHJldCAmJiAhcmJfcmMpCisJCQlyYl9yYyA9IHJldDsKKwl9CisJaWYgKHJiX3JjKSB7CisJ CWRldl9lcnIoc2l0ZGV2LT5kZXYsCisJCQkib3V0JXU6IHBoYXNlLWFkanVzdCByb2xsYmFjayBm YWlsZWQgKCVkKSwgdGhlIGRlbGF5IHJlZ2lzdGVycyBhcmUgcGFydCBvbGQgYW5kIHBhcnQgbmV3 XG4iLAorCQkJb3V0X2lkeCwgcmJfcmMpOworCQlpZiAoIXJjKQorCQkJcmMgPSByYl9yYzsKKwl9 CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBFcnJvciBvZiByZWFsaXppbmcgQGFic19wcyBh cyBAY3ljbGVzIHdob2xlIFZDTyBjeWNsZXMgcGx1cyB0aGUgZmluZQorICogc3RlcHMgdGhhdCBj b21lIG5lYXJlc3QsIHdoaWNoIGFyZSByZXR1cm5lZCB0aHJvdWdoIEBmaW5lLgorICovCitzdGF0 aWMgdTY0IHNpdDk1MzF4X291dHB1dF9waGFzZV9xdWFudF9lcnIodTY0IGFic19wcywgdTY0IGZ2 Y28sIHU2NCBjeWNsZXMsCisJCQkJCSAgIHU4ICpmaW5lKQoreworCXU2NCBjeWNsZXNfcHMsIHN0 ZXBzID0gMDsKKworCWN5Y2xlc19wcyA9IG11bF91NjRfdTY0X2Rpdl91NjQoY3ljbGVzLCAxMDAw MDAwMDAwMDAwVUxMLCBmdmNvKTsKKwlpZiAoYWJzX3BzID4gY3ljbGVzX3BzKQorCQlzdGVwcyA9 IGRpdjY0X3U2NChhYnNfcHMgLSBjeWNsZXNfcHMgKworCQkJCSAgU0lUOTUzMVhfT1VUX1BSR19G SU5FX1NURVBfUFMgLyAyLAorCQkJCSAgU0lUOTUzMVhfT1VUX1BSR19GSU5FX1NURVBfUFMpOwor CSpmaW5lID0gbWluX3QodTY0LCBzdGVwcywgU0lUOTUzMVhfT1VUX1BSR19GSU5FX01BWCk7CisK KwlyZXR1cm4gYWJzX2RpZmYoYWJzX3BzLCBjeWNsZXNfcHMgKworCQkJKHU2NCkqZmluZSAqIFNJ VDk1MzFYX09VVF9QUkdfRklORV9TVEVQX1BTKTsKK30KKworLyoKKyAqIFF1YW50aXplIGEgcGhh c2UgcmVxdWVzdDogZm9sZCBAcGhhc2VfcHMgaW50byBvbmUgb3V0cHV0IHBlcmlvZCBhbmQKKyAq IHNwbGl0IGl0IGludG8gd2hvbGUgVkNPIGN5Y2xlcyAoQGNvYXJzZV9vdXQsIHdpdGhvdXQgdGhl IGRpdmlkZXIncworICogc2V0dGxpbmcgY3ljbGVzKSBhbmQgZmluZSBzdGVwcyAoQGZpbmVfb3V0 KS4gIEBwaGFzZV9hZGogZ2V0cyB0aGUgZGVsYXkKKyAqIHRoZSB0d28gcmVhbGl6ZSwgaW4gdGhl IHJlcXVlc3QncyBzaWduIGFuZCBib3VuZGVkIHRvIHRoZSBhZHZlcnRpc2VkCisgKiByYW5nZSwg d2hpY2ggaXMgd2hhdCB0aGUgY2FjaGUgaG9sZHMuICBQdXJlIGFyaXRobWV0aWMgYWdhaW5zdCBA ZnZjbworICogYW5kIHRoZSBkaXZpZGVyIEBkaXZvIHRoZSBvdXRwdXQgcnVucyBvbiwgc28gYSBj YWxsZXIgY2FuIGVuY29kZQorICogYmVmb3JlIGl0IGVudGVycyB0aGUgcHJvZ3JhbW1pbmcgc3Rh dGUuCisgKi8KK3N0YXRpYyBpbnQgc2l0OTUzMXhfb3V0cHV0X3BoYXNlX2VuY29kZSh1NjQgZnZj bywgdTY0IGRpdm8sIHMzMiBwaGFzZV9wcywKKwkJCQkJdTY0ICpjb2Fyc2Vfb3V0LCB1OCAqZmlu ZV9vdXQsCisJCQkJCXMzMiAqcGhhc2VfYWRqKQoreworCXU2NCBhYnNfcHMsIGN5Y2xlcywgZnJh Y19wcywgY29hcnNlID0gMCwgY29hcnNlX3BzLCB0X291dF9wczsKKwlzNjQgcGhhc2Vfbm9ybV9w cyA9IDA7CisJdTggZmluZSA9IDA7CisKKwl0X291dF9wcyA9IG11bF91NjRfdTY0X2Rpdl91NjQo ZGl2bywgMTAwMDAwMDAwMDAwMFVMTCwgZnZjbyk7CisJaWYgKCF0X291dF9wcykKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwkvKiBObyBkZWxheSBlbmNvZGVzIGFzIG5vbmU7IHRoZSBkaXZpc2lvbnMg YmVsb3cgaGF2ZSBub3RoaW5nIHRvIGRvLiAqLworCWlmICghcGhhc2VfcHMpIHsKKwkJKmNvYXJz ZV9vdXQgPSAwOworCQkqZmluZV9vdXQgPSAwOworCQkqcGhhc2VfYWRqID0gMDsKKwkJcmV0dXJu IDA7CisJfQorCisJLyoKKwkgKiBDb252ZXJ0IHRvIHVuc2lnbmVkIGFic29sdXRlIGRlbGF5LiAg Qm90aCBzaWducyBhcmUgZm9sZGVkCisJICogbW9kdWxvIG9uZSBwZXJpb2Q6IHBvc2l0aXZlIGRl bGF5cyB3cmFwIG5hdHVyYWxseSwgbmVnYXRpdmUKKwkgKiBkZWxheXMgYXJlIHJlbmRlcmVkIGFz IFRfb3V0IC0gfHBoYXNlfC4gIGFicygpIGlzIHNhZmUgaGVyZQorCSAqIGJlY2F1c2UgdGhlIGNv cmUgcmVqZWN0cyBhbnl0aGluZyBvdXRzaWRlIHRoZSBhZHZlcnRpc2VkIHBoYXNlCisJICogcmFu Z2UsIHdoaWNoIGlzICsvLTEgbXMuCisJICoKKwkgKiBUaGUgcGVyaW9kIGlzIGV4YWN0bHkgRElW TyBWQ08gY3ljbGVzLCB3aGVyZWFzIGluIHBpY29zZWNvbmRzIGl0CisJICogaXMgYSBmcmFjdGlv biBtb3JlIG9mdGVuIHRoYW4gbm90OiA3ODEyLjUgcHMgYXQgMTI4IE1IeiBmcm9tIGEKKwkgKiA1 LjEyIEdIeiBWQ08sIGFuZCBhIGZvbGQgb24gdGhlIHRydW5jYXRlZCA3ODEyIGRyb3BzIHRoZSBo YWxmCisJICogcGljb3NlY29uZCBvbmNlIHBlciBwZXJpb2QgZm9sZGVkIGF3YXksIHNvIDEwMCB1 cyAtLSAxMjgwMAorCSAqIHBlcmlvZHMgZXhhY3RseSAtLSB3b3VsZCBjb21lIG91dCBhcyA2NDAw IHBzIHJhdGhlciB0aGFuIG5vdGhpbmcuCisJICogRm9sZCB0aGUgd2hvbGUgVkNPIGN5Y2xlcyBv ZiB0aGUgcmVxdWVzdCBtb2R1bG8gRElWTyBpbnN0ZWFkLCBhbmQKKwkgKiBjYXJyeSB0aGUgc3Vi LWN5Y2xlIHBhcnQgYWNyb3NzIGFzIGl0IGlzLiAgZGl2NjRfdTY0X3JlbSgpIHJhdGhlcgorCSAq IHRoYW4gdGhlICUgb3BlcmF0b3I6IGEgNjQtYml0IG1vZHVsbyBoYXMgbm8gY29tcGlsZXIgaGVs cGVyIG9uCisJICogMzItYml0IHRhcmdldHMgYW5kIGxlYXZlcyB0aGUgbW9kdWxlIHdpdGggYW4g dW5kZWZpbmVkIF9fdW1vZGRpMy4KKwkgKi8KKwlhYnNfcHMgPSBhYnMocGhhc2VfcHMpOworCWN5 Y2xlcyA9IG11bF91NjRfdTY0X2Rpdl91NjQoYWJzX3BzLCBmdmNvLCAxMDAwMDAwMDAwMDAwVUxM KTsKKwlmcmFjX3BzID0gYWJzX3BzIC0gbXVsX3U2NF91NjRfZGl2X3U2NChjeWNsZXMsIDEwMDAw MDAwMDAwMDBVTEwsIGZ2Y28pOworCWRpdjY0X3U2NF9yZW0oY3ljbGVzLCBkaXZvLCAmY3ljbGVz KTsKKwlhYnNfcHMgPSBtdWxfdTY0X3U2NF9kaXZfdTY0KGN5Y2xlcywgMTAwMDAwMDAwMDAwMFVM TCwgZnZjbykgKyBmcmFjX3BzOworCS8qCisJICogVGhlIHRydW5jYXRpb25zIGFib3ZlIGNhbiBw dXQgYSByZXF1ZXN0IHdpdGhpbiBhIHBpY29zZWNvbmQgb2YgYQorCSAqIHdob2xlIHBlcmlvZCBh IHBpY29zZWNvbmQgcGFzdCBpdDsgdGhhdCBpcyB0aGUgc2FtZSBlZGdlIGFzIG5vbmUuCisJICov CisJaWYgKGFic19wcyA+PSB0X291dF9wcykKKwkJYWJzX3BzID0gMDsKKwlwaGFzZV9ub3JtX3Bz ID0gcGhhc2VfcHMgPCAwID8gLShzNjQpYWJzX3BzIDogKHM2NClhYnNfcHM7CisJYWJzX3BzID0g KHBoYXNlX3BzIDwgMCAmJiBhYnNfcHMpID8gdF9vdXRfcHMgLSBhYnNfcHMgOiBhYnNfcHM7CisK KwlpZiAoYWJzX3BzKSB7CisJCXU2NCBmbG9vcl9jeWNsZXMsIGVyciwgYWx0X2VycjsKKwkJdTgg YWx0X2ZpbmU7CisKKwkJLyoKKwkJICogY29hcnNlX2N5Y2xlcyA9IGFic19wcyAqIEZ2Y28gLyAx ZTEyIHBzL3MuCisJCSAqIG11bF91NjRfdTY0X2Rpdl91NjQoKSBhdm9pZHMgb3ZlcmZsb3cgd2hl biBhYnNfcHMgYXBwcm9hY2hlcworCQkgKiBvbmUgc2Vjb25kIG9mIDEgUFBTIHdyYXAtYXJvdW5k LgorCQkgKi8KKwkJZmxvb3JfY3ljbGVzID0gbXVsX3U2NF91NjRfZGl2X3U2NChhYnNfcHMsIGZ2 Y28sCisJCQkJCQkgICAxMDAwMDAwMDAwMDAwVUxMKTsKKworCQkvKgorCQkgKiBGaW5lID0gcm91 bmQoKGFic19wcyAtIGNvYXJzZSAqIHZjb19wZXJpb2RfcHMpIC8gMzAgcHMpLgorCQkgKiBUaGUg ZmluZSBmaWVsZCBzcGFucyAyMTAgcHMsIG1vcmUgdGhhbiBvbmUgVkNPIGN5Y2xlIGluCisJCSAq IGV2ZXJ5IGJhbmQsIHNvIHRoZSBjeWNsZSBjb3VudCB0aGF0IGZsb29ycyB0aGUgcmVxdWVzdCBp cworCQkgKiBub3QgYWx3YXlzIHRoZSBuZWFyZXN0IGVuY29kaW5nOiBvbmUgY3ljbGUgbW9yZSBj YW4gbGFuZAorCQkgKiBjbG9zZXIgdGhhbiBhbnkgZmluZSBjb2RlIHdoZW4gdGhlIHJlbWFpbmRl ciBzaXRzIGp1c3QKKwkJICogdW5kZXIgYSBjeWNsZSwgYW5kIG9uZSBjeWNsZSBmZXdlciB3aXRo IGEgbGFyZ2VyIGZpbmUgY29kZQorCQkgKiBjYW4gbGFuZCBjbG9zZXIgb3IgZXhhY3QgLS0gMjEw IHBzIGF0IDUgR0h6IGlzIHNldmVuIGZpbmUKKwkJICogc3RlcHMsIG5vdCBhIGN5Y2xlIGFuZCBh IHRlbiBwaWNvc2Vjb25kIHJlbWFpbmRlci4gIFRha2UKKwkJICogdGhlIG5lYXJlc3Qgb2YgdGhl IHRocmVlLCB0aGUgZmxvb3Igb24gYSB0aWUuCisJCSAqLworCQljb2Fyc2UgPSBmbG9vcl9jeWNs ZXM7CisJCWVyciA9IHNpdDk1MzF4X291dHB1dF9waGFzZV9xdWFudF9lcnIoYWJzX3BzLCBmdmNv LCBjb2Fyc2UsCisJCQkJCQkgICAgICAmZmluZSk7CisJCWFsdF9lcnIgPSBzaXQ5NTMxeF9vdXRw dXRfcGhhc2VfcXVhbnRfZXJyKGFic19wcywgZnZjbywKKwkJCQkJCQkgIGZsb29yX2N5Y2xlcyAr IDEsCisJCQkJCQkJICAmYWx0X2ZpbmUpOworCQlpZiAoYWx0X2VyciA8IGVycikgeworCQkJY29h cnNlID0gZmxvb3JfY3ljbGVzICsgMTsKKwkJCWZpbmUgPSBhbHRfZmluZTsKKwkJCWVyciA9IGFs dF9lcnI7CisJCX0KKwkJaWYgKGZsb29yX2N5Y2xlcykgeworCQkJdTY0IGZld2VyID0gZmxvb3Jf Y3ljbGVzIC0gMTsKKworCQkJYWx0X2VyciA9IHNpdDk1MzF4X291dHB1dF9waGFzZV9xdWFudF9l cnIoYWJzX3BzLCBmdmNvLAorCQkJCQkJCQkgIGZld2VyLAorCQkJCQkJCQkgICZhbHRfZmluZSk7 CisJCQlpZiAoYWx0X2VyciA8IGVycikgeworCQkJCWNvYXJzZSA9IGZld2VyOworCQkJCWZpbmUg PSBhbHRfZmluZTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIEEgZGVsYXkgdGhhdCBxdWFudGl6 ZXMgdG8gYSB3aG9sZSBvdXRwdXQgcGVyaW9kIG9yIGJleW9uZAorCQkgKiBpcyB0aGUgc2FtZSBl ZGdlIGFzIG5vIGRlbGF5IGF0IGFsbDsgcHJvZ3JhbSBub25lLCBzbyB0aGUKKwkJICogcmVnaXN0 ZXJzIGhvbGQgbm8gcmVzaWR1YWwgcGFzdCB0aGUgcGVyaW9kIGFuZCB0aGUgY2FjaGUKKwkJICog YmVsb3cgZGVzY3JpYmVzIGV4YWN0bHkgd2hhdCB0aGV5IHJlYWxpemUuCisJCSAqLworCQljb2Fy c2VfcHMgPSBtdWxfdTY0X3U2NF9kaXZfdTY0KGNvYXJzZSwgMTAwMDAwMDAwMDAwMFVMTCwgZnZj byk7CisJCWlmIChjb2Fyc2VfcHMgKyAodTY0KWZpbmUgKiBTSVQ5NTMxWF9PVVRfUFJHX0ZJTkVf U1RFUF9QUyA+PQorCQkgICAgdF9vdXRfcHMpIHsKKwkJCWNvYXJzZSA9IDA7CisJCQlmaW5lID0g MDsKKwkJfQorCisJCWlmIChjb2Fyc2UgKyBTSVQ5NTMxWF9PVVRfUFJHX0RJVk9fQ1lDTEVTID49 CisJCSAgICAoMVVMTCA8PCBTSVQ5NTMxWF9PVVRfUFJHX0NPQVJTRV9CSVRTKSkKKwkJCXJldHVy biAtRVJBTkdFOworCX0KKworCWNvYXJzZV9wcyA9IG11bF91NjRfdTY0X2Rpdl91NjQoY29hcnNl LCAxMDAwMDAwMDAwMDAwVUxMLCBmdmNvKTsKKwlhYnNfcHMgPSBjb2Fyc2VfcHMgKyAodTY0KWZp bmUgKiBTSVQ5NTMxWF9PVVRfUFJHX0ZJTkVfU1RFUF9QUzsKKwkvKgorCSAqIFF1YW50aXphdGlv biBjYW4gYWxzbyBsYW5kIGEgZmV3IHBpY29zZWNvbmRzIHBhc3QgdGhlIGVuZCBvZiB0aGUKKwkg KiBhZHZlcnRpc2VkIHJhbmdlLCB3aGljaCB0aGUgZ2V0dGVyIG11c3Qgbm90IHJlcG9ydC4gIEJv dW5kIGJvdGgKKwkgKiBzaWducyB0byB0aGUgcmFuZ2U7IHRoZSBwb3NpdGl2ZSBvbmUgaXMgYWxz byB3aGF0IGtlZXBzIHRoZSBjYXN0CisJICogdG8gdGhlIHMzMiB0aGUgQUJJIGNhcnJpZXMgc2Fm ZS4KKwkgKi8KKwlpZiAocGhhc2Vfbm9ybV9wcyA8IDApCisJCSpwaGFzZV9hZGogPSBhYnNfcHMg PworCQkJICAgICAtKHMzMiltaW5fdCh1NjQsIHRfb3V0X3BzIC0gYWJzX3BzLAorCQkJCQkgIFNJ VDk1MzFYX09VVF9QSEFTRV9BREpfTUFYX1BTKSA6IDA7CisJZWxzZQorCQkqcGhhc2VfYWRqID0g KHMzMiltaW5fdCh1NjQsIGFic19wcywKKwkJCQkJIFNJVDk1MzFYX09VVF9QSEFTRV9BREpfTUFY X1BTKTsKKworCSpjb2Fyc2Vfb3V0ID0gY29hcnNlOworCSpmaW5lX291dCA9IGZpbmU7CisKKwly ZXR1cm4gMDsKK30KKworLyoqCisgKiBzaXQ5NTMxeF9vdXRwdXRfcGhhc2VfcmVhZCAtIHJlYWQg YW4gb3V0cHV0J3MgcHJvZ3JhbW1lZCBkZWxheSBiYWNrCisgKiBAc2l0ZGV2OglkZXZpY2UgcG9p bnRlcgorICogQG91dF9pZHg6CWxvZ2ljYWwgb3V0cHV0IGluZGV4CisgKiBAcGhhc2VfcHM6CXJl c3VsdCBpbiBwaWNvc2Vjb25kcywgaW4gdGhlIGFkdmVydGlzZWQgcmFuZ2UKKyAqIEBjbGFtcGVk OglzZXQgd2hlbiB0aGUgZGVsYXkgbGllcyBiZXlvbmQgdGhlIGFkdmVydGlzZWQgcmFuZ2UgZWl0 aGVyCisgKgkJd2F5IGFuZCBAcGhhc2VfcHMgcmVwb3J0cyB0aGUgZW5kIG9mIHRoZSByYW5nZSBp biBpdHMgcGxhY2UKKyAqCisgKiBUaGUgZGVsYXkgdGhlIGNoaXAgaG9sZHMgaXMgcGFydCBvZiB0 aGUgcHJvZmlsZSBpdCBsb2FkcyBiZWZvcmUgcHJvYmUsCisgKiBhbmQgYSByYXRlIG9yIHBoYXNl IHJlcXVlc3QgdGhhdCBmYWlsZWQgYWZ0ZXIgaXRzIHdyaXRlcyByZWFjaGVkIHRoZQorICogZGV2 aWNlIGxlYXZlcyB0aGUgY2FjaGUgZGVzY3JpYmluZyBzb21ldGhpbmcgZWxzZS4gIERlY29kaW5n IHRoZSBmaXZlCisgKiBQUkdfUlNUX0RFTEFZIGJ5dGVzIGlzIHRoZSBvbmx5IHdheSB0byBzYXkg d2hhdCB0aGUgb3V0cHV0IGlzIHJlYWxseQorICogZG9pbmcuICBUaGUgcmVnaXN0ZXJzIGNhcnJ5 IGFuIHVuc2lnbmVkIGRlbGF5LCBhbmQgYW4gYWR2YW5jZSBpcyBoZWxkCisgKiBhcyBpdHMgY29t cGxlbWVudCB0byB0aGUgb3V0cHV0IHBlcmlvZC4gIFRoZSB0d28gY2FuIG9ubHkgYmUgdG9sZAor ICogYXBhcnQgb24gYW4gb3V0cHV0IHdob3NlIHBlcmlvZCBpcyBsb25nZXIgdGhhbiB0aGUgYWR2 ZXJ0aXNlZCByYW5nZToKKyAqIHRoZXJlIGEgZGVsYXkgYmV5b25kIHRoZSByYW5nZSB3aG9zZSBj b21wbGVtZW50IGlzIHdpdGhpbiBpdCByZWFkcworICogYmFjayBhcyB0aGF0IGFkdmFuY2UuICBP biBhIGZhc3RlciBvdXRwdXQgZXZlcnkgZGVsYXkgaXMgd2l0aGluIHRoZQorICogcmFuZ2UsIGFu ZCBhbiBhZHZhbmNlIHRoYXQgd2FzIHNldCByZWFkcyBiYWNrIGFzIHRoZSBkZWxheSB0byB0aGUg c2FtZQorICogZWRnZSwgd2hpY2ggaXMgdGhlIHNhbWUgcGhhc2UuCisgKgorICogQ2FsbGVyIG11 c3QgaG9sZCBzaXRkZXYtPm11bHRpb3BfbG9jay4KKyAqCisgKiBSZXR1cm46IDAgb24gc3VjY2Vz cywgLUVOT0RBVEEgZm9yIGFuIG91dHB1dCBubyBQTEwgZHJpdmVzIG9yIHdob3NlIFZDTworICog cmF0ZSBpcyB1bmtub3duLCA8MCBvbiByZWdpc3RlciBhY2Nlc3MgZXJyb3IKKyAqLworaW50IHNp dDk1MzF4X291dHB1dF9waGFzZV9yZWFkKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTgg b3V0X2lkeCwKKwkJCSAgICAgICBzMzIgKnBoYXNlX3BzLCBib29sICpjbGFtcGVkKQoreworCWNv bnN0IHN0cnVjdCBzaXQ5NTMxeF9jaGlwX2luZm8gKmluZm8gPSBzaXRkZXYtPmluZm87CisJdTgg Ynl0ZXNbU0lUOTUzMVhfT1VUX1BSR19CWVRFU10sIGZpbmU7CisJdTY0IGNvYXJzZSA9IDAsIGZ2 Y28sIHBzLCBkaXZvOworCWludCByYzsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnNpdGRldi0+ bXVsdGlvcF9sb2NrKTsKKworCWlmIChvdXRfaWR4ID49IGluZm8tPm51bV9vdXRwdXRzKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCSpjbGFtcGVkID0gZmFsc2U7CisKKwkvKgorCSAqIEFuIG91dHB1 dCBubyBQTEwgZHJpdmVzIGhhcyBubyBGdmNvIHRvIGRlY29kZSBpdHMgZGVsYXkgYWdhaW5zdDsK KwkgKiBwbGxfaWR4IHRoZW4gaG9sZHMgYSBwbGFjZWhvbGRlciwgbm90IGEgcm91dGluZy4KKwkg Ki8KKwlpZiAoIXNpdGRldi0+b3V0W291dF9pZHhdLnJvdXRlZCkKKwkJcmV0dXJuIC1FTk9EQVRB OworCisJcmMgPSBzaXQ5NTMxeF9nZXRfZnZjbyhzaXRkZXYsIHNpdGRldi0+b3V0W291dF9pZHhd LnBsbF9pZHgsICZmdmNvKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gc2l0OTUz MXhfb3V0cHV0X3BoYXNlX2J5dGVzX3JlYWQoc2l0ZGV2LCBvdXRfaWR4LCBieXRlcyk7CisJaWYg KHJjKQorCQlyZXR1cm4gcmM7CisKKwlmaW5lID0gKGJ5dGVzWzBdICYgU0lUOTUzMVhfT1VUX1BS R19GSU5FX01BU0spID4+CisJICAgICAgIFNJVDk1MzFYX09VVF9QUkdfRklORV9TSElGVDsKKwlj b2Fyc2UgPSAodTY0KShieXRlc1swXSAmIFNJVDk1MzFYX09VVF9QUkdfQ09BUlNFX0hJX01BU0sp IDw8IDMyOworCWNvYXJzZSB8PSAodTY0KWJ5dGVzWzFdIDw8IDI0OworCWNvYXJzZSB8PSAodTY0 KWJ5dGVzWzJdIDw8IDE2OworCWNvYXJzZSB8PSAodTY0KWJ5dGVzWzNdIDw8IDg7CisJY29hcnNl IHw9IGJ5dGVzWzRdOworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgY2FycmllcyB0aGUgZGl2aWRl cidzIHNldHRsaW5nIHRpbWUgb24gdG9wIG9mIHRoZQorCSAqIGRlbGF5IHRoYXQgd2FzIGFza2Vk IGZvciwgc28gdGFrZSBpdCBiYWNrIG9mZi4gIEEgcHJvZmlsZSBjYW4KKwkgKiBsZWF2ZSBhIHZh bHVlIGJlbG93IGl0LCB3aGljaCBkZXNjcmliZXMgbm8gZGVsYXkgYXQgYWxsLgorCSAqLworCWNv YXJzZSA9IChjb2Fyc2UgPiBTSVQ5NTMxWF9PVVRfUFJHX0RJVk9fQ1lDTEVTKSA/CisJCSBjb2Fy c2UgLSBTSVQ5NTMxWF9PVVRfUFJHX0RJVk9fQ1lDTEVTIDogMDsKKworCS8qCisJICogVGhlIHNl dHRlciBob2xkcyBhbiBhZHZhbmNlIGFzIFRfb3V0IC0gfGFkdmFuY2V8LCBzbyBhIGRlbGF5CisJ ICogYmV5b25kIHRoZSBhZHZlcnRpc2VkIHJhbmdlIHdob3NlIGNvbXBsZW1lbnQgaXMgd2l0aGlu IGl0IGlzIHRoYXQKKwkgKiBhZHZhbmNlIGFuZCByZWFkcyBiYWNrIGFzIG9uZS4gIEFueXRoaW5n IGVsc2UgYSBwcm9maWxlIGxlZnQKKwkgKiBiZXlvbmQgdGhlIHJhbmdlIC0tIHdpZGVyIHRoYW4g YW4gczMyIG9uIGEgc2xvdyBvdXRwdXQgLS0gcmVwb3J0cworCSAqIHRoZSBlbmQgb2YgdGhlIHJh bmdlIHJhdGhlciB0aGFuIGEgdmFsdWUgdGhlIHNldHRlciB3b3VsZCByZWZ1c2UsCisJICogYW5k IHNheXMgc286IHRoZSBlbmQgb2YgdGhlIHJhbmdlIGlzIG5vdCB0aGUgZGVsYXksIGFuZCBhIHJh dGUKKwkgKiBjaGFuZ2UgbXVzdCBub3QgcmUtdGltZSBpdCBpbnRvIHRoZSBkZXZpY2UgYXMgdGhv dWdoIGl0IHdlcmUuCisJICoKKwkgKiBUaGUgcGVyaW9kIGNvbWVzIGZyb20gdGhlIGRpdmlkZXIg cmF0aGVyIHRoYW4gZnJvbSB0aGUgY2FjaGVkIHJhdGUsCisJICogd2hpY2ggaXMgc3RpbGwgdW5z ZXQgYXQgcHJvYmUgYW5kIHdob2xlIGhlcnR6IGF0IGJlc3QuICBBbiBvdXRwdXQKKwkgKiB3aXRo b3V0IGEgcHJvZ3JhbW1lZCBkaXZpZGVyIGhhcyBubyBwZXJpb2QgdG8gZm9sZCBhZ2FpbnN0OyBh CisJICogZGl2aWRlciB0aGF0IGNvdWxkIG5vdCBiZSByZWFkIGlzIGFuIGVycm9yLCBub3QgYSBt aXNzaW5nIG9uZSwKKwkgKiBzaW5jZSB0aGUgdW5mb2xkZWQgdmFsdWUgd291bGQgYmUgY2FjaGVk IGFzIHRoZSByZWFsaXplZCBkZWxheS4KKwkgKi8KKwlyYyA9IHNpdDk1MzF4X291dHB1dF9kaXZv X3JlYWQoc2l0ZGV2LCBvdXRfaWR4LCAmZGl2byk7CisJaWYgKHJjICYmIHJjICE9IC1FTk9EQVRB KQorCQlyZXR1cm4gcmM7CisKKwkvKgorCSAqIFRoZSBwZXJpb2QgaXMgZXhhY3RseSBESVZPIFZD TyBjeWNsZXMsIHNvIGZvbGQgdGhlIGN5Y2xlIGNvdW50CisJICogcmF0aGVyIHRoYW4gdGhlIHBp Y29zZWNvbmRzIGl0IGNvbnZlcnRzIHRvLCB3aGljaCB3b3VsZCBkcm9wIHRoZQorCSAqIGZyYWN0 aW9uIG9mIGEgcGljb3NlY29uZCBvZiB0aGUgcGVyaW9kIG9uY2UgcGVyIHBlcmlvZCBmb2xkZWQK KwkgKiBhd2F5IChzZWUgc2l0OTUzMXhfb3V0cHV0X3BoYXNlX2VuY29kZSgpKS4gIFRoZSBmaW5l IHN0ZXBzIGNhbgorCSAqIHN0aWxsIGNhcnJ5IHRoZSBzdW0gYSBmcmFjdGlvbiBvZiBhIGN5Y2xl IHBhc3QgdGhlIHBlcmlvZDsgb25lCisJICogc3VidHJhY3Rpb24gZm9sZHMgdGhhdCB3aXRob3V0 IGFueXRoaW5nIHRvIGFjY3VtdWxhdGUuCisJICovCisJaWYgKCFyYykKKwkJZGl2NjRfdTY0X3Jl bShjb2Fyc2UsIGRpdm8sICZjb2Fyc2UpOworCisJcHMgPSBtdWxfdTY0X3U2NF9kaXZfdTY0KGNv YXJzZSwgMTAwMDAwMDAwMDAwMFVMTCwgZnZjbyk7CisJcHMgKz0gKHU2NClmaW5lICogU0lUOTUz MVhfT1VUX1BSR19GSU5FX1NURVBfUFM7CisKKwlpZiAoIXJjKSB7CisJCXU2NCB0X291dF9wcyA9 IG11bF91NjRfdTY0X2Rpdl91NjQoZGl2bywgMTAwMDAwMDAwMDAwMFVMTCwKKwkJCQkJCSAgIGZ2 Y28pOworCisJCWlmIChwcyA+PSB0X291dF9wcykKKwkJCXBzIC09IHRfb3V0X3BzOworCQlpZiAo cHMgPiBTSVQ5NTMxWF9PVVRfUEhBU0VfQURKX01BWF9QUyAmJgorCQkgICAgdF9vdXRfcHMgLSBw cyA8PSBTSVQ5NTMxWF9PVVRfUEhBU0VfQURKX01BWF9QUykgeworCQkJKnBoYXNlX3BzID0gLShz MzIpKHRfb3V0X3BzIC0gcHMpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJKmNsYW1wZWQgPSBw cyA+IFNJVDk1MzFYX09VVF9QSEFTRV9BREpfTUFYX1BTOworCSpwaGFzZV9wcyA9IChzMzIpbWlu X3QodTY0LCBwcywgU0lUOTUzMVhfT1VUX1BIQVNFX0FESl9NQVhfUFMpOworCisJcmV0dXJuIDA7 Cit9CisKIGludCBzaXQ5NTMxeF9vdXRwdXRfZnJlcV9zZXQoc3RydWN0IHNpdDk1MzF4X2RldiAq c2l0ZGV2LCB1OCBvdXRfaWR4LAogCQkJICAgICB1OCBwbGxfaWR4LCB1NjQgZnJlcXVlbmN5KQog ewotCXU2NCBmdmNvLCBkaXZvOworCXU4IG9sZF9ieXRlc1tTSVQ5NTMxWF9PVVRfUFJHX0JZVEVT XSwgbmV3X2J5dGVzW1NJVDk1MzFYX09VVF9QUkdfQllURVNdOworCXU2NCBmdmNvLCBkaXZvLCBj b2Fyc2U7CisJYm9vbCByZXRpbWUgPSBmYWxzZTsKKwlzMzIgcGhhc2VfYWRqID0gMDsKIAlpbnQg cmMsIHJldDsKKwl1OCBmaW5lOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2l0ZGV2LT5tdWx0 aW9wX2xvY2spOwogCkBAIC0yMjgwLDExICsyNzAwLDQ1IEBAIGludCBzaXQ5NTMxeF9vdXRwdXRf ZnJlcV9zZXQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBvdXRfaWR4LAogCWlmIChy YykKIAkJcmV0dXJuIHJjOwogCisJLyoKKwkgKiBUaGUgcHJvZ3JhbW1lZCByZXNldCBkZWxheSBj b3VudHMgVkNPIGN5Y2xlcywgYW5kIGEgcmF0ZSBjaGFuZ2UKKwkgKiBtb3ZlcyBvbmx5IHRoZSBk aXZpZGVyLCBzbyBhIHBvc2l0aXZlIGRlbGF5IGtlZXBzIGl0cyB0aW1pbmc7IGFuCisJICogYWR2 YW5jZSwgdGhvdWdoLCBpcyBoZWxkIGFzIFRfb3V0IC0gfGFkdmFuY2V8IGFuZCBoYXMgdG8gYmUK KwkgKiByZS1lbmNvZGVkIGFnYWluc3QgdGhlIG5ldyBwZXJpb2QuICBSZS1lbmNvZGUgdGhlIGRl bGF5IHRoZSBvdXRwdXQKKwkgKiByZWFsaXplcywgd2hpY2ggaXMgd2hhdCB0aGUgY2FjaGUgaG9s ZHMsIGFnYWluc3QgdGhlIG5ldyBkaXZpZGVyLAorCSAqIGFuZCB3cml0ZSBpdCBpbiB0aGUgc2Ft ZSBwcm9ncmFtbWluZyB3aW5kb3cgYXMgdGhlIGRpdmlkZXI6IHRoZQorCSAqIHJhdGUgY2hhbmdl IHRoZW4gY29zdHMgb25lIGNvbW1pdCBhbmQgb25lIGZsdXNoLiAgQSBzZWNvbmQgd2luZG93CisJ ICogd291bGQgb3BlbiB0aGUgb3V0cHV0IGxvb3BzIGFuZCB3YWl0IG91dCB0aGVpciBzZXR0bGlu ZyBhZ2FpbiwgYW5kCisJICogYSBzZWNvbmQgZmx1c2ggd291bGQgcmVzdGFydCB0aGUgUExMJ3Mg ZGl2aWRlcnMgYWdhaW4gLS0gb3IsIG9uIGEKKwkgKiBQTEwgdGhlIHByb2ZpbGUgYnVpbGRzIHdp dGhvdXQgdGhlIHBoYXNlLWZsdXNoIGZlYXR1cmUsIHRoZSBQTEwKKwkgKiBpdHNlbGYuICBGb3Ig YSBwb3NpdGl2ZSBkZWxheSB0aGUgYnl0ZXMgY29tZSBvdXQgdGhlIHNhbWUgYW5kCisJICogbm90 aGluZyBpcyB3cml0dGVuLiAgQSByZS10aW1lIHRoYXQgY2Fubm90IGJlIHdvcmtlZCBvdXQgZmFp bHMKKwkgKiB0aGUgcmVxdWVzdCBiZWZvcmUgYW55dGhpbmcgaXMgd3JpdHRlbi4KKwkgKi8KKwlp ZiAoc2l0ZGV2LT5vdXRbb3V0X2lkeF0ucGhhc2VfYXJtZWQpIHsKKwkJczMyIGhlbGQgPSBzaXRk ZXYtPm91dFtvdXRfaWR4XS5waGFzZV9hZGo7CisKKwkJcmMgPSBzaXQ5NTMxeF9vdXRwdXRfcGhh c2VfZW5jb2RlKGZ2Y28sIGRpdm8sIGhlbGQsICZjb2Fyc2UsCisJCQkJCQkgICZmaW5lLCAmcGhh c2VfYWRqKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCQlyYyA9IHNpdDk1MzF4X291dHB1 dF9waGFzZV9ieXRlc19yZWFkKHNpdGRldiwgb3V0X2lkeCwKKwkJCQkJCSAgICAgIG9sZF9ieXRl cyk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwkJc2l0OTUzMXhfb3V0cHV0X3BoYXNlX2J5 dGVzX2J1aWxkKG9sZF9ieXRlcywgY29hcnNlLCBmaW5lLAorCQkJCQkJICBuZXdfYnl0ZXMpOwor CQlyZXRpbWUgPSBtZW1jbXAob2xkX2J5dGVzLCBuZXdfYnl0ZXMsIHNpemVvZihuZXdfYnl0ZXMp KSAhPSAwOworCX0KKwogCXJjID0gc2l0OTUzMXhfcHJnX2VudGVyKHNpdGRldik7CiAJaWYgKHJj KQogCQlyZXR1cm4gcmM7CiAKIAlyYyA9IHNpdDk1MzF4X291dHB1dF9kaXZvX3dyaXRlKHNpdGRl diwgb3V0X2lkeCwgZGl2byk7CisJaWYgKCFyYyAmJiByZXRpbWUpCisJCXJjID0gc2l0OTUzMXhf b3V0cHV0X3BoYXNlX2J5dGVzX3dyaXRlKHNpdGRldiwgb3V0X2lkeCwKKwkJCQkJCSAgICAgICBu ZXdfYnl0ZXMsIG9sZF9ieXRlcyk7CiAJLyoKIAkgKiBTdGVwIDQ6IE5WTSB1cGRhdGUgKyBsb29w IGxvY2suICBBbHdheXMgcnVuIHByZ19jb21taXQoKSBzbyB0aGUgY2hpcAogCSAqIGxlYXZlcyB0 aGUgUFJHX0NNRCBzdGF0ZSB3aXRoIHRoZSBvdXRwdXQgbG9vcHMgcmUtbG9ja2VkLCBldmVuIHdo ZW4gYQpAQCAtMjI5NCw4ICsyNzQ4LDI2IEBAIGludCBzaXQ5NTMxeF9vdXRwdXRfZnJlcV9zZXQo c3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBvdXRfaWR4LAogCXJldCA9IHNpdDk1MzF4 X3ByZ19jb21taXQoc2l0ZGV2KTsKIAlpZiAocmV0ICYmICFyYykKIAkJcmMgPSByZXQ7Ci0JaWYg KHJjKQorCWlmIChyYykgeworCQkvKgorCQkgKiBUaGUgZGl2aWRlciBtYXkgaGF2ZSBjaGFuZ2Vk IGFsbCB0aGUgc2FtZTogYSBmYWlsZWQgdXBkYXRlCisJCSAqIGNhbiBoYXZlIHJlYWNoZWQgdGhl IHBhcnQsIGEgbG9vcCBsb2NrIGNhbiBmYWlsIGFmdGVyIGl0CisJCSAqIHRvb2sgZWZmZWN0LCBh bmQgYSBmYWlsZWQgcm9sbGJhY2sgbGVhdmVzIHdoYXRldmVyIGxhbmRlZC4KKwkJICogQW4gYWR2 YW5jZSBpcyBoZWxkIGFzIFRfb3V0IC0gfGFkdmFuY2V8IGFnYWluc3QgdGhlIHBlcmlvZAorCQkg KiB0aGF0IHdhcywgYW5kIHRoZSByZS10aW1lZCBieXRlcyBtYXkgb3IgbWF5IG5vdCBiZSBpbiwg c28KKwkJICogdGhlIGNhY2hlIG5vIGxvbmdlciBzYXlzIHdoYXQgdGhlIG91dHB1dCBkb2VzLiAg TWFyayBpdCBmb3IKKwkJICogYSByZWFkLWJhY2s6IHRoZSBjb3JlIGRyb3BzIGEgcmV0cnkgb2Yg ZWl0aGVyIHJlcXVlc3QsCisJCSAqIHRoZSByYXRlIGJlY2F1c2UgaXQgcmVhZHMgdGhlIG5ldyBv bmUgZmlyc3QgYW5kIHRoZSBwaGFzZQorCQkgKiBiZWNhdXNlIGl0IHdvdWxkIG1hdGNoIHRoZSBz dGFsZSBjYWNoZS4gIEEgZmx1c2ggaXMgb3dlZAorCQkgKiBhcyB3ZWxsOiB3aGF0ZXZlciBsYW5k ZWQgZGlkIHNvIHdpdGhvdXQgaXRzIHJlYWxpZ25tZW50LAorCQkgKiBhbmQgb25jZSB0aGUgcmVh ZC1iYWNrIGhhcyByZWZyZXNoZWQgdGhlIGNhY2hlIGFuIGlkZW50aWNhbAorCQkgKiBwaGFzZSBy ZXF1ZXN0IHdvdWxkIG90aGVyd2lzZSBza2lwIGl0LgorCQkgKi8KKwkJaWYgKHNpdGRldi0+b3V0 W291dF9pZHhdLnBoYXNlX2FybWVkKQorCQkJc2l0ZGV2LT5vdXRbb3V0X2lkeF0ucGhhc2Vfc3Rh bGUgPSB0cnVlOworCQlzaXRkZXYtPm91dFtvdXRfaWR4XS5mbHVzaF9wZW5kaW5nID0gdHJ1ZTsK IAkJcmV0dXJuIHJjOworCX0KIAogCS8qCiAJICogU3RlcCA1OiBmbHVzaCB0aGUgUExMJ3Mgb3V0 cHV0IHBoYXNlIHNvIHRoZSBuZXcgRElWTyBzdGFydHMKQEAgLTIzMDgsMTkgKzI3ODAsMzkgQEAg aW50IHNpdDk1MzF4X291dHB1dF9mcmVxX3NldChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYs IHU4IG91dF9pZHgsCiAJICogZGl2aWRlciBvbiBpdHMgb2xkIHBoYXNlLCB3aGljaCBpcyBhIHJl YWxpZ25tZW50IHRoYXQgZGlkIG5vdAogCSAqIGhhcHBlbiByYXRoZXIgdGhhbiBhIHJhdGUgdGhh dCBkaWQgbm90IGNoYW5nZSAtLSBhbmQgcmVwb3J0aW5nIGEKIAkgKiBmYWlsdXJlIHdvdWxkIGJl IGRvdWJseSB3cm9uZywgYmVjYXVzZSB0aGUgY29yZSBhc2tzIGZvciB0aGUKLQkgKiBjdXJyZW50 IHJhdGUgZmlyc3QgYW5kIHdvdWxkIGRyb3AgYW4gaWRlbnRpY2FsIHJldHJ5LgorCSAqIGN1cnJl bnQgcmF0ZSBmaXJzdCBhbmQgd291bGQgZHJvcCBhbiBpZGVudGljYWwgcmV0cnkuICBBIHJlLXRp bWVkCisJICogZGVsYXkgaXMgdGhlbiBjb21taXR0ZWQgYnV0IG5vdCBhcHBsaWVkIGVpdGhlcjog dGhlIGNhY2hlIHRha2VzCisJICogdGhlIGNvbW1pdHRlZCB2YWx1ZSBhbmQgdGhlIGZsdXNoIGlz IHJlY29yZGVkIGFzIG93ZWQsIHNvIHRoZQorCSAqIG5leHQgcGhhc2UgcmVxdWVzdCByZWFsaWdu cyB0aGUgb3V0cHV0LiAgTWFya2luZyB0aGUgZGVsYXkgc3RhbGUKKwkgKiBpbnN0ZWFkIHdvdWxk IGhhdmUgdGhlIGdldHRlciBwdWJsaXNoIHRoZSBjb21taXR0ZWQgdmFsdWUsIHRoZQorCSAqIGNv cmUgd291bGQgdGhlbiBkcm9wIGEgcmV0cnkgYXMgYSByZXF1ZXN0IGZvciB0aGUgdmFsdWUgYWxy ZWFkeQorCSAqIHJlcG9ydGVkLCBhbmQgdGhlIHJlYWxpZ25tZW50IHdvdWxkIG5ldmVyIHJ1bi4K IAkgKi8KIAlyYyA9IHNpdDk1MzF4X291dHB1dF9waGFzZV9mbHVzaChzaXRkZXYsIHBsbF9pZHgp OwogCWlmIChyYykgewogCQlkZXZfd2FybihzaXRkZXYtPmRldiwKIAkJCSAib3V0JXU6IHJhdGUg Y2hhbmdlZCBidXQgdGhlIGRpdmlkZXIgcGhhc2Ugd2FzIG5vdCByZWFsaWduZWQgKCVkKVxuIiwK IAkJCSBvdXRfaWR4LCByYyk7CisJCXNpdGRldi0+b3V0W291dF9pZHhdLmZsdXNoX3BlbmRpbmcg PSB0cnVlOworCQlpZiAocmV0aW1lKSB7CisJCQlzaXRkZXYtPm91dFtvdXRfaWR4XS5waGFzZV9h ZGogPSBwaGFzZV9hZGo7CisJCQlzaXRkZXYtPm91dFtvdXRfaWR4XS5waGFzZV9hcm1lZCA9IHBo YXNlX2FkaiAhPSAwOworCQkJc2l0ZGV2LT5vdXRbb3V0X2lkeF0ucGhhc2Vfc3RhbGUgPSBmYWxz ZTsKKwkJfQogCQlyYyA9IDA7CisJfSBlbHNlIHsKKwkJLyogV2hhdGV2ZXIgZmx1c2ggd2FzIG93 ZWQgZnJvbSBiZWZvcmUgaGFzIG5vdyBydW4uICovCisJCXNpdGRldi0+b3V0W291dF9pZHhdLmZs dXNoX3BlbmRpbmcgPSBmYWxzZTsKKwkJaWYgKHJldGltZSkgeworCQkJc2l0ZGV2LT5vdXRbb3V0 X2lkeF0ucGhhc2VfYWRqID0gcGhhc2VfYWRqOworCQkJc2l0ZGV2LT5vdXRbb3V0X2lkeF0ucGhh c2VfYXJtZWQgPSBwaGFzZV9hZGogIT0gMDsKKwkJCXNpdGRldi0+b3V0W291dF9pZHhdLnBoYXNl X3N0YWxlID0gZmFsc2U7CisJCX0KIAl9CiAKIAlzaXRkZXYtPm91dFtvdXRfaWR4XS5mcmVxID0g ZGl2NjRfdTY0KGZ2Y28sIGRpdm8pOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiAv KgpAQCAtMjM3NCwyNyArMjg2NiwxNDAgQEAgaW50IHNpdDk1MzF4X291dHB1dF9mcmVxX2dldChz dHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IG91dF9pZHgsCiAJcmV0dXJuIDA7CiB9CiAK LS8qCi0gKiBQaGFzZSBhZGp1c3QgKFBSR19SU1RfREVMQVkgcmVnaXN0ZXItYmFzZWQpLgotICoK LSAqIFRoZSBjaGlwIGV4cG9zZXMgYSBwZXItb3V0cHV0IDM0LWJpdCBjb2Fyc2UgZGVsYXkgbWVh c3VyZWQgaW4gVkNPCi0gKiBjbG9jayBwZXJpb2RzIHBsdXMgYSAzLWJpdCBmaW5lIGRlbGF5IGlu IGZpeGVkIDMwIHBzIHN0ZXBzLiAgVGhlCi0gKiBmaXZlIGJ5dGVzIFBST0c2Li5QUk9HMiBob2xk IHRoZSBmaWVsZCBhY3Jvc3MgcmVnaXN0ZXJzOgotICogICBiYXNlICsgMCAgUFJPRzYgIFs3OjVd IE9QU1RHX1ZDQVNDX0JVTVAgKHByZXNlcnZlZCB2aWEgUk1XKQotICogICAgICAgICAgICAgICAg ICAgIFs0OjJdIFBSR19SU1RfRklORV9ERUxBWQotICogICAgICAgICAgICAgICAgICAgIFsxOjBd IFBSR19SU1RfREVMQVlbMzM6MzJdCi0gKiAgIGJhc2UgKyAxICBQUk9HNSAgUFJHX1JTVF9ERUxB WVszMToyNF0KLSAqICAgYmFzZSArIDIgIFBST0c0ICBQUkdfUlNUX0RFTEFZWzIzOjE2XQotICog ICBiYXNlICsgMyAgUFJPRzMgIFBSR19SU1RfREVMQVlbMTU6OF0KLSAqICAgYmFzZSArIDQgIFBS T0cyICBQUkdfUlNUX0RFTEFZWzc6MF0KLSAqCi0gKiBPdXRwdXRzIDAtNSBsaXZlIG9uIFBhZ2Ug Mywgb3V0cHV0cyA2LTExIG9uIFBhZ2UgNCwgd2l0aCBlYWNoCi0gKiBvdXRwdXQncyBibG9jayBh dCBiYXNlID0gMHgxNSArIDE2ICogKG91dF9pZHggJSA2KS4KLSAqCi0gKiBUaGUgY2hpcCBvbmx5 IHN1cHBvcnRzIHVuc2lnbmVkIHBvc2l0aXZlIGRlbGF5LiAgQSBuZWdhdGl2ZSBwaGFzZQotICog YWRqdXN0bWVudCAoYWR2YW5jZSkgaXMgd3JhcHBlZCB0byAoVF9vdXQgLSB8cGhhc2V8KSBtb2R1 bG8gb25lCi0gKiBvdXRwdXQgcGVyaW9kLCB3aGljaCBpcyBpZGVudGljYWwgZm9yIGEgcGVyaW9k aWMgc2lnbmFsLgotICovCitpbnQgc2l0OTUzMXhfb3V0cHV0X3BoYXNlX2FkanVzdF9zZXQoc3Ry dWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LAorCQkJCSAgICAgdTggb3V0X2lkeCwgczMyIHBoYXNl X3BzKQoreworCXU4IG9sZF9ieXRlc1tTSVQ5NTMxWF9PVVRfUFJHX0JZVEVTXSwgbmV3X2J5dGVz W1NJVDk1MzFYX09VVF9QUkdfQllURVNdOworCWNvbnN0IHN0cnVjdCBzaXQ5NTMxeF9jaGlwX2lu Zm8gKmluZm8gPSBzaXRkZXYtPmluZm87CisJdTY0IGZ2Y28sIGRpdm8sIGNvYXJzZTsKKwl1OCBw bGxfaWR4LCBmaW5lOworCXMzMiBwaGFzZV9hZGo7CisJaW50IHJjLCByZXQ7CisKKwlsb2NrZGVw X2Fzc2VydF9oZWxkKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisKKwlpZiAob3V0X2lkeCA+PSBp bmZvLT5udW1fb3V0cHV0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbGxfaWR4ID0gc2l0ZGV2 LT5vdXRbb3V0X2lkeF0ucGxsX2lkeDsKKwlpZiAocGxsX2lkeCA+PSBTSVQ5NTMxWF9OVU1fUExM UykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyYyA9IHNpdDk1MzF4X2dldF9mdmNvKHNpdGRldiwg cGxsX2lkeCwgJmZ2Y28pOworCWlmIChyYykKKwkJcmV0dXJuIHJjID09IC1FTk9EQVRBID8gLUVO T0RFViA6IHJjOworCisJLyoKKwkgKiBUaGUgb3V0cHV0IHBlcmlvZCBjb21lcyBmcm9tIHRoZSBk aXZpZGVyIHRoZSBvdXRwdXQgcnVucyBvbiwgbm90CisJICogZnJvbSB0aGUgY2FjaGVkIHJhdGU6 IHRoYXQgaXMgd2hvbGUgaGVydHosIHNvIGEgcHJvZmlsZSdzIG91dHB1dCBhdAorCSAqIGEgZnJh Y3Rpb25hbCByYXRlIHdvdWxkIGZvbGQgYW4gYWR2YW5jZSBhZ2FpbnN0IHRoZSB3cm9uZyBwZXJp b2QuCisJICovCisJcmMgPSBzaXQ5NTMxeF9vdXRwdXRfZGl2b19yZWFkKHNpdGRldiwgb3V0X2lk eCwgJmRpdm8pOworCWlmIChyYykKKwkJcmV0dXJuIHJjID09IC1FTk9EQVRBID8gLUVOT0RFViA6 IHJjOworCisJcmMgPSBzaXQ5NTMxeF9vdXRwdXRfcGhhc2VfZW5jb2RlKGZ2Y28sIGRpdm8sIHBo YXNlX3BzLCAmY29hcnNlLCAmZmluZSwKKwkJCQkJICAmcGhhc2VfYWRqKTsKKwlpZiAocmMpCisJ CXJldHVybiByYzsKKworCXJjID0gc2l0OTUzMXhfb3V0cHV0X3BoYXNlX2J5dGVzX3JlYWQoc2l0 ZGV2LCBvdXRfaWR4LCBvbGRfYnl0ZXMpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXNpdDk1 MzF4X291dHB1dF9waGFzZV9ieXRlc19idWlsZChvbGRfYnl0ZXMsIGNvYXJzZSwgZmluZSwgbmV3 X2J5dGVzKTsKKworCS8qCisJICogVGhlIHBpbiBhZHZlcnRpc2VzIDEgcHMgZ3JhbnVsYXJpdHkg YnV0IGNhY2hlcyB0aGUgcXVhbnRpemVkCisJICogdmFsdWUsIHNvIGEgcmVwZWF0ZWQgb2ZmLWdy aWQgcmVxdWVzdCByZWFjaGVzIGhlcmUgd2l0aCB0aGUKKwkgKiByZWdpc3RlcnMgYWxyZWFkeSBo b2xkaW5nIGl0LiAgUmV3cml0aW5nIHRoZW0gd291bGQgc3RpbGwgcmVzdGFydAorCSAqIHRoZSBk aXZpZGVyIHBoYXNlIG9mIGV2ZXJ5IG91dHB1dCBvbiB0aGUgUExMOyBza2lwIGl0IHVubGVzcyBh bgorCSAqIGVhcmxpZXIgZmFpbHVyZSBsZWZ0IHRoZSBkZWxheSB1bmNvbmZpcm1lZC4gIEEgZGVs YXkgd2hvc2UgZmx1c2gKKwkgKiBmYWlsZWQgaXMgY29tbWl0dGVkIGFuZCBvbmx5IG93ZXMgdGhh dCBmbHVzaCwgd2hpY2ggbWF0Y2hpbmcKKwkgKiBieXRlcyB3b3VsZCBvdGhlcndpc2Ugc2tpcCBh cyB3ZWxsLgorCSAqLworCWlmICghbWVtY21wKG9sZF9ieXRlcywgbmV3X2J5dGVzLCBzaXplb2Yo bmV3X2J5dGVzKSkgJiYKKwkgICAgIXNpdGRldi0+b3V0W291dF9pZHhdLnBoYXNlX3N0YWxlKSB7 CisJCWlmICghc2l0ZGV2LT5vdXRbb3V0X2lkeF0uZmx1c2hfcGVuZGluZykKKwkJCWdvdG8gY2Fj aGU7CisJCWdvdG8gZmx1c2g7CisJfQorCisJLyoKKwkgKiBUaGUgUFJHX1JTVF9ERUxBWSBieXRl cyBsaXZlIGluIHRoZSBvdXRwdXQgc3lzdGVtLCBzbyB0aGUgd3JpdGVzCisJICogb25seSB0YWtl IGVmZmVjdCB3aGVuIG1hZGUgaW5zaWRlIHRoZSBQUkdfQ01EIHByb2dyYW1taW5nIHN0YXRlIGFu ZAorCSAqIGNvbW1pdHRlZCB0byB0aGUgTlZNIHNoYWRvdywgZXhhY3RseSBsaWtlIHNpdDk1MzF4 X291dHB1dF9mcmVxX3NldCgpLgorCSAqLworCXJjID0gc2l0OTUzMXhfcHJnX2VudGVyKHNpdGRl dik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHNpdDk1MzF4X291dHB1dF9waGFz ZV9ieXRlc193cml0ZShzaXRkZXYsIG91dF9pZHgsIG5ld19ieXRlcywKKwkJCQkJICAgICAgIG9s ZF9ieXRlcyk7CisKKwkvKgorCSAqIEFsd2F5cyBsZWF2ZSB0aGUgUFJHX0NNRCBzdGF0ZSB2aWEg cHJnX2NvbW1pdCgpLCBldmVuIG9uIGEKKwkgKiBtaWQtc2VxdWVuY2Ugd3JpdGUgZmFpbHVyZSwg c28gdGhlIG91dHB1dCBsb29wcyBhcmUgcmUtbG9ja2VkIHJhdGhlcgorCSAqIHRoYW4gc3RyYW5k ZWQgdW5sb2NrZWQ7IGtlZXAgdGhlIGZpcnN0IGVycm9yLgorCSAqLworCXJldCA9IHNpdDk1MzF4 X3ByZ19jb21taXQoc2l0ZGV2KTsKKwlpZiAocmV0ICYmICFyYykKKwkJcmMgPSByZXQ7CisJaWYg KHJjKSB7CisJCS8qCisJCSAqIFRoZSBkZWxheSByZWdpc3RlcnMgd2VyZSB3cml0dGVuIGFuZCB0 aGUgcm9sbGJhY2sgbWF5IG5vdAorCQkgKiBoYXZlIHB1dCBhbGwgb2YgdGhlbSBiYWNrLCBzbyB3 aGF0IHRoZSBvdXRwdXQgcmVhbGl6ZXMgaXMKKwkJICogbm8gbG9uZ2VyIHdoYXQgdGhlIGNhY2hl IHNheXMuICBNYXJrIGl0IHNvIHRoZSBnZXR0ZXIgcmVhZHMKKwkJICogdGhlIHJlZ2lzdGVycyBp bnN0ZWFkIG9mIHJlcG9ydGluZyB0aGUgdmFsdWUgdGhhdCB3YXMKKwkJICogY2FjaGVkIGJlZm9y ZSB0aGlzIGNhbGwuICBObyBmbHVzaCByYW4gZWl0aGVyIHdheS4KKwkJICovCisJCXNpdGRldi0+ b3V0W291dF9pZHhdLnBoYXNlX3N0YWxlID0gdHJ1ZTsKKwkJc2l0ZGV2LT5vdXRbb3V0X2lkeF0u Zmx1c2hfcGVuZGluZyA9IHRydWU7CisJCXJldHVybiByYzsKKwl9CisKK2ZsdXNoOgorCS8qCisJ ICogUmVzdGFydCB0aGUgb3V0cHV0IGRpdmlkZXIgcGhhc2Ugc28gdGhlIGZyZXNobHkgcHJvZ3Jh bW1lZCBkZWxheSBpcworCSAqIGFwcGxpZWQgYWdhaW5zdCBhIGtub3duIGVkZ2UgaW5zdGVhZCBv ZiB0aGUgZGl2aWRlcidzIGFyYml0cmFyeQorCSAqIHJ1bm5pbmcgcGhhc2UuCisJICovCisJcmMg PSBzaXQ5NTMxeF9vdXRwdXRfcGhhc2VfZmx1c2goc2l0ZGV2LCBwbGxfaWR4KTsKKwlpZiAocmMp IHsKKwkJLyoKKwkJICogVGhlIGRlbGF5IGlzIGNvbW1pdHRlZCBidXQgdGhlIG91dHB1dCBrZWVw cyB0aGUgcGhhc2UgaXQKKwkJICogaGFkLCBzbyB0aGUgY2FjaGUgaXMgbGVmdCBhcyBpdCBpczog aXQgc3RpbGwgc2F5cyB3aGF0IHRoZQorCQkgKiBvdXRwdXQgcmVhbGl6ZXMuICBSZWNvcmQgdGhl IGZsdXNoIHRoYXQgaXMgb3dlZCBpbnN0ZWFkLgorCQkgKiBNYXJraW5nIHRoZSBjYWNoZSBzdGFs ZSB3b3VsZCBoYXZlIHRoZSBnZXR0ZXIgcHVibGlzaCB0aGUKKwkJICogbmV3IGRlbGF5IG9mZiB0 aGUgcmVnaXN0ZXJzLCB0aGUgY29yZSB3b3VsZCB0aGVuIGRyb3AgYQorCQkgKiByZXRyeSBhcyBh IHJlcXVlc3QgZm9yIHRoZSB2YWx1ZSBhbHJlYWR5IHJlcG9ydGVkLCBhbmQgdGhlCisJCSAqIHJl YWxpZ25tZW50IHdvdWxkIG5ldmVyIHJ1bi4KKwkJICovCisJCXNpdGRldi0+b3V0W291dF9pZHhd LmZsdXNoX3BlbmRpbmcgPSB0cnVlOworCQlyZXR1cm4gcmM7CisJfQorCXNpdGRldi0+b3V0W291 dF9pZHhdLmZsdXNoX3BlbmRpbmcgPSBmYWxzZTsKKwlzaXRkZXYtPm91dFtvdXRfaWR4XS5waGFz ZV9zdGFsZSA9IGZhbHNlOworCitjYWNoZToKKwkvKgorCSAqIENhY2hlIHdoYXQgdGhlIHJlZ2lz dGVycyByZWFsaXplLCBhbmQgb25seSBvbmNlIGV2ZXJ5IHN0ZXAgaGFzCisJICogc3VjY2VlZGVk OiB0aGUgY29yZSBkcm9wcyBhIHJlcGVhdGVkIHJlcXVlc3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSwK KwkgKiBzbyBhIGNhY2hlIHVwZGF0ZWQgYnkgYSBmYWlsZWQgY2FsbCB3b3VsZCBtYWtlIHRoZSBy ZXRyeSBhIG5vLW9wLgorCSAqLworCXNpdGRldi0+b3V0W291dF9pZHhdLnBoYXNlX2FkaiA9IHBo YXNlX2FkajsKKworCS8qCisJICogQXJtIHRoZSByZS10aW1lIGEgcmF0ZSBjaGFuZ2Ugb3dlcyBv bmx5IGZvciBhIGRlbGF5IHRoYXQgaXMKKwkgKiBhY3R1YWxseSBwcm9ncmFtbWVkOiBhbiBhZHZh bmNlIGlzIGhlbGQgYXMgVF9vdXQgLSB8YWR2YW5jZXwsCisJICogd2hpY2ggaGFzIHRvIGJlIHJl LWVuY29kZWQgYWdhaW5zdCB0aGUgbmV3IHBlcmlvZC4gIEEgcmVxdWVzdAorCSAqIHRoYXQgcXVh bnRpemVkIHRvIG5vdGhpbmcgc3RheXMgbm90aGluZyBhdCBhbnkgcmF0ZSwgc2luY2UgdGhlCisJ ICogcXVhbnR1bSBpcyB0aGUgVkNPIGN5Y2xlIGFuZCBub3QgdGhlIG91dHB1dCBwZXJpb2QsIHNv IHRoZXJlIGlzCisJICogbm90aGluZyB0byByZS10aW1lIGZvciBpdC4KKwkgKi8KKwlzaXRkZXYt Pm91dFtvdXRfaWR4XS5waGFzZV9hcm1lZCA9IHBoYXNlX2FkaiAhPSAwOworCisJcmV0dXJuIDA7 Cit9CiAKIC8qCiAgKiBzaXQ5NTMxeF9jbGVhcl9ub3RpZmljYXRpb25zIC0gY2xlYXIgYWxsIG5v dGlmaWNhdGlvbiByZWdpc3RlcnMKQEAgLTI4OTcsNiArMzUwMiw5IEBAIHN0YXRpYyBpbnQgc2l0 OTUzMXhfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldikKIAl9CiAK IAlmb3IgKGkgPSAwOyBpIDwgc2l0ZGV2LT5pbmZvLT5udW1fb3V0cHV0czsgaSsrKSB7CisJCWJv b2wgY2xhbXBlZDsKKwkJczMyIHBoYXNlX3BzOworCiAJCS8qCiAJCSAqIE5vdGhpbmcgcnVucyBj b25jdXJyZW50bHkgYmVmb3JlIHJlZ2lzdHJhdGlvbiwgYnV0IHRoZQogCQkgKiBvdXRwdXQgZmV0 Y2ggd2Fsa3MgcGFnZWQgcmVnaXN0ZXJzIHVuZGVyIHRoZSBzYW1lIGNvbnRyYWN0CkBAIC0yOTEw LDYgKzM1MTgsMzIgQEAgc3RhdGljIGludCBzaXQ5NTMxeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0 IHNpdDk1MzF4X2RldiAqc2l0ZGV2KQogCQkJCSJGYWlsZWQgdG8gZmV0Y2ggb3V0cHV0ICV1IHN0 YXRlOiAlZFxuIiwgaSwgcmMpOwogCQkJcmV0dXJuIHJjOwogCQl9CisKKwkJLyoKKwkJICogVGhl IGRlbGF5IHJlZ2lzdGVycyBhcmUgcGFydCBvZiB0aGUgcHJvZmlsZSB0aGUgY2hpcCBsb2Fkcwor CQkgKiBiZWZvcmUgcHJvYmUsIHNvIGFuIG91dHB1dCBjYW4gYWxyZWFkeSBjYXJyeSBvbmUuICBT ZWVkaW5nCisJCSAqIHRoZSBjYWNoZSBmcm9tIHRoZSBkZXZpY2UgaXMgd2hhdCBsZXRzIGEgcmVx dWVzdCBvZiAwIHBzCisJCSAqIGNsZWFyIGl0OiB0aGUgY29yZSBkcm9wcyBhIHJlcXVlc3QgZXF1 YWwgdG8gd2hhdCB0aGUKKwkJICogZ2V0dGVyIHJlcG9ydHMsIGFuZCBhIGNhY2hlIHRoYXQgc3Rh cnRlZCBhdCB6ZXJvIHdvdWxkCisJCSAqIG1ha2UgY2xlYXJpbmcgYSBwcm9ncmFtbWVkIGRlbGF5 IGltcG9zc2libGUuICBBbiBvdXRwdXQKKwkJICogdGhlIGNvbmZpZ3VyYXRpb24gZG9lcyBub3Qg cm91dGUgaGFzIG5vIEZ2Y28gdG8gZGVjb2RlCisJCSAqIGFnYWluc3QsIHdoaWNoIGlzIG5vdCBh biBlcnJvciBoZXJlLiAgQSBkZWxheSBiZXlvbmQgdGhlCisJCSAqIHJhbmdlIGlzIHJlcG9ydGVk IGFzIGl0cyBlbmQgYnV0IG5vdCBhcm1lZDogcmUtdGltaW5nIGl0CisJCSAqIG9uIGEgcmF0ZSBj aGFuZ2Ugd291bGQgd3JpdGUgdGhhdCBlbmQgb3ZlciB0aGUgcHJvZmlsZSdzCisJCSAqIGRlbGF5 LgorCQkgKi8KKwkJbXV0ZXhfbG9jaygmc2l0ZGV2LT5tdWx0aW9wX2xvY2spOworCQlyYyA9IHNp dDk1MzF4X291dHB1dF9waGFzZV9yZWFkKHNpdGRldiwgaSwgJnBoYXNlX3BzLCAmY2xhbXBlZCk7 CisJCW11dGV4X3VubG9jaygmc2l0ZGV2LT5tdWx0aW9wX2xvY2spOworCQlpZiAoIXJjKSB7CisJ CQlzaXRkZXYtPm91dFtpXS5waGFzZV9hZGogPSBwaGFzZV9wczsKKwkJCXNpdGRldi0+b3V0W2ld LnBoYXNlX2FybWVkID0gIWNsYW1wZWQgJiYgcGhhc2VfcHM7CisJCX0gZWxzZSBpZiAocmMgIT0g LUVOT0RBVEEpIHsKKwkJCWRldl9lcnIoc2l0ZGV2LT5kZXYsCisJCQkJIkZhaWxlZCB0byByZWFk IG91dHB1dCAldSBkZWxheTogJWRcbiIsCisJCQkJaSwgcmMpOworCQkJcmV0dXJuIHJjOworCQl9 CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9jb3JlLmggYi9k cml2ZXJzL2RwbGwvc2l0OTUzMXgvY29yZS5oCmluZGV4IDE0NjRiYTBiNjYxNC4uMGM0MmJmYzA1 YjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvY29yZS5oCisrKyBiL2RyaXZl cnMvZHBsbC9zaXQ5NTMxeC9jb3JlLmgKQEAgLTI3LDYgKzI3LDggQEAKICNkZWZpbmUgU0lUOTUz MVhfTUFYX0lOUFVUUwkJOAogI2RlZmluZSBTSVQ5NTMxWF9OVU1fSU5QVVRfUEFJUlMJKFNJVDk1 MzFYX01BWF9JTlBVVFMgLyAyKQogI2RlZmluZSBTSVQ5NTMxWF9NQVhfT1VUUFVUUwkJMTIKKy8q IE91dHB1dCBwaGFzZS1hZGp1c3QgcmFuZ2UgYWR2ZXJ0aXNlZCB0byB0aGUgY29yZSwgKy8tMSBt cyBpbiBwcyAqLworI2RlZmluZSBTSVQ5NTMxWF9PVVRfUEhBU0VfQURKX01BWF9QUwkxMDAwMDAw MDAwCiAvKgogICogSU5UU1lOQyAodGhlIGludGVyLVBMTCBzeW5jIG5ldCkgaXMgbW9kZWxlZCBh cyB0d28gcGlucy4gIFRoZQogICogZGVzdGluYXRpb24gUExMIHRoYXQgbG9ja3MgdG8gSU5UU1lO QyBzZWVzIGFuIGlucHV0IHBpbgpAQCAtMTA0LDYgKzEwNiwxOCBAQCBzdHJ1Y3Qgc2l0OTUzMXhf cmVmIHsKICAqIEByb3V0ZWQ6CQlvdXRwdXQgaXMgbWFwcGVkIHRvIEBwbGxfaWR4IGJ5IHRoZSBp bml0aWFsCiAgKgkJCWNvbmZpZ3VyYXRpb247IGFuIHVucm91dGVkIG91dHB1dCBoYXMgbm8gRFBM TCBwaW4KICAqIEBwbGxfaWR4OgkJUExMIGRyaXZpbmcgdGhpcyBvdXRwdXQgKDAtMykKKyAqIEBw aGFzZV9zdGFsZToJdGhlIHByb2dyYW1tZWQgZGVsYXkgbWF5IGRpZmZlciBmcm9tIEBwaGFzZV9h ZGoKKyAqIEBmbHVzaF9wZW5kaW5nOgl0aGUgcHJvZ3JhbW1lZCBkZWxheSBpcyBjb21taXR0ZWQg YnV0IHRoZSBmbHVzaAorICoJCQl0aGF0IGFwcGxpZXMgaXQgZmFpbGVkLCBzbyB0aGUgb3V0cHV0 IHN0aWxsIHJlYWxpemVzCisgKgkJCUBwaGFzZV9hZGo7IHRoZSBuZXh0IHJlcXVlc3QgZm9yIHRo YXQgZGVsYXkgcnVucyB0aGUKKyAqCQkJZmx1c2ggYWx0aG91Z2ggdGhlIHJlZ2lzdGVycyBhbHJl YWR5IGhvbGQgaXQKKyAqIEBwaGFzZV9hcm1lZDoJYSBub24temVybyBkZWxheSBpcyBwcm9ncmFt bWVkLCBzbyBhIHJhdGUgY2hhbmdlCisgKgkJCWhhcyB0byByZS10aW1lIGl0OyBhIHByb2ZpbGUg ZGVsYXkgYmV5b25kIHRoZQorICoJCQlhZHZlcnRpc2VkIHJhbmdlIGlzIG5vdCwgc2luY2Ugd2hh dCB0aGUgY2FjaGUgaG9sZHMKKyAqCQkJZm9yIGl0IGlzIHRoZSBlbmQgb2YgdGhlIHJhbmdlLCBu b3QgdGhlIGRlbGF5CisgKiBAcGhhc2VfYWRqOgkJcGhhc2UgYWRqdXN0IHRoZSBkZWxheSByZWdp c3RlcnMgYWN0dWFsbHkgcmVhbGl6ZSwKKyAqCQkJaS5lLiB0aGUgbGFzdCByZXF1ZXN0IHF1YW50 aXplZCB0byB3aG9sZSBWQ08gY3ljbGVzCisgKgkJCXBsdXMgMzAgcHMgZmluZSBzdGVwcywgaW4g dGhlIHJlcXVlc3QncyBzaWduCiAgKi8KIHN0cnVjdCBzaXQ5NTMxeF9vdXQgewogCXU2NAkJZnJl cTsKQEAgLTExMiw2ICsxMjYsMTAgQEAgc3RydWN0IHNpdDk1MzF4X291dCB7CiAJYm9vbAkJc3Rh dGVfc3RhbGU7CiAJYm9vbAkJcm91dGVkOwogCXU4CQlwbGxfaWR4OworCXMzMgkJcGhhc2VfYWRq OworCWJvb2wJCXBoYXNlX2FybWVkOworCWJvb2wJCXBoYXNlX3N0YWxlOworCWJvb2wJCWZsdXNo X3BlbmRpbmc7CiB9OwogCiAvKgpAQCAtMjc0LDYgKzI5MiwxMCBAQCBpbnQgc2l0OTUzMXhfb3V0 cHV0X2ZyZXFfZ2V0KHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggb3V0X2lkeCwKIAkJ CSAgICAgdTY0ICpmcmVxdWVuY3kpOwogCiAvKiAtLS0tIE91dHB1dCBwaGFzZSBhZGp1c3QgKFBS R19SU1RfREVMQVkgcmVnaXN0ZXItYmFzZWQpIC0tLS0gKi8KK2ludCBzaXQ5NTMxeF9vdXRwdXRf cGhhc2VfcmVhZChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IG91dF9pZHgsCisJCQkg ICAgICAgczMyICpwaGFzZV9wcywgYm9vbCAqY2xhbXBlZCk7CitpbnQgc2l0OTUzMXhfb3V0cHV0 X3BoYXNlX2FkanVzdF9zZXQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LAorCQkJCSAgICAg dTggb3V0X2lkeCwgczMyIHBoYXNlX3BzKTsKIAogLyogLS0tLSBJTlRTWU5DIChpbnRlci1QTEwg c3luY2hyb25pemF0aW9uKSAtLS0tICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC9zaXQ5 NTMxeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvZHBsbC5jCmluZGV4IGY2ZTc2MzE4 YTU2Ny4uYjM3MTkzNzA5MDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvZHBs bC5jCisrKyBiL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9kcGxsLmMKQEAgLTk1OSwxMiArOTU5LDky IEBAIHNpdDk1MzF4X2RwbGxfb3V0cHV0X3Bpbl9zdGF0ZV9vbl9kcGxsX3NldChjb25zdCBzdHJ1 Y3QgZHBsbF9waW4gKnBpbiwKIAlyZXR1cm4gcmM7CiB9CiAKKy8qCisgKiBzaXQ5NTMxeF9kcGxs X291dHB1dF9waW5fcGhhc2VfYWRqdXN0X2dldCAtIHJlYWQgb3V0cHV0IHBoYXNlIGFkanVzdG1l bnQKKyAqCisgKiBSZXR1cm5zIHdoYXQgdGhlIGRlbGF5IHJlZ2lzdGVycyBob2xkLCBpLmUuIHRo ZSB2YWx1ZQorICogc2l0OTUzMXhfb3V0cHV0X3BoYXNlX2FkanVzdF9zZXQoKSBwcm9ncmFtbWVk IGFmdGVyIHF1YW50aXphdGlvbiwgcmVhZAorICogZnJvbSB0aGUgY2FjaGUgdW5sZXNzIGEgZmFp bGVkIHJlcXVlc3QgbGVmdCBpdCB1bmNvbmZpcm1lZC4KKyAqLworc3RhdGljIGludAorc2l0OTUz MXhfZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGlu ICpwaW4sCisJCQkJCSAgdm9pZCAqcGluX3ByaXYsCisJCQkJCSAgY29uc3Qgc3RydWN0IGRwbGxf ZGV2aWNlICpkcGxsLAorCQkJCQkgIHZvaWQgKmRwbGxfcHJpdiwgczMyICpwaGFzZV9hZGp1c3Qs CisJCQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQoreworCXN0cnVjdCBzaXQ5 NTMxeF9kcGxsX3BpbiAqZHBpbiA9IHBpbl9wcml2OworCXN0cnVjdCBzaXQ5NTMxeF9kcGxsICpz aXRkcGxsID0gZHBsbF9wcml2OworCXN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiA9IHNpdGRw bGwtPmRldjsKKwlpbnQgcmM7CisKKwltdXRleF9sb2NrKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7 CisJLyoKKwkgKiBBIHJlcXVlc3Qgd2hvc2Ugd3JpdGVzIHJlYWNoZWQgdGhlIGRldmljZSBidXQg d2hvc2UgY29tbWl0IG9yCisJICogcGhhc2UgZmx1c2ggZmFpbGVkIGxlZnQgdGhlIGNhY2hlIGRl c2NyaWJpbmcgdGhlIGRlbGF5IGJlZm9yZSBpdC4KKwkgKiBUaGVyZSBpcyBubyBwb2xsIG9mIHRo ZSBkZWxheSByZWdpc3RlcnMgdG8gY29ycmVjdCB0aGF0LCBzbyByZWFkCisJICogdGhlbSBoZXJl IHJhdGhlciB0aGFuIHJlcG9ydCBhIHZhbHVlIHRoZSBvdXRwdXQgaXMgbm90IHVzaW5nLgorCSAq LworCWlmIChzaXRkZXYtPm91dFtkcGluLT5pZF0ucGhhc2Vfc3RhbGUpIHsKKwkJYm9vbCBjbGFt cGVkOworCQlzMzIgcGhhc2VfcHM7CisKKwkJcmMgPSBzaXQ5NTMxeF9vdXRwdXRfcGhhc2VfcmVh ZChzaXRkZXYsIGRwaW4tPmlkLCAmcGhhc2VfcHMsCisJCQkJCQkmY2xhbXBlZCk7CisJCWlmIChy YykgeworCQkJbXV0ZXhfdW5sb2NrKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisJCQlOTF9TRVRf RVJSX01TRyhleHRhY2ssCisJCQkJICAgICAgICJPdXRwdXQgZGVsYXkgY291bGQgbm90IGJlIHJl YWQgYmFjayIpOworCQkJcmV0dXJuIHJjOworCQl9CisJCXNpdGRldi0+b3V0W2RwaW4tPmlkXS5w aGFzZV9hZGogPSBwaGFzZV9wczsKKwkJc2l0ZGV2LT5vdXRbZHBpbi0+aWRdLnBoYXNlX2FybWVk ID0gIWNsYW1wZWQgJiYgcGhhc2VfcHM7CisJCXNpdGRldi0+b3V0W2RwaW4tPmlkXS5waGFzZV9z dGFsZSA9IGZhbHNlOworCX0KKwkqcGhhc2VfYWRqdXN0ID0gc2l0OTUzMXhfb3V0X3N0YXRlX2dl dChzaXRkZXYsIGRwaW4tPmlkKS0+cGhhc2VfYWRqOworCW11dGV4X3VubG9jaygmc2l0ZGV2LT5t dWx0aW9wX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzaXQ5NTMxeF9kcGxsX291 dHB1dF9waW5fcGhhc2VfYWRqdXN0X3NldCAtIHNldCBvdXRwdXQgcGhhc2UgYWRqdXN0bWVudAor ICoKKyAqIFByb2dyYW1zIHRoZSBwZXItb3V0cHV0IFBSR19SU1RfREVMQVkgcmVnaXN0ZXJzIGZv ciBkZXRlcm1pbmlzdGljCisgKiBwaGFzZSBvZmZzZXQ7IHNlZSBzaXQ5NTMxeF9vdXRwdXRfcGhh c2VfYWRqdXN0X3NldCgpIGluIGNvcmUuYy4KKyAqLworc3RhdGljIGludAorc2l0OTUzMXhfZHBs bF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4s CisJCQkJCSAgdm9pZCAqcGluX3ByaXYsCisJCQkJCSAgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNl ICpkcGxsLAorCQkJCQkgIHZvaWQgKmRwbGxfcHJpdiwgczMyIHBoYXNlX2FkanVzdCwKKwkJCQkJ ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCit7CisJc3RydWN0IHNpdDk1MzF4X2Rw bGxfcGluICpkcGluID0gcGluX3ByaXY7CisJc3RydWN0IHNpdDk1MzF4X2RwbGwgKnNpdGRwbGwg PSBkcGxsX3ByaXY7CisJc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2ID0gc2l0ZHBsbC0+ZGV2 OworCWludCByYzsKKworCW11dGV4X2xvY2soJnNpdGRldi0+bXVsdGlvcF9sb2NrKTsKKwlyYyA9 IHNpdDk1MzF4X291dHB1dF9waGFzZV9hZGp1c3Rfc2V0KHNpdGRldiwgZHBpbi0+aWQsIHBoYXNl X2FkanVzdCk7CisJbXV0ZXhfdW5sb2NrKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisKKwlpZiAo cmMpIHsKKwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAiUGhhc2UgYWRqdXN0IGZhaWxlZCIpOwor CQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHBsbF9waW5fb3BzIHNpdDk1MzF4X2RwbGxfb3V0cHV0X3Bpbl9vcHMgPSB7CiAJLmRpcmVjdGlv bl9nZXQJCT0gc2l0OTUzMXhfZHBsbF9vdXRwdXRfcGluX2RpcmVjdGlvbl9nZXQsCiAJLmZyZXF1 ZW5jeV9nZXQJCT0gc2l0OTUzMXhfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9nZXQsCiAJLmZy ZXF1ZW5jeV9zZXQJCT0gc2l0OTUzMXhfZHBsbF9vdXRwdXRfcGluX2ZyZXF1ZW5jeV9zZXQsCiAJ LnN0YXRlX29uX2RwbGxfZ2V0CT0gc2l0OTUzMXhfZHBsbF9vdXRwdXRfcGluX3N0YXRlX29uX2Rw bGxfZ2V0LAogCS5zdGF0ZV9vbl9kcGxsX3NldAk9IHNpdDk1MzF4X2RwbGxfb3V0cHV0X3Bpbl9z dGF0ZV9vbl9kcGxsX3NldCwKKwkucGhhc2VfYWRqdXN0X2dldAk9IHNpdDk1MzF4X2RwbGxfb3V0 cHV0X3Bpbl9waGFzZV9hZGp1c3RfZ2V0LAorCS5waGFzZV9hZGp1c3Rfc2V0CT0gc2l0OTUzMXhf ZHBsbF9vdXRwdXRfcGluX3BoYXNlX2FkanVzdF9zZXQsCiB9OwogCiBjb25zdCBzdHJ1Y3QgZHBs bF9waW5fb3BzICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9wcm9wLmMgYi9k cml2ZXJzL2RwbGwvc2l0OTUzMXgvcHJvcC5jCmluZGV4IDRjYTkyZjRmMTdkMS4uZGM4YWMxOTUy NjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvcHJvcC5jCisrKyBiL2RyaXZl cnMvZHBsbC9zaXQ5NTMxeC9wcm9wLmMKQEAgLTIyNyw2ICsyMjcsMjggQEAgc2l0OTUzMXhfcGlu X3Byb3BzX2dldChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsCiAJCXByb3BzLT5kcGxsX3By b3BzLmNhcGFiaWxpdGllcyA9CiAJCQlEUExMX1BJTl9DQVBBQklMSVRJRVNfU1RBVEVfQ0FOX0NI QU5HRTsKIAkJY3Vycl9mcmVxID0gc2l0ZGV2LT5vdXRbaW5kZXhdLmZyZXE7CisKKwkJLyoKKwkJ ICogQWxsb3cgcGhhc2UtYWRqdXN0IG92ZXIgYSArLy0xIG1zIHdpbmRvdy4gIFRoZSBzdWJzeXN0 ZW0KKwkJICogcmVqZWN0cyBwaW5fc2V0KHBoYXNlLWFkanVzdCwgWCkgd2hlbiBYIGZhbGxzIG91 dHNpZGUKKwkJICogW21pbiwgbWF4XSwgc28gbGVhdmluZyB0aGVzZSBhdCAwIHNpbGVudGx5IGJs b2NrcyBldmVyeQorCQkgKiBuZXRsaW5rIGNhbGwuICBUaGUgZGV2aWNlIGhvbGRzIGEgZGVsYXkg YW55d2hlcmUgd2l0aGluCisJCSAqIHRoZSBvdXRwdXQgcGVyaW9kLCBzbyB0aGUgYm91bmQgaXMg dGhlIHMzMiBwaWNvc2Vjb25kCisJCSAqIGF0dHJpYnV0ZSwgbm90IHRoZSBoYXJkd2FyZTsgMSBt cyBpcyBhIHJvdW5kIGZpZ3VyZSBiZWxvdworCQkgKiBpdCB0aGF0IGNvc3RzIG5vdGhpbmcuICBP bmx5IG91dHB1dHMgZ2V0IGEgcmFuZ2U6IGlucHV0CisJCSAqIHBpbnMgaGF2ZSBubyAucGhhc2Vf YWRqdXN0X3NldCwgYW5kIGFkdmVydGlzaW5nIG9uZSB0aGVyZQorCQkgKiB3b3VsZCBwcm9taXNl IHVzZXJzcGFjZSBzb21ldGhpbmcgZXZlcnkgc2V0IHdvdWxkIHJlZnVzZS4KKwkJICovCisJCXBy b3BzLT5kcGxsX3Byb3BzLnBoYXNlX3JhbmdlLm1pbiA9CisJCQktU0lUOTUzMVhfT1VUX1BIQVNF X0FESl9NQVhfUFM7CisJCXByb3BzLT5kcGxsX3Byb3BzLnBoYXNlX3JhbmdlLm1heCA9CisJCQlT SVQ5NTMxWF9PVVRfUEhBU0VfQURKX01BWF9QUzsKKwkJLyoKKwkJICogVGhlIGZpbmUgc3RlcCBp cyAzMCBwcywgYnV0IHJlcXVlc3RzIGFyZSBhY2NlcHRlZCBhdCAxIHBzCisJCSAqIHJlc29sdXRp b24gYW5kIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgYWNoaWV2YWJsZSBkZWxheSwgc28KKwkJICog YWR2ZXJ0aXNlIHRoZSByZXF1ZXN0IGdyYW51bGFyaXR5LCBub3QgdGhlIGhhcmR3YXJlIHN0ZXAu CisJCSAqLworCQlwcm9wcy0+ZHBsbF9wcm9wcy5waGFzZV9ncmFuID0gMTsKIAl9CiAKIAkvKiBH ZW5lcmF0ZSBwYWNrYWdlIGxhYmVsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvc2l0OTUz MXgvcmVncy5oIGIvZHJpdmVycy9kcGxsL3NpdDk1MzF4L3JlZ3MuaAppbmRleCBlZWEzODE1MGI1 MGYuLjdjNDExMTFkY2EyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3NpdDk1MzF4L3JlZ3Mu aAorKysgYi9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvcmVncy5oCkBAIC0yMDIsNiArMjAyLDQzIEBA CiAjZGVmaW5lIFNJVDk1MzFYX0RFQlVHX1VOTE9DS19WQUwJCTB4QzMKICNkZWZpbmUgU0lUOTUz MVhfREVCVUdfTE9DS19WQUwJCQkweDAwCiAKKy8qCisgKiBQZXItb3V0cHV0IHByb2dyYW1tYWJs ZSBwaGFzZSBkZWxheTogMzQtYml0IGNvYXJzZSAoaW4gVkNPIGNsb2NrCisgKiBjeWNsZXMpIHBs dXMgYSAzLWJpdCBmaW5lIGZpZWxkIHdpdGggZml4ZWQgMzAgcHMgc3RlcHMuICBFYWNoIG91dHB1 dAorICogaGFzIGEgZml2ZS1ieXRlIGJsb2NrIFBST0c2Li5QUk9HMjoKKyAqCisgKiAgIGJhc2Ug KyAwICBQUk9HNiAgWzc6NV0gT1BTVEdfVkNBU0NfQlVNUCAocHJlc2VydmUgdmlhIFJNVykKKyAq ICAgICAgICAgICAgICAgICAgICBbNDoyXSBQUkdfUlNUX0ZJTkVfREVMQVlbMjowXQorICogICAg ICAgICAgICAgICAgICAgIFsxOjBdIFBSR19SU1RfREVMQVlbMzM6MzJdCisgKiAgIGJhc2UgKyAx ICBQUk9HNSAgWzc6MF0gUFJHX1JTVF9ERUxBWVszMToyNF0KKyAqICAgYmFzZSArIDIgIFBST0c0 ICBbNzowXSBQUkdfUlNUX0RFTEFZWzIzOjE2XQorICogICBiYXNlICsgMyAgUFJPRzMgIFs3OjBd IFBSR19SU1RfREVMQVlbMTU6OF0KKyAqICAgYmFzZSArIDQgIFBST0cyICBbNzowXSBQUkdfUlNU X0RFTEFZWzc6MF0KKyAqCisgKiBTbG90cyAwLTUgYXJlIG9uIFBhZ2UgMywgc2xvdHMgNi0xMSBv biBQYWdlIDQuICBUaGUgYmxvY2sgYmFzZQorICogd2l0aGluIGEgcGFnZSBpcyAweDE1ICsgMTYg KiAoc2xvdCAlIDYpLCB3aGVyZSBzbG90IGlzIHRoZSBwaHlzaWNhbAorICogb3V0cHV0IHNsb3Qg ZnJvbSBjbGtvdXRfbWFwW10sIG5vdCB0aGUgbG9naWNhbCBvdXRwdXQgaW5kZXguCisgKi8KKyNk ZWZpbmUgU0lUOTUzMVhfT1VUX1BSR19ERUxBWV9CQVNFCQkweDE1CisjZGVmaW5lIFNJVDk1MzFY X09VVF9QUkdfU0xPVF9TVFJJREUJCTB4MTAKKyNkZWZpbmUgU0lUOTUzMVhfT1VUX1BSR19CWVRF UwkJCTUKKy8qIGJpdHMgWzc6NV0sIHByZXNlcnZlICovCisjZGVmaW5lIFNJVDk1MzFYX09VVF9Q UkdfT1BTVEdfTUFTSwkJMHhFMAorI2RlZmluZSBTSVQ5NTMxWF9PVVRfUFJHX0ZJTkVfU0hJRlQJ CTIKKyNkZWZpbmUgU0lUOTUzMVhfT1VUX1BSR19GSU5FX01BU0sJCTB4MUMJLyogYml0cyBbNDoy XSAqLworI2RlZmluZSBTSVQ5NTMxWF9PVVRfUFJHX0NPQVJTRV9ISV9NQVNLCQkweDAzCS8qIGJp dHMgWzE6MF0gKi8KKy8qCisgKiBUaGUgZGl2aWRlciB0YWtlcyB0d28gVkNPIGN5Y2xlcyB0byBh Y3Qgb24gYSBwcm9ncmFtbWVkIGRlbGF5IGFuZAorICogcmVsZWFzZSB0aGUgb3V0cHV0LCBzbyB0 aGUgZW5jb2RlZCB2YWx1ZSBjYXJyaWVzIHRoZW0gYW5kIHRoZSByZWFsaXplZAorICogZGVsYXkg aXMgdGhlIHJlZ2lzdGVyIHZhbHVlIGxlc3MgdGhhdC4gIFRoZSByZWZlcmVuY2UgZmxvdyBhZGRz IHRoZQorICogc2FtZSB0d28uCisgKi8KKyNkZWZpbmUgU0lUOTUzMVhfT1VUX1BSR19ESVZPX0NZ Q0xFUwkyCisKKyNkZWZpbmUgU0lUOTUzMVhfT1VUX1BSR19GSU5FX1NURVBfUFMJCTMwCisjZGVm aW5lIFNJVDk1MzFYX09VVF9QUkdfRklORV9NQVgJCTcJLyogMy1iaXQgZmllbGQgKi8KKyNkZWZp bmUgU0lUOTUzMVhfT1VUX1BSR19DT0FSU0VfQklUUwkJMzQKKwogLyoKICAqIE9uLWRlbWFuZCBw aGFzZS1mbHVzaCBmaXJlZCBmcm9tIGEgcmVnaXN0ZXIgcmF0aGVyIHRoYW4gYSBHUElPIHBpbi4K ICAqIERJVk9fUEhBU0VfU0VMX1JFRyBzZWxlY3RzIHRoZSBpbi1yZWdpc3RlciB0cmlnZ2VyIHNv dXJjZSBhbmQKLS0gCjIuMzkuMiAoQXBwbGUgR2l0LTE0MykKCg==