From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH] lib/igt_kms: Add COMIT_ATOMIC to igt_display_commit2() Date: Tue, 2 Feb 2016 16:53:10 +0100 Message-ID: <56B0D0E6.4060409@linux.intel.com> References: <20160127130141.GA10933@mcvlad-wk.rb.intel.com> <1454305812-28884-1-git-send-email-mayuresh.s.gharpure@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 436E06E031 for ; Tue, 2 Feb 2016 07:53:17 -0800 (PST) In-Reply-To: <1454305812-28884-1-git-send-email-mayuresh.s.gharpure@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mayuresh Gharpure , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T3AgMDEtMDItMTYgb20gMDY6NTAgc2NocmVlZiBNYXl1cmVzaCBHaGFycHVyZToKPiBDby1BdXRo b3IgOiBNYXJpdXMgVmxhZCA8bWFyaXVzLmMudmxhZEBpbnRlbC5jb20+Cj4KPiBTbyBmYXIgd2Ug aGF2ZSBoYWQgb25seSB0d28gY29tbWl0IHN0eWxlcywgQ09NTUlUX0xFR0FDWQo+IGFuZCBDT01N SVRfVU5JVkVSU0FMLiBUaGlzIHBhdGNoIGFkZHMgYW5vdGhlciBjb21taXQgc3R5bGUKPiBDT01N SVRfQVRPTUlDIHdoaWNoIG1ha2VzIHVzZSBvZiBkcm1Nb2RlQXRvbWljQ29tbWl0KCkKPgo+IFNp Z25lZC1vZmYtYnk6IE1heXVyZXNoIEdoYXJwdXJlIDxtYXl1cmVzaC5zLmdoYXJwdXJlQGludGVs LmNvbT4KPiAtLS0KPiAgbGliL2lndF9rbXMuYyB8IDMxOCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gIGxpYi9pZ3Rfa21zLmggfCAg NzEgKysrKysrKysrKysrLQo+ICAyIGZpbGVzIGNoYW5nZWQsIDM4NyBpbnNlcnRpb25zKCspLCAy IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3Rfa21zLmMgYi9saWIvaWd0X2tt cy5jCj4gaW5kZXggOTBjOGRhNy4uNmMwNzIyMyAxMDA2NDQKPiAtLS0gYS9saWIvaWd0X2ttcy5j Cj4gKysrIGIvbGliL2lndF9rbXMuYwo+IEBAIC0xNDUsNiArMTQ1LDEyMCBAQCBjb25zdCB1bnNp Z25lZCBjaGFyKiBpZ3Rfa21zX2dldF9iYXNlX2VkaWQodm9pZCkKPiAgICoKPiAgICogUmV0dXJu czogYW4gYWx0ZXJuYXRlIGVkaWQgYmxvY2sKPiAgICovCj4gK3N0YXRpYyBjb25zdCBjaGFyICpp Z3RfcGxhbmVfcHJvcF9uYW1lc1tJR1RfTlVNX1BMQU5FX1BST1BTXSA9IHsKPiArCSJTUkNfWCIs Cj4gKwkiU1JDX1kiLAo+ICsJIlNSQ19XIiwKPiArCSJTUkNfSCIsCj4gKwkiQ1JUQ19YIiwKPiAr CSJDUlRDX1kiLAo+ICsJIkNSVENfVyIsCj4gKwkiQ1JUQ19IIiwKPiArCSJGQl9JRCIsCj4gKwki Q1JUQ19JRCIsCj4gKwkidHlwZSIsCj4gKwkicm90YXRpb24iCj4gK307Cj4gKwo+ICtzdGF0aWMg Y29uc3QgY2hhciAqaWd0X2NydGNfcHJvcF9uYW1lc1tJR1RfTlVNX0NSVENfUFJPUFNdID0gewo+ ICsJImJhY2tncm91bmRfY29sb3IiCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqaWd0 X2Nvbm5lY3Rvcl9wcm9wX25hbWVzW0lHVF9OVU1fQ09OTkVDVE9SX1BST1BTXSA9IHsKPiArCSJz Y2FsaW5nIG1vZGUiLAo+ICsJIkRQTVMiCj4gK307Cj4gKwo+ICsvKgo+ICsgKiBSZXRyaWV2ZSBh bGwgdGhlIHByb3BlcmllcyBzcGVjaWZpZWQgaW4gcHJvcHNfbmFtZSBhbmQgc3RvcmUgdGhlbSBp bnRvCj4gKyAqIHBsYW5lLT5hdG9taWNfcHJvcHNfcGxhbmUuCj4gKyAqLwo+ICtzdGF0aWMgdm9p ZAo+ICtpZ3RfYXRvbWljX2ZpbGxfcGxhbmVfcHJvcHMoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwg aWd0X3BsYW5lX3QgKnBsYW5lLAo+ICsJCQlpbnQgbnVtX3Byb3BzLCBjb25zdCBjaGFyICoqcHJv cF9uYW1lcykKPiArewo+ICsJZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Cj4gKwlp bnQgaSwgaiwgZmQ7Cj4gKwo+ICsJZmQgPSBkaXNwbGF5LT5kcm1fZmQ7Cj4gKwo+ICsJcHJvcHMg PSBkcm1Nb2RlT2JqZWN0R2V0UHJvcGVydGllcyhmZCwgcGxhbmUtPmRybV9wbGFuZS0+cGxhbmVf aWQsIERSTV9NT0RFX09CSkVDVF9QTEFORSk7Cj4gKwlpZ3RfYXNzZXJ0KHByb3BzKTsKPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKPiArCQlkcm1Nb2Rl UHJvcGVydHlQdHIgcHJvcCA9Cj4gKwkJCWRybU1vZGVHZXRQcm9wZXJ0eShmZCwgcHJvcHMtPnBy b3BzW2ldKTsKPiArCj4gKwkJZm9yIChqID0gMDsgaiA8IG51bV9wcm9wczsgaisrKSB7Cj4gKwkJ CWlmIChzdHJjbXAocHJvcC0+bmFtZSwgcHJvcF9uYW1lc1tqXSkgIT0gMCkKPiArCQkJCWNvbnRp bnVlOwo+ICsKPiArCQkJcGxhbmUtPmF0b21pY19wcm9wc19wbGFuZVtqXSA9IHByb3BzLT5wcm9w c1tpXTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHBy b3ApOwo+ICsJfQo+ICsKPiArCWRybU1vZGVGcmVlT2JqZWN0UHJvcGVydGllcyhwcm9wcyk7Cj4g K30KPiArCj4gKy8qCj4gKyAqIFJldHJpZXZlIGFsbCB0aGUgcHJvcGVyaWVzIHNwZWNpZmllZCBp biBwcm9wc19uYW1lIGFuZCBzdG9yZSB0aGVtIGludG8KPiArICogY29uZmlnLT5hdG9taWNfcHJv cHNfY3J0YyBhbmQgY29uZmlnLT5hdG9taWNfcHJvcHNfY29ubmVjdG9yLgo+ICsgKi8KPiArc3Rh dGljIHZvaWQKPiAraWd0X2F0b21pY19maWxsX3Byb3BzKGlndF9kaXNwbGF5X3QgKmRpc3BsYXks IGlndF9vdXRwdXRfdCAqb3V0cHV0LAo+ICsJCQlpbnQgbnVtX2NydGNfcHJvcHMsIGNvbnN0IGNo YXIgKipjcnRjX3Byb3BfbmFtZXMsCj4gKwkJCWludCBudW1fY29ubmVjdG9yX3Byb3BzLCBjb25z dCBjaGFyICoqY29ubl9wcm9wX25hbWVzKQo+ICt7Cj4gKwlkcm1Nb2RlT2JqZWN0UHJvcGVydGll c1B0ciBwcm9wczsKPiArCWludCBpLCBqLCBmZDsKPiArCj4gKwlmZCA9IGRpc3BsYXktPmRybV9m ZDsKPiArCj4gKwlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGZkLCBvdXRwdXQt PmNvbmZpZy5jcnRjLT5jcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7Cj4gKwlpZ3RfYXNz ZXJ0KHByb3BzKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBp KyspIHsKPiArCQlkcm1Nb2RlUHJvcGVydHlQdHIgcHJvcCA9Cj4gKwkJCWRybU1vZGVHZXRQcm9w ZXJ0eShmZCwgcHJvcHMtPnByb3BzW2ldKTsKPiArCj4gKwkJZm9yIChqID0gMDsgaiA8IG51bV9j cnRjX3Byb3BzOyBqKyspIHsKPiArCQkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCBjcnRjX3Byb3Bf bmFtZXNbal0pICE9IDApCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCW91dHB1dC0+Y29uZmln LmF0b21pY19wcm9wc19jcnRjW2pdID0gcHJvcHMtPnByb3BzW2ldOwo+ICsJCQlicmVhazsKPiAr CQl9Cj4gKwo+ICsJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4gKwl9Cj4gKwo+ICsJZHJt TW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKPiArCXByb3BzID0gTlVMTDsKPiArCXBy b3BzID0gZHJtTW9kZU9iamVjdEdldFByb3BlcnRpZXMoZmQsIG91dHB1dC0+Y29uZmlnLmNvbm5l Y3Rvci0+Y29ubmVjdG9yX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SKTsKPiArCWlndF9h c3NlcnQocHJvcHMpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291bnRfcHJvcHM7 IGkrKykgewo+ICsJCWRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wID0KPiArCQkJZHJtTW9kZUdldFBy b3BlcnR5KGZkLCBwcm9wcy0+cHJvcHNbaV0pOwo+ICsKPiArCQlmb3IgKGogPSAwOyBqIDwgbnVt X2Nvbm5lY3Rvcl9wcm9wczsgaisrKSB7Cj4gKwkJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgY29u bl9wcm9wX25hbWVzW2pdKSAhPSAwKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQlvdXRwdXQt PmNvbmZpZy5hdG9taWNfcHJvcHNfY29ubmVjdG9yW2pdID0gcHJvcHMtPnByb3BzW2ldOwo+ICsJ CQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7Cj4gKwl9 Cj4gKwo+ICsJZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKPiArCj4gK30KPiAr Cj4gIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlndF9rbXNfZ2V0X2FsdF9lZGlkKHZvaWQpCj4gIHsK PiAgCXVwZGF0ZV9lZGlkX2NzdW0oYWx0X2VkaWQpOwo+IEBAIC05NTIsNiArMTA2Niw4IEBAIHN0 YXRpYyB2b2lkIGlndF9vdXRwdXRfcmVmcmVzaChpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKPiAgCSAg ICBrbXN0ZXN0X3BpcGVfbmFtZShvdXRwdXQtPmNvbmZpZy5waXBlKSk7Cj4gIAo+ICAJZGlzcGxh eS0+cGlwZXNfaW5fdXNlIHw9IDEgPDwgb3V0cHV0LT5jb25maWcucGlwZTsKPiArCWlndF9hdG9t aWNfZmlsbF9wcm9wcyhkaXNwbGF5LCBvdXRwdXQsIElHVF9OVU1fQ1JUQ19QUk9QUywgaWd0X2Ny dGNfcHJvcF9uYW1lcywKPiArCQlJR1RfTlVNX0NPTk5FQ1RPUl9QUk9QUywgaWd0X2Nvbm5lY3Rv cl9wcm9wX25hbWVzKTsKPiAgfQo+ICAKPiAgc3RhdGljIGJvb2wKPiBAQCAtMTAyMCw2ICsxMTM2 LDcgQEAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGludCBk cm1fZmQpCj4gIHsKPiAgCWRybU1vZGVSZXMgKnJlc291cmNlczsKPiAgCWRybU1vZGVQbGFuZVJl cyAqcGxhbmVfcmVzb3VyY2VzOwo+ICsJZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7 Cj4gIAlpbnQgaTsKPiAgCj4gIAltZW1zZXQoZGlzcGxheSwgMCwgc2l6ZW9mKGlndF9kaXNwbGF5 X3QpKTsKPiBAQCAtMTA5NCw2ICsxMjExLDcgQEAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9k aXNwbGF5X3QgKmRpc3BsYXksIGludCBkcm1fZmQpCj4gIAo+ICAJCQlwbGFuZS0+cGlwZSA9IHBp cGU7Cj4gIAkJCXBsYW5lLT5kcm1fcGxhbmUgPSBkcm1fcGxhbmU7Cj4gKwkJCWlndF9hdG9taWNf ZmlsbF9wbGFuZV9wcm9wcyhkaXNwbGF5LCBwbGFuZSwgSUdUX05VTV9QTEFORV9QUk9QUywgaWd0 X3BsYW5lX3Byb3BfbmFtZXMpOwo+ICAKPiAgCQkJZ2V0X3BsYW5lX3Byb3BlcnR5KGRpc3BsYXkt PmRybV9mZCwgZHJtX3BsYW5lLT5wbGFuZV9pZCwKPiAgCQkJCQkgICAicm90YXRpb24iLAo+IEBA IC0xMzQ5LDYgKzE0NjcsMTEyIEBAIHN0YXRpYyB1aW50MzJfdCBpZ3RfcGxhbmVfZ2V0X2ZiX2dl bV9oYW5kbGUoaWd0X3BsYW5lX3QgKnBsYW5lKQo+ICAJaWd0X2Fzc2VydChyID09IDApOwlcCj4g IH0KPiAgCj4gKwo+ICsKPiArCj4gKy8qCj4gKyAqIEFkZCBwb3NpdGlvbiBhbmQgZmIgY2hhbmdl cyBvZiBhIHBsYW5lIHRvIHRoZSBhdG9taWMgcHJvcGVydHkgc2V0Cj4gKyAqLwo+ICtzdGF0aWMg aW50Cj4gK2lndF9hdG9taWNfcHJlcGFyZV9wbGFuZV9jb21taXQoaWd0X3BsYW5lX3QgKnBsYW5l LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPiArCWRybU1vZGVBdG9taWNSZXEgKnJlcSkKPiArewo+ ICsKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSBvdXRwdXQtPmRpc3BsYXk7Cj4gKwl1aW50 MzJfdCBmYl9pZCwgY3J0Y19pZDsKPiArCWludCByZXQ7Cj4gKwl1aW50MzJfdCBzcmNfeDsKPiAr CXVpbnQzMl90IHNyY195Owo+ICsJdWludDMyX3Qgc3JjX3c7Cj4gKwl1aW50MzJfdCBzcmNfaDsK PiArCWludDMyX3QgY3J0Y194Owo+ICsJaW50MzJfdCBjcnRjX3k7Cj4gKwl1aW50MzJfdCBjcnRj X3c7Cj4gKwl1aW50MzJfdCBjcnRjX2g7Cj4gKwo+ICsJaWd0X2Fzc2VydChwbGFuZS0+ZHJtX3Bs YW5lKTsKPiArCj4gKwkvKiBpdCdzIGFuIGVycm9yIHRvIHRyeSBhbiB1bnN1cHBvcnRlZCBmZWF0 dXJlICovCj4gKwlpZ3RfYXNzZXJ0KGlndF9wbGFuZV9zdXBwb3J0c19yb3RhdGlvbihwbGFuZSkg fHwKPiArCQkJIXBsYW5lLT5yb3RhdGlvbl9jaGFuZ2VkKTsKPiArCj4gKwlmYl9pZCA9IGlndF9w bGFuZV9nZXRfZmJfaWQocGxhbmUpOwo+ICsJY3J0Y19pZCA9IG91dHB1dC0+Y29uZmlnLmNydGMt PmNydGNfaWQ7Cj4gKwo+ICsJaWYgKChwbGFuZS0+ZmJfY2hhbmdlZCB8fCBwbGFuZS0+c2l6ZV9j aGFuZ2VkKSAmJiBmYl9pZCA9PSAwKSB7Cj4gKwo+ICsJCUxPRyhkaXNwbGF5LAo+ICsJCSAgICAi JXM6IHBvcHVsYXRpbmcgcGxhbmUgZGF0YTogcGlwZSAlcywgcGxhbmUgJWQsIGRpc2FibGluZ1xu IiwKPiArCQkgICAgIGlndF9vdXRwdXRfbmFtZShvdXRwdXQpLAo+ICsJCSAgICAga21zdGVzdF9w aXBlX25hbWUob3V0cHV0LT5jb25maWcucGlwZSksCj4gKwkJICAgICBwbGFuZS0+aW5kZXgpOwo+ ICsKPiArCQkvKiBwb3B1bGF0ZSBwbGFuZSByZXEgKi8KPiArCQlpZ3RfYXRvbWljX3BvcHVsYXRl X3BsYW5lX3JlcShyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19JRCwgMCk7Cj4gKwkJaWd0X2F0 b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEocmVxLCBwbGFuZSwgSUdUX1BMQU5FX0ZCX0lELCAwKTsK PiArCj4gKwkJaWd0X2F0b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEocmVxLCBwbGFuZSwgSUdUX1BM QU5FX1NSQ19YLCBJR1RfRklYRUQoMCwgMCkpOwo+ICsJCWlndF9hdG9taWNfcG9wdWxhdGVfcGxh bmVfcmVxKHJlcSwgcGxhbmUsIElHVF9QTEFORV9TUkNfWSwgSUdUX0ZJWEVEKDAsIDApKTsKPiAr CQlpZ3RfYXRvbWljX3BvcHVsYXRlX3BsYW5lX3JlcShyZXEsIHBsYW5lLCBJR1RfUExBTkVfU1JD X1csIElHVF9GSVhFRCgwLCAwKSk7Cj4gKwkJaWd0X2F0b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEo cmVxLCBwbGFuZSwgSUdUX1BMQU5FX1NSQ19ILCBJR1RfRklYRUQoMCwgMCkpOwo+ICsKPiArCQlp Z3RfYXRvbWljX3BvcHVsYXRlX3BsYW5lX3JlcShyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19Y LCAwKTsKPiArCQlpZ3RfYXRvbWljX3BvcHVsYXRlX3BsYW5lX3JlcShyZXEsIHBsYW5lLCBJR1Rf UExBTkVfQ1JUQ19ZLCAwKTsKPiArCQlpZ3RfYXRvbWljX3BvcHVsYXRlX3BsYW5lX3JlcShyZXEs IHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19XLCAwKTsKPiArCQlpZ3RfYXRvbWljX3BvcHVsYXRlX3Bs YW5lX3JlcShyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19ILCAwKTsKPiArCj4gKwl9IGVsc2Ug aWYgKHBsYW5lLT5mYl9jaGFuZ2VkIHx8IHBsYW5lLT5wb3NpdGlvbl9jaGFuZ2VkIHx8Cj4gKwkJ CXBsYW5lLT5zaXplX2NoYW5nZWQpIHsKPiArCj4gKwkJc3JjX3ggPSBJR1RfRklYRUQocGxhbmUt PmZiLT5zcmNfeCwgMCk7IC8qIHNyY194ICovCj4gKwkJc3JjX3kgPSBJR1RfRklYRUQocGxhbmUt PmZiLT5zcmNfeSwgMCk7IC8qIHNyY195ICovCj4gKwkJc3JjX3cgPSBJR1RfRklYRUQocGxhbmUt PmZiLT5zcmNfdywgMCk7IC8qIHNyY193ICovCj4gKwkJc3JjX2ggPSBJR1RfRklYRUQocGxhbmUt PmZiLT5zcmNfaCwgMCk7IC8qIHNyY19oICovCj4gKwkJY3J0Y194ID0gcGxhbmUtPmNydGNfeDsK PiArCQljcnRjX3kgPSBwbGFuZS0+Y3J0Y195Owo+ICsJCWNydGNfdyA9IHBsYW5lLT5jcnRjX3c7 Cj4gKwkJY3J0Y19oID0gcGxhbmUtPmNydGNfaDsKPiArCj4gKwkJTE9HKGRpc3BsYXksCj4gKwkJ ICAgICIlczogcG9wdWxhdGluZyBwbGFuZSBkYXRhOiAlcy4lZCwgZmIgJXUsIHNyYyA9ICglZCwg JWQpICIKPiArCQkgICAgIiV1eCV1IGRzdCA9ICgldSwgJXUpICV1eCV1XG4iLAo+ICsJCSAgICBp Z3Rfb3V0cHV0X25hbWUob3V0cHV0KSwKPiArCQkgICAga21zdGVzdF9waXBlX25hbWUob3V0cHV0 LT5jb25maWcucGlwZSksCj4gKwkJICAgIHBsYW5lLT5pbmRleCwKPiArCQkgICAgZmJfaWQsCj4g KwkJICAgIHNyY194ID4+IDE2LCBzcmNfeSA+PiAxNiwgc3JjX3cgPj4gMTYsIHNyY19oID4+IDE2 LAo+ICsJCSAgICBjcnRjX3gsIGNydGNfeSwgY3J0Y193LCBjcnRjX2gpOwo+ICsKPiArCj4gKwkJ LyogcG9wdWxhdGUgcGxhbmUgcmVxICovCj4gKwkJaWd0X2F0b21pY19wb3B1bGF0ZV9wbGFuZV9y ZXEocmVxLCBwbGFuZSwgSUdUX1BMQU5FX0NSVENfSUQsIGNydGNfaWQpOwo+ICsJCWlndF9hdG9t aWNfcG9wdWxhdGVfcGxhbmVfcmVxKHJlcSwgcGxhbmUsIElHVF9QTEFORV9GQl9JRCwgZmJfaWQp Owo+ICsKPiArCQlpZ3RfYXRvbWljX3BvcHVsYXRlX3BsYW5lX3JlcShyZXEsIHBsYW5lLCBJR1Rf UExBTkVfU1JDX1gsIHNyY194KTsKPiArCQlpZ3RfYXRvbWljX3BvcHVsYXRlX3BsYW5lX3JlcShy ZXEsIHBsYW5lLCBJR1RfUExBTkVfU1JDX1ksIHNyY195KTsKPiArCQlpZ3RfYXRvbWljX3BvcHVs YXRlX3BsYW5lX3JlcShyZXEsIHBsYW5lLCBJR1RfUExBTkVfU1JDX1csIHNyY193KTsKPiArCQlp Z3RfYXRvbWljX3BvcHVsYXRlX3BsYW5lX3JlcShyZXEsIHBsYW5lLCBJR1RfUExBTkVfU1JDX0gs IHNyY19oKTsKPiArCj4gKwkJaWd0X2F0b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEocmVxLCBwbGFu ZSwgSUdUX1BMQU5FX0NSVENfWCwgY3J0Y194KTsKPiArCQlpZ3RfYXRvbWljX3BvcHVsYXRlX3Bs YW5lX3JlcShyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19ZLCBjcnRjX3kpOwo+ICsJCWlndF9h dG9taWNfcG9wdWxhdGVfcGxhbmVfcmVxKHJlcSwgcGxhbmUsIElHVF9QTEFORV9DUlRDX1csIGNy dGNfdyk7Cj4gKwkJaWd0X2F0b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEocmVxLCBwbGFuZSwgSUdU X1BMQU5FX0NSVENfSCwgY3J0Y19oKTsKPiArCj4gKwkJaWYgKHBsYW5lLT5yb3RhdGlvbl9jaGFu Z2VkKQo+ICsJCQlpZ3RfYXRvbWljX3BvcHVsYXRlX3BsYW5lX3JlcShyZXEsIHBsYW5lLAo+ICsJ CQkJSUdUX1BMQU5FX1JPVEFUSU9OLCBwbGFuZS0+cm90YXRpb24pOwo+ICsKPiArCX0KPiArCj4g KwlwbGFuZS0+ZmJfY2hhbmdlZCA9IGZhbHNlOwo+ICsJcGxhbmUtPnBvc2l0aW9uX2NoYW5nZWQg PSBmYWxzZTsKPiArCXBsYW5lLT5zaXplX2NoYW5nZWQgPSBmYWxzZTsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArCj4gKwo+ICAvKgo+ICAgKiBDb21taXQgcG9zaXRpb24gYW5kIGZiIGNo YW5nZXMgdG8gYSBEUk0gcGxhbmUgdmlhIHRoZSBTZXRQbGFuZSBpb2N0bDsgaWYgdGhlCj4gICAq IERSTSBjYWxsIHRvIHByb2dyYW0gdGhlIHBsYW5lIGZhaWxzLCB3ZSdsbCBlaXRoZXIgZmFpbCBp bW1lZGlhdGVseSAoZm9yCj4gQEAgLTE2MDEsNyArMTgyNSw3IEBAIHN0YXRpYyBpbnQgaWd0X3Bs YW5lX2NvbW1pdChpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gIAkJcmV0dXJuIGlndF9wcmltYXJ5X3Bs YW5lX2NvbW1pdF9sZWdhY3kocGxhbmUsIG91dHB1dCwKPiAgCQkJCQkJICAgICAgIGZhaWxfb25f ZXJyb3IpOwo+ICAJfSBlbHNlIHsKPiAtCQlyZXR1cm4gaWd0X2RybV9wbGFuZV9jb21taXQocGxh bmUsIG91dHB1dCwgZmFpbF9vbl9lcnJvcik7Cj4gKwkJCXJldHVybiBpZ3RfZHJtX3BsYW5lX2Nv bW1pdChwbGFuZSwgb3V0cHV0LCBmYWlsX29uX2Vycm9yKTsKPiAgCX0KPiAgfQo+ICAKPiBAQCAt MTY1NSw2ICsxODc5LDkwIEBAIHN0YXRpYyBpbnQgaWd0X291dHB1dF9jb21taXQoaWd0X291dHB1 dF90ICpvdXRwdXQsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiArCj4gKy8qCj4gKyAqIEFkZCBj cnRjIHByb3BlcnR5IGNoYW5nZXMgdG8gdGhlIGF0b21pYyBwcm9wZXJ0eSBzZXQKPiArICovCj4g K3N0YXRpYyB2b2lkIGlndF9hdG9taWNfcHJlcGFyZV9jcnRjX2NvbW1pdChpZ3Rfb3V0cHV0X3Qg Km91dHB1dCwgZHJtTW9kZUF0b21pY1JlcSAqcmVxKQo+ICt7Cj4gKwo+ICsJaWd0X3BpcGVfdCAq cGlwZV9vYmogPSBpZ3Rfb3V0cHV0X2dldF9kcml2aW5nX3BpcGUob3V0cHV0KTsKPiArCj4gKwlp ZiAocGlwZV9vYmotPmJhY2tncm91bmRfY2hhbmdlZCkKPiArCQlpZ3RfYXRvbWljX3BvcHVsYXRl X2NydGNfcmVxKHJlcSwgb3V0cHV0LCBJR1RfQ1JUQ19CQUNLR1JPVU5ELCBwaXBlX29iai0+YmFj a2dyb3VuZCk7Cj4gKwo+ICsJLyoKPiArCSAqCVRPRE86IEFkZCBhbGwgY3J0YyBsZXZlbCBwcm9w ZXJ0aWVzIGhlcmUKPiArCSAqLwo+ICsKPiArfQo+ICsKPiArLyoKPiArICogQWRkIGNvbm5lY3Rv ciBwcm9wZXJ0eSBjaGFuZ2VzIHRvIHRoZSBhdG9taWMgcHJvcGVydHkgc2V0Cj4gKyAqLwo+ICtz dGF0aWMgdm9pZCBpZ3RfYXRvbWljX3ByZXBhcmVfY29ubmVjdG9yX2NvbW1pdChpZ3Rfb3V0cHV0 X3QgKm91dHB1dCwgZHJtTW9kZUF0b21pY1JlcSAqcmVxKQo+ICt7Cj4gKwo+ICsJc3RydWN0IGtt c3Rlc3RfY29ubmVjdG9yX2NvbmZpZyAqY29uZmlnID0gJm91dHB1dC0+Y29uZmlnOwo+ICsKPiAr CWlmIChjb25maWctPmNvbm5lY3Rvcl9zY2FsaW5nX21vZGVfY2hhbmdlZCkKPiArCQlpZ3RfYXRv bWljX3BvcHVsYXRlX2Nvbm5lY3Rvcl9yZXEocmVxLCBvdXRwdXQsIElHVF9DT05ORUNUT1JfU0NB TElOR19NT0RFLCBjb25maWctPmNvbm5lY3Rvcl9zY2FsaW5nX21vZGUpOwo+ICsKPiArCWlmIChj b25maWctPmNvbm5lY3Rvcl9kcG1zX2NoYW5nZWQpCj4gKwkJaWd0X2F0b21pY19wb3B1bGF0ZV9j b25uZWN0b3JfcmVxKHJlcSwgb3V0cHV0LCBJR1RfQ09OTkVDVE9SX0RQTVMsIGNvbmZpZy0+Y29u bmVjdG9yX2RwbXMpOwo+ICsJLyoKPiArCSAqCVRPRE86IEFkZCBhbGwgb3RoZXIgY29ubmVjdG9y IGxldmVsIHByb3BlcnRpZXMgaGVyZQo+ICsJICovCj4gKwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBD b21taXQgYWxsIHRoZSBjaGFuZ2VzIG9mIGFsbCB0aGUgcGxhbmVzLGNydGNzLCBjb25uZWN0b3Jz Cj4gKyAqIGF0b21pY2FsbHkgdXNpbmcgZHJtTW9kZUF0b21pY0NvbW1pdCgpCj4gKyAqLwo+ICtz dGF0aWMgaW50IGlndF9hdG9taWNfY29tbWl0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXkpCj4gK3sK PiArCj4gKwlpbnQgcmV0ID0gMDsKPiArCWRybU1vZGVBdG9taWNSZXEgKnJlcTsKPiArCWRvX29y X2RpZShkcm1TZXRDbGllbnRDYXAoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fQ0xJRU5UX0NBUF9BVE9N SUMsIDEpKTsKPiArCWludCBpID0gMDsKPiArCj4gKwlyZXEgPSBkcm1Nb2RlQXRvbWljQWxsb2Mo KTsKPiArCWRybU1vZGVBdG9taWNTZXRDdXJzb3IocmVxLCAwKTsKPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgZGlzcGxheS0+bl9vdXRwdXRzOyBpKyspIHsKPiArCQlpZ3Rfb3V0cHV0X3QgKm91dHB1 dCA9ICZkaXNwbGF5LT5vdXRwdXRzW2ldOwo+ICsJCWlndF9waXBlX3QgKnBpcGU7Cj4gKwo+ICsJ CWlmICghb3V0cHV0LT52YWxpZCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCS8qCj4gKwkJICog QWRkIENSVEMgUHJvcGVydGllcyB0byB0aGUgcHJvcGVydHkgc2V0Cj4gKwkJICovCj4gKwkJaWd0 X2F0b21pY19wcmVwYXJlX2NydGNfY29tbWl0KG91dHB1dCwgcmVxKTsKPiArCj4gKwkJLyoKPiAr CQkgKiBBZGQgQ29ubmVjdG9yIFByb3BlcnRpZXMgdG8gdGhlIHByb3BlcnR5IHNldAo+ICsJCSAq Lwo+ICsJCWlndF9hdG9taWNfcHJlcGFyZV9jb25uZWN0b3JfY29tbWl0KG91dHB1dCwgcmVxKTsK PiArCj4gKwo+ICsJCXBpcGUgPSBpZ3Rfb3V0cHV0X2dldF9kcml2aW5nX3BpcGUob3V0cHV0KTsK PiArCj4gKwkJZm9yIChpID0gMDsgaSA8IHBpcGUtPm5fcGxhbmVzOyBpKyspIHsKPiArCQkJaWd0 X3BsYW5lX3QgKnBsYW5lID0gJnBpcGUtPnBsYW5lc1tpXTsKPiArCQkJaWd0X2F0b21pY19wcmVw YXJlX3BsYW5lX2NvbW1pdChwbGFuZSwgb3V0cHV0LCByZXEpOwo+ICsJCX0KPiArCj4gKwl9Cj4g Kwo+ICsJcmV0ID0gZHJtTW9kZUF0b21pY0NvbW1pdChkaXNwbGF5LT5kcm1fZmQsIHJlcSwgMCwg TlVMTCk7Cj4gKwlkcm1Nb2RlQXRvbWljRnJlZShyZXEpOwo+ICsJcmV0dXJuIHJldDsKPiArCj4g K30KPiAgLyoKPiAgICogQ29tbWl0IGFsbCBwbGFuZSBjaGFuZ2VzIGFjcm9zcyBhbGwgb3V0cHV0 cyBvZiB0aGUgZGlzcGxheS4KPiAgICoKPiBAQCAtMTY3NCw2ICsxOTgyLDE0IEBAIHN0YXRpYyBp bnQgZG9fZGlzcGxheV9jb21taXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwKPiAgCj4gIAlpZ3Rf ZGlzcGxheV9yZWZyZXNoKGRpc3BsYXkpOwo+ICAKPiArCWlmIChzID09IENPTU1JVF9BVE9NSUMp IHsKPiArCj4gKwkJcmV0ID0gaWd0X2F0b21pY19jb21taXQoZGlzcGxheSk7Cj4gKwkJQ0hFQ0tf UkVUVVJOKHJldCwgZmFpbF9vbl9lcnJvcik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJfQo+ICsK PiAgCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5uX291dHB1dHM7IGkrKykgewo+ICAJCWlndF9v dXRwdXRfdCAqb3V0cHV0ID0gJmRpc3BsYXktPm91dHB1dHNbaV07Cj4gIAo+IGRpZmYgLS1naXQg YS9saWIvaWd0X2ttcy5oIGIvbGliL2lndF9rbXMuaAo+IGluZGV4IDNmN2FkZDUuLjc2OGE1ZTMg MTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9rbXMuaAo+ICsrKyBiL2xpYi9pZ3Rfa21zLmgKPiBAQCAt MTA2LDExICsxMDYsMjggQEAgaW50IGttc3Rlc3RfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkKGludCBm ZCwgaW50IGNydGNfaWQpOwo+ICB2b2lkIGttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUodm9p ZCk7Cj4gIHZvaWQga21zdGVzdF9yZXN0b3JlX3Z0X21vZGUodm9pZCk7Cj4gIAo+ICtlbnVtIGln dF9hdG9taWNfY3J0Y19wcm9wZXJ0aWVzIHsKPiArICAgICAgIElHVF9DUlRDX0JBQ0tHUk9VTkQg PSAwLAo+ICsgICAgICAgSUdUX05VTV9DUlRDX1BST1BTCj4gK307Cj4gKwo+ICtlbnVtIGlndF9h dG9taWNfY29ubmVjdG9yX3Byb3BlcnRpZXMgewo+ICsgICAgICAgSUdUX0NPTk5FQ1RPUl9TQ0FM SU5HX01PREUgPSAwLAo+ICsgICAgICAgSUdUX0NPTk5FQ1RPUl9EUE1TLAo+ICsgICAgICAgSUdU X05VTV9DT05ORUNUT1JfUFJPUFMKPiArfTsKPiArCj4gIHN0cnVjdCBrbXN0ZXN0X2Nvbm5lY3Rv cl9jb25maWcgewo+ICAJZHJtTW9kZUNydGMgKmNydGM7Cj4gIAlkcm1Nb2RlQ29ubmVjdG9yICpj b25uZWN0b3I7Cj4gIAlkcm1Nb2RlRW5jb2RlciAqZW5jb2RlcjsKPiAgCWRybU1vZGVNb2RlSW5m byBkZWZhdWx0X21vZGU7Cj4gKwl1aW50NjRfdCBjb25uZWN0b3Jfc2NhbGluZ19tb2RlOwo+ICsJ Ym9vbCBjb25uZWN0b3Jfc2NhbGluZ19tb2RlX2NoYW5nZWQ7Cj4gKwl1aW50NjRfdCBjb25uZWN0 b3JfZHBtczsKPiArCWJvb2wgY29ubmVjdG9yX2RwbXNfY2hhbmdlZDsKPiArCXVpbnQzMl90IGF0 b21pY19wcm9wc19jcnRjW0lHVF9OVU1fQ1JUQ19QUk9QU107Cj4gKwl1aW50MzJfdCBhdG9taWNf cHJvcHNfY29ubmVjdG9yW0lHVF9OVU1fQ09OTkVDVE9SX1BST1BTXTsKPiAgCWludCBjcnRjX2lk eDsKPiAgCWludCBwaXBlOwo+ICB9Owo+IEBAIC0xNTksOSArMTc2LDI4IEBAIHZvaWQga21zdGVz dF91bnNldF9hbGxfY3J0Y3MoaW50IGRybV9mZCwgZHJtTW9kZVJlc1B0ciByZXNvdXJjZXMpOwo+ ICBlbnVtIGlndF9jb21taXRfc3R5bGUgewo+ICAJQ09NTUlUX0xFR0FDWSA9IDAsCj4gIAlDT01N SVRfVU5JVkVSU0FMLAo+IC0JLyogV2UnbGwgYWRkIGF0b21pYyBoZXJlIGV2ZW50dWFsbHkuICov Cj4gKwlDT01NSVRfQVRPTUlDLAo+ICB9Owo+ICAKPiArZW51bSBpZ3RfYXRvbWljX3BsYW5lX3By b3BlcnRpZXMgewo+ICsgICAgICAgSUdUX1BMQU5FX1NSQ19YID0gMCwKPiArICAgICAgIElHVF9Q TEFORV9TUkNfWSwKPiArICAgICAgIElHVF9QTEFORV9TUkNfVywKPiArICAgICAgIElHVF9QTEFO RV9TUkNfSCwKPiArCj4gKyAgICAgICBJR1RfUExBTkVfQ1JUQ19YLAo+ICsgICAgICAgSUdUX1BM QU5FX0NSVENfWSwKPiArICAgICAgIElHVF9QTEFORV9DUlRDX1csCj4gKyAgICAgICBJR1RfUExB TkVfQ1JUQ19ILAo+ICsKPiArICAgICAgIElHVF9QTEFORV9GQl9JRCwKPiArICAgICAgIElHVF9Q TEFORV9DUlRDX0lELAo+ICsgICAgICAgSUdUX1BMQU5FX1RZUEUsCj4gKyAgICAgICBJR1RfUExB TkVfUk9UQVRJT04sCj4gKyAgICAgICBJR1RfTlVNX1BMQU5FX1BST1BTCj4gK307Cj4gKwo+ICsK PiAgdHlwZWRlZiBzdHJ1Y3QgaWd0X2Rpc3BsYXkgaWd0X2Rpc3BsYXlfdDsKPiAgdHlwZWRlZiBz dHJ1Y3QgaWd0X3BpcGUgaWd0X3BpcGVfdDsKPiAgdHlwZWRlZiB1aW50MzJfdCBpZ3RfZml4ZWRf dDsJCQkvKiAxNi4xNiBmaXhlZCBwb2ludCAqLwo+IEBAIC0yMDMsNiArMjM5LDcgQEAgdHlwZWRl ZiBzdHJ1Y3Qgewo+ICAJLyogcGFubmluZyBvZmZzZXQgd2l0aGluIHRoZSBmYiAqLwo+ICAJdW5z aWduZWQgaW50IHBhbl94LCBwYW5feTsKPiAgCWlndF9yb3RhdGlvbl90IHJvdGF0aW9uOwo+ICsJ dWludDMyX3QgYXRvbWljX3Byb3BzX3BsYW5lW0lHVF9OVU1fUExBTkVfUFJPUFNdOwo+ICB9IGln dF9wbGFuZV90Owo+ICAKPiAgc3RydWN0IGlndF9waXBlIHsKPiBAQCAtMjg0LDYgKzMyMSwzOCBA QCB2b2lkIGlndF93YWl0X2Zvcl92YmxhbmsoaW50IGRybV9mZCwgZW51bSBwaXBlIHBpcGUpOwo+ ICAKPiAgI2RlZmluZSBJR1RfRklYRUQoaSxmKQkoKGkpIDw8IDE2IHwgKGYpKQo+ICAKPiArLyoq Cj4gKyAqIGlndF9hdG9taWNfcG9wdWxhdGVfcGxhbmVfcmVxOgo+ICsgKiBAcmVxOiBBIHBvaW50 ZXIgdG8gZHJtTW9kZUF0b21pY1JlcQo+ICsgKiBAcGxhbmU6IEEgcG9pbnRlciBpZ3RfcGxhbmVf dAo+ICsgKiBAcHJvcDogb25lIG9mIGlndF9hdG9taWNfcGxhbmVfcHJvcGVydGllcwo+ICsgKiBA dmFsdWU6IHRoZSB2YWx1ZSB0byBhZGQKPiArICovCj4gKyNkZWZpbmUgaWd0X2F0b21pY19wb3B1 bGF0ZV9wbGFuZV9yZXEocmVxLCBwbGFuZSwgcHJvcCwgdmFsdWUpIFwKPiArCWlndF9hc3NlcnRf bHQoMCwgZHJtTW9kZUF0b21pY0FkZFByb3BlcnR5KHJlcSwgcGxhbmUtPmRybV9wbGFuZS0+cGxh bmVfaWQsXAo+ICsJCQkJCQkgIHBsYW5lLT5hdG9taWNfcHJvcHNfcGxhbmVbcHJvcF0sIHZhbHVl KSkKPiArCj4gKy8qKgo+ICsgKiBpZ3RfYXRvbWljX3BvcHVsYXRlX2NydGNfcmVxOgo+ICsgKiBA cmVxOiBBIHBvaW50ZXIgdG8gZHJtTW9kZUF0b21pY1JlcQo+ICsgKiBAb3V0cHV0OiBBIHBvaW50 ZXIgaWd0X291dHB1dF90Cj4gKyAqIEBwcm9wOiBvbmUgb2YgaWd0X2F0b21pY19jcnRjX3Byb3Bl cnRpZXMKPiArICogQHZhbHVlOiB0aGUgdmFsdWUgdG8gYWRkCj4gKyAqLwo+ICsjZGVmaW5lIGln dF9hdG9taWNfcG9wdWxhdGVfY3J0Y19yZXEocmVxLCBvdXRwdXQsIHByb3AsIHZhbHVlKSBcCj4g KwlpZ3RfYXNzZXJ0X2x0KDAsIGRybU1vZGVBdG9taWNBZGRQcm9wZXJ0eShyZXEsIG91dHB1dC0+ Y29uZmlnLmNydGMtPmNydGNfaWQsXAo+ICsJCQkJCQkgIG91dHB1dC0+Y29uZmlnLmF0b21pY19w cm9wc19jcnRjW3Byb3BdLCB2YWx1ZSkpCj4gKy8qKgo+ICsgKiBpZ3RfYXRvbWljX3BvcHVsYXRl X2Nvbm5lY3Rvcl9yZXE6Cj4gKyAqIEByZXE6IEEgcG9pbnRlciB0byBkcm1Nb2RlQXRvbWljUmVx Cj4gKyAqIEBvdXRwdXQ6IEEgcG9pbnRlciBpZ3Rfb3V0cHV0X3QKPiArICogQHByb3A6IG9uZSBv ZiBpZ3RfYXRvbWljX2Nvbm5lY3Rvcl9wcm9wZXJ0aWVzCj4gKyAqIEB2YWx1ZTogdGhlIHZhbHVl IHRvIGFkZAo+ICsgKi8KPiArI2RlZmluZSBpZ3RfYXRvbWljX3BvcHVsYXRlX2Nvbm5lY3Rvcl9y ZXEocmVxLCBvdXRwdXQsIHByb3AsIHZhbHVlKSBcCj4gKwlpZ3RfYXNzZXJ0X2x0KDAsIGRybU1v ZGVBdG9taWNBZGRQcm9wZXJ0eShyZXEsIG91dHB1dC0+Y29uZmlnLmNvbm5lY3Rvci0+Y29ubmVj dG9yX2lkLFwKPiArCQkJCQkJICBvdXRwdXQtPmNvbmZpZy5hdG9taWNfcHJvcHNfY29ubmVjdG9y W3Byb3BdLCB2YWx1ZSkpCj4gKwo+ICB2b2lkIGlndF9lbmFibGVfY29ubmVjdG9ycyh2b2lkKTsK PiAgdm9pZCBpZ3RfcmVzZXRfY29ubmVjdG9ycyh2b2lkKTsKPiAgCkEgY2hhbmdlbG9nIHdvdWxk IGJlIG5pY2UsIEknbSBub3QgYSBjb21wdXRlciBzbyBJIGRvbid0IHNlZSB0aGUgZGlmZmVyZW5j ZXMgYmV0d2VlbiBlYWNoIHZlcnNpb24uCkkgc2VlIGEgZ2xhcmluZyB0eXBvIGluIHRoZSBjb21t aXQgc3VtbWFyeSB0aG91Z2guIENPTUlUIC0+IENPTU1JVAoKfk1hYXJ0ZW4KX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK