From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web09.1924.1614646349094053930 for ; Mon, 01 Mar 2021 16:52:29 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=SpXrjJCD; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: ray.ni@intel.com) IronPort-SDR: +XMqIwS4sag32zDqvEbnSYlSgULJqEkMT9gqSpdhcGOy/6AnnGB76CP+81mRmA/4QDuMMp658h x1ciJTa6osTw== X-IronPort-AV: E=McAfee;i="6000,8403,9910"; a="271646065" X-IronPort-AV: E=Sophos;i="5.81,216,1610438400"; d="scan'208";a="271646065" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Mar 2021 16:52:28 -0800 IronPort-SDR: byRCL0SSXZ6AoZmEQ8EShraBkmp+EWwB9i5+2PtbGugRRBpY14lbuT+As7tjxb2kem3SLeqfv5 AMSBO+0vXlgw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,216,1610438400"; d="scan'208";a="595611017" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmsmga006.fm.intel.com with ESMTP; 01 Mar 2021 16:52:28 -0800 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Mon, 1 Mar 2021 16:52:27 -0800 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Mon, 1 Mar 2021 16:52:27 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2 via Frontend Transport; Mon, 1 Mar 2021 16:52:27 -0800 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.172) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2106.2; Mon, 1 Mar 2021 16:52:27 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ewW2x0S8Px4GZJXaye3atH+eTs9bXZ23ktUhq9VRqSIpNg1NG6KcR6BPzh4+NpMiy47meCm45gWoBVo3rr8JAU2BvItVR1Oq26slK5KwkWvKPfvedLXcYfTp3y75B++2yXykbRxdAnFM7okFkLhzDdo3eQfRJS3mmksDzo333L4WbnKzkXrCEtOA+zBPCDTKOZiNFQPiT8VMccQTFHt6Uecie6nEu3Rulps/uVQohffSTefc8KELpH50YuC9It9XspAp6i8v/as53aXAOeLn2kMCl+gagtVxyK47c8A+RWEvUpXKdxY1fLBAsc6sp6GzguklxrD8QSupTv5xsG47iQ== 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=IRRIPlkW70ZFwrTfccM7y/h5vkNmQRzf2XCpmeF9hkQ=; b=DyqcvB3J8G61nDRUFV2OB0LFiydwEq/3zjnHZvs9e0siaQ0uX3DlUzuO+LfogiaKWGmbrSMw6JKTEc6XG481cYg7kpIffMhHqWTuL2h5k8VpmtuMUdhDaHuSmVOwUaMLICNr0Kt0Qp047WhCZ4W+FurHhpa5CTR9RBVbxjKR/nkDRooZgqV5wqGNigWMLCrt/Z3Ec/wXdwP9TlQMvQuByUDZN91Sru7CuzKQlopj4V+8e2BbzUwklvgnvYD7A7AvfVuFWf3RhLymk1gm7e1eDpJxakNkOiqhaxbrKoL6x2lyMANVdamspSgwlGGUvZl/ko1rvbz3qpDUXgP9zC12Zw== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IRRIPlkW70ZFwrTfccM7y/h5vkNmQRzf2XCpmeF9hkQ=; b=SpXrjJCD3mAxsTemlxyXqYkOU8z2BWOVGrAnMD5nIodXbpx9RQJI0eLOeItUgJzYCli44NNWMg/GuY923hFcZlYocUcWc/3n7jhJzTWlBzHNxD01PvAqOFxohOfytql9fWaXusZppzMWhhrWNW1Fsza2eobYp1SCOxuQTSxdo4s= Received: from CO1PR11MB4930.namprd11.prod.outlook.com (2603:10b6:303:9b::11) by MWHPR11MB1997.namprd11.prod.outlook.com (2603:10b6:300:2a::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3890.20; Tue, 2 Mar 2021 00:52:25 +0000 Received: from CO1PR11MB4930.namprd11.prod.outlook.com ([fe80::8d64:91ed:c259:e95]) by CO1PR11MB4930.namprd11.prod.outlook.com ([fe80::8d64:91ed:c259:e95%7]) with mapi id 15.20.3890.028; Tue, 2 Mar 2021 00:52:25 +0000 From: "Ni, Ray" To: Michael Kubacki , "devel@edk2.groups.io" CC: "Chaganty, Rangasai V" , "Chiu, Chasel" , "Desimone, Nathaniel L" , "Luo, Heng" , "Agyeman, Prince" , "gaoliming@byosoft.com.cn" , "Dong, Eric" , "Dong, Guo" Subject: Re: [edk2-devel] [edk2-platforms][RFC] SpiFlashCommonLib Refactor Thread-Topic: [edk2-devel] [edk2-platforms][RFC] SpiFlashCommonLib Refactor Thread-Index: AQHXDndNOYWYxx12jEeC2Ob81yhUn6pu1iOwgACrkwCAAF24wA== Date: Tue, 2 Mar 2021 00:52:25 +0000 Message-ID: References: <2a2a1cc0-3de9-fbd5-1bfb-eb5dbc9d1bc6@linux.microsoft.com> <9a764723-06b6-555a-dfb8-6dee940e7276@linux.microsoft.com> In-Reply-To: <9a764723-06b6-555a-dfb8-6dee940e7276@linux.microsoft.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.5.1.3 dlp-reaction: no-action dlp-product: dlpe-windows authentication-results: linux.microsoft.com; dkim=none (message not signed) header.d=none;linux.microsoft.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [124.77.195.36] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 82f7aafd-16b0-4ff0-1d9c-08d8dd157275 x-ms-traffictypediagnostic: MWHPR11MB1997: x-ms-exchange-minimumurldomainage: groups.io#3767 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: FTV3FGbR/0cf3ReuWXzj9BlsAsYppdhJtPn1B451INwga5FahKSoLqeSWUhP01sCsIpWUlk7nIpRzhdw2kkzDM/vsk3Zltr6tQ/OXUor668G7VMrdiCTcftOTXuVPT4JMG6MLJPM1TYI8LHFrChEBCNFAOoyM6cVcJUkFwZNkxTxfyJpj56jMlB3T16uyrqo6L0vhADuBw7kZZQKC/VLO7pv0kKOusu5RkpmqNHETh2rsui8nSRMQIGIjQjve/tlqGGkPvgglr+5Uqeonha+M1I1ubA38I5S7neRyoDW+2R67c5fg+YOEEbN0Uw2JvL3UtSdOmBxF6FUZXXI/QYqnR6mn/1iUftU7bCcGSsqEO9UMwJf8VHehy3UXAjeLM9NJvkVXkCW2zl44FLPPyUSYVSJWYlUbhv9FFibmp/a+L7k6PlW73g/NASYzj75CjQ9BxnpshPcWuNLnjTGoHKdsp3b1soFZGnJfYXtpu1AXpXwOG1sDEiIOy2JKAZiZk81kJ8sBsNtuG56U/+pUlnW8c3fp0PhIVM36q3+6ftKgpMl6cH7FRrBScJjRNqWaXnN6VTdjhAHcZTA8jnBF/4/6LQtRevTwEBozpK9I8HYIP4= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4930.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(346002)(396003)(366004)(136003)(39860400002)(86362001)(83380400001)(8676002)(4326008)(186003)(9686003)(55016002)(71200400001)(26005)(33656002)(76116006)(66556008)(66946007)(107886003)(66476007)(66446008)(64756008)(2906002)(52536014)(110136005)(316002)(6506007)(7696005)(966005)(478600001)(8936002)(54906003)(53546011)(5660300002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?UzM1KzRHUTFsWXhXNkVWZ0NVbTZIVWoyTTdXMnNVNVhJSS9OOXlVRjdPT0px?= =?utf-8?B?d2YwUXBEYksyV2dRVUZmbnpwZHFIZ2h5Tjc1NUV6U1JXakNya29XdzBVN1U4?= =?utf-8?B?THlFekl5VGlpWURpSXVkejUzMlVyRUViRDBnN3lXMi9VWXY3TDZVb0pGSkRT?= =?utf-8?B?Zi9iQ2lDbXFyQ2RwVzNuOTNzUTZldHBVSyttc01aVkJxbnhUQ0xwMzNnWkpO?= =?utf-8?B?Y2llZDdCYTNGNklzb3dHaWtyNjVUNVdYbTdVWWNLcFlidmxTR09rL3g0MUM5?= =?utf-8?B?ZVY5NVp4MnIyYTNUVmN2d0o5K0haVVd5emg0WDNVbUF5QnJTRGF3UnVOMDZP?= =?utf-8?B?SVNaN05XamwyNEswRnZQdS81Q0ZUYW40VnlzZ1dqUFIzYWdjdnE3R1llWkkx?= =?utf-8?B?OHhML1NhM245SUVkZkYzcjBBVGYxL21lMFYwV09LZ3BXMHlnK1NMVFhBeGty?= =?utf-8?B?TFBIWXlMRHpGTzNMSnlDajZqR1BrM3R6T1pZanZzUUFJcDY0WGtTUGZWcWJ6?= =?utf-8?B?Q3JOSWQ1SW8xZFhsUDdnSk05NEZ4NkZ0R1BCKzRUUTVOU3NvSzJuS1Vod3Az?= =?utf-8?B?dzVSbUczTktGZ1QrVHF4R1dXMkwvK0JUOHRYaWdUZXExQW5Kb0VBenUrcnJh?= =?utf-8?B?R29nQ0hhZjAvcSt3TkVSZ3Fxc1lvNnBtWDFYQloxVjV3VUIwL0VmK2k4VUt3?= =?utf-8?B?UFZpWUZRUDlQVVlmbVgyQkQxaGxlR21pbzBQalRTcjhwRnM3OWpabHFvSzBz?= =?utf-8?B?aXVJaEhXWU1iMW1wUHk3Z3pEak13cFJZclc4ZXlUejZXNTYxVS9uUFdXcVFO?= =?utf-8?B?U0RwZ1A5MmptazB0ZS9veHVvMHRMQU5xVWdoR1VYSGFVNkEzcnhlMC9tRVNU?= =?utf-8?B?enB5R0pBMGdFcHU0QVZldEFuMVJqU2FGQSt6cjFFYXJBT0p4VThIWFhaUXNC?= =?utf-8?B?bUh4VFpvekZPVFhDTHF0TDVpZXdiY2d1Wk9GTis4Wkk4YVQvS3hESXVKSmgz?= =?utf-8?B?T1RFTHk2ajNYWGM2YkJTY1NWZkE3aWpzbmhESkRWNVdWS2piQVRoSjVzSmg1?= =?utf-8?B?b2xaSlF5VDNPU0ttc0tNQ3YzNyt4bzRWZlF2KzFQdzBUVUVOZGxrVlhxdit3?= =?utf-8?B?SGNhQ0crazVONjlLR3BHbE1vV3ZqZkR3OXp4RWd5VXlIS092THRwU0FtdDdw?= =?utf-8?B?bUpPNzQxU2JCVStpbXZKbWgxRTNaWlpkNGc4T2NSY2wvRk1SZTFZbE83Tldq?= =?utf-8?B?WWVKUk1CbTZVSXBrc3JOQ3RlQ3MwMWpMdHFVS0ZkSUVUckJFN2NXSzcvT0J5?= =?utf-8?B?OCs1WXdJMmoyTk1VV2RXbk5PY3orc0p6ZDVRQmpJOVhadkp1MXBjWE1jbGd5?= =?utf-8?B?TlV6bVJjSEpHbEtVaUZFT1EzbHErQ0EvR0NmZW15empsdGV2R3ZsRkt4VVkw?= =?utf-8?B?NmdWTEhhWDdNd2RoU282V2lZNndEaEZYYkt2QmFibFFReWFlWXQxRzVtSzdS?= =?utf-8?B?QjR2eVM2L0ViK2lrZTJqNjZZeVVFeUFtWnljQnNqbENFQ2ZVenl6SDJieHNS?= =?utf-8?B?d3NSWUZTbW1pTW5kQnAvelBHSndEb2E2K2JtUjdRZ2hxTVVwTlJ5cW9URVdz?= =?utf-8?B?UHErMkhvNkhKK0xxYmY3bzVxY2oxWWJKb25MK3dkVkUxQTFMQk8zaS9ZSkJB?= =?utf-8?B?K3VubWtKcUNJUVp4NVdFcCtaOWQ5T0VJdzk3SWM1QjAzMEpSbC9EWW41WjB1?= =?utf-8?Q?m9nzhvJxs4cttJ3XdTRwcxYaKIW6LGvuC2xncdz?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4930.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 82f7aafd-16b0-4ff0-1d9c-08d8dd157275 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Mar 2021 00:52:25.5263 (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: g38c8RcFvgkAu4begOQWVRovMZS5cwTUpdneF2NQOW8V/lOZhVYbNy3L8r7J7lsoeVzX2WHuiEPHNsQM2CK8WA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1997 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TWljaGFlbCwNCkkgYW0gZ29vZCB3aXRoIHRoYXQuIEkgYW0gYWxzbyBjdXJpb3VzIGhvdyB5b3Ug bWVyZ2UgYWxsIHRoZSBkaWZmZXJlbnQgU1BJIGZsYXNoIGltcGxlbWVudGF0aW9uIGludG8gb25l Lg0KDQpUaGFua3MsDQpSYXkNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9t OiBNaWNoYWVsIEt1YmFja2kgPG1pa3ViYWNrQGxpbnV4Lm1pY3Jvc29mdC5jb20+DQo+IFNlbnQ6 IFR1ZXNkYXksIE1hcmNoIDIsIDIwMjEgMzoxNiBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMu aW87IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+DQo+IENjOiBDaGFnYW50eSwgUmFuZ2FzYWkg ViA8cmFuZ2FzYWkudi5jaGFnYW50eUBpbnRlbC5jb20+OyBDaGl1LCBDaGFzZWwgPGNoYXNlbC5j aGl1QGludGVsLmNvbT47IERlc2ltb25lLCBOYXRoYW5pZWwgTA0KPiA8bmF0aGFuaWVsLmwuZGVz aW1vbmVAaW50ZWwuY29tPjsgTHVvLCBIZW5nIDxoZW5nLmx1b0BpbnRlbC5jb20+OyBBZ3llbWFu LCBQcmluY2UgPHByaW5jZS5hZ3llbWFuQGludGVsLmNvbT47DQo+IGdhb2xpbWluZ0BieW9zb2Z0 LmNvbS5jbjsgRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6 IFtlZGsyLWRldmVsXSBbZWRrMi1wbGF0Zm9ybXNdW1JGQ10gU3BpRmxhc2hDb21tb25MaWIgUmVm YWN0b3INCj4gDQo+IEhpIFJheSwNCj4gDQo+IFRoYXQgc291bmRzIHJlYXNvbmFibGUgdG8gbWUu DQo+IA0KPiBJIHdhcyBhdHRlbXB0aW5nIHRvIHByZXNlcnZlIHRoZSBkZXNpZ24gdGhhdCBpc29s YXRlcyB0aGUNCj4gc2lsaWNvbi1zcGVjaWZpYyBsb2dpYyB0byBhIGxpYnJhcnkgdmlhIGFuIGlu dGVyZmFjZSB0byBhIHNpbGljb24NCj4gcGFja2FnZS4gSG93ZXZlciwgdGhlIHJlYWwgYWJzdHJh Y3Rpb24gaGVyZSBpcyB0aGUgZmlybXdhcmUgdm9sdW1lIGJsb2NrDQo+IHByb3RvY29sIHdoaWNo IGNvdWxkIHNpbXBseSBiZSBwcm9kdWNlZCBieSBhIHNpbGljb24gZHJpdmVyIHdpdGggdGhlDQo+ IHNlcGFyYXRpb24gb2Ygc3VjaCBsb2dpYyB0byBhIGxpYnJhcnkgYmVpbmcgYW4gaW1wbGVtZW50 YXRpb24gZGV0YWlsIG9mDQo+IHRoZSBkcml2ZXIuDQo+IA0KPiBJbiBzdW1tYXJ5LCBoZXJlIGlz IHRoZSB1cGRhdGVkIHByb3Bvc2FsOg0KPiANCj4gMS4gQ29uc29saWRhdGUgdGhlIGxpYnJhcnkg aW50ZXJmYWNlIGludG8gYSBzaW5nbGUgaGVhZGVyIGluDQo+IEludGVsU2lsaWNvblBrZy4NCj4g DQo+IDIuIENvbnNvbGlkYXRlIHRoZSBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIGludG8gYSBzaW5n bGUgaW5zdGFuY2UgaW4NCj4gSW50ZWxTaWxpY29uUGtnLg0KPiANCj4gMy4gTW92ZSBTcGlGdmJT ZXJ2aWNlU21tIG91dCBvZiBNaW5QbGF0Zm9ybVBrZyBpbnRvIEludGVsU2lsaWNvblBrZy4NCj4g DQo+IDQuIEFkZCBTcGlGdmJTZXJ2aWNlU3RhbmRhbG9uZU1tIHRvIEludGVsU2lsaWNvblBrZyBz aGFyaW5nDQo+IGltcGxlbWVudGF0aW9uIHdpdGggU3BpRnZiU2VydmljZVNtbSB3aGVyZSBhcHBy b3ByaWF0ZS4NCj4gDQo+IEludGVsIGJvYXJkIHBhY2thZ2VzIHdvdWxkIHRoZW4gdXNlIHRoZSBT cGlGbGFzaENvbW1vbkxpYiBmcm9tDQo+IEludGVsU2lsaWNvblBrZyAoYSBnZW5lcmF0aW9uIHNw ZWNpZmljIGluc3RhbmNlIGNvdWxkIGJlIGNyZWF0ZWQgaWYNCj4gbmVlZGVkKSBhbmQgdXNlIHRo ZSBTcGlGdmJTZXJ2aWNlWHl6IGRyaXZlciBmcm9tIEludGVsU2lsaWNvblBrZy4NCj4gDQo+IFBs ZWFzZSBsZXQgbWUga25vdyBpZiB0aGlzIGlzIGFjY2VwdGFibGUgYW5kIEknZCBiZSBoYXBweSB0 byBzZW5kIHRoZQ0KPiBwYXRjaGVzLg0KPiANCj4gVGhhbmtzLA0KPiBNaWNoYWVsDQo+IA0KPiBP biAzLzEvMjAyMSAxOjA3IEFNLCBOaSwgUmF5IHdyb3RlOg0KPiA+IE1pY2hhZWwsDQo+ID4gSSBh Z3JlZSB3aXRoIHlvdXIgdGhvdWdodHMgdG8gY29uc29saWRhdGUgdGhlIGxpYiBoZWFkZXIgYW5k IGltcGxlbWVudGF0aW9uIHRvIEludGVsU2lsaWNvblBrZy4NCj4gPiBJIGRpZG4ndCByZWFkIHRo ZSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zLiBCdXQgdGhlIGltcGxlbWVudGF0aW9uIGNvbnNv bGlkYXRpb24gbWVhbnMgeW91IHNlZSBhbGwgdGhlIGV4aXN0aW5nDQo+IGltcGxlbWVudGF0aW9u cyBhcmUgdGhlIHNhbWUuIFJpZ2h0Pw0KPiA+DQo+ID4gQnV0IHdoeSBkb24ndCB5b3UgcHV0IHRo ZSBkcml2ZXIgaW4gSW50ZWxTaWxpY29uUGtnIGFzIHdlbGw/IENyZWF0aW5nIGFuIGFkdmFuY2Vk IGZlYXR1cmUgZm9yIHRoaXMgZnVuZGFtZW50YWwgc2VydmljZSBzZWVtcw0KPiBvdmVyLWtpbGwu DQo+ID4NCj4gPiBUaGFua3MsDQo+ID4gUmF5DQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj4gPj4gRnJvbTogQ2hhZ2FudHksIFJhbmdhc2FpIFYgPHJhbmdhc2FpLnYuY2hh Z2FudHlAaW50ZWwuY29tPg0KPiA+PiBTZW50OiBNb25kYXksIE1hcmNoIDEsIDIwMjEgNDo0NiBQ TQ0KPiA+PiBUbzogTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbT4NCj4gPj4gU3ViamVjdDogUkU6 IFtlZGsyLXBsYXRmb3Jtc11bUkZDXSBTcGlGbGFzaENvbW1vbkxpYiBSZWZhY3Rvcg0KPiA+Pg0K PiA+PiBEaWQgeW91IGdldCBhIGNoYW5jZSB0byBsb29rIGludG8gdGhpcyA/DQo+ID4+DQo+ID4+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+IEZyb206IE1pY2hhZWwgS3ViYWNraSA8 bWlrdWJhY2tAbGludXgubWljcm9zb2Z0LmNvbT4NCj4gPj4gU2VudDogVHVlc2RheSwgRmVicnVh cnkgMTYsIDIwMjEgNDo1OCBQTQ0KPiA+PiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87IE5pLCBS YXkgPHJheS5uaUBpbnRlbC5jb20+OyBDaGFnYW50eSwgUmFuZ2FzYWkgViA8cmFuZ2FzYWkudi5j aGFnYW50eUBpbnRlbC5jb20+OyBDaGl1LA0KPiBDaGFzZWwNCj4gPj4gPGNoYXNlbC5jaGl1QGlu dGVsLmNvbT47IERlc2ltb25lLCBOYXRoYW5pZWwgTCA8bmF0aGFuaWVsLmwuZGVzaW1vbmVAaW50 ZWwuY29tPjsgTHVvLCBIZW5nIDxoZW5nLmx1b0BpbnRlbC5jb20+Ow0KPiA+PiBBZ3llbWFuLCBQ cmluY2UgPHByaW5jZS5hZ3llbWFuQGludGVsLmNvbT47IGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5j bjsgRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPj4gU3ViamVjdDogW2VkazIt cGxhdGZvcm1zXVtSRkNdIFNwaUZsYXNoQ29tbW9uTGliIFJlZmFjdG9yDQo+ID4+DQo+ID4+IEhl bGxvLA0KPiA+Pg0KPiA+PiBJJ20gcGxhbm5pbmcgdG8gc3VibWl0IHN1cHBvcnQgZm9yIFN0YW5k YWxvbmUgTU0gaW4gU3BpRmxhc2hDb21tb25MaWIgc29vbi4gQ3VycmVudGx5LCB0aGVyZSdzIHF1 aXRlIGEgYml0IG9mIGR1cGxpY2F0aW9uDQo+IHdpdGgNCj4gPj4gU3BpRmxhc2hDb21tb25MaWIu DQo+ID4+DQo+ID4+IEkgd291bGQgbGlrZSB0byBoYXZlIHRoaXMgU3RhbmRhbG9uZSBNTSBzdXBw b3J0IGJlIGF2YWlsYWJsZSBpbiBhcyBjb25zaXN0ZW50IG9mIGEgbG9jYXRpb24gYXMgcG9zc2li bGUgc28gSSdkIGxpa2UgdG8gc2VlIGlmDQo+IHRoZXJlIGlzDQo+ID4+IGFueXRoaW5nIEkgY2Fu IGRvIHRvIGhlbHAgY2xlYW4gdGhpcyB1cCBpbiB0aGUgZWFybHkgcGFydCBvZiB0aGUgcGF0Y2gg c2VyaWVzLg0KPiA+Pg0KPiA+Pg0KPiA+PiBUaGUgbGlicmFyeSBpbnRlcmZhY2UgaXMgY3VycmVu dGx5IGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyBoZWFkZXIgZmlsZXM6DQo+ID4+DQo+ID4+IDEu IFBsYXRmb3JtXEludGVsXE1pblBsYXRmb3JtUGtnXEluY2x1ZGVcTGlicmFyeVxTcGlGbGFzaENv bW1vbkxpYi5oDQo+ID4+DQo+ID4+IDIuIFNpbGljb25cSW50ZWxcU2ltaWNzSWNoMTBQa2dcSW5j bHVkZVxMaWJyYXJ5XFNwaUZsYXNoQ29tbW9uTGliLmgNCj4gPj4NCj4gPj4gMy4gU2lsaWNvblxJ bnRlbFxLYWJ5bGFrZVNpbGljb25Qa2dcUGNoXEluY2x1ZGVcTGlicmFyeVxTcGlGbGFzaENvbW1v bkxpYi5oDQo+ID4+DQo+ID4+IDQuDQo+ID4+IFNpbGljb25cSW50ZWxcQ29mZmVlbGFrZVNpbGlj b25Qa2dcUGNoXEluY2x1ZGVcTGlicmFyeVxTcGlGbGFzaENvbW1vbkxpYi5oDQo+ID4+DQo+ID4+ DQo+ID4+IEluc3RhbmNlcyBvZiBTbW1TcGlGbGFzaENvbW1vbkxpYiBpbXBsZW1lbnRhdGlvbiBl eGlzdCBpbiBhIG1peCBvZiBwbGF0Zm9ybSBhbmQgc2lsaWNvbiBwYWNrYWdlczoNCj4gPj4NCj4g Pj4gMS4NCj4gPj4gU2lsaWNvblxJbnRlbFxTaW1pY3NJY2gxMFBrZ1xMaWJyYXJ5XFNtbVNwaUZs YXNoQ29tbW9uTGliXFNtbVNwaUZsYXNoQ29tbW9uTGliLmluZg0KPiA+Pg0KPiA+PiAyLg0KPiA+ PiBQbGF0Zm9ybVxJbnRlbFxUaWdlcmxha2VPcGVuQm9hcmRQa2dcTGlicmFyeVxTbW1TcGlGbGFz aENvbW1vbkxpYlxTbW1TcGlGbGFzaENvbW1vbkxpYi5pbmYNCj4gPj4NCj4gPj4gMy4NCj4gPj4g U2lsaWNvblxJbnRlbFxLYWJ5bGFrZVNpbGljb25Qa2dcUGNoXExpYnJhcnlcU21tU3BpRmxhc2hD b21tb25MaWJcU21tU3BpRmxhc2hDb21tb25MaWIuaW5mDQo+ID4+DQo+ID4+IDQuDQo+ID4+IFNp bGljb25cSW50ZWxcQ29mZmVlbGFrZVNpbGljb25Qa2dcUGNoXExpYnJhcnlcU21tU3BpRmxhc2hD b21tb25MaWJcU21tU3BpRmxhc2hDb21tb25MaWIuaW5mDQo+ID4+DQo+ID4+IDUuDQo+ID4+IFBs YXRmb3JtXEludGVsXE1pblBsYXRmb3JtUGtnXEZsYXNoXExpYnJhcnlcU3BpRmxhc2hDb21tb25M aWJOdWxsXFNwaUZsYXNoQ29tbW9uTGliTnVsbC5pbmYNCj4gPj4NCj4gPj4NCj4gPj4gVGhlIGxp YnJhcnkgY2xhc3MgaXMgY3VycmVudGx5IGNvbnN1bWVkIGluIHRoZSBmb2xsb3dpbmcgSU5GczoN Cj4gPj4NCj4gPj4gMS4gUGxhdGZvcm1cSW50ZWxcTWluUGxhdGZvcm1Qa2dcRmxhc2hcU3BpRnZi U2VydmljZVxTcGlGdmJTZXJ2aWNlU21tLmluZg0KPiA+Pg0KPiA+PiAyLg0KPiA+PiBQbGF0Zm9y bVxJbnRlbFxNaW5QbGF0Zm9ybVBrZ1xGbGFzaFxTcGlGdmJTZXJ2aWNlXFNwaUZ2YlNlcnZpY2VT dGFuZGFsb25lTW0uaW5mDQo+ID4+DQo+ID4+DQo+ID4+IE15IHVuZGVyc3RhbmRpbmcgaXM6DQo+ ID4+DQo+ID4+IDEuIFRoZSBoZWFkZXIgZmlsZSBpcyBkZWZpbmVkIGluIGVhY2ggc2lsaWNvbiBw YWNrYWdlIGJlY2F1c2Ugc2lsaWNvbiBjYW5ub3QgZGVwZW5kIHVwb24gcGxhdGZvcm0gKGkuZS4g dGhlIE1pblBsYXRmb3JtUGtnDQo+ID4+IGhlYWRlcikuDQo+ID4+DQo+ID4+IDIuIFRoZSBoZWFk ZXIgaXMgcHJlc2VudCBpbiBlYWNoIHNpbGljb24gcGFja2FnZSBiZWNhdXNlIHRoZSBpbXBsZW1l bnRhdGlvbiBpcyBzaWxpY29uLXNwZWNpZmljIGFuZCB0aGVzZSBwYWNrYWdlcyBjYW5ub3QNCj4g Pj4gZGVwZW5kIG9uIG9uZSBhbm90aGVyLg0KPiA+Pg0KPiA+PiAzLiBUaGUgaGVhZGVyIGlzIGRl ZmluZWQgaW4gTWluUGxhdGZvcm1Qa2cgYmVjYXVzZSBNaW5QbGF0Zm9ybVBrZyBzaG91bGQgYmUg c2lsaWNvbiB2ZW5kb3IgYWdub3N0aWMgKGNhbm5vdCBkZXBlbmQgb24gdGhlDQo+ID4+IHNpbGlj b24gcGFja2FnZXMpLg0KPiA+Pg0KPiA+PiA0LiBUaGUgaGVhZGVyIGlzIG5lZWRlZCBpbiBNaW5Q bGF0Zm9ybVBrZyBiZWNhdXNlIHRoZSBTcGlGdmJTZXJ2aWNlIHRoZXJlIGRlcGVuZHMgb24gU1BJ IGZsYXNoIG9wZXJhdGlvbnMgaW1wbGVtZW50ZWQgaW4NCj4gPj4gU3BpRmxhc2hDb21tb25MaWIu DQo+ID4+DQo+ID4+DQo+ID4+IEhlcmUncyBhbiBpbml0aWFsIHByb3Bvc2FsOg0KPiA+Pg0KPiA+ PiAxLiBDb25zb2xpZGF0ZSB0aGUgbGlicmFyeSBpbnRlcmZhY2UgaW50byBhIHNpbmdsZSBoZWFk ZXIuIEluDQo+ID4+IEludGVsU2lsaWNvblBrZz8NCj4gPj4NCj4gPj4gMi4gQ29uc29saWRhdGUg bGlicmFyeSBpbXBsZW1lbnRhdGlvbiBpbnRvIGEgc2luZ2xlIGluc3RhbmNlLiBJbg0KPiA+PiBJ bnRlbFNpbGljb25Qa2c/DQo+ID4+DQo+ID4+IDMuIE1vdmUgU3BpRnZiU2VydmljZVh5eiBvdXQg b2YgTWluUGxhdGZvcm1Qa2cuDQo+ID4+ICAgICAgMy5hLiBNYWtlIGEgIlNQSSBmbGFzaCIgZmVh dHVyZT8NCj4gPj4gICAgICAzLmIuIEFsbG93IHRoZSBJbnRlbCBpbXBsZW1lbnRhdGlvbiBvZiB0 aGlzIGZlYXR1cmUgdG8gZGVwZW5kIG9uDQo+ID4+IFNwaUZsYXNoQ29tbW9uTGliIGRlZmluZWQg aW4gSW50ZWxTaWxpY29uUGtnLg0KPiA+Pg0KPiA+PiBJbnRlbCBib2FyZCBwYWNrYWdlcyBjb3Vs ZCB0aGVuIHVzZSB0aGUgU3BpRmxhc2hDb21tb25MaWIgZnJvbQ0KPiA+PiBJbnRlbFNpbGljb25Q a2cgKGEgZ2VuZXJhdGlvbiBzcGVjaWZpYyBpbnN0YW5jZSBjb3VsZCBiZSBjcmVhdGVkIGlmDQo+ ID4+IG5lZWRlZCkgYW5kIHVzZSB0aGUgU3BpRnZiU2VydmljZVh5eiBkcml2ZXIgZnJvbSB0aGUg IlNwaUZsYXNoIiBmZWF0dXJlLg0KPiA+Pg0KPiA+PiBMb29rIGZvcndhcmQgdG8geW91ciB0aG91 Z2h0cyBhbmQgZmVlZGJhY2suDQo+ID4+DQo+ID4+IFRoYW5rcywNCj4gPj4gTWljaGFlbA0KPiA+ DQo+ID4NCj4gPiANCj4gPg0KPiA+DQo=