From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jindal, Sonika" Subject: Re: [PATCH 2/2] drm/i915/skl: Support for 90/270 rotation Date: Mon, 13 Apr 2015 15:53:22 +0530 Message-ID: <552B991A.7060403@intel.com> References: <1428656849-5004-1-git-send-email-sonika.jindal@intel.com> <1428656849-5004-2-git-send-email-sonika.jindal@intel.com> <20150410141717.GL6092@phenom.ffwll.local> <20150410144419.GA28877@intel.com> <552B40AA.3040504@intel.com> <20150413101045.GA11009@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 0CE0F6E21B for ; Mon, 13 Apr 2015 03:23:25 -0700 (PDT) In-Reply-To: <20150413101045.GA11009@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: =?windows-1252?Q?Ville_Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiA0LzEzLzIwMTUgMzo0MCBQTSwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+IE9uIE1vbiwg QXByIDEzLCAyMDE1IGF0IDA5OjM2OjAyQU0gKzA1MzAsIEppbmRhbCwgU29uaWthIHdyb3RlOgo+ Pgo+Pgo+PiBPbiA0LzEwLzIwMTUgODoxNCBQTSwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+Pj4g T24gRnJpLCBBcHIgMTAsIDIwMTUgYXQgMDQ6MTc6MTdQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPj4+PiBPbiBGcmksIEFwciAxMCwgMjAxNSBhdCAwMjozNzoyOVBNICswNTMwLCBTb25p a2EgSmluZGFsIHdyb3RlOgo+Pj4+PiB2MjogTW92aW5nIGNyZWF0aW9uIG9mIHByb3BlcnR5IGlu IGEgZnVuY3Rpb24sIGNoZWNraW5nIGZvciA5MC8yNzAKPj4+Pj4gcm90YXRpb24gc2ltdWx0YW5l b3VzbHkgKENocmlzKQo+Pj4+PiBMZXR0aW5nIHByaW1hcnkgcGxhbmUgdG8gYmUgcG9zaXRpb25l ZAo+Pj4+PiB2MzogQWRkaW5nIGlmL2Vsc2UgZm9yIDkwLzI3MCBhbmQgcmVzdCBwYXJhbXMgcHJv Z3JhbW1pbmcsIGFkZGluZyBjaGVjayBmb3IKPj4+Pj4gcGl4ZWxfZm9ybWF0LCBzb21lIGNsZWFu dXAgKHJldmlldyBjb21tZW50cykKPj4+Pj4gdjQ6IEFkZGluZyByaWdodCBwaXhlbF9mb3JtYXRz LCB1c2luZyBzcmNfKiBwYXJhbXMgaW5zdGVhZCBvZiBjcnRjXyogZm9yIG9mZnNldAo+Pj4+PiBh bmQgc2l6ZSBwcm9ncmFtbWluZyAoVmlsbGUpCj4+Pj4+IHY1OiBSZWJhc2VkIG9uIC1uaWdodGx5 IGFuZCBUdnJ0a28ncyBzZXJpZXMgZm9yIGd0dCByZW1hcHBpbmcuCj4+Pj4+IHY2OiBSZWJhc2Vk IG9uIC1uaWdodGx5IChUdnJ0a28ncyBzZXJpZXMgbWVyZ2VkKQo+Pj4+PiB2NzogTW92aW5nIHBp eGVsX2Zvcm1hdCBjaGVjayB0byBpbnRlbF9hdG9taWNfcGxhbmVfY2hlY2sgKE1hdHQpCj4+Pj4+ Cj4+Pj4+IFNpZ25lZC1vZmYtYnk6IFNvbmlrYSBKaW5kYWwgPHNvbmlrYS5qaW5kYWxAaW50ZWwu Y29tPgo+Pj4+PiBSZXZpZXdlZC1ieTogTWF0dCBSb3BlciA8bWF0dGhldy5kLnJvcGVyQGludGVs LmNvbT4KPj4+Pgo+Pj4+IFBhdGNoZXMgYXJlIG1pc3NpbmcgdGhlIFRlc3RjYXNlOiB0YWcsIHBs ZWFzZSBhZGQgdGhhdC4gQWxzbywgYXJlIGFsbCB0aGUKPj4+PiBpZ3QgY29tbWl0dGVkIG9yIG5v dCB5ZXQ/IFB1bGxlZCB0aGVzZSB0d28gaW4gbWVhbndoaWxlLgo+Pj4KPj4+IFRoaW5ncyBhcmUg Z29pbmcgc29tZXdoYXQgYnJva2VuIGJlY2F1c2UgeW91IGRpZG4ndCBhcHBseSBteSBwbGFuZQo+ Pj4gc3RhdGUgc3R1ZmYuIEhtbS4gQWN0dWFsbHkgaXQgc29ydCBvZiBsb29rcyB0aGF0IGl0IG1p Z2h0IHdvcmsgYnkgbHVjawo+Pj4gYXMgbG9uZyBhcyB0aGUgcHJpbWFyeSBwbGFuZSBkb2Vzbid0 IGdldCBjbGlwcGVkIHNpbmNlIHRoaXMgaXMgYmFzaGluZwo+Pj4gdGhlIHVzZXIgc3RhdGUgZGly ZWN0bHkgaW50byB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzIGFuZCBub3QgdGhlIGRlcml2ZWQKPj4+ IHN0YXRlIChpZS4gY2xpcHBlZCBjb29yZGluYXRlcykuCj4+Pgo+PiBJIHdhcyBob3BpbmcgeW91 ciBjaGFuZ2VzIGdldCBtZXJnZWQsIGJ1dCBub3Qgc3VyZSB3aHkgdGhleSBhcmUgaGVsZCB1cC4K Pj4KPj4+IEFsc28gSSBzZWUgbXkgcmV2aWV3IGNvbW1lbnQgYWJvdXQgdGhlIDkwIHZzLiAyNzAg cm90YXRpb24gbWl4dXAgd2FzCj4+PiBpZ25vcmVkIGF0IGxlYXN0Lgo+Pj4KPj4gSSBuZXZlciBy ZWFsbHkgZ290IHRoZSB0byB1bmRlcnN0YW5kIHRoZSBuZWVkIG9mIHJldmVyc2luZyA5MCBhbmQg MjcwIDopCj4+IFRoZSBsYXN0IGRpc2N1c3Npb24gd2FzIG5vdCBjb25jbHVkZWQsIEFGQUlSLgo+ PiBUaGluZ3MgbG9vayBjb3JyZWN0IHRvIG1lIGFuZCB3b3JrIGZpbmUgd2l0aCB0aGUgdGVzdGNh c2UgYWxzby4KPj4gSXMgdGhlcmUgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IHdoaWNo IEkgYW0gdW5hYmxlIHRvIGdldD8KPgo+IEJTcGVjIGdpdmVzIG1lIHRoZSBpbXByZXNzaW9uIHRo ZSBodyByb3RhdGlvbiBpcyBjdywgd2hlcmVhcyB0aGUgZHJtIG9uZQo+IGlzIGNjdy4KPgpZZXMs IEhXIHJvdGF0aW9uIGlzIGN3IGFzIHBlciBic3BlYy4gSW4gZHJtLCB3aGVyZSBkbyB3ZSBjb25z aWRlciBpdCBhcyAKYW50aS1jdz8gSSBhc3N1bWUgaXQgaXMgY3cgYmVjYXVzZSBhbGwgdGhlIG1h Y3JvcyB3b3JrIGFzIGV4cGVjdGVkLCBpZSBjdy4KCj4+Cj4+IC1Tb25pa2EKPj4KPj4+PiAtRGFu aWVsCj4+Pj4KPj4+Pj4gLS0tCj4+Pj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVn LmggICAgICAgICAgIHwgICAgMiArCj4+Pj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2F0b21pY19wbGFuZS5jIHwgICAyNCArKysrKysrKwo+Pj4+PiAgICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgICB8ICAgODggKysrKysrKysrKysrKysrKysrKystLS0t LS0tLS0KPj4+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgICAgICAg fCAgICA2ICsrCj4+Pj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jICAg ICAgIHwgICA1MiArKysrKysrKysrKystLS0tLQo+Pj4+PiAgICA1IGZpbGVzIGNoYW5nZWQsIDEz MSBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKPj4+Pj4KPj4+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oCj4+Pj4+IGluZGV4IGI1MjJlYjYuLjU2NGJiZDUgMTAwNjQ0Cj4+Pj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4+Pj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZWcuaAo+Pj4+PiBAQCAtNDg1NCw3ICs0ODU0LDkgQEAgZW51bSBza2xf ZGlzcF9wb3dlcl93ZWxscyB7Cj4+Pj4+ICAgICNkZWZpbmUgICBQTEFORV9DVExfQUxQSEFfSFdf UFJFTVVMVElQTFkJKCAgMyA8PCA0KQo+Pj4+PiAgICAjZGVmaW5lICAgUExBTkVfQ1RMX1JPVEFU RV9NQVNLCQkJMHgzCj4+Pj4+ICAgICNkZWZpbmUgICBQTEFORV9DVExfUk9UQVRFXzAJCQkweDAK Pj4+Pj4gKyNkZWZpbmUgICBQTEFORV9DVExfUk9UQVRFXzkwCQkJMHgxCj4+Pj4+ICAgICNkZWZp bmUgICBQTEFORV9DVExfUk9UQVRFXzE4MAkJCTB4Mgo+Pj4+PiArI2RlZmluZSAgIFBMQU5FX0NU TF9ST1RBVEVfMjcwCQkJMHgzCj4+Pj4+ICAgICNkZWZpbmUgX1BMQU5FX1NUUklERV8xX0EJCQkw eDcwMTg4Cj4+Pj4+ICAgICNkZWZpbmUgX1BMQU5FX1NUUklERV8yX0EJCQkweDcwMjg4Cj4+Pj4+ ICAgICNkZWZpbmUgX1BMQU5FX1NUUklERV8zX0EJCQkweDcwMzg4Cj4+Pj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jCj4+Pj4+IGluZGV4IDk3NmI4OTEuLmEyN2Vl OGMgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19w bGFuZS5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFu ZS5jCj4+Pj4+IEBAIC0xNjIsNiArMTYyLDMwIEBAIHN0YXRpYyBpbnQgaW50ZWxfcGxhbmVfYXRv bWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+Pj4+PiAgICAJCQkoMSA8PCBkcm1f cGxhbmVfaW5kZXgocGxhbmUpKTsKPj4+Pj4gICAgCX0KPj4+Pj4KPj4+Pj4gKwlpZiAoc3RhdGUt PmZiICYmIGludGVsX3JvdGF0aW9uXzkwX29yXzI3MChzdGF0ZS0+cm90YXRpb24pKSB7Cj4+Pj4+ ICsJCWlmICghKHN0YXRlLT5mYi0+bW9kaWZpZXJbMF0gPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElM RUQgfHwKPj4+Pj4gKwkJCXN0YXRlLT5mYi0+bW9kaWZpZXJbMF0gPT0gSTkxNV9GT1JNQVRfTU9E X1lmX1RJTEVEKSkgewo+Pj4+PiArCQkJRFJNX0RFQlVHX0tNUygiWS9ZZiB0aWxpbmcgcmVxdWly ZWQgZm9yIDkwLzI3MCFcbiIpOwo+Pj4+PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4+Pj4+ICsJCX0K Pj4+Pj4gKwo+Pj4+PiArCQkvKgo+Pj4+PiArCQkgKiA5MC8yNzAgaXMgbm90IGFsbG93ZWQgd2l0 aCBSR0I2NCAxNjoxNjoxNjoxNiwKPj4+Pj4gKwkJICogUkdCIDE2LWJpdCA1OjY6NSwgYW5kIElu ZGV4ZWQgOC1iaXQuCj4+Pj4+ICsJCSAqIFRCRDogQWRkIFJHQjY0IGNhc2Ugb25jZSBpdHMgYWRk ZWQgaW4gc3VwcG9ydGVkIGZvcm1hdCBsaXN0Lgo+Pj4+PiArCQkgKi8KPj4+Pj4gKwkJc3dpdGNo IChzdGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdCkgewo+Pj4+PiArCQljYXNlIERSTV9GT1JNQVRfQzg6 Cj4+Pj4+ICsJCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Cj4+Pj4+ICsJCQlEUk1fREVCVUdfS01T KCJVbnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQgJXMgZm9yIDkwLzI3MCFcbiIsCj4+Pj4+ICsJCQkJ CWRybV9nZXRfZm9ybWF0X25hbWUoc3RhdGUtPmZiLT5waXhlbF9mb3JtYXQpKTsKPj4+Pj4gKwkJ CXJldHVybiAtRUlOVkFMOwo+Pj4+PiArCj4+Pj4+ICsJCWRlZmF1bHQ6Cj4+Pj4+ICsJCQlicmVh azsKPj4+Pj4gKwkJfQo+Pj4+PiArCX0KPj4+Pj4gKwo+Pj4+PiAgICAJcmV0dXJuIGludGVsX3Bs YW5lLT5jaGVja19wbGFuZShwbGFuZSwgaW50ZWxfc3RhdGUpOwo+Pj4+PiAgICB9Cj4+Pj4+Cj4+ Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPj4+Pj4gaW5kZXggZjBiYmMyMi4u NGRlNTQ0YyAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ Pj4+PiBAQCAtMjMxMSwxMyArMjMxMSw2IEBAIGludGVsX2ZpbGxfZmJfZ2d0dF92aWV3KHN0cnVj dCBpOTE1X2dndHRfdmlldyAqdmlldywgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4+Pj4+ ICAgIAlpbmZvLT5waXRjaCA9IGZiLT5waXRjaGVzWzBdOwo+Pj4+PiAgICAJaW5mby0+ZmJfbW9k aWZpZXIgPSBmYi0+bW9kaWZpZXJbMF07Cj4+Pj4+Cj4+Pj4+IC0JaWYgKCEoaW5mby0+ZmJfbW9k aWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQgfHwKPj4+Pj4gLQkgICAgICBpbmZvLT5m Yl9tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQpKSB7Cj4+Pj4+IC0JCURSTV9E RUJVR19LTVMoCj4+Pj4+IC0JCQkgICAgICAiWSBvciBZZiB0aWxpbmcgaXMgbmVlZGVkIGZvciA5 MC8yNzAgcm90YXRpb24hXG4iKTsKPj4+Pj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+Pj4+IC0JfQo+ Pj4+PiAtCj4+Pj4+ICAgIAlyZXR1cm4gMDsKPj4+Pj4gICAgfQo+Pj4+Pgo+Pj4+PiBAQCAtMjkx OSw4ICsyOTEyLDEyIEBAIHN0YXRpYyB2b2lkIHNreWxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUo c3RydWN0IGRybV9jcnRjICpjcnRjLAo+Pj4+PiAgICAJc3RydWN0IGludGVsX2NydGMgKmludGVs X2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+Pj4+PiAgICAJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iajsKPj4+Pj4gICAgCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPj4+ Pj4gLQl1MzIgcGxhbmVfY3RsLCBzdHJpZGVfZGl2Owo+Pj4+PiArCXUzMiBwbGFuZV9jdGwsIHN0 cmlkZV9kaXYsIHN0cmlkZTsKPj4+Pj4gKwl1MzIgdGlsZV9oZWlnaHQsIHBsYW5lX29mZnNldCwg cGxhbmVfc2l6ZTsKPj4+Pj4gKwl1bnNpZ25lZCBpbnQgcm90YXRpb247Cj4+Pj4+ICsJaW50IHhf b2Zmc2V0LCB5X29mZnNldDsKPj4+Pj4gICAgCXVuc2lnbmVkIGxvbmcgc3VyZl9hZGRyOwo+Pj4+ PiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+Pj4+Pgo+Pj4+PiAgICAJaWYgKCFpbnRlbF9j cnRjLT5wcmltYXJ5X2VuYWJsZWQpIHsKPj4+Pj4gICAgCQlJOTE1X1dSSVRFKFBMQU5FX0NUTChw aXBlLCAwKSwgMCk7Cj4+Pj4+IEBAIC0yOTgxLDIxICsyOTc4LDUxIEBAIHN0YXRpYyB2b2lkIHNr eWxha2VfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+Pj4+PiAg ICAJfQo+Pj4+Pgo+Pj4+PiAgICAJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9QTEFORV9HQU1NQV9E SVNBQkxFOwo+Pj4+PiAtCWlmIChjcnRjLT5wcmltYXJ5LT5zdGF0ZS0+cm90YXRpb24gPT0gQklU KERSTV9ST1RBVEVfMTgwKSkKPj4+Pj4gKwo+Pj4+PiArCXBsYW5lID0gY3J0Yy0+cHJpbWFyeTsK Pj4+Pj4gKwlyb3RhdGlvbiA9IHBsYW5lLT5zdGF0ZS0+cm90YXRpb247Cj4+Pj4+ICsJc3dpdGNo IChyb3RhdGlvbikgewo+Pj4+PiArCWNhc2UgQklUKERSTV9ST1RBVEVfOTApOgo+Pj4+PiArCQlw bGFuZV9jdGwgfD0gUExBTkVfQ1RMX1JPVEFURV85MDsKPj4+Pj4gKwkJYnJlYWs7Cj4+Pj4+ICsK Pj4+Pj4gKwljYXNlIEJJVChEUk1fUk9UQVRFXzE4MCk6Cj4+Pj4+ICAgIAkJcGxhbmVfY3RsIHw9 IFBMQU5FX0NUTF9ST1RBVEVfMTgwOwo+Pj4+PiArCQlicmVhazsKPj4+Pj4gKwo+Pj4+PiArCWNh c2UgQklUKERSTV9ST1RBVEVfMjcwKToKPj4+Pj4gKwkJcGxhbmVfY3RsIHw9IFBMQU5FX0NUTF9S T1RBVEVfMjcwOwo+Pj4+PiArCQlicmVhazsKPj4+Pj4gKwl9Cj4+Pj4+Cj4+Pj4+ICAgIAlvYmog PSBpbnRlbF9mYl9vYmooZmIpOwo+Pj4+PiAgICAJc3RyaWRlX2RpdiA9IGludGVsX2ZiX3N0cmlk ZV9hbGlnbm1lbnQoZGV2LCBmYi0+bW9kaWZpZXJbMF0sCj4+Pj4+ICAgIAkJCQkJICAgICAgIGZi LT5waXhlbF9mb3JtYXQpOwo+Pj4+PiAtCXN1cmZfYWRkciA9IGludGVsX3BsYW5lX29ial9vZmZz ZXQodG9faW50ZWxfcGxhbmUoY3J0Yy0+cHJpbWFyeSksIG9iaik7Cj4+Pj4+ICsJc3VyZl9hZGRy ID0gaW50ZWxfcGxhbmVfb2JqX29mZnNldCh0b19pbnRlbF9wbGFuZShwbGFuZSksIG9iaik7Cj4+ Pj4+ICsKPj4+Pj4gKwlpZiAoaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHJvdGF0aW9uKSkgewo+ Pj4+PiArCQkvKiBzdHJpZGUgPSBTdXJmYWNlIGhlaWdodCBpbiB0aWxlcyAqLwo+Pj4+PiArCQl0 aWxlX2hlaWdodCA9IGludGVsX3RpbGVfaGVpZ2h0KGRldiwgZmItPmJpdHNfcGVyX3BpeGVsLAo+ Pj4+PiArCQkJCQkJZmItPm1vZGlmaWVyWzBdKTsKPj4+Pj4gKwkJc3RyaWRlID0gRElWX1JPVU5E X1VQKGZiLT5oZWlnaHQsIHRpbGVfaGVpZ2h0KTsKPj4+Pj4gKwkJeF9vZmZzZXQgPSBzdHJpZGUg KiB0aWxlX2hlaWdodCAtIHkgLSAocGxhbmUtPnN0YXRlLT5zcmNfaCA+PiAxNik7Cj4+Pj4+ICsJ CXlfb2Zmc2V0ID0geDsKPj4+Pj4gKwkJcGxhbmVfc2l6ZSA9ICgocGxhbmUtPnN0YXRlLT5zcmNf dyA+PiAxNikgLSAxKSA8PCAxNiB8Cj4+Pj4+ICsJCQkJCSgocGxhbmUtPnN0YXRlLT5zcmNfaCA+ PiAxNikgLSAxKTsKPj4+Pj4gKwl9IGVsc2Ugewo+Pj4+PiArCQlzdHJpZGUgPSBmYi0+cGl0Y2hl c1swXSAvIHN0cmlkZV9kaXY7Cj4+Pj4+ICsJCXhfb2Zmc2V0ID0geDsKPj4+Pj4gKwkJeV9vZmZz ZXQgPSB5Owo+Pj4+PiArCQlwbGFuZV9zaXplID0gKChwbGFuZS0+c3RhdGUtPnNyY19oID4+IDE2 KSAtIDEpIDw8IDE2IHwKPj4+Pj4gKwkJCSgocGxhbmUtPnN0YXRlLT5zcmNfdyA+PiAxNikgLSAx KTsKPj4+Pj4gKwl9Cj4+Pj4+ICsJcGxhbmVfb2Zmc2V0ID0geV9vZmZzZXQgPDwgMTYgfCB4X29m ZnNldDsKPj4+Pj4KPj4+Pj4gICAgCUk5MTVfV1JJVEUoUExBTkVfQ1RMKHBpcGUsIDApLCBwbGFu ZV9jdGwpOwo+Pj4+PiAgICAJSTkxNV9XUklURShQTEFORV9QT1MocGlwZSwgMCksIDApOwo+Pj4+ PiAtCUk5MTVfV1JJVEUoUExBTkVfT0ZGU0VUKHBpcGUsIDApLCAoeSA8PCAxNikgfCB4KTsKPj4+ Pj4gLQlJOTE1X1dSSVRFKFBMQU5FX1NJWkUocGlwZSwgMCksCj4+Pj4+IC0JCSAgIChpbnRlbF9j cnRjLT5jb25maWctPnBpcGVfc3JjX2ggLSAxKSA8PCAxNiB8Cj4+Pj4+IC0JCSAgIChpbnRlbF9j cnRjLT5jb25maWctPnBpcGVfc3JjX3cgLSAxKSk7Cj4+Pj4+IC0JSTkxNV9XUklURShQTEFORV9T VFJJREUocGlwZSwgMCksIGZiLT5waXRjaGVzWzBdIC8gc3RyaWRlX2Rpdik7Cj4+Pj4+ICsJSTkx NV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgMCksIHBsYW5lX29mZnNldCk7Cj4+Pj4+ICsJSTkx NV9XUklURShQTEFORV9TSVpFKHBpcGUsIDApLCBwbGFuZV9zaXplKTsKPj4+Pj4gKwlJOTE1X1dS SVRFKFBMQU5FX1NUUklERShwaXBlLCAwKSwgc3RyaWRlKTsKPj4+Pj4gICAgCUk5MTVfV1JJVEUo UExBTkVfU1VSRihwaXBlLCAwKSwgc3VyZl9hZGRyKTsKPj4+Pj4KPj4+Pj4gICAgCVBPU1RJTkdf UkVBRChQTEFORV9TVVJGKHBpcGUsIDApKTsKPj4+Pj4gQEAgLTEyNDA2LDIzICsxMjQzMywzMiBA QCBzdGF0aWMgc3RydWN0IGRybV9wbGFuZSAqaW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVhdGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPj4+Pj4gICAgCQkJCSBpbnRlbF9wcmltYXJ5X2Zvcm1hdHMs IG51bV9mb3JtYXRzLAo+Pj4+PiAgICAJCQkJIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+Pj4+ Pgo+Pj4+PiAtCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KSB7Cj4+Pj4+IC0JCWlmICgh ZGV2LT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSkKPj4+Pj4gLQkJCWRldi0+bW9kZV9j b25maWcucm90YXRpb25fcHJvcGVydHkgPQo+Pj4+PiAtCQkJCWRybV9tb2RlX2NyZWF0ZV9yb3Rh dGlvbl9wcm9wZXJ0eShkZXYsCj4+Pj4+IC0JCQkJCQkJQklUKERSTV9ST1RBVEVfMCkgfAo+Pj4+ PiAtCQkJCQkJCUJJVChEUk1fUk9UQVRFXzE4MCkpOwo+Pj4+PiAtCQlpZiAoZGV2LT5tb2RlX2Nv bmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSkKPj4+Pj4gLQkJCWRybV9vYmplY3RfYXR0YWNoX3Byb3Bl cnR5KCZwcmltYXJ5LT5iYXNlLmJhc2UsCj4+Pj4+IC0JCQkJZGV2LT5tb2RlX2NvbmZpZy5yb3Rh dGlvbl9wcm9wZXJ0eSwKPj4+Pj4gLQkJCQlzdGF0ZS0+YmFzZS5yb3RhdGlvbik7Cj4+Pj4+IC0J fQo+Pj4+PiArCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0KQo+Pj4+PiArCQlpbnRlbF9j cmVhdGVfcm90YXRpb25fcHJvcGVydHkoZGV2LCBwcmltYXJ5KTsKPj4+Pj4KPj4+Pj4gICAgCWRy bV9wbGFuZV9oZWxwZXJfYWRkKCZwcmltYXJ5LT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1 bmNzKTsKPj4+Pj4KPj4+Pj4gICAgCXJldHVybiAmcHJpbWFyeS0+YmFzZTsKPj4+Pj4gICAgfQo+ Pj4+Pgo+Pj4+PiArdm9pZCBpbnRlbF9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSkKPj4+Pj4gK3sKPj4+Pj4g KwlpZiAoIWRldi0+bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVydHkpIHsKPj4+Pj4gKwkJdW5z aWduZWQgbG9uZyBmbGFncyA9IEJJVChEUk1fUk9UQVRFXzApIHwKPj4+Pj4gKwkJCUJJVChEUk1f Uk9UQVRFXzE4MCk7Cj4+Pj4+ICsKPj4+Pj4gKwkJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49 IDkpCj4+Pj4+ICsJCQlmbGFncyB8PSBCSVQoRFJNX1JPVEFURV85MCkgfCBCSVQoRFJNX1JPVEFU RV8yNzApOwo+Pj4+PiArCj4+Pj4+ICsJCWRldi0+bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVy dHkgPQo+Pj4+PiArCQkJZHJtX21vZGVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KGRldiwgZmxh Z3MpOwo+Pj4+PiArCX0KPj4+Pj4gKwlpZiAoZGV2LT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9w ZXJ0eSkKPj4+Pj4gKwkJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJnBsYW5lLT5iYXNlLmJh c2UsCj4+Pj4+ICsJCQkJZGV2LT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSwKPj4+Pj4g KwkJCQlwbGFuZS0+YmFzZS5zdGF0ZS0+cm90YXRpb24pOwo+Pj4+PiArfQo+Pj4+PiArCj4+Pj4+ ICAgIHN0YXRpYyBpbnQKPj4+Pj4gICAgaW50ZWxfY2hlY2tfY3Vyc29yX3BsYW5lKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAo+Pj4+PiAgICAJCQkgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpz dGF0ZSkKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPj4+Pj4gaW5kZXggODExYTFkYi4u ZDMyMDI1YSAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmgKPj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPj4+Pj4gQEAg LTk5NSw2ICs5OTUsMTIgQEAgaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHVuc2lnbmVkIGludCBy b3RhdGlvbikKPj4+Pj4gICAgCXJldHVybiByb3RhdGlvbiAmIChCSVQoRFJNX1JPVEFURV85MCkg fCBCSVQoRFJNX1JPVEFURV8yNzApKTsKPj4+Pj4gICAgfQo+Pj4+Pgo+Pj4+PiArdW5zaWduZWQg aW50Cj4+Pj4+ICtpbnRlbF90aWxlX2hlaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50 MzJfdCBiaXRzX3Blcl9waXhlbCwKPj4+Pj4gKwkJICB1aW50NjRfdCBmYl9tb2RpZmllcik7Cj4+ Pj4+ICt2b2lkIGludGVsX2NyZWF0ZV9yb3RhdGlvbl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+Pj4+PiArCQkJCQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lKTsKPj4+Pj4gKwo+ Pj4+PiAgICBib29sIGludGVsX3dtX25lZWRfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAo+Pj4+PiAgICAJCQkgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKTsKPj4+Pj4KPj4+ Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKPj4+Pj4gaW5kZXggZjQxZTg3Mi4uODNh ZGM5YiAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRl LmMKPj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKPj4+Pj4g QEAgLTE5MCwxMCArMTkwLDEzIEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAq ZHJtX3BsYW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4+Pj4+ICAgIAlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKGZiKTsKPj4+Pj4gICAgCWNvbnN0IGlu dCBwaXBlID0gaW50ZWxfcGxhbmUtPnBpcGU7Cj4+Pj4+ICAgIAljb25zdCBpbnQgcGxhbmUgPSBp bnRlbF9wbGFuZS0+cGxhbmUgKyAxOwo+Pj4+PiAtCXUzMiBwbGFuZV9jdGwsIHN0cmlkZV9kaXY7 Cj4+Pj4+ICsJdTMyIHBsYW5lX2N0bCwgc3RyaWRlX2Rpdiwgc3RyaWRlOwo+Pj4+PiAgICAJaW50 IHBpeGVsX3NpemUgPSBkcm1fZm9ybWF0X3BsYW5lX2NwcChmYi0+cGl4ZWxfZm9ybWF0LCAwKTsK Pj4+Pj4gICAgCWNvbnN0IHN0cnVjdCBkcm1faW50ZWxfc3ByaXRlX2NvbG9ya2V5ICprZXkgPSAm aW50ZWxfcGxhbmUtPmNrZXk7Cj4+Pj4+ICAgIAl1bnNpZ25lZCBsb25nIHN1cmZfYWRkcjsKPj4+ Pj4gKwl1MzIgdGlsZV9oZWlnaHQsIHBsYW5lX29mZnNldCwgcGxhbmVfc2l6ZTsKPj4+Pj4gKwl1 bnNpZ25lZCBpbnQgcm90YXRpb247Cj4+Pj4+ICsJaW50IHhfb2Zmc2V0LCB5X29mZnNldDsKPj4+ Pj4KPj4+Pj4gICAgCXBsYW5lX2N0bCA9IFBMQU5FX0NUTF9FTkFCTEUgfAo+Pj4+PiAgICAJCVBM QU5FX0NUTF9QSVBFX0NTQ19FTkFCTEU7Cj4+Pj4+IEBAIC0yNTQsOCArMjU3LDIwIEBAIHNrbF91 cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJtX3BsYW5lLCBzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4+Pj4+ICAgIAkJTUlTU0lOR19DQVNFKGZiLT5tb2RpZmllclswXSk7Cj4+Pj4+ICAg IAl9Cj4+Pj4+Cj4+Pj4+IC0JaWYgKGRybV9wbGFuZS0+c3RhdGUtPnJvdGF0aW9uID09IEJJVChE Uk1fUk9UQVRFXzE4MCkpCj4+Pj4+ICsJcm90YXRpb24gPSBkcm1fcGxhbmUtPnN0YXRlLT5yb3Rh dGlvbjsKPj4+Pj4gKwlzd2l0Y2ggKHJvdGF0aW9uKSB7Cj4+Pj4+ICsJY2FzZSBCSVQoRFJNX1JP VEFURV85MCk6Cj4+Pj4+ICsJCXBsYW5lX2N0bCB8PSBQTEFORV9DVExfUk9UQVRFXzkwOwo+Pj4+ PiArCQlicmVhazsKPj4+Pj4gKwo+Pj4+PiArCWNhc2UgQklUKERSTV9ST1RBVEVfMTgwKToKPj4+ Pj4gICAgCQlwbGFuZV9jdGwgfD0gUExBTkVfQ1RMX1JPVEFURV8xODA7Cj4+Pj4+ICsJCWJyZWFr Owo+Pj4+PiArCj4+Pj4+ICsJY2FzZSBCSVQoRFJNX1JPVEFURV8yNzApOgo+Pj4+PiArCQlwbGFu ZV9jdGwgfD0gUExBTkVfQ1RMX1JPVEFURV8yNzA7Cj4+Pj4+ICsJCWJyZWFrOwo+Pj4+PiArCX0K Pj4+Pj4KPj4+Pj4gICAgCWludGVsX3VwZGF0ZV9zcHJpdGVfd2F0ZXJtYXJrcyhkcm1fcGxhbmUs IGNydGMsIHNyY193LCBzcmNfaCwKPj4+Pj4gICAgCQkJCSAgICAgICBwaXhlbF9zaXplLCB0cnVl LAo+Pj4+PiBAQCAtMjgzLDEwICsyOTgsMjYgQEAgc2tsX3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpkcm1fcGxhbmUsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPj4+Pj4KPj4+Pj4gICAg CXN1cmZfYWRkciA9IGludGVsX3BsYW5lX29ial9vZmZzZXQoaW50ZWxfcGxhbmUsIG9iaik7Cj4+ Pj4+Cj4+Pj4+IC0JSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgcGxhbmUpLCAoeSA8PCAx NikgfCB4KTsKPj4+Pj4gLQlJOTE1X1dSSVRFKFBMQU5FX1NUUklERShwaXBlLCBwbGFuZSksIGZi LT5waXRjaGVzWzBdIC8gc3RyaWRlX2Rpdik7Cj4+Pj4+ICsJaWYgKGludGVsX3JvdGF0aW9uXzkw X29yXzI3MChyb3RhdGlvbikpIHsKPj4+Pj4gKwkJLyogc3RyaWRlOiBTdXJmYWNlIGhlaWdodCBp biB0aWxlcyAqLwo+Pj4+PiArCQl0aWxlX2hlaWdodCA9IGludGVsX3RpbGVfaGVpZ2h0KGRldiwg ZmItPmJpdHNfcGVyX3BpeGVsLAo+Pj4+PiArCQkJCQkJCWZiLT5tb2RpZmllclswXSk7Cj4+Pj4+ ICsJCXN0cmlkZSA9IERJVl9ST1VORF9VUChmYi0+aGVpZ2h0LCB0aWxlX2hlaWdodCk7Cj4+Pj4+ ICsJCXBsYW5lX3NpemUgPSAoc3JjX3cgPDwgMTYpIHwgc3JjX2g7Cj4+Pj4+ICsJCXhfb2Zmc2V0 ID0gc3RyaWRlICogdGlsZV9oZWlnaHQgLSB5IC0gKHNyY19oICsgMSk7Cj4+Pj4+ICsJCXlfb2Zm c2V0ID0geDsKPj4+Pj4gKwl9IGVsc2Ugewo+Pj4+PiArCQlzdHJpZGUgPSBmYi0+cGl0Y2hlc1sw XSAvIHN0cmlkZV9kaXY7Cj4+Pj4+ICsJCXBsYW5lX3NpemUgPSAoc3JjX2ggPDwgMTYpIHwgc3Jj X3c7Cj4+Pj4+ICsJCXhfb2Zmc2V0ID0geDsKPj4+Pj4gKwkJeV9vZmZzZXQgPSB5Owo+Pj4+PiAr CX0KPj4+Pj4gKwlwbGFuZV9vZmZzZXQgPSB5X29mZnNldCA8PCAxNiB8IHhfb2Zmc2V0Owo+Pj4+ PiArCj4+Pj4+ICsJSTkxNV9XUklURShQTEFORV9PRkZTRVQocGlwZSwgcGxhbmUpLCBwbGFuZV9v ZmZzZXQpOwo+Pj4+PiArCUk5MTVfV1JJVEUoUExBTkVfU1RSSURFKHBpcGUsIHBsYW5lKSwgc3Ry aWRlKTsKPj4+Pj4gICAgCUk5MTVfV1JJVEUoUExBTkVfUE9TKHBpcGUsIHBsYW5lKSwgKGNydGNf eSA8PCAxNikgfCBjcnRjX3gpOwo+Pj4+PiAtCUk5MTVfV1JJVEUoUExBTkVfU0laRShwaXBlLCBw bGFuZSksIChjcnRjX2ggPDwgMTYpIHwgY3J0Y193KTsKPj4+Pj4gKwlJOTE1X1dSSVRFKFBMQU5F X1NJWkUocGlwZSwgcGxhbmUpLCBwbGFuZV9zaXplKTsKPj4+Pj4gICAgCUk5MTVfV1JJVEUoUExB TkVfQ1RMKHBpcGUsIHBsYW5lKSwgcGxhbmVfY3RsKTsKPj4+Pj4gICAgCUk5MTVfV1JJVEUoUExB TkVfU1VSRihwaXBlLCBwbGFuZSksIHN1cmZfYWRkcik7Cj4+Pj4+ICAgIAlQT1NUSU5HX1JFQUQo UExBTkVfU1VSRihwaXBlLCBwbGFuZSkpOwo+Pj4+PiBAQCAtMTMxMCwxNiArMTM0MSw3IEBAIGlu dGVsX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUsIGlu dCBwbGFuZSkKPj4+Pj4gICAgCQlnb3RvIG91dDsKPj4+Pj4gICAgCX0KPj4+Pj4KPj4+Pj4gLQlp ZiAoIWRldi0+bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVydHkpCj4+Pj4+IC0JCWRldi0+bW9k ZV9jb25maWcucm90YXRpb25fcHJvcGVydHkgPQo+Pj4+PiAtCQkJZHJtX21vZGVfY3JlYXRlX3Jv dGF0aW9uX3Byb3BlcnR5KGRldiwKPj4+Pj4gLQkJCQkJCQkgIEJJVChEUk1fUk9UQVRFXzApIHwK Pj4+Pj4gLQkJCQkJCQkgIEJJVChEUk1fUk9UQVRFXzE4MCkpOwo+Pj4+PiAtCj4+Pj4+IC0JaWYg KGRldi0+bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVydHkpCj4+Pj4+IC0JCWRybV9vYmplY3Rf YXR0YWNoX3Byb3BlcnR5KCZpbnRlbF9wbGFuZS0+YmFzZS5iYXNlLAo+Pj4+PiAtCQkJCQkgICBk ZXYtPm1vZGVfY29uZmlnLnJvdGF0aW9uX3Byb3BlcnR5LAo+Pj4+PiAtCQkJCQkgICBzdGF0ZS0+ YmFzZS5yb3RhdGlvbik7Cj4+Pj4+ICsJaW50ZWxfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KGRl diwgaW50ZWxfcGxhbmUpOwo+Pj4+Pgo+Pj4+PiAgICAJZHJtX3BsYW5lX2hlbHBlcl9hZGQoJmlu dGVsX3BsYW5lLT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1bmNzKTsKPj4+Pj4KPj4+Pj4g LS0KPj4+Pj4gMS43LjEwLjQKPj4+Pj4KPj4+Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPj4+Pj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+Pj4+PiBJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+Pj4+IGh0dHA6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKPj4+Pgo+Pj4+IC0tCj4+Pj4gRGFu aWVsIFZldHRlcgo+Pj4+IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgo+Pj4+ IGh0dHA6Ly9ibG9nLmZmd2xsLmNoCj4+Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPj4+PiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4+Pj4gSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+Pj4+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKPj4+Cj4KX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK