From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 2/3] drm/ttm: always keep BOs on the LRU Date: Wed, 25 Sep 2019 14:10:27 +0200 Message-ID: <29539c40-1ea4-b60a-791f-385fb3468072@gmail.com> References: <20190925105530.2261-1-christian.koenig@amd.com> <20190925105530.2261-2-christian.koenig@amd.com> <0826046a-d57a-eb1e-f125-2c94223214b4@shipmail.org> Reply-To: christian.koenig@amd.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by gabe.freedesktop.org (Postfix) with ESMTPS id B2C5589C84 for ; Wed, 25 Sep 2019 12:10:30 +0000 (UTC) Received: by mail-wm1-x342.google.com with SMTP id r19so3661265wmh.2 for ; Wed, 25 Sep 2019 05:10:30 -0700 (PDT) In-Reply-To: <0826046a-d57a-eb1e-f125-2c94223214b4@shipmail.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: =?UTF-8?Q?Thomas_Hellstr=c3=b6m_=28VMware=29?= , kraxel@redhat.com, daniel@ffwll.ch, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QW0gMjUuMDkuMTkgdW0gMTQ6MDYgc2NocmllYiBUaG9tYXMgSGVsbHN0csO2bSAoVk13YXJlKToK PiBPbiA5LzI1LzE5IDEyOjU1IFBNLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+PiBUaGlzIGFs bG93cyBibG9ja2luZyBmb3IgQk9zIHRvIGJlY29tZSBhdmFpbGFibGUKPj4gaW4gdGhlIG1lbW9y eSBtYW5hZ2VtZW50Lgo+Pgo+PiBBbWRncHUgaXMgZG9pbmcgdGhpcyBmb3IgcXVpdGUgYSB3aGls ZSBub3cgZHVyaW5nIENTLiBOb3cKPj4gYXBwbHkgdGhlIG5ldyBiZWhhdmlvciB0byBhbGwgZHJp dmVycyB1c2luZyBUVE0uCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNo cmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KPgo+IEdvdCB0byB0ZXN0IHRoaXMgdG8gc2VlIHRoYXQg dGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zLgo+Cj4gVGhlcmUgYXJlIHNvbWUgdWdseSBjYXNlcyBp biB0aGUgdm13Z2Z4IGRyaXZlciAoY29kZWQgYmVmb3JlIHdlIGNvdWxkIAo+IGNyZWF0ZSBib3Mg aW4gdGhlIHJlc2VydmVkIHN0YXRlKSB0aGF0IHJlbGllcyBvbiBjcmVhdGluZyBhIGJvIGFzIAo+ IE5PX0VWSUNUIHRvIG1ha2Ugc3VyZSBhIGZvbGxvd2luZyB0cnlyZXNlcnZlIHdpbGwgYWx3YXlz IHN1Y2NlZWQuIFNvIAo+IGhvdyBhcmUgTk9fRVZJQ1QgYm9zIGhhbmRsZWQgYWZ0ZXIgdGhlIGJl bG93IGNoYW5nZXM/IFRha2VuIG9mZiB0aGUgCj4gbHJ1IG9yIGp1c3QgYXZvaWRlZCB3aGVuIHdh bGtpbmcgdGhlIGxydT8KClRoZXkgYXJlIG5ldmVyIGFkZGVkIHRvIHRoZSBMUlUgaW4gdGhlIGZp cnN0IHBsYWNlLCB0aGUgTk9fRVZJQ1QgZmxhZyBpcyAKc3RpbGwgY2hlY2tlZCBkdXJpbmcgQk8g aW5pdC4KCj4KPiBBbHNvLCBkb2VzIHRoaXMgbWVhbiB3ZSBjYW4gaW4gdGhlb3J5IHN0YXJ0IHVz aW5nIHRoZSBkcm1fbW1fc2NhbigpIAo+IGludGVyZmFjZSBmb3IgVlJBTSBldmljdGlvbnMsIHJl bHlpbmcgb24gdGhlIHd3X211dGV4ZXMgdG8gcmVzb2x2ZSAKPiBjb250ZW50aW9uPwoKSXQncyB0 aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIHRoaXMsIHdlIHN0aWxsIG5lZWQgc29tZSByYXRoZXIgZnVu a3kgCnd3X211dGV4IGRhbmNlIHRvIGNvbXBsZXRlbHkgZ2V0IHRoaXMgd29ya2luZy4KCkNocmlz dGlhbi4KCj4KPiAvVGhvbWFzCj4KPgo+PiAtLS0KPj4gwqAgLi4uL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfYW1ka2ZkX2dwdXZtLmPCoCB8wqAgOSArKy0tCj4+IMKgIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jwqDCoMKgwqDCoMKgwqAgfMKgIDIgKy0KPj4gwqAgZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzYS5jwqDCoMKgwqDCoMKgIHzCoCAyICst Cj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uY8KgwqDCoMKgwqDC oCB8wqAgNCArLQo+PiDCoCAuLi4vZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1 X2RtLmMgfMKgIDIgKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfcmVsZWFzZS5jwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCA0ICstCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9yYWRl b24vcmFkZW9uX2dlbS5jwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDIgKy0KPj4gwqAgZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmPCoMKgwqDCoMKgwqDCoCB8wqAgMiArLQo+ PiDCoCBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB8IDQ4ICsrKysrLS0tLS0tLS0tLS0tLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJt L3R0bS90dG1fZXhlY2J1Zl91dGlsLmPCoMKgwqDCoMKgwqDCoCB8IDI1ICsrLS0tLS0tLS0KPj4g wqAgZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuY8KgwqDCoMKgwqAgfMKg IDMgKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdmFsaWRhdGlvbi5owqDC oMKgIHzCoCAyICstCj4+IMKgIGluY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmjCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMjQgLS0tLS0tLS0tLQo+PiDCoCBpbmNsdWRlL2Ry bS90dG0vdHRtX2JvX2RyaXZlci5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDIwICsr LS0tLS0tCj4+IMKgIGluY2x1ZGUvZHJtL3R0bS90dG1fZXhlY2J1Zl91dGlsLmjCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHzCoCAyICstCj4+IMKgIDE1IGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlv bnMoKyksIDExOCBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkX2dwdXZtLmMKPj4gaW5kZXggYjliYjM1ZDE2OTllLi5h ZDAxYzc0MWNhYWYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9hbWRrZmRfZ3B1dm0uYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfYW1ka2ZkX2dwdXZtLmMKPj4gQEAgLTU4Niw3ICs1ODYsNyBAQCBzdGF0aWMgaW50IHJl c2VydmVfYm9fYW5kX3ZtKHN0cnVjdCBrZ2RfbWVtICptZW0sCj4+IMKgwqDCoMKgwqAgYW1kZ3B1 X3ZtX2dldF9wZF9ibyh2bSwgJmN0eC0+bGlzdCwgJmN0eC0+dm1fcGRbMF0pOwo+PiDCoCDCoMKg wqDCoMKgIHJldCA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJmN0eC0+dGlja2V0LCAmY3R4LT5s aXN0LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmYWxzZSwg JmN0eC0+ZHVwbGljYXRlcywgdHJ1ZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGZhbHNlLCAmY3R4LT5kdXBsaWNhdGVzKTsKPj4gwqDCoMKgwqDCoCBpZiAo IXJldCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+cmVzZXJ2ZWQgPSB0cnVlOwo+PiDCoMKg wqDCoMKgIGVsc2Ugewo+PiBAQCAtNjU5LDcgKzY1OSw3IEBAIHN0YXRpYyBpbnQgcmVzZXJ2ZV9i b19hbmRfY29uZF92bXMoc3RydWN0IGtnZF9tZW0gCj4+ICptZW0sCj4+IMKgwqDCoMKgwqAgfQo+ PiDCoCDCoMKgwqDCoMKgIHJldCA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJmN0eC0+dGlja2V0 LCAmY3R4LT5saXN0LAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBmYWxzZSwgJmN0eC0+ZHVwbGljYXRlcywgdHJ1ZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZhbHNlLCAmY3R4LT5kdXBsaWNhdGVzKTsKPj4gwqDCoMKg wqDCoCBpZiAoIXJldCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+cmVzZXJ2ZWQgPSB0cnVl Owo+PiDCoMKgwqDCoMKgIGVsc2UKPj4gQEAgLTE3OTYsOCArMTc5Niw3IEBAIHN0YXRpYyBpbnQg dmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCAKPj4gYW1ka2ZkX3Byb2Nlc3NfaW5m byAqcHJvY2Vzc19pbmZvKQo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgwqDCoMKgwqDCoCAvKiBSZXNl cnZlIGFsbCBCT3MgYW5kIHBhZ2UgdGFibGVzIGZvciB2YWxpZGF0aW9uICovCj4+IC3CoMKgwqAg cmV0ID0gdHRtX2V1X3Jlc2VydmVfYnVmZmVycygmdGlja2V0LCAmcmVzdl9saXN0LCBmYWxzZSwg Cj4+ICZkdXBsaWNhdGVzLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB0cnVlKTsKPj4gK8KgwqDCoCByZXQgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZ0aWNr ZXQsICZyZXN2X2xpc3QsIGZhbHNlLCAKPj4gJmR1cGxpY2F0ZXMpOwo+PiDCoMKgwqDCoMKgIFdB Uk4oIWxpc3RfZW1wdHkoJmR1cGxpY2F0ZXMpLCAiRHVwbGljYXRlcyBzaG91bGQgYmUgZW1wdHki KTsKPj4gwqDCoMKgwqDCoCBpZiAocmV0KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRf ZnJlZTsKPj4gQEAgLTE5OTUsNyArMTk5NCw3IEBAIGludCAKPj4gYW1kZ3B1X2FtZGtmZF9ncHV2 bV9yZXN0b3JlX3Byb2Nlc3NfYm9zKHZvaWQgKmluZm8sIHN0cnVjdCBkbWFfZmVuY2UgCj4+ICoq ZWYpCj4+IMKgwqDCoMKgwqAgfQo+PiDCoCDCoMKgwqDCoMKgIHJldCA9IHR0bV9ldV9yZXNlcnZl X2J1ZmZlcnMoJmN0eC50aWNrZXQsICZjdHgubGlzdCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZmFsc2UsICZkdXBsaWNhdGVfc2F2ZSwgdHJ1ZSk7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZhbHNlLCAmZHVwbGljYXRl X3NhdmUpOwo+PiDCoMKgwqDCoMKgIGlmIChyZXQpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHBy X2RlYnVnKCJNZW1vcnkgZXZpY3Rpb246IFRUTSBSZXNlcnZlIEZhaWxlZC4gVHJ5IGFnYWluXG4i KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gdHRtX3Jlc2VydmVfZmFpbDsKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jIAo+PiBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jCj4+IGluZGV4IDk1ZWM5NjVmY2MyZC4u ODJmMjM5YWM0MDUwIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfY3MuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3Mu Ywo+PiBAQCAtNjUwLDcgKzY1MCw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Mo c3RydWN0IAo+PiBhbWRncHVfY3NfcGFyc2VyICpwLAo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgwqDC oMKgwqDCoCByID0gdHRtX2V1X3Jlc2VydmVfYnVmZmVycygmcC0+dGlja2V0LCAmcC0+dmFsaWRh dGVkLCB0cnVlLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZkdXBs aWNhdGVzLCBmYWxzZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JmR1cGxpY2F0ZXMpOwo+PiDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShyICE9IDApKSB7Cj4+IMKg wqDCoMKgwqDCoMKgwqDCoCBpZiAociAhPSAtRVJFU1RBUlRTWVMpCj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIERSTV9FUlJPUigidHRtX2V1X3Jlc2VydmVfYnVmZmVycyBmYWlsZWQuXG4i KTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jc2Eu YyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3NhLmMKPj4gaW5kZXgg NjA1ZjgzMDQ2MDM5Li5iMTYwOGQ0NzUwOGYgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9jc2EuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfY3NhLmMKPj4gQEAgLTgwLDcgKzgwLDcgQEAgaW50IGFtZGdwdV9tYXBfc3Rh dGljX2NzYShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAKPj4gKmFkZXYsIHN0cnVjdCBhbWRncHVfdm0g KnZtLAo+PiDCoMKgwqDCoMKgIGxpc3RfYWRkKCZjc2FfdHYuaGVhZCwgJmxpc3QpOwo+PiDCoMKg wqDCoMKgIGFtZGdwdV92bV9nZXRfcGRfYm8odm0sICZsaXN0LCAmcGQpOwo+PiDCoCAtwqDCoMKg IHIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZ0aWNrZXQsICZsaXN0LCB0cnVlLCBOVUxMLCBm YWxzZSk7Cj4+ICvCoMKgwqAgciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnRpY2tldCwgJmxp c3QsIHRydWUsIE5VTEwpOwo+PiDCoMKgwqDCoMKgIGlmIChyKSB7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBEUk1fRVJST1IoImZhaWxlZCB0byByZXNlcnZlIENTQSxQRCBCT3M6IGVycj0lZFxuIiwg cik7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcjsKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKPj4gaW5kZXggYjI1YTU5YzRiZWM2Li5jYmZiM2U4NGYz NTIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0u Ywo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKPj4gQEAg LTE3NSw3ICsxNzUsNyBAQCB2b2lkIGFtZGdwdV9nZW1fb2JqZWN0X2Nsb3NlKHN0cnVjdCAKPj4g ZHJtX2dlbV9vYmplY3QgKm9iaiwKPj4gwqAgwqDCoMKgwqDCoCBhbWRncHVfdm1fZ2V0X3BkX2Jv KHZtLCAmbGlzdCwgJnZtX3BkKTsKPj4gwqAgLcKgwqDCoCByID0gdHRtX2V1X3Jlc2VydmVfYnVm ZmVycygmdGlja2V0LCAmbGlzdCwgZmFsc2UsICZkdXBsaWNhdGVzLCAKPj4gZmFsc2UpOwo+PiAr wqDCoMKgIHIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZ0aWNrZXQsICZsaXN0LCBmYWxzZSwg JmR1cGxpY2F0ZXMpOwo+PiDCoMKgwqDCoMKgIGlmIChyKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBkZXZfZXJyKGFkZXYtPmRldiwgImxlYWtpbmcgYm8gdmEgYmVjYXVzZSAiCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICJ3ZSBmYWlsIHRvIHJlc2VydmUgYm8gKCVkKVxuIiwgcik7Cj4+ IEBAIC02MTEsNyArNjExLDcgQEAgaW50IGFtZGdwdV9nZW1fdmFfaW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgCj4+IHZvaWQgKmRhdGEsCj4+IMKgIMKgwqDCoMKgwqAgYW1kZ3B1X3ZtX2dl dF9wZF9ibygmZnByaXYtPnZtLCAmbGlzdCwgJnZtX3BkKTsKPj4gwqAgLcKgwqDCoCByID0gdHRt X2V1X3Jlc2VydmVfYnVmZmVycygmdGlja2V0LCAmbGlzdCwgdHJ1ZSwgJmR1cGxpY2F0ZXMsIAo+ PiBmYWxzZSk7Cj4+ICvCoMKgwqAgciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnRpY2tldCwg Jmxpc3QsIHRydWUsICZkdXBsaWNhdGVzKTsKPj4gwqDCoMKgwqDCoCBpZiAocikKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIGdvdG8gZXJyb3JfdW5yZWY7Cj4+IMKgIGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jIAo+PiBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKPj4gaW5kZXggNWRmMmVl MWUxMGQ4Li43NjAwNzhiOTkyNWIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYwo+PiBAQCAtNDQzOSw3ICs0NDM5LDcgQEAg c3RhdGljIGludCBkbV9wbGFuZV9oZWxwZXJfcHJlcGFyZV9mYihzdHJ1Y3QgCj4+IGRybV9wbGFu ZSAqcGxhbmUsCj4+IMKgwqDCoMKgwqAgdHYubnVtX3NoYXJlZCA9IDE7Cj4+IMKgwqDCoMKgwqAg bGlzdF9hZGQoJnR2LmhlYWQsICZsaXN0KTsKPj4gwqAgLcKgwqDCoCByID0gdHRtX2V1X3Jlc2Vy dmVfYnVmZmVycygmdGlja2V0LCAmbGlzdCwgZmFsc2UsIE5VTEwsIHRydWUpOwo+PiArwqDCoMKg IHIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZ0aWNrZXQsICZsaXN0LCBmYWxzZSwgTlVMTCk7 Cj4+IMKgwqDCoMKgwqAgaWYgKHIpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoYWRl di0+ZGV2LCAiZmFpbCB0byByZXNlcnZlIGJvICglZClcbiIsIHIpOwo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIHI7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcXhsL3F4bF9y ZWxlYXNlLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfcmVsZWFzZS5jCj4+IGluZGV4 IGFhN2EyODc5NTY0NS4uNzFmMWI1MWExMzUwIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vcXhsL3F4bF9yZWxlYXNlLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3F4bC9xeGxfcmVs ZWFzZS5jCj4+IEBAIC0yNjAsNyArMjYwLDcgQEAgaW50IHF4bF9yZWxlYXNlX3Jlc2VydmVfbGlz dChzdHJ1Y3QgcXhsX3JlbGVhc2UgCj4+ICpyZWxlYXNlLCBib29sIG5vX2ludHIpCj4+IMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gwqAgwqDCoMKgwqDCoCByZXQgPSB0dG1fZXVfcmVz ZXJ2ZV9idWZmZXJzKCZyZWxlYXNlLT50aWNrZXQsICZyZWxlYXNlLT5ib3MsCj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICFub19pbnRyLCBOVUxMLCB0cnVlKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIW5vX2ludHIsIE5V TEwpOwo+PiDCoMKgwqDCoMKgIGlmIChyZXQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g cmV0Owo+PiDCoCBAQCAtNDU5LDcgKzQ1OSw3IEBAIHZvaWQgcXhsX3JlbGVhc2VfZmVuY2VfYnVm ZmVyX29iamVjdHMoc3RydWN0IAo+PiBxeGxfcmVsZWFzZSAqcmVsZWFzZSkKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIGJvID0gZW50cnktPmJvOwo+PiDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX3Jl c3ZfYWRkX3NoYXJlZF9mZW5jZShiby0+YmFzZS5yZXN2LCAmcmVsZWFzZS0+YmFzZSk7Cj4+IC3C oMKgwqDCoMKgwqDCoCB0dG1fYm9fYWRkX3RvX2xydShibyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB0 dG1fYm9fbW92ZV90b19scnVfdGFpbChibywgTlVMTCk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBk bWFfcmVzdl91bmxvY2soYm8tPmJhc2UucmVzdik7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDC oMKgIHNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9u L3JhZGVvbl9nZW0uYwo+PiBpbmRleCBjNDhjMmZiMzU0NTYuLjg3OWVhYzY3Y2RkNyAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2VtLmMKPj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2VtLmMKPj4gQEAgLTU2NCw3ICs1NjQsNyBAQCBz dGF0aWMgdm9pZCByYWRlb25fZ2VtX3ZhX3VwZGF0ZV92bShzdHJ1Y3QgCj4+IHJhZGVvbl9kZXZp Y2UgKnJkZXYsCj4+IMKgwqDCoMKgwqAgaWYgKCF2bV9ib3MpCj4+IMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm47Cj4+IMKgIC3CoMKgwqAgciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnRpY2tl dCwgJmxpc3QsIHRydWUsIE5VTEwsIHRydWUpOwo+PiArwqDCoMKgIHIgPSB0dG1fZXVfcmVzZXJ2 ZV9idWZmZXJzKCZ0aWNrZXQsICZsaXN0LCB0cnVlLCBOVUxMKTsKPj4gwqDCoMKgwqDCoCBpZiAo cikKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyb3JfZnJlZTsKPj4gwqAgZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jIAo+PiBiL2RyaXZlcnMv Z3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCj4+IGluZGV4IDY1M2ZkNzkzN2IzOS4uYTk0 ZDgyN2JhOTc2IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9v YmplY3QuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwo+ PiBAQCAtNTQyLDcgKzU0Miw3IEBAIGludCByYWRlb25fYm9fbGlzdF92YWxpZGF0ZShzdHJ1Y3Qg cmFkZW9uX2RldmljZSAKPj4gKnJkZXYsCj4+IMKgwqDCoMKgwqAgdTY0IGJ5dGVzX21vdmVkX3Ro cmVzaG9sZCA9IAo+PiByYWRlb25fYm9fZ2V0X3RocmVzaG9sZF9mb3JfbW92ZXMocmRldik7Cj4+ IMKgIMKgwqDCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmR1cGxpY2F0ZXMpOwo+PiAtwqDCoMKgIHIg PSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKHRpY2tldCwgaGVhZCwgdHJ1ZSwgJmR1cGxpY2F0ZXMs IHRydWUpOwo+PiArwqDCoMKgIHIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKHRpY2tldCwgaGVh ZCwgdHJ1ZSwgJmR1cGxpY2F0ZXMpOwo+PiDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShyICE9IDAp KSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcjsKPj4gwqDCoMKgwqDCoCB9Cj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jIGIvZHJpdmVycy9ncHUvZHJt L3R0bS90dG1fYm8uYwo+PiBpbmRleCAwMmYzMDFlMWZmMjkuLmFiOTk2N2I4NGUwYiAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwo+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vdHRtL3R0bV9iby5jCj4+IEBAIC0xOTIsMTggKzE5MiwxMiBAQCBzdGF0aWMgdm9pZCB0 dG1fYm9fYWRkX21lbV90b19scnUoc3RydWN0IAo+PiB0dG1fYnVmZmVyX29iamVjdCAqYm8sCj4+ IMKgwqDCoMKgwqAgfQo+PiDCoCB9Cj4+IMKgIC12b2lkIHR0bV9ib19hZGRfdG9fbHJ1KHN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCj4+IC17Cj4+IC3CoMKgwqAgdHRtX2JvX2FkZF9tZW1f dG9fbHJ1KGJvLCAmYm8tPm1lbSk7Cj4+IC19Cj4+IC1FWFBPUlRfU1lNQk9MKHR0bV9ib19hZGRf dG9fbHJ1KTsKPj4gLQo+PiDCoCBzdGF0aWMgdm9pZCB0dG1fYm9fcmVmX2J1ZyhzdHJ1Y3Qga3Jl ZiAqbGlzdF9rcmVmKQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgQlVHKCk7Cj4+IMKgIH0KPj4gwqAg LXZvaWQgdHRtX2JvX2RlbF9mcm9tX2xydShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQo+ PiArc3RhdGljIHZvaWQgdHRtX2JvX2RlbF9mcm9tX2xydShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3QgKmJvKQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYg PSBiby0+YmRldjsKPj4gwqDCoMKgwqDCoCBib29sIG5vdGlmeSA9IGZhbHNlOwo+PiBAQCAtMjIz LDE2ICsyMTcsNiBAQCB2b2lkIHR0bV9ib19kZWxfZnJvbV9scnUoc3RydWN0IAo+PiB0dG1fYnVm ZmVyX29iamVjdCAqYm8pCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBiZGV2LT5kcml2ZXItPmRlbF9m cm9tX2xydV9ub3RpZnkoYm8pOwo+PiDCoCB9Cj4+IMKgIC12b2lkIHR0bV9ib19kZWxfc3ViX2Zy b21fbHJ1KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCj4+IC17Cj4+IC3CoMKgwqAgc3Ry dWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiby0+YmRldi0+Z2xvYjsKPj4gLQo+PiAtwqDCoMKg IHNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+PiAtwqDCoMKgIHR0bV9ib19kZWxfZnJvbV9s cnUoYm8pOwo+PiAtwqDCoMKgIHNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7Cj4+IC19Cj4+ IC1FWFBPUlRfU1lNQk9MKHR0bV9ib19kZWxfc3ViX2Zyb21fbHJ1KTsKPj4gLQo+PiDCoCBzdGF0 aWMgdm9pZCB0dG1fYm9fYnVsa19tb3ZlX3NldF9wb3Moc3RydWN0IHR0bV9scnVfYnVsa19tb3Zl X3BvcyAKPj4gKnBvcywKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKPj4gwqAgewo+PiBAQCAtMjQ3LDcg KzIzMSw3IEBAIHZvaWQgdHRtX2JvX21vdmVfdG9fbHJ1X3RhaWwoc3RydWN0IAo+PiB0dG1fYnVm ZmVyX29iamVjdCAqYm8sCj4+IMKgwqDCoMKgwqAgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYm8tPmJh c2UucmVzdik7Cj4+IMKgIMKgwqDCoMKgwqAgdHRtX2JvX2RlbF9mcm9tX2xydShibyk7Cj4+IC3C oMKgwqAgdHRtX2JvX2FkZF90b19scnUoYm8pOwo+PiArwqDCoMKgIHR0bV9ib19hZGRfbWVtX3Rv X2xydShibywgJmJvLT5tZW0pOwo+PiDCoCDCoMKgwqDCoMKgIGlmIChidWxrICYmICEoYm8tPm1l bS5wbGFjZW1lbnQgJiBUVE1fUExfRkxBR19OT19FVklDVCkpIHsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIHN3aXRjaCAoYm8tPm1lbS5tZW1fdHlwZSkgewo+PiBAQCAtNTExLDcgKzQ5NSw3IEBAIHN0 YXRpYyB2b2lkIHR0bV9ib19jbGVhbnVwX3JlZnNfb3JfcXVldWUoc3RydWN0IAo+PiB0dG1fYnVm ZmVyX29iamVjdCAqYm8pCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoYm8tPm1lbS5wbGFjZW1lbnQgJiBUVE1fUExfRkxBR19OT19FVklDVCkgewo+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiby0+bWVtLnBsYWNlbWVudCAmPSB+VFRNX1BM X0ZMQUdfTk9fRVZJQ1Q7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHR0bV9ib19hZGRfdG9f bHJ1KGJvKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHRtX2JvX21vdmVfdG9fbHJ1X3Rh aWwoYm8sIE5VTEwpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoCDCoMKgwqDCoMKgwqDC oMKgwqAgZG1hX3Jlc3ZfdW5sb2NrKGJvLT5iYXNlLnJlc3YpOwo+PiBAQCAtODkyLDE3ICs4NzYs MTEgQEAgc3RhdGljIGludCB0dG1fbWVtX2V2aWN0X2ZpcnN0KHN0cnVjdCAKPj4gdHRtX2JvX2Rl dmljZSAqYmRldiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IMKgwqDCoMKg wqAgfQo+PiDCoCAtwqDCoMKgIHR0bV9ib19kZWxfZnJvbV9scnUoYm8pOwo+PiDCoMKgwqDCoMKg IHNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7Cj4+IMKgIMKgwqDCoMKgwqAgcmV0ID0gdHRt X2JvX2V2aWN0KGJvLCBjdHgpOwo+PiAtwqDCoMKgIGlmIChsb2NrZWQpIHsKPj4gK8KgwqDCoCBp ZiAobG9ja2VkKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdHRtX2JvX3VucmVzZXJ2ZShibyk7Cj4+ IC3CoMKgwqAgfSBlbHNlIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmZ2xvYi0+bHJ1 X2xvY2spOwo+PiAtwqDCoMKgwqDCoMKgwqAgdHRtX2JvX2FkZF90b19scnUoYm8pOwo+PiAtwqDC oMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKPj4gLcKgwqDCoCB9Cj4+ IMKgIMKgwqDCoMKgwqAga3JlZl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWxlYXNlX2xp c3QpOwo+PiDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IEBAIC0xMDY0LDEyICsxMDQyLDEwIEBA IHN0YXRpYyBpbnQgdHRtX2JvX21lbV9wbGFjZW1lbnQoc3RydWN0IAo+PiB0dG1fYnVmZmVyX29i amVjdCAqYm8sCj4+IMKgwqDCoMKgwqAgbWVtLT5tZW1fdHlwZSA9IG1lbV90eXBlOwo+PiDCoMKg wqDCoMKgIG1lbS0+cGxhY2VtZW50ID0gY3VyX2ZsYWdzOwo+PiDCoCAtwqDCoMKgIGlmIChiby0+ bWVtLm1lbV90eXBlIDwgbWVtX3R5cGUgJiYgIWxpc3RfZW1wdHkoJmJvLT5scnUpKSB7Cj4+IC3C oMKgwqDCoMKgwqDCoCBzcGluX2xvY2soJmJvLT5iZGV2LT5nbG9iLT5scnVfbG9jayk7Cj4+IC3C oMKgwqDCoMKgwqDCoCB0dG1fYm9fZGVsX2Zyb21fbHJ1KGJvKTsKPj4gLcKgwqDCoMKgwqDCoMKg IHR0bV9ib19hZGRfbWVtX3RvX2xydShibywgbWVtKTsKPj4gLcKgwqDCoMKgwqDCoMKgIHNwaW5f dW5sb2NrKCZiby0+YmRldi0+Z2xvYi0+bHJ1X2xvY2spOwo+PiAtwqDCoMKgIH0KPj4gK8KgwqDC oCBzcGluX2xvY2soJmJvLT5iZGV2LT5nbG9iLT5scnVfbG9jayk7Cj4+ICvCoMKgwqAgdHRtX2Jv X2RlbF9mcm9tX2xydShibyk7Cj4+ICvCoMKgwqAgdHRtX2JvX2FkZF9tZW1fdG9fbHJ1KGJvLCBt ZW0pOwo+PiArwqDCoMKgIHNwaW5fdW5sb2NrKCZiby0+YmRldi0+Z2xvYi0+bHJ1X2xvY2spOwo+ PiDCoCDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IEBAIC0xMzc1LDExICsxMzUxLDkg QEAgaW50IHR0bV9ib19pbml0X3Jlc2VydmVkKHN0cnVjdCB0dG1fYm9fZGV2aWNlIAo+PiAqYmRl diwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IMKgwqDCoMKgwqAgfQo+PiDC oCAtwqDCoMKgIGlmIChyZXN2ICYmICEoYm8tPm1lbS5wbGFjZW1lbnQgJiBUVE1fUExfRkxBR19O T19FVklDVCkpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmYmRldi0+Z2xvYi0+bHJ1 X2xvY2spOwo+PiAtwqDCoMKgwqDCoMKgwqAgdHRtX2JvX2FkZF90b19scnUoYm8pOwo+PiAtwqDC oMKgwqDCoMKgwqAgc3Bpbl91bmxvY2soJmJkZXYtPmdsb2ItPmxydV9sb2NrKTsKPj4gLcKgwqDC oCB9Cj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZiZGV2LT5nbG9iLT5scnVfbG9jayk7Cj4+ICvCoMKg wqAgdHRtX2JvX21vdmVfdG9fbHJ1X3RhaWwoYm8sIE5VTEwpOwo+PiArwqDCoMKgIHNwaW5fdW5s b2NrKCZiZGV2LT5nbG9iLT5scnVfbG9jayk7Cj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuIHJldDsK Pj4gwqAgfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fZXhlY2J1Zl91 dGlsLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fZXhlY2J1Zl91dGlsLmMKPj4gaW5k ZXggNzExNDhjODNjYzRmLi5iMDljMmM4Y2FmMTMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS90dG0vdHRtX2V4ZWNidWZfdXRpbC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0v dHRtX2V4ZWNidWZfdXRpbC5jCj4+IEBAIC0zMywxNiArMzMsNiBAQAo+PiDCoCAjaW5jbHVkZSA8 bGludXgvc2NoZWQuaD4KPj4gwqAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+PiDCoCAtc3Rh dGljIHZvaWQgdHRtX2V1X2RlbF9mcm9tX2xydV9sb2NrZWQoc3RydWN0IGxpc3RfaGVhZCAqbGlz dCkKPj4gLXsKPj4gLcKgwqDCoCBzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqZW50cnk7Cj4+ IC0KPj4gLcKgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBsaXN0LCBoZWFkKSB7Cj4+ IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gZW50cnktPmJv Owo+PiAtwqDCoMKgwqDCoMKgwqAgdHRtX2JvX2RlbF9mcm9tX2xydShibyk7Cj4+IC3CoMKgwqAg fQo+PiAtfQo+PiAtCj4+IMKgIHZvaWQgdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oc3RydWN0 IGRtYV9yZXN2X2N0eCAqdGlja2V0LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCj4+IMKgIHsKPj4gQEAgLTU5LDggKzQ5LDcgQEAg dm9pZCB0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbihzdHJ1Y3QgZG1hX3Jlc3ZfY3R4IAo+PiAq dGlja2V0LAo+PiDCoMKgwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGxpc3QsIGhl YWQpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8g PSBlbnRyeS0+Ym87Cj4+IMKgIC3CoMKgwqDCoMKgwqDCoCBpZiAobGlzdF9lbXB0eSgmYm8tPmxy dSkpCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHR0bV9ib19hZGRfdG9fbHJ1KGJvKTsKPj4g K8KgwqDCoMKgwqDCoMKgIHR0bV9ib19tb3ZlX3RvX2xydV90YWlsKGJvLCBOVUxMKTsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGlmICghdGlja2V0KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkbWFfcmVzdl91bmxvY2soYm8tPmJhc2UucmVzdik7Cj4+IMKgwqDCoMKgwqAgfQo+PiBAQCAt ODcsNyArNzYsNyBAQCBFWFBPUlRfU1lNQk9MKHR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKTsK Pj4gwqAgwqAgaW50IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoc3RydWN0IGRtYV9yZXN2X2N0eCAq dGlja2V0LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbGlzdF9o ZWFkICpsaXN0LCBib29sIGludHIsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCBsaXN0X2hlYWQgKmR1cHMsIGJvb2wgZGVsX2xydSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCAqZHVwcykKPj4gwqAgewo+PiDCoMKgwqDCoMKg IHN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICplbnRyeTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qg dHRtX2JvX2dsb2JhbCAqZ2xvYjsKPj4gQEAgLTE0MiwxMSArMTMxLDYgQEAgaW50IHR0bV9ldV9y ZXNlcnZlX2J1ZmZlcnMoc3RydWN0IGRtYV9yZXN2X2N0eCAKPj4gKnRpY2tldCwKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCB9Cj4+IMKgIC3CoMKgwqAgaWYgKGRlbF9scnUp IHsKPj4gLcKgwqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+PiAtwqDC oMKgwqDCoMKgwqAgdHRtX2V1X2RlbF9mcm9tX2xydV9sb2NrZWQobGlzdCk7Cj4+IC3CoMKgwqDC oMKgwqDCoCBzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+PiAtwqDCoMKgIH0KPj4gwqDC oMKgwqDCoCByZXR1cm4gMDsKPj4gwqAgwqAgZXJyb3I6Cj4+IEBAIC0xODYsMTAgKzE3MCw3IEBA IHZvaWQgdHRtX2V1X2ZlbmNlX2J1ZmZlcl9vYmplY3RzKHN0cnVjdCAKPj4gZG1hX3Jlc3ZfY3R4 ICp0aWNrZXQsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9yZXN2X2FkZF9zaGFy ZWRfZmVuY2UoYm8tPmJhc2UucmVzdiwgZmVuY2UpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZWxz ZQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfcmVzdl9hZGRfZXhjbF9mZW5jZShi by0+YmFzZS5yZXN2LCBmZW5jZSk7Cj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAobGlzdF9lbXB0eSgm Ym8tPmxydSkpCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHR0bV9ib19hZGRfdG9fbHJ1KGJv KTsKPj4gLcKgwqDCoMKgwqDCoMKgIGVsc2UKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHRt X2JvX21vdmVfdG9fbHJ1X3RhaWwoYm8sIE5VTEwpOwo+PiArwqDCoMKgwqDCoMKgwqAgdHRtX2Jv X21vdmVfdG9fbHJ1X3RhaWwoYm8sIE5VTEwpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCF0 aWNrZXQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9yZXN2X3VubG9jayhiby0+ YmFzZS5yZXN2KTsKPj4gwqDCoMKgwqDCoCB9Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X3Jlc291cmNlLmMKPj4gaW5kZXggMmQ3YzVhZDI1MzU5Li4xZDUzYTY5ODE5ZTUgMTAw NjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMKPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYwo+PiBAQCAtNDY0 LDggKzQ2NCw3IEBAIHZtd19yZXNvdXJjZV9jaGVja19idWZmZXIoc3RydWN0IGRtYV9yZXN2X2N0 eCAKPj4gKnRpY2tldCwKPj4gwqDCoMKgwqDCoCB2YWxfYnVmLT5ibyA9ICZyZXMtPmJhY2t1cC0+ YmFzZTsKPj4gwqDCoMKgwqDCoCB2YWxfYnVmLT5udW1fc2hhcmVkID0gMDsKPj4gwqDCoMKgwqDC oCBsaXN0X2FkZF90YWlsKCZ2YWxfYnVmLT5oZWFkLCAmdmFsX2xpc3QpOwo+PiAtwqDCoMKgIHJl dCA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnModGlja2V0LCAmdmFsX2xpc3QsIGludGVycnVwdGli bGUsIAo+PiBOVUxMLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB0cnVlKTsKPj4gK8KgwqDCoCByZXQgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKHRpY2tldCwg JnZhbF9saXN0LCBpbnRlcnJ1cHRpYmxlLCAKPj4gTlVMTCk7Cj4+IMKgwqDCoMKgwqAgaWYgKHVu bGlrZWx5KHJldCAhPSAwKSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X25vX3Jlc2Vy dmU7Cj4+IMKgIGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF92YWxp ZGF0aW9uLmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfdmFsaWRhdGlvbi5o Cj4+IGluZGV4IDQzZjQ4ZGYzODQ0Zi4uZWJiNWI2OGI1YzFmIDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF92YWxpZGF0aW9uLmgKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfdmFsaWRhdGlvbi5oCj4+IEBAIC0xNjksNyArMTY5LDcgQEAg dm13X3ZhbGlkYXRpb25fYm9fcmVzZXJ2ZShzdHJ1Y3QgCj4+IHZtd192YWxpZGF0aW9uX2NvbnRl eHQgKmN0eCwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJvb2wgaW50cikKPj4g wqAgewo+PiDCoMKgwqDCoMKgIHJldHVybiB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZjdHgtPnRp Y2tldCwgJmN0eC0+Ym9fbGlzdCwgaW50ciwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBOVUxMLCB0cnVlKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBOVUxMKTsKPj4gwqAgfQo+PiDCoCDCoCAvKioKPj4gZGlmZiAt LWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmggYi9pbmNsdWRlL2RybS90dG0vdHRt X2JvX2FwaS5oCj4+IGluZGV4IDQzYzQ5MjlhMjE3MS4uMjg4ZmQ2NGI3MjE5IDEwMDY0NAo+PiAt LS0gYS9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oCj4+ICsrKyBiL2luY2x1ZGUvZHJtL3R0 bS90dG1fYm9fYXBpLmgKPj4gQEAgLTM2NywzMCArMzY3LDYgQEAgaW50IHR0bV9ib192YWxpZGF0 ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+PiDCoMKgICovCj4+IMKgIHZvaWQgdHRt X2JvX3B1dChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKTsKPj4gwqAgLS8qKgo+PiAtICog dHRtX2JvX2FkZF90b19scnUKPj4gLSAqCj4+IC0gKiBAYm86IFRoZSBidWZmZXIgb2JqZWN0Lgo+ PiAtICoKPj4gLSAqIEFkZCB0aGlzIGJvIHRvIHRoZSByZWxldmFudCBtZW0gdHlwZSBscnUgYW5k LCBpZiBpdCdzIGJhY2tlZCBieQo+PiAtICogc3lzdGVtIHBhZ2VzICh0dG1zKSB0byB0aGUgc3dh cCBsaXN0Lgo+PiAtICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHN0cnVjdCB0 dG1fYm9fZ2xvYmFsOjpscnVfbG9jayAKPj4gaGVsZCwgYW5kCj4+IC0gKiBpcyB0eXBpY2FsbHkg Y2FsbGVkIGltbWVkaWF0ZWx5IHByaW9yIHRvIHVucmVzZXJ2aW5nIGEgYm8uCj4+IC0gKi8KPj4g LXZvaWQgdHRtX2JvX2FkZF90b19scnUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7Cj4+ IC0KPj4gLS8qKgo+PiAtICogdHRtX2JvX2RlbF9mcm9tX2xydQo+PiAtICoKPj4gLSAqIEBibzog VGhlIGJ1ZmZlciBvYmplY3QuCj4+IC0gKgo+PiAtICogUmVtb3ZlIHRoaXMgYm8gZnJvbSBhbGwg bHJ1IGxpc3RzIHVzZWQgdG8gbG9va3VwIGFuZCByZXNlcnZlIGFuIAo+PiBvYmplY3QuCj4+IC0g KiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggc3RydWN0IHR0bV9ib19nbG9iYWw6 OmxydV9sb2NrIAo+PiBoZWxkLAo+PiAtICogYW5kIGlzIHVzdWFsbHkgY2FsbGVkIGp1c3QgaW1t ZWRpYXRlbHkgYWZ0ZXIgdGhlIGJvIGhhcyBiZWVuIAo+PiByZXNlcnZlZCB0bwo+PiAtICogYXZv aWQgcmVjdXJzaXZlIHJlc2VydmF0aW9uIGZyb20gbHJ1IGxpc3RzLgo+PiAtICovCj4+IC12b2lk IHR0bV9ib19kZWxfZnJvbV9scnUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7Cj4+IC0K Pj4gwqAgLyoqCj4+IMKgwqAgKiB0dG1fYm9fbW92ZV90b19scnVfdGFpbAo+PiDCoMKgICoKPj4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmggCj4+IGIvaW5jbHVk ZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaAo+PiBpbmRleCA0ZTMwN2Y2NWY0OTcuLjQzMzJjYzAz NjQ4MyAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaAo+PiAr KysgYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oCj4+IEBAIC02MjEsOSArNjIxLDYg QEAgdm9pZCB0dG1fbWVtX2lvX2ZyZWVfdm0oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0IAo+PiAq Ym8pOwo+PiDCoCBpbnQgdHRtX21lbV9pb19sb2NrKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdl ciAqbWFuLCBib29sIAo+PiBpbnRlcnJ1cHRpYmxlKTsKPj4gwqAgdm9pZCB0dG1fbWVtX2lvX3Vu bG9jayhzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbik7Cj4+IMKgIC12b2lkIHR0bV9i b19kZWxfc3ViX2Zyb21fbHJ1KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pOwo+PiAtdm9p ZCB0dG1fYm9fYWRkX3RvX2xydShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKTsKPj4gLQo+ PiDCoCAvKioKPj4gwqDCoCAqIF9fdHRtX2JvX3Jlc2VydmU6Cj4+IMKgwqAgKgo+PiBAQCAtNzE3 LDE1ICs3MTQsOSBAQCBzdGF0aWMgaW5saW5lIGludCB0dG1fYm9fcmVzZXJ2ZShzdHJ1Y3QgCj4+ IHR0bV9idWZmZXJfb2JqZWN0ICpibywKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJvb2wgaW50ZXJydXB0aWJsZSwgYm9vbCBub193YWl0LAo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHd3X2FjcXVpcmVfY3R4ICp0aWNrZXQpCj4+ IMKgIHsKPj4gLcKgwqDCoCBpbnQgcmV0Owo+PiAtCj4+IMKgwqDCoMKgwqAgV0FSTl9PTigha3Jl Zl9yZWFkKCZiby0+a3JlZikpOwo+PiDCoCAtwqDCoMKgIHJldCA9IF9fdHRtX2JvX3Jlc2VydmUo Ym8sIGludGVycnVwdGlibGUsIG5vX3dhaXQsIHRpY2tldCk7Cj4+IC3CoMKgwqAgaWYgKGxpa2Vs eShyZXQgPT0gMCkpCj4+IC3CoMKgwqDCoMKgwqDCoCB0dG1fYm9fZGVsX3N1Yl9mcm9tX2xydShi byk7Cj4+IC0KPj4gLcKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIHJldHVybiBfX3R0bV9i b19yZXNlcnZlKGJvLCBpbnRlcnJ1cHRpYmxlLCBub193YWl0LCB0aWNrZXQpOwo+PiDCoCB9Cj4+ IMKgIMKgIC8qKgo+PiBAQCAtNzUyLDkgKzc0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHR0bV9i b19yZXNlcnZlX3Nsb3dwYXRoKHN0cnVjdCAKPj4gdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+PiDC oMKgwqDCoMKgIGVsc2UKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9yZXN2X2xvY2tfc2xvdyhi by0+YmFzZS5yZXN2LCB0aWNrZXQpOwo+PiDCoCAtwqDCoMKgIGlmIChsaWtlbHkocmV0ID09IDAp KQo+PiAtwqDCoMKgwqDCoMKgwqAgdHRtX2JvX2RlbF9zdWJfZnJvbV9scnUoYm8pOwo+PiAtwqDC oMKgIGVsc2UgaWYgKHJldCA9PSAtRUlOVFIpCj4+ICvCoMKgwqAgaWYgKHJldCA9PSAtRUlOVFIp Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRVJFU1RBUlRTWVM7Cj4+IMKgIMKgwqDCoMKg wqAgcmV0dXJuIHJldDsKPj4gQEAgLTc3MCwxMCArNzU5LDcgQEAgc3RhdGljIGlubGluZSBpbnQg dHRtX2JvX3Jlc2VydmVfc2xvd3BhdGgoc3RydWN0IAo+PiB0dG1fYnVmZmVyX29iamVjdCAqYm8s Cj4+IMKgIHN0YXRpYyBpbmxpbmUgdm9pZCB0dG1fYm9fdW5yZXNlcnZlKHN0cnVjdCB0dG1fYnVm ZmVyX29iamVjdCAqYm8pCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzcGluX2xvY2soJmJvLT5iZGV2 LT5nbG9iLT5scnVfbG9jayk7Cj4+IC3CoMKgwqAgaWYgKGxpc3RfZW1wdHkoJmJvLT5scnUpKQo+ PiAtwqDCoMKgwqDCoMKgwqAgdHRtX2JvX2FkZF90b19scnUoYm8pOwo+PiAtwqDCoMKgIGVsc2UK Pj4gLcKgwqDCoMKgwqDCoMKgIHR0bV9ib19tb3ZlX3RvX2xydV90YWlsKGJvLCBOVUxMKTsKPj4g K8KgwqDCoCB0dG1fYm9fbW92ZV90b19scnVfdGFpbChibywgTlVMTCk7Cj4+IMKgwqDCoMKgwqAg c3Bpbl91bmxvY2soJmJvLT5iZGV2LT5nbG9iLT5scnVfbG9jayk7Cj4+IMKgwqDCoMKgwqAgZG1h X3Jlc3ZfdW5sb2NrKGJvLT5iYXNlLnJlc3YpOwo+PiDCoCB9Cj4+IGRpZmYgLS1naXQgYS9pbmNs dWRlL2RybS90dG0vdHRtX2V4ZWNidWZfdXRpbC5oIAo+PiBiL2luY2x1ZGUvZHJtL3R0bS90dG1f ZXhlY2J1Zl91dGlsLmgKPj4gaW5kZXggNGU4NmI2ZmQ2YzU3Li4xYTM1NTNhYzUzYjEgMTAwNjQ0 Cj4+IC0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fZXhlY2J1Zl91dGlsLmgKPj4gKysrIGIvaW5j bHVkZS9kcm0vdHRtL3R0bV9leGVjYnVmX3V0aWwuaAo+PiBAQCAtMTAwLDcgKzEwMCw3IEBAIGV4 dGVybiB2b2lkIHR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKHN0cnVjdCAKPj4gZG1hX3Jlc3Zf Y3R4ICp0aWNrZXQsCj4+IMKgIMKgIGV4dGVybiBpbnQgdHRtX2V1X3Jlc2VydmVfYnVmZmVycyhz dHJ1Y3QgZG1hX3Jlc3ZfY3R4ICp0aWNrZXQsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGJvb2wgaW50ciwKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCAqZHVwcywgYm9v bCBkZWxfbHJ1KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGxpc3RfaGVhZCAqZHVwcyk7Cj4+IMKgIMKgIC8qKgo+PiDCoMKgICogZnVuY3Rpb24gdHRtX2V1 X2ZlbmNlX2J1ZmZlcl9vYmplY3RzLgo+Cj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbA==