From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael H. Nguyen" Subject: Re: [PATCH v6 5/5] drm/i915: Tidy up execbuffer command parsing code Date: Thu, 11 Dec 2014 10:56:09 -0800 Message-ID: <5489E8C9.6050700@intel.com> References: <1418078030-17690-1-git-send-email-michael.h.nguyen@intel.com> <1418078030-17690-6-git-send-email-michael.h.nguyen@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id A019A6E1DF for ; Thu, 11 Dec 2014 10:51:57 -0800 (PST) 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: "Bloomfield, Jon" , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org CgpPbiAxMi8xMS8yMDE0IDA1OjQ5IEFNLCBCbG9vbWZpZWxkLCBKb24gd3JvdGU6Cj4KPgo+PiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiBOZ3V5ZW4sIE1pY2hhZWwgSAo+PiBT ZW50OiBNb25kYXksIERlY2VtYmVyIDA4LCAyMDE0IDEwOjM0IFBNCj4+IFRvOiBpbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+IENjOiBCbG9vbWZpZWxkLCBKb247IEJyYWQgVm9sa2lu Cj4+IFN1YmplY3Q6IFtQQVRDSCB2NiA1LzVdIGRybS9pOTE1OiBUaWR5IHVwIGV4ZWNidWZmZXIg Y29tbWFuZCBwYXJzaW5nIGNvZGUKPj4KPj4gRnJvbTogQnJhZCBWb2xraW4gPGJyYWRsZXkuZC52 b2xraW5AaW50ZWwuY29tPgo+Pgo+PiBNb3ZlIGl0IHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gc2lu Y2UgdGhlIG1haW4gZG9fZXhlY2J1ZmZlciBmdW5jdGlvbgo+PiBhbHJlYWR5IGhhcyBzbyBtdWNo IGdvaW5nIG9uLgo+Pgo+PiB2MjoKPj4gLSBNb3ZlIHBpbi91bnBpbiBjYWxscyBpbnNpZGUgaTkx NV9wYXJzZV9jbWRzKCkgKENocmlzIFcsIHY0IDcvNwo+PiAgICBmZWVkYmFjaykKPj4KPj4gSXNz dWU6IFZJWi00NzE5Cj4+IFNpZ25lZC1vZmYtYnk6IEJyYWQgVm9sa2luIDxicmFkbGV5LmQudm9s a2luQGludGVsLmNvbT4KPj4KPj4gQ29uZmxpY3RzOgo+PiAJZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4+IC0tLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfY21kX3BhcnNlci5jICAgICB8ICAgOCArKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2V4ZWNidWZmZXIuYyB8IDEyNiArKysrKysrKysrKysrKysrLS0tCj4+IC0tLS0tLS0t LS0KPj4gICAyIGZpbGVzIGNoYW5nZWQsIDc3IGluc2VydGlvbnMoKyksIDU3IGRlbGV0aW9ucygt KQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2Vy LmMKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYwo+PiBpbmRleCAx MTgwNzlkLi44MGIxYjI4IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2NtZF9wYXJzZXIuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJz ZXIuYwo+PiBAQCAtMTA0MiwxMCArMTA0MiwxNyBAQCBpbnQgaTkxNV9wYXJzZV9jbWRzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MKPj4gKnJpbmcsCj4+ICAgCXN0cnVjdCBkcm1faTkxNV9jbWRfZGVz Y3JpcHRvciBkZWZhdWx0X2Rlc2MgPSB7IDAgfTsKPj4gICAJYm9vbCBvYWNvbnRyb2xfc2V0ID0g ZmFsc2U7IC8qIE9BQ09OVFJPTCB0cmFja2luZy4gU2VlCj4+IGNoZWNrX2NtZCgpICovCj4+Cj4+ ICsJcmV0ID0gaTkxNV9nZW1fb2JqX2dndHRfcGluKHNoYWRvd19iYXRjaF9vYmosIDQwOTYsIDAp Owo+PiArCWlmIChyZXQpIHsKPj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiQ01EOiBGYWlsZWQgdG8g cGluIHNoYWRvdyBiYXRjaFxuIik7Cj4+ICsJCXJldHVybiAtMTsKPj4gKwl9Cj4+ICsKPj4gICAJ YmF0Y2hfYmFzZSA9IGNvcHlfYmF0Y2goc2hhZG93X2JhdGNoX29iaiwgYmF0Y2hfb2JqLAo+PiAg IAkJCQliYXRjaF9zdGFydF9vZmZzZXQsIGJhdGNoX2xlbik7Cj4+ICAgCWlmIChJU19FUlIoYmF0 Y2hfYmFzZSkpIHsKPj4gICAJCURSTV9ERUJVR19EUklWRVIoIkNNRDogRmFpbGVkIHRvIGNvcHkg YmF0Y2hcbiIpOwo+PiArCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihzaGFkb3dfYmF0Y2hf b2JqKTsKPj4gICAJCXJldHVybiBQVFJfRVJSKGJhdGNoX2Jhc2UpOwo+PiAgIAl9Cj4+Cj4+IEBA IC0xMTE2LDYgKzExMjMsNyBAQCBpbnQgaTkxNV9wYXJzZV9jbWRzKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKnJpbmcsCj4+ICAgCX0KPj4KPj4gICAJdnVubWFwKGJhdGNoX2Jhc2UpOwo+PiArCWk5 MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluKHNoYWRvd19iYXRjaF9vYmopOwo+Pgo+PiAgIAlyZXR1 cm4gcmV0Owo+PiAgIH0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2V4ZWNidWZmZXIuYwo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNi dWZmZXIuYwo+PiBpbmRleCAyMDcxOTM4Li4zZDM2NDY1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4+IEBAIC0xMDY5LDYgKzEwNjksNjUgQEAg aTkxNV9lbWl0X2JveChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+PiAgIAlyZXR1cm4g MDsKPj4gICB9Cj4+Cj4+ICtzdGF0aWMgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QqCj4+ICtp OTE1X2dlbV9leGVjYnVmZmVyX3BhcnNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCj4+ ICsJCQkgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyCj4+ICpzaGFkb3dfZXhlY19l bnRyeSwKPj4gKwkJCSAgc3RydWN0IGViX3ZtYXMgKmViLAo+PiArCQkJICBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqYmF0Y2hfb2JqLAo+PiArCQkJICB1MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0 LAo+PiArCQkJICB1MzIgYmF0Y2hfbGVuLAo+PiArCQkJICBib29sIGlzX21hc3RlciwKPj4gKwkJ CSAgdTMyICpmbGFncykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KGJhdGNoX29iai0+YmFzZS5kZXYpOwo+PiArCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpzaGFkb3dfYmF0Y2hfb2JqOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlzaGFk b3dfYmF0Y2hfb2JqID0gaTkxNV9nZW1fYmF0Y2hfcG9vbF9nZXQoJmRldl9wcml2LQo+Pj4gbW0u YmF0Y2hfcG9vbCwKPj4gKwkJCQkJCSAgIGJhdGNoX29iai0+YmFzZS5zaXplKTsKPj4gKwlpZiAo SVNfRVJSKHNoYWRvd19iYXRjaF9vYmopKQo+PiArCQlyZXR1cm4gc2hhZG93X2JhdGNoX29iajsK Pj4gKwo+PiArCXJldCA9IGk5MTVfcGFyc2VfY21kcyhyaW5nLAo+PiArCQkJICAgICAgYmF0Y2hf b2JqLAo+PiArCQkJICAgICAgc2hhZG93X2JhdGNoX29iaiwKPj4gKwkJCSAgICAgIGJhdGNoX3N0 YXJ0X29mZnNldCwKPj4gKwkJCSAgICAgIGJhdGNoX2xlbiwKPj4gKwkJCSAgICAgIGlzX21hc3Rl cik7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlpZiAocmV0ID09IC1FQUNDRVMpCj4+ICsJCQlyZXR1 cm4gYmF0Y2hfb2JqOwo+Cj4gU2hvdWxkbid0IHRoaXMgYmUgcmV0dXJuaW5nIGFuIGVycm9yIGNv ZGUgPwpHb29kIHF1ZXN0aW9uLiAtRUFDQ0VTUyB0ZWxscyB0aGUgY2FsbGVyIG9mIGk5MTVfcGFy c2VfY21kcygpIG9mIGEgCnNwZWNpYWwgY2FzZS4gVGhlcmUgYXJlIHNvbWUgY29tbWVudHMgaW4g aXRzIGZuYyBoZWFkZXIgYW5kIGltcGxlbWVudGF0aW9uLgoKLUVBQ0NFU1MgaW5kaWNhdGVzIHRo YXQgYmF0Y2hfb2JqIGNvbnRhaW5zIGEgY2hhaW5lZCBiYXRjaCBpbiB3aGljaCBjYXNlIAp3ZSBk aXNwYXRjaCBiYXRjaF9vYmogYXMgbm9uLXNlY3VyZS4gV2UgcmV0dXJuIGJhdGNoX29iaiBoZXJl IGIvYyB0aGUgCmxvZ2ljIGJlbG93IGRvZXNuJ3QgYXBwbHkuIEkgYmVsaWV2ZSB0aGUgcmVhc29u IHdlIHNhZmVseSBkaXNwYXRjaCAKY2hhaW5lZCBiYXRjaGVzIGFzIG5vbi1zZWN1cmUgaXMgYi9j IEJyYWQgYW5kIG90aGVycyBwcm9iYWJseSBkZXRlcm1pbmVkIAp0aGF0IHRoZXJlIHdlcmVuJ3Qg YW55IHZhbGlkIHVzZSBjYXNlcyB3aGVyZSBjaGFpbmVkIGJhdGNoZXMgbmVlZGVkIHRvIApiZSBk aXNwYXRjaGVkIGFzIHNlY3VyZS4gTGVhdmluZyB0aGVtIG5vbi1zZWN1cmUsIEhXIHdpbGwgTk9Q IGJhZCBjbWRzIAphbmQgaXRzIG5vdCBuZWNlc3NhcnkgZm9yIGk5MTUgdG8gZG8gcGFyc2luZy4K ClRoYW5rcywKTWlrZQo+Cj4KPgo+PiArCX0gZWxzZSB7Cj4+ICsJCXN0cnVjdCBpOTE1X3ZtYSAq dm1hOwo+PiArCj4+ICsJCW1lbXNldChzaGFkb3dfZXhlY19lbnRyeSwgMCwKPj4gc2l6ZW9mKCpz aGFkb3dfZXhlY19lbnRyeSkpOwo+PiArCj4+ICsJCXZtYSA9IGk5MTVfZ2VtX29ial90b19nZ3R0 KHNoYWRvd19iYXRjaF9vYmopOwo+PiArCQl2bWEtPmV4ZWNfZW50cnkgPSBzaGFkb3dfZXhlY19l bnRyeTsKPj4gKwkJdm1hLT5leGVjX2VudHJ5LT5mbGFncyA9IF9fRVhFQ19PQkpFQ1RfUFVSR0VB QkxFOwo+PiArCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2UoJnNoYWRvd19iYXRjaF9vYmotPmJh c2UpOwo+PiArCQlsaXN0X2FkZF90YWlsKCZ2bWEtPmV4ZWNfbGlzdCwgJmViLT52bWFzKTsKPj4g Kwo+PiArCQlzaGFkb3dfYmF0Y2hfb2JqLT5iYXNlLnBlbmRpbmdfcmVhZF9kb21haW5zID0KPj4g KwkJCWJhdGNoX29iai0+YmFzZS5wZW5kaW5nX3JlYWRfZG9tYWluczsKPj4gKwo+PiArCQkvKgo+ PiArCQkgKiBTZXQgdGhlIERJU1BBVENIX1NFQ1VSRSBiaXQgdG8gcmVtb3ZlIHRoZQo+PiBOT05f U0VDVVJFCj4+ICsJCSAqIGJpdCBmcm9tIE1JX0JBVENIX0JVRkZFUl9TVEFSVCBjb21tYW5kcyBp c3N1ZWQgaW4KPj4gdGhlCj4+ICsJCSAqIGRpc3BhdGNoX2V4ZWNidWZmZXIgaW1wbGVtZW50YXRp b25zLiBXZSBzcGVjaWZpY2FsbHkKPj4gKwkJICogZG9uJ3Qgd2FudCB0aGF0IHNldCB3aGVuIHRo ZSBjb21tYW5kIHBhcnNlciBpcwo+PiArCQkgKiBlbmFibGVkLgo+PiArCQkgKgo+PiArCQkgKiBG SVhNRTogd2l0aCBhbGlhc2luZyBwcGd0dCwgYnVmZmVycyB0aGF0IHNob3VsZCBvbmx5Cj4+ICsJ CSAqIGJlIGluIGdndHQgc3RpbGwgZW5kIHVwIGluIHRoZSBhbGlhc2luZyBwcGd0dC4gcmVtb3Zl Cj4+ICsJCSAqIHRoaXMgY2hlY2sgd2hlbiB0aGF0IGlzIGZpeGVkLgo+PiArCQkgKi8KPj4gKwkJ aWYgKFVTRVNfRlVMTF9QUEdUVChkZXYpKQo+PiArCQkJKmZsYWdzIHw9IEk5MTVfRElTUEFUQ0hf U0VDVVJFOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiByZXQgPyBFUlJfUFRSKHJldCkgOiBzaGFk b3dfYmF0Y2hfb2JqOyB9Cj4+Cj4+ICAgaW50Cj4+ICAgaTkxNV9nZW1fcmluZ2J1ZmZlcl9zdWJt aXNzaW9uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZQo+PiAqZmlsZSwg QEAgLTEyODYsNyArMTM0NSw2IEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0IGRybV9k ZXZpY2UKPj4gKmRldiwgdm9pZCAqZGF0YSwKPj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPj4gICAJc3RydWN0IGViX3ZtYXMgKmViOwo+ PiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYmF0Y2hfb2JqOwo+PiAtCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpzaGFkb3dfYmF0Y2hfb2JqID0gTlVMTDsKPj4gICAJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgc2hhZG93X2V4ZWNfZW50cnk7Cj4+ICAgCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4+ICAgCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHg7 Cj4+IEBAIC0xNDA2LDYzICsxNDY0LDE3IEBAIGk5MTVfZ2VtX2RvX2V4ZWNidWZmZXIoc3RydWN0 IGRybV9kZXZpY2UKPj4gKmRldiwgdm9pZCAqZGF0YSwKPj4gICAJfQo+Pgo+PiAgIAlpZiAoaTkx NV9uZWVkc19jbWRfcGFyc2VyKHJpbmcpKSB7Cj4+IC0JCXNoYWRvd19iYXRjaF9vYmogPQo+PiAt CQkJaTkxNV9nZW1fYmF0Y2hfcG9vbF9nZXQoJmRldl9wcml2LQo+Pj4gbW0uYmF0Y2hfcG9vbCwK Pj4gLQkJCQkJCWJhdGNoX29iai0+YmFzZS5zaXplKTsKPj4gLQkJaWYgKElTX0VSUihzaGFkb3df YmF0Y2hfb2JqKSkgewo+PiAtCQkJcmV0ID0gUFRSX0VSUihzaGFkb3dfYmF0Y2hfb2JqKTsKPj4g LQkJCS8qIERvbid0IHRyeSB0byBjbGVhbiB1cCB0aGUgb2JqIGluIHRoZSBlcnJvciBwYXRoICov Cj4+IC0JCQlzaGFkb3dfYmF0Y2hfb2JqID0gTlVMTDsKPj4gLQkJCWdvdG8gZXJyOwo+PiAtCQl9 Cj4+IC0KPj4gLQkJc2hhZG93X2JhdGNoX29iai0+bWFkdiA9IEk5MTVfTUFEVl9XSUxMTkVFRDsK Pj4gLQo+PiAtCQlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9waW4oc2hhZG93X2JhdGNoX29iaiwg NDA5NiwgMCk7Cj4+IC0JCWlmIChyZXQpCj4+ICsJCWJhdGNoX29iaiA9IGk5MTVfZ2VtX2V4ZWNi dWZmZXJfcGFyc2UocmluZywKPj4gKwkJCQkJCSAgICAgICZzaGFkb3dfZXhlY19lbnRyeSwKPj4g KwkJCQkJCSAgICAgIGViLAo+PiArCQkJCQkJICAgICAgYmF0Y2hfb2JqLAo+PiArCQkJCQkJICAg ICAgYXJncy0+YmF0Y2hfc3RhcnRfb2Zmc2V0LAo+PiArCQkJCQkJICAgICAgYXJncy0+YmF0Y2hf bGVuLAo+PiArCQkJCQkJICAgICAgZmlsZS0+aXNfbWFzdGVyLAo+PiArCQkJCQkJICAgICAgJmZs YWdzKTsKPj4gKwkJaWYgKElTX0VSUihiYXRjaF9vYmopKSB7Cj4+ICsJCQlyZXQgPSBQVFJfRVJS KGJhdGNoX29iaik7Cj4+ICAgCQkJZ290byBlcnI7Cj4+IC0KPj4gLQkJcmV0ID0gaTkxNV9wYXJz ZV9jbWRzKHJpbmcsCj4+IC0JCQkJICAgICAgYmF0Y2hfb2JqLAo+PiAtCQkJCSAgICAgIHNoYWRv d19iYXRjaF9vYmosCj4+IC0JCQkJICAgICAgYXJncy0+YmF0Y2hfc3RhcnRfb2Zmc2V0LAo+PiAt CQkJCSAgICAgIGFyZ3MtPmJhdGNoX2xlbiwKPj4gLQkJCQkgICAgICBmaWxlLT5pc19tYXN0ZXIp Owo+PiAtCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihzaGFkb3dfYmF0Y2hfb2JqKTsKPj4g LQo+PiAtCQlpZiAocmV0KSB7Cj4+IC0JCQlpZiAocmV0ICE9IC1FQUNDRVMpCj4+IC0JCQkJZ290 byBlcnI7Cj4+IC0JCX0gZWxzZSB7Cj4+IC0JCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPj4gLQo+ PiAtCQkJbWVtc2V0KCZzaGFkb3dfZXhlY19lbnRyeSwgMCwKPj4gLQkJCSAgICAgICBzaXplb2Yo c2hhZG93X2V4ZWNfZW50cnkpKTsKPj4gLQo+PiAtCQkJdm1hID0gaTkxNV9nZW1fb2JqX3RvX2dn dHQoc2hhZG93X2JhdGNoX29iaik7Cj4+IC0JCQl2bWEtPmV4ZWNfZW50cnkgPSAmc2hhZG93X2V4 ZWNfZW50cnk7Cj4+IC0JCQl2bWEtPmV4ZWNfZW50cnktPmZsYWdzID0KPj4gX19FWEVDX09CSkVD VF9QVVJHRUFCTEU7Cj4+IC0JCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2UoJnNoYWRvd19iYXRj aF9vYmotCj4+PiBiYXNlKTsKPj4gLQkJCWxpc3RfYWRkX3RhaWwoJnZtYS0+ZXhlY19saXN0LCAm ZWItPnZtYXMpOwo+PiAtCj4+IC0JCQlzaGFkb3dfYmF0Y2hfb2JqLT5iYXNlLnBlbmRpbmdfcmVh ZF9kb21haW5zID0KPj4gLQkJCQliYXRjaF9vYmotPmJhc2UucGVuZGluZ19yZWFkX2RvbWFpbnM7 Cj4+IC0KPj4gLQkJCWJhdGNoX29iaiA9IHNoYWRvd19iYXRjaF9vYmo7Cj4+IC0KPj4gLQkJCS8q Cj4+IC0JCQkgKiBTZXQgdGhlIERJU1BBVENIX1NFQ1VSRSBiaXQgdG8gcmVtb3ZlIHRoZQo+PiBO T05fU0VDVVJFCj4+IC0JCQkgKiBiaXQgZnJvbSBNSV9CQVRDSF9CVUZGRVJfU1RBUlQgY29tbWFu ZHMKPj4gaXNzdWVkIGluIHRoZQo+PiAtCQkJICogZGlzcGF0Y2hfZXhlY2J1ZmZlciBpbXBsZW1l bnRhdGlvbnMuIFdlCj4+IHNwZWNpZmljYWxseQo+PiAtCQkJICogZG9uJ3Qgd2FudCB0aGF0IHNl dCB3aGVuIHRoZSBjb21tYW5kIHBhcnNlciBpcwo+PiAtCQkJICogZW5hYmxlZC4KPj4gLQkJCSAq Cj4+IC0JCQkgKiBGSVhNRTogd2l0aCBhbGlhc2luZyBwcGd0dCwgYnVmZmVycyB0aGF0IHNob3Vs ZCBvbmx5Cj4+IC0JCQkgKiBiZSBpbiBnZ3R0IHN0aWxsIGVuZCB1cCBpbiB0aGUgYWxpYXNpbmcg cHBndHQuIHJlbW92ZQo+PiAtCQkJICogdGhpcyBjaGVjayB3aGVuIHRoYXQgaXMgZml4ZWQuCj4+ IC0JCQkgKi8KPj4gLQkJCWlmIChVU0VTX0ZVTExfUFBHVFQoZGV2KSkKPj4gLQkJCQlmbGFncyB8 PSBJOTE1X0RJU1BBVENIX1NFQ1VSRTsKPj4gICAJCX0KPj4gICAJfQo+Pgo+PiAtLQo+PiAxLjku MQo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==