From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 85E8F6E062 for ; Thu, 7 Feb 2019 12:43:51 +0000 (UTC) References: <20190207092136.10659-1-maarten.lankhorst@linux.intel.com> <20190207092136.10659-4-maarten.lankhorst@linux.intel.com> From: Juha-Pekka Heikkila Message-ID: Date: Thu, 7 Feb 2019 14:43:38 +0200 MIME-Version: 1.0 In-Reply-To: <20190207092136.10659-4-maarten.lankhorst@linux.intel.com> Content-Language: en-US Subject: Re: [igt-dev] [PATCH v2 4/4] lib/igt_fb: Add support for Y410/Y416 formats, v2. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: juhapekka.heikkila@gmail.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Maarten Lankhorst , igt-dev@lists.freedesktop.org List-ID: VGhpcyBsb29rIGdvb2QgdG8gbWUuCgpSZXZpZXdlZC1ieTogSnVoYS1QZWtrYSBIZWlra2lsYSA8 anVoYXBla2thLmhlaWtraWxhQGdtYWlsLmNvbT4KCk9uIDcuMi4yMDE5IDExLjIxLCBNYWFydGVu IExhbmtob3JzdCB3cm90ZToKPiBZNDEwIGlzIHBhY2tlZCB3aXRoIGNvbXByZXNzZWQgYSBjaGFu bmVsIGFuZCBvbmx5IDMyIGJwcCwgbGlrZQo+IDEwIGJpdHMgUkdCIGZvcm1hdHMuIFk0MTYgaXMg YSBwYWNrZWQgMTYgYml0cyBwZXIgY29tcG9uZW50IGZvcm1hdC4KPiAKPiBDaGFuZ2VzIHNpbmNl IHYxOgo+IC0gUmViYXNlIG9uIHRvcCBvZiB1cHN0cmVhbSBZVVYgY2hhbmdlcy4KPiAKPiBTaWdu ZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50 ZWwuY29tPgo+IC0tLQo+ICAgaW5jbHVkZS9kcm0tdWFwaS9kcm1fZm91cmNjLmggfCAgIDMgKwo+ ICAgbGliL2lndF9jb2xvcl9lbmNvZGluZy5jICAgICAgfCAgIDIgKwo+ICAgbGliL2lndF9mYi5j ICAgICAgICAgICAgICAgICAgfCAyMDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LQo+ICAgMyBmaWxlcyBjaGFuZ2VkLCAxODUgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0p Cj4gCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtLXVhcGkvZHJtX2ZvdXJjYy5oIGIvaW5jbHVk ZS9kcm0tdWFwaS9kcm1fZm91cmNjLmgKPiBpbmRleCBmZjllYTAyNzY2ZWUuLjYyYjRiYTAyM2E0 ZCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS11YXBpL2RybV9mb3VyY2MuaAo+ICsrKyBiL2lu Y2x1ZGUvZHJtLXVhcGkvZHJtX2ZvdXJjYy5oCj4gQEAgLTE1Nyw2ICsxNTcsOSBAQCBleHRlcm4g IkMiIHsKPiAgICNkZWZpbmUgRFJNX0ZPUk1BVF9ZMjEyCQlmb3VyY2NfY29kZSgnWScsICcyJywg JzEnLCAnMicpCj4gICAjZGVmaW5lIERSTV9GT1JNQVRfWTIxNgkJZm91cmNjX2NvZGUoJ1knLCAn MicsICcxJywgJzYnKQo+ICAgCj4gKyNkZWZpbmUgRFJNX0ZPUk1BVF9ZNDEwCQlmb3VyY2NfY29k ZSgnWScsICc0JywgJzEnLCAnMCcpIC8qIFszMTowXSBBOlY6WTpVIDI6MTA6MTA6MTAgbGl0dGxl IGVuZGlhbiAqLwo+ICsjZGVmaW5lIERSTV9GT1JNQVRfWTQxNgkJZm91cmNjX2NvZGUoJ1knLCAn NCcsICcxJywgJzYnKSAvKiBbMTI3OjBdIEE6VjpZOlUgMTY6MTY6MTY6MTYgbGl0dGxlIGVuZGlh biAqLwo+ICsKPiAgIC8qCj4gICAgKiBwYWNrZWQgWUNiQ3I0MjAgMngyIHRpbGVkIGZvcm1hdHMK PiAgICAqIGZpcnN0IDY0IGJpdHMgd2lsbCBjb250YWluIFksQ2IsQ3IgY29tcG9uZW50cyBmb3Ig YSAyeDIgdGlsZQo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2NvbG9yX2VuY29kaW5nLmMgYi9saWIv aWd0X2NvbG9yX2VuY29kaW5nLmMKPiBpbmRleCA2ZjgyZmNlYzYyZTQuLmJjOTU3NWZjYTFiNCAx MDA2NDQKPiAtLS0gYS9saWIvaWd0X2NvbG9yX2VuY29kaW5nLmMKPiArKysgYi9saWIvaWd0X2Nv bG9yX2VuY29kaW5nLmMKPiBAQCAtMTQ3LDYgKzE0Nyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg Y29sb3JfZW5jb2RpbmdfZm9ybWF0IHsKPiAgIAl7IERSTV9GT1JNQVRfWTIxMCwgNjU0NzIuZiwg NDA5Ni5mLCA2MDE2MC5mLCA0MDk2LmYsIDMyNzY4LmYsIDYxNDQwLmYgfSwKPiAgIAl7IERSTV9G T1JNQVRfWTIxMiwgNjU1MjAuZiwgNDA5Ni5mLCA2MDE2MC5mLCA0MDk2LmYsIDMyNzY4LmYsIDYx NDQwLmYgfSwKPiAgIAl7IERSTV9GT1JNQVRfWTIxNiwgNjU1MzUuZiwgNDA5Ni5mLCA2MDE2MC5m LCA0MDk2LmYsIDMyNzY4LmYsIDYxNDQwLmYgfSwKPiArCXsgRFJNX0ZPUk1BVF9ZNDEwLCAxMDIz LmYsIDY0LmYsIDk0MC5mLCA2NC5mLCA1MTIuZiwgOTYwLmYgfSwKPiArCXsgRFJNX0ZPUk1BVF9Z NDE2LCA2NTUzNS5mLCA0MDk2LmYsIDYwMTYwLmYsIDQwOTYuZiwgMzI3NjguZiwgNjE0NDAuZiB9 LAo+ICAgfTsKPiAgIAo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9lbmNvZGluZ19mb3Jt YXQgKmxvb2t1cF9mb3VyY2ModWludDMyX3QgZm91cmNjKQo+IGRpZmYgLS1naXQgYS9saWIvaWd0 X2ZiLmMgYi9saWIvaWd0X2ZiLmMKPiBpbmRleCBjY2NkNmJiOTgzOTUuLmI4YzgyYjk4NWZkMyAx MDA2NDQKPiAtLS0gYS9saWIvaWd0X2ZiLmMKPiArKysgYi9saWIvaWd0X2ZiLmMKPiBAQCAtMTk5 LDYgKzE5OSwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCB7Cj4g ICAJICAubnVtX3BsYW5lcyA9IDEsIC5wbGFuZV9icHAgPSB7IDMyLCB9LAo+ICAgCSAgLmhzdWIg PSAyLCAudnN1YiA9IDEsCj4gICAJfSwKPiArCXsgLm5hbWUgPSAiWTQxMCIsIC5kZXB0aCA9IC0x LCAuZHJtX2lkID0gRFJNX0ZPUk1BVF9ZNDEwLAo+ICsJICAuY2Fpcm9faWQgPSBDQUlST19GT1JN QVRfUkdCQTEyOEYsCj4gKwkgIC5udW1fcGxhbmVzID0gMSwgLnBsYW5lX2JwcCA9IHsgMzIsIH0s Cj4gKwkgIC5oc3ViID0gMSwgLnZzdWIgPSAxLAo+ICsJfSwKPiArCXsgLm5hbWUgPSAiWTQxNiIs IC5kZXB0aCA9IC0xLCAuZHJtX2lkID0gRFJNX0ZPUk1BVF9ZNDE2LAo+ICsJICAuY2Fpcm9faWQg PSBDQUlST19GT1JNQVRfUkdCQTEyOEYsCj4gKwkgIC5udW1fcGxhbmVzID0gMSwgLnBsYW5lX2Jw cCA9IHsgNjQsIH0sCj4gKwkgIC5oc3ViID0gMSwgLnZzdWIgPSAxLAo+ICsJfSwKPiAgIAl7IC5u YW1lID0gIlAwMTAiLCAuZGVwdGggPSAtMSwgLmRybV9pZCA9IERSTV9GT1JNQVRfUDAxMCwKPiAg IAkgIC5jYWlyb19pZCA9IENBSVJPX0ZPUk1BVF9SR0I5NkYsCj4gICAJICAubnVtX3BsYW5lcyA9 IDIsIC5wbGFuZV9icHAgPSB7IDE2LCAzMiB9LAo+IEBAIC01ODQsNiArNTk0LDI4IEBAIHN0YXRp YyB2b2lkIGNsZWFyX3l1dl9idWZmZXIoc3RydWN0IGlndF9mYiAqZmIpCj4gICAJCQlmYi0+c3Ry aWRlc1swXSAqIGZiLT5wbGFuZV9oZWlnaHRbMF0gLyBzaXplb2Yod2NoYXJfdCkpOwo+ICAgCQli cmVhazsKPiAgIAo+ICsJY2FzZSBEUk1fRk9STUFUX1k0MTA6Cj4gKwkJd21lbXNldChwdHIgKyBm Yi0+b2Zmc2V0c1swXSwKPiArCQkJZnVsbF9yYW5nZSA/IDB4ZTAwMDAyMDAgOiAweGUwMDEwMjAw LAo+ICsJCWZiLT5zdHJpZGVzWzBdICogZmItPnBsYW5lX2hlaWdodFswXSAvIHNpemVvZih3Y2hh cl90KSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfWTQxNjogewo+ICsJCXN0cnVj dCBheXV2MTYgeyB1aW50MTZfdCB1LCB5LCB2LCBhOyB9Owo+ICsJCWNvbnN0IHN0cnVjdCBheXV2 MTYgcGl4ZWwgPSB7Cj4gKwkJCS5hID0gMHhmZmZmLAo+ICsJCQkudiA9IGZ1bGxfcmFuZ2UgPyAw IDogMHgxMDAwLAo+ICsJCQkueSA9IDB4ODAwMCwKPiArCQkJLnUgPSBmdWxsX3JhbmdlID8gMCA6 IDB4MTAwMAo+ICsJCX07Cj4gKwo+ICsJCWZvciAoaW50IGkgPSAwOyBpIDwgZmItPnBsYW5lX2hl aWdodFswXTsgaSsrKSB7Cj4gKwkJCXN0cnVjdCBheXV2MTYgKmN1ciA9IHB0ciArIGZiLT5vZmZz ZXRzWzBdICsgZmItPnN0cmlkZXNbMF0gKiBpOwo+ICsKPiArCQkJZm9yIChpbnQgaiA9IDA7IGkg PCBmYi0+cGxhbmVfd2lkdGhbMF07IGorKykKPiArCQkJCSpjdXIrKyA9IHBpeGVsOwo+ICsJCX0K PiArCQlicmVhazsKPiArCQl9Cj4gICAJfQo+ICAgCj4gICAJaWd0X2ZiX3VubWFwX2J1ZmZlcihm YiwgcHRyKTsKPiBAQCAtMTY0OSwxMCArMTY4MSwxMSBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X3Ny Y19wdXQoY29uc3Qgc3RydWN0IGZiX2NvbnZlcnQgKmN2dCwKPiAgIH0KPiAgIAo+ICAgc3RydWN0 IHl1dl9wYXJhbWV0ZXJzIHsKPiAtCXVuc2lnbmVkCXlfaW5jOwo+ICsJdW5zaWduZWQJYXlfaW5j Owo+ICAgCXVuc2lnbmVkCXV2X2luYzsKPiAtCXVuc2lnbmVkCXlfc3RyaWRlOwo+ICsJdW5zaWdu ZWQJYXlfc3RyaWRlOwo+ICAgCXVuc2lnbmVkCXV2X3N0cmlkZTsKPiArCXVuc2lnbmVkCWFfb2Zm c2V0Owo+ICAgCXVuc2lnbmVkCXlfb2Zmc2V0Owo+ICAgCXVuc2lnbmVkCXVfb2Zmc2V0Owo+ICAg CXVuc2lnbmVkCXZfb2Zmc2V0Owo+IEBAIC0xNjY3LDcgKzE3MDAsNyBAQCBzdGF0aWMgdm9pZCBn ZXRfeXV2X3BhcmFtZXRlcnMoc3RydWN0IGlndF9mYiAqZmIsIHN0cnVjdCB5dXZfcGFyYW1ldGVy cyAqcGFyYW1zKQo+ICAgCWNhc2UgRFJNX0ZPUk1BVF9QMDEwOgo+ICAgCWNhc2UgRFJNX0ZPUk1B VF9QMDEyOgo+ICAgCWNhc2UgRFJNX0ZPUk1BVF9QMDE2Ogo+IC0JCXBhcmFtcy0+eV9pbmMgPSAx Owo+ICsJCXBhcmFtcy0+YXlfaW5jID0gMTsKPiAgIAkJcGFyYW1zLT51dl9pbmMgPSAyOwo+ICAg CQlicmVhazsKPiAgIAo+IEBAIC0xNjc4LDEyICsxNzExLDEzIEBAIHN0YXRpYyB2b2lkIGdldF95 dXZfcGFyYW1ldGVycyhzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IHl1dl9wYXJhbWV0ZXJzICpw YXJhbXMpCj4gICAJY2FzZSBEUk1fRk9STUFUX1kyMTA6Cj4gICAJY2FzZSBEUk1fRk9STUFUX1ky MTI6Cj4gICAJY2FzZSBEUk1fRk9STUFUX1kyMTY6Cj4gLQkJcGFyYW1zLT55X2luYyA9IDI7Cj4g KwkJcGFyYW1zLT5heV9pbmMgPSAyOwo+ICAgCQlwYXJhbXMtPnV2X2luYyA9IDQ7Cj4gICAJCWJy ZWFrOwo+ICAgCj4gKwljYXNlIERSTV9GT1JNQVRfWTQxNjoKPiAgIAljYXNlIERSTV9GT1JNQVRf WFlVVjg4ODg6Cj4gLQkJcGFyYW1zLT55X2luYyA9IDQ7Cj4gKwkJcGFyYW1zLT5heV9pbmMgPSA0 Owo+ICAgCQlwYXJhbXMtPnV2X2luYyA9IDQ7Cj4gICAJCWJyZWFrOwo+ICAgCX0KPiBAQCAtMTY5 Myw3ICsxNzI3LDcgQEAgc3RhdGljIHZvaWQgZ2V0X3l1dl9wYXJhbWV0ZXJzKHN0cnVjdCBpZ3Rf ZmIgKmZiLCBzdHJ1Y3QgeXV2X3BhcmFtZXRlcnMgKnBhcmFtcykKPiAgIAljYXNlIERSTV9GT1JN QVRfUDAxMDoKPiAgIAljYXNlIERSTV9GT1JNQVRfUDAxMjoKPiAgIAljYXNlIERSTV9GT1JNQVRf UDAxNjoKPiAtCQlwYXJhbXMtPnlfc3RyaWRlID0gZmItPnN0cmlkZXNbMF07Cj4gKwkJcGFyYW1z LT5heV9zdHJpZGUgPSBmYi0+c3RyaWRlc1swXTsKPiAgIAkJcGFyYW1zLT51dl9zdHJpZGUgPSBm Yi0+c3RyaWRlc1sxXTsKPiAgIAkJYnJlYWs7Cj4gICAKPiBAQCAtMTcwNSw3ICsxNzM5LDggQEAg c3RhdGljIHZvaWQgZ2V0X3l1dl9wYXJhbWV0ZXJzKHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3Qg eXV2X3BhcmFtZXRlcnMgKnBhcmFtcykKPiAgIAljYXNlIERSTV9GT1JNQVRfWTIxMjoKPiAgIAlj YXNlIERSTV9GT1JNQVRfWTIxNjoKPiAgIAljYXNlIERSTV9GT1JNQVRfWFlVVjg4ODg6Cj4gLQkJ cGFyYW1zLT55X3N0cmlkZSA9IGZiLT5zdHJpZGVzWzBdOwo+ICsJY2FzZSBEUk1fRk9STUFUX1k0 MTY6Cj4gKwkJcGFyYW1zLT5heV9zdHJpZGUgPSBmYi0+c3RyaWRlc1swXTsKPiAgIAkJcGFyYW1z LT51dl9zdHJpZGUgPSBmYi0+c3RyaWRlc1swXTsKPiAgIAkJYnJlYWs7Cj4gICAJfQo+IEBAIC0x NzU3LDYgKzE3OTIsMTMgQEAgc3RhdGljIHZvaWQgZ2V0X3l1dl9wYXJhbWV0ZXJzKHN0cnVjdCBp Z3RfZmIgKmZiLCBzdHJ1Y3QgeXV2X3BhcmFtZXRlcnMgKnBhcmFtcykKPiAgIAkJcGFyYW1zLT52 X29mZnNldCA9IGZiLT5vZmZzZXRzWzBdICsgNjsKPiAgIAkJYnJlYWs7Cj4gICAKPiArCWNhc2Ug RFJNX0ZPUk1BVF9ZNDE2Ogo+ICsJCXBhcmFtcy0+YV9vZmZzZXQgPSBmYi0+b2Zmc2V0c1swXSAr IDY7Cj4gKwkJcGFyYW1zLT55X29mZnNldCA9IGZiLT5vZmZzZXRzWzBdICsgMjsKPiArCQlwYXJh bXMtPnVfb2Zmc2V0ID0gZmItPm9mZnNldHNbMF07Cj4gKwkJcGFyYW1zLT52X29mZnNldCA9IGZi LT5vZmZzZXRzWzBdICsgNDsKPiArCQlicmVhazsKPiArCj4gICAJY2FzZSBEUk1fRk9STUFUX1hZ VVY4ODg4Ogo+ICAgCQlwYXJhbXMtPnlfb2Zmc2V0ID0gZmItPm9mZnNldHNbMF0gKyAxOwo+ICAg CQlwYXJhbXMtPnVfb2Zmc2V0ID0gZmItPm9mZnNldHNbMF0gKyAyOwo+IEBAIC0xODA4LDcgKzE4 NTAsNyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X3l1dl90b19yZ2IyNChzdHJ1Y3QgZmJfY29udmVy dCAqY3Z0KQo+ICAgCQkJd3JpdGVfcmdiKHJnYl90bXAsICZyZ2IpOwo+ICAgCj4gICAJCQlyZ2Jf dG1wICs9IGJwcDsKPiAtCQkJeV90bXAgKz0gcGFyYW1zLnlfaW5jOwo+ICsJCQl5X3RtcCArPSBw YXJhbXMuYXlfaW5jOwo+ICAgCj4gICAJCQlpZiAoKHNyY19mbXQtPmhzdWIgPT0gMSkgfHwgKGog JSBzcmNfZm10LT5oc3ViKSkgewo+ICAgCQkJCXVfdG1wICs9IHBhcmFtcy51dl9pbmM7Cj4gQEAg LTE4MTcsNyArMTg1OSw3IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfeXV2X3RvX3JnYjI0KHN0cnVj dCBmYl9jb252ZXJ0ICpjdnQpCj4gICAJCX0KPiAgIAo+ICAgCQlyZ2IyNCArPSByZ2IyNF9zdHJp ZGU7Cj4gLQkJeSArPSBwYXJhbXMueV9zdHJpZGU7Cj4gKwkJeSArPSBwYXJhbXMuYXlfc3RyaWRl Owo+ICAgCj4gICAJCWlmICgoc3JjX2ZtdC0+dnN1YiA9PSAxKSB8fCAoaSAlIHNyY19mbXQtPnZz dWIpKSB7Cj4gICAJCQl1ICs9IHBhcmFtcy51dl9zdHJpZGU7Cj4gQEAgLTE4NjgsNyArMTkxMCw3 IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9feXV2KHN0cnVjdCBmYl9jb252ZXJ0ICpj dnQpCj4gICAJCQlyZ2JfdG1wICs9IGJwcDsKPiAgIAo+ICAgCQkJKnlfdG1wID0geXV2LmRbMF07 Cj4gLQkJCXlfdG1wICs9IHBhcmFtcy55X2luYzsKPiArCQkJeV90bXAgKz0gcGFyYW1zLmF5X2lu YzsKPiAgIAo+ICAgCQkJaWYgKChpICUgZHN0X2ZtdC0+dnN1YikgfHwgKGogJSBkc3RfZm10LT5o c3ViKSkKPiAgIAkJCQljb250aW51ZTsKPiBAQCAtMTkwNSw3ICsxOTQ3LDcgQEAgc3RhdGljIHZv aWQgY29udmVydF9yZ2IyNF90b195dXYoc3RydWN0IGZiX2NvbnZlcnQgKmN2dCkKPiAgIAkJfQo+ ICAgCj4gICAJCXJnYjI0ICs9IHJnYjI0X3N0cmlkZTsKPiAtCQl5ICs9IHBhcmFtcy55X3N0cmlk ZTsKPiArCQl5ICs9IHBhcmFtcy5heV9zdHJpZGU7Cj4gICAKPiAgIAkJaWYgKChpICUgZHN0X2Zt dC0+dnN1YikgPT0gKGRzdF9mbXQtPnZzdWIgLSAxKSkgewo+ICAgCQkJdSArPSBwYXJhbXMudXZf c3RyaWRlOwo+IEBAIC0xOTI5LDEzICsxOTcxLDEzIEBAIHN0YXRpYyB2b2lkIHdyaXRlX3JnYmYo ZmxvYXQgKnJnYjI0LCBjb25zdCBzdHJ1Y3QgaWd0X3ZlYzQgKnJnYikKPiAgIAlyZ2IyNFsyXSA9 IHJnYi0+ZFsyXTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBjb252ZXJ0X3l1djE2X3RvX2Zs b2F0KHN0cnVjdCBmYl9jb252ZXJ0ICpjdnQpCj4gK3N0YXRpYyB2b2lkIGNvbnZlcnRfeXV2MTZf dG9fZmxvYXQoc3RydWN0IGZiX2NvbnZlcnQgKmN2dCwgYm9vbCBhbHBoYSkKPiAgIHsKPiAgIAlj b25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0ICpzcmNfZm10ID0KPiAgIAkJbG9va3VwX2Ry bV9mb3JtYXQoY3Z0LT5zcmMuZmItPmRybV9mb3JtYXQpOwo+ICAgCWludCBpLCBqOwo+IC0JdWlu dDhfdCBmcHAgPSAzOwo+IC0JdWludDE2X3QgKnksICp1LCAqdjsKPiArCXVpbnQ4X3QgZnBwID0g YWxwaGEgPyA0IDogMzsKPiArCXVpbnQxNl90ICphLCAqeSwgKnUsICp2Owo+ICAgCWZsb2F0ICpw dHIgPSBjdnQtPmRzdC5wdHI7Cj4gICAJdW5zaWduZWQgaW50IGZsb2F0X3N0cmlkZSA9IGN2dC0+ ZHN0LmZiLT5zdHJpZGVzWzBdIC8gc2l6ZW9mKCpwdHIpOwo+ICAgCXN0cnVjdCBpZ3RfbWF0NCBt ID0gaWd0X3ljYmNyX3RvX3JnYl9tYXRyaXgoY3Z0LT5zcmMuZmItPmRybV9mb3JtYXQsCj4gQEAg LTE5NTQsMTEgKzE5OTYsMTMgQEAgc3RhdGljIHZvaWQgY29udmVydF95dXYxNl90b19mbG9hdChz dHJ1Y3QgZmJfY29udmVydCAqY3Z0KQo+ICAgCQkgICAhKHBhcmFtcy51X29mZnNldCAlIHNpemVv ZigqYnVmKSkgJiYKPiAgIAkJICAgIShwYXJhbXMudl9vZmZzZXQgJSBzaXplb2YoKmJ1ZikpKTsK PiAgIAo+ICsJYSA9IGJ1ZiArIHBhcmFtcy5hX29mZnNldCAvIHNpemVvZigqYnVmKTsKPiAgIAl5 ID0gYnVmICsgcGFyYW1zLnlfb2Zmc2V0IC8gc2l6ZW9mKCpidWYpOwo+ICAgCXUgPSBidWYgKyBw YXJhbXMudV9vZmZzZXQgLyBzaXplb2YoKmJ1Zik7Cj4gICAJdiA9IGJ1ZiArIHBhcmFtcy52X29m ZnNldCAvIHNpemVvZigqYnVmKTsKPiAgIAo+ICAgCWZvciAoaSA9IDA7IGkgPCBjdnQtPmRzdC5m Yi0+aGVpZ2h0OyBpKyspIHsKPiArCQljb25zdCB1aW50MTZfdCAqYV90bXAgPSBhOwo+ICAgCQlj b25zdCB1aW50MTZfdCAqeV90bXAgPSB5Owo+ICAgCQljb25zdCB1aW50MTZfdCAqdV90bXAgPSB1 Owo+ICAgCQljb25zdCB1aW50MTZfdCAqdl90bXAgPSB2Owo+IEBAIC0xOTc1LDggKzIwMTksMTMg QEAgc3RhdGljIHZvaWQgY29udmVydF95dXYxNl90b19mbG9hdChzdHJ1Y3QgZmJfY29udmVydCAq Y3Z0KQo+ICAgCQkJcmdiID0gaWd0X21hdHJpeF90cmFuc2Zvcm0oJm0sICZ5dXYpOwo+ICAgCQkJ d3JpdGVfcmdiZihyZ2JfdG1wLCAmcmdiKTsKPiAgIAo+ICsJCQlpZiAoYWxwaGEpIHsKPiArCQkJ CXJnYl90bXBbM10gPSAoKGZsb2F0KSphX3RtcCkgLyA2NTUzNS5mOwo+ICsJCQkJYV90bXAgKz0g cGFyYW1zLmF5X2luYzsKPiArCQkJfQo+ICsKPiAgIAkJCXJnYl90bXAgKz0gZnBwOwo+IC0JCQl5 X3RtcCArPSBwYXJhbXMueV9pbmM7Cj4gKwkJCXlfdG1wICs9IHBhcmFtcy5heV9pbmM7Cj4gICAK PiAgIAkJCWlmICgoc3JjX2ZtdC0+aHN1YiA9PSAxKSB8fCAoaiAlIHNyY19mbXQtPmhzdWIpKSB7 Cj4gICAJCQkJdV90bXAgKz0gcGFyYW1zLnV2X2luYzsKPiBAQCAtMTk4NSw3ICsyMDM0LDkgQEAg c3RhdGljIHZvaWQgY29udmVydF95dXYxNl90b19mbG9hdChzdHJ1Y3QgZmJfY29udmVydCAqY3Z0 KQo+ICAgCQl9Cj4gICAKPiAgIAkJcHRyICs9IGZsb2F0X3N0cmlkZTsKPiAtCQl5ICs9IHBhcmFt cy55X3N0cmlkZSAvIHNpemVvZigqeSk7Cj4gKwo+ICsJCWEgKz0gcGFyYW1zLmF5X3N0cmlkZSAv IHNpemVvZigqYSk7Cj4gKwkJeSArPSBwYXJhbXMuYXlfc3RyaWRlIC8gc2l6ZW9mKCp5KTsKPiAg IAo+ICAgCQlpZiAoKHNyY19mbXQtPnZzdWIgPT0gMSkgfHwgKGkgJSBzcmNfZm10LT52c3ViKSkg ewo+ICAgCQkJdSArPSBwYXJhbXMudXZfc3RyaWRlIC8gc2l6ZW9mKCp1KTsKPiBAQCAtMTk5Niwx NCArMjA0NywxNCBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X3l1djE2X3RvX2Zsb2F0KHN0cnVjdCBm Yl9jb252ZXJ0ICpjdnQpCj4gICAJY29udmVydF9zcmNfcHV0KGN2dCwgYnVmKTsKPiAgIH0KPiAg IAo+IC1zdGF0aWMgdm9pZCBjb252ZXJ0X2Zsb2F0X3RvX3l1djE2KHN0cnVjdCBmYl9jb252ZXJ0 ICpjdnQpCj4gK3N0YXRpYyB2b2lkIGNvbnZlcnRfZmxvYXRfdG9feXV2MTYoc3RydWN0IGZiX2Nv bnZlcnQgKmN2dCwgYm9vbCBhbHBoYSkKPiAgIHsKPiAgIAljb25zdCBzdHJ1Y3QgZm9ybWF0X2Rl c2Nfc3RydWN0ICpkc3RfZm10ID0KPiAgIAkJbG9va3VwX2RybV9mb3JtYXQoY3Z0LT5kc3QuZmIt PmRybV9mb3JtYXQpOwo+ICAgCWludCBpLCBqOwo+IC0JdWludDE2X3QgKnksICp1LCAqdjsKPiAr CXVpbnQxNl90ICphLCAqeSwgKnUsICp2Owo+ICAgCWNvbnN0IGZsb2F0ICpwdHIgPSBjdnQtPnNy Yy5wdHI7Cj4gLQl1aW50OF90IGZwcCA9IDM7Cj4gKwl1aW50OF90IGZwcCA9IGFscGhhID8gNCA6 IDM7Cj4gICAJdW5zaWduZWQgZmxvYXRfc3RyaWRlID0gY3Z0LT5zcmMuZmItPnN0cmlkZXNbMF0g LyBzaXplb2YoKnB0cik7Cj4gICAJc3RydWN0IGlndF9tYXQ0IG0gPSBpZ3RfcmdiX3RvX3ljYmNy X21hdHJpeChjdnQtPnNyYy5mYi0+ZHJtX2Zvcm1hdCwKPiAgIAkJCQkJCSAgICBjdnQtPmRzdC5m Yi0+ZHJtX2Zvcm1hdCwKPiBAQCAtMjAxNSwxNiArMjA2NiwxOSBAQCBzdGF0aWMgdm9pZCBjb252 ZXJ0X2Zsb2F0X3RvX3l1djE2KHN0cnVjdCBmYl9jb252ZXJ0ICpjdnQpCj4gICAJCSAgIGlndF9m b3JtYXRfaXNfeXV2KGN2dC0+ZHN0LmZiLT5kcm1fZm9ybWF0KSk7Cj4gICAKPiAgIAlnZXRfeXV2 X3BhcmFtZXRlcnMoY3Z0LT5kc3QuZmIsICZwYXJhbXMpOwo+IC0JaWd0X2Fzc2VydCghKHBhcmFt cy55X29mZnNldCAlIHNpemVvZigqeSkpICYmCj4gKwlpZ3RfYXNzZXJ0KCEocGFyYW1zLmFfb2Zm c2V0ICUgc2l6ZW9mKCphKSkgJiYKPiArCQkgICAhKHBhcmFtcy55X29mZnNldCAlIHNpemVvZigq eSkpICYmCj4gICAJCSAgICEocGFyYW1zLnVfb2Zmc2V0ICUgc2l6ZW9mKCp1KSkgJiYKPiAgIAkJ ICAgIShwYXJhbXMudl9vZmZzZXQgJSBzaXplb2YoKnYpKSk7Cj4gICAKPiArCWEgPSBjdnQtPmRz dC5wdHIgKyBwYXJhbXMuYV9vZmZzZXQ7Cj4gICAJeSA9IGN2dC0+ZHN0LnB0ciArIHBhcmFtcy55 X29mZnNldDsKPiAgIAl1ID0gY3Z0LT5kc3QucHRyICsgcGFyYW1zLnVfb2Zmc2V0Owo+ICAgCXYg PSBjdnQtPmRzdC5wdHIgKyBwYXJhbXMudl9vZmZzZXQ7Cj4gICAKPiAgIAlmb3IgKGkgPSAwOyBp IDwgY3Z0LT5kc3QuZmItPmhlaWdodDsgaSsrKSB7Cj4gICAJCWNvbnN0IGZsb2F0ICpyZ2JfdG1w ID0gcHRyOwo+ICsJCXVpbnQxNl90ICphX3RtcCA9IGE7Cj4gICAJCXVpbnQxNl90ICp5X3RtcCA9 IHk7Cj4gICAJCXVpbnQxNl90ICp1X3RtcCA9IHU7Cj4gICAJCXVpbnQxNl90ICp2X3RtcCA9IHY7 Cj4gQEAgLTIwMzcsMTAgKzIwOTEsMTUgQEAgc3RhdGljIHZvaWQgY29udmVydF9mbG9hdF90b195 dXYxNihzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQo+ICAgCQkJcmVhZF9yZ2JmKCZyZ2IsIHJnYl90 bXApOwo+ICAgCQkJeXV2ID0gaWd0X21hdHJpeF90cmFuc2Zvcm0oJm0sICZyZ2IpOwo+ICAgCj4g KwkJCWlmIChhbHBoYSkgewo+ICsJCQkJKmFfdG1wID0gcmdiX3RtcFszXSAqIDY1NTM1LmYgKyAu NWY7Cj4gKwkJCQlhX3RtcCArPSBwYXJhbXMuYXlfaW5jOwo+ICsJCQl9Cj4gKwo+ICAgCQkJcmdi X3RtcCArPSBmcHA7Cj4gICAKPiAgIAkJCSp5X3RtcCA9IHl1di5kWzBdOwo+IC0JCQl5X3RtcCAr PSBwYXJhbXMueV9pbmM7Cj4gKwkJCXlfdG1wICs9IHBhcmFtcy5heV9pbmM7Cj4gICAKPiAgIAkJ CWlmICgoaSAlIGRzdF9mbXQtPnZzdWIpIHx8IChqICUgZHN0X2ZtdC0+aHN1YikpCj4gICAJCQkJ Y29udGludWU7Cj4gQEAgLTIwNzcsNyArMjEzNiw4IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfZmxv YXRfdG9feXV2MTYoc3RydWN0IGZiX2NvbnZlcnQgKmN2dCkKPiAgIAkJfQo+ICAgCj4gICAJCXB0 ciArPSBmbG9hdF9zdHJpZGU7Cj4gLQkJeSArPSBwYXJhbXMueV9zdHJpZGUgLyBzaXplb2YoKnkp Owo+ICsJCWEgKz0gcGFyYW1zLmF5X3N0cmlkZSAvIHNpemVvZigqYSk7Cj4gKwkJeSArPSBwYXJh bXMuYXlfc3RyaWRlIC8gc2l6ZW9mKCp5KTsKPiAgIAo+ICAgCQlpZiAoKGkgJSBkc3RfZm10LT52 c3ViKSA9PSAoZHN0X2ZtdC0+dnN1YiAtIDEpKSB7Cj4gICAJCQl1ICs9IHBhcmFtcy51dl9zdHJp ZGUgLyBzaXplb2YoKnUpOwo+IEBAIC0yMDg2LDYgKzIxNDYsODggQEAgc3RhdGljIHZvaWQgY29u dmVydF9mbG9hdF90b195dXYxNihzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQo+ICAgCX0KPiAgIH0K PiAgIAo+ICtzdGF0aWMgdm9pZCBjb252ZXJ0X1k0MTBfdG9fZmxvYXQoc3RydWN0IGZiX2NvbnZl cnQgKmN2dCkKPiArewo+ICsJaW50IGksIGo7Cj4gKwljb25zdCB1aW50MzJfdCAqeXV5djsKPiAr CXVpbnQzMl90ICpidWY7Cj4gKwlmbG9hdCAqcHRyID0gY3Z0LT5kc3QucHRyOwo+ICsJdW5zaWdu ZWQgaW50IGZsb2F0X3N0cmlkZSA9IGN2dC0+ZHN0LmZiLT5zdHJpZGVzWzBdIC8gc2l6ZW9mKCpw dHIpOwo+ICsJdW5zaWduZWQgaW50IHl1eXZfc3RyaWRlID0gY3Z0LT5zcmMuZmItPnN0cmlkZXNb MF0gLyBzaXplb2YoKnl1eXYpOwo+ICsJc3RydWN0IGlndF9tYXQ0IG0gPSBpZ3RfeWNiY3JfdG9f cmdiX21hdHJpeChjdnQtPnNyYy5mYi0+ZHJtX2Zvcm1hdCwKPiArCQkJCQkJICAgIGN2dC0+ZHN0 LmZiLT5kcm1fZm9ybWF0LAo+ICsJCQkJCQkgICAgY3Z0LT5zcmMuZmItPmNvbG9yX2VuY29kaW5n LAo+ICsJCQkJCQkgICAgY3Z0LT5zcmMuZmItPmNvbG9yX3JhbmdlKTsKPiArCj4gKwlpZ3RfYXNz ZXJ0KGN2dC0+c3JjLmZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfWTQxMCAmJgo+ICsJCSAg IGN2dC0+ZHN0LmZiLT5kcm1fZm9ybWF0ID09IElHVF9GT1JNQVRfRkxPQVQpOwo+ICsKPiArCXl1 eXYgPSBidWYgPSBjb252ZXJ0X3NyY19nZXQoY3Z0KTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg Y3Z0LT5kc3QuZmItPmhlaWdodDsgaSsrKSB7Cj4gKwkJZm9yIChqID0gMDsgaiA8IGN2dC0+ZHN0 LmZiLT53aWR0aDsgaisrKSB7Cj4gKwkJCS8qIENvbnZlcnQgMngxIHBpeGVsIGJsb2NrcyAqLwo+ ICsJCQlzdHJ1Y3QgaWd0X3ZlYzQgeXV2Owo+ICsJCQlzdHJ1Y3QgaWd0X3ZlYzQgcmdiOwo+ICsK PiArCQkJeXV2LmRbMF0gPSB5dXl2W2pdICYgMHgzZmY7Cj4gKwkJCXl1di5kWzFdID0gKHl1eXZb al0gPj4gMTApICYgMHgzZmY7Cj4gKwkJCXl1di5kWzJdID0gKHl1eXZbal0gPj4gMjApICYgMHgz ZmY7Cj4gKwkJCXl1di5kWzNdID0gMS5mOwo+ICsKPiArCQkJcmdiID0gaWd0X21hdHJpeF90cmFu c2Zvcm0oJm0sICZ5dXYpOwo+ICsKPiArCQkJd3JpdGVfcmdiZigmcHRyW2ogKiA0ICsgMF0sICZy Z2IpOwo+ICsJCQlwdHJbaiAqIDQgKyAzXSA9IChmbG9hdCkoeXV5dltqXSA+PiAzMCkgLyAzOwo+ ICsJCX0KPiArCj4gKwkJcHRyICs9IGZsb2F0X3N0cmlkZTsKPiArCQl5dXl2ICs9IHl1eXZfc3Ry aWRlOwo+ICsJfQo+ICsKPiArCWNvbnZlcnRfc3JjX3B1dChjdnQsIGJ1Zik7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGNvbnZlcnRfZmxvYXRfdG9fWTQxMChzdHJ1Y3QgZmJfY29udmVydCAqY3Z0 KQo+ICt7Cj4gKwlpbnQgaSwgajsKPiArCXVpbnQzMl90ICp5dXl2ID0gY3Z0LT5kc3QucHRyOwo+ ICsJY29uc3QgZmxvYXQgKnB0ciA9IGN2dC0+c3JjLnB0cjsKPiArCXVuc2lnbmVkIGZsb2F0X3N0 cmlkZSA9IGN2dC0+c3JjLmZiLT5zdHJpZGVzWzBdIC8gc2l6ZW9mKCpwdHIpOwo+ICsJdW5zaWdu ZWQgeXV5dl9zdHJpZGUgPSBjdnQtPmRzdC5mYi0+c3RyaWRlc1swXSAvIHNpemVvZigqeXV5dik7 Cj4gKwlzdHJ1Y3QgaWd0X21hdDQgbSA9IGlndF9yZ2JfdG9feWNiY3JfbWF0cml4KGN2dC0+c3Jj LmZiLT5kcm1fZm9ybWF0LAo+ICsJCQkJCQkgICAgY3Z0LT5kc3QuZmItPmRybV9mb3JtYXQsCj4g KwkJCQkJCSAgICBjdnQtPmRzdC5mYi0+Y29sb3JfZW5jb2RpbmcsCj4gKwkJCQkJCSAgICBjdnQt PmRzdC5mYi0+Y29sb3JfcmFuZ2UpOwo+ICsKPiArCWlndF9hc3NlcnQoY3Z0LT5zcmMuZmItPmRy bV9mb3JtYXQgPT0gSUdUX0ZPUk1BVF9GTE9BVCAmJgo+ICsJCSAgIGN2dC0+ZHN0LmZiLT5kcm1f Zm9ybWF0ID09IERSTV9GT1JNQVRfWTQxMCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGN2dC0+ ZHN0LmZiLT5oZWlnaHQ7IGkrKykgewo+ICsJCWZvciAoaiA9IDA7IGogPCBjdnQtPmRzdC5mYi0+ d2lkdGg7IGorKykgewo+ICsJCQlzdHJ1Y3QgaWd0X3ZlYzQgcmdiOwo+ICsJCQlzdHJ1Y3QgaWd0 X3ZlYzQgeXV2Owo+ICsJCQl1aW50OF90IGFscGhhID0gcHRyW2ogKiA0ICsgM10gKiAzLmYgKyAu NWY7Cj4gKwkJCXVpbnQxNl90IHksIGNiLCBjcjsKPiArCj4gKwkJCXJlYWRfcmdiZigmcmdiLCAm cHRyW2ogKiA0ICsgMF0pOwo+ICsKPiArCQkJeXV2ID0gaWd0X21hdHJpeF90cmFuc2Zvcm0oJm0s ICZyZ2IpOwo+ICsJCQljciA9IHl1di5kWzBdOwo+ICsJCQl5ID0geXV2LmRbMV07Cj4gKwkJCWNi ID0geXV2LmRbMl07Cj4gKwo+ICsJCQl5dXl2W2pdID0gKChjciAmIDB4M2ZmKSA8PCAwKSB8Cj4g KwkJCQkgICgoeSAmIDB4M2ZmKSA8PCAxMCkgfAo+ICsJCQkJICAoKGNiICYgMHgzZmYpIDw8IDIw KSB8Cj4gKwkJCQkgIChhbHBoYSA8PCAzMCk7Cj4gKwkJfQo+ICsKPiArCQlwdHIgKz0gZmxvYXRf c3RyaWRlOwo+ICsJCXl1eXYgKz0geXV5dl9zdHJpZGU7Cj4gKwl9Cj4gK30KPiArCj4gICBzdGF0 aWMgdm9pZCBjb252ZXJ0X3BpeG1hbihzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQo+ICAgewo+ICAg CXBpeG1hbl9mb3JtYXRfY29kZV90IHNyY19waXhtYW4gPSBkcm1fZm9ybWF0X3RvX3BpeG1hbihj dnQtPnNyYy5mYi0+ZHJtX2Zvcm1hdCk7Cj4gQEAgLTIxNjEsNyArMjMwMywxMyBAQCBzdGF0aWMg dm9pZCBmYl9jb252ZXJ0KHN0cnVjdCBmYl9jb252ZXJ0ICpjdnQpCj4gICAJCWNhc2UgRFJNX0ZP Uk1BVF9ZMjEwOgo+ICAgCQljYXNlIERSTV9GT1JNQVRfWTIxMjoKPiAgIAkJY2FzZSBEUk1fRk9S TUFUX1kyMTY6Cj4gLQkJCWNvbnZlcnRfeXV2MTZfdG9fZmxvYXQoY3Z0KTsKPiArCQkJY29udmVy dF95dXYxNl90b19mbG9hdChjdnQsIGZhbHNlKTsKPiArCQkJcmV0dXJuOwo+ICsJCWNhc2UgRFJN X0ZPUk1BVF9ZNDEwOgo+ICsJCQljb252ZXJ0X1k0MTBfdG9fZmxvYXQoY3Z0KTsKPiArCQkJcmV0 dXJuOwo+ICsJCWNhc2UgRFJNX0ZPUk1BVF9ZNDE2Ogo+ICsJCQljb252ZXJ0X3l1djE2X3RvX2Zs b2F0KGN2dCwgdHJ1ZSk7Cj4gICAJCQlyZXR1cm47Cj4gICAJCX0KPiAgIAl9IGVsc2UgaWYgKGN2 dC0+c3JjLmZiLT5kcm1fZm9ybWF0ID09IElHVF9GT1JNQVRfRkxPQVQpIHsKPiBAQCAtMjE3Miw3 ICsyMzIwLDEzIEBAIHN0YXRpYyB2b2lkIGZiX2NvbnZlcnQoc3RydWN0IGZiX2NvbnZlcnQgKmN2 dCkKPiAgIAkJY2FzZSBEUk1fRk9STUFUX1kyMTA6Cj4gICAJCWNhc2UgRFJNX0ZPUk1BVF9ZMjEy Ogo+ICAgCQljYXNlIERSTV9GT1JNQVRfWTIxNjoKPiAtCQkJY29udmVydF9mbG9hdF90b195dXYx NihjdnQpOwo+ICsJCQljb252ZXJ0X2Zsb2F0X3RvX3l1djE2KGN2dCwgZmFsc2UpOwo+ICsJCQly ZXR1cm47Cj4gKwkJY2FzZSBEUk1fRk9STUFUX1k0MTA6Cj4gKwkJCWNvbnZlcnRfZmxvYXRfdG9f WTQxMChjdnQpOwo+ICsJCQlyZXR1cm47Cj4gKwkJY2FzZSBEUk1fRk9STUFUX1k0MTY6Cj4gKwkJ CWNvbnZlcnRfZmxvYXRfdG9feXV2MTYoY3Z0LCB0cnVlKTsKPiAgIAkJCXJldHVybjsKPiAgIAkJ fQo+ICAgCX0KPiBAQCAtMjU2NCw2ICsyNzE4LDggQEAgYm9vbCBpZ3RfZm9ybWF0X2lzX3l1dih1 aW50MzJfdCBkcm1fZm9ybWF0KQo+ICAgCWNhc2UgRFJNX0ZPUk1BVF9ZMjEwOgo+ICAgCWNhc2Ug RFJNX0ZPUk1BVF9ZMjEyOgo+ICAgCWNhc2UgRFJNX0ZPUk1BVF9ZMjE2Ogo+ICsJY2FzZSBEUk1f Rk9STUFUX1k0MTA6Cj4gKwljYXNlIERSTV9GT1JNQVRfWTQxNjoKPiAgIAljYXNlIERSTV9GT1JN QVRfWVVZVjoKPiAgIAljYXNlIERSTV9GT1JNQVRfWVZZVToKPiAgIAljYXNlIERSTV9GT1JNQVRf VVlWWToKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=