From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id D3AEB89D49 for ; Tue, 26 Feb 2019 09:49:33 +0000 (UTC) Date: Tue, 26 Feb 2019 11:49:27 +0200 From: Petri Latvala Message-ID: <20190226094927.GC4038@platvala-desk.ger.corp.intel.com> References: <20190226002020.21550-1-antonio.argenziano@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190226002020.21550-1-antonio.argenziano@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t 1/2] lib/i915: Move mmap IOCTLs wrappers into separate file 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: Antonio Argenziano Cc: igt-dev@lists.freedesktop.org List-ID: T24gTW9uLCBGZWIgMjUsIDIwMTkgYXQgMDQ6MjA6MTlQTSAtMDgwMCwgQW50b25pbyBBcmdlbnpp YW5vIHdyb3RlOgo+IE1vdmUgYWxsIG1tYXAgZmxhdm91cnMgYW5kIHN1cHBvcnQgZnVuY3Rpb24g dG8gc2VwYXJhdGUgZmlsZSBpbiBpOTE1Cj4gZm9sZGVyLiBUaGlzIGhlbHBzIHdpdGggbW92aW5n IGk5MTUgc3BlY2lmaWMgZnVuY3Rpb25zIGF3YXkgZnJvbSBjb21tb24KPiBsaWJyYXJpZXMuCj4g Cj4gU2lnbmVkLW9mZi1ieTogQW50b25pbyBBcmdlbnppYW5vIDxhbnRvbmlvLmFyZ2Vuemlhbm9A aW50ZWwuY29tPgo+IENjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K PiAtLS0KPiAgbGliL2k5MTUvZ2VtX21tYW4uYyAgfCAyNTQgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ICBsaWIvaTkxNS9nZW1fbW1hbi5oICB8ICA1NSArKysr KysrKysrCj4gIGxpYi9pb2N0bF93cmFwcGVycy5jIHwgMjEzIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQo+ICBsaWIvaW9jdGxfd3JhcHBlcnMuaCB8ICAyMyArLS0tCj4gIGxp Yi9tZXNvbi5idWlsZCAgICAgIHwgICAxICsKCgpXaGVyZSdzIHRoZSBjaGFuZ2UgdG8gbGliL01h a2VmaWxlLnNvdXJjZXM/CgoKLS0gClBldHJpIExhdHZhbGEKCgoKPiAgNSBmaWxlcyBjaGFuZ2Vk LCAzMTEgaW5zZXJ0aW9ucygrKSwgMjM1IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliL2k5MTUvZ2VtX21tYW4uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2k5MTUvZ2Vt X21tYW4uaAo+IAo+IGRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fbW1hbi5jIGIvbGliL2k5MTUv Z2VtX21tYW4uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLjNjZjlh NmJiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi9pOTE1L2dlbV9tbWFuLmMKPiBAQCAtMCww ICsxLDI1NCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAwNywgMjAxMSwgMjAxMywgMjAx NCwgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsg Kgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gKyNpbmNsdWRlIDxzeXMvaW9j dGwuaD4KPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gKwo+ICsjaW5jbHVkZSAiaWd0X2NvcmUuaCIK PiArI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCj4gKwo+ICsjaW5jbHVkZSAiZ2VtX21tYW4u aCIKPiArCj4gKyNpZmRlZiBIQVZFX1ZBTEdSSU5ECj4gKyNpbmNsdWRlIDx2YWxncmluZC92YWxn cmluZC5oPgo+ICsjaW5jbHVkZSA8dmFsZ3JpbmQvbWVtY2hlY2suaD4KPiArCj4gKyNkZWZpbmUg VkcoeCkgeAo+ICsjZWxzZQo+ICsjZGVmaW5lIFZHKHgpIGRvIHt9IHdoaWxlICgwKQo+ICsjZW5k aWYKPiArCj4gKy8qKgo+ICsgKiBfX2dlbV9tbWFwX19ndHQ6Cj4gKyAqIEBmZDogb3BlbiBpOTE1 IGRybSBmaWxlIGRlc2NyaXB0b3IKPiArICogQGhhbmRsZTogZ2VtIGJ1ZmZlciBvYmplY3QgaGFu ZGxlCj4gKyAqIEBzaXplOiBzaXplIG9mIHRoZSBnZW0gYnVmZmVyCj4gKyAqIEBwcm90OiBtZW1v cnkgcHJvdGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1hcCgpCj4gKyAqCj4gKyAqIFRoaXMgZnVu Y3Rpb25zIHdyYXBzIHVwIHByb2NlZHVyZSB0byBlc3RhYmxpc2ggYSBtZW1vcnkgbWFwcGluZyB0 aHJvdWdoIHRoZQo+ICsgKiBHVFQuCj4gKyAqCj4gKyAqIFJldHVybnM6IEEgcG9pbnRlciB0byB0 aGUgY3JlYXRlZCBtZW1vcnkgbWFwcGluZywgTlVMTCBvbiBmYWlsdXJlLgo+ICsgKi8KPiArdm9p ZCAqX19nZW1fbW1hcF9fZ3R0KGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBzaXpl LCB1bnNpZ25lZCBwcm90KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXBfZ3R0IG1t YXBfYXJnOwo+ICsJdm9pZCAqcHRyOwo+ICsKPiArCW1lbXNldCgmbW1hcF9hcmcsIDAsIHNpemVv ZihtbWFwX2FyZykpOwo+ICsJbW1hcF9hcmcuaGFuZGxlID0gaGFuZGxlOwo+ICsJaWYgKGlndF9p b2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVBfR1RULCAmbW1hcF9hcmcpKQo+ICsJCXJl dHVybiBOVUxMOwo+ICsKPiArCXB0ciA9IG1tYXA2NCgwLCBzaXplLCBwcm90LCBNQVBfU0hBUkVE LCBmZCwgbW1hcF9hcmcub2Zmc2V0KTsKPiArCWlmIChwdHIgPT0gTUFQX0ZBSUxFRCkKPiArCQlw dHIgPSBOVUxMOwo+ICsJZWxzZQo+ICsJCWVycm5vID0gMDsKPiArCj4gKwlWRyhWQUxHUklORF9N QUtFX01FTV9ERUZJTkVEKHB0ciwgc2l6ZSkpOwo+ICsKPiArCXJldHVybiBwdHI7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBnZW1fbW1hcF9fZ3R0Ogo+ICsgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmls ZSBkZXNjcmlwdG9yCj4gKyAqIEBoYW5kbGU6IGdlbSBidWZmZXIgb2JqZWN0IGhhbmRsZQo+ICsg KiBAc2l6ZTogc2l6ZSBvZiB0aGUgZ2VtIGJ1ZmZlcgo+ICsgKiBAcHJvdDogbWVtb3J5IHByb3Rl Y3Rpb24gYml0cyBhcyB1c2VkIGJ5IG1tYXAoKQo+ICsgKgo+ICsgKiBMaWtlIF9fZ2VtX21tYXBf X2d0dCgpIGV4Y2VwdCB3ZSBhc3NlcnQgb24gZmFpbHVyZS4KPiArICoKPiArICogUmV0dXJuczog QSBwb2ludGVyIHRvIHRoZSBjcmVhdGVkIG1lbW9yeSBtYXBwaW5nCj4gKyAqLwo+ICt2b2lkICpn ZW1fbW1hcF9fZ3R0KGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBzaXplLCB1bnNp Z25lZCBwcm90KQo+ICt7Cj4gKwl2b2lkICpwdHIgPSBfX2dlbV9tbWFwX19ndHQoZmQsIGhhbmRs ZSwgc2l6ZSwgcHJvdCk7Cj4gKwlpZ3RfYXNzZXJ0KHB0cik7Cj4gKwlyZXR1cm4gcHRyOwo+ICt9 Cj4gKwo+ICtpbnQgZ2VtX211bm1hcCh2b2lkICpwdHIsIHVpbnQ2NF90IHNpemUpCj4gK3sKPiAr CWludCByZXQgPSBtdW5tYXAocHRyLCBzaXplKTsKPiArCj4gKwlpZiAocmV0ID09IDApCj4gKwkJ VkcoVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MocHRyLCBzaXplKSk7Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICsKPiArYm9vbCBnZW1fbW1hcF9faGFzX3djKGludCBmZCkKPiArewo+ICsJ c3RhdGljIGludCBoYXNfd2MgPSAtMTsKPiArCj4gKwlpZiAoaGFzX3djID09IC0xKSB7Cj4gKwkJ c3RydWN0IGRybV9pOTE1X2dldHBhcmFtIGdwOwo+ICsJCWludCBtbWFwX3ZlcnNpb24gPSAtMTsK PiArCQlpbnQgZ3R0X3ZlcnNpb24gPSAtMTsKPiArCj4gKwkJaGFzX3djID0gMDsKPiArCj4gKwkJ bWVtc2V0KCZncCwgMCwgc2l6ZW9mKGdwKSk7Cj4gKwkJZ3AucGFyYW0gPSBJOTE1X1BBUkFNX01N QVBfR1RUX1ZFUlNJT047Cj4gKwkJZ3AudmFsdWUgPSAmZ3R0X3ZlcnNpb247Cj4gKwkJaW9jdGwo ZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3ApOwo+ICsKPiArCQltZW1zZXQoJmdwLCAw LCBzaXplb2YoZ3ApKTsKPiArCQlncC5wYXJhbSA9IEk5MTVfUEFSQU1fTU1BUF9WRVJTSU9OOwo+ ICsJCWdwLnZhbHVlID0gJm1tYXBfdmVyc2lvbjsKPiArCQlpb2N0bChmZCwgRFJNX0lPQ1RMX0k5 MTVfR0VUUEFSQU0sICZncCk7Cj4gKwo+ICsJCS8qIERvIHdlIGhhdmUgdGhlIG5ldyBtbWFwX2lv Y3RsIHdpdGggRE9NQUlOX1dDPyAqLwo+ICsJCWlmIChtbWFwX3ZlcnNpb24gPj0gMSAmJiBndHRf dmVyc2lvbiA+PSAyKSB7Cj4gKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCBhcmc7Cj4gKwo+ ICsJCQkvKiBEb2VzIHRoaXMgZGV2aWNlIHN1cHBvcnQgd2MtbW1hcHMgPyAqLwo+ICsJCQltZW1z ZXQoJmFyZywgMCwgc2l6ZW9mKGFyZykpOwo+ICsJCQlhcmcuaGFuZGxlID0gZ2VtX2NyZWF0ZShm ZCwgNDA5Nik7Cj4gKwkJCWFyZy5vZmZzZXQgPSAwOwo+ICsJCQlhcmcuc2l6ZSA9IDQwOTY7Cj4g KwkJCWFyZy5mbGFncyA9IEk5MTVfTU1BUF9XQzsKPiArCQkJaGFzX3djID0gaWd0X2lvY3RsKGZk LCBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUCwgJmFyZykgPT0gMDsKPiArCQkJZ2VtX2Nsb3NlKGZk LCBhcmcuaGFuZGxlKTsKPiArCQl9Cj4gKwkJZXJybm8gPSAwOwo+ICsJfQo+ICsKPiArCXJldHVy biBoYXNfd2MgPiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogX19nZW1fbW1hcDoKPiArICogQGZk OiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgo+ICsgKiBAaGFuZGxlOiBnZW0gYnVmZmVy IG9iamVjdCBoYW5kbGUKPiArICogQG9mZnNldDogb2Zmc2V0IGluIHRoZSBnZW0gYnVmZmVyIG9m IHRoZSBtbWFwIGFyZW5hCj4gKyAqIEBzaXplOiBzaXplIG9mIHRoZSBtbWFwIGFyZW5hCj4gKyAq IEBwcm90OiBtZW1vcnkgcHJvdGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1hcCgpCj4gKyAqIEBm bGFnczogZmxhZ3MgdXNlZCB0byBkZXRlcm1pbmUgY2FjaGluZwo+ICsgKgo+ICsgKiBUaGlzIGZ1 bmN0aW9ucyB3cmFwcyB1cCBwcm9jZWR1cmUgdG8gZXN0YWJsaXNoIGEgbWVtb3J5IG1hcHBpbmcg dGhyb3VnaAo+ICsgKiBkaXJlY3QgY3B1IGFjY2VzcywgYnlwYXNzaW5nIHRoZSBncHUgKHZhbGlk IGZvciB3YyA9PSBmYWxzZSkuIEZvciB3YyA9PSB0cnVlCj4gKyAqIGl0IGFsc28gYnlwYXNzIGNw dSBjYWNoZXMgY29tcGxldGVseSBhbmQgR1RUIHN5c3RlbSBhZ2VudCAoaS5lLiB0aGVyZSBpcyBu bwo+ICsgKiBhdXRvbWF0aWMgdGlsaW5nIG9mIHRoZSBtbWFwcGluZyB0aHJvdWdoIHRoZSBmZW5j ZSByZWdpc3RlcnMpLgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBBIHBvaW50ZXIgdG8gdGhlIGNyZWF0 ZWQgbWVtb3J5IG1hcHBpbmcsIE5VTEwgb24gZmFpbHVyZS4KPiArICovCj4gK3N0YXRpYyB2b2lk Cj4gKypfX2dlbV9tbWFwKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBvZmZzZXQs IHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIGludCBwcm90LCB1aW50NjRfdCBmbGFncykKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIGFyZzsKPiArCj4gKwltZW1zZXQoJmFyZywgMCwg c2l6ZW9mKGFyZykpOwo+ICsJYXJnLmhhbmRsZSA9IGhhbmRsZTsKPiArCWFyZy5vZmZzZXQgPSBv ZmZzZXQ7Cj4gKwlhcmcuc2l6ZSA9IHNpemU7Cj4gKwlhcmcuZmxhZ3MgPSBmbGFnczsKPiArCj4g KwlpZiAoaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUCwgJmFyZykpCj4gKwkJ cmV0dXJuIE5VTEw7Cj4gKwo+ICsJVkcoVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChmcm9tX3Vz ZXJfcG9pbnRlcihhcmcuYWRkcl9wdHIpLCBhcmcuc2l6ZSkpOwo+ICsKPiArCWVycm5vID0gMDsK PiArCXJldHVybiBmcm9tX3VzZXJfcG9pbnRlcihhcmcuYWRkcl9wdHIpOwo+ICt9Cj4gKwo+ICsv KioKPiArICogX19nZW1fbW1hcF9fd2M6Cj4gKyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRl c2NyaXB0b3IKPiArICogQGhhbmRsZTogZ2VtIGJ1ZmZlciBvYmplY3QgaGFuZGxlCj4gKyAqIEBv ZmZzZXQ6IG9mZnNldCBpbiB0aGUgZ2VtIGJ1ZmZlciBvZiB0aGUgbW1hcCBhcmVuYQo+ICsgKiBA c2l6ZTogc2l6ZSBvZiB0aGUgbW1hcCBhcmVuYQo+ICsgKiBAcHJvdDogbWVtb3J5IHByb3RlY3Rp b24gYml0cyBhcyB1c2VkIGJ5IG1tYXAoKQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9ucyB3cmFw cyB1cCBwcm9jZWR1cmUgdG8gZXN0YWJsaXNoIGEgbWVtb3J5IG1hcHBpbmcgdGhyb3VnaAo+ICsg KiBkaXJlY3QgY3B1IGFjY2VzcywgYnlwYXNzaW5nIHRoZSBncHUgYW5kIGNwdSBjYWNoZXMgY29t cGxldGVseSBhbmQgYWxzbwo+ICsgKiBieXBhc3NpbmcgdGhlIEdUVCBzeXN0ZW0gYWdlbnQgKGku ZS4gdGhlcmUgaXMgbm8gYXV0b21hdGljIHRpbGluZyBvZgo+ICsgKiB0aGUgbW1hcHBpbmcgdGhy b3VnaCB0aGUgZmVuY2UgcmVnaXN0ZXJzKS4KPiArICoKPiArICogUmV0dXJuczogQSBwb2ludGVy IHRvIHRoZSBjcmVhdGVkIG1lbW9yeSBtYXBwaW5nLCBOVUxMIG9uIGZhaWx1cmUuCj4gKyAqLwo+ ICt2b2lkICpfX2dlbV9tbWFwX193YyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qg b2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KQo+ICt7Cj4gKwlyZXR1cm4gX19n ZW1fbW1hcChmZCwgaGFuZGxlLCBvZmZzZXQsIHNpemUsIHByb3QsIEk5MTVfTU1BUF9XQyk7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBnZW1fbW1hcF9fd2M6Cj4gKyAqIEBmZDogb3BlbiBpOTE1IGRy bSBmaWxlIGRlc2NyaXB0b3IKPiArICogQGhhbmRsZTogZ2VtIGJ1ZmZlciBvYmplY3QgaGFuZGxl Cj4gKyAqIEBvZmZzZXQ6IG9mZnNldCBpbiB0aGUgZ2VtIGJ1ZmZlciBvZiB0aGUgbW1hcCBhcmVu YQo+ICsgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgbW1hcCBhcmVuYQo+ICsgKiBAcHJvdDogbWVtb3J5 IHByb3RlY3Rpb24gYml0cyBhcyB1c2VkIGJ5IG1tYXAoKQo+ICsgKgo+ICsgKiBMaWtlIF9fZ2Vt X21tYXBfX3djKCkgZXhjZXB0IHdlIGFzc2VydCBvbiBmYWlsdXJlLgo+ICsgKgo+ICsgKiBSZXR1 cm5zOiBBIHBvaW50ZXIgdG8gdGhlIGNyZWF0ZWQgbWVtb3J5IG1hcHBpbmcKPiArICovCj4gK3Zv aWQgKmdlbV9tbWFwX193YyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0 LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KQo+ICt7Cj4gKwl2b2lkICpwdHIgPSBfX2dl bV9tbWFwX193YyhmZCwgaGFuZGxlLCBvZmZzZXQsIHNpemUsIHByb3QpOwo+ICsJaWd0X2Fzc2Vy dChwdHIpOwo+ICsJcmV0dXJuIHB0cjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIF9fZ2VtX21tYXBf X2NwdToKPiArICogQGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgo+ICsgKiBAaGFu ZGxlOiBnZW0gYnVmZmVyIG9iamVjdCBoYW5kbGUKPiArICogQG9mZnNldDogb2Zmc2V0IGluIHRo ZSBnZW0gYnVmZmVyIG9mIHRoZSBtbWFwIGFyZW5hCj4gKyAqIEBzaXplOiBzaXplIG9mIHRoZSBt bWFwIGFyZW5hCj4gKyAqIEBwcm90OiBtZW1vcnkgcHJvdGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkg bW1hcCgpCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb25zIHdyYXBzIHVwIHByb2NlZHVyZSB0byBl c3RhYmxpc2ggYSBtZW1vcnkgbWFwcGluZyB0aHJvdWdoCj4gKyAqIGRpcmVjdCBjcHUgYWNjZXNz LCBieXBhc3NpbmcgdGhlIGdwdSBjb21wbGV0ZWx5Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBBIHBv aW50ZXIgdG8gdGhlIGNyZWF0ZWQgbWVtb3J5IG1hcHBpbmcsIE5VTEwgb24gZmFpbHVyZS4KPiAr ICovCj4gK3ZvaWQgKl9fZ2VtX21tYXBfX2NwdShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWlu dDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KQo+ICt7Cj4gKwlyZXR1 cm4gX19nZW1fbW1hcChmZCwgaGFuZGxlLCBvZmZzZXQsIHNpemUsIHByb3QsIDApOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogZ2VtX21tYXBfX2NwdToKPiArICogQGZkOiBvcGVuIGk5MTUgZHJtIGZp bGUgZGVzY3JpcHRvcgo+ICsgKiBAaGFuZGxlOiBnZW0gYnVmZmVyIG9iamVjdCBoYW5kbGUKPiAr ICogQG9mZnNldDogb2Zmc2V0IGluIHRoZSBnZW0gYnVmZmVyIG9mIHRoZSBtbWFwIGFyZW5hCj4g KyAqIEBzaXplOiBzaXplIG9mIHRoZSBtbWFwIGFyZW5hCj4gKyAqIEBwcm90OiBtZW1vcnkgcHJv dGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1hcCgpCj4gKyAqCj4gKyAqIExpa2UgX19nZW1fbW1h cF9fY3B1KCkgZXhjZXB0IHdlIGFzc2VydCBvbiBmYWlsdXJlLgo+ICsgKgo+ICsgKiBSZXR1cm5z OiBBIHBvaW50ZXIgdG8gdGhlIGNyZWF0ZWQgbWVtb3J5IG1hcHBpbmcKPiArICovCj4gK3ZvaWQg KmdlbV9tbWFwX19jcHUoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IG9mZnNldCwg dWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCkKPiArewo+ICsJdm9pZCAqcHRyID0gX19nZW1f bW1hcF9fY3B1KGZkLCBoYW5kbGUsIG9mZnNldCwgc2l6ZSwgcHJvdCk7Cj4gKwlpZ3RfYXNzZXJ0 KHB0cik7Cj4gKwlyZXR1cm4gcHRyOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYi9pOTE1L2dlbV9t bWFuLmggYi9saWIvaTkxNS9nZW1fbW1hbi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMC4uZjcyNDJlZDcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL2k5MTUvZ2Vt X21tYW4uaAo+IEBAIC0wLDAgKzEsNTUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMDcs IDIwMTEsIDIwMTMsIDIwMTQsIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRI RSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIEdFTV9NTUFOX0gKPiArI2Rl ZmluZSBHRU1fTU1BTl9ICj4gKwo+ICt2b2lkICpnZW1fbW1hcF9fZ3R0KGludCBmZCwgdWludDMy X3QgaGFuZGxlLCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KTsKPiArdm9pZCAqZ2VtX21t YXBfX2NwdShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRf dCBzaXplLCB1bnNpZ25lZCBwcm90KTsKPiArCj4gK2Jvb2wgZ2VtX21tYXBfX2hhc193YyhpbnQg ZmQpOwo+ICt2b2lkICpnZW1fbW1hcF9fd2MoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2 NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCk7Cj4gKwo+ICsjaWZuZGVm IEk5MTVfR0VNX0RPTUFJTl9XQwo+ICsjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9XQyAweDgwCj4g KyNlbmRpZgo+ICsKPiArdm9pZCAqX19nZW1fbW1hcF9fZ3R0KGludCBmZCwgdWludDMyX3QgaGFu ZGxlLCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KTsKPiArdm9pZCAqX19nZW1fbW1hcF9f Y3B1KGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNp emUsIHVuc2lnbmVkIHByb3QpOwo+ICt2b2lkICpfX2dlbV9tbWFwX193YyhpbnQgZmQsIHVpbnQz Ml90IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90 KTsKPiArCj4gK2ludCBnZW1fbXVubWFwKHZvaWQgKnB0ciwgdWludDY0X3Qgc2l6ZSk7Cj4gKwo+ ICsvKioKPiArICogZ2VtX3JlcXVpcmVfbW1hcF93YzoKPiArICogQGZkOiBvcGVuIGk5MTUgZHJt IGZpbGUgZGVzY3JpcHRvcgo+ICsgKgo+ICsgKiBGZWF0dXJlIHRlc3QgbWFjcm8gdG8gcXVlcnkg d2hldGhlciBkaXJlY3QgKGkuZS4gY3B1IGFjY2VzcyBwYXRoLCBieXBhc3NpbmcKPiArICogdGhl IGd0dCkgd3JpdGUtY29tYmluZSBtZW1vcnkgbWFwcGluZ3MgYXJlIGF2YWlsYWJsZS4gQXV0b21h dGljYWxseSBza2lwcwo+ICsgKiB0aHJvdWdoIGlndF9yZXF1aXJlKCkgaWYgbm90Lgo+ICsgKi8K PiArI2RlZmluZSBnZW1fcmVxdWlyZV9tbWFwX3djKGZkKSBpZ3RfcmVxdWlyZShnZW1fbW1hcF9f aGFzX3djKGZkKSkKPiArCj4gKyNlbmRpZiAvKiBHRU1fTU1BTl9IICovCj4gKwo+IGRpZmYgLS1n aXQgYS9saWIvaW9jdGxfd3JhcHBlcnMuYyBiL2xpYi9pb2N0bF93cmFwcGVycy5jCj4gaW5kZXgg NDA0YzJmYmYuLjM5OTIwZjg3IDEwMDY0NAo+IC0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5jCj4g KysrIGIvbGliL2lvY3RsX3dyYXBwZXJzLmMKPiBAQCAtNjQxLDIxOSArNjQxLDYgQEAgdm9pZCBn ZW1fZXhlY2J1Zl93cihpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4 ZWNidWYpCj4gIAlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWZfd3IoZmQsIGV4ZWNidWYpLCAw KTsKPiAgfQo+ICAKPiAtLyoqCj4gLSAqIF9fZ2VtX21tYXBfX2d0dDoKPiAtICogQGZkOiBvcGVu IGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgo+IC0gKiBAaGFuZGxlOiBnZW0gYnVmZmVyIG9iamVj dCBoYW5kbGUKPiAtICogQHNpemU6IHNpemUgb2YgdGhlIGdlbSBidWZmZXIKPiAtICogQHByb3Q6 IG1lbW9yeSBwcm90ZWN0aW9uIGJpdHMgYXMgdXNlZCBieSBtbWFwKCkKPiAtICoKPiAtICogVGhp cyBmdW5jdGlvbnMgd3JhcHMgdXAgcHJvY2VkdXJlIHRvIGVzdGFibGlzaCBhIG1lbW9yeSBtYXBw aW5nIHRocm91Z2ggdGhlCj4gLSAqIEdUVC4KPiAtICoKPiAtICogUmV0dXJuczogQSBwb2ludGVy IHRvIHRoZSBjcmVhdGVkIG1lbW9yeSBtYXBwaW5nLCBOVUxMIG9uIGZhaWx1cmUuCj4gLSAqLwo+ IC12b2lkICpfX2dlbV9tbWFwX19ndHQoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90 IHNpemUsIHVuc2lnbmVkIHByb3QpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9n dHQgbW1hcF9hcmc7Cj4gLQl2b2lkICpwdHI7Cj4gLQo+IC0JbWVtc2V0KCZtbWFwX2FyZywgMCwg c2l6ZW9mKG1tYXBfYXJnKSk7Cj4gLQltbWFwX2FyZy5oYW5kbGUgPSBoYW5kbGU7Cj4gLQlpZiAo aWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUF9HVFQsICZtbWFwX2FyZykpCj4g LQkJcmV0dXJuIE5VTEw7Cj4gLQo+IC0JcHRyID0gbW1hcDY0KDAsIHNpemUsIHByb3QsIE1BUF9T SEFSRUQsIGZkLCBtbWFwX2FyZy5vZmZzZXQpOwo+IC0JaWYgKHB0ciA9PSBNQVBfRkFJTEVEKQo+ IC0JCXB0ciA9IE5VTEw7Cj4gLQllbHNlCj4gLQkJZXJybm8gPSAwOwo+IC0KPiAtCVZHKFZBTEdS SU5EX01BS0VfTUVNX0RFRklORUQocHRyLCBzaXplKSk7Cj4gLQo+IC0JcmV0dXJuIHB0cjsKPiAt fQo+IC0KPiAtLyoqCj4gLSAqIGdlbV9tbWFwX19ndHQ6Cj4gLSAqIEBmZDogb3BlbiBpOTE1IGRy bSBmaWxlIGRlc2NyaXB0b3IKPiAtICogQGhhbmRsZTogZ2VtIGJ1ZmZlciBvYmplY3QgaGFuZGxl Cj4gLSAqIEBzaXplOiBzaXplIG9mIHRoZSBnZW0gYnVmZmVyCj4gLSAqIEBwcm90OiBtZW1vcnkg cHJvdGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1hcCgpCj4gLSAqCj4gLSAqIExpa2UgX19nZW1f bW1hcF9fZ3R0KCkgZXhjZXB0IHdlIGFzc2VydCBvbiBmYWlsdXJlLgo+IC0gKgo+IC0gKiBSZXR1 cm5zOiBBIHBvaW50ZXIgdG8gdGhlIGNyZWF0ZWQgbWVtb3J5IG1hcHBpbmcKPiAtICovCj4gLXZv aWQgKmdlbV9tbWFwX19ndHQoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHNpemUs IHVuc2lnbmVkIHByb3QpCj4gLXsKPiAtCXZvaWQgKnB0ciA9IF9fZ2VtX21tYXBfX2d0dChmZCwg aGFuZGxlLCBzaXplLCBwcm90KTsKPiAtCWlndF9hc3NlcnQocHRyKTsKPiAtCXJldHVybiBwdHI7 Cj4gLX0KPiAtCj4gLWludCBnZW1fbXVubWFwKHZvaWQgKnB0ciwgdWludDY0X3Qgc2l6ZSkKPiAt ewo+IC0JaW50IHJldCA9IG11bm1hcChwdHIsIHNpemUpOwo+IC0KPiAtCWlmIChyZXQgPT0gMCkK PiAtCQlWRyhWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhwdHIsIHNpemUpKTsKPiAtCj4gLQly ZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1ib29sIGdlbV9tbWFwX19oYXNfd2MoaW50IGZkKQo+IC17 Cj4gLQlzdGF0aWMgaW50IGhhc193YyA9IC0xOwo+IC0KPiAtCWlmIChoYXNfd2MgPT0gLTEpIHsK PiAtCQlzdHJ1Y3QgZHJtX2k5MTVfZ2V0cGFyYW0gZ3A7Cj4gLQkJaW50IG1tYXBfdmVyc2lvbiA9 IC0xOwo+IC0JCWludCBndHRfdmVyc2lvbiA9IC0xOwo+IC0KPiAtCQloYXNfd2MgPSAwOwo+IC0K PiAtCQltZW1zZXQoJmdwLCAwLCBzaXplb2YoZ3ApKTsKPiAtCQlncC5wYXJhbSA9IEk5MTVfUEFS QU1fTU1BUF9HVFRfVkVSU0lPTjsKPiAtCQlncC52YWx1ZSA9ICZndHRfdmVyc2lvbjsKPiAtCQlp b2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCk7Cj4gLQo+IC0JCW1lbXNldCgm Z3AsIDAsIHNpemVvZihncCkpOwo+IC0JCWdwLnBhcmFtID0gSTkxNV9QQVJBTV9NTUFQX1ZFUlNJ T047Cj4gLQkJZ3AudmFsdWUgPSAmbW1hcF92ZXJzaW9uOwo+IC0JCWlvY3RsKGZkLCBEUk1fSU9D VExfSTkxNV9HRVRQQVJBTSwgJmdwKTsKPiAtCj4gLQkJLyogRG8gd2UgaGF2ZSB0aGUgbmV3IG1t YXBfaW9jdGwgd2l0aCBET01BSU5fV0M/ICovCj4gLQkJaWYgKG1tYXBfdmVyc2lvbiA+PSAxICYm IGd0dF92ZXJzaW9uID49IDIpIHsKPiAtCQkJc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIGFyZzsK PiAtCj4gLQkJCS8qIERvZXMgdGhpcyBkZXZpY2Ugc3VwcG9ydCB3Yy1tbWFwcyA/ICovCj4gLQkJ CW1lbXNldCgmYXJnLCAwLCBzaXplb2YoYXJnKSk7Cj4gLQkJCWFyZy5oYW5kbGUgPSBnZW1fY3Jl YXRlKGZkLCA0MDk2KTsKPiAtCQkJYXJnLm9mZnNldCA9IDA7Cj4gLQkJCWFyZy5zaXplID0gNDA5 NjsKPiAtCQkJYXJnLmZsYWdzID0gSTkxNV9NTUFQX1dDOwo+IC0JCQloYXNfd2MgPSBpZ3RfaW9j dGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9NTUFQLCAmYXJnKSA9PSAwOwo+IC0JCQlnZW1fY2xv c2UoZmQsIGFyZy5oYW5kbGUpOwo+IC0JCX0KPiAtCQllcnJubyA9IDA7Cj4gLQl9Cj4gLQo+IC0J cmV0dXJuIGhhc193YyA+IDA7Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBfX2dlbV9tbWFwOgo+IC0g KiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gLSAqIEBoYW5kbGU6IGdlbSBi dWZmZXIgb2JqZWN0IGhhbmRsZQo+IC0gKiBAb2Zmc2V0OiBvZmZzZXQgaW4gdGhlIGdlbSBidWZm ZXIgb2YgdGhlIG1tYXAgYXJlbmEKPiAtICogQHNpemU6IHNpemUgb2YgdGhlIG1tYXAgYXJlbmEK PiAtICogQHByb3Q6IG1lbW9yeSBwcm90ZWN0aW9uIGJpdHMgYXMgdXNlZCBieSBtbWFwKCkKPiAt ICogQGZsYWdzOiBmbGFncyB1c2VkIHRvIGRldGVybWluZSBjYWNoaW5nCj4gLSAqCj4gLSAqIFRo aXMgZnVuY3Rpb25zIHdyYXBzIHVwIHByb2NlZHVyZSB0byBlc3RhYmxpc2ggYSBtZW1vcnkgbWFw cGluZyB0aHJvdWdoCj4gLSAqIGRpcmVjdCBjcHUgYWNjZXNzLCBieXBhc3NpbmcgdGhlIGdwdSAo dmFsaWQgZm9yIHdjID09IGZhbHNlKS4gRm9yIHdjID09IHRydWUKPiAtICogaXQgYWxzbyBieXBh c3MgY3B1IGNhY2hlcyBjb21wbGV0ZWx5IGFuZCBHVFQgc3lzdGVtIGFnZW50IChpLmUuIHRoZXJl IGlzIG5vCj4gLSAqIGF1dG9tYXRpYyB0aWxpbmcgb2YgdGhlIG1tYXBwaW5nIHRocm91Z2ggdGhl IGZlbmNlIHJlZ2lzdGVycykuCj4gLSAqCj4gLSAqIFJldHVybnM6IEEgcG9pbnRlciB0byB0aGUg Y3JlYXRlZCBtZW1vcnkgbWFwcGluZywgTlVMTCBvbiBmYWlsdXJlLgo+IC0gKi8KPiAtc3RhdGlj IHZvaWQKPiAtKl9fZ2VtX21tYXAoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IG9m ZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgaW50IHByb3QsIHVpbnQ2NF90IGZsYWdzKQo+ IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgYXJnOwo+IC0KPiAtCW1lbXNldCgmYXJn LCAwLCBzaXplb2YoYXJnKSk7Cj4gLQlhcmcuaGFuZGxlID0gaGFuZGxlOwo+IC0JYXJnLm9mZnNl dCA9IG9mZnNldDsKPiAtCWFyZy5zaXplID0gc2l6ZTsKPiAtCWFyZy5mbGFncyA9IGZsYWdzOwo+ IC0KPiAtCWlmIChpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9NTUFQLCAmYXJnKSkK PiAtCQlyZXR1cm4gTlVMTDsKPiAtCj4gLQlWRyhWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKGZy b21fdXNlcl9wb2ludGVyKGFyZy5hZGRyX3B0ciksIGFyZy5zaXplKSk7Cj4gLQo+IC0JZXJybm8g PSAwOwo+IC0JcmV0dXJuIGZyb21fdXNlcl9wb2ludGVyKGFyZy5hZGRyX3B0cik7Cj4gLX0KPiAt Cj4gLS8qKgo+IC0gKiBfX2dlbV9tbWFwX193YzoKPiAtICogQGZkOiBvcGVuIGk5MTUgZHJtIGZp bGUgZGVzY3JpcHRvcgo+IC0gKiBAaGFuZGxlOiBnZW0gYnVmZmVyIG9iamVjdCBoYW5kbGUKPiAt ICogQG9mZnNldDogb2Zmc2V0IGluIHRoZSBnZW0gYnVmZmVyIG9mIHRoZSBtbWFwIGFyZW5hCj4g LSAqIEBzaXplOiBzaXplIG9mIHRoZSBtbWFwIGFyZW5hCj4gLSAqIEBwcm90OiBtZW1vcnkgcHJv dGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1hcCgpCj4gLSAqCj4gLSAqIFRoaXMgZnVuY3Rpb25z IHdyYXBzIHVwIHByb2NlZHVyZSB0byBlc3RhYmxpc2ggYSBtZW1vcnkgbWFwcGluZyB0aHJvdWdo Cj4gLSAqIGRpcmVjdCBjcHUgYWNjZXNzLCBieXBhc3NpbmcgdGhlIGdwdSBhbmQgY3B1IGNhY2hl cyBjb21wbGV0ZWx5IGFuZCBhbHNvCj4gLSAqIGJ5cGFzc2luZyB0aGUgR1RUIHN5c3RlbSBhZ2Vu dCAoaS5lLiB0aGVyZSBpcyBubyBhdXRvbWF0aWMgdGlsaW5nIG9mCj4gLSAqIHRoZSBtbWFwcGlu ZyB0aHJvdWdoIHRoZSBmZW5jZSByZWdpc3RlcnMpLgo+IC0gKgo+IC0gKiBSZXR1cm5zOiBBIHBv aW50ZXIgdG8gdGhlIGNyZWF0ZWQgbWVtb3J5IG1hcHBpbmcsIE5VTEwgb24gZmFpbHVyZS4KPiAt ICovCj4gLXZvaWQgKl9fZ2VtX21tYXBfX3djKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50 NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIHByb3QpCj4gLXsKPiAtCXJldHVy biBfX2dlbV9tbWFwKGZkLCBoYW5kbGUsIG9mZnNldCwgc2l6ZSwgcHJvdCwgSTkxNV9NTUFQX1dD KTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGdlbV9tbWFwX193YzoKPiAtICogQGZkOiBvcGVuIGk5 MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgo+IC0gKiBAaGFuZGxlOiBnZW0gYnVmZmVyIG9iamVjdCBo YW5kbGUKPiAtICogQG9mZnNldDogb2Zmc2V0IGluIHRoZSBnZW0gYnVmZmVyIG9mIHRoZSBtbWFw IGFyZW5hCj4gLSAqIEBzaXplOiBzaXplIG9mIHRoZSBtbWFwIGFyZW5hCj4gLSAqIEBwcm90OiBt ZW1vcnkgcHJvdGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1hcCgpCj4gLSAqCj4gLSAqIExpa2Ug X19nZW1fbW1hcF9fd2MoKSBleGNlcHQgd2UgYXNzZXJ0IG9uIGZhaWx1cmUuCj4gLSAqCj4gLSAq IFJldHVybnM6IEEgcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgbWFwcGluZwo+IC0gKi8K PiAtdm9pZCAqZ2VtX21tYXBfX3djKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBv ZmZzZXQsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIHByb3QpCj4gLXsKPiAtCXZvaWQgKnB0ciA9 IF9fZ2VtX21tYXBfX3djKGZkLCBoYW5kbGUsIG9mZnNldCwgc2l6ZSwgcHJvdCk7Cj4gLQlpZ3Rf YXNzZXJ0KHB0cik7Cj4gLQlyZXR1cm4gcHRyOwo+IC19Cj4gLQo+IC0vKioKPiAtICogX19nZW1f bW1hcF9fY3B1Ogo+IC0gKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gLSAq IEBoYW5kbGU6IGdlbSBidWZmZXIgb2JqZWN0IGhhbmRsZQo+IC0gKiBAb2Zmc2V0OiBvZmZzZXQg aW4gdGhlIGdlbSBidWZmZXIgb2YgdGhlIG1tYXAgYXJlbmEKPiAtICogQHNpemU6IHNpemUgb2Yg dGhlIG1tYXAgYXJlbmEKPiAtICogQHByb3Q6IG1lbW9yeSBwcm90ZWN0aW9uIGJpdHMgYXMgdXNl ZCBieSBtbWFwKCkKPiAtICoKPiAtICogVGhpcyBmdW5jdGlvbnMgd3JhcHMgdXAgcHJvY2VkdXJl IHRvIGVzdGFibGlzaCBhIG1lbW9yeSBtYXBwaW5nIHRocm91Z2gKPiAtICogZGlyZWN0IGNwdSBh Y2Nlc3MsIGJ5cGFzc2luZyB0aGUgZ3B1IGNvbXBsZXRlbHkuCj4gLSAqCj4gLSAqIFJldHVybnM6 IEEgcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgbWFwcGluZywgTlVMTCBvbiBmYWlsdXJl Lgo+IC0gKi8KPiAtdm9pZCAqX19nZW1fbW1hcF9fY3B1KGludCBmZCwgdWludDMyX3QgaGFuZGxl LCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIHByb3QpCj4gLXsKPiAt CXJldHVybiBfX2dlbV9tbWFwKGZkLCBoYW5kbGUsIG9mZnNldCwgc2l6ZSwgcHJvdCwgMCk7Cj4g LX0KPiAtCj4gLS8qKgo+IC0gKiBnZW1fbW1hcF9fY3B1Ogo+IC0gKiBAZmQ6IG9wZW4gaTkxNSBk cm0gZmlsZSBkZXNjcmlwdG9yCj4gLSAqIEBoYW5kbGU6IGdlbSBidWZmZXIgb2JqZWN0IGhhbmRs ZQo+IC0gKiBAb2Zmc2V0OiBvZmZzZXQgaW4gdGhlIGdlbSBidWZmZXIgb2YgdGhlIG1tYXAgYXJl bmEKPiAtICogQHNpemU6IHNpemUgb2YgdGhlIG1tYXAgYXJlbmEKPiAtICogQHByb3Q6IG1lbW9y eSBwcm90ZWN0aW9uIGJpdHMgYXMgdXNlZCBieSBtbWFwKCkKPiAtICoKPiAtICogTGlrZSBfX2dl bV9tbWFwX19jcHUoKSBleGNlcHQgd2UgYXNzZXJ0IG9uIGZhaWx1cmUuCj4gLSAqCj4gLSAqIFJl dHVybnM6IEEgcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgbWFwcGluZwo+IC0gKi8KPiAt dm9pZCAqZ2VtX21tYXBfX2NwdShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qgb2Zm c2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KQo+IC17Cj4gLQl2b2lkICpwdHIgPSBf X2dlbV9tbWFwX19jcHUoZmQsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCBwcm90KTsKPiAtCWlndF9h c3NlcnQocHRyKTsKPiAtCXJldHVybiBwdHI7Cj4gLX0KPiAtCj4gIC8qKgo+ICAgKiBnZW1fbWFk dmlzZToKPiAgICogQGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgo+IGRpZmYgLS1n aXQgYS9saWIvaW9jdGxfd3JhcHBlcnMuaCBiL2xpYi9pb2N0bF93cmFwcGVycy5oCj4gaW5kZXgg YjIyYjM2YjAuLjU0NzAzMjM1IDEwMDY0NAo+IC0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5oCj4g KysrIGIvbGliL2lvY3RsX3dyYXBwZXJzLmgKPiBAQCAtMzgsNiArMzgsNyBAQAo+ICAKPiAgI2lu Y2x1ZGUgImk5MTUvZ2VtX2NvbnRleHQuaCIKPiAgI2luY2x1ZGUgImk5MTUvZ2VtX3NjaGVkdWxl ci5oIgo+ICsjaW5jbHVkZSAiaTkxNS9nZW1fbW1hbi5oIgo+ICAKPiAgLyoqCj4gICAqIGlndF9p b2N0bDoKPiBAQCAtODQsMjIgKzg1LDEwIEBAIGludCBfX2dlbV9leGVjYnVmX3dyKGludCBmZCwg c3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlY2J1Zik7Cj4gIHZvaWQgZ2VtX2V4 ZWNidWYoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjYnVmKTsK PiAgaW50IF9fZ2VtX2V4ZWNidWYoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyICpleGVjYnVmKTsKPiAgCj4gLXZvaWQgKmdlbV9tbWFwX19ndHQoaW50IGZkLCB1aW50MzJf dCBoYW5kbGUsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIHByb3QpOwo+IC12b2lkICpnZW1fbW1h cF9fY3B1KGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90 IHNpemUsIHVuc2lnbmVkIHByb3QpOwo+IC0KPiAtYm9vbCBnZW1fbW1hcF9faGFzX3djKGludCBm ZCk7Cj4gLXZvaWQgKmdlbV9tbWFwX193YyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0 X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KTsKPiAtCj4gICNpZm5kZWYg STkxNV9HRU1fRE9NQUlOX1dDCj4gICNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX1dDIDB4ODAKPiAg I2VuZGlmCj4gIAo+IC12b2lkICpfX2dlbV9tbWFwX19ndHQoaW50IGZkLCB1aW50MzJfdCBoYW5k bGUsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIHByb3QpOwo+IC12b2lkICpfX2dlbV9tbWFwX19j cHUoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6 ZSwgdW5zaWduZWQgcHJvdCk7Cj4gLXZvaWQgKl9fZ2VtX21tYXBfX3djKGludCBmZCwgdWludDMy X3QgaGFuZGxlLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIHByb3Qp Owo+IC0KPiAtaW50IGdlbV9tdW5tYXAodm9pZCAqcHRyLCB1aW50NjRfdCBzaXplKTsKPiAtCj4g IC8qKgo+ICAgKiBnZW1fcmVxdWlyZV9zdG9sZW5fc3VwcG9ydDoKPiAgICogQGZkOiBvcGVuIGk5 MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgo+IEBAIC0xMTEsMTYgKzEwMCw2IEBAIGludCBnZW1fbXVu bWFwKHZvaWQgKnB0ciwgdWludDY0X3Qgc2l6ZSk7Cj4gIAkJCWlndF9yZXF1aXJlKGdlbV9jcmVh dGVfX2hhc19zdG9sZW5fc3VwcG9ydChmZCkgJiYgXAo+ICAJCQkJICAgIChnZW1fdG90YWxfc3Rv bGVuX3NpemUoZmQpID4gMCkpCj4gIAo+IC0vKioKPiAtICogZ2VtX3JlcXVpcmVfbW1hcF93YzoK PiAtICogQGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgo+IC0gKgo+IC0gKiBGZWF0 dXJlIHRlc3QgbWFjcm8gdG8gcXVlcnkgd2hldGhlciBkaXJlY3QgKGkuZS4gY3B1IGFjY2VzcyBw YXRoLCBieXBhc3NpbmcKPiAtICogdGhlIGd0dCkgd3JpdGUtY29tYmluZSBtZW1vcnkgbWFwcGlu Z3MgYXJlIGF2YWlsYWJsZS4gQXV0b21hdGljYWxseSBza2lwcwo+IC0gKiB0aHJvdWdoIGlndF9y ZXF1aXJlKCkgaWYgbm90Lgo+IC0gKi8KPiAtI2RlZmluZSBnZW1fcmVxdWlyZV9tbWFwX3djKGZk KSBpZ3RfcmVxdWlyZShnZW1fbW1hcF9faGFzX3djKGZkKSkKPiAtCj4gIGludCBnZW1fbWFkdmlz ZShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgaW50IHN0YXRlKTsKPiAgCj4gICNkZWZpbmUgTE9D QUxfSTkxNV9HRU1fVVNFUlBUUiAgICAgICAweDMzCj4gZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5i dWlsZCBiL2xpYi9tZXNvbi5idWlsZAo+IGluZGV4IGRkMzZmODE4Li4wZWI1NTg1ZCAxMDA2NDQK PiAtLS0gYS9saWIvbWVzb24uYnVpbGQKPiArKysgYi9saWIvbWVzb24uYnVpbGQKPiBAQCAtNCw2 ICs0LDcgQEAgbGliX3NvdXJjZXMgPSBbCj4gIAknaTkxNS9nZW1fc2NoZWR1bGVyLmMnLAo+ICAJ J2k5MTUvZ2VtX3N1Ym1pc3Npb24uYycsCj4gIAknaTkxNS9nZW1fcmluZy5jJywKPiArCSdpOTE1 L2dlbV9tbWFuLmMnLAo+ICAJJ2lndF9jb2xvcl9lbmNvZGluZy5jJywKPiAgCSdpZ3RfZGVidWdm cy5jJywKPiAgCSdpZ3RfZGV2aWNlLmMnLAo+IC0tIAo+IDIuMjAuMQo+IAo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gaWd0LWRldiBtYWlsaW5nIGxp c3QKPiBpZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2lndC1kZXY=