From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH 4/9] drm/vc4: Add an API for creating GPU shaders in GEM BOs. Date: Tue, 1 Dec 2015 12:35:53 -0800 Message-ID: <1449002158-19156-4-git-send-email-eric@anholt.net> References: <1449002158-19156-1-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1449002158-19156-1-git-send-email-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org U2luY2Ugd2UgaGF2ZSBubyBNTVUsIHRoZSBrZXJuZWwgbmVlZHMgdG8gdmFsaWRhdGUgdGhhdCB0 aGUgc3VibWl0dGVkCnNoYWRlciBjb2RlIHdvbid0IG1ha2UgYW55IGFjY2Vzc2VzIHRvIG1lbW9y eSB0aGF0IHRoZSB1c2VyIGRvZXNuJ3QKY29udHJvbCwgd2hpY2ggaW52b2x2ZXMgYmFubmluZyBz b21lIG9wZXJhdGlvbnMgKGdlbmVyYWwgcHVycG9zZSBETUEKd3JpdGVzKSwgYW5kIHRyYWNraW5n IHdoZXJlIHdlIG5lZWQgdG8gd3JpdGUgb3V0IHBvaW50ZXJzIGZvciBvdGhlcgpvcGVyYXRpb25z ICh0ZXh0dXJlIHNhbXBsaW5nKS4gIE9uY2UgaXQncyB2YWxpZGF0ZWQsIHdlIHJldHVybiBhIEdF TQpCTyBjb250YWluaW5nIHRoZSBzaGFkZXIsIHdoaWNoIGRvZXNuJ3QgYWxsb3cgbWFwcGluZyBm b3Igd3JpdGUgb3IKZXhwb3J0aW5nIHRvIG90aGVyIHN1YnN5c3RlbXMuCgpTaWduZWQtb2ZmLWJ5 OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotLS0KIGRyaXZlcnMvZ3B1L2RybS92YzQv TWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf Ym8uYyAgICAgICAgICAgICAgIHwgMTQwICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9kcnYuYyAgICAgICAgICAgICAgfCAgIDkgKy0KIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Ry di5oICAgICAgICAgICAgICB8ICA1MCArKysKIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3FwdV9k ZWZpbmVzLmggICAgICB8IDI2NCArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92YzQv dmM0X3ZhbGlkYXRlX3NoYWRlcnMuYyB8IDUxMyArKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogaW5jbHVkZS91YXBpL2RybS92YzRfZHJtLmggICAgICAgICAgICAgICAgIHwgIDI1ICsrCiA3 IGZpbGVzIGNoYW5nZWQsIDk5OSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3FwdV9kZWZpbmVzLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF92YWxpZGF0ZV9zaGFkZXJzLmMK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC9NYWtlZmlsZQppbmRleCAzMmI0ZjljLi5lYjc3NmE2IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vdmM0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvTWFrZWZp bGUKQEAgLTEwLDcgKzEwLDggQEAgdmM0LXkgOj0gXAogCXZjNF9rbXMubyBcCiAJdmM0X2hkbWku byBcCiAJdmM0X2h2cy5vIFwKLQl2YzRfcGxhbmUubworCXZjNF9wbGFuZS5vIFwKKwl2YzRfdmFs aWRhdGVfc2hhZGVycy5vCiAKIHZjNC0kKENPTkZJR19ERUJVR19GUykgKz0gdmM0X2RlYnVnZnMu bwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jIGIvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfYm8uYwppbmRleCAwNmNiYTI2Li4xOGRmZTNlIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9iby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0 X2JvLmMKQEAgLTc5LDYgKzc5LDEyIEBAIHN0YXRpYyB2b2lkIHZjNF9ib19kZXN0cm95KHN0cnVj dCB2YzRfYm8gKmJvKQogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJmJvLT5iYXNlLmJh c2U7CiAJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYob2JqLT5kZXYpOwogCisJaWYg KGJvLT52YWxpZGF0ZWRfc2hhZGVyKSB7CisJCWtmcmVlKGJvLT52YWxpZGF0ZWRfc2hhZGVyLT50 ZXh0dXJlX3NhbXBsZXMpOworCQlrZnJlZShiby0+dmFsaWRhdGVkX3NoYWRlcik7CisJCWJvLT52 YWxpZGF0ZWRfc2hhZGVyID0gTlVMTDsKKwl9CisKIAl2YzQtPmJvX3N0YXRzLm51bV9hbGxvY2F0 ZWQtLTsKIAl2YzQtPmJvX3N0YXRzLnNpemVfYWxsb2NhdGVkIC09IG9iai0+c2l6ZTsKIAlkcm1f Z2VtX2NtYV9mcmVlX29iamVjdChvYmopOwpAQCAtMzE1LDYgKzMyMSwxMiBAQCB2b2lkIHZjNF9m cmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9ibykKIAkJZ290byBvdXQ7CiAJ fQogCisJaWYgKGJvLT52YWxpZGF0ZWRfc2hhZGVyKSB7CisJCWtmcmVlKGJvLT52YWxpZGF0ZWRf c2hhZGVyLT50ZXh0dXJlX3NhbXBsZXMpOworCQlrZnJlZShiby0+dmFsaWRhdGVkX3NoYWRlcik7 CisJCWJvLT52YWxpZGF0ZWRfc2hhZGVyID0gTlVMTDsKKwl9CisKIAliby0+ZnJlZV90aW1lID0g amlmZmllczsKIAlsaXN0X2FkZCgmYm8tPnNpemVfaGVhZCwgY2FjaGVfbGlzdCk7CiAJbGlzdF9h ZGQoJmJvLT51bnJlZl9oZWFkLCAmdmM0LT5ib19jYWNoZS50aW1lX2xpc3QpOwpAQCAtMzQ3LDYg KzM1OSw3OCBAQCBzdGF0aWMgdm9pZCB2YzRfYm9fY2FjaGVfdGltZV90aW1lcih1bnNpZ25lZCBs b25nIGRhdGEpCiAJc2NoZWR1bGVfd29yaygmdmM0LT5ib19jYWNoZS50aW1lX3dvcmspOwogfQog CitzdHJ1Y3QgZG1hX2J1ZiAqCit2YzRfcHJpbWVfZXhwb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHZj NF9ibyAqYm8gPSB0b192YzRfYm8ob2JqKTsKKworCWlmIChiby0+dmFsaWRhdGVkX3NoYWRlcikg eworCQlEUk1fRVJST1IoIkF0dGVtcHRpbmcgdG8gZXhwb3J0IHNoYWRlciBCT1xuIik7CisJCXJl dHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCXJldHVybiBkcm1fZ2VtX3ByaW1lX2V4cG9y dChkZXYsIG9iaiwgZmxhZ3MpOworfQorCitpbnQgdmM0X21tYXAoc3RydWN0IGZpbGUgKmZpbHAs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAq Z2VtX29iajsKKwlzdHJ1Y3QgdmM0X2JvICpibzsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2dl bV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWdlbV9vYmog PSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlibyA9IHRvX3ZjNF9ibyhnZW1fb2JqKTsKKworCWlm IChiby0+dmFsaWRhdGVkX3NoYWRlciAmJiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkgewor CQlEUk1fRVJST1IoIm1tYXBpbmcgb2Ygc2hhZGVyIEJPcyBmb3Igd3JpdGluZyBub3QgYWxsb3dl ZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIENsZWFyIHRoZSBWTV9Q Rk5NQVAgZmxhZyB0aGF0IHdhcyBzZXQgYnkgZHJtX2dlbV9tbWFwKCksIGFuZCBzZXQgdGhlCisJ ICogdm1fcGdvZmYgKHVzZWQgYXMgYSBmYWtlIGJ1ZmZlciBvZmZzZXQgYnkgRFJNKSB0byAwIGFz IHdlIHdhbnQgdG8gbWFwCisJICogdGhlIHdob2xlIGJ1ZmZlci4KKwkgKi8KKwl2bWEtPnZtX2Zs YWdzICY9IH5WTV9QRk5NQVA7CisJdm1hLT52bV9wZ29mZiA9IDA7CisKKwlyZXQgPSBkbWFfbW1h cF93cml0ZWNvbWJpbmUoYm8tPmJhc2UuYmFzZS5kZXYtPmRldiwgdm1hLAorCQkJCSAgICBiby0+ YmFzZS52YWRkciwgYm8tPmJhc2UucGFkZHIsCisJCQkJICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52 bV9zdGFydCk7CisJaWYgKHJldCkKKwkJZHJtX2dlbV92bV9jbG9zZSh2bWEpOworCisJcmV0dXJu IHJldDsKK30KKworaW50IHZjNF9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdmM0X2JvICpibyA9IHRv X3ZjNF9ibyhvYmopOworCisJaWYgKGJvLT52YWxpZGF0ZWRfc2hhZGVyICYmICh2bWEtPnZtX2Zs YWdzICYgVk1fV1JJVEUpKSB7CisJCURSTV9FUlJPUigibW1hcGluZyBvZiBzaGFkZXIgQk9zIGZv ciB3cml0aW5nIG5vdCBhbGxvd2VkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJl dHVybiBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwKG9iaiwgdm1hKTsKK30KKwordm9pZCAqdmM0X3By aW1lX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IHZjNF9ibyAq Ym8gPSB0b192YzRfYm8ob2JqKTsKKworCWlmIChiby0+dmFsaWRhdGVkX3NoYWRlcikgeworCQlE Uk1fRVJST1IoIm1tYXBpbmcgb2Ygc2hhZGVyIEJPcyBub3QgYWxsb3dlZC5cbiIpOworCQlyZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlyZXR1cm4gZHJtX2dlbV9jbWFfcHJpbWVfdm1h cChvYmopOworfQorCiBpbnQgdmM0X2NyZWF0ZV9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAogCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CkBAIC0z ODcsNiArNDcxLDYyIEBAIGludCB2YzRfbW1hcF9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAogCXJldHVybiAwOwogfQogCitpbnQKK3ZjNF9jcmVhdGVfc2hhZGVy X2JvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3ZjNF9jcmVhdGVfc2hhZGVy X2JvICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgdmM0X2JvICpibyA9IE5VTEw7CisJaW50IHJldDsK KworCWlmIChhcmdzLT5zaXplID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFyZ3Mt PnNpemUgJSBzaXplb2YodTY0KSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmdz LT5mbGFncyAhPSAwKSB7CisJCURSTV9JTkZPKCJVbmtub3duIGZsYWdzIHNldDogMHglMDh4XG4i LCBhcmdzLT5mbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhcmdzLT5wYWQg IT0gMCkgeworCQlEUk1fSU5GTygiUGFkIHNldDogMHglMDh4XG4iLCBhcmdzLT5wYWQpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibyA9IHZjNF9ib19jcmVhdGUoZGV2LCBhcmdzLT5zaXpl LCB0cnVlKTsKKwlpZiAoIWJvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGNvcHlfZnJv bV91c2VyKGJvLT5iYXNlLnZhZGRyLAorCQkJICAgICAodm9pZCBfX3VzZXIgKikodWludHB0cl90 KWFyZ3MtPmRhdGEsCisJCQkgICAgIGFyZ3MtPnNpemUpOworCWlmIChyZXQgIT0gMCkKKwkJZ290 byBmYWlsOworCS8qIENsZWFyIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgZnJvbSBhbGxvY2F0aW5n IGZyb20gdGhlIEJPCisJICogY2FjaGUuCisJICovCisJbWVtc2V0KGJvLT5iYXNlLnZhZGRyICsg YXJncy0+c2l6ZSwgMCwKKwkgICAgICAgYm8tPmJhc2UuYmFzZS5zaXplIC0gYXJncy0+c2l6ZSk7 CisKKwliby0+dmFsaWRhdGVkX3NoYWRlciA9IHZjNF92YWxpZGF0ZV9zaGFkZXIoJmJvLT5iYXNl KTsKKwlpZiAoIWJvLT52YWxpZGF0ZWRfc2hhZGVyKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdv dG8gZmFpbDsKKwl9CisKKwkvKiBXZSBoYXZlIHRvIGNyZWF0ZSB0aGUgaGFuZGxlIGFmdGVyIHZh bGlkYXRpb24sIHRvIGF2b2lkCisJICogcmFjZXMgZm9yIHVzZXJzIHRvIGRvIGRvaW5nIHRoaW5n cyBsaWtlIG1tYXAgdGhlIHNoYWRlciBCTy4KKwkgKi8KKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9j cmVhdGUoZmlsZV9wcml2LCAmYm8tPmJhc2UuYmFzZSwgJmFyZ3MtPmhhbmRsZSk7CisKKyBmYWls OgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZiby0+YmFzZS5iYXNlKTsK KworCXJldHVybiByZXQ7Cit9CisKIHZvaWQgdmM0X2JvX2NhY2hlX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMgYi9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9kcnYuYwppbmRleCA1ZmE0Njg4Li5kYTRiZTljIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9k cnYuYwpAQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9u cyB2YzRfZHJtX2ZvcHMgPSB7CiAJLm9wZW4gPSBkcm1fb3BlbiwKIAkucmVsZWFzZSA9IGRybV9y ZWxlYXNlLAogCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKLQkubW1hcCA9IGRybV9nZW1f Y21hX21tYXAsCisJLm1tYXAgPSB2YzRfbW1hcCwKIAkucG9sbCA9IGRybV9wb2xsLAogCS5yZWFk ID0gZHJtX3JlYWQsCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtNzYsNiArNzYsNyBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2YzRfZHJtX2ZvcHMgPSB7CiBzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIHZjNF9kcm1faW9jdGxzW10gPSB7CiAJRFJNX0lP Q1RMX0RFRl9EUlYoVkM0X0NSRUFURV9CTywgdmM0X2NyZWF0ZV9ib19pb2N0bCwgMCksCiAJRFJN X0lPQ1RMX0RFRl9EUlYoVkM0X01NQVBfQk8sIHZjNF9tbWFwX2JvX2lvY3RsLCAwKSwKKwlEUk1f SU9DVExfREVGX0RSVihWQzRfQ1JFQVRFX1NIQURFUl9CTywgdmM0X2NyZWF0ZV9zaGFkZXJfYm9f aW9jdGwsIDApLAogfTsKIAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIHZjNF9kcm1fZHJpdmVy ID0gewpAQCAtMTAyLDEyICsxMDMsMTIgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIHZjNF9k cm1fZHJpdmVyID0gewogCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRs ZV90b19mZCwKIAkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5k bGUsCiAJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKLQkuZ2VtX3By aW1lX2V4cG9ydCA9IGRybV9nZW1fcHJpbWVfZXhwb3J0LAorCS5nZW1fcHJpbWVfZXhwb3J0ID0g dmM0X3ByaW1lX2V4cG9ydCwKIAkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZQk9IGRybV9nZW1fY21h X3ByaW1lX2dldF9zZ190YWJsZSwKIAkuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGRybV9n ZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwKLQkuZ2VtX3ByaW1lX3ZtYXAgPSBkcm1fZ2Vt X2NtYV9wcmltZV92bWFwLAorCS5nZW1fcHJpbWVfdm1hcCA9IHZjNF9wcmltZV92bWFwLAogCS5n ZW1fcHJpbWVfdnVubWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfdnVubWFwLAotCS5nZW1fcHJpbWVf bW1hcCA9IGRybV9nZW1fY21hX3ByaW1lX21tYXAsCisJLmdlbV9wcmltZV9tbWFwID0gdmM0X3By aW1lX21tYXAsCiAKIAkuZHVtYl9jcmVhdGUgPSB2YzRfZHVtYl9jcmVhdGUsCiAJLmR1bWJfbWFw X29mZnNldCA9IGRybV9nZW1fY21hX2R1bWJfbWFwX29mZnNldCwKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgK aW5kZXggZmRkYjBhMC4uYmQ3N2Q1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKQEAgLTY5LDYgKzY5 LDExIEBAIHN0cnVjdCB2YzRfYm8gewogCiAJLyogTGlzdCBlbnRyeSBmb3IgdGhlIEJPJ3MgcG9z aXRpb24gaW4gdmM0X2Rldi0+Ym9fY2FjaGUuc2l6ZV9saXN0ICovCiAJc3RydWN0IGxpc3RfaGVh ZCBzaXplX2hlYWQ7CisKKwkvKiBTdHJ1Y3QgZm9yIHNoYWRlciB2YWxpZGF0aW9uIHN0YXRlLCBp ZiBjcmVhdGVkIGJ5CisJICogRFJNX0lPQ1RMX1ZDNF9DUkVBVEVfU0hBREVSX0JPLgorCSAqLwor CXN0cnVjdCB2YzRfdmFsaWRhdGVkX3NoYWRlcl9pbmZvICp2YWxpZGF0ZWRfc2hhZGVyOwogfTsK IAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdmM0X2JvICoKQEAgLTExOCw2ICsxMjMsNDIgQEAgdG9f dmM0X2VuY29kZXIoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogI2RlZmluZSBIVlNfV1JJ VEUob2Zmc2V0LCB2YWwpIHdyaXRlbCh2YWwsIHZjNC0+aHZzLT5yZWdzICsgb2Zmc2V0KQogCiAv KioKKyAqIHN0cnVjdCB2YzRfdGV4dHVyZV9zYW1wbGVfaW5mbyAtIHNhdmVzIHRoZSBvZmZzZXRz IGludG8gdGhlIFVCTyBmb3IgdGV4dHVyZQorICogc2V0dXAgcGFyYW1ldGVycy4KKyAqCisgKiBU aGlzIHdpbGwgYmUgdXNlZCBhdCBkcmF3IHRpbWUgdG8gcmVsb2NhdGUgdGhlIHJlZmVyZW5jZSB0 byB0aGUgdGV4dHVyZQorICogY29udGVudHMgaW4gcDAsIGFuZCB2YWxpZGF0ZSB0aGF0IHRoZSBv ZmZzZXQgY29tYmluZWQgd2l0aAorICogd2lkdGgvaGVpZ2h0L3N0cmlkZS9ldGMuIGZyb20gcDEg YW5kIHAyL3AzIGRvZXNuJ3Qgc2FtcGxlIG91dHNpZGUgdGhlIEJPLgorICogTm90ZSB0aGF0IHRo ZSBoYXJkd2FyZSB0cmVhdHMgdW5wcm92aWRlZCBjb25maWcgcGFyYW1ldGVycyBhcyAwLCBzbyBu b3QgYWxsCisgKiBvZiB0aGVtIG5lZWQgdG8gYmUgc2V0IHVwIGZvciBldmVyeSB0ZXh1cmUgc2Ft cGxlLCBhbmQgd2UnbGwgc3RvcmUgfjAgYXMKKyAqIHRoZSBvZmZzZXQgdG8gbWFyayB0aGUgdW51 c2VkIG9uZXMuCisgKgorICogU2VlIHRoZSBWQzQgM0QgYXJjaGl0ZWN0dXJlIGd1aWRlIHBhZ2Ug NDEgKCJUZXh0dXJlIGFuZCBNZW1vcnkgTG9va3VwIFVuaXQKKyAqIFNldHVwIikgZm9yIGRlZmlu aXRpb25zIG9mIHRoZSB0ZXh0dXJlIHBhcmFtZXRlcnMuCisgKi8KK3N0cnVjdCB2YzRfdGV4dHVy ZV9zYW1wbGVfaW5mbyB7CisJYm9vbCBpc19kaXJlY3Q7CisJdWludDMyX3QgcF9vZmZzZXRbNF07 Cit9OworCisvKioKKyAqIHN0cnVjdCB2YzRfdmFsaWRhdGVkX3NoYWRlcl9pbmZvIC0gaW5mb3Jt YXRpb24gYWJvdXQgdmFsaWRhdGVkIHNoYWRlcnMgdGhhdAorICogbmVlZHMgdG8gYmUgdXNlZCBm cm9tIGNvbW1hbmQgbGlzdCB2YWxpZGF0aW9uLgorICoKKyAqIEZvciBhIGdpdmVuIHNoYWRlciwg ZWFjaCB0aW1lIGEgc2hhZGVyIHN0YXRlIHJlY29yZCByZWZlcmVuY2VzIGl0LCB3ZSBuZWVkCisg KiB0byB2ZXJpZnkgdGhhdCB0aGUgc2hhZGVyIGRvZXNuJ3QgcmVhZCBtb3JlIHVuaWZvcm1zIHRo YW4gdGhlIHNoYWRlciBzdGF0ZQorICogcmVjb3JkJ3MgdW5pZm9ybSBCTyBwb2ludGVyIGNhbiBw cm92aWRlLCBhbmQgd2UgbmVlZCB0byBhcHBseSByZWxvY2F0aW9ucworICogYW5kIHZhbGlkYXRl IHRoZSBzaGFkZXIgc3RhdGUgcmVjb3JkJ3MgdW5pZm9ybXMgdGhhdCBkZWZpbmUgdGhlIHRleHR1 cmUKKyAqIHNhbXBsZXMuCisgKi8KK3N0cnVjdCB2YzRfdmFsaWRhdGVkX3NoYWRlcl9pbmZvIHsK Kwl1aW50MzJfdCB1bmlmb3Jtc19zaXplOworCXVpbnQzMl90IHVuaWZvcm1zX3NyY19zaXplOwor CXVpbnQzMl90IG51bV90ZXh0dXJlX3NhbXBsZXM7CisJc3RydWN0IHZjNF90ZXh0dXJlX3NhbXBs ZV9pbmZvICp0ZXh0dXJlX3NhbXBsZXM7Cit9OworCisvKioKICAqIF93YWl0X2ZvciAtIG1hZ2lj IChyZWdpc3Rlcikgd2FpdCBtYWNybwogICoKICAqIERvZXMgdGhlIHJpZ2h0IHRoaW5nIGZvciBt b2Rlc2V0IHBhdGhzIHdoZW4gcnVuIHVuZGVyIGtkZ2Igb3Igc2ltaWxhciBhdG9taWMKQEAgLTE1 Nyw4ICsxOTgsMTMgQEAgc3RydWN0IGRtYV9idWYgKnZjNF9wcmltZV9leHBvcnQoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBmbGFn cyk7CiBpbnQgdmM0X2NyZWF0ZV9ib19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lk ICpkYXRhLAogCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IHZjNF9jcmVhdGVf c2hhZGVyX2JvX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkg ICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogaW50IHZjNF9tbWFwX2JvX2lvY3Rs KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICAgIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2KTsKK2ludCB2YzRfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IHZjNF9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cit2b2lkICp2YzRfcHJp bWVfdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiB2b2lkIHZjNF9ib19jYWNoZV9p bml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCB2YzRfYm9fY2FjaGVfZGVzdHJveShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGludCB2YzRfYm9fc3RhdHNfZGVidWdmcyhzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHZvaWQgKmFyZyk7CkBAIC0xOTQsMyArMjQwLDcgQEAgc3RydWN0IGRybV9w bGFuZSAqdmM0X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgZW51bSBk cm1fcGxhbmVfdHlwZSB0eXBlKTsKIHUzMiB2YzRfcGxhbmVfd3JpdGVfZGxpc3Qoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsIHUzMiBfX2lvbWVtICpkbGlzdCk7CiB1MzIgdmM0X3BsYW5lX2RsaXN0 X3NpemUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpOworCisvKiB2YzRfdmFsaWRhdGVf c2hhZGVyLmMgKi8KK3N0cnVjdCB2YzRfdmFsaWRhdGVkX3NoYWRlcl9pbmZvICoKK3ZjNF92YWxp ZGF0ZV9zaGFkZXIoc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqc2hhZGVyX29iaik7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9xcHVfZGVmaW5lcy5oIGIvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfcXB1X2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5kNWMyZjNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfcXB1X2RlZmluZXMuaApAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAy MDE0IEJyb2FkY29tCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks CisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJF LgorICovCisKKyNpZm5kZWYgVkM0X1FQVV9ERUZJTkVTX0gKKyNkZWZpbmUgVkM0X1FQVV9ERUZJ TkVTX0gKKworZW51bSBxcHVfb3BfYWRkIHsKKwlRUFVfQV9OT1AsCisJUVBVX0FfRkFERCwKKwlR UFVfQV9GU1VCLAorCVFQVV9BX0ZNSU4sCisJUVBVX0FfRk1BWCwKKwlRUFVfQV9GTUlOQUJTLAor CVFQVV9BX0ZNQVhBQlMsCisJUVBVX0FfRlRPSSwKKwlRUFVfQV9JVE9GLAorCVFQVV9BX0FERCA9 IDEyLAorCVFQVV9BX1NVQiwKKwlRUFVfQV9TSFIsCisJUVBVX0FfQVNSLAorCVFQVV9BX1JPUiwK KwlRUFVfQV9TSEwsCisJUVBVX0FfTUlOLAorCVFQVV9BX01BWCwKKwlRUFVfQV9BTkQsCisJUVBV X0FfT1IsCisJUVBVX0FfWE9SLAorCVFQVV9BX05PVCwKKwlRUFVfQV9DTFosCisJUVBVX0FfVjhB RERTID0gMzAsCisJUVBVX0FfVjhTVUJTID0gMzEsCit9OworCitlbnVtIHFwdV9vcF9tdWwgewor CVFQVV9NX05PUCwKKwlRUFVfTV9GTVVMLAorCVFQVV9NX01VTDI0LAorCVFQVV9NX1Y4TVVMRCwK KwlRUFVfTV9WOE1JTiwKKwlRUFVfTV9WOE1BWCwKKwlRUFVfTV9WOEFERFMsCisJUVBVX01fVjhT VUJTLAorfTsKKworZW51bSBxcHVfcmFkZHIgeworCVFQVV9SX0ZSQUdfUEFZTE9BRF9aVyA9IDE1 LCAvKiBXIGZvciBBIGZpbGUsIFogZm9yIEIgZmlsZSAqLworCS8qIDAtMzEgYXJlIHRoZSBwbGFp biByZWdmaWxlIGEgb3IgYiBmaWVsZHMgKi8KKwlRUFVfUl9VTklGID0gMzIsCisJUVBVX1JfVkFS WSA9IDM1LAorCVFQVV9SX0VMRU1fUVBVID0gMzgsCisJUVBVX1JfTk9QLAorCVFQVV9SX1hZX1BJ WEVMX0NPT1JEID0gNDEsCisJUVBVX1JfTVNfUkVWX0ZMQUdTID0gNDEsCisJUVBVX1JfVlBNID0g NDgsCisJUVBVX1JfVlBNX0xEX0JVU1ksCisJUVBVX1JfVlBNX0xEX1dBSVQsCisJUVBVX1JfTVVU RVhfQUNRVUlSRSwKK307CisKK2VudW0gcXB1X3dhZGRyIHsKKwkvKiAwLTMxIGFyZSB0aGUgcGxh aW4gcmVnZmlsZSBhIG9yIGIgZmllbGRzICovCisJUVBVX1dfQUNDMCA9IDMyLCAvKiBha2EgcjAg Ki8KKwlRUFVfV19BQ0MxLAorCVFQVV9XX0FDQzIsCisJUVBVX1dfQUNDMywKKwlRUFVfV19UTVVf Tk9TV0FQLAorCVFQVV9XX0FDQzUsCisJUVBVX1dfSE9TVF9JTlQsCisJUVBVX1dfTk9QLAorCVFQ VV9XX1VOSUZPUk1TX0FERFJFU1MsCisJUVBVX1dfUVVBRF9YWSwgLyogWCBmb3IgcmVnZmlsZSBh LCBZIGZvciByZWdmaWxlIGIgKi8KKwlRUFVfV19NU19GTEFHUyA9IDQyLAorCVFQVV9XX1JFVl9G TEFHID0gNDIsCisJUVBVX1dfVExCX1NURU5DSUxfU0VUVVAgPSA0MywKKwlRUFVfV19UTEJfWiwK KwlRUFVfV19UTEJfQ09MT1JfTVMsCisJUVBVX1dfVExCX0NPTE9SX0FMTCwKKwlRUFVfV19UTEJf QUxQSEFfTUFTSywKKwlRUFVfV19WUE0sCisJUVBVX1dfVlBNVkNEX1NFVFVQLCAvKiBMRCBmb3Ig cmVnZmlsZSBhLCBTVCBmb3IgcmVnZmlsZSBiICovCisJUVBVX1dfVlBNX0FERFIsIC8qIExEIGZv ciByZWdmaWxlIGEsIFNUIGZvciByZWdmaWxlIGIgKi8KKwlRUFVfV19NVVRFWF9SRUxFQVNFLAor CVFQVV9XX1NGVV9SRUNJUCwKKwlRUFVfV19TRlVfUkVDSVBTUVJULAorCVFQVV9XX1NGVV9FWFAs CisJUVBVX1dfU0ZVX0xPRywKKwlRUFVfV19UTVUwX1MsCisJUVBVX1dfVE1VMF9ULAorCVFQVV9X X1RNVTBfUiwKKwlRUFVfV19UTVUwX0IsCisJUVBVX1dfVE1VMV9TLAorCVFQVV9XX1RNVTFfVCwK KwlRUFVfV19UTVUxX1IsCisJUVBVX1dfVE1VMV9CLAorfTsKKworZW51bSBxcHVfc2lnX2JpdHMg eworCVFQVV9TSUdfU1dfQlJFQUtQT0lOVCwKKwlRUFVfU0lHX05PTkUsCisJUVBVX1NJR19USFJF QURfU1dJVENILAorCVFQVV9TSUdfUFJPR19FTkQsCisJUVBVX1NJR19XQUlUX0ZPUl9TQ09SRUJP QVJELAorCVFQVV9TSUdfU0NPUkVCT0FSRF9VTkxPQ0ssCisJUVBVX1NJR19MQVNUX1RIUkVBRF9T V0lUQ0gsCisJUVBVX1NJR19DT1ZFUkFHRV9MT0FELAorCVFQVV9TSUdfQ09MT1JfTE9BRCwKKwlR UFVfU0lHX0NPTE9SX0xPQURfRU5ELAorCVFQVV9TSUdfTE9BRF9UTVUwLAorCVFQVV9TSUdfTE9B RF9UTVUxLAorCVFQVV9TSUdfQUxQSEFfTUFTS19MT0FELAorCVFQVV9TSUdfU01BTExfSU1NLAor CVFQVV9TSUdfTE9BRF9JTU0sCisJUVBVX1NJR19CUkFOQ0gKK307CisKK2VudW0gcXB1X211eCB7 CisJLyogaGFyZHdhcmUgbXV4IHZhbHVlcyAqLworCVFQVV9NVVhfUjAsCisJUVBVX01VWF9SMSwK KwlRUFVfTVVYX1IyLAorCVFQVV9NVVhfUjMsCisJUVBVX01VWF9SNCwKKwlRUFVfTVVYX1I1LAor CVFQVV9NVVhfQSwKKwlRUFVfTVVYX0IsCisKKwkvKiBub24taGFyZHdhcmUgbXV4IHZhbHVlcyAq LworCVFQVV9NVVhfSU1NLAorfTsKKworZW51bSBxcHVfY29uZCB7CisJUVBVX0NPTkRfTkVWRVIs CisJUVBVX0NPTkRfQUxXQVlTLAorCVFQVV9DT05EX1pTLAorCVFQVV9DT05EX1pDLAorCVFQVV9D T05EX05TLAorCVFQVV9DT05EX05DLAorCVFQVV9DT05EX0NTLAorCVFQVV9DT05EX0NDLAorfTsK KworZW51bSBxcHVfcGFja19tdWwgeworCVFQVV9QQUNLX01VTF9OT1AsCisJLyogcmVwbGljYXRl ZCB0byBlYWNoIDggYml0cyBvZiB0aGUgMzItYml0IGRzdC4gKi8KKwlRUFVfUEFDS19NVUxfODg4 OCA9IDMsCisJUVBVX1BBQ0tfTVVMXzhBLAorCVFQVV9QQUNLX01VTF84QiwKKwlRUFVfUEFDS19N VUxfOEMsCisJUVBVX1BBQ0tfTVVMXzhELAorfTsKKworZW51bSBxcHVfcGFja19hIHsKKwlRUFVf UEFDS19BX05PUCwKKwkvKiBjb252ZXJ0IHRvIDE2IGJpdCBmbG9hdCBpZiBmbG9hdCBpbnB1dCwg b3IgdG8gaW50MTYuICovCisJUVBVX1BBQ0tfQV8xNkEsCisJUVBVX1BBQ0tfQV8xNkIsCisJLyog cmVwbGljYXRlZCB0byBlYWNoIDggYml0cyBvZiB0aGUgMzItYml0IGRzdC4gKi8KKwlRUFVfUEFD S19BXzg4ODgsCisJLyogQ29udmVydCB0byA4LWJpdCB1bnNpZ25lZCBpbnQuICovCisJUVBVX1BB Q0tfQV84QSwKKwlRUFVfUEFDS19BXzhCLAorCVFQVV9QQUNLX0FfOEMsCisJUVBVX1BBQ0tfQV84 RCwKKworCS8qIFNhdHVyYXRpbmcgdmFyaWFudHMgb2YgdGhlIHByZXZpb3VzIGluc3RydWN0aW9u cy4gKi8KKwlRUFVfUEFDS19BXzMyX1NBVCwgLyogaW50LW9ubHkgKi8KKwlRUFVfUEFDS19BXzE2 QV9TQVQsIC8qIGludCBvciBmbG9hdCAqLworCVFQVV9QQUNLX0FfMTZCX1NBVCwKKwlRUFVfUEFD S19BXzg4ODhfU0FULAorCVFQVV9QQUNLX0FfOEFfU0FULAorCVFQVV9QQUNLX0FfOEJfU0FULAor CVFQVV9QQUNLX0FfOENfU0FULAorCVFQVV9QQUNLX0FfOERfU0FULAorfTsKKworZW51bSBxcHVf dW5wYWNrX3I0IHsKKwlRUFVfVU5QQUNLX1I0X05PUCwKKwlRUFVfVU5QQUNLX1I0X0YxNkFfVE9f RjMyLAorCVFQVV9VTlBBQ0tfUjRfRjE2Ql9UT19GMzIsCisJUVBVX1VOUEFDS19SNF84RF9SRVAs CisJUVBVX1VOUEFDS19SNF84QSwKKwlRUFVfVU5QQUNLX1I0XzhCLAorCVFQVV9VTlBBQ0tfUjRf OEMsCisJUVBVX1VOUEFDS19SNF84RCwKK307CisKKyNkZWZpbmUgUVBVX01BU0soaGlnaCwgbG93 KSBcCisJKCgoKHVpbnQ2NF90KTEgPDwgKChoaWdoKSAtIChsb3cpICsgMSkpIC0gMSkgPDwgKGxv dykpCisKKyNkZWZpbmUgUVBVX0dFVF9GSUVMRCh3b3JkLCBmaWVsZCkgXAorCSgodWludDMyX3Qp KCgod29yZCkgICYgZmllbGQgIyMgX01BU0spID4+IGZpZWxkICMjIF9TSElGVCkpCisKKyNkZWZp bmUgUVBVX1NJR19TSElGVCAgICAgICAgICAgICAgICAgICA2MAorI2RlZmluZSBRUFVfU0lHX01B U0sgICAgICAgICAgICAgICAgICAgIFFQVV9NQVNLKDYzLCA2MCkKKworI2RlZmluZSBRUFVfVU5Q QUNLX1NISUZUICAgICAgICAgICAgICAgIDU3CisjZGVmaW5lIFFQVV9VTlBBQ0tfTUFTSyAgICAg ICAgICAgICAgICAgUVBVX01BU0soNTksIDU3KQorCisvKioKKyAqIElmIHNldCwgdGhlIHBhY2sg ZmllbGQgbWVhbnMgUEFDS19NVUwgb3IgUjQgcGFja2luZywgaW5zdGVhZCBvZiBub3JtYWwKKyAq IHJlZ2ZpbGUgYSBwYWNraW5nLgorICovCisjZGVmaW5lIFFQVV9QTSAgICAgICAgICAgICAgICAg ICAgICAgICAgKCh1aW50NjRfdCkxIDw8IDU2KQorCisjZGVmaW5lIFFQVV9QQUNLX1NISUZUICAg ICAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgUVBVX1BBQ0tfTUFTSyAgICAgICAgICAgICAgICAg ICBRUFVfTUFTSyg1NSwgNTIpCisKKyNkZWZpbmUgUVBVX0NPTkRfQUREX1NISUZUICAgICAgICAg ICAgICA0OQorI2RlZmluZSBRUFVfQ09ORF9BRERfTUFTSyAgICAgICAgICAgICAgIFFQVV9NQVNL KDUxLCA0OSkKKyNkZWZpbmUgUVBVX0NPTkRfTVVMX1NISUZUICAgICAgICAgICAgICA0NgorI2Rl ZmluZSBRUFVfQ09ORF9NVUxfTUFTSyAgICAgICAgICAgICAgIFFQVV9NQVNLKDQ4LCA0NikKKwor I2RlZmluZSBRUFVfU0YgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDY0X3QpMSA8PCA0 NSkKKworI2RlZmluZSBRUFVfV0FERFJfQUREX1NISUZUICAgICAgICAgICAgIDM4CisjZGVmaW5l IFFQVV9XQUREUl9BRERfTUFTSyAgICAgICAgICAgICAgUVBVX01BU0soNDMsIDM4KQorI2RlZmlu ZSBRUFVfV0FERFJfTVVMX1NISUZUICAgICAgICAgICAgIDMyCisjZGVmaW5lIFFQVV9XQUREUl9N VUxfTUFTSyAgICAgICAgICAgICAgUVBVX01BU0soMzcsIDMyKQorCisjZGVmaW5lIFFQVV9PUF9N VUxfU0hJRlQgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgUVBVX09QX01VTF9NQVNLICAgICAg ICAgICAgICAgICBRUFVfTUFTSygzMSwgMjkpCisKKyNkZWZpbmUgUVBVX1JBRERSX0FfU0hJRlQg ICAgICAgICAgICAgICAxOAorI2RlZmluZSBRUFVfUkFERFJfQV9NQVNLICAgICAgICAgICAgICAg IFFQVV9NQVNLKDIzLCAxOCkKKyNkZWZpbmUgUVBVX1JBRERSX0JfU0hJRlQgICAgICAgICAgICAg ICAxMgorI2RlZmluZSBRUFVfUkFERFJfQl9NQVNLICAgICAgICAgICAgICAgIFFQVV9NQVNLKDE3 LCAxMikKKyNkZWZpbmUgUVBVX1NNQUxMX0lNTV9TSElGVCAgICAgICAgICAgICAxMgorI2RlZmlu ZSBRUFVfU01BTExfSU1NX01BU0sgICAgICAgICAgICAgIFFQVV9NQVNLKDE3LCAxMikKKworI2Rl ZmluZSBRUFVfQUREX0FfU0hJRlQgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgUVBVX0FERF9B X01BU0sgICAgICAgICAgICAgICAgICBRUFVfTUFTSygxMSwgOSkKKyNkZWZpbmUgUVBVX0FERF9C X1NISUZUICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFFQVV9BRERfQl9NQVNLICAgICAgICAg ICAgICAgICAgUVBVX01BU0soOCwgNikKKyNkZWZpbmUgUVBVX01VTF9BX1NISUZUICAgICAgICAg ICAgICAgICAzCisjZGVmaW5lIFFQVV9NVUxfQV9NQVNLICAgICAgICAgICAgICAgICAgUVBVX01B U0soNSwgMykKKyNkZWZpbmUgUVBVX01VTF9CX1NISUZUICAgICAgICAgICAgICAgICAwCisjZGVm aW5lIFFQVV9NVUxfQl9NQVNLICAgICAgICAgICAgICAgICAgUVBVX01BU0soMiwgMCkKKworI2Rl ZmluZSBRUFVfV1MgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDY0X3QpMSA8PCA0NCkK KworI2RlZmluZSBRUFVfT1BfQUREX1NISUZUICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFFQ VV9PUF9BRERfTUFTSyAgICAgICAgICAgICAgICAgUVBVX01BU0soMjgsIDI0KQorCisjZW5kaWYg LyogVkM0X1FQVV9ERUZJTkVTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQv dmM0X3ZhbGlkYXRlX3NoYWRlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3ZhbGlkYXRl X3NoYWRlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjcxMjRiCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdmFsaWRhdGVfc2hhZGVy cy5jCkBAIC0wLDAgKzEsNTEzIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgQnJvYWRjb20K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H CisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworLyoq CisgKiBET0M6IFNoYWRlciB2YWxpZGF0b3IgZm9yIFZDNC4KKyAqCisgKiBUaGUgVkM0IGhhcyBu byBJT01NVSBiZXR3ZWVuIGl0IGFuZCBzeXN0ZW0gbWVtb3J5LCBzbyBhIHVzZXIgd2l0aAorICog YWNjZXNzIHRvIGV4ZWN1dGUgc2hhZGVycyBjb3VsZCBlc2NhbGF0ZSBwcml2aWxlZ2UgYnkgb3Zl cndyaXRpbmcKKyAqIHN5c3RlbSBtZW1vcnkgKHVzaW5nIHRoZSBWUE0gd3JpdGUgYWRkcmVzcyBy ZWdpc3RlciBpbiB0aGUKKyAqIGdlbmVyYWwtcHVycG9zZSBETUEgbW9kZSkgb3IgcmVhZGluZyBz eXN0ZW0gbWVtb3J5IGl0IHNob3VsZG4ndAorICogKHJlYWRpbmcgaXQgYXMgYSB0ZXh0dXJlLCBv ciB1bmlmb3JtIGRhdGEsIG9yIHZlcnRleCBkYXRhKS4KKyAqCisgKiBUaGlzIHdhbGtzIG92ZXIg YSBzaGFkZXIgQk8sIGVuc3VyaW5nIHRoYXQgaXRzIGFjY2Vzc2VzIGFyZQorICogYXBwcm9wcmlh dGVseSBib3VuZGVkLCBhbmQgcmVjb3JkaW5nIGhvdyBtYW55IHRleHR1cmUgYWNjZXNzZXMgYXJl CisgKiBtYWRlIGFuZCB3aGVyZSBzbyB0aGF0IHdlIGNhbiBkbyByZWxvY2F0aW9ucyBmb3IgdGhl bSBpbiB0aGUKKyAqIHVuaWZvcm0gc3RyZWFtLgorICovCisKKyNpbmNsdWRlICJ2YzRfZHJ2Lmgi CisjaW5jbHVkZSAidmM0X3FwdV9kZWZpbmVzLmgiCisKK3N0cnVjdCB2YzRfc2hhZGVyX3ZhbGlk YXRpb25fc3RhdGUgeworCXN0cnVjdCB2YzRfdGV4dHVyZV9zYW1wbGVfaW5mbyB0bXVfc2V0dXBb Ml07CisJaW50IHRtdV93cml0ZV9jb3VudFsyXTsKKworCS8qIEZvciByZWdpc3RlcnMgdGhhdCB3 ZXJlIGxhc3Qgd3JpdHRlbiB0byBieSBhIE1JTiBpbnN0cnVjdGlvbiB3aXRoCisJICogb25lIGFy Z3VtZW50IGJlaW5nIGEgdW5pZm9ybSwgdGhlIGFkZHJlc3Mgb2YgdGhlIHVuaWZvcm0uCisJICog T3RoZXJ3aXNlLCB+MC4KKwkgKgorCSAqIFRoaXMgaXMgdXNlZCBmb3IgdGhlIHZhbGlkYXRpb24g b2YgZGlyZWN0IGFkZHJlc3MgbWVtb3J5IHJlYWRzLgorCSAqLworCXVpbnQzMl90IGxpdmVfbWlu X2NsYW1wX29mZnNldHNbMzIgKyAzMiArIDRdOworCWJvb2wgbGl2ZV9tYXhfY2xhbXBfcmVnc1sz MiArIDMyICsgNF07Cit9OworCitzdGF0aWMgdWludDMyX3QKK3dhZGRyX3RvX2xpdmVfcmVnX2lu ZGV4KHVpbnQzMl90IHdhZGRyLCBib29sIGlzX2IpCit7CisJaWYgKHdhZGRyIDwgMzIpIHsKKwkJ aWYgKGlzX2IpCisJCQlyZXR1cm4gMzIgKyB3YWRkcjsKKwkJZWxzZQorCQkJcmV0dXJuIHdhZGRy OworCX0gZWxzZSBpZiAod2FkZHIgPD0gUVBVX1dfQUNDMykgeworCQlyZXR1cm4gNjQgKyB3YWRk ciAtIFFQVV9XX0FDQzA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIH4wOworCX0KK30KKworc3RhdGlj IHVpbnQzMl90CityYWRkcl9hZGRfYV90b19saXZlX3JlZ19pbmRleCh1aW50NjRfdCBpbnN0KQor eworCXVpbnQzMl90IHNpZyA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX1NJRyk7CisJdWludDMy X3QgYWRkX2EgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9BRERfQSk7CisJdWludDMyX3QgcmFk ZHJfYSA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX1JBRERSX0EpOworCXVpbnQzMl90IHJhZGRy X2IgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9SQUREUl9CKTsKKworCWlmIChhZGRfYSA9PSBR UFVfTVVYX0EpCisJCXJldHVybiByYWRkcl9hOworCWVsc2UgaWYgKGFkZF9hID09IFFQVV9NVVhf QiAmJiBzaWcgIT0gUVBVX1NJR19TTUFMTF9JTU0pCisJCXJldHVybiAzMiArIHJhZGRyX2I7CisJ ZWxzZSBpZiAoYWRkX2EgPD0gUVBVX01VWF9SMykKKwkJcmV0dXJuIDY0ICsgYWRkX2E7CisJZWxz ZQorCQlyZXR1cm4gfjA7Cit9CisKK3N0YXRpYyBib29sCitpc190bXVfc3VibWl0KHVpbnQzMl90 IHdhZGRyKQoreworCXJldHVybiAod2FkZHIgPT0gUVBVX1dfVE1VMF9TIHx8CisJCXdhZGRyID09 IFFQVV9XX1RNVTFfUyk7Cit9CisKK3N0YXRpYyBib29sCitpc190bXVfd3JpdGUodWludDMyX3Qg d2FkZHIpCit7CisJcmV0dXJuICh3YWRkciA+PSBRUFVfV19UTVUwX1MgJiYKKwkJd2FkZHIgPD0g UVBVX1dfVE1VMV9CKTsKK30KKworc3RhdGljIGJvb2wKK3JlY29yZF90ZXh0dXJlX3NhbXBsZShz dHJ1Y3QgdmM0X3ZhbGlkYXRlZF9zaGFkZXJfaW5mbyAqdmFsaWRhdGVkX3NoYWRlciwKKwkJICAg ICAgc3RydWN0IHZjNF9zaGFkZXJfdmFsaWRhdGlvbl9zdGF0ZSAqdmFsaWRhdGlvbl9zdGF0ZSwK KwkJICAgICAgaW50IHRtdSkKK3sKKwl1aW50MzJfdCBzID0gdmFsaWRhdGVkX3NoYWRlci0+bnVt X3RleHR1cmVfc2FtcGxlczsKKwlpbnQgaTsKKwlzdHJ1Y3QgdmM0X3RleHR1cmVfc2FtcGxlX2lu Zm8gKnRlbXBfc2FtcGxlczsKKworCXRlbXBfc2FtcGxlcyA9IGtyZWFsbG9jKHZhbGlkYXRlZF9z aGFkZXItPnRleHR1cmVfc2FtcGxlcywKKwkJCQkocyArIDEpICogc2l6ZW9mKCp0ZW1wX3NhbXBs ZXMpLAorCQkJCUdGUF9LRVJORUwpOworCWlmICghdGVtcF9zYW1wbGVzKQorCQlyZXR1cm4gZmFs c2U7CisKKwltZW1jcHkoJnRlbXBfc2FtcGxlc1tzXSwKKwkgICAgICAgJnZhbGlkYXRpb25fc3Rh dGUtPnRtdV9zZXR1cFt0bXVdLAorCSAgICAgICBzaXplb2YoKnRlbXBfc2FtcGxlcykpOworCisJ dmFsaWRhdGVkX3NoYWRlci0+bnVtX3RleHR1cmVfc2FtcGxlcyA9IHMgKyAxOworCXZhbGlkYXRl ZF9zaGFkZXItPnRleHR1cmVfc2FtcGxlcyA9IHRlbXBfc2FtcGxlczsKKworCWZvciAoaSA9IDA7 IGkgPCA0OyBpKyspCisJCXZhbGlkYXRpb25fc3RhdGUtPnRtdV9zZXR1cFt0bXVdLnBfb2Zmc2V0 W2ldID0gfjA7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK2NoZWNrX3RtdV93 cml0ZSh1aW50NjRfdCBpbnN0LAorCQlzdHJ1Y3QgdmM0X3ZhbGlkYXRlZF9zaGFkZXJfaW5mbyAq dmFsaWRhdGVkX3NoYWRlciwKKwkJc3RydWN0IHZjNF9zaGFkZXJfdmFsaWRhdGlvbl9zdGF0ZSAq dmFsaWRhdGlvbl9zdGF0ZSwKKwkJYm9vbCBpc19tdWwpCit7CisJdWludDMyX3Qgd2FkZHIgPSAo aXNfbXVsID8KKwkJCSAgUVBVX0dFVF9GSUVMRChpbnN0LCBRUFVfV0FERFJfTVVMKSA6CisJCQkg IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX1dBRERSX0FERCkpOworCXVpbnQzMl90IHJhZGRyX2Eg PSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9SQUREUl9BKTsKKwl1aW50MzJfdCByYWRkcl9iID0g UVBVX0dFVF9GSUVMRChpbnN0LCBRUFVfUkFERFJfQik7CisJaW50IHRtdSA9IHdhZGRyID4gUVBV X1dfVE1VMF9COworCWJvb2wgc3VibWl0ID0gaXNfdG11X3N1Ym1pdCh3YWRkcik7CisJYm9vbCBp c19kaXJlY3QgPSBzdWJtaXQgJiYgdmFsaWRhdGlvbl9zdGF0ZS0+dG11X3dyaXRlX2NvdW50W3Rt dV0gPT0gMDsKKwl1aW50MzJfdCBzaWcgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9TSUcpOwor CisJaWYgKGlzX2RpcmVjdCkgeworCQl1aW50MzJfdCBhZGRfYiA9IFFQVV9HRVRfRklFTEQoaW5z dCwgUVBVX0FERF9CKTsKKwkJdWludDMyX3QgY2xhbXBfcmVnLCBjbGFtcF9vZmZzZXQ7CisKKwkJ aWYgKHNpZyA9PSBRUFVfU0lHX1NNQUxMX0lNTSkgeworCQkJRFJNX0VSUk9SKCJkaXJlY3QgVE1V IHJlYWQgdXNlZCBzbWFsbCBpbW1lZGlhdGVcbiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisK KwkJLyogTWFrZSBzdXJlIHRoYXQgdGhpcyB0ZXh0dXJlIGxvYWQgaXMgYW4gYWRkIG9mIHRoZSBi YXNlCisJCSAqIGFkZHJlc3Mgb2YgdGhlIFVCTyB0byBhIGNsYW1wZWQgb2Zmc2V0IHdpdGhpbiB0 aGUgVUJPLgorCQkgKi8KKwkJaWYgKGlzX211bCB8fAorCQkgICAgUVBVX0dFVF9GSUVMRChpbnN0 LCBRUFVfT1BfQUREKSAhPSBRUFVfQV9BREQpIHsKKwkJCURSTV9FUlJPUigiZGlyZWN0IFRNVSBs b2FkIHdhc24ndCBhbiBhZGRcbiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyogV2Ug YXNzZXJ0IHRoYXQgdGhlIHRoZSBjbGFtcGVkIGFkZHJlc3MgaXMgdGhlIGZpcnN0CisJCSAqIGFy Z3VtZW50LCBhbmQgdGhlIFVCTyBiYXNlIGFkZHJlc3MgaXMgdGhlIHNlY29uZCBhcmd1bWVudC4K KwkJICogVGhpcyBpcyBhcmJpdHJhcnksIGJ1dCBzaW1wbGVyIHRoYW4gc3VwcG9ydGluZyBmbGlw cGluZyB0aGUKKwkJICogdHdvIGVpdGhlciB3YXkuCisJCSAqLworCQljbGFtcF9yZWcgPSByYWRk cl9hZGRfYV90b19saXZlX3JlZ19pbmRleChpbnN0KTsKKwkJaWYgKGNsYW1wX3JlZyA9PSB+MCkg eworCQkJRFJNX0VSUk9SKCJkaXJlY3QgVE1VIGxvYWQgd2Fzbid0IGNsYW1wZWRcbiIpOworCQkJ cmV0dXJuIGZhbHNlOworCQl9CisKKwkJY2xhbXBfb2Zmc2V0ID0gdmFsaWRhdGlvbl9zdGF0ZS0+ bGl2ZV9taW5fY2xhbXBfb2Zmc2V0c1tjbGFtcF9yZWddOworCQlpZiAoY2xhbXBfb2Zmc2V0ID09 IH4wKSB7CisJCQlEUk1fRVJST1IoImRpcmVjdCBUTVUgbG9hZCB3YXNuJ3QgY2xhbXBlZFxuIik7 CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBTdG9yZSB0aGUgY2xhbXAgdmFsdWUncyBv ZmZzZXQgaW4gcDEgKHNlZSByZWxvY190ZXgoKSBpbgorCQkgKiB2YzRfdmFsaWRhdGUuYykuCisJ CSAqLworCQl2YWxpZGF0aW9uX3N0YXRlLT50bXVfc2V0dXBbdG11XS5wX29mZnNldFsxXSA9CisJ CQljbGFtcF9vZmZzZXQ7CisKKwkJaWYgKCEoYWRkX2IgPT0gUVBVX01VWF9BICYmIHJhZGRyX2Eg PT0gUVBVX1JfVU5JRikgJiYKKwkJICAgICEoYWRkX2IgPT0gUVBVX01VWF9CICYmIHJhZGRyX2Ig PT0gUVBVX1JfVU5JRikpIHsKKwkJCURSTV9FUlJPUigiZGlyZWN0IFRNVSBsb2FkIGRpZG4ndCBh ZGQgdG8gYSB1bmlmb3JtXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCXZhbGlkYXRp b25fc3RhdGUtPnRtdV9zZXR1cFt0bXVdLmlzX2RpcmVjdCA9IHRydWU7CisJfSBlbHNlIHsKKwkJ aWYgKHJhZGRyX2EgPT0gUVBVX1JfVU5JRiB8fCAoc2lnICE9IFFQVV9TSUdfU01BTExfSU1NICYm CisJCQkJCSAgICAgIHJhZGRyX2IgPT0gUVBVX1JfVU5JRikpIHsKKwkJCURSTV9FUlJPUigidW5p Zm9ybSByZWFkIGluIHRoZSBzYW1lIGluc3RydWN0aW9uIGFzICIKKwkJCQkgICJ0ZXh0dXJlIHNl dHVwLlxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlpZiAodmFsaWRhdGlvbl9z dGF0ZS0+dG11X3dyaXRlX2NvdW50W3RtdV0gPj0gNCkgeworCQlEUk1fRVJST1IoIlRNVSVkIGdv dCB0b28gbWFueSBwYXJhbWV0ZXJzIGJlZm9yZSBkaXNwYXRjaFxuIiwKKwkJCSAgdG11KTsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKwl2YWxpZGF0aW9uX3N0YXRlLT50bXVfc2V0dXBbdG11XS5wX29m ZnNldFt2YWxpZGF0aW9uX3N0YXRlLT50bXVfd3JpdGVfY291bnRbdG11XV0gPQorCQl2YWxpZGF0 ZWRfc2hhZGVyLT51bmlmb3Jtc19zaXplOworCXZhbGlkYXRpb25fc3RhdGUtPnRtdV93cml0ZV9j b3VudFt0bXVdKys7CisJLyogU2luY2UgZGlyZWN0IHVzZXMgYSBSQUREUiB1bmlmb3JtIHJlZmVy ZW5jZSwgaXQgd2lsbCBnZXQgY291bnRlZCBpbgorCSAqIGNoZWNrX2luc3RydWN0aW9uX3JlYWRz KCkKKwkgKi8KKwlpZiAoIWlzX2RpcmVjdCkKKwkJdmFsaWRhdGVkX3NoYWRlci0+dW5pZm9ybXNf c2l6ZSArPSA0OworCisJaWYgKHN1Ym1pdCkgeworCQlpZiAoIXJlY29yZF90ZXh0dXJlX3NhbXBs ZSh2YWxpZGF0ZWRfc2hhZGVyLAorCQkJCQkgICB2YWxpZGF0aW9uX3N0YXRlLCB0bXUpKSB7CisJ CQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQl2YWxpZGF0aW9uX3N0YXRlLT50bXVfd3JpdGVfY291 bnRbdG11XSA9IDA7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sCitjaGVj a19yZWdfd3JpdGUodWludDY0X3QgaW5zdCwKKwkJc3RydWN0IHZjNF92YWxpZGF0ZWRfc2hhZGVy X2luZm8gKnZhbGlkYXRlZF9zaGFkZXIsCisJCXN0cnVjdCB2YzRfc2hhZGVyX3ZhbGlkYXRpb25f c3RhdGUgKnZhbGlkYXRpb25fc3RhdGUsCisJCWJvb2wgaXNfbXVsKQoreworCXVpbnQzMl90IHdh ZGRyID0gKGlzX211bCA/CisJCQkgIFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX1dBRERSX01VTCkg OgorCQkJICBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9XQUREUl9BREQpKTsKKworCXN3aXRjaCAo d2FkZHIpIHsKKwljYXNlIFFQVV9XX1VOSUZPUk1TX0FERFJFU1M6CisJCS8qIFhYWDogV2UnbGwg cHJvYmFibHkgbmVlZCB0byBzdXBwb3J0IHRoaXMgZm9yIHJlbGFkZHIsIGJ1dAorCQkgKiBpdCdz IGRlZmluaXRlbHkgYSBzZWN1cml0eS1yZWxhdGVkIG9uZS4KKwkJICovCisJCURSTV9FUlJPUigi dW5pZm9ybXMgYWRkcmVzcyBsb2FkIHVuc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIGZhbHNlOwor CisJY2FzZSBRUFVfV19UTEJfQ09MT1JfTVM6CisJY2FzZSBRUFVfV19UTEJfQ09MT1JfQUxMOgor CWNhc2UgUVBVX1dfVExCX1o6CisJCS8qIFRoZXNlIG9ubHkgaW50ZXJhY3Qgd2l0aCB0aGUgdGls ZSBidWZmZXIsIG5vdCBtYWluIG1lbW9yeSwKKwkJICogc28gdGhleSdyZSBzYWZlLgorCQkgKi8K KwkJcmV0dXJuIHRydWU7CisKKwljYXNlIFFQVV9XX1RNVTBfUzoKKwljYXNlIFFQVV9XX1RNVTBf VDoKKwljYXNlIFFQVV9XX1RNVTBfUjoKKwljYXNlIFFQVV9XX1RNVTBfQjoKKwljYXNlIFFQVV9X X1RNVTFfUzoKKwljYXNlIFFQVV9XX1RNVTFfVDoKKwljYXNlIFFQVV9XX1RNVTFfUjoKKwljYXNl IFFQVV9XX1RNVTFfQjoKKwkJcmV0dXJuIGNoZWNrX3RtdV93cml0ZShpbnN0LCB2YWxpZGF0ZWRf c2hhZGVyLCB2YWxpZGF0aW9uX3N0YXRlLAorCQkJCSAgICAgICBpc19tdWwpOworCisJY2FzZSBR UFVfV19IT1NUX0lOVDoKKwljYXNlIFFQVV9XX1RNVV9OT1NXQVA6CisJY2FzZSBRUFVfV19UTEJf QUxQSEFfTUFTSzoKKwljYXNlIFFQVV9XX01VVEVYX1JFTEVBU0U6CisJCS8qIFhYWDogSSBoYXZl bid0IHRob3VnaHQgYWJvdXQgdGhlc2UsIHNvIGRvbid0IHN1cHBvcnQgdGhlbQorCQkgKiBmb3Ig bm93LgorCQkgKi8KKwkJRFJNX0VSUk9SKCJVbnN1cHBvcnRlZCB3YWRkciAlZFxuIiwgd2FkZHIp OworCQlyZXR1cm4gZmFsc2U7CisKKwljYXNlIFFQVV9XX1ZQTV9BRERSOgorCQlEUk1fRVJST1Io IkdlbmVyYWwgVlBNIERNQSB1bnN1cHBvcnRlZFxuIik7CisJCXJldHVybiBmYWxzZTsKKworCWNh c2UgUVBVX1dfVlBNOgorCWNhc2UgUVBVX1dfVlBNVkNEX1NFVFVQOgorCQkvKiBXZSBhbGxvdyBW UE0gc2V0dXAgaW4gZ2VuZXJhbCwgZXZlbiBpbmNsdWRpbmcgVlBNIERNQQorCQkgKiBjb25maWd1 cmF0aW9uIHNldHVwLCBiZWNhdXNlIHRoZSAodW5zYWZlKSBETUEgY2FuIG9ubHkgYmUKKwkJICog dHJpZ2dlcmVkIGJ5IFFQVV9XX1ZQTV9BRERSIHdyaXRlcy4KKwkJICovCisJCXJldHVybiB0cnVl OworCisJY2FzZSBRUFVfV19UTEJfU1RFTkNJTF9TRVRVUDoKKwkJcmV0dXJuIHRydWU7CisJfQor CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFja19saXZlX2NsYW1wcyh1aW50 NjRfdCBpbnN0LAorCQkgIHN0cnVjdCB2YzRfdmFsaWRhdGVkX3NoYWRlcl9pbmZvICp2YWxpZGF0 ZWRfc2hhZGVyLAorCQkgIHN0cnVjdCB2YzRfc2hhZGVyX3ZhbGlkYXRpb25fc3RhdGUgKnZhbGlk YXRpb25fc3RhdGUpCit7CisJdWludDMyX3Qgb3BfYWRkID0gUVBVX0dFVF9GSUVMRChpbnN0LCBR UFVfT1BfQUREKTsKKwl1aW50MzJfdCB3YWRkcl9hZGQgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQ VV9XQUREUl9BREQpOworCXVpbnQzMl90IHdhZGRyX211bCA9IFFQVV9HRVRfRklFTEQoaW5zdCwg UVBVX1dBRERSX01VTCk7CisJdWludDMyX3QgY29uZF9hZGQgPSBRUFVfR0VUX0ZJRUxEKGluc3Qs IFFQVV9DT05EX0FERCk7CisJdWludDMyX3QgYWRkX2EgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQ VV9BRERfQSk7CisJdWludDMyX3QgYWRkX2IgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9BRERf Qik7CisJdWludDMyX3QgcmFkZHJfYSA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX1JBRERSX0Ep OworCXVpbnQzMl90IHJhZGRyX2IgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9SQUREUl9CKTsK Kwl1aW50MzJfdCBzaWcgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9TSUcpOworCWJvb2wgd3Mg PSBpbnN0ICYgUVBVX1dTOworCXVpbnQzMl90IGxyaV9hZGRfYSwgbHJpX2FkZCwgbHJpX211bDsK Kwlib29sIGFkZF9hX2lzX21pbl8wOworCisJLyogQ2hlY2sgd2hldGhlciBPUF9BREQncyBBIGFy Z3VtZW5udCBjb21lcyBmcm9tIGEgbGl2ZSBNQVgoeCwgMCksCisJICogYmVmb3JlIHdlIGNsZWFy IHByZXZpb3VzIGxpdmUgc3RhdGUuCisJICovCisJbHJpX2FkZF9hID0gcmFkZHJfYWRkX2FfdG9f bGl2ZV9yZWdfaW5kZXgoaW5zdCk7CisJYWRkX2FfaXNfbWluXzAgPSAobHJpX2FkZF9hICE9IH4w ICYmCisJCQkgIHZhbGlkYXRpb25fc3RhdGUtPmxpdmVfbWF4X2NsYW1wX3JlZ3NbbHJpX2FkZF9h XSk7CisKKwkvKiBDbGVhciBsaXZlIHN0YXRlIGZvciByZWdpc3RlcnMgd3JpdHRlbiBieSBvdXIg aW5zdHJ1Y3Rpb24uICovCisJbHJpX2FkZCA9IHdhZGRyX3RvX2xpdmVfcmVnX2luZGV4KHdhZGRy X2FkZCwgd3MpOworCWxyaV9tdWwgPSB3YWRkcl90b19saXZlX3JlZ19pbmRleCh3YWRkcl9tdWws ICF3cyk7CisJaWYgKGxyaV9tdWwgIT0gfjApIHsKKwkJdmFsaWRhdGlvbl9zdGF0ZS0+bGl2ZV9t YXhfY2xhbXBfcmVnc1tscmlfbXVsXSA9IGZhbHNlOworCQl2YWxpZGF0aW9uX3N0YXRlLT5saXZl X21pbl9jbGFtcF9vZmZzZXRzW2xyaV9tdWxdID0gfjA7CisJfQorCWlmIChscmlfYWRkICE9IH4w KSB7CisJCXZhbGlkYXRpb25fc3RhdGUtPmxpdmVfbWF4X2NsYW1wX3JlZ3NbbHJpX2FkZF0gPSBm YWxzZTsKKwkJdmFsaWRhdGlvbl9zdGF0ZS0+bGl2ZV9taW5fY2xhbXBfb2Zmc2V0c1tscmlfYWRk XSA9IH4wOworCX0gZWxzZSB7CisJCS8qIE5vdGhpbmcgZnVydGhlciB0byBkbyBmb3IgbGl2ZSB0 cmFja2luZywgc2luY2Ugb25seSBBRERzCisJCSAqIGdlbmVyYXRlIG5ldyBsaXZlIGNsYW1wIHJl Z2lzdGVycy4KKwkJICovCisJCXJldHVybjsKKwl9CisKKwkvKiBOb3csIGhhbmRsZSByZW1haW5p bmcgbGl2ZSBjbGFtcCB0cmFja2luZyBmb3IgdGhlIEFERCBvcGVyYXRpb24uICovCisKKwlpZiAo Y29uZF9hZGQgIT0gUVBVX0NPTkRfQUxXQVlTKQorCQlyZXR1cm47CisKKwlpZiAob3BfYWRkID09 IFFQVV9BX01BWCkgeworCQkvKiBUcmFjayBsaXZlIGNsYW1wcyBvZiBhIHZhbHVlIHRvIGEgbWlu aW11bSBvZiAwIChpbiBlaXRoZXIKKwkJICogYXJnKS4KKwkJICovCisJCWlmIChzaWcgIT0gUVBV X1NJR19TTUFMTF9JTU0gfHwgcmFkZHJfYiAhPSAwIHx8CisJCSAgICAoYWRkX2EgIT0gUVBVX01V WF9CICYmIGFkZF9iICE9IFFQVV9NVVhfQikpIHsKKwkJCXJldHVybjsKKwkJfQorCisJCXZhbGlk YXRpb25fc3RhdGUtPmxpdmVfbWF4X2NsYW1wX3JlZ3NbbHJpX2FkZF0gPSB0cnVlOworCX0gZWxz ZSBpZiAob3BfYWRkID09IFFQVV9BX01JTikgeworCQkvKiBUcmFjayBsaXZlIGNsYW1wcyBvZiBh IHZhbHVlIGNsYW1wZWQgdG8gYSBtaW5pbXVtIG9mIDAgYW5kCisJCSAqIGEgbWF4aW11bSBvZiBz b21lIHVuaWZvcm0ncyBvZmZzZXQuCisJCSAqLworCQlpZiAoIWFkZF9hX2lzX21pbl8wKQorCQkJ cmV0dXJuOworCisJCWlmICghKGFkZF9iID09IFFQVV9NVVhfQSAmJiByYWRkcl9hID09IFFQVV9S X1VOSUYpICYmCisJCSAgICAhKGFkZF9iID09IFFQVV9NVVhfQiAmJiByYWRkcl9iID09IFFQVV9S X1VOSUYgJiYKKwkJICAgICAgc2lnICE9IFFQVV9TSUdfU01BTExfSU1NKSkgeworCQkJcmV0dXJu OworCQl9CisKKwkJdmFsaWRhdGlvbl9zdGF0ZS0+bGl2ZV9taW5fY2xhbXBfb2Zmc2V0c1tscmlf YWRkXSA9CisJCQl2YWxpZGF0ZWRfc2hhZGVyLT51bmlmb3Jtc19zaXplOworCX0KK30KKworc3Rh dGljIGJvb2wKK2NoZWNrX2luc3RydWN0aW9uX3dyaXRlcyh1aW50NjRfdCBpbnN0LAorCQkJIHN0 cnVjdCB2YzRfdmFsaWRhdGVkX3NoYWRlcl9pbmZvICp2YWxpZGF0ZWRfc2hhZGVyLAorCQkJIHN0 cnVjdCB2YzRfc2hhZGVyX3ZhbGlkYXRpb25fc3RhdGUgKnZhbGlkYXRpb25fc3RhdGUpCit7CisJ dWludDMyX3Qgd2FkZHJfYWRkID0gUVBVX0dFVF9GSUVMRChpbnN0LCBRUFVfV0FERFJfQUREKTsK Kwl1aW50MzJfdCB3YWRkcl9tdWwgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9XQUREUl9NVUwp OworCWJvb2wgb2s7CisKKwlpZiAoaXNfdG11X3dyaXRlKHdhZGRyX2FkZCkgJiYgaXNfdG11X3dy aXRlKHdhZGRyX211bCkpIHsKKwkJRFJNX0VSUk9SKCJBREQgYW5kIE1VTCBib3RoIHNldCB1cCB0 ZXh0dXJlc1xuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlvayA9IChjaGVja19yZWdfd3Jp dGUoaW5zdCwgdmFsaWRhdGVkX3NoYWRlciwgdmFsaWRhdGlvbl9zdGF0ZSwKKwkJCSAgICAgIGZh bHNlKSAmJgorCSAgICAgIGNoZWNrX3JlZ193cml0ZShpbnN0LCB2YWxpZGF0ZWRfc2hhZGVyLCB2 YWxpZGF0aW9uX3N0YXRlLAorCQkJICAgICAgdHJ1ZSkpOworCisJdHJhY2tfbGl2ZV9jbGFtcHMo aW5zdCwgdmFsaWRhdGVkX3NoYWRlciwgdmFsaWRhdGlvbl9zdGF0ZSk7CisKKwlyZXR1cm4gb2s7 Cit9CisKK3N0YXRpYyBib29sCitjaGVja19pbnN0cnVjdGlvbl9yZWFkcyh1aW50NjRfdCBpbnN0 LAorCQkJc3RydWN0IHZjNF92YWxpZGF0ZWRfc2hhZGVyX2luZm8gKnZhbGlkYXRlZF9zaGFkZXIp Cit7CisJdWludDMyX3QgcmFkZHJfYSA9IFFQVV9HRVRfRklFTEQoaW5zdCwgUVBVX1JBRERSX0Ep OworCXVpbnQzMl90IHJhZGRyX2IgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9SQUREUl9CKTsK Kwl1aW50MzJfdCBzaWcgPSBRUFVfR0VUX0ZJRUxEKGluc3QsIFFQVV9TSUcpOworCisJaWYgKHJh ZGRyX2EgPT0gUVBVX1JfVU5JRiB8fAorCSAgICAocmFkZHJfYiA9PSBRUFVfUl9VTklGICYmIHNp ZyAhPSBRUFVfU0lHX1NNQUxMX0lNTSkpIHsKKwkJLyogVGhpcyBjYW4ndCBvdmVyZmxvdyB0aGUg dWludDMyX3QsIGJlY2F1c2Ugd2UncmUgcmVhZGluZyA4CisJCSAqIGJ5dGVzIG9mIGluc3RydWN0 aW9uIHRvIGluY3JlbWVudCBieSA0IGhlcmUsIHNvIHdlJ2QKKwkJICogYWxyZWFkeSBiZSBPT00u CisJCSAqLworCQl2YWxpZGF0ZWRfc2hhZGVyLT51bmlmb3Jtc19zaXplICs9IDQ7CisJfQorCisJ cmV0dXJuIHRydWU7Cit9CisKK3N0cnVjdCB2YzRfdmFsaWRhdGVkX3NoYWRlcl9pbmZvICoKK3Zj NF92YWxpZGF0ZV9zaGFkZXIoc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqc2hhZGVyX29iaikK K3sKKwlib29sIGZvdW5kX3NoYWRlcl9lbmQgPSBmYWxzZTsKKwlpbnQgc2hhZGVyX2VuZF9pcCA9 IDA7CisJdWludDMyX3QgaXAsIG1heF9pcDsKKwl1aW50NjRfdCAqc2hhZGVyOworCXN0cnVjdCB2 YzRfdmFsaWRhdGVkX3NoYWRlcl9pbmZvICp2YWxpZGF0ZWRfc2hhZGVyOworCXN0cnVjdCB2YzRf c2hhZGVyX3ZhbGlkYXRpb25fc3RhdGUgdmFsaWRhdGlvbl9zdGF0ZTsKKwlpbnQgaTsKKworCW1l bXNldCgmdmFsaWRhdGlvbl9zdGF0ZSwgMCwgc2l6ZW9mKHZhbGlkYXRpb25fc3RhdGUpKTsKKwor CWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXZhbGlkYXRpb25fc3RhdGUudG11X3NldHVwW2kg LyA0XS5wX29mZnNldFtpICUgNF0gPSB+MDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2 YWxpZGF0aW9uX3N0YXRlLmxpdmVfbWluX2NsYW1wX29mZnNldHMpOyBpKyspCisJCXZhbGlkYXRp b25fc3RhdGUubGl2ZV9taW5fY2xhbXBfb2Zmc2V0c1tpXSA9IH4wOworCisJc2hhZGVyID0gc2hh ZGVyX29iai0+dmFkZHI7CisJbWF4X2lwID0gc2hhZGVyX29iai0+YmFzZS5zaXplIC8gc2l6ZW9m KHVpbnQ2NF90KTsKKworCXZhbGlkYXRlZF9zaGFkZXIgPSBrY2FsbG9jKDEsIHNpemVvZigqdmFs aWRhdGVkX3NoYWRlciksIEdGUF9LRVJORUwpOworCWlmICghdmFsaWRhdGVkX3NoYWRlcikKKwkJ cmV0dXJuIE5VTEw7CisKKwlmb3IgKGlwID0gMDsgaXAgPCBtYXhfaXA7IGlwKyspIHsKKwkJdWlu dDY0X3QgaW5zdCA9IHNoYWRlcltpcF07CisJCXVpbnQzMl90IHNpZyA9IFFQVV9HRVRfRklFTEQo aW5zdCwgUVBVX1NJRyk7CisKKwkJc3dpdGNoIChzaWcpIHsKKwkJY2FzZSBRUFVfU0lHX05PTkU6 CisJCWNhc2UgUVBVX1NJR19XQUlUX0ZPUl9TQ09SRUJPQVJEOgorCQljYXNlIFFQVV9TSUdfU0NP UkVCT0FSRF9VTkxPQ0s6CisJCWNhc2UgUVBVX1NJR19DT0xPUl9MT0FEOgorCQljYXNlIFFQVV9T SUdfTE9BRF9UTVUwOgorCQljYXNlIFFQVV9TSUdfTE9BRF9UTVUxOgorCQljYXNlIFFQVV9TSUdf UFJPR19FTkQ6CisJCWNhc2UgUVBVX1NJR19TTUFMTF9JTU06CisJCQlpZiAoIWNoZWNrX2luc3Ry dWN0aW9uX3dyaXRlcyhpbnN0LCB2YWxpZGF0ZWRfc2hhZGVyLAorCQkJCQkJICAgICAgJnZhbGlk YXRpb25fc3RhdGUpKSB7CisJCQkJRFJNX0VSUk9SKCJCYWQgd3JpdGUgYXQgaXAgJWRcbiIsIGlw KTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisKKwkJCWlmICghY2hlY2tfaW5zdHJ1Y3Rpb25fcmVh ZHMoaW5zdCwgdmFsaWRhdGVkX3NoYWRlcikpCisJCQkJZ290byBmYWlsOworCisJCQlpZiAoc2ln ID09IFFQVV9TSUdfUFJPR19FTkQpIHsKKwkJCQlmb3VuZF9zaGFkZXJfZW5kID0gdHJ1ZTsKKwkJ CQlzaGFkZXJfZW5kX2lwID0gaXA7CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgUVBVX1NJ R19MT0FEX0lNTToKKwkJCWlmICghY2hlY2tfaW5zdHJ1Y3Rpb25fd3JpdGVzKGluc3QsIHZhbGlk YXRlZF9zaGFkZXIsCisJCQkJCQkgICAgICAmdmFsaWRhdGlvbl9zdGF0ZSkpIHsKKwkJCQlEUk1f RVJST1IoIkJhZCBMT0FEX0lNTSB3cml0ZSBhdCBpcCAlZFxuIiwgaXApOworCQkJCWdvdG8gZmFp bDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoIlVuc3VwcG9y dGVkIFFQVSBzaWduYWwgJWQgYXQgIgorCQkJCSAgImluc3RydWN0aW9uICVkXG4iLCBzaWcsIGlw KTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCS8qIFRoZXJlIGFyZSB0d28gZGVsYXkgc2xvdHMg YWZ0ZXIgcHJvZ3JhbSBlbmQgaXMgc2lnbmFsZWQKKwkJICogdGhhdCBhcmUgc3RpbGwgZXhlY3V0 ZWQsIHRoZW4gd2UncmUgZmluaXNoZWQuCisJCSAqLworCQlpZiAoZm91bmRfc2hhZGVyX2VuZCAm JiBpcCA9PSBzaGFkZXJfZW5kX2lwICsgMikKKwkJCWJyZWFrOworCX0KKworCWlmIChpcCA9PSBt YXhfaXApIHsKKwkJRFJNX0VSUk9SKCJzaGFkZXIgZmFpbGVkIHRvIHRlcm1pbmF0ZSBiZWZvcmUg IgorCQkJICAic2hhZGVyIEJPIGVuZCBhdCAlemRcbiIsCisJCQkgIHNoYWRlcl9vYmotPmJhc2Uu c2l6ZSk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBBZ2Fpbiwgbm8gY2hhbmNlIG9mIGludGVn ZXIgb3ZlcmZsb3cgaGVyZSBiZWNhdXNlIHRoZSB3b3JzdCBjYXNlCisJICogc2NlbmFyaW8gaXMg OCBieXRlcyBvZiB1bmlmb3JtcyBwbHVzIGhhbmRsZXMgcGVyIDgtYnl0ZQorCSAqIGluc3RydWN0 aW9uLgorCSAqLworCXZhbGlkYXRlZF9zaGFkZXItPnVuaWZvcm1zX3NyY19zaXplID0KKwkJKHZh bGlkYXRlZF9zaGFkZXItPnVuaWZvcm1zX3NpemUgKworCQkgNCAqIHZhbGlkYXRlZF9zaGFkZXIt Pm51bV90ZXh0dXJlX3NhbXBsZXMpOworCisJcmV0dXJuIHZhbGlkYXRlZF9zaGFkZXI7CisKK2Zh aWw6CisJaWYgKHZhbGlkYXRlZF9zaGFkZXIpIHsKKwkJa2ZyZWUodmFsaWRhdGVkX3NoYWRlci0+ dGV4dHVyZV9zYW1wbGVzKTsKKwkJa2ZyZWUodmFsaWRhdGVkX3NoYWRlcik7CisJfQorCXJldHVy biBOVUxMOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS92YzRfZHJtLmggYi9pbmNs dWRlL3VhcGkvZHJtL3ZjNF9kcm0uaAppbmRleCAwNjhhYWI5Li4wNzE2YjUwIDEwMDY0NAotLS0g YS9pbmNsdWRlL3VhcGkvZHJtL3ZjNF9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL3ZjNF9k cm0uaApAQCAtMjgsOSArMjgsMTEgQEAKIAogI2RlZmluZSBEUk1fVkM0X0NSRUFURV9CTyAgICAg ICAgICAgICAgICAgICAgICAgICAweDAzCiAjZGVmaW5lIERSTV9WQzRfTU1BUF9CTyAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgRFJNX1ZDNF9DUkVBVEVfU0hBREVSX0JP ICAgICAgICAgICAgICAgICAgMHgwNQogCiAjZGVmaW5lIERSTV9JT0NUTF9WQzRfQ1JFQVRFX0JP ICAgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZDNF9DUkVBVEVfQk8s IHN0cnVjdCBkcm1fdmM0X2NyZWF0ZV9ibykKICNkZWZpbmUgRFJNX0lPQ1RMX1ZDNF9NTUFQX0JP ICAgICAgICAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVkM0X01NQVBfQk8s IHN0cnVjdCBkcm1fdmM0X21tYXBfYm8pCisjZGVmaW5lIERSTV9JT0NUTF9WQzRfQ1JFQVRFX1NI QURFUl9CTyAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1ZDNF9DUkVBVEVfU0hB REVSX0JPLCBzdHJ1Y3QgZHJtX3ZjNF9jcmVhdGVfc2hhZGVyX2JvKQogCiAvKioKICAqIHN0cnVj dCBkcm1fdmM0X2NyZWF0ZV9ibyAtIGlvY3RsIGFyZ3VtZW50IGZvciBjcmVhdGluZyBWQzQgQk9z LgpAQCAtNjUsNCArNjcsMjcgQEAgc3RydWN0IGRybV92YzRfbW1hcF9ibyB7CiAJdWludDY0X3Qg b2Zmc2V0OwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgZHJtX3ZjNF9jcmVhdGVfc2hhZGVyX2JvIC0g aW9jdGwgYXJndW1lbnQgZm9yIGNyZWF0aW5nIFZDNAorICogc2hhZGVyIEJPcy4KKyAqCisgKiBT aW5jZSBhbGxvd2luZyBhIHNoYWRlciB0byBiZSBvdmVyd3JpdHRlbiB3aGlsZSBpdCdzIGFsc28g YmVpbmcKKyAqIGV4ZWN1dGVkIGZyb20gd291bGQgYWxsb3cgcHJpdmxlZ2UgZXNjYWxhdGlvbiwg c2hhZGVycyBtdXN0IGJlCisgKiBjcmVhdGVkIHVzaW5nIHRoaXMgaW9jdGwsIGFuZCB0aGV5IGNh bid0IGJlIG1tYXBwZWQgbGF0ZXIuCisgKi8KK3N0cnVjdCBkcm1fdmM0X2NyZWF0ZV9zaGFkZXJf Ym8geworCS8qIFNpemUgb2YgdGhlIGRhdGEgYXJndW1lbnQuICovCisJdWludDMyX3Qgc2l6ZTsK KwkvKiBGbGFncywgY3VycmVudGx5IG11c3QgYmUgMC4gKi8KKwl1aW50MzJfdCBmbGFnczsKKwor CS8qIFBvaW50ZXIgdG8gdGhlIGRhdGEuICovCisJdWludDY0X3QgZGF0YTsKKworCS8qKiBSZXR1 cm5lZCBHRU0gaGFuZGxlIGZvciB0aGUgQk8uICovCisJdWludDMyX3QgaGFuZGxlOworCS8qIFBh ZCwgbXVzdCBiZSAwLiAqLworCXVpbnQzMl90IHBhZDsKK307CisKICNlbmRpZiAvKiBfVUFQSV9W QzRfRFJNX0hfICovCi0tIAoyLjYuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK