From mboxrd@z Thu Jan 1 00:00:00 1970 From: Namhyung Kim Subject: Re: [PATCH 6/7] qemu: Implement virtio-pstore device Date: Thu, 28 Jul 2016 14:39:53 +0900 Message-ID: <20160728053953.GB4371@sejong> References: <1469632111-23260-1-git-send-email-namhyung@kernel.org> <1469632111-23260-7-git-send-email-namhyung@kernel.org> <20160728023254-mutt-send-email-mst@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Tony Luck , Kees Cook , kvm@vger.kernel.org, Radim =?utf-8?B?S3LEjW3DocWZ?= , Anton Vorontsov , LKML , Steven Rostedt , qemu-devel@nongnu.org, Minchan Kim , Anthony Liguori , Colin Cross , Paolo Bonzini , virtualization@lists.linux-foundation.org, Ingo Molnar To: "Michael S. Tsirkin" Return-path: In-Reply-To: <20160728023254-mutt-send-email-mst@kernel.org> Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: kvm.vger.kernel.org T24gVGh1LCBKdWwgMjgsIDIwMTYgYXQgMDM6MDI6NTRBTSArMDMwMCwgTWljaGFlbCBTLiBUc2ly a2luIHdyb3RlOgo+IE9uIFRodSwgSnVsIDI4LCAyMDE2IGF0IDEyOjA4OjMwQU0gKzA5MDAsIE5h bWh5dW5nIEtpbSB3cm90ZToKPiA+IEFkZCB2aXJ0aW8gcHN0b3JlIGRldmljZSB0byBhbGxvdyBr ZXJuZWwgbG9nIGZpbGVzIHNhdmVkIG9uIHRoZSBob3N0Lgo+ID4gSXQgd2lsbCBzYXZlIHRoZSBs b2cgZmlsZXMgb24gdGhlIGRpcmVjdG9yeSBnaXZlbiBieSBwc3RvcmUgZGV2aWNlCj4gPiBvcHRp b24uCj4gPiAKPiA+ICAgJCBxZW11LXN5c3RlbS14ODZfNjQgLWRldmljZSB2aXJ0aW8tcHN0b3Jl LGRpcmVjdG9yeT1kaXIteHggLi4uCj4gPiAKPiA+ICAgKGd1ZXN0KSAjIGVjaG8gYyA+IC9wcm9j L3N5c3JxLXRyaWdnZXIKPiAKPiBTbyBpZiB0aGUgcG9pbnQgaXMgaGFuZGxpbmcgc3lzdGVtIGNy YXNoZXMsIEkgc3VzcGVjdAo+IHZpcnRpbyBpcyB0aGUgd3JvbmcgcHJvdG9jb2wgdG8gdXNlLiBB VE0gaXQncyByYXRoZXIKPiBlbGFib3JhdGUgZm9yIHBlcmZvcm1hbmNlLCBpdCdzIGxpa2VseSBu b3QgdG8gd29yayB3aGVuCj4gbGludXggaXMgY3Jhc2hpbmcuIEkgdGhpbmsgeW91IHdhbnQgc29t ZXRoaW5nIHZlcnkgdmVyeQo+IHNpbXBsZSB0aGF0IHdpbGwgc3RpbGwgd29yayB3aGVuIHlvdSBj cmFzaC4gTGlrZSBtYXliZQo+IGEgc2VyaWFsIGRldmljZT8KCldlbGwsIEkgZG9udCcga25vdy4g IEFzIHlvdSBrbm93LCB0aGUga2VybmVsIG9vcHMgZHVtcCBpcyBhbHJlYWR5IHNlbnQKdG8gc2Vy aWFsIGRldmljZSBidXQgaXQncyByYXRoZXIgc2xvdy4gIEFzIEkgd3JvdGUgaW4gdGhlIGNvdmVy CmxldHRlciwgZW5hYmxpbmcgZnRyYWNlX2R1bXBfb25fb29wcyBtYWtlcyBpdCBldmVuIHdvcnNl Li4gIEFsc28KcHN0b3JlIHNhdmVzIHRoZSAoY29tcHJlc3NlZCkgYmluYXJ5IGRhdGEgc28gSSB0 aG91Z2h0IGl0J2QgYmUgYmV0dGVyCnRvIGhhdmUgYSBkZWRpY2F0ZWQgSU8gY2hhbm5lbC4KCkkg a25vdyB0aGF0IHdlIGNhbid0IHJlbHkgb24gYW55dGhpbmcgaW4ga2VybmVsIHdoZW4gdGhlIGtl cm5lbCBpcwpjcmFzaGluZy4gIEluIHRoZSB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudCwgSSB0 aGluayBpdCdkIGJlIGdyZWF0IGlmCml0IGNhbiBkdW1wIHRoZSBjcmFzaCBkYXRhIGluIHRoZSBo b3N0IGRpcmVjdGx5IHNvIEkgY2hvc2UgdGhlIHZpcnRpby4KSSB0aG91Z2h0IHRoZSB2aXJ0aW8g aXMgYSByZWxhdGl2ZWx5IHRoaW4gbGF5ZXIgYW5kIGluZGVwZW5kZW50IGZyb20Kb3RoZXIga2Vy bmVsIGZlYXR1cmVzLiAgRXZlbiBpZiBpdCBkb2Vzbid0IGd1YXJhbnRlZSB0byB3b3JrIDEwMCUs Cml0J3Mgd29ydGggdHJ5aW5nIElNSE8uCgoKPiAKPiA+ICAgJCBscyBkaXIteHgKPiA+ICAgZG1l c2ctMS5lbmMueiAgZG1lc2ctMi5lbmMuego+ID4gCj4gPiBUaGUgbG9nIGZpbGVzIGFyZSB1c3Vh bGx5IGNvbXByZXNzZWQgdXNpbmcgemxpYi4gIFVzZXJzIGNhbiBzZWUgdGhlIGxvZwo+ID4gbWVz c2FnZXMgZGlyZWN0bHkgb24gdGhlIGhvc3Qgb3Igb24gdGhlIGd1ZXN0ICh1c2luZyBwc3RvcmUg ZmlsZXN5c3RlbSkuCj4gCj4gU28gdGhpcyBsYWNrcyBhbGwgbWFuYWdlbWVudCB0b29scyB0aGF0 IGEgcmVndWxhciBzdG9yYWdlIGRldmljZQo+IGhhcywgYW5kIHRoZXNlIGFyZSBuZWNlc3Nhcnkg aWYgcGVvcGxlIGFyZSB0byB1c2UgdGhpcwo+IGluIHByb2R1Y3Rpb24uCj4gCj4gRm9yIGV4YW1w bGUsIHNvbWUga2luZCBvZiBwcm92aXNpb24gZm9yIGxpbWl0aW5nIHRoZSBhbW91bnQgb2YgaG9z dCBkaXNrCj4gdGhpcyBjYW4gY29uc3VtZSBzZWVtcyBjYWxsZWQgZm9yLiBSYXRlLWxpbWl0aW5n IGRpc2sgd3JpdGVzCj4gb24gaG9zdCBhbHNvIHNlZW1zIG5lY2Vzc2FyeS4gSGFuZGxpbmcgaG9z dCBkaXNrIGVycm9ycyBhbHdheXMKPiBwcm9wYWdhdGVzIGVycm9yIHRvIGd1ZXN0IGJ1dCBhbiBv cHRpb24gdG8gZS5nLiBzdG9wIHZtIG1pZ2h0Cj4gYmUgdXNlZnVsIHRvIGF2b2lkIGNvcnJ1cHRp b24uCgpZZXMsIGl0IG5lZWRzIHRoYXQga2luZCBvZiBtYW5hZ2VtZW50LiAgSSdkIGxpa2UgdG8g bG9vayBhdCB0aGUKZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uICBCdXQgYmFzaWNhbGx5IEkgdGhv dWdodCBpdCBhcyBhIGRlYnVnZ2luZwpmZWF0dXJlIGFuZCBpdCB3b24ndCBwcm9kdWNlIG11Y2gg ZGF0YSBmb3IgdGhlIGRlZmF1bHQgc2V0dGluZy4gIE1heWJlCkkgY2FuIGxpbWl0IHRoZSBmaWxl IHNpemUgbm90IHRvIGV4Y2VlZCB0aGUgYnVmZmVyIHNpemUgYW5kIGtlZXAgdXAgdG8KcHJlLWNv bmZpZ3VyZWQgbnVtYmVyIG9mIGZpbGVzIGZvciBlYWNoIHR5cGUuICBOb3cgaG9zdCBkaXNrIGVy cm9yCndpbGwgYmUgcHJvcGFnYXRlZCB0byBndWVzdC4KCgo+IAo+ID4gCj4gPiBUaGUgJ2RpcmVj dG9yeScgcHJvcGVydHkgaXMgcmVxdWlyZWQgZm9yIHZpcnRpby1wc3RvcmUgZGV2aWNlIHRvIHdv cmsuCj4gPiBJdCBhbHNvIGFkZHMgJ2J1ZnNpemUnIGFuZCAnY29uc29sZScgKGJvb2xlYW4pIHBy b3BlcnRpZXMuCj4gCj4gTm8gaWRlYSB3aGF0IHRoZXNlIGRvLiBTZWVtIHRvIGJlIFJXIGJ5IGd1 ZXN0IGJ1dCBoYXZlIG5vIGVmZmVjdAo+IG90aGVyd2lzZS4KClRoZSAnZGlyZWN0b3J5JyBpcyBh IHBhdGhuYW1lIHdoaWNoIGl0IHNhdmVzIHRoZSBkYXRhIGZpbGVzLiAgVGhlCididWZzaXplJyBz ZXRzIHRoZSBzaXplIG9mIGJ1ZmZlciB1c2VkIGJ5IHBzdG9yZS4gIFRoZSAnY29uc29sZScKZW5h YmxlcyBzYXZpbmcgcHN0b3JlIGNvbnNvbGUgdHlwZSBkYXRhLgoKCj4gCj4gCj4gPiBDYzogUGFv bG8gQm9uemluaSA8cGJvbnppbmlAcmVkaGF0LmNvbT4KPiA+IENjOiBSYWRpbSBLcsSNbcOhxZkg PHJrcmNtYXJAcmVkaGF0LmNvbT4KPiA+IENjOiAiTWljaGFlbCBTLiBUc2lya2luIiA8bXN0QHJl ZGhhdC5jb20+Cj4gPiBDYzogQW50aG9ueSBMaWd1b3JpIDxhbGlndW9yaUBhbWF6b24uY29tPgo+ ID4gQ2M6IEFudG9uIFZvcm9udHNvdiA8YW50b25AZW5vbXNnLm9yZz4KPiA+IENjOiBDb2xpbiBD cm9zcyA8Y2Nyb3NzQGFuZHJvaWQuY29tPgo+ID4gQ2M6IEtlZXMgQ29vayA8a2Vlc2Nvb2tAY2hy b21pdW0ub3JnPgo+ID4gQ2M6IFRvbnkgTHVjayA8dG9ueS5sdWNrQGludGVsLmNvbT4KPiA+IENj OiBTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KPiA+IENjOiBJbmdvIE1vbG5h ciA8bWluZ29Aa2VybmVsLm9yZz4KPiA+IENjOiBNaW5jaGFuIEtpbSA8bWluY2hhbkBrZXJuZWwu b3JnPgo+ID4gQ2M6IGt2bUB2Z2VyLmtlcm5lbC5vcmcKPiA+IENjOiBxZW11LWRldmVsQG5vbmdu dS5vcmcKPiA+IENjOiB2aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwo+ ID4gU2lnbmVkLW9mZi1ieTogTmFtaHl1bmcgS2ltIDxuYW1oeXVuZ0BrZXJuZWwub3JnPgo+ID4g LS0tCgpbU05JUF0KPiA+IGRpZmYgLS1naXQgYS9ody92aXJ0aW8vdmlydGlvLXBzdG9yZS5jIGIv aHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGlu ZGV4IDAwMDAwMDAuLjJjYTc3ODYKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2h3L3ZpcnRp by92aXJ0aW8tcHN0b3JlLmMKPiA+IEBAIC0wLDAgKzEsNDc3IEBACj4gPiArLyoKPiA+ICsgKiBW aXJ0aW8gUHN0b3JlIERldmljZQo+ID4gKyAqCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDE2ICBM RyBFbGVjdHJvbmljcwo+ID4gKyAqCj4gPiArICogQXV0aG9yczoKPiA+ICsgKiAgTmFtaHl1bmcg S2ltICA8bmFtaHl1bmdAZ21haWwuY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyB3b3JrIGlzIGxp Y2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLgo+IAo+IFdl IGdlbmVyYWxseSBhc2sgbmV3IGNvZGUgdG8gYmUgdjIgb3IgbGF0ZXIuCgpPaywgd2lsbCB1cGRh dGUuCgoKPiAKPiA+ICBTZWUKPiA+ICsgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2 ZWwgZGlyZWN0b3J5Lgo+ID4gKyAqCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPHN0ZGlv Lmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKPiA+ICsjaW5jbHVkZSAicWVt dS9pb3YuaCIKPiA+ICsjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKPiA+ICsjaW5jbHVkZSAicWVt dS9jdXRpbHMuaCIKPiA+ICsjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKPiA+ICsjaW5j bHVkZSAic3lzZW11L2t2bS5oIgo+ID4gKyNpbmNsdWRlICJxYXBpL3Zpc2l0b3IuaCIKPiA+ICsj aW5jbHVkZSAicWFwaS1ldmVudC5oIgo+ID4gKyNpbmNsdWRlICJ0cmFjZS5oIgo+ID4gKwo+ID4g KyNpbmNsdWRlICJody92aXJ0aW8vdmlydGlvLmgiCj4gPiArI2luY2x1ZGUgImh3L3ZpcnRpby92 aXJ0aW8tYnVzLmgiCj4gPiArI2luY2x1ZGUgImh3L3ZpcnRpby92aXJ0aW8tYWNjZXNzLmgiCj4g PiArI2luY2x1ZGUgImh3L3ZpcnRpby92aXJ0aW8tcHN0b3JlLmgiCj4gPiArCj4gPiArCj4gPiAr c3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV90b19maWxlbmFtZShWaXJ0SU9Qc3RvcmUgKnMsIGNo YXIgKmJ1Ziwgc2l6ZV90IHN6LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHZpcnRpb19wc3RvcmVfcmVxICpyZXEpCj4gPiArewo+ID4gKyAgICBjb25z dCBjaGFyICpiYXNlbmFtZTsKPiA+ICsgICAgdW5zaWduZWQgbG9uZyBsb25nIGlkID0gMDsKPiA+ ICsgICAgdW5zaWduZWQgaW50IGZsYWdzID0gbGUzMl90b19jcHUocmVxLT5mbGFncyk7Cj4gPiAr Cj4gPiArICAgIHN3aXRjaCAobGUxNl90b19jcHUocmVxLT50eXBlKSkgewo+ID4gKyAgICBjYXNl IFZJUlRJT19QU1RPUkVfVFlQRV9ETUVTRzoKPiA+ICsgICAgICAgIGJhc2VuYW1lID0gImRtZXNn IjsKPiA+ICsgICAgICAgIGlkID0gcy0+aWQrKzsKPiA+ICsgICAgICAgIGJyZWFrOwo+ID4gKyAg ICBjYXNlIFZJUlRJT19QU1RPUkVfVFlQRV9DT05TT0xFOgo+ID4gKyAgICAgICAgYmFzZW5hbWUg PSAiY29uc29sZSI7Cj4gPiArICAgICAgICBpZiAocy0+Y29uc29sZV9pZCkgewo+ID4gKyAgICAg ICAgICAgIGlkID0gcy0+Y29uc29sZV9pZDsKPiA+ICsgICAgICAgIH0gZWxzZSB7Cj4gPiArICAg ICAgICAgICAgaWQgPSBzLT5jb25zb2xlX2lkID0gcy0+aWQrKzsKPiA+ICsgICAgICAgIH0KPiA+ ICsgICAgICAgIGJyZWFrOwo+ID4gKyAgICBkZWZhdWx0Ogo+ID4gKyAgICAgICAgYmFzZW5hbWUg PSAidW5rbm93biI7Cj4gPiArICAgICAgICBicmVhazsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAg ICBzbnByaW50ZihidWYsIHN6LCAiJXMvJXMtJWxsdSVzIiwgcy0+ZGlyZWN0b3J5LCBiYXNlbmFt ZSwgaWQsCj4gPiArICAgICAgICAgICAgIGZsYWdzICYgVklSVElPX1BTVE9SRV9GTF9DT01QUkVT U0VEID8gIi5lbmMueiIgOiAiIik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHZpcnRp b19wc3RvcmVfZnJvbV9maWxlbmFtZShWaXJ0SU9Qc3RvcmUgKnMsIGNoYXIgKm5hbWUsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90 IHN6LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg dmlydGlvX3BzdG9yZV9maWxlaW5mbyAqaW5mbykKPiA+ICt7Cj4gPiArICAgIHNucHJpbnRmKGJ1 Ziwgc3osICIlcy8lcyIsIHMtPmRpcmVjdG9yeSwgbmFtZSk7Cj4gCj4gaWYgdGhpcyBkb2VzIG5v dCBmaXQsIGJ1ZiB3aWxsIG5vdCBiZSAwIHRlcm1pbmF0ZWQgYW5kIGNhbgo+IGdlbmVyYWxseSBi ZSBjb3JydXB0ZWQuCgpXaWxsIGNoYW5nZSBpdCB0byB1c2UgbWFsbG9jIGluc3RlYWQuCgo+IAo+ IAo+ID4gKwo+ID4gKyAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeChuYW1lLCAiZG1lc2ctIikpIHsK PiA+ICsgICAgICAgIGluZm8tPnR5cGUgPSBWSVJUSU9fUFNUT1JFX1RZUEVfRE1FU0c7Cj4gPiAr ICAgICAgICBuYW1lICs9IHN0cmxlbigiZG1lc2ctIik7Cj4gPiArICAgIH0gZWxzZSBpZiAoZ19z dHJfaGFzX3ByZWZpeChuYW1lLCAiY29uc29sZS0iKSkgewo+ID4gKyAgICAgICAgaW5mby0+dHlw ZSA9IFZJUlRJT19QU1RPUkVfVFlQRV9DT05TT0xFOwo+ID4gKyAgICAgICAgbmFtZSArPSBzdHJs ZW4oImNvbnNvbGUtIik7Cj4gPiArICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeChuYW1l LCAidW5rbm93bi0iKSkgewo+ID4gKyAgICAgICAgaW5mby0+dHlwZSA9IFZJUlRJT19QU1RPUkVf VFlQRV9VTktOT1dOOwo+ID4gKyAgICAgICAgbmFtZSArPSBzdHJsZW4oInVua25vd24tIik7Cj4g PiArICAgIH0KPiA+ICsKPiA+ICsgICAgcWVtdV9zdHJ0b3VsbChuYW1lLCBOVUxMLCAwLCAmaW5m by0+aWQpOwo+ID4gKwo+ID4gKyAgICBpbmZvLT5mbGFncyA9IDA7Cj4gPiArICAgIGlmIChnX3N0 cl9oYXNfc3VmZml4KG5hbWUsICIuZW5jLnoiKSkgewo+ID4gKyAgICAgICAgaW5mby0+ZmxhZ3Mg fD0gVklSVElPX1BTVE9SRV9GTF9DT01QUkVTU0VEOwo+ID4gKyAgICB9Cj4gPiArfQoKW1NOSVBd Cj4gPiArc3RhdGljIHNzaXplX3QgdmlydGlvX3BzdG9yZV9kb193cml0ZShWaXJ0SU9Qc3RvcmUg KnMsIHN0cnVjdCBpb3ZlYyAqb3V0X3NnLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IG91dF9udW0sCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXEgKnJlcSkKPiA+ICt7 Cj4gPiArICAgIGNoYXIgcGF0aFtQQVRIX01BWF07Cj4gPiArICAgIGludCBmZDsKPiA+ICsgICAg c3NpemVfdCBsZW47Cj4gPiArICAgIHVuc2lnbmVkIHNob3J0IHR5cGU7Cj4gPiArICAgIGludCBm bGFncyA9IE9fV1JPTkxZIHwgT19DUkVBVDsKPiA+ICsKPiA+ICsgICAgLyogd2UgYWxyZWFkeSBj b25zdW1lIHRoZSByZXEgKi8KPiA+ICsgICAgaW92X2Rpc2NhcmRfZnJvbnQoJm91dF9zZywgJm91 dF9udW0sIHNpemVvZigqcmVxKSk7Cj4gPiArCj4gPiArICAgIHZpcnRpb19wc3RvcmVfdG9fZmls ZW5hbWUocywgcGF0aCwgc2l6ZW9mKHBhdGgpLCByZXEpOwo+ID4gKwo+ID4gKyAgICB0eXBlID0g bGUxNl90b19jcHUocmVxLT50eXBlKTsKPiA+ICsKPiA+ICsgICAgaWYgKHR5cGUgPT0gVklSVElP X1BTVE9SRV9UWVBFX0RNRVNHKSB7Cj4gPiArICAgICAgICBmbGFncyB8PSBPX1RSVU5DOwo+ID4g KyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gVklSVElPX1BTVE9SRV9UWVBFX0NPTlNPTEUpIHsKPiA+ ICsgICAgICAgIGZsYWdzIHw9IE9fQVBQRU5EOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGZk ID0gb3BlbihwYXRoLCBmbGFncywgMDY0NCk7Cj4gPiArICAgIGlmIChmZCA8IDApIHsKPiA+ICsg ICAgICAgIGVycm9yX3JlcG9ydCgiY2Fubm90IG9wZW4gJXMiLCBwYXRoKTsKPiA+ICsgICAgICAg IHJldHVybiAtMTsKPiA+ICsgICAgfQo+ID4gKyAgICBsZW4gPSB3cml0ZXYoZmQsIG91dF9zZywg b3V0X251bSk7Cj4gPiArICAgIGNsb3NlKGZkKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIGxlbjsK PiAKPiBBbGwgdGhpcyBpcyBibG9ja2luZyBWTSB1bnRpbCBob3N0IGlvIGNvbXBsZXRlcy4KCkht bS4uIEkgZG9uJ3Qga25vdyBhYm91dCB0aGUgaW50ZXJuYWxzIG9mIHFlbXUuICBTbyBkb2VzIGl0 IG1ha2UgZ3Vlc3QKc3RvcD8gIElmIHNvLCB0aGF0J3Mgd2hhdCBJIHdhbnQgdG8gZG8gZm9yIF9E TUVTRy4gOikgIEFzIGl0J3MgY2FsbGVkCm9ubHkgb24ga2VybmVsIG9vcHMgSSB0aGluayBpdCdz IGFkbWl0dGFibGUuICBCdXQgZm9yIF9DT05TT0xFLCBpdApuZWVkcyB0byBkbyBhc3luY2hyb25v dXNseS4gIE1heWJlIEkgY2FuIGFkZCBhIHRocmVhZCB0byBkbyB0aGUgd29yay4KCgo+IAo+IAo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVfdCB2aXJ0aW9fcHN0b3JlX2RvX2Nsb3NlKFZp cnRJT1BzdG9yZSAqcykKPiA+ICt7Cj4gPiArICAgIGlmIChzLT5kaXJwID09IE5VTEwpIHsKPiA+ ICsgICAgICAgIHJldHVybiAwOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGNsb3NlZGlyKHMt PmRpcnApOwo+ID4gKyAgICBzLT5kaXJwID0gTlVMTDsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IHZpcnRpb19wc3RvcmVfZG9fZXJhc2Uo VmlydElPUHN0b3JlICpzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHZpcnRpb19wc3RvcmVfcmVxICpyZXEpCj4gPiArewo+ID4gKyAgICBjaGFyIHBh dGhbUEFUSF9NQVhdOwo+ID4gKwo+ID4gKyAgICB2aXJ0aW9fcHN0b3JlX3RvX2ZpbGVuYW1lKHMs IHBhdGgsIHNpemVvZihwYXRoKSwgcmVxKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIHVubGluayhw YXRoKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9oYW5kbGVf aW8oVmlydElPRGV2aWNlICp2ZGV2LCBWaXJ0UXVldWUgKnZxKQo+ID4gK3sKPiA+ICsgICAgVmly dElPUHN0b3JlICpzID0gVklSVElPX1BTVE9SRSh2ZGV2KTsKPiA+ICsgICAgVmlydFF1ZXVlRWxl bWVudCAqZWxlbTsKPiA+ICsgICAgc3RydWN0IHZpcnRpb19wc3RvcmVfcmVxIHJlcTsKPiA+ICsg ICAgc3RydWN0IHZpcnRpb19wc3RvcmVfcmVzIHJlczsKPiA+ICsgICAgc3NpemVfdCBsZW4gPSAw Owo+ID4gKyAgICBpbnQgcmV0Owo+ID4gKwo+ID4gKyAgICBmb3IgKDs7KSB7Cj4gPiArICAgICAg ICBlbGVtID0gdmlydHF1ZXVlX3BvcCh2cSwgc2l6ZW9mKFZpcnRRdWV1ZUVsZW1lbnQpKTsKPiA+ ICsgICAgICAgIGlmICghZWxlbSkgewo+ID4gKyAgICAgICAgICAgIHJldHVybjsKPiA+ICsgICAg ICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGlmIChlbGVtLT5vdXRfbnVtIDwgMSB8fCBlbGVtLT5p bl9udW0gPCAxKSB7Cj4gPiArICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJyZXF1ZXN0IG9yIHJl c3BvbnNlIGJ1ZmZlciBpcyBtaXNzaW5nIik7Cj4gPiArICAgICAgICAgICAgZXhpdCgxKTsKPiA+ ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgIGxlbiA9IGlvdl90b19idWYoZWxlbS0+b3V0 X3NnLCBlbGVtLT5vdXRfbnVtLCAwLCAmcmVxLCBzaXplb2YocmVxKSk7Cj4gPiArICAgICAgICBp ZiAobGVuICE9IChzc2l6ZV90KXNpemVvZihyZXEpKSB7Cj4gPiArICAgICAgICAgICAgZXJyb3Jf cmVwb3J0KCJpbnZhbGlkIHJlcXVlc3Qgc2l6ZTogJWxkIiwgKGxvbmcpbGVuKTsKPiA+ICsgICAg ICAgICAgICBleGl0KDEpOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICAgICAgcmVzLmNtZCAgPSBy ZXEuY21kOwo+ID4gKyAgICAgICAgcmVzLnR5cGUgPSByZXEudHlwZTsKPiA+ICsKPiA+ICsgICAg ICAgIHN3aXRjaCAobGUxNl90b19jcHUocmVxLmNtZCkpIHsKPiA+ICsgICAgICAgIGNhc2UgVklS VElPX1BTVE9SRV9DTURfT1BFTjoKPiA+ICsgICAgICAgICAgICByZXQgPSB2aXJ0aW9fcHN0b3Jl X2RvX29wZW4ocyk7Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICBjYXNlIFZJ UlRJT19QU1RPUkVfQ01EX1JFQUQ6Cj4gPiArICAgICAgICAgICAgcmV0ID0gdmlydGlvX3BzdG9y ZV9kb19yZWFkKHMsIGVsZW0tPmluX3NnLCBlbGVtLT5pbl9udW0sICZyZXMpOwo+ID4gKyAgICAg ICAgICAgIGlmIChyZXQgPiAwKSB7Cj4gPiArICAgICAgICAgICAgICAgIGxlbiA9IHJldDsKPiA+ ICsgICAgICAgICAgICAgICAgcmV0ID0gMDsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArICAgICAg ICAgICAgYnJlYWs7Cj4gPiArICAgICAgICBjYXNlIFZJUlRJT19QU1RPUkVfQ01EX1dSSVRFOgo+ ID4gKyAgICAgICAgICAgIHJldCA9IHZpcnRpb19wc3RvcmVfZG9fd3JpdGUocywgZWxlbS0+b3V0 X3NnLCBlbGVtLT5vdXRfbnVtLCAmcmVxKTsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsg ICAgICAgIGNhc2UgVklSVElPX1BTVE9SRV9DTURfQ0xPU0U6Cj4gPiArICAgICAgICAgICAgcmV0 ID0gdmlydGlvX3BzdG9yZV9kb19jbG9zZShzKTsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ ICsgICAgICAgIGNhc2UgVklSVElPX1BTVE9SRV9DTURfRVJBU0U6Cj4gPiArICAgICAgICAgICAg cmV0ID0gdmlydGlvX3BzdG9yZV9kb19lcmFzZShzLCAmcmVxKTsKPiA+ICsgICAgICAgICAgICBi cmVhazsKPiA+ICsgICAgICAgIGRlZmF1bHQ6Cj4gPiArICAgICAgICAgICAgcmV0ID0gLTE7Cj4g PiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICBy ZXMucmV0ICA9IHJldDsKPiA+ICsKPiA+ICsgICAgICAgIGlvdl9mcm9tX2J1ZihlbGVtLT5pbl9z ZywgZWxlbS0+aW5fbnVtLCAwLCAmcmVzLCBzaXplb2YocmVzKSk7Cj4gPiArICAgICAgICB2aXJ0 cXVldWVfcHVzaCh2cSwgZWxlbSwgc2l6ZW9mKHJlcykgKyBsZW4pOwo+IAo+IHRoaXMgaXMgd3Jv bmcgLSBsZW4gc2hvdWxkIGJlICMgb2YgYnl0ZXMgd3JpdHRlbiBpbnRvIGd1ZXN0IG1lbW9yeS4K Cj8/PwoKQWxsIGNvbW1hbmQgZXhjZXB0IFJFQUQgb25seSB3cml0ZSB0aGUgdmlydGlvX3BzdG9y ZV9yZXQgc28gbGVuIGlzIDAuCkZvciBSRUFELCB2aXJ0aW9fcHN0b3JlX2RvX3JlYWQoKSByZXR1 cm5zIHRoZSBhY3R1YWwgYnl0ZXMgaXQgd3JvdGUKKG1pbnVzIHNpemVvZihyZXMpIG9mIGNvdXJz ZSksIHNvIEkgdGhpbmsgaXQncyBmaW5lLCBubz8KCkFueXdheSwgdGhhbmtzIGZvciB5b3VyIHJl dmlldyEKClRoYW5rcywKTmFtaHl1bmcKCgo+IAo+ID4gKwo+ID4gKyAgICAgICAgdmlydGlvX25v dGlmeSh2ZGV2LCB2cSk7Cj4gPiArICAgICAgICBnX2ZyZWUoZWxlbSk7Cj4gPiArCj4gPiArICAg ICAgICBpZiAocmV0IDwgMCkgewo+ID4gKyAgICAgICAgICAgIHJldHVybjsKPiA+ICsgICAgICAg IH0KPiA+ICsgICAgfQo+ID4gK30KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxp c3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u