Received: by 2002:a05:7412:98c1:b0:fa:551:50a7 with SMTP id kc1csp1765595rdb; Mon, 8 Jan 2024 09:27:35 -0800 (PST) X-Google-Smtp-Source: AGHT+IGID3OcV2VpFKX5hccqFpExCPDR13z7nxThbN79we9fcq0nISefdpvB0F3EAzZGJFKOIWmL X-Received: by 2002:a05:6214:e4c:b0:680:ffed:c1bf with SMTP id o12-20020a0562140e4c00b00680ffedc1bfmr3633448qvc.54.1704734855383; Mon, 08 Jan 2024 09:27:35 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1704734855; cv=pass; d=google.com; s=arc-20160816; b=L5mCYUDHfiyoDcG0mJDAZ/Dheu4oojUv8NuGiGSlFylSaabADRvMuLHcOGXozLCvZT wk+SlXxGGnkboalzwcgucM2K1+F4Q0xXgO/NrEr2wspA/k0xqGFcKRV6+azeGCLPP/ZQ hyyJ1yVGMw34QOWWyRzFo25ULV7pc7F8utQ4TlMrgDZXhiGbwroxfk7m8FVcxCcDP0Lm EW86FB3mxwv2MZpQZV7pCwwH+LeXu9TN/WGgoU5JxJlqD1rrLmJHpT3ycWOiIISK1Yrk 8OTp+GF99X3uAX1scUzqi9lK0q7kExyU3EUZiE5PpJ6iigtcKzKT9/qtYcd2A9ZYzh7f 1sFA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :content-transfer-encoding:content-language:accept-language :in-reply-to:references:message-id:date:thread-index:thread-topic :subject:cc:to:from:dkim-signature; bh=++78lpwPhg6HrFKdH/YAhdiCbyVEP4jLKVbrQL56FyM=; fh=4uOc9PRZ373wTRql1eJMWOZK1+4udcA1rnlvbBGrzCI=; b=DixZzcd9KDxjJ4xS7/IvNMQGQ/gWhcvaDzUvZc3TAuPV3/vg0eqqCandEkK8wtd1gM 5sixCMSDVRjKHjiZsfgmHvEcIcq1J2m3m6Bav/8I+kpptke4+9r41Y1UButq35BmCc5E cJJh4rfsuS7bZI3MBAYbCjVqBB5aphsGyisv5gSDBqc4Gtd2hJ4V1tLW6UvsDfJ41gDh 0WBnv1XeGjXcpJx1ddAd4YchObpR1y9yaq5tiaIHrd8Fqgr4v1TiGSFh+TfX1Q00PaO4 ykdrAtNe/tuljLb4zCQoqW6S0JXfgtZc+ElEV4dE0GRiulze5/J2u2uGH3CnfdA2YPJN x6TQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@Nvidia.com header.s=selector2 header.b=ClU8Z+4u; arc=pass (i=1 spf=pass spfdomain=nvidia.com dkim=pass dkdomain=nvidia.com dmarc=pass fromdomain=nvidia.com); spf=pass (google.com: domain of linux-kernel+bounces-19894-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19894-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=nvidia.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id d6-20020a0cdb06000000b0067f85f97066si330685qvk.586.2024.01.08.09.27.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jan 2024 09:27:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-19894-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@Nvidia.com header.s=selector2 header.b=ClU8Z+4u; arc=pass (i=1 spf=pass spfdomain=nvidia.com dkim=pass dkdomain=nvidia.com dmarc=pass fromdomain=nvidia.com); spf=pass (google.com: domain of linux-kernel+bounces-19894-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-19894-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=nvidia.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 1800E1C2264D for ; Mon, 8 Jan 2024 17:27:35 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6D6E754672; Mon, 8 Jan 2024 17:27:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="ClU8Z+4u" X-Original-To: linux-kernel@vger.kernel.org Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2043.outbound.protection.outlook.com [40.107.243.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7839454665; Mon, 8 Jan 2024 17:27:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TTEJFAZP+grbsILjGvA7abFpFShDCixk9ddE/3fUmxlOHhtRrR95ZJ+rPSIyzUy8OTmCbrKfZwVxeznB4qy5cJhdURiaPpoAVQ0xLbzO6i+9sWvBhvZZ2U6kx18pq0b+Cst7mx+v23n1s1JZ3ToT41SGej/VgnAn6QkYlfF4uUNsGwWpPRPLv1S0mpBw0Mfwgsz8HUE58Y9I7U1tuqC8y5/70yPBbFCaNDtXteBhpE+rL6zfBiE7VhI3QytVa0IGkkpKXmbVyXWaM5MOGGFTxBr1V5RTsCpS7K9k4o/ItWkykNnZvRn9RwcstQ+n4RRDcsT3JL2PkcBQrNQ1QGxgew== 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=++78lpwPhg6HrFKdH/YAhdiCbyVEP4jLKVbrQL56FyM=; b=NRvd7fGL4F1teSKlxm9H4QkUmgXk/gRdgOo9sCk0CC2Hh/MvJWCDJL4TlYA8+iEB3cj8GnXqtGL4yF3J2NBFVOvRUJIEnf2StuKHMBN1OSQW8A9hEZbCraxl7VYqqsgbdYNqVuun/BZuYZCOqXfr/aruSibUbiDXrd/BvR5Bwze7c716t7TmBxq40vL+hcjZhie2APwr0c8QYYOyzX2fwt28yN+F+XSxFjw2y6To9h6nRppYhtv2jl4pLKpeZEuxNjP9ncouywkLTwHjcNk3caaxhsngTioQoo3GQhSjgcPNvCY2c2Seb1Xwp1M7HfYeFkXEMvf7MRuZLyPKlR5Plw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=++78lpwPhg6HrFKdH/YAhdiCbyVEP4jLKVbrQL56FyM=; b=ClU8Z+4uJeC4bdJ2J6p+soDH971jAf9F7H5slPeSu7iKvSxCiKxa+spJc/5Ey28zKfqb4RHqnI29qAzPGhaXVBG9OxFASOI674HUfKRDouvXgfbfM/minufJhrsBsBCJ7lKf/pOWPf2rQQQ7E5ZlDMGbZ2qhv1XyaaBYsT7o8fN748Pmd6g53wTcOHV3txqWhb/2BdNP+rxTcq/gcQ9pfZQ+OE7+cvnzNgqnFoyDYWu9tpYqOlZNtJq0IaiIjHb+wjfvfwVcD1+LVUU7BO13Uw8Re+tEhsQO0mS6qAd64cvT8OVCqm0440Z7z8Lw769AN5xuHHdGkKwn0uImkGCpIw== Received: from BN9PR12MB5068.namprd12.prod.outlook.com (2603:10b6:408:135::21) by DM4PR12MB7720.namprd12.prod.outlook.com (2603:10b6:8:100::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7159.21; Mon, 8 Jan 2024 17:27:19 +0000 Received: from BN9PR12MB5068.namprd12.prod.outlook.com ([fe80::e0a8:ea57:c1b2:28ab]) by BN9PR12MB5068.namprd12.prod.outlook.com ([fe80::e0a8:ea57:c1b2:28ab%4]) with mapi id 15.20.7159.020; Mon, 8 Jan 2024 17:27:18 +0000 From: Liming Sun To: Hans de Goede , =?utf-8?B?SWxwbyBKw6RydmluZW4=?= CC: Vadim Pasternak , David Thompson , Mark Gross , Dan Carpenter , "platform-driver-x86@vger.kernel.org" , LKML Subject: RE: [PATCH v2 1/1] Drop Tx network packet when Tx TmFIFO is full Thread-Topic: [PATCH v2 1/1] Drop Tx network packet when Tx TmFIFO is full Thread-Index: AQHaPyC5P7fD0yPdoEqpu5OIzX2cALDJ622AgAGRT2CABIFhgIAAMLuA Date: Mon, 8 Jan 2024 17:27:18 +0000 Message-ID: References: <02fd0faaa555d1914b6ff4bd4b0b294e16989cef.1704381197.git.limings@nvidia.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BN9PR12MB5068:EE_|DM4PR12MB7720:EE_ x-ms-office365-filtering-correlation-id: fce7c508-7e98-49e4-ccb8-08dc106f10a4 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 7AUfGFNhj7LTL4FUfLviteE+2HrvAKoArqiX3JTQArC3gjk3aSy+CYuyErbS14JJs9fFjkq07LfqjPOksYOix062cVqWU/24OmVFzTS+0P++xgp7Ds0HvMXse348YsC5rZb20erAmx5cBNezgLwXgto3dXEmv/wBBIzXJtRe8zWvh4DfAUa98e33QYFdlxOPjIT7adPFXHFDe+t5OOa1Wsrc/iaPFMOw/5xXgEGLpNygZi1fleDYN9z+FN4rJIfy+33uOyW5I+U8LptjBjn2ytUCQ3+UM7B2vgxRqeelinr4Sx1TWCBndzQxx5FWw7u9R4knAqsUti6iedAOlLTMTacuhOqrLc0wNiiL9v5ijMb8wAu6r9pd3IXub3ivn7ydMoQSa3NVkYCaV1S6v9zJ2piHVUlz5A6FDC6oS4tOys17dpYBmJyIb0t1YT6UGwMsYlfAURs52rhujctSrClLnZDVz0pAhN1LAPwKyTUDa8aAG2NCnIvadQiWXswDr0dJml2J7W9s9CwyYgMZUyhnV2YmtZFbfgU1Qv2UeUs4eKY2ZpOzS7a+U95hZ5hQF06LyTxNUQpZkyG4oFCixe0NMstWR9RIeAHnJamj8BJCyLLV28M5DQUxK/HLlwd9EUCFrwsewFBlb13t8NLOO8kRilYVogBEWIN5iIl8n97Zh2+vcqfhlBg6Nf7oWjALM8uJ x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN9PR12MB5068.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(346002)(396003)(39860400002)(366004)(376002)(136003)(230922051799003)(230273577357003)(230173577357003)(186009)(1800799012)(64100799003)(451199024)(55016003)(83380400001)(33656002)(5660300002)(26005)(66574015)(86362001)(6506007)(71200400001)(7696005)(122000001)(478600001)(38100700002)(9686003)(53546011)(41300700001)(66556008)(54906003)(110136005)(66946007)(38070700009)(2906002)(66476007)(64756008)(4326008)(8676002)(76116006)(66446008)(52536014)(8936002)(316002)(21314003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZlhTdU9CV1h6azJQRVFsSmJ0SFI3aVdReUV6M29HRnk2YnNYc2pDb0lRQVhI?= =?utf-8?B?bHAwMmVhYkI3dGV2L0ZHbnhIdTlQUEJqRHdROTE5M2VkMjRuUm1GdEJ3L2x3?= =?utf-8?B?UDRWM3crK1FaTEFiOWhIb1VlZTIzSjF0UGJQajYrRUR1RjFSSUxvc2lHSEIx?= =?utf-8?B?a0c0TFdjN2FmZ2hPdkpnMmJlVktQSmJNQ2VPMzRvU1NxNFd0cklLVmdERlM4?= =?utf-8?B?WXloMVFuV2ZodmRqRU91NXVLTGtEWkpZVkgvV1BYazVMVUIvbFdOYk9xdjg0?= =?utf-8?B?eTNNSWcyUkF6aFFhdFM4QStESldsWXRncHVNd0Y2MVE3ZGw5eWNQT2c5aW1M?= =?utf-8?B?VklWbDE5NUZ2YThaN0FycHVpRksyM2dBMWJpNDFSSkxpK1k3TVlyNTgwS0gv?= =?utf-8?B?dUlrdmlwNXZNbnRnU2hMVmdPL01aYlY2dEZDWW9DQmN2UmNESmY2ZEs4MktD?= =?utf-8?B?V1ducWdvbFBiWVlSZldrbWZPSm1iMjlZaTF4enFJNGZ6dnpkb3FGcFl3WjRN?= =?utf-8?B?NlAwY3BJNXdlaXlQK1dabUpoYnI1Vis2N01LcGFwcmFQSEh6OE1TUGliQy9Q?= =?utf-8?B?eEtiSG9taFJYWmk3cmE1T1dtZFNLWWhYWnROU3VkMldUOXNtVU5aN2RRRTJO?= =?utf-8?B?aFlkdWdKcG1QemJ4S2oyVm9KUjZDS0g1OEs2YmtRWnVLN3ZCdFlQZmpTRVBa?= =?utf-8?B?R0RnVjBmaHNOZmh2aEVOMHhSZGl4QXdYTkFSdFYvcGVrcFdtTlFvV0lEOWRk?= =?utf-8?B?RXc2bVJwSk4yUGhQbDdGWDlFRVdUZWRUWHBJNkt1VGhvUm9WYWtqSlVmNHA4?= =?utf-8?B?YVlXTnBwZFpvMVpaejdyaGMxc3VYR0UzVnlKQ2tmaHlLZ2ZJUm9scGNxWUgw?= =?utf-8?B?R3JzWmcrNHZBbDFYUjQwSEY2L21UcFJQYkpISDE3RUVTVVR1OHBvcEJ1OERx?= =?utf-8?B?OHY5aExPV2hrajIya0RVUjlhbmEyTGlENUVsOTlqV1ZIc21qeGJSd2YzRzl2?= =?utf-8?B?QysvaWdPUG5QNk5GMFIvN3g4TFArY0RmVm44THRzMGFrODVPemJCMGVwOTV4?= =?utf-8?B?TVZVdlhVZ0hQRUlEa3prSUpidGliTFd1OE5ubHI1T05JdEZSVmpVN1VQdzFL?= =?utf-8?B?WnVLQklhUXdzYmlGRHNtaEJxSzdSYzFYQTJ6YlU5bmpwcmsyL0lwZGFsL1p6?= =?utf-8?B?enJZL0U1N0JQYnNnbTBzaE1UVWpxWlgvR3RoanBiYzBMcUZsbEM5alhEUmdz?= =?utf-8?B?YlIwMTFEN1RBL2pZdnNzQk1zTVNpN3ZobWwvcVd2K2p5d2lhckFVOTZKVzZY?= =?utf-8?B?VE4yZzRSVFd6QXBSbFUzclhGSVBtOWVXMHlqQTRoWFNSSGtMaFRyYmg2Sjdm?= =?utf-8?B?cjVnVnNZSjNEMzVyR2FmL2prTXd1TklZbWEvNVZWWGVoL3RHM2l0LzBDZHpt?= =?utf-8?B?VTRlZ0dzU0JSSHFFQk5nenZYdXJmeVJ0RW5IM1U5aGxCejZoSlNCRVBpaTU3?= =?utf-8?B?WUd4anhpVDVnQms1WGE2L2ZDR2JSeHYzUzFlcUh1aXVNbUkxVmdQdkJHRTNL?= =?utf-8?B?MnU2N3N2MXA5LzBQblFTTmFaWmRMaDFxRG14Q2k1ZkVSWmtZVzZhbWRDTHZs?= =?utf-8?B?a0lTU2NSWkhGOGk0TmVxd1dIUUlJeHhKNld6ZFlSQTRqY3M5VHRBV24vUUN3?= =?utf-8?B?QmtraVNqWDgveS9VczY5ZkJpalFtUTVzeFN6QXNHUGNCM0NsYWJmL0pOWFhk?= =?utf-8?B?R2E4Ny9nQlRnaU5mZ2dNTUpvYUFqcHVxelhaS0wwbGMybFFUS3YxeGNhL2lS?= =?utf-8?B?U0VRMVIxeDZ2TFZXU0lGVkpDYjg0dlpPSXd4d0RTZCtFaGR6TW1KVmJoRXRi?= =?utf-8?B?SCt5b3dsRWl5YnRNQnE4eFZIdGtEektZNjV3ZklUY3JONFRhQUlQQmgxSXhR?= =?utf-8?B?cUJHUmhYSVEyMDJTZXR6MS9iNUJIQS9lVk4zelQ1YzgxUkhpVSs5bzlQVU9v?= =?utf-8?B?dys3ZUp4QXI0TEpwQW12Q0MxdzM0WFozTmNkRnViQldBK2lWRmpGS0I5MTFq?= =?utf-8?B?ZXVmSzVhV2lUZXd5NGVBMm1LcHF5YkNXUWdpcDQrdmVjUjZQNytTeFJFbTly?= =?utf-8?Q?KrtXSbTkEC1k2M8/uDwErQpVd?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR12MB5068.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fce7c508-7e98-49e4-ccb8-08dc106f10a4 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jan 2024 17:27:18.6201 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xrCBJlL91yCf521rkkQjkj+7qV3rlW+wV41pnA7Ypf6xKpV2IHUXGsMWfu5xr2S+oH2fWwqyidRKrZ76NLPD4A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB7720 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSGFucyBkZSBHb2VkZSA8 aGRlZ29lZGVAcmVkaGF0LmNvbT4NCj4gU2VudDogTW9uZGF5LCBKYW51YXJ5IDgsIDIwMjQgOToy MyBBTQ0KPiBUbzogTGltaW5nIFN1biA8bGltaW5nc0BudmlkaWEuY29tPjsgSWxwbyBKw6Rydmlu ZW4NCj4gPGlscG8uamFydmluZW5AbGludXguaW50ZWwuY29tPg0KPiBDYzogVmFkaW0gUGFzdGVy bmFrIDx2YWRpbXBAbnZpZGlhLmNvbT47IERhdmlkIFRob21wc29uDQo+IDxkYXZ0aG9tcHNvbkBu dmlkaWEuY29tPjsgTWFyayBHcm9zcyA8bWFya2dyb3NzQGtlcm5lbC5vcmc+OyBEYW4NCj4gQ2Fy cGVudGVyIDxkYW4uY2FycGVudGVyQGxpbmFyby5vcmc+OyBwbGF0Zm9ybS1kcml2ZXIteDg2QHZn ZXIua2VybmVsLm9yZzsNCj4gTEtNTCA8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz4NCj4g U3ViamVjdDogUmU6IFtQQVRDSCB2MiAxLzFdIERyb3AgVHggbmV0d29yayBwYWNrZXQgd2hlbiBU eCBUbUZJRk8gaXMgZnVsbA0KPiANCj4gSGksDQo+IA0KPiBPbiAxLzUvMjQgMTg6NDAsIExpbWlu ZyBTdW4gd3JvdGU6DQo+ID4NCj4gPg0KPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PiA+PiBGcm9tOiBJbHBvIErDpHJ2aW5lbiA8aWxwby5qYXJ2aW5lbkBsaW51eC5pbnRlbC5jb20+ DQo+ID4+IFNlbnQ6IFRodXJzZGF5LCBKYW51YXJ5IDQsIDIwMjQgMTI6MzkgUE0NCj4gPj4gVG86 IExpbWluZyBTdW4gPGxpbWluZ3NAbnZpZGlhLmNvbT4NCj4gPj4gQ2M6IFZhZGltIFBhc3Rlcm5h ayA8dmFkaW1wQG52aWRpYS5jb20+OyBEYXZpZCBUaG9tcHNvbg0KPiA+PiA8ZGF2dGhvbXBzb25A bnZpZGlhLmNvbT47IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Ow0KPiA+PiBN YXJrIEdyb3NzIDxtYXJrZ3Jvc3NAa2VybmVsLm9yZz47IERhbiBDYXJwZW50ZXINCj4gPj4gPGRh bi5jYXJwZW50ZXJAbGluYXJvLm9yZz47IHBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwu b3JnOyBMS01MDQo+ID4+IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPg0KPiA+PiBTdWJq ZWN0OiBSZTogW1BBVENIIHYyIDEvMV0gRHJvcCBUeCBuZXR3b3JrIHBhY2tldCB3aGVuIFR4IFRt RklGTyBpcyBmdWxsDQo+ID4+DQo+ID4+IE9uIFRodSwgNCBKYW4gMjAyNCwgTGltaW5nIFN1biB3 cm90ZToNCj4gPj4NCj4gPj4+IFN0YXJ0aW5nIGZyb20gTGludXggNS4xNiBrZXJuZWwsIFR4IHRp bWVvdXQgbWVjaGFuaXNtIHdhcyBhZGRlZA0KPiA+Pj4gaW50byB0aGUgdmlydGlvX25ldCBkcml2 ZXIgd2hpY2ggcHJpbnRzIHRoZSAiVHggdGltZW91dCIgbWVzc2FnZQ0KPiA+Pj4gd2hlbiBhIHBh Y2tldCBpcyBzdHVjayBpbiBUeCBxdWV1ZSBmb3IgdG9vIGxvbmcgd2hpY2ggY291bGQgaGFwcGVu DQo+ID4+PiB3aGVuIGV4dGVybmFsIGhvc3QgZHJpdmVyIGlzIHN0dWNrIG9yIHN0b3BwZWQgYW5k IGZhaWxlZCB0byByZWFkDQo+ID4+PiB0aGUgRklGTy4NCj4gPj4+DQo+ID4+PiBCZWxvdyBpcyBh biBleGFtcGxlIG9mIHRoZSByZXBvcnRlZCBtZXNzYWdlOg0KPiA+Pj4NCj4gPj4+ICJbNDk0MTA1 LjMxNjczOV0gdmlydGlvX25ldCB2aXJ0aW8xIHRtZmlmb19uZXQwOiBUWCB0aW1lb3V0IG9uDQo+ ID4+PiBxdWV1ZTogMCwgc3E6IG91dHB1dC4wLCB2cTogMMOXMSwgbmFtZTogb3V0cHV0LjAsIHVz ZWNzIHNpbmNlDQo+ID4+PiBsYXN0IHRyYW5zOiAzMDc5ODkyMjU2Ii4NCj4gPj4+DQo+ID4+PiBU byBhdm9pZCBzdWNoICJUeCB0aW1lb3V0IiBtZXNzYWdlcywgdGhpcyBjb21taXQgYWRkcyBhIHRp bWVvdXQNCj4gPj4+IG1lY2hhbmlzbSB0byBkcm9wIGFuZCByZWxlYXNlIHRoZSBwZW5kaW5nIFR4 IHBhY2tldCBpZiBub3QgYWJsZSB0bw0KPiA+Pj4gdHJhbnNtaXQgZm9yIHR3byBzZWNvbmRzIGR1 ZSB0byBUeCBGSUZPIGZ1bGwuDQo+ID4+Pg0KPiA+Pj4gVGhpcyBjb21taXQgYWxzbyBoYW5kbGVz IHRoZSBzcGVjaWFsIGNhc2UgdGhhdCB0aGUgcGFja2V0IGlzIGhhbGYtDQo+ID4+PiB0cmFuc21p dHRlZCBpbnRvIHRoZSBUeCBGSUZPLiBJbiBzdWNoIGNhc2UsIHRoZSBwYWNrZXQgaXMgZGlzY2Fy ZGVkDQo+ID4+PiB3aXRoIHJlbWFpbmluZyBsZW5ndGggc3RvcmVkIGluIHZyaW5nLT5yZW1fcGFk ZGluZy4gU28gcGFkZGluZ3Mgd2l0aA0KPiA+Pj4gemVyb3MgY2FuIGJlIHNlbnQgb3V0IHdoZW4g VHggc3BhY2UgaXMgYXZhaWxhYmxlIHRvIG1haW50YWluIHRoZQ0KPiA+Pj4gaW50ZWdyaXR5IG9m IHRoZSBwYWNrZXQgZm9ybWF0LiBUaGUgcGFkZGVkIHBhY2tldCB3aWxsIGJlIGRyb3BwZWQgb24N Cj4gPj4+IHRoZSByZWNlaXZpbmcgc2lkZS4NCj4gPj4+DQo+ID4+PiBTaWduZWQtb2ZmLWJ5OiBM aW1pbmcgU3VuIDxsaW1pbmdzQG52aWRpYS5jb20+DQo+ID4+DQo+ID4+IFRoaXMgZG9lc24ndCBy ZWFsbHkgZXhwbGFpbiBob3cgaXQgaGVscHMgKG90aGVyIHRoYW4gYXZvaWRpbmcgdGhlDQo+ID4+ IG1lc3NhZ2Ugd2hpY2ggc291bmRzIGxpa2UganVzdCBoaWRpbmcgdGhlIGlzc3VlKS4gVGhhdCBp cywgaG93IHRoaXMgaGVscHMNCj4gPj4gdG8gcmVzdW1lIFR4PyBPciBkb2VzIFR4IHJlc3VtZT8g VGhlcmUncyBub3RoaW5nIHRvIGluZGljYXRlIGVpdGhlciB3YXkuDQo+ID4NCj4gPiBBcyB0aGUg Y29tbWl0IG1lc3NhZ2UgbWVudGlvbmVkLCB0aGUgZXhwaXJlZCBwYWNrZXQgaXMgZGlzY2FyZGVk IGFuZCB0aGUNCj4gPiBwYWNrZXQgYnVmZmVyIGlzIHJlbGVhc2VkIChzZWUgY2hhbmdlcyBvZiBj YWxsaW5nIG1seGJmX3RtZmlmb19yZWxlYXNlX3BrdCgpKS4NCj4gPiBUaGUgVHggd2lsbCByZXN1 bWUgYXV0b21hdGljYWxseSBvbmNlIHRoZSBGSUZPIHNwYWNlIGlzIGF2YWlsYWJsZSwgc3VjaCBh cw0KPiB3aGVuDQo+ID4gZXh0ZXJuYWwgaG9zdCBkcml2ZXIgc3RhcnRzIHRvIGRyYWluIHRoZSBU TUZJRk8uIE5vIG5lZWQgZm9yIGFueSBvdGhlciBsb2dpYy4NCj4gDQo+IEhtbSwgaXQgc2VlbXMg dG8gbWUgdGhhdCB0aGUgc2FtZSAocmVzdW1pbmcgb24gRklGTyBzcGFjZSBhdmFpbGFibGUpDQo+ IHdpbGwgaGFwcGVuIHdpdGhvdXQgdGhpcyBwYXRjaCA/DQoNClllcywgaXQncyB0cnVlLg0KDQo+ IA0KPiBTbyBhcyBJbHBvIG1lbnRpb25lZCB0aGUgb25seSBwdXJwb3NlIGhlcmUgc2VlbXMgdG8g YmUgdG8gYXZvaWQgdGhlIHdhcm5pbmcNCj4gZ2V0dGluZyBsb2dnZWQ/IEFuZCB0aGluZ3Mgd29y ayBwcm9wZXJseSB3aXRob3V0IHRoaXMgdG9vID8NCj4gDQo+IEkgZ3Vlc3MgdGhlIGFkdmFudGFn ZSBvZiB0aGlzIHBhdGNoIGlzIHRoYXQgZHVyaW5nIGEgYmxvY2tlZCBGSUZPIHBhY2tldHMNCj4g Z2V0IGRpc2NhcmRlZCByYXRoZXIgdGhlIHBpbGluZyB1cCA/DQo+IA0KPiBSZWdhcmRzLA0KPiAN Cj4gSGFucw0KDQpQcm9iYWJseSBJIG1pc3VuZGVyc3Rvb2QgSWxwbydzIGNvbW1lbnRzLg0KWWVz LCB0aGUgb25seSBwdXJwb3NlIGlzIHRvIGF2b2lkIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIChzaW5j ZSB1c2VycyBhbmQgUUEgZG9lc24ndCBsaWtlIHRoZXNlIG1lc3NhZ2VzKS4NCkl0IGlzIG9ubHkg Zm9yIG5ldHdvcmtpbmcgcGFja2V0LCB3aGljaCBzZWVtcyByZWFzb25hYmxlIHRvIGRyb3AgaXQg aWYgbm90IGFibGUgdG8gY29tcGxldGUgdGhlIHRyYW5zbWlzc2lvbiBpbiBzZWNvbmRzLg0KDQo+ IA0KPiANCj4gDQo+IA0KPiA+Pj4gLS0tDQo+ID4+PiAgZHJpdmVycy9wbGF0Zm9ybS9tZWxsYW5v eC9tbHhiZi10bWZpZm8uYyB8IDY3DQo+ID4+ICsrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ Pj4gIDEgZmlsZSBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspDQo+ID4+Pg0KPiA+Pj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMNCj4gPj4gYi9k cml2ZXJzL3BsYXRmb3JtL21lbGxhbm94L21seGJmLXRtZmlmby5jDQo+ID4+PiBpbmRleCA1YzY4 M2I0ZWFmMTAuLmYzOWI3YjlkMmJmZSAxMDA2NDQNCj4gPj4+IC0tLSBhL2RyaXZlcnMvcGxhdGZv cm0vbWVsbGFub3gvbWx4YmYtdG1maWZvLmMNCj4gPj4+ICsrKyBiL2RyaXZlcnMvcGxhdGZvcm0v bWVsbGFub3gvbWx4YmYtdG1maWZvLmMNCj4gPj4+IEBAIC00Nyw2ICs0Nyw5IEBADQo+ID4+PiAg LyogTWVzc2FnZSB3aXRoIGRhdGEgbmVlZHMgYXQgbGVhc3QgdHdvIHdvcmRzIChmb3IgaGVhZGVy ICYgZGF0YSkuICovDQo+ID4+PiAgI2RlZmluZSBNTFhCRl9UTUZJRk9fREFUQV9NSU5fV09SRFMJ CTINCj4gPj4+DQo+ID4+PiArLyogVHggdGltZW91dCBpbiBtaWxsaXNlY29uZHMuICovDQo+ID4+ PiArI2RlZmluZSBUTUZJRk9fVFhfVElNRU9VVAkJCTIwMDANCj4gPj4+ICsNCj4gPj4+ICAvKiBB Q1BJIFVJRCBmb3IgQmx1ZUZpZWxkLTMuICovDQo+ID4+PiAgI2RlZmluZSBUTUZJRk9fQkYzX1VJ RAkJCQkxDQo+ID4+Pg0KPiA+Pj4gQEAgLTYyLDEyICs2NSwxNCBAQCBzdHJ1Y3QgbWx4YmZfdG1m aWZvOw0KPiA+Pj4gICAqIEBkcm9wX2Rlc2M6IGR1bW15IGRlc2MgZm9yIHBhY2tldCBkcm9wcGlu Zw0KPiA+Pj4gICAqIEBjdXJfbGVuOiBwcm9jZXNzZWQgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IGRl c2NyaXB0b3INCj4gPj4+ICAgKiBAcmVtX2xlbjogcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgcGVu ZGluZyBwYWNrZXQNCj4gPj4+ICsgKiBAcmVtX3BhZGRpbmc6IHJlbWFpbmluZyBieXRlcyB0byBz ZW5kIGFzIHBhZGRpbmdzDQo+ID4+PiAgICogQHBrdF9sZW46IHRvdGFsIGxlbmd0aCBvZiB0aGUg cGVuZGluZyBwYWNrZXQNCj4gPj4+ICAgKiBAbmV4dF9hdmFpbDogbmV4dCBhdmFpbCBkZXNjcmlw dG9yIGlkDQo+ID4+PiAgICogQG51bTogdnJpbmcgc2l6ZSAobnVtYmVyIG9mIGRlc2NyaXB0b3Jz KQ0KPiA+Pj4gICAqIEBhbGlnbjogdnJpbmcgYWxpZ25tZW50IHNpemUNCj4gPj4+ICAgKiBAaW5k ZXg6IHZyaW5nIGluZGV4DQo+ID4+PiAgICogQHZkZXZfaWQ6IHZyaW5nIHZpcnRpbyBpZCAoVklS VElPX0lEX3h4eCkNCj4gPj4+ICsgKiBAdHhfdGltZW91dDogZXhwaXJlIHRpbWUgb2YgbGFzdCB0 eCBwYWNrZXQNCj4gPj4+ICAgKiBAZmlmbzogcG9pbnRlciB0byB0aGUgdG1maWZvIHN0cnVjdHVy ZQ0KPiA+Pj4gICAqLw0KPiA+Pj4gIHN0cnVjdCBtbHhiZl90bWZpZm9fdnJpbmcgew0KPiA+Pj4g QEAgLTc5LDEyICs4NCwxNCBAQCBzdHJ1Y3QgbWx4YmZfdG1maWZvX3ZyaW5nIHsNCj4gPj4+ICAJ c3RydWN0IHZyaW5nX2Rlc2MgZHJvcF9kZXNjOw0KPiA+Pj4gIAlpbnQgY3VyX2xlbjsNCj4gPj4+ ICAJaW50IHJlbV9sZW47DQo+ID4+PiArCWludCByZW1fcGFkZGluZzsNCj4gPj4+ICAJdTMyIHBr dF9sZW47DQo+ID4+PiAgCXUxNiBuZXh0X2F2YWlsOw0KPiA+Pj4gIAlpbnQgbnVtOw0KPiA+Pj4g IAlpbnQgYWxpZ247DQo+ID4+PiAgCWludCBpbmRleDsNCj4gPj4+ICAJaW50IHZkZXZfaWQ7DQo+ ID4+PiArCXVuc2lnbmVkIGxvbmcgdHhfdGltZW91dDsNCj4gPj4+ICAJc3RydWN0IG1seGJmX3Rt ZmlmbyAqZmlmbzsNCj4gPj4+ICB9Ow0KPiA+Pj4NCj4gPj4+IEBAIC04MTksNiArODI2LDUwIEBA IHN0YXRpYyBib29sIG1seGJmX3RtZmlmb19yeHR4X29uZV9kZXNjKHN0cnVjdA0KPiA+PiBtbHhi Zl90bWZpZm9fdnJpbmcgKnZyaW5nLA0KPiA+Pj4gIAlyZXR1cm4gdHJ1ZTsNCj4gPj4+ICB9DQo+ ID4+Pg0KPiA+Pj4gK3N0YXRpYyB2b2lkIG1seGJmX3RtZmlmb19jaGVja190eF90aW1lb3V0KHN0 cnVjdCBtbHhiZl90bWZpZm9fdnJpbmcNCj4gPj4gKnZyaW5nKQ0KPiA+Pj4gK3sNCj4gPj4+ICsJ dW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPj4+ICsNCj4gPj4+ICsJLyogT25seSBoYW5kbGUgVHgg dGltZW91dCBmb3IgbmV0d29yayB2ZGV2LiAqLw0KPiA+Pj4gKwlpZiAodnJpbmctPnZkZXZfaWQg IT0gVklSVElPX0lEX05FVCkNCj4gPj4+ICsJCXJldHVybjsNCj4gPj4+ICsNCj4gPj4+ICsJLyog SW5pdGlhbGl6ZSB0aGUgdGltZW91dCBvciByZXR1cm4gaWYgbm90IGV4cGlyZWQuICovDQo+ID4+ PiArCWlmICghdnJpbmctPnR4X3RpbWVvdXQpIHsNCj4gPj4+ICsJCS8qIEluaXRpYWxpemUgdGhl IHRpbWVvdXQuICovDQo+ID4+PiArCQl2cmluZy0+dHhfdGltZW91dCA9IGppZmZpZXMgKw0KPiA+ Pj4gKwkJCW1zZWNzX3RvX2ppZmZpZXMoVE1GSUZPX1RYX1RJTUVPVVQpOw0KPiA+Pj4gKwkJcmV0 dXJuOw0KPiA+Pj4gKwl9IGVsc2UgaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHZyaW5nLT50eF90 aW1lb3V0KSkgew0KPiA+Pj4gKwkJLyogUmV0dXJuIGlmIG5vdCB0aW1lb3V0IHlldC4gKi8NCj4g Pj4+ICsJCXJldHVybjsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkvKg0KPiA+Pj4gKwkg KiBEcm9wIHRoZSBwYWNrZXQgYWZ0ZXIgdGltZW91dC4gVGhlIG91dHN0YW5kaW5nIHBhY2tldCBp cw0KPiA+Pj4gKwkgKiByZWxlYXNlZCBhbmQgdGhlIHJlbWFpbmluZyBieXRlcyB3aWxsIGJlIHNl bnQgd2l0aCBwYWRkaW5nIGJ5dGUNCj4gPj4gMHgwMA0KPiA+Pj4gKwkgKiBhcyBhIHJlY292ZXJ5 LiBPbiB0aGUgcGVlcihob3N0KSBzaWRlLCB0aGUgcGFkZGluZyBieXRlcyAweDAwIHdpbGwgYmUN Cj4gPj4+ICsJICogZWl0aGVyIGRyb3BwZWQgZGlyZWN0bHksIG9yIGFwcGVuZGVkIGludG8gZXhp c3Rpbmcgb3V0c3RhbmRpbmcNCj4gPj4gcGFja2V0DQo+ID4+PiArCSAqIHRodXMgZHJvcHBlZCBh cyBjb3JydXB0ZWQgbmV0d29yayBwYWNrZXQuDQo+ID4+PiArCSAqLw0KPiA+Pj4gKwl2cmluZy0+ cmVtX3BhZGRpbmcgPSByb3VuZF91cCh2cmluZy0+cmVtX2xlbiwgc2l6ZW9mKHU2NCkpOw0KPiA+ Pj4gKwltbHhiZl90bWZpZm9fcmVsZWFzZV9wa3QodnJpbmcpOw0KPiA+Pj4gKwl2cmluZy0+Y3Vy X2xlbiA9IDA7DQo+ID4+PiArCXZyaW5nLT5yZW1fbGVuID0gMDsNCj4gPj4+ICsJdnJpbmctPmZp Zm8tPnZyaW5nWzBdID0gTlVMTDsNCj4gPj4+ICsNCj4gPj4+ICsJLyoNCj4gPj4+ICsJICogTWFr ZSBzdXJlIHRoZSBsb2FkL3N0b3JlIGFyZSBpbiBvcmRlciBiZWZvcmUNCj4gPj4+ICsJICogcmV0 dXJuaW5nIGJhY2sgdG8gdmlydGlvLg0KPiA+Pj4gKwkgKi8NCj4gPj4+ICsJdmlydGlvX21iKGZh bHNlKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogTm90aWZ5IHVwcGVyIGxheWVyLiAqLw0KPiA+Pj4g KwlzcGluX2xvY2tfaXJxc2F2ZSgmdnJpbmctPmZpZm8tPnNwaW5fbG9ja1swXSwgZmxhZ3MpOw0K PiA+Pj4gKwl2cmluZ19pbnRlcnJ1cHQoMCwgdnJpbmctPnZxKTsNCj4gPj4+ICsJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmdnJpbmctPmZpZm8tPnNwaW5fbG9ja1swXSwgZmxhZ3MpOw0KPiA+Pj4g K30NCj4gPj4+ICsNCj4gPj4+ICAvKiBSeCAmIFR4IHByb2Nlc3Npbmcgb2YgYSBxdWV1ZS4gKi8N Cj4gPj4+ICBzdGF0aWMgdm9pZCBtbHhiZl90bWZpZm9fcnh0eChzdHJ1Y3QgbWx4YmZfdG1maWZv X3ZyaW5nICp2cmluZywgYm9vbCBpc19yeCkNCj4gPj4+ICB7DQo+ID4+PiBAQCAtODQxLDYgKzg5 Miw3IEBAIHN0YXRpYyB2b2lkIG1seGJmX3RtZmlmb19yeHR4KHN0cnVjdA0KPiA+PiBtbHhiZl90 bWZpZm9fdnJpbmcgKnZyaW5nLCBib29sIGlzX3J4KQ0KPiA+Pj4gIAkJcmV0dXJuOw0KPiA+Pj4N Cj4gPj4+ICAJZG8gew0KPiA+Pj4gK3JldHJ5Og0KPiA+Pj4gIAkJLyogR2V0IGF2YWlsYWJsZSBG SUZPIHNwYWNlLiAqLw0KPiA+Pj4gIAkJaWYgKGF2YWlsID09IDApIHsNCj4gPj4+ICAJCQlpZiAo aXNfcngpDQo+ID4+PiBAQCAtODUxLDYgKzkwMywxNyBAQCBzdGF0aWMgdm9pZCBtbHhiZl90bWZp Zm9fcnh0eChzdHJ1Y3QNCj4gPj4gbWx4YmZfdG1maWZvX3ZyaW5nICp2cmluZywgYm9vbCBpc19y eCkNCj4gPj4+ICAJCQkJYnJlYWs7DQo+ID4+PiAgCQl9DQo+ID4+Pg0KPiA+Pj4gKwkJLyogSW5z ZXJ0IHBhZGRpbmdzIGZvciBkaXNjYXJkZWQgVHggcGFja2V0LiAqLw0KPiA+Pj4gKwkJaWYgKCFp c19yeCkgew0KPiA+Pj4gKwkJCXZyaW5nLT50eF90aW1lb3V0ID0gMDsNCj4gPj4+ICsJCQl3aGls ZSAodnJpbmctPnJlbV9wYWRkaW5nID49IHNpemVvZih1NjQpKSB7DQo+ID4+PiArCQkJCXdyaXRl cSgwLCB2cmluZy0+Zmlmby0+dHguZGF0YSk7DQo+ID4+PiArCQkJCXZyaW5nLT5yZW1fcGFkZGlu ZyAtPSBzaXplb2YodTY0KTsNCj4gPj4+ICsJCQkJaWYgKC0tYXZhaWwgPT0gMCkNCj4gPj4+ICsJ CQkJCWdvdG8gcmV0cnk7DQo+ID4+PiArCQkJfQ0KPiA+Pj4gKwkJfQ0KPiA+Pj4gKw0KPiA+Pj4g IAkJLyogQ29uc29sZSBvdXRwdXQgYWx3YXlzIGNvbWVzIGZyb20gdGhlIFR4IGJ1ZmZlci4gKi8N Cj4gPj4+ICAJCWlmICghaXNfcnggJiYgZGV2aWQgPT0gVklSVElPX0lEX0NPTlNPTEUpIHsNCj4g Pj4+ICAJCQltbHhiZl90bWZpZm9fY29uc29sZV90eChmaWZvLCBhdmFpbCk7DQo+ID4+PiBAQCAt ODYwLDYgKzkyMywxMCBAQCBzdGF0aWMgdm9pZCBtbHhiZl90bWZpZm9fcnh0eChzdHJ1Y3QNCj4g Pj4gbWx4YmZfdG1maWZvX3ZyaW5nICp2cmluZywgYm9vbCBpc19yeCkNCj4gPj4+ICAJCS8qIEhh bmRsZSBvbmUgZGVzY3JpcHRvci4gKi8NCj4gPj4+ICAJCW1vcmUgPSBtbHhiZl90bWZpZm9fcnh0 eF9vbmVfZGVzYyh2cmluZywgaXNfcngsICZhdmFpbCk7DQo+ID4+PiAgCX0gd2hpbGUgKG1vcmUp Ow0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBDaGVjayBUeCB0aW1lb3V0LiAqLw0KPiA+Pj4gKwlpZiAo YXZhaWwgPD0gMCAmJiAhaXNfcngpDQo+ID4+PiArCQltbHhiZl90bWZpZm9fY2hlY2tfdHhfdGlt ZW91dCh2cmluZyk7DQo+ID4+PiAgfQ0KPiA+Pj4NCj4gPj4+ICAvKiBIYW5kbGUgUnggb3IgVHgg cXVldWVzLiAqLw0KPiA+Pj4NCg0K