From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH igt] Add the new case for create GVT-g Linux guest based on KVMGT Date: Mon, 2 Jan 2017 09:33:27 +0100 Message-ID: <20170102083327.GR8712@dvetter-linux.ger.corp.intel.com> References: <1483118693-5542-1-git-send-email-terrence.xu@intel.com> <20161230192229.GN8712@dvetter-linux.ger.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8C1A46E3E4 for ; Mon, 2 Jan 2017 08:33:33 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id l2so55605104wml.2 for ; Mon, 02 Jan 2017 00:33:33 -0800 (PST) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Xu, Terrence" Cc: "Wang, Zhenyu Z" , "Sarvela, Tomi P" , "intel-gfx@lists.freedesktop.org" , "Lv, Zhiyuan" , "Jin, Gordon" , "Xu, BenyuX" , "Wang, Hongbo" List-Id: intel-gfx@lists.freedesktop.org T24gU3VuLCBKYW4gMDEsIDIwMTcgYXQgMTI6MzM6NTNQTSArMDAwMCwgWHUsIFRlcnJlbmNlIHdy b3RlOgo+ID4gT24gU2F0LCBEZWMgMzEsIDIwMTYgYXQgMDE6MjQ6NTNBTSArMDgwMCwgVGVycmVu Y2UgWHUgd3JvdGU6Cj4gPiA+IEdWVC1nIChJbnRlbMKuIEdyYXBoaWNzIFZpcnR1YWxpemF0aW9u IFRlY2hub2xvZ3kpIGlzIGEgZnVsbCBHUFUKPiA+ID4gdmlydHVhbGl6YXRpb24gc29sdXRpb24g d2l0aCBtZWRpYXRlZCBwYXNzLXRocm91Z2ggc3VwcG9ydC4KPiA+ID4KPiA+ID4gVGhpcyBjYXNl IGlzIGZvciBjcmVhdGUgYmFzaWMgTGludXggZ3Vlc3QgYmFzZWQgb24gS1ZNR1Qgd2l0aCBWRklP Cj4gPiA+IGZyYW1ld29yaywgaXQgaW5jbHVkaW5nIGNyZWF0ZSB2Z3B1LCBjcmVhdGUgZ3Vlc3Qs IGNoZWNrIElQIGFkZHJlc3MsCj4gPiA+IGRlc3Ryb3kgZ3Vlc3QsIHJlbW92ZSB2Z3B1LGNoZWNr IGRtZXNnIGxvZywgZXRjIGZ1bmN0aW9ucy4KPiA+ID4KPiA+ID4gU2lnbmVkLW9mZi1ieTogVGVy cmVuY2UgWHUgPHRlcnJlbmNlLnh1QGludGVsLmNvbT4KPiA+ID4gU2lnbmVkLW9mZi1ieTogQmVu eXUgWHUgPGJlbnl1eC54dUBpbnRlbC5jb20+Cj4gPiA+IC0tLQo+ID4gPiAgdGVzdHMvTWFrZWZp bGUuc291cmNlcyB8ICAgMSArCj4gPiA+ICB0ZXN0cy9ndnRnX2d1ZXN0LmMgICAgIHwgMzIzCj4g PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiA+ ICAyIGZpbGVzIGNoYW5nZWQsIDMyNCBpbnNlcnRpb25zKCspCj4gPiA+ICBjcmVhdGUgbW9kZSAx MDA2NDQgdGVzdHMvZ3Z0Z19ndWVzdC5jCj4gPiA+Cj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9N YWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBpbmRleAo+ID4gPiAwNGRk MmQ1Li4wOWI5MzZlIDEwMDY0NAo+ID4gPiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4g PiA+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+ID4gQEAgLTIxOSw2ICsyMTksNyBA QCBURVNUU19wcm9ncyA9IFwKPiA+ID4gIAlwcmltZV91ZGwgXAo+ID4gPiAgCWRydl9tb2R1bGVf cmVsb2FkIFwKPiA+ID4gIAlrbXNfc3lzZnNfZWRpZF90aW1pbmcgXAo+ID4gPiArICAgIGd2dGdf Z3Vlc3QgXAo+ID4gPiAgCSQoTlVMTCkKPiA+ID4KPiA+ID4gICMgSU1QT1JUQU5UOiBUaGUgWlpf IHRlc3RzIG5lZWQgdG8gYmUgcnVuIGxhc3QhCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9ndnRn X2d1ZXN0LmMgYi90ZXN0cy9ndnRnX2d1ZXN0LmMgbmV3IGZpbGUgbW9kZQo+ID4gPiAxMDA2NDQg aW5kZXggMDAwMDAwMC4uYjllNjMwNAo+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ICsrKyBiL3Rl c3RzL2d2dGdfZ3Vlc3QuYwo+ID4gPiBAQCAtMCwwICsxLDMyMyBAQAo+ID4gPiArLyoKPiA+ID4g KyAqIENvcHlyaWdodCAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gPiA+ICsgKiAgIFRlcnJlbmNl IFh1IDx0ZXJyZW5jZS54dUBpbnRlbC5jb20+Cj4gPiA+ICsgKgo+ID4gPiArICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPiA+ID4g K29idGFpbmluZyBhCj4gPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4gPiA+ICsiU29mdHdhcmUiKSwKPiA+ID4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0Cj4gPiA+ICtsaW1pdGF0aW9uCj4gPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwKPiA+ID4gK3N1YmxpY2Vuc2Us Cj4gPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbQo+ID4gPiArdGhlCj4gPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4g PiArICoKPiA+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIHNoYWxsIGJlCj4gPiA+ICtpbmNsdWRlZCBpbgo+ID4gPiArICogYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gPiA+ICsgKgo+ ID4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsCj4gPiA+ICtFWFBSRVNTIE9SCj4gPiA+ICsgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4gPiA+ICtNRVJDSEFO VEFCSUxJVFksCj4gPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiBJTiBOTwo+ID4gRVZFTlQKPiA+ID4gK1NIQUxMIFRIRQo+ID4gPiAr ICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwK PiA+IERBTUFHRVMgT1IKPiA+ID4gK09USEVSCj4gPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiA+ID4gK0FSSVNJ TkcKPiA+ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IKPiA+ID4gK09USEVSIERFQUxJTkdTCj4gPiA+ICsgKiBJTiBUSEUg U09GVFdBUkUuCj4gPiA+ICsgKi8KPiA+ID4gKwo+ID4gPiArLyoKPiA+ID4gKyAqIFRoaXMgcHJv Z3JhbSBpcyBpbnRlbmRlZCBmb3IgdGVzdGluZyBvZiB2YWxpZGF0ZSBHVlQtZyB2aXJ0dWFsCj4g PiA+ICttYWNoaW5lCj4gPiA+ICsgKiBjcmVhdGlvbiBvZiBhbGxvdyBmb3IgdGVzdGluZyBvZiBL Vk1HVCAvIFhlbkdULgo+ID4gPiArICoKPiA+ID4gKyAqIFRPRE86Cj4gPiA+ICsgKiBFbmFibGUg bW9yZSBHVlQtZyByZWxhdGVkIHRlc3QgY2FzZXMuCj4gPiA+ICsgKi8KPiA+ID4gKyNpZmRlZiBI QVZFX0NPTkZJR19ICj4gPiA+ICsjaW5jbHVkZSAiY29uZmlnLmgiCj4gPiA+ICsjZW5kaWYKPiA+ ID4gKwo+ID4gPiArI2luY2x1ZGUgImlndC5oIgo+ID4gPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4g PiA+ICsjaW5jbHVkZSA8Z2V0b3B0Lmg+Cj4gPiA+ICsjaW5jbHVkZSA8bWF0aC5oPgo+ID4gPiAr I2luY2x1ZGUgPHN0ZGludC5oPgo+ID4gPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiA+ID4gKyNp bmNsdWRlIDxzdHJpbmdzLmg+Cj4gPiA+ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4gPiA+ICsjaW5j bHVkZSA8dGVybWlvcy5oPgo+ID4gPiArI2luY2x1ZGUgPHN5cy9wb2xsLmg+Cj4gPiA+ICsjaW5j bHVkZSA8c3lzL3RpbWUuaD4KPiA+ID4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPiA+ID4gKyNp bmNsdWRlIDxzeXMvdHlwZXMuaD4KPiA+ID4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ID4gPiAr I2luY2x1ZGUgPHN0cmluZy5oPgo+ID4gPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ID4gPiArI2lu Y2x1ZGUgPHNpZ25hbC5oPgo+ID4gPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gPiA+ICsjaW5jbHVk ZSA8c3RkbGliLmg+Cj4gPiA+ICsjaW5jbHVkZSA8dGltZS5oPgo+ID4gPiArI2luY2x1ZGUgPHVu aXN0ZC5oPgo+ID4gPiArI2luY2x1ZGUgPHB3ZC5oPgo+ID4gPiArI2luY2x1ZGUgPGxpbWl0cy5o Pgo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIFJBTkRPTSh4KSAocmFuZCgpICUgeCkKPiA+ID4gKwo+ ID4gPiArc3RhdGljIHVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbMTddID0geycwJywgJzAnLCAnOics ICcwJywgJzAnLCAnOicsCj4gPiA+ICsgICAgJzAnLCAnMCcsICc6JywgJzAnLCAnMCcsICc6Jywg JzAnLCAnMCcsICc6JywgJzAnLCAnMCd9OyBzdGF0aWMKPiA+ID4gK2NoYXIgdXVpZFs0MF07IHN0 YXRpYyBjaGFyIGd1ZXN0X2lwWzMyXTsKPiA+ID4gKwo+ID4gPiArc3RhdGljIGNoYXIgcWVtdV9w YXRoW1BBVEhfTUFYXSA9IHswfTsgc3RhdGljIGNoYXIgaGRhX3BhdGhbUEFUSF9NQVhdCj4gPiA+ ICs9IHswfTsgc3RhdGljIGNoYXIgYmlvc19wYXRoW1BBVEhfTUFYXSA9IHswfTsKPiA+ID4gKwo+ ID4gPiArc3RhdGljIGludCBzdXBlcl9zeXN0ZW0oY29uc3QgY2hhciAqY21kLCBjaGFyICpyZXRt c2csIGludCBtc2dfbGVuKSB7Cj4gPiA+ICsgICAgRklMRSAqZnA7Cj4gPiA+ICsgICAgaW50IHJl cyA9IC0xOwo+ID4gPiArICAgIGlmIChjbWQgPT0gTlVMTCB8fCByZXRtc2cgPT0gTlVMTCB8fCBt c2dfbGVuIDwgMCkgewo+ID4gPiArICAgICAgICBpZ3RfaW5mbygiRXJyb3I6ICVzIHN5c3RlbSBw YXJhbWVyIGludmFsaWQhXG4iLCBfX2Z1bmNfXyk7Cj4gPiA+ICsgICAgICAgIHJldHVybiAxOwo+ ID4gPiArICAgIH0KPiA+ID4gKyAgICBmcCA9IHBvcGVuKGNtZCwgInIiKTsKPiA+ID4gKyAgICBp ZiAoZnAgPT0gTlVMTCkgewo+ID4gPiArICAgICAgICBwZXJyb3IoInBvcGVuIik7Cj4gPiA+ICsg ICAgICAgIGlndF9pbmZvKCJFcnJvcjogJXMgcG9wZW4gZXJyb3I6ICVzXG4iLCBfX2Z1bmNfXywg c3RyZXJyb3IoZXJybm8pKTsKPiA+ID4gKyAgICAgICAgcmV0dXJuIDI7Cj4gPiA+ICsgICAgfSBl bHNlIHsKPiA+ID4gKyAgICAgICAgbWVtc2V0KHJldG1zZywgMCwgbXNnX2xlbik7Cj4gPiA+ICsg ICAgICAgIHdoaWxlIChmZ2V0cyhyZXRtc2csIG1zZ19sZW4sIGZwKSkgewo+ID4gPiArICAgICAg ICAgICAgOwo+ID4gPiArICAgICAgICB9Owo+ID4gPiArICAgICAgICByZXMgPSBwY2xvc2UoZnAp Owo+ID4gPiArICAgICAgICBpZiAocmVzID09IC0xKSB7Cj4gPiA+ICsgICAgICAgICAgICBpZ3Rf aW5mbygiRXJyb3I6JXMgY2xvc2UgcG9wZW4gZmlsZSBwb2ludGVyIGZwIGVycm9yIVxuIiwgX19m dW5jX18pOwo+ID4gPiArICAgICAgICAgICAgcmV0dXJuIDM7Cj4gPiA+ICsgICAgICAgIH0KPiA+ ID4gKyAgICAgICAgcmV0bXNnW3N0cmxlbihyZXRtc2cpIC0gMV0gPSAnXDAnOwo+ID4gPiArICAg ICAgICByZXR1cm4gMDsKPiA+ID4gKyAgICB9Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRp YyB2b2lkIGNyZWF0ZV9ndWVzdCh2b2lkKQo+ID4gPiArewo+ID4gPiArICAgIGNoYXIgY3JlYXRl X3Fjb3dfY21kW1BBVEhfTUFYXSA9IHswfTsKPiA+ID4gKyAgICBjaGFyIGNyZWF0ZV92Z3B1X2Nt ZFtQQVRIX01BWF0gPSB7MH07Cj4gPiA+ICsgICAgY2hhciBjcmVhdGVfaW5zdGFuY2VfY21kW1BB VEhfTUFYXSA9IHswfTsKPiA+ID4gKwo+ID4gPiArICAgIHNwcmludGYoY3JlYXRlX3Fjb3dfY21k LCAicWVtdS1pbWcgY3JlYXRlIC1iICVzIC1mIHFjb3cyICVzLnFjb3cyIiwKPiA+ID4gKyAgICAg ICAgICAgIGhkYV9wYXRoLCBoZGFfcGF0aCk7Cj4gPiA+ICsgICAgc3ByaW50ZihjcmVhdGVfdmdw dV9jbWQsICJlY2hvIFwiJXNcIiA+Cj4gPiAvc3lzL2J1cy9wY2kvZGV2aWNlcy8wMDAwOjAwOjAy LjAvIgo+ID4gPiArICAgICAgICAgICAibWRldl9zdXBwb3J0ZWRfdHlwZXMvaTkxNS1HVlRnX1Y0 XzEvY3JlYXRlIiwgdXVpZCk7Cj4gPiA+ICsgICAgc3ByaW50ZihjcmVhdGVfaW5zdGFuY2VfY21k LCAiJXMgLW0gMjA0OCAtc21wIDIgLU0gcGMgLW5hbWUKPiA+IGd2dGdfZ3Vlc3QiCj4gPiA+ICsg ICAgICAgICAgICIgLWhkYSAlcy5xY293MiAtYmlvcyAlcyAtZW5hYmxlLWt2bSAtLW5ldCBuaWMs bWFjYWRkcj0lcyAtbmV0Igo+ID4gPiArICAgICAgICAgICAiIHRhcCxzY3JpcHQ9L2V0Yy9xZW11 LWlmdXAgLXZnYSBub25lIC1kZXZpY2UgaXNhLXZnYSAtayBlbi11cyIKPiA+ID4gKyAgICAgICAg ICAgIiAtc2VyaWFsIHN0ZGlvIC12bmMgOjEgLW1hY2hpbmUga2VybmVsX2lycWNoaXA9b24gLWds b2JhbCIKPiA+ID4gKyAgICAgICAgICAgIiBQSUlYNF9QTS5kaXNhYmxlX3MzPTEgLWdsb2JhbCBQ SUlYNF9QTS5kaXNhYmxlX3M0PTEgLWNwdSBob3N0Igo+ID4gPiArICAgICAgICAgICAiIC11c2Ig LXVzYmRldmljZSB0YWJsZXQgLWRldmljZSB2ZmlvLXBjaSxzeXNmc2Rldj0iCj4gPiA+ICsgICAg ICAgICAgICIvc3lzL2J1cy9wY2kvZGV2aWNlcy8wMDAwOjAwOjAyLjAvJXMgJiIsCj4gPiA+ICsg ICAgICAgICAgIHFlbXVfcGF0aCwgaGRhX3BhdGgsIGJpb3NfcGF0aCwgbWFjX2FkZHIsIHV1aWQp Owo+ID4gPiArICAgIHN5c3RlbShjcmVhdGVfcWNvd19jbWQpOwo+ID4gPiArICAgIHN5c3RlbShj cmVhdGVfdmdwdV9jbWQpOwo+ID4gPiArICAgIHN5c3RlbShjcmVhdGVfaW5zdGFuY2VfY21kKTsK PiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgZGVzdHJveV9hbGxfZ3Vlc3Qodm9p ZCkKPiA+ID4gK3sKPiA+ID4gKyAgICBzeXN0ZW0oInBraWxsIHFlbXUiKTsKPiA+ID4gK30KPiA+ ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgcmVtb3ZlX3ZncHUodm9pZCkKPiA+ID4gK3sKPiA+ID4g KyAgICBjaGFyIGNtZFsxMjhdID0gezB9Owo+ID4gPiArICAgIHNwcmludGYoY21kLCAiZWNobyAx ID4gL3N5cy9idXMvcGNpL2RldmljZXMvMDAwMDowMDowMi4wLyVzL3JlbW92ZSIsCj4gPiB1dWlk KTsKPiA+ID4gKyAgICBzeXN0ZW0oY21kKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGlj IHZvaWQgZ2VuX21hY19hZGRyKHZvaWQpCj4gPiA+ICt7Cj4gPiA+ICsgICAgdW5zaWduZWQgY2hh ciBtYWNfZW51bVsxNl0gPSB7JzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLAo+ID4g PiArICAgICAgICAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnfTsK PiA+ID4gKyAgICB1bnNpZ25lZCBzaG9ydCBpLCBuID0gMjsKPiA+ID4gKyAgICBzcmFuZChnZXRw aWQoKSk7Cj4gPiA+ICsgICAgZm9yIChpID0gMiwgbiA9IDI7IGkgPCAxNTsgaSsrLCBuKyspIHsK PiA+ID4gKyAgICAgICAgaWYgKG1hY19hZGRyW25dICE9ICc6Jykgewo+ID4gPiArICAgICAgICAg ICAgbWFjX2FkZHJbbl0gPSBtYWNfZW51bVtSQU5ET00oMTYpXTsKPiA+ID4gKyAgICAgICAgfQo+ ID4gPiArICAgIH0KPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgZ2VuX3V1aWQo dm9pZCkKPiA+ID4gK3sKPiA+ID4gKyAgICBzdXBlcl9zeXN0ZW0oInV1aWRnZW4iLCB1dWlkLCBz aXplb2YodXVpZCkpOyB9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBjaGFyICpmZXRjaF9pcF9ieV9t YWModW5zaWduZWQgY2hhciAqbWFjKSB7Cj4gPiA+ICsgICAgY2hhciBjbWRbMTAyNF0gPSB7MH07 Cj4gPiA+ICsgICAgc3ByaW50ZihjbWQsICJhcnAtc2NhbiAtbCAtSSAkKGlwIGFkZHIgc2hvd3xn cmVwIGluZXR8Z3JlcCBnbG9iYWx8Igo+ID4gPiArICAgICAgICAiYXdrICd7cHJpbnQgJE5GO30n KXxncmVwIC1pICVzfGF3ayAne3ByaW50ICQxfSciLCBtYWMpOwo+ID4gPiArICAgIHN1cGVyX3N5 c3RlbShjbWQsIGd1ZXN0X2lwLCBzaXplb2YoZ3Vlc3RfaXApKTsKPiA+ID4gKyAgICByZXR1cm4g Z3Vlc3RfaXA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgY2hlY2tfZ3Vlc3Rf aXAodm9pZCkKPiA+ID4gK3sKPiA+ID4gKyAgICBpbnQgdGltZW91dCA9IDA7Cj4gPiA+ICsgICAg d2hpbGUgKHRpbWVvdXQgPD0gMTIpIHsKPiA+ID4gKyAgICAgICAgaWd0X2luZm8oIlRyeSB0byBj b25ubmVjdCBndWVzdCx0aGUgJWQgdGltZS5cbiIsIHRpbWVvdXQpOwo+ID4gPiArICAgICAgICBp ZiAodGltZW91dCA9PSAxMikgewo+ID4gPiArICAgICAgICAgICAgaWd0X2luZm8oIkNhbm5vdCBj b25uZWN0IHRvIGd1ZXN0LlxuIik7Cj4gPiA+ICsgICAgICAgICAgICByZXR1cm4gMTsKPiA+ID4g KyAgICAgICAgICAgIGJyZWFrOwo+ID4gPiArICAgICAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICAg ICAgZmV0Y2hfaXBfYnlfbWFjKG1hY19hZGRyKTsKPiA+ID4gKwo+ID4gPiArICAgICAgICBpZiAo Z3Vlc3RfaXBbMF0gIT0gJ1wwJykgewo+ID4gPiArICAgICAgICAgICAgaWd0X2luZm8oIkZldGNo ZWQgZ3Vlc3QgaXAgYWRkcmVzczogJXMuXG4iLCBndWVzdF9pcCk7Cj4gPiA+ICsgICAgICAgICAg ICBicmVhazsKPiA+ID4gKyAgICAgICAgfQo+ID4gPiArICAgICAgICB0aW1lb3V0Kys7Cj4gPiA+ ICsgICAgICAgIHNsZWVwKDUpOwo+ID4gPiArICAgIH0KPiA+ID4gKyAgICByZXR1cm4gMDsKPiA+ ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgY2xlYXJfZG1lc2codm9pZCkKPiA+ID4g K3sKPiA+ID4gKyAgICBzeXN0ZW0oImRtZXNnIC1jIik7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4g K3N0YXRpYyBpbnQgY2hlY2tfZG1lc2codm9pZCkKPiA+ID4gK3sKPiA+ID4gKyAgICBjaGFyIGVy cm9ybG9nW1BBVEhfTUFYXSA9IHswfTsKPiA+ID4gKwo+ID4gPiArICAgIHN1cGVyX3N5c3RlbSgi ZG1lc2d8Z3JlcCAtRSBcIkdQVSBIQU5HfGdmeCByZXNldHxCVUdcIiIsIGVycm9ybG9nLAo+ID4g PiArICAgICAgICAgICAgc2l6ZW9mKGVycm9ybG9nKSk7Cj4gPiA+ICsKPiA+ID4gKyAgICBpZiAo ZXJyb3Jsb2dbMF0gPT0gJ1wwJykgewo+ID4gPiArICAgICAgICByZXR1cm4gMDsKPiA+ID4gKyAg ICB9IGVsc2Ugewo+ID4gPiArICAgICAgICByZXR1cm4gMTsKPiA+ID4gKyAgICB9Cj4gPiA+ICt9 Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBjb25zdCBjaGFyIG9wdHN0cltdID0gImgiOwo+ID4gPiAr Cj4gPiA+ICtzdGF0aWMgdm9pZCBwcmludF9oZWxwKHZvaWQpCj4gPiA+ICt7Cj4gPiA+ICsgICAg aWd0X2luZm8oIlxuIFtvcHRpb25zXVxuIgo+ID4gPiArICAgICAgICAgICItaCwgLS1oZWxwICAg ICBkaXNwbGF5IHVzYWdlXG4iCj4gPiA+ICsgICAgICAgICAgIi1xLCAtLXFlbXUgICAgIHRoZSBx ZW11IHBhdGhcbiIKPiA+ID4gKyAgICAgICAgICAiLWEsIC0taGRhICAgICAgdGhlIGhkYSByYXcg aW1hZ2UgLyBxY293IHBhdGhcbiIKPiA+ID4gKyAgICAgICAgICAiLWIsIC0tYmlvcyAgICAgdGhl IHNlYWJpb3MgcGF0aFxuXG4iCj4gPiA+ICsgICAgICAgICAgKTsKPiA+ID4gK30KPiA+ID4gKwo+ ID4gPiArc3RhdGljIHZvaWQgYXJnX21pc21hdGNoKHZvaWQpCj4gPiA+ICt7Cj4gPiA+ICsgICAg aWd0X2luZm8oIiBhcmd1bWVudCBtaXNtYXRjaCFcbiIpOyB9Cj4gPiA+ICsKPiA+ID4gK2ludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKPiA+IAo+ID4gVGhhdCdzIG5vdCBhbiBpZ3QgdGVz dGNhc2UsIGFuZCBpZiB5b3UnZCBydW4gd2l0aCB0aGUgdGVzdHJ1bm5lciBpdCB0aGVuIGl0J2Qg Z28KPiA+IGJvb20uIEFnYWluIEknbSBub3QgcmVhbGx5IHN1cmUgd2h5IHRoaXMgbmVlZHMgdG8g YmUgYW4gaWd0IHRlc3RjYXNlLCBzaW5jZSB0aGUKPiA+IGVudGlyZSBzZXR1cCBpcyBxdWl0ZSBp bnZvbHZlZCwgYW5kIGl0IG5lZWRzIHZlcnkgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyB0byBydW4K PiA+IHByb3Blcmx5Lgo+ID4gCj4gPiBJIGd1ZXNzIG1lcmdpbmcgdGhpcyB0byBpZ3QgbWFrZXMg c29tZSBzZW5zZSwgYnV0IHByb2JhYmx5IGJldHRlciBhcyBhIGZyZWUtCj4gPiBzdGFuZGluZyB0 b28gb3Igc29tZXRoaW5nIHNpbWlsYXIuCj4gPiAtRGFuaWVsCj4gCj4gW1h1LCBUZXJyZW5jZV0g SGkgRGFuaWVsLCBzaW5jZSB0aGUgR1ZULWcgaXMgdXBzdHJlYW1lZCBhbmQgdGhlIEdWVC1nCj4g ZmVhdHVyZSB0ZXN0aW5nIHdpbGwgYmUgbWVyZ2VkIHRvIGk5MTUgQ0kgc3lzdGVtLCBzbyB3ZSBt dXN0IG1lcmdlZCB0aGlzCj4gdG8gSUdUIEFTQVAsIGFuZCBpdCBpcyBhbHNvIE9LIHRvIHByb3Zp ZGUgdGhlIHNldHVwIGd1aWRlIHRvIElHVCAoT25seQo+IG5lZWQgdG8gcHJvdmlkZSBRZW11LCBT ZWFiaW9zLCBndWVzdCBpbWFnZSkgd2l0aG91dCBhbnkgZXh0cmEgY2hhbmdlIGZvcgo+IExpbnV4 IEtlcm5lbC4KPiAKPiBJdCBpcyBwcmV0dHkgZ29vZCB0byBtZXJnZSBpdCB0byBpZ3QgYXMgYSB0 ZXN0IGNhc2UgZGlyZWN0bHksIGJ1dCBpZiBhcwo+IGEgZnJlZS1zdGFuZGluZyB0b29sIGlzIGFs c28gT0ssIGFueSBzdWdnZXN0aW9uIGZvciBpZiBtZXJnZSBpdCBhcyBhCj4gdG9vbD8gQ3JlYXRl IGEgbmV3IGZvbGRlcj8KCmlndCBpc24ndCBvdXIgaW50ZWwtb25seSBwbGF5Z3JvdW5kIGFueW1v cmUsIHdoaWNoIG1lYW5zIGlmIHlvdSBuZWVkIHRvCnByb3ZpZGUgc2V0dXAgaW5zdHJ1Y3Rpb25z IHRvIG1ha2UgeW91ciB0ZXN0Y2FzZSB3b3JrLCB0aGVuIGl0J3Mgbm90CmFjY2VwdGFibGUuCgpJ dCBuZWVkcyB0byBhdCBsZWFzdCB1c2UgaWd0IGluZnJhc3RydWN0dXJlIGxpa2UgaWd0X21haW4s IGl0IG5lZWRzIHRvCmNvcnJlY3RseSBkZXRlY3Qmc2tpcCB3aGVuIGl0J3Mgbm90IHJ1bm5pbmcg b24gZ3Z0LWcgY2FwYWJsZSBoYXJkd2FyZSBhbmQKa2VybmVscywgYW5kIGl0IG5lZWRzIHRvIGF1 dG8tZGV0ZWN0IHRoZSBzZXR1cCBzdHVmZiBhbmQgYWdhaW4gY29ycmVjdGx5CnNraXAgd2hlbiB0 aGF0J3Mgbm90IHRoZXJlLgoKSW4gdGhlIGVuZCB5b3VyIHRlc3QgbXVzdCBiZSBhYmxlIHRvIHJ1 biBvbiBlLmcuIGFtZCBtYWNoaW5lcywgd2l0aG91dApjcmFzaGluZyBvciBmYWlsaW5nLgoKPiA+ ID4gK3sKPiA+ID4gKyAgICBpbnQgb3B0ID0gLTE7Cj4gPiA+ICsgICAgY29uc3QgY2hhciAqb3B0 c3RyaW5nID0gImhxOmE6YjoiOwo+ID4gPiArICAgIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdf b3B0aW9uc1tdID0gewo+ID4gPiArICAgICAgICB7ImhlbHAiLCAwLCBOVUxMLCAnaCd9LAo+ID4g PiArICAgICAgICB7InFlbXUiLCAxLCBOVUxMLCAncSd9LAo+ID4gPiArICAgICAgICB7ImhkYSIs ICAxLCBOVUxMLCAnYSd9LAo+ID4gPiArICAgICAgICB7ImJpb3MiLCAxLCBOVUxMLCAnYid9LAo+ ID4gPiArICAgICAgICB7MCwgMCwgMCwgMH0KPiA+ID4gKyAgICB9OwoKQnV0IGF0bSB5b3VyIHRl c3QgZXZlbiByZWludmVudHMgb3B0aW9uIHBhcnNpbmcsIGZvciB3aGljaCB3ZSBhbHNvIGhhdmUK aGVscGVycy4gU28gbmVlZHMgc29tZSBzZXJpb3VzIHdvcmsgYmVmb3JlIGl0IGNhbiBiZSBtZXJn ZWQuCgpJIHN0aWxsIHBlcnNvbmFsbHkgZGlzYWdyZWUgdGhhdCBndnQgdGVzdGluZyBuZWVkcyB0 byBiZSBkb25lIGluIG91cgpvdmVyYWxsIENJOiBQYXRjaHdvcmsgc3VwcG9ydHMgbXVsdGlwbGUg ZGlmZmVyZW50IENJLCBzbyB0aGVyZSdzIG5vIGlzc3VlCndpdGggaW50ZWdyYXRpbmcgdGhpcyBv biB5b3VyIHNpZGUuIEFuZCBpdCdzIGFsc28gbm90IHJlYWxseSB0aGUgYmxvY2tlcgpmb3IgbWVy Z2luZyB0aGlzIHRlc3RjYXNlL3Rvb2wuCi1EYW5pZWwKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdh cmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=