From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH v4 37/38] drm: Improve drm_mm search (and fix topdown allocation) with rbtrees Date: Thu, 22 Dec 2016 08:36:40 +0000 Message-ID: <20161222083641.2691-38-chris@chris-wilson.co.uk> References: <20161222083641.2691-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161222083641.2691-1-chris@chris-wilson.co.uk> 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 List-Id: dri-devel@lists.freedesktop.org VGhlIGRybV9tbSByYW5nZSBtYW5hZ2VyIGNsYWltZWQgdG8gc3VwcG9ydCB0b3AtZG93biBpbnNl cnRpb24sIGJ1dCBpdAp3YXMgbmVpdGhlciBzZWFyY2hpbmcgZm9yIHRoZSB0b3AtbW9zdCBob2xl IHRoYXQgY291bGQgZml0IHRoZQphbGxvY2F0aW9uIHJlcXVlc3Qgbm9yIGZpdHRpbmcgdGhlIHJl cXVlc3QgdG8gdGhlIGhvbGUgY29ycmVjdGx5LgoKSW4gb3JkZXIgdG8gc2VhcmNoIHRoZSByYW5n ZSBlZmZpY2llbnRseSwgd2UgY3JlYXRlIGEgc2Vjb25kYXJ5IGluZGV4CmZvciB0aGUgaG9sZXMg dXNpbmcgZWl0aGVyIHRoZWlyIHNpemUgb3IgdGhlaXIgYWRkcmVzcy4gVGhpcyBpbmRleAphbGxv d3MgdXMgdG8gZmluZCB0aGUgc21hbGxlc3QgaG9sZSBvciB0aGUgaG9sZSBhdCB0aGUgYm90dG9t IG9yIHRvcCBvZgp0aGUgcmFuZ2UgZWZmaWNpZW50bHksIHdoaWxzdCBrZWVwaW5nIHRoZSBob2xl IHN0YWNrIHRvIHJhcGlkbHkgc2VydmljZQpldmljdGlvbnMuCgp2MjogU2VhcmNoIGZvciBob2xl cyBib3RoIGhpZ2ggYW5kIGxvdy4gUmVuYW1lIGZsYWdzIHRvIG1vZGUuCnYzOiBEaXNjb3ZlciBy Yl9lbnRyeV9zYWZlKCkgYW5kIHVzZSBpdCEKClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpSZXZpZXdlZC1ieTogSm9vbmFzIExhaHRpbmVuIDxq b29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9ndHRfbWdyLmMgIHwgIDE2ICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdnJhbV9tZ3IuYyB8ICAyMCArLQogZHJpdmVycy9ncHUvZHJtL2FybWFkYS9h cm1hZGFfZ2VtLmMgICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYyAg ICAgICAgICAgICAgICAgICAgIHwgNTExICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogZHJp dmVycy9ncHUvZHJtL2RybV92bWFfbWFuYWdlci5jICAgICAgICAgICAgfCAgIDMgKy0KIGRyaXZl cnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfbW11LmMgICAgICAgIHwgICA4ICstCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICB8ICAxMCArLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZXZpY3QuYyAgICAgICAgfCAgIDkgKy0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyAgIHwgICA1ICstCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9ndHQuYyAgICAgICAgICB8ICAzOSArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMgICAgICAgfCAgIDYgKy0KIGRyaXZlcnMvZ3B1L2RybS9t c20vbXNtX2dlbS5jICAgICAgICAgICAgICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9nZW1fdm1hLmMgICAgICAgICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL3NlbGZ0 ZXN0cy90ZXN0LWRybV9tbS5jICAgICAgfCAgNTggKystCiBkcml2ZXJzL2dwdS9kcm0vc2lzL3Np c19tbS5jICAgICAgICAgICAgICAgICB8ICAgNiArLQogZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dl bS5jICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2Jv X21hbmFnZXIuYyAgICAgICAgIHwgIDE4ICstCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRj LmMgICAgICAgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaHZzLmMg ICAgICAgICAgICAgICAgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMg ICAgICAgICAgICAgIHwgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9tbS5jICAgICAg ICAgICAgICAgICB8ICAgNCArLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVm LmMgICAgICAgfCAgMTAgKy0KIGluY2x1ZGUvZHJtL2RybV9tbS5oICAgICAgICAgICAgICAgICAg ICAgICAgIHwgMTM1ICsrKy0tLS0KIDIzIGZpbGVzIGNoYW5nZWQsIDQzNCBpbnNlcnRpb25zKCsp LCA0NDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2d0dF9tZ3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9n dHRfbWdyLmMKaW5kZXggMDBmNDZiMGUwNzZkLi5kODQxZmNiMmU3MDkgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ndHRfbWdyLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2d0dF9tZ3IuYwpAQCAtOTcsOCArOTcsNyBAQCBpbnQg YW1kZ3B1X2d0dF9tZ3JfYWxsb2Moc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCiB7 CiAJc3RydWN0IGFtZGdwdV9ndHRfbWdyICptZ3IgPSBtYW4tPnByaXY7CiAJc3RydWN0IGRybV9t bV9ub2RlICpub2RlID0gbWVtLT5tbV9ub2RlOwotCWVudW0gZHJtX21tX3NlYXJjaF9mbGFncyBz ZmxhZ3MgPSBEUk1fTU1fU0VBUkNIX0JFU1Q7Ci0JZW51bSBkcm1fbW1fYWxsb2NhdG9yX2ZsYWdz IGFmbGFncyA9IERSTV9NTV9DUkVBVEVfREVGQVVMVDsKKwllbnVtIGRybV9tbV9pbnNlcnRfbW9k ZSBtb2RlOwogCXVuc2lnbmVkIGxvbmcgZnBmbiwgbHBmbjsKIAlpbnQgcjsKIApAQCAtMTE1LDE1 ICsxMTQsMTQgQEAgaW50IGFtZGdwdV9ndHRfbWdyX2FsbG9jKHN0cnVjdCB0dG1fbWVtX3R5cGVf bWFuYWdlciAqbWFuLAogCWVsc2UKIAkJbHBmbiA9IG1hbi0+c2l6ZTsKIAotCWlmIChwbGFjZSAm JiBwbGFjZS0+ZmxhZ3MgJiBUVE1fUExfRkxBR19UT1BET1dOKSB7Ci0JCXNmbGFncyA9IERSTV9N TV9TRUFSQ0hfQkVMT1c7Ci0JCWFmbGFncyA9IERSTV9NTV9DUkVBVEVfVE9QOwotCX0KKwltb2Rl ID0gRFJNX01NX0lOU0VSVF9CRVNUOworCWlmIChwbGFjZSAmJiBwbGFjZS0+bW9kZSAmIFRUTV9Q TF9GTEFHX1RPUERPV04pCisJCW1vZGUgPSBEUk1fTU1fSU5TRVJUX0hJR0g7CiAKIAlzcGluX2xv Y2soJm1nci0+bG9jayk7Ci0JciA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmlj KCZtZ3ItPm1tLCBub2RlLCBtZW0tPm51bV9wYWdlcywKLQkJCQkJCW1lbS0+cGFnZV9hbGlnbm1l bnQsIDAsCi0JCQkJCQlmcGZuLCBscGZuLCBzZmxhZ3MsIGFmbGFncyk7CisJciA9IGRybV9tbV9p bnNlcnRfbm9kZV9pbl9yYW5nZSgmbWdyLT5tbSwgbm9kZSwKKwkJCQkJbWVtLT5udW1fcGFnZXMs IG1lbS0+cGFnZV9hbGlnbm1lbnQsIDAsCisJCQkJCWZwZm4sIGxwZm4sIG1vZGUpOwogCXNwaW5f dW5sb2NrKCZtZ3ItPmxvY2spOwogCiAJaWYgKCFyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdnJhbV9tZ3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV92cmFtX21nci5jCmluZGV4IGQ3MTAyMjZhMGZmZi4uNWYxMDZhZDgxNWNl IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdnJhbV9tZ3Iu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdnJhbV9tZ3IuYwpAQCAt OTcsOCArOTcsNyBAQCBzdGF0aWMgaW50IGFtZGdwdV92cmFtX21ncl9uZXcoc3RydWN0IHR0bV9t ZW1fdHlwZV9tYW5hZ2VyICptYW4sCiAJc3RydWN0IGFtZGdwdV92cmFtX21nciAqbWdyID0gbWFu LT5wcml2OwogCXN0cnVjdCBkcm1fbW0gKm1tID0gJm1nci0+bW07CiAJc3RydWN0IGRybV9tbV9u b2RlICpub2RlczsKLQllbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3Mgc2ZsYWdzID0gRFJNX01NX1NF QVJDSF9ERUZBVUxUOwotCWVudW0gZHJtX21tX2FsbG9jYXRvcl9mbGFncyBhZmxhZ3MgPSBEUk1f TU1fQ1JFQVRFX0RFRkFVTFQ7CisJZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZTsKIAl1bnNp Z25lZCBsb25nIGxwZm4sIG51bV9ub2RlcywgcGFnZXNfcGVyX25vZGUsIHBhZ2VzX2xlZnQ7CiAJ dW5zaWduZWQgaTsKIAlpbnQgcjsKQEAgLTEyMSwxMCArMTIwLDkgQEAgc3RhdGljIGludCBhbWRn cHVfdnJhbV9tZ3JfbmV3KHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAogCWlmICgh bm9kZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHBsYWNlLT5mbGFncyAmIFRUTV9QTF9G TEFHX1RPUERPV04pIHsKLQkJc2ZsYWdzID0gRFJNX01NX1NFQVJDSF9CRUxPVzsKLQkJYWZsYWdz ID0gRFJNX01NX0NSRUFURV9UT1A7Ci0JfQorCW1vZGUgPSBEUk1fTU1fSU5TRVJUX0JFU1Q7CisJ aWYgKHBsYWNlLT5mbGFncyAmIFRUTV9QTF9GTEFHX1RPUERPV04pCisJCW1vZGUgPSBEUk1fTU1f SU5TRVJUX0hJR0g7CiAKIAlwYWdlc19sZWZ0ID0gbWVtLT5udW1fcGFnZXM7CiAKQEAgLTEzNSwx MyArMTMzLDExIEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZyYW1fbWdyX25ldyhzdHJ1Y3QgdHRtX21l bV90eXBlX21hbmFnZXIgKm1hbiwKIAogCQlpZiAocGFnZXMgPT0gcGFnZXNfcGVyX25vZGUpCiAJ CQlhbGlnbm1lbnQgPSBwYWdlc19wZXJfbm9kZTsKLQkJZWxzZQotCQkJc2ZsYWdzIHw9IERSTV9N TV9TRUFSQ0hfQkVTVDsKIAotCQlyID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVy aWMobW0sICZub2Rlc1tpXSwgcGFnZXMsCi0JCQkJCQkJYWxpZ25tZW50LCAwLAotCQkJCQkJCXBs YWNlLT5mcGZuLCBscGZuLAotCQkJCQkJCXNmbGFncywgYWZsYWdzKTsKKwkJciA9IGRybV9tbV9p bnNlcnRfbm9kZV9pbl9yYW5nZShtbSwgJm5vZGVzW2ldLAorCQkJCQkJcGFnZXMsIGFsaWdubWVu dCwgMCwKKwkJCQkJCXBsYWNlLT5mcGZuLCBscGZuLAorCQkJCQkJbW9kZSk7CiAJCWlmICh1bmxp a2VseShyKSkKIAkJCWdvdG8gZXJyb3I7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h cm1hZGEvYXJtYWRhX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfZ2VtLmMK aW5kZXggNzY4MDg3ZGRiMDQ2Li42NWIwMjliYzg0YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hcm1hZGEvYXJtYWRhX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJt YWRhX2dlbS5jCkBAIC0xNDksOCArMTQ5LDggQEAgYXJtYWRhX2dlbV9saW5lYXJfYmFjayhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgYXJtYWRhX2dlbV9vYmplY3QgKm9iaikKIAkJCXJl dHVybiAtRU5PU1BDOwogCiAJCW11dGV4X2xvY2soJnByaXYtPmxpbmVhcl9sb2NrKTsKLQkJcmV0 ID0gZHJtX21tX2luc2VydF9ub2RlKCZwcml2LT5saW5lYXIsIG5vZGUsIHNpemUsIGFsaWduLAot CQkJCQkgRFJNX01NX1NFQVJDSF9ERUZBVUxUKTsKKwkJcmV0ID0gZHJtX21tX2luc2VydF9ub2Rl X2dlbmVyaWMoJnByaXYtPmxpbmVhciwgbm9kZSwKKwkJCQkJCSBzaXplLCBhbGlnbiwgMCwgMCk7 CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bGluZWFyX2xvY2spOwogCQlpZiAocmV0KSB7CiAJCQlr ZnJlZShub2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fbW0uYwppbmRleCA1OGE3ZTNiYmUxMzAuLjk2MGM5Y2Q3ZGMyMyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fbW0uYwpAQCAtOTIsMTQgKzkyLDYgQEAKICAqIHNvbWUgYmFzaWMgYWxsb2NhdG9yIGR1bXBl cnMgZm9yIGRlYnVnZ2luZy4KICAqLwogCi1zdGF0aWMgc3RydWN0IGRybV9tbV9ub2RlICpkcm1f bW1fc2VhcmNoX2ZyZWVfaW5fcmFuZ2VfZ2VuZXJpYyhjb25zdCBzdHJ1Y3QgZHJtX21tICptbSwK LQkJCQkJCXU2NCBzaXplLAotCQkJCQkJdTY0IGFsaWdubWVudCwKLQkJCQkJCXVuc2lnbmVkIGxv bmcgY29sb3IsCi0JCQkJCQl1NjQgc3RhcnQsCi0JCQkJCQl1NjQgZW5kLAotCQkJCQkJZW51bSBk cm1fbW1fc2VhcmNoX2ZsYWdzIGZsYWdzKTsKLQogI2lmZGVmIENPTkZJR19EUk1fREVCVUdfTU0K ICNpbmNsdWRlIDxsaW51eC9zdGFja2RlcG90Lmg+CiAKQEAgLTIyMSw2OSArMjEzLDQ3IEBAIHN0 YXRpYyB2b2lkIGRybV9tbV9pbnRlcnZhbF90cmVlX2FkZF9ub2RlKHN0cnVjdCBkcm1fbW1fbm9k ZSAqaG9sZV9ub2RlLAogCQkJICAgICZkcm1fbW1faW50ZXJ2YWxfdHJlZV9hdWdtZW50KTsKIH0K IAotc3RhdGljIHZvaWQgZHJtX21tX2luc2VydF9oZWxwZXIoc3RydWN0IGRybV9tbV9ub2RlICpo b2xlX25vZGUsCi0JCQkJIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKLQkJCQkgdTY0IHNpemUs IHU2NCBhbGlnbm1lbnQsCi0JCQkJIHVuc2lnbmVkIGxvbmcgY29sb3IsCi0JCQkJIHU2NCByYW5n ZV9zdGFydCwgdTY0IHJhbmdlX2VuZCwKLQkJCQkgZW51bSBkcm1fbW1fYWxsb2NhdG9yX2ZsYWdz IGZsYWdzKQorI2RlZmluZSBSQl9JTlNFUlQocm9vdCwgbWVtYmVyLCBleHByKSBkbyB7IFwKKwlz dHJ1Y3QgcmJfbm9kZSAqKmxpbmsgPSAmcm9vdC5yYl9ub2RlLCAqcmIgPSBOVUxMOyBcCisJdTY0 IHggPSBleHByKG5vZGUpOyBcCisJd2hpbGUgKCpsaW5rKSB7IFwKKwkJcmIgPSAqbGluazsgXAor CQlpZiAoeCA8IGV4cHIocmJfZW50cnkocmIsIHN0cnVjdCBkcm1fbW1fbm9kZSwgbWVtYmVyKSkp IFwKKwkJCWxpbmsgPSAmcmItPnJiX2xlZnQ7IFwKKwkJZWxzZSBcCisJCQlsaW5rID0gJnJiLT5y Yl9yaWdodDsgXAorCX0gXAorCXJiX2xpbmtfbm9kZSgmbm9kZS0+bWVtYmVyLCByYiwgbGluayk7 IFwKKwlyYl9pbnNlcnRfY29sb3IoJm5vZGUtPm1lbWJlciwgJnJvb3QpOyBcCit9IHdoaWxlICgw KQorCisjZGVmaW5lIEhPTEVfU0laRShOT0RFKSAoKE5PREUpLT5ob2xlX3NpemUpCisjZGVmaW5l IEhPTEVfQUREUihOT0RFKSAoX19kcm1fbW1faG9sZV9ub2RlX3N0YXJ0KE5PREUpKQorCitzdGF0 aWMgdm9pZCBhZGRfaG9sZShzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUpCiB7Ci0Jc3RydWN0IGRy bV9tbSAqbW0gPSBob2xlX25vZGUtPm1tOwotCXU2NCBob2xlX3N0YXJ0ID0gZHJtX21tX2hvbGVf bm9kZV9zdGFydChob2xlX25vZGUpOwotCXU2NCBob2xlX2VuZCA9IGRybV9tbV9ob2xlX25vZGVf ZW5kKGhvbGVfbm9kZSk7Ci0JdTY0IGFkal9zdGFydCA9IGhvbGVfc3RhcnQ7Ci0JdTY0IGFkal9l bmQgPSBob2xlX2VuZDsKLQotCURSTV9NTV9CVUdfT04oIWRybV9tbV9ob2xlX2ZvbGxvd3MoaG9s ZV9ub2RlKSB8fCBub2RlLT5hbGxvY2F0ZWQpOwotCi0JaWYgKG1tLT5jb2xvcl9hZGp1c3QpCi0J CW1tLT5jb2xvcl9hZGp1c3QoaG9sZV9ub2RlLCBjb2xvciwgJmFkal9zdGFydCwgJmFkal9lbmQp OwotCi0JYWRqX3N0YXJ0ID0gbWF4KGFkal9zdGFydCwgcmFuZ2Vfc3RhcnQpOwotCWFkal9lbmQg PSBtaW4oYWRqX2VuZCwgcmFuZ2VfZW5kKTsKLQotCWlmIChmbGFncyAmIERSTV9NTV9DUkVBVEVf VE9QKQotCQlhZGpfc3RhcnQgPSBhZGpfZW5kIC0gc2l6ZTsKLQotCWlmIChhbGlnbm1lbnQpIHsK LQkJdTY0IHJlbTsKLQotCQlkaXY2NF91NjRfcmVtKGFkal9zdGFydCwgYWxpZ25tZW50LCAmcmVt KTsKLQkJaWYgKHJlbSkgewotCQkJaWYgKGZsYWdzICYgRFJNX01NX0NSRUFURV9UT1ApCi0JCQkJ YWRqX3N0YXJ0IC09IHJlbTsKLQkJCWVsc2UKLQkJCQlhZGpfc3RhcnQgKz0gYWxpZ25tZW50IC0g cmVtOwotCQl9Ci0JfQotCi0JaWYgKGFkal9zdGFydCA9PSBob2xlX3N0YXJ0KSB7Ci0JCWhvbGVf bm9kZS0+aG9sZV9mb2xsb3dzID0gMDsKLQkJbGlzdF9kZWwoJmhvbGVfbm9kZS0+aG9sZV9zdGFj ayk7Ci0JfQorCXN0cnVjdCBkcm1fbW0gKm1tID0gbm9kZS0+bW07CiAKLQlub2RlLT5zdGFydCA9 IGFkal9zdGFydDsKLQlub2RlLT5zaXplID0gc2l6ZTsKLQlub2RlLT5tbSA9IG1tOwotCW5vZGUt PmNvbG9yID0gY29sb3I7Ci0Jbm9kZS0+YWxsb2NhdGVkID0gMTsKKwlub2RlLT5ob2xlX3NpemUg PQorCQlfX2RybV9tbV9ob2xlX25vZGVfZW5kKG5vZGUpIC0gX19kcm1fbW1faG9sZV9ub2RlX3N0 YXJ0KG5vZGUpOworCURSTV9NTV9CVUdfT04oIWRybV9tbV9ob2xlX2ZvbGxvd3Mobm9kZSkpOwog Ci0JbGlzdF9hZGQoJm5vZGUtPm5vZGVfbGlzdCwgJmhvbGVfbm9kZS0+bm9kZV9saXN0KTsKKwlS Ql9JTlNFUlQobW0tPmhvbGVzX3NpemUsIHJiX2hvbGVfc2l6ZSwgSE9MRV9TSVpFKTsKKwlSQl9J TlNFUlQobW0tPmhvbGVzX2FkZHIsIHJiX2hvbGVfYWRkciwgSE9MRV9BRERSKTsKIAotCWRybV9t bV9pbnRlcnZhbF90cmVlX2FkZF9ub2RlKGhvbGVfbm9kZSwgbm9kZSk7CisJbGlzdF9hZGQoJm5v ZGUtPmhvbGVfc3RhY2ssICZtbS0+aG9sZV9zdGFjayk7Cit9CiAKLQlEUk1fTU1fQlVHX09OKG5v ZGUtPnN0YXJ0IDwgcmFuZ2Vfc3RhcnQpOwotCURSTV9NTV9CVUdfT04obm9kZS0+c3RhcnQgPCBh ZGpfc3RhcnQpOwotCURSTV9NTV9CVUdfT04obm9kZS0+c3RhcnQgKyBub2RlLT5zaXplID4gYWRq X2VuZCk7Ci0JRFJNX01NX0JVR19PTihub2RlLT5zdGFydCArIG5vZGUtPnNpemUgPiByYW5nZV9l bmQpOworc3RhdGljIHZvaWQgcm1faG9sZShzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUpCit7CisJ RFJNX01NX0JVR19PTighZHJtX21tX2hvbGVfZm9sbG93cyhub2RlKSk7CiAKLQlub2RlLT5ob2xl X2ZvbGxvd3MgPSAwOwotCWlmIChfX2RybV9tbV9ob2xlX25vZGVfc3RhcnQobm9kZSkgPCBob2xl X2VuZCkgewotCQlsaXN0X2FkZCgmbm9kZS0+aG9sZV9zdGFjaywgJm1tLT5ob2xlX3N0YWNrKTsK LQkJbm9kZS0+aG9sZV9mb2xsb3dzID0gMTsKLQl9CisJbGlzdF9kZWwoJm5vZGUtPmhvbGVfc3Rh Y2spOworCXJiX2VyYXNlKCZub2RlLT5yYl9ob2xlX3NpemUsICZub2RlLT5tbS0+aG9sZXNfc2l6 ZSk7CisJcmJfZXJhc2UoJm5vZGUtPnJiX2hvbGVfYWRkciwgJm5vZGUtPm1tLT5ob2xlc19hZGRy KTsKKwlub2RlLT5ob2xlX3NpemUgPSAwOwogCi0Jc2F2ZV9zdGFjayhub2RlKTsKKwlEUk1fTU1f QlVHX09OKGRybV9tbV9ob2xlX2ZvbGxvd3Mobm9kZSkpOwogfQogCiAvKioKQEAgLTMxMyw3ICsy ODMsNyBAQCBpbnQgZHJtX21tX3Jlc2VydmVfbm9kZShzdHJ1Y3QgZHJtX21tICptbSwgc3RydWN0 IGRybV9tbV9ub2RlICpub2RlKQogCiAJLyogRmluZCB0aGUgcmVsZXZhbnQgaG9sZSB0byBhZGQg b3VyIG5vZGUgdG8gKi8KIAlob2xlID0gZHJtX21tX2ludGVydmFsX3RyZWVfaXRlcl9maXJzdCgm bW0tPmludGVydmFsX3RyZWUsCi0JCQkJCSAgICAgICBub2RlLT5zdGFydCwgfih1NjQpMCk7CisJ CQkJCSAgICAgICBub2RlLT5zdGFydCwgVTY0X01BWCk7CiAJaWYgKGhvbGUpIHsKIAkJaWYgKGhv bGUtPnN0YXJ0IDwgZW5kKQogCQkJcmV0dXJuIC1FTk9TUEM7CkBAIC0zMjEsMTIgKzI5MSwxMiBA QCBpbnQgZHJtX21tX3Jlc2VydmVfbm9kZShzdHJ1Y3QgZHJtX21tICptbSwgc3RydWN0IGRybV9t bV9ub2RlICpub2RlKQogCQlob2xlID0gbGlzdF9lbnRyeShkcm1fbW1fbm9kZXMobW0pLCB0eXBl b2YoKmhvbGUpLCBub2RlX2xpc3QpOwogCX0KIAotCWhvbGUgPSBsaXN0X2xhc3RfZW50cnkoJmhv bGUtPm5vZGVfbGlzdCwgdHlwZW9mKCpob2xlKSwgbm9kZV9saXN0KTsKKwlob2xlID0gbGlzdF9w cmV2X2VudHJ5KGhvbGUsIG5vZGVfbGlzdCk7CiAJaWYgKCFkcm1fbW1faG9sZV9mb2xsb3dzKGhv bGUpKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCWFkal9zdGFydCA9IGhvbGVfc3RhcnQgPSBfX2Ry bV9tbV9ob2xlX25vZGVfc3RhcnQoaG9sZSk7Ci0JYWRqX2VuZCA9IGhvbGVfZW5kID0gX19kcm1f bW1faG9sZV9ub2RlX2VuZChob2xlKTsKKwlhZGpfZW5kID0gaG9sZV9lbmQgPSBob2xlX3N0YXJ0 ICsgaG9sZS0+aG9sZV9zaXplOwogCiAJaWYgKG1tLT5jb2xvcl9hZGp1c3QpCiAJCW1tLT5jb2xv cl9hZGp1c3QoaG9sZSwgbm9kZS0+Y29sb3IsICZhZGpfc3RhcnQsICZhZGpfZW5kKTsKQEAgLTMz NSwzMSArMzA1LDEyOCBAQCBpbnQgZHJtX21tX3Jlc2VydmVfbm9kZShzdHJ1Y3QgZHJtX21tICpt bSwgc3RydWN0IGRybV9tbV9ub2RlICpub2RlKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCW5vZGUt Pm1tID0gbW07Ci0Jbm9kZS0+YWxsb2NhdGVkID0gMTsKIAogCWxpc3RfYWRkKCZub2RlLT5ub2Rl X2xpc3QsICZob2xlLT5ub2RlX2xpc3QpOwotCiAJZHJtX21tX2ludGVydmFsX3RyZWVfYWRkX25v ZGUoaG9sZSwgbm9kZSk7CisJbm9kZS0+YWxsb2NhdGVkID0gdHJ1ZTsKKwlub2RlLT5ob2xlX3Np emUgPSAwOworCisJcm1faG9sZShob2xlKTsKKwlpZiAobm9kZS0+c3RhcnQgPiBob2xlX3N0YXJ0 KQorCQlhZGRfaG9sZShob2xlKTsKKwlpZiAoZW5kIDwgaG9sZV9lbmQpCisJCWFkZF9ob2xlKG5v ZGUpOworCisJc2F2ZV9zdGFjayhub2RlKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wo ZHJtX21tX3Jlc2VydmVfbm9kZSk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9tbV9ub2Rl ICpyYl9ob2xlX3NpemVfdG9fbm9kZShzdHJ1Y3QgcmJfbm9kZSAqcmIpCit7CisJcmV0dXJuIHJi X2VudHJ5X3NhZmUocmIsIHN0cnVjdCBkcm1fbW1fbm9kZSwgcmJfaG9sZV9zaXplKTsKK30KKwor c3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX21tX25vZGUgKnJiX2hvbGVfYWRkcl90b19ub2RlKHN0 cnVjdCByYl9ub2RlICpyYikKK3sKKwlyZXR1cm4gcmJfZW50cnlfc2FmZShyYiwgc3RydWN0IGRy bV9tbV9ub2RlLCByYl9ob2xlX2FkZHIpOworfQogCi0JaWYgKG5vZGUtPnN0YXJ0ID09IGhvbGVf c3RhcnQpIHsKLQkJaG9sZS0+aG9sZV9mb2xsb3dzID0gMDsKLQkJbGlzdF9kZWwoJmhvbGUtPmhv bGVfc3RhY2spOworc3RhdGljIGlubGluZSB1NjQgcmJfaG9sZV9zaXplKHN0cnVjdCByYl9ub2Rl ICpyYikKK3sKKwlyZXR1cm4gcmJfZW50cnkocmIsIHN0cnVjdCBkcm1fbW1fbm9kZSwgcmJfaG9s ZV9zaXplKS0+aG9sZV9zaXplOworfQorCitzdGF0aWMgc3RydWN0IGRybV9tbV9ub2RlICpiZXN0 X2hvbGUoc3RydWN0IGRybV9tbSAqbW0sIHU2NCBzaXplKQoreworCXN0cnVjdCByYl9ub2RlICpi ZXN0ID0gTlVMTDsKKwlzdHJ1Y3QgcmJfbm9kZSAqKmxpbmsgPSAmbW0tPmhvbGVzX3NpemUucmJf bm9kZTsKKworCXdoaWxlICgqbGluaykgeworCQlzdHJ1Y3QgcmJfbm9kZSAqcmIgPSAqbGluazsK KwkJaWYgKHNpemUgPD0gcmJfaG9sZV9zaXplKHJiKSkgeworCQkJbGluayA9ICZyYi0+cmJfbGVm dDsKKwkJCWJlc3QgPSByYjsKKwkJfSBlbHNlIHsKKwkJCWxpbmsgPSAmcmItPnJiX3JpZ2h0Owor CQl9CiAJfQogCi0Jbm9kZS0+aG9sZV9mb2xsb3dzID0gMDsKLQlpZiAoZW5kICE9IGhvbGVfZW5k KSB7Ci0JCWxpc3RfYWRkKCZub2RlLT5ob2xlX3N0YWNrLCAmbW0tPmhvbGVfc3RhY2spOwotCQlu b2RlLT5ob2xlX2ZvbGxvd3MgPSAxOworCXJldHVybiByYl9ob2xlX3NpemVfdG9fbm9kZShiZXN0 KTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fbW1fbm9kZSAqZmluZF9ob2xlKHN0cnVjdCBkcm1f bW0gKm1tLCB1NjQgYWRkcikKK3sKKwlzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUgPSBOVUxMOwor CXN0cnVjdCByYl9ub2RlICoqbGluayA9ICZtbS0+aG9sZXNfYWRkci5yYl9ub2RlOworCisJd2hp bGUgKCpsaW5rKSB7CisJCXU2NCBob2xlX3N0YXJ0OworCisJCW5vZGUgPSByYl9ob2xlX2FkZHJf dG9fbm9kZSgqbGluayk7CisJCWhvbGVfc3RhcnQgPSBfX2RybV9tbV9ob2xlX25vZGVfc3RhcnQo bm9kZSk7CisKKwkJaWYgKGFkZHIgPCBob2xlX3N0YXJ0KQorCQkJbGluayA9ICZub2RlLT5yYl9o b2xlX2FkZHIucmJfbGVmdDsKKwkJZWxzZSBpZiAoYWRkciA+IGhvbGVfc3RhcnQgKyBub2RlLT5o b2xlX3NpemUpCisJCQlsaW5rID0gJm5vZGUtPnJiX2hvbGVfYWRkci5yYl9yaWdodDsKKwkJZWxz ZQorCQkJYnJlYWs7CiAJfQogCi0Jc2F2ZV9zdGFjayhub2RlKTsKKwlyZXR1cm4gbm9kZTsKK30K IAotCXJldHVybiAwOworc3RhdGljIHN0cnVjdCBkcm1fbW1fbm9kZSAqCitmaXJzdF9ob2xlKHN0 cnVjdCBkcm1fbW0gKm1tLAorCSAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHNpemUsCisJICAg ZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZSkKK3sKKwlpZiAoUkJfRU1QVFlfUk9PVCgmbW0t PmhvbGVzX3NpemUpKQorCQlyZXR1cm4gTlVMTDsKKworCXN3aXRjaCAobW9kZSkgeworCWRlZmF1 bHQ6CisJY2FzZSBEUk1fTU1fSU5TRVJUX0JFU1Q6CisJCXJldHVybiBiZXN0X2hvbGUobW0sIHNp emUpOworCisJY2FzZSBEUk1fTU1fSU5TRVJUX0xPVzoKKwkJcmV0dXJuIGZpbmRfaG9sZShtbSwg c3RhcnQpOworCisJY2FzZSBEUk1fTU1fSU5TRVJUX0hJR0g6CisJCXJldHVybiBmaW5kX2hvbGUo bW0sIGVuZCk7CisKKwljYXNlIERSTV9NTV9JTlNFUlRfRVZJQ1Q6CisJCXJldHVybiBsaXN0X2Zp cnN0X2VudHJ5X29yX251bGwoJm1tLT5ob2xlX3N0YWNrLAorCQkJCQkJc3RydWN0IGRybV9tbV9u b2RlLAorCQkJCQkJaG9sZV9zdGFjayk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGRybV9tbV9u b2RlICoKK25leHRfaG9sZShzdHJ1Y3QgZHJtX21tICptbSwKKwkgIHN0cnVjdCBkcm1fbW1fbm9k ZSAqbm9kZSwKKwkgIGVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGUpCit7CisJc3dpdGNoICht b2RlKSB7CisJZGVmYXVsdDoKKwljYXNlIERSTV9NTV9JTlNFUlRfQkVTVDoKKwkJcmV0dXJuIHJi X2hvbGVfc2l6ZV90b19ub2RlKHJiX25leHQoJm5vZGUtPnJiX2hvbGVfc2l6ZSkpOworCisJY2Fz ZSBEUk1fTU1fSU5TRVJUX0xPVzoKKwkJcmV0dXJuIHJiX2hvbGVfYWRkcl90b19ub2RlKHJiX25l eHQoJm5vZGUtPnJiX2hvbGVfYWRkcikpOworCisJY2FzZSBEUk1fTU1fSU5TRVJUX0hJR0g6CisJ CXJldHVybiByYl9ob2xlX2FkZHJfdG9fbm9kZShyYl9wcmV2KCZub2RlLT5yYl9ob2xlX2FkZHIp KTsKKworCWNhc2UgRFJNX01NX0lOU0VSVF9FVklDVDoKKwkJbm9kZSA9IGxpc3RfbmV4dF9lbnRy eShub2RlLCBob2xlX3N0YWNrKTsKKwkJcmV0dXJuICZub2RlLT5ob2xlX3N0YWNrID09ICZtbS0+ aG9sZV9zdGFjayA/IE5VTEwgOiBub2RlOworCX0KIH0KLUVYUE9SVF9TWU1CT0woZHJtX21tX3Jl c2VydmVfbm9kZSk7CiAKIC8qKgotICogZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVy aWMgLSByYW5nZWQgc2VhcmNoIGZvciBzcGFjZSBhbmQgaW5zZXJ0IEBub2RlCisgKiBkcm1fbW1f aW5zZXJ0X25vZGVfaW5fcmFuZ2UgLSByYW5nZWQgc2VhcmNoIGZvciBzcGFjZSBhbmQgaW5zZXJ0 IEBub2RlCiAgKiBAbW06IGRybV9tbSB0byBhbGxvY2F0ZSBmcm9tCiAgKiBAbm9kZTogcHJlYWxs b2NhdGUgbm9kZSB0byBpbnNlcnQKICAqIEBzaXplOiBzaXplIG9mIHRoZSBhbGxvY2F0aW9uCkBA IC0zNjcsMzggKzQzNCwxMDQgQEAgRVhQT1JUX1NZTUJPTChkcm1fbW1fcmVzZXJ2ZV9ub2RlKTsK ICAqIEBjb2xvcjogb3BhcXVlIHRhZyB2YWx1ZSB0byB1c2UgZm9yIHRoaXMgbm9kZQogICogQHN0 YXJ0OiBzdGFydCBvZiB0aGUgYWxsb3dlZCByYW5nZSBmb3IgdGhpcyBub2RlCiAgKiBAZW5kOiBl bmQgb2YgdGhlIGFsbG93ZWQgcmFuZ2UgZm9yIHRoaXMgbm9kZQotICogQHNmbGFnczogZmxhZ3Mg dG8gZmluZS10dW5lIHRoZSBhbGxvY2F0aW9uIHNlYXJjaAotICogQGFmbGFnczogZmxhZ3MgdG8g ZmluZS10dW5lIHRoZSBhbGxvY2F0aW9uIGJlaGF2aW9yCisgKiBAbW9kZTogZmluZS10dW5lIHRo ZSBhbGxvY2F0aW9uIHNlYXJjaCBhbmQgcGxhY2VtZW50CiAgKgogICogVGhlIHByZWFsbG9jYXRl ZCBub2RlIG11c3QgYmUgY2xlYXJlZCB0byAwLgogICoKICAqIFJldHVybnM6CiAgKiAwIG9uIHN1 Y2Nlc3MsIC1FTk9TUEMgaWYgdGhlcmUncyBubyBzdWl0YWJsZSBob2xlLgogICovCi1pbnQgZHJt X21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMoc3RydWN0IGRybV9tbSAqbW0sIHN0cnVj dCBkcm1fbW1fbm9kZSAqbm9kZSwKLQkJCQkJdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsCi0JCQkJ CXVuc2lnbmVkIGxvbmcgY29sb3IsCi0JCQkJCXU2NCBzdGFydCwgdTY0IGVuZCwKLQkJCQkJZW51 bSBkcm1fbW1fc2VhcmNoX2ZsYWdzIHNmbGFncywKLQkJCQkJZW51bSBkcm1fbW1fYWxsb2NhdG9y X2ZsYWdzIGFmbGFncykKK2ludCBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2Uoc3RydWN0IGRy bV9tbSAqIGNvbnN0IG1tLAorCQkJCXN0cnVjdCBkcm1fbW1fbm9kZSAqIGNvbnN0IG5vZGUsCisJ CQkJdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQsCisJCQkJdW5zaWduZWQgbG9uZyBjb2xvciwKKwkJ CQl1NjQgcmFuZ2Vfc3RhcnQsIHU2NCByYW5nZV9lbmQsCisJCQkJZW51bSBkcm1fbW1faW5zZXJ0 X21vZGUgbW9kZSkKIHsKLQlzdHJ1Y3QgZHJtX21tX25vZGUgKmhvbGVfbm9kZTsKKwlzdHJ1Y3Qg ZHJtX21tX25vZGUgKmhvbGU7CisJdTY0IHJlbWFpbmRlcl9tYXNrOwogCi0JaWYgKFdBUk5fT04o c2l6ZSA9PSAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJRFJNX01NX0JVR19PTihyYW5nZV9zdGFy dCA+PSByYW5nZV9lbmQpOwogCi0JaG9sZV9ub2RlID0gZHJtX21tX3NlYXJjaF9mcmVlX2luX3Jh bmdlX2dlbmVyaWMobW0sCi0JCQkJCQkJc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwKLQkJCQkJCQlz dGFydCwgZW5kLCBzZmxhZ3MpOwotCWlmICghaG9sZV9ub2RlKQorCWlmICh1bmxpa2VseShzaXpl ID09IDAgfHwgcmFuZ2VfZW5kIC0gcmFuZ2Vfc3RhcnQgPCBzaXplKSkKIAkJcmV0dXJuIC1FTk9T UEM7CiAKLQlkcm1fbW1faW5zZXJ0X2hlbHBlcihob2xlX25vZGUsIG5vZGUsCi0JCQkgICAgIHNp emUsIGFsaWdubWVudCwgY29sb3IsCi0JCQkgICAgIHN0YXJ0LCBlbmQsIGFmbGFncyk7Ci0JcmV0 dXJuIDA7CisJaWYgKGFsaWdubWVudCA8PSAxKQorCQlhbGlnbm1lbnQgPSAwOworCisJcmVtYWlu ZGVyX21hc2sgPSBpc19wb3dlcl9vZl8yKGFsaWdubWVudCkgPyBhbGlnbm1lbnQgLSAxIDogMDsK Kwlmb3IgKGhvbGUgPSBmaXJzdF9ob2xlKG1tLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kLCBzaXpl LCBtb2RlKTsgaG9sZTsKKwkgICAgIGhvbGUgPSBuZXh0X2hvbGUobW0sIGhvbGUsIG1vZGUpKSB7 CisJCXU2NCBob2xlX3N0YXJ0ID0gX19kcm1fbW1faG9sZV9ub2RlX3N0YXJ0KGhvbGUpOworCQl1 NjQgaG9sZV9lbmQgPSBob2xlX3N0YXJ0ICsgaG9sZS0+aG9sZV9zaXplOworCQl1NjQgYWRqX3N0 YXJ0LCBhZGpfZW5kOworCQl1NjQgY29sX3N0YXJ0LCBjb2xfZW5kOworCisJCWlmIChtb2RlID09 IERSTV9NTV9JTlNFUlRfTE9XICYmIGhvbGVfc3RhcnQgPj0gcmFuZ2VfZW5kKQorCQkJYnJlYWs7 CisKKwkJaWYgKG1vZGUgPT0gRFJNX01NX0lOU0VSVF9ISUdIICYmIGhvbGVfZW5kIDw9IHJhbmdl X3N0YXJ0KQorCQkJYnJlYWs7CisKKwkJY29sX3N0YXJ0ID0gaG9sZV9zdGFydDsKKwkJY29sX2Vu ZCA9IGhvbGVfZW5kOworCQlpZiAobW0tPmNvbG9yX2FkanVzdCkKKwkJCW1tLT5jb2xvcl9hZGp1 c3QoaG9sZSwgY29sb3IsICZjb2xfc3RhcnQsICZjb2xfZW5kKTsKKworCQlhZGpfc3RhcnQgPSBt YXgoY29sX3N0YXJ0LCByYW5nZV9zdGFydCk7CisJCWFkal9lbmQgPSBtaW4oY29sX2VuZCwgcmFu Z2VfZW5kKTsKKworCQlpZiAoYWRqX2VuZCA8PSBhZGpfc3RhcnQgfHwgYWRqX2VuZCAtIGFkal9z dGFydCA8IHNpemUpCisJCQljb250aW51ZTsKKworCQlpZiAobW9kZSA9PSBEUk1fTU1fSU5TRVJU X0hJR0gpCisJCQlhZGpfc3RhcnQgPSBhZGpfZW5kIC0gc2l6ZTsKKworCQlpZiAoYWxpZ25tZW50 KSB7CisJCQl1NjQgcmVtOworCisJCQlpZiAobGlrZWx5KHJlbWFpbmRlcl9tYXNrKSkKKwkJCQly ZW0gPSBhZGpfc3RhcnQgJiByZW1haW5kZXJfbWFzazsKKwkJCWVsc2UKKwkJCQlkaXY2NF91NjRf cmVtKGFkal9zdGFydCwgYWxpZ25tZW50LCAmcmVtKTsKKwkJCWlmIChyZW0pIHsKKwkJCQlhZGpf c3RhcnQgLT0gcmVtOworCQkJCWlmIChtb2RlICE9IERSTV9NTV9JTlNFUlRfSElHSCkKKwkJCQkJ YWRqX3N0YXJ0ICs9IGFsaWdubWVudDsKKworCQkJCWlmIChhZGpfc3RhcnQgPCBtYXgoY29sX3N0 YXJ0LCByYW5nZV9zdGFydCkgfHwKKwkJCQkgICAgbWluKGNvbF9lbmQsIHJhbmdlX2VuZCkgLSBh ZGpfc3RhcnQgPCBzaXplKQorCQkJCQljb250aW51ZTsKKworCQkJCWlmIChhZGpfZW5kIDw9IGFk al9zdGFydCB8fAorCQkJCSAgICBhZGpfZW5kIC0gYWRqX3N0YXJ0IDwgc2l6ZSkKKwkJCQkJY29u dGludWU7CisJCQl9CisJCX0KKworCQlub2RlLT5tbSA9IG1tOworCQlub2RlLT5zaXplID0gc2l6 ZTsKKwkJbm9kZS0+c3RhcnQgPSBhZGpfc3RhcnQ7CisJCW5vZGUtPmNvbG9yID0gY29sb3I7CisJ CW5vZGUtPmhvbGVfc2l6ZSA9IDA7CisKKwkJbGlzdF9hZGQoJm5vZGUtPm5vZGVfbGlzdCwgJmhv bGUtPm5vZGVfbGlzdCk7CisJCWRybV9tbV9pbnRlcnZhbF90cmVlX2FkZF9ub2RlKGhvbGUsIG5v ZGUpOworCQlub2RlLT5hbGxvY2F0ZWQgPSB0cnVlOworCisJCXJtX2hvbGUoaG9sZSk7CisJCWlm IChhZGpfc3RhcnQgPiBob2xlX3N0YXJ0KQorCQkJYWRkX2hvbGUoaG9sZSk7CisJCWlmIChhZGpf c3RhcnQgKyBzaXplIDwgaG9sZV9lbmQpCisJCQlhZGRfaG9sZShub2RlKTsKKworCQlzYXZlX3N0 YWNrKG5vZGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVOT1NQQzsKIH0KLUVYUE9S VF9TWU1CT0woZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMpOworRVhQT1JUX1NZ TUJPTChkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UpOwogCiAvKioKICAqIGRybV9tbV9yZW1v dmVfbm9kZSAtIFJlbW92ZSBhIG1lbW9yeSBub2RlIGZyb20gdGhlIGFsbG9jYXRvci4KQEAgLTQx Niw5MiArNTQ5LDIwIEBAIHZvaWQgZHJtX21tX3JlbW92ZV9ub2RlKHN0cnVjdCBkcm1fbW1fbm9k ZSAqbm9kZSkKIAlEUk1fTU1fQlVHX09OKCFub2RlLT5hbGxvY2F0ZWQpOwogCURSTV9NTV9CVUdf T04obm9kZS0+c2Nhbm5lZF9ibG9jayk7CiAKLQlwcmV2X25vZGUgPQotCSAgICBsaXN0X2VudHJ5 KG5vZGUtPm5vZGVfbGlzdC5wcmV2LCBzdHJ1Y3QgZHJtX21tX25vZGUsIG5vZGVfbGlzdCk7Ci0K LQlpZiAoZHJtX21tX2hvbGVfZm9sbG93cyhub2RlKSkgewotCQlEUk1fTU1fQlVHX09OKF9fZHJt X21tX2hvbGVfbm9kZV9zdGFydChub2RlKSA9PQotCQkJICAgICAgX19kcm1fbW1faG9sZV9ub2Rl X2VuZChub2RlKSk7Ci0JCWxpc3RfZGVsKCZub2RlLT5ob2xlX3N0YWNrKTsKLQl9IGVsc2Ugewot CQlEUk1fTU1fQlVHX09OKF9fZHJtX21tX2hvbGVfbm9kZV9zdGFydChub2RlKSAhPQotCQkJICAg ICAgX19kcm1fbW1faG9sZV9ub2RlX2VuZChub2RlKSk7Ci0JfQorCXByZXZfbm9kZSA9IGxpc3Rf cHJldl9lbnRyeShub2RlLCBub2RlX2xpc3QpOwogCi0JaWYgKCFkcm1fbW1faG9sZV9mb2xsb3dz KHByZXZfbm9kZSkpIHsKLQkJcHJldl9ub2RlLT5ob2xlX2ZvbGxvd3MgPSAxOwotCQlsaXN0X2Fk ZCgmcHJldl9ub2RlLT5ob2xlX3N0YWNrLCAmbW0tPmhvbGVfc3RhY2spOwotCX0gZWxzZQotCQls aXN0X21vdmUoJnByZXZfbm9kZS0+aG9sZV9zdGFjaywgJm1tLT5ob2xlX3N0YWNrKTsKKwlpZiAo ZHJtX21tX2hvbGVfZm9sbG93cyhub2RlKSkKKwkJcm1faG9sZShub2RlKTsKIAogCWRybV9tbV9p bnRlcnZhbF90cmVlX3JlbW92ZShub2RlLCAmbW0tPmludGVydmFsX3RyZWUpOwogCWxpc3RfZGVs KCZub2RlLT5ub2RlX2xpc3QpOwotCW5vZGUtPmFsbG9jYXRlZCA9IDA7Ci19Ci1FWFBPUlRfU1lN Qk9MKGRybV9tbV9yZW1vdmVfbm9kZSk7Ci0KLXN0YXRpYyBpbnQgY2hlY2tfZnJlZV9ob2xlKHU2 NCBzdGFydCwgdTY0IGVuZCwgdTY0IHNpemUsIHU2NCBhbGlnbm1lbnQpCi17Ci0JaWYgKGVuZCAt IHN0YXJ0IDwgc2l6ZSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoYWxpZ25tZW50KSB7Ci0JCXU2NCBy ZW07Ci0KLQkJZGl2NjRfdTY0X3JlbShzdGFydCwgYWxpZ25tZW50LCAmcmVtKTsKLQkJaWYgKHJl bSkKLQkJCXN0YXJ0ICs9IGFsaWdubWVudCAtIHJlbTsKLQl9Ci0KLQlyZXR1cm4gZW5kID49IHN0 YXJ0ICsgc2l6ZTsKLX0KLQotc3RhdGljIHN0cnVjdCBkcm1fbW1fbm9kZSAqZHJtX21tX3NlYXJj aF9mcmVlX2luX3JhbmdlX2dlbmVyaWMoY29uc3Qgc3RydWN0IGRybV9tbSAqbW0sCi0JCQkJCQkJ dTY0IHNpemUsCi0JCQkJCQkJdTY0IGFsaWdubWVudCwKLQkJCQkJCQl1bnNpZ25lZCBsb25nIGNv bG9yLAotCQkJCQkJCXU2NCBzdGFydCwKLQkJCQkJCQl1NjQgZW5kLAotCQkJCQkJCWVudW0gZHJt X21tX3NlYXJjaF9mbGFncyBmbGFncykKLXsKLQlzdHJ1Y3QgZHJtX21tX25vZGUgKmVudHJ5Owot CXN0cnVjdCBkcm1fbW1fbm9kZSAqYmVzdDsKLQl1NjQgYWRqX3N0YXJ0OwotCXU2NCBhZGpfZW5k OwotCXU2NCBiZXN0X3NpemU7Ci0KLQlEUk1fTU1fQlVHX09OKG1tLT5zY2FuX2FjdGl2ZSk7Ci0K LQliZXN0ID0gTlVMTDsKLQliZXN0X3NpemUgPSB+MFVMOwotCi0JX19kcm1fbW1fZm9yX2VhY2hf aG9sZShlbnRyeSwgbW0sIGFkal9zdGFydCwgYWRqX2VuZCwKLQkJCSAgICAgICBmbGFncyAmIERS TV9NTV9TRUFSQ0hfQkVMT1cpIHsKLQkJdTY0IGhvbGVfc2l6ZSA9IGFkal9lbmQgLSBhZGpfc3Rh cnQ7Ci0KLQkJaWYgKG1tLT5jb2xvcl9hZGp1c3QpIHsKLQkJCW1tLT5jb2xvcl9hZGp1c3QoZW50 cnksIGNvbG9yLCAmYWRqX3N0YXJ0LCAmYWRqX2VuZCk7Ci0JCQlpZiAoYWRqX2VuZCA8PSBhZGpf c3RhcnQpCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQlhZGpfc3RhcnQgPSBtYXgoYWRqX3N0YXJ0 LCBzdGFydCk7Ci0JCWFkal9lbmQgPSBtaW4oYWRqX2VuZCwgZW5kKTsKLQotCQlpZiAoIWNoZWNr X2ZyZWVfaG9sZShhZGpfc3RhcnQsIGFkal9lbmQsIHNpemUsIGFsaWdubWVudCkpCi0JCQljb250 aW51ZTsKLQotCQlpZiAoIShmbGFncyAmIERSTV9NTV9TRUFSQ0hfQkVTVCkpCi0JCQlyZXR1cm4g ZW50cnk7Ci0KLQkJaWYgKGhvbGVfc2l6ZSA8IGJlc3Rfc2l6ZSkgewotCQkJYmVzdCA9IGVudHJ5 OwotCQkJYmVzdF9zaXplID0gaG9sZV9zaXplOwotCQl9Ci0JfQorCW5vZGUtPmFsbG9jYXRlZCA9 IGZhbHNlOwogCi0JcmV0dXJuIGJlc3Q7CisJaWYgKGRybV9tbV9ob2xlX2ZvbGxvd3MocHJldl9u b2RlKSkKKwkJcm1faG9sZShwcmV2X25vZGUpOworCWFkZF9ob2xlKHByZXZfbm9kZSk7CiB9CitF WFBPUlRfU1lNQk9MKGRybV9tbV9yZW1vdmVfbm9kZSk7CiAKIC8qKgogICogZHJtX21tX3JlcGxh Y2Vfbm9kZSAtIG1vdmUgYW4gYWxsb2NhdGlvbiBmcm9tIEBvbGQgdG8gQG5ldwpAQCAtNTE2LDE4 ICs1NzcsMjMgQEAgdm9pZCBkcm1fbW1fcmVwbGFjZV9ub2RlKHN0cnVjdCBkcm1fbW1fbm9kZSAq b2xkLCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5ldykKIHsKIAlEUk1fTU1fQlVHX09OKCFvbGQtPmFs bG9jYXRlZCk7CiAKKwkqbmV3ID0gKm9sZDsKKwogCWxpc3RfcmVwbGFjZSgmb2xkLT5ub2RlX2xp c3QsICZuZXctPm5vZGVfbGlzdCk7Ci0JbGlzdF9yZXBsYWNlKCZvbGQtPmhvbGVfc3RhY2ssICZu ZXctPmhvbGVfc3RhY2spOwogCXJiX3JlcGxhY2Vfbm9kZSgmb2xkLT5yYiwgJm5ldy0+cmIsICZv bGQtPm1tLT5pbnRlcnZhbF90cmVlKTsKLQluZXctPmhvbGVfZm9sbG93cyA9IG9sZC0+aG9sZV9m b2xsb3dzOwotCW5ldy0+bW0gPSBvbGQtPm1tOwotCW5ldy0+c3RhcnQgPSBvbGQtPnN0YXJ0Owot CW5ldy0+c2l6ZSA9IG9sZC0+c2l6ZTsKLQluZXctPmNvbG9yID0gb2xkLT5jb2xvcjsKLQluZXct Pl9fc3VidHJlZV9sYXN0ID0gb2xkLT5fX3N1YnRyZWVfbGFzdDsKLQotCW9sZC0+YWxsb2NhdGVk ID0gMDsKLQluZXctPmFsbG9jYXRlZCA9IDE7CisKKwlpZiAoZHJtX21tX2hvbGVfZm9sbG93cyhv bGQpKSB7CisJCWxpc3RfcmVwbGFjZSgmb2xkLT5ob2xlX3N0YWNrLCAmbmV3LT5ob2xlX3N0YWNr KTsKKwkJcmJfcmVwbGFjZV9ub2RlKCZvbGQtPnJiX2hvbGVfc2l6ZSwKKwkJCQkmbmV3LT5yYl9o b2xlX3NpemUsCisJCQkJJm9sZC0+bW0tPmhvbGVzX3NpemUpOworCQlyYl9yZXBsYWNlX25vZGUo Jm9sZC0+cmJfaG9sZV9hZGRyLAorCQkJCSZuZXctPnJiX2hvbGVfYWRkciwKKwkJCQkmb2xkLT5t bS0+aG9sZXNfYWRkcik7CisJfQorCisJb2xkLT5hbGxvY2F0ZWQgPSBmYWxzZTsKKwluZXctPmFs bG9jYXRlZCA9IHRydWU7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9tbV9yZXBsYWNlX25vZGUpOwog CkBAIC01NzAsNyArNjM2LDcgQEAgRVhQT1JUX1NZTUJPTChkcm1fbW1fcmVwbGFjZV9ub2RlKTsK ICAqIEBjb2xvcjogb3BhcXVlIHRhZyB2YWx1ZSB0byB1c2UgZm9yIHRoZSBhbGxvY2F0aW9uCiAg KiBAc3RhcnQ6IHN0YXJ0IG9mIHRoZSBhbGxvd2VkIHJhbmdlIGZvciB0aGUgYWxsb2NhdGlvbgog ICogQGVuZDogZW5kIG9mIHRoZSBhbGxvd2VkIHJhbmdlIGZvciB0aGUgYWxsb2NhdGlvbgotICog QGZsYWdzOiBmbGFncyB0byBzcGVjaWZ5IGhvdyB0aGUgYWxsb2NhdGlvbiB3aWxsIGJlIHBlcmZv cm1lZCBhZnRlcndhcmRzCisgKiBAbW9kZTogZmluZS10dW5lIHRoZSBhbGxvY2F0aW9uIHNlYXJj aCBhbmQgcGxhY2VtZW50CiAgKgogICogVGhpcyBzaW1wbHkgc2V0cyB1cCB0aGUgc2Nhbm5pbmcg cm91dGluZXMgd2l0aCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRlc2lyZWQKICAqIGhvbGUuCkBA IC01ODYsNyArNjUyLDcgQEAgdm9pZCBkcm1fbW1fc2Nhbl9pbml0X3dpdGhfcmFuZ2Uoc3RydWN0 IGRybV9tbV9zY2FuICpzY2FuLAogCQkJCSB1bnNpZ25lZCBsb25nIGNvbG9yLAogCQkJCSB1NjQg c3RhcnQsCiAJCQkJIHU2NCBlbmQsCi0JCQkJIHVuc2lnbmVkIGludCBmbGFncykKKwkJCQkgZW51 bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZSkKIHsKIAlEUk1fTU1fQlVHX09OKHN0YXJ0ID49IGVu ZCk7CiAJRFJNX01NX0JVR19PTighc2l6ZSB8fCBzaXplID4gZW5kIC0gc3RhcnQpOwpAQCAtNjAx LDcgKzY2Nyw3IEBAIHZvaWQgZHJtX21tX3NjYW5faW5pdF93aXRoX3JhbmdlKHN0cnVjdCBkcm1f bW1fc2NhbiAqc2NhbiwKIAlzY2FuLT5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiAJc2Nhbi0+cmVt YWluZGVyX21hc2sgPSBpc19wb3dlcl9vZl8yKGFsaWdubWVudCkgPyBhbGlnbm1lbnQgLSAxIDog MDsKIAlzY2FuLT5zaXplID0gc2l6ZTsKLQlzY2FuLT5mbGFncyA9IGZsYWdzOworCXNjYW4tPm1v ZGUgPSBtb2RlOwogCiAJRFJNX01NX0JVR19PTihlbmQgPD0gc3RhcnQpOwogCXNjYW4tPnJhbmdl X3N0YXJ0ID0gc3RhcnQ7CkBAIC02NTksNyArNzI1LDcgQEAgYm9vbCBkcm1fbW1fc2Nhbl9hZGRf YmxvY2soc3RydWN0IGRybV9tbV9zY2FuICpzY2FuLAogCWlmIChhZGpfZW5kIDw9IGFkal9zdGFy dCB8fCBhZGpfZW5kIC0gYWRqX3N0YXJ0IDwgc2Nhbi0+c2l6ZSkKIAkJcmV0dXJuIGZhbHNlOwog Ci0JaWYgKHNjYW4tPmZsYWdzID09IERSTV9NTV9DUkVBVEVfVE9QKQorCWlmIChzY2FuLT5tb2Rl ID09IERSTV9NTV9JTlNFUlRfSElHSCkKIAkJYWRqX3N0YXJ0ID0gYWRqX2VuZCAtIHNjYW4tPnNp emU7CiAKIAlpZiAoc2Nhbi0+YWxpZ25tZW50KSB7CkBAIC02NzEsNyArNzM3LDcgQEAgYm9vbCBk cm1fbW1fc2Nhbl9hZGRfYmxvY2soc3RydWN0IGRybV9tbV9zY2FuICpzY2FuLAogCQkJZGl2NjRf dTY0X3JlbShhZGpfc3RhcnQsIHNjYW4tPmFsaWdubWVudCwgJnJlbSk7CiAJCWlmIChyZW0pIHsK IAkJCWFkal9zdGFydCAtPSByZW07Ci0JCQlpZiAoc2Nhbi0+ZmxhZ3MgIT0gRFJNX01NX0NSRUFU RV9UT1ApCisJCQlpZiAoc2Nhbi0+bW9kZSAhPSBEUk1fTU1fSU5TRVJUX0hJR0gpCiAJCQkJYWRq X3N0YXJ0ICs9IHNjYW4tPmFsaWdubWVudDsKIAkJCWlmIChhZGpfc3RhcnQgPCBtYXgoY29sX3N0 YXJ0LCBzY2FuLT5yYW5nZV9zdGFydCkgfHwKIAkJCSAgICBtaW4oY29sX2VuZCwgc2Nhbi0+cmFu Z2VfZW5kKSAtIGFkal9zdGFydCA8IHNjYW4tPnNpemUpCkBAIC03NjUsNyArODMxLDcgQEAgc3Ry dWN0IGRybV9tbV9ub2RlICpkcm1fbW1fc2Nhbl9jb2xvcl9ldmljdChzdHJ1Y3QgZHJtX21tX3Nj YW4gKnNjYW4pCiAKIAlob2xlID0gbGlzdF9maXJzdF9lbnRyeSgmbW0tPmhvbGVfc3RhY2ssIHR5 cGVvZigqaG9sZSksIGhvbGVfc3RhY2spOwogCWhvbGVfc3RhcnQgPSBfX2RybV9tbV9ob2xlX25v ZGVfc3RhcnQoaG9sZSk7Ci0JaG9sZV9lbmQgPSBfX2RybV9tbV9ob2xlX25vZGVfZW5kKGhvbGUp OworCWhvbGVfZW5kID0gaG9sZV9zdGFydCArIGhvbGUtPmhvbGVfc2l6ZTsKIAogCURSTV9NTV9C VUdfT04oaG9sZV9zdGFydCA+IHNjYW4tPmhpdF9zdGFydCk7CiAJRFJNX01NX0JVR19PTihob2xl X2VuZCA8IHNjYW4tPmhpdF9lbmQpOwpAQCAtNzkyLDIxICs4NTgsMjIgQEAgdm9pZCBkcm1fbW1f aW5pdChzdHJ1Y3QgZHJtX21tICptbSwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKIAlEUk1fTU1f QlVHX09OKHN0YXJ0ICsgc2l6ZSA8PSBzdGFydCk7CiAKKwltbS0+Y29sb3JfYWRqdXN0ID0gTlVM TDsKKwogCUlOSVRfTElTVF9IRUFEKCZtbS0+aG9sZV9zdGFjayk7Ci0JbW0tPnNjYW5fYWN0aXZl ID0gMDsKKwltbS0+aW50ZXJ2YWxfdHJlZSA9IFJCX1JPT1Q7CisJbW0tPmhvbGVzX3NpemUgPSBS Ql9ST09UOworCW1tLT5ob2xlc19hZGRyID0gUkJfUk9PVDsKIAogCS8qIENsZXZlciB0cmljayB0 byBhdm9pZCBhIHNwZWNpYWwgY2FzZSBpbiB0aGUgZnJlZSBob2xlIHRyYWNraW5nLiAqLwogCUlO SVRfTElTVF9IRUFEKCZtbS0+aGVhZF9ub2RlLm5vZGVfbGlzdCk7Ci0JbW0tPmhlYWRfbm9kZS5h bGxvY2F0ZWQgPSAwOwotCW1tLT5oZWFkX25vZGUuaG9sZV9mb2xsb3dzID0gMTsKKwltbS0+aGVh ZF9ub2RlLmFsbG9jYXRlZCA9IGZhbHNlOwogCW1tLT5oZWFkX25vZGUubW0gPSBtbTsKIAltbS0+ aGVhZF9ub2RlLnN0YXJ0ID0gc3RhcnQgKyBzaXplOwotCW1tLT5oZWFkX25vZGUuc2l6ZSA9IHN0 YXJ0IC0gbW0tPmhlYWRfbm9kZS5zdGFydDsKLQlsaXN0X2FkZF90YWlsKCZtbS0+aGVhZF9ub2Rl LmhvbGVfc3RhY2ssICZtbS0+aG9sZV9zdGFjayk7Ci0KLQltbS0+aW50ZXJ2YWxfdHJlZSA9IFJC X1JPT1Q7CisJbW0tPmhlYWRfbm9kZS5zaXplID0gLXNpemU7CisJYWRkX2hvbGUoJm1tLT5oZWFk X25vZGUpOwogCi0JbW0tPmNvbG9yX2FkanVzdCA9IE5VTEw7CisJbW0tPnNjYW5fYWN0aXZlID0g MDsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX21tX2luaXQpOwogCkBAIC04MjgsMTggKzg5NSwxNiBA QCBFWFBPUlRfU1lNQk9MKGRybV9tbV90YWtlZG93bik7CiBzdGF0aWMgdTY0IGRybV9tbV9kZWJ1 Z19ob2xlKGNvbnN0IHN0cnVjdCBkcm1fbW1fbm9kZSAqZW50cnksCiAJCQkgICAgIGNvbnN0IGNo YXIgKnByZWZpeCkKIHsKLQl1NjQgaG9sZV9zdGFydCwgaG9sZV9lbmQsIGhvbGVfc2l6ZTsKLQot CWlmIChlbnRyeS0+aG9sZV9mb2xsb3dzKSB7Ci0JCWhvbGVfc3RhcnQgPSBkcm1fbW1faG9sZV9u b2RlX3N0YXJ0KGVudHJ5KTsKLQkJaG9sZV9lbmQgPSBkcm1fbW1faG9sZV9ub2RlX2VuZChlbnRy eSk7Ci0JCWhvbGVfc2l6ZSA9IGhvbGVfZW5kIC0gaG9sZV9zdGFydDsKLQkJcHJfZGVidWcoIiVz ICUjbGx4LSUjbGx4OiAlbGx1OiBmcmVlXG4iLCBwcmVmaXgsIGhvbGVfc3RhcnQsCi0JCQkgaG9s ZV9lbmQsIGhvbGVfc2l6ZSk7Ci0JCXJldHVybiBob2xlX3NpemU7CisJdTY0IHN0YXJ0LCBzaXpl OworCisJc2l6ZSA9IGVudHJ5LT5ob2xlX3NpemU7CisJaWYgKHNpemUpIHsKKwkJc3RhcnQgPSBk cm1fbW1faG9sZV9ub2RlX3N0YXJ0KGVudHJ5KTsKKwkJcHJfZGVidWcoIiVzICUjbGx4LSUjbGx4 OiAlbGx1OiBmcmVlXG4iLAorCQkJIHByZWZpeCwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSwgc2l6ZSk7 CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNpemU7CiB9CiAKIC8qKgpAQCAtODcwLDE4ICs5 MzUsMTYgQEAgRVhQT1JUX1NZTUJPTChkcm1fbW1fZGVidWdfdGFibGUpOwogI2lmIGRlZmluZWQo Q09ORklHX0RFQlVHX0ZTKQogc3RhdGljIHU2NCBkcm1fbW1fZHVtcF9ob2xlKHN0cnVjdCBzZXFf ZmlsZSAqbSwgY29uc3Qgc3RydWN0IGRybV9tbV9ub2RlICplbnRyeSkKIHsKLQl1NjQgaG9sZV9z dGFydCwgaG9sZV9lbmQsIGhvbGVfc2l6ZTsKLQotCWlmIChlbnRyeS0+aG9sZV9mb2xsb3dzKSB7 Ci0JCWhvbGVfc3RhcnQgPSBkcm1fbW1faG9sZV9ub2RlX3N0YXJ0KGVudHJ5KTsKLQkJaG9sZV9l bmQgPSBkcm1fbW1faG9sZV9ub2RlX2VuZChlbnRyeSk7Ci0JCWhvbGVfc2l6ZSA9IGhvbGVfZW5k IC0gaG9sZV9zdGFydDsKLQkJc2VxX3ByaW50ZihtLCAiJSMwMThsbHgtJSMwMThsbHg6ICVsbHU6 IGZyZWVcbiIsIGhvbGVfc3RhcnQsCi0JCQkgICBob2xlX2VuZCwgaG9sZV9zaXplKTsKLQkJcmV0 dXJuIGhvbGVfc2l6ZTsKKwl1NjQgc3RhcnQsIHNpemU7CisKKwlzaXplID0gZW50cnktPmhvbGVf c2l6ZTsKKwlpZiAoc2l6ZSkgeworCQlzdGFydCA9IGRybV9tbV9ob2xlX25vZGVfc3RhcnQoZW50 cnkpOworCQlzZXFfcHJpbnRmKG0sICIlIzAxOGxseC0lIzAxOGxseDogJWxsdTogZnJlZVxuIiwK KwkJCSAgIHN0YXJ0LCBzdGFydCArIHNpemUsIHNpemUpOwogCX0KIAotCXJldHVybiAwOworCXJl dHVybiBzaXplOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm1h X21hbmFnZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm1hX21hbmFnZXIuYwppbmRleCAyMGNj MzNkMWJmYzEuLmQ5MTAwYjU2NTE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV92 bWFfbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm1hX21hbmFnZXIuYwpAQCAt MjEyLDggKzIxMiw3IEBAIGludCBkcm1fdm1hX29mZnNldF9hZGQoc3RydWN0IGRybV92bWFfb2Zm c2V0X21hbmFnZXIgKm1nciwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJldCA9IGRybV9t bV9pbnNlcnRfbm9kZSgmbWdyLT52bV9hZGRyX3NwYWNlX21tLCAmbm9kZS0+dm1fbm9kZSwKLQkJ CQkgcGFnZXMsIDAsIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7CisJcmV0ID0gZHJtX21tX2luc2Vy dF9ub2RlKCZtZ3ItPnZtX2FkZHJfc3BhY2VfbW0sICZub2RlLT52bV9ub2RlLCBwYWdlcyk7CiAJ aWYgKHJldCkKIAkJZ290byBvdXRfdW5sb2NrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X21tdS5jIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZp dl9tbXUuYwppbmRleCAyZGFlMzE2OWNlNDguLjY5YWI5OGMxNDNkYyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9tbXUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v ZXRuYXZpdi9ldG5hdml2X21tdS5jCkBAIC0xMDcsNiArMTA3LDcgQEAgc3RhdGljIGludCBldG5h dml2X2lvbW11X2ZpbmRfaW92YShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAogCQkJCSAgIHN0 cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwgc2l6ZV90IHNpemUpCiB7CiAJc3RydWN0IGV0bmF2aXZf dnJhbV9tYXBwaW5nICpmcmVlID0gTlVMTDsKKwllbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2Rl ID0gRFJNX01NX0lOU0VSVF9MT1c7CiAJaW50IHJldDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQo Jm1tdS0+bG9jayk7CkBAIC0xMTgsOCArMTE5LDkgQEAgc3RhdGljIGludCBldG5hdml2X2lvbW11 X2ZpbmRfaW92YShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAogCQlib29sIGZvdW5kOwogCiAJ CXJldCA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZSgmbW11LT5tbSwgbm9kZSwKLQkJCXNp emUsIDAsIG1tdS0+bGFzdF9pb3ZhLCB+MFVMLAotCQkJRFJNX01NX1NFQVJDSF9ERUZBVUxUKTsK KwkJCQkJCSAgc2l6ZSwgMCwgMCwKKwkJCQkJCSAgbW11LT5sYXN0X2lvdmEsIFU2NF9NQVgsCisJ CQkJCQkgIG1vZGUpOwogCiAJCWlmIChyZXQgIT0gLUVOT1NQQykKIAkJCWJyZWFrOwpAQCAtMTg3 LDYgKzE4OSw4IEBAIHN0YXRpYyBpbnQgZXRuYXZpdl9pb21tdV9maW5kX2lvdmEoc3RydWN0IGV0 bmF2aXZfaW9tbXUgKm1tdSwKIAkJCWxpc3RfZGVsX2luaXQoJm0tPnNjYW5fbm9kZSk7CiAJCX0K IAorCQltb2RlID0gRFJNX01NX0lOU0VSVF9FVklDVDsKKwogCQkvKgogCQkgKiBXZSByZW1vdmVk IGVub3VnaCBtYXBwaW5ncyBzbyB0aGF0IHRoZSBuZXcgYWxsb2NhdGlvbiB3aWxsCiAJCSAqIHN1 Y2NlZWQuICBFbnN1cmUgdGhhdCB0aGUgTU1VIHdpbGwgYmUgZmx1c2hlZCBiZWZvcmUgdGhlCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCA1Mjc1ZjYyNDhjZTMuLmNjNGUwMjI0OTY4ZiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC02OSwxMiArNjksMTAgQEAgaW5zZXJ0X21hcHBhYmxl X25vZGUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkcm1fbW1fbm9kZSAqbm9kZSwgdTMyIHNpemUpCiB7CiAJbWVtc2V0KG5vZGUsIDAsIHNpemVv Zigqbm9kZSkpOwotCXJldHVybiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYygm Z2d0dC0+YmFzZS5tbSwgbm9kZSwKLQkJCQkJCSAgIHNpemUsIDAsCi0JCQkJCQkgICBJOTE1X0NP TE9SX1VORVZJQ1RBQkxFLAotCQkJCQkJICAgMCwgZ2d0dC0+bWFwcGFibGVfZW5kLAotCQkJCQkJ ICAgRFJNX01NX1NFQVJDSF9ERUZBVUxULAotCQkJCQkJICAgRFJNX01NX0NSRUFURV9ERUZBVUxU KTsKKwlyZXR1cm4gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKCZnZ3R0LT5iYXNlLm1tLCBu b2RlLAorCQkJCQkgICBzaXplLCAwLCBJOTE1X0NPTE9SX1VORVZJQ1RBQkxFLAorCQkJCQkgICAw LCBnZ3R0LT5tYXBwYWJsZV9lbmQsCisJCQkJCSAgIERSTV9NTV9JTlNFUlRfTE9XKTsKIH0KIAog c3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2 aWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ldmljdC5jCmluZGV4IDUwMTI5 ZWMxY2FhYi4uZjkyZjYzZTg3NDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9ldmljdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V2aWN0 LmMKQEAgLTEwOSw2ICsxMDksNyBAQCBpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJfSwgKipwaGFzZTsKIAlzdHJ1Y3QgaTkxNV92bWEgKnZt YSwgKm5leHQ7CiAJc3RydWN0IGRybV9tbV9ub2RlICpub2RlOworCWVudW0gZHJtX21tX2luc2Vy dF9tb2RlIG1vZGU7CiAJaW50IHJldDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnZtLT5pOTE1 LT5kcm0uc3RydWN0X211dGV4KTsKQEAgLTEyNywxMCArMTI4LDE0IEBAIGk5MTVfZ2VtX2V2aWN0 X3NvbWV0aGluZyhzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkgKiBPbiBlYWNoIGxp c3QsIHRoZSBvbGRlc3Qgb2JqZWN0cyBsaWUgYXQgdGhlIEhFQUQgd2l0aCB0aGUgZnJlc2hlc3QK IAkgKiBvYmplY3Qgb24gdGhlIFRBSUwuCiAJICovCisJbW9kZSA9IERSTV9NTV9JTlNFUlRfQkVT VDsKKwlpZiAoZmxhZ3MgJiBQSU5fSElHSCkKKwkJbW9kZSA9IERSTV9NTV9JTlNFUlRfSElHSDsK KwlpZiAoZmxhZ3MgJiBQSU5fTUFQUEFCTEUpCisJCW1vZGUgPSBEUk1fTU1fSU5TRVJUX0xPVzsK IAlkcm1fbW1fc2Nhbl9pbml0X3dpdGhfcmFuZ2UoJnNjYW4sICZ2bS0+bW0sCiAJCQkJICAgIG1p bl9zaXplLCBhbGlnbm1lbnQsIGNhY2hlX2xldmVsLAotCQkJCSAgICBzdGFydCwgZW5kLAotCQkJ CSAgICBmbGFncyAmIFBJTl9ISUdIID8gRFJNX01NX0NSRUFURV9UT1AgOiAwKTsKKwkJCQkgICAg c3RhcnQsIGVuZCwgbW9kZSk7CiAKIAkvKiBSZXRpcmUgYmVmb3JlIHdlIHNlYXJjaCB0aGUgYWN0 aXZlIGxpc3QuIEFsdGhvdWdoIHdlIGhhdmUKIAkgKiByZWFzb25hYmxlIGFjY3VyYWN5IGluIG91 ciByZXRpcmVtZW50IGxpc3RzLCB3ZSBtYXkgaGF2ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZXhlY2J1ZmZlci5jCmluZGV4IGM2NDQzOGY4MTcxYy4uM2U0MzVjYWY3MjIxIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCkBAIC00MzYsMTIgKzQz NiwxMSBAQCBzdGF0aWMgdm9pZCAqcmVsb2NfaW9tYXAoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKIAkJCQkJICAgICAgIFBJTl9NQVBQQUJMRSB8IFBJTl9OT05CTE9DSyk7CiAJCWlm IChJU19FUlIodm1hKSkgewogCQkJbWVtc2V0KCZjYWNoZS0+bm9kZSwgMCwgc2l6ZW9mKGNhY2hl LT5ub2RlKSk7Ci0JCQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYwor CQkJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlCiAJCQkJKCZnZ3R0LT5iYXNlLm1t LCAmY2FjaGUtPm5vZGUsCiAJCQkJIDQwOTYsIDAsIEk5MTVfQ09MT1JfVU5FVklDVEFCTEUsCiAJ CQkJIDAsIGdndHQtPm1hcHBhYmxlX2VuZCwKLQkJCQkgRFJNX01NX1NFQVJDSF9ERUZBVUxULAot CQkJCSBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQpOworCQkJCSBEUk1fTU1fSU5TRVJUX0xPVyk7CiAJ CQlpZiAocmV0KSAvKiBubyBpbmFjdGl2ZSBhcGVydHVyZSBzcGFjZSwgdXNlIGNwdSByZWxvYyAq LwogCQkJCXJldHVybiBOVUxMOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9n dHQuYwppbmRleCBjOGYxNjc1ODUyYTcuLjkzOWI4NjJiZmNmYSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZ3R0LmMKQEAgLTI3MjIsMTIgKzI3MjIsMTAgQEAgaW50IGk5MTVfZ2VtX2luaXRf Z2d0dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCXJldHVybiByZXQ7CiAK IAkvKiBSZXNlcnZlIGEgbWFwcGFibGUgc2xvdCBmb3Igb3VyIGxvY2tsZXNzIGVycm9yIGNhcHR1 cmUgKi8KLQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYygmZ2d0dC0+ YmFzZS5tbSwKLQkJCQkJCSAgJmdndHQtPmVycm9yX2NhcHR1cmUsCi0JCQkJCQkgIDQwOTYsIDAs Ci0JCQkJCQkgIEk5MTVfQ09MT1JfVU5FVklDVEFCTEUsCi0JCQkJCQkgIDAsIGdndHQtPm1hcHBh YmxlX2VuZCwKLQkJCQkJCSAgMCwgMCk7CisJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2luX3Jh bmdlKCZnZ3R0LT5iYXNlLm1tLCAmZ2d0dC0+ZXJyb3JfY2FwdHVyZSwKKwkJCQkJICA0MDk2LCAw LCBJOTE1X0NPTE9SX1VORVZJQ1RBQkxFLAorCQkJCQkgIDAsIGdndHQtPm1hcHBhYmxlX2VuZCwK KwkJCQkJICBEUk1fTU1fSU5TRVJUX0xPVyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApA QCAtMzU0MiwxOCArMzU0MCwxNiBAQCBpbnQgaTkxNV9nZW1fZ3R0X2luc2VydChzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCXU2NCBzaXplLCB1NjQgYWxpZ25tZW50LCB1bnNpZ25l ZCBsb25nIGNvbG9yLAogCQkJdTY0IHN0YXJ0LCB1NjQgZW5kLCB1bnNpZ25lZCBpbnQgZmxhZ3Mp CiB7Ci0JdTMyIHNlYXJjaF9mbGFnLCBhbGxvY19mbGFnOworCWVudW0gZHJtX21tX2luc2VydF9t b2RlIG1vZGU7CiAJaW50IGVycjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnZtLT5pOTE1LT5k cm0uc3RydWN0X211dGV4KTsKIAotCWlmIChmbGFncyAmIFBJTl9ISUdIKSB7Ci0JCXNlYXJjaF9m bGFnID0gRFJNX01NX1NFQVJDSF9CRUxPVzsKLQkJYWxsb2NfZmxhZyA9IERSTV9NTV9DUkVBVEVf VE9QOwotCX0gZWxzZSB7Ci0JCXNlYXJjaF9mbGFnID0gRFJNX01NX1NFQVJDSF9ERUZBVUxUOwot CQlhbGxvY19mbGFnID0gRFJNX01NX0NSRUFURV9ERUZBVUxUOwotCX0KKwltb2RlID0gRFJNX01N X0lOU0VSVF9CRVNUOworCWlmIChmbGFncyAmIFBJTl9ISUdIKQorCQltb2RlID0gRFJNX01NX0lO U0VSVF9ISUdIOworCWlmIChmbGFncyAmIFBJTl9NQVBQQUJMRSkKKwkJbW9kZSA9IERSTV9NTV9J TlNFUlRfTE9XOwogCiAJLyogV2Ugb25seSBhbGxvY2F0ZSBpbiBQQUdFX1NJWkUvR1RUX1BBR0Vf U0laRSAoNDA5NikgY2h1bmtzLAogCSAqIHNvIHdlIGtub3cgdGhhdCB3ZSBhbHdheXMgaGF2ZSBh IG1pbmltdW0gYWxpZ25tZW50IG9mIDQwOTYuCkBAIC0zNTY1LDEwICszNTYxLDkgQEAgaW50IGk5 MTVfZ2VtX2d0dF9pbnNlcnQoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJaWYgKGFs aWdubWVudCA8PSA0MDk2KQogCQlhbGlnbm1lbnQgPSAwOwogCi0JZXJyID0gZHJtX21tX2luc2Vy dF9ub2RlX2luX3JhbmdlX2dlbmVyaWMoJnZtLT5tbSwgbm9kZSwKLQkJCQkJCSAgc2l6ZSwgYWxp Z25tZW50LCBjb2xvciwKLQkJCQkJCSAgc3RhcnQsIGVuZCwKLQkJCQkJCSAgc2VhcmNoX2ZsYWcs IGFsbG9jX2ZsYWcpOworCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZSgmdm0tPm1t LCBub2RlLAorCQkJCQkgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCisJCQkJCSAgc3RhcnQsIGVu ZCwgbW9kZSk7CiAJaWYgKGVyciAhPSAtRU5PU1BDKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zNTc3 LDkgKzM1NzIsNyBAQCBpbnQgaTkxNV9nZW1fZ3R0X2luc2VydChzdHJ1Y3QgaTkxNV9hZGRyZXNz X3NwYWNlICp2bSwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0Jc2VhcmNoX2ZsYWcgPSBE Uk1fTU1fU0VBUkNIX0RFRkFVTFQ7Ci0JcmV0dXJuIGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5n ZV9nZW5lcmljKCZ2bS0+bW0sIG5vZGUsCi0JCQkJCQkgICBzaXplLCBhbGlnbm1lbnQsIGNvbG9y LAotCQkJCQkJICAgc3RhcnQsIGVuZCwKLQkJCQkJCSAgIHNlYXJjaF9mbGFnLCBhbGxvY19mbGFn KTsKKwlyZXR1cm4gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKCZ2bS0+bW0sIG5vZGUsCisJ CQkJCSAgIHNpemUsIGFsaWdubWVudCwgY29sb3IsCisJCQkJCSAgIHN0YXJ0LCBlbmQsIERSTV9N TV9JTlNFUlRfRVZJQ1QpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fc3RvbGVuLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwpp bmRleCBmMWE4MGJmYTk5MTkuLmY2ZDUwN2ZhZjgzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fc3RvbGVuLmMKQEAgLTU1LDkgKzU1LDkgQEAgaW50IGk5MTVfZ2VtX3N0b2xlbl9pbnNl cnRfbm9kZV9pbl9yYW5nZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCXJl dHVybiAtRU5PREVWOwogCiAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPm1tLnN0b2xlbl9sb2NrKTsK LQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UoJmRldl9wcml2LT5tbS5zdG9sZW4s IG5vZGUsIHNpemUsCi0JCQkJCSAgYWxpZ25tZW50LCBzdGFydCwgZW5kLAotCQkJCQkgIERSTV9N TV9TRUFSQ0hfREVGQVVMVCk7CisJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKCZk ZXZfcHJpdi0+bW0uc3RvbGVuLCBub2RlLAorCQkJCQkgIHNpemUsIGFsaWdubWVudCwgMCwKKwkJ CQkJICBzdGFydCwgZW5kLCBEUk1fTU1fSU5TRVJUX0JFU1QpOwogCW11dGV4X3VubG9jaygmZGV2 X3ByaXYtPm1tLnN0b2xlbl9sb2NrKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5j CmluZGV4IGNkMDZjZmQ5NDY4Ny4uNDEyNjY5MDYyY2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL21zbV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYwpA QCAtNTQsOCArNTQsNyBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKipnZXRfcGFnZXNfdnJhbShzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKIAlpZiAoIXApCiAJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOwogCi0JcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZwcml2LT52cmFtLm1tLCBtc21fb2Jq LT52cmFtX25vZGUsCi0JCQlucGFnZXMsIDAsIERSTV9NTV9TRUFSQ0hfREVGQVVMVCk7CisJcmV0 ID0gZHJtX21tX2luc2VydF9ub2RlKCZwcml2LT52cmFtLm1tLCBtc21fb2JqLT52cmFtX25vZGUs IG5wYWdlcyk7CiAJaWYgKHJldCkgewogCQlkcm1fZnJlZV9sYXJnZShwKTsKIAkJcmV0dXJuIEVS Ul9QVFIocmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV92bWEu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV92bWEuYwppbmRleCBhMzExZDI2Y2NiMjEu LmI2NTRlY2E3NjM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtX3Zt YS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV92bWEuYwpAQCAtNDUsOCArNDUs NyBAQCBtc21fZ2VtX21hcF92bWEoc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNl LAogCWlmIChXQVJOX09OKGRybV9tbV9ub2RlX2FsbG9jYXRlZCgmdm1hLT5ub2RlKSkpCiAJCXJl dHVybiAwOwogCi0JcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZhc3BhY2UtPm1tLCAmdm1hLT5u b2RlLCBucGFnZXMsCi0JCQkwLCBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOworCXJldCA9IGRybV9t bV9pbnNlcnRfbm9kZSgmYXNwYWNlLT5tbSwgJnZtYS0+bm9kZSwgbnBhZ2VzKTsKIAlpZiAocmV0 KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3Rz L3Rlc3QtZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX21tLmMK aW5kZXggMmNlOTJmNGRjZmM3Li5hMDdjMDRhNmM0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9zZWxmdGVzdHMvdGVzdC1kcm1fbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRl c3RzL3Rlc3QtZHJtX21tLmMKQEAgLTIyLDIzICsyMiwyNCBAQCBzdGF0aWMgdW5zaWduZWQgaW50 IG1heF9pdGVyYXRpb25zID0gODE5MjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X3ByaW1lID0g MTI4OwogCiBlbnVtIHsKLQlERUZBVUxULAotCVRPUERPV04sCiAJQkVTVCwKKwlCT1RUT01VUCwK KwlUT1BET1dOLAorCUVWSUNULAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnNlcnRfbW9k ZSB7CiAJY29uc3QgY2hhciAqbmFtZTsKLQl1bnNpZ25lZCBpbnQgc2VhcmNoX2ZsYWdzOwotCXVu c2lnbmVkIGludCBjcmVhdGVfZmxhZ3M7CisJZW51bSBkcm1fbW1faW5zZXJ0X21vZGUgbW9kZTsK IH0gaW5zZXJ0X21vZGVzW10gPSB7Ci0JW0RFRkFVTFRdID0geyAiZGVmYXVsdCIsIERSTV9NTV9T RUFSQ0hfREVGQVVMVCwgRFJNX01NX0NSRUFURV9ERUZBVUxUIH0sCi0JW1RPUERPV05dID0geyAi dG9wLWRvd24iLCBEUk1fTU1fU0VBUkNIX0JFTE9XLCBEUk1fTU1fQ1JFQVRFX1RPUCB9LAotCVtC RVNUXSA9IHsgImJlc3QiLCBEUk1fTU1fU0VBUkNIX0JFU1QsIERSTV9NTV9DUkVBVEVfREVGQVVM VCB9LAorCVtCRVNUXSA9IHsgImJlc3QiLCBEUk1fTU1fSU5TRVJUX0JFU1QgfSwKKwlbQk9UVE9N VVBdID0geyAiYm90dG9tLXVwIiwgRFJNX01NX0lOU0VSVF9MT1cgfSwKKwlbVE9QRE9XTl0gPSB7 ICJ0b3AtZG93biIsIERSTV9NTV9JTlNFUlRfSElHSCB9LAorCVtFVklDVF0gPSB7ICJldmljdCIs IERSTV9NTV9JTlNFUlRfRVZJQ1QgfSwKIAl7fQogfSwgZXZpY3RfbW9kZXNbXSA9IHsKLQl7ICJk ZWZhdWx0IiwgRFJNX01NX1NFQVJDSF9ERUZBVUxULCBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQgfSwK LQl7ICJ0b3AtZG93biIsIERSTV9NTV9TRUFSQ0hfQkVMT1csIERSTV9NTV9DUkVBVEVfVE9QIH0s CisJeyAiYm90dG9tLXVwIiwgRFJNX01NX0lOU0VSVF9MT1cgfSwKKwl7ICJ0b3AtZG93biIsIERS TV9NTV9JTlNFUlRfSElHSCB9LAogCXt9CiB9OwogCkBAIC01MjIsOCArNTIzLDcgQEAgc3RhdGlj IGJvb2wgZXhwZWN0X2luc2VydChzdHJ1Y3QgZHJtX21tICptbSwgc3RydWN0IGRybV9tbV9ub2Rl ICpub2RlLAogCiAJZXJyID0gZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMobW0sIG5vZGUsCiAJ CQkJCSBzaXplLCBhbGlnbm1lbnQsIGNvbG9yLAotCQkJCQkgbW9kZS0+c2VhcmNoX2ZsYWdzLAot CQkJCQkgbW9kZS0+Y3JlYXRlX2ZsYWdzKTsKKwkJCQkJIG1vZGUtPm1vZGUpOwogCWlmIChlcnIp IHsKIAkJcHJfZXJyKCJpbnNlcnQgKHNpemU9JWxsdSwgYWxpZ25tZW50PSVsbHUsIGNvbG9yPSVs dSwgbW9kZT0lcykgZmFpbGVkIHdpdGggZXJyPSVkXG4iLAogCQkgICAgICAgc2l6ZSwgYWxpZ25t ZW50LCBjb2xvciwgbW9kZS0+bmFtZSwgZXJyKTsKQEAgLTU0Myw3ICs1NDMsNyBAQCBzdGF0aWMg Ym9vbCBleHBlY3RfaW5zZXJ0X2ZhaWwoc3RydWN0IGRybV9tbSAqbW0sIHU2NCBzaXplKQogCXN0 cnVjdCBkcm1fbW1fbm9kZSB0bXAgPSB7fTsKIAlpbnQgZXJyOwogCi0JZXJyID0gZHJtX21tX2lu c2VydF9ub2RlKG1tLCAmdG1wLCBzaXplLCAwLCBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOworCWVy ciA9IGRybV9tbV9pbnNlcnRfbm9kZShtbSwgJnRtcCwgc2l6ZSk7CiAJaWYgKGxpa2VseShlcnIg PT0gLUVOT1NQQykpCiAJCXJldHVybiB0cnVlOwogCkBAIC03NDksMTEgKzc0OSwxMCBAQCBzdGF0 aWMgYm9vbCBleHBlY3RfaW5zZXJ0X2luX3JhbmdlKHN0cnVjdCBkcm1fbW0gKm1tLCBzdHJ1Y3Qg ZHJtX21tX25vZGUgKm5vZGUsCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGRybV9tbV9pbnNlcnRf bm9kZV9pbl9yYW5nZV9nZW5lcmljKG1tLCBub2RlLAotCQkJCQkJICBzaXplLCBhbGlnbm1lbnQs IGNvbG9yLAotCQkJCQkJICByYW5nZV9zdGFydCwgcmFuZ2VfZW5kLAotCQkJCQkJICBtb2RlLT5z ZWFyY2hfZmxhZ3MsCi0JCQkJCQkgIG1vZGUtPmNyZWF0ZV9mbGFncyk7CisJZXJyID0gZHJtX21t X2luc2VydF9ub2RlX2luX3JhbmdlKG1tLCBub2RlLAorCQkJCQkgIHNpemUsIGFsaWdubWVudCwg Y29sb3IsCisJCQkJCSAgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwKKwkJCQkJICBtb2RlLT5tb2Rl KTsKIAlpZiAoZXJyKSB7CiAJCXByX2VycigiaW5zZXJ0IChzaXplPSVsbHUsIGFsaWdubWVudD0l bGx1LCBjb2xvcj0lbHUsIG1vZGU9JXMpIG50byByYW5nZSBbJWxseCwgJWxseF0gZmFpbGVkIHdp dGggZXJyPSVkXG4iLAogCQkgICAgICAgc2l6ZSwgYWxpZ25tZW50LCBjb2xvciwgbW9kZS0+bmFt ZSwKQEAgLTc3NywxMSArNzc2LDEwIEBAIHN0YXRpYyBib29sIGV4cGVjdF9pbnNlcnRfaW5fcmFu Z2VfZmFpbChzdHJ1Y3QgZHJtX21tICptbSwKIAlzdHJ1Y3QgZHJtX21tX25vZGUgdG1wID0ge307 CiAJaW50IGVycjsKIAotCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmlj KG1tLCAmdG1wLAotCQkJCQkJICBzaXplLCAwLCAwLAotCQkJCQkJICByYW5nZV9zdGFydCwgcmFu Z2VfZW5kLAotCQkJCQkJICBEUk1fTU1fU0VBUkNIX0RFRkFVTFQsCi0JCQkJCQkgIERSTV9NTV9D UkVBVEVfREVGQVVMVCk7CisJZXJyID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKG1tLCAm dG1wLAorCQkJCQkgIHNpemUsIDAsIDAsCisJCQkJCSAgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZCwK KwkJCQkJICAwKTsKIAlpZiAobGlrZWx5KGVyciA9PSAtRU5PU1BDKSkKIAkJcmV0dXJuIHRydWU7 CiAKQEAgLTEzMTQsNyArMTMxMiw3IEBAIHN0YXRpYyBpbnQgZXZpY3Rfc29tZXRoaW5nKHN0cnVj dCBkcm1fbW0gKm1tLAogCWRybV9tbV9zY2FuX2luaXRfd2l0aF9yYW5nZSgmc2NhbiwgbW0sCiAJ CQkJICAgIHNpemUsIGFsaWdubWVudCwgMCwKIAkJCQkgICAgcmFuZ2Vfc3RhcnQsIHJhbmdlX2Vu ZCwKLQkJCQkgICAgbW9kZS0+Y3JlYXRlX2ZsYWdzKTsKKwkJCQkgICAgbW9kZS0+bW9kZSk7CiAJ aWYgKCFldmljdF9ub2Rlcygmc2NhbiwKIAkJCSBub2Rlcywgb3JkZXIsIGNvdW50LCBmYWxzZSwK IAkJCSAmZXZpY3RfbGlzdCkpCkBAIC0xMzIyLDggKzEzMjAsNyBAQCBzdGF0aWMgaW50IGV2aWN0 X3NvbWV0aGluZyhzdHJ1Y3QgZHJtX21tICptbSwKIAogCW1lbXNldCgmdG1wLCAwLCBzaXplb2Yo dG1wKSk7CiAJZXJyID0gZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMobW0sICZ0bXAsIHNpemUs IGFsaWdubWVudCwgMCwKLQkJCQkJIG1vZGUtPnNlYXJjaF9mbGFncywKLQkJCQkJIG1vZGUtPmNy ZWF0ZV9mbGFncyk7CisJCQkJCSBEUk1fTU1fSU5TRVJUX0VWSUNUKTsKIAlpZiAoZXJyKSB7CiAJ CXByX2VycigiRmFpbGVkIHRvIGluc2VydCBpbnRvIGV2aWN0aW9uIGhvbGU6IHNpemU9JWQsIGFs aWduPSVkXG4iLAogCQkgICAgICAgc2l6ZSwgYWxpZ25tZW50KTsKQEAgLTEzOTgsOCArMTM5NSw3 IEBAIHN0YXRpYyBpbnQgaWd0X2V2aWN0KHZvaWQgKmlnbm9yZWQpCiAJcmV0ID0gLUVJTlZBTDsK IAlkcm1fbW1faW5pdCgmbW0sIDAsIHNpemUpOwogCWZvciAobiA9IDA7IG4gPCBzaXplOyBuKysp IHsKLQkJZXJyID0gZHJtX21tX2luc2VydF9ub2RlKCZtbSwgJm5vZGVzW25dLm5vZGUsIDEsIDAs Ci0JCQkJCSBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOworCQllcnIgPSBkcm1fbW1faW5zZXJ0X25v ZGUoJm1tLCAmbm9kZXNbbl0ubm9kZSwgMSk7CiAJCWlmIChlcnIpIHsKIAkJCXByX2VycigiaW5z ZXJ0IGZhaWxlZCwgc3RlcCAlZFxuIiwgbik7CiAJCQlyZXQgPSBlcnI7CkBAIC0xNTA3LDggKzE1 MDMsNyBAQCBzdGF0aWMgaW50IGlndF9ldmljdF9yYW5nZSh2b2lkICppZ25vcmVkKQogCXJldCA9 IC1FSU5WQUw7CiAJZHJtX21tX2luaXQoJm1tLCAwLCBzaXplKTsKIAlmb3IgKG4gPSAwOyBuIDwg c2l6ZTsgbisrKSB7Ci0JCWVyciA9IGRybV9tbV9pbnNlcnRfbm9kZSgmbW0sICZub2Rlc1tuXS5u b2RlLCAxLCAwLAotCQkJCQkgRFJNX01NX1NFQVJDSF9ERUZBVUxUKTsKKwkJZXJyID0gZHJtX21t X2luc2VydF9ub2RlKCZtbSwgJm5vZGVzW25dLm5vZGUsIDEpOwogCQlpZiAoZXJyKSB7CiAJCQlw cl9lcnIoImluc2VydCBmYWlsZWQsIHN0ZXAgJWRcbiIsIG4pOwogCQkJcmV0ID0gZXJyOwpAQCAt MTg5NCw3ICsxODg5LDcgQEAgc3RhdGljIGludCBldmljdF9jb2xvcihzdHJ1Y3QgZHJtX21tICpt bSwKIAlkcm1fbW1fc2Nhbl9pbml0X3dpdGhfcmFuZ2UoJnNjYW4sIG1tLAogCQkJCSAgICBzaXpl LCBhbGlnbm1lbnQsIGNvbG9yLAogCQkJCSAgICByYW5nZV9zdGFydCwgcmFuZ2VfZW5kLAotCQkJ CSAgICBtb2RlLT5jcmVhdGVfZmxhZ3MpOworCQkJCSAgICBtb2RlLT5tb2RlKTsKIAlpZiAoIWV2 aWN0X25vZGVzKCZzY2FuLAogCQkJIG5vZGVzLCBvcmRlciwgY291bnQsIHRydWUsCiAJCQkgJmV2 aWN0X2xpc3QpKQpAQCAtMTkwMiw4ICsxODk3LDcgQEAgc3RhdGljIGludCBldmljdF9jb2xvcihz dHJ1Y3QgZHJtX21tICptbSwKIAogCW1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7CiAJZXJy ID0gZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMobW0sICZ0bXAsIHNpemUsIGFsaWdubWVudCwg Y29sb3IsCi0JCQkJCSBtb2RlLT5zZWFyY2hfZmxhZ3MsCi0JCQkJCSBtb2RlLT5jcmVhdGVfZmxh Z3MpOworCQkJCQkgRFJNX01NX0lOU0VSVF9FVklDVCk7CiAJaWYgKGVycikgewogCQlwcl9lcnIo IkZhaWxlZCB0byBpbnNlcnQgaW50byBldmljdGlvbiBob2xlOiBzaXplPSVkLCBhbGlnbj0lZCwg Y29sb3I9JWx1LCBlcnI9JWRcbiIsCiAJCSAgICAgICBzaXplLCBhbGlnbm1lbnQsIGNvbG9yLCBl cnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYyBiL2RyaXZlcnMv Z3B1L2RybS9zaXMvc2lzX21tLmMKaW5kZXggMDNkZWZkYTc3NzY2Li4xNjIyZGIyNGNkMzkgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3Npcy9zaXNfbW0uYwpAQCAtMTA5LDggKzEwOSw3IEBAIHN0YXRpYyBpbnQgc2lzX2RybV9h bGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCiAJaWYg KHBvb2wgPT0gQUdQX1RZUEUpIHsKIAkJcmV0dmFsID0gZHJtX21tX2luc2VydF9ub2RlKCZkZXZf cHJpdi0+YWdwX21tLAogCQkJCQkgICAgJml0ZW0tPm1tX25vZGUsCi0JCQkJCSAgICBtZW0tPnNp emUsIDAsCi0JCQkJCSAgICBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOworCQkJCQkgICAgbWVtLT5z aXplKTsKIAkJb2Zmc2V0ID0gaXRlbS0+bW1fbm9kZS5zdGFydDsKIAl9IGVsc2UgewogI2lmIGRl ZmluZWQoQ09ORklHX0ZCX1NJUykgfHwgZGVmaW5lZChDT05GSUdfRkJfU0lTX01PRFVMRSkKQEAg LTEyMiw4ICsxMjEsNyBAQCBzdGF0aWMgaW50IHNpc19kcm1fYWxsb2Moc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlLAogI2Vsc2UKIAkJcmV0dmFsID0gZHJtX21t X2luc2VydF9ub2RlKCZkZXZfcHJpdi0+dnJhbV9tbSwKIAkJCQkJICAgICZpdGVtLT5tbV9ub2Rl LAotCQkJCQkgICAgbWVtLT5zaXplLCAwLAotCQkJCQkgICAgRFJNX01NX1NFQVJDSF9ERUZBVUxU KTsKKwkJCQkJICAgIG1lbS0+c2l6ZSk7CiAJCW9mZnNldCA9IGl0ZW0tPm1tX25vZGUuc3RhcnQ7 CiAjZW5kaWYKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMgYi9k cml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMKaW5kZXggYzA4ZTUyNzllZWFjLi5hNjA1MWQ2YzZk ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYworKysgYi9kcml2ZXJz L2dwdS9kcm0vdGVncmEvZ2VtLmMKQEAgLTEyOCw4ICsxMjgsOCBAQCBzdGF0aWMgaW50IHRlZ3Jh X2JvX2lvbW11X21hcChzdHJ1Y3QgdGVncmFfZHJtICp0ZWdyYSwgc3RydWN0IHRlZ3JhX2JvICpi bykKIAlpZiAoIWJvLT5tbSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQllcnIgPSBkcm1fbW1faW5z ZXJ0X25vZGVfZ2VuZXJpYygmdGVncmEtPm1tLCBiby0+bW0sIGJvLT5nZW0uc2l6ZSwKLQkJCQkJ IFBBR0VfU0laRSwgMCwgMCwgMCk7CisJZXJyID0gZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMo JnRlZ3JhLT5tbSwKKwkJCQkJIGJvLT5tbSwgYm8tPmdlbS5zaXplLCBQQUdFX1NJWkUsIDAsIDAp OwogCWlmIChlcnIgPCAwKSB7CiAJCWRldl9lcnIodGVncmEtPmRybS0+ZGV2LCAib3V0IG9mIEkv TyB2aXJ0dWFsIG1lbW9yeTogJXpkXG4iLAogCQkJZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS90dG0vdHRtX2JvX21hbmFnZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2Jv X21hbmFnZXIuYwppbmRleCBhZWE2YTAxNTAwZTEuLjQ5M2ZlNmIzMzM1MyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS90dG0vdHRtX2JvX21hbmFnZXIuYwpAQCAtNTQsOSArNTQsOCBAQCBzdGF0aWMgaW50IHR0bV9i b19tYW5fZ2V0X25vZGUoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCiB7CiAJc3Ry dWN0IHR0bV9yYW5nZV9tYW5hZ2VyICpybWFuID0gKHN0cnVjdCB0dG1fcmFuZ2VfbWFuYWdlciAq KSBtYW4tPnByaXY7CiAJc3RydWN0IGRybV9tbSAqbW0gPSAmcm1hbi0+bW07Ci0Jc3RydWN0IGRy bV9tbV9ub2RlICpub2RlID0gTlVMTDsKLQllbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3Mgc2ZsYWdz ID0gRFJNX01NX1NFQVJDSF9CRVNUOwotCWVudW0gZHJtX21tX2FsbG9jYXRvcl9mbGFncyBhZmxh Z3MgPSBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQ7CisJc3RydWN0IGRybV9tbV9ub2RlICpub2RlOwor CWVudW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGU7CiAJdW5zaWduZWQgbG9uZyBscGZuOwogCWlu dCByZXQ7CiAKQEAgLTY4LDE2ICs2NywxNSBAQCBzdGF0aWMgaW50IHR0bV9ib19tYW5fZ2V0X25v ZGUoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCiAJaWYgKCFub2RlKQogCQlyZXR1 cm4gLUVOT01FTTsKIAotCWlmIChwbGFjZS0+ZmxhZ3MgJiBUVE1fUExfRkxBR19UT1BET1dOKSB7 Ci0JCXNmbGFncyA9IERSTV9NTV9TRUFSQ0hfQkVMT1c7Ci0JCWFmbGFncyA9IERSTV9NTV9DUkVB VEVfVE9QOwotCX0KKwltb2RlID0gRFJNX01NX0lOU0VSVF9CRVNUOworCWlmIChwbGFjZS0+Zmxh Z3MgJiBUVE1fUExfRkxBR19UT1BET1dOKQorCQltb2RlID0gRFJNX01NX0lOU0VSVF9ISUdIOwog CiAJc3Bpbl9sb2NrKCZybWFuLT5sb2NrKTsKLQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfaW5f cmFuZ2VfZ2VuZXJpYyhtbSwgbm9kZSwgbWVtLT5udW1fcGFnZXMsCisJcmV0ID0gZHJtX21tX2lu c2VydF9ub2RlX2luX3JhbmdlKG1tLCBub2RlLAorCQkJCQkgIG1lbS0+bnVtX3BhZ2VzLAogCQkJ CQkgIG1lbS0+cGFnZV9hbGlnbm1lbnQsIDAsCi0JCQkJCSAgcGxhY2UtPmZwZm4sIGxwZm4sCi0J CQkJCSAgc2ZsYWdzLCBhZmxhZ3MpOworCQkJCQkgIHBsYWNlLT5mcGZuLCBscGZuLCBtb2RlKTsK IAlzcGluX3VubG9jaygmcm1hbi0+bG9jayk7CiAKIAlpZiAodW5saWtlbHkocmV0KSkgewpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfY3J0Yy5jCmluZGV4IGEwZmQzZTY2YmM0Yi4uYmFhY2RmNjJjODNlIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfY3J0Yy5jCkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIGludCB2YzRfY3J0Y19h dG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAogCiAJc3Bpbl9sb2NrX2lycXNhdmUo JnZjNC0+aHZzLT5tbV9sb2NrLCBmbGFncyk7CiAJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZ2 YzQtPmh2cy0+ZGxpc3RfbW0sICZ2YzRfc3RhdGUtPm1tLAotCQkJCSBkbGlzdF9jb3VudCwgMSwg MCk7CisJCQkJIGRsaXN0X2NvdW50KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2YzQtPmh2 cy0+bW1fbG9jaywgZmxhZ3MpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9odnMuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0 X2h2cy5jCmluZGV4IDZmYmFiMWM4MmNiMS4uNGFiYTBmYTU2Mjg5IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF9odnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9o dnMuYwpAQCAtMTQxLDggKzE0MSw3IEBAIHN0YXRpYyBpbnQgdmM0X2h2c191cGxvYWRfbGluZWFy X2tlcm5lbChzdHJ1Y3QgdmM0X2h2cyAqaHZzLAogCWludCByZXQsIGk7CiAJdTMyIF9faW9tZW0g KmRzdF9rZXJuZWw7CiAKLQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGUoJmh2cy0+ZGxpc3RfbW0s IHNwYWNlLCBWQzRfS0VSTkVMX0RXT1JEUywgMSwKLQkJCQkgMCk7CisJcmV0ID0gZHJtX21tX2lu c2VydF9ub2RlKCZodnMtPmRsaXN0X21tLCBzcGFjZSwgVkM0X0tFUk5FTF9EV09SRFMpOwogCWlm IChyZXQpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIGZpbHRl ciBrZXJuZWw6ICVkXG4iLAogCQkJICByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKaW5kZXgg MTEwZDE1MThmNWQ1Li5jMWYwNjg5NzEzNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwpAQCAt NTE0LDkgKzUxNCw5IEBAIHN0YXRpYyBpbnQgdmM0X3BsYW5lX21vZGVfc2V0KHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAogCWlmIChsYm1fc2l6ZSkgewogCQlpZiAoIXZjNF9zdGF0ZS0+bGJtLmFs bG9jYXRlZCkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnZjNC0+aHZzLT5tbV9sb2NrLCBpcnFm bGFncyk7Ci0JCQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGUoJnZjNC0+aHZzLT5sYm1fbW0sCi0J CQkJCQkgJnZjNF9zdGF0ZS0+bGJtLAotCQkJCQkJIGxibV9zaXplLCAzMiwgMCk7CisJCQlyZXQg PSBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYygmdmM0LT5odnMtPmxibV9tbSwKKwkJCQkJCQkg JnZjNF9zdGF0ZS0+bGJtLAorCQkJCQkJCSBsYm1fc2l6ZSwgMzIsIDAsIDApOwogCQkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmdmM0LT5odnMtPm1tX2xvY2ssIGlycWZsYWdzKTsKIAkJfSBlbHNl IHsKIAkJCVdBUk5fT05fT05DRShsYm1fc2l6ZSAhPSB2YzRfc3RhdGUtPmxibS5zaXplKTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0v dmlhL3ZpYV9tbS5jCmluZGV4IGEwNGVmMWM5OTJkOS4uNDIxN2Q2NmE1Y2M2IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9tbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEv dmlhX21tLmMKQEAgLTE0MCwxMSArMTQwLDExIEBAIGludCB2aWFfbWVtX2FsbG9jKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJaWYgKG1lbS0+dHlwZSA9PSBWSUFfTUVNX0FH UCkKIAkJcmV0dmFsID0gZHJtX21tX2luc2VydF9ub2RlKCZkZXZfcHJpdi0+YWdwX21tLAogCQkJ CQkgICAgJml0ZW0tPm1tX25vZGUsCi0JCQkJCSAgICB0bXBTaXplLCAwLCBEUk1fTU1fU0VBUkNI X0RFRkFVTFQpOworCQkJCQkgICAgdG1wU2l6ZSk7CiAJZWxzZQogCQlyZXR2YWwgPSBkcm1fbW1f aW5zZXJ0X25vZGUoJmRldl9wcml2LT52cmFtX21tLAogCQkJCQkgICAgJml0ZW0tPm1tX25vZGUs Ci0JCQkJCSAgICB0bXBTaXplLCAwLCBEUk1fTU1fU0VBUkNIX0RFRkFVTFQpOworCQkJCQkgICAg dG1wU2l6ZSk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsX2FsbG9jOwogCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jbWRidWYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X2NtZGJ1Zi5jCmluZGV4IGFhMDRmYjAxNTlhNy4uNzdjYjdjNjI3ZTA5 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jbWRidWYuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jbWRidWYuYwpAQCAtNjczLDE2ICs2NzMs MTAgQEAgc3RhdGljIGJvb2wgdm13X2NtZGJ1Zl90cnlfYWxsb2Moc3RydWN0IHZtd19jbWRidWZf bWFuICptYW4sCiAgCiAJbWVtc2V0KGluZm8tPm5vZGUsIDAsIHNpemVvZigqaW5mby0+bm9kZSkp OwogCXNwaW5fbG9ja19iaCgmbWFuLT5sb2NrKTsKLQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVf Z2VuZXJpYygmbWFuLT5tbSwgaW5mby0+bm9kZSwgaW5mby0+cGFnZV9zaXplLAotCQkJCQkgMCwg MCwKLQkJCQkJIERSTV9NTV9TRUFSQ0hfREVGQVVMVCwKLQkJCQkJIERSTV9NTV9DUkVBVEVfREVG QVVMVCk7CisJcmV0ID0gZHJtX21tX2luc2VydF9ub2RlKCZtYW4tPm1tLCBpbmZvLT5ub2RlLCBp bmZvLT5wYWdlX3NpemUpOwogCWlmIChyZXQpIHsKIAkJdm13X2NtZGJ1Zl9tYW5fcHJvY2Vzcyht YW4pOwotCQlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYygmbWFuLT5tbSwgaW5mby0+ bm9kZSwKLQkJCQkJCSBpbmZvLT5wYWdlX3NpemUsIDAsIDAsCi0JCQkJCQkgRFJNX01NX1NFQVJD SF9ERUZBVUxULAotCQkJCQkJIERSTV9NTV9DUkVBVEVfREVGQVVMVCk7CisJCXJldCA9IGRybV9t bV9pbnNlcnRfbm9kZSgmbWFuLT5tbSwgaW5mby0+bm9kZSwgaW5mby0+cGFnZV9zaXplKTsKIAl9 CiAKIAlzcGluX3VubG9ja19iaCgmbWFuLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJt L2RybV9tbS5oIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKaW5kZXggOTJlYzU3NTljYWFlLi42NTU4 Y2QwOGQ3YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9tbS5oCisrKyBiL2luY2x1ZGUv ZHJtL2RybV9tbS5oCkBAIC01NSwzMiArNTUsMjcgQEAKICNkZWZpbmUgRFJNX01NX0JVR19PTihl eHByKSBCVUlMRF9CVUdfT05fSU5WQUxJRChleHByKQogI2VuZGlmCiAKLWVudW0gZHJtX21tX3Nl YXJjaF9mbGFncyB7Ci0JRFJNX01NX1NFQVJDSF9ERUZBVUxUID0JCTAsCi0JRFJNX01NX1NFQVJD SF9CRVNUID0JCTEgPDwgMCwKLQlEUk1fTU1fU0VBUkNIX0JFTE9XID0JCTEgPDwgMSwKK2VudW0g ZHJtX21tX2luc2VydF9tb2RlIHsKKwlEUk1fTU1fSU5TRVJUX0JFU1QgPSAwLAorCURSTV9NTV9J TlNFUlRfTE9XLAorCURSTV9NTV9JTlNFUlRfSElHSCwKKwlEUk1fTU1fSU5TRVJUX0VWSUNULAog fTsKIAotZW51bSBkcm1fbW1fYWxsb2NhdG9yX2ZsYWdzIHsKLQlEUk1fTU1fQ1JFQVRFX0RFRkFV TFQgPQkJMCwKLQlEUk1fTU1fQ1JFQVRFX1RPUCA9CQkxIDw8IDAsCi19OwotCi0jZGVmaW5lIERS TV9NTV9CT1RUT01VUCBEUk1fTU1fU0VBUkNIX0RFRkFVTFQsIERSTV9NTV9DUkVBVEVfREVGQVVM VAotI2RlZmluZSBEUk1fTU1fVE9QRE9XTiBEUk1fTU1fU0VBUkNIX0JFTE9XLCBEUk1fTU1fQ1JF QVRFX1RPUAotCiBzdHJ1Y3QgZHJtX21tX25vZGUgeworCXN0cnVjdCBkcm1fbW0gKm1tOwogCXN0 cnVjdCBsaXN0X2hlYWQgbm9kZV9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgaG9sZV9zdGFjazsK IAlzdHJ1Y3QgcmJfbm9kZSByYjsKLQl1bnNpZ25lZCBob2xlX2ZvbGxvd3MgOiAxOwotCXVuc2ln bmVkIGFsbG9jYXRlZCA6IDE7Ci0JYm9vbCBzY2FubmVkX2Jsb2NrIDogMTsKLQl1bnNpZ25lZCBs b25nIGNvbG9yOworCXN0cnVjdCByYl9ub2RlIHJiX2hvbGVfc2l6ZTsKKwlzdHJ1Y3QgcmJfbm9k ZSByYl9ob2xlX2FkZHI7CiAJdTY0IHN0YXJ0OwogCXU2NCBzaXplOwogCXU2NCBfX3N1YnRyZWVf bGFzdDsKLQlzdHJ1Y3QgZHJtX21tICptbTsKKwl1NjQgaG9sZV9zaXplOworCXVuc2lnbmVkIGxv bmcgY29sb3I7CisJYm9vbCBhbGxvY2F0ZWQgOiAxOworCWJvb2wgc2Nhbm5lZF9ibG9jayA6IDE7 CiAjaWZkZWYgQ09ORklHX0RSTV9ERUJVR19NTQogCWRlcG90X3N0YWNrX2hhbmRsZV90IHN0YWNr OwogI2VuZGlmCkBAIC05NCw2ICs4OSw4IEBAIHN0cnVjdCBkcm1fbW0gewogCXN0cnVjdCBkcm1f bW1fbm9kZSBoZWFkX25vZGU7CiAJLyogS2VlcCBhbiBpbnRlcnZhbF90cmVlIGZvciBmYXN0IGxv b2t1cCBvZiBkcm1fbW1fbm9kZXMgYnkgYWRkcmVzcy4gKi8KIAlzdHJ1Y3QgcmJfcm9vdCBpbnRl cnZhbF90cmVlOworCXN0cnVjdCByYl9yb290IGhvbGVzX3NpemU7CisJc3RydWN0IHJiX3Jvb3Qg aG9sZXNfYWRkcjsKIAogCXZvaWQgKCpjb2xvcl9hZGp1c3QpKGNvbnN0IHN0cnVjdCBkcm1fbW1f bm9kZSAqbm9kZSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBjb2xvciwKQEAgLTExNiw3ICsxMTMs NyBAQCBzdHJ1Y3QgZHJtX21tX3NjYW4gewogCXU2NCBoaXRfZW5kOwogCiAJdW5zaWduZWQgbG9u ZyBjb2xvcjsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJZW51bSBkcm1fbW1faW5zZXJ0X21vZGUg bW9kZTsKIH07CiAKIC8qKgpAQCAtMTY4LDcgKzE2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBk cm1fbW1faW5pdGlhbGl6ZWQoY29uc3Qgc3RydWN0IGRybV9tbSAqbW0pCiAgKi8KIHN0YXRpYyBp bmxpbmUgYm9vbCBkcm1fbW1faG9sZV9mb2xsb3dzKGNvbnN0IHN0cnVjdCBkcm1fbW1fbm9kZSAq bm9kZSkKIHsKLQlyZXR1cm4gbm9kZS0+aG9sZV9mb2xsb3dzOworCXJldHVybiBub2RlLT5ob2xl X3NpemU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTY0IF9fZHJtX21tX2hvbGVfbm9kZV9zdGFydChj b25zdCBzdHJ1Y3QgZHJtX21tX25vZGUgKmhvbGVfbm9kZSkKQEAgLTI1MSwxNCArMjQ4LDYgQEAg c3RhdGljIGlubGluZSB1NjQgZHJtX21tX2hvbGVfbm9kZV9lbmQoY29uc3Qgc3RydWN0IGRybV9t bV9ub2RlICpob2xlX25vZGUpCiAjZGVmaW5lIGRybV9tbV9mb3JfZWFjaF9ub2RlX3NhZmUoZW50 cnksIG5leHQsIG1tKSBcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCBk cm1fbW1fbm9kZXMobW0pLCBub2RlX2xpc3QpCiAKLSNkZWZpbmUgX19kcm1fbW1fZm9yX2VhY2hf aG9sZShlbnRyeSwgbW0sIGhvbGVfc3RhcnQsIGhvbGVfZW5kLCBiYWNrd2FyZHMpIFwKLQlmb3Ig KGVudHJ5ID0gbGlzdF9lbnRyeSgoYmFja3dhcmRzKSA/IChtbSktPmhvbGVfc3RhY2sucHJldiA6 IChtbSktPmhvbGVfc3RhY2submV4dCwgc3RydWN0IGRybV9tbV9ub2RlLCBob2xlX3N0YWNrKTsg XAotCSAgICAgJmVudHJ5LT5ob2xlX3N0YWNrICE9ICYobW0pLT5ob2xlX3N0YWNrID8gXAotCSAg ICAgaG9sZV9zdGFydCA9IGRybV9tbV9ob2xlX25vZGVfc3RhcnQoZW50cnkpLCBcCi0JICAgICBo b2xlX2VuZCA9IGRybV9tbV9ob2xlX25vZGVfZW5kKGVudHJ5KSwgXAotCSAgICAgMSA6IDA7IFwK LQkgICAgIGVudHJ5ID0gbGlzdF9lbnRyeSgoYmFja3dhcmRzKSA/IGVudHJ5LT5ob2xlX3N0YWNr LnByZXYgOiBlbnRyeS0+aG9sZV9zdGFjay5uZXh0LCBzdHJ1Y3QgZHJtX21tX25vZGUsIGhvbGVf c3RhY2spKQotCiAvKioKICAqIGRybV9tbV9mb3JfZWFjaF9ob2xlIC0gaXRlcmF0b3IgdG8gd2Fs ayBvdmVyIGFsbCBob2xlcwogICogQGVudHJ5OiBkcm1fbW1fbm9kZSB1c2VkIGludGVybmFsbHkg dG8gdHJhY2sgcHJvZ3Jlc3MKQEAgLTI3NCw1NyArMjYzLDI3IEBAIHN0YXRpYyBpbmxpbmUgdTY0 IGRybV9tbV9ob2xlX25vZGVfZW5kKGNvbnN0IHN0cnVjdCBkcm1fbW1fbm9kZSAqaG9sZV9ub2Rl KQogICogSW1wbGVtZW50YXRpb24gTm90ZToKICAqIFdlIG5lZWQgdG8gaW5saW5lIGxpc3RfZm9y X2VhY2hfZW50cnkgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzZXQgaG9sZV9zdGFydAogICogYW5k IGhvbGVfZW5kIG9uIGVhY2ggaXRlcmF0aW9uIHdoaWxlIGtlZXBpbmcgdGhlIG1hY3JvIHNhbmUu Ci0gKgotICogVGhlIF9fZHJtX21tX2Zvcl9lYWNoX2hvbGUgdmVyc2lvbiBpcyBzaW1pbGFyLCBi dXQgd2l0aCBhZGRlZCBzdXBwb3J0IGZvcgotICogZ29pbmcgYmFja3dhcmRzLgogICovCi0jZGVm aW5lIGRybV9tbV9mb3JfZWFjaF9ob2xlKGVudHJ5LCBtbSwgaG9sZV9zdGFydCwgaG9sZV9lbmQp IFwKLQlfX2RybV9tbV9mb3JfZWFjaF9ob2xlKGVudHJ5LCBtbSwgaG9sZV9zdGFydCwgaG9sZV9l bmQsIDApCisjZGVmaW5lIGRybV9tbV9mb3JfZWFjaF9ob2xlKHBvcywgbW0sIGhvbGVfc3RhcnQs IGhvbGVfZW5kKSBcCisJZm9yIChwb3MgPSBsaXN0X2ZpcnN0X2VudHJ5KCYobW0pLT5ob2xlX3N0 YWNrLCBcCisJCQkJICAgIHR5cGVvZigqcG9zKSwgaG9sZV9zdGFjayk7IFwKKwkgICAgICZwb3Mt PmhvbGVfc3RhY2sgIT0gJihtbSktPmhvbGVfc3RhY2sgPyBcCisJICAgICBob2xlX3N0YXJ0ID0g ZHJtX21tX2hvbGVfbm9kZV9zdGFydChwb3MpLCBcCisJICAgICBob2xlX2VuZCA9IGhvbGVfc3Rh cnQgKyBwb3MtPmhvbGVfc2l6ZSA6IDA7IFwKKwkgICAgIHBvcyA9IGxpc3RfbmV4dF9lbnRyeShw b3MsIGhvbGVfc3RhY2spKQogCiAvKgogICogQmFzaWMgcmFuZ2UgbWFuYWdlciBzdXBwb3J0IChk cm1fbW0uYykKICAqLwogaW50IGRybV9tbV9yZXNlcnZlX25vZGUoc3RydWN0IGRybV9tbSAqbW0s IHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSk7Ci1pbnQgZHJtX21tX2luc2VydF9ub2RlX2luX3Jh bmdlX2dlbmVyaWMoc3RydWN0IGRybV9tbSAqbW0sCi0JCQkJCXN0cnVjdCBkcm1fbW1fbm9kZSAq bm9kZSwKLQkJCQkJdTY0IHNpemUsCi0JCQkJCXU2NCBhbGlnbm1lbnQsCi0JCQkJCXVuc2lnbmVk IGxvbmcgY29sb3IsCi0JCQkJCXU2NCBzdGFydCwKLQkJCQkJdTY0IGVuZCwKLQkJCQkJZW51bSBk cm1fbW1fc2VhcmNoX2ZsYWdzIHNmbGFncywKLQkJCQkJZW51bSBkcm1fbW1fYWxsb2NhdG9yX2Zs YWdzIGFmbGFncyk7Ci0KLS8qKgotICogZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlIC0gcmFu Z2VkIHNlYXJjaCBmb3Igc3BhY2UgYW5kIGluc2VydCBAbm9kZQotICogQG1tOiBkcm1fbW0gdG8g YWxsb2NhdGUgZnJvbQotICogQG5vZGU6IHByZWFsbG9jYXRlIG5vZGUgdG8gaW5zZXJ0Ci0gKiBA c2l6ZTogc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgotICogQGFsaWdubWVudDogYWxpZ25tZW50IG9m IHRoZSBhbGxvY2F0aW9uCi0gKiBAc3RhcnQ6IHN0YXJ0IG9mIHRoZSBhbGxvd2VkIHJhbmdlIGZv ciB0aGlzIG5vZGUKLSAqIEBlbmQ6IGVuZCBvZiB0aGUgYWxsb3dlZCByYW5nZSBmb3IgdGhpcyBu b2RlCi0gKiBAZmxhZ3M6IGZsYWdzIHRvIGZpbmUtdHVuZSB0aGUgYWxsb2NhdGlvbgotICoKLSAq IFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgZHJtX21tX2luc2VydF9ub2RlX2luX3Jh bmdlX2dlbmVyaWMoKSB3aXRoCi0gKiBAY29sb3Igc2V0IHRvIDAuCi0gKgotICogVGhlIHByZWFs bG9jYXRlZCBub2RlIG11c3QgYmUgY2xlYXJlZCB0byAwLgotICoKLSAqIFJldHVybnM6Ci0gKiAw IG9uIHN1Y2Nlc3MsIC1FTk9TUEMgaWYgdGhlcmUncyBubyBzdWl0YWJsZSBob2xlLgotICovCi1z dGF0aWMgaW5saW5lIGludCBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2Uoc3RydWN0IGRybV9t bSAqbW0sCi0JCQkJCSAgICAgIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKLQkJCQkJICAgICAg dTY0IHNpemUsCi0JCQkJCSAgICAgIHU2NCBhbGlnbm1lbnQsCi0JCQkJCSAgICAgIHU2NCBzdGFy dCwKLQkJCQkJICAgICAgdTY0IGVuZCwKLQkJCQkJICAgICAgZW51bSBkcm1fbW1fc2VhcmNoX2Zs YWdzIGZsYWdzKQotewotCXJldHVybiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2VuZXJp YyhtbSwgbm9kZSwgc2l6ZSwgYWxpZ25tZW50LAotCQkJCQkJICAgMCwgc3RhcnQsIGVuZCwgZmxh Z3MsCi0JCQkJCQkgICBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQpOwotfQoraW50IGRybV9tbV9pbnNl cnRfbm9kZV9pbl9yYW5nZShzdHJ1Y3QgZHJtX21tICptbSwKKwkJCQlzdHJ1Y3QgZHJtX21tX25v ZGUgKm5vZGUsCisJCQkJdTY0IHNpemUsCisJCQkJdTY0IGFsaWdubWVudCwKKwkJCQl1bnNpZ25l ZCBsb25nIGNvbG9yLAorCQkJCXU2NCBzdGFydCwKKwkJCQl1NjQgZW5kLAorCQkJCWVudW0gZHJt X21tX2luc2VydF9tb2RlIG1vZGUpOwogCiAvKioKICAqIGRybV9tbV9pbnNlcnRfbm9kZV9nZW5l cmljIC0gc2VhcmNoIGZvciBzcGFjZSBhbmQgaW5zZXJ0IEBub2RlCkBAIC0zMzMsOCArMjkyLDcg QEAgc3RhdGljIGlubGluZSBpbnQgZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKHN0cnVjdCBk cm1fbW0gKm1tLAogICogQHNpemU6IHNpemUgb2YgdGhlIGFsbG9jYXRpb24KICAqIEBhbGlnbm1l bnQ6IGFsaWdubWVudCBvZiB0aGUgYWxsb2NhdGlvbgogICogQGNvbG9yOiBvcGFxdWUgdGFnIHZh bHVlIHRvIHVzZSBmb3IgdGhpcyBub2RlCi0gKiBAc2ZsYWdzOiBmbGFncyB0byBmaW5lLXR1bmUg dGhlIGFsbG9jYXRpb24gc2VhcmNoCi0gKiBAYWZsYWdzOiBmbGFncyB0byBmaW5lLXR1bmUgdGhl IGFsbG9jYXRpb24gYmVoYXZpb3IKKyAqIEBtb2RlOiBmaW5lLXR1bmUgdGhlIGFsbG9jYXRpb24g c2VhcmNoIGFuZCBwbGFjZW1lbnQKICAqCiAgKiBUaGUgcHJlYWxsb2NhdGVkIG5vZGUgbXVzdCBi ZSBjbGVhcmVkIHRvIDAuCiAgKgpAQCAtMzQ1LDEzICszMDMsMTEgQEAgc3RhdGljIGlubGluZSBp bnQKIGRybV9tbV9pbnNlcnRfbm9kZV9nZW5lcmljKHN0cnVjdCBkcm1fbW0gKm1tLCBzdHJ1Y3Qg ZHJtX21tX25vZGUgKm5vZGUsCiAJCQkgICB1NjQgc2l6ZSwgdTY0IGFsaWdubWVudCwKIAkJCSAg IHVuc2lnbmVkIGxvbmcgY29sb3IsCi0JCQkgICBlbnVtIGRybV9tbV9zZWFyY2hfZmxhZ3Mgc2Zs YWdzLAotCQkJICAgZW51bSBkcm1fbW1fYWxsb2NhdG9yX2ZsYWdzIGFmbGFncykKKwkJCSAgIGVu dW0gZHJtX21tX2luc2VydF9tb2RlIG1vZGUpCiB7Ci0JcmV0dXJuIGRybV9tbV9pbnNlcnRfbm9k ZV9pbl9yYW5nZV9nZW5lcmljKG1tLCBub2RlLAotCQkJCQkJICAgc2l6ZSwgYWxpZ25tZW50LCAw LAotCQkJCQkJICAgMCwgVTY0X01BWCwKLQkJCQkJCSAgIHNmbGFncywgYWZsYWdzKTsKKwlyZXR1 cm4gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlKG1tLCBub2RlLAorCQkJCQkgICBzaXplLCBh bGlnbm1lbnQsIGNvbG9yLAorCQkJCQkgICAwLCBVNjRfTUFYLCBtb2RlKTsKIH0KIAogLyoqCkBA IC0zNTksOCArMzE1LDYgQEAgZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMoc3RydWN0IGRybV9t bSAqbW0sIHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwKICAqIEBtbTogZHJtX21tIHRvIGFsbG9j YXRlIGZyb20KICAqIEBub2RlOiBwcmVhbGxvY2F0ZSBub2RlIHRvIGluc2VydAogICogQHNpemU6 IHNpemUgb2YgdGhlIGFsbG9jYXRpb24KLSAqIEBhbGlnbm1lbnQ6IGFsaWdubWVudCBvZiB0aGUg YWxsb2NhdGlvbgotICogQGZsYWdzOiBmbGFncyB0byBmaW5lLXR1bmUgdGhlIGFsbG9jYXRpb24K ICAqCiAgKiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIGRybV9tbV9pbnNlcnRfbm9k ZV9nZW5lcmljKCkgd2l0aCBAY29sb3Igc2V0CiAgKiB0byAwLgpAQCAtMzcyLDEzICszMjYsOSBA QCBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYyhzdHJ1Y3QgZHJtX21tICptbSwgc3RydWN0IGRy bV9tbV9ub2RlICpub2RlLAogICovCiBzdGF0aWMgaW5saW5lIGludCBkcm1fbW1faW5zZXJ0X25v ZGUoc3RydWN0IGRybV9tbSAqbW0sCiAJCQkJICAgICBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUs Ci0JCQkJICAgICB1NjQgc2l6ZSwKLQkJCQkgICAgIHU2NCBhbGlnbm1lbnQsCi0JCQkJICAgICBl bnVtIGRybV9tbV9zZWFyY2hfZmxhZ3MgZmxhZ3MpCisJCQkJICAgICB1NjQgc2l6ZSkKIHsKLQly ZXR1cm4gZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMobW0sIG5vZGUsCi0JCQkJCSAgc2l6ZSwg YWxpZ25tZW50LCAwLAotCQkJCQkgIGZsYWdzLCBEUk1fTU1fQ1JFQVRFX0RFRkFVTFQpOworCXJl dHVybiBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYyhtbSwgbm9kZSwgc2l6ZSwgMCwgMCwgMCk7 CiB9CiAKIHZvaWQgZHJtX21tX3JlbW92ZV9ub2RlKHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSk7 CkBAIC00MjUsNyArMzc1LDcgQEAgdm9pZCBkcm1fbW1fc2Nhbl9pbml0X3dpdGhfcmFuZ2Uoc3Ry dWN0IGRybV9tbV9zY2FuICpzY2FuLAogCQkJCSBzdHJ1Y3QgZHJtX21tICptbSwKIAkJCQkgdTY0 IHNpemUsIHU2NCBhbGlnbm1lbnQsIHVuc2lnbmVkIGxvbmcgY29sb3IsCiAJCQkJIHU2NCBzdGFy dCwgdTY0IGVuZCwKLQkJCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKKwkJCQkgZW51bSBkcm1fbW1f aW5zZXJ0X21vZGUgbW9kZSk7CiAKIC8qKgogICogZHJtX21tX3NjYW5faW5pdCAtIGluaXRpYWxp emUgbHJ1IHNjYW5uaW5nCkBAIC00MzQsNyArMzg0LDcgQEAgdm9pZCBkcm1fbW1fc2Nhbl9pbml0 X3dpdGhfcmFuZ2Uoc3RydWN0IGRybV9tbV9zY2FuICpzY2FuLAogICogQHNpemU6IHNpemUgb2Yg dGhlIGFsbG9jYXRpb24KICAqIEBhbGlnbm1lbnQ6IGFsaWdubWVudCBvZiB0aGUgYWxsb2NhdGlv bgogICogQGNvbG9yOiBvcGFxdWUgdGFnIHZhbHVlIHRvIHVzZSBmb3IgdGhlIGFsbG9jYXRpb24K LSAqIEBmbGFnczogZmxhZ3MgdG8gc3BlY2lmeSBob3cgdGhlIGFsbG9jYXRpb24gd2lsbCBiZSBw ZXJmb3JtZWQgYWZ0ZXJ3YXJkcworICogQG1vZGU6IGZpbmUtdHVuZSB0aGUgYWxsb2NhdGlvbiBz ZWFyY2ggYW5kIHBsYWNlbWVudAogICoKICAqIFRoaXMgc2ltcGx5IHNldHMgdXAgdGhlIHNjYW5u aW5nIHJvdXRpbmVzIHdpdGggdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkZXNpcmVkCiAgKiBob2xl LgpAQCAtNDQ4LDEyICszOTgsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGRybV9tbV9zY2FuX2lu aXQoc3RydWN0IGRybV9tbV9zY2FuICpzY2FuLAogCQkJCSAgICB1NjQgc2l6ZSwKIAkJCQkgICAg dTY0IGFsaWdubWVudCwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBjb2xvciwKLQkJCQkgICAgdW5z aWduZWQgaW50IGZsYWdzKQorCQkJCSAgICBlbnVtIGRybV9tbV9pbnNlcnRfbW9kZSBtb2RlKQog ewogCWRybV9tbV9zY2FuX2luaXRfd2l0aF9yYW5nZShzY2FuLCBtbSwKIAkJCQkgICAgc2l6ZSwg YWxpZ25tZW50LCBjb2xvciwKLQkJCQkgICAgMCwgVTY0X01BWCwKLQkJCQkgICAgZmxhZ3MpOwor CQkJCSAgICAwLCBVNjRfTUFYLCBtb2RlKTsKIH0KIAogYm9vbCBkcm1fbW1fc2Nhbl9hZGRfYmxv Y2soc3RydWN0IGRybV9tbV9zY2FuICpzY2FuLAotLSAKMi4xMS4wCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK