From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 1/5] drm/i915: Always pin the fence for scanout on gen2/3 and primary planes Date: Wed, 22 Nov 2017 16:42:58 +0200 Message-ID: <20171122144258.GN10981@intel.com> References: <20171116191451.28823-1-ville.syrjala@linux.intel.com> <20171116204923.umwm27l4r2kcldqe@intel.com> <20171117132135.GI10981@intel.com> <20171117172933.kx55dx6l3iihn47o@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8D4A389CB3 for ; Wed, 22 Nov 2017 14:43:02 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20171117172933.kx55dx6l3iihn47o@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rodrigo Vivi Cc: intel-gfx@lists.freedesktop.org, "Pandiyan, Dhinakaran" List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBOb3YgMTcsIDIwMTcgYXQgMDk6Mjk6MzNBTSAtMDgwMCwgUm9kcmlnbyBWaXZpIHdy b3RlOgo+IE9uIEZyaSwgTm92IDE3LCAyMDE3IGF0IDAxOjIxOjM1UE0gKzAwMDAsIFZpbGxlIFN5 cmrDpGzDpCB3cm90ZToKPiA+IE9uIFRodSwgTm92IDE2LCAyMDE3IGF0IDEyOjQ5OjIzUE0gLTA4 MDAsIFJvZHJpZ28gVml2aSB3cm90ZToKPiA+ID4gT24gVGh1LCBOb3YgMTYsIDIwMTcgYXQgMDc6 MTQ6NDdQTSArMDAwMCwgVmlsbGUgU3lyamFsYSB3cm90ZToKPiA+ID4gPiBGcm9tOiBWaWxsZSBT eXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gPiA+IAo+ID4gPiA+ IFRoZSBjdXJyZW50IGNvZGUgaXMgdHJ5aW5nIHRvIGJlIGxhenkgd2l0aCBmZW5jZXMgb24gc2Nh bm91dCBidWZmZXJzLgo+ID4gPiA+IFRoYXQgbG9va3MgYnJva2VuIGZvciBzZXZlcmFsIHJlYXNv bnM6Cj4gPiA+ID4gKiBnZW4yLzMgYWx3YXlzIG5lZWQgYSBmZW5jZSBmb3IgdGlsZWQgc2Nhbm91 dAo+ID4gPiA+ICogdGhlIHVucGluIGRvZXNuJ3Qga25vdyB3aGV0aGVyIHdlIHBpbm5lZCB0aGUg ZmVuY2Ugb3Igbm90IHNvIGl0Cj4gPiA+ID4gICBtYXkgdW5waW4gc29tZXRoaW5nIHdlIGRvbid0 IG93bgo+ID4gPiA+ICogRkJDIEdUVCB0cmFja2luZyBuZWVkcyBhIGZlbmNlIChub3Qgc3VyZSB3 ZSBoYXZlIHByb3BlciBmYWxsYmFjawo+ID4gPiA+ICAgZm9yIHdoZW4gdGhlcmUgaXMgbm8gZmVu Y2UpCj4gPiA+IAo+ID4gPiBPaGghIEkgd29uZGVyIGlmIHRoaXMgd291bGQgYWxzbyBzb2x2ZSBm ZXcgb2Ygb2xkIFBTUiBjYXNlcy4uLiBQU1IgcmUtdXNlcwo+ID4gPiBGQkMgR1RUIHRyYWNraW5n Li4uCj4gPiAKPiA+IFRoYXQgd2hvbGUgY29uY2VwdCBzZWVtcyBhIGJpdCBicm9rZW4uIEFGQUlD UyB3ZSBoYXZlIG5vICJpcyBGQkMgZW5hYmxlZAo+ID4gb24gdGhlIGFwcHJvcHJpYXRlIHBsYW5l PyIgY2hlY2tzIGluIHRoZSBQU1IgY29kZS4gSSdtIG5vdCBxdWl0ZSBzdXJlCj4gPiBob3cgaXQg d291bGQgaGFuZGxlIG11bHRpcGxlIHBsYW5lcyBlaXRoZXIuIEkgZ3Vlc3Mgd2Ugc2hvdWxkIGJl Cj4gPiBkaXNhYmxpbmcgUFNSIHdoZW4gbXVsdGlwbGUgcGxhbmVzIGFyZSBlbmFibGVkPwo+IAo+ IElyb25pY2FsbHkgdGhpcyBjYXNlIGlzIGdvb2Qgb24gUFNSIGFmYWkgY2FuIHJlbWVtYmVyLi4u CgpPSywgc28gaXQgd29ya3MgYnkgbHVjayB0aGVuIDopCgo+IFRoZSBvbGQgcHJvYmxlbSB3aXRo IFBTUiB0aGF0IGlzIGJhY2sgdG8gcGljdHVyZSBpcyBqdXN0IHByaW1hcnkgcGxhbmUgd2l0aAo+ IGZiZGV2L2ZiY29uLi4uIDovCj4gCj4gPiAKPiA+ID4gCj4gPiA+IEFuZCAiZmFsbGJhY2siIGZv ciBib3RoIGlzIHRoZSBmcm9udGJ1ZmZlcl90cmFja2luZwo+ID4gCj4gPiBJJ20gbm90IHN1cmUg aG93IGZyb25idWZmZXIgdHJhY2tpbmcgaGFuZGxlcyBHVFQgbW1hcHMuIEkgdGhvdWdodCBpdAo+ ID4gZGlkbid0IGV2ZW4gdHJ5LiBJZiBJJ20gbWlzdGFrZW4gdGhlbiBJJ20gdGhpbmtpbmcgd2Ug c2hvdWxkIHBlcmhhcHMKPiA+IGV2ZW4gc3RvcCB1c2luZyB0aGUgR1RUIHRyYWNraW5nIGVudGly ZWx5IGp1c3QgdG8gbWFrZSB0aGUgd2hvbGUgdGhpbmcKPiA+IG1vcmUgY29uc2lzdGVudC4gSGF2 aW5nIHR3byB3YXlzIHRvIGRvIHRoZSBzYW1lIHRoaW5nIGRvZXNuJ3QgYXBwZWFsIHRvCj4gPiBt ZS4KPiAKPiBXZWxsLi4uIHRoZSBmcm9udGJ1ZmZlciB0cmFja2luZyB3b3VsZCBraWxsIHRoZSBi ZW5lZml0cyBvZiBQU1IyLgoKV2hpY2ggYmVuZWZpdCBpcyB0aGF0PyBQYXJ0aWFsIHVwZGF0ZXMg b3Igc29tZXRoaW5nPyBJIGRvbid0IHRoaW5rIEZCQwp0cmFja2luZyB3b3VsZCBoZWxwIG11Y2gg dGhlcmUgYmVjYXVzZSBtb2Rlcm4gcGxhdGZvcm1zIGp1c3QgbnVrZSB0aGUKZW50aXJlIGNvbXBy ZXNzZWQgYnVmZmVyIG9uIGFueSBtb2RpZmljYXRpb24uIFdlbGwsIG1heWJlIEdUVCB0cmFja2lu ZwpzdGlsbCBoYXMgc21hbGxlciBncmFudWxhcml0eSwgYnV0IHRoYXQgc2VlbXMgbGlrZSBhIG5p Y2hlIHVzZSBjYXNlIHNvCm5vdCBtdWNoIGJlbmVmaXQgSSB0aGluay4KCj4gU28gaWYgd2UgY291 bGQgbWFrZSB0aGF0IEhXIHRyYWNraW5nIHJlYWxseSB3b3JraW5nIEkgd291bGQgcHJlZmVyLgoK QWxsIGl0IHdvdWxkIHRha2UgaXMgc29tZW9uZSByZXN1cnJlY3RpbmcgbXkgb2xkIEZCQyB3b3Jr LiBJIGhhZCBmdWxsCkhXIHRyYWNraW5nIGltcGxlbWVudGVkIHRoZXJlLCBidXQgYXQgdGhlIHRp bWUgbm8gb25lIHdhbnRlZCBpdC4KCj4gT3RoZXJ3aXNlIHdlIHdpbGwgaGF2ZSB0byBoYXZlIGJv dGguLi4gYXQgbGVhc3Qgb25lIGZvciBjYXNlcyB3aGVyZQo+IGh3IHRyYWNraW5nIHdvcmtzIGFu ZCBvdGhlciBmb3IgdGhlIGNhc2VzIGh3IHRyYWNraW5nIGRvZXNuJ3Qgd29yay4uLiA6Lwo+IAo+ ID4gCj4gPiA+IAo+ID4gPiA+IAo+ID4gPiA+IFNvIHRvIGZpeCB0aGlzIGFsd2F5cyB1c2UgYSBm ZW5jZSBmb3IgZ2VuMi8zLCBhbmQgZm9yIHByaW1hcnkgcGxhbmVzIG9uCj4gPiA+ID4gb3RoZXIg cGxhdGZvcm1zIChmb3IgRkJDKS4gRm9yIHNwcml0ZXMgYW5kIGN1cnNvciB3ZSBuZXZlciBuZWVk IGEgZmVuY2UKPiA+ID4gPiBzbyBkb24ndCBldmVuIHRyeSB0byBnZXQgb25lLiAgU2luY2Ugd2Ug bm93IGtub3cgd2hldGhlciBhIGZlbmNlIHdhcwo+ID4gPiA+IHBpbm5lZCB3ZSBjYW4gc2FmZWx5 IHVucGluIGl0IHRvby4KPiA+ID4gPiAKPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJq w6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gPiA+IC0tLQo+ID4gPiA+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgfCAgMiArLQo+ID4gPiA+ICBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgfCAgNCArLS0KPiA+ID4gPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgNTUgKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tCj4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oICAgICB8ICA3ICsrKy0tCj4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Zi ZGV2LmMgICB8IDE3ICsrKysrKysrKy0tCj4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX292ZXJsYXkuYyB8ICAyICstCj4gPiA+ID4gIDYgZmlsZXMgY2hhbmdlZCwgNjYgaW5zZXJ0 aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCj4gPiA+ID4gCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCj4gPiA+ID4gaW5kZXggMjE1OGE3NThhMTdkLi44YzZkMGI3YWM5YTUgMTAwNjQ0Cj4g PiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+ID4gPiBAQCAtMzc4Myw3ICszNzgz LDcgQEAgaW50IF9fbXVzdF9jaGVjawo+ID4gPiA+ICBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2Nw dV9kb21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgYm9vbCB3cml0ZSk7Cj4g PiA+ID4gIHN0cnVjdCBpOTE1X3ZtYSAqIF9fbXVzdF9jaGVjawo+ID4gPiA+ICBpOTE1X2dlbV9v YmplY3RfcGluX3RvX2Rpc3BsYXlfcGxhbmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKPiA+ID4gPiAtCQkJCSAgICAgdTMyIGFsaWdubWVudCwKPiA+ID4gPiArCQkJCSAgICAgdTMy IGFsaWdubWVudCwgYm9vbCBuZWVkc19mZW5jZSwKPiA+ID4gPiAgCQkJCSAgICAgY29uc3Qgc3Ry dWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3KTsKPiA+ID4gPiAgdm9pZCBpOTE1X2dlbV9vYmplY3Rf dW5waW5fZnJvbV9kaXNwbGF5X3BsYW5lKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKPiA+ID4gPiAg aW50IGk5MTVfZ2VtX29iamVjdF9hdHRhY2hfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ID4gPiA+IGluZGV4IDYxYmEz MjFlOTk3MC4uYWYxODE2OGU0OGUzIDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jCj4gPiA+ID4gQEAgLTM5NDQsNyArMzk0NCw3IEBAIGludCBpOTE1X2dlbV9zZXRfY2Fj aGluZ19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ID4gPiA+ICAg Ki8KPiA+ID4gPiAgc3RydWN0IGk5MTVfdm1hICoKPiA+ID4gPiAgaTkxNV9nZW1fb2JqZWN0X3Bp bl90b19kaXNwbGF5X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gPiA+ ID4gLQkJCQkgICAgIHUzMiBhbGlnbm1lbnQsCj4gPiA+ID4gKwkJCQkgICAgIHUzMiBhbGlnbm1l bnQsIGJvb2wgbmVlZHNfZmVuY2UsCj4gPiA+ID4gIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBpOTE1 X2dndHRfdmlldyAqdmlldykKPiA+ID4gPiAgewo+ID4gPiA+ICAJc3RydWN0IGk5MTVfdm1hICp2 bWE7Cj4gPiA+ID4gQEAgLTM5OTcsNyArMzk5Nyw3IEBAIGk5MTVfZ2VtX29iamVjdF9waW5fdG9f ZGlzcGxheV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ID4gPiA+ICAJ CSAqIGhhcHB5IHRvIHNjYW5vdXQgZnJvbSBhbnl3aGVyZSB3aXRoaW4gaXRzIGdsb2JhbCBhcGVy dHVyZS4KPiA+ID4gPiAgCQkgKi8KPiA+ID4gPiAgCQlmbGFncyA9IDA7Cj4gPiA+ID4gLQkJaWYg KEhBU19HTUNIX0RJU1BMQVkoaTkxNSkpCj4gPiA+ID4gKwkJaWYgKEhBU19HTUNIX0RJU1BMQVko aTkxNSkgfHwgbmVlZHNfZmVuY2UpCj4gPiA+ID4gIAkJCWZsYWdzID0gUElOX01BUFBBQkxFOwo+ ID4gPiA+ICAJCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihvYmosIHZpZXcsIDAsIGFs aWdubWVudCwgZmxhZ3MpOwo+ID4gPiA+ICAJfQo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMKPiA+ID4gPiBpbmRleCBlNmZjYmM1YWJjNzUuLjA2NTdlMDNlODcxYSAxMDA2 NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gPiBA QCAtMjE1NCw4ICsyMTU0LDIxIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfc3VyZl9hbGln bm1lbnQoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4gPiA+ID4gIAl9Cj4gPiA+ ID4gIH0KPiA+ID4gPiAgCj4gPiA+ID4gK3N0YXRpYyBib29sIGludGVsX3BsYW5lX25lZWRzX2Zl bmNlKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4gPiA+ID4g K3sKPiA+ID4gPiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShw bGFuZV9zdGF0ZS0+YmFzZS5wbGFuZSk7Cj4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gPiA+ID4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKHBsYW5lX3N0YXRlLT5iYXNl LmZiKTsKPiA+ID4gPiArCj4gPiA+ID4gKwlpZiAoaTkxNV9nZW1fb2JqZWN0X2dldF90aWxpbmco b2JqKSA9PSBJOTE1X1RJTElOR19OT05FKQo+ID4gPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ID4g PiArCj4gPiA+ID4gKwlyZXR1cm4gSU5URUxfR0VOKGRldl9wcml2KSA8IDQgfHwgcGxhbmUtPmlk ID09IFBMQU5FX1BSSU1BUlk7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gIHN0cnVjdCBp OTE1X3ZtYSAqCj4gPiA+ID4gLWludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKmZiLCB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gPiA+ID4gK2ludGVsX3Bp bl9hbmRfZmVuY2VfZmJfb2JqKGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ID4g PiA+ICsJCQkgICB1bnNpZ25lZCBpbnQgcm90YXRpb24sIGJvb2wgbmVlZHNfZmVuY2UpCj4gPiA+ ID4gIHsKPiA+ID4gPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYi0+ZGV2Owo+ID4gPiA+ ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwo+ID4g PiA+IEBAIC0yMTg5LDExICsyMjAyLDE2IEBAIGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gPiA+ID4g IAo+ID4gPiA+ICAJYXRvbWljX2luYygmZGV2X3ByaXYtPmdwdV9lcnJvci5wZW5kaW5nX2ZiX3Bp bik7Cj4gPiA+ID4gIAo+ID4gPiA+IC0Jdm1hID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl90b19kaXNw bGF5X3BsYW5lKG9iaiwgYWxpZ25tZW50LCAmdmlldyk7Cj4gPiA+ID4gKwl2bWEgPSBpOTE1X2dl bV9vYmplY3RfcGluX3RvX2Rpc3BsYXlfcGxhbmUob2JqLCBhbGlnbm1lbnQsCj4gPiA+ID4gKwkJ CQkJCSAgIG5lZWRzX2ZlbmNlLCAmdmlldyk7Cj4gPiA+ID4gIAlpZiAoSVNfRVJSKHZtYSkpCj4g PiA+ID4gIAkJZ290byBlcnI7Cj4gPiA+ID4gIAo+ID4gPiA+IC0JaWYgKGk5MTVfdm1hX2lzX21h cF9hbmRfZmVuY2VhYmxlKHZtYSkpIHsKPiA+ID4gPiArCWlmIChuZWVkc19mZW5jZSkgewo+ID4g PiA+ICsJCWludCByZXQ7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJCVdBUk5fT04oIWk5MTVfdm1hX2lz X21hcF9hbmRfZmVuY2VhYmxlKHZtYSkpOwo+ID4gPiA+ICsKPiA+ID4gPiAgCQkvKiBJbnN0YWxs IGEgZmVuY2UgZm9yIHRpbGVkIHNjYW4tb3V0LiBQcmUtaTk2NSBhbHdheXMgbmVlZHMgYQo+ID4g PiA+ICAJCSAqIGZlbmNlLCB3aGVyZWFzIDk2NSsgb25seSByZXF1aXJlcyBhIGZlbmNlIGlmIHVz aW5nCj4gPiA+ID4gIAkJICogZnJhbWVidWZmZXIgY29tcHJlc3Npb24uICBGb3Igc2ltcGxpY2l0 eSwgd2UgYWx3YXlzLCB3aGVuCj4gPiA+ID4gQEAgLTIyMTAsNyArMjIyOCwxMSBAQCBpbnRlbF9w aW5fYW5kX2ZlbmNlX2ZiX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgdW5zaWduZWQg aW50IHJvdGF0aW9uKQo+ID4gPiA+ICAJCSAqIHNvbWV0aGluZyBhbmQgdHJ5IHRvIHJ1biB0aGUg c3lzdGVtIGluIGEgImxlc3MgdGhhbiBvcHRpbWFsIgo+ID4gPiA+ICAJCSAqIG1vZGUgdGhhdCBt YXRjaGVzIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24uCj4gPiA+ID4gIAkJICovCj4gPiA+ID4gLQkJ aTkxNV92bWFfcGluX2ZlbmNlKHZtYSk7Cj4gPiA+ID4gKwkJcmV0ID0gaTkxNV92bWFfcGluX2Zl bmNlKHZtYSk7Cj4gPiA+ID4gKwkJaWYgKHJldCkgewo+ID4gPiA+ICsJCQl2bWEgPSBFUlJfUFRS KHJldCk7Cj4gPiA+ID4gKwkJCWdvdG8gZXJyOwo+ID4gPiA+ICsJCX0KPiA+ID4gPiAgCX0KPiA+ ID4gPiAgCj4gPiA+ID4gIAlpOTE1X3ZtYV9nZXQodm1hKTsKPiA+ID4gPiBAQCAtMjIyMSwxMSAr MjI0MywxMiBAQCBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwgdW5zaWduZWQgaW50IHJvdGF0aW9uKQo+ID4gPiA+ICAJcmV0dXJuIHZtYTsKPiA+ ID4gPiAgfQo+ID4gPiA+ICAKPiA+ID4gPiAtdm9pZCBpbnRlbF91bnBpbl9mYl92bWEoc3RydWN0 IGk5MTVfdm1hICp2bWEpCj4gPiA+ID4gK3ZvaWQgaW50ZWxfdW5waW5fZmJfdm1hKHN0cnVjdCBp OTE1X3ZtYSAqdm1hLCBib29sIG5lZWRzX2ZlbmNlKQo+ID4gPiA+ICB7Cj4gPiA+ID4gIAlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZ2bWEtPnZtLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiA+ID4g PiAgCj4gPiA+ID4gLQlpOTE1X3ZtYV91bnBpbl9mZW5jZSh2bWEpOwo+ID4gPiA+ICsJaWYgKG5l ZWRzX2ZlbmNlKQo+ID4gPiA+ICsJCWk5MTVfdm1hX3VucGluX2ZlbmNlKHZtYSk7Cj4gPiA+ID4g IAlpOTE1X2dlbV9vYmplY3RfdW5waW5fZnJvbV9kaXNwbGF5X3BsYW5lKHZtYSk7Cj4gPiA+ID4g IAlpOTE1X3ZtYV9wdXQodm1hKTsKPiA+ID4gPiAgfQo+ID4gPiA+IEBAIC0yODE2LDYgKzI4Mzks NyBAQCBpbnRlbF9maW5kX2luaXRpYWxfcGxhbmVfb2JqKHN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjLAo+ID4gPiA+ICAJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9zdGF0ZSA9 Cj4gPiA+ID4gIAkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmVfc3RhdGUpOwo+ID4gPiA+ICAJ c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gPiA+ID4gKwlib29sIG5lZWRzX2ZlbmNlOwo+ ID4gPiA+ICAKPiA+ID4gPiAgCWlmICghcGxhbmVfY29uZmlnLT5mYikKPiA+ID4gPiAgCQlyZXR1 cm47Cj4gPiA+ID4gQEAgLTI4NjksOCArMjg5MywxMCBAQCBpbnRlbF9maW5kX2luaXRpYWxfcGxh bmVfb2JqKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAo+ID4gPiA+ICAKPiA+ID4gPiAg dmFsaWRfZmI6Cj4gPiA+ID4gIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gPiA+ ID4gKwluZWVkc19mZW5jZSA9IGludGVsX3BsYW5lX25lZWRzX2ZlbmNlKGludGVsX3N0YXRlKTsK PiA+ID4gPiAgCWludGVsX3N0YXRlLT52bWEgPQo+ID4gPiA+IC0JCWludGVsX3Bpbl9hbmRfZmVu Y2VfZmJfb2JqKGZiLCBwcmltYXJ5LT5zdGF0ZS0+cm90YXRpb24pOwo+ID4gPiA+ICsJCWludGVs X3Bpbl9hbmRfZmVuY2VfZmJfb2JqKGZiLCBwcmltYXJ5LT5zdGF0ZS0+cm90YXRpb24sCj4gPiA+ ID4gKwkJCQkJICAgbmVlZHNfZmVuY2UpOwo+ID4gPiA+ICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7Cj4gPiA+ID4gIAlpZiAoSVNfRVJSKGludGVsX3N0YXRlLT52bWEpKSB7Cj4g PiA+ID4gIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGluIGJvb3QgZmIgb24gcGlwZSAlZDogJWxp XG4iLAo+ID4gPiA+IEBAIC0xMjc1Myw5ICsxMjc3OSwxMiBAQCBpbnRlbF9wcmVwYXJlX3BsYW5l X2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4gPiA+ICAKPiA+ID4gPiAgCQlyZXQgPSBp OTE1X2dlbV9vYmplY3RfYXR0YWNoX3BoeXMob2JqLCBhbGlnbik7Cj4gPiA+ID4gIAl9IGVsc2Ug ewo+ID4gPiA+ICsJCWJvb2wgbmVlZHNfZmVuY2UgPQo+ID4gPiA+ICsJCQlpbnRlbF9wbGFuZV9u ZWVkc19mZW5jZSh0b19pbnRlbF9wbGFuZV9zdGF0ZShuZXdfc3RhdGUpKTsKPiA+ID4gPiAgCQlz dHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiA+ID4gPiAgCj4gPiA+ID4gLQkJdm1hID0gaW50ZWxfcGlu X2FuZF9mZW5jZV9mYl9vYmooZmIsIG5ld19zdGF0ZS0+cm90YXRpb24pOwo+ID4gPiA+ICsJCXZt YSA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKGZiLCBuZXdfc3RhdGUtPnJvdGF0aW9uLAo+ ID4gPiA+ICsJCQkJCQkgbmVlZHNfZmVuY2UpOwo+ID4gPiA+ICAJCWlmICghSVNfRVJSKHZtYSkp Cj4gPiA+ID4gIAkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKG5ld19zdGF0ZSktPnZtYSA9IHZtYTsK PiA+ID4gPiAgCQllbHNlCj4gPiA+ID4gQEAgLTEyODA5LDggKzEyODM4LDExIEBAIGludGVsX2Ns ZWFudXBfcGxhbmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiA+ID4gIAkvKiBTaG91 bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGludGVsX3ByZXBhcmVfcGxhbmVf ZmIoKSEgKi8KPiA+ID4gPiAgCXZtYSA9IGZldGNoX2FuZF96ZXJvKCZ0b19pbnRlbF9wbGFuZV9z dGF0ZShvbGRfc3RhdGUpLT52bWEpOwo+ID4gPiA+ICAJaWYgKHZtYSkgewo+ID4gPiA+ICsJCWJv b2wgbmVlZHNfZmVuY2UgPQo+ID4gPiA+ICsJCQlpbnRlbF9wbGFuZV9uZWVkc19mZW5jZSh0b19p bnRlbF9wbGFuZV9zdGF0ZShvbGRfc3RhdGUpKTsKPiA+ID4gPiArCj4gPiA+ID4gIAkJbXV0ZXhf bG9jaygmcGxhbmUtPmRldi0+c3RydWN0X211dGV4KTsKPiA+ID4gPiAtCQlpbnRlbF91bnBpbl9m Yl92bWEodm1hKTsKPiA+ID4gPiArCQlpbnRlbF91bnBpbl9mYl92bWEodm1hLCBuZWVkc19mZW5j ZSk7Cj4gPiA+ID4gIAkJbXV0ZXhfdW5sb2NrKCZwbGFuZS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ ID4gPiA+ICAJfQo+ID4gPiA+ICB9Cj4gPiA+ID4gQEAgLTEzMTUyLDcgKzEzMTg0LDggQEAgaW50 ZWxfbGVnYWN5X2N1cnNvcl91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiA+ID4g IAkJCWdvdG8gb3V0X3VubG9jazsKPiA+ID4gPiAgCQl9Cj4gPiA+ID4gIAl9IGVsc2Ugewo+ID4g PiA+IC0JCXZtYSA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKGZiLCBuZXdfcGxhbmVfc3Rh dGUtPnJvdGF0aW9uKTsKPiA+ID4gPiArCQl2bWEgPSBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29i aihmYiwgbmV3X3BsYW5lX3N0YXRlLT5yb3RhdGlvbiwKPiA+ID4gPiArCQkJCQkJIGZhbHNlKTsK PiA+ID4gPiAgCQlpZiAoSVNfRVJSKHZtYSkpIHsKPiA+ID4gPiAgCQkJRFJNX0RFQlVHX0tNUygi ZmFpbGVkIHRvIHBpbiBvYmplY3RcbiIpOwo+ID4gPiA+ICAKPiA+ID4gPiBAQCAtMTMxODMsNyAr MTMyMTYsNyBAQCBpbnRlbF9sZWdhY3lfY3Vyc29yX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKPiA+ID4gPiAgCj4gPiA+ID4gIAlvbGRfdm1hID0gZmV0Y2hfYW5kX3plcm8oJnRvX2lu dGVsX3BsYW5lX3N0YXRlKG9sZF9wbGFuZV9zdGF0ZSktPnZtYSk7Cj4gPiA+ID4gIAlpZiAob2xk X3ZtYSkKPiA+ID4gPiAtCQlpbnRlbF91bnBpbl9mYl92bWEob2xkX3ZtYSk7Cj4gPiA+ID4gKwkJ aW50ZWxfdW5waW5fZmJfdm1hKG9sZF92bWEsIGZhbHNlKTsKPiA+ID4gPiAgCj4gPiA+ID4gIG91 dF91bmxvY2s6Cj4gPiA+ID4gIAltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211 dGV4KTsKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gPiA+IGluZGV4IGU5YjY2 ZTBjYjY0Ny4uYzEzZjE1ZWYzNDJiIDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oCj4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHJ2LmgKPiA+ID4gPiBAQCAtOTA1LDcgKzkwNSw3IEBAIHN0cnVjdCBjeHNyX2xhdGVuY3kg ewo+ID4gPiA+ICAjZGVmaW5lIHRvX2ludGVsX2ZyYW1lYnVmZmVyKHgpIGNvbnRhaW5lcl9vZih4 LCBzdHJ1Y3QgaW50ZWxfZnJhbWVidWZmZXIsIGJhc2UpCj4gPiA+ID4gICNkZWZpbmUgdG9faW50 ZWxfcGxhbmUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBpbnRlbF9wbGFuZSwgYmFzZSkKPiA+ ID4gPiAgI2RlZmluZSB0b19pbnRlbF9wbGFuZV9zdGF0ZSh4KSBjb250YWluZXJfb2YoeCwgc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlLCBiYXNlKQo+ID4gPiA+IC0jZGVmaW5lIGludGVsX2ZiX29i aih4KSAoeCA/IHRvX2ludGVsX2ZyYW1lYnVmZmVyKHgpLT5vYmogOiBOVUxMKQo+ID4gPiA+ICsj ZGVmaW5lIGludGVsX2ZiX29iaih4KSAoKHgpID8gdG9faW50ZWxfZnJhbWVidWZmZXIoeCktPm9i aiA6IE5VTEwpCj4gPiA+ID4gIAo+ID4gPiA+ICBzdHJ1Y3QgaW50ZWxfaGRtaSB7Cj4gPiA+ID4g IAlpOTE1X3JlZ190IGhkbWlfcmVnOwo+ID4gPiA+IEBAIC0xNDIzLDggKzE0MjMsOSBAQCB2b2lk IGludGVsX3JlbGVhc2VfbG9hZF9kZXRlY3RfcGlwZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAo+ID4gPiA+ICAJCQkJICAgIHN0cnVjdCBpbnRlbF9sb2FkX2RldGVjdF9waXBlICpv bGQsCj4gPiA+ID4gIAkJCQkgICAgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgp Owo+ID4gPiA+ICBzdHJ1Y3QgaTkxNV92bWEgKgo+ID4gPiA+IC1pbnRlbF9waW5fYW5kX2ZlbmNl X2ZiX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgdW5zaWduZWQgaW50IHJvdGF0aW9u KTsKPiA+ID4gPiAtdm9pZCBpbnRlbF91bnBpbl9mYl92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEp Owo+ID4gPiA+ICtpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihjb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiwKPiA+ID4gPiArCQkJICAgdW5zaWduZWQgaW50IHJvdGF0aW9uLCBib29s IG5lZWRzX2ZlbmNlKTsKPiA+ID4gPiArdm9pZCBpbnRlbF91bnBpbl9mYl92bWEoc3RydWN0IGk5 MTVfdm1hICp2bWEsIGJvb2wgbmVlZHNfZmVuY2UpOwo+ID4gPiA+ICBzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyICoKPiA+ID4gPiAgaW50ZWxfZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCj4gPiA+ID4gIAkJCSBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAq bW9kZV9jbWQpOwo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9mYmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYwo+ID4gPiA+IGlu ZGV4IGI4YWYzNTE4N2QyMi4uNGNiYzdmZGU1ZTMwIDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9mYmRldi5jCj4gPiA+ID4gQEAgLTE2NSw2ICsxNjUsMTMgQEAgc3RhdGlj IGludCBpbnRlbGZiX2FsbG9jKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCj4gPiA+ID4g IAlyZXR1cm4gcmV0Owo+ID4gPiA+ICB9Cj4gPiA+ID4gIAo+ID4gPiA+ICtzdGF0aWMgYm9vbCBp bnRlbF9mYmRldl9uZWVkc19mZW5jZShzdHJ1Y3QgaW50ZWxfZmJkZXYgKmlmYmRldikKPiA+ID4g PiArewo+ID4gPiA+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGlmYmRldi0+ ZmItPm9iajsKPiA+ID4gPiArCj4gPiA+ID4gKwlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X2dldF90 aWxpbmcob2JqKSAhPSBJOTE1X1RJTElOR19OT05FOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4g PiA+ICBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxw ZXIsCj4gPiA+ID4gIAkJCSAgc3RydWN0IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9zaXplICpzaXpl cykKPiA+ID4gPiAgewo+ID4gPiA+IEBAIC0xODAsNiArMTg3LDcgQEAgc3RhdGljIGludCBpbnRl bGZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAo+ID4gPiA+ICAJc3RydWN0 IGk5MTVfdm1hICp2bWE7Cj4gPiA+ID4gIAlib29sIHByZWFsbG9jID0gZmFsc2U7Cj4gPiA+ID4g IAl2b2lkIF9faW9tZW0gKnZhZGRyOwo+ID4gPiA+ICsJYm9vbCBuZWVkc19mZW5jZTsKPiA+ID4g PiAgCWludCByZXQ7Cj4gPiA+ID4gIAo+ID4gPiA+ICAJaWYgKGludGVsX2ZiICYmCj4gPiA+ID4g QEAgLTIxMiw3ICsyMjAsOSBAQCBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpoZWxwZXIsCj4gPiA+ID4gIAkgKiBUaGlzIGFsc28gdmFsaWRhdGVzIHRoYXQg YW55IGV4aXN0aW5nIGZiIGluaGVyaXRlZCBmcm9tIHRoZQo+ID4gPiA+ICAJICogQklPUyBpcyBz dWl0YWJsZSBmb3Igb3duIGFjY2Vzcy4KPiA+ID4gPiAgCSAqLwo+ID4gPiA+IC0Jdm1hID0gaW50 ZWxfcGluX2FuZF9mZW5jZV9mYl9vYmooJmlmYmRldi0+ZmItPmJhc2UsIERSTV9NT0RFX1JPVEFU RV8wKTsKPiA+ID4gPiArCW5lZWRzX2ZlbmNlID0gaW50ZWxfZmJkZXZfbmVlZHNfZmVuY2UoaWZi ZGV2KTsKPiA+ID4gPiArCXZtYSA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKCZpZmJkZXYt PmZiLT5iYXNlLAo+ID4gPiA+ICsJCQkJCSBEUk1fTU9ERV9ST1RBVEVfMCwgbmVlZHNfZmVuY2Up Owo+ID4gPiA+ICAJaWYgKElTX0VSUih2bWEpKSB7Cj4gPiA+ID4gIAkJcmV0ID0gUFRSX0VSUih2 bWEpOwo+ID4gPiA+ICAJCWdvdG8gb3V0X3VubG9jazsKPiA+ID4gPiBAQCAtMjc2LDcgKzI4Niw3 IEBAIHN0YXRpYyBpbnQgaW50ZWxmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBl ciwKPiA+ID4gPiAgCXJldHVybiAwOwo+ID4gPiA+ICAKPiA+ID4gPiAgb3V0X3VucGluOgo+ID4g PiA+IC0JaW50ZWxfdW5waW5fZmJfdm1hKHZtYSk7Cj4gPiA+ID4gKwlpbnRlbF91bnBpbl9mYl92 bWEodm1hLCBuZWVkc19mZW5jZSk7Cj4gPiA+ID4gIG91dF91bmxvY2s6Cj4gPiA+ID4gIAlpbnRl bF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7Cj4gPiA+ID4gIAltdXRleF91bmxvY2soJmRldi0+ c3RydWN0X211dGV4KTsKPiA+ID4gPiBAQCAtNTE0LDcgKzUyNCw4IEBAIHN0YXRpYyB2b2lkIGlu dGVsX2ZiZGV2X2Rlc3Ryb3koc3RydWN0IGludGVsX2ZiZGV2ICppZmJkZXYpCj4gPiA+ID4gIAo+ ID4gPiA+ICAJaWYgKGlmYmRldi0+dm1hKSB7Cj4gPiA+ID4gIAkJbXV0ZXhfbG9jaygmaWZiZGV2 LT5oZWxwZXIuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ID4gPiA+IC0JCWludGVsX3VucGluX2ZiX3Zt YShpZmJkZXYtPnZtYSk7Cj4gPiA+ID4gKwkJaW50ZWxfdW5waW5fZmJfdm1hKGlmYmRldi0+dm1h LAo+ID4gPiA+ICsJCQkJICAgaW50ZWxfZmJkZXZfbmVlZHNfZmVuY2UoaWZiZGV2KSk7Cj4gPiA+ ID4gIAkJbXV0ZXhfdW5sb2NrKCZpZmJkZXYtPmhlbHBlci5kZXYtPnN0cnVjdF9tdXRleCk7Cj4g PiA+ID4gIAl9Cj4gPiA+ID4gIAo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9vdmVybGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vdmVybGF5 LmMKPiA+ID4gPiBpbmRleCAxYjM5N2I0MWNiNGYuLjJiNTQ1MjZmYmYzYyAxMDA2NDQKPiA+ID4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vdmVybGF5LmMKPiA+ID4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vdmVybGF5LmMKPiA+ID4gPiBAQCAtODAxLDcg KzgwMSw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfb3ZlcmxheV9kb19wdXRfaW1hZ2Uoc3RydWN0IGlu dGVsX292ZXJsYXkgKm92ZXJsYXksCj4gPiA+ID4gIAo+ID4gPiA+ICAJYXRvbWljX2luYygmZGV2 X3ByaXYtPmdwdV9lcnJvci5wZW5kaW5nX2ZiX3Bpbik7Cj4gPiA+ID4gIAo+ID4gPiA+IC0Jdm1h ID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl90b19kaXNwbGF5X3BsYW5lKG5ld19ibywgMCwgTlVMTCk7 Cj4gPiA+ID4gKwl2bWEgPSBpOTE1X2dlbV9vYmplY3RfcGluX3RvX2Rpc3BsYXlfcGxhbmUobmV3 X2JvLCAwLCBmYWxzZSwgTlVMTCk7Cj4gPiA+ID4gIAlpZiAoSVNfRVJSKHZtYSkpIHsKPiA+ID4g PiAgCQlyZXQgPSBQVFJfRVJSKHZtYSk7Cj4gPiA+ID4gIAkJZ290byBvdXRfcGluX3NlY3Rpb247 Cj4gPiA+ID4gLS0gCj4gPiA+ID4gMi4xMy42Cj4gPiA+ID4gCj4gPiA+ID4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+ID4gPiBJbnRlbC1nZnggbWFp bGluZyBsaXN0Cj4gPiA+ID4gSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gPiA+ IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cj4gPiAKPiA+IC0tIAo+ID4gVmlsbGUgU3lyasOkbMOkCj4gPiBJbnRlbCBPVEMKCi0tIApWaWxs ZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=