From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0004A6E2D8 for ; Thu, 7 Mar 2019 13:42:51 +0000 (UTC) Date: Thu, 7 Mar 2019 15:42:48 +0200 From: Andi Shyti Message-ID: <20190307134248.GB1418@intel.intel> References: <20190305131611.2367-1-andi.shyti@intel.com> <20190305131611.2367-3-andi.shyti@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Subject: Re: [igt-dev] [RFC PATCH v10 2/6] lib/i915: add gem_engine_topology library List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Tvrtko Ursulin Cc: IGT dev , Andi Shyti List-ID: SGkgVHZydGtvLAoKPiA+ICsjaW5jbHVkZSAiZHJtdGVzdC5oIgo+ID4gKyNpbmNsdWRlICJpZ3Rf Z3QuaCIKPiA+ICsjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKPiA+ICsKPiA+ICsjaW5jbHVk ZSAiaTkxNS9nZW1fZW5naW5lX3RvcG9sb2d5LmgiCj4gPiArCj4gPiArI2RlZmluZSBTSVpFT0Zf Q1RYX1BBUkFNCW9mZnNldG9mKHN0cnVjdCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcywgXAo+ ID4gKwkJCQkJY2xhc3NfaW5zdGFuY2VbSTkxNV9FWEVDX1JJTkdfTUFTSyArIDFdKQo+ID4gKyNk ZWZpbmUgU0laRU9GX1FVRVJZCQlvZmZzZXRvZihzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5naW5l X2luZm8sIFwKPiA+ICsJCQkJCWVuZ2luZXNbSTkxNV9FWEVDX1JJTkdfTUFTSyArIDFdKQo+IAo+ IFRoZXJlIGlzIG5vIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEk5MTVfRVhFQ19SSU5HX01BU0sgYW5k IHRoZSBudW1iZXIgb2YKPiBlbmdpbmVzIHdlIGNhbiBxdWVyeS4gSSdsbCBzdWdnZXN0IGhvdyBJ IHRoaW5rIGl0IHNob3VsZCB3b3JrIGEgYml0IGxhdGVyLgoKSTkxNV9FWEVDX1JJTkdfTUFTSyBp cyB0aGUgdXBwZXIgbGltaXQgY2hlY2tlZCBpbiB0aGUgZHJpdmVyLAp0aGF0J3Mgd2h5IEkgdXNl ZCB0aGF0IG9uZS4gSSBjb3VsZCBoYXZlIGhhcmRjb2RlZCBpdCB0byA2NCwgYnV0Ckkgd2FudGVk IHRvIGtlZXAgaXQgY29uc2lzdGVudCB0byB0aGUgZHJpdmVyLgoKPiA+ICsKPiA+ICtzdGF0aWMg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICppbnRlbF9hY3RpdmVfZW5naW5lczI7Cj4g PiArCj4gPiAraW50IF9fZ2VtX3F1ZXJ5KGludCBmZCwgc3RydWN0IGRybV9pOTE1X3F1ZXJ5ICpx KQo+ID4gK3sKPiA+ICsJaW50IGVyciA9IDA7Cj4gPiArCj4gPiArCWlmIChpZ3RfaW9jdGwoZmQs IERSTV9JT0NUTF9JOTE1X1FVRVJZLCBxKSkKPiA+ICsJCWVyciA9IC1lcnJubzsKPiA+ICsKPiA+ ICsJZXJybm8gPSAwOwo+ID4gKwlyZXR1cm4gZXJyOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIGdl bV9xdWVyeShpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9xdWVyeSAqcSkKPiA+ICt7Cj4gPiArCWln dF9hc3NlcnRfZXEoX19nZW1fcXVlcnkoZmQsIHEpLCAwKTsKPiA+ICt9Cj4gCj4gSSB3b3VsZCBr ZWVwIHRoZXNlIHR3byBzdGF0aWMgaWYgdGhlcmUgYXJlIG5vIGV4dGVybmFsIGNhbGxlcnMgZm9y IG5vdy4KClllcywgSSBjYW4gbWFrZSB0aGVtIHN0YXRpYywgSSB0aG91Z2h0IHNvbWVvbmUgbWln aHQgbmVlZCB0aGVtIGluCnRoZSBmdXR1cmUuCgo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHF1ZXJ5 X2VuZ2luZXMoaW50IGZkLAo+ID4gKwkJCSAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9p bmZvICpxdWVyeV9lbmdpbmVzKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0 ZW0gaXRlbSA9IHsgfTsKPiA+ICsJc3RydWN0IGRybV9pOTE1X3F1ZXJ5IHF1ZXJ5ID0geyB9Owo+ ID4gKwo+ID4gKwlpdGVtLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllfRU5HSU5FX0lORk87Cj4g PiArCXF1ZXJ5Lml0ZW1zX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmaXRlbSk7Cj4gPiArCXF1ZXJ5 Lm51bV9pdGVtcyA9IDE7Cj4gPiArCWl0ZW0ubGVuZ3RoID0gU0laRU9GX1FVRVJZOwo+IAo+IEkg dGhpbmsgbWFraW5nIHRoaXMgZnVuY3Rpb24gdGFrZSBidWZmZXIgc2l6ZSBhbmQgcmV0dXJuIHRo ZSBxdWVyaWVkIHNpemUKPiB3b3VsZCBiZSBzaW1wbGVzdC4KCkkgaGF2ZW4ndCByZWFsbHkgdW5k ZXJzdG9vZCwgZG8geW91IG1lYW4gZG9pbmcgc29tZXRoaW5nIGxpa2U6CgpzdGF0aWMgaW50IHF1 ZXJ5X2VuZ2luZXMoLi4uLiwgaW50IHNpemUpCnsKICAgWy4uLl0KICAgcmV0dXJuIHNpemU7Cn0K Cm9yIGNhbGxpbmcgdGhlIGdlbV9xdWVyeSB0d2ljZSwgZmlyc3QgdGltZSBmb3IgZ2V0dGluZyB0 aGUgc2l6ZQphbmQgc2Vjb25kIHRpbWUgZm9yIGFsbG9jYXRpbmcgdGhlIG5lY2Vzc2FyeSByZXNv dXJjZXMuCgpCZWNhdXNlIGluIHRoZSBmaXJzdCBjYXNlLCB3ZSBoYXZlIHRoZSBzaXplIGluIHF1 ZXJ5X2VuZ2luZXMsIGlzCnRoYXQgcmlnaHQ/CgpXaGlsZSBpZiB5b3UgbWVhbiB0aGUgc2Vjb25k IGNhc2UsIHRoaXMgaXMgaG93IEkgZGlkIGl0IGF0IHRoZQp2ZXJ5IGJlZ2lubmluZywgYnV0IHRo ZW4gd2l0aCBDaHJpcyB3ZSBhZ3JlZWQgdGhhdCA2NAooSTkxNV9FWEVDX1JJTkdfTUFTSykgaXMg ImJpZyBlbm91Z2giLiBJZiB5b3UgYXJlIHN0cm9uZyB3aXRoIGl0LApJIGNhbiByZXZlcnQgaXQg YmFjay4KCj4gPiArCj4gPiArCWl0ZW0uZGF0YV9wdHIgPSB0b191c2VyX3BvaW50ZXIocXVlcnlf ZW5naW5lcyk7Cj4gPiArCj4gPiArCWdlbV9xdWVyeShmZCwgJnF1ZXJ5KTsKPiA+ICt9Cj4gPiAr Cj4gPiArYm9vbCBnZW1faGFzX2VuZ2luZV90b3BvbG9neSh2b2lkKQo+ID4gK3sKPiA+ICsJcmV0 dXJuIGludGVsX2FjdGl2ZV9lbmdpbmVzMiAhPSBpbnRlbF9leGVjdXRpb25fZW5naW5lczI7Cj4g Cj4gQSBwcm9ibGVtIGZvciB0aGUgZXhwb3J0ZWQgQVBJIGlmIGluaXRfZW5naW5lX2xpc3QgaGFz bid0IGJlZW4gY2FsbGVkIHlldD8KPiBNYXliZToKPiAKPiAJaWYgKCFpbnRlbF9hY3RpdmVfZW5n aW5lczIpCj4gCQlpbml0X2VuZ2luZV9saXN0KGZkKTsKPiAKPiAJcmV0dXJuIGludGVsX2FjdGl2 ZV9lbmdpbmVzMiAhPSBpbnRlbF9leGVjdXRpb25fZW5naW5lczI7Cj4gCj4gPwoKWWVzLCBpdCdz IGluZGVlZCBwcm9uZSB0byBiZSBtaXN1c2VkLCBJIHdvdWxkIG5lZWQgdG8gbWFrZSBhIG1vcmUK Z2VuZXJpYyB3YXksIGJlY2F1c2UgdGhlIHR3byBsaW5lcwoKICAgaWYgKCFpbnRlbF9hY3RpdmVf ZW5naW5lczIpCiAgICAgICAgICBpbml0X2VuZ2luZV9saXN0KGZkKTsKCmFyZSBjYWxsZWQgc28g bWFueSB0aW1lcyB0aGF0IEknbSBoYXZpbmcgYW4gb3ZlcmRvc2Ugb2YgdGhlbSA6KQoKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgc2V0X2N0eF9wYXJhbV9lbmdpbmVzKGludCBmZCwgdWlu dDMyX3QgY3R4X2lkKQo+ID4gK3sKPiA+ICsJc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdp bmVzICpjdHhfZW5naW5lOwo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0g Y3R4X3BhcmFtOwo+ID4gKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUy Owo+ID4gKwl1aW50OF90IGJ1ZmZbU0laRU9GX0NUWF9QQVJBTV0gPSB7IH07Cj4gPiArCWludCBp Owo+ID4gKwo+ID4gKwlpZiAoIWdlbV9oYXNfZW5naW5lX3RvcG9sb2d5KCkpCj4gPiArCQlyZXR1 cm47Cj4gCj4gQUZBSUNTIHRoaXMgY2FuIGJlIGFzc2VydCBoZXJlLgoKSSB0aGluayB0aGlzIGNo ZWNrIGlzIHJlZHVuZGFudCBhcyBpdCdzIG5ldmVyIGdvaW5nIHRvIGhhcHBlbi4KVGhpcyBmdW5j dGlvbiBpcyAnc3RhdGljJyBhbmQgdGhlIGNhbGxpbmcgZnVuY3Rpb24gY2hlY2tzIHRoYXQKYWxy ZWFkeS4gSSB3aWxsIHJlbW92ZSBpdC4KCj4gPiArCj4gPiArCWN0eF9lbmdpbmUgPSAoc3RydWN0 IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVzICopIGJ1ZmY7Cj4gPiArCj4gPiArCWN0eF9wYXJh bS5jdHhfaWQgPSBjdHhfaWQ7Cj4gPiArCWN0eF9wYXJhbS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9Q QVJBTV9FTkdJTkVTOwo+ID4gKwo+ID4gKwljdHhfZW5naW5lLT5leHRlbnNpb25zID0gMDsKPiA+ ICsJZm9yIChpID0gMCwgZTIgPSBpbnRlbF9hY3RpdmVfZW5naW5lczI7IGUyLT5uYW1lOyBpKyss IGUyKyspIHsKPiAKPiBIZXJlIEkgdGhpbmsgaXMgdGhlIHBsYWNlIHdoZXJlIHdlIGNoZWNrIHRo YXQgdGhlIHRvdGFsIG51bWJlciBvZiBlbmdpbmVzCj4gZG9lcyBub3QgZXhjZWVkIHRoZSBlbmdp bmUgbWFwIGV4ZWNidWYgaW5kZXguCj4gCj4gCWlndF9yZXF1aXJlKGkgPD0gSTkxNV9FWEVDX1JJ TkdfTUFTSyk7Cj4gCj4gPwoKSSBjYW4gYWRkIHRoYXQsIGJ1dCBpdCB3b3VsZCBiZSByZWR1bmRh bnQgYXMgdGhlIGxpc3Qgd291bGQgaGF2ZQpuZXZlciBiZWVuIGNyZWF0ZWQgb3RoZXJ3aXNlLi4u IGFueXdheSwgYmV0dGVyIGJlIHNhZmUgdGhhbiBzb3JyeSA6KQoKQlRXLCBnaXZlbiBteSBuYXR1 cmFsIGNvbmZ1c2lvbiBiZXR3ZWVuICdyZXF1aXJlJyBhbmQgJ2Fzc2VydCcsCnlvdSBtZWFudCAn YXNzZXJ0JywgcmlnaHQ/Cgo+ID4gKwkJY3R4X2VuZ2luZS0+Y2xhc3NfaW5zdGFuY2VbaV0uZW5n aW5lX2NsYXNzID0gZTItPmNsYXNzOwo+ID4gKwkJY3R4X2VuZ2luZS0+Y2xhc3NfaW5zdGFuY2Vb aV0uZW5naW5lX2luc3RhbmNlID0gZTItPmluc3RhbmNlOwo+ID4gKwl9Cj4gPiArCj4gPiArCWN0 eF9wYXJhbS5zaXplID0gb2Zmc2V0b2YodHlwZW9mKCpjdHhfZW5naW5lKSwgY2xhc3NfaW5zdGFu Y2VbaSArIDFdKTsKPiA+ICsJY3R4X3BhcmFtLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKGN0eF9l bmdpbmUpOwo+ID4gKwo+ID4gKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZjdHhfcGFyYW0p Owo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIEluaXRpYWxpemVzIHRoZSBsaXN0IG9mIGVu Z2luZXMuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqCj4gPiArICogIC0gMCBpbiBj YXNlIG9mIHN1Y2Nlc3MgYW5kIHRoZSBnZXQvc2V0X3BhcmFtIGlvY3RscyBhcmUgaW1wbGVtZW50 ZWQKPiA+ICsgKiAgLSAtRU5PREVWIGluIGNhc2Ugb2Ygc3VjY2VzcyBidXQgSTkxNV9DT05URVhU X1BBUkFNX0VOR0lORVMgaXMgbm90Cj4gPiArICogICAgaW1wbGVtZW50ZWQgaW4gRFJNX0lPQ1RM X0k5MTVfR0VNX0NPTlRFWFRfR0VUUEFSQU0gaW9jdGwuCj4gPiArICovCj4gPiArc3RhdGljIGlu dCBpbml0X2VuZ2luZV9saXN0KGludCBmZCkKPiA+ICt7Cj4gPiArCWNvbnN0IGNoYXIgKmNsYXNz X25hbWVzW10gPSB7ICJyY3MiLCAiYmNzIiwgInZjcyIsICJ2ZWNzIiB9Owo+ID4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcXVlcnlfZW5naW5lX2luZm8gKnF1ZXJ5X2VuZ2luZTsKPiA+ICsJdW5zaWduZWQg Y2hhciBxdWVyeV9idWZmZXJbU0laRU9GX1FVRVJZXSA9IHsgfTsKPiA+ICsJc3RydWN0IGRybV9p OTE1X2dlbV9jb250ZXh0X3BhcmFtIGN0eF9wYXJhbSA9IHsKPiA+ICsJCS5wYXJhbSA9IEk5MTVf Q09OVEVYVF9QQVJBTV9FTkdJTkVTLAo+ID4gKwl9Owo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJ LyogdGhlIGxpc3QgaXMgYWxyZWFkeSBpbml0aWFsaXplZCAqLwo+ID4gKwlpZiAoaW50ZWxfYWN0 aXZlX2VuZ2luZXMyKQo+ID4gKwkJcmV0dXJuIGdlbV9oYXNfZW5naW5lX3RvcG9sb2d5KCkgPyAw IDogLUVOT0RFVjsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogV2UgY2hlY2sgZmlyc3Qgd2hldGhl ciB0aGUgSTkxNV9DT05URVhUX1BBUkFNX0VOR0lORVMgcGFyYW1ldGVyIGlzCj4gPiArCSAqIHN1 cHBvcnRlZCBieSB0aGUgcnVubmluZyBrZXJuZWwuIElmIG5vdCwgX19nZW1fY29udGV4dF9nZXRf cGFyYW0oKQo+ID4gKwkgKiB3aWxsIHJldHVybiAtRUlOVkFMIHdoaWNoLCBhdCB0aGlzIHBvaW50 LCBpcyBub3QgbmVjZXNzYXJpbHkgYQo+ID4gKwkgKiBmYWlsdXJlIGJ1dCBpdCBtZWFucyB0aGF0 IHdlIG5lZWQgdG8gZmFsbCBiZWNrIHRvIHBvbGxpbmcgdGhlIGVuZ2luZXMKPiA+ICsJICogZGly ZWN0bHkgZnJvbSBpbnRlbF9leGVjdXRpb25fZW5naW5lczJbXS4KPiA+ICsJICoKPiA+ICsJICog V2Ugd2lsbCByZXR1cm4gLUVOT0RFViB3aXRoIHRoZSBtZWFuaW5nIG9mIG1pc3NpbmcgaW50ZXJm YWNlCj4gPiArCSAqLwo+ID4gKwlpZiAoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZjdHhf cGFyYW0pKSB7Cj4gPiArCQlpbnRlbF9hY3RpdmVfZW5naW5lczIgPSBpbnRlbF9leGVjdXRpb25f ZW5naW5lczI7Cj4gPiArCQlyZXR1cm4gLUVOT0RFVjsKPiA+ICsJfQo+ID4gKwo+ID4gKwlxdWVy eV9lbmdpbmUgPSAoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9pbmZvICopIHF1ZXJ5X2J1 ZmZlcjsKPiA+ICsJcXVlcnlfZW5naW5lcyhmZCwgcXVlcnlfZW5naW5lKTsKPiAKPiBEbyBhIHR3 byBzdGFnZSBxdWVyeSBoZXJlIC0gZmlyc3QgYXNrIGZvciByZXF1aXJlZCBidWZmZXIgc2l6ZSwg dGhlbgo+IGFsbG9jYXRlIGl0IGFuZCBxdWVyeToKPiAKPiAJc2l6ZSA9IHF1ZXJ5X2VuZ2luZXMo ZmQsIE5VTEwsIDApOwo+IAlxdWVyeV9lbmdpbmUgPSBtYWxsb2Moc2l6ZSk7Cj4gCXF1ZXJ5X2Vu Z2luZXMoZmQsIHF1ZXJ5X2VuZ2luZSwgc2l6ZSk7CgpBcyBhYm92ZSA6KSB0aGlzIGlzIGhvdyBJ IGRpZCBpdCBhdCB0aGUgYmVnaW5uaW5nIGFuZCB3aXRoIENocmlzCndlIGFncmVlZCB0aGF0IDY0 IGlzIGJpZyBlbm91Z2gsIGFuZCB0aGVuIHdlIGhhZCBzb21lIHJldmlldwpyb3VuZHMgb24gYWdy ZWVpbmcgb24gYnVmZmVyIHNpemUsIG5hbWUsIGNhbGN1bGF0aW9uIGFuZCBzbwpvbi4KClNoYWxs IEkgbW92ZSBiYWNrPyBIb25lc3RseSBJIGxpa2UgdGhlIGRvdWJsZSBjYWxsLCBhcyB3ZWxsLgoK PiA+ICsKPiA+ICsJaWd0X2Fzc2VydChxdWVyeV9lbmdpbmUtPm51bV9lbmdpbmVzIDwgSTkxNV9F WEVDX1JJTkdfTUFTSyArIDEpOwo+IAo+IFJlbW92ZSB0aGlzIHNpbmNlIHdlIGRvbid0IG5lZWQg dG8gbGltaXQgdGhlIHNpemUgb2YgdGhlIGFycmF5IGR1cmluZyB0aGUKPiBxdWVyeS4gSXQgaXMg b25seSB0aGUgZW5naW5lIG1hcCB0aGF0IGhhcyB0aGUgbGltaXRhdGlvbi4KClRoaXMgY2FtZSBh ZnRlciBvbmUgb2YgdGhlIDEwIHJvdW5kcyBvZiByZXZpZXcgYXMgd2VsbCA6KQpJdCdzIGluZGVl ZCBhIGJpdCByZWR1bmRhbnQsIEl0J3MgbWFpbmx5IGZvciB0aGUgbWFsbG9jLAp0byBhdm9pZCBj cmF6eSBhbGxvY2F0aW9uIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcuCgo+ID4gKwo+ID4g KwlpbnRlbF9hY3RpdmVfZW5naW5lczIgPSBtYWxsb2MoKHF1ZXJ5X2VuZ2luZS0+bnVtX2VuZ2lu ZXMgKyAxKSAqCj4gPiArCQkJCSAgICAgICBzaXplb2YoKmludGVsX2FjdGl2ZV9lbmdpbmVzMikp Owo+ID4gKwlpZ3RfYXNzZXJ0KGludGVsX2FjdGl2ZV9lbmdpbmVzMik7Cj4gPiArCj4gPiArCWZv ciAoaSA9IDA7IGkgPCBxdWVyeV9lbmdpbmUtPm51bV9lbmdpbmVzOyBpKyspIHsKPiA+ICsJCWNo YXIgKm5hbWU7Cj4gPiArCQlpbnQgY2xhc3MgPSBxdWVyeV9lbmdpbmUtPmVuZ2luZXNbaV0uZW5n aW5lX2NsYXNzOwo+ID4gKwkJaW50IGluc3RhbmNlID0gcXVlcnlfZW5naW5lLT5lbmdpbmVzW2ld LmVuZ2luZV9pbnN0YW5jZTsKPiAKPiBDb3VsZCB1c2UgX191MTYgdG8gbWF0Y2ggdWFwaS4KClN1 cmUhCgo+ID4gKwo+ID4gKwkJaW50ZWxfYWN0aXZlX2VuZ2luZXMyW2ldLmNsYXNzID0gY2xhc3M7 Cj4gPiArCQlpbnRlbF9hY3RpdmVfZW5naW5lczJbaV0uaW5zdGFuY2UgPSBpbnN0YW5jZTsKPiA+ ICsKPiA+ICsJCS8qIGlmIHdlIGRvbid0IHJlY29nbmlzZSB0aGUgY2xhc3MsIHRoZW4gd2UgbWFy ayBpdCBhcyAidW5rIiAqLwo+ID4gKwkJaWYgKGNsYXNzID49IEFSUkFZX1NJWkUoY2xhc3NfbmFt ZXMpIHx8ICFjbGFzc19uYW1lc1tjbGFzc10pCj4gCj4gU2Vjb25kIGNvbmRpdGlvbiBzZWVtcyB0 byBiZSBub3QgbmVlZGVkIGF0IHRoZSBtb21lbnQuCgpZZXMsIG9mIGNvdXJzZSwgaXQgbXVzdCBi ZSBhIGxlZnRvdmVyLgoKPiA+ICtzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmdldF9h Y3RpdmVfZW5naW5lcyhpbnQgZmQpCj4gCj4gVW5leHBvcnQgdGhpcyBvbmU/CgpJIHRob3VnaHQg c29tZW9uZSBtaWdodCBuZWVkIGl0LCBJIHdpbGwgZG8gaXQgc3RhdGljIGFuZCByZXdvcmsKaXQg d2l0aCB0aGUgYm9vbCBnZW1faGFzX2VuZ2luZV90b3BvbG9neSgpIGFzIHRoZXkgd291bGQgYmVj b21lCnZlcnkgc2ltaWxhci4KCj4gPiArewo+ID4gKwlpZiAoaW5pdF9lbmdpbmVfbGlzdChmZCkp IHsKPiA+ICsJCWlndF9pbmZvKCJ1c2luZyBwcmUtYWxsb2NhdGVkIGVuZ2luZSBsaXN0XG4iKTsK PiA+ICsJCXJldHVybiBOVUxMOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBpbnRlbF9hY3Rp dmVfZW5naW5lczI7Cj4gPiArfQo+ID4gKwo+ID4gK3N0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5n aW5lMiAqZ2VtX3NldF9jb250ZXh0X2dldF9lbmdpbmVzKGludCBmZCwKPiA+ICsJCQkJCQkJICAg IHVpbnQzMl90IGN0eF9pZCkKPiAKPiBJIGZpbmQgdGhlIG5hbWUgb2YgdGhpcyBmdW5jdGlvbiBy ZWFsbHkgY29uZnVzaW5nIChzZXQgZ2V0IHdoYXQ/KS4gQ2FuIEkKPiBzdWdnZXN0IF9fZ2VtX3By ZXBhcmVfY29udGV4dF9lbmdpbmVzIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQ/CgpUaGUgbmFtZSBt ZWFucyAic2V0IGNvbnRleHQgYW5kIGdldCBlbmdpbmVzIiwgYXMgaXQncyBhICJnZXRfIgpraW5k IG9mIGZ1bmN0aW9uLiBCdXQgYXMgaXQgY2FtZSBvdXQsIEkgaGF2ZSBhIHZlcnkgbGltaXRlZApp bWFnaW5hdGlvbiBmb3IgbmFtZXMgY2hvaWNlLiBJIHdpbGwgY2FsbCBpdApfX2dlbV9wcmVwYXJl X2NvbnRleHRfZW5naW5lcygpLCB0aGVuLgoKPiA+ICt7Cj4gPiArCXN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqYWN0aXZlX2VuZ2luZXMgPSBnZXRfYWN0aXZlX2VuZ2luZXMoZmQpOwo+ ID4gKwo+ID4gKwlpZiAoIWFjdGl2ZV9lbmdpbmVzKQo+ID4gKwkJcmV0dXJuIGludGVsX2V4ZWN1 dGlvbl9lbmdpbmVzMjsKPiAKPiBTbyB3aXRob3V0IGVuZ2luZSBkaXNjb3ZlcnkgdGhlIGZ1bmN0 aW9uIHdpbGwgbm90IGNvbmZpZ3VyZSB0aGUgZW5naW5lIG1hcC4KPiBIb3cgd2lsbCB0aGUgY29k ZSBpbnNpZGUgZm9yX2VhY2hfZW5naW5lMiBiZSBhYmxlIHRvIHdvcmsgdGhlbj8KCkl0J3MgdGhp cyBwYXJ0IG9mIHRoZSBmb3JfZWFjaF9lbmdpbmUyIHRoYXQgd291bGQgbWFrZSBpdCB3b3JrOgoK IGZvcl9pZiAoZ2VtX2hhc19lbmdpbmVfdG9wb2xvZ3koKSB8fCBcCiAgICAgICAgIGdlbV9oYXNf ZW5naW5lKGZkLCBlMl9fLT5jbGFzcywgZTJfXy0+aW5zdGFuY2UpKQoKV2UgaGFkIHF1aXRlIHNv bWUgZGlzY3Vzc2lvbnMgYWJvdXQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQKdGhlIHdob2xl IHRoaW5nIGlzIGRlc2lnbmVkIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUsIG90aGVyd2lzZSwK SSB3b3VsZCBoYXZlIHJlbW92ZWQgcXVpdGUgc29tZSBjb2RlIGZyb20gdGhlIGFib3ZlLgoKPiBJ IGd1ZXNzIGl0J3Mgb2theSBzaW5jZSB3ZSBkb24ndCBleHBlY3QgdG8gc2VlIGEga2VybmVsIHdp dGggY3R4IGVuZ2luZSBtYXAKPiBzdXBwb3J0IGFuZCBubyBlbmdpbmUgZGlzY292ZXJ5IGJ1dCBp dCBmZWVscyBhIGJpdCB1bm5hdHVyYWwuCj4gCj4gQnV0IEkgdGhpbmsgaXQgZWZmZWN0aXZlbHkg bWVhbnMgeW91IHNob3VsZCBoYXZlIGlndF9yZXF1aXJlX2dlbV9lbmdpbmVfbGlzdAo+IGluIGhl cmUgc2luY2UgaXQgaXMgb3RoZXJ3aXNlIG5vdCB1c2FibGUgZnJvbSB0aGUgZm9yX2VhY2hfZW5n aW5lMiBpdGVyYXRvci4KPiAKPiA+ICsKPiA+ICsJc2V0X2N0eF9wYXJhbV9lbmdpbmVzKGZkLCBj dHhfaWQpOwo+IAo+IFlvdSBuZWVkIHRvIGhhbmRsZSB0aGUgdXNlIGNhc2Ugd2hlcmUgdGhlIGNv bnRleHQgYWxyZWFkeSBoYXMgYSBtYXAKPiBjb25maWd1cmVkIGluc3RlYWQgb2Ygb3ZlcnJpZGlu ZyBpdC4gU2hvdWxkIGJlIGVhc3kuCgpZZXMsIHRoaXMgaXMgcmVsZXZhbnQgdG8geW91ciBjb21t ZW50IGFib3ZlLCBhYm91dCB0aGUKaWd0X3JlcXVpcmUoPG5ld19hcGk+KS4gVGhpcyBwYXJ0IGlz IGNoZWNrZWQgaW4KJ2dldF9hY3RpdmVfZW5naW5lcyhmZCknLCB0aGF0IHJldHVybnMgTlVMTCBp ZiB3ZSBkbyBub3QgaGF2ZSB0aGUKbmV3IHVhcGkgYW5kIHRoZXJlZm9yZSBpdCByZXR1cm5zIHRo ZSBvbGQgbGlzdCBvZiBlbmdpbmVzLgoKYWRkaW5nIHRoZSBpZ3RfcmVxdWlyZSgpIChhc3NldD8p IHdvdWxkIGJlIHJlZHVuZGFudC4KQW0gSSBtaXNzaW5nIGFueSB1c2UgY2FzZT8KCj4gPiArI2lm bmRlZiBHRU1fUVVFUllfSAo+ID4gKyNkZWZpbmUgR0VNX1FVRVJZX0gKPiAKPiBHRU1fRU5HSU5F X1RPUE9MT0dZX0gKClllcyA6KSBUaGlzIGxpYnJhcnkgd2FzIGFmZmVjdGVkIGJ5IGFuIGV4dGVu c2l2ZSBuYW1lIGNoYW5naW5nLApkdWUgdG8gbXkgbGFjayBvZiBpbWFnaW5hdGlvbiA6KQoKPiA+ IC1jb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgaW50ZWxfZXhlY3V0aW9uX2Vu Z2luZXMyW10gPSB7Cj4gPiArc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyIGludGVsX2V4 ZWN1dGlvbl9lbmdpbmVzMltdID0gewo+IAo+IFRoaXMgb25lIGNhbid0IHN0YXkgY29uc3Q/CgpZ ZXMsIEkgaGF0ZSB0aGlzIGJpdCBhcyB3ZWxsISBJIHJlbW92ZWQgaGVyZSB0aGUgY29uc3QsIGJl Y2F1c2UgSQp3YW50ZWQgYWN0aXZlX2VuZ2luZXMyIHRvIHBvaW50IHRvIGV4ZWN1dGlvbl9lbmdp bmUyLgoKYWN0aXZlX2VuZ2luZXMyIGNhbm5vdCBiZSBjb25zdCwgc28gdGhhdCBJIGNhbm5vdCBt YWtlIGl0IHBvaW50CnRvIHRoaXMgb25lLCB0aGVyZWZvcmUgSSBoYXZlIHRvIHJlbW92ZSB0aGUg Y29uc3QgZnJvbSBoZXJlLgoKQnV0LCBpbmRlZWQsIGJlY2F1c2Ugbm93IEkgYW0gdXNpbmcgdGhl ICJnZXRfZW5naW5lLi4uKCkiIGFuZApiZWNhdXNlIEkgYW0gZ29pbmcgdG8gcmV3b3JrIHRoZSAn Ym9vbCBoYXNfZW5naW5lX3RvcG9sb2d5KCknCmZ1bmN0aW9uLCBhcHByb2FjaCwgSSBtaWdodCBu b3QgbmVlZCBhbnltb3JlIHRvIHJlZmVyIHRvIHRoaXMKb25lLgoKV2hhdCB3aWxsIGhhcHBlbiwg dGhvdWdoLCBpcyB0aGF0IHdlIHdvdWxkIHRoZW4gbmVlZCwgYXQgc29tZQpwb2ludCwgdG8gcGF0 Y2ggYWxsIHRoZSB0ZXN0cyB0aGF0IHJlZmVyIHRvCmludGVsX2V4ZWN1dGlvbl9lbmdpbmVzMi4K ClRoYW5rcyBhIGxvdCBmb3IgeW91ciByZXZpZXcsIFR2cnRrbywKQW5kaQpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdApp Z3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=