From dev-return-107438-archive-asf-public=cust-asf.ponee.io@kafka.apache.org Thu Sep 12 16:26:54 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by mx-eu-01.ponee.io (Postfix) with SMTP id 0DF44180651 for ; Thu, 12 Sep 2019 18:26:53 +0200 (CEST) Received: (qmail 8101 invoked by uid 500); 12 Sep 2019 16:26:52 -0000 Mailing-List: contact dev-help@kafka.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@kafka.apache.org Delivered-To: mailing list dev@kafka.apache.org Received: (qmail 8089 invoked by uid 99); 12 Sep 2019 16:26:52 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 12 Sep 2019 16:26:52 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id C3455180D05 for ; Thu, 12 Sep 2019 16:26:51 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -0.199 X-Spam-Level: X-Spam-Status: No, score=-0.199 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=disabled Authentication-Results: spamd3-us-west.apache.org (amavisd-new); dkim=pass (1024-bit key) header.d=ibi.com Received: from mx1-ec2-va.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id VV7wQXCp_7Ay for ; Thu, 12 Sep 2019 16:26:49 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=38.100.34.212; helo=ibigatef.ibi.com; envelope-from=clement_pellerin@ibi.com; receiver= Received: from ibigatef.ibi.com (ibigatef.ibi.com [38.100.34.212]) by mx1-ec2-va.apache.org (ASF Mail Server at mx1-ec2-va.apache.org) with ESMTPS id D172EBC509 for ; Thu, 12 Sep 2019 16:26:48 +0000 (UTC) Received: from ibigatef.ibi.com (127.0.0.1) id hf9osg0171so for ; Thu, 12 Sep 2019 12:26:42 -0400 (envelope-from ) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibi.com; s=netops; i=@ibi.com; h=Received:Received:Received:From:To: Subject:Thread-Topic:Thread-Index:Date:Message-ID:References: In-Reply-To:Accept-Language:Content-Language:Content-Type: Content-Transfer-Encoding:MIME-Version; bh=c8h5dk2NE0ktQdVKorWdm Aylf116WB9/I/aFtFlM3To=; b=iZkn104swBefFjYZ+TqSPIT28K/jpKz9OmuBg S/rToS2GBWNPNZC/7pOaI44aelqWZFEPiVbjOhiW3nA3BtGQy1u7BJskOPe4Hm9x /eBGSXGCimx1A5Gu43EnUp1jTrug6YnxU2MuxnpJtmgVdHZOsq71hkjQfjT2+Ut6 STyczs= Received: from mail.ibi.com ([172.30.176.77]) by ibigatef.ibi.com ([38.100.34.212]) (SonicWALL 9.0.6.2473 ) with ESMTPS (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256/256) id o201909121626420203855-18; Thu, 12 Sep 2019 12:26:42 -0400 Received: from IBIMAILD.ibi.com (2620:c2:c000:c085::73) by IBIMAILC.ibi.com (2620:c2:c000:c085::77) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 12 Sep 2019 12:26:42 -0400 Received: from IBIMAILD.ibi.com ([fe80::6cc8:c3ee:cf12:2704]) by IBIMAILD.ibi.com ([fe80::6cc8:c3ee:cf12:2704%12]) with mapi id 15.00.1395.000; Thu, 12 Sep 2019 12:26:41 -0400 From: "Pellerin, Clement" To: "dev@kafka.apache.org" Subject: RE: [DISCUSS] KIP-519: Make SSL context/engine configuration extensible Thread-Topic: [DISCUSS] KIP-519: Make SSL context/engine configuration extensible Thread-Index: AQHVZ13q/ZHQS1Hd3Eq5FYUIyPoY1qcktagAgAAgc/CAADHDEIAA1AUAgAB9iQCAAC2HgIAAq0kA//+/nbCAAOfmgIAAP6YAgABctICAAATKAP//vWXg Date: Thu, 12 Sep 2019 16:26:41 +0000 Message-ID: References: <4d29a2f0ea9047ba8ef05c9a412a11d4@IBIMAILD.ibi.com> <338d372484ac47b292f4a28b045de8b5@IBIMAILD.ibi.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [172.30.60.10] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Mlf-Version: 9.0.6.2473 X-Mlf-License: BSVKCAP_T X-Mlf-UniqueId: o201909121626420203855 SSdtIGNvbmZ1c2VkLiBDYW4geW91IGxhdW5jaCBhIHJlY29uZmlndXJhdGlvbiB3aXRob3V0IGEg Y29uZmlnIGNoYW5nZSBvciBub3Q/DQoNCklmIEkgdW5kZXJzdGFuZCB0aGUgdGVzdCBjYXNlIGNv cnJlY3RseSwgdGhlIGRlc2lnbiBwYXR0ZXJuIHRvIGltcGxlbWVudCBhIHJlY29uZmlndXJhYmxl IGV4dGVuc2lvbiBwb2ludCBpbiBLYWZrYSBpcyB0byBpbXBsZW1lbnQgdGhlIFJlY29uZmlndXJh YmxlIGludGVyZmFjZS4gVGhpcyBtZWFucyBTc2xFbmdpbmVGYWN0b3J5IHdvdWxkIGJlIGNyZWF0 ZWQgb25jZSBhbmQgbXV0YXRlIHdpdGggcmVjb25maWd1cmUuIFRoZXJlIGlzIG5vIENvbmZpZ0tl eSBjcmVhdGVkIGZvciB0aGUgY3VzdG9tIGNvbmZpZyBhbmQgdGhlcmVmb3JlIHRoZXJlIGlzIG5v IHZhbGlkYXRpb24gYnkgQ29uZmlnRGVmLg0KDQpPcHRpb25hbGx5LCB0byBleHBvc2UgdGhlIGJ1 aWx0LWluIHZhbGlkYXRpb24sIGl0IG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gY29uc2lkZXIgbWFr aW5nIENvbmZpZ0tleSBhIHB1YmxpYyBBUEkgYW5kIG1vdmUgYW4gaW5kaXZpZHVhbCBjb25maWcg cGFyc2UgZnJvbSBDb25maWdEZWYgdG8gQ29uZmlnS2V5LiBJdCB3b3VsZCBiZSBtb3JlIG9iamVj dCBvcmllbnRlZCBhbnl3YXkuDQoNCk9uZSBvZiB0aGUgdXNlIGNhc2Ugb2YgY3VzdG9tIGNvbmZp Z3MgaW4gU3NsRW5naW5lRmFjdG9yeSBpcyB0byByZW1vdmUgdGhlIG5lZWQgdG8gc3BlY2lmeSB0 aGUga2V5c3RvcmUgYW5kIHRydXN0c3RvcmUgbG9jYXRpb25zLiBUaGUgc3BlY2lhbCBoYW5kbGlu ZyB0byBkZXRlY3QgY2hhbmdlcyBpbiBrZXlzdG9yZS90cnVzdHN0b3JlIHNob3VsZCBiZSBwdXNo ZWQgdG8gRGVmYXVsdFNzbEVuZ2luZUZhY3RvcnkgYW5kIGFsbCBjYWxscyB0byByZWNvbmZpZ3Vy ZSBzaG91bGQgcmVhY2ggdGhlIFNzbEVuZ2luZUZhY3RvcnkgaW5zdGFuY2UuIEFtIEkgbWlzc2lu ZyBzb21ldGhpbmc/DQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBSYWppbmkg U2l2YXJhbSBbbWFpbHRvOnJhamluaXNpdmFyYW1AZ21haWwuY29tXSANClNlbnQ6IFRodXJzZGF5 LCBTZXB0ZW1iZXIgMTIsIDIwMTkgMTI6MDEgUE0NClRvOiBkZXYNClN1YmplY3Q6IFJlOiBbRElT Q1VTU10gS0lQLTUxOTogTWFrZSBTU0wgY29udGV4dC9lbmdpbmUgY29uZmlndXJhdGlvbiBleHRl bnNpYmxlDQoNCkNvcnJlY3Rpb24gb24gbXkgcHJldmlvdXMgZW1haWwuIEN1c3RvbSBpbXBsZW1l bnRhdGlvbnMgY2FuIHVzZSBBbHRlckNvbmZpZw0KcmVxdWVzdCB3aXRob3V0IGEgY29uZmlnIGNo YW5nZSBieSBpbmNsdWRpbmcgYHNzbC5rZXlzdG9yZS5sb2NhdGlvbmAgb3INCmBzc2wudHJ1c3Rz dG9yZS5sb2NhdGlvbmAgaW4gdGhlaXIgYHJlY29uZmlndXJhYmtlQ29uZmlncygpYC4gVGhpcyB3 aWxsDQp0cmlnZ2VyIHRoZSBzYW1lIGNvZGVwYXRoIGFzIHdlIHVzZSBmb3Iga2V5c3RvcmUgdXBk YXRlcyB3aGVuIHRoZSBmaWxlIGhhcw0KY2hhbmdlZC4NCg0KT24gVGh1LCBTZXAgMTIsIDIwMTkg YXQgNDo0MyBQTSBSYWppbmkgU2l2YXJhbSA8cmFqaW5pc2l2YXJhbUBnbWFpbC5jb20+DQp3cm90 ZToNCg0KPiBIaSBDbGVtZW50LA0KPg0KPiBLYWZrYSBkb2VzIHNwZWNpYWwgaGFuZGxpbmcgZm9y IGtleXN0b3JlL3RydXN0c3RvcmUgZmlsZSBjaGFuZ2VzIHdoZW4gYW4NCj4gQWx0ZXJDb25maWcg cmVxdWVzdCBpcyBwcm9jZXNzZWQsIGJ1dCB0aGF0IGlzIG5vdCBlYXN5IHRvIGV4dGVuZCB0byBj dXN0b20NCj4gY29uZmlncy4gSSB3YXMgdGhpbmtpbmcgd2UgY291bGQganVzdCBhZGQgYSBjdXN0 b20gY29uZmlnIHRvIHRyaWdnZXINCj4gcmVjb25maWd1cmF0aW9uLiBGb3IgZXhhbXBsZSwgYSBj b25maWcgbGlrZSBgbXkuY3VzdG9tLmtleXN0b3JlLnZlcnNpb25gIHRoYXQNCj4gaXMgaW5jcmVt ZW50ZWQgd2hlbiB0aGUgY3VzdG9tIGltcGxlbWVudGF0aW9uIGRldGVjdHMgYSBjaGFuZ2UgaW4g a2V5c3RvcmUuDQo+IEFuZCB0aGUgY3VzdG9tIGltcGxlbWVudGF0aW9uIHdvdWxkIGludm9rZSBh ZG1pbiBjbGllbnQgdG8gdXBkYXRlIGBteS5jdXN0b20ua2V5c3RvcmUudmVyc2lvbmAuDQo+IEth ZmthIHdvdWxkIGRvIHRoZSByZXN0IHRvIHJlY29uZmlndXJlIFNzbEZhY3RvcnkuIEFuZCB0aGUg Y3VzdG9tDQo+IGltcGxlbWVudGF0aW9uIGNhbiB0aGVuIGNyZWF0ZSB0aGUgbmV3IGJ1aWxkZXIu DQo+DQo+IEZvciBhbiBleGFtcGxlIG9mIGN1c3RvbSBjb25maWcgcmVjb25maWd1cmF0aW9uLCB0 aGlzIHRlc3QgbWF5IGJlIHVzZWZ1bDoNCj4gaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS9rYWZr YS9ibG9iL2QzNTU5ZjYyOGIyY2NiMjNhOWZhZjUzMTc5NjY3NTM3NmFjMDZhYmIvY29yZS9zcmMv dGVzdC9zY2FsYS9pbnRlZ3JhdGlvbi9rYWZrYS9zZXJ2ZXIvRHluYW1pY0Jyb2tlclJlY29uZmln dXJhdGlvblRlc3Quc2NhbGEjTDc5Mg0KPg0KPg0KPg0KPiBPbiBUaHUsIFNlcCAxMiwgMjAxOSBh dCAzOjI0IFBNIFBlbGxlcmluLCBDbGVtZW50IDwNCj4gQ2xlbWVudF9QZWxsZXJpbkBpYmkuY29t PiB3cm90ZToNCj4NCj4+IEZvciB0aGUgcHVzaCBub3RpZmljYXRpb24sIFJhamluaSBwcmVmZXJz IGlmIHRoZSB0cmlnZ2VyIHRvIHJlY29uZmlndXJlDQo+PiBjb21lcyBmcm9tIGFuIGFkbWluIGNs aWVudC4gSGUgc2F5cyB0aGUgYWRtaW4gY2xpZW50IGNhbiByZWNvbmZpZ3VyZSBldmVuDQo+PiB0 aG91Z2ggbm9uZSBvZiB0aGUgY29uZmlnIHZhbHVlcyBoYXZlIGNoYW5nZWQuIFRoaXMgYWxsb3dz IHlvdXIgY3VzdG9tIGltcGwNCj4+IHRvIGRpc2NvdmVyIG90aGVyIGNvbmRpdGlvbnMgdGhhdCBo YXZlIGNoYW5nZWQsIGZvciBleGFtcGxlIHRoZSBjb250ZW50cyBvZg0KPj4gdGhlIGtleXN0b3Jl Lg0KPj4NCj4+IEBSYWppbmksIGNhbiB5b3UgcG9pbnQgdXMgdG8gYW4gZXhpc3RpbmcgZXhhbXBs ZSBvZiBhIEthZmthIGV4dGVuc2lvbg0KPj4gcG9pbnQgdGhhdCBpbXBsZW1lbnRzIHJlY29uZmln dXJhYmxlIGN1c3RvbSBjb25maWdzLiBUaGlzIHdheSB3ZSBjb3VsZA0KPj4gc3R1ZHkgaXQgYW5k IGRvIHRoZSBzYW1lIHRoaW5nLiBDb25zaXN0ZW5jeSBpcyBnb29kLiBJdCB3b3VsZCBiZSBuaWNl IGlmDQo+PiB0aGVyZSB3YXMgYSBLSVAgdGhhdCBkZXNjcmliZXMgdGhhdCBkZXNpZ24gcGF0dGVy bi4NCj4+DQo+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4gRnJvbTogTWF1bGluIFZh c2F2YWRhIFttYWlsdG86bWF1bGluLnZhc2F2YWRhQGdtYWlsLmNvbV0NCj4+IFNlbnQ6IFRodXJz ZGF5LCBTZXB0ZW1iZXIgMTIsIDIwMTkgMjoyNCBBTQ0KPj4gVG86IGRldkBrYWZrYS5hcGFjaGUu b3JnDQo+PiBTdWJqZWN0OiBSZTogW0RJU0NVU1NdIEtJUC01MTk6IE1ha2UgU1NMIGNvbnRleHQv ZW5naW5lIGNvbmZpZ3VyYXRpb24NCj4+IGV4dGVuc2libGUNCj4+DQo+PiBUaGFua3MgQ2xlbWVu dCBhbmQgUmFqaW5pLiBMZXQgbWUgZGlnZXN0IHdoYXQgYm90aCBvZiB5b3Ugc2FpZC4gQ2xlYXJs eSBJDQo+PiBuZWVkIHRvIHVuZGVyc3RhbmQgbW9yZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbnMg LSBkeW5hbWljLCBjdXN0b20gZXRjLg0KPj4NCj4+IE9uIHRoZSAncHVzaCBub3RpZmljYXRpb24n IHF1ZXN0aW9uIENsZW1lbnQgYXNrZWQsDQo+PiBUaGUgd2F5IEkgc2VlIGlzIHNpbXBsZSAtIEth ZmthIGRlZmluZXMgdGhlIGludGVyZmFjZSBmb3INCj4+IFNzbEVuZ2luZUZhY3RvcnkuDQo+PiBJ bXBsZW1lbnRhdGlvbiBvZiB0aGF0IGludGVyZmFjZSBpcyBvd25lZCBieSB0aGUgS2Fma2Egb3Bl cmF0b3Igd2hvDQo+PiBjdXN0b21pemVkIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0IHVzIHNheSwg bXkgU3NsRW5naW5lRmFjdG9yeUltcGwgT05MWQ0KPj4gY3VzdG9taXplcyBsb2FkaW5nIG9mIGtl eXMvY2VydHMgd2hlcmUgaXQga25vd3Mgd2hlbiB0aGV5IGFyZSB1cGRhdGVkLiBIb3cNCj4+IGlz IEthZmthIGdvaW5nIHRvIGtub3cgdGhhdD8gWW91IHNhaWQgJ25leHQgdGltZSBpdCBsb2Fkcycg YnV0IGlmIHRoZXJlIGlzDQo+PiBOTyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMg bmVlZGVkIGJ5IG15IFNzbEVuZ2luZUZhY3RvcnlJbXBsLA0KPj4gdGhlcmUgd29uJ3QgYmUgYW55 IHRyaWdnZXIgY29taW5nIGZyb20gS2Fma2EgdG8gcmVjb25maWd1cmUgYW5kIFNzbEZhY3RvcnkN Cj4+IHdpbGwgbmV2ZXIgcmUtY3JlYXRlIG15IFNzbEVuZ2luZUZhY3RvcnlJbXBsIGNvZGUgd2hp Y2ggd2lsbCBoZWxwIEthZmthDQo+PiB1c2UNCj4+IG5ldyBrZXlzL2NlcnRzIGluIHRoZSBuZXh0 IGNhbGxzLiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgdGhpcyBtYWtlcyBteQ0KPj4gJ3B1c2gNCj4+ IG5vdGlmaWNhdGlvbicgbmVlZHMgY2xlYXJlci4NCj4+DQo+PiBUaGFua3MNCj4+IE1hdWxpbg0K Pj4NCj4+DQo+Pg0KPj4NCj4+DQo+Pg0KPj4gT24gV2VkLCBTZXAgMTEsIDIwMTkgYXQgMjozMSBQ TSBQZWxsZXJpbiwgQ2xlbWVudCA8DQo+PiBDbGVtZW50X1BlbGxlcmluQGliaS5jb20+DQo+PiB3 cm90ZToNCj4+DQo+PiA+IEluZGVlZCwgdGhpcyBpcyBhIGdlbmVyYWwgcHJvYmxlbSByZXF1aXJp bmcgYSBtb3JlIGdlbmVyYWwgc29sdXRpb24gdGhhbg0KPj4gPiBLSVAtNTE5LiBJJ20gZ2xhZCB0 aGVyZSB3YXMgd29yayBkb25lIG9uIHRoaXMgYWxyZWFkeS4NCj4+ID4NCj4+ID4gU28gY29uZmln Lm9yaWdpbmFscygpIHN0aWxsIGNvbnRhaW5zIHVua25vd24gY29uZmlncyBidXQgbm90aGluZyBo YXMNCj4+IGJlZW4NCj4+ID4gdmFsaWRhdGVkIGFuZCBjYXN0IHRvIHRoZSBwcm9wZXIgdHlwZS4N Cj4+ID4gSG93IGRvZXMgdmFsaWRhdGlvbiB3b3JrIGZvciBhbiBleHRlbnNpb24gcG9pbnQgdGhh dCByZWNlaXZlcw0KPj4gPiBjb25maWcub3JpZ2luYWxzKCk/IElzIHRoZXJlIGEgcHVibGljIHZh bGlkYXRvciBoZWxwZXIgdG8gaGFuZGxlIHRoaXM/DQo+PiA+IERvIHdlIG5lZWQgdG8gY3JlYXRl IENvbmZpZ0tleXMgaW4gdGhlIENvbmZpZ0RlZiBmb3IgY3VzdG9tIGNvbmZpZ3Mgb25seQ0KPj4g PiBrbm93biB0byBhIGN1c3RvbSBTc2xFbmdpbmVGYWN0b3J5IGltcGxlbWVudGF0aW9uPw0KPj4g PiBEbyB3ZSBuZWVkIHRvIGRlY2xhcmUgdGhlIHN0YW5kYXJkIFNTTCBjb25maWdzIGluIENvbmZp Z0RlZiBpZg0KPj4gU3NsRmFjdG9yeQ0KPj4gPiBuZWVkcyB0byByZXZhbGlkYXRlIHRoZW0gYW55 d2F5IGJlY2F1c2UgaXQgcmVjZWl2ZXMgY29uZmlnLm9yaWdpbmFscygpPw0KPj4gPiBJIGFzc3Vt ZSB0aGVyZSBpcyBzdWNoIGEgdGhpbmcgYXMgY29uZmlnLm9yaWdpbmFscygpIGFsc28gZm9yIGEN Cj4+ID4gcmVjb25maWd1cmUoKT8NCj4+ID4NCj4+ID4gSWYgd2UgaW1wbGVtZW50IEtJUC01MTkg YW5kIGxhdGVyIGNoYW5nZSBmcm9tIGNvbmZpZy52YWx1ZXMoKSB0bw0KPj4gPiBjb25maWcub3Jp Z2luYWxzKCksIHRoaXMgd2lsbCBhZmZlY3QgdGhlIGNvbnRyYWN0IGZvciB0aGUgY29uc3RydWN0 b3Igb2YNCj4+ID4gdGhlIFNzbEVuZ2luZUZhY3RvcnkuIFdlIG1pZ2h0IG5lZWQgdG8gYWRkIGN1 c3RvbSBjb25maWdzIHN1cHBvcnQgdG8NCj4+ID4gS0lQLTUxOSBvciBkZWxheSBLSVAtNTE5IHVu dGlsIHRoZSBjaGFuZ2UgdG8gY29uZmlnLm9yaWdpbmFscygpLg0KPj4gPg0KPj4gPg0KPj4gPiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4gPiBGcm9tOiBSYWppbmkgU2l2YXJhbSBbbWFp bHRvOnJhamluaXNpdmFyYW1AZ21haWwuY29tXQ0KPj4gPiBTZW50OiBXZWRuZXNkYXksIFNlcHRl bWJlciAxMSwgMjAxOSA0OjI1IFBNDQo+PiA+IFRvOiBkZXYNCj4+ID4gU3ViamVjdDogUmU6IFtE SVNDVVNTXSBLSVAtNTE5OiBNYWtlIFNTTCBjb250ZXh0L2VuZ2luZSBjb25maWd1cmF0aW9uDQo+ PiA+IGV4dGVuc2libGUNCj4+ID4NCj4+ID4gS2Fma2EgYWxyZWFkeSBoYXMgdGhlIG5vdGlvbiBv ZiBjdXN0b20gY29uZmlncy4gQW5kIHdlIHN1cHBvcnQNCj4+ID4gcmVjb25maWd1cmFibGUgY3Vz dG9tIGNvbmZpZ3MgZm9yIHNvbWUgaW50ZXJmYWNlcyBlLmcuIE1ldHJpY3NSZXBvcnRlci4NCj4+ IFdlDQo+PiA+IGFsc28gcmVjZW50bHkgYWRkZWQgY3VzdG9tIHJlY29uZmlndXJhYmxlIGNvbmZp Z3MgZm9yIEF1dGhvcml6ZXIgdW5kZXINCj4+ID4gS0lQLTUwNC4NCj4+ID4NCj4+ID4gVGhlIGlz c3VlIHdpdGggY3VzdG9tIGNvbmZpZ3MgZm9yIFNTTCBpcyBkZXNjcmliZWQgaW4NCj4+ID4gaHR0 cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9LQUZLQS03NTg4LiBXZSBjdXJyZW50 bHkgZG9uJ3QNCj4+IHBhc3MNCj4+ID4gaW4gY3VzdG9tIGNvbmZpZ3MgdG8gQ2hhbm5lbEJ1aWxk ZXJzLiBXZSBuZWVkIHRvIGZpeCB0aGlzLCBub3QganVzdCBmb3INCj4+IFNTTA0KPj4gPiBidXQg Zm9yIG90aGVyIHNlY3VyaXR5IHBsdWdpbnMgYXMgd2VsbC4gU28gaXQgbmVlZHMgdG8gYmUgYSBn ZW5lcmljDQo+PiA+IHNvbHV0aW9uLCBub3Qgc3BlY2lmaWMgdG8gS0lQLTUxOS4NCj4+ID4NCj4+ ID4gT25jZSBLQUZLQS03NTg4IGlzIGZpeGVkLCB0aGUgZXhpc3RpbmcgZHluYW1pYyByZWNvbmZp Z3VyYXRpb24NCj4+IG1lY2hhbmlzbSBpbg0KPj4gPiBicm9rZXJzIHdvdWxkIHNpbXBseSB3b3Jr LiBEeW5hbWljIGNvbmZpZ3Mgd29ya3MgZXhhY3RseSBpbiB0aGUgc2FtZSB3YXkNCj4+ID4gZm9y IGN1c3RvbSBjb25maWdzIGFzIGl0IGRvZXMgZm9yIG90aGVyIGNvbmZpZ3MuIFRoZSBsaXN0IG9m DQo+PiByZWNvbmZpZ3VyYWJsZQ0KPj4gPiBjb25maWdzIGlzIHJldHVybmVkIGJ5IHRoZSBpbXBs ZW1lbnRhdGlvbiBjbGFzcyBhbmQgdGhlIGNsYXNzIGdldHMNCj4+IG5vdGlmaWVkDQo+PiA+IHdo ZW4gYW55IG9mIHRob3NlIGNvbmZpZ3MgY2hhbmdlcy4gVGhpcyBpbmNsdWRlcw0KPj4gdmFsaWRh dGVSZWNvbmZpZ3VyYXRpb24oKQ0KPj4gPiBhcyB3ZWxsIHRoZSBhY3R1YWwgcmVjb25maWd1cmUo KS4NCj4+ID4NCj4+ID4gRm9yIFNTTCBhbG9uZSwgd2UgaGF2ZSBzcGVjaWFsIGhhbmRsaW5nIG9m IGR5bmFtaWMgY29uZmlncyB0byBlbmFibGUNCj4+ID4gcmVsb2FkaW5nIG9mIGtleXN0b3Jlcy90 cnVzdHN0b3JlcyB3aGVuIHRoZSBmaWxlIGNoYW5nZXMsIGV2ZW4gdGhvdWdoDQo+PiBub25lDQo+ PiA+IG9mIHRoZSBjb25maWcgdmFsdWVzIGhhdmUgY2hhbmdlZC4gUmVjb25maWd1cmF0aW9uIGlz IHRyaWdnZXJlZCBieSBhbg0KPj4gYWRtaW4NCj4+ID4gY2xpZW50IHJlcXVlc3QgdG8gYWx0ZXIg Y29uZmlncy4gSW4gdGhpcyBjYXNlLCBub25lIG9mIHRoZSBhY3R1YWwNCj4+IGNvbmZpZ3MNCj4+ ID4gbWF5IGhhdmUgY2hhbmdlZCwgYnV0IHdlIGNoZWNrIGlmIHRoZSBmaWxlIGhhcyBjaGFuZ2Vk LiBUaGlzIGlzDQo+PiBjdXJyZW50bHkNCj4+ID4gZG9uZSBvbmx5IGZvciB0aGUgc3RhbmRhcmQg a2V5c3RvcmUvdHJ1c3RzdG9yZSBjb25maWdzLiBXaXRoIEtJUC01MTksIEkNCj4+ID4gZ3Vlc3Mg d2Ugd2FudCB0aGUgY3VzdG9tIFNzbEVuZ2luZUZhY3RvcnkgdG8gYmUgYWJsZSB0byBkZWNpZGUg d2hldGhlcg0KPj4gPiByZWNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQuIFRoZSBzaW1wbGVzdCB3 YXkgdG8gYWNoaWV2ZSB0aGlzIHdvdWxkIGJlDQo+PiB0bw0KPj4gPiBoYXZlIGEgY3VzdG9tIGNv bmZpZyB0aGF0IGlzIHVwZGF0ZWQgd2hlbiByZWNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQuDQo+ PiBJIGFtDQo+PiA+IG5vdCBzdXJlIHdlIG5lZWQgYSBzZXBhcmF0ZSBtZWNoYW5pc20gdG8gdHJp Z2dlciByZWNvbmZpZ3VyYXRpb24gdGhhdA0KPj4gPiBkb2Vzbid0IHJlbHkgb24gYWRtaW4gY2xp ZW50cyBzaW5jZSBhZG1pbiBjbGllbnRzIHByb3ZpZGUgdXNlZnVsIGxvZ2dpbmcNCj4+ID4gYW5k IGF1ZGl0YWJpbGl0eS4NCj4+ID4NCj4+ID4gUmVnYXJkcywNCj4+ID4NCj4+ID4gUmFqaW5pDQo+ PiA+DQo+PiA+IE9uIFdlZCwgU2VwIDExLCAyMDE5IGF0IDQ6MTMgUE0gUGVsbGVyaW4sIENsZW1l bnQgPA0KPj4gPiBDbGVtZW50X1BlbGxlcmluQGliaS5jb20+DQo+PiA+IHdyb3RlOg0KPj4gPg0K Pj4gPiA+IEknbSBzb3JyeSBpZiBJIGRpdmVydCB0aGUgZGlzY3Vzc2lvbiwgYnV0IHdpdGhvdXQg dGhpcyBpc3N1ZSwgaXQgd291bGQNCj4+ID4gPiBoYXZlIGJlZW4gcHJldHR5IHRyaXZpYWwgdG8g dXBkYXRlIEtJUC0zODMgdG8gZ28gYXMgZmFyIGFzIHlvdSBkaWQuIEkNCj4+IGFtDQo+PiA+ID4g YWxzbyBoYXBweSB0byBnZXQgYSBkaXNjdXNzaW9uIGdvaW5nLCB0aGUgS0lQLTM4MyB0aHJlYWQg d2FzIGENCj4+IGRlc29sYXRlDQo+PiA+ID4gcGxhY2UuDQo+PiA+ID4NCj4+ID4gPiBLYWZrYSBu ZWVkcyB0byBrbm93IGFib3V0IGN1c3RvbSBjb25maWdzIGJlY2F1c2UgaXQgdmFsaWRhdGVzIHRo ZQ0KPj4gY29uZmlncw0KPj4gPiA+IGJlZm9yZSBpdCBwYXNzZXMgdGhlbSB0byAocmUpY29uZmln dXJlLiBVbmtub3duIGNvbmZpZ3MgYXJlIHNpbGVudGx5DQo+PiA+ID4gcmVtb3ZlZCBieSBDb25m aWdEZWYuIFdlIGNvdWxkIGtlZXAgdW5rbm93biBjb25maWdzIGFzIHN0cmluZ3Mgd2l0aG91dA0K Pj4gPiA+IHZhbGlkYXRpbmcgdGhlbSBpbiBDb25maWdEZWYsIGJ1dCBJIGRvbid0IGtub3cgaWYg dGhlIEthZmthIGNvbW11bml0eQ0KPj4gPiB3b3VsZA0KPj4gPiA+IGFjY2VwdCB0aGlzIHdlYWtl ciB2YWxpZGF0aW9uLg0KPj4gPiA+DQo+PiA+ID4gSXQgYXBwZWFycyB3ZSBhcmUgdHJ5aW5nIHRv IGludmVudCB0aGUgbm90aW9uIG9mIGEgbWV0YSBjb25maWcuDQo+PiBBbnl3YXksIEkNCj4+ID4g PiB0aGluayB3ZSBoYXZlIHNob3duIGFza2luZyBhbiBpbnN0YW5jZSBvZiBTc2xFbmdpbmVGYWN0 b3J5IHRvDQo+PiBjb250cmlidXRlDQo+PiA+IHRvDQo+PiA+ID4gQ29uZmlnRGVmIGlzIHdheSB0 b28gbGF0ZS4NCj4+ID4gPg0KPj4gPiA+IEZvciB5b3VyIHB1c2ggbm90aWZpY2F0aW9uLCB3b3Vs ZCBpdCBiZSBzaW1wbGVyIHRvIGp1c3QgbGV0IHlvdXINCj4+ID4gPiBTc2xFbmdpbmVGYWN0b3J5 IG5vdGljZSB0aGUgY2hhbmdlIGFuZCBtYWtlIGl0IGVmZmVjdGl2ZSB0aGUgbmV4dA0KPj4gdGlt ZSBpdA0KPj4gPiA+IGlzIGNhbGxlZC4gU3NsRmFjdG9yeSB3b3VsZCBub3QgY2FjaGUgdGhlIFNz bEVuZ2luZSBhbmQgYWx3YXlzIGFzaw0KPj4gPiA+IFNzbEVuZ2luZUZhY3RvcnkgZm9yIGl0LiBZ b3UgZG9uJ3QgZXZlbiBuZWVkIGFuIGlubmVyIHRocmVhZCBpZg0KPj4gPiA+IFNzbEVuZ2luZUZh Y3RvcnkgY2hlY2tzIGZvciBhIGNoYW5nZSB3aGVuIGl0IGlzIGNhbGxlZC4NCj4+IFNzbEVuZ2lu ZUZhY3RvcnkNCj4+ID4gPiB3b3VsZCBubyBsb25nZXIgYmUgaW1tdXRhYmxlLCBzbyBtYXliZSBp dCBpcyB3b3J0aCByZWNvbnNpZGVyaW5nIGhvdw0KPj4gPiA+IHJlY29uZmlndXJlIHdvcmtzIGZv ciBpdC4NCj4+ID4gPg0KPj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+PiA+ID4g RnJvbTogTWF1bGluIFZhc2F2YWRhIFttYWlsdG86bWF1bGluLnZhc2F2YWRhQGdtYWlsLmNvbV0N Cj4+ID4gPiBTZW50OiBXZWRuZXNkYXksIFNlcHRlbWJlciAxMSwgMjAxOSAzOjI5IEFNDQo+PiA+ ID4gVG86IGRldkBrYWZrYS5hcGFjaGUub3JnDQo+PiA+ID4gU3ViamVjdDogUmU6IFtESVNDVVNT XSBLSVAtNTE5OiBNYWtlIFNTTCBjb250ZXh0L2VuZ2luZSBjb25maWd1cmF0aW9uDQo+PiA+ID4g ZXh0ZW5zaWJsZQ0KPj4gPiA+DQo+PiA+ID4gSGkgYWxsLA0KPj4gPiA+DQo+PiA+ID4gU2luY2Ug dGhlICJjdXN0b20gY29uZmlnIiBzZWVtcyB0aGUgbWFpbiB0b3BpYyBvZiBpbnRlcmVzdCBsZXQg dXMgdGFsaw0KPj4gPiA+IGFib3V0IGl0Lg0KPj4gPiA+DQo+PiA+ID4gMS4gSSB3YW50IHRvIGNv bmZpcm0gdGhhdCBJIGludGVycHJldCB0aGUgZGVmaW5pdGlvbiBvZiAnY3VzdG9tDQo+PiBjb25m aWcgb2YNCj4+ID4gPiBTc2xFbmdpbmVGYWN0b3J5JyB0aGUgc2FtZSB3YXkgQ2xlbWVudCBpcyBz dWdnZXN0aW5nIC0gImEgY29uZmlnIHRoYXQNCj4+ID4gZG9lcw0KPj4gPiA+IG5vdCBleGlzdCBp biBLYWZrYSBidXQgaXMgc3BlY2lmaWVkIGJ5IGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIG9mDQo+ PiA+ID4gU3NsRW5naW5lRmFjdG9yeSIuICBJZiB0aGVyZSBpcyBhIGRpc2FncmVlbWVudCB0byB0 aGF0IHdlIGhhdmUgdG8NCj4+IGJyaW5nDQo+PiA+IGl0DQo+PiA+ID4gdXAgaGVyZSBzb29uZXIu DQo+PiA+ID4NCj4+ID4gPiAyLiBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgaXQgYW5kIEkgcXVl c3Rpb24gd2h5IHdlIGFyZSB0cnlpbmcgdG8NCj4+IG1ha2UgYQ0KPj4gPiA+IGN1c3RvbSBjb25m aWcgYSBmaXJzdCBjbGFzcyBjaXRpemVuIGluIHN0YW5kYXJkIGNvbmZpZz8NCj4+ID4gPiBUaGUg cmVhc29uaW5nIGZvciB0aGF0IHF1ZXN0aW9uIGlzLQ0KPj4gPiA+IEthZmthIHdhbnRzIHRvIGRl bGVnYXRlIGNyZWF0aW9uIG9mIFNTTEVuZ2luZSB0byBhIGNsYXNzIHdoaWNoIGlzDQo+PiAibm90 Ig0KPj4gPiA+IHBhcnQgb2YgS2Fma2EncyBkaXN0cmlidXRpb24uIFNpbmNlIHRoZSBpbnRlcmZh Y2UgZm9yIFNTTEVuZ2luZQ0KPj4gY3JlYXRvcg0KPj4gPiA+IHdpbGwgYmUgZGVmaW5lZCBieSB0 aGUgcHVibGljIG1ldGhvZCBvZiBjcmVhdGVTU0xFbmdpbmUoKSwgd2h5IHdvdWxkDQo+PiA+IEth ZmthDQo+PiA+ID4gY2FyZSB3aGF0IGRvZXMgdGhlIGltcGxlbWVudGF0aW9uIGRvIG90aGVyIHRo YW4gZnVsZmlsbGluZyB0aGUNCj4+IGNvbnRyYWN0DQo+PiA+IG9mDQo+PiA+ID4gY3JlYXRpb24g b2YgU1NMRW5naW5lLiBUaGUgaW1wbGVtZW50YXRpb24gY2FuIHVzZSBhbnkgc3BlY2lhbCBjb25m aWdzDQo+PiA+IGkuZS4NCj4+ID4gPiBjb25maWdzIGNvbWluZyBmcm9tIGlucHV0IE1hcCBPUiBj b25maWdzIGRlZmluZWQgaW4gYSBuZXcgZmlsZSBvbmx5DQo+PiBrbm93bg0KPj4gPiA+IHRvIGl0 c2VsZi4gTWFraW5nIHRoZSBjb25maWdzIHBhcnQgb2YgdGhlIGludGVyZmFjZSBjb250cmFjdCBp biBhbnkNCj4+IHdheQ0KPj4gPiBpcw0KPj4gPiA+IG5vdCBuZWNlc3NhcnkuIFRoaXMgd2F5IHdl IGtlZXAgaXQgc2ltcGxlIGFuZCBzdHJhaWdodGZvcndhcmQuDQo+PiA+ID4NCj4+ID4gPiAzLiBO b3csIDJuZCBwb2ludCByYWlzZXMgYSBxdWVzdGlvbiAtIGlmIHdlIGZvbGxvdyB0aGF0IHN1Z2dl c3Rpb24gLQ0KPj4gaG93DQo+PiA+ID4gY2FuIHdlIGV2ZXIgcmUtY3JlYXRlIHRoZSBTU0xFbmdp bmVGYWN0b3J5IG9iamVjdCBhbmQgYWxsb3cgbmV3DQo+PiBvYmplY3QgdG8NCj4+ID4gPiBiZSBj cmVhdGVkIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBUaGF0 IGlzIGENCj4+IHZhbGlkDQo+PiA+ID4gcXVlc3Rpb24uIElmIHlvdSBub3RpY2VkIGluIHRoZSBL SVAgc2VjdGlvbiB0aXRsZWQgIk90aGVyIGNoYWxsZW5nZSINCj4+IC0gd2UNCj4+ID4gPiBkbyBo YXZlIHNjZW5hcmlvIHdoZXJlIHRoZSBTc2xFbmdpbmVGYWN0b3J5IGltcGxlbWVudGF0aW9uIE9O TFkga25vd3MNCj4+ID4gdGhhdA0KPj4gPiA+IHNvbWV0aGluZyBjaGFuZ2VkIC0gZXhhbXBsZTog a2V5c3RvcmUgZ290IHVwZGF0ZWQgYnkgYSBsb2NhbCBkYWVtb24NCj4+ID4gcHJvY2Vzcw0KPj4g PiA+IG9ubHkga25vd24gdG8gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBUaGlzIG1lYW5z IHdlIGhhdmUgYSBuZWVkDQo+PiBvZg0KPj4gPiA+ICJwdXNoIG5vdGlmaWNhdGlvbiIgZnJvbSB0 aGUgU3NsRW5naW5lRmFjdG9yeSdzIGltcGxlbWVudGF0aW9uIHRvIHRoZQ0KPj4gPiA+IFNzbEZh Y3RvcnkgYWN0dWFsbHkuIEkgZmVlbCBpZiB3ZSBidWlsZCB0aGUgInB1c2ggbm90aWZpY2F0aW9u IiB2aWENCj4+ID4gYWRkaW5nDQo+PiA+ID4gYSBtZXRob2QgaW4gdGhlIGludGVyZmFjZSBhcyAi cHVibGljIHZvaWQNCj4+ID4gPiByZWdpc3RlclJlY29uZmlndXJhYmxlTGlzdGVuZXIoUmVjb25m aWd1cmFibGUgcikiIGFuZCBtYWtlIFNzbEZhY3RvcnkNCj4+ID4gPiByZWdpc3RlciBpdHNlbGYg d2l0aCB0aGUgU3NsRW5naW5lRmFjdG9yeSdzIGltcGwgY2xhc3MsIHdlIGNhbiB0cmlnZ2VyDQo+ PiA+IHRoZQ0KPj4gPiA+IHJlY29uZmlndXJhdGlvbiBvZiBTc2xFbmdpbmVGYWN0b3J5IGltcGxl bWVudGF0aW9uIGJhc2VkIG9uIGl0cyBvd24NCj4+IHRlcm1zDQo+PiA+ID4gYW5kIGNvbmRpdGlv bnMgd2l0aG91dCBnZXR0aW5nIGludG8gbWFraW5nIGN1c3RvbSBjb25maWdzIGNvbXBsaWNhdGVk Lg0KPj4gPiA+DQo+PiA+ID4gSSBhbSBqdXN0IHRoaW5raW5nIG91dCBsb3VkIGhlcmUgYW5kIGV4 cHJlc3NpbmcgbXkgb3BpbmlvbiBub3QgdG8NCj4+IGF2b2lkDQo+PiA+ID4gYWRkcmVzc2luZyBj dXN0b20gY29uZmlncyBCVVQgd2hhdCBJIGdlbnVpbmVseSBiZWxpZXZlIG1pZ2h0IGJlIGENCj4+ IGJldHRlcg0KPj4gPiA+IGFwcHJvYWNoLg0KPj4gPiA+DQo+PiA+ID4gVGhhbmtzDQo+PiA+ID4g TWF1bGluDQo+PiA+ID4NCj4+ID4gPg0KPj4gPiA+DQo+PiA+ID4NCj4+ID4gPg0KPj4gPiA+DQo+ PiA+ID4NCj4+ID4gPg0KPj4gPiA+DQo+PiA+ID4NCj4+ID4gPg0KPj4gPiA+DQo+PiA+ID4NCj4+ ID4gPg0KPj4gPiA+DQo+PiA+ID4NCj4+ID4gPg0KPj4gPiA+DQo+PiA+ID4NCj4+ID4gPiBPbiBU dWUsIFNlcCAxMCwgMjAxOSBhdCA5OjA2IFBNIFBlbGxlcmluLCBDbGVtZW50IDwNCj4+ID4gPiBD bGVtZW50X1BlbGxlcmluQGliaS5jb20+DQo+PiA+ID4gd3JvdGU6DQo+PiA+ID4NCj4+ID4gPiA+ IFJlZ2FyZGluZyB3aGF0IEkgbGFiZWxlZCB0aGUgc2ltcGxlc3Qgc29sdXRpb24gYmVsb3csIFNz bENvbmZpZ3MNCj4+IGNvdWxkDQo+PiA+ID4gPiBpbnN0YW50aWF0ZSB0aGUgY3VzdG9tIGludGVy ZmFjZSBvbmx5IGlmIHRoZSB5ZXQgdG8gYmUgdmFsaWRhdGVkDQo+PiA+IGNvbmZpZ3MNCj4+ID4g PiA+IHdlcmUgcGFzc2VkIGluIHRvIHRoZSBjYWxsIHRvIGdldCB0aGUgbGlzdCBvZiBrbm93biBT U0wgY29uZmlncy4NCj4+ID4gPiA+DQo+PiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPj4gPiA+ID4gRnJvbTogUGVsbGVyaW4sIENsZW1lbnQNCj4+ID4gPiA+IFNlbnQ6IFR1ZXNk YXksIFNlcHRlbWJlciAxMCwgMjAxOSAxMTozNiBBTQ0KPj4gPiA+ID4gVG86IGRldkBrYWZrYS5h cGFjaGUub3JnDQo+PiA+ID4gPiBTdWJqZWN0OiBbRVhURVJOQUxdUkU6IFtESVNDVVNTXSBLSVAt NTE5OiBNYWtlIFNTTCBjb250ZXh0L2VuZ2luZQ0KPj4gPiA+ID4gY29uZmlndXJhdGlvbiBleHRl bnNpYmxlDQo+PiA+ID4gPg0KPj4gPiA+ID4gQW5vdGhlciBzb2x1dGlvbiBjb3VsZCBiZSBhIG5l dyBzdGFuZGFyZCBzc2wgY29uZmlnIHRoYXQgaG9sZHMgYQ0KPj4gbGlzdA0KPj4gPiBvZg0KPj4g PiA+ID4gZXh0cmEgY3VzdG9tIGNvbmZpZ3MgdG8gYWNjZXB0Lg0KPj4gPiA+ID4gVXNpbmcgYSBj dXN0b20gU3NsRW5naW5lRmFjdG9yeSB3aXRoIGN1c3RvbSBjb25maWdzIHdvdWxkIHJlcXVpcmUN Cj4+ID4gc2V0dGluZw0KPj4gPiA+ID4gdHdvIGNvbmZpZ3MsIG9uZSBmb3IgdGhlIGNsYXNzIG5h bWUgYW5kIGFub3RoZXIgZm9yIHRoZSBsaXN0IG9mDQo+PiBjdXN0b20NCj4+ID4gPiA+IGNvbmZp Z3MuDQo+PiA+ID4gPiBJbiBTc2xDb25maWdzLCB3ZSBzZWUgdGhhdCBkZWNsYXJpbmcgYSBzaW5n bGUgY29uZmlnIHRha2VzIDUNCj4+IHZhbHVlcywgc28NCj4+ID4gPiA+IEknbSBub3Qgc3VyZSBo b3cgaXQgd291bGQgd29yayBleGFjdGx5Lg0KPj4gPiA+ID4NCj4+ID4gPiA+IFdlIGNvdWxkIGFs c28gZGVjbGFyZSBhIG5ldyBpbnRlcmZhY2UgdG8gcmV0dXJuIHRoZSBsaXN0IG9mIGN1c3RvbQ0K Pj4gc3NsDQo+PiA+ID4gPiBjb25maWdzIGFuZCB0aGUgZXh0cmEgc3RhbmRhcmQgc3NsIGNvbmZp ZyBJJ20gcHJvcG9zaW5nIGhvbGRzIHRoZQ0KPj4gbmFtZQ0KPj4gPiBvZg0KPj4gPiA+ID4gdGhl IGltcGxlbWVudGF0aW9uIGNsYXNzIGluc3RlYWQuIFRoZSByZWFzb24gYSBkaWZmZXJlbnQgaW50 ZXJmYWNlDQo+PiBpcw0KPj4gPiA+ID4gbmVlZGVkIGlzIGJlY2F1c2UgaXQgd291bGQgYmUgaW5z dGFudGlhdGVkIGJ5IFNzbENvbmZpZ3MsIG5vdA0KPj4gPiBTc2xGYWN0b3J5Lg0KPj4gPiA+ID4g VGhpcyBzZWVtcyB0aGUgc2ltcGxlc3Qgc29sdXRpb24uDQo+PiA+ID4gPg0KPj4gPiA+ID4gQW55 d2F5LCB0aGUgcG9pbnQgb2YgdGhpcyBleGVyY2lzZSBpcyB0byBwcm92ZSBhbiBhY2NlcHRhYmxl DQo+PiBzb2x1dGlvbg0KPj4gPiBmb3INCj4+ID4gPiA+IGN1c3RvbSBjb25maWdzIGlzIG5vdCBh ZmZlY3RpbmcgdGhlIHB1YmxpYyBBUEkgaW4gS0lQLTUxOS4NCj4+ID4gPiA+DQo+PiA+ID4gPg0K Pj4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+ID4gPiA+IEZyb206IFBlbGxl cmluLCBDbGVtZW50DQo+PiA+ID4gPiBTZW50OiBUdWVzZGF5LCBTZXB0ZW1iZXIgMTAsIDIwMTkg OTozNSBBTQ0KPj4gPiA+ID4gVG86IGRldkBrYWZrYS5hcGFjaGUub3JnDQo+PiA+ID4gPiBTdWJq ZWN0OiBbRVhURVJOQUxdUkU6IFtESVNDVVNTXSBLSVAtNTE5OiBNYWtlIFNTTCBjb250ZXh0L2Vu Z2luZQ0KPj4gPiA+ID4gY29uZmlndXJhdGlvbiBleHRlbnNpYmxlDQo+PiA+ID4gPg0KPj4gPiA+ ID4gQ3VzdG9tIGNvbmZpZyBpcyBhIHRlcm0gSSBpbnZlbnRlZCB0byBtZWFuIGEgY29uZmlnIHRo YXQgZG9lcyBub3QNCj4+IGV4aXN0DQo+PiA+ID4gaW4NCj4+ID4gPiA+IEthZmthIGJ1dCBpcyBz cGVjaWZpZWQgYnkgYSBjdXN0b20gaW1wbGVtZW50YXRpb24gb2YNCj4+IFNzbEVuZ2luZUZhY3Rv cnkuDQo+PiA+ID4gPiBUaGUgcHJvYmxlbSB3aXRoIGN1c3RvbSBjb25maWdzIChhcyBJIHJlbWVt YmVyIGl0KSBpcyB0aGF0IHRoZSBsaXN0DQo+PiBvZg0KPj4gPiA+ID4gY29uZmlncyBpcyBzdGF0 aWMgaW4gU3NsQ29uZmlncyBhbmQgY29uZmlnIG5hbWVzIGFyZSBjaGVja2VkIGJlZm9yZQ0KPj4g PiA+ID4gU3NsRmFjdG9yeSBpcyBjcmVhdGVkLg0KPj4gPiA+ID4gPT0+IFlvdSBtdXN0IHNvbHZl IHRoaXMgcHJvYmxlbSBiZWNhdXNlIHRoYXQgaXMgd2hhdCBraWxsZWQgS0lQLTM4Mw0KPj4gYW5k DQo+PiA+ID4gPiB0aGVyZWZvcmUgaXMgdGhlIHNvbGUgcmVhc29uIHdoeSBLSVAtNTE5IGV4aXN0 cy4NCj4+ID4gPiA+ID09PiBZb3VyIEtJUCBkb2VzIG5vdCBoYXZlIHRvIGltcGxlbWVudCB0aGUg c29sdXRpb24gc2luY2UgaXQgY2FuIGJlDQo+PiA+IGRvbmUNCj4+ID4gPiA+IGluIGEgZnV0dXJl IEtJUCwgYnV0IHlvdXIgS0lQIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBzb2x1dGlvbg0K Pj4gPiBmb3VuZC4NCj4+ID4gPiA+ID09PiBBIG1ldGhvZCB0byByZXR1cm4gdGhlIGxpc3Qgb2Yg Y29uZmlncyB3b3VsZCBoZWxwLiBUaGlzIGNhbm5vdA0KPj4gYmUgYQ0KPj4gPiA+ID4gc3RhdGlj IG1ldGhvZCBpbiB0aGUgaW50ZXJmYWNlIHNpbmNlIGl0IGNhbm5vdCBiZSBvdmVycmlkZGVuLg0K Pj4gPiA+ID4gPT0+IFlvdSBjb3VsZCByZXF1aXJlIGEgc3RhdGljIG1ldGhvZCBpbiB0aGUgaW1w bGVtZW50YXRpb24gY2xhc3MgYnkNCj4+ID4gPiA+IGNvbnZlbnRpb24sIGp1c3QgbGlrZSB0aGUg Y29uc3RydWN0b3IgeW91IHJlcXVpcmUuDQo+PiA+ID4gPg0KPj4gPiA+ID4gVGhpcyBlbWFpbCBk aWQgbm90IG9yaWdpbmF0ZSBmcm9tIGluc2lkZSBJbmZvcm1hdGlvbiBCdWlsZGVycy4NCj4+ID4g PiA+DQo+PiA+ID4NCj4+ID4NCj4+DQo+DQo=