From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [RFC v4 14/25] drm/fb-helper: Remove struct drm_fb_helper_connector Date: Sat, 14 Apr 2018 13:53:07 +0200 Message-ID: <20180414115318.14500-15-noralf@tronnes.org> References: <20180414115318.14500-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180414115318.14500-1-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= List-Id: dri-devel@lists.freedesktop.org Tm8gbmVlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgcmVnaXN0ZXJlZCBjb25uZWN0b3JzLiBKdXN0 IHVzZSB0aGUKY29ubmVjdG9yIGl0ZXJhdG9yLgoKVE9ETzogUmVtb3ZlOgotIGRybV9mYl9oZWxw ZXJfYWRkX29uZV9jb25uZWN0b3IoKQotIGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29u bmVjdG9ycygpCi0gZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25lX2Nvbm5lY3RvcigpCgpTaWduZWQt b2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0cm9ubmVzLm9yZz4KLS0tCiBkcml2ZXJz L2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIHwgMzU5ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIGluY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCAgICAgfCAgMTMgLS0K IDIgZmlsZXMgY2hhbmdlZCwgODYgaW5zZXJ0aW9ucygrKSwgMjg2IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2ZiX2hlbHBlci5jCmluZGV4IGNlMzhlYWRjYjM0Ni4uNmVlNjFmMTk1MzIxIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTExMiw1OSArMTEyLDEwIEBAIHN0YXRpYyBERUZJTkVf TVVURVgoa2VybmVsX2ZiX2hlbHBlcl9sb2NrKTsKICAqIGRlZmVycmVkIEkvTyAoY291cGxlZCB3 aXRoIGRybV9mYl9oZWxwZXJfZmJkZXZfdGVhcmRvd24oKSkuCiAgKi8KIAotI2RlZmluZSBkcm1f ZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYmgsIGlfXykgXAotCWZvciAoKHsgbG9ja2Rl cF9hc3NlcnRfaGVsZCgmKGZiaCktPmxvY2spOyB9KSwgXAotCSAgICAgaV9fID0gMDsgaV9fIDwg KGZiaCktPmNvbm5lY3Rvcl9jb3VudDsgaV9fKyspCi0KLXN0YXRpYyBpbnQgX19kcm1fZmJfaGVs cGVyX2FkZF9vbmVfY29ubmVjdG9yKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCi0J CQkJCSAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgZHJt X2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2Nvbm47Ci0Jc3RydWN0IGRybV9mYl9oZWxwZXJfY29u bmVjdG9yICoqdGVtcDsKLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0KLQlpZiAoIWRybV9mYmRldl9l bXVsYXRpb24pCi0JCXJldHVybiAwOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZmJfaGVscGVy LT5sb2NrKTsKLQotCWNvdW50ID0gZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQgKyAxOwotCi0J aWYgKGNvdW50ID4gZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb19hbGxvY19jb3VudCkgewotCQlz aXplX3Qgc2l6ZSA9IGNvdW50ICogc2l6ZW9mKGZiX2Nvbm4pOwotCi0JCXRlbXAgPSBrcmVhbGxv YyhmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvLCBzaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0 ZW1wKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb19h bGxvY19jb3VudCA9IGNvdW50OwotCQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvID0gdGVtcDsK LQl9Ci0KLQlmYl9jb25uID0ga3phbGxvYyhzaXplb2YoKmZiX2Nvbm4pLCBHRlBfS0VSTkVMKTsK LQlpZiAoIWZiX2Nvbm4pCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZHJtX2Nvbm5lY3Rvcl9nZXQo Y29ubmVjdG9yKTsKLQlmYl9jb25uLT5jb25uZWN0b3IgPSBjb25uZWN0b3I7Ci0JZmJfaGVscGVy LT5jb25uZWN0b3JfaW5mb1tmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCsrXSA9IGZiX2Nvbm47 Ci0KLQlyZXR1cm4gMDsKLX0KLQogaW50IGRybV9mYl9oZWxwZXJfYWRkX29uZV9jb25uZWN0b3Io c3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJCQkgICAgc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcikKIHsKLQlpbnQgZXJyOwotCi0JaWYgKCFmYl9oZWxwZXIpCi0JCXJl dHVybiAwOwotCi0JbXV0ZXhfbG9jaygmZmJfaGVscGVyLT5sb2NrKTsKLQllcnIgPSBfX2RybV9m Yl9oZWxwZXJfYWRkX29uZV9jb25uZWN0b3IoZmJfaGVscGVyLCBjb25uZWN0b3IpOwotCW11dGV4 X3VubG9jaygmZmJfaGVscGVyLT5sb2NrKTsKLQotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9 CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfYWRkX29uZV9jb25uZWN0b3IpOwogCkBAIC0x ODQsODcgKzEzNSwxNCBAQCBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfYWRkX29uZV9jb25u ZWN0b3IpOwogICovCiBpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3Jz KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2Ug KmRldjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVjdCBkcm1fY29u bmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7Ci0JaW50IGksIHJldCA9IDA7Ci0KLQlpZiAoIWRy bV9mYmRldl9lbXVsYXRpb24gfHwgIWZiX2hlbHBlcikKLQkJcmV0dXJuIDA7Ci0KLQlkZXYgPSBm Yl9oZWxwZXItPmRldjsKLQotCW11dGV4X2xvY2soJmZiX2hlbHBlci0+bG9jayk7Ci0JZHJtX2Nv bm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVyKTsKLQlkcm1fZm9yX2VhY2hf Y29ubmVjdG9yX2l0ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7Ci0JCXJldCA9IF9fZHJtX2Zi X2hlbHBlcl9hZGRfb25lX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGNvbm5lY3Rvcik7Ci0JCWlmIChy ZXQpCi0JCQlnb3RvIGZhaWw7Ci0JfQotCWdvdG8gb3V0OwotCi1mYWlsOgotCWRybV9mYl9oZWxw ZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBlciwgaSkgewotCQlzdHJ1Y3QgZHJtX2ZiX2hl bHBlcl9jb25uZWN0b3IgKmZiX2hlbHBlcl9jb25uZWN0b3IgPQotCQkJZmJfaGVscGVyLT5jb25u ZWN0b3JfaW5mb1tpXTsKLQotCQlkcm1fY29ubmVjdG9yX3B1dChmYl9oZWxwZXJfY29ubmVjdG9y LT5jb25uZWN0b3IpOwotCi0JCWtmcmVlKGZiX2hlbHBlcl9jb25uZWN0b3IpOwotCQlmYl9oZWxw ZXItPmNvbm5lY3Rvcl9pbmZvW2ldID0gTlVMTDsKLQl9Ci0JZmJfaGVscGVyLT5jb25uZWN0b3Jf Y291bnQgPSAwOwotb3V0OgotCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9pdGVy KTsKLQltdXRleF91bmxvY2soJmZiX2hlbHBlci0+bG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQot RVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3RvcnMpOwot Ci1zdGF0aWMgaW50IF9fZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25lX2Nvbm5lY3RvcihzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAotCQkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKLXsKLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBlcl9j b25uZWN0b3I7Ci0JaW50IGksIGo7Ci0KLQlpZiAoIWRybV9mYmRldl9lbXVsYXRpb24pCi0JCXJl dHVybiAwOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZmJfaGVscGVyLT5sb2NrKTsKLQotCWRy bV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBlciwgaSkgewotCQlpZiAoZmJf aGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXS0+Y29ubmVjdG9yID09IGNvbm5lY3RvcikKLQkJCWJy ZWFrOwotCX0KLQotCWlmIChpID09IGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50KQotCQlyZXR1 cm4gLUVJTlZBTDsKLQlmYl9oZWxwZXJfY29ubmVjdG9yID0gZmJfaGVscGVyLT5jb25uZWN0b3Jf aW5mb1tpXTsKLQlkcm1fY29ubmVjdG9yX3B1dChmYl9oZWxwZXJfY29ubmVjdG9yLT5jb25uZWN0 b3IpOwotCi0JZm9yIChqID0gaSArIDE7IGogPCBmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudDsg aisrKQotCQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ogLSAxXSA9IGZiX2hlbHBlci0+Y29u bmVjdG9yX2luZm9bal07Ci0KLQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudC0tOwotCWtmcmVl KGZiX2hlbHBlcl9jb25uZWN0b3IpOwotCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGRy bV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9ycyk7CiAKIGludCBkcm1fZmJfaGVs cGVyX3JlbW92ZV9vbmVfY29ubmVjdG9yKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIs CiAJCQkJICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7Ci0JaW50IGVy cjsKLQotCWlmICghZmJfaGVscGVyKQotCQlyZXR1cm4gMDsKLQotCW11dGV4X2xvY2soJmZiX2hl bHBlci0+bG9jayk7Ci0JZXJyID0gX19kcm1fZmJfaGVscGVyX3JlbW92ZV9vbmVfY29ubmVjdG9y KGZiX2hlbHBlciwgY29ubmVjdG9yKTsKLQltdXRleF91bmxvY2soJmZiX2hlbHBlci0+bG9jayk7 Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVs cGVyX3JlbW92ZV9vbmVfY29ubmVjdG9yKTsKIApAQCAtNDQzLDE3ICszMjEsNiBAQCBpbnQgZHJt X2ZiX2hlbHBlcl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKQogfQogRVhQ T1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2JsYW5rKTsKIAotc3RhdGljIHZvaWQgZHJtX2ZiX2hl bHBlcl9jcnRjX2ZyZWUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlcikKLXsKLQlpbnQgaTsK LQotCWZvciAoaSA9IDA7IGkgPCBoZWxwZXItPmNvbm5lY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCWRy bV9jb25uZWN0b3JfcHV0KGhlbHBlci0+Y29ubmVjdG9yX2luZm9baV0tPmNvbm5lY3Rvcik7Ci0J CWtmcmVlKGhlbHBlci0+Y29ubmVjdG9yX2luZm9baV0pOwotCX0KLQlrZnJlZShoZWxwZXItPmNv bm5lY3Rvcl9pbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9yZXN1bWVfd29y a2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAq aGVscGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkcm1fZmJfaGVscGVyLApAQCAtNTMx LDIzICszOTgsMTMgQEAgaW50IGRybV9mYl9oZWxwZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAogCQlyZXR1cm4gMDsKIAl9CiAKLQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvID0ga2Nh bGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IsIHNpemVvZihzdHJ1Y3QgZHJtX2Zi X2hlbHBlcl9jb25uZWN0b3IgKiksIEdGUF9LRVJORUwpOwotCWlmICghZmJfaGVscGVyLT5jb25u ZWN0b3JfaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9p bmZvX2FsbG9jX2NvdW50ID0gZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yOwotCWZiX2hl bHBlci0+Y29ubmVjdG9yX2NvdW50ID0gMDsKLQogCWZiX2hlbHBlci0+ZGlzcGxheSA9IGRybV9j bGllbnRfZGlzcGxheV9jcmVhdGUoZGV2KTsKIAlpZiAoSVNfRVJSKGZiX2hlbHBlci0+ZGlzcGxh eSkpCi0JCWdvdG8gb3V0X2ZyZWU7CisJCXJldHVybiBQVFJfRVJSKGZiX2hlbHBlci0+ZGlzcGxh eSk7CiAKIAlkZXYtPmZiX2hlbHBlciA9IGZiX2hlbHBlcjsKIAogCXJldHVybiAwOwotb3V0X2Zy ZWU6Ci0JZHJtX2ZiX2hlbHBlcl9jcnRjX2ZyZWUoZmJfaGVscGVyKTsKLQlyZXR1cm4gLUVOT01F TTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9pbml0KTsKIApAQCAtNjUxLDggKzUw OCw2IEBAIHZvaWQgZHJtX2ZiX2hlbHBlcl9maW5pKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9o ZWxwZXIpCiAKIAltdXRleF9kZXN0cm95KCZmYl9oZWxwZXItPmxvY2spOwogCWRybV9jbGllbnRf ZGlzcGxheV9mcmVlKGZiX2hlbHBlci0+ZGlzcGxheSk7Ci0JZHJtX2ZiX2hlbHBlcl9jcnRjX2Zy ZWUoZmJfaGVscGVyKTsKLQogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2ZpbmkpOwog CkBAIC0xNDc0LDggKzEzMjksOSBAQCBzdGF0aWMgaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2Zi X3Byb2JlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiB7CiAJaW50IHJldCA9IDA7 CiAJaW50IGNydGNfY291bnQgPSAwOwotCWludCBpOworCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xp c3RfaXRlciBjb25uX2l0ZXI7CiAJc3RydWN0IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9zaXplIHNp emVzOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IGRybV9tb2Rl X3NldCAqbW9kZV9zZXQ7CiAJaW50IGdhbW1hX3NpemUgPSAwOwogCkBAIC0xNDkwLDExICsxMzQ2 LDkgQEAgc3RhdGljIGludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCQlzaXplcy5zdXJmYWNlX2RlcHRoID0gc2l6ZXMuc3Vy ZmFjZV9icHAgPSBwcmVmZXJyZWRfYnBwOwogCiAJLyogZmlyc3QgdXAgZ2V0IGEgY291bnQgb2Yg Y3J0Y3Mgbm93IGluIHVzZSBhbmQgbmV3IG1pbi9tYXhlcyB3aWR0aC9oZWlnaHRzICovCi0JZHJt X2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVyLCBpKSB7Ci0JCXN0cnVjdCBk cm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscGVyX2Nvbm4gPSBmYl9oZWxwZXItPmNvbm5l Y3Rvcl9pbmZvW2ldOwotCQlzdHJ1Y3QgZHJtX2NtZGxpbmVfbW9kZSAqY21kbGluZV9tb2RlOwot Ci0JCWNtZGxpbmVfbW9kZSA9ICZmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT5jbWRsaW5lX21v ZGU7CisJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oZmJfaGVscGVyLT5kZXYsICZjb25u X2l0ZXIpOworCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcihjb25uZWN0b3IsICZjb25uX2l0 ZXIpIHsKKwkJc3RydWN0IGRybV9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZSA9ICZjb25uZWN0 b3ItPmNtZGxpbmVfbW9kZTsKIAogCQlpZiAoY21kbGluZV9tb2RlLT5icHBfc3BlY2lmaWVkKSB7 CiAJCQlzd2l0Y2ggKGNtZGxpbmVfbW9kZS0+YnBwKSB7CkBAIC0xNTE5LDYgKzEzNzMsNyBAQCBz dGF0aWMgaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZmJfaGVs cGVyICpmYl9oZWxwZXIsCiAJCQlicmVhazsKIAkJfQogCX0KKwlkcm1fY29ubmVjdG9yX2xpc3Rf aXRlcl9lbmQoJmNvbm5faXRlcik7CiAKIAljcnRjX2NvdW50ID0gMDsKIAlkcm1fY2xpZW50X2Rp c3BsYXlfZm9yX2VhY2hfbW9kZXNldChtb2RlX3NldCwgZmJfaGVscGVyLT5kaXNwbGF5KSB7CkBA IC0xNzA3LDcwICsxNTYyLDI4IEBAIHN0YXRpYyBpbnQgZHJtX2ZiX2hlbHBlcl9wcm9iZV9jb25u ZWN0b3JfbW9kZXMoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJCQkJCXVpbnQz Ml90IG1heFgsCiAJCQkJCQl1aW50MzJfdCBtYXhZKQogeworCXN0cnVjdCBkcm1fY29ubmVjdG9y X2xpc3RfaXRlciBjb25uX2l0ZXI7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsK LQlpbnQgaSwgY291bnQgPSAwOworCWludCBjb3VudCA9IDA7CiAKLQlkcm1fZmJfaGVscGVyX2Zv cl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGkpIHsKLQkJY29ubmVjdG9yID0gZmJfaGVscGVy LT5jb25uZWN0b3JfaW5mb1tpXS0+Y29ubmVjdG9yOworCWRybV9jb25uZWN0b3JfbGlzdF9pdGVy X2JlZ2luKGZiX2hlbHBlci0+ZGV2LCAmY29ubl9pdGVyKTsKKwlkcm1fZm9yX2VhY2hfY29ubmVj dG9yX2l0ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7CiAJCWNvdW50ICs9IGNvbm5lY3Rvci0+ ZnVuY3MtPmZpbGxfbW9kZXMoY29ubmVjdG9yLCBtYXhYLCBtYXhZKTsKIAl9CisJZHJtX2Nvbm5l Y3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwogCiAJcmV0dXJuIGNvdW50OwogfQogCi1z dGF0aWMgYm9vbCBkcm1faGFzX2NtZGxpbmVfbW9kZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25u ZWN0b3IgKmZiX2Nvbm5lY3RvcikKLXsKLQlyZXR1cm4gZmJfY29ubmVjdG9yLT5jb25uZWN0b3It PmNtZGxpbmVfbW9kZS5zcGVjaWZpZWQ7Ci19Ci0KLXN0YXRpYyBib29sIGRybV9jb25uZWN0b3Jf ZW5hYmxlZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIHN0cmljdCkKLXsK LQlib29sIGVuYWJsZTsKLQotCWlmIChjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5ub25fZGVza3Rv cCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKHN0cmljdCkKLQkJZW5hYmxlID0gY29ubmVjdG9y LT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0JZWxzZQotCQllbmFibGUg PSBjb25uZWN0b3ItPnN0YXR1cyAhPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKLQot CXJldHVybiBlbmFibGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRybV9lbmFibGVfY29ubmVjdG9ycyhz dHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAotCQkJCSAgYm9vbCAqZW5hYmxlZCkKLXsK LQlib29sIGFueV9lbmFibGVkID0gZmFsc2U7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcjsKLQlpbnQgaSA9IDA7Ci0KLQlkcm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3Rvcihm Yl9oZWxwZXIsIGkpIHsKLQkJY29ubmVjdG9yID0gZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tp XS0+Y29ubmVjdG9yOwotCQllbmFibGVkW2ldID0gZHJtX2Nvbm5lY3Rvcl9lbmFibGVkKGNvbm5l Y3RvciwgdHJ1ZSk7Ci0JCURSTV9ERUJVR19LTVMoImNvbm5lY3RvciAlZCBlbmFibGVkPyAlc1xu IiwgY29ubmVjdG9yLT5iYXNlLmlkLAotCQkJICAgICAgY29ubmVjdG9yLT5kaXNwbGF5X2luZm8u bm9uX2Rlc2t0b3AgPyAibm9uIGRlc2t0b3AiIDogZW5hYmxlZFtpXSA/ICJ5ZXMiIDogIm5vIik7 Ci0KLQkJYW55X2VuYWJsZWQgfD0gZW5hYmxlZFtpXTsKLQl9Ci0KLQlpZiAoYW55X2VuYWJsZWQp Ci0JCXJldHVybjsKLQotCWRybV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBl ciwgaSkgewotCQljb25uZWN0b3IgPSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldLT5jb25u ZWN0b3I7Ci0JCWVuYWJsZWRbaV0gPSBkcm1fY29ubmVjdG9yX2VuYWJsZWQoY29ubmVjdG9yLCBm YWxzZSk7Ci0JfQotfQotCiBzdGF0aWMgYm9vbCBkcm1fdGFyZ2V0X2Nsb25lZChzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAqZmJfaGVscGVyLAorCQkJICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKipj b25uZWN0b3JzLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNvbm5lY3Rvcl9jb3VudCwKIAkJCSAg ICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCiAJCQkgICAgICBzdHJ1Y3QgZHJt X2ZiX29mZnNldCAqb2Zmc2V0cywKIAkJCSAgICAgIGJvb2wgKmVuYWJsZWQsIGludCB3aWR0aCwg aW50IGhlaWdodCkKIHsKIAlpbnQgY291bnQsIGksIGo7CiAJYm9vbCBjYW5fY2xvbmUgPSBmYWxz ZTsKLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBlcl9jb25uOwogCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkbXRfbW9kZSwgKm1vZGU7CiAKIAkvKiBvbmx5IGNvbnRl bXBsYXRlIGNsb25pbmcgaW4gdGhlIHNpbmdsZSBjcnRjIGNhc2UgKi8KQEAgLTE3NzgsNyArMTU5 MSw3IEBAIHN0YXRpYyBib29sIGRybV90YXJnZXRfY2xvbmVkKHN0cnVjdCBkcm1fZmJfaGVscGVy ICpmYl9oZWxwZXIsCiAJCXJldHVybiBmYWxzZTsKIAogCWNvdW50ID0gMDsKLQlkcm1fZmJfaGVs cGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGkpIHsKKwlmb3IgKGkgPSAwOyBpIDwg Y29ubmVjdG9yX2NvdW50OyBpKyspIHsKIAkJaWYgKGVuYWJsZWRbaV0pCiAJCQljb3VudCsrOwog CX0KQEAgLTE3ODksMTEgKzE2MDIsMTAgQEAgc3RhdGljIGJvb2wgZHJtX3RhcmdldF9jbG9uZWQo c3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAogCS8qIGNoZWNrIHRoZSBjb21tYW5k IGxpbmUgb3IgaWYgbm90aGluZyBjb21tb24gcGljayAxMDI0eDc2OCAqLwogCWNhbl9jbG9uZSA9 IHRydWU7Ci0JZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVyLCBpKSB7 CisJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvcl9jb3VudDsgaSsrKSB7CiAJCWlmICghZW5hYmxl ZFtpXSkKIAkJCWNvbnRpbnVlOwotCQlmYl9oZWxwZXJfY29ubiA9IGZiX2hlbHBlci0+Y29ubmVj dG9yX2luZm9baV07Ci0JCW1vZGVzW2ldID0gZHJtX2Nvbm5lY3Rvcl9waWNrX2NtZGxpbmVfbW9k ZShmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yKTsKKwkJbW9kZXNbaV0gPSBkcm1fY29ubmVjdG9y X3BpY2tfY21kbGluZV9tb2RlKGNvbm5lY3RvcnNbaV0pOwogCQlpZiAoIW1vZGVzW2ldKSB7CiAJ CQljYW5fY2xvbmUgPSBmYWxzZTsKIAkJCWJyZWFrOwpAQCAtMTgxNSwxMiArMTYyNywxMSBAQCBz dGF0aWMgYm9vbCBkcm1fdGFyZ2V0X2Nsb25lZChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVs cGVyLAogCWNhbl9jbG9uZSA9IHRydWU7CiAJZG10X21vZGUgPSBkcm1fbW9kZV9maW5kX2RtdChm Yl9oZWxwZXItPmRldiwgMTAyNCwgNzY4LCA2MCwgZmFsc2UpOwogCi0JZHJtX2ZiX2hlbHBlcl9m b3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVyLCBpKSB7CisJZm9yIChpID0gMDsgaSA8IGNvbm5l Y3Rvcl9jb3VudDsgaSsrKSB7CiAJCWlmICghZW5hYmxlZFtpXSkKIAkJCWNvbnRpbnVlOwogCi0J CWZiX2hlbHBlcl9jb25uID0gZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXTsKLQkJbGlzdF9m b3JfZWFjaF9lbnRyeShtb2RlLCAmZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+bW9kZXMsIGhl YWQpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yc1tpXS0+bW9kZXMs IGhlYWQpIHsKIAkJCWlmIChkcm1fbW9kZV9lcXVhbChtb2RlLCBkbXRfbW9kZSkpCiAJCQkJbW9k ZXNbaV0gPSBtb2RlOwogCQl9CkBAIC0xODM2LDMwICsxNjQ3LDMxIEBAIHN0YXRpYyBib29sIGRy bV90YXJnZXRfY2xvbmVkKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJcmV0dXJu IGZhbHNlOwogfQogCi1zdGF0aWMgaW50IGRybV9nZXRfdGlsZV9vZmZzZXRzKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpmYl9oZWxwZXIsCitzdGF0aWMgaW50IGRybV9nZXRfdGlsZV9vZmZzZXRzKHN0 cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9ycywKKwkJCQl1bnNpZ25lZCBpbnQgY29ubmVj dG9yX2NvdW50LAogCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCiAJCQkJc3Ry dWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldHMsCiAJCQkJaW50IGlkeCwKIAkJCQlpbnQgaF9pZHgs IGludCB2X2lkeCkKIHsKLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBl cl9jb25uOwogCWludCBpOwogCWludCBob2Zmc2V0ID0gMCwgdm9mZnNldCA9IDA7CiAKLQlkcm1f ZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGkpIHsKLQkJZmJfaGVscGVy X2Nvbm4gPSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldOwotCQlpZiAoIWZiX2hlbHBlcl9j b25uLT5jb25uZWN0b3ItPmhhc190aWxlKQorCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3JfY291 bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gY29ubmVjdG9y c1tpXTsKKworCQlpZiAoIWNvbm5lY3Rvci0+aGFzX3RpbGUpCiAJCQljb250aW51ZTsKIAogCQlp ZiAoIW1vZGVzW2ldICYmIChoX2lkeCB8fCB2X2lkeCkpIHsKIAkJCURSTV9ERUJVR19LTVMoIm5v IG1vZGVzIGZvciBjb25uZWN0b3IgdGlsZWQgJWQgJWRcbiIsIGksCi0JCQkJICAgICAgZmJfaGVs cGVyX2Nvbm4tPmNvbm5lY3Rvci0+YmFzZS5pZCk7CisJCQkJICAgICAgY29ubmVjdG9yLT5iYXNl LmlkKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmIChmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9y LT50aWxlX2hfbG9jIDwgaF9pZHgpCisJCWlmIChjb25uZWN0b3ItPnRpbGVfaF9sb2MgPCBoX2lk eCkKIAkJCWhvZmZzZXQgKz0gbW9kZXNbaV0tPmhkaXNwbGF5OwogCi0JCWlmIChmYl9oZWxwZXJf Y29ubi0+Y29ubmVjdG9yLT50aWxlX3ZfbG9jIDwgdl9pZHgpCisJCWlmIChjb25uZWN0b3ItPnRp bGVfdl9sb2MgPCB2X2lkeCkKIAkJCXZvZmZzZXQgKz0gbW9kZXNbaV0tPnZkaXNwbGF5OwogCX0K IAlvZmZzZXRzW2lkeF0ueCA9IGhvZmZzZXQ7CkBAIC0xODY4LDIwICsxNjgwLDIwIEBAIHN0YXRp YyBpbnQgZHJtX2dldF90aWxlX29mZnNldHMoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBl ciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wgZHJtX3RhcmdldF9wcmVmZXJyZWQoc3Ry dWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKK3N0YXRpYyBib29sIGRybV90YXJnZXRfcHJl ZmVycmVkKHN0cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9ycywKKwkJCQkgdW5zaWduZWQg aW50IGNvbm5lY3Rvcl9jb3VudCwKIAkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiptb2Rl cywKIAkJCQkgc3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldHMsCiAJCQkJIGJvb2wgKmVuYWJs ZWQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25u ZWN0b3IgKmZiX2hlbHBlcl9jb25uOwotCWNvbnN0IHU2NCBtYXNrID0gQklUX1VMTChmYl9oZWxw ZXItPmNvbm5lY3Rvcl9jb3VudCkgLSAxOworCWNvbnN0IHU2NCBtYXNrID0gQklUX1VMTChjb25u ZWN0b3JfY291bnQpIC0gMTsKIAl1NjQgY29ubl9jb25maWd1cmVkID0gMDsKIAlpbnQgdGlsZV9w YXNzID0gMDsKIAlpbnQgaTsKIAogcmV0cnk6Ci0JZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25u ZWN0b3IoZmJfaGVscGVyLCBpKSB7Ci0JCWZiX2hlbHBlcl9jb25uID0gZmJfaGVscGVyLT5jb25u ZWN0b3JfaW5mb1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgY29ubmVjdG9yX2NvdW50OyBpKyspIHsK KwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGNvbm5lY3RvcnNbaV07CiAKIAkJ aWYgKGNvbm5fY29uZmlndXJlZCAmIEJJVF9VTEwoaSkpCiAJCQljb250aW51ZTsKQEAgLTE4OTIs MTcgKzE3MDQsMTcgQEAgc3RhdGljIGJvb2wgZHJtX3RhcmdldF9wcmVmZXJyZWQoc3RydWN0IGRy bV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJfQogCiAJCS8qIGZpcnN0IHBhc3Mgb3ZlciBhbGwg dGhlIHVudGlsZWQgY29ubmVjdG9ycyAqLwotCQlpZiAodGlsZV9wYXNzID09IDAgJiYgZmJfaGVs cGVyX2Nvbm4tPmNvbm5lY3Rvci0+aGFzX3RpbGUpCisJCWlmICh0aWxlX3Bhc3MgPT0gMCAmJiBj b25uZWN0b3ItPmhhc190aWxlKQogCQkJY29udGludWU7CiAKIAkJaWYgKHRpbGVfcGFzcyA9PSAx KSB7Ci0JCQlpZiAoZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+dGlsZV9oX2xvYyAhPSAwIHx8 Ci0JCQkgICAgZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+dGlsZV92X2xvYyAhPSAwKQorCQkJ aWYgKGNvbm5lY3Rvci0+dGlsZV9oX2xvYyAhPSAwIHx8CisJCQkgICAgY29ubmVjdG9yLT50aWxl X3ZfbG9jICE9IDApCiAJCQkJY29udGludWU7CiAKIAkJfSBlbHNlIHsKLQkJCWlmIChmYl9oZWxw ZXJfY29ubi0+Y29ubmVjdG9yLT50aWxlX2hfbG9jICE9IHRpbGVfcGFzcyAtIDEgJiYKLQkJCSAg ICBmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT50aWxlX3ZfbG9jICE9IHRpbGVfcGFzcyAtIDEp CisJCQlpZiAoY29ubmVjdG9yLT50aWxlX2hfbG9jICE9IHRpbGVfcGFzcyAtIDEgJiYKKwkJCSAg ICBjb25uZWN0b3ItPnRpbGVfdl9sb2MgIT0gdGlsZV9wYXNzIC0gMSkKIAkJCS8qIGlmIHRoaXMg dGlsZV9wYXNzIGRvZXNuJ3QgY292ZXIgYW55IG9mIHRoZSB0aWxlcyAtIGtlZXAgZ29pbmcgKi8K IAkJCQljb250aW51ZTsKIApAQCAtMTkxMCwyNCArMTcyMiwyMyBAQCBzdGF0aWMgYm9vbCBkcm1f dGFyZ2V0X3ByZWZlcnJlZChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCQkJICog ZmluZCB0aGUgdGlsZSBvZmZzZXRzIGZvciB0aGlzIHBhc3MgLSBuZWVkIHRvIGZpbmQKIAkJCSAq IGFsbCB0aWxlcyBsZWZ0IGFuZCBhYm92ZQogCQkJICovCi0JCQlkcm1fZ2V0X3RpbGVfb2Zmc2V0 cyhmYl9oZWxwZXIsIG1vZGVzLCBvZmZzZXRzLAotCQkJCQkgICAgIGksIGZiX2hlbHBlcl9jb25u LT5jb25uZWN0b3ItPnRpbGVfaF9sb2MsIGZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPnRpbGVf dl9sb2MpOworCQkJZHJtX2dldF90aWxlX29mZnNldHMoY29ubmVjdG9ycywgY29ubmVjdG9yX2Nv dW50LCBtb2Rlcywgb2Zmc2V0cywKKwkJCQkJICAgICBpLCBjb25uZWN0b3ItPnRpbGVfaF9sb2Ms IGNvbm5lY3Rvci0+dGlsZV92X2xvYyk7CiAJCX0KIAkJRFJNX0RFQlVHX0tNUygibG9va2luZyBm b3IgY21kbGluZSBtb2RlIG9uIGNvbm5lY3RvciAlZFxuIiwKLQkJCSAgICAgIGZiX2hlbHBlcl9j b25uLT5jb25uZWN0b3ItPmJhc2UuaWQpOworCQkJICAgICAgY29ubmVjdG9yLT5iYXNlLmlkKTsK IAogCQkvKiBnb3QgZm9yIGNvbW1hbmQgbGluZSBtb2RlIGZpcnN0ICovCi0JCW1vZGVzW2ldID0g ZHJtX2Nvbm5lY3Rvcl9waWNrX2NtZGxpbmVfbW9kZShmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9y KTsKKwkJbW9kZXNbaV0gPSBkcm1fY29ubmVjdG9yX3BpY2tfY21kbGluZV9tb2RlKGNvbm5lY3Rv cik7CiAJCWlmICghbW9kZXNbaV0pIHsKIAkJCURSTV9ERUJVR19LTVMoImxvb2tpbmcgZm9yIHBy ZWZlcnJlZCBtb2RlIG9uIGNvbm5lY3RvciAlZCAlZFxuIiwKLQkJCQkgICAgICBmYl9oZWxwZXJf Y29ubi0+Y29ubmVjdG9yLT5iYXNlLmlkLCBmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT50aWxl X2dyb3VwID8gZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+dGlsZV9ncm91cC0+aWQgOiAwKTsK LQkJCW1vZGVzW2ldID0gZHJtX2Nvbm5lY3Rvcl9oYXNfcHJlZmVycmVkX21vZGUoZmJfaGVscGVy X2Nvbm4tPmNvbm5lY3Rvciwgd2lkdGgsIGhlaWdodCk7CisJCQkJICAgICAgY29ubmVjdG9yLT5i YXNlLmlkLCBjb25uZWN0b3ItPnRpbGVfZ3JvdXAgPyBjb25uZWN0b3ItPnRpbGVfZ3JvdXAtPmlk IDogMCk7CisJCQltb2Rlc1tpXSA9IGRybV9jb25uZWN0b3JfaGFzX3ByZWZlcnJlZF9tb2RlKGNv bm5lY3Rvciwgd2lkdGgsIGhlaWdodCk7CiAJCX0KIAkJLyogTm8gcHJlZmVycmVkIG1vZGVzLCBw aWNrIG9uZSBvZmYgdGhlIGxpc3QgKi8KLQkJaWYgKCFtb2Rlc1tpXSAmJiAhbGlzdF9lbXB0eSgm ZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+bW9kZXMpKSB7Ci0JCQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KG1vZGVzW2ldLCAmZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpCi0J CQkJYnJlYWs7Ci0JCX0KKwkJaWYgKCFtb2Rlc1tpXSkKKwkJCW1vZGVzW2ldID0gbGlzdF9maXJz dF9lbnRyeV9vcl9udWxsKCZjb25uZWN0b3ItPm1vZGVzLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSwgaGVhZCk7CisKIAkJRFJNX0RFQlVHX0tNUygiZm91bmQgbW9kZSAlc1xuIiwgbW9kZXNbaV0g PyBtb2Rlc1tpXS0+bmFtZSA6CiAJCQkgICJub25lIik7CiAJCWNvbm5fY29uZmlndXJlZCB8PSBC SVRfVUxMKGkpOwpAQCAtMTk0MCwxMiArMTc1MSwxMyBAQCBzdGF0aWMgYm9vbCBkcm1fdGFyZ2V0 X3ByZWZlcnJlZChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCXJldHVybiB0cnVl OwogfQogCi1zdGF0aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpm Yl9oZWxwZXIsCitzdGF0aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVjdCBkcm1fY2xpZW50X2Rp c3BsYXkgKmRpc3BsYXksCisJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9ycywK KwkJCSAgdW5zaWduZWQgaW50IGNvbm5lY3Rvcl9jb3VudCwKIAkJCSAgc3RydWN0IGRybV9jcnRj ICoqYmVzdF9jcnRjcywKIAkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiptb2RlcywKIAkJ CSAgaW50IG4sIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLQlzdHJ1Y3QgZHJtX2NsaWVudF9k aXNwbGF5ICpkaXNwbGF5ID0gZmJfaGVscGVyLT5kaXNwbGF5OwogCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBkaXNwbGF5LT5kZXY7CiAJaW50IG8sIG15X3Njb3JlLCBiZXN0X3Njb3JlLCBzY29y ZTsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwpAQCAtMTk1MywyNyArMTc2NSwy NiBAQCBzdGF0aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9o ZWxwZXIsCiAJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldDsKIAlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXI7CiAJc3RydWN0IGRybV9jcnRjICoqY3J0Y3M7Ci0Jc3RydWN0IGRybV9mYl9o ZWxwZXJfY29ubmVjdG9yICpmYl9oZWxwZXJfY29ubjsKIAotCWlmIChuID09IGZiX2hlbHBlci0+ Y29ubmVjdG9yX2NvdW50KQorCWlmIChuID09IGNvbm5lY3Rvcl9jb3VudCkKIAkJcmV0dXJuIDA7 CiAKLQlmYl9oZWxwZXJfY29ubiA9IGZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm9bbl07Ci0JY29u bmVjdG9yID0gZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3RvcjsKKwljb25uZWN0b3IgPSBjb25uZWN0 b3JzW25dOwogCiAJYmVzdF9jcnRjc1tuXSA9IE5VTEw7Ci0JYmVzdF9zY29yZSA9IGRybV9waWNr X2NydGNzKGZiX2hlbHBlciwgYmVzdF9jcnRjcywgbW9kZXMsIG4rMSwgd2lkdGgsIGhlaWdodCk7 CisJYmVzdF9zY29yZSA9IGRybV9waWNrX2NydGNzKGRpc3BsYXksIGNvbm5lY3RvcnMsIGNvbm5l Y3Rvcl9jb3VudCwKKwkJCQkgICAgYmVzdF9jcnRjcywgbW9kZXMsIG4gKyAxLCB3aWR0aCwgaGVp Z2h0KTsKIAlpZiAobW9kZXNbbl0gPT0gTlVMTCkKIAkJcmV0dXJuIGJlc3Rfc2NvcmU7CiAKLQlj cnRjcyA9IGtjYWxsb2MoZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQsIHNpemVvZigqY3J0Y3Mp LCBHRlBfS0VSTkVMKTsKKwljcnRjcyA9IGtjYWxsb2MoY29ubmVjdG9yX2NvdW50LCBzaXplb2Yo KmNydGNzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjcnRjcykKIAkJcmV0dXJuIGJlc3Rfc2NvcmU7 CiAKIAlteV9zY29yZSA9IDE7CiAJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9z dGF0dXNfY29ubmVjdGVkKQogCQlteV9zY29yZSsrOwotCWlmIChkcm1faGFzX2NtZGxpbmVfbW9k ZShmYl9oZWxwZXJfY29ubikpCisJaWYgKGNvbm5lY3Rvci0+Y21kbGluZV9tb2RlLnNwZWNpZmll ZCkKIAkJbXlfc2NvcmUrKzsKIAlpZiAoZHJtX2Nvbm5lY3Rvcl9oYXNfcHJlZmVycmVkX21vZGUo Y29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KSkKIAkJbXlfc2NvcmUrKzsKQEAgLTE5ODUsNyArMTc5 Niw3IEBAIHN0YXRpYyBpbnQgZHJtX3BpY2tfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZi X2hlbHBlciwKIAkgKiBOVUxMIHdlIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IGRybV9hdG9taWNf aGVscGVyX2Jlc3RfZW5jb2RlcigpCiAJICogaGVscGVyLgogCSAqLwotCWlmIChkcm1fZHJ2X3Vz ZXNfYXRvbWljX21vZGVzZXQoZmJfaGVscGVyLT5kZXYpICYmCisJaWYgKGRybV9kcnZfdXNlc19h dG9taWNfbW9kZXNldChkZXYpICYmCiAJICAgICFjb25uZWN0b3JfZnVuY3MtPmJlc3RfZW5jb2Rl cikKIAkJZW5jb2RlciA9IGRybV9hdG9taWNfaGVscGVyX2Jlc3RfZW5jb2Rlcihjb25uZWN0b3Ip OwogCWVsc2UKQEAgLTIwMTksMTIgKzE4MzAsMTIgQEAgc3RhdGljIGludCBkcm1fcGlja19jcnRj cyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCiAJCWNydGNzW25dID0gY3J0YzsK IAkJbWVtY3B5KGNydGNzLCBiZXN0X2NydGNzLCBuICogc2l6ZW9mKCpjcnRjcykpOwotCQlzY29y ZSA9IG15X3Njb3JlICsgZHJtX3BpY2tfY3J0Y3MoZmJfaGVscGVyLCBjcnRjcywgbW9kZXMsIG4g KyAxLAotCQkJCQkJICB3aWR0aCwgaGVpZ2h0KTsKKwkJc2NvcmUgPSBteV9zY29yZSArIGRybV9w aWNrX2NydGNzKGRpc3BsYXksIGNvbm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3VudCwKKwkJCQkJCSAg Y3J0Y3MsIG1vZGVzLCBuICsgMSwgd2lkdGgsIGhlaWdodCk7CiAJCWlmIChzY29yZSA+IGJlc3Rf c2NvcmUpIHsKIAkJCWJlc3Rfc2NvcmUgPSBzY29yZTsKIAkJCW1lbWNweShiZXN0X2NydGNzLCBj cnRjcywKLQkJCSAgICAgICBmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCAqIHNpemVvZigqY3J0 Y3MpKTsKKwkJCSAgICAgICBjb25uZWN0b3JfY291bnQgKiBzaXplb2YoKmNydGNzKSk7CiAJCX0K IAl9CiBvdXQ6CkBAIC0yMDM3LDExICsxODQ4LDEyIEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9j cnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogewogCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKIAlzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpk aXNwbGF5OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9yczsKIAlzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqKm1vZGVzOwogCXN0cnVjdCBkcm1fZmJfb2Zmc2V0ICpvZmZzZXRzOwog CXN0cnVjdCBkcm1fY3J0YyAqKmNydGNzOworCWludCBpLCBjb25uZWN0b3JfY291bnQ7CiAJYm9v bCAqZW5hYmxlZDsKLQlpbnQgaTsKIAogCURSTV9ERUJVR19LTVMoIlxuIik7CiAJLyogcHJldmVu dCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBvZiBjb25uZWN0b3JfY291bnQgYnkgaG90cGx1ZyAq LwpAQCAtMjA2MSwxMyArMTg3MywxNCBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Moc3Ry dWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJfQogCX0KIAotCWNydGNzID0ga2NhbGxv YyhmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCwgc2l6ZW9mKCpjcnRjcyksIEdGUF9LRVJORUwp OwotCW1vZGVzID0ga2NhbGxvYyhmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCwKLQkJCXNpemVv ZihzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKSwgR0ZQX0tFUk5FTCk7Ci0Jb2Zmc2V0cyA9IGtj YWxsb2MoZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQsCi0JCQkgIHNpemVvZihzdHJ1Y3QgZHJt X2ZiX29mZnNldCksIEdGUF9LRVJORUwpOwotCWVuYWJsZWQgPSBrY2FsbG9jKGZiX2hlbHBlci0+ Y29ubmVjdG9yX2NvdW50LAotCQkJICBzaXplb2YoYm9vbCksIEdGUF9LRVJORUwpOworCWNvbm5l Y3Rvcl9jb3VudCA9IGRybV9jb25uZWN0b3JfZ2V0X2FsbChkZXYsICZjb25uZWN0b3JzKTsKKwlp ZiAoY29ubmVjdG9yX2NvdW50IDwgMSkKKwkJcmV0dXJuOworCisJZW5hYmxlZCA9IGRybV9jb25u ZWN0b3JfZ2V0X2VuYWJsZWRfc3RhdHVzKGNvbm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3VudCk7CisJ Y3J0Y3MgPSBrY2FsbG9jKGNvbm5lY3Rvcl9jb3VudCwgc2l6ZW9mKCpjcnRjcyksIEdGUF9LRVJO RUwpOworCW1vZGVzID0ga2NhbGxvYyhjb25uZWN0b3JfY291bnQsIHNpemVvZigqbW9kZXMpLCBH RlBfS0VSTkVMKTsKKwlvZmZzZXRzID0ga2NhbGxvYyhjb25uZWN0b3JfY291bnQsIHNpemVvZigq b2Zmc2V0cyksIEdGUF9LRVJORUwpOwogCWlmICghY3J0Y3MgfHwgIW1vZGVzIHx8ICFlbmFibGVk IHx8ICFvZmZzZXRzKSB7CiAJCURSTV9FUlJPUigiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4i KTsKIAkJZ290byBvdXQ7CkBAIC0yMDc3LDI3ICsxODkwLDI2IEBAIHN0YXRpYyB2b2lkIGRybV9z ZXR1cF9jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCWlmIChJU19FUlIo ZGlzcGxheSkpCiAJCWdvdG8gb3V0OwogCi0JZHJtX2VuYWJsZV9jb25uZWN0b3JzKGZiX2hlbHBl ciwgZW5hYmxlZCk7Ci0KLQlpZiAoIWRybV90YXJnZXRfY2xvbmVkKGZiX2hlbHBlciwgbW9kZXMs IG9mZnNldHMsIGVuYWJsZWQsIHdpZHRoLCBoZWlnaHQpICYmCi0JICAgICFkcm1fdGFyZ2V0X3By ZWZlcnJlZChmYl9oZWxwZXIsIG1vZGVzLCBvZmZzZXRzLCBlbmFibGVkLCB3aWR0aCwgaGVpZ2h0 KSkKKwlpZiAoIWRybV90YXJnZXRfY2xvbmVkKGZiX2hlbHBlciwgY29ubmVjdG9ycywgY29ubmVj dG9yX2NvdW50LAorCQkJICAgICAgIG1vZGVzLCBvZmZzZXRzLCBlbmFibGVkLCB3aWR0aCwgaGVp Z2h0KSAmJgorCSAgICAhZHJtX3RhcmdldF9wcmVmZXJyZWQoY29ubmVjdG9ycywgY29ubmVjdG9y X2NvdW50LAorCQkJCSAgbW9kZXMsIG9mZnNldHMsIGVuYWJsZWQsIHdpZHRoLCBoZWlnaHQpKQog CQlEUk1fRVJST1IoIlVuYWJsZSB0byBmaW5kIGluaXRpYWwgbW9kZXNcbiIpOwogCiAJRFJNX0RF QlVHX0tNUygicGlja2luZyBDUlRDcyBmb3IgJWR4JWQgY29uZmlnXG4iLCB3aWR0aCwgaGVpZ2h0 KTsKIAotCWRybV9waWNrX2NydGNzKGZiX2hlbHBlciwgY3J0Y3MsIG1vZGVzLCAwLCB3aWR0aCwg aGVpZ2h0KTsKKwlkcm1fcGlja19jcnRjcyhkaXNwbGF5LCBjb25uZWN0b3JzLCBjb25uZWN0b3Jf Y291bnQsIGNydGNzLCBtb2RlcywgMCwgd2lkdGgsIGhlaWdodCk7CiAKIAkvKiBuZWVkIHRvIHNl dCB0aGUgbW9kZXNldHMgdXAgaGVyZSBmb3IgdXNlIGxhdGVyICovCiAJLyogZmlsbCBvdXQgdGhl IGNvbm5lY3RvcjwtPmNydGMgbWFwcGluZ3MgaW50byB0aGUgbW9kZXNldHMgKi8KIAotCWRybV9m Yl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBlciwgaSkgeworCWZvciAoaSA9IDA7 IGkgPCBjb25uZWN0b3JfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yID0gY29ubmVjdG9yc1tpXTsKIAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUg PSBtb2Rlc1tpXTsKIAkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gY3J0Y3NbaV07CiAJCXN0cnVj dCBkcm1fZmJfb2Zmc2V0ICpvZmZzZXQgPSAmb2Zmc2V0c1tpXTsKIAogCQlpZiAobW9kZSAmJiBj cnRjKSB7Ci0JCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0KLQkJCQlmYl9oZWxw ZXItPmNvbm5lY3Rvcl9pbmZvW2ldLT5jb25uZWN0b3I7CiAJCQlzdHJ1Y3QgZHJtX21vZGVfc2V0 ICptb2Rlc2V0OwogCiAJCQltb2Rlc2V0ID0gZHJtX2NsaWVudF9kaXNwbGF5X2ZpbmRfbW9kZXNl dChkaXNwbGF5LCBjcnRjKTsKQEAgLTIxMjEsNiArMTkzMyw3IEBAIHN0YXRpYyB2b2lkIGRybV9z ZXR1cF9jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCWZiX2hlbHBlci0+ ZGlzcGxheSA9IGRpc3BsYXk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmln Lm11dGV4KTsKKwlkcm1fY29ubmVjdG9yX3B1dF9hbGwoY29ubmVjdG9ycywgY29ubmVjdG9yX2Nv dW50KTsKIAlrZnJlZShjcnRjcyk7CiAJa2ZyZWUobW9kZXMpOwogCWtmcmVlKG9mZnNldHMpOwpA QCAtMjEzNiwxMCArMTk0OSwxMSBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Moc3RydWN0 IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKICAqLwogc3RhdGljIHZvaWQgZHJtX3NldHVwX2Ny dGNzX2ZiKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCiB7CisJc3RydWN0IGRybV9j b25uZWN0b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGZi X2hlbHBlci0+ZmJkZXY7CiAJdW5zaWduZWQgaW50IHJvdGF0aW9uLCBzd19yb3RhdGlvbnMgPSAw OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IGRybV9tb2RlX3Nl dCAqbW9kZXNldDsKLQlpbnQgaTsKIAogCWRybV9jbGllbnRfZGlzcGxheV9mb3JfZWFjaF9tb2Rl c2V0KG1vZGVzZXQsIGZiX2hlbHBlci0+ZGlzcGxheSkgewogCQlpZiAoIW1vZGVzZXQtPm51bV9j b25uZWN0b3JzKQpAQCAtMjE1NiwxMCArMTk3MCw4IEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9j cnRjc19mYihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogCX0KIAogCW11dGV4X2xv Y2soJmZiX2hlbHBlci0+ZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JZHJtX2ZiX2hlbHBlcl9m b3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVyLCBpKSB7Ci0JCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IgPQotCQkJCQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldLT5jb25uZWN0 b3I7Ci0KKwlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdpbihmYl9oZWxwZXItPmRldiwgJmNv bm5faXRlcik7CisJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3RvciwgJmNvbm5f aXRlcikgewogCQkvKiB1c2UgZmlyc3QgY29ubmVjdGVkIGNvbm5lY3RvciBmb3IgdGhlIHBoeXNp Y2FsIGRpbWVuc2lvbnMgKi8KIAkJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9z dGF0dXNfY29ubmVjdGVkKSB7CiAJCQlpbmZvLT52YXIud2lkdGggPSBjb25uZWN0b3ItPmRpc3Bs YXlfaW5mby53aWR0aF9tbTsKQEAgLTIxNjcsNiArMTk3OSw3IEBAIHN0YXRpYyB2b2lkIGRybV9z ZXR1cF9jcnRjc19mYihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogCQkJYnJlYWs7 CiAJCX0KIAl9CisJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwogCW11 dGV4X3VubG9jaygmZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAogCXN3aXRj aCAoc3dfcm90YXRpb25zKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVy LmggYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKaW5kZXggNDA4OTMxZjc2MTNmLi5hMWUx YWIxMjQ3YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAorKysgYi9p bmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKQEAgLTk3LDEwICs5Nyw2IEBAIHN0cnVjdCBkcm1f ZmJfaGVscGVyX2Z1bmNzIHsKIAkJCXN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAq c2l6ZXMpOwogfTsKIAotc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yIHsKLQlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotfTsKLQogLyoqCiAgKiBzdHJ1Y3QgZHJtX2ZiX2hl bHBlciAtIG1haW4gc3RydWN0dXJlIHRvIGVtdWxhdGUgZmJkZXYgb24gdG9wIG9mIEtNUwogICog QGZiOiBTY2Fub3V0IGZyYW1lYnVmZmVyIG9iamVjdApAQCAtMTM0LDE1ICsxMzAsNiBAQCBzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciB7CiAJICovCiAJc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlz cGxheTsKIAotCWludCBjb25uZWN0b3JfY291bnQ7Ci0JaW50IGNvbm5lY3Rvcl9pbmZvX2FsbG9j X2NvdW50OwotCS8qKgotCSAqIEBjb25uZWN0b3JfaW5mbzoKLQkgKgotCSAqIEFycmF5IG9mIHBl ci1jb25uZWN0b3IgaW5mb3JtYXRpb24uIERvIG5vdCBpdGVyYXRlIGRpcmVjdGx5LCBidXQgdXNl Ci0JICogZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IuCi0JICovCi0Jc3RydWN0IGRy bV9mYl9oZWxwZXJfY29ubmVjdG9yICoqY29ubmVjdG9yX2luZm87CiAJY29uc3Qgc3RydWN0IGRy bV9mYl9oZWxwZXJfZnVuY3MgKmZ1bmNzOwogCXN0cnVjdCBmYl9pbmZvICpmYmRldjsKIAl1MzIg cHNldWRvX3BhbGV0dGVbMTddOwotLSAKMi4xNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK