From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mikko Perttunen Subject: [PATCH v2 5/6] gpu: host1x: Add Tegra186 support Date: Tue, 5 Sep 2017 11:43:05 +0300 Message-ID: <20170905084306.19318-6-mperttunen@nvidia.com> References: <20170905084306.19318-1-mperttunen@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170905084306.19318-1-mperttunen@nvidia.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: thierry.reding@gmail.com, jonathanh@nvidia.com, robh+dt@kernel.org, mark.rutland@arm.com Cc: devicetree@vger.kernel.org, dnibade@nvidia.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, amerilainen@nvidia.com, linux-tegra@vger.kernel.org, sgurrappadi@nvidia.com, Mikko Perttunen , digetx@gmail.com, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBIb3N0MXggcHJlc2VudCBvbiB0 aGUgVGVncmExODYuClRoZSByZWdpc3RlciBzcGFjZSBoYXMgYmVlbiBzaHVmZmxlZCBhcm91bmQg YSBsaXR0bGUgYml0LCByZXF1aXJpbmcKYWRkaXRpb24gb2Ygc29tZSBjaGlwLXNwZWNpZmljIGNv ZGUgc2VjdGlvbnMuIFRlZ3JhMTg2IGFsc28gYWRkcwpzZXZlcmFsIG5ldyBmZWF0dXJlcywgbW9z dCBpbXBvcnRhbnRseSB0aGUgaHlwZXJ2aXNvciwgYnV0IHRob3NlIGFyZQpub3QgeWV0IHN1cHBv cnRlZCB3aXRoIHRoaXMgY29tbWl0LgoKU2lnbmVkLW9mZi1ieTogTWlra28gUGVydHR1bmVuIDxt cGVydHR1bmVuQG52aWRpYS5jb20+ClJldmlld2VkLWJ5OiBEbWl0cnkgT3NpcGVua28gPGRpZ2V0 eEBnbWFpbC5jb20+ClRlc3RlZC1ieTogRG1pdHJ5IE9zaXBlbmtvIDxkaWdldHhAZ21haWwuY29t PgotLS0KIGRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAg IDMgKy0KIGRyaXZlcnMvZ3B1L2hvc3QxeC9kZXYuYyAgICAgICAgICAgICAgICAgICAgICAgfCAg NjAgKysrKysrKy0KIGRyaXZlcnMvZ3B1L2hvc3QxeC9kZXYuaCAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDQgKwogZHJpdmVycy9ncHUvaG9zdDF4L2h3L2NkbWFfaHcuYyAgICAgICAgICAgICAg ICB8ICA0OSArKysrLS0tCiBkcml2ZXJzL2dwdS9ob3N0MXgvaHcvZGVidWdfaHcuYyAgICAgICAg ICAgICAgIHwgMTM3ICstLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9k ZWJ1Z19od18xeDAxLmMgICAgICAgICAgfCAxNTQgKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9ob3N0MXgvaHcvZGVidWdfaHdfMXgwNi5jICAgICAgICAgIHwgMTMzICsrKysrKysr KysrKysrKysrKwogZHJpdmVycy9ncHUvaG9zdDF4L2h3L2hvc3QxeDAxLmMgICAgICAgICAgICAg ICB8ICAgMiArCiBkcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDIuYyAgICAgICAgICAgICAg IHwgICAyICsKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwNC5jICAgICAgICAgICAgICAg fCAgIDIgKwogZHJpdmVycy9ncHUvaG9zdDF4L2h3L2hvc3QxeDA1LmMgICAgICAgICAgICAgICB8 ICAgMiArCiBkcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDYuYyAgICAgICAgICAgICAgIHwg IDQ0ICsrKysrKwogZHJpdmVycy9ncHUvaG9zdDF4L2h3L2hvc3QxeDA2LmggICAgICAgICAgICAg ICB8ICAyNiArKysrCiBkcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDZfaGFyZHdhcmUuaCAg ICAgIHwgMTQyICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19o b3N0MXgwNl9oeXBlcnZpc29yLmggfCAgMzIgKysrKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9o d19ob3N0MXgwNl91Y2xhc3MuaCAgICAgfCAxODEgKysrKysrKysrKysrKysrKysrKysrKysrKwog ZHJpdmVycy9ncHUvaG9zdDF4L2h3L2h3X2hvc3QxeDA2X3ZtLmggICAgICAgICB8ICA0NyArKysr KysrCiBkcml2ZXJzL2dwdS9ob3N0MXgvaHcvaW50cl9ody5jICAgICAgICAgICAgICAgIHwgIDI5 ICsrLS0KIDE4IGZpbGVzIGNoYW5nZWQsIDg4MCBpbnNlcnRpb25zKCspLCAxNjkgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvaG9zdDF4L2h3L2RlYnVnX2h3XzF4 MDEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9kZWJ1Z19od18x eDA2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDYu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwNi5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvaG9zdDF4L2h3L2hvc3QxeDA2X2hhcmR3YXJl LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9ob3N0MXgvaHcvaHdfaG9zdDF4MDZf aHlwZXJ2aXNvci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvaG9zdDF4L2h3L2h3 X2hvc3QxeDA2X3VjbGFzcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvaG9zdDF4 L2h3L2h3X2hvc3QxeDA2X3ZtLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9ob3N0MXgvTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGUKaW5kZXggYTFkOTk3NGNmY2I1Li40 ZmI2MWJkNTdhZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGUKQEAgLTExLDYgKzExLDcgQEAgaG9zdDF4LXkg PSBcCiAJaHcvaG9zdDF4MDEubyBcCiAJaHcvaG9zdDF4MDIubyBcCiAJaHcvaG9zdDF4MDQubyBc Ci0JaHcvaG9zdDF4MDUubworCWh3L2hvc3QxeDA1Lm8gXAorCWh3L2hvc3QxeDA2Lm8KIAogb2Jq LSQoQ09ORklHX1RFR1JBX0hPU1QxWCkgKz0gaG9zdDF4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2hvc3QxeC9kZXYuYyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9kZXYuYwppbmRleCAyYzU4YTM5 MDEyM2EuLjZhNGZmMmQ1OTQ5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvaG9zdDF4L2Rldi5j CisrKyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9kZXYuYwpAQCAtMzksNiArMzksMTcgQEAKICNpbmNs dWRlICJody9ob3N0MXgwMi5oIgogI2luY2x1ZGUgImh3L2hvc3QxeDA0LmgiCiAjaW5jbHVkZSAi aHcvaG9zdDF4MDUuaCIKKyNpbmNsdWRlICJody9ob3N0MXgwNi5oIgorCit2b2lkIGhvc3QxeF9o eXBlcnZpc29yX3dyaXRlbChzdHJ1Y3QgaG9zdDF4ICpob3N0MXgsIHUzMiB2LCB1MzIgcikKK3sK Kwl3cml0ZWwodiwgaG9zdDF4LT5odl9yZWdzICsgcik7Cit9CisKK3UzMiBob3N0MXhfaHlwZXJ2 aXNvcl9yZWFkbChzdHJ1Y3QgaG9zdDF4ICpob3N0MXgsIHUzMiByKQoreworCXJldHVybiByZWFk bChob3N0MXgtPmh2X3JlZ3MgKyByKTsKK30KIAogdm9pZCBob3N0MXhfc3luY193cml0ZWwoc3Ry dWN0IGhvc3QxeCAqaG9zdDF4LCB1MzIgdiwgdTMyIHIpCiB7CkBAIC0xMDQsNyArMTE1LDE5IEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG9zdDF4X2luZm8gaG9zdDF4MDVfaW5mbyA9IHsKIAkuZG1h X21hc2sgPSBETUFfQklUX01BU0soMzQpLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBob3N0 MXhfaW5mbyBob3N0MXgwNl9pbmZvID0geworCS5uYl9jaGFubmVscyA9IDYzLAorCS5uYl9wdHMg PSA1NzYsCisJLm5iX21sb2NrcyA9IDI0LAorCS5uYl9iYXNlcyA9IDE2LAorCS5pbml0ID0gaG9z dDF4MDZfaW5pdCwKKwkuc3luY19vZmZzZXQgPSAweDAsCisJLmRtYV9tYXNrID0gRE1BX0JJVF9N QVNLKDM0KSwKKwkuaGFzX2h5cGVydmlzb3IgPSB0cnVlLAorfTsKKwogc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgaG9zdDF4X29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJudmlkaWEsdGVncmExODYtaG9zdDF4IiwgLmRhdGEgPSAmaG9zdDF4MDZfaW5mbywgfSwKIAl7 IC5jb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTIxMC1ob3N0MXgiLCAuZGF0YSA9ICZob3N0MXgw NV9pbmZvLCB9LAogCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LWhvc3QxeCIsIC5k YXRhID0gJmhvc3QxeDA0X2luZm8sIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJudmlkaWEsdGVncmEx MTQtaG9zdDF4IiwgLmRhdGEgPSAmaG9zdDF4MDJfaW5mbywgfSwKQEAgLTExNyw4ICsxNDAsOSBA QCBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBob3N0MXhfb2ZfbWF0Y2gpOwogc3RhdGljIGludCBo b3N0MXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAljb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkICppZDsKKwljb25zdCBzdHJ1Y3QgaG9zdDF4X2luZm8gKmluZm87CiAJ c3RydWN0IGhvc3QxeCAqaG9zdDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJc3RydWN0IHJl c291cmNlICpyZWdzLCAqaHZfcmVncyA9IE5VTEw7CiAJaW50IHN5bmNwdF9pcnE7CiAJaW50IGVy cjsKIApAQCAtMTI2LDEwICsxNTAsMjggQEAgc3RhdGljIGludCBob3N0MXhfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoIWlkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAot CXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwot CWlmICghcmVncykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJlZ2lz dGVyc1xuIik7Ci0JCXJldHVybiAtRU5YSU87CisJaW5mbyA9IGlkLT5kYXRhOworCisJaWYgKGlu Zm8tPmhhc19oeXBlcnZpc29yKSB7CisJCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnlu YW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAidm0iKTsKKwkJaWYgKCFyZWdzKSB7CisJCQlkZXZf ZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHZtIHJlZ2lzdGVyc1xuIik7CisJCQlyZXR1 cm4gLUVOWElPOworCQl9CisKKwkJaHZfcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5h bWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCisJCQkJCQkgICAgICAgImh5cGVydmlzb3IiKTsKKwkJ aWYgKCFodl9yZWdzKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBn ZXQgaHlwZXJ2aXNvciByZWdpc3RlcnNcbiIpOworCQkJcmV0dXJuIC1FTlhJTzsKKwkJfQorCX0g ZWxzZSB7CisJCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9N RU0sIDApOworCQlpZiAoIXJlZ3MpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0 byBnZXQgcmVnaXN0ZXJzXG4iKTsKKwkJCXJldHVybiAtRU5YSU87CisJCX0KIAl9CiAKIAlzeW5j cHRfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKQEAgLTE0Niw3ICsxODgsNyBAQCBz dGF0aWMgaW50IGhvc3QxeF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCUlO SVRfTElTVF9IRUFEKCZob3N0LT5kZXZpY2VzKTsKIAlJTklUX0xJU1RfSEVBRCgmaG9zdC0+bGlz dCk7CiAJaG9zdC0+ZGV2ID0gJnBkZXYtPmRldjsKLQlob3N0LT5pbmZvID0gaWQtPmRhdGE7CisJ aG9zdC0+aW5mbyA9IGluZm87CiAKIAkvKiBzZXQgY29tbW9uIGhvc3QxeCBkZXZpY2UgZGF0YSAq LwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhvc3QpOwpAQCAtMTU1LDYgKzE5NywxMiBA QCBzdGF0aWMgaW50IGhvc3QxeF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQog CWlmIChJU19FUlIoaG9zdC0+cmVncykpCiAJCXJldHVybiBQVFJfRVJSKGhvc3QtPnJlZ3MpOwog CisJaWYgKGluZm8tPmhhc19oeXBlcnZpc29yKSB7CisJCWhvc3QtPmh2X3JlZ3MgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgaHZfcmVncyk7CisJCWlmIChJU19FUlIoaG9zdC0+ aHZfcmVncykpCisJCQlyZXR1cm4gUFRSX0VSUihob3N0LT5odl9yZWdzKTsKKwl9CisKIAlkbWFf c2V0X21hc2tfYW5kX2NvaGVyZW50KGhvc3QtPmRldiwgaG9zdC0+aW5mby0+ZG1hX21hc2spOwog CiAJaWYgKGhvc3QtPmluZm8tPmluaXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2hvc3Qx eC9kZXYuaCBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9kZXYuaAppbmRleCBmZmRiYzE1Yjc0OWIuLmRl ZjgwMmMwYTZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvaG9zdDF4L2Rldi5oCisrKyBiL2Ry aXZlcnMvZ3B1L2hvc3QxeC9kZXYuaApAQCAtMTAwLDEyICsxMDAsMTQgQEAgc3RydWN0IGhvc3Qx eF9pbmZvIHsKIAlpbnQgKCppbml0KShzdHJ1Y3QgaG9zdDF4ICpob3N0MXgpOyAvKiBpbml0aWFs aXplIHBlciBTb0Mgb3BzICovCiAJdW5zaWduZWQgaW50IHN5bmNfb2Zmc2V0OyAvKiBvZmZzZXQg b2Ygc3luY3BvaW50IHJlZ2lzdGVycyAqLwogCXU2NCBkbWFfbWFzazsgLyogbWFzayBvZiBhZGRy ZXNzYWJsZSBtZW1vcnkgKi8KKwlib29sIGhhc19oeXBlcnZpc29yOyAvKiBoYXMgaHlwZXJ2aXNv ciByZWdpc3RlcnMgKi8KIH07CiAKIHN0cnVjdCBob3N0MXggewogCWNvbnN0IHN0cnVjdCBob3N0 MXhfaW5mbyAqaW5mbzsKIAogCXZvaWQgX19pb21lbSAqcmVnczsKKwl2b2lkIF9faW9tZW0gKmh2 X3JlZ3M7IC8qIGh5cGVydmlzb3IgcmVnaW9uICovCiAJc3RydWN0IGhvc3QxeF9zeW5jcHQgKnN5 bmNwdDsKIAlzdHJ1Y3QgaG9zdDF4X3N5bmNwdF9iYXNlICpiYXNlczsKIAlzdHJ1Y3QgZGV2aWNl ICpkZXY7CkBAIC0xNDAsNiArMTQyLDggQEAgc3RydWN0IGhvc3QxeCB7CiAJc3RydWN0IGxpc3Rf aGVhZCBsaXN0OwogfTsKIAordm9pZCBob3N0MXhfaHlwZXJ2aXNvcl93cml0ZWwoc3RydWN0IGhv c3QxeCAqaG9zdDF4LCB1MzIgciwgdTMyIHYpOwordTMyIGhvc3QxeF9oeXBlcnZpc29yX3JlYWRs KHN0cnVjdCBob3N0MXggKmhvc3QxeCwgdTMyIHIpOwogdm9pZCBob3N0MXhfc3luY193cml0ZWwo c3RydWN0IGhvc3QxeCAqaG9zdDF4LCB1MzIgciwgdTMyIHYpOwogdTMyIGhvc3QxeF9zeW5jX3Jl YWRsKHN0cnVjdCBob3N0MXggKmhvc3QxeCwgdTMyIHIpOwogdm9pZCBob3N0MXhfY2hfd3JpdGVs KHN0cnVjdCBob3N0MXhfY2hhbm5lbCAqY2gsIHUzMiByLCB1MzIgdik7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9ob3N0MXgvaHcvY2RtYV9ody5jIGIvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2Nk bWFfaHcuYwppbmRleCA2YjIzMTExOTE5M2UuLmNlMzIwNTM0Y2JlZCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvaG9zdDF4L2h3L2NkbWFfaHcuYworKysgYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcv Y2RtYV9ody5jCkBAIC0xNzIsNiArMTcyLDMwIEBAIHN0YXRpYyB2b2lkIGNkbWFfc3RvcChzdHJ1 Y3QgaG9zdDF4X2NkbWEgKmNkbWEpCiAJbXV0ZXhfdW5sb2NrKCZjZG1hLT5sb2NrKTsKIH0KIAor c3RhdGljIHZvaWQgY2RtYV9od19jbWRwcm9jX3N0b3Aoc3RydWN0IGhvc3QxeCAqaG9zdCwgc3Ry dWN0IGhvc3QxeF9jaGFubmVsICpjaCwKKwkJCQkgYm9vbCBzdG9wKQoreworI2lmIEhPU1QxWF9I VyA+PSA2CisJaG9zdDF4X2NoX3dyaXRlbChjaCwgc3RvcCA/IDB4MSA6IDB4MCwgSE9TVDFYX0NI QU5ORUxfQ01EUFJPQ19TVE9QKTsKKyNlbHNlCisJdTMyIGNtZHByb2Nfc3RvcCA9IGhvc3QxeF9z eW5jX3JlYWRsKGhvc3QsIEhPU1QxWF9TWU5DX0NNRFBST0NfU1RPUCk7CisJaWYgKHN0b3ApCisJ CWNtZHByb2Nfc3RvcCB8PSBCSVQoY2gtPmlkKTsKKwllbHNlCisJCWNtZHByb2Nfc3RvcCAmPSB+ QklUKGNoLT5pZCk7CisJaG9zdDF4X3N5bmNfd3JpdGVsKGhvc3QsIGNtZHByb2Nfc3RvcCwgSE9T VDFYX1NZTkNfQ01EUFJPQ19TVE9QKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBjZG1hX2h3 X3RlYXJkb3duKHN0cnVjdCBob3N0MXggKmhvc3QsIHN0cnVjdCBob3N0MXhfY2hhbm5lbCAqY2gp Cit7CisjaWYgSE9TVDFYX0hXID49IDYKKwlob3N0MXhfY2hfd3JpdGVsKGNoLCAweDEsIEhPU1Qx WF9DSEFOTkVMX1RFQVJET1dOKTsKKyNlbHNlCisJaG9zdDF4X3N5bmNfd3JpdGVsKGhvc3QsIEJJ VChjaC0+aWQpLCBIT1NUMVhfU1lOQ19DSF9URUFSRE9XTik7CisjZW5kaWYKK30KKwogLyoKICAq IFN0b3BzIGJvdGggY2hhbm5lbCdzIGNvbW1hbmQgcHJvY2Vzc29yIGFuZCBDRE1BIGltbWVkaWF0 ZWx5LgogICogQWxzbywgdGVhcnMgZG93biB0aGUgY2hhbm5lbCBhbmQgcmVzZXRzIGNvcnJlc3Bv bmRpbmcgbW9kdWxlLgpAQCAtMTgwLDcgKzIwNCw2IEBAIHN0YXRpYyB2b2lkIGNkbWFfZnJlZXpl KHN0cnVjdCBob3N0MXhfY2RtYSAqY2RtYSkKIHsKIAlzdHJ1Y3QgaG9zdDF4ICpob3N0ID0gY2Rt YV90b19ob3N0MXgoY2RtYSk7CiAJc3RydWN0IGhvc3QxeF9jaGFubmVsICpjaCA9IGNkbWFfdG9f Y2hhbm5lbChjZG1hKTsKLQl1MzIgY21kcHJvY19zdG9wOwogCiAJaWYgKGNkbWEtPnRvcm5kb3du ICYmICFjZG1hLT5ydW5uaW5nKSB7CiAJCWRldl93YXJuKGhvc3QtPmRldiwgIkFscmVhZHkgdG9y biBkb3duXG4iKTsKQEAgLTE4OSw5ICsyMTIsNyBAQCBzdGF0aWMgdm9pZCBjZG1hX2ZyZWV6ZShz dHJ1Y3QgaG9zdDF4X2NkbWEgKmNkbWEpCiAKIAlkZXZfZGJnKGhvc3QtPmRldiwgImZyZWV6aW5n IGNoYW5uZWwgKGlkICVkKVxuIiwgY2gtPmlkKTsKIAotCWNtZHByb2Nfc3RvcCA9IGhvc3QxeF9z eW5jX3JlYWRsKGhvc3QsIEhPU1QxWF9TWU5DX0NNRFBST0NfU1RPUCk7Ci0JY21kcHJvY19zdG9w IHw9IEJJVChjaC0+aWQpOwotCWhvc3QxeF9zeW5jX3dyaXRlbChob3N0LCBjbWRwcm9jX3N0b3As IEhPU1QxWF9TWU5DX0NNRFBST0NfU1RPUCk7CisJY2RtYV9od19jbWRwcm9jX3N0b3AoaG9zdCwg Y2gsIHRydWUpOwogCiAJZGV2X2RiZyhob3N0LT5kZXYsICIlczogRE1BIEdFVCAweCV4LCBQVVQg SFcgMHgleCAvIHNoYWRvdyAweCV4XG4iLAogCQlfX2Z1bmNfXywgaG9zdDF4X2NoX3JlYWRsKGNo LCBIT1NUMVhfQ0hBTk5FTF9ETUFHRVQpLApAQCAtMjAxLDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lk IGNkbWFfZnJlZXplKHN0cnVjdCBob3N0MXhfY2RtYSAqY2RtYSkKIAlob3N0MXhfY2hfd3JpdGVs KGNoLCBIT1NUMVhfQ0hBTk5FTF9ETUFDVFJMX0RNQVNUT1AsCiAJCQkgSE9TVDFYX0NIQU5ORUxf RE1BQ1RSTCk7CiAKLQlob3N0MXhfc3luY193cml0ZWwoaG9zdCwgQklUKGNoLT5pZCksIEhPU1Qx WF9TWU5DX0NIX1RFQVJET1dOKTsKKwljZG1hX2h3X3RlYXJkb3duKGhvc3QsIGNoKTsKIAogCWNk bWEtPnJ1bm5pbmcgPSBmYWxzZTsKIAljZG1hLT50b3JuZG93biA9IHRydWU7CkBAIC0yMTEsMTUg KzIzMiwxMiBAQCBzdGF0aWMgdm9pZCBjZG1hX3Jlc3VtZShzdHJ1Y3QgaG9zdDF4X2NkbWEgKmNk bWEsIHUzMiBnZXRwdHIpCiB7CiAJc3RydWN0IGhvc3QxeCAqaG9zdDF4ID0gY2RtYV90b19ob3N0 MXgoY2RtYSk7CiAJc3RydWN0IGhvc3QxeF9jaGFubmVsICpjaCA9IGNkbWFfdG9fY2hhbm5lbChj ZG1hKTsKLQl1MzIgY21kcHJvY19zdG9wOwogCiAJZGV2X2RiZyhob3N0MXgtPmRldiwKIAkJInJl c3VtaW5nIGNoYW5uZWwgKGlkICV1LCBETUFHRVQgcmVzdGFydCA9IDB4JXgpXG4iLAogCQljaC0+ aWQsIGdldHB0cik7CiAKLQljbWRwcm9jX3N0b3AgPSBob3N0MXhfc3luY19yZWFkbChob3N0MXgs IEhPU1QxWF9TWU5DX0NNRFBST0NfU1RPUCk7Ci0JY21kcHJvY19zdG9wICY9IH5CSVQoY2gtPmlk KTsKLQlob3N0MXhfc3luY193cml0ZWwoaG9zdDF4LCBjbWRwcm9jX3N0b3AsIEhPU1QxWF9TWU5D X0NNRFBST0NfU1RPUCk7CisJY2RtYV9od19jbWRwcm9jX3N0b3AoaG9zdDF4LCBjaCwgZmFsc2Up OwogCiAJY2RtYS0+dG9ybmRvd24gPSBmYWxzZTsKIAljZG1hX3RpbWVvdXRfcmVzdGFydChjZG1h LCBnZXRwdHIpOwpAQCAtMjMyLDcgKzI1MCw3IEBAIHN0YXRpYyB2b2lkIGNkbWFfcmVzdW1lKHN0 cnVjdCBob3N0MXhfY2RtYSAqY2RtYSwgdTMyIGdldHB0cikKICAqLwogc3RhdGljIHZvaWQgY2Rt YV90aW1lb3V0X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXUzMiBwcmV2 X2NtZHByb2MsIGNtZHByb2Nfc3RvcCwgc3luY3B0X3ZhbDsKKwl1MzIgc3luY3B0X3ZhbDsKIAlz dHJ1Y3QgaG9zdDF4X2NkbWEgKmNkbWE7CiAJc3RydWN0IGhvc3QxeCAqaG9zdDF4OwogCXN0cnVj dCBob3N0MXhfY2hhbm5lbCAqY2g7CkBAIC0yNTQsMTIgKzI3Miw3IEBAIHN0YXRpYyB2b2lkIGNk bWFfdGltZW91dF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAl9CiAKIAkvKiBz dG9wIHByb2Nlc3NpbmcgdG8gZ2V0IGEgY2xlYW4gc25hcHNob3QgKi8KLQlwcmV2X2NtZHByb2Mg PSBob3N0MXhfc3luY19yZWFkbChob3N0MXgsIEhPU1QxWF9TWU5DX0NNRFBST0NfU1RPUCk7Ci0J Y21kcHJvY19zdG9wID0gcHJldl9jbWRwcm9jIHwgQklUKGNoLT5pZCk7Ci0JaG9zdDF4X3N5bmNf d3JpdGVsKGhvc3QxeCwgY21kcHJvY19zdG9wLCBIT1NUMVhfU1lOQ19DTURQUk9DX1NUT1ApOwot Ci0JZGV2X2RiZyhob3N0MXgtPmRldiwgImNkbWFfdGltZW91dDogY21kcHJvYyB3YXMgMHgleCBp cyAweCV4XG4iLAotCQlwcmV2X2NtZHByb2MsIGNtZHByb2Nfc3RvcCk7CisJY2RtYV9od19jbWRw cm9jX3N0b3AoaG9zdDF4LCBjaCwgdHJ1ZSk7CiAKIAlzeW5jcHRfdmFsID0gaG9zdDF4X3N5bmNw dF9sb2FkKGNkbWEtPnRpbWVvdXQuc3luY3B0KTsKIApAQCAtMjY4LDkgKzI4MSw3IEBAIHN0YXRp YyB2b2lkIGNkbWFfdGltZW91dF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJ ZGV2X2RiZyhob3N0MXgtPmRldiwKIAkJCSJjZG1hX3RpbWVvdXQ6IGV4cGlyZWQsIGJ1dCBidWZm ZXIgaGFkIGNvbXBsZXRlZFxuIik7CiAJCS8qIHJlc3RvcmUgKi8KLQkJY21kcHJvY19zdG9wID0g cHJldl9jbWRwcm9jICYgfihCSVQoY2gtPmlkKSk7Ci0JCWhvc3QxeF9zeW5jX3dyaXRlbChob3N0 MXgsIGNtZHByb2Nfc3RvcCwKLQkJCQkgICBIT1NUMVhfU1lOQ19DTURQUk9DX1NUT1ApOworCQlj ZG1hX2h3X2NtZHByb2Nfc3RvcChob3N0MXgsIGNoLCBmYWxzZSk7CiAJCW11dGV4X3VubG9jaygm Y2RtYS0+bG9jayk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9ob3N0 MXgvaHcvZGVidWdfaHcuYyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9kZWJ1Z19ody5jCmluZGV4 IDdhNGEzMjg2ZTRhNy4uNzcwZDkyZTYyZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9ob3N0 MXgvaHcvZGVidWdfaHcuYworKysgYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvZGVidWdfaHcuYwpA QCAtMTc0LDEzOCArMTc0LDExIEBAIHN0YXRpYyB2b2lkIHNob3dfY2hhbm5lbF9nYXRoZXJzKHN0 cnVjdCBvdXRwdXQgKm8sIHN0cnVjdCBob3N0MXhfY2RtYSAqY2RtYSkKIAl9CiB9CiAKLXN0YXRp YyB2b2lkIGhvc3QxeF9kZWJ1Z19zaG93X2NoYW5uZWxfY2RtYShzdHJ1Y3QgaG9zdDF4ICpob3N0 LAotCQkJCQkgICBzdHJ1Y3QgaG9zdDF4X2NoYW5uZWwgKmNoLAotCQkJCQkgICBzdHJ1Y3Qgb3V0 cHV0ICpvKQotewotCXN0cnVjdCBob3N0MXhfY2RtYSAqY2RtYSA9ICZjaC0+Y2RtYTsKLQl1MzIg ZG1hcHV0LCBkbWFnZXQsIGRtYWN0cmw7Ci0JdTMyIGNic3RhdCwgY2JyZWFkOwotCXUzMiB2YWws IGJhc2UsIGJhc2V2YWw7Ci0KLQlkbWFwdXQgPSBob3N0MXhfY2hfcmVhZGwoY2gsIEhPU1QxWF9D SEFOTkVMX0RNQVBVVCk7Ci0JZG1hZ2V0ID0gaG9zdDF4X2NoX3JlYWRsKGNoLCBIT1NUMVhfQ0hB Tk5FTF9ETUFHRVQpOwotCWRtYWN0cmwgPSBob3N0MXhfY2hfcmVhZGwoY2gsIEhPU1QxWF9DSEFO TkVMX0RNQUNUUkwpOwotCWNicmVhZCA9IGhvc3QxeF9zeW5jX3JlYWRsKGhvc3QsIEhPU1QxWF9T WU5DX0NCUkVBRChjaC0+aWQpKTsKLQljYnN0YXQgPSBob3N0MXhfc3luY19yZWFkbChob3N0LCBI T1NUMVhfU1lOQ19DQlNUQVQoY2gtPmlkKSk7Ci0KLQlob3N0MXhfZGVidWdfb3V0cHV0KG8sICIl dS0lczogIiwgY2gtPmlkLCBkZXZfbmFtZShjaC0+ZGV2KSk7Ci0KLQlpZiAoSE9TVDFYX0NIQU5O RUxfRE1BQ1RSTF9ETUFTVE9QX1YoZG1hY3RybCkgfHwKLQkgICAgIWNoLT5jZG1hLnB1c2hfYnVm ZmVyLm1hcHBlZCkgewotCQlob3N0MXhfZGVidWdfb3V0cHV0KG8sICJpbmFjdGl2ZVxuXG4iKTsK LQkJcmV0dXJuOwotCX0KLQotCWlmIChIT1NUMVhfU1lOQ19DQlNUQVRfQ0JDTEFTU19WKGNic3Rh dCkgPT0gSE9TVDFYX0NMQVNTX0hPU1QxWCAmJgotCSAgICBIT1NUMVhfU1lOQ19DQlNUQVRfQ0JP RkZTRVRfVihjYnN0YXQpID09Ci0JCQlIT1NUMVhfVUNMQVNTX1dBSVRfU1lOQ1BUKQotCQlob3N0 MXhfZGVidWdfb3V0cHV0KG8sICJ3YWl0aW5nIG9uIHN5bmNwdCAlZCB2YWwgJWRcbiIsCi0JCQkJ ICAgIGNicmVhZCA+PiAyNCwgY2JyZWFkICYgMHhmZmZmZmYpOwotCWVsc2UgaWYgKEhPU1QxWF9T WU5DX0NCU1RBVF9DQkNMQVNTX1YoY2JzdGF0KSA9PQotCQkJCUhPU1QxWF9DTEFTU19IT1NUMVgg JiYKLQkJIEhPU1QxWF9TWU5DX0NCU1RBVF9DQk9GRlNFVF9WKGNic3RhdCkgPT0KLQkJCQlIT1NU MVhfVUNMQVNTX1dBSVRfU1lOQ1BUX0JBU0UpIHsKLQkJYmFzZSA9IChjYnJlYWQgPj4gMTYpICYg MHhmZjsKLQkJYmFzZXZhbCA9Ci0JCQlob3N0MXhfc3luY19yZWFkbChob3N0LCBIT1NUMVhfU1lO Q19TWU5DUFRfQkFTRShiYXNlKSk7Ci0JCXZhbCA9IGNicmVhZCAmIDB4ZmZmZjsKLQkJaG9zdDF4 X2RlYnVnX291dHB1dChvLCAid2FpdGluZyBvbiBzeW5jcHQgJWQgdmFsICVkIChiYXNlICVkID0g JWQ7IG9mZnNldCA9ICVkKVxuIiwKLQkJCQkgICAgY2JyZWFkID4+IDI0LCBiYXNldmFsICsgdmFs LCBiYXNlLAotCQkJCSAgICBiYXNldmFsLCB2YWwpOwotCX0gZWxzZQotCQlob3N0MXhfZGVidWdf b3V0cHV0KG8sICJhY3RpdmUgY2xhc3MgJTAyeCwgb2Zmc2V0ICUwNHgsIHZhbCAlMDh4XG4iLAot CQkJCSAgICBIT1NUMVhfU1lOQ19DQlNUQVRfQ0JDTEFTU19WKGNic3RhdCksCi0JCQkJICAgIEhP U1QxWF9TWU5DX0NCU1RBVF9DQk9GRlNFVF9WKGNic3RhdCksCi0JCQkJICAgIGNicmVhZCk7Ci0K LQlob3N0MXhfZGVidWdfb3V0cHV0KG8sICJETUFQVVQgJTA4eCwgRE1BR0VUICUwOHgsIERNQUNU TCAlMDh4XG4iLAotCQkJICAgIGRtYXB1dCwgZG1hZ2V0LCBkbWFjdHJsKTsKLQlob3N0MXhfZGVi dWdfb3V0cHV0KG8sICJDQlJFQUQgJTA4eCwgQ0JTVEFUICUwOHhcbiIsIGNicmVhZCwgY2JzdGF0 KTsKLQotCXNob3dfY2hhbm5lbF9nYXRoZXJzKG8sIGNkbWEpOwotCWhvc3QxeF9kZWJ1Z19vdXRw dXQobywgIlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGhvc3QxeF9kZWJ1Z19zaG93X2NoYW5uZWxf ZmlmbyhzdHJ1Y3QgaG9zdDF4ICpob3N0LAotCQkJCQkgICBzdHJ1Y3QgaG9zdDF4X2NoYW5uZWwg KmNoLAotCQkJCQkgICBzdHJ1Y3Qgb3V0cHV0ICpvKQotewotCXUzMiB2YWwsIHJkX3B0ciwgd3Jf cHRyLCBzdGFydCwgZW5kOwotCXVuc2lnbmVkIGludCBkYXRhX2NvdW50ID0gMDsKLQotCWhvc3Qx eF9kZWJ1Z19vdXRwdXQobywgIiV1OiBmaWZvOlxuIiwgY2gtPmlkKTsKLQotCXZhbCA9IGhvc3Qx eF9jaF9yZWFkbChjaCwgSE9TVDFYX0NIQU5ORUxfRklGT1NUQVQpOwotCWhvc3QxeF9kZWJ1Z19v dXRwdXQobywgIkZJRk9TVEFUICUwOHhcbiIsIHZhbCk7Ci0JaWYgKEhPU1QxWF9DSEFOTkVMX0ZJ Rk9TVEFUX0NGRU1QVFlfVih2YWwpKSB7Ci0JCWhvc3QxeF9kZWJ1Z19vdXRwdXQobywgIltlbXB0 eV1cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaG9zdDF4X3N5bmNfd3JpdGVsKGhvc3QsIDB4MCwg SE9TVDFYX1NZTkNfQ0ZQRUVLX0NUUkwpOwotCWhvc3QxeF9zeW5jX3dyaXRlbChob3N0LCBIT1NU MVhfU1lOQ19DRlBFRUtfQ1RSTF9FTkFfRigxKSB8Ci0JCQkgICBIT1NUMVhfU1lOQ19DRlBFRUtf Q1RSTF9DSEFOTlJfRihjaC0+aWQpLAotCQkJICAgSE9TVDFYX1NZTkNfQ0ZQRUVLX0NUUkwpOwot Ci0JdmFsID0gaG9zdDF4X3N5bmNfcmVhZGwoaG9zdCwgSE9TVDFYX1NZTkNfQ0ZQRUVLX1BUUlMp OwotCXJkX3B0ciA9IEhPU1QxWF9TWU5DX0NGUEVFS19QVFJTX0NGX1JEX1BUUl9WKHZhbCk7Ci0J d3JfcHRyID0gSE9TVDFYX1NZTkNfQ0ZQRUVLX1BUUlNfQ0ZfV1JfUFRSX1YodmFsKTsKLQotCXZh bCA9IGhvc3QxeF9zeW5jX3JlYWRsKGhvc3QsIEhPU1QxWF9TWU5DX0NGX1NFVFVQKGNoLT5pZCkp OwotCXN0YXJ0ID0gSE9TVDFYX1NZTkNfQ0ZfU0VUVVBfQkFTRV9WKHZhbCk7Ci0JZW5kID0gSE9T VDFYX1NZTkNfQ0ZfU0VUVVBfTElNSVRfVih2YWwpOwotCi0JZG8gewotCQlob3N0MXhfc3luY193 cml0ZWwoaG9zdCwgMHgwLCBIT1NUMVhfU1lOQ19DRlBFRUtfQ1RSTCk7Ci0JCWhvc3QxeF9zeW5j X3dyaXRlbChob3N0LCBIT1NUMVhfU1lOQ19DRlBFRUtfQ1RSTF9FTkFfRigxKSB8Ci0JCQkJICAg SE9TVDFYX1NZTkNfQ0ZQRUVLX0NUUkxfQ0hBTk5SX0YoY2gtPmlkKSB8Ci0JCQkJICAgSE9TVDFY X1NZTkNfQ0ZQRUVLX0NUUkxfQUREUl9GKHJkX3B0ciksCi0JCQkJICAgSE9TVDFYX1NZTkNfQ0ZQ RUVLX0NUUkwpOwotCQl2YWwgPSBob3N0MXhfc3luY19yZWFkbChob3N0LCBIT1NUMVhfU1lOQ19D RlBFRUtfUkVBRCk7Ci0KLQkJaWYgKCFkYXRhX2NvdW50KSB7Ci0JCQlob3N0MXhfZGVidWdfb3V0 cHV0KG8sICIlMDh4OiIsIHZhbCk7Ci0JCQlkYXRhX2NvdW50ID0gc2hvd19jaGFubmVsX2NvbW1h bmQobywgdmFsKTsKLQkJfSBlbHNlIHsKLQkJCWhvc3QxeF9kZWJ1Z19vdXRwdXQobywgIiUwOHgl cyIsIHZhbCwKLQkJCQkJICAgIGRhdGFfY291bnQgPiAwID8gIiwgIiA6ICJdKVxuIik7Ci0JCQlk YXRhX2NvdW50LS07Ci0JCX0KLQotCQlpZiAocmRfcHRyID09IGVuZCkKLQkJCXJkX3B0ciA9IHN0 YXJ0OwotCQllbHNlCi0JCQlyZF9wdHIrKzsKLQl9IHdoaWxlIChyZF9wdHIgIT0gd3JfcHRyKTsK LQotCWlmIChkYXRhX2NvdW50KQotCQlob3N0MXhfZGVidWdfb3V0cHV0KG8sICIsIC4uLl0pXG4i KTsKLQlob3N0MXhfZGVidWdfb3V0cHV0KG8sICJcbiIpOwotCi0JaG9zdDF4X3N5bmNfd3JpdGVs KGhvc3QsIDB4MCwgSE9TVDFYX1NZTkNfQ0ZQRUVLX0NUUkwpOwotfQotCi1zdGF0aWMgdm9pZCBo b3N0MXhfZGVidWdfc2hvd19tbG9ja3Moc3RydWN0IGhvc3QxeCAqaG9zdCwgc3RydWN0IG91dHB1 dCAqbykKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWhvc3QxeF9kZWJ1Z19vdXRwdXQobywgIi0t LS0gbWxvY2tzIC0tLS1cbiIpOwotCi0JZm9yIChpID0gMDsgaSA8IGhvc3QxeF9zeW5jcHRfbmJf bWxvY2tzKGhvc3QpOyBpKyspIHsKLQkJdTMyIG93bmVyID0KLQkJCWhvc3QxeF9zeW5jX3JlYWRs KGhvc3QsIEhPU1QxWF9TWU5DX01MT0NLX09XTkVSKGkpKTsKLQkJaWYgKEhPU1QxWF9TWU5DX01M T0NLX09XTkVSX0NIX09XTlNfVihvd25lcikpCi0JCQlob3N0MXhfZGVidWdfb3V0cHV0KG8sICIl dTogbG9ja2VkIGJ5IGNoYW5uZWwgJXVcbiIsCi0JCQkJaSwgSE9TVDFYX1NZTkNfTUxPQ0tfT1dO RVJfQ0hJRF9WKG93bmVyKSk7Ci0JCWVsc2UgaWYgKEhPU1QxWF9TWU5DX01MT0NLX09XTkVSX0NQ VV9PV05TX1Yob3duZXIpKQotCQkJaG9zdDF4X2RlYnVnX291dHB1dChvLCAiJXU6IGxvY2tlZCBi eSBjcHVcbiIsIGkpOwotCQllbHNlCi0JCQlob3N0MXhfZGVidWdfb3V0cHV0KG8sICIldTogdW5s b2NrZWRcbiIsIGkpOwotCX0KLQotCWhvc3QxeF9kZWJ1Z19vdXRwdXQobywgIlxuIik7Ci19Cisj aWYgSE9TVDFYX0hXID49IDYKKyNpbmNsdWRlICJkZWJ1Z19od18xeDA2LmMiCisjZWxzZQorI2lu Y2x1ZGUgImRlYnVnX2h3XzF4MDEuYyIKKyNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhv c3QxeF9kZWJ1Z19vcHMgaG9zdDF4X2RlYnVnX29wcyA9IHsKIAkuc2hvd19jaGFubmVsX2NkbWEg PSBob3N0MXhfZGVidWdfc2hvd19jaGFubmVsX2NkbWEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9ob3N0MXgvaHcvZGVidWdfaHdfMXgwMS5jIGIvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2RlYnVn X2h3XzF4MDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhmMjQz OTAzY2M3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9kZWJ1Z19o d18xeDAxLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v Z2xlLCBJbmMuCisgKiBBdXRob3I6IEVyaWsgR2lsbGluZyA8a29ua2Vyc0BhbmRyb2lkLmNvbT4K KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBOVklESUEgQ29ycG9yYXRpb24KKyAqCisg KiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0 ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICoKKyAqLworCisjaW5jbHVkZSAiLi4vZGV2LmgiCisjaW5jbHVkZSAiLi4vZGVidWcu aCIKKyNpbmNsdWRlICIuLi9jZG1hLmgiCisjaW5jbHVkZSAiLi4vY2hhbm5lbC5oIgorCitzdGF0 aWMgdm9pZCBob3N0MXhfZGVidWdfc2hvd19jaGFubmVsX2NkbWEoc3RydWN0IGhvc3QxeCAqaG9z dCwKKwkJCQkJICAgc3RydWN0IGhvc3QxeF9jaGFubmVsICpjaCwKKwkJCQkJICAgc3RydWN0IG91 dHB1dCAqbykKK3sKKwlzdHJ1Y3QgaG9zdDF4X2NkbWEgKmNkbWEgPSAmY2gtPmNkbWE7CisJdTMy IGRtYXB1dCwgZG1hZ2V0LCBkbWFjdHJsOworCXUzMiBjYnN0YXQsIGNicmVhZDsKKwl1MzIgdmFs LCBiYXNlLCBiYXNldmFsOworCisJZG1hcHV0ID0gaG9zdDF4X2NoX3JlYWRsKGNoLCBIT1NUMVhf Q0hBTk5FTF9ETUFQVVQpOworCWRtYWdldCA9IGhvc3QxeF9jaF9yZWFkbChjaCwgSE9TVDFYX0NI QU5ORUxfRE1BR0VUKTsKKwlkbWFjdHJsID0gaG9zdDF4X2NoX3JlYWRsKGNoLCBIT1NUMVhfQ0hB Tk5FTF9ETUFDVFJMKTsKKwljYnJlYWQgPSBob3N0MXhfc3luY19yZWFkbChob3N0LCBIT1NUMVhf U1lOQ19DQlJFQUQoY2gtPmlkKSk7CisJY2JzdGF0ID0gaG9zdDF4X3N5bmNfcmVhZGwoaG9zdCwg SE9TVDFYX1NZTkNfQ0JTVEFUKGNoLT5pZCkpOworCisJaG9zdDF4X2RlYnVnX291dHB1dChvLCAi JXUtJXM6ICIsIGNoLT5pZCwgZGV2X25hbWUoY2gtPmRldikpOworCisJaWYgKEhPU1QxWF9DSEFO TkVMX0RNQUNUUkxfRE1BU1RPUF9WKGRtYWN0cmwpIHx8CisJICAgICFjaC0+Y2RtYS5wdXNoX2J1 ZmZlci5tYXBwZWQpIHsKKwkJaG9zdDF4X2RlYnVnX291dHB1dChvLCAiaW5hY3RpdmVcblxuIik7 CisJCXJldHVybjsKKwl9CisKKwlpZiAoSE9TVDFYX1NZTkNfQ0JTVEFUX0NCQ0xBU1NfVihjYnN0 YXQpID09IEhPU1QxWF9DTEFTU19IT1NUMVggJiYKKwkgICAgSE9TVDFYX1NZTkNfQ0JTVEFUX0NC T0ZGU0VUX1YoY2JzdGF0KSA9PQorCQkJSE9TVDFYX1VDTEFTU19XQUlUX1NZTkNQVCkKKwkJaG9z dDF4X2RlYnVnX291dHB1dChvLCAid2FpdGluZyBvbiBzeW5jcHQgJWQgdmFsICVkXG4iLAorCQkJ CSAgICBjYnJlYWQgPj4gMjQsIGNicmVhZCAmIDB4ZmZmZmZmKTsKKwllbHNlIGlmIChIT1NUMVhf U1lOQ19DQlNUQVRfQ0JDTEFTU19WKGNic3RhdCkgPT0KKwkJCQlIT1NUMVhfQ0xBU1NfSE9TVDFY ICYmCisJCSBIT1NUMVhfU1lOQ19DQlNUQVRfQ0JPRkZTRVRfVihjYnN0YXQpID09CisJCQkJSE9T VDFYX1VDTEFTU19XQUlUX1NZTkNQVF9CQVNFKSB7CisJCWJhc2UgPSAoY2JyZWFkID4+IDE2KSAm IDB4ZmY7CisJCWJhc2V2YWwgPQorCQkJaG9zdDF4X3N5bmNfcmVhZGwoaG9zdCwgSE9TVDFYX1NZ TkNfU1lOQ1BUX0JBU0UoYmFzZSkpOworCQl2YWwgPSBjYnJlYWQgJiAweGZmZmY7CisJCWhvc3Qx eF9kZWJ1Z19vdXRwdXQobywgIndhaXRpbmcgb24gc3luY3B0ICVkIHZhbCAlZCAoYmFzZSAlZCA9 ICVkOyBvZmZzZXQgPSAlZClcbiIsCisJCQkJICAgIGNicmVhZCA+PiAyNCwgYmFzZXZhbCArIHZh bCwgYmFzZSwKKwkJCQkgICAgYmFzZXZhbCwgdmFsKTsKKwl9IGVsc2UKKwkJaG9zdDF4X2RlYnVn X291dHB1dChvLCAiYWN0aXZlIGNsYXNzICUwMngsIG9mZnNldCAlMDR4LCB2YWwgJTA4eFxuIiwK KwkJCQkgICAgSE9TVDFYX1NZTkNfQ0JTVEFUX0NCQ0xBU1NfVihjYnN0YXQpLAorCQkJCSAgICBI T1NUMVhfU1lOQ19DQlNUQVRfQ0JPRkZTRVRfVihjYnN0YXQpLAorCQkJCSAgICBjYnJlYWQpOwor CisJaG9zdDF4X2RlYnVnX291dHB1dChvLCAiRE1BUFVUICUwOHgsIERNQUdFVCAlMDh4LCBETUFD VEwgJTA4eFxuIiwKKwkJCSAgICBkbWFwdXQsIGRtYWdldCwgZG1hY3RybCk7CisJaG9zdDF4X2Rl YnVnX291dHB1dChvLCAiQ0JSRUFEICUwOHgsIENCU1RBVCAlMDh4XG4iLCBjYnJlYWQsIGNic3Rh dCk7CisKKwlzaG93X2NoYW5uZWxfZ2F0aGVycyhvLCBjZG1hKTsKKwlob3N0MXhfZGVidWdfb3V0 cHV0KG8sICJcbiIpOworfQorCitzdGF0aWMgdm9pZCBob3N0MXhfZGVidWdfc2hvd19jaGFubmVs X2ZpZm8oc3RydWN0IGhvc3QxeCAqaG9zdCwKKwkJCQkJICAgc3RydWN0IGhvc3QxeF9jaGFubmVs ICpjaCwKKwkJCQkJICAgc3RydWN0IG91dHB1dCAqbykKK3sKKwl1MzIgdmFsLCByZF9wdHIsIHdy X3B0ciwgc3RhcnQsIGVuZDsKKwl1bnNpZ25lZCBpbnQgZGF0YV9jb3VudCA9IDA7CisKKwlob3N0 MXhfZGVidWdfb3V0cHV0KG8sICIldTogZmlmbzpcbiIsIGNoLT5pZCk7CisKKwl2YWwgPSBob3N0 MXhfY2hfcmVhZGwoY2gsIEhPU1QxWF9DSEFOTkVMX0ZJRk9TVEFUKTsKKwlob3N0MXhfZGVidWdf b3V0cHV0KG8sICJGSUZPU1RBVCAlMDh4XG4iLCB2YWwpOworCWlmIChIT1NUMVhfQ0hBTk5FTF9G SUZPU1RBVF9DRkVNUFRZX1YodmFsKSkgeworCQlob3N0MXhfZGVidWdfb3V0cHV0KG8sICJbZW1w dHldXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWhvc3QxeF9zeW5jX3dyaXRlbChob3N0LCAweDAs IEhPU1QxWF9TWU5DX0NGUEVFS19DVFJMKTsKKwlob3N0MXhfc3luY193cml0ZWwoaG9zdCwgSE9T VDFYX1NZTkNfQ0ZQRUVLX0NUUkxfRU5BX0YoMSkgfAorCQkJICAgSE9TVDFYX1NZTkNfQ0ZQRUVL X0NUUkxfQ0hBTk5SX0YoY2gtPmlkKSwKKwkJCSAgIEhPU1QxWF9TWU5DX0NGUEVFS19DVFJMKTsK KworCXZhbCA9IGhvc3QxeF9zeW5jX3JlYWRsKGhvc3QsIEhPU1QxWF9TWU5DX0NGUEVFS19QVFJT KTsKKwlyZF9wdHIgPSBIT1NUMVhfU1lOQ19DRlBFRUtfUFRSU19DRl9SRF9QVFJfVih2YWwpOwor CXdyX3B0ciA9IEhPU1QxWF9TWU5DX0NGUEVFS19QVFJTX0NGX1dSX1BUUl9WKHZhbCk7CisKKwl2 YWwgPSBob3N0MXhfc3luY19yZWFkbChob3N0LCBIT1NUMVhfU1lOQ19DRl9TRVRVUChjaC0+aWQp KTsKKwlzdGFydCA9IEhPU1QxWF9TWU5DX0NGX1NFVFVQX0JBU0VfVih2YWwpOworCWVuZCA9IEhP U1QxWF9TWU5DX0NGX1NFVFVQX0xJTUlUX1YodmFsKTsKKworCWRvIHsKKwkJaG9zdDF4X3N5bmNf d3JpdGVsKGhvc3QsIDB4MCwgSE9TVDFYX1NZTkNfQ0ZQRUVLX0NUUkwpOworCQlob3N0MXhfc3lu Y193cml0ZWwoaG9zdCwgSE9TVDFYX1NZTkNfQ0ZQRUVLX0NUUkxfRU5BX0YoMSkgfAorCQkJCSAg IEhPU1QxWF9TWU5DX0NGUEVFS19DVFJMX0NIQU5OUl9GKGNoLT5pZCkgfAorCQkJCSAgIEhPU1Qx WF9TWU5DX0NGUEVFS19DVFJMX0FERFJfRihyZF9wdHIpLAorCQkJCSAgIEhPU1QxWF9TWU5DX0NG UEVFS19DVFJMKTsKKwkJdmFsID0gaG9zdDF4X3N5bmNfcmVhZGwoaG9zdCwgSE9TVDFYX1NZTkNf Q0ZQRUVLX1JFQUQpOworCisJCWlmICghZGF0YV9jb3VudCkgeworCQkJaG9zdDF4X2RlYnVnX291 dHB1dChvLCAiJTA4eDoiLCB2YWwpOworCQkJZGF0YV9jb3VudCA9IHNob3dfY2hhbm5lbF9jb21t YW5kKG8sIHZhbCk7CisJCX0gZWxzZSB7CisJCQlob3N0MXhfZGVidWdfb3V0cHV0KG8sICIlMDh4 JXMiLCB2YWwsCisJCQkJCSAgICBkYXRhX2NvdW50ID4gMCA/ICIsICIgOiAiXSlcbiIpOworCQkJ ZGF0YV9jb3VudC0tOworCQl9CisKKwkJaWYgKHJkX3B0ciA9PSBlbmQpCisJCQlyZF9wdHIgPSBz dGFydDsKKwkJZWxzZQorCQkJcmRfcHRyKys7CisJfSB3aGlsZSAocmRfcHRyICE9IHdyX3B0cik7 CisKKwlpZiAoZGF0YV9jb3VudCkKKwkJaG9zdDF4X2RlYnVnX291dHB1dChvLCAiLCAuLi5dKVxu Iik7CisJaG9zdDF4X2RlYnVnX291dHB1dChvLCAiXG4iKTsKKworCWhvc3QxeF9zeW5jX3dyaXRl bChob3N0LCAweDAsIEhPU1QxWF9TWU5DX0NGUEVFS19DVFJMKTsKK30KKworc3RhdGljIHZvaWQg aG9zdDF4X2RlYnVnX3Nob3dfbWxvY2tzKHN0cnVjdCBob3N0MXggKmhvc3QsIHN0cnVjdCBvdXRw dXQgKm8pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlob3N0MXhfZGVidWdfb3V0cHV0KG8sICIt LS0tIG1sb2NrcyAtLS0tXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBob3N0MXhfc3luY3B0X25i X21sb2Nrcyhob3N0KTsgaSsrKSB7CisJCXUzMiBvd25lciA9CisJCQlob3N0MXhfc3luY19yZWFk bChob3N0LCBIT1NUMVhfU1lOQ19NTE9DS19PV05FUihpKSk7CisJCWlmIChIT1NUMVhfU1lOQ19N TE9DS19PV05FUl9DSF9PV05TX1Yob3duZXIpKQorCQkJaG9zdDF4X2RlYnVnX291dHB1dChvLCAi JXU6IGxvY2tlZCBieSBjaGFubmVsICV1XG4iLAorCQkJCWksIEhPU1QxWF9TWU5DX01MT0NLX09X TkVSX0NISURfVihvd25lcikpOworCQllbHNlIGlmIChIT1NUMVhfU1lOQ19NTE9DS19PV05FUl9D UFVfT1dOU19WKG93bmVyKSkKKwkJCWhvc3QxeF9kZWJ1Z19vdXRwdXQobywgIiV1OiBsb2NrZWQg YnkgY3B1XG4iLCBpKTsKKwkJZWxzZQorCQkJaG9zdDF4X2RlYnVnX291dHB1dChvLCAiJXU6IHVu bG9ja2VkXG4iLCBpKTsKKwl9CisKKwlob3N0MXhfZGVidWdfb3V0cHV0KG8sICJcbiIpOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2RlYnVnX2h3XzF4MDYuYyBiL2RyaXZl cnMvZ3B1L2hvc3QxeC9ody9kZWJ1Z19od18xeDA2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi45Y2RlZTY1N2ZiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9ob3N0MXgvaHcvZGVidWdfaHdfMXgwNi5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICog Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICogQXV0aG9yOiBFcmlrIEdpbGxpbmcg PGtvbmtlcnNAYW5kcm9pZC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgTlZJ RElBIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIs IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1h eSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgIi4uL2Rldi5o IgorI2luY2x1ZGUgIi4uL2RlYnVnLmgiCisjaW5jbHVkZSAiLi4vY2RtYS5oIgorI2luY2x1ZGUg Ii4uL2NoYW5uZWwuaCIKKworc3RhdGljIHZvaWQgaG9zdDF4X2RlYnVnX3Nob3dfY2hhbm5lbF9j ZG1hKHN0cnVjdCBob3N0MXggKmhvc3QsCisJCQkJCSAgIHN0cnVjdCBob3N0MXhfY2hhbm5lbCAq Y2gsCisJCQkJCSAgIHN0cnVjdCBvdXRwdXQgKm8pCit7CisJc3RydWN0IGhvc3QxeF9jZG1hICpj ZG1hID0gJmNoLT5jZG1hOworCXUzMiBkbWFwdXQsIGRtYWdldCwgZG1hY3RybDsKKwl1MzIgb2Zm c2V0LCBjbGFzczsKKwl1MzIgY2hfc3RhdDsKKworCWRtYXB1dCA9IGhvc3QxeF9jaF9yZWFkbChj aCwgSE9TVDFYX0NIQU5ORUxfRE1BUFVUKTsKKwlkbWFnZXQgPSBob3N0MXhfY2hfcmVhZGwoY2gs IEhPU1QxWF9DSEFOTkVMX0RNQUdFVCk7CisJZG1hY3RybCA9IGhvc3QxeF9jaF9yZWFkbChjaCwg SE9TVDFYX0NIQU5ORUxfRE1BQ1RSTCk7CisJb2Zmc2V0ID0gaG9zdDF4X2NoX3JlYWRsKGNoLCBI T1NUMVhfQ0hBTk5FTF9DTURQX09GRlNFVCk7CisJY2xhc3MgPSBob3N0MXhfY2hfcmVhZGwoY2gs IEhPU1QxWF9DSEFOTkVMX0NNRFBfQ0xBU1MpOworCWNoX3N0YXQgPSBob3N0MXhfY2hfcmVhZGwo Y2gsIEhPU1QxWF9DSEFOTkVMX0NIQU5ORUxTVEFUKTsKKworCWhvc3QxeF9kZWJ1Z19vdXRwdXQo bywgIiV1LSVzOiAiLCBjaC0+aWQsIGRldl9uYW1lKGNoLT5kZXYpKTsKKworCWlmIChkbWFjdHJs ICYgSE9TVDFYX0NIQU5ORUxfRE1BQ1RSTF9ETUFTVE9QIHx8CisJICAgICFjaC0+Y2RtYS5wdXNo X2J1ZmZlci5tYXBwZWQpIHsKKwkJaG9zdDF4X2RlYnVnX291dHB1dChvLCAiaW5hY3RpdmVcblxu Iik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY2xhc3MgPT0gSE9TVDFYX0NMQVNTX0hPU1QxWCAm JiBvZmZzZXQgPT0gSE9TVDFYX1VDTEFTU19XQUlUX1NZTkNQVCkKKwkJaG9zdDF4X2RlYnVnX291 dHB1dChvLCAid2FpdGluZyBvbiBzeW5jcHRcbiIpOworCWVsc2UKKwkJaG9zdDF4X2RlYnVnX291 dHB1dChvLCAiYWN0aXZlIGNsYXNzICUwMngsIG9mZnNldCAlMDR4XG4iLAorCQkJCSAgICBjbGFz cywgb2Zmc2V0KTsKKworCWhvc3QxeF9kZWJ1Z19vdXRwdXQobywgIkRNQVBVVCAlMDh4LCBETUFH RVQgJTA4eCwgRE1BQ1RMICUwOHhcbiIsCisJCQkgICAgZG1hcHV0LCBkbWFnZXQsIGRtYWN0cmwp OworCWhvc3QxeF9kZWJ1Z19vdXRwdXQobywgIkNIQU5ORUxTVEFUICUwMnhcbiIsIGNoX3N0YXQp OworCisJc2hvd19jaGFubmVsX2dhdGhlcnMobywgY2RtYSk7CisJaG9zdDF4X2RlYnVnX291dHB1 dChvLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgaG9zdDF4X2RlYnVnX3Nob3dfY2hhbm5lbF9m aWZvKHN0cnVjdCBob3N0MXggKmhvc3QsCisJCQkJCSAgIHN0cnVjdCBob3N0MXhfY2hhbm5lbCAq Y2gsCisJCQkJCSAgIHN0cnVjdCBvdXRwdXQgKm8pCit7CisJdTMyIHZhbCwgcmRfcHRyLCB3cl9w dHIsIHN0YXJ0LCBlbmQ7CisJdW5zaWduZWQgaW50IGRhdGFfY291bnQgPSAwOworCisJaG9zdDF4 X2RlYnVnX291dHB1dChvLCAiJXU6IGZpZm86XG4iLCBjaC0+aWQpOworCisJdmFsID0gaG9zdDF4 X2NoX3JlYWRsKGNoLCBIT1NUMVhfQ0hBTk5FTF9DTURGSUZPX1NUQVQpOworCWhvc3QxeF9kZWJ1 Z19vdXRwdXQobywgIkNNREZJRk9fU1RBVCAlMDh4XG4iLCB2YWwpOworCWlmICh2YWwgJiBIT1NU MVhfQ0hBTk5FTF9DTURGSUZPX1NUQVRfRU1QVFkpIHsKKwkJaG9zdDF4X2RlYnVnX291dHB1dChv LCAiW2VtcHR5XVxuIik7CisJCXJldHVybjsKKwl9CisKKwl2YWwgPSBob3N0MXhfY2hfcmVhZGwo Y2gsIEhPU1QxWF9DSEFOTkVMX0NNREZJRk9fUkRBVEEpOworCWhvc3QxeF9kZWJ1Z19vdXRwdXQo bywgIkNNREZJRk9fUkRBVEEgJTA4eFxuIiwgdmFsKTsKKworCS8qIFBlZWsgcG9pbnRlciB2YWx1 ZXMgYXJlIGludmFsaWQgZHVyaW5nIFNMQ0csIHNvIGRpc2FibGUgaXQgKi8KKwlob3N0MXhfaHlw ZXJ2aXNvcl93cml0ZWwoaG9zdCwgMHgxLCBIT1NUMVhfSFZfSUNHX0VOX09WRVJSSURFKTsKKwor CXZhbCA9IDA7CisJdmFsIHw9IEhPU1QxWF9IVl9DTURGSUZPX1BFRUtfQ1RSTF9FTkFCTEU7CisJ dmFsIHw9IEhPU1QxWF9IVl9DTURGSUZPX1BFRUtfQ1RSTF9DSEFOTkVMKGNoLT5pZCk7CisJaG9z dDF4X2h5cGVydmlzb3Jfd3JpdGVsKGhvc3QsIHZhbCwgSE9TVDFYX0hWX0NNREZJRk9fUEVFS19D VFJMKTsKKworCXZhbCA9IGhvc3QxeF9oeXBlcnZpc29yX3JlYWRsKGhvc3QsIEhPU1QxWF9IVl9D TURGSUZPX1BFRUtfUFRSUyk7CisJcmRfcHRyID0gSE9TVDFYX0hWX0NNREZJRk9fUEVFS19QVFJT X1JEX1BUUl9WKHZhbCk7CisJd3JfcHRyID0gSE9TVDFYX0hWX0NNREZJRk9fUEVFS19QVFJTX1dS X1BUUl9WKHZhbCk7CisKKwl2YWwgPSBob3N0MXhfaHlwZXJ2aXNvcl9yZWFkbChob3N0LCBIT1NU MVhfSFZfQ01ERklGT19TRVRVUChjaC0+aWQpKTsKKwlzdGFydCA9IEhPU1QxWF9IVl9DTURGSUZP X1NFVFVQX0JBU0VfVih2YWwpOworCWVuZCA9IEhPU1QxWF9IVl9DTURGSUZPX1NFVFVQX0xJTUlU X1YodmFsKTsKKworCWRvIHsKKwkJdmFsID0gMDsKKwkJdmFsIHw9IEhPU1QxWF9IVl9DTURGSUZP X1BFRUtfQ1RSTF9FTkFCTEU7CisJCXZhbCB8PSBIT1NUMVhfSFZfQ01ERklGT19QRUVLX0NUUkxf Q0hBTk5FTChjaC0+aWQpOworCQl2YWwgfD0gSE9TVDFYX0hWX0NNREZJRk9fUEVFS19DVFJMX0FE RFIocmRfcHRyKTsKKwkJaG9zdDF4X2h5cGVydmlzb3Jfd3JpdGVsKGhvc3QsIHZhbCwKKwkJCQkJ IEhPU1QxWF9IVl9DTURGSUZPX1BFRUtfQ1RSTCk7CisKKwkJdmFsID0gaG9zdDF4X2h5cGVydmlz b3JfcmVhZGwoaG9zdCwKKwkJCQkJICAgICAgSE9TVDFYX0hWX0NNREZJRk9fUEVFS19SRUFEKTsK KworCQlpZiAoIWRhdGFfY291bnQpIHsKKwkJCWhvc3QxeF9kZWJ1Z19vdXRwdXQobywgIiUwOHg6 IiwgdmFsKTsKKwkJCWRhdGFfY291bnQgPSBzaG93X2NoYW5uZWxfY29tbWFuZChvLCB2YWwpOwor CQl9IGVsc2UgeworCQkJaG9zdDF4X2RlYnVnX291dHB1dChvLCAiJTA4eCVzIiwgdmFsLAorCQkJ CQkgICAgZGF0YV9jb3VudCA+IDAgPyAiLCAiIDogIl0pXG4iKTsKKwkJCWRhdGFfY291bnQtLTsK KwkJfQorCisJCWlmIChyZF9wdHIgPT0gZW5kKQorCQkJcmRfcHRyID0gc3RhcnQ7CisJCWVsc2UK KwkJCXJkX3B0cisrOworCX0gd2hpbGUgKHJkX3B0ciAhPSB3cl9wdHIpOworCisJaWYgKGRhdGFf Y291bnQpCisJCWhvc3QxeF9kZWJ1Z19vdXRwdXQobywgIiwgLi4uXSlcbiIpOworCWhvc3QxeF9k ZWJ1Z19vdXRwdXQobywgIlxuIik7CisKKwlob3N0MXhfaHlwZXJ2aXNvcl93cml0ZWwoaG9zdCwg MHgwLCBIT1NUMVhfSFZfQ01ERklGT19QRUVLX0NUUkwpOworCWhvc3QxeF9oeXBlcnZpc29yX3dy aXRlbChob3N0LCAweDAsIEhPU1QxWF9IVl9JQ0dfRU5fT1ZFUlJJREUpOworfQorCitzdGF0aWMg dm9pZCBob3N0MXhfZGVidWdfc2hvd19tbG9ja3Moc3RydWN0IGhvc3QxeCAqaG9zdCwgc3RydWN0 IG91dHB1dCAqbykKK3sKKwkvKiBUT0RPICovCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9o b3N0MXgvaHcvaG9zdDF4MDEuYyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwMS5jCmlu ZGV4IDg1OWI3M2JlYjRkMC4uYmIxMjRmOGI0YWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9o b3N0MXgvaHcvaG9zdDF4MDEuYworKysgYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDEu YwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImhvc3QxeDAxX2hhcmR3YXJlLmgiCiAKIC8q IGluY2x1ZGUgY29kZSAqLworI2RlZmluZSBIT1NUMVhfSFcgMQorCiAjaW5jbHVkZSAiY2RtYV9o dy5jIgogI2luY2x1ZGUgImNoYW5uZWxfaHcuYyIKICNpbmNsdWRlICJkZWJ1Z19ody5jIgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2hvc3QxeDAyLmMgYi9kcml2ZXJzL2dwdS9o b3N0MXgvaHcvaG9zdDF4MDIuYwppbmRleCA5Mjg5NDZjMjE0NGIuLmM1Zjg1ZGJlZGI5OCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2hvc3QxeDAyLmMKKysrIGIvZHJpdmVycy9n cHUvaG9zdDF4L2h3L2hvc3QxeDAyLmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJob3N0 MXgwMl9oYXJkd2FyZS5oIgogCiAvKiBpbmNsdWRlIGNvZGUgKi8KKyNkZWZpbmUgSE9TVDFYX0hX IDIKKwogI2luY2x1ZGUgImNkbWFfaHcuYyIKICNpbmNsdWRlICJjaGFubmVsX2h3LmMiCiAjaW5j bHVkZSAiZGVidWdfaHcuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0 MXgwNC5jIGIvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2hvc3QxeDA0LmMKaW5kZXggODAwN2M3MGZh OWM0Li5mMTAyYTFhNzc0M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0 MXgwNC5jCisrKyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwNC5jCkBAIC0yMSw2ICsy MSw4IEBACiAjaW5jbHVkZSAiaG9zdDF4MDRfaGFyZHdhcmUuaCIKIAogLyogaW5jbHVkZSBjb2Rl ICovCisjZGVmaW5lIEhPU1QxWF9IVyA0CisKICNpbmNsdWRlICJjZG1hX2h3LmMiCiAjaW5jbHVk ZSAiY2hhbm5lbF9ody5jIgogI2luY2x1ZGUgImRlYnVnX2h3LmMiCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDUuYyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0 MXgwNS5jCmluZGV4IDA0NzA5N2NlM2JhZC4uMmIxMjM5ZDZlYzY3IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDUuYworKysgYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcv aG9zdDF4MDUuYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImhvc3QxeDA1X2hhcmR3YXJl LmgiCiAKIC8qIGluY2x1ZGUgY29kZSAqLworI2RlZmluZSBIT1NUMVhfSFcgNQorCiAjaW5jbHVk ZSAiY2RtYV9ody5jIgogI2luY2x1ZGUgImNoYW5uZWxfaHcuYyIKICNpbmNsdWRlICJkZWJ1Z19o dy5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2hvc3QxeDA2LmMgYi9kcml2 ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmE2NjIzMDgyN2M1OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2hvc3QxeC9ody9ob3N0MXgwNi5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBIb3N0MXggaW5p dCBmb3IgVGVncmExODYgU29DcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNyBOVklESUEgQ29y cG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1 bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICog bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisv KiBpbmNsdWRlIGh3IHNwZWNpZmljYXRpb24gKi8KKyNpbmNsdWRlICJob3N0MXgwNi5oIgorI2lu Y2x1ZGUgImhvc3QxeDA2X2hhcmR3YXJlLmgiCisKKy8qIGluY2x1ZGUgY29kZSAqLworI2RlZmlu ZSBIT1NUMVhfSFcgNgorCisjaW5jbHVkZSAiY2RtYV9ody5jIgorI2luY2x1ZGUgImNoYW5uZWxf aHcuYyIKKyNpbmNsdWRlICJkZWJ1Z19ody5jIgorI2luY2x1ZGUgImludHJfaHcuYyIKKyNpbmNs dWRlICJzeW5jcHRfaHcuYyIKKworI2luY2x1ZGUgIi4uL2Rldi5oIgorCitpbnQgaG9zdDF4MDZf aW5pdChzdHJ1Y3QgaG9zdDF4ICpob3N0KQoreworCWhvc3QtPmNoYW5uZWxfb3AgPSAmaG9zdDF4 X2NoYW5uZWxfb3BzOworCWhvc3QtPmNkbWFfb3AgPSAmaG9zdDF4X2NkbWFfb3BzOworCWhvc3Qt PmNkbWFfcGJfb3AgPSAmaG9zdDF4X3B1c2hidWZmZXJfb3BzOworCWhvc3QtPnN5bmNwdF9vcCA9 ICZob3N0MXhfc3luY3B0X29wczsKKwlob3N0LT5pbnRyX29wID0gJmhvc3QxeF9pbnRyX29wczsK Kwlob3N0LT5kZWJ1Z19vcCA9ICZob3N0MXhfZGVidWdfb3BzOworCisJcmV0dXJuIDA7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDYuaCBiL2RyaXZlcnMvZ3B1 L2hvc3QxeC9ody9ob3N0MXgwNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uZDlhYmUxNDg5MjQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvaG9zdDF4 L2h3L2hvc3QxeDA2LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIEhvc3QxeCBpbml0IGZvciBU ZWdyYTE4NiBTb0NzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3IE5WSURJQSBDb3Jwb3JhdGlv bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg V0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRl dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYg SE9TVDFYX0hPU1QxWDA2X0gKKyNkZWZpbmUgSE9TVDFYX0hPU1QxWDA2X0gKKworc3RydWN0IGhv c3QxeDsKKworaW50IGhvc3QxeDA2X2luaXQoc3RydWN0IGhvc3QxeCAqaG9zdCk7CisKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2hvc3QxeDA2X2hhcmR3YXJlLmgg Yi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDZfaGFyZHdhcmUuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjMwMzljOTJlYTYwNQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwNl9oYXJkd2FyZS5oCkBAIC0wLDAgKzEs MTQyIEBACisvKgorICogVGVncmEgaG9zdDF4IFJlZ2lzdGVyIE9mZnNldHMgZm9yIFRlZ3JhMTg2 CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3IE5WSURJQSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICog QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hB TlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgor ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX19IT1NUMVhfSE9T VDFYMDZfSEFSRFdBUkVfSAorI2RlZmluZSBfX0hPU1QxWF9IT1NUMVgwNl9IQVJEV0FSRV9ICisK KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisj aW5jbHVkZSAiaHdfaG9zdDF4MDZfdWNsYXNzLmgiCisjaW5jbHVkZSAiaHdfaG9zdDF4MDZfdm0u aCIKKyNpbmNsdWRlICJod19ob3N0MXgwNl9oeXBlcnZpc29yLmgiCisKK3N0YXRpYyBpbmxpbmUg dTMyIGhvc3QxeF9jbGFzc19ob3N0X3dhaXRfc3luY3B0KAorCXVuc2lnbmVkIGluZHgsIHVuc2ln bmVkIHRocmVzaG9sZCkKK3sKKwlyZXR1cm4gaG9zdDF4X3VjbGFzc193YWl0X3N5bmNwdF9pbmR4 X2YoaW5keCkKKwkJfCBob3N0MXhfdWNsYXNzX3dhaXRfc3luY3B0X3RocmVzaF9mKHRocmVzaG9s ZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF9jbGFzc19ob3N0X2xvYWRfc3luY3B0 X2Jhc2UoCisJdW5zaWduZWQgaW5keCwgdW5zaWduZWQgdGhyZXNob2xkKQoreworCXJldHVybiBo b3N0MXhfdWNsYXNzX2xvYWRfc3luY3B0X2Jhc2VfYmFzZV9pbmR4X2YoaW5keCkKKwkJfCBob3N0 MXhfdWNsYXNzX2xvYWRfc3luY3B0X2Jhc2VfdmFsdWVfZih0aHJlc2hvbGQpOworfQorCitzdGF0 aWMgaW5saW5lIHUzMiBob3N0MXhfY2xhc3NfaG9zdF93YWl0X3N5bmNwdF9iYXNlKAorCXVuc2ln bmVkIGluZHgsIHVuc2lnbmVkIGJhc2VfaW5keCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXJldHVy biBob3N0MXhfdWNsYXNzX3dhaXRfc3luY3B0X2Jhc2VfaW5keF9mKGluZHgpCisJCXwgaG9zdDF4 X3VjbGFzc193YWl0X3N5bmNwdF9iYXNlX2Jhc2VfaW5keF9mKGJhc2VfaW5keCkKKwkJfCBob3N0 MXhfdWNsYXNzX3dhaXRfc3luY3B0X2Jhc2Vfb2Zmc2V0X2Yob2Zmc2V0KTsKK30KKworc3RhdGlj IGlubGluZSB1MzIgaG9zdDF4X2NsYXNzX2hvc3RfaW5jcl9zeW5jcHRfYmFzZSgKKwl1bnNpZ25l ZCBiYXNlX2luZHgsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlyZXR1cm4gaG9zdDF4X3VjbGFzc19p bmNyX3N5bmNwdF9iYXNlX2Jhc2VfaW5keF9mKGJhc2VfaW5keCkKKwkJfCBob3N0MXhfdWNsYXNz X2luY3Jfc3luY3B0X2Jhc2Vfb2Zmc2V0X2Yob2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1 MzIgaG9zdDF4X2NsYXNzX2hvc3RfaW5jcl9zeW5jcHQoCisJdW5zaWduZWQgY29uZCwgdW5zaWdu ZWQgaW5keCkKK3sKKwlyZXR1cm4gaG9zdDF4X3VjbGFzc19pbmNyX3N5bmNwdF9jb25kX2YoY29u ZCkKKwkJfCBob3N0MXhfdWNsYXNzX2luY3Jfc3luY3B0X2luZHhfZihpbmR4KTsKK30KKworc3Rh dGljIGlubGluZSB1MzIgaG9zdDF4X2NsYXNzX2hvc3RfaW5kb2ZmX3JlZ193cml0ZSgKKwl1bnNp Z25lZCBtb2RfaWQsIHVuc2lnbmVkIG9mZnNldCwgYm9vbCBhdXRvX2luYykKK3sKKwl1MzIgdiA9 IGhvc3QxeF91Y2xhc3NfaW5kb2ZmX2luZGJlX2YoMHhmKQorCQl8IGhvc3QxeF91Y2xhc3NfaW5k b2ZmX2luZG1vZGlkX2YobW9kX2lkKQorCQl8IGhvc3QxeF91Y2xhc3NfaW5kb2ZmX2luZHJvZmZz ZXRfZihvZmZzZXQpOworCWlmIChhdXRvX2luYykKKwkJdiB8PSBob3N0MXhfdWNsYXNzX2luZG9m Zl9hdXRvaW5jX2YoMSk7CisJcmV0dXJuIHY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3Qx eF9jbGFzc19ob3N0X2luZG9mZl9yZWdfcmVhZCgKKwl1bnNpZ25lZCBtb2RfaWQsIHVuc2lnbmVk IG9mZnNldCwgYm9vbCBhdXRvX2luYykKK3sKKwl1MzIgdiA9IGhvc3QxeF91Y2xhc3NfaW5kb2Zm X2luZG1vZGlkX2YobW9kX2lkKQorCQl8IGhvc3QxeF91Y2xhc3NfaW5kb2ZmX2luZHJvZmZzZXRf ZihvZmZzZXQpCisJCXwgaG9zdDF4X3VjbGFzc19pbmRvZmZfcnduX3JlYWRfdigpOworCWlmIChh dXRvX2luYykKKwkJdiB8PSBob3N0MXhfdWNsYXNzX2luZG9mZl9hdXRvaW5jX2YoMSk7CisJcmV0 dXJuIHY7Cit9CisKKy8qIGNkbWEgb3Bjb2RlcyAqLworc3RhdGljIGlubGluZSB1MzIgaG9zdDF4 X29wY29kZV9zZXRjbGFzcygKKwl1bnNpZ25lZCBjbGFzc19pZCwgdW5zaWduZWQgb2Zmc2V0LCB1 bnNpZ25lZCBtYXNrKQoreworCXJldHVybiAoMCA8PCAyOCkgfCAob2Zmc2V0IDw8IDE2KSB8IChj bGFzc19pZCA8PCA2KSB8IG1hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF9vcGNv ZGVfaW5jcih1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQoreworCXJldHVybiAoMSA8 PCAyOCkgfCAob2Zmc2V0IDw8IDE2KSB8IGNvdW50OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBo b3N0MXhfb3Bjb2RlX25vbmluY3IodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCkKK3sK KwlyZXR1cm4gKDIgPDwgMjgpIHwgKG9mZnNldCA8PCAxNikgfCBjb3VudDsKK30KKworc3RhdGlj IGlubGluZSB1MzIgaG9zdDF4X29wY29kZV9tYXNrKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg bWFzaykKK3sKKwlyZXR1cm4gKDMgPDwgMjgpIHwgKG9mZnNldCA8PCAxNikgfCBtYXNrOworfQor CitzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhfb3Bjb2RlX2ltbSh1bnNpZ25lZCBvZmZzZXQsIHVu c2lnbmVkIHZhbHVlKQoreworCXJldHVybiAoNCA8PCAyOCkgfCAob2Zmc2V0IDw8IDE2KSB8IHZh bHVlOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhfb3Bjb2RlX2ltbV9pbmNyX3N5bmNw dCh1bnNpZ25lZCBjb25kLCB1bnNpZ25lZCBpbmR4KQoreworCXJldHVybiBob3N0MXhfb3Bjb2Rl X2ltbShob3N0MXhfdWNsYXNzX2luY3Jfc3luY3B0X3IoKSwKKwkJaG9zdDF4X2NsYXNzX2hvc3Rf aW5jcl9zeW5jcHQoY29uZCwgaW5keCkpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhf b3Bjb2RlX3Jlc3RhcnQodW5zaWduZWQgYWRkcmVzcykKK3sKKwlyZXR1cm4gKDUgPDwgMjgpIHwg KGFkZHJlc3MgPj4gNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF9vcGNvZGVfZ2F0 aGVyKHVuc2lnbmVkIGNvdW50KQoreworCXJldHVybiAoNiA8PCAyOCkgfCBjb3VudDsKK30KKwor c3RhdGljIGlubGluZSB1MzIgaG9zdDF4X29wY29kZV9nYXRoZXJfbm9uaW5jcih1bnNpZ25lZCBv ZmZzZXQsCXVuc2lnbmVkIGNvdW50KQoreworCXJldHVybiAoNiA8PCAyOCkgfCAob2Zmc2V0IDw8 IDE2KSB8IEJJVCgxNSkgfCBjb3VudDsKK30KKworc3RhdGljIGlubGluZSB1MzIgaG9zdDF4X29w Y29kZV9nYXRoZXJfaW5jcih1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQoreworCXJl dHVybiAoNiA8PCAyOCkgfCAob2Zmc2V0IDw8IDE2KSB8IEJJVCgxNSkgfCBCSVQoMTQpIHwgY291 bnQ7Cit9CisKKyNkZWZpbmUgSE9TVDFYX09QQ09ERV9OT1AgaG9zdDF4X29wY29kZV9ub25pbmNy KDAsIDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2h3X2hv c3QxeDA2X2h5cGVydmlzb3IuaCBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwNl9o eXBlcnZpc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jMDVk YWI4YTE3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaHdfaG9z dDF4MDZfaHlwZXJ2aXNvci5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTcgTlZJRElBIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisgKgorICovCisKKyNkZWZpbmUgSE9TVDFYX0hWX1NZTkNQVF9QUk9UX0VOCQkJMHgx YWM0CisjZGVmaW5lIEhPU1QxWF9IVl9TWU5DUFRfUFJPVF9FTl9DSF9FTgkJCUJJVCgxKQorI2Rl ZmluZSBIT1NUMVhfSFZfQ0hfS0VSTkVMX0ZJTFRFUl9HQlVGRkVSKHgpCQkoMHgyMDIwICsgKHgg KiA0KSkKKyNkZWZpbmUgSE9TVDFYX0hWX0NNREZJRk9fUEVFS19DVFJMCQkJMHgyMzNjCisjZGVm aW5lIEhPU1QxWF9IVl9DTURGSUZPX1BFRUtfQ1RSTF9BRERSKHgpCQkoeCkKKyNkZWZpbmUgSE9T VDFYX0hWX0NNREZJRk9fUEVFS19DVFJMX0NIQU5ORUwoeCkJCSgoeCkgPDwgMTYpCisjZGVmaW5l IEhPU1QxWF9IVl9DTURGSUZPX1BFRUtfQ1RSTF9FTkFCTEUJCUJJVCgzMSkKKyNkZWZpbmUgSE9T VDFYX0hWX0NNREZJRk9fUEVFS19SRUFECQkJMHgyMzQwCisjZGVmaW5lIEhPU1QxWF9IVl9DTURG SUZPX1BFRUtfUFRSUwkJCTB4MjM0NAorI2RlZmluZSBIT1NUMVhfSFZfQ01ERklGT19QRUVLX1BU UlNfV1JfUFRSX1YoeCkJCSgoKHgpID4+IDE2KSAmIDB4ZmZmKQorI2RlZmluZSBIT1NUMVhfSFZf Q01ERklGT19QRUVLX1BUUlNfUkRfUFRSX1YoeCkJCSgoeCkgJiAweGZmZikKKyNkZWZpbmUgSE9T VDFYX0hWX0NNREZJRk9fU0VUVVAoeCkJCQkoMHgyNTg4ICsgKHggKiA0KSkKKyNkZWZpbmUgSE9T VDFYX0hWX0NNREZJRk9fU0VUVVBfTElNSVRfVih4KQkJKCgoeCkgPj4gMTYpICYgMHhmZmYpCisj ZGVmaW5lIEhPU1QxWF9IVl9DTURGSUZPX1NFVFVQX0JBU0VfVih4KQkJKCh4KSAmIDB4ZmZmKQor I2RlZmluZSBIT1NUMVhfSFZfSUNHX0VOX09WRVJSSURFCQkJMHgyYWE4CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9ob3N0MXgvaHcvaHdfaG9zdDF4MDZfdWNsYXNzLmggYi9kcml2ZXJzL2dwdS9o b3N0MXgvaHcvaHdfaG9zdDF4MDZfdWNsYXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi40NDU3NDg2YzcyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9ob3N0MXgvaHcvaHdfaG9zdDF4MDZfdWNsYXNzLmgKQEAgLTAsMCArMSwxODEgQEAKKy8qCisg KiBDb3B5cmlnaHQgKGMpIDIwMTcgTlZJRElBIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJ VFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyAvKgorICAqIEZ1bmN0aW9uIG5hbWlu ZyBkZXRlcm1pbmVzIGludGVuZGVkIHVzZToKKyAgKgorICAqICAgICA8eD5fcih2b2lkKSA6IFJl dHVybnMgdGhlIG9mZnNldCBmb3IgcmVnaXN0ZXIgPHg+LgorICAqCisgICogICAgIDx4Pl93KHZv aWQpIDogUmV0dXJucyB0aGUgd29yZCBvZmZzZXQgZm9yIHdvcmQgKDQgYnl0ZSkgZWxlbWVudCA8 eD4uCisgICoKKyAgKiAgICAgPHg+Xzx5Pl9zKHZvaWQpIDogUmV0dXJucyBzaXplIG9mIGZpZWxk IDx5PiBvZiByZWdpc3RlciA8eD4gaW4gYml0cy4KKyAgKgorICAqICAgICA8eD5fPHk+X2YodTMy IHYpIDogUmV0dXJucyBhIHZhbHVlIGJhc2VkIG9uICd2JyB3aGljaCBoYXMgYmVlbiBzaGlmdGVk CisgICogICAgICAgICBhbmQgbWFza2VkIHRvIHBsYWNlIGl0IGF0IGZpZWxkIDx5PiBvZiByZWdp c3RlciA8eD4uICBUaGlzIHZhbHVlCisgICogICAgICAgICBjYW4gYmUgfCdkIHdpdGggb3RoZXJz IHRvIHByb2R1Y2UgYSBmdWxsIHJlZ2lzdGVyIHZhbHVlIGZvcgorICAqICAgICAgICAgcmVnaXN0 ZXIgPHg+LgorICAqCisgICogICAgIDx4Pl88eT5fbSh2b2lkKSA6IFJldHVybnMgYSBtYXNrIGZv ciBmaWVsZCA8eT4gb2YgcmVnaXN0ZXIgPHg+LiAgVGhpcworICAqICAgICAgICAgdmFsdWUgY2Fu IGJlIH4nZCBhbmQgdGhlbiAmJ2QgdG8gY2xlYXIgdGhlIHZhbHVlIG9mIGZpZWxkIDx5PiBmb3IK KyAgKiAgICAgICAgIHJlZ2lzdGVyIDx4Pi4KKyAgKgorICAqICAgICA8eD5fPHk+Xzx6Pl9mKHZv aWQpIDogUmV0dXJucyB0aGUgY29uc3RhbnQgdmFsdWUgPHo+IGFmdGVyIGJlaW5nIHNoaWZ0ZWQK KyAgKiAgICAgICAgIHRvIHBsYWNlIGl0IGF0IGZpZWxkIDx5PiBvZiByZWdpc3RlciA8eD4uICBU aGlzIHZhbHVlIGNhbiBiZSB8J2QKKyAgKiAgICAgICAgIHdpdGggb3RoZXJzIHRvIHByb2R1Y2Ug YSBmdWxsIHJlZ2lzdGVyIHZhbHVlIGZvciA8eD4uCisgICoKKyAgKiAgICAgPHg+Xzx5Pl92KHUz MiByKSA6IFJldHVybnMgdGhlIHZhbHVlIG9mIGZpZWxkIDx5PiBmcm9tIGEgZnVsbCByZWdpc3Rl cgorICAqICAgICAgICAgPHg+IHZhbHVlICdyJyBhZnRlciBiZWluZyBzaGlmdGVkIHRvIHBsYWNl IGl0cyBMU0IgYXQgYml0IDAuCisgICogICAgICAgICBUaGlzIHZhbHVlIGlzIHN1aXRhYmxlIGZv ciBkaXJlY3QgY29tcGFyaXNvbiB3aXRoIG90aGVyIHVuc2hpZnRlZAorICAqICAgICAgICAgdmFs dWVzIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gZmllbGQgPHk+IG9mIHJlZ2lzdGVyIDx4Pi4KKyAg KgorICAqICAgICA8eD5fPHk+Xzx6Pl92KHZvaWQpIDogUmV0dXJucyB0aGUgY29uc3RhbnQgdmFs dWUgZm9yIDx6PiBkZWZpbmVkIGZvcgorICAqICAgICAgICAgZmllbGQgPHk+IG9mIHJlZ2lzdGVy IDx4Pi4gIFRoaXMgdmFsdWUgaXMgc3VpdGFibGUgZm9yIGRpcmVjdAorICAqICAgICAgICAgY29t cGFyaXNvbiB3aXRoIHVuc2hpZnRlZCB2YWx1ZXMgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBmaWVs ZCA8eT4KKyAgKiAgICAgICAgIG9mIHJlZ2lzdGVyIDx4Pi4KKyAgKi8KKworI2lmbmRlZiBIT1NU MVhfSFdfSE9TVDFYMDZfVUNMQVNTX0gKKyNkZWZpbmUgSE9TVDFYX0hXX0hPU1QxWDA2X1VDTEFT U19ICisKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF91Y2xhc3NfaW5jcl9zeW5jcHRfcih2b2lk KQoreworCXJldHVybiAweDA7Cit9CisjZGVmaW5lIEhPU1QxWF9VQ0xBU1NfSU5DUl9TWU5DUFQg XAorCWhvc3QxeF91Y2xhc3NfaW5jcl9zeW5jcHRfcigpCitzdGF0aWMgaW5saW5lIHUzMiBob3N0 MXhfdWNsYXNzX2luY3Jfc3luY3B0X2NvbmRfZih1MzIgdikKK3sKKwlyZXR1cm4gKHYgJiAweGZm KSA8PCA4OworfQorI2RlZmluZSBIT1NUMVhfVUNMQVNTX0lOQ1JfU1lOQ1BUX0NPTkRfRih2KSBc CisJaG9zdDF4X3VjbGFzc19pbmNyX3N5bmNwdF9jb25kX2YodikKK3N0YXRpYyBpbmxpbmUgdTMy IGhvc3QxeF91Y2xhc3NfaW5jcl9zeW5jcHRfaW5keF9mKHUzMiB2KQoreworCXJldHVybiAodiAm IDB4ZmYpIDw8IDA7Cit9CisjZGVmaW5lIEhPU1QxWF9VQ0xBU1NfSU5DUl9TWU5DUFRfSU5EWF9G KHYpIFwKKwlob3N0MXhfdWNsYXNzX2luY3Jfc3luY3B0X2luZHhfZih2KQorc3RhdGljIGlubGlu ZSB1MzIgaG9zdDF4X3VjbGFzc193YWl0X3N5bmNwdF9yKHZvaWQpCit7CisJcmV0dXJuIDB4ODsK K30KKyNkZWZpbmUgSE9TVDFYX1VDTEFTU19XQUlUX1NZTkNQVCBcCisJaG9zdDF4X3VjbGFzc193 YWl0X3N5bmNwdF9yKCkKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF91Y2xhc3Nfd2FpdF9zeW5j cHRfaW5keF9mKHUzMiB2KQoreworCXJldHVybiAodiAmIDB4ZmYpIDw8IDI0OworfQorI2RlZmlu ZSBIT1NUMVhfVUNMQVNTX1dBSVRfU1lOQ1BUX0lORFhfRih2KSBcCisJaG9zdDF4X3VjbGFzc193 YWl0X3N5bmNwdF9pbmR4X2YodikKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF91Y2xhc3Nfd2Fp dF9zeW5jcHRfdGhyZXNoX2YodTMyIHYpCit7CisJcmV0dXJuICh2ICYgMHhmZmZmZmYpIDw8IDA7 Cit9CisjZGVmaW5lIEhPU1QxWF9VQ0xBU1NfV0FJVF9TWU5DUFRfVEhSRVNIX0YodikgXAorCWhv c3QxeF91Y2xhc3Nfd2FpdF9zeW5jcHRfdGhyZXNoX2YodikKK3N0YXRpYyBpbmxpbmUgdTMyIGhv c3QxeF91Y2xhc3Nfd2FpdF9zeW5jcHRfYmFzZV9yKHZvaWQpCit7CisJcmV0dXJuIDB4OTsKK30K KyNkZWZpbmUgSE9TVDFYX1VDTEFTU19XQUlUX1NZTkNQVF9CQVNFIFwKKwlob3N0MXhfdWNsYXNz X3dhaXRfc3luY3B0X2Jhc2VfcigpCitzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhfdWNsYXNzX3dh aXRfc3luY3B0X2Jhc2VfaW5keF9mKHUzMiB2KQoreworCXJldHVybiAodiAmIDB4ZmYpIDw8IDI0 OworfQorI2RlZmluZSBIT1NUMVhfVUNMQVNTX1dBSVRfU1lOQ1BUX0JBU0VfSU5EWF9GKHYpIFwK Kwlob3N0MXhfdWNsYXNzX3dhaXRfc3luY3B0X2Jhc2VfaW5keF9mKHYpCitzdGF0aWMgaW5saW5l IHUzMiBob3N0MXhfdWNsYXNzX3dhaXRfc3luY3B0X2Jhc2VfYmFzZV9pbmR4X2YodTMyIHYpCit7 CisJcmV0dXJuICh2ICYgMHhmZikgPDwgMTY7Cit9CisjZGVmaW5lIEhPU1QxWF9VQ0xBU1NfV0FJ VF9TWU5DUFRfQkFTRV9CQVNFX0lORFhfRih2KSBcCisJaG9zdDF4X3VjbGFzc193YWl0X3N5bmNw dF9iYXNlX2Jhc2VfaW5keF9mKHYpCitzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhfdWNsYXNzX3dh aXRfc3luY3B0X2Jhc2Vfb2Zmc2V0X2YodTMyIHYpCit7CisJcmV0dXJuICh2ICYgMHhmZmZmKSA8 PCAwOworfQorI2RlZmluZSBIT1NUMVhfVUNMQVNTX1dBSVRfU1lOQ1BUX0JBU0VfT0ZGU0VUX0Yo dikgXAorCWhvc3QxeF91Y2xhc3Nfd2FpdF9zeW5jcHRfYmFzZV9vZmZzZXRfZih2KQorc3RhdGlj IGlubGluZSB1MzIgaG9zdDF4X3VjbGFzc19sb2FkX3N5bmNwdF9iYXNlX3Iodm9pZCkKK3sKKwly ZXR1cm4gMHhiOworfQorI2RlZmluZSBIT1NUMVhfVUNMQVNTX0xPQURfU1lOQ1BUX0JBU0UgXAor CWhvc3QxeF91Y2xhc3NfbG9hZF9zeW5jcHRfYmFzZV9yKCkKK3N0YXRpYyBpbmxpbmUgdTMyIGhv c3QxeF91Y2xhc3NfbG9hZF9zeW5jcHRfYmFzZV9iYXNlX2luZHhfZih1MzIgdikKK3sKKwlyZXR1 cm4gKHYgJiAweGZmKSA8PCAyNDsKK30KKyNkZWZpbmUgSE9TVDFYX1VDTEFTU19MT0FEX1NZTkNQ VF9CQVNFX0JBU0VfSU5EWF9GKHYpIFwKKwlob3N0MXhfdWNsYXNzX2xvYWRfc3luY3B0X2Jhc2Vf YmFzZV9pbmR4X2YodikKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF91Y2xhc3NfbG9hZF9zeW5j cHRfYmFzZV92YWx1ZV9mKHUzMiB2KQoreworCXJldHVybiAodiAmIDB4ZmZmZmZmKSA8PCAwOwor fQorI2RlZmluZSBIT1NUMVhfVUNMQVNTX0xPQURfU1lOQ1BUX0JBU0VfVkFMVUVfRih2KSBcCisJ aG9zdDF4X3VjbGFzc19sb2FkX3N5bmNwdF9iYXNlX3ZhbHVlX2YodikKK3N0YXRpYyBpbmxpbmUg dTMyIGhvc3QxeF91Y2xhc3NfaW5jcl9zeW5jcHRfYmFzZV9iYXNlX2luZHhfZih1MzIgdikKK3sK KwlyZXR1cm4gKHYgJiAweGZmKSA8PCAyNDsKK30KKyNkZWZpbmUgSE9TVDFYX1VDTEFTU19JTkNS X1NZTkNQVF9CQVNFX0JBU0VfSU5EWF9GKHYpIFwKKwlob3N0MXhfdWNsYXNzX2luY3Jfc3luY3B0 X2Jhc2VfYmFzZV9pbmR4X2YodikKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF91Y2xhc3NfaW5j cl9zeW5jcHRfYmFzZV9vZmZzZXRfZih1MzIgdikKK3sKKwlyZXR1cm4gKHYgJiAweGZmZmZmZikg PDwgMDsKK30KKyNkZWZpbmUgSE9TVDFYX1VDTEFTU19JTkNSX1NZTkNQVF9CQVNFX09GRlNFVF9G KHYpIFwKKwlob3N0MXhfdWNsYXNzX2luY3Jfc3luY3B0X2Jhc2Vfb2Zmc2V0X2YodikKK3N0YXRp YyBpbmxpbmUgdTMyIGhvc3QxeF91Y2xhc3NfaW5kb2ZmX3Iodm9pZCkKK3sKKwlyZXR1cm4gMHgy ZDsKK30KKyNkZWZpbmUgSE9TVDFYX1VDTEFTU19JTkRPRkYgXAorCWhvc3QxeF91Y2xhc3NfaW5k b2ZmX3IoKQorc3RhdGljIGlubGluZSB1MzIgaG9zdDF4X3VjbGFzc19pbmRvZmZfaW5kYmVfZih1 MzIgdikKK3sKKwlyZXR1cm4gKHYgJiAweGYpIDw8IDI4OworfQorI2RlZmluZSBIT1NUMVhfVUNM QVNTX0lORE9GRl9JTkRCRV9GKHYpIFwKKwlob3N0MXhfdWNsYXNzX2luZG9mZl9pbmRiZV9mKHYp CitzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhfdWNsYXNzX2luZG9mZl9hdXRvaW5jX2YodTMyIHYp Cit7CisJcmV0dXJuICh2ICYgMHgxKSA8PCAyNzsKK30KKyNkZWZpbmUgSE9TVDFYX1VDTEFTU19J TkRPRkZfQVVUT0lOQ19GKHYpIFwKKwlob3N0MXhfdWNsYXNzX2luZG9mZl9hdXRvaW5jX2YodikK K3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF91Y2xhc3NfaW5kb2ZmX2luZG1vZGlkX2YodTMyIHYp Cit7CisJcmV0dXJuICh2ICYgMHhmZikgPDwgMTg7Cit9CisjZGVmaW5lIEhPU1QxWF9VQ0xBU1Nf SU5ET0ZGX0lORE1PRElEX0YodikgXAorCWhvc3QxeF91Y2xhc3NfaW5kb2ZmX2luZG1vZGlkX2Yo dikKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF91Y2xhc3NfaW5kb2ZmX2luZHJvZmZzZXRfZih1 MzIgdikKK3sKKwlyZXR1cm4gKHYgJiAweGZmZmYpIDw8IDI7Cit9CisjZGVmaW5lIEhPU1QxWF9V Q0xBU1NfSU5ET0ZGX0lORFJPRkZTRVRfRih2KSBcCisJaG9zdDF4X3VjbGFzc19pbmRvZmZfaW5k cm9mZnNldF9mKHYpCitzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhfdWNsYXNzX2luZG9mZl9yd25f cmVhZF92KHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisjZGVmaW5lIEhPU1QxWF9VQ0xBU1NfSU5E T0ZGX0lORFJPRkZTRVRfRih2KSBcCisJaG9zdDF4X3VjbGFzc19pbmRvZmZfaW5kcm9mZnNldF9m KHYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2h3X2hvc3Qx eDA2X3ZtLmggYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaHdfaG9zdDF4MDZfdm0uaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU1NGIzMzkwMjMzMgotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwNl92bS5oCkBAIC0wLDAg KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcgTlZJRElBIENvcnBvcmF0aW9uLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWls cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICovCisKKyNkZWZpbmUg SE9TVDFYX0NIQU5ORUxfRE1BU1RBUlQJCQkJMHgwMDAwCisjZGVmaW5lIEhPU1QxWF9DSEFOTkVM X0RNQVNUQVJUX0hJCQkJMHgwMDA0CisjZGVmaW5lIEhPU1QxWF9DSEFOTkVMX0RNQVBVVAkJCQkw eDAwMDgKKyNkZWZpbmUgSE9TVDFYX0NIQU5ORUxfRE1BUFVUX0hJCQkJMHgwMDBjCisjZGVmaW5l IEhPU1QxWF9DSEFOTkVMX0RNQUdFVAkJCQkweDAwMTAKKyNkZWZpbmUgSE9TVDFYX0NIQU5ORUxf RE1BR0VUX0hJCQkJMHgwMDE0CisjZGVmaW5lIEhPU1QxWF9DSEFOTkVMX0RNQUVORAkJCQkweDAw MTgKKyNkZWZpbmUgSE9TVDFYX0NIQU5ORUxfRE1BRU5EX0hJCQkJMHgwMDFjCisjZGVmaW5lIEhP U1QxWF9DSEFOTkVMX0RNQUNUUkwJCQkJMHgwMDIwCisjZGVmaW5lIEhPU1QxWF9DSEFOTkVMX0RN QUNUUkxfRE1BU1RPUAkJCUJJVCgwKQorI2RlZmluZSBIT1NUMVhfQ0hBTk5FTF9ETUFDVFJMX0RN QUdFVFJTVAkJQklUKDEpCisjZGVmaW5lIEhPU1QxWF9DSEFOTkVMX0RNQUNUUkxfRE1BSU5JVEdF VAkJQklUKDIpCisjZGVmaW5lIEhPU1QxWF9DSEFOTkVMX0NNREZJRk9fU1RBVAkJCTB4MDAyNAor I2RlZmluZSBIT1NUMVhfQ0hBTk5FTF9DTURGSUZPX1NUQVRfRU1QVFkJCUJJVCgxMykKKyNkZWZp bmUgSE9TVDFYX0NIQU5ORUxfQ01ERklGT19SREFUQQkJCTB4MDAyOAorI2RlZmluZSBIT1NUMVhf Q0hBTk5FTF9DTURQX09GRlNFVAkJCTB4MDAzMAorI2RlZmluZSBIT1NUMVhfQ0hBTk5FTF9DTURQ X0NMQVNTCQkJMHgwMDM0CisjZGVmaW5lIEhPU1QxWF9DSEFOTkVMX0NIQU5ORUxTVEFUCQkJMHgw MDM4CisjZGVmaW5lIEhPU1QxWF9DSEFOTkVMX0NNRFBST0NfU1RPUAkJCTB4MDA0OAorI2RlZmlu ZSBIT1NUMVhfQ0hBTk5FTF9URUFSRE9XTgkJCQkweDAwNGMKKworI2RlZmluZSBIT1NUMVhfU1lO Q19TWU5DUFRfQ1BVX0lOQ1IoeCkJCQkoMHg2NDAwICsgNCooeCkpCisjZGVmaW5lIEhPU1QxWF9T WU5DX1NZTkNQVF9USFJFU0hfQ1BVMF9JTlRfU1RBVFVTKHgpCSgweDY0NjQgKyA0Kih4KSkKKyNk ZWZpbmUgSE9TVDFYX1NZTkNfU1lOQ1BUX1RIUkVTSF9JTlRfRU5BQkxFX0NQVTAoeCkJKDB4NjUy YyArIDQqKHgpKQorI2RlZmluZSBIT1NUMVhfU1lOQ19TWU5DUFRfVEhSRVNIX0lOVF9ESVNBQkxF KHgpCSgweDY1OTAgKyA0Kih4KSkKKyNkZWZpbmUgSE9TVDFYX1NZTkNfU1lOQ1BUX0JBU0UoeCkJ CQkoMHg4MDAwICsgNCooeCkpCisjZGVmaW5lIEhPU1QxWF9TWU5DX1NZTkNQVCh4KQkJCQkoMHg4 MDgwICsgNCooeCkpCisjZGVmaW5lIEhPU1QxWF9TWU5DX1NZTkNQVF9JTlRfVEhSRVNIKHgpCQko MHg4YTAwICsgNCooeCkpCisjZGVmaW5lIEhPU1QxWF9TWU5DX1NZTkNQVF9DSF9BUFAoeCkJCQko MHg5Mzg0ICsgNCooeCkpCisjZGVmaW5lIEhPU1QxWF9TWU5DX1NZTkNQVF9DSF9BUFBfQ0godikJ CQkoKCh2KSAmIDB4M2YpIDw8IDgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9ob3N0MXgvaHcv aW50cl9ody5jIGIvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2ludHJfaHcuYwppbmRleCAzN2ViYjUx NzAzZmEuLjMyOTIzOTIzNzA5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2lu dHJfaHcuYworKysgYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaW50cl9ody5jCkBAIC03Miw2ICs3 MiwyMyBAQCBzdGF0aWMgdm9pZCBfaG9zdDF4X2ludHJfZGlzYWJsZV9hbGxfc3luY3B0X2ludHJz KHN0cnVjdCBob3N0MXggKmhvc3QpCiAJfQogfQogCitzdGF0aWMgdm9pZCBpbnRyX2h3X2luaXQo c3RydWN0IGhvc3QxeCAqaG9zdCwgdTMyIGNwbSkKK3sKKyNpZiBIT1NUMVhfSFcgPCA2CisJLyog ZGlzYWJsZSB0aGUgaXBfYnVzeV90aW1lb3V0LiB0aGlzIHByZXZlbnRzIHdyaXRlIGRyb3BzICov CisJaG9zdDF4X3N5bmNfd3JpdGVsKGhvc3QsIDAsIEhPU1QxWF9TWU5DX0lQX0JVU1lfVElNRU9V VCk7CisKKwkvKgorCSAqIGluY3JlYXNlIHRoZSBhdXRvLWFjayB0aW1vdXQgdG8gdGhlIG1heGlt dW0gdmFsdWUuIDJkIHdpbGwgaGFuZworCSAqIG90aGVyd2lzZSBvbiBUZWdyYTIuCisJICovCisJ aG9zdDF4X3N5bmNfd3JpdGVsKGhvc3QsIDB4ZmYsIEhPU1QxWF9TWU5DX0NUWFNXX1RJTUVPVVRf Q0ZHKTsKKworCS8qIHVwZGF0ZSBob3N0IGNsb2NrcyBwZXIgdXNlYyAqLworCWhvc3QxeF9zeW5j X3dyaXRlbChob3N0LCBjcG0sIEhPU1QxWF9TWU5DX1VTRUNfQ0xLKTsKKyNlbmRpZgorfQorCiBz dGF0aWMgaW50CiBfaG9zdDF4X2ludHJfaW5pdF9ob3N0X3N5bmMoc3RydWN0IGhvc3QxeCAqaG9z dCwgdTMyIGNwbSwKIAkJCSAgICB2b2lkICgqc3luY3B0X3RocmVzaF93b3JrKShzdHJ1Y3Qgd29y a19zdHJ1Y3QgKikpCkBAIC05MiwxNyArMTA5LDcgQEAgX2hvc3QxeF9pbnRyX2luaXRfaG9zdF9z eW5jKHN0cnVjdCBob3N0MXggKmhvc3QsIHUzMiBjcG0sCiAJCXJldHVybiBlcnI7CiAJfQogCi0J LyogZGlzYWJsZSB0aGUgaXBfYnVzeV90aW1lb3V0LiB0aGlzIHByZXZlbnRzIHdyaXRlIGRyb3Bz ICovCi0JaG9zdDF4X3N5bmNfd3JpdGVsKGhvc3QsIDAsIEhPU1QxWF9TWU5DX0lQX0JVU1lfVElN RU9VVCk7Ci0KLQkvKgotCSAqIGluY3JlYXNlIHRoZSBhdXRvLWFjayB0aW1vdXQgdG8gdGhlIG1h eGltdW0gdmFsdWUuIDJkIHdpbGwgaGFuZwotCSAqIG90aGVyd2lzZSBvbiBUZWdyYTIuCi0JICov Ci0JaG9zdDF4X3N5bmNfd3JpdGVsKGhvc3QsIDB4ZmYsIEhPU1QxWF9TWU5DX0NUWFNXX1RJTUVP VVRfQ0ZHKTsKLQotCS8qIHVwZGF0ZSBob3N0IGNsb2NrcyBwZXIgdXNlYyAqLwotCWhvc3QxeF9z eW5jX3dyaXRlbChob3N0LCBjcG0sIEhPU1QxWF9TWU5DX1VTRUNfQ0xLKTsKKwlpbnRyX2h3X2lu aXQoaG9zdCwgY3BtKTsKIAogCXJldHVybiAwOwogfQotLSAKMi4xNC4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK