Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp5881746pxu; Wed, 23 Dec 2020 07:44:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJyO1cwQtSHIk9vZLYigTH+zGkyhPWqepsUJT9qlMaiv303wg6+jKmVElQmF7FQN/rskExQk X-Received: by 2002:a50:ee8e:: with SMTP id f14mr24697028edr.176.1608738280818; Wed, 23 Dec 2020 07:44:40 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1608738280; cv=pass; d=google.com; s=arc-20160816; b=g8pCGNwc9/s18oHfFxdjhpp1uzixgO0cxIeRlzGw87jSGIqy8I55PwIv3KIlvHKjsY kqLZHkPQA3ttDcpTWfCLGjVd5W3pIdcDFGlA94MtiWyAdSPqj5wkcSxFCgIq9o5rYw3J mqcL5py1IP4FzPsvEmQ4HVAe5UKxIltIifOMEuqZnFrE7p74pPph/vX2GuVocnUIMe+E 7qqtHdlk0uKkjjiVeeuRUClgwF3dbdFTEZbLr4TXw449v7c+LBVG7h4S7Q65EiOypwY1 tu9zsIkGIdkdFK1CoolErXKXwNDLuCq+FTEzLZpKN9tJu8+p2vhoA89tYq63nwww4p72 989g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=1JfjT6fbMxlzgvLdABVlw56IoffZBheQ+yzp2zo9nTs=; b=ryJ6lvabYdgyLi0uDTbBP3FQWoel0OEEEFIjNsJOmtw9HoNJhk+4WQX1AlMsvP7063 64KphkBeOX1QZaLjwh2552KkPtUAWk+9vyZDNIfRkIkgMHqZhkrniM9V5O+fAiYUcYR+ 1SvH/xS4J1OvniLT9/tEjZXPVJ/UuUvZiZwGuYGmrXygb0czAmcVV5MWpkSxM8/e63qJ liaGSWaZf73zwPwsVZ44dqtWRabbnNjhF8wdfIpQ0tzLn/hZOql7MXKE4DynO60vlK5j FhRTQMWYehPa7RIjeSz4IdRes9PkS9GFF+W8NgSxdxTPVhXzBezUibmqhYnozEsFHGI6 hRug== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b=h8rk4n2p; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p10si12075568eji.254.2020.12.23.07.44.16; Wed, 23 Dec 2020 07:44:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b=h8rk4n2p; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728151AbgLWPnD (ORCPT + 99 others); Wed, 23 Dec 2020 10:43:03 -0500 Received: from mail-bn8nam08on2071.outbound.protection.outlook.com ([40.107.100.71]:17953 "EHLO NAM04-BN8-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729174AbgLWPnB (ORCPT ); Wed, 23 Dec 2020 10:43:01 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=be98Q/ajnJjHOxcKjmzmUJe+gGozFdF1f0qNUtFJMQpAFiKtrKYQdNYnzKtHVMo7s/rX6GvyFyBa9O7YrdNOa7S7WYo3Aoe8RrrOPlC3k9Zv7OqJ1LW1ftuwP5ynQCXH0G7XBymyRXyD27dqMNo+bkvR1SwKgMsKqN8HdTkUC8sWuhOAysyWRpfFaARqxyJ6SF3K9NWy6uNlkLB2WAMPCMcYJxxchQ9Hea0MnSApsO7uDEbMCDl00JzPaaiyNgfdQzo2c4WxZ7WZqNBE2AgfzM+Y9cbMR5GC7a5s1Q1T07de58UiuQa08WBY7xt/2+nFwb+5lnPnE0mJYUOr01lm5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1JfjT6fbMxlzgvLdABVlw56IoffZBheQ+yzp2zo9nTs=; b=njM9AJcZAIWArnTd1WLi5fPNQC9zsiSicMQGJ096nuhYlXel7CM3II3nCTQzGBUzadp39bZHDylOkXVon+AfFvc6yItohNDISAUBno9wfpDulZPASwp+S2ndeqpIRTdRLAMLKuPYTsz/jrcQJkaMLSdbQjUBSkMxkIMT5syk5xHmUAEghKnawtSz+NS6AjqTIdwBog7KLDpZCCZrCAhaDBMIrnlnr+9hFK3zl1TDzrNYMJaGi7aJbs79DqFKEfOabJ8gdnBnlIddggqFy8Mk8WEliOSFfYtr5laVqRe0vkuBaYD0BAnXXtsCqUJr4UT/OpMALaEFMeIHrCZmh6O0QQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1JfjT6fbMxlzgvLdABVlw56IoffZBheQ+yzp2zo9nTs=; b=h8rk4n2pE+cbG+9lO8Uz+Evtm2D0Wd47jkMqP94mNp7fE4eLW/5PXeovc6cmU9Vj8YmBCnhIlmEPY+sRWS5mf2fVkehJHwGqBpMYlw7tJCV6IcA5K9wWiusL2RV93t7dn96cWT1BxBzyagZgssxYEM/TnmqGcKv7rpWdje9Gd20= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=silabs.com; Received: from SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) by SA0PR11MB4543.namprd11.prod.outlook.com (2603:10b6:806:99::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3676.29; Wed, 23 Dec 2020 15:40:35 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::a989:f850:6736:97ca]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::a989:f850:6736:97ca%5]) with mapi id 15.20.3700.026; Wed, 23 Dec 2020 15:40:35 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , linux-mmc@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= , Ulf Hansson , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH v4 23/24] wfx: remove from the staging area Date: Wed, 23 Dec 2020 16:39:24 +0100 Message-Id: <20201223153925.73742-24-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201223153925.73742-1-Jerome.Pouiller@silabs.com> References: <20201223153925.73742-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Originating-IP: [82.67.86.106] X-ClientProxiedBy: SA0PR12CA0024.namprd12.prod.outlook.com (2603:10b6:806:6f::29) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.silabs.com (82.67.86.106) by SA0PR12CA0024.namprd12.prod.outlook.com (2603:10b6:806:6f::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3700.27 via Frontend Transport; Wed, 23 Dec 2020 15:40:32 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e44f93b4-32ee-4dab-b869-08d8a759170c X-MS-TrafficTypeDiagnostic: SA0PR11MB4543: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5236; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: S69eCU/sFS9MtnYfVeAC0WBlqXpJ7xYIs/QKjkn6+p7l0SOw5Gj1uBCNLj4o/8XoyDedcSvKbNmwgv/i4DBmMy72ZtJbGW3iD6uwriqqTUhTS/8C/TrKMTbnJCPOJlw11nVQh4HAXaufpki5jlLSSTr/nmk6yRqKODCgTJRUkhIVpkF8QrJZZyy8FbjeQf2Tq/Zuz09857XcMIYsYPrxOt4H1iIMABVKfY7rNSD5CrSVhyrMiwO3BJjJFL5zYSrx869krp0p0j1KvjhMwBMN+UzOlgI6RCZCoW7B+8nfR/Q/mnGgQV3K2oEHRR9RsjWLri16YE8DxaFPzwHLmU+zvUIBHW7fKm295Ul2WrLdUsdUn6rqNnIccKCHSxSF8HBfqY3VVWWPyOgBeIErF6DndA8fdPFvftZALpcPs3IAObIRzVmlDKDN6NJGWRScGw4b5FUwWpwgKg4rh6G2BGpR8sz/e4LHhdpd4lms8YVC9ZM1zM6PrRTJN0Arj3RGpLy9ZmhhFS/tua5BvIwLhywj4Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB2718.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(376002)(366004)(346002)(396003)(39850400004)(5660300002)(956004)(30864003)(2616005)(66476007)(66556008)(86362001)(36756003)(107886003)(66574015)(66946007)(6486002)(4326008)(83380400001)(966005)(6666004)(8676002)(186003)(52116002)(16526019)(7416002)(478600001)(26005)(1076003)(316002)(7696005)(54906003)(8936002)(2906002)(21314003)(569008);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?Wk1LUVM2UE5QOTVtNlZUMXAyYkZjZW51cVJPWE8wWmNCdytINzBMTmk3TE5H?= =?utf-8?B?c0duYlkxM0kxYlRJOXovMzJaSm1tSWYzakhYRDAyamg3V085VHlvbnhORzhx?= =?utf-8?B?d2J1OXo2MDZLSDM4M1RTcUpzR3dlaXN3a28xNG9YZjNYZTBuaGN5czZhQXcv?= =?utf-8?B?WXovREhIVEVZb1Y0VzZ4Um4zWDhSUlN0bmRncFE5cHpGYitRWW9sSW90UEpX?= =?utf-8?B?UXA4dDBhdVEzbTBwaGo1YzRmUjc3cnorVzByWFFrYmVDbjd3R05KZm9MR0R5?= =?utf-8?B?NG5TanRuZGJoVUprYW0vR2xOUnZNSENiZWQxNFVoL2ZhaGxURVZnOE8wVGtp?= =?utf-8?B?T1NZalI3NVRPaEZhNCtiWXV6Z2FtdCtwWEYrcVRqMnpYVG9xWVZCZjU2T2h4?= =?utf-8?B?Z01VUFNBb0N4RTU5WElwMzg5aFUvMDkxL0l1ZzJVd3g5WVo5SzhDaVNqTEsr?= =?utf-8?B?a1ZMQ24wZXJ2a2hZZ1Q0WVJrR0ZRUjcranhBajBmUzB0WjdzK21UNTRCSG1o?= =?utf-8?B?TXlEK3M5cWo5RVhOWWwramlaaDdiZk1UeGpYQnhhL3VlQXZpd1YvNVZoa1ZH?= =?utf-8?B?QStZWkxSWks0UFFRbXZkOXpHak4wUENLeWZOa0czWDFGV3YvakVsK1NiMDBw?= =?utf-8?B?UHlyRG9tdEtmQVU1c0hBc0hIT1I3VGkrNW5qNVBXaXBFT1RZN29pQk01aFdo?= =?utf-8?B?d0tYc3lyRDgyV25nYUs0c053NHlDcUlwOWFkSDUza1hieVdZZEZsR1ZYcmdQ?= =?utf-8?B?bTZOcE9YVzYzVGN3cDZwd0tJS2pKc1N0Q0tkcm1XQlpSTmFLNFZYVFM0V1hR?= =?utf-8?B?Nm1YbUZPVjlZc25XNmNwdEl4K1BaUWNJS3RZK2w2ZW5vZytOZkxKdTRGeGxW?= =?utf-8?B?SEpSdHpWMGUwZ3R1R05mK2J3VTBKRFQreDg5NHlZWXFhNk9WSkdWU1VYSUx4?= =?utf-8?B?Wm1zTlhRb1dSUERFd2NPdU5uNGdGYXFxcEVKWmMvb2V5V3lNeWZoQWE3dVRK?= =?utf-8?B?cjdla200ZkVWdCtVSW9RTjRNUWtaUlI2MjRnZ0hQNmU2TUFnZ2FDZ3FZcUxS?= =?utf-8?B?NjBZNVNHeTJSN2h6a2c2Mk9ZY29nTlpkU2FsTUZld0owdmYxMU9yejdXM256?= =?utf-8?B?czczUlB1YTN1UmJFVmkvekVRTE9mTlF0MjRPaFRxYzJacEtEZldBRzhDWEVD?= =?utf-8?B?SXJPS0ttZjlEc1UrM3NxNjZHb29EcnN3Y0pOZUdxN1pTM21EUkhQTnJFbHJo?= =?utf-8?B?dmhUM0h2ay9uWGJlb1VWR0NOMWRTMkZRUjQwTXJNcS9jOE9EV0g1bWRpYWRn?= =?utf-8?Q?cefDkrxXNRU9Dml11kG34Ni0jJ7QK/ddx7?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Dec 2020 15:40:35.2643 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-Network-Message-Id: e44f93b4-32ee-4dab-b869-08d8a759170c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9kcxkQ7MNnOF4JYM1gslrPscN0/A1dFVWkrX8VfZrTOHWIjfLbEiqu36ZtA4BB8pqgx0YVYnPDwWQCP2GGEteQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR11MB4543 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIC4uLi9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sICAgICB8IDEy NSAtLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvS2NvbmZpZyAgICAgICAgICAgICAgICAgICB8ICAg OCAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgMjUg LQogZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5jICAgICAgICAgICAgICAgICAgICAgIHwgMzMzIC0t LS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmggICAgICAgICAgICAgICAgICAgICAgfCAg MzMgLQogZHJpdmVycy9zdGFnaW5nL3dmeC9idXMuaCAgICAgICAgICAgICAgICAgICAgIHwgIDM4 IC0KIGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NkaW8uYyAgICAgICAgICAgICAgICB8IDI2OSAt LS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NwaS5jICAgICAgICAgICAgICAgICB8IDI3 MSAtLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jICAgICAgICAgICAgICAgICB8 ICA5MyAtLQogZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmggICAgICAgICAgICAgICAgIHwg IDE4IC0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5jICAgICAgICAgICAgICAgICB8IDU4 NSAtLS0tLS0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguaCAgICAgICAgICAg ICAgICAgfCAgNjcgLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGVidWcuYyAgICAgICAgICAgICAg ICAgICB8IDM1OSAtLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5oICAgICAgICAg ICAgICAgICAgIHwgIDE5IC0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZndpby5jICAgICAgICAgICAg ICAgICAgICB8IDQwNSAtLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZndpby5oICAgICAg ICAgICAgICAgICAgICB8ICAxNSAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlfY21kLmgg ICAgICAgICAgICAgfCA1NTMgLS0tLS0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9h cGlfZ2VuZXJhbC5oICAgICAgICAgfCAyNjcgLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hp Zl9hcGlfbWliLmggICAgICAgICAgICAgfCAzNDMgLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93 ZngvaGlmX3J4LmMgICAgICAgICAgICAgICAgICB8IDQxNSAtLS0tLS0tLS0KIGRyaXZlcnMvc3Rh Z2luZy93ZngvaGlmX3J4LmggICAgICAgICAgICAgICAgICB8ICAxOCAtCiBkcml2ZXJzL3N0YWdp bmcvd2Z4L2hpZl90eC5jICAgICAgICAgICAgICAgICAgfCA1MjMgLS0tLS0tLS0tLS0tCiBkcml2 ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5oICAgICAgICAgICAgICAgICAgfCAgNjAgLS0KIGRyaXZl cnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5jICAgICAgICAgICAgICB8IDMyNCAtLS0tLS0tCiBk cml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuaCAgICAgICAgICAgICAgfCAgNDkgLS0KIGRy aXZlcnMvc3RhZ2luZy93ZngvaHdpby5jICAgICAgICAgICAgICAgICAgICB8IDM1MiAtLS0tLS0t LQogZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmggICAgICAgICAgICAgICAgICAgIHwgIDc1IC0t CiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5jICAgICAgICAgICAgICAgICAgICAgfCAyNDEgLS0t LS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5oICAgICAgICAgICAgICAgICAgICAgfCAgMjAg LQogZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMgICAgICAgICAgICAgICAgICAgIHwgNDkwIC0t LS0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uaCAgICAgICAgICAgICAgICAgICAg fCAgNDQgLQogZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5jICAgICAgICAgICAgICAgICAgIHwg MzA0IC0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuaCAgICAgICAgICAgICAgICAg ICB8ICA0NSAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYyAgICAgICAgICAgICAgICAgICAg fCAxMzIgLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uaCAgICAgICAgICAgICAgICAgICAg fCAgMjIgLQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYyAgICAgICAgICAgICAgICAgICAgIHwg ODA3IC0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaCAgICAgICAg ICAgICAgICAgICAgIHwgIDczIC0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3RyYWNlcy5oICAgICAg ICAgICAgICAgICAgfCA1MDEgLS0tLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93Zngvd2Z4Lmgg ICAgICAgICAgICAgICAgICAgICB8IDE2NiAtLS0tCiAzOSBmaWxlcyBjaGFuZ2VkLCA4NDg3IGRl bGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvRG9jdW1l bnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L0tjb25maWcKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9z dGFnaW5nL3dmeC9iaC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9i dXMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NkaW8uYwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NwaS5jCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmMKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9z dGFnaW5nL3dmeC9kYXRhX3R4LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcv d2Z4L2RlYnVnLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVn LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2Z3aW8uYwogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvZndpby5oCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2NtZC5oCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2dlbmVyYWwuaAogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX2FwaV9taWIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0 YWdpbmcvd2Z4L2hpZl9yeC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dm eC9oaWZfdHguYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4 LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuYwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5oCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmMKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy93Zngva2V5LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcv d2Z4L2tleS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uaAogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYwogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy93Zngvc2Nhbi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dm eC9zY2FuLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaAogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvdHJhY2VzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dm eC9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3 ZngueWFtbCBiL2RyaXZlcnMvc3RhZ2luZy93ZngvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDUxMGVkZDEyZWQxOS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2lu Zy93ZngvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxh YnMsd2Z4LnlhbWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCi0jIENvcHlyaWdo dCAoYykgMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSVZQU1MIDEuMgotLS0tCi0K LSRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3dpcmVsZXNzL3NpbGFicyx3 ZngueWFtbCMKLSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29y ZS55YW1sIwotCi10aXRsZTogU2lsaWNvbiBMYWJzIFdGeHh4IGRldmljZXRyZWUgYmluZGluZ3MK LQotbWFpbnRhaW5lcnM6Ci0gIC0gSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBz aWxhYnMuY29tPgotCi1kZXNjcmlwdGlvbjoKLSAgVGhlIFdGeHh4IGNoaXAgc2VyaWVzIGNhbiBi ZSBjb25uZWN0ZWQgdmlhIFNQSSBvciB2aWEgU0RJTy4KLQotICBGb3IgU0RJTyc6JwotCi0gICAg VGhlIGRyaXZlciBpcyBhYmxlIHRvIGRldGVjdCBhIFdGeHh4IGNoaXAgb24gU0RJTyBidXMgYnkg bWF0Y2hpbmcgaXRzIFZlbmRvcgotICAgIElEIGFuZCBQcm9kdWN0IElELiBIb3dldmVyLCBkcml2 ZXIgd2lsbCBvbmx5IHByb3ZpZGUgbGltaXRlZCBmZWF0dXJlcyBpbgotICAgIHRoaXMgY2FzZS4g VGh1cyBkZWNsYXJpbmcgV0Z4eHggY2hpcCBpbiBkZXZpY2UgdHJlZSBpcyByZWNvbW1lbmRlZCAo YW5kIG1heQotICAgIGJlY29tZSBtYW5kYXRvcnkgaW4gdGhlIGZ1dHVyZSkuCi0KLSAgICBJbiBh ZGRpdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZGVjbGFyZSBhIG1tYy1wd3JzZXEgb24gU0RJ TyBob3N0IGFib3ZlCi0gICAgV0Z4LiBXaXRob3V0IGl0LCB5b3UgbWF5IGVuY291bnRlciBpc3N1 ZXMgd2l0aCB3YXJtIGJvb3QuIFRoZSBtbWMtcHdyc2VxCi0gICAgc2hvdWxkIGJlIGNvbXBhdGli bGUgd2l0aCBtbWMtcHdyc2VxLXNpbXBsZS4gUGxlYXNlIGNvbnN1bHQKLSAgICBEb2N1bWVudGF0 aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1wd3JzZXEtc2ltcGxlLnlhbWwgZm9yIG1v cmUKLSAgICBpbmZvcm1hdGlvbi4KLQotICBGb3IgU1BJJzonCi0KLSAgICBJbiBhZGQgb2YgdGhl IHByb3BlcnRpZXMgYmVsb3csIHBsZWFzZSBjb25zdWx0Ci0gICAgRG9jdW1lbnRhdGlvbi9kZXZp Y2V0cmVlL2JpbmRpbmdzL3NwaS9zcGktY29udHJvbGxlci55YW1sIGZvciBvcHRpb25hbCBTUEkK LSAgICByZWxhdGVkIHByb3BlcnRpZXMuCi0KLSAgTm90ZSB0aGF0IGluIGFkZCBvZiB0aGUgcHJv cGVydGllcyBiZWxvdywgdGhlIFdGeCBkcml2ZXIgYWxzbyBzdXBwb3J0cwotICBgbWFjLWFkZHJl c3NgIGFuZCBgbG9jYWwtbWFjLWFkZHJlc3NgIGFzIGRlc2NyaWJlZCBpbgotICBEb2N1bWVudGF0 aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2V0aGVybmV0LnR4dAotCi1wcm9wZXJ0aWVzOgot ICBjb21wYXRpYmxlOgotICAgIGNvbnN0OiBzaWxhYnMsd2YyMDAKLSAgcmVnOgotICAgIGRlc2Ny aXB0aW9uOgotICAgICAgV2hlbiB1c2VkIG9uIFNESU8gYnVzLCA8cmVnPiBtdXN0IGJlIHNldCB0 byAxLiBXaGVuIHVzZWQgb24gU1BJIGJ1cywgaXQgaXMKLSAgICAgIHRoZSBjaGlwIHNlbGVjdCBh ZGRyZXNzIG9mIHRoZSBkZXZpY2UgYXMgZGVmaW5lZCBpbiB0aGUgU1BJIGRldmljZXMKLSAgICAg IGJpbmRpbmdzLgotICAgIG1heEl0ZW1zOiAxCi0gIHNwaS1tYXgtZnJlcXVlbmN5OgotICAgIGRl c2NyaXB0aW9uOiAoU1BJIG9ubHkpIE1heGltdW0gU1BJIGNsb2NraW5nIHNwZWVkIG9mIGRldmlj ZSBpbiBIei4KLSAgICBtYXhJdGVtczogMQotICBpbnRlcnJ1cHRzOgotICAgIGRlc2NyaXB0aW9u OiBUaGUgaW50ZXJydXB0IGxpbmUuIFRyaWdnZXJzIElSUV9UWVBFX0xFVkVMX0hJR0ggYW5kCi0g ICAgICBJUlFfVFlQRV9FREdFX1JJU0lORyBhcmUgYm90aCBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAg YW5kIHRoZSBkcml2ZXIuIFdoZW4KLSAgICAgIFNQSSBpcyB1c2VkLCB0aGlzIHByb3BlcnR5IGlz IHJlcXVpcmVkLiBXaGVuIFNESU8gaXMgdXNlZCwgdGhlICJpbi1iYW5kIgotICAgICAgaW50ZXJy dXB0IHByb3ZpZGVkIGJ5IHRoZSBTRElPIGJ1cyBpcyB1c2VkIHVubGVzcyBhbiBpbnRlcnJ1cHQg aXMgZGVmaW5lZAotICAgICAgaW4gdGhlIERldmljZSBUcmVlLgotICAgIG1heEl0ZW1zOiAxCi0g IHJlc2V0LWdwaW9zOgotICAgIGRlc2NyaXB0aW9uOiAoU1BJIG9ubHkpIFBoYW5kbGUgb2YgZ3Bp byB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXNldCBjaGlwCi0gICAgICBkdXJpbmcgcHJvYmUuIFdp dGhvdXQgdGhpcyBwcm9wZXJ0eSwgeW91IG1heSBlbmNvdW50ZXIgaXNzdWVzIHdpdGggd2FybQot ICAgICAgYm9vdC4gKEZvciBsZWdhY3kgcHVycG9zZSwgdGhlIGdwaW8gaW4gaW52ZXJ0ZWQgd2hl biBjb21wYXRpYmxlID09Ci0gICAgICAic2lsYWJzLHdmeC1zcGkiKQotCi0gICAgICBGb3IgU0RJ TywgdGhlIHJlc2V0IGdwaW8gc2hvdWxkIGRlY2xhcmVkIHVzaW5nIGEgbW1jLXB3cnNlcS4KLSAg ICBtYXhJdGVtczogMQotICB3YWtldXAtZ3Bpb3M6Ci0gICAgZGVzY3JpcHRpb246IFBoYW5kbGUg b2YgZ3BpbyB0aGF0IHdpbGwgYmUgdXNlZCB0byB3YWtlLXVwIGNoaXAuIFdpdGhvdXQgdGhpcwot ICAgICAgcHJvcGVydHksIGRyaXZlciB3aWxsIGRpc2FibGUgbW9zdCBvZiBwb3dlciBzYXZpbmcg ZmVhdHVyZXMuCi0gICAgbWF4SXRlbXM6IDEKLSAgY29uZmlnLWZpbGU6Ci0gICAgZGVzY3JpcHRp b246IFVzZSBhbiBhbHRlcm5hdGl2ZSBmaWxlIGFzIFBEUy4gRGVmYXVsdCBpcyBgd2YyMDAucGRz YC4gT25seQotICAgICAgbmVjZXNzYXJ5IGZvciBkZXZlbG9wbWVudC9kZWJ1ZyBwdXJwb3NlLgot ICAgIG1heEl0ZW1zOiAxCi0KLXJlcXVpcmVkOgotICAtIGNvbXBhdGlibGUKLSAgLSByZWcKLQot ZXhhbXBsZXM6Ci0gIC0gfAotICAgICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4K LSAgICAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+Ci0K LSAgICBzcGkwIHsKLSAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0gICAgICAgICNzaXpl LWNlbGxzID0gPDA+OwotCi0gICAgICAgIHdmeEAwIHsKLSAgICAgICAgICAgIGNvbXBhdGlibGUg PSAic2lsYWJzLHdmMjAwIjsKLSAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7 Ci0gICAgICAgICAgICBwaW5jdHJsLTAgPSA8JndmeF9pcnEgJndmeF9ncGlvcz47Ci0gICAgICAg ICAgICByZWcgPSA8MD47Ci0gICAgICAgICAgICBpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZncGlv IDE2IElSUV9UWVBFX0VER0VfUklTSU5HPjsKLSAgICAgICAgICAgIHdha2V1cC1ncGlvcyA9IDwm Z3BpbyAxMiBHUElPX0FDVElWRV9ISUdIPjsKLSAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gPCZn cGlvIDEzIEdQSU9fQUNUSVZFX0xPVz47Ci0gICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9 IDw0MjAwMDAwMD47Ci0gICAgICAgIH07Ci0gICAgfTsKLQotICAtIHwKLSAgICAjaW5jbHVkZSA8 ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+Ci0gICAgI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVy cnVwdC1jb250cm9sbGVyL2lycS5oPgotCi0gICAgd2Z4X3B3cnNlcTogd2Z4X3B3cnNlcSB7Ci0g ICAgICAgIGNvbXBhdGlibGUgPSAibW1jLXB3cnNlcS1zaW1wbGUiOwotICAgICAgICBwaW5jdHJs LW5hbWVzID0gImRlZmF1bHQiOwotICAgICAgICBwaW5jdHJsLTAgPSA8JndmeF9yZXNldD47Ci0g ICAgICAgIHJlc2V0LWdwaW9zID0gPCZncGlvIDEzIEdQSU9fQUNUSVZFX0xPVz47Ci0gICAgfTsK LQotICAgIG1tYzAgewotICAgICAgICBtbWMtcHdyc2VxID0gPCZ3ZnhfcHdyc2VxPjsKLSAgICAg ICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0gICAgICAgICNzaXplLWNlbGxzID0gPDA+OwotCi0g ICAgICAgIG1tY0AxIHsKLSAgICAgICAgICAgIGNvbXBhdGlibGUgPSAic2lsYWJzLHdmMjAwIjsK LSAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0gICAgICAgICAgICBwaW5j dHJsLTAgPSA8JndmeF93YWtldXA+OwotICAgICAgICAgICAgcmVnID0gPDE+OwotICAgICAgICAg ICAgd2FrZXVwLWdwaW9zID0gPCZncGlvIDEyIEdQSU9fQUNUSVZFX0hJR0g+OwotICAgICAgICB9 OwotICAgIH07Ci0uLi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvS2NvbmZpZyBi L2RyaXZlcnMvc3RhZ2luZy93ZngvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggODNlZTRkMGNhOGM2Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9L Y29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1jb25maWcgV0ZYCi0JdHJpc3Rh dGUgIlNpbGljb24gTGFicyB3aXJlbGVzcyBjaGlwcyBXRjIwMCBhbmQgZnVydGhlciIKLQlkZXBl bmRzIG9uIE1BQzgwMjExCi0JZGVwZW5kcyBvbiBNTUMgfHwgIU1NQyAjIGRvIG5vdCBhbGxvdyBX Rlg9eSBpZiBNTUM9bQotCWRlcGVuZHMgb24gKFNQSSB8fCBNTUMpCi0JaGVscAotCSAgVGhpcyBp cyBhIGRyaXZlciBmb3IgU2lsaWNvbnMgTGFicyBXRnh4eCBzZXJpZXMgKFdGMjAwIGFuZCBmdXJ0 aGVyKQotCSAgY2hpcHNldHMuIFRoaXMgY2hpcCBjYW4gYmUgZm91bmQgb24gU1BJIG9yIFNESU8g YnVzZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlIGIvZHJpdmVy cy9zdGFnaW5nL3dmeC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUw Y2M5ODJjZWFiLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9NYWtlZmls ZQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKLQotIyBOZWNlc3NhcnkgZm9yIENSRUFURV9UUkFDRV9QT0lOVFMKLUNGTEFH U19kZWJ1Zy5vID0gLUkkKHNyYykKLQotd2Z4LXkgOj0gXAotCWJoLm8gXAotCWh3aW8ubyBcCi0J Zndpby5vIFwKLQloaWZfdHhfbWliLm8gXAotCWhpZl90eC5vIFwKLQloaWZfcngubyBcCi0JcXVl dWUubyBcCi0JZGF0YV90eC5vIFwKLQlkYXRhX3J4Lm8gXAotCXNjYW4ubyBcCi0Jc3RhLm8gXAot CWtleS5vIFwKLQltYWluLm8gXAotCXN0YS5vIFwKLQlkZWJ1Zy5vCi13ZngtJChDT05GSUdfU1BJ KSArPSBidXNfc3BpLm8KLXdmeC0kKHN1YnN0IG0seSwkKENPTkZJR19NTUMpKSArPSBidXNfc2Rp by5vCi0KLW9iai0kKENPTkZJR19XRlgpICs9IHdmeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvd2Z4L2JoLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGVkNTNkMGI0NTU5Mi4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMv c3RhZ2luZy93ZngvYmguYworKysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0vLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogSW50ZXJydXB0IGJvdHRv bSBoYWxmIChCSCkuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8K LSNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjEx Lmg+Ci0KLSNpbmNsdWRlICJiaC5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImh3aW8u aCIKLSNpbmNsdWRlICJ0cmFjZXMuaCIKLSNpbmNsdWRlICJoaWZfcnguaCIKLSNpbmNsdWRlICJo aWZfYXBpX2NtZC5oIgotCi1zdGF0aWMgdm9pZCBkZXZpY2Vfd2FrZXVwKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2KQotewotCWludCBtYXhfcmV0cnkgPSAzOwotCi0JaWYgKCF3ZGV2LT5wZGF0YS5ncGlv X3dha2V1cCkKLQkJcmV0dXJuOwotCWlmIChncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAod2Rldi0+ cGRhdGEuZ3Bpb193YWtldXApID4gMCkKLQkJcmV0dXJuOwotCi0JaWYgKHdmeF9hcGlfb2xkZXJf dGhhbih3ZGV2LCAxLCA0KSkgewotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAod2Rldi0+cGRh dGEuZ3Bpb193YWtldXAsIDEpOwotCQlpZiAoIWNvbXBsZXRpb25fZG9uZSgmd2Rldi0+aGlmLmN0 cmxfcmVhZHkpKQotCQkJdXNsZWVwX3JhbmdlKDIwMDAsIDI1MDApOwotCQlyZXR1cm47Ci0JfQot CWZvciAoOzspIHsKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHdkZXYtPnBkYXRhLmdwaW9f d2FrZXVwLCAxKTsKLQkJLy8gY29tcGxldGlvbi5oIGRvZXMgbm90IHByb3ZpZGUgYW55IGZ1bmN0 aW9uIHRvIHdhaXQKLQkJLy8gY29tcGxldGlvbiB3aXRob3V0IGNvbnN1bWUgaXQgKGEga2luZCBv ZgotCQkvLyB3YWl0X2Zvcl9jb21wbGV0aW9uX2RvbmVfdGltZW91dCgpKS4gU28gd2UgaGF2ZSB0 byBlbXVsYXRlCi0JCS8vIGl0LgotCQlpZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3 ZGV2LT5oaWYuY3RybF9yZWFkeSwKLQkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMikpKSB7Ci0JCQlj b21wbGV0ZSgmd2Rldi0+aGlmLmN0cmxfcmVhZHkpOwotCQkJcmV0dXJuOwotCQl9IGVsc2UgaWYg KG1heF9yZXRyeS0tID4gMCkgewotCQkJLy8gT2xkZXIgZmlybXdhcmVzIGhhdmUgYSByYWNlIGlu IHNsZWVwL3dha2UtdXAgcHJvY2Vzcy4KLQkJCS8vIFJlZG8gdGhlIHByb2Nlc3MgaXMgc3VmZmlj aWVudCB0byB1bmZyZWV6ZSB0aGUKLQkJCS8vIGNoaXAuCi0JCQlkZXZfZXJyKHdkZXYtPmRldiwg InRpbWVvdXQgd2hpbGUgd2FrZSB1cCBjaGlwXG4iKTsKLQkJCWdwaW9kX3NldF92YWx1ZV9jYW5z bGVlcCh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCwgMCk7Ci0JCQl1c2xlZXBfcmFuZ2UoMjAwMCwg MjUwMCk7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZXJyKHdkZXYtPmRldiwgIm1heCB3YWtlLXVwIHJl dHJpZXMgcmVhY2hlZFxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lk IGRldmljZV9yZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCWlmICghd2Rldi0+cGRh dGEuZ3Bpb193YWtldXApCi0JCXJldHVybjsKLQotCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3 ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgcnhfaGVscGVyKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzaXplX3QgcmVhZF9sZW4sIGludCAqaXNfY25mKQotewotCXN0 cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzaXplX3QgYWxsb2Nf bGVuOwotCXNpemVfdCBjb21wdXRlZF9sZW47Ci0JaW50IHJlbGVhc2VfY291bnQ7Ci0JaW50IHBp Z2d5YmFjayA9IDA7Ci0KLQlXQVJOKHJlYWRfbGVuID4gcm91bmRfZG93bigweEZGRiwgMikgKiBz aXplb2YodTE2KSwKLQkgICAgICIlczogcmVxdWVzdCBleGNlZWQgV0Z4IGNhcGFiaWxpdHkiLCBf X2Z1bmNfXyk7Ci0KLQkvLyBBZGQgMiB0byB0YWtlIGludG8gYWNjb3VudCBwaWdneWJhY2sgc2l6 ZQotCWFsbG9jX2xlbiA9IHdkZXYtPmh3YnVzX29wcy0+YWxpZ25fc2l6ZSh3ZGV2LT5od2J1c19w cml2LCByZWFkX2xlbiArIDIpOwotCXNrYiA9IGRldl9hbGxvY19za2IoYWxsb2NfbGVuKTsKLQlp ZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAod2Z4X2RhdGFfcmVhZCh3ZGV2LCBz a2ItPmRhdGEsIGFsbG9jX2xlbikpCi0JCWdvdG8gZXJyOwotCi0JcGlnZ3liYWNrID0gbGUxNl90 b19jcHVwKChfX2xlMTYgKikoc2tiLT5kYXRhICsgYWxsb2NfbGVuIC0gMikpOwotCV90cmFjZV9w aWdneWJhY2socGlnZ3liYWNrLCBmYWxzZSk7Ci0KLQloaWYgPSAoc3RydWN0IGhpZl9tc2cgKilz a2ItPmRhdGE7Ci0JV0FSTihoaWYtPmVuY3J5cHRlZCAmIDB4MywgImVuY3J5cHRpb24gaXMgdW5z dXBwb3J0ZWQiKTsKLQlpZiAoV0FSTihyZWFkX2xlbiA8IHNpemVvZihzdHJ1Y3QgaGlmX21zZyks ICJjb3JydXB0ZWQgcmVhZCIpKQotCQlnb3RvIGVycjsKLQljb21wdXRlZF9sZW4gPSBsZTE2X3Rv X2NwdShoaWYtPmxlbik7Ci0JY29tcHV0ZWRfbGVuID0gcm91bmRfdXAoY29tcHV0ZWRfbGVuLCAy KTsKLQlpZiAoY29tcHV0ZWRfbGVuICE9IHJlYWRfbGVuKSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2 LCAiaW5jb25zaXN0ZW50IG1lc3NhZ2UgbGVuZ3RoOiAlenUgIT0gJXp1XG4iLAotCQkJY29tcHV0 ZWRfbGVuLCByZWFkX2xlbik7Ci0JCXByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgImhpZjogIiwg RFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwKLQkJCSAgICAgICBoaWYsIHJlYWRfbGVuLCB0cnVl KTsKLQkJZ290byBlcnI7Ci0JfQotCi0JaWYgKCEoaGlmLT5pZCAmIEhJRl9JRF9JU19JTkRJQ0FU SU9OKSkgewotCQkoKmlzX2NuZikrKzsKLQkJaWYgKGhpZi0+aWQgPT0gSElGX0NORl9JRF9NVUxU SV9UUkFOU01JVCkKLQkJCXJlbGVhc2VfY291bnQgPSAoKHN0cnVjdCBoaWZfY25mX211bHRpX3Ry YW5zbWl0ICopaGlmLT5ib2R5KS0+bnVtX3R4X2NvbmZzOwotCQllbHNlCi0JCQlyZWxlYXNlX2Nv dW50ID0gMTsKLQkJV0FSTih3ZGV2LT5oaWYudHhfYnVmZmVyc191c2VkIDwgcmVsZWFzZV9jb3Vu dCwgImNvcnJ1cHRlZCBidWZmZXIgY291bnRlciIpOwotCQl3ZGV2LT5oaWYudHhfYnVmZmVyc191 c2VkIC09IHJlbGVhc2VfY291bnQ7Ci0JfQotCV90cmFjZV9oaWZfcmVjdihoaWYsIHdkZXYtPmhp Zi50eF9idWZmZXJzX3VzZWQpOwotCi0JaWYgKGhpZi0+aWQgIT0gSElGX0lORF9JRF9FWENFUFRJ T04gJiYgaGlmLT5pZCAhPSBISUZfSU5EX0lEX0VSUk9SKSB7Ci0JCWlmIChoaWYtPnNlcW51bSAh PSB3ZGV2LT5oaWYucnhfc2VxbnVtKQotCQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAid3JvbmcgbWVz c2FnZSBzZXF1ZW5jZTogJWQgIT0gJWRcbiIsCi0JCQkJIGhpZi0+c2VxbnVtLCB3ZGV2LT5oaWYu cnhfc2VxbnVtKTsKLQkJd2Rldi0+aGlmLnJ4X3NlcW51bSA9IChoaWYtPnNlcW51bSArIDEpICUg KEhJRl9DT1VOVEVSX01BWCArIDEpOwotCX0KLQotCXNrYl9wdXQoc2tiLCBsZTE2X3RvX2NwdSho aWYtPmxlbikpOwotCS8vIHdmeF9oYW5kbGVfcnggdGFrZXMgY2FyZSBvbiBTS0IgbGl2ZXRpbWUK LQl3ZnhfaGFuZGxlX3J4KHdkZXYsIHNrYik7Ci0JaWYgKCF3ZGV2LT5oaWYudHhfYnVmZmVyc191 c2VkKQotCQl3YWtlX3VwKCZ3ZGV2LT5oaWYudHhfYnVmZmVyc19lbXB0eSk7Ci0KLQlyZXR1cm4g cGlnZ3liYWNrOwotCi1lcnI6Ci0JaWYgKHNrYikKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCXJl dHVybiAtRUlPOwotfQotCi1zdGF0aWMgaW50IGJoX3dvcmtfcngoc3RydWN0IHdmeF9kZXYgKndk ZXYsIGludCBtYXhfbXNnLCBpbnQgKm51bV9jbmYpCi17Ci0Jc2l6ZV90IGxlbjsKLQlpbnQgaTsK LQlpbnQgY3RybF9yZWcsIHBpZ2d5YmFjazsKLQotCXBpZ2d5YmFjayA9IDA7Ci0JZm9yIChpID0g MDsgaSA8IG1heF9tc2c7IGkrKykgewotCQlpZiAocGlnZ3liYWNrICYgQ1RSTF9ORVhUX0xFTl9N QVNLKQotCQkJY3RybF9yZWcgPSBwaWdneWJhY2s7Ci0JCWVsc2UgaWYgKHRyeV93YWl0X2Zvcl9j b21wbGV0aW9uKCZ3ZGV2LT5oaWYuY3RybF9yZWFkeSkpCi0JCQljdHJsX3JlZyA9IGF0b21pY194 Y2hnKCZ3ZGV2LT5oaWYuY3RybF9yZWcsIDApOwotCQllbHNlCi0JCQljdHJsX3JlZyA9IDA7Ci0J CWlmICghKGN0cmxfcmVnICYgQ1RSTF9ORVhUX0xFTl9NQVNLKSkKLQkJCXJldHVybiBpOwotCQkv LyBjdHJsX3JlZyB1bml0cyBhcmUgMTZiaXRzIHdvcmRzCi0JCWxlbiA9IChjdHJsX3JlZyAmIENU UkxfTkVYVF9MRU5fTUFTSykgKiAyOwotCQlwaWdneWJhY2sgPSByeF9oZWxwZXIod2RldiwgbGVu LCBudW1fY25mKTsKLQkJaWYgKHBpZ2d5YmFjayA8IDApCi0JCQlyZXR1cm4gaTsKLQkJaWYgKCEo cGlnZ3liYWNrICYgQ1RSTF9XTEFOX1JFQURZKSkKLQkJCWRldl9lcnIod2Rldi0+ZGV2LCAidW5l eHBlY3RlZCBwaWdneWJhY2sgdmFsdWU6IHJlYWR5IGJpdCBub3Qgc2V0OiAlMDR4XG4iLAotCQkJ CXBpZ2d5YmFjayk7Ci0JfQotCWlmIChwaWdneWJhY2sgJiBDVFJMX05FWFRfTEVOX01BU0spIHsK LQkJY3RybF9yZWcgPSBhdG9taWNfeGNoZygmd2Rldi0+aGlmLmN0cmxfcmVnLCBwaWdneWJhY2sp OwotCQljb21wbGV0ZSgmd2Rldi0+aGlmLmN0cmxfcmVhZHkpOwotCQlpZiAoY3RybF9yZWcpCi0J CQlkZXZfZXJyKHdkZXYtPmRldiwgInVuZXhwZWN0ZWQgSVJRIGhhcHBlbmVkOiAlMDR4LyUwNHhc biIsCi0JCQkJY3RybF9yZWcsIHBpZ2d5YmFjayk7Ci0JfQotCXJldHVybiBpOwotfQotCi1zdGF0 aWMgdm9pZCB0eF9oZWxwZXIoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBoaWZfbXNnICpo aWYpCi17Ci0JaW50IHJldDsKLQl2b2lkICpkYXRhOwotCWJvb2wgaXNfZW5jcnlwdGVkID0gZmFs c2U7Ci0Jc2l6ZV90IGxlbiA9IGxlMTZfdG9fY3B1KGhpZi0+bGVuKTsKLQotCVdBUk4obGVuIDwg c2l6ZW9mKCpoaWYpLCAidHJ5IHRvIHNlbmQgY29ycnVwdGVkIGRhdGEiKTsKLQotCWhpZi0+c2Vx bnVtID0gd2Rldi0+aGlmLnR4X3NlcW51bTsKLQl3ZGV2LT5oaWYudHhfc2VxbnVtID0gKHdkZXYt PmhpZi50eF9zZXFudW0gKyAxKSAlIChISUZfQ09VTlRFUl9NQVggKyAxKTsKLQotCWRhdGEgPSBo aWY7Ci0JV0FSTihsZW4gPiB3ZGV2LT5od19jYXBzLnNpemVfaW5wX2NoX2J1ZiwKLQkgICAgICIl czogcmVxdWVzdCBleGNlZWQgV0Z4IGNhcGFiaWxpdHk6ICV6dSA+ICVkXG4iLCBfX2Z1bmNfXywK LQkgICAgIGxlbiwgd2Rldi0+aHdfY2Fwcy5zaXplX2lucF9jaF9idWYpOwotCWxlbiA9IHdkZXYt Pmh3YnVzX29wcy0+YWxpZ25fc2l6ZSh3ZGV2LT5od2J1c19wcml2LCBsZW4pOwotCXJldCA9IHdm eF9kYXRhX3dyaXRlKHdkZXYsIGRhdGEsIGxlbik7Ci0JaWYgKHJldCkKLQkJZ290byBlbmQ7Ci0K LQl3ZGV2LT5oaWYudHhfYnVmZmVyc191c2VkKys7Ci0JX3RyYWNlX2hpZl9zZW5kKGhpZiwgd2Rl di0+aGlmLnR4X2J1ZmZlcnNfdXNlZCk7Ci1lbmQ6Ci0JaWYgKGlzX2VuY3J5cHRlZCkKLQkJa2Zy ZWUoZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbnQgYmhfd29ya190eChzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgaW50IG1heF9tc2cpCi17Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlpbnQgaTsKLQotCWZv ciAoaSA9IDA7IGkgPCBtYXhfbXNnOyBpKyspIHsKLQkJaGlmID0gTlVMTDsKLQkJaWYgKHdkZXYt PmhpZi50eF9idWZmZXJzX3VzZWQgPCB3ZGV2LT5od19jYXBzLm51bV9pbnBfY2hfYnVmcykgewot CQkJaWYgKHRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKCZ3ZGV2LT5oaWZfY21kLnJlYWR5KSkgewot CQkJCVdBUk4oIW11dGV4X2lzX2xvY2tlZCgmd2Rldi0+aGlmX2NtZC5sb2NrKSwgImRhdGEgbG9j a2luZyBlcnJvciIpOwotCQkJCWhpZiA9IHdkZXYtPmhpZl9jbWQuYnVmX3NlbmQ7Ci0JCQl9IGVs c2UgewotCQkJCWhpZiA9IHdmeF90eF9xdWV1ZXNfZ2V0KHdkZXYpOwotCQkJfQotCQl9Ci0JCWlm ICghaGlmKQotCQkJcmV0dXJuIGk7Ci0JCXR4X2hlbHBlcih3ZGV2LCBoaWYpOwotCX0KLQlyZXR1 cm4gaTsKLX0KLQotLyogSW4gU0RJTyBtb2RlLCBpdCBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhbiBh Y2Nlc3MgdG8gYSByZWdpc3RlciB0byBhY2tub3dsZWRnZQotICogbGFzdCByZWNlaXZlZCBtZXNz YWdlLiBJdCBjb3VsZCBiZSBwb3NzaWJsZSB0byByZXN0cmljdCB0aGlzIGFja25vd2xlZGdlIHRv Ci0gKiBTRElPIG1vZGUgYW5kIG9ubHkgaWYgbGFzdCBvcGVyYXRpb24gd2FzIHJ4LgotICovCi1z dGF0aWMgdm9pZCBhY2tfc2Rpb19kYXRhKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCXUzMiBj ZmdfcmVnOwotCi0JY29uZmlnX3JlZ19yZWFkKHdkZXYsICZjZmdfcmVnKTsKLQlpZiAoY2ZnX3Jl ZyAmIDB4RkYpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiY2hpcCByZXBvcnRzIGVycm9yczog JTAyeFxuIiwKLQkJCSBjZmdfcmVnICYgMHhGRik7Ci0JCWNvbmZpZ19yZWdfd3JpdGVfYml0cyh3 ZGV2LCAweEZGLCAweDAwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJoX3dvcmsoc3RydWN0IHdv cmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gY29udGFpbmVyX29m KHdvcmssIHN0cnVjdCB3ZnhfZGV2LCBoaWYuYmgpOwotCWludCBzdGF0c19yZXEgPSAwLCBzdGF0 c19jbmYgPSAwLCBzdGF0c19pbmQgPSAwOwotCWJvb2wgcmVsZWFzZV9jaGlwID0gZmFsc2UsIGxh c3Rfb3BfaXNfcnggPSBmYWxzZTsKLQlpbnQgbnVtX3R4LCBudW1fcng7Ci0KLQlkZXZpY2Vfd2Fr ZXVwKHdkZXYpOwotCWRvIHsKLQkJbnVtX3R4ID0gYmhfd29ya190eCh3ZGV2LCAzMik7Ci0JCXN0 YXRzX3JlcSArPSBudW1fdHg7Ci0JCWlmIChudW1fdHgpCi0JCQlsYXN0X29wX2lzX3J4ID0gZmFs c2U7Ci0JCW51bV9yeCA9IGJoX3dvcmtfcngod2RldiwgMzIsICZzdGF0c19jbmYpOwotCQlzdGF0 c19pbmQgKz0gbnVtX3J4OwotCQlpZiAobnVtX3J4KQotCQkJbGFzdF9vcF9pc19yeCA9IHRydWU7 Ci0JfSB3aGlsZSAobnVtX3J4IHx8IG51bV90eCk7Ci0Jc3RhdHNfaW5kIC09IHN0YXRzX2NuZjsK LQotCWlmIChsYXN0X29wX2lzX3J4KQotCQlhY2tfc2Rpb19kYXRhKHdkZXYpOwotCWlmICghd2Rl di0+aGlmLnR4X2J1ZmZlcnNfdXNlZCAmJiAhd29ya19wZW5kaW5nKHdvcmspKSB7Ci0JCWRldmlj ZV9yZWxlYXNlKHdkZXYpOwotCQlyZWxlYXNlX2NoaXAgPSB0cnVlOwotCX0KLQlfdHJhY2VfYmhf c3RhdHMoc3RhdHNfaW5kLCBzdGF0c19yZXEsIHN0YXRzX2NuZiwKLQkJCXdkZXYtPmhpZi50eF9i dWZmZXJzX3VzZWQsIHJlbGVhc2VfY2hpcCk7Ci19Ci0KLS8qCi0gKiBBbiBJUlEgZnJvbSBjaGlw IGRpZCBvY2N1cgotICovCi12b2lkIHdmeF9iaF9yZXF1ZXN0X3J4KHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2KQotewotCXUzMiBjdXIsIHByZXY7Ci0KLQljb250cm9sX3JlZ19yZWFkKHdkZXYsICZjdXIp OwotCXByZXYgPSBhdG9taWNfeGNoZygmd2Rldi0+aGlmLmN0cmxfcmVnLCBjdXIpOwotCWNvbXBs ZXRlKCZ3ZGV2LT5oaWYuY3RybF9yZWFkeSk7Ci0JcXVldWVfd29yayhzeXN0ZW1faGlnaHByaV93 cSwgJndkZXYtPmhpZi5iaCk7Ci0KLQlpZiAoIShjdXIgJiBDVFJMX05FWFRfTEVOX01BU0spKQot CQlkZXZfZXJyKHdkZXYtPmRldiwgInVuZXhwZWN0ZWQgY29udHJvbCByZWdpc3RlciB2YWx1ZTog bGVuZ3RoIGZpZWxkIGlzIDA6ICUwNHhcbiIsCi0JCQljdXIpOwotCWlmIChwcmV2ICE9IDApCi0J CWRldl9lcnIod2Rldi0+ZGV2LCAicmVjZWl2ZWQgSVJRIGJ1dCBwcmV2aW91cyBkYXRhIHdhcyBu b3QgKHlldCkgcmVhZDogJTA0eC8lMDR4XG4iLAotCQkJcHJldiwgY3VyKTsKLX0KLQotLyoKLSAq IERyaXZlciB3YW50IHRvIHNlbmQgZGF0YQotICovCi12b2lkIHdmeF9iaF9yZXF1ZXN0X3R4KHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCXF1ZXVlX3dvcmsoc3lzdGVtX2hpZ2hwcmlfd3EsICZ3 ZGV2LT5oaWYuYmgpOwotfQotCi0vKgotICogSWYgSVJRIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMg ZnVuY3Rpb24gYWxsb3cgdG8gbWFudWFsbHkgcG9sbCB0aGUgY29udHJvbAotICogcmVnaXN0ZXIg YW5kIHNpbXVsYXRlIGFuIElSUSBhaGVuIGFuIGV2ZW50IGhhcHBlbmVkLgotICoKLSAqIE5vdGUg dGhhdCB0aGUgZGV2aWNlIGhhcyBhIGJ1ZzogSWYgYW4gSVJRIHJhaXNlIHdoaWxlIGhvc3QgcmVh ZCBjb250cm9sCi0gKiByZWdpc3RlciwgdGhlIElSUSBpcyBsb3N0LiBTbywgdXNlIHRoaXMgZnVu Y3Rpb24gY2FyZWZ1bGx5IChvbmx5IGR1aW5nCi0gKiBkZXZpY2UgaW5pdGlhbGlzYXRpb24pLgot ICovCi12b2lkIHdmeF9iaF9wb2xsX2lycShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlrdGlt ZV90IG5vdywgc3RhcnQ7Ci0JdTMyIHJlZzsKLQotCVdBUk4oIXdkZXYtPnBvbGxfaXJxLCAidW5l eHBlY3RlZCBJUlEgcG9sbGluZyBjYW4gbWFzayBJUlEiKTsKLQlzdGFydCA9IGt0aW1lX2dldCgp OwotCWZvciAoOzspIHsKLQkJY29udHJvbF9yZWdfcmVhZCh3ZGV2LCAmcmVnKTsKLQkJbm93ID0g a3RpbWVfZ2V0KCk7Ci0JCWlmIChyZWcgJiAweEZGRikKLQkJCWJyZWFrOwotCQlpZiAoa3RpbWVf YWZ0ZXIobm93LCBrdGltZV9hZGRfbXMoc3RhcnQsIDEwMDApKSkgewotCQkJZGV2X2Vycih3ZGV2 LT5kZXYsICJ0aW1lIG91dCB3aGlsZSBwb2xsaW5nIGNvbnRyb2wgcmVnaXN0ZXJcbiIpOwotCQkJ cmV0dXJuOwotCQl9Ci0JCXVkZWxheSgyMDApOwotCX0KLQl3ZnhfYmhfcmVxdWVzdF9yeCh3ZGV2 KTsKLX0KLQotdm9pZCB3ZnhfYmhfcmVnaXN0ZXIoc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0J SU5JVF9XT1JLKCZ3ZGV2LT5oaWYuYmgsIGJoX3dvcmspOwotCWluaXRfY29tcGxldGlvbigmd2Rl di0+aGlmLmN0cmxfcmVhZHkpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJndkZXYtPmhpZi50eF9i dWZmZXJzX2VtcHR5KTsKLX0KLQotdm9pZCB3ZnhfYmhfdW5yZWdpc3RlcihzdHJ1Y3Qgd2Z4X2Rl diAqd2RldikKLXsKLQlmbHVzaF93b3JrKCZ3ZGV2LT5oaWYuYmgpOwotfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5oCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGM0OTMyOWUyMmEuLjAwMDAwMDAwMDAwMAotLS0g YS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBA Ci0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogSW50 ZXJydXB0IGJvdHRvbSBoYWxmLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxp Y29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nv bgotICovCi0jaWZuZGVmIFdGWF9CSF9ICi0jZGVmaW5lIFdGWF9CSF9ICi0KLSNpbmNsdWRlIDxs aW51eC9hdG9taWMuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgv d29ya3F1ZXVlLmg+Ci0KLXN0cnVjdCB3ZnhfZGV2OwotCi1zdHJ1Y3Qgd2Z4X2hpZiB7Ci0Jc3Ry dWN0IHdvcmtfc3RydWN0IGJoOwotCXN0cnVjdCBjb21wbGV0aW9uIGN0cmxfcmVhZHk7Ci0Jd2Fp dF9xdWV1ZV9oZWFkX3QgdHhfYnVmZmVyc19lbXB0eTsKLQlhdG9taWNfdCBjdHJsX3JlZzsKLQlp bnQgcnhfc2VxbnVtOwotCWludCB0eF9zZXFudW07Ci0JaW50IHR4X2J1ZmZlcnNfdXNlZDsKLX07 Ci0KLXZvaWQgd2Z4X2JoX3JlZ2lzdGVyKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKLXZvaWQgd2Z4 X2JoX3VucmVnaXN0ZXIoc3RydWN0IHdmeF9kZXYgKndkZXYpOwotdm9pZCB3ZnhfYmhfcmVxdWVz dF9yeChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7Ci12b2lkIHdmeF9iaF9yZXF1ZXN0X3R4KHN0cnVj dCB3ZnhfZGV2ICp3ZGV2KTsKLXZvaWQgd2Z4X2JoX3BvbGxfaXJxKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2KTsKLQotI2VuZGlmIC8qIFdGWF9CSF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L2J1cy5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9idXMuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggY2EwNGIzZGE2MjA0Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9z dGFnaW5nL3dmeC9idXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBDb21tb24gYnVzIGFi c3RyYWN0aW9uIGxheWVyLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29u IExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nvbgot ICovCi0jaWZuZGVmIFdGWF9CVVNfSAotI2RlZmluZSBXRlhfQlVTX0gKLQotI2luY2x1ZGUgPGxp bnV4L21tYy9zZGlvX2Z1bmMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0KLSNkZWZp bmUgV0ZYX1JFR19DT05GSUcgICAgICAgIDB4MAotI2RlZmluZSBXRlhfUkVHX0NPTlRST0wgICAg ICAgMHgxCi0jZGVmaW5lIFdGWF9SRUdfSU5fT1VUX1FVRVVFICAweDIKLSNkZWZpbmUgV0ZYX1JF R19BSEJfRFBPUlQgICAgIDB4MwotI2RlZmluZSBXRlhfUkVHX0JBU0VfQUREUiAgICAgMHg0Ci0j ZGVmaW5lIFdGWF9SRUdfU1JBTV9EUE9SVCAgICAweDUKLSNkZWZpbmUgV0ZYX1JFR19TRVRfR0VO X1JfVyAgIDB4NgotI2RlZmluZSBXRlhfUkVHX0ZSQU1FX09VVCAgICAgMHg3Ci0KLXN0cnVjdCBo d2J1c19vcHMgewotCWludCAoKmNvcHlfZnJvbV9pbykodm9pZCAqYnVzX3ByaXYsIHVuc2lnbmVk IGludCBhZGRyLAotCQkJICAgIHZvaWQgKmRzdCwgc2l6ZV90IGNvdW50KTsKLQlpbnQgKCpjb3B5 X3RvX2lvKSh2b2lkICpidXNfcHJpdiwgdW5zaWduZWQgaW50IGFkZHIsCi0JCQkgIGNvbnN0IHZv aWQgKnNyYywgc2l6ZV90IGNvdW50KTsKLQlpbnQgKCppcnFfc3Vic2NyaWJlKSh2b2lkICpidXNf cHJpdik7Ci0JaW50ICgqaXJxX3Vuc3Vic2NyaWJlKSh2b2lkICpidXNfcHJpdik7Ci0Jdm9pZCAo KmxvY2spKHZvaWQgKmJ1c19wcml2KTsKLQl2b2lkICgqdW5sb2NrKSh2b2lkICpidXNfcHJpdik7 Ci0Jc2l6ZV90ICgqYWxpZ25fc2l6ZSkodm9pZCAqYnVzX3ByaXYsIHNpemVfdCBzaXplKTsKLX07 Ci0KLWV4dGVybiBzdHJ1Y3Qgc2Rpb19kcml2ZXIgd2Z4X3NkaW9fZHJpdmVyOwotZXh0ZXJuIHN0 cnVjdCBzcGlfZHJpdmVyIHdmeF9zcGlfZHJpdmVyOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy93ZngvYnVzX3NkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3Nk aW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2ZDdlMWViZTljLi4wMDAwMDAw MDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9idXNfc2Rpby5jCisrKyAvZGV2L251bGwK QEAgLTEsMjY5ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkKLS8qCi0gKiBTRElPIGludGVyZmFjZS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAy MCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1Qt RXJpY3Nzb24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4 L21tYy9zZGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgotI2luY2x1ZGUg PGxpbnV4L21tYy9jYXJkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVk ZSA8bGludXgvb2ZfaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLSNpbmNsdWRlICJi dXMuaCIKLSNpbmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJod2lvLmgiCi0jaW5jbHVkZSAibWFp bi5oIgotI2luY2x1ZGUgImJoLmgiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3Jt X2RhdGEgd2Z4X3NkaW9fcGRhdGEgPSB7Ci0JLmZpbGVfZncgPSAid2ZtX3dmMjAwIiwKLQkuZmls ZV9wZHMgPSAid2YyMDAucGRzIiwKLX07Ci0KLXN0cnVjdCB3Znhfc2Rpb19wcml2IHsKLQlzdHJ1 Y3Qgc2Rpb19mdW5jICpmdW5jOwotCXN0cnVjdCB3ZnhfZGV2ICpjb3JlOwotCXU4IGJ1Zl9pZF90 eDsKLQl1OCBidWZfaWRfcng7Ci0JaW50IG9mX2lycTsKLX07Ci0KLXN0YXRpYyBpbnQgd2Z4X3Nk aW9fY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCByZWdfaWQsCi0JCQkJIHZv aWQgKmRzdCwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBw cml2OwotCXVuc2lnbmVkIGludCBzZGlvX2FkZHIgPSByZWdfaWQgPDwgMjsKLQlpbnQgcmV0Owot Ci0JV0FSTihyZWdfaWQgPiA3LCAiY2hpcCBvbmx5IGhhcyA3IHJlZ2lzdGVycyIpOwotCVdBUk4o KCh1aW50cHRyX3QpZHN0KSAmIDMsICJ1bmFsaWduZWQgYnVmZmVyIHNpemUiKTsKLQlXQVJOKGNv dW50ICYgMywgInVuYWxpZ25lZCBidWZmZXIgYWRkcmVzcyIpOwotCi0JLyogVXNlIHF1ZXVlIG1v ZGUgYnVmZmVycyAqLwotCWlmIChyZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRfUVVFVUUpCi0JCXNk aW9fYWRkciB8PSAoYnVzLT5idWZfaWRfcnggKyAxKSA8PCA3OwotCXJldCA9IHNkaW9fbWVtY3B5 X2Zyb21pbyhidXMtPmZ1bmMsIGRzdCwgc2Rpb19hZGRyLCBjb3VudCk7Ci0JaWYgKCFyZXQgJiYg cmVnX2lkID09IFdGWF9SRUdfSU5fT1VUX1FVRVVFKQotCQlidXMtPmJ1Zl9pZF9yeCA9IChidXMt PmJ1Zl9pZF9yeCArIDEpICUgNDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4 X3NkaW9fY29weV90b19pbyh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgcmVnX2lkLAotCQkJICAg ICAgIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB3Znhfc2Rpb19w cml2ICpidXMgPSBwcml2OwotCXVuc2lnbmVkIGludCBzZGlvX2FkZHIgPSByZWdfaWQgPDwgMjsK LQlpbnQgcmV0OwotCi0JV0FSTihyZWdfaWQgPiA3LCAiY2hpcCBvbmx5IGhhcyA3IHJlZ2lzdGVy cyIpOwotCVdBUk4oKCh1aW50cHRyX3Qpc3JjKSAmIDMsICJ1bmFsaWduZWQgYnVmZmVyIHNpemUi KTsKLQlXQVJOKGNvdW50ICYgMywgInVuYWxpZ25lZCBidWZmZXIgYWRkcmVzcyIpOwotCi0JLyog VXNlIHF1ZXVlIG1vZGUgYnVmZmVycyAqLwotCWlmIChyZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRf UVVFVUUpCi0JCXNkaW9fYWRkciB8PSBidXMtPmJ1Zl9pZF90eCA8PCA3OwotCS8vIEZJWE1FOiBk aXNjYXJkcyAnY29uc3QnIHF1YWxpZmllciBmb3Igc3JjCi0JcmV0ID0gc2Rpb19tZW1jcHlfdG9p byhidXMtPmZ1bmMsIHNkaW9fYWRkciwgKHZvaWQgKilzcmMsIGNvdW50KTsKLQlpZiAoIXJldCAm JiByZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRfUVVFVUUpCi0JCWJ1cy0+YnVmX2lkX3R4ID0gKGJ1 cy0+YnVmX2lkX3R4ICsgMSkgJSAzMjsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lk IHdmeF9zZGlvX2xvY2sodm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVz ID0gcHJpdjsKLQotCXNkaW9fY2xhaW1faG9zdChidXMtPmZ1bmMpOwotfQotCi1zdGF0aWMgdm9p ZCB3Znhfc2Rpb191bmxvY2sodm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAq YnVzID0gcHJpdjsKLQotCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+ZnVuYyk7Ci19Ci0KLXN0YXRp YyB2b2lkIHdmeF9zZGlvX2lycV9oYW5kbGVyKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCi17Ci0J c3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cyA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7Ci0KLQl3 ZnhfYmhfcmVxdWVzdF9yeChidXMtPmNvcmUpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3Qgd2Z4 X3NkaW9faXJxX2hhbmRsZXJfZXh0KGludCBpcnEsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IHdm eF9zZGlvX3ByaXYgKmJ1cyA9IHByaXY7Ci0KLQlzZGlvX2NsYWltX2hvc3QoYnVzLT5mdW5jKTsK LQl3ZnhfYmhfcmVxdWVzdF9yeChidXMtPmNvcmUpOwotCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+ ZnVuYyk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IHdmeF9zZGlvX2ly cV9zdWJzY3JpYmUodm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0g cHJpdjsKLQl1MzIgZmxhZ3M7Ci0JaW50IHJldDsKLQl1OCBjY2NyOwotCi0JaWYgKCFidXMtPm9m X2lycSkgewotCQlzZGlvX2NsYWltX2hvc3QoYnVzLT5mdW5jKTsKLQkJcmV0ID0gc2Rpb19jbGFp bV9pcnEoYnVzLT5mdW5jLCB3Znhfc2Rpb19pcnFfaGFuZGxlcik7Ci0JCXNkaW9fcmVsZWFzZV9o b3N0KGJ1cy0+ZnVuYyk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jc2Rpb19jbGFpbV9ob3N0KGJ1 cy0+ZnVuYyk7Ci0JY2NjciA9IHNkaW9fZjBfcmVhZGIoYnVzLT5mdW5jLCBTRElPX0NDQ1JfSUVO eCwgTlVMTCk7Ci0JY2NjciB8PSBCSVQoMCk7Ci0JY2NjciB8PSBCSVQoYnVzLT5mdW5jLT5udW0p OwotCXNkaW9fZjBfd3JpdGViKGJ1cy0+ZnVuYywgY2NjciwgU0RJT19DQ0NSX0lFTngsIE5VTEwp OwotCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+ZnVuYyk7Ci0JZmxhZ3MgPSBpcnFfZ2V0X3RyaWdn ZXJfdHlwZShidXMtPm9mX2lycSk7Ci0JaWYgKCFmbGFncykKLQkJZmxhZ3MgPSBJUlFGX1RSSUdH RVJfSElHSDsKLQlmbGFncyB8PSBJUlFGX09ORVNIT1Q7Ci0JcmV0dXJuIGRldm1fcmVxdWVzdF90 aHJlYWRlZF9pcnEoJmJ1cy0+ZnVuYy0+ZGV2LCBidXMtPm9mX2lycSwgTlVMTCwKLQkJCQkJIHdm eF9zZGlvX2lycV9oYW5kbGVyX2V4dCwgZmxhZ3MsCi0JCQkJCSAid2Z4IiwgYnVzKTsKLX0KLQot c3RhdGljIGludCB3Znhfc2Rpb19pcnFfdW5zdWJzY3JpYmUodm9pZCAqcHJpdikKLXsKLQlzdHJ1 Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gcHJpdjsKLQlpbnQgcmV0OwotCi0JaWYgKGJ1cy0+b2Zf aXJxKQotCQlkZXZtX2ZyZWVfaXJxKCZidXMtPmZ1bmMtPmRldiwgYnVzLT5vZl9pcnEsIGJ1cyk7 Ci0Jc2Rpb19jbGFpbV9ob3N0KGJ1cy0+ZnVuYyk7Ci0JcmV0ID0gc2Rpb19yZWxlYXNlX2lycShi dXMtPmZ1bmMpOwotCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+ZnVuYyk7Ci0JcmV0dXJuIHJldDsK LX0KLQotc3RhdGljIHNpemVfdCB3Znhfc2Rpb19hbGlnbl9zaXplKHZvaWQgKnByaXYsIHNpemVf dCBzaXplKQotewotCXN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBwcml2OwotCi0JcmV0dXJu IHNkaW9fYWxpZ25fc2l6ZShidXMtPmZ1bmMsIHNpemUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IGh3YnVzX29wcyB3Znhfc2Rpb19od2J1c19vcHMgPSB7Ci0JLmNvcHlfZnJvbV9pbyA9IHdm eF9zZGlvX2NvcHlfZnJvbV9pbywKLQkuY29weV90b19pbyA9IHdmeF9zZGlvX2NvcHlfdG9faW8s Ci0JLmlycV9zdWJzY3JpYmUgPSB3Znhfc2Rpb19pcnFfc3Vic2NyaWJlLAotCS5pcnFfdW5zdWJz Y3JpYmUgPSB3Znhfc2Rpb19pcnFfdW5zdWJzY3JpYmUsCi0JLmxvY2sJCQk9IHdmeF9zZGlvX2xv Y2ssCi0JLnVubG9jawkJCT0gd2Z4X3NkaW9fdW5sb2NrLAotCS5hbGlnbl9zaXplCQk9IHdmeF9z ZGlvX2FsaWduX3NpemUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB3 Znhfc2Rpb19vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAic2lsYWJzLHdmeC1zZGlv IiB9LAotCXsgLmNvbXBhdGlibGUgPSAic2lsYWJzLHdmMjAwIiB9LAotCXsgfSwKLX07Ci1NT0RV TEVfREVWSUNFX1RBQkxFKG9mLCB3Znhfc2Rpb19vZl9tYXRjaCk7Ci0KLXN0YXRpYyBpbnQgd2Z4 X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywKLQkJCSAgY29uc3Qgc3RydWN0IHNk aW9fZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZnVuYy0+ZGV2 Lm9mX25vZGU7Ci0Jc3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1czsKLQlpbnQgcmV0OwotCi0JaWYg KGZ1bmMtPm51bSAhPSAxKSB7Ci0JCWRldl9lcnIoJmZ1bmMtPmRldiwgIlNESU8gZnVuY3Rpb24g bnVtYmVyIGlzICVkIHdoaWxlIGl0IHNob3VsZCBhbHdheXMgYmUgMSAodW5zdXBwb3J0ZWQgY2hp cD8pXG4iLAotCQkJZnVuYy0+bnVtKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JYnVzID0g ZGV2bV9remFsbG9jKCZmdW5jLT5kZXYsIHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFidXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKG5wKSB7Ci0JCWlmICghb2ZfbWF0Y2hf bm9kZSh3Znhfc2Rpb19vZl9tYXRjaCwgbnApKSB7Ci0JCQlkZXZfd2FybigmZnVuYy0+ZGV2LCAi bm8gY29tcGF0aWJsZSBkZXZpY2UgZm91bmQgaW4gRFRcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7 Ci0JCX0KLQkJYnVzLT5vZl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7Ci0JfSBl bHNlIHsKLQkJZGV2X3dhcm4oJmZ1bmMtPmRldiwKLQkJCSAiZGV2aWNlIGlzIG5vdCBkZWNsYXJl ZCBpbiBEVCwgZmVhdHVyZXMgd2lsbCBiZSBsaW1pdGVkXG4iKTsKLQkJLy8gRklYTUU6IGlnbm9y ZSBWSUQvUElEIGFuZCBvbmx5IHJlbHkgb24gZGV2aWNlIHRyZWUKLQkJLy8gcmV0dXJuIC1FTk9E RVY7Ci0JfQotCi0JYnVzLT5mdW5jID0gZnVuYzsKLQlzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIGJ1 cyk7Ci0JZnVuYy0+Y2FyZC0+cXVpcmtzIHw9IE1NQ19RVUlSS19MRU5JRU5UX0ZOMCB8Ci0JCQkg ICAgICBNTUNfUVVJUktfQkxLU1pfRk9SX0JZVEVfTU9ERSB8Ci0JCQkgICAgICBNTUNfUVVJUktf QlJPS0VOX0JZVEVfTU9ERV81MTI7Ci0KLQlzZGlvX2NsYWltX2hvc3QoZnVuYyk7Ci0JcmV0ID0g c2Rpb19lbmFibGVfZnVuYyhmdW5jKTsKLQkvLyBCbG9jayBvZiA2NCBieXRlcyBpcyBtb3JlIGVm ZmljaWVudCB0aGFuIDUxMkIgZm9yIGZyYW1lIHNpemVzIDwgNGsKLQlzZGlvX3NldF9ibG9ja19z aXplKGZ1bmMsIDY0KTsKLQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKLQlpZiAocmV0KQotCQln b3RvIGVycjA7Ci0KLQlidXMtPmNvcmUgPSB3ZnhfaW5pdF9jb21tb24oJmZ1bmMtPmRldiwgJndm eF9zZGlvX3BkYXRhLAotCQkJCSAgICAmd2Z4X3NkaW9faHdidXNfb3BzLCBidXMpOwotCWlmICgh YnVzLT5jb3JlKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyMTsKLQl9Ci0KLQlyZXQgPSB3 ZnhfcHJvYmUoYnVzLT5jb3JlKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjE7Ci0KLQlyZXR1cm4g MDsKLQotZXJyMToKLQlzZGlvX2NsYWltX2hvc3QoZnVuYyk7Ci0Jc2Rpb19kaXNhYmxlX2Z1bmMo ZnVuYyk7Ci0Jc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7Ci1lcnIwOgotCXJldHVybiByZXQ7Ci19 Ci0KLXN0YXRpYyB2b2lkIHdmeF9zZGlvX3JlbW92ZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQot ewotCXN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOwot Ci0Jd2Z4X3JlbGVhc2UoYnVzLT5jb3JlKTsKLQlzZGlvX2NsYWltX2hvc3QoZnVuYyk7Ci0Jc2Rp b19kaXNhYmxlX2Z1bmMoZnVuYyk7Ci0Jc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7Ci19Ci0KLSNk ZWZpbmUgU0RJT19WRU5ET1JfSURfU0lMQUJTICAgICAgICAweDAwMDAKLSNkZWZpbmUgU0RJT19E RVZJQ0VfSURfU0lMQUJTX1dGMjAwICAweDEwMDAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19k ZXZpY2VfaWQgd2Z4X3NkaW9faWRzW10gPSB7Ci0JeyBTRElPX0RFVklDRShTRElPX1ZFTkRPUl9J RF9TSUxBQlMsIFNESU9fREVWSUNFX0lEX1NJTEFCU19XRjIwMCkgfSwKLQkvLyBGSVhNRTogaWdu b3JlIFZJRC9QSUQgYW5kIG9ubHkgcmVseSBvbiBkZXZpY2UgdHJlZQotCS8vIHsgU0RJT19ERVZJ Q0UoU0RJT19BTllfSUQsIFNESU9fQU5ZX0lEKSB9LAotCXsgfSwKLX07Ci1NT0RVTEVfREVWSUNF X1RBQkxFKHNkaW8sIHdmeF9zZGlvX2lkcyk7Ci0KLXN0cnVjdCBzZGlvX2RyaXZlciB3Znhfc2Rp b19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAid2Z4LXNkaW8iLAotCS5pZF90YWJsZSA9IHdmeF9zZGlv X2lkcywKLQkucHJvYmUgPSB3Znhfc2Rpb19wcm9iZSwKLQkucmVtb3ZlID0gd2Z4X3NkaW9fcmVt b3ZlLAotCS5kcnYgPSB7Ci0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCQkub2ZfbWF0Y2hfdGFi bGUgPSB3Znhfc2Rpb19vZl9tYXRjaCwKLQl9Ci19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFn aW5nL3dmeC9idXNfc3BpLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2J1c19zcGkuYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk5MTI1ZDFhMzBkLi4wMDAwMDAwMDAwMDAKLS0tIGEv ZHJpdmVycy9zdGFnaW5nL3dmeC9idXNfc3BpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAs MCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIFNQ SSBpbnRlcmZhY2UuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIFNhZ3JhZCBJbmMuCi0gKiBD b3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29u c3VtZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50 ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4K LQotI2luY2x1ZGUgImJ1cy5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImh3aW8uaCIK LSNpbmNsdWRlICJtYWluLmgiCi0jaW5jbHVkZSAiYmguaCIKLQotI2RlZmluZSBTRVRfV1JJVEUg MHg3RkZGICAgICAgICAvKiB1c2FnZTogYW5kIG9wZXJhdGlvbiAqLwotI2RlZmluZSBTRVRfUkVB RCAweDgwMDAgICAgICAgICAvKiB1c2FnZTogb3Igb3BlcmF0aW9uICovCi0KLSNkZWZpbmUgV0ZY X1JFU0VUX0lOVkVSVEVEIDEKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0 YSB3Znhfc3BpX3BkYXRhID0gewotCS5maWxlX2Z3ID0gIndmbV93ZjIwMCIsCi0JLmZpbGVfcGRz ID0gIndmMjAwLnBkcyIsCi0JLnVzZV9yaXNpbmdfY2xrID0gdHJ1ZSwKLX07Ci0KLXN0cnVjdCB3 Znhfc3BpX3ByaXYgewotCXN0cnVjdCBzcGlfZGV2aWNlICpmdW5jOwotCXN0cnVjdCB3ZnhfZGV2 ICpjb3JlOwotCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9fcmVzZXQ7Ci0JYm9vbCBuZWVkX3N3YWI7 Ci19OwotCi0vKgotICogV0Z4IGNoaXAgcmVhZCBkYXRhIDE2Yml0cyBhdCB0aW1lIGFuZCBwbGFj ZSB0aGVtIGRpcmVjdGx5IGludG8gKGxpdHRsZQotICogZW5kaWFuKSBDUFUgcmVnaXN0ZXIuIFNv LCBjaGlwIGV4cGVjdCBieXRlIG9yZGVyIGxpa2UgIkIxIEIwIEIzIEIyIiAod2hpbGUKLSAqIExF IGlzICJCMCBCMSBCMiBCMyIgYW5kIEJFIGlzICJCMyBCMiBCMSBCMCIpCi0gKgotICogQSBsaXR0 bGUgZW5kaWFuIGhvc3Qgd2l0aCBiaXRzX3Blcl93b3JkID09IDE2IHNob3VsZCBkbyB0aGUgcmln aHQgam9iCi0gKiBuYXRpdmVseS4gVGhlIGNvZGUgYmVsb3cgdG8gc3VwcG9ydCBiaWcgZW5kaWFu IGhvc3QgYW5kIGNvbW1vbmx5IHVzZWQgU1BJCi0gKiA4Yml0cy4KLSAqLwotc3RhdGljIGludCB3 Znhfc3BpX2NvcHlfZnJvbV9pbyh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgYWRkciwKLQkJCQl2 b2lkICpkc3QsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXMgPSBw cml2OwotCXUxNiByZWdhZGRyID0gKGFkZHIgPDwgMTIpIHwgKGNvdW50IC8gMikgfCBTRVRfUkVB RDsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgICAgICBtOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgICAg IHRfYWRkciA9IHsKLQkJLnR4X2J1ZiAgICAgICAgID0gJnJlZ2FkZHIsCi0JCS5sZW4gICAgICAg ICAgICA9IHNpemVvZihyZWdhZGRyKSwKLQl9OwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgICAgIHRf bXNnID0gewotCQkucnhfYnVmICAgICAgICAgPSBkc3QsCi0JCS5sZW4gICAgICAgICAgICA9IGNv dW50LAotCX07Ci0JdTE2ICpkc3QxNiA9IGRzdDsKLQlpbnQgcmV0LCBpOwotCi0JV0FSTihjb3Vu dCAlIDIsICJidWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMiIpOwotCi0JY3B1X3Rv X2xlMTZzKCZyZWdhZGRyKTsKLQlpZiAoYnVzLT5uZWVkX3N3YWIpCi0JCXN3YWIxNnMoJnJlZ2Fk ZHIpOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRf YWRkciwgJm0pOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0X21zZywgJm0pOwotCXJldCA9IHNw aV9zeW5jKGJ1cy0+ZnVuYywgJm0pOwotCi0JaWYgKGJ1cy0+bmVlZF9zd2FiICYmIGFkZHIgPT0g V0ZYX1JFR19DT05GSUcpCi0JCWZvciAoaSA9IDA7IGkgPCBjb3VudCAvIDI7IGkrKykKLQkJCXN3 YWIxNnMoJmRzdDE2W2ldKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdmeF9zcGlf Y29weV90b19pbyh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgYWRkciwKLQkJCSAgICAgIGNvbnN0 IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9 IHByaXY7Ci0JdTE2IHJlZ2FkZHIgPSAoYWRkciA8PCAxMikgfCAoY291bnQgLyAyKTsKLQkvLyBG SVhNRTogdXNlIGEgYm91bmNlIGJ1ZmZlcgotCXUxNiAqc3JjMTYgPSAodm9pZCAqKXNyYzsKLQlp bnQgcmV0LCBpOwotCXN0cnVjdCBzcGlfbWVzc2FnZSAgICAgIG07Ci0Jc3RydWN0IHNwaV90cmFu c2ZlciAgICAgdF9hZGRyID0gewotCQkudHhfYnVmICAgICAgICAgPSAmcmVnYWRkciwKLQkJLmxl biAgICAgICAgICAgID0gc2l6ZW9mKHJlZ2FkZHIpLAotCX07Ci0Jc3RydWN0IHNwaV90cmFuc2Zl ciAgICAgdF9tc2cgPSB7Ci0JCS50eF9idWYgICAgICAgICA9IHNyYywKLQkJLmxlbiAgICAgICAg ICAgID0gY291bnQsCi0JfTsKLQotCVdBUk4oY291bnQgJSAyLCAiYnVmZmVyIHNpemUgbXVzdCBi ZSBhIG11bHRpcGxlIG9mIDIiKTsKLQlXQVJOKHJlZ2FkZHIgJiBTRVRfUkVBRCwgImJhZCBhZGRy IG9yIHNpemUgb3ZlcmZsb3ciKTsKLQotCWNwdV90b19sZTE2cygmcmVnYWRkcik7Ci0KLQkvLyBS ZWdpc3RlciBhZGRyZXNzIGFuZCBDT05GSUcgY29udGVudCBhbHdheXMgdXNlIDE2Yml0IGJpZyBl bmRpYW4KLQkvLyAoIkJBREMiIG9yZGVyKQotCWlmIChidXMtPm5lZWRfc3dhYikKLQkJc3dhYjE2 cygmcmVnYWRkcik7Ci0JaWYgKGJ1cy0+bmVlZF9zd2FiICYmIGFkZHIgPT0gV0ZYX1JFR19DT05G SUcpCi0JCWZvciAoaSA9IDA7IGkgPCBjb3VudCAvIDI7IGkrKykKLQkJCXN3YWIxNnMoJnNyYzE2 W2ldKTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0 X2FkZHIsICZtKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdF9tc2csICZtKTsKLQlyZXQgPSBz cGlfc3luYyhidXMtPmZ1bmMsICZtKTsKLQotCWlmIChidXMtPm5lZWRfc3dhYiAmJiBhZGRyID09 IFdGWF9SRUdfQ09ORklHKQotCQlmb3IgKGkgPSAwOyBpIDwgY291bnQgLyAyOyBpKyspCi0JCQlz d2FiMTZzKCZzcmMxNltpXSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X3Nw aV9sb2NrKHZvaWQgKnByaXYpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF9zcGlfdW5sb2NrKHZv aWQgKnByaXYpCi17Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCB3Znhfc3BpX2lycV9oYW5kbGVy KGludCBpcnEsIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gcHJp djsKLQotCXdmeF9iaF9yZXF1ZXN0X3J4KGJ1cy0+Y29yZSk7Ci0JcmV0dXJuIElSUV9IQU5ETEVE OwotfQotCi1zdGF0aWMgaW50IHdmeF9zcGlfaXJxX3N1YnNjcmliZSh2b2lkICpwcml2KQotewot CXN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9IHByaXY7Ci0JdTMyIGZsYWdzOwotCi0JZmxhZ3Mg PSBpcnFfZ2V0X3RyaWdnZXJfdHlwZShidXMtPmZ1bmMtPmlycSk7Ci0JaWYgKCFmbGFncykKLQkJ ZmxhZ3MgPSBJUlFGX1RSSUdHRVJfSElHSDsKLQlmbGFncyB8PSBJUlFGX09ORVNIT1Q7Ci0JcmV0 dXJuIGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJmJ1cy0+ZnVuYy0+ZGV2LCBidXMtPmZ1bmMt PmlycSwgTlVMTCwKLQkJCQkJIHdmeF9zcGlfaXJxX2hhbmRsZXIsIElSUUZfT05FU0hPVCwKLQkJ CQkJICJ3ZngiLCBidXMpOwotfQotCi1zdGF0aWMgaW50IHdmeF9zcGlfaXJxX3Vuc3Vic2NyaWJl KHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gcHJpdjsKLQotCWRl dm1fZnJlZV9pcnEoJmJ1cy0+ZnVuYy0+ZGV2LCBidXMtPmZ1bmMtPmlycSwgYnVzKTsKLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIHNpemVfdCB3Znhfc3BpX2FsaWduX3NpemUodm9pZCAqcHJpdiwg c2l6ZV90IHNpemUpCi17Ci0JLy8gTW9zdCBvZiBTUEkgY29udHJvbGxlcnMgYXZvaWQgRE1BIGlm IGJ1ZmZlciBzaXplIGlzIG5vdCAzMmJpdCBhbGlnbmVkCi0JcmV0dXJuIEFMSUdOKHNpemUsIDQp OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGh3YnVzX29wcyB3Znhfc3BpX2h3YnVzX29wcyA9 IHsKLQkuY29weV9mcm9tX2lvID0gd2Z4X3NwaV9jb3B5X2Zyb21faW8sCi0JLmNvcHlfdG9faW8g PSB3Znhfc3BpX2NvcHlfdG9faW8sCi0JLmlycV9zdWJzY3JpYmUgPSB3Znhfc3BpX2lycV9zdWJz Y3JpYmUsCi0JLmlycV91bnN1YnNjcmliZSA9IHdmeF9zcGlfaXJxX3Vuc3Vic2NyaWJlLAotCS5s b2NrCQkJPSB3Znhfc3BpX2xvY2ssCi0JLnVubG9jawkJCT0gd2Z4X3NwaV91bmxvY2ssCi0JLmFs aWduX3NpemUJCT0gd2Z4X3NwaV9hbGlnbl9zaXplLAotfTsKLQotc3RhdGljIGludCB3Znhfc3Bp X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jKQotewotCXN0cnVjdCB3Znhfc3BpX3ByaXYg KmJ1czsKLQlpbnQgcmV0OwotCi0JaWYgKCFmdW5jLT5iaXRzX3Blcl93b3JkKQotCQlmdW5jLT5i aXRzX3Blcl93b3JkID0gMTY7Ci0JcmV0ID0gc3BpX3NldHVwKGZ1bmMpOwotCWlmIChyZXQpCi0J CXJldHVybiByZXQ7Ci0JLy8gVHJhY2UgYmVsb3cgaXMgYWxzbyBkaXNwbGF5ZWQgYnkgc3BpX3Nl dHVwKCkgaWYgY29tcGlsZWQgd2l0aCBERUJVRwotCWRldl9kYmcoJmZ1bmMtPmRldiwgIlNQSSBw YXJhbXM6IENTPSVkLCBtb2RlPSVkIGJpdHMvd29yZD0lZCBzcGVlZD0lZFxuIiwKLQkJZnVuYy0+ Y2hpcF9zZWxlY3QsIGZ1bmMtPm1vZGUsIGZ1bmMtPmJpdHNfcGVyX3dvcmQsCi0JCWZ1bmMtPm1h eF9zcGVlZF9oeik7Ci0JaWYgKGZ1bmMtPmJpdHNfcGVyX3dvcmQgIT0gMTYgJiYgZnVuYy0+Yml0 c19wZXJfd29yZCAhPSA4KQotCQlkZXZfd2FybigmZnVuYy0+ZGV2LCAidW51c3VhbCBiaXRzL3dv cmQgdmFsdWU6ICVkXG4iLAotCQkJIGZ1bmMtPmJpdHNfcGVyX3dvcmQpOwotCWlmIChmdW5jLT5t YXhfc3BlZWRfaHogPiA1MDAwMDAwMCkKLQkJZGV2X3dhcm4oJmZ1bmMtPmRldiwgIiVkSHogaXMg YSB2ZXJ5IGhpZ2ggc3BlZWRcbiIsCi0JCQkgZnVuYy0+bWF4X3NwZWVkX2h6KTsKLQotCWJ1cyA9 IGRldm1fa3phbGxvYygmZnVuYy0+ZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpOwotCWlm ICghYnVzKQotCQlyZXR1cm4gLUVOT01FTTsKLQlidXMtPmZ1bmMgPSBmdW5jOwotCWlmIChmdW5j LT5iaXRzX3Blcl93b3JkID09IDggfHwgSVNfRU5BQkxFRChDT05GSUdfQ1BVX0JJR19FTkRJQU4p KQotCQlidXMtPm5lZWRfc3dhYiA9IHRydWU7Ci0Jc3BpX3NldF9kcnZkYXRhKGZ1bmMsIGJ1cyk7 Ci0KLQlidXMtPmdwaW9fcmVzZXQgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbCgmZnVuYy0+ZGV2 LCAicmVzZXQiLAotCQkJCQkJICBHUElPRF9PVVRfTE9XKTsKLQlpZiAoSVNfRVJSKGJ1cy0+Z3Bp b19yZXNldCkpCi0JCXJldHVybiBQVFJfRVJSKGJ1cy0+Z3Bpb19yZXNldCk7Ci0JaWYgKCFidXMt PmdwaW9fcmVzZXQpIHsKLQkJZGV2X3dhcm4oJmZ1bmMtPmRldiwKLQkJCSAiZ3BpbyByZXNldCBp cyBub3QgZGVmaW5lZCwgdHJ5aW5nIHRvIGxvYWQgZmlybXdhcmUgYW55d2F5XG4iKTsKLQl9IGVs c2UgewotCQlncGlvZF9zZXRfY29uc3VtZXJfbmFtZShidXMtPmdwaW9fcmVzZXQsICJ3ZnggcmVz ZXQiKTsKLQkJaWYgKHNwaV9nZXRfZGV2aWNlX2lkKGZ1bmMpLT5kcml2ZXJfZGF0YSAmIFdGWF9S RVNFVF9JTlZFUlRFRCkKLQkJCWdwaW9kX3RvZ2dsZV9hY3RpdmVfbG93KGJ1cy0+Z3Bpb19yZXNl dCk7Ci0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtPmdwaW9fcmVzZXQsIDEpOwotCQl1 c2xlZXBfcmFuZ2UoMTAwLCAxNTApOwotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoYnVzLT5n cGlvX3Jlc2V0LCAwKTsKLQkJdXNsZWVwX3JhbmdlKDIwMDAsIDI1MDApOwotCX0KLQotCWJ1cy0+ Y29yZSA9IHdmeF9pbml0X2NvbW1vbigmZnVuYy0+ZGV2LCAmd2Z4X3NwaV9wZGF0YSwKLQkJCQkg ICAgJndmeF9zcGlfaHdidXNfb3BzLCBidXMpOwotCWlmICghYnVzLT5jb3JlKQotCQlyZXR1cm4g LUVJTzsKLQotCXJldHVybiB3ZnhfcHJvYmUoYnVzLT5jb3JlKTsKLX0KLQotc3RhdGljIGludCB3 Znhfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqZnVuYykKLXsKLQlzdHJ1Y3Qgd2Z4X3Nw aV9wcml2ICpidXMgPSBzcGlfZ2V0X2RydmRhdGEoZnVuYyk7Ci0KLQl3ZnhfcmVsZWFzZShidXMt PmNvcmUpOwotCXJldHVybiAwOwotfQotCi0vKgotICogRm9yIGR5bmFtaWMgZHJpdmVyIGJpbmRp bmcsIGtlcm5lbCBkb2VzIG5vdCB1c2UgT0YgdG8gbWF0Y2ggZHJpdmVyLiBJdCBvbmx5Ci0gKiB1 c2UgbW9kYWxpYXMgYW5kIG1vZGFsaWFzIGlzIGEgY29weSBvZiAnY29tcGF0aWJsZScgRFQgbm9k ZSB3aXRoIHZlbmRvcgotICogc3RyaXBwZWQuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3Bp X2RldmljZV9pZCB3Znhfc3BpX2lkW10gPSB7Ci0JeyAid2Z4LXNwaSIsIFdGWF9SRVNFVF9JTlZF UlRFRCB9LAotCXsgIndmMjAwIiwgMCB9LAotCXsgfSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxF KHNwaSwgd2Z4X3NwaV9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfT0YKLXN0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIHdmeF9zcGlfb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0g InNpbGFicyx3Zngtc3BpIiwgLmRhdGEgPSAodm9pZCAqKVdGWF9SRVNFVF9JTlZFUlRFRCB9LAot CXsgLmNvbXBhdGlibGUgPSAic2lsYWJzLHdmMjAwIiB9LAotCXsgfSwKLX07Ci1NT0RVTEVfREVW SUNFX1RBQkxFKG9mLCB3Znhfc3BpX29mX21hdGNoKTsKLSNlbmRpZgotCi1zdHJ1Y3Qgc3BpX2Ry aXZlciB3Znhfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJ3Zngtc3Bp IiwKLQkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHdmeF9zcGlfb2ZfbWF0Y2gpLAot CX0sCi0JLmlkX3RhYmxlID0gd2Z4X3NwaV9pZCwKLQkucHJvYmUgPSB3Znhfc3BpX3Byb2JlLAot CS5yZW1vdmUgPSB3Znhfc3BpX3JlbW92ZSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L2RhdGFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODVmMmQ0MmEwZTIuLjAwMDAwMDAwMDAwMAotLS0gYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguYworKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAg QEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBEYXRh cGF0aCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2ls aWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nz b24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bmV0L21h YzgwMjExLmg+Ci0KLSNpbmNsdWRlICJkYXRhX3J4LmgiCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5j bHVkZSAiYmguaCIKLSNpbmNsdWRlICJzdGEuaCIKLQotc3RhdGljIHZvaWQgd2Z4X3J4X2hhbmRs ZV9iYShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210KQot ewotCWludCBwYXJhbXMsIHRpZDsKLQotCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od3ZpZi0+d2Rl diwgMywgNikpCi0JCXJldHVybjsKLQotCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9y ZXEuYWN0aW9uX2NvZGUpIHsKLQljYXNlIFdMQU5fQUNUSU9OX0FEREJBX1JFUToKLQkJcGFyYW1z ID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIpOwotCQl0aWQg PSAocGFyYW1zICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOwotCQlpZWVl ODAyMTFfc3RhcnRfcnhfYmFfc2Vzc2lvbl9vZmZsKHd2aWYtPnZpZiwgbWdtdC0+c2EsIHRpZCk7 Ci0JCWJyZWFrOwotCWNhc2UgV0xBTl9BQ1RJT05fREVMQkE6Ci0JCXBhcmFtcyA9IGxlMTZfdG9f Y3B1KG1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucGFyYW1zKTsKLQkJdGlkID0gKHBhcmFtcyAmICBJ RUVFODAyMTFfREVMQkFfUEFSQU1fVElEX01BU0spID4+IDEyOwotCQlpZWVlODAyMTFfc3RvcF9y eF9iYV9zZXNzaW9uX29mZmwod3ZpZi0+dmlmLCBtZ210LT5zYSwgdGlkKTsKLQkJYnJlYWs7Ci0J fQotfQotCi12b2lkIHdmeF9yeF9jYihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkgICAgICAgY29u c3Qgc3RydWN0IGhpZl9pbmRfcnggKmFyZywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1 Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqaGRyID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7Ci0J c3RydWN0IGllZWU4MDIxMV9oZHIgKmZyYW1lID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2ti LT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjEx X21nbXQgKilza2ItPmRhdGE7Ci0KLQltZW1zZXQoaGRyLCAwLCBzaXplb2YoKmhkcikpOwotCi0J aWYgKGFyZy0+c3RhdHVzID09IEhJRl9TVEFUVVNfUlhfRkFJTF9NSUMpCi0JCWhkci0+ZmxhZyB8 PSBSWF9GTEFHX01NSUNfRVJST1IgfCBSWF9GTEFHX0lWX1NUUklQUEVEOwotCWVsc2UgaWYgKGFy Zy0+c3RhdHVzKQotCQlnb3RvIGRyb3A7Ci0KLQlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0 IGllZWU4MDIxMV9wc3BvbGwpKSB7Ci0JCWRldl93YXJuKHd2aWYtPndkZXYtPmRldiwgIm1hbGZv cm1lZCBTRFUgcmVjZWl2ZWRcbiIpOwotCQlnb3RvIGRyb3A7Ci0JfQotCi0JaGRyLT5iYW5kID0g Tkw4MDIxMV9CQU5EXzJHSFo7Ci0JaGRyLT5mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJl cXVlbmN5KGFyZy0+Y2hhbm5lbF9udW1iZXIsCi0JCQkJCQkgICBoZHItPmJhbmQpOwotCi0JaWYg KGFyZy0+cnhlZF9yYXRlID49IDE0KSB7Ci0JCWhkci0+ZW5jb2RpbmcgPSBSWF9FTkNfSFQ7Ci0J CWhkci0+cmF0ZV9pZHggPSBhcmctPnJ4ZWRfcmF0ZSAtIDE0OwotCX0gZWxzZSBpZiAoYXJnLT5y eGVkX3JhdGUgPj0gNCkgewotCQloZHItPnJhdGVfaWR4ID0gYXJnLT5yeGVkX3JhdGUgLSAyOwot CX0gZWxzZSB7Ci0JCWhkci0+cmF0ZV9pZHggPSBhcmctPnJ4ZWRfcmF0ZTsKLQl9Ci0KLQlpZiAo IWFyZy0+cmNwaV9yc3NpKSB7Ci0JCWhkci0+ZmxhZyB8PSBSWF9GTEFHX05PX1NJR05BTF9WQUw7 Ci0JCWRldl9pbmZvKHd2aWYtPndkZXYtPmRldiwgInJlY2VpdmVkIGZyYW1lIHdpdGhvdXQgUlNT SSBkYXRhXG4iKTsKLQl9Ci0JaGRyLT5zaWduYWwgPSBhcmctPnJjcGlfcnNzaSAvIDIgLSAxMTA7 Ci0JaGRyLT5hbnRlbm5hID0gMDsKLQotCWlmIChhcmctPmVuY3J5cCkKLQkJaGRyLT5mbGFnIHw9 IFJYX0ZMQUdfREVDUllQVEVEOwotCi0JLy8gQmxvY2sgYWNrIG5lZ290aWF0aW9uIGlzIG9mZmxv YWRlZCBieSB0aGUgZmlybXdhcmUuIEhvd2V2ZXIsCi0JLy8gcmUtb3JkZXJpbmcgbXVzdCBiZSBk b25lIGJ5IHRoZSBtYWM4MDIxMS4KLQlpZiAoaWVlZTgwMjExX2lzX2FjdGlvbihmcmFtZS0+ZnJh bWVfY29udHJvbCkgJiYKLQkgICAgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRF R09SWV9CQUNLICYmCi0JICAgIHNrYi0+bGVuID4gSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSkg ewotCQl3ZnhfcnhfaGFuZGxlX2JhKHd2aWYsIG1nbXQpOwotCQlnb3RvIGRyb3A7Ci0JfQotCi0J aWVlZTgwMjExX3J4X2lycXNhZmUod3ZpZi0+d2Rldi0+aHcsIHNrYik7Ci0JcmV0dXJuOwotCi1k cm9wOgotCWRldl9rZnJlZV9za2Ioc2tiKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2lu Zy93ZngvZGF0YV9yeC5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmgKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMGRhMzdmMjA4NC4uMDAwMDAwMDAwMDAwCi0tLSBhL2Ry aXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBA QAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIERh dGFwYXRoIGltcGxlbWVudGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBT aWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmlj c3NvbgotICovCi0jaWZuZGVmIFdGWF9EQVRBX1JYX0gKLSNkZWZpbmUgV0ZYX0RBVEFfUlhfSAot Ci1zdHJ1Y3Qgd2Z4X3ZpZjsKLXN0cnVjdCBza19idWZmOwotc3RydWN0IGhpZl9pbmRfcng7Ci0K LXZvaWQgd2Z4X3J4X2NiKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCSAgICAgICBjb25zdCBzdHJ1 Y3QgaGlmX2luZF9yeCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotI2VuZGlmIC8qIFdG WF9EQVRBX1JYX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5j IGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDM2YjM2ZWYzOWQwNS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93 ZngvZGF0YV90eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTg1ICswLDAgQEAKLS8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBEYXRhcGF0aCBpbXBsZW1lbnRh dGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3Jp ZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2luY2x1 ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0KLSNp bmNsdWRlICJkYXRhX3R4LmgiCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAiYmguaCIKLSNp bmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJxdWV1ZS5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0j aW5jbHVkZSAidHJhY2VzLmgiCi0jaW5jbHVkZSAiaGlmX3R4X21pYi5oIgotCi1zdGF0aWMgaW50 IHdmeF9nZXRfaHdfcmF0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCSAgIGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRl ZF9iYW5kICpiYW5kOwotCi0JaWYgKHJhdGUtPmlkeCA8IDApCi0JCXJldHVybiAtMTsKLQlpZiAo cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSB7Ci0JCWlmIChyYXRlLT5pZHggPiA3 KSB7Ci0JCQlXQVJOKDEsICJ3cm9uZyByYXRlLT5pZHggdmFsdWU6ICVkIiwgcmF0ZS0+aWR4KTsK LQkJCXJldHVybiAtMTsKLQkJfQotCQlyZXR1cm4gcmF0ZS0+aWR4ICsgMTQ7Ci0JfQotCS8vIFdG eCBvbmx5IHN1cHBvcnQgMkdIeiwgZWxzZSBiYW5kIGluZm9ybWF0aW9uIHNob3VsZCBiZSByZXRy aWV2ZWQKLQkvLyBmcm9tIGllZWU4MDIxMV90eF9pbmZvCi0JYmFuZCA9IHdkZXYtPmh3LT53aXBo eS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdOwotCWlmIChyYXRlLT5pZHggPj0gYmFuZC0+bl9i aXRyYXRlcykgewotCQlXQVJOKDEsICJ3cm9uZyByYXRlLT5pZHggdmFsdWU6ICVkIiwgcmF0ZS0+ aWR4KTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gYmFuZC0+Yml0cmF0ZXNbcmF0ZS0+aWR4 XS5od192YWx1ZTsKLX0KLQotLyogVFggcG9saWN5IGNhY2hlIGltcGxlbWVudGF0aW9uICovCi0K LXN0YXRpYyB2b2lkIHdmeF90eF9wb2xpY3lfYnVpbGQoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0 cnVjdCB0eF9wb2xpY3kgKnBvbGljeSwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJh dGVzKQotewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3ZpZi0+d2RldjsKLQlpbnQgaSwgcmF0 ZWlkOwotCXU4IGNvdW50OwotCi0JV0FSTihyYXRlc1swXS5pZHggPCAwLCAiaW52YWxpZCByYXRl IHBvbGljeSIpOwotCW1lbXNldChwb2xpY3ksIDAsIHNpemVvZigqcG9saWN5KSk7Ci0JZm9yIChp ID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7ICsraSkgewotCQlpZiAocmF0ZXNbaV0u aWR4IDwgMCkKLQkJCWJyZWFrOwotCQlXQVJOX09OKHJhdGVzW2ldLmNvdW50ID4gMTUpOwotCQly YXRlaWQgPSB3ZnhfZ2V0X2h3X3JhdGUod2RldiwgJnJhdGVzW2ldKTsKLQkJLy8gUGFjayB0d28g dmFsdWVzIGluIGVhY2ggYnl0ZSBvZiBwb2xpY3ktPnJhdGVzCi0JCWNvdW50ID0gcmF0ZXNbaV0u Y291bnQ7Ci0JCWlmIChyYXRlaWQgJSAyKQotCQkJY291bnQgPDw9IDQ7Ci0JCXBvbGljeS0+cmF0 ZXNbcmF0ZWlkIC8gMl0gfD0gY291bnQ7Ci0JfQotfQotCi1zdGF0aWMgYm9vbCB0eF9wb2xpY3lf aXNfZXF1YWwoY29uc3Qgc3RydWN0IHR4X3BvbGljeSAqYSwKLQkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgdHhfcG9saWN5ICpiKQotewotCXJldHVybiAhbWVtY21wKGEtPnJhdGVzLCBiLT5yYXRlcywg c2l6ZW9mKGEtPnJhdGVzKSk7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3R4X3BvbGljeV9maW5kKHN0 cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlLAotCQkJICAgICAgc3RydWN0IHR4X3BvbGljeSAq d2FudGVkKQotewotCXN0cnVjdCB0eF9wb2xpY3kgKml0OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRy eShpdCwgJmNhY2hlLT51c2VkLCBsaW5rKQotCQlpZiAodHhfcG9saWN5X2lzX2VxdWFsKHdhbnRl ZCwgaXQpKQotCQkJcmV0dXJuIGl0IC0gY2FjaGUtPmNhY2hlOwotCWxpc3RfZm9yX2VhY2hfZW50 cnkoaXQsICZjYWNoZS0+ZnJlZSwgbGluaykKLQkJaWYgKHR4X3BvbGljeV9pc19lcXVhbCh3YW50 ZWQsIGl0KSkKLQkJCXJldHVybiBpdCAtIGNhY2hlLT5jYWNoZTsKLQlyZXR1cm4gLTE7Ci19Ci0K LXN0YXRpYyB2b2lkIHdmeF90eF9wb2xpY3lfdXNlKHN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNh Y2hlLAotCQkJICAgICAgc3RydWN0IHR4X3BvbGljeSAqZW50cnkpCi17Ci0JKytlbnRyeS0+dXNh Z2VfY291bnQ7Ci0JbGlzdF9tb3ZlKCZlbnRyeS0+bGluaywgJmNhY2hlLT51c2VkKTsKLX0KLQot c3RhdGljIGludCB3ZnhfdHhfcG9saWN5X3JlbGVhc2Uoc3RydWN0IHR4X3BvbGljeV9jYWNoZSAq Y2FjaGUsCi0JCQkJIHN0cnVjdCB0eF9wb2xpY3kgKmVudHJ5KQotewotCWludCByZXQgPSAtLWVu dHJ5LT51c2FnZV9jb3VudDsKLQotCWlmICghcmV0KQotCQlsaXN0X21vdmUoJmVudHJ5LT5saW5r LCAmY2FjaGUtPmZyZWUpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3R4X3Bv bGljeV9nZXQoc3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFf dHhfcmF0ZSAqcmF0ZXMsIGJvb2wgKnJlbmV3KQotewotCWludCBpZHg7Ci0Jc3RydWN0IHR4X3Bv bGljeV9jYWNoZSAqY2FjaGUgPSAmd3ZpZi0+dHhfcG9saWN5X2NhY2hlOwotCXN0cnVjdCB0eF9w b2xpY3kgd2FudGVkOwotCi0Jd2Z4X3R4X3BvbGljeV9idWlsZCh3dmlmLCAmd2FudGVkLCByYXRl cyk7Ci0KLQlzcGluX2xvY2tfYmgoJmNhY2hlLT5sb2NrKTsKLQlpZiAobGlzdF9lbXB0eSgmY2Fj aGUtPmZyZWUpKSB7Ci0JCVdBUk4oMSwgInVuYWJsZSB0byBnZXQgYSB2YWxpZCBUeCBwb2xpY3ki KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsKLQkJcmV0dXJuIEhJRl9UWF9SRVRS WV9QT0xJQ1lfSU5WQUxJRDsKLQl9Ci0JaWR4ID0gd2Z4X3R4X3BvbGljeV9maW5kKGNhY2hlLCAm d2FudGVkKTsKLQlpZiAoaWR4ID49IDApIHsKLQkJKnJlbmV3ID0gZmFsc2U7Ci0JfSBlbHNlIHsK LQkJc3RydWN0IHR4X3BvbGljeSAqZW50cnk7Ci0JCSpyZW5ldyA9IHRydWU7Ci0JCS8qIElmIHBv bGljeSBpcyBub3QgZm91bmQgY3JlYXRlIGEgbmV3IG9uZQotCQkgKiB1c2luZyB0aGUgb2xkZXN0 IGVudHJ5IGluICJmcmVlIiBsaXN0Ci0JCSAqLwotCQllbnRyeSA9IGxpc3RfZW50cnkoY2FjaGUt PmZyZWUucHJldiwgc3RydWN0IHR4X3BvbGljeSwgbGluayk7Ci0JCW1lbWNweShlbnRyeS0+cmF0 ZXMsIHdhbnRlZC5yYXRlcywgc2l6ZW9mKGVudHJ5LT5yYXRlcykpOwotCQllbnRyeS0+dXBsb2Fk ZWQgPSBmYWxzZTsKLQkJZW50cnktPnVzYWdlX2NvdW50ID0gMDsKLQkJaWR4ID0gZW50cnkgLSBj YWNoZS0+Y2FjaGU7Ci0JfQotCXdmeF90eF9wb2xpY3lfdXNlKGNhY2hlLCAmY2FjaGUtPmNhY2hl W2lkeF0pOwotCWlmIChsaXN0X2VtcHR5KCZjYWNoZS0+ZnJlZSkpCi0JCWllZWU4MDIxMV9zdG9w X3F1ZXVlcyh3dmlmLT53ZGV2LT5odyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsK LQlyZXR1cm4gaWR4OwotfQotCi1zdGF0aWMgdm9pZCB3ZnhfdHhfcG9saWN5X3B1dChzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgaW50IGlkeCkKLXsKLQlpbnQgdXNhZ2UsIGxvY2tlZDsKLQlzdHJ1Y3Qg dHhfcG9saWN5X2NhY2hlICpjYWNoZSA9ICZ3dmlmLT50eF9wb2xpY3lfY2FjaGU7Ci0KLQlpZiAo aWR4ID09IEhJRl9UWF9SRVRSWV9QT0xJQ1lfSU5WQUxJRCkKLQkJcmV0dXJuOwotCXNwaW5fbG9j a19iaCgmY2FjaGUtPmxvY2spOwotCWxvY2tlZCA9IGxpc3RfZW1wdHkoJmNhY2hlLT5mcmVlKTsK LQl1c2FnZSA9IHdmeF90eF9wb2xpY3lfcmVsZWFzZShjYWNoZSwgJmNhY2hlLT5jYWNoZVtpZHhd KTsKLQlpZiAobG9ja2VkICYmICF1c2FnZSkKLQkJaWVlZTgwMjExX3dha2VfcXVldWVzKHd2aWYt PndkZXYtPmh3KTsKLQlzcGluX3VubG9ja19iaCgmY2FjaGUtPmxvY2spOwotfQotCi1zdGF0aWMg aW50IHdmeF90eF9wb2xpY3lfdXBsb2FkKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewotCXN0cnVj dCB0eF9wb2xpY3kgKnBvbGljaWVzID0gd3ZpZi0+dHhfcG9saWN5X2NhY2hlLmNhY2hlOwotCXU4 IHRtcF9yYXRlc1sxMl07Ci0JaW50IGksIGlzX3VzZWQ7Ci0KLQlkbyB7Ci0JCXNwaW5fbG9ja19i aCgmd3ZpZi0+dHhfcG9saWN5X2NhY2hlLmxvY2spOwotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRSh3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGUpOyArK2kpIHsKLQkJCWlzX3VzZWQgPSBt ZW16Y21wKHBvbGljaWVzW2ldLnJhdGVzLAotCQkJCQkgIHNpemVvZihwb2xpY2llc1tpXS5yYXRl cykpOwotCQkJaWYgKCFwb2xpY2llc1tpXS51cGxvYWRlZCAmJiBpc191c2VkKQotCQkJCWJyZWFr OwotCQl9Ci0JCWlmIChpIDwgQVJSQVlfU0laRSh3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGUp KSB7Ci0JCQlwb2xpY2llc1tpXS51cGxvYWRlZCA9IHRydWU7Ci0JCQltZW1jcHkodG1wX3JhdGVz LCBwb2xpY2llc1tpXS5yYXRlcywgc2l6ZW9mKHRtcF9yYXRlcykpOwotCQkJc3Bpbl91bmxvY2tf YmgoJnd2aWYtPnR4X3BvbGljeV9jYWNoZS5sb2NrKTsKLQkJCWhpZl9zZXRfdHhfcmF0ZV9yZXRy eV9wb2xpY3kod3ZpZiwgaSwgdG1wX3JhdGVzKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fdW5sb2Nr X2JoKCZ3dmlmLT50eF9wb2xpY3lfY2FjaGUubG9jayk7Ci0JCX0KLQl9IHdoaWxlIChpIDwgQVJS QVlfU0laRSh3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGUpKTsKLQlyZXR1cm4gMDsKLX0KLQot dm9pZCB3ZnhfdHhfcG9saWN5X3VwbG9hZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK LXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qg d2Z4X3ZpZiwgdHhfcG9saWN5X3VwbG9hZF93b3JrKTsKLQotCXdmeF90eF9wb2xpY3lfdXBsb2Fk KHd2aWYpOwotCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7Ci19Ci0KLXZvaWQgd2Z4X3R4X3Bv bGljeV9pbml0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewotCXN0cnVjdCB0eF9wb2xpY3lfY2Fj aGUgKmNhY2hlID0gJnd2aWYtPnR4X3BvbGljeV9jYWNoZTsKLQlpbnQgaTsKLQotCW1lbXNldChj YWNoZSwgMCwgc2l6ZW9mKCpjYWNoZSkpOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5sb2Nr KTsKLQlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPnVzZWQpOwotCUlOSVRfTElTVF9IRUFEKCZjYWNo ZS0+ZnJlZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjYWNoZS0+Y2FjaGUpOyAr K2kpCi0JCWxpc3RfYWRkKCZjYWNoZS0+Y2FjaGVbaV0ubGluaywgJmNhY2hlLT5mcmVlKTsKLX0K LQotLyogVHggaW1wbGVtZW50YXRpb24gKi8KLQotc3RhdGljIGJvb2wgaWVlZTgwMjExX2lzX2Fj dGlvbl9iYWNrKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCi17Ci0Jc3RydWN0IGllZWU4MDIx MV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKWhkcjsKLQotCWlmICghaWVl ZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSkKLQkJcmV0dXJuIGZhbHNlOwot CWlmIChtZ210LT51LmFjdGlvbi5jYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX0JBQ0spCi0JCXJl dHVybiBmYWxzZTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHU4IHdmeF90eF9nZXRfbGlu a19pZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJ CSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKLXsKLQlzdHJ1Y3Qgd2Z4X3N0YV9wcml2 ICpzdGFfcHJpdiA9Ci0JCXN0YSA/IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopJnN0YS0+ZHJ2X3By aXYgOiBOVUxMOwotCWNvbnN0IHU4ICpkYSA9IGllZWU4MDIxMV9nZXRfREEoaGRyKTsKLQotCWlm IChzdGFfcHJpdiAmJiBzdGFfcHJpdi0+bGlua19pZCkKLQkJcmV0dXJuIHN0YV9wcml2LT5saW5r X2lkOwotCWlmICh3dmlmLT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCXJldHVy biAwOwotCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkYSkpCi0JCXJldHVybiAwOwotCXJl dHVybiBISUZfTElOS19JRF9OT1RfQVNTT0NJQVRFRDsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X3R4 X2ZpeHVwX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMpCi17Ci0JaW50IGk7 Ci0JYm9vbCBmaW5pc2hlZDsKLQotCS8vIEZpcm13YXJlIGlzIG5vdCBhYmxlIHRvIG1peCByYXRl cyB3aXRoIGRpZmZlcmVudCBmbGFncwotCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFY X1JBVEVTOyBpKyspIHsKLQkJaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NI T1JUX0dJKQotCQkJcmF0ZXNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOwot CQlpZiAoIShyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkpCi0JCQly YXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOwotCQlpZiAoIShyYXRl c1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykpCi0JCQlyYXRlc1tpXS5m bGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTOwotCX0KLQotCS8vIFNvcnQgcmF0 ZXMgYW5kIHJlbW92ZSBkdXBsaWNhdGVzCi0JZG8gewotCQlmaW5pc2hlZCA9IHRydWU7Ci0JCWZv ciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTIC0gMTsgaSsrKSB7Ci0JCQlpZiAo cmF0ZXNbaSArIDFdLmlkeCA9PSByYXRlc1tpXS5pZHggJiYKLQkJCSAgICByYXRlc1tpXS5pZHgg IT0gLTEpIHsKLQkJCQlyYXRlc1tpXS5jb3VudCArPSByYXRlc1tpICsgMV0uY291bnQ7Ci0JCQkJ aWYgKHJhdGVzW2ldLmNvdW50ID4gMTUpCi0JCQkJCXJhdGVzW2ldLmNvdW50ID0gMTU7Ci0JCQkJ cmF0ZXNbaSArIDFdLmlkeCA9IC0xOwotCQkJCXJhdGVzW2kgKyAxXS5jb3VudCA9IDA7Ci0KLQkJ CQlmaW5pc2hlZCA9IGZhbHNlOwotCQkJfQotCQkJaWYgKHJhdGVzW2kgKyAxXS5pZHggPiByYXRl c1tpXS5pZHgpIHsKLQkJCQlzd2FwKHJhdGVzW2kgKyAxXSwgcmF0ZXNbaV0pOwotCQkJCWZpbmlz aGVkID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQl9IHdoaWxlICghZmluaXNoZWQpOwotCS8vIEVuc3Vy ZSB0aGF0IE1DUzAgb3IgMU1icHMgaXMgcHJlc2VudCBhdCB0aGUgZW5kIG9mIHRoZSByZXRyeSBs aXN0Ci0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgewotCQlp ZiAocmF0ZXNbaV0uaWR4ID09IDApCi0JCQlicmVhazsKLQkJaWYgKHJhdGVzW2ldLmlkeCA9PSAt MSkgewotCQkJcmF0ZXNbaV0uaWR4ID0gMDsKLQkJCXJhdGVzW2ldLmNvdW50ID0gODsgLy8gPT0g aHctPm1heF9yYXRlX3RyaWVzCi0JCQlyYXRlc1tpXS5mbGFncyA9IHJhdGVzW2kgLSAxXS5mbGFn cyAmCi0JCQkJCSBJRUVFODAyMTFfVFhfUkNfTUNTOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JLy8g QWxsIHJldHJpZXMgdXNlIGxvbmcgR0kKLQlmb3IgKGkgPSAxOyBpIDwgSUVFRTgwMjExX1RYX01B WF9SQVRFUzsgaSsrKQotCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVFRTgwMjExX1RYX1JDX1NIT1JU X0dJOwotfQotCi1zdGF0aWMgdTggd2Z4X3R4X2dldF9yYXRlX2lkKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pCi17Ci0JYm9v bCB0eF9wb2xpY3lfcmVuZXcgPSBmYWxzZTsKLQl1OCByYXRlX2lkOwotCi0JcmF0ZV9pZCA9IHdm eF90eF9wb2xpY3lfZ2V0KHd2aWYsCi0JCQkJICAgIHR4X2luZm8tPmRyaXZlcl9yYXRlcywgJnR4 X3BvbGljeV9yZW5ldyk7Ci0JaWYgKHJhdGVfaWQgPT0gSElGX1RYX1JFVFJZX1BPTElDWV9JTlZB TElEKQotCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGEgdmFsaWQg VHggcG9saWN5Iik7Ci0KLQlpZiAodHhfcG9saWN5X3JlbmV3KSB7Ci0JCXdmeF90eF9sb2NrKHd2 aWYtPndkZXYpOwotCQlpZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPnR4X3BvbGljeV91cGxvYWRf d29yaykpCi0JCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOwotCX0KLQlyZXR1cm4gcmF0ZV9p ZDsKLX0KLQotc3RhdGljIGludCB3ZnhfdHhfZ2V0X2ZyYW1lX2Zvcm1hdChzdHJ1Y3QgaWVlZTgw MjExX3R4X2luZm8gKnR4X2luZm8pCi17Ci0JaWYgKCEodHhfaW5mby0+ZHJpdmVyX3JhdGVzWzBd LmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykpCi0JCXJldHVybiBISUZfRlJBTUVfRk9STUFU X05PTl9IVDsKLQllbHNlIGlmICghKHR4X2luZm8tPmRyaXZlcl9yYXRlc1swXS5mbGFncyAmIElF RUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRCkpCi0JCXJldHVybiBISUZfRlJBTUVfRk9STUFUX01J WEVEX0ZPUk1BVF9IVDsKLQllbHNlCi0JCXJldHVybiBISUZfRlJBTUVfRk9STUFUX0dGX0hUXzEx TjsKLX0KLQotc3RhdGljIGludCB3ZnhfdHhfZ2V0X2ljdl9sZW4oc3RydWN0IGllZWU4MDIxMV9r ZXlfY29uZiAqaHdfa2V5KQotewotCWludCBtaWNfc3BhY2U7Ci0KLQlpZiAoIWh3X2tleSkKLQkJ cmV0dXJuIDA7Ci0JaWYgKGh3X2tleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19D TUFDKQotCQlyZXR1cm4gMDsKLQltaWNfc3BhY2UgPSAoaHdfa2V5LT5jaXBoZXIgPT0gV0xBTl9D SVBIRVJfU1VJVEVfVEtJUCkgPyA4IDogMDsKLQlyZXR1cm4gaHdfa2V5LT5pY3ZfbGVuICsgbWlj X3NwYWNlOwotfQotCi1zdGF0aWMgaW50IHdmeF90eF9pbm5lcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp Ziwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJCXN0cnVjdCBza19idWZmICpza2IpCi17 Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZl9tc2c7Ci0Jc3RydWN0IGhpZl9yZXFfdHggKnJlcTsKLQlz dHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7 Ci0Jc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqaHdfa2V5ID0gdHhfaW5mby0+Y29udHJvbC5o d19rZXk7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hk ciAqKXNrYi0+ZGF0YTsKLQlpbnQgcXVldWVfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2ti KTsKLQlzaXplX3Qgb2Zmc2V0ID0gKHNpemVfdClza2ItPmRhdGEgJiAzOwotCWludCB3bXNnX2xl biA9IHNpemVvZihzdHJ1Y3QgaGlmX21zZykgKwotCQkJc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3R4 KSArIG9mZnNldDsKLQotCVdBUk4ocXVldWVfaWQgPj0gSUVFRTgwMjExX05VTV9BQ1MsICJ1bnN1 cHBvcnRlZCBxdWV1ZV9pZCIpOwotCXdmeF90eF9maXh1cF9yYXRlcyh0eF9pbmZvLT5kcml2ZXJf cmF0ZXMpOwotCi0JLy8gRnJvbSBub3cgdHhfaW5mby0+Y29udHJvbCBpcyB1bnVzYWJsZQotCW1l bXNldCh0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHdmeF90eF9w cml2KSk7Ci0KLQkvLyBGaWxsIGhpZl9tc2cKLQlXQVJOKHNrYl9oZWFkcm9vbShza2IpIDwgd21z Z19sZW4sICJub3QgZW5vdWdoIHNwYWNlIGluIHNrYiIpOwotCVdBUk4ob2Zmc2V0ICYgMSwgImF0 dGVtcHQgdG8gdHJhbnNtaXQgYW4gdW5hbGlnbmVkIGZyYW1lIik7Ci0Jc2tiX3B1dChza2IsIHdm eF90eF9nZXRfaWN2X2xlbihod19rZXkpKTsKLQlza2JfcHVzaChza2IsIHdtc2dfbGVuKTsKLQlt ZW1zZXQoc2tiLT5kYXRhLCAwLCB3bXNnX2xlbik7Ci0JaGlmX21zZyA9IChzdHJ1Y3QgaGlmX21z ZyAqKXNrYi0+ZGF0YTsKLQloaWZfbXNnLT5sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbik7Ci0J aGlmX21zZy0+aWQgPSBISUZfUkVRX0lEX1RYOwotCWhpZl9tc2ctPmludGVyZmFjZSA9IHd2aWYt PmlkOwotCWlmIChza2ItPmxlbiA+IHd2aWYtPndkZXYtPmh3X2NhcHMuc2l6ZV9pbnBfY2hfYnVm KSB7Ci0JCWRldl93YXJuKHd2aWYtPndkZXYtPmRldiwKLQkJCSAicmVxdWVzdGVkIGZyYW1lIHNp emUgKCVkKSBpcyBsYXJnZXIgdGhhbiBtYXhpbXVtIHN1cHBvcnRlZCAoJWQpXG4iLAotCQkJIHNr Yi0+bGVuLCB3dmlmLT53ZGV2LT5od19jYXBzLnNpemVfaW5wX2NoX2J1Zik7Ci0JCXNrYl9wdWxs KHNrYiwgd21zZ19sZW4pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvLyBGaWxsIHR4IHJlcXVl c3QKLQlyZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKiloaWZfbXNnLT5ib2R5OwotCS8vIHBhY2tl dF9pZCBqdXN0IG5lZWQgdG8gYmUgdW5pcXVlIG9uIGRldmljZS4gMzJiaXRzIGFyZSBtb3JlIHRo YW4KLQkvLyBuZWNlc3NhcnkgZm9yIHRoYXQgdGFzaywgc28gd2UgdGFlIGFkdmFudGFnZSBvZiBp dCB0byBhZGQgc29tZSBleHRyYQotCS8vIGRhdGEgZm9yIGRlYnVnLgotCXJlcS0+cGFja2V0X2lk ID0gYXRvbWljX2FkZF9yZXR1cm4oMSwgJnd2aWYtPndkZXYtPnBhY2tldF9pZCkgJiAweEZGRkY7 Ci0JcmVxLT5wYWNrZXRfaWQgfD0gSUVFRTgwMjExX1NFUV9UT19TTihsZTE2X3RvX2NwdShoZHIt PnNlcV9jdHJsKSkgPDwgMTY7Ci0JcmVxLT5wYWNrZXRfaWQgfD0gcXVldWVfaWQgPDwgMjg7Ci0K LQlyZXEtPmZjX29mZnNldCA9IG9mZnNldDsKLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAy MTFfVFhfQ1RMX1NFTkRfQUZURVJfRFRJTSkKLQkJcmVxLT5hZnRlcl9kdGltID0gMTsKLQlyZXEt PnBlZXJfc3RhX2lkID0gd2Z4X3R4X2dldF9saW5rX2lkKHd2aWYsIHN0YSwgaGRyKTsKLQkvLyBR dWV1ZSBpbmRleCBhcmUgaW52ZXJ0ZWQgYmV0d2VlbiBmaXJtd2FyZSBhbmQgTGludXgKLQlyZXEt PnF1ZXVlX2lkID0gMyAtIHF1ZXVlX2lkOwotCXJlcS0+cmV0cnlfcG9saWN5X2luZGV4ID0gd2Z4 X3R4X2dldF9yYXRlX2lkKHd2aWYsIHR4X2luZm8pOwotCXJlcS0+ZnJhbWVfZm9ybWF0ID0gd2Z4 X3R4X2dldF9mcmFtZV9mb3JtYXQodHhfaW5mbyk7Ci0JaWYgKHR4X2luZm8tPmRyaXZlcl9yYXRl c1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkKLQkJcmVxLT5zaG9ydF9naSA9 IDE7Ci0KLQkvLyBBdXhpbGlhcnkgb3BlcmF0aW9ucwotCXdmeF90eF9xdWV1ZXNfcHV0KHd2aWYs IHNrYik7Ci0JaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVS X0RUSU0pCi0JCXNjaGVkdWxlX3dvcmsoJnd2aWYtPnVwZGF0ZV90aW1fd29yayk7Ci0Jd2Z4X2Jo X3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgd2Z4X3R4KHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRy b2wsCi0JICAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYg PSBody0+cHJpdjsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0 YSAqc3RhID0gY29udHJvbCA/IGNvbnRyb2wtPnN0YSA6IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIx MV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpZWVl ODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0Jc2l6 ZV90IGRyaXZlcl9kYXRhX3Jvb20gPSBzaXplb2ZfZmllbGQoc3RydWN0IGllZWU4MDIxMV90eF9p bmZvLAotCQkJCQkgICAgICAgcmF0ZV9kcml2ZXJfZGF0YSk7Ci0KLQljb21waWxldGltZV9hc3Nl cnQoc2l6ZW9mKHN0cnVjdCB3ZnhfdHhfcHJpdikgPD0gZHJpdmVyX2RhdGFfcm9vbSwKLQkJCSAg ICJzdHJ1Y3QgdHhfcHJpdiBpcyB0b28gbGFyZ2UiKTsKLQlXQVJOKHNrYi0+bmV4dCB8fCBza2It PnByZXYsICJza2IgaXMgYWxyZWFkeSBtZW1iZXIgb2YgYSBsaXN0Iik7Ci0JLy8gY29udHJvbC52 aWYgY2FuIGJlIE5VTEwgZm9yIGluamVjdGVkIGZyYW1lcwotCWlmICh0eF9pbmZvLT5jb250cm9s LnZpZikKLQkJd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXR4X2luZm8tPmNvbnRyb2wudmlmLT5k cnZfcHJpdjsKLQllbHNlCi0JCXd2aWYgPSB3dmlmX2l0ZXJhdGUod2RldiwgTlVMTCk7Ci0JaWYg KFdBUk5fT04oIXd2aWYpKQotCQlnb3RvIGRyb3A7Ci0JLy8gQmVjYXVzZSBvZiBUWF9BTVBEVV9T RVRVUF9JTl9IVywgbWFjODAyMTEgZG9lcyBub3QgdHJ5IHRvIHNlbmQgYW55Ci0JLy8gQmxvY2tB Y2sgc2Vzc2lvbiBtYW5hZ2VtZW50IGZyYW1lLiBUaGUgY2hlY2sgYmVsb3cgZXhpc3QganVzdCBp biBjYXNlLgotCWlmIChpZWVlODAyMTFfaXNfYWN0aW9uX2JhY2soaGRyKSkgewotCQlkZXZfaW5m byh3ZGV2LT5kZXYsICJkcm9wIEJBIGFjdGlvblxuIik7Ci0JCWdvdG8gZHJvcDsKLQl9Ci0JaWYg KHdmeF90eF9pbm5lcih3dmlmLCBzdGEsIHNrYikpCi0JCWdvdG8gZHJvcDsKLQotCXJldHVybjsK LQotZHJvcDoKLQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUod2Rldi0+aHcsIHNrYik7Ci19 Ci0KLXN0YXRpYyB2b2lkIHdmeF9za2JfZHRvcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0 IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmID0gKHN0cnVjdCBoaWZfbXNn ICopc2tiLT5kYXRhOwotCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXEgPSAoc3RydWN0IGhpZl9yZXFf dHggKiloaWYtPmJvZHk7Ci0JdW5zaWduZWQgaW50IG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgaGlm X21zZykgKwotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3R4KSArCi0JCQkgICAgICBy ZXEtPmZjX29mZnNldDsKLQotCWlmICghd3ZpZikgewotCQlwcl93YXJuKCIlczogdmlmIGFzc29j aWF0ZWQgd2l0aCB0aGUgc2tiIGRvZXMgbm90IGV4aXN0IGFueW1vcmVcbiIsIF9fZnVuY19fKTsK LQkJcmV0dXJuOwotCX0KLQl3ZnhfdHhfcG9saWN5X3B1dCh3dmlmLCByZXEtPnJldHJ5X3BvbGlj eV9pbmRleCk7Ci0Jc2tiX3B1bGwoc2tiLCBvZmZzZXQpOwotCWllZWU4MDIxMV90eF9zdGF0dXNf aXJxc2FmZSh3dmlmLT53ZGV2LT5odywgc2tiKTsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X3R4X2Zp bGxfcmF0ZXMoc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjEx X3R4X2luZm8gKnR4X2luZm8sCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgaGlmX2NuZl90eCAqYXJn KQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZTsKLQlpbnQgdHhfY291bnQ7Ci0J aW50IGk7Ci0KLQl0eF9jb3VudCA9IGFyZy0+YWNrX2ZhaWx1cmVzOwotCWlmICghYXJnLT5zdGF0 dXMgfHwgYXJnLT5hY2tfZmFpbHVyZXMpCi0JCXR4X2NvdW50ICs9IDE7IC8vIEFsc28gcmVwb3J0 IHN1Y2Nlc3MKLQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKSB7 Ci0JCXJhdGUgPSAmdHhfaW5mby0+c3RhdHVzLnJhdGVzW2ldOwotCQlpZiAocmF0ZS0+aWR4IDwg MCkKLQkJCWJyZWFrOwotCQlpZiAodHhfY291bnQgPCByYXRlLT5jb3VudCAmJgotCQkgICAgYXJn LT5zdGF0dXMgPT0gSElGX1NUQVRVU19UWF9GQUlMX1JFVFJJRVMgJiYKLQkJICAgIGFyZy0+YWNr X2ZhaWx1cmVzKQotCQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJhbGwgcmV0cmllcyB3ZXJlIG5vdCBj b25zdW1lZDogJWQgIT0gJWRcbiIsCi0JCQkJcmF0ZS0+Y291bnQsIHR4X2NvdW50KTsKLQkJaWYg KHR4X2NvdW50IDw9IHJhdGUtPmNvdW50ICYmIHR4X2NvdW50ICYmCi0JCSAgICBhcmctPnR4ZWRf cmF0ZSAhPSB3ZnhfZ2V0X2h3X3JhdGUod2RldiwgcmF0ZSkpCi0JCQlkZXZfZGJnKHdkZXYtPmRl diwgImluY29uc2lzdGVudCB0eF9pbmZvIHJhdGVzOiAlZCAhPSAlZFxuIiwKLQkJCQlhcmctPnR4 ZWRfcmF0ZSwgd2Z4X2dldF9od19yYXRlKHdkZXYsIHJhdGUpKTsKLQkJaWYgKHR4X2NvdW50ID4g cmF0ZS0+Y291bnQpIHsKLQkJCXR4X2NvdW50IC09IHJhdGUtPmNvdW50OwotCQl9IGVsc2UgaWYg KCF0eF9jb3VudCkgewotCQkJcmF0ZS0+Y291bnQgPSAwOwotCQkJcmF0ZS0+aWR4ID0gLTE7Ci0J CX0gZWxzZSB7Ci0JCQlyYXRlLT5jb3VudCA9IHR4X2NvdW50OwotCQkJdHhfY291bnQgPSAwOwot CQl9Ci0JfQotCWlmICh0eF9jb3VudCkKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsICIlZCBtb3JlIHJl dHJpZXMgdGhhbiBleHBlY3RlZFxuIiwgdHhfY291bnQpOwotfQotCi12b2lkIHdmeF90eF9jb25m aXJtX2NiKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBjb25zdCBzdHJ1Y3QgaGlmX2NuZl90eCAqYXJn KQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKLQlzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0Jc2tiID0gd2Z4X3BlbmRpbmdfZ2V0 KHdkZXYsIGFyZy0+cGFja2V0X2lkKTsKLQlpZiAoIXNrYikgewotCQlkZXZfd2Fybih3ZGV2LT5k ZXYsICJyZWNlaXZlZCB1bmtub3duIHBhY2tldF9pZCAoJSMuOHgpIGZyb20gY2hpcFxuIiwKLQkJ CSBhcmctPnBhY2tldF9pZCk7Ci0JCXJldHVybjsKLQl9Ci0JdHhfaW5mbyA9IElFRUU4MDIxMV9T S0JfQ0Ioc2tiKTsKLQl3dmlmID0gd2Rldl90b193dmlmKHdkZXYsICgoc3RydWN0IGhpZl9tc2cg Kilza2ItPmRhdGEpLT5pbnRlcmZhY2UpOwotCVdBUk5fT04oIXd2aWYpOwotCWlmICghd3ZpZikK LQkJcmV0dXJuOwotCi0JLy8gTm90ZSB0aGF0IHdmeF9wZW5kaW5nX2dldF9wa3RfdXNfZGVsYXko KSBnZXQgZGF0YSBmcm9tIHR4X2luZm8KLQlfdHJhY2VfdHhfc3RhdHMoYXJnLCBza2IsIHdmeF9w ZW5kaW5nX2dldF9wa3RfdXNfZGVsYXkod2Rldiwgc2tiKSk7Ci0Jd2Z4X3R4X2ZpbGxfcmF0ZXMo d2RldiwgdHhfaW5mbywgYXJnKTsKLQkvLyBGcm9tIG5vdywgeW91IGNhbiB0b3VjaCB0byB0eF9p bmZvLT5zdGF0dXMsIGJ1dCBkbyBub3QgdG91Y2ggdG8KLQkvLyB0eF9wcml2IGFueW1vcmUKLQkv LyBGSVhNRTogdXNlIGllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cygpCi0JbWVtc2V0KHR4 X2luZm8tPnJhdGVfZHJpdmVyX2RhdGEsIDAsIHNpemVvZih0eF9pbmZvLT5yYXRlX2RyaXZlcl9k YXRhKSk7Ci0JbWVtc2V0KHR4X2luZm8tPnBhZCwgMCwgc2l6ZW9mKHR4X2luZm8tPnBhZCkpOwot Ci0JaWYgKCFhcmctPnN0YXR1cykgewotCQl0eF9pbmZvLT5zdGF0dXMudHhfdGltZSA9Ci0JCQls ZTMyX3RvX2NwdShhcmctPm1lZGlhX2RlbGF5KSAtCi0JCQlsZTMyX3RvX2NwdShhcmctPnR4X3F1 ZXVlX2RlbGF5KTsKLQkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19B Q0spCi0JCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9OT0FDS19UUkFOU01J VFRFRDsKLQkJZWxzZQotCQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNL OwotCX0gZWxzZSBpZiAoYXJnLT5zdGF0dXMgPT0gSElGX1NUQVRVU19UWF9GQUlMX1JFUVVFVUUp IHsKLQkJV0FSTighYXJnLT5yZXF1ZXVlLCAiaW5jb2hlcmVudCBzdGF0dXMgYW5kIHJlc3VsdF9m bGFncyIpOwotCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZU RVJfRFRJTSkgewotCQkJd3ZpZi0+YWZ0ZXJfZHRpbV90eF9hbGxvd2VkID0gZmFsc2U7IC8vIERU SU0gcGVyaW9kIGVsYXBzZWQKLQkJCXNjaGVkdWxlX3dvcmsoJnd2aWYtPnVwZGF0ZV90aW1fd29y ayk7Ci0JCX0KLQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVS RUQ7Ci0JfQotCXdmeF9za2JfZHRvcih3dmlmLCBza2IpOwotfQotCi1zdGF0aWMgdm9pZCB3Znhf Zmx1c2hfdmlmKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1MzIgcXVldWVzLAotCQkJICBzdHJ1Y3Qg c2tfYnVmZl9oZWFkICpkcm9wcGVkKQotewotCXN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVlOwotCWlu dCBpOwotCi0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspIHsKLQkJaWYg KCEoQklUKGkpICYgcXVldWVzKSkKLQkJCWNvbnRpbnVlOwotCQlxdWV1ZSA9ICZ3dmlmLT50eF9x dWV1ZVtpXTsKLQkJaWYgKGRyb3BwZWQpCi0JCQl3ZnhfdHhfcXVldWVfZHJvcCh3dmlmLCBxdWV1 ZSwgZHJvcHBlZCk7Ci0JfQotCWlmICh3dmlmLT53ZGV2LT5jaGlwX2Zyb3plbikKLQkJcmV0dXJu OwotCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgaSsrKSB7Ci0JCWlmICghKEJJ VChpKSAmIHF1ZXVlcykpCi0JCQljb250aW51ZTsKLQkJcXVldWUgPSAmd3ZpZi0+dHhfcXVldWVb aV07Ci0JCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQod3ZpZi0+d2Rldi0+dHhfZGVxdWV1ZSwKLQkJ CQkgICAgICAgd2Z4X3R4X3F1ZXVlX2VtcHR5KHd2aWYsIHF1ZXVlKSwKLQkJCQkgICAgICAgbXNl Y3NfdG9famlmZmllcygxMDAwKSkgPD0gMCkKLQkJCWRldl93YXJuKHd2aWYtPndkZXYtPmRldiwK LQkJCQkgImZyYW1lcyBxdWV1ZWQgd2hpbGUgZmx1c2hpbmcgdHggcXVldWVzPyIpOwotCX0KLX0K LQotdm9pZCB3ZnhfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYsCi0JICAgICAgIHUzMiBxdWV1ZXMsIGJvb2wgZHJvcCkKLXsKLQlzdHJ1Y3Qg d2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OwotCXN0cnVjdCBza19idWZmX2hlYWQgZHJvcHBlZDsK LQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0cnVjdCBz a19idWZmICpza2I7Ci0KLQlza2JfcXVldWVfaGVhZF9pbml0KCZkcm9wcGVkKTsKLQlpZiAodmlm KSB7Ci0JCXd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCQl3ZnhfZmx1 c2hfdmlmKHd2aWYsIHF1ZXVlcywgZHJvcCA/ICZkcm9wcGVkIDogTlVMTCk7Ci0JfSBlbHNlIHsK LQkJd3ZpZiA9IE5VTEw7Ci0JCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlm KSkgIT0gTlVMTCkKLQkJCXdmeF9mbHVzaF92aWYod3ZpZiwgcXVldWVzLCBkcm9wID8gJmRyb3Bw ZWQgOiBOVUxMKTsKLQl9Ci0Jd2Z4X3R4X2ZsdXNoKHdkZXYpOwotCWlmICh3ZGV2LT5jaGlwX2Zy b3plbikKLQkJd2Z4X3BlbmRpbmdfZHJvcCh3ZGV2LCAmZHJvcHBlZCk7Ci0Jd2hpbGUgKChza2Ig PSBza2JfZGVxdWV1ZSgmZHJvcHBlZCkpICE9IE5VTEwpIHsKLQkJaGlmID0gKHN0cnVjdCBoaWZf bXNnICopc2tiLT5kYXRhOwotCQl3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJm YWNlKTsKLQkJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKElFRUU4MDIxMV9TS0JfQ0Io c2tiKSk7Ci0JCXdmeF9za2JfZHRvcih3dmlmLCBza2IpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4 LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YzlmZmY3YTg3MC4uMDAwMDAwMDAw MDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5oCisrKyAvZGV2L251bGwKQEAg LTEsNjcgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAq LwotLyoKLSAqIERhdGFwYXRoIGltcGxlbWVudGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoYykg MjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAy MDEwLCBTVC1Fcmljc3NvbgotICovCi0jaWZuZGVmIFdGWF9EQVRBX1RYX0gKLSNkZWZpbmUgV0ZY X0RBVEFfVFhfSAotCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPG5ldC9tYWM4 MDIxMS5oPgotCi0jaW5jbHVkZSAiaGlmX2FwaV9jbWQuaCIKLSNpbmNsdWRlICJoaWZfYXBpX21p Yi5oIgotCi1zdHJ1Y3Qgd2Z4X3R4X3ByaXY7Ci1zdHJ1Y3Qgd2Z4X2RldjsKLXN0cnVjdCB3Znhf dmlmOwotCi1zdHJ1Y3QgdHhfcG9saWN5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Ci0JaW50 IHVzYWdlX2NvdW50OwotCXU4IHJhdGVzWzEyXTsKLQlib29sIHVwbG9hZGVkOwotfTsKLQotc3Ry dWN0IHR4X3BvbGljeV9jYWNoZSB7Ci0Jc3RydWN0IHR4X3BvbGljeSBjYWNoZVtISUZfVFhfUkVU UllfUE9MSUNZX01BWF07Ci0JLy8gRklYTUU6IHVzZSBhIHRyZWVzIGFuZCBkcm9wIGhhc2ggZnJv bSB0eF9wb2xpY3kKLQlzdHJ1Y3QgbGlzdF9oZWFkIHVzZWQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBm cmVlOwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KLXN0cnVjdCB3ZnhfdHhfcHJpdiB7Ci0Ja3Rp bWVfdCB4bWl0X3RpbWVzdGFtcDsKLX07Ci0KLXZvaWQgd2Z4X3R4X3BvbGljeV9pbml0KHN0cnVj dCB3ZnhfdmlmICp3dmlmKTsKLXZvaWQgd2Z4X3R4X3BvbGljeV91cGxvYWRfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspOwotCi12b2lkIHdmeF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAotCSAgICBzdHJ1Y3Qgc2tf YnVmZiAqc2tiKTsKLXZvaWQgd2Z4X3R4X2NvbmZpcm1fY2Ioc3RydWN0IHdmeF9kZXYgKndkZXYs IGNvbnN0IHN0cnVjdCBoaWZfY25mX3R4ICphcmcpOwotdm9pZCB3ZnhfZmx1c2goc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JICAgICAgIHUzMiBx dWV1ZXMsIGJvb2wgZHJvcCk7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHdmeF90eF9wcml2ICp3 Znhfc2tiX3R4X3ByaXYoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjEx X3R4X2luZm8gKnR4X2luZm87Ci0KLQlpZiAoIXNrYikKLQkJcmV0dXJuIE5VTEw7Ci0JdHhfaW5m byA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlyZXR1cm4gKHN0cnVjdCB3ZnhfdHhfcHJpdiAq KXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhp Zl9yZXFfdHggKndmeF9za2JfdHhyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qg aGlmX21zZyAqaGlmID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOwotCXN0cnVjdCBoaWZf cmVxX3R4ICpyZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKiloaWYtPmJvZHk7Ci0KLQlyZXR1cm4g cmVxOwotfQotCi0jZW5kaWYgLyogV0ZYX0RBVEFfVFhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL3dmeC9kZWJ1Zy5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5jCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWRhZGE3OGMyNWYuLjAwMDAwMDAwMDAwMAotLS0g YS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTkgKzAs MCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIERl YnVnZnMgaW50ZXJmYWNlLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29u IExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nvbgot ICovCi0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxl Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLQotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5j bHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAic3RhLmgiCi0jaW5jbHVkZSAibWFpbi5oIgotI2luY2x1 ZGUgImhpZl90eC5oIgotI2luY2x1ZGUgImhpZl90eF9taWIuaCIKLQotI2RlZmluZSBDUkVBVEVf VFJBQ0VfUE9JTlRTCi0jaW5jbHVkZSAidHJhY2VzLmgiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg dHJhY2VfcHJpbnRfZmxhZ3MgaGlmX21zZ19wcmludF9tYXBbXSA9IHsKLQloaWZfbXNnX2xpc3Qs Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHRyYWNlX3ByaW50X2ZsYWdzIGhpZl9taWJfcHJp bnRfbWFwW10gPSB7Ci0JaGlmX21pYl9saXN0LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB0 cmFjZV9wcmludF9mbGFncyB3ZnhfcmVnX3ByaW50X21hcFtdID0gewotCXdmeF9yZWdfbGlzdCwK LX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpnZXRfc3ltYm9sKHVuc2lnbmVkIGxvbmcgdmFsLAot CQkJICAgICAgY29uc3Qgc3RydWN0IHRyYWNlX3ByaW50X2ZsYWdzICpzeW1ib2xfYXJyYXkpCi17 Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBzeW1ib2xfYXJyYXlbaV0ubWFzayAhPSAtMTsgaSsr KSB7Ci0JCWlmICh2YWwgPT0gc3ltYm9sX2FycmF5W2ldLm1hc2spCi0JCQlyZXR1cm4gc3ltYm9s X2FycmF5W2ldLm5hbWU7Ci0JfQotCi0JcmV0dXJuICJ1bmtub3duIjsKLX0KLQotY29uc3QgY2hh ciAqZ2V0X2hpZl9uYW1lKHVuc2lnbmVkIGxvbmcgaWQpCi17Ci0JcmV0dXJuIGdldF9zeW1ib2wo aWQsIGhpZl9tc2dfcHJpbnRfbWFwKTsKLX0KLQotY29uc3QgY2hhciAqZ2V0X21pYl9uYW1lKHVu c2lnbmVkIGxvbmcgaWQpCi17Ci0JcmV0dXJuIGdldF9zeW1ib2woaWQsIGhpZl9taWJfcHJpbnRf bWFwKTsKLX0KLQotY29uc3QgY2hhciAqZ2V0X3JlZ19uYW1lKHVuc2lnbmVkIGxvbmcgaWQpCi17 Ci0JcmV0dXJuIGdldF9zeW1ib2woaWQsIHdmeF9yZWdfcHJpbnRfbWFwKTsKLX0KLQotc3RhdGlj IGludCB3ZnhfY291bnRlcnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsK LQlpbnQgcmV0LCBpOwotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gc2VxLT5wcml2YXRlOwotCXN0 cnVjdCBoaWZfbWliX2V4dGVuZGVkX2NvdW50X3RhYmxlIGNvdW50ZXJzWzNdOwotCi0JZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoY291bnRlcnMpOyBpKyspIHsKLQkJcmV0ID0gaGlmX2dldF9j b3VudGVyc190YWJsZSh3ZGV2LCBpLCBjb3VudGVycyArIGkpOwotCQlpZiAocmV0IDwgMCkKLQkJ CXJldHVybiByZXQ7Ci0JCWlmIChyZXQgPiAwKQotCQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jc2Vx X3ByaW50ZihzZXEsICIlLTI0cyAlMTJzICUxMnMgJTEyc1xuIiwKLQkJICAgIiIsICJnbG9iYWwi LCAiaWZhY2UgMCIsICJpZmFjZSAxIik7Ci0KLSNkZWZpbmUgUFVUX0NPVU5URVIobmFtZSkgXAot CXNlcV9wcmludGYoc2VxLCAiJS0yNHMgJTEyZCAlMTJkICUxMmRcbiIsICNuYW1lLCBcCi0JCSAg IGxlMzJfdG9fY3B1KGNvdW50ZXJzWzJdLmNvdW50XyMjbmFtZSksIFwKLQkJICAgbGUzMl90b19j cHUoY291bnRlcnNbMF0uY291bnRfIyNuYW1lKSwgXAotCQkgICBsZTMyX3RvX2NwdShjb3VudGVy c1sxXS5jb3VudF8jI25hbWUpKQotCi0JUFVUX0NPVU5URVIodHhfcGFja2V0cyk7Ci0JUFVUX0NP VU5URVIodHhfbXVsdGljYXN0X2ZyYW1lcyk7Ci0JUFVUX0NPVU5URVIodHhfZnJhbWVzX3N1Y2Nl c3MpOwotCVBVVF9DT1VOVEVSKHR4X2ZyYW1lX2ZhaWx1cmVzKTsKLQlQVVRfQ09VTlRFUih0eF9m cmFtZXNfcmV0cmllZCk7Ci0JUFVUX0NPVU5URVIodHhfZnJhbWVzX211bHRpX3JldHJpZWQpOwot Ci0JUFVUX0NPVU5URVIocnRzX3N1Y2Nlc3MpOwotCVBVVF9DT1VOVEVSKHJ0c19mYWlsdXJlcyk7 Ci0JUFVUX0NPVU5URVIoYWNrX2ZhaWx1cmVzKTsKLQotCVBVVF9DT1VOVEVSKHJ4X3BhY2tldHMp OwotCVBVVF9DT1VOVEVSKHJ4X2ZyYW1lc19zdWNjZXNzKTsKLQlQVVRfQ09VTlRFUihyeF9wYWNr ZXRfZXJyb3JzKTsKLQlQVVRfQ09VTlRFUihwbGNwX2Vycm9ycyk7Ci0JUFVUX0NPVU5URVIoZmNz X2Vycm9ycyk7Ci0JUFVUX0NPVU5URVIocnhfZGVjcnlwdGlvbl9mYWlsdXJlcyk7Ci0JUFVUX0NP VU5URVIocnhfbWljX2ZhaWx1cmVzKTsKLQlQVVRfQ09VTlRFUihyeF9ub19rZXlfZmFpbHVyZXMp OwotCVBVVF9DT1VOVEVSKHJ4X2ZyYW1lX2R1cGxpY2F0ZXMpOwotCVBVVF9DT1VOVEVSKHJ4X211 bHRpY2FzdF9mcmFtZXMpOwotCVBVVF9DT1VOVEVSKHJ4X2NtYWNpY3ZfZXJyb3JzKTsKLQlQVVRf Q09VTlRFUihyeF9jbWFjX3JlcGxheXMpOwotCVBVVF9DT1VOVEVSKHJ4X21nbXRfY2NtcF9yZXBs YXlzKTsKLQotCVBVVF9DT1VOVEVSKHJ4X2JlYWNvbik7Ci0JUFVUX0NPVU5URVIobWlzc19iZWFj b24pOwotCi0jdW5kZWYgUFVUX0NPVU5URVIKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGNvdW50ZXJzWzBdLnJlc2VydmVkKTsgaSsrKQotCQlzZXFfcHJpbnRmKHNlcSwgInJlc2VydmVk WyUwMmRdJTEycyAlMTJkICUxMmQgJTEyZFxuIiwgaSwgIiIsCi0JCQkgICBsZTMyX3RvX2NwdShj b3VudGVyc1syXS5yZXNlcnZlZFtpXSksCi0JCQkgICBsZTMyX3RvX2NwdShjb3VudGVyc1swXS5y ZXNlcnZlZFtpXSksCi0JCQkgICBsZTMyX3RvX2NwdShjb3VudGVyc1sxXS5yZXNlcnZlZFtpXSkp OwotCi0JcmV0dXJuIDA7Ci19Ci1ERUZJTkVfU0hPV19BVFRSSUJVVEUod2Z4X2NvdW50ZXJzKTsK LQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjaGFubmVsX25hbWVzW10gPSB7Ci0JWzBdID0g IjFNIiwKLQlbMV0gPSAiMk0iLAotCVsyXSA9ICI1LjVNIiwKLQlbM10gPSAiMTFNIiwKLQkvKiBF bnRyaWVzIDQgYW5kIDUgZG9lcyBub3QgZXhpc3QgKi8KLQlbNl0gPSAiNk0iLAotCVs3XSA9ICI5 TSIsCi0JWzhdID0gIjEyTSIsCi0JWzldID0gIjE4TSIsCi0JWzEwXSA9ICIyNE0iLAotCVsxMV0g PSAiMzZNIiwKLQlbMTJdID0gIjQ4TSIsCi0JWzEzXSA9ICI1NE0iLAotCVsxNF0gPSAiTUNTMCIs Ci0JWzE1XSA9ICJNQ1MxIiwKLQlbMTZdID0gIk1DUzIiLAotCVsxN10gPSAiTUNTMyIsCi0JWzE4 XSA9ICJNQ1M0IiwKLQlbMTldID0gIk1DUzUiLAotCVsyMF0gPSAiTUNTNiIsCi0JWzIxXSA9ICJN Q1M3IiwKLX07Ci0KLXN0YXRpYyBpbnQgd2Z4X3J4X3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxl ICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBzZXEtPnByaXZhdGU7 Ci0Jc3RydWN0IGhpZl9yeF9zdGF0cyAqc3QgPSAmd2Rldi0+cnhfc3RhdHM7Ci0JaW50IGk7Ci0K LQltdXRleF9sb2NrKCZ3ZGV2LT5yeF9zdGF0c19sb2NrKTsKLQlzZXFfcHJpbnRmKHNlcSwgIlRp bWVzdGFtcDogJWR1c1xuIiwgc3QtPmRhdGUpOwotCXNlcV9wcmludGYoc2VxLCAiTG93IHBvd2Vy IGNsb2NrOiBmcmVxdWVuY3kgJXVIeiwgZXh0ZXJuYWwgJXNcbiIsCi0JCSAgIGxlMzJfdG9fY3B1 KHN0LT5wd3JfY2xrX2ZyZXEpLAotCQkgICBzdC0+aXNfZXh0X3B3cl9jbGsgPyAieWVzIiA6ICJu byIpOwotCXNlcV9wcmludGYoc2VxLAotCQkgICAiTnVtLiBvZiBmcmFtZXM6ICVkLCBQRVIgKHgx MGU0KTogJWQsIFRocm91Z2hwdXQ6ICVkS2Jwcy9zXG4iLAotCQkgICBzdC0+bmJfcnhfZnJhbWUs IHN0LT5wZXJfdG90YWwsIHN0LT50aHJvdWdocHV0KTsKLQlzZXFfcHV0cyhzZXEsICIgICAgICAg TnVtLiBvZiAgICAgIFBFUiAgICAgUlNTSSAgICAgIFNOUiAgICAgIENGT1xuIik7Ci0Jc2VxX3B1 dHMoc2VxLCAiICAgICAgICBmcmFtZXMgICh4MTBlNCkgICAgKGRCbSkgICAgIChkQikgICAgKGtI eilcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYW5uZWxfbmFtZXMpOyBpKysp IHsKLQkJaWYgKGNoYW5uZWxfbmFtZXNbaV0pCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiU1cyAlOGQg JThkICU4ZCAlOGQgJThkXG4iLAotCQkJCSAgIGNoYW5uZWxfbmFtZXNbaV0sCi0JCQkJICAgbGUz Ml90b19jcHUoc3QtPm5iX3J4X2J5X3JhdGVbaV0pLAotCQkJCSAgIGxlMTZfdG9fY3B1KHN0LT5w ZXJbaV0pLAotCQkJCSAgIChzMTYpbGUxNl90b19jcHUoc3QtPnJzc2lbaV0pIC8gMTAwLAotCQkJ CSAgIChzMTYpbGUxNl90b19jcHUoc3QtPnNucltpXSkgLyAxMDAsCi0JCQkJICAgKHMxNilsZTE2 X3RvX2NwdShzdC0+Y2ZvW2ldKSk7Ci0JfQotCW11dGV4X3VubG9jaygmd2Rldi0+cnhfc3RhdHNf bG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLURFRklORV9TSE9XX0FUVFJJQlVURSh3Znhfcnhfc3Rh dHMpOwotCi1zdGF0aWMgaW50IHdmeF90eF9wb3dlcl9sb29wX3Nob3coc3RydWN0IHNlcV9maWxl ICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBzZXEtPnByaXZhdGU7 Ci0Jc3RydWN0IGhpZl90eF9wb3dlcl9sb29wX2luZm8gKnN0ID0gJndkZXYtPnR4X3Bvd2VyX2xv b3BfaW5mbzsKLQlpbnQgdG1wOwotCi0JbXV0ZXhfbG9jaygmd2Rldi0+dHhfcG93ZXJfbG9vcF9p bmZvX2xvY2spOwotCXRtcCA9IGxlMTZfdG9fY3B1KHN0LT50eF9nYWluX2RpZyk7Ci0Jc2VxX3By aW50ZihzZXEsICJUeCBnYWluIGRpZ2l0YWw6ICVkXG4iLCB0bXApOwotCXRtcCA9IGxlMTZfdG9f Y3B1KHN0LT50eF9nYWluX3BhKTsKLQlzZXFfcHJpbnRmKHNlcSwgIlR4IGdhaW4gUEE6ICVkXG4i LCB0bXApOwotCXRtcCA9IChzMTYpbGUxNl90b19jcHUoc3QtPnRhcmdldF9wb3V0KTsKLQlzZXFf cHJpbnRmKHNlcSwgIlRhcmdldCBQb3V0OiAlZC4lMDJkIGRCbVxuIiwgdG1wIC8gNCwgKHRtcCAl IDQpICogMjUpOwotCXRtcCA9IChzMTYpbGUxNl90b19jcHUoc3QtPnBfZXN0aW1hdGlvbik7Ci0J c2VxX3ByaW50ZihzZXEsICJGRU0gUG91dDogJWQuJTAyZCBkQm1cbiIsIHRtcCAvIDQsICh0bXAg JSA0KSAqIDI1KTsKLQl0bXAgPSBsZTE2X3RvX2NwdShzdC0+dnBkZXQpOwotCXNlcV9wcmludGYo c2VxLCAiVnBkZXQ6ICVkIG1WXG4iLCB0bXApOwotCXNlcV9wcmludGYoc2VxLCAiTWVhc3VyZSBp bmRleDogJWRcbiIsIHN0LT5tZWFzdXJlbWVudF9pbmRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZ3ZGV2 LT50eF9wb3dlcl9sb29wX2luZm9fbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLURFRklORV9TSE9X X0FUVFJJQlVURSh3ZnhfdHhfcG93ZXJfbG9vcCk7Ci0KLXN0YXRpYyBzc2l6ZV90IHdmeF9zZW5k X3Bkc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgIGNvbnN0IGNoYXIgX191c2VyICp1 c2VyX2J1ZiwKLQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCB3 ZnhfZGV2ICp3ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmJ1ZjsKLQlpbnQgcmV0 OwotCi0JaWYgKCpwcG9zICE9IDApIHsKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJQRFMgZGF0YSBt dXN0IGJlIHdyaXR0ZW4gaW4gb25lIHRyYW5zYWN0aW9uIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0J fQotCWJ1ZiA9IG1lbWR1cF91c2VyKHVzZXJfYnVmLCBjb3VudCk7Ci0JaWYgKElTX0VSUihidWYp KQotCQlyZXR1cm4gUFRSX0VSUihidWYpOwotCSpwcG9zID0gKnBwb3MgKyBjb3VudDsKLQlyZXQg PSB3Znhfc2VuZF9wZHMod2RldiwgYnVmLCBjb3VudCk7Ci0Ja2ZyZWUoYnVmKTsKLQlpZiAocmV0 IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBz dHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdmeF9zZW5kX3Bkc19mb3BzID0gewotCS5vcGVuID0gc2lt cGxlX29wZW4sCi0JLndyaXRlID0gd2Z4X3NlbmRfcGRzX3dyaXRlLAotfTsKLQotc3RydWN0IGRi Z2ZzX2hpZl9tc2cgewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2OwotCXN0cnVjdCBjb21wbGV0aW9u IGNvbXBsZXRlOwotCXU4IHJlcGx5WzEwMjRdOwotCWludCByZXQ7Ci19OwotCi1zdGF0aWMgc3Np emVfdCB3Znhfc2VuZF9oaWZfbXNnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgICAg IGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICAgICBzaXplX3QgY291bnQsIGxv ZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZGJnZnNfaGlmX21zZyAqY29udGV4dCA9IGZpbGUtPnBy aXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGNvbnRleHQtPndkZXY7Ci0Jc3Ry dWN0IGhpZl9tc2cgKnJlcXVlc3Q7Ci0KLQlpZiAoY29tcGxldGlvbl9kb25lKCZjb250ZXh0LT5j b21wbGV0ZSkpIHsKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJyZWFkIHByZXZpb3VzIHJlc3VsdCBi ZWZvcmUgc3RhcnQgYSBuZXcgb25lXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JaWYgKGNv dW50IDwgc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvLyB3 ZnhfY21kX3NlbmQoKSBjaGVja3MgdGhhdCByZXBseSBidWZmZXIgaXMgd2lkZSBlbm91Z2gsIGJ1 dCBkb2VzIG5vdAotCS8vIHJldHVybiBwcmVjaXNlIGxlbmd0aCByZWFkLiBVc2VyIGhhdmUgdG8g a25vdyBob3cgbWFueSBieXRlcyBzaG91bGQKLQkvLyBiZSByZWFkLiBGaWxsaW5nIHJlcGx5IGJ1 ZmZlciB3aXRoIGEgbWVtb3J5IHBhdHRlcm4gbWF5IGhlbHAgdXNlci4KLQltZW1zZXQoY29udGV4 dC0+cmVwbHksIDB4RkYsIHNpemVvZihjb250ZXh0LT5yZXBseSkpOwotCXJlcXVlc3QgPSBtZW1k dXBfdXNlcih1c2VyX2J1ZiwgY291bnQpOwotCWlmIChJU19FUlIocmVxdWVzdCkpCi0JCXJldHVy biBQVFJfRVJSKHJlcXVlc3QpOwotCWlmIChsZTE2X3RvX2NwdShyZXF1ZXN0LT5sZW4pICE9IGNv dW50KSB7Ci0JCWtmcmVlKHJlcXVlc3QpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JY29udGV4 dC0+cmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIHJlcXVlc3QsIGNvbnRleHQtPnJlcGx5LAotCQkJ CSAgICBzaXplb2YoY29udGV4dC0+cmVwbHkpLCBmYWxzZSk7Ci0KLQlrZnJlZShyZXF1ZXN0KTsK LQljb21wbGV0ZSgmY29udGV4dC0+Y29tcGxldGUpOwotCXJldHVybiBjb3VudDsKLX0KLQotc3Rh dGljIHNzaXplX3Qgd2Z4X3NlbmRfaGlmX21zZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFy IF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykK LXsKLQlzdHJ1Y3QgZGJnZnNfaGlmX21zZyAqY29udGV4dCA9IGZpbGUtPnByaXZhdGVfZGF0YTsK LQlpbnQgcmV0OwotCi0JaWYgKGNvdW50ID4gc2l6ZW9mKGNvbnRleHQtPnJlcGx5KSkKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZj b250ZXh0LT5jb21wbGV0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlpZiAoY29udGV4 dC0+cmV0IDwgMCkKLQkJcmV0dXJuIGNvbnRleHQtPnJldDsKLQkvLyBCZSBjYXJlZnVsLCB3cml0 ZSgpIGlzIHdhaXRpbmcgZm9yIGEgZnVsbCBtZXNzYWdlIHdoaWxlIHJlYWQoKQotCS8vIG9ubHkg cmV0dXJucyBhIHBheWxvYWQKLQlpZiAoY29weV90b191c2VyKHVzZXJfYnVmLCBjb250ZXh0LT5y ZXBseSwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiBjb3VudDsKLX0KLQot c3RhdGljIGludCB3Znhfc2VuZF9oaWZfbXNnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGRiZ2ZzX2hpZl9tc2cgKmNvbnRleHQgPSBremFs bG9jKHNpemVvZigqY29udGV4dCksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFjb250ZXh0KQotCQly ZXR1cm4gLUVOT01FTTsKLQljb250ZXh0LT53ZGV2ID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQlpbml0 X2NvbXBsZXRpb24oJmNvbnRleHQtPmNvbXBsZXRlKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBj b250ZXh0OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdmeF9zZW5kX2hpZl9tc2dfcmVs ZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qg ZGJnZnNfaGlmX21zZyAqY29udGV4dCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWtmcmVlKGNv bnRleHQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0 aW9ucyB3Znhfc2VuZF9oaWZfbXNnX2ZvcHMgPSB7Ci0JLm9wZW4gPSB3Znhfc2VuZF9oaWZfbXNn X29wZW4sCi0JLnJlbGVhc2UgPSB3Znhfc2VuZF9oaWZfbXNnX3JlbGVhc2UsCi0JLndyaXRlID0g d2Z4X3NlbmRfaGlmX21zZ193cml0ZSwKLQkucmVhZCA9IHdmeF9zZW5kX2hpZl9tc2dfcmVhZCwK LX07Ci0KLXN0YXRpYyBpbnQgd2Z4X3BzX3RpbWVvdXRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwp Ci17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSAoc3RydWN0IHdmeF9kZXYgKilkYXRhOwotCXN0 cnVjdCB3ZnhfdmlmICp3dmlmOwotCi0Jd2Rldi0+Zm9yY2VfcHNfdGltZW91dCA9IHZhbDsKLQl3 dmlmID0gTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9 IE5VTEwpCi0JCXdmeF91cGRhdGVfcG0od3ZpZik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgd2Z4X3BzX3RpbWVvdXRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQotewotCXN0cnVjdCB3 ZnhfZGV2ICp3ZGV2ID0gKHN0cnVjdCB3ZnhfZGV2ICopZGF0YTsKLQotCSp2YWwgPSB3ZGV2LT5m b3JjZV9wc190aW1lb3V0OwotCXJldHVybiAwOwotfQotCi1ERUZJTkVfREVCVUdGU19BVFRSSUJV VEUod2Z4X3BzX3RpbWVvdXRfZm9wcywgd2Z4X3BzX3RpbWVvdXRfZ2V0LCB3ZnhfcHNfdGltZW91 dF9zZXQsICIlbGxkXG4iKTsKLQotaW50IHdmeF9kZWJ1Z19pbml0KHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2KQotewotCXN0cnVjdCBkZW50cnkgKmQ7Ci0KLQlkID0gZGVidWdmc19jcmVhdGVfZGlyKCJ3 ZngiLCB3ZGV2LT5ody0+d2lwaHktPmRlYnVnZnNkaXIpOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUo ImNvdW50ZXJzIiwgMDQ0NCwgZCwgd2RldiwgJndmeF9jb3VudGVyc19mb3BzKTsKLQlkZWJ1Z2Zz X2NyZWF0ZV9maWxlKCJyeF9zdGF0cyIsIDA0NDQsIGQsIHdkZXYsICZ3Znhfcnhfc3RhdHNfZm9w cyk7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgidHhfcG93ZXJfbG9vcCIsIDA0NDQsIGQsIHdkZXYs Ci0JCQkgICAgJndmeF90eF9wb3dlcl9sb29wX2ZvcHMpOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUo InNlbmRfcGRzIiwgMDIwMCwgZCwgd2RldiwgJndmeF9zZW5kX3Bkc19mb3BzKTsKLQlkZWJ1Z2Zz X2NyZWF0ZV9maWxlKCJzZW5kX2hpZl9tc2ciLCAwNjAwLCBkLCB3ZGV2LAotCQkJICAgICZ3Znhf c2VuZF9oaWZfbXNnX2ZvcHMpOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInBzX3RpbWVvdXQiLCAw NjAwLCBkLCB3ZGV2LCAmd2Z4X3BzX3RpbWVvdXRfZm9wcyk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvZGVidWcuaCBiL2RyaXZlcnMvc3RhZ2luZy93 ZngvZGVidWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYyZjg0ZDY0YzllLi4w MDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5oCisrKyAvZGV2L251 bGwKQEAgLTEsMTkgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b25seSAqLwotLyoKLSAqIERlYnVnZnMgaW50ZXJmYWNlLgotICoKLSAqIENvcHlyaWdodCAoYykg MjAxNy0yMDE5LCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAy MDExLCBTVC1Fcmljc3NvbgotICovCi0jaWZuZGVmIFdGWF9ERUJVR19ICi0jZGVmaW5lIFdGWF9E RUJVR19ICi0KLXN0cnVjdCB3ZnhfZGV2OwotCi1pbnQgd2Z4X2RlYnVnX2luaXQoc3RydWN0IHdm eF9kZXYgKndkZXYpOwotCi1jb25zdCBjaGFyICpnZXRfaGlmX25hbWUodW5zaWduZWQgbG9uZyBp ZCk7Ci1jb25zdCBjaGFyICpnZXRfbWliX25hbWUodW5zaWduZWQgbG9uZyBpZCk7Ci1jb25zdCBj aGFyICpnZXRfcmVnX25hbWUodW5zaWduZWQgbG9uZyBpZCk7Ci0KLSNlbmRpZiAvKiBXRlhfREVC VUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9md2lvLmMgYi9kcml2ZXJz L3N0YWdpbmcvd2Z4L2Z3aW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI4YWVj MDJkMTY5Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9md2lvLmMKKysr IC9kZXYvbnVsbApAQCAtMSw0MDUgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seQotLyoKLSAqIEZpcm13YXJlIGxvYWRpbmcuCi0gKgotICogQ29weXJpZ2h0 IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgot I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUg PGxpbnV4L2JpdGZpZWxkLmg+Ci0KLSNpbmNsdWRlICJmd2lvLmgiCi0jaW5jbHVkZSAid2Z4Lmgi Ci0jaW5jbHVkZSAiaHdpby5oIgotCi0vLyBBZGRyZXNzZXMgYmVsb3cgYXJlIGluIFNSQU0gYXJl YQotI2RlZmluZSBXRlhfRE5MRF9GSUZPICAgICAgICAgICAgIDB4MDkwMDQwMDAKLSNkZWZpbmUg ICAgIEROTERfQkxPQ0tfU0laRSAgICAgICAgICAgMHgwNDAwCi0jZGVmaW5lICAgICBETkxEX0ZJ Rk9fU0laRSAgICAgICAgICAgIDB4ODAwMCAvLyAoMzIgKiBETkxEX0JMT0NLX1NJWkUpCi0vLyBE b3dubG9hZCBDb250cm9sIEFyZWEgKERDQSkKLSNkZWZpbmUgV0ZYX0RDQV9JTUFHRV9TSVpFICAg ICAgICAweDA5MDBDMDAwCi0jZGVmaW5lIFdGWF9EQ0FfUFVUICAgICAgICAgICAgICAgMHgwOTAw QzAwNAotI2RlZmluZSBXRlhfRENBX0dFVCAgICAgICAgICAgICAgIDB4MDkwMEMwMDgKLSNkZWZp bmUgV0ZYX0RDQV9IT1NUX1NUQVRVUyAgICAgICAweDA5MDBDMDBDCi0jZGVmaW5lICAgICBIT1NU X1JFQURZICAgICAgICAgICAgICAgIDB4ODc2NTQzMjEKLSNkZWZpbmUgICAgIEhPU1RfSU5GT19S RUFEICAgICAgICAgICAgMHhBNzUzQkQ5OQotI2RlZmluZSAgICAgSE9TVF9VUExPQURfUEVORElO RyAgICAgICAweEFCQ0REQ0JBCi0jZGVmaW5lICAgICBIT1NUX1VQTE9BRF9DT01QTEVURSAgICAg IDB4RDRDNjRBOTkKLSNkZWZpbmUgICAgIEhPU1RfT0tfVE9fSlVNUCAgICAgICAgICAgMHgxNzRG Qzg4MgotI2RlZmluZSBXRlhfRENBX05DUF9TVEFUVVMgICAgICAgIDB4MDkwMEMwMTAKLSNkZWZp bmUgICAgIE5DUF9OT1RfUkVBRFkgICAgICAgICAgICAgMHgxMjM0NTY3OAotI2RlZmluZSAgICAg TkNQX1JFQURZICAgICAgICAgICAgICAgICAweDg3NjU0MzIxCi0jZGVmaW5lICAgICBOQ1BfSU5G T19SRUFEWSAgICAgICAgICAgIDB4QkQ1M0VGOTkKLSNkZWZpbmUgICAgIE5DUF9ET1dOTE9BRF9Q RU5ESU5HICAgICAgMHhBQkNERENCQQotI2RlZmluZSAgICAgTkNQX0RPV05MT0FEX0NPTVBMRVRF ICAgICAweENBRkVGRUNBCi0jZGVmaW5lICAgICBOQ1BfQVVUSF9PSyAgICAgICAgICAgICAgIDB4 RDRDNjRBOTkKLSNkZWZpbmUgICAgIE5DUF9BVVRIX0ZBSUwgICAgICAgICAgICAgMHgxNzRGQzg4 MgotI2RlZmluZSAgICAgTkNQX1BVQl9LRVlfUkRZICAgICAgICAgICAweDdBQjQxRDE5Ci0jZGVm aW5lIFdGWF9EQ0FfRldfU0lHTkFUVVJFICAgICAgMHgwOTAwQzAxNAotI2RlZmluZSAgICAgRldf U0lHTkFUVVJFX1NJWkUgICAgICAgICAweDQwCi0jZGVmaW5lIFdGWF9EQ0FfRldfSEFTSCAgICAg ICAgICAgMHgwOTAwQzA1NAotI2RlZmluZSAgICAgRldfSEFTSF9TSVpFICAgICAgICAgICAgICAw eDA4Ci0jZGVmaW5lIFdGWF9EQ0FfRldfVkVSU0lPTiAgICAgICAgMHgwOTAwQzA1QwotI2RlZmlu ZSAgICAgRldfVkVSU0lPTl9TSVpFICAgICAgICAgICAweDA0Ci0jZGVmaW5lIFdGWF9EQ0FfUkVT RVJWRUQgICAgICAgICAgMHgwOTAwQzA2MAotI2RlZmluZSAgICAgRENBX1JFU0VSVkVEX1NJWkUg ICAgICAgICAweDIwCi0jZGVmaW5lIFdGWF9TVEFUVVNfSU5GTyAgICAgICAgICAgMHgwOTAwQzA4 MAotI2RlZmluZSBXRlhfQk9PVExPQURFUl9MQUJFTCAgICAgIDB4MDkwMEMwODQKLSNkZWZpbmUg ICAgIEJPT1RMT0FERVJfTEFCRUxfU0laRSAgICAgMHgzQwotI2RlZmluZSBXRlhfUFRFX0lORk8g ICAgICAgICAgICAgIDB4MDkwMEMwQzAKLSNkZWZpbmUgICAgIFBURV9JTkZPX0tFWVNFVF9JRFgg ICAgICAgMHgwRAotI2RlZmluZSAgICAgUFRFX0lORk9fU0laRSAgICAgICAgICAgICAweDEwCi0j ZGVmaW5lIFdGWF9FUlJfSU5GTyAgICAgICAgICAgICAgMHgwOTAwQzBEMAotI2RlZmluZSAgICAg RVJSX0lOVkFMSURfU0VDX1RZUEUgICAgICAweDA1Ci0jZGVmaW5lICAgICBFUlJfU0lHX1ZFUklG X0ZBSUxFRCAgICAgIDB4MEYKLSNkZWZpbmUgICAgIEVSUl9BRVNfQ1RSTF9LRVkgICAgICAgICAg MHgxMAotI2RlZmluZSAgICAgRVJSX0VDQ19QVUJfS0VZICAgICAgICAgICAweDExCi0jZGVmaW5l ICAgICBFUlJfTUFDX0tFWSAgICAgICAgICAgICAgIDB4MTgKLQotI2RlZmluZSBEQ0FfVElNRU9V VCAgNTAgLy8gbWlsbGlzZWNvbmRzCi0jZGVmaW5lIFdBS0VVUF9USU1FT1VUIDIwMCAvLyBtaWxs aXNlY29uZHMKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmd2lvX2Vycm9yc1tdID0gewot CVtFUlJfSU5WQUxJRF9TRUNfVFlQRV0gPSAiSW52YWxpZCBzZWN0aW9uIHR5cGUgb3Igd3Jvbmcg ZW5jcnlwdGlvbiIsCi0JW0VSUl9TSUdfVkVSSUZfRkFJTEVEXSA9ICJTaWduYXR1cmUgdmVyaWZp Y2F0aW9uIGZhaWxlZCIsCi0JW0VSUl9BRVNfQ1RSTF9LRVldID0gIkFFUyBjb250cm9sIGtleSBu b3QgaW5pdGlhbGl6ZWQiLAotCVtFUlJfRUNDX1BVQl9LRVldID0gIkVDQyBwdWJsaWMga2V5IG5v dCBpbml0aWFsaXplZCIsCi0JW0VSUl9NQUNfS0VZXSA9ICJNQUMga2V5IG5vdCBpbml0aWFsaXpl ZCIsCi19OwotCi0vKgotICogcmVxdWVzdF9maXJtd2FyZSgpIGFsbG9jYXRlIGRhdGEgdXNpbmcg dm1hbGxvYygpLiBJdCBpcyBub3QgY29tcGF0aWJsZSB3aXRoCi0gKiB1bmRlcmx5aW5nIGhhcmR3 YXJlIHRoYXQgdXNlIERNQS4gRnVuY3Rpb24gYmVsb3cgZGV0ZWN0IHRoaXMgY2FzZSBhbmQKLSAq IGFsbG9jYXRlIGEgYm91bmNlIGJ1ZmZlciBpZiBuZWNlc3NhcnkuCi0gKgotICogTm90aWNlIHRo YXQsIGluIGRvdWJ0LCB5b3UgY2FuIGVuYWJsZSBDT05GSUdfREVCVUdfU0cgdG8gYXNrIGtlcm5l bCB0bwotICogZGV0ZWN0IHRoaXMgcHJvYmxlbSBhdCBydW50aW1lICAoZWxzZSwga2VybmVsIHNp bGVudGx5IGZhaWwpLgotICoKLSAqIE5PVEU6IGl0IG1heSBhbHNvIGJlIHBvc3NpYmxlIHRvIHVz ZSAncGFnZXMnIGZyb20gc3RydWN0IGZpcm13YXJlIGFuZCBhdm9pZAotICogYm91bmNlIGJ1ZmZl cgotICovCi1zdGF0aWMgaW50IHNyYW1fd3JpdGVfZG1hX3NhZmUoc3RydWN0IHdmeF9kZXYgKndk ZXYsIHUzMiBhZGRyLCBjb25zdCB1OCAqYnVmLAotCQkJICAgICAgIHNpemVfdCBsZW4pCi17Ci0J aW50IHJldDsKLQljb25zdCB1OCAqdG1wOwotCi0JaWYgKCF2aXJ0X2FkZHJfdmFsaWQoYnVmKSkg ewotCQl0bXAgPSBrbWVtZHVwKGJ1ZiwgbGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0bXApCi0J CQlyZXR1cm4gLUVOT01FTTsKLQl9IGVsc2UgewotCQl0bXAgPSBidWY7Ci0JfQotCXJldCA9IHNy YW1fYnVmX3dyaXRlKHdkZXYsIGFkZHIsIHRtcCwgbGVuKTsKLQlpZiAodG1wICE9IGJ1ZikKLQkJ a2ZyZWUodG1wKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGdldF9maXJtd2FyZShz dHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGtleXNldF9jaGlwLAotCQkJY29uc3Qgc3RydWN0IGZp cm13YXJlICoqZncsIGludCAqZmlsZV9vZmZzZXQpCi17Ci0JaW50IGtleXNldF9maWxlOwotCWNo YXIgZmlsZW5hbWVbMjU2XTsKLQljb25zdCBjaGFyICpkYXRhOwotCWludCByZXQ7Ci0KLQlzbnBy aW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzXyUwMlguc2VjIiwKLQkJIHdkZXYt PnBkYXRhLmZpbGVfZncsIGtleXNldF9jaGlwKTsKLQlyZXQgPSBmaXJtd2FyZV9yZXF1ZXN0X25v d2FybihmdywgZmlsZW5hbWUsIHdkZXYtPmRldik7Ci0JaWYgKHJldCkgewotCQlkZXZfaW5mbyh3 ZGV2LT5kZXYsICJjYW4ndCBsb2FkICVzLCBmYWxsaW5nIGJhY2sgdG8gJXMuc2VjXG4iLAotCQkJ IGZpbGVuYW1lLCB3ZGV2LT5wZGF0YS5maWxlX2Z3KTsKLQkJc25wcmludGYoZmlsZW5hbWUsIHNp emVvZihmaWxlbmFtZSksICIlcy5zZWMiLAotCQkJIHdkZXYtPnBkYXRhLmZpbGVfZncpOwotCQly ZXQgPSByZXF1ZXN0X2Zpcm13YXJlKGZ3LCBmaWxlbmFtZSwgd2Rldi0+ZGV2KTsKLQkJaWYgKHJl dCkgewotCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJjYW4ndCBsb2FkICVzXG4iLCBmaWxlbmFtZSk7 Ci0JCQkqZncgPSBOVUxMOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCWRhdGEgPSAoKmZ3 KS0+ZGF0YTsKLQlpZiAobWVtY21wKGRhdGEsICJLRVlTRVQiLCA2KSAhPSAwKSB7Ci0JCS8vIExl Z2FjeSBmaXJtd2FyZSBmb3JtYXQKLQkJKmZpbGVfb2Zmc2V0ID0gMDsKLQkJa2V5c2V0X2ZpbGUg PSAweDkwOwotCX0gZWxzZSB7Ci0JCSpmaWxlX29mZnNldCA9IDg7Ci0JCWtleXNldF9maWxlID0g KGhleF90b19iaW4oZGF0YVs2XSkgKiAxNikgfCBoZXhfdG9fYmluKGRhdGFbN10pOwotCQlpZiAo a2V5c2V0X2ZpbGUgPCAwKSB7Ci0JCQlkZXZfZXJyKHdkZXYtPmRldiwgIiVzIGNvcnJ1cHRlZFxu IiwgZmlsZW5hbWUpOwotCQkJcmVsZWFzZV9maXJtd2FyZSgqZncpOwotCQkJKmZ3ID0gTlVMTDsK LQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCWlmIChrZXlzZXRfZmlsZSAhPSBrZXlzZXRf Y2hpcCkgewotCQlkZXZfZXJyKHdkZXYtPmRldiwgImZpcm13YXJlIGtleXNldCBpcyBpbmNvbXBh dGlibGUgd2l0aCBjaGlwIChmaWxlOiAweCUwMlgsIGNoaXA6IDB4JTAyWClcbiIsCi0JCQlrZXlz ZXRfZmlsZSwga2V5c2V0X2NoaXApOwotCQlyZWxlYXNlX2Zpcm13YXJlKCpmdyk7Ci0JCSpmdyA9 IE5VTEw7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQl3ZGV2LT5rZXlzZXQgPSBrZXlzZXRfZmls ZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3YWl0X25jcF9zdGF0dXMoc3RydWN0IHdm eF9kZXYgKndkZXYsIHUzMiBzdGF0dXMpCi17Ci0Ja3RpbWVfdCBub3csIHN0YXJ0OwotCXUzMiBy ZWc7Ci0JaW50IHJldDsKLQotCXN0YXJ0ID0ga3RpbWVfZ2V0KCk7Ci0JZm9yICg7OykgewotCQly ZXQgPSBzcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9EQ0FfTkNQX1NUQVRVUywgJnJlZyk7Ci0JCWlm IChyZXQgPCAwKQotCQkJcmV0dXJuIC1FSU87Ci0JCW5vdyA9IGt0aW1lX2dldCgpOwotCQlpZiAo cmVnID09IHN0YXR1cykKLQkJCWJyZWFrOwotCQlpZiAoa3RpbWVfYWZ0ZXIobm93LCBrdGltZV9h ZGRfbXMoc3RhcnQsIERDQV9USU1FT1VUKSkpCi0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQl9Ci0J aWYgKGt0aW1lX2NvbXBhcmUobm93LCBzdGFydCkpCi0JCWRldl9kYmcod2Rldi0+ZGV2LCAiY2hp cCBhbnN3ZXIgYWZ0ZXIgJWxsZHVzXG4iLAotCQkJa3RpbWVfdXNfZGVsdGEobm93LCBzdGFydCkp OwotCWVsc2UKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJjaGlwIGFuc3dlciBpbW1lZGlhdGVseVxu Iik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbikKLXsKLQlpbnQgcmV0Owot CXUzMiBvZmZzLCBieXRlc19kb25lID0gMDsKLQlrdGltZV90IG5vdywgc3RhcnQ7Ci0KLQlpZiAo bGVuICUgRE5MRF9CTE9DS19TSVpFKSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAiZmlybXdhcmUg c2l6ZSBpcyBub3QgYWxpZ25lZC4gQnVmZmVyIG92ZXJydW4gd2lsbCBvY2N1clxuIik7Ci0JCXJl dHVybiAtRUlPOwotCX0KLQlvZmZzID0gMDsKLQl3aGlsZSAob2ZmcyA8IGxlbikgewotCQlzdGFy dCA9IGt0aW1lX2dldCgpOwotCQlmb3IgKDs7KSB7Ci0JCQlub3cgPSBrdGltZV9nZXQoKTsKLQkJ CWlmIChvZmZzICsgRE5MRF9CTE9DS19TSVpFIC0gYnl0ZXNfZG9uZSA8IEROTERfRklGT19TSVpF KQotCQkJCWJyZWFrOwotCQkJaWYgKGt0aW1lX2FmdGVyKG5vdywga3RpbWVfYWRkX21zKHN0YXJ0 LCBEQ0FfVElNRU9VVCkpKQotCQkJCXJldHVybiAtRVRJTUVET1VUOwotCQkJcmV0ID0gc3JhbV9y ZWdfcmVhZCh3ZGV2LCBXRlhfRENBX0dFVCwgJmJ5dGVzX2RvbmUpOwotCQkJaWYgKHJldCA8IDAp Ci0JCQkJcmV0dXJuIHJldDsKLQkJfQotCQlpZiAoa3RpbWVfY29tcGFyZShub3csIHN0YXJ0KSkK LQkJCWRldl9kYmcod2Rldi0+ZGV2LCAiYW5zd2VyIGFmdGVyICVsbGR1c1xuIiwKLQkJCQlrdGlt ZV91c19kZWx0YShub3csIHN0YXJ0KSk7Ci0KLQkJcmV0ID0gc3JhbV93cml0ZV9kbWFfc2FmZSh3 ZGV2LCBXRlhfRE5MRF9GSUZPICsKLQkJCQkJICAob2ZmcyAlIEROTERfRklGT19TSVpFKSwKLQkJ CQkJICBkYXRhICsgb2ZmcywgRE5MRF9CTE9DS19TSVpFKTsKLQkJaWYgKHJldCA8IDApCi0JCQly ZXR1cm4gcmV0OwotCi0JCS8vIFdGeCBzZWVtcyB0byBub3Qgc3VwcG9ydCB3cml0aW5nIDAgaW4g dGhpcyByZWdpc3RlciBkdXJpbmcKLQkJLy8gZmlyc3QgbG9vcAotCQlvZmZzICs9IEROTERfQkxP Q0tfU0laRTsKLQkJcmV0ID0gc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9QVVQsIG9mZnMp OwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgdm9pZCBwcmludF9ib290X3N0YXR1cyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQl1 MzIgcmVnOwotCi0Jc3JhbV9yZWdfcmVhZCh3ZGV2LCBXRlhfU1RBVFVTX0lORk8sICZyZWcpOwot CWlmIChyZWcgPT0gMHgxMjM0NTY3OCkKLQkJcmV0dXJuOwotCXNyYW1fcmVnX3JlYWQod2Rldiwg V0ZYX0VSUl9JTkZPLCAmcmVnKTsKLQlpZiAocmVnIDwgQVJSQVlfU0laRShmd2lvX2Vycm9ycykg JiYgZndpb19lcnJvcnNbcmVnXSkKLQkJZGV2X2luZm8od2Rldi0+ZGV2LCAic2VjdXJlIGJvb3Q6 ICVzXG4iLCBmd2lvX2Vycm9yc1tyZWddKTsKLQllbHNlCi0JCWRldl9pbmZvKHdkZXYtPmRldiwg InNlY3VyZSBib290OiBFcnJvciAlIzAyeFxuIiwgcmVnKTsKLX0KLQotc3RhdGljIGludCBsb2Fk X2Zpcm13YXJlX3NlY3VyZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQljb25zdCBzdHJ1Y3Qg ZmlybXdhcmUgKmZ3ID0gTlVMTDsKLQlpbnQgaGVhZGVyX3NpemU7Ci0JaW50IGZ3X29mZnNldDsK LQlrdGltZV90IHN0YXJ0OwotCXU4ICpidWY7Ci0JaW50IHJldDsKLQotCUJVSUxEX0JVR19PTihQ VEVfSU5GT19TSVpFID4gQk9PVExPQURFUl9MQUJFTF9TSVpFKTsKLQlidWYgPSBrbWFsbG9jKEJP T1RMT0FERVJfTEFCRUxfU0laRSArIDEsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1 cm4gLUVOT01FTTsKLQotCXNyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSE9TVF9TVEFUVVMs IEhPU1RfUkVBRFkpOwotCXJldCA9IHdhaXRfbmNwX3N0YXR1cyh3ZGV2LCBOQ1BfSU5GT19SRUFE WSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJvcjsKLQotCXNyYW1fYnVmX3JlYWQod2RldiwgV0ZY X0JPT1RMT0FERVJfTEFCRUwsIGJ1ZiwgQk9PVExPQURFUl9MQUJFTF9TSVpFKTsKLQlidWZbQk9P VExPQURFUl9MQUJFTF9TSVpFXSA9IDA7Ci0JZGV2X2RiZyh3ZGV2LT5kZXYsICJib290bG9hZGVy OiBcIiVzXCJcbiIsIGJ1Zik7Ci0KLQlzcmFtX2J1Zl9yZWFkKHdkZXYsIFdGWF9QVEVfSU5GTywg YnVmLCBQVEVfSU5GT19TSVpFKTsKLQlyZXQgPSBnZXRfZmlybXdhcmUod2RldiwgYnVmW1BURV9J TkZPX0tFWVNFVF9JRFhdLCAmZncsICZmd19vZmZzZXQpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJy b3I7Ci0JaGVhZGVyX3NpemUgPSBmd19vZmZzZXQgKyBGV19TSUdOQVRVUkVfU0laRSArIEZXX0hB U0hfU0laRTsKLQotCXNyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSE9TVF9TVEFUVVMsIEhP U1RfSU5GT19SRUFEKTsKLQlyZXQgPSB3YWl0X25jcF9zdGF0dXMod2RldiwgTkNQX1JFQURZKTsK LQlpZiAocmV0KQotCQlnb3RvIGVycm9yOwotCi0Jc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RO TERfRklGTywgMHhGRkZGRkZGRik7IC8vIEZpZm8gaW5pdAotCXNyYW1fd3JpdGVfZG1hX3NhZmUo d2RldiwgV0ZYX0RDQV9GV19WRVJTSU9OLCAiXHgwMVx4MDBceDAwXHgwMCIsCi0JCQkgICAgRldf VkVSU0lPTl9TSVpFKTsKLQlzcmFtX3dyaXRlX2RtYV9zYWZlKHdkZXYsIFdGWF9EQ0FfRldfU0lH TkFUVVJFLCBmdy0+ZGF0YSArIGZ3X29mZnNldCwKLQkJCSAgICBGV19TSUdOQVRVUkVfU0laRSk7 Ci0Jc3JhbV93cml0ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRENBX0ZXX0hBU0gsCi0JCQkgICAgZnct PmRhdGEgKyBmd19vZmZzZXQgKyBGV19TSUdOQVRVUkVfU0laRSwKLQkJCSAgICBGV19IQVNIX1NJ WkUpOwotCXNyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSU1BR0VfU0laRSwgZnctPnNpemUg LSBoZWFkZXJfc2l6ZSk7Ci0Jc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRV UywgSE9TVF9VUExPQURfUEVORElORyk7Ci0JcmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5D UF9ET1dOTE9BRF9QRU5ESU5HKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yOwotCi0Jc3RhcnQg PSBrdGltZV9nZXQoKTsKLQlyZXQgPSB1cGxvYWRfZmlybXdhcmUod2RldiwgZnctPmRhdGEgKyBo ZWFkZXJfc2l6ZSwKLQkJCSAgICAgIGZ3LT5zaXplIC0gaGVhZGVyX3NpemUpOwotCWlmIChyZXQp Ci0JCWdvdG8gZXJyb3I7Ci0JZGV2X2RiZyh3ZGV2LT5kZXYsICJmaXJtd2FyZSBsb2FkIGFmdGVy ICVsbGR1c1xuIiwKLQkJa3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHN0YXJ0KSk7Ci0KLQlz cmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX1VQTE9BRF9DT01Q TEVURSk7Ci0JcmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9BVVRIX09LKTsKLQkvLyBM ZWdhY3kgUk9NIHN1cHBvcnQKLQlpZiAocmV0IDwgMCkKLQkJcmV0ID0gd2FpdF9uY3Bfc3RhdHVz KHdkZXYsIE5DUF9QVUJfS0VZX1JEWSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3I7Ci0J c3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywgSE9TVF9PS19UT19KVU1Q KTsKLQotZXJyb3I6Ci0Ja2ZyZWUoYnVmKTsKLQlpZiAoZncpCi0JCXJlbGVhc2VfZmlybXdhcmUo ZncpOwotCWlmIChyZXQpCi0JCXByaW50X2Jvb3Rfc3RhdHVzKHdkZXYpOwotCXJldHVybiByZXQ7 Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9ncHIoc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaW50 IHJldCwgaTsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKLQkJaW50IGluZGV4OwotCQl1MzIgdmFs dWU7Ci0JfSBncHJfaW5pdFtdID0gewotCQl7IDB4MDcsIDB4MjA4Nzc1IH0sCi0JCXsgMHgwOCwg MHgyRUMwMjAgfSwKLQkJeyAweDA5LCAweDNDM0MzQyB9LAotCQl7IDB4MEIsIDB4MzIyQzQ0IH0s Ci0JCXsgMHgwQywgMHhBMDY0OTcgfSwKLQl9OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoZ3ByX2luaXQpOyBpKyspIHsKLQkJcmV0ID0gaWdwcl9yZWdfd3JpdGUod2RldiwgZ3ByX2lu aXRbaV0uaW5kZXgsCi0JCQkJICAgICBncHJfaW5pdFtpXS52YWx1ZSk7Ci0JCWlmIChyZXQgPCAw KQotCQkJcmV0dXJuIHJldDsKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsICIgIGluZGV4ICUwMng6ICUw OHhcbiIsCi0JCQlncHJfaW5pdFtpXS5pbmRleCwgZ3ByX2luaXRbaV0udmFsdWUpOwotCX0KLQly ZXR1cm4gMDsKLX0KLQotaW50IHdmeF9pbml0X2RldmljZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikK LXsKLQlpbnQgcmV0OwotCWludCBod19yZXZpc2lvbiwgaHdfdHlwZTsKLQlpbnQgd2FrZXVwX3Rp bWVvdXQgPSA1MDsgLy8gbXMKLQlrdGltZV90IG5vdywgc3RhcnQ7Ci0JdTMyIHJlZzsKLQotCXJl ZyA9IENGR19ESVJFQ1RfQUNDRVNTX01PREUgfCBDRkdfQ1BVX1JFU0VUIHwgQ0ZHX0JZVEVfT1JE RVJfQUJDRDsKLQlpZiAod2Rldi0+cGRhdGEudXNlX3Jpc2luZ19jbGspCi0JCXJlZyB8PSBDRkdf Q0xLX1JJU0VfRURHRTsKLQlyZXQgPSBjb25maWdfcmVnX3dyaXRlKHdkZXYsIHJlZyk7Ci0JaWYg KHJldCA8IDApIHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJidXMgcmV0dXJuZWQgYW4gZXJyb3Ig ZHVyaW5nIGZpcnN0IHdyaXRlIGFjY2Vzcy4gSG9zdCBjb25maWd1cmF0aW9uIGVycm9yP1xuIik7 Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldCA9IGNvbmZpZ19yZWdfcmVhZCh3ZGV2LCAmcmVn KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKHdkZXYtPmRldiwgImJ1cyByZXR1cm5lZCBh biBlcnJvciBkdXJpbmcgZmlyc3QgcmVhZCBhY2Nlc3MuIEJ1cyBjb25maWd1cmF0aW9uIGVycm9y P1xuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlpZiAocmVnID09IDAgfHwgcmVnID09IH4wKSB7 Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAiY2hpcCBtdXRlLiBCdXMgY29uZmlndXJhdGlvbiBlcnJv ciBvciBjaGlwIHdhc24ndCByZXNldD9cbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JZGV2X2Ri Zyh3ZGV2LT5kZXYsICJpbml0aWFsIGNvbmZpZyByZWdpc3RlciB2YWx1ZTogJTA4eFxuIiwgcmVn KTsKLQotCWh3X3JldmlzaW9uID0gRklFTERfR0VUKENGR19ERVZJQ0VfSURfTUFKT1IsIHJlZyk7 Ci0JaWYgKGh3X3JldmlzaW9uID09IDApIHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJiYWQgaGFy ZHdhcmUgcmV2aXNpb24gbnVtYmVyOiAlZFxuIiwKLQkJCWh3X3JldmlzaW9uKTsKLQkJcmV0dXJu IC1FTk9ERVY7Ci0JfQotCWh3X3R5cGUgPSBGSUVMRF9HRVQoQ0ZHX0RFVklDRV9JRF9UWVBFLCBy ZWcpOwotCWlmIChod190eXBlID09IDEpIHsKLQkJZGV2X25vdGljZSh3ZGV2LT5kZXYsICJkZXZl bG9wbWVudCBoYXJkd2FyZSBkZXRlY3RlZFxuIik7Ci0JCXdha2V1cF90aW1lb3V0ID0gMjAwMDsK LQl9Ci0KLQlyZXQgPSBpbml0X2dwcih3ZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJl dDsKLQotCXJldCA9IGNvbnRyb2xfcmVnX3dyaXRlKHdkZXYsIENUUkxfV0xBTl9XQUtFVVApOwot CWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQlzdGFydCA9IGt0aW1lX2dldCgpOwotCWZv ciAoOzspIHsKLQkJcmV0ID0gY29udHJvbF9yZWdfcmVhZCh3ZGV2LCAmcmVnKTsKLQkJbm93ID0g a3RpbWVfZ2V0KCk7Ci0JCWlmIChyZWcgJiBDVFJMX1dMQU5fUkVBRFkpCi0JCQlicmVhazsKLQkJ aWYgKGt0aW1lX2FmdGVyKG5vdywga3RpbWVfYWRkX21zKHN0YXJ0LCB3YWtldXBfdGltZW91dCkp KSB7Ci0JCQlkZXZfZXJyKHdkZXYtPmRldiwgImNoaXAgZGlkbid0IHdha2UgdXAuIENoaXAgd2Fz bid0IHJlc2V0P1xuIik7Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQotCX0KLQlkZXZfZGJn KHdkZXYtPmRldiwgImNoaXAgd2FrZSB1cCBhZnRlciAlbGxkdXNcbiIsCi0JCWt0aW1lX3VzX2Rl bHRhKG5vdywgc3RhcnQpKTsKLQotCXJldCA9IGNvbmZpZ19yZWdfd3JpdGVfYml0cyh3ZGV2LCBD RkdfQ1BVX1JFU0VULCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXQgPSBs b2FkX2Zpcm13YXJlX3NlY3VyZSh3ZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsK LQlyZXR1cm4gY29uZmlnX3JlZ193cml0ZV9iaXRzKHdkZXYsCi0JCQkJICAgICBDRkdfRElSRUNU X0FDQ0VTU19NT0RFIHwKLQkJCQkgICAgIENGR19JUlFfRU5BQkxFX0RBVEEgfAotCQkJCSAgICAg Q0ZHX0lSUV9FTkFCTEVfV1JEWSwKLQkJCQkgICAgIENGR19JUlFfRU5BQkxFX0RBVEEpOwotfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9md2lvLmggYi9kcml2ZXJzL3N0YWdpbmcv d2Z4L2Z3aW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAyOGY5MjUwM2ZlLi4w MDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9md2lvLmgKKysrIC9kZXYvbnVs bApAQCAtMSwxNSArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5ICovCi0vKgotICogRmlybXdhcmUgbG9hZGluZy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIw MTctMjAxOSwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAx MCwgU1QtRXJpY3Nzb24KLSAqLwotI2lmbmRlZiBXRlhfRldJT19ICi0jZGVmaW5lIFdGWF9GV0lP X0gKLQotc3RydWN0IHdmeF9kZXY7Ci0KLWludCB3ZnhfaW5pdF9kZXZpY2Uoc3RydWN0IHdmeF9k ZXYgKndkZXYpOwotCi0jZW5kaWYgLyogV0ZYX0ZXSU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL3dmeC9oaWZfYXBpX2NtZC5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBp X2NtZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWJjMWE1OGVkYWUuLjAwMDAw MDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlfY21kLmgKKysrIC9kZXYv bnVsbApAQCAtMSw1NTMgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNo ZS0yLjAgKi8KLS8qCi0gKiBXRnggaGFyZHdhcmUgaW50ZXJmYWNlIGRlZmluaXRpb25zCi0gKgot ICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzIEluYy4KLSAq LwotCi0jaWZuZGVmIFdGWF9ISUZfQVBJX0NNRF9ICi0jZGVmaW5lIFdGWF9ISUZfQVBJX0NNRF9I Ci0KLSNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KLQotI2luY2x1ZGUgImhpZl9hcGlfZ2Vu ZXJhbC5oIgotCi1lbnVtIGhpZl9yZXF1ZXN0c19pZHMgewotCUhJRl9SRVFfSURfUkVTRVQgICAg ICAgICAgICAgICAgPSAweDBhLAotCUhJRl9SRVFfSURfUkVBRF9NSUIgICAgICAgICAgICAgPSAw eDA1LAotCUhJRl9SRVFfSURfV1JJVEVfTUlCICAgICAgICAgICAgPSAweDA2LAotCUhJRl9SRVFf SURfU1RBUlRfU0NBTiAgICAgICAgICAgPSAweDA3LAotCUhJRl9SRVFfSURfU1RPUF9TQ0FOICAg ICAgICAgICAgPSAweDA4LAotCUhJRl9SRVFfSURfVFggICAgICAgICAgICAgICAgICAgPSAweDA0 LAotCUhJRl9SRVFfSURfSk9JTiAgICAgICAgICAgICAgICAgPSAweDBiLAotCUhJRl9SRVFfSURf U0VUX1BNX01PREUgICAgICAgICAgPSAweDEwLAotCUhJRl9SRVFfSURfU0VUX0JTU19QQVJBTVMg ICAgICAgPSAweDExLAotCUhJRl9SRVFfSURfQUREX0tFWSAgICAgICAgICAgICAgPSAweDBjLAot CUhJRl9SRVFfSURfUkVNT1ZFX0tFWSAgICAgICAgICAgPSAweDBkLAotCUhJRl9SRVFfSURfRURD QV9RVUVVRV9QQVJBTVMgICAgPSAweDEzLAotCUhJRl9SRVFfSURfU1RBUlQgICAgICAgICAgICAg ICAgPSAweDE3LAotCUhJRl9SRVFfSURfQkVBQ09OX1RSQU5TTUlUICAgICAgPSAweDE4LAotCUhJ Rl9SRVFfSURfVVBEQVRFX0lFICAgICAgICAgICAgPSAweDFiLAotCUhJRl9SRVFfSURfTUFQX0xJ TksgICAgICAgICAgICAgPSAweDFjLAotfTsKLQotZW51bSBoaWZfY29uZmlybWF0aW9uc19pZHMg ewotCUhJRl9DTkZfSURfUkVTRVQgICAgICAgICAgICAgICAgPSAweDBhLAotCUhJRl9DTkZfSURf UkVBRF9NSUIgICAgICAgICAgICAgPSAweDA1LAotCUhJRl9DTkZfSURfV1JJVEVfTUlCICAgICAg ICAgICAgPSAweDA2LAotCUhJRl9DTkZfSURfU1RBUlRfU0NBTiAgICAgICAgICAgPSAweDA3LAot CUhJRl9DTkZfSURfU1RPUF9TQ0FOICAgICAgICAgICAgPSAweDA4LAotCUhJRl9DTkZfSURfVFgg ICAgICAgICAgICAgICAgICAgPSAweDA0LAotCUhJRl9DTkZfSURfTVVMVElfVFJBTlNNSVQgICAg ICAgPSAweDFlLAotCUhJRl9DTkZfSURfSk9JTiAgICAgICAgICAgICAgICAgPSAweDBiLAotCUhJ Rl9DTkZfSURfU0VUX1BNX01PREUgICAgICAgICAgPSAweDEwLAotCUhJRl9DTkZfSURfU0VUX0JT U19QQVJBTVMgICAgICAgPSAweDExLAotCUhJRl9DTkZfSURfQUREX0tFWSAgICAgICAgICAgICAg PSAweDBjLAotCUhJRl9DTkZfSURfUkVNT1ZFX0tFWSAgICAgICAgICAgPSAweDBkLAotCUhJRl9D TkZfSURfRURDQV9RVUVVRV9QQVJBTVMgICAgPSAweDEzLAotCUhJRl9DTkZfSURfU1RBUlQgICAg ICAgICAgICAgICAgPSAweDE3LAotCUhJRl9DTkZfSURfQkVBQ09OX1RSQU5TTUlUICAgICAgPSAw eDE4LAotCUhJRl9DTkZfSURfVVBEQVRFX0lFICAgICAgICAgICAgPSAweDFiLAotCUhJRl9DTkZf SURfTUFQX0xJTksgICAgICAgICAgICAgPSAweDFjLAotfTsKLQotZW51bSBoaWZfaW5kaWNhdGlv bnNfaWRzIHsKLQlISUZfSU5EX0lEX1JYICAgICAgICAgICAgICAgICAgID0gMHg4NCwKLQlISUZf SU5EX0lEX1NDQU5fQ01QTCAgICAgICAgICAgID0gMHg4NiwKLQlISUZfSU5EX0lEX0pPSU5fQ09N UExFVEUgICAgICAgID0gMHg4ZiwKLQlISUZfSU5EX0lEX1NFVF9QTV9NT0RFX0NNUEwgICAgID0g MHg4OSwKLQlISUZfSU5EX0lEX1NVU1BFTkRfUkVTVU1FX1RYICAgID0gMHg4YywKLQlISUZfSU5E X0lEX0VWRU5UICAgICAgICAgICAgICAgID0gMHg4NQotfTsKLQotc3RydWN0IGhpZl9yZXFfcmVz ZXQgewotCXU4ICAgICByZXNldF9zdGF0OjE7Ci0JdTggICAgIHJlc2V0X2FsbF9pbnQ6MTsKLQl1 OCAgICAgcmVzZXJ2ZWQxOjY7Ci0JdTggICAgIHJlc2VydmVkMlszXTsKLX0gX19wYWNrZWQ7Ci0K LXN0cnVjdCBoaWZfY25mX3Jlc2V0IHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQot c3RydWN0IGhpZl9yZXFfcmVhZF9taWIgewotCV9fbGUxNiBtaWJfaWQ7Ci0JX19sZTE2IHJlc2Vy dmVkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfcmVhZF9taWIgewotCV9fbGUzMiBz dGF0dXM7Ci0JX19sZTE2IG1pYl9pZDsKLQlfX2xlMTYgbGVuZ3RoOwotCXU4ICAgICBtaWJfZGF0 YVtdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9yZXFfd3JpdGVfbWliIHsKLQlfX2xlMTYg bWliX2lkOwotCV9fbGUxNiBsZW5ndGg7Ci0JdTggICAgIG1pYl9kYXRhW107Ci19IF9fcGFja2Vk OwotCi1zdHJ1Y3QgaGlmX2NuZl93cml0ZV9taWIgewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFj a2VkOwotCi1zdHJ1Y3QgaGlmX3JlcV91cGRhdGVfaWUgewotCXU4ICAgICBiZWFjb246MTsKLQl1 OCAgICAgcHJvYmVfcmVzcDoxOwotCXU4ICAgICBwcm9iZV9yZXE6MTsKLQl1OCAgICAgcmVzZXJ2 ZWQxOjU7Ci0JdTggICAgIHJlc2VydmVkMjsKLQlfX2xlMTYgbnVtX2llczsKLQlzdHJ1Y3QgZWxl bWVudCBpZVtdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfdXBkYXRlX2llIHsKLQlf X2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9zc2lkX2RlZiB7Ci0JX19s ZTMyIHNzaWRfbGVuZ3RoOwotCXU4ICAgICBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwot fSBfX3BhY2tlZDsKLQotI2RlZmluZSBISUZfQVBJX01BWF9OQl9TU0lEUyAgICAgICAgICAgICAg ICAgICAgICAgICAgIDIKLSNkZWZpbmUgSElGX0FQSV9NQVhfTkJfQ0hBTk5FTFMgICAgICAgICAg ICAgICAgICAgICAgIDE0Ci0KLXN0cnVjdCBoaWZfcmVxX3N0YXJ0X3NjYW5fYWx0IHsKLQl1OCAg ICAgYmFuZDsKLQl1OCAgICAgbWFpbnRhaW5fY3VycmVudF9ic3M6MTsKLQl1OCAgICAgcGVyaW9k aWM6MTsKLQl1OCAgICAgcmVzZXJ2ZWQxOjY7Ci0JdTggICAgIGRpc2FsbG93X3BzOjE7Ci0JdTgg ICAgIHJlc2VydmVkMjoxOwotCXU4ICAgICBzaG9ydF9wcmVhbWJsZToxOwotCXU4ICAgICByZXNl cnZlZDM6NTsKLQl1OCAgICAgbWF4X3RyYW5zbWl0X3JhdGU7Ci0JX19sZTE2IHBlcmlvZGljX2lu dGVydmFsOwotCXU4ICAgICByZXNlcnZlZDQ7Ci0JczggICAgIHBlcmlvZGljX3Jzc2lfdGhyOwot CXU4ICAgICBudW1fb2ZfcHJvYmVfcmVxdWVzdHM7Ci0JdTggICAgIHByb2JlX2RlbGF5OwotCXU4 ICAgICBudW1fb2Zfc3NpZHM7Ci0JdTggICAgIG51bV9vZl9jaGFubmVsczsKLQlfX2xlMzIgbWlu X2NoYW5uZWxfdGltZTsKLQlfX2xlMzIgbWF4X2NoYW5uZWxfdGltZTsKLQlfX2xlMzIgdHhfcG93 ZXJfbGV2ZWw7IC8vIHNpZ25lZCB2YWx1ZQotCXN0cnVjdCBoaWZfc3NpZF9kZWYgc3NpZF9kZWZb SElGX0FQSV9NQVhfTkJfU1NJRFNdOwotCXU4ICAgICBjaGFubmVsX2xpc3RbXTsKLX0gX19wYWNr ZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX3N0YXJ0X3NjYW4gewotCV9fbGUzMiBzdGF0dXM7Ci19IF9f cGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9zdG9wX3NjYW4gewotCV9fbGUzMiBzdGF0dXM7Ci19 IF9fcGFja2VkOwotCi1lbnVtIGhpZl9wbV9tb2RlX3N0YXR1cyB7Ci0JSElGX1BNX01PREVfQUNU SVZFICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwLAotCUhJRl9QTV9NT0RFX1BTICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKLQlISUZfUE1fTU9ERV9VTkRFVEVSTUlORUQg ICAgICAgICAgICAgICAgICAgPSAweDIKLX07Ci0KLXN0cnVjdCBoaWZfaW5kX3NjYW5fY21wbCB7 Ci0JX19sZTMyIHN0YXR1czsKLQl1OCAgICAgcG1fbW9kZTsKLQl1OCAgICAgbnVtX2NoYW5uZWxz X2NvbXBsZXRlZDsKLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fcGFja2VkOwotCi1lbnVtIGhpZl9x dWV1ZV9pZCB7Ci0JSElGX1FVRVVFX0lEX0JBQ0tHUk9VTkQgICAgICAgICAgICAgICAgICAgID0g MHgwLAotCUhJRl9RVUVVRV9JRF9CRVNURUZGT1JUICAgICAgICAgICAgICAgICAgICA9IDB4MSwK LQlISUZfUVVFVUVfSURfVklERU8gICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCi0JSElG X1FVRVVFX0lEX1ZPSUNFICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzCi19OwotCi1lbnVt IGhpZl9mcmFtZV9mb3JtYXQgewotCUhJRl9GUkFNRV9GT1JNQVRfTk9OX0hUICAgICAgICAgICAg ICAgICAgICA9IDB4MCwKLQlISUZfRlJBTUVfRk9STUFUX01JWEVEX0ZPUk1BVF9IVCAgICAgICAg ICAgPSAweDEsCi0JSElGX0ZSQU1FX0ZPUk1BVF9HRl9IVF8xMU4gICAgICAgICAgICAgICAgID0g MHgyCi19OwotCi1zdHJ1Y3QgaGlmX3JlcV90eCB7Ci0JLy8gcGFja2V0X2lkIGlzIG5vdCBpbnRl cnByZXRlZCBieSB0aGUgZGV2aWNlLCBzbyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvCi0JLy8gZGVj bGFyZSBpdCBsaXR0bGUgZW5kaWFuCi0JdTMyICAgIHBhY2tldF9pZDsKLQl1OCAgICAgbWF4X3R4 X3JhdGU7Ci0JdTggICAgIHF1ZXVlX2lkOjI7Ci0JdTggICAgIHBlZXJfc3RhX2lkOjQ7Ci0JdTgg ICAgIHJlc2VydmVkMToyOwotCXU4ICAgICBtb3JlOjE7Ci0JdTggICAgIGZjX29mZnNldDozOwot CXU4ICAgICBhZnRlcl9kdGltOjE7Ci0JdTggICAgIHJlc2VydmVkMjozOwotCXU4ICAgICBzdGFy dF9leHA6MTsKLQl1OCAgICAgcmVzZXJ2ZWQzOjM7Ci0JdTggICAgIHJldHJ5X3BvbGljeV9pbmRl eDo0OwotCV9fbGUzMiByZXNlcnZlZDQ7Ci0JX19sZTMyIGV4cGlyZV90aW1lOwotCXU4ICAgICBm cmFtZV9mb3JtYXQ6NDsKLQl1OCAgICAgZmVjX2NvZGluZzoxOwotCXU4ICAgICBzaG9ydF9naTox OwotCXU4ICAgICByZXNlcnZlZDU6MTsKLQl1OCAgICAgc3RiYzoxOwotCXU4ICAgICByZXNlcnZl ZDY7Ci0JdTggICAgIGFnZ3JlZ2F0aW9uOjE7Ci0JdTggICAgIHJlc2VydmVkNzo3OwotCXU4ICAg ICByZXNlcnZlZDg7Ci0JdTggICAgIGZyYW1lW107Ci19IF9fcGFja2VkOwotCi1lbnVtIGhpZl9x b3NfYWNrcGxjeSB7Ci0JSElGX1FPU19BQ0tQTENZX05PUk1BTCAgICAgICAgICAgICAgICAgICAg ICAgICA9IDB4MCwKLQlISUZfUU9TX0FDS1BMQ1lfVFhOT0FDSyAgICAgICAgICAgICAgICAgICAg ICAgID0gMHgxLAotCUhJRl9RT1NfQUNLUExDWV9OT0VYUEFDSyAgICAgICAgICAgICAgICAgICAg ICAgPSAweDIsCi0JSElGX1FPU19BQ0tQTENZX0JMQ0tBQ0sgICAgICAgICAgICAgICAgICAgICAg ICA9IDB4MwotfTsKLQotc3RydWN0IGhpZl9jbmZfdHggewotCV9fbGUzMiBzdGF0dXM7Ci0JLy8g cGFja2V0X2lkIGlzIGNvcGllZCBmcm9tIHN0cnVjdCBoaWZfcmVxX3R4IHdpdGhvdXQgYmVlbiBp bnRlcnByZXRlZAotCS8vIGJ5IHRoZSBkZXZpY2UsIHNvIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8g ZGVjbGFyZSBpdCBsaXR0bGUgZW5kaWFuCi0JdTMyICAgIHBhY2tldF9pZDsKLQl1OCAgICAgdHhl ZF9yYXRlOwotCXU4ICAgICBhY2tfZmFpbHVyZXM7Ci0JdTggICAgIGFnZ3I6MTsKLQl1OCAgICAg cmVxdWV1ZToxOwotCXU4ICAgICBhY2tfcG9saWN5OjI7Ci0JdTggICAgIHR4b3BfbGltaXQ6MTsK LQl1OCAgICAgcmVzZXJ2ZWQxOjM7Ci0JdTggICAgIHJlc2VydmVkMjsKLQlfX2xlMzIgbWVkaWFf ZGVsYXk7Ci0JX19sZTMyIHR4X3F1ZXVlX2RlbGF5OwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhp Zl9jbmZfbXVsdGlfdHJhbnNtaXQgewotCXU4ICAgICBudW1fdHhfY29uZnM7Ci0JdTggICAgIHJl c2VydmVkWzNdOwotCXN0cnVjdCBoaWZfY25mX3R4IHR4X2NvbmZfcGF5bG9hZFtdOwotfSBfX3Bh Y2tlZDsKLQotZW51bSBoaWZfcmlfZmxhZ3NfZW5jcnlwdCB7Ci0JSElGX1JJX0ZMQUdTX1VORU5D UllQVEVEICAgICAgICAgICAgICAgICAgID0gMHgwLAotCUhJRl9SSV9GTEFHU19XRVBfRU5DUllQ VEVEICAgICAgICAgICAgICAgICA9IDB4MSwKLQlISUZfUklfRkxBR1NfVEtJUF9FTkNSWVBURUQg ICAgICAgICAgICAgICAgPSAweDIsCi0JSElGX1JJX0ZMQUdTX0FFU19FTkNSWVBURUQgICAgICAg ICAgICAgICAgID0gMHgzLAotCUhJRl9SSV9GTEFHU19XQVBJX0VOQ1JZUFRFRCAgICAgICAgICAg ICAgICA9IDB4NAotfTsKLQotc3RydWN0IGhpZl9pbmRfcnggewotCV9fbGUzMiBzdGF0dXM7Ci0J dTggICAgIGNoYW5uZWxfbnVtYmVyOwotCXU4ICAgICByZXNlcnZlZDE7Ci0JdTggICAgIHJ4ZWRf cmF0ZTsKLQl1OCAgICAgcmNwaV9yc3NpOwotCXU4ICAgICBlbmNyeXA6MzsKLQl1OCAgICAgaW5f YWdncjoxOwotCXU4ICAgICBmaXJzdF9hZ2dyOjE7Ci0JdTggICAgIGxhc3RfYWdncjoxOwotCXU4 ICAgICBkZWZyYWc6MTsKLQl1OCAgICAgYmVhY29uOjE7Ci0JdTggICAgIHRpbToxOwotCXU4ICAg ICBiaXRtYXA6MTsKLQl1OCAgICAgbWF0Y2hfc3NpZDoxOwotCXU4ICAgICBtYXRjaF9ic3NpZDox OwotCXU4ICAgICBtb3JlOjE7Ci0JdTggICAgIHJlc2VydmVkMjoxOwotCXU4ICAgICBodDoxOwot CXU4ICAgICBzdGJjOjE7Ci0JdTggICAgIG1hdGNoX3VjX2FkZHI6MTsKLQl1OCAgICAgbWF0Y2hf bWNfYWRkcjoxOwotCXU4ICAgICBtYXRjaF9iY19hZGRyOjE7Ci0JdTggICAgIGtleV90eXBlOjE7 Ci0JdTggICAgIGtleV9pbmRleDo0OwotCXU4ICAgICByZXNlcnZlZDM6MTsKLQl1OCAgICAgcGVl cl9zdGFfaWQ6NDsKLQl1OCAgICAgcmVzZXJ2ZWQ0OjI7Ci0JdTggICAgIHJlc2VydmVkNToxOwot CXU4ICAgICBmcmFtZVtdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9yZXFfZWRjYV9xdWV1 ZV9wYXJhbXMgewotCXU4ICAgICBxdWV1ZV9pZDsKLQl1OCAgICAgcmVzZXJ2ZWQxOwotCXU4ICAg ICBhaWZzbjsKLQl1OCAgICAgcmVzZXJ2ZWQyOwotCV9fbGUxNiBjd19taW47Ci0JX19sZTE2IGN3 X21heDsKLQlfX2xlMTYgdHhfb3BfbGltaXQ7Ci0JX19sZTE2IGFsbG93ZWRfbWVkaXVtX3RpbWU7 Ci0JX19sZTMyIHJlc2VydmVkMzsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX2VkY2Ff cXVldWVfcGFyYW1zIHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhp Zl9yZXFfam9pbiB7Ci0JdTggICAgIGluZnJhc3RydWN0dXJlX2Jzc19tb2RlOjE7Ci0JdTggICAg IHJlc2VydmVkMTo3OwotCXU4ICAgICBiYW5kOwotCXU4ICAgICBjaGFubmVsX251bWJlcjsKLQl1 OCAgICAgcmVzZXJ2ZWQyOwotCXU4ICAgICBic3NpZFtFVEhfQUxFTl07Ci0JX19sZTE2IGF0aW1f d2luZG93OwotCXU4ICAgICBzaG9ydF9wcmVhbWJsZToxOwotCXU4ICAgICByZXNlcnZlZDM6NzsK LQl1OCAgICAgcHJvYmVfZm9yX2pvaW47Ci0JdTggICAgIHJlc2VydmVkNDsKLQl1OCAgICAgcmVz ZXJ2ZWQ1OjI7Ci0JdTggICAgIGZvcmNlX25vX2JlYWNvbjoxOwotCXU4ICAgICBmb3JjZV93aXRo X2luZDoxOwotCXU4ICAgICByZXNlcnZlZDY6NDsKLQlfX2xlMzIgc3NpZF9sZW5ndGg7Ci0JdTgg ICAgIHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0JX19sZTMyIGJlYWNvbl9pbnRlcnZh bDsKLQlfX2xlMzIgYmFzaWNfcmF0ZV9zZXQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2Nu Zl9qb2luIHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9pbmRf am9pbl9jb21wbGV0ZSB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBo aWZfcmVxX3NldF9ic3NfcGFyYW1zIHsKLQl1OCAgICAgbG9zdF9jb3VudF9vbmx5OjE7Ci0JdTgg ICAgIHJlc2VydmVkOjc7Ci0JdTggICAgIGJlYWNvbl9sb3N0X2NvdW50OwotCV9fbGUxNiBhaWQ7 Ci0JX19sZTMyIG9wZXJhdGlvbmFsX3JhdGVfc2V0OwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhp Zl9jbmZfc2V0X2Jzc19wYXJhbXMgewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1z dHJ1Y3QgaGlmX3JlcV9zZXRfcG1fbW9kZSB7Ci0JdTggICAgIGVudGVyX3BzbToxOwotCXU4ICAg ICByZXNlcnZlZDo2OwotCXU4ICAgICBmYXN0X3BzbToxOwotCXU4ICAgICBmYXN0X3BzbV9pZGxl X3BlcmlvZDsKLQl1OCAgICAgYXBfcHNtX2NoYW5nZV9wZXJpb2Q7Ci0JdTggICAgIG1pbl9hdXRv X3BzX3BvbGxfcGVyaW9kOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfc2V0X3BtX21v ZGUgewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2luZF9zZXRf cG1fbW9kZV9jbXBsIHsKLQlfX2xlMzIgc3RhdHVzOwotCXU4ICAgICBwbV9tb2RlOwotCXU4ICAg ICByZXNlcnZlZFszXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfcmVxX3N0YXJ0IHsKLQl1 OCAgICAgbW9kZTsKLQl1OCAgICAgYmFuZDsKLQl1OCAgICAgY2hhbm5lbF9udW1iZXI7Ci0JdTgg ICAgIHJlc2VydmVkMTsKLQlfX2xlMzIgcmVzZXJ2ZWQyOwotCV9fbGUzMiBiZWFjb25faW50ZXJ2 YWw7Ci0JdTggICAgIGR0aW1fcGVyaW9kOwotCXU4ICAgICBzaG9ydF9wcmVhbWJsZToxOwotCXU4 ICAgICByZXNlcnZlZDM6NzsKLQl1OCAgICAgcmVzZXJ2ZWQ0OwotCXU4ICAgICBzc2lkX2xlbmd0 aDsKLQl1OCAgICAgc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLQlfX2xlMzIgYmFzaWNf cmF0ZV9zZXQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9zdGFydCB7Ci0JX19sZTMy IHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfcmVxX2JlYWNvbl90cmFuc21pdCB7 Ci0JdTggICAgIGVuYWJsZV9iZWFjb25pbmc7Ci0JdTggICAgIHJlc2VydmVkWzNdOwotfSBfX3Bh Y2tlZDsKLQotc3RydWN0IGhpZl9jbmZfYmVhY29uX3RyYW5zbWl0IHsKLQlfX2xlMzIgc3RhdHVz OwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBISUZfTElOS19JRF9NQVggICAgICAgICAgICAxNAot I2RlZmluZSBISUZfTElOS19JRF9OT1RfQVNTT0NJQVRFRCAoSElGX0xJTktfSURfTUFYICsgMSkK LQotc3RydWN0IGhpZl9yZXFfbWFwX2xpbmsgewotCXU4ICAgICBtYWNfYWRkcltFVEhfQUxFTl07 Ci0JdTggICAgIHVubWFwOjE7Ci0JdTggICAgIG1mcGM6MTsKLQl1OCAgICAgcmVzZXJ2ZWQ6NjsK LQl1OCAgICAgcGVlcl9zdGFfaWQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9tYXBf bGluayB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfaW5kX3N1 c3BlbmRfcmVzdW1lX3R4IHsKLQl1OCAgICAgcmVzdW1lOjE7Ci0JdTggICAgIHJlc2VydmVkMToy OwotCXU4ICAgICBiY19tY19vbmx5OjE7Ci0JdTggICAgIHJlc2VydmVkMjo0OwotCXU4ICAgICBy ZXNlcnZlZDM7Ci0JX19sZTE2IHBlZXJfc3RhX3NldDsKLX0gX19wYWNrZWQ7Ci0KLQotI2RlZmlu ZSBNQVhfS0VZX0VOVFJJRVMgICAgICAgICAyNAotI2RlZmluZSBISUZfQVBJX1dFUF9LRVlfREFU QV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBISUZfQVBJX1RLSVBfS0VZ X0RBVEFfU0laRSAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBISUZfQVBJX1JYX01J Q19LRVlfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIEhJRl9BUElfVFhf TUlDX0tFWV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgSElGX0FQSV9B RVNfS0VZX0RBVEFfU0laRSAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgSElGX0FQ SV9XQVBJX0tFWV9EQVRBX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgSElG X0FQSV9NSUNfS0VZX0RBVEFfU0laRSAgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUg SElGX0FQSV9JR1RLX0tFWV9EQVRBX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZp bmUgSElGX0FQSV9SWF9TRVFVRU5DRV9DT1VOVEVSX1NJWkUgICAgICAgICAgICAgICAgOAotI2Rl ZmluZSBISUZfQVBJX0lQTl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0K LWVudW0gaGlmX2tleV90eXBlIHsKLQlISUZfS0VZX1RZUEVfV0VQX0RFRkFVTFQgICAgICAgICAg ICAgICAgICAgPSAweDAsCi0JSElGX0tFWV9UWVBFX1dFUF9QQUlSV0lTRSAgICAgICAgICAgICAg ICAgID0gMHgxLAotCUhJRl9LRVlfVFlQRV9US0lQX0dST1VQICAgICAgICAgICAgICAgICAgICA9 IDB4MiwKLQlISUZfS0VZX1RZUEVfVEtJUF9QQUlSV0lTRSAgICAgICAgICAgICAgICAgPSAweDMs Ci0JSElGX0tFWV9UWVBFX0FFU19HUk9VUCAgICAgICAgICAgICAgICAgICAgID0gMHg0LAotCUhJ Rl9LRVlfVFlQRV9BRVNfUEFJUldJU0UgICAgICAgICAgICAgICAgICA9IDB4NSwKLQlISUZfS0VZ X1RZUEVfV0FQSV9HUk9VUCAgICAgICAgICAgICAgICAgICAgPSAweDYsCi0JSElGX0tFWV9UWVBF X1dBUElfUEFJUldJU0UgICAgICAgICAgICAgICAgID0gMHg3LAotCUhJRl9LRVlfVFlQRV9JR1RL X0dST1VQICAgICAgICAgICAgICAgICAgICA9IDB4OCwKLQlISUZfS0VZX1RZUEVfTk9ORSAgICAg ICAgICAgICAgICAgICAgICAgICAgPSAweDkKLX07Ci0KLXN0cnVjdCBoaWZfd2VwX3BhaXJ3aXNl X2tleSB7Ci0JdTggICAgIHBlZXJfYWRkcmVzc1tFVEhfQUxFTl07Ci0JdTggICAgIHJlc2VydmVk OwotCXU4ICAgICBrZXlfbGVuZ3RoOwotCXU4ICAgICBrZXlfZGF0YVtISUZfQVBJX1dFUF9LRVlf REFUQV9TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfd2VwX2dyb3VwX2tleSB7Ci0J dTggICAgIGtleV9pZDsKLQl1OCAgICAga2V5X2xlbmd0aDsKLQl1OCAgICAgcmVzZXJ2ZWRbMl07 Ci0JdTggICAgIGtleV9kYXRhW0hJRl9BUElfV0VQX0tFWV9EQVRBX1NJWkVdOwotfSBfX3BhY2tl ZDsKLQotc3RydWN0IGhpZl90a2lwX3BhaXJ3aXNlX2tleSB7Ci0JdTggICAgIHBlZXJfYWRkcmVz c1tFVEhfQUxFTl07Ci0JdTggICAgIHJlc2VydmVkWzJdOwotCXU4ICAgICB0a2lwX2tleV9kYXRh W0hJRl9BUElfVEtJUF9LRVlfREFUQV9TSVpFXTsKLQl1OCAgICAgcnhfbWljX2tleVtISUZfQVBJ X1JYX01JQ19LRVlfU0laRV07Ci0JdTggICAgIHR4X21pY19rZXlbSElGX0FQSV9UWF9NSUNfS0VZ X1NJWkVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl90a2lwX2dyb3VwX2tleSB7Ci0JdTgg ICAgIHRraXBfa2V5X2RhdGFbSElGX0FQSV9US0lQX0tFWV9EQVRBX1NJWkVdOwotCXU4ICAgICBy eF9taWNfa2V5W0hJRl9BUElfUlhfTUlDX0tFWV9TSVpFXTsKLQl1OCAgICAga2V5X2lkOwotCXU4 ICAgICByZXNlcnZlZFszXTsKLQl1OCAgICAgcnhfc2VxdWVuY2VfY291bnRlcltISUZfQVBJX1JY X1NFUVVFTkNFX0NPVU5URVJfU0laRV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2Flc19w YWlyd2lzZV9rZXkgewotCXU4ICAgICBwZWVyX2FkZHJlc3NbRVRIX0FMRU5dOwotCXU4ICAgICBy ZXNlcnZlZFsyXTsKLQl1OCAgICAgYWVzX2tleV9kYXRhW0hJRl9BUElfQUVTX0tFWV9EQVRBX1NJ WkVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9hZXNfZ3JvdXBfa2V5IHsKLQl1OCAgICAg YWVzX2tleV9kYXRhW0hJRl9BUElfQUVTX0tFWV9EQVRBX1NJWkVdOwotCXU4ICAgICBrZXlfaWQ7 Ci0JdTggICAgIHJlc2VydmVkWzNdOwotCXU4ICAgICByeF9zZXF1ZW5jZV9jb3VudGVyW0hJRl9B UElfUlhfU0VRVUVOQ0VfQ09VTlRFUl9TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZf d2FwaV9wYWlyd2lzZV9rZXkgewotCXU4ICAgICBwZWVyX2FkZHJlc3NbRVRIX0FMRU5dOwotCXU4 ICAgICBrZXlfaWQ7Ci0JdTggICAgIHJlc2VydmVkOwotCXU4ICAgICB3YXBpX2tleV9kYXRhW0hJ Rl9BUElfV0FQSV9LRVlfREFUQV9TSVpFXTsKLQl1OCAgICAgbWljX2tleV9kYXRhW0hJRl9BUElf TUlDX0tFWV9EQVRBX1NJWkVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl93YXBpX2dyb3Vw X2tleSB7Ci0JdTggICAgIHdhcGlfa2V5X2RhdGFbSElGX0FQSV9XQVBJX0tFWV9EQVRBX1NJWkVd OwotCXU4ICAgICBtaWNfa2V5X2RhdGFbSElGX0FQSV9NSUNfS0VZX0RBVEFfU0laRV07Ci0JdTgg ICAgIGtleV9pZDsKLQl1OCAgICAgcmVzZXJ2ZWRbM107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qg aGlmX2lndGtfZ3JvdXBfa2V5IHsKLQl1OCAgICAgaWd0a19rZXlfZGF0YVtISUZfQVBJX0lHVEtf S0VZX0RBVEFfU0laRV07Ci0JdTggICAgIGtleV9pZDsKLQl1OCAgICAgcmVzZXJ2ZWRbM107Ci0J dTggICAgIGlwbltISUZfQVBJX0lQTl9TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZf cmVxX2FkZF9rZXkgewotCXU4ICAgICB0eXBlOwotCXU4ICAgICBlbnRyeV9pbmRleDsKLQl1OCAg ICAgaW50X2lkOjI7Ci0JdTggICAgIHJlc2VydmVkMTo2OwotCXU4ICAgICByZXNlcnZlZDI7Ci0J dW5pb24gewotCQlzdHJ1Y3QgaGlmX3dlcF9wYWlyd2lzZV9rZXkgIHdlcF9wYWlyd2lzZV9rZXk7 Ci0JCXN0cnVjdCBoaWZfd2VwX2dyb3VwX2tleSAgICAgd2VwX2dyb3VwX2tleTsKLQkJc3RydWN0 IGhpZl90a2lwX3BhaXJ3aXNlX2tleSB0a2lwX3BhaXJ3aXNlX2tleTsKLQkJc3RydWN0IGhpZl90 a2lwX2dyb3VwX2tleSAgICB0a2lwX2dyb3VwX2tleTsKLQkJc3RydWN0IGhpZl9hZXNfcGFpcndp c2Vfa2V5ICBhZXNfcGFpcndpc2Vfa2V5OwotCQlzdHJ1Y3QgaGlmX2Flc19ncm91cF9rZXkgICAg IGFlc19ncm91cF9rZXk7Ci0JCXN0cnVjdCBoaWZfd2FwaV9wYWlyd2lzZV9rZXkgd2FwaV9wYWly d2lzZV9rZXk7Ci0JCXN0cnVjdCBoaWZfd2FwaV9ncm91cF9rZXkgICAgd2FwaV9ncm91cF9rZXk7 Ci0JCXN0cnVjdCBoaWZfaWd0a19ncm91cF9rZXkgICAgaWd0a19ncm91cF9rZXk7Ci0JfSBrZXk7 Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9hZGRfa2V5IHsKLQlfX2xlMzIgc3RhdHVz OwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9yZXFfcmVtb3ZlX2tleSB7Ci0JdTggICAgIGVu dHJ5X2luZGV4OwotCXU4ICAgICByZXNlcnZlZFszXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBo aWZfY25mX3JlbW92ZV9rZXkgewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1lbnVt IGhpZl9ldmVudF9pbmQgewotCUhJRl9FVkVOVF9JTkRfQlNTTE9TVCAgICAgICAgICAgICAgICAg ICAgICA9IDB4MSwKLQlISUZfRVZFTlRfSU5EX0JTU1JFR0FJTkVEICAgICAgICAgICAgICAgICAg PSAweDIsCi0JSElGX0VWRU5UX0lORF9SQ1BJX1JTU0kgICAgICAgICAgICAgICAgICAgID0gMHgz LAotCUhJRl9FVkVOVF9JTkRfUFNfTU9ERV9FUlJPUiAgICAgICAgICAgICAgICA9IDB4NCwKLQlI SUZfRVZFTlRfSU5EX0lOQUNUSVZJVFkgICAgICAgICAgICAgICAgICAgPSAweDUKLX07Ci0KLWVu dW0gaGlmX3BzX21vZGVfZXJyb3IgewotCUhJRl9QU19FUlJPUl9OT19FUlJPUiAgICAgICAgICAg ICAgICAgICAgICA9IDAsCi0JSElGX1BTX0VSUk9SX0FQX05PVF9SRVNQX1RPX1BPTEwgICAgICAg ICAgID0gMSwKLQlISUZfUFNfRVJST1JfQVBfTk9UX1JFU1BfVE9fVUFQU0RfVFJJR0dFUiAgPSAy LAotCUhJRl9QU19FUlJPUl9BUF9TRU5UX1VOSUNBU1RfSU5fRE9aRSAgICAgICA9IDMsCi0JSElG X1BTX0VSUk9SX0FQX05PX0RBVEFfQUZURVJfVElNICAgICAgICAgID0gNAotfTsKLQotc3RydWN0 IGhpZl9pbmRfZXZlbnQgewotCV9fbGUzMiBldmVudF9pZDsKLQl1bmlvbiB7Ci0JCXU4ICAgICBy Y3BpX3Jzc2k7Ci0JCV9fbGUzMiBwc19tb2RlX2Vycm9yOwotCQlfX2xlMzIgcGVlcl9zdGFfc2V0 OwotCX0gZXZlbnRfZGF0YTsKLX0gX19wYWNrZWQ7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2dlbmVyYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy93Zngv aGlmX2FwaV9nZW5lcmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MTg4OTQ1 NzE4ZC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX2FwaV9nZW5l cmFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEFwYWNoZS0yLjAgKi8KLS8qCi0gKiBXRnggaGFyZHdhcmUgaW50ZXJmYWNlIGRl ZmluaXRpb25zCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjAsIFNpbGljb24gTGFib3Jh dG9yaWVzIEluYy4KLSAqLwotCi0jaWZuZGVmIFdGWF9ISUZfQVBJX0dFTkVSQUxfSAotI2RlZmlu ZSBXRlhfSElGX0FQSV9HRU5FUkFMX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxs aW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+Ci0jZWxzZQotI2luY2x1 ZGUgPG5ldC9ldGhlcm5ldC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2RlZmluZSBfX3BhY2tl ZCBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkKLSNlbmRpZgotCi0jZGVmaW5lIEhJRl9JRF9J U19JTkRJQ0FUSU9OICAgICAgMHg4MAotI2RlZmluZSBISUZfQ09VTlRFUl9NQVggICAgICAgICAg IDcKLQotc3RydWN0IGhpZl9tc2cgewotCV9fbGUxNiBsZW47Ci0JdTggICAgIGlkOwotCXU4ICAg ICByZXNlcnZlZDoxOwotCXU4ICAgICBpbnRlcmZhY2U6MjsKLQl1OCAgICAgc2VxbnVtOjM7Ci0J dTggICAgIGVuY3J5cHRlZDoyOwotCXU4ICAgICBib2R5W107Ci19IF9fcGFja2VkOwotCi1lbnVt IGhpZl9nZW5lcmFsX3JlcXVlc3RzX2lkcyB7Ci0JSElGX1JFUV9JRF9DT05GSUdVUkFUSU9OICAg ICAgICA9IDB4MDksCi0JSElGX1JFUV9JRF9DT05UUk9MX0dQSU8gICAgICAgICA9IDB4MjYsCi0J SElGX1JFUV9JRF9TRVRfU0xfTUFDX0tFWSAgICAgICA9IDB4MjcsCi0JSElGX1JFUV9JRF9TTF9F WENIQU5HRV9QVUJfS0VZUyA9IDB4MjgsCi0JSElGX1JFUV9JRF9TTF9DT05GSUdVUkUgICAgICAg ICA9IDB4MjksCi0JSElGX1JFUV9JRF9QUkVWRU5UX1JPTExCQUNLICAgICA9IDB4MmEsCi0JSElG X1JFUV9JRF9QVEFfU0VUVElOR1MgICAgICAgICA9IDB4MmIsCi0JSElGX1JFUV9JRF9QVEFfUFJJ T1JJVFkgICAgICAgICA9IDB4MmMsCi0JSElGX1JFUV9JRF9QVEFfU1RBVEUgICAgICAgICAgICA9 IDB4MmQsCi0JSElGX1JFUV9JRF9TSFVUX0RPV04gICAgICAgICAgICA9IDB4MzIsCi19OwotCi1l bnVtIGhpZl9nZW5lcmFsX2NvbmZpcm1hdGlvbnNfaWRzIHsKLQlISUZfQ05GX0lEX0NPTkZJR1VS QVRJT04gICAgICAgID0gMHgwOSwKLQlISUZfQ05GX0lEX0NPTlRST0xfR1BJTyAgICAgICAgID0g MHgyNiwKLQlISUZfQ05GX0lEX1NFVF9TTF9NQUNfS0VZICAgICAgID0gMHgyNywKLQlISUZfQ05G X0lEX1NMX0VYQ0hBTkdFX1BVQl9LRVlTID0gMHgyOCwKLQlISUZfQ05GX0lEX1NMX0NPTkZJR1VS RSAgICAgICAgID0gMHgyOSwKLQlISUZfQ05GX0lEX1BSRVZFTlRfUk9MTEJBQ0sgICAgID0gMHgy YSwKLQlISUZfQ05GX0lEX1BUQV9TRVRUSU5HUyAgICAgICAgID0gMHgyYiwKLQlISUZfQ05GX0lE X1BUQV9QUklPUklUWSAgICAgICAgID0gMHgyYywKLQlISUZfQ05GX0lEX1BUQV9TVEFURSAgICAg ICAgICAgID0gMHgyZCwKLQlISUZfQ05GX0lEX1NIVVRfRE9XTiAgICAgICAgICAgID0gMHgzMiwK LX07Ci0KLWVudW0gaGlmX2dlbmVyYWxfaW5kaWNhdGlvbnNfaWRzIHsKLQlISUZfSU5EX0lEX0VY Q0VQVElPTiAgICAgICAgICAgID0gMHhlMCwKLQlISUZfSU5EX0lEX1NUQVJUVVAgICAgICAgICAg ICAgID0gMHhlMSwKLQlISUZfSU5EX0lEX1dBS0VVUCAgICAgICAgICAgICAgID0gMHhlMiwKLQlI SUZfSU5EX0lEX0dFTkVSSUMgICAgICAgICAgICAgID0gMHhlMywKLQlISUZfSU5EX0lEX0VSUk9S ICAgICAgICAgICAgICAgID0gMHhlNCwKLQlISUZfSU5EX0lEX1NMX0VYQ0hBTkdFX1BVQl9LRVlT ID0gMHhlNQotfTsKLQotI2RlZmluZSBISUZfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgICAg ICAgICAgICAgKGNwdV90b19sZTMyKDB4MDAwMCkpCi0jZGVmaW5lIEhJRl9TVEFUVVNfRkFJTCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMDAxKSkKLSNkZWZpbmUg SElGX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUiAgICAgICAgICAgICAgIChjcHVfdG9fbGUzMigw eDAwMDIpKQotI2RlZmluZSBISUZfU1RBVFVTX1dBUk5JTkcgICAgICAgICAgICAgICAgICAgICAg ICAgKGNwdV90b19sZTMyKDB4MDAwMykpCi0jZGVmaW5lIEhJRl9TVEFUVVNfVU5LTk9XTl9SRVFV RVNUICAgICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMDA0KSkKLSNkZWZpbmUgSElGX1NU QVRVU19SWF9GQUlMX0RFQ1JZUFQgICAgICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwMTAp KQotI2RlZmluZSBISUZfU1RBVFVTX1JYX0ZBSUxfTUlDICAgICAgICAgICAgICAgICAgICAgKGNw dV90b19sZTMyKDB4MDAxMSkpCi0jZGVmaW5lIEhJRl9TVEFUVVNfUlhfRkFJTF9OT19LRVkgICAg ICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMDEyKSkKLSNkZWZpbmUgSElGX1NUQVRVU19U WF9GQUlMX1JFVFJJRVMgICAgICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwMTMpKQotI2Rl ZmluZSBISUZfU1RBVFVTX1RYX0ZBSUxfVElNRU9VVCAgICAgICAgICAgICAgICAgKGNwdV90b19s ZTMyKDB4MDAxNCkpCi0jZGVmaW5lIEhJRl9TVEFUVVNfVFhfRkFJTF9SRVFVRVVFICAgICAgICAg ICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMDE1KSkKLSNkZWZpbmUgSElGX1NUQVRVU19SRUZVU0VE ICAgICAgICAgICAgICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwMTYpKQotI2RlZmluZSBI SUZfU1RBVFVTX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4 MDAxNykpCi0jZGVmaW5lIEhJRl9TVEFUVVNfU0xLX1NFVF9LRVlfU1VDQ0VTUyAgICAgICAgICAg ICAoY3B1X3RvX2xlMzIoMHgwMDVBKSkKLSNkZWZpbmUgSElGX1NUQVRVU19TTEtfU0VUX0tFWV9B TFJFQURZX0JVUk5FRCAgICAgIChjcHVfdG9fbGUzMigweDAwNkIpKQotI2RlZmluZSBISUZfU1RB VFVTX1NMS19TRVRfS0VZX0RJU0FMTE9XRURfTU9ERSAgICAgKGNwdV90b19sZTMyKDB4MDA3Qykp Ci0jZGVmaW5lIEhJRl9TVEFUVVNfU0xLX1NFVF9LRVlfVU5LTk9XTl9NT0RFICAgICAgICAoY3B1 X3RvX2xlMzIoMHgwMDhEKSkKLSNkZWZpbmUgSElGX1NUQVRVU19TTEtfTkVHT19TVUNDRVNTICAg ICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwOUUpKQotI2RlZmluZSBISUZfU1RBVFVTX1NM S19ORUdPX0ZBSUxFRCAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4MDBBRikpCi0jZGVm aW5lIEhJRl9TVEFUVVNfUk9MTEJBQ0tfU1VDQ0VTUyAgICAgICAgICAgICAgICAoY3B1X3RvX2xl MzIoMHgxMjM0KSkKLSNkZWZpbmUgSElGX1NUQVRVU19ST0xMQkFDS19GQUlMICAgICAgICAgICAg ICAgICAgIChjcHVfdG9fbGUzMigweDEyNTYpKQotCi1lbnVtIGhpZl9hcGlfcmF0ZV9pbmRleCB7 Ci0JQVBJX1JBVEVfSU5ERVhfQl8xTUJQUyAgICAgPSAwLAotCUFQSV9SQVRFX0lOREVYX0JfMk1C UFMgICAgID0gMSwKLQlBUElfUkFURV9JTkRFWF9CXzVQNU1CUFMgICA9IDIsCi0JQVBJX1JBVEVf SU5ERVhfQl8xMU1CUFMgICAgPSAzLAotCUFQSV9SQVRFX0lOREVYX1BCQ0NfMjJNQlBTID0gNCwK LQlBUElfUkFURV9JTkRFWF9QQkNDXzMzTUJQUyA9IDUsCi0JQVBJX1JBVEVfSU5ERVhfR182TUJQ UyAgICAgPSA2LAotCUFQSV9SQVRFX0lOREVYX0dfOU1CUFMgICAgID0gNywKLQlBUElfUkFURV9J TkRFWF9HXzEyTUJQUyAgICA9IDgsCi0JQVBJX1JBVEVfSU5ERVhfR18xOE1CUFMgICAgPSA5LAot CUFQSV9SQVRFX0lOREVYX0dfMjRNQlBTICAgID0gMTAsCi0JQVBJX1JBVEVfSU5ERVhfR18zNk1C UFMgICAgPSAxMSwKLQlBUElfUkFURV9JTkRFWF9HXzQ4TUJQUyAgICA9IDEyLAotCUFQSV9SQVRF X0lOREVYX0dfNTRNQlBTICAgID0gMTMsCi0JQVBJX1JBVEVfSU5ERVhfTl82UDVNQlBTICAgPSAx NCwKLQlBUElfUkFURV9JTkRFWF9OXzEzTUJQUyAgICA9IDE1LAotCUFQSV9SQVRFX0lOREVYX05f MTlQNU1CUFMgID0gMTYsCi0JQVBJX1JBVEVfSU5ERVhfTl8yNk1CUFMgICAgPSAxNywKLQlBUElf UkFURV9JTkRFWF9OXzM5TUJQUyAgICA9IDE4LAotCUFQSV9SQVRFX0lOREVYX05fNTJNQlBTICAg ID0gMTksCi0JQVBJX1JBVEVfSU5ERVhfTl81OFA1TUJQUyAgPSAyMCwKLQlBUElfUkFURV9JTkRF WF9OXzY1TUJQUyAgICA9IDIxLAotCUFQSV9SQVRFX05VTV9FTlRSSUVTICAgICAgID0gMjIKLX07 Ci0KLWVudW0gaGlmX2Z3X3R5cGUgewotCUhJRl9GV19UWVBFX0VURiAgPSAweDAsCi0JSElGX0ZX X1RZUEVfV0ZNICA9IDB4MSwKLQlISUZfRldfVFlQRV9XU00gID0gMHgyCi19OwotCi1zdHJ1Y3Qg aGlmX2luZF9zdGFydHVwIHsKLQkvLyBBcyB0aGUgb3RoZXJzLCB0aGlzIHN0cnVjdCBpcyBpbnRl cnByZXRlZCBhcyBsaXR0bGUgZW5kaWFuIGJ5IHRoZQotCS8vIGRldmljZS4gSG93ZXZlciwgdGhp cyBzdHJ1Y3QgaXMgYWxzbyB1c2VkIGJ5IHRoZSBkcml2ZXIuIFdlIHByZWZlciB0bwotCS8vIGRl Y2xhcmUgaXQgaW4gbmF0aXZlIG9yZGVyIGFuZCBkb2luZyBieXRlIHN3YXAgb24gcmVjZXB0aW9u LgotCV9fbGUzMiBzdGF0dXM7Ci0JdTE2ICAgIGhhcmR3YXJlX2lkOwotCXU4ICAgICBvcG5bMTRd OwotCXU4ICAgICB1aWRbOF07Ci0JdTE2ICAgIG51bV9pbnBfY2hfYnVmczsKLQl1MTYgICAgc2l6 ZV9pbnBfY2hfYnVmOwotCXU4ICAgICBudW1fbGlua3NfYXA7Ci0JdTggICAgIG51bV9pbnRlcmZh Y2VzOwotCXU4ICAgICBtYWNfYWRkclsyXVtFVEhfQUxFTl07Ci0JdTggICAgIGFwaV92ZXJzaW9u X21pbm9yOwotCXU4ICAgICBhcGlfdmVyc2lvbl9tYWpvcjsKLQl1OCAgICAgbGlua19tb2RlOjI7 Ci0JdTggICAgIHJlc2VydmVkMTo2OwotCXU4ICAgICByZXNlcnZlZDI7Ci0JdTggICAgIHJlc2Vy dmVkMzsKLQl1OCAgICAgcmVzZXJ2ZWQ0OwotCXU4ICAgICBmaXJtd2FyZV9idWlsZDsKLQl1OCAg ICAgZmlybXdhcmVfbWlub3I7Ci0JdTggICAgIGZpcm13YXJlX21ham9yOwotCXU4ICAgICBmaXJt d2FyZV90eXBlOwotCXU4ICAgICBkaXNhYmxlZF9jaGFubmVsX2xpc3RbMl07Ci0JdTggICAgIHJl Z2lvbl9zZWxfbW9kZTo0OwotCXU4ICAgICByZXNlcnZlZDU6NDsKLQl1OCAgICAgcGh5MV9yZWdp b246MzsKLQl1OCAgICAgcGh5MF9yZWdpb246MzsKLQl1OCAgICAgb3RwX3BoeV92ZXI6MjsKLQl1 MzIgICAgc3VwcG9ydGVkX3JhdGVfbWFzazsKLQl1OCAgICAgZmlybXdhcmVfbGFiZWxbMTI4XTsK LX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfaW5kX3dha2V1cCB7Ci19IF9fcGFja2VkOwotCi1z dHJ1Y3QgaGlmX3JlcV9jb25maWd1cmF0aW9uIHsKLQlfX2xlMTYgbGVuZ3RoOwotCXU4ICAgICBw ZHNfZGF0YVtdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfY29uZmlndXJhdGlvbiB7 Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLWVudW0gaGlmX2dwaW9fbW9kZSB7Ci0J SElGX0dQSU9fTU9ERV9EMCAgICAgICA9IDB4MCwKLQlISUZfR1BJT19NT0RFX0QxICAgICAgID0g MHgxLAotCUhJRl9HUElPX01PREVfT0QwICAgICAgPSAweDIsCi0JSElGX0dQSU9fTU9ERV9PRDEg ICAgICA9IDB4MywKLQlISUZfR1BJT19NT0RFX1RSSVNUQVRFID0gMHg0LAotCUhJRl9HUElPX01P REVfVE9HR0xFICAgPSAweDUsCi0JSElGX0dQSU9fTU9ERV9SRUFEICAgICA9IDB4NgotfTsKLQot c3RydWN0IGhpZl9yZXFfY29udHJvbF9ncGlvIHsKLQl1OCAgICAgZ3Bpb19sYWJlbDsKLQl1OCAg ICAgZ3Bpb19tb2RlOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfY29udHJvbF9ncGlv IHsKLQlfX2xlMzIgc3RhdHVzOwotCV9fbGUzMiB2YWx1ZTsKLX0gX19wYWNrZWQ7Ci0KLWVudW0g aGlmX2dlbmVyaWNfaW5kaWNhdGlvbl90eXBlIHsKLQlISUZfR0VORVJJQ19JTkRJQ0FUSU9OX1RZ UEVfUkFXICAgICAgICAgICAgICAgID0gMHgwLAotCUhJRl9HRU5FUklDX0lORElDQVRJT05fVFlQ RV9TVFJJTkcgICAgICAgICAgICAgPSAweDEsCi0JSElGX0dFTkVSSUNfSU5ESUNBVElPTl9UWVBF X1JYX1NUQVRTICAgICAgICAgICA9IDB4MiwKLQlISUZfR0VORVJJQ19JTkRJQ0FUSU9OX1RZUEVf VFhfUE9XRVJfTE9PUF9JTkZPID0gMHgzLAotfTsKLQotc3RydWN0IGhpZl9yeF9zdGF0cyB7Ci0J X19sZTMyIG5iX3J4X2ZyYW1lOwotCV9fbGUzMiBuYl9jcmNfZnJhbWU7Ci0JX19sZTMyIHBlcl90 b3RhbDsKLQlfX2xlMzIgdGhyb3VnaHB1dDsKLQlfX2xlMzIgbmJfcnhfYnlfcmF0ZVtBUElfUkFU RV9OVU1fRU5UUklFU107Ci0JX19sZTE2IHBlcltBUElfUkFURV9OVU1fRU5UUklFU107Ci0JX19s ZTE2IHNucltBUElfUkFURV9OVU1fRU5UUklFU107ICAvLyBzaWduZWQgdmFsdWUKLQlfX2xlMTYg cnNzaVtBUElfUkFURV9OVU1fRU5UUklFU107IC8vIHNpZ25lZCB2YWx1ZQotCV9fbGUxNiBjZm9b QVBJX1JBVEVfTlVNX0VOVFJJRVNdOyAgLy8gc2lnbmVkIHZhbHVlCi0JX19sZTMyIGRhdGU7Ci0J X19sZTMyIHB3cl9jbGtfZnJlcTsKLQl1OCAgICAgaXNfZXh0X3B3cl9jbGs7Ci0JczggICAgIGN1 cnJlbnRfdGVtcDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfdHhfcG93ZXJfbG9vcF9pbmZv IHsKLQlfX2xlMTYgdHhfZ2Fpbl9kaWc7Ci0JX19sZTE2IHR4X2dhaW5fcGE7Ci0JX19sZTE2IHRh cmdldF9wb3V0OyAvLyBzaWduZWQgdmFsdWUKLQlfX2xlMTYgcF9lc3RpbWF0aW9uOyAvLyBzaWdu ZWQgdmFsdWUKLQlfX2xlMTYgdnBkZXQ7Ci0JdTggICAgIG1lYXN1cmVtZW50X2luZGV4OwotCXU4 ICAgICByZXNlcnZlZDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfaW5kX2dlbmVyaWMgewot CV9fbGUzMiB0eXBlOwotCXVuaW9uIHsKLQkJc3RydWN0IGhpZl9yeF9zdGF0cyByeF9zdGF0czsK LQkJc3RydWN0IGhpZl90eF9wb3dlcl9sb29wX2luZm8gdHhfcG93ZXJfbG9vcF9pbmZvOwotCX0g ZGF0YTsKLX0gX19wYWNrZWQ7Ci0KLWVudW0gaGlmX2Vycm9yIHsKLQlISUZfRVJST1JfRklSTVdB UkVfUk9MTEJBQ0sgICAgICAgICAgID0gMHgwMCwKLQlISUZfRVJST1JfRklSTVdBUkVfREVCVUdf RU5BQkxFRCAgICAgID0gMHgwMSwKLQlISUZfRVJST1JfU0xLX09VVERBVEVEX1NFU1NJT05fS0VZ ICAgID0gMHgwMiwKLQlISUZfRVJST1JfU0xLX1NFU1NJT05fS0VZICAgICAgICAgICAgID0gMHgw MywKLQlISUZfRVJST1JfT09SX1ZPTFRBR0UgICAgICAgICAgICAgICAgID0gMHgwNCwKLQlISUZf RVJST1JfUERTX1BBWUxPQUQgICAgICAgICAgICAgICAgID0gMHgwNSwKLQlISUZfRVJST1JfT09S X1RFTVBFUkFUVVJFICAgICAgICAgICAgID0gMHgwNiwKLQlISUZfRVJST1JfU0xLX1JFUV9EVVJJ TkdfS0VZX0VYQ0hBTkdFID0gMHgwNywKLQlISUZfRVJST1JfU0xLX01VTFRJX1RYX1VOU1VQUE9S VEVEICAgID0gMHgwOCwKLQlISUZfRVJST1JfU0xLX09WRVJGTE9XICAgICAgICAgICAgICAgID0g MHgwOSwKLQlISUZfRVJST1JfU0xLX0RFQ1JZUFRJT04gICAgICAgICAgICAgID0gMHgwYSwKLQlI SUZfRVJST1JfU0xLX1dST05HX0VOQ1JZUFRJT05fU1RBVEUgID0gMHgwYiwKLQlISUZfRVJST1Jf SElGX0JVU19GUkVRVUVOQ1lfVE9PX0xPVyAgID0gMHgwYywKLQlISUZfRVJST1JfSElGX1JYX0RB VEFfVE9PX0xBUkdFICAgICAgID0gMHgwZSwKLQlISUZfRVJST1JfSElGX1RYX1FVRVVFX0ZVTEwg ICAgICAgICAgID0gMHgwZCwKLQlISUZfRVJST1JfSElGX0JVUyAgICAgICAgICAgICAgICAgICAg ID0gMHgwZiwKLQlISUZfRVJST1JfUERTX1RFU1RGRUFUVVJFICAgICAgICAgICAgID0gMHgxMCwK LQlISUZfRVJST1JfU0xLX1VOQ09ORklHVVJFRCAgICAgICAgICAgID0gMHgxMSwKLX07Ci0KLXN0 cnVjdCBoaWZfaW5kX2Vycm9yIHsKLQlfX2xlMzIgdHlwZTsKLQl1OCAgICAgZGF0YVtdOwotfSBf X3BhY2tlZDsKLQotc3RydWN0IGhpZl9pbmRfZXhjZXB0aW9uIHsKLQlfX2xlMzIgdHlwZTsKLQl1 OCAgICAgZGF0YVtdOwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZfc2VjdXJlX2xpbmtfc3RhdGUg ewotCVNFQ19MSU5LX1VOQVZBSUxBQkxFID0gMHgwLAotCVNFQ19MSU5LX1JFU0VSVkVEICAgID0g MHgxLAotCVNFQ19MSU5LX0VWQUwgICAgICAgID0gMHgyLAotCVNFQ19MSU5LX0VORk9SQ0VEICAg ID0gMHgzCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlm X2FwaV9taWIuaCBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX2FwaV9taWIuaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYWNlOTI0NzIwY2U2Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJp dmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX21pYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQzICsw LDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICovCi0vKgotICog V0Z4IGhhcmR3YXJlIGludGVyZmFjZSBkZWZpbml0aW9ucwotICoKLSAqIENvcHlyaWdodCAoYykg MjAxOC0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcyBJbmMuCi0gKi8KLQotI2lmbmRlZiBXRlhf SElGX0FQSV9NSUJfSAotI2RlZmluZSBXRlhfSElGX0FQSV9NSUJfSAotCi0jaW5jbHVkZSAiaGlm X2FwaV9nZW5lcmFsLmgiCi0KLSNkZWZpbmUgSElGX0FQSV9JUFY0X0FERFJFU1NfU0laRSA0Ci0j ZGVmaW5lIEhJRl9BUElfSVBWNl9BRERSRVNTX1NJWkUgMTYKLQotZW51bSBoaWZfbWliX2lkcyB7 Ci0JSElGX01JQl9JRF9HTF9PUEVSQVRJT05BTF9QT1dFUl9NT0RFICAgICAgICA9IDB4MjAwMCwK LQlISUZfTUlCX0lEX0dMX0JMT0NLX0FDS19JTkZPICAgICAgICAgICAgICAgID0gMHgyMDAxLAot CUhJRl9NSUJfSURfR0xfU0VUX01VTFRJX01TRyAgICAgICAgICAgICAgICAgPSAweDIwMDIsCi0J SElGX01JQl9JRF9DQ0FfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjAwMywKLQlI SUZfTUlCX0lEX0VUSEVSVFlQRV9EQVRBRlJBTUVfQ09ORElUSU9OICAgID0gMHgyMDEwLAotCUhJ Rl9NSUJfSURfUE9SVF9EQVRBRlJBTUVfQ09ORElUSU9OICAgICAgICAgPSAweDIwMTEsCi0JSElG X01JQl9JRF9NQUdJQ19EQVRBRlJBTUVfQ09ORElUSU9OICAgICAgICA9IDB4MjAxMiwKLQlISUZf TUlCX0lEX01BQ19BRERSX0RBVEFGUkFNRV9DT05ESVRJT04gICAgID0gMHgyMDEzLAotCUhJRl9N SUJfSURfSVBWNF9BRERSX0RBVEFGUkFNRV9DT05ESVRJT04gICAgPSAweDIwMTQsCi0JSElGX01J Ql9JRF9JUFY2X0FERFJfREFUQUZSQU1FX0NPTkRJVElPTiAgICA9IDB4MjAxNSwKLQlISUZfTUlC X0lEX1VDX01DX0JDX0RBVEFGUkFNRV9DT05ESVRJT04gICAgID0gMHgyMDE2LAotCUhJRl9NSUJf SURfQ09ORklHX0RBVEFfRklMVEVSICAgICAgICAgICAgICAgPSAweDIwMTcsCi0JSElGX01JQl9J RF9TRVRfREFUQV9GSUxURVJJTkcgICAgICAgICAgICAgICA9IDB4MjAxOCwKLQlISUZfTUlCX0lE X0FSUF9JUF9BRERSRVNTRVNfVEFCTEUgICAgICAgICAgID0gMHgyMDE5LAotCUhJRl9NSUJfSURf TlNfSVBfQUREUkVTU0VTX1RBQkxFICAgICAgICAgICAgPSAweDIwMUEsCi0JSElGX01JQl9JRF9S WF9GSUxURVIgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjAxQiwKLQlISUZfTUlCX0lEX0JF QUNPTl9GSUxURVJfVEFCTEUgICAgICAgICAgICAgID0gMHgyMDFDLAotCUhJRl9NSUJfSURfQkVB Q09OX0ZJTFRFUl9FTkFCTEUgICAgICAgICAgICAgPSAweDIwMUQsCi0JSElGX01JQl9JRF9HUlBf U0VRX0NPVU5URVIgICAgICAgICAgICAgICAgICA9IDB4MjAzMCwKLQlISUZfTUlCX0lEX1RTRl9D T1VOVEVSICAgICAgICAgICAgICAgICAgICAgID0gMHgyMDMxLAotCUhJRl9NSUJfSURfU1RBVElT VElDU19UQUJMRSAgICAgICAgICAgICAgICAgPSAweDIwMzIsCi0JSElGX01JQl9JRF9DT1VOVEVS U19UQUJMRSAgICAgICAgICAgICAgICAgICA9IDB4MjAzMywKLQlISUZfTUlCX0lEX01BWF9UWF9Q T1dFUl9MRVZFTCAgICAgICAgICAgICAgID0gMHgyMDM0LAotCUhJRl9NSUJfSURfRVhURU5ERURf Q09VTlRFUlNfVEFCTEUgICAgICAgICAgPSAweDIwMzUsCi0JSElGX01JQl9JRF9ET1QxMV9NQUNf QUREUkVTUyAgICAgICAgICAgICAgICA9IDB4MjA0MCwKLQlISUZfTUlCX0lEX0RPVDExX01BWF9U UkFOU01JVF9NU0RVX0xJRkVUSU1FID0gMHgyMDQxLAotCUhJRl9NSUJfSURfRE9UMTFfTUFYX1JF Q0VJVkVfTElGRVRJTUUgICAgICAgPSAweDIwNDIsCi0JSElGX01JQl9JRF9ET1QxMV9XRVBfREVG QVVMVF9LRVlfSUQgICAgICAgICA9IDB4MjA0MywKLQlISUZfTUlCX0lEX0RPVDExX1JUU19USFJF U0hPTEQgICAgICAgICAgICAgID0gMHgyMDQ0LAotCUhJRl9NSUJfSURfU0xPVF9USU1FICAgICAg ICAgICAgICAgICAgICAgICAgPSAweDIwNDUsCi0JSElGX01JQl9JRF9DVVJSRU5UX1RYX1BPV0VS X0xFVkVMICAgICAgICAgICA9IDB4MjA0NiwKLQlISUZfTUlCX0lEX05PTl9FUlBfUFJPVEVDVElP TiAgICAgICAgICAgICAgID0gMHgyMDQ3LAotCUhJRl9NSUJfSURfVEVNUExBVEVfRlJBTUUgICAg ICAgICAgICAgICAgICAgPSAweDIwNDgsCi0JSElGX01JQl9JRF9CRUFDT05fV0FLRVVQX1BFUklP RCAgICAgICAgICAgICA9IDB4MjA0OSwKLQlISUZfTUlCX0lEX1JDUElfUlNTSV9USFJFU0hPTEQg ICAgICAgICAgICAgID0gMHgyMDRBLAotCUhJRl9NSUJfSURfQkxPQ0tfQUNLX1BPTElDWSAgICAg ICAgICAgICAgICAgPSAweDIwNEIsCi0JSElGX01JQl9JRF9PVkVSUklERV9JTlRFUk5BTF9UWF9S QVRFICAgICAgICA9IDB4MjA0QywKLQlISUZfTUlCX0lEX1NFVF9BU1NPQ0lBVElPTl9NT0RFICAg ICAgICAgICAgID0gMHgyMDRELAotCUhJRl9NSUJfSURfU0VUX1VBUFNEX0lORk9STUFUSU9OICAg ICAgICAgICAgPSAweDIwNEUsCi0JSElGX01JQl9JRF9TRVRfVFhfUkFURV9SRVRSWV9QT0xJQ1kg ICAgICAgICA9IDB4MjA0RiwKLQlISUZfTUlCX0lEX1BST1RFQ1RFRF9NR01UX1BPTElDWSAgICAg ICAgICAgID0gMHgyMDUwLAotCUhJRl9NSUJfSURfU0VUX0hUX1BST1RFQ1RJT04gICAgICAgICAg ICAgICAgPSAweDIwNTEsCi0JSElGX01JQl9JRF9LRUVQX0FMSVZFX1BFUklPRCAgICAgICAgICAg ICAgICA9IDB4MjA1MiwKLQlISUZfTUlCX0lEX0FSUF9LRUVQX0FMSVZFX1BFUklPRCAgICAgICAg ICAgID0gMHgyMDUzLAotCUhJRl9NSUJfSURfSU5BQ1RJVklUWV9USU1FUiAgICAgICAgICAgICAg ICAgPSAweDIwNTQsCi0JSElGX01JQl9JRF9JTlRFUkZBQ0VfUFJPVEVDVElPTiAgICAgICAgICAg ICA9IDB4MjA1NSwKLQlISUZfTUlCX0lEX0JFQUNPTl9TVEFUUyAgICAgICAgICAgICAgICAgICAg ID0gMHgyMDU2LAotfTsKLQotZW51bSBoaWZfb3BfcG93ZXJfbW9kZSB7Ci0JSElGX09QX1BPV0VS X01PREVfQUNUSVZFICAgID0gMHgwLAotCUhJRl9PUF9QT1dFUl9NT0RFX0RPWkUgICAgICA9IDB4 MSwKLQlISUZfT1BfUE9XRVJfTU9ERV9RVUlFU0NFTlQgPSAweDIKLX07Ci0KLXN0cnVjdCBoaWZf bWliX2dsX29wZXJhdGlvbmFsX3Bvd2VyX21vZGUgewotCXU4ICAgICBwb3dlcl9tb2RlOjQ7Ci0J dTggICAgIHJlc2VydmVkMTozOwotCXU4ICAgICB3dXBfaW5kX2FjdGl2YXRpb246MTsKLQl1OCAg ICAgcmVzZXJ2ZWQyWzNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJfZ2xfc2V0X211 bHRpX21zZyB7Ci0JdTggICAgIGVuYWJsZV9tdWx0aV90eF9jb25mOjE7Ci0JdTggICAgIHJlc2Vy dmVkMTo3OwotCXU4ICAgICByZXNlcnZlZDJbM107Ci19IF9fcGFja2VkOwotCi1lbnVtIGhpZl9h cnBfbnNfZnJhbWVfdHJlYXRtZW50IHsKLQlISUZfQVJQX05TX0ZJTFRFUklOR19ESVNBQkxFID0g MHgwLAotCUhJRl9BUlBfTlNfRklMVEVSSU5HX0VOQUJMRSAgPSAweDEsCi0JSElGX0FSUF9OU19S RVBMWV9FTkFCTEUgICAgICA9IDB4MgotfTsKLQotc3RydWN0IGhpZl9taWJfYXJwX2lwX2FkZHJf dGFibGUgewotCXU4ICAgICBjb25kaXRpb25faWR4OwotCXU4ICAgICBhcnBfZW5hYmxlOwotCXU4 ICAgICByZXNlcnZlZFsyXTsKLQl1OCAgICAgaXB2NF9hZGRyZXNzW0hJRl9BUElfSVBWNF9BRERS RVNTX1NJWkVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJfcnhfZmlsdGVyIHsKLQl1 OCAgICAgcmVzZXJ2ZWQxOjE7Ci0JdTggICAgIGJzc2lkX2ZpbHRlcjoxOwotCXU4ICAgICByZXNl cnZlZDI6MTsKLQl1OCAgICAgZndkX3Byb2JlX3JlcToxOwotCXU4ICAgICBrZWVwX2FsaXZlX2Zp bHRlcjoxOwotCXU4ICAgICByZXNlcnZlZDM6MzsKLQl1OCAgICAgcmVzZXJ2ZWQ0WzNdOwotfSBf X3BhY2tlZDsKLQotc3RydWN0IGhpZl9pZV90YWJsZV9lbnRyeSB7Ci0JdTggICAgIGllX2lkOwot CXU4ICAgICBoYXNfY2hhbmdlZDoxOwotCXU4ICAgICBub19sb25nZXI6MTsKLQl1OCAgICAgaGFz X2FwcGVhcmVkOjE7Ci0JdTggICAgIHJlc2VydmVkOjE7Ci0JdTggICAgIG51bV9tYXRjaF9kYXRh OjQ7Ci0JdTggICAgIG91aVszXTsKLQl1OCAgICAgbWF0Y2hfZGF0YVszXTsKLX0gX19wYWNrZWQ7 Ci0KLXN0cnVjdCBoaWZfbWliX2Jjbl9maWx0ZXJfdGFibGUgewotCV9fbGUzMiBudW1fb2ZfaW5m b19lbG10czsKLQlzdHJ1Y3QgaGlmX2llX3RhYmxlX2VudHJ5IGllX3RhYmxlW107Ci19IF9fcGFj a2VkOwotCi1lbnVtIGhpZl9iZWFjb25fZmlsdGVyIHsKLQlISUZfQkVBQ09OX0ZJTFRFUl9ESVNB QkxFICA9IDB4MCwKLQlISUZfQkVBQ09OX0ZJTFRFUl9FTkFCTEUgICA9IDB4MSwKLQlISUZfQkVB Q09OX0ZJTFRFUl9BVVRPX0VSUCA9IDB4MgotfTsKLQotc3RydWN0IGhpZl9taWJfYmNuX2ZpbHRl cl9lbmFibGUgewotCV9fbGUzMiBlbmFibGU7Ci0JX19sZTMyIGJjbl9jb3VudDsKLX0gX19wYWNr ZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX2V4dGVuZGVkX2NvdW50X3RhYmxlIHsKLQlfX2xlMzIgY291 bnRfcGxjcF9lcnJvcnM7Ci0JX19sZTMyIGNvdW50X2Zjc19lcnJvcnM7Ci0JX19sZTMyIGNvdW50 X3R4X3BhY2tldHM7Ci0JX19sZTMyIGNvdW50X3J4X3BhY2tldHM7Ci0JX19sZTMyIGNvdW50X3J4 X3BhY2tldF9lcnJvcnM7Ci0JX19sZTMyIGNvdW50X3J4X2RlY3J5cHRpb25fZmFpbHVyZXM7Ci0J X19sZTMyIGNvdW50X3J4X21pY19mYWlsdXJlczsKLQlfX2xlMzIgY291bnRfcnhfbm9fa2V5X2Zh aWx1cmVzOwotCV9fbGUzMiBjb3VudF90eF9tdWx0aWNhc3RfZnJhbWVzOwotCV9fbGUzMiBjb3Vu dF90eF9mcmFtZXNfc3VjY2VzczsKLQlfX2xlMzIgY291bnRfdHhfZnJhbWVfZmFpbHVyZXM7Ci0J X19sZTMyIGNvdW50X3R4X2ZyYW1lc19yZXRyaWVkOwotCV9fbGUzMiBjb3VudF90eF9mcmFtZXNf bXVsdGlfcmV0cmllZDsKLQlfX2xlMzIgY291bnRfcnhfZnJhbWVfZHVwbGljYXRlczsKLQlfX2xl MzIgY291bnRfcnRzX3N1Y2Nlc3M7Ci0JX19sZTMyIGNvdW50X3J0c19mYWlsdXJlczsKLQlfX2xl MzIgY291bnRfYWNrX2ZhaWx1cmVzOwotCV9fbGUzMiBjb3VudF9yeF9tdWx0aWNhc3RfZnJhbWVz OwotCV9fbGUzMiBjb3VudF9yeF9mcmFtZXNfc3VjY2VzczsKLQlfX2xlMzIgY291bnRfcnhfY21h Y2ljdl9lcnJvcnM7Ci0JX19sZTMyIGNvdW50X3J4X2NtYWNfcmVwbGF5czsKLQlfX2xlMzIgY291 bnRfcnhfbWdtdF9jY21wX3JlcGxheXM7Ci0JX19sZTMyIGNvdW50X3J4X2JpcG1pY19lcnJvcnM7 Ci0JX19sZTMyIGNvdW50X3J4X2JlYWNvbjsKLQlfX2xlMzIgY291bnRfbWlzc19iZWFjb247Ci0J X19sZTMyIHJlc2VydmVkWzE1XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX2NvdW50 X3RhYmxlIHsKLQlfX2xlMzIgY291bnRfcGxjcF9lcnJvcnM7Ci0JX19sZTMyIGNvdW50X2Zjc19l cnJvcnM7Ci0JX19sZTMyIGNvdW50X3R4X3BhY2tldHM7Ci0JX19sZTMyIGNvdW50X3J4X3BhY2tl dHM7Ci0JX19sZTMyIGNvdW50X3J4X3BhY2tldF9lcnJvcnM7Ci0JX19sZTMyIGNvdW50X3J4X2Rl Y3J5cHRpb25fZmFpbHVyZXM7Ci0JX19sZTMyIGNvdW50X3J4X21pY19mYWlsdXJlczsKLQlfX2xl MzIgY291bnRfcnhfbm9fa2V5X2ZhaWx1cmVzOwotCV9fbGUzMiBjb3VudF90eF9tdWx0aWNhc3Rf ZnJhbWVzOwotCV9fbGUzMiBjb3VudF90eF9mcmFtZXNfc3VjY2VzczsKLQlfX2xlMzIgY291bnRf dHhfZnJhbWVfZmFpbHVyZXM7Ci0JX19sZTMyIGNvdW50X3R4X2ZyYW1lc19yZXRyaWVkOwotCV9f bGUzMiBjb3VudF90eF9mcmFtZXNfbXVsdGlfcmV0cmllZDsKLQlfX2xlMzIgY291bnRfcnhfZnJh bWVfZHVwbGljYXRlczsKLQlfX2xlMzIgY291bnRfcnRzX3N1Y2Nlc3M7Ci0JX19sZTMyIGNvdW50 X3J0c19mYWlsdXJlczsKLQlfX2xlMzIgY291bnRfYWNrX2ZhaWx1cmVzOwotCV9fbGUzMiBjb3Vu dF9yeF9tdWx0aWNhc3RfZnJhbWVzOwotCV9fbGUzMiBjb3VudF9yeF9mcmFtZXNfc3VjY2VzczsK LQlfX2xlMzIgY291bnRfcnhfY21hY2ljdl9lcnJvcnM7Ci0JX19sZTMyIGNvdW50X3J4X2NtYWNf cmVwbGF5czsKLQlfX2xlMzIgY291bnRfcnhfbWdtdF9jY21wX3JlcGxheXM7Ci0JX19sZTMyIGNv dW50X3J4X2JpcG1pY19lcnJvcnM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9tYWNf YWRkcmVzcyB7Ci0JdTggICAgIG1hY19hZGRyW0VUSF9BTEVOXTsKLQlfX2xlMTYgcmVzZXJ2ZWQ7 Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl93ZXBfZGVmYXVsdF9rZXlfaWQgewotCXU4 ICAgICB3ZXBfZGVmYXVsdF9rZXlfaWQ7Ci0JdTggICAgIHJlc2VydmVkWzNdOwotfSBfX3BhY2tl ZDsKLQotc3RydWN0IGhpZl9taWJfZG90MTFfcnRzX3RocmVzaG9sZCB7Ci0JX19sZTMyIHRocmVz aG9sZDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX3Nsb3RfdGltZSB7Ci0JX19sZTMy IHNsb3RfdGltZTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX2N1cnJlbnRfdHhfcG93 ZXJfbGV2ZWwgewotCV9fbGUzMiBwb3dlcl9sZXZlbDsgLy8gc2lnbmVkIHZhbHVlCi19IF9fcGFj a2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9ub25fZXJwX3Byb3RlY3Rpb24gewotCXU4ICAgICB1c2Vf Y3RzX3RvX3NlbGY6MTsKLQl1OCAgICAgcmVzZXJ2ZWQxOjc7Ci0JdTggICAgIHJlc2VydmVkMlsz XTsKLX0gX19wYWNrZWQ7Ci0KLWVudW0gaGlmX3RtcGx0IHsKLQlISUZfVE1QTFRfUFJCUkVRID0g MHgwLAotCUhJRl9UTVBMVF9CQ04gICAgPSAweDEsCi0JSElGX1RNUExUX05VTEwgICA9IDB4MiwK LQlISUZfVE1QTFRfUU9TTlVMID0gMHgzLAotCUhJRl9UTVBMVF9QU1BPTEwgPSAweDQsCi0JSElG X1RNUExUX1BSQlJFUyA9IDB4NSwKLQlISUZfVE1QTFRfQVJQICAgID0gMHg2LAotCUhJRl9UTVBM VF9OQSAgICAgPSAweDcKLX07Ci0KLSNkZWZpbmUgSElGX0FQSV9NQVhfVEVNUExBVEVfRlJBTUVf U0laRSA3MDAKLQotc3RydWN0IGhpZl9taWJfdGVtcGxhdGVfZnJhbWUgewotCXU4ICAgICBmcmFt ZV90eXBlOwotCXU4ICAgICBpbml0X3JhdGU6NzsKLQl1OCAgICAgbW9kZToxOwotCV9fbGUxNiBm cmFtZV9sZW5ndGg7Ci0JdTggICAgIGZyYW1lW107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlm X21pYl9iZWFjb25fd2FrZV91cF9wZXJpb2QgewotCXU4ICAgICB3YWtldXBfcGVyaW9kX21pbjsK LQl1OCAgICAgcmVjZWl2ZV9kdGltOjE7Ci0JdTggICAgIHJlc2VydmVkMTo3OwotCXU4ICAgICB3 YWtldXBfcGVyaW9kX21heDsKLQl1OCAgICAgcmVzZXJ2ZWQyOwotfSBfX3BhY2tlZDsKLQotc3Ry dWN0IGhpZl9taWJfcmNwaV9yc3NpX3RocmVzaG9sZCB7Ci0JdTggICAgIGRldGVjdGlvbjoxOwot CXU4ICAgICByY3BpX3Jzc2k6MTsKLQl1OCAgICAgdXBwZXJ0aHJlc2g6MTsKLQl1OCAgICAgbG93 ZXJ0aHJlc2g6MTsKLQl1OCAgICAgcmVzZXJ2ZWQ6NDsKLQl1OCAgICAgbG93ZXJfdGhyZXNob2xk OwotCXU4ICAgICB1cHBlcl90aHJlc2hvbGQ7Ci0JdTggICAgIHJvbGxpbmdfYXZlcmFnZV9jb3Vu dDsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgREVGQVVMVF9CQV9NQVhfUlhfQlVGRkVSX1NJWkUg MTYKLQotc3RydWN0IGhpZl9taWJfYmxvY2tfYWNrX3BvbGljeSB7Ci0JdTggICAgIGJsb2NrX2Fj a190eF90aWRfcG9saWN5OwotCXU4ICAgICByZXNlcnZlZDE7Ci0JdTggICAgIGJsb2NrX2Fja19y eF90aWRfcG9saWN5OwotCXU4ICAgICBibG9ja19hY2tfcnhfbWF4X2J1ZmZlcl9zaXplOwotfSBf X3BhY2tlZDsKLQotZW51bSBoaWZfbXBkdV9zdGFydF9zcGFjaW5nIHsKLQlISUZfTVBEVV9TVEFS VF9TUEFDSU5HX05PX1JFU1RSSUMgPSAweDAsCi0JSElGX01QRFVfU1RBUlRfU1BBQ0lOR19RVUFS VEVSICAgID0gMHgxLAotCUhJRl9NUERVX1NUQVJUX1NQQUNJTkdfSEFMRiAgICAgICA9IDB4MiwK LQlISUZfTVBEVV9TVEFSVF9TUEFDSU5HX09ORSAgICAgICAgPSAweDMsCi0JSElGX01QRFVfU1RB UlRfU1BBQ0lOR19UV08gICAgICAgID0gMHg0LAotCUhJRl9NUERVX1NUQVJUX1NQQUNJTkdfRk9V UiAgICAgICA9IDB4NSwKLQlISUZfTVBEVV9TVEFSVF9TUEFDSU5HX0VJR0hUICAgICAgPSAweDYs Ci0JSElGX01QRFVfU1RBUlRfU1BBQ0lOR19TSVhURUVOICAgID0gMHg3Ci19OwotCi1zdHJ1Y3Qg aGlmX21pYl9zZXRfYXNzb2NpYXRpb25fbW9kZSB7Ci0JdTggICAgIHByZWFtYnR5cGVfdXNlOjE7 Ci0JdTggICAgIG1vZGU6MTsKLQl1OCAgICAgcmF0ZXNldDoxOwotCXU4ICAgICBzcGFjaW5nOjE7 Ci0JdTggICAgIHJlc2VydmVkMTo0OwotCXU4ICAgICBzaG9ydF9wcmVhbWJsZToxOwotCXU4ICAg ICByZXNlcnZlZDI6NzsKLQl1OCAgICAgZ3JlZW5maWVsZDoxOwotCXU4ICAgICByZXNlcnZlZDM6 NzsKLQl1OCAgICAgbXBkdV9zdGFydF9zcGFjaW5nOwotCV9fbGUzMiBiYXNpY19yYXRlX3NldDsK LX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX3NldF91YXBzZF9pbmZvcm1hdGlvbiB7Ci0J dTggICAgIHRyaWdfYmNrZ3JuZDoxOwotCXU4ICAgICB0cmlnX2JlOjE7Ci0JdTggICAgIHRyaWdf dmlkZW86MTsKLQl1OCAgICAgdHJpZ192b2ljZToxOwotCXU4ICAgICByZXNlcnZlZDE6NDsKLQl1 OCAgICAgZGVsaXZfYmNrZ3JuZDoxOwotCXU4ICAgICBkZWxpdl9iZToxOwotCXU4ICAgICBkZWxp dl92aWRlbzoxOwotCXU4ICAgICBkZWxpdl92b2ljZToxOwotCXU4ICAgICByZXNlcnZlZDI6NDsK LQlfX2xlMTYgbWluX2F1dG9fdHJpZ2dlcl9pbnRlcnZhbDsKLQlfX2xlMTYgbWF4X2F1dG9fdHJp Z2dlcl9pbnRlcnZhbDsKLQlfX2xlMTYgYXV0b190cmlnZ2VyX3N0ZXA7Ci19IF9fcGFja2VkOwot Ci1zdHJ1Y3QgaGlmX3R4X3JhdGVfcmV0cnlfcG9saWN5IHsKLQl1OCAgICAgcG9saWN5X2luZGV4 OwotCXU4ICAgICBzaG9ydF9yZXRyeV9jb3VudDsKLQl1OCAgICAgbG9uZ19yZXRyeV9jb3VudDsK LQl1OCAgICAgZmlyc3RfcmF0ZV9zZWw6MjsKLQl1OCAgICAgdGVybWluYXRlOjE7Ci0JdTggICAg IGNvdW50X2luaXQ6MTsKLQl1OCAgICAgcmVzZXJ2ZWQxOjQ7Ci0JdTggICAgIHJhdGVfcmVjb3Zl cnlfY291bnQ7Ci0JdTggICAgIHJlc2VydmVkMlszXTsKLQl1OCAgICAgcmF0ZXNbMTJdOwotfSBf X3BhY2tlZDsKLQotI2RlZmluZSBISUZfVFhfUkVUUllfUE9MSUNZX01BWCAgICAgMTUKLSNkZWZp bmUgSElGX1RYX1JFVFJZX1BPTElDWV9JTlZBTElEIEhJRl9UWF9SRVRSWV9QT0xJQ1lfTUFYCi0K LXN0cnVjdCBoaWZfbWliX3NldF90eF9yYXRlX3JldHJ5X3BvbGljeSB7Ci0JdTggICAgIG51bV90 eF9yYXRlX3BvbGljaWVzOwotCXU4ICAgICByZXNlcnZlZFszXTsKLQlzdHJ1Y3QgaGlmX3R4X3Jh dGVfcmV0cnlfcG9saWN5IHR4X3JhdGVfcmV0cnlfcG9saWN5W107Ci19IF9fcGFja2VkOwotCi1z dHJ1Y3QgaGlmX21pYl9wcm90ZWN0ZWRfbWdtdF9wb2xpY3kgewotCXU4ICAgICBwbWZfZW5hYmxl OjE7Ci0JdTggICAgIHVucG1mX2FsbG93ZWQ6MTsKLQl1OCAgICAgaG9zdF9lbmNfYXV0aF9mcmFt ZXM6MTsKLQl1OCAgICAgcmVzZXJ2ZWQxOjU7Ci0JdTggICAgIHJlc2VydmVkMlszXTsKLX0gX19w YWNrZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX2tlZXBfYWxpdmVfcGVyaW9kIHsKLQlfX2xlMTYga2Vl cF9hbGl2ZV9wZXJpb2Q7Ci0JdTggICAgIHJlc2VydmVkWzJdOwotfSBfX3BhY2tlZDsKLQotI2Vu ZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9yeC5jIGIvZHJpdmVycy9z dGFnaW5nL3dmeC9oaWZfcnguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZhNWY4 OTE0NDdiLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguYwor KysgL2Rldi9udWxsCkBAIC0xLDQxNSArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5Ci0vKgotICogSW1wbGVtZW50YXRpb24gb2YgY2hpcC10by1ob3N0IGV2 ZW50IChha2EgaW5kaWNhdGlvbnMpIG9mIFdGeHh4IFNwbGl0IE1hYwotICogKFdTTSkgQVBJLgot ICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5j LgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0jaW5jbHVkZSA8bGlu dXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQotI2luY2x1ZGUg ImhpZl9yeC5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgInNjYW4uaCIKLSNpbmNsdWRl ICJiaC5oIgotI2luY2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgImRhdGFfcnguaCIKLSNpbmNsdWRl ICJoaWZfYXBpX2NtZC5oIgotCi1zdGF0aWMgaW50IGhpZl9nZW5lcmljX2NvbmZpcm0oc3RydWN0 IHdmeF9kZXYgKndkZXYsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwgY29u c3Qgdm9pZCAqYnVmKQotewotCS8vIEFsbCBjb25maXJtIG1lc3NhZ2VzIHN0YXJ0IHdpdGggc3Rh dHVzCi0JaW50IHN0YXR1cyA9IGxlMzJfdG9fY3B1cCgoX19sZTMyICopYnVmKTsKLQlpbnQgY21k ID0gaGlmLT5pZDsKLQlpbnQgbGVuID0gbGUxNl90b19jcHUoaGlmLT5sZW4pIC0gNDsgLy8gZHJv cCBoZWFkZXIKLQotCVdBUk4oIW11dGV4X2lzX2xvY2tlZCgmd2Rldi0+aGlmX2NtZC5sb2NrKSwg ImRhdGEgbG9ja2luZyBlcnJvciIpOwotCi0JaWYgKCF3ZGV2LT5oaWZfY21kLmJ1Zl9zZW5kKSB7 Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgInVuZXhwZWN0ZWQgY29uZmlybWF0aW9uOiAweCUuMnhc biIsIGNtZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChjbWQgIT0gd2Rldi0+aGlm X2NtZC5idWZfc2VuZC0+aWQpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LAotCQkJICJjaGlwIHJl c3BvbnNlIG1pc21hdGNoIHJlcXVlc3Q6IDB4JS4yeCB2cyAweCUuMnhcbiIsCi0JCQkgY21kLCB3 ZGV2LT5oaWZfY21kLmJ1Zl9zZW5kLT5pZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlm ICh3ZGV2LT5oaWZfY21kLmJ1Zl9yZWN2KSB7Ci0JCWlmICh3ZGV2LT5oaWZfY21kLmxlbl9yZWN2 ID49IGxlbiAmJiBsZW4gPiAwKQotCQkJbWVtY3B5KHdkZXYtPmhpZl9jbWQuYnVmX3JlY3YsIGJ1 ZiwgbGVuKTsKLQkJZWxzZQotCQkJc3RhdHVzID0gLUVJTzsKLQl9Ci0Jd2Rldi0+aGlmX2NtZC5y ZXQgPSBzdGF0dXM7Ci0KLQljb21wbGV0ZSgmd2Rldi0+aGlmX2NtZC5kb25lKTsKLQlyZXR1cm4g c3RhdHVzOwotfQotCi1zdGF0aWMgaW50IGhpZl90eF9jb25maXJtKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2LAotCQkJICBjb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCBjb25zdCB2b2lkICpidWYpCi17 Ci0JY29uc3Qgc3RydWN0IGhpZl9jbmZfdHggKmJvZHkgPSBidWY7Ci0KLQl3ZnhfdHhfY29uZmly bV9jYih3ZGV2LCBib2R5KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoaWZfbXVsdGlf dHhfY29uZmlybShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQljb25zdCBzdHJ1Y3QgaGlmX21z ZyAqaGlmLCBjb25zdCB2b2lkICpidWYpCi17Ci0JY29uc3Qgc3RydWN0IGhpZl9jbmZfbXVsdGlf dHJhbnNtaXQgKmJvZHkgPSBidWY7Ci0JaW50IGk7Ci0KLQlXQVJOKGJvZHktPm51bV90eF9jb25m cyA8PSAwLCAiY29ycnVwdGVkIG1lc3NhZ2UiKTsKLQlmb3IgKGkgPSAwOyBpIDwgYm9keS0+bnVt X3R4X2NvbmZzOyBpKyspCi0JCXdmeF90eF9jb25maXJtX2NiKHdkZXYsICZib2R5LT50eF9jb25m X3BheWxvYWRbaV0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhpZl9zdGFydHVwX2lu ZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJICBjb25zdCBzdHJ1Y3QgaGlmX21z ZyAqaGlmLCBjb25zdCB2b2lkICpidWYpCi17Ci0JY29uc3Qgc3RydWN0IGhpZl9pbmRfc3RhcnR1 cCAqYm9keSA9IGJ1ZjsKLQotCWlmIChib2R5LT5zdGF0dXMgfHwgYm9keS0+ZmlybXdhcmVfdHlw ZSA+IDQpIHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJyZWNlaXZlZCBpbnZhbGlkIHN0YXJ0dXAg aW5kaWNhdGlvbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JbWVtY3B5KCZ3ZGV2LT5od19j YXBzLCBib2R5LCBzaXplb2Yoc3RydWN0IGhpZl9pbmRfc3RhcnR1cCkpOwotCWxlMTZfdG9fY3B1 cygoX19sZTE2ICopJndkZXYtPmh3X2NhcHMuaGFyZHdhcmVfaWQpOwotCWxlMTZfdG9fY3B1cygo X19sZTE2ICopJndkZXYtPmh3X2NhcHMubnVtX2lucF9jaF9idWZzKTsKLQlsZTE2X3RvX2NwdXMo KF9fbGUxNiAqKSZ3ZGV2LT5od19jYXBzLnNpemVfaW5wX2NoX2J1Zik7Ci0JbGUzMl90b19jcHVz KChfX2xlMzIgKikmd2Rldi0+aHdfY2Fwcy5zdXBwb3J0ZWRfcmF0ZV9tYXNrKTsKLQotCWNvbXBs ZXRlKCZ3ZGV2LT5maXJtd2FyZV9yZWFkeSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg aGlmX3dha2V1cF9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCSBjb25zdCBz dHJ1Y3QgaGlmX21zZyAqaGlmLCBjb25zdCB2b2lkICpidWYpCi17Ci0JaWYgKCF3ZGV2LT5wZGF0 YS5ncGlvX3dha2V1cCB8fAotCSAgICBncGlvZF9nZXRfdmFsdWUod2Rldi0+cGRhdGEuZ3Bpb193 YWtldXApID09IDApIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAidW5leHBlY3RlZCB3YWtlLXVw IGluZGljYXRpb25cbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgaGlmX3JlY2VpdmVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJ CQkgIGNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsCi0JCQkJICBjb25zdCB2b2lkICpidWYsIHN0 cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2 aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOwotCWNvbnN0IHN0cnVjdCBoaWZfaW5kX3J4ICpib2R5 ID0gYnVmOwotCi0JaWYgKCF3dmlmKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiBpZ25v cmUgcnggZGF0YSBmb3Igbm9uLWV4aXN0ZW50IHZpZiAlZFxuIiwKLQkJCSBfX2Z1bmNfXywgaGlm LT5pbnRlcmZhY2UpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0Jc2tiX3B1bGwoc2tiLCBzaXplb2Yo c3RydWN0IGhpZl9tc2cpICsgc2l6ZW9mKHN0cnVjdCBoaWZfaW5kX3J4KSk7Ci0Jd2Z4X3J4X2Ni KHd2aWYsIGJvZHksIHNrYik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoaWZfZXZl bnRfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQljb25zdCBzdHJ1Y3QgaGlm X21zZyAqaGlmLCBjb25zdCB2b2lkICpidWYpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSB3 ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOwotCWNvbnN0IHN0cnVjdCBoaWZfaW5k X2V2ZW50ICpib2R5ID0gYnVmOwotCWludCB0eXBlID0gbGUzMl90b19jcHUoYm9keS0+ZXZlbnRf aWQpOwotCi0JaWYgKCF3dmlmKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiByZWNlaXZl ZCBldmVudCBmb3Igbm9uLWV4aXN0ZW50IHZpZlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJ TzsKLQl9Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEhJRl9FVkVOVF9JTkRfUkNQSV9SU1NJ OgotCQl3ZnhfZXZlbnRfcmVwb3J0X3Jzc2kod3ZpZiwgYm9keS0+ZXZlbnRfZGF0YS5yY3BpX3Jz c2kpOwotCQlicmVhazsKLQljYXNlIEhJRl9FVkVOVF9JTkRfQlNTTE9TVDoKLQkJc2NoZWR1bGVf ZGVsYXllZF93b3JrKCZ3dmlmLT5iZWFjb25fbG9zc193b3JrLCAwKTsKLQkJYnJlYWs7Ci0JY2Fz ZSBISUZfRVZFTlRfSU5EX0JTU1JFR0FJTkVEOgotCQljYW5jZWxfZGVsYXllZF93b3JrKCZ3dmlm LT5iZWFjb25fbG9zc193b3JrKTsKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJpZ25vcmUgQlNTUkVH QUlORUQgaW5kaWNhdGlvblxuIik7Ci0JCWJyZWFrOwotCWNhc2UgSElGX0VWRU5UX0lORF9QU19N T0RFX0VSUk9SOgotCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJlcnJvciB3aGlsZSBwcm9jZXNzaW5n IHBvd2VyIHNhdmUgcmVxdWVzdDogJWRcbiIsCi0JCQkgbGUzMl90b19jcHUoYm9keS0+ZXZlbnRf ZGF0YS5wc19tb2RlX2Vycm9yKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl93YXJuKHdk ZXYtPmRldiwgInVuaGFuZGxlZCBldmVudCBpbmRpY2F0aW9uOiAlLjJ4XG4iLAotCQkJIHR5cGUp OwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGlmX3BtX21vZGVf Y29tcGxldGVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkJICAgY29uc3Qg c3RydWN0IGhpZl9tc2cgKmhpZiwKLQkJCQkJICAgY29uc3Qgdm9pZCAqYnVmKQotewotCXN0cnVj dCB3ZnhfdmlmICp3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsKLQot CWlmICghd3ZpZikgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIlczogcmVjZWl2ZWQgZXZlbnQg Zm9yIG5vbi1leGlzdGVudCB2aWZcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQot CWNvbXBsZXRlKCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSk7Ci0KLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCBoaWZfc2Nhbl9jb21wbGV0ZV9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LAotCQkJCQljb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLAotCQkJCQljb25zdCB2b2lk ICpidWYpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlm LT5pbnRlcmZhY2UpOwotCi0JaWYgKCF3dmlmKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgIiVz OiByZWNlaXZlZCBldmVudCBmb3Igbm9uLWV4aXN0ZW50IHZpZlxuIiwgX19mdW5jX18pOwotCQly ZXR1cm4gLUVJTzsKLQl9Ci0KLQl3Znhfc2Nhbl9jb21wbGV0ZSh3dmlmKTsKLQotCXJldHVybiAw OwotfQotCi1zdGF0aWMgaW50IGhpZl9qb2luX2NvbXBsZXRlX2luZGljYXRpb24oc3RydWN0IHdm eF9kZXYgKndkZXYsCi0JCQkJCWNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsCi0JCQkJCWNvbnN0 IHZvaWQgKmJ1ZikKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2 LCBoaWYtPmludGVyZmFjZSk7Ci0KLQlpZiAoIXd2aWYpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2 LCAiJXM6IHJlY2VpdmVkIGV2ZW50IGZvciBub24tZXhpc3RlbnQgdmlmXG4iLCBfX2Z1bmNfXyk7 Ci0JCXJldHVybiAtRUlPOwotCX0KLQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1bmF0dGVuZGVkIEpv aW5Db21wbGV0ZUluZFxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoaWZfc3Vz cGVuZF9yZXN1bWVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkJIGNvbnN0 IHN0cnVjdCBoaWZfbXNnICpoaWYsCi0JCQkJCSBjb25zdCB2b2lkICpidWYpCi17Ci0JY29uc3Qg c3RydWN0IGhpZl9pbmRfc3VzcGVuZF9yZXN1bWVfdHggKmJvZHkgPSBidWY7Ci0Jc3RydWN0IHdm eF92aWYgKnd2aWY7Ci0KLQlpZiAoYm9keS0+YmNfbWNfb25seSkgewotCQl3dmlmID0gd2Rldl90 b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsKLQkJaWYgKCF3dmlmKSB7Ci0JCQlkZXZfd2Fy bih3ZGV2LT5kZXYsICIlczogcmVjZWl2ZWQgZXZlbnQgZm9yIG5vbi1leGlzdGVudCB2aWZcbiIs IF9fZnVuY19fKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCWlmIChib2R5LT5yZXN1bWUpCi0J CQl3Znhfc3VzcGVuZF9yZXN1bWVfbWMod3ZpZiwgU1RBX05PVElGWV9BV0FLRSk7Ci0JCWVsc2UK LQkJCXdmeF9zdXNwZW5kX3Jlc3VtZV9tYyh3dmlmLCBTVEFfTk9USUZZX1NMRUVQKTsKLQl9IGVs c2UgewotCQlXQVJOKGJvZHktPnBlZXJfc3RhX3NldCwgIm1pc3VuZGVyc3Rvb2QgaW5kaWNhdGlv biIpOwotCQlXQVJOKGhpZi0+aW50ZXJmYWNlICE9IDIsICJtaXN1bmRlcnN0b29kIGluZGljYXRp b24iKTsKLQkJaWYgKGJvZHktPnJlc3VtZSkKLQkJCXdmeF9zdXNwZW5kX2hvdF9kZXYod2Rldiwg U1RBX05PVElGWV9BV0FLRSk7Ci0JCWVsc2UKLQkJCXdmeF9zdXNwZW5kX2hvdF9kZXYod2Rldiwg U1RBX05PVElGWV9TTEVFUCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGlm X2dlbmVyaWNfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkgIGNvbnN0IHN0 cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQljb25zdCBzdHJ1Y3QgaGlm X2luZF9nZW5lcmljICpib2R5ID0gYnVmOwotCWludCB0eXBlID0gbGUzMl90b19jcHUoYm9keS0+ dHlwZSk7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEhJRl9HRU5FUklDX0lORElDQVRJT05f VFlQRV9SQVc6Ci0JCXJldHVybiAwOwotCWNhc2UgSElGX0dFTkVSSUNfSU5ESUNBVElPTl9UWVBF X1NUUklORzoKLQkJZGV2X2luZm8od2Rldi0+ZGV2LCAiZmlybXdhcmUgc2F5czogJXNcbiIsIChj aGFyICopJmJvZHktPmRhdGEpOwotCQlyZXR1cm4gMDsKLQljYXNlIEhJRl9HRU5FUklDX0lORElD QVRJT05fVFlQRV9SWF9TVEFUUzoKLQkJbXV0ZXhfbG9jaygmd2Rldi0+cnhfc3RhdHNfbG9jayk7 Ci0JCS8vIE9sZGVyIGZpcm13YXJlIHNlbmQgYSBnZW5lcmljIGluZGljYXRpb24gYmVzaWRlIFJ4 U3RhdHMKLQkJaWYgKCF3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMSwgNCkpCi0JCQlkZXZfaW5m byh3ZGV2LT5kZXYsICJSeCB0ZXN0IG9uZ29pbmcuIFRlbXBlcmF0dXJlOiAlZCBkZWdyZWVzIENc biIsCi0JCQkJIGJvZHktPmRhdGEucnhfc3RhdHMuY3VycmVudF90ZW1wKTsKLQkJbWVtY3B5KCZ3 ZGV2LT5yeF9zdGF0cywgJmJvZHktPmRhdGEucnhfc3RhdHMsCi0JCSAgICAgICBzaXplb2Yod2Rl di0+cnhfc3RhdHMpKTsKLQkJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5yeF9zdGF0c19sb2NrKTsKLQkJ cmV0dXJuIDA7Ci0JY2FzZSBISUZfR0VORVJJQ19JTkRJQ0FUSU9OX1RZUEVfVFhfUE9XRVJfTE9P UF9JTkZPOgotCQltdXRleF9sb2NrKCZ3ZGV2LT50eF9wb3dlcl9sb29wX2luZm9fbG9jayk7Ci0J CW1lbWNweSgmd2Rldi0+dHhfcG93ZXJfbG9vcF9pbmZvLAotCQkgICAgICAgJmJvZHktPmRhdGEu dHhfcG93ZXJfbG9vcF9pbmZvLAotCQkgICAgICAgc2l6ZW9mKHdkZXYtPnR4X3Bvd2VyX2xvb3Bf aW5mbykpOwotCQltdXRleF91bmxvY2soJndkZXYtPnR4X3Bvd2VyX2xvb3BfaW5mb19sb2NrKTsK LQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJnZW5lcmljX2lu ZGljYXRpb246IHVua25vd24gaW5kaWNhdGlvbiB0eXBlOiAlIy44eFxuIiwKLQkJCXR5cGUpOwot CQlyZXR1cm4gLUVJTzsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCWludCB2YWw7 Ci0JY29uc3QgY2hhciAqc3RyOwotCWJvb2wgaGFzX3BhcmFtOwotfSBoaWZfZXJyb3JzW10gPSB7 Ci0JeyBISUZfRVJST1JfRklSTVdBUkVfUk9MTEJBQ0ssCi0JCSJyb2xsYmFjayBzdGF0dXMiIH0s Ci0JeyBISUZfRVJST1JfRklSTVdBUkVfREVCVUdfRU5BQkxFRCwKLQkJImRlYnVnIGZlYXR1cmUg ZW5hYmxlZCIgfSwKLQl7IEhJRl9FUlJPUl9QRFNfUEFZTE9BRCwKLQkJIlBEUyB2ZXJzaW9uIGlz IG5vdCBzdXBwb3J0ZWQiIH0sCi0JeyBISUZfRVJST1JfUERTX1RFU1RGRUFUVVJFLAotCQkiUERT IGFzayBmb3IgYW4gdW5rbm93biB0ZXN0IG1vZGUiIH0sCi0JeyBISUZfRVJST1JfT09SX1ZPTFRB R0UsCi0JCSJvdXQtb2YtcmFuZ2UgcG93ZXIgc3VwcGx5IHZvbHRhZ2UiLCB0cnVlIH0sCi0JeyBI SUZfRVJST1JfT09SX1RFTVBFUkFUVVJFLAotCQkib3V0LW9mLXJhbmdlIHRlbXBlcmF0dXJlIiwg dHJ1ZSB9LAotCXsgSElGX0VSUk9SX1NMS19SRVFfRFVSSU5HX0tFWV9FWENIQU5HRSwKLQkJInNl Y3VyZSBsaW5rIGRvZXMgbm90IGV4cGVjdCByZXF1ZXN0IGR1cmluZyBrZXkgZXhjaGFuZ2UiIH0s Ci0JeyBISUZfRVJST1JfU0xLX1NFU1NJT05fS0VZLAotCQkic2VjdXJlIGxpbmsgc2Vzc2lvbiBr ZXkgaXMgaW52YWxpZCIgfSwKLQl7IEhJRl9FUlJPUl9TTEtfT1ZFUkZMT1csCi0JCSJzZWN1cmUg bGluayBvdmVyZmxvdyIgfSwKLQl7IEhJRl9FUlJPUl9TTEtfV1JPTkdfRU5DUllQVElPTl9TVEFU RSwKLQkJInNlY3VyZSBsaW5rIG1lc3NhZ2VzIGxpc3QgZG9lcyBub3QgbWF0Y2ggbWVzc2FnZSBl bmNyeXB0aW9uIiB9LAotCXsgSElGX0VSUk9SX1NMS19VTkNPTkZJR1VSRUQsCi0JCSJzZWN1cmUg bGluayBub3QgeWV0IGNvbmZpZ3VyZWQiIH0sCi0JeyBISUZfRVJST1JfSElGX0JVU19GUkVRVUVO Q1lfVE9PX0xPVywKLQkJImJ1cyBjbG9jayBpcyB0b28gc2xvdyAoPDFrSHopIiB9LAotCXsgSElG X0VSUk9SX0hJRl9SWF9EQVRBX1RPT19MQVJHRSwKLQkJIkhJRiBtZXNzYWdlIHRvbyBsYXJnZSIg fSwKLQkvLyBGb2xsb3dpbmcgZXJyb3JzIG9ubHkgZXhpc3RzIGluIG9sZCBmaXJtd2FyZSB2ZXJz aW9uczoKLQl7IEhJRl9FUlJPUl9ISUZfVFhfUVVFVUVfRlVMTCwKLQkJIkhJRiBtZXNzYWdlcyBx dWV1ZSBpcyBmdWxsIiB9LAotCXsgSElGX0VSUk9SX0hJRl9CVVMsCi0JCSJISUYgYnVzIiB9LAot CXsgSElGX0VSUk9SX1NMS19NVUxUSV9UWF9VTlNVUFBPUlRFRCwKLQkJInNlY3VyZSBsaW5rIGRv ZXMgbm90IHN1cHBvcnQgbXVsdGktdHggY29uZmlybWF0aW9ucyIgfSwKLQl7IEhJRl9FUlJPUl9T TEtfT1VUREFURURfU0VTU0lPTl9LRVksCi0JCSJzZWN1cmUgbGluayBzZXNzaW9uIGtleSBpcyBv dXRkYXRlZCIgfSwKLQl7IEhJRl9FUlJPUl9TTEtfREVDUllQVElPTiwKLQkJInNlY3VyZSBsaW5r IHBhcmFtcyAobm9uY2Ugb3IgdGFnKSBtaXNtYXRjaCIgfSwKLX07Ci0KLXN0YXRpYyBpbnQgaGlm X2Vycm9yX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJY29uc3Qgc3RydWN0 IGhpZl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVmKQotewotCWNvbnN0IHN0cnVjdCBoaWZfaW5k X2Vycm9yICpib2R5ID0gYnVmOwotCWludCB0eXBlID0gbGUzMl90b19jcHUoYm9keS0+dHlwZSk7 Ci0JaW50IHBhcmFtID0gKHM4KWJvZHktPmRhdGFbMF07Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShoaWZfZXJyb3JzKTsgaSsrKQotCQlpZiAodHlwZSA9PSBoaWZfZXJy b3JzW2ldLnZhbCkKLQkJCWJyZWFrOwotCWlmIChpIDwgQVJSQVlfU0laRShoaWZfZXJyb3JzKSkK LQkJaWYgKGhpZl9lcnJvcnNbaV0uaGFzX3BhcmFtKQotCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJh c3luY2hyb25vdXMgZXJyb3I6ICVzOiAlZFxuIiwKLQkJCQloaWZfZXJyb3JzW2ldLnN0ciwgcGFy YW0pOwotCQllbHNlCi0JCQlkZXZfZXJyKHdkZXYtPmRldiwgImFzeW5jaHJvbm91cyBlcnJvcjog JXNcbiIsCi0JCQkJaGlmX2Vycm9yc1tpXS5zdHIpOwotCWVsc2UKLQkJZGV2X2Vycih3ZGV2LT5k ZXYsICJhc3luY2hyb25vdXMgZXJyb3I6IHVua25vd246ICUwOHhcbiIsIHR5cGUpOwotCXByaW50 X2hleF9kdW1wKEtFUk5fSU5GTywgImhpZjogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULAotCQkgICAg ICAgMTYsIDEsIGhpZiwgbGUxNl90b19jcHUoaGlmLT5sZW4pLCBmYWxzZSk7Ci0Jd2Rldi0+Y2hp cF9mcm96ZW4gPSB0cnVlOwotCi0JcmV0dXJuIDA7Ci19OwotCi1zdGF0aWMgaW50IGhpZl9leGNl cHRpb25faW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkgICAgY29uc3Qgc3Ry dWN0IGhpZl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVmKQotewotCWNvbnN0IHN0cnVjdCBoaWZf aW5kX2V4Y2VwdGlvbiAqYm9keSA9IGJ1ZjsKLQlpbnQgdHlwZSA9IGxlMzJfdG9fY3B1KGJvZHkt PnR5cGUpOwotCi0JaWYgKHR5cGUgPT0gNCkKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJmaXJtd2Fy ZSBhc3NlcnQgJWRcbiIsCi0JCQlsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKWJvZHktPmRhdGEpKTsK LQllbHNlCi0JCWRldl9lcnIod2Rldi0+ZGV2LCAiZmlybXdhcmUgZXhjZXB0aW9uXG4iKTsKLQlw cmludF9oZXhfZHVtcChLRVJOX0lORk8sICJoaWY6ICIsIERVTVBfUFJFRklYX09GRlNFVCwKLQkJ ICAgICAgIDE2LCAxLCBoaWYsIGxlMTZfdG9fY3B1KGhpZi0+bGVuKSwgZmFsc2UpOwotCXdkZXYt PmNoaXBfZnJvemVuID0gdHJ1ZTsKLQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGNvbnN0IHN0 cnVjdCB7Ci0JaW50IG1zZ19pZDsKLQlpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0IHZvaWQgKmJ1Zik7 Ci19IGhpZl9oYW5kbGVyc1tdID0gewotCS8qIENvbmZpcm1hdGlvbnMgKi8KLQl7IEhJRl9DTkZf SURfVFgsICAgICAgICAgICAgICAgICAgIGhpZl90eF9jb25maXJtIH0sCi0JeyBISUZfQ05GX0lE X01VTFRJX1RSQU5TTUlULCAgICAgICBoaWZfbXVsdGlfdHhfY29uZmlybSB9LAotCS8qIEluZGlj YXRpb25zICovCi0JeyBISUZfSU5EX0lEX1NUQVJUVVAsICAgICAgICAgICAgICBoaWZfc3RhcnR1 cF9pbmRpY2F0aW9uIH0sCi0JeyBISUZfSU5EX0lEX1dBS0VVUCwgICAgICAgICAgICAgICBoaWZf d2FrZXVwX2luZGljYXRpb24gfSwKLQl7IEhJRl9JTkRfSURfSk9JTl9DT01QTEVURSwgICAgICAg IGhpZl9qb2luX2NvbXBsZXRlX2luZGljYXRpb24gfSwKLQl7IEhJRl9JTkRfSURfU0VUX1BNX01P REVfQ01QTCwgICAgIGhpZl9wbV9tb2RlX2NvbXBsZXRlX2luZGljYXRpb24gfSwKLQl7IEhJRl9J TkRfSURfU0NBTl9DTVBMLCAgICAgICAgICAgIGhpZl9zY2FuX2NvbXBsZXRlX2luZGljYXRpb24g fSwKLQl7IEhJRl9JTkRfSURfU1VTUEVORF9SRVNVTUVfVFgsICAgIGhpZl9zdXNwZW5kX3Jlc3Vt ZV9pbmRpY2F0aW9uIH0sCi0JeyBISUZfSU5EX0lEX0VWRU5ULCAgICAgICAgICAgICAgICBoaWZf ZXZlbnRfaW5kaWNhdGlvbiB9LAotCXsgSElGX0lORF9JRF9HRU5FUklDLCAgICAgICAgICAgICAg aGlmX2dlbmVyaWNfaW5kaWNhdGlvbiB9LAotCXsgSElGX0lORF9JRF9FUlJPUiwgICAgICAgICAg ICAgICAgaGlmX2Vycm9yX2luZGljYXRpb24gfSwKLQl7IEhJRl9JTkRfSURfRVhDRVBUSU9OLCAg ICAgICAgICAgIGhpZl9leGNlcHRpb25faW5kaWNhdGlvbiB9LAotCS8vIEZJWE1FOiBhbGxvY2F0 ZSBza2JfcCBmcm9tIGhpZl9yZWNlaXZlX2luZGljYXRpb24gYW5kIG1ha2UgaXQgZ2VuZXJpYwot CS8veyBISUZfSU5EX0lEX1JYLCAgICAgICAgICAgICAgICAgaGlmX3JlY2VpdmVfaW5kaWNhdGlv biB9LAotfTsKLQotdm9pZCB3ZnhfaGFuZGxlX3J4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiKQotewotCWludCBpOwotCWNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYg PSAoY29uc3Qgc3RydWN0IGhpZl9tc2cgKilza2ItPmRhdGE7Ci0JaW50IGhpZl9pZCA9IGhpZi0+ aWQ7Ci0KLQlpZiAoaGlmX2lkID09IEhJRl9JTkRfSURfUlgpIHsKLQkJLy8gaGlmX3JlY2VpdmVf aW5kaWNhdGlvbiB0YWtlIGNhcmUgb2Ygc2tiIGxpZmV0aW1lCi0JCWhpZl9yZWNlaXZlX2luZGlj YXRpb24od2RldiwgaGlmLCBoaWYtPmJvZHksIHNrYik7Ci0JCXJldHVybjsKLQl9Ci0JLy8gTm90 ZTogbXV0ZXhfaXNfbG9jayBjYXVzZSBhbiBpbXBsaWNpdCBtZW1vcnkgYmFycmllciB0aGF0IHBy b3RlY3QKLQkvLyBidWZfc2VuZAotCWlmIChtdXRleF9pc19sb2NrZWQoJndkZXYtPmhpZl9jbWQu bG9jaykKLQkgICAgJiYgd2Rldi0+aGlmX2NtZC5idWZfc2VuZAotCSAgICAmJiB3ZGV2LT5oaWZf Y21kLmJ1Zl9zZW5kLT5pZCA9PSBoaWZfaWQpIHsKLQkJaGlmX2dlbmVyaWNfY29uZmlybSh3ZGV2 LCBoaWYsIGhpZi0+Ym9keSk7Ci0JCWdvdG8gZnJlZTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoaGlmX2hhbmRsZXJzKTsgaSsrKSB7Ci0JCWlmIChoaWZfaGFuZGxlcnNbaV0ubXNn X2lkID09IGhpZl9pZCkgewotCQkJaWYgKGhpZl9oYW5kbGVyc1tpXS5oYW5kbGVyKQotCQkJCWhp Zl9oYW5kbGVyc1tpXS5oYW5kbGVyKHdkZXYsIGhpZiwgaGlmLT5ib2R5KTsKLQkJCWdvdG8gZnJl ZTsKLQkJfQotCX0KLQlpZiAoaGlmX2lkICYgMHg4MCkKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJ1 bnN1cHBvcnRlZCBISUYgaW5kaWNhdGlvbjogSUQgJTAyeFxuIiwKLQkJCWhpZl9pZCk7Ci0JZWxz ZQotCQlkZXZfZXJyKHdkZXYtPmRldiwgInVuZXhwZWN0ZWQgSElGIGNvbmZpcm1hdGlvbjogSUQg JTAyeFxuIiwKLQkJCWhpZl9pZCk7Ci1mcmVlOgotCWRldl9rZnJlZV9za2Ioc2tiKTsKLX0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmggYi9kcml2ZXJzL3N0YWdpbmcv d2Z4L2hpZl9yeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDdjMTBjOGM2YmQu LjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9yeC5oCisrKyAvZGV2 L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb25seSAqLwotLyoKLSAqIEltcGxlbWVudGF0aW9uIG9mIGNoaXAtdG8taG9zdCBldmVudCAo YWthIGluZGljYXRpb25zKSBvZiBXRnh4eCBTcGxpdCBNYWMKLSAqIChXU00pIEFQSS4KLSAqCi0g KiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOSwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAq IENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqIENvcHlyaWdodCAoQykgMjAxMCwg U1QtRXJpY3Nzb24gU0EKLSAqLwotI2lmbmRlZiBXRlhfSElGX1JYX0gKLSNkZWZpbmUgV0ZYX0hJ Rl9SWF9ICi0KLXN0cnVjdCB3ZnhfZGV2Owotc3RydWN0IHNrX2J1ZmY7Ci0KLXZvaWQgd2Z4X2hh bmRsZV9yeChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLSNl bmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHguYyBiL2RyaXZlcnMv c3RhZ2luZy93ZngvaGlmX3R4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYjQz NzI2MWViNy4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmMK KysrIC9kZXYvbnVsbApAQCAtMSw1MjMgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIEltcGxlbWVudGF0aW9uIG9mIGhvc3QtdG8tY2hpcCBj b21tYW5kcyAoYWthIHJlcXVlc3QvY29uZmlybWF0aW9uKSBvZiBXRnh4eAotICogU3BsaXQgTWFj IChXU00pIEFQSS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJv cmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwot I2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0KLSNpbmNsdWRlICJoaWZfdHguaCIKLSNp bmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJiaC5oIgotI2luY2x1ZGUgImh3aW8uaCIKLSNpbmNs dWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInN0YS5oIgotCi12b2lkIHdmeF9pbml0X2hpZl9jbWQo c3RydWN0IHdmeF9oaWZfY21kICpoaWZfY21kKQotewotCWluaXRfY29tcGxldGlvbigmaGlmX2Nt ZC0+cmVhZHkpOwotCWluaXRfY29tcGxldGlvbigmaGlmX2NtZC0+ZG9uZSk7Ci0JbXV0ZXhfaW5p dCgmaGlmX2NtZC0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF9maWxsX2hlYWRlcihzdHJ1 Y3QgaGlmX21zZyAqaGlmLCBpbnQgaWZfaWQsCi0JCQkgICAgdW5zaWduZWQgaW50IGNtZCwgc2l6 ZV90IHNpemUpCi17Ci0JaWYgKGlmX2lkID09IC0xKQotCQlpZl9pZCA9IDI7Ci0KLQlXQVJOKGNt ZCA+IDB4M2YsICJpbnZhbGlkIFdTTSBjb21tYW5kICUjLjJ4IiwgY21kKTsKLQlXQVJOKHNpemUg PiAweEZGRiwgInJlcXVlc3RlZCBidWZmZXIgaXMgdG9vIGxhcmdlOiAlenUgYnl0ZXMiLCBzaXpl KTsKLQlXQVJOKGlmX2lkID4gMHgzLCAiaW52YWxpZCBpbnRlcmZhY2UgSUQgJWQiLCBpZl9pZCk7 Ci0KLQloaWYtPmxlbiA9IGNwdV90b19sZTE2KHNpemUgKyA0KTsKLQloaWYtPmlkID0gY21kOwot CWhpZi0+aW50ZXJmYWNlID0gaWZfaWQ7Ci19Ci0KLXN0YXRpYyB2b2lkICp3ZnhfYWxsb2NfaGlm KHNpemVfdCBib2R5X2xlbiwgc3RydWN0IGhpZl9tc2cgKipoaWYpCi17Ci0JKmhpZiA9IGt6YWxs b2Moc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKSArIGJvZHlfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAo KmhpZikKLQkJcmV0dXJuICgqaGlmKS0+Ym9keTsKLQllbHNlCi0JCXJldHVybiBOVUxMOwotfQot Ci1pbnQgd2Z4X2NtZF9zZW5kKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAq cmVxdWVzdCwKLQkJIHZvaWQgKnJlcGx5LCBzaXplX3QgcmVwbHlfbGVuLCBib29sIG5vX3JlcGx5 KQotewotCWNvbnN0IGNoYXIgKm1pYl9uYW1lID0gIiI7Ci0JY29uc3QgY2hhciAqbWliX3NlcCA9 ICIiOwotCWludCBjbWQgPSByZXF1ZXN0LT5pZDsKLQlpbnQgdmlmID0gcmVxdWVzdC0+aW50ZXJm YWNlOwotCWludCByZXQ7Ci0KLQkvLyBEbyBub3Qgd2FpdCBmb3IgYW55IHJlcGx5IGlmIGNoaXAg aXMgZnJvemVuCi0JaWYgKHdkZXYtPmNoaXBfZnJvemVuKQotCQlyZXR1cm4gLUVUSU1FRE9VVDsK LQotCW11dGV4X2xvY2soJndkZXYtPmhpZl9jbWQubG9jayk7Ci0JV0FSTih3ZGV2LT5oaWZfY21k LmJ1Zl9zZW5kLCAiZGF0YSBsb2NraW5nIGVycm9yIik7Ci0KLQkvLyBOb3RlOiBjYWxsIHRvIGNv bXBsZXRlKCkgYmVsb3cgaGFzIGFuIGltcGxpY2l0IG1lbW9yeSBiYXJyaWVyIHRoYXQKLQkvLyBo b3BlZnVsbHkgcHJvdGVjdCBidWZfc2VuZAotCXdkZXYtPmhpZl9jbWQuYnVmX3NlbmQgPSByZXF1 ZXN0OwotCXdkZXYtPmhpZl9jbWQuYnVmX3JlY3YgPSByZXBseTsKLQl3ZGV2LT5oaWZfY21kLmxl bl9yZWN2ID0gcmVwbHlfbGVuOwotCWNvbXBsZXRlKCZ3ZGV2LT5oaWZfY21kLnJlYWR5KTsKLQot CXdmeF9iaF9yZXF1ZXN0X3R4KHdkZXYpOwotCi0JaWYgKG5vX3JlcGx5KSB7Ci0JCS8vIENoaXAg d29uJ3QgcmVwbHkuIEdpdmUgZW5vdWdoIHRpbWUgdG8gdGhlIHdxIHRvIHNlbmQgdGhlCi0JCS8v IGJ1ZmZlci4KLQkJbXNsZWVwKDEwMCk7Ci0JCXdkZXYtPmhpZl9jbWQuYnVmX3NlbmQgPSBOVUxM OwotCQltdXRleF91bmxvY2soJndkZXYtPmhpZl9jbWQubG9jayk7Ci0JCXJldHVybiAwOwotCX0K LQotCWlmICh3ZGV2LT5wb2xsX2lycSkKLQkJd2Z4X2JoX3BvbGxfaXJxKHdkZXYpOwotCi0JcmV0 ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3ZGV2LT5oaWZfY21kLmRvbmUsIDEgKiBI Wik7Ci0JaWYgKCFyZXQpIHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJjaGlwIGlzIGFibm9ybWFs bHkgbG9uZyB0byBhbnN3ZXJcbiIpOwotCQlyZWluaXRfY29tcGxldGlvbigmd2Rldi0+aGlmX2Nt ZC5yZWFkeSk7Ci0JCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd2Rldi0+aGlm X2NtZC5kb25lLCAzICogSFopOwotCX0KLQlpZiAoIXJldCkgewotCQlkZXZfZXJyKHdkZXYtPmRl diwgImNoaXAgZGlkIG5vdCBhbnN3ZXJcbiIpOwotCQl3ZnhfcGVuZGluZ19kdW1wX29sZF9mcmFt ZXMod2RldiwgMzAwMCk7Ci0JCXdkZXYtPmNoaXBfZnJvemVuID0gdHJ1ZTsKLQkJcmVpbml0X2Nv bXBsZXRpb24oJndkZXYtPmhpZl9jbWQuZG9uZSk7Ci0JCXJldCA9IC1FVElNRURPVVQ7Ci0JfSBl bHNlIHsKLQkJcmV0ID0gd2Rldi0+aGlmX2NtZC5yZXQ7Ci0JfQotCi0Jd2Rldi0+aGlmX2NtZC5i dWZfc2VuZCA9IE5VTEw7Ci0JbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5oaWZfY21kLmxvY2spOwotCi0J aWYgKHJldCAmJgotCSAgICAoY21kID09IEhJRl9SRVFfSURfUkVBRF9NSUIgfHwgY21kID09IEhJ Rl9SRVFfSURfV1JJVEVfTUlCKSkgewotCQltaWJfbmFtZSA9IGdldF9taWJfbmFtZSgoKHUxNiAq KXJlcXVlc3QpWzJdKTsKLQkJbWliX3NlcCA9ICIvIjsKLQl9Ci0JaWYgKHJldCA8IDApCi0JCWRl dl9lcnIod2Rldi0+ZGV2LAotCQkJIldTTSByZXF1ZXN0ICVzJXMlcyAoJSMuMngpIG9uIHZpZiAl ZCByZXR1cm5lZCBlcnJvciAlZFxuIiwKLQkJCWdldF9oaWZfbmFtZShjbWQpLCBtaWJfc2VwLCBt aWJfbmFtZSwgY21kLCB2aWYsIHJldCk7Ci0JaWYgKHJldCA+IDApCi0JCWRldl93YXJuKHdkZXYt PmRldiwKLQkJCSAiV1NNIHJlcXVlc3QgJXMlcyVzICglIy4yeCkgb24gdmlmICVkIHJldHVybmVk IHN0YXR1cyAlZFxuIiwKLQkJCSBnZXRfaGlmX25hbWUoY21kKSwgbWliX3NlcCwgbWliX25hbWUs IGNtZCwgdmlmLCByZXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBp cyBzcGVjaWFsLiBBZnRlciBISUZfUkVRX0lEX1NIVVRfRE9XTiwgY2hpcCB3b24ndCByZXBseSB0 byBhbnkKLS8vIHJlcXVlc3QgYW55bW9yZS4gT2J2aW91c2x5LCBvbmx5IGNhbGwgdGhpcyBmdW5j dGlvbiBkdXJpbmcgZGV2aWNlIHVucmVnaXN0ZXIuCi1pbnQgaGlmX3NodXRkb3duKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2KQotewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQotCXdm eF9hbGxvY19oaWYoMCwgJmhpZik7Ci0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCXdm eF9maWxsX2hlYWRlcihoaWYsIC0xLCBISUZfUkVRX0lEX1NIVVRfRE9XTiwgMCk7Ci0JcmV0ID0g d2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgdHJ1ZSk7Ci0JaWYgKHdkZXYtPnBkYXRh LmdwaW9fd2FrZXVwKQotCQlncGlvZF9zZXRfdmFsdWUod2Rldi0+cGRhdGEuZ3Bpb193YWtldXAs IDApOwotCWVsc2UKLQkJY29udHJvbF9yZWdfd3JpdGUod2RldiwgMCk7Ci0Ja2ZyZWUoaGlmKTsK LQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX2NvbmZpZ3VyYXRpb24oc3RydWN0IHdmeF9kZXYg KndkZXYsIGNvbnN0IHU4ICpjb25mLCBzaXplX3QgbGVuKQotewotCWludCByZXQ7Ci0Jc2l6ZV90 IGJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IGhpZl9yZXFfY29uZmlndXJhdGlvbikgKyBsZW47Ci0J c3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3QgaGlmX3JlcV9jb25maWd1cmF0aW9uICpib2R5 ID0gd2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsKLQotCWlmICghaGlmKQotCQlyZXR1cm4g LUVOT01FTTsKLQlib2R5LT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOwotCW1lbWNweShib2R5 LT5wZHNfZGF0YSwgY29uZiwgbGVuKTsKLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCAtMSwgSElGX1JF UV9JRF9DT05GSUdVUkFUSU9OLCBidWZfbGVuKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod2Rldiwg aGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1p bnQgaGlmX3Jlc2V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIHJlc2V0X3N0YXQpCi17Ci0J aW50IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0cnVjdCBoaWZfcmVxX3Jlc2V0ICpi b2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKLQotCWlmICghaGlmKQot CQlyZXR1cm4gLUVOT01FTTsKLQlib2R5LT5yZXNldF9zdGF0ID0gcmVzZXRfc3RhdDsKLQl3Znhf ZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9SRVNFVCwgc2l6ZW9mKCpib2R5 KSk7Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2Up OwotCWtmcmVlKGhpZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGhpZl9yZWFkX21pYihzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZpZl9pZCwgdTE2IG1pYl9pZCwKLQkJIHZvaWQgKnZhbCwg c2l6ZV90IHZhbF9sZW4pCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCWlu dCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBoaWZfY25mX3JlYWRfbWliKSArIHZhbF9sZW47Ci0J c3RydWN0IGhpZl9yZXFfcmVhZF9taWIgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9k eSksICZoaWYpOwotCXN0cnVjdCBoaWZfY25mX3JlYWRfbWliICpyZXBseSA9IGttYWxsb2MoYnVm X2xlbiwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWJvZHkgfHwgIXJlcGx5KSB7Ci0JCXJldCA9IC1F Tk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQlib2R5LT5taWJfaWQgPSBjcHVfdG9fbGUxNihtaWJf aWQpOwotCXdmeF9maWxsX2hlYWRlcihoaWYsIHZpZl9pZCwgSElGX1JFUV9JRF9SRUFEX01JQiwg c2l6ZW9mKCpib2R5KSk7Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgcmVwbHksIGJ1 Zl9sZW4sIGZhbHNlKTsKLQotCWlmICghcmV0ICYmIG1pYl9pZCAhPSBsZTE2X3RvX2NwdShyZXBs eS0+bWliX2lkKSkgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIlczogY29uZmlybWF0aW9uIG1p c21hdGNoIHJlcXVlc3RcbiIsCi0JCQkgX19mdW5jX18pOwotCQlyZXQgPSAtRUlPOwotCX0KLQlp ZiAocmV0ID09IC1FTk9NRU0pCi0JCWRldl9lcnIod2Rldi0+ZGV2LCAiYnVmZmVyIGlzIHRvbyBz bWFsbCB0byByZWNlaXZlICVzICglenUgPCAlZClcbiIsCi0JCQlnZXRfbWliX25hbWUobWliX2lk KSwgdmFsX2xlbiwKLQkJCWxlMTZfdG9fY3B1KHJlcGx5LT5sZW5ndGgpKTsKLQlpZiAoIXJldCkK LQkJbWVtY3B5KHZhbCwgJnJlcGx5LT5taWJfZGF0YSwgbGUxNl90b19jcHUocmVwbHktPmxlbmd0 aCkpOwotCWVsc2UKLQkJbWVtc2V0KHZhbCwgMHhGRiwgdmFsX2xlbik7Ci1vdXQ6Ci0Ja2ZyZWUo aGlmKTsKLQlrZnJlZShyZXBseSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGhpZl93cml0ZV9t aWIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQsIHUxNiBtaWJfaWQsCi0JCSAgdm9p ZCAqdmFsLCBzaXplX3QgdmFsX2xlbikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpo aWY7Ci0JaW50IGJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IGhpZl9yZXFfd3JpdGVfbWliKSArIHZh bF9sZW47Ci0Jc3RydWN0IGhpZl9yZXFfd3JpdGVfbWliICpib2R5ID0gd2Z4X2FsbG9jX2hpZihi dWZfbGVuLCAmaGlmKTsKLQotCWlmICghaGlmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlib2R5LT5t aWJfaWQgPSBjcHVfdG9fbGUxNihtaWJfaWQpOwotCWJvZHktPmxlbmd0aCA9IGNwdV90b19sZTE2 KHZhbF9sZW4pOwotCW1lbWNweSgmYm9keS0+bWliX2RhdGEsIHZhbCwgdmFsX2xlbik7Ci0Jd2Z4 X2ZpbGxfaGVhZGVyKGhpZiwgdmlmX2lkLCBISUZfUkVRX0lEX1dSSVRFX01JQiwgYnVmX2xlbik7 Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVl KGhpZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGhpZl9zY2FuKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEsCi0JICAgICBpbnQgY2hhbl9z dGFydF9pZHgsIGludCBjaGFuX251bSwgaW50ICp0aW1lb3V0KQotewotCWludCByZXQsIGk7Ci0J c3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzaXplX3QgYnVmX2xlbiA9Ci0JCXNpemVvZihzdHJ1Y3Qg aGlmX3JlcV9zdGFydF9zY2FuX2FsdCkgKyBjaGFuX251bSAqIHNpemVvZih1OCk7Ci0Jc3RydWN0 IGhpZl9yZXFfc3RhcnRfc2Nhbl9hbHQgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKGJ1Zl9sZW4sICZo aWYpOwotCWludCB0bW9fY2hhbl9mZywgdG1vX2NoYW5fYmcsIHRtbzsKLQotCVdBUk4oY2hhbl9u dW0gPiBISUZfQVBJX01BWF9OQl9DSEFOTkVMUywgImludmFsaWQgcGFyYW1zIik7Ci0JV0FSTihy ZXEtPm5fc3NpZHMgPiBISUZfQVBJX01BWF9OQl9TU0lEUywgImludmFsaWQgcGFyYW1zIik7Ci0K LQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZm9yIChpID0gMDsgaSA8IHJlcS0+bl9z c2lkczsgaSsrKSB7Ci0JCW1lbWNweShib2R5LT5zc2lkX2RlZltpXS5zc2lkLCByZXEtPnNzaWRz W2ldLnNzaWQsCi0JCSAgICAgICBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKLQkJYm9keS0+c3Np ZF9kZWZbaV0uc3NpZF9sZW5ndGggPQotCQkJY3B1X3RvX2xlMzIocmVxLT5zc2lkc1tpXS5zc2lk X2xlbik7Ci0JfQotCWJvZHktPm51bV9vZl9zc2lkcyA9IEhJRl9BUElfTUFYX05CX1NTSURTOwot CWJvZHktPm1haW50YWluX2N1cnJlbnRfYnNzID0gMTsKLQlib2R5LT5kaXNhbGxvd19wcyA9IDE7 Ci0JYm9keS0+dHhfcG93ZXJfbGV2ZWwgPQotCQljcHVfdG9fbGUzMihyZXEtPmNoYW5uZWxzW2No YW5fc3RhcnRfaWR4XS0+bWF4X3Bvd2VyKTsKLQlib2R5LT5udW1fb2ZfY2hhbm5lbHMgPSBjaGFu X251bTsKLQlmb3IgKGkgPSAwOyBpIDwgY2hhbl9udW07IGkrKykKLQkJYm9keS0+Y2hhbm5lbF9s aXN0W2ldID0KLQkJCXJlcS0+Y2hhbm5lbHNbaSArIGNoYW5fc3RhcnRfaWR4XS0+aHdfdmFsdWU7 Ci0JaWYgKHJlcS0+bm9fY2NrKQotCQlib2R5LT5tYXhfdHJhbnNtaXRfcmF0ZSA9IEFQSV9SQVRF X0lOREVYX0dfNk1CUFM7Ci0JZWxzZQotCQlib2R5LT5tYXhfdHJhbnNtaXRfcmF0ZSA9IEFQSV9S QVRFX0lOREVYX0JfMU1CUFM7Ci0JaWYgKHJlcS0+Y2hhbm5lbHNbY2hhbl9zdGFydF9pZHhdLT5m bGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0lSKSB7Ci0JCWJvZHktPm1pbl9jaGFubmVsX3RpbWUg PSBjcHVfdG9fbGUzMig1MCk7Ci0JCWJvZHktPm1heF9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUz MigxNTApOwotCX0gZWxzZSB7Ci0JCWJvZHktPm1pbl9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUz MigxMCk7Ci0JCWJvZHktPm1heF9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUzMig1MCk7Ci0JCWJv ZHktPm51bV9vZl9wcm9iZV9yZXF1ZXN0cyA9IDI7Ci0JCWJvZHktPnByb2JlX2RlbGF5ID0gMTAw OwotCX0KLQl0bW9fY2hhbl9iZyA9IGxlMzJfdG9fY3B1KGJvZHktPm1heF9jaGFubmVsX3RpbWUp ICogVVNFQ19QRVJfVFU7Ci0JdG1vX2NoYW5fZmcgPSA1MTIgKiBVU0VDX1BFUl9UVSArIGJvZHkt PnByb2JlX2RlbGF5OwotCXRtb19jaGFuX2ZnICo9IGJvZHktPm51bV9vZl9wcm9iZV9yZXF1ZXN0 czsKLQl0bW8gPSBjaGFuX251bSAqIG1heCh0bW9fY2hhbl9iZywgdG1vX2NoYW5fZmcpICsgNTEy ICogVVNFQ19QRVJfVFU7Ci0JaWYgKHRpbWVvdXQpCi0JCSp0aW1lb3V0ID0gdXNlY3NfdG9famlm Zmllcyh0bW8pOwotCi0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURf U1RBUlRfU0NBTiwgYnVmX2xlbik7Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhp ZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50 IGhpZl9zdG9wX3NjYW4oc3RydWN0IHdmeF92aWYgKnd2aWYpCi17Ci0JaW50IHJldDsKLQlzdHJ1 Y3QgaGlmX21zZyAqaGlmOwotCS8vIGJvZHkgYXNzb2NpYXRlZCB0byBISUZfUkVRX0lEX1NUT1Bf U0NBTiBpcyBlbXB0eQotCXdmeF9hbGxvY19oaWYoMCwgJmhpZik7Ci0KLQlpZiAoIWhpZikKLQkJ cmV0dXJuIC1FTk9NRU07Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFf SURfU1RPUF9TQ0FOLCAwKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBO VUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlm X2pvaW4oc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfYnNzX2Nv bmYgKmNvbmYsCi0JICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGNvbnN0 IHU4ICpzc2lkLCBpbnQgc3NpZGxlbikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpo aWY7Ci0Jc3RydWN0IGhpZl9yZXFfam9pbiAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpi b2R5KSwgJmhpZik7Ci0KLQlXQVJOX09OKCFjb25mLT5iZWFjb25faW50KTsKLQlXQVJOX09OKCFj b25mLT5iYXNpY19yYXRlcyk7Ci0JV0FSTl9PTihzaXplb2YoYm9keS0+c3NpZCkgPCBzc2lkbGVu KTsKLQlXQVJOKCFjb25mLT5pYnNzX2pvaW5lZCAmJiAhc3NpZGxlbiwgImpvaW5pbmcgYW4gdW5r bm93biBCU1MiKTsKLQlpZiAoV0FSTl9PTighY2hhbm5lbCkpCi0JCXJldHVybiAtRUlOVkFMOwot CWlmICghaGlmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlib2R5LT5pbmZyYXN0cnVjdHVyZV9ic3Nf bW9kZSA9ICFjb25mLT5pYnNzX2pvaW5lZDsKLQlib2R5LT5zaG9ydF9wcmVhbWJsZSA9IGNvbmYt PnVzZV9zaG9ydF9wcmVhbWJsZTsKLQlpZiAoY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hB Tl9OT19JUikKLQkJYm9keS0+cHJvYmVfZm9yX2pvaW4gPSAwOwotCWVsc2UKLQkJYm9keS0+cHJv YmVfZm9yX2pvaW4gPSAxOwotCWJvZHktPmNoYW5uZWxfbnVtYmVyID0gY2hhbm5lbC0+aHdfdmFs dWU7Ci0JYm9keS0+YmVhY29uX2ludGVydmFsID0gY3B1X3RvX2xlMzIoY29uZi0+YmVhY29uX2lu dCk7Ci0JYm9keS0+YmFzaWNfcmF0ZV9zZXQgPQotCQljcHVfdG9fbGUzMih3ZnhfcmF0ZV9tYXNr X3RvX2h3KHd2aWYtPndkZXYsIGNvbmYtPmJhc2ljX3JhdGVzKSk7Ci0JbWVtY3B5KGJvZHktPmJz c2lkLCBjb25mLT5ic3NpZCwgc2l6ZW9mKGJvZHktPmJzc2lkKSk7Ci0JaWYgKHNzaWQpIHsKLQkJ Ym9keS0+c3NpZF9sZW5ndGggPSBjcHVfdG9fbGUzMihzc2lkbGVuKTsKLQkJbWVtY3B5KGJvZHkt PnNzaWQsIHNzaWQsIHNzaWRsZW4pOwotCX0KLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5p ZCwgSElGX1JFUV9JRF9KT0lOLCBzaXplb2YoKmJvZHkpKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQo d3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4g cmV0OwotfQotCi1pbnQgaGlmX3NldF9ic3NfcGFyYW1zKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBp bnQgYWlkLCBpbnQgYmVhY29uX2xvc3RfY291bnQpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlm X21zZyAqaGlmOwotCXN0cnVjdCBoaWZfcmVxX3NldF9ic3NfcGFyYW1zICpib2R5ID0KLQkJd2Z4 X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKLQotCWlmICghaGlmKQotCQlyZXR1cm4g LUVOT01FTTsKLQlib2R5LT5haWQgPSBjcHVfdG9fbGUxNihhaWQpOwotCWJvZHktPmJlYWNvbl9s b3N0X2NvdW50ID0gYmVhY29uX2xvc3RfY291bnQ7Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3Zp Zi0+aWQsIEhJRl9SRVFfSURfU0VUX0JTU19QQVJBTVMsCi0JCQlzaXplb2YoKmJvZHkpKTsKLQly ZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2Zy ZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX2FkZF9rZXkoc3RydWN0IHdmeF9k ZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfcmVxX2FkZF9rZXkgKmFyZykKLXsKLQlpbnQgcmV0 OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0JLy8gRklYTUU6IG9ubHkgc2VuZCBuZWNlc3Nhcnkg Yml0cwotCXN0cnVjdCBoaWZfcmVxX2FkZF9rZXkgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVv ZigqYm9keSksICZoaWYpOwotCi0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCS8vIEZJ WE1FOiBzd2FwIGJ5dGVzIGFzIG5lY2Vzc2FyeSBpbiBib2R5Ci0JbWVtY3B5KGJvZHksIGFyZywg c2l6ZW9mKCpib2R5KSk7Ci0JaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAxLCA1KSkKLQkJ Ly8gTGVnYWN5IGZpcm13YXJlcyBleHBlY3QgdGhhdCBhZGRfa2V5IHRvIGJlIHNlbnQgb24gcmln aHQKLQkJLy8gaW50ZXJmYWNlLgotCQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCBhcmctPmludF9pZCwg SElGX1JFUV9JRF9BRERfS0VZLAotCQkJCXNpemVvZigqYm9keSkpOwotCWVsc2UKLQkJd2Z4X2Zp bGxfaGVhZGVyKGhpZiwgLTEsIEhJRl9SRVFfSURfQUREX0tFWSwgc2l6ZW9mKCpib2R5KSk7Ci0J cmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVlKGhp Zik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGhpZl9yZW1vdmVfa2V5KHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCBpbnQgaWR4KQotewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlz dHJ1Y3QgaGlmX3JlcV9yZW1vdmVfa2V5ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJv ZHkpLCAmaGlmKTsKLQotCWlmICghaGlmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlib2R5LT5lbnRy eV9pbmRleCA9IGlkeDsKLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCAtMSwgSElGX1JFUV9JRF9SRU1P VkVfS0VZLCBzaXplb2YoKmJvZHkpKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod2RldiwgaGlmLCBO VUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlm X3NldF9lZGNhX3F1ZXVlX3BhcmFtcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTE2IHF1ZXVlLAot CQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKmFyZykKLXsK LQlpbnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFfZWRjYV9x dWV1ZV9wYXJhbXMgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksCi0JCQkJCQkJ ICAgICAgICZoaWYpOwotCi0JaWYgKCFib2R5KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCVdBUk5f T04oYXJnLT5haWZzID4gMjU1KTsKLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYm9k eS0+YWlmc24gPSBhcmctPmFpZnM7Ci0JYm9keS0+Y3dfbWluID0gY3B1X3RvX2xlMTYoYXJnLT5j d19taW4pOwotCWJvZHktPmN3X21heCA9IGNwdV90b19sZTE2KGFyZy0+Y3dfbWF4KTsKLQlib2R5 LT50eF9vcF9saW1pdCA9IGNwdV90b19sZTE2KGFyZy0+dHhvcCAqIFVTRUNfUEVSX1RYT1ApOwot CWJvZHktPnF1ZXVlX2lkID0gMyAtIHF1ZXVlOwotCS8vIEFQSSAyLjAgaGFzIGNoYW5nZWQgcXVl dWUgSURzIHZhbHVlcwotCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od3ZpZi0+d2RldiwgMiwgMCkg JiYgcXVldWUgPT0gSUVFRTgwMjExX0FDX0JFKQotCQlib2R5LT5xdWV1ZV9pZCA9IEhJRl9RVUVV RV9JRF9CQUNLR1JPVU5EOwotCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od3ZpZi0+d2RldiwgMiwg MCkgJiYgcXVldWUgPT0gSUVFRTgwMjExX0FDX0JLKQotCQlib2R5LT5xdWV1ZV9pZCA9IEhJRl9R VUVVRV9JRF9CRVNURUZGT1JUOwotCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZf UkVRX0lEX0VEQ0FfUVVFVUVfUEFSQU1TLAotCQkJc2l6ZW9mKCpib2R5KSk7Ci0JcmV0ID0gd2Z4 X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVlKGhpZik7 Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGhpZl9zZXRfcG0oc3RydWN0IHdmeF92aWYgKnd2aWYs IGJvb2wgcHMsIGludCBkeW5hbWljX3BzX3RpbWVvdXQpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3Qg aGlmX21zZyAqaGlmOwotCXN0cnVjdCBoaWZfcmVxX3NldF9wbV9tb2RlICpib2R5ID0gd2Z4X2Fs bG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKLQotCWlmICghYm9keSkKLQkJcmV0dXJuIC1F Tk9NRU07Ci0KLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKHBzKSB7Ci0JCWJv ZHktPmVudGVyX3BzbSA9IDE7Ci0JCS8vIEZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgbW9yZSB0 aGFuIDEyOG1zCi0JCWJvZHktPmZhc3RfcHNtX2lkbGVfcGVyaW9kID0gbWluKGR5bmFtaWNfcHNf dGltZW91dCAqIDIsIDI1NSk7Ci0JCWlmIChib2R5LT5mYXN0X3BzbV9pZGxlX3BlcmlvZCkKLQkJ CWJvZHktPmZhc3RfcHNtID0gMTsKLQl9Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQs IEhJRl9SRVFfSURfU0VUX1BNX01PREUsIHNpemVvZigqYm9keSkpOwotCXJldCA9IHdmeF9jbWRf c2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJl dHVybiByZXQ7Ci19Ci0KLWludCBoaWZfc3RhcnQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0 IHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYsCi0JICAgICAgY29uc3Qgc3RydWN0IGll ZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9tc2cg KmhpZjsKLQlzdHJ1Y3QgaGlmX3JlcV9zdGFydCAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9m KCpib2R5KSwgJmhpZik7Ci0KLQlXQVJOX09OKCFjb25mLT5iZWFjb25faW50KTsKLQlpZiAoIWhp ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYm9keS0+ZHRpbV9wZXJpb2QgPSBjb25mLT5kdGltX3Bl cmlvZDsKLQlib2R5LT5zaG9ydF9wcmVhbWJsZSA9IGNvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZTsK LQlib2R5LT5jaGFubmVsX251bWJlciA9IGNoYW5uZWwtPmh3X3ZhbHVlOwotCWJvZHktPmJlYWNv bl9pbnRlcnZhbCA9IGNwdV90b19sZTMyKGNvbmYtPmJlYWNvbl9pbnQpOwotCWJvZHktPmJhc2lj X3JhdGVfc2V0ID0KLQkJY3B1X3RvX2xlMzIod2Z4X3JhdGVfbWFza190b19odyh3dmlmLT53ZGV2 LCBjb25mLT5iYXNpY19yYXRlcykpOwotCWJvZHktPnNzaWRfbGVuZ3RoID0gY29uZi0+c3NpZF9s ZW47Ci0JbWVtY3B5KGJvZHktPnNzaWQsIGNvbmYtPnNzaWQsIGNvbmYtPnNzaWRfbGVuKTsKLQl3 ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9TVEFSVCwgc2l6ZW9mKCpi b2R5KSk7Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFs c2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGhpZl9iZWFjb25fdHJh bnNtaXQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKQotewotCWludCByZXQ7Ci0J c3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3QgaGlmX3JlcV9iZWFjb25fdHJhbnNtaXQgKmJv ZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksCi0JCQkJCQkJICAgICAmaGlmKTsKLQot CWlmICghaGlmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlib2R5LT5lbmFibGVfYmVhY29uaW5nID0g ZW5hYmxlID8gMSA6IDA7Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFf SURfQkVBQ09OX1RSQU5TTUlULAotCQkJc2l6ZW9mKCpib2R5KSk7Ci0JcmV0ID0gd2Z4X2NtZF9z ZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0 dXJuIHJldDsKLX0KLQotaW50IGhpZl9tYXBfbGluayhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9v bCB1bm1hcCwgdTggKm1hY19hZGRyLCBpbnQgc3RhX2lkLCBib29sIG1mcCkKLXsKLQlpbnQgcmV0 OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFfbWFwX2xpbmsgKmJvZHkg PSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksICZoaWYpOwotCi0JaWYgKCFoaWYpCi0JCXJl dHVybiAtRU5PTUVNOwotCWlmIChtYWNfYWRkcikKLQkJZXRoZXJfYWRkcl9jb3B5KGJvZHktPm1h Y19hZGRyLCBtYWNfYWRkcik7Ci0JYm9keS0+bWZwYyA9IG1mcCA/IDEgOiAwOwotCWJvZHktPnVu bWFwID0gdW5tYXAgPyAxIDogMDsKLQlib2R5LT5wZWVyX3N0YV9pZCA9IHN0YV9pZDsKLQl3Znhf ZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9NQVBfTElOSywgc2l6ZW9mKCpi b2R5KSk7Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFs c2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGhpZl91cGRhdGVfaWVf YmVhY29uKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCB1OCAqaWVzLCBzaXplX3QgaWVzX2xl bikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0JaW50IGJ1Zl9sZW4gPSBz aXplb2Yoc3RydWN0IGhpZl9yZXFfdXBkYXRlX2llKSArIGllc19sZW47Ci0Jc3RydWN0IGhpZl9y ZXFfdXBkYXRlX2llICpib2R5ID0gd2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsKLQotCWlm ICghaGlmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlib2R5LT5iZWFjb24gPSAxOwotCWJvZHktPm51 bV9pZXMgPSBjcHVfdG9fbGUxNigxKTsKLQltZW1jcHkoYm9keS0+aWUsIGllcywgaWVzX2xlbik7 Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfVVBEQVRFX0lFLCBi dWZfbGVuKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBm YWxzZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL3dmeC9oaWZfdHguaCBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmgKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MjFjNTQ1YWU2Yi4uMDAwMDAwMDAwMDAwCi0t LSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCAr MCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgot ICogSW1wbGVtZW50YXRpb24gb2YgaG9zdC10by1jaGlwIGNvbW1hbmRzIChha2EgcmVxdWVzdC9j b25maXJtYXRpb24pIG9mIFdGeHh4Ci0gKiBTcGxpdCBNYWMgKFdTTSkgQVBJLgotICoKLSAqIENv cHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29w eXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBTVC1F cmljc3NvbiBTQQotICovCi0jaWZuZGVmIFdGWF9ISUZfVFhfSAotI2RlZmluZSBXRlhfSElGX1RY X0gKLQotc3RydWN0IGllZWU4MDIxMV9jaGFubmVsOwotc3RydWN0IGllZWU4MDIxMV9ic3NfY29u ZjsKLXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zOwotc3RydWN0IGNmZzgwMjExX3Nj YW5fcmVxdWVzdDsKLXN0cnVjdCBoaWZfcmVxX2FkZF9rZXk7Ci1zdHJ1Y3Qgd2Z4X2RldjsKLXN0 cnVjdCB3ZnhfdmlmOwotCi1zdHJ1Y3Qgd2Z4X2hpZl9jbWQgewotCXN0cnVjdCBtdXRleCAgICAg IGxvY2s7Ci0Jc3RydWN0IGNvbXBsZXRpb24gcmVhZHk7Ci0Jc3RydWN0IGNvbXBsZXRpb24gZG9u ZTsKLQlzdHJ1Y3QgaGlmX21zZyAgICAqYnVmX3NlbmQ7Ci0Jdm9pZCAgICAgICAgICAgICAgKmJ1 Zl9yZWN2OwotCXNpemVfdCAgICAgICAgICAgIGxlbl9yZWN2OwotCWludCAgICAgICAgICAgICAg IHJldDsKLX07Ci0KLXZvaWQgd2Z4X2luaXRfaGlmX2NtZChzdHJ1Y3Qgd2Z4X2hpZl9jbWQgKndm eF9oaWZfY21kKTsKLWludCB3ZnhfY21kX3NlbmQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVj dCBoaWZfbXNnICpyZXF1ZXN0LAotCQkgdm9pZCAqcmVwbHksIHNpemVfdCByZXBseV9sZW4sIGJv b2wgYXN5bmMpOwotCi1pbnQgaGlmX3NodXRkb3duKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKLWlu dCBoaWZfY29uZmlndXJhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3QgdTggKmNvbmYs IHNpemVfdCBsZW4pOwotaW50IGhpZl9yZXNldChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBy ZXNldF9zdGF0KTsKLWludCBoaWZfcmVhZF9taWIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2 aWZfaWQsIHUxNiBtaWJfaWQsCi0JCSB2b2lkICpidWYsIHNpemVfdCBidWZfc2l6ZSk7Ci1pbnQg aGlmX3dyaXRlX21pYihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZpZl9pZCwgdTE2IG1pYl9p ZCwKLQkJICB2b2lkICpidWYsIHNpemVfdCBidWZfc2l6ZSk7Ci1pbnQgaGlmX3NjYW4oc3RydWN0 IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcTgwMjExLAot CSAgICAgaW50IGNoYW5fc3RhcnQsIGludCBjaGFuX251bSwgaW50ICp0aW1lb3V0KTsKLWludCBo aWZfc3RvcF9zY2FuKHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKLWludCBoaWZfam9pbihzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiwKLQkg ICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgY29uc3QgdTggKnNzaWQsIGlu dCBzc2lkbGVuKTsKLWludCBoaWZfc2V0X3BtKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIHBz LCBpbnQgZHluYW1pY19wc190aW1lb3V0KTsKLWludCBoaWZfc2V0X2Jzc19wYXJhbXMoc3RydWN0 IHdmeF92aWYgKnd2aWYsIGludCBhaWQsIGludCBiZWFjb25fbG9zdF9jb3VudCk7Ci1pbnQgaGlm X2FkZF9rZXkoc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfcmVxX2FkZF9r ZXkgKmFyZyk7Ci1pbnQgaGlmX3JlbW92ZV9rZXkoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBp ZHgpOwotaW50IGhpZl9zZXRfZWRjYV9xdWV1ZV9wYXJhbXMoc3RydWN0IHdmeF92aWYgKnd2aWYs IHUxNiBxdWV1ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFy YW1zICphcmcpOwotaW50IGhpZl9zdGFydChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3Ry dWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiwKLQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgw MjExX2NoYW5uZWwgKmNoYW5uZWwpOwotaW50IGhpZl9iZWFjb25fdHJhbnNtaXQoc3RydWN0IHdm eF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKTsKLWludCBoaWZfbWFwX2xpbmsoc3RydWN0IHdmeF92 aWYgKnd2aWYsCi0JCSBib29sIHVubWFwLCB1OCAqbWFjX2FkZHIsIGludCBzdGFfaWQsIGJvb2wg bWZwKTsKLWludCBoaWZfdXBkYXRlX2llX2JlYWNvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29u c3QgdTggKmllcywgc2l6ZV90IGllc19sZW4pOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZl cnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHhf bWliLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MjZjZjFiNjJiZS4uMDAwMDAw MDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5jCisrKyAvZGV2L251 bGwKQEAgLTEsMzI0ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9ubHkKLS8qCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBob3N0LXRvLWNoaXAgTUlCcyBvZiBXRnh4 eCBTcGxpdCBNYWMgKFdTTSkgQVBJLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBT aWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmlj c3NvbgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBTVC1Fcmljc3NvbiBTQQotICovCi0KLSNpbmNs dWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAi aGlmX3R4LmgiCi0jaW5jbHVkZSAiaGlmX3R4X21pYi5oIgotI2luY2x1ZGUgImhpZl9hcGlfbWli LmgiCi0KLWludCBoaWZfc2V0X291dHB1dF9wb3dlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50 IHZhbCkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9jdXJyZW50X3R4X3Bvd2VyX2xldmVsIGFyZyA9IHsK LQkJLnBvd2VyX2xldmVsID0gY3B1X3RvX2xlMzIodmFsICogMTApLAotCX07Ci0KLQlyZXR1cm4g aGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICAgSElGX01JQl9JRF9D VVJSRU5UX1RYX1BPV0VSX0xFVkVMLAotCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Ci19Ci0K LWludCBoaWZfc2V0X2JlYWNvbl93YWtldXBfcGVyaW9kKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAot CQkJCSB1bnNpZ25lZCBpbnQgZHRpbV9pbnRlcnZhbCwKLQkJCQkgdW5zaWduZWQgaW50IGxpc3Rl bl9pbnRlcnZhbCkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9iZWFjb25fd2FrZV91cF9wZXJpb2QgYXJn ID0gewotCQkud2FrZXVwX3BlcmlvZF9taW4gPSBkdGltX2ludGVydmFsLAotCQkucmVjZWl2ZV9k dGltID0gMCwKLQkJLndha2V1cF9wZXJpb2RfbWF4ID0gbGlzdGVuX2ludGVydmFsLAotCX07Ci0K LQlpZiAoZHRpbV9pbnRlcnZhbCA+IDB4RkYgfHwgbGlzdGVuX2ludGVydmFsID4gMHhGRkZGKQot CQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlm LT5pZCwKLQkJCSAgICAgSElGX01JQl9JRF9CRUFDT05fV0FLRVVQX1BFUklPRCwKLQkJCSAgICAg JmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1pbnQgaGlmX3NldF9yY3BpX3Jzc2lfdGhyZXNob2xk KHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCQkJCWludCByc3NpX3Rob2xkLCBpbnQgcnNzaV9oeXN0 KQotewotCXN0cnVjdCBoaWZfbWliX3JjcGlfcnNzaV90aHJlc2hvbGQgYXJnID0gewotCQkucm9s bGluZ19hdmVyYWdlX2NvdW50ID0gOCwKLQkJLmRldGVjdGlvbiA9IDEsCi0JfTsKLQotCWlmICgh cnNzaV90aG9sZCAmJiAhcnNzaV9oeXN0KSB7Ci0JCWFyZy51cHBlcnRocmVzaCA9IDE7Ci0JCWFy Zy5sb3dlcnRocmVzaCA9IDE7Ci0JfSBlbHNlIHsKLQkJYXJnLnVwcGVyX3RocmVzaG9sZCA9IHJz c2lfdGhvbGQgKyByc3NpX2h5c3Q7Ci0JCWFyZy51cHBlcl90aHJlc2hvbGQgPSAoYXJnLnVwcGVy X3RocmVzaG9sZCArIDExMCkgKiAyOwotCQlhcmcubG93ZXJfdGhyZXNob2xkID0gcnNzaV90aG9s ZDsKLQkJYXJnLmxvd2VyX3RocmVzaG9sZCA9IChhcmcubG93ZXJfdGhyZXNob2xkICsgMTEwKSAq IDI7Ci0JfQotCi0JcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0J CQkgICAgIEhJRl9NSUJfSURfUkNQSV9SU1NJX1RIUkVTSE9MRCwgJmFyZywgc2l6ZW9mKGFyZykp OwotfQotCi1pbnQgaGlmX2dldF9jb3VudGVyc190YWJsZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg aW50IHZpZl9pZCwKLQkJCSAgIHN0cnVjdCBoaWZfbWliX2V4dGVuZGVkX2NvdW50X3RhYmxlICph cmcpCi17Ci0JaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAxLCAzKSkgewotCQkvLyBleHRl bmRlZF9jb3VudF90YWJsZSBpcyB3aWRlciB0aGFuIGNvdW50X3RhYmxlCi0JCW1lbXNldChhcmcs IDB4RkYsIHNpemVvZigqYXJnKSk7Ci0JCXJldHVybiBoaWZfcmVhZF9taWIod2RldiwgdmlmX2lk LCBISUZfTUlCX0lEX0NPVU5URVJTX1RBQkxFLAotCQkJCSAgICBhcmcsIHNpemVvZihzdHJ1Y3Qg aGlmX21pYl9jb3VudF90YWJsZSkpOwotCX0gZWxzZSB7Ci0JCXJldHVybiBoaWZfcmVhZF9taWIo d2RldiwgdmlmX2lkLAotCQkJCSAgICBISUZfTUlCX0lEX0VYVEVOREVEX0NPVU5URVJTX1RBQkxF LCBhcmcsCi0JCQkJc2l6ZW9mKHN0cnVjdCBoaWZfbWliX2V4dGVuZGVkX2NvdW50X3RhYmxlKSk7 Ci0JfQotfQotCi1pbnQgaGlmX3NldF9tYWNhZGRyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1OCAq bWFjKQotewotCXN0cnVjdCBoaWZfbWliX21hY19hZGRyZXNzIG1zZyA9IHsgfTsKLQotCWlmICht YWMpCi0JCWV0aGVyX2FkZHJfY29weShtc2cubWFjX2FkZHIsIG1hYyk7Ci0JcmV0dXJuIGhpZl93 cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJfSURfRE9UMTFfTUFDX0FERFJF U1MsCi0JCQkgICAgICZtc2csIHNpemVvZihtc2cpKTsKLX0KLQotaW50IGhpZl9zZXRfcnhfZmls dGVyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCQkgICAgICBib29sIGZpbHRlcl9ic3NpZCwgYm9v bCBmaWx0ZXJfcHJicmVxKQotewotCXN0cnVjdCBoaWZfbWliX3J4X2ZpbHRlciBhcmcgPSB7IH07 Ci0KLQlpZiAoZmlsdGVyX2Jzc2lkKQotCQlhcmcuYnNzaWRfZmlsdGVyID0gMTsKLQlpZiAoIWZp bHRlcl9wcmJyZXEpCi0JCWFyZy5md2RfcHJvYmVfcmVxID0gMTsKLQlyZXR1cm4gaGlmX3dyaXRl X21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElGX01JQl9JRF9SWF9GSUxURVIsCi0JCQkgICAg ICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQotaW50IGhpZl9zZXRfYmVhY29uX2ZpbHRlcl90YWJs ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHRibF9sZW4sCi0JCQkJY29uc3Qgc3RydWN0IGhp Zl9pZV90YWJsZV9lbnRyeSAqdGJsKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9taWJfYmNu X2ZpbHRlcl90YWJsZSAqYXJnOwotCWludCBidWZfbGVuID0gc3RydWN0X3NpemUoYXJnLCBpZV90 YWJsZSwgdGJsX2xlbik7Ci0KLQlhcmcgPSBremFsbG9jKGJ1Zl9sZW4sIEdGUF9LRVJORUwpOwot CWlmICghYXJnKQotCQlyZXR1cm4gLUVOT01FTTsKLQlhcmctPm51bV9vZl9pbmZvX2VsbXRzID0g Y3B1X3RvX2xlMzIodGJsX2xlbik7Ci0JbWVtY3B5KGFyZy0+aWVfdGFibGUsIHRibCwgZmxleF9h cnJheV9zaXplKGFyZywgaWVfdGFibGUsIHRibF9sZW4pKTsKLQlyZXQgPSBoaWZfd3JpdGVfbWli KHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAgIEhJRl9NSUJfSURfQkVBQ09OX0ZJTFRFUl9U QUJMRSwgYXJnLCBidWZfbGVuKTsKLQlrZnJlZShhcmcpOwotCXJldHVybiByZXQ7Ci19Ci0KLWlu dCBoaWZfYmVhY29uX2ZpbHRlcl9jb250cm9sKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCQkJICAg ICAgaW50IGVuYWJsZSwgaW50IGJlYWNvbl9jb3VudCkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9iY25f ZmlsdGVyX2VuYWJsZSBhcmcgPSB7Ci0JCS5lbmFibGUgPSBjcHVfdG9fbGUzMihlbmFibGUpLAot CQkuYmNuX2NvdW50ID0gY3B1X3RvX2xlMzIoYmVhY29uX2NvdW50KSwKLQl9OwotCXJldHVybiBo aWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAgICBISUZfTUlCX0lEX0JF QUNPTl9GSUxURVJfRU5BQkxFLAotCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Ci19Ci0KLWlu dCBoaWZfc2V0X29wZXJhdGlvbmFsX21vZGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGVudW0gaGlm X29wX3Bvd2VyX21vZGUgbW9kZSkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9nbF9vcGVyYXRpb25hbF9w b3dlcl9tb2RlIGFyZyA9IHsKLQkJLnBvd2VyX21vZGUgPSBtb2RlLAotCQkud3VwX2luZF9hY3Rp dmF0aW9uID0gMSwKLQl9OwotCi0JcmV0dXJuIGhpZl93cml0ZV9taWIod2RldiwgLTEsIEhJRl9N SUJfSURfR0xfT1BFUkFUSU9OQUxfUE9XRVJfTU9ERSwKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFy ZykpOwotfQotCi1pbnQgaGlmX3NldF90ZW1wbGF0ZV9mcmFtZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp Ziwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHU4IGZyYW1lX3R5cGUsIGludCBpbml0X3Jh dGUpCi17Ci0Jc3RydWN0IGhpZl9taWJfdGVtcGxhdGVfZnJhbWUgKmFyZzsKLQotCVdBUk4oc2ti LT5sZW4gPiBISUZfQVBJX01BWF9URU1QTEFURV9GUkFNRV9TSVpFLCAiZnJhbWUgaXMgdG9vIGJp ZyIpOwotCXNrYl9wdXNoKHNrYiwgNCk7Ci0JYXJnID0gKHN0cnVjdCBoaWZfbWliX3RlbXBsYXRl X2ZyYW1lICopc2tiLT5kYXRhOwotCXNrYl9wdWxsKHNrYiwgNCk7Ci0JYXJnLT5pbml0X3JhdGUg PSBpbml0X3JhdGU7Ci0JYXJnLT5mcmFtZV90eXBlID0gZnJhbWVfdHlwZTsKLQlhcmctPmZyYW1l X2xlbmd0aCA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3 dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElGX01JQl9JRF9URU1QTEFURV9GUkFNRSwKLQkJCSAgICAg YXJnLCBzaXplb2YoKmFyZykgKyBza2ItPmxlbik7Ci19Ci0KLWludCBoaWZfc2V0X21mcChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBjYXBhYmxlLCBib29sIHJlcXVpcmVkKQotewotCXN0cnVj dCBoaWZfbWliX3Byb3RlY3RlZF9tZ210X3BvbGljeSBhcmcgPSB7IH07Ci0KLQlXQVJOKHJlcXVp cmVkICYmICFjYXBhYmxlLCAiaW5jb2hlcmVudCBhcmd1bWVudHMiKTsKLQlpZiAoY2FwYWJsZSkg ewotCQlhcmcucG1mX2VuYWJsZSA9IDE7Ci0JCWFyZy5ob3N0X2VuY19hdXRoX2ZyYW1lcyA9IDE7 Ci0JfQotCWlmICghcmVxdWlyZWQpCi0JCWFyZy51bnBtZl9hbGxvd2VkID0gMTsKLQlyZXR1cm4g aGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICAgSElGX01JQl9JRF9Q Uk9URUNURURfTUdNVF9QT0xJQ1ksCi0JCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQot aW50IGhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJCSAg ICAgdTggdHhfdGlkX3BvbGljeSwgdTggcnhfdGlkX3BvbGljeSkKLXsKLQlzdHJ1Y3QgaGlmX21p Yl9ibG9ja19hY2tfcG9saWN5IGFyZyA9IHsKLQkJLmJsb2NrX2Fja190eF90aWRfcG9saWN5ID0g dHhfdGlkX3BvbGljeSwKLQkJLmJsb2NrX2Fja19yeF90aWRfcG9saWN5ID0gcnhfdGlkX3BvbGlj eSwKLQl9OwotCi0JcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJ Rl9NSUJfSURfQkxPQ0tfQUNLX1BPTElDWSwKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwot fQotCi1pbnQgaGlmX3NldF9hc3NvY2lhdGlvbl9tb2RlKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBp bnQgYW1wZHVfZGVuc2l0eSwKLQkJCSAgICAgYm9vbCBncmVlbmZpZWxkLCBib29sIHNob3J0X3By ZWFtYmxlKQotewotCXN0cnVjdCBoaWZfbWliX3NldF9hc3NvY2lhdGlvbl9tb2RlIGFyZyA9IHsK LQkJLnByZWFtYnR5cGVfdXNlID0gMSwKLQkJLm1vZGUgPSAxLAotCQkuc3BhY2luZyA9IDEsCi0J CS5zaG9ydF9wcmVhbWJsZSA9IHNob3J0X3ByZWFtYmxlLAotCQkuZ3JlZW5maWVsZCA9IGdyZWVu ZmllbGQsCi0JCS5tcGR1X3N0YXJ0X3NwYWNpbmcgPSBhbXBkdV9kZW5zaXR5LAotCX07Ci0KLQly ZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICAgSElGX01J Ql9JRF9TRVRfQVNTT0NJQVRJT05fTU9ERSwgJmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1pbnQg aGlmX3NldF90eF9yYXRlX3JldHJ5X3BvbGljeShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJCQkg aW50IHBvbGljeV9pbmRleCwgdTggKnJhdGVzKQotewotCXN0cnVjdCBoaWZfbWliX3NldF90eF9y YXRlX3JldHJ5X3BvbGljeSAqYXJnOwotCXNpemVfdCBzaXplID0gc3RydWN0X3NpemUoYXJnLCB0 eF9yYXRlX3JldHJ5X3BvbGljeSwgMSk7Ci0JaW50IHJldDsKLQotCWFyZyA9IGt6YWxsb2Moc2l6 ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhcmcpCi0JCXJldHVybiAtRU5PTUVNOwotCWFyZy0+bnVt X3R4X3JhdGVfcG9saWNpZXMgPSAxOwotCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0ucG9s aWN5X2luZGV4ID0gcG9saWN5X2luZGV4OwotCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0u c2hvcnRfcmV0cnlfY291bnQgPSAyNTU7Ci0JYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5s b25nX3JldHJ5X2NvdW50ID0gMjU1OwotCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0uZmly c3RfcmF0ZV9zZWwgPSAxOwotCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0udGVybWluYXRl ID0gMTsKLQlhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLmNvdW50X2luaXQgPSAxOwotCW1l bWNweSgmYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5yYXRlcywgcmF0ZXMsCi0JICAgICAg IHNpemVvZihhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLnJhdGVzKSk7Ci0JcmV0ID0gaGlm X3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICBISUZfTUlCX0lEX1NFVF9U WF9SQVRFX1JFVFJZX1BPTElDWSwgYXJnLCBzaXplKTsKLQlrZnJlZShhcmcpOwotCXJldHVybiBy ZXQ7Ci19Ci0KLWludCBoaWZfa2VlcF9hbGl2ZV9wZXJpb2Qoc3RydWN0IHdmeF92aWYgKnd2aWYs IGludCBwZXJpb2QpCi17Ci0Jc3RydWN0IGhpZl9taWJfa2VlcF9hbGl2ZV9wZXJpb2QgYXJnID0g ewotCQkua2VlcF9hbGl2ZV9wZXJpb2QgPSBjcHVfdG9fbGUxNihwZXJpb2QpLAotCX07Ci0KLQly ZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElGX01JQl9JRF9LRUVQ X0FMSVZFX1BFUklPRCwKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwotfTsKLQotaW50IGhp Zl9zZXRfYXJwX2lwdjRfZmlsdGVyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgaWR4LCBfX2Jl MzIgKmFkZHIpCi17Ci0Jc3RydWN0IGhpZl9taWJfYXJwX2lwX2FkZHJfdGFibGUgYXJnID0gewot CQkuY29uZGl0aW9uX2lkeCA9IGlkeCwKLQkJLmFycF9lbmFibGUgPSBISUZfQVJQX05TX0ZJTFRF UklOR19ESVNBQkxFLAotCX07Ci0KLQlpZiAoYWRkcikgewotCQkvLyBDYXV0aW9uOiB0eXBlIG9m IGFkZHIgaXMgX19iZTMyCi0JCW1lbWNweShhcmcuaXB2NF9hZGRyZXNzLCBhZGRyLCBzaXplb2Yo YXJnLmlwdjRfYWRkcmVzcykpOwotCQlhcmcuYXJwX2VuYWJsZSA9IEhJRl9BUlBfTlNfRklMVEVS SU5HX0VOQUJMRTsKLQl9Ci0JcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+ aWQsCi0JCQkgICAgIEhJRl9NSUJfSURfQVJQX0lQX0FERFJFU1NFU19UQUJMRSwKLQkJCSAgICAg JmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1pbnQgaGlmX3VzZV9tdWx0aV90eF9jb25mKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9nbF9zZXRf bXVsdGlfbXNnIGFyZyA9IHsKLQkJLmVuYWJsZV9tdWx0aV90eF9jb25mID0gZW5hYmxlLAotCX07 Ci0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3ZGV2LCAtMSwgSElGX01JQl9JRF9HTF9TRVRfTVVM VElfTVNHLAotCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Ci19Ci0KLWludCBoaWZfc2V0X3Vh cHNkX2luZm8oc3RydWN0IHdmeF92aWYgKnd2aWYsIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXN0 cnVjdCBoaWZfbWliX3NldF91YXBzZF9pbmZvcm1hdGlvbiBhcmcgPSB7IH07Ci0KLQlpZiAodmFs ICYgQklUKElFRUU4MDIxMV9BQ19WTykpCi0JCWFyZy50cmlnX3ZvaWNlID0gMTsKLQlpZiAodmFs ICYgQklUKElFRUU4MDIxMV9BQ19WSSkpCi0JCWFyZy50cmlnX3ZpZGVvID0gMTsKLQlpZiAodmFs ICYgQklUKElFRUU4MDIxMV9BQ19CRSkpCi0JCWFyZy50cmlnX2JlID0gMTsKLQlpZiAodmFsICYg QklUKElFRUU4MDIxMV9BQ19CSykpCi0JCWFyZy50cmlnX2Jja2dybmQgPSAxOwotCXJldHVybiBo aWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAgICBISUZfTUlCX0lEX1NF VF9VQVBTRF9JTkZPUk1BVElPTiwKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1p bnQgaGlmX2VycF91c2VfcHJvdGVjdGlvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBlbmFi bGUpCi17Ci0Jc3RydWN0IGhpZl9taWJfbm9uX2VycF9wcm90ZWN0aW9uIGFyZyA9IHsKLQkJLnVz ZV9jdHNfdG9fc2VsZiA9IGVuYWJsZSwKLQl9OwotCi0JcmV0dXJuIGhpZl93cml0ZV9taWIod3Zp Zi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgIEhJRl9NSUJfSURfTk9OX0VSUF9QUk9URUNUSU9O LCAmYXJnLCBzaXplb2YoYXJnKSk7Ci19Ci0KLWludCBoaWZfc2xvdF90aW1lKHN0cnVjdCB3Znhf dmlmICp3dmlmLCBpbnQgdmFsKQotewotCXN0cnVjdCBoaWZfbWliX3Nsb3RfdGltZSBhcmcgPSB7 Ci0JCS5zbG90X3RpbWUgPSBjcHVfdG9fbGUzMih2YWwpLAotCX07Ci0KLQlyZXR1cm4gaGlmX3dy aXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElGX01JQl9JRF9TTE9UX1RJTUUsCi0JCQkg ICAgICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQotaW50IGhpZl93ZXBfZGVmYXVsdF9rZXlfaWQo c3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpCi17Ci0Jc3RydWN0IGhpZl9taWJfd2VwX2Rl ZmF1bHRfa2V5X2lkIGFyZyA9IHsKLQkJLndlcF9kZWZhdWx0X2tleV9pZCA9IHZhbCwKLQl9Owot Ci0JcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgIEhJ Rl9NSUJfSURfRE9UMTFfV0VQX0RFRkFVTFRfS0VZX0lELAotCQkJICAgICAmYXJnLCBzaXplb2Yo YXJnKSk7Ci19Ci0KLWludCBoaWZfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwg aW50IHZhbCkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9kb3QxMV9ydHNfdGhyZXNob2xkIGFyZyA9IHsK LQkJLnRocmVzaG9sZCA9IGNwdV90b19sZTMyKHZhbCA+PSAwID8gdmFsIDogMHhGRkZGKSwKLQl9 OwotCi0JcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAg IEhJRl9NSUJfSURfRE9UMTFfUlRTX1RIUkVTSE9MRCwgJmFyZywgc2l6ZW9mKGFyZykpOwotfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHhfbWliLmggYi9kcml2ZXJzL3N0 YWdpbmcvd2Z4L2hpZl90eF9taWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEy YjNiYTBmMDBlLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHhf bWliLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogSW1wbGVtZW50YXRpb24gb2YgaG9zdC10 by1jaGlwIE1JQnMgb2YgV0Z4eHggU3BsaXQgTWFjIChXU00pIEFQSS4KLSAqCi0gKiBDb3B5cmln aHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdo dCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgU1QtRXJpY3Nz b24gU0EKLSAqLwotI2lmbmRlZiBXRlhfSElGX1RYX01JQl9ICi0jZGVmaW5lIFdGWF9ISUZfVFhf TUlCX0gKLQotc3RydWN0IHdmeF92aWY7Ci1zdHJ1Y3Qgc2tfYnVmZjsKLQotaW50IGhpZl9zZXRf b3V0cHV0X3Bvd2VyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKTsKLWludCBoaWZfc2V0 X2JlYWNvbl93YWtldXBfcGVyaW9kKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCQkJCSB1bnNpZ25l ZCBpbnQgZHRpbV9pbnRlcnZhbCwKLQkJCQkgdW5zaWduZWQgaW50IGxpc3Rlbl9pbnRlcnZhbCk7 Ci1pbnQgaGlmX3NldF9yY3BpX3Jzc2lfdGhyZXNob2xkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAot CQkJCWludCByc3NpX3Rob2xkLCBpbnQgcnNzaV9oeXN0KTsKLWludCBoaWZfZ2V0X2NvdW50ZXJz X3RhYmxlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlmX2lkLAotCQkJICAgc3RydWN0IGhp Zl9taWJfZXh0ZW5kZWRfY291bnRfdGFibGUgKmFyZyk7Ci1pbnQgaGlmX3NldF9tYWNhZGRyKHN0 cnVjdCB3ZnhfdmlmICp3dmlmLCB1OCAqbWFjKTsKLWludCBoaWZfc2V0X3J4X2ZpbHRlcihzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJICAgICAgYm9vbCBmaWx0ZXJfYnNzaWQsIGJvb2wgZndkX3By b2JlX3JlcSk7Ci1pbnQgaGlmX3NldF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3Znhfdmlm ICp3dmlmLCBpbnQgdGJsX2xlbiwKLQkJCQljb25zdCBzdHJ1Y3QgaGlmX2llX3RhYmxlX2VudHJ5 ICp0YmwpOwotaW50IGhpZl9iZWFjb25fZmlsdGVyX2NvbnRyb2woc3RydWN0IHdmeF92aWYgKnd2 aWYsCi0JCQkgICAgICBpbnQgZW5hYmxlLCBpbnQgYmVhY29uX2NvdW50KTsKLWludCBoaWZfc2V0 X29wZXJhdGlvbmFsX21vZGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGVudW0gaGlmX29wX3Bvd2Vy X21vZGUgbW9kZSk7Ci1pbnQgaGlmX3NldF90ZW1wbGF0ZV9mcmFtZShzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHU4IGZyYW1lX3R5cGUsIGludCBpbml0 X3JhdGUpOwotaW50IGhpZl9zZXRfbWZwKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGNhcGFi bGUsIGJvb2wgcmVxdWlyZWQpOwotaW50IGhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeShzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwKLQkJCSAgICAgdTggdHhfdGlkX3BvbGljeSwgdTggcnhfdGlkX3BvbGlj eSk7Ci1pbnQgaGlmX3NldF9hc3NvY2lhdGlvbl9tb2RlKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBp bnQgYW1wZHVfZGVuc2l0eSwKLQkJCSAgICAgYm9vbCBncmVlbmZpZWxkLCBib29sIHNob3J0X3By ZWFtYmxlKTsKLWludCBoaWZfc2V0X3R4X3JhdGVfcmV0cnlfcG9saWN5KHN0cnVjdCB3Znhfdmlm ICp3dmlmLAotCQkJCSBpbnQgcG9saWN5X2luZGV4LCB1OCAqcmF0ZXMpOwotaW50IGhpZl9rZWVw X2FsaXZlX3BlcmlvZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHBlcmlvZCk7Ci1pbnQgaGlm X3NldF9hcnBfaXB2NF9maWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBpZHgsIF9fYmUz MiAqYWRkcik7Ci1pbnQgaGlmX3VzZV9tdWx0aV90eF9jb25mKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCBib29sIGVuYWJsZSk7Ci1pbnQgaGlmX3NldF91YXBzZF9pbmZvKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCB1bnNpZ25lZCBsb25nIHZhbCk7Ci1pbnQgaGlmX2VycF91c2VfcHJvdGVjdGlvbihzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGUpOwotaW50IGhpZl9zbG90X3RpbWUoc3RydWN0 IHdmeF92aWYgKnd2aWYsIGludCB2YWwpOwotaW50IGhpZl93ZXBfZGVmYXVsdF9rZXlfaWQoc3Ry dWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpOwotaW50IGhpZl9ydHNfdGhyZXNob2xkKHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvd2Z4L2h3aW8uYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaHdpby5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmZiYzViNWQ2NGMuLjAwMDAwMDAwMDAwMAotLS0gYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8uYworKysgL2Rldi9udWxsCkBAIC0xLDM1MiArMCwwIEBA Ci0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogTG93LWxl dmVsIEkvTyBmdW5jdGlvbnMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGlj b24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29u Ci0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5o PgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgImh3aW8uaCIKLSNpbmNsdWRl ICJ3ZnguaCIKLSNpbmNsdWRlICJidXMuaCIKLSNpbmNsdWRlICJ0cmFjZXMuaCIKLQotLyoKLSAq IEludGVybmFsIGhlbHBlcnMuCi0gKgotICogQWJvdXQgQ09ORklHX1ZNQVBfU1RBQ0s6Ci0gKiBX aGVuIENPTkZJR19WTUFQX1NUQUNLIGlzIGVuYWJsZWQsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBy dW4gRE1BIG9uIHN0YWNrCi0gKiBhbGxvY2F0ZWQgZGF0YS4gRnVuY3Rpb25zIGJlbG93IHRoYXQg d29yayB3aXRoIHJlZ2lzdGVycyAoYWthIGZ1bmN0aW9ucwotICogZW5kaW5nIHdpdGggIjMyIikg YXV0b21hdGljYWxseSByZWFsbG9jYXRlIGJ1ZmZlcnMgd2l0aCBrbWFsbG9jLiBIb3dldmVyLAot ICogZnVuY3Rpb25zIHRoYXQgd29yayB3aXRoIGFyYml0cmFyeSBsZW5ndGggYnVmZmVycyBsZXQn cyBjYWxsZXIgdG8gaGFuZGxlCi0gKiBtZW1vcnkgbG9jYXRpb24uIEluIGRvdWJ0LCBlbmFibGUg Q09ORklHX0RFQlVHX1NHIHRvIGRldGVjdCBiYWRseSBsb2NhdGVkCi0gKiBidWZmZXIuCi0gKi8K LQotc3RhdGljIGludCByZWFkMzIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCByZWcsIHUzMiAq dmFsKQotewotCWludCByZXQ7Ci0JX19sZTMyICp0bXAgPSBrbWFsbG9jKHNpemVvZih1MzIpLCBH RlBfS0VSTkVMKTsKLQotCSp2YWwgPSB+MDsgLy8gTmV2ZXIgcmV0dXJuIHVuZGVmaW5lZCB2YWx1 ZQotCWlmICghdG1wKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSB3ZGV2LT5od2J1c19vcHMt PmNvcHlfZnJvbV9pbyh3ZGV2LT5od2J1c19wcml2LCByZWcsIHRtcCwKLQkJCQkJICAgIHNpemVv Zih1MzIpKTsKLQlpZiAocmV0ID49IDApCi0JCSp2YWwgPSBsZTMyX3RvX2NwdSgqdG1wKTsKLQlr ZnJlZSh0bXApOwotCWlmIChyZXQpCi0JCWRldl9lcnIod2Rldi0+ZGV2LCAiJXM6IGJ1cyBjb21t dW5pY2F0aW9uIGVycm9yOiAlZFxuIiwKLQkJCV9fZnVuY19fLCByZXQpOwotCXJldHVybiByZXQ7 Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGUzMihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJlZywg dTMyIHZhbCkKLXsKLQlpbnQgcmV0OwotCV9fbGUzMiAqdG1wID0ga21hbGxvYyhzaXplb2YodTMy KSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXRtcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JKnRtcCA9 IGNwdV90b19sZTMyKHZhbCk7Ci0JcmV0ID0gd2Rldi0+aHdidXNfb3BzLT5jb3B5X3RvX2lvKHdk ZXYtPmh3YnVzX3ByaXYsIHJlZywgdG1wLAotCQkJCQkgIHNpemVvZih1MzIpKTsKLQlrZnJlZSh0 bXApOwotCWlmIChyZXQpCi0JCWRldl9lcnIod2Rldi0+ZGV2LCAiJXM6IGJ1cyBjb21tdW5pY2F0 aW9uIGVycm9yOiAlZFxuIiwKLQkJCV9fZnVuY19fLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0K LXN0YXRpYyBpbnQgcmVhZDMyX2xvY2tlZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJlZywg dTMyICp2YWwpCi17Ci0JaW50IHJldDsKLQotCXdkZXYtPmh3YnVzX29wcy0+bG9jayh3ZGV2LT5o d2J1c19wcml2KTsKLQlyZXQgPSByZWFkMzIod2RldiwgcmVnLCB2YWwpOwotCV90cmFjZV9pb19y ZWFkMzIocmVnLCAqdmFsKTsKLQl3ZGV2LT5od2J1c19vcHMtPnVubG9jayh3ZGV2LT5od2J1c19w cml2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdyaXRlMzJfbG9ja2VkKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1MzIgdmFsKQotewotCWludCByZXQ7Ci0KLQl3ZGV2 LT5od2J1c19vcHMtPmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0ID0gd3JpdGUzMih3ZGV2 LCByZWcsIHZhbCk7Ci0JX3RyYWNlX2lvX3dyaXRlMzIocmVnLCB2YWwpOwotCXdkZXYtPmh3YnVz X29wcy0+dW5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyBpbnQgd3JpdGUzMl9iaXRzX2xvY2tlZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJlZywg dTMyIG1hc2ssIHUzMiB2YWwpCi17Ci0JaW50IHJldDsKLQl1MzIgdmFsX3IsIHZhbF93OwotCi0J V0FSTl9PTih+bWFzayAmIHZhbCk7Ci0JdmFsICY9IG1hc2s7Ci0Jd2Rldi0+aHdidXNfb3BzLT5s b2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCXJldCA9IHJlYWQzMih3ZGV2LCByZWcsICZ2YWxfcik7 Ci0JX3RyYWNlX2lvX3JlYWQzMihyZWcsIHZhbF9yKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBl cnI7Ci0JdmFsX3cgPSAodmFsX3IgJiB+bWFzaykgfCB2YWw7Ci0JaWYgKHZhbF93ICE9IHZhbF9y KSB7Ci0JCXJldCA9IHdyaXRlMzIod2RldiwgcmVnLCB2YWxfdyk7Ci0JCV90cmFjZV9pb193cml0 ZTMyKHJlZywgdmFsX3cpOwotCX0KLWVycjoKLQl3ZGV2LT5od2J1c19vcHMtPnVubG9jayh3ZGV2 LT5od2J1c19wcml2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGluZGlyZWN0X3Jl YWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCByZWcsIHUzMiBhZGRyLAotCQkJIHZvaWQgKmJ1 Ziwgc2l6ZV90IGxlbikKLXsKLQlpbnQgcmV0OwotCWludCBpOwotCXUzMiBjZmc7Ci0JdTMyIHBy ZWZldGNoOwotCi0JV0FSTl9PTihsZW4gPj0gMHgyMDAwKTsKLQlXQVJOX09OKHJlZyAhPSBXRlhf UkVHX0FIQl9EUE9SVCAmJiByZWcgIT0gV0ZYX1JFR19TUkFNX0RQT1JUKTsKLQotCWlmIChyZWcg PT0gV0ZYX1JFR19BSEJfRFBPUlQpCi0JCXByZWZldGNoID0gQ0ZHX1BSRUZFVENIX0FIQjsKLQll bHNlIGlmIChyZWcgPT0gV0ZYX1JFR19TUkFNX0RQT1JUKQotCQlwcmVmZXRjaCA9IENGR19QUkVG RVRDSF9TUkFNOwotCWVsc2UKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyZXQgPSB3cml0ZTMyKHdk ZXYsIFdGWF9SRUdfQkFTRV9BRERSLCBhZGRyKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnI7 Ci0KLQlyZXQgPSByZWFkMzIod2RldiwgV0ZYX1JFR19DT05GSUcsICZjZmcpOwotCWlmIChyZXQg PCAwKQotCQlnb3RvIGVycjsKLQotCXJldCA9IHdyaXRlMzIod2RldiwgV0ZYX1JFR19DT05GSUcs IGNmZyB8IHByZWZldGNoKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnI7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgMjA7IGkrKykgewotCQlyZXQgPSByZWFkMzIod2RldiwgV0ZYX1JFR19DT05GSUcs ICZjZmcpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyOwotCQlpZiAoIShjZmcgJiBwcmVm ZXRjaCkpCi0JCQlicmVhazsKLQkJdXNsZWVwX3JhbmdlKDIwMCwgMjUwKTsKLQl9Ci0JaWYgKGkg PT0gMjApIHsKLQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJZ290byBlcnI7Ci0JfQotCi0JcmV0ID0g d2Rldi0+aHdidXNfb3BzLT5jb3B5X2Zyb21faW8od2Rldi0+aHdidXNfcHJpdiwgcmVnLCBidWYs IGxlbik7Ci0KLWVycjoKLQlpZiAocmV0IDwgMCkKLQkJbWVtc2V0KGJ1ZiwgMHhGRiwgbGVuKTsg Ly8gTmV2ZXIgcmV0dXJuIHVuZGVmaW5lZCB2YWx1ZQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyBpbnQgaW5kaXJlY3Rfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCByZWcsIHUzMiBh ZGRyLAotCQkJICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0JaW50IHJldDsKLQot CVdBUk5fT04obGVuID49IDB4MjAwMCk7Ci0JV0FSTl9PTihyZWcgIT0gV0ZYX1JFR19BSEJfRFBP UlQgJiYgcmVnICE9IFdGWF9SRUdfU1JBTV9EUE9SVCk7Ci0JcmV0ID0gd3JpdGUzMih3ZGV2LCBX RlhfUkVHX0JBU0VfQUREUiwgYWRkcik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0K LQlyZXR1cm4gd2Rldi0+aHdidXNfb3BzLT5jb3B5X3RvX2lvKHdkZXYtPmh3YnVzX3ByaXYsIHJl ZywgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgaW50IGluZGlyZWN0X3JlYWRfbG9ja2VkKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1MzIgYWRkciwKLQkJCQl2b2lkICpidWYsIHNpemVf dCBsZW4pCi17Ci0JaW50IHJldDsKLQotCXdkZXYtPmh3YnVzX29wcy0+bG9jayh3ZGV2LT5od2J1 c19wcml2KTsKLQlyZXQgPSBpbmRpcmVjdF9yZWFkKHdkZXYsIHJlZywgYWRkciwgYnVmLCBsZW4p OwotCV90cmFjZV9pb19pbmRfcmVhZChyZWcsIGFkZHIsIGJ1ZiwgbGVuKTsKLQl3ZGV2LT5od2J1 c19vcHMtPnVubG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0 aWMgaW50IGluZGlyZWN0X3dyaXRlX2xvY2tlZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJl ZywgdTMyIGFkZHIsCi0JCQkJIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlpbnQg cmV0OwotCi0Jd2Rldi0+aHdidXNfb3BzLT5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCXJldCA9 IGluZGlyZWN0X3dyaXRlKHdkZXYsIHJlZywgYWRkciwgYnVmLCBsZW4pOwotCV90cmFjZV9pb19p bmRfd3JpdGUocmVnLCBhZGRyLCBidWYsIGxlbik7Ci0Jd2Rldi0+aHdidXNfb3BzLT51bmxvY2so d2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpbmRpcmVj dF9yZWFkMzJfbG9ja2VkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLAotCQkJCSAgdTMy IGFkZHIsIHUzMiAqdmFsKQotewotCWludCByZXQ7Ci0JX19sZTMyICp0bXAgPSBrbWFsbG9jKHNp emVvZih1MzIpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghdG1wKQotCQlyZXR1cm4gLUVOT01FTTsK LQl3ZGV2LT5od2J1c19vcHMtPmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0ID0gaW5kaXJl Y3RfcmVhZCh3ZGV2LCByZWcsIGFkZHIsIHRtcCwgc2l6ZW9mKHUzMikpOwotCSp2YWwgPSBsZTMy X3RvX2NwdSgqdG1wKTsKLQlfdHJhY2VfaW9faW5kX3JlYWQzMihyZWcsIGFkZHIsICp2YWwpOwot CXdkZXYtPmh3YnVzX29wcy0+dW5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCWtmcmVlKHRtcCk7 Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpbmRpcmVjdF93cml0ZTMyX2xvY2tlZChz dHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJlZywKLQkJCQkgICB1MzIgYWRkciwgdTMyIHZhbCkK LXsKLQlpbnQgcmV0OwotCV9fbGUzMiAqdG1wID0ga21hbGxvYyhzaXplb2YodTMyKSwgR0ZQX0tF Uk5FTCk7Ci0KLQlpZiAoIXRtcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JKnRtcCA9IGNwdV90b19s ZTMyKHZhbCk7Ci0Jd2Rldi0+aHdidXNfb3BzLT5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCXJl dCA9IGluZGlyZWN0X3dyaXRlKHdkZXYsIHJlZywgYWRkciwgdG1wLCBzaXplb2YodTMyKSk7Ci0J X3RyYWNlX2lvX2luZF93cml0ZTMyKHJlZywgYWRkciwgdmFsKTsKLQl3ZGV2LT5od2J1c19vcHMt PnVubG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlrZnJlZSh0bXApOwotCXJldHVybiByZXQ7Ci19 Ci0KLWludCB3ZnhfZGF0YV9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB2b2lkICpidWYsIHNp emVfdCBsZW4pCi17Ci0JaW50IHJldDsKLQotCVdBUk4oKGxvbmcpYnVmICYgMywgIiVzOiB1bmFs aWduZWQgYnVmZmVyIiwgX19mdW5jX18pOwotCXdkZXYtPmh3YnVzX29wcy0+bG9jayh3ZGV2LT5o d2J1c19wcml2KTsKLQlyZXQgPSB3ZGV2LT5od2J1c19vcHMtPmNvcHlfZnJvbV9pbyh3ZGV2LT5o d2J1c19wcml2LAotCQkJCQkgICAgV0ZYX1JFR19JTl9PVVRfUVVFVUUsIGJ1ZiwgbGVuKTsKLQlf dHJhY2VfaW9fcmVhZChXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pOwotCXdkZXYtPmh3 YnVzX29wcy0+dW5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCWlmIChyZXQpCi0JCWRldl9lcnIo d2Rldi0+ZGV2LCAiJXM6IGJ1cyBjb21tdW5pY2F0aW9uIGVycm9yOiAlZFxuIiwKLQkJCV9fZnVu Y19fLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3ZnhfZGF0YV93cml0ZShzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQotewotCWludCByZXQ7 Ci0KLQlXQVJOKChsb25nKWJ1ZiAmIDMsICIlczogdW5hbGlnbmVkIGJ1ZmZlciIsIF9fZnVuY19f KTsKLQl3ZGV2LT5od2J1c19vcHMtPmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0ID0gd2Rl di0+aHdidXNfb3BzLT5jb3B5X3RvX2lvKHdkZXYtPmh3YnVzX3ByaXYsCi0JCQkJCSAgV0ZYX1JF R19JTl9PVVRfUVVFVUUsIGJ1ZiwgbGVuKTsKLQlfdHJhY2VfaW9fd3JpdGUoV0ZYX1JFR19JTl9P VVRfUVVFVUUsIGJ1ZiwgbGVuKTsKLQl3ZGV2LT5od2J1c19vcHMtPnVubG9jayh3ZGV2LT5od2J1 c19wcml2KTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKHdkZXYtPmRldiwgIiVzOiBidXMgY29tbXVu aWNhdGlvbiBlcnJvcjogJWRcbiIsCi0JCQlfX2Z1bmNfXywgcmV0KTsKLQlyZXR1cm4gcmV0Owot fQotCi1pbnQgc3JhbV9idWZfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHZv aWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gaW5kaXJlY3RfcmVhZF9sb2NrZWQod2Rl diwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRyLCBidWYsIGxlbik7Ci19Ci0KLWludCBhaGJfYnVm X3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBs ZW4pCi17Ci0JcmV0dXJuIGluZGlyZWN0X3JlYWRfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQ T1JULCBhZGRyLCBidWYsIGxlbik7Ci19Ci0KLWludCBzcmFtX2J1Zl93cml0ZShzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiwgdTMyIGFkZHIsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQly ZXR1cm4gaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRk ciwgYnVmLCBsZW4pOwotfQotCi1pbnQgYWhiX2J1Zl93cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgdTMyIGFkZHIsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gaW5k aXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBhZGRyLCBidWYsIGxl bik7Ci19Ci0KLWludCBzcmFtX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRk ciwgdTMyICp2YWwpCi17Ci0JcmV0dXJuIGluZGlyZWN0X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZY X1JFR19TUkFNX0RQT1JULCBhZGRyLCB2YWwpOwotfQotCi1pbnQgYWhiX3JlZ19yZWFkKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdTMyICp2YWwpCi17Ci0JcmV0dXJuIGluZGlyZWN0 X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19BSEJfRFBPUlQsIGFkZHIsIHZhbCk7Ci19Ci0K LWludCBzcmFtX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHUzMiB2 YWwpCi17Ci0JcmV0dXJuIGluZGlyZWN0X3dyaXRlMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU1JB TV9EUE9SVCwgYWRkciwgdmFsKTsKLX0KLQotaW50IGFoYl9yZWdfd3JpdGUoc3RydWN0IHdmeF9k ZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCXJldHVybiBpbmRpcmVjdF93cml0ZTMy X2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0FIQl9EUE9SVCwgYWRkciwgdmFsKTsKLX0KLQotaW50IGNv bmZpZ19yZWdfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyICp2YWwpCi17Ci0JcmV0dXJu IHJlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIHZhbCk7Ci19Ci0KLWludCBjb25m aWdfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgdmFsKQotewotCXJldHVybiB3 cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTkZJRywgdmFsKTsKLX0KLQotaW50IGNvbmZp Z19yZWdfd3JpdGVfYml0cyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIG1hc2ssIHUzMiB2YWwp Ci17Ci0JcmV0dXJuIHdyaXRlMzJfYml0c19sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIG1h c2ssIHZhbCk7Ci19Ci0KLWludCBjb250cm9sX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCB1MzIgKnZhbCkKLXsKLQlyZXR1cm4gcmVhZDMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTlRS T0wsIHZhbCk7Ci19Ci0KLWludCBjb250cm9sX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgdTMyIHZhbCkKLXsKLQlyZXR1cm4gd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05U Uk9MLCB2YWwpOwotfQotCi1pbnQgY29udHJvbF9yZWdfd3JpdGVfYml0cyhzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwgdTMyIG1hc2ssIHUzMiB2YWwpCi17Ci0JcmV0dXJuIHdyaXRlMzJfYml0c19sb2Nr ZWQod2RldiwgV0ZYX1JFR19DT05UUk9MLCBtYXNrLCB2YWwpOwotfQotCi1pbnQgaWdwcl9yZWdf cmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGluZGV4LCB1MzIgKnZhbCkKLXsKLQlpbnQg cmV0OwotCi0JKnZhbCA9IH4wOyAvLyBOZXZlciByZXR1cm4gdW5kZWZpbmVkIHZhbHVlCi0JcmV0 ID0gd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TRVRfR0VOX1JfVywgSUdQUl9SVyB8IGlu ZGV4IDw8IDI0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCXJldCA9IHJlYWQzMl9sb2Nr ZWQod2RldiwgV0ZYX1JFR19TRVRfR0VOX1JfVywgdmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4g cmV0OwotCSp2YWwgJj0gSUdQUl9WQUxVRTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaWdwcl9y ZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBpbmRleCwgdTMyIHZhbCkKLXsKLQly ZXR1cm4gd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TRVRfR0VOX1JfVywgaW5kZXggPDwg MjQgfCB2YWwpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmggYi9k cml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MGI4ZTRmNzE1N2RmLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9od2lv LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogTG93LWxldmVsIEFQSS4KLSAqCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHly aWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2lmbmRlZiBXRlhfSFdJT19ICi0jZGVm aW5lIFdGWF9IV0lPX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXN0cnVjdCB3Znhf ZGV2OwotCi1pbnQgd2Z4X2RhdGFfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgdm9pZCAqYnVm LCBzaXplX3QgYnVmX2xlbik7Ci1pbnQgd2Z4X2RhdGFfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndk ZXYsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOwotCi1pbnQgc3JhbV9idWZfcmVh ZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7 Ci1pbnQgc3JhbV9idWZfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCBjb25z dCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwotCi1pbnQgYWhiX2J1Zl9yZWFkKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2LCB1MzIgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKLWludCBhaGJfYnVm X3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBz aXplX3QgbGVuKTsKLQotaW50IHNyYW1fcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUz MiBhZGRyLCB1MzIgKnZhbCk7Ci1pbnQgc3JhbV9yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndk ZXYsIHUzMiBhZGRyLCB1MzIgdmFsKTsKLQotaW50IGFoYl9yZWdfcmVhZChzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwgdTMyIGFkZHIsIHUzMiAqdmFsKTsKLWludCBhaGJfcmVnX3dyaXRlKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdTMyIHZhbCk7Ci0KLSNkZWZpbmUgQ0ZHX0VSUl9TUElf RlJBTUUgICAgICAgICAgMHgwMDAwMDAwMSAvLyBvbmx5IHdpdGggU1BJCi0jZGVmaW5lIENGR19F UlJfU0RJT19CVUZfTUlTTUFUQ0ggIDB4MDAwMDAwMDEgLy8gb25seSB3aXRoIFNESU8KLSNkZWZp bmUgQ0ZHX0VSUl9CVUZfVU5ERVJSVU4gICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBDRkdfRVJS X0RBVEFfSU5fVE9PX0xBUkdFICAweDAwMDAwMDA0Ci0jZGVmaW5lIENGR19FUlJfSE9TVF9OT19P VVRfUVVFVUUgIDB4MDAwMDAwMDgKLSNkZWZpbmUgQ0ZHX0VSUl9CVUZfT1ZFUlJVTiAgICAgICAg MHgwMDAwMDAxMAotI2RlZmluZSBDRkdfRVJSX0RBVEFfT1VUX1RPT19MQVJHRSAweDAwMDAwMDIw Ci0jZGVmaW5lIENGR19FUlJfSE9TVF9OT19JTl9RVUVVRSAgIDB4MDAwMDAwNDAKLSNkZWZpbmUg Q0ZHX0VSUl9IT1NUX0NSQ19NSVNTICAgICAgMHgwMDAwMDA4MCAvLyBvbmx5IHdpdGggU0RJTwot I2RlZmluZSBDRkdfU1BJX0lHTk9SRV9DUyAgICAgICAgICAweDAwMDAwMDgwIC8vIG9ubHkgd2l0 aCBTUEkKLSNkZWZpbmUgQ0ZHX0JZVEVfT1JERVJfTUFTSyAgICAgICAgMHgwMDAwMDMwMCAvLyBv bmx5IHdyaXRhYmxlIHdpdGggU1BJCi0jZGVmaW5lICAgICBDRkdfQllURV9PUkRFUl9CQURDICAg IDB4MDAwMDAwMDAKLSNkZWZpbmUgICAgIENGR19CWVRFX09SREVSX0RDQkEgICAgMHgwMDAwMDEw MAotI2RlZmluZSAgICAgQ0ZHX0JZVEVfT1JERVJfQUJDRCAgICAweDAwMDAwMjAwIC8vIFNESU8g YWx3YXlzIHVzZSB0aGlzIHZhbHVlCi0jZGVmaW5lIENGR19ESVJFQ1RfQUNDRVNTX01PREUgICAg IDB4MDAwMDA0MDAKLSNkZWZpbmUgQ0ZHX1BSRUZFVENIX0FIQiAgICAgICAgICAgMHgwMDAwMDgw MAotI2RlZmluZSBDRkdfRElTQUJMRV9DUFVfQ0xLICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5l IENGR19QUkVGRVRDSF9TUkFNICAgICAgICAgIDB4MDAwMDIwMDAKLSNkZWZpbmUgQ0ZHX0NQVV9S RVNFVCAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBDRkdfU0RJT19ESVNBQkxFX0lS USAgICAgICAweDAwMDA4MDAwIC8vIG9ubHkgd2l0aCBTRElPCi0jZGVmaW5lIENGR19JUlFfRU5B QkxFX0RBVEEgICAgICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgQ0ZHX0lSUV9FTkFCTEVfV1JEWSAg ICAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBDRkdfQ0xLX1JJU0VfRURHRSAgICAgICAgICAweDAw MDQwMDAwCi0jZGVmaW5lIENGR19TRElPX0RJU0FCTEVfQ1JDX0NISyAgIDB4MDAwODAwMDAgLy8g b25seSB3aXRoIFNESU8KLSNkZWZpbmUgQ0ZHX1JFU0VSVkVEICAgICAgICAgICAgICAgMHgwMEYw MDAwMAotI2RlZmluZSBDRkdfREVWSUNFX0lEX01BSk9SICAgICAgICAweDA3MDAwMDAwCi0jZGVm aW5lIENGR19ERVZJQ0VfSURfUkVTRVJWRUQgICAgIDB4NzgwMDAwMDAKLSNkZWZpbmUgQ0ZHX0RF VklDRV9JRF9UWVBFICAgICAgICAgMHg4MDAwMDAwMAotaW50IGNvbmZpZ19yZWdfcmVhZChzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiwgdTMyICp2YWwpOwotaW50IGNvbmZpZ19yZWdfd3JpdGUoc3RydWN0 IHdmeF9kZXYgKndkZXYsIHUzMiB2YWwpOwotaW50IGNvbmZpZ19yZWdfd3JpdGVfYml0cyhzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIG1hc2ssIHUzMiB2YWwpOwotCi0jZGVmaW5lIENUUkxfTkVY VF9MRU5fTUFTSyAgIDB4MDAwMDBGRkYKLSNkZWZpbmUgQ1RSTF9XTEFOX1dBS0VVUCAgICAgMHgw MDAwMTAwMAotI2RlZmluZSBDVFJMX1dMQU5fUkVBRFkgICAgICAweDAwMDAyMDAwCi1pbnQgY29u dHJvbF9yZWdfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyICp2YWwpOwotaW50IGNvbnRy b2xfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgdmFsKTsKLWludCBjb250cm9s X3JlZ193cml0ZV9iaXRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbCk7 Ci0KLSNkZWZpbmUgSUdQUl9SVyAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIElHUFJfSU5E RVggICAgICAgMHg3RjAwMDAwMAotI2RlZmluZSBJR1BSX1ZBTFVFICAgICAgIDB4MDBGRkZGRkYK LWludCBpZ3ByX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgsIHUzMiAq dmFsKTsKLWludCBpZ3ByX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGluZGV4 LCB1MzIgdmFsKTsKLQotI2VuZGlmIC8qIFdGWF9IV0lPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvc3RhZ2luZy93Zngva2V5LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWI4MmJlZDRjMWIuLjAwMDAwMDAwMDAwMAotLS0gYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAK LS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBLZXkgbWFu YWdlbWVudCByZWxhdGVkIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAy MCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1Qt RXJpY3Nzb24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8 bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJrZXkuaCIKLSNpbmNsdWRlICJ3ZnguaCIKLSNp bmNsdWRlICJoaWZfdHhfbWliLmgiCi0KLXN0YXRpYyBpbnQgd2Z4X2FsbG9jX2tleShzdHJ1Y3Qg d2Z4X2RldiAqd2RldikKLXsKLQlpbnQgaWR4OwotCi0JaWR4ID0gZmZzKH53ZGV2LT5rZXlfbWFw KSAtIDE7Ci0JaWYgKGlkeCA8IDAgfHwgaWR4ID49IE1BWF9LRVlfRU5UUklFUykKLQkJcmV0dXJu IC0xOwotCi0Jd2Rldi0+a2V5X21hcCB8PSBCSVQoaWR4KTsKLQlyZXR1cm4gaWR4OwotfQotCi1z dGF0aWMgdm9pZCB3ZnhfZnJlZV9rZXkoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBpZHgpCi17 Ci0JV0FSTighKHdkZXYtPmtleV9tYXAgJiBCSVQoaWR4KSksICJpbmNvbnNpc3RlbnQga2V5IGFs bG9jYXRpb24iKTsKLQl3ZGV2LT5rZXlfbWFwICY9IH5CSVQoaWR4KTsKLX0KLQotc3RhdGljIHU4 IGZpbGxfd2VwX3BhaXIoc3RydWN0IGhpZl93ZXBfcGFpcndpc2Vfa2V5ICptc2csCi0JCQkgICAg IHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgdTggKnBlZXJfYWRkcikKLXsKLQlXQVJO KGtleS0+a2V5bGVuID4gc2l6ZW9mKG1zZy0+a2V5X2RhdGEpLCAiaW5jb25zaXN0ZW50IGRhdGEi KTsKLQltc2ctPmtleV9sZW5ndGggPSBrZXktPmtleWxlbjsKLQltZW1jcHkobXNnLT5rZXlfZGF0 YSwga2V5LT5rZXksIGtleS0+a2V5bGVuKTsKLQlldGhlcl9hZGRyX2NvcHkobXNnLT5wZWVyX2Fk ZHJlc3MsIHBlZXJfYWRkcik7Ci0JcmV0dXJuIEhJRl9LRVlfVFlQRV9XRVBfUEFJUldJU0U7Ci19 Ci0KLXN0YXRpYyB1OCBmaWxsX3dlcF9ncm91cChzdHJ1Y3QgaGlmX3dlcF9ncm91cF9rZXkgKm1z ZywKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKLXsKLQlXQVJOKGtl eS0+a2V5bGVuID4gc2l6ZW9mKG1zZy0+a2V5X2RhdGEpLCAiaW5jb25zaXN0ZW50IGRhdGEiKTsK LQltc2ctPmtleV9pZCA9IGtleS0+a2V5aWR4OwotCW1zZy0+a2V5X2xlbmd0aCA9IGtleS0+a2V5 bGVuOwotCW1lbWNweShtc2ctPmtleV9kYXRhLCBrZXktPmtleSwga2V5LT5rZXlsZW4pOwotCXJl dHVybiBISUZfS0VZX1RZUEVfV0VQX0RFRkFVTFQ7Ci19Ci0KLXN0YXRpYyB1OCBmaWxsX3RraXBf cGFpcihzdHJ1Y3QgaGlmX3RraXBfcGFpcndpc2Vfa2V5ICptc2csCi0JCQkgICAgICBzdHJ1Y3Qg aWVlZTgwMjExX2tleV9jb25mICprZXksIHU4ICpwZWVyX2FkZHIpCi17Ci0JdTggKmtleWJ1ZiA9 IGtleS0+a2V5OwotCi0JV0FSTihrZXktPmtleWxlbiAhPSBzaXplb2YobXNnLT50a2lwX2tleV9k YXRhKQotCQkJICAgICsgc2l6ZW9mKG1zZy0+dHhfbWljX2tleSkKLQkJCSAgICArIHNpemVvZiht c2ctPnJ4X21pY19rZXkpLCAiaW5jb25zaXN0ZW50IGRhdGEiKTsKLQltZW1jcHkobXNnLT50a2lw X2tleV9kYXRhLCBrZXlidWYsIHNpemVvZihtc2ctPnRraXBfa2V5X2RhdGEpKTsKLQlrZXlidWYg Kz0gc2l6ZW9mKG1zZy0+dGtpcF9rZXlfZGF0YSk7Ci0JbWVtY3B5KG1zZy0+dHhfbWljX2tleSwg a2V5YnVmLCBzaXplb2YobXNnLT50eF9taWNfa2V5KSk7Ci0Ja2V5YnVmICs9IHNpemVvZihtc2ct PnR4X21pY19rZXkpOwotCW1lbWNweShtc2ctPnJ4X21pY19rZXksIGtleWJ1Ziwgc2l6ZW9mKG1z Zy0+cnhfbWljX2tleSkpOwotCWV0aGVyX2FkZHJfY29weShtc2ctPnBlZXJfYWRkcmVzcywgcGVl cl9hZGRyKTsKLQlyZXR1cm4gSElGX0tFWV9UWVBFX1RLSVBfUEFJUldJU0U7Ci19Ci0KLXN0YXRp YyB1OCBmaWxsX3RraXBfZ3JvdXAoc3RydWN0IGhpZl90a2lwX2dyb3VwX2tleSAqbXNnLAotCQkJ ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwKLQkJCSAgICAgICBzdHJ1Y3Qg aWVlZTgwMjExX2tleV9zZXEgKnNlcSwKLQkJCSAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlm dHlwZSkKLXsKLQl1OCAqa2V5YnVmID0ga2V5LT5rZXk7Ci0KLQlXQVJOKGtleS0+a2V5bGVuICE9 IHNpemVvZihtc2ctPnRraXBfa2V5X2RhdGEpCi0JCQkgICAgKyAyICogc2l6ZW9mKG1zZy0+cnhf bWljX2tleSksICJpbmNvbnNpc3RlbnQgZGF0YSIpOwotCW1zZy0+a2V5X2lkID0ga2V5LT5rZXlp ZHg7Ci0JbWVtY3B5KG1zZy0+cnhfc2VxdWVuY2VfY291bnRlciwKLQkgICAgICAgJnNlcS0+dGtp cC5pdjE2LCBzaXplb2Yoc2VxLT50a2lwLml2MTYpKTsKLQltZW1jcHkobXNnLT5yeF9zZXF1ZW5j ZV9jb3VudGVyICsgc2l6ZW9mKHUxNiksCi0JICAgICAgICZzZXEtPnRraXAuaXYzMiwgc2l6ZW9m KHNlcS0+dGtpcC5pdjMyKSk7Ci0JbWVtY3B5KG1zZy0+dGtpcF9rZXlfZGF0YSwga2V5YnVmLCBz aXplb2YobXNnLT50a2lwX2tleV9kYXRhKSk7Ci0Ja2V5YnVmICs9IHNpemVvZihtc2ctPnRraXBf a2V5X2RhdGEpOwotCWlmIChpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCS8vIFVzZSBU eCBNSUMgS2V5Ci0JCW1lbWNweShtc2ctPnJ4X21pY19rZXksIGtleWJ1ZiArIDAsIHNpemVvZiht c2ctPnJ4X21pY19rZXkpKTsKLQllbHNlCi0JCS8vIFVzZSBSeCBNSUMgS2V5Ci0JCW1lbWNweSht c2ctPnJ4X21pY19rZXksIGtleWJ1ZiArIDgsIHNpemVvZihtc2ctPnJ4X21pY19rZXkpKTsKLQly ZXR1cm4gSElGX0tFWV9UWVBFX1RLSVBfR1JPVVA7Ci19Ci0KLXN0YXRpYyB1OCBmaWxsX2NjbXBf cGFpcihzdHJ1Y3QgaGlmX2Flc19wYWlyd2lzZV9rZXkgKm1zZywKLQkJCSAgICAgIHN0cnVjdCBp ZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgdTggKnBlZXJfYWRkcikKLXsKLQlXQVJOKGtleS0+a2V5 bGVuICE9IHNpemVvZihtc2ctPmFlc19rZXlfZGF0YSksICJpbmNvbnNpc3RlbnQgZGF0YSIpOwot CWV0aGVyX2FkZHJfY29weShtc2ctPnBlZXJfYWRkcmVzcywgcGVlcl9hZGRyKTsKLQltZW1jcHko bXNnLT5hZXNfa2V5X2RhdGEsIGtleS0+a2V5LCBrZXktPmtleWxlbik7Ci0JcmV0dXJuIEhJRl9L RVlfVFlQRV9BRVNfUEFJUldJU0U7Ci19Ci0KLXN0YXRpYyB1OCBmaWxsX2NjbXBfZ3JvdXAoc3Ry dWN0IGhpZl9hZXNfZ3JvdXBfa2V5ICptc2csCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9r ZXlfY29uZiAqa2V5LAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X3NlcSAqc2VxKQot ewotCVdBUk4oa2V5LT5rZXlsZW4gIT0gc2l6ZW9mKG1zZy0+YWVzX2tleV9kYXRhKSwgImluY29u c2lzdGVudCBkYXRhIik7Ci0JbWVtY3B5KG1zZy0+YWVzX2tleV9kYXRhLCBrZXktPmtleSwga2V5 LT5rZXlsZW4pOwotCW1lbWNweShtc2ctPnJ4X3NlcXVlbmNlX2NvdW50ZXIsIHNlcS0+Y2NtcC5w biwgc2l6ZW9mKHNlcS0+Y2NtcC5wbikpOwotCW1lbXJldmVyc2UobXNnLT5yeF9zZXF1ZW5jZV9j b3VudGVyLCBzaXplb2Yoc2VxLT5jY21wLnBuKSk7Ci0JbXNnLT5rZXlfaWQgPSBrZXktPmtleWlk eDsKLQlyZXR1cm4gSElGX0tFWV9UWVBFX0FFU19HUk9VUDsKLX0KLQotc3RhdGljIHU4IGZpbGxf c21zNF9wYWlyKHN0cnVjdCBoaWZfd2FwaV9wYWlyd2lzZV9rZXkgKm1zZywKLQkJCSAgICAgIHN0 cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgdTggKnBlZXJfYWRkcikKLXsKLQl1OCAqa2V5 YnVmID0ga2V5LT5rZXk7Ci0KLQlXQVJOKGtleS0+a2V5bGVuICE9IHNpemVvZihtc2ctPndhcGlf a2V5X2RhdGEpCi0JCQkgICAgKyBzaXplb2YobXNnLT5taWNfa2V5X2RhdGEpLCAiaW5jb25zaXN0 ZW50IGRhdGEiKTsKLQlldGhlcl9hZGRyX2NvcHkobXNnLT5wZWVyX2FkZHJlc3MsIHBlZXJfYWRk cik7Ci0JbWVtY3B5KG1zZy0+d2FwaV9rZXlfZGF0YSwga2V5YnVmLCBzaXplb2YobXNnLT53YXBp X2tleV9kYXRhKSk7Ci0Ja2V5YnVmICs9IHNpemVvZihtc2ctPndhcGlfa2V5X2RhdGEpOwotCW1l bWNweShtc2ctPm1pY19rZXlfZGF0YSwga2V5YnVmLCBzaXplb2YobXNnLT5taWNfa2V5X2RhdGEp KTsKLQltc2ctPmtleV9pZCA9IGtleS0+a2V5aWR4OwotCXJldHVybiBISUZfS0VZX1RZUEVfV0FQ SV9QQUlSV0lTRTsKLX0KLQotc3RhdGljIHU4IGZpbGxfc21zNF9ncm91cChzdHJ1Y3QgaGlmX3dh cGlfZ3JvdXBfa2V5ICptc2csCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAq a2V5KQotewotCXU4ICprZXlidWYgPSBrZXktPmtleTsKLQotCVdBUk4oa2V5LT5rZXlsZW4gIT0g c2l6ZW9mKG1zZy0+d2FwaV9rZXlfZGF0YSkKLQkJCSAgICArIHNpemVvZihtc2ctPm1pY19rZXlf ZGF0YSksICJpbmNvbnNpc3RlbnQgZGF0YSIpOwotCW1lbWNweShtc2ctPndhcGlfa2V5X2RhdGEs IGtleWJ1Ziwgc2l6ZW9mKG1zZy0+d2FwaV9rZXlfZGF0YSkpOwotCWtleWJ1ZiArPSBzaXplb2Yo bXNnLT53YXBpX2tleV9kYXRhKTsKLQltZW1jcHkobXNnLT5taWNfa2V5X2RhdGEsIGtleWJ1Ziwg c2l6ZW9mKG1zZy0+bWljX2tleV9kYXRhKSk7Ci0JbXNnLT5rZXlfaWQgPSBrZXktPmtleWlkeDsK LQlyZXR1cm4gSElGX0tFWV9UWVBFX1dBUElfR1JPVVA7Ci19Ci0KLXN0YXRpYyB1OCBmaWxsX2Fl c19jbWFjX2dyb3VwKHN0cnVjdCBoaWZfaWd0a19ncm91cF9rZXkgKm1zZywKLQkJCQkgICBzdHJ1 Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9rZXlf c2VxICpzZXEpCi17Ci0JV0FSTihrZXktPmtleWxlbiAhPSBzaXplb2YobXNnLT5pZ3RrX2tleV9k YXRhKSwgImluY29uc2lzdGVudCBkYXRhIik7Ci0JbWVtY3B5KG1zZy0+aWd0a19rZXlfZGF0YSwg a2V5LT5rZXksIGtleS0+a2V5bGVuKTsKLQltZW1jcHkobXNnLT5pcG4sIHNlcS0+YWVzX2NtYWMu cG4sIHNpemVvZihzZXEtPmFlc19jbWFjLnBuKSk7Ci0JbWVtcmV2ZXJzZShtc2ctPmlwbiwgc2l6 ZW9mKHNlcS0+YWVzX2NtYWMucG4pKTsKLQltc2ctPmtleV9pZCA9IGtleS0+a2V5aWR4OwotCXJl dHVybiBISUZfS0VZX1RZUEVfSUdUS19HUk9VUDsKLX0KLQotc3RhdGljIGludCB3ZnhfYWRkX2tl eShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAg ICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKLXsKLQlpbnQgcmV0OwotCXN0cnVj dCBoaWZfcmVxX2FkZF9rZXkgayA9IHsgfTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9zZXEgc2Vx OwotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3ZpZi0+d2RldjsKLQlpbnQgaWR4ID0gd2Z4X2Fs bG9jX2tleSh3dmlmLT53ZGV2KTsKLQlib29sIHBhaXJ3aXNlID0ga2V5LT5mbGFncyAmIElFRUU4 MDIxMV9LRVlfRkxBR19QQUlSV0lTRTsKLQotCVdBUk4oa2V5LT5mbGFncyAmIElFRUU4MDIxMV9L RVlfRkxBR19QQUlSV0lTRSAmJiAhc3RhLCAiaW5jb25zaXN0ZW50IGRhdGEiKTsKLQlpZWVlODAy MTFfZ2V0X2tleV9yeF9zZXEoa2V5LCAwLCAmc2VxKTsKLQlpZiAoaWR4IDwgMCkKLQkJcmV0dXJu IC1FSU5WQUw7Ci0Jay5pbnRfaWQgPSB3dmlmLT5pZDsKLQlrLmVudHJ5X2luZGV4ID0gaWR4Owot CWlmIChrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fAotCSAgICBrZXkt PmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpIHsKLQkJaWYgKHBhaXJ3aXNlKQot CQkJay50eXBlID0gZmlsbF93ZXBfcGFpcigmay5rZXkud2VwX3BhaXJ3aXNlX2tleSwga2V5LAot CQkJCQkgICAgICAgc3RhLT5hZGRyKTsKLQkJZWxzZQotCQkJay50eXBlID0gZmlsbF93ZXBfZ3Jv dXAoJmsua2V5LndlcF9ncm91cF9rZXksIGtleSk7Ci0JfSBlbHNlIGlmIChrZXktPmNpcGhlciA9 PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7Ci0JCWlmIChwYWlyd2lzZSkKLQkJCWsudHlwZSA9 IGZpbGxfdGtpcF9wYWlyKCZrLmtleS50a2lwX3BhaXJ3aXNlX2tleSwga2V5LAotCQkJCQkJc3Rh LT5hZGRyKTsKLQkJZWxzZQotCQkJay50eXBlID0gZmlsbF90a2lwX2dyb3VwKCZrLmtleS50a2lw X2dyb3VwX2tleSwga2V5LAotCQkJCQkJICZzZXEsIHd2aWYtPnZpZi0+dHlwZSk7Ci0JfSBlbHNl IGlmIChrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QKSB7Ci0JCWlmIChwYWly d2lzZSkKLQkJCWsudHlwZSA9IGZpbGxfY2NtcF9wYWlyKCZrLmtleS5hZXNfcGFpcndpc2Vfa2V5 LCBrZXksCi0JCQkJCQlzdGEtPmFkZHIpOwotCQllbHNlCi0JCQlrLnR5cGUgPSBmaWxsX2NjbXBf Z3JvdXAoJmsua2V5LmFlc19ncm91cF9rZXksIGtleSwKLQkJCQkJCSAmc2VxKTsKLQl9IGVsc2Ug aWYgKGtleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1NNUzQpIHsKLQkJaWYgKHBhaXJ3 aXNlKQotCQkJay50eXBlID0gZmlsbF9zbXM0X3BhaXIoJmsua2V5LndhcGlfcGFpcndpc2Vfa2V5 LCBrZXksCi0JCQkJCQlzdGEtPmFkZHIpOwotCQllbHNlCi0JCQlrLnR5cGUgPSBmaWxsX3NtczRf Z3JvdXAoJmsua2V5LndhcGlfZ3JvdXBfa2V5LCBrZXkpOwotCX0gZWxzZSBpZiAoa2V5LT5jaXBo ZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMpIHsKLQkJay50eXBlID0gZmlsbF9hZXNf Y21hY19ncm91cCgmay5rZXkuaWd0a19ncm91cF9rZXksIGtleSwgJnNlcSk7Ci0JCWtleS0+Zmxh Z3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUU7Ci0JfSBlbHNlIHsKLQkJZGV2 X3dhcm4od2Rldi0+ZGV2LCAidW5zdXBwb3J0ZWQga2V5IHR5cGUgJWRcbiIsIGtleS0+Y2lwaGVy KTsKLQkJd2Z4X2ZyZWVfa2V5KHdkZXYsIGlkeCk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9 Ci0JcmV0ID0gaGlmX2FkZF9rZXkod2RldiwgJmspOwotCWlmIChyZXQpIHsKLQkJd2Z4X2ZyZWVf a2V5KHdkZXYsIGlkeCk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0Ja2V5LT5mbGFncyB8 PSBJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFIHwKLQkJICAgICAgSUVFRTgwMjExX0tF WV9GTEFHX1JFU0VSVkVfVEFJTFJPT007Ci0Ja2V5LT5od19rZXlfaWR4ID0gaWR4OwotCXJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IHdmeF9yZW1vdmVfa2V5KHN0cnVjdCB3ZnhfdmlmICp3dmlm LCBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCi17Ci0JV0FSTihrZXktPmh3X2tleV9p ZHggPj0gTUFYX0tFWV9FTlRSSUVTLCAiY29ycnVwdGVkIGh3X2tleV9pZHgiKTsKLQl3ZnhfZnJl ZV9rZXkod3ZpZi0+d2Rldiwga2V5LT5od19rZXlfaWR4KTsKLQlyZXR1cm4gaGlmX3JlbW92ZV9r ZXkod3ZpZi0+d2Rldiwga2V5LT5od19rZXlfaWR4KTsKLX0KLQotaW50IHdmeF9zZXRfa2V5KHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJc3RydWN0IGll ZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJc3RydWN0IGll ZWU4MDIxMV9rZXlfY29uZiAqa2V5KQotewotCWludCByZXQgPSAtRU9QTk9UU1VQUDsKLQlzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0KLQlt dXRleF9sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsKLQlpZiAoY21kID09IFNFVF9LRVkp Ci0JCXJldCA9IHdmeF9hZGRfa2V5KHd2aWYsIHN0YSwga2V5KTsKLQlpZiAoY21kID09IERJU0FC TEVfS0VZKQotCQlyZXQgPSB3ZnhfcmVtb3ZlX2tleSh3dmlmLCBrZXkpOwotCW11dGV4X3VubG9j aygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9rZXkuaCBiL2RyaXZlcnMvc3RhZ2luZy93Zngva2V5LmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwYTQ0ZDBjYTM1ZS4uMDAwMDAwMDAwMDAw Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93Zngva2V5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCAr MCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgot ICogSW1wbGVtZW50YXRpb24gb2YgbWFjODAyMTEgQVBJLgotICoKLSAqIENvcHlyaWdodCAoYykg MjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAy MDEwLCBTVC1Fcmljc3NvbgotICovCi0jaWZuZGVmIFdGWF9LRVlfSAotI2RlZmluZSBXRlhfS0VZ X0gKLQotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi1zdHJ1Y3Qgd2Z4X2RldjsKLXN0cnVj dCB3ZnhfdmlmOwotCi1pbnQgd2Z4X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVu dW0gc2V0X2tleV9jbWQgY21kLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3Qg aWVlZTgwMjExX3N0YSAqc3RhLAotCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOwot Ci0jZW5kaWYgLyogV0ZYX1NUQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4 L21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBlN2JjMTk4ODEyNGEuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDQ5MCArMCwwIEBACi0vLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogRGV2aWNlIHByb2JlIGFuZCBy ZWdpc3Rlci4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0 b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqIENvcHly aWdodCAoYykgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4K LSAqIENvcHlyaWdodCAoYykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp ZGlhcnkoLWllcykuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSwgQ2hyaXN0aWFuIExhbXBh cnRlciA8Y2h1bmtlZXlAd2ViLmRlPgotICogQ29weXJpZ2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1 IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IEpl YW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdtYWlsLmNvbT4sIGV0IGFsLgotICovCi0jaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51 eC9vZl9uZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8 bGludXgvbW1jL3NkaW9fZnVuYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNs dWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0K LSNpbmNsdWRlICJtYWluLmgiCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAiZndpby5oIgot I2luY2x1ZGUgImh3aW8uaCIKLSNpbmNsdWRlICJidXMuaCIKLSNpbmNsdWRlICJiaC5oIgotI2lu Y2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgImtleS5oIgotI2luY2x1ZGUgInNjYW4uaCIKLSNpbmNs dWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImRhdGFfdHguaCIKLSNpbmNsdWRlICJoaWZfdHhfbWli LmgiCi0jaW5jbHVkZSAiaGlmX2FwaV9jbWQuaCIKLQotI2RlZmluZSBXRlhfUERTX01BWF9TSVpF IDE1MDAKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJTaWxpY29uIExhYnMgODAyLjExIFdpcmVsZXNz IExBTiBkcml2ZXIgZm9yIFdGeCIpOwotTU9EVUxFX0FVVEhPUigiSsOpcsO0bWUgUG91aWxsZXIg PGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwot Ci0jZGVmaW5lIFJBVEVUQUJfRU5UKF9yYXRlLCBfcmF0ZWlkLCBfZmxhZ3MpIHsgXAotCS5iaXRy YXRlICA9IChfcmF0ZSksICAgXAotCS5od192YWx1ZSA9IChfcmF0ZWlkKSwgXAotCS5mbGFncyAg ICA9IChfZmxhZ3MpLCAgXAotfQotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHdmeF9y YXRlc1tdID0gewotCVJBVEVUQUJfRU5UKDEwLCAgMCwgIDApLAotCVJBVEVUQUJfRU5UKDIwLCAg MSwgIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKLQlSQVRFVEFCX0VOVCg1NSwgIDIs ICBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCi0JUkFURVRBQl9FTlQoMTEwLCAzLCAg SUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLAotCVJBVEVUQUJfRU5UKDYwLCAgNiwgIDAp LAotCVJBVEVUQUJfRU5UKDkwLCAgNywgIDApLAotCVJBVEVUQUJfRU5UKDEyMCwgOCwgIDApLAot CVJBVEVUQUJfRU5UKDE4MCwgOSwgIDApLAotCVJBVEVUQUJfRU5UKDI0MCwgMTAsIDApLAotCVJB VEVUQUJfRU5UKDM2MCwgMTEsIDApLAotCVJBVEVUQUJfRU5UKDQ4MCwgMTIsIDApLAotCVJBVEVU QUJfRU5UKDU0MCwgMTMsIDApLAotfTsKLQotI2RlZmluZSBDSEFOMkcoX2NoYW5uZWwsIF9mcmVx LCBfZmxhZ3MpIHsgXAotCS5iYW5kID0gTkw4MDIxMV9CQU5EXzJHSFosIFwKLQkuY2VudGVyX2Zy ZXEgPSAoX2ZyZXEpLCAgICBcCi0JLmh3X3ZhbHVlID0gKF9jaGFubmVsKSwgICAgXAotCS5mbGFn cyA9IChfZmxhZ3MpLCAgICAgICAgIFwKLQkubWF4X2FudGVubmFfZ2FpbiA9IDAsICAgICBcCi0J Lm1heF9wb3dlciA9IDMwLCAgICAgICAgICAgXAotfQotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIx MV9jaGFubmVsIHdmeF8yZ2h6X2NoYW50YWJsZVtdID0gewotCUNIQU4yRygxLCAgMjQxMiwgMCks Ci0JQ0hBTjJHKDIsICAyNDE3LCAwKSwKLQlDSEFOMkcoMywgIDI0MjIsIDApLAotCUNIQU4yRyg0 LCAgMjQyNywgMCksCi0JQ0hBTjJHKDUsICAyNDMyLCAwKSwKLQlDSEFOMkcoNiwgIDI0MzcsIDAp LAotCUNIQU4yRyg3LCAgMjQ0MiwgMCksCi0JQ0hBTjJHKDgsICAyNDQ3LCAwKSwKLQlDSEFOMkco OSwgIDI0NTIsIDApLAotCUNIQU4yRygxMCwgMjQ1NywgMCksCi0JQ0hBTjJHKDExLCAyNDYyLCAw KSwKLQlDSEFOMkcoMTIsIDI0NjcsIDApLAotCUNIQU4yRygxMywgMjQ3MiwgMCksCi0JQ0hBTjJH KDE0LCAyNDg0LCAwKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBv cnRlZF9iYW5kIHdmeF9iYW5kXzJnaHogPSB7Ci0JLmNoYW5uZWxzID0gd2Z4XzJnaHpfY2hhbnRh YmxlLAotCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRSh3ZnhfMmdoel9jaGFudGFibGUpLAotCS5i aXRyYXRlcyA9IHdmeF9yYXRlcywKLQkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUod2Z4X3JhdGVz KSwKLQkuaHRfY2FwID0gewotCQkvLyBSZWNlaXZlIGNhcHMKLQkJLmNhcCA9IElFRUU4MDIxMV9I VF9DQVBfR1JOX0ZMRCB8IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwIHwKLQkJICAgICAgIElFRUU4 MDIxMV9IVF9DQVBfTUFYX0FNU0RVIHwKLQkJICAgICAgICgxIDw8IElFRUU4MDIxMV9IVF9DQVBf UlhfU1RCQ19TSElGVCksCi0JCS5odF9zdXBwb3J0ZWQgPSAxLAotCQkuYW1wZHVfZmFjdG9yID0g SUVFRTgwMjExX0hUX01BWF9BTVBEVV8xNkssCi0JCS5hbXBkdV9kZW5zaXR5ID0gSUVFRTgwMjEx X0hUX01QRFVfREVOU0lUWV9OT05FLAotCQkubWNzID0gewotCQkJLnJ4X21hc2sgPSB7IDB4RkYg fSwgLy8gTUNTMCB0byBNQ1M3Ci0JCQkucnhfaGlnaGVzdCA9IGNwdV90b19sZTE2KDcyKSwKLQkJ CS50eF9wYXJhbXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQsCi0JCX0sCi0JfSwKLX07 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IHdkZXZfaWZhY2Vf bGltaXRzW10gPSB7Ci0JeyAubWF4ID0gMSwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NU QVRJT04pIH0sCi0JeyAubWF4ID0gMSwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FQKSB9 LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfY29tYmluYXRpb24g d2Z4X2lmYWNlX2NvbWJpbmF0aW9uc1tdID0gewotCXsKLQkJLm51bV9kaWZmZXJlbnRfY2hhbm5l bHMgPSAyLAotCQkubWF4X2ludGVyZmFjZXMgPSAyLAotCQkubGltaXRzID0gd2Rldl9pZmFjZV9s aW1pdHMsCi0JCS5uX2xpbWl0cyA9IEFSUkFZX1NJWkUod2Rldl9pZmFjZV9saW1pdHMpLAotCX0K LX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyB3Znhfb3BzID0gewotCS5z dGFydAkJCT0gd2Z4X3N0YXJ0LAotCS5zdG9wCQkJPSB3Znhfc3RvcCwKLQkuYWRkX2ludGVyZmFj ZQkJPSB3ZnhfYWRkX2ludGVyZmFjZSwKLQkucmVtb3ZlX2ludGVyZmFjZQk9IHdmeF9yZW1vdmVf aW50ZXJmYWNlLAotCS5jb25maWcgICAgICAgICAgICAgICAgID0gd2Z4X2NvbmZpZywKLQkudHgJ CQk9IHdmeF90eCwKLQkuam9pbl9pYnNzCQk9IHdmeF9qb2luX2lic3MsCi0JLmxlYXZlX2lic3MJ CT0gd2Z4X2xlYXZlX2lic3MsCi0JLmNvbmZfdHgJCT0gd2Z4X2NvbmZfdHgsCi0JLmh3X3NjYW4J CT0gd2Z4X2h3X3NjYW4sCi0JLmNhbmNlbF9od19zY2FuCQk9IHdmeF9jYW5jZWxfaHdfc2NhbiwK LQkuc3RhcnRfYXAJCT0gd2Z4X3N0YXJ0X2FwLAotCS5zdG9wX2FwCQk9IHdmeF9zdG9wX2FwLAot CS5zdGFfYWRkCQk9IHdmeF9zdGFfYWRkLAotCS5zdGFfcmVtb3ZlCQk9IHdmeF9zdGFfcmVtb3Zl LAotCS5zZXRfdGltCQk9IHdmeF9zZXRfdGltLAotCS5zZXRfa2V5CQk9IHdmeF9zZXRfa2V5LAot CS5zZXRfcnRzX3RocmVzaG9sZAk9IHdmeF9zZXRfcnRzX3RocmVzaG9sZCwKLQkuc2V0X2RlZmF1 bHRfdW5pY2FzdF9rZXkgPSB3Znhfc2V0X2RlZmF1bHRfdW5pY2FzdF9rZXksCi0JLmJzc19pbmZv X2NoYW5nZWQJPSB3ZnhfYnNzX2luZm9fY2hhbmdlZCwKLQkuY29uZmlndXJlX2ZpbHRlcgk9IHdm eF9jb25maWd1cmVfZmlsdGVyLAotCS5hbXBkdV9hY3Rpb24JCT0gd2Z4X2FtcGR1X2FjdGlvbiwK LQkuZmx1c2gJCQk9IHdmeF9mbHVzaCwKLQkuYWRkX2NoYW5jdHgJCT0gd2Z4X2FkZF9jaGFuY3R4 LAotCS5yZW1vdmVfY2hhbmN0eAkJPSB3ZnhfcmVtb3ZlX2NoYW5jdHgsCi0JLmNoYW5nZV9jaGFu Y3R4CQk9IHdmeF9jaGFuZ2VfY2hhbmN0eCwKLQkuYXNzaWduX3ZpZl9jaGFuY3R4CT0gd2Z4X2Fz c2lnbl92aWZfY2hhbmN0eCwKLQkudW5hc3NpZ25fdmlmX2NoYW5jdHgJPSB3ZnhfdW5hc3NpZ25f dmlmX2NoYW5jdHgsCi19OwotCi1ib29sIHdmeF9hcGlfb2xkZXJfdGhhbihzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwgaW50IG1ham9yLCBpbnQgbWlub3IpCi17Ci0JaWYgKHdkZXYtPmh3X2NhcHMuYXBp X3ZlcnNpb25fbWFqb3IgPCBtYWpvcikKLQkJcmV0dXJuIHRydWU7Ci0JaWYgKHdkZXYtPmh3X2Nh cHMuYXBpX3ZlcnNpb25fbWFqb3IgPiBtYWpvcikKLQkJcmV0dXJuIGZhbHNlOwotCWlmICh3ZGV2 LT5od19jYXBzLmFwaV92ZXJzaW9uX21pbm9yIDwgbWlub3IpCi0JCXJldHVybiB0cnVlOwotCXJl dHVybiBmYWxzZTsKLX0KLQotLyogTk9URTogd2Z4X3NlbmRfcGRzKCkgZGVzdHJveSBidWYgKi8K LWludCB3Znhfc2VuZF9wZHMoc3RydWN0IHdmeF9kZXYgKndkZXYsIHU4ICpidWYsIHNpemVfdCBs ZW4pCi17Ci0JaW50IHJldDsKLQlpbnQgc3RhcnQsIGJyYWNlX2xldmVsLCBpOwotCi0Jc3RhcnQg PSAwOwotCWJyYWNlX2xldmVsID0gMDsKLQlpZiAoYnVmWzBdICE9ICd7JykgewotCQlkZXZfZXJy KHdkZXYtPmRldiwgInZhbGlkIFBEUyBzdGFydCB3aXRoICd7Jy4gRGlkIHlvdSBmb3JnZXQgdG8g Y29tcHJlc3MgaXQ/XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWZvciAoaSA9IDE7IGkg PCBsZW4gLSAxOyBpKyspIHsKLQkJaWYgKGJ1ZltpXSA9PSAneycpCi0JCQlicmFjZV9sZXZlbCsr OwotCQlpZiAoYnVmW2ldID09ICd9JykKLQkJCWJyYWNlX2xldmVsLS07Ci0JCWlmIChidWZbaV0g PT0gJ30nICYmICFicmFjZV9sZXZlbCkgewotCQkJaSsrOwotCQkJaWYgKGkgLSBzdGFydCArIDEg PiBXRlhfUERTX01BWF9TSVpFKQotCQkJCXJldHVybiAtRUZCSUc7Ci0JCQlidWZbc3RhcnRdID0g J3snOwotCQkJYnVmW2ldID0gMDsKLQkJCWRldl9kYmcod2Rldi0+ZGV2LCAic2VuZCBQRFMgJyVz fSdcbiIsIGJ1ZiArIHN0YXJ0KTsKLQkJCWJ1ZltpXSA9ICd9JzsKLQkJCXJldCA9IGhpZl9jb25m aWd1cmF0aW9uKHdkZXYsIGJ1ZiArIHN0YXJ0LAotCQkJCQkJaSAtIHN0YXJ0ICsgMSk7Ci0JCQlp ZiAocmV0ID4gMCkgewotCQkJCWRldl9lcnIod2Rldi0+ZGV2LCAiUERTIGJ5dGVzICVkIHRvICVk OiBpbnZhbGlkIGRhdGEgKHVuc3VwcG9ydGVkIG9wdGlvbnM/KVxuIiwKLQkJCQkJc3RhcnQsIGkp OwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJaWYgKHJldCA9PSAtRVRJTUVET1VUKSB7 Ci0JCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJQRFMgYnl0ZXMgJWQgdG8gJWQ6IGNoaXAgZGlkbid0 IHJlcGx5IChjb3JydXB0ZWQgZmlsZT8pXG4iLAotCQkJCQlzdGFydCwgaSk7Ci0JCQkJcmV0dXJu IHJldDsKLQkJCX0KLQkJCWlmIChyZXQpIHsKLQkJCQlkZXZfZXJyKHdkZXYtPmRldiwgIlBEUyBi eXRlcyAlZCB0byAlZDogY2hpcCByZXR1cm5lZCBhbiB1bmtub3duIGVycm9yXG4iLAotCQkJCQlz dGFydCwgaSk7Ci0JCQkJcmV0dXJuIC1FSU87Ci0JCQl9Ci0JCQlidWZbaV0gPSAnLCc7Ci0JCQlz dGFydCA9IGk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3NlbmRf cGRhdGFfcGRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCWludCByZXQgPSAwOwotCWNvbnN0 IHN0cnVjdCBmaXJtd2FyZSAqcGRzOwotCXU4ICp0bXBfYnVmOwotCi0JcmV0ID0gcmVxdWVzdF9m aXJtd2FyZSgmcGRzLCB3ZGV2LT5wZGF0YS5maWxlX3Bkcywgd2Rldi0+ZGV2KTsKLQlpZiAocmV0 KSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAiY2FuJ3QgbG9hZCBQRFMgZmlsZSAlc1xuIiwKLQkJ CXdkZXYtPnBkYXRhLmZpbGVfcGRzKTsKLQkJZ290byBlcnIxOwotCX0KLQl0bXBfYnVmID0ga21l bWR1cChwZHMtPmRhdGEsIHBkcy0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0bXBfYnVmKSB7 Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMjsKLQl9Ci0JcmV0ID0gd2Z4X3NlbmRfcGRz KHdkZXYsIHRtcF9idWYsIHBkcy0+c2l6ZSk7Ci0Ja2ZyZWUodG1wX2J1Zik7Ci1lcnIyOgotCXJl bGVhc2VfZmlybXdhcmUocGRzKTsKLWVycjE6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZv aWQgd2Z4X2ZyZWVfY29tbW9uKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYg PSBkYXRhOwotCi0JbXV0ZXhfZGVzdHJveSgmd2Rldi0+dHhfcG93ZXJfbG9vcF9pbmZvX2xvY2sp OwotCW11dGV4X2Rlc3Ryb3koJndkZXYtPnJ4X3N0YXRzX2xvY2spOwotCW11dGV4X2Rlc3Ryb3ko JndkZXYtPmNvbmZfbXV0ZXgpOwotCWllZWU4MDIxMV9mcmVlX2h3KHdkZXYtPmh3KTsKLX0KLQot c3RydWN0IHdmeF9kZXYgKndmeF9pbml0X2NvbW1vbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJ Y29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSwKLQkJCQljb25zdCBzdHJ1Y3Qg aHdidXNfb3BzICpod2J1c19vcHMsCi0JCQkJdm9pZCAqaHdidXNfcHJpdikKLXsKLQlzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodzsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldjsKLQotCWh3ID0gaWVlZTgw MjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3Qgd2Z4X2RldiksICZ3Znhfb3BzKTsKLQlpZiAoIWh3 KQotCQlyZXR1cm4gTlVMTDsKLQotCVNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYpOwotCi0JaWVl ZTgwMjExX2h3X3NldChodywgVFhfQU1QRFVfU0VUVVBfSU5fSFcpOwotCWllZWU4MDIxMV9od19z ZXQoaHcsIEFNUERVX0FHR1JFR0FUSU9OKTsKLQlpZWVlODAyMTFfaHdfc2V0KGh3LCBDT05ORUNU SU9OX01PTklUT1IpOwotCWllZWU4MDIxMV9od19zZXQoaHcsIFJFUE9SVFNfVFhfQUNLX1NUQVRV Uyk7Ci0JaWVlZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfRFlOQU1JQ19QUyk7Ci0JaWVlZTgw MjExX2h3X3NldChodywgU0lHTkFMX0RCTSk7Ci0JaWVlZTgwMjExX2h3X3NldChodywgU1VQUE9S VFNfUFMpOwotCWllZWU4MDIxMV9od19zZXQoaHcsIE1GUF9DQVBBQkxFKTsKLQotCWh3LT52aWZf ZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB3ZnhfdmlmKTsKLQlody0+c3RhX2RhdGFfc2l6ZSA9 IHNpemVvZihzdHJ1Y3Qgd2Z4X3N0YV9wcml2KTsKLQlody0+cXVldWVzID0gNDsKLQlody0+bWF4 X3JhdGVzID0gODsKLQlody0+bWF4X3JhdGVfdHJpZXMgPSA4OwotCWh3LT5leHRyYV90eF9oZWFk cm9vbSA9IHNpemVvZihzdHJ1Y3QgaGlmX21zZykKLQkJCQkrIHNpemVvZihzdHJ1Y3QgaGlmX3Jl cV90eCkKLQkJCQkrIDQgLyogYWxpZ25tZW50ICovICsgOCAvKiBUS0lQIElWICovOwotCWh3LT53 aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKLQkJ CQkgICAgIEJJVChOTDgwMjExX0lGVFlQRV9BREhPQykgfAotCQkJCSAgICAgQklUKE5MODAyMTFf SUZUWVBFX0FQKTsKLQlody0+d2lwaHktPnByb2JlX3Jlc3Bfb2ZmbG9hZCA9IE5MODAyMTFfUFJP QkVfUkVTUF9PRkZMT0FEX1NVUFBPUlRfV1BTIHwKLQkJCQkJTkw4MDIxMV9QUk9CRV9SRVNQX09G RkxPQURfU1VQUE9SVF9XUFMyIHwKLQkJCQkJTkw4MDIxMV9QUk9CRV9SRVNQX09GRkxPQURfU1VQ UE9SVF9QMlAgfAotCQkJCQlOTDgwMjExX1BST0JFX1JFU1BfT0ZGTE9BRF9TVVBQT1JUXzgwMjEx VTsKLQlody0+d2lwaHktPmZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9BUF9TQ0FOOwotCWh3 LT53aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19BUF9QUk9CRV9SRVNQX09GRkxPQUQ7Ci0JaHct PndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0FQX1VBUFNEOwotCWh3LT53aXBoeS0+bWF4X2Fw X2Fzc29jX3N0YSA9IEhJRl9MSU5LX0lEX01BWDsKLQlody0+d2lwaHktPm1heF9zY2FuX3NzaWRz ID0gMjsKLQlody0+d2lwaHktPm1heF9zY2FuX2llX2xlbiA9IElFRUU4MDIxMV9NQVhfREFUQV9M RU47Ci0JaHctPndpcGh5LT5uX2lmYWNlX2NvbWJpbmF0aW9ucyA9IEFSUkFZX1NJWkUod2Z4X2lm YWNlX2NvbWJpbmF0aW9ucyk7Ci0JaHctPndpcGh5LT5pZmFjZV9jb21iaW5hdGlvbnMgPSB3Znhf aWZhY2VfY29tYmluYXRpb25zOwotCWh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpd ID0gZGV2bV9rbWFsbG9jKGRldiwgc2l6ZW9mKHdmeF9iYW5kXzJnaHopLCBHRlBfS0VSTkVMKTsK LQkvLyBGSVhNRTogYWxzbyBjb3B5IHdmeF9yYXRlcyBhbmQgd2Z4XzJnaHpfY2hhbnRhYmxlCi0J bWVtY3B5KGh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLCAmd2Z4X2JhbmRfMmdo eiwKLQkgICAgICAgc2l6ZW9mKHdmeF9iYW5kXzJnaHopKTsKLQotCXdkZXYgPSBody0+cHJpdjsK LQl3ZGV2LT5odyA9IGh3OwotCXdkZXYtPmRldiA9IGRldjsKLQl3ZGV2LT5od2J1c19vcHMgPSBo d2J1c19vcHM7Ci0Jd2Rldi0+aHdidXNfcHJpdiA9IGh3YnVzX3ByaXY7Ci0JbWVtY3B5KCZ3ZGV2 LT5wZGF0YSwgcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKLQlvZl9wcm9wZXJ0eV9yZWFkX3N0cmlu ZyhkZXYtPm9mX25vZGUsICJjb25maWctZmlsZSIsCi0JCQkJJndkZXYtPnBkYXRhLmZpbGVfcGRz KTsKLQl3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRl diwgIndha2V1cCIsCi0JCQkJCQkJICBHUElPRF9PVVRfTE9XKTsKLQlpZiAoSVNfRVJSKHdkZXYt PnBkYXRhLmdwaW9fd2FrZXVwKSkKLQkJcmV0dXJuIE5VTEw7Ci0JaWYgKHdkZXYtPnBkYXRhLmdw aW9fd2FrZXVwKQotCQlncGlvZF9zZXRfY29uc3VtZXJfbmFtZSh3ZGV2LT5wZGF0YS5ncGlvX3dh a2V1cCwgIndmeCB3YWtldXAiKTsKLQotCW11dGV4X2luaXQoJndkZXYtPmNvbmZfbXV0ZXgpOwot CW11dGV4X2luaXQoJndkZXYtPnJ4X3N0YXRzX2xvY2spOwotCW11dGV4X2luaXQoJndkZXYtPnR4 X3Bvd2VyX2xvb3BfaW5mb19sb2NrKTsKLQlpbml0X2NvbXBsZXRpb24oJndkZXYtPmZpcm13YXJl X3JlYWR5KTsKLQlJTklUX0RFTEFZRURfV09SSygmd2Rldi0+Y29vbGluZ190aW1lb3V0X3dvcmss Ci0JCQkgIHdmeF9jb29saW5nX3RpbWVvdXRfd29yayk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgm d2Rldi0+dHhfcGVuZGluZyk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmd2Rldi0+dHhfZGVxdWV1 ZSk7Ci0Jd2Z4X2luaXRfaGlmX2NtZCgmd2Rldi0+aGlmX2NtZCk7Ci0Jd2Rldi0+Zm9yY2VfcHNf dGltZW91dCA9IC0xOwotCi0JaWYgKGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHdmeF9m cmVlX2NvbW1vbiwgd2RldikpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHdkZXY7Ci19Ci0K LWludCB3ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaW50IGk7Ci0JaW50IGVy cjsKLQljb25zdCB2b2lkICptYWNhZGRyOwotCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9fc2F2ZWQ7 Ci0KLQkvLyBEdXJpbmcgZmlyc3QgcGFydCBvZiBib290LCBncGlvX3dha2V1cCBjYW5ub3QgeWV0 IGJlZW4gdXNlZC4gU28KLQkvLyBwcmV2ZW50IGJoKCkgdG8gdG91Y2ggaXQuCi0JZ3Bpb19zYXZl ZCA9IHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwOwotCXdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwID0g TlVMTDsKLQl3ZGV2LT5wb2xsX2lycSA9IHRydWU7Ci0KLQl3ZnhfYmhfcmVnaXN0ZXIod2Rldik7 Ci0KLQllcnIgPSB3ZnhfaW5pdF9kZXZpY2Uod2Rldik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIw OwotCi0Jd2Z4X2JoX3BvbGxfaXJxKHdkZXYpOwotCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25f dGltZW91dCgmd2Rldi0+ZmlybXdhcmVfcmVhZHksIDEgKiBIWik7Ci0JaWYgKGVyciA8PSAwKSB7 Ci0JCWlmIChlcnIgPT0gMCkgewotCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJ0aW1lb3V0IHdoaWxl IHdhaXRpbmcgZm9yIHN0YXJ0dXAgaW5kaWNhdGlvblxuIik7Ci0JCQllcnIgPSAtRVRJTUVET1VU OwotCQl9IGVsc2UgaWYgKGVyciA9PSAtRVJFU1RBUlRTWVMpIHsKLQkJCWRldl9pbmZvKHdkZXYt PmRldiwgInByb2JlIGludGVycnVwdGVkIGJ5IHVzZXJcbiIpOwotCQl9Ci0JCWdvdG8gZXJyMDsK LQl9Ci0KLQkvLyBGSVhNRTogZmlsbCB3aXBoeTo6aHdfdmVyc2lvbgotCWRldl9pbmZvKHdkZXYt PmRldiwgInN0YXJ0ZWQgZmlybXdhcmUgJWQuJWQuJWQgXCIlc1wiIChBUEk6ICVkLiVkLCBrZXlz ZXQ6ICUwMlgsIGNhcHM6IDB4JS44WClcbiIsCi0JCSB3ZGV2LT5od19jYXBzLmZpcm13YXJlX21h am9yLCB3ZGV2LT5od19jYXBzLmZpcm13YXJlX21pbm9yLAotCQkgd2Rldi0+aHdfY2Fwcy5maXJt d2FyZV9idWlsZCwgd2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9sYWJlbCwKLQkJIHdkZXYtPmh3X2Nh cHMuYXBpX3ZlcnNpb25fbWFqb3IsIHdkZXYtPmh3X2NhcHMuYXBpX3ZlcnNpb25fbWlub3IsCi0J CSB3ZGV2LT5rZXlzZXQsIHdkZXYtPmh3X2NhcHMubGlua19tb2RlKTsKLQlzbnByaW50Zih3ZGV2 LT5ody0+d2lwaHktPmZ3X3ZlcnNpb24sCi0JCSBzaXplb2Yod2Rldi0+aHctPndpcGh5LT5md192 ZXJzaW9uKSwKLQkJICIlZC4lZC4lZCIsCi0JCSB3ZGV2LT5od19jYXBzLmZpcm13YXJlX21ham9y LAotCQkgd2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9taW5vciwKLQkJIHdkZXYtPmh3X2NhcHMuZmly bXdhcmVfYnVpbGQpOwotCi0JaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAxLCAwKSkgewot CQlkZXZfZXJyKHdkZXYtPmRldiwKLQkJCSJ1bnN1cHBvcnRlZCBmaXJtd2FyZSBBUEkgdmVyc2lv biAoZXhwZWN0IDEgd2hpbGUgZmlybXdhcmUgcmV0dXJucyAlZClcbiIsCi0JCQl3ZGV2LT5od19j YXBzLmFwaV92ZXJzaW9uX21ham9yKTsKLQkJZXJyID0gLUVOT1RTVVBQOwotCQlnb3RvIGVycjA7 Ci0JfQotCi0JaWYgKHdkZXYtPmh3X2NhcHMubGlua19tb2RlID09IFNFQ19MSU5LX0VORk9SQ0VE KSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2LAotCQkJImNoaXAgcmVxdWlyZSBzZWN1cmVfbGluaywg YnV0IGNhbid0IG5lZ290aWF0ZSBpdFxuIik7Ci0JCWdvdG8gZXJyMDsKLQl9Ci0KLQlpZiAod2Rl di0+aHdfY2Fwcy5yZWdpb25fc2VsX21vZGUpIHsKLQkJd2Rldi0+aHctPndpcGh5LT5iYW5kc1tO TDgwMjExX0JBTkRfMkdIWl0tPmNoYW5uZWxzWzExXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9O T19JUjsKLQkJd2Rldi0+aHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0tPmNoYW5u ZWxzWzEyXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9OT19JUjsKLQkJd2Rldi0+aHctPndpcGh5 LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0tPmNoYW5uZWxzWzEzXS5mbGFncyB8PSBJRUVFODAy MTFfQ0hBTl9ESVNBQkxFRDsKLQl9Ci0KLQlkZXZfZGJnKHdkZXYtPmRldiwgInNlbmRpbmcgY29u ZmlndXJhdGlvbiBmaWxlICVzXG4iLAotCQl3ZGV2LT5wZGF0YS5maWxlX3Bkcyk7Ci0JZXJyID0g d2Z4X3NlbmRfcGRhdGFfcGRzKHdkZXYpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycjA7Ci0K LQl3ZGV2LT5wb2xsX2lycSA9IGZhbHNlOwotCWVyciA9IHdkZXYtPmh3YnVzX29wcy0+aXJxX3N1 YnNjcmliZSh3ZGV2LT5od2J1c19wcml2KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjA7Ci0KLQll cnIgPSBoaWZfdXNlX211bHRpX3R4X2NvbmYod2RldiwgdHJ1ZSk7Ci0JaWYgKGVycikKLQkJZGV2 X2Vycih3ZGV2LT5kZXYsICJtaXNjb25maWd1cmVkIElSUT9cbiIpOwotCi0Jd2Rldi0+cGRhdGEu Z3Bpb193YWtldXAgPSBncGlvX3NhdmVkOwotCWlmICh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCkg ewotCQlkZXZfZGJnKHdkZXYtPmRldiwKLQkJCSJlbmFibGUgJ3F1aWVzY2VudCcgcG93ZXIgbW9k ZSB3aXRoIHdha2V1cCBHUElPIGFuZCBQRFMgZmlsZSAlc1xuIiwKLQkJCXdkZXYtPnBkYXRhLmZp bGVfcGRzKTsKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHdkZXYtPnBkYXRhLmdwaW9fd2Fr ZXVwLCAxKTsKLQkJY29udHJvbF9yZWdfd3JpdGUod2RldiwgMCk7Ci0JCWhpZl9zZXRfb3BlcmF0 aW9uYWxfbW9kZSh3ZGV2LCBISUZfT1BfUE9XRVJfTU9ERV9RVUlFU0NFTlQpOwotCX0gZWxzZSB7 Ci0JCWhpZl9zZXRfb3BlcmF0aW9uYWxfbW9kZSh3ZGV2LCBISUZfT1BfUE9XRVJfTU9ERV9ET1pF KTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ZGV2LT5hZGRyZXNzZXMpOyBp KyspIHsKLQkJZXRoX3plcm9fYWRkcih3ZGV2LT5hZGRyZXNzZXNbaV0uYWRkcik7Ci0JCW1hY2Fk ZHIgPSBvZl9nZXRfbWFjX2FkZHJlc3Mod2Rldi0+ZGV2LT5vZl9ub2RlKTsKLQkJaWYgKCFJU19F UlJfT1JfTlVMTChtYWNhZGRyKSkgewotCQkJZXRoZXJfYWRkcl9jb3B5KHdkZXYtPmFkZHJlc3Nl c1tpXS5hZGRyLCBtYWNhZGRyKTsKLQkJCXdkZXYtPmFkZHJlc3Nlc1tpXS5hZGRyW0VUSF9BTEVO IC0gMV0gKz0gaTsKLQkJfSBlbHNlIHsKLQkJCWV0aGVyX2FkZHJfY29weSh3ZGV2LT5hZGRyZXNz ZXNbaV0uYWRkciwKLQkJCQkJd2Rldi0+aHdfY2Fwcy5tYWNfYWRkcltpXSk7Ci0JCX0KLQkJaWYg KCFpc192YWxpZF9ldGhlcl9hZGRyKHdkZXYtPmFkZHJlc3Nlc1tpXS5hZGRyKSkgewotCQkJZGV2 X3dhcm4od2Rldi0+ZGV2LCAidXNpbmcgcmFuZG9tIE1BQyBhZGRyZXNzXG4iKTsKLQkJCWV0aF9y YW5kb21fYWRkcih3ZGV2LT5hZGRyZXNzZXNbaV0uYWRkcik7Ci0JCX0KLQkJZGV2X2luZm8od2Rl di0+ZGV2LCAiTUFDIGFkZHJlc3MgJWQ6ICVwTVxuIiwgaSwKLQkJCSB3ZGV2LT5hZGRyZXNzZXNb aV0uYWRkcik7Ci0JfQotCXdkZXYtPmh3LT53aXBoeS0+bl9hZGRyZXNzZXMgPSBBUlJBWV9TSVpF KHdkZXYtPmFkZHJlc3Nlcyk7Ci0Jd2Rldi0+aHctPndpcGh5LT5hZGRyZXNzZXMgPSB3ZGV2LT5h ZGRyZXNzZXM7Ci0KLQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcod2Rldi0+aHcpOwotCWlm IChlcnIpCi0JCWdvdG8gZXJyMTsKLQotCWVyciA9IHdmeF9kZWJ1Z19pbml0KHdkZXYpOwotCWlm IChlcnIpCi0JCWdvdG8gZXJyMjsKLQotCXJldHVybiAwOwotCi1lcnIyOgotCWllZWU4MDIxMV91 bnJlZ2lzdGVyX2h3KHdkZXYtPmh3KTsKLWVycjE6Ci0Jd2Rldi0+aHdidXNfb3BzLT5pcnFfdW5z dWJzY3JpYmUod2Rldi0+aHdidXNfcHJpdik7Ci1lcnIwOgotCXdmeF9iaF91bnJlZ2lzdGVyKHdk ZXYpOwotCXJldHVybiBlcnI7Ci19Ci0KLXZvaWQgd2Z4X3JlbGVhc2Uoc3RydWN0IHdmeF9kZXYg KndkZXYpCi17Ci0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2Rldi0+aHcpOwotCWhpZl9zaHV0 ZG93bih3ZGV2KTsKLQl3ZGV2LT5od2J1c19vcHMtPmlycV91bnN1YnNjcmliZSh3ZGV2LT5od2J1 c19wcml2KTsKLQl3ZnhfYmhfdW5yZWdpc3Rlcih3ZGV2KTsKLX0KLQotc3RhdGljIGludCBfX2lu aXQgd2Z4X2NvcmVfaW5pdCh2b2lkKQotewotCWludCByZXQgPSAwOwotCi0JaWYgKElTX0VOQUJM RUQoQ09ORklHX1NQSSkpCi0JCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndmeF9zcGlfZHJp dmVyKTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1DKSAmJiAhcmV0KQotCQlyZXQgPSBzZGlv X3JlZ2lzdGVyX2RyaXZlcigmd2Z4X3NkaW9fZHJpdmVyKTsKLQlyZXR1cm4gcmV0OwotfQotbW9k dWxlX2luaXQod2Z4X2NvcmVfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB3ZnhfY29yZV9l eGl0KHZvaWQpCi17Ci0JaWYgKElTX0VOQUJMRUQoQ09ORklHX01NQykpCi0JCXNkaW9fdW5yZWdp c3Rlcl9kcml2ZXIoJndmeF9zZGlvX2RyaXZlcik7Ci0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1NQ SSkpCi0JCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmd2Z4X3NwaV9kcml2ZXIpOwotfQotbW9kdWxl X2V4aXQod2Z4X2NvcmVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L21h aW4uaCBiL2RyaXZlcnMvc3RhZ2luZy93ZngvbWFpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBhMGRiMzIyMzgzYTMuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcv d2Z4L21haW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBEZXZpY2UgcHJvYmUgYW5kIHJl Z2lzdGVyLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRv cmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICogQ29weXJp Z2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KLSAqIENv cHlyaWdodCAyMDA0LTIwMDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwg ZXQgYWwuCi0gKi8KLSNpZm5kZWYgV0ZYX01BSU5fSAotI2RlZmluZSBXRlhfTUFJTl9ICi0KLSNp bmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+ Ci0KLSNpbmNsdWRlICJoaWZfYXBpX2dlbmVyYWwuaCIKLQotc3RydWN0IHdmeF9kZXY7Ci1zdHJ1 Y3QgaHdidXNfb3BzOwotCi1zdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgewotCS8qIEtleXNldCBh bmQgIi5zZWMiIGV4dGVuc2lvbiB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoaXMgc3RyaW5nICovCi0J Y29uc3QgY2hhciAqZmlsZV9mdzsKLQljb25zdCBjaGFyICpmaWxlX3BkczsKLQlzdHJ1Y3QgZ3Bp b19kZXNjICpncGlvX3dha2V1cDsKLQkvKgotCSAqIGlmIHRydWUgSElGIERfb3V0IGlzIHNhbXBs ZWQgb24gdGhlIHJpc2luZyBlZGdlIG9mIHRoZSBjbG9jawotCSAqIChpbnRlbmRlZCB0byBiZSB1 c2VkIGluIDUwTWh6IFNESU8pCi0JICovCi0JYm9vbCB1c2VfcmlzaW5nX2NsazsKLX07Ci0KLXN0 cnVjdCB3ZnhfZGV2ICp3ZnhfaW5pdF9jb21tb24oc3RydWN0IGRldmljZSAqZGV2LAotCQkJCWNv bnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSAqcGRhdGEsCi0JCQkJY29uc3Qgc3RydWN0IGh3 YnVzX29wcyAqaHdidXNfb3BzLAotCQkJCXZvaWQgKmh3YnVzX3ByaXYpOwotCi1pbnQgd2Z4X3By b2JlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKLXZvaWQgd2Z4X3JlbGVhc2Uoc3RydWN0IHdmeF9k ZXYgKndkZXYpOwotCi1ib29sIHdmeF9hcGlfb2xkZXJfdGhhbihzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgaW50IG1ham9yLCBpbnQgbWlub3IpOwotaW50IHdmeF9zZW5kX3BkcyhzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwgdTggKmJ1Ziwgc2l6ZV90IGxlbik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWMzN2Y2OWMyOTUuLjAwMDAwMDAwMDAwMAot LS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDQg KzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAq IE8oMSkgVFggcXVldWUgd2l0aCBidWlsdC1pbiBhbGxvY2F0b3IuCi0gKgotICogQ29weXJpZ2h0 IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2lu Y2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAicXVldWUuaCIKLSNpbmNsdWRlICJ3 ZnguaCIKLSNpbmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJkYXRhX3R4LmgiCi0jaW5jbHVkZSAi dHJhY2VzLmgiCi0KLXZvaWQgd2Z4X3R4X2xvY2soc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0J YXRvbWljX2luYygmd2Rldi0+dHhfbG9jayk7Ci19Ci0KLXZvaWQgd2Z4X3R4X3VubG9jayhzdHJ1 Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlpbnQgdHhfbG9jayA9IGF0b21pY19kZWNfcmV0dXJuKCZ3 ZGV2LT50eF9sb2NrKTsKLQotCVdBUk4odHhfbG9jayA8IDAsICJpbmNvbnNpc3RlbnQgdHhfbG9j ayB2YWx1ZSIpOwotCWlmICghdHhfbG9jaykKLQkJd2Z4X2JoX3JlcXVlc3RfdHgod2Rldik7Ci19 Ci0KLXZvaWQgd2Z4X3R4X2ZsdXNoKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCWludCByZXQ7 Ci0KLQkvLyBEbyBub3Qgd2FpdCBmb3IgYW55IHJlcGx5IGlmIGNoaXAgaXMgZnJvemVuCi0JaWYg KHdkZXYtPmNoaXBfZnJvemVuKQotCQlyZXR1cm47Ci0KLQl3ZnhfdHhfbG9jayh3ZGV2KTsKLQlt dXRleF9sb2NrKCZ3ZGV2LT5oaWZfY21kLmxvY2spOwotCXJldCA9IHdhaXRfZXZlbnRfdGltZW91 dCh3ZGV2LT5oaWYudHhfYnVmZmVyc19lbXB0eSwKLQkJCQkgIXdkZXYtPmhpZi50eF9idWZmZXJz X3VzZWQsCi0JCQkJIG1zZWNzX3RvX2ppZmZpZXMoMzAwMCkpOwotCWlmICghcmV0KSB7Ci0JCWRl dl93YXJuKHdkZXYtPmRldiwgImNhbm5vdCBmbHVzaCB0eCBidWZmZXJzICglZCBzdGlsbCBidXN5 KVxuIiwKLQkJCSB3ZGV2LT5oaWYudHhfYnVmZmVyc191c2VkKTsKLQkJd2Z4X3BlbmRpbmdfZHVt cF9vbGRfZnJhbWVzKHdkZXYsIDMwMDApOwotCQkvLyBGSVhNRTogZHJvcCBwZW5kaW5nIGZyYW1l cyBoZXJlCi0JCXdkZXYtPmNoaXBfZnJvemVuID0gdHJ1ZTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ3 ZGV2LT5oaWZfY21kLmxvY2spOwotCXdmeF90eF91bmxvY2sod2Rldik7Ci19Ci0KLXZvaWQgd2Z4 X3R4X2xvY2tfZmx1c2goc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0Jd2Z4X3R4X2xvY2sod2Rl dik7Ci0Jd2Z4X3R4X2ZsdXNoKHdkZXYpOwotfQotCi12b2lkIHdmeF90eF9xdWV1ZXNfaW5pdChz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsKLQkvLyBUaGUgZGV2aWNlIGlzIGluIGNoYXJnZSB0byBy ZXNwZWN0IHRoZSBkZXRhaWxzIG9mIHRoZSBRb1MgcGFyYW1ldGVycy4KLQkvLyBUaGUgZHJpdmVy IGp1c3QgZW5zdXJlIHRoYXQgaXQgcm91Z2h0bHkgcmVzcGVjdCB0aGUgcHJpb3JpdGllcyB0bwot CS8vIGF2b2lkIGFueSBzaG9ydGFnZS4KLQljb25zdCBpbnQgcHJpb3JpdGllc1tJRUVFODAyMTFf TlVNX0FDU10gPSB7IDEsIDIsIDY0LCAxMjggfTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkg PCBJRUVFODAyMTFfTlVNX0FDUzsgKytpKSB7Ci0JCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnd2aWYt PnR4X3F1ZXVlW2ldLm5vcm1hbCk7Ci0JCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnd2aWYtPnR4X3F1 ZXVlW2ldLmNhYik7Ci0JCXd2aWYtPnR4X3F1ZXVlW2ldLnByaW9yaXR5ID0gcHJpb3JpdGllc1tp XTsKLQl9Ci19Ci0KLXZvaWQgd2Z4X3R4X3F1ZXVlc19jaGVja19lbXB0eShzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FD UzsgKytpKSB7Ci0JCVdBUk5fT04oYXRvbWljX3JlYWQoJnd2aWYtPnR4X3F1ZXVlW2ldLnBlbmRp bmdfZnJhbWVzKSk7Ci0JCVdBUk5fT04oIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmd3ZpZi0+ dHhfcXVldWVbaV0ubm9ybWFsKSk7Ci0JCVdBUk5fT04oIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVz cygmd3ZpZi0+dHhfcXVldWVbaV0uY2FiKSk7Ci0JfQotfQotCi1ib29sIHdmeF90eF9xdWV1ZV9l bXB0eShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUpCi17Ci0J cmV0dXJuIHNrYl9xdWV1ZV9lbXB0eSgmcXVldWUtPm5vcm1hbCkgJiYgc2tiX3F1ZXVlX2VtcHR5 KCZxdWV1ZS0+Y2FiKTsKLX0KLQotc3RhdGljIHZvaWQgX193ZnhfdHhfcXVldWVfZHJvcChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JfcXVldWUsCi0J CQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHJvcHBlZCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCAqdG1wOwotCi0Jc3Bpbl9sb2NrX2JoKCZza2JfcXVldWUtPmxvY2spOwotCXNrYl9xdWV1ZV93 YWxrX3NhZmUoc2tiX3F1ZXVlLCBza2IsIHRtcCkgewotCQlfX3NrYl91bmxpbmsoc2tiLCBza2Jf cXVldWUpOwotCQlza2JfcXVldWVfaGVhZChkcm9wcGVkLCBza2IpOwotCX0KLQlzcGluX3VubG9j a19iaCgmc2tiX3F1ZXVlLT5sb2NrKTsKLX0KLQotdm9pZCB3ZnhfdHhfcXVldWVfZHJvcChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUsCi0JCSAgICAgICBzdHJ1 Y3Qgc2tfYnVmZl9oZWFkICpkcm9wcGVkKQotewotCV9fd2Z4X3R4X3F1ZXVlX2Ryb3Aod3ZpZiwg JnF1ZXVlLT5jYWIsIGRyb3BwZWQpOwotCV9fd2Z4X3R4X3F1ZXVlX2Ryb3Aod3ZpZiwgJnF1ZXVl LT5ub3JtYWwsIGRyb3BwZWQpOwotCXdha2VfdXAoJnd2aWYtPndkZXYtPnR4X2RlcXVldWUpOwot fQotCi12b2lkIHdmeF90eF9xdWV1ZXNfcHV0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qg c2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVlID0gJnd2aWYtPnR4X3F1 ZXVlW3NrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2lu Zm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0KLQlpZiAodHhfaW5mby0+Zmxh Z3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZURVJfRFRJTSkKLQkJc2tiX3F1ZXVlX3RhaWwo JnF1ZXVlLT5jYWIsIHNrYik7Ci0JZWxzZQotCQlza2JfcXVldWVfdGFpbCgmcXVldWUtPm5vcm1h bCwgc2tiKTsKLX0KLQotdm9pZCB3ZnhfcGVuZGluZ19kcm9wKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpkcm9wcGVkKQotewotCXN0cnVjdCB3ZnhfcXVldWUgKnF1 ZXVlOwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmOwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc3Ry dWN0IHNrX2J1ZmYgKnNrYjsKLQotCVdBUk4oIXdkZXYtPmNoaXBfZnJvemVuLCAiJXMgc2hvdWxk IG9ubHkgYmUgdXNlZCB0byByZWNvdmVyIGEgZnJvemVuIGRldmljZSIsCi0JICAgICBfX2Z1bmNf Xyk7Ci0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2Rldi0+dHhfcGVuZGluZykpICE9IE5V TEwpIHsKLQkJaGlmID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOwotCQl3dmlmID0gd2Rl dl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsKLQkJaWYgKHd2aWYpIHsKLQkJCXF1ZXVl ID0gJnd2aWYtPnR4X3F1ZXVlW3NrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpXTsKLQkJCVdBUk5f T04oc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikgPiAzKTsKLQkJCVdBUk5fT04oIWF0b21pY19y ZWFkKCZxdWV1ZS0+cGVuZGluZ19mcmFtZXMpKTsKLQkJCWF0b21pY19kZWMoJnF1ZXVlLT5wZW5k aW5nX2ZyYW1lcyk7Ci0JCX0KLQkJc2tiX3F1ZXVlX2hlYWQoZHJvcHBlZCwgc2tiKTsKLQl9Ci19 Ci0KLXN0cnVjdCBza19idWZmICp3ZnhfcGVuZGluZ19nZXQoc3RydWN0IHdmeF9kZXYgKndkZXYs IHUzMiBwYWNrZXRfaWQpCi17Ci0Jc3RydWN0IHdmeF9xdWV1ZSAqcXVldWU7Ci0Jc3RydWN0IGhp Zl9yZXFfdHggKnJlcTsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsKLQlzdHJ1Y3QgaGlmX21zZyAq aGlmOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQlzcGluX2xvY2tfYmgoJndkZXYtPnR4X3Bl bmRpbmcubG9jayk7Ci0Jc2tiX3F1ZXVlX3dhbGsoJndkZXYtPnR4X3BlbmRpbmcsIHNrYikgewot CQloaWYgPSAoc3RydWN0IGhpZl9tc2cgKilza2ItPmRhdGE7Ci0JCXJlcSA9IChzdHJ1Y3QgaGlm X3JlcV90eCAqKWhpZi0+Ym9keTsKLQkJaWYgKHJlcS0+cGFja2V0X2lkICE9IHBhY2tldF9pZCkK LQkJCWNvbnRpbnVlOwotCQlzcGluX3VubG9ja19iaCgmd2Rldi0+dHhfcGVuZGluZy5sb2NrKTsK LQkJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7Ci0JCWlmICh3dmlm KSB7Ci0JCQlxdWV1ZSA9ICZ3dmlmLT50eF9xdWV1ZVtza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2ti KV07Ci0JCQlXQVJOX09OKHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpID4gMyk7Ci0JCQlXQVJO X09OKCFhdG9taWNfcmVhZCgmcXVldWUtPnBlbmRpbmdfZnJhbWVzKSk7Ci0JCQlhdG9taWNfZGVj KCZxdWV1ZS0+cGVuZGluZ19mcmFtZXMpOwotCQl9Ci0JCXNrYl91bmxpbmsoc2tiLCAmd2Rldi0+ dHhfcGVuZGluZyk7Ci0JCXJldHVybiBza2I7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZ3ZGV2LT50 eF9wZW5kaW5nLmxvY2spOwotCVdBUk4oMSwgImNhbm5vdCBmaW5kIHBhY2tldCBpbiBwZW5kaW5n IHF1ZXVlIik7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQgd2Z4X3BlbmRpbmdfZHVtcF9vbGRf ZnJhbWVzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1bnNpZ25lZCBpbnQgbGltaXRfbXMpCi17Ci0J a3RpbWVfdCBub3cgPSBrdGltZV9nZXQoKTsKLQlzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKnR4X3ByaXY7 Ci0Jc3RydWN0IGhpZl9yZXFfdHggKnJlcTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWJvb2wg Zmlyc3QgPSB0cnVlOwotCi0Jc3Bpbl9sb2NrX2JoKCZ3ZGV2LT50eF9wZW5kaW5nLmxvY2spOwot CXNrYl9xdWV1ZV93YWxrKCZ3ZGV2LT50eF9wZW5kaW5nLCBza2IpIHsKLQkJdHhfcHJpdiA9IHdm eF9za2JfdHhfcHJpdihza2IpOwotCQlyZXEgPSB3Znhfc2tiX3R4cmVxKHNrYik7Ci0JCWlmIChr dGltZV9hZnRlcihub3csIGt0aW1lX2FkZF9tcyh0eF9wcml2LT54bWl0X3RpbWVzdGFtcCwKLQkJ CQkJCSAgbGltaXRfbXMpKSkgewotCQkJaWYgKGZpcnN0KSB7Ci0JCQkJZGV2X2luZm8od2Rldi0+ ZGV2LCAiZnJhbWVzIHN0dWNrIGluIGZpcm13YXJlIHNpbmNlICVkbXMgb3IgbW9yZTpcbiIsCi0J CQkJCSBsaW1pdF9tcyk7Ci0JCQkJZmlyc3QgPSBmYWxzZTsKLQkJCX0KLQkJCWRldl9pbmZvKHdk ZXYtPmRldiwgIiAgIGlkICUwOHggc2VudCAlbGxkbXMgYWdvXG4iLAotCQkJCSByZXEtPnBhY2tl dF9pZCwKLQkJCQkga3RpbWVfbXNfZGVsdGEobm93LCB0eF9wcml2LT54bWl0X3RpbWVzdGFtcCkp OwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZ3ZGV2LT50eF9wZW5kaW5nLmxvY2spOwotfQot Ci11bnNpZ25lZCBpbnQgd2Z4X3BlbmRpbmdfZ2V0X3BrdF91c19kZWxheShzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwKLQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWt0aW1lX3Qgbm93ID0g a3RpbWVfZ2V0KCk7Ci0Jc3RydWN0IHdmeF90eF9wcml2ICp0eF9wcml2ID0gd2Z4X3NrYl90eF9w cml2KHNrYik7Ci0KLQlyZXR1cm4ga3RpbWVfdXNfZGVsdGEobm93LCB0eF9wcml2LT54bWl0X3Rp bWVzdGFtcCk7Ci19Ci0KLWJvb2wgd2Z4X3R4X3F1ZXVlc19oYXNfY2FiKHN0cnVjdCB3Znhfdmlm ICp3dmlmKQotewotCWludCBpOwotCi0JaWYgKHd2aWYtPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lG VFlQRV9BUCkKLQkJcmV0dXJuIGZhbHNlOwotCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVN X0FDUzsgKytpKQotCQkvLyBOb3RlOiBzaW5jZSBvbmx5IEFQIGNhbiBoYXZlIG1jYXN0IGZyYW1l cyBpbiBxdWV1ZSBhbmQgb25seQotCQkvLyBvbmUgdmlmIGNhbiBiZSBBUCwgYWxsIHF1ZXVlZCBm cmFtZXMgaGFzIHNhbWUgaW50ZXJmYWNlIGlkCi0JCWlmICghc2tiX3F1ZXVlX2VtcHR5X2xvY2ts ZXNzKCZ3dmlmLT50eF9xdWV1ZVtpXS5jYWIpKQotCQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZh bHNlOwotfQotCi1zdGF0aWMgaW50IHdmeF90eF9xdWV1ZV9nZXRfd2VpZ2h0KHN0cnVjdCB3Znhf cXVldWUgKnF1ZXVlKQotewotCXJldHVybiBhdG9taWNfcmVhZCgmcXVldWUtPnBlbmRpbmdfZnJh bWVzKSAqIHF1ZXVlLT5wcmlvcml0eTsKLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICp3Znhf dHhfcXVldWVzX2dldF9za2Ioc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0Jc3RydWN0IHdmeF9x dWV1ZSAqcXVldWVzW0lFRUU4MDIxMV9OVU1fQUNTICogQVJSQVlfU0laRSh3ZGV2LT52aWYpXTsK LQlpbnQgaSwgaiwgbnVtX3F1ZXVlcyA9IDA7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWY7Ci0Jc3Ry dWN0IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JLy8gc29ydCB0aGUg cXVldWVzCi0Jd3ZpZiA9IE5VTEw7Ci0Jd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYs IHd2aWYpKSAhPSBOVUxMKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsg aSsrKSB7Ci0JCQlXQVJOX09OKG51bV9xdWV1ZXMgPj0gQVJSQVlfU0laRShxdWV1ZXMpKTsKLQkJ CXF1ZXVlc1tudW1fcXVldWVzXSA9ICZ3dmlmLT50eF9xdWV1ZVtpXTsKLQkJCWZvciAoaiA9IG51 bV9xdWV1ZXM7IGogPiAwOyBqLS0pCi0JCQkJaWYgKHdmeF90eF9xdWV1ZV9nZXRfd2VpZ2h0KHF1 ZXVlc1tqXSkgPAotCQkJCSAgICB3ZnhfdHhfcXVldWVfZ2V0X3dlaWdodChxdWV1ZXNbaiAtIDFd KSkKLQkJCQkJc3dhcChxdWV1ZXNbaiAtIDFdLCBxdWV1ZXNbal0pOwotCQkJbnVtX3F1ZXVlcysr OwotCQl9Ci0JfQotCi0Jd3ZpZiA9IE5VTEw7Ci0Jd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRl KHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7Ci0JCWlmICghd3ZpZi0+YWZ0ZXJfZHRpbV90eF9hbGxv d2VkKQotCQkJY29udGludWU7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fcXVldWVzOyBpKyspIHsK LQkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZxdWV1ZXNbaV0tPmNhYik7Ci0JCQlpZiAoIXNrYikKLQkJ CQljb250aW51ZTsKLQkJCS8vIE5vdGU6IHNpbmNlIG9ubHkgQVAgY2FuIGhhdmUgbWNhc3QgZnJh bWVzIGluIHF1ZXVlCi0JCQkvLyBhbmQgb25seSBvbmUgdmlmIGNhbiBiZSBBUCwgYWxsIHF1ZXVl ZCBmcmFtZXMgaGFzCi0JCQkvLyBzYW1lIGludGVyZmFjZSBpZAotCQkJaGlmID0gKHN0cnVjdCBo aWZfbXNnICopc2tiLT5kYXRhOwotCQkJV0FSTl9PTihoaWYtPmludGVyZmFjZSAhPSB3dmlmLT5p ZCk7Ci0JCQlXQVJOX09OKHF1ZXVlc1tpXSAhPQotCQkJCSZ3dmlmLT50eF9xdWV1ZVtza2JfZ2V0 X3F1ZXVlX21hcHBpbmcoc2tiKV0pOwotCQkJYXRvbWljX2luYygmcXVldWVzW2ldLT5wZW5kaW5n X2ZyYW1lcyk7Ci0JCQl0cmFjZV9xdWV1ZXNfc3RhdHMod2RldiwgcXVldWVzW2ldKTsKLQkJCXJl dHVybiBza2I7Ci0JCX0KLQkJLy8gTm8gbW9yZSBtdWx0aWNhc3QgdG8gc2VudAotCQl3dmlmLT5h ZnRlcl9kdGltX3R4X2FsbG93ZWQgPSBmYWxzZTsKLQkJc2NoZWR1bGVfd29yaygmd3ZpZi0+dXBk YXRlX3RpbV93b3JrKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3F1ZXVlczsgaSsrKSB7 Ci0JCXNrYiA9IHNrYl9kZXF1ZXVlKCZxdWV1ZXNbaV0tPm5vcm1hbCk7Ci0JCWlmIChza2IpIHsK LQkJCWF0b21pY19pbmMoJnF1ZXVlc1tpXS0+cGVuZGluZ19mcmFtZXMpOwotCQkJdHJhY2VfcXVl dWVzX3N0YXRzKHdkZXYsIHF1ZXVlc1tpXSk7Ci0JCQlyZXR1cm4gc2tiOwotCQl9Ci0JfQotCXJl dHVybiBOVUxMOwotfQotCi1zdHJ1Y3QgaGlmX21zZyAqd2Z4X3R4X3F1ZXVlc19nZXQoc3RydWN0 IHdmeF9kZXYgKndkZXYpCi17Ci0Jc3RydWN0IHdmeF90eF9wcml2ICp0eF9wcml2OwotCXN0cnVj dCBza19idWZmICpza2I7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJndkZXYtPnR4X2xvY2spKQotCQly ZXR1cm4gTlVMTDsKLQlza2IgPSB3ZnhfdHhfcXVldWVzX2dldF9za2Iod2Rldik7Ci0JaWYgKCFz a2IpCi0JCXJldHVybiBOVUxMOwotCXNrYl9xdWV1ZV90YWlsKCZ3ZGV2LT50eF9wZW5kaW5nLCBz a2IpOwotCXdha2VfdXAoJndkZXYtPnR4X2RlcXVldWUpOwotCXR4X3ByaXYgPSB3Znhfc2tiX3R4 X3ByaXYoc2tiKTsKLQl0eF9wcml2LT54bWl0X3RpbWVzdGFtcCA9IGt0aW1lX2dldCgpOwotCXJl dHVybiAoc3RydWN0IGhpZl9tc2cgKilza2ItPmRhdGE7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvd2Z4L3F1ZXVlLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVlLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYmExOTQ1NWVmMy4uMDAwMDAwMDAwMDAwCi0tLSBh L2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAg QEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBP KDEpIFRYIHF1ZXVlIHdpdGggYnVpbHQtaW4gYWxsb2NhdG9yLgotICoKLSAqIENvcHlyaWdodCAo YykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChj KSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0jaWZuZGVmIFdGWF9RVUVVRV9ICi0jZGVmaW5lIFdG WF9RVUVVRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9h dG9taWMuaD4KLQotc3RydWN0IHdmeF9kZXY7Ci1zdHJ1Y3Qgd2Z4X3ZpZjsKLQotc3RydWN0IHdm eF9xdWV1ZSB7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZAlub3JtYWw7Ci0Jc3RydWN0IHNrX2J1ZmZf aGVhZAljYWI7IC8vIENvbnRlbnQgQWZ0ZXIgKERUSU0pIEJlYWNvbgotCWF0b21pY190CQlwZW5k aW5nX2ZyYW1lczsKLQlpbnQJCQlwcmlvcml0eTsKLX07Ci0KLXZvaWQgd2Z4X3R4X2xvY2soc3Ry dWN0IHdmeF9kZXYgKndkZXYpOwotdm9pZCB3ZnhfdHhfdW5sb2NrKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2KTsKLXZvaWQgd2Z4X3R4X2ZsdXNoKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKLXZvaWQgd2Z4 X3R4X2xvY2tfZmx1c2goc3RydWN0IHdmeF9kZXYgKndkZXYpOwotCi12b2lkIHdmeF90eF9xdWV1 ZXNfaW5pdChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7Ci12b2lkIHdmeF90eF9xdWV1ZXNfY2hlY2tf ZW1wdHkoc3RydWN0IHdmeF92aWYgKnd2aWYpOwotYm9vbCB3ZnhfdHhfcXVldWVzX2hhc19jYWIo c3RydWN0IHdmeF92aWYgKnd2aWYpOwotdm9pZCB3ZnhfdHhfcXVldWVzX3B1dChzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdHJ1Y3QgaGlmX21zZyAqd2Z4X3R4 X3F1ZXVlc19nZXQoc3RydWN0IHdmeF9kZXYgKndkZXYpOwotCi1ib29sIHdmeF90eF9xdWV1ZV9l bXB0eShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUpOwotdm9p ZCB3ZnhfdHhfcXVldWVfZHJvcChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHdmeF9xdWV1 ZSAqcXVldWUsCi0JCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpkcm9wcGVkKTsKLQotc3Ry dWN0IHNrX2J1ZmYgKndmeF9wZW5kaW5nX2dldChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIHBh Y2tldF9pZCk7Ci12b2lkIHdmeF9wZW5kaW5nX2Ryb3Aoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0 cnVjdCBza19idWZmX2hlYWQgKmRyb3BwZWQpOwotdW5zaWduZWQgaW50IHdmeF9wZW5kaW5nX2dl dF9wa3RfdXNfZGVsYXkoc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJCSAgc3RydWN0IHNrX2J1 ZmYgKnNrYik7Ci12b2lkIHdmeF9wZW5kaW5nX2R1bXBfb2xkX2ZyYW1lcyhzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwgdW5zaWduZWQgaW50IGxpbWl0X21zKTsKLQotI2VuZGlmIC8qIFdGWF9RVUVVRV9I ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYyBiL2RyaXZlcnMvc3Rh Z2luZy93Zngvc2Nhbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjQ3YzdjZGRm MmYuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYworKysgL2Rl di9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vbmx5Ci0vKgotICogU2NhbiByZWxhdGVkIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmln aHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdo dCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgot Ci0jaW5jbHVkZSAic2Nhbi5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgInN0YS5oIgot I2luY2x1ZGUgImhpZl90eF9taWIuaCIKLQotc3RhdGljIHZvaWQgX19pZWVlODAyMTFfc2Nhbl9j b21wbGV0ZWRfY29tcGF0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgICAgICBib29s IGFib3J0ZWQpCi17Ci0Jc3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBpbmZvID0gewotCQkuYWJv cnRlZCA9IGFib3J0ZWQsCi0JfTsKLQotCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChodywgJmlu Zm8pOwotfQotCi1zdGF0aWMgaW50IHVwZGF0ZV9wcm9iZV90bXBsKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLAotCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCi17Ci0Jc3Ry dWN0IHNrX2J1ZmYgKnNrYjsKLQotCXNrYiA9IGllZWU4MDIxMV9wcm9iZXJlcV9nZXQod3ZpZi0+ d2Rldi0+aHcsIHd2aWYtPnZpZi0+YWRkciwKLQkJCQkgICAgIE5VTEwsIDAsIHJlcS0+aWVfbGVu KTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlza2JfcHV0X2RhdGEoc2tiLCBy ZXEtPmllLCByZXEtPmllX2xlbik7Ci0JaGlmX3NldF90ZW1wbGF0ZV9mcmFtZSh3dmlmLCBza2Is IEhJRl9UTVBMVF9QUkJSRVEsIDApOwotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBzZW5kX3NjYW5fcmVxKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCQkJ IHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSwgaW50IHN0YXJ0X2lkeCkKLXsKLQlp bnQgaSwgcmV0LCB0aW1lb3V0OwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hfc3RhcnQs ICpjaF9jdXI7Ci0KLQlmb3IgKGkgPSBzdGFydF9pZHg7IGkgPCByZXEtPm5fY2hhbm5lbHM7IGkr KykgewotCQljaF9zdGFydCA9IHJlcS0+Y2hhbm5lbHNbc3RhcnRfaWR4XTsKLQkJY2hfY3VyID0g cmVxLT5jaGFubmVsc1tpXTsKLQkJV0FSTihjaF9jdXItPmJhbmQgIT0gTkw4MDIxMV9CQU5EXzJH SFosICJiYW5kIG5vdCBzdXBwb3J0ZWQiKTsKLQkJaWYgKGNoX2N1ci0+bWF4X3Bvd2VyICE9IGNo X3N0YXJ0LT5tYXhfcG93ZXIpCi0JCQlicmVhazsKLQkJaWYgKChjaF9jdXItPmZsYWdzIF4gY2hf c3RhcnQtPmZsYWdzKSAmIElFRUU4MDIxMV9DSEFOX05PX0lSKQotCQkJYnJlYWs7Ci0JfQotCXdm eF90eF9sb2NrX2ZsdXNoKHd2aWYtPndkZXYpOwotCXd2aWYtPnNjYW5fYWJvcnQgPSBmYWxzZTsK LQlyZWluaXRfY29tcGxldGlvbigmd3ZpZi0+c2Nhbl9jb21wbGV0ZSk7Ci0JcmV0ID0gaGlmX3Nj YW4od3ZpZiwgcmVxLCBzdGFydF9pZHgsIGkgLSBzdGFydF9pZHgsICZ0aW1lb3V0KTsKLQlpZiAo cmV0KSB7Ci0JCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7Ci0JCXJldHVybiAtRUlPOwotCX0K LQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnd2aWYtPnNjYW5fY29tcGxldGUs IHRpbWVvdXQpOwotCWlmIChyZXEtPmNoYW5uZWxzW3N0YXJ0X2lkeF0tPm1heF9wb3dlciAhPSB3 dmlmLT52aWYtPmJzc19jb25mLnR4cG93ZXIpCi0JCWhpZl9zZXRfb3V0cHV0X3Bvd2VyKHd2aWYs IHd2aWYtPnZpZi0+YnNzX2NvbmYudHhwb3dlcik7Ci0Jd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2 KTsKLQlpZiAoIXJldCkgewotCQlkZXZfbm90aWNlKHd2aWYtPndkZXYtPmRldiwgInNjYW4gdGlt ZW91dFxuIik7Ci0JCWhpZl9zdG9wX3NjYW4od3ZpZik7Ci0JCXJldHVybiAtRVRJTUVET1VUOwot CX0KLQlpZiAod3ZpZi0+c2Nhbl9hYm9ydCkgewotCQlkZXZfbm90aWNlKHd2aWYtPndkZXYtPmRl diwgInNjYW4gYWJvcnRcbiIpOwotCQlyZXR1cm4gLUVDT05OQUJPUlRFRDsKLQl9Ci0JcmV0dXJu IGkgLSBzdGFydF9pZHg7Ci19Ci0KLS8qCi0gKiBJdCBpcyBub3QgcmVhbGx5IG5lY2Vzc2FyeSB0 byBydW4gc2NhbiByZXF1ZXN0IGFzeW5jaHJvbm91c2x5LiBIb3dldmVyLAotICogdGhlcmUgaXMg YSBidWcgaW4gIml3IHNjYW4iIHdoZW4gaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKCkgaXMgY2Fs bGVkIGJlZm9yZQotICogd2Z4X2h3X3NjYW4oKSByZXR1cm4KLSAqLwotdm9pZCB3ZnhfaHdfc2Nh bl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgc2Nhbl93b3JrKTsKLQlzdHJ1 Y3QgaWVlZTgwMjExX3NjYW5fcmVxdWVzdCAqaHdfcmVxID0gd3ZpZi0+c2Nhbl9yZXE7Ci0JaW50 IGNoYW5fY3VyLCByZXQ7Ci0KLQltdXRleF9sb2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsK LQltdXRleF9sb2NrKCZ3dmlmLT5zY2FuX2xvY2spOwotCWlmICh3dmlmLT5qb2luX2luX3Byb2dy ZXNzKSB7Ci0JCWRldl9pbmZvKHd2aWYtPndkZXYtPmRldiwgIiVzOiBhYm9ydCBpbi1wcm9ncmVz cyBSRVFfSk9JTiIsCi0JCQkgX19mdW5jX18pOwotCQl3ZnhfcmVzZXQod3ZpZik7Ci0JfQotCXVw ZGF0ZV9wcm9iZV90bXBsKHd2aWYsICZod19yZXEtPnJlcSk7Ci0JY2hhbl9jdXIgPSAwOwotCWRv IHsKLQkJcmV0ID0gc2VuZF9zY2FuX3JlcSh3dmlmLCAmaHdfcmVxLT5yZXEsIGNoYW5fY3VyKTsK LQkJaWYgKHJldCA+IDApCi0JCQljaGFuX2N1ciArPSByZXQ7Ci0JfSB3aGlsZSAocmV0ID4gMCAm JiBjaGFuX2N1ciA8IGh3X3JlcS0+cmVxLm5fY2hhbm5lbHMpOwotCW11dGV4X3VubG9jaygmd3Zp Zi0+c2Nhbl9sb2NrKTsKLQltdXRleF91bmxvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOwot CV9faWVlZTgwMjExX3NjYW5fY29tcGxldGVkX2NvbXBhdCh3dmlmLT53ZGV2LT5odywgcmV0IDwg MCk7Ci19Ci0KLWludCB3ZnhfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJc3RydWN0IGllZWU4MDIxMV9zY2FuX3JlcXVlc3QgKmh3 X3JlcSkKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ ZHJ2X3ByaXY7Ci0KLQlXQVJOX09OKGh3X3JlcS0+cmVxLm5fY2hhbm5lbHMgPiBISUZfQVBJX01B WF9OQl9DSEFOTkVMUyk7Ci0Jd3ZpZi0+c2Nhbl9yZXEgPSBod19yZXE7Ci0Jc2NoZWR1bGVfd29y aygmd3ZpZi0+c2Nhbl93b3JrKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB3ZnhfY2FuY2VsX2h3 X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYp Ci17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9w cml2OwotCi0Jd3ZpZi0+c2Nhbl9hYm9ydCA9IHRydWU7Ci0JaGlmX3N0b3Bfc2Nhbih3dmlmKTsK LX0KLQotdm9pZCB3Znhfc2Nhbl9jb21wbGV0ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsKLQlj b21wbGV0ZSgmd3ZpZi0+c2Nhbl9jb21wbGV0ZSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvd2Z4L3NjYW4uaCBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc2Nhbi5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBjNzQ5NmE3NjY0NzguLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2 ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBTY2FuIHJl bGF0ZWQgZnVuY3Rpb25zLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29u IExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nvbgot ICovCi0jaWZuZGVmIFdGWF9TQ0FOX0gKLSNkZWZpbmUgV0ZYX1NDQU5fSAotCi0jaW5jbHVkZSA8 bmV0L21hYzgwMjExLmg+Ci0KLXN0cnVjdCB3ZnhfZGV2Owotc3RydWN0IHdmeF92aWY7Ci0KLXZv aWQgd2Z4X2h3X3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotaW50IHdmeF9o d19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm LAotCQlzdHJ1Y3QgaWVlZTgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKLXZvaWQgd2Z4X2NhbmNl bF9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmKTsKLXZvaWQgd2Z4X3NjYW5fY29tcGxldGUoc3RydWN0IHdmeF92aWYgKnd2aWYpOwotCi0j ZW5kaWYgLyogV0ZYX1NDQU5fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9z dGEuYyBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDE5Njc3OWExYjg5YS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93 Zngvc3RhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MDcgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIEltcGxlbWVudGF0aW9uIG9mIG1hYzgw MjExIEFQSS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0 b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2lu Y2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0K LSNpbmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJmd2lvLmgiCi0j aW5jbHVkZSAiYmguaCIKLSNpbmNsdWRlICJrZXkuaCIKLSNpbmNsdWRlICJzY2FuLmgiCi0jaW5j bHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJoaWZfdHguaCIKLSNpbmNsdWRlICJoaWZfdHhfbWli LmgiCi0KLSNkZWZpbmUgSElGX01BWF9BUlBfSVBfQUREUlRBQkxFX0VOVFJJRVMgMgotCi11MzIg d2Z4X3JhdGVfbWFza190b19odyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIHJhdGVzKQotewot CWludCBpOwotCXUzMiByZXQgPSAwOwotCS8vIFdGeCBvbmx5IHN1cHBvcnQgMkdIegotCXN0cnVj dCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gd2Rldi0+aHctPndpcGh5LT5iYW5k c1tOTDgwMjExX0JBTkRfMkdIWl07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0 ZXM7IGkrKykgewotCQlpZiAocmF0ZXMgJiBCSVQoaSkpIHsKLQkJCWlmIChpID49IHNiYW5kLT5u X2JpdHJhdGVzKQotCQkJCWRldl93YXJuKHdkZXYtPmRldiwgInVuc3VwcG9ydGVkIGJhc2ljIHJh dGVcbiIpOwotCQkJZWxzZQotCQkJCXJldCB8PSBCSVQoc2JhbmQtPmJpdHJhdGVzW2ldLmh3X3Zh bHVlKTsKLQkJfQotCX0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIHdmeF9jb29saW5nX3RpbWVv dXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndk ZXYgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAotCQkJCQkgICAgc3RydWN0 IHdmeF9kZXYsCi0JCQkJCSAgICBjb29saW5nX3RpbWVvdXRfd29yayk7Ci0KLQl3ZGV2LT5jaGlw X2Zyb3plbiA9IHRydWU7Ci0Jd2Z4X3R4X3VubG9jayh3ZGV2KTsKLX0KLQotdm9pZCB3Znhfc3Vz cGVuZF9ob3RfZGV2KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBlbnVtIHN0YV9ub3RpZnlfY21kIGNt ZCkKLXsKLQlpZiAoY21kID09IFNUQV9OT1RJRllfQVdBS0UpIHsKLQkJLy8gRGV2aWNlIHJlY292 ZXIgbm9ybWFsIHRlbXBlcmF0dXJlCi0JCWlmIChjYW5jZWxfZGVsYXllZF93b3JrKCZ3ZGV2LT5j b29saW5nX3RpbWVvdXRfd29yaykpCi0JCQl3ZnhfdHhfdW5sb2NrKHdkZXYpOwotCX0gZWxzZSB7 Ci0JCS8vIERldmljZSBpcyB0b28gaG90Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmd2Rldi0+ Y29vbGluZ190aW1lb3V0X3dvcmssIDEwICogSFopOwotCQl3ZnhfdHhfbG9jayh3ZGV2KTsKLQl9 Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF9maWx0ZXJfYmVhY29uKHN0cnVjdCB3ZnhfdmlmICp3dmlm LCBib29sIGZpbHRlcl9iZWFjb24pCi17Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBoaWZfaWVfdGFi bGVfZW50cnkgZmlsdGVyX2llc1tdID0gewotCQl7Ci0JCQkuaWVfaWQgICAgICAgID0gV0xBTl9F SURfVkVORE9SX1NQRUNJRklDLAotCQkJLmhhc19jaGFuZ2VkICA9IDEsCi0JCQkubm9fbG9uZ2Vy ICAgID0gMSwKLQkJCS5oYXNfYXBwZWFyZWQgPSAxLAotCQkJLm91aSAgICAgICAgICA9IHsgMHg1 MCwgMHg2RiwgMHg5QSB9LAotCQl9LCB7Ci0JCQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURfSFRf T1BFUkFUSU9OLAotCQkJLmhhc19jaGFuZ2VkICA9IDEsCi0JCQkubm9fbG9uZ2VyICAgID0gMSwK LQkJCS5oYXNfYXBwZWFyZWQgPSAxLAotCQl9LCB7Ci0JCQkuaWVfaWQgICAgICAgID0gV0xBTl9F SURfRVJQX0lORk8sCi0JCQkuaGFzX2NoYW5nZWQgID0gMSwKLQkJCS5ub19sb25nZXIgICAgPSAx LAotCQkJLmhhc19hcHBlYXJlZCA9IDEsCi0JCX0KLQl9OwotCi0JaWYgKCFmaWx0ZXJfYmVhY29u KSB7Ci0JCWhpZl9iZWFjb25fZmlsdGVyX2NvbnRyb2wod3ZpZiwgMCwgMSk7Ci0JfSBlbHNlIHsK LQkJaGlmX3NldF9iZWFjb25fZmlsdGVyX3RhYmxlKHd2aWYsIDMsIGZpbHRlcl9pZXMpOwotCQlo aWZfYmVhY29uX2ZpbHRlcl9jb250cm9sKHd2aWYsIEhJRl9CRUFDT05fRklMVEVSX0VOQUJMRSwg MCk7Ci0JfQotfQotCi12b2lkIHdmeF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCSAgdW5zaWduZWQgaW50ICp0 b3RhbF9mbGFncywgdTY0IHVudXNlZCkKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IE5VTEw7 Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKLQlib29sIGZpbHRlcl9ic3NpZCwg ZmlsdGVyX3ByYnJlcSwgZmlsdGVyX2JlYWNvbjsKLQotCS8vIE5vdGVzOgotCS8vICAgLSBQcm9i ZSByZXNwb25zZXMgKEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSBhcmUgbmV2ZXIgZmlsdGVyZWQK LQkvLyAgIC0gUFMtUG9sbCAoRklGX1BTUE9MTCkgYXJlIG5ldmVyIGZpbHRlcmVkCi0JLy8gICAt IFJUUywgQ1RTIGFuZCBBY2sgKEZJRl9DT05UUk9MKSBhcmUgYWx3YXlzIGZpbHRlcmVkCi0JLy8g ICAtIEJyb2tlbiBmcmFtZXMgKEZJRl9GQ1NGQUlMIGFuZCBGSUZfUExDUEZBSUwpIGFyZSBhbHdh eXMgZmlsdGVyZWQKLQkvLyAgIC0gRmlybXdhcmUgZG9lcyAoeWV0KSBhbGxvdyB0byBmb3J3YXJk IHVuaWNhc3QgdHJhZmZpYyBzZW50IHRvCi0JLy8gICAgIG90aGVyIHN0YXRpb25zIChha2EuIHBy b21pc2N1b3VzIG1vZGUpCi0JKnRvdGFsX2ZsYWdzICY9IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVND IHwgRklGX0FMTE1VTFRJIHwgRklGX09USEVSX0JTUyB8Ci0JCQlGSUZfUFJPQkVfUkVRIHwgRklG X1BTUE9MTDsKLQotCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOwotCXdoaWxlICgod3Zp ZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgewotCQltdXRleF9sb2NrKCZ3 dmlmLT5zY2FuX2xvY2spOwotCi0JCS8vIE5vdGU6IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIGNv dmVycyBwcm9iZSByZXNwb25zZSBhbmQKLQkJLy8gYmVhY29ucyBmcm9tIG90aGVyIEJTUwotCQlp ZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCQlmaWx0ZXJfYmVh Y29uID0gZmFsc2U7Ci0JCWVsc2UKLQkJCWZpbHRlcl9iZWFjb24gPSB0cnVlOwotCQl3ZnhfZmls dGVyX2JlYWNvbih3dmlmLCBmaWx0ZXJfYmVhY29uKTsKLQotCQlpZiAoKnRvdGFsX2ZsYWdzICYg RklGX09USEVSX0JTUykKLQkJCWZpbHRlcl9ic3NpZCA9IGZhbHNlOwotCQllbHNlCi0JCQlmaWx0 ZXJfYnNzaWQgPSB0cnVlOwotCi0JCS8vIEluIEFQIG1vZGUsIGNoaXAgY2FuIHJlcGx5IHRvIHBy b2JlIHJlcXVlc3QgaXRzZWxmCi0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPQkVfUkVRICYm Ci0JCSAgICB3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJCWRldl9k Ymcod2Rldi0+ZGV2LCAiZG8gbm90IGZvcndhcmQgcHJvYmUgcmVxdWVzdCBpbiBBUCBtb2RlXG4i KTsKLQkJCSp0b3RhbF9mbGFncyAmPSB+RklGX1BST0JFX1JFUTsKLQkJfQotCi0JCWlmICgqdG90 YWxfZmxhZ3MgJiBGSUZfUFJPQkVfUkVRKQotCQkJZmlsdGVyX3ByYnJlcSA9IGZhbHNlOwotCQll bHNlCi0JCQlmaWx0ZXJfcHJicmVxID0gdHJ1ZTsKLQkJaGlmX3NldF9yeF9maWx0ZXIod3ZpZiwg ZmlsdGVyX2Jzc2lkLCBmaWx0ZXJfcHJicmVxKTsKLQotCQltdXRleF91bmxvY2soJnd2aWYtPnNj YW5fbG9jayk7Ci0JfQotCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7Ci19Ci0KLXN0 YXRpYyBpbnQgd2Z4X2dldF9wc190aW1lb3V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sICpl bmFibGVfcHMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuMCA9IE5VTEwsICpj aGFuMSA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJnd2aWYtPndkZXYt Pmh3LT5jb25mOwotCi0JV0FSTighd3ZpZi0+dmlmLT5ic3NfY29uZi5hc3NvYyAmJiBlbmFibGVf cHMsCi0JICAgICAiZW5hYmxlX3BzIGlzIHJlbGlhYmxlIG9ubHkgaWYgYXNzb2NpYXRlZCIpOwot CWlmICh3ZGV2X3RvX3d2aWYod3ZpZi0+d2RldiwgMCkpCi0JCWNoYW4wID0gd2Rldl90b193dmlm KHd2aWYtPndkZXYsIDApLT52aWYtPmJzc19jb25mLmNoYW5kZWYuY2hhbjsKLQlpZiAod2Rldl90 b193dmlmKHd2aWYtPndkZXYsIDEpKQotCQljaGFuMSA9IHdkZXZfdG9fd3ZpZih3dmlmLT53ZGV2 LCAxKS0+dmlmLT5ic3NfY29uZi5jaGFuZGVmLmNoYW47Ci0JaWYgKGNoYW4wICYmIGNoYW4xICYm IGNoYW4wLT5od192YWx1ZSAhPSBjaGFuMS0+aHdfdmFsdWUgJiYKLQkgICAgd3ZpZi0+dmlmLT50 eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCS8vIEl0IGlzIG5lY2Vzc2FyeSB0byBlbmFi bGUgcG93ZXJzYXZlIGlmIGNoYW5uZWxzCi0JCS8vIGFyZSBkaWZmZXJlbnQuCi0JCWlmIChlbmFi bGVfcHMpCi0JCQkqZW5hYmxlX3BzID0gdHJ1ZTsKLQkJaWYgKHd2aWYtPndkZXYtPmZvcmNlX3Bz X3RpbWVvdXQgPiAtMSkKLQkJCXJldHVybiB3dmlmLT53ZGV2LT5mb3JjZV9wc190aW1lb3V0Owot CQllbHNlIGlmICh3ZnhfYXBpX29sZGVyX3RoYW4od3ZpZi0+d2RldiwgMywgMikpCi0JCQlyZXR1 cm4gMDsKLQkJZWxzZQotCQkJcmV0dXJuIDMwOwotCX0KLQlpZiAoZW5hYmxlX3BzKQotCQkqZW5h YmxlX3BzID0gd3ZpZi0+dmlmLT5ic3NfY29uZi5wczsKLQlpZiAod3ZpZi0+d2Rldi0+Zm9yY2Vf cHNfdGltZW91dCA+IC0xKQotCQlyZXR1cm4gd3ZpZi0+d2Rldi0+Zm9yY2VfcHNfdGltZW91dDsK LQllbHNlIGlmICh3dmlmLT52aWYtPmJzc19jb25mLmFzc29jICYmIHd2aWYtPnZpZi0+YnNzX2Nv bmYucHMpCi0JCXJldHVybiBjb25mLT5keW5hbWljX3BzX3RpbWVvdXQ7Ci0JZWxzZQotCQlyZXR1 cm4gLTE7Ci19Ci0KLWludCB3ZnhfdXBkYXRlX3BtKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewot CWludCBwc190aW1lb3V0OwotCWJvb2wgcHM7Ci0KLQlpZiAoIXd2aWYtPnZpZi0+YnNzX2NvbmYu YXNzb2MpCi0JCXJldHVybiAwOwotCXBzX3RpbWVvdXQgPSB3ZnhfZ2V0X3BzX3RpbWVvdXQod3Zp ZiwgJnBzKTsKLQlpZiAoIXBzKQotCQlwc190aW1lb3V0ID0gMDsKLQlXQVJOX09OKHBzX3RpbWVv dXQgPCAwKTsKLQlpZiAod3ZpZi0+dWFwc2RfbWFzaykKLQkJcHNfdGltZW91dCA9IDA7Ci0KLQlp ZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxl dGUsCi0JCQkJCSBUVV9UT19KSUZGSUVTKDUxMikpKQotCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5k ZXYsCi0JCQkgInRpbWVvdXQgd2hpbGUgd2FpdGluZyBvZiBzZXRfcG1fbW9kZV9jb21wbGV0ZVxu Iik7Ci0JcmV0dXJuIGhpZl9zZXRfcG0od3ZpZiwgcHMsIHBzX3RpbWVvdXQpOwotfQotCi1pbnQg d2Z4X2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYsCi0JCSAgIHUxNiBxdWV1ZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9w YXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OwotCXN0 cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQlp bnQgb2xkX3VhcHNkID0gd3ZpZi0+dWFwc2RfbWFzazsKLQotCVdBUk5fT04ocXVldWUgPj0gaHct PnF1ZXVlcyk7Ci0KLQltdXRleF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKLQlhc3NpZ25fYml0 KHF1ZXVlLCAmd3ZpZi0+dWFwc2RfbWFzaywgcGFyYW1zLT51YXBzZCk7Ci0JaGlmX3NldF9lZGNh X3F1ZXVlX3BhcmFtcyh3dmlmLCBxdWV1ZSwgcGFyYW1zKTsKLQlpZiAod3ZpZi0+dmlmLT50eXBl ID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgb2xkX3VhcHNkICE9IHd2aWYtPnVh cHNkX21hc2spIHsKLQkJaGlmX3NldF91YXBzZF9pbmZvKHd2aWYsIHd2aWYtPnVhcHNkX21hc2sp OwotCQl3ZnhfdXBkYXRlX3BtKHd2aWYpOwotCX0KLQltdXRleF91bmxvY2soJndkZXYtPmNvbmZf bXV0ZXgpOwotCXJldHVybiAwOwotfQotCi1pbnQgd2Z4X3NldF9ydHNfdGhyZXNob2xkKHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYg PSBody0+cHJpdjsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IE5VTEw7Ci0KLQl3aGlsZSAoKHd2 aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpCi0JCWhpZl9ydHNfdGhyZXNo b2xkKHd2aWYsIHZhbHVlKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogV1NNIGNhbGxiYWNrcyAqLwot Ci12b2lkIHdmeF9ldmVudF9yZXBvcnRfcnNzaShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTggcmF3 X3JjcGlfcnNzaSkKLXsKLQkvKiBSU1NJOiBzaWduZWQgUTguMCwgUkNQSTogdW5zaWduZWQgUTcu MQotCSAqIFJTU0kgPSBSQ1BJIC8gMiAtIDExMAotCSAqLwotCWludCByY3BpX3Jzc2k7Ci0JaW50 IGNxbV9ldnQ7Ci0KLQlyY3BpX3Jzc2kgPSByYXdfcmNwaV9yc3NpIC8gMiAtIDExMDsKLQlpZiAo cmNwaV9yc3NpIDw9IHd2aWYtPnZpZi0+YnNzX2NvbmYuY3FtX3Jzc2lfdGhvbGQpCi0JCWNxbV9l dnQgPSBOTDgwMjExX0NRTV9SU1NJX1RIUkVTSE9MRF9FVkVOVF9MT1c7Ci0JZWxzZQotCQljcW1f ZXZ0ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfSElHSDsKLQlpZWVlODAyMTFf Y3FtX3Jzc2lfbm90aWZ5KHd2aWYtPnZpZiwgY3FtX2V2dCwgcmNwaV9yc3NpLCBHRlBfS0VSTkVM KTsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X2JlYWNvbl9sb3NzX3dvcmsoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gY29udGFpbmVyX29mKHRvX2Rl bGF5ZWRfd29yayh3b3JrKSwKLQkJCQkJICAgIHN0cnVjdCB3ZnhfdmlmLCBiZWFjb25fbG9zc193 b3JrKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZ3dmlmLT52aWYt PmJzc19jb25mOwotCi0JaWVlZTgwMjExX2JlYWNvbl9sb3NzKHd2aWYtPnZpZik7Ci0Jc2NoZWR1 bGVfZGVsYXllZF93b3JrKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKLQkJCSAgICAgIG1zZWNzX3Rv X2ppZmZpZXMoYnNzX2NvbmYtPmJlYWNvbl9pbnQpKTsKLX0KLQotdm9pZCB3Znhfc2V0X2RlZmF1 bHRfdW5pY2FzdF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIHN0cnVjdCBpZWVl ODAyMTFfdmlmICp2aWYsIGludCBpZHgpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3Ry dWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCi0JaGlmX3dlcF9kZWZhdWx0X2tleV9pZCh3 dmlmLCBpZHgpOwotfQotCi12b2lkIHdmeF9yZXNldChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsK LQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IHd2aWYtPndkZXY7Ci0KLQl3ZnhfdHhfbG9ja19mbHVz aCh3ZGV2KTsKLQloaWZfcmVzZXQod3ZpZiwgZmFsc2UpOwotCXdmeF90eF9wb2xpY3lfaW5pdCh3 dmlmKTsKLQlpZiAod3ZpZl9jb3VudCh3ZGV2KSA8PSAxKQotCQloaWZfc2V0X2Jsb2NrX2Fja19w b2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7Ci0Jd2Z4X3R4X3VubG9jayh3ZGV2KTsKLQl3dmlmLT5q b2luX2luX3Byb2dyZXNzID0gZmFsc2U7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3dmlm LT5iZWFjb25fbG9zc193b3JrKTsKLQl3dmlmID0gIE5VTEw7Ci0Jd2hpbGUgKCh3dmlmID0gd3Zp Zl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKQotCQl3ZnhfdXBkYXRlX3BtKHd2aWYpOwot fQotCi1pbnQgd2Z4X3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVl ODAyMTFfdmlmICp2aWYsCi0JCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCi17Ci0Jc3RydWN0 IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCXN0cnVj dCB3Znhfc3RhX3ByaXYgKnN0YV9wcml2ID0gKHN0cnVjdCB3Znhfc3RhX3ByaXYgKikmc3RhLT5k cnZfcHJpdjsKLQotCXN0YV9wcml2LT52aWZfaWQgPSB3dmlmLT5pZDsKLQotCWlmICh2aWYtPnR5 cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJaGlmX3NldF9tZnAod3ZpZiwgc3RhLT5t ZnAsIHN0YS0+bWZwKTsKLQotCS8vIEluIHN0YXRpb24gbW9kZSwgdGhlIGZpcm13YXJlIGludGVy cHJldHMgbmV3IGxpbmstaWQgYXMgYSBURExTIHBlZXIuCi0JaWYgKHZpZi0+dHlwZSA9PSBOTDgw MjExX0lGVFlQRV9TVEFUSU9OICYmICFzdGEtPnRkbHMpCi0JCXJldHVybiAwOwotCXN0YV9wcml2 LT5saW5rX2lkID0gZmZ6KHd2aWYtPmxpbmtfaWRfbWFwKTsKLQl3dmlmLT5saW5rX2lkX21hcCB8 PSBCSVQoc3RhX3ByaXYtPmxpbmtfaWQpOwotCVdBUk5fT04oIXN0YV9wcml2LT5saW5rX2lkKTsK LQlXQVJOX09OKHN0YV9wcml2LT5saW5rX2lkID49IEhJRl9MSU5LX0lEX01BWCk7Ci0JaGlmX21h cF9saW5rKHd2aWYsIGZhbHNlLCBzdGEtPmFkZHIsIHN0YV9wcml2LT5saW5rX2lkLCBzdGEtPm1m cCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdmeF9zdGFfcmVtb3ZlKHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkgICBzdHJ1Y3QgaWVlZTgw MjExX3N0YSAqc3RhKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3Znhfdmlm ICopdmlmLT5kcnZfcHJpdjsKLQlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9IChzdHJ1 Y3Qgd2Z4X3N0YV9wcml2ICopJnN0YS0+ZHJ2X3ByaXY7Ci0KLQkvLyBTZWUgbm90ZSBpbiB3Znhf c3RhX2FkZCgpCi0JaWYgKCFzdGFfcHJpdi0+bGlua19pZCkKLQkJcmV0dXJuIDA7Ci0JLy8gRklY TUUgYWRkIGEgbXV0ZXg/Ci0JaGlmX21hcF9saW5rKHd2aWYsIHRydWUsIHN0YS0+YWRkciwgc3Rh X3ByaXYtPmxpbmtfaWQsIGZhbHNlKTsKLQl3dmlmLT5saW5rX2lkX21hcCAmPSB+QklUKHN0YV9w cml2LT5saW5rX2lkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3ZnhfdXBsb2FkX2Fw X3RlbXBsYXRlcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2ti OwotCi0Jc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod3ZpZi0+d2Rldi0+aHcsIHd2aWYtPnZp Zik7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCWhpZl9zZXRfdGVtcGxhdGVfZnJh bWUod3ZpZiwgc2tiLCBISUZfVE1QTFRfQkNOLAotCQkJICAgICAgIEFQSV9SQVRFX0lOREVYX0Jf MU1CUFMpOwotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQotCXNrYiA9IGllZWU4MDIxMV9wcm9iZXJl c3BfZ2V0KHd2aWYtPndkZXYtPmh3LCB3dmlmLT52aWYpOwotCWlmICghc2tiKQotCQlyZXR1cm4g LUVOT01FTTsKLQloaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHd2aWYsIHNrYiwgSElGX1RNUExUX1BS QlJFUywKLQkJCSAgICAgICBBUElfUkFURV9JTkRFWF9CXzFNQlBTKTsKLQlkZXZfa2ZyZWVfc2ti KHNrYik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF9zZXRfbWZwX2FwKHN0cnVj dCB3ZnhfdmlmICp3dmlmKQotewotCXN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVh Y29uX2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmKTsKLQljb25zdCBpbnQgaWVvZmZzZXQg PSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKTsKLQlj b25zdCB1MTYgKnB0ciA9ICh1MTYgKiljZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX1JTTiwKLQkJ CQkJCSBza2ItPmRhdGEgKyBpZW9mZnNldCwKLQkJCQkJCSBza2ItPmxlbiAtIGllb2Zmc2V0KTsK LQljb25zdCBpbnQgcGFpcndpc2VfY2lwaGVyX3N1aXRlX2NvdW50X29mZnNldCA9IDggLyBzaXpl b2YodTE2KTsKLQljb25zdCBpbnQgcGFpcndpc2VfY2lwaGVyX3N1aXRlX3NpemUgPSA0IC8gc2l6 ZW9mKHUxNik7Ci0JY29uc3QgaW50IGFrbV9zdWl0ZV9zaXplID0gNCAvIHNpemVvZih1MTYpOwot Ci0JaWYgKHB0cikgewotCQlwdHIgKz0gcGFpcndpc2VfY2lwaGVyX3N1aXRlX2NvdW50X29mZnNl dDsKLQkJaWYgKFdBUk5fT04ocHRyID4gKHUxNiAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKSkpCi0J CQlyZXR1cm47Ci0JCXB0ciArPSAxICsgcGFpcndpc2VfY2lwaGVyX3N1aXRlX3NpemUgKiAqcHRy OwotCQlpZiAoV0FSTl9PTihwdHIgPiAodTE2ICopc2tiX3RhaWxfcG9pbnRlcihza2IpKSkKLQkJ CXJldHVybjsKLQkJcHRyICs9IDEgKyBha21fc3VpdGVfc2l6ZSAqICpwdHI7Ci0JCWlmIChXQVJO X09OKHB0ciA+ICh1MTYgKilza2JfdGFpbF9wb2ludGVyKHNrYikpKQotCQkJcmV0dXJuOwotCQlo aWZfc2V0X21mcCh3dmlmLCAqcHRyICYgQklUKDcpLCAqcHRyICYgQklUKDYpKTsKLQl9Ci19Ci0K LWludCB3Znhfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYg Kil2aWYtPmRydl9wcml2OwotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3ZpZi0+d2RldjsKLQlp bnQgcmV0OwotCi0Jd3ZpZiA9ICBOVUxMOwotCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3 ZGV2LCB3dmlmKSkgIT0gTlVMTCkKLQkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKLQl3dmlmID0gKHN0 cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQl3ZnhfdXBsb2FkX2FwX3RlbXBsYXRlcyh3 dmlmKTsKLQlyZXQgPSBoaWZfc3RhcnQod3ZpZiwgJnZpZi0+YnNzX2NvbmYsIHd2aWYtPmNoYW5u ZWwpOwotCWlmIChyZXQgPiAwKQotCQlyZXR1cm4gLUVJTzsKLQl3Znhfc2V0X21mcF9hcCh3dmlm KTsKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIHdmeF9zdG9wX2FwKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCB3ZnhfdmlmICp3 dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQotCXdmeF9yZXNldCh3dmlm KTsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X2pvaW4oc3RydWN0IHdmeF92aWYgKnd2aWYpCi17Ci0J aW50IHJldDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mID0gJnd2aWYtPnZpZi0+ YnNzX2NvbmY7Ci0Jc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDsKLQl1OCBzc2lkW0lF RUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCWNvbnN0IHU4ICpzc2lkaWUgPSBOVUxMOwotCWludCBz c2lkbGVuID0gMDsKLQotCXdmeF90eF9sb2NrX2ZsdXNoKHd2aWYtPndkZXYpOwotCi0JYnNzID0g Y2ZnODAyMTFfZ2V0X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHksIHd2aWYtPmNoYW5uZWwsCi0J CQkgICAgICAgY29uZi0+YnNzaWQsIE5VTEwsIDAsCi0JCQkgICAgICAgSUVFRTgwMjExX0JTU19U WVBFX0FOWSwgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKLQlpZiAoIWJzcyAmJiAhY29uZi0+aWJz c19qb2luZWQpIHsKLQkJd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsKLQkJcmV0dXJuOwotCX0K LQotCXJjdV9yZWFkX2xvY2soKTsgLy8gcHJvdGVjdCBzc2lkaWUKLQlpZiAoYnNzKQotCQlzc2lk aWUgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NTSUQpOwotCWlmIChzc2lk aWUpIHsKLQkJc3NpZGxlbiA9IHNzaWRpZVsxXTsKLQkJaWYgKHNzaWRsZW4gPiBJRUVFODAyMTFf TUFYX1NTSURfTEVOKQotCQkJc3NpZGxlbiA9IElFRUU4MDIxMV9NQVhfU1NJRF9MRU47Ci0JCW1l bWNweShzc2lkLCAmc3NpZGllWzJdLCBzc2lkbGVuKTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7 Ci0KLQljZmc4MDIxMV9wdXRfYnNzKHd2aWYtPndkZXYtPmh3LT53aXBoeSwgYnNzKTsKLQotCXd2 aWYtPmpvaW5faW5fcHJvZ3Jlc3MgPSB0cnVlOwotCXJldCA9IGhpZl9qb2luKHd2aWYsIGNvbmYs IHd2aWYtPmNoYW5uZWwsIHNzaWQsIHNzaWRsZW4pOwotCWlmIChyZXQpIHsKLQkJaWVlZTgwMjEx X2Nvbm5lY3Rpb25fbG9zcyh3dmlmLT52aWYpOwotCQl3ZnhfcmVzZXQod3ZpZik7Ci0JfSBlbHNl IHsKLQkJLyogRHVlIHRvIGJlYWNvbiBmaWx0ZXJpbmcgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUK LQkJICogQVAncyBiZWFjb24gaXMgbm90IGtub3duIGZvciB0aGUgbWFjODAyMTEgc3RhY2suCi0J CSAqIERpc2FibGUgZmlsdGVyaW5nIHRlbXBvcmFyeSB0byBtYWtlIHN1cmUgdGhlIHN0YWNrCi0J CSAqIHJlY2VpdmVzIGF0IGxlYXN0IG9uZQotCQkgKi8KLQkJd2Z4X2ZpbHRlcl9iZWFjb24od3Zp ZiwgZmFsc2UpOwotCX0KLQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOwotfQotCi1zdGF0aWMg dm9pZCB3Znhfam9pbl9maW5hbGl6ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJCSAgICAgIHN0 cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEg KnN0YSA9IE5VTEw7Ci0JaW50IGFtcGR1X2RlbnNpdHkgPSAwOwotCWJvb2wgZ3JlZW5maWVsZCA9 IGZhbHNlOwotCi0JcmN1X3JlYWRfbG9jaygpOyAvLyBwcm90ZWN0IHN0YQotCWlmIChpbmZvLT5i c3NpZCAmJiAhaW5mby0+aWJzc19qb2luZWQpCi0JCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh3 dmlmLT52aWYsIGluZm8tPmJzc2lkKTsKLQlpZiAoc3RhICYmIHN0YS0+aHRfY2FwLmh0X3N1cHBv cnRlZCkKLQkJYW1wZHVfZGVuc2l0eSA9IHN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHk7Ci0JaWYg KHN0YSAmJiBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQgJiYKLQkgICAgIShpbmZvLT5odF9vcGVy YXRpb25fbW9kZSAmIElFRUU4MDIxMV9IVF9PUF9NT0RFX05PTl9HRl9TVEFfUFJTTlQpKQotCQln cmVlbmZpZWxkID0gISEoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxE KTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXd2aWYtPmpvaW5faW5fcHJvZ3Jlc3MgPSBmYWxz ZTsKLQloaWZfc2V0X2Fzc29jaWF0aW9uX21vZGUod3ZpZiwgYW1wZHVfZGVuc2l0eSwgZ3JlZW5m aWVsZCwKLQkJCQkgaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKLQloaWZfa2VlcF9hbGl2ZV9w ZXJpb2Qod3ZpZiwgMCk7Ci0JLy8gYmVhY29uX2xvc3NfY291bnQgaXMgZGVmaW5lZCB0byA3IGlu IG5ldC9tYWM4MDIxMS9tbG1lLmMuIExldCdzIHVzZQotCS8vIHRoZSBzYW1lIHZhbHVlLgotCWhp Zl9zZXRfYnNzX3BhcmFtcyh3dmlmLCBpbmZvLT5haWQsIDcpOwotCWhpZl9zZXRfYmVhY29uX3dh a2V1cF9wZXJpb2Qod3ZpZiwgMSwgMSk7Ci0Jd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKLX0KLQotaW50 IHdmeF9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFf dmlmICp2aWYpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2 aWYtPmRydl9wcml2OwotCi0Jd2Z4X3VwbG9hZF9hcF90ZW1wbGF0ZXMod3ZpZik7Ci0Jd2Z4X2pv aW4od3ZpZik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgd2Z4X2xlYXZlX2lic3Moc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHdm eF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCi0Jd2Z4X3Jl c2V0KHd2aWYpOwotfQotCi1zdGF0aWMgdm9pZCB3ZnhfZW5hYmxlX2JlYWNvbihzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGUpCi17Ci0JLy8gRHJpdmVyIGhhcyBDb250ZW50IEFmdGVy IERUSU0gQmVhY29uIGluIHF1ZXVlLiBEcml2ZXIgaXMgd2FpdGluZyBmb3IKLQkvLyBhIHNpZ25h bCBmcm9tIHRoZSBmaXJtd2FyZS4gU2luY2Ugd2UgYXJlIGdvaW5nIHRvIHN0b3AgdG8gc2VuZAot CS8vIGJlYWNvbnMsIHRoaXMgc2lnbmFsIHdpbGwgbmV2ZXIgaGFwcGVucy4gU2VlIGFsc28KLQkv LyB3Znhfc3VzcGVuZF9yZXN1bWVfbWMoKQotCWlmICghZW5hYmxlICYmIHdmeF90eF9xdWV1ZXNf aGFzX2NhYih3dmlmKSkgewotCQl3dmlmLT5hZnRlcl9kdGltX3R4X2FsbG93ZWQgPSB0cnVlOwot CQl3ZnhfYmhfcmVxdWVzdF90eCh3dmlmLT53ZGV2KTsKLQl9Ci0JaGlmX2JlYWNvbl90cmFuc21p dCh3dmlmLCBlbmFibGUpOwotfQotCi12b2lkIHdmeF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICBzdHJ1Y3Qg aWVlZTgwMjExX2Jzc19jb25mICppbmZvLCB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiA9IGh3LT5wcml2OwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3Znhf dmlmICopdmlmLT5kcnZfcHJpdjsKLQlpbnQgaTsKLQotCW11dGV4X2xvY2soJndkZXYtPmNvbmZf bXV0ZXgpOwotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUyB8fAotCSAg ICBjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCB8fAotCSAgICBjaGFuZ2VkICYgQlNT X0NIQU5HRURfQlNTSUQpIHsKLQkJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFU SU9OKQotCQkJd2Z4X2pvaW4od3ZpZik7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdF RF9BU1NPQykgewotCQlpZiAoaW5mby0+YXNzb2MgfHwgaW5mby0+aWJzc19qb2luZWQpCi0JCQl3 Znhfam9pbl9maW5hbGl6ZSh3dmlmLCBpbmZvKTsKLQkJZWxzZSBpZiAoIWluZm8tPmFzc29jICYm IHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJd2Z4X3Jlc2V0KHd2aWYp OwotCQllbHNlCi0JCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIlczogbWlzdW5kZXJzdG9vZCBjaGFu Z2U6IEFTU09DXG4iLAotCQkJCSBfX2Z1bmNfXyk7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1Nf Q0hBTkdFRF9CRUFDT05fSU5GTykgewotCQlpZiAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBF X1NUQVRJT04pCi0JCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIlczogbWlzdW5kZXJzdG9vZCBjaGFu Z2U6IEJFQUNPTl9JTkZPXG4iLAotCQkJCSBfX2Z1bmNfXyk7Ci0JCWhpZl9zZXRfYmVhY29uX3dh a2V1cF9wZXJpb2Qod3ZpZiwgaW5mby0+ZHRpbV9wZXJpb2QsCi0JCQkJCSAgICAgaW5mby0+ZHRp bV9wZXJpb2QpOwotCQkvLyBXZSB0ZW1wb3JhcnkgZm9yd2FyZGVkIGJlYWNvbiBmb3Igam9pbiBw cm9jZXNzLiBJdCBpcyBub3cgbm8KLQkJLy8gbW9yZSBuZWNlc3NhcnkuCi0JCXdmeF9maWx0ZXJf YmVhY29uKHd2aWYsIHRydWUpOwotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVJQ X0ZJTFRFUikgewotCQlmb3IgKGkgPSAwOyBpIDwgSElGX01BWF9BUlBfSVBfQUREUlRBQkxFX0VO VFJJRVM7IGkrKykgewotCQkJX19iZTMyICphcnBfYWRkciA9ICZpbmZvLT5hcnBfYWRkcl9saXN0 W2ldOwotCi0JCQlpZiAoaW5mby0+YXJwX2FkZHJfY250ID4gSElGX01BWF9BUlBfSVBfQUREUlRB QkxFX0VOVFJJRVMpCi0JCQkJYXJwX2FkZHIgPSBOVUxMOwotCQkJaWYgKGkgPj0gaW5mby0+YXJw X2FkZHJfY250KQotCQkJCWFycF9hZGRyID0gTlVMTDsKLQkJCWhpZl9zZXRfYXJwX2lwdjRfZmls dGVyKHd2aWYsIGksIGFycF9hZGRyKTsKLQkJfQotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NI QU5HRURfQVBfUFJPQkVfUkVTUCB8fAotCSAgICBjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09O KQotCQl3ZnhfdXBsb2FkX2FwX3RlbXBsYXRlcyh3dmlmKTsKLQotCWlmIChjaGFuZ2VkICYgQlNT X0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpCi0JCXdmeF9lbmFibGVfYmVhY29uKHd2aWYsIGluZm8t PmVuYWJsZV9iZWFjb24pOwotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9LRUVQX0FMSVZF KQotCQloaWZfa2VlcF9hbGl2ZV9wZXJpb2Qod3ZpZiwgaW5mby0+bWF4X2lkbGVfcGVyaW9kICoK LQkJCQkJICAgIFVTRUNfUEVSX1RVIC8gVVNFQ19QRVJfTVNFQyk7Ci0KLQlpZiAoY2hhbmdlZCAm IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkKLQkJaGlmX2VycF91c2VfcHJvdGVjdGlvbih3dmlm LCBpbmZvLT51c2VfY3RzX3Byb3QpOwotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBf U0xPVCkKLQkJaGlmX3Nsb3RfdGltZSh3dmlmLCBpbmZvLT51c2Vfc2hvcnRfc2xvdCA/IDkgOiAy MCk7Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0NRTSkKLQkJaGlmX3NldF9yY3BpX3Jz c2lfdGhyZXNob2xkKHd2aWYsIGluZm8tPmNxbV9yc3NpX3Rob2xkLAotCQkJCQkgICAgaW5mby0+ Y3FtX3Jzc2lfaHlzdCk7Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX1RYUE9XRVIpCi0J CWhpZl9zZXRfb3V0cHV0X3Bvd2VyKHd2aWYsIGluZm8tPnR4cG93ZXIpOwotCi0JaWYgKGNoYW5n ZWQgJiBCU1NfQ0hBTkdFRF9QUykKLQkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKLQotCW11dGV4X3Vu bG9jaygmd2Rldi0+Y29uZl9tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3VwZGF0ZV90aW0o c3RydWN0IHdmeF92aWYgKnd2aWYpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MTYgdGlt X29mZnNldCwgdGltX2xlbmd0aDsKLQl1OCAqdGltX3B0cjsKLQotCXNrYiA9IGllZWU4MDIxMV9i ZWFjb25fZ2V0X3RpbSh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmLAotCQkJCSAgICAgICAmdGlt X29mZnNldCwgJnRpbV9sZW5ndGgpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT0VOVDsKLQl0 aW1fcHRyID0gc2tiLT5kYXRhICsgdGltX29mZnNldDsKLQotCWlmICh0aW1fb2Zmc2V0ICYmIHRp bV9sZW5ndGggPj0gNikgewotCQkvKiBJZ25vcmUgRFRJTSBjb3VudCBmcm9tIG1hYzgwMjExOgot CQkgKiBmaXJtd2FyZSBoYW5kbGVzIERUSU0gaW50ZXJuYWxseS4KLQkJICovCi0JCXRpbV9wdHJb Ml0gPSAwOwotCi0JCS8qIFNldC9yZXNldCBhaWQwIGJpdCAqLwotCQlpZiAod2Z4X3R4X3F1ZXVl c19oYXNfY2FiKHd2aWYpKQotCQkJdGltX3B0cls0XSB8PSAxOwotCQllbHNlCi0JCQl0aW1fcHRy WzRdICY9IH4xOwotCX0KLQotCWhpZl91cGRhdGVfaWVfYmVhY29uKHd2aWYsIHRpbV9wdHIsIHRp bV9sZW5ndGgpOwotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0 aWMgdm9pZCB3ZnhfdXBkYXRlX3RpbV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsK LQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3Zp ZiwgdXBkYXRlX3RpbV93b3JrKTsKLQotCXdmeF91cGRhdGVfdGltKHd2aWYpOwotfQotCi1pbnQg d2Z4X3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3Rh ICpzdGEsIGJvb2wgc2V0KQotewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7Ci0J c3RydWN0IHdmeF9zdGFfcHJpdiAqc3RhX2RldiA9IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopJnN0 YS0+ZHJ2X3ByaXY7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2Rldiwg c3RhX2Rldi0+dmlmX2lkKTsKLQotCWlmICghd3ZpZikgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYs ICIlczogcmVjZWl2ZWQgZXZlbnQgZm9yIG5vbi1leGlzdGVudCB2aWZcbiIsIF9fZnVuY19fKTsK LQkJcmV0dXJuIC1FSU87Ci0JfQotCXNjaGVkdWxlX3dvcmsoJnd2aWYtPnVwZGF0ZV90aW1fd29y ayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgd2Z4X3N1c3BlbmRfcmVzdW1lX21jKHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBlbnVtIHN0YV9ub3RpZnlfY21kIG5vdGlmeV9jbWQpCi17Ci0JaWYgKG5v dGlmeV9jbWQgIT0gU1RBX05PVElGWV9BV0FLRSkKLQkJcmV0dXJuOwotCVdBUk4oIXdmeF90eF9x dWV1ZXNfaGFzX2NhYih3dmlmKSwgImluY29ycmVjdCBzZXF1ZW5jZSIpOwotCVdBUk4od3ZpZi0+ YWZ0ZXJfZHRpbV90eF9hbGxvd2VkLCAiaW5jb3JyZWN0IHNlcXVlbmNlIik7Ci0Jd3ZpZi0+YWZ0 ZXJfZHRpbV90eF9hbGxvd2VkID0gdHJ1ZTsKLQl3ZnhfYmhfcmVxdWVzdF90eCh3dmlmLT53ZGV2 KTsKLX0KLQotaW50IHdmeF9hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0J CSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJICAgICBzdHJ1Y3QgaWVlZTgwMjEx X2FtcGR1X3BhcmFtcyAqcGFyYW1zKQotewotCS8vIEFnZ3JlZ2F0aW9uIGlzIGltcGxlbWVudGVk IGZ1bGx5IGluIGZpcm13YXJlCi0Jc3dpdGNoIChwYXJhbXMtPmFjdGlvbikgewotCWNhc2UgSUVF RTgwMjExX0FNUERVX1JYX1NUQVJUOgotCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6Ci0J CS8vIEp1c3QgYWNrbm93bGVkZ2UgaXQgdG8gZW5hYmxlIGZyYW1lIHJlLW9yZGVyaW5nCi0JCXJl dHVybiAwOwotCWRlZmF1bHQ6Ci0JCS8vIExlYXZlIHRoZSBmaXJtd2FyZSBkb2luZyBpdHMgYnVz aW5lc3MgZm9yIHR4IGFnZ3JlZ2F0aW9uCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQotfQotCi1p bnQgd2Z4X2FkZF9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkgICAgc3RydWN0 IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQg d2Z4X3JlbW92ZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJc3RydWN0IGll ZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCi17Ci19Ci0KLXZvaWQgd2Z4X2NoYW5nZV9jaGFu Y3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4 X2NvbmYgKmNvbmYsCi0JCQl1MzIgY2hhbmdlZCkKLXsKLX0KLQotaW50IHdmeF9hc3NpZ25fdmlm X2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZikKLXsKLQlzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0Jc3Ry dWN0IGllZWU4MDIxMV9jaGFubmVsICpjaCA9IGNvbmYtPmRlZi5jaGFuOwotCi0JV0FSTih3dmlm LT5jaGFubmVsLCAiY2hhbm5lbCBvdmVyd3JpdGUiKTsKLQl3dmlmLT5jaGFubmVsID0gY2g7Ci0K LQlyZXR1cm4gMDsKLX0KLQotdm9pZCB3ZnhfdW5hc3NpZ25fdmlmX2NoYW5jdHgoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJ ICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IHdm eF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCXN0cnVjdCBp ZWVlODAyMTFfY2hhbm5lbCAqY2ggPSBjb25mLT5kZWYuY2hhbjsKLQotCVdBUk4od3ZpZi0+Y2hh bm5lbCAhPSBjaCwgImNoYW5uZWwgbWlzbWF0Y2giKTsKLQl3dmlmLT5jaGFubmVsID0gTlVMTDsK LX0KLQotaW50IHdmeF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2Vk KQotewotCXJldHVybiAwOwotfQotCi1pbnQgd2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0JaW50IGksIHJldCA9 IDA7Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0KLQl2aWYtPmRyaXZlcl9m bGFncyB8PSBJRUVFODAyMTFfVklGX0JFQUNPTl9GSUxURVIgfAotCQkJICAgICBJRUVFODAyMTFf VklGX1NVUFBPUlRTX1VBUFNEIHwKLQkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19DUU1f UlNTSTsKLQotCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOwotCi0Jc3dpdGNoICh2aWYt PnR5cGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JY2FzZSBOTDgwMjExX0lG VFlQRV9BREhPQzoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCQlicmVhazsKLQlkZWZhdWx0 OgotCQltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOwotCQlyZXR1cm4gLUVPUE5PVFNV UFA7Ci0JfQotCi0JLy8gRklYTUU6IHByZWZlciB1c2Ugb2YgY29udGFpbmVyX29mKCkgdG8gZ2V0 IHZpZgotCXd2aWYtPnZpZiA9IHZpZjsKLQl3dmlmLT53ZGV2ID0gd2RldjsKLQotCXd2aWYtPmxp bmtfaWRfbWFwID0gMTsgLy8gbGluay1pZCAwIGlzIHJlc2VydmVkIGZvciBtdWx0aWNhc3QKLQlJ TklUX1dPUksoJnd2aWYtPnVwZGF0ZV90aW1fd29yaywgd2Z4X3VwZGF0ZV90aW1fd29yayk7Ci0J SU5JVF9ERUxBWUVEX1dPUksoJnd2aWYtPmJlYWNvbl9sb3NzX3dvcmssIHdmeF9iZWFjb25fbG9z c193b3JrKTsKLQotCWluaXRfY29tcGxldGlvbigmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUp OwotCWNvbXBsZXRlKCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSk7Ci0JSU5JVF9XT1JLKCZ3 dmlmLT50eF9wb2xpY3lfdXBsb2FkX3dvcmssIHdmeF90eF9wb2xpY3lfdXBsb2FkX3dvcmspOwot Ci0JbXV0ZXhfaW5pdCgmd3ZpZi0+c2Nhbl9sb2NrKTsKLQlpbml0X2NvbXBsZXRpb24oJnd2aWYt PnNjYW5fY29tcGxldGUpOwotCUlOSVRfV09SSygmd3ZpZi0+c2Nhbl93b3JrLCB3ZnhfaHdfc2Nh bl93b3JrKTsKLQotCXdmeF90eF9xdWV1ZXNfaW5pdCh3dmlmKTsKLQl3ZnhfdHhfcG9saWN5X2lu aXQod3ZpZik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ZGV2LT52aWYpOyBpKysp IHsKLQkJaWYgKCF3ZGV2LT52aWZbaV0pIHsKLQkJCXdkZXYtPnZpZltpXSA9IHZpZjsKLQkJCXd2 aWYtPmlkID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCVdBUk4oaSA9PSBBUlJBWV9TSVpFKHdk ZXYtPnZpZiksICJ0cnkgdG8gaW5zdGFudGlhdGUgbW9yZSB2aWYgdGhhbiBzdXBwb3J0ZWQiKTsK LQotCWhpZl9zZXRfbWFjYWRkcih3dmlmLCB2aWYtPmFkZHIpOwotCi0JbXV0ZXhfdW5sb2NrKCZ3 ZGV2LT5jb25mX211dGV4KTsKLQotCXd2aWYgPSBOVUxMOwotCXdoaWxlICgod3ZpZiA9IHd2aWZf aXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgewotCQkvLyBDb21ibyBtb2RlIGRvZXMgbm90 IHN1cHBvcnQgQmxvY2sgQWNrcy4gV2UgY2FuIHJlLWVuYWJsZSB0aGVtCi0JCWlmICh3dmlmX2Nv dW50KHdkZXYpID09IDEpCi0JCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHhGRiwg MHhGRik7Ci0JCWVsc2UKLQkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweDAwLCAw eDAwKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCB3ZnhfcmVtb3ZlX2ludGVyZmFjZShz dHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlz dHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0g KHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQotCXdhaXRfZm9yX2NvbXBsZXRpb25f dGltZW91dCgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUsIG1zZWNzX3RvX2ppZmZpZXMoMzAw KSk7Ci0Jd2Z4X3R4X3F1ZXVlc19jaGVja19lbXB0eSh3dmlmKTsKLQotCW11dGV4X2xvY2soJndk ZXYtPmNvbmZfbXV0ZXgpOwotCVdBUk4od3ZpZi0+bGlua19pZF9tYXAgIT0gMSwgImNvcnJ1cHRl ZCBzdGF0ZSIpOwotCi0JaGlmX3Jlc2V0KHd2aWYsIGZhbHNlKTsKLQloaWZfc2V0X21hY2FkZHIo d3ZpZiwgTlVMTCk7Ci0Jd2Z4X3R4X3BvbGljeV9pbml0KHd2aWYpOwotCi0JY2FuY2VsX2RlbGF5 ZWRfd29ya19zeW5jKCZ3dmlmLT5iZWFjb25fbG9zc193b3JrKTsKLQl3ZGV2LT52aWZbd3ZpZi0+ aWRdID0gTlVMTDsKLQl3dmlmLT52aWYgPSBOVUxMOwotCi0JbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5j b25mX211dGV4KTsKLQotCXd2aWYgPSBOVUxMOwotCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0 ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgewotCQkvLyBDb21ibyBtb2RlIGRvZXMgbm90IHN1cHBv cnQgQmxvY2sgQWNrcy4gV2UgY2FuIHJlLWVuYWJsZSB0aGVtCi0JCWlmICh3dmlmX2NvdW50KHdk ZXYpID09IDEpCi0JCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7 Ci0JCWVsc2UKLQkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweDAwLCAweDAwKTsK LQl9Ci19Ci0KLWludCB3Znhfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0JcmV0 dXJuIDA7Ci19Ci0KLXZvaWQgd2Z4X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0J c3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKLQotCVdBUk5fT04oIXNrYl9xdWV1ZV9l bXB0eV9sb2NrbGVzcygmd2Rldi0+dHhfcGVuZGluZykpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL3dmeC9zdGEuaCBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmgKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3YjVkZjVlYTRlNi4uMDAwMDAwMDAwMDAwCi0tLSBhL2Ry aXZlcnMvc3RhZ2luZy93Zngvc3RhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0v KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogSW1wbGVt ZW50YXRpb24gb2YgbWFjODAyMTEgQVBJLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIw LCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1F cmljc3NvbgotICovCi0jaWZuZGVmIFdGWF9TVEFfSAotI2RlZmluZSBXRlhfU1RBX0gKLQotI2lu Y2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi1zdHJ1Y3Qgd2Z4X2RldjsKLXN0cnVjdCB3Znhfdmlm OwotCi1zdHJ1Y3Qgd2Z4X3N0YV9wcml2IHsKLQlpbnQgbGlua19pZDsKLQlpbnQgdmlmX2lkOwot fTsKLQotLy8gbWFjODAyMTEgaW50ZXJmYWNlCi1pbnQgd2Z4X3N0YXJ0KHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3KTsKLXZvaWQgd2Z4X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotaW50 IHdmeF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKTsKLWludCB3 Znhfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSk7 Ci12b2lkIHdmeF9zZXRfZGVmYXVsdF91bmljYXN0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywKLQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgaW50IGlkeCk7Ci12b2lkIHdmeF9j b25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgY2hh bmdlZF9mbGFncywKLQkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IHVudXNlZCk7 Ci0KLWludCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZik7Ci12b2lkIHdmeF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKLWludCB3Znhfc3Rh cnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYp Owotdm9pZCB3Znhfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZik7Ci1pbnQgd2Z4X2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Ci12b2lkIHdmeF9sZWF2ZV9pYnNzKHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKLWludCB3Znhf Y29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZp ZiwKLQkJdTE2IHF1ZXVlLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAq cGFyYW1zKTsKLXZvaWQgd2Z4X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNz X2NvbmYgKmluZm8sIHUzMiBjaGFuZ2VkKTsKLWludCB3Znhfc3RhX2FkZChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJc3RydWN0IGllZWU4MDIx MV9zdGEgKnN0YSk7Ci1pbnQgd2Z4X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpz dGEpOwotdm9pZCB3Znhfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLCBzdHJ1 Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKLWludCB3Znhfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBzZXQpOwotaW50IHdmeF9h bXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYsCi0JCSAgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcyk7Ci1p bnQgd2Z4X2FkZF9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkgICAgc3RydWN0 IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpOwotdm9pZCB3ZnhfcmVtb3ZlX2NoYW5jdHgo c3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29u ZiAqY29uZik7Ci12b2lkIHdmeF9jaGFuZ2VfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywKLQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mLCB1MzIgY2hhbmdlZCk7 Ci1pbnQgd2Z4X2Fzc2lnbl92aWZfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3Ry dWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9j b25mICpjb25mKTsKLXZvaWQgd2Z4X3VuYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgICAg IHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKTsKLQotLy8gV1NNIENhbGxiYWNr cwotdm9pZCB3ZnhfY29vbGluZ190aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3Jr KTsKLXZvaWQgd2Z4X3N1c3BlbmRfaG90X2RldihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgZW51bSBz dGFfbm90aWZ5X2NtZCBjbWQpOwotdm9pZCB3Znhfc3VzcGVuZF9yZXN1bWVfbWMoc3RydWN0IHdm eF92aWYgKnd2aWYsIGVudW0gc3RhX25vdGlmeV9jbWQgY21kKTsKLXZvaWQgd2Z4X2V2ZW50X3Jl cG9ydF9yc3NpKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1OCByYXdfcmNwaV9yc3NpKTsKLWludCB3 ZnhfdXBkYXRlX3BtKHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKLQotLy8gT3RoZXIgSGVscGVycwot dm9pZCB3ZnhfcmVzZXQoc3RydWN0IHdmeF92aWYgKnd2aWYpOwotdTMyIHdmeF9yYXRlX21hc2tf dG9faHcoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiByYXRlcyk7Ci0KLSNlbmRpZiAvKiBXRlhf U1RBX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvdHJhY2VzLmggYi9kcml2 ZXJzL3N0YWdpbmcvd2Z4L3RyYWNlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl MzRjN2E1MzhjNjUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3RyYWNl cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAxICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBUcmFjZXBvaW50cyBkZWZpbml0aW9ucy4K LSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIElu Yy4KLSAqLwotCi0jdW5kZWYgVFJBQ0VfU1lTVEVNCi0jZGVmaW5lIFRSQUNFX1NZU1RFTSB3ZngK LQotI2lmICFkZWZpbmVkKF9XRlhfVFJBQ0VfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVM VElfUkVBRCkKLSNkZWZpbmUgX1dGWF9UUkFDRV9ICi0KLSNpbmNsdWRlIDxsaW51eC90cmFjZXBv aW50Lmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJidXMuaCIKLSNp bmNsdWRlICJoaWZfYXBpX2NtZC5oIgotI2luY2x1ZGUgImhpZl9hcGlfbWliLmgiCi0KLS8qIFRo ZSBoZWxsIGJlbG93IG5lZWQgc29tZSBleHBsYW5hdGlvbnMuIEZvciBlYWNoIHN5bWJvbGljIG51 bWJlciwgd2UgbmVlZCB0bwotICogZGVmaW5lIGl0IHdpdGggVFJBQ0VfREVGSU5FX0VOVU0oKSBh bmQgaW4gYSBsaXN0IGZvciBfX3ByaW50X3N5bWJvbGljLgotICoKLSAqICAgMS4gRGVmaW5lIGEg bmV3IG1hY3JvIHRoYXQgY2FsbCBUUkFDRV9ERUZJTkVfRU5VTSgpOgotICoKLSAqICAgICAgICAg ICNkZWZpbmUgeHh4X25hbWUoc3ltKSBUUkFDRV9ERUZJTkVfRU5VTShzeW0pOwotICoKLSAqICAg Mi4gRGVmaW5lIGxpc3Qgb2YgYWxsIHN5bWJvbHM6Ci0gKgotICogICAgICAgICAgI2RlZmluZSBs aXN0X25hbWVzICAgICBcCi0gKiAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgIFwKLSAq ICAgICAgICAgICAgIHh4eF9uYW1lKFhYWCkgICAgICAgXAotICogICAgICAgICAgICAgLi4uCi0g KgotICogICAzLiBJbnN0YW50aWF0ZSB0aGF0IGxpc3RfbmFtZXM6Ci0gKgotICogICAgICAgICAg bGlzdF9uYW1lcwotICoKLSAqICAgNC4gUmVkZWZpbmUgeHh4X25hbWUoKSBhcyBhbiBlbnRyeSBv ZiBhcnJheSBmb3IgX19wcmludF9zeW1ib2xpYygpCi0gKgotICogICAgICAgICAgI3VuZGVmIHh4 eF9uYW1lCi0gKiAgICAgICAgICAjZGVmaW5lIHh4eF9uYW1lKG1zZykgeyBtc2csICNtc2cgfSwK LSAqCi0gKiAgIDUuIGxpc3RfbmFtZSBjYW4gbm93IG5lYXJseSBiZSB1c2VkIHdpdGggX19wcmlu dF9zeW1ib2xpYygpIGJ1dCwKLSAqICAgICAgX19wcmludF9zeW1ib2xpYygpIGRpc2xpa2UgbGFz dCBjb21tYSBvZiBsaXN0LiBTbyB3ZSBkZWZpbmUgYSBuZXcgbGlzdAotICogICAgICB3aXRoIGEg ZHVtbXkgZWxlbWVudDoKLSAqCi0gKiAgICAgICAgICAjZGVmaW5lIGxpc3RfZm9yX3ByaW50X3N5 bWJvbGljIGxpc3RfbmFtZXMgeyAtMSwgTlVMTCB9Ci0gKi8KLQotI2RlZmluZSBfaGlmX21zZ19s aXN0ICAgICAgICAgICAgICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKEFERF9LRVkpICAgICAg ICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShCRUFDT05fVFJBTlNNSVQpICAgICAgIFwKLQloaWZf Y25mX25hbWUoRURDQV9RVUVVRV9QQVJBTVMpICAgICBcCi0JaGlmX2NuZl9uYW1lKEpPSU4pICAg ICAgICAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShNQVBfTElOSykgICAgICAgICAgICAgIFwK LQloaWZfY25mX25hbWUoUkVBRF9NSUIpICAgICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKFJF TU9WRV9LRVkpICAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShSRVNFVCkgICAgICAgICAgICAg ICAgIFwKLQloaWZfY25mX25hbWUoU0VUX0JTU19QQVJBTVMpICAgICAgICBcCi0JaGlmX2NuZl9u YW1lKFNFVF9QTV9NT0RFKSAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShTVEFSVCkgICAgICAg ICAgICAgICAgIFwKLQloaWZfY25mX25hbWUoU1RBUlRfU0NBTikgICAgICAgICAgICBcCi0JaGlm X2NuZl9uYW1lKFNUT1BfU0NBTikgICAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShUWCkgICAg ICAgICAgICAgICAgICAgIFwKLQloaWZfY25mX25hbWUoTVVMVElfVFJBTlNNSVQpICAgICAgICBc Ci0JaGlmX2NuZl9uYW1lKFVQREFURV9JRSkgICAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShX UklURV9NSUIpICAgICAgICAgICAgIFwKLQloaWZfY25mX25hbWUoQ09ORklHVVJBVElPTikgICAg ICAgICBcCi0JaGlmX2NuZl9uYW1lKENPTlRST0xfR1BJTykgICAgICAgICAgXAotCWhpZl9jbmZf bmFtZShQUkVWRU5UX1JPTExCQUNLKSAgICAgIFwKLQloaWZfY25mX25hbWUoU0VUX1NMX01BQ19L RVkpICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKFNMX0NPTkZJR1VSRSkgICAgICAgICAgXAotCWhp Zl9jbmZfbmFtZShTTF9FWENIQU5HRV9QVUJfS0VZUykgIFwKLQloaWZfY25mX25hbWUoU0hVVF9E T1dOKSAgICAgICAgICAgICBcCi0JaGlmX2luZF9uYW1lKEVWRU5UKSAgICAgICAgICAgICAgICAg XAotCWhpZl9pbmRfbmFtZShKT0lOX0NPTVBMRVRFKSAgICAgICAgIFwKLQloaWZfaW5kX25hbWUo UlgpICAgICAgICAgICAgICAgICAgICBcCi0JaGlmX2luZF9uYW1lKFNDQU5fQ01QTCkgICAgICAg ICAgICAgXAotCWhpZl9pbmRfbmFtZShTRVRfUE1fTU9ERV9DTVBMKSAgICAgIFwKLQloaWZfaW5k X25hbWUoU1VTUEVORF9SRVNVTUVfVFgpICAgICBcCi0JaGlmX2luZF9uYW1lKFNMX0VYQ0hBTkdF X1BVQl9LRVlTKSAgXAotCWhpZl9pbmRfbmFtZShFUlJPUikgICAgICAgICAgICAgICAgIFwKLQlo aWZfaW5kX25hbWUoRVhDRVBUSU9OKSAgICAgICAgICAgICBcCi0JaGlmX2luZF9uYW1lKEdFTkVS SUMpICAgICAgICAgICAgICAgXAotCWhpZl9pbmRfbmFtZShXQUtFVVApICAgICAgICAgICAgICAg IFwKLQloaWZfaW5kX25hbWUoU1RBUlRVUCkKLQotI2RlZmluZSBoaWZfbXNnX2xpc3RfZW51bSBf aGlmX21zZ19saXN0Ci0KLSN1bmRlZiBoaWZfY25mX25hbWUKLSN1bmRlZiBoaWZfaW5kX25hbWUK LSNkZWZpbmUgaGlmX2NuZl9uYW1lKG1zZykgVFJBQ0VfREVGSU5FX0VOVU0oSElGX0NORl9JRF8j I21zZyk7Ci0jZGVmaW5lIGhpZl9pbmRfbmFtZShtc2cpIFRSQUNFX0RFRklORV9FTlVNKEhJRl9J TkRfSURfIyNtc2cpOwotaGlmX21zZ19saXN0X2VudW0KLSN1bmRlZiBoaWZfY25mX25hbWUKLSN1 bmRlZiBoaWZfaW5kX25hbWUKLSNkZWZpbmUgaGlmX2NuZl9uYW1lKG1zZykgeyBISUZfQ05GX0lE XyMjbXNnLCAjbXNnIH0sCi0jZGVmaW5lIGhpZl9pbmRfbmFtZShtc2cpIHsgSElGX0lORF9JRF8j I21zZywgI21zZyB9LAotI2RlZmluZSBoaWZfbXNnX2xpc3QgaGlmX21zZ19saXN0X2VudW0geyAt MSwgTlVMTCB9Ci0KLSNkZWZpbmUgX2hpZl9taWJfbGlzdCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotCWhpZl9taWJfbmFtZShBUlBfSVBfQUREUkVTU0VTX1RBQkxFKSAgICAgICAg IFwKLQloaWZfbWliX25hbWUoQVJQX0tFRVBfQUxJVkVfUEVSSU9EKSAgICAgICAgICBcCi0JaGlm X21pYl9uYW1lKEJFQUNPTl9GSUxURVJfRU5BQkxFKSAgICAgICAgICAgXAotCWhpZl9taWJfbmFt ZShCRUFDT05fRklMVEVSX1RBQkxFKSAgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoQkVBQ09O X1NUQVRTKSAgICAgICAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKEJFQUNPTl9XQUtFVVBf UEVSSU9EKSAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShCTE9DS19BQ0tfUE9MSUNZKSAgICAg ICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoQ0NBX0NPTkZJRykgICAgICAgICAgICAgICAgICAg ICBcCi0JaGlmX21pYl9uYW1lKENPTkZJR19EQVRBX0ZJTFRFUikgICAgICAgICAgICAgXAotCWhp Zl9taWJfbmFtZShDT1VOVEVSU19UQUJMRSkgICAgICAgICAgICAgICAgIFwKLQloaWZfbWliX25h bWUoQ1VSUkVOVF9UWF9QT1dFUl9MRVZFTCkgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKERPVDEx X01BQ19BRERSRVNTKSAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShET1QxMV9NQVhfUkVD RUlWRV9MSUZFVElNRSkgICAgIFwKLQloaWZfbWliX25hbWUoRE9UMTFfTUFYX1RSQU5TTUlUX01T RFVfTElGRVRJTUUpIFwKLQloaWZfbWliX25hbWUoRE9UMTFfUlRTX1RIUkVTSE9MRCkgICAgICAg ICAgICBcCi0JaGlmX21pYl9uYW1lKERPVDExX1dFUF9ERUZBVUxUX0tFWV9JRCkgICAgICAgXAot CWhpZl9taWJfbmFtZShFVEhFUlRZUEVfREFUQUZSQU1FX0NPTkRJVElPTikgIFwKLQloaWZfbWli X25hbWUoRVhURU5ERURfQ09VTlRFUlNfVEFCTEUpICAgICAgICBcCi0JaGlmX21pYl9uYW1lKEdM X0JMT0NLX0FDS19JTkZPKSAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShHTF9PUEVSQVRJ T05BTF9QT1dFUl9NT0RFKSAgICAgIFwKLQloaWZfbWliX25hbWUoR0xfU0VUX01VTFRJX01TRykg ICAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKEdSUF9TRVFfQ09VTlRFUikgICAgICAgICAg ICAgICAgXAotCWhpZl9taWJfbmFtZShJTkFDVElWSVRZX1RJTUVSKSAgICAgICAgICAgICAgIFwK LQloaWZfbWliX25hbWUoSU5URVJGQUNFX1BST1RFQ1RJT04pICAgICAgICAgICBcCi0JaGlmX21p Yl9uYW1lKElQVjRfQUREUl9EQVRBRlJBTUVfQ09ORElUSU9OKSAgXAotCWhpZl9taWJfbmFtZShJ UFY2X0FERFJfREFUQUZSQU1FX0NPTkRJVElPTikgIFwKLQloaWZfbWliX25hbWUoS0VFUF9BTElW RV9QRVJJT0QpICAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKE1BQ19BRERSX0RBVEFGUkFN RV9DT05ESVRJT04pICAgXAotCWhpZl9taWJfbmFtZShNQUdJQ19EQVRBRlJBTUVfQ09ORElUSU9O KSAgICAgIFwKLQloaWZfbWliX25hbWUoTUFYX1RYX1BPV0VSX0xFVkVMKSAgICAgICAgICAgICBc Ci0JaGlmX21pYl9uYW1lKE5PTl9FUlBfUFJPVEVDVElPTikgICAgICAgICAgICAgXAotCWhpZl9t aWJfbmFtZShOU19JUF9BRERSRVNTRVNfVEFCTEUpICAgICAgICAgIFwKLQloaWZfbWliX25hbWUo T1ZFUlJJREVfSU5URVJOQUxfVFhfUkFURSkgICAgICBcCi0JaGlmX21pYl9uYW1lKFBPUlRfREFU QUZSQU1FX0NPTkRJVElPTikgICAgICAgXAotCWhpZl9taWJfbmFtZShQUk9URUNURURfTUdNVF9Q T0xJQ1kpICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoUkNQSV9SU1NJX1RIUkVTSE9MRCkgICAg ICAgICAgICBcCi0JaGlmX21pYl9uYW1lKFJYX0ZJTFRFUikgICAgICAgICAgICAgICAgICAgICAg XAotCWhpZl9taWJfbmFtZShTRVRfQVNTT0NJQVRJT05fTU9ERSkgICAgICAgICAgIFwKLQloaWZf bWliX25hbWUoU0VUX0RBVEFfRklMVEVSSU5HKSAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1l KFNFVF9IVF9QUk9URUNUSU9OKSAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShTRVRfVFhf UkFURV9SRVRSWV9QT0xJQ1kpICAgICAgIFwKLQloaWZfbWliX25hbWUoU0VUX1VBUFNEX0lORk9S TUFUSU9OKSAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKFNMT1RfVElNRSkgICAgICAgICAgICAg ICAgICAgICAgXAotCWhpZl9taWJfbmFtZShTVEFUSVNUSUNTX1RBQkxFKSAgICAgICAgICAgICAg IFwKLQloaWZfbWliX25hbWUoVEVNUExBVEVfRlJBTUUpICAgICAgICAgICAgICAgICBcCi0JaGlm X21pYl9uYW1lKFRTRl9DT1VOVEVSKSAgICAgICAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFt ZShVQ19NQ19CQ19EQVRBRlJBTUVfQ09ORElUSU9OKQotCi0jZGVmaW5lIGhpZl9taWJfbGlzdF9l bnVtIF9oaWZfbWliX2xpc3QKLQotI3VuZGVmIGhpZl9taWJfbmFtZQotI2RlZmluZSBoaWZfbWli X25hbWUobWliKSBUUkFDRV9ERUZJTkVfRU5VTShISUZfTUlCX0lEXyMjbWliKTsKLWhpZl9taWJf bGlzdF9lbnVtCi0jdW5kZWYgaGlmX21pYl9uYW1lCi0jZGVmaW5lIGhpZl9taWJfbmFtZShtaWIp IHsgSElGX01JQl9JRF8jI21pYiwgI21pYiB9LAotI2RlZmluZSBoaWZfbWliX2xpc3QgaGlmX21p Yl9saXN0X2VudW0geyAtMSwgTlVMTCB9Ci0KLURFQ0xBUkVfRVZFTlRfQ0xBU1MoaGlmX2RhdGEs Ci0JVFBfUFJPVE8oY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwgaW50IHR4X2ZpbGxfbGV2ZWws IGJvb2wgaXNfcmVjdiksCi0JVFBfQVJHUyhoaWYsIHR4X2ZpbGxfbGV2ZWwsIGlzX3JlY3YpLAot CVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQoaW50LCB0eF9maWxsX2xldmVsKQotCQlfX2Zp ZWxkKGludCwgbXNnX2lkKQotCQlfX2ZpZWxkKGNvbnN0IGNoYXIgKiwgbXNnX3R5cGUpCi0JCV9f ZmllbGQoaW50LCBtc2dfbGVuKQotCQlfX2ZpZWxkKGludCwgYnVmX2xlbikKLQkJX19maWVsZChp bnQsIGlmX2lkKQotCQlfX2ZpZWxkKGludCwgbWliKQotCQlfX2FycmF5KHU4LCBidWYsIDEyOCkK LQkpLAotCVRQX2Zhc3RfYXNzaWduKAotCQlpbnQgaGVhZGVyX2xlbjsKLQotCQlfX2VudHJ5LT50 eF9maWxsX2xldmVsID0gdHhfZmlsbF9sZXZlbDsKLQkJX19lbnRyeS0+bXNnX2xlbiA9IGxlMTZf dG9fY3B1KGhpZi0+bGVuKTsKLQkJX19lbnRyeS0+bXNnX2lkID0gaGlmLT5pZDsKLQkJX19lbnRy eS0+aWZfaWQgPSBoaWYtPmludGVyZmFjZTsKLQkJaWYgKGlzX3JlY3YpCi0JCQlfX2VudHJ5LT5t c2dfdHlwZSA9IF9fZW50cnktPm1zZ19pZCAmIDB4ODAgPyAiSU5EIiA6ICJDTkYiOwotCQllbHNl Ci0JCQlfX2VudHJ5LT5tc2dfdHlwZSA9ICJSRVEiOwotCQlpZiAoIWlzX3JlY3YgJiYKLQkJICAg IChfX2VudHJ5LT5tc2dfaWQgPT0gSElGX1JFUV9JRF9SRUFEX01JQiB8fAotCQkgICAgIF9fZW50 cnktPm1zZ19pZCA9PSBISUZfUkVRX0lEX1dSSVRFX01JQikpIHsKLQkJCV9fZW50cnktPm1pYiA9 IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopaGlmLT5ib2R5KTsKLQkJCWhlYWRlcl9sZW4gPSA0Owot CQl9IGVsc2UgewotCQkJX19lbnRyeS0+bWliID0gLTE7Ci0JCQloZWFkZXJfbGVuID0gMDsKLQkJ fQotCQlfX2VudHJ5LT5idWZfbGVuID0gbWluX3QoaW50LCBfX2VudHJ5LT5tc2dfbGVuLAotCQkJ CQkgc2l6ZW9mKF9fZW50cnktPmJ1ZikpCi0JCQkJICAgLSBzaXplb2Yoc3RydWN0IGhpZl9tc2cp IC0gaGVhZGVyX2xlbjsKLQkJbWVtY3B5KF9fZW50cnktPmJ1ZiwgaGlmLT5ib2R5ICsgaGVhZGVy X2xlbiwgX19lbnRyeS0+YnVmX2xlbik7Ci0JKSwKLQlUUF9wcmludGsoIiVkOiVkOiVzXyVzJXMl czogJXMlcyAoJWQgYnl0ZXMpIiwKLQkJX19lbnRyeS0+dHhfZmlsbF9sZXZlbCwKLQkJX19lbnRy eS0+aWZfaWQsCi0JCV9fZW50cnktPm1zZ190eXBlLAotCQlfX3ByaW50X3N5bWJvbGljKF9fZW50 cnktPm1zZ19pZCwgaGlmX21zZ19saXN0KSwKLQkJX19lbnRyeS0+bWliICE9IC0xID8gIi8iIDog IiIsCi0JCV9fZW50cnktPm1pYiAhPSAtMSA/IF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+bWli LCBoaWZfbWliX2xpc3QpIDogIiIsCi0JCV9fcHJpbnRfaGV4KF9fZW50cnktPmJ1ZiwgX19lbnRy eS0+YnVmX2xlbiksCi0JCV9fZW50cnktPm1zZ19sZW4gPiBzaXplb2YoX19lbnRyeS0+YnVmKSA/ ICIgLi4uIiA6ICIiLAotCQlfX2VudHJ5LT5tc2dfbGVuCi0JKQotKTsKLURFRklORV9FVkVOVCho aWZfZGF0YSwgaGlmX3NlbmQsCi0JVFBfUFJPVE8oY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwg aW50IHR4X2ZpbGxfbGV2ZWwsIGJvb2wgaXNfcmVjdiksCi0JVFBfQVJHUyhoaWYsIHR4X2ZpbGxf bGV2ZWwsIGlzX3JlY3YpKTsKLSNkZWZpbmUgX3RyYWNlX2hpZl9zZW5kKGhpZiwgdHhfZmlsbF9s ZXZlbClcCi0JdHJhY2VfaGlmX3NlbmQoaGlmLCB0eF9maWxsX2xldmVsLCBmYWxzZSkKLURFRklO RV9FVkVOVChoaWZfZGF0YSwgaGlmX3JlY3YsCi0JVFBfUFJPVE8oY29uc3Qgc3RydWN0IGhpZl9t c2cgKmhpZiwgaW50IHR4X2ZpbGxfbGV2ZWwsIGJvb2wgaXNfcmVjdiksCi0JVFBfQVJHUyhoaWYs IHR4X2ZpbGxfbGV2ZWwsIGlzX3JlY3YpKTsKLSNkZWZpbmUgX3RyYWNlX2hpZl9yZWN2KGhpZiwg dHhfZmlsbF9sZXZlbClcCi0JdHJhY2VfaGlmX3JlY3YoaGlmLCB0eF9maWxsX2xldmVsLCB0cnVl KQotCi0jZGVmaW5lIHdmeF9yZWdfbGlzdF9lbnVtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotCXdmeF9yZWdfbmFtZShXRlhfUkVHX0NPTkZJRywgICAgICAgIkNPTkZJRyIpICAg ICAgXAotCXdmeF9yZWdfbmFtZShXRlhfUkVHX0NPTlRST0wsICAgICAgIkNPTlRST0wiKSAgICAg XAotCXdmeF9yZWdfbmFtZShXRlhfUkVHX0lOX09VVF9RVUVVRSwgIlFVRVVFIikgICAgICAgXAot CXdmeF9yZWdfbmFtZShXRlhfUkVHX0FIQl9EUE9SVCwgICAgIkFIQiIpICAgICAgICAgXAotCXdm eF9yZWdfbmFtZShXRlhfUkVHX0JBU0VfQUREUiwgICAgIkJBU0VfQUREUiIpICAgXAotCXdmeF9y ZWdfbmFtZShXRlhfUkVHX1NSQU1fRFBPUlQsICAgIlNSQU0iKSAgICAgICAgXAotCXdmeF9yZWdf bmFtZShXRlhfUkVHX1NFVF9HRU5fUl9XLCAgIlNFVF9HRU5fUl9XIikgXAotCXdmeF9yZWdfbmFt ZShXRlhfUkVHX0ZSQU1FX09VVCwgICAgIkZSQU1FX09VVCIpCi0KLSN1bmRlZiB3ZnhfcmVnX25h bWUKLSNkZWZpbmUgd2Z4X3JlZ19uYW1lKHN5bSwgbmFtZSkgVFJBQ0VfREVGSU5FX0VOVU0oc3lt KTsKLXdmeF9yZWdfbGlzdF9lbnVtCi0jdW5kZWYgd2Z4X3JlZ19uYW1lCi0jZGVmaW5lIHdmeF9y ZWdfbmFtZShzeW0sIG5hbWUpIHsgc3ltLCBuYW1lIH0sCi0jZGVmaW5lIHdmeF9yZWdfbGlzdCB3 ZnhfcmVnX2xpc3RfZW51bSB7IC0xLCBOVUxMIH0KLQotREVDTEFSRV9FVkVOVF9DTEFTUyhpb19k YXRhLAotCVRQX1BST1RPKGludCByZWcsIGludCBhZGRyLCBjb25zdCB2b2lkICppb19idWYsIHNp emVfdCBsZW4pLAotCVRQX0FSR1MocmVnLCBhZGRyLCBpb19idWYsIGxlbiksCi0JVFBfU1RSVUNU X19lbnRyeSgKLQkJX19maWVsZChpbnQsIHJlZykKLQkJX19maWVsZChpbnQsIGFkZHIpCi0JCV9f ZmllbGQoaW50LCBtc2dfbGVuKQotCQlfX2ZpZWxkKGludCwgYnVmX2xlbikKLQkJX19hcnJheSh1 OCwgYnVmLCAzMikKLQkJX19hcnJheSh1OCwgYWRkcl9zdHIsIDEwKQotCSksCi0JVFBfZmFzdF9h c3NpZ24oCi0JCV9fZW50cnktPnJlZyA9IHJlZzsKLQkJX19lbnRyeS0+YWRkciA9IGFkZHI7Ci0J CV9fZW50cnktPm1zZ19sZW4gPSBsZW47Ci0JCV9fZW50cnktPmJ1Zl9sZW4gPSBtaW5fdChpbnQs IHNpemVvZihfX2VudHJ5LT5idWYpLAotCQkJCQkgX19lbnRyeS0+bXNnX2xlbik7Ci0JCW1lbWNw eShfX2VudHJ5LT5idWYsIGlvX2J1ZiwgX19lbnRyeS0+YnVmX2xlbik7Ci0JCWlmIChhZGRyID49 IDApCi0JCQlzbnByaW50ZihfX2VudHJ5LT5hZGRyX3N0ciwgMTAsICIvJTA4eCIsIGFkZHIpOwot CQllbHNlCi0JCQlfX2VudHJ5LT5hZGRyX3N0clswXSA9IDA7Ci0JKSwKLQlUUF9wcmludGsoIiVz JXM6ICVzJXMgKCVkIGJ5dGVzKSIsCi0JCV9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+cmVnLCB3 ZnhfcmVnX2xpc3QpLAotCQlfX2VudHJ5LT5hZGRyX3N0ciwKLQkJX19wcmludF9oZXgoX19lbnRy eS0+YnVmLCBfX2VudHJ5LT5idWZfbGVuKSwKLQkJX19lbnRyeS0+bXNnX2xlbiA+IHNpemVvZihf X2VudHJ5LT5idWYpID8gIiAuLi4iIDogIiIsCi0JCV9fZW50cnktPm1zZ19sZW4KLQkpCi0pOwot REVGSU5FX0VWRU5UKGlvX2RhdGEsIGlvX3dyaXRlLAotCVRQX1BST1RPKGludCByZWcsIGludCBh ZGRyLCBjb25zdCB2b2lkICppb19idWYsIHNpemVfdCBsZW4pLAotCVRQX0FSR1MocmVnLCBhZGRy LCBpb19idWYsIGxlbikpOwotI2RlZmluZSBfdHJhY2VfaW9faW5kX3dyaXRlKHJlZywgYWRkciwg aW9fYnVmLCBsZW4pXAotCXRyYWNlX2lvX3dyaXRlKHJlZywgYWRkciwgaW9fYnVmLCBsZW4pCi0j ZGVmaW5lIF90cmFjZV9pb193cml0ZShyZWcsIGlvX2J1ZiwgbGVuKSB0cmFjZV9pb193cml0ZShy ZWcsIC0xLCBpb19idWYsIGxlbikKLURFRklORV9FVkVOVChpb19kYXRhLCBpb19yZWFkLAotCVRQ X1BST1RPKGludCByZWcsIGludCBhZGRyLCBjb25zdCB2b2lkICppb19idWYsIHNpemVfdCBsZW4p LAotCVRQX0FSR1MocmVnLCBhZGRyLCBpb19idWYsIGxlbikpOwotI2RlZmluZSBfdHJhY2VfaW9f aW5kX3JlYWQocmVnLCBhZGRyLCBpb19idWYsIGxlbilcCi0JdHJhY2VfaW9fcmVhZChyZWcsIGFk ZHIsIGlvX2J1ZiwgbGVuKQotI2RlZmluZSBfdHJhY2VfaW9fcmVhZChyZWcsIGlvX2J1ZiwgbGVu KSB0cmFjZV9pb19yZWFkKHJlZywgLTEsIGlvX2J1ZiwgbGVuKQotCi1ERUNMQVJFX0VWRU5UX0NM QVNTKGlvX2RhdGEzMiwKLQlUUF9QUk9UTyhpbnQgcmVnLCBpbnQgYWRkciwgdTMyIHZhbCksCi0J VFBfQVJHUyhyZWcsIGFkZHIsIHZhbCksCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZChp bnQsIHJlZykKLQkJX19maWVsZChpbnQsIGFkZHIpCi0JCV9fZmllbGQoaW50LCB2YWwpCi0JCV9f YXJyYXkodTgsIGFkZHJfc3RyLCAxMCkKLQkpLAotCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5 LT5yZWcgPSByZWc7Ci0JCV9fZW50cnktPmFkZHIgPSBhZGRyOwotCQlfX2VudHJ5LT52YWwgPSB2 YWw7Ci0JCWlmIChhZGRyID49IDApCi0JCQlzbnByaW50ZihfX2VudHJ5LT5hZGRyX3N0ciwgMTAs ICIvJTA4eCIsIGFkZHIpOwotCQllbHNlCi0JCQlfX2VudHJ5LT5hZGRyX3N0clswXSA9IDA7Ci0J KSwKLQlUUF9wcmludGsoIiVzJXM6ICUwOHgiLAotCQlfX3ByaW50X3N5bWJvbGljKF9fZW50cnkt PnJlZywgd2Z4X3JlZ19saXN0KSwKLQkJX19lbnRyeS0+YWRkcl9zdHIsCi0JCV9fZW50cnktPnZh bAotCSkKLSk7Ci1ERUZJTkVfRVZFTlQoaW9fZGF0YTMyLCBpb193cml0ZTMyLAotCVRQX1BST1RP KGludCByZWcsIGludCBhZGRyLCB1MzIgdmFsKSwKLQlUUF9BUkdTKHJlZywgYWRkciwgdmFsKSk7 Ci0jZGVmaW5lIF90cmFjZV9pb19pbmRfd3JpdGUzMihyZWcsIGFkZHIsIHZhbCkgdHJhY2VfaW9f d3JpdGUzMihyZWcsIGFkZHIsIHZhbCkKLSNkZWZpbmUgX3RyYWNlX2lvX3dyaXRlMzIocmVnLCB2 YWwpIHRyYWNlX2lvX3dyaXRlMzIocmVnLCAtMSwgdmFsKQotREVGSU5FX0VWRU5UKGlvX2RhdGEz MiwgaW9fcmVhZDMyLAotCVRQX1BST1RPKGludCByZWcsIGludCBhZGRyLCB1MzIgdmFsKSwKLQlU UF9BUkdTKHJlZywgYWRkciwgdmFsKSk7Ci0jZGVmaW5lIF90cmFjZV9pb19pbmRfcmVhZDMyKHJl ZywgYWRkciwgdmFsKSB0cmFjZV9pb19yZWFkMzIocmVnLCBhZGRyLCB2YWwpCi0jZGVmaW5lIF90 cmFjZV9pb19yZWFkMzIocmVnLCB2YWwpIHRyYWNlX2lvX3JlYWQzMihyZWcsIC0xLCB2YWwpCi0K LURFQ0xBUkVfRVZFTlRfQ0xBU1MocGlnZ3liYWNrLAotCVRQX1BST1RPKHUzMiB2YWwsIGJvb2wg aWdub3JlZCksCi0JVFBfQVJHUyh2YWwsIGlnbm9yZWQpLAotCVRQX1NUUlVDVF9fZW50cnkoCi0J CV9fZmllbGQoaW50LCB2YWwpCi0JCV9fZmllbGQoYm9vbCwgaWdub3JlZCkKLQkpLAotCVRQX2Zh c3RfYXNzaWduKAotCQlfX2VudHJ5LT52YWwgPSB2YWw7Ci0JCV9fZW50cnktPmlnbm9yZWQgPSBp Z25vcmVkOwotCSksCi0JVFBfcHJpbnRrKCJDT05UUk9MOiAlMDh4JXMiLAotCQlfX2VudHJ5LT52 YWwsCi0JCV9fZW50cnktPmlnbm9yZWQgPyAiIChpZ25vcmVkKSIgOiAiIgotCSkKLSk7Ci1ERUZJ TkVfRVZFTlQocGlnZ3liYWNrLCBwaWdneWJhY2ssCi0JVFBfUFJPVE8odTMyIHZhbCwgYm9vbCBp Z25vcmVkKSwKLQlUUF9BUkdTKHZhbCwgaWdub3JlZCkpOwotI2RlZmluZSBfdHJhY2VfcGlnZ3li YWNrKHZhbCwgaWdub3JlZCkgdHJhY2VfcGlnZ3liYWNrKHZhbCwgaWdub3JlZCkKLQotVFJBQ0Vf RVZFTlQoYmhfc3RhdHMsCi0JVFBfUFJPVE8oaW50IGluZCwgaW50IHJlcSwgaW50IGNuZiwgaW50 IGJ1c3ksIGJvb2wgcmVsZWFzZSksCi0JVFBfQVJHUyhpbmQsIHJlcSwgY25mLCBidXN5LCByZWxl YXNlKSwKLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKGludCwgaW5kKQotCQlfX2ZpZWxk KGludCwgcmVxKQotCQlfX2ZpZWxkKGludCwgY25mKQotCQlfX2ZpZWxkKGludCwgYnVzeSkKLQkJ X19maWVsZChib29sLCByZWxlYXNlKQotCSksCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnkt PmluZCA9IGluZDsKLQkJX19lbnRyeS0+cmVxID0gcmVxOwotCQlfX2VudHJ5LT5jbmYgPSBjbmY7 Ci0JCV9fZW50cnktPmJ1c3kgPSBidXN5OwotCQlfX2VudHJ5LT5yZWxlYXNlID0gcmVsZWFzZTsK LQkpLAotCVRQX3ByaW50aygiSU5EL1JFUS9DTkY6JTNkLyUzZC8lM2QsIFJFUSBpbiBwcm9ncmVz czolM2QsIFdVUDogJXMiLAotCQlfX2VudHJ5LT5pbmQsCi0JCV9fZW50cnktPnJlcSwKLQkJX19l bnRyeS0+Y25mLAotCQlfX2VudHJ5LT5idXN5LAotCQlfX2VudHJ5LT5yZWxlYXNlID8gInJlbGVh c2UiIDogImtlZXAiCi0JKQotKTsKLSNkZWZpbmUgX3RyYWNlX2JoX3N0YXRzKGluZCwgcmVxLCBj bmYsIGJ1c3ksIHJlbGVhc2UpXAotCXRyYWNlX2JoX3N0YXRzKGluZCwgcmVxLCBjbmYsIGJ1c3ks IHJlbGVhc2UpCi0KLVRSQUNFX0VWRU5UKHR4X3N0YXRzLAotCVRQX1BST1RPKGNvbnN0IHN0cnVj dCBoaWZfY25mX3R4ICp0eF9jbmYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCSBpbnQg ZGVsYXkpLAotCVRQX0FSR1ModHhfY25mLCBza2IsIGRlbGF5KSwKLQlUUF9TVFJVQ1RfX2VudHJ5 KAotCQlfX2ZpZWxkKGludCwgcGt0X2lkKQotCQlfX2ZpZWxkKGludCwgZGVsYXlfbWVkaWEpCi0J CV9fZmllbGQoaW50LCBkZWxheV9xdWV1ZSkKLQkJX19maWVsZChpbnQsIGRlbGF5X2Z3KQotCQlf X2ZpZWxkKGludCwgYWNrX2ZhaWx1cmVzKQotCQlfX2ZpZWxkKGludCwgZmxhZ3MpCi0JCV9fYXJy YXkoaW50LCByYXRlLCA0KQotCQlfX2FycmF5KGludCwgdHhfY291bnQsIDQpCi0JKSwKLQlUUF9m YXN0X2Fzc2lnbigKLQkJLy8gS2VlcCBzeW5jIHdpdGggd2Z4X3JhdGVzIGRlZmluaXRpb24gaW4g bWFpbi5jCi0JCXN0YXRpYyBjb25zdCBpbnQgaHdfcmF0ZVtdID0geyAwLCAxLCAyLCAzLCA2LCA3 LCA4LCA5LAotCQkJCQkgICAgICAgMTAsIDExLCAxMiwgMTMgfTsKLQkJY29uc3Qgc3RydWN0IGll ZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0KLQkJCShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4 X2luZm8gKilza2ItPmNiOwotCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVz ID0gdHhfaW5mby0+ZHJpdmVyX3JhdGVzOwotCQlpbnQgaTsKLQotCQlfX2VudHJ5LT5wa3RfaWQg PSB0eF9jbmYtPnBhY2tldF9pZDsKLQkJX19lbnRyeS0+ZGVsYXlfbWVkaWEgPSBsZTMyX3RvX2Nw dSh0eF9jbmYtPm1lZGlhX2RlbGF5KTsKLQkJX19lbnRyeS0+ZGVsYXlfcXVldWUgPSBsZTMyX3Rv X2NwdSh0eF9jbmYtPnR4X3F1ZXVlX2RlbGF5KTsKLQkJX19lbnRyeS0+ZGVsYXlfZncgPSBkZWxh eTsKLQkJX19lbnRyeS0+YWNrX2ZhaWx1cmVzID0gdHhfY25mLT5hY2tfZmFpbHVyZXM7Ci0JCWlm ICghdHhfY25mLT5zdGF0dXMgfHwgX19lbnRyeS0+YWNrX2ZhaWx1cmVzKQotCQkJX19lbnRyeS0+ YWNrX2ZhaWx1cmVzICs9IDE7Ci0KLQkJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNT OyBpKyspIHsKLQkJCWlmIChyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpCi0J CQkJX19lbnRyeS0+cmF0ZVtpXSA9IHJhdGVzW2ldLmlkeDsKLQkJCWVsc2UKLQkJCQlfX2VudHJ5 LT5yYXRlW2ldID0gaHdfcmF0ZVtyYXRlc1tpXS5pZHhdOwotCQkJX19lbnRyeS0+dHhfY291bnRb aV0gPSByYXRlc1tpXS5jb3VudDsKLQkJfQotCQlfX2VudHJ5LT5mbGFncyA9IDA7Ci0JCWlmIChy YXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpCi0JCQlfX2VudHJ5LT5mbGFncyB8 PSAweDAxOwotCQlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kp Ci0JCQlfX2VudHJ5LT5mbGFncyB8PSAweDAyOwotCQlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVF ODAyMTFfVFhfUkNfR1JFRU5fRklFTEQpCi0JCQlfX2VudHJ5LT5mbGFncyB8PSAweDA0OwotCQlp ZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCi0JCQlfX2Vu dHJ5LT5mbGFncyB8PSAweDA4OwotCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhf Q1RMX1NFTkRfQUZURVJfRFRJTSkKLQkJCV9fZW50cnktPmZsYWdzIHw9IDB4MTA7Ci0JCWlmICh0 eF9jbmYtPnN0YXR1cykKLQkJCV9fZW50cnktPmZsYWdzIHw9IDB4MjA7Ci0JCWlmICh0eF9jbmYt PnN0YXR1cyA9PSBISUZfU1RBVFVTX1RYX0ZBSUxfUkVRVUVVRSkKLQkJCV9fZW50cnktPmZsYWdz IHw9IDB4NDA7Ci0JKSwKLQlUUF9wcmludGsoInBhY2tldCBJRDogJTA4eCwgcmF0ZSBwb2xpY3k6 ICVzICVkfCVkICVkfCVkICVkfCVkICVkfCVkIC0+ICVkIGF0dGVtcHQsIERlbGF5cyBtZWRpYS9x dWV1ZS90b3RhbDogJTRkdXMvJTRkdXMvJTRkdXMiLAotCQlfX2VudHJ5LT5wa3RfaWQsCi0JCV9f cHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsIE5VTEwsCi0JCQl7IDB4MDEsICJNIiB9LCB7IDB4 MDIsICJTIiB9LCB7IDB4MDQsICJHIiB9LAotCQkJeyAweDA4LCAiUiIgfSwgeyAweDEwLCAiRCIg fSwgeyAweDIwLCAiRiIgfSwKLQkJCXsgMHg0MCwgIlEiIH0pLAotCQlfX2VudHJ5LT5yYXRlWzBd LAotCQlfX2VudHJ5LT50eF9jb3VudFswXSwKLQkJX19lbnRyeS0+cmF0ZVsxXSwKLQkJX19lbnRy eS0+dHhfY291bnRbMV0sCi0JCV9fZW50cnktPnJhdGVbMl0sCi0JCV9fZW50cnktPnR4X2NvdW50 WzJdLAotCQlfX2VudHJ5LT5yYXRlWzNdLAotCQlfX2VudHJ5LT50eF9jb3VudFszXSwKLQkJX19l bnRyeS0+YWNrX2ZhaWx1cmVzLAotCQlfX2VudHJ5LT5kZWxheV9tZWRpYSwKLQkJX19lbnRyeS0+ ZGVsYXlfcXVldWUsCi0JCV9fZW50cnktPmRlbGF5X2Z3Ci0JKQotKTsKLSNkZWZpbmUgX3RyYWNl X3R4X3N0YXRzKHR4X2NuZiwgc2tiLCBkZWxheSkgdHJhY2VfdHhfc3RhdHModHhfY25mLCBza2Is IGRlbGF5KQotCi1UUkFDRV9FVkVOVChxdWV1ZXNfc3RhdHMsCi0JVFBfUFJPVE8oc3RydWN0IHdm eF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCB3ZnhfcXVldWUgKmVsZWN0ZWRfcXVldWUpLAotCVRQ X0FSR1Mod2RldiwgZWxlY3RlZF9xdWV1ZSksCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVs ZChpbnQsIHZpZl9pZCkKLQkJX19maWVsZChpbnQsIHF1ZXVlX2lkKQotCQlfX2FycmF5KGludCwg aHcsIElFRUU4MDIxMV9OVU1fQUNTICogMikKLQkJX19hcnJheShpbnQsIGRydiwgSUVFRTgwMjEx X05VTV9BQ1MgKiAyKQotCQlfX2FycmF5KGludCwgY2FiLCBJRUVFODAyMTFfTlVNX0FDUyAqIDIp Ci0JKSwKLQlUUF9mYXN0X2Fzc2lnbigKLQkJY29uc3Qgc3RydWN0IHdmeF9xdWV1ZSAqcXVldWU7 Ci0JCXN0cnVjdCB3ZnhfdmlmICp3dmlmOwotCQlpbnQgaSwgajsKLQotCQlmb3IgKGogPSAwOyBq IDwgSUVFRTgwMjExX05VTV9BQ1MgKiAyOyBqKyspIHsKLQkJCV9fZW50cnktPmh3W2pdID0gLTE7 Ci0JCQlfX2VudHJ5LT5kcnZbal0gPSAtMTsKLQkJCV9fZW50cnktPmNhYltqXSA9IC0xOwotCQl9 Ci0JCV9fZW50cnktPnZpZl9pZCA9IC0xOwotCQlfX2VudHJ5LT5xdWV1ZV9pZCA9IC0xOwotCQl3 dmlmID0gTlVMTDsKLQkJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAh PSBOVUxMKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykgewot CQkJCWogPSB3dmlmLT5pZCAqIElFRUU4MDIxMV9OVU1fQUNTICsgaTsKLQkJCQlXQVJOX09OKGog Pj0gSUVFRTgwMjExX05VTV9BQ1MgKiAyKTsKLQkJCQlxdWV1ZSA9ICZ3dmlmLT50eF9xdWV1ZVtp XTsKLQkJCQlfX2VudHJ5LT5od1tqXSA9IGF0b21pY19yZWFkKCZxdWV1ZS0+cGVuZGluZ19mcmFt ZXMpOwotCQkJCV9fZW50cnktPmRydltqXSA9IHNrYl9xdWV1ZV9sZW4oJnF1ZXVlLT5ub3JtYWwp OwotCQkJCV9fZW50cnktPmNhYltqXSA9IHNrYl9xdWV1ZV9sZW4oJnF1ZXVlLT5jYWIpOwotCQkJ CWlmIChxdWV1ZSA9PSBlbGVjdGVkX3F1ZXVlKSB7Ci0JCQkJCV9fZW50cnktPnZpZl9pZCA9IHd2 aWYtPmlkOwotCQkJCQlfX2VudHJ5LT5xdWV1ZV9pZCA9IGk7Ci0JCQkJfQotCQkJfQotCQl9Ci0J KSwKLQlUUF9wcmludGsoImdvdCBza2IgZnJvbSAlZC8lZCwgcGVuZC4gaHcvbm9ybS9jYWI6IFsg JWQvJWQvJWQgJWQvJWQvJWQgJWQvJWQvJWQgJWQvJWQvJWQgXSBbICVkLyVkLyVkICVkLyVkLyVk ICVkLyVkLyVkICVkLyVkLyVkIF0iLAotCQlfX2VudHJ5LT52aWZfaWQsIF9fZW50cnktPnF1ZXVl X2lkLAotCQlfX2VudHJ5LT5od1swXSwgX19lbnRyeS0+ZHJ2WzBdLCBfX2VudHJ5LT5jYWJbMF0s Ci0JCV9fZW50cnktPmh3WzFdLCBfX2VudHJ5LT5kcnZbMV0sIF9fZW50cnktPmNhYlsxXSwKLQkJ X19lbnRyeS0+aHdbMl0sIF9fZW50cnktPmRydlsyXSwgX19lbnRyeS0+Y2FiWzJdLAotCQlfX2Vu dHJ5LT5od1szXSwgX19lbnRyeS0+ZHJ2WzNdLCBfX2VudHJ5LT5jYWJbM10sCi0JCV9fZW50cnkt Pmh3WzRdLCBfX2VudHJ5LT5kcnZbNF0sIF9fZW50cnktPmNhYls0XSwKLQkJX19lbnRyeS0+aHdb NV0sIF9fZW50cnktPmRydls1XSwgX19lbnRyeS0+Y2FiWzVdLAotCQlfX2VudHJ5LT5od1s2XSwg X19lbnRyeS0+ZHJ2WzZdLCBfX2VudHJ5LT5jYWJbNl0sCi0JCV9fZW50cnktPmh3WzddLCBfX2Vu dHJ5LT5kcnZbN10sIF9fZW50cnktPmNhYls3XQotCSkKLSk7Ci0KLSNlbmRpZgotCi0vKiBUaGlz IHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KLSN1bmRlZiBUUkFDRV9JTkNMVURF X1BBVEgKLSNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIC4KLSN1bmRlZiBUUkFDRV9JTkNMVURF X0ZJTEUKLSNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHRyYWNlcwotCi0jaW5jbHVkZSA8dHJh Y2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5o IGIvZHJpdmVycy9zdGFnaW5nL3dmeC93ZnguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggOTQ4OTg2ODBjY2RlLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC93 ZnguaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogQ29tbW9uIHByaXZhdGUgZGF0YSBmb3Ig U2lsaWNvbiBMYWJzIFdGeCBjaGlwcy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwg U2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJp Y3Nzb24KLSAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3Vy bWlsay5uZXQ+Ci0gKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJu b3RlQGdtYWlsLmNvbT4sIGV0IGFsLgotICovCi0jaWZuZGVmIFdGWF9ICi0jZGVmaW5lIFdGWF9I Ci0KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1 ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9ub3NwZWMu aD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2luY2x1ZGUgImJoLmgiCi0jaW5jbHVk ZSAiZGF0YV90eC5oIgotI2luY2x1ZGUgIm1haW4uaCIKLSNpbmNsdWRlICJxdWV1ZS5oIgotI2lu Y2x1ZGUgImhpZl90eC5oIgotCi0jZGVmaW5lIFVTRUNfUEVSX1RYT1AgMzIgLy8gc2VlIHN0cnVj dCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zCi0jZGVmaW5lIFVTRUNfUEVSX1RVIDEwMjQKLQot c3RydWN0IGh3YnVzX29wczsKLQotc3RydWN0IHdmeF9kZXYgewotCXN0cnVjdCB3ZnhfcGxhdGZv cm1fZGF0YSBwZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwotCXN0cnVjdCBpZWVlODAyMTFf aHcJKmh3OwotCXN0cnVjdCBpZWVlODAyMTFfdmlmCSp2aWZbMl07Ci0Jc3RydWN0IG1hY19hZGRy ZXNzCWFkZHJlc3Nlc1syXTsKLQljb25zdCBzdHJ1Y3QgaHdidXNfb3BzCSpod2J1c19vcHM7Ci0J dm9pZAkJCSpod2J1c19wcml2OwotCi0JdTgJCQlrZXlzZXQ7Ci0Jc3RydWN0IGNvbXBsZXRpb24J ZmlybXdhcmVfcmVhZHk7Ci0Jc3RydWN0IGhpZl9pbmRfc3RhcnR1cAlod19jYXBzOwotCXN0cnVj dCB3ZnhfaGlmCQloaWY7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yawljb29saW5nX3RpbWVvdXRfd29y azsKLQlib29sCQkJcG9sbF9pcnE7Ci0JYm9vbAkJCWNoaXBfZnJvemVuOwotCXN0cnVjdCBtdXRl eAkJY29uZl9tdXRleDsKLQotCXN0cnVjdCB3ZnhfaGlmX2NtZAloaWZfY21kOwotCXN0cnVjdCBz a19idWZmX2hlYWQJdHhfcGVuZGluZzsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl0eF9kZXF1ZXVlOwot CWF0b21pY190CQl0eF9sb2NrOwotCi0JYXRvbWljX3QJCXBhY2tldF9pZDsKLQl1MzIJCQlrZXlf bWFwOwotCi0Jc3RydWN0IGhpZl9yeF9zdGF0cwlyeF9zdGF0czsKLQlzdHJ1Y3QgbXV0ZXgJCXJ4 X3N0YXRzX2xvY2s7Ci0Jc3RydWN0IGhpZl90eF9wb3dlcl9sb29wX2luZm8gdHhfcG93ZXJfbG9v cF9pbmZvOwotCXN0cnVjdCBtdXRleAkJdHhfcG93ZXJfbG9vcF9pbmZvX2xvY2s7Ci0JaW50CQkJ Zm9yY2VfcHNfdGltZW91dDsKLX07Ci0KLXN0cnVjdCB3ZnhfdmlmIHsKLQlzdHJ1Y3Qgd2Z4X2Rl dgkJKndkZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYJKnZpZjsKLQlzdHJ1Y3QgaWVlZTgwMjEx X2NoYW5uZWwgKmNoYW5uZWw7Ci0JaW50CQkJaWQ7Ci0KLQl1MzIJCQlsaW5rX2lkX21hcDsKLQot CWJvb2wJCQlhZnRlcl9kdGltX3R4X2FsbG93ZWQ7Ci0JYm9vbAkJCWpvaW5faW5fcHJvZ3Jlc3M7 Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrCWJlYWNvbl9sb3NzX3dvcms7Ci0KLQlzdHJ1Y3Qgd2Z4 X3F1ZXVlCXR4X3F1ZXVlWzRdOwotCXN0cnVjdCB0eF9wb2xpY3lfY2FjaGUJdHhfcG9saWN5X2Nh Y2hlOwotCXN0cnVjdCB3b3JrX3N0cnVjdAl0eF9wb2xpY3lfdXBsb2FkX3dvcms7Ci0KLQlzdHJ1 Y3Qgd29ya19zdHJ1Y3QJdXBkYXRlX3RpbV93b3JrOwotCi0JdW5zaWduZWQgbG9uZwkJdWFwc2Rf bWFzazsKLQotCS8qIGF2b2lkIHNvbWUgb3BlcmF0aW9ucyBpbiBwYXJhbGxlbCB3aXRoIHNjYW4g Ki8KLQlzdHJ1Y3QgbXV0ZXgJCXNjYW5fbG9jazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJc2Nhbl93 b3JrOwotCXN0cnVjdCBjb21wbGV0aW9uCXNjYW5fY29tcGxldGU7Ci0JYm9vbAkJCXNjYW5fYWJv cnQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxOwotCi0Jc3RydWN0 IGNvbXBsZXRpb24Jc2V0X3BtX21vZGVfY29tcGxldGU7Ci19OwotCi1zdGF0aWMgaW5saW5lIHN0 cnVjdCB3ZnhfdmlmICp3ZGV2X3RvX3d2aWYoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZf aWQpCi17Ci0JaWYgKHZpZl9pZCA+PSBBUlJBWV9TSVpFKHdkZXYtPnZpZikpIHsKLQkJZGV2X2Ri Zyh3ZGV2LT5kZXYsICJyZXF1ZXN0aW5nIG5vbi1leGlzdGVudCB2aWY6ICVkXG4iLCB2aWZfaWQp OwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JdmlmX2lkID0gYXJyYXlfaW5kZXhfbm9zcGVjKHZpZl9p ZCwgQVJSQVlfU0laRSh3ZGV2LT52aWYpKTsKLQlpZiAoIXdkZXYtPnZpZlt2aWZfaWRdKSB7Ci0J CWRldl9kYmcod2Rldi0+ZGV2LCAicmVxdWVzdGluZyBub24tYWxsb2NhdGVkIHZpZjogJWRcbiIs Ci0JCQl2aWZfaWQpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIChzdHJ1Y3Qgd2Z4X3Zp ZiAqKSB3ZGV2LT52aWZbdmlmX2lkXS0+ZHJ2X3ByaXY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3Ry dWN0IHdmeF92aWYgKnd2aWZfaXRlcmF0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkJICAg c3RydWN0IHdmeF92aWYgKmN1cikKLXsKLQlpbnQgaTsKLQlpbnQgbWFyayA9IDA7Ci0Jc3RydWN0 IHdmeF92aWYgKnRtcDsKLQotCWlmICghY3VyKQotCQltYXJrID0gMTsKLQlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRSh3ZGV2LT52aWYpOyBpKyspIHsKLQkJdG1wID0gd2Rldl90b193dmlmKHdk ZXYsIGkpOwotCQlpZiAobWFyayAmJiB0bXApCi0JCQlyZXR1cm4gdG1wOwotCQlpZiAodG1wID09 IGN1cikKLQkJCW1hcmsgPSAxOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGlu ZSBpbnQgd3ZpZl9jb3VudChzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlpbnQgaTsKLQlpbnQg cmV0ID0gMDsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKHdkZXYtPnZpZik7IGkrKykgewotCQl3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIGkp OwotCQlpZiAod3ZpZikKLQkJCXJldCsrOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMg aW5saW5lIHZvaWQgbWVtcmV2ZXJzZSh1OCAqc3JjLCB1OCBsZW5ndGgpCi17Ci0JdTggKmxvID0g c3JjOwotCXU4ICpoaSA9IHNyYyArIGxlbmd0aCAtIDE7Ci0JdTggc3dhcDsKLQotCXdoaWxlIChs byA8IGhpKSB7Ci0JCXN3YXAgPSAqbG87Ci0JCSpsbysrID0gKmhpOwotCQkqaGktLSA9IHN3YXA7 Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludCBtZW16Y21wKHZvaWQgKnNyYywgdW5zaWduZWQg aW50IHNpemUpCi17Ci0JdTggKmJ1ZiA9IHNyYzsKLQotCWlmICghc2l6ZSkKLQkJcmV0dXJuIDA7 Ci0JaWYgKCpidWYpCi0JCXJldHVybiAxOwotCXJldHVybiBtZW1jbXAoYnVmLCBidWYgKyAxLCBz aXplIC0gMSk7Ci19Ci0KLSNlbmRpZiAvKiBXRlhfSCAqLwotLSAKMi4yOS4yCgo=