From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 867CFC4345F for ; Mon, 29 Apr 2024 17:01:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Ll3OL8twd6+Sw0H7bhopzY+afSmxnzxQo/rwcx5i990=; b=udA+Tmnnf6Wbkw TAagzG7+eeMGRkdqQAtaOy2uJRj1R5FRgnx9jVsN2yiNxcx3bS+4vwRh0BXM2giXuLiQZZm1HqsaA Hu2I8ocXalUJudvFGFtU/+c3lNeiTV3Ji1AA7P/G+2rxYSeFXXMONjbAkqPTBGCvls7dbVvJ1lvl/ aWFcJ4n6+BjXw+LdgXwsx2lew59zcuFJfuyTBFFo7eY29yJ1F8nZTd3+ZRYK4Nr7KsCeW35QLe52I 1hUq3FXE9KEz7NhJDakJv7X4VyCnL2LSxDgwX6a/a6GUa3QXUMeRe2Pj431ASj+WPDmQZcKwKVvBh HfQ8Z2ztpseayNpiipSw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1UMz-00000003eKe-3slI; Mon, 29 Apr 2024 17:00:49 +0000 Received: from mail-vi1eur04on20600.outbound.protection.outlook.com ([2a01:111:f403:2611::600] helo=EUR04-VI1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1UMw-00000003eIn-1eqD for linux-arm-kernel@lists.infradead.org; Mon, 29 Apr 2024 17:00:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JZjtXy6+H94HMRUI/wYr1TWhcdrU+l/jIQFtEF6cqHMqSi3VJtWK0oWMxm/QTCTLd/KsR40rdu7Tx4Nrw8AHmXP5Q8krNw5Fe2fuzsYcDyLfhwe5rqyHqrhMfgoRDXmlgVlUWuj3YqzLbyADrzoSdrXdnXwjDKjBiA4PGJuldqvbO6kNcEL8x6Tq5+eMeA5jFCvRg9NhuKAEUu3WjUEwnRbmG17TNXehf2XxavPwL4W4mny+TV7SGLKBm96DpImGp1hWIY8ht2UvtnIiw7dzSnx3j05THTplLqK/1ssCvIw0VzefH1rkqr7yl9bx6XzzNEViXQ9AATOPuqmJ0Et3EA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rJfFiZPVOXLfqvawNLtUWOkQQFjszgzSvLvaksnNFnU=; b=nWWOZ60oSPoY+vmraZKmknLl1Z2uiFNFCjnaAenzkUctXSFYkOgLZVn1PWvEMSKJ91VkFNpJGVz7kG7pMAYOLLSCKg8RDLnt++OCsMeo2dEQDegtgrs3/YcTUQuGE0DD3N2JtU7sqXnFYSP85nllNudBb9dD76mm1tXMt5zuP4XJgp3FfMWTSnYgOmFduZIYdJPIw5gPqhBl5yMfJFY6453akcK74idJZxAR56Rpl+ijLSwFJBRDzYfqRcTZaWR+4L+MeUiORG7rsNXW3arsYrDvB4nhSsiJojtTzeLIYKwNFhLAALf9kBWTA4O7fRKWdDJ1zPMT5eB/2RveSFqQXg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rJfFiZPVOXLfqvawNLtUWOkQQFjszgzSvLvaksnNFnU=; b=rwopRnz8D+Gvzhk77JrZerknk/JVmpf1zSukVHOUOyXllJ8vclAXXx0m2sciZBAM6ZF5SxVCdE8OYNDPPmaMqNF6iyDyiCKxDHrpGgXgjBvcp+FJrElb7sZ236OhM6Z3jv8PWuRobvLhMf4DBcIhsX31asjc835UboF315yQCB4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by AS8PR04MB9047.eurprd04.prod.outlook.com (2603:10a6:20b:442::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7519.34; Mon, 29 Apr 2024 17:00:38 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::1e67:dfc9:d0c1:fe58]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::1e67:dfc9:d0c1:fe58%7]) with mapi id 15.20.7519.031; Mon, 29 Apr 2024 17:00:37 +0000 Date: Mon, 29 Apr 2024 13:00:26 -0400 From: Frank Li To: Manivannan Sadhasivam Cc: Richard Zhu , Lucas Stach , Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Philipp Zabel , Liam Girdwood , Mark Brown , Krzysztof Kozlowski , Conor Dooley , linux-pci@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, devicetree@vger.kernel.org Subject: Re: [PATCH v3 08/11] PCI: imx: Config look up table(LUT) to support MSI ITS and IOMMU for i.MX95 Message-ID: References: <20240402-pci2_upstream-v3-0-803414bdb430@nxp.com> <20240402-pci2_upstream-v3-8-803414bdb430@nxp.com> <20240427113643.GM1981@thinkpad> Content-Disposition: inline In-Reply-To: <20240427113643.GM1981@thinkpad> X-ClientProxiedBy: SJ0PR03CA0052.namprd03.prod.outlook.com (2603:10b6:a03:33e::27) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AS8PR04MB9047:EE_ X-MS-Office365-Filtering-Correlation-Id: 547dfadf-7f76-4bb3-460c-08dc686de429 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|376005|1800799015|52116005|38350700005; X-Microsoft-Antispam-Message-Info: =?utf-8?B?NXdpenlWTndaOW1lN0NXOXo2THVOZzl1c1lsQUtUMTNDRHlrMjFydjZKdnYy?= =?utf-8?B?MGNNUDJzTmNzNk5Td2REay93M0ExUXFtZkdaZ2hzTGF5QXI2WngwM0g4Y3hO?= =?utf-8?B?YlV3RkZCdGM0UFlpakFoeS90Z21FTjhIUDBYSS95WEpnQ0dsLzN0SFhreWFy?= =?utf-8?B?eWRWa1ZCRFgrTktDM3JUdDhxdkxLZ01rQjlNZ3JTajdFUXJjaXNRa1NKNndY?= =?utf-8?B?cUtFY3ZadzhGdjlzUXFaNWVWTHdtdzJta1JTbjB2MHdZS1ZObFNNWkF3V1Ft?= =?utf-8?B?d2FWT2NjbWVuS3VTQis2Zkg1N1hxM0phNzRML1doUC9VVGpyQkdPcDNTSnB5?= =?utf-8?B?RmpIUEJTd0doRnFhS0NwWW1BNFRkQWlpbXZHbjB4ZG5SNDFCVDlVSFF3S2pK?= =?utf-8?B?bDl6UlVUcGw2RnFZRHZmMlNWMG0yaDkyVk41Y2FQRnhWWlFmNHVCS0FDVzdu?= =?utf-8?B?UHQxaEdIQStwR2ovZGl3eTQxL0F2TVRZSEs3ZjRVM1puSFY5Z2V2aGwzMWxW?= =?utf-8?B?am9pN1lrTi9EN29UZzFIZlpBbE0zRjlIMU9BTkVGTm5wcDNLSEZVbjhUR3Vt?= =?utf-8?B?TnBkSnNSdVlnVXhtWEhpNGdhOEk4MXhRZDlzVXhaUkRGeWJIeERHQ2czVjUz?= =?utf-8?B?aG5ORGQ1TzV3QmFrYVJueVdIcGtvekR6NkJEK0lXVFNENTVXKy9JNGlVaktE?= =?utf-8?B?bE9LTS8xMHBONXI5bUppd1A0SndXdll4UEM1YmNEVnQ5dzZkK1FIZGhzSVd6?= =?utf-8?B?SEZBUGk0dGRuK2FmdlRMbGZmNmJXa29aMS9vNTVhUHBjREE3TFJQbHVtSzFx?= =?utf-8?B?aWFaZmU1bmExdmtSS3NPL1pSRmV6MzFGSG9jaksyWVkrZ0kzbitPdUFzZDFY?= =?utf-8?B?MGZzeXMwNWVIQU5wT0lpSzFrUGZ1ZDVwNGZGaUJmbEtNMDRiY0NPSlJNUDBT?= =?utf-8?B?OWNYcmdjdkw3cDRpT0NSZHZWWGVjU2N0R0ZYTGxMSHo2enFhWmwvUkpGZUM0?= =?utf-8?B?R1JlUFNXMG9DUmV3bkhRN09hRDM1dnhJRkVKbHRLdXpqWjI3TDNLdkxTRTRn?= =?utf-8?B?WStkZkE1UjAvcEM3dWI2eldLZy82MGpodlFvUHVVMVBWK0hERkl1Z0NXSENI?= =?utf-8?B?WW1HQnBYWEhmMGJzNCttWXRKeCs0aElWSDVjV2YxV2xpd0hLdGlNZE9VZDd1?= =?utf-8?B?NWgvb2Vxa25iVkFPamJRUEFEVTEzK3RGY3N1OUIvSHpub2Zrd3ZMMlRSZWp1?= =?utf-8?B?cFFGVkEzdUpRTklFN0lqNmRuRWxUSUJ4cUVGSXZVZXJNT1NESksrRkhuWk5N?= =?utf-8?B?dHlhY1JCUGhZRjhnWnBOTmVxTERUK1FmbjBNUjBadHgreENoVmxSK29senVw?= =?utf-8?B?QTJZNDZaWFptS3piWjMwazlSVk04bjdYQmJzZE1vb0lSUFV0ZDlZcGFBZllp?= =?utf-8?B?RlVYNkhWc3AxK1BLWlNXYkY3VGYvZ1dXYmhsUFdxVmJ5WGI3Q2FIblpUdVVH?= =?utf-8?B?c3d0L2RnODRxeUx5enRvM3ZlWnd2WkRZVFVReXdFTFZoOERreEpjYnQ0Tkpi?= =?utf-8?B?eXdEbmVJdTRYamcySVUwVGJyNFg2WTJkRHdVd0JpejRaTkdrQkNzNXdod1JI?= =?utf-8?B?V1JMUUdJelBpYk1JWWhpSUJIeUNVckw5WjVad2hoWnZScHF4Z1pzUFFKWE00?= =?utf-8?B?NjZPRkRnVWpUQ3VzUEtQNGluZWUxN2x3NG9wTjFGRWoyWHBQd2c0K1dPU29s?= =?utf-8?B?UFFIdGNacEt4cDFWQVRvOFNwL1dUSnhFcTAxMnhRRVZjVFFSclhnc3dhRUZ3?= =?utf-8?B?WEUrU3AwODdyL2hKcXVVdz09?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(376005)(1800799015)(52116005)(38350700005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MVNUZm5LaEVhenBlZ3NmSG1uU01RZnlYMTVDUzEwczVLTEU4S3g2OS9YSTd1?= =?utf-8?B?Z1NVSGwxZVhGTmp3aGFQUUN3by9pSUxaWG5HVlR6WVdXZUhBNlVHbGFmWE1M?= =?utf-8?B?QnRRM3B1MUtERjZNRDRrR0NueDJQRTMrNjhYUWRremU3V1NYMitjUy8xNEF6?= =?utf-8?B?Vkh0VzJpNTBZSmV2TVk5M3FieWxIT2xpcGVRRDlURDdtSzhoLzJvdGZGdmVk?= =?utf-8?B?VDBSMmJydldzdlhLQTcrcyt2S293djJZQUN5Qy9zZGpBYzlYbUVSTjNmM2RJ?= =?utf-8?B?ams5cFlMMStVTTkyT1BncUNUcjhENnhKbmZtL3FaZnRkV2dpSjhXV0ZoaDFi?= =?utf-8?B?S0M2bjBFdXVDdmcvNjJjSFJnQ05XV2lLbzAwMVVZYnliVm9FRXd4MGgrTFo3?= =?utf-8?B?R1M5WTJ0VzNJN1Y3YlRzSWdjeDFibS9GaWhaRUxKcnlSK3UyT1B3UVZuV2ly?= =?utf-8?B?ajFEdVd4dXB1S1Y2cHA5Nk85YzZodldTMHJ2OXJtenVISlMxb3JMZWtXQ0Rx?= =?utf-8?B?S1llQ3FwNG0vejlBcG9KTEVIY0d1dEQ1NzlNZG1lbTRqcUdsYU1oOU13eUsr?= =?utf-8?B?dE9yZG1mRURsS2RMMy9idkdQK0NYWXNLdTJUdW5KRytTVnBabUpZdEdlUDVU?= =?utf-8?B?eEZkSC8wOFphMEdsdEN1V1l0ZnZFNytJVkxpZlVPOUxkbmI0NG9xVTM0MEpk?= =?utf-8?B?R3Z0ZjlZd3oyT29RaGk2REF3UHZQbWlTZlcvYkJXNXVwR2lteEUrMW1kMmNk?= =?utf-8?B?UytKbEtvQzErN2pJbDNCakEvamVvYTEzUGtmY2NMMjRWYzJOM2JLWFU2aXFW?= =?utf-8?B?WDdCMTUrYlJUcnpwZlhtTVhobDZnNkw3OXdGMW1SWVM5VXF0SmdpeWJUN0Zx?= =?utf-8?B?MjFvZU5nSkt5cXVSdzNuMjFCVlBZeXk4VExuVDNjY3E0WkE0czhFL0V3ZlBE?= =?utf-8?B?UVBCcDNvVFdpU0NURkx6RG50VTlFMTJ3RTZZeGNlWDZaRG93amlmZVhuNjRI?= =?utf-8?B?cktCT2lYWWxHQWhFU1Q3amdLNndTSTYvQ09hVUNtOEh1RnJOKzExNjFtZDBs?= =?utf-8?B?Z1Y1Nlc2Q3BSZUgwWWV0UDVJNmxMNXdmMlpRRWZSWklLclMvOERKcGFpM3pX?= =?utf-8?B?azllZE9XM0lURk9VY1AvSWZGRUhEWjFBeUo0UnBLcThaSEZhSFR4dUFZME4v?= =?utf-8?B?WlZFaERxK3loK3o1Z0pjdlhjcHZ6aC8zTTFjS1lQNkloMmlEdjl2U0Z3bDA0?= =?utf-8?B?cithLzh2bENzQUUyeFE2NWU5YzNwWFAyNG1OUTZyUTQ3SmZCbmdBNzU5K0Jm?= =?utf-8?B?RTlFMHdBdWZHSVdUQkpFVE51TDlLRG1wQU9PRDMyeUJuR052Qm5rL3JsNWx2?= =?utf-8?B?VUxGdDZtaDBwczg3UVpVT3dTakd5c3h1RmVjQW1adEpJaTJsaUp2RDBLSEd5?= =?utf-8?B?Q25URlJJdkhnbFBQa05IVlVvcHlxYVZiOElXVkFBNWc1eVo2Q05yR2NCWWxo?= =?utf-8?B?RE9Xa01Dd1BORjlDMzRMd05lNE5uM3VrV0NaRG9qdzNQVm5xbG1HcGRVam1X?= =?utf-8?B?dnVYSTNSVUppM2dFRDhxSG1HeW45eGJDd1pSOHVuUW9wSk9WcWRoUXdmMHhD?= =?utf-8?B?dWpMYS9OQ3pOTjh3bDlOcmdKVWo4RFNXS1F0YWpETmtVZ1FTejdFRWwwcEV6?= =?utf-8?B?M0tEb2dmQWh2M0tPUGxMZGtmeTBHWGxXTTZwOElBT0sxT0JFNDY3Z21VV3kr?= =?utf-8?B?RUhVVjBERFJjQ2M0YktIa2NKOWMrdmlPVTdSZGIzMGtaUkRSMEwvMCtQVGla?= =?utf-8?B?RWNCZ2dNSlpkNjExM1ZNa202U2lENHBqQjVEYXgvQUxuNXNVMEJKSWxFUXJk?= =?utf-8?B?VEFqd2Y5YXhkWDNERmtsdHF1NTJFZGJ5b3pMWUR4SXNWV3VFbHFjUmt2VkND?= =?utf-8?B?OTk2UFRjbm41dlRhRkEvUy9oMVkzS3Y3bDlWbVJWNDIrMU1LTWNoczJBWGE2?= =?utf-8?B?WGZjWSt5dHJuL0JiTFVveUcyeENLcU5xNDErZDY0MGpNb0lCTThIS1FUWGdN?= =?utf-8?B?VDlabDY3ZEEvWVNUY25xbEFkY3V6ZnFYVUJua01CcTdrZnlMZStyMGFhdlRx?= =?utf-8?Q?fh7c=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 547dfadf-7f76-4bb3-460c-08dc686de429 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Apr 2024 17:00:37.0763 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: a3mHBMRQyruIBomYXkec6XezL8L8EfBFgtPLze6YVf5fsqZppANVjfiRDQXQ5mdgfWBrbM9UJ+XLIBYnd6HVRw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB9047 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240429_100046_815362_AC295314 X-CRM114-Status: GOOD ( 33.09 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gU2F0LCBBcHIgMjcsIDIwMjQgYXQgMDU6MDY6NDNQTSArMDUzMCwgTWFuaXZhbm5hbiBTYWRo YXNpdmFtIHdyb3RlOgo+IFBDSTogaW14NjogQWRkIHN1cHBvcnQgZm9yIGNvbmZpZ3VyaW5nIEJE RiB0byBTSUQgbWFwcGluZyBmb3IgaS5NWDk1Cj4gCj4gT24gVHVlLCBBcHIgMDIsIDIwMjQgYXQg MTA6MzM6NDRBTSAtMDQwMCwgRnJhbmsgTGkgd3JvdGU6Cj4gPiBpLk1YOTUgbmVlZCBjb25maWcg TFVUIHRvIGNvbnZlcnQgYnBmIHRvIHN0cmVhbSBpZC4gSU9NTVUgYW5kIElUUyB1c2UgdGhlCj4g Cj4gRGlkIHlvdSBtZWFuIEJERj8gSGVyZSBhbmQgZXZlcnl3aGVyZS4KPiAKPiA+IHNhbWUgc3Ry ZWFtIGlkLiBDaGVjayBtc2ktbWFwIGFuZCBzbW11LW1hcCBhbmQgbWFrZSBzdXJlIHRoZSBzYW1l IFBDSSBicGYKPiA+IG1hcCB0byB0aGUgc2FtZSBzdHJlYW0gaWQuIFRoZW4gY29uZmlnIExVVCBy ZWxhdGVkIHJlZ2lzdGVycy4KPiA+IAo+IAo+IFRoZXNlIERUIHByb3BlcnRpZXMgbm90IGRvY3Vt ZW50ZWQgaW4gdGhlIGJpbmRpbmcuCj4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBGcmFuayBMaSA8RnJh bmsuTGlAbnhwLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3Bj aWUtaW14LmMgfCAxNzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIDEg ZmlsZSBjaGFuZ2VkLCAxNzUgaW5zZXJ0aW9ucygrKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpZS1pbXguYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvZHdjL3BjaWUtaW14LmMKPiA+IGluZGV4IGFmMGY5NjBmMjg3NTcuLjY1M2Q4ZThlZTFhYmMg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWlteC5jCj4g PiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2llLWlteC5jCj4gPiBAQCAtNTUs NiArNTUsMjIgQEAKPiA+ICAjZGVmaW5lIElNWDk1X1BFMF9HRU5fQ1RSTF8zCQkJMHgxMDU4Cj4g PiAgI2RlZmluZSBJTVg5NV9QQ0lFX0xUU1NNX0VOCQkJQklUKDApCj4gPiAgCj4gPiArI2RlZmlu ZSBJTVg5NV9QRTBfTFVUX0FDU0NUUkwJCQkweDEwMDgKPiA+ICsjZGVmaW5lIElNWDk1X1BFT19M VVRfUldBCQkJQklUKDE2KQo+ID4gKyNkZWZpbmUgSU1YOTVfUEUwX0xVVF9FTkxPQwkJCUdFTk1B U0soNCwgMCkKPiA+ICsKPiA+ICsjZGVmaW5lIElNWDk1X1BFMF9MVVRfREFUQTEJCQkweDEwMGMK PiA+ICsjZGVmaW5lIElNWDk1X1BFMF9MVVRfVkxECQkJQklUKDMxKQo+ID4gKyNkZWZpbmUgSU1Y OTVfUEUwX0xVVF9EQUNfSUQJCQlHRU5NQVNLKDEwLCA4KQo+ID4gKyNkZWZpbmUgSU1YOTVfUEUw X0xVVF9TVFJFQU1fSUQJCQlHRU5NQVNLKDUsIDApCj4gPiArCj4gPiArI2RlZmluZSBJTVg5NV9Q RTBfTFVUX0RBVEEyCQkJMHgxMDEwCj4gPiArI2RlZmluZSBJTVg5NV9QRTBfTFVUX1JFUUlECQkJ R0VOTUFTSygzMSwgMTYpCj4gPiArI2RlZmluZSBJTVg5NV9QRTBfTFVUX01BU0sJCQlHRU5NQVNL KDE1LCAwKQo+ID4gKwo+ID4gKyNkZWZpbmUgSU1YOTVfU0lEX01BU0sJCQkJR0VOTUFTSyg1LCAw KQo+ID4gKyNkZWZpbmUgSU1YOTVfTUFYX0xVVAkJCQkzMgo+ID4gKwo+ID4gICNkZWZpbmUgdG9f aW14X3BjaWUoeCkJZGV2X2dldF9kcnZkYXRhKCh4KS0+ZGV2KQo+ID4gIAo+ID4gIGVudW0gaW14 X3BjaWVfdmFyaWFudHMgewo+ID4gQEAgLTIxNyw2ICsyMzMsMTU5IEBAIHN0YXRpYyBpbnQgaW14 OTVfcGNpZV9pbml0X3BoeShzdHJ1Y3QgaW14X3BjaWUgKmlteF9wY2llKQo+ID4gIAlyZXR1cm4g MDsKPiA+ICB9Cj4gPiAgCj4gPiArc3RhdGljIGludCBpbXhfcGNpZV91cGRhdGVfbHV0KHN0cnVj dCBpbXhfcGNpZSAqaW14X3BjaWUsIGludCBpbmRleCwgdTE2IHJlcWlkLCB1MTYgbWFzaywgdTgg c2lkKQo+ID4gK3sKPiA+ICsJc3RydWN0IGR3X3BjaWUgKnBjaSA9IGlteF9wY2llLT5wY2k7Cj4g PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBjaS0+ZGV2Owo+ID4gKwl1MzIgZGF0YTEsIGRhdGEy Owo+ID4gKwo+ID4gKwlpZiAoc2lkID49IDY0KSB7Cj4gPiArCQlkZXZfZXJyKGRldiwgIlRvbyBi aWcgc3RyZWFtIGlkOiAlZFxuIiwgc2lkKTsKPiAKPiAnSW52YWxpZCBTSUQgZm9yIGluZGV4ICgl ZCk6ICVkXG4nLCBpbmRleCwgc2lkCj4gCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJfQo+ ID4gKwo+ID4gKwlkYXRhMSA9IEZJRUxEX1BSRVAoSU1YOTVfUEUwX0xVVF9EQUNfSUQsIDApOwo+ ID4gKwlkYXRhMSB8PSBGSUVMRF9QUkVQKElNWDk1X1BFMF9MVVRfU1RSRUFNX0lELCBzaWQpOwo+ ID4gKwlkYXRhMSB8PSBJTVg5NV9QRTBfTFVUX1ZMRDsKPiA+ICsKPiA+ICsJcmVnbWFwX3dyaXRl KGlteF9wY2llLT5pb211eGNfZ3ByLCBJTVg5NV9QRTBfTFVUX0RBVEExLCBkYXRhMSk7Cj4gPiAr Cj4gPiArCWRhdGEyID0gbWFzazsKPiA+ICsJZGF0YTIgfD0gRklFTERfUFJFUChJTVg5NV9QRTBf TFVUX1JFUUlELCByZXFpZCk7Cj4gPiArCj4gPiArCXJlZ21hcF93cml0ZShpbXhfcGNpZS0+aW9t dXhjX2dwciwgSU1YOTVfUEUwX0xVVF9EQVRBMiwgZGF0YTIpOwo+ID4gKwo+ID4gKwlyZWdtYXBf d3JpdGUoaW14X3BjaWUtPmlvbXV4Y19ncHIsIElNWDk1X1BFMF9MVVRfQUNTQ1RSTCwgaW5kZXgp Owo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RydWN0IGlteF9vZl9t YXAgewo+IAo+IGlteF9pb21tdV9tYXAKPiAKPiA+ICsJdTMyIGJkZjsKPiA+ICsJdTMyIHBoYW5k bGU7Cj4gPiArCXUzMiBzaWQ7Cj4gPiArCXUzMiBzaWRfbGVuOwo+ID4gK307Cj4gPiArCj4gPiAr c3RhdGljIGludCBpbXhfY2hlY2tfbXNpX2FuZF9zbW1tdShzdHJ1Y3QgaW14X3BjaWUgKmlteF9w Y2llLAo+ID4gKwkJCQkgICBzdHJ1Y3QgaW14X29mX21hcCAqbXNpX21hcCwgdTMyIG1zaV9zaXpl LCB1MzIgbXNpX21hcF9tYXNrLAo+ID4gKwkJCQkgICBzdHJ1Y3QgaW14X29mX21hcCAqc21tdV9t YXAsIHUzMiBzbW11X3NpemUsIHUzMiBzbW11X21hcF9tYXNrKQo+ID4gK3sKPiA+ICsJc3RydWN0 IGR3X3BjaWUgKnBjaSA9IGlteF9wY2llLT5wY2k7Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 IHBjaS0+ZGV2Owo+ID4gKwlpbnQgaTsKPiA+ICsKPiAKPiAJaWYgKCFtc2lfbWFwIHx8ICFzbW11 X21hcCkKPiAJCXJldHVybiAwOwo+IAo+ID4gKwlpZiAobXNpX21hcCAmJiBzbW11X21hcCkgewo+ ID4gKwkJaWYgKG1zaV9zaXplICE9IHNtbXVfc2l6ZSkKPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsK PiA+ICsJCWlmIChtc2lfbWFwX21hc2sgIT0gc21tdV9tYXBfbWFzaykKPiA+ICsJCQlyZXR1cm4g LUVJTlZBTDsKPiAKPiAJaWYgKG1zaV9zaXplICE9IHNtbXVfc2l6ZSB8fCBtc2lfbWFwX21hc2sg IT0gc21tdV9tYXBfbWFzaykKPiAJCXJldHVybiAtRUlOVkFMOwo+IAo+ID4gKwo+ID4gKwkJZm9y IChpID0gMDsgaSA8IG1zaV9zaXplIC8gc2l6ZW9mKCptc2lfbWFwKTsgaSsrKSB7Cj4gPiArCQkJ aWYgKG1zaV9tYXAtPmJkZiAhPSBzbW11X21hcC0+YmRmKSB7Cj4gPiArCQkJCWRldl9lcnIoZGV2 LCAiYmRmIHNldHRpbmcgaXMgbm90IG1hdGNoXG4iKTsKPiAKPiAnQkRGIG1pc21hdGNoIGJldHdl ZW4gbXNpLW1hcCBhbmQgaW9tbXUtbWFwJwo+IAo+ID4gKwkJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ ICsJCQl9Cj4gPiArCQkJaWYgKChtc2lfbWFwLT5zaWQgJiBJTVg5NV9TSURfTUFTSykgIT0gc21t dV9tYXAtPnNpZCkgewo+ID4gKwkJCQlkZXZfZXJyKGRldiwgInNpZCBzZXR0aW5nIGlzIG5vdCBt YXRjaFxuIik7Cj4gCj4gJ1NJRCBtaXNtYXRjaCBiZXR3ZWVuIG1zaS1tYXAgYW5kIGlvbW11LW1h cCcKPiAKPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQkJfQo+ID4gKwkJCWlmICgobXNp X21hcC0+c2lkX2xlbiAmIElNWDk1X1NJRF9NQVNLKSAhPSBzbW11X21hcC0+c2lkX2xlbikgewo+ ID4gKwkJCQlkZXZfZXJyKGRldiwgInNpZF9sZW4gc2V0dGluZyBpcyBub3QgbWF0Y2hcbiIpOwo+ IAo+ICdTSUQgbGVuZ3RoICBtaXNtYXRjaCBiZXR3ZWVuIG1zaS1tYXAgYW5kIGlvbW11LW1hcCcK PiAKPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCQkJfQo+ID4gKwkJfQo+ID4gKwl9Cj4g PiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIFNpbXBsZSBz dGF0aWMgY29uZmlnIGx1dCBhY2NvcmRpbmcgdG8gZHRzIHNldHRpbmdzIERBQyBpbmRleCBhbmQg c3RyZWFtIElEIHVzZWQgYXMgYSBtYXRjaCByZXN1bHQKPiA+ICsgKiBvZiBMVVQgcHJlLWFsbG9j YXRlZCBhbmQgdXNlZCBieSBQQ0llcy4KPiA+ICsgKgo+IAo+IFBsZWFzZSByZXdvcmQgdGhlIGFi b3ZlIHNlbnRlbmNlLgoKSG93IGFib3V0OgoKIkEgc3RyYWlnaHRmb3J3YXJkIHN0YXRpYyBjb25m aWd1cmF0aW9uIGxvb2t1cCB0YWJsZSAoTFVUKSBpcyBlc3RhYmxpc2hlZApiYXNlZCBvbiB0aGUg c3RyZWFtIElEIHNwZWNpZmllZCBpbiB0aGUgRFRTIHNldHRpbmdzLiIKCj4gCj4gPiArICogQ3Vy cmVudGx5IHN0cmVhbSBJRCBmcm9tIDMyLTY0IGZvciBQQ0llLgo+ID4gKyAqIDMyLTQwOiBmaXJz dCBQQ0kgYnVzLgo+ID4gKyAqIDQwLTQ4OiBzZWNvbmQgUENJIGJ1cy4KPiAKPiBJIGJlbGlldmUg dGhpcyBpcyBhbiBTb0Mgc3BlY2lmaWMgaW5mby4gU28gYmV0dGVyIG5vdCBhZGQgaXQgaGVyZS4g SXQgYmVsb25ncyB0bwo+IERULgo+IAo+ID4gKyAqCj4gPiArICogREFDX0lEIGlzIGluZGV4IG9m IFRSREMuREFDIGluZGV4LCBzdGFydCBmcm9tIDIgYXQgaU1YOTUuCj4gPiArICogSVRTIFtwY2ko MmJpdCk6IHN0cmVhbWlkKDZiaXRzKV0KPiA+ICsgKglwY2kgMCBpcyAwCj4gPiArICoJcGNpIDEg aXMgMwo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbnQgaW14X3BjaWVfY29uZmlnX3NpZChzdHJ1Y3Qg aW14X3BjaWUgKmlteF9wY2llKQo+ID4gK3sKPiA+ICsJc3RydWN0IGlteF9vZl9tYXAgKm1zaV9t YXAgPSBOVUxMLCAqc21tdV9tYXAgPSBOVUxMLCAqY3VyOwo+ID4gKwlpbnQgaSwgaiwgbHV0X2lu ZGV4LCBucl9tYXAsIG1zaV9zaXplID0gMCwgc21tdV9zaXplID0gMDsKPiA+ICsJdTMyIG1zaV9t YXBfbWFzayA9IDB4ZmZmZiwgc21tdV9tYXBfbWFzayA9IDB4ZmZmZjsKPiA+ICsJc3RydWN0IGR3 X3BjaWUgKnBjaSA9IGlteF9wY2llLT5wY2k7Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBj aS0+ZGV2Owo+ID4gKwl1MzIgbWFzazsKPiA+ICsJaW50IHNpemU7Cj4gPiArCj4gPiArCW9mX2dl dF9wcm9wZXJ0eShkZXYtPm9mX25vZGUsICJtc2ktbWFwIiwgJm1zaV9zaXplKTsKPiA+ICsJaWYg KG1zaV9zaXplKSB7Cj4gCj4gWW91IG1lbnRpb25lZCBpbiB0aGUgY29tbWl0IG1lc3NhZ2UgdGhh dCBtc2ktbWFwIGFuZCBpb21tdS1tYXAgbmVlZHMgdG8gYmUgdGhlCj4gc2FtZSBmb3IgdGhpcyBT b0MuIEJ1dCBoZXJlIHlvdSBhcmUganVzdCBpZ25vcmluZyB0aGUgYWJzZW5jZSBvZiAnbXNpLW1h cCcKPiBwcm9wZXJ0eS4KCklmIG1zaS1tYXAgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGZhaWwgYmFj ayB0byB1c2UgRFdDJ3MgbXNpIGNvbnRyb2xsZXIKaW5zdGVhbmQgb2YgSVRTLgoKRG8geW91IHRo aW5rIG5lZWQgY29tbWVudHMgaGVyZSBmb3IgdGhhdD8KCj4gCj4gPiArCQltc2lfbWFwID0gZGV2 bV9remFsbG9jKGRldiwgbXNpX3NpemUsIEdGUF9LRVJORUwpOwo+ID4gKwkJaWYgKCFtc2lfbWFw KQo+ID4gKwkJCXJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gKwkJaWYgKG9mX3Byb3BlcnR5X3Jl YWRfdTMyX2FycmF5KGRldi0+b2Zfbm9kZSwgIm1zaS1tYXAiLCAodTMyICopbXNpX21hcCwKPiA+ ICsJCQkJCSAgICAgICBtc2lfc2l6ZSAvIHNpemVvZih1MzIpKSkKPiA+ICsJCQlyZXR1cm4gLUVJ TlZBTDsKPiA+ICsKPiA+ICsJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgIm1z aS1tYXAtbWFzayIsICZtc2lfbWFwX21hc2spOwo+ID4gKwl9Cj4gPiArCj4gPiArCWN1ciA9IG1z aV9tYXA7Cj4gPiArCXNpemUgPSBtc2lfc2l6ZTsKPiA+ICsJbWFzayA9IG1zaV9tYXBfbWFzazsK PiA+ICsKPiA+ICsJb2ZfZ2V0X3Byb3BlcnR5KGRldi0+b2Zfbm9kZSwgImlvbW11LW1hcCIsICZz bW11X3NpemUpOwo+IAo+IFNhbWUgY29tbWVudCBhcyBhYm92ZS4KCklmIGlvbW11LW1hcCB3YXMg bm90IGV4aXN0LCBpdCB3aWxsIHdvcmsgd2l0aG91dCBpb21tdS4gdGhlIGNvbWJpbmF0aW9uCmFz IGJlbG93ICg0IGNhc2VzKS4KCQkJbm90LWV4aXN0ICAgICAgICAgIGV4aXQKbXNpLW1hcCAgICAg ICAgICAgICAgICAgICBkdy1tc2kgICAgICAgICAgIGl0cwppb21tdS1tYXAJCSAgYnktcGFzcy1t bXUJICAgc21tdQoKUmVxdWlyZSBzdHJlYW0gaWQgbXVzdCBiZSB0aGUgc2FtZSBvbmx5IHdoZW4g Ym90aCBtc2ktbWFwIGFuZCBpb21tdSBleGlzdC4KCj4gCj4gPiArCWlmIChzbW11X3NpemUpIHsK PiA+ICsJCXNtbXVfbWFwID0gZGV2bV9remFsbG9jKGRldiwgc21tdV9zaXplLCBHRlBfS0VSTkVM KTsKPiA+ICsJCWlmICghc21tdV9tYXApCj4gPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4g PiArCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZGV2LT5vZl9ub2RlLCAiaW9tbXUt bWFwIiwgKHUzMiAqKXNtbXVfbWFwLAo+ID4gKwkJCQkJICAgICAgIHNtbXVfc2l6ZSAvIHNpemVv Zih1MzIpKSkKPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJCW9mX3Byb3BlcnR5 X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgImlvbW11X21hcF9tYXNrIiwgJnNtbXVfbWFwX21hc2sp Owo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChpbXhfY2hlY2tfbXNpX2FuZF9zbW1tdShpbXhfcGNp ZSwgbXNpX21hcCwgbXNpX3NpemUsIG1zaV9tYXBfbWFzaywKPiA+ICsJCQkJICAgICBzbW11X21h cCwgc21tdV9zaXplLCBzbW11X21hcF9tYXNrKSkKPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4g Kwo+IAo+IEhtbSwgc28geW91IHdhbnQgdG8gY29udGludWUgZXZlbiBpZiB0aGUgJ21zaS1tYXAn IGFuZCAnaW9tbXUtbWFwJyBwcm9wZXJ0aWVzCj4gZG9uJ3QgZXhpc3QgaS5lLiwgZm9yIG9sZCBw bGF0Zm9ybXM/CgppbXhfY2hlY2tfbXNpX2FuZF9zbW1tdSgpIHdpbGwgcmV0dXJuIDAgd2hlbiBz bW11X21hcCBpcyBudWxsLgoKPiAKPiA+ICsJaWYgKCFjdXIpIHsKPiA+ICsJCWN1ciA9IHNtbXVf bWFwOwo+ID4gKwkJc2l6ZSA9IHNtbXVfc2l6ZTsKPiA+ICsJCW1hc2sgPSBzbW11X21hcF9tYXNr Owo+ID4gKwl9Cj4gPiArCj4gPiArCW5yX21hcCA9IHNpemUgLyAoc2l6ZW9mKCpjdXIpKTsKPiA+ ICsKPiA+ICsJbHV0X2luZGV4ID0gMDsKPiAKPiBKdXN0IGluaXRpYWxpemUgaXQgd2hpbGUgZGVm aW5pbmcgaXRzZWxmLgo+IAo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnJfbWFwOyBpKyspIHsKPiA+ ICsJCWZvciAoaiA9IDA7IGogPCBjdXItPnNpZF9sZW47IGorKykgewo+ID4gKwkJCWlteF9wY2ll X3VwZGF0ZV9sdXQoaW14X3BjaWUsIGx1dF9pbmRleCwgY3VyLT5iZGYgKyBqLCBtYXNrLAo+ID4g KwkJCQkJICAgIChjdXItPnNpZCArIGopICYgSU1YOTVfU0lEX01BU0spOwo+ID4gKwkJCWx1dF9p bmRleCsrOwo+ID4gKwkJfQo+ID4gKwkJY3VyKys7Cj4gPiArCj4gPiArCQlpZiAobHV0X2luZGV4 ID49IElNWDk1X01BWF9MVVQpIHsKPiA+ICsJCQlkZXZfZXJyKGRldiwgIml0cy1tYXAvaW9tbXUt bWFwIGV4Y2VlZCBIVyBsaW1pYXRpb25cbiIpOwo+IAo+ICdUb28gbWFueSBtc2ktbWFwL2lvbW11 LW1hcCBlbnRyaWVzJwo+IAo+IEJ1dCBJIHRoaW5rIHlvdSBjYW4ganVzdCBjb250aW51ZSB0byB1 c2UgdGhlIGFsbG93ZWQgZW50cmllcy4KPiAKPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsJ CX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlkZXZtX2tmcmVlKGRldiwgc21tdV9tYXApOwo+ID4gKwlk ZXZtX2tmcmVlKGRldiwgbXNpX21hcCk7Cj4gCj4gUGxlYXNlIGRvbid0IGV4cGxpY2l0bHkgZnJl ZSB0aGUgZGV2bV8gbWFuYWdlZCByZXNvdXJjZXMgdW5sZXNzIHJlYWxseSBuZWVkZWQuCj4gRWxz ZSBkb24ndCB1c2UgZGV2bV8gYXQgYWxsLgoKSXQnZCBiZXR0ZXIgdXNlIGF1dG8gY2xlYW4gdXAg ZnVuY3Rpb24gX19mcmVlKGtmcmVlKSBoZXJlLgo+IAo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ ICt9Cj4gPiArCj4gPiAgc3RhdGljIHZvaWQgaW14X3BjaWVfY29uZmlndXJlX3R5cGUoc3RydWN0 IGlteF9wY2llICppbXhfcGNpZSkKPiA+ICB7Cj4gPiAgCWNvbnN0IHN0cnVjdCBpbXhfcGNpZV9k cnZkYXRhICpkcnZkYXRhID0gaW14X3BjaWUtPmRydmRhdGE7Cj4gPiBAQCAtOTUwLDYgKzExMTks MTIgQEAgc3RhdGljIGludCBpbXhfcGNpZV9ob3N0X2luaXQoc3RydWN0IGR3X3BjaWVfcnAgKnBw KQo+ID4gIAkJZ290byBlcnJfcGh5X29mZjsKPiA+ICAJfQo+ID4gIAo+ID4gKwlyZXQgPSBpbXhf cGNpZV9jb25maWdfc2lkKGlteF9wY2llKTsKPiA+ICsJaWYgKHJldCA8IDApIHsKPiA+ICsJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNvbmZpZyBzaWQ6JWRcbiIsIHJldCk7Cj4gCj4gJ0ZhaWxl ZCB0byBjb25maWcgQkRGIHRvIFNJRCBtYXBwaW5nOiAlZFxuJwo+IAo+IC0gTWFuaQo+IAo+IC0t IAo+IOCuruCuo+Cuv+CuteCuo+CvjeCuo+CuqeCvjSDgrprgrqTgrr7grprgrr/grrXgrq7gr40K Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFy bS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1r ZXJuZWwK