From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH] tools/intel_guc_logger: Utility for capturing GuC firmware logs in a file Date: Tue, 6 Sep 2016 16:52:00 +0100 Message-ID: <57CEE620.3090600@linux.intel.com> References: <1473158613-12006-1-git-send-email-akash.goel@intel.com> <57CEC1DA.6090009@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 179BB6E02F for ; Tue, 6 Sep 2016 15:52:03 +0000 (UTC) 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: "Goel, Akash" , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA2LzA5LzE2IDE2OjMzLCBHb2VsLCBBa2FzaCB3cm90ZToKPiBPbiA5LzYvMjAxNiA2OjQ3 IFBNLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPj4gSGksCj4+Cj4+IE9uIDA2LzA5LzE2IDExOjQz LCBha2FzaC5nb2VsQGludGVsLmNvbSB3cm90ZToKPj4+IEZyb206IEFrYXNoIEdvZWwgPGFrYXNo LmdvZWxAaW50ZWwuY29tPgo+Pj4KPj4+IFRoaXMgcGF0Y2ggcHJvdmlkZXMgYSB0ZXN0IHV0aWxp dHkgd2hpY2ggaGVscHMgY2FwdHVyZSBHdUMgZmlybXdhcmUKPj4+IGxvZ3MgYW5kCj4+PiB0aGVu IGR1bXAgdGhlbSB0byBmaWxlLgo+Pj4gVGhlIGxvZ3MgYXJlIHB1bGxlZCBmcm9tIGEgZGVidWdm cyBmaWxlCj4+PiAnL3N5cy9rZXJuZWwvZGVidWcvZHJpL2d1Y19sb2cnIGFuZAo+Pj4gc3RvcmVk IGludG8gYSBmaWxlICcvdG1wL2d1Y19sb2dfZHVtcC5kYXQnLCB0aGUgbmFtZSBvZiB0aGUgb3V0 cHV0Cj4+PiBmaWxlIGNhbgo+Pj4gYmUgY2hhbmdlZCB0aHJvdWdoIGEgY29tbWFuZCBsaW5lIGFy Z3VtZW50Lgo+Pj4KPj4+IFRoZSB1dGlsaXR5IGdvZXMgaW50byBhbiBpbmZpbml0ZSBsb29wIHdo ZXJlIGl0IHdhaXRzIGZvciB0aGUgYXJyaXZhbAo+Pj4gb2YgbmV3Cj4+PiBsb2dzIGFuZCBhcyBz b29uIGFzIG5ldyBzZXQgb2YgbG9ncyBhcmUgcHJvZHVjZWQgaXQgY2FwdHVyZXMgdGhlbSBpbgo+ Pj4gaXRzIGxvY2FsCj4+PiBidWZmZXIgd2hpY2ggaXMgdGhlbiBmbHVzaGVkIG91dCB0byB0aGUg ZmlsZSBvbiBkaXNrLgo+Pj4gQW55IHRpbWUgd2hlbiBsb2dnaW5nIG5lZWRzIHRvIGJlIGVuZGVk LCBVc2VyIGNhbiBzdG9wIHRoaXMgdXRpbGl0eQo+Pj4gKENUUkwrQykuCj4+Pgo+Pj4gQmVmb3Jl IGVudGVyaW5nIGludG8gYSBsb29wLCBpdCBmaXJzdCBkaXNjYXJkcyB3aGF0ZXZlciBsb2dzIGFy ZQo+Pj4gcHJlc2VudCBpbgo+Pj4gdGhlIGRlYnVnZnMgZmlsZS4KPj4+IFRoaXMgd2F5IFVzZXIg Y2FuIGZpcnN0IGxhdW5jaCB0aGlzIHV0aWxpdHkgYW5kIHRoZW4gc3RhcnQgYQo+Pj4gd29ya2xv YWQvYWN0aXZpdHkKPj4+IGZvciB3aGljaCBHdUMgZmlybXdhcmUgbG9ncyBhcmUgdG8gYmUgYWN0 dWFsbHkgY2FwdHVyZWQgYW5kIGtlZXAKPj4+IHJ1bm5pbmcgdGhlCj4+PiB1dGlsaXR5IGZvciBh cyBsb25nIGFzIGl0cyBuZWVkZWQsIGxpa2Ugb25jZSB0aGUgd29ya2xvYWQgaXMgb3ZlciB0aGlz Cj4+PiB1dGlsaXR5Cj4+PiBjYW4gYmUgZm9yY2VmdWxseSBzdG9wcGVkLgo+Pj4KPj4+IElmIHRo ZSBsb2dnaW5nIHdhc24ndCBlbmFibGVkIG9uIEd1QyBzaWRlIGJ5IHRoZSBEcml2ZXIgYXQgYm9v dCB0aW1lLAo+Pj4gdXRpbGl0eQo+Pj4gd2lsbCBmaXJzdCBlbmFibGUgdGhlIGxvZ2dpbmcgYW5k IGxhdGVyIG9uIHdoZW4gaXQgaXMgc3RvcHBlZCAoQ1RSTCtDKQo+Pj4gaXQgd2lsbAo+Pj4gYWxz byBwYXVzZSB0aGUgbG9nZ2luZyBvbiBHdUMgc2lkZS4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBB a2FzaCBHb2VsIDxha2FzaC5nb2VsQGludGVsLmNvbT4KPj4+IC0tLQo+Pj4gICB0b29scy9NYWtl ZmlsZS5zb3VyY2VzICAgfCAgIDEgKwo+Pj4gICB0b29scy9pbnRlbF9ndWNfbG9nZ2VyLmMgfCA0 NDEKPj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ PiAgIDIgZmlsZXMgY2hhbmdlZCwgNDQyIGluc2VydGlvbnMoKykKPj4+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IHRvb2xzL2ludGVsX2d1Y19sb2dnZXIuYwo+Pj4KPj4+IGRpZmYgLS1naXQgYS90b29s cy9NYWtlZmlsZS5zb3VyY2VzIGIvdG9vbHMvTWFrZWZpbGUuc291cmNlcwo+Pj4gaW5kZXggMmJi NmM4ZS4uYmU1ODg3MSAxMDA2NDQKPj4+IC0tLSBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKPj4+ ICsrKyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKPj4+IEBAIC0xOSw2ICsxOSw3IEBAIHRvb2xz X3Byb2dfbGlzdHMgPSAgICAgICAgXAo+Pj4gICAgICAgaW50ZWxfZ3B1X3RpbWUgICAgICAgIFwK Pj4+ICAgICAgIGludGVsX2dwdV90b3AgICAgICAgIFwKPj4+ICAgICAgIGludGVsX2d0dCAgICAg ICAgXAo+Pj4gKyAgICBpbnRlbF9ndWNfbG9nZ2VyICAgICAgICBcCj4+PiAgICAgICBpbnRlbF9p bmZvZnJhbWVzICAgIFwKPj4+ICAgICAgIGludGVsX2wzX3Bhcml0eSAgICAgICAgXAo+Pj4gICAg ICAgaW50ZWxfbGlkICAgICAgICBcCj4+PiBkaWZmIC0tZ2l0IGEvdG9vbHMvaW50ZWxfZ3VjX2xv Z2dlci5jIGIvdG9vbHMvaW50ZWxfZ3VjX2xvZ2dlci5jCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+Pj4gaW5kZXggMDAwMDAwMC4uOTIxNzJmYQo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIv dG9vbHMvaW50ZWxfZ3VjX2xvZ2dlci5jCj4+PiBAQCAtMCwwICsxLDQ0MSBAQAo+Pj4gKwo+Pj4g KyNkZWZpbmUgX0dOVV9TT1VSQ0UgIC8qIEZvciB1c2luZyBPX0RJUkVDVCAqLwo+Pj4gKyNpbmNs dWRlIDxpbnR0eXBlcy5oPgo+Pj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+Pj4gKyNpbmNsdWRlIDxm Y250bC5oPgo+Pj4gKyNpbmNsdWRlIDxzY2hlZC5oPgo+Pj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwu aD4KPj4+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4+PiArI2luY2x1ZGUgPGVycm5vLmg+Cj4+PiAr I2luY2x1ZGUgPHNpZ25hbC5oPgo+Pj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPj4+ICsjaW5jbHVk ZSA8dW5pc3RkLmg+Cj4+PiArI2luY2x1ZGUgPHN5cy9wb2xsLmg+Cj4+PiArI2luY2x1ZGUgPHN5 cy93YWl0Lmg+Cj4+PiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+Pj4gKyNpbmNsdWRlIDxzeXMv c3lzY2FsbC5oPgo+Pj4gKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgo+Pj4gKyNpbmNsdWRlIDxhc3Nl cnQuaD4KPj4+ICsjaW5jbHVkZSA8cHRocmVhZC5oPgo+Pj4gKwo+Pj4gKyNpbmNsdWRlICJpZ3Qu aCIKPj4+ICsKPj4+ICsjZGVmaW5lIE1CKHgpICgodWludDY0X3QpKHgpICogMTAyNCAqIDEwMjQp Cj4+PiArI2lmbmRlZiBQQUdFX1NJWkUKPj4+ICsgICNkZWZpbmUgUEFHRV9TSVpFIDQwOTYKPj4+ ICsjZW5kaWYKPj4+ICsjZGVmaW5lIFNVQkJVRl9TSVpFICgxOSpQQUdFX1NJWkUpCj4+PiArLyog TmVlZCBsYXJnZSBidWZmZXJpbmcgZnJvbSBsb2dnZXIgc2lkZSB0byBoaWRlIHRoZSBESVNLIElP IGxhdGVuY3ksCj4+PiBEcml2ZXIKPj4+ICsgKiBjYW4gb25seSBzdG9yZSA4IHNuYXBzaG90cyBv ZiBHdUMgbG9nIGJ1ZmZlciBpbiByZWxheS4KPj4+ICsgKi8KPj4+ICsjZGVmaW5lIE5VTV9TVUJC VUZTIDEwMAo+Pj4gKwo+Pj4gKyNkZWZpbmUgUkVMQVlfRklMRV9OQU1FICAiZ3VjX2xvZyIKPj4+ ICsjZGVmaW5lIENPTlRST0xfRklMRV9OQU1FICJpOTE1X2d1Y19sb2dfY29udHJvbCIKPj4+ICsK Pj4+ICtjaGFyICpyZWFkX2J1ZmZlcjsKPj4+ICtjaGFyICpvdXRfZmlsZW5hbWU7Cj4+PiAraW50 IHBvbGxfdGltZW91dCA9IDI7IC8qIGJ5IGRlZmF1bHQgMm1zIHRpbWVvdXQgKi8KPj4+ICtwdGhy ZWFkX211dGV4X3QgbXV0ZXg7Cj4+PiArcHRocmVhZF90IGZsdXNoX3RocmVhZDsKPj4+ICtpbnQg dmVyYm9zaXR5X2xldmVsID0gMzsgLyogYnkgZGVmYXVsdCBjYXB0dXJlIGxvZ3MgYXQgbWF4IHZl cmJvc2l0eSAqLwo+Pj4gK3VpbnQzMl90IHByb2R1Y2VkLCBjb25zdW1lZDsKPj4+ICt1aW50NjRf dCB0b3RhbF9ieXRlc193cml0dGVuOwo+Pj4gK2ludCBudW1fYnVmZmVycyA9IE5VTV9TVUJCVUZT Owo+Pj4gK2ludCByZWxheV9mZCwgb3V0ZmlsZV9mZCA9IC0xOwo+Pj4gK2Jvb2wgc3RvcF9sb2dn aW5nLCBkaXNjYXJkX29sZGxvZ3M7Cj4+PiArdWludDMyX3QgdGVzdF9kdXJhdGlvbiwgbWF4X2Zp bGVzaXplOwo+Pj4gK3B0aHJlYWRfY29uZF90IHVuZGVyZmxvd19jb25kLCBvdmVyZmxvd19jb25k Owo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGd1Y19sb2dfY29udHJvbChib29sIGVuYWJsZV9sb2dn aW5nKQo+Pj4gK3sKPj4+ICsgICAgaW50IGNvbnRyb2xfZmQ7Cj4+PiArICAgIGNoYXIgZGF0YVsx OV07Cj4+PiArICAgIHVpbnQ2NF90IHZhbDsKPj4+ICsgICAgaW50IHJldDsKPj4+ICsKPj4+ICsg ICAgY29udHJvbF9mZCA9IGlndF9kZWJ1Z2ZzX29wZW4oQ09OVFJPTF9GSUxFX05BTUUsIE9fV1JP TkxZKTsKPj4+ICsgICAgaWYgKGNvbnRyb2xfZmQgPCAwKQo+Pj4gKyAgICAgICAgaWd0X2Fzc2Vy dF9mKDAsICJDb3VsZG4ndCBvcGVuIHRoZSBndWMgbG9nIGNvbnRyb2wgZmlsZSIpOwo+Pj4gKwo+ Pj4gKyAgICB2YWwgPSBlbmFibGVfbG9nZ2luZyA/ICgodmVyYm9zaXR5X2xldmVsIDw8IDQpIHwg MHgxKSA6IDA7Cj4+PiArCj4+PiArICAgIHNucHJpbnRmKGRhdGEsIHNpemVvZihkYXRhKSwgIjB4 JSIgUFJJeDY0LCB2YWwpOwo+Pj4gKyAgICByZXQgPSB3cml0ZShjb250cm9sX2ZkLCBkYXRhLCBz dHJsZW4oZGF0YSkgKyAxKTsKPj4KPj4gTWlub3I6IEl0IGxvb2tzIHNhZmUgbGlrZSBpdCBpcyBi dXQgc29tZXRoaW5nIGxpa2UgYmVsb3cgd291bGQgbWF5YmUgYmUKPj4gbW9yZSByb2J1c3Q/Cj4+ Cj4+IHJldCA9IHNucHJpbnRmKGRhdGEsIHNpemVvZihkYXRhKSwgIjB4JSIgUFJJeDY0LCB2YWwp Owo+PiBpZ3RfYXNzZXJ0KHJldCA+IDIgJiYgcmV0IDwgc2l6ZW9mKGRhdGEpKTsKPgo+IG9rIHdp bGwgYWRkLCBidXQgcG9zc2liaWxpdHkgb2YgZmFpbHVyZSB3aWxsIGJlIHJlYWxseSByZW1vdGUg aGVyZS4KPiBidXQgaWd0X2Fzc2VydChyZXQgPiAwKSBzaG91bGQgc3VmZmljZS4KClllcyB0aGVy ZSBpcyBubyBwb3NzaWJpbGl0eSBmb3IgZmFpbHVyZSBhcyBpdCBzdGFuZHMsIGp1c3QgbW9yZSBy b2J1c3QgCmltcGxlbWVudGF0aW9uIHNob3VsZCBzb21lb25lIGNoYW5nZSBzb21ldGhpbmcgaW4g dGhlIGZ1dHVyZS4gVGhhdCdzIHdoeSAKSSBzYWlkIHlvdSBjb3VsZCBhbHNvIGRlY2lkZSB0byBr ZWVwIGl0IGFzIGlzLiBNeSB2ZXJzaW9uIGFsc28gYXZvaWRlZCAKdGhlIHN0cmxlbiBzaW5jZSBz bnByaW50ZiBhbHJlYWR5IHRlbGxzIHlvdSB0aGF0LgoKPj4gcmV0ID0gd3JpdGUoY29udHJvbF9m ZCwgZGF0YSwgcmV0KTsKPj4gaWd0X2Fzc2VydChyZXQgPiAwKTsgLy8gYXNzdW1pbmcgc2hvcnQg d3JpdGVzIGNhbid0IGhhcHBlbgo+Pgo+PiBVcCB0byB5b3UuCj4+Cj4+PiArICAgIGlmIChyZXQg PCAwKQo+Pj4gKyAgICAgICAgaWd0X2Fzc2VydF9mKDAsICJDb3VsZG4ndCB3cml0ZSB0byB0aGUg bG9nIGNvbnRyb2wgZmlsZSIpOwo+Pj4gKwo+Pj4gKyAgICBjbG9zZShjb250cm9sX2ZkKTsKPj4+ ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgaW50X3NpZ19oYW5kbGVyKGludCBzaWcpCj4+PiAr ewo+Pj4gKyAgICBpZ3RfaW5mbygiUmVjZWl2ZWQgc2lnbmFsICVkXG4iLCBzaWcpOwo+Pj4gKwo+ Pj4gKyAgICBzdG9wX2xvZ2dpbmcgPSB0cnVlOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9p ZCBwdWxsX2xlZnRvdmVyX2RhdGEodm9pZCkKPj4+ICt7Cj4+PiArICAgIHVuc2lnbmVkIGludCBi eXRlc19yZWFkID0gMDsKPj4+ICsgICAgaW50IHJldDsKPj4+ICsKPj4+ICsgICAgd2hpbGUgKDEp IHsKPj4+ICsgICAgICAgIC8qIFJlYWQgdGhlIGxvZ3MgZnJvbSByZWxheSBidWZmZXIgKi8KPj4+ ICsgICAgICAgIHJldCA9IHJlYWQocmVsYXlfZmQsIHJlYWRfYnVmZmVyLCBTVUJCVUZfU0laRSk7 Cj4+PiArICAgICAgICBpZiAoIXJldCkKPj4+ICsgICAgICAgICAgICBicmVhazsKPj4+ICsgICAg ICAgIGVsc2UgaWYgKHJldCA8IDApCj4+PiArICAgICAgICAgICAgaWd0X2Fzc2VydF9mKDAsICJG YWlsZWQgdG8gcmVhZCBmcm9tIHRoZSBndWMgbG9nIGZpbGUiKTsKPj4+ICsgICAgICAgIGVsc2Ug aWYgKHJldCA8IFNVQkJVRl9TSVpFKQo+Pj4gKyAgICAgICAgICAgIGlndF9hc3NlcnRfZigwLCAi aW52YWxpZCByZWFkIGZyb20gcmVsYXkgZmlsZSIpOwo+Pj4gKwo+Pj4gKyAgICAgICAgYnl0ZXNf cmVhZCArPSByZXQ7Cj4+PiArCj4+PiArICAgICAgICBpZiAob3V0ZmlsZV9mZCA+IDApIHsKPj4K Pj4+ID0gMCBJIHRoaW5rLiBPciBpcyBpdCBldmVuIG5lZWRlZCBzaW5jZSBvcGVuX291dHB1dF9m aWxlIGFzc2VydHMgaWYgaXQKPj4gZmFpbHMgdG8gb3Blbj8KPj4KPiBBY3R1YWxseSBwdWxsX2xl ZnRvdmVyX2RhdGEoKSB3aWxsIGJlIGNhbGxlZCB0d2ljZSwgb25jZSBiZWZvcmUgb3BlbmluZwo+ IHRoZSBvdXRmaWxlLiBUaGlzIGlzIGZvciBwdXJnaW5nIHRoZSBvbGQgbG9ncywgaWYgZW5hYmxl ZC4KCk9oIHJpZ2h0LCBPSyB0aGVuLgoKPgo+Pj4gKyAgICAgICAgICAgIHJldCA9IHdyaXRlKG91 dGZpbGVfZmQsIHJlYWRfYnVmZmVyLCBTVUJCVUZfU0laRSk7Cj4+PiArICAgICAgICAgICAgaWYg KHJldCA8IDApCj4+PiArICAgICAgICAgICAgICAgIGlndF9hc3NlcnRfZigwLCAiQ291bGRuJ3Qg ZHVtcCB0aGUgbG9ncyBpbiBhIGZpbGUiKTsKPj4KPj4gRG8geW91IG5lZWQgdG8gY2hlY2sgZm9y IHNob3J0IHdyaXRlcyBhcyB3ZWxsIGhlcmU/IE1hbiBwYWdlIGZvciB3cml0ZQo+PiBzYXlzIGl0 IGNhbiBoYXBwZW4gd2l0aCBvdXQgb2YgZGlzayBzcGFjZSBvciBzaWduYWxzLgo+Pgo+IFRvIGtl ZXAgdGhpbmdzIHNpbXBsZSBjYW4ganVzdCBjaGVjayAncmV0IDwgU1VCQlVGX1NJWkUnIGNvbnNp ZGVyaW5nCj4gb3V0IG9mIGRpc2sgc3BhY2UgYXMgYSBzZXJpb3VzIGZhaWx1cmUgb3IgYWRkIGEg bG9vcCBoZXJlIHdoaWNoIHdpbGwgcnVuCj4gdW50aWwgU1VCQlVGX1NJWkUgYnl0ZXMgaGF2ZSBi ZWVuIHdyaXR0ZW4uCgpKdXN0IGFzc2VydCwgbm8gcG9pbnQgaW4gY29tcGxpY2F0aW5nIHRoaW5n cy4KCj4+PiArICAgICAgICAgICAgdG90YWxfYnl0ZXNfd3JpdHRlbiArPSByZXQ7Cj4+PiArICAg ICAgICB9Cj4+PiArICAgIH07Cj4+PiArCj4+PiArICAgIGlndF9kZWJ1ZygiJXUgYnl0ZXMgZmx1 c2hlZFxuIiwgYnl0ZXNfcmVhZCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgbnVtX2Zp bGxlZF9idWZzKHZvaWQpCj4+PiArewo+Pj4gKyAgICByZXR1cm4gKHByb2R1Y2VkIC0gY29uc3Vt ZWQpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBwdWxsX2RhdGEodm9pZCkKPj4+ICt7 Cj4+PiArICAgIGNoYXIgKnB0cjsKPj4+ICsgICAgaW50IHJldDsKPj4+ICsKPj4+ICsgICAgcHRo cmVhZF9tdXRleF9sb2NrKCZtdXRleCk7Cj4+PiArICAgIHdoaWxlIChudW1fZmlsbGVkX2J1ZnMo KSA+PSBudW1fYnVmZmVycykgewo+Pj4gKyAgICAgICAgaWd0X2RlYnVnKCJvdmVyZmxvdywgd2ls bCB3YWl0LCBwcm9kdWNlZCAldSwgY29uc3VtZWQgJXVcbiIsCj4+PiBwcm9kdWNlZCwgY29uc3Vt ZWQpOwo+Pj4gKyAgICAgICAgLyogU3RhbGwgdGhlIG1haW4gdGhyZWFkIGluIGNhc2Ugb2Ygb3Zl cmZsb3csIGFzIHRoZXJlIGFyZSBubwo+Pj4gKyAgICAgICAgICogYnVmZmVycyBhdmFpbGFibGUg dG8gc3RvcmUgdGhlIG5ldyBsb2dzLCBvdGhlcndpc2UgdGhlcmUKPj4+ICsgICAgICAgICAqIGNv dWxkIGJlIGNvcnJ1cHRpb24gaWYgYm90aCB0aHJlYWRzIHdvcmsgb24gdGhlIHNhbWUgYnVmZmVy Lgo+Pj4gKyAgICAgICAgICovCj4+PiArICAgICAgICBwdGhyZWFkX2NvbmRfd2FpdCgmb3ZlcmZs b3dfY29uZCwgJm11dGV4KTsKPj4+ICsgICAgfTsKPj4+ICsgICAgcHRocmVhZF9tdXRleF91bmxv Y2soJm11dGV4KTsKPj4+ICsKPj4+ICsgICAgcHRyID0gcmVhZF9idWZmZXIgKyAocHJvZHVjZWQg JSBudW1fYnVmZmVycykgKiBTVUJCVUZfU0laRTsKPj4+ICsKPj4+ICsgICAgLyogUmVhZCB0aGUg bG9ncyBmcm9tIHJlbGF5IGJ1ZmZlciAqLwo+Pj4gKyAgICByZXQgPSByZWFkKHJlbGF5X2ZkLCBw dHIsIFNVQkJVRl9TSVpFKTsKPj4+ICsgICAgaWYgKHJldCA8IDApCj4+PiArICAgICAgICBpZ3Rf YXNzZXJ0X2YoMCwgIkZhaWxlZCB0byByZWFkIGZyb20gdGhlIGd1YyBsb2cgZmlsZSIpOwo+Pj4g KyAgICBlbHNlIGlmIChyZXQgJiYgKHJldCA8IFNVQkJVRl9TSVpFKSkKPj4+ICsgICAgICAgIGln dF9hc3NlcnRfZigwLCAiaW52YWxpZCByZWFkIGZyb20gcmVsYXkgZmlsZSIpOwo+Pj4gKwo+Pj4g KyAgICBwdGhyZWFkX211dGV4X2xvY2soJm11dGV4KTsKPj4+ICsgICAgaWYgKHJldCkgewo+Pj4g KyAgICAgICAgcHJvZHVjZWQrKzsKPj4+ICsgICAgICAgIHB0aHJlYWRfY29uZF9zaWduYWwoJnVu ZGVyZmxvd19jb25kKTsKPj4+ICsgICAgfQo+Pj4gKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygm bXV0ZXgpOwo+Pgo+PiBWZXJ5IG1pbm9yOiBjYW4gbW92ZSB0aGUgbXV0ZXggdW5kZXIgdGhlIGlm Lgo+Pgo+IEZpbmUgd2lsbCBtb3ZlIHVuZGVyIHRoZSAnaWYnLgo+Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyB2b2lkICpmbHVzaGVyKHZvaWQgKmFyZykKPj4+ICt7Cj4+PiArICAgIGNoYXIgKnB0 cjsKPj4+ICsgICAgaW50IHJldDsKPj4+ICsKPj4+ICsgICAgaWd0X2RlYnVnKCJFeGVjdXRpb24g c3RhcnRlZCBvZiBmbHVzaGVyIHRocmVhZFxuIik7Cj4+PiArCj4+PiArICAgIGRvIHsKPj4+ICsg ICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbXV0ZXgpOwo+Pj4gKyAgICAgICAgd2hpbGUgKCFu dW1fZmlsbGVkX2J1ZnMoKSkgewo+Pj4gKyAgICAgICAgICAgIC8qIEV4aXQgb25seSBhZnRlciBj b21wbGV0aW5nIHRoZSBmbHVzaCBvZiBhbGwgdGhlIGZpbGxlZAo+Pj4gKyAgICAgICAgICAgICAq IGJ1ZmZlcnMgYXMgVXNlciB3b3VsZCBleHBlY3QgdGhhdCBhbGwgbG9ncyBjYXB0dXJlZCB1cAo+ Pj4gKyAgICAgICAgICAgICAqIHRpbGwgdGhlIHBvaW50IG9mIGludGVycnVwdGlvbi9leGl0IGFy ZSB3cml0dGVuIG91dCB0bwo+Pj4gKyAgICAgICAgICAgICAqIHRoZSBkaXNrIGZpbGUuCj4+PiAr ICAgICAgICAgICAgICovCj4+PiArICAgICAgICAgICAgaWYgKHN0b3BfbG9nZ2luZykgewo+Pj4g KyAgICAgICAgICAgICAgICBpZ3RfZGVidWcoImZsdXNoZXIgdG8gZXhpdCBub3dcbiIpOwo+Pj4g KyAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbXV0ZXgpOwo+Pj4gKyAgICAg ICAgICAgICAgICByZXR1cm4gTlVMTDsKPj4+ICsgICAgICAgICAgICB9Cj4+PiArICAgICAgICAg ICAgcHRocmVhZF9jb25kX3dhaXQoJnVuZGVyZmxvd19jb25kLCAmbXV0ZXgpOwo+Pj4gKyAgICAg ICAgfTsKPj4+ICsgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleCk7Cj4+PiArCj4+ PiArICAgICAgICBwdHIgPSByZWFkX2J1ZmZlciArIChjb25zdW1lZCAlIG51bV9idWZmZXJzKSAq IFNVQkJVRl9TSVpFOwo+Pj4gKwo+Pj4gKyAgICAgICAgcmV0ID0gd3JpdGUob3V0ZmlsZV9mZCwg cHRyLCBTVUJCVUZfU0laRSk7Cj4+PiArICAgICAgICBpZiAocmV0IDwgMCkKPj4+ICsgICAgICAg ICAgICBpZ3RfYXNzZXJ0X2YoMCwgIkNvdWxkbid0IGR1bXAgdGhlIGxvZ3MgaW4gYSBmaWxlIik7 Cj4+Cj4+IFF1ZXN0aW9uIGFib3V0IHNob3J0IHdyaXRlcyBhcHBsaWVzIGhlcmUgYXMgd2VsbC4K Pj4KPiBGaW5lIHdpbGwgZG8gdGhlIHNhbWUgaGVyZSB3aGF0ZXZlciBpcyBkZWNpZGVkIGZvciBh Ym92ZS4KPgo+Pj4gKwo+Pj4gKyAgICAgICAgdG90YWxfYnl0ZXNfd3JpdHRlbiArPSByZXQ7Cj4+ PiArICAgICAgICBpZiAobWF4X2ZpbGVzaXplICYmICh0b3RhbF9ieXRlc193cml0dGVuID4gTUIo bWF4X2ZpbGVzaXplKSkpIHsKPj4+ICsgICAgICAgICAgICBpZ3RfZGVidWcoIlJlYWNoZWQgdGhl IHRhcmdldCBvZiAlIiBQUkl1NjQgIiBieXRlc1xuIiwKPj4+IE1CKG1heF9maWxlc2l6ZSkpOwo+ Pj4gKyAgICAgICAgICAgIHN0b3BfbG9nZ2luZyA9IHRydWU7Cj4+PiArICAgICAgICB9Cj4+PiAr Cj4+PiArICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJm11dGV4KTsKPj4+ICsgICAgICAgIGNv bnN1bWVkKys7Cj4+PiArICAgICAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZvdmVyZmxvd19jb25k KTsKPj4+ICsgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleCk7Cj4+PiArICAgIH0g d2hpbGUoMSk7Cj4+Cj4+IE1pbm9yIGFnYWluOiBZb3UgdXNlIGJvdGggIndoaWxlKDEpIHt9IiBh bmQgImRvIHsgfSB3aGlsZSgxKSIgaW4gaGVyZS4KPj4gTWF5YmUgc3RpY2sgd2l0aCBvbmU/IDpE IChJIHRoaW5rICJmb3IgKDs7KSIgaXMgcHJlZmVycmVkLCBidXQgbWF5YmUgSQo+PiBhbSBtaXNy ZW1lbWJlcmluZyB0aGluZ3MuKQo+Pgo+IFNvcnJ5IGZvciB0aGUgaW5jb25zaXN0ZW5jeSwgd2ls bCBjbGVhbiB0aGlzIHVwLgo+Cj4+PiArCj4+PiArICAgIHJldHVybiBOVUxMOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgdm9pZCBpbml0X2ZsdXNoZXJfdGhyZWFkKHZvaWQpCj4+PiArewo+Pj4g KyAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gICAgdGhyZWFkX3NjaGVkOwo+Pj4gKyAgICBwdGhyZWFk X2F0dHJfdCAgICAgICAgcF9hdHRyOwo+Pj4gKwo+Pj4gKyAgICBwdGhyZWFkX2NvbmRfaW5pdCgm dW5kZXJmbG93X2NvbmQsIE5VTEwpOwo+Pj4gKyAgICBwdGhyZWFkX2NvbmRfaW5pdCgmb3ZlcmZs b3dfY29uZCwgTlVMTCk7Cj4+PiArICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmbXV0ZXgsIE5VTEwp Owo+Pj4gKwo+Pj4gKyAgICBpZiAocHRocmVhZF9hdHRyX2luaXQoJnBfYXR0cikpCj4+PiArICAg ICAgICBpZ3RfYXNzZXJ0X2YoMCwgIkVycm9yIG9idGFpbmluZyBkZWZhdWx0IHRocmVhZCBhdHRy aWJ1dGVzIik7Cj4+PiArCj4+PiArICAgIGlmIChwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVk KCZwX2F0dHIsIFBUSFJFQURfRVhQTElDSVRfU0NIRUQpKQo+Pj4gKyAgICAgICAgaWd0X2Fzc2Vy dF9mKDAsICJDb3VsZG4ndCBzZXQgaW5oZXJpdHNjaGVkIik7Cj4+PiArCj4+PiArICAgIGlmIChw dGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3koJnBfYXR0ciwgU0NIRURfUlIpKQo+Pj4gKyAgICAg ICAgaWd0X2Fzc2VydF9mKDAsICJDb3VsZG4ndCBzZXQgdGhyZWFkIHNjaGVkdWxpbmcgcG9saWN5 Iik7Cj4+PiArCj4+PiArICAgIC8qIEtlZXAgdGhlIGZsdXNoZXIgdGFzayBhbHNvIGF0IHJ0IHBy aW9yaXR5LCBzbyB0aGF0IGl0IGRvZXNuJ3QKPj4+IGdldAo+Pj4gKyAgICAgKiB0b28gbGF0ZSBp biBmbHVzaGluZyB0aGUgY29sbGVjdGVkIGxvZ3MgaW4gbG9jYWwgYnVmZmVycyB0bwo+Pj4gdGhl IGRpc2ssCj4+PiArICAgICAqIGFuZCBzbyBtYWluIHRocmVhZCBhbHdheXMgaGF2ZSBzcGFyZSBi dWZmZXJzIHRvIGNvbGxlY3QgdGhlCj4+PiBsb2dzLgo+Pj4gKyAgICAgKi8KPj4+ICsgICAgdGhy ZWFkX3NjaGVkLnNjaGVkX3ByaW9yaXR5ID0gNTsKPj4+ICsgICAgaWYgKHB0aHJlYWRfYXR0cl9z ZXRzY2hlZHBhcmFtKCZwX2F0dHIsICZ0aHJlYWRfc2NoZWQpKQo+Pj4gKyAgICAgICAgaWd0X2Fz c2VydF9mKDAsICJDb3VsZG4ndCBzZXQgdGhyZWFkIHByaW9yaXR5Iik7Cj4+PiArCj4+PiArICAg IGlmIChwdGhyZWFkX2NyZWF0ZSgmZmx1c2hfdGhyZWFkLCAmcF9hdHRyLCBmbHVzaGVyLCBOVUxM KSkKPj4+ICsgICAgICAgIGlndF9hc3NlcnRfZigwLCAidGhyZWFkIGNyZWF0aW9uIGZhaWxlZCIp Owo+Pgo+PiBNb3JlIG5pdHBpY2tzOiBZb3UgbWl4IHN0YXJ0aW5nIGVycm9yIG1lc3NhZ2VzIHdp dGggdXBwZXIgY2FzZSBhbmQgbG93ZXIKPj4gY2FzZS4KPgo+IFdpbGwgdXNlIHRoZSBsb3dlciBj YXNlIGZvciBhbGwgZXJyb3IgbWVzc2FnZXMuIGZpbmUgPwoKRmluZSB3aXRoIG1lLgoKPj4KPj4+ ICsKPj4+ICsgICAgaWYgKHB0aHJlYWRfYXR0cl9kZXN0cm95KCZwX2F0dHIpKQo+Pj4gKyAgICAg ICAgaWd0X2Fzc2VydF9mKDAsICJFcnJvciBkZXN0cm95aW5nIHRocmVhZCBhdHRyaWJ1dGVzIik7 Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIG9wZW5fcmVsYXlfZmlsZSh2b2lkKQo+Pj4g K3sKPj4+ICsgICAgcmVsYXlfZmQgPSBpZ3RfZGVidWdmc19vcGVuKFJFTEFZX0ZJTEVfTkFNRSwg T19SRE9OTFkpOwo+Pj4gKyAgICBpZiAocmVsYXlfZmQgPCAwKQo+Pj4gKyAgICAgICAgaWd0X2Fz c2VydF9mKDAsICJDb3VsZG4ndCBvcGVuIHRoZSBndWMgbG9nIGZpbGUiKTsKPj4+ICsKPj4+ICsg ICAgLyogUHVyZ2UgdGhlIG9sZC9ib290LXRpbWUgbG9ncyBmcm9tIHRoZSByZWxheSBidWZmZXIu Cj4+PiArICAgICAqIFRoaXMgaXMgbW9yZSBmb3IgVmFsIHRlYW0ncyByZXF1aXJlbWVudCwgd2hl cmUgdGhleSBoYXZlIHRvCj4+PiBmaXJzdAo+Pj4gKyAgICAgKiBwdXJnZSB0aGUgZXhpc3Rpbmcg bG9ncyBiZWZvcmUgc3RhcnRpbmcgdGhlIHRlc3RzIGZvciB3aGljaAo+Pj4gdGhlIGxvZ3MKPj4+ ICsgICAgICogYXJlIGFjdHVhbGx5IG5lZWRlZC4gQWZ0ZXIgdGhpcyBsb2dnZXIgd2lsbCBlbnRl ciBpbnRvIGEgbG9vcAo+Pj4gYW5kCj4+PiArICAgICAqIHdhaXQgZm9yIHRoZSBuZXcgZGF0YSwg YXQgdGhhdCBwb2ludCBiZW5jaG1hcmsgY2FuIGJlIGxhdW5jaGVkCj4+PiBmcm9tCj4+PiArICAg ICAqIGEgZGlmZmVyZW50IHNoZWxsLgo+Pj4gKyAgICAgKi8KPj4+ICsgICAgaWYgKGRpc2NhcmRf b2xkbG9ncykKPj4+ICsgICAgICAgIHB1bGxfbGVmdG92ZXJfZGF0YSgpOwo+Pj4gK30KPj4+ICsK Pj4+ICtzdGF0aWMgdm9pZCBvcGVuX291dHB1dF9maWxlKHZvaWQpCj4+PiArewo+Pj4gKyAgICBj aGFyICpmaWxlbmFtZTsKPj4+ICsKPj4+ICsgICAgaWYgKGFzcHJpbnRmKCZmaWxlbmFtZSwgIi90 bXAvJXMiLCBvdXRfZmlsZW5hbWUgPyA6Cj4+PiAiZ3VjX2xvZ19kdW1wLmRhdCIpIDwgMCkKPj4+ ICsgICAgICAgIGlndF9hc3NlcnRfZigwLCAiQ291bGRuJ3QgYWxsb2NhdGUgdGhlIGZpbGVuYW1l Iik7Cj4+Cj4+IEkgdGhpbmsgeW91IG5lZWQgdG8gdGFrZSB0aGUgb3V0X2ZpbGVuYW1lIHdoZW4g c3BlY2lmaWVkIGJ5IHRoZSB1c2VyCj4+IGFzLWlzIGFuZCBub3Qgc3RpY2sgaXQgaW4gL3RtcC4g SXQgaXMgcGVyZmVjdGx5IHJlYXNvbmFibGUgdGhhdCBzb21lb25lCj4+IHdvdWxkIHdhbnQgdG8g cHV0IGl0IHNvbWV3aGVyZSBlbHNlLgo+Pgo+IE9rIHNvIFVzZXIgc2hvdWxkIHByb3ZpZGUgdGhl IGZ1bGwgcGF0aC4KCkl0IGNhbiBiZSByZWxhdGl2ZSwgYWJzb2x1dGUsIG9yIGp1c3QgYSBmaWxl bmFtZS4gTXkgc3VnZ2VzdGlvbiB3YXMgdG8gCmp1c3QgdXNlIHdoYXQgdGhlIHVzZXIgcHJvdmlk ZWQgZm9yIHRoZSBvcGVuKDIpIGNhbGwuCgo+Cj4+IEFsc28gYmV0dGVyIHRvIG1vdmUgdGhlIGRl ZmF1bHQgbmFtZSBvZiAiZ3VjX2xvZ19kdW1wLmRhdCIgdG8gd2hlcmUKPj4gZGVmYXVsdHMgbGlr ZSBSRUxBWV9GSUxFX05BTUUgYW5kIHN1Y2ggYXJlIGRlZmluZWQuCj4+Cj4gZmluZS4KPgo+PiBB bmQgSSB3b3VsZCBub3QgZGVmYXVsdCB0byAvdG1wIGJ1dCB0aGUgY3VycmVudCBkaXJlY3Rvcnku Cj4+Cj4gQ2hyaXMgaGFkIHN1Z2dlc3RlZCB0byB1c2UgL3RtcC4gRmluZSB3aWxsIHVzZSB0aGUg Y3VycmVudCBkaXJlY3RvcnkuCj4KPj4+ICsKPj4+ICsgICAgLyogVXNlIERpcmVjdCBJTyBtb2Rl IGZvciB0aGUgb3V0cHV0IGZpbGUsIGFzIHRoZSBkYXRhIHdyaXR0ZW4gaXMKPj4+IG5vdAo+Pj4g KyAgICAgKiBzdXBwb3NlZCB0byBiZSBhY2Nlc3NlZCBhZ2FpbiwgdGhpcyBzYXZlcyBhIGNvcHkg b2YgZGF0YSBmcm9tCj4+PiBBcHAncwo+Pj4gKyAgICAgKiBidWZmZXIgdG8ga2VybmVsIGJ1ZmZl ciAoUGFnZSBjYWNoZSkuIER1ZSB0byBubyBidWZmZXJpbmcgb24KPj4+IGtlcm5lbAo+Pj4gKyAg ICAgKiBzaWRlLCBkYXRhIGlzIGZsdXNoZWQgb3V0IHRvIGRpc2sgZmFzdGVyIGFuZCBtb3JlIGJ1 ZmZlcmluZwo+Pj4gY2FuIGJlCj4+PiArICAgICAqIGRvbmUgb24gdGhlIGxvZ2dlciBzaWRlIHRv IGhpZGUgdGhlIGRpc2sgSU8gbGF0ZW5jeS4KPj4+ICsgICAgICovCj4+PiArICAgIG91dGZpbGVf ZmQgPSBvcGVuKGZpbGVuYW1lLCBPX0NSRUFUIHwgT19XUk9OTFkgfCBPX1RSVU5DIHwKPj4+IE9f RElSRUNULCAwNDQ0KTsKPj4KPj4gMDQwMCBvciAwNDQwIHdvdWxkIGJlIGJldHRlciBJIHRoaW5r Lgo+Cj4gZmluZSwgdGhpcyBtaWdodCBtYWtlIHRoZSBmaWxlIGluYWNjZXNzaWJsZSB0byBSb290 IFVzZXIgaW4gY2FzZSB0aGUKPiBsb2dnZXIgd2Fzbid0IHJ1bm5pbmcgYXMgYSBSb290ID8KCkkg YXNzdW1lZCBsb2dnZXIgd2lsbCBydW4gYXMgcm9vdCBhbmQgaXQgd291bGQgYmUgcHJlZmVyYWJs ZSBub3QgdG8gaGF2ZSAKbG9nIGZpbGVzIGFjY2Vzc2libGUgYnkgYW55b25lLiBFaXRoZXIgd2F5 IHJvb3QgY2FuIHJlYWQgYW55dGhpbmcgCnJlZ2FyZGxlc3Mgb2YgcGVybWlzc2lvbnMsIG5vPwoK Pj4KPj4+ICsgICAgaWYgKG91dGZpbGVfZmQgPCAwKQo+Pj4gKyAgICAgICAgaWd0X2Fzc2VydF9m KDAsICJDb3VsZG4ndCBvcGVuIHRoZSBvdXRwdXQgZmlsZSIpOwo+Pj4gKwo+Pj4gKyAgICBmcmVl KG91dF9maWxlbmFtZSk7Cj4+PiArICAgIGZyZWUoZmlsZW5hbWUpOwo+Pj4gK30KPj4+ICsKPj4+ ICtzdGF0aWMgdm9pZCBpbml0X21haW5fdGhyZWFkKHZvaWQpCj4+PiArewo+Pj4gKyAgICBzdHJ1 Y3Qgc2NoZWRfcGFyYW0gICAgdGhyZWFkX3NjaGVkOwo+Pj4gKyAgICAvKiBSdW4gdGhlIG1haW4g dGhyZWFkIGF0IGhpZ2hlc3QgcHJpb3JpdHkgdG8gZW5zdXJlIHRoYXQgaXQgYWx3YXlzCj4+PiAr ICAgICAqIGdldHMgd29rZW4tdXAgYXQgZWFybGllc3Qgb24gYXJyaXZhbCBvZiBuZXcgZGF0YSBh bmQgc28gaXMKPj4+IGFsd2F5cwo+Pj4gKyAgICAgKiByZWFkeSB0byBwdWxsIHRoZSBsb2dzLCBv dGhlcndpc2UgdGhlcmUgY291bGQgYmUgbG9zcyBsb2dzIGlmCj4+PiArICAgICAqIEd1QyBmaXJt d2FyZSBpcyBnZW5lcmF0aW5nIGxvZ3MgYXQgYSB2ZXJ5IGhpZ2ggcmF0ZS4KPj4+ICsgICAgICov Cj4+PiArICAgIHRocmVhZF9zY2hlZC5zY2hlZF9wcmlvcml0eSA9IDE7Cj4+PiArICAgIGlmIChz Y2hlZF9zZXRzY2hlZHVsZXIoZ2V0cGlkKCksIFNDSEVEX0ZJRk8sICZ0aHJlYWRfc2NoZWQpKQo+ Pj4gKyAgICAgICAgaWd0X2Fzc2VydF9mKDAsICJDb3VsZG4ndCBzZXQgdGhlIHByaW9yaXR5Iik7 Cj4+PiArCj4+PiArICAgIGlmIChzaWduYWwoU0lHSU5ULCBpbnRfc2lnX2hhbmRsZXIpID09IFNJ R19FUlIpCj4+PiArICAgICAgICBpZ3RfYXNzZXJ0X2YoMCwgIlNJR0lOVCBoYW5kbGVyIHJlZ2lz dHJhdGlvbiBmYWlsZWQiKTsKPj4+ICsKPj4+ICsgICAgLyogTmVlZCBhbiBhbGlnbmVkIHBvaW50 ZXIgZm9yIGRpcmVjdCBJTyAqLwo+Pj4gKyAgICBpZiAocG9zaXhfbWVtYWxpZ24oKHZvaWQgKiop JnJlYWRfYnVmZmVyLCBQQUdFX1NJWkUsIG51bV9idWZmZXJzCj4+PiAqIFNVQkJVRl9TSVpFKSkK Pj4+ICsgICAgICAgIGlndF9hc3NlcnRfZigwLCAiQ291bGRuJ3QgYWxsb2NhdGUgdGhlIHJlYWQg YnVmZmVyIik7Cj4+PiArCj4+PiArICAgIC8qIEtlZXAgdGhlIHBhZ2VzIGxvY2tlZCBpbiBSQU0s IGF2b2lkIHBhZ2UgZmF1bHQgb3ZlcmhlYWQgKi8KPj4+ICsgICAgaWYgKG1sb2NrKHJlYWRfYnVm ZmVyLCBudW1fYnVmZmVycyAqIFNVQkJVRl9TSVpFKSkKPj4+ICsgICAgICAgIGlndF9hc3NlcnRf ZigwLCAiRmFpbGVkIHRvIGxvY2sgbWVtb3J5Iik7Cj4+PiArCj4+PiArICAgIC8qIEVuYWJsZSB0 aGUgbG9nZ2luZywgaXQgbWF5IG5vdCBoYXZlIGJlZW4gZW5hYmxlZCBmcm9tIGJvb3QKPj4+IGFu ZCBzbwo+Pj4gKyAgICAgKiB0aGUgcmVsYXkgZmlsZSBhbHNvIHdvdWxkbid0IGhhdmUgYmVlbiBj cmVhdGVkLgo+Pj4gKyAgICAgKi8KPj4+ICsgICAgZ3VjX2xvZ19jb250cm9sKHRydWUpOwo+Pj4g Kwo+Pj4gKyAgICBvcGVuX3JlbGF5X2ZpbGUoKTsKPj4+ICsgICAgb3Blbl9vdXRwdXRfZmlsZSgp Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHBhcnNlX29wdGlvbnMoaW50IG9wdCwgaW50 IG9wdF9pbmRleCwgdm9pZCAqZGF0YSkKPj4+ICt7Cj4+PiArICAgIGlndF9kZWJ1Zygib3B0ICVj IG9wdGFyZyAlc1xuIiwgb3B0LCBvcHRhcmcpOwo+Pj4gKwo+Pj4gKyAgICBzd2l0Y2gob3B0KSB7 Cj4+PiArICAgIGNhc2UgJ3YnOgo+Pj4gKyAgICAgICAgdmVyYm9zaXR5X2xldmVsID0gYXRvaShv cHRhcmcpOwo+Pj4gKyAgICAgICAgaWYgKHZlcmJvc2l0eV9sZXZlbCA8IDApCj4+PiArICAgICAg ICAgICAgdmVyYm9zaXR5X2xldmVsID0gMDsKPj4+ICsgICAgICAgIGVsc2UgaWYgKHZlcmJvc2l0 eV9sZXZlbCA+IDMpCj4+PiArICAgICAgICAgICAgdmVyYm9zaXR5X2xldmVsID0gMzsKPj4KPj4g Tm90aWZ5IHVzZXIgaWYgaW52YWxpZCB2YWx1ZSB3YXMgcHJvdmlkZWQ/Cj4+Cj4gSnVzdCBub3Rp ZnkgYnV0IGRvbid0IGFib3J0IGFuZCBjb250aW51ZSBieSB1c2luZyBhIHZhbGlkIHZhbHVlID8K Ck5vIHN0cm9uZyBvcGluaW9uLiBFaXRoZXIgaXMgbXVjaCBiZXR0ZXIgdGhhbiBzaWxlbnRseSB1 c2luZyBhIGRpZmZlcmVudCAKdmFsdWUgb3IgaWdub3JpbmcgdGhlIGZhY3QgdXNlciBoYXMgdHlw ZWQgaW4gZ2FyYmFnZSBvbiB0aGUgY29tbWFuZCBsaW5lLgoKPgo+Pj4gKwo+Pj4gKyAgICAgICAg aWd0X2RlYnVnKCJ2ZXJib3NpdHkgbGV2ZWwgdG8gYmUgdXNlZCBpcyAlZFxuIiwKPj4+IHZlcmJv c2l0eV9sZXZlbCk7Cj4+PiArICAgICAgICBicmVhazsKPj4+ICsgICAgY2FzZSAnbyc6Cj4+PiAr ICAgICAgICBpZiAoYXNwcmludGYoJm91dF9maWxlbmFtZSwgIiVzIiwgb3B0YXJnKSA8IDApCj4+ Cj4+IHN0cmR1cD8KPiBvayB3aWxsIHRyeSB0byB1c2Ugc3RyZHVwLgo+Pgo+Pj4gKyAgICAgICAg ICAgIGlndF9hc3NlcnRfZigwLCAiQ291bGRuJ3QgYWxsb2NhdGUgdGhlIG8vcCBmaWxlbmFtZSIp Owo+Pj4gKyAgICAgICAgaWd0X2RlYnVnKCJsb2dzIHRvIGJlIHN0b3JlZCBpbiBmaWxlIC90bXAv JXNcbiIsIG91dF9maWxlbmFtZSk7Cj4+PiArICAgICAgICBicmVhazsKPj4+ICsgICAgY2FzZSAn Yic6Cj4+PiArICAgICAgICBudW1fYnVmZmVycyA9IGF0b2kob3B0YXJnKTsKPj4+ICsgICAgICAg IGlmIChudW1fYnVmZmVycyA9PSAwKQo+Pj4gKyAgICAgICAgICAgIG51bV9idWZmZXJzID0gTlVN X1NVQkJVRlM7Cj4+Cj4+IEFnYWluIG5vdGlmeSBpZiBpbnZhbGlkIG51bWJlci92YWx1ZS4KPj4K PiBzYW1lIGRvdWJ0IGFzIGFib3ZlLgo+Cj4+PiArICAgICAgICBpZ3RfZGVidWcoIm51bWJlciBv ZiBidWZmZXJzIHRvIGJlIHVzZWQgaXMgJWRcbiIsIG51bV9idWZmZXJzKTsKPj4+ICsgICAgICAg IGJyZWFrOwo+Pj4gKyAgICBjYXNlICd0JzoKPj4+ICsgICAgICAgIHRlc3RfZHVyYXRpb24gPSBh dG9pKG9wdGFyZyk7Cj4+PiArICAgICAgICBpZiAodGVzdF9kdXJhdGlvbiA+IDApCj4+Cj4+IElm IHN3aXRjaCB3YXMgc3BlY2lmaWVkIGl0IHNob3VsZCBoYXZlIGEgdmFsaWQgb3B0YXJnIG9yIGVy cm9yIHJlcG9ydGVkLgo+Pgo+Pj4gKyAgICAgICAgICAgIGlndF9kZWJ1ZygibG9nZ2VyIHRvIHJ1 biBmb3IgJWQgc2Vjb25kc1xuIiwgdGVzdF9kdXJhdGlvbik7Cj4+PiArICAgICAgICBicmVhazsK Pj4+ICsgICAgY2FzZSAncCc6Cj4+PiArICAgICAgICBwb2xsX3RpbWVvdXQgPSBhdG9pKG9wdGFy Zyk7Cj4+PiArICAgICAgICBpZiAocG9sbF90aW1lb3V0ID09IDApCj4+PiArICAgICAgICAgICAg cG9sbF90aW1lb3V0ID0gMjsgLyogYXQgbGVhc3QgdXNlIDJtcyBwb2xsIHRpbWVvdXQgKi8KPj4K Pj4gSG0gSSB3b3VsZCBwcmVmZXIgaWYgeW91IGFsbG93ZWQgbm8gcG9sbCBwZXJpb2QuCj4KPiBi eSBubyBwb2xsIHBlcmlvZCwgZG8geW91IG1lYW4gaW5kZWZpbml0ZSB3YWl0ID8KPgo+IFRoYXQg Y2FuIGJlIGRvbmUgYnkgc3BlY2lmeWluZyAtMSBhcyBhIHRpbWVvdXQgdmFsdWUgaW4gdGhlIGNv bW1hbmQgbGluZSwKPgo+ICItcCAtLXBvbGx0aW1lb3V0PW1zIHBvbGxpbmcgdGltZW91dCBpbiBt cywgLTEgPT0gaW5kZWZpbml0ZSB3YWl0IGZvcgo+IHRoZSBuZXcgZGF0YVxuIgoKTXkgYmFkLCBJ IG1pc3NlZCB0aGF0LiBBbGwgZ29vZCB0aGVuLgoKPgo+PiBJIGV2ZW4gdGhpbmsgaXQgc2hvdWxk IGJlIHRoZSBkZWZhdWx0IGlmIHdlIHRoaW5rIHJlbGF5ZnMgd2lsbCBiZQo+PiBkZWZpbml0ZWx5 IGZpeGVkIHRvIG5vdAo+PiByZXF1aXJlIGl0Lgo+Pgo+IENhbiBrZWVwIHRoZSBpbmRlZmluaXRl IHdhaXQgYXMgYSBkZWZhdWx0Lgo+Cj4+IEluIGFueSBjYXNlLCBjb21tZW5kIGlzIHdyb25nIHNp bmNlIHVzZXIgY2FuIHNwZWNpZnkgMW1zIGFuZCBnZXQgYXdheQo+PiB3aXRoIGl0LiA6KQo+Pgo+ Pj4gKyAgICAgICAgaWYgKHBvbGxfdGltZW91dCA+IDApCj4+PiArICAgICAgICAgICAgaWd0X2Rl YnVnKCJwb2xsaW5nIHRvIGJlIGRvbmUgd2l0aCAlZCBtaWxsaSBzZWNvbmRzCj4+PiB0aW1lb3V0 XG4iLCBwb2xsX3RpbWVvdXQpOwo+Pgo+PiBtaWxsaXNlY29uZHMKPj4KPj4+ICsgICAgICAgIGJy ZWFrOwo+Pj4gKyAgICBjYXNlICdzJzoKPj4+ICsgICAgICAgIG1heF9maWxlc2l6ZSA9IGF0b2ko b3B0YXJnKTsKPj4+ICsgICAgICAgIGlmIChtYXhfZmlsZXNpemUgPiAwKQo+Pgo+PiBTYW1lIGFz IGZvciAtdC4KPj4KPj4+ICsgICAgICAgICAgICBpZ3RfZGVidWcoIm1heCBhbGxvd2VkIHNpemUg b2YgdGhlIG91dHB1dCBmaWxlIGlzICVkCj4+PiBNQnNcbiIsIG1heF9maWxlc2l6ZSk7Cj4+PiAr ICAgICAgICBicmVhazsKPj4+ICsgICAgY2FzZSAnZCc6Cj4+PiArICAgICAgICBkaXNjYXJkX29s ZGxvZ3MgPSB0cnVlOwo+Pj4gKyAgICAgICAgaWd0X2RlYnVnKCJvbGQvYm9vdC10aW1lIGxvZ3Mg d2lsbCBiZSBkaXNjYXJkZWRcbiIpOwo+Pj4gKyAgICAgICAgYnJlYWs7Cj4+PiArICAgIH0KPj4+ ICsKPj4+ICsgICAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHByb2Nl c3NfY29tbWFuZF9saW5lKGludCBhcmdjLCBjaGFyICoqYXJndikKPj4+ICt7Cj4+PiArICAgIHN0 YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gewo+Pj4gKyAgICAgICAgeyJ2ZXJi b3NpdHkiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ3YnfSwKPj4+ICsgICAgICAgIHsib3V0cHV0 ZmlsZW5hbWUiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ28nfSwKPj4+ICsgICAgICAgIHsiYnVm ZmVycyIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnYid9LAo+Pj4gKyAgICAgICAgeyJ0ZXN0ZHVy YXRpb24iLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ3QnfSwKPj4+ICsgICAgICAgIHsicG9sbHRp bWVvdXQiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ3AnfSwKPj4+ICsgICAgICAgIHsic2l6ZSIs IHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAncyd9LAo+Pj4gKyAgICAgICAgeyJkaXNjYXJkIiwgbm9f YXJndW1lbnQsIDAsICdkJ30sCj4+PiArICAgICAgICB7IDAsIDAsIDAsIDAgfQo+Pj4gKyAgICB9 Owo+Pj4gKwo+Pj4gKyAgICBjb25zdCBjaGFyICpoZWxwID0KPj4+ICsgICAgICAgICIgIC12IC0t dmVyYm9zaXR5PWxldmVsICAgdmVyYm9zaXR5IGxldmVsIG9mIEd1QyBsb2dnaW5nCj4+PiAoMC0z KVxuIgo+Pj4gKyAgICAgICAgIiAgLW8gLS1vdXRmaWxlPW5hbWUgICAgICBuYW1lIG9mIHRoZSBv dXRwdXQgZmlsZSBpbiAvdG1wCj4+PiBkaXJlY3RvcnksIHdoZXJlIGxvZ3Mgd2lsbCBiZSBzdG9y ZWRcbiIKPj4+ICsgICAgICAgICIgIC1iIC0tYnVmZmVycz1udW0gICAgICAgbnVtYmVyIG9mIGJ1 ZmZlcnMgdG8gYmUgbWFpbnRhaW5lZAo+Pj4gb24gbG9nZ2VyIHNpZGUgZm9yIHN0b3JpbmcgbG9n c1xuIgo+Pj4gKyAgICAgICAgIiAgLXQgLS10ZXN0ZHVyYXRpb249c2VjICBtYXggZHVyYXRpb24g aW4gc2Vjb25kcyBmb3Igd2hpY2gKPj4+IHRoZSBsb2dnZXIgc2hvdWxkIHJ1biwgMCA9PSBmb3Jl dmVyXG4iCj4+PiArICAgICAgICAiICAtcCAtLXBvbGx0aW1lb3V0PW1zICAgIHBvbGxpbmcgdGlt ZW91dCBpbiBtcywgLTEgPT0KPj4+IGluZGVmaW5pdGUgd2FpdCBmb3IgdGhlIG5ldyBkYXRhXG4i Cj4+PiArICAgICAgICAiICAtcyAtLXNpemU9TUIgICAgICAgICAgIG1heCBzaXplIG9mIG91dHB1 dCBmaWxlIGluIE1Ccwo+Pj4gYWZ0ZXIgd2hpY2ggbG9nZ2luZyB3aWxsIGJlIHN0b3BwZWQsIDAg PT0gbm8gbGltaXRcbiIKPj4+ICsgICAgICAgICIgIC1kIC0tZGlzY2FyZCAgICAgICAgICAgZGlz Y2FyZCB0aGUgb2xkL2Jvb3QtdGltZSBsb2dzCj4+PiBiZWZvcmUgZW50ZXJpbmcgaW50byB0aGUg Y2FwdHVyZSBsb29wXG4iOwo+Pj4gKwo+Pj4gKyAgICBpZ3Rfc2ltcGxlX2luaXRfcGFyc2Vfb3B0 cygmYXJnYywgYXJndiwgInY6bzpiOnQ6cDpzOmQiLAo+Pj4gbG9uZ19vcHRpb25zLAo+Pj4gKyAg ICAgICAgICAgICAgICAgICBoZWxwLCBwYXJzZV9vcHRpb25zLCBOVUxMKTsKPj4+ICt9Cj4+PiAr Cj4+PiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+Pj4gK3sKPj4+ICsgICAgc3Ry dWN0IHBvbGxmZCByZWxheV9wb2xsX2ZkOwo+Pj4gKyAgICBzdHJ1Y3QgdGltZXNwZWMgc3RhcnQ9 e307Cj4+PiArICAgIGludCBuZmRzOwo+Pj4gKyAgICBpbnQgcmV0Owo+Pj4gKwo+Pj4gKyAgICBw cm9jZXNzX2NvbW1hbmRfbGluZShhcmdjLCBhcmd2KTsKPj4+ICsKPj4+ICsgICAgaW5pdF9tYWlu X3RocmVhZCgpOwo+Pj4gKwo+Pj4gKyAgICAvKiBVc2UgYSBzZXBhcmF0ZSB0aHJlYWQgZm9yIGZs dXNoaW5nIHRoZSBsb2dzIHRvIGEgZmlsZSBvbiBkaXNrLgo+Pj4gKyAgICAgKiBNYWluIHRocmVh ZCB3aWxsIGJ1ZmZlciB0aGUgZGF0YSBmcm9tIHJlbGF5IGZpbGUgaW4gaXRzIHBvb2wgb2YKPj4+ ICsgICAgICogYnVmZmVycyBhbmQgb3RoZXIgdGhyZWFkIHdpbGwgZmx1c2ggdGhlIGRhdGEgdG8g ZGlzayBpbgo+Pj4gYmFja2dyb3VuZC4KPj4+ICsgICAgICogVGhpcyBpcyBuZWVkZWQsIGFsYmVp dCBieSBkZWZhdWx0IGRhdGEgaXMgd3JpdHRlbiBvdXQgdG8gZGlzayBpbgo+Pj4gKyAgICAgKiBh c3luYyBtb2RlLCBhcyB3aGVuIHRoZXJlIGFyZSB0b28gbWFueSBkaXJ0eSBwYWdlcyBpbiB0aGUg UkFNLAo+Pj4gKyAgICAgKiAoL3Byb2Mvc3lzL3ZtL2RpcnR5X3JhdGlvKSwga2VybmVsIHN0YXJ0 cyBibG9ja2luZyB0aGUgcHJvY2Vzc2VzCj4+PiArICAgICAqIGRvaW5nIHRoZSBmaWxlIHdyaXRl cy4KPj4+ICsgICAgICovCj4+PiArICAgIGluaXRfZmx1c2hlcl90aHJlYWQoKTsKPj4+ICsKPj4+ ICsgICAgcmVsYXlfcG9sbF9mZC5mZCA9IHJlbGF5X2ZkOwo+Pj4gKyAgICByZWxheV9wb2xsX2Zk LmV2ZW50cyA9IFBPTExJTjsKPj4+ICsgICAgcmVsYXlfcG9sbF9mZC5yZXZlbnRzID0gMDsKPj4+ ICsKPj4+ICsgICAgbmZkcyA9IDE7IC8qIG9ubHkgb25lIGZkIHRvIHBvbGwgKi8KPj4+ICsKPj4+ ICsgICAgd2hpbGUgKCFzdG9wX2xvZ2dpbmcpCj4+PiArICAgIHsKPj4+ICsgICAgICAgIGlmICh0 ZXN0X2R1cmF0aW9uICYmIChpZ3Rfc2Vjb25kc19lbGFwc2VkKCZzdGFydCkgPgo+Pj4gdGVzdF9k dXJhdGlvbikpIHsKPj4KPj4gSWYgeW91IGFncmVlIHRvIGFsbG93IG5vIHBvbGwgcGVyaW9kIHRo ZSB0aGlzIHdvdWxkIG5vdCB3b3JrIHJpZ2h0PyBJbgo+PiB0aGF0IGNhc2UgeW91IHdvdWxkIG5l ZWQgdG8gdXNlIGFsYXJtKDIpIG9yIHNvbWV0aGluZy4KPj4KPgo+IENhbiBjYWxjdWxhdGUgdGhl IHRpbWVvdXQgdmFsdWUgZm9yIHBvbGwgY2FsbCBhcywKPiAgICAgIGlmIChwb2xsX3RpbWVvdXQg PCAwKSB7Cj4gICAgICAgICAgdGltZW91dCA9IHRlc3RfZHVyYXRpb24gLSBpZ3Rfc2Vjb25kc19l bGFwc2VkKCZzdGFydCkpCj4gICAgICB9CgpNeSBwb2ludCB3YXMgdGhhdCB3aXRoIGluZGVmaW5p dGUgcG9sbCBsb29wIHdpbGwgbm90IHJ1biBpZiB0aGVyZSBpcyBub3QgCmxvZyBkYXRhIHNvIHRp bWVvdXQgd2lsbCBub3Qgd29yayBpbXBsZW1lbnRlZCBsaWtlIHRoaXMuCgo+Cj4KPj4+ICsgICAg ICAgICAgICBpZ3RfZGVidWcoIlJhbiBmb3Igc3RpcHVsYXRlZCAlZCBzZWNvbmRzLCBleGl0IG5v d1xuIiwKPj4+IHRlc3RfZHVyYXRpb24pOwo+Pj4gKyAgICAgICAgICAgIHN0b3BfbG9nZ2luZyA9 IHRydWU7Cj4+PiArICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgICB9Cj4+PiArCj4+PiAr ICAgICAgICAvKiBXYWl0L3BvbGwgZm9yIHRoZSBuZXcgZGF0YSB0byBiZSBhdmFpbGFibGUsIHJl bGF5IGRvZXNuJ3QKPj4+ICsgICAgICAgICAqIHByb3ZpZGUgYSBibG9ja2luZyByZWFkLgo+Pj4g KyAgICAgICAgICogTmVlZCB0byBkbyBwb2xsaW5nIHdpdGggYSB0aW1lb3V0IGluc3RlYWQgb2Yg aW5kZWZpbml0ZQo+Pj4gd2FpdCwKPj4+ICsgICAgICAgICAqIHRvIGF2b2lkIHJlbHlpbmcgb24g cmVsYXkgZm9yIHRoZSB3YWtldXAsIGFzIHJlbGF5IGRvZXMKPj4+IHdha2V1cAo+Pj4gKyAgICAg ICAgICogaW4gYSBkZWZlcnJlZCBtYW5uZXIgb24gamlmZmllcyBncmFudWxhcml0eSBieSBzY2hl ZHVsaW5nIGEKPj4+ICsgICAgICAgICAqIHRpbWVyIGFuZCBtb3Jlb3ZlciB0aGF0IHRpbWVyIGlz IHJlLXNjaGVkdWxlZCBvbiBldmVyeSBuZXdseQo+Pj4gKyAgICAgICAgICogcHJvZHVjZWQgYnVm ZmVyIHNvIHRpbWVyIGtlZXBzIGdldHRpbmcgcHVzaGVkIG91dCBpZiB0aGVyZQo+Pj4gKyAgICAg ICAgICogYXJlIG11bHRpcGxlIGZsdXNoIGludGVycnVwdHMgaW4gYSB2ZXJ5IHF1aWNrIHN1Y2Nl c3Npb24KPj4+IChsZXNzCj4+PiArICAgICAgICAgKiB0aGFuIGEgamlmZnkgZ2FwIGJldHdlZW4g MiBmbHVzaCBpbnRlcnJ1cHRzKSBhbmQgcmVsYXkgcnVucwo+Pj4gKyAgICAgICAgICogb3V0IG9m IHN1YiBidWZmZXJzIHRvIHN0b3JlIHRoZSBuZXcgbG9ncy4KPj4+ICsgICAgICAgICAqLwo+Pj4g KyAgICAgICAgcmV0ID0gcG9sbCgmcmVsYXlfcG9sbF9mZCwgbmZkcywgcG9sbF90aW1lb3V0KTsK Pj4+ICsgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4+PiArICAgICAgICAgICAgaWYgKGVycm5vID09 IEVJTlRSKQo+Pj4gKyAgICAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAgICAgICAgICBlbHNl Cj4+PiArICAgICAgICAgICAgICAgIGlndF9hc3NlcnRfZigwLCAicG9sbCBjYWxsIGZhaWxlZCIp Owo+Pj4gKyAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgLyogTm8gZGF0YSBhdmFpbGFibGUg eWV0LCBwb2xsIGFnYWluLCBob3BlZnVsbHkgbmV3IGRhdGEgaXMKPj4+IHJvdW5kIHRoZSBjb3Ju ZXIgKi8KPj4+ICsgICAgICAgIGlmICghcmVsYXlfcG9sbF9mZC5yZXZlbnRzKQo+Pj4gKyAgICAg ICAgICAgIGNvbnRpbnVlOwo+Pj4gKwo+Pj4gKyAgICAgICAgcHVsbF9kYXRhKCk7Cj4+PiArICAg IH0KPj4+ICsKPj4+ICsgICAgLyogUGF1c2UgbG9nZ2luZyBvbiB0aGUgR3VDIHNpZGUqLwo+Pj4g KyAgICBndWNfbG9nX2NvbnRyb2woZmFsc2UpOwo+Pj4gKyAgICBwdGhyZWFkX2NvbmRfc2lnbmFs KCZ1bmRlcmZsb3dfY29uZCk7Cj4+PiArICAgIHB0aHJlYWRfam9pbihmbHVzaF90aHJlYWQsIE5V TEwpOwo+Pj4gKyAgICBwdWxsX2xlZnRvdmVyX2RhdGEoKTsKPj4+ICsgICAgaWd0X2luZm8oInRv dGFsX2J5dGVzX3dyaXR0ZW4gJSIgUFJJdTY0ICJcbiIsIHRvdGFsX2J5dGVzX3dyaXR0ZW4pOwo+ Pj4gKwo+Pj4gKyAgICBmcmVlKHJlYWRfYnVmZmVyKTsKPj4+ICsgICAgY2xvc2UocmVsYXlfZmQp Owo+Pj4gKyAgICBjbG9zZShvdXRmaWxlX2ZkKTsKPj4+ICsgICAgaWd0X2V4aXQoKTsKPj4+ICt9 Cj4+Pgo+Pgo+PiBTbyBvbmx5IG1pbm9yIGNvbW1lbnRzLiBUaGUgcmVzdCBsb29rcyByZWFzb25h YmxlIHRvIG1lIGFuZCBJIHRydXN0IHlvdQo+PiB0ZXN0ZWQgaXQgd2VsbCBhbmQgaXQgd29ya3Mg ZmluZS4KPj4KPiBUaGFua3MgbXVjaCBmb3IgdGhlIHRob3JvdWdoIHJldmlldy4KCk5wLgoKUmVn YXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK