From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH 24/45] drm/i915: Split GEM object type definition to its own header Date: Fri, 26 Apr 2019 15:12:49 +0300 Message-ID: <87r29prmm6.fsf@intel.com> References: <20190425092004.9995-1-chris@chris-wilson.co.uk> <20190425092004.9995-24-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id AE51E8925B for ; Fri, 26 Apr 2019 12:10:35 +0000 (UTC) In-Reply-To: <20190425092004.9995-24-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: Matthew Auld List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAyNSBBcHIgMjAxOSwgQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28u dWs+IHdyb3RlOgo+IEZvciBjb252ZW5pZW5jZSBpbiBhdm9pZGluZyBpbmxpbmUgc3BhZ2hldHRp LCBrZWVwIHRoZSB0eXBlIGRlZmluaXRpb24KPiBhcyBhIHNlcGFyYXRlIGhlYWRlci4KPgo+IFNp Z25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IFJl dmlld2VkLWJ5OiBNYXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+Cj4gLS0tCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMSArCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMSArCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9NYWtlZmlsZS5oZWFkZXItdGVzdCB8ICAxNiArCj4g IC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oICB8IDI4NSArKysr KysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlw ZXMuaCAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAg ICAgICAgfCAgIDMgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fYmF0Y2hfcG9v bC5oICAgIHwgICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oICAg ICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5o ICAgICAgICB8IDI5NSArLS0tLS0tLS0tLS0tLS0tLS0KPiAgOSBmaWxlcyBjaGFuZ2VkLCAzMTIg aW5zZXJ0aW9ucygrKSwgMjk0IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL01ha2VmaWxlCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vTWFrZWZpbGUuaGVhZGVyLXRlc3QKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaAo+ Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCA1ODY0MzM3MzQ5NWMuLmRlZjc4MWM5ZWE2OSAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAgLTg1LDYgKzg1LDcgQEAgZ3QtJChDT05GSUdf RFJNX0k5MTVfU0VMRlRFU1QpICs9IFwKPiAgaTkxNS15ICs9ICQoZ3QteSkKPiAgCj4gICMgR0VN IChHcmFwaGljcyBFeGVjdXRpb24gTWFuYWdlbWVudCkgY29kZQo+ICtvYmoteSArPSBnZW0vCgpJ IHRoaW5rIHRoaXMgd2FycmFudHMgc2ltaWxhciB0cmVhdG1lbnQgYXMgZ3QvLiBQb3N0ZWQgc3Rh bmRhbG9uZQppbnN0ZWFkIG9mIGhpZGRlbiBpbiBhIHNlcmllcywgZXhwbGljaXQgYWNrcy4KClBy b3ZpZGVkIHRoZSBzcGxpdCBtYWtlcyBzZW5zZSB0byBKb29uYXMsCgpBY2tlZC1ieTogSmFuaSBO aWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KCgo+ICBpOTE1LXkgKz0gXAo+ICAJICBpOTE1 X2FjdGl2ZS5vIFwKPiAgCSAgaTkxNV9jbWRfcGFyc2VyLm8gXAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v TWFrZWZpbGUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDdl N2I4Yjg0MGVhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9NYWtlZmlsZQo+IEBAIC0wLDAgKzEgQEAKPiAraW5jbHVkZSAkKHNyYykvTWFrZWZpbGUuaGVh ZGVyLXRlc3QgIyBFeHRyYSBoZWFkZXIgdGVzdHMKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL01ha2VmaWxlLmhlYWRlci10ZXN0IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL01ha2VmaWxlLmhlYWRlci10ZXN0Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwMDAwMDAuLjYxZTA2Y2JiNGIzMgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vTWFrZWZpbGUuaGVhZGVyLXRlc3QKPiBAQCAtMCwwICsxLDE2IEBA Cj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ICsjIENvcHlyaWdodCDCqSAyMDE5 IEludGVsIENvcnBvcmF0aW9uCj4gKwo+ICsjIFRlc3QgdGhlIGhlYWRlcnMgYXJlIGNvbXBpbGFi bGUgYXMgc3RhbmRhbG9uZSB1bml0cwo+ICtoZWFkZXJfdGVzdCA6PSAkKG5vdGRpciAkKHdpbGRj YXJkICQoc3JjKS8qLmgpKQo+ICsKPiArcXVpZXRfY21kX2hlYWRlcl90ZXN0ID0gSERSVEVTVCAk QAo+ICsgICAgICBjbWRfaGVhZGVyX3Rlc3QgPSBlY2hvICJcI2luY2x1ZGUgXCIkKDxGKVwiIiA+ ICRACj4gKwo+ICtoZWFkZXJfdGVzdF8lLmM6ICUuaAo+ICsJJChjYWxsIGNtZCxoZWFkZXJfdGVz dCkKPiArCj4gK2V4dHJhLSQoQ09ORklHX0RSTV9JOTE1X1dFUlJPUikgKz0gXAo+ICsJJChmb3Jl YWNoIGgsJChoZWFkZXJfdGVzdCksJChwYXRzdWJzdCAlLmgsaGVhZGVyX3Rlc3RfJS5vLCQoaCkp KQo+ICsKPiArY2xlYW4tZmlsZXMgKz0gJChmb3JlYWNoIGgsJChoZWFkZXJfdGVzdCksJChwYXRz dWJzdCAlLmgsaGVhZGVyX3Rlc3RfJS5jLCQoaCkpKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uZTRiNTA5NDRmNTUzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaAo+IEBAIC0w LDAgKzEsMjg1IEBACj4gKy8qCj4gKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiAr ICoKPiArICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ ICsjaWZuZGVmIF9fSTkxNV9HRU1fT0JKRUNUX1RZUEVTX0hfXwo+ICsjZGVmaW5lIF9fSTkxNV9H RU1fT0JKRUNUX1RZUEVTX0hfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+ Cj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiArCj4gKyNpbmNsdWRlICIuLi9pOTE1 X2FjdGl2ZS5oIgo+ICsjaW5jbHVkZSAiLi4vaTkxNV9zZWxmdGVzdC5oIgo+ICsKPiArc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3Q7Cj4gKwo+ICsvKgo+ICsgKiBzdHJ1Y3QgaTkxNV9sdXRfaGFu ZGxlIHRyYWNrcyB0aGUgZmFzdCBsb29rdXBzIGZyb20gaGFuZGxlIHRvIHZtYSB1c2VkCj4gKyAq IGZvciBleGVjYnVmLiBBbHRob3VnaCB3ZSB1c2UgYSByYWRpeHRyZWUgZm9yIHRoYXQgbWFwcGlu ZywgaW4gb3JkZXIgdG8KPiArICogcmVtb3ZlIHRoZW0gYXMgdGhlIG9iamVjdCBvciBjb250ZXh0 IGlzIGNsb3NlZCwgd2UgbmVlZCBhIHNlY29uZGFyeSBsaXN0Cj4gKyAqIGFuZCBhIHRyYW5zbGF0 aW9uIGVudHJ5IChpOTE1X2x1dF9oYW5kbGUpLgo+ICsgKi8KPiArc3RydWN0IGk5MTVfbHV0X2hh bmRsZSB7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIG9ial9saW5rOwo+ICsJc3RydWN0IGxpc3RfaGVh ZCBjdHhfbGluazsKPiArCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4gKwl1MzIgaGFu ZGxlOwo+ICt9Owo+ICsKPiArc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIHsKPiArCXVu c2lnbmVkIGludCBmbGFnczsKPiArI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfSEFTX1NUUlVDVF9Q QUdFCUJJVCgwKQo+ICsjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9JU19TSFJJTktBQkxFCUJJVCgx KQo+ICsjZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9JU19QUk9YWQlCSVQoMikKPiArI2RlZmluZSBJ OTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMCUJJVCgzKQo+ICsKPiArCS8qIEludGVyZmFjZSBi ZXR3ZWVuIHRoZSBHRU0gb2JqZWN0IGFuZCBpdHMgYmFja2luZyBzdG9yYWdlLgo+ICsJICogZ2V0 X3BhZ2VzKCkgaXMgY2FsbGVkIG9uY2UgcHJpb3IgdG8gdGhlIHVzZSBvZiB0aGUgYXNzb2NpYXRl ZCBzZXQKPiArCSAqIG9mIHBhZ2VzIGJlZm9yZSB0byBiaW5kaW5nIHRoZW0gaW50byB0aGUgR1RU LCBhbmQgcHV0X3BhZ2VzKCkgaXMKPiArCSAqIGNhbGxlZCBhZnRlciB3ZSBubyBsb25nZXIgbmVl ZCB0aGVtLiBBcyB3ZSBleHBlY3QgdGhlcmUgdG8gYmUKPiArCSAqIGFzc29jaWF0ZWQgY29zdCB3 aXRoIG1pZ3JhdGluZyBwYWdlcyBiZXR3ZWVuIHRoZSBiYWNraW5nIHN0b3JhZ2UKPiArCSAqIGFu ZCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgZm9yIHRoZSBHUFUgKGUuZy4gY2xmbHVzaCksIHdlIG1h eSBob2xkCj4gKwkgKiBvbnRvIHRoZSBwYWdlcyBhZnRlciB0aGV5IGFyZSBubyBsb25nZXIgcmVm ZXJlbmNlZCBieSB0aGUgR1BVCj4gKwkgKiBpbiBjYXNlIHRoZXkgbWF5IGJlIHVzZWQgYWdhaW4g c2hvcnRseSAoZm9yIGV4YW1wbGUgbWlncmF0aW5nIHRoZQo+ICsJICogcGFnZXMgdG8gYSBkaWZm ZXJlbnQgbWVtb3J5IGRvbWFpbiB3aXRoaW4gdGhlIEdUVCkuIHB1dF9wYWdlcygpCj4gKwkgKiB3 aWxsIHRoZXJlZm9yZSBtb3N0IGxpa2VseSBiZSBjYWxsZWQgd2hlbiB0aGUgb2JqZWN0IGl0c2Vs ZiBpcwo+ICsJICogYmVpbmcgcmVsZWFzZWQgb3IgdW5kZXIgbWVtb3J5IHByZXNzdXJlICh3aGVy ZSB3ZSBhdHRlbXB0IHRvCj4gKwkgKiByZWFwIHBhZ2VzIGZvciB0aGUgc2hyaW5rZXIpLgo+ICsJ ICovCj4gKwlpbnQgKCpnZXRfcGFnZXMpKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop Owo+ICsJdm9pZCAoKnB1dF9wYWdlcykoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK PiArCQkJICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKTsKPiArCj4gKwlpbnQgKCpwd3JpdGUpKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJICAgICAgY29uc3Qgc3RydWN0IGRy bV9pOTE1X2dlbV9wd3JpdGUgKmFyZyk7Cj4gKwo+ICsJaW50ICgqZG1hYnVmX2V4cG9ydCkoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCB7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgYmFzZTsKPiArCj4gKwljb25z dCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgKm9wczsKPiArCj4gKwlzdHJ1Y3Qgewo+ ICsJCS8qKgo+ICsJCSAqIEB2bWEubG9jazogcHJvdGVjdCB0aGUgbGlzdC90cmVlIG9mIHZtYXMK PiArCQkgKi8KPiArCQlzcGlubG9ja190IGxvY2s7Cj4gKwo+ICsJCS8qKgo+ICsJCSAqIEB2bWEu bGlzdDogTGlzdCBvZiBWTUFzIGJhY2tlZCBieSB0aGlzIG9iamVjdAo+ICsJCSAqCj4gKwkJICog VGhlIFZNQSBvbiB0aGlzIGxpc3QgYXJlIG9yZGVyZWQgYnkgdHlwZSwgYWxsIEdHVFQgdm1hIGFy ZQo+ICsJCSAqIHBsYWNlZCBhdCB0aGUgaGVhZCBhbmQgYWxsIHBwR1RUIHZtYSBhcmUgcGxhY2Vk IGF0IHRoZSB0YWlsLgo+ICsJCSAqIFRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgR0dUVCB2bWEgYXJl IHVub3JkZXJlZCBiZXR3ZWVuCj4gKwkJICogdGhlbXNlbHZlcywgdXNlIHRoZSBAdm1hLnRyZWUg KHdoaWNoIGhhcyBhIGRlZmluZWQgb3JkZXIKPiArCQkgKiBiZXR3ZWVuIGFsbCBWTUEpIHRvIHF1 aWNrbHkgZmluZCBhbiBleGFjdCBtYXRjaC4KPiArCQkgKi8KPiArCQlzdHJ1Y3QgbGlzdF9oZWFk IGxpc3Q7Cj4gKwo+ICsJCS8qKgo+ICsJCSAqIEB2bWEudHJlZTogT3JkZXJlZCB0cmVlIG9mIFZN QXMgYmFja2VkIGJ5IHRoaXMgb2JqZWN0Cj4gKwkJICoKPiArCQkgKiBBbGwgVk1BIGNyZWF0ZWQg Zm9yIHRoaXMgb2JqZWN0IGFyZSBwbGFjZWQgaW4gdGhlIEB2bWEudHJlZQo+ICsJCSAqIGZvciBm YXN0IHJldHJpZXZhbCB2aWEgYSBiaW5hcnkgc2VhcmNoIGluCj4gKwkJICogaTkxNV92bWFfaW5z dGFuY2UoKS4gVGhleSBhcmUgYWxzbyBhZGRlZCB0byBAdm1hLmxpc3QgZm9yCj4gKwkJICogZWFz eSBpdGVyYXRpb24uCj4gKwkJICovCj4gKwkJc3RydWN0IHJiX3Jvb3QgdHJlZTsKPiArCX0gdm1h Owo+ICsKPiArCS8qKgo+ICsJICogQGx1dF9saXN0OiBMaXN0IG9mIHZtYSBsb29rdXAgZW50cmll cyBpbiB1c2UgZm9yIHRoaXMgb2JqZWN0Lgo+ICsJICoKPiArCSAqIElmIHRoaXMgb2JqZWN0IGlz IGNsb3NlZCwgd2UgbmVlZCB0byByZW1vdmUgYWxsIG9mIGl0cyBWTUEgZnJvbQo+ICsJICogdGhl IGZhc3QgbG9va3VwIGluZGV4IGluIGFzc29jaWF0ZWQgY29udGV4dHM7IEBsdXRfbGlzdCBwcm92 aWRlcwo+ICsJICogdGhpcyB0cmFuc2xhdGlvbiBmcm9tIG9iamVjdCB0byBjb250ZXh0LT5oYW5k bGVzX3ZtYS4KPiArCSAqLwo+ICsJc3RydWN0IGxpc3RfaGVhZCBsdXRfbGlzdDsKPiArCj4gKwkv KiogU3RvbGVuIG1lbW9yeSBmb3IgdGhpcyBvYmplY3QsIGluc3RlYWQgb2YgYmVpbmcgYmFja2Vk IGJ5IHNobWVtLiAqLwo+ICsJc3RydWN0IGRybV9tbV9ub2RlICpzdG9sZW47Cj4gKwl1bmlvbiB7 Cj4gKwkJc3RydWN0IHJjdV9oZWFkIHJjdTsKPiArCQlzdHJ1Y3QgbGxpc3Rfbm9kZSBmcmVlZDsK PiArCX07Cj4gKwo+ICsJLyoqCj4gKwkgKiBXaGV0aGVyIHRoZSBvYmplY3QgaXMgY3VycmVudGx5 IGluIHRoZSBHR1RUIG1tYXAuCj4gKwkgKi8KPiArCXVuc2lnbmVkIGludCB1c2VyZmF1bHRfY291 bnQ7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzZXJmYXVsdF9saW5rOwo+ICsKPiArCXN0cnVjdCBs aXN0X2hlYWQgYmF0Y2hfcG9vbF9saW5rOwo+ICsJSTkxNV9TRUxGVEVTVF9ERUNMQVJFKHN0cnVj dCBsaXN0X2hlYWQgc3RfbGluayk7Cj4gKwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4g KwkvKioKPiArCSAqIEhhdmUgd2UgdGFrZW4gYSByZWZlcmVuY2UgZm9yIHRoZSBvYmplY3QgZm9y IGluY29tcGxldGUgR1BVCj4gKwkgKiBhY3Rpdml0eT8KPiArCSAqLwo+ICsjZGVmaW5lIEk5MTVf Qk9fQUNUSVZFX1JFRiAwCj4gKwo+ICsJLyoKPiArCSAqIElzIHRoZSBvYmplY3QgdG8gYmUgbWFw cGVkIGFzIHJlYWQtb25seSB0byB0aGUgR1BVCj4gKwkgKiBPbmx5IGhvbm91cmVkIGlmIGhhcmR3 YXJlIGhhcyByZWxldmFudCBwdGUgYml0Cj4gKwkgKi8KPiArCXVuc2lnbmVkIGludCBjYWNoZV9s ZXZlbDozOwo+ICsJdW5zaWduZWQgaW50IGNhY2hlX2NvaGVyZW50OjI7Cj4gKyNkZWZpbmUgSTkx NV9CT19DQUNIRV9DT0hFUkVOVF9GT1JfUkVBRCBCSVQoMCkKPiArI2RlZmluZSBJOTE1X0JPX0NB Q0hFX0NPSEVSRU5UX0ZPUl9XUklURSBCSVQoMSkKPiArCXVuc2lnbmVkIGludCBjYWNoZV9kaXJ0 eToxOwo+ICsKPiArCS8qKgo+ICsJICogQHJlYWRfZG9tYWluczogUmVhZCBtZW1vcnkgZG9tYWlu cy4KPiArCSAqCj4gKwkgKiBUaGVzZSBtb25pdG9yIHdoaWNoIGNhY2hlcyBjb250YWluIHJlYWQv d3JpdGUgZGF0YSByZWxhdGVkIHRvIHRoZQo+ICsJICogb2JqZWN0LiBXaGVuIHRyYW5zaXRpb25p bmcgZnJvbSBvbmUgc2V0IG9mIGRvbWFpbnMgdG8gYW5vdGhlciwKPiArCSAqIHRoZSBkcml2ZXIg aXMgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGNhY2hlcyBhcmUgc3VpdGFibHkgZmx1c2hlZCBhbmQK PiArCSAqIGludmFsaWRhdGVkLgo+ICsJICovCj4gKwl1MTYgcmVhZF9kb21haW5zOwo+ICsKPiAr CS8qKgo+ICsJICogQHdyaXRlX2RvbWFpbjogQ29ycmVzcG9uZGluZyB1bmlxdWUgd3JpdGUgbWVt b3J5IGRvbWFpbi4KPiArCSAqLwo+ICsJdTE2IHdyaXRlX2RvbWFpbjsKPiArCj4gKwlhdG9taWNf dCBmcm9udGJ1ZmZlcl9iaXRzOwo+ICsJdW5zaWduZWQgaW50IGZyb250YnVmZmVyX2dndHRfb3Jp Z2luOyAvKiB3cml0ZSBvbmNlICovCj4gKwlzdHJ1Y3QgaTkxNV9hY3RpdmVfcmVxdWVzdCBmcm9u dGJ1ZmZlcl93cml0ZTsKPiArCj4gKwkvKiogQ3VycmVudCB0aWxpbmcgc3RyaWRlIGZvciB0aGUg b2JqZWN0LCBpZiBpdCdzIHRpbGVkLiAqLwo+ICsJdW5zaWduZWQgaW50IHRpbGluZ19hbmRfc3Ry aWRlOwo+ICsjZGVmaW5lIEZFTkNFX01JTklNVU1fU1RSSURFIDEyOCAvKiBTZWUgaTkxNV90aWxp bmdfb2soKSAqLwo+ICsjZGVmaW5lIFRJTElOR19NQVNLIChGRU5DRV9NSU5JTVVNX1NUUklERSAt IDEpCj4gKyNkZWZpbmUgU1RSSURFX01BU0sgKH5USUxJTkdfTUFTSykKPiArCj4gKwkvKiogQ291 bnQgb2YgVk1BIGFjdHVhbGx5IGJvdW5kIGJ5IHRoaXMgb2JqZWN0ICovCj4gKwl1bnNpZ25lZCBp bnQgYmluZF9jb3VudDsKPiArCXVuc2lnbmVkIGludCBhY3RpdmVfY291bnQ7Cj4gKwkvKiogQ291 bnQgb2YgaG93IG1hbnkgZ2xvYmFsIFZNQSBhcmUgY3VycmVudGx5IHBpbm5lZCBmb3IgdXNlIGJ5 IEhXICovCj4gKwl1bnNpZ25lZCBpbnQgcGluX2dsb2JhbDsKPiArCj4gKwlzdHJ1Y3Qgewo+ICsJ CXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyB0aGUgcGFnZXMgYW5kIHRoZWlyIHVzZSAq Lwo+ICsJCWF0b21pY190IHBhZ2VzX3Bpbl9jb3VudDsKPiArCj4gKwkJc3RydWN0IHNnX3RhYmxl ICpwYWdlczsKPiArCQl2b2lkICptYXBwaW5nOwo+ICsKPiArCQkvKiBUT0RPOiB3aGFjayBzb21l IG9mIHRoaXMgaW50byB0aGUgZXJyb3Igc3RhdGUgKi8KPiArCQlzdHJ1Y3QgaTkxNV9wYWdlX3Np emVzIHsKPiArCQkJLyoqCj4gKwkJCSAqIFRoZSBzZyBtYXNrIG9mIHRoZSBwYWdlcyBzZ190YWJs ZS4gaS5lIHRoZSBtYXNrIG9mCj4gKwkJCSAqIG9mIHRoZSBsZW5ndGhzIGZvciBlYWNoIHNnIGVu dHJ5Lgo+ICsJCQkgKi8KPiArCQkJdW5zaWduZWQgaW50IHBoeXM7Cj4gKwo+ICsJCQkvKioKPiAr CQkJICogVGhlIGd0dCBwYWdlIHNpemVzIHdlIGFyZSBhbGxvd2VkIHRvIHVzZSBnaXZlbiB0aGUK PiArCQkJICogc2cgbWFzayBhbmQgdGhlIHN1cHBvcnRlZCBwYWdlIHNpemVzLiBUaGlzIHdpbGwK PiArCQkJICogZXhwcmVzcyB0aGUgc21hbGxlc3QgdW5pdCB3ZSBjYW4gdXNlIGZvciB0aGUgd2hv bGUKPiArCQkJICogb2JqZWN0LCBhcyB3ZWxsIGFzIHRoZSBsYXJnZXIgc2l6ZXMgd2UgbWF5IGJl IGFibGUKPiArCQkJICogdG8gdXNlIG9wcG9ydHVuaXN0aWNhbGx5Lgo+ICsJCQkgKi8KPiArCQkJ dW5zaWduZWQgaW50IHNnOwo+ICsKPiArCQkJLyoqCj4gKwkJCSAqIFRoZSBhY3R1YWwgZ3R0IHBh Z2Ugc2l6ZSB1c2FnZS4gU2luY2Ugd2UgY2FuIGhhdmUKPiArCQkJICogbXVsdGlwbGUgdm1hIGFz c29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdCB3ZSBuZWVkIHRvCj4gKwkJCSAqIHByZXZlbnQgYW55 IHRyYW1wbGluZyBvZiBzdGF0ZSwgaGVuY2UgYSBjb3B5IG9mIHRoaXMKPiArCQkJICogc3RydWN0 IGFsc28gbGl2ZXMgaW4gZWFjaCB2bWEsIHRoZXJlZm9yZSB0aGUgZ3R0Cj4gKwkJCSAqIHZhbHVl IGhlcmUgc2hvdWxkIG9ubHkgYmUgcmVhZC93cml0ZSB0aHJvdWdoIHRoZSB2bWEuCj4gKwkJCSAq Lwo+ICsJCQl1bnNpZ25lZCBpbnQgZ3R0Owo+ICsJCX0gcGFnZV9zaXplczsKPiArCj4gKwkJSTkx NV9TRUxGVEVTVF9ERUNMQVJFKHVuc2lnbmVkIGludCBwYWdlX21hc2spOwo+ICsKPiArCQlzdHJ1 Y3QgaTkxNV9nZW1fb2JqZWN0X3BhZ2VfaXRlciB7Cj4gKwkJCXN0cnVjdCBzY2F0dGVybGlzdCAq c2dfcG9zOwo+ICsJCQl1bnNpZ25lZCBpbnQgc2dfaWR4OyAvKiBpbiBwYWdlcywgYnV0IDMyYml0 IGVlayEgKi8KPiArCj4gKwkJCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QgcmFkaXg7Cj4gKwkJCXN0 cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyB0aGlzIGNhY2hlICovCj4gKwkJfSBnZXRfcGFn ZTsKPiArCj4gKwkJLyoqCj4gKwkJICogRWxlbWVudCB3aXRoaW4gaTkxNS0+bW0udW5ib3VuZF9s aXN0IG9yIGk5MTUtPm1tLmJvdW5kX2xpc3QsCj4gKwkJICogbG9ja2VkIGJ5IGk5MTUtPm1tLm9i al9sb2NrLgo+ICsJCSAqLwo+ICsJCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKPiArCj4gKwkJLyoq Cj4gKwkJICogQWR2aWNlOiBhcmUgdGhlIGJhY2tpbmcgcGFnZXMgcHVyZ2VhYmxlPwo+ICsJCSAq Lwo+ICsJCXVuc2lnbmVkIGludCBtYWR2OjI7Cj4gKwo+ICsJCS8qKgo+ICsJCSAqIFRoaXMgaXMg c2V0IGlmIHRoZSBvYmplY3QgaGFzIGJlZW4gd3JpdHRlbiB0byBzaW5jZSB0aGUKPiArCQkgKiBw YWdlcyB3ZXJlIGxhc3QgYWNxdWlyZWQuCj4gKwkJICovCj4gKwkJYm9vbCBkaXJ0eToxOwo+ICsK PiArCQkvKioKPiArCQkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIHBpbm5l ZCBkdWUgdG8gdW5rbm93bgo+ICsJCSAqIHN3aXp6bGluZy4KPiArCQkgKi8KPiArCQlib29sIHF1 aXJrZWQ6MTsKPiArCX0gbW07Cj4gKwo+ICsJLyoqIEJyZWFkY3J1bWIgb2YgbGFzdCByZW5kZXJp bmcgdG8gdGhlIGJ1ZmZlci4KPiArCSAqIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSB3cml0ZXIsIGJ1 dCB3ZSBhbGxvdyBmb3IgbXVsdGlwbGUgcmVhZGVycy4KPiArCSAqIElmIHRoZXJlIGlzIGEgd3Jp dGVyIHRoYXQgbmVjZXNzYXJpbHkgaW1wbGllcyB0aGF0IGFsbCBvdGhlcgo+ICsJICogcmVhZCBy ZXF1ZXN0cyBhcmUgY29tcGxldGUgLSBidXQgd2UgbWF5IG9ubHkgYmUgbGF6aWx5IGNsZWFyaW5n Cj4gKwkgKiB0aGUgcmVhZCByZXF1ZXN0cy4gQSByZWFkIHJlcXVlc3QgaXMgbmF0dXJhbGx5IHRo ZSBtb3N0IHJlY2VudAo+ICsJICogcmVxdWVzdCBvbiBhIHJpbmcsIHNvIHdlIG1heSBoYXZlIHR3 byBkaWZmZXJlbnQgd3JpdGUgYW5kIHJlYWQKPiArCSAqIHJlcXVlc3RzIG9uIG9uZSByaW5nIHdo ZXJlIHRoZSB3cml0ZSByZXF1ZXN0IGlzIG9sZGVyIHRoYW4gdGhlCj4gKwkgKiByZWFkIHJlcXVl c3QuIFRoaXMgYWxsb3dzIGZvciB0aGUgQ1BVIHRvIHJlYWQgZnJvbSBhbiBhY3RpdmUKPiArCSAq IGJ1ZmZlciBieSBvbmx5IHdhaXRpbmcgZm9yIHRoZSB3cml0ZSB0byBjb21wbGV0ZS4KPiArCSAq Lwo+ICsJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKPiArCj4gKwkvKiogUmVmZXJl bmNlcyBmcm9tIGZyYW1lYnVmZmVycywgbG9ja3Mgb3V0IHRpbGluZyBjaGFuZ2VzLiAqLwo+ICsJ dW5zaWduZWQgaW50IGZyYW1lYnVmZmVyX3JlZmVyZW5jZXM7Cj4gKwo+ICsJLyoqIFJlY29yZCBv ZiBhZGRyZXNzIGJpdCAxNyBvZiBlYWNoIHBhZ2UgYXQgbGFzdCB1bmJpbmQuICovCj4gKwl1bnNp Z25lZCBsb25nICpiaXRfMTc7Cj4gKwo+ICsJdW5pb24gewo+ICsJCXN0cnVjdCBpOTE1X2dlbV91 c2VycHRyIHsKPiArCQkJdWludHB0cl90IHB0cjsKPiArCj4gKwkJCXN0cnVjdCBpOTE1X21tX3N0 cnVjdCAqbW07Cj4gKwkJCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1tdV9vYmplY3Q7Cj4gKwkJ CXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsKPiArCQl9IHVzZXJwdHI7Cj4gKwo+ICsJCXVuc2ln bmVkIGxvbmcgc2NyYXRjaDsKPiArCj4gKwkJdm9pZCAqZ3Z0X2luZm87Cj4gKwl9Owo+ICsKPiAr CS8qKiBmb3IgcGh5cyBhbGxvY2F0ZWQgb2JqZWN0cyAqLwo+ICsJc3RydWN0IGRybV9kbWFfaGFu ZGxlICpwaHlzX2hhbmRsZTsKPiArCj4gKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0IF9fYnVp bHRpbl9yZXN2Owo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqCj4gK3RvX2ludGVsX2JvKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKQo+ICt7 Cj4gKwkvKiBBc3NlcnQgdGhhdCB0b19pbnRlbF9ibyhOVUxMKSA9PSBOVUxMICovCj4gKwlCVUlM RF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsIGJhc2UpKTsKPiAr Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGdlbSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qs IGJhc2UpOwo+ICt9Cj4gKwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9lbmdpbmVfdHlwZXMuaAo+IGluZGV4IGNhOGQ5NWE1NzA4ZC4uYWU3M2M2NTk2ZDA4IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmgKPiBA QCAtMjksNiArMjksNyBAQAo+ICAjZGVmaW5lIEk5MTVfQ01EX0hBU0hfT1JERVIgOQo+ICAKPiAg c3RydWN0IGRtYV9mZW5jZTsKPiArc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Q7Cj4gIHN0cnVj dCBkcm1faTkxNV9yZWdfdGFibGU7Cj4gIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0Owo+ICBzdHJ1 Y3QgaTkxNV9yZXF1ZXN0Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IDVjYTRkZjlh NzQyOC4uMGNmODc0OTVlMTFiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTgw LDcgKzgwLDYgQEAKPiAgI2luY2x1ZGUgImk5MTVfZ2VtLmgiCj4gICNpbmNsdWRlICJpOTE1X2dl bV9jb250ZXh0LmgiCj4gICNpbmNsdWRlICJpOTE1X2dlbV9mZW5jZV9yZWcuaCIKPiAtI2luY2x1 ZGUgImk5MTVfZ2VtX29iamVjdC5oIgo+ICAjaW5jbHVkZSAiaTkxNV9nZW1fZ3R0LmgiCj4gICNp bmNsdWRlICJpOTE1X2dwdV9lcnJvci5oIgo+ICAjaW5jbHVkZSAiaTkxNV9yZXF1ZXN0LmgiCj4g QEAgLTEzNSw2ICsxMzQsOCBAQCBib29sIGk5MTVfZXJyb3JfaW5qZWN0ZWQodm9pZCk7Cj4gIAlf X2k5MTVfcHJpbnRrKGk5MTUsIGk5MTVfZXJyb3JfaW5qZWN0ZWQoKSA/IEtFUk5fREVCVUcgOiBL RVJOX0VSUiwgXAo+ICAJCSAgICAgIGZtdCwgIyNfX1ZBX0FSR1NfXykKPiAgCj4gK3N0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0Owo+ICsKPiAgZW51bSBocGRfcGluIHsKPiAgCUhQRF9OT05FID0g MCwKPiAgCUhQRF9UViA9IEhQRF9OT05FLCAgICAgLyogVFYgaXMga25vd24gdG8gYmUgdW5yZWxp YWJsZSAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRj aF9wb29sLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9wb29sLmgKPiBp bmRleCA1Njk0N2RhYWFmNjUuLmZlZWVlZWFhNTRkOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9wb29sLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9iYXRjaF9wb29sLmgKPiBAQCAtOSw2ICs5LDcgQEAKPiAgCj4gICNpbmNs dWRlIDxsaW51eC90eXBlcy5oPgo+ICAKPiArc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Q7Cj4g IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3M7Cj4gIAo+ICBzdHJ1Y3QgaTkxNV9nZW1fYmF0Y2hfcG9v bCB7Cj4gQEAgLTE5LDcgKzIwLDcgQEAgc3RydWN0IGk5MTVfZ2VtX2JhdGNoX3Bvb2wgewo+ICB2 b2lkIGk5MTVfZ2VtX2JhdGNoX3Bvb2xfaW5pdChzdHJ1Y3QgaTkxNV9nZW1fYmF0Y2hfcG9vbCAq cG9vbCwKPiAgCQkJICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgdm9p ZCBpOTE1X2dlbV9iYXRjaF9wb29sX2Zpbmkoc3RydWN0IGk5MTVfZ2VtX2JhdGNoX3Bvb2wgKnBv b2wpOwo+IC1zdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCoKPiArc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKgo+ICBpOTE1X2dlbV9iYXRjaF9wb29sX2dldChzdHJ1Y3QgaTkxNV9nZW1fYmF0 Y2hfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUpOwo+ICAKPiAgI2VuZGlmIC8qIEk5MTVfR0VNX0JB VENIX1BPT0xfSCAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gaW5kZXggMmZh ZmEwNGM0NWVjLi41OTMwNzlmMzBmYmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZ3R0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuaAo+IEBAIC02MSw2ICs2MSw3IEBACj4gIAo+ICBzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2 YXRlOwo+ICBzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnOwo+ICtzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdDsKPiAgc3RydWN0IGk5MTVfdm1hOwo+ICAKPiAgdHlwZWRlZiB1MzIgZ2VuNl9wdGVf dDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2JqZWN0Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaAo+IGluZGV4IGNhOTNhNDBj MGM4Ny4uMzY2NmIwYzVmNmNhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX29iamVjdC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fb2Jq ZWN0LmgKPiBAQCAtMSwzMDggKzEsMTkgQEAKPiAgLyoKPiAtICogQ29weXJpZ2h0IMKpIDIwMTYg SW50ZWwgQ29ycG9yYXRpb24KPiAtICoKPiAtICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiAtICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKPiAtICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+IC0gKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK PiAtICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gLSAqCj4gLSAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKPiAtICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+IC0gKiBTb2Z0d2FyZS4KPiAtICoKPiAt ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiAtICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gLSAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAo+IC0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+IC0gKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+IC0g KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCj4gLSAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ICAgKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRl bCBDb3Jwb3JhdGlvbgo+ICAgKi8KPiAgCj4gICNpZm5kZWYgX19JOTE1X0dFTV9PQkpFQ1RfSF9f Cj4gICNkZWZpbmUgX19JOTE1X0dFTV9PQkpFQ1RfSF9fCj4gIAo+IC0jaW5jbHVkZSA8bGludXgv cmVzZXJ2YXRpb24uaD4KPiAtCj4gLSNpbmNsdWRlIDxkcm0vZHJtX3ZtYV9tYW5hZ2VyLmg+Cj4g ICNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+Cj4g ICNpbmNsdWRlIDxkcm0vZHJtX2RldmljZS5oPgo+ICAKPiAgI2luY2x1ZGUgPGRybS9pOTE1X2Ry bS5oPgo+ICAKPiAtI2luY2x1ZGUgImk5MTVfcmVxdWVzdC5oIgo+IC0jaW5jbHVkZSAiaTkxNV9z ZWxmdGVzdC5oIgo+IC0KPiAtc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Q7Cj4gLQo+IC0vKgo+ IC0gKiBzdHJ1Y3QgaTkxNV9sdXRfaGFuZGxlIHRyYWNrcyB0aGUgZmFzdCBsb29rdXBzIGZyb20g aGFuZGxlIHRvIHZtYSB1c2VkCj4gLSAqIGZvciBleGVjYnVmLiBBbHRob3VnaCB3ZSB1c2UgYSBy YWRpeHRyZWUgZm9yIHRoYXQgbWFwcGluZywgaW4gb3JkZXIgdG8KPiAtICogcmVtb3ZlIHRoZW0g YXMgdGhlIG9iamVjdCBvciBjb250ZXh0IGlzIGNsb3NlZCwgd2UgbmVlZCBhIHNlY29uZGFyeSBs aXN0Cj4gLSAqIGFuZCBhIHRyYW5zbGF0aW9uIGVudHJ5IChpOTE1X2x1dF9oYW5kbGUpLgo+IC0g Ki8KPiAtc3RydWN0IGk5MTVfbHV0X2hhbmRsZSB7Cj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIG9ial9s aW5rOwo+IC0Jc3RydWN0IGxpc3RfaGVhZCBjdHhfbGluazsKPiAtCXN0cnVjdCBpOTE1X2dlbV9j b250ZXh0ICpjdHg7Cj4gLQl1MzIgaGFuZGxlOwo+IC19Owo+IC0KPiAtc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3Rfb3BzIHsKPiAtCXVuc2lnbmVkIGludCBmbGFnczsKPiAtI2RlZmluZSBJOTE1 X0dFTV9PQkpFQ1RfSEFTX1NUUlVDVF9QQUdFCUJJVCgwKQo+IC0jZGVmaW5lIEk5MTVfR0VNX09C SkVDVF9JU19TSFJJTktBQkxFCUJJVCgxKQo+IC0jZGVmaW5lIEk5MTVfR0VNX09CSkVDVF9JU19Q Uk9YWQlCSVQoMikKPiAtI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMCUJJVCgz KQo+IC0KPiAtCS8qIEludGVyZmFjZSBiZXR3ZWVuIHRoZSBHRU0gb2JqZWN0IGFuZCBpdHMgYmFj a2luZyBzdG9yYWdlLgo+IC0JICogZ2V0X3BhZ2VzKCkgaXMgY2FsbGVkIG9uY2UgcHJpb3IgdG8g dGhlIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBzZXQKPiAtCSAqIG9mIHBhZ2VzIGJlZm9yZSB0byBi aW5kaW5nIHRoZW0gaW50byB0aGUgR1RULCBhbmQgcHV0X3BhZ2VzKCkgaXMKPiAtCSAqIGNhbGxl ZCBhZnRlciB3ZSBubyBsb25nZXIgbmVlZCB0aGVtLiBBcyB3ZSBleHBlY3QgdGhlcmUgdG8gYmUK PiAtCSAqIGFzc29jaWF0ZWQgY29zdCB3aXRoIG1pZ3JhdGluZyBwYWdlcyBiZXR3ZWVuIHRoZSBi YWNraW5nIHN0b3JhZ2UKPiAtCSAqIGFuZCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgZm9yIHRoZSBH UFUgKGUuZy4gY2xmbHVzaCksIHdlIG1heSBob2xkCj4gLQkgKiBvbnRvIHRoZSBwYWdlcyBhZnRl ciB0aGV5IGFyZSBubyBsb25nZXIgcmVmZXJlbmNlZCBieSB0aGUgR1BVCj4gLQkgKiBpbiBjYXNl IHRoZXkgbWF5IGJlIHVzZWQgYWdhaW4gc2hvcnRseSAoZm9yIGV4YW1wbGUgbWlncmF0aW5nIHRo ZQo+IC0JICogcGFnZXMgdG8gYSBkaWZmZXJlbnQgbWVtb3J5IGRvbWFpbiB3aXRoaW4gdGhlIEdU VCkuIHB1dF9wYWdlcygpCj4gLQkgKiB3aWxsIHRoZXJlZm9yZSBtb3N0IGxpa2VseSBiZSBjYWxs ZWQgd2hlbiB0aGUgb2JqZWN0IGl0c2VsZiBpcwo+IC0JICogYmVpbmcgcmVsZWFzZWQgb3IgdW5k ZXIgbWVtb3J5IHByZXNzdXJlICh3aGVyZSB3ZSBhdHRlbXB0IHRvCj4gLQkgKiByZWFwIHBhZ2Vz IGZvciB0aGUgc2hyaW5rZXIpLgo+IC0JICovCj4gLQlpbnQgKCpnZXRfcGFnZXMpKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICopOwo+IC0Jdm9pZCAoKnB1dF9wYWdlcykoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKiwgc3RydWN0IHNnX3RhYmxlICopOwo+IC0KPiAtCWludCAoKnB3cml0 ZSkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKiwKPiAtCQkgICAgICBjb25zdCBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3B3cml0ZSAqKTsKPiAtCj4gLQlpbnQgKCpkbWFidWZfZXhwb3J0KShzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqKTsKPiAtCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqKTsKPiAtfTsKPiAtCj4gLXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0IHsKPiAtCXN0cnVjdCBkcm1fZ2VtX29iamVjdCBiYXNlOwo+IC0KPiAtCWNvbnN0IHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyAqb3BzOwo+IC0KPiAtCXN0cnVjdCB7Cj4gLQkJLyoq Cj4gLQkJICogQHZtYS5sb2NrOiBwcm90ZWN0IHRoZSBsaXN0L3RyZWUgb2Ygdm1hcwo+IC0JCSAq Lwo+IC0JCXNwaW5sb2NrX3QgbG9jazsKPiAtCj4gLQkJLyoqCj4gLQkJICogQHZtYS5saXN0OiBM aXN0IG9mIFZNQXMgYmFja2VkIGJ5IHRoaXMgb2JqZWN0Cj4gLQkJICoKPiAtCQkgKiBUaGUgVk1B IG9uIHRoaXMgbGlzdCBhcmUgb3JkZXJlZCBieSB0eXBlLCBhbGwgR0dUVCB2bWEgYXJlCj4gLQkJ ICogcGxhY2VkIGF0IHRoZSBoZWFkIGFuZCBhbGwgcHBHVFQgdm1hIGFyZSBwbGFjZWQgYXQgdGhl IHRhaWwuCj4gLQkJICogVGhlIGRpZmZlcmVudCB0eXBlcyBvZiBHR1RUIHZtYSBhcmUgdW5vcmRl cmVkIGJldHdlZW4KPiAtCQkgKiB0aGVtc2VsdmVzLCB1c2UgdGhlIEB2bWEudHJlZSAod2hpY2gg aGFzIGEgZGVmaW5lZCBvcmRlcgo+IC0JCSAqIGJldHdlZW4gYWxsIFZNQSkgdG8gcXVpY2tseSBm aW5kIGFuIGV4YWN0IG1hdGNoLgo+IC0JCSAqLwo+IC0JCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsK PiAtCj4gLQkJLyoqCj4gLQkJICogQHZtYS50cmVlOiBPcmRlcmVkIHRyZWUgb2YgVk1BcyBiYWNr ZWQgYnkgdGhpcyBvYmplY3QKPiAtCQkgKgo+IC0JCSAqIEFsbCBWTUEgY3JlYXRlZCBmb3IgdGhp cyBvYmplY3QgYXJlIHBsYWNlZCBpbiB0aGUgQHZtYS50cmVlCj4gLQkJICogZm9yIGZhc3QgcmV0 cmlldmFsIHZpYSBhIGJpbmFyeSBzZWFyY2ggaW4KPiAtCQkgKiBpOTE1X3ZtYV9pbnN0YW5jZSgp LiBUaGV5IGFyZSBhbHNvIGFkZGVkIHRvIEB2bWEubGlzdCBmb3IKPiAtCQkgKiBlYXN5IGl0ZXJh dGlvbi4KPiAtCQkgKi8KPiAtCQlzdHJ1Y3QgcmJfcm9vdCB0cmVlOwo+IC0JfSB2bWE7Cj4gLQo+ IC0JLyoqCj4gLQkgKiBAbHV0X2xpc3Q6IExpc3Qgb2Ygdm1hIGxvb2t1cCBlbnRyaWVzIGluIHVz ZSBmb3IgdGhpcyBvYmplY3QuCj4gLQkgKgo+IC0JICogSWYgdGhpcyBvYmplY3QgaXMgY2xvc2Vk LCB3ZSBuZWVkIHRvIHJlbW92ZSBhbGwgb2YgaXRzIFZNQSBmcm9tCj4gLQkgKiB0aGUgZmFzdCBs b29rdXAgaW5kZXggaW4gYXNzb2NpYXRlZCBjb250ZXh0czsgQGx1dF9saXN0IHByb3ZpZGVzCj4g LQkgKiB0aGlzIHRyYW5zbGF0aW9uIGZyb20gb2JqZWN0IHRvIGNvbnRleHQtPmhhbmRsZXNfdm1h Lgo+IC0JICovCj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIGx1dF9saXN0Owo+IC0KPiAtCS8qKiBTdG9s ZW4gbWVtb3J5IGZvciB0aGlzIG9iamVjdCwgaW5zdGVhZCBvZiBiZWluZyBiYWNrZWQgYnkgc2ht ZW0uICovCj4gLQlzdHJ1Y3QgZHJtX21tX25vZGUgKnN0b2xlbjsKPiAtCXVuaW9uIHsKPiAtCQlz dHJ1Y3QgcmN1X2hlYWQgcmN1Owo+IC0JCXN0cnVjdCBsbGlzdF9ub2RlIGZyZWVkOwo+IC0JfTsK PiAtCj4gLQkvKioKPiAtCSAqIFdoZXRoZXIgdGhlIG9iamVjdCBpcyBjdXJyZW50bHkgaW4gdGhl IEdHVFQgbW1hcC4KPiAtCSAqLwo+IC0JdW5zaWduZWQgaW50IHVzZXJmYXVsdF9jb3VudDsKPiAt CXN0cnVjdCBsaXN0X2hlYWQgdXNlcmZhdWx0X2xpbms7Cj4gLQo+IC0Jc3RydWN0IGxpc3RfaGVh ZCBiYXRjaF9wb29sX2xpbms7Cj4gLQlJOTE1X1NFTEZURVNUX0RFQ0xBUkUoc3RydWN0IGxpc3Rf aGVhZCBzdF9saW5rKTsKPiAtCj4gLQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+IC0KPiAtCS8qKgo+ IC0JICogSGF2ZSB3ZSB0YWtlbiBhIHJlZmVyZW5jZSBmb3IgdGhlIG9iamVjdCBmb3IgaW5jb21w bGV0ZSBHUFUKPiAtCSAqIGFjdGl2aXR5Pwo+IC0JICovCj4gLSNkZWZpbmUgSTkxNV9CT19BQ1RJ VkVfUkVGIDAKPiAtCj4gLQkvKgo+IC0JICogSXMgdGhlIG9iamVjdCB0byBiZSBtYXBwZWQgYXMg cmVhZC1vbmx5IHRvIHRoZSBHUFUKPiAtCSAqIE9ubHkgaG9ub3VyZWQgaWYgaGFyZHdhcmUgaGFz IHJlbGV2YW50IHB0ZSBiaXQKPiAtCSAqLwo+IC0JdW5zaWduZWQgaW50IGNhY2hlX2xldmVsOjM7 Cj4gLQl1bnNpZ25lZCBpbnQgY2FjaGVfY29oZXJlbnQ6MjsKPiAtI2RlZmluZSBJOTE1X0JPX0NB Q0hFX0NPSEVSRU5UX0ZPUl9SRUFEIEJJVCgwKQo+IC0jZGVmaW5lIEk5MTVfQk9fQ0FDSEVfQ09I RVJFTlRfRk9SX1dSSVRFIEJJVCgxKQo+IC0JdW5zaWduZWQgaW50IGNhY2hlX2RpcnR5OjE7Cj4g LQo+IC0JLyoqCj4gLQkgKiBAcmVhZF9kb21haW5zOiBSZWFkIG1lbW9yeSBkb21haW5zLgo+IC0J ICoKPiAtCSAqIFRoZXNlIG1vbml0b3Igd2hpY2ggY2FjaGVzIGNvbnRhaW4gcmVhZC93cml0ZSBk YXRhIHJlbGF0ZWQgdG8gdGhlCj4gLQkgKiBvYmplY3QuIFdoZW4gdHJhbnNpdGlvbmluZyBmcm9t IG9uZSBzZXQgb2YgZG9tYWlucyB0byBhbm90aGVyLAo+IC0JICogdGhlIGRyaXZlciBpcyBjYWxs ZWQgdG8gZW5zdXJlIHRoYXQgY2FjaGVzIGFyZSBzdWl0YWJseSBmbHVzaGVkIGFuZAo+IC0JICog aW52YWxpZGF0ZWQuCj4gLQkgKi8KPiAtCXUxNiByZWFkX2RvbWFpbnM7Cj4gLQo+IC0JLyoqCj4g LQkgKiBAd3JpdGVfZG9tYWluOiBDb3JyZXNwb25kaW5nIHVuaXF1ZSB3cml0ZSBtZW1vcnkgZG9t YWluLgo+IC0JICovCj4gLQl1MTYgd3JpdGVfZG9tYWluOwo+IC0KPiAtCWF0b21pY190IGZyb250 YnVmZmVyX2JpdHM7Cj4gLQl1bnNpZ25lZCBpbnQgZnJvbnRidWZmZXJfZ2d0dF9vcmlnaW47IC8q IHdyaXRlIG9uY2UgKi8KPiAtCXN0cnVjdCBpOTE1X2FjdGl2ZV9yZXF1ZXN0IGZyb250YnVmZmVy X3dyaXRlOwo+IC0KPiAtCS8qKiBDdXJyZW50IHRpbGluZyBzdHJpZGUgZm9yIHRoZSBvYmplY3Qs IGlmIGl0J3MgdGlsZWQuICovCj4gLQl1bnNpZ25lZCBpbnQgdGlsaW5nX2FuZF9zdHJpZGU7Cj4g LSNkZWZpbmUgRkVOQ0VfTUlOSU1VTV9TVFJJREUgMTI4IC8qIFNlZSBpOTE1X3RpbGluZ19vaygp ICovCj4gLSNkZWZpbmUgVElMSU5HX01BU0sgKEZFTkNFX01JTklNVU1fU1RSSURFLTEpCj4gLSNk ZWZpbmUgU1RSSURFX01BU0sgKH5USUxJTkdfTUFTSykKPiAtCj4gLQkvKiogQ291bnQgb2YgVk1B IGFjdHVhbGx5IGJvdW5kIGJ5IHRoaXMgb2JqZWN0ICovCj4gLQl1bnNpZ25lZCBpbnQgYmluZF9j b3VudDsKPiAtCXVuc2lnbmVkIGludCBhY3RpdmVfY291bnQ7Cj4gLQkvKiogQ291bnQgb2YgaG93 IG1hbnkgZ2xvYmFsIFZNQSBhcmUgY3VycmVudGx5IHBpbm5lZCBmb3IgdXNlIGJ5IEhXICovCj4g LQl1bnNpZ25lZCBpbnQgcGluX2dsb2JhbDsKPiAtCj4gLQlzdHJ1Y3Qgewo+IC0JCXN0cnVjdCBt dXRleCBsb2NrOyAvKiBwcm90ZWN0cyB0aGUgcGFnZXMgYW5kIHRoZWlyIHVzZSAqLwo+IC0JCWF0 b21pY190IHBhZ2VzX3Bpbl9jb3VudDsKPiAtCj4gLQkJc3RydWN0IHNnX3RhYmxlICpwYWdlczsK PiAtCQl2b2lkICptYXBwaW5nOwo+IC0KPiAtCQkvKiBUT0RPOiB3aGFjayBzb21lIG9mIHRoaXMg aW50byB0aGUgZXJyb3Igc3RhdGUgKi8KPiAtCQlzdHJ1Y3QgaTkxNV9wYWdlX3NpemVzIHsKPiAt CQkJLyoqCj4gLQkJCSAqIFRoZSBzZyBtYXNrIG9mIHRoZSBwYWdlcyBzZ190YWJsZS4gaS5lIHRo ZSBtYXNrIG9mCj4gLQkJCSAqIG9mIHRoZSBsZW5ndGhzIGZvciBlYWNoIHNnIGVudHJ5Lgo+IC0J CQkgKi8KPiAtCQkJdW5zaWduZWQgaW50IHBoeXM7Cj4gLQo+IC0JCQkvKioKPiAtCQkJICogVGhl IGd0dCBwYWdlIHNpemVzIHdlIGFyZSBhbGxvd2VkIHRvIHVzZSBnaXZlbiB0aGUKPiAtCQkJICog c2cgbWFzayBhbmQgdGhlIHN1cHBvcnRlZCBwYWdlIHNpemVzLiBUaGlzIHdpbGwKPiAtCQkJICog ZXhwcmVzcyB0aGUgc21hbGxlc3QgdW5pdCB3ZSBjYW4gdXNlIGZvciB0aGUgd2hvbGUKPiAtCQkJ ICogb2JqZWN0LCBhcyB3ZWxsIGFzIHRoZSBsYXJnZXIgc2l6ZXMgd2UgbWF5IGJlIGFibGUKPiAt CQkJICogdG8gdXNlIG9wcG9ydHVuaXN0aWNhbGx5Lgo+IC0JCQkgKi8KPiAtCQkJdW5zaWduZWQg aW50IHNnOwo+IC0KPiAtCQkJLyoqCj4gLQkJCSAqIFRoZSBhY3R1YWwgZ3R0IHBhZ2Ugc2l6ZSB1 c2FnZS4gU2luY2Ugd2UgY2FuIGhhdmUKPiAtCQkJICogbXVsdGlwbGUgdm1hIGFzc29jaWF0ZWQg d2l0aCB0aGlzIG9iamVjdCB3ZSBuZWVkIHRvCj4gLQkJCSAqIHByZXZlbnQgYW55IHRyYW1wbGlu ZyBvZiBzdGF0ZSwgaGVuY2UgYSBjb3B5IG9mIHRoaXMKPiAtCQkJICogc3RydWN0IGFsc28gbGl2 ZXMgaW4gZWFjaCB2bWEsIHRoZXJlZm9yZSB0aGUgZ3R0Cj4gLQkJCSAqIHZhbHVlIGhlcmUgc2hv dWxkIG9ubHkgYmUgcmVhZC93cml0ZSB0aHJvdWdoIHRoZSB2bWEuCj4gLQkJCSAqLwo+IC0JCQl1 bnNpZ25lZCBpbnQgZ3R0Owo+IC0JCX0gcGFnZV9zaXplczsKPiAtCj4gLQkJSTkxNV9TRUxGVEVT VF9ERUNMQVJFKHVuc2lnbmVkIGludCBwYWdlX21hc2spOwo+IC0KPiAtCQlzdHJ1Y3QgaTkxNV9n ZW1fb2JqZWN0X3BhZ2VfaXRlciB7Cj4gLQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcG9zOwo+ IC0JCQl1bnNpZ25lZCBpbnQgc2dfaWR4OyAvKiBpbiBwYWdlcywgYnV0IDMyYml0IGVlayEgKi8K PiAtCj4gLQkJCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QgcmFkaXg7Cj4gLQkJCXN0cnVjdCBtdXRl eCBsb2NrOyAvKiBwcm90ZWN0cyB0aGlzIGNhY2hlICovCj4gLQkJfSBnZXRfcGFnZTsKPiAtCj4g LQkJLyoqCj4gLQkJICogRWxlbWVudCB3aXRoaW4gaTkxNS0+bW0udW5ib3VuZF9saXN0IG9yIGk5 MTUtPm1tLmJvdW5kX2xpc3QsCj4gLQkJICogbG9ja2VkIGJ5IGk5MTUtPm1tLm9ial9sb2NrLgo+ IC0JCSAqLwo+IC0JCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKPiAtCj4gLQkJLyoqCj4gLQkJICog QWR2aWNlOiBhcmUgdGhlIGJhY2tpbmcgcGFnZXMgcHVyZ2VhYmxlPwo+IC0JCSAqLwo+IC0JCXVu c2lnbmVkIGludCBtYWR2OjI7Cj4gLQo+IC0JCS8qKgo+IC0JCSAqIFRoaXMgaXMgc2V0IGlmIHRo ZSBvYmplY3QgaGFzIGJlZW4gd3JpdHRlbiB0byBzaW5jZSB0aGUKPiAtCQkgKiBwYWdlcyB3ZXJl IGxhc3QgYWNxdWlyZWQuCj4gLQkJICovCj4gLQkJYm9vbCBkaXJ0eToxOwo+IC0KPiAtCQkvKioK PiAtCQkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIHBpbm5lZCBkdWUgdG8g dW5rbm93bgo+IC0JCSAqIHN3aXp6bGluZy4KPiAtCQkgKi8KPiAtCQlib29sIHF1aXJrZWQ6MTsK PiAtCX0gbW07Cj4gLQo+IC0JLyoqIEJyZWFkY3J1bWIgb2YgbGFzdCByZW5kZXJpbmcgdG8gdGhl IGJ1ZmZlci4KPiAtCSAqIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSB3cml0ZXIsIGJ1dCB3ZSBhbGxv dyBmb3IgbXVsdGlwbGUgcmVhZGVycy4KPiAtCSAqIElmIHRoZXJlIGlzIGEgd3JpdGVyIHRoYXQg bmVjZXNzYXJpbHkgaW1wbGllcyB0aGF0IGFsbCBvdGhlcgo+IC0JICogcmVhZCByZXF1ZXN0cyBh cmUgY29tcGxldGUgLSBidXQgd2UgbWF5IG9ubHkgYmUgbGF6aWx5IGNsZWFyaW5nCj4gLQkgKiB0 aGUgcmVhZCByZXF1ZXN0cy4gQSByZWFkIHJlcXVlc3QgaXMgbmF0dXJhbGx5IHRoZSBtb3N0IHJl Y2VudAo+IC0JICogcmVxdWVzdCBvbiBhIHJpbmcsIHNvIHdlIG1heSBoYXZlIHR3byBkaWZmZXJl bnQgd3JpdGUgYW5kIHJlYWQKPiAtCSAqIHJlcXVlc3RzIG9uIG9uZSByaW5nIHdoZXJlIHRoZSB3 cml0ZSByZXF1ZXN0IGlzIG9sZGVyIHRoYW4gdGhlCj4gLQkgKiByZWFkIHJlcXVlc3QuIFRoaXMg YWxsb3dzIGZvciB0aGUgQ1BVIHRvIHJlYWQgZnJvbSBhbiBhY3RpdmUKPiAtCSAqIGJ1ZmZlciBi eSBvbmx5IHdhaXRpbmcgZm9yIHRoZSB3cml0ZSB0byBjb21wbGV0ZS4KPiAtCSAqLwo+IC0Jc3Ry dWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKPiAtCj4gLQkvKiogUmVmZXJlbmNlcyBmcm9t IGZyYW1lYnVmZmVycywgbG9ja3Mgb3V0IHRpbGluZyBjaGFuZ2VzLiAqLwo+IC0JdW5zaWduZWQg aW50IGZyYW1lYnVmZmVyX3JlZmVyZW5jZXM7Cj4gLQo+IC0JLyoqIFJlY29yZCBvZiBhZGRyZXNz IGJpdCAxNyBvZiBlYWNoIHBhZ2UgYXQgbGFzdCB1bmJpbmQuICovCj4gLQl1bnNpZ25lZCBsb25n ICpiaXRfMTc7Cj4gLQo+IC0JdW5pb24gewo+IC0JCXN0cnVjdCBpOTE1X2dlbV91c2VycHRyIHsK PiAtCQkJdWludHB0cl90IHB0cjsKPiAtCj4gLQkJCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07 Cj4gLQkJCXN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1tdV9vYmplY3Q7Cj4gLQkJCXN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yazsKPiAtCQl9IHVzZXJwdHI7Cj4gLQo+IC0JCXVuc2lnbmVkIGxvbmcg c2NyYXRjaDsKPiAtCj4gLQkJdm9pZCAqZ3Z0X2luZm87Cj4gLQl9Owo+IC0KPiAtCS8qKiBmb3Ig cGh5cyBhbGxvY2F0ZWQgb2JqZWN0cyAqLwo+IC0Jc3RydWN0IGRybV9kbWFfaGFuZGxlICpwaHlz X2hhbmRsZTsKPiAtCj4gLQlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0IF9fYnVpbHRpbl9yZXN2 Owo+IC19Owo+IC0KPiAtc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq Cj4gLXRvX2ludGVsX2JvKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKQo+IC17Cj4gLQkvKiBB c3NlcnQgdGhhdCB0b19pbnRlbF9ibyhOVUxMKSA9PSBOVUxMICovCj4gLQlCVUlMRF9CVUdfT04o b2Zmc2V0b2Yoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsIGJhc2UpKTsKPiAtCj4gLQlyZXR1 cm4gY29udGFpbmVyX29mKGdlbSwgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsIGJhc2UpOwo+ IC19Cj4gKyNpbmNsdWRlICJnZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgiCj4gIAo+ICBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqaTkxNV9nZW1fb2JqZWN0X2FsbG9jKHZvaWQpOwo+ICB2 b2lkIGk5MTVfZ2VtX29iamVjdF9mcmVlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop OwoKLS0gCkphbmkgTmlrdWxhLCBJbnRlbCBPcGVuIFNvdXJjZSBHcmFwaGljcyBDZW50ZXIKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4