From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mx.groups.io with SMTP id smtpd.web11.4472.1676528394377484938 for ; Wed, 15 Feb 2023 22:19:54 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=QcSmgFaI; spf=pass (domain: intel.com, ip: 134.134.136.31, mailfrom: ray.ni@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1676528394; x=1708064394; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=7DAxSHHl/27ZqyD+pjmpEInwVKekHAZDKPnzEQsJzBs=; b=QcSmgFaILx88AIhv2LVS1m0X8ihgm9ORWJyK0MyUUkvC6Koh2/VHVLzb +TnUXxF9ixw3xbPKAjKIP7zKjl/umcvcqiHf0kCSNbXybv3Oqjtkizg+g 8lu7GRR0fKP9JSUHS77sj8CKtbE5GgZBSIksLGfRoA7tokRDhv3SYF1yt mWACgdoJFzj6jsN9qI7gq1vqQayN6oCcPgzeHGHiLavWfg/MxxD0Xl7Tc xL4soUlIvL6+alM23AxO9s13uGJT3nqZZfD6CSiq36xJeer2q81rb6AVS EFb1QSfaM/w0mNYsWrd6tGFg/8n6E4239WvJ0G3DtzMi3ygDmdp6nCGu9 A==; X-IronPort-AV: E=McAfee;i="6500,9779,10622"; a="394057927" X-IronPort-AV: E=Sophos;i="5.97,301,1669104000"; d="scan'208";a="394057927" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Feb 2023 22:19:53 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10622"; a="700383376" X-IronPort-AV: E=Sophos;i="5.97,301,1669104000"; d="scan'208";a="700383376" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga008.jf.intel.com with ESMTP; 15 Feb 2023 22:19:53 -0800 Received: from orsmsx602.amr.corp.intel.com (10.22.229.15) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Wed, 15 Feb 2023 22:19:53 -0800 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Wed, 15 Feb 2023 22:19:53 -0800 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.108) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Wed, 15 Feb 2023 22:19:53 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lVGwxfx08t/WTRZ70YVXCVC9UdvzVYEt0xcRkhCmzOopODBdFPFZiU6sHZHJ59z/QqnaZwZzEtJ+FMXkXp756XlC5/XlmL3CnWDIqbzXOtDh74SxM6UfuSRQp0uUI8oKkStYu3pGpYHhunoYrMc1T4hWUc4MU8wMvvDPyEYYjSaZnLBhg9JzChfO0nqVogTBKIr4W17n5WAIjNyK8p5uuKZ/cJxaJhIemhWlY3lDChk1nOdjY5xra6Drkx4whrBCDL6Li+bSRRkCkxJToK1eKA0t9n3BfjIM1EWz15rOYW9V58ihYU150umAjbyoviw4ALRMAS1cQ7KkphfnKJxmiw== 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=v+3A3MZMEQrrc/5vTWvuoYfwuIHsBWGenXzJlwwIwy4=; b=gciX4xcFBlFfzAq7U+wPgxaRQmqDugnE9WJybPkKIhr4qJ46GWfSZbd46m3pSI9iYiaOs0EV7gO3GYLTrFcGSt+Zuv83Pz8AaGyzN+Y8usDhTGS7vU5Wjm9uLkXL729doKZwDnxSThtKpV29/XRGC4TmwA99CybOCQIrbu/YczL6RkzIOyW5Nsw1MaJf8ijjRZ7ep4GHnKppQK4KJMP+8p5AVM6LKhdmKx154ckEIc6gxucOgW7V/Upr+xb/TWjVIydXXJG5YQH7JXoPZVp9Gez/ZGFZbQngk7G+LBtj4yOtda05LG7g3/Si4U3hesynTWBX3QgRmQ6XucZsm5Uymg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MN6PR11MB8244.namprd11.prod.outlook.com (2603:10b6:208:470::14) by CH3PR11MB8187.namprd11.prod.outlook.com (2603:10b6:610:160::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.13; Thu, 16 Feb 2023 06:19:50 +0000 Received: from MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::e342:cbf5:6c57:e8d6]) by MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::e342:cbf5:6c57:e8d6%7]) with mapi id 15.20.6111.013; Thu, 16 Feb 2023 06:19:50 +0000 From: "Ni, Ray" To: "Wu, Jiaxin" , "devel@edk2.groups.io" CC: "Dong, Eric" , "Zeng, Star" , Laszlo Ersek , Gerd Hoffmann , "Kumar, Rahul R" Subject: Re: [PATCH v9 3/6] UefiCpuPkg/SmmBaseHob.h: Add SMM Base HOB Data Thread-Topic: [PATCH v9 3/6] UefiCpuPkg/SmmBaseHob.h: Add SMM Base HOB Data Thread-Index: AQHZQc5DDNkGcB2AsUmjTDW/dpVmla7RGcyQ Date: Thu, 16 Feb 2023 06:19:49 +0000 Message-ID: References: <20230216061633.9196-1-jiaxin.wu@intel.com> <20230216061633.9196-4-jiaxin.wu@intel.com> In-Reply-To: <20230216061633.9196-4-jiaxin.wu@intel.com> Accept-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=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN6PR11MB8244:EE_|CH3PR11MB8187:EE_ x-ms-office365-filtering-correlation-id: 2fb00906-eb87-45a8-a9cf-08db0fe5cf0b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cYKRCcNZer2K/7M14wQm0fqC1OYck5ItL6caZ7AkQGC4L1PIlzSuevhbMuKU5ZGGMRY+meMz2GGL0z4SKK2pll/XcLd3lyZAH/yu1UyUfXaWHv1SeNHfK7moJ44eje5AW2b9ba9fJnWy4W96mguNKmV2iJGAfXH5zX5SBM8tV5AEeup5cGJt13RHGYZPgVacBCbUsvezV+UnhATm223A+tdkayWkgL8y3JU+1dtyJMDCq2Nkgb/TX4HB+MpNC3vKaB/rOtB65JfwlLL7pkbbwR+S1fv0crmw92ogYn2DX34C2hvdLf+4419NTrgw6ai9ZViXj1we9miq+onANmIGVhqmQUqC4kAfckWkd8LWp9ztKPa7/XFgWt9ki8sJRvxeEFWyZfGZrMVbsXDzpmv6FG4I7VYrTkR3djKhk8SaCf6lr10J3UtbtvwMxPFNFrnDLOpHI/4BT1tbbqPjnnNvEWESc59fSGsLNfcutn8EMSKJ9omjnz/b6Fo2fPYQWDzv1GhRihRXAQObilN0YSwWNvSWDHWF8+t/REXeD/we5WFR17IkUn5LGalYNG9vU6/h7y4t0nuMWJFeRq7cdQPb5MzwGSh0XbHLh6/dN+enXCXCzAP7OT5jP8vHKsRCCISmxCfoKCgN4/bpXM/mSp/msr3817vqg37daQFpEkJlx8KnSNIgF3HL3mVJg9WoQRg0 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN6PR11MB8244.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(396003)(366004)(346002)(136003)(376002)(39860400002)(451199018)(110136005)(86362001)(54906003)(316002)(52536014)(55016003)(38070700005)(5660300002)(8936002)(478600001)(76116006)(33656002)(41300700001)(66556008)(4326008)(66946007)(64756008)(8676002)(66446008)(66476007)(186003)(9686003)(53546011)(6506007)(2906002)(107886003)(966005)(38100700002)(122000001)(82960400001)(83380400001)(71200400001)(7696005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?SpZuaa6tH5gTLj8iMLGvwmS66FAdoZCoG36Imw43OcsOuSUP756Q7SWYh5Ja?= =?us-ascii?Q?qgxFIBz0/YqUGeNFGiPzEpZ0A9vNVqY/fMH+chbtaYx8s2L5nHOLAXrGgBH8?= =?us-ascii?Q?Iqp4NXHzAusXzhw9+HNYBY0D11I8rnSujcOIDdVPDokGoLAnBk+ltnSuOZnT?= =?us-ascii?Q?+cSylWhHoHeF/J2HEhh3HnkNjVdzpKlSSTnSVUyI3UxCqEVHjuhDXpmJAyUM?= =?us-ascii?Q?yKwZEE35X+q+UfbysafKGn00fZFWDerkZDULrnY2/Z1Xy9E0sgyEwaIHAVs5?= =?us-ascii?Q?Q9RpiZtJ907Wp01QRGXjh6IpfNBTjtF0rG4Et8hGbeiq+umjSyrBlz0dQTdi?= =?us-ascii?Q?wJAViFo6UCAI9ZUyNzfceKZKpAC6i29lF1ZjnqnkXgjJ5wbHCezICHoOHJkg?= =?us-ascii?Q?rieqEO/xch5BXaLzwXUGOAL4xVJQy6dDDOhv5Z6ybLuDPbXhtLXax48c4TPh?= =?us-ascii?Q?hCtkCh5i48calIdr5xCEL9KSXPt1MtLDWEErFyVlkf/lvBWEJZ0sKLI+KUKB?= =?us-ascii?Q?CpPOCuwC+HNtMI/UQvu+8M/QVwOktLkOpFWxzpiBV4/VhuvoJb432N7wKg6I?= =?us-ascii?Q?lo9pgoHSIcxDMfjkGFIGwG3E/pe9+BtRFUn6Z1chdu0/5SiSxW9wzokEY/9Q?= =?us-ascii?Q?GchGGcmkv8JgM79CQHSu4KWzr67RhjlnrtUstBKa1wMXXwavG+/hIBXHZpHn?= =?us-ascii?Q?ZGUsgzq45sAKMJj0pyTLBawQ1+TCzqJsTjDrusyx+j7caKyys8FNxf99gQvu?= =?us-ascii?Q?C7b0cZVpH/rAI4XNm8IzRdOzHO0TdUgb3zzYH8neMHouB4TVnDNCy2xxRjkI?= =?us-ascii?Q?h/9CgdHRApygzQXrhRo+t82DXeZhtmr9ctRpnJue3qHgo5UUn0uhaZqk+My9?= =?us-ascii?Q?BTRByLDcUV5fc86mDOAtRCTXBVjkHfWsFGROLviF9pCOUbVqFCJkkwr/xCq+?= =?us-ascii?Q?QK7H+l7SkZEJqSVLh8eB6q0IKJCQ1hkOsAj38TUTqfsHL1fQ/Zl8TdCTUwZl?= =?us-ascii?Q?w7zrjwlP015iAgwNOLdDfbSWLTQA9s4S3aepY2hY0FGPuAqqxGWxXHt1X5qm?= =?us-ascii?Q?zkCo9ideqiFW/vgT4GFCZ3+cz/ZSA8SFtKNcCRUvw22JT59nfY0PMcEeYDHj?= =?us-ascii?Q?YXd71jfzNoVOrUxJUYTIotV2TTg554LMW/9huO410qW1k21ExTenflcJpE4V?= =?us-ascii?Q?3jmPC7Ymc3PwLC4AhWgMbU3Tdr4E4PpZ4kfHw354sj1mKv5ALUmGri3JjEQR?= =?us-ascii?Q?2hFxvFplljGxowK1KliRiYEteyBMHUjILYWVJuHnoaD4d/6AbkAoNxxkOg2G?= =?us-ascii?Q?qNf8T4+Qu0kAY8JfTzzr/6cQtsHhOUgEhweI64iSVKmVcxZ+IB+Hw8npl+ye?= =?us-ascii?Q?WNW0CxI1MpwZaKMvj4/4w9RlM0RBahEx/TKXcOqS/QNpoQ3XQMCILjF49TZ0?= =?us-ascii?Q?srgO9Df4CTfiNgBm/Q5ra4NrDnwpruxNCkirLVs5mF0E2TKqEDyVjKBeG9zo?= =?us-ascii?Q?zezug+V152mjeaDY3W06SkEC37PEUyJIdTIMSGxbG/uL2kt5MK7qM7iEvw?= =?us-ascii?Q?=3D=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN6PR11MB8244.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2fb00906-eb87-45a8-a9cf-08db0fe5cf0b X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Feb 2023 06:19:49.8163 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: mAdZDT4WWWyzXMVPajQMMLhK/dpcuCzYVAOfyZdImgkEPbt8KEVIiP7qCwVMocS6S2KlBzctmYv1FpcKxoJWpA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR11MB8187 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Ray Ni > -----Original Message----- > From: Wu, Jiaxin > Sent: Thursday, February 16, 2023 2:17 PM > To: devel@edk2.groups.io > Cc: Dong, Eric ; Ni, Ray ; Zeng, S= tar > ; Laszlo Ersek ; Gerd Hoffmann > ; Kumar, Rahul R > Subject: [PATCH v9 3/6] UefiCpuPkg/SmmBaseHob.h: Add SMM Base HOB > Data >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4337 >=20 > The default SMBASE for the x86 processor is 0x30000. When > SMI happens, processor runs the SMI handler at SMBASE+0x8000. > Also, the SMM save state area is within SMBASE+0x10000. >=20 > One of the SMM initialization from processor perspective is to > relocate and program the new SMBASE (in TSEG range) for each > processor. When the SMBASE relocation happens in a PEI module, > the PEI module shall produce the SMM_BASE_HOB in HOB database > which tells the PiSmmCpuDxeSmm driver (runs at a later phase) > about the new SMBASE for each processor. PiSmmCpuDxeSmm driver > installs the SMI handler at the SMM_BASE_HOB.SmBase[Index]+0x8000 > for processor Index. When the HOB doesn't exist, PiSmmCpuDxeSmm > driver shall relocate and program the new SMBASE itself. >=20 > This patch adds the SMM Base HOB for any PEI module to do > the SmBase relocation ahead of PiSmmCpuDxeSmm driver and > store the relocated SmBase address in array for each > processor. >=20 > Cc: Eric Dong > Cc: Ray Ni > Cc: Zeng Star > Cc: Laszlo Ersek > Cc: Gerd Hoffmann > Cc: Rahul Kumar > Signed-off-by: Jiaxin Wu > --- > UefiCpuPkg/Include/Guid/SmmBaseHob.h | 75 > ++++++++++++++++++++++++++++++++++++ > UefiCpuPkg/UefiCpuPkg.dec | 5 ++- > 2 files changed, 79 insertions(+), 1 deletion(-) > create mode 100644 UefiCpuPkg/Include/Guid/SmmBaseHob.h >=20 > diff --git a/UefiCpuPkg/Include/Guid/SmmBaseHob.h > b/UefiCpuPkg/Include/Guid/SmmBaseHob.h > new file mode 100644 > index 0000000000..115e749348 > --- /dev/null > +++ b/UefiCpuPkg/Include/Guid/SmmBaseHob.h > @@ -0,0 +1,75 @@ > +/** @file > + The Smm Base HOB is used to store the information of: > + * The relocated SmBase address in array for each processor. > + > + The default Smbase for the x86 processor is 0x30000. When SMI happens, > processor > + runs the SMI handler at Smbase+0x8000. Also, the SMM save state area i= s > within > + Smbase+0x10000. Since it's the start address to store the processor sa= ve > state > + and code for the SMI entry point, those info are tiled within an SMRAM > allocated > + or reserved buffer. This tile size shall be enough to cover 3 parts: > + 1. Processor SMRAM Save State Map starts at Smbase + 0xfc00 > + 2. Extra processor specific context start starts at Smbase + 0xfb00 > + 3. SMI entry point starts at Smbase + 0x8000. > + Besides, This size should be rounded up to nearest power of 2. The Smm > Base HOB > + producer should be responsible for reserving enough size. > + > + One of the SMM initialization from processor perspective is to relocat= e and > program > + the new Smbase (in TSEG range) for each processor thread. When the > Smbase relocation > + happens in a PEI module, the PEI module shall produce the > SMM_BASE_HOB in HOB database > + which tells the PiSmmCpuDxeSmm driver (which runs at a later phase) > about the new > + Smbase for each processor. PiSmmCpuDxeSmm driver installs the SMI > handler at the > + SMM_BASE_HOB.Smbase[Index]+0x8000 for processor index. When the > HOB doesn't exist, > + PiSmmCpuDxeSmm driver shall relocate and program the new Smbase > itself. > + > + Note: > + 1. Smbase relocation process needs to program the vender specific > hardware > + interface to set Smbase, it might be in the thread scope. It's doable = to > + program the hardware interface using DXE MP service protocol in > PiSmmCpuDxeSmm > + entry point. But, considering the standalone MM environment where the > CpuMm > + driver runs in a isolated environment and it cannot invoke any DXE or = PEI > MP > + service, we recommend to put the hardware interface programming in a > separate > + PEI module instead of in the PiSmmCpuDxeSmm driver. > + > + 2. There is the hard requirement that SMI Entry Size <=3D 0x1000, data= Size > <=3D > + 0x1000 in PiSmmCpuDxeSmm. So, this require the allocated or reserved > buffer in > + SMRAM should be >=3D 0x2000. > + > + Copyright (c) 2023, Intel Corporation. All rights reserved.
> + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef SMM_BASE_HOB_H_ > +#define SMM_BASE_HOB_H_ > + > +#define SMM_BASE_HOB_DATA_GUID \ > + { \ > + 0xc2217ba7, 0x03bb, 0x4f63, {0xa6, 0x47, 0x7c, 0x25, 0xc5, 0xfc, 0x9= d, 0x73} > \ > + } > + > +#pragma pack(1) > +typedef struct { > + /// > + /// ProcessorIndex tells which processor range this specific HOB insta= nce > described. > + /// If ProcessorIndex is set to 0, it indicats the HOB describes the p= rocessor > from > + /// 0 to NumberOfProcessors - 1. The HOB list may contains multiple th= is > HOB > + /// instances. Each HOB instances describe the information for process= or > from > + /// ProcessorIndex to ProcessorIndex + NumberOfProcessors - 1. The > instance order in > + /// the HOB list is random so consumer can not assume the ProcessorInd= ex > of first > + /// instance is 0. > + /// > + UINT32 ProcessorIndex; > + /// > + /// Describes the Number of all max supported processors. > + /// > + UINT32 NumberOfProcessors; > + /// > + /// Pointer to SmBase address for each processor. > + /// > + UINT64 SmBase[]; > +} SMM_BASE_HOB_DATA; > +#pragma pack() > + > +extern EFI_GUID gSmmBaseHobGuid; > + > +#endif > diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec > index cff239d528..7003a2ba77 100644 > --- a/UefiCpuPkg/UefiCpuPkg.dec > +++ b/UefiCpuPkg/UefiCpuPkg.dec > @@ -1,9 +1,9 @@ > ## @file UefiCpuPkg.dec > # This Package provides UEFI compatible CPU modules and libraries. > # > -# Copyright (c) 2007 - 2022, Intel Corporation. All rights reserved.
> +# Copyright (c) 2007 - 2023, Intel Corporation. All rights reserved.
> # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > ## >=20 > @@ -76,10 +76,13 @@ > gEdkiiCpuFeaturesInitDoneGuid =3D { 0xc77c3a41, 0x61ab, 0x4143, { 0x9= 8, > 0x3e, 0x33, 0x39, 0x28, 0x6, 0x28, 0xe5 }} >=20 > ## Include/Guid/MicrocodePatchHob.h > gEdkiiMicrocodePatchHobGuid =3D { 0xd178f11d, 0x8716, 0x418e, { 0xa= 1, > 0x31, 0x96, 0x7d, 0x2a, 0xc4, 0x28, 0x43 }} >=20 > + ## Include/Guid/SmmBaseHob.h > + gSmmBaseHobGuid =3D { 0xc2217ba7, 0x03bb, 0x4f63, {0xa6, 0x47, 0x= 7c, > 0x25, 0xc5, 0xfc, 0x9d, 0x73 }} > + > [Protocols] > ## Include/Protocol/SmmCpuService.h > gEfiSmmCpuServiceProtocolGuid =3D { 0x1d202cab, 0xc8ab, 0x4d5c, { 0x= 94, > 0xf7, 0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 }} > gEdkiiSmmCpuRendezvousProtocolGuid =3D { 0xaa00d50b, 0x4911, 0x428f, > { 0xb9, 0x1a, 0xa5, 0x9d, 0xdb, 0x13, 0xe2, 0x4c }} >=20 > -- > 2.16.2.windows.1