From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mx.groups.io with SMTP id smtpd.web08.1193.1614814686553356042 for ; Wed, 03 Mar 2021 15:38:06 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=IM/VLsbL; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: ray.ni@intel.com) IronPort-SDR: QcWZU/vPHW3EaRCqCA0rIz4gub0xyrEVS9fUqYDvIewjx1Z+NXc8RAf0r2zTQg08ot04rdgdGb Q2CBrLzd8HEQ== X-IronPort-AV: E=McAfee;i="6000,8403,9912"; a="184887522" X-IronPort-AV: E=Sophos;i="5.81,220,1610438400"; d="scan'208";a="184887522" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2021 15:38:05 -0800 IronPort-SDR: RzWhLfsz/WDgyHOLANE/3nxhMGgI7dgdw9+a5qOt+hbX/+f1+rpet1fteWHO8fm2x1laG6D6md BhLWte22YoLQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,220,1610438400"; d="scan'208";a="586510631" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga005.jf.intel.com with ESMTP; 03 Mar 2021 15:38:05 -0800 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Wed, 3 Mar 2021 15:38:04 -0800 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Wed, 3 Mar 2021 15:38:04 -0800 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2 via Frontend Transport; Wed, 3 Mar 2021 15:38:04 -0800 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.103) 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.2106.2; Wed, 3 Mar 2021 15:38:04 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ss91ao8tNwUt9lKwvtZsLFOyXIXGubwgeiSDS2VBQIyENXAfMKuY18bhGJR2D6+tQ11s1LP0rrJBVzJsVdMZYYp3fdFMqkxeWHOqmac/4b+n0PgtXrBbaaDFDIPCQlfqOwZG2/ECuP4lHpYuzA5YVukubtvzUXCPEP4xA7Y4ymRpALyMn49WM9m7ZoWmpUhWl0PKpAzJNYZrPgA4cOrIvy0Qugd7i2m+VNRNZLv5LPQS71EjArk9jJ546CKNsINjbM9RSok1zPmxHsY/pAmLbG5prCNominfVwId+iF/Av4iPAwXvEa8OxfUeJqJv4gkr0CgF6v6zBw/A8WeDHD0yA== 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=AWatSAsKc+D1UF0UBZKcKgYdrJpLwqk8cc8KKk24/es=; b=RaL5Z5+ERbG9NcjO+2x5udZLMC4g2sbUevDKQeOCEPxHfa1a+rOvAr8Rv3rwqpwJVWm1w1+eNha0qb3WtPtZU3Yppe9HLBC5NS19qTqxBO0//DG16iWiqAW2ShfNZR5QKIAWPPaL+lH3Vq52KQgKAt8R38YIPtMcAPbr9sU2Vtn7WRTxaS8A8Az1eMnUdZ+8/ffO8rSMLs5CB43j8c5gx09y3wMVWWhfRmT1R0DeFsLmHYWjdPwylqSiK7BwtbmURZLDeyOS0j1d9oRuutpl/A9U8W/GD6AAvKBFG+n3kaMxf3Dw/f2d3wnCRJAZR/2nyDqaviakAKNWDqLsrpnltQ== 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=AWatSAsKc+D1UF0UBZKcKgYdrJpLwqk8cc8KKk24/es=; b=IM/VLsbL06qqEqx2BZjz3YtI4oGrweb9UiqhgualBNwFrIYWUR6Q3K12y9mnumJUq0A+TuQctrTu6PzExHUZ0hRfBmtaudkpa25qj1dxNqVZSfY+dXjEwaP4Z9ldpdfywJfGYIf7UXHka9GXlmYwUR+u2ECvEfVSjpdiZYzgS5Y= Received: from CO1PR11MB4930.namprd11.prod.outlook.com (2603:10b6:303:9b::11) by MW3PR11MB4521.namprd11.prod.outlook.com (2603:10b6:303:55::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3890.23; Wed, 3 Mar 2021 23:38:03 +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.030; Wed, 3 Mar 2021 23:38:03 +0000 From: "Ni, Ray" To: "Dong, Guo" , 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" Subject: Re: [edk2-devel] [edk2-platforms][RFC] SpiFlashCommonLib Refactor Thread-Topic: [edk2-devel] [edk2-platforms][RFC] SpiFlashCommonLib Refactor Thread-Index: AQHXDndNOYWYxx12jEeC2Ob81yhUn6pu1iOwgACrkwCAAF24wIAC9FIAgAAPkACAAAfUgIAAA6fA Date: Wed, 3 Mar 2021 23:38:02 +0000 Message-ID: References: <2a2a1cc0-3de9-fbd5-1bfb-eb5dbc9d1bc6@linux.microsoft.com> <9a764723-06b6-555a-dfb8-6dee940e7276@linux.microsoft.com> In-Reply-To: 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: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.147.216] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9d20f0c8-6db8-485b-d44e-08d8de9d634b x-ms-traffictypediagnostic: MW3PR11MB4521: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /1DGEF5AoF4pnelCOzUCgootY8LSbWvPACsy+uRwkaQR5xUp6ejPPylExMerQq3fyyo3o9v/kkt7mO6LjteaQKJ+qnA4D/rNCoJP+dLjxlmBKMhKzQYAt3sNsI/1XJLn+uQcwv1L1FaMTIrTijlvR3YgwXHj33zrDKzKbGx5pXsOW2Zcs9I5O8zbgCXkTp1aU09CraHFguvshhbF61HqdC4fWnhY3PCaEREl1HFYRfcuF/p8YfSu4L2r6dHBrkUUIol822KKRTAAN+UZ28B3jr5+vGWo2qU0+HIfe9ZqlI4zP1YunbS6a2VQ+A3c8jY6K05a5ZKC9nYotCMhLlOhbi1tQjrGhfCAvflEF80MshWiTrWrQAo2TAUEfk1/AeXZd5yLNolbxHzW782pJ3BVciwtnz+SXDwzeH8BpP/+L8Fv3cRr08xG0QzArZk8lHd3y4/kfS2JwpLaTT0+aG0ilMoG2n0h5jzNOVr8hbs8WLLXtrW/q6YygNzOJX1MQsZzsLjNRxkrJC46CNB+KoewHngRA/fzJdziTarpWnQbi3NSkKmB8FBcB2OXXdcgLkbrxHWnmVHr1gFVNjzKfn+LB0hzCunjeJm6Xz5ayijvYvc= 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:(346002)(366004)(396003)(376002)(136003)(39860400002)(64756008)(55016002)(83380400001)(316002)(9686003)(2906002)(54906003)(71200400001)(66476007)(110136005)(53546011)(33656002)(8676002)(966005)(30864003)(478600001)(52536014)(4326008)(186003)(86362001)(5660300002)(26005)(76116006)(66946007)(7696005)(66446008)(6506007)(8936002)(107886003)(66556008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?RUtjd3ZQbEhIdmcxOEVuR3dOdFpCU2hROE5qZGJDSkpCWjUrUlZ2ek05dlo5?= =?utf-8?B?aDJDWFphVHhWTFRQZEp3TWlJeGNQQy9rWlV2UWxZSkVPQldFQjBKeC9kc2VJ?= =?utf-8?B?T1hNU3NrYVJHMkoxZEc4c2FKTUVUZmNEVjcrQTEzQ1JpbWhQdEJHUE1Ia0xs?= =?utf-8?B?NGZjcTZyd0VTeVg3MTJ6OWwrVVd2QTI4QVBQeTFBTlU4eFAwQkdCemNrdEdY?= =?utf-8?B?N3phNGJ3dWxGWlZRQmZIY0JsSmo2MU15eG1EeDZqU1R2T2ZVYTREbGMvUjA2?= =?utf-8?B?TTAyb25GcGkrcXY1WFpTNkRNbHVJM1RFU2FJcEVUQmI0OHk0THpNejZJNjZs?= =?utf-8?B?TVcxSmxJazdhYVYxU291ZzVQUy8xZXp0QXY2ejVLMEs5Y1lIV0RyNlNjcU5N?= =?utf-8?B?MjZsblRSUHdQZlpkSHMvaDFrY3lmN0VnYmJEdGFQeEJnWFhxbk9ZYXVsS1o4?= =?utf-8?B?YTRSTzExbFhMWlArL2J4VW5IWXZPcGh6djFwcXdZRU9JSTZrZFRQNm1RUEl1?= =?utf-8?B?K2JCalN1VjM2ZGtiQWYvWFBaTkZOdkZtcy9kTDVaODN2SnR1UW1HNldrREly?= =?utf-8?B?WUlhaU91L0RHSWE5aGN0bkp1Vk1qOWlVYWlZQnZZSkFWeGhoczRIUUNWYlpF?= =?utf-8?B?ODdUVXZTNVpDQmxpWkNVemN4Q0JHRTBNTUZyZVJOcVRkK2IzTzVWRTl5V3BU?= =?utf-8?B?RlZRblBLRFhPdjJyQnRHUUJjZXdPcGN6ZEVzb2Z3eGdzV0lNZFV2eERRM291?= =?utf-8?B?YTQ4bW1kWWRjUkdmL3ppMzBsMktGcWxObkxqSWExaTQvc0pERUp1K2p6ZTM3?= =?utf-8?B?bWh2UDZUVmdjbnM2eWFISUdxU2dVU014dDcyY1dYcmtjczN2cE5uSnhYOExH?= =?utf-8?B?ZFZQYmNsVktGcTEyNDY5OEUzN0pyd2tsSGtVaThjTXZaeU5rdzd4STZlZjZ4?= =?utf-8?B?STdXUGNldnNPNmhKZmwyQnhNckRnRitiaEFjVXdpMDVwcDdtbmpzZGNsTVFP?= =?utf-8?B?cThRVFIyZUtVTXNDWHpGaGFGblNrNzdBblhCTDlHTUkvSnp1eWU0Q0FEcHh2?= =?utf-8?B?WkNWN0RwUTBSVnh2S2hDb29vQURjbjNzNUhYcisvVHJNYmNaRit4OVNlVlpP?= =?utf-8?B?QXlXeFFQNmdycVZBN0dwbjFIcng3eS8yeXFTaEVIaFhLaExZNEIxM081WGFv?= =?utf-8?B?Q2RxTzU1NThxeDUyVGFJcW5tWWY1ekpiR0lEbVdSN3l5WVhiWFc3RnhxL1VG?= =?utf-8?B?dVZqa0w5azZwVFNrRXFRRkFoT2JVMi82eTM0WlpwTVZlR21NWHNrdkt4RWlr?= =?utf-8?B?ZWFJVlQzWFMzMmNrUVphK2g2b2JwOVBMVGVnTTFzWXNiUnkvQ2ZqUUNmbU8v?= =?utf-8?B?UUJrUEhNZ2RNQXd5WEZPMTNtQkR6OHBqTjZ4OTZkM0s2OGtBL3Y1emN1NGhZ?= =?utf-8?B?elM5VUtBVnVwbThkT01JTGVoaXlJZElwa24vclFjOEdqeDc4d3FGWnhSNkFs?= =?utf-8?B?NS9BN3BiMjh3K3lXNVAwVzZOMUtNVS93a3h3YUJmMEZRdG1NYzVtZ0VtZXVN?= =?utf-8?B?Nm1qQXFYbjYxbHpodlRYZ3V2RGFGUG1iNDg4MGJqNEVnWTdRekpUSTJ2dWtv?= =?utf-8?B?UUFlRmwvNG9Nd2hMMURtUU1EYlc4dlNYbmM0bThxRGttMWtxZzl6UnFVNi8y?= =?utf-8?B?b0krdjJ4MVFSSFhWSmxjV0dFVzJoeUlPeVU4TXFqTHRhNU42bjNLSzhIdS9Q?= =?utf-8?Q?18iSsNeBF+iMK5fBLyssUm8Q0cwF/Hnjv6483nP?= 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: 9d20f0c8-6db8-485b-d44e-08d8de9d634b X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Mar 2021 23:38:02.8119 (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: DfHgmWuM4g58XOFDMR0fggHIMVZMR9h9SOEv3BFmQWST6Aj63+IAebCRydeLU5pEIW/JZyad9Axl2wfqWIrc7A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR11MB4521 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 R3VvLA0KSSB1bmRlcnN0YW5kIHlvdXIgY29uY2VybiB0aGF0IFVlZmlQYXlsb2FkUGtnIHNob3Vs ZCBOT1QgdXNlIGFueSBjb21wb25lbnRzIG91dHNpZGUgb2YgZWRrMiByZXBvIChlZGsyLXBsYXRm b3JtIHJlcG8gaW4gdGhpcyBjYXNlKS4NCklmIHRoZSB0d28gU1BJIGRyaXZlcnMgeW91IGFyZSB0 YWxraW5nIGFib3V0IGFyZSB0aGUgc2FtZSBvbmUsIHdlIGNvdWxkIGdvIGJhY2sgdG8gcHV0IHRo ZSBkcml2ZXIgdG8gUGNBdGNoaXBzZXRQa2cuDQpMZXQncyBzZWUgd2hhdCB0aGUgZHJpdmVyIGNv bnRhaW5zIGFuZCB0aGVuIGRlY2lkZSB3aGVyZSB0byBwdXQuDQoNClRoYW5rcywNClJheQ0KDQo+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IERvbmcsIEd1byA8Z3VvLmRvbmdA aW50ZWwuY29tPg0KPiBTZW50OiBUaHVyc2RheSwgTWFyY2ggNCwgMjAyMSA3OjIyIEFNDQo+IFRv OiBNaWNoYWVsIEt1YmFja2kgPG1pa3ViYWNrQGxpbnV4Lm1pY3Jvc29mdC5jb20+OyBkZXZlbEBl ZGsyLmdyb3Vwcy5pbzsgTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbT4NCj4gQ2M6IENoYWdhbnR5 LCBSYW5nYXNhaSBWIDxyYW5nYXNhaS52LmNoYWdhbnR5QGludGVsLmNvbT47IENoaXUsIENoYXNl bCA8Y2hhc2VsLmNoaXVAaW50ZWwuY29tPjsgRGVzaW1vbmUsIE5hdGhhbmllbCBMDQo+IDxuYXRo YW5pZWwubC5kZXNpbW9uZUBpbnRlbC5jb20+OyBMdW8sIEhlbmcgPGhlbmcubHVvQGludGVsLmNv bT47IEFneWVtYW4sIFByaW5jZSA8cHJpbmNlLmFneWVtYW5AaW50ZWwuY29tPjsNCj4gZ2FvbGlt aW5nQGJ5b3NvZnQuY29tLmNuOyBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPg0KPiBT dWJqZWN0OiBSRTogW2VkazItZGV2ZWxdIFtlZGsyLXBsYXRmb3Jtc11bUkZDXSBTcGlGbGFzaENv bW1vbkxpYiBSZWZhY3Rvcg0KPiANCj4gDQo+IEhpIE1pY2hhZWwsDQo+IA0KPiBJIGRpZG4ndCBp bml0aWF0ZSBhbnkgZGlzY3Vzc2lvbiBvbiB0aGlzIHlldC4gQW5kIEkgYW0gbm90IHN1cmUgaWYg dGhpcyBpZGVhIGNvdWxkIGJlIGFjY2VwdGVkLg0KPiBGcm9tIG15IHZpZXcgcG9pbnQsIEludGVs U2lsaWNvblBrZyBpcyBhIHByb3BlciBwbGFjZSBmb3IgU1BJIGZsYXNoIGxpYnJhcnkuDQo+IEJ1 dCBVZWZpUGF5bG9hZFBrZyBjb3VsZCBub3QgdXNlIHRoYXQgcGFja2FnZSBzaW5jZSBpdCBpcyBp biBhbm90aGVyIHJlcG8uDQo+IFNpbmNlIHRoZXNlIGRlcGVuZGVuY2llcywgeW91IGNvdWxkIGdv IGEgaGVhZCB0byBwdXQgaXQgaW50byBJbnRlbFNpbGljb25Qa2cuDQo+IA0KPiBPbmNlIEkgY2xl YW4gdXAgbXkgYnJhbmNoIChleHBlY3RlZCBjb21wbGV0ZSBuZXh0IHdlZWspLCBJIGNvdWxkIHNl bmQgbXkgcGF0Y2ggZm9yIHlvdXINCj4gcmVmZXJlbmNlIHNvIHRoYXQgd2UgY291bGQgYXQgbGVh c3Qgc2hhcmUgY29kZSBpZiBwb3NzaWJsZSB0byByZWR1Y2UgdGhlIGNvZGUgbWFpbnRlbmFuY2Uu DQo+IA0KPiBUaGFua3MsDQo+IEd1bw0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPiA+IEZyb206IE1pY2hhZWwgS3ViYWNraSA8bWlrdWJhY2tAbGludXgubWljcm9zb2Z0LmNv bT4NCj4gPiBTZW50OiBXZWRuZXNkYXksIE1hcmNoIDMsIDIwMjEgMzo1NCBQTQ0KPiA+IFRvOiBk ZXZlbEBlZGsyLmdyb3Vwcy5pbzsgRG9uZywgR3VvIDxndW8uZG9uZ0BpbnRlbC5jb20+OyBOaSwg UmF5DQo+ID4gPHJheS5uaUBpbnRlbC5jb20+DQo+ID4gQ2M6IENoYWdhbnR5LCBSYW5nYXNhaSBW IDxyYW5nYXNhaS52LmNoYWdhbnR5QGludGVsLmNvbT47IENoaXUsIENoYXNlbA0KPiA+IDxjaGFz ZWwuY2hpdUBpbnRlbC5jb20+OyBEZXNpbW9uZSwgTmF0aGFuaWVsIEwNCj4gPiA8bmF0aGFuaWVs LmwuZGVzaW1vbmVAaW50ZWwuY29tPjsgTHVvLCBIZW5nIDxoZW5nLmx1b0BpbnRlbC5jb20+Ow0K PiA+IEFneWVtYW4sIFByaW5jZSA8cHJpbmNlLmFneWVtYW5AaW50ZWwuY29tPjsgZ2FvbGltaW5n QGJ5b3NvZnQuY29tLmNuOw0KPiA+IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+DQo+ ID4gU3ViamVjdDogUmU6IFtlZGsyLWRldmVsXSBbZWRrMi1wbGF0Zm9ybXNdW1JGQ10gU3BpRmxh c2hDb21tb25MaWINCj4gPiBSZWZhY3Rvcg0KPiA+DQo+ID4gSGkgR3VvLA0KPiA+DQo+ID4gVGhh dCdzIGdvb2QgdG8gaGVhci4NCj4gPg0KPiA+IERvZXMgdGhpcyBuZXcgImNvbW1vbiBTUEkgZmxh c2ggbGlicmFyeSIgYW5kICJTTU0gRlZCIGRyaXZlciIgaGF2ZQ0KPiA+IGVxdWl2YWxlbnQgZnVu Y3Rpb25hbGl0eSB0byB0aGUgaW5zdGFuY2VzIGJlaW5nIGRpc2N1c3NlZCBoZXJlPw0KPiA+DQo+ ID4gRm9yIHRoZSBwbGF0Zm9ybXMgSSBoYXZlIGluIG1pbmQsIEludGVsU2lsaWNvblBrZyBpcyBh biBhbGxvd2VkDQo+ID4gZGVwZW5kZW5jeSB3aGVyZWFzIFVlZmlQYXlsb2FkUGtnIGlzIG5vdC4N Cj4gPg0KPiA+IEkgaGF2ZSBiZWd1biB0aGUgd29yayAoYXQgbG93IHByaW9yaXR5KSBkaXNjdXNz ZWQgZWFybGllciBpbiB0aGUgdGhyZWFkLA0KPiA+IHBsZWFzZSBsZXQgbWUga25vdyBpZiBJIHNo b3VsZCBjb250aW51ZS4NCj4gPg0KPiA+IFRoYW5rcywNCj4gPiBNaWNoYWVsDQo+ID4NCj4gPiBP biAzLzMvMjAyMSAxOjU4IFBNLCBHdW8gRG9uZyB3cm90ZToNCj4gPiA+DQo+ID4gPiBIaSBNaWNo YWVsLA0KPiA+ID4NCj4gPiA+IFdlIGhhZCBjcmVhdGVkIGEgY29tbW9uIFNQSSBmbGFzaCBsaWJy YXJ5IGFuZCBhIGNvbW1vbiBTTU0gRlZCIGRyaXZlcg0KPiA+IGZvciBhbGwgdGhlIHBsYXRmb3Jt cyBJIGhhdmUgKGluY2x1ZGluZyBBcG9sbG8gbGFrZSwgQ29mZmVlIGxha2UsIEthYnkgTGFrZSwN Cj4gPiBDb21ldCBMYWtlLCBUaWdlciBMYWtlLCBFbGtoYXJ0IExha2UsIGV0Yy4pLiAgd2UgcGxh biB0byB1cHN0cmVhbSB0aGlzIGZvciBVRUZJDQo+ID4gUGF5bG9hZC4NCj4gPiA+IElmIHRoaXMg b25lIGNvdWxkIGJlIHVwc3RyZWFtIHRvIFVlZmlQYXlsb2FkUGtnLCB0aGVuIGVhY2ggcGxhdGZv cm0gY291bGQNCj4gPiBsZXZlcmFnZSBpdC4NCj4gPiA+DQo+ID4gPiBCVFcsIHRvZ2V0aGVyIHdp dGggdGhpcywgd2UgcGxhbiB0byB1cHN0cmVhbSBTTU0gc3VwcG9ydCwgc2VjdXJlIGJvb3QNCj4g PiBhbmQgbWVhc3VyZWQgYm9vdCBmb3IgVUVGSSBQYXlsb2FkLg0KPiA+ID4gU28gd2UgY291bGQg dXNlIGEgc2luZ2xlIFVFRkkgUGF5bG9hZCB3aXRoIHRoZXNlIGFkdmFuY2VkIGZlYXR1cmVzICBv bg0KPiA+IGRpZmZlcmVudCBwbGF0Zm9ybXMuDQo+ID4gPg0KPiA+ID4gVGhhbmtzLA0KPiA+ID4g R3VvDQo+ID4gPg0KPiA+ID4NCj4gPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ ID4+IEZyb206IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+DQo+ID4gPj4gU2VudDogTW9uZGF5 LCBNYXJjaCAxLCAyMDIxIDU6NTIgUE0NCj4gPiA+PiBUbzogTWljaGFlbCBLdWJhY2tpIDxtaWt1 YmFja0BsaW51eC5taWNyb3NvZnQuY29tPjsNCj4gPiA+PiBkZXZlbEBlZGsyLmdyb3Vwcy5pbw0K PiA+ID4+IENjOiBDaGFnYW50eSwgUmFuZ2FzYWkgViA8cmFuZ2FzYWkudi5jaGFnYW50eUBpbnRl bC5jb20+OyBDaGl1LCBDaGFzZWwNCj4gPiA+PiA8Y2hhc2VsLmNoaXVAaW50ZWwuY29tPjsgRGVz aW1vbmUsIE5hdGhhbmllbCBMDQo+ID4gPj4gPG5hdGhhbmllbC5sLmRlc2ltb25lQGludGVsLmNv bT47IEx1bywgSGVuZyA8aGVuZy5sdW9AaW50ZWwuY29tPjsNCj4gPiA+PiBBZ3llbWFuLCBQcmlu Y2UgPHByaW5jZS5hZ3llbWFuQGludGVsLmNvbT47DQo+ID4gZ2FvbGltaW5nQGJ5b3NvZnQuY29t LmNuOw0KPiA+ID4+IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBEb25nLCBHdW8g PGd1by5kb25nQGludGVsLmNvbT4NCj4gPiA+PiBTdWJqZWN0OiBSRTogW2VkazItZGV2ZWxdIFtl ZGsyLXBsYXRmb3Jtc11bUkZDXSBTcGlGbGFzaENvbW1vbkxpYg0KPiA+ID4+IFJlZmFjdG9yDQo+ ID4gPj4NCj4gPiA+PiBNaWNoYWVsLA0KPiA+ID4+IEkgYW0gZ29vZCB3aXRoIHRoYXQuIEkgYW0g YWxzbyBjdXJpb3VzIGhvdyB5b3UgbWVyZ2UgYWxsIHRoZSBkaWZmZXJlbnQgU1BJDQo+ID4gPj4g Zmxhc2ggaW1wbGVtZW50YXRpb24gaW50byBvbmUuDQo+ID4gPj4NCj4gPiA+PiBUaGFua3MsDQo+ ID4gPj4gUmF5DQo+ID4gPj4NCj4gPiA+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4g PiA+Pj4gRnJvbTogTWljaGFlbCBLdWJhY2tpIDxtaWt1YmFja0BsaW51eC5taWNyb3NvZnQuY29t Pg0KPiA+ID4+PiBTZW50OiBUdWVzZGF5LCBNYXJjaCAyLCAyMDIxIDM6MTYgQU0NCj4gPiA+Pj4g VG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPg0KPiA+ ID4+PiBDYzogQ2hhZ2FudHksIFJhbmdhc2FpIFYgPHJhbmdhc2FpLnYuY2hhZ2FudHlAaW50ZWwu Y29tPjsgQ2hpdSwgQ2hhc2VsDQo+ID4gPj4gPGNoYXNlbC5jaGl1QGludGVsLmNvbT47IERlc2lt b25lLCBOYXRoYW5pZWwgTA0KPiA+ID4+PiA8bmF0aGFuaWVsLmwuZGVzaW1vbmVAaW50ZWwuY29t PjsgTHVvLCBIZW5nIDxoZW5nLmx1b0BpbnRlbC5jb20+Ow0KPiA+ID4+IEFneWVtYW4sIFByaW5j ZSA8cHJpbmNlLmFneWVtYW5AaW50ZWwuY29tPjsNCj4gPiA+Pj4gZ2FvbGltaW5nQGJ5b3NvZnQu Y29tLmNuOyBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPg0KPiA+ID4+PiBTdWJqZWN0 OiBSZTogW2VkazItZGV2ZWxdIFtlZGsyLXBsYXRmb3Jtc11bUkZDXSBTcGlGbGFzaENvbW1vbkxp Yg0KPiA+ID4+IFJlZmFjdG9yDQo+ID4gPj4+DQo+ID4gPj4+IEhpIFJheSwNCj4gPiA+Pj4NCj4g PiA+Pj4gVGhhdCBzb3VuZHMgcmVhc29uYWJsZSB0byBtZS4NCj4gPiA+Pj4NCj4gPiA+Pj4gSSB3 YXMgYXR0ZW1wdGluZyB0byBwcmVzZXJ2ZSB0aGUgZGVzaWduIHRoYXQgaXNvbGF0ZXMgdGhlDQo+ ID4gPj4+IHNpbGljb24tc3BlY2lmaWMgbG9naWMgdG8gYSBsaWJyYXJ5IHZpYSBhbiBpbnRlcmZh Y2UgdG8gYSBzaWxpY29uDQo+ID4gPj4+IHBhY2thZ2UuIEhvd2V2ZXIsIHRoZSByZWFsIGFic3Ry YWN0aW9uIGhlcmUgaXMgdGhlIGZpcm13YXJlIHZvbHVtZQ0KPiA+IGJsb2NrDQo+ID4gPj4+IHBy b3RvY29sIHdoaWNoIGNvdWxkIHNpbXBseSBiZSBwcm9kdWNlZCBieSBhIHNpbGljb24gZHJpdmVy IHdpdGggdGhlDQo+ID4gPj4+IHNlcGFyYXRpb24gb2Ygc3VjaCBsb2dpYyB0byBhIGxpYnJhcnkg YmVpbmcgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mDQo+ID4gPj4+IHRoZSBkcml2ZXIuDQo+ ID4gPj4+DQo+ID4gPj4+IEluIHN1bW1hcnksIGhlcmUgaXMgdGhlIHVwZGF0ZWQgcHJvcG9zYWw6 DQo+ID4gPj4+DQo+ID4gPj4+IDEuIENvbnNvbGlkYXRlIHRoZSBsaWJyYXJ5IGludGVyZmFjZSBp bnRvIGEgc2luZ2xlIGhlYWRlciBpbg0KPiA+ID4+PiBJbnRlbFNpbGljb25Qa2cuDQo+ID4gPj4+ DQo+ID4gPj4+IDIuIENvbnNvbGlkYXRlIHRoZSBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIGludG8g YSBzaW5nbGUgaW5zdGFuY2UgaW4NCj4gPiA+Pj4gSW50ZWxTaWxpY29uUGtnLg0KPiA+ID4+Pg0K PiA+ID4+PiAzLiBNb3ZlIFNwaUZ2YlNlcnZpY2VTbW0gb3V0IG9mIE1pblBsYXRmb3JtUGtnIGlu dG8gSW50ZWxTaWxpY29uUGtnLg0KPiA+ID4+Pg0KPiA+ID4+PiA0LiBBZGQgU3BpRnZiU2Vydmlj ZVN0YW5kYWxvbmVNbSB0byBJbnRlbFNpbGljb25Qa2cgc2hhcmluZw0KPiA+ID4+PiBpbXBsZW1l bnRhdGlvbiB3aXRoIFNwaUZ2YlNlcnZpY2VTbW0gd2hlcmUgYXBwcm9wcmlhdGUuDQo+ID4gPj4+ DQo+ID4gPj4+IEludGVsIGJvYXJkIHBhY2thZ2VzIHdvdWxkIHRoZW4gdXNlIHRoZSBTcGlGbGFz aENvbW1vbkxpYiBmcm9tDQo+ID4gPj4+IEludGVsU2lsaWNvblBrZyAoYSBnZW5lcmF0aW9uIHNw ZWNpZmljIGluc3RhbmNlIGNvdWxkIGJlIGNyZWF0ZWQgaWYNCj4gPiA+Pj4gbmVlZGVkKSBhbmQg dXNlIHRoZSBTcGlGdmJTZXJ2aWNlWHl6IGRyaXZlciBmcm9tIEludGVsU2lsaWNvblBrZy4NCj4g PiA+Pj4NCj4gPiA+Pj4gUGxlYXNlIGxldCBtZSBrbm93IGlmIHRoaXMgaXMgYWNjZXB0YWJsZSBh bmQgSSdkIGJlIGhhcHB5IHRvIHNlbmQgdGhlDQo+ID4gPj4+IHBhdGNoZXMuDQo+ID4gPj4+DQo+ ID4gPj4+IFRoYW5rcywNCj4gPiA+Pj4gTWljaGFlbA0KPiA+ID4+Pg0KPiA+ID4+PiBPbiAzLzEv MjAyMSAxOjA3IEFNLCBOaSwgUmF5IHdyb3RlOg0KPiA+ID4+Pj4gTWljaGFlbCwNCj4gPiA+Pj4+ IEkgYWdyZWUgd2l0aCB5b3VyIHRob3VnaHRzIHRvIGNvbnNvbGlkYXRlIHRoZSBsaWIgaGVhZGVy IGFuZA0KPiA+ID4+IGltcGxlbWVudGF0aW9uIHRvIEludGVsU2lsaWNvblBrZy4NCj4gPiA+Pj4+ IEkgZGlkbid0IHJlYWQgdGhlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuIEJ1dCB0aGUgaW1w bGVtZW50YXRpb24NCj4gPiA+PiBjb25zb2xpZGF0aW9uIG1lYW5zIHlvdSBzZWUgYWxsIHRoZSBl eGlzdGluZw0KPiA+ID4+PiBpbXBsZW1lbnRhdGlvbnMgYXJlIHRoZSBzYW1lLiBSaWdodD8NCj4g PiA+Pj4+DQo+ID4gPj4+PiBCdXQgd2h5IGRvbid0IHlvdSBwdXQgdGhlIGRyaXZlciBpbiBJbnRl bFNpbGljb25Qa2cgYXMgd2VsbD8gQ3JlYXRpbmcgYW4NCj4gPiA+PiBhZHZhbmNlZCBmZWF0dXJl IGZvciB0aGlzIGZ1bmRhbWVudGFsIHNlcnZpY2Ugc2VlbXMNCj4gPiA+Pj4gb3Zlci1raWxsLg0K PiA+ID4+Pj4NCj4gPiA+Pj4+IFRoYW5rcywNCj4gPiA+Pj4+IFJheQ0KPiA+ID4+Pj4NCj4gPiA+ Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4+Pj4+IEZyb206IENoYWdhbnR5 LCBSYW5nYXNhaSBWIDxyYW5nYXNhaS52LmNoYWdhbnR5QGludGVsLmNvbT4NCj4gPiA+Pj4+PiBT ZW50OiBNb25kYXksIE1hcmNoIDEsIDIwMjEgNDo0NiBQTQ0KPiA+ID4+Pj4+IFRvOiBOaSwgUmF5 IDxyYXkubmlAaW50ZWwuY29tPg0KPiA+ID4+Pj4+IFN1YmplY3Q6IFJFOiBbZWRrMi1wbGF0Zm9y bXNdW1JGQ10gU3BpRmxhc2hDb21tb25MaWIgUmVmYWN0b3INCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+ IERpZCB5b3UgZ2V0IGEgY2hhbmNlIHRvIGxvb2sgaW50byB0aGlzID8NCj4gPiA+Pj4+Pg0KPiA+ ID4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPj4+Pj4gRnJvbTogTWljaGFl bCBLdWJhY2tpIDxtaWt1YmFja0BsaW51eC5taWNyb3NvZnQuY29tPg0KPiA+ID4+Pj4+IFNlbnQ6 IFR1ZXNkYXksIEZlYnJ1YXJ5IDE2LCAyMDIxIDQ6NTggUE0NCj4gPiA+Pj4+PiBUbzogZGV2ZWxA ZWRrMi5ncm91cHMuaW87IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+OyBDaGFnYW50eSwNCj4g PiA+PiBSYW5nYXNhaSBWIDxyYW5nYXNhaS52LmNoYWdhbnR5QGludGVsLmNvbT47IENoaXUsDQo+ ID4gPj4+IENoYXNlbA0KPiA+ID4+Pj4+IDxjaGFzZWwuY2hpdUBpbnRlbC5jb20+OyBEZXNpbW9u ZSwgTmF0aGFuaWVsIEwNCj4gPiA+PiA8bmF0aGFuaWVsLmwuZGVzaW1vbmVAaW50ZWwuY29tPjsg THVvLCBIZW5nIDxoZW5nLmx1b0BpbnRlbC5jb20+Ow0KPiA+ID4+Pj4+IEFneWVtYW4sIFByaW5j ZSA8cHJpbmNlLmFneWVtYW5AaW50ZWwuY29tPjsNCj4gPiA+PiBnYW9saW1pbmdAYnlvc29mdC5j b20uY247IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+DQo+ID4gPj4+Pj4gU3ViamVj dDogW2VkazItcGxhdGZvcm1zXVtSRkNdIFNwaUZsYXNoQ29tbW9uTGliIFJlZmFjdG9yDQo+ID4g Pj4+Pj4NCj4gPiA+Pj4+PiBIZWxsbywNCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IEknbSBwbGFubmlu ZyB0byBzdWJtaXQgc3VwcG9ydCBmb3IgU3RhbmRhbG9uZSBNTSBpbg0KPiA+ID4+IFNwaUZsYXNo Q29tbW9uTGliIHNvb24uIEN1cnJlbnRseSwgdGhlcmUncyBxdWl0ZSBhIGJpdCBvZiBkdXBsaWNh dGlvbg0KPiA+ID4+PiB3aXRoDQo+ID4gPj4+Pj4gU3BpRmxhc2hDb21tb25MaWIuDQo+ID4gPj4+ Pj4NCj4gPiA+Pj4+PiBJIHdvdWxkIGxpa2UgdG8gaGF2ZSB0aGlzIFN0YW5kYWxvbmUgTU0gc3Vw cG9ydCBiZSBhdmFpbGFibGUgaW4gYXMNCj4gPiA+PiBjb25zaXN0ZW50IG9mIGEgbG9jYXRpb24g YXMgcG9zc2libGUgc28gSSdkIGxpa2UgdG8gc2VlIGlmDQo+ID4gPj4+IHRoZXJlIGlzDQo+ID4g Pj4+Pj4gYW55dGhpbmcgSSBjYW4gZG8gdG8gaGVscCBjbGVhbiB0aGlzIHVwIGluIHRoZSBlYXJs eSBwYXJ0IG9mIHRoZSBwYXRjaA0KPiA+ID4+IHNlcmllcy4NCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+ DQo+ID4gPj4+Pj4gVGhlIGxpYnJhcnkgaW50ZXJmYWNlIGlzIGN1cnJlbnRseSBkZWZpbmVkIGlu IHRoZSBmb2xsb3dpbmcgaGVhZGVyIGZpbGVzOg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gMS4NCj4g PiA+PiBQbGF0Zm9ybVxJbnRlbFxNaW5QbGF0Zm9ybVBrZ1xJbmNsdWRlXExpYnJhcnlcU3BpRmxh c2hDb21tb25MaWIuaA0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gMi4gU2lsaWNvblxJbnRlbFxTaW1p Y3NJY2gxMFBrZ1xJbmNsdWRlXExpYnJhcnlcU3BpRmxhc2hDb21tb25MaWIuaA0KPiA+ID4+Pj4+ DQo+ID4gPj4+Pj4gMy4NCj4gPiA+Pg0KPiA+IFNpbGljb25cSW50ZWxcS2FieWxha2VTaWxpY29u UGtnXFBjaFxJbmNsdWRlXExpYnJhcnlcU3BpRmxhc2hDb21tb25MaWIuaA0KPiA+ID4+Pj4+DQo+ ID4gPj4+Pj4gNC4NCj4gPiA+Pj4+Pg0KPiA+ID4+DQo+ID4gU2lsaWNvblxJbnRlbFxDb2ZmZWVs YWtlU2lsaWNvblBrZ1xQY2hcSW5jbHVkZVxMaWJyYXJ5XFNwaUZsYXNoQ29tbW9uTGliLg0KPiA+ ID4+IGgNCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gSW5zdGFuY2VzIG9mIFNtbVNw aUZsYXNoQ29tbW9uTGliIGltcGxlbWVudGF0aW9uIGV4aXN0IGluIGEgbWl4DQo+ID4gb2YNCj4g PiA+PiBwbGF0Zm9ybSBhbmQgc2lsaWNvbiBwYWNrYWdlczoNCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+ IDEuDQo+ID4gPj4+Pj4NCj4gPiA+Pg0KPiA+IFNpbGljb25cSW50ZWxcU2ltaWNzSWNoMTBQa2dc TGlicmFyeVxTbW1TcGlGbGFzaENvbW1vbkxpYlxTbW1TcGlGbGFzaEMNCj4gPiA+PiBvbW1vbkxp Yi5pbmYNCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IDIuDQo+ID4gPj4+Pj4NCj4gPiA+Pg0KPiA+IFBs YXRmb3JtXEludGVsXFRpZ2VybGFrZU9wZW5Cb2FyZFBrZ1xMaWJyYXJ5XFNtbVNwaUZsYXNoQ29t bW9uTGliXFMNCj4gPiA+PiBtbVNwaUZsYXNoQ29tbW9uTGliLmluZg0KPiA+ID4+Pj4+DQo+ID4g Pj4+Pj4gMy4NCj4gPiA+Pj4+Pg0KPiA+ID4+DQo+ID4gU2lsaWNvblxJbnRlbFxLYWJ5bGFrZVNp bGljb25Qa2dcUGNoXExpYnJhcnlcU21tU3BpRmxhc2hDb21tb25MaWJcU21tDQo+ID4gPj4gU3Bp Rmxhc2hDb21tb25MaWIuaW5mDQo+ID4gPj4+Pj4NCj4gPiA+Pj4+PiA0Lg0KPiA+ID4+Pj4+DQo+ ID4gPj4NCj4gPiBTaWxpY29uXEludGVsXENvZmZlZWxha2VTaWxpY29uUGtnXFBjaFxMaWJyYXJ5 XFNtbVNwaUZsYXNoQ29tbW9uTGliXFNtDQo+ID4gPj4gbVNwaUZsYXNoQ29tbW9uTGliLmluZg0K PiA+ID4+Pj4+DQo+ID4gPj4+Pj4gNS4NCj4gPiA+Pj4+Pg0KPiA+ID4+DQo+ID4gUGxhdGZvcm1c SW50ZWxcTWluUGxhdGZvcm1Qa2dcRmxhc2hcTGlicmFyeVxTcGlGbGFzaENvbW1vbkxpYk51bGxc U3BpRmxhDQo+ID4gPj4gc2hDb21tb25MaWJOdWxsLmluZg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4N Cj4gPiA+Pj4+PiBUaGUgbGlicmFyeSBjbGFzcyBpcyBjdXJyZW50bHkgY29uc3VtZWQgaW4gdGhl IGZvbGxvd2luZyBJTkZzOg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gMS4NCj4gPiA+Pg0KPiA+IFBs YXRmb3JtXEludGVsXE1pblBsYXRmb3JtUGtnXEZsYXNoXFNwaUZ2YlNlcnZpY2VcU3BpRnZiU2Vy dmljZVNtbS5pbmYNCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IDIuDQo+ID4gPj4+Pj4NCj4gPiA+Pg0K PiA+IFBsYXRmb3JtXEludGVsXE1pblBsYXRmb3JtUGtnXEZsYXNoXFNwaUZ2YlNlcnZpY2VcU3Bp RnZiU2VydmljZVN0YW5kYWxvbg0KPiA+ID4+IGVNbS5pbmYNCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+ DQo+ID4gPj4+Pj4gTXkgdW5kZXJzdGFuZGluZyBpczoNCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IDEu IFRoZSBoZWFkZXIgZmlsZSBpcyBkZWZpbmVkIGluIGVhY2ggc2lsaWNvbiBwYWNrYWdlIGJlY2F1 c2Ugc2lsaWNvbg0KPiA+ID4+IGNhbm5vdCBkZXBlbmQgdXBvbiBwbGF0Zm9ybSAoaS5lLiB0aGUg TWluUGxhdGZvcm1Qa2cNCj4gPiA+Pj4+PiBoZWFkZXIpLg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4g Mi4gVGhlIGhlYWRlciBpcyBwcmVzZW50IGluIGVhY2ggc2lsaWNvbiBwYWNrYWdlIGJlY2F1c2Ug dGhlDQo+ID4gPj4gaW1wbGVtZW50YXRpb24gaXMgc2lsaWNvbi1zcGVjaWZpYyBhbmQgdGhlc2Ug cGFja2FnZXMgY2Fubm90DQo+ID4gPj4+Pj4gZGVwZW5kIG9uIG9uZSBhbm90aGVyLg0KPiA+ID4+ Pj4+DQo+ID4gPj4+Pj4gMy4gVGhlIGhlYWRlciBpcyBkZWZpbmVkIGluIE1pblBsYXRmb3JtUGtn IGJlY2F1c2UgTWluUGxhdGZvcm1Qa2cNCj4gPiA+PiBzaG91bGQgYmUgc2lsaWNvbiB2ZW5kb3Ig YWdub3N0aWMgKGNhbm5vdCBkZXBlbmQgb24gdGhlDQo+ID4gPj4+Pj4gc2lsaWNvbiBwYWNrYWdl cykuDQo+ID4gPj4+Pj4NCj4gPiA+Pj4+PiA0LiBUaGUgaGVhZGVyIGlzIG5lZWRlZCBpbiBNaW5Q bGF0Zm9ybVBrZyBiZWNhdXNlIHRoZQ0KPiA+IFNwaUZ2YlNlcnZpY2UNCj4gPiA+PiB0aGVyZSBk ZXBlbmRzIG9uIFNQSSBmbGFzaCBvcGVyYXRpb25zIGltcGxlbWVudGVkIGluDQo+ID4gPj4+Pj4g U3BpRmxhc2hDb21tb25MaWIuDQo+ID4gPj4+Pj4NCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IEhlcmUn cyBhbiBpbml0aWFsIHByb3Bvc2FsOg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gMS4gQ29uc29saWRh dGUgdGhlIGxpYnJhcnkgaW50ZXJmYWNlIGludG8gYSBzaW5nbGUgaGVhZGVyLiBJbg0KPiA+ID4+ Pj4+IEludGVsU2lsaWNvblBrZz8NCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IDIuIENvbnNvbGlkYXRl IGxpYnJhcnkgaW1wbGVtZW50YXRpb24gaW50byBhIHNpbmdsZSBpbnN0YW5jZS4gSW4NCj4gPiA+ Pj4+PiBJbnRlbFNpbGljb25Qa2c/DQo+ID4gPj4+Pj4NCj4gPiA+Pj4+PiAzLiBNb3ZlIFNwaUZ2 YlNlcnZpY2VYeXogb3V0IG9mIE1pblBsYXRmb3JtUGtnLg0KPiA+ID4+Pj4+ICAgICAgIDMuYS4g TWFrZSBhICJTUEkgZmxhc2giIGZlYXR1cmU/DQo+ID4gPj4+Pj4gICAgICAgMy5iLiBBbGxvdyB0 aGUgSW50ZWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmZWF0dXJlIHRvIGRlcGVuZCBvbg0KPiA+ ID4+Pj4+IFNwaUZsYXNoQ29tbW9uTGliIGRlZmluZWQgaW4gSW50ZWxTaWxpY29uUGtnLg0KPiA+ ID4+Pj4+DQo+ID4gPj4+Pj4gSW50ZWwgYm9hcmQgcGFja2FnZXMgY291bGQgdGhlbiB1c2UgdGhl IFNwaUZsYXNoQ29tbW9uTGliIGZyb20NCj4gPiA+Pj4+PiBJbnRlbFNpbGljb25Qa2cgKGEgZ2Vu ZXJhdGlvbiBzcGVjaWZpYyBpbnN0YW5jZSBjb3VsZCBiZSBjcmVhdGVkIGlmDQo+ID4gPj4+Pj4g bmVlZGVkKSBhbmQgdXNlIHRoZSBTcGlGdmJTZXJ2aWNlWHl6IGRyaXZlciBmcm9tIHRoZSAiU3Bp Rmxhc2giDQo+ID4gPj4gZmVhdHVyZS4NCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IExvb2sgZm9yd2Fy ZCB0byB5b3VyIHRob3VnaHRzIGFuZCBmZWVkYmFjay4NCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IFRo YW5rcywNCj4gPiA+Pj4+PiBNaWNoYWVsDQo+ID4gPj4+Pg0KPiA+ID4+Pj4NCj4gPiA+Pj4+DQo+ ID4gPj4+Pg0KPiA+ID4+Pj4NCj4gPiA+DQo+ID4gPg0KPiA+ID4gDQo+ID4gPg0KPiA+ID4NCg==