From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 1/3] igt/gem_stolen: Verifying extended gem_create ioctl Date: Tue, 15 Sep 2015 16:27:44 +0100 Message-ID: <55F838F0.4010108@linux.intel.com> References: <1442306188-25779-1-git-send-email-ankitprasad.r.sharma@intel.com> <1442306188-25779-2-git-send-email-ankitprasad.r.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 0BD0D6E40B for ; Tue, 15 Sep 2015 08:27:47 -0700 (PDT) In-Reply-To: <1442306188-25779-2-git-send-email-ankitprasad.r.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ankitprasad.r.sharma@intel.com, intel-gfx@lists.freedesktop.org Cc: akash.goel@intel.com, shashidhar.hiremath@intel.com List-Id: intel-gfx@lists.freedesktop.org CgpPbiAwOS8xNS8yMDE1IDA5OjM2IEFNLCBhbmtpdHByYXNhZC5yLnNoYXJtYUBpbnRlbC5jb20g d3JvdGU6Cj4gRnJvbTogQW5raXRwcmFzYWQgU2hhcm1hIDxhbmtpdHByYXNhZC5yLnNoYXJtYUBp bnRlbC5jb20+Cj4KPiBUaGlzIHBhdGNoIGFkZHMgdGhlIHRlc3RjYXNlcyBmb3IgdmVyaWZ5aW5n IHRoZSBuZXcgZXh0ZW5kZWQKPiBnZW1fY3JlYXRlIGlvY3RsLiBCeSBtZWFucyBvZiB0aGlzIGV4 dGVuZGVkIGlvY3RsLCBtZW1vcnkKPiBwbGFjZW1lbnQgb2YgdGhlIEdFTSBvYmplY3QgY2FuIGJl IHNwZWNpZmllZCwgaS5lLiBlaXRoZXIKPiBzaG1lbSBvciBzdG9sZW4gbWVtb3J5Lgo+IFRoZXNl IHRlc3RjYXNlcyBpbmNsdWRlIGZ1bmN0aW9uYWwgdGVzdHMgYW5kIGludGVyZmFjZSB0ZXN0cyBm b3IKPiB0ZXN0aW5nIHRoZSBnZW1fY3JlYXRlIGlvY3RsIGNhbGwgZm9yIHN0b2xlbiBtZW1vcnkg cGxhY2VtZW50Cj4KPiB2MjogVGVzdGluZyBwcmVhZC9wd3JpdGUgZnVuY3Rpb25hbGl0eSBmb3Ig c3RvbGVuIGJhY2tlZCBvYmplY3RzLAo+IGFkZGVkIGxvY2FsIHN0cnVjdCBmb3IgZXh0ZW5kZWQg Z2VtX2NyZWF0ZSBhbmQgZ2VtX2dldF9hcGVydHVyZSwKPiB1bnRpbCBoZWFkZXJzIGNhdGNoIHVw IChDaHJpcykKPgo+IHYzOiBSZW1vdmVkIGdldF9hcGVydHVyZSByZWxhdGVkIGZ1bmN0aW9ucywg ZXh0ZW5kZWQgZ2VtX3ByZWFkCj4gdG8gY29tcGFyZSBzcGVlZHMgZm9yIHVzZXIgcGFnZXMgd2l0 aCBhbmQgd2l0aG91dCBwYWdlIGZhdWx0cywKPiB1bmV4cG9zZWQgbG9jYWxfZ2VtX2NyZWF0ZSBz dHJ1Y3QsIGNoYW5nZWQgZ2VtX2NyZWF0ZV9zdG9sZW4KPiB1c2FnZSAoQ2hyaXMpCj4KPiB2NDog U3BsaXR0aW5nIHBhdGNoIHRvIHJlbW92ZSBjaGFuZ2VzIGZyb20gZ2VtX3ByZWFkL2dlbV9wd3Jp dGUKPiB0byBhbm90aGVyIHBhdGNoIChBbmtpdCkKPgo+IHY1OiBGaXhlZCBSZWJhc2UgY29uZmxp Y3RzIChBbmtpdCkKPiAgICAgIEFkZGVkIElHVF9URVNUX0RFU0NSSVBUSU9OIChUaG9tYXMgV29v ZCkKPgo+IHY2OiBBZGRlZCBfX2dlbV9jcmVhdGVfc3RvbGVuIGZvciB1c2VyIHRvIGhhbmRsZSBl cnJvciwgdXBkYXRlZAo+IGdlbV9jcmVhdGVfc3RvbGVuIHRvIGFsaWduIHdpdGggZ2VtX2NyZWF0 ZSBmdW5jdGlvbiwgY29ycmVjdGVkCj4gZmlsbF9wdXJnZSB0ZXN0IChvdXQgb2YgYm91bmQgYWNj ZXNzKSwgYWRkZWQgdGVzdGNhc2UgdG8gdmFsaWRhdGUKPiBhbGxvY2F0aW5nIG9mIG1vcmUgdGhh biAzMiBiaXQgc2l6ZWQgYnVmZmVycyAoVHZydGtvKQo+Cj4gdjc6IFJlbW92ZWQgdW51c2VkIHZh cmlhYmxlcywgQ29ycmVjdGVkIGNvbW1lbnRzICYgZm9ybWF0dGluZyAoVHZydGtvKQo+Cj4gU2ln bmVkLW9mZi1ieTogQW5raXRwcmFzYWQgU2hhcm1hIDxhbmtpdHByYXNhZC5yLnNoYXJtYSBhdCBp bnRlbC5jb20+Cj4gLS0tCj4gICBsaWIvaW9jdGxfd3JhcHBlcnMuYyAgIHwgIDcyICsrKysrKysr KysKPiAgIGxpYi9pb2N0bF93cmFwcGVycy5oICAgfCAgMTMgKysKPiAgIHRlc3RzL01ha2VmaWxl LnNvdXJjZXMgfCAgIDEgKwo+ICAgdGVzdHMvZ2VtX3N0b2xlbi5jICAgICB8IDM2MCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICA0IGZpbGVzIGNo YW5nZWQsIDQ0NiBpbnNlcnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2Vt X3N0b2xlbi5jCj4KPiBkaWZmIC0tZ2l0IGEvbGliL2lvY3RsX3dyYXBwZXJzLmMgYi9saWIvaW9j dGxfd3JhcHBlcnMuYwo+IGluZGV4IGEyNjlkMGYuLjA0ODkyNzIgMTAwNjQ0Cj4gLS0tIGEvbGli L2lvY3RsX3dyYXBwZXJzLmMKPiArKysgYi9saWIvaW9jdGxfd3JhcHBlcnMuYwo+IEBAIC0zODks NiArMzg5LDc4IEBAIHZvaWQgZ2VtX3N5bmMoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUpCj4gICAJ CSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKPiAgIH0K Pgo+ICtib29sIGdlbV9jcmVhdGVfX2hhc19zdG9sZW5fc3VwcG9ydChpbnQgZmQpCj4gK3sKPiAr CXN0YXRpYyBpbnQgaGFzX3N0b2xlbl9zdXBwb3J0ID0gLTE7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf Z2V0cGFyYW0gZ3A7Cj4gKwlpbnQgdmFsID0gLTE7Cj4gKwo+ICsJaWYgKGhhc19zdG9sZW5fc3Vw cG9ydCA8IDApIHsKPiArCQltZW1zZXQoJmdwLCAwLCBzaXplb2YoZ3ApKTsKPiArCQlncC5wYXJh bSA9IDM2OyAvKiBDUkVBVEVfVkVSU0lPTiAqLwo+ICsJCWdwLnZhbHVlID0gJnZhbDsKPiArCj4g KwkJLyogRG8gd2UgaGF2ZSB0aGUgZXh0ZW5kZWQgZ2VtX2NyZWF0ZV9pb2N0bD8gKi8KPiArCQlp b2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCk7Cj4gKwkJaGFzX3N0b2xlbl9z dXBwb3J0ID0gdmFsID49IDI7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGhhc19zdG9sZW5fc3VwcG9y dDsKPiArfQo+ICsKPiArc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NyZWF0ZV92MiB7Cj4gKwl1aW50 NjRfdCBzaXplOwo+ICsJdWludDMyX3QgaGFuZGxlOwo+ICsJdWludDMyX3QgcGFkOwo+ICsjZGVm aW5lIEk5MTVfQ1JFQVRFX1BMQUNFTUVOVF9TVE9MRU4gKDE8PDApCj4gKwl1aW50MzJfdCBmbGFn czsKPiArfTsKPiArCj4gKyNkZWZpbmUgTE9DQUxfSU9DVExfSTkxNV9HRU1fQ1JFQVRFICAgICAg IERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fQ1JFQVRFLCBzdHJ1Y3Qg bG9jYWxfaTkxNV9nZW1fY3JlYXRlX3YyKQo+ICt1aW50MzJfdCBfX2dlbV9jcmVhdGVfc3RvbGVu KGludCBmZCwgdWludDY0X3Qgc2l6ZSkKPiArewo+ICsJc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2Ny ZWF0ZV92MiBjcmVhdGU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCW1lbXNldCgmY3JlYXRlLCAwLCBz aXplb2YoY3JlYXRlKSk7Cj4gKwljcmVhdGUuaGFuZGxlID0gMDsKPiArCWNyZWF0ZS5zaXplID0g c2l6ZTsKPiArCWNyZWF0ZS5mbGFncyA9IEk5MTVfQ1JFQVRFX1BMQUNFTUVOVF9TVE9MRU47Cj4g KwlyZXQgPSBkcm1Jb2N0bChmZCwgTE9DQUxfSU9DVExfSTkxNV9HRU1fQ1JFQVRFLCAmY3JlYXRl KTsKPiArCj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwllcnJubyA9IDA7 Cj4gKwlyZXR1cm4gY3JlYXRlLmhhbmRsZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGdlbV9jcmVh dGVfc3RvbGVuOgo+ICsgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAq IEBzaXplOiBkZXNpcmVkIHNpemUgb2YgdGhlIGJ1ZmZlcgo+ICsgKgo+ICsgKiBUaGlzIHdyYXBz IHRoZSBuZXcgR0VNX0NSRUFURSBpb2N0bCwgd2hpY2ggYWxsb2NhdGVzIGEgbmV3IGdlbSBidWZm ZXIKPiArICogb2JqZWN0IG9mIEBzaXplIGFuZCBwbGFjZW1lbnQgaW4gc3RvbGVuIG1lbW9yeSBy ZWdpb24uCj4gKyAqCj4gKyAqIFJldHVybnM6IFRoZSBmaWxlLXByaXZhdGUgaGFuZGxlIG9mIHRo ZSBjcmVhdGVkIGJ1ZmZlciBvYmplY3QKPiArICovCj4gKwo+ICt1aW50MzJfdCBnZW1fY3JlYXRl X3N0b2xlbihpbnQgZmQsIHVpbnQ2NF90IHNpemUpCj4gK3sKPiArCXN0cnVjdCBsb2NhbF9pOTE1 X2dlbV9jcmVhdGVfdjIgY3JlYXRlOwo+ICsKPiArCW1lbXNldCgmY3JlYXRlLCAwLCBzaXplb2Yo Y3JlYXRlKSk7Cj4gKwljcmVhdGUuaGFuZGxlID0gMDsKPiArCWNyZWF0ZS5zaXplID0gc2l6ZTsK PiArCWNyZWF0ZS5mbGFncyA9IEk5MTVfQ1JFQVRFX1BMQUNFTUVOVF9TVE9MRU47Cj4gKwlkb19p b2N0bChmZCwgTE9DQUxfSU9DVExfSTkxNV9HRU1fQ1JFQVRFLCAmY3JlYXRlKTsKPiArCWlndF9h c3NlcnQoY3JlYXRlLmhhbmRsZSk7Cj4gKwo+ICsJcmV0dXJuIGNyZWF0ZS5oYW5kbGU7Cj4gK30K PiArCj4gKwo+ICAgdWludDMyX3QgX19nZW1fY3JlYXRlKGludCBmZCwgaW50IHNpemUpCj4gICB7 Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgY3JlYXRlOwo+IGRpZmYgLS1naXQgYS9s aWIvaW9jdGxfd3JhcHBlcnMuaCBiL2xpYi9pb2N0bF93cmFwcGVycy5oCj4gaW5kZXggYmM1ZDRi ZC4uZmYxNTg0YSAxMDA2NDQKPiAtLS0gYS9saWIvaW9jdGxfd3JhcHBlcnMuaAo+ICsrKyBiL2xp Yi9pb2N0bF93cmFwcGVycy5oCj4gQEAgLTU2LDYgKzU2LDkgQEAgdm9pZCBnZW1fcmVhZChpbnQg ZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0LCB2b2lkICpidWYsIHVpbnQ2NF90 IGxlbmcKPiAgIHZvaWQgZ2VtX3NldF9kb21haW4oaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsCj4g ICAJCSAgICB1aW50MzJfdCByZWFkX2RvbWFpbnMsIHVpbnQzMl90IHdyaXRlX2RvbWFpbik7Cj4g ICB2b2lkIGdlbV9zeW5jKGludCBmZCwgdWludDMyX3QgaGFuZGxlKTsKPiArYm9vbCBnZW1fY3Jl YXRlX19oYXNfc3RvbGVuX3N1cHBvcnQoaW50IGZkKTsKPiArdWludDMyX3QgX19nZW1fY3JlYXRl X3N0b2xlbihpbnQgZmQsIHVpbnQ2NF90IHNpemUpOwo+ICt1aW50MzJfdCBnZW1fY3JlYXRlX3N0 b2xlbihpbnQgZmQsIHVpbnQ2NF90IHNpemUpOwo+ICAgdWludDMyX3QgX19nZW1fY3JlYXRlKGlu dCBmZCwgaW50IHNpemUpOwo+ICAgdWludDMyX3QgZ2VtX2NyZWF0ZShpbnQgZmQsIHVpbnQ2NF90 IHNpemUpOwo+ICAgdm9pZCBnZW1fZXhlY2J1ZihpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgKmV4ZWNidWYpOwo+IEBAIC02Nyw2ICs3MCwxNiBAQCBib29sIGdlbV9tbWFw X19oYXNfd2MoaW50IGZkKTsKPiAgIHZvaWQgKmdlbV9tbWFwX193YyhpbnQgZmQsIHVpbnQzMl90 IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KTsK Pgo+ICAgLyoqCj4gKyAqIGdlbV9yZXF1aXJlX3N0b2xlbl9zdXBwb3J0Ogo+ICsgKiBAZmQ6IG9w ZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gKyAqCj4gKyAqIFRlc3QgbWFjcm8gdG8gcXVl cnkgd2hldGhlciBzdXBwb3J0IGZvciBhbGxvY2F0aW5nIG9iamVjdHMgZnJvbSBzdG9sZW4KPiAr ICogbWVtb3J5IGlzIGF2YWlsYWJsZS4gQXV0b21hdGljYWxseSBza2lwcyB0aHJvdWdoIGlndF9y ZXF1aXJlKCkgaWYgbm90Lgo+ICsgKi8KPiArI2RlZmluZSBnZW1fcmVxdWlyZV9zdG9sZW5fc3Vw cG9ydChmZCkgXAo+ICsJCQlpZ3RfcmVxdWlyZShnZW1fY3JlYXRlX19oYXNfc3RvbGVuX3N1cHBv cnQoZmQpKQo+ICsKPiArLyoqCj4gICAgKiBnZW1fcmVxdWlyZV9tbWFwX3djOgo+ICAgICogQGZk OiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgo+ICAgICoKPiBkaWZmIC0tZ2l0IGEvdGVz dHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCBiOTQ3 OWNjLi4zMjRjYmI1IDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiArKysg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTU1LDYgKzU1LDcgQEAgVEVTVFNfcHJvZ3Nf TSA9IFwKPiAgIAlnZW1fcmVzZXRfc3RhdHMgXAo+ICAgCWdlbV9yaW5nZmlsbCBcCj4gICAJZ2Vt X3NldF90aWxpbmdfdnNfYmx0IFwKPiArCWdlbV9zdG9sZW4gXAo+ICAgCWdlbV9zdG9yZWR3X2Jh dGNoZXNfbG9vcCBcCj4gICAJZ2VtX3N0cmVhbWluZ193cml0ZXMgXAo+ICAgCWdlbV90aWxlZF9i bGl0cyBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2dlbV9zdG9sZW4uYyBiL3Rlc3RzL2dlbV9zdG9s ZW4uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMzM3NDcxNgo+IC0t LSAvZGV2L251bGwKPiArKysgYi90ZXN0cy9nZW1fc3RvbGVuLmMKPiBAQCAtMCwwICsxLDM2MCBA QAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiAr ICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgICBBbmtpdHBy YXNhZCBTaGFybWEgPGFua2l0cHJhc2FkLnIuc2hhcm1hIGF0IGludGVsLmNvbT4KPiArICoKPiAr ICovCj4gKwo+ICsvKiogQGZpbGUgZ2VtX2NyZWF0ZV9zdG9sZW4uYwo+ICsgKgo+ICsgKiBUaGlz IGlzIGEgdGVzdCBmb3IgdGhlIGV4dGVuZGVkIGdlbV9jcmVhdGUgaW9jdGwsIHRoYXQgaW5jbHVk ZXMgYWxsb2NhdGlvbgo+ICsgKiBvZiBvYmplY3QgZnJvbSBzdG9sZW4gbWVtb3J5Lgo+ICsgKgo+ ICsgKiBUaGUgZ29hbCBpcyB0byBzaW1wbHkgZW5zdXJlIHRoZSBiYXNpY3Mgd29yaywgYW5kIGlu dmFsaWQgaW5wdXQgY29tYmluYXRpb25zCj4gKyAqIGFyZSByZWplY3RlZC4KPiArICovCj4gKwo+ ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPiArI2luY2x1 ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgPGZjbnRsLmg+ Cj4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiArI2luY2x1 ZGUgPHN5cy9zdGF0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvdGltZS5oPgo+ICsjaW5jbHVkZSA8Z2V0 b3B0Lmg+Cj4gKwo+ICsjaW5jbHVkZSA8ZHJtLmg+Cj4gKwo+ICsjaW5jbHVkZSAiaW9jdGxfd3Jh cHBlcnMuaCIKPiArI2luY2x1ZGUgImludGVsX2J1Zm1nci5oIgo+ICsjaW5jbHVkZSAiaW50ZWxf YmF0Y2hidWZmZXIuaCIKPiArI2luY2x1ZGUgImludGVsX2lvLmgiCj4gKyNpbmNsdWRlICJpbnRl bF9jaGlwc2V0LmgiCj4gKyNpbmNsdWRlICJpZ3RfYXV4LmgiCj4gKyNpbmNsdWRlICJkcm10ZXN0 LmgiCj4gKyNpbmNsdWRlICJkcm0uaCIKPiArI2luY2x1ZGUgImk5MTVfZHJtLmgiCj4gKwo+ICtJ R1RfVEVTVF9ERVNDUklQVElPTigiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoZSBleGV0ZW5kZWQgZ2Vt X2NyZWF0ZSBpb2N0bCwiCj4gKwkJICAgICAiIHRoYXQgaW5jbHVkZXMgYWxsb2NhdGlvbiBvZiBv YmogZnJvbSBzdG9sZW4gcmVnaW9uIik7Cj4gKyNkZWZpbmUgQ0xFQVIocykgbWVtc2V0KCZzLCAw LCBzaXplb2YocykpCj4gKyNkZWZpbmUgU0laRSAxMDI0KjEwMjQKPiArI2RlZmluZSBEV09SRF9T SVpFIDQKPiArI2RlZmluZSBEQVRBIDB4ZGVhZAo+ICsjZGVmaW5lIExBUkdFX1NJWkUgMHhmZmZm ZmZmZgo+ICsjZGVmaW5lIE1BWF9PQkpFQ1RTIDEwMAo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1f aW50ZWxfYnVmbWdyICpidWZtZ3I7Cj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoOwo+ICsKPiArc3RhdGljIHZvaWQgdmVyaWZ5X2NvcHlfb3AoZHJtX2ludGVsX2JvICpz cmMsIGRybV9pbnRlbF9ibyAqZGVzdCkKPiArewo+ICsJdWludDMyX3QgKnZpcnQsIGksIHJldDsK PiArCS8qIEZpbGwgdGhlIHNyYyBCTyB3aXRoIGR3b3JkcyAqLwo+ICsJcmV0ID0gZHJtX2ludGVs X2dlbV9ib19tYXBfZ3R0KHNyYyk7Cj4gKwlpZ3RfYXNzZXJ0KCFyZXQpOwo+ICsKPiArCXZpcnQg PSBzcmMtPnZpcnR1YWw7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgU0laRS9EV09SRF9TSVpFOyBpKysp Cj4gKwkJdmlydFtpXSA9IGk7Cj4gKwo+ICsJaW50ZWxfY29weV9ibyhiYXRjaCwgZGVzdCwgc3Jj LCBTSVpFKTsKPiArCj4gKwlyZXQgPSBkcm1faW50ZWxfZ2VtX2JvX21hcF9ndHQoZGVzdCk7Cj4g KwlpZ3RfYXNzZXJ0KCFyZXQpOwo+ICsKPiArCXZpcnQgPSBkZXN0LT52aXJ0dWFsOwo+ICsJLyog dmVyaWZ5ICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgU0laRS9EV09SRF9TSVpFOyBpKyspCj4gKwkJ aWd0X2Fzc2VydF9lcSh2aXJ0W2ldLCBpKTsKPiArCj4gKwlkcm1faW50ZWxfYm9fdW5tYXAoc3Jj KTsKPiArCWRybV9pbnRlbF9ib191bm1hcChkZXN0KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg c3RvbGVuX3B3cml0ZShpbnQgZmQpCj4gK3sKPiArCWRybV9pbnRlbF9ibyAqYm87Cj4gKwl1aW50 MzJfdCBidWZbU0laRS9EV09SRF9TSVpFXTsKPiArCXVpbnQzMl90IGhhbmRsZSA9IDA7Cj4gKwl1 aW50MzJfdCAqdmlydDsKPiArCWludCBpLCByZXQgPSAwOwo+ICsKPiArCWZvciAoaSA9IDA7IGkg PCBTSVpFL0RXT1JEX1NJWkU7IGkrKykKPiArCQlidWZbaV0gPSBEQVRBOwo+ICsKPiArCWdlbV9y ZXF1aXJlX3N0b2xlbl9zdXBwb3J0KGZkKTsKPiArCj4gKwloYW5kbGUgPSBnZW1fY3JlYXRlX3N0 b2xlbihmZCwgU0laRSk7Cj4gKwo+ICsJZ2VtX3dyaXRlKGZkLCBoYW5kbGUsIDAsIGJ1ZiwgU0la RSk7Cj4gKwlibyA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGJ1Zm1nciwgZmQsICJibyIsIGhh bmRsZSk7Cj4gKwo+ICsJcmV0ID0gZHJtX2ludGVsX2dlbV9ib19tYXBfZ3R0KGJvKTsKPiArCWln dF9hc3NlcnQoIXJldCk7Cj4gKwo+ICsJdmlydCA9IGJvLT52aXJ0dWFsOwo+ICsKPiArCWZvciAo aSA9IDA7IGkgPCBTSVpFL0RXT1JEX1NJWkU7IGkrKykKPiArCQlpZ3RfYXNzZXJ0X2VxKHZpcnRb aV0sIERBVEEpOwo+ICsKPiArCWRybV9pbnRlbF9ib191bm1hcChibyk7Cj4gKwlkcm1faW50ZWxf Ym9fdW5yZWZlcmVuY2UoYm8pOwo+ICsJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBzdG9sZW5fcHJlYWQoaW50IGZkKQo+ICt7Cj4gKwlkcm1faW50ZWxfYm8g KmJvOwo+ICsJdWludDMyX3QgYnVmW1NJWkUvRFdPUkRfU0laRV07Cj4gKwl1aW50MzJfdCBoYW5k bGUgPSAwOwo+ICsJdWludDMyX3QgKnZpcnQ7Cj4gKwlpbnQgaSwgcmV0ID0gMDsKPiArCj4gKwlD TEVBUihidWYpOwo+ICsKPiArCWdlbV9yZXF1aXJlX3N0b2xlbl9zdXBwb3J0KGZkKTsKPiArCj4g KwloYW5kbGUgPSBnZW1fY3JlYXRlX3N0b2xlbihmZCwgU0laRSk7Cj4gKwo+ICsJYm8gPSBnZW1f aGFuZGxlX3RvX2xpYmRybV9ibyhidWZtZ3IsIGZkLCAiYm8iLCBoYW5kbGUpOwo+ICsKPiArCXJl dCA9IGRybV9pbnRlbF9nZW1fYm9fbWFwX2d0dChibyk7Cj4gKwlpZ3RfYXNzZXJ0KCFyZXQpOwo+ ICsKPiArCXZpcnQgPSBiby0+dmlydHVhbDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgU0laRS9E V09SRF9TSVpFOyBpKyspCj4gKwkJdmlydFtpXSA9IERBVEE7Cj4gKwo+ICsJZHJtX2ludGVsX2Jv X3VubWFwKGJvKTsKPiArCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShibyk7Cj4gKwo+ICsJZ2Vt X3JlYWQoZmQsIGhhbmRsZSwgMCwgYnVmLCBTSVpFKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg U0laRS9EV09SRF9TSVpFOyBpKyspCj4gKwkJaWd0X2Fzc2VydF9lcShidWZbaV0sIERBVEEpOwo+ ICsKPiArCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29w eV90ZXN0KGludCBmZCkKPiArewo+ICsJZHJtX2ludGVsX2JvICpzcmMsICpkZXN0Owo+ICsJdWlu dDMyX3Qgc3JjX2hhbmRsZSA9IDAsIGRlc3RfaGFuZGxlID0gMDsKPiArCj4gKwlnZW1fcmVxdWly ZV9zdG9sZW5fc3VwcG9ydChmZCk7Cj4gKwo+ICsJc3JjX2hhbmRsZSA9IGdlbV9jcmVhdGVfc3Rv bGVuKGZkLCBTSVpFKTsKPiArCWRlc3RfaGFuZGxlID0gZ2VtX2NyZWF0ZV9zdG9sZW4oZmQsIFNJ WkUpOwo+ICsKPiArCXNyYyA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGJ1Zm1nciwgZmQsICJz cmNfYm8iLCBzcmNfaGFuZGxlKTsKPiArCWRlc3QgPSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhi dWZtZ3IsIGZkLCAiZHN0X2JvIiwgZGVzdF9oYW5kbGUpOwo+ICsKPiArCWlndF9hc3NlcnQoc3Jj ICE9IE5VTEwpOwo+ICsJaWd0X2Fzc2VydChkZXN0ICE9IE5VTEwpOwo+ICsKPiArCXZlcmlmeV9j b3B5X29wKHNyYywgZGVzdCk7Cj4gKwo+ICsJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKHNyYyk7 Cj4gKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoZGVzdCk7Cj4gKwlnZW1fY2xvc2UoZmQsIHNy Y19oYW5kbGUpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBkZXN0X2hhbmRsZSk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHZlcmlmeV9vYmplY3RfY2xlYXIoaW50IGZkKQo+ICt7Cj4gKwlkcm1faW50ZWxf Ym8gKmJvOwo+ICsJdWludDMyX3QgaGFuZGxlID0gMDsKPiArCXVpbnQzMl90ICp2aXJ0Owo+ICsJ aW50IGksIHJldDsKPiArCj4gKwlnZW1fcmVxdWlyZV9zdG9sZW5fc3VwcG9ydChmZCk7Cj4gKwo+ ICsJaGFuZGxlID0gZ2VtX2NyZWF0ZV9zdG9sZW4oZmQsIFNJWkUpOwo+ICsKPiArCWJvID0gZ2Vt X2hhbmRsZV90b19saWJkcm1fYm8oYnVmbWdyLCBmZCwgInZlcmlmeV9ibyIsIGhhbmRsZSk7Cj4g KwlpZ3RfYXNzZXJ0KGJvICE9IE5VTEwpOwo+ICsKPiArCXJldCA9IGRybV9pbnRlbF9nZW1fYm9f bWFwX2d0dChibyk7Cj4gKwlpZ3RfYXNzZXJ0KCFyZXQpOwo+ICsKPiArCS8qIFZlcmlmeSBpZiB0 aGUgQk8gaXMgemVyb2VkICovCj4gKwl2aXJ0ID0gYm8tPnZpcnR1YWw7Cj4gKwlmb3IgKGkgPSAw OyBpIDwgU0laRSAvIERXT1JEX1NJWkU7IGkrKykKPiArCQlpZ3RfYXNzZXJ0KCF2aXJ0W2ldKTsK PiArCj4gKwlkcm1faW50ZWxfYm9fdW5tYXAoYm8pOwo+ICsJZHJtX2ludGVsX2JvX3VucmVmZXJl bmNlKGJvKTsKPiArCWdlbV9jbG9zZShmZCwgaGFuZGxlKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgc3RvbGVuX2xhcmdlX29ial9hbGxvYyhpbnQgZmQpCj4gK3sKPiArCXVpbnQzMl90IGhhbmRs ZSA9IDA7Cj4gKwo+ICsJZ2VtX3JlcXVpcmVfc3RvbGVuX3N1cHBvcnQoZmQpOwo+ICsJaGFuZGxl ID0gX19nZW1fY3JlYXRlX3N0b2xlbihmZCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgTEFSR0VfU0la RSArIDQwOTYpOwo+ICsJaWd0X2Fzc2VydCghaGFuZGxlKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgc3RvbGVuX2ZpbGxfcHVyZ2VfdGVzdChpbnQgZmQpCj4gK3sKPiArCWRybV9pbnRlbF9ibyAq Ym87Cj4gKwlpbnQgb2JqX2NvdW50ID0gMCwgaSA9IDA7Cj4gKwlpbnQgX3JldCA9IDAsIGogPSAw Owo+ICsJdWludDMyX3QgaGFuZGxlW01BWF9PQkpFQ1RTXTsKPiArCXVpbnQzMl90IG5ld19oYW5k bGU7Cj4gKwl1aW50MzJfdCAqdmlydDsKPiArCWludCByZXRhaW5lZDsKPiArCj4gKwlnZW1fcmVx dWlyZV9zdG9sZW5fc3VwcG9ydChmZCk7Cj4gKwo+ICsJLyogRXhoYXVzdCBTdG9sZW4gc3BhY2Ug Ki8KPiArCWRvIHsKPiArCQloYW5kbGVbaV0gPSBfX2dlbV9jcmVhdGVfc3RvbGVuKGZkLCBTSVpF KTsKPiArCQlpZiAoaGFuZGxlW2ldICE9IDApIHsKPiArCQkJYm8gPSBnZW1faGFuZGxlX3RvX2xp YmRybV9ibyhidWZtZ3IsIGZkLAo+ICsJCQkJCQkgICAgICJ2ZXJpZnlfYm8iLCBoYW5kbGVbaV0p Owo+ICsJCQlpZ3RfYXNzZXJ0KGJvICE9IE5VTEwpOwo+ICsKPiArCQkJX3JldCA9IGRybV9pbnRl bF9nZW1fYm9fbWFwX2d0dChibyk7Cj4gKwkJCWlndF9hc3NlcnQoIV9yZXQpOwo+ICsKPiArCQkJ dmlydCA9IGJvLT52aXJ0dWFsOwo+ICsJCQlmb3IgKGogPSAwOyBqIDwgU0laRS9EV09SRF9TSVpF OyBqKyspCj4gKwkJCQl2aXJ0W2pdID0gREFUQTsKPiArCj4gKwkJCWRybV9pbnRlbF9ib191bm1h cChibyk7Cj4gKwkJCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShibyk7Cj4gKwo+ICsJCQlvYmpf Y291bnQrKzsKPiArCQl9Cj4gKwo+ICsJCWkrKzsKPiArCX0gd2hpbGUgKGhhbmRsZVtpLTFdICYm IGkgPCBNQVhfT0JKRUNUUyk7Cj4gKwo+ICsJaWd0X2Fzc2VydChvYmpfY291bnQgPiAwKTsKPiAr Cj4gKwkvKiBNYXJrIGFsbCBzdG9sZW4gb2JqZWN0cyBwdXJnZWFibGUgKi8KPiArCWZvciAoaSA9 IDA7IGkgPCBvYmpfY291bnQ7IGkrKykKPiArCQlyZXRhaW5lZCA9IGdlbV9tYWR2aXNlKGZkLCBo YW5kbGVbaV0sIEk5MTVfTUFEVl9ET05UTkVFRCk7Cj4gKwo+ICsJLyogVHJ5IHRvIGFsbG9jYXRl IG9uZSBtb3JlIG9iamVjdCAqLwo+ICsJbmV3X2hhbmRsZSA9IGdlbV9jcmVhdGVfc3RvbGVuKGZk LCBTSVpFKTsKPiArCj4gKwkvKiBDaGVjayBpZiB0aGUgcmV0YWluZWQgb2JqZWN0J3MgbWVtb3J5 IGNvbnRlbnRzIGFyZSBpbnRhY3QgKi8KPiArCWZvciAoaSA9IDA7IGkgPCBvYmpfY291bnQ7IGkr Kykgewo+ICsJCXJldGFpbmVkID0gZ2VtX21hZHZpc2UoZmQsIGhhbmRsZVtpXSwgSTkxNV9NQURW X1dJTExORUVEKTsKPiArCQlpZiAocmV0YWluZWQpIHsKPiArCQkJYm8gPSBnZW1faGFuZGxlX3Rv X2xpYmRybV9ibyhidWZtZ3IsIGZkLAo+ICsJCQkJCQkgICAgICJ2ZXJpZnlfYm8iLCBoYW5kbGVb aV0pOwo+ICsJCQlpZ3RfYXNzZXJ0KGJvICE9IE5VTEwpOwo+ICsKPiArCQkJX3JldCA9IGRybV9p bnRlbF9nZW1fYm9fbWFwX2d0dChibyk7Cj4gKwkJCWlndF9hc3NlcnQoIV9yZXQpOwo+ICsKPiAr CQkJdmlydCA9IGJvLT52aXJ0dWFsOwo+ICsJCQlmb3IgKGogPSAwOyBqIDwgU0laRS9EV09SRF9T SVpFOyBqKyspCj4gKwkJCQlpZ3RfYXNzZXJ0X2VxKHZpcnRbal0sIERBVEEpOwo+ICsKPiArCQkJ ZHJtX2ludGVsX2JvX3VubWFwKGJvKTsKPiArCQkJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGJv KTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBuZXdfaGFuZGxlKTsKPiArCWZv ciAoaSA9IDA7IGkgPCBvYmpfY291bnQ7IGkrKykKPiArCQlnZW1fY2xvc2UoZmQsIGhhbmRsZVtp XSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3N0b2xlbl9ub19tbWFwKGludCBmZCkKPiAr ewo+ICsJdm9pZCAqYWRkcjsKPiArCXVpbnQzMl90IGhhbmRsZSA9IDA7Cj4gKwo+ICsJZ2VtX3Jl cXVpcmVfc3RvbGVuX3N1cHBvcnQoZmQpOwo+ICsKPiArCWhhbmRsZSA9IGdlbV9jcmVhdGVfc3Rv bGVuKGZkLCBTSVpFKTsKPiArCj4gKwlhZGRyID0gZ2VtX21tYXBfX2NwdShmZCwgaGFuZGxlLCAw LCBTSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPiArCWlndF9hc3NlcnQoYWRkciA9PSBO VUxMKTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7Cj4gK30KPiArCj4gK2lndF9tYWlu Cj4gK3sKPiArCWludCBmZDsKPiArCXVpbnQzMl90IGRldmlkOwo+ICsKPiArCWlndF9za2lwX29u X3NpbXVsYXRpb24oKTsKPiArCj4gKwlpZ3RfZml4dHVyZSB7Cj4gKwkJZmQgPSBkcm1fb3Blbl9h bnkoKTsKPiArCQlkZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZmQpOwo+ICsKPiArCQlidWZt Z3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGZkLCA0MDk2KTsKPiArCQliYXRjaCA9IGlu dGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgZGV2aWQpOwo+ICsJfQo+ICsKPiArCWlndF9z dWJ0ZXN0KCJzdG9sZW4tY2xlYXIiKQo+ICsJCXZlcmlmeV9vYmplY3RfY2xlYXIoZmQpOwo+ICsK PiArCS8qCj4gKwkgKiBzdG9sZW4gbWVtIHNwZWNpYWwgY2FzZXMgLSBjaGVja2luZyBmb3Igbm9u IGNwdSBtYXBwYWJsZQo+ICsJICovCj4gKwlpZ3Rfc3VidGVzdCgic3RvbGVuLW5vLW1tYXAiKQo+ ICsJCXN0b2xlbl9ub19tbWFwKGZkKTsKPiArCj4gKwkvKiBjaGVja2luZyBmb3IgcHJlYWQvcHdy aXRlIGludGVyZmFjZXMgKi8KPiArCWlndF9zdWJ0ZXN0KCJzdG9sZW4tcHdyaXRlIikKPiArCQlz dG9sZW5fcHdyaXRlKGZkKTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgic3RvbGVuLXByZWFkIikKPiAr CQlzdG9sZW5fcHJlYWQoZmQpOwo+ICsKPiArCS8qIEZ1bmN0aW9uYWwgVGVzdCAtIGJsdCBjb3B5 ICovCj4gKwlpZ3Rfc3VidGVzdCgic3RvbGVuLWNvcHkiKQo+ICsJCWNvcHlfdGVzdChmZCk7Cj4g Kwo+ICsJaWd0X3N1YnRlc3QoImxhcmdlLW9iamVjdC1hbGxvYyIpCj4gKwkJc3RvbGVuX2xhcmdl X29ial9hbGxvYyhmZCk7Cj4gKwo+ICsJLyogRmlsbGluZyBzdG9sZW4gY29tcGxldGVseSBhbmQg bWFya2luZyBhbGwgdGhlIG9iamVjdHMKPiArCSAqIHB1cmdlYWJsZS4gVGhlbiB0cnlpbmcgdG8g YWRkIG9uZSBtb3JlIG9iamVjdCwgdG8gdmVyaWZ5Cj4gKwkgKiB0aGUgcHVyZ2luZyBsb2dpYy4K PiArCSAqIEFnYWluIG1hcmtpbmcgYWxsIG9iamVjdHMgV0lMTE5FRUQgYW5kIHZlcmlmeWluZyB0 aGUKPiArCSAqIGNvbnRlbnRzIG9mIHRoZSByZXRhaW5lZCBvYmplY3RzLgo+ICsJICovCj4gKwlp Z3Rfc3VidGVzdCgic3RvbGVuLWZpbGwtcHVyZ2UiKQo+ICsJCXN0b2xlbl9maWxsX3B1cmdlX3Rl c3QoZmQpOwo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVl KGJhdGNoKTsKPiArCQlkcm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koYnVmbWdyKTsKPiArCX0KPiAr fQo+CgpJIGRvbid0IHJlbWVtYmVyIGFsbCB0aGUgZGV0YWlscyBhbnkgbG9uZ2VyLCBzaW5jZSB0 aGUgcHJldmlvdXMgcm91bmQgCndhcyB+MiBtb250aHMgYWdvLiBCdXQgbXkgbGFzdCBjb21tZW50 cyBhcmUgYWRkcmVzc2VkIHNvOgoKUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28u dXJzdWxpbkBpbnRlbC5jb20+CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==