From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 261F188E14 for ; Wed, 17 Apr 2019 08:52:19 +0000 (UTC) Date: Wed, 17 Apr 2019 11:52:16 +0300 From: Petri Latvala Message-ID: <20190417085216.GQ22949@platvala-desk.ger.corp.intel.com> References: <20190416201101.9132-1-lyude@redhat.com> <20190416201101.9132-4-lyude@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190416201101.9132-4-lyude@redhat.com> Subject: Re: [igt-dev] [PATCH i-g-t 3/7] lib: Stop using assert() for runtime checks List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Lyude Cc: igt-dev@lists.freedesktop.org List-ID: T24gVHVlLCBBcHIgMTYsIDIwMTkgYXQgMDQ6MTA6NTdQTSAtMDQwMCwgTHl1ZGUgd3JvdGU6Cj4g RnJvbTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KPiAKPiBJbiB0aGUgcHJvY2VzcyBv ZiB0cnlpbmcgdG8gZ2V0IGFuIHVwIHRvIGRhdGUgdmVyc2lvbiBvZiBpZ3QgcGFja2FnZWQKPiBm b3IgRmVkb3JhIEkgZGlzY292ZXJlZCB0aGF0IGlmIGlndCB3YXMgYnVpbHQgd2l0aCAtRGJfbmRl YnVnPXRydWUsIGEKPiBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSB0ZXN0IGluZnJhc3RydWN0 dXJlIHVuaXQgdGVzdHMgd291bGQgc3RhcnQKPiBmYWlsaW5nOgo+IAo+ICAgMS8yNjUgbGliOiBp Z3RfYXNzZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgIE9LICAgICAgIDAuMTEgcwo+ICAgMi8y NjUgbGliOiBpZ3RfY2FuX2ZhaWwgICAgICAgICAgICAgICAgICAgICAgIE9LICAgICAgIDAuMDgg cwo+ICAgMy8yNjUgbGliOiBpZ3RfY2FuX2ZhaWxfc2ltcGxlICAgICAgICAgICAgICAgIE9LICAg ICAgIDAuMDggcwo+ICAgNC8yNjUgbGliOiBpZ3RfZXhpdF9oYW5kbGVyICAgICAgICAgICAgICAg ICAgIE9LICAgICAgIDAuMDUgcwo+ICAgNS8yNjUgbGliOiBpZ3RfZm9yayAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZBSUwgICAgIDAuMDUgcyAoa2lsbGVkIGJ5IHNpZ25hbCA5IFNJR0tJTEwp Cj4gICA2LzI2NSBsaWI6IGlndF9mb3JrX2hlbHBlciAgICAgICAgICAgICAgICAgICAgT0sgICAg ICAgMC40MiBzCj4gICA3LzI2NSBsaWI6IGlndF9oZG1pX2luamVjdCAgICAgICAgICAgICAgICAg ICAgT0sgICAgICAgMC4wNSBzCj4gICA4LzI2NSBsaWI6IGlndF9saXN0X29ubHkgICAgICAgICAg ICAgICAgICAgICAgT0sgICAgICAgMC4wMSBzCj4gICA5LzI2NSBsaWI6IGlndF9pbnZhbGlkX3N1 YnRlc3RfbmFtZSAgICAgICAgICAgT0sgICAgICAgMC4wNSBzCj4gIDEwLzI2NSBsaWI6IGlndF9u b19leGl0ICAgICAgICAgICAgICAgICAgICAgICAgT0sgICAgICAgMC4wNCBzCj4gIDExLzI2NSBs aWI6IGlndF9zZWdmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgT0sgICAgICAgMC4zOCBzCj4g IDEyLzI2NSBsaWI6IGlndF9zaW11bGF0aW9uICAgICAgICAgICAgICAgICAgICAgT0sgICAgICAg MC4wMiBzCj4gIDEzLzI2NSBsaWI6IGlndF9zdGF0cyAgICAgICAgICAgICAgICAgICAgICAgICAg T0sgICAgICAgMC4wNCBzCj4gIDE0LzI2NSBsaWI6IGlndF9zdWJ0ZXN0X2dyb3VwICAgICAgICAg ICAgICAgICAgT0sgICAgICAgMC4wMyBzCj4gIDE1LzI2NSBsaWI6IGlndF9ub19zdWJ0ZXN0ICAg ICAgICAgICAgICAgICAgICAgU0tJUCAgICAgMC4wMiBzCj4gIDE2LzI2NSBsaWI6IGlndF9zaW1w bGVfdGVzdF9zdWJ0ZXN0cyAgICAgICAgICAgVU5FWFBFQ1RFRFBBU1MgMC4wMiBzCj4gIDE3LzI2 NSBsaWI6IGlndF90aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURGQUlMIDEu MDIgcwo+IAo+IFdoaWNoIGFwcGVhcmVkIHRvIHN0ZW0gZnJvbSB0aGUgZmFjdCB0aGF0IC1EYl9u ZGVidWc9dHJ1ZSB3b3VsZCBzdHJpcAo+IGFzc2VydCgpIGNhbGxzLiBXaGlsZSBvbiBhIGZpcnN0 IGdsYW5jZSBvZiBsaWIvdGVzdHMvaWd0X3Rlc3RzX2NvbW1vbi5oCj4gb25lIHdvdWxkIGFzc3Vt ZSB0aGF0IHRoZSBvbmx5IHVzZXIgb2YgYXNzZXJ0KCkgd2FzIHRoZSB0ZXN0Cj4gaW5mcmFzdHJ1 Y3R1cmUgdW5pdCB0ZXN0cyB0aGVtc2VsdmVzLCBpdCB0dXJucyBvdXQgd2UndmUgYWN0dWFsbHkg YmVlbgo+IHVzaW5nIHRoaXMgaW4gbXVsdGlwbGUgc3BvdHMgdGhhdCBzZWVtIHRvIGV4cGVjdCBh biB1bmNvbmRpdGlvbmFsCj4gcnVudGltZSBjaGVjay4KCgpVbW0sIHllcy4gWW91J3ZlIHVuY292 ZXJlZCBhIGJ1ZywgYnV0IG5vdCB3aGF0IHlvdSB0aGluay4gV2l0aCBtZXNvbiwKd2UgZG9uJ3Qg aW5jbHVkZSBsaWIvY2hlY2stbmRlYnVnLmggYW55bW9yZSwgb25seSB3aXRoIGF1dG90b29scyBz bwp5b3UgbWlzc2VkIHRoZSBpbXBvcnRhbnQgcGFydDogRG8gbm90IGF0dGVtcHQgdG8gYnVpbGQg SUdUIHdpdGgKYl9uZGVidWc9dHJ1ZS4KCgo+IFNvIGluIG9yZGVyIHRvIGZpeCB0aGlzLCB3ZSBp bnRyb2R1Y2UgaWd0X2ludGVybmFsX2Fzc2VydCgpLiBUaGUgcHVycG9zZQo+IG9mIHRoaXMgZnVu Y3Rpb24gaXMgdG8gcHJvdmlkZSBzaW1wbGUgcnVudGltZSBlcnJvci1jaGVja2luZyBmb3IKPiBj b25kaXRpb25zIHRoYXQgd2FycmFudCBhYm9ydCgpaW5nIElHVCB1bmRlciBhbnkgY2lyY3Vtc3Rh bmNlcywgYW5kIHRvCj4gcHJvdmlkZSBhIGludGVybmFsX2Fzc2VydCgpIHJlcGxhY2VtZW50IGZv ciBvdXIgdGVzdCBpbmZyYXN0cnVjdHVyZQo+IHRlc3RzIHRvIHVzZS4gVGhlbiwgcmVtb3ZlIGFs bCBvZiB0aGUgYXNzZXJ0KCkgdXNhZ2VzIGluIGxpYi90ZXN0cy8qCj4gYWxvbmcgd2l0aCBhbnkg b2YgdGhlIGFzc2VydCgpIGNhbGxzIGluIGxpYi9pZ3RfY29yZS5jIHRoYXQgYWZmZWN0IHRlc3QK PiBiZWhhdmlvci4KCkluIGEgbnV0c2hlbGw6IFlvdSB3YW50ZWQgdG8gYnVpbGQgd2l0aG91dCBh c3NlcnRzLCBzbyB5b3UgcmVtb3ZlZCBhbGwKdGhlIGFzc2VydHMgZnJvbSB0aGUgY29kZSwgcmVw bGFjaW5nIHRoZW0gd2l0aCB0aGUgc2FtZSBjb2RlPyBXaHk/CgpIb3dldmVyLCBpdCdzIHRoZSB0 aG91Z2h0IHRoYXQgbWF0dGVycywgYW5kIHRoaXMgaXMgc2xpZ2h0bHkgZ29pbmcgb2ZmCm9uIGEg dGFuZ2VudC4gVGhvc2UgdXNlcyBvZiBhc3NlcnQgaW4gbGliLyBhcmUgZm9yIHBsYWNlcyB3aGVy ZQoKMSkgc29tZXRoaW5nIGlzIGZhdGFsbHkgd3JvbmcgYW5kIHdlIG5lZWQgdG8gZHJvcCBldmVy eXRoaW5nIGFuZCBzdG9wCiAgIGV4ZWN1dGluZwoKMikgY2Fubm90IHVzZSBpZ3RfYXNzZXJ0IGZv ciBpdC4gVGhhdCdzIGZvciBwbGFjZXMgd2hlcmUgd2UgY2FuIHNheQogICAieW91IHRyaWVkIHRl c3RpbmcgeW91ciBrZXJuZWwgYnV0IGl0IGhhcyBhIGJ1ZyIuIFRoZSBsaWIvIGFzc2VydHMKICAg YXJlIGZvciAiSUdUIGhhcyBhIGJ1ZyIsIG9yIGluIGEgY291cGxlIG9mIGNhc2VzLCAieW91ciBJ R1Qgc2V0dXAKICAgaGFzIGEgYnVnIi4KCkNocmlzIGhhcyBiZWVuIHRvc3NpbmcgYXJvdW5kIG1l bnRpb25zIG9mIGhhdmluZyBhIGNsZWFyIGFuZCB1c2FibGUKaWd0X2lzX2Jyb2tlbl9ub3RfeW91 cl9rZXJuZWxfX2Fzc2VydCgpIGFuZCB0aGlzIG1pZ2h0IGJlIGEgZ29vZCBzcG90CnRvIGludHJv ZHVjZSBzdWNoIGEgdGhpbmcuIFBsYWluIGFzc2VydCgpIGlzIGZpbmUgdG8gYWNoaWV2ZSB0aGF0 Cm91dGNvbWUsIGJ1dCBpZ3QuY29jY2kgKGFsYmVpdCBhIGJpdCBkdXN0eSkgbnVrZXMgdGhvc2Ug ZnJvbSB0ZXN0cy8uIEEKJ0NSQVNIJyB0ZXN0IHJlc3VsdCBpcyBhIGZpbmUgb3V0Y29tZSB3aGVu IGl0J3MgdHJpZ2dlcmVkIGFuZCBjb252ZXlzCnRoZSBtZXNzYWdlIGFjcm9zcywgd2UganVzdCBu ZWVkIGEgY2xlYXIgbG9va2luZyBpZ3QgQVBJIGZvciBpdC4KCgoKCj4gCj4gU2lnbmVkLW9mZi1i eTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KPiAtLS0KPiAgbGliL2lndF9jb3JlLmMg ICAgICAgICAgICAgICAgICAgICAgIHwgMjQgKysrKystLS0tLS0KPiAgbGliL2lndF9jb3JlLmgg ICAgICAgICAgICAgICAgICAgICAgIHwgMTggKysrKysrKysrCj4gIGxpYi90ZXN0cy9pZ3RfYXNz ZXJ0LmMgICAgICAgICAgICAgICB8ICAyICstCj4gIGxpYi90ZXN0cy9pZ3RfY2FuX2ZhaWwuYyAg ICAgICAgICAgICB8IDEwICsrLS0tCj4gIGxpYi90ZXN0cy9pZ3RfY2FuX2ZhaWxfc2ltcGxlLmMg ICAgICB8ICAyICstCj4gIGxpYi90ZXN0cy9pZ3RfZXhpdF9oYW5kbGVyLmMgICAgICAgICB8IDE4 ICsrKystLS0tLQo+ICBsaWIvdGVzdHMvaWd0X2ZvcmsuYyAgICAgICAgICAgICAgICAgfCAgNCAr LQo+ICBsaWIvdGVzdHMvaWd0X2ludmFsaWRfc3VidGVzdF9uYW1lLmMgfCAgMiArLQo+ICBsaWIv dGVzdHMvaWd0X25vX2V4aXQuYyAgICAgICAgICAgICAgfCAgMiArLQo+ICBsaWIvdGVzdHMvaWd0 X3NlZ2ZhdWx0LmMgICAgICAgICAgICAgfCAgMiArLQo+ICBsaWIvdGVzdHMvaWd0X3NpbXVsYXRp b24uYyAgICAgICAgICAgfCA2MCArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCj4gIGxpYi90 ZXN0cy9pZ3Rfc3VidGVzdF9ncm91cC5jICAgICAgICB8IDE2ICsrKystLS0tCj4gIGxpYi90ZXN0 cy9pZ3RfdGVzdHNfY29tbW9uLmggICAgICAgICB8IDE5ICsrKystLS0tLQo+ICAxMyBmaWxlcyBj aGFuZ2VkLCA5NyBpbnNlcnRpb25zKCspLCA4MiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvbGliL2lndF9jb3JlLmMgYi9saWIvaWd0X2NvcmUuYwo+IGluZGV4IGFlMDNlOTA5Li5hNjM3 Yjk0ZSAxMDA2NDQKPiAtLS0gYS9saWIvaWd0X2NvcmUuYwo+ICsrKyBiL2xpYi9pZ3RfY29yZS5j Cj4gQEAgLTUyMSw3ICs1MjEsNyBAQCBzdGF0aWMgdm9pZCBjb21tb25fZXhpdF9oYW5kbGVyKGlu dCBzaWcpCj4gIAo+ICAJLyogV2hlbiBub3Qga2lsbGVkIGJ5IGEgc2lnbmFsIGNoZWNrIHRoYXQg aWd0X2V4aXQoKSBoYXMgYmVlbiBwcm9wZXJseQo+ICAJICogY2FsbGVkLiAqLwo+IC0JYXNzZXJ0 KHNpZyAhPSAwIHx8IGlndF9leGl0X2NhbGxlZCk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KHNp ZyAhPSAwIHx8IGlndF9leGl0X2NhbGxlZCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIHByaW50 X3Rlc3RfZGVzY3JpcHRpb24odm9pZCkKPiBAQCAtNjExLDcgKzYxMSw3IEBAIHN0YXRpYyB2b2lk IGNvbW1vbl9pbml0X2NvbmZpZyh2b2lkKQo+ICAKPiAgCXJldCA9IGdfa2V5X2ZpbGVfZ2V0X2lu dGVnZXIoaWd0X2tleV9maWxlLCAiRFVUIiwgIlN1c3BlbmRSZXN1bWVEZWxheSIsCj4gIAkJCQkg ICAgICZlcnJvcik7Cj4gLQlhc3NlcnQoIWVycm9yIHx8IGVycm9yLT5jb2RlICE9IEdfS0VZX0ZJ TEVfRVJST1JfSU5WQUxJRF9WQUxVRSk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KCFlcnJvciB8 fCBlcnJvci0+Y29kZSAhPSBHX0tFWV9GSUxFX0VSUk9SX0lOVkFMSURfVkFMVUUpOwo+ICAKPiAg CWdfY2xlYXJfZXJyb3IoJmVycm9yKTsKPiAgCj4gQEAgLTkwMyw5ICs5MDMsOSBAQCBib29sIF9f aWd0X3J1bl9zdWJ0ZXN0KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFtZSkKPiAgewo+ICAJaW50IGk7 Cj4gIAo+IC0JYXNzZXJ0KCFpbl9zdWJ0ZXN0KTsKPiAtCWFzc2VydCghaW5fZml4dHVyZSk7Cj4g LQlhc3NlcnQodGVzdF93aXRoX3N1YnRlc3RzKTsKPiArCWlndF9pbnRlcm5hbF9hc3NlcnQoIWlu X3N1YnRlc3QpOwo+ICsJaWd0X2ludGVybmFsX2Fzc2VydCghaW5fZml4dHVyZSk7Cj4gKwlpZ3Rf aW50ZXJuYWxfYXNzZXJ0KHRlc3Rfd2l0aF9zdWJ0ZXN0cyk7Cj4gIAo+ICAJLyogY2hlY2sgdGhl IHN1YnRlc3QgbmFtZSBvbmx5IGNvbnRhaW5zIGEteiwgQS1aLCAwLTksICctJyBhbmQgJ18nICov Cj4gIAlmb3IgKGkgPSAwOyBzdWJ0ZXN0X25hbWVbaV0gIT0gJ1wwJzsgaSsrKQo+IEBAIC05Nzgs NyArOTc4LDcgQEAgYm9vbCBpZ3Rfb25seV9saXN0X3N1YnRlc3RzKHZvaWQpCj4gIAo+ICB2b2lk IF9faWd0X3N1YnRlc3RfZ3JvdXBfc2F2ZShpbnQgKnNhdmUpCj4gIHsKPiAtCWFzc2VydCh0ZXN0 X3dpdGhfc3VidGVzdHMpOwo+ICsJaWd0X2ludGVybmFsX2Fzc2VydCh0ZXN0X3dpdGhfc3VidGVz dHMpOwo+ICAKPiAgCSpzYXZlID0gc2tpcF9zdWJ0ZXN0c19oZW5jZWZvcnRoOwo+ICB9Cj4gQEAg LTEwMzIsNyArMTAzMiw3IEBAIHZvaWQgaWd0X3NraXAoY29uc3QgY2hhciAqZiwgLi4uKQo+ICAJ dmFfbGlzdCBhcmdzOwo+ICAJc2tpcHBlZF9vbmUgPSB0cnVlOwo+ICAKPiAtCWFzc2VydCghdGVz dF9jaGlsZCk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KCF0ZXN0X2NoaWxkKTsKPiAgCj4gIAlp ZiAoIWlndF9vbmx5X2xpc3Rfc3VidGVzdHMoKSkgewo+ICAJCXZhX3N0YXJ0KGFyZ3MsIGYpOwo+ IEBAIC0xNTEwLDEwICsxNTEwLDEwIEBAIHZvaWQgaWd0X2V4aXQodm9pZCkKPiAgCQlleGl0KElH VF9FWElUX1NVQ0NFU1MpOwo+ICAKPiAgCS8qIENhbGxpbmcgdGhpcyB3aXRob3V0IGNhbGxpbmcg b25lIG9mIHRoZSBhYm92ZSBpcyBhIGZhaWx1cmUgKi8KPiAtCWFzc2VydCghdGVzdF93aXRoX3N1 YnRlc3RzIHx8Cj4gLQkgICAgICAgc2tpcHBlZF9vbmUgfHwKPiAtCSAgICAgICBzdWNjZWVkZWRf b25lIHx8Cj4gLQkgICAgICAgZmFpbGVkX29uZSk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KCF0 ZXN0X3dpdGhfc3VidGVzdHMgfHwKPiArCQkJICAgIHNraXBwZWRfb25lIHx8Cj4gKwkJCSAgICBz dWNjZWVkZWRfb25lIHx8Cj4gKwkJCSAgICBmYWlsZWRfb25lKTsKPiAgCj4gIAlpZiAodGVzdF93 aXRoX3N1YnRlc3RzICYmICFmYWlsZWRfb25lKSB7Cj4gIAkJaWYgKHN1Y2NlZWRlZF9vbmUpCj4g QEAgLTE1MzEsNyArMTUzMSw3IEBAIHZvaWQgaWd0X2V4aXQodm9pZCkKPiAgCQlraWxsKHRlc3Rf Y2hpbGRyZW5bY10sIFNJR0tJTEwpOwo+ICAJYXNzZXJ0KCFudW1fdGVzdF9jaGlsZHJlbik7Cj4g IAo+IC0JYXNzZXJ0KHdhaXRwaWQoLTEsICZ0bXAsIFdOT0hBTkcpID09IC0xICYmIGVycm5vID09 IEVDSElMRCk7Cj4gKwlpZ3RfaW50ZXJuYWxfYXNzZXJ0KHdhaXRwaWQoLTEsICZ0bXAsIFdOT0hB TkcpID09IC0xICYmIGVycm5vID09IEVDSElMRCk7Cj4gIAo+ICAJaWYgKCF0ZXN0X3dpdGhfc3Vi dGVzdHMpIHsKPiAgCQlzdHJ1Y3QgdGltZXNwZWMgbm93Owo+IGRpZmYgLS1naXQgYS9saWIvaWd0 X2NvcmUuaCBiL2xpYi9pZ3RfY29yZS5oCj4gaW5kZXggNDdmZmQ5ZTcuLmVlZDM5YmJmIDEwMDY0 NAo+IC0tLSBhL2xpYi9pZ3RfY29yZS5oCj4gKysrIGIvbGliL2lndF9jb3JlLmgKPiBAQCAtNzQ3 LDYgKzc0NywyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaWd0X2lnbm9yZV93YXJuKGJvb2wgdmFs dWUpCj4gIAllbHNlIGlndF9kZWJ1ZygiVGVzdCByZXF1aXJlbWVudCBwYXNzZWQ6ICEoJXMpXG4i LCAjZXhwcik7IFwKPiAgfSB3aGlsZSAoMCkKPiAgCj4gKy8qKgo+ICsgKiBpZ3RfaW50ZXJuYWxf YXNzZXJ0Ogo+ICsgKiBAZXhwcjogY29uZGl0aW9uIHRvIHRlc3QKPiArICoKPiArICogSWYgdGhl IGdpdmVuIGV4cHJlc3Npb24gZmFpbHMsIHByaW50IGFuIGVycm9yIHRvIHN0ZGVyciBhbmQgYWJv cnQoKQo+ICsgKiBpbW1lZGlhdGVseS4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgdXNlIG9ubHkgYnkg dGhlIGlndCBoZWxwZXJzIGluIG9yZGVyIHRvCj4gKyAqIGNoZWNrIGZvciBpbmNvcnJlY3QgdXNh Z2VzIG9mIHRoZSBoZWxwZXJzIG9yIG90aGVyIGV4dHJhb3JkaW5hcnkgY29uZGl0aW9ucy4KPiAr ICoKPiArICogVGhpcyBzaG91bGQgbmV2ZXIgYmUgdXNlZCB3aXRoaW4gYSBub3JtYWwgdGVzdC4g RG9pbmcgc28gd2lsbCBhbGVydAo+ICsgKiB2ZWxvY2lyYXB0b3JzIHRvIHlvdXIgbG9jYXRpb24u Cj4gKyAqLwoKCkFzaWRlOiBJIGxpa2UgdGhpcyBkb2N1bWVudGF0aW9uIGJsb2NrLgoKCgotLSAK UGV0cmkgTGF0dmFsYQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=