From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [RFC PATCH 04/42] drm/i915: introduce intel_memory_region Date: Tue, 26 Feb 2019 13:00:28 +0000 Message-ID: <0b6d3fca-a482-9b57-35fe-fd1ce03196b9@linux.intel.com> References: <20190214145740.14521-1-matthew.auld@intel.com> <20190214145740.14521-5-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2E6D889EB7 for ; Tue, 26 Feb 2019 13:00:31 +0000 (UTC) In-Reply-To: <20190214145740.14521-5-matthew.auld@intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matthew Auld , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKSnVzdCBzb21lIHF1aWNrIGNvbW1lbnRzLCBub3QgYSBmdWxsIHJldmlldy4gUG9zc2li bHkgYSByZXBlYXQgb2Ygc29tZSAKc2FtZSBjb21tZW50cyBmcm9tIHdheSBiYWNrLCBub3Qgc3Vy ZS4KCk9uIDE0LzAyLzIwMTkgMTQ6NTcsIE1hdHRoZXcgQXVsZCB3cm90ZToKPiBTdXBwb3J0IG1l bW9yeSByZWdpb25zLCBhcyBkZWZpbmVkIGJ5IGEgZ2l2ZW4gKHN0YXJ0LCBlbmQpLCBhbmQgYWxs b3cKPiBjcmVhdGluZyBHRU0gb2JqZWN0cyB3aGljaCBhcmUgYmFja2VkIGJ5IHNhaWQgcmVnaW9u Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgQXVsZCA8bWF0dGhldy5hdWxkQGludGVsLmNv bT4KPiBTaWduZWQtb2ZmLWJ5OiBBYmRpZWwgSmFudWxndWUgPGFiZGllbC5qYW51bGd1ZUBsaW51 eC5pbnRlbC5jb20+Cj4gQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4 LmludGVsLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAg ICAgICAgICAgICB8ICAgMSArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAg ICAgICAgICAgICAgfCAgIDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAg ICAgICAgICAgICAgIHwgICAxICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29i amVjdC5oICAgICAgICB8ICAgOSArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1v cnlfcmVnaW9uLmMgICAgfCAyMzIgKysrKysrKysrKysrKysrKysrCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmggICAgfCAxMjYgKysrKysrKysrKwo+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyAgIHwgIDgxICsrKysrKwo+ ICAgLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmggIHwgICAxICsK PiAgIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jICB8IDEyOCAr KysrKysrKysrCj4gICAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2Uu YyAgfCAgIDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfcmVnaW9u LmMgIHwgIDcxICsrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tf cmVnaW9uLmggIHwgIDM1ICsrKwo+ICAgMTIgZmlsZXMgY2hhbmdlZCwgNjg3IGluc2VydGlvbnMo KykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1v cnlfcmVnaW9uLmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9tZW1vcnlfcmVnaW9uLmgKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCj4gICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfcmVnaW9uLmMKPiAgIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19yZWdp b24uaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggZTVjZTgxM2QxOTM2Li45NmJlMjY0 ZmEzODIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC04OCw2ICs4OCw3IEBAIGk5MTUt eSArPSBcCj4gICAJICBpbnRlbF9lbmdpbmVfY3MubyBcCj4gICAJICBpbnRlbF9oYW5nY2hlY2su byBcCj4gICAJICBpbnRlbF9scmMubyBcCj4gKwkgIGludGVsX21lbW9yeV9yZWdpb24ubyBcCj4g ICAJICBpbnRlbF9tb2NzLm8gXAo+ICAgCSAgaW50ZWxfcmluZ2J1ZmZlci5vIFwKPiAgIAkgIGlu dGVsX3VuY29yZS5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCAxN2ZlOTQyZWFh ZmEuLjBiZWE3ZDg4OTI4NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC03Miw2 ICs3Miw3IEBACj4gICAjaW5jbHVkZSAiaW50ZWxfd29wY20uaCIKPiAgICNpbmNsdWRlICJpbnRl bF93b3JrYXJvdW5kcy5oIgo+ICAgI2luY2x1ZGUgImludGVsX3VjLmgiCj4gKyNpbmNsdWRlICJp bnRlbF9tZW1vcnlfcmVnaW9uLmgiCj4gICAKPiAgICNpbmNsdWRlICJpOTE1X2dlbS5oIgo+ICAg I2luY2x1ZGUgImk5MTVfZ2VtX2NvbnRleHQuaCIKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBp bmRleCBiNDIxYmM3YTJlMjYuLjkyNzY4YWIyOTRhNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYwo+IEBAIC01NzA2LDQgKzU3MDYsNSBAQCBpbnQgaTkxNV9nZW1fb2JqZWN0X2F0dGFjaF9w aHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGludCBhbGlnbikKPiAgICNpbmNs dWRlICJzZWxmdGVzdHMvaTkxNV9nZW1fb2JqZWN0LmMiCj4gICAjaW5jbHVkZSAic2VsZnRlc3Rz L2k5MTVfZ2VtX2NvaGVyZW5jeS5jIgo+ICAgI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X2dlbS5j Igo+ICsjaW5jbHVkZSAic2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdpb24uYyIKPiAgICNlbmRp Zgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3QuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCj4gaW5kZXggZmFiMDQwMzMx Y2RiLi5hYzUyZjYxZThhZDEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fb2JqZWN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmpl Y3QuaAo+IEBAIC04Nyw2ICs4NywxNSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7Cj4g ICAKPiAgIAljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgKm9wczsKPiAgIAo+ ICsJLyoqCj4gKwkgKiBNZW1vcnkgcmVnaW9uIGZvciB0aGlzIG9iamVjdC4KPiArCSAqLwo+ICsJ c3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbW9yeV9yZWdpb247Cj4gKwkvKioKPiArCSAq IExpc3Qgb2YgbWVtb3J5IHJlZ2lvbiBibG9ja3MgYWxsb2NhdGVkIGZvciB0aGlzIG9iamVjdC4K PiArCSAqLwo+ICsJc3RydWN0IGxpc3RfaGVhZCBibG9ja3M7Cj4gKwo+ICAgCXN0cnVjdCB7Cj4g ICAJCS8qKgo+ICAgCQkgKiBAdm1hLmxvY2s6IHByb3RlY3QgdGhlIGxpc3QvdHJlZSBvZiB2bWFz Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24u YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi40MDVkNmQ1MTE5NGYKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5j Cj4gQEAgLTAsMCArMSwyMzIgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwg Q29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ ICsjaW5jbHVkZSAiaW50ZWxfbWVtb3J5X3JlZ2lvbi5oIgo+ICsjaW5jbHVkZSAiaTkxNV9kcnYu aCIKPiArCj4gK3N0YXRpYyB2b2lkCj4gK21lbW9yeV9yZWdpb25fZnJlZV9wYWdlcyhzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkgc3RydWN0IHNnX3RhYmxlICpwYWdlcykK PiArewo+ICsKPiArCXN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayAqYmxvY2ssICpvbjsKPiAr Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPm1lbW9yeV9yZWdpb24tPm1tX2xvY2spOwo+ ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShibG9jaywgb24sICZvYmotPmJsb2Nrcywg bGluaykgewo+ICsJCWxpc3RfZGVsX2luaXQoJmJsb2NrLT5saW5rKTsKPiArCQlpOTE1X2dlbV9i dWRkeV9mcmVlKCZvYmotPm1lbW9yeV9yZWdpb24tPm1tLCBibG9jayk7Cj4gKwl9Cj4gKwo+ICsJ c2dfZnJlZV90YWJsZShwYWdlcyk7Cj4gKwlrZnJlZShwYWdlcyk7Cj4gK30KPiArCj4gK3ZvaWQK PiAraTkxNV9tZW1vcnlfcmVnaW9uX3B1dF9wYWdlc19idWRkeShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+ICsJCQkJICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcykKPiArewo+ICsJ bXV0ZXhfbG9jaygmb2JqLT5tZW1vcnlfcmVnaW9uLT5tbV9sb2NrKTsKPiArCW1lbW9yeV9yZWdp b25fZnJlZV9wYWdlcyhvYmosIHBhZ2VzKTsKPiArCW11dGV4X3VubG9jaygmb2JqLT5tZW1vcnlf cmVnaW9uLT5tbV9sb2NrKTsKPiArCj4gKwlvYmotPm1tLmRpcnR5ID0gZmFsc2U7Cj4gK30KPiAr Cj4gK2ludAo+ICtpOTE1X21lbW9yeV9yZWdpb25fZ2V0X3BhZ2VzX2J1ZGR5KHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9u ICptZW0gPSBvYmotPm1lbW9yeV9yZWdpb247Cj4gKwlyZXNvdXJjZV9zaXplX3Qgc2l6ZSA9IG9i ai0+YmFzZS5zaXplOwo+ICsJc3RydWN0IHNnX3RhYmxlICpzdDsKPiArCXN0cnVjdCBzY2F0dGVy bGlzdCAqc2c7Cj4gKwl1bnNpZ25lZCBpbnQgc2dfcGFnZV9zaXplczsKPiArCXVuc2lnbmVkIGxv bmcgbl9wYWdlczsKPiArCj4gKwlHRU1fQlVHX09OKCFJU19BTElHTkVEKHNpemUsIG1lbS0+bW0u bWluX3NpemUpKTsKPiArCUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoJm9iai0+YmxvY2tzKSk7Cj4g Kwo+ICsJc3QgPSBrbWFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghc3Qp Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbl9wYWdlcyA9IGRpdjY0X3U2NChzaXplLCBt ZW0tPm1tLm1pbl9zaXplKTsKPiArCj4gKwlpZiAoc2dfYWxsb2NfdGFibGUoc3QsIG5fcGFnZXMs IEdGUF9LRVJORUwpKSB7CgpzZ19hbGxvY190YWJsZSB0YWtlcyB1bnNpZ25lZCBpbnQgZm9yIG5l bnRzIHNvIGlmIHlvdSBuZWVkIHRvIGRvIHRoaXMgCmNhbGN1bGF0aW9uIGluIHU2NCB5b3Ugc2hv dWxkIHByb2JhYmx5IGFkZCBzb21lIGNoZWNrcyBhZ2FpbnN0IG92ZXJmbG93LiAKQWx0aG91Z2gg aXQgd291bGQgcHJvYmFibHkgYmUgc2ltcGxlciBhbmQgbW9yZSByb2J1c3QgdG8gaGF2ZSBpdCBh cyAKdW5zaWduZWQgaW50IGFuZCBqdXN0IGNoZWNrIGJlZm9yZSBoYW5kIHRoZSBhbGxvY2F0aW9u IHJlcXVlc3QgaXMgbm90IApleGNlZWRpbmcgdGhlIHNnX3RhYmxlIEFQSSBjYXBhYmlsaXRpZXMu Cgo+ICsJCWtmcmVlKHN0KTsKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiArCj4gKwlzZyA9 IHN0LT5zZ2w7Cj4gKwlzdC0+bmVudHMgPSAwOwo+ICsJc2dfcGFnZV9zaXplcyA9IDA7Cj4gKwo+ ICsJbXV0ZXhfbG9jaygmbWVtLT5tbV9sb2NrKTsKPiArCj4gKwlkbyB7Cj4gKwkJc3RydWN0IGk5 MTVfZ2VtX2J1ZGR5X2Jsb2NrICpibG9jazsKPiArCQl1bnNpZ25lZCBpbnQgb3JkZXI7Cj4gKwkJ dTY0IGJsb2NrX3NpemU7Cj4gKwkJdTY0IG9mZnNldDsKPiArCj4gKwkJb3JkZXIgPSBmbHMobl9w YWdlcykgLSAxOwo+ICsJCUdFTV9CVUdfT04ob3JkZXIgPiBtZW0tPm1tLm1heF9vcmRlcik7Cj4g Kwo+ICsJCWRvIHsKPiArCQkJYmxvY2sgPSBpOTE1X2dlbV9idWRkeV9hbGxvYygmbWVtLT5tbSwg b3JkZXIpOwo+ICsJCQlpZiAoIUlTX0VSUihibG9jaykpCj4gKwkJCQlicmVhazsKPiArCj4gKwkJ CS8qIFhYWDogc29tZSBraW5kIG9mIGV2aWN0aW9uIHBhc3MsIGxvY2FsIHRvIHRoZSBkZXZpY2Ug Ki8KPiArCQkJaWYgKCFvcmRlci0tKQoKSXMgaXQgaW50ZXJlc3RpbmcgdG8gcHJvcGFnYXRlIHRo ZSBtb3JlIHNwZWNpZmljIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgCmk5MTVfZ2VtX2J1ZGR5X2Fs bG9jPwoKPiArCQkJCWdvdG8gZXJyX2ZyZWVfYmxvY2tzOwo+ICsJCX0gd2hpbGUgKDEpOwo+ICsK PiArCQluX3BhZ2VzIC09IDEgPDwgb3JkZXI7Cj4gKwo+ICsJCUlOSVRfTElTVF9IRUFEKCZibG9j ay0+bGluayk7Cj4gKwkJbGlzdF9hZGQoJmJsb2NrLT5saW5rLCAmb2JqLT5ibG9ja3MpOwo+ICsK PiArCQlibG9ja19zaXplID0gaTkxNV9nZW1fYnVkZHlfYmxvY2tfc2l6ZSgmbWVtLT5tbSwgYmxv Y2spOwo+ICsJCW9mZnNldCA9IGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrX29mZnNldChibG9jayk7Cj4g Kwo+ICsJCXNnX2RtYV9hZGRyZXNzKHNnKSA9IG1lbS0+cmVnaW9uLnN0YXJ0ICsgb2Zmc2V0Owo+ ICsJCXNnX2RtYV9sZW4oc2cpID0gYmxvY2tfc2l6ZTsKPiArCj4gKwkJc2ctPmxlbmd0aCA9IGJs b2NrX3NpemU7CgpzZy0+ZG1hX2xlbiBhbmQgc2ctPmxlbmd0aCBhcmUgdW5zaWduZWQgaW50IHNv IGFnYWluIEkgdGhpbmsgYmxvY2tfc2l6ZSAKY2FuIGZvbGxvdyB3aXRoIHNvbWUgbGltaXQgY2hl Y2tpbmcgZWFybGllciBvbi4KCj4gKwkJc2dfcGFnZV9zaXplcyB8PSBibG9ja19zaXplOwo+ICsJ CXN0LT5uZW50cysrOwoKSWYgYWRkcmVzcyBvZiB0aGlzIGJsb2NrIGlzIGNvbnNlY3V0aXZlIGJs b2NrIHRvIHRoZSBwcmV2aW91cyBvbmUgeW91IApjYW4sIGNvbnNpZGVyaW5nIHRoZSBvdmVyZmxv dyBvZiBzZy0+ZG1hX2xlbiBhbmQgc2ctPmxlbmd0aCBmaWVsZHMsIApjb2FsZXNjZSB0aGUgdHdv IGJ5IGp1c3QgYnVtcGluZyB0aGUgbGVuZ3RocyBhbmQgbm90IGluY3JlbWVudGluZyB0aGUgCnN0 LT5uZW50cysrLiBUaGF0IHdvdWxkIG1ha2UgdGhlIGk5MTVfc2dfdHJpbSBiZWxvdyBtb3JlIGVm ZmVjdGl2ZS4gVG8gCmJlIGZhaXIgSSBoYXZlIG5vIGlkZWEgaG93IGxpa2VseSBhcmUgeW91IHRv IGdldCBjb25zZWN1dGl2ZSBibG9ja3Mgd2l0aCAKdGhlIGJ1ZGR5IGFsbG9jYXRvciBzbyB5b3Vy IGRlY2lzaW9uLgoKUmVnYXJkcywKClR2cnRrbwoKPiArCj4gKwkJaWYgKCFuX3BhZ2VzKSB7Cj4g KwkJCXNnX21hcmtfZW5kKHNnKTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlzZyA9IF9f c2dfbmV4dChzZyk7Cj4gKwl9IHdoaWxlICgxKTsKPiArCj4gKwltdXRleF91bmxvY2soJm1lbS0+ bW1fbG9jayk7Cj4gKwo+ICsJaTkxNV9zZ190cmltKHN0KTsKPiArCj4gKwlfX2k5MTVfZ2VtX29i amVjdF9zZXRfcGFnZXMob2JqLCBzdCwgc2dfcGFnZV9zaXplcyk7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gKwo+ICtlcnJfZnJlZV9ibG9ja3M6Cj4gKwltZW1vcnlfcmVnaW9uX2ZyZWVfcGFnZXMob2Jq LCBzdCk7Cj4gKwltdXRleF91bmxvY2soJm1lbS0+bW1fbG9jayk7Cj4gKwlyZXR1cm4gLUVOT1NQ QzsKPiArfQo+ICsKPiAraW50IGk5MTVfbWVtb3J5X3JlZ2lvbl9pbml0X2J1ZGR5KHN0cnVjdCBp bnRlbF9tZW1vcnlfcmVnaW9uICptZW0pCj4gK3sKPiArCXJldHVybiBpOTE1X2dlbV9idWRkeV9p bml0KCZtZW0tPm1tLCByZXNvdXJjZV9zaXplKCZtZW0tPnJlZ2lvbiksCj4gKwkJCQkgICBtZW0t Pm1pbl9wYWdlX3NpemUpOwo+ICt9Cj4gKwo+ICt2b2lkIGk5MTVfbWVtb3J5X3JlZ2lvbl9yZWxl YXNlX2J1ZGR5KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0pCj4gK3sKPiArCWk5MTVf Z2VtX2J1ZGR5X2ZpbmkoJm1lbS0+bW0pOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqCj4gK2k5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKHN0cnVjdCBpbnRlbF9t ZW1vcnlfcmVnaW9uICptZW0sCj4gKwkJCSAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLAo+ICsJ CQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmo7Cj4gKwo+ICsJaWYgKCFtZW0pCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RF Vik7Cj4gKwo+ICsJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIG1lbS0+bWluX3BhZ2Vfc2l6ZSk7Cj4g Kwo+ICsJR0VNX0JVR19PTighc2l6ZSk7Cj4gKwlHRU1fQlVHX09OKCFJU19BTElHTkVEKHNpemUs IEk5MTVfR1RUX01JTl9BTElHTk1FTlQpKTsKPiArCj4gKwlpZiAoc2l6ZSA+PiBQQUdFX1NISUZU ID4gSU5UX01BWCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOwo+ICsKPiArCWlmIChvdmVy Zmxvd3NfdHlwZShzaXplLCBvYmotPmJhc2Uuc2l6ZSkpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUUy QklHKTsKPiArCj4gKwlvYmogPSBtZW0tPm9wcy0+b2JqZWN0X2NyZWF0ZShtZW0sIHNpemUsIGZs YWdzKTsKPiArCWlmIChJU19FUlIob2JqKSkKPiArCQlyZXR1cm4gb2JqOwo+ICsKPiArCUlOSVRf TElTVF9IRUFEKCZvYmotPmJsb2Nrcyk7Cj4gKwlvYmotPm1lbW9yeV9yZWdpb24gPSBtZW07Cj4g Kwo+ICsJaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9jb2hlcmVuY3kob2JqLCBvYmotPmNhY2hl X2xldmVsKTsKPiArCj4gKwlyZXR1cm4gb2JqOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfbWVt b3J5X3JlZ2lvbiAqCj4gK2ludGVsX21lbW9yeV9yZWdpb25fY3JlYXRlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1LAo+ICsJCQkgICByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCj4gKwkJCSAg IHJlc291cmNlX3NpemVfdCBzaXplLAo+ICsJCQkgICByZXNvdXJjZV9zaXplX3QgbWluX3BhZ2Vf c2l6ZSwKPiArCQkJICAgcmVzb3VyY2Vfc2l6ZV90IGlvX3N0YXJ0LAo+ICsJCQkgICBjb25zdCBz dHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbl9vcHMgKm9wcykKPiArewo+ICsJc3RydWN0IGludGVs X21lbW9yeV9yZWdpb24gKm1lbTsKPiArCWludCBlcnI7Cj4gKwo+ICsJbWVtID0ga3phbGxvYyhz aXplb2YoKm1lbSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFtZW0pCj4gKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7Cj4gKwo+ICsJbWVtLT5pOTE1ID0gaTkxNTsKPiArCW1lbS0+cmVnaW9uID0g KHN0cnVjdCByZXNvdXJjZSlERUZJTkVfUkVTX01FTShzdGFydCwgc2l6ZSk7Cj4gKwltZW0tPmlv X3N0YXJ0ID0gaW9fc3RhcnQ7Cj4gKwltZW0tPm1pbl9wYWdlX3NpemUgPSBtaW5fcGFnZV9zaXpl Owo+ICsJbWVtLT5vcHMgPSBvcHM7Cj4gKwo+ICsJbXV0ZXhfaW5pdCgmbWVtLT5tbV9sb2NrKTsK PiArCj4gKwlpZiAob3BzLT5pbml0KSB7Cj4gKwkJZXJyID0gb3BzLT5pbml0KG1lbSk7Cj4gKwkJ aWYgKGVycikgewo+ICsJCQlrZnJlZShtZW0pOwo+ICsJCQltZW0gPSBFUlJfUFRSKGVycik7Cj4g KwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiBtZW07Cj4gK30KPiArCj4gK3ZvaWQKPiAraW50ZWxf bWVtb3J5X3JlZ2lvbl9kZXN0cm95KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0pCj4g K3sKPiArCWlmIChtZW0tPm9wcy0+cmVsZWFzZSkKPiArCQltZW0tPm9wcy0+cmVsZWFzZShtZW0p Owo+ICsKPiArCWtmcmVlKG1lbSk7Cj4gK30KPiArCj4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19E Uk1fSTkxNV9TRUxGVEVTVCkKPiArI2luY2x1ZGUgInNlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5jIgo+ ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5 X3JlZ2lvbi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjZkOGE5NTRjYTc1ZQo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlf cmVnaW9uLmgKPiBAQCAtMCwwICsxLDEyNiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAx OCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGlu ZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4g KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsg Ki8KPiArCj4gKyNpZm5kZWYgX19JTlRFTF9NRU1PUllfUkVHSU9OX0hfXwo+ICsjZGVmaW5lIF9f SU5URUxfTUVNT1JZX1JFR0lPTl9IX18KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4K PiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby1tYXBwaW5n Lmg+Cj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9nZW1fYnVkZHkuaCIKPiArCj4gK3N0cnVjdCBkcm1f aTkxNV9wcml2YXRlOwo+ICtzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKPiArc3RydWN0IGlu dGVsX21lbW9yeV9yZWdpb247Cj4gK3N0cnVjdCBzZ190YWJsZTsKPiArCj4gKy8qKgo+ICsgKiAg QmFzZSBtZW1vcnkgdHlwZQo+ICsgKi8KPiArZW51bSBpbnRlbF9tZW1vcnlfdHlwZSB7Cj4gKwlJ TlRFTF9TTUVNID0gMCwKPiArCUlOVEVMX0xNRU0sCj4gKwlJTlRFTF9TVE9MRU4sCj4gK307Cj4g Kwo+ICtlbnVtIGludGVsX3JlZ2lvbl9pZCB7Cj4gKwlJTlRFTF9NRU1PUllfU01FTSA9IDAsCj4g KwlJTlRFTF9NRU1PUllfTE1FTSwKPiArCUlOVEVMX01FTU9SWV9TVE9MRU4sCj4gKwlJTlRFTF9N RU1PUllfVUtOT1dOLCAvKiBTaG91bGQgYmUgbGFzdCAqLwo+ICt9Owo+ICsKPiArI2RlZmluZSBS RUdJT05fU01FTSAgICAgQklUKElOVEVMX01FTU9SWV9TTUVNKQo+ICsjZGVmaW5lIFJFR0lPTl9M TUVNICAgICBCSVQoSU5URUxfTUVNT1JZX0xNRU0pCj4gKyNkZWZpbmUgUkVHSU9OX1NUT0xFTiAg IEJJVChJTlRFTF9NRU1PUllfU1RPTEVOKQo+ICsKPiArI2RlZmluZSBJTlRFTF9NRU1PUllfVFlQ RV9TSElGVCAxNgo+ICsKPiArI2RlZmluZSBNRU1PUllfVFlQRV9GUk9NX1JFR0lPTihyKSAoaWxv ZzIociA+PiBJTlRFTF9NRU1PUllfVFlQRV9TSElGVCkpCj4gKyNkZWZpbmUgTUVNT1JZX0lOU1RB TkNFX0ZST01fUkVHSU9OKHIpIChpbG9nMihyICYgMHhmZmZmKSkKPiArCj4gKy8qKgo+ICsgKiBN ZW1vcnkgcmVnaW9ucyBlbmNvZGVkIGFzIHR5cGUgfCBpbnN0YW5jZQo+ICsgKi8KPiArc3RhdGlj IGNvbnN0IHUzMiBpbnRlbF9yZWdpb25fbWFwW10gPSB7Cj4gKwlbSU5URUxfTUVNT1JZX1NNRU1d ID0gQklUKElOVEVMX1NNRU0gKyBJTlRFTF9NRU1PUllfVFlQRV9TSElGVCkgfCBCSVQoMCksCj4g KwlbSU5URUxfTUVNT1JZX0xNRU1dID0gQklUKElOVEVMX0xNRU0gKyBJTlRFTF9NRU1PUllfVFlQ RV9TSElGVCkgfCBCSVQoMCksCj4gKwlbSU5URUxfTUVNT1JZX1NUT0xFTl0gPSBCSVQoSU5URUxf U1RPTEVOICsgSU5URUxfTUVNT1JZX1RZUEVfU0hJRlQpIHwgQklUKDApLAo+ICt9Owo+ICsKPiAr c3RydWN0IGludGVsX21lbW9yeV9yZWdpb25fb3BzIHsKPiArCXVuc2lnbmVkIGludCBmbGFnczsK PiArCj4gKwlpbnQgKCppbml0KShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqKTsKPiArCXZv aWQgKCpyZWxlYXNlKShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqKTsKPiArCj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqCj4gKwkoKm9iamVjdF9jcmVhdGUpKHN0cnVjdCBpbnRl bF9tZW1vcnlfcmVnaW9uICosCj4gKwkJCSByZXNvdXJjZV9zaXplX3QsCj4gKwkJCSB1bnNpZ25l ZCBpbnQpOwo+ICt9Owo+ICsKPiArc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gKwo+ICsJY29uc3Qgc3RydWN0IGludGVsX21l bW9yeV9yZWdpb25fb3BzICpvcHM7Cj4gKwo+ICsJc3RydWN0IGlvX21hcHBpbmcgaW9tYXA7Cj4g KwlzdHJ1Y3QgcmVzb3VyY2UgcmVnaW9uOwo+ICsKPiArCXN0cnVjdCBpOTE1X2dlbV9idWRkeV9t bSBtbTsKPiArCXN0cnVjdCBtdXRleCBtbV9sb2NrOwo+ICsKPiArCXJlc291cmNlX3NpemVfdCBp b19zdGFydDsKPiArCXJlc291cmNlX3NpemVfdCBtaW5fcGFnZV9zaXplOwo+ICsKPiArCXVuc2ln bmVkIGludCB0eXBlOwo+ICsJdW5zaWduZWQgaW50IGluc3RhbmNlOwo+ICsJdW5zaWduZWQgaW50 IGlkOwo+ICt9Owo+ICsKPiAraW50IGk5MTVfbWVtb3J5X3JlZ2lvbl9pbml0X2J1ZGR5KHN0cnVj dCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0pOwo+ICt2b2lkIGk5MTVfbWVtb3J5X3JlZ2lvbl9y ZWxlYXNlX2J1ZGR5KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0pOwo+ICsKPiAraW50 IGk5MTVfbWVtb3J5X3JlZ2lvbl9nZXRfcGFnZXNfYnVkZHkoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaik7Cj4gK3ZvaWQgaTkxNV9tZW1vcnlfcmVnaW9uX3B1dF9wYWdlc19idWRkeShz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkJCXN0cnVjdCBzZ190YWJsZSAq cGFnZXMpOwo+ICsKPiArc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKgo+ICtpbnRlbF9tZW1v cnlfcmVnaW9uX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiArCQkJICAg cmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAo+ICsJCQkgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKPiAr CQkJICAgcmVzb3VyY2Vfc2l6ZV90IG1pbl9wYWdlX3NpemUsCj4gKwkJCSAgIHJlc291cmNlX3Np emVfdCBpb19zdGFydCwKPiArCQkJICAgY29uc3Qgc3RydWN0IGludGVsX21lbW9yeV9yZWdpb25f b3BzICpvcHMpOwo+ICt2b2lkCj4gK2ludGVsX21lbW9yeV9yZWdpb25fZGVzdHJveShzdHJ1Y3Qg aW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKTsKPiArCj4gK3N0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICoKPiAraTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24oc3RydWN0IGludGVsX21lbW9y eV9yZWdpb24gKm1lbSwKPiArCQkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCj4gKwkJCSAg ICAgIHVuc2lnbmVkIGludCBmbGFncyk7Cj4gKwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMKPiBpbmRleCBiNmQ4NDkzOTU5MmIuLmIwYzhi NDk1NWYxNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVn ZV9wYWdlcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFn ZXMuYwo+IEBAIC00NTgsNiArNDU4LDg2IEBAIHN0YXRpYyBpbnQgaWd0X21vY2tfZXhoYXVzdF9k ZXZpY2Vfc3VwcG9ydGVkX3BhZ2VzKHZvaWQgKmFyZykKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+ ICAgCj4gKwo+ICtzdGF0aWMgaW50IGlndF9tb2NrX21lbW9yeV9yZWdpb25faHVnZV9wYWdlcyh2 b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9IGFyZzsKPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcHBndHQtPnZtLmk5MTU7Cj4gKwl1bnNp Z25lZCBsb25nIHN1cHBvcnRlZCA9IElOVEVMX0lORk8oaTkxNSktPnBhZ2Vfc2l6ZXM7Cj4gKwlz dHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iajsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJaW50IGJpdDsKPiArCWlu dCBlcnIgPSAwOwo+ICsKPiArCW1lbSA9IG1vY2tfcmVnaW9uX2NyZWF0ZShpOTE1LCAwLCBTWl8y RywKPiArCQkJCSBJOTE1X0dUVF9QQUdFX1NJWkVfNEssIDApOwo+ICsJaWYgKElTX0VSUihtZW0p KSB7Cj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gY3JlYXRlIG1lbW9yeSByZWdpb25cbiIpOwo+ICsJ CXJldHVybiBQVFJfRVJSKG1lbSk7Cj4gKwl9Cj4gKwo+ICsJZm9yX2VhY2hfc2V0X2JpdChiaXQs ICZzdXBwb3J0ZWQsIGlsb2cyKEk5MTVfR1RUX01BWF9QQUdFX1NJWkUpICsgMSkgewo+ICsJCXVu c2lnbmVkIGludCBwYWdlX3NpemUgPSBCSVQoYml0KTsKPiArCQlyZXNvdXJjZV9zaXplX3QgcGh5 czsKPiArCj4gKwkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24obWVtLCBwYWdl X3NpemUsIDApOwo+ICsJCWlmIChJU19FUlIob2JqKSkgewo+ICsJCQllcnIgPSBQVFJfRVJSKG9i aik7Cj4gKwkJCWdvdG8gb3V0X2Rlc3Ryb3lfZGV2aWNlOwo+ICsJCX0KPiArCj4gKwkJcHJfaW5m bygibWVtb3J5IHJlZ2lvbiBzdGFydCglcGEpXG4iLAo+ICsJCSAgICAgICAgJm9iai0+bWVtb3J5 X3JlZ2lvbi0+cmVnaW9uLnN0YXJ0KTsKPiArCQlwcl9pbmZvKCJjcmVhdGluZyBvYmplY3QsIHNp emU9JXhcbiIsIHBhZ2Vfc2l6ZSk7Cj4gKwo+ICsJCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKG9i aiwgJnBwZ3R0LT52bSwgTlVMTCk7Cj4gKwkJaWYgKElTX0VSUih2bWEpKSB7Cj4gKwkJCWVyciA9 IFBUUl9FUlIodm1hKTsKPiArCQkJZ290byBvdXRfcHV0Owo+ICsJCX0KPiArCj4gKwkJZXJyID0g aTkxNV92bWFfcGluKHZtYSwgMCwgMCwgUElOX1VTRVIpOwo+ICsJCWlmIChlcnIpCj4gKwkJCWdv dG8gb3V0X2Nsb3NlOwo+ICsKPiArCQlwaHlzID0gaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRk cmVzcyhvYmosIDApOwo+ICsJCWlmICghSVNfQUxJR05FRChwaHlzLCBwYWdlX3NpemUpKSB7Cj4g KwkJCXByX2VycigibWVtb3J5IHJlZ2lvbiBtaXNhbGlnbmVkKCVwYSlcbiIsICZwaHlzKTsKPiAr CQkJZXJyID0gLUVJTlZBTDsKPiArCQkJZ290byBvdXRfY2xvc2U7Cj4gKwkJfQo+ICsKPiArCQlp ZiAodm1hLT5wYWdlX3NpemVzLmd0dCAhPSBwYWdlX3NpemUpIHsKPiArCQkJcHJfZXJyKCJwYWdl X3NpemVzLmd0dD0ldSwgZXhwZWN0ZWQ9JXVcbiIsCj4gKwkJCSAgICAgICB2bWEtPnBhZ2Vfc2l6 ZXMuZ3R0LCBwYWdlX3NpemUpOwo+ICsJCQllcnIgPSAtRUlOVkFMOwo+ICsJCQlnb3RvIG91dF91 bnBpbjsKPiArCQl9Cj4gKwo+ICsJCWk5MTVfdm1hX3VucGluKHZtYSk7Cj4gKwkJaTkxNV92bWFf Y2xvc2Uodm1hKTsKPiArCj4gKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJfQo+ICsK PiArCWdvdG8gb3V0X2Rlc3Ryb3lfZGV2aWNlOwo+ICsKPiArb3V0X3VucGluOgo+ICsJaTkxNV92 bWFfdW5waW4odm1hKTsKPiArb3V0X2Nsb3NlOgo+ICsJaTkxNV92bWFfY2xvc2Uodm1hKTsKPiAr b3V0X3B1dDoKPiArCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiArb3V0X2Rlc3Ryb3lfZGV2 aWNlOgo+ICsJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCWk5MTVf Z2VtX2RyYWluX2ZyZWVkX29iamVjdHMoaTkxNSk7Cj4gKwltdXRleF9sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiArCWludGVsX21lbW9yeV9yZWdpb25fZGVzdHJveShtZW0pOwo+ICsK PiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gICBzdGF0aWMgaW50IGlndF9tb2NrX3BwZ3R0X21p c2FsaWduZWRfZG1hKHZvaWQgKmFyZykKPiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9od19wcGd0dCAq cHBndHQgPSBhcmc7Cj4gQEAgLTE2OTcsNiArMTc3Nyw3IEBAIGludCBpOTE1X2dlbV9odWdlX3Bh Z2VfbW9ja19zZWxmdGVzdHModm9pZCkKPiAgIHsKPiAgIAlzdGF0aWMgY29uc3Qgc3RydWN0IGk5 MTVfc3VidGVzdCB0ZXN0c1tdID0gewo+ICAgCQlTVUJURVNUKGlndF9tb2NrX2V4aGF1c3RfZGV2 aWNlX3N1cHBvcnRlZF9wYWdlcyksCj4gKwkJU1VCVEVTVChpZ3RfbW9ja19tZW1vcnlfcmVnaW9u X2h1Z2VfcGFnZXMpLAo+ICAgCQlTVUJURVNUKGlndF9tb2NrX3BwZ3R0X21pc2FsaWduZWRfZG1h KSwKPiAgIAkJU1VCVEVTVChpZ3RfbW9ja19wcGd0dF9odWdlX2ZpbGwpLAo+ICAgCQlTVUJURVNU KGlndF9tb2NrX3BwZ3R0XzY0SyksCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCj4gaW5kZXggOTg0ZTA3ZWQ2NWU1Li4zZTM0 ZWUyMjU1ZGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5 MTVfbW9ja19zZWxmdGVzdHMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKPiBAQCAtMjUsMyArMjUsNCBAQCBzZWxmdGVzdChndHQs IGk5MTVfZ2VtX2d0dF9tb2NrX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KGh1Z2VwYWdlcywgaTkx NV9nZW1faHVnZV9wYWdlX21vY2tfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3QoY29udGV4dHMsIGk5 MTVfZ2VtX2NvbnRleHRfbW9ja19zZWxmdGVzdHMpCj4gICBzZWxmdGVzdChidWRkeSwgaTkxNV9n ZW1fYnVkZHlfbW9ja19zZWxmdGVzdHMpCj4gK3NlbGZ0ZXN0KG1lbW9yeV9yZWdpb24sIGludGVs X21lbW9yeV9yZWdpb25fbW9ja19zZWxmdGVzdHMpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjJiOGQyODIxNmQ4Nwo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lv bi5jCj4gQEAgLTAsMCArMSwxMjggQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTggSW50 ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiAr ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4g Kwo+ICsjaW5jbHVkZSAiLi4vaTkxNV9zZWxmdGVzdC5oIgo+ICsKPiArI2luY2x1ZGUgIm1vY2tf Z2VtX2RldmljZS5oIgo+ICsjaW5jbHVkZSAibW9ja19jb250ZXh0LmgiCj4gKyNpbmNsdWRlICJt b2NrX2RybS5oIgo+ICsKPiArc3RhdGljIHZvaWQgY2xvc2Vfb2JqZWN0cyhzdHJ1Y3QgbGlzdF9o ZWFkICpvYmplY3RzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCAq b247Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgb24sIG9iamVjdHMsIHN0 X2xpbmspIHsKPiArCQlpZiAoaTkxNV9nZW1fb2JqZWN0X2hhc19waW5uZWRfcGFnZXMob2JqKSkK PiArCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7Cj4gKwkJLyogTm8gcG9sbHV0 aW5nIHRoZSBtZW1vcnkgcmVnaW9uIGJldHdlZW4gdGVzdHMgKi8KPiArCQlfX2k5MTVfZ2VtX29i amVjdF9wdXRfcGFnZXMob2JqLCBJOTE1X01NX05PUk1BTCk7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0 X3B1dChvYmopOwo+ICsJCWxpc3RfZGVsKCZvYmotPnN0X2xpbmspOwo+ICsJfQo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGlndF9tb2NrX2ZpbGwodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50 ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtID0gYXJnOwo+ICsJcmVzb3VyY2Vfc2l6ZV90IHRvdGFsID0g cmVzb3VyY2Vfc2l6ZSgmbWVtLT5yZWdpb24pOwo+ICsJcmVzb3VyY2Vfc2l6ZV90IHBhZ2Vfc2l6 ZTsKPiArCXJlc291cmNlX3NpemVfdCByZW07Cj4gKwl1bnNpZ25lZCBsb25nIG1heF9wYWdlczsK PiArCXVuc2lnbmVkIGxvbmcgcGFnZV9udW07Cj4gKwlMSVNUX0hFQUQob2JqZWN0cyk7Cj4gKwlp bnQgZXJyID0gMDsKPiArCj4gKwlwYWdlX3NpemUgPSBtZW0tPm1tLm1pbl9zaXplOwo+ICsJbWF4 X3BhZ2VzID0gdG90YWwgLyBwYWdlX3NpemU7Cj4gKwlyZW0gPSB0b3RhbDsKPiArCj4gKwlmb3Jf ZWFjaF9wcmltZV9udW1iZXJfZnJvbShwYWdlX251bSwgMSwgbWF4X3BhZ2VzKSB7Cj4gKwkJcmVz b3VyY2Vfc2l6ZV90IHNpemUgPSBwYWdlX251bSAqIHBhZ2Vfc2l6ZTsKPiArCQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsKPiArCQlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3Jl YXRlX3JlZ2lvbihtZW0sIHNpemUsIDApOwo+ICsJCWlmIChJU19FUlIob2JqKSkgewo+ICsJCQll cnIgPSBQVFJfRVJSKG9iaik7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJZXJyID0gaTkx NV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopOwo+ICsJCWlmIChlcnIpIHsKPiArCQkJaTkxNV9n ZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWxpc3RfYWRk KCZvYmotPnN0X2xpbmssICZvYmplY3RzKTsKPiArCQlyZW0gLT0gc2l6ZTsKPiArCX0KPiArCj4g KwlpZiAoZXJyID09IC1FTk9NRU0pCj4gKwkJZXJyID0gMDsKPiArCWlmIChlcnIgPT0gLUVOT1NQ Qykgewo+ICsJCWlmIChwYWdlX251bSAqIHBhZ2Vfc2l6ZSA8PSByZW0pIHsKPiArCQkJcHJfZXJy KCJpZ3RfbW9ja19maWxsIGZhaWxlZCwgc3BhY2Ugc3RpbGwgbGVmdCBpbiByZWdpb25cbiIpOwo+ ICsJCQllcnIgPSAtRUlOVkFMOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWVyciA9IDA7Cj4gKwkJfQo+ ICsJfQo+ICsKPiArCWNsb3NlX29iamVjdHMoJm9iamVjdHMpOwo+ICsKPiArCXJldHVybiBlcnI7 Cj4gK30KPiArCj4gK2ludCBpbnRlbF9tZW1vcnlfcmVnaW9uX21vY2tfc2VsZnRlc3RzKHZvaWQp Cj4gK3sKPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7Cj4g KwkJU1VCVEVTVChpZ3RfbW9ja19maWxsKSwKPiArCX07Cj4gKwlzdHJ1Y3QgaW50ZWxfbWVtb3J5 X3JlZ2lvbiAqbWVtOwo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gKwlpbnQg ZXJyOwo+ICsKPiArCWk5MTUgPSBtb2NrX2dlbV9kZXZpY2UoKTsKPiArCWlmICghaTkxNSkKPiAr CQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwltZW0gPSBtb2NrX3JlZ2lvbl9jcmVhdGUoaTkxNSwg MCwgU1pfMkcsCj4gKwkJCQkgSTkxNV9HVFRfUEFHRV9TSVpFXzRLLCAwKTsKPiArCWlmIChJU19F UlIobWVtKSkgewo+ICsJCXByX2VycigiZmFpbGVkIHRvIGNyZWF0ZSBtZW1vcnkgcmVnaW9uXG4i KTsKPiArCQllcnIgPSBQVFJfRVJSKG1lbSk7Cj4gKwkJZ290byBvdXRfdW5yZWY7Cj4gKwl9Cj4g Kwo+ICsJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwllcnIgPSBpOTE1 X3N1YnRlc3RzKHRlc3RzLCBtZW0pOwo+ICsJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0 X211dGV4KTsKPiArCj4gKwlpOTE1X2dlbV9kcmFpbl9mcmVlZF9vYmplY3RzKGk5MTUpOwo+ICsJ aW50ZWxfbWVtb3J5X3JlZ2lvbl9kZXN0cm95KG1lbSk7Cj4gKwo+ICtvdXRfdW5yZWY6Cj4gKwlk cm1fZGV2X3B1dCgmaTkxNS0+ZHJtKTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYwo+IGluZGV4 IDg3NmY0ZTZkYWRhYy4uZjg5MDFjZDEyMTgwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYwo+IEBAIC0zMiw2ICszMiw3IEBACj4g ICAjaW5jbHVkZSAibW9ja19nZW1fb2JqZWN0LmgiCj4gICAjaW5jbHVkZSAibW9ja19ndHQuaCIK PiAgICNpbmNsdWRlICJtb2NrX3VuY29yZS5oIgo+ICsjaW5jbHVkZSAibW9ja19yZWdpb24uaCIK PiAgIAo+ICAgdm9pZCBtb2NrX2RldmljZV9mbHVzaChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSkKPiAgIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L21vY2tfcmVnaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19yZWdp b24uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4yYzgzNzEx Zjc4MGQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL21vY2tfcmVnaW9uLmMKPiBAQCAtMCwwICsxLDcxIEBACj4gKy8qCj4gKyAqIENvcHlyaWdo dCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4g KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUu Cj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4g KyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgIm1vY2tfcmVnaW9uLmgiCj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIG1vY2tfcmVnaW9uX29ial9vcHMg PSB7Cj4gKwkuZ2V0X3BhZ2VzID0gaTkxNV9tZW1vcnlfcmVnaW9uX2dldF9wYWdlc19idWRkeSwK PiArCS5wdXRfcGFnZXMgPSBpOTE1X21lbW9yeV9yZWdpb25fcHV0X3BhZ2VzX2J1ZGR5LAo+ICt9 Owo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKPiArbW9ja19vYmpl Y3RfY3JlYXRlKHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCj4gKwkJICAgcmVzb3Vy Y2Vfc2l6ZV90IHNpemUsCj4gKwkJICAgdW5zaWduZWQgaW50IGZsYWdzKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IG1lbS0+aTkxNTsKPiArCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwo+ICsJaWYgKHNpemUgPiBCSVQobWVtLT5tbS5tYXhfb3Jk ZXIpICogbWVtLT5tbS5taW5fc2l6ZSkKPiArCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOwo+ICsK PiArCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9hbGxvYyhpOTE1KTsKPiArCWlmICghb2JqKQo+ICsJ CXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCWRybV9nZW1fcHJpdmF0ZV9vYmplY3Rf aW5pdCgmaTkxNS0+ZHJtLCAmb2JqLT5iYXNlLCBzaXplKTsKPiArCWk5MTVfZ2VtX29iamVjdF9p bml0KG9iaiwgJm1vY2tfcmVnaW9uX29ial9vcHMpOwo+ICsKPiArCW9iai0+cmVhZF9kb21haW5z ID0gSTkxNV9HRU1fRE9NQUlOX0NQVSB8IEk5MTVfR0VNX0RPTUFJTl9HVFQ7Cj4gKwlvYmotPmNh Y2hlX2xldmVsID0gSEFTX0xMQyhpOTE1KSA/IEk5MTVfQ0FDSEVfTExDIDogSTkxNV9DQUNIRV9O T05FOwo+ICsKPiArCXJldHVybiBvYmo7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aW50ZWxfbWVtb3J5X3JlZ2lvbl9vcHMgbW9ja19yZWdpb25fb3BzID0gewo+ICsJLmluaXQgPSBp OTE1X21lbW9yeV9yZWdpb25faW5pdF9idWRkeSwKPiArCS5yZWxlYXNlID0gaTkxNV9tZW1vcnlf cmVnaW9uX3JlbGVhc2VfYnVkZHksCj4gKwkub2JqZWN0X2NyZWF0ZSA9IG1vY2tfb2JqZWN0X2Ny ZWF0ZSwKPiArfTsKPiArCj4gK3N0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICoKPiArbW9ja19y ZWdpb25fY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICsJCSAgIHJlc291 cmNlX3NpemVfdCBzdGFydCwKPiArCQkgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKPiArCQkgICBy ZXNvdXJjZV9zaXplX3QgbWluX3BhZ2Vfc2l6ZSwKPiArCQkgICByZXNvdXJjZV9zaXplX3QgaW9f c3RhcnQpCj4gK3sKPiArCXJldHVybiBpbnRlbF9tZW1vcnlfcmVnaW9uX2NyZWF0ZShpOTE1LCBz dGFydCwgc2l6ZSwgbWluX3BhZ2Vfc2l6ZSwKPiArCQkJCQkgIGlvX3N0YXJ0LCAmbW9ja19yZWdp b25fb3BzKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvbW9ja19yZWdpb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3Jl Z2lvbi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjQ3NzE4 MzEzZmE1OAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvbW9ja19yZWdpb24uaAo+IEBAIC0wLDAgKzEsMzUgQEAKPiArLyoKPiArICogQ29weXJp Z2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4g KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBp biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2Fy ZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4g KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4K PiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIF9fTU9DS19SRUdJT05fSAo+ICsjZGVmaW5lIF9f TU9DS19SRUdJT05fSAo+ICsKPiArc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKgo+ICttb2Nr X3JlZ2lvbl9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gKwkJICAgcmVz b3VyY2Vfc2l6ZV90IHN0YXJ0LAo+ICsJCSAgIHJlc291cmNlX3NpemVfdCBzaXplLAo+ICsJCSAg IHJlc291cmNlX3NpemVfdCBtaW5fcGFnZV9zaXplLAo+ICsJCSAgIHJlc291cmNlX3NpemVfdCBp b19zdGFydCk7Cj4gKwo+ICsjZW5kaWYgLyogIV9fTU9DS19SRUdJT05fSCAqLwo+IApfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=