From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: Re: [RFCv6 2/2] drm/i915: Introduce private PAT management Date: Wed, 30 Aug 2017 22:15:08 -0700 Message-ID: References: <1504030448-31973-1-git-send-email-zhi.a.wang@intel.com> <1504030448-31973-2-git-send-email-zhi.a.wang@intel.com> <1504130400.8120.36.camel@rdvivi-vienna> <9c5674b2-bc85-4765-5d5d-37c0a44f4cff@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <9c5674b2-bc85-4765-5d5d-37c0a44f4cff@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Zhi Wang Cc: "intel-gfx@lists.freedesktop.org" , "Widawsky, Benjamin" , "intel-gvt-dev@lists.freedesktop.org" , "Vivi, Rodrigo" List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBBdWcgMzAsIDIwMTcgYXQgOTo0OSBQTSwgWmhpIFdhbmcgPHpoaS5hLndhbmdAaW50 ZWwuY29tPiB3cm90ZToKPiBIaSBWaXZpOgo+ICAgICBUaGFua3MgZm9yIHRoZSByZXBseSEgVGhl IHJlZ2lzdGVyIGFyZSB3cml0dGVuIGluIHBwYXQtPnVwZGF0ZV9odygpIG5vdy4KCm9oLCBJIHNh dyBub3cuLi4KSSBoYWRkZW4gbm90aWNlZCB0aGF0IGludGVyYXRpb24uCgpCdXQgc29tZXRoaW5n IHNlZW1zIHJlYWxseSBvZGQgeWV0Li4uCk15IENOTCB3aXRoIHRoZXNlIDIgcGF0Y2hlcyBhcHBs aWVkIGhhbmdzIG9uIGFueSBleGVjdXRpb24uLi4KCj4KPgo+ICtzdGF0aWMgdm9pZCBjbmxfcHJp dmF0ZV9wYXRfdXBkYXRlX2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAr ewo+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYtPnBwYXQ7Cj4g KyAgICAgICBpbnQgaTsKPiArCj4gKyAgICAgICBmb3JfZWFjaF9zZXRfYml0KGksIHBwYXQtPmRp cnR5LCBwcGF0LT5tYXhfZW50cmllcykgewo+ICsgICAgICAgICAgICAgICBJOTE1X1dSSVRFKEdF TjEwX1BBVF9JTkRFWChpKSwgcHBhdC0+ZW50cmllc1tpXS52YWx1ZSk7Cj4gKyAgICAgICAgICAg ICAgIGNsZWFyX2JpdChpLCBwcGF0LT5kaXJ0eSk7Cj4gKyAgICAgICB9Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGJkd19wcml2YXRlX3BhdF91cGRhdGVfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZk ZXZfcHJpdi0+cHBhdDsKPiArICAgICAgIHU2NCBwYXQgPSAwOwo+ICsgICAgICAgaW50IGk7Cj4g Kwo+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHBwYXQtPm1heF9lbnRyaWVzOyBpKyspCj4gKyAg ICAgICAgICAgICAgIHBhdCB8PSBHRU44X1BQQVQoaSwgcHBhdC0+ZW50cmllc1tpXS52YWx1ZSk7 Cj4gKwo+ICsgICAgICAgYml0bWFwX2NsZWFyKHBwYXQtPmRpcnR5LCAwLCBwcGF0LT5tYXhfZW50 cmllcyk7Cj4gKwo+ICsgICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0xPLCBsb3dl cl8zMl9iaXRzKHBhdCkpOwo+ICsgICAgICAgSTkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0hJ LCB1cHBlcl8zMl9iaXRzKHBhdCkpOwo+ICt9Cj4KPiBPbiAwOC8zMS8xNyAwNjowMCwgVml2aSwg Um9kcmlnbyB3cm90ZToKPj4KPj4gT24gV2VkLCAyMDE3LTA4LTMwIGF0IDAyOjE0ICswODAwLCBa aGkgV2FuZyB3cm90ZToKPj4+Cj4+PiBUaGUgcHJpdmF0ZSBQQVQgbWFuYWdlbWVudCBpcyB0byBz dXBwb3J0IFBQQVQgZW50cnkgbWFuaXB1bGF0aW9uLiBUd28KPj4+IEFQSXMgYXJlIGludHJvZHVj ZWQgZm9yIGR5bmFtaWNhbGx5IG1hbmFnaW5nIFBQQVQgZW50cmllczogaW50ZWxfcHBhdF9nZXQK Pj4+IGFuZCBpbnRlbF9wcGF0X3B1dC4KPj4+Cj4+PiBpbnRlbF9wcGF0X2dldCB3aWxsIHNlYXJj aCBmb3IgYW4gZXhpc3RpbmcgUFBBVCBlbnRyeSB3aGljaCBwZXJmZWN0bHkKPj4+IG1hdGNoZXMg dGhlIHJlcXVpcmVkIFBQQVQgdmFsdWUuIElmIG5vdCwgaXQgd2lsbCB0cnkgdG8gYWxsb2NhdGUg b3IKPj4+IHJldHVybiBhIHBhcnRpYWxseSBtYXRjaGVkIFBQQVQgZW50cnkgaWYgdGhlcmUgaXMg YW55IGF2YWlsYWJsZSBQUEFUCj4+PiBpbmRleGVzIG9yIG5vdC4KPj4+Cj4+PiBpbnRlbF9wcGF0 X3B1dCB3aWxsIHB1dCBiYWNrIHRoZSBQUEFUIGVudHJ5IHdoaWNoIGNvbWVzIGZyb20KPj4+IGlu dGVsX3BwYXRfZ2V0LiBJZiBpdCdzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgdGhlIHJlZmVyZW5j ZSBjb3VudCB3aWxsCj4+PiBiZSBkZWNyZWFzZWQuIElmIHRoZSByZWZlcmVuY2UgY291bnQgdHVy bnMgaW50byB6ZXJvLCB0aGUgUFBBVCBpbmRleCBpcwo+Pj4gZnJlZWQgYWdhaW4uCj4+Pgo+Pj4g QmVzaWRlcywgYW5vdGhlciB0d28gY2FsbGJhY2tzIGFyZSBpbnRyb2R1Y2VkIHRvIHN1cHBvcnQg dGhlIHByaXZhdGUgUEFUCj4+PiBtYW5hZ2VtZW50IGZyYW1ld29yay4gT25lIGlzIHBwYXQtPnVw ZGF0ZV9odygpLCB3aGljaCB3cml0ZXMgdGhlIFBQQVQKPj4+IGNvbmZpZ3VyYXRpb25zIGluIHBw YXQtPmVudHJpZXMgaW50byBIVy4gQW5vdGhlciBvbmUgaXMgcHBhdC0+bWF0Y2gsCj4+PiB3aGlj aAo+Pj4gd2lsbCByZXR1cm4gYSBzY29yZSB0byBzaG93IGhvdyB0d28gUFBBVCB2YWx1ZXMgbWF0 Y2ggd2l0aCBlYWNoIG90aGVyLgo+Pj4KPj4+IHY2Ogo+Pj4KPj4+IC0gQWRkcmVzcyBhbGwgY29t bWVudHMgZnJvbSBDaHJpczoKPj4+IGh0dHA6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvaW50ZWwt Z2Z4L21zZzEzNjg1MC5odG1sCj4+Pgo+Pj4gLSBBZGRyZXNzIGFsbCBjb21tZW50cyBmcm9tIEpv b25hczoKPj4+IGh0dHA6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvaW50ZWwtZ2Z4L21zZzEzNjg0 NS5odG1sCj4+Pgo+Pj4gdjU6Cj4+Pgo+Pj4gLSBBZGQgY2hlY2sgYW5kIHdhcm5uaW5ncyBmb3Ig dGhvc2UgcGxhdGZvcm1zIHdoaWNoIGRvbid0IGhhdmUgUFBBVC4KPj4+Cj4+PiB2MzoKPj4+Cj4+ PiAtIEludHJvZHVjZSBkaXJ0eSBiaXRtYXAgZm9yIFBQQVQgcmVnaXN0ZXJzLiAoQ2hyaXMpCj4+ PiAtIENoYW5nZSB0aGUgbmFtZSBvZiB0aGUgcG9pbnRlciAiZGV2X3ByaXYiIHRvICJpOTE1Ii4g KENocmlzKQo+Pj4gLSBpbnRlbF9wcGF0X3tnZXQsIHB1dH0gcmV0dXJucy90YWtlcyBhIGNvbnN0 IGludGVsX3BwYXRfZW50cnkgKi4gKENocmlzKQo+Pj4KPj4+IHYyOgo+Pj4KPj4+IC0gQVBJIHJl LWRlc2lnbi4gKENocmlzKQo+Pj4KPj4+IENjOiBCZW4gV2lkYXdza3kgPGJlbmphbWluLndpZGF3 c2t5QGludGVsLmNvbT4KPj4+IENjOiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5j b20+Cj4+PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+PiBD YzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgo+Pj4g U2lnbmVkLW9mZi1ieTogWmhpIFdhbmcgPHpoaS5hLndhbmdAaW50ZWwuY29tPgo+Pj4gLS0tCj4+ PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgIHwgICAyICsKPj4+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgfCAyNzMKPj4+ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLQo+Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9ndHQuaCB8ICAzNiArKysrKwo+Pj4gICAzIGZpbGVzIGNoYW5nZWQsIDI2MiBpbnNlcnRpb25z KCspLCA0OSBkZWxldGlvbnMoLSkKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+ PiBpbmRleCA3NTg3ZWY1Li41ZmZkZTEwIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaAo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+Pj4gQEAgLTIzMTIsNiArMjMxMiw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPj4+ ICAgICAgICAgREVDTEFSRV9IQVNIVEFCTEUobW1fc3RydWN0cywgNyk7Cj4+PiAgICAgICAgIHN0 cnVjdCBtdXRleCBtbV9sb2NrOwo+Pj4gICArICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCBwcGF0Owo+ Pj4gKwo+Pj4gICAgICAgICAvKiBLZXJuZWwgTW9kZXNldHRpbmcgKi8KPj4+ICAgICAgICAgc3Ry dWN0IGludGVsX2NydGMgKnBsYW5lX3RvX2NydGNfbWFwcGluZ1tJOTE1X01BWF9QSVBFU107Cj4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPj4+IGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPj4+IGluZGV4IGI3NGZhOWQuLjMx MDYxNDIgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu Ywo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPj4+IEBAIC0y ODE2LDQxICsyODE2LDIwMCBAQCBzdGF0aWMgaW50IGdndHRfcHJvYmVfY29tbW9uKHN0cnVjdCBp OTE1X2dndHQKPj4+ICpnZ3R0LCB1NjQgc2l6ZSkKPj4+ICAgICAgICAgcmV0dXJuIDA7Cj4+PiAg IH0KPj4+ICAgLXN0YXRpYyB2b2lkIGNubF9zZXR1cF9wcml2YXRlX3BwYXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRy eSAqCj4+PiArX19hbGxvY19wcGF0X2VudHJ5KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0LCB1bnNp Z25lZCBpbnQgaW5kZXgsIHU4Cj4+PiB2YWx1ZSkKPj4+ICAgewo+Pj4gKyAgICAgICBzdHJ1Y3Qg aW50ZWxfcHBhdF9lbnRyeSAqZW50cnkgPSAmcHBhdC0+ZW50cmllc1tpbmRleF07Cj4+PiArCj4+ PiArICAgICAgIEdFTV9CVUdfT04oaW5kZXggPj0gcHBhdC0+bWF4X2VudHJpZXMpOwo+Pj4gKyAg ICAgICBHRU1fQlVHX09OKHRlc3RfYml0KGluZGV4LCBwcGF0LT51c2VkKSk7Cj4+PiArCj4+PiAr ICAgICAgIGVudHJ5LT5wcGF0ID0gcHBhdDsKPj4+ICsgICAgICAgZW50cnktPnZhbHVlID0gdmFs dWU7Cj4+PiArICAgICAgIGtyZWZfaW5pdCgmZW50cnktPnJlZik7Cj4+PiArICAgICAgIHNldF9i aXQoaW5kZXgsIHBwYXQtPnVzZWQpOwo+Pj4gKyAgICAgICBzZXRfYml0KGluZGV4LCBwcGF0LT5k aXJ0eSk7Cj4+PiArCj4+PiArICAgICAgIHJldHVybiBlbnRyeTsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIHZvaWQgX19mcmVlX3BwYXRfZW50cnkoc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVu dHJ5KQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSBlbnRyeS0+ cHBhdDsKPj4+ICsgICAgICAgdW5zaWduZWQgaW50IGluZGV4ID0gZW50cnkgLSBwcGF0LT5lbnRy aWVzOwo+Pj4gKwo+Pj4gKyAgICAgICBHRU1fQlVHX09OKGluZGV4ID49IHBwYXQtPm1heF9lbnRy aWVzKTsKPj4+ICsgICAgICAgR0VNX0JVR19PTighdGVzdF9iaXQoaW5kZXgsIHBwYXQtPnVzZWQp KTsKPj4+ICsKPj4+ICsgICAgICAgZW50cnktPnZhbHVlID0gcHBhdC0+Y2xlYXJfdmFsdWU7Cj4+ PiArICAgICAgIGNsZWFyX2JpdChpbmRleCwgcHBhdC0+dXNlZCk7Cj4+PiArICAgICAgIHNldF9i aXQoaW5kZXgsIHBwYXQtPmRpcnR5KTsKPj4+ICt9Cj4+PiArCj4+PiArLyoqCj4+PiArICogaW50 ZWxfcHBhdF9nZXQgLSBnZXQgYSB1c2FibGUgUFBBVCBlbnRyeQo+Pj4gKyAqIEBpOTE1OiBpOTE1 IGRldmljZSBpbnN0YW5jZQo+Pj4gKyAqIEB2YWx1ZTogdGhlIFBQQVQgdmFsdWUgcmVxdWlyZWQg YnkgdGhlIGNhbGxlcgo+Pj4gKyAqCj4+PiArICogVGhlIGZ1bmN0aW9uIHRyaWVzIHRvIHNlYXJj aCBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBQUEFUIGVudHJ5IHdoaWNoCj4+PiArICogbWF0Y2hl cyB3aXRoIHRoZSByZXF1aXJlZCB2YWx1ZS4gSWYgcGVyZmVjdGx5IG1hdGNoZWQsIHRoZSBleGlz dGluZwo+Pj4gUFBBVAo+Pj4gKyAqIGVudHJ5IHdpbGwgYmUgdXNlZC4gSWYgb25seSBwYXJ0aWFs bHkgbWF0Y2hlZCwgaXQgd2lsbCB0cnkgdG8gY2hlY2sKPj4+IGlmCj4+PiArICogdGhlcmUgaXMg YW55IGF2YWlsYWJsZSBQUEFUIGluZGV4LiBJZiB5ZXMsIGl0IHdpbGwgYWxsb2NhdGUgYSBuZXcK Pj4+IFBQQVQKPj4+ICsgKiBpbmRleCBmb3IgdGhlIHJlcXVpcmVkIGVudHJ5IGFuZCB1cGRhdGUg dGhlIEhXLiBJZiBub3QsIHRoZSBwYXJ0aWFsbHkKPj4+ICsgKiBtYXRjaGVkIGVudHJ5IHdpbGwg YmUgdXNlZC4KPj4+ICsgKi8KPj4+ICtjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqCj4+ PiAraW50ZWxfcHBhdF9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IHZhbHVl KQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAmaTkxNS0+cHBh dDsKPj4+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5Owo+Pj4gKyAgICAg ICB1bnNpZ25lZCBpbnQgc2Nhbm5lZCwgYmVzdF9zY29yZTsKPj4+ICsgICAgICAgaW50IGk7Cj4+ PiArCj4+PiArICAgICAgIEdFTV9CVUdfT04oIXBwYXQtPm1heF9lbnRyaWVzKTsKPj4+ICsKPj4+ ICsgICAgICAgc2Nhbm5lZCA9IGJlc3Rfc2NvcmUgPSAwOwo+Pj4gKwo+Pj4gKyAgICAgICBmb3Jf ZWFjaF9zZXRfYml0KGksIHBwYXQtPnVzZWQsIHBwYXQtPm1heF9lbnRyaWVzKSB7Cj4+PiArICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHNjb3JlOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAg IGVudHJ5ID0gJnBwYXQtPmVudHJpZXNbaV07Cj4+PiArICAgICAgICAgICAgICAgc2NvcmUgPSBw cGF0LT5tYXRjaChlbnRyeS0+dmFsdWUsIHZhbHVlKTsKPj4+ICsgICAgICAgICAgICAgICBpZiAo c2NvcmUgPiBiZXN0X3Njb3JlKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Nv cmUgPT0gSU5URUxfUFBBVF9QRVJGRUNUX01BVENIKSB7Cj4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGtyZWZfZ2V0KCZlbnRyeS0+cmVmKTsKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5Owo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg fQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9zY29yZSA9IHNjb3JlOwo+Pj4gKyAg ICAgICAgICAgICAgIH0KPj4+ICsgICAgICAgICAgICAgICBzY2FubmVkKys7Cj4+PiArICAgICAg IH0KPj4+ICsKPj4+ICsgICAgICAgaWYgKHNjYW5uZWQgPT0gcHBhdC0+bWF4X2VudHJpZXMpIHsK Pj4+ICsgICAgICAgICAgICAgICBpZiAoIWJlc3Rfc2NvcmUpCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAg ICBrcmVmX2dldCgmZW50cnktPnJlZik7Cj4+PiArICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5 Owo+Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArICAgICAgIGkgPSBmaW5kX2ZpcnN0X3plcm9fYml0 KHBwYXQtPnVzZWQsIHBwYXQtPm1heF9lbnRyaWVzKTsKPj4+ICsgICAgICAgZW50cnkgPSBfX2Fs bG9jX3BwYXRfZW50cnkocHBhdCwgaSwgdmFsdWUpOwo+Pj4gKyAgICAgICBwcGF0LT51cGRhdGVf aHcoaTkxNSk7Cj4+PiArICAgICAgIHJldHVybiBlbnRyeTsKPj4+ICt9Cj4+PiArCj4+PiArc3Rh dGljIHZvaWQgcmVsZWFzZV9wcGF0KHN0cnVjdCBrcmVmICprcmVmKQo+Pj4gK3sKPj4+ICsgICAg ICAgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5ID0KPj4+ICsgICAgICAgICAgICAgICBj b250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGludGVsX3BwYXRfZW50cnksIHJlZik7Cj4+PiArICAg ICAgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZW50cnktPnBwYXQtPmk5MTU7Cj4+ PiArCj4+PiArICAgICAgIF9fZnJlZV9wcGF0X2VudHJ5KGVudHJ5KTsKPj4+ICsgICAgICAgZW50 cnktPnBwYXQtPnVwZGF0ZV9odyhpOTE1KTsKPj4+ICt9Cj4+PiArCj4+PiArLyoqCj4+PiArICog aW50ZWxfcHBhdF9wdXQgLSBwdXQgYmFjayB0aGUgUFBBVCBlbnRyeSBnb3QgZnJvbSBpbnRlbF9w cGF0X2dldCgpCj4+PiArICogQGVudHJ5OiBhbiBpbnRlbCBQUEFUIGVudHJ5Cj4+PiArICoKPj4+ ICsgKiBQdXQgYmFjayB0aGUgUFBBVCBlbnRyeSBnb3QgZnJvbSBpbnRlbF9wcGF0X2dldCgpLiBJ ZiB0aGUgUFBBVCBpbmRleAo+Pj4gb2YgdGhlCj4+PiArICogZW50cnkgaXMgZHluYW1pY2FsbHkg YWxsb2NhdGVkLCBpdHMgcmVmZXJlbmNlIGNvdW50IHdpbGwgYmUKPj4+IGRlY3JlYXNlZC4gT25j ZQo+Pj4gKyAqIHRoZSByZWZlcmVuY2UgY291bnQgYmVjb21lcyBpbnRvIHplcm8sIHRoZSBQUEFU IGluZGV4IGJlY29tZXMgZnJlZQo+Pj4gYWdhaW4uCj4+PiArICovCj4+PiArdm9pZCBpbnRlbF9w cGF0X3B1dChjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkpCj4+PiArewo+Pj4g KyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9IGVudHJ5LT5wcGF0Owo+Pj4gKyAgICAg ICB1bnNpZ25lZCBpbnQgaW5kZXggPSBlbnRyeSAtIHBwYXQtPmVudHJpZXM7Cj4+PiArCj4+PiAr ICAgICAgIEdFTV9CVUdfT04oIXBwYXQtPm1heF9lbnRyaWVzKTsKPj4+ICsKPj4+ICsgICAgICAg a3JlZl9wdXQoJnBwYXQtPmVudHJpZXNbaW5kZXhdLnJlZiwgcmVsZWFzZV9wcGF0KTsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgY25sX3ByaXZhdGVfcGF0X3VwZGF0ZV9odyhzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+PiArewo+Pj4gKyAgICAgICBzdHJ1Y3QgaW50 ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsKPj4+ICsgICAgICAgaW50IGk7Cj4+PiAr Cj4+PiArICAgICAgIGZvcl9lYWNoX3NldF9iaXQoaSwgcHBhdC0+ZGlydHksIHBwYXQtPm1heF9l bnRyaWVzKSB7Cj4+PiArICAgICAgICAgICAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgo aSksIHBwYXQtPmVudHJpZXNbaV0udmFsdWUpOwo+Pj4gKyAgICAgICAgICAgICAgIGNsZWFyX2Jp dChpLCBwcGF0LT5kaXJ0eSk7Cj4+PiArICAgICAgIH0KPj4+ICt9Cj4+PiArCj4+PiArc3RhdGlj IHZvaWQgYmR3X3ByaXZhdGVfcGF0X3VwZGF0ZV9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4+PiArewo+Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZk ZXZfcHJpdi0+cHBhdDsKPj4+ICsgICAgICAgdTY0IHBhdCA9IDA7Cj4+PiArICAgICAgIGludCBp Owo+Pj4gKwo+Pj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHBhdC0+bWF4X2VudHJpZXM7IGkr KykKPj4+ICsgICAgICAgICAgICAgICBwYXQgfD0gR0VOOF9QUEFUKGksIHBwYXQtPmVudHJpZXNb aV0udmFsdWUpOwo+Pj4gKwo+Pj4gKyAgICAgICBiaXRtYXBfY2xlYXIocHBhdC0+ZGlydHksIDAs IHBwYXQtPm1heF9lbnRyaWVzKTsKPj4+ICsKPj4+ICsgICAgICAgSTkxNV9XUklURShHRU44X1BS SVZBVEVfUEFUX0xPLCBsb3dlcl8zMl9iaXRzKHBhdCkpOwo+Pj4gKyAgICAgICBJOTE1X1dSSVRF KEdFTjhfUFJJVkFURV9QQVRfSEksIHVwcGVyXzMyX2JpdHMocGF0KSk7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmR3X3ByaXZhdGVfcGF0X21hdGNoKHU4IHNyYywgdTgg ZHN0KQo+Pj4gK3sKPj4+ICsgICAgICAgdW5zaWduZWQgaW50IHNjb3JlID0gMDsKPj4+ICsKPj4+ ICsgICAgICAgLyogQ2FjaGUgYXR0cmlidXRlIGhhcyB0byBiZSBtYXRjaGVkLiAqLwo+Pj4gKyAg ICAgICBpZiAoR0VOOF9QUEFUX0dFVF9DQShzcmMpICE9IEdFTjhfUFBBVF9HRVRfQ0EoZHN0KSkK Pj4+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4+ICsKPj4+ICsgICAgICAgaWYgKEdFTjhf UFBBVF9HRVRfVEMoc3JjKSA9PSBHRU44X1BQQVRfR0VUX1RDKGRzdCkpCj4+PiArICAgICAgICAg ICAgICAgc2NvcmUgKz0gMjsKPj4+ICsKPj4+ICsgICAgICAgaWYoR0VOOF9QUEFUX0dFVF9BR0Uo c3JjKSA9PSBHRU44X1BQQVRfR0VUX0FHRShkc3QpKQo+Pj4gKyAgICAgICAgICAgICAgIHNjb3Jl ICs9IDE7Cj4+PiArCj4+PiArICAgICAgIGlmIChzY29yZSA9PSAzKQo+Pj4gKyAgICAgICAgICAg ICAgIHJldHVybiBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0g7Cj4+PiArCj4+PiArICAgICAgIHJl dHVybiBzY29yZTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHVuc2lnbmVkIGludCBjaHZfcHJp dmF0ZV9wYXRfbWF0Y2godTggc3JjLCB1OCBkc3QpCj4+PiArewo+Pj4gKyAgICAgICByZXR1cm4g KENIVl9QUEFUX0dFVF9TTk9PUChzcmMpID09IENIVl9QUEFUX0dFVF9TTk9PUChkc3QpKSA/Cj4+ PiArICAgICAgICAgICAgICAgSU5URUxfUFBBVF9QRVJGRUNUX01BVENIIDogMDsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIHZvaWQgY25sX3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgaW50ZWxf cHBhdCAqcHBhdCkKPj4+ICt7Cj4+PiArICAgICAgIHBwYXQtPm1heF9lbnRyaWVzID0gODsKPj4+ ICsgICAgICAgcHBhdC0+dXBkYXRlX2h3ID0gY25sX3ByaXZhdGVfcGF0X3VwZGF0ZV9odzsKPj4+ ICsgICAgICAgcHBhdC0+bWF0Y2ggPSBiZHdfcHJpdmF0ZV9wYXRfbWF0Y2g7Cj4+PiArICAgICAg IHBwYXQtPmNsZWFyX3ZhbHVlID0gR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDMp Owo+Pj4gKwo+Pj4gICAgICAgICAvKiBYWFg6IHNwZWMgaXMgdW5jbGVhciBpZiB0aGlzIGlzIHN0 aWxsIG5lZWRlZCBmb3IgQ05MKyAqLwo+Pj4gLSAgICAgICBpZiAoIVVTRVNfUFBHVFQoZGV2X3By aXYpKSB7Cj4+PiAtICAgICAgICAgICAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoMCks IEdFTjhfUFBBVF9VQyk7Cj4+PiArICAgICAgIGlmICghVVNFU19QUEdUVChwcGF0LT5pOTE1KSkg ewo+Pj4gKyAgICAgICAgICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NBQ0hF RF9QREVfSU5ERVgsCj4+PiBHRU44X1BQQVRfVUMpOwo+Pj4gICAgICAgICAgICAgICAgIHJldHVy bjsKPj4+ICAgICAgICAgfQo+Pj4gICAtICAgICBJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCgw KSwgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQyk7Cj4+PiAtICAgICAgIEk5MTVfV1JJVEUo R0VOMTBfUEFUX0lOREVYKDEpLCBHRU44X1BQQVRfV0MgfCBHRU44X1BQQVRfTExDRUxMQyk7Cj4+ PiAtICAgICAgIEk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDIpLCBHRU44X1BQQVRfV1QgfCBH RU44X1BQQVRfTExDRUxMQyk7Cj4+PiAtICAgICAgIEk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVY KDMpLCBHRU44X1BQQVRfVUMpOwo+Pj4gLSAgICAgICBJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRF WCg0KSwgR0VOOF9QUEFUX0xMQ0VMTEMgfAo+Pj4gR0VOOF9QUEFUX0FHRSgwKSk7Cj4+PiAtICAg ICAgIEk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDUpLCBHRU44X1BQQVRfTExDRUxMQyB8Cj4+ PiBHRU44X1BQQVRfQUdFKDEpKTsKPj4+IC0gICAgICAgSTkxNV9XUklURShHRU4xMF9QQVRfSU5E RVgoNiksIEdFTjhfUFBBVF9MTENFTExDIHwKPj4+IEdFTjhfUFBBVF9BR0UoMikpOwo+Pj4gLSAg ICAgICBJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCg3KSwgR0VOOF9QUEFUX0xMQ0VMTEMgfAo+ Pj4gR0VOOF9QUEFUX0FHRSgzKSk7Cj4+Cj4+Cj4+IEdlbjggYWxsb2NhdGlvbiBzdHlsZSBkb2Vz bid0IHdvcmsgb24gQ05MLgo+PiBJIGRvbid0IHNlZSB3aGVyZSBhbGwgdGhlc2UgcmVnaXN0ZXJz IHdvdWxkIGJlIGdldHRpbmcgcHJvcGVybHkgd3JpdHRlbi4KPj4KPj4+ICsgICAgICAgLyogU2Vl IGdlbjhfcHRlX2VuY29kZSgpIGZvciB0aGUgbWFwcGluZyBmcm9tIGNhY2hlLWxldmVsIHRvIFBQ QVQKPj4+ICovCj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NBQ0hF RF9QREVfSU5ERVgsIEdFTjhfUFBBVF9XQiB8Cj4+PiBHRU44X1BQQVRfTExDKTsKPj4+ICsgICAg ICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfRElTUExBWV9FTExDX0lOREVYLCBHRU44 X1BQQVRfV1QgfAo+Pj4gR0VOOF9QUEFUX0xMQ0VMTEMpOwo+Pj4gKyAgICAgICBfX2FsbG9jX3Bw YXRfZW50cnkocHBhdCwgUFBBVF9VTkNBQ0hFRF9JTkRFWCwgR0VOOF9QUEFUX1VDKTsKPj4+ICsg ICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX0lOREVYLCBHRU44X1BQ QVRfTExDRUxMQyB8Cj4+PiBHRU44X1BQQVRfQUdFKDApKTsKPj4+ICAgfQo+Pj4gICAgIC8qIFRo ZSBHR1RUIGFuZCBQUEdUVCBuZWVkIGEgcHJpdmF0ZSBQUEFUIHNldHVwIGluIG9yZGVyIHRvIGhh bmRsZQo+Pj4gY2FjaGVhYmlsaXR5Cj4+PiAgICAqIGJpdHMuIFdoZW4gdXNpbmcgYWR2YW5jZWQg Y29udGV4dHMgZWFjaCBjb250ZXh0IHN0b3JlcyBpdHMgb3duIFBBVCwKPj4+IGJ1dAo+Pj4gICAg KiB3cml0aW5nIHRoaXMgZGF0YSBzaG91bGRuJ3QgYmUgaGFybWZ1bCBldmVuIGluIHRob3NlIGNh c2VzLiAqLwo+Pj4gLXN0YXRpYyB2b2lkIGJkd19zZXR1cF9wcml2YXRlX3BwYXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4gK3N0YXRpYyB2b2lkIGJkd19zZXR1cF9wcml2 YXRlX3BwYXQoc3RydWN0IGludGVsX3BwYXQgKnBwYXQpCj4+PiAgIHsKPj4+IC0gICAgICAgdTY0 IHBhdDsKPj4+ICsgICAgICAgcHBhdC0+bWF4X2VudHJpZXMgPSA4Owo+Pj4gKyAgICAgICBwcGF0 LT51cGRhdGVfaHcgPSBiZHdfcHJpdmF0ZV9wYXRfdXBkYXRlX2h3Owo+Pj4gKyAgICAgICBwcGF0 LT5tYXRjaCA9IGJkd19wcml2YXRlX3BhdF9tYXRjaDsKPj4+ICsgICAgICAgcHBhdC0+Y2xlYXJf dmFsdWUgPSBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRfTExDRUxMQyB8Cj4+PiBHRU44X1BQQVRf QUdFKDMpOwo+Pj4gICAtICAgICBwYXQgPSBHRU44X1BQQVQoMCwgR0VOOF9QUEFUX1dCIHwgR0VO OF9QUEFUX0xMQykgICAgIHwgLyogZm9yCj4+PiBub3JtYWwgb2JqZWN0cywgbm8gZUxMQyAqLwo+ Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoMSwgR0VOOF9QUEFUX1dDIHwgR0VOOF9QUEFUX0xM Q0VMTEMpIHwgLyogZm9yCj4+PiBzb21ldGhpbmcgcG9pbnRpbmcgdG8gcHRlcz8gKi8KPj4+IC0g ICAgICAgICAgICAgR0VOOF9QUEFUKDIsIEdFTjhfUFBBVF9XVCB8IEdFTjhfUFBBVF9MTENFTExD KSB8IC8qIGZvcgo+Pj4gc2Nhbm91dCB3aXRoIGVMTEMgKi8KPj4+IC0gICAgICAgICAgICAgR0VO OF9QUEFUKDMsIEdFTjhfUFBBVF9VQykgICAgICAgICAgICAgICAgICAgICB8IC8qCj4+PiBVbmNh Y2hlZCBvYmplY3RzLCBtb3N0bHkgZm9yIHNjYW5vdXQgKi8KPj4+IC0gICAgICAgICAgICAgR0VO OF9QUEFUKDQsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwKPj4+IEdFTjhfUFBB VF9BR0UoMCkpIHwKPj4+IC0gICAgICAgICAgICAgR0VOOF9QUEFUKDUsIEdFTjhfUFBBVF9XQiB8 IEdFTjhfUFBBVF9MTENFTExDIHwKPj4+IEdFTjhfUFBBVF9BR0UoMSkpIHwKPj4+IC0gICAgICAg ICAgICAgR0VOOF9QUEFUKDYsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwKPj4+ IEdFTjhfUFBBVF9BR0UoMikpIHwKPj4+IC0gICAgICAgICAgICAgR0VOOF9QUEFUKDcsIEdFTjhf UFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwKPj4+IEdFTjhfUFBBVF9BR0UoMykpOwo+Pj4g LQo+Pj4gLSAgICAgICBpZiAoIVVTRVNfUFBHVFQoZGV2X3ByaXYpKQo+Pj4gKyAgICAgICBpZiAo IVVTRVNfUFBHVFQocHBhdC0+aTkxNSkpIHsKPj4+ICAgICAgICAgICAgICAgICAvKiBTcGVjOiAi Rm9yIEdHVFQsIHRoZXJlIGlzIE5PIHBhdF9zZWxbMjowXSBmcm9tIHRoZQo+Pj4gZW50cnksCj4+ PiAgICAgICAgICAgICAgICAgICogc28gUlRMIHdpbGwgYWx3YXlzIHVzZSB0aGUgdmFsdWUgY29y cmVzcG9uZGluZyB0bwo+Pj4gICAgICAgICAgICAgICAgICAqIHBhdF9zZWwgPSAwMDAiLgo+Pj4g QEAgLTI4NjQsMTcgKzMwMjMsMjYgQEAgc3RhdGljIHZvaWQgYmR3X3NldHVwX3ByaXZhdGVfcHBh dChzdHJ1Y3QKPj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4gICAgICAgICAgICAg ICAgICAqIFNvIHdlIGNhbiBzdGlsbCBob2xkIG9udG8gYWxsIG91ciBhc3N1bXB0aW9ucyB3cnQg Y3B1Cj4+PiAgICAgICAgICAgICAgICAgICogY2xmbHVzaGluZyBvbiBMTEMgbWFjaGluZXMuCj4+ PiAgICAgICAgICAgICAgICAgICovCj4+PiAtICAgICAgICAgICAgICAgcGF0ID0gR0VOOF9QUEFU KDAsIEdFTjhfUFBBVF9VQyk7Cj4+PiArICAgICAgICAgICAgICAgX19hbGxvY19wcGF0X2VudHJ5 KHBwYXQsIFBQQVRfQ0FDSEVEX1BERV9JTkRFWCwKPj4+IEdFTjhfUFBBVF9VQyk7Cj4+PiArICAg ICAgICAgICAgICAgcmV0dXJuOwo+Pj4gKyAgICAgICB9Cj4+PiAgIC0gICAgIC8qIFhYWDogc3Bl YyBkZWZpbmVzIHRoaXMgYXMgMiBkaXN0aW5jdCByZWdpc3RlcnMuIEl0J3MgdW5jbGVhcgo+Pj4g aWYgYSA2NGIKPj4+IC0gICAgICAgICogd3JpdGUgd291bGQgd29yay4gKi8KPj4+IC0gICAgICAg STkxNV9XUklURShHRU44X1BSSVZBVEVfUEFUX0xPLCBwYXQpOwo+Pj4gLSAgICAgICBJOTE1X1dS SVRFKEdFTjhfUFJJVkFURV9QQVRfSEksIHBhdCA+PiAzMik7Cj4+PiArICAgICAgIC8qIFNlZSBn ZW44X3B0ZV9lbmNvZGUoKSBmb3IgdGhlIG1hcHBpbmcgZnJvbSBjYWNoZS1sZXZlbCB0byBQUEFU Cj4+PiAqLwo+Pj4gKyAgICAgICAvKiBmb3Igbm9ybWFsIG9iamVjdHMsIG5vIGVMTEMgKi8KPj4+ ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfQ0FDSEVEX1BERV9JTkRFWCwg R0VOOF9QUEFUX1dCIHwKPj4+IEdFTjhfUFBBVF9MTEMpOwo+Pj4gKyAgICAgICAvKiBmb3Igc2Nh bm91dCB3aXRoIGVMTEMgKi8KPj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQ QVRfRElTUExBWV9FTExDX0lOREVYLCBHRU44X1BQQVRfV1QgfAo+Pj4gR0VOOF9QUEFUX0xMQ0VM TEMpOwo+Pj4gKyAgICAgICAvKiBVbmNhY2hlZCBvYmplY3RzLCBtb3N0bHkgZm9yIHNjYW5vdXQg Ki8KPj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfVU5DQUNIRURfSU5E RVgsIEdFTjhfUFBBVF9VQyk7Cj4+PiArICAgICAgIF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQ UEFUX0NBQ0hFRF9JTkRFWCwgR0VOOF9QUEFUX1dCIHwKPj4+IEdFTjhfUFBBVF9MTENFTExDIHwg R0VOOF9QUEFUX0FHRSgwKSk7Cj4+PiAgIH0KPj4+ICAgLXN0YXRpYyB2b2lkIGNodl9zZXR1cF9w cml2YXRlX3BwYXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4gK3N0YXRp YyB2b2lkIGNodl9zZXR1cF9wcml2YXRlX3BwYXQoc3RydWN0IGludGVsX3BwYXQgKnBwYXQpCj4+ PiAgIHsKPj4+IC0gICAgICAgdTY0IHBhdDsKPj4+ICsgICAgICAgcHBhdC0+bWF4X2VudHJpZXMg PSA4Owo+Pj4gKyAgICAgICBwcGF0LT51cGRhdGVfaHcgPSBiZHdfcHJpdmF0ZV9wYXRfdXBkYXRl X2h3Owo+Pj4gKyAgICAgICBwcGF0LT5tYXRjaCA9IGNodl9wcml2YXRlX3BhdF9tYXRjaDsKPj4+ ICsgICAgICAgcHBhdC0+Y2xlYXJfdmFsdWUgPSBDSFZfUFBBVF9TTk9PUDsKPj4+ICAgICAgICAg LyoKPj4+ICAgICAgICAgICogTWFwIFdCIG9uIEJEVyB0byBzbm9vcGVkIG9uIENIVi4KPj4+IEBA IC0yODk0LDE3ICszMDYyLDEyIEBAIHN0YXRpYyB2b2lkIGNodl9zZXR1cF9wcml2YXRlX3BwYXQo c3RydWN0Cj4+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4+ICAgICAgICAgICogV2hp Y2ggbWVhbnMgd2UgbXVzdCBzZXQgdGhlIHNub29wIGJpdCBpbiBQQVQgZW50cnkgMAo+Pj4gICAg ICAgICAgKiBpbiBvcmRlciB0byBrZWVwIHRoZSBnbG9iYWwgc3RhdHVzIHBhZ2Ugd29ya2luZy4K Pj4+ICAgICAgICAgICovCj4+PiAtICAgICAgIHBhdCA9IEdFTjhfUFBBVCgwLCBDSFZfUFBBVF9T Tk9PUCkgfAo+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoMSwgMCkgfAo+Pj4gLSAgICAgICAg ICAgICBHRU44X1BQQVQoMiwgMCkgfAo+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoMywgMCkg fAo+Pj4gLSAgICAgICAgICAgICBHRU44X1BQQVQoNCwgQ0hWX1BQQVRfU05PT1ApIHwKPj4+IC0g ICAgICAgICAgICAgR0VOOF9QUEFUKDUsIENIVl9QUEFUX1NOT09QKSB8Cj4+PiAtICAgICAgICAg ICAgIEdFTjhfUFBBVCg2LCBDSFZfUFBBVF9TTk9PUCkgfAo+Pj4gLSAgICAgICAgICAgICBHRU44 X1BQQVQoNywgQ0hWX1BQQVRfU05PT1ApOwo+Pj4gICAtICAgICBJOTE1X1dSSVRFKEdFTjhfUFJJ VkFURV9QQVRfTE8sIHBhdCk7Cj4+PiAtICAgICAgIEk5MTVfV1JJVEUoR0VOOF9QUklWQVRFX1BB VF9ISSwgcGF0ID4+IDMyKTsKPj4+ICsgICAgICAgLyogU2VlIGdlbjhfcHRlX2VuY29kZSgpIGZv ciB0aGUgbWFwcGluZyBmcm9tIGNhY2hlLWxldmVsIHRvIFBQQVQKPj4+ICovCj4+PiArICAgICAg IF9fYWxsb2NfcHBhdF9lbnRyeShwcGF0LCBQUEFUX0NBQ0hFRF9QREVfSU5ERVgsIENIVl9QUEFU X1NOT09QKTsKPj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQQVRfRElTUExB WV9FTExDX0lOREVYLCAwKTsKPj4+ICsgICAgICAgX19hbGxvY19wcGF0X2VudHJ5KHBwYXQsIFBQ QVRfVU5DQUNIRURfSU5ERVgsIDApOwo+Pj4gKyAgICAgICBfX2FsbG9jX3BwYXRfZW50cnkocHBh dCwgUFBBVF9DQUNIRURfSU5ERVgsIENIVl9QUEFUX1NOT09QKTsKPj4+ICAgfQo+Pj4gICAgIHN0 YXRpYyB2b2lkIGdlbjZfZ21jaF9yZW1vdmUoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0p Cj4+PiBAQCAtMjkxNywxMiArMzA4MCwyNyBAQCBzdGF0aWMgdm9pZCBnZW42X2dtY2hfcmVtb3Zl KHN0cnVjdAo+Pj4gaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPj4+ICAgICBzdGF0aWMgdm9pZCBz ZXR1cF9wcml2YXRlX3BhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+PiAg IHsKPj4+ICsgICAgICAgc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYtPnBwYXQ7 Cj4+PiArICAgICAgIGludCBpOwo+Pj4gKwo+Pj4gKyAgICAgICBwcGF0LT5pOTE1ID0gZGV2X3By aXY7Cj4+PiArCj4+PiAgICAgICAgIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQo+Pj4g LSAgICAgICAgICAgICAgIGNubF9zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOwo+Pj4gKyAg ICAgICAgICAgICAgIGNubF9zZXR1cF9wcml2YXRlX3BwYXQocHBhdCk7Cj4+PiAgICAgICAgIGVs c2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpIHx8IElTX0dFTjlfTFAoZGV2X3ByaXYpKQo+ Pj4gLSAgICAgICAgICAgICAgIGNodl9zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOwo+Pj4g KyAgICAgICAgICAgICAgIGNodl9zZXR1cF9wcml2YXRlX3BwYXQocHBhdCk7Cj4+PiAgICAgICAg IGVsc2UKPj4+IC0gICAgICAgICAgICAgICBiZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KGRldl9wcml2 KTsKPj4+ICsgICAgICAgICAgICAgICBiZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KHBwYXQpOwo+Pj4g Kwo+Pj4gKyAgICAgICBHRU1fQlVHX09OKHBwYXQtPm1heF9lbnRyaWVzID4gSU5URUxfTUFYX1BQ QVRfRU5UUklFUyk7Cj4+PiArCj4+PiArICAgICAgIGZvcl9lYWNoX2NsZWFyX2JpdChpLCBwcGF0 LT51c2VkLCBwcGF0LT5tYXhfZW50cmllcykgewo+Pj4gKyAgICAgICAgICAgICAgIHBwYXQtPmVu dHJpZXNbaV0udmFsdWUgPSBwcGF0LT5jbGVhcl92YWx1ZTsKPj4+ICsgICAgICAgICAgICAgICBw cGF0LT5lbnRyaWVzW2ldLnBwYXQgPSBwcGF0Owo+Pj4gKyAgICAgICAgICAgICAgIHNldF9iaXQo aSwgcHBhdC0+ZGlydHkpOwo+Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArICAgICAgIHBwYXQtPnVw ZGF0ZV9odyhkZXZfcHJpdik7Cj4+PiAgIH0KPj4+ICAgICBzdGF0aWMgaW50IGdlbjhfZ21jaF9w cm9iZShzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+Pj4gQEAgLTMyMzYsMTMgKzM0MTQsMTAgQEAg dm9pZCBpOTE1X2dlbV9yZXN0b3JlX2d0dF9tYXBwaW5ncyhzdHJ1Y3QKPj4+IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+Pj4gICAgICAgICBnZ3R0LT5iYXNlLmNsb3NlZCA9IGZhbHNlOwo+ Pj4gICAgICAgICBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA4KSB7Cj4+PiAtICAgICAgICAg ICAgICAgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTApCj4+PiAtICAgICAgICAgICAgICAg ICAgICAgICBjbmxfc2V0dXBfcHJpdmF0ZV9wcGF0KGRldl9wcml2KTsKPj4+IC0gICAgICAgICAg ICAgICBlbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSB8fCBJU19HRU45X0xQKGRldl9w cml2KSkKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgIGNodl9zZXR1cF9wcml2YXRlX3BwYXQo ZGV2X3ByaXYpOwo+Pj4gLSAgICAgICAgICAgICAgIGVsc2UKPj4+IC0gICAgICAgICAgICAgICAg ICAgICAgIGJkd19zZXR1cF9wcml2YXRlX3BwYXQoZGV2X3ByaXYpOwo+Pj4gKyAgICAgICAgICAg ICAgIHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0Owo+Pj4gICArICAg ICAgICAgICAgIGJpdG1hcF9zZXQocHBhdC0+ZGlydHksIDAsIHBwYXQtPm1heF9lbnRyaWVzKTsK Pj4+ICsgICAgICAgICAgICAgICBkZXZfcHJpdi0+cHBhdC51cGRhdGVfaHcoZGV2X3ByaXYpOwo+ Pj4gICAgICAgICAgICAgICAgIHJldHVybjsKPj4+ICAgICAgICAgfQo+Pj4gICBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPj4+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPj4+IGluZGV4IGI0ZTNhYTcuLmUxMGNhODkgMTAwNjQ0 Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+Pj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPj4+IEBAIC0xNDMsNiArMTQzLDEx IEBAIHR5cGVkZWYgdTY0IGdlbjhfcHBndHRfcG1sNGVfdDsKPj4+ICAgI2RlZmluZSBHRU44X1BQ QVRfRUxMQ19PVkVSUklERSAgICAgICAgICAgICAgICgwPDwyKQo+Pj4gICAjZGVmaW5lIEdFTjhf UFBBVChpLCB4KSAgICAgICAgICAgICAgICAgICAgICAgKCh1NjQpKHgpIDw8ICgoaSkgKiA4KSkK Pj4+ICAgKyNkZWZpbmUgR0VOOF9QUEFUX0dFVF9DQSh4KSAoKHgpICYgMykKPj4+ICsjZGVmaW5l IEdFTjhfUFBBVF9HRVRfVEMoeCkgKCh4KSAmICgzIDw8IDIpKQo+Pj4gKyNkZWZpbmUgR0VOOF9Q UEFUX0dFVF9BR0UoeCkgKCh4KSAmICgzIDw8IDQpKQo+Pj4gKyNkZWZpbmUgQ0hWX1BQQVRfR0VU X1NOT09QKHgpICgoeCkgJiAoMSA8PCA2KSkKPj4+ICsKPj4+ICAgc3RydWN0IHNnX3RhYmxlOwo+ Pj4gICAgIHN0cnVjdCBpbnRlbF9yb3RhdGlvbl9pbmZvIHsKPj4+IEBAIC01MzYsNiArNTQxLDM3 IEBAIGk5MTVfdm1fdG9fZ2d0dChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPj4+ICAg ICAgICAgcmV0dXJuIGNvbnRhaW5lcl9vZih2bSwgc3RydWN0IGk5MTVfZ2d0dCwgYmFzZSk7Cj4+ PiAgIH0KPj4+ICAgKyNkZWZpbmUgSU5URUxfTUFYX1BQQVRfRU5UUklFUyA4Cj4+PiArI2RlZmlu ZSBJTlRFTF9QUEFUX1BFUkZFQ1RfTUFUQ0ggKH4wVSkKPj4+ICsKPj4+ICtzdHJ1Y3QgaW50ZWxf cHBhdDsKPj4+ICsKPj4+ICtzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSB7Cj4+PiArICAgICAgIHN0 cnVjdCBpbnRlbF9wcGF0ICpwcGF0Owo+Pj4gKyAgICAgICBzdHJ1Y3Qga3JlZiByZWY7Cj4+PiAr ICAgICAgIHU4IHZhbHVlOwo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IGludGVsX3BwYXQgewo+ Pj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSBlbnRyaWVzW0lOVEVMX01BWF9QUEFU X0VOVFJJRVNdOwo+Pj4gKyAgICAgICBERUNMQVJFX0JJVE1BUCh1c2VkLCBJTlRFTF9NQVhfUFBB VF9FTlRSSUVTKTsKPj4+ICsgICAgICAgREVDTEFSRV9CSVRNQVAoZGlydHksIElOVEVMX01BWF9Q UEFUX0VOVFJJRVMpOwo+Pj4gKyAgICAgICB1bnNpZ25lZCBpbnQgbWF4X2VudHJpZXM7Cj4+PiAr ICAgICAgIHU4IGNsZWFyX3ZhbHVlOwo+Pj4gKyAgICAgICAvKgo+Pj4gKyAgICAgICAgKiBSZXR1 cm4gYSBzY29yZSB0byBzaG93IGhvdyB0d28gUFBBVCB2YWx1ZXMgbWF0Y2gsCj4+PiArICAgICAg ICAqIGEgSU5URUxfUFBBVF9QRVJGRUNUX01BVENIIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2gK Pj4+ICsgICAgICAgICovCj4+PiArICAgICAgIHVuc2lnbmVkIGludCAoKm1hdGNoKSh1OCBzcmMs IHU4IGRzdCk7Cj4+PiArICAgICAgIHZvaWQgKCp1cGRhdGVfaHcpKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KTsKPj4+ICsKPj4+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTU7Cj4+PiArfTsKPj4+ICsKPj4+ICtjb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAq Cj4+PiAraW50ZWxfcHBhdF9nZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHU4IHZh bHVlKTsKPj4+ICt2b2lkIGludGVsX3BwYXRfcHV0KGNvbnN0IHN0cnVjdCBpbnRlbF9wcGF0X2Vu dHJ5ICplbnRyeSk7Cj4+PiArCj4+PiAgIGludCBpOTE1X2dlbV9pbml0X2FsaWFzaW5nX3BwZ3R0 KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPj4+ICAgdm9pZCBpOTE1X2dlbV9maW5p X2FsaWFzaW5nX3BwZ3R0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPj4+Cj4+Cj4+ Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRl bC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgoK Ci0tIApSb2RyaWdvIFZpdmkKQmxvZzogaHR0cDovL2Jsb2cudml2aS5lbmcuYnIKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==