From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Cohen, Haim" Subject: RE: [intel-sgx-kernel-dev] [PATCH 08/10] kvm: vmx: add guest's IA32_SGXLEPUBKEYHASHn runtime switch support Date: Wed, 7 Jun 2017 14:45:24 +0000 Message-ID: <667D753FABC9AE4EAB23F34C66393FC569CD8285@fmsmsx117.amr.corp.intel.com> References: <20170508052434.3627-1-kai.huang@linux.intel.com> <20170508052434.3627-9-kai.huang@linux.intel.com> <58dcdb2d-6894-b0a3-8d6f-2ab752fd6d22@linux.intel.com> <6ab7ec4e-e0fa-af47-11b2-f26edcb088fb@linux.intel.com> <596dc1ad-eac7-798d-72e5-665eb7f3f2e4@linux.intel.com> <0b4697b9-0976-c8ad-e26f-4ff683318486@linux.intel.com> <90924786-c132-524e-177f-7af582d49c85@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Kai Huang , Paolo Bonzini , Radim Krcmar , kvm list , "intel-sgx-kernel-dev@lists.01.org" , Jarkko Sakkinen , "Cohen, Haim" To: "Huang, Kai" , Andy Lutomirski Return-path: Received: from mga14.intel.com ([192.55.52.115]:31920 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751382AbdFGOp1 (ORCPT ); Wed, 7 Jun 2017 10:45:27 -0400 In-Reply-To: <90924786-c132-524e-177f-7af582d49c85@linux.intel.com> Content-Language: en-US Sender: kvm-owner@vger.kernel.org List-ID: T24gNi82LzIwMTcgNjo1MiBQTSwgSHVhbmcsIEthaSB3cm90ZToNCj5PbiA2LzcvMjAxNyA5OjIy IEFNLCBBbmR5IEx1dG9taXJza2kgd3JvdGU6DQo+PiBPbiBUdWUsIEp1biA2LCAyMDE3IGF0IDE6 NTIgUE0sIEh1YW5nLCBLYWkgPGthaS5odWFuZ0BsaW51eC5pbnRlbC5jb20+IHdyb3RlOg0KPj4+ DQo+Pj4NCj4+PiBPbiA1LzE4LzIwMTcgNzo0NSBQTSwgSHVhbmcsIEthaSB3cm90ZToNCj4+Pj4N Cj4+Pj4NCj4+Pj4NCj4+Pj4gT24gNS8xNy8yMDE3IDEyOjA5IFBNLCBBbmR5IEx1dG9taXJza2kg d3JvdGU6DQo+Pj4+Pg0KPj4+Pj4gT24gTW9uLCBNYXkgMTUsIDIwMTcgYXQgNTo0OCBQTSwgSHVh bmcsIEthaQ0KPj4+Pj4gPGthaS5odWFuZ0BsaW51eC5pbnRlbC5jb20+DQo+Pj4+PiB3cm90ZToN Cj4+Pj4+Pg0KPj4+Pj4+DQo+Pj4+Pj4NCj4+Pj4+PiBPbiA1LzEyLzIwMTcgNjoxMSBQTSwgQW5k eSBMdXRvbWlyc2tpIHdyb3RlOg0KPj4+Pj4+Pg0KPj4+Pj4+Pg0KPj4+Pj4+PiBPbiBUaHUsIE1h eSAxMSwgMjAxNyBhdCA5OjU2IFBNLCBIdWFuZywgS2FpDQo+Pj4+Pj4+IDxrYWkuaHVhbmdAbGlu dXguaW50ZWwuY29tPg0KPj4+Pj4+PiB3cm90ZToNCj4+Pj4+Pj4+DQo+Pj4+Pj4+Pg0KPj4+Pj4+ Pj4gSSBhbSBub3Qgc3VyZSB3aGV0aGVyIHRoZSBjb3N0IG9mIHdyaXRpbmcgdG8gNCBNU1JzIHdv dWxkIGJlDQo+Pj4+Pj4+PiAqZXh0cmVtZWx5Kg0KPj4+Pj4+Pj4gc2xvdywgYXMgd2hlbiB2Y3B1 IGlzIHNjaGVkdWxlIGluLCBLVk0gaXMgYWxyZWFkeSBkb2luZw0KPj4+Pj4+Pj4gdm1jc19sb2Fk LCB3cml0aW5nIHRvIHNldmVyYWwgTVNScywgZXRjLg0KPj4+Pj4+Pg0KPj4+Pj4+Pg0KPj4+Pj4+ Pg0KPj4+Pj4+PiBJJ20gc3BlY3VsYXRpbmcgdGhhdCB0aGVzZSBNU1JzIG1heSBiZSByYXRoZXIg dW5vcHRpbWl6ZWQgYW5kIGhlbmNlDQo+Pj4+Pj4+IHVudXN1YWx5IHNsb3cuDQo+Pj4+Pj4+DQo+ Pj4+Pj4+Pg0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gSGF2ZSBhIHBlcmNwdSB2YXJpYWJsZSB0aGF0 IHN0b3JlcyB0aGUgY3VycmVudCBTR1hMRVBVQktFWUhBU0gNCj5hbG9uZw0KPj4+Pj4+Pj4+IHdp dGggd2hhdGV2ZXIgbG9jayBpcyBuZWVkZWQgKHByb2JhYmx5IGp1c3QgYSBtdXRleCkuICBVc2Vy cyBvZiBFSU5JVA0KPj4+Pj4+Pj4+IHdpbGwgdGFrZSB0aGUgbXV0ZXgsIGNvbXBhcmUgdGhlIHBl cmNwdSB2YXJpYWJsZSB0byB0aGUgZGVzaXJlZA0KPj4+Pj4+Pj4+IHZhbHVlLA0KPj4+Pj4+Pj4+ IGFuZCwgaWYgaXQncyBkaWZmZXJlbnQsIGRvIFdSTVNSIGFuZCB1cGRhdGUgdGhlIHBlcmNwdSB2 YXJpYWJsZS4NCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IEtWTSB3aWxsIGltcGxlbWVudCB3cml0ZXMg dG8gU0dYTEVQVUJLRVlIQVNIIGJ5IHVwZGF0aW5nIGl0cw0KPj4+Pj4+Pj4+IGluLW1lbW9yeQ0K Pj4+Pj4+Pj4+IHN0YXRlIGJ1dCAqbm90KiBjaGFuZ2luZyB0aGUgTVNScy4gIEtWTSB3aWxsIHRy YXAgYW5kIGVtdWxhdGUgRUlOSVQNCj4+Pj4+Pj4+PiB0bw0KPj4+Pj4+Pj4+IHN1cHBvcnQgdGhl IHNhbWUgaGFuZGxpbmcgYXMgdGhlIGhvc3QuICBUaGVyZSBpcyBubyBhY3Rpb24gcmVxdWlyZWQN Cj4+Pj4+Pj4+PiBhdA0KPj4+Pj4+Pj4+IGFsbCBvbiBLVk0gZ3Vlc3QgZW50cnkgYW5kIGV4aXQu DQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+DQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4gVGhpcyBp cyBkb2FibGUsIGJ1dCBTR1ggZHJpdmVyIG5lZWRzIHRvIGRvIHRob3NlIHRoaW5ncyBhbmQgZXhw b3NlDQo+Pj4+Pj4+PiBpbnRlcmZhY2VzIGZvciBLVk0gdG8gdXNlLiBJbiB0ZXJtcyBvZiB0aGUg cGVyY3B1IGRhdGEsIGl0IGlzIG5pY2UgdG8NCj4+Pj4+Pj4+IGhhdmUsDQo+Pj4+Pj4+PiBidXQg SSBhbSBub3Qgc3VyZSB3aGV0aGVyIGl0IGlzIG1hbmRhdG9yeSwgYXMgSU1PIEVJTklUIGlzIG5v dCBldmVuIGluDQo+Pj4+Pj4+PiBwZXJmb3JtYW5jZSBjcml0aWNhbCBwYXRoLiBXZSBjYW4gc2lt cGx5IHJlYWQgb2xkIHZhbHVlIGZyb20gTVNScyBvdXQNCj4+Pj4+Pj4+IGFuZA0KPj4+Pj4+Pj4g Y29tcGFyZSB3aGV0aGVyIHRoZSBvbGQgZXF1YWxzIHRvIHRoZSBuZXcuDQo+Pj4+Pj4+DQo+Pj4+ Pj4+DQo+Pj4+Pj4+DQo+Pj4+Pj4+IEkgdGhpbmsgdGhlIFNHWCBkcml2ZXIgc2hvdWxkIHByb2Jh Ymx5IGxpdmUgaW4gYXJjaC94ODYsIGFuZCB0aGUNCj4+Pj4+Pj4gaW50ZXJmYWNlIGNvdWxkIGJl IGEgc2ltcGxlIHBlcmNwdSB2YXJpYWJsZSB0aGF0IGlzIGV4cG9ydGVkIChmcm9tIHRoZQ0KPj4+ Pj4+PiBtYWluIGtlcm5lbCBpbWFnZSwgbm90IGZyb20gYSBtb2R1bGUpLg0KPj4+Pj4+Pg0KPj4+ Pj4+Pj4NCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IEZXSVcsIEkgdGhpbmsgdGhhdCBLVk0gd2lsbCwg aW4gdGhlIGxvbmcgcnVuLCB3YW50IHRvIHRyYXAgRUlOSVQgZm9yDQo+Pj4+Pj4+Pj4gb3RoZXIg cmVhc29uczogc29tZW9uZSBpcyBnb2luZyB0byB3YW50IHRvIGltcGxlbWVudCBwb2xpY3kgZm9y IHdoYXQNCj4+Pj4+Pj4+PiBlbmNsYXZlcyBhcmUgYWxsb3dlZCB0aGF0IGFwcGxpZXMgdG8gZ3Vl c3RzIGFzIHdlbGwgYXMgdGhlIGhvc3QuDQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+DQo+ Pj4+Pj4+Pg0KPj4+Pj4+Pj4gSSBhbSBub3QgdmVyeSBjb252aW5jZWQgd2h5ICJ3aGF0IGVuY2xh dmVzIGFyZSBhbGxvd2VkIiBpbiBob3N0IHdvdWxkDQo+Pj4+Pj4+PiBhcHBseQ0KPj4+Pj4+Pj4g dG8gZ3Vlc3QuIENhbiB5b3UgZWxhYm9yYXRlPyBJIG1lYW4gaW4gZ2VuZXJhbCB2aXJ0dWFsaXph dGlvbiBqdXN0DQo+Pj4+Pj4+PiBmb2N1cw0KPj4+Pj4+Pj4gZW11bGF0aW5nIGhhcmR3YXJlIGJl aGF2aW9yLiBJZiBhIG5hdGl2ZSBtYWNoaW5lIGlzIGFibGUgdG8gcnVuIGFueQ0KPj4+Pj4+Pj4g TEUsDQo+Pj4+Pj4+PiB0aGUNCj4+Pj4+Pj4+IHZpcnR1YWwgbWFjaGluZSBzaG91bGQgYmUgYWJs ZSB0byBhcyB3ZWxsIChvZiBjb3Vyc2UsIHdpdGggZ3Vlc3Qncw0KPj4+Pj4+Pj4gSUEzMl9GRUFU VVJFX0NPTlRST0xbYml0IDE3XSBzZXQpLg0KPj4+Pj4+Pg0KPj4+Pj4+Pg0KPj4+Pj4+Pg0KPj4+ Pj4+PiBJIHN0cm9uZ2x5IGRpc2FncmVlLiAgSSBjYW4gaW1hZ2luZSB0d28gY2xhc3NlcyBvZiBz ZW5zaWJsZSBwb2xpY2llcw0KPj4+Pj4+PiBmb3IgbGF1bmNoIGNvbnRyb2w6DQo+Pj4+Pj4+DQo+ Pj4+Pj4+IDEuIEFsbG93IGV2ZXJ5dGhpbmcuICBUaGlzIHNlZW1zIHF1aXRlIHNlbnNpYmxlIHRv IG1lLg0KPj4+Pj4+Pg0KPj4+Pj4+PiAyLiBBbGxvdyBzb21lIHRoaW5ncywgYW5kIG1ha2Ugc3Vy ZSB0aGF0IFZNcyBoYXZlIGF0IGxlYXN0IGFzDQo+Pj4+Pj4+IHJlc3RyaWN0aXZlIGEgcG9saWN5 IGFzIGhvc3Qgcm9vdCBoYXMuICBBZnRlciBhbGwsIHdoYXQncyB0aGUgcG9pbnQgb2YNCj4+Pj4+ Pj4gcmVzdHJpY3RpbmcgZW5jbGF2ZXMgaW4gdGhlIGhvc3QgaWYgaG9zdCBjb2RlIGNhbiBzaW1w bHkgc3Bhd24gYQ0KPj4+Pj4+PiBsaXR0bGUgVk0gdG8gcnVuIG90aGVyd2lzZS1kaXNhbGxvd2Vk IGVuY2xhdmVzPw0KPj4+Pj4+DQo+Pj4+Pj4NCj4+Pj4+Pg0KPj4+Pj4+IFdoYXQncyB0aGUgY3Vy cmVudCBTR1ggZHJpdmVyIGxhdW5jaCBjb250cm9sIHBvbGljeT8gWWVzIGFsbG93DQo+Pj4+Pj4g ZXZlcnl0aGluZw0KPj4+Pj4+IHdvcmtzIGZvciBLVk0gc28gbGV0cyBza2lwIHRoaXMuIEFyZSB3 ZSBnb2luZyB0byBzdXBwb3J0IGFsbG93aW5nDQo+Pj4+Pj4gc2V2ZXJhbA0KPj4+Pj4+IExFcywg b3IganVzdCBhbGxvd2luZyBvbmUgc2luZ2xlIExFPyBJIGtub3cgSmFya2tvIGlzIGRvaW5nIGlu LWtlcm5lbCBMRQ0KPj4+Pj4+IHN0YWZmIGJ1dCBJIGRvbid0IGtub3cgZGV0YWlscy4NCj4+Pj4+ Pg0KPj4+Pj4+IEkgYW0gdHJ5aW5nIHRvIGZpbmQgYSB3YXkgdGhhdCB3ZSBjYW4gYm90aCBub3Qg YnJlYWsgaG9zdCBsYXVuY2ggY29udHJvbA0KPj4+Pj4+IHBvbGljeSwgYW5kIGJlIGNvbnNpc3Rl bnQgdG8gSFcgYmVoYXZpb3IgKGZyb20gZ3Vlc3QncyB2aWV3KS4gQ3VycmVudGx5DQo+Pj4+Pj4g d2UNCj4+Pj4+PiBjYW4gY3JlYXRlIGEgS1ZNIGd1ZXN0IHdpdGggcnVudGltZSBjaGFuZ2UgdG8g SUEzMl9TR1hMRVBVQktFWUhBU0huDQo+Pj4+Pj4gZWl0aGVyDQo+Pj4+Pj4gZW5hYmxlZCBvciBk aXNhYmxlZC4gSSBpbnRyb2R1Y2VkIGFuIFFlbXUgcGFyYW1ldGVyICdsZXdyJyBmb3IgdGhpcw0K Pj4+Pj4+IHB1cnBvc2UuDQo+Pj4+Pj4gQWN0dWFsbHkgSSBpbnRyb2R1Y2VkIGJlbG93IFFlbXUg U0dYIHBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIGd1ZXN0Og0KPj4+Pj4+DQo+Pj4+Pj4gICAgICAg ICAgLXNneCBlcGM9PHNpemU+LGxlaGFzaD0nU0hBLTI1NiBoYXNoJyxsZXdyDQo+Pj4+Pj4NCj4+ Pj4+PiB3aGVyZSAnZXBjJyBzcGVjaWZpZXMgZ3Vlc3QncyBFUEMgc2l6ZSwgbGVoYXNoIHNwZWNp ZmllcyAoaW5pdGlhbCkgdmFsdWUNCj4+Pj4+PiBvZg0KPj4+Pj4+IGd1ZXN0J3MgSUEzMl9TR1hM RVBVQktFWUhBU0huLCBhbmQgJ2xld3InIHNwZWNpZmllcyB3aGV0aGVyIGd1ZXN0IGlzDQo+Pj4+ Pj4gYWxsb3dlZA0KPj4+Pj4+IHRvIGNoYW5nZSBndWVzdCdzIElBMzJfU0dYTEVQVUJLRVlIQVNI biBhdCBydW50aW1lLg0KPj4+Pj4+DQo+Pj4+Pj4gSWYgaG9zdCBvbmx5IGFsbG93cyBvbmUgc2lu Z2xlIExFIHRvIHJ1biwgS1ZNIGNhbiBhZGQgYSByZXN0cmljdCB0aGF0DQo+Pj4+Pj4gb25seQ0K Pj4+Pj4+IGFsbG93cyB0byBjcmVhdGUgS1ZNIGd1ZXN0IHdpdGggcnVudGltZSBjaGFuZ2UgdG8N Cj5JQTMyX1NHWExFUFVCS0VZSEFTSG4NCj4+Pj4+PiBkaXNhYmxlZCwgc28gdGhhdCBvbmx5IGhv c3QgYWxsb3dlZCAoc2luZ2xlKSBoYXNoIGNhbiBiZSB1c2VkIGJ5IGd1ZXN0Lg0KPj4+Pj4+IEZy b20NCj4+Pj4+PiBndWVzdCdzIHZpZXcsIGl0IHNpbXBseSBoYXMgSUEzMl9GRUFUVVJFX0NPTlRS T0xbYml0MTddIGNsZWFyZWQgYW5kDQo+aGFzDQo+Pj4+Pj4gSUEzMl9TR1hMRVBVQktFWUhBU0hu IHdpdGggZGVmYXVsdCB2YWx1ZSB0byBiZSBob3N0IGFsbG93ZWQgKHNpbmdsZSkNCj4+Pj4+PiBo YXNoLg0KPj4+Pj4+DQo+Pj4+Pj4gSWYgaG9zdCBhbGxvd3Mgc2V2ZXJhbCBMRXMgKG5vdCBidXQg ZXZlcnl0aGluZyksIGFuZCBpZiB3ZSBjcmVhdGUgZ3Vlc3QNCj4+Pj4+PiB3aXRoDQo+Pj4+Pj4g J2xld3InLCB0aGVuIHRoZSBiZWhhdmlvciBpcyBub3QgY29uc2lzdGVudCB3aXRoIEhXIGJlaGF2 aW9yLCBhcyBmcm9tDQo+Pj4+Pj4gZ3Vlc3QncyBoYXJkd2FyZSdzIHBvaW50IG9mIHZpZXcsIHdl IGNhbiBhY3R1YWxseSBydW4gYW55IExFIGJ1dCB3ZSBoYXZlDQo+Pj4+Pj4gdG8NCj4+Pj4+PiB0 ZWxsIGd1ZXN0IHRoYXQgeW91IGFyZSBvbmx5IGFsbG93ZWQgdG8gY2hhbmdlIElBMzJfU0dYTEVQ VUJLRVlIQVNIbg0KPnRvDQo+Pj4+Pj4gc29tZQ0KPj4+Pj4+IHNwZWNpZmljIHZhbHVlcy4gT25l IGNvbXByb21pc2Ugc29sdXRpb24gaXMgd2UgZG9uJ3QgYWxsb3cgdG8gY3JlYXRlDQo+Pj4+Pj4g Z3Vlc3QNCj4+Pj4+PiB3aXRoICdsZXdyJyBzcGVjaWZpZWQsIGFuZCBhdCB0aGUgbWVhbnRpbWUs IG9ubHkgYWxsb3cgdG8gY3JlYXRlIGd1ZXN0DQo+Pj4+Pj4gd2l0aA0KPj4+Pj4+IGhvc3QgYXBw cm92ZWQgaGFzaGVzIHNwZWNpZmllZCBpbiAnbGVoYXNoJy4gVGhpcyB3aWxsIG1ha2UgZ3Vlc3Qn cw0KPj4+Pj4+IGJlaGF2aW9yDQo+Pj4+Pj4gY29uc2lzdGVudCB0byBIVyBiZWhhdmlvciBidXQg b25seSBhbGxvd3MgZ3Vlc3QgdG8gcnVuIG9uZSBMRSAod2hpY2ggaXMNCj4+Pj4+PiBzcGVjaWZp ZWQgYnkgJ2xlaGFzaCcgd2hlbiBndWVzdCBpcyBjcmVhdGVkKS4NCj4+Pj4+DQo+Pj4+Pg0KPj4+ Pj4gSSdtIG5vdCBzdXJlIEkgZW50aXJlbHkgYWdyZWUgZm9yIGEgY291cGxlIHJlYXNvbnMuDQo+ Pj4+Pg0KPj4+Pj4gMS4gSSB3b3VsZG4ndCBiZSBzdXJwcmlzZWQgaWYgdGhlIGtlcm5lbCBlbmRz IHVwIGltcGxlbWVudGluZyBhIHBvbGljeQ0KPj4+Pj4gaW4gd2hpY2ggaXQgY2hlY2tzIGFsbCBl bmNsYXZlcyAobm90IGp1c3QgTEVzKSBmb3IgYWNjZXB0YWJpbGl0eS4gIEluDQo+Pj4+PiBmYWN0 LCBpZiB0aGUga2VybmVsIHN0aWNrcyB3aXRoIHRoZSAibm8gTEUgYXQgYWxsIG9yIGp1c3QNCj4+ Pj4+IGtlcm5lbC1pbnRlcm5hbCBMRSIsIHRoZW4gY2hlY2tpbmcgZW5jbGF2ZXMgZGlyZWN0bHkg YWdhaW5zdCBzb21lDQo+Pj4+PiBhZG1pbi0gb3IgZGlzdHJvLXByb3ZpZGVkIHNpZ25lciBsaXN0 IHNlZW1zIHJlYXNvbmFibGUuICBUaGlzIHR5cGUgb2YNCj4+Pj4+IHBvbGljeSBjYW4ndCBiZSBm b3J3YXJkZWQgdG8gYSBndWVzdCBieSByZXN0cmljdGluZyBhbGxvd2VkIExFDQo+Pj4+PiBzaWdu ZXJzLiAgQnV0IHRoaXMgaXMgbW9zdGx5IHNwZWN1bGF0aW9uIHNpbmNlIEFGQUlLIG5vIG9uZSBo YXMNCj4+Pj4+IHNlcmlvdXNseSBwcm9wb3NlZCBhbnkgcGFydGljdWxhciBwb2xpY3kgc3VwcG9y dCBhbmQgdGhlIHBsYW4gd2FzIHRvDQo+Pj4+PiBub3QgaGF2ZSB0aGlzIGZvciB0aGUgaW5pdGlh bCBpbXBsZW1lbnRhdGlvbi4NCj4+Pj4+DQo+Pj4+PiAyLiBXaGlsZSBtYXRjaGluZyBoYXJkd2Fy ZSBiZWhhdmlvciBpcyBuaWNlIGluIHByaW5jaXBsZSwgdGhlcmUNCj4+Pj4+IGRvZXNuJ3Qgc2Vl bSB0byBiZSB1c2VmdWwgaGFyZHdhcmUgYmVoYXZpb3IgdG8gbWF0Y2ggaGVyZS4gIElmIHRoZQ0K Pj4+Pj4gaG9zdCBoYWQgYSBsaXN0IG9mIGZpdmUgYWxsb3dlZCBMRSBzaWduZXJzLCBob3cgZXhh Y3RseSB3b3VsZCBpdA0KPj4+Pj4gcmVzdHJpY3QgdGhlIE1TUnM/ICBUaGV5J3JlIG5vdCB3cml0 dGVuIGF0b21pY2FsbHksIHNvIHlvdSBjYW4ndA0KPj4+Pj4gZGlyZWN0bHkgdGVsbCB3aGF0J3Mg YmVpbmcgd3JpdHRlbi4NCj4+Pj4NCj4+Pj4NCj4+Pj4gSW4gdGhpcyBjYXNlIEkgYWN0dWFsbHkg cGxhbiB0byBqdXN0IGFsbG93IGNyZWF0aW5nIGd1ZXN0IHdpdGggZ3Vlc3Qncw0KPj4+PiBJQTMy X1NHWExFUFVCS0VZSEFTSG4gZGlzYWJsZWQgKHdpdGhvdXQgJ2xld3InIHNwZWNpZmllZCkuIElm ICdsZXdyJyBpcw0KPj4+PiBzcGVjaWZpZWQsIGNyZWF0aW5nIGd1ZXN0IHdpbGwgZmFpbC4gQW5k IHdlIG9ubHkgYWxsb3cgY3JlYXRpbmcgZ3Vlc3Qgd2l0aA0KPj4+PiBob3N0IGFsbG93ZWQgaGFz aCB2YWx1ZXMgKHdpdGggJ2xlaGFzaD1oYXNoLXZhbHVlJyksIGFuZCBpZiAnaGFzaC12YWx1ZScN Cj4+Pj4gc3BlY2lmaWVkIGJ5ICdsZWhhc2gnIGlzIG5vdCBhbGxvd2VkIGJ5IGhvc3QsIHdlIGFs c28gZmFpbCB0byBjcmVhdGUgZ3Vlc3QuDQo+Pj4+DQo+Pj4+IFdlIGNhbiBvbmx5IGFsbG93IGNy ZWF0aW5nIGd1ZXN0IHdpdGggJ2xld3InIHNwZWNpZmllZCB3aGVuIGhvc3QgYWxsb3dzDQo+Pj4+ IGFueXRoaW5nLg0KPj4+Pg0KPj4+PiBCdXQgaW4gdGhpcyB3YXksIHdlIGFyZSByZXN0cmljdGlu ZyBndWVzdCBPUydzIGFiaWxpdHkgdG8gcnVuIExFLCBhcyBvbmx5DQo+Pj4+IG9uZSBMRSwgdGhh dCBpcyBzcGVjaWZpZWQgYnkgJ2xlaGFzaCcgcGFyYW1ldGVyLCBjYW4gYmUgcnVuLiBCdXQgSSB0 aGluaw0KPj4+PiB0aGlzIHdvbid0IGh1cnQgbXVjaCwgYXMgbXVsdGlwbGUgZ3Vlc3RzIHN0aWxs IGFyZSBhYmxlIHRvIHJ1biBkaWZmZXJlbnQNCj4+Pj4gTEVzPw0KPj4+Pg0KPj4+PiBBbHNvLCB0 aGUgb25seSB3YXkgdG8gZmFpbCBhbiBNU1INCj4+Pj4+DQo+Pj4+PiB3cml0ZSBpcyB0byBzZW5k ICNHUCwgYW5kIFdpbmRvd3MgKGFuZCBldmVuIExpbnV4KSBtYXkgbm90IGV4cGVjdA0KPj4+Pj4g dGhhdC4gIExpbnV4IGRvZXNuJ3QgcGFuaWMgZHVlIHRvICNHUCBvbiBNU1Igd3JpdGVzIHRoZXNl IGRheXMsIGJ1dA0KPj4+Pj4geW91IHN0aWxsIGdldCBhIGJpZyBmYXQgd2FybmluZy4gIEkgd291 bGRuJ3QgYmUgYXQgYWxsIHN1cnByaXNlZCBpZg0KPj4+Pj4gV2luZG93cyBCU09Ecy4NCj4+Pj4N Cj4+Pj4NCj4+Pj4gV2UgY2Fubm90IGFsbG93IHdyaXRpbmcgc29tZSBwYXJ0aWN1bGFyIHZhbHVl IHRvIE1TUnMgc3VjY2Vzc2Z1bGx5LCB3aGlsZQ0KPj4+PiBpbmplY3RpbmcgI0dQIHdoZW4gd3Jp dGluZyBvdGhlciB2YWx1ZXMgdG8gdGhlIHNhbWUgTVNScy4gU28gI0dQIGlzIG5vdA0KPj4+PiBv cHRpb24uDQo+Pj4+DQo+Pj4+IEVOQ0xTW0VJTklUXSwgb24gdGhlIG90aGVyIGhhbmQsIHJldHVy bnMgYW4gYWN0dWFsDQo+Pj4+Pg0KPj4+Pj4gZXJyb3IgY29kZS4gIEknbSBub3Qgc3VyZSB0aGF0 IGEgc2Vuc2libGUgZXJyb3IgY29kZSBleGlzdHMNCj4+Pj4+ICgiU0dYX0hZUEVSVklTT1JfU0FJ RF9OTz8iLCBwZXJoYXBzKSwNCj4+Pj4NCj4+Pj4NCj4+Pj4gTG9va3Mgbm8gc3VjaCBlcnJvciBj b2RlIGV4aXN0cy4gQW5kIHdlIGNhbm5vdCByZXR1cm4gc3VjaCBlcnJvciBjb2RlIHRvDQo+Pj4+ IGd1ZXN0IGFzIHN1Y2ggZXJyb3IgY29kZSBpcyBvbmx5IHN1cHBvc2VkIHRvIGJlIHZhbGlkIHdo ZW4gRU5DTFMgaXMgcnVuIGluDQo+Pj4+IGh5cGVydmlzb3IuDQo+Pj4+DQo+Pj4+IGJ1dCBTR1hf SU5WQUxJRF9FSU5JVFRPS0VOIHNlZW1zDQo+Pj4+Pg0KPj4+Pj4gdG8gbWVhbiwgbW9yZSBvciBs ZXNzLCAidGhlIENQVSB0aGlua3MgeW91J3JlIG5vdCBhdXRob3JpemVkIHRvIGRvDQo+Pj4+PiB0 aGlzIiwgc28gZm9yY2luZyB0aGF0IGVycm9yIGNvZGUgY291bGQgYmUgZW50aXJlbHkgcmVhc29u YWJsZS4NCj4+Pj4+DQo+Pj4+PiBJZiB0aGUgaG9zdCBwb2xpY3kgaXMgdG8gYWxsb3cgYSBsaXN0 IG9mIExFIHNpZ25lcnMsIHlvdSBjb3VsZCByZXR1cm4NCj4+Pj4+IFNHWF9JTlZBTElEX0VJTklU VE9LRU4gaWYgdGhlIGd1ZXN0IHRyaWVzIHRvIEVJTklUIGFuIExFIHRoYXQgaXNuJ3QgaW4NCj4+ Pj4+IHRoZSBsaXN0Lg0KPj4+Pg0KPj4+Pg0KPj4+PiBCdXQgdGhpcyB3b3VsZCBiZSBpbmNvbnNp c3RlbnQgd2l0aCBIVyBiZWhhdmlvci4gSWYgdGhlIGhhc2ggdmFsdWUgaW4NCj4+Pj4gZ3Vlc3Qn cyBJQTMyX1NHWExFUFVCS0VZSEFTSG4gaXMgbWF0Y2hlZCB3aXRoIHRoZSBvbmUgcGFzc2VkIGJ5 IEVJTklULA0KPkVJTklUDQo+Pj4+IGlzIG5vdCBzdXBwb3NlZCB0byByZXR1cm4gU0dYX0lOVkFM SURfRUlOSVRUT0tFTi4NCj4+Pj4NCj4+Pj4gSSB0aGluayBmcm9tIFZNTSdzIHBlcnNwZWN0aXZl LCBlbXVsYXRpbmcgSFcgYmVoYXZpb3IgdG8gYmUgY29uc2lzdGVudA0KPj4+PiB3aXRoIHJlYWwg SFcgYmVoYXZpb3IgaXMgdmVyeSBpbXBvcnRhbnQuDQo+Pj4+DQo+Pj4+IFBhb2xvLCB3b3VsZCB5 b3UgcHJvdmlkZSB5b3VyIGNvbW1lbnRzPw0KPj4+DQo+Pj4NCj4+PiBIaSBhbGwsDQo+Pj4NCj4+ PiBUaGlzIGhhcyBiZWVuIHF1aXRlIGZvciBhIHdoaWxlIGFuZCBJJ2QgbGlrZSB0byBzdGFydCBk aXNjdXNzaW9uIGFnYWluLg0KPj4+IEphcmtrbyB0b2xkIG1lIHRoYXQgY3VycmVudGx5IGhlIG9u bHkgc3VwcG9ydHMgb25lIExFIGluIFNHWCBkcml2ZXIsIGJ1dCBJDQo+Pj4gYW0gbm90IHN1cmUg d2hldGhlciBoZSBpcyBnb2luZyB0byBleHRlbmQgaW4gdGhlIGZ1dHVyZSBvciBub3QuIEkgdGhp bmsgdGhpcw0KPj4+IG1pZ2h0IGFsc28gZGVwZW5kIG9uIHJlcXVpcmVtZW50cyBmcm9tIGN1c3Rv bWVycy4NCj4+Pg0KPj4+IEFuZHksDQo+Pj4NCj4+PiBJZiB3ZSBvbmx5IHN1cHBvcnQgb25lIExF IGluIGRyaXZlciwgdGhlbiB3ZSBjYW4gb25seSBzdXBwb3J0IHRoZSBzYW1lIExFDQo+Pj4gZm9y IGFsbCBLVk0gZ3Vlc3RzLCBhY2NvcmRpbmcgdG8geW91ciBjb21tZW50cyB0aGF0IGhvc3Qga2Vy bmVsIGxhdW5jaA0KPj4+IGNvbnRyb2wgcG9saWN5IHNob3VsZCBhbHNvIGFwcGx5IHRvIEtWTSBn dWVzdHM/IFdPdWxkIHlvdSBjb21tZW50cyBtb3JlPw0KPj4NCj4+IEknbSBub3QgYXQgYWxsIGNv bnZpbmNlZCB0aGF0LCBnb2luZyBmb3J3YXJkLCBMaW51eCdzIGhvc3Qtc2lkZSBsYXVuY2gNCj4+ IGNvbnRyb2wgcG9saWN5IHdpbGwgYmUgZW50aXJlbHkgY29udGFpbmVkIGluIHRoZSBMRS4gIEkn bSBhbHNvIG5vdA0KPj4gY29udmluY2VkIHRoYXQgbm9uLUxpbnV4IGd1ZXN0cyB3aWxsIGZ1bmN0 aW9uIGF0IGFsbCB1bmRlciB0aGlzIHR5cGUNCj4+IG9mIHBvbGljeSAtLSB3aGF0IGlmIEZyZWVC U0QncyBMRSBpcyBkaWZmZXJlbnQgZm9yIHdoYXRldmVyIHJlYXNvbj8NCj4NCj5JIGFtIG5vdCBj b252aW5jZWQgZWl0aGVyLiBJIHRoaW5rIHdlIG5lZWQgSmFya2tvIHRvIGVsYWJvcmF0ZSBob3cg aXMNCj5ob3N0IHNpZGUgbGF1bmNoIGNvbnRyb2wgcG9saWN5IGltcGxlbWVudGVkLCBvciBpcyB0 aGVyZSBhbnkgcG9saWN5IGF0DQo+YWxsLiBJIGFsc28gdHJpZWQgdG8gcmVhZCBTR1ggZHJpdmVy IGNvZGUgYnV0IGxvb2tzIEkgY291bGRuJ3QgZmluZCBhbnkNCj5pbXBsZW1lbnRhdGlvbiByZWdh cmRpbmcgdG8gdGhpcy4NCj4NCj5IaSBKYXJra28sDQo+DQo+Q2FuIHlvdSBlbGFib3JhdGUgb24g dGhpcz8NCj4NCj5UaGFua3MsDQo+LUthaQ0KDQpJIGRvbid0IHRoaW5rIHRoZSBrZXJuZWwncyBM RSBwb2xpY3kgaXMgcmVsZXZhbnQgaGVyZS4NCkFzIGxvbmcgYXMgeW91IGFsbG93IHRoZSBndWVz dCBPUyB0byBzZXQgdGhlIElBMzJfU0dYTEVQVUJLRVlIQVNIbiBNU1JzLCBlaXRoZXIgZGlyZWN0 bHkgb3IgYnkgdGhlIFZNTSAnbGVoYXNoJyB2YWx1ZSwgeW91IGRvbid0IG5lZWQgYSBzdXBwb3J0 IGZvciBtb3JlIHRoYW4gb24gTEUgaW4gdGhlIGtlcm5lbC4NClRoZSBob3N0IGtlcm5lbCB3aWxs IGhhdmUgb25lIExFIGFuZCB0aGUgZ3Vlc3Qga2VybmVsIGhhcyBhbm90aGVyICJvbmUiIExFIHRo YXQgbWF5IGhhdmUgYSBkaWZmZXJlbnQgaGFzaCB2YWx1ZS4NCkkgYWdyZWUgd2l0aCBBbmR5IHRo YXQgZGlmZmVyZW50IE9TIGRpc3RyaWJ1dGlvbnMgYXJlIGxpa2VseSB0byBoYXZlIGRpZmZlcmVu dCBMRSBoYXNoIHZhbHVlcyAtIHNvIHRoZSBndWVzdCBPUyBtYXkgcmVxdWlyZSBkaWZmZXJlbnQg aGFzaCBzZXR0aW5nLg0KDQo+Pg0KPj4+DQo+Pj4gSmFya2tvLA0KPj4+DQo+Pj4gQ291bGQgeW91 IGhlbHAgdG8gY2xhcmlmeSB0aGUgd2hvbGUgbGF1bmNoIGNvbnRyb2wgcG9saWN5IGluIGhvc3Qg c2lkZSBzbw0KPj4+IHRoYXQgd2UgY2FuIGhhdmUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyB0b2dl dGhlcj8NCj4+Pg0KPj4+IFRoYW5rcywNCj4+PiAtS2FpDQo+Pj4NCj4+Pj4NCj4+Pj4+DQo+Pj4+ PiAtLUFuZHkNCj4+Pj4+DQo+Pj4NCj4+DQo=